<?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>39901</bug_id>
          
          <creation_ts>2010-05-28 14:25:13 -0700</creation_ts>
          <short_desc>Simplified the host calling convention</short_desc>
          <delta_ts>2010-07-02 12:33:46 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          <cc>barraclough</cc>
    
    <cc>eric</cc>
    
    <cc>fu</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>loki</cc>
    
    <cc>oliver</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>231936</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-05-28 14:25:13 -0700</bug_when>
    <thetext>I&apos;m posting three patches:

- A behavior change patch that includes the interesting bits.
- A global find-and-replace patch that makes everything compatible with the new calling convention.
- A megapatch for the EWS bot to test, not for actual review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>231937</commentid>
    <comment_count>1</comment_count>
      <attachid>57378</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-05-28 14:25:51 -0700</bug_when>
    <thetext>Created attachment 57378
megapatch - DO NOT REVIEW</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>231938</commentid>
    <comment_count>2</comment_count>
      <attachid>57379</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-05-28 14:26:20 -0700</bug_when>
    <thetext>Created attachment 57379
PART ONE: Functional code changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>231939</commentid>
    <comment_count>3</comment_count>
      <attachid>57380</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-05-28 14:26:52 -0700</bug_when>
    <thetext>Created attachment 57380
PART TWO: Global search and replace</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>231941</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-28 14:30:32 -0700</bug_when>
    <thetext>Attachment 57380 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/bindings/js/JSClipboardCustom.cpp:70:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 1 in 111 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>231945</commentid>
    <comment_count>5</comment_count>
      <attachid>57381</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-05-28 14:33:54 -0700</bug_when>
    <thetext>Created attachment 57381
PART TWO: Global search and replace

Fixed style bot issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>231960</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-28 14:53:20 -0700</bug_when>
    <thetext>Attachment 57381 did not build on mac:
Build output: http://webkit-commit-queue.appspot.com/results/2624046</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>231966</commentid>
    <comment_count>7</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-05-28 15:15:26 -0700</bug_when>
    <thetext>Attachment 57381 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/2602059</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>231971</commentid>
    <comment_count>8</comment_count>
      <attachid>57379</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-05-28 15:30:05 -0700</bug_when>
    <thetext>Comment on attachment 57379
PART ONE: Functional code changes

JavaScriptCore/jit/JITOpcodes32_64.cpp:306
 +      subPtr(Imm32(16 - sizeof(void*)), stackPointerRegister);
These stack alignment operations could use a comment.

JavaScriptCore/jit/JITOpcodes.cpp:325
 +      };
These empty structs weird me out a bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>231976</commentid>
    <comment_count>9</comment_count>
      <attachid>57379</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-05-28 15:40:55 -0700</bug_when>
    <thetext>Comment on attachment 57379
PART ONE: Functional code changes

JavaScriptCore/interpreter/Interpreter.cpp:632
 +      m_registerFile.shrink(callFrame-&gt;registers() + callFrame-&gt;codeBlock()-&gt;m_numCalleeRegisters);
Is this a functional change we should land in a separate patch, in case it has unexpected side-effects?

JavaScriptCore/interpreter/Interpreter.cpp:710
 +      ASSERT(!callFrame-&gt;globalData().exception);
Could be ASSERT(!callFrame-&gt;hadException());

JavaScriptCore/interpreter/Register.h:61
 +          Register&amp; operator=(JSObject*);
This is a world of danger.  Please to be making this a static function (e.g. make people do something explicit like &quot;Register::withFunction()&quot;), or only write functions to the register file as JSValues.

JavaScriptCore/jit/JITOpcodes32_64.cpp:281
 +      emitGetFromCallFrameHeaderPtr(RegisterFile::ScopeChain, regT1, regT0);
I think you wanted to change both T1s to T0s here.

JavaScriptCore/jit/JITOpcodes32_64.cpp:399
 +      emitGetFromCallFrameHeaderPtr(RegisterFile::ScopeChain, regT1, regT0);
another T1 -&gt; T0 required</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232018</commentid>
    <comment_count>10</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-05-28 17:08:44 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 57379 [details])
&gt; JavaScriptCore/jit/JITOpcodes32_64.cpp:306
&gt;  +      subPtr(Imm32(16 - sizeof(void*)), stackPointerRegister);
&gt; These stack alignment operations could use a comment.

Fixed.

&gt; JavaScriptCore/jit/JITOpcodes.cpp:325
&gt;  +      };
&gt; These empty structs weird me out a bit.

Got rid of them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232020</commentid>
    <comment_count>11</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-05-28 17:11:18 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 57379 [details])
&gt; JavaScriptCore/interpreter/Interpreter.cpp:632
&gt;  +      m_registerFile.shrink(callFrame-&gt;registers() + callFrame-&gt;codeBlock()-&gt;m_numCalleeRegisters);
&gt; Is this a functional change we should land in a separate patch, in case it has unexpected side-effects?

Maybe. I chose to include it because it helped solve some of the stack overflow layout test changes. The alternative would be to change the expected results on even more tests, which I was trying to avoid.

&gt; JavaScriptCore/interpreter/Interpreter.cpp:710
&gt;  +      ASSERT(!callFrame-&gt;globalData().exception);
&gt; Could be ASSERT(!callFrame-&gt;hadException());

Fixed.

&gt; 
&gt; JavaScriptCore/interpreter/Register.h:61
&gt;  +          Register&amp; operator=(JSObject*);
&gt; This is a world of danger.  Please to be making this a static function (e.g. make people do something explicit like &quot;Register::withFunction()&quot;), or only write functions to the register file as JSValues.

Fixed.

&gt; 
&gt; JavaScriptCore/jit/JITOpcodes32_64.cpp:281
&gt;  +      emitGetFromCallFrameHeaderPtr(RegisterFile::ScopeChain, regT1, regT0);
&gt; I think you wanted to change both T1s to T0s here.
&gt; 
&gt; JavaScriptCore/jit/JITOpcodes32_64.cpp:399
&gt;  +      emitGetFromCallFrameHeaderPtr(RegisterFile::ScopeChain, regT1, regT0);
&gt; another T1 -&gt; T0 required

This API is a little weird, but it specifies that we&apos;re trying to fetch into T1, relative to T0. We want to preserve T0 for the sake of this following instruction:

    move(regT0, callFrameRegister); // Eagerly restore caller frame register to avoid loading from stack.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232033</commentid>
    <comment_count>12</comment_count>
      <attachid>57379</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-05-28 17:34:55 -0700</bug_when>
    <thetext>Comment on attachment 57379
PART ONE: Functional code changes

olliej says yay too, so r+</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232081</commentid>
    <comment_count>13</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-05-29 01:14:31 -0700</bug_when>
    <thetext>Everything&apos;s landed now, but I had to disabled ENABLE_JIT_OPTIMIZE_NATIVE_CALL on Windows for now, since it&apos;s mysteriously crashing on every test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246027</commentid>
    <comment_count>14</comment_count>
      <attachid>57378</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-07-02 12:33:46 -0700</bug_when>
    <thetext>Comment on attachment 57378
megapatch - DO NOT REVIEW

Clearing the review flag as this isn&apos;t for review...</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57378</attachid>
            <date>2010-05-28 14:25:51 -0700</date>
            <delta_ts>2010-07-02 12:33:46 -0700</delta_ts>
            <desc>megapatch - DO NOT REVIEW</desc>
            <filename>ro.txt</filename>
            <type>text/plain</type>
            <size>467552</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDYwMzczKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzgwIEBACisyMDEwLTA1LTI4ICBHZW9mZnJl
eSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgU2ltcGxpZmllZCB0aGUgaG9zdCBjYWxsaW5nIGNvbnZlbnRp
b24uCisgICAgICAgIAorICAgICAgICAxNyUgc3BlZWR1cCBvbiBob3N0IGZ1bmN0aW9uIGNhbGxz
LiBObyBjaGFuZ2Ugb24gU3VuU3BpZGVyLgorICAgICAgICAKKyAgICAgICAgQWxsIEpTIGNhbGxz
IChidXQgbm90IGNvbnN0cnVjdHMsIHlldCkgbm93IGdvIHRocm91Z2ggdGhlIG5vcm1hbCBKUwor
ICAgICAgICBjYWxsaW5nIGNvbnZlbnRpb24gdmlhIHRoZSBSZWdpc3RlckZpbGUuIEFzIGEgcmVz
dWx0LCB0aGUgaG9zdCBjYWxsaW5nCisgICAgICAgIGNvbnZlbnRpb24sIHdoaWNoIHVzZWQgdG8g
YmUgdGhpcworCisgICAgICAgICAgICBKU1ZhbHVlIChKU0NfSE9TVF9DQUxMICpOYXRpdmVGdW5j
dGlvbikoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYpCisgICAgICAgICAgICAKKyAgICAgICAgaXMgbm93IHRoaXMKKworICAgICAgICAgICAg
SlNWYWx1ZSAoSlNDX0hPU1RfQ0FMTCAqTmF0aXZlRnVuY3Rpb24pKEV4ZWNTdGF0ZSopCisgICAg
ICAgICAgICAKKyAgICAgICAgQ2FsbGVlLCAndGhpcycsIGFuZCBhcmd1bWVudCBhY2Nlc3MgYWxs
IGhhcGVuIHJlbGF0aXZlIHRvIHRoZSBFeGVjU3RhdGUqLAorICAgICAgICB3aGljaCBpcyBhIHBv
aW50ZXIgaW50byB0aGUgUmVnaXN0ZXJGaWxlLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRj
aCBjb21lcyBpbiB0d28gcGFydHMuCisgICAgICAgIAorICAgICAgICBQQVJUIE9ORTogRnVuY3Rp
b25hbCBjb2RlIGNoYW5nZXMuCisgICAgICAgIAorICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOiBE
aXNhYmxlZCBvcHRpbWl6ZWQgY2FsbHMgb24gcGxhdGZvcm1zIEkgZGlkbid0IHRlc3QuCisgICAg
ICAgIFdlIGNhbiByZS1lbmFibGUgb25jZSB3ZSB2ZXJpZnkgdGhhdCBob3N0IGNhbGxzIG9uIHRo
ZXNlIHBsYXRmb3JtcyBhcmUKKyAgICAgICAgY29ycmVjdC4KKworICAgICAgICAqIGRlYnVnZ2Vy
L0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKEpTQzo6RGVidWdnZXJDYWxsRnJhbWU6
OmZ1bmN0aW9uTmFtZSk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lOjpjYWxjdWxh
dGVkRnVuY3Rpb25OYW1lKTogVXBkYXRlZCBmb3IgY2hhbmdlIHRvCisgICAgICAgIEV4ZWNTdGF0
ZTo6Y2FsbGVlKCkuCisKKyAgICAgICAgKEpTQzo6RGVidWdnZXJDYWxsRnJhbWU6OnRoaXNPYmpl
Y3QpOiBVcGRhdGVkIGZvciByZW1vdmFsIG9mIEV4ZWNTdGF0ZTo6dGhpc1ZhbHVlKCkuCisKKyAg
ICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwOgorICAgICAgICAqIGludGVycHJldGVy
L0NhbGxGcmFtZS5oOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OmNhbGxlZSk6CisgICAgICAg
IChKU0M6OkV4ZWNTdGF0ZTo6c2NvcGVDaGFpbik6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6
aW5pdCk6IENoYW5nZWQgY2FsbGVlKCkgdG8gYmUgSlNPYmplY3QqIGluc3RlYWQgb2YKKyAgICAg
ICAgSlNGdW5jdGlvbiogLS0gbm93LCBpdCBtaWdodCBiZSBzb21lIG90aGVyIGNhbGxhYmxlIGhv
c3Qgb2JqZWN0LgorCisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6aG9zdFRoaXNSZWdpc3Rlcik6
CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6aG9zdFRoaXNWYWx1ZSk6CisgICAgICAgIChKU0M6
OkV4ZWNTdGF0ZTo6YXJndW1lbnRDb3VudCk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OmFyZ3Vt
ZW50KToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpzZXRBcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6c2V0Q2FsbGVlKTogQWRkZWQgY29udmVu
aWVudCBhY2Nlc3NvcnMgZm9yIGFyZ3VtZW50cworICAgICAgICBmcm9tIHdpdGhpbiBhIGhvc3Qg
ZnVuY3Rpb24uIFJlbW92ZWQgdGhpc1ZhbHVlKCkgYmVjYXVzZSBpdCB3YXMgdG9vCisgICAgICAg
IHRlbXB0aW5nIHRvIHVzZSBpbmNvcnJlY3RseSwgYW5kIGl0IG9ubHkgaGFkIG9uZSBvciB0d28g
Y2xpZW50cywgYW55d2F5LgorCisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3Bw
OgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y2FsbEV2YWwpOiBVcGRhdGVkIGZvciByZW1v
dmFsIG9mIEV4ZWNTdGF0ZTo6dGhpc1ZhbHVlKCkuCisKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0
ZXI6OnRocm93RXhjZXB0aW9uKTogQmUgc3VyZSB0byBzaHJpbmsgdGhlIHJlZ2lzdGVyIGZpbGUK
KyAgICAgICAgYmVmb3JlIGludm9raW5nIHRoZSBleGNlcHRpb24gaGFuZGxlciwgdG8gcmVkdWNl
IHRoZSBjaGFuY2VzIHRoYXQgdGhlCisgICAgICAgIGhhbmRsZXIgd2lsbCByZS10aHJvdyBpbiB0
aGUgY2FzZSBvZiBzdGFjayBvdmVyZmxvdy4gKFJlLXRocm93aW5nIGlzIG5vdworICAgICAgICBt
b3JlIGxpa2VseSB0aGFuIGl0IHVzZWQgdG8gYmUsIHNpbmNlIHN0YW5kYXJkaXppbmcgdGhlIGNh
bGxpbmcgY29udmVudGlvbgorICAgICAgICBpbXBsaWNpdGx5IGFkZGVkIHN0YWNrIG92ZXJmbG93
IGNoZWNrcyB0byBzb21lIHBsYWNlcyB3aGVyZSB0aGV5IHVzZWQgdG8gYmUgbWlzc2luZy4pCisK
KyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGUpOiBDbGFyaWZpZWQgdGhlIHNjb3Bl
IG9mIER5bmFtaWNHbG9iYWxPYmplY3RTY29wZS4KKyAgICAgICAgVXBkYXRlZCBmb3IgQ2FsbEZy
YW1lOjppbml0IEFQSSBjaGFuZ2UuCisKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1
dGVDYWxsKTogQ2xhcmlmaWVkIHNjb3BlIG9mIER5bmFtaWNHbG9iYWxPYmplY3RTY29wZS4KKyAg
ICAgICAgVXBkYXRlZCBmb3IgQ2FsbEZyYW1lOjppbml0IEFQSSBjaGFuZ2UuIEFkZGVkIHN1cHBv
cnQgZm9yIGNhbGxpbmcgYSBob3N0CisgICAgICAgIGZ1bmN0aW9uLgorCisgICAgICAgIChKU0M6
OkludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KTogQ2xhcmlmaWVkIHNjb3BlIG9mIER5bmFt
aWNHbG9iYWxPYmplY3RTY29wZS4KKyAgICAgICAgVXBkYXRlZCBmb3IgQ2FsbEZyYW1lOjppbml0
IEFQSSBjaGFuZ2UuIAorCisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpwcmVwYXJlRm9yUmVw
ZWF0Q2FsbCk6IFVwZGF0ZWQgZm9yIENhbGxGcmFtZTo6aW5pdCBBUEkgY2hhbmdlLiAKKworICAg
ICAgICAoSlNDOjpJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUpOiBVcGRhdGVkIGZvciBDYWxs
RnJhbWU6OmluaXQgQVBJIGNoYW5nZS4KKyAgICAgICAgQWRkZWQgc29tZSBleHBsaWNpdCBKU1Zh
bHVlKEpTT2JqZWN0KikgaW5pdGlhbGl6YXRpb24sIHNpbmNlIHJlbGF4aW5nCisgICAgICAgIHRo
ZSBKU0Z1bmN0aW9uKiByZXN0cmljdGlvbiBvbiBjYWxsZWUgaGFzIG1hZGUgcmVnaXN0ZXIgdHlw
ZXMgbW9yZSBhbWJpZ3VvdXMuCisgICAgICAgIFJlbW92ZWQgdG9UaGlzT2JqZWN0KCkgY29udmVy
c2lvbiwgc2luY2UgYWxsIGNhbGxlZXMgZG8gaXQgdGhlbXNlbHZlcyBub3cuCisgICAgICAgIFVw
ZGF0ZWQgaG9zdCBmdW5jdGlvbiBjYWxsIGZvciBuZXcgaG9zdCBmdW5jdGlvbiBzaWduYXR1cmUu
IFVwZGF0ZWQgZm9yCisgICAgICAgIGNoYW5nZSB0byBFeGVjU3RhdGU6OmFyZ3VtZW50Q291bnQo
KSBBUEkuCisKKyAgICAgICAgKiBpbnRlcnByZXRlci9SZWdpc3Rlci5oOgorICAgICAgICAoSlND
OjpSZWdpc3Rlcjo6KToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXI6Om9wZXJhdG9yPSk6CisgICAg
ICAgIChKU0M6OlJlZ2lzdGVyOjpmdW5jdGlvbik6IENoYW5nZWQgY2FsbGVlKCkgdG8gYmUgSlNP
YmplY3QqIGluc3RlYWQgb2YKKyAgICAgICAgSlNGdW5jdGlvbiogLS0gbm93LCBpdCBtaWdodCBi
ZSBzb21lIG90aGVyIGNhbGxhYmxlIGhvc3Qgb2JqZWN0LgorCisgICAgICAgICogaml0L0pJVE9w
Y29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2Fs
bCk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKTogRGVsZXRlZCBhIGJ1bmNoIG9mIGNvZGUg
dGhhdAorICAgICAgICBzZXQgdXAgdGhlIGFyZ3VtZW50cyB0byBob3N0IGZ1bmN0aW9ucyAtLSBh
bGwgYnV0IG9uZSBvZiB0aGUgYXJndW1lbnRzCisgICAgICAgIGFyZSBnb25lIG5vdy4gVGhpcyBp
cyB0aGUgYWN0dWFsIG9wdGltaXphdGlvbi4KKworICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6
CisgICAgICAgIChKU0M6OkRFRklORV9TVFVCX0ZVTkNUSU9OKTogVXBkYXRlZCBmb3IgRXhlY1N0
YXRlIGFuZCBSZWdpc3RlciBBUEkKKyAgICAgICAgY2hhbmdlcyBub3RlZCBhYm92ZS4gUmVtb3Zl
ZCB0b1RoaXNPYmplY3QoKSBjb252ZXJzaW9uLCBzaW5jZSBhbGwgY2FsbGVlcworICAgICAgICBk
byBpdCB0aGVtc2VsdmVzIG5vdy4KKyAgICAgICAgCisgICAgICAgICogcnVudGltZS9BcmdMaXN0
Lmg6CisgICAgICAgIChKU0M6OkFyZ0xpc3Q6OkFyZ0xpc3QpOiBBcmdMaXN0IGlzIGdldHRpbmcg
Y2xvc2UgdG8gdW51c2VkLiBBZGRlZCBhCisgICAgICAgIHRlbXBvcmFyeSBzaGltIGZvciBjb252
ZXJ0aW5nIGZyb20gRXhlY1N0YXRlKiB0byBBcmdMaXN0IHdoZXJlIGl0J3Mgc3RpbGwKKyAgICAg
ICAgbmVjZXNzYXJ5LgorCisgICAgICAgICogcnVudGltZS9Bcmd1bWVudHMuaDoKKyAgICAgICAg
KEpTQzo6QXJndW1lbnRzOjpnZXRBcmd1bWVudHNEYXRhKToKKyAgICAgICAgKEpTQzo6QXJndW1l
bnRzOjpBcmd1bWVudHMpOiBVcGRhdGVkIGZvciBFeGVjU3RhdGUgYW5kIFJlZ2lzdGVyIEFQSQor
ICAgICAgICBjaGFuZ2VzIG5vdGVkIGFib3ZlLiAKKworICAgICAgICAqIHJ1bnRpbWUvQ2FsbERh
dGEuY3BwOgorICAgICAgICAoSlNDOjpjYWxsKTogQ2hhbmdlZCBjYWxsIGFsd2F5cyB0byBjYWxs
IEludGVycHJldGVyOjpleGVjdXRlQ2FsbCwgZXZlbgorICAgICAgICBmb3IgaG9zdCBmdW5jdGlv
bnMuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBub3JtYWwgY2FsbGluZyBjb252ZW50aW9uIGlzCisg
ICAgICAgIHNldCB1cCBpbiB0aGUgUmVnc2l0ZXJGaWxlIHdoZW4gY2FsbGluZyBmcm9tIEMrKyB0
byBob3N0IGZ1bmN0aW9uLgorCisgICAgICAgICogcnVudGltZS9DYWxsRGF0YS5oOiBDaGFuZ2Vk
IGhvc3QgZnVuY3Rpb24gc2lnbmF0dXJlIGFzIGRlc2NyaWJlZCBhYm92ZS4KKworICAgICAgICAq
IHJ1bnRpbWUvQ29uc3RydWN0RGF0YS5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdCk6IE1v
dmVkIEpTRnVuY3Rpb246OmNvbnN0cnVjdCBjb2RlIGhlcmUgc28gSSBjb3VsZCBuaXgKKyAgICAg
ICAgSlNGdW5jdGlvbjo6Y2FsbCBhbmQgSlNGdW5jdGlvbjo6Y2FsbC4gV2Ugd2FudCBhIEpTRnVu
Y3Rpb24tYWdub3N0aWMKKyAgICAgICAgd2F5IHRvIGNhbGwgYW5kIGNvbnN0cnVjdCwgc28gdGhh
dCBldmVyeXRoaW5nIHdvcmtzIG5hdHVyYWxseSBmb3Igbm9uLQorICAgICAgICBKU0Z1bmN0aW9u
IG9iamVjdHMuIAorCisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmNwcDoKKyAgICAgICAg
KEpTQzo6Y2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNGdW5jdGlvbi5oOiBVcGRhdGVkIGZvciBFeGVjU3RhdGUgYW5kIFJlZ2lzdGVyIEFQSSBjaGFu
Z2VzCisgICAgICAgIG5vdGVkIGFib3ZlLiBOaXhlZCBKU0Z1bmN0aW9uOjpjYWxsIGFuZCBKU0Z1
bmN0aW9uOjpjb25zdHJ1Y3QsIG5vdGVkIGFib3ZlLgorIAorICAgICAgICAqIHJ1bnRpbWUvSlNH
bG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6aW5pdCk6IERp
dHRvLgorCisgICAgICAgIFBBUlQgVFdPOiBHbG9iYWwgc2VhcmNoIGFuZCByZXBsYWNlLgorICAg
ICAgICAKKyAgICAgICAgSW4gdGhlIGFyZWFzIGJlbG93LCBJIHVzZWQgZ2xvYmFsIHNlYXJjaC1h
bmQtcmVwbGFjZSB0byBjaGFuZ2UKKyAgICAgICAgICAgIChFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKSA9PiAoRXhlY1N0YXRlKikKKyAgICAgICAgICAgIGFy
Z3Muc2l6ZSgpID0+IGV4ZWMtPmFyZ3VtZW50Q291bnQoKQorICAgICAgICAgICAgYXJncy5hdChp
KSA9PiBleGVjLT5hcmd1bWVudChpKQorCisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tGdW5jdGlv
bi5jcHA6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tGdW5jdGlvbjo6Y2FsbCk6CisgICAgICAg
ICogQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5oOgorICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2Jq
ZWN0Lmg6CisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaDoKKyAgICAg
ICAgKEpTQzo6OjpjYWxsKToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5leHA6CisgICAgICAg
ICoganNjLmNwcDoKKyAgICAgICAgKGZ1bmN0aW9uUHJpbnQpOgorICAgICAgICAoZnVuY3Rpb25E
ZWJ1Zyk6CisgICAgICAgIChmdW5jdGlvbkdDKToKKyAgICAgICAgKGZ1bmN0aW9uVmVyc2lvbik6
CisgICAgICAgIChmdW5jdGlvblJ1bik6CisgICAgICAgIChmdW5jdGlvbkxvYWQpOgorICAgICAg
ICAoZnVuY3Rpb25DaGVja1N5bnRheCk6CisgICAgICAgIChmdW5jdGlvblNldFNhbXBsaW5nRmxh
Z3MpOgorICAgICAgICAoZnVuY3Rpb25DbGVhclNhbXBsaW5nRmxhZ3MpOgorICAgICAgICAoZnVu
Y3Rpb25SZWFkbGluZSk6CisgICAgICAgIChmdW5jdGlvblF1aXQpOgorICAgICAgICAqIHJ1bnRp
bWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNhbGxBcnJheUNvbnN0cnVj
dG9yKToKKyAgICAgICAgKEpTQzo6YXJyYXlDb25zdHJ1Y3RvcklzQXJyYXkpOgorICAgICAgICAq
IHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVu
Y1RvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyk6
CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jSm9pbik6CisgICAgICAgIChKU0M6OmFycmF5
UHJvdG9GdW5jQ29uY2F0KToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNQb3ApOgorICAg
ICAgICAoSlNDOjphcnJheVByb3RvRnVuY1B1c2gpOgorICAgICAgICAoSlNDOjphcnJheVByb3Rv
RnVuY1JldmVyc2UpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NoaWZ0KToKKyAgICAg
ICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNTbGljZSk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9G
dW5jU29ydCk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jU3BsaWNlKToKKyAgICAgICAg
KEpTQzo6YXJyYXlQcm90b0Z1bmNVblNoaWZ0KToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1
bmNGaWx0ZXIpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY01hcCk6CisgICAgICAgIChK
U0M6OmFycmF5UHJvdG9GdW5jRXZlcnkpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY0Zv
ckVhY2gpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NvbWUpOgorICAgICAgICAoSlND
OjphcnJheVByb3RvRnVuY1JlZHVjZSk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jUmVk
dWNlUmlnaHQpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY0luZGV4T2YpOgorICAgICAg
ICAoSlNDOjphcnJheVByb3RvRnVuY0xhc3RJbmRleE9mKToKKyAgICAgICAgKiBydW50aW1lL0Jv
b2xlYW5Db25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNhbGxCb29sZWFuQ29uc3RydWN0
b3IpOgorICAgICAgICAqIHJ1bnRpbWUvQm9vbGVhblByb3RvdHlwZS5jcHA6CisgICAgICAgIChK
U0M6OmJvb2xlYW5Qcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAgIChKU0M6OmJvb2xlYW5Qcm90
b0Z1bmNWYWx1ZU9mKToKKyAgICAgICAgKiBydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHA6Cisg
ICAgICAgIChKU0M6OmNhbGxEYXRlKToKKyAgICAgICAgKEpTQzo6ZGF0ZVBhcnNlKToKKyAgICAg
ICAgKEpTQzo6ZGF0ZU5vdyk6CisgICAgICAgIChKU0M6OmRhdGVVVEMpOgorICAgICAgICAqIHJ1
bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OmZvcm1hdExvY2FsZURhdGUp
OgorICAgICAgICAoSlNDOjpmaWxsU3RydWN0dXJlc1VzaW5nVGltZUFyZ3MpOgorICAgICAgICAo
SlNDOjpmaWxsU3RydWN0dXJlc1VzaW5nRGF0ZUFyZ3MpOgorICAgICAgICAoSlNDOjpkYXRlUHJv
dG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9VVENTdHJpbmcp
OgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9JU09TdHJpbmcpOgorICAgICAgICAoSlND
OjpkYXRlUHJvdG9GdW5jVG9EYXRlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVu
Y1RvVGltZVN0cmluZyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNUb0xvY2FsZVN0cmlu
Zyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNUb0xvY2FsZURhdGVTdHJpbmcpOgorICAg
ICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9Mb2NhbGVUaW1lU3RyaW5nKToKKyAgICAgICAgKEpT
Qzo6ZGF0ZVByb3RvRnVuY0dldFRpbWUpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0
RnVsbFllYXIpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0VVRDRnVsbFllYXIpOgor
ICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9HTVRTdHJpbmcpOgorICAgICAgICAoSlNDOjpk
YXRlUHJvdG9GdW5jR2V0TW9udGgpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0VVRD
TW9udGgpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0RGF0ZSk6CisgICAgICAgIChK
U0M6OmRhdGVQcm90b0Z1bmNHZXRVVENEYXRlKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVu
Y0dldERheSk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRVVENEYXkpOgorICAgICAg
ICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0SG91cnMpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9G
dW5jR2V0VVRDSG91cnMpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0TWludXRlcyk6
CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRVVENNaW51dGVzKToKKyAgICAgICAgKEpT
Qzo6ZGF0ZVByb3RvRnVuY0dldFNlY29uZHMpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5j
R2V0VVRDU2Vjb25kcyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRNaWxsaVNlY29u
ZHMpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0VVRDTWlsbGlzZWNvbmRzKToKKyAg
ICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY0dldFRpbWV6b25lT2Zmc2V0KToKKyAgICAgICAgKEpT
Qzo6ZGF0ZVByb3RvRnVuY1NldFRpbWUpOgorICAgICAgICAoSlNDOjpzZXROZXdWYWx1ZUZyb21U
aW1lQXJncyk6CisgICAgICAgIChKU0M6OnNldE5ld1ZhbHVlRnJvbURhdGVBcmdzKToKKyAgICAg
ICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1NldE1pbGxpU2Vjb25kcyk6CisgICAgICAgIChKU0M6OmRh
dGVQcm90b0Z1bmNTZXRVVENNaWxsaXNlY29uZHMpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9G
dW5jU2V0U2Vjb25kcyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNTZXRVVENTZWNvbmRz
KToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1NldE1pbnV0ZXMpOgorICAgICAgICAoSlND
OjpkYXRlUHJvdG9GdW5jU2V0VVRDTWludXRlcyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1
bmNTZXRIb3Vycyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNTZXRVVENIb3Vycyk6Cisg
ICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNTZXREYXRlKToKKyAgICAgICAgKEpTQzo6ZGF0ZVBy
b3RvRnVuY1NldFVUQ0RhdGUpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jU2V0TW9udGgp
OgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jU2V0VVRDTW9udGgpOgorICAgICAgICAoSlND
OjpkYXRlUHJvdG9GdW5jU2V0RnVsbFllYXIpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5j
U2V0VVRDRnVsbFllYXIpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jU2V0WWVhcik6Cisg
ICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRZZWFyKToKKyAgICAgICAgKEpTQzo6ZGF0ZVBy
b3RvRnVuY1RvSlNPTik6CisgICAgICAgICogcnVudGltZS9FcnJvckNvbnN0cnVjdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6Y2FsbEVycm9yQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUv
RXJyb3JQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjplcnJvclByb3RvRnVuY1RvU3RyaW5n
KToKKyAgICAgICAgKiBydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAo
SlNDOjpjYWxsRnVuY3Rpb25Db25zdHJ1Y3Rvcik6CisgICAgICAgICogcnVudGltZS9GdW5jdGlv
blByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OmNhbGxGdW5jdGlvblByb3RvdHlwZSk6Cisg
ICAgICAgIChKU0M6OmZ1bmN0aW9uUHJvdG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpm
dW5jdGlvblByb3RvRnVuY0FwcGx5KToKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25Qcm90b0Z1bmND
YWxsKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcDoKKyAg
ICAgICAgKEpTQzo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6ZGVjb2RlKToKKyAgICAgICAgKEpT
Qzo6Z2xvYmFsRnVuY0V2YWwpOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jUGFyc2VJbnQpOgor
ICAgICAgICAoSlNDOjpnbG9iYWxGdW5jUGFyc2VGbG9hdCk6CisgICAgICAgIChKU0M6Omdsb2Jh
bEZ1bmNJc05hTik6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNJc0Zpbml0ZSk6CisgICAgICAg
IChKU0M6Omdsb2JhbEZ1bmNEZWNvZGVVUkkpOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jRGVj
b2RlVVJJQ29tcG9uZW50KToKKyAgICAgICAgKEpTQzo6Z2xvYmFsRnVuY0VuY29kZVVSSSk6Cisg
ICAgICAgIChKU0M6Omdsb2JhbEZ1bmNFbmNvZGVVUklDb21wb25lbnQpOgorICAgICAgICAoSlND
OjpnbG9iYWxGdW5jRXNjYXBlKToKKyAgICAgICAgKEpTQzo6Z2xvYmFsRnVuY1VuZXNjYXBlKToK
KyAgICAgICAgKEpTQzo6Z2xvYmFsRnVuY0pTQ1ByaW50KToKKyAgICAgICAgKiBydW50aW1lL0pT
R2xvYmFsT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgICogcnVudGltZS9KU09OT2JqZWN0LmNw
cDoKKyAgICAgICAgKEpTQzo6SlNPTlByb3RvRnVuY1BhcnNlKToKKyAgICAgICAgKEpTQzo6SlNP
TlByb3RvRnVuY1N0cmluZ2lmeSk6CisgICAgICAgICogcnVudGltZS9KU1N0cmluZy5oOgorICAg
ICAgICAqIHJ1bnRpbWUvTWF0aE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1
bmNBYnMpOgorICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5jQUNvcyk6CisgICAgICAgIChKU0M6
Om1hdGhQcm90b0Z1bmNBU2luKToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY0FUYW4pOgor
ICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5jQVRhbjIpOgorICAgICAgICAoSlNDOjptYXRoUHJv
dG9GdW5jQ2VpbCk6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNDb3MpOgorICAgICAgICAo
SlNDOjptYXRoUHJvdG9GdW5jRXhwKToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY0Zsb29y
KToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY0xvZyk6CisgICAgICAgIChKU0M6Om1hdGhQ
cm90b0Z1bmNNYXgpOgorICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5jTWluKToKKyAgICAgICAg
KEpTQzo6bWF0aFByb3RvRnVuY1Bvdyk6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNSYW5k
b20pOgorICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5jUm91bmQpOgorICAgICAgICAoSlNDOjpt
YXRoUHJvdG9GdW5jU2luKToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY1NxcnQpOgorICAg
ICAgICAoSlNDOjptYXRoUHJvdG9GdW5jVGFuKToKKyAgICAgICAgKiBydW50aW1lL05hdGl2ZUVy
cm9yQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjYWxsTmF0aXZlRXJyb3JDb25zdHJ1
Y3Rvcik6CisgICAgICAgICogcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAg
IChKU0M6OmNhbGxOdW1iZXJDb25zdHJ1Y3Rvcik6CisgICAgICAgICogcnVudGltZS9OdW1iZXJQ
cm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpudW1iZXJQcm90b0Z1bmNUb1N0cmluZyk6Cisg
ICAgICAgIChKU0M6Om51bWJlclByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKToKKyAgICAgICAgKEpT
Qzo6bnVtYmVyUHJvdG9GdW5jVmFsdWVPZik6CisgICAgICAgIChKU0M6Om51bWJlclByb3RvRnVu
Y1RvRml4ZWQpOgorICAgICAgICAoSlNDOjpudW1iZXJQcm90b0Z1bmNUb0V4cG9uZW50aWFsKToK
KyAgICAgICAgKEpTQzo6bnVtYmVyUHJvdG9GdW5jVG9QcmVjaXNpb24pOgorICAgICAgICAqIHJ1
bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjYWxsT2JqZWN0Q29u
c3RydWN0b3IpOgorICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3RvckdldFByb3RvdHlwZU9m
KToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IpOgorICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3RvckdldE93blByb3BlcnR5TmFtZXMp
OgorICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3RvcktleXMpOgorICAgICAgICAoSlNDOjpv
YmplY3RDb25zdHJ1Y3RvckRlZmluZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29u
c3RydWN0b3JEZWZpbmVQcm9wZXJ0aWVzKToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0
b3JDcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcDoKKyAgICAg
ICAgKEpTQzo6b2JqZWN0UHJvdG9GdW5jVmFsdWVPZik6CisgICAgICAgIChKU0M6Om9iamVjdFBy
b3RvRnVuY0hhc093blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG9GdW5jSXNQ
cm90b3R5cGVPZik6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY0RlZmluZUdldHRlcik6
CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY0RlZmluZVNldHRlcik6CisgICAgICAgIChK
U0M6Om9iamVjdFByb3RvRnVuY0xvb2t1cEdldHRlcik6CisgICAgICAgIChKU0M6Om9iamVjdFBy
b3RvRnVuY0xvb2t1cFNldHRlcik6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY1Byb3Bl
cnR5SXNFbnVtZXJhYmxlKToKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG9GdW5jVG9Mb2NhbGVT
dHJpbmcpOgorICAgICAgICAoSlNDOjpvYmplY3RQcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAg
ICogcnVudGltZS9PYmplY3RQcm90b3R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL09wZXJhdGlv
bnMuaDoKKyAgICAgICAgKEpTQzo6anNTdHJpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhw
Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjYWxsUmVnRXhwQ29uc3RydWN0b3IpOgor
ICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhw
T2JqZWN0Ojp0ZXN0KToKKyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0OjpleGVjKToKKyAgICAg
ICAgKEpTQzo6Y2FsbFJlZ0V4cE9iamVjdCk6CisgICAgICAgIChKU0M6OlJlZ0V4cE9iamVjdDo6
bWF0Y2gpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0Lmg6CisgICAgICAgICogcnVu
dGltZS9SZWdFeHBQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpyZWdFeHBQcm90b0Z1bmNU
ZXN0KToKKyAgICAgICAgKEpTQzo6cmVnRXhwUHJvdG9GdW5jRXhlYyk6CisgICAgICAgIChKU0M6
OnJlZ0V4cFByb3RvRnVuY0NvbXBpbGUpOgorICAgICAgICAoSlNDOjpyZWdFeHBQcm90b0Z1bmNU
b1N0cmluZyk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChKU0M6OnN0cmluZ0Zyb21DaGFyQ29kZVNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6c3Ry
aW5nRnJvbUNoYXJDb2RlKToKKyAgICAgICAgKEpTQzo6Y2FsbFN0cmluZ0NvbnN0cnVjdG9yKToK
KyAgICAgICAgKiBydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OnN0
cmluZ1Byb3RvRnVuY1JlcGxhY2UpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNUb1N0
cmluZyk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0NoYXJBdCk6CisgICAgICAgIChK
U0M6OnN0cmluZ1Byb3RvRnVuY0NoYXJDb2RlQXQpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90
b0Z1bmNDb25jYXQpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNJbmRleE9mKToKKyAg
ICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jTGFzdEluZGV4T2YpOgorICAgICAgICAoSlNDOjpz
dHJpbmdQcm90b0Z1bmNNYXRjaCk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1NlYXJj
aCk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1NsaWNlKToKKyAgICAgICAgKEpTQzo6
c3RyaW5nUHJvdG9GdW5jU3BsaXQpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTdWJz
dHIpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTdWJzdHJpbmcpOgorICAgICAgICAo
SlNDOjpzdHJpbmdQcm90b0Z1bmNUb0xvd2VyQ2FzZSk6CisgICAgICAgIChKU0M6OnN0cmluZ1By
b3RvRnVuY1RvVXBwZXJDYXNlKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jTG9jYWxl
Q29tcGFyZSk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0JpZyk6CisgICAgICAgIChK
U0M6OnN0cmluZ1Byb3RvRnVuY1NtYWxsKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5j
QmxpbmspOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNCb2xkKToKKyAgICAgICAgKEpT
Qzo6c3RyaW5nUHJvdG9GdW5jRml4ZWQpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNJ
dGFsaWNzKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jU3RyaWtlKToKKyAgICAgICAg
KEpTQzo6c3RyaW5nUHJvdG9GdW5jU3ViKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5j
U3VwKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jRm9udGNvbG9yKToKKyAgICAgICAg
KEpTQzo6c3RyaW5nUHJvdG9GdW5jRm9udHNpemUpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90
b0Z1bmNBbmNob3IpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNMaW5rKToKKyAgICAg
ICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jVHJpbSk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3Rv
RnVuY1RyaW1MZWZ0KToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jVHJpbVJpZ2h0KToK
KwogMjAxMC0wNS0yNyAgTHVpeiBBZ29zdGluaSAgPGx1aXouYWdvc3RpbmlAb3BlbmJvc3NhLm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IEphdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS5leHAJKHJldmlzaW9uIDYwMzQxKQorKysgSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNyArMTA5LDcgQEAgX19aTjNKU0Mx
MElkZW50aWZpZXI0ZnJvbUVQTlNfOUV4ZWNTdGF0ZQogX19aTjNKU0MxMElkZW50aWZpZXI1ZXF1
YWxFUEtON1dlYkNvcmUxMFN0cmluZ0ltcGxFUEtjCiBfX1pOM0pTQzEwSlNGdW5jdGlvbjRpbmZv
RQogX19aTjNKU0MxMEpTRnVuY3Rpb240bmFtZUVQTlNfOUV4ZWNTdGF0ZUUKLV9fWk4zSlNDMTBK
U0Z1bmN0aW9uQzFFUE5TXzlFeGVjU3RhdGVFUE5TXzE0SlNHbG9iYWxPYmplY3RFTjNXVEYxN05v
bk51bGxQYXNzUmVmUHRySU5TXzlTdHJ1Y3R1cmVFRUVpUktOU18xMElkZW50aWZpZXJFUEZOU183
SlNWYWx1ZUVTMl9QTlNfOEpTT2JqZWN0RVNDX1JLTlNfN0FyZ0xpc3RFRQorX19aTjNKU0MxMEpT
RnVuY3Rpb25DMUVQTlNfOUV4ZWNTdGF0ZUVQTlNfMTRKU0dsb2JhbE9iamVjdEVOM1dURjE3Tm9u
TnVsbFBhc3NSZWZQdHJJTlNfOVN0cnVjdHVyZUVFRWlSS05TXzEwSWRlbnRpZmllckVQRk5TXzdK
U1ZhbHVlRVMyX0UKIF9fWk4zSlNDMTB0aHJvd0Vycm9yRVBOU185RXhlY1N0YXRlRU5TXzlFcnJv
clR5cGVFCiBfX1pOM0pTQzEwdGhyb3dFcnJvckVQTlNfOUV4ZWNTdGF0ZUVOU185RXJyb3JUeXBl
RVBLYwogX19aTjNKU0MxMHRocm93RXJyb3JFUE5TXzlFeGVjU3RhdGVFTlNfOUVycm9yVHlwZUVS
S05TXzdVU3RyaW5nRQpAQCAtMTc0LDcgKzE3NCw3IEBAIF9fWk4zSlNDMTZKU1ZhcmlhYmxlT2Jq
ZWN0MTlnZXRPd25Qcm9wZXIKIF9fWk4zSlNDMTZ0b1VJbnQzMlNsb3dDYXNlRWRSYgogX19aTjNK
U0MxN0J5dGVjb2RlR2VuZXJhdG9yMjFzZXREdW1wc0dlbmVyYXRlZENvZGVFYgogX19aTjNKU0Mx
N1Byb3BlcnR5TmFtZUFycmF5M2FkZEVQTjdXZWJDb3JlMTBTdHJpbmdJbXBsRQotX19aTjNKU0Mx
N1Byb3RvdHlwZUZ1bmN0aW9uQzFFUE5TXzlFeGVjU3RhdGVFUE5TXzE0SlNHbG9iYWxPYmplY3RF
TjNXVEYxN05vbk51bGxQYXNzUmVmUHRySU5TXzlTdHJ1Y3R1cmVFRUVpUktOU18xMElkZW50aWZp
ZXJFUEZOU183SlNWYWx1ZUVTMl9QTlNfOEpTT2JqZWN0RVNDX1JLTlNfN0FyZ0xpc3RFRQorX19a
TjNKU0MxN1Byb3RvdHlwZUZ1bmN0aW9uQzFFUE5TXzlFeGVjU3RhdGVFUE5TXzE0SlNHbG9iYWxP
YmplY3RFTjNXVEYxN05vbk51bGxQYXNzUmVmUHRySU5TXzlTdHJ1Y3R1cmVFRUVpUktOU18xMElk
ZW50aWZpZXJFUEZOU183SlNWYWx1ZUVTMl9FCiBfX1pOM0pTQzE3Y29uc3RydWN0RnVuY3Rpb25F
UE5TXzlFeGVjU3RhdGVFUktOU183QXJnTGlzdEVSS05TXzEwSWRlbnRpZmllckVSS05TXzdVU3Ry
aW5nRWkKIF9fWk4zSlNDMThEZWJ1Z2dlckFjdGl2YXRpb25DMUVQTlNfOEpTT2JqZWN0RQogX19a
TjNKU0MxOFByb3BlcnR5RGVzY3JpcHRvcjExc2V0V3JpdGFibGVFYgpAQCAtMTg5LDEwICsxODks
MTEgQEAgX19aTjNKU0MxOFByb3BlcnR5RGVzY3JpcHRvcjlzZXRTZXR0ZXJFTgogX19aTjNKU0Mx
OWluaXRpYWxpemVUaHJlYWRpbmdFdgogX19aTjNKU0MyME1hcmtlZEFyZ3VtZW50QnVmZmVyMTBz
bG93QXBwZW5kRU5TXzdKU1ZhbHVlRQogX19aTjNKU0MyM0Fic3RyYWN0U2FtcGxpbmdDb3VudGVy
NGR1bXBFdgotX19aTjNKU0MyM29iamVjdFByb3RvRnVuY1RvU3RyaW5nRVBOU185RXhlY1N0YXRl
RVBOU184SlNPYmplY3RFTlNfN0pTVmFsdWVFUktOU183QXJnTGlzdEUKK19fWk4zSlNDMjNvYmpl
Y3RQcm90b0Z1bmNUb1N0cmluZ0VQTlNfOUV4ZWNTdGF0ZUUKIF9fWk4zSlNDMjNzZXRVcFN0YXRp
Y0Z1bmN0aW9uU2xvdEVQTlNfOUV4ZWNTdGF0ZUVQS05TXzlIYXNoRW50cnlFUE5TXzhKU09iamVj
dEVSS05TXzEwSWRlbnRpZmllckVSTlNfMTJQcm9wZXJ0eVNsb3RFCiBfX1pOM0pTQzI0SlNPYmpl
Y3RXaXRoR2xvYmFsT2JqZWN0QzJFUE5TXzE0SlNHbG9iYWxPYmplY3RFTjNXVEYxN05vbk51bGxQ
YXNzUmVmUHRySU5TXzlTdHJ1Y3R1cmVFRUUKIF9fWk4zSlNDMjRjcmVhdGVTdGFja092ZXJmbG93
RXJyb3JFUE5TXzlFeGVjU3RhdGVFCitfX1pOM0pTQzI0Y3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9y
RVBOU185RXhlY1N0YXRlRQogX19aTjNKU0MyNWV2YWx1YXRlSW5HbG9iYWxDYWxsRnJhbWVFUktO
U183VVN0cmluZ0VSTlNfN0pTVmFsdWVFUE5TXzE0SlNHbG9iYWxPYmplY3RFCiBfX1pOM0pTQzM1
Y3JlYXRlSW50ZXJydXB0ZWRFeGVjdXRpb25FeGNlcHRpb25FUE5TXzEySlNHbG9iYWxEYXRhRQog
X19aTjNKU0MzTmFORQpJbmRleDogSmF2YVNjcmlwdENvcmUvanNjLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIEphdmFTY3JpcHRD
b3JlL2pzYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDE5ICs3MSwxOSBAQCB1c2luZyBuYW1l
c3BhY2UgV1RGOwogc3RhdGljIHZvaWQgY2xlYW51cEdsb2JhbERhdGEoSlNHbG9iYWxEYXRhKik7
CiBzdGF0aWMgYm9vbCBmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGNvbnN0IFVTdHJpbmcm
IGZpbGVOYW1lLCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcik7CiAKLXN0YXRpYyBKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25QcmludChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25EZWJ1
ZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRp
YyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25HQyhFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25WZXJzaW9uKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJ1bihFeGVjU3Rh
dGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Mb2FkKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bkNoZWNrU3ludGF4KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlz
dCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJlYWRsaW5lKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIE5PX1JF
VFVSTl9XSVRIX1ZBTFVFIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblF1aXQoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJpbnQoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRGVidWcoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR0MoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uVmVyc2lvbihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SdW4oRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uTG9hZChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25DaGVja1N5bnRheChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SZWFkbGluZShFeGVjU3RhdGUqKTsKK3N0YXRpYyBO
T19SRVRVUk5fV0lUSF9WQUxVRSBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25RdWl0KEV4
ZWNTdGF0ZSopOwogCiAjaWYgRU5BQkxFKFNBTVBMSU5HX0ZMQUdTKQotc3RhdGljIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNldFNhbXBsaW5nRmxhZ3MoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uQ2xlYXJTYW1wbGluZ0ZsYWdzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvblNldFNhbXBsaW5nRmxhZ3MoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uQ2xlYXJTYW1wbGluZ0ZsYWdzKEV4ZWNTdGF0ZSopOwogI2VuZGlmCiAK
IHN0cnVjdCBTY3JpcHQgewpAQCAtMTcxLDEzICsxNzEsMTMgQEAgR2xvYmFsT2JqZWN0OjpHbG9i
YWxPYmplY3QoY29uc3QgVmVjdG9yPAogICAgIHB1dERpcmVjdChJZGVudGlmaWVyKGdsb2JhbEV4
ZWMoKSwgImFyZ3VtZW50cyIpLCBhcnJheSk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvblByaW50KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJpbnQoRXhlY1N0
YXRlKiBleGVjKQogewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmdzLnNpemUoKTsg
KytpKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4ZWMtPmFyZ3VtZW50Q291bnQo
KTsgKytpKSB7CiAgICAgICAgIGlmIChpKQogICAgICAgICAgICAgcHV0Y2hhcignICcpOwogCi0g
ICAgICAgIHByaW50ZigiJXMiLCBhcmdzLmF0KGkpLnRvU3RyaW5nKGV4ZWMpLlVURjhTdHJpbmco
KS5kYXRhKCkpOworICAgICAgICBwcmludGYoIiVzIiwgZXhlYy0+YXJndW1lbnQoaSkudG9TdHJp
bmcoZXhlYykuVVRGOFN0cmluZygpLmRhdGEoKSk7CiAgICAgfQogCiAgICAgcHV0Y2hhcignXG4n
KTsKQEAgLTE4NSwzMCArMTg1LDMwIEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblBy
aW50KEV4ZWMKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uRGVidWcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25EZWJ1
ZyhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgZnByaW50ZihzdGRlcnIsICItLT4gJXNcbiIsIGFy
Z3MuYXQoMCkudG9TdHJpbmcoZXhlYykuVVRGOFN0cmluZygpLmRhdGEoKSk7CisgICAgZnByaW50
ZihzdGRlcnIsICItLT4gJXNcbiIsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLlVU
RjhTdHJpbmcoKS5kYXRhKCkpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25HQyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
SlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25H
QyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKICAgICBleGVjLT5oZWFwKCktPmNvbGxlY3RBbGxHYXJiYWdlKCk7CiAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblZlcnNp
b24oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblZlcnNpb24oRXhlY1N0YXRlKikKIHsKICAgICAvLyBX
ZSBuZWVkIHRoaXMgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgTW96aWxsYSBK
UyB0ZXN0cyBidXQgZm9yIG5vdwogICAgIC8vIHdlIGRvbid0IGFjdHVhbGx5IGRvIGFueSB2ZXJz
aW9uLXNwZWNpZmljIGhhbmRsaW5nCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJ1bihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvblJ1bihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgU3RvcFdhdGNoIHN0b3BXYXRjaDsK
LSAgICBVU3RyaW5nIGZpbGVOYW1lID0gYXJncy5hdCgwKS50b1N0cmluZyhleGVjKTsKKyAgICBV
U3RyaW5nIGZpbGVOYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CiAgICAg
VmVjdG9yPGNoYXI+IHNjcmlwdDsKICAgICBpZiAoIWZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZp
bGUoZmlsZU5hbWUsIHNjcmlwdCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIEdl
bmVyYWxFcnJvciwgIkNvdWxkIG5vdCBvcGVuIGZpbGUuIik7CkBAIC0yMjIsMTEgKzIyMiw5IEBA
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJ1bihFeGVjU3QKICAgICByZXR1cm4ganNO
dW1iZXIoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIHN0b3BXYXRjaC5nZXRFbGFwc2VkTVMo
KSk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkxvYWQoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogbywgSlNWYWx1ZSB2LCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTG9hZChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgVU5V
U0VEX1BBUkFNKG8pOwotICAgIFVOVVNFRF9QQVJBTSh2KTsKLSAgICBVU3RyaW5nIGZpbGVOYW1l
ID0gYXJncy5hdCgwKS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIGZpbGVOYW1lID0gZXhl
Yy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CiAgICAgVmVjdG9yPGNoYXI+IHNjcmlwdDsK
ICAgICBpZiAoIWZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoZmlsZU5hbWUsIHNjcmlwdCkp
CiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIEdlbmVyYWxFcnJvciwgIkNvdWxkIG5v
dCBvcGVuIGZpbGUuIik7CkBAIC0yMzgsMTEgKzIzNiw5IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvbkxvYWQoRXhlY1MKICAgICByZXR1cm4gcmVzdWx0LnZhbHVlKCk7CiB9CiAKLUpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNoZWNrU3ludGF4KEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIG8sIEpTVmFsdWUgdiwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvbkNoZWNrU3ludGF4KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBV
TlVTRURfUEFSQU0obyk7Ci0gICAgVU5VU0VEX1BBUkFNKHYpOwotICAgIFVTdHJpbmcgZmlsZU5h
bWUgPSBhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgZmlsZU5hbWUgPSBl
eGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKTsKICAgICBWZWN0b3I8Y2hhcj4gc2NyaXB0
OwogICAgIGlmICghZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZShmaWxlTmFtZSwgc2NyaXB0
KSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgR2VuZXJhbEVycm9yLCAiQ291bGQg
bm90IG9wZW4gZmlsZS4iKTsKQEAgLTI1NSwyMCArMjUxLDIwIEBAIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvbkNoZWNrU3ludGEKIH0KIAogI2lmIEVOQUJMRShTQU1QTElOR19GTEFHUykK
LUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNldFNhbXBsaW5nRmxhZ3MoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TZXRTYW1wbGluZ0ZsYWdzKEV4ZWNTdGF0ZSogZXhlYykK
IHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJncy5zaXplKCk7ICsraSkgewotICAg
ICAgICB1bnNpZ25lZCBmbGFnID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGFyZ3MuYXQoaSkudG9O
dW1iZXIoZXhlYykpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGVjLT5hcmd1bWVu
dENvdW50KCk7ICsraSkgeworICAgICAgICB1bnNpZ25lZCBmbGFnID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGV4ZWMtPmFyZ3VtZW50KGkpLnRvTnVtYmVyKGV4ZWMpKTsKICAgICAgICAgaWYgKChm
bGFnID49IDEpICYmIChmbGFnIDw9IDMyKSkKICAgICAgICAgICAgIFNhbXBsaW5nRmxhZ3M6OnNl
dEZsYWcoZmxhZyk7CiAgICAgfQogICAgIHJldHVybiBqc051bGwoKTsKIH0KIAotSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ2xlYXJTYW1wbGluZ0ZsYWdzKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uQ2xlYXJTYW1wbGluZ0ZsYWdzKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJncy5zaXplKCk7ICsraSkgewotICAgICAgICB1
bnNpZ25lZCBmbGFnID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGFyZ3MuYXQoaSkudG9OdW1iZXIo
ZXhlYykpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGVjLT5hcmd1bWVudENvdW50
KCk7ICsraSkgeworICAgICAgICB1bnNpZ25lZCBmbGFnID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGV4ZWMtPmFyZ3VtZW50KGkpLnRvTnVtYmVyKGV4ZWMpKTsKICAgICAgICAgaWYgKChmbGFnID49
IDEpICYmIChmbGFnIDw9IDMyKSkKICAgICAgICAgICAgIFNhbXBsaW5nRmxhZ3M6OmNsZWFyRmxh
ZyhmbGFnKTsKICAgICB9CkBAIC0yNzYsNyArMjcyLDcgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uQ2xlYXJTYW1wbAogfQogI2VuZGlmCiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvblJlYWRsaW5lKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25z
dCBBcmdMaXN0JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJlYWRsaW5lKEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICBWZWN0b3I8Y2hhciwgMjU2PiBsaW5lOwogICAgIGludCBjOwpA
QCAtMjkwLDcgKzI4Niw3IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJlYWRsaW5l
KEUKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgbGluZS5kYXRhKCkpOwogfQogCi1KU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25RdWl0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBK
U1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblF1
aXQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIC8vIFRlY2huaWNhbGx5LCBkZXN0cm95aW5nIHRo
ZSBoZWFwIGluIHRoZSBtaWRkbGUgb2YgSlMgZXhlY3V0aW9uIGlzIGEgbm8tbm8sCiAgICAgLy8g
YnV0IHdlIHdhbnQgdG8gbWFpbnRhaW4gY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBNb3ppbGxhIHRl
c3Qgc3VpdGUsIHNvCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0Z1bmN0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0Z1bmN0aW9u
LmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0Z1
bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsMjIgKzQ3LDIyIEBAIEpTQ2FsbGJhY2tG
dW5jdGlvbjo6SlNDYWxsYmFja0Z1bmN0aW9uKEUKIHsKIH0KIAotSlNWYWx1ZSBKU0NhbGxiYWNr
RnVuY3Rpb246OmNhbGwoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogZnVuY3Rpb25PYmplY3Qs
IEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NhbGxi
YWNrRnVuY3Rpb246OmNhbGwoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTQ29udGV4dFJlZiBl
eGVjUmVmID0gdG9SZWYoZXhlYyk7Ci0gICAgSlNPYmplY3RSZWYgZnVuY3Rpb25SZWYgPSB0b1Jl
ZihmdW5jdGlvbk9iamVjdCk7Ci0gICAgSlNPYmplY3RSZWYgdGhpc09ialJlZiA9IHRvUmVmKHRo
aXNWYWx1ZS50b1RoaXNPYmplY3QoZXhlYykpOworICAgIEpTT2JqZWN0UmVmIGZ1bmN0aW9uUmVm
ID0gdG9SZWYoZXhlYy0+Y2FsbGVlKCkpOworICAgIEpTT2JqZWN0UmVmIHRoaXNPYmpSZWYgPSB0
b1JlZihleGVjLT5ob3N0VGhpc1ZhbHVlKCkudG9UaGlzT2JqZWN0KGV4ZWMpKTsKIAotICAgIGlu
dCBhcmd1bWVudENvdW50ID0gc3RhdGljX2Nhc3Q8aW50PihhcmdzLnNpemUoKSk7CisgICAgaW50
IGFyZ3VtZW50Q291bnQgPSBzdGF0aWNfY2FzdDxpbnQ+KGV4ZWMtPmFyZ3VtZW50Q291bnQoKSk7
CiAgICAgVmVjdG9yPEpTVmFsdWVSZWYsIDE2PiBhcmd1bWVudHMoYXJndW1lbnRDb3VudCk7CiAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmd1bWVudENvdW50OyBpKyspCi0gICAgICAgIGFyZ3Vt
ZW50c1tpXSA9IHRvUmVmKGV4ZWMsIGFyZ3MuYXQoaSkpOworICAgICAgICBhcmd1bWVudHNbaV0g
PSB0b1JlZihleGVjLCBleGVjLT5hcmd1bWVudChpKSk7CiAKICAgICBKU1ZhbHVlUmVmIGV4Y2Vw
dGlvbiA9IDA7CiAgICAgSlNWYWx1ZVJlZiByZXN1bHQ7CiAgICAgewogICAgICAgICBBUElDYWxs
YmFja1NoaW0gY2FsbGJhY2tTaGltKGV4ZWMpOwotICAgICAgICByZXN1bHQgPSBzdGF0aWNfY2Fz
dDxKU0NhbGxiYWNrRnVuY3Rpb24qPihmdW5jdGlvbk9iamVjdCktPm1fY2FsbGJhY2soZXhlY1Jl
ZiwgZnVuY3Rpb25SZWYsIHRoaXNPYmpSZWYsIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cy5kYXRh
KCksICZleGNlcHRpb24pOworICAgICAgICByZXN1bHQgPSBzdGF0aWNfY2FzdDxKU0NhbGxiYWNr
RnVuY3Rpb24qPih0b0pTKGZ1bmN0aW9uUmVmKSktPm1fY2FsbGJhY2soZXhlY1JlZiwgZnVuY3Rp
b25SZWYsIHRoaXNPYmpSZWYsIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cy5kYXRhKCksICZleGNl
cHRpb24pOwogICAgIH0KICAgICBpZiAoZXhjZXB0aW9uKQogICAgICAgICBleGVjLT5zZXRFeGNl
cHRpb24odG9KUyhleGVjLCBleGNlcHRpb24pKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9K
U0NhbGxiYWNrRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9BUEkvSlND
YWxsYmFja0Z1bmN0aW9uLmgJKHJldmlzaW9uIDYwMzQxKQorKysgSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ2FsbGJhY2tGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHBy
aXZhdGU6CiAgICAgdmlydHVhbCBDYWxsVHlwZSBnZXRDYWxsRGF0YShDYWxsRGF0YSYpOwogICAg
IHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5m
bzsgfQogCi0gICAgc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOworICAgIHN0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY2FsbChFeGVjU3RhdGUqKTsKIAogICAgIEpTT2JqZWN0Q2FsbEFzRnVu
Y3Rpb25DYWxsYmFjayBtX2NhbGxiYWNrOwogfTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9K
U0NhbGxiYWNrT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2Fs
bGJhY2tPYmplY3QuaAkocmV2aXNpb24gNjAzNDEpCisrKyBKYXZhU2NyaXB0Q29yZS9BUEkvSlND
YWxsYmFja09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODIsNyArMTgyLDcgQEAgcHJpdmF0
ZToKICAKICAgICBzdGF0aWMgSlNDYWxsYmFja09iamVjdCogYXNDYWxsYmFja09iamVjdChKU1Zh
bHVlKTsKICAKLSAgICBzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwoRXhlY1N0YXRl
KiwgSlNPYmplY3QqIGZ1bmN0aW9uT2JqZWN0LCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYpOworICAgIHN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbChFeGVjU3RhdGUq
KTsKICAgICBzdGF0aWMgSlNPYmplY3QqIGNvbnN0cnVjdChFeGVjU3RhdGUqLCBKU09iamVjdCog
Y29uc3RydWN0b3IsIGNvbnN0IEFyZ0xpc3QmKTsKICAgIAogICAgIHN0YXRpYyBKU1ZhbHVlIHN0
YXRpY1ZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImKTsK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMu
aAkocmV2aXNpb24gNjAzNDEpCisrKyBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVj
dEZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAi
RXJyb3IuaCIKICNpbmNsdWRlICJKU0NhbGxiYWNrRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0Ns
YXNzUmVmLmgiCisjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2Jq
ZWN0LmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCiAjaW5jbHVkZSAiSlNPYmplY3RSZWYuaCIKQEAg
LTM3MCwxOCArMzcxLDE4IEBAIENhbGxUeXBlIEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT46OmdldENh
bGwKIH0KIAogdGVtcGxhdGUgPGNsYXNzIEJhc2U+Ci1KU1ZhbHVlIEpTQ2FsbGJhY2tPYmplY3Q8
QmFzZT46OmNhbGwoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogZnVuY3Rpb25PYmplY3QsIEpT
VmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NhbGxiYWNr
T2JqZWN0PEJhc2U+OjpjYWxsKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU0NvbnRleHRSZWYg
ZXhlY1JlZiA9IHRvUmVmKGV4ZWMpOwotICAgIEpTT2JqZWN0UmVmIGZ1bmN0aW9uUmVmID0gdG9S
ZWYoZnVuY3Rpb25PYmplY3QpOwotICAgIEpTT2JqZWN0UmVmIHRoaXNPYmpSZWYgPSB0b1JlZih0
aGlzVmFsdWUudG9UaGlzT2JqZWN0KGV4ZWMpKTsKKyAgICBKU09iamVjdFJlZiBmdW5jdGlvblJl
ZiA9IHRvUmVmKGV4ZWMtPmNhbGxlZSgpKTsKKyAgICBKU09iamVjdFJlZiB0aGlzT2JqUmVmID0g
dG9SZWYoZXhlYy0+aG9zdFRoaXNWYWx1ZSgpLnRvVGhpc09iamVjdChleGVjKSk7CiAgICAgCi0g
ICAgZm9yIChKU0NsYXNzUmVmIGpzQ2xhc3MgPSBzdGF0aWNfY2FzdDxKU0NhbGxiYWNrT2JqZWN0
PEJhc2U+Kj4oZnVuY3Rpb25PYmplY3QpLT5jbGFzc1JlZigpOyBqc0NsYXNzOyBqc0NsYXNzID0g
anNDbGFzcy0+cGFyZW50Q2xhc3MpIHsKKyAgICBmb3IgKEpTQ2xhc3NSZWYganNDbGFzcyA9IHN0
YXRpY19jYXN0PEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT4qPih0b0pTKGZ1bmN0aW9uUmVmKSktPmNs
YXNzUmVmKCk7IGpzQ2xhc3M7IGpzQ2xhc3MgPSBqc0NsYXNzLT5wYXJlbnRDbGFzcykgewogICAg
ICAgICBpZiAoSlNPYmplY3RDYWxsQXNGdW5jdGlvbkNhbGxiYWNrIGNhbGxBc0Z1bmN0aW9uID0g
anNDbGFzcy0+Y2FsbEFzRnVuY3Rpb24pIHsKLSAgICAgICAgICAgIGludCBhcmd1bWVudENvdW50
ID0gc3RhdGljX2Nhc3Q8aW50PihhcmdzLnNpemUoKSk7CisgICAgICAgICAgICBpbnQgYXJndW1l
bnRDb3VudCA9IHN0YXRpY19jYXN0PGludD4oZXhlYy0+YXJndW1lbnRDb3VudCgpKTsKICAgICAg
ICAgICAgIFZlY3RvcjxKU1ZhbHVlUmVmLCAxNj4gYXJndW1lbnRzKGFyZ3VtZW50Q291bnQpOwog
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmd1bWVudENvdW50OyBpKyspCi0gICAg
ICAgICAgICAgICAgYXJndW1lbnRzW2ldID0gdG9SZWYoZXhlYywgYXJncy5hdChpKSk7CisgICAg
ICAgICAgICAgICAgYXJndW1lbnRzW2ldID0gdG9SZWYoZXhlYywgZXhlYy0+YXJndW1lbnQoaSkp
OwogICAgICAgICAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOwogICAgICAgICAgICAgSlNW
YWx1ZSByZXN1bHQ7CiAgICAgICAgICAgICB7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9kZWJ1Z2dl
ci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvZGVi
dWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIEphdmFTY3Jp
cHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDQsMTAgKzQ0LDEwIEBAIGNvbnN0IFVTdHJpbmcqIERlYnVnZ2VyQ2FsbEZyYW1lOjpmdW5jdGkK
ICAgICBpZiAoIW1fY2FsbEZyYW1lLT5jYWxsZWUoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAg
ICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGFzRnVuY3Rpb24obV9jYWxsRnJhbWUtPmNhbGxlZSgp
KTsKLSAgICBpZiAoIWZ1bmN0aW9uKQorICAgIEpTT2JqZWN0KiBmdW5jdGlvbiA9IG1fY2FsbEZy
YW1lLT5jYWxsZWUoKTsKKyAgICBpZiAoIWZ1bmN0aW9uIHx8ICFmdW5jdGlvbi0+aW5oZXJpdHMo
JkpTRnVuY3Rpb246OmluZm8pKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gJmZ1bmN0
aW9uLT5uYW1lKG1fY2FsbEZyYW1lKTsKKyAgICByZXR1cm4gJmFzRnVuY3Rpb24oZnVuY3Rpb24p
LT5uYW1lKG1fY2FsbEZyYW1lKTsKIH0KICAgICAKIFVTdHJpbmcgRGVidWdnZXJDYWxsRnJhbWU6
OmNhbGN1bGF0ZWRGdW5jdGlvbk5hbWUoKSBjb25zdApAQCAtNTUsMTMgKzU1LDExIEBAIFVTdHJp
bmcgRGVidWdnZXJDYWxsRnJhbWU6OmNhbGN1bGF0ZWRGdW4KICAgICBpZiAoIW1fY2FsbEZyYW1l
LT5jb2RlQmxvY2soKSkKICAgICAgICAgcmV0dXJuIFVTdHJpbmcoKTsKIAotICAgIGlmICghbV9j
YWxsRnJhbWUtPmNhbGxlZSgpKQotICAgICAgICByZXR1cm4gVVN0cmluZygpOworICAgIEpTT2Jq
ZWN0KiBmdW5jdGlvbiA9IG1fY2FsbEZyYW1lLT5jYWxsZWUoKTsKKyAgICBpZiAoIWZ1bmN0aW9u
IHx8ICFmdW5jdGlvbi0+aW5oZXJpdHMoJkpTRnVuY3Rpb246OmluZm8pKQorICAgICAgICByZXR1
cm4gMDsKIAotICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gYXNGdW5jdGlvbihtX2NhbGxGcmFt
ZS0+Y2FsbGVlKCkpOwotICAgIGlmICghZnVuY3Rpb24pCi0gICAgICAgIHJldHVybiBVU3RyaW5n
KCk7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uLT5jYWxjdWxhdGVkRGlzcGxheU5hbWUobV9jYWxsRnJh
bWUpOworICAgIHJldHVybiBhc0Z1bmN0aW9uKGZ1bmN0aW9uKS0+Y2FsY3VsYXRlZERpc3BsYXlO
YW1lKG1fY2FsbEZyYW1lKTsKIH0KIAogRGVidWdnZXJDYWxsRnJhbWU6OlR5cGUgRGVidWdnZXJD
YWxsRnJhbWU6OnR5cGUoKSBjb25zdApAQCAtNzQsMTAgKzcyLDE1IEBAIERlYnVnZ2VyQ2FsbEZy
YW1lOjpUeXBlIERlYnVnZ2VyQ2FsbEZyYW0KIAogSlNPYmplY3QqIERlYnVnZ2VyQ2FsbEZyYW1l
Ojp0aGlzT2JqZWN0KCkgY29uc3QKIHsKLSAgICBpZiAoIW1fY2FsbEZyYW1lLT5jb2RlQmxvY2so
KSkKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsK
KyAgICBpZiAoIWNvZGVCbG9jaykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IG1fY2FsbEZyYW1lLT5yKGNvZGVCbG9jay0+dGhpc1JlZ2lzdGVyKCkpLmpzVmFs
dWUoKTsKKyAgICBpZiAoIXRoaXNWYWx1ZS5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gMDsK
IAotICAgIHJldHVybiBhc09iamVjdChtX2NhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIHJl
dHVybiBhc09iamVjdCh0aGlzVmFsdWUpOwogfQogCiBKU1ZhbHVlIERlYnVnZ2VyQ2FsbEZyYW1l
OjpldmFsdWF0ZShjb25zdCBVU3RyaW5nJiBzY3JpcHQsIEpTVmFsdWUmIGV4Y2VwdGlvbikgY29u
c3QKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAkocmV2aXNp
b24gNjAzNDEpCisrKyBKYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSwxMSArMzEsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotSlNW
YWx1ZSBDYWxsRnJhbWU6OnRoaXNWYWx1ZSgpCi17Ci0gICAgcmV0dXJuIHRoaXNbY29kZUJsb2Nr
KCktPnRoaXNSZWdpc3RlcigpXS5qc1ZhbHVlKCk7Ci19Ci0KICNpZm5kZWYgTkRFQlVHCiB2b2lk
IENhbGxGcmFtZTo6ZHVtcENhbGxlcigpCiB7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9DYWxsRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9DYWxsRnJhbWUuaAkocmV2aXNpb24gNjAzNDEpCisrKyBKYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9DYWxsRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTYgKzM4LDEzIEBAIG5hbWVz
cGFjZSBKU0MgIHsKICAgICAvLyBQYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIG1vc3Qg
ZnVuY3Rpb25zLgogICAgIGNsYXNzIEV4ZWNTdGF0ZSA6IHByaXZhdGUgUmVnaXN0ZXIgewogICAg
IHB1YmxpYzoKLSAgICAgICAgSlNGdW5jdGlvbiogY2FsbGVlKCkgY29uc3QgeyByZXR1cm4gdGhp
c1tSZWdpc3RlckZpbGU6OkNhbGxlZV0uZnVuY3Rpb24oKTsgfQorICAgICAgICBKU09iamVjdCog
Y2FsbGVlKCkgY29uc3QgeyByZXR1cm4gdGhpc1tSZWdpc3RlckZpbGU6OkNhbGxlZV0uZnVuY3Rp
b24oKTsgfQogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIHRo
aXNbUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2tdLlJlZ2lzdGVyOjpjb2RlQmxvY2soKTsgfQogICAg
ICAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbigpIGNvbnN0CiAgICAgICAgIHsKICAgICAg
ICAgICAgIEFTU0VSVCh0aGlzW1JlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbl0uUmVnaXN0ZXI6OnNj
b3BlQ2hhaW4oKSk7CiAgICAgICAgICAgICByZXR1cm4gdGhpc1tSZWdpc3RlckZpbGU6OlNjb3Bl
Q2hhaW5dLlJlZ2lzdGVyOjpzY29wZUNoYWluKCk7CiAgICAgICAgIH0KLSAgICAgICAgaW50IGFy
Z3VtZW50Q291bnQoKSBjb25zdCB7IHJldHVybiB0aGlzW1JlZ2lzdGVyRmlsZTo6QXJndW1lbnRD
b3VudF0uaSgpOyB9Ci0KLSAgICAgICAgSlNWYWx1ZSB0aGlzVmFsdWUoKTsKIAogICAgICAgICAv
LyBHbG9iYWwgb2JqZWN0IGluIHdoaWNoIGV4ZWN1dGlvbiBiZWdhbi4KICAgICAgICAgSlNHbG9i
YWxPYmplY3QqIGR5bmFtaWNHbG9iYWxPYmplY3QoKTsKQEAgLTExOCw3ICsxMTUsNyBAQCBuYW1l
c3BhY2UgSlNDICB7CiAgICAgICAgIHZvaWQgc2V0U2NvcGVDaGFpbihTY29wZUNoYWluTm9kZSog
c2NvcGVDaGFpbikgeyBzdGF0aWNfY2FzdDxSZWdpc3Rlcio+KHRoaXMpW1JlZ2lzdGVyRmlsZTo6
U2NvcGVDaGFpbl0gPSBzY29wZUNoYWluOyB9CiAKICAgICAgICAgQUxXQVlTX0lOTElORSB2b2lk
IGluaXQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEluc3RydWN0aW9uKiB2UEMsIFNjb3BlQ2hhaW5O
b2RlKiBzY29wZUNoYWluLAotICAgICAgICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSwgaW50
LCBpbnQgYXJnYywgSlNGdW5jdGlvbiogZnVuY3Rpb24pCisgICAgICAgICAgICBDYWxsRnJhbWUq
IGNhbGxlckZyYW1lLCBpbnQgYXJnYywgSlNPYmplY3QqIGNhbGxlZSkKICAgICAgICAgewogICAg
ICAgICAgICAgQVNTRVJUKGNhbGxlckZyYW1lKTsgLy8gVXNlIG5vQ2FsbGVyKCkgcmF0aGVyIHRo
YW4gMCBmb3IgdGhlIG91dGVyIGhvc3QgY2FsbCBmcmFtZSBjYWxsZXIuCiAKQEAgLTEyNiwyMSAr
MTIzLDM0IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgICAgIHNldFNjb3BlQ2hhaW4oc2Nv
cGVDaGFpbik7CiAgICAgICAgICAgICBzZXRDYWxsZXJGcmFtZShjYWxsZXJGcmFtZSk7CiAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxSZWdpc3Rlcio+KHRoaXMpW1JlZ2lzdGVyRmlsZTo6UmV0dXJu
UENdID0gdlBDOyAvLyBUaGlzIGlzIGVpdGhlciBhbiBJbnN0cnVjdGlvbiogb3IgYSBwb2ludGVy
IGludG8gSklUIGdlbmVyYXRlZCBjb2RlIHN0b3JlZCBhcyBhbiBJbnN0cnVjdGlvbiouCi0gICAg
ICAgICAgICBzZXRBcmd1bWVudENvdW50KGFyZ2MpOyAvLyBvcmlnaW5hbCBhcmd1bWVudCBjb3Vu
dCAoZm9yIHRoZSBzYWtlIG9mIHRoZSAiYXJndW1lbnRzIiBvYmplY3QpCi0gICAgICAgICAgICBz
ZXRDYWxsZWUoZnVuY3Rpb24pOworICAgICAgICAgICAgc2V0QXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMoYXJnYyk7IC8vIG9yaWdpbmFsIGFyZ3VtZW50IGNvdW50IChmb3IgdGhlIHNha2Ugb2Yg
dGhlICJhcmd1bWVudHMiIG9iamVjdCkKKyAgICAgICAgICAgIHNldENhbGxlZShjYWxsZWUpOwog
ICAgICAgICB9CiAKICAgICAgICAgLy8gUmVhZCBhIHJlZ2lzdGVyIGZyb20gdGhlIGNvZGVmcmFt
ZSAob3IgY29uc3RhbnQgZnJvbSB0aGUgQ29kZUJsb2NrKS4KICAgICAgICAgaW5saW5lIFJlZ2lz
dGVyJiByKGludCk7CiAKKyAgICAgICAgLy8gQWNjZXNzIHRvIGFyZ3VtZW50cy4KKyAgICAgICAg
aW50IGhvc3RUaGlzUmVnaXN0ZXIoKSB7IHJldHVybiAtUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVI
ZWFkZXJTaXplIC0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKTsgfQorICAgICAgICBKU1Zh
bHVlIGhvc3RUaGlzVmFsdWUoKSB7IHJldHVybiB0aGlzW2hvc3RUaGlzUmVnaXN0ZXIoKV0uanNW
YWx1ZSgpOyB9CisgICAgICAgIHNpemVfdCBhcmd1bWVudENvdW50KCkgY29uc3QgeyByZXR1cm4g
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSAtIDE7IH0KKyAgICAgICAgc2l6ZV90IGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgY29uc3QgeyByZXR1cm4gdGhpc1tSZWdpc3RlckZpbGU6
OkFyZ3VtZW50Q291bnRdLmkoKTsgfQorICAgICAgICBKU1ZhbHVlIGFyZ3VtZW50KGludCBhcmd1
bWVudE51bWJlcikKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGFyZ3VtZW50SW5kZXggPSAt
UmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplIC0gdGhpc1tSZWdpc3RlckZpbGU6OkFy
Z3VtZW50Q291bnRdLmkoKSArIGFyZ3VtZW50TnVtYmVyICsgMTsKKyAgICAgICAgICAgIGlmIChh
cmd1bWVudEluZGV4ID49IC1SZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgICAgICByZXR1cm4gdGhp
c1thcmd1bWVudEluZGV4XS5qc1ZhbHVlKCk7CisgICAgICAgIH0KKwogICAgICAgICBzdGF0aWMg
Q2FsbEZyYW1lKiBub0NhbGxlcigpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbEZyYW1l
Kj4oSG9zdENhbGxGcmFtZUZsYWcpOyB9CiAKICAgICAgICAgYm9vbCBoYXNIb3N0Q2FsbEZyYW1l
RmxhZygpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRoaXMpICYg
SG9zdENhbGxGcmFtZUZsYWc7IH0KICAgICAgICAgQ2FsbEZyYW1lKiBhZGRIb3N0Q2FsbEZyYW1l
RmxhZygpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbEZyYW1lKj4ocmVpbnRl
cnByZXRfY2FzdDxpbnRwdHJfdD4odGhpcykgfCBIb3N0Q2FsbEZyYW1lRmxhZyk7IH0KICAgICAg
ICAgQ2FsbEZyYW1lKiByZW1vdmVIb3N0Q2FsbEZyYW1lRmxhZygpIHsgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8Q2FsbEZyYW1lKj4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odGhpcykgJiB+
SG9zdENhbGxGcmFtZUZsYWcpOyB9CiAKLSAgICAgICAgdm9pZCBzZXRBcmd1bWVudENvdW50KGlu
dCBjb3VudCkgeyBzdGF0aWNfY2FzdDxSZWdpc3Rlcio+KHRoaXMpW1JlZ2lzdGVyRmlsZTo6QXJn
dW1lbnRDb3VudF0gPSBSZWdpc3Rlcjo6d2l0aEludChjb3VudCk7IH0KLSAgICAgICAgdm9pZCBz
ZXRDYWxsZWUoSlNGdW5jdGlvbiogY2FsbGVlKSB7IHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4odGhp
cylbUmVnaXN0ZXJGaWxlOjpDYWxsZWVdID0gY2FsbGVlOyB9CisgICAgICAgIHZvaWQgc2V0QXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoaW50IGNvdW50KSB7IHN0YXRpY19jYXN0PFJlZ2lzdGVy
Kj4odGhpcylbUmVnaXN0ZXJGaWxlOjpBcmd1bWVudENvdW50XSA9IFJlZ2lzdGVyOjp3aXRoSW50
KGNvdW50KTsgfQorICAgICAgICB2b2lkIHNldENhbGxlZShKU09iamVjdCogY2FsbGVlKSB7IHN0
YXRpY19jYXN0PFJlZ2lzdGVyKj4odGhpcylbUmVnaXN0ZXJGaWxlOjpDYWxsZWVdID0gY2FsbGVl
OyB9CiAgICAgICAgIHZvaWQgc2V0Q29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrKSB7IHN0
YXRpY19jYXN0PFJlZ2lzdGVyKj4odGhpcylbUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2tdID0gY29k
ZUJsb2NrOyB9CiAKICAgICBwcml2YXRlOgpJbmRleDogSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBKYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3NSw3ICszNzUs
NyBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBJbnRlcnByZXRlcjo6Y2FsbEV2CiAKICAgICBKU1Zh
bHVlIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7CiAgICAgaWYgKGV2YWwpCi0gICAgICAgIHJlc3Vs
dCA9IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmludGVycHJldGVyLT5leGVjdXRlKGV2YWwuZ2V0
KCksIGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKS50b1RoaXNPYmplY3QoY2FsbEZy
YW1lKSwgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSAtIHJlZ2lzdGVyRmlsZS0+c3RhcnQoKSArIHJl
Z2lzdGVyT2Zmc2V0LCBzY29wZUNoYWluLCAmZXhjZXB0aW9uVmFsdWUpOworICAgICAgICByZXN1
bHQgPSBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5pbnRlcnByZXRlci0+ZXhlY3V0ZShldmFsLmdl
dCgpLCBjYWxsRnJhbWUsIGNhbGxGcmFtZS0+cihjb2RlQmxvY2stPnRoaXNSZWdpc3RlcigpKS5q
c1ZhbHVlKCkudG9UaGlzT2JqZWN0KGNhbGxGcmFtZSksIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkg
LSByZWdpc3RlckZpbGUtPnN0YXJ0KCkgKyByZWdpc3Rlck9mZnNldCwgc2NvcGVDaGFpbiwgJmV4
Y2VwdGlvblZhbHVlKTsKIAogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC02MjgsOCArNjI4LDEw
IEBAIE5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6OnQKICAgICAgICAgICAg
IHJldHVybiAwOwogICAgIH0KIAotICAgIC8vIE5vdyB1bndpbmQgdGhlIHNjb3BlIGNoYWluIHdp
dGhpbiB0aGUgZXhjZXB0aW9uIGhhbmRsZXIncyBjYWxsIGZyYW1lLgorICAgIC8vIFNocmluayB0
aGUgSlMgc3RhY2ssIGluIGNhc2Ugc3RhY2sgb3ZlcmZsb3cgbWFkZSBpdCBodWdlLgorICAgIG1f
cmVnaXN0ZXJGaWxlLnNocmluayhjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgY2FsbEZyYW1lLT5j
b2RlQmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMpOwogCisgICAgLy8gVW53aW5kIHRoZSBz
Y29wZSBjaGFpbiB3aXRoaW4gdGhlIGV4Y2VwdGlvbiBoYW5kbGVyJ3MgY2FsbCBmcmFtZS4KICAg
ICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiA9IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpOwog
ICAgIFNjb3BlQ2hhaW4gc2Moc2NvcGVDaGFpbik7CiAgICAgaW50IHNjb3BlRGVsdGEgPSBkZXB0
aChjb2RlQmxvY2ssIHNjKSAtIGhhbmRsZXItPnNjb3BlRGVwdGg7CkBAIC02NjEsMTkgKzY2Mywy
MCBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKFByb2dyYW1FeGVjCiAgICAgICAgIHJl
dHVybiBqc051bGwoKTsKICAgICB9CiAKLSAgICBEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGUgZ2xv
YmFsT2JqZWN0U2NvcGUoY2FsbEZyYW1lLCBzY29wZUNoYWluLT5nbG9iYWxPYmplY3QpOwotCiAg
ICAgSlNHbG9iYWxPYmplY3QqIGxhc3RHbG9iYWxPYmplY3QgPSBtX3JlZ2lzdGVyRmlsZS5nbG9i
YWxPYmplY3QoKTsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gY2FsbEZyYW1l
LT5keW5hbWljR2xvYmFsT2JqZWN0KCk7CiAgICAgZ2xvYmFsT2JqZWN0LT5jb3B5R2xvYmFsc1Rv
KG1fcmVnaXN0ZXJGaWxlKTsKIAogICAgIENhbGxGcmFtZSogbmV3Q2FsbEZyYW1lID0gQ2FsbEZy
YW1lOjpjcmVhdGUob2xkRW5kICsgY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgKyBSZWdpc3Rl
ckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUpOwotICAgIG5ld0NhbGxGcmFtZS0+cihjb2RlQmxv
Y2stPnRoaXNSZWdpc3RlcigpKSA9IEpTVmFsdWUodGhpc09iaik7Ci0gICAgbmV3Q2FsbEZyYW1l
LT5pbml0KGNvZGVCbG9jaywgMCwgc2NvcGVDaGFpbiwgQ2FsbEZyYW1lOjpub0NhbGxlcigpLCAw
LCAwLCAwKTsKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgPT0gMSk7IC8v
IDEgcGFyYW1ldGVyIGZvciAndGhpcycuCisgICAgbmV3Q2FsbEZyYW1lLT5pbml0KGNvZGVCbG9j
aywgMCwgc2NvcGVDaGFpbiwgQ2FsbEZyYW1lOjpub0NhbGxlcigpLCBjb2RlQmxvY2stPm1fbnVt
UGFyYW1ldGVycywgMCk7CisgICAgbmV3Q2FsbEZyYW1lLT5yKG5ld0NhbGxGcmFtZS0+aG9zdFRo
aXNSZWdpc3RlcigpKSA9IEpTVmFsdWUodGhpc09iaik7CiAKICAgICBpZiAoY29kZUJsb2NrLT5u
ZWVkc0Z1bGxTY29wZUNoYWluKCkpCiAgICAgICAgIHNjb3BlQ2hhaW4tPnJlZigpOwogCisgICAg
RHluYW1pY0dsb2JhbE9iamVjdFNjb3BlIGdsb2JhbE9iamVjdFNjb3BlKGNhbGxGcmFtZSwgc2Nv
cGVDaGFpbi0+Z2xvYmFsT2JqZWN0KTsKKwogICAgIFByb2ZpbGVyKiogcHJvZmlsZXIgPSBQcm9m
aWxlcjo6ZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlKCk7CiAgICAgaWYgKCpwcm9maWxlcikKICAg
ICAgICAgKCpwcm9maWxlciktPndpbGxFeGVjdXRlKG5ld0NhbGxGcmFtZSwgcHJvZ3JhbS0+c291
cmNlVVJMKCksIHByb2dyYW0tPmxpbmVObygpKTsKQEAgLTcwMiw5ICs3MDUsOSBAQCBKU1ZhbHVl
IEludGVycHJldGVyOjpleGVjdXRlKFByb2dyYW1FeGVjCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwoRnVuY3Rpb25FeGVjdXRhYmxlKiBm
dW5jdGlvbkV4ZWN1dGFibGUsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU0Z1bmN0aW9uKiBmdW5j
dGlvbiwgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIFNjb3BlQ2hhaW5O
b2RlKiBzY29wZUNoYWluLCBKU1ZhbHVlKiBleGNlcHRpb24pCitKU1ZhbHVlIEludGVycHJldGVy
OjpleGVjdXRlQ2FsbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNPYmplY3QqIGZ1bmN0aW9uLCBD
YWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmIGNhbGxEYXRhLCBKU1ZhbHVlIHRoaXNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncywgSlNWYWx1ZSogZXhjZXB0aW9uKQogewotICAgIEFT
U0VSVCghc2NvcGVDaGFpbi0+Z2xvYmFsRGF0YS0+ZXhjZXB0aW9uKTsKKyAgICBBU1NFUlQoIWNh
bGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbik7CiAKICAgICBpZiAobV9yZWVudHJ5RGVw
dGggPj0gTWF4U21hbGxUaHJlYWRSZWVudHJ5RGVwdGgpIHsKICAgICAgICAgaWYgKG1fcmVlbnRy
eURlcHRoID49IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLm1heFJlZW50cnlEZXB0aCkgewpAQCAt
NzE0LDUxICs3MTcsNzkgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwoRnVuY3Rp
bwogICAgIH0KIAogICAgIFJlZ2lzdGVyKiBvbGRFbmQgPSBtX3JlZ2lzdGVyRmlsZS5lbmQoKTsK
LSAgICBpbnQgYXJnYyA9IDEgKyBhcmdzLnNpemUoKTsgLy8gaW1wbGljaXQgInRoaXMiIHBhcmFt
ZXRlcgorICAgIGludCBhcmdDb3VudCA9IDEgKyBhcmdzLnNpemUoKTsgLy8gaW1wbGljaXQgInRo
aXMiIHBhcmFtZXRlcgorICAgIHNpemVfdCByZWdpc3Rlck9mZnNldCA9IGFyZ0NvdW50ICsgUmVn
aXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOwogCi0gICAgaWYgKCFtX3JlZ2lzdGVyRmls
ZS5ncm93KG9sZEVuZCArIGFyZ2MpKSB7CisgICAgaWYgKCFtX3JlZ2lzdGVyRmlsZS5ncm93KG9s
ZEVuZCArIHJlZ2lzdGVyT2Zmc2V0KSkgewogICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlU3Rh
Y2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSk7CiAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAg
ICB9CiAKLSAgICBEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGUgZ2xvYmFsT2JqZWN0U2NvcGUoY2Fs
bEZyYW1lLCBzY29wZUNoYWluLT5nbG9iYWxPYmplY3QpOwotCiAgICAgQ2FsbEZyYW1lKiBuZXdD
YWxsRnJhbWUgPSBDYWxsRnJhbWU6OmNyZWF0ZShvbGRFbmQpOwogICAgIHNpemVfdCBkc3QgPSAw
OwotICAgIG5ld0NhbGxGcmFtZS0+cigwKSA9IEpTVmFsdWUodGhpc09iaik7CisgICAgbmV3Q2Fs
bEZyYW1lLT5yKDApID0gdGhpc1ZhbHVlOwogICAgIEFyZ0xpc3Q6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IGFyZ3MuZW5kKCk7CiAgICAgZm9yIChBcmdMaXN0Ojpjb25zdF9pdGVyYXRvciBpdCA9IGFy
Z3MuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQogICAgICAgICBuZXdDYWxsRnJhbWUtPnIoKytk
c3QpID0gKml0OwogCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAmZnVuY3Rpb25FeGVjdXRh
YmxlLT5ieXRlY29kZUZvckNhbGwoY2FsbEZyYW1lLCBzY29wZUNoYWluKTsKLSAgICBuZXdDYWxs
RnJhbWUgPSBzbGlkZVJlZ2lzdGVyV2luZG93Rm9yQ2FsbChjb2RlQmxvY2ssICZtX3JlZ2lzdGVy
RmlsZSwgbmV3Q2FsbEZyYW1lLCBhcmdjICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJT
aXplLCBhcmdjKTsKLSAgICBpZiAoVU5MSUtFTFkoIW5ld0NhbGxGcmFtZSkpIHsKLSAgICAgICAg
KmV4Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpOworICAgIGlm
IChjYWxsVHlwZSA9PSBDYWxsVHlwZUpTKSB7CisgICAgICAgIFNjb3BlQ2hhaW5Ob2RlKiBjYWxs
RGF0YVNjb3BlQ2hhaW4gPSBjYWxsRGF0YS5qcy5zY29wZUNoYWluOworICAgICAgICBDb2RlQmxv
Y2sqIG5ld0NvZGVCbG9jayA9ICZjYWxsRGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUtPmJ5dGVj
b2RlRm9yQ2FsbChjYWxsRnJhbWUsIGNhbGxEYXRhU2NvcGVDaGFpbik7CisKKyAgICAgICAgbmV3
Q2FsbEZyYW1lID0gc2xpZGVSZWdpc3RlcldpbmRvd0ZvckNhbGwobmV3Q29kZUJsb2NrLCAmbV9y
ZWdpc3RlckZpbGUsIG5ld0NhbGxGcmFtZSwgcmVnaXN0ZXJPZmZzZXQsIGFyZ0NvdW50KTsKKyAg
ICAgICAgaWYgKFVOTElLRUxZKCFuZXdDYWxsRnJhbWUpKSB7CisgICAgICAgICAgICAqZXhjZXB0
aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSk7CisgICAgICAgICAgICBt
X3JlZ2lzdGVyRmlsZS5zaHJpbmsob2xkRW5kKTsKKyAgICAgICAgICAgIHJldHVybiBqc051bGwo
KTsKKyAgICAgICAgfQorCisgICAgICAgIG5ld0NhbGxGcmFtZS0+aW5pdChuZXdDb2RlQmxvY2ss
IDAsIGNhbGxEYXRhU2NvcGVDaGFpbiwgY2FsbEZyYW1lLT5hZGRIb3N0Q2FsbEZyYW1lRmxhZygp
LCBhcmdDb3VudCwgZnVuY3Rpb24pOworCisgICAgICAgIER5bmFtaWNHbG9iYWxPYmplY3RTY29w
ZSBnbG9iYWxPYmplY3RTY29wZShuZXdDYWxsRnJhbWUsIGNhbGxEYXRhU2NvcGVDaGFpbi0+Z2xv
YmFsT2JqZWN0KTsKKworICAgICAgICBQcm9maWxlcioqIHByb2ZpbGVyID0gUHJvZmlsZXI6OmVu
YWJsZWRQcm9maWxlclJlZmVyZW5jZSgpOworICAgICAgICBpZiAoKnByb2ZpbGVyKQorICAgICAg
ICAgICAgKCpwcm9maWxlciktPndpbGxFeGVjdXRlKG5ld0NhbGxGcmFtZSwgZnVuY3Rpb24pOwor
CisgICAgICAgIEpTVmFsdWUgcmVzdWx0OworICAgICAgICB7CisgICAgICAgICAgICBTYW1wbGlu
Z1Rvb2w6OkNhbGxSZWNvcmQgY2FsbFJlY29yZChtX3NhbXBsZXIuZ2V0KCkpOworCisgICAgICAg
ICAgICBtX3JlZW50cnlEZXB0aCsrOworICAgICNpZiBFTkFCTEUoSklUKQorICAgICAgICAgICAg
cmVzdWx0ID0gY2FsbERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5qaXRDb2RlRm9yQ2FsbChu
ZXdDYWxsRnJhbWUsIGNhbGxEYXRhU2NvcGVDaGFpbikuZXhlY3V0ZSgmbV9yZWdpc3RlckZpbGUs
IG5ld0NhbGxGcmFtZSwgY2FsbERhdGFTY29wZUNoYWluLT5nbG9iYWxEYXRhLCBleGNlcHRpb24p
OworICAgICNlbHNlCisgICAgICAgICAgICByZXN1bHQgPSBwcml2YXRlRXhlY3V0ZShOb3JtYWws
ICZtX3JlZ2lzdGVyRmlsZSwgbmV3Q2FsbEZyYW1lLCBleGNlcHRpb24pOworICAgICNlbmRpZgor
ICAgICAgICAgICAgbV9yZWVudHJ5RGVwdGgtLTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgq
cHJvZmlsZXIpCisgICAgICAgICAgICAoKnByb2ZpbGVyKS0+ZGlkRXhlY3V0ZShuZXdDYWxsRnJh
bWUsIGZ1bmN0aW9uKTsKKwogICAgICAgICBtX3JlZ2lzdGVyRmlsZS5zaHJpbmsob2xkRW5kKTsK
LSAgICAgICAgcmV0dXJuIGpzTnVsbCgpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
LSAgICAvLyBhIDAgY29kZUJsb2NrIGluZGljYXRlcyBhIGJ1aWx0LWluIGNhbGxlcgotICAgIG5l
d0NhbGxGcmFtZS0+aW5pdChjb2RlQmxvY2ssIDAsIHNjb3BlQ2hhaW4sIGNhbGxGcmFtZS0+YWRk
SG9zdENhbGxGcmFtZUZsYWcoKSwgMCwgYXJnYywgZnVuY3Rpb24pOworCisgICAgQVNTRVJUKGNh
bGxUeXBlID09IENhbGxUeXBlSG9zdCk7CisgICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4g
PSBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKTsKKyAgICBuZXdDYWxsRnJhbWUgPSBDYWxsRnJhbWU6
OmNyZWF0ZShuZXdDYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgcmVnaXN0ZXJPZmZzZXQpOworICAg
IG5ld0NhbGxGcmFtZS0+aW5pdCgwLCAwLCBzY29wZUNoYWluLCBjYWxsRnJhbWUtPmFkZEhvc3RD
YWxsRnJhbWVGbGFnKCksIGFyZ0NvdW50LCBmdW5jdGlvbik7CisKKyAgICBEeW5hbWljR2xvYmFs
T2JqZWN0U2NvcGUgZ2xvYmFsT2JqZWN0U2NvcGUobmV3Q2FsbEZyYW1lLCBzY29wZUNoYWluLT5n
bG9iYWxPYmplY3QpOwogCiAgICAgUHJvZmlsZXIqKiBwcm9maWxlciA9IFByb2ZpbGVyOjplbmFi
bGVkUHJvZmlsZXJSZWZlcmVuY2UoKTsKICAgICBpZiAoKnByb2ZpbGVyKQotICAgICAgICAoKnBy
b2ZpbGVyKS0+d2lsbEV4ZWN1dGUoY2FsbEZyYW1lLCBmdW5jdGlvbik7CisgICAgICAgICgqcHJv
ZmlsZXIpLT53aWxsRXhlY3V0ZShuZXdDYWxsRnJhbWUsIGZ1bmN0aW9uKTsKIAogICAgIEpTVmFs
dWUgcmVzdWx0OwogICAgIHsKLSAgICAgICAgU2FtcGxpbmdUb29sOjpDYWxsUmVjb3JkIGNhbGxS
ZWNvcmQobV9zYW1wbGVyLmdldCgpKTsKLQotICAgICAgICBtX3JlZW50cnlEZXB0aCsrOwotI2lm
IEVOQUJMRShKSVQpCi0gICAgICAgIHJlc3VsdCA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+aml0Q29k
ZUZvckNhbGwobmV3Q2FsbEZyYW1lLCBzY29wZUNoYWluKS5leGVjdXRlKCZtX3JlZ2lzdGVyRmls
ZSwgbmV3Q2FsbEZyYW1lLCBzY29wZUNoYWluLT5nbG9iYWxEYXRhLCBleGNlcHRpb24pOwotI2Vs
c2UKLSAgICAgICAgcmVzdWx0ID0gcHJpdmF0ZUV4ZWN1dGUoTm9ybWFsLCAmbV9yZWdpc3RlckZp
bGUsIG5ld0NhbGxGcmFtZSwgZXhjZXB0aW9uKTsKLSNlbmRpZgotICAgICAgICBtX3JlZW50cnlE
ZXB0aC0tOworICAgICAgICBTYW1wbGluZ1Rvb2w6Okhvc3RDYWxsUmVjb3JkIGNhbGxSZWNvcmQo
bV9zYW1wbGVyLmdldCgpKTsKKyAgICAgICAgcmVzdWx0ID0gY2FsbERhdGEubmF0aXZlLmZ1bmN0
aW9uKG5ld0NhbGxGcmFtZSk7CiAgICAgfQogCiAgICAgaWYgKCpwcm9maWxlcikKLSAgICAgICAg
KCpwcm9maWxlciktPmRpZEV4ZWN1dGUoY2FsbEZyYW1lLCBmdW5jdGlvbik7CisgICAgICAgICgq
cHJvZmlsZXIpLT5kaWRFeGVjdXRlKG5ld0NhbGxGcmFtZSwgZnVuY3Rpb24pOwogCiAgICAgbV9y
ZWdpc3RlckZpbGUuc2hyaW5rKG9sZEVuZCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTc4Myw4
ICs4MTQsNiBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KEZ1CiAgICAg
ICAgIHJldHVybiBqc051bGwoKTsKICAgICB9CiAKLSAgICBEeW5hbWljR2xvYmFsT2JqZWN0U2Nv
cGUgZ2xvYmFsT2JqZWN0U2NvcGUoY2FsbEZyYW1lLCBzY29wZUNoYWluLT5nbG9iYWxPYmplY3Qp
OwotCiAgICAgQ2FsbEZyYW1lKiBuZXdDYWxsRnJhbWUgPSBDYWxsRnJhbWU6OmNyZWF0ZShvbGRF
bmQpOwogICAgIHNpemVfdCBkc3QgPSAwOwogICAgIG5ld0NhbGxGcmFtZS0+cigwKSA9IEpTVmFs
dWUodGhpc09iaik7CkBAIC04MDAsNyArODI5LDkgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhl
Y3V0ZUNvbnN0cnVjdChGdQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgfQogICAgIC8v
IGEgMCBjb2RlQmxvY2sgaW5kaWNhdGVzIGEgYnVpbHQtaW4gY2FsbGVyCi0gICAgbmV3Q2FsbEZy
YW1lLT5pbml0KGNvZGVCbG9jaywgMCwgc2NvcGVDaGFpbiwgY2FsbEZyYW1lLT5hZGRIb3N0Q2Fs
bEZyYW1lRmxhZygpLCAwLCBhcmdjLCBmdW5jdGlvbik7CisgICAgbmV3Q2FsbEZyYW1lLT5pbml0
KGNvZGVCbG9jaywgMCwgc2NvcGVDaGFpbiwgY2FsbEZyYW1lLT5hZGRIb3N0Q2FsbEZyYW1lRmxh
ZygpLCBhcmdjLCBmdW5jdGlvbik7CisKKyAgICBEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGUgZ2xv
YmFsT2JqZWN0U2NvcGUoY2FsbEZyYW1lLCBzY29wZUNoYWluLT5nbG9iYWxPYmplY3QpOwogCiAg
ICAgUHJvZmlsZXIqKiBwcm9maWxlciA9IFByb2ZpbGVyOjplbmFibGVkUHJvZmlsZXJSZWZlcmVu
Y2UoKTsKICAgICBpZiAoKnByb2ZpbGVyKQpAQCAtODU4LDcgKzg4OSw3IEBAIENhbGxGcmFtZUNs
b3N1cmUgSW50ZXJwcmV0ZXI6OnByZXBhcmVGb3IKICAgICAgICAgcmV0dXJuIENhbGxGcmFtZUNs
b3N1cmUoKTsKICAgICB9CiAgICAgLy8gYSAwIGNvZGVCbG9jayBpbmRpY2F0ZXMgYSBidWlsdC1p
biBjYWxsZXIKLSAgICBuZXdDYWxsRnJhbWUtPmluaXQoY29kZUJsb2NrLCAwLCBzY29wZUNoYWlu
LCBjYWxsRnJhbWUtPmFkZEhvc3RDYWxsRnJhbWVGbGFnKCksIDAsIGFyZ2MsIGZ1bmN0aW9uKTsK
KyAgICBuZXdDYWxsRnJhbWUtPmluaXQoY29kZUJsb2NrLCAwLCBzY29wZUNoYWluLCBjYWxsRnJh
bWUtPmFkZEhvc3RDYWxsRnJhbWVGbGFnKCksIGFyZ2MsIGZ1bmN0aW9uKTsKICNpZiBFTkFCTEUo
SklUKQogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZS0+aml0Q29kZUZvckNhbGwobmV3Q2FsbEZyYW1l
LCBzY29wZUNoYWluKTsKICNlbmRpZgpAQCAtOTU3LDggKzk4OCw5IEBAIEpTVmFsdWUgSW50ZXJw
cmV0ZXI6OmV4ZWN1dGUoRXZhbEV4ZWN1dGEKICAgICBDYWxsRnJhbWUqIG5ld0NhbGxGcmFtZSA9
IENhbGxGcmFtZTo6Y3JlYXRlKG1fcmVnaXN0ZXJGaWxlLnN0YXJ0KCkgKyBnbG9iYWxSZWdpc3Rl
ck9mZnNldCk7CiAKICAgICAvLyBhIDAgY29kZUJsb2NrIGluZGljYXRlcyBhIGJ1aWx0LWluIGNh
bGxlcgotICAgIG5ld0NhbGxGcmFtZS0+cihjb2RlQmxvY2stPnRoaXNSZWdpc3RlcigpKSA9IEpT
VmFsdWUodGhpc09iaik7Ci0gICAgbmV3Q2FsbEZyYW1lLT5pbml0KGNvZGVCbG9jaywgMCwgc2Nv
cGVDaGFpbiwgY2FsbEZyYW1lLT5hZGRIb3N0Q2FsbEZyYW1lRmxhZygpLCAwLCAwLCAwKTsKKyAg
ICBBU1NFUlQoY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgPT0gMSk7IC8vIDEgcGFyYW1ldGVy
IGZvciAndGhpcycuCisgICAgbmV3Q2FsbEZyYW1lLT5pbml0KGNvZGVCbG9jaywgMCwgc2NvcGVD
aGFpbiwgY2FsbEZyYW1lLT5hZGRIb3N0Q2FsbEZyYW1lRmxhZygpLCBjb2RlQmxvY2stPm1fbnVt
UGFyYW1ldGVycywgMCk7CisgICAgbmV3Q2FsbEZyYW1lLT5yKG5ld0NhbGxGcmFtZS0+aG9zdFRo
aXNSZWdpc3RlcigpKSA9IEpTVmFsdWUodGhpc09iaik7CiAKICAgICBpZiAoY29kZUJsb2NrLT5u
ZWVkc0Z1bGxTY29wZUNoYWluKCkpCiAgICAgICAgIHNjb3BlQ2hhaW4tPnJlZigpOwpAQCAtMjkz
OCw3ICsyOTcwLDcgQEAgc2tpcF9pZF9jdXN0b21fc2VsZjoKICAgICAgICAgSlNWYWx1ZSByZXN1
bHQ7CiAgICAgICAgIGludCBvZmZzZXQgPSAwOwogICAgICAgICBpZiAoc3Vic2NyaXB0ID09IGV4
cGVjdGVkU3Vic2NyaXB0ICYmIGJhc2VWYWx1ZS5pc0NlbGwoKSAmJiAoYmFzZVZhbHVlLmFzQ2Vs
bCgpLT5zdHJ1Y3R1cmUoKSA9PSBpdC0+Y2FjaGVkU3RydWN0dXJlKCkpICYmIGl0LT5nZXRPZmZz
ZXQoaW5kZXgsIG9mZnNldCkpIHsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+cihkc3QpID0gYXNP
YmplY3QoYmFzZVZhbHVlKS0+Z2V0RGlyZWN0T2Zmc2V0KG9mZnNldCk7CisgICAgICAgICAgICBj
YWxsRnJhbWUtPnIoZHN0KSA9IEpTVmFsdWUoYXNPYmplY3QoYmFzZVZhbHVlKS0+Z2V0RGlyZWN0
T2Zmc2V0KG9mZnNldCkpOwogICAgICAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfZ2V0
X2J5X3BuYW1lKTsKICAgICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKICAgICAgICAgfQpA
QCAtMzU3Nyw3ICszNjA5LDcgQEAgc2tpcF9pZF9jdXN0b21fc2VsZjoKICAgICAgICAgICAgICAg
ICBnb3RvIHZtX3Rocm93OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBjYWxsRnJhbWUt
PmluaXQobmV3Q29kZUJsb2NrLCB2UEMgKyBPUENPREVfTEVOR1RIKG9wX2NhbGwpLCBjYWxsRGF0
YVNjb3BlQ2hhaW4sIHByZXZpb3VzQ2FsbEZyYW1lLCAwLCBhcmdDb3VudCwgYXNGdW5jdGlvbih2
KSk7CisgICAgICAgICAgICBjYWxsRnJhbWUtPmluaXQobmV3Q29kZUJsb2NrLCB2UEMgKyBPUENP
REVfTEVOR1RIKG9wX2NhbGwpLCBjYWxsRGF0YVNjb3BlQ2hhaW4sIHByZXZpb3VzQ2FsbEZyYW1l
LCBhcmdDb3VudCwgYXNGdW5jdGlvbih2KSk7CiAgICAgICAgICAgICBjb2RlQmxvY2sgPSBuZXdD
b2RlQmxvY2s7CiAgICAgICAgICAgICBBU1NFUlQoY29kZUJsb2NrID09IGNhbGxGcmFtZS0+Y29k
ZUJsb2NrKCkpOwogICAgICAgICAgICAgdlBDID0gbmV3Q29kZUJsb2NrLT5pbnN0cnVjdGlvbnMo
KS5iZWdpbigpOwpAQCAtMzU5MiwyMCArMzYyNCwxNSBAQCBza2lwX2lkX2N1c3RvbV9zZWxmOgog
ICAgICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVIb3N0KSB7CiAgICAgICAgICAgICBTY29w
ZUNoYWluTm9kZSogc2NvcGVDaGFpbiA9IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpOwogICAgICAg
ICAgICAgQ2FsbEZyYW1lKiBuZXdDYWxsRnJhbWUgPSBDYWxsRnJhbWU6OmNyZWF0ZShjYWxsRnJh
bWUtPnJlZ2lzdGVycygpICsgcmVnaXN0ZXJPZmZzZXQpOwotICAgICAgICAgICAgbmV3Q2FsbEZy
YW1lLT5pbml0KDAsIHZQQyArIE9QQ09ERV9MRU5HVEgob3BfY2FsbCksIHNjb3BlQ2hhaW4sIGNh
bGxGcmFtZSwgMCwgYXJnQ291bnQsIDApOworICAgICAgICAgICAgbmV3Q2FsbEZyYW1lLT5pbml0
KDAsIHZQQyArIE9QQ09ERV9MRU5HVEgob3BfY2FsbCksIHNjb3BlQ2hhaW4sIGNhbGxGcmFtZSwg
YXJnQ291bnQsIGFzT2JqZWN0KHYpKTsKIAogICAgICAgICAgICAgUmVnaXN0ZXIqIHRoaXNSZWdp
c3RlciA9IG5ld0NhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgLSBSZWdpc3RlckZpbGU6OkNhbGxGcmFt
ZUhlYWRlclNpemUgLSBhcmdDb3VudDsKICAgICAgICAgICAgIEFyZ0xpc3QgYXJncyh0aGlzUmVn
aXN0ZXIgKyAxLCBhcmdDb3VudCAtIDEpOwogCi0gICAgICAgICAgICAvLyBGSVhNRTogQWxsIGhv
c3QgbWV0aG9kcyBzaG91bGQgYmUgY2FsbGluZyB0b1RoaXNPYmplY3QsIGJ1dCB0aGlzIGlzIG5v
dCBwcmVzZW50bHkgdGhlIGNhc2UuCi0gICAgICAgICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHRo
aXNSZWdpc3Rlci0+anNWYWx1ZSgpOwotICAgICAgICAgICAgaWYgKHRoaXNWYWx1ZSA9PSBqc051
bGwoKSkKLSAgICAgICAgICAgICAgICB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPmdsb2JhbFRoaXNW
YWx1ZSgpOwotCiAgICAgICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVlOwogICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgIFNhbXBsaW5nVG9vbDo6SG9zdENhbGxSZWNvcmQgY2FsbFJlY29y
ZChtX3NhbXBsZXIuZ2V0KCkpOwotICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gY2FsbERh
dGEubmF0aXZlLmZ1bmN0aW9uKG5ld0NhbGxGcmFtZSwgYXNPYmplY3QodiksIHRoaXNWYWx1ZSwg
YXJncyk7CisgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBjYWxsRGF0YS5uYXRpdmUuZnVu
Y3Rpb24obmV3Q2FsbEZyYW1lKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIENIRUNLX0ZP
Ul9FWENFUFRJT04oKTsKIApAQCAtMzYyNywxNSArMzY1NCwxNSBAQCBza2lwX2lkX2N1c3RvbV9z
ZWxmOgogICAgICAgICBKU1ZhbHVlIGFyZ3VtZW50cyA9IGNhbGxGcmFtZS0+cihhcmdzT2Zmc2V0
KS5qc1ZhbHVlKCk7CiAgICAgICAgIGludDMyX3QgYXJnQ291bnQgPSAwOwogICAgICAgICBpZiAo
IWFyZ3VtZW50cykgewotICAgICAgICAgICAgYXJnQ291bnQgPSAodWludDMyX3QpKGNhbGxGcmFt
ZS0+YXJndW1lbnRDb3VudCgpKSAtIDE7CisgICAgICAgICAgICBhcmdDb3VudCA9ICh1aW50MzJf
dCkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkpOwogICAgICAgICAgICAgaW50MzJfdCBzaXpl
RGVsdGEgPSBhcmdzT2Zmc2V0ICsgYXJnQ291bnQgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhl
YWRlclNpemU7CiAgICAgICAgICAgICBSZWdpc3RlciogbmV3RW5kID0gY2FsbEZyYW1lLT5yZWdp
c3RlcnMoKSArIHNpemVEZWx0YTsKICAgICAgICAgICAgIGlmICghcmVnaXN0ZXJGaWxlLT5ncm93
KG5ld0VuZCkgfHwgKChuZXdFbmQgLSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpKSAhPSBzaXplRGVs
dGEpKSB7CiAgICAgICAgICAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBjcmVhdGVTdGFja092ZXJm
bG93RXJyb3IoY2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICBnb3RvIHZtX3Rocm93OwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgQVNTRVJUKCFjYWxsRnJhbWUtPmNhbGxlZSgpLT5pc0hv
c3RGdW5jdGlvbigpKTsKLSAgICAgICAgICAgIGludDMyX3QgZXhwZWN0ZWRQYXJhbXMgPSBjYWxs
RnJhbWUtPmNhbGxlZSgpLT5qc0V4ZWN1dGFibGUoKS0+cGFyYW1ldGVyQ291bnQoKTsKKyAgICAg
ICAgICAgIEFTU0VSVCghYXNGdW5jdGlvbihjYWxsRnJhbWUtPmNhbGxlZSgpKS0+aXNIb3N0RnVu
Y3Rpb24oKSk7CisgICAgICAgICAgICBpbnQzMl90IGV4cGVjdGVkUGFyYW1zID0gYXNGdW5jdGlv
bihjYWxsRnJhbWUtPmNhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPnBhcmFtZXRlckNvdW50KCk7
CiAgICAgICAgICAgICBpbnQzMl90IGlucGxhY2VBcmdzID0gbWluKGFyZ0NvdW50LCBleHBlY3Rl
ZFBhcmFtcyk7CiAgICAgICAgICAgICBpbnQzMl90IGkgPSAwOwogICAgICAgICAgICAgUmVnaXN0
ZXIqIGFyZ1N0b3JlID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIGFyZ3NPZmZzZXQ7CkBAIC0z
NzMyLDcgKzM3NTksNyBAQCBza2lwX2lkX2N1c3RvbV9zZWxmOgogICAgICAgICAgICAgICAgIGdv
dG8gdm1fdGhyb3c7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNh
bGxGcmFtZS0+aW5pdChuZXdDb2RlQmxvY2ssIHZQQyArIE9QQ09ERV9MRU5HVEgob3BfY2FsbF92
YXJhcmdzKSwgY2FsbERhdGFTY29wZUNoYWluLCBwcmV2aW91c0NhbGxGcmFtZSwgMCwgYXJnQ291
bnQsIGFzRnVuY3Rpb24odikpOworICAgICAgICAgICAgY2FsbEZyYW1lLT5pbml0KG5ld0NvZGVC
bG9jaywgdlBDICsgT1BDT0RFX0xFTkdUSChvcF9jYWxsX3ZhcmFyZ3MpLCBjYWxsRGF0YVNjb3Bl
Q2hhaW4sIHByZXZpb3VzQ2FsbEZyYW1lLCBhcmdDb3VudCwgYXNGdW5jdGlvbih2KSk7CiAgICAg
ICAgICAgICBjb2RlQmxvY2sgPSBuZXdDb2RlQmxvY2s7CiAgICAgICAgICAgICBBU1NFUlQoY29k
ZUJsb2NrID09IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCkpOwogICAgICAgICAgICAgdlBDID0gbmV3
Q29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOwpAQCAtMzc0NywyMCArMzc3NCwxNSBA
QCBza2lwX2lkX2N1c3RvbV9zZWxmOgogICAgICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVI
b3N0KSB7CiAgICAgICAgICAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiA9IGNhbGxGcmFt
ZS0+c2NvcGVDaGFpbigpOwogICAgICAgICAgICAgQ2FsbEZyYW1lKiBuZXdDYWxsRnJhbWUgPSBD
YWxsRnJhbWU6OmNyZWF0ZShjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgcmVnaXN0ZXJPZmZzZXQp
OwotICAgICAgICAgICAgbmV3Q2FsbEZyYW1lLT5pbml0KDAsIHZQQyArIE9QQ09ERV9MRU5HVEgo
b3BfY2FsbF92YXJhcmdzKSwgc2NvcGVDaGFpbiwgY2FsbEZyYW1lLCAwLCBhcmdDb3VudCwgMCk7
CisgICAgICAgICAgICBuZXdDYWxsRnJhbWUtPmluaXQoMCwgdlBDICsgT1BDT0RFX0xFTkdUSChv
cF9jYWxsX3ZhcmFyZ3MpLCBzY29wZUNoYWluLCBjYWxsRnJhbWUsIGFyZ0NvdW50LCBhc09iamVj
dCh2KSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFJlZ2lzdGVyKiB0aGlzUmVnaXN0ZXIg
PSBuZXdDYWxsRnJhbWUtPnJlZ2lzdGVycygpIC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFk
ZXJTaXplIC0gYXJnQ291bnQ7CiAgICAgICAgICAgICBBcmdMaXN0IGFyZ3ModGhpc1JlZ2lzdGVy
ICsgMSwgYXJnQ291bnQgLSAxKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRklYTUU6
IEFsbCBob3N0IG1ldGhvZHMgc2hvdWxkIGJlIGNhbGxpbmcgdG9UaGlzT2JqZWN0LCBidXQgdGhp
cyBpcyBub3QgcHJlc2VudGx5IHRoZSBjYXNlLgotICAgICAgICAgICAgSlNWYWx1ZSB0aGlzVmFs
dWUgPSB0aGlzUmVnaXN0ZXItPmpzVmFsdWUoKTsKLSAgICAgICAgICAgIGlmICh0aGlzVmFsdWUg
PT0ganNOdWxsKCkpCi0gICAgICAgICAgICAgICAgdGhpc1ZhbHVlID0gY2FsbEZyYW1lLT5nbG9i
YWxUaGlzVmFsdWUoKTsKLSAgICAgICAgICAgIAogICAgICAgICAgICAgSlNWYWx1ZSByZXR1cm5W
YWx1ZTsKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBTYW1wbGluZ1Rvb2w6Okhvc3RD
YWxsUmVjb3JkIGNhbGxSZWNvcmQobV9zYW1wbGVyLmdldCgpKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm5WYWx1ZSA9IGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihuZXdDYWxsRnJhbWUsIGFzT2Jq
ZWN0KHYpLCB0aGlzVmFsdWUsIGFyZ3MpOworICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0g
Y2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKG5ld0NhbGxGcmFtZSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CiAgICAgICAgICAgICAKQEAgLTM5NjUs
NyArMzk4Nyw3IEBAIHNraXBfaWRfY3VzdG9tX3NlbGY6CiAgICAgICAgICAgICBzdHJ1Y3R1cmUg
PSBhc09iamVjdChwcm90byktPmluaGVyaXRvcklEKCk7CiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIHN0cnVjdHVyZSA9IGNvbnN0cnVjdG9yLT5zY29wZSgpLm5vZGUoKS0+Z2xvYmFsT2JqZWN0
LT5lbXB0eU9iamVjdFN0cnVjdHVyZSgpOwotICAgICAgICBjYWxsRnJhbWUtPnIodGhpc1JlZ2lz
dGVyKSA9IG5ldyAoJmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpKSBKU09iamVjdChzdHJ1Y3R1cmUp
OworICAgICAgICBjYWxsRnJhbWUtPnIodGhpc1JlZ2lzdGVyKSA9IEpTVmFsdWUobmV3ICgmY2Fs
bEZyYW1lLT5nbG9iYWxEYXRhKCkpIEpTT2JqZWN0KHN0cnVjdHVyZSkpOwogCiAgICAgICAgIHZQ
QyArPSBPUENPREVfTEVOR1RIKG9wX2NyZWF0ZV90aGlzKTsKICAgICAgICAgTkVYVF9JTlNUUlVD
VElPTigpOwpAQCAtNDA1OSw3ICs0MDgxLDcgQEAgc2tpcF9pZF9jdXN0b21fc2VsZjoKICAgICAg
ICAgICAgICAgICBnb3RvIHZtX3Rocm93OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBj
YWxsRnJhbWUtPmluaXQobmV3Q29kZUJsb2NrLCB2UEMgKyBPUENPREVfTEVOR1RIKG9wX2NvbnN0
cnVjdCksIGNhbGxEYXRhU2NvcGVDaGFpbiwgcHJldmlvdXNDYWxsRnJhbWUsIDAsIGFyZ0NvdW50
LCBhc0Z1bmN0aW9uKHYpKTsKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+aW5pdChuZXdDb2RlQmxv
Y2ssIHZQQyArIE9QQ09ERV9MRU5HVEgob3BfY29uc3RydWN0KSwgY2FsbERhdGFTY29wZUNoYWlu
LCBwcmV2aW91c0NhbGxGcmFtZSwgYXJnQ291bnQsIGFzRnVuY3Rpb24odikpOwogICAgICAgICAg
ICAgY29kZUJsb2NrID0gbmV3Q29kZUJsb2NrOwogICAgICAgICAgICAgdlBDID0gbmV3Q29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOwogCkBAIC00MDczLDcgKzQwOTUsNyBAQCBza2lw
X2lkX2N1c3RvbV9zZWxmOgogICAgICAgICBpZiAoY29uc3RydWN0VHlwZSA9PSBDb25zdHJ1Y3RU
eXBlSG9zdCkgewogICAgICAgICAgICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4gPSBjYWxs
RnJhbWUtPnNjb3BlQ2hhaW4oKTsKICAgICAgICAgICAgIENhbGxGcmFtZSogbmV3Q2FsbEZyYW1l
ID0gQ2FsbEZyYW1lOjpjcmVhdGUoY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIHJlZ2lzdGVyT2Zm
c2V0KTsKLSAgICAgICAgICAgIG5ld0NhbGxGcmFtZS0+aW5pdCgwLCB2UEMgKyBPUENPREVfTEVO
R1RIKG9wX2NvbnN0cnVjdCksIHNjb3BlQ2hhaW4sIGNhbGxGcmFtZSwgMCwgYXJnQ291bnQsIDAp
OworICAgICAgICAgICAgbmV3Q2FsbEZyYW1lLT5pbml0KDAsIHZQQyArIE9QQ09ERV9MRU5HVEgo
b3BfY29uc3RydWN0KSwgc2NvcGVDaGFpbiwgY2FsbEZyYW1lLCBhcmdDb3VudCwgMCk7CiAKICAg
ICAgICAgICAgIFJlZ2lzdGVyKiB0aGlzUmVnaXN0ZXIgPSBuZXdDYWxsRnJhbWUtPnJlZ2lzdGVy
cygpIC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplIC0gYXJnQ291bnQ7CiAgICAg
ICAgICAgICBBcmdMaXN0IGFyZ3ModGhpc1JlZ2lzdGVyICsgMSwgYXJnQ291bnQgLSAxKTsKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAkocmV2aXNpb24gNjAz
NDEpCisrKyBKYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC05NSw3ICs5NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGlz
T3Bjb2RlKE9wY29kZSk7CiAgICAgICAgIAogICAgICAgICBKU1ZhbHVlIGV4ZWN1dGUoUHJvZ3Jh
bUV4ZWN1dGFibGUqLCBDYWxsRnJhbWUqLCBTY29wZUNoYWluTm9kZSosIEpTT2JqZWN0KiB0aGlz
T2JqLCBKU1ZhbHVlKiBleGNlcHRpb24pOwotICAgICAgICBKU1ZhbHVlIGV4ZWN1dGVDYWxsKEZ1
bmN0aW9uRXhlY3V0YWJsZSosIENhbGxGcmFtZSosIEpTRnVuY3Rpb24qLCBKU09iamVjdCogdGhp
c09iaiwgY29uc3QgQXJnTGlzdCYgYXJncywgU2NvcGVDaGFpbk5vZGUqLCBKU1ZhbHVlKiBleGNl
cHRpb24pOworICAgICAgICBKU1ZhbHVlIGV4ZWN1dGVDYWxsKENhbGxGcmFtZSosIEpTT2JqZWN0
KiBmdW5jdGlvbiwgQ2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiwgSlNWYWx1ZSB0aGlzVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmLCBKU1ZhbHVlKiBleGNlcHRpb24pOwogICAgICAgICBKU1ZhbHVlIGV4
ZWN1dGVDb25zdHJ1Y3QoRnVuY3Rpb25FeGVjdXRhYmxlKiwgQ2FsbEZyYW1lKiwgSlNGdW5jdGlv
biosIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBTY29wZUNoYWluTm9k
ZSosIEpTVmFsdWUqIGV4Y2VwdGlvbik7CiAgICAgICAgIEpTVmFsdWUgZXhlY3V0ZShFdmFsRXhl
Y3V0YWJsZSogZXZhbE5vZGUsIENhbGxGcmFtZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIFNj
b3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBKU1ZhbHVlKiBleGNlcHRpb24pOwogCkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyLmgJKHJldmlzaW9uIDYwMzQxKQorKysgSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzks
NyArMzksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBDb2RlQmxvY2s7CiAgICAgY2xh
c3MgRXhlY1N0YXRlOwogICAgIGNsYXNzIEpTQWN0aXZhdGlvbjsKLSAgICBjbGFzcyBKU0Z1bmN0
aW9uOworICAgIGNsYXNzIEpTT2JqZWN0OwogICAgIGNsYXNzIEpTUHJvcGVydHlOYW1lSXRlcmF0
b3I7CiAgICAgY2xhc3MgU2NvcGVDaGFpbk5vZGU7CiAKQEAgLTU4LDcgKzU4LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIFJlZ2lzdGVyJiBvcGVyYXRvcj0oSlNBY3RpdmF0aW9uKik7CiAg
ICAgICAgIFJlZ2lzdGVyJiBvcGVyYXRvcj0oQ2FsbEZyYW1lKik7CiAgICAgICAgIFJlZ2lzdGVy
JiBvcGVyYXRvcj0oQ29kZUJsb2NrKik7Ci0gICAgICAgIFJlZ2lzdGVyJiBvcGVyYXRvcj0oSlNG
dW5jdGlvbiopOworICAgICAgICBSZWdpc3RlciYgb3BlcmF0b3I9KEpTT2JqZWN0Kik7CiAgICAg
ICAgIFJlZ2lzdGVyJiBvcGVyYXRvcj0oSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciopOwogICAgICAg
ICBSZWdpc3RlciYgb3BlcmF0b3I9KFNjb3BlQ2hhaW5Ob2RlKik7CiAgICAgICAgIFJlZ2lzdGVy
JiBvcGVyYXRvcj0oSW5zdHJ1Y3Rpb24qKTsKQEAgLTY3LDcgKzY3LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbigpIGNvbnN0OwogICAgICAgICBD
YWxsRnJhbWUqIGNhbGxGcmFtZSgpIGNvbnN0OwogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
aygpIGNvbnN0OwotICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbigpIGNvbnN0OworICAgICAg
ICBKU09iamVjdCogZnVuY3Rpb24oKSBjb25zdDsKICAgICAgICAgSlNQcm9wZXJ0eU5hbWVJdGVy
YXRvciogcHJvcGVydHlOYW1lSXRlcmF0b3IoKSBjb25zdDsKICAgICAgICAgU2NvcGVDaGFpbk5v
ZGUqIHNjb3BlQ2hhaW4oKSBjb25zdDsKICAgICAgICAgSW5zdHJ1Y3Rpb24qIHZQQygpIGNvbnN0
OwpAQCAtODcsNyArODcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIEpTQWN0aXZh
dGlvbiogYWN0aXZhdGlvbjsKICAgICAgICAgICAgIENhbGxGcmFtZSogY2FsbEZyYW1lOwogICAg
ICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2s7Ci0gICAgICAgICAgICBKU0Z1bmN0aW9uKiBm
dW5jdGlvbjsKKyAgICAgICAgICAgIEpTT2JqZWN0KiBmdW5jdGlvbjsKICAgICAgICAgICAgIEpT
UHJvcGVydHlOYW1lSXRlcmF0b3IqIHByb3BlcnR5TmFtZUl0ZXJhdG9yOwogICAgICAgICAgICAg
U2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW47CiAgICAgICAgICAgICBJbnN0cnVjdGlvbiogdlBD
OwpAQCAtMTQzLDcgKzE0Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gKnRo
aXM7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBSZWdpc3RlciYgUmVnaXN0ZXI6Om9wZXJh
dG9yPShKU0Z1bmN0aW9uKiBmdW5jdGlvbikKKyAgICBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyJiBS
ZWdpc3Rlcjo6b3BlcmF0b3I9KEpTT2JqZWN0KiBmdW5jdGlvbikKICAgICB7CiAgICAgICAgIHUu
ZnVuY3Rpb24gPSBmdW5jdGlvbjsKICAgICAgICAgcmV0dXJuICp0aGlzOwpAQCAtMTg3LDcgKzE4
Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gdS5jb2RlQmxvY2s7CiAgICAg
fQogICAgIAotICAgIEFMV0FZU19JTkxJTkUgSlNGdW5jdGlvbiogUmVnaXN0ZXI6OmZ1bmN0aW9u
KCkgY29uc3QKKyAgICBBTFdBWVNfSU5MSU5FIEpTT2JqZWN0KiBSZWdpc3Rlcjo6ZnVuY3Rpb24o
KSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIHUuZnVuY3Rpb247CiAgICAgfQpJbmRleDog
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysg
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI3NCwxMTcgKzI3NCw0NCBAQCBKSVQ6OkxhYmVsIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRp
dmVDCiAgICAgaW50IGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uID0gaXNDb25zdHJ1Y3QgPyBP
QkpFQ1RfT0ZGU0VUT0YoTmF0aXZlRXhlY3V0YWJsZSwgbV9jb25zdHJ1Y3RvcikgOiBPQkpFQ1Rf
T0ZGU0VUT0YoTmF0aXZlRXhlY3V0YWJsZSwgbV9mdW5jdGlvbik7CiAKICAgICBMYWJlbCBuYXRp
dmVDYWxsVGh1bmsgPSBhbGlnbigpOwotI2lmIENQVShYODYpIHx8IENQVShBUk1fVFJBRElUSU9O
QUwpCi0gICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHJlZ1QwKTsKLSAgICBlbWl0
UHV0VG9DYWxsRnJhbWVIZWFkZXIocmVnVDAsIFJlZ2lzdGVyRmlsZTo6UmV0dXJuUEMpOyAvLyBQ
dXNoIHJldHVybiBhZGRyZXNzCiAKICAgICAvLyBMb2FkIGNhbGxlciBmcmFtZSdzIHNjb3BlIGNo
YWluIGludG8gdGhpcyBjYWxsZnJhbWUgc28gdGhhdCB3aGF0ZXZlciB3ZSBjYWxsIGNhbgogICAg
IC8vIGdldCB0byBpdHMgZ2xvYmFsIGRhdGEuCi0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFk
ZXJQdHIoUmVnaXN0ZXJGaWxlOjpDYWxsZXJGcmFtZSwgcmVnVDEpOwotICAgIGVtaXRHZXRGcm9t
Q2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbiwgcmVnVDEsIHJlZ1Qx
KTsKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZpbGU6OkNhbGxl
ckZyYW1lLCByZWdUMCk7CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0
ZXJGaWxlOjpTY29wZUNoYWluLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRQdXRUb0NhbGxGcmFt
ZUhlYWRlcihyZWdUMSwgUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluKTsKIAotI2lmIENQVShYODYp
Ci0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIzMihSZWdpc3RlckZpbGU6OkFyZ3VtZW50
Q291bnQsIHJlZ1QwKTsKKyAgICBwZWVrKHJlZ1QxKTsKKyAgICBlbWl0UHV0VG9DYWxsRnJhbWVI
ZWFkZXIocmVnVDEsIFJlZ2lzdGVyRmlsZTo6UmV0dXJuUEMpOwogCi0gICAgLyogV2UgaGF2ZSB0
d28gc3RydWN0cyB0aGF0IHdlIHVzZSB0byBkZXNjcmliZSB0aGUgc3RhY2tmcmFtZSB3ZSBzZXQg
dXAgZm9yIG91cgotICAgICAqIGNhbGwgdG8gbmF0aXZlIGNvZGUuICBOYXRpdmVDYWxsRnJhbWVT
dHJ1Y3R1cmUgZGVzY3JpYmVzIHRoZSBob3cgd2Ugc2V0IHVwIHRoZSBzdGFjawotICAgICAqIGlu
IGFkdmFuY2Ugb2YgdGhlIGNhbGwuICBOYXRpdmVGdW5jdGlvbkNhbGxlZVNpZ25hdHVyZSBkZXNj
cmliZXMgdGhlIGNhbGxmcmFtZQotICAgICAqIGFzIHRoZSBuYXRpdmUgY29kZSBleHBlY3RzIGl0
LiAgV2UgZG8gdGhpcyBhcyB3ZSBhcmUgdXNpbmcgdGhlIGZhc3RjYWxsIGNhbGxpbmcKLSAgICAg
KiBjb252ZW50aW9uIHdoaWNoIHJlc3VsdHMgaW4gdGhlIGNhbGxlZSBwb3BwaW5nIGl0cyBhcmd1
bWVudHMgb2ZmIHRoZSBzdGFjaywgYnV0Ci0gICAgICogbm90IHRoZSByZXN0IG9mIHRoZSBjYWxs
ZnJhbWUgc28gd2UgbmVlZCBhIG5pY2Ugd2F5IHRvIGVuc3VyZSB3ZSBpbmNyZW1lbnQgdGhlCi0g
ICAgICogc3RhY2sgcG9pbnRlciBieSB0aGUgcmlnaHQgYW1vdW50IGFmdGVyIHRoZSBjYWxsLgot
ICAgICAqLworI2lmIENQVShYODYpIHx8IENQVShBUk1fVFJBRElUSU9OQUwpCiAKKyNpZiBDUFUo
WDg2KQogI2lmIENPTVBJTEVSKE1TVkMpIHx8IE9TKExJTlVYKQotI2lmIENPTVBJTEVSKE1TVkMp
Ci0jcHJhZ21hIHBhY2socHVzaCkKLSNwcmFnbWEgcGFjayg0KQotI2VuZGlmIC8vIENPTVBJTEVS
KE1TVkMpCi0gICAgc3RydWN0IE5hdGl2ZUNhbGxGcmFtZVN0cnVjdHVyZSB7Ci0gICAgICAgIC8v
ICBDYWxsRnJhbWUqIGNhbGxGcmFtZTsgLy8gcGFzc2VkIGluIEVEWAotICAgICAgICBKU09iamVj
dCogY2FsbGVlOwotICAgICAgICBKU1ZhbHVlIHRoaXNWYWx1ZTsKLSAgICAgICAgQXJnTGlzdCog
YXJnUG9pbnRlcjsKLSAgICAgICAgQXJnTGlzdCBhcmdzOwotICAgICAgICBKU1ZhbHVlIHJlc3Vs
dDsKLSAgICB9OwotICAgIHN0cnVjdCBOYXRpdmVGdW5jdGlvbkNhbGxlZVNpZ25hdHVyZSB7Ci0g
ICAgICAgIEpTT2JqZWN0KiBjYWxsZWU7Ci0gICAgICAgIEpTVmFsdWUgdGhpc1ZhbHVlOwotICAg
ICAgICBBcmdMaXN0KiBhcmdQb2ludGVyOwotICAgIH07Ci0jaWYgQ09NUElMRVIoTVNWQykKLSNw
cmFnbWEgcGFjayhwb3ApCi0jZW5kaWYgLy8gQ09NUElMRVIoTVNWQykKLSNlbHNlCi0gICAgc3Ry
dWN0IE5hdGl2ZUNhbGxGcmFtZVN0cnVjdHVyZSB7Ci0gICAgICAgIC8vICBDYWxsRnJhbWUqIGNh
bGxGcmFtZTsgLy8gcGFzc2VkIGluIEVDWAotICAgICAgICAvLyAgSlNPYmplY3QqIGNhbGxlZTsg
Ly8gcGFzc2VkIGluIEVEWAotICAgICAgICBKU1ZhbHVlIHRoaXNWYWx1ZTsKLSAgICAgICAgQXJn
TGlzdCogYXJnUG9pbnRlcjsKLSAgICAgICAgQXJnTGlzdCBhcmdzOwotICAgIH07Ci0gICAgc3Ry
dWN0IE5hdGl2ZUZ1bmN0aW9uQ2FsbGVlU2lnbmF0dXJlIHsKLSAgICAgICAgSlNWYWx1ZSB0aGlz
VmFsdWU7Ci0gICAgICAgIEFyZ0xpc3QqIGFyZ1BvaW50ZXI7Ci0gICAgfTsKLSNlbmRpZgotCi0g
ICAgY29uc3QgaW50IE5hdGl2ZUNhbGxGcmFtZVNpemUgPSAoc2l6ZW9mKE5hdGl2ZUNhbGxGcmFt
ZVN0cnVjdHVyZSkgKyAxNSkgJiB+MTU7Ci0gICAgLy8gQWxsb2NhdGUgc3lzdGVtIHN0YWNrIGZy
YW1lCi0gICAgc3ViUHRyKEltbTMyKE5hdGl2ZUNhbGxGcmFtZVNpemUpLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7Ci0KLSAgICAvLyBTZXQgdXAgYXJndW1lbnRzCi0gICAgc3ViUHRyKEltbTMyKDEp
LCByZWdUMCk7IC8vIERvbid0IGluY2x1ZGUgJ3RoaXMnIGluIGFyZ2NvdW50Ci0KLSAgICAvLyBw
dXNoIGFyZ2NvdW50Ci0gICAgc3RvcmVQdHIocmVnVDAsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVn
aXN0ZXIsIE9CSkVDVF9PRkZTRVRPRihOYXRpdmVDYWxsRnJhbWVTdHJ1Y3R1cmUsIGFyZ3MpICsg
T0JKRUNUX09GRlNFVE9GKEFyZ0xpc3QsIG1fYXJnQ291bnQpKSk7Ci0KLSAgICAvLyBDYWxjdWxh
dGUgdGhlIHN0YXJ0IG9mIHRoZSBjYWxsZnJhbWUgaGVhZGVyLCBhbmQgc3RvcmUgaW4gcmVnVDEK
LSAgICBhZGRQdHIoSW1tMzIoLVJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAqIChp
bnQpc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMSk7Ci0KLSAgICAv
LyBDYWxjdWxhdGUgc3RhcnQgb2YgYXJndW1lbnRzIGFzIGNhbGxmcmFtZSBoZWFkZXIgLSBzaXpl
b2YoUmVnaXN0ZXIpICogYXJnY291bnQgKHJlZ1QwKQotICAgIG11bDMyKEltbTMyKHNpemVvZihS
ZWdpc3RlcikpLCByZWdUMCwgcmVnVDApOwotICAgIHN1YlB0cihyZWdUMCwgcmVnVDEpOwotICAg
IHN0b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBPQkpFQ1RfT0ZG
U0VUT0YoTmF0aXZlQ2FsbEZyYW1lU3RydWN0dXJlLCBhcmdzKSArIE9CSkVDVF9PRkZTRVRPRihB
cmdMaXN0LCBtX2FyZ3MpKSk7Ci0KLSAgICAvLyBBcmdMaXN0IGlzIHBhc3NlZCBieSByZWZlcmVu
Y2Ugc28gaXMgc3RhY2tQb2ludGVyUmVnaXN0ZXIgKyA0ICogc2l6ZW9mKFJlZ2lzdGVyKQotICAg
IGFkZFB0cihJbW0zMihPQkpFQ1RfT0ZGU0VUT0YoTmF0aXZlQ2FsbEZyYW1lU3RydWN0dXJlLCBh
cmdzKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgc3RvcmVQdHIocmVnVDAs
IEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIE9CSkVDVF9PRkZTRVRPRihOYXRpdmVDYWxs
RnJhbWVTdHJ1Y3R1cmUsIGFyZ1BvaW50ZXIpKSk7Ci0KLSAgICAvLyByZWdUMSBjdXJyZW50bHkg
cG9pbnRzIHRvIHRoZSBmaXJzdCBhcmd1bWVudCwgcmVnVDEgLSBzaXplb2YoUmVnaXN0ZXIpIHBv
aW50cyB0byAndGhpcycKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIC0oaW50KXNpemVvZihS
ZWdpc3RlcikgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCBy
ZWdUMik7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCAtKGludClzaXplb2YoUmVnaXN0ZXIp
ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZWdUMyk7Ci0gICAg
c3RvcmVQdHIocmVnVDIsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIE9CSkVDVF9PRkZT
RVRPRihOYXRpdmVDYWxsRnJhbWVTdHJ1Y3R1cmUsIHRoaXNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VU
T0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKLSAgICBzdG9yZVB0cihyZWdUMywgQWRk
cmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKE5hdGl2ZUNhbGxGcmFt
ZVN0cnVjdHVyZSwgdGhpc1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0
cy50YWcpKSk7CisgICAgLy8gQ2FsbGluZyBjb252ZW50aW9uOiAgICAgIGYoZWR4LCAuLi4pOwor
ICAgIC8vIEhvc3QgZnVuY3Rpb24gc2lnbmF0dXJlOiBmKEV4ZWNTdGF0ZSopOworICAgIAorICAg
IC8vIEV4ZWNTdGF0ZSoKKyAgICBtb3ZlKGNhbGxGcmFtZVJlZ2lzdGVyLCBYODZSZWdpc3RlcnM6
OmVkeCk7CiAKLSNpZiBDT01QSUxFUihNU1ZDKSB8fCBPUyhMSU5VWCkKLSAgICAvLyBBcmdMaXN0
IGlzIHBhc3NlZCBieSByZWZlcmVuY2Ugc28gaXMgc3RhY2tQb2ludGVyUmVnaXN0ZXIgKyA0ICog
c2l6ZW9mKFJlZ2lzdGVyKQotICAgIGFkZFB0cihJbW0zMihPQkpFQ1RfT0ZGU0VUT0YoTmF0aXZl
Q2FsbEZyYW1lU3RydWN0dXJlLCByZXN1bHQpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIFg4NlJl
Z2lzdGVyczo6ZWN4KTsKKyNlbHNlCisgICAgLy8gQ2FsbGluZyBjb252ZW50aW9uOiAgICAgIGYo
ZWN4LCBlZHgsIC4uLik7CisgICAgLy8gSG9zdCBmdW5jdGlvbiBzaWduYXR1cmU6IGYoRXhlY1N0
YXRlKik7CiAKLSAgICAvLyBQbGFudCBjYWxsZWUKLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhl
YWRlclB0cihSZWdpc3RlckZpbGU6OkNhbGxlZSwgWDg2UmVnaXN0ZXJzOjplYXgpOwotICAgIHN0
b3JlUHRyKFg4NlJlZ2lzdGVyczo6ZWF4LCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBP
QkpFQ1RfT0ZGU0VUT0YoTmF0aXZlQ2FsbEZyYW1lU3RydWN0dXJlLCBjYWxsZWUpKSk7CisgICAg
Ly8gRXhlY1N0YXRlKgorICAgIG1vdmUoY2FsbEZyYW1lUmVnaXN0ZXIsIFg4NlJlZ2lzdGVyczo6
ZWN4KTsKIAotICAgIC8vIFBsYW50IGNhbGxmcmFtZQotICAgIG1vdmUoY2FsbEZyYW1lUmVnaXN0
ZXIsIFg4NlJlZ2lzdGVyczo6ZWR4KTsKKyNlbmRpZiAvLyBDT01QSUxFUihNU1ZDKSB8fCBPUyhM
SU5VWCkKIAotICAgIGxvYWRQdHIoQWRkcmVzcyhYODZSZWdpc3RlcnM6OmVheCwgT0JKRUNUX09G
RlNFVE9GKEpTRnVuY3Rpb24sIG1fZXhlY3V0YWJsZSkpLCBYODZSZWdpc3RlcnM6OmVieCk7Ci0g
ICAgY2FsbChBZGRyZXNzKFg4NlJlZ2lzdGVyczo6ZWJ4LCBleGVjdXRhYmxlT2Zmc2V0VG9GdW5j
dGlvbikpOworICAgIHN1YlB0cihJbW0zMigxNiAtIHNpemVvZih2b2lkKikpLCBzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CiAKLSAgICAvLyBKU1ZhbHVlIGlzIGEgbm9uLVBPRCB0eXBlLCBzbyBlYXgg
cG9pbnRzIHRvIGl0Ci0gICAgZW1pdExvYWQoMCwgcmVnVDEsIHJlZ1QwLCBYODZSZWdpc3RlcnM6
OmVheCk7Ci0jZWxzZQotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVy
RmlsZTo6Q2FsbGVlLCBYODZSZWdpc3RlcnM6OmVkeCk7IC8vIGNhbGxlZQotICAgIG1vdmUoY2Fs
bEZyYW1lUmVnaXN0ZXIsIFg4NlJlZ2lzdGVyczo6ZWN4KTsgLy8gY2FsbEZyYW1lCi0gICAgbG9h
ZFB0cihBZGRyZXNzKFg4NlJlZ2lzdGVyczo6ZWR4LCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlv
biwgbV9leGVjdXRhYmxlKSksIFg4NlJlZ2lzdGVyczo6ZWJ4KTsKLSAgICBjYWxsKEFkZHJlc3Mo
WDg2UmVnaXN0ZXJzOjplYngsIGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uKSk7Ci0jZW5kaWYK
KyAgICAvLyBjYWxsIHRoZSBmdW5jdGlvbgorICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVy
UHRyKFJlZ2lzdGVyRmlsZTo6Q2FsbGVlLCByZWdUMSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QxLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSksIHJlZ1QxKTsK
KyAgICBtb3ZlKHJlZ1QwLCBjYWxsRnJhbWVSZWdpc3Rlcik7IC8vIEVhZ2VybHkgcmVzdG9yZSBj
YWxsZXIgZnJhbWUgcmVnaXN0ZXIgdG8gYXZvaWQgbG9hZGluZyBmcm9tIHN0YWNrLgorICAgIGNh
bGwoQWRkcmVzcyhyZWdUMSwgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24pKTsKIAotICAgIC8v
IFdlJ3ZlIHB1dCBhIGZldyB0ZW1wb3JhcmllcyBvbiB0aGUgc3RhY2sgaW4gYWRkaXRpb24gdG8g
dGhlIGFjdHVhbCBhcmd1bWVudHMKLSAgICAvLyBzbyBwdWxsIHRoZW0gb2ZmIG5vdwotICAgIGFk
ZFB0cihJbW0zMihOYXRpdmVDYWxsRnJhbWVTaXplIC0gc2l6ZW9mKE5hdGl2ZUZ1bmN0aW9uQ2Fs
bGVlU2lnbmF0dXJlKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoSW1tMzIo
MTYgLSBzaXplb2Yodm9pZCopKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAjZWxpZiBDUFUo
QVJNX1RSQURJVElPTkFMKQogICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyMzIoUmVnaXN0
ZXJGaWxlOjpBcmd1bWVudENvdW50LCByZWdUMCk7CkBAIC0zOTMsMjIgKzMyMCw4IEBAIEpJVDo6
TGFiZWwgSklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUMKICAgICBDT01QSUxFX0FTU0VSVCgo
c2l6ZW9mKEFyZ0xpc3QpICYgMHg3KSA9PSAwICYmIHNpemVvZihKU1ZhbHVlKSA9PSA4ICYmIHNp
emVvZihSZWdpc3RlcikgPT0gOCwgQXJnTGlzdF9zaG91bGRfYnlfOGJ5dGVfYWxpZ25lZCk7CiAg
ICAgc3ViUHRyKEltbTMyKHNpemVvZihBcmdMaXN0KSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
IAotICAgIC8vIFNldCB1cCBhcmd1bWVudHMKLSAgICBzdWJQdHIoSW1tMzIoMSksIHJlZ1QwKTsg
Ly8gRG9uJ3QgaW5jbHVkZSAndGhpcycgaW4gYXJnY291bnQKLQotICAgIC8vIFB1c2ggYXJnY291
bnQKLSAgICBzdG9yZVB0cihyZWdUMCwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgT0JK
RUNUX09GRlNFVE9GKEFyZ0xpc3QsIG1fYXJnQ291bnQpKSk7Ci0KLSAgICAvLyBDYWxjdWxhdGUg
dGhlIHN0YXJ0IG9mIHRoZSBjYWxsZnJhbWUgaGVhZGVyLCBhbmQgc3RvcmUgaW4gcmVnVDEKICAg
ICBtb3ZlKGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMSk7Ci0gICAgc3ViMzIoSW1tMzIoUmVnaXN0
ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplICogKGludDMyX3Qpc2l6ZW9mKFJlZ2lzdGVyKSks
IHJlZ1QxKTsKLQotICAgIC8vIENhbGN1bGF0ZSBzdGFydCBvZiBhcmd1bWVudHMgYXMgY2FsbGZy
YW1lIGhlYWRlciAtIHNpemVvZihSZWdpc3RlcikgKiBhcmdjb3VudCAocmVnVDEpCi0gICAgbXVs
MzIoSW1tMzIoc2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QwLCByZWdUMCk7Ci0gICAgc3ViUHRyKHJl
Z1QwLCByZWdUMSk7Ci0KLSAgICAvLyBwdXNoIHBvaW50ZXIgdG8gYXJndW1lbnRzCi0gICAgc3Rv
cmVQdHIocmVnVDEsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIE9CSkVDVF9PRkZTRVRP
RihBcmdMaXN0LCBtX2FyZ3MpKSk7CisgICAgbW92ZShyZWdUMCwgY2FsbEZyYW1lUmVnaXN0ZXIp
OwogCiAgICAgLy8gQXJndW1lbnQgcGFzc2luZyBtZXRob2Q6CiAgICAgLy8gcjAgLSBwb2ludHMg
dG8gcmV0dXJuIHZhbHVlCkBAIC00MTcsMjQgKzMzMCwxMyBAQCBKSVQ6OkxhYmVsIEpJVDo6cHJp
dmF0ZUNvbXBpbGVDVElOYXRpdmVDCiAgICAgLy8gc3RhY2s6IHRoaXMoSlNWYWx1ZSkgYW5kIGEg
cG9pbnRlciB0byBBcmdMaXN0CiAKICNpZiBPUyhXSU5DRSkKLSAgICAvLyBTZXR1cCBhcmc0Ogot
ICAgIHB1c2goc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotCi0gICAgLy8gU2V0dXAgYXJnMzoKLSAg
ICAvLyByZWdUMSBjdXJyZW50bHkgcG9pbnRzIHRvIHRoZSBmaXJzdCBhcmd1bWVudCwgcmVnVDEt
c2l6ZW9mKFJlZ2lzdGVyKSBwb2ludHMgdG8gJ3RoaXMnCi0gICAgbG9hZDMyKEFkZHJlc3MocmVn
VDEsIC0oaW50MzJfdClzaXplb2Yodm9pZCopICogMiksIEFSTVJlZ2lzdGVyczo6cjMpOwotICAg
IHB1c2goQVJNUmVnaXN0ZXJzOjpyMyk7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIC0oaW50
MzJfdClzaXplb2Yodm9pZCopKSwgcmVnVDMpOwotICAgIHN0b3JlUHRyKHJlZ1QzLCBBZGRyZXNz
KHN0YWNrUG9pbnRlclJlZ2lzdGVyKSk7CisgICAgc3ViUHRyKEltbTMyKDgpLCBzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CiAKLSAgICAvLyBTZXR1cCBhcmcyOgogICAgIGVtaXRHZXRGcm9tQ2FsbEZy
YW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6Q2FsbGVlLCByZWdUMik7CiAKICAgICAvLyBTZXR1
cCBhcmcxOgogICAgIG1vdmUoY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QxKTsKLQotICAgIC8vIFNl
dHVwIGFyZzA6Ci0gICAgbW92ZShzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVnVDApOworICAgIG1v
dmUocmVnVDAsIGNhbGxGcmFtZVJlZ2lzdGVyKTsKIAogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MiwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fZXhlY3V0YWJsZSkpLCByZWdUMyk7CiAg
ICAgY2FsbChBZGRyZXNzKHJlZ1QzLCBleGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlvbikpOwpAQCAt
NDQyLDI4ICszNDQsMTMgQEAgSklUOjpMYWJlbCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZl
QwogICAgIGxvYWQzMihBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCAwKSwgcmVnVDApOwog
ICAgIGxvYWQzMihBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCA0KSwgcmVnVDEpOwogCi0g
ICAgYWRkUHRyKEltbTMyKHNpemVvZihBcmdMaXN0KSArIDgpLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CisgICAgYWRkUHRyKEltbTMyKDgpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAjZWxzZSAv
LyBPUyhXSU5DRSkKLSAgICBtb3ZlKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdUMyk7CiAgICAg
c3ViUHRyKEltbTMyKDgpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgbW92ZShzdGFja1Bv
aW50ZXJSZWdpc3RlciwgcmVnVDApOwotICAgIHN1YlB0cihJbW0zMig4ICsgNCArIDQgLyogcGFk
ZGluZyAqLyksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLQotICAgIC8vIFNldHVwIGFyZzQ6Ci0g
ICAgc3RvcmVQdHIocmVnVDMsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIDgpKTsKLQot
ICAgIC8vIFNldHVwIGFyZzM6Ci0gICAgLy8gcmVnVDEgY3VycmVudGx5IHBvaW50cyB0byB0aGUg
Zmlyc3QgYXJndW1lbnQsIHJlZ1QxLXNpemVvZihSZWdpc3RlcikgcG9pbnRzIHRvICd0aGlzJwot
ICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCAtKGludDMyX3Qpc2l6ZW9mKHZvaWQqKSAqIDIpLCBy
ZWdUMyk7Ci0gICAgc3RvcmVQdHIocmVnVDMsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIs
IDApKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgLShpbnQzMl90KXNpemVvZih2b2lkKikp
LCByZWdUMyk7Ci0gICAgc3RvcmVQdHIocmVnVDMsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0
ZXIsIDQpKTsKLQotICAgIC8vIFNldHVwIGFyZzI6Ci0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVI
ZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpDYWxsZWUsIHJlZ1QyKTsKIAogICAgIC8vIFNldHVwIGFy
ZzE6CiAgICAgbW92ZShjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDEpOworICAgIG1vdmUocmVnVDAs
IGNhbGxGcmFtZVJlZ2lzdGVyKTsKIAogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgT0JKRUNU
X09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fZXhlY3V0YWJsZSkpLCByZWdUMyk7CiAgICAgY2FsbChB
ZGRyZXNzKHJlZ1QzLCBleGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlvbikpOwpAQCAtNDcyLDM1ICsz
NTksMjQgQEAgSklUOjpMYWJlbCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQwogICAgIGxv
YWQzMihBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCAxNiksIHJlZ1QwKTsKICAgICBsb2Fk
MzIoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgMjApLCByZWdUMSk7CiAKLSAgICBhZGRQ
dHIoSW1tMzIoc2l6ZW9mKEFyZ0xpc3QpICsgMTYgKyA4KSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OworICAgIGFkZFB0cihJbW0zMig4KSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogI2VuZGlmIC8v
IE9TKFdJTkNFKQogCi0jZW5kaWYKKyNlbmRpZiAvLyBDUFUoWDg2KQogCiAgICAgLy8gQ2hlY2sg
Zm9yIGFuIGV4Y2VwdGlvbgotICAgIG1vdmUoSW1tUHRyKCZnbG9iYWxEYXRhLT5leGNlcHRpb24p
LCByZWdUMik7Ci0gICAgSnVtcCBzYXdFeGNlcHRpb24gPSBicmFuY2gzMihOb3RFcXVhbCwgdGFn
Rm9yKDAsIHJlZ1QyKSwgSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOwotCi0gICAgLy8g
R3JhYiB0aGUgcmV0dXJuIGFkZHJlc3MuCi0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQ
dHIoUmVnaXN0ZXJGaWxlOjpSZXR1cm5QQywgcmVnVDMpOwotCi0gICAgLy8gUmVzdG9yZSBvdXIg
Y2FsbGVyJ3MgInIiLgotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVy
RmlsZTo6Q2FsbGVyRnJhbWUsIGNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICBKdW1wIHNhd0V4Y2Vw
dGlvbiA9IGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MocmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4oJmdsb2JhbERhdGEtPmV4Y2VwdGlvbikgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1
ZSwgdS5hc0JpdHMudGFnKSksIEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKTsKIAogICAg
IC8vIFJldHVybi4KLSAgICByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihyZWdUMyk7
CiAgICAgcmV0KCk7CiAKICAgICAvLyBIYW5kbGUgYW4gZXhjZXB0aW9uCiAgICAgc2F3RXhjZXB0
aW9uLmxpbmsodGhpcyk7Ci0gICAgLy8gR3JhYiB0aGUgcmV0dXJuIGFkZHJlc3MuCi0gICAgZW1p
dEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpSZXR1cm5QQywgcmVnVDEp
OworICAgIHBlZWsocmVnVDEpOwogICAgIG1vdmUoSW1tUHRyKCZnbG9iYWxEYXRhLT5leGNlcHRp
b25Mb2NhdGlvbiksIHJlZ1QyKTsKICAgICBzdG9yZVB0cihyZWdUMSwgcmVnVDIpOwotICAgIG1v
dmUoSW1tUHRyKEZ1bmN0aW9uUHRyKGN0aVZNVGhyb3dUcmFtcG9saW5lKS52YWx1ZSgpKSwgcmVn
VDIpOwotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6Q2Fs
bGVyRnJhbWUsIGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICBwb2tlKGNhbGxGcmFtZVJlZ2lzdGVy
LCBPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIGNhbGxGcmFtZSkgLyBzaXpl
b2Yodm9pZCopKTsKLSAgICByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihyZWdUMik7
CisgICAgcG9rZShjYWxsRnJhbWVSZWdpc3RlciwgMSArIE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3Qg
SklUU3RhY2tGcmFtZSwgY2FsbEZyYW1lKSAvIHNpemVvZih2b2lkKikpOworICAgIHBva2UoSW1t
UHRyKEZ1bmN0aW9uUHRyKGN0aVZNVGhyb3dUcmFtcG9saW5lKS52YWx1ZSgpKSk7CiAgICAgcmV0
KCk7CiAKICNlbGlmIEVOQUJMRShKSVRfT1BUSU1JWkVfTkFUSVZFX0NBTEwpCkBAIC01MTQsMTk0
ICszOTAsNzUgQEAgSklUOjpMYWJlbCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQwogCiBK
SVQ6OkNvZGVQdHIgSklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoUGFzc1JlZlB0cjxF
eGVjdXRhYmxlUG9vbD4gZXhlY3V0YWJsZVBvb2wsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwg
TmF0aXZlRnVuY3Rpb24gZnVuYykKIHsKLSNpZiBDUFUoWDg2KSB8fCBDUFUoQVJNX1RSQURJVElP
TkFMKQogICAgIExhYmVsIG5hdGl2ZUNhbGxUaHVuayA9IGFsaWduKCk7Ci0gICAgcHJlc2VydmVS
ZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHJlZ1QwKTsKLSAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFk
ZXIocmVnVDAsIFJlZ2lzdGVyRmlsZTo6UmV0dXJuUEMpOyAvLyBQdXNoIHJldHVybiBhZGRyZXNz
CisjaWYgQ1BVKFg4NikgfHwgQ1BVKEFSTV9UUkFESVRJT05BTCkKIAogICAgIC8vIExvYWQgY2Fs
bGVyIGZyYW1lJ3Mgc2NvcGUgY2hhaW4gaW50byB0aGlzIGNhbGxmcmFtZSBzbyB0aGF0IHdoYXRl
dmVyIHdlIGNhbGwgY2FuCiAgICAgLy8gZ2V0IHRvIGl0cyBnbG9iYWwgZGF0YS4KLSAgICBlbWl0
R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZpbGU6OkNhbGxlckZyYW1lLCByZWdU
MSk7Ci0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpTY29w
ZUNoYWluLCByZWdUMSwgcmVnVDEpOworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRy
KFJlZ2lzdGVyRmlsZTo6Q2FsbGVyRnJhbWUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0RnJvbUNhbGxG
cmFtZUhlYWRlclB0cihSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4sIHJlZ1QxLCByZWdUMCk7CiAg
ICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHJlZ1QxLCBSZWdpc3RlckZpbGU6OlNjb3BlQ2hh
aW4pOwogCi0jaWYgQ1BVKFg4NikKLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjMyKFJl
Z2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCwgcmVnVDApOwotCi0gICAgLyogV2UgaGF2ZSB0d28g
c3RydWN0cyB0aGF0IHdlIHVzZSB0byBkZXNjcmliZSB0aGUgc3RhY2tmcmFtZSB3ZSBzZXQgdXAg
Zm9yIG91cgotICAgICAqIGNhbGwgdG8gbmF0aXZlIGNvZGUuICBOYXRpdmVDYWxsRnJhbWVTdHJ1
Y3R1cmUgZGVzY3JpYmVzIHRoZSBob3cgd2Ugc2V0IHVwIHRoZSBzdGFjawotICAgICAqIGluIGFk
dmFuY2Ugb2YgdGhlIGNhbGwuICBOYXRpdmVGdW5jdGlvbkNhbGxlZVNpZ25hdHVyZSBkZXNjcmli
ZXMgdGhlIGNhbGxmcmFtZQotICAgICAqIGFzIHRoZSBuYXRpdmUgY29kZSBleHBlY3RzIGl0LiAg
V2UgZG8gdGhpcyBhcyB3ZSBhcmUgdXNpbmcgdGhlIGZhc3RjYWxsIGNhbGxpbmcKLSAgICAgKiBj
b252ZW50aW9uIHdoaWNoIHJlc3VsdHMgaW4gdGhlIGNhbGxlZSBwb3BwaW5nIGl0cyBhcmd1bWVu
dHMgb2ZmIHRoZSBzdGFjaywgYnV0Ci0gICAgICogbm90IHRoZSByZXN0IG9mIHRoZSBjYWxsZnJh
bWUgc28gd2UgbmVlZCBhIG5pY2Ugd2F5IHRvIGVuc3VyZSB3ZSBpbmNyZW1lbnQgdGhlCi0gICAg
ICogc3RhY2sgcG9pbnRlciBieSB0aGUgcmlnaHQgYW1vdW50IGFmdGVyIHRoZSBjYWxsLgotICAg
ICAqLworICAgIHBlZWsocmVnVDEpOworICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihyZWdU
MSwgUmVnaXN0ZXJGaWxlOjpSZXR1cm5QQyk7CiAKKyNpZiBDUFUoWDg2KQogI2lmIENPTVBJTEVS
KE1TVkMpIHx8IE9TKExJTlVYKQotI2lmIENPTVBJTEVSKE1TVkMpCi0jcHJhZ21hIHBhY2socHVz
aCkKLSNwcmFnbWEgcGFjayg0KQotI2VuZGlmIC8vIENPTVBJTEVSKE1TVkMpCi0gICAgc3RydWN0
IE5hdGl2ZUNhbGxGcmFtZVN0cnVjdHVyZSB7Ci0gICAgICAgIC8vICBDYWxsRnJhbWUqIGNhbGxG
cmFtZTsgLy8gcGFzc2VkIGluIEVEWAotICAgICAgICBKU09iamVjdCogY2FsbGVlOwotICAgICAg
ICBKU1ZhbHVlIHRoaXNWYWx1ZTsKLSAgICAgICAgQXJnTGlzdCogYXJnUG9pbnRlcjsKLSAgICAg
ICAgQXJnTGlzdCBhcmdzOwotICAgICAgICBKU1ZhbHVlIHJlc3VsdDsKLSAgICB9OwotICAgIHN0
cnVjdCBOYXRpdmVGdW5jdGlvbkNhbGxlZVNpZ25hdHVyZSB7Ci0gICAgICAgIEpTT2JqZWN0KiBj
YWxsZWU7Ci0gICAgICAgIEpTVmFsdWUgdGhpc1ZhbHVlOwotICAgICAgICBBcmdMaXN0KiBhcmdQ
b2ludGVyOwotICAgIH07Ci0jaWYgQ09NUElMRVIoTVNWQykKLSNwcmFnbWEgcGFjayhwb3ApCi0j
ZW5kaWYgLy8gQ09NUElMRVIoTVNWQykKLSNlbHNlCi0gICAgc3RydWN0IE5hdGl2ZUNhbGxGcmFt
ZVN0cnVjdHVyZSB7Ci0gICAgICAgIC8vICBDYWxsRnJhbWUqIGNhbGxGcmFtZTsgLy8gcGFzc2Vk
IGluIEVDWAotICAgICAgICAvLyAgSlNPYmplY3QqIGNhbGxlZTsgLy8gcGFzc2VkIGluIEVEWAot
ICAgICAgICBKU1ZhbHVlIHRoaXNWYWx1ZTsKLSAgICAgICAgQXJnTGlzdCogYXJnUG9pbnRlcjsK
LSAgICAgICAgQXJnTGlzdCBhcmdzOwotICAgIH07Ci0gICAgc3RydWN0IE5hdGl2ZUZ1bmN0aW9u
Q2FsbGVlU2lnbmF0dXJlIHsKLSAgICAgICAgSlNWYWx1ZSB0aGlzVmFsdWU7Ci0gICAgICAgIEFy
Z0xpc3QqIGFyZ1BvaW50ZXI7Ci0gICAgfTsKLSNlbmRpZgorICAgIC8vIENhbGxpbmcgY29udmVu
dGlvbjogICAgICBmKGVkeCwgLi4uKTsKKyAgICAvLyBIb3N0IGZ1bmN0aW9uIHNpZ25hdHVyZTog
ZihFeGVjU3RhdGUqKTsKKyAgICAKKyAgICAvLyBFeGVjU3RhdGUqCisgICAgbW92ZShjYWxsRnJh
bWVSZWdpc3RlciwgWDg2UmVnaXN0ZXJzOjplZHgpOwogCi0gICAgY29uc3QgaW50IE5hdGl2ZUNh
bGxGcmFtZVNpemUgPSAoc2l6ZW9mKE5hdGl2ZUNhbGxGcmFtZVN0cnVjdHVyZSkgKyAxNSkgJiB+
MTU7Ci0gICAgLy8gQWxsb2NhdGUgc3lzdGVtIHN0YWNrIGZyYW1lCi0gICAgc3ViUHRyKEltbTMy
KE5hdGl2ZUNhbGxGcmFtZVNpemUpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0KLSAgICAvLyBT
ZXQgdXAgYXJndW1lbnRzCi0gICAgc3ViUHRyKEltbTMyKDEpLCByZWdUMCk7IC8vIERvbid0IGlu
Y2x1ZGUgJ3RoaXMnIGluIGFyZ2NvdW50Ci0KLSAgICAvLyBwdXNoIGFyZ2NvdW50Ci0gICAgc3Rv
cmVQdHIocmVnVDAsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIE9CSkVDVF9PRkZTRVRP
RihOYXRpdmVDYWxsRnJhbWVTdHJ1Y3R1cmUsIGFyZ3MpICsgT0JKRUNUX09GRlNFVE9GKEFyZ0xp
c3QsIG1fYXJnQ291bnQpKSk7Ci0KLSAgICAvLyBDYWxjdWxhdGUgdGhlIHN0YXJ0IG9mIHRoZSBj
YWxsZnJhbWUgaGVhZGVyLCBhbmQgc3RvcmUgaW4gcmVnVDEKLSAgICBhZGRQdHIoSW1tMzIoLVJl
Z2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAqIChpbnQpc2l6ZW9mKFJlZ2lzdGVyKSks
IGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMSk7Ci0KLSAgICAvLyBDYWxjdWxhdGUgc3RhcnQgb2Yg
YXJndW1lbnRzIGFzIGNhbGxmcmFtZSBoZWFkZXIgLSBzaXplb2YoUmVnaXN0ZXIpICogYXJnY291
bnQgKHJlZ1QwKQotICAgIG11bDMyKEltbTMyKHNpemVvZihSZWdpc3RlcikpLCByZWdUMCwgcmVn
VDApOwotICAgIHN1YlB0cihyZWdUMCwgcmVnVDEpOwotICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRy
ZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBPQkpFQ1RfT0ZGU0VUT0YoTmF0aXZlQ2FsbEZyYW1l
U3RydWN0dXJlLCBhcmdzKSArIE9CSkVDVF9PRkZTRVRPRihBcmdMaXN0LCBtX2FyZ3MpKSk7Ci0K
LSAgICAvLyBBcmdMaXN0IGlzIHBhc3NlZCBieSByZWZlcmVuY2Ugc28gaXMgc3RhY2tQb2ludGVy
UmVnaXN0ZXIgKyA0ICogc2l6ZW9mKFJlZ2lzdGVyKQotICAgIGFkZFB0cihJbW0zMihPQkpFQ1Rf
T0ZGU0VUT0YoTmF0aXZlQ2FsbEZyYW1lU3RydWN0dXJlLCBhcmdzKSksIHN0YWNrUG9pbnRlclJl
Z2lzdGVyLCByZWdUMCk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIEFkZHJlc3Moc3RhY2tQb2ludGVy
UmVnaXN0ZXIsIE9CSkVDVF9PRkZTRVRPRihOYXRpdmVDYWxsRnJhbWVTdHJ1Y3R1cmUsIGFyZ1Bv
aW50ZXIpKSk7Ci0KLSAgICAvLyByZWdUMSBjdXJyZW50bHkgcG9pbnRzIHRvIHRoZSBmaXJzdCBh
cmd1bWVudCwgcmVnVDEgLSBzaXplb2YoUmVnaXN0ZXIpIHBvaW50cyB0byAndGhpcycKLSAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDEsIC0oaW50KXNpemVvZihSZWdpc3RlcikgKyBPQkpFQ1RfT0ZG
U0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZWdUMik7Ci0gICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QxLCAtKGludClzaXplb2YoUmVnaXN0ZXIpICsgT0JKRUNUX09GRlNFVE9GKEpT
VmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZWdUMyk7Ci0gICAgc3RvcmVQdHIocmVnVDIsIEFkZHJl
c3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIE9CSkVDVF9PRkZTRVRPRihOYXRpdmVDYWxsRnJhbWVT
dHJ1Y3R1cmUsIHRoaXNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMu
cGF5bG9hZCkpKTsKLSAgICBzdG9yZVB0cihyZWdUMywgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdp
c3RlciwgT0JKRUNUX09GRlNFVE9GKE5hdGl2ZUNhbGxGcmFtZVN0cnVjdHVyZSwgdGhpc1ZhbHVl
KSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7CisjZWxzZQorICAg
IC8vIENhbGxpbmcgY29udmVudGlvbjogICAgICBmKGVjeCwgZWR4LCAuLi4pOworICAgIC8vIEhv
c3QgZnVuY3Rpb24gc2lnbmF0dXJlOiBmKEV4ZWNTdGF0ZSopOwogCi0jaWYgQ09NUElMRVIoTVNW
QykgfHwgT1MoTElOVVgpCi0gICAgLy8gQXJnTGlzdCBpcyBwYXNzZWQgYnkgcmVmZXJlbmNlIHNv
IGlzIHN0YWNrUG9pbnRlclJlZ2lzdGVyICsgNCAqIHNpemVvZihSZWdpc3RlcikKLSAgICBhZGRQ
dHIoSW1tMzIoT0JKRUNUX09GRlNFVE9GKE5hdGl2ZUNhbGxGcmFtZVN0cnVjdHVyZSwgcmVzdWx0
KSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBYODZSZWdpc3RlcnM6OmVjeCk7CisgICAgLy8gRXhl
Y1N0YXRlKgorICAgIG1vdmUoY2FsbEZyYW1lUmVnaXN0ZXIsIFg4NlJlZ2lzdGVyczo6ZWN4KTsK
IAotICAgIC8vIFBsYW50IGNhbGxlZQotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRy
KFJlZ2lzdGVyRmlsZTo6Q2FsbGVlLCBYODZSZWdpc3RlcnM6OmVheCk7Ci0gICAgc3RvcmVQdHIo
WDg2UmVnaXN0ZXJzOjplYXgsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIE9CSkVDVF9P
RkZTRVRPRihOYXRpdmVDYWxsRnJhbWVTdHJ1Y3R1cmUsIGNhbGxlZSkpKTsKKyNlbmRpZiAvLyBD
T01QSUxFUihNU1ZDKSB8fCBPUyhMSU5VWCkKIAotICAgIC8vIFBsYW50IGNhbGxmcmFtZQotICAg
IG1vdmUoY2FsbEZyYW1lUmVnaXN0ZXIsIFg4NlJlZ2lzdGVyczo6ZWR4KTsKKyAgICBzdWJQdHIo
SW1tMzIoMTYgLSBzaXplb2Yodm9pZCopKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCi0gICAg
Q2FsbCBuYXRpdmVDYWxsID0gY2FsbCgpOworICAgIG1vdmUocmVnVDAsIGNhbGxGcmFtZVJlZ2lz
dGVyKTsgLy8gRWFnZXJseSByZXN0b3JlIGNhbGxlciBmcmFtZSByZWdpc3RlciB0byBhdm9pZCBs
b2FkaW5nIGZyb20gc3RhY2suCiAKLSAgICAvLyBKU1ZhbHVlIGlzIGEgbm9uLVBPRCB0eXBlLCBz
byBlYXggcG9pbnRzIHRvIGl0Ci0gICAgZW1pdExvYWQoMCwgcmVnVDEsIHJlZ1QwLCBYODZSZWdp
c3RlcnM6OmVheCk7Ci0jZWxzZQotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJl
Z2lzdGVyRmlsZTo6Q2FsbGVlLCBYODZSZWdpc3RlcnM6OmVkeCk7IC8vIGNhbGxlZQotICAgIG1v
dmUoY2FsbEZyYW1lUmVnaXN0ZXIsIFg4NlJlZ2lzdGVyczo6ZWN4KTsgLy8gY2FsbEZyYW1lCisg
ICAgLy8gY2FsbCB0aGUgZnVuY3Rpb24KICAgICBDYWxsIG5hdGl2ZUNhbGwgPSBjYWxsKCk7Ci0j
ZW5kaWYKIAotICAgIC8vIFdlJ3ZlIHB1dCBhIGZldyB0ZW1wb3JhcmllcyBvbiB0aGUgc3RhY2sg
aW4gYWRkaXRpb24gdG8gdGhlIGFjdHVhbCBhcmd1bWVudHMKLSAgICAvLyBzbyBwdWxsIHRoZW0g
b2ZmIG5vdwotICAgIGFkZFB0cihJbW0zMihOYXRpdmVDYWxsRnJhbWVTaXplIC0gc2l6ZW9mKE5h
dGl2ZUZ1bmN0aW9uQ2FsbGVlU2lnbmF0dXJlKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAg
ICBhZGRQdHIoSW1tMzIoMTYgLSBzaXplb2Yodm9pZCopKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OwogCiAjZWxpZiBDUFUoQVJNX1RSQURJVElPTkFMKQotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1l
SGVhZGVyMzIoUmVnaXN0ZXJGaWxlOjpBcmd1bWVudENvdW50LCByZWdUMCk7Ci0KICAgICAvLyBB
bGxvY2F0ZSBzdGFjayBzcGFjZSBmb3Igb3VyIGFyZ2xpc3QKICAgICBDT01QSUxFX0FTU0VSVCgo
c2l6ZW9mKEFyZ0xpc3QpICYgMHg3KSA9PSAwICYmIHNpemVvZihKU1ZhbHVlKSA9PSA4ICYmIHNp
emVvZihSZWdpc3RlcikgPT0gOCwgQXJnTGlzdF9zaG91bGRfYnlfOGJ5dGVfYWxpZ25lZCk7CiAg
ICAgc3ViUHRyKEltbTMyKHNpemVvZihBcmdMaXN0KSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
IAotICAgIC8vIFNldCB1cCBhcmd1bWVudHMKLSAgICBzdWJQdHIoSW1tMzIoMSksIHJlZ1QwKTsg
Ly8gRG9uJ3QgaW5jbHVkZSAndGhpcycgaW4gYXJnY291bnQKLQotICAgIC8vIFB1c2ggYXJnY291
bnQKLSAgICBzdG9yZVB0cihyZWdUMCwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgT0JK
RUNUX09GRlNFVE9GKEFyZ0xpc3QsIG1fYXJnQ291bnQpKSk7Ci0KLSAgICAvLyBDYWxjdWxhdGUg
dGhlIHN0YXJ0IG9mIHRoZSBjYWxsZnJhbWUgaGVhZGVyLCBhbmQgc3RvcmUgaW4gcmVnVDEKICAg
ICBtb3ZlKGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMSk7Ci0gICAgc3ViMzIoSW1tMzIoUmVnaXN0
ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplICogKGludDMyX3Qpc2l6ZW9mKFJlZ2lzdGVyKSks
IHJlZ1QxKTsKLQotICAgIC8vIENhbGN1bGF0ZSBzdGFydCBvZiBhcmd1bWVudHMgYXMgY2FsbGZy
YW1lIGhlYWRlciAtIHNpemVvZihSZWdpc3RlcikgKiBhcmdjb3VudCAocmVnVDEpCi0gICAgbXVs
MzIoSW1tMzIoc2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QwLCByZWdUMCk7Ci0gICAgc3ViUHRyKHJl
Z1QwLCByZWdUMSk7Ci0KLSAgICAvLyBwdXNoIHBvaW50ZXIgdG8gYXJndW1lbnRzCi0gICAgc3Rv
cmVQdHIocmVnVDEsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIE9CSkVDVF9PRkZTRVRP
RihBcmdMaXN0LCBtX2FyZ3MpKSk7CisgICAgbW92ZShyZWdUMCwgY2FsbEZyYW1lUmVnaXN0ZXIp
OwogCiAgICAgLy8gQXJndW1lbnQgcGFzc2luZyBtZXRob2Q6CiAgICAgLy8gcjAgLSBwb2ludHMg
dG8gcmV0dXJuIHZhbHVlCiAgICAgLy8gcjEgLSBjYWxsRnJhbWUKLSAgICAvLyByMiAtIGNhbGxl
ZQotICAgIC8vIHN0YWNrOiB0aGlzKEpTVmFsdWUpIGFuZCBhIHBvaW50ZXIgdG8gQXJnTGlzdAog
CiAjaWYgT1MoV0lOQ0UpCi0gICAgLy8gU2V0dXAgYXJnNDoKLSAgICBwdXNoKHN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKLQotICAgIC8vIFNldHVwIGFyZzM6Ci0gICAgLy8gcmVnVDEgY3VycmVudGx5
IHBvaW50cyB0byB0aGUgZmlyc3QgYXJndW1lbnQsIHJlZ1QxLXNpemVvZihSZWdpc3RlcikgcG9p
bnRzIHRvICd0aGlzJwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCAtKGludDMyX3Qpc2l6ZW9m
KHZvaWQqKSAqIDIpLCBBUk1SZWdpc3RlcnM6OnIzKTsKLSAgICBwdXNoKEFSTVJlZ2lzdGVyczo6
cjMpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCAtKGludDMyX3Qpc2l6ZW9mKHZvaWQqKSks
IHJlZ1QzKTsKLSAgICBzdG9yZVB0cihyZWdUMywgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rl
cikpOwotCi0gICAgLy8gU2V0dXAgYXJnMjoKLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRl
clB0cihSZWdpc3RlckZpbGU6OkNhbGxlZSwgcmVnVDIpOworICAgIHN1YlB0cihJbW0zMig4KSwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgLy8gU2V0dXAgYXJnMToKICAgICBtb3ZlKGNh
bGxGcmFtZVJlZ2lzdGVyLCByZWdUMSk7Ci0KLSAgICAvLyBTZXR1cCBhcmcwOgotICAgIG1vdmUo
c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICBtb3ZlKHJlZ1QwLCBjYWxsRnJhbWVS
ZWdpc3Rlcik7CiAKICAgICBDYWxsIG5hdGl2ZUNhbGwgPSBjYWxsKCk7CiAKICAgICBsb2FkMzIo
QWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgMCksIHJlZ1QwKTsKICAgICBsb2FkMzIoQWRk
cmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgNCksIHJlZ1QxKTsKIAotICAgIGFkZFB0cihJbW0z
MihzaXplb2YoQXJnTGlzdCkgKyA4KSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0
cihJbW0zMig4KSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogI2Vsc2UgLy8gT1MoV0lOQ0UpCi0g
ICAgbW92ZShzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVnVDMpOwogICAgIHN1YlB0cihJbW0zMig4
KSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIG1vdmUoc3RhY2tQb2ludGVyUmVnaXN0ZXIs
IHJlZ1QwKTsKLSAgICBzdWJQdHIoSW1tMzIoOCArIDQgKyA0IC8qIHBhZGRpbmcgKi8pLCBzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7Ci0KLSAgICAvLyBTZXR1cCBhcmc0OgotICAgIHN0b3JlUHRyKHJl
Z1QzLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCA4KSk7Ci0KLSAgICAvLyBTZXR1cCBh
cmczOgotICAgIC8vIHJlZ1QxIGN1cnJlbnRseSBwb2ludHMgdG8gdGhlIGZpcnN0IGFyZ3VtZW50
LCByZWdUMS1zaXplb2YoUmVnaXN0ZXIpIHBvaW50cyB0byAndGhpcycKLSAgICBsb2FkMzIoQWRk
cmVzcyhyZWdUMSwgLShpbnQzMl90KXNpemVvZih2b2lkKikgKiAyKSwgcmVnVDMpOwotICAgIHN0
b3JlUHRyKHJlZ1QzLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCAwKSk7Ci0gICAgbG9h
ZDMyKEFkZHJlc3MocmVnVDEsIC0oaW50MzJfdClzaXplb2Yodm9pZCopKSwgcmVnVDMpOwotICAg
IHN0b3JlUHRyKHJlZ1QzLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCA0KSk7Ci0KLSAg
ICAvLyBTZXR1cCBhcmcyOgotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lz
dGVyRmlsZTo6Q2FsbGVlLCByZWdUMik7CiAKICAgICAvLyBTZXR1cCBhcmcxOgogICAgIG1vdmUo
Y2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QxKTsKKyAgICBtb3ZlKHJlZ1QwLCBjYWxsRnJhbWVSZWdp
c3Rlcik7CiAKICAgICBDYWxsIG5hdGl2ZUNhbGwgPSBjYWxsKCk7CiAKQEAgLTcwOSwzNSArNDY2
LDI0IEBAIEpJVDo6Q29kZVB0ciBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXYKICAgICBsb2Fk
MzIoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgMTYpLCByZWdUMCk7CiAgICAgbG9hZDMy
KEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIDIwKSwgcmVnVDEpOwogCi0gICAgYWRkUHRy
KEltbTMyKHNpemVvZihBcmdMaXN0KSArIDE2ICsgOCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
KyAgICBhZGRQdHIoSW1tMzIoOCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICNlbmRpZiAvLyBP
UyhXSU5DRSkKIAotI2VuZGlmCisjZW5kaWYgLy8gQ1BVKFg4NikKIAogICAgIC8vIENoZWNrIGZv
ciBhbiBleGNlcHRpb24KLSAgICBtb3ZlKEltbVB0cigmZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uKSwg
cmVnVDIpOwotICAgIEp1bXAgc2F3RXhjZXB0aW9uID0gYnJhbmNoMzIoTm90RXF1YWwsIHRhZ0Zv
cigwLCByZWdUMiksIEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKTsKLQotICAgIC8vIEdy
YWIgdGhlIHJldHVybiBhZGRyZXNzLgotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRy
KFJlZ2lzdGVyRmlsZTo6UmV0dXJuUEMsIHJlZ1QzKTsKLQotICAgIC8vIFJlc3RvcmUgb3VyIGNh
bGxlcidzICJyIi4KLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZp
bGU6OkNhbGxlckZyYW1lLCBjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgSnVtcCBzYXdFeGNlcHRp
b24gPSBicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KCZnbG9iYWxEYXRhLT5leGNlcHRpb24pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUs
IHUuYXNCaXRzLnRhZykpLCBJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7CiAKICAgICAv
LyBSZXR1cm4uCi0gICAgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4ocmVnVDMpOwog
ICAgIHJldCgpOwogCiAgICAgLy8gSGFuZGxlIGFuIGV4Y2VwdGlvbgogICAgIHNhd0V4Y2VwdGlv
bi5saW5rKHRoaXMpOwotICAgIC8vIEdyYWIgdGhlIHJldHVybiBhZGRyZXNzLgotICAgIGVtaXRH
ZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6UmV0dXJuUEMsIHJlZ1QxKTsK
KyAgICBwZWVrKHJlZ1QxKTsKICAgICBtb3ZlKEltbVB0cigmZ2xvYmFsRGF0YS0+ZXhjZXB0aW9u
TG9jYXRpb24pLCByZWdUMik7CiAgICAgc3RvcmVQdHIocmVnVDEsIHJlZ1QyKTsKLSAgICBtb3Zl
KEltbVB0cihGdW5jdGlvblB0cihjdGlWTVRocm93VHJhbXBvbGluZSkudmFsdWUoKSksIHJlZ1Qy
KTsKLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZpbGU6OkNhbGxl
ckZyYW1lLCBjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgcG9rZShjYWxsRnJhbWVSZWdpc3Rlciwg
T0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBjYWxsRnJhbWUpIC8gc2l6ZW9m
KHZvaWQqKSk7Ci0gICAgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4ocmVnVDIpOwor
ICAgIHBva2UoY2FsbEZyYW1lUmVnaXN0ZXIsIDEgKyBPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJ
VFN0YWNrRnJhbWUsIGNhbGxGcmFtZSkgLyBzaXplb2Yodm9pZCopKTsKKyAgICBwb2tlKEltbVB0
cihGdW5jdGlvblB0cihjdGlWTVRocm93VHJhbXBvbGluZSkudmFsdWUoKSkpOwogICAgIHJldCgp
OwogCiAjZWxpZiBFTkFCTEUoSklUX09QVElNSVpFX05BVElWRV9DQUxMKQpJbmRleDogSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBKYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3NCw1NiArMjc0LDM0IEBAIEpJ
VDo6TGFiZWwgSklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUMKICAgICBpbnQgZXhlY3V0YWJs
ZU9mZnNldFRvRnVuY3Rpb24gPSBpc0NvbnN0cnVjdCA/IE9CSkVDVF9PRkZTRVRPRihOYXRpdmVF
eGVjdXRhYmxlLCBtX2NvbnN0cnVjdG9yKSA6IE9CSkVDVF9PRkZTRVRPRihOYXRpdmVFeGVjdXRh
YmxlLCBtX2Z1bmN0aW9uKTsKIAogICAgIExhYmVsIG5hdGl2ZUNhbGxUaHVuayA9IGFsaWduKCk7
Ci0gICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHJlZ1QwKTsKLSAgICBlbWl0UHV0
VG9DYWxsRnJhbWVIZWFkZXIocmVnVDAsIFJlZ2lzdGVyRmlsZTo6UmV0dXJuUEMpOyAvLyBQdXNo
IHJldHVybiBhZGRyZXNzCiAKICAgICAvLyBMb2FkIGNhbGxlciBmcmFtZSdzIHNjb3BlIGNoYWlu
IGludG8gdGhpcyBjYWxsZnJhbWUgc28gdGhhdCB3aGF0ZXZlciB3ZSBjYWxsIGNhbgogICAgIC8v
IGdldCB0byBpdHMgZ2xvYmFsIGRhdGEuCi0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQ
dHIoUmVnaXN0ZXJGaWxlOjpDYWxsZXJGcmFtZSwgcmVnVDEpOwotICAgIGVtaXRHZXRGcm9tQ2Fs
bEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbiwgcmVnVDEsIHJlZ1QxKTsK
KyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZpbGU6OkNhbGxlckZy
YW1lLCByZWdUMCk7CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJG
aWxlOjpTY29wZUNoYWluLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhl
YWRlcihyZWdUMSwgUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluKTsKLSAgICAKIAotI2lmIENQVShY
ODZfNjQpCi0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIzMihSZWdpc3RlckZpbGU6OkFy
Z3VtZW50Q291bnQsIFg4NlJlZ2lzdGVyczo6ZWN4KTsKKyAgICBwZWVrKHJlZ1QxKTsKKyAgICBl
bWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIocmVnVDEsIFJlZ2lzdGVyRmlsZTo6UmV0dXJuUEMpOwog
Ci0gICAgLy8gQWxsb2NhdGUgc3RhY2sgc3BhY2UgZm9yIG91ciBhcmdsaXN0Ci0gICAgc3ViUHRy
KEltbTMyKHNpemVvZihBcmdMaXN0KSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICBDT01Q
SUxFX0FTU0VSVCgoc2l6ZW9mKEFyZ0xpc3QpICYgMHhmKSA9PSAwLCBBcmdMaXN0X3Nob3VsZF9i
eV8xNmJ5dGVfYWxpZ25lZCk7Ci0gICAgCi0gICAgLy8gU2V0IHVwIGFyZ3VtZW50cwotICAgIHN1
YlB0cihJbW0zMigxKSwgWDg2UmVnaXN0ZXJzOjplY3gpOyAvLyBEb24ndCBpbmNsdWRlICd0aGlz
JyBpbiBhcmdjb3VudAorI2lmIENQVShYODZfNjQpCisgICAgLy8gQ2FsbGluZyBjb252ZW50aW9u
OiAgICAgIGYoZWRpLCBlc2ksIGVkeCwgZWN4LCAuLi4pOworICAgIC8vIEhvc3QgZnVuY3Rpb24g
c2lnbmF0dXJlOiBmKEV4ZWNTdGF0ZSopOwogCi0gICAgLy8gUHVzaCBhcmdjb3VudAotICAgIHN0
b3JlUHRyKFg4NlJlZ2lzdGVyczo6ZWN4LCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBP
QkpFQ1RfT0ZGU0VUT0YoQXJnTGlzdCwgbV9hcmdDb3VudCkpKTsKKyAgICBzdWJQdHIoSW1tMzIo
MTYgLSBzaXplb2Yodm9pZCopKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCi0gICAgLy8gQ2Fs
Y3VsYXRlIHRoZSBzdGFydCBvZiB0aGUgY2FsbGZyYW1lIGhlYWRlciwgYW5kIHN0b3JlIGluIGVk
eAotICAgIGFkZFB0cihJbW0zMigtUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplICog
KGludDMyX3Qpc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBYODZSZWdpc3Rl
cnM6OmVkeCk7Ci0gICAgCi0gICAgLy8gQ2FsY3VsYXRlIHN0YXJ0IG9mIGFyZ3VtZW50cyBhcyBj
YWxsZnJhbWUgaGVhZGVyIC0gc2l6ZW9mKFJlZ2lzdGVyKSAqIGFyZ2NvdW50IChlY3gpCi0gICAg
bXVsMzIoSW1tMzIoc2l6ZW9mKFJlZ2lzdGVyKSksIFg4NlJlZ2lzdGVyczo6ZWN4LCBYODZSZWdp
c3RlcnM6OmVjeCk7Ci0gICAgc3ViUHRyKFg4NlJlZ2lzdGVyczo6ZWN4LCBYODZSZWdpc3RlcnM6
OmVkeCk7CisgICAgLy8gRXhlY1N0YXRlKgorICAgIG1vdmUoY2FsbEZyYW1lUmVnaXN0ZXIsIFg4
NlJlZ2lzdGVyczo6ZWRpKTsKIAotICAgIC8vIHB1c2ggcG9pbnRlciB0byBhcmd1bWVudHMKLSAg
ICBzdG9yZVB0cihYODZSZWdpc3RlcnM6OmVkeCwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rl
ciwgT0JKRUNUX09GRlNFVE9GKEFyZ0xpc3QsIG1fYXJncykpKTsKLSAgICAKLSAgICAvLyBBcmdM
aXN0IGlzIHBhc3NlZCBieSByZWZlcmVuY2Ugc28gaXMgc3RhY2tQb2ludGVyUmVnaXN0ZXIKLSAg
ICBtb3ZlKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBYODZSZWdpc3RlcnM6OmVjeCk7Ci0gICAgCi0g
ICAgLy8gZWR4IGN1cnJlbnRseSBwb2ludHMgdG8gdGhlIGZpcnN0IGFyZ3VtZW50LCBlZHgtc2l6
ZW9mKFJlZ2lzdGVyKSBwb2ludHMgdG8gJ3RoaXMnCi0gICAgbG9hZFB0cihBZGRyZXNzKFg4NlJl
Z2lzdGVyczo6ZWR4LCAtKGludDMyX3Qpc2l6ZW9mKFJlZ2lzdGVyKSksIFg4NlJlZ2lzdGVyczo6
ZWR4KTsKLSAgICAKLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZp
bGU6OkNhbGxlZSwgWDg2UmVnaXN0ZXJzOjplc2kpOworICAgIC8vIGNhbGwgdGhlIGZ1bmN0aW9u
CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpDYWxsZWUs
IFg4NlJlZ2lzdGVyczo6cjkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhYODZSZWdpc3RlcnM6OnI5
LCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSksIFg4NlJlZ2lzdGVy
czo6cjkpOworICAgIG1vdmUocmVnVDAsIGNhbGxGcmFtZVJlZ2lzdGVyKTsgLy8gRWFnZXJseSBy
ZXN0b3JlIGNhbGxlciBmcmFtZSByZWdpc3RlciB0byBhdm9pZCBsb2FkaW5nIGZyb20gc3RhY2su
CisgICAgY2FsbChBZGRyZXNzKFg4NlJlZ2lzdGVyczo6cjksIGV4ZWN1dGFibGVPZmZzZXRUb0Z1
bmN0aW9uKSk7CiAKLSAgICBtb3ZlKGNhbGxGcmFtZVJlZ2lzdGVyLCBYODZSZWdpc3RlcnM6OmVk
aSk7IAorICAgIGFkZFB0cihJbW0zMigxNiAtIHNpemVvZih2b2lkKikpLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CiAKLSAgICBsb2FkUHRyKEFkZHJlc3MoWDg2UmVnaXN0ZXJzOjplc2ksIE9CSkVD
VF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2V4ZWN1dGFibGUpKSwgWDg2UmVnaXN0ZXJzOjpyOSk7
Ci0gICAgY2FsbChBZGRyZXNzKFg4NlJlZ2lzdGVyczo6cjksIGV4ZWN1dGFibGVPZmZzZXRUb0Z1
bmN0aW9uKSk7Ci0gICAgCi0gICAgYWRkUHRyKEltbTMyKHNpemVvZihBcmdMaXN0KSksIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKICNlbGlmIENQVShYODYpCi0gICAgZW1pdEdldEZyb21DYWxsRnJh
bWVIZWFkZXIzMihSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnQsIHJlZ1QwKTsKLQogICAgIC8q
IFdlIGhhdmUgdHdvIHN0cnVjdHMgdGhhdCB3ZSB1c2UgdG8gZGVzY3JpYmUgdGhlIHN0YWNrZnJh
bWUgd2Ugc2V0IHVwIGZvciBvdXIKICAgICAgKiBjYWxsIHRvIG5hdGl2ZSBjb2RlLiAgTmF0aXZl
Q2FsbEZyYW1lU3RydWN0dXJlIGRlc2NyaWJlcyB0aGUgaG93IHdlIHNldCB1cCB0aGUgc3RhY2sK
ICAgICAgKiBpbiBhZHZhbmNlIG9mIHRoZSBjYWxsLiAgTmF0aXZlRnVuY3Rpb25DYWxsZWVTaWdu
YXR1cmUgZGVzY3JpYmVzIHRoZSBjYWxsZnJhbWUKQEAgLTMzNCw4MCArMzEyLDM1IEBAIEpJVDo6
TGFiZWwgSklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUMKICAgICAgKi8KICNpZiBDT01QSUxF
UihNU1ZDKSB8fCBPUyhMSU5VWCkKICAgICBzdHJ1Y3QgTmF0aXZlQ2FsbEZyYW1lU3RydWN0dXJl
IHsKLSAgICAgIC8vICBDYWxsRnJhbWUqIGNhbGxGcmFtZTsgLy8gcGFzc2VkIGluIEVEWAotICAg
ICAgICBKU09iamVjdCogY2FsbGVlOwotICAgICAgICBKU1ZhbHVlIHRoaXNWYWx1ZTsKLSAgICAg
ICAgQXJnTGlzdCogYXJnUG9pbnRlcjsKLSAgICAgICAgQXJnTGlzdCBhcmdzOworICAgIC8vICBD
YWxsRnJhbWUqIGNhbGxGcmFtZTsgLy8gcGFzc2VkIGluIEVEWAogICAgICAgICBKU1ZhbHVlIHJl
c3VsdDsKICAgICB9OwogICAgIHN0cnVjdCBOYXRpdmVGdW5jdGlvbkNhbGxlZVNpZ25hdHVyZSB7
Ci0gICAgICAgIEpTT2JqZWN0KiBjYWxsZWU7Ci0gICAgICAgIEpTVmFsdWUgdGhpc1ZhbHVlOwot
ICAgICAgICBBcmdMaXN0KiBhcmdQb2ludGVyOwogICAgIH07CiAjZWxzZQogICAgIHN0cnVjdCBO
YXRpdmVDYWxsRnJhbWVTdHJ1Y3R1cmUgewogICAgICAgLy8gIENhbGxGcmFtZSogY2FsbEZyYW1l
OyAvLyBwYXNzZWQgaW4gRUNYCi0gICAgICAvLyAgSlNPYmplY3QqIGNhbGxlZTsgLy8gcGFzc2Vk
IGluIEVEWAotICAgICAgICBKU1ZhbHVlIHRoaXNWYWx1ZTsKLSAgICAgICAgQXJnTGlzdCogYXJn
UG9pbnRlcjsKLSAgICAgICAgQXJnTGlzdCBhcmdzOwogICAgIH07CiAgICAgc3RydWN0IE5hdGl2
ZUZ1bmN0aW9uQ2FsbGVlU2lnbmF0dXJlIHsKLSAgICAgICAgSlNWYWx1ZSB0aGlzVmFsdWU7Ci0g
ICAgICAgIEFyZ0xpc3QqIGFyZ1BvaW50ZXI7CiAgICAgfTsKICNlbmRpZgogICAgIGNvbnN0IGlu
dCBOYXRpdmVDYWxsRnJhbWVTaXplID0gKHNpemVvZihOYXRpdmVDYWxsRnJhbWVTdHJ1Y3R1cmUp
ICsgMTUpICYgfjE1OwogICAgIC8vIEFsbG9jYXRlIHN5c3RlbSBzdGFjayBmcmFtZQogICAgIHN1
YlB0cihJbW0zMihOYXRpdmVDYWxsRnJhbWVTaXplKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwog
Ci0gICAgLy8gU2V0IHVwIGFyZ3VtZW50cwotICAgIHN1YlB0cihJbW0zMigxKSwgcmVnVDApOyAv
LyBEb24ndCBpbmNsdWRlICd0aGlzJyBpbiBhcmdjb3VudAotCi0gICAgLy8gcHVzaCBhcmdjb3Vu
dAotICAgIHN0b3JlUHRyKHJlZ1QwLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBPQkpF
Q1RfT0ZGU0VUT0YoTmF0aXZlQ2FsbEZyYW1lU3RydWN0dXJlLCBhcmdzKSArIE9CSkVDVF9PRkZT
RVRPRihBcmdMaXN0LCBtX2FyZ0NvdW50KSkpOwotICAgIAotICAgIC8vIENhbGN1bGF0ZSB0aGUg
c3RhcnQgb2YgdGhlIGNhbGxmcmFtZSBoZWFkZXIsIGFuZCBzdG9yZSBpbiByZWdUMQotICAgIGFk
ZFB0cihJbW0zMigtUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplICogKGludClzaXpl
b2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QxKTsKLSAgICAKLSAgICAvLyBD
YWxjdWxhdGUgc3RhcnQgb2YgYXJndW1lbnRzIGFzIGNhbGxmcmFtZSBoZWFkZXIgLSBzaXplb2Yo
UmVnaXN0ZXIpICogYXJnY291bnQgKHJlZ1QwKQotICAgIG11bDMyKEltbTMyKHNpemVvZihSZWdp
c3RlcikpLCByZWdUMCwgcmVnVDApOwotICAgIHN1YlB0cihyZWdUMCwgcmVnVDEpOwotICAgIHN0
b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBPQkpFQ1RfT0ZGU0VU
T0YoTmF0aXZlQ2FsbEZyYW1lU3RydWN0dXJlLCBhcmdzKSArIE9CSkVDVF9PRkZTRVRPRihBcmdM
aXN0LCBtX2FyZ3MpKSk7Ci0KLSAgICAvLyBBcmdMaXN0IGlzIHBhc3NlZCBieSByZWZlcmVuY2Ug
c28gaXMgc3RhY2tQb2ludGVyUmVnaXN0ZXIgKyA0ICogc2l6ZW9mKFJlZ2lzdGVyKQotICAgIGFk
ZFB0cihJbW0zMihPQkpFQ1RfT0ZGU0VUT0YoTmF0aXZlQ2FsbEZyYW1lU3RydWN0dXJlLCBhcmdz
KSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIEFk
ZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIE9CSkVDVF9PRkZTRVRPRihOYXRpdmVDYWxsRnJh
bWVTdHJ1Y3R1cmUsIGFyZ1BvaW50ZXIpKSk7Ci0KLSAgICAvLyByZWdUMSBjdXJyZW50bHkgcG9p
bnRzIHRvIHRoZSBmaXJzdCBhcmd1bWVudCwgcmVnVDEgLSBzaXplb2YoUmVnaXN0ZXIpIHBvaW50
cyB0byAndGhpcycKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIC0oaW50KXNpemVvZihSZWdp
c3RlcikpLCByZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3Moc3RhY2tQb2ludGVy
UmVnaXN0ZXIsIE9CSkVDVF9PRkZTRVRPRihOYXRpdmVDYWxsRnJhbWVTdHJ1Y3R1cmUsIHRoaXNW
YWx1ZSkpKTsKLQogI2lmIENPTVBJTEVSKE1TVkMpIHx8IE9TKExJTlVYKQotICAgIC8vIEFyZ0xp
c3QgaXMgcGFzc2VkIGJ5IHJlZmVyZW5jZSBzbyBpcyBzdGFja1BvaW50ZXJSZWdpc3RlciArIDQg
KiBzaXplb2YoUmVnaXN0ZXIpCi0gICAgYWRkUHRyKEltbTMyKE9CSkVDVF9PRkZTRVRPRihOYXRp
dmVDYWxsRnJhbWVTdHJ1Y3R1cmUsIHJlc3VsdCkpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgWDg2
UmVnaXN0ZXJzOjplY3gpOwotCi0gICAgLy8gUGxhbnQgY2FsbGVlCi0gICAgZW1pdEdldEZyb21D
YWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpDYWxsZWUsIFg4NlJlZ2lzdGVyczo6ZWF4
KTsKLSAgICBzdG9yZVB0cihYODZSZWdpc3RlcnM6OmVheCwgQWRkcmVzcyhzdGFja1BvaW50ZXJS
ZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKE5hdGl2ZUNhbGxGcmFtZVN0cnVjdHVyZSwgY2FsbGVl
KSkpOwotCiAgICAgLy8gUGxhbnQgY2FsbGZyYW1lCiAgICAgbW92ZShjYWxsRnJhbWVSZWdpc3Rl
ciwgWDg2UmVnaXN0ZXJzOjplZHgpOwogCiAgICAgbG9hZFB0cihBZGRyZXNzKFg4NlJlZ2lzdGVy
czo6ZWF4LCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSksIFg4NlJl
Z2lzdGVyczo6ZWJ4KTsKLSAgICBjYWxsKEFkZHJlc3MoWDg2UmVnaXN0ZXJzOjplYngsIGV4ZWN1
dGFibGVPZmZzZXRUb0Z1bmN0aW9uKSk7CisgICAgbW92ZShyZWdUMCwgY2FsbEZyYW1lUmVnaXN0
ZXIpOworICAgIGNhbGwoQWRkcmVzcyhYODZSZWdpc3RlcnM6OmVieCwgZXhlY3V0YWJsZU9mZnNl
dFRvRnVuY3Rpb24pOwogCiAgICAgLy8gSlNWYWx1ZSBpcyBhIG5vbi1QT0QgdHlwZQogICAgIGxv
YWRQdHIoQWRkcmVzcyhYODZSZWdpc3RlcnM6OmVheCksIFg4NlJlZ2lzdGVyczo6ZWF4KTsKICNl
bHNlCi0gICAgLy8gUGxhbnQgY2FsbGVlCi0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQ
dHIoUmVnaXN0ZXJGaWxlOjpDYWxsZWUsIFg4NlJlZ2lzdGVyczo6ZWR4KTsKLQotICAgIC8vIFBs
YW50IGNhbGxmcmFtZQotICAgIG1vdmUoY2FsbEZyYW1lUmVnaXN0ZXIsIFg4NlJlZ2lzdGVyczo6
ZWN4KTsKICAgICBsb2FkUHRyKEFkZHJlc3MoWDg2UmVnaXN0ZXJzOjplZHgsIE9CSkVDVF9PRkZT
RVRPRihKU0Z1bmN0aW9uLCBtX2V4ZWN1dGFibGUpKSwgWDg2UmVnaXN0ZXJzOjplYngpOworICAg
IG1vdmUocmVnVDAsIGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBjYWxsKEFkZHJlc3MoWDg2UmVn
aXN0ZXJzOjplYngsIGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uKSk7CiAjZW5kaWYKIApAQCAt
NDE2LDY0ICszNDksMjQgQEAgSklUOjpMYWJlbCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZl
QwogICAgIGFkZFB0cihJbW0zMihOYXRpdmVDYWxsRnJhbWVTaXplIC0gc2l6ZW9mKE5hdGl2ZUZ1
bmN0aW9uQ2FsbGVlU2lnbmF0dXJlKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogI2VsaWYg
Q1BVKEFSTSkKLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjMyKFJlZ2lzdGVyRmlsZTo6
QXJndW1lbnRDb3VudCwgcmVnVDApOwotCiAgICAgLy8gQWxsb2NhdGUgc3RhY2sgc3BhY2UgZm9y
IG91ciBhcmdsaXN0CiAgICAgQ09NUElMRV9BU1NFUlQoKHNpemVvZihBcmdMaXN0KSAmIDB4Nykg
PT0gMCwgQXJnTGlzdF9zaG91bGRfYnlfOGJ5dGVfYWxpZ25lZCk7CiAgICAgc3ViUHRyKEltbTMy
KHNpemVvZihBcmdMaXN0KSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAotICAgIC8vIFNldCB1
cCBhcmd1bWVudHMKLSAgICBzdWJQdHIoSW1tMzIoMSksIHJlZ1QwKTsgLy8gRG9uJ3QgaW5jbHVk
ZSAndGhpcycgaW4gYXJnY291bnQKLQotICAgIC8vIFB1c2ggYXJnY291bnQKLSAgICBzdG9yZVB0
cihyZWdUMCwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKEFy
Z0xpc3QsIG1fYXJnQ291bnQpKSk7Ci0KLSAgICAvLyBDYWxjdWxhdGUgdGhlIHN0YXJ0IG9mIHRo
ZSBjYWxsZnJhbWUgaGVhZGVyLCBhbmQgc3RvcmUgaW4gcmVnVDEKLSAgICBtb3ZlKGNhbGxGcmFt
ZVJlZ2lzdGVyLCByZWdUMSk7Ci0gICAgc3ViMzIoSW1tMzIoUmVnaXN0ZXJGaWxlOjpDYWxsRnJh
bWVIZWFkZXJTaXplICogKGludDMyX3Qpc2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QxKTsKLQotICAg
IC8vIENhbGN1bGF0ZSBzdGFydCBvZiBhcmd1bWVudHMgYXMgY2FsbGZyYW1lIGhlYWRlciAtIHNp
emVvZihSZWdpc3RlcikgKiBhcmdjb3VudCAocmVnVDEpCi0gICAgbXVsMzIoSW1tMzIoc2l6ZW9m
KFJlZ2lzdGVyKSksIHJlZ1QwLCByZWdUMCk7Ci0gICAgc3ViUHRyKHJlZ1QwLCByZWdUMSk7Ci0K
LSAgICAvLyBwdXNoIHBvaW50ZXIgdG8gYXJndW1lbnRzCi0gICAgc3RvcmVQdHIocmVnVDEsIEFk
ZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIE9CSkVDVF9PRkZTRVRPRihBcmdMaXN0LCBtX2Fy
Z3MpKSk7Ci0KLSAgICAvLyByZWdUMSBjdXJyZW50bHkgcG9pbnRzIHRvIHRoZSBmaXJzdCBhcmd1
bWVudCwgcmVnVDEtc2l6ZW9mKFJlZ2lzdGVyKSBwb2ludHMgdG8gJ3RoaXMnCi0KICNpZiBPUyhX
SU5DRSkKLSAgICAvLyBTZXR1cCBhcmczOgotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgLShp
bnQzMl90KXNpemVvZihSZWdpc3RlcikpLCBBUk1SZWdpc3RlcnM6OnIzKTsKLQotICAgIC8vIFNl
dHVwIGFyZzI6Ci0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxl
OjpDYWxsZWUsIHJlZ1QyKTsKLQogICAgIC8vIFNldHVwIGFyZzE6CiAgICAgbW92ZShjYWxsRnJh
bWVSZWdpc3RlciwgcmVnVDEpOwogCi0gICAgLy8gU2V0dXAgYXJnMDoKLSAgICBtb3ZlKHN0YWNr
UG9pbnRlclJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgc3ViUHRyKEltbTMyKHNpemVvZihSZWdpc3Rl
cikpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgc3RvcmVQdHIocmVnVDAsIEFkZHJlc3Mo
c3RhY2tQb2ludGVyUmVnaXN0ZXIpKTsKLQogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgT0JK
RUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fZXhlY3V0YWJsZSkpLCByZWdUMyk7CisgICAgbW92
ZShyZWdUMCwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIGNhbGwoQWRkcmVzcyhyZWdUMywgZXhl
Y3V0YWJsZU9mZnNldFRvRnVuY3Rpb24pKTsKIAogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCks
IHJlZ1QwKTsKIAogICAgIGFkZFB0cihJbW0zMihzaXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9mKEFy
Z0xpc3QpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogI2Vsc2UgLy8gT1MoV0lOQ0UpCi0gICAg
Ly8gU2V0dXAgYXJnMzoKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIC0oaW50MzJfdClzaXpl
b2YoUmVnaXN0ZXIpKSwgcmVnVDIpOwotCi0gICAgLy8gU2V0dXAgYXJnMjoKLSAgICBlbWl0R2V0
RnJvbUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZpbGU6OkNhbGxlZSwgcmVnVDEpOwotCiAg
ICAgLy8gU2V0dXAgYXJnMToKLSAgICBtb3ZlKGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7Ci0K
LSAgICAvLyBTZXR1cCBhcmc0OiBUaGlzIGlzIGEgcGxhaW4gaGFjawotICAgIG1vdmUoc3RhY2tQ
b2ludGVyUmVnaXN0ZXIsIEFSTVJlZ2lzdGVyczo6cjMpOworICAgIHN3YXAoY2FsbEZyYW1lUmVn
aXN0ZXIsIHJlZ1QwKTsKIAogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgT0JKRUNUX09GRlNF
VE9GKEpTRnVuY3Rpb24sIG1fZXhlY3V0YWJsZSkpLCByZWdUMyk7CiAgICAgY2FsbChBZGRyZXNz
KHJlZ1QzLCBleGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlvbikpOwpAQCAtNDgyLDQ4ICszNzUsMjAg
QEAgSklUOjpMYWJlbCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQwogI2VuZGlmIC8vIE9T
KFdJTkNFKQogCiAjZWxpZiBDUFUoTUlQUykKLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRl
cjMyKFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCwgcmVnVDApOwotCiAgICAgLy8gQWxsb2Nh
dGUgc3RhY2sgc3BhY2UgZm9yIG91ciBhcmdsaXN0CiAgICAgQ09NUElMRV9BU1NFUlQoIShzaXpl
b2YoQXJnTGlzdCkgJiAweDcpLCBBcmdMaXN0X3Nob3VsZF9ieV84Ynl0ZV9hbGlnbmVkKTsKICAg
ICBzdWJQdHIoSW1tMzIoc2l6ZW9mKEFyZ0xpc3QpICsgMjQpLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CiAKLSAgICAvLyBTZXQgdXAgYXJndW1lbnRzCi0gICAgc3ViUHRyKEltbTMyKDEpLCByZWdU
MCk7IC8vIERvbid0IGluY2x1ZGUgJ3RoaXMnIGluIGFyZ2NvdW50Ci0KLSAgICAvLyBQdXNoIGFy
Z2NvdW50IHRvIDI0ICsgb2Zmc2V0KCRzcCkKLSAgICBzdG9yZVB0cihyZWdUMCwgQWRkcmVzcyhz
dGFja1BvaW50ZXJSZWdpc3RlciwgMjQgKyBPQkpFQ1RfT0ZGU0VUT0YoQXJnTGlzdCwgbV9hcmdD
b3VudCkpKTsKLQotICAgIC8vIENhbGN1bGF0ZSB0aGUgc3RhcnQgb2YgdGhlIGNhbGxmcmFtZSBo
ZWFkZXIsIGFuZCBzdG9yZSBpbiByZWdUMQotICAgIG1vdmUoY2FsbEZyYW1lUmVnaXN0ZXIsIHJl
Z1QxKTsKLSAgICBzdWIzMihJbW0zMihSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUg
KiAoaW50MzJfdClzaXplb2YoUmVnaXN0ZXIpKSwgcmVnVDEpOwotCi0gICAgLy8gQ2FsY3VsYXRl
IHN0YXJ0IG9mIGFyZ3VtZW50cyBhcyBjYWxsZnJhbWUgaGVhZGVyIC0gc2l6ZW9mKFJlZ2lzdGVy
KSAqIGFyZ2NvdW50IChyZWdUMSkKLSAgICBtdWwzMihJbW0zMihzaXplb2YoUmVnaXN0ZXIpKSwg
cmVnVDAsIHJlZ1QwKTsKLSAgICBzdWJQdHIocmVnVDAsIHJlZ1QxKTsKLQotICAgIC8vIHB1c2gg
cG9pbnRlciB0byBhcmd1bWVudHMgdG8gMjQgKyBvZmZzZXQoJHNwKQotICAgIHN0b3JlUHRyKHJl
Z1QxLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCAyNCArIE9CSkVDVF9PRkZTRVRPRihB
cmdMaXN0LCBtX2FyZ3MpKSk7Ci0KLSAgICAvLyBTZXR1cCBhcmczOiByZWdUMSBjdXJyZW50bHkg
cG9pbnRzIHRvIHRoZSBmaXJzdCBhcmd1bWVudCwgcmVnVDEtc2l6ZW9mKFJlZ2lzdGVyKSBwb2lu
dHMgdG8gJ3RoaXMnCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCAtKGludDMyX3Qpc2l6ZW9m
KFJlZ2lzdGVyKSksIE1JUFNSZWdpc3RlcnM6OmEzKTsKLQotICAgIC8vIFNldHVwIGFyZzI6Ci0g
ICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpDYWxsZWUsIE1J
UFNSZWdpc3RlcnM6OmEyKTsKLQogICAgIC8vIFNldHVwIGFyZzE6CiAgICAgbW92ZShjYWxsRnJh
bWVSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6YTEpOwogCi0gICAgLy8gU2V0dXAgYXJnNDogQXJn
TGlzdCBpcyBwYXNzZWQgYnkgcmVmZXJlbmNlLiAgQXQgMTYoJHNwKSwgc3RvcmUgKCRzcCArIDI0
KQotICAgIGFkZFB0cihJbW0zMigyNCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdUMik7Ci0g
ICAgc3RvcmVQdHIocmVnVDIsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIDE2KSk7Ci0K
ICAgICAvLyBTZXR1cCBhcmcwIGFzIDIwKCRzcCkgdG8gaG9sZCB0aGUgcmV0dXJuZWQgc3RydWN0
dXJlLgogICAgIEFTU0VSVChzaXplb2YoSlNWYWx1ZSkgPT0gNCk7CiAgICAgYWRkUHRyKEltbTMy
KDIwKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6OmEwKTsKIAogICAgIC8v
IENhbGwKICAgICBsb2FkUHRyKEFkZHJlc3MoTUlQU1JlZ2lzdGVyczo6YTIsIE9CSkVDVF9PRkZT
RVRPRihKU0Z1bmN0aW9uLCBtX2V4ZWN1dGFibGUpKSwgcmVnVDIpOworICAgIG1vdmUocmVnVDAs
IGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBjYWxsKEFkZHJlc3MocmVnVDIsIGV4ZWN1dGFibGVP
ZmZzZXRUb0Z1bmN0aW9uKSk7CiAKICAgICAvLyBHZXQgcmV0dXJuZWQgdmFsdWUgZnJvbSAwKCR2
MCkgd2hpY2ggaXMgdGhlIHNhbWUgYXMgMjAoJHNwKQpAQCAtNTQyLDI2ICs0MDcsMTcgQEAgSklU
OjpMYWJlbCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQwogICAgIGxvYWRQdHIoJihnbG9i
YWxEYXRhLT5leGNlcHRpb24pLCByZWdUMik7CiAgICAgSnVtcCBleGNlcHRpb25IYW5kbGVyID0g
YnJhbmNoVGVzdFB0cihOb25aZXJvLCByZWdUMik7CiAKLSAgICAvLyBHcmFiIHRoZSByZXR1cm4g
YWRkcmVzcy4KLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZpbGU6
OlJldHVyblBDLCByZWdUMSk7Ci0gICAgCi0gICAgLy8gUmVzdG9yZSBvdXIgY2FsbGVyJ3MgInIi
LgotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6Q2FsbGVy
RnJhbWUsIGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAKICAgICAvLyBSZXR1cm4uCi0gICAgcmVz
dG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4ocmVnVDEpOwogICAgIHJldCgpOwogCiAgICAg
Ly8gSGFuZGxlIGFuIGV4Y2VwdGlvbgogICAgIGV4Y2VwdGlvbkhhbmRsZXIubGluayh0aGlzKTsK
ICAgICAvLyBHcmFiIHRoZSByZXR1cm4gYWRkcmVzcy4KLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFt
ZUhlYWRlclB0cihSZWdpc3RlckZpbGU6OlJldHVyblBDLCByZWdUMSk7CisgICAgcGVlayhyZWdU
MSk7CiAgICAgbW92ZShJbW1QdHIoJmdsb2JhbERhdGEtPmV4Y2VwdGlvbkxvY2F0aW9uKSwgcmVn
VDIpOwogICAgIHN0b3JlUHRyKHJlZ1QxLCByZWdUMik7Ci0gICAgbW92ZShJbW1QdHIoRnVuY3Rp
b25QdHIoY3RpVk1UaHJvd1RyYW1wb2xpbmUpLnZhbHVlKCkpLCByZWdUMik7Ci0gICAgZW1pdEdl
dEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpDYWxsZXJGcmFtZSwgY2FsbEZy
YW1lUmVnaXN0ZXIpOwotICAgIHBva2UoY2FsbEZyYW1lUmVnaXN0ZXIsIE9CSkVDVF9PRkZTRVRP
RihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgY2FsbEZyYW1lKSAvIHNpemVvZiAodm9pZCopKTsKLSAg
ICByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihyZWdUMik7CisgICAgcG9rZShjYWxs
RnJhbWVSZWdpc3RlciwgMSArIE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwg
Y2FsbEZyYW1lKSAvIHNpemVvZiAodm9pZCopKTsKKyAgICBwb2tlKEltbVB0cihGdW5jdGlvblB0
cihjdGlWTVRocm93VHJhbXBvbGluZSkudmFsdWUoKSkpOwogICAgIHJldCgpOwogCiAgICAgcmV0
dXJuIG5hdGl2ZUNhbGxUaHVuazsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNp
b24gNjAzNDEpCisrKyBKYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xODA4LDcgKzE4MDgsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkKiwgb3Bf
Y2FsbF9qaXRDCiAgICAgQVNTRVJUKHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5jYWxsZWUoKS0+Z2V0
Q2FsbERhdGEoY2FsbERhdGEpID09IENhbGxUeXBlSlMpOwogI2VuZGlmCiAKLSAgICBKU0Z1bmN0
aW9uKiBmdW5jdGlvbiA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5jYWxsZWUoKTsKKyAgICBKU0Z1
bmN0aW9uKiBmdW5jdGlvbiA9IGFzRnVuY3Rpb24oc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNhbGxl
ZSgpKTsKICAgICBBU1NFUlQoIWZ1bmN0aW9uLT5pc0hvc3RGdW5jdGlvbigpKTsKICAgICBGdW5j
dGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBmdW5jdGlvbi0+anNFeGVjdXRhYmxlKCk7CiAg
ICAgU2NvcGVDaGFpbk5vZGUqIGNhbGxEYXRhU2NvcGVDaGFpbiA9IGZ1bmN0aW9uLT5zY29wZSgp
Lm5vZGUoKTsKQEAgLTE4MjMsMTAgKzE4MjMsMTAgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9p
ZCosIG9wX2NvbnN0cnVjdAogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIENvbnN0cnVjdERh
dGEgY29uc3RydWN0RGF0YTsKLSAgICBBU1NFUlQoc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNhbGxl
ZSgpLT5nZXRDb25zdHJ1Y3REYXRhKGNvbnN0cnVjdERhdGEpID09IENvbnN0cnVjdFR5cGVKUyk7
CisgICAgQVNTRVJUKGFzRnVuY3Rpb24oc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNhbGxlZSgpKS0+
Z2V0Q29uc3RydWN0RGF0YShjb25zdHJ1Y3REYXRhKSA9PSBDb25zdHJ1Y3RUeXBlSlMpOwogI2Vu
ZGlmCiAKLSAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5j
YWxsZWUoKTsKKyAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGFzRnVuY3Rpb24oc3RhY2tGcmFt
ZS5jYWxsRnJhbWUtPmNhbGxlZSgpKTsKICAgICBBU1NFUlQoIWZ1bmN0aW9uLT5pc0hvc3RGdW5j
dGlvbigpKTsKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBmdW5jdGlvbi0+
anNFeGVjdXRhYmxlKCk7CiAgICAgU2NvcGVDaGFpbk5vZGUqIGNhbGxEYXRhU2NvcGVDaGFpbiA9
IGZ1bmN0aW9uLT5zY29wZSgpLm5vZGUoKTsKQEAgLTE4NDAsMTAgKzE4NDAsMTAgQEAgREVGSU5F
X1NUVUJfRlVOQ1RJT04odm9pZCosIG9wX2NhbGxfYXJpdAogICAgIFNUVUJfSU5JVF9TVEFDS19G
UkFNRShzdGFja0ZyYW1lKTsKIAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFt
ZS5jYWxsRnJhbWU7Ci0gICAgSlNGdW5jdGlvbiogY2FsbGVlID0gY2FsbEZyYW1lLT5jYWxsZWUo
KTsKKyAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBhc0Z1bmN0aW9uKGNhbGxGcmFtZS0+Y2FsbGVl
KCkpOwogICAgIEFTU0VSVCghY2FsbGVlLT5pc0hvc3RGdW5jdGlvbigpKTsKICAgICBDb2RlQmxv
Y2sqIG5ld0NvZGVCbG9jayA9ICZjYWxsZWUtPmpzRXhlY3V0YWJsZSgpLT5nZW5lcmF0ZWRCeXRl
Y29kZUZvckNhbGwoKTsKLSAgICBpbnQgYXJnQ291bnQgPSBjYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnQoKTsKKyAgICBpbnQgYXJnQ291bnQgPSBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKCk7CiAKICAgICBBU1NFUlQoYXJnQ291bnQgIT0gbmV3Q29kZUJsb2NrLT5tX251bVBh
cmFtZXRlcnMpOwogCkBAIC0xODg0LDcgKzE4ODQsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2
b2lkKiwgb3BfY2FsbF9hcml0CiAKICAgICBjYWxsRnJhbWUgPSBDYWxsRnJhbWU6OmNyZWF0ZShy
KTsKICAgICBjYWxsRnJhbWUtPnNldENhbGxlckZyYW1lKG9sZENhbGxGcmFtZSk7Ci0gICAgY2Fs
bEZyYW1lLT5zZXRBcmd1bWVudENvdW50KGFyZ0NvdW50KTsKKyAgICBjYWxsRnJhbWUtPnNldEFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGFyZ0NvdW50KTsKICAgICBjYWxsRnJhbWUtPnNldENh
bGxlZShjYWxsZWUpOwogICAgIGNhbGxGcmFtZS0+c2V0U2NvcGVDaGFpbihjYWxsZWUtPnNjb3Bl
KCkubm9kZSgpKTsKIApAQCAtMTg5NywxMCArMTg5NywxMCBAQCBERUZJTkVfU1RVQl9GVU5DVElP
Tih2b2lkKiwgb3BfY29uc3RydWN0CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJh
bWUpOwogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsK
LSAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBjYWxsRnJhbWUtPmNhbGxlZSgpOworICAgIEpTRnVu
Y3Rpb24qIGNhbGxlZSA9IGFzRnVuY3Rpb24oY2FsbEZyYW1lLT5jYWxsZWUoKSk7CiAgICAgQVNT
RVJUKCFjYWxsZWUtPmlzSG9zdEZ1bmN0aW9uKCkpOwogICAgIENvZGVCbG9jayogbmV3Q29kZUJs
b2NrID0gJmNhbGxlZS0+anNFeGVjdXRhYmxlKCktPmdlbmVyYXRlZEJ5dGVjb2RlRm9yQ29uc3Ry
dWN0KCk7Ci0gICAgaW50IGFyZ0NvdW50ID0gY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCk7Cisg
ICAgaW50IGFyZ0NvdW50ID0gY2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygp
OwogCiAgICAgQVNTRVJUKGFyZ0NvdW50ICE9IG5ld0NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJz
KTsKIApAQCAtMTk0MSw3ICsxOTQxLDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCosIG9w
X2NvbnN0cnVjdAogCiAgICAgY2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpjcmVhdGUocik7CiAgICAg
Y2FsbEZyYW1lLT5zZXRDYWxsZXJGcmFtZShvbGRDYWxsRnJhbWUpOwotICAgIGNhbGxGcmFtZS0+
c2V0QXJndW1lbnRDb3VudChhcmdDb3VudCk7CisgICAgY2FsbEZyYW1lLT5zZXRBcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyhhcmdDb3VudCk7CiAgICAgY2FsbEZyYW1lLT5zZXRDYWxsZWUoY2Fs
bGVlKTsKICAgICBjYWxsRnJhbWUtPnNldFNjb3BlQ2hhaW4oY2FsbGVlLT5zY29wZSgpLm5vZGUo
KSk7CiAKQEAgLTE5NTQsNyArMTk1NCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQqLCB2
bV9sYXp5TGlua0MKIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CiAg
ICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKLSAgICBKU0Z1
bmN0aW9uKiBjYWxsZWUgPSBjYWxsRnJhbWUtPmNhbGxlZSgpOworICAgIEpTRnVuY3Rpb24qIGNh
bGxlZSA9IGFzRnVuY3Rpb24oY2FsbEZyYW1lLT5jYWxsZWUoKSk7CiAgICAgRXhlY3V0YWJsZUJh
c2UqIGV4ZWN1dGFibGUgPSBjYWxsZWUtPmV4ZWN1dGFibGUoKTsKICAgICBKSVRDb2RlJiBqaXRD
b2RlID0gZXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKTsKICAgICAKQEAgLTE5
NjYsNyArMTk2Niw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQqLCB2bV9sYXp5TGlua0MK
ICAgICBpZiAoIWNhbGxMaW5rSW5mby0+c2Vlbk9uY2UoKSkKICAgICAgICAgY2FsbExpbmtJbmZv
LT5zZXRTZWVuKCk7CiAgICAgZWxzZQotICAgICAgICBKSVQ6OmxpbmtDYWxsKGNhbGxlZSwgc3Rh
Y2tGcmFtZS5jYWxsRnJhbWUtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpLCBjb2RlQmxvY2ss
IGppdENvZGUsIGNhbGxMaW5rSW5mbywgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCksIHN0YWNr
RnJhbWUuZ2xvYmFsRGF0YSk7CisgICAgICAgIEpJVDo6bGlua0NhbGwoY2FsbGVlLCBzdGFja0Zy
YW1lLmNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCksIGNvZGVCbG9jaywgaml0
Q29kZSwgY2FsbExpbmtJbmZvLCBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KCksIHN0YWNrRnJhbWUuZ2xvYmFsRGF0YSk7CiAKICAgICByZXR1cm4gaml0Q29kZS5hZGRyZXNz
Rm9yQ2FsbCgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiB9CkBAIC0xOTc1LDcgKzE5NzUsNyBAQCBE
RUZJTkVfU1RVQl9GVU5DVElPTih2b2lkKiwgdm1fbGF6eUxpbmtDCiB7CiAgICAgU1RVQl9JTklU
X1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3Rh
Y2tGcmFtZS5jYWxsRnJhbWU7Ci0gICAgSlNGdW5jdGlvbiogY2FsbGVlID0gY2FsbEZyYW1lLT5j
YWxsZWUoKTsKKyAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBhc0Z1bmN0aW9uKGNhbGxGcmFtZS0+
Y2FsbGVlKCkpOwogICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gY2FsbGVlLT5leGVj
dXRhYmxlKCk7CiAgICAgSklUQ29kZSYgaml0Q29kZSA9IGV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJ
VENvZGVGb3JDb25zdHJ1Y3QoKTsKICAgICAKQEAgLTE5ODcsNyArMTk4Nyw3IEBAIERFRklORV9T
VFVCX0ZVTkNUSU9OKHZvaWQqLCB2bV9sYXp5TGlua0MKICAgICBpZiAoIWNhbGxMaW5rSW5mby0+
c2Vlbk9uY2UoKSkKICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRTZWVuKCk7CiAgICAgZWxzZQot
ICAgICAgICBKSVQ6OmxpbmtDb25zdHJ1Y3QoY2FsbGVlLCBzdGFja0ZyYW1lLmNhbGxGcmFtZS0+
Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCksIGNvZGVCbG9jaywgaml0Q29kZSwgY2FsbExpbmtJ
bmZvLCBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSwgc3RhY2tGcmFtZS5nbG9iYWxEYXRhKTsK
KyAgICAgICAgSklUOjpsaW5rQ29uc3RydWN0KGNhbGxlZSwgc3RhY2tGcmFtZS5jYWxsRnJhbWUt
PmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpLCBjb2RlQmxvY2ssIGppdENvZGUsIGNhbGxMaW5r
SW5mbywgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpLCBzdGFja0ZyYW1l
Lmdsb2JhbERhdGEpOwogCiAgICAgcmV0dXJuIGppdENvZGUuYWRkcmVzc0ZvckNhbGwoKS5leGVj
dXRhYmxlQWRkcmVzcygpOwogfQpAQCAtMjAxOSwyMiArMjAxOSwxMyBAQCBERUZJTkVfU1RVQl9G
VU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgICAgIENhbGxGcmFtZSogcHJldmlvdXND
YWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKICAgICAgICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBDYWxsRnJhbWU6OmNyZWF0ZShwcmV2aW91c0NhbGxGcmFtZS0+cmVnaXN0ZXJzKCkg
KyByZWdpc3Rlck9mZnNldCk7CiAKLSAgICAgICAgY2FsbEZyYW1lLT5pbml0KDAsIHN0YXRpY19j
YXN0PEluc3RydWN0aW9uKj4oKFNUVUJfUkVUVVJOX0FERFJFU1MpLnZhbHVlKCkpLCBwcmV2aW91
c0NhbGxGcmFtZS0+c2NvcGVDaGFpbigpLCBwcmV2aW91c0NhbGxGcmFtZSwgMCwgYXJnQ291bnQs
IDApOworICAgICAgICBjYWxsRnJhbWUtPmluaXQoMCwgc3RhdGljX2Nhc3Q8SW5zdHJ1Y3Rpb24q
PigoU1RVQl9SRVRVUk5fQUREUkVTUykudmFsdWUoKSksIHByZXZpb3VzQ2FsbEZyYW1lLT5zY29w
ZUNoYWluKCksIHByZXZpb3VzQ2FsbEZyYW1lLCBhcmdDb3VudCwgYXNPYmplY3QoZnVuY1ZhbCkp
OwogICAgICAgICBzdGFja0ZyYW1lLmNhbGxGcmFtZSA9IGNhbGxGcmFtZTsKIAotICAgICAgICBS
ZWdpc3RlciogYXJndiA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSAtIFJlZ2lz
dGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIGFyZ0NvdW50OwotICAgICAgICBBcmdMaXN0
IGFyZ0xpc3QoYXJndiArIDEsIGFyZ0NvdW50IC0gMSk7Ci0KICAgICAgICAgSlNWYWx1ZSByZXR1
cm5WYWx1ZTsKICAgICAgICAgewogICAgICAgICAgICAgU2FtcGxpbmdUb29sOjpIb3N0Q2FsbFJl
Y29yZCBjYWxsUmVjb3JkKENUSV9TQU1QTEVSKTsKLQotICAgICAgICAgICAgLy8gRklYTUU6IEFs
bCBob3N0IG1ldGhvZHMgc2hvdWxkIGJlIGNhbGxpbmcgdG9UaGlzT2JqZWN0LCBidXQgdGhpcyBp
cyBub3QgcHJlc2VudGx5IHRoZSBjYXNlLgotICAgICAgICAgICAgSlNWYWx1ZSB0aGlzVmFsdWUg
PSBhcmd2WzBdLmpzVmFsdWUoKTsKLSAgICAgICAgICAgIGlmICh0aGlzVmFsdWUgPT0ganNOdWxs
KCkpCi0gICAgICAgICAgICAgICAgdGhpc1ZhbHVlID0gY2FsbEZyYW1lLT5nbG9iYWxUaGlzVmFs
dWUoKTsKLQotICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rp
b24oY2FsbEZyYW1lLCBhc09iamVjdChmdW5jVmFsKSwgdGhpc1ZhbHVlLCBhcmdMaXN0KTsKKyAg
ICAgICAgICAgIHJldHVyblZhbHVlID0gY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKGNhbGxGcmFt
ZSk7CiAgICAgICAgIH0KICAgICAgICAgc3RhY2tGcmFtZS5jYWxsRnJhbWUgPSBwcmV2aW91c0Nh
bGxGcmFtZTsKICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwpAQCAtMjQyNSw3ICsyNDE2
LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oaW50LCBvcF9sb2FkX3ZhcmFyZwogICAgICAgICAg
ICAgc3RhY2tGcmFtZS5nbG9iYWxEYXRhLT5leGNlcHRpb24gPSBjcmVhdGVTdGFja092ZXJmbG93
RXJyb3IoY2FsbEZyYW1lKTsKICAgICAgICAgICAgIFZNX1RIUk9XX0VYQ0VQVElPTigpOwogICAg
ICAgICB9Ci0gICAgICAgIGludDMyX3QgZXhwZWN0ZWRQYXJhbXMgPSBjYWxsRnJhbWUtPmNhbGxl
ZSgpLT5qc0V4ZWN1dGFibGUoKS0+cGFyYW1ldGVyQ291bnQoKTsKKyAgICAgICAgaW50MzJfdCBl
eHBlY3RlZFBhcmFtcyA9IGFzRnVuY3Rpb24oY2FsbEZyYW1lLT5jYWxsZWUoKSktPmpzRXhlY3V0
YWJsZSgpLT5wYXJhbWV0ZXJDb3VudCgpOwogICAgICAgICBpbnQzMl90IGlucGxhY2VBcmdzID0g
bWluKHByb3ZpZGVkUGFyYW1zLCBleHBlY3RlZFBhcmFtcyk7CiAgICAgICAgIAogICAgICAgICBS
ZWdpc3RlciogaW5wbGFjZUFyZ3NEc3QgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgYXJnc09m
ZnNldDsKQEAgLTMwMTIsMTAgKzMwMDMsMTAgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2Rl
ZEpTVmFsdWUsIG9wXwogCiAgICAgUmVnaXN0ZXIqIG5ld0NhbGxGcmFtZSA9IGNhbGxGcmFtZS0+
cmVnaXN0ZXJzKCkgKyByZWdpc3Rlck9mZnNldDsKICAgICBSZWdpc3RlciogYXJndiA9IG5ld0Nh
bGxGcmFtZSAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIGFyZ0NvdW50Owot
ICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gYXJndlswXS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBi
YXNlVmFsdWUgPSBhcmd2WzBdLmpzVmFsdWUoKTsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCktPmdsb2JhbE9iamVjdDsKIAotICAgIGlm
ICh0aGlzVmFsdWUgPT0gZ2xvYmFsT2JqZWN0ICYmIGZ1bmNWYWwgPT0gZ2xvYmFsT2JqZWN0LT5l
dmFsRnVuY3Rpb24oKSkgeworICAgIGlmIChiYXNlVmFsdWUgPT0gZ2xvYmFsT2JqZWN0ICYmIGZ1
bmNWYWwgPT0gZ2xvYmFsT2JqZWN0LT5ldmFsRnVuY3Rpb24oKSkgewogICAgICAgICBKU1ZhbHVl
IGV4Y2VwdGlvblZhbHVlOwogICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGludGVycHJldGVyLT5j
YWxsRXZhbChjYWxsRnJhbWUsIHJlZ2lzdGVyRmlsZSwgYXJndiwgYXJnQ291bnQsIHJlZ2lzdGVy
T2Zmc2V0LCBleGNlcHRpb25WYWx1ZSk7CiAgICAgICAgIGlmIChVTkxJS0VMWShleGNlcHRpb25W
YWx1ZSkpIHsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oCShyZXZpc2lvbiA2MDM0MSkK
KysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Miw2ICsyMiw3IEBACiAjaWZuZGVmIEFyZ0xpc3RfaAogI2RlZmluZSBBcmdMaXN0X2gKIAorI2lu
Y2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyLmgiCiAjaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KQEAgLTE4Nyw2ICsxODgs
MTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKKyAg
ICAgICAgQXJnTGlzdChFeGVjU3RhdGUqIGV4ZWMpCisgICAgICAgICAgICA6IG1fYXJncyhyZWlu
dGVycHJldF9jYXN0PEpTVmFsdWUqPigmZXhlY1tleGVjLT5ob3N0VGhpc1JlZ2lzdGVyKCkgKyAx
XSkpCisgICAgICAgICAgICAsIG1fYXJnQ291bnQoZXhlYy0+YXJndW1lbnRDb3VudCgpKQorICAg
ICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIEFyZ0xpc3QoSlNWYWx1ZSogYXJn
cywgdW5zaWduZWQgYXJnQ291bnQpCiAgICAgICAgICAgICA6IG1fYXJncyhhcmdzKQogICAgICAg
ICAgICAgLCBtX2FyZ0NvdW50KGFyZ0NvdW50KQpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Bcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3Vt
ZW50cy5oCShyZXZpc2lvbiA2MDM0MSkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1l
bnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTExOSwxMCArMTE5LDEwIEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIEFyZ3VtZW50czo6Z2V0QXJndW1lbnRzRGF0YShD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNGdW5jdGlvbiomIGZ1bmN0aW9uLCBwdHJkaWZmX3QmIGZp
cnN0UGFyYW1ldGVySW5kZXgsIFJlZ2lzdGVyKiYgYXJndiwgaW50JiBhcmdjKQogICAgIHsKLSAg
ICAgICAgZnVuY3Rpb24gPSBjYWxsRnJhbWUtPmNhbGxlZSgpOworICAgICAgICBmdW5jdGlvbiA9
IGFzRnVuY3Rpb24oY2FsbEZyYW1lLT5jYWxsZWUoKSk7CiAKICAgICAgICAgaW50IG51bVBhcmFt
ZXRlcnMgPSBmdW5jdGlvbi0+anNFeGVjdXRhYmxlKCktPnBhcmFtZXRlckNvdW50KCk7Ci0gICAg
ICAgIGFyZ2MgPSBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKTsKKyAgICAgICAgYXJnYyA9IGNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKTsKIAogICAgICAgICBpZiAoYXJn
YyA8PSBudW1QYXJhbWV0ZXJzKQogICAgICAgICAgICAgYXJndiA9IGNhbGxGcmFtZS0+cmVnaXN0
ZXJzKCkgLSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgLSBudW1QYXJhbWV0ZXJz
OwpAQCAtMTc0LDkgKzE3NCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICA6IEpTT2JqZWN0
KGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5hcmd1bWVudHNTdHJ1Y3R1cmUoKSkK
ICAgICAgICAgLCBkKG5ldyBBcmd1bWVudHNEYXRhKQogICAgIHsKLSAgICAgICAgQVNTRVJUKCFj
YWxsRnJhbWUtPmNhbGxlZSgpLT5qc0V4ZWN1dGFibGUoKS0+cGFyYW1ldGVyQ291bnQoKSk7Cisg
ICAgICAgIEFTU0VSVCghYXNGdW5jdGlvbihjYWxsRnJhbWUtPmNhbGxlZSgpKS0+anNFeGVjdXRh
YmxlKCktPnBhcmFtZXRlckNvdW50KCkpOwogCi0gICAgICAgIHVuc2lnbmVkIG51bUFyZ3VtZW50
cyA9IGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIC0gMTsKKyAgICAgICAgdW5zaWduZWQgbnVt
QXJndW1lbnRzID0gY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCk7CiAKICAgICAgICAgZC0+bnVt
UGFyYW1ldGVycyA9IDA7CiAgICAgICAgIGQtPm51bUFyZ3VtZW50cyA9IG51bUFyZ3VtZW50czsK
QEAgLTE5NCw3ICsxOTQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBkLT5leHRyYUFy
Z3VtZW50cyA9IGV4dHJhQXJndW1lbnRzOwogCi0gICAgICAgIGQtPmNhbGxlZSA9IGNhbGxGcmFt
ZS0+Y2FsbGVlKCk7CisgICAgICAgIGQtPmNhbGxlZSA9IGFzRnVuY3Rpb24oY2FsbEZyYW1lLT5j
YWxsZWUoKSk7CiAgICAgICAgIGQtPm92ZXJyb2RlTGVuZ3RoID0gZmFsc2U7CiAgICAgICAgIGQt
Pm92ZXJyb2RlQ2FsbGVlID0gZmFsc2U7CiAgICAgfQpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9BcnJheUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FycmF5Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1
LDcgKzM1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwo
QXJyYXlDb25zdHJ1Y3Rvcik7CiAgICAgCi1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFy
cmF5Q29uc3RydWN0b3JJc0FycmF5KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheUNvbnN0cnVj
dG9ySXNBcnJheShFeGVjU3RhdGUqKTsKIAogQXJyYXlDb25zdHJ1Y3Rvcjo6QXJyYXlDb25zdHJ1
Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIE5vbk51
bGxQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlLCBBcnJheVByb3RvdHlwZSogYXJyYXlQ
cm90b3R5cGUsIFN0cnVjdHVyZSogcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUpCiAgICAgOiBJ
bnRlcm5hbEZ1bmN0aW9uKCZleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgc3RydWN0
dXJlLCBJZGVudGlmaWVyKGV4ZWMsIGFycmF5UHJvdG90eXBlLT5jbGFzc0luZm8oKS0+Y2xhc3NO
YW1lKSkKQEAgLTc2LDggKzc2LDkgQEAgQ29uc3RydWN0VHlwZSBBcnJheUNvbnN0cnVjdG9yOjpn
ZXRDb25zdAogICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlSG9zdDsKIH0KIAotc3RhdGljIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjYWxsQXJyYXlDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK3N0YXRpYyBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY2FsbEFycmF5Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQogeworICAg
IEFyZ0xpc3QgYXJncyhleGVjKTsKICAgICByZXR1cm4gY29uc3RydWN0QXJyYXlXaXRoU2l6ZVF1
aXJrKGV4ZWMsIGFyZ3MpOwogfQogCkBAIC04OSw5ICs5MCw5IEBAIENhbGxUeXBlIEFycmF5Q29u
c3RydWN0b3I6OmdldENhbGxEYXRhKEMKICAgICByZXR1cm4gQ2FsbFR5cGVIb3N0OwogfQogCi1K
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlDb25zdHJ1Y3RvcklzQXJyYXkoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGFycmF5Q29uc3RydWN0b3JJc0FycmF5KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBy
ZXR1cm4ganNCb29sZWFuKGFyZ3MuYXQoMCkuaW5oZXJpdHMoJkpTQXJyYXk6OmluZm8pKTsKKyAg
ICByZXR1cm4ganNCb29sZWFuKGV4ZWMtPmFyZ3VtZW50KDApLmluaGVyaXRzKCZKU0FycmF5Ojpp
bmZvKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9BcnJheVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDI3ICs0
MCwyNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChBcnJh
eVByb3RvdHlwZSk7CiAKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1
bmNUb1N0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
KTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNUb0xvY2FsZVN0
cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0
YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNDb25jYXQoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jSm9pbihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpT
VmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJy
YXlQcm90b0Z1bmNQb3AoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdM
aXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jUHVzaChF
eGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNSZXZlcnNlKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBhcnJheVByb3RvRnVuY1NoaWZ0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVBy
b3RvRnVuY1NsaWNlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlz
dCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1NvcnQoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jU3BsaWNlKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBhcnJheVByb3RvRnVuY1VuU2hpZnQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
LCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJv
dG9GdW5jRXZlcnkoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0
Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jRm9yRWFjaChF
eGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNTb21lKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBhcnJheVByb3RvRnVuY0luZGV4T2YoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
LCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJv
dG9GdW5jRmlsdGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlz
dCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY01hcChFeGVj
U3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNSZWR1Y2UoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGFycmF5UHJvdG9GdW5jUmVkdWNlUmlnaHQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1Zh
bHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5
UHJvdG9GdW5jTGFzdEluZGV4T2YoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25z
dCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5j
VG9TdHJpbmcoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5
UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jQ29uY2F0KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0pvaW4oRXhlY1N0YXRlKik7CitzdGF0aWMg
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jUG9wKEV4ZWNTdGF0ZSopOworc3Rh
dGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1B1c2goRXhlY1N0YXRlKik7
CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jUmV2ZXJzZShFeGVj
U3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNTaGlm
dChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1
bmNTbGljZShFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQ
cm90b0Z1bmNTb3J0KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBh
cnJheVByb3RvRnVuY1NwbGljZShFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgYXJyYXlQcm90b0Z1bmNVblNoaWZ0KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0V2ZXJ5KEV4ZWNTdGF0ZSopOworc3RhdGljIEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0ZvckVhY2goRXhlY1N0YXRlKik7Citz
dGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jU29tZShFeGVjU3RhdGUq
KTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNJbmRleE9mKEV4
ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0Zp
bHRlcihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90
b0Z1bmNNYXAoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5
UHJvdG9GdW5jUmVkdWNlKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBhcnJheVByb3RvRnVuY1JlZHVjZVJpZ2h0KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0xhc3RJbmRleE9mKEV4ZWNTdGF0ZSopOwogCiB9
CiAKQEAgLTE0OSw4ICsxNDksOSBAQCBzdGF0aWMgdm9pZCBwdXRQcm9wZXJ0eShFeGVjU3RhdGUq
IGV4ZWMsCiAgICAgb2JqLT5wdXQoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CiB9
CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4
ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAg
ICAgYm9vbCBpc1JlYWxBcnJheSA9IGlzSlNBcnJheSgmZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlz
VmFsdWUpOwogICAgIGlmICghaXNSZWFsQXJyYXkgJiYgIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNB
cnJheTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7
CkBAIC0yMDgsOCArMjA5LDkgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5j
VG9TdAogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBVU3RyaW5nOjphZG9wdChidWZmZXIpKTsK
IH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmco
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdM
aXN0JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1RvTG9jYWxlU3RyaW5n
KEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RU
aGlzVmFsdWUoKTsKICAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNBcnJheTo6aW5mbykp
CiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAgICAgSlNPYmpl
Y3QqIHRoaXNPYmogPSBhc0FycmF5KHRoaXNWYWx1ZSk7CkBAIC0yNDgsOCArMjUwLDkgQEAgSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jVG9MbwogICAgIHJldHVybiBzdHJCdWZm
ZXIuYnVpbGQoZXhlYyk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVu
Y0pvaW4oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jSm9p
bihFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0
VGhpc1ZhbHVlKCk7CiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSB0aGlzVmFsdWUudG9UaGlzT2Jq
ZWN0KGV4ZWMpOwogCiAgICAgSGFzaFNldDxKU09iamVjdCo+JiBhcnJheVZpc2l0ZWRFbGVtZW50
cyA9IGV4ZWMtPmdsb2JhbERhdGEoKS5hcnJheVZpc2l0ZWRFbGVtZW50czsKQEAgLTI2NSw4ICsy
NjgsOCBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNKb2luCiAgICAgSlNT
dHJpbmdCdWlsZGVyIHN0ckJ1ZmZlcjsKIAogICAgIFVTdHJpbmcgc2VwYXJhdG9yOwotICAgIGlm
ICghYXJncy5hdCgwKS5pc1VuZGVmaW5lZCgpKQotICAgICAgICBzZXBhcmF0b3IgPSBhcmdzLmF0
KDApLnRvU3RyaW5nKGV4ZWMpOworICAgIGlmICghZXhlYy0+YXJndW1lbnQoMCkuaXNVbmRlZmlu
ZWQoKSkKKyAgICAgICAgc2VwYXJhdG9yID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhl
Yyk7CiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzT2JqLT5nZXQoZXhlYywgZXhlYy0+cHJv
cGVydHlOYW1lcygpLmxlbmd0aCkudG9VSW50MzIoZXhlYyk7CiAgICAgdW5zaWduZWQgayA9IDA7
CkBAIC0zMTksMTMgKzMyMiwxNCBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1
bmNKb2luCiAgICAgcmV0dXJuIHN0ckJ1ZmZlci5idWlsZChleGVjKTsKIH0KIAotSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jQ29uY2F0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0NvbmNhdChFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAg
SlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgSlNBcnJheSog
YXJyID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjKTsKICAgICBpbnQgbiA9IDA7CiAgICAgSlNW
YWx1ZSBjdXJBcmcgPSB0aGlzVmFsdWUudG9UaGlzT2JqZWN0KGV4ZWMpOwotICAgIEFyZ0xpc3Q6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYXJncy5iZWdpbigpOwotICAgIEFyZ0xpc3Q6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IGFyZ3MuZW5kKCk7CisgICAgc2l6ZV90IGkgPSAwOworICAgIHNpemVfdCBh
cmdDb3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKICAgICB3aGlsZSAoMSkgewogICAgICAg
ICBpZiAoY3VyQXJnLmluaGVyaXRzKCZKU0FycmF5OjppbmZvKSkgewogICAgICAgICAgICAgdW5z
aWduZWQgbGVuZ3RoID0gY3VyQXJnLmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVu
Z3RoKS50b1VJbnQzMihleGVjKTsKQEAgLTMzOSwxNyArMzQzLDE4IEBAIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBhcnJheVByb3RvRnVuY0NvbmMKICAgICAgICAgICAgIGFyci0+cHV0KGV4ZWMsIG4s
IGN1ckFyZyk7CiAgICAgICAgICAgICBuKys7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGl0ID09
IGVuZCkKKyAgICAgICAgaWYgKGkgPT0gYXJnQ291bnQpCiAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY3VyQXJnID0gKCppdCk7Ci0gICAgICAgICsraXQ7CisgICAgICAgIGN1ckFyZyA9IChl
eGVjLT5hcmd1bWVudChpKSk7CisgICAgICAgICsraTsKICAgICB9CiAgICAgYXJyLT5zZXRMZW5n
dGgobik7CiAgICAgcmV0dXJuIGFycjsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5
UHJvdG9GdW5jUG9wKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNQ
b3AoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9z
dFRoaXNWYWx1ZSgpOwogICAgIGlmIChpc0pTQXJyYXkoJmV4ZWMtPmdsb2JhbERhdGEoKSwgdGhp
c1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIGFzQXJyYXkodGhpc1ZhbHVlKS0+cG9wKCk7CiAKQEAg
LTM2NywyNSArMzcyLDI3IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1Bv
cCgKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQ
cm90b0Z1bmNQdXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3Rv
RnVuY1B1c2goRXhlY1N0YXRlKiBleGVjKQogewotICAgIGlmIChpc0pTQXJyYXkoJmV4ZWMtPmds
b2JhbERhdGEoKSwgdGhpc1ZhbHVlKSAmJiBhcmdzLnNpemUoKSA9PSAxKSB7CisgICAgSlNWYWx1
ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CisgICAgaWYgKGlzSlNBcnJheSgm
ZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzVmFsdWUpICYmIGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA9
PSAxKSB7CiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh0aGlzVmFsdWUpOwotICAg
ICAgICBhcnJheS0+cHVzaChleGVjLCAqYXJncy5iZWdpbigpKTsKKyAgICAgICAgYXJyYXktPnB1
c2goZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOwogICAgICAgICByZXR1cm4ganNOdW1iZXIoZXhl
YywgYXJyYXktPmxlbmd0aCgpKTsKICAgICB9CiAKICAgICBKU09iamVjdCogdGhpc09iaiA9IHRo
aXNWYWx1ZS50b1RoaXNPYmplY3QoZXhlYyk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpc09i
ai0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpLnRvVUludDMyKGV4ZWMp
OwotICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBhcmdzLnNpemUoKTsgbisrKQotICAgICAg
ICB0aGlzT2JqLT5wdXQoZXhlYywgbGVuZ3RoICsgbiwgYXJncy5hdChuKSk7Ci0gICAgbGVuZ3Ro
ICs9IGFyZ3Muc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBleGVjLT5hcmd1
bWVudENvdW50KCk7IG4rKykKKyAgICAgICAgdGhpc09iai0+cHV0KGV4ZWMsIGxlbmd0aCArIG4s
IGV4ZWMtPmFyZ3VtZW50KG4pKTsKKyAgICBsZW5ndGggKz0gZXhlYy0+YXJndW1lbnRDb3VudCgp
OwogICAgIHB1dFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5s
ZW5ndGgsIGpzTnVtYmVyKGV4ZWMsIGxlbmd0aCkpOwogICAgIHJldHVybiBqc051bWJlcihleGVj
LCBsZW5ndGgpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNSZXZl
cnNlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3Qg
QXJnTGlzdCYpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNSZXZlcnNlKEV4
ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlz
VmFsdWUoKTsKICAgICBKU09iamVjdCogdGhpc09iaiA9IHRoaXNWYWx1ZS50b1RoaXNPYmplY3Qo
ZXhlYyk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpc09iai0+Z2V0KGV4ZWMsIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOwogICAgIHVuc2lnbmVkIG1pZGRs
ZSA9IGxlbmd0aCAvIDI7CkBAIC00MDgsOCArNDE1LDkgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGFycmF5UHJvdG9GdW5jUmV2ZQogICAgIHJldHVybiB0aGlzT2JqOwogfQogCi1KU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNTaGlmdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGFycmF5UHJvdG9GdW5jU2hpZnQoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUg
dGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIEpTT2JqZWN0KiB0aGlzT2Jq
ID0gdGhpc1ZhbHVlLnRvVGhpc09iamVjdChleGVjKTsKICAgICBKU1ZhbHVlIHJlc3VsdDsKIApA
QCAtNDMxLDggKzQzOSw5IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1No
aWYKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQ
cm90b0Z1bmNTbGljZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFs
dWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90
b0Z1bmNTbGljZShFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBl
eGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgLy8gaHR0cDovL2RldmVsb3Blci5uZXRzY2FwZS5j
b20vZG9jcy9tYW51YWxzL2pzL2NsaWVudC9qc3JlZi9hcnJheS5odG0jMTE5MzcxMyBvciAxNS40
LjQuMTAKIAogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gdGhpc1ZhbHVlLnRvVGhpc09iamVjdChl
eGVjKTsKQEAgLTQ0MCw3ICs0NDksNyBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90
b0Z1bmNTbGljCiAgICAgLy8gV2UgcmV0dXJuIGEgbmV3IGFycmF5CiAgICAgSlNBcnJheSogcmVz
T2JqID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHJl
c09iajsKLSAgICBkb3VibGUgYmVnaW4gPSBhcmdzLmF0KDApLnRvSW50ZWdlcihleGVjKTsKKyAg
ICBkb3VibGUgYmVnaW4gPSBleGVjLT5hcmd1bWVudCgwKS50b0ludGVnZXIoZXhlYyk7CiAgICAg
dW5zaWduZWQgbGVuZ3RoID0gdGhpc09iai0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOwogICAgIGlmIChiZWdpbiA+PSAwKSB7CiAgICAgICAg
IGlmIChiZWdpbiA+IGxlbmd0aCkKQEAgLTQ1MSwxMCArNDYwLDEwIEBAIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBhcnJheVByb3RvRnVuY1NsaWMKICAgICAgICAgICAgIGJlZ2luID0gMDsKICAgICB9
CiAgICAgZG91YmxlIGVuZDsKLSAgICBpZiAoYXJncy5hdCgxKS5pc1VuZGVmaW5lZCgpKQorICAg
IGlmIChleGVjLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZCgpKQogICAgICAgICBlbmQgPSBsZW5n
dGg7CiAgICAgZWxzZSB7Ci0gICAgICAgIGVuZCA9IGFyZ3MuYXQoMSkudG9JbnRlZ2VyKGV4ZWMp
OworICAgICAgICBlbmQgPSBleGVjLT5hcmd1bWVudCgxKS50b0ludGVnZXIoZXhlYyk7CiAgICAg
ICAgIGlmIChlbmQgPCAwKSB7CiAgICAgICAgICAgICBlbmQgKz0gbGVuZ3RoOwogICAgICAgICAg
ICAgaWYgKGVuZCA8IDApCkBAIC00NzYsMTEgKzQ4NSwxMiBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgYXJyYXlQcm90b0Z1bmNTbGljCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jU29ydChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNTb3J0KEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1Zh
bHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBKU09iamVjdCogdGhp
c09iaiA9IHRoaXNWYWx1ZS50b1RoaXNPYmplY3QoZXhlYyk7CiAKLSAgICBKU1ZhbHVlIGZ1bmN0
aW9uID0gYXJncy5hdCgwKTsKKyAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gZXhlYy0+YXJndW1lbnQo
MCk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBmdW5j
dGlvbi5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CiAKQEAgLTUzNCw4ICs1NDQsOSBAQCBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNTb3J0CiAgICAgcmV0dXJuIHRoaXNPYmo7CiB9
CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1NwbGljZShFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNTcGxpY2UoRXhlY1N0YXRlKiBl
eGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwog
ICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gdGhpc1ZhbHVlLnRvVGhpc09iamVjdChleGVjKTsKIAog
ICAgIC8vIDE1LjQuNC4xMgpAQCAtNTQzLDExICs1NTQsMTEgQEAgSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGFycmF5UHJvdG9GdW5jU3BsaQogICAgIEpTVmFsdWUgcmVzdWx0ID0gcmVzT2JqOwogCiAg
ICAgLy8gRklYTUU6IEZpcmVmb3ggcmV0dXJucyBhbiBlbXB0eSBhcnJheS4KLSAgICBpZiAoIWFy
Z3Muc2l6ZSgpKQorICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXNPYmotPmdldChl
eGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS50b1VJbnQzMihleGVjKTsKLSAgICBk
b3VibGUgcmVsYXRpdmVCZWdpbiA9IGFyZ3MuYXQoMCkudG9JbnRlZ2VyKGV4ZWMpOworICAgIGRv
dWJsZSByZWxhdGl2ZUJlZ2luID0gZXhlYy0+YXJndW1lbnQoMCkudG9JbnRlZ2VyKGV4ZWMpOwog
ICAgIHVuc2lnbmVkIGJlZ2luOwogICAgIGlmIChyZWxhdGl2ZUJlZ2luIDwgMCkgewogICAgICAg
ICByZWxhdGl2ZUJlZ2luICs9IGxlbmd0aDsKQEAgLTU1Niw4ICs1NjcsOCBAQCBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNTcGxpCiAgICAgICAgIGJlZ2luID0gc3RkOjptaW48
dW5zaWduZWQ+KHN0YXRpY19jYXN0PHVuc2lnbmVkPihyZWxhdGl2ZUJlZ2luKSwgbGVuZ3RoKTsK
IAogICAgIHVuc2lnbmVkIGRlbGV0ZUNvdW50OwotICAgIGlmIChhcmdzLnNpemUoKSA+IDEpCi0g
ICAgICAgIGRlbGV0ZUNvdW50ID0gc3RkOjptaW48aW50PihzdGQ6Om1heDxpbnQ+KGFyZ3MuYXQo
MSkudG9VSW50MzIoZXhlYyksIDApLCBsZW5ndGggLSBiZWdpbik7CisgICAgaWYgKGV4ZWMtPmFy
Z3VtZW50Q291bnQoKSA+IDEpCisgICAgICAgIGRlbGV0ZUNvdW50ID0gc3RkOjptaW48aW50Pihz
dGQ6Om1heDxpbnQ+KGV4ZWMtPmFyZ3VtZW50KDEpLnRvVUludDMyKGV4ZWMpLCAwKSwgbGVuZ3Ro
IC0gYmVnaW4pOwogICAgIGVsc2UKICAgICAgICAgZGVsZXRlQ291bnQgPSBsZW5ndGggLSBiZWdp
bjsKIApAQCAtNTY3LDcgKzU3OCw3IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3Rv
RnVuY1NwbGkKICAgICB9CiAgICAgcmVzT2JqLT5zZXRMZW5ndGgoZGVsZXRlQ291bnQpOwogCi0g
ICAgdW5zaWduZWQgYWRkaXRpb25hbEFyZ3MgPSBzdGQ6Om1heDxpbnQ+KGFyZ3Muc2l6ZSgpIC0g
MiwgMCk7CisgICAgdW5zaWduZWQgYWRkaXRpb25hbEFyZ3MgPSBzdGQ6Om1heDxpbnQ+KGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSAtIDIsIDApOwogICAgIGlmIChhZGRpdGlvbmFsQXJncyAhPSBkZWxl
dGVDb3VudCkgewogICAgICAgICBpZiAoYWRkaXRpb25hbEFyZ3MgPCBkZWxldGVDb3VudCkgewog
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBrID0gYmVnaW47IGsgPCBsZW5ndGggLSBkZWxldGVD
b3VudDsgKytrKSB7CkBAIC01ODgsMTkgKzU5OSwyMCBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
YXJyYXlQcm90b0Z1bmNTcGxpCiAgICAgICAgIH0KICAgICB9CiAgICAgZm9yICh1bnNpZ25lZCBr
ID0gMDsgayA8IGFkZGl0aW9uYWxBcmdzOyArK2spCi0gICAgICAgIHRoaXNPYmotPnB1dChleGVj
LCBrICsgYmVnaW4sIGFyZ3MuYXQoayArIDIpKTsKKyAgICAgICAgdGhpc09iai0+cHV0KGV4ZWMs
IGsgKyBiZWdpbiwgZXhlYy0+YXJndW1lbnQoayArIDIpKTsKIAogICAgIHB1dFByb3BlcnR5KGV4
ZWMsIHRoaXNPYmosIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKGV4ZWMs
IGxlbmd0aCAtIGRlbGV0ZUNvdW50ICsgYWRkaXRpb25hbEFyZ3MpKTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNVblNoaWZ0KEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlz
dCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1VuU2hpZnQoRXhl
Y1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNW
YWx1ZSgpOwogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gdGhpc1ZhbHVlLnRvVGhpc09iamVjdChl
eGVjKTsKIAogICAgIC8vIDE1LjQuNC4xMwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXNPYmot
PmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS50b1VJbnQzMihleGVjKTsK
LSAgICB1bnNpZ25lZCBuckFyZ3MgPSBhcmdzLnNpemUoKTsKKyAgICB1bnNpZ25lZCBuckFyZ3Mg
PSBleGVjLT5hcmd1bWVudENvdW50KCk7CiAgICAgaWYgKG5yQXJncykgewogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGsgPSBsZW5ndGg7IGsgPiAwOyAtLWspIHsKICAgICAgICAgICAgIGlmIChKU1Zh
bHVlIHYgPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBrIC0gMSkpCkBAIC02MTAsMjMgKzYy
MiwyNCBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNVblNoCiAgICAgICAg
IH0KICAgICB9CiAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IG5yQXJnczsgKytrKQotICAg
ICAgICB0aGlzT2JqLT5wdXQoZXhlYywgaywgYXJncy5hdChrKSk7CisgICAgICAgIHRoaXNPYmot
PnB1dChleGVjLCBrLCBleGVjLT5hcmd1bWVudChrKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBq
c051bWJlcihleGVjLCBsZW5ndGggKyBuckFyZ3MpOwogICAgIHB1dFByb3BlcnR5KGV4ZWMsIHRo
aXNPYmosIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIHJlc3VsdCk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jRmlsdGVy
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0ZpbHRlcihF
eGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhp
c1ZhbHVlKCk7CiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSB0aGlzVmFsdWUudG9UaGlzT2JqZWN0
KGV4ZWMpOwogCi0gICAgSlNWYWx1ZSBmdW5jdGlvbiA9IGFyZ3MuYXQoMCk7CisgICAgSlNWYWx1
ZSBmdW5jdGlvbiA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwog
ICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZnVuY3Rpb24uZ2V0Q2FsbERhdGEoY2FsbERhdGEpOwog
ICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpCiAgICAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKLSAgICBKU09iamVjdCogYXBwbHlUaGlzID0gYXJncy5h
dCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpID8gZXhlYy0+Z2xvYmFsVGhpc1ZhbHVlKCkgOiBhcmdz
LmF0KDEpLnRvT2JqZWN0KGV4ZWMpOworICAgIEpTT2JqZWN0KiBhcHBseVRoaXMgPSBleGVjLT5h
cmd1bWVudCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpID8gZXhlYy0+Z2xvYmFsVGhpc1ZhbHVlKCkg
OiBleGVjLT5hcmd1bWVudCgxKS50b09iamVjdChleGVjKTsKICAgICBKU0FycmF5KiByZXN1bHRB
cnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYyk7CiAKICAgICB1bnNpZ25lZCBmaWx0ZXJJ
bmRleCA9IDA7CkBAIC02NzQsMTcgKzY4NywxOCBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJy
YXlQcm90b0Z1bmNGaWx0CiAgICAgcmV0dXJuIHJlc3VsdEFycmF5OwogfQogCi1KU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNNYXAoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGFycmF5UHJvdG9GdW5jTWFwKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVl
IHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBKU09iamVjdCogdGhpc09i
aiA9IHRoaXNWYWx1ZS50b1RoaXNPYmplY3QoZXhlYyk7CiAKLSAgICBKU1ZhbHVlIGZ1bmN0aW9u
ID0gYXJncy5hdCgwKTsKKyAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gZXhlYy0+YXJndW1lbnQoMCk7
CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBmdW5jdGlv
bi5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9u
ZSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAotICAgIEpT
T2JqZWN0KiBhcHBseVRoaXMgPSBhcmdzLmF0KDEpLmlzVW5kZWZpbmVkT3JOdWxsKCkgPyBleGVj
LT5nbG9iYWxUaGlzVmFsdWUoKSA6IGFyZ3MuYXQoMSkudG9PYmplY3QoZXhlYyk7CisgICAgSlNP
YmplY3QqIGFwcGx5VGhpcyA9IGV4ZWMtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkT3JOdWxsKCkg
PyBleGVjLT5nbG9iYWxUaGlzVmFsdWUoKSA6IGV4ZWMtPmFyZ3VtZW50KDEpLnRvT2JqZWN0KGV4
ZWMpOwogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpc09iai0+Z2V0KGV4ZWMsIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOwogCkBAIC03MzEsMTcgKzc0NSwx
OCBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNNYXAoCiAvLyBodHRwOi8v
ZGV2ZWxvcGVyLXRlc3QubW96aWxsYS5vcmcvZW4vZG9jcy9Db3JlX0phdmFTY3JpcHRfMS41X1Jl
ZmVyZW5jZTpPYmplY3RzOkFycmF5OmZvckVhY2gKIC8vIGh0dHA6Ly9kZXZlbG9wZXItdGVzdC5t
b3ppbGxhLm9yZy9lbi9kb2NzL0NvcmVfSmF2YVNjcmlwdF8xLjVfUmVmZXJlbmNlOk9iamVjdHM6
QXJyYXk6c29tZQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNFdmVyeShF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNFdmVyeShFeGVj
U3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1Zh
bHVlKCk7CiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSB0aGlzVmFsdWUudG9UaGlzT2JqZWN0KGV4
ZWMpOwogCi0gICAgSlNWYWx1ZSBmdW5jdGlvbiA9IGFyZ3MuYXQoMCk7CisgICAgSlNWYWx1ZSBm
dW5jdGlvbiA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAg
IENhbGxUeXBlIGNhbGxUeXBlID0gZnVuY3Rpb24uZ2V0Q2FsbERhdGEoY2FsbERhdGEpOwogICAg
IGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KGV4ZWMsIFR5cGVFcnJvcik7CiAKLSAgICBKU09iamVjdCogYXBwbHlUaGlzID0gYXJncy5hdCgx
KS5pc1VuZGVmaW5lZE9yTnVsbCgpID8gZXhlYy0+Z2xvYmFsVGhpc1ZhbHVlKCkgOiBhcmdzLmF0
KDEpLnRvT2JqZWN0KGV4ZWMpOworICAgIEpTT2JqZWN0KiBhcHBseVRoaXMgPSBleGVjLT5hcmd1
bWVudCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpID8gZXhlYy0+Z2xvYmFsVGhpc1ZhbHVlKCkgOiBl
eGVjLT5hcmd1bWVudCgxKS50b09iamVjdChleGVjKTsKIAogICAgIEpTVmFsdWUgcmVzdWx0ID0g
anNCb29sZWFuKHRydWUpOwogCkBAIC03ODcsMTcgKzgwMiwxOCBAQCBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgYXJyYXlQcm90b0Z1bmNFdmVyCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jRm9yRWFjaChFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNGb3JFYWNoKEV4ZWNTdGF0ZSogZXhlYykKIHsK
KyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBKU09i
amVjdCogdGhpc09iaiA9IHRoaXNWYWx1ZS50b1RoaXNPYmplY3QoZXhlYyk7CiAKLSAgICBKU1Zh
bHVlIGZ1bmN0aW9uID0gYXJncy5hdCgwKTsKKyAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gZXhlYy0+
YXJndW1lbnQoMCk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5
cGUgPSBmdW5jdGlvbi5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09
IENhbGxUeXBlTm9uZSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9y
KTsKIAotICAgIEpTT2JqZWN0KiBhcHBseVRoaXMgPSBhcmdzLmF0KDEpLmlzVW5kZWZpbmVkT3JO
dWxsKCkgPyBleGVjLT5nbG9iYWxUaGlzVmFsdWUoKSA6IGFyZ3MuYXQoMSkudG9PYmplY3QoZXhl
Yyk7CisgICAgSlNPYmplY3QqIGFwcGx5VGhpcyA9IGV4ZWMtPmFyZ3VtZW50KDEpLmlzVW5kZWZp
bmVkT3JOdWxsKCkgPyBleGVjLT5nbG9iYWxUaGlzVmFsdWUoKSA6IGV4ZWMtPmFyZ3VtZW50KDEp
LnRvT2JqZWN0KGV4ZWMpOwogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpc09iai0+Z2V0KGV4
ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOwogICAgIHVu
c2lnbmVkIGsgPSAwOwpAQCAtODMyLDE3ICs4NDgsMTggQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGFycmF5UHJvdG9GdW5jRm9yRQogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNTb21lKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1NvbWUoRXhlY1N0YXRlKiBleGVjKQogeworICAg
IEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIEpTT2JqZWN0
KiB0aGlzT2JqID0gdGhpc1ZhbHVlLnRvVGhpc09iamVjdChleGVjKTsKIAotICAgIEpTVmFsdWUg
ZnVuY3Rpb24gPSBhcmdzLmF0KDApOworICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBleGVjLT5hcmd1
bWVudCgwKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9
IGZ1bmN0aW9uLmdldENhbGxEYXRhKGNhbGxEYXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0gQ2Fs
bFR5cGVOb25lKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwog
Ci0gICAgSlNPYmplY3QqIGFwcGx5VGhpcyA9IGFyZ3MuYXQoMSkuaXNVbmRlZmluZWRPck51bGwo
KSA/IGV4ZWMtPmdsb2JhbFRoaXNWYWx1ZSgpIDogYXJncy5hdCgxKS50b09iamVjdChleGVjKTsK
KyAgICBKU09iamVjdCogYXBwbHlUaGlzID0gZXhlYy0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWRP
ck51bGwoKSA/IGV4ZWMtPmdsb2JhbFRoaXNWYWx1ZSgpIDogZXhlYy0+YXJndW1lbnQoMSkudG9P
YmplY3QoZXhlYyk7CiAKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQm9vbGVhbihmYWxzZSk7CiAK
QEAgLTg4NSwxMSArOTAyLDEyIEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVu
Y1NvbWUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJy
YXlQcm90b0Z1bmNSZWR1Y2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhp
c1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5
UHJvdG9GdW5jUmVkdWNlKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1
ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBKU09iamVjdCogdGhpc09iaiA9IHRoaXNW
YWx1ZS50b1RoaXNPYmplY3QoZXhlYyk7CiAgICAgCi0gICAgSlNWYWx1ZSBmdW5jdGlvbiA9IGFy
Z3MuYXQoMCk7CisgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAg
IENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZnVuY3Rpb24uZ2V0
Q2FsbERhdGEoY2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpCkBA
IC04OTgsMTQgKzkxNiwxNCBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNS
ZWR1CiAgICAgdW5zaWduZWQgaSA9IDA7CiAgICAgSlNWYWx1ZSBydjsKICAgICB1bnNpZ25lZCBs
ZW5ndGggPSB0aGlzT2JqLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCku
dG9VSW50MzIoZXhlYyk7Ci0gICAgaWYgKCFsZW5ndGggJiYgYXJncy5zaXplKCkgPT0gMSkKKyAg
ICBpZiAoIWxlbmd0aCAmJiBleGVjLT5hcmd1bWVudENvdW50KCkgPT0gMSkKICAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKICAgICBKU0FycmF5KiBhcnJheSA9IDA7
CiAgICAgaWYgKGlzSlNBcnJheSgmZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzT2JqKSkKICAgICAg
ICAgYXJyYXkgPSBhc0FycmF5KHRoaXNPYmopOwogCi0gICAgaWYgKGFyZ3Muc2l6ZSgpID49IDIp
Ci0gICAgICAgIHJ2ID0gYXJncy5hdCgxKTsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgp
ID49IDIpCisgICAgICAgIHJ2ID0gZXhlYy0+YXJndW1lbnQoMSk7CiAgICAgZWxzZSBpZiAoYXJy
YXkgJiYgYXJyYXktPmNhbkdldEluZGV4KDApKXsKICAgICAgICAgcnYgPSBhcnJheS0+Z2V0SW5k
ZXgoMCk7CiAgICAgICAgIGkgPSAxOwpAQCAtOTU1LDExICs5NzMsMTIgQEAgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jUmVkdQogICAgIHJldHVybiBydjsKIH0KIAotSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jUmVkdWNlUmlnaHQoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jUmVkdWNlUmlnaHQoRXhlY1N0YXRlKiBl
eGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwog
ICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gdGhpc1ZhbHVlLnRvVGhpc09iamVjdChleGVjKTsKICAg
ICAKLSAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gYXJncy5hdCgwKTsKKyAgICBKU1ZhbHVlIGZ1bmN0
aW9uID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2Fs
bFR5cGUgY2FsbFR5cGUgPSBmdW5jdGlvbi5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CiAgICAgaWYg
KGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkKQEAgLTk2OCwxNCArOTg3LDE0IEBAIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1JlZHUKICAgICB1bnNpZ25lZCBpID0gMDsKICAg
ICBKU1ZhbHVlIHJ2OwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXNPYmotPmdldChleGVjLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS50b1VJbnQzMihleGVjKTsKLSAgICBpZiAoIWxl
bmd0aCAmJiBhcmdzLnNpemUoKSA9PSAxKQorICAgIGlmICghbGVuZ3RoICYmIGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSA9PSAxKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJy
b3IpOwogICAgIEpTQXJyYXkqIGFycmF5ID0gMDsKICAgICBpZiAoaXNKU0FycmF5KCZleGVjLT5n
bG9iYWxEYXRhKCksIHRoaXNPYmopKQogICAgICAgICBhcnJheSA9IGFzQXJyYXkodGhpc09iaik7
CiAgICAgCi0gICAgaWYgKGFyZ3Muc2l6ZSgpID49IDIpCi0gICAgICAgIHJ2ID0gYXJncy5hdCgx
KTsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDIpCisgICAgICAgIHJ2ID0gZXhl
Yy0+YXJndW1lbnQoMSk7CiAgICAgZWxzZSBpZiAoYXJyYXkgJiYgYXJyYXktPmNhbkdldEluZGV4
KGxlbmd0aCAtIDEpKXsKICAgICAgICAgcnYgPSBhcnJheS0+Z2V0SW5kZXgobGVuZ3RoIC0gMSk7
CiAgICAgICAgIGkgPSAxOwpAQCAtMTAyNCwxNSArMTA0MywxNiBAQCBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgYXJyYXlQcm90b0Z1bmNSZWR1CiAgICAgcmV0dXJuIHJ2OyAgICAgICAgCiB9CiAKLUpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0luZGV4T2YoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jSW5kZXhPZihFeGVjU3RhdGUqIGV4ZWMp
CiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAg
Ly8gSmF2YVNjcmlwdCAxLjUgRXh0ZW5zaW9uIGJ5IE1vemlsbGEKICAgICAvLyBEb2N1bWVudGF0
aW9uOiBodHRwOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2RvY3MvQ29yZV9KYXZhU2NyaXB0
XzEuNV9SZWZlcmVuY2U6R2xvYmFsX09iamVjdHM6QXJyYXk6aW5kZXhPZgogCiAgICAgSlNPYmpl
Y3QqIHRoaXNPYmogPSB0aGlzVmFsdWUudG9UaGlzT2JqZWN0KGV4ZWMpOwogCiAgICAgdW5zaWdu
ZWQgaW5kZXggPSAwOwotICAgIGRvdWJsZSBkID0gYXJncy5hdCgxKS50b0ludGVnZXIoZXhlYyk7
CisgICAgZG91YmxlIGQgPSBleGVjLT5hcmd1bWVudCgxKS50b0ludGVnZXIoZXhlYyk7CiAgICAg
dW5zaWduZWQgbGVuZ3RoID0gdGhpc09iai0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOwogICAgIGlmIChkIDwgMCkKICAgICAgICAgZCArPSBs
ZW5ndGg7CkBAIC0xMDQzLDcgKzEwNjMsNyBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQ
cm90b0Z1bmNJbmRlCiAgICAgICAgICAgICBpbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihk
KTsKICAgICB9CiAKLSAgICBKU1ZhbHVlIHNlYXJjaEVsZW1lbnQgPSBhcmdzLmF0KDApOworICAg
IEpTVmFsdWUgc2VhcmNoRWxlbWVudCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGZvciAoOyBp
bmRleCA8IGxlbmd0aDsgKytpbmRleCkgewogICAgICAgICBKU1ZhbHVlIGUgPSBnZXRQcm9wZXJ0
eShleGVjLCB0aGlzT2JqLCBpbmRleCk7CiAgICAgICAgIGlmICghZSkKQEAgLTEwNTUsOCArMTA3
NSw5IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0luZGUKICAgICByZXR1
cm4ganNOdW1iZXIoZXhlYywgLTEpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQ
cm90b0Z1bmNMYXN0SW5kZXhPZihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0
aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJy
YXlQcm90b0Z1bmNMYXN0SW5kZXhPZihFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0
aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgLy8gSmF2YVNjcmlwdCAxLjYg
RXh0ZW5zaW9uIGJ5IE1vemlsbGEKICAgICAvLyBEb2N1bWVudGF0aW9uOiBodHRwOi8vZGV2ZWxv
cGVyLm1vemlsbGEub3JnL2VuL2RvY3MvQ29yZV9KYXZhU2NyaXB0XzEuNV9SZWZlcmVuY2U6R2xv
YmFsX09iamVjdHM6QXJyYXk6bGFzdEluZGV4T2YKIApAQCAtMTA2NCw3ICsxMDg1LDcgQEAgSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jTGFzdAogCiAgICAgdW5zaWduZWQgbGVu
Z3RoID0gdGhpc09iai0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpLnRv
VUludDMyKGV4ZWMpOwogICAgIGludCBpbmRleCA9IGxlbmd0aCAtIDE7Ci0gICAgZG91YmxlIGQg
PSBhcmdzLmF0KDEpLnRvSW50ZWdlclByZXNlcnZlTmFOKGV4ZWMpOworICAgIGRvdWJsZSBkID0g
ZXhlYy0+YXJndW1lbnQoMSkudG9JbnRlZ2VyUHJlc2VydmVOYU4oZXhlYyk7CiAKICAgICBpZiAo
ZCA8IDApIHsKICAgICAgICAgZCArPSBsZW5ndGg7CkBAIC0xMDc0LDcgKzEwOTUsNyBAQCBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNMYXN0CiAgICAgaWYgKGQgPCBsZW5ndGgp
CiAgICAgICAgIGluZGV4ID0gc3RhdGljX2Nhc3Q8aW50PihkKTsKIAotICAgIEpTVmFsdWUgc2Vh
cmNoRWxlbWVudCA9IGFyZ3MuYXQoMCk7CisgICAgSlNWYWx1ZSBzZWFyY2hFbGVtZW50ID0gZXhl
Yy0+YXJndW1lbnQoMCk7CiAgICAgZm9yICg7IGluZGV4ID49IDA7IC0taW5kZXgpIHsKICAgICAg
ICAgSlNWYWx1ZSBlID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgaW5kZXgpOwogICAgICAg
ICBpZiAoIWUpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuQ29uc3Ry
dWN0b3IuY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9v
bGVhbkNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsOSArNTcsOSBAQCBDb25z
dHJ1Y3RUeXBlIEJvb2xlYW5Db25zdHJ1Y3Rvcjo6Z2V0Q29uCiB9CiAKIC8vIEVDTUEgMTUuNi4x
Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxCb29sZWFuQ29uc3RydWN0b3IoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitz
dGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxCb29sZWFuQ29uc3RydWN0b3IoRXhlY1N0
YXRlKiBleGVjKQogewotICAgIHJldHVybiBqc0Jvb2xlYW4oYXJncy5hdCgwKS50b0Jvb2xlYW4o
ZXhlYykpOworICAgIHJldHVybiBqc0Jvb2xlYW4oZXhlYy0+YXJndW1lbnQoMCkudG9Cb29sZWFu
KGV4ZWMpKTsKIH0KIAogQ2FsbFR5cGUgQm9vbGVhbkNvbnN0cnVjdG9yOjpnZXRDYWxsRGF0YShD
YWxsRGF0YSYgY2FsbERhdGEpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Q
cm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVh
blByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Cb29sZWFuUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsOCArMzIsOCBAQCBu
YW1lc3BhY2UgSlNDIHsKIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoQm9vbGVhblByb3RvdHlw
ZSk7CiAKIC8vIEZ1bmN0aW9ucwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBib29sZWFu
UHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBB
cmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJvb2xlYW5Qcm90b0Z1bmNW
YWx1ZU9mKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwor
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBib29sZWFuUHJvdG9GdW5jVG9TdHJpbmcoRXhl
Y1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJvb2xlYW5Qcm90b0Z1bmNW
YWx1ZU9mKEV4ZWNTdGF0ZSopOwogCiAvLyBFQ01BIDE1LjYuNAogCkBAIC01MSw4ICs1MSw5IEBA
IEJvb2xlYW5Qcm90b3R5cGU6OkJvb2xlYW5Qcm90b3R5cGUoRXhlY1MKIAogLy8gRUNNQSAxNS42
LjQuMiArIDE1LjYuNC4zCiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBib29sZWFuUHJvdG9GdW5j
VG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBj
b25zdCBBcmdMaXN0JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBib29sZWFuUHJvdG9GdW5jVG9T
dHJpbmcoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+
aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICh0aGlzVmFsdWUgPT0ganNCb29sZWFuKGZhbHNlKSkK
ICAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCAiZmFsc2UiKTsKIApAQCAt
NjksOCArNzAsOSBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYm9vbGVhblByb3RvRnVuY1RvCiAg
ICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCAidHJ1ZSIpOwogfQogCi1KU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYm9vbGVhblByb3RvRnVuY1ZhbHVlT2YoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWUgSlND
X0hPU1RfQ0FMTCBib29sZWFuUHJvdG9GdW5jVmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMpCiB7Cisg
ICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKHRo
aXNWYWx1ZS5pc0Jvb2xlYW4oKSkKICAgICAgICAgcmV0dXJuIHRoaXNWYWx1ZTsKIApJbmRleDog
SmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDE3ICsy
NiwxNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNhbGxEYXRhLmgiCiAKKyNp
bmNsdWRlICJFeGVjdXRhYmxlLmgiCisjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRl
ICJKU0Z1bmN0aW9uLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCiBKU1ZhbHVlIGNhbGwoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBDYWxsVHlwZSBjYWxsVHlwZSwgY29u
c3QgQ2FsbERhdGEmIGNhbGxEYXRhLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYg
YXJncykKIHsKLSAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVIb3N0KQotICAgICAgICByZXR1
cm4gY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWMsIGFzT2JqZWN0KGZ1bmN0aW9uT2JqZWN0
KSwgdGhpc1ZhbHVlLCBhcmdzKTsKLSAgICBBU1NFUlQoY2FsbFR5cGUgPT0gQ2FsbFR5cGVKUyk7
Ci0gICAgLy8gRklYTUU6IENhbiB0aGlzIGJlIGRvbmUgbW9yZSBlZmZpY2llbnRseSB1c2luZyB0
aGUgY2FsbERhdGE/Ci0gICAgcmV0dXJuIGFzRnVuY3Rpb24oZnVuY3Rpb25PYmplY3QpLT5jYWxs
KGV4ZWMsIHRoaXNWYWx1ZSwgYXJncyk7CisgICAgQVNTRVJUKGNhbGxUeXBlID09IENhbGxUeXBl
SlMgfHwgY2FsbFR5cGUgPT0gQ2FsbFR5cGVIb3N0KTsKKyAgICByZXR1cm4gZXhlYy0+aW50ZXJw
cmV0ZXIoKS0+ZXhlY3V0ZUNhbGwoZXhlYywgYXNPYmplY3QoZnVuY3Rpb25PYmplY3QpLCBjYWxs
VHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncywgZXhlYy0+ZXhjZXB0aW9uU2xvdCgpKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nh
bGxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5o
CShyZXZpc2lvbiA2MDM0MSkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FsbERhdGEuaAko
d29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
Q2FsbFR5cGVKUwogICAgIH07CiAKLSAgICB0eXBlZGVmIEpTVmFsdWUgKEpTQ19IT1NUX0NBTEwg
Kk5hdGl2ZUZ1bmN0aW9uKShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVl
LCBjb25zdCBBcmdMaXN0Jik7CisgICAgdHlwZWRlZiBKU1ZhbHVlIChKU0NfSE9TVF9DQUxMICpO
YXRpdmVGdW5jdGlvbikoRXhlY1N0YXRlKik7CiAKICAgICB1bmlvbiBDYWxsRGF0YSB7CiAgICAg
ICAgIHN0cnVjdCB7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5j
cHAJKHJldmlzaW9uIDYwMzQxKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3RE
YXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsMTAgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJDb25zdHJ1Y3REYXRhLmgiCiAKKyNpbmNsdWRlICJFeGVjdXRhYmxl
LmgiCisjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCisj
aW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTM0LDkg
KzM3LDIzIEBAIEpTT2JqZWN0KiBjb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjLCBKU1YKIHsKICAg
ICBpZiAoY29uc3RydWN0VHlwZSA9PSBDb25zdHJ1Y3RUeXBlSG9zdCkKICAgICAgICAgcmV0dXJu
IGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWMsIGFzT2JqZWN0KG9iamVjdCksIGFy
Z3MpOworCiAgICAgQVNTRVJUKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZUpTKTsKLSAg
ICAvLyBGSVhNRTogQ2FuIHRoaXMgYmUgZG9uZSBtb3JlIGVmZmljaWVudGx5IHVzaW5nIHRoZSBj
b25zdHJ1Y3REYXRhPwotICAgIHJldHVybiBhc0Z1bmN0aW9uKG9iamVjdCktPmNvbnN0cnVjdChl
eGVjLCBhcmdzKTsKKyAgICBKU0Z1bmN0aW9uKiBqc0Z1bmN0aW9uID0gYXNGdW5jdGlvbihvYmpl
Y3QpOworCisgICAgQVNTRVJUKCFqc0Z1bmN0aW9uLT5pc0hvc3RGdW5jdGlvbigpKTsKKyAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZTsKKyAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IGpzRnVuY3Rpb24t
PmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlKTsKKyAgICBpZiAocHJv
dG90eXBlLmlzT2JqZWN0KCkpCisgICAgICAgIHN0cnVjdHVyZSA9IGFzT2JqZWN0KHByb3RvdHlw
ZSktPmluaGVyaXRvcklEKCk7CisgICAgZWxzZQorICAgICAgICBzdHJ1Y3R1cmUgPSBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPmVtcHR5T2JqZWN0U3RydWN0dXJlKCk7CisgICAgSlNPYmpl
Y3QqIHRoaXNPYmogPSBuZXcgKGV4ZWMpIEpTT2JqZWN0KHN0cnVjdHVyZSk7CisKKyAgICBKU1Zh
bHVlIHJlc3VsdCA9IGV4ZWMtPmludGVycHJldGVyKCktPmV4ZWN1dGVDb25zdHJ1Y3QoanNGdW5j
dGlvbi0+anNFeGVjdXRhYmxlKCksIGV4ZWMsIGpzRnVuY3Rpb24sIHRoaXNPYmosIGFyZ3MsIGpz
RnVuY3Rpb24tPnNjb3BlKCkubm9kZSgpLCBleGVjLT5leGNlcHRpb25TbG90KCkpOworICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSB8fCAhcmVzdWx0LmlzT2JqZWN0KCkpCisgICAgICAgIHJl
dHVybiB0aGlzT2JqOworICAgIHJldHVybiBhc09iamVjdChyZXN1bHQpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rv
ci5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29u
c3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw5ICs1NCw5IEBAIG5hbWVzcGFjZSBK
U0MgewogCiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKERhdGVDb25zdHJ1Y3Rvcik7CiAKLXN0
YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVBhcnNlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBkYXRlTm93KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYp
Owotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlVVRDKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBkYXRlUGFyc2UoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGRhdGVOb3coRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVV
VEMoRXhlY1N0YXRlKik7CiAKIERhdGVDb25zdHJ1Y3Rvcjo6RGF0ZUNvbnN0cnVjdG9yKEV4ZWNT
dGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgTm9uTnVsbFBhc3NSZWZQ
dHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZSogcHJvdG90eXBlRnVuY3Rpb25TdHJ1
Y3R1cmUsIERhdGVQcm90b3R5cGUqIGRhdGVQcm90b3R5cGUpCiAgICAgOiBJbnRlcm5hbEZ1bmN0
aW9uKCZleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBJZGVudGlm
aWVyKGV4ZWMsIGRhdGVQcm90b3R5cGUtPmNsYXNzSW5mbygpLT5jbGFzc05hbWUpKQpAQCAtMTI4
LDcgKzEyOCw3IEBAIENvbnN0cnVjdFR5cGUgRGF0ZUNvbnN0cnVjdG9yOjpnZXRDb25zdHIKIH0K
IAogLy8gRUNNQSAxNS45LjIKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbERhdGUo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorc3Rh
dGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsRGF0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgdGltZV90IGxvY2FsVGltZSA9IHRpbWUoMCk7CiAgICAgdG0gbG9jYWxUTTsKQEAgLTE0Nywz
NyArMTQ3LDM3IEBAIENhbGxUeXBlIERhdGVDb25zdHJ1Y3Rvcjo6Z2V0Q2FsbERhdGEoQ2EKICAg
ICByZXR1cm4gQ2FsbFR5cGVIb3N0OwogfQogCi1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGRhdGVQYXJzZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYgYXJncykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVBhcnNlKEV4ZWNT
dGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgcGFyc2VEYXRlKGV4ZWMs
IGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpKTsKKyAgICByZXR1cm4ganNOdW1iZXIoZXhlYywg
cGFyc2VEYXRlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSk7CiB9CiAK
LXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZU5vdyhFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGRhdGVOb3coRXhlY1N0YXRlKiBleGVjKQogewogICAgIHJldHVybiBqc051bWJlcihl
eGVjLCBqc0N1cnJlbnRUaW1lKCkpOwogfQogCi1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGRhdGVVVEMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpIAorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlVVRDKEV4ZWNTdGF0
ZSogZXhlYykgCiB7Ci0gICAgaW50IG4gPSBhcmdzLnNpemUoKTsKLSAgICBpZiAoaXNuYW4oYXJn
cy5hdCgwKS50b051bWJlcihleGVjKSkKLSAgICAgICAgICAgIHx8IGlzbmFuKGFyZ3MuYXQoMSku
dG9OdW1iZXIoZXhlYykpCi0gICAgICAgICAgICB8fCAobiA+PSAzICYmIGlzbmFuKGFyZ3MuYXQo
MikudG9OdW1iZXIoZXhlYykpKQotICAgICAgICAgICAgfHwgKG4gPj0gNCAmJiBpc25hbihhcmdz
LmF0KDMpLnRvTnVtYmVyKGV4ZWMpKSkKLSAgICAgICAgICAgIHx8IChuID49IDUgJiYgaXNuYW4o
YXJncy5hdCg0KS50b051bWJlcihleGVjKSkpCi0gICAgICAgICAgICB8fCAobiA+PSA2ICYmIGlz
bmFuKGFyZ3MuYXQoNSkudG9OdW1iZXIoZXhlYykpKQotICAgICAgICAgICAgfHwgKG4gPj0gNyAm
JiBpc25hbihhcmdzLmF0KDYpLnRvTnVtYmVyKGV4ZWMpKSkpCisgICAgaW50IG4gPSBleGVjLT5h
cmd1bWVudENvdW50KCk7CisgICAgaWYgKGlzbmFuKGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVy
KGV4ZWMpKQorICAgICAgICAgICAgfHwgaXNuYW4oZXhlYy0+YXJndW1lbnQoMSkudG9OdW1iZXIo
ZXhlYykpCisgICAgICAgICAgICB8fCAobiA+PSAzICYmIGlzbmFuKGV4ZWMtPmFyZ3VtZW50KDIp
LnRvTnVtYmVyKGV4ZWMpKSkKKyAgICAgICAgICAgIHx8IChuID49IDQgJiYgaXNuYW4oZXhlYy0+
YXJndW1lbnQoMykudG9OdW1iZXIoZXhlYykpKQorICAgICAgICAgICAgfHwgKG4gPj0gNSAmJiBp
c25hbihleGVjLT5hcmd1bWVudCg0KS50b051bWJlcihleGVjKSkpCisgICAgICAgICAgICB8fCAo
biA+PSA2ICYmIGlzbmFuKGV4ZWMtPmFyZ3VtZW50KDUpLnRvTnVtYmVyKGV4ZWMpKSkKKyAgICAg
ICAgICAgIHx8IChuID49IDcgJiYgaXNuYW4oZXhlYy0+YXJndW1lbnQoNikudG9OdW1iZXIoZXhl
YykpKSkKICAgICAgICAgcmV0dXJuIGpzTmFOKGV4ZWMpOwogCiAgICAgR3JlZ29yaWFuRGF0ZVRp
bWUgdDsKLSAgICBpbnQgeWVhciA9IGFyZ3MuYXQoMCkudG9JbnQzMihleGVjKTsKKyAgICBpbnQg
eWVhciA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7CiAgICAgdC55ZWFyID0gKHll
YXIgPj0gMCAmJiB5ZWFyIDw9IDk5KSA/IHllYXIgOiB5ZWFyIC0gMTkwMDsKLSAgICB0Lm1vbnRo
ID0gYXJncy5hdCgxKS50b0ludDMyKGV4ZWMpOwotICAgIHQubW9udGhEYXkgPSAobiA+PSAzKSA/
IGFyZ3MuYXQoMikudG9JbnQzMihleGVjKSA6IDE7Ci0gICAgdC5ob3VyID0gYXJncy5hdCgzKS50
b0ludDMyKGV4ZWMpOwotICAgIHQubWludXRlID0gYXJncy5hdCg0KS50b0ludDMyKGV4ZWMpOwot
ICAgIHQuc2Vjb25kID0gYXJncy5hdCg1KS50b0ludDMyKGV4ZWMpOwotICAgIGRvdWJsZSBtcyA9
IChuID49IDcpID8gYXJncy5hdCg2KS50b051bWJlcihleGVjKSA6IDA7CisgICAgdC5tb250aCA9
IGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7CisgICAgdC5tb250aERheSA9IChuID49
IDMpID8gZXhlYy0+YXJndW1lbnQoMikudG9JbnQzMihleGVjKSA6IDE7CisgICAgdC5ob3VyID0g
ZXhlYy0+YXJndW1lbnQoMykudG9JbnQzMihleGVjKTsKKyAgICB0Lm1pbnV0ZSA9IGV4ZWMtPmFy
Z3VtZW50KDQpLnRvSW50MzIoZXhlYyk7CisgICAgdC5zZWNvbmQgPSBleGVjLT5hcmd1bWVudCg1
KS50b0ludDMyKGV4ZWMpOworICAgIGRvdWJsZSBtcyA9IChuID49IDcpID8gZXhlYy0+YXJndW1l
bnQoNikudG9OdW1iZXIoZXhlYykgOiAwOwogICAgIHJldHVybiBqc051bWJlcihleGVjLCB0aW1l
Q2xpcChncmVnb3JpYW5EYXRlVGltZVRvTVMoZXhlYywgdCwgbXMsIHRydWUpKSk7CiB9CiAKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmNwcAkocmV2aXNpb24gNjAz
NDEpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03Myw1MiArNzMsNTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEFTU0VSVF9DTEFT
U19GSVRTX0lOX0NFTEwoRGF0ZVByb3RvdHlwZSk7CiAKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZGF0ZVByb3RvRnVuY0dldERhdGUoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
LCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90
b0Z1bmNHZXREYXkoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0
Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRGdWxsWWVh
cihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRp
YyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldEhvdXJzKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0TWlsbGlTZWNvbmRzKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBkYXRlUHJvdG9GdW5jR2V0TWludXRlcyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFs
dWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVBy
b3RvRnVuY0dldE1vbnRoKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0U2Vj
b25kcyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0
YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFRpbWUoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRUaW1lem9uZU9mZnNldChFeGVjU3RhdGUqLCBK
U09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVUQ0RhdGUoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBK
U1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRh
dGVQcm90b0Z1bmNHZXRVVENEYXkoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25z
dCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNH
ZXRVVENGdWxsWWVhcihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xp
c3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVUQ0hv
dXJzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3Rh
dGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VVRDTWlsbGlzZWNvbmRz
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGlj
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VVRDTWludXRlcyhFeGVjU3Rh
dGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVUQ01vbnRoKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBkYXRlUHJvdG9GdW5jR2V0VVRDU2Vjb25kcyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpT
VmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0
ZVByb3RvRnVuY0dldFllYXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBB
cmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRE
YXRlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3Rh
dGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0RnVsbFllYXIoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRIb3VycyhFeGVjU3RhdGUqLCBKU09iamVj
dCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZGF0ZVByb3RvRnVuY1NldE1pbGxpU2Vjb25kcyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpT
VmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0
ZVByb3RvRnVuY1NldE1pbnV0ZXMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25z
dCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNT
ZXRNb250aChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsK
LXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFNlY29uZHMoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRUaW1lKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBkYXRlUHJvdG9GdW5jU2V0VVRDRGF0ZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFs
dWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVBy
b3RvRnVuY1NldFVUQ0Z1bGxZZWFyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5j
U2V0VVRDSG91cnMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0
Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRVVENNaWxs
aXNlY29uZHMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7
Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRVVENNaW51dGVz
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGlj
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0VVRDTW9udGgoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRVVENTZWNvbmRzKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBkYXRlUHJvdG9GdW5jU2V0WWVhcihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3Rv
RnVuY1RvRGF0ZVN0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvR01U
U3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwot
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9Mb2NhbGVEYXRlU3Ry
aW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3Rh
dGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb0xvY2FsZVRpbWVTdHJpbmcoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqLCBKU09iamVj
dCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZGF0ZVByb3RvRnVuY1RvVGltZVN0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFs
dWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVBy
b3RvRnVuY1RvVVRDU3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3Qg
QXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9J
U09TdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7
Ci0KLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvSlNPTihFeGVj
U3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldERhdGUoRXhlY1N0YXRlKik7CitzdGF0
aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXREYXkoRXhlY1N0YXRlKik7
CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRGdWxsWWVhcihF
eGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dl
dEhvdXJzKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJv
dG9GdW5jR2V0TWlsbGlTZWNvbmRzKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0TWludXRlcyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldE1vbnRoKEV4ZWNTdGF0ZSopOworc3Rh
dGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0U2Vjb25kcyhFeGVjU3Rh
dGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFRpbWUo
RXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNH
ZXRUaW1lem9uZU9mZnNldChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZGF0ZVByb3RvRnVuY0dldFVUQ0RhdGUoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENEYXkoRXhlY1N0YXRlKik7CitzdGF0aWMg
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENGdWxsWWVhcihFeGVjU3Rh
dGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVUQ0hv
dXJzKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9G
dW5jR2V0VVRDTWlsbGlzZWNvbmRzKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VVRDTWludXRlcyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVUQ01vbnRoKEV4ZWNTdGF0ZSop
Oworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VVRDU2Vjb25k
cyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVu
Y0dldFllYXIoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQ
cm90b0Z1bmNTZXREYXRlKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBkYXRlUHJvdG9GdW5jU2V0RnVsbFllYXIoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRIb3VycyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldE1pbGxpU2Vjb25kcyhFeGVjU3Rh
dGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldE1pbnV0
ZXMoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1
bmNTZXRNb250aChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0
ZVByb3RvRnVuY1NldFNlY29uZHMoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRUaW1lKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0VVRDRGF0ZShFeGVjU3RhdGUqKTsKK3N0YXRp
YyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFVUQ0Z1bGxZZWFyKEV4ZWNT
dGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0VVRD
SG91cnMoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90
b0Z1bmNTZXRVVENNaWxsaXNlY29uZHMoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRVVENNaW51dGVzKEV4ZWNTdGF0ZSopOworc3RhdGlj
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0VVRDTW9udGgoRXhlY1N0YXRl
Kik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRVVENTZWNv
bmRzKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9G
dW5jU2V0WWVhcihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0
ZVByb3RvRnVuY1RvRGF0ZVN0cmluZyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvR01UU3RyaW5nKEV4ZWNTdGF0ZSopOworc3RhdGljIEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9Mb2NhbGVEYXRlU3RyaW5nKEV4ZWNT
dGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9Mb2Nh
bGVTdHJpbmcoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQ
cm90b0Z1bmNUb0xvY2FsZVRpbWVTdHJpbmcoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvVGltZVN0cmluZyhFeGVjU3RhdGUq
KTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvVVRDU3RyaW5n
KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5j
VG9JU09TdHJpbmcoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRh
dGVQcm90b0Z1bmNUb0pTT04oRXhlY1N0YXRlKik7CiAKIH0KIApAQCAtMTQ2LDcgKzE0NSw3IEBA
IHN0YXRpYyBDRkRhdGVGb3JtYXR0ZXJTdHlsZSBzdHlsZUZyb21BcmcKICAgICByZXR1cm4gZGVm
YXVsdFN0eWxlOwogfQogCi1zdGF0aWMgSlNDZWxsKiBmb3JtYXRMb2NhbGVEYXRlKEV4ZWNTdGF0
ZSogZXhlYywgRGF0ZUluc3RhbmNlKiwgZG91YmxlIHRpbWVJbk1pbGxpc2Vjb25kcywgTG9jYWxl
RGF0ZVRpbWVGb3JtYXQgZm9ybWF0LCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGljIEpTQ2Vs
bCogZm9ybWF0TG9jYWxlRGF0ZShFeGVjU3RhdGUqIGV4ZWMsIERhdGVJbnN0YW5jZSosIGRvdWJs
ZSB0aW1lSW5NaWxsaXNlY29uZHMsIExvY2FsZURhdGVUaW1lRm9ybWF0IGZvcm1hdCkKIHsKICAg
ICBDRkRhdGVGb3JtYXR0ZXJTdHlsZSBkYXRlU3R5bGUgPSAoZm9ybWF0ICE9IExvY2FsZVRpbWUg
PyBrQ0ZEYXRlRm9ybWF0dGVyTG9uZ1N0eWxlIDoga0NGRGF0ZUZvcm1hdHRlck5vU3R5bGUpOwog
ICAgIENGRGF0ZUZvcm1hdHRlclN0eWxlIHRpbWVTdHlsZSA9IChmb3JtYXQgIT0gTG9jYWxlRGF0
ZSA/IGtDRkRhdGVGb3JtYXR0ZXJMb25nU3R5bGUgOiBrQ0ZEYXRlRm9ybWF0dGVyTm9TdHlsZSk7
CkBAIC0xNTQsMTYgKzE1MywxNiBAQCBzdGF0aWMgSlNDZWxsKiBmb3JtYXRMb2NhbGVEYXRlKEV4
ZWNTdGF0CiAgICAgYm9vbCB1c2VDdXN0b21Gb3JtYXQgPSBmYWxzZTsKICAgICBVU3RyaW5nIGN1
c3RvbUZvcm1hdFN0cmluZzsKIAotICAgIFVTdHJpbmcgYXJnMFN0cmluZyA9IGFyZ3MuYXQoMCku
dG9TdHJpbmcoZXhlYyk7Ci0gICAgaWYgKGFyZzBTdHJpbmcgPT0gImN1c3RvbSIgJiYgIWFyZ3Mu
YXQoMSkuaXNVbmRlZmluZWQoKSkgeworICAgIFVTdHJpbmcgYXJnMFN0cmluZyA9IGV4ZWMtPmFy
Z3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpOworICAgIGlmIChhcmcwU3RyaW5nID09ICJjdXN0b20i
ICYmICFleGVjLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgIHVzZUN1c3Rv
bUZvcm1hdCA9IHRydWU7Ci0gICAgICAgIGN1c3RvbUZvcm1hdFN0cmluZyA9IGFyZ3MuYXQoMSku
dG9TdHJpbmcoZXhlYyk7Ci0gICAgfSBlbHNlIGlmIChmb3JtYXQgPT0gTG9jYWxlRGF0ZUFuZFRp
bWUgJiYgIWFyZ3MuYXQoMSkuaXNVbmRlZmluZWQoKSkgeworICAgICAgICBjdXN0b21Gb3JtYXRT
dHJpbmcgPSBleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKTsKKyAgICB9IGVsc2UgaWYg
KGZvcm1hdCA9PSBMb2NhbGVEYXRlQW5kVGltZSAmJiAhZXhlYy0+YXJndW1lbnQoMSkuaXNVbmRl
ZmluZWQoKSkgewogICAgICAgICBkYXRlU3R5bGUgPSBzdHlsZUZyb21BcmdTdHJpbmcoYXJnMFN0
cmluZywgZGF0ZVN0eWxlKTsKLSAgICAgICAgdGltZVN0eWxlID0gc3R5bGVGcm9tQXJnU3RyaW5n
KGFyZ3MuYXQoMSkudG9TdHJpbmcoZXhlYyksIHRpbWVTdHlsZSk7Ci0gICAgfSBlbHNlIGlmIChm
b3JtYXQgIT0gTG9jYWxlVGltZSAmJiAhYXJncy5hdCgwKS5pc1VuZGVmaW5lZCgpKQorICAgICAg
ICB0aW1lU3R5bGUgPSBzdHlsZUZyb21BcmdTdHJpbmcoZXhlYy0+YXJndW1lbnQoMSkudG9TdHJp
bmcoZXhlYyksIHRpbWVTdHlsZSk7CisgICAgfSBlbHNlIGlmIChmb3JtYXQgIT0gTG9jYWxlVGlt
ZSAmJiAhZXhlYy0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSkKICAgICAgICAgZGF0ZVN0eWxl
ID0gc3R5bGVGcm9tQXJnU3RyaW5nKGFyZzBTdHJpbmcsIGRhdGVTdHlsZSk7Ci0gICAgZWxzZSBp
ZiAoZm9ybWF0ICE9IExvY2FsZURhdGUgJiYgIWFyZ3MuYXQoMCkuaXNVbmRlZmluZWQoKSkKKyAg
ICBlbHNlIGlmIChmb3JtYXQgIT0gTG9jYWxlRGF0ZSAmJiAhZXhlYy0+YXJndW1lbnQoMCkuaXNV
bmRlZmluZWQoKSkKICAgICAgICAgdGltZVN0eWxlID0gc3R5bGVGcm9tQXJnU3RyaW5nKGFyZzBT
dHJpbmcsIHRpbWVTdHlsZSk7CiAKICAgICBDRkxvY2FsZVJlZiBsb2NhbGUgPSBDRkxvY2FsZUNv
cHlDdXJyZW50KCk7CkBAIC0yNzQsNyArMjczLDcgQEAgc3RhdGljIEpTQ2VsbCogZm9ybWF0TG9j
YWxlRGF0ZShFeGVjU3RhdAogICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgdGlt
ZWJ1ZmZlcik7CiB9CiAKLXN0YXRpYyBKU0NlbGwqIGZvcm1hdExvY2FsZURhdGUoRXhlY1N0YXRl
KiBleGVjLCBEYXRlSW5zdGFuY2UqIGRhdGVPYmplY3QsIGRvdWJsZSwgTG9jYWxlRGF0ZVRpbWVG
b3JtYXQgZm9ybWF0LCBjb25zdCBBcmdMaXN0JikKK3N0YXRpYyBKU0NlbGwqIGZvcm1hdExvY2Fs
ZURhdGUoRXhlY1N0YXRlKiBleGVjLCBEYXRlSW5zdGFuY2UqIGRhdGVPYmplY3QsIGRvdWJsZSwg
TG9jYWxlRGF0ZVRpbWVGb3JtYXQgZm9ybWF0KQogewogICAgIGNvbnN0IEdyZWdvcmlhbkRhdGVU
aW1lKiBncmVnb3JpYW5EYXRlVGltZSA9IGRhdGVPYmplY3QtPmdyZWdvcmlhbkRhdGVUaW1lKGV4
ZWMpOwogICAgIGlmICghZ3JlZ29yaWFuRGF0ZVRpbWUpCkBAIC0yODgsMTIgKzI4NywxMiBAQCBz
dGF0aWMgSlNDZWxsKiBmb3JtYXRMb2NhbGVEYXRlKEV4ZWNTdGF0CiAvLyBtcyAocmVwcmVzZW50
aW5nIG1pbGxpc2Vjb25kcykgYW5kIHQgKHJlcHJlc2VudGluZyB0aGUgcmVzdCBvZiB0aGUgZGF0
ZSBzdHJ1Y3R1cmUpIGFwcHJvcHJpYXRlbHkuCiAvLwogLy8gRm9ybWF0IG9mIG1lbWJlciBmdW5j
dGlvbjogZihbaG91cixdIFttaW4sXSBbc2VjLF0gW21zXSkKLXN0YXRpYyBib29sIGZpbGxTdHJ1
Y3R1cmVzVXNpbmdUaW1lQXJncyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Ms
IGludCBtYXhBcmdzLCBkb3VibGUqIG1zLCBHcmVnb3JpYW5EYXRlVGltZSogdCkKK3N0YXRpYyBi
b29sIGZpbGxTdHJ1Y3R1cmVzVXNpbmdUaW1lQXJncyhFeGVjU3RhdGUqIGV4ZWMsIGludCBtYXhB
cmdzLCBkb3VibGUqIG1zLCBHcmVnb3JpYW5EYXRlVGltZSogdCkKIHsKICAgICBkb3VibGUgbWls
bGlzZWNvbmRzID0gMDsKICAgICBib29sIG9rID0gdHJ1ZTsKICAgICBpbnQgaWR4ID0gMDsKLSAg
ICBpbnQgbnVtQXJncyA9IGFyZ3Muc2l6ZSgpOworICAgIGludCBudW1BcmdzID0gZXhlYy0+YXJn
dW1lbnRDb3VudCgpOwogICAgIAogICAgIC8vIEpTIGFsbG93cyBleHRyYSB0cmFpbGluZyBhcmd1
bWVudHMgLS0gaWdub3JlIHRoZW0KICAgICBpZiAobnVtQXJncyA+IG1heEFyZ3MpCkBAIC0zMDIs
MTkgKzMwMSwxOSBAQCBzdGF0aWMgYm9vbCBmaWxsU3RydWN0dXJlc1VzaW5nVGltZUFyZ3MoCiAg
ICAgLy8gaG91cnMKICAgICBpZiAobWF4QXJncyA+PSA0ICYmIGlkeCA8IG51bUFyZ3MpIHsKICAg
ICAgICAgdC0+aG91ciA9IDA7Ci0gICAgICAgIG1pbGxpc2Vjb25kcyArPSBhcmdzLmF0KGlkeCsr
KS50b0ludDMyKGV4ZWMsIG9rKSAqIG1zUGVySG91cjsKKyAgICAgICAgbWlsbGlzZWNvbmRzICs9
IGV4ZWMtPmFyZ3VtZW50KGlkeCsrKS50b0ludDMyKGV4ZWMsIG9rKSAqIG1zUGVySG91cjsKICAg
ICB9CiAKICAgICAvLyBtaW51dGVzCiAgICAgaWYgKG1heEFyZ3MgPj0gMyAmJiBpZHggPCBudW1B
cmdzICYmIG9rKSB7CiAgICAgICAgIHQtPm1pbnV0ZSA9IDA7Ci0gICAgICAgIG1pbGxpc2Vjb25k
cyArPSBhcmdzLmF0KGlkeCsrKS50b0ludDMyKGV4ZWMsIG9rKSAqIG1zUGVyTWludXRlOworICAg
ICAgICBtaWxsaXNlY29uZHMgKz0gZXhlYy0+YXJndW1lbnQoaWR4KyspLnRvSW50MzIoZXhlYywg
b2spICogbXNQZXJNaW51dGU7CiAgICAgfQogICAgIAogICAgIC8vIHNlY29uZHMKICAgICBpZiAo
bWF4QXJncyA+PSAyICYmIGlkeCA8IG51bUFyZ3MgJiYgb2spIHsKICAgICAgICAgdC0+c2Vjb25k
ID0gMDsKLSAgICAgICAgbWlsbGlzZWNvbmRzICs9IGFyZ3MuYXQoaWR4KyspLnRvSW50MzIoZXhl
Yywgb2spICogbXNQZXJTZWNvbmQ7CisgICAgICAgIG1pbGxpc2Vjb25kcyArPSBleGVjLT5hcmd1
bWVudChpZHgrKykudG9JbnQzMihleGVjLCBvaykgKiBtc1BlclNlY29uZDsKICAgICB9CiAgICAg
CiAgICAgaWYgKCFvaykKQEAgLTMyMiw3ICszMjEsNyBAQCBzdGF0aWMgYm9vbCBmaWxsU3RydWN0
dXJlc1VzaW5nVGltZUFyZ3MoCiAgICAgICAgIAogICAgIC8vIG1pbGxpc2Vjb25kcwogICAgIGlm
IChpZHggPCBudW1BcmdzKSB7Ci0gICAgICAgIGRvdWJsZSBtaWxsaXMgPSBhcmdzLmF0KGlkeCku
dG9OdW1iZXIoZXhlYyk7CisgICAgICAgIGRvdWJsZSBtaWxsaXMgPSBleGVjLT5hcmd1bWVudChp
ZHgpLnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICBvayA9IGlzZmluaXRlKG1pbGxpcyk7CiAgICAg
ICAgIG1pbGxpc2Vjb25kcyArPSBtaWxsaXM7CiAgICAgfSBlbHNlCkBAIC0zMzYsMTEgKzMzNSwx
MSBAQCBzdGF0aWMgYm9vbCBmaWxsU3RydWN0dXJlc1VzaW5nVGltZUFyZ3MoCiAvLyBtcyAocmVw
cmVzZW50aW5nIG1pbGxpc2Vjb25kcykgYW5kIHQgKHJlcHJlc2VudGluZyB0aGUgcmVzdCBvZiB0
aGUgZGF0ZSBzdHJ1Y3R1cmUpIGFwcHJvcHJpYXRlbHkuCiAvLwogLy8gRm9ybWF0IG9mIG1lbWJl
ciBmdW5jdGlvbjogZihbeWVhcnMsXSBbbW9udGhzLF0gW2RheXNdKQotc3RhdGljIGJvb2wgZmls
bFN0cnVjdHVyZXNVc2luZ0RhdGVBcmdzKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgQXJnTGlzdCYg
YXJncywgaW50IG1heEFyZ3MsIGRvdWJsZSAqbXMsIEdyZWdvcmlhbkRhdGVUaW1lICp0KQorc3Rh
dGljIGJvb2wgZmlsbFN0cnVjdHVyZXNVc2luZ0RhdGVBcmdzKEV4ZWNTdGF0ZSAqZXhlYywgaW50
IG1heEFyZ3MsIGRvdWJsZSAqbXMsIEdyZWdvcmlhbkRhdGVUaW1lICp0KQogewogICAgIGludCBp
ZHggPSAwOwogICAgIGJvb2wgb2sgPSB0cnVlOwotICAgIGludCBudW1BcmdzID0gYXJncy5zaXpl
KCk7CisgICAgaW50IG51bUFyZ3MgPSBleGVjLT5hcmd1bWVudENvdW50KCk7CiAgIAogICAgIC8v
IEpTIGFsbG93cyBleHRyYSB0cmFpbGluZyBhcmd1bWVudHMgLS0gaWdub3JlIHRoZW0KICAgICBp
ZiAobnVtQXJncyA+IG1heEFyZ3MpCkBAIC0zNDgsMTYgKzM0NywxNiBAQCBzdGF0aWMgYm9vbCBm
aWxsU3RydWN0dXJlc1VzaW5nRGF0ZUFyZ3MoCiAgIAogICAgIC8vIHllYXJzCiAgICAgaWYgKG1h
eEFyZ3MgPj0gMyAmJiBpZHggPCBudW1BcmdzKQotICAgICAgICB0LT55ZWFyID0gYXJncy5hdChp
ZHgrKykudG9JbnQzMihleGVjLCBvaykgLSAxOTAwOworICAgICAgICB0LT55ZWFyID0gZXhlYy0+
YXJndW1lbnQoaWR4KyspLnRvSW50MzIoZXhlYywgb2spIC0gMTkwMDsKICAgICAKICAgICAvLyBt
b250aHMKICAgICBpZiAobWF4QXJncyA+PSAyICYmIGlkeCA8IG51bUFyZ3MgJiYgb2spICAgCi0g
ICAgICAgIHQtPm1vbnRoID0gYXJncy5hdChpZHgrKykudG9JbnQzMihleGVjLCBvayk7CisgICAg
ICAgIHQtPm1vbnRoID0gZXhlYy0+YXJndW1lbnQoaWR4KyspLnRvSW50MzIoZXhlYywgb2spOwog
ICAgIAogICAgIC8vIGRheXMKICAgICBpZiAoaWR4IDwgbnVtQXJncyAmJiBvaykgeyAgIAogICAg
ICAgICB0LT5tb250aERheSA9IDA7Ci0gICAgICAgICptcyArPSBhcmdzLmF0KGlkeCkudG9JbnQz
MihleGVjLCBvaykgKiBtc1BlckRheTsKKyAgICAgICAgKm1zICs9IGV4ZWMtPmFyZ3VtZW50KGlk
eCkudG9JbnQzMihleGVjLCBvaykgKiBtc1BlckRheTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJu
IG9rOwpAQCAtNDM4LDggKzQzNyw5IEBAIGJvb2wgRGF0ZVByb3RvdHlwZTo6Z2V0T3duUHJvcGVy
dHlEZXNjcmkKIAogLy8gRnVuY3Rpb25zCiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJv
dG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1Zh
bHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5j
VG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhl
Yy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZEYXRlSW5z
dGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3Ip
OwogCkBAIC00NTUsOCArNDU1LDkgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1
bmNUb1N0cgogICAgIHJldHVybiBqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsIGRhdGUsICIg
IiwgdGltZSk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9VVENT
dHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25z
dCBBcmdMaXN0JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9VVENTdHJp
bmcoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9z
dFRoaXNWYWx1ZSgpOwogICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6
OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCkBA
IC00NzIsOCArNDczLDkgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb1VU
QwogICAgIHJldHVybiBqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsIGRhdGUsICIgIiwgdGlt
ZSk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9JU09TdHJpbmco
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdM
aXN0JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9JU09TdHJpbmcoRXhl
Y1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNW
YWx1ZSgpOwogICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6OmluZm8p
KQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogICAgIApAQCAt
NDkwLDggKzQ5Miw5IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9JU08K
ICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsIGJ1ZmZlcik7CiB9CiAKLUpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9EYXRlU3RyaW5nKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvRGF0ZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMp
CiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAg
aWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkRhdGVJbnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKQEAgLTUwNSw4ICs1MDgsOSBAQCBK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvRGF0CiAgICAgcmV0dXJuIGpzTm9u
dHJpdmlhbFN0cmluZyhleGVjLCBkYXRlKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRh
dGVQcm90b0Z1bmNUb1RpbWVTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFs
dWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRl
UHJvdG9GdW5jVG9UaW1lU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAoIXRoaXNWYWx1ZS5pbmhl
cml0cygmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhl
YywgVHlwZUVycm9yKTsKIApAQCAtNTIwLDQzICs1MjQsNDggQEAgSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGRhdGVQcm90b0Z1bmNUb1RpbQogICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhl
YywgdGltZSk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9Mb2Nh
bGVTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNU
b0xvY2FsZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUg
PSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkRh
dGVJbnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVF
cnJvcik7CiAKICAgICBEYXRlSW5zdGFuY2UqIHRoaXNEYXRlT2JqID0gYXNEYXRlSW5zdGFuY2Uo
dGhpc1ZhbHVlKTsgCi0gICAgcmV0dXJuIGZvcm1hdExvY2FsZURhdGUoZXhlYywgdGhpc0RhdGVP
YmosIHRoaXNEYXRlT2JqLT5pbnRlcm5hbE51bWJlcigpLCBMb2NhbGVEYXRlQW5kVGltZSwgYXJn
cyk7CisgICAgcmV0dXJuIGZvcm1hdExvY2FsZURhdGUoZXhlYywgdGhpc0RhdGVPYmosIHRoaXNE
YXRlT2JqLT5pbnRlcm5hbE51bWJlcigpLCBMb2NhbGVEYXRlQW5kVGltZSk7CiB9CiAKLUpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9Mb2NhbGVEYXRlU3RyaW5nKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJn
cykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9Mb2NhbGVEYXRlU3RyaW5n
KEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RU
aGlzVmFsdWUoKTsKICAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmRGF0ZUluc3RhbmNlOjpp
bmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAogICAg
IERhdGVJbnN0YW5jZSogdGhpc0RhdGVPYmogPSBhc0RhdGVJbnN0YW5jZSh0aGlzVmFsdWUpOyAK
LSAgICByZXR1cm4gZm9ybWF0TG9jYWxlRGF0ZShleGVjLCB0aGlzRGF0ZU9iaiwgdGhpc0RhdGVP
YmotPmludGVybmFsTnVtYmVyKCksIExvY2FsZURhdGUsIGFyZ3MpOworICAgIHJldHVybiBmb3Jt
YXRMb2NhbGVEYXRlKGV4ZWMsIHRoaXNEYXRlT2JqLCB0aGlzRGF0ZU9iai0+aW50ZXJuYWxOdW1i
ZXIoKSwgTG9jYWxlRGF0ZSk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9G
dW5jVG9Mb2NhbGVUaW1lU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVl
IHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBk
YXRlUHJvdG9GdW5jVG9Mb2NhbGVUaW1lU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBK
U1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAoIXRoaXNW
YWx1ZS5pbmhlcml0cygmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAogICAgIERhdGVJbnN0YW5jZSogdGhpc0RhdGVPYmog
PSBhc0RhdGVJbnN0YW5jZSh0aGlzVmFsdWUpOyAKLSAgICByZXR1cm4gZm9ybWF0TG9jYWxlRGF0
ZShleGVjLCB0aGlzRGF0ZU9iaiwgdGhpc0RhdGVPYmotPmludGVybmFsTnVtYmVyKCksIExvY2Fs
ZVRpbWUsIGFyZ3MpOworICAgIHJldHVybiBmb3JtYXRMb2NhbGVEYXRlKGV4ZWMsIHRoaXNEYXRl
T2JqLCB0aGlzRGF0ZU9iai0+aW50ZXJuYWxOdW1iZXIoKSwgTG9jYWxlVGltZSk7CiB9CiAKLUpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VGltZShFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRUaW1lKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAg
ICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAoIXRo
aXNWYWx1ZS5pbmhlcml0cygmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAogICAgIHJldHVybiBhc0RhdGVJbnN0YW5jZSh0
aGlzVmFsdWUpLT5pbnRlcm5hbFZhbHVlKCk7IAogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZGF0ZVByb3RvRnVuY0dldEZ1bGxZZWFyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0
ZVByb3RvRnVuY0dldEZ1bGxZZWFyKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAoIXRoaXNWYWx1ZS5pbmhl
cml0cygmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhl
YywgVHlwZUVycm9yKTsKIApAQCAtNTY4LDggKzU3Nyw5IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBkYXRlUHJvdG9GdW5jR2V0RnUKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgMTkwMCArIGdy
ZWdvcmlhbkRhdGVUaW1lLT55ZWFyKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQ
cm90b0Z1bmNHZXRVVENGdWxsWWVhcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1
ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQ
cm90b0Z1bmNHZXRVVENGdWxsWWVhcihFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0
aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKCF0aGlzVmFsdWUuaW5o
ZXJpdHMoJkRhdGVJbnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4
ZWMsIFR5cGVFcnJvcik7CiAKQEAgLTU4MSw4ICs1OTEsOSBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZGF0ZVByb3RvRnVuY0dldFVUCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIDE5MDAgKyBn
cmVnb3JpYW5EYXRlVGltZS0+eWVhcik7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRl
UHJvdG9GdW5jVG9HTVRTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUg
dGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJv
dG9GdW5jVG9HTVRTdHJpbmcoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRz
KCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBU
eXBlRXJyb3IpOwogCkBAIC01OTgsOCArNjA5LDkgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRh
dGVQcm90b0Z1bmNUb0dNVAogICAgIHJldHVybiBqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMs
IGRhdGUsICIgIiwgdGltZSk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9G
dW5jR2V0TW9udGgoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVl
LCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0
TW9udGgoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+
aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZEYXRlSW5zdGFu
Y2U6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwog
CkBAIC02MTEsOCArNjIzLDkgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNH
ZXRNbwogICAgIHJldHVybiBqc051bWJlcihleGVjLCBncmVnb3JpYW5EYXRlVGltZS0+bW9udGgp
OwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVUQ01vbnRoKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlz
dCYpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVUQ01vbnRoKEV4ZWNT
dGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFs
dWUoKTsKICAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmRGF0ZUluc3RhbmNlOjppbmZvKSkK
ICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIApAQCAtNjI0LDgg
KzYzNyw5IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VVQKICAgICBy
ZXR1cm4ganNOdW1iZXIoZXhlYywgZ3JlZ29yaWFuRGF0ZVRpbWUtPm1vbnRoKTsKIH0KIAotSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXREYXRlKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldERhdGUoRXhlY1N0YXRlKiBleGVjKQogeworICAg
IEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICghdGhp
c1ZhbHVlLmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhy
b3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCkBAIC02MzcsOCArNjUxLDkgQEAgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXREYQogICAgIHJldHVybiBqc051bWJlcihleGVj
LCBncmVnb3JpYW5EYXRlVGltZS0+bW9udGhEYXkpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZGF0ZVByb3RvRnVuY0dldFVUQ0RhdGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpT
VmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBk
YXRlUHJvdG9GdW5jR2V0VVRDRGF0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0
aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKCF0aGlzVmFsdWUuaW5o
ZXJpdHMoJkRhdGVJbnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4
ZWMsIFR5cGVFcnJvcik7CiAKQEAgLTY1MCw4ICs2NjUsOSBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZGF0ZVByb3RvRnVuY0dldFVUCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGdyZWdvcmlh
bkRhdGVUaW1lLT5tb250aERheSk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJv
dG9GdW5jR2V0RGF5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dl
dERheShFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5o
b3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkRhdGVJbnN0YW5j
ZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAK
QEAgLTY2Myw4ICs2NzksOSBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dl
dERhCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGdyZWdvcmlhbkRhdGVUaW1lLT53ZWVrRGF5
KTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENEYXkoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0
JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VVRDRGF5KEV4ZWNTdGF0
ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUo
KTsKICAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAg
ICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIApAQCAtNjc2LDggKzY5
Myw5IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VVQKICAgICByZXR1
cm4ganNOdW1iZXIoZXhlYywgZ3JlZ29yaWFuRGF0ZVRpbWUtPndlZWtEYXkpOwogfQogCi1KU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldEhvdXJzKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldEhvdXJzKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAg
ICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAoIXRo
aXNWYWx1ZS5pbmhlcml0cygmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIApAQCAtNjg5LDggKzcwNyw5IEBAIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0SG8KICAgICByZXR1cm4ganNOdW1iZXIoZXhl
YywgZ3JlZ29yaWFuRGF0ZVRpbWUtPmhvdXIpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZGF0ZVByb3RvRnVuY0dldFVUQ0hvdXJzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0
ZVByb3RvRnVuY0dldFVUQ0hvdXJzKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAoIXRoaXNWYWx1ZS5pbmhl
cml0cygmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhl
YywgVHlwZUVycm9yKTsKIApAQCAtNzAyLDggKzcyMSw5IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBkYXRlUHJvdG9GdW5jR2V0VVQKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgZ3JlZ29yaWFu
RGF0ZVRpbWUtPmhvdXIpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVu
Y0dldE1pbnV0ZXMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVl
LCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0
TWludXRlcyhFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVj
LT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkRhdGVJbnN0
YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7
CiAKQEAgLTcxNSw4ICs3MzUsOSBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVu
Y0dldE1pCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGdyZWdvcmlhbkRhdGVUaW1lLT5taW51
dGUpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVUQ01pbnV0
ZXMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBB
cmdMaXN0JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VVRDTWludXRl
cyhFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0
VGhpc1ZhbHVlKCk7CiAgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkRhdGVJbnN0YW5jZTo6
aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKQEAg
LTcyOCw4ICs3NDksOSBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVU
CiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGdyZWdvcmlhbkRhdGVUaW1lLT5taW51dGUpOwog
fQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFNlY29uZHMoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0U2Vjb25kcyhFeGVjU3RhdGUq
IGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7
CiAgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkRhdGVJbnN0YW5jZTo6aW5mbykpCiAgICAg
ICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKQEAgLTc0MSw4ICs3NjMs
OSBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFNlCiAgICAgcmV0dXJu
IGpzTnVtYmVyKGV4ZWMsIGdyZWdvcmlhbkRhdGVUaW1lLT5zZWNvbmQpOwogfQogCi1KU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVUQ1NlY29uZHMoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VVRDU2Vjb25kcyhFeGVjU3RhdGUqIGV4ZWMp
CiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAg
aWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkRhdGVJbnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKQEAgLTc1NCw4ICs3NzcsOSBAQCBK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVUCiAgICAgcmV0dXJuIGpzTnVt
YmVyKGV4ZWMsIGdyZWdvcmlhbkRhdGVUaW1lLT5zZWNvbmQpOwogfQogCi1KU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldE1pbGxpU2Vjb25kcyhFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRNaWxsaVNlY29uZHMoRXhlY1N0YXRlKiBleGVjKQog
eworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlm
ICghdGhpc1ZhbHVlLmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCkBAIC03NjksOCArNzkzLDkgQEAgSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRNaQogICAgIHJldHVybiBqc051bWJl
cihleGVjLCBtcyk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0
VVRDTWlsbGlzZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVu
Y0dldFVUQ01pbGxpc2Vjb25kcyhFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJp
dHMoJkRhdGVJbnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMs
IFR5cGVFcnJvcik7CiAKQEAgLTc4NCw4ICs4MDksOSBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZGF0ZVByb3RvRnVuY0dldFVUCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIG1zKTsKIH0KIAot
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRUaW1lem9uZU9mZnNldChFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
KQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRUaW1lem9uZU9mZnNldChF
eGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhp
c1ZhbHVlKCk7CiAgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkRhdGVJbnN0YW5jZTo6aW5m
bykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKQEAgLTc5
NywyOCArODIzLDMwIEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VGkK
ICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgLWdyZWdvcmlhbkRhdGVUaW1lLT51dGNPZmZzZXQg
LyBtaW51dGVzUGVySG91cik7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9G
dW5jU2V0VGltZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVu
Y1NldFRpbWUoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhl
Yy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZEYXRlSW5z
dGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3Ip
OwogCiAgICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9IGFzRGF0ZUluc3RhbmNlKHRoaXNW
YWx1ZSk7IAogCi0gICAgZG91YmxlIG1pbGxpID0gdGltZUNsaXAoYXJncy5hdCgwKS50b051bWJl
cihleGVjKSk7CisgICAgZG91YmxlIG1pbGxpID0gdGltZUNsaXAoZXhlYy0+YXJndW1lbnQoMCku
dG9OdW1iZXIoZXhlYykpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoZXhlYywgbWls
bGkpOwogICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKHJlc3VsdCk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIEpTVmFsdWUgc2V0TmV3VmFsdWVGcm9tVGltZUFyZ3Mo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncywg
aW50IG51bUFyZ3NUb1VzZSwgYm9vbCBpbnB1dElzVVRDKQorc3RhdGljIEpTVmFsdWUgc2V0TmV3
VmFsdWVGcm9tVGltZUFyZ3MoRXhlY1N0YXRlKiBleGVjLCBpbnQgbnVtQXJnc1RvVXNlLCBib29s
IGlucHV0SXNVVEMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1Zh
bHVlKCk7CiAgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkRhdGVJbnN0YW5jZTo6aW5mbykp
CiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKICAgICBEYXRl
SW5zdGFuY2UqIHRoaXNEYXRlT2JqID0gYXNEYXRlSW5zdGFuY2UodGhpc1ZhbHVlKTsKICAgICBk
b3VibGUgbWlsbGkgPSB0aGlzRGF0ZU9iai0+aW50ZXJuYWxOdW1iZXIoKTsKICAgICAKLSAgICBp
ZiAoYXJncy5pc0VtcHR5KCkgfHwgaXNuYW4obWlsbGkpKSB7CisgICAgaWYgKCFleGVjLT5hcmd1
bWVudENvdW50KCkgfHwgaXNuYW4obWlsbGkpKSB7CiAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0g
anNOYU4oZXhlYyk7CiAgICAgICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKHJlc3Vs
dCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC04MzUsNyArODYzLDcgQEAgc3RhdGljIEpT
VmFsdWUgc2V0TmV3VmFsdWVGcm9tVGltZUFyZ3MoRQogCiAgICAgR3JlZ29yaWFuRGF0ZVRpbWUg
Z3JlZ29yaWFuRGF0ZVRpbWU7CiAgICAgZ3JlZ29yaWFuRGF0ZVRpbWUuY29weUZyb20oKm90aGVy
KTsKLSAgICBpZiAoIWZpbGxTdHJ1Y3R1cmVzVXNpbmdUaW1lQXJncyhleGVjLCBhcmdzLCBudW1B
cmdzVG9Vc2UsICZtcywgJmdyZWdvcmlhbkRhdGVUaW1lKSkgeworICAgIGlmICghZmlsbFN0cnVj
dHVyZXNVc2luZ1RpbWVBcmdzKGV4ZWMsIG51bUFyZ3NUb1VzZSwgJm1zLCAmZ3JlZ29yaWFuRGF0
ZVRpbWUpKSB7CiAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOYU4oZXhlYyk7CiAgICAgICAg
IHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKHJlc3VsdCk7CiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CkBAIC04NDYsMTMgKzg3NCwxNCBAQCBzdGF0aWMgSlNWYWx1ZSBzZXROZXdWYWx1ZUZy
b21UaW1lQXJncyhFCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIEpTVmFsdWUgc2V0
TmV3VmFsdWVGcm9tRGF0ZUFyZ3MoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHRoaXNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYgYXJncywgaW50IG51bUFyZ3NUb1VzZSwgYm9vbCBpbnB1dElzVVRDKQor
c3RhdGljIEpTVmFsdWUgc2V0TmV3VmFsdWVGcm9tRGF0ZUFyZ3MoRXhlY1N0YXRlKiBleGVjLCBp
bnQgbnVtQXJnc1RvVXNlLCBib29sIGlucHV0SXNVVEMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFs
dWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMo
JkRhdGVJbnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5
cGVFcnJvcik7CiAKICAgICBEYXRlSW5zdGFuY2UqIHRoaXNEYXRlT2JqID0gYXNEYXRlSW5zdGFu
Y2UodGhpc1ZhbHVlKTsKLSAgICBpZiAoYXJncy5pc0VtcHR5KCkpIHsKKyAgICBpZiAoIWV4ZWMt
PmFyZ3VtZW50Q291bnQoKSkgewogICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTmFOKGV4ZWMp
OwogICAgICAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShyZXN1bHQpOwogICAgICAg
ICByZXR1cm4gcmVzdWx0OwpAQCAtODc0LDcgKzkwMyw3IEBAIHN0YXRpYyBKU1ZhbHVlIHNldE5l
d1ZhbHVlRnJvbURhdGVBcmdzKEUKICAgICAgICAgZ3JlZ29yaWFuRGF0ZVRpbWUuY29weUZyb20o
Km90aGVyKTsKICAgICB9CiAgICAgCi0gICAgaWYgKCFmaWxsU3RydWN0dXJlc1VzaW5nRGF0ZUFy
Z3MoZXhlYywgYXJncywgbnVtQXJnc1RvVXNlLCAmbXMsICZncmVnb3JpYW5EYXRlVGltZSkpIHsK
KyAgICBpZiAoIWZpbGxTdHJ1Y3R1cmVzVXNpbmdEYXRlQXJncyhleGVjLCBudW1BcmdzVG9Vc2Us
ICZtcywgJmdyZWdvcmlhbkRhdGVUaW1lKSkgewogICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
TmFOKGV4ZWMpOwogICAgICAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShyZXN1bHQp
OwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtODg1LDk3ICs5MTQsOTggQEAgc3RhdGljIEpT
VmFsdWUgc2V0TmV3VmFsdWVGcm9tRGF0ZUFyZ3MoRQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0TWlsbGlTZWNvbmRzKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYg
YXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0TWlsbGlTZWNvbmRz
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBjb25zdCBib29sIGlucHV0SXNVVEMgPSBmYWxzZTsK
LSAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tVGltZUFyZ3MoZXhlYywgdGhpc1ZhbHVlLCBhcmdz
LCAxLCBpbnB1dElzVVRDKTsKKyAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tVGltZUFyZ3MoZXhl
YywgMSwgaW5wdXRJc1VUQyk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9G
dW5jU2V0VVRDTWlsbGlzZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVl
IHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBk
YXRlUHJvdG9GdW5jU2V0VVRDTWlsbGlzZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBj
b25zdCBib29sIGlucHV0SXNVVEMgPSB0cnVlOwotICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21U
aW1lQXJncyhleGVjLCB0aGlzVmFsdWUsIGFyZ3MsIDEsIGlucHV0SXNVVEMpOworICAgIHJldHVy
biBzZXROZXdWYWx1ZUZyb21UaW1lQXJncyhleGVjLCAxLCBpbnB1dElzVVRDKTsKIH0KIAotSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRTZWNvbmRzKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0U2Vjb25kcyhFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgY29uc3QgYm9vbCBpbnB1dElzVVRDID0gZmFsc2U7Ci0gICAgcmV0dXJuIHNl
dE5ld1ZhbHVlRnJvbVRpbWVBcmdzKGV4ZWMsIHRoaXNWYWx1ZSwgYXJncywgMiwgaW5wdXRJc1VU
Qyk7CisgICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKGV4ZWMsIDIsIGlucHV0SXNV
VEMpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFVUQ1NlY29u
ZHMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRVVENT
ZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBjb25zdCBib29sIGlucHV0SXNVVEMgPSB0
cnVlOwotICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21UaW1lQXJncyhleGVjLCB0aGlzVmFsdWUs
IGFyZ3MsIDIsIGlucHV0SXNVVEMpOworICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21UaW1lQXJn
cyhleGVjLCAyLCBpbnB1dElzVVRDKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQ
cm90b0Z1bmNTZXRNaW51dGVzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRo
aXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRl
UHJvdG9GdW5jU2V0TWludXRlcyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgY29uc3QgYm9vbCBp
bnB1dElzVVRDID0gZmFsc2U7Ci0gICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKGV4
ZWMsIHRoaXNWYWx1ZSwgYXJncywgMywgaW5wdXRJc1VUQyk7CisgICAgcmV0dXJuIHNldE5ld1Zh
bHVlRnJvbVRpbWVBcmdzKGV4ZWMsIDMsIGlucHV0SXNVVEMpOwogfQogCi1KU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFVUQ01pbnV0ZXMoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRVVENNaW51dGVzKEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICBjb25zdCBib29sIGlucHV0SXNVVEMgPSB0cnVlOwotICAgIHJldHVybiBzZXROZXdW
YWx1ZUZyb21UaW1lQXJncyhleGVjLCB0aGlzVmFsdWUsIGFyZ3MsIDMsIGlucHV0SXNVVEMpOwor
ICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21UaW1lQXJncyhleGVjLCAzLCBpbnB1dElzVVRDKTsK
IH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRIb3VycyhFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldEhvdXJzKEV4ZWNTdGF0
ZSogZXhlYykKIHsKICAgICBjb25zdCBib29sIGlucHV0SXNVVEMgPSBmYWxzZTsKLSAgICByZXR1
cm4gc2V0TmV3VmFsdWVGcm9tVGltZUFyZ3MoZXhlYywgdGhpc1ZhbHVlLCBhcmdzLCA0LCBpbnB1
dElzVVRDKTsKKyAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tVGltZUFyZ3MoZXhlYywgNCwgaW5w
dXRJc1VUQyk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0VVRD
SG91cnMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRV
VENIb3VycyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgY29uc3QgYm9vbCBpbnB1dElzVVRDID0g
dHJ1ZTsKLSAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tVGltZUFyZ3MoZXhlYywgdGhpc1ZhbHVl
LCBhcmdzLCA0LCBpbnB1dElzVVRDKTsKKyAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tVGltZUFy
Z3MoZXhlYywgNCwgaW5wdXRJc1VUQyk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRl
UHJvdG9GdW5jU2V0RGF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlz
VmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVBy
b3RvRnVuY1NldERhdGUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIGNvbnN0IGJvb2wgaW5wdXRJ
c1VUQyA9IGZhbHNlOwotICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21EYXRlQXJncyhleGVjLCB0
aGlzVmFsdWUsIGFyZ3MsIDEsIGlucHV0SXNVVEMpOworICAgIHJldHVybiBzZXROZXdWYWx1ZUZy
b21EYXRlQXJncyhleGVjLCAxLCBpbnB1dElzVVRDKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGRhdGVQcm90b0Z1bmNTZXRVVENEYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBK
U1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBkYXRlUHJvdG9GdW5jU2V0VVRDRGF0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgY29u
c3QgYm9vbCBpbnB1dElzVVRDID0gdHJ1ZTsKLSAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tRGF0
ZUFyZ3MoZXhlYywgdGhpc1ZhbHVlLCBhcmdzLCAxLCBpbnB1dElzVVRDKTsKKyAgICByZXR1cm4g
c2V0TmV3VmFsdWVGcm9tRGF0ZUFyZ3MoZXhlYywgMSwgaW5wdXRJc1VUQyk7CiB9CiAKLUpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0TW9udGgoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRNb250aChFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgY29uc3QgYm9vbCBpbnB1dElzVVRDID0gZmFsc2U7Ci0gICAgcmV0dXJuIHNldE5ld1Zh
bHVlRnJvbURhdGVBcmdzKGV4ZWMsIHRoaXNWYWx1ZSwgYXJncywgMiwgaW5wdXRJc1VUQyk7Cisg
ICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbURhdGVBcmdzKGV4ZWMsIDIsIGlucHV0SXNVVEMpOwog
fQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFVUQ01vbnRoKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYg
YXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0VVRDTW9udGgoRXhl
Y1N0YXRlKiBleGVjKQogewogICAgIGNvbnN0IGJvb2wgaW5wdXRJc1VUQyA9IHRydWU7Ci0gICAg
cmV0dXJuIHNldE5ld1ZhbHVlRnJvbURhdGVBcmdzKGV4ZWMsIHRoaXNWYWx1ZSwgYXJncywgMiwg
aW5wdXRJc1VUQyk7CisgICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbURhdGVBcmdzKGV4ZWMsIDIs
IGlucHV0SXNVVEMpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1Nl
dEZ1bGxZZWFyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5j
U2V0RnVsbFllYXIoRXhlY1N0YXRlKiBleGVjKQogewogICAgIGNvbnN0IGJvb2wgaW5wdXRJc1VU
QyA9IGZhbHNlOwotICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21EYXRlQXJncyhleGVjLCB0aGlz
VmFsdWUsIGFyZ3MsIDMsIGlucHV0SXNVVEMpOworICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21E
YXRlQXJncyhleGVjLCAzLCBpbnB1dElzVVRDKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGRhdGVQcm90b0Z1bmNTZXRVVENGdWxsWWVhcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
SlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZGF0ZVByb3RvRnVuY1NldFVUQ0Z1bGxZZWFyKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBjb25zdCBib29sIGlucHV0SXNVVEMgPSB0cnVlOwotICAgIHJldHVybiBzZXROZXdWYWx1ZUZy
b21EYXRlQXJncyhleGVjLCB0aGlzVmFsdWUsIGFyZ3MsIDMsIGlucHV0SXNVVEMpOworICAgIHJl
dHVybiBzZXROZXdWYWx1ZUZyb21EYXRlQXJncyhleGVjLCAzLCBpbnB1dElzVVRDKTsKIH0KIAot
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRZZWFyKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0WWVhcihFeGVjU3RhdGUqIGV4ZWMp
CiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAg
aWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkRhdGVJbnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKICAgICBEYXRlSW5zdGFuY2UqIHRo
aXNEYXRlT2JqID0gYXNEYXRlSW5zdGFuY2UodGhpc1ZhbHVlKTsgICAgIAotICAgIGlmIChhcmdz
LmlzRW1wdHkoKSkgeyAKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkgeyAKICAgICAg
ICAgSlNWYWx1ZSByZXN1bHQgPSBqc05hTihleGVjKTsKICAgICAgICAgdGhpc0RhdGVPYmotPnNl
dEludGVybmFsVmFsdWUocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTk5Nyw3
ICsxMDI3LDcgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRZZQogICAg
IH0KICAgICAKICAgICBib29sIG9rID0gdHJ1ZTsKLSAgICBpbnQzMl90IHllYXIgPSBhcmdzLmF0
KDApLnRvSW50MzIoZXhlYywgb2spOworICAgIGludDMyX3QgeWVhciA9IGV4ZWMtPmFyZ3VtZW50
KDApLnRvSW50MzIoZXhlYywgb2spOwogICAgIGlmICghb2spIHsKICAgICAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc05hTihleGVjKTsKICAgICAgICAgdGhpc0RhdGVPYmotPnNldEludGVybmFsVmFs
dWUocmVzdWx0KTsKQEAgLTEwMTAsOCArMTA0MCw5IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBk
YXRlUHJvdG9GdW5jU2V0WWUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFllYXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBkYXRlUHJvdG9GdW5jR2V0WWVhcihFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0
aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKCF0aGlzVmFsdWUuaW5o
ZXJpdHMoJkRhdGVJbnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4
ZWMsIFR5cGVFcnJvcik7CiAKQEAgLTEwMjUsOCArMTA1Niw5IEBAIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBkYXRlUHJvdG9GdW5jR2V0WWUKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgZ3JlZ29y
aWFuRGF0ZVRpbWUtPnllYXIpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3Rv
RnVuY1RvSlNPTihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb0pT
T04oRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9z
dFRoaXNWYWx1ZSgpOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSB0aGlzVmFsdWUudG9UaGlzT2Jq
ZWN0KGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJu
IGpzTnVsbCgpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckNvbnN0cnVjdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0
b3IuY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JD
b25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDEwICs1Nyw5IEBAIENvbnN0cnVj
dFR5cGUgRXJyb3JDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3QKICAgICByZXR1cm4gQ29uc3RydWN0VHlw
ZUhvc3Q7CiB9CiAKLS8vIEVDTUEgMTUuOS4yCi1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNhbGxFcnJvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVl
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxs
RXJyb3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgLy8gIkVycm9yKCkiIGdp
dmVzIHRoZSBzYW1lcyByZXN1bHQgYXMgIm5ldyBFcnJvcigpIgorICAgIEFyZ0xpc3QgYXJncyhl
eGVjKTsKICAgICByZXR1cm4gY29uc3RydWN0RXJyb3IoZXhlYywgYXJncyk7CiB9CiAKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCShyZXZpc2lvbiA2MDM0
MSkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBBU1NFUlRfQ0xBU1Nf
RklUU19JTl9DRUxMKEVycm9yUHJvdG90eXBlKTsKIAotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBlcnJvclByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBlcnJvclBy
b3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSopOwogCiAvLyBFQ01BIDE1LjkuNAogRXJyb3JQcm90
b3R5cGU6OkVycm9yUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgTm9uTnVsbFBhc3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUsIFN0cnVj
dHVyZSogcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUpCkBAIC00Niw5ICs0Niw5IEBAIEVycm9y
UHJvdG90eXBlOjpFcnJvclByb3RvdHlwZShFeGVjU3RhdGUKICAgICBwdXREaXJlY3RGdW5jdGlv
bldpdGhvdXRUcmFuc2l0aW9uKGV4ZWMsIG5ldyAoZXhlYykgTmF0aXZlRnVuY3Rpb25XcmFwcGVy
KGV4ZWMsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUsIDAsIGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS50b1N0cmluZywgZXJyb3JQcm90b0Z1bmNUb1N0cmluZyksIERvbnRF
bnVtKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGVycm9yUHJvdG9GdW5jVG9TdHJpbmco
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdM
aXN0JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBlcnJvclByb3RvRnVuY1RvU3RyaW5nKEV4ZWNT
dGF0ZSogZXhlYykKIHsKLSAgICBKU09iamVjdCogdGhpc09iaiA9IHRoaXNWYWx1ZS50b1RoaXNP
YmplY3QoZXhlYyk7CisgICAgSlNPYmplY3QqIHRoaXNPYmogPSBleGVjLT5ob3N0VGhpc1ZhbHVl
KCkudG9UaGlzT2JqZWN0KGV4ZWMpOwogICAgIEpTVmFsdWUgbmFtZSA9IHRoaXNPYmotPmdldChl
eGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubmFtZSk7CiAgICAgSlNWYWx1ZSBtZXNzYWdlID0g
dGhpc09iai0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5tZXNzYWdlKTsKIApJbmRl
eDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3BwCShy
ZXZpc2lvbiA2MDM0MSkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1
Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDggKzU1LDkgQEAgQ29uc3RydWN0VHlwZSBG
dW5jdGlvbkNvbnN0cnVjdG9yOjpnZXRDbwogICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlSG9zdDsK
IH0KIAotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsRnVuY3Rpb25Db25zdHJ1Y3Rv
cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJn
cykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEZ1bmN0aW9uQ29uc3RydWN0b3Io
RXhlY1N0YXRlKiBleGVjKQogeworICAgIEFyZ0xpc3QgYXJncyhleGVjKTsKICAgICByZXR1cm4g
Y29uc3RydWN0RnVuY3Rpb24oZXhlYywgYXJncyk7CiB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNCw5ICszNCw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiBBU1NFUlRfQ0xBU1NfRklUU19J
Tl9DRUxMKEZ1bmN0aW9uUHJvdG90eXBlKTsKIAotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvblByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
blByb3RvRnVuY0FwcGx5KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByb3RvRnVuY0Nh
bGwoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0
aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0
YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJvdG9GdW5jQXBw
bHkoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJv
dG9GdW5jQ2FsbChFeGVjU3RhdGUqKTsKIAogRnVuY3Rpb25Qcm90b3R5cGU6OkZ1bmN0aW9uUHJv
dG90eXBlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgTm9u
TnVsbFBhc3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUpCiAgICAgOiBJbnRlcm5hbEZ1bmN0
aW9uKCZleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkubnVsbElkZW50aWZpZXIpCkBAIC01Myw3ICs1Myw3IEBAIHZvaWQgRnVu
Y3Rpb25Qcm90b3R5cGU6OmFkZEZ1bmN0aW9uUHJvcGUKICAgICBwdXREaXJlY3RGdW5jdGlvbldp
dGhvdXRUcmFuc2l0aW9uKGV4ZWMsICpjYWxsRnVuY3Rpb24sIERvbnRFbnVtKTsKIH0KIAotc3Rh
dGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsRnVuY3Rpb25Qcm90b3R5cGUoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK3N0YXRpYyBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY2FsbEZ1bmN0aW9uUHJvdG90eXBlKEV4ZWNTdGF0ZSopCiB7CiAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiB9CkBAIC04Myw4ICs4Myw5IEBAIHN0YXRpYyBpbmxpbmUgdm9p
ZCBpbnNlcnRTZW1pY29sb25JZk5lZWQKICAgICB9CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvblByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBK
U1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25Qcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1
ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNWYWx1ZS5p
bmhlcml0cygmSlNGdW5jdGlvbjo6aW5mbykpIHsKICAgICAgICAgSlNGdW5jdGlvbiogZnVuY3Rp
b24gPSBhc0Z1bmN0aW9uKHRoaXNWYWx1ZSk7CiAgICAgICAgIGlmIChmdW5jdGlvbi0+aXNIb3N0
RnVuY3Rpb24oKSkKQEAgLTEwMywxNCArMTA0LDE1IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvblByb3RvRnVuY1QKICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3Ip
OwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Qcm90b0Z1bmNBcHBseShFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Qcm90b0Z1bmNBcHBseShFeGVj
U3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1Zh
bHVlKCk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSB0
aGlzVmFsdWUuZ2V0Q2FsbERhdGEoY2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxs
VHlwZU5vbmUpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAK
LSAgICBKU1ZhbHVlIGFycmF5ID0gYXJncy5hdCgxKTsKKyAgICBKU1ZhbHVlIGFycmF5ID0gZXhl
Yy0+YXJndW1lbnQoMSk7CiAKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcHBseUFyZ3M7CiAg
ICAgaWYgKCFhcnJheS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CkBAIC0xMjgsMTkgKzEzMCwyMSBA
QCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Qcm90b0Z1bmNBCiAgICAgICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogICAgIH0KIAotICAgIHJldHVybiBj
YWxsKGV4ZWMsIHRoaXNWYWx1ZSwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhcmdzLmF0KDApLCBhcHBs
eUFyZ3MpOworICAgIHJldHVybiBjYWxsKGV4ZWMsIHRoaXNWYWx1ZSwgY2FsbFR5cGUsIGNhbGxE
YXRhLCBleGVjLT5hcmd1bWVudCgwKSwgYXBwbHlBcmdzKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uUHJvdG9GdW5jQ2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
SlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25Qcm90b0Z1bmNDYWxsKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1Zh
bHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBDYWxsRGF0YSBjYWxs
RGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IHRoaXNWYWx1ZS5nZXRDYWxsRGF0YShjYWxs
RGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkKICAgICAgICAgcmV0dXJu
IHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAorICAgIEFyZ0xpc3QgYXJncyhleGVjKTsK
ICAgICBBcmdMaXN0IGNhbGxBcmdzOwogICAgIGFyZ3MuZ2V0U2xpY2UoMSwgY2FsbEFyZ3MpOwot
ICAgIHJldHVybiBjYWxsKGV4ZWMsIHRoaXNWYWx1ZSwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhcmdz
LmF0KDApLCBjYWxsQXJncyk7CisgICAgcmV0dXJuIGNhbGwoZXhlYywgdGhpc1ZhbHVlLCBjYWxs
VHlwZSwgY2FsbERhdGEsIGV4ZWMtPmFyZ3VtZW50KDApLCBjYWxsQXJncyk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCShy
ZXZpc2lvbiA2MDM0MSkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJFeGNlcHRpb25IZWxw
ZXJzLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25Qcm90b3R5cGUuaCIKICNpbmNsdWRlICJKU0dsb2Jh
bE9iamVjdC5oIgorI2luY2x1ZGUgIkpTTm90QW5PYmplY3QuaCIKICNpbmNsdWRlICJJbnRlcnBy
ZXRlci5oIgogI2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgogI2luY2x1ZGUgIlBhcnNlci5o
IgpAQCAtNDIsMTEgKzQzLDExIEBAIHVzaW5nIG5hbWVzcGFjZSBVbmljb2RlOwogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0
cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGNvbnN0cnVjdG9yLCBKU1ZhbHVlLCBj
b25zdCBBcmdMaXN0JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSG9zdEZ1bmN0aW9uQXND
b25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBleGVjLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKTsKICAgICB1bnNpZ25lZCB2UENJbmRl
eCA9IGNvZGVCbG9jay0+Ynl0ZWNvZGVPZmZzZXQoZXhlYywgZXhlYy0+cmV0dXJuUEMoKSk7Ci0g
ICAgZXhlYy0+c2V0RXhjZXB0aW9uKGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGV4ZWMsIGNv
bnN0cnVjdG9yLCB2UENJbmRleCwgY29kZUJsb2NrKSk7CisgICAgZXhlYy0+c2V0RXhjZXB0aW9u
KGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGV4ZWMsIGV4ZWMtPmNhbGxlZSgpLCB2UENJbmRl
eCwgY29kZUJsb2NrKSk7CiAgICAgcmV0dXJuIEpTVmFsdWUoKTsKIH0KIApAQCAtMTY4LDEyICsx
NjksNiBAQCBDYWxsVHlwZSBKU0Z1bmN0aW9uOjpnZXRDYWxsRGF0YShDYWxsRGF0CiAgICAgcmV0
dXJuIENhbGxUeXBlSlM7CiB9CiAKLUpTVmFsdWUgSlNGdW5jdGlvbjo6Y2FsbChFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQotewotICAgIEFT
U0VSVCghaXNIb3N0RnVuY3Rpb24oKSk7Ci0gICAgcmV0dXJuIGV4ZWMtPmludGVycHJldGVyKCkt
PmV4ZWN1dGVDYWxsKGpzRXhlY3V0YWJsZSgpLCBleGVjLCB0aGlzLCB0aGlzVmFsdWUudG9UaGlz
T2JqZWN0KGV4ZWMpLCBhcmdzLCBzY29wZSgpLm5vZGUoKSwgZXhlYy0+ZXhjZXB0aW9uU2xvdCgp
KTsKLX0KLQogSlNWYWx1ZSBKU0Z1bmN0aW9uOjphcmd1bWVudHNHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBjb25zdCBJZGVudGlmaWVyJikKIHsKICAgICBKU0Z1bmN0
aW9uKiB0aGlzT2JqID0gYXNGdW5jdGlvbihzbG90QmFzZSk7CkBAIC0zMDEsMjEgKzI5Niw0IEBA
IENvbnN0cnVjdFR5cGUgSlNGdW5jdGlvbjo6Z2V0Q29uc3RydWN0RGEKICAgICByZXR1cm4gQ29u
c3RydWN0VHlwZUpTOwogfQogCi1KU09iamVjdCogSlNGdW5jdGlvbjo6Y29uc3RydWN0KEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKLXsKLSAgICBBU1NFUlQoIWlzSG9zdEZ1
bmN0aW9uKCkpOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlOwotICAgIEpTVmFsdWUgcHJvdG90
eXBlID0gZ2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUpOwotICAgIGlm
IChwcm90b3R5cGUuaXNPYmplY3QoKSkKLSAgICAgICAgc3RydWN0dXJlID0gYXNPYmplY3QocHJv
dG90eXBlKS0+aW5oZXJpdG9ySUQoKTsKLSAgICBlbHNlCi0gICAgICAgIHN0cnVjdHVyZSA9IGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZW1wdHlPYmplY3RTdHJ1Y3R1cmUoKTsKLSAgICBK
U09iamVjdCogdGhpc09iaiA9IG5ldyAoZXhlYykgSlNPYmplY3Qoc3RydWN0dXJlKTsKLQotICAg
IEpTVmFsdWUgcmVzdWx0ID0gZXhlYy0+aW50ZXJwcmV0ZXIoKS0+ZXhlY3V0ZUNvbnN0cnVjdChq
c0V4ZWN1dGFibGUoKSwgZXhlYywgdGhpcywgdGhpc09iaiwgYXJncywgc2NvcGUoKS5ub2RlKCks
IGV4ZWMtPmV4Y2VwdGlvblNsb3QoKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpIHx8
ICFyZXN1bHQuaXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIHRoaXNPYmo7Ci0gICAgcmV0dXJu
IGFzT2JqZWN0KHJlc3VsdCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDYwMzQxKQorKysgSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgSlNHbG9iYWxPYmplY3Q7CiAgICAgY2xhc3MgTmF0
aXZlRXhlY3V0YWJsZTsKIAotICAgIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSG9zdEZ1bmN0
aW9uQXNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmKTsKKyAgICBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEhvc3RGdW5jdGlvbkFzQ29u
c3RydWN0b3IoRXhlY1N0YXRlKik7CiAKICAgICBjbGFzcyBKU0Z1bmN0aW9uIDogcHVibGljIEpT
T2JqZWN0V2l0aEdsb2JhbE9iamVjdCB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVQ7CkBAIC01
MSw5ICs1MSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU0Z1bmN0aW9uKEV4ZWNTdGF0
ZSosIE5vbk51bGxQYXNzUmVmUHRyPEZ1bmN0aW9uRXhlY3V0YWJsZT4sIFNjb3BlQ2hhaW5Ob2Rl
Kik7CiAgICAgICAgIHZpcnR1YWwgfkpTRnVuY3Rpb24oKTsKIAotICAgICAgICBKU09iamVjdCog
Y29uc3RydWN0KEV4ZWNTdGF0ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLSAgICAgICAgSlNWYWx1ZSBj
YWxsKEV4ZWNTdGF0ZSosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci0KICAg
ICAgICAgY29uc3QgVVN0cmluZyYgbmFtZShFeGVjU3RhdGUqKTsKICAgICAgICAgY29uc3QgVVN0
cmluZyBkaXNwbGF5TmFtZShFeGVjU3RhdGUqKTsKICAgICAgICAgY29uc3QgVVN0cmluZyBjYWxj
dWxhdGVkRGlzcGxheU5hbWUoRXhlY1N0YXRlKik7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDcgKzEz
MSw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OmluaXQoSlNPYmplY3QqIHRoaXMKICAgICBkKCkt
Pmdsb2JhbERhdGEgPSBIZWFwOjpoZWFwKHRoaXMpLT5nbG9iYWxEYXRhKCk7CiAgICAgZCgpLT5n
bG9iYWxTY29wZUNoYWluID0gU2NvcGVDaGFpbih0aGlzLCBkKCktPmdsb2JhbERhdGEuZ2V0KCks
IHRoaXMsIHRoaXNWYWx1ZSk7CiAKLSAgICBKU0dsb2JhbE9iamVjdDo6Z2xvYmFsRXhlYygpLT5p
bml0KDAsIDAsIGQoKS0+Z2xvYmFsU2NvcGVDaGFpbi5ub2RlKCksIENhbGxGcmFtZTo6bm9DYWxs
ZXIoKSwgMCwgMCwgMCk7CisgICAgSlNHbG9iYWxPYmplY3Q6Omdsb2JhbEV4ZWMoKS0+aW5pdCgw
LCAwLCBkKCktPmdsb2JhbFNjb3BlQ2hhaW4ubm9kZSgpLCBDYWxsRnJhbWU6Om5vQ2FsbGVyKCks
IDAsIDApOwogCiAgICAgaWYgKEpTR2xvYmFsT2JqZWN0KiYgaGVhZE9iamVjdCA9IGhlYWQoKSkg
ewogICAgICAgICBkKCktPnByZXYgPSBoZWFkT2JqZWN0OwpJbmRleDogSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDYw
MzQxKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDkgKzUxLDkgQEAgdXNpbmcgbmFtZXNwYWNlIFVuaWNv
ZGU7CiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdGF0aWMgSlNWYWx1ZSBlbmNvZGUoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBjb25zdCBjaGFyKiBkb05vdEVzY2FwZSkKK3N0
YXRpYyBKU1ZhbHVlIGVuY29kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IGNoYXIqIGRvTm90RXNj
YXBlKQogewotICAgIFVTdHJpbmcgc3RyID0gYXJncy5hdCgwKS50b1N0cmluZyhleGVjKTsKKyAg
ICBVU3RyaW5nIHN0ciA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpOwogICAgIENT
dHJpbmcgY3N0ciA9IHN0ci5VVEY4U3RyaW5nKHRydWUpOwogICAgIGlmICghY3N0ci5kYXRhKCkp
CiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFVSSUVycm9yLCAiU3RyaW5nIGNvbnRh
aW5lZCBhbiBpbGxlZ2FsIFVURi0xNiBzZXF1ZW5jZS4iKTsKQEAgLTczLDEwICs3MywxMCBAQCBz
dGF0aWMgSlNWYWx1ZSBlbmNvZGUoRXhlY1N0YXRlKiBleGVjLCBjCiAgICAgcmV0dXJuIGJ1aWxk
ZXIuYnVpbGQoZXhlYyk7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlIGRlY29kZShFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIGNvbnN0IGNoYXIqIGRvTm90VW5lc2NhcGUsIGJvb2wg
c3RyaWN0KQorc3RhdGljIEpTVmFsdWUgZGVjb2RlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgY2hh
ciogZG9Ob3RVbmVzY2FwZSwgYm9vbCBzdHJpY3QpCiB7CiAgICAgSlNTdHJpbmdCdWlsZGVyIGJ1
aWxkZXI7Ci0gICAgVVN0cmluZyBzdHIgPSBhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpOworICAg
IFVTdHJpbmcgc3RyID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CiAgICAgaW50
IGsgPSAwOwogICAgIGludCBsZW4gPSBzdHIuc2l6ZSgpOwogICAgIGNvbnN0IFVDaGFyKiBkID0g
c3RyLmRhdGEoKTsKQEAgLTI3MiwxNCArMjcyLDE0IEBAIHN0YXRpYyBkb3VibGUgcGFyc2VGbG9h
dChjb25zdCBVU3RyaW5nJiAKICAgICByZXR1cm4gcy50b0RvdWJsZSh0cnVlIC8qdG9sZXJhbnQq
LywgZmFsc2UgLyogTmFOIGZvciBlbXB0eSBzdHJpbmcgKi8pOwogfQogCi1KU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZ2xvYmFsRnVuY0V2YWwoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogZnVuY3Rp
b24sIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGdsb2JhbEZ1bmNFdmFsKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU09iamVj
dCogdGhpc09iamVjdCA9IHRoaXNWYWx1ZS50b1RoaXNPYmplY3QoZXhlYyk7CisgICAgSlNPYmpl
Y3QqIHRoaXNPYmplY3QgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCkudG9UaGlzT2JqZWN0KGV4ZWMp
OwogICAgIEpTT2JqZWN0KiB1bndyYXBwZWRPYmplY3QgPSB0aGlzT2JqZWN0LT51bndyYXBwZWRP
YmplY3QoKTsKLSAgICBpZiAoIXVud3JhcHBlZE9iamVjdC0+aXNHbG9iYWxPYmplY3QoKSB8fCBz
dGF0aWNfY2FzdDxKU0dsb2JhbE9iamVjdCo+KHVud3JhcHBlZE9iamVjdCktPmV2YWxGdW5jdGlv
bigpICE9IGZ1bmN0aW9uKQorICAgIGlmICghdW53cmFwcGVkT2JqZWN0LT5pc0dsb2JhbE9iamVj
dCgpIHx8IHN0YXRpY19jYXN0PEpTR2xvYmFsT2JqZWN0Kj4odW53cmFwcGVkT2JqZWN0KS0+ZXZh
bEZ1bmN0aW9uKCkgIT0gZXhlYy0+Y2FsbGVlKCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KGV4ZWMsIEV2YWxFcnJvciwgIlRoZSBcInRoaXNcIiB2YWx1ZSBwYXNzZWQgdG8gZXZhbCBtdXN0
IGJlIHRoZSBnbG9iYWwgb2JqZWN0IGZyb20gd2hpY2ggZXZhbCBvcmlnaW5hdGVkIik7CiAKLSAg
ICBKU1ZhbHVlIHggPSBhcmdzLmF0KDApOworICAgIEpTVmFsdWUgeCA9IGV4ZWMtPmFyZ3VtZW50
KDApOwogICAgIGlmICgheC5pc1N0cmluZygpKQogICAgICAgICByZXR1cm4geDsKIApAQCAtMjk3
LDEwICsyOTcsMTAgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNFdmFsKEV4ZQog
ICAgIHJldHVybiBleGVjLT5pbnRlcnByZXRlcigpLT5leGVjdXRlKGV2YWwuZ2V0KCksIGV4ZWMs
IHRoaXNPYmplY3QsIHN0YXRpY19jYXN0PEpTR2xvYmFsT2JqZWN0Kj4odW53cmFwcGVkT2JqZWN0
KS0+Z2xvYmFsU2NvcGVDaGFpbigpLm5vZGUoKSwgZXhlYy0+ZXhjZXB0aW9uU2xvdCgpKTsKIH0K
IAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNQYXJzZUludChFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlND
X0hPU1RfQ0FMTCBnbG9iYWxGdW5jUGFyc2VJbnQoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpT
VmFsdWUgdmFsdWUgPSBhcmdzLmF0KDApOwotICAgIGludDMyX3QgcmFkaXggPSBhcmdzLmF0KDEp
LnRvSW50MzIoZXhlYyk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwor
ICAgIGludDMyX3QgcmFkaXggPSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwogCiAg
ICAgaWYgKHJhZGl4ICE9IDAgJiYgcmFkaXggIT0gMTApCiAgICAgICAgIHJldHVybiBqc051bWJl
cihleGVjLCBwYXJzZUludCh2YWx1ZS50b1N0cmluZyhleGVjKSwgcmFkaXgpKTsKQEAgLTMyMCwz
NiArMzIwLDM2IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jUGFyc2VJbnQKICAg
ICByZXR1cm4ganNOdW1iZXIoZXhlYywgcGFyc2VJbnQodmFsdWUudG9TdHJpbmcoZXhlYyksIHJh
ZGl4KSk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jUGFyc2VGbG9hdChF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jUGFyc2VGbG9hdChFeGVjU3RhdGUqIGV4
ZWMpCiB7Ci0gICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHBhcnNlRmxvYXQoYXJncy5hdCgwKS50
b1N0cmluZyhleGVjKSkpOworICAgIHJldHVybiBqc051bWJlcihleGVjLCBwYXJzZUZsb2F0KGV4
ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBnbG9iYWxGdW5jSXNOYU4oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0lz
TmFOKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4ganNCb29sZWFuKGlzbmFuKGFyZ3Mu
YXQoMCkudG9OdW1iZXIoZXhlYykpKTsKKyAgICByZXR1cm4ganNCb29sZWFuKGlzbmFuKGV4ZWMt
PmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKSk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBnbG9iYWxGdW5jSXNGaW5pdGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0lz
RmluaXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBkb3VibGUgbiA9IGFyZ3MuYXQoMCkudG9O
dW1iZXIoZXhlYyk7CisgICAgZG91YmxlIG4gPSBleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihl
eGVjKTsKICAgICByZXR1cm4ganNCb29sZWFuKCFpc25hbihuKSAmJiAhaXNpbmYobikpOwogfQog
Ci1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0RlY29kZVVSSShFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlND
X0hPU1RfQ0FMTCBnbG9iYWxGdW5jRGVjb2RlVVJJKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBz
dGF0aWMgY29uc3QgY2hhciBkb19ub3RfdW5lc2NhcGVfd2hlbl9kZWNvZGluZ19VUklbXSA9CiAg
ICAgICAgICIjJCYrLC86Oz0/QCI7CiAKLSAgICByZXR1cm4gZGVjb2RlKGV4ZWMsIGFyZ3MsIGRv
X25vdF91bmVzY2FwZV93aGVuX2RlY29kaW5nX1VSSSwgdHJ1ZSk7CisgICAgcmV0dXJuIGRlY29k
ZShleGVjLCBkb19ub3RfdW5lc2NhcGVfd2hlbl9kZWNvZGluZ19VUkksIHRydWUpOwogfQogCi1K
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0RlY29kZVVSSUNvbXBvbmVudChFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRGVjb2RlVVJJQ29tcG9uZW50KEV4ZWNTdGF0ZSog
ZXhlYykKIHsKLSAgICByZXR1cm4gZGVjb2RlKGV4ZWMsIGFyZ3MsICIiLCB0cnVlKTsKKyAgICBy
ZXR1cm4gZGVjb2RlKGV4ZWMsICIiLCB0cnVlKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGdsb2JhbEZ1bmNFbmNvZGVVUkkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0Vu
Y29kZVVSSShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgc3RhdGljIGNvbnN0IGNoYXIgZG9fbm90
X2VzY2FwZV93aGVuX2VuY29kaW5nX1VSSVtdID0KICAgICAgICAgIkFCQ0RFRkdISUpLTE1OT1BR
UlNUVVZXWFlaIgpAQCAtMzU3LDEwICszNTcsMTAgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGds
b2JhbEZ1bmNFbmNvZGVVUgogICAgICAgICAiMDEyMzQ1Njc4OSIKICAgICAgICAgIiEjJCYnKCkq
KywtLi86Oz0/QF9+IjsKIAotICAgIHJldHVybiBlbmNvZGUoZXhlYywgYXJncywgZG9fbm90X2Vz
Y2FwZV93aGVuX2VuY29kaW5nX1VSSSk7CisgICAgcmV0dXJuIGVuY29kZShleGVjLCBkb19ub3Rf
ZXNjYXBlX3doZW5fZW5jb2RpbmdfVVJJKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGds
b2JhbEZ1bmNFbmNvZGVVUklDb21wb25lbnQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpT
VmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFs
RnVuY0VuY29kZVVSSUNvbXBvbmVudChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgc3RhdGljIGNv
bnN0IGNoYXIgZG9fbm90X2VzY2FwZV93aGVuX2VuY29kaW5nX1VSSV9jb21wb25lbnRbXSA9CiAg
ICAgICAgICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIKQEAgLTM2OCwxMCArMzY4LDEwIEBA
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRW5jb2RlVVIKICAgICAgICAgIjAxMjM0
NTY3ODkiCiAgICAgICAgICIhJygpKi0uX34iOwogCi0gICAgcmV0dXJuIGVuY29kZShleGVjLCBh
cmdzLCBkb19ub3RfZXNjYXBlX3doZW5fZW5jb2RpbmdfVVJJX2NvbXBvbmVudCk7CisgICAgcmV0
dXJuIGVuY29kZShleGVjLCBkb19ub3RfZXNjYXBlX3doZW5fZW5jb2RpbmdfVVJJX2NvbXBvbmVu
dCk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRXNjYXBlKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNFc2NhcGUoRXhlY1N0YXRlKiBleGVjKQogewogICAg
IHN0YXRpYyBjb25zdCBjaGFyIGRvX25vdF9lc2NhcGVbXSA9CiAgICAgICAgICJBQkNERUZHSElK
S0xNTk9QUVJTVFVWV1hZWiIKQEAgLTM4MCw3ICszODAsNyBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZ2xvYmFsRnVuY0VzY2FwZShFCiAgICAgICAgICIqKy0uL0BfIjsKIAogICAgIEpTU3RyaW5n
QnVpbGRlciBidWlsZGVyOwotICAgIFVTdHJpbmcgc3RyID0gYXJncy5hdCgwKS50b1N0cmluZyhl
eGVjKTsKKyAgICBVU3RyaW5nIHN0ciA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMp
OwogICAgIGNvbnN0IFVDaGFyKiBjID0gc3RyLmRhdGEoKTsKICAgICBmb3IgKHVuc2lnbmVkIGsg
PSAwOyBrIDwgc3RyLnNpemUoKTsgaysrLCBjKyspIHsKICAgICAgICAgaW50IHUgPSBjWzBdOwpA
QCAtNDAwLDEwICs0MDAsMTAgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNFc2Nh
cGUoRQogICAgIHJldHVybiBidWlsZGVyLmJ1aWxkKGV4ZWMpOwogfQogCi1KU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZ2xvYmFsRnVuY1VuZXNjYXBlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBK
U1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2Jh
bEZ1bmNVbmVzY2FwZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgU3RyaW5nQnVpbGRlciBidWls
ZGVyOwotICAgIFVTdHJpbmcgc3RyID0gYXJncy5hdCgwKS50b1N0cmluZyhleGVjKTsKKyAgICBV
U3RyaW5nIHN0ciA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpOwogICAgIGludCBr
ID0gMDsKICAgICBpbnQgbGVuID0gc3RyLnNpemUoKTsKICAgICB3aGlsZSAoayA8IGxlbikgewpA
QCAtNDI4LDkgKzQyOCw5IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jVW5lc2Nh
cGUKIH0KIAogI2lmbmRlZiBOREVCVUcKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5j
SlNDUHJpbnQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0pTQ1ByaW50KEV4ZWNT
dGF0ZSogZXhlYykKIHsKLSAgICBDU3RyaW5nIHN0cmluZyA9IGFyZ3MuYXQoMCkudG9TdHJpbmco
ZXhlYykuVVRGOFN0cmluZygpOworICAgIENTdHJpbmcgc3RyaW5nID0gZXhlYy0+YXJndW1lbnQo
MCkudG9TdHJpbmcoZXhlYykuVVRGOFN0cmluZygpOwogICAgIHB1dHMoc3RyaW5nLmRhdGEoKSk7
CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oCShyZXZpc2lvbiA2MDM0MSkKKysr
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsMTkgKzM2LDE5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIC8vIEZJWE1F
OiBUaGVzZSBmdW5jdGlvbnMgc2hvdWxkIHJlYWxseSBiZSBpbiBKU0dsb2JhbE9iamVjdC5jcHAs
IGJ1dCBwdXR0aW5nIHRoZW0gdGhlcmUKICAgICAvLyBpcyBhIDAuNSUgcmVkdWN0aW9uLgogCi0g
ICAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNFdmFsKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotICAgIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBnbG9iYWxGdW5jUGFyc2VJbnQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25z
dCBBcmdMaXN0Jik7Ci0gICAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNQYXJzZUZs
b2F0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotICAg
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jSXNOYU4oRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci0gICAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGdsb2JhbEZ1bmNJc0Zpbml0ZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmKTsKLSAgICBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0RlY29kZVVS
SShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLSAgICBK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0RlY29kZVVSSUNvbXBvbmVudChFeGVjU3Rh
dGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLSAgICBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZ2xvYmFsRnVuY0VuY29kZVVSSShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpT
VmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLSAgICBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFs
RnVuY0VuY29kZVVSSUNvbXBvbmVudChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmKTsKLSAgICBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0VzY2Fw
ZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLSAgICBK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1VuZXNjYXBlKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOworICAgIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBnbG9iYWxGdW5jRXZhbChFeGVjU3RhdGUqKTsKKyAgICBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Z2xvYmFsRnVuY1BhcnNlSW50KEV4ZWNTdGF0ZSopOworICAgIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBnbG9iYWxGdW5jUGFyc2VGbG9hdChFeGVjU3RhdGUqKTsKKyAgICBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZ2xvYmFsRnVuY0lzTmFOKEV4ZWNTdGF0ZSopOworICAgIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBnbG9iYWxGdW5jSXNGaW5pdGUoRXhlY1N0YXRlKik7CisgICAgSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGdsb2JhbEZ1bmNEZWNvZGVVUkkoRXhlY1N0YXRlKik7CisgICAgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGdsb2JhbEZ1bmNEZWNvZGVVUklDb21wb25lbnQoRXhlY1N0YXRlKik7CisgICAg
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNFbmNvZGVVUkkoRXhlY1N0YXRlKik7Cisg
ICAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNFbmNvZGVVUklDb21wb25lbnQoRXhl
Y1N0YXRlKik7CisgICAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNFc2NhcGUoRXhl
Y1N0YXRlKik7CisgICAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNVbmVzY2FwZShF
eGVjU3RhdGUqKTsKICNpZm5kZWYgTkRFQlVHCi0gICAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGds
b2JhbEZ1bmNKU0NQcmludChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmKTsKKyAgICBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0pTQ1ByaW50KEV4
ZWNTdGF0ZSopOwogI2VuZGlmCiAKICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG1hbnRpc3NhT3Zl
cmZsb3dMb3dlckJvdW5kID0gOTAwNzE5OTI1NDc0MDk5Mi4wOwpJbmRleDogSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT05PYmplY3QuY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDggKzQxLDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAKIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoSlNPTk9iamVjdCk7
CiAKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNPTlByb3RvRnVuY1BhcnNlKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBKU09OUHJvdG9GdW5jU3RyaW5naWZ5KEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBKU09OUHJvdG9GdW5jUGFyc2UoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIEpTT05Qcm90b0Z1bmNTdHJpbmdpZnkoRXhlY1N0YXRlKik7CiAKIH0KIApAQCAt
ODM5LDExICs4MzksMTEgQEAgTkVWRVJfSU5MSU5FIEpTVmFsdWUgV2Fsa2VyOjp3YWxrKEpTVmFs
dQogfQogCiAvLyBFQ01BLTI2MiB2NSAxNS4xMi4yCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNP
TlByb3RvRnVuY1BhcnNlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTT05Qcm90b0Z1bmNQYXJz
ZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgaWYgKGFyZ3MuaXNFbXB0eSgpKQorICAgIGlmICgh
ZXhlYy0+YXJndW1lbnRDb3VudCgpKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBH
ZW5lcmFsRXJyb3IsICJKU09OLnBhcnNlIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIi
KTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gYXJncy5hdCgwKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0g
ZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgVVN0cmluZyBzb3VyY2UgPSB2YWx1ZS50b1N0cmluZyhl
eGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc051
bGwoKTsKQEAgLTg1MywxMCArODUzLDEwIEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU09OUHJv
dG9GdW5jUGFyc2UKICAgICBpZiAoIXVuZmlsdGVyZWQpCiAgICAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKGV4ZWMsIFN5bnRheEVycm9yLCAiVW5hYmxlIHRvIHBhcnNlIEpTT04gc3RyaW5nIik7CiAg
ICAgCi0gICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMikKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3Vu
dCgpIDwgMikKICAgICAgICAgcmV0dXJuIHVuZmlsdGVyZWQ7CiAgICAgCi0gICAgSlNWYWx1ZSBm
dW5jdGlvbiA9IGFyZ3MuYXQoMSk7CisgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IGV4ZWMtPmFyZ3Vt
ZW50KDEpOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0g
ZnVuY3Rpb24uZ2V0Q2FsbERhdGEoY2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxs
VHlwZU5vbmUpCkBAIC04NjUsMTMgKzg2NSwxMyBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNP
TlByb3RvRnVuY1BhcnNlCiB9CiAKIC8vIEVDTUEtMjYyIHY1IDE1LjEyLjMKLUpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBKU09OUHJvdG9GdW5jU3RyaW5naWZ5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IEpTT05Qcm90b0Z1bmNTdHJpbmdpZnkoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGlmIChhcmdz
LmlzRW1wdHkoKSkKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKICAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoZXhlYywgR2VuZXJhbEVycm9yLCAiTm8gaW5wdXQgdG8gc3RyaW5naWZ5
Iik7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IGFyZ3MuYXQoMCk7Ci0gICAgSlNWYWx1ZSByZXBsYWNl
ciA9IGFyZ3MuYXQoMSk7Ci0gICAgSlNWYWx1ZSBzcGFjZSA9IGFyZ3MuYXQoMik7CisgICAgSlNW
YWx1ZSB2YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDApOworICAgIEpTVmFsdWUgcmVwbGFjZXIgPSBl
eGVjLT5hcmd1bWVudCgxKTsKKyAgICBKU1ZhbHVlIHNwYWNlID0gZXhlYy0+YXJndW1lbnQoMik7
CiAgICAgcmV0dXJuIFN0cmluZ2lmaWVyKGV4ZWMsIHJlcGxhY2VyLCBzcGFjZSkuc3RyaW5naWZ5
KHZhbHVlKTsKIH0KIApJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkocmV2aXNpb24g
NjAzNDEpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQzMyw3ICs0MzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgZnJpZW5kIEpT
VmFsdWUganNTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiB1MSwgSlNTdHJp
bmcqIHMyKTsKICAgICAgICAgZnJpZW5kIEpTVmFsdWUganNTdHJpbmcoRXhlY1N0YXRlKiBleGVj
LCBKU1N0cmluZyogczEsIGNvbnN0IFVTdHJpbmcmIHUyKTsKICAgICAgICAgZnJpZW5kIEpTVmFs
dWUganNTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBSZWdpc3Rlciogc3RyaW5ncywgdW5zaWduZWQg
Y291bnQpOwotICAgICAgICBmcmllbmQgSlNWYWx1ZSBqc1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKTsKKyAgICAgICAgZnJpZW5k
IEpTVmFsdWUganNTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHRoaXNWYWx1ZSk7CiAg
ICAgICAgIGZyaWVuZCBKU1N0cmluZyoganNTdHJpbmdXaXRoRmluYWxpemVyKEV4ZWNTdGF0ZSos
IGNvbnN0IFVTdHJpbmcmLCBKU1N0cmluZ0ZpbmFsaXplckNhbGxiYWNrIGNhbGxiYWNrLCB2b2lk
KiBjb250ZXh0KTsKICAgICB9OwogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVj
dC5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXRoT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMjQgKzM0LDI0IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKE1hdGhPYmplY3QpOwogCi1zdGF0aWMgSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNBYnMoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG1hdGhQcm90b0Z1bmNBQ29zKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3Qg
QXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQVNp
bihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRp
YyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0FUYW4oRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG1hdGhQcm90b0Z1bmNBVGFuMihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3Rv
RnVuY0NlaWwoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7
Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNDb3MoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNFeHAoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1Zh
bHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQ
cm90b0Z1bmNGbG9vcihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xp
c3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0xvZyhFeGVj
U3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY01heChFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
bWF0aFByb3RvRnVuY01pbihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY1BvdyhF
eGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY1JhbmRvbShFeGVjU3RhdGUqLCBKU09i
amVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgbWF0aFByb3RvRnVuY1JvdW5kKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9G
dW5jU2luKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwot
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jU3FydChFeGVjU3RhdGUq
LCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY1RhbihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFs
dWUsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFBy
b3RvRnVuY0FicyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0
aFByb3RvRnVuY0FDb3MoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG1hdGhQcm90b0Z1bmNBU2luKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBtYXRoUHJvdG9GdW5jQVRhbihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgbWF0aFByb3RvRnVuY0FUYW4yKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQ2VpbChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0NvcyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0V4cChFeGVjU3RhdGUqKTsKK3N0YXRp
YyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0Zsb29yKEV4ZWNTdGF0ZSopOwor
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jTG9nKEV4ZWNTdGF0ZSop
Oworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jTWF4KEV4ZWNTdGF0
ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jTWluKEV4ZWNT
dGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jUG93KEV4
ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jUmFu
ZG9tKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9G
dW5jUm91bmQoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQ
cm90b0Z1bmNTaW4oRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1h
dGhQcm90b0Z1bmNTcXJ0KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBtYXRoUHJvdG9GdW5jVGFuKEV4ZWNTdGF0ZSopOwogCiB9CiAKQEAgLTExMyw2MiArMTEzLDYy
IEBAIGJvb2wgTWF0aE9iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG8KIAogLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0FicyhFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQWJzKEV4ZWNTdGF0ZSogZXhlYykKIHsK
LSAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgZmFicyhhcmdzLmF0KDApLnRvTnVtYmVyKGV4ZWMp
KSk7CisgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGZhYnMoZXhlYy0+YXJndW1lbnQoMCkudG9O
dW1iZXIoZXhlYykpKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNB
Q29zKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNBQ29zKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKLSAgICByZXR1cm4ganNEb3VibGVOdW1iZXIoZXhlYywgYWNvcyhhcmdzLmF0KDAp
LnRvTnVtYmVyKGV4ZWMpKSk7CisgICAgcmV0dXJuIGpzRG91YmxlTnVtYmVyKGV4ZWMsIGFjb3Mo
ZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykpKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG1hdGhQcm90b0Z1bmNBU2luKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1Zh
bHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90
b0Z1bmNBU2luKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4ganNEb3VibGVOdW1iZXIo
ZXhlYywgYXNpbihhcmdzLmF0KDApLnRvTnVtYmVyKGV4ZWMpKSk7CisgICAgcmV0dXJuIGpzRG91
YmxlTnVtYmVyKGV4ZWMsIGFzaW4oZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykpKTsK
IH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNBVGFuKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNBVGFuKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBy
ZXR1cm4ganNEb3VibGVOdW1iZXIoZXhlYywgYXRhbihhcmdzLmF0KDApLnRvTnVtYmVyKGV4ZWMp
KSk7CisgICAgcmV0dXJuIGpzRG91YmxlTnVtYmVyKGV4ZWMsIGF0YW4oZXhlYy0+YXJndW1lbnQo
MCkudG9OdW1iZXIoZXhlYykpKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90
b0Z1bmNBVGFuMihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQVRhbjIoRXhl
Y1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBqc0RvdWJsZU51bWJlcihleGVjLCBhdGFuMihh
cmdzLmF0KDApLnRvTnVtYmVyKGV4ZWMpLCBhcmdzLmF0KDEpLnRvTnVtYmVyKGV4ZWMpKSk7Cisg
ICAgcmV0dXJuIGpzRG91YmxlTnVtYmVyKGV4ZWMsIGF0YW4yKGV4ZWMtPmFyZ3VtZW50KDApLnRv
TnVtYmVyKGV4ZWMpLCBleGVjLT5hcmd1bWVudCgxKS50b051bWJlcihleGVjKSkpOwogfQogCi1K
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0NlaWwoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgbWF0aFByb3RvRnVuY0NlaWwoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBq
c051bWJlcihleGVjLCBjZWlsKGFyZ3MuYXQoMCkudG9OdW1iZXIoZXhlYykpKTsKKyAgICByZXR1
cm4ganNOdW1iZXIoZXhlYywgY2VpbChleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVjKSkp
OwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0NvcyhFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQ29zKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBy
ZXR1cm4ganNEb3VibGVOdW1iZXIoZXhlYywgY29zKGFyZ3MuYXQoMCkudG9OdW1iZXIoZXhlYykp
KTsKKyAgICByZXR1cm4ganNEb3VibGVOdW1iZXIoZXhlYywgY29zKGV4ZWMtPmFyZ3VtZW50KDAp
LnRvTnVtYmVyKGV4ZWMpKSk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9G
dW5jRXhwKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNFeHAoRXhlY1N0YXRl
KiBleGVjKQogewotICAgIHJldHVybiBqc0RvdWJsZU51bWJlcihleGVjLCBleHAoYXJncy5hdCgw
KS50b051bWJlcihleGVjKSkpOworICAgIHJldHVybiBqc0RvdWJsZU51bWJlcihleGVjLCBleHAo
ZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykpKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG1hdGhQcm90b0Z1bmNGbG9vcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJv
dG9GdW5jRmxvb3IoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBqc051bWJlcihleGVj
LCBmbG9vcihhcmdzLmF0KDApLnRvTnVtYmVyKGV4ZWMpKSk7CisgICAgcmV0dXJuIGpzTnVtYmVy
KGV4ZWMsIGZsb29yKGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKSk7CiB9CiAKLUpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jTG9nKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG1hdGhQcm90b0Z1bmNMb2coRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBqc0Rv
dWJsZU51bWJlcihleGVjLCBsb2coYXJncy5hdCgwKS50b051bWJlcihleGVjKSkpOworICAgIHJl
dHVybiBqc0RvdWJsZU51bWJlcihleGVjLCBsb2coZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIo
ZXhlYykpKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNNYXgoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY01heChFeGVjU3RhdGUqIGV4ZWMpCiB7
Ci0gICAgdW5zaWduZWQgYXJnc0NvdW50ID0gYXJncy5zaXplKCk7CisgICAgdW5zaWduZWQgYXJn
c0NvdW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOwogICAgIGRvdWJsZSByZXN1bHQgPSAtSW5m
OwogICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBhcmdzQ291bnQ7ICsraykgewotICAgICAg
ICBkb3VibGUgdmFsID0gYXJncy5hdChrKS50b051bWJlcihleGVjKTsKKyAgICAgICAgZG91Ymxl
IHZhbCA9IGV4ZWMtPmFyZ3VtZW50KGspLnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICBpZiAoaXNu
YW4odmFsKSkgewogICAgICAgICAgICAgcmVzdWx0ID0gTmFOOwogICAgICAgICAgICAgYnJlYWs7
CkBAIC0xNzksMTIgKzE3OSwxMiBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVu
Y01heChFCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHJlc3VsdCk7CiB9CiAKLUpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jTWluKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
LCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1h
dGhQcm90b0Z1bmNNaW4oRXhlY1N0YXRlKiBleGVjKQogewotICAgIHVuc2lnbmVkIGFyZ3NDb3Vu
dCA9IGFyZ3Muc2l6ZSgpOworICAgIHVuc2lnbmVkIGFyZ3NDb3VudCA9IGV4ZWMtPmFyZ3VtZW50
Q291bnQoKTsKICAgICBkb3VibGUgcmVzdWx0ID0gK0luZjsKICAgICBmb3IgKHVuc2lnbmVkIGsg
PSAwOyBrIDwgYXJnc0NvdW50OyArK2spIHsKLSAgICAgICAgZG91YmxlIHZhbCA9IGFyZ3MuYXQo
aykudG9OdW1iZXIoZXhlYyk7CisgICAgICAgIGRvdWJsZSB2YWwgPSBleGVjLT5hcmd1bWVudChr
KS50b051bWJlcihleGVjKTsKICAgICAgICAgaWYgKGlzbmFuKHZhbCkpIHsKICAgICAgICAgICAg
IHJlc3VsdCA9IE5hTjsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTk1LDEyICsxOTUsMTIgQEAg
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNNaW4oRQogICAgIHJldHVybiBqc051
bWJlcihleGVjLCByZXN1bHQpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3Rv
RnVuY1BvdyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlz
dCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jUG93KEV4ZWNTdGF0
ZSogZXhlYykKIHsKICAgICAvLyBFQ01BIDE1LjguMi4xLjEzCiAKLSAgICBkb3VibGUgYXJnID0g
YXJncy5hdCgwKS50b051bWJlcihleGVjKTsKLSAgICBkb3VibGUgYXJnMiA9IGFyZ3MuYXQoMSku
dG9OdW1iZXIoZXhlYyk7CisgICAgZG91YmxlIGFyZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVt
YmVyKGV4ZWMpOworICAgIGRvdWJsZSBhcmcyID0gZXhlYy0+YXJndW1lbnQoMSkudG9OdW1iZXIo
ZXhlYyk7CiAKICAgICBpZiAoaXNuYW4oYXJnMikpCiAgICAgICAgIHJldHVybiBqc05hTihleGVj
KTsKQEAgLTIwOSwzMSArMjA5LDMxIEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9G
dW5jUG93KEUKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgcG93KGFyZywgYXJnMikpOwogfQog
Ci1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY1JhbmRvbShFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgbWF0aFByb3RvRnVuY1JhbmRvbShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgcmV0dXJu
IGpzRG91YmxlTnVtYmVyKGV4ZWMsIGV4ZWMtPmdsb2JhbERhdGEoKS53ZWFrUmFuZG9tLmdldCgp
KTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNSb3VuZChFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jUm91bmQoRXhlY1N0YXRlKiBleGVjKQogewot
ICAgIGRvdWJsZSBhcmcgPSBhcmdzLmF0KDApLnRvTnVtYmVyKGV4ZWMpOworICAgIGRvdWJsZSBh
cmcgPSBleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVjKTsKICAgICBkb3VibGUgaW50ZWdl
ciA9IGNlaWwoYXJnKTsKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgaW50ZWdlciAtIChpbnRl
Z2VyIC0gYXJnID4gMC41KSk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9G
dW5jU2luKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNTaW4oRXhlY1N0YXRl
KiBleGVjKQogewotICAgIHJldHVybiBleGVjLT5nbG9iYWxEYXRhKCkuY2FjaGVkU2luKGV4ZWMs
IGFyZ3MuYXQoMCkudG9OdW1iZXIoZXhlYykpOworICAgIHJldHVybiBleGVjLT5nbG9iYWxEYXRh
KCkuY2FjaGVkU2luKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKTsKIH0K
IAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNTcXJ0KEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNTcXJ0KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1
cm4ganNEb3VibGVOdW1iZXIoZXhlYywgc3FydChhcmdzLmF0KDApLnRvTnVtYmVyKGV4ZWMpKSk7
CisgICAgcmV0dXJuIGpzRG91YmxlTnVtYmVyKGV4ZWMsIHNxcnQoZXhlYy0+YXJndW1lbnQoMCku
dG9OdW1iZXIoZXhlYykpKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1
bmNUYW4oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY1RhbihFeGVjU3RhdGUq
IGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGpzRG91YmxlTnVtYmVyKGV4ZWMsIHRhbihhcmdzLmF0KDAp
LnRvTnVtYmVyKGV4ZWMpKSk7CisgICAgcmV0dXJuIGpzRG91YmxlTnVtYmVyKGV4ZWMsIHRhbihl
eGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVjKSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvckNvbnN0
cnVjdG9yLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL05h
dGl2ZUVycm9yQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw5ICs2MiwxMCBA
QCBDb25zdHJ1Y3RUeXBlIE5hdGl2ZUVycm9yQ29uc3RydWN0b3I6OmdlCiAgICAgcmV0dXJuIENv
bnN0cnVjdFR5cGVIb3N0OwogfQogICAgIAotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
YWxsTmF0aXZlRXJyb3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBjb25z
dHJ1Y3RvciwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK3N0YXRpYyBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY2FsbE5hdGl2ZUVycm9yQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQog
ewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxOYXRpdmVFcnJvckNvbnN0cnVjdG9yKj4oY29uc3Ry
dWN0b3IpLT5jb25zdHJ1Y3QoZXhlYywgYXJncyk7CisgICAgQXJnTGlzdCBhcmdzKGV4ZWMpOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxOYXRpdmVFcnJvckNvbnN0cnVjdG9yKj4oZXhlYy0+Y2Fs
bGVlKCkpLT5jb25zdHJ1Y3QoZXhlYywgYXJncyk7CiB9CiAKIENhbGxUeXBlIE5hdGl2ZUVycm9y
Q29uc3RydWN0b3I6OmdldENhbGxEYXRhKENhbGxEYXRhJiBjYWxsRGF0YSkKSW5kZXg6IEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA2MDM0
MSkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTUsOSArMTE1LDkgQEAgQ29uc3RydWN0VHlwZSBOdW1iZXJDb25zdHJ1
Y3Rvcjo6Z2V0Q29ucwogfQogCiAvLyBFQ01BIDE1LjcuMgotc3RhdGljIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjYWxsTnVtYmVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNhbGxOdW1iZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJu
IGpzTnVtYmVyKGV4ZWMsIGFyZ3MuaXNFbXB0eSgpID8gMCA6IGFyZ3MuYXQoMCkudG9OdW1iZXIo
ZXhlYykpOworICAgIHJldHVybiBqc051bWJlcihleGVjLCAhZXhlYy0+YXJndW1lbnRDb3VudCgp
ID8gMCA6IGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKTsKIH0KIAogQ2FsbFR5cGUg
TnVtYmVyQ29uc3RydWN0b3I6OmdldENhbGxEYXRhKENhbGxEYXRhJiBjYWxsRGF0YSkKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlclByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDYw
MzQxKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOCwxMiArMzgsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEFTU0VSVF9D
TEFTU19GSVRTX0lOX0NFTEwoTnVtYmVyUHJvdG90eXBlKTsKIAotc3RhdGljIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
bnVtYmVyUHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1Zh
bHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJl
clByb3RvRnVuY1ZhbHVlT2YoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBB
cmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1Rv
Rml4ZWQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1z
dGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1RvRXhwb25lbnRpYWwo
RXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMg
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1RvUHJlY2lzaW9uKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqKTsKK3N0YXRp
YyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhl
Y1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1Zh
bHVlT2YoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclBy
b3RvRnVuY1RvRml4ZWQoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG51bWJlclByb3RvRnVuY1RvRXhwb25lbnRpYWwoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1RvUHJlY2lzaW9uKEV4ZWNTdGF0ZSopOwog
CiAvLyBFQ01BIDE1LjcuNAogCkBAIC0xMzcsMTMgKzEzNywxNCBAQCBzdGF0aWMgZG91YmxlIGlu
dFBvdzEwKGludCBlKQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KHJlc3VsdCk7CiB9
CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0
YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1
ZSgpOwogICAgIEpTVmFsdWUgdiA9IHRoaXNWYWx1ZS5nZXRKU051bWJlcigpOwogICAgIGlmICgh
dikKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAotICAgIEpT
VmFsdWUgcmFkaXhWYWx1ZSA9IGFyZ3MuYXQoMCk7CisgICAgSlNWYWx1ZSByYWRpeFZhbHVlID0g
ZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgaW50IHJhZGl4OwogICAgIGlmIChyYWRpeFZhbHVlLmlz
SW50MzIoKSkKICAgICAgICAgcmFkaXggPSByYWRpeFZhbHVlLmFzSW50MzIoKTsKQEAgLTIyMCw4
ICsyMjEsOSBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9TCiAgICAg
cmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHN0YXJ0T2ZSZXN1bHRTdHJpbmcpOwogfQogCi1KU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVjU3RhdGUq
IGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7
CiAgICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZCB5ZXQuCiAKICAgICBKU1ZhbHVlIHYgPSB0
aGlzVmFsdWUuZ2V0SlNOdW1iZXIoKTsKQEAgLTIzMSw4ICsyMzMsOSBAQCBKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9MCiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHYu
dG9TdHJpbmcoZXhlYykpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG9G
dW5jVmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1Zh
bHVlT2YoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+
aG9zdFRoaXNWYWx1ZSgpOwogICAgIEpTVmFsdWUgdiA9IHRoaXNWYWx1ZS5nZXRKU051bWJlcigp
OwogICAgIGlmICghdikKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9y
KTsKQEAgLTI0MCwxMyArMjQzLDE0IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90
b0Z1bmNWYWwKICAgICByZXR1cm4gdjsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJl
clByb3RvRnVuY1RvRml4ZWQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhp
c1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJl
clByb3RvRnVuY1RvRml4ZWQoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIEpTVmFsdWUgdiA9IHRoaXNWYWx1ZS5n
ZXRKU051bWJlcigpOwogICAgIGlmICghdikKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhl
YywgVHlwZUVycm9yKTsKIAotICAgIEpTVmFsdWUgZnJhY3Rpb25EaWdpdHMgPSBhcmdzLmF0KDAp
OworICAgIEpTVmFsdWUgZnJhY3Rpb25EaWdpdHMgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBk
b3VibGUgZGYgPSBmcmFjdGlvbkRpZ2l0cy50b0ludGVnZXIoZXhlYyk7CiAgICAgaWYgKCEoZGYg
Pj0gMCAmJiBkZiA8PSAyMCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFJhbmdl
RXJyb3IsICJ0b0ZpeGVkKCkgZGlnaXRzIGFyZ3VtZW50IG11c3QgYmUgYmV0d2VlbiAwIGFuZCAy
MCIpOwpAQCAtMzMxLDggKzMzNSw5IEBAIHN0YXRpYyB2b2lkIGV4cG9uZW50aWFsUGFydFRvU3Ry
aW5nKGNoYXIKICAgICBidWZbaSsrXSA9IHN0YXRpY19jYXN0PGNoYXI+KCcwJyArIGV4cG9uZW50
aWFsICUgMTApOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9F
eHBvbmVudGlhbChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG9G
dW5jVG9FeHBvbmVudGlhbChFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFs
dWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgSlNWYWx1ZSB2ID0gdGhpc1ZhbHVlLmdl
dEpTTnVtYmVyKCk7CiAgICAgaWYgKCF2KQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVj
LCBUeXBlRXJyb3IpOwpAQCAtMzQyLDcgKzM0Nyw3IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBu
dW1iZXJQcm90b0Z1bmNUb0UKICAgICBpZiAoaXNuYW4oeCkgfHwgaXNpbmYoeCkpCiAgICAgICAg
IHJldHVybiBqc1N0cmluZyhleGVjLCBVU3RyaW5nOjpmcm9tKHgpKTsKIAotICAgIEpTVmFsdWUg
ZnJhY3Rpb25hbERpZ2l0c1ZhbHVlID0gYXJncy5hdCgwKTsKKyAgICBKU1ZhbHVlIGZyYWN0aW9u
YWxEaWdpdHNWYWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGRvdWJsZSBkZiA9IGZyYWN0
aW9uYWxEaWdpdHNWYWx1ZS50b0ludGVnZXIoZXhlYyk7CiAgICAgaWYgKCEoZGYgPj0gMCAmJiBk
ZiA8PSAyMCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFJhbmdlRXJyb3IsICJ0
b0V4cG9uZW50aWFsKCkgYXJndW1lbnQgbXVzdCBiZXR3ZWVuIDAgYW5kIDIwIik7CkBAIC00MDMs
MTUgKzQwOCwxNiBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9FCiAg
ICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIGJ1Zik7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBudW1iZXJQcm90b0Z1bmNUb1ByZWNpc2lvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
SlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9QcmVjaXNpb24oRXhlY1N0YXRlKiBleGVjKQogeworICAg
IEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIEpTVmFsdWUg
diA9IHRoaXNWYWx1ZS5nZXRKU051bWJlcigpOwogICAgIGlmICghdikKICAgICAgICAgcmV0dXJu
IHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAotICAgIGRvdWJsZSBkb3VibGVQcmVjaXNp
b24gPSBhcmdzLmF0KDApLnRvSW50ZWdlclByZXNlcnZlTmFOKGV4ZWMpOworICAgIGRvdWJsZSBk
b3VibGVQcmVjaXNpb24gPSBleGVjLT5hcmd1bWVudCgwKS50b0ludGVnZXJQcmVzZXJ2ZU5hTihl
eGVjKTsKICAgICBkb3VibGUgeCA9IHYudW5jaGVja2VkR2V0TnVtYmVyKCk7Ci0gICAgaWYgKGFy
Z3MuYXQoMCkuaXNVbmRlZmluZWQoKSB8fCBpc25hbih4KSB8fCBpc2luZih4KSkKKyAgICBpZiAo
ZXhlYy0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSB8fCBpc25hbih4KSB8fCBpc2luZih4KSkK
ICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHYudG9TdHJpbmcoZXhlYykpOwogCiAgICAg
VVN0cmluZyBzOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1
Y3Rvci5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmpl
Y3RDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEzICszNCwxMyBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChPYmplY3RDb25zdHJ1Y3Rv
cik7CiAKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JHZXRQ
cm90b3R5cGVPZihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
KTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBB
cmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9y
R2V0T3duUHJvcGVydHlOYW1lcyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0
b3JLZXlzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwot
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvckRlZmluZVByb3Bl
cnR5KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3Rh
dGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvckRlZmluZVByb3BlcnRp
ZXMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0
aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yQ3JlYXRlKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvckdldFByb3RvdHlwZU9mKEV4ZWNTdGF0ZSop
Oworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvckdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSopOworc3Rh
dGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvcktleXMoRXhlY1N0YXRl
Kik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yRGVmaW5l
UHJvcGVydHkoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVj
dENvbnN0cnVjdG9yRGVmaW5lUHJvcGVydGllcyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JDcmVhdGUoRXhlY1N0YXRlKik7CiAKIE9i
amVjdENvbnN0cnVjdG9yOjpPYmplY3RDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIE5vbk51bGxQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3Ry
dWN0dXJlLCBPYmplY3RQcm90b3R5cGUqIG9iamVjdFByb3RvdHlwZSwgU3RydWN0dXJlKiBwcm90
b3R5cGVGdW5jdGlvblN0cnVjdHVyZSkKIDogSW50ZXJuYWxGdW5jdGlvbigmZXhlYy0+Z2xvYmFs
RGF0YSgpLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgSWRlbnRpZmllcihleGVjLCAiT2JqZWN0
IikpCkBAIC04MCw4ICs4MCw5IEBAIENvbnN0cnVjdFR5cGUgT2JqZWN0Q29uc3RydWN0b3I6Omdl
dENvbnMKICAgICByZXR1cm4gQ29uc3RydWN0VHlwZUhvc3Q7CiB9CiAKLXN0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY2FsbE9iamVjdENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGljIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjYWxsT2JqZWN0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQogeworICAg
IEFyZ0xpc3QgYXJncyhleGVjKTsKICAgICByZXR1cm4gY29uc3RydWN0T2JqZWN0KGV4ZWMsIGFy
Z3MpOwogfQogCkBAIC05MSwyMSArOTIsMjEgQEAgQ2FsbFR5cGUgT2JqZWN0Q29uc3RydWN0b3I6
OmdldENhbGxEYXRhKAogICAgIHJldHVybiBDYWxsVHlwZUhvc3Q7CiB9CiAKLUpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvckdldFByb3RvdHlwZU9mKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yR2V0UHJvdG90eXBlT2YoRXhlY1N0YXRlKiBleGVj
KQogewotICAgIGlmICghYXJncy5hdCgwKS5pc09iamVjdCgpKQorICAgIGlmICghZXhlYy0+YXJn
dW1lbnQoMCkuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlw
ZUVycm9yLCAiUmVxdWVzdGVkIHByb3RvdHlwZSBvZiBhIHZhbHVlIHRoYXQgaXMgbm90IGFuIG9i
amVjdC4iKTsKLSAgICByZXR1cm4gYXNPYmplY3QoYXJncy5hdCgwKSktPnByb3RvdHlwZSgpOwor
ICAgIHJldHVybiBhc09iamVjdChleGVjLT5hcmd1bWVudCgwKSktPnByb3RvdHlwZSgpOwogfQog
Ci1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGlmICghYXJncy5hdCgw
KS5pc09iamVjdCgpKQorICAgIGlmICghZXhlYy0+YXJndW1lbnQoMCkuaXNPYmplY3QoKSkKICAg
ICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAiUmVxdWVzdGVkIHByb3Bl
cnR5IGRlc2NyaXB0b3Igb2YgYSB2YWx1ZSB0aGF0IGlzIG5vdCBhbiBvYmplY3QuIik7Ci0gICAg
VVN0cmluZyBwcm9wZXJ0eU5hbWUgPSBhcmdzLmF0KDEpLnRvU3RyaW5nKGV4ZWMpOworICAgIFVT
dHJpbmcgcHJvcGVydHlOYW1lID0gZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyk7CiAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0g
ICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGFyZ3MuYXQoMCkpOworICAgIEpTT2JqZWN0
KiBvYmplY3QgPSBhc09iamVjdChleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgUHJvcGVydHlEZXNj
cmlwdG9yIGRlc2NyaXB0b3I7CiAgICAgaWYgKCFvYmplY3QtPmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihleGVjLCBJZGVudGlmaWVyKGV4ZWMsIHByb3BlcnR5TmFtZSksIGRlc2NyaXB0b3IpKQog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKQEAgLTEyOCwxMiArMTI5LDEyIEBAIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvckcKIH0KIAogLy8gRklYTUU6IFVzZSB0
aGUgZW51bWVyYXRpb24gY2FjaGUuCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3Ry
dWN0b3JHZXRPd25Qcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1Zh
bHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENv
bnN0cnVjdG9yR2V0T3duUHJvcGVydHlOYW1lcyhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgaWYg
KCFhcmdzLmF0KDApLmlzT2JqZWN0KCkpCisgICAgaWYgKCFleGVjLT5hcmd1bWVudCgwKS5pc09i
amVjdCgpKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJSZXF1
ZXN0ZWQgcHJvcGVydHkgbmFtZXMgb2YgYSB2YWx1ZSB0aGF0IGlzIG5vdCBhbiBvYmplY3QuIik7
CiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGllcyhleGVjKTsKLSAgICBhc09iamVjdChh
cmdzLmF0KDApKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhleGVjLCBwcm9wZXJ0aWVzLCBJbmNsdWRl
RG9udEVudW1Qcm9wZXJ0aWVzKTsKKyAgICBhc09iamVjdChleGVjLT5hcmd1bWVudCgwKSktPmdl
dE93blByb3BlcnR5TmFtZXMoZXhlYywgcHJvcGVydGllcywgSW5jbHVkZURvbnRFbnVtUHJvcGVy
dGllcyk7CiAgICAgSlNBcnJheSogbmFtZXMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMpOwog
ICAgIHNpemVfdCBudW1Qcm9wZXJ0aWVzID0gcHJvcGVydGllcy5zaXplKCk7CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBudW1Qcm9wZXJ0aWVzOyBpKyspCkBAIC0xNDIsMTIgKzE0MywxMiBA
QCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JHCiB9CiAKIC8vIEZJWE1F
OiBVc2UgdGhlIGVudW1lcmF0aW9uIGNhY2hlLgotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVj
dENvbnN0cnVjdG9yS2V5cyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3Rv
cktleXMoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGlmICghYXJncy5hdCgwKS5pc09iamVjdCgp
KQorICAgIGlmICghZXhlYy0+YXJndW1lbnQoMCkuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJu
IHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAiUmVxdWVzdGVkIGtleXMgb2YgYSB2YWx1ZSB0
aGF0IGlzIG5vdCBhbiBvYmplY3QuIik7CiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGll
cyhleGVjKTsKLSAgICBhc09iamVjdChhcmdzLmF0KDApKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhl
eGVjLCBwcm9wZXJ0aWVzKTsKKyAgICBhc09iamVjdChleGVjLT5hcmd1bWVudCgwKSktPmdldE93
blByb3BlcnR5TmFtZXMoZXhlYywgcHJvcGVydGllcyk7CiAgICAgSlNBcnJheSoga2V5cyA9IGNv
bnN0cnVjdEVtcHR5QXJyYXkoZXhlYyk7CiAgICAgc2l6ZV90IG51bVByb3BlcnRpZXMgPSBwcm9w
ZXJ0aWVzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bVByb3BlcnRpZXM7
IGkrKykKQEAgLTI0MSwxNiArMjQyLDE2IEBAIHN0YXRpYyBib29sIHRvUHJvcGVydHlEZXNjcmlw
dG9yKEV4ZWNTdGEKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG9iamVjdENvbnN0cnVjdG9yRGVmaW5lUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
b2JqZWN0Q29uc3RydWN0b3JEZWZpbmVQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAg
aWYgKCFhcmdzLmF0KDApLmlzT2JqZWN0KCkpCisgICAgaWYgKCFleGVjLT5hcmd1bWVudCgwKS5p
c09iamVjdCgpKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJQ
cm9wZXJ0aWVzIGNhbiBvbmx5IGJlIGRlZmluZWQgb24gT2JqZWN0cy4iKTsKLSAgICBKU09iamVj
dCogTyA9IGFzT2JqZWN0KGFyZ3MuYXQoMCkpOwotICAgIFVTdHJpbmcgcHJvcGVydHlOYW1lID0g
YXJncy5hdCgxKS50b1N0cmluZyhleGVjKTsKKyAgICBKU09iamVjdCogTyA9IGFzT2JqZWN0KGV4
ZWMtPmFyZ3VtZW50KDApKTsKKyAgICBVU3RyaW5nIHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3Vt
ZW50KDEpLnRvU3RyaW5nKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAg
ICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9y
OwotICAgIGlmICghdG9Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgYXJncy5hdCgyKSwgZGVzY3Jp
cHRvcikpCisgICAgaWYgKCF0b1Byb3BlcnR5RGVzY3JpcHRvcihleGVjLCBleGVjLT5hcmd1bWVu
dCgyKSwgZGVzY3JpcHRvcikpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICBBU1NFUlQo
KGRlc2NyaXB0b3IuYXR0cmlidXRlcygpICYgKEdldHRlciB8IFNldHRlcikpIHx8ICghZGVzY3Jp
cHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKSk7CiAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNl
cHRpb24oKSk7CkBAIC0yOTIsMjYgKzI5MywyNiBAQCBzdGF0aWMgSlNWYWx1ZSBkZWZpbmVQcm9w
ZXJ0aWVzKEV4ZWNTdGF0CiAgICAgcmV0dXJuIG9iamVjdDsKIH0KIAotSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG9iamVjdENvbnN0cnVjdG9yRGVmaW5lUHJvcGVydGllcyhFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvckRlZmluZVByb3BlcnRpZXMoRXhlY1N0YXRlKiBleGVj
KQogewotICAgIGlmICghYXJncy5hdCgwKS5pc09iamVjdCgpKQorICAgIGlmICghZXhlYy0+YXJn
dW1lbnQoMCkuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlw
ZUVycm9yLCAiUHJvcGVydGllcyBjYW4gb25seSBiZSBkZWZpbmVkIG9uIE9iamVjdHMuIik7Ci0g
ICAgaWYgKCFhcmdzLmF0KDEpLmlzT2JqZWN0KCkpCisgICAgaWYgKCFleGVjLT5hcmd1bWVudCgx
KS5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3Is
ICJQcm9wZXJ0eSBkZXNjcmlwdG9yIGxpc3QgbXVzdCBiZSBhbiBPYmplY3QuIik7Ci0gICAgcmV0
dXJuIGRlZmluZVByb3BlcnRpZXMoZXhlYywgYXNPYmplY3QoYXJncy5hdCgwKSksIGFzT2JqZWN0
KGFyZ3MuYXQoMSkpKTsKKyAgICByZXR1cm4gZGVmaW5lUHJvcGVydGllcyhleGVjLCBhc09iamVj
dChleGVjLT5hcmd1bWVudCgwKSksIGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDEpKSk7CiB9CiAK
LUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvckNyZWF0ZShFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvckNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7
Ci0gICAgaWYgKCFhcmdzLmF0KDApLmlzT2JqZWN0KCkgJiYgIWFyZ3MuYXQoMCkuaXNOdWxsKCkp
CisgICAgaWYgKCFleGVjLT5hcmd1bWVudCgwKS5pc09iamVjdCgpICYmICFleGVjLT5hcmd1bWVu
dCgwKS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9y
LCAiT2JqZWN0IHByb3RvdHlwZSBtYXkgb25seSBiZSBhbiBPYmplY3Qgb3IgbnVsbC4iKTsKICAg
ICBKU09iamVjdCogbmV3T2JqZWN0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAg
bmV3T2JqZWN0LT5zZXRQcm90b3R5cGUoYXJncy5hdCgwKSk7Ci0gICAgaWYgKGFyZ3MuYXQoMSku
aXNVbmRlZmluZWQoKSkKKyAgICBuZXdPYmplY3QtPnNldFByb3RvdHlwZShleGVjLT5hcmd1bWVu
dCgwKSk7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkKCkpCiAgICAgICAg
IHJldHVybiBuZXdPYmplY3Q7Ci0gICAgaWYgKCFhcmdzLmF0KDEpLmlzT2JqZWN0KCkpCisgICAg
aWYgKCFleGVjLT5hcmd1bWVudCgxKS5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gdGhyb3dF
cnJvcihleGVjLCBUeXBlRXJyb3IsICJQcm9wZXJ0eSBkZXNjcmlwdG9yIGxpc3QgbXVzdCBiZSBh
biBPYmplY3QuIik7Ci0gICAgcmV0dXJuIGRlZmluZVByb3BlcnRpZXMoZXhlYywgbmV3T2JqZWN0
LCBhc09iamVjdChhcmdzLmF0KDEpKSk7CisgICAgcmV0dXJuIGRlZmluZVByb3BlcnRpZXMoZXhl
YywgbmV3T2JqZWN0LCBhc09iamVjdChleGVjLT5hcmd1bWVudCgxKSkpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlw
ZS5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQ
cm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNSArMzEsMTUgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoT2JqZWN0UHJvdG90eXBlKTsKIAot
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNWYWx1ZU9mKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNIYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUq
LCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jSXNQcm90b3R5cGVPZihFeGVjU3RhdGUqLCBKU09i
amVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgb2JqZWN0UHJvdG9GdW5jRGVmaW5lR2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
SlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBv
YmplY3RQcm90b0Z1bmNEZWZpbmVTZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
LCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFBy
b3RvRnVuY0xvb2t1cEdldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5j
TG9va3VwU2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlz
dCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNQcm9wZXJ0
eUlzRW51bWVyYWJsZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xp
c3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jVG9Mb2Nh
bGVTdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7
CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY1ZhbHVlT2YoRXhl
Y1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0hh
c093blByb3BlcnR5KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBv
YmplY3RQcm90b0Z1bmNJc1Byb3RvdHlwZU9mKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNEZWZpbmVHZXR0ZXIoRXhlY1N0YXRlKik7Citz
dGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0RlZmluZVNldHRlcihF
eGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5j
TG9va3VwR2V0dGVyKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBv
YmplY3RQcm90b0Z1bmNMb29rdXBTZXR0ZXIoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY1Byb3BlcnR5SXNFbnVtZXJhYmxlKEV4ZWNTdGF0
ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNUb0xvY2Fs
ZVN0cmluZyhFeGVjU3RhdGUqKTsKIAogT2JqZWN0UHJvdG90eXBlOjpPYmplY3RQcm90b3R5cGUo
RXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBOb25OdWxsUGFz
c1JlZlB0cjxTdHJ1Y3R1cmU+IHN0dWN0dXJlLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZUZ1bmN0aW9u
U3RydWN0dXJlKQogICAgIDogSlNPYmplY3Qoc3R1Y3R1cmUpCkBAIC04MSw3NCArODEsODQgQEAg
Ym9vbCBPYmplY3RQcm90b3R5cGU6OmdldE93blByb3BlcnR5U2xvdAogCiAvLyBFQ01BIDE1LjIu
NC4yLCAxNS4yLjQuNCwgMTUuMi40LjUsIDE1LjIuNC43CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBvYmplY3RQcm90b0Z1bmNWYWx1ZU9mKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2Jq
ZWN0UHJvdG9GdW5jVmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgcmV0dXJuIHRoaXNWYWx1ZS50b1Ro
aXNPYmplY3QoZXhlYyk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1
bmNIYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlz
VmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0
UHJvdG9GdW5jSGFzT3duUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBq
c0Jvb2xlYW4odGhpc1ZhbHVlLnRvVGhpc09iamVjdChleGVjKS0+aGFzT3duUHJvcGVydHkoZXhl
YywgSWRlbnRpZmllcihleGVjLCBhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpKSkpOworICAgIEpT
VmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOworICAgIHJldHVybiBqc0Jv
b2xlYW4odGhpc1ZhbHVlLnRvVGhpc09iamVjdChleGVjKS0+aGFzT3duUHJvcGVydHkoZXhlYywg
SWRlbnRpZmllcihleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSkpKTsKIH0K
IAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0lzUHJvdG90eXBlT2YoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0lzUHJvdG90eXBl
T2YoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9z
dFRoaXNWYWx1ZSgpOwogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gdGhpc1ZhbHVlLnRvVGhpc09i
amVjdChleGVjKTsKIAotICAgIGlmICghYXJncy5hdCgwKS5pc09iamVjdCgpKQorICAgIGlmICgh
ZXhlYy0+YXJndW1lbnQoMCkuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihm
YWxzZSk7CiAKLSAgICBKU1ZhbHVlIHYgPSBhc09iamVjdChhcmdzLmF0KDApKS0+cHJvdG90eXBl
KCk7CisgICAgSlNWYWx1ZSB2ID0gYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpLT5wcm90b3R5
cGUoKTsKIAogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIGlmICghdi5pc09iamVjdCgpKQog
ICAgICAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihmYWxzZSk7Ci0gICAgICAgIGlmICh2ID09IHRo
aXNPYmopCworICAgICAgICBpZiAodiA9PSB0aGlzT2JqKQogICAgICAgICAgICAgcmV0dXJuIGpz
Qm9vbGVhbih0cnVlKTsKICAgICAgICAgdiA9IGFzT2JqZWN0KHYpLT5wcm90b3R5cGUoKTsKICAg
ICB9CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNEZWZpbmVHZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0RlZmlu
ZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVj
LT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7Ci0gICAgaWYgKGFyZ3Mu
YXQoMSkuZ2V0Q2FsbERhdGEoY2FsbERhdGEpID09IENhbGxUeXBlTm9uZSkKKyAgICBpZiAoZXhl
Yy0+YXJndW1lbnQoMSkuZ2V0Q2FsbERhdGEoY2FsbERhdGEpID09IENhbGxUeXBlTm9uZSkKICAg
ICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsICJpbnZhbGlkIGdldHRl
ciB1c2FnZSIpOwotICAgIHRoaXNWYWx1ZS50b1RoaXNPYmplY3QoZXhlYyktPmRlZmluZUdldHRl
cihleGVjLCBJZGVudGlmaWVyKGV4ZWMsIGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpLCBhc09i
amVjdChhcmdzLmF0KDEpKSk7CisgICAgdGhpc1ZhbHVlLnRvVGhpc09iamVjdChleGVjKS0+ZGVm
aW5lR2V0dGVyKGV4ZWMsIElkZW50aWZpZXIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJp
bmcoZXhlYykpLCBhc09iamVjdChleGVjLT5hcmd1bWVudCgxKSkpOwogICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jRGVm
aW5lU2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1
bmNEZWZpbmVTZXR0ZXIoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVl
ID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwotICAgIGlm
IChhcmdzLmF0KDEpLmdldENhbGxEYXRhKGNhbGxEYXRhKSA9PSBDYWxsVHlwZU5vbmUpCisgICAg
aWYgKGV4ZWMtPmFyZ3VtZW50KDEpLmdldENhbGxEYXRhKGNhbGxEYXRhKSA9PSBDYWxsVHlwZU5v
bmUpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCAiaW52YWxp
ZCBzZXR0ZXIgdXNhZ2UiKTsKLSAgICB0aGlzVmFsdWUudG9UaGlzT2JqZWN0KGV4ZWMpLT5kZWZp
bmVTZXR0ZXIoZXhlYywgSWRlbnRpZmllcihleGVjLCBhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMp
KSwgYXNPYmplY3QoYXJncy5hdCgxKSkpOworICAgIHRoaXNWYWx1ZS50b1RoaXNPYmplY3QoZXhl
YyktPmRlZmluZVNldHRlcihleGVjLCBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDAp
LnRvU3RyaW5nKGV4ZWMpKSwgYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMSkpKTsKICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3Rv
RnVuY0xvb2t1cEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlz
VmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0
UHJvdG9GdW5jTG9va3VwR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gdGhp
c1ZhbHVlLnRvVGhpc09iamVjdChleGVjKS0+bG9va3VwR2V0dGVyKGV4ZWMsIElkZW50aWZpZXIo
ZXhlYywgYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSkpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVl
ID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOworICAgIHJldHVybiB0aGlzVmFsdWUudG9UaGlzT2Jq
ZWN0KGV4ZWMpLT5sb29rdXBHZXR0ZXIoZXhlYywgSWRlbnRpZmllcihleGVjLCBleGVjLT5hcmd1
bWVudCgwKS50b1N0cmluZyhleGVjKSkpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2Jq
ZWN0UHJvdG9GdW5jTG9va3VwU2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBvYmplY3RQcm90b0Z1bmNMb29rdXBTZXR0ZXIoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJl
dHVybiB0aGlzVmFsdWUudG9UaGlzT2JqZWN0KGV4ZWMpLT5sb29rdXBTZXR0ZXIoZXhlYywgSWRl
bnRpZmllcihleGVjLCBhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgSlNWYWx1ZSB0
aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CisgICAgcmV0dXJuIHRoaXNWYWx1ZS50
b1RoaXNPYmplY3QoZXhlYyktPmxvb2t1cFNldHRlcihleGVjLCBJZGVudGlmaWVyKGV4ZWMsIGV4
ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBvYmplY3RQcm90b0Z1bmNQcm9wZXJ0eUlzRW51bWVyYWJsZShFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jUHJvcGVydHlJc0VudW1lcmFibGUoRXhl
Y1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBqc0Jvb2xlYW4odGhpc1ZhbHVlLnRvVGhpc09i
amVjdChleGVjKS0+cHJvcGVydHlJc0VudW1lcmFibGUoZXhlYywgSWRlbnRpZmllcihleGVjLCBh
cmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpKSkpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhl
Yy0+aG9zdFRoaXNWYWx1ZSgpOworICAgIHJldHVybiBqc0Jvb2xlYW4odGhpc1ZhbHVlLnRvVGhp
c09iamVjdChleGVjKS0+cHJvcGVydHlJc0VudW1lcmFibGUoZXhlYywgSWRlbnRpZmllcihleGVj
LCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSkpKTsKIH0KIAotSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRlKiBleGVj
KQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAg
IHJldHVybiB0aGlzVmFsdWUudG9UaGlzSlNTdHJpbmcoZXhlYyk7CiB9CiAKLUpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG9iamVjdFByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBK
U1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICByZXR1cm4ganNN
YWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiW29iamVjdCAiLCB0aGlzVmFsdWUudG9UaGlzT2Jq
ZWN0KGV4ZWMpLT5jbGFzc05hbWUoKSwgIl0iKTsKIH0KIApJbmRleDogSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PYmplY3RQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09iamVjdFByb3RvdHlwZS5oCShyZXZpc2lvbiA2MDM0MSkKKysrIEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgbV9oYXNOb1Byb3BlcnRpZXNXaXRo
VUludDMyTmFtZXM7CiAgICAgfTsKIAotICAgIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQ
cm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmKTsKKyAgICBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jVG9TdHJp
bmcoRXhlY1N0YXRlKik7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wZXJhdGlvbnMuaAkocmV2aXNpb24gNjAzNDEpCisrKyBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTg5LDE1ICsxODksMTUgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBuZXcgKGdsb2JhbERhdGEpIEpTU3RyaW5n
KGdsb2JhbERhdGEsIHJvcGVCdWlsZGVyLnJlbGVhc2UoKSk7CiAgICAgfQogCi0gICAgQUxXQVlT
X0lOTElORSBKU1ZhbHVlIGpzU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB0aGlzVmFs
dWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzU3Ry
aW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB0aGlzVmFsdWUpCiAgICAgewogICAgICAgICB1
bnNpZ25lZCBmaWJlckNvdW50ID0gMDsKICAgICAgICAgaWYgKExJS0VMWSh0aGlzVmFsdWUuaXNT
dHJpbmcoKSkpCiAgICAgICAgICAgICBmaWJlckNvdW50ICs9IGFzU3RyaW5nKHRoaXNWYWx1ZSkt
PnNpemUoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgKytmaWJlckNvdW50OwotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJncy5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgSlNWYWx1ZSB2ID0gYXJncy5hdChpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHYg
PSBleGVjLT5hcmd1bWVudChpKTsKICAgICAgICAgICAgIGlmIChMSUtFTFkodi5pc1N0cmluZygp
KSkKICAgICAgICAgICAgICAgICBmaWJlckNvdW50ICs9IGFzU3RyaW5nKHYpLT5zaXplKCk7CiAg
ICAgICAgICAgICBlbHNlCkBAIC0yMTYsOCArMjE2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7CiAgICAgICAgIGJvb2wgb3ZlcmZsb3cgPSBmYWxzZTsK
IAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJncy5zaXplKCk7ICsraSkgewot
ICAgICAgICAgICAgSlNWYWx1ZSB2ID0gYXJncy5hdChpKTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CisgICAgICAgICAgICBK
U1ZhbHVlIHYgPSBleGVjLT5hcmd1bWVudChpKTsKICAgICAgICAgICAgIGlmIChMSUtFTFkodi5p
c1N0cmluZygpKSkKICAgICAgICAgICAgICAgICByb3BlQnVpbGRlci5hcHBlbmQoYXNTdHJpbmco
dikpOwogICAgICAgICAgICAgZWxzZQpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9w
ZXJ0eVNsb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVy
dHlTbG90LmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
b3BlcnR5U2xvdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDExICszNCw3IEBAIEpTVmFsdWUg
UHJvcGVydHlTbG90OjpmdW5jdGlvbkdldHRlcihFeGUKIAogICAgIENhbGxEYXRhIGNhbGxEYXRh
OwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gbV9kYXRhLmdldHRlckZ1bmMtPmdldENhbGxEYXRh
KGNhbGxEYXRhKTsKLSAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVIb3N0KQotICAgICAgICBy
ZXR1cm4gY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWMsIG1fZGF0YS5nZXR0ZXJGdW5jLCB0
aGlzVmFsdWUoKSwgZXhlYy0+ZW1wdHlMaXN0KCkpOwotICAgIEFTU0VSVChjYWxsVHlwZSA9PSBD
YWxsVHlwZUpTKTsKLSAgICAvLyBGSVhNRTogQ2FuIHRoaXMgYmUgZG9uZSBtb3JlIGVmZmljaWVu
dGx5IHVzaW5nIHRoZSBjYWxsRGF0YT8KLSAgICByZXR1cm4gYXNGdW5jdGlvbihtX2RhdGEuZ2V0
dGVyRnVuYyktPmNhbGwoZXhlYywgdGhpc1ZhbHVlKCksIGV4ZWMtPmVtcHR5TGlzdCgpKTsKKyAg
ICByZXR1cm4gY2FsbChleGVjLCBtX2RhdGEuZ2V0dGVyRnVuYywgY2FsbFR5cGUsIGNhbGxEYXRh
LCB0aGlzVmFsdWUoKSwgZXhlYy0+ZW1wdHlMaXN0KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3Bw
CShyZXZpc2lvbiA2MDM0MSkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3Ry
dWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTksOCArMzE5LDkgQEAgQ29uc3RydWN0VHlw
ZSBSZWdFeHBDb25zdHJ1Y3Rvcjo6Z2V0Q29ucwogfQogCiAvLyBFQ01BIDE1LjEwLjMKLXN0YXRp
YyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFJlZ0V4cENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGljIEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsUmVnRXhwQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVj
KQogeworICAgIEFyZ0xpc3QgYXJncyhleGVjKTsKICAgICByZXR1cm4gY29uc3RydWN0UmVnRXhw
KGV4ZWMsIGFyZ3MpOwogfQogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmpl
Y3QuY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDIxICsxMTMsMjEgQEAgdm9pZCBzZXRS
ZWdFeHBPYmplY3RMYXN0SW5kZXgoRXhlY1N0YXRlKgogICAgIGFzUmVnRXhwT2JqZWN0KGJhc2VP
YmplY3QpLT5zZXRMYXN0SW5kZXgodmFsdWUudG9JbnRlZ2VyKGV4ZWMpKTsKIH0KIAotSlNWYWx1
ZSBSZWdFeHBPYmplY3Q6OnRlc3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQorSlNWYWx1ZSBSZWdFeHBPYmplY3Q6OnRlc3QoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJl
dHVybiBqc0Jvb2xlYW4obWF0Y2goZXhlYywgYXJncykpOworICAgIHJldHVybiBqc0Jvb2xlYW4o
bWF0Y2goZXhlYykpOwogfQogCi1KU1ZhbHVlIFJlZ0V4cE9iamVjdDo6ZXhlYyhFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIFJlZ0V4cE9iamVjdDo6ZXhlYyhF
eGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgaWYgKG1hdGNoKGV4ZWMsIGFyZ3MpKQorICAgIGlmICht
YXRjaChleGVjKSkKICAgICAgICAgcmV0dXJuIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
cmVnRXhwQ29uc3RydWN0b3IoKS0+YXJyYXlPZk1hdGNoZXMoZXhlYyk7CiAgICAgcmV0dXJuIGpz
TnVsbCgpOwogfQogCi1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxSZWdFeHBPYmpl
Y3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogZnVuY3Rpb24sIEpTVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxSZWdFeHBPYmpl
Y3QoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBhc1JlZ0V4cE9iamVjdChmdW5jdGlv
biktPmV4ZWMoZXhlYywgYXJncyk7CisgICAgcmV0dXJuIGFzUmVnRXhwT2JqZWN0KGV4ZWMtPmNh
bGxlZSgpKS0+ZXhlYyhleGVjKTsKIH0KIAogQ2FsbFR5cGUgUmVnRXhwT2JqZWN0OjpnZXRDYWxs
RGF0YShDYWxsRGF0YSYgY2FsbERhdGEpCkBAIC0xMzcsMTEgKzEzNywxMSBAQCBDYWxsVHlwZSBS
ZWdFeHBPYmplY3Q6OmdldENhbGxEYXRhKENhbGxECiB9CiAKIC8vIFNoYXJlZCBpbXBsZW1lbnRh
dGlvbiB1c2VkIGJ5IHRlc3QgYW5kIGV4ZWMuCi1ib29sIFJlZ0V4cE9iamVjdDo6bWF0Y2goRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorYm9vbCBSZWdFeHBPYmplY3Q6Om1h
dGNoKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBSZWdFeHBDb25zdHJ1Y3RvciogcmVnRXhwQ29u
c3RydWN0b3IgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4cENvbnN0cnVjdG9y
KCk7CiAKLSAgICBVU3RyaW5nIGlucHV0ID0gYXJncy5pc0VtcHR5KCkgPyByZWdFeHBDb25zdHJ1
Y3Rvci0+aW5wdXQoKSA6IGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBp
bnB1dCA9ICFleGVjLT5hcmd1bWVudENvdW50KCkgPyByZWdFeHBDb25zdHJ1Y3Rvci0+aW5wdXQo
KSA6IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpOwogICAgIGlmIChpbnB1dC5pc051
bGwoKSkgewogICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIEdlbmVyYWxFcnJvciwgbWFrZVN0cmlu
ZygiTm8gaW5wdXQgdG8gIiwgdG9TdHJpbmcoZXhlYyksICIuIikpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHJldmlzaW9u
IDYwMzQxKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsOCArMzcsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBz
ZXRMYXN0SW5kZXgoZG91YmxlIGxhc3RJbmRleCkgeyBkLT5sYXN0SW5kZXggPSBsYXN0SW5kZXg7
IH0KICAgICAgICAgZG91YmxlIGxhc3RJbmRleCgpIGNvbnN0IHsgcmV0dXJuIGQtPmxhc3RJbmRl
eDsgfQogCi0gICAgICAgIEpTVmFsdWUgdGVzdChFeGVjU3RhdGUqLCBjb25zdCBBcmdMaXN0Jik7
Ci0gICAgICAgIEpTVmFsdWUgZXhlYyhFeGVjU3RhdGUqLCBjb25zdCBBcmdMaXN0Jik7CisgICAg
ICAgIEpTVmFsdWUgdGVzdChFeGVjU3RhdGUqKTsKKyAgICAgICAgSlNWYWx1ZSBleGVjKEV4ZWNT
dGF0ZSopOwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0
YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAg
ICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqLCBj
b25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlEZXNjcmlwdG9yJik7CkBAIC01Niw3ICs1Niw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU09iamVjdFdpdGhHbG9iYWxP
YmplY3Q6OlN0cnVjdHVyZUZsYWdzOwogICAgICAgICAKICAgICBwcml2YXRlOgotICAgICAgICBi
b29sIG1hdGNoKEV4ZWNTdGF0ZSosIGNvbnN0IEFyZ0xpc3QmKTsKKyAgICAgICAgYm9vbCBtYXRj
aChFeGVjU3RhdGUqKTsKIAogICAgICAgICB2aXJ0dWFsIENhbGxUeXBlIGdldENhbGxEYXRhKENh
bGxEYXRhJik7CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlw
ZS5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQ
cm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMCArMzgsMTAgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoUmVnRXhwUHJvdG90eXBlKTsKIAot
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90b0Z1bmNUZXN0KEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90b0Z1bmNFeGVjKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
SlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBy
ZWdFeHBQcm90b0Z1bmNDb21waWxlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90b0Z1
bmNUb1N0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
KTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9GdW5jVGVzdChFeGVj
U3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9GdW5jRXhl
YyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9G
dW5jQ29tcGlsZShFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVn
RXhwUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKik7CiAKIC8vIEVDTUEgMTUuMTAuNQogCkBA
IC01OCwzNSArNTgsMzggQEAgUmVnRXhwUHJvdG90eXBlOjpSZWdFeHBQcm90b3R5cGUoRXhlY1N0
YQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25zIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFBy
b3RvRnVuY1Rlc3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVl
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3Rv
RnVuY1Rlc3QoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhl
Yy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZSZWdFeHBP
YmplY3Q6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3Ip
OwotICAgIHJldHVybiBhc1JlZ0V4cE9iamVjdCh0aGlzVmFsdWUpLT50ZXN0KGV4ZWMsIGFyZ3Mp
OworICAgIHJldHVybiBhc1JlZ0V4cE9iamVjdCh0aGlzVmFsdWUpLT50ZXN0KGV4ZWMpOwogfQog
Ci1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9GdW5jRXhlYyhFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9GdW5jRXhlYyhFeGVjU3RhdGUqIGV4ZWMp
CiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAg
aWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJlJlZ0V4cE9iamVjdDo6aW5mbykpCiAgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7Ci0gICAgcmV0dXJuIGFzUmVnRXhwT2Jq
ZWN0KHRoaXNWYWx1ZSktPmV4ZWMoZXhlYywgYXJncyk7CisgICAgcmV0dXJuIGFzUmVnRXhwT2Jq
ZWN0KHRoaXNWYWx1ZSktPmV4ZWMoZXhlYyk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBy
ZWdFeHBQcm90b0Z1bmNDb21waWxlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVl
IHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBy
ZWdFeHBQcm90b0Z1bmNDb21waWxlKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAoIXRoaXNWYWx1ZS5pbmhl
cml0cygmUmVnRXhwT2JqZWN0OjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhl
YywgVHlwZUVycm9yKTsKIAogICAgIFJlZlB0cjxSZWdFeHA+IHJlZ0V4cDsKLSAgICBKU1ZhbHVl
IGFyZzAgPSBhcmdzLmF0KDApOwotICAgIEpTVmFsdWUgYXJnMSA9IGFyZ3MuYXQoMSk7CisgICAg
SlNWYWx1ZSBhcmcwID0gZXhlYy0+YXJndW1lbnQoMCk7CisgICAgSlNWYWx1ZSBhcmcxID0gZXhl
Yy0+YXJndW1lbnQoMSk7CiAgICAgCiAgICAgaWYgKGFyZzAuaW5oZXJpdHMoJlJlZ0V4cE9iamVj
dDo6aW5mbykpIHsKICAgICAgICAgaWYgKCFhcmcxLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJDYW5ub3Qgc3VwcGx5IGZsYWdz
IHdoZW4gY29uc3RydWN0aW5nIG9uZSBSZWdFeHAgZnJvbSBhbm90aGVyLiIpOwogICAgICAgICBy
ZWdFeHAgPSBhc1JlZ0V4cE9iamVjdChhcmcwKS0+cmVnRXhwKCk7CiAgICAgfSBlbHNlIHsKLSAg
ICAgICAgVVN0cmluZyBwYXR0ZXJuID0gYXJncy5pc0VtcHR5KCkgPyBVU3RyaW5nKCIiKSA6IGFy
ZzAudG9TdHJpbmcoZXhlYyk7CisgICAgICAgIFVTdHJpbmcgcGF0dGVybiA9ICFleGVjLT5hcmd1
bWVudENvdW50KCkgPyBVU3RyaW5nKCIiKSA6IGFyZzAudG9TdHJpbmcoZXhlYyk7CiAgICAgICAg
IFVTdHJpbmcgZmxhZ3MgPSBhcmcxLmlzVW5kZWZpbmVkKCkgPyBVU3RyaW5nKCIiKSA6IGFyZzEu
dG9TdHJpbmcoZXhlYyk7CiAgICAgICAgIHJlZ0V4cCA9IFJlZ0V4cDo6Y3JlYXRlKCZleGVjLT5n
bG9iYWxEYXRhKCksIHBhdHRlcm4sIGZsYWdzKTsKICAgICB9CkBAIC05OSw4ICsxMDIsOSBAQCBK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9GdW5jQ29tCiAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90b0Z1bmNUb1N0
cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvRnVuY1RvU3RyaW5n
KEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RU
aGlzVmFsdWUoKTsKICAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmUmVnRXhwT2JqZWN0Ojpp
bmZvKSkgewogICAgICAgICBpZiAodGhpc1ZhbHVlLmluaGVyaXRzKCZSZWdFeHBQcm90b3R5cGU6
OmluZm8pKQogICAgICAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCAiLy8i
KTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3Bw
CShyZXZpc2lvbiA2MDM0MSkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3Ry
dWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwyMSArMzAsMjEgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKLXN0YXRpYyBORVZFUl9JTkxJTkUgSlNWYWx1ZSBzdHJpbmdGcm9tQ2hhckNvZGVT
bG93Q2FzZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitzdGF0aWMgTkVW
RVJfSU5MSU5FIEpTVmFsdWUgc3RyaW5nRnJvbUNoYXJDb2RlU2xvd0Nhc2UoRXhlY1N0YXRlKiBl
eGVjKQogewotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFyZ3Muc2l6ZSgpOworICAgIHVuc2lnbmVk
IGxlbmd0aCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKICAgICBVQ2hhciogYnVmOwogICAgIFBh
c3NSZWZQdHI8VVN0cmluZ0ltcGw+IGltcGwgPSBVU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFs
aXplZChsZW5ndGgsIGJ1Zik7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsg
KytpKQotICAgICAgICBidWZbaV0gPSBzdGF0aWNfY2FzdDxVQ2hhcj4oYXJncy5hdChpKS50b1VJ
bnQzMihleGVjKSk7CisgICAgICAgIGJ1ZltpXSA9IHN0YXRpY19jYXN0PFVDaGFyPihleGVjLT5h
cmd1bWVudChpKS50b1VJbnQzMihleGVjKSk7CiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIGlt
cGwpOwogfQogCi1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ0Zyb21DaGFyQ29k
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJn
cykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nRnJvbUNoYXJDb2RlKEV4ZWNT
dGF0ZSogZXhlYykKIHsKLSAgICBpZiAoTElLRUxZKGFyZ3Muc2l6ZSgpID09IDEpKQotICAgICAg
ICByZXR1cm4ganNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZXhlYywgYXJncy5hdCgwKS50b1VJbnQz
MihleGVjKSk7Ci0gICAgcmV0dXJuIHN0cmluZ0Zyb21DaGFyQ29kZVNsb3dDYXNlKGV4ZWMsIGFy
Z3MpOworICAgIGlmIChMSUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgpID09IDEpKQorICAgICAg
ICByZXR1cm4ganNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZXhlYywgZXhlYy0+YXJndW1lbnQoMCku
dG9VSW50MzIoZXhlYykpOworICAgIHJldHVybiBzdHJpbmdGcm9tQ2hhckNvZGVTbG93Q2FzZShl
eGVjKTsKIH0KIAogQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChTdHJpbmdDb25zdHJ1Y3Rvcik7
CkBAIC04MCwxMSArODAsMTEgQEAgQ29uc3RydWN0VHlwZSBTdHJpbmdDb25zdHJ1Y3Rvcjo6Z2V0
Q29ucwogfQogCiAvLyBFQ01BIDE1LjUuMQotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
YWxsU3RyaW5nQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxT
dHJpbmdDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgaWYgKGFyZ3MuaXNFbXB0
eSgpKQorICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQogICAgICAgICByZXR1cm4ganNF
bXB0eVN0cmluZyhleGVjKTsKLSAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgYXJncy5hdCgwKS50
b1N0cmluZyhleGVjKSk7CisgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50
KDApLnRvU3RyaW5nKGV4ZWMpKTsKIH0KIAogQ2FsbFR5cGUgU3RyaW5nQ29uc3RydWN0b3I6Omdl
dENhbGxEYXRhKENhbGxEYXRhJiBjYWxsRGF0YSkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RyaW5nUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw0MCAr
NDUsMzggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoU3Ry
aW5nUHJvdG90eXBlKTsKIAotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90
b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xp
c3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQ2hhckF0
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGlj
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNDaGFyQ29kZUF0KEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNDb25jYXQoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHN0cmluZ1Byb3RvRnVuY0luZGV4T2YoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBj
b25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3Rv
RnVuY0xhc3RJbmRleE9mKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNNYXRj
aChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRp
YyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jUmVwbGFjZShFeGVjU3RhdGUq
LCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU2VhcmNoKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
SlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJpbmdQcm90b0Z1bmNTbGljZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5j
U3BsaXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1z
dGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1N1YnN0cihFeGVjU3Rh
dGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU3Vic3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBzdHJpbmdQcm90b0Z1bmNUb0xvd2VyQ2FzZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpT
VmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
aW5nUHJvdG9GdW5jVG9VcHBlckNhc2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBj
b25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3Rv
RnVuY0xvY2FsZUNvbXBhcmUoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBB
cmdMaXN0Jik7Ci0KLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5j
QmlnKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3Rh
dGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTbWFsbChFeGVjU3RhdGUq
LCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQmxpbmsoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBK
U1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0
cmluZ1Byb3RvRnVuY0JvbGQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBB
cmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0Zp
eGVkKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3Rh
dGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNJdGFsaWNzKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTdHJpa2UoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHN0cmluZ1Byb3RvRnVuY1N1YihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5j
U3VwKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3Rh
dGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNGb250Y29sb3IoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0ZvbnRzaXplKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBzdHJpbmdQcm90b0Z1bmNBbmNob3IoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
LCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1By
b3RvRnVuY0xpbmsoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0
Jik7Ci0KLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVHJpbShF
eGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVHJpbUxlZnQoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RyaW1SaWdodChFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
c3RyaW5nUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0NoYXJBdChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQ2hhckNvZGVBdChFeGVjU3RhdGUqKTsK
K3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQ29uY2F0KEV4ZWNT
dGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNJbmRl
eE9mKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90
b0Z1bmNMYXN0SW5kZXhPZihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgc3RyaW5nUHJvdG9GdW5jTWF0Y2goRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1JlcGxhY2UoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1NlYXJjaChFeGVjU3RhdGUqKTsKK3N0
YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU2xpY2UoRXhlY1N0YXRl
Kik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1NwbGl0KEV4
ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNT
dWJzdHIoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1By
b3RvRnVuY1N1YnN0cmluZyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgc3RyaW5nUHJvdG9GdW5jVG9Mb3dlckNhc2UoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RvVXBwZXJDYXNlKEV4ZWNTdGF0ZSopOwor
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNMb2NhbGVDb21wYXJl
KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1
bmNCaWcoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1By
b3RvRnVuY1NtYWxsKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJpbmdQcm90b0Z1bmNCbGluayhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc3RyaW5nUHJvdG9GdW5jQm9sZChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jRml4ZWQoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0l0YWxpY3MoRXhlY1N0YXRlKik7Citz
dGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1N0cmlrZShFeGVjU3Rh
dGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU3ViKEV4
ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNT
dXAoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3Rv
RnVuY0ZvbnRjb2xvcihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
c3RyaW5nUHJvdG9GdW5jRm9udHNpemUoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0FuY2hvcihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jTGluayhFeGVjU3RhdGUqKTsKK3N0YXRp
YyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVHJpbShFeGVjU3RhdGUqKTsK
K3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVHJpbUxlZnQoRXhl
Y1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1Ry
aW1SaWdodChFeGVjU3RhdGUqKTsKIAogfQogCkBAIC0yODgsMTEgKzI4NiwxMiBAQCBzdGF0aWMg
QUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzU3BsaWNlU3ViCiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4
ZWMsIGltcGwpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jUmVw
bGFjZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jUmVw
bGFjZShFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5o
b3N0VGhpc1ZhbHVlKCk7CiAgICAgSlNTdHJpbmcqIHNvdXJjZVZhbCA9IHRoaXNWYWx1ZS50b1Ro
aXNKU1N0cmluZyhleGVjKTsKLSAgICBKU1ZhbHVlIHBhdHRlcm4gPSBhcmdzLmF0KDApOwotICAg
IEpTVmFsdWUgcmVwbGFjZW1lbnQgPSBhcmdzLmF0KDEpOworICAgIEpTVmFsdWUgcGF0dGVybiA9
IGV4ZWMtPmFyZ3VtZW50KDApOworICAgIEpTVmFsdWUgcmVwbGFjZW1lbnQgPSBleGVjLT5hcmd1
bWVudCgxKTsKIAogICAgIFVTdHJpbmcgcmVwbGFjZW1lbnRTdHJpbmc7CiAgICAgQ2FsbERhdGEg
Y2FsbERhdGE7CkBAIC00NDksOCArNDQ4LDkgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvRnVuY1JlcAogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBzb3VyY2Uuc3Vic3RyKDAs
IG1hdGNoUG9zKSwgc3Vic3RpdHV0ZUJhY2tyZWZlcmVuY2VzKHJlcGxhY2VtZW50U3RyaW5nLCBz
b3VyY2UsIG92ZWN0b3IsIDApLCBzb3VyY2Uuc3Vic3RyKG1hdGNoRW5kKSk7CiB9CiAKLUpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKIHsK
KyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICAvLyBB
bHNvIHVzZWQgZm9yIHZhbHVlT2YuCiAKICAgICBpZiAodGhpc1ZhbHVlLmlzU3RyaW5nKCkpCkBA
IC00NjIsMTEgKzQ2MiwxMiBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5j
VG9TCiAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIH0KIAotSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0NoYXJBdChFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQ2hhckF0KEV4ZWNTdGF0ZSogZXhlYykKIHsK
KyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBVU3Ry
aW5nIHMgPSB0aGlzVmFsdWUudG9UaGlzU3RyaW5nKGV4ZWMpOwogICAgIHVuc2lnbmVkIGxlbiA9
IHMuc2l6ZSgpOwotICAgIEpTVmFsdWUgYTAgPSBhcmdzLmF0KDApOworICAgIEpTVmFsdWUgYTAg
PSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoYTAuaXNVSW50MzIoKSkgewogICAgICAgICB1
aW50MzJfdCBpID0gYTAuYXNVSW50MzIoKTsKICAgICAgICAgaWYgKGkgPCBsZW4pCkBAIC00Nzks
MTEgKzQ4MCwxMiBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQ2hhCiAg
ICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcoZXhlYyk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzdHJpbmdQcm90b0Z1bmNDaGFyQ29kZUF0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBK
U1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBzdHJpbmdQcm90b0Z1bmNDaGFyQ29kZUF0KEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBK
U1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBVU3RyaW5nIHMg
PSB0aGlzVmFsdWUudG9UaGlzU3RyaW5nKGV4ZWMpOwogICAgIHVuc2lnbmVkIGxlbiA9IHMuc2l6
ZSgpOwotICAgIEpTVmFsdWUgYTAgPSBhcmdzLmF0KDApOworICAgIEpTVmFsdWUgYTAgPSBleGVj
LT5hcmd1bWVudCgwKTsKICAgICBpZiAoYTAuaXNVSW50MzIoKSkgewogICAgICAgICB1aW50MzJf
dCBpID0gYTAuYXNVSW50MzIoKTsKICAgICAgICAgaWYgKGkgPCBsZW4pCkBAIC00OTYsMjUgKzQ5
OCwyNyBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQ2hhCiAgICAgcmV0
dXJuIGpzTmFOKGV4ZWMpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9G
dW5jQ29uY2F0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1
bmNDb25jYXQoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGlmICh0aGlzVmFsdWUuaXNTdHJpbmco
KSAmJiAoYXJncy5zaXplKCkgPT0gMSkpIHsKLSAgICAgICAgSlNWYWx1ZSB2ID0gYXJncy5hdCgw
KTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKKyAgICBp
ZiAodGhpc1ZhbHVlLmlzU3RyaW5nKCkgJiYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA9PSAxKSkg
eworICAgICAgICBKU1ZhbHVlIHYgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICAgICAgcmV0dXJu
IHYuaXNTdHJpbmcoKQogICAgICAgICAgICAgPyBqc1N0cmluZyhleGVjLCBhc1N0cmluZyh0aGlz
VmFsdWUpLCBhc1N0cmluZyh2KSkKICAgICAgICAgICAgIDoganNTdHJpbmcoZXhlYywgYXNTdHJp
bmcodGhpc1ZhbHVlKSwgdi50b1N0cmluZyhleGVjKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIGpz
U3RyaW5nKGV4ZWMsIHRoaXNWYWx1ZSwgYXJncyk7CisgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMs
IHRoaXNWYWx1ZSk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNJ
bmRleE9mKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNJ
bmRleE9mKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMt
Pmhvc3RUaGlzVmFsdWUoKTsKICAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9UaGlzU3RyaW5n
KGV4ZWMpOwogICAgIGludCBsZW4gPSBzLnNpemUoKTsKIAotICAgIEpTVmFsdWUgYTAgPSBhcmdz
LmF0KDApOwotICAgIEpTVmFsdWUgYTEgPSBhcmdzLmF0KDEpOworICAgIEpTVmFsdWUgYTAgPSBl
eGVjLT5hcmd1bWVudCgwKTsKKyAgICBKU1ZhbHVlIGExID0gZXhlYy0+YXJndW1lbnQoMSk7CiAg
ICAgVVN0cmluZyB1MiA9IGEwLnRvU3RyaW5nKGV4ZWMpOwogICAgIGludCBwb3M7CiAgICAgaWYg
KGExLmlzVW5kZWZpbmVkKCkpCkBAIC01MzYsMTMgKzU0MCwxNCBAQCBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc3RyaW5nUHJvdG9GdW5jSW5kCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHJlc3Vs
dCk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNMYXN0SW5kZXhP
ZihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jTGFzdElu
ZGV4T2YoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+
aG9zdFRoaXNWYWx1ZSgpOwogICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1RoaXNTdHJpbmco
ZXhlYyk7CiAgICAgaW50IGxlbiA9IHMuc2l6ZSgpOwogCi0gICAgSlNWYWx1ZSBhMCA9IGFyZ3Mu
YXQoMCk7Ci0gICAgSlNWYWx1ZSBhMSA9IGFyZ3MuYXQoMSk7CisgICAgSlNWYWx1ZSBhMCA9IGV4
ZWMtPmFyZ3VtZW50KDApOworICAgIEpTVmFsdWUgYTEgPSBleGVjLT5hcmd1bWVudCgxKTsKIAog
ICAgIFVTdHJpbmcgdTIgPSBhMC50b1N0cmluZyhleGVjKTsKICAgICBkb3VibGUgZHBvcyA9IGEx
LnRvSW50ZWdlclByZXNlcnZlTmFOKGV4ZWMpOwpAQCAtNTYyLDExICs1NjcsMTIgQEAgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0xhcwogICAgIHJldHVybiBqc051bWJlcihl
eGVjLCByZXN1bHQpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5j
TWF0Y2goRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY01h
dGNoKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhv
c3RUaGlzVmFsdWUoKTsKICAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9UaGlzU3RyaW5nKGV4
ZWMpOwogCi0gICAgSlNWYWx1ZSBhMCA9IGFyZ3MuYXQoMCk7CisgICAgSlNWYWx1ZSBhMCA9IGV4
ZWMtPmFyZ3VtZW50KDApOwogCiAgICAgVVN0cmluZyB1ID0gczsKICAgICBSZWZQdHI8UmVnRXhw
PiByZWc7CkBAIC02MTMsMTEgKzYxOSwxMiBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5n
UHJvdG9GdW5jTWF0CiAgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIGxpc3QpOwogfQog
Ci1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU2VhcmNoKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTZWFyY2goRXhlY1N0YXRlKiBl
eGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwog
ICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1RoaXNTdHJpbmcoZXhlYyk7CiAKLSAgICBKU1Zh
bHVlIGEwID0gYXJncy5hdCgwKTsKKyAgICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7
CiAKICAgICBVU3RyaW5nIHUgPSBzOwogICAgIFJlZlB0cjxSZWdFeHA+IHJlZzsKQEAgLTYzOCwx
MyArNjQ1LDE0IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTZWEKICAg
ICByZXR1cm4ganNOdW1iZXIoZXhlYywgcG9zKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHN0cmluZ1Byb3RvRnVuY1NsaWNlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVl
IHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJpbmdQcm90b0Z1bmNTbGljZShFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVl
LnRvVGhpc1N0cmluZyhleGVjKTsKICAgICBpbnQgbGVuID0gcy5zaXplKCk7CiAKLSAgICBKU1Zh
bHVlIGEwID0gYXJncy5hdCgwKTsKLSAgICBKU1ZhbHVlIGExID0gYXJncy5hdCgxKTsKKyAgICBK
U1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7CisgICAgSlNWYWx1ZSBhMSA9IGV4ZWMtPmFy
Z3VtZW50KDEpOwogCiAgICAgLy8gVGhlIGFyZyBwcm9jZXNzaW5nIGlzIHZlcnkgbXVjaCBsaWtl
IEFycmF5UHJvdG9GdW5jOjpTbGljZQogICAgIGRvdWJsZSBzdGFydCA9IGEwLnRvSW50ZWdlcihl
eGVjKTsKQEAgLTY2MiwxMiArNjcwLDEzIEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQ
cm90b0Z1bmNTbGkKICAgICByZXR1cm4ganNFbXB0eVN0cmluZyhleGVjKTsKIH0KIAotSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1NwbGl0KEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTcGxpdChFeGVjU3RhdGUqIGV4ZWMpCiB7Cisg
ICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgVVN0cmlu
ZyBzID0gdGhpc1ZhbHVlLnRvVGhpc1N0cmluZyhleGVjKTsKIAotICAgIEpTVmFsdWUgYTAgPSBh
cmdzLmF0KDApOwotICAgIEpTVmFsdWUgYTEgPSBhcmdzLmF0KDEpOworICAgIEpTVmFsdWUgYTAg
PSBleGVjLT5hcmd1bWVudCgwKTsKKyAgICBKU1ZhbHVlIGExID0gZXhlYy0+YXJndW1lbnQoMSk7
CiAKICAgICBKU0FycmF5KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMpOwogICAg
IHVuc2lnbmVkIGkgPSAwOwpAQCAtNzI1LDEzICs3MzQsMTQgQEAgSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHN0cmluZ1Byb3RvRnVuY1NwbAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTdWJzdHIoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1N1YnN0cihFeGVjU3RhdGUqIGV4ZWMpCiB7Cisg
ICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgVVN0cmlu
ZyBzID0gdGhpc1ZhbHVlLnRvVGhpc1N0cmluZyhleGVjKTsKICAgICBpbnQgbGVuID0gcy5zaXpl
KCk7CiAKLSAgICBKU1ZhbHVlIGEwID0gYXJncy5hdCgwKTsKLSAgICBKU1ZhbHVlIGExID0gYXJn
cy5hdCgxKTsKKyAgICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7CisgICAgSlNWYWx1
ZSBhMSA9IGV4ZWMtPmFyZ3VtZW50KDEpOwogCiAgICAgZG91YmxlIHN0YXJ0ID0gYTAudG9JbnRl
Z2VyKGV4ZWMpOwogICAgIGRvdWJsZSBsZW5ndGggPSBhMS5pc1VuZGVmaW5lZCgpID8gbGVuIDog
YTEudG9JbnRlZ2VyKGV4ZWMpOwpAQCAtNzQ3LDEzICs3NTcsMTQgQEAgSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHN0cmluZ1Byb3RvRnVuY1N1YgogICAgIHJldHVybiBqc1N1YnN0cmluZyhleGVjLCBz
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhcnQpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGVu
Z3RoKSk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTdWJzdHJp
bmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1N1YnN0
cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5o
b3N0VGhpc1ZhbHVlKCk7CiAgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvVGhpc1N0cmluZyhl
eGVjKTsKICAgICBpbnQgbGVuID0gcy5zaXplKCk7CiAKLSAgICBKU1ZhbHVlIGEwID0gYXJncy5h
dCgwKTsKLSAgICBKU1ZhbHVlIGExID0gYXJncy5hdCgxKTsKKyAgICBKU1ZhbHVlIGEwID0gZXhl
Yy0+YXJndW1lbnQoMCk7CisgICAgSlNWYWx1ZSBhMSA9IGV4ZWMtPmFyZ3VtZW50KDEpOwogCiAg
ICAgZG91YmxlIHN0YXJ0ID0gYTAudG9OdW1iZXIoZXhlYyk7CiAgICAgZG91YmxlIGVuZDsKQEAg
LTc3OCw4ICs3ODksOSBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU3Vi
CiAgICAgcmV0dXJuIGpzU3Vic3RyaW5nKGV4ZWMsIHMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihz
dGFydCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihlbmQpIC0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHN0YXJ0KSk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUb0xv
d2VyQ2FzZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RvTG93
ZXJDYXNlKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMt
Pmhvc3RUaGlzVmFsdWUoKTsKICAgICBKU1N0cmluZyogc1ZhbCA9IHRoaXNWYWx1ZS50b1RoaXNK
U1N0cmluZyhleGVjKTsKICAgICBjb25zdCBVU3RyaW5nJiBzID0gc1ZhbC0+dmFsdWUoZXhlYyk7
CiAKQEAgLTgxNSw4ICs4MjcsOSBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9G
dW5jVG9MCiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIFVTdHJpbmc6OmFkb3B0KGJ1ZmZlcikp
OwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVG9VcHBlckNhc2Uo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdM
aXN0JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUb1VwcGVyQ2FzZShF
eGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhp
c1ZhbHVlKCk7CiAgICAgSlNTdHJpbmcqIHNWYWwgPSB0aGlzVmFsdWUudG9UaGlzSlNTdHJpbmco
ZXhlYyk7CiAgICAgY29uc3QgVVN0cmluZyYgcyA9IHNWYWwtPnZhbHVlKGV4ZWMpOwogCkBAIC04
NTIsODEgKzg2NSw5MyBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVG9V
CiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIFVTdHJpbmc6OmFkb3B0KGJ1ZmZlcikpOwogfQog
Ci1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jTG9jYWxlQ29tcGFyZShFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jTG9jYWxlQ29tcGFy
ZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMSkKKyAgICBKU1Zh
bHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKKyAgICBpZiAoZXhlYy0+YXJn
dW1lbnRDb3VudCgpIDwgMSkKICAgICAgIHJldHVybiBqc051bWJlcihleGVjLCAwKTsKIAogICAg
IFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1RoaXNTdHJpbmcoZXhlYyk7Ci0gICAgSlNWYWx1ZSBh
MCA9IGFyZ3MuYXQoMCk7CisgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAg
IHJldHVybiBqc051bWJlcihleGVjLCBsb2NhbGVDb21wYXJlKHMsIGEwLnRvU3RyaW5nKGV4ZWMp
KSk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNCaWcoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNCaWcoRXhlY1N0YXRlKiBleGVj
KQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAg
IFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1RoaXNTdHJpbmcoZXhlYyk7CiAgICAgcmV0dXJuIGpz
TWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxiaWc+IiwgcywgIjwvYmlnPiIpOwogfQogCi1K
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU21hbGwoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTbWFsbChFeGVjU3RhdGUqIGV4ZWMpCiB7Cisg
ICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgVVN0cmlu
ZyBzID0gdGhpc1ZhbHVlLnRvVGhpc1N0cmluZyhleGVjKTsKICAgICByZXR1cm4ganNNYWtlTm9u
dHJpdmlhbFN0cmluZyhleGVjLCAiPHNtYWxsPiIsIHMsICI8L3NtYWxsPiIpOwogfQogCi1KU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQmxpbmsoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWUgSlND
X0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNCbGluayhFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAg
SlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgVVN0cmluZyBz
ID0gdGhpc1ZhbHVlLnRvVGhpc1N0cmluZyhleGVjKTsKICAgICByZXR1cm4ganNNYWtlTm9udHJp
dmlhbFN0cmluZyhleGVjLCAiPGJsaW5rPiIsIHMsICI8L2JsaW5rPiIpOwogfQogCi1KU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQm9sZChFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHN0cmluZ1Byb3RvRnVuY0JvbGQoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFs
dWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIFVTdHJpbmcgcyA9IHRo
aXNWYWx1ZS50b1RoaXNTdHJpbmcoZXhlYyk7CiAgICAgcmV0dXJuIGpzTWFrZU5vbnRyaXZpYWxT
dHJpbmcoZXhlYywgIjxiPiIsIHMsICI8L2I+Iik7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzdHJpbmdQcm90b0Z1bmNGaXhlZChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1
ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvRnVuY0ZpeGVkKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1
ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9U
aGlzU3RyaW5nKGV4ZWMpOwogICAgIHJldHVybiBqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMs
ICI8dHQ+IiwgcywgIjwvdHQ+Iik7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQ
cm90b0Z1bmNJdGFsaWNzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9G
dW5jSXRhbGljcyhFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBl
eGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvVGhpc1N0
cmluZyhleGVjKTsKICAgICByZXR1cm4ganNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPGk+
IiwgcywgIjwvaT4iKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVu
Y1N0cmlrZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1N0cmlr
ZShFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0
VGhpc1ZhbHVlKCk7CiAgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvVGhpc1N0cmluZyhleGVj
KTsKICAgICByZXR1cm4ganNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPHN0cmlrZT4iLCBz
LCAiPC9zdHJpa2U+Iik7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1
bmNTdWIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25z
dCBBcmdMaXN0JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTdWIoRXhl
Y1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNW
YWx1ZSgpOwogICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1RoaXNTdHJpbmcoZXhlYyk7CiAg
ICAgcmV0dXJuIGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxzdWI+IiwgcywgIjwvc3Vi
PiIpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU3VwKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYp
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU3VwKEV4ZWNTdGF0ZSogZXhl
YykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAg
ICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9UaGlzU3RyaW5nKGV4ZWMpOwogICAgIHJldHVybiBq
c01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8c3VwPiIsIHMsICI8L3N1cD4iKTsKIH0KIAot
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0ZvbnRjb2xvcihFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jRm9udGNvbG9yKEV4ZWNTdGF0
ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUo
KTsKICAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9UaGlzU3RyaW5nKGV4ZWMpOwotICAgIEpT
VmFsdWUgYTAgPSBhcmdzLmF0KDApOworICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgw
KTsKICAgICByZXR1cm4ganNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPGZvbnQgY29sb3I9
XCIiLCBhMC50b1N0cmluZyhleGVjKSwgIlwiPiIsIHMsICI8L2ZvbnQ+Iik7CiB9CiAKLUpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNGb250c2l6ZShFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jRm9udHNpemUoRXhlY1N0YXRlKiBleGVj
KQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAg
IFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1RoaXNTdHJpbmcoZXhlYyk7Ci0gICAgSlNWYWx1ZSBh
MCA9IGFyZ3MuYXQoMCk7CisgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogCiAg
ICAgdWludDMyX3Qgc21hbGxJbnRlZ2VyOwogICAgIGlmIChhMC5nZXRVSW50MzIoc21hbGxJbnRl
Z2VyKSAmJiBzbWFsbEludGVnZXIgPD0gOSkgewpAQCAtOTY1LDE3ICs5OTAsMTkgQEAgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0ZvbgogICAgIHJldHVybiBqc01ha2VOb250
cml2aWFsU3RyaW5nKGV4ZWMsICI8Zm9udCBzaXplPVwiIiwgYTAudG9TdHJpbmcoZXhlYyksICJc
Ij4iLCBzLCAiPC9mb250PiIpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJv
dG9GdW5jQW5jaG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90
b0Z1bmNBbmNob3IoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0g
ZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1RoaXNT
dHJpbmcoZXhlYyk7Ci0gICAgSlNWYWx1ZSBhMCA9IGFyZ3MuYXQoMCk7CisgICAgSlNWYWx1ZSBh
MCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIHJldHVybiBqc01ha2VOb250cml2aWFsU3RyaW5n
KGV4ZWMsICI8YSBuYW1lPVwiIiwgYTAudG9TdHJpbmcoZXhlYyksICJcIj4iLCBzLCAiPC9hPiIp
OwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jTGluayhFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jTGluayhFeGVjU3RhdGUq
IGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7
CiAgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvVGhpc1N0cmluZyhleGVjKTsKLSAgICBKU1Zh
bHVlIGEwID0gYXJncy5hdCgwKTsKKyAgICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7
CiAgICAgVVN0cmluZyBsaW5rVGV4dCA9IGEwLnRvU3RyaW5nKGV4ZWMpOwogCiAgICAgdW5zaWdu
ZWQgbGlua1RleHRTaXplID0gbGlua1RleHQuc2l6ZSgpOwpAQCAtMTAzNiwxOCArMTA2MywyMSBA
QCBzdGF0aWMgaW5saW5lIEpTVmFsdWUgdHJpbVN0cmluZyhFeGVjU3RhCiAgICAgcmV0dXJuIGpz
U3RyaW5nKGV4ZWMsIHN0ci5zdWJzdHIobGVmdCwgcmlnaHQgLSBsZWZ0KSk7CiB9CiAKLUpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUcmltKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVHJpbShFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNW
YWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgcmV0dXJuIHRyaW1T
dHJpbmcoZXhlYywgdGhpc1ZhbHVlLCBUcmltTGVmdCB8IFRyaW1SaWdodCk7CiB9CiAKLUpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUcmltTGVmdChFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RyaW1MZWZ0KEV4ZWNTdGF0ZSogZXhlYykKIHsK
KyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICByZXR1
cm4gdHJpbVN0cmluZyhleGVjLCB0aGlzVmFsdWUsIFRyaW1MZWZ0KTsKIH0KIAotSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RyaW1SaWdodChFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RyaW1SaWdodChFeGVjU3RhdGUqIGV4ZWMpCiB7Cisg
ICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgcmV0dXJu
IHRyaW1TdHJpbmcoZXhlYywgdGhpc1ZhbHVlLCBUcmltUmlnaHQpOwogfQogICAgIApJbmRleDog
SmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUvd3RmL1BsYXRmb3JtLmgJKHJldmlzaW9uIDYwMzQxKQorKysgSmF2YVNjcmlwdENvcmUvd3Rm
L1BsYXRmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTk3Myw4ICs5NzMsMTAgQEAgb24gTWluR1cu
IFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaAogCiAjaWYgRU5BQkxFKEpJVCkKICNpZm5k
ZWYgRU5BQkxFX0pJVF9PUFRJTUlaRV9DQUxMCisjaWYgUExBVEZPUk0oTUFDKSB8fCAoUExBVEZP
Uk0oV0lOKSAmJiBDUFUoWDg2KSkKICNkZWZpbmUgRU5BQkxFX0pJVF9PUFRJTUlaRV9DQUxMIDEK
ICNlbmRpZgorI2VuZGlmCiAjaWZuZGVmIEVOQUJMRV9KSVRfT1BUSU1JWkVfTkFUSVZFX0NBTEwK
ICNkZWZpbmUgRU5BQkxFX0pJVF9PUFRJTUlaRV9OQVRJVkVfQ0FMTCAxCiAjZW5kaWYKSW5kZXg6
IEphdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0R2x1ZS9D
aGFuZ2VMb2cJKHJldmlzaW9uIDYwMzczKQorKysgSmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTAtMDUtMjggIEdlb2ZmcmV5IEdhcmVu
ICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBTaW1wbGlmaWVkIHRoZSBob3N0IGNhbGxpbmcgY29udmVudGlvbi4KKwor
ICAgICAgICBQQVJUIE9ORTogRnVuY3Rpb25hbCBjb2RlIGNoYW5nZXMuCisgICAgICAgIAorICAg
ICAgICBbIE5vbmUgaW4gSmF2YVNjcmlwdEdsdWUgXQorICAgICAgICAKKyAgICAgICAgUEFSVCBU
V086IEdsb2JhbCBzZWFyY2ggYW5kIHJlcGxhY2UuCisgICAgICAgIAorICAgICAgICBJbiB0aGUg
YXJlYXMgYmVsb3csIEkgdXNlZCBnbG9iYWwgc2VhcmNoLWFuZC1yZXBsYWNlIHRvIGNoYW5nZQor
ICAgICAgICAgICAgKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlz
dCYpID0+IChFeGVjU3RhdGUqKQorICAgICAgICAgICAgYXJncy5zaXplKCkgPT4gZXhlYy0+YXJn
dW1lbnRDb3VudCgpCisgICAgICAgICAgICBhcmdzLmF0KGkpID0+IGV4ZWMtPmFyZ3VtZW50KGkp
CisKKyAgICAgICAgKiBKU09iamVjdC5jcHA6CisgICAgICAgIChuYXRpdmVDYWxsRnVuY3Rpb24p
OgorICAgICAgICAqIFVzZXJPYmplY3RJbXAuY3BwOgorICAgICAgICAoVXNlck9iamVjdEltcDo6
Y2FsbEFzRnVuY3Rpb24pOgorICAgICAgICAqIFVzZXJPYmplY3RJbXAuaDoKKwogMjAxMC0wNC0y
MyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERh
dmlkIExldmluLgpJbmRleDogSmF2YVNjcmlwdEdsdWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRHbHVlL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBKYXZh
U2NyaXB0R2x1ZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDEwICs3MywxMCBA
QCB2b2lkIEpTVXNlck9iamVjdDo6U2V0UHJvcGVydHkoQ0ZTdHJpbmdSCiAKIH0KIAotc3RhdGlj
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBuYXRpdmVDYWxsRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCogZnVuY3Rpb25PYmplY3QsIEpTVmFsdWUgIHRoaXNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYgYXJncyk7Ci1zdGF0aWMgSlNWYWx1ZSAgbmF0aXZlQ2FsbEZ1bmN0aW9uKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9uT2JqZWN0LCBKU1ZhbHVlICB0aGlzVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG5hdGl2ZUNh
bGxGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMpOworc3RhdGljIEpTVmFsdWUgIG5hdGl2ZUNhbGxG
dW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFVzZXJP
YmplY3RJbXAqPihmdW5jdGlvbk9iamVjdCktPmNhbGxBc0Z1bmN0aW9uKGV4ZWMsIGFzT2JqZWN0
KHRoaXNWYWx1ZSksIGFyZ3MpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxVc2VyT2JqZWN0SW1w
Kj4oZXhlYy0+Y2FsbGVlKCkpLT5jYWxsQXNGdW5jdGlvbihleGVjKTsKIH0KIAogQ2FsbFR5cGUg
SlNVc2VyT2JqZWN0OjpnZXRDYWxsRGF0YShDYWxsRGF0YSYgY2FsbERhdGEpCkluZGV4OiBKYXZh
U2NyaXB0R2x1ZS9Vc2VyT2JqZWN0SW1wLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0R2x1
ZS9Vc2VyT2JqZWN0SW1wLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBKYXZhU2NyaXB0R2x1ZS9V
c2VyT2JqZWN0SW1wLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsMTggKzU2LDE4IEBAIENhbGxU
eXBlIFVzZXJPYmplY3RJbXA6OmdldENhbGxEYXRhKENhbGwKICAgICByZXR1cm4gZkpTVXNlck9i
amVjdCA/IGZKU1VzZXJPYmplY3QtPmdldENhbGxEYXRhKGNhbGxEYXRhKSA6IENhbGxUeXBlTm9u
ZTsKIH0KIAotSlNWYWx1ZSBVc2VyT2JqZWN0SW1wOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUg
KmV4ZWMsIEpTT2JqZWN0ICp0aGlzT2JqLCBjb25zdCBBcmdMaXN0ICZhcmdzKQorSlNWYWx1ZSBV
c2VyT2JqZWN0SW1wOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMpCiB7CiAgICAgSlNW
YWx1ZSByZXN1bHQgPSBqc1VuZGVmaW5lZCgpOwotICAgIEpTVXNlck9iamVjdCoganNUaGlzT2Jq
ID0gS0pTVmFsdWVUb0pTT2JqZWN0KHRoaXNPYmosIGV4ZWMpOworICAgIEpTVXNlck9iamVjdCog
anNUaGlzT2JqID0gS0pTVmFsdWVUb0pTT2JqZWN0KGV4ZWMtPmhvc3RUaGlzVmFsdWUoKS50b1Ro
aXNPYmplY3QoZXhlYyksIGV4ZWMpOwogICAgIGlmIChqc1RoaXNPYmopIHsKLSAgICAgICAgQ0ZJ
bmRleCBhcmdDb3VudCA9IGFyZ3Muc2l6ZSgpOworICAgICAgICBDRkluZGV4IGFyZ0NvdW50ID0g
ZXhlYy0+YXJndW1lbnRDb3VudCgpOwogICAgICAgICBDRkFycmF5Q2FsbEJhY2tzIGFycmF5Q2Fs
bEJhY2tzOwogICAgICAgICBKU1R5cGVHZXRDRkFycmF5Q2FsbEJhY2tzKCZhcnJheUNhbGxCYWNr
cyk7CiAgICAgICAgIENGTXV0YWJsZUFycmF5UmVmIGpzQXJncyA9IENGQXJyYXlDcmVhdGVNdXRh
YmxlKDAsIDAsICZhcnJheUNhbGxCYWNrcyk7CiAgICAgICAgIGlmIChqc0FyZ3MpIHsKICAgICAg
ICAgICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IGFyZ0NvdW50OyBpKyspIHsKLSAgICAgICAg
ICAgICAgICBKU1VzZXJPYmplY3QqIGpzQXJnID0gS0pTVmFsdWVUb0pTT2JqZWN0KGFyZ3MuYXQo
aSksIGV4ZWMpOworICAgICAgICAgICAgICAgIEpTVXNlck9iamVjdCoganNBcmcgPSBLSlNWYWx1
ZVRvSlNPYmplY3QoZXhlYy0+YXJndW1lbnQoaSksIGV4ZWMpOwogICAgICAgICAgICAgICAgIENG
QXJyYXlBcHBlbmRWYWx1ZShqc0FyZ3MsICh2b2lkKilqc0FyZyk7CiAgICAgICAgICAgICAgICAg
anNBcmctPlJlbGVhc2UoKTsKICAgICAgICAgICAgIH0KSW5kZXg6IEphdmFTY3JpcHRHbHVlL1Vz
ZXJPYmplY3RJbXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0R2x1ZS9Vc2VyT2JqZWN0SW1w
LmgJKHJldmlzaW9uIDYwMzQxKQorKysgSmF2YVNjcmlwdEdsdWUvVXNlck9iamVjdEltcC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9p
ZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51
bWVyYXRpb25Nb2RlIG1vZGUgPSBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKIAotICAgIHZp
cnR1YWwgSlNWYWx1ZSBjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICp0
aGlzT2JqLCBjb25zdCBBcmdMaXN0ICZhcmdzKTsKKyAgICB2aXJ0dWFsIEpTVmFsdWUgY2FsbEFz
RnVuY3Rpb24oRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90KEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7CiAg
ICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAKSW5kZXg6IFdl
YkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lv
biA2MDM3MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MjYwIEBACisyMDEwLTA1LTI4ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2ltcGxpZmll
ZCB0aGUgaG9zdCBjYWxsaW5nIGNvbnZlbnRpb24uCisKKyAgICAgICAgUEFSVCBPTkU6IEZ1bmN0
aW9uYWwgY29kZSBjaGFuZ2VzLgorICAgICAgICAKKyAgICAgICAgWyBOb25lIGluIFdlYkNvcmUg
XQorICAgICAgICAKKyAgICAgICAgUEFSVCBUV086IEdsb2JhbCBzZWFyY2ggYW5kIHJlcGxhY2Uu
CisgICAgICAgIAorICAgICAgICBJbiB0aGUgYXJlYXMgYmVsb3csIEkgdXNlZCBnbG9iYWwgc2Vh
cmNoLWFuZC1yZXBsYWNlIHRvIGNoYW5nZQorICAgICAgICAgICAgKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpID0+IChFeGVjU3RhdGUqKQorICAgICAgICAg
ICAgYXJncy5zaXplKCkgPT4gZXhlYy0+YXJndW1lbnRDb3VudCgpCisgICAgICAgICAgICBhcmdz
LmF0KGkpID0+IGV4ZWMtPmFyZ3VtZW50KGkpCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0Fy
cmF5QnVmZmVyVmlld0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0FycmF5QnVmZmVy
Vmlldzo6c2xpY2UpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQXJyYXlCdWZmZXJWaWV3SGVs
cGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpzZXRXZWJHTEFycmF5SGVscGVyKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0RmlsbENvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTdHJva2VD
b2xvcik6CisgICAgICAgIChXZWJDb3JlOjpKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c3Ry
b2tlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
ZHJhd0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpkcmF3SW1hZ2VGcm9tUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpKU0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6c2V0U2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpjcmVhdGVQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGVJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZmlsbFRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnN0cm9rZVRleHQpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTQ2xpcGJvYXJkQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
Q2xpcGJvYXJkOjpjbGVhckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SlNDbGlwYm9hcmQ6Omdl
dERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SlNDbGlwYm9hcmQ6OnNldERyYWdJbWFnZSk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNET01BcHBsaWNhdGlvbkNhY2hlQ3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTRE9NQXBwbGljYXRpb25DYWNoZTo6aGFzSXRlbSk6CisgICAgICAg
IChXZWJDb3JlOjpKU0RPTUFwcGxpY2F0aW9uQ2FjaGU6OmFkZCk6CisgICAgICAgIChXZWJDb3Jl
OjpKU0RPTUFwcGxpY2F0aW9uQ2FjaGU6OnJlbW92ZSk6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNET01Gb3JtRGF0YUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUZvcm1EYXRh
OjphcHBlbmQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpvcGVuKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTRE9NV2luZG93OjpzaG93TW9kYWxEaWFsb2cpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01X
aW5kb3c6OnBvc3RNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpzZXRU
aW1lb3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpzZXRJbnRlcnZhbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6YWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAg
IChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChX
ZWJDb3JlOjpKU0RPTVdpbmRvdzo6b3BlbkRhdGFiYXNlKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0RhdGFiYXNlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRGF0YWJhc2U6OmNo
YW5nZVZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlVHJhbnNhY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6SlNEYXRhYmFzZTo6dHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6SlNEYXRhYmFzZTo6cmVhZFRyYW5zYWN0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0RhdGFiYXNlU3luY0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RhdGFiYXNlU3lu
Yzo6Y2hhbmdlVmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVUcmFuc2FjdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpKU0RhdGFiYXNlU3luYzo6dHJhbnNhY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6SlNEYXRhYmFzZVN5bmM6OnJlYWRUcmFuc2FjdGlvbik6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNEZWRpY2F0ZWRXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTRGVkaWNhdGVkV29ya2VyQ29udGV4dDo6cG9zdE1lc3NhZ2UpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTRGVza3RvcE5vdGlmaWNhdGlvbnNDdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNOb3RpZmljYXRpb25DZW50ZXI6OnJlcXVlc3RQZXJtaXNzaW9uKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0Zsb2F0QXJyYXlDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNGbG9hdEFycmF5OjpzZXQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTR2VvbG9j
YXRpb25DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNHZW9sb2NhdGlvbjo6Z2V0Q3Vy
cmVudFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTR2VvbG9jYXRpb246OndhdGNoUG9z
aXRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FsbEhUTUxBbGxDb2xsZWN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTSFRNTEFsbENvbGxlY3Rpb246Oml0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6
SlNIVE1MQWxsQ29sbGVjdGlvbjo6bmFtZWRJdGVtKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTENh
bnZhc0VsZW1lbnQ6OmdldENvbnRleHQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTENv
bGxlY3Rpb25DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FsbEhUTUxDb2xsZWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTENvbGxlY3Rpb246Oml0ZW0pOgorICAgICAgICAo
V2ViQ29yZTo6SlNIVE1MQ29sbGVjdGlvbjo6bmFtZWRJdGVtKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0hUTUxEb2N1bWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxE
b2N1bWVudDo6b3Blbik6CisgICAgICAgIChXZWJDb3JlOjpkb2N1bWVudFdyaXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTSFRNTERvY3VtZW50Ojp3cml0ZSk6CisgICAgICAgIChXZWJDb3JlOjpK
U0hUTUxEb2N1bWVudDo6d3JpdGVsbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MSW5w
dXRFbGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTElucHV0RWxlbWVu
dDo6c2V0U2VsZWN0aW9uUmFuZ2UpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTE9wdGlv
bnNDb2xsZWN0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTE9wdGlvbnND
b2xsZWN0aW9uOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MT3B0aW9uc0NvbGxlY3Rp
b246OnJlbW92ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MU2VsZWN0RWxlbWVudEN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxTZWxlY3RFbGVtZW50OjpyZW1vdmUp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU0hpc3Rvcnk6OnB1c2hTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0hpc3Rv
cnk6OnJlcGxhY2VTdGF0ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlw
dEhvc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6
OmRhdGFiYXNlRm9ySWQpOgorICAgICAgICAoV2ViQ29yZTo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6
OmN1cnJlbnRDYWxsRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6SlNJbmplY3RlZFNjcmlwdEhv
c3Q6Om5vZGVGb3JJZCk6CisgICAgICAgIChXZWJDb3JlOjpKU0luamVjdGVkU2NyaXB0SG9zdDo6
cHVzaE5vZGVQYXRoVG9Gcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpKU0luamVjdGVkU2Ny
aXB0SG9zdDo6c2VsZWN0RGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6SlNJbmplY3RlZFNj
cmlwdEhvc3Q6OnNlbGVjdERPTVN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SlNJbmplY3Rl
ZFNjcmlwdEhvc3Q6OnJlcG9ydERpZERpc3BhdGNoT25JbmplY3RlZFNjcmlwdCk6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnBsYXRmb3JtKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTSW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojpwb3J0KToKKyAgICAgICAgKFdlYkNv
cmU6OkpTSW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpzaG93Q29udGV4dE1lbnUpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTSW50MTZBcnJheUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpK
U0ludDE2QXJyYXk6OnNldCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJbnQzMkFycmF5Q3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSW50MzJBcnJheTo6c2V0KToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0ludDhBcnJheUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpK
U0ludDhBcnJheTo6c2V0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0phdmFTY3JpcHRDYWxs
RnJhbWVDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNKYXZhU2NyaXB0Q2FsbEZyYW1l
OjpldmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0phdmFTY3JpcHRDYWxsRnJhbWU6OnNj
b3BlVHlwZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uOjpyZXBsYWNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTTG9jYXRpb246OnJlbG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uOjphc3Np
Z24pOgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6dG9TdHJpbmcpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTTWVzc2FnZUV2ZW50Ojppbml0TWVzc2FnZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTWVzc2FnZVBv
cnQ6OnBvc3RNZXNzYWdlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3Vz
dG9tLmg6CisgICAgICAgIChXZWJDb3JlOjpoYW5kbGVQb3N0TWVzc2FnZSk6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTm9kZTo6
aW5zZXJ0QmVmb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTm9kZTo6cmVwbGFjZUNoaWxkKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTTm9kZTo6cmVtb3ZlQ2hpbGQpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNOb2RlOjphcHBlbmRDaGlsZCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNOb2RlTGlz
dEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYWxsTm9kZUxpc3QpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTUGx1Z2luRWxlbWVudEZ1bmN0aW9ucy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjYWxsUGx1Z2luKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NRTFJlc3VsdFNldFJv
d0xpc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNTUUxSZXN1bHRTZXRSb3dMaXN0
OjppdGVtKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uQ3VzdG9tLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTcWwpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTU1FMVHJhbnNhY3Rpb25TeW5jQ3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTU1FMVHJhbnNhY3Rpb25TeW5jOjpleGVjdXRlU3FsKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU1NWR0xlbmd0aEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpK
U1NWR0xlbmd0aDo6Y29udmVydFRvU3BlY2lmaWVkVW5pdHMpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTU1ZHTWF0cml4Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHTWF0cml4
OjptdWx0aXBseSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR01hdHJpeDo6aW52ZXJzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1NWR01hdHJpeDo6cm90YXRlRnJvbVZlY3Rvcik6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNTVkdQT0RMaXN0Q3VzdG9tLmg6CisgICAgICAgIChXZWJDb3JlOjpK
U1NWR1BPRExpc3RDdXN0b206OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHUE9ETGlz
dEN1c3RvbTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1BPRExpc3RDdXN0
b206OmdldEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdQT0RMaXN0Q3VzdG9tOjppbnNl
cnRJdGVtQmVmb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHUE9ETGlzdEN1c3RvbTo6cmVw
bGFjZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdQT0RMaXN0Q3VzdG9tOjpyZW1vdmVJ
dGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHUE9ETGlzdEN1c3RvbTo6YXBwZW5kSXRlbSk6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNTVkdQYXRoU2VnTGlzdEN1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU1NWR1BhdGhTZWdMaXN0OjpjbGVhcik6CisgICAgICAgIChXZWJDb3Jl
OjpKU1NWR1BhdGhTZWdMaXN0Ojppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZH
UGF0aFNlZ0xpc3Q6OmdldEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdQYXRoU2VnTGlz
dDo6aW5zZXJ0SXRlbUJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1BhdGhTZWdMaXN0
OjpyZXBsYWNlSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1BhdGhTZWdMaXN0OjpyZW1v
dmVJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHUGF0aFNlZ0xpc3Q6OmFwcGVuZEl0ZW0p
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTVWludDE2QXJyYXlDdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNVaW50MTZBcnJheTo6c2V0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U1VpbnQzMkFycmF5Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVWludDMyQXJyYXk6
OnNldCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNVaW50OEFycmF5Q3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVWludDhBcnJheTo6c2V0KToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyU3ViRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpnZXRPYmplY3RQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmdldEJ1ZmZlclBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQYXJhbWV0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFByb2dyYW1QYXJh
bWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFJl
bmRlcmJ1ZmZlclBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Z2V0U2hhZGVyUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpnZXRUZXhQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFVuaWZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6SlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFZlcnRleEF0dHJpYik6CisgICAgICAgIChXZWJDb3Jl
OjpKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3Jl
OjpKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJD
b3JlOjpkYXRhRnVuY3Rpb25mKToKKyAgICAgICAgKFdlYkNvcmU6OmRhdGFGdW5jdGlvbmkpOgor
ICAgICAgICAoV2ViQ29yZTo6ZGF0YUZ1bmN0aW9uTWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6
OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWZ2KToKKyAgICAgICAgKFdlYkNvcmU6
OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWl2KToKKyAgICAgICAgKFdlYkNvcmU6
OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6
OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMml2KToKKyAgICAgICAgKFdlYkNvcmU6
OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2Z2KToKKyAgICAgICAgKFdlYkNvcmU6
OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2l2KToKKyAgICAgICAgKFdlYkNvcmU6
OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGZ2KToKKyAgICAgICAgKFdlYkNvcmU6
OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGl2KToKKyAgICAgICAgKFdlYkNvcmU6
OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KToKKyAgICAgICAgKFdl
YkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4M2Z2KToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4NGZ2KToK
KyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIx
ZnYpOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0
dHJpYjJmdik6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVy
dGV4QXR0cmliM2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2ZXJ0ZXhBdHRyaWI0ZnYpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViU29ja2V0OjpzZW5kKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNXb3JrZXJDb250ZXh0OjppbXBvcnRTY3JpcHRzKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
V29ya2VyQ29udGV4dDo6c2V0VGltZW91dCk6CisgICAgICAgIChXZWJDb3JlOjpKU1dvcmtlckNv
bnRleHQ6OnNldEludGVydmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2VyQ29udGV4dDo6
b3BlbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2VyQ29udGV4dDo6b3BlbkRh
dGFiYXNlU3luYyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNXb3JrZXI6OnBvc3RNZXNzYWdlKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
WE1MSHR0cFJlcXVlc3Q6Om9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6SlNYTUxIdHRwUmVxdWVz
dDo6c2VuZCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yQ3VzdG9tLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTWFNMVFByb2Nlc3Nvcjo6aW1wb3J0U3R5bGVzaGVldCk6
CisgICAgICAgIChXZWJDb3JlOjpKU1hTTFRQcm9jZXNzb3I6OnRyYW5zZm9ybVRvRnJhZ21lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6SlNYU0xUUHJvY2Vzc29yOjp0cmFuc2Zvcm1Ub0RvY3VtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTWFNMVFByb2Nlc3Nvcjo6c2V0UGFyYW1ldGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTWFNMVFByb2Nlc3Nvcjo6Z2V0UGFyYW1ldGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTWFNMVFByb2Nlc3Nvcjo6cmVtb3ZlUGFyYW1ldGVyKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NoZWR1
bGVkQWN0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2NoZWR1bGVkQWN0aW9uOjpT
Y2hlZHVsZWRBY3Rpb24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5o
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENhbGxGcmFtZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHRDYWxsRnJhbWU6OlNjcmlwdENhbGxGcmFtZSk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvU2NyaXB0Q2FsbEZyYW1lLmg6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0
Q2FsbFN0YWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhbGxTdGFjazo6U2NyaXB0
Q2FsbFN0YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhbGxTdGFjazo6aW5pdGlhbGl6
ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q2FsbFN0YWNrLmg6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgICogYnJpZGdlL2Mv
Y19pbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDSW5zdGFuY2U6Omludm9r
ZU1ldGhvZCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDSW5zdGFuY2U6Omludm9rZURlZmF1
bHRNZXRob2QpOgorICAgICAgICAqIGJyaWRnZS9jL2NfaW5zdGFuY2UuaDoKKyAgICAgICAgKiBi
cmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0MuY3BwOgorICAgICAgICAoSmF2YUluc3RhbmNl
OjppbnZva2VNZXRob2QpOgorICAgICAgICAqIGJyaWRnZS9qbmkvanNjL0phdmFJbnN0YW5jZUpT
Qy5oOgorICAgICAgICAqIGJyaWRnZS9qc2MvQnJpZGdlSlNDLmg6CisgICAgICAgIChKU0M6OkJp
bmRpbmdzOjpJbnN0YW5jZTo6aW52b2tlRGVmYXVsdE1ldGhvZCk6CisgICAgICAgICogYnJpZGdl
L29iamMvb2JqY19pbnN0YW5jZS5oOgorICAgICAgICAqIGJyaWRnZS9vYmpjL29iamNfaW5zdGFu
Y2UubW06CisgICAgICAgIChPYmpjSW5zdGFuY2U6Omludm9rZU1ldGhvZCk6CisgICAgICAgIChP
YmpjSW5zdGFuY2U6Omludm9rZU9iamNNZXRob2QpOgorICAgICAgICAoT2JqY0luc3RhbmNlOjpp
bnZva2VEZWZhdWx0TWV0aG9kKToKKyAgICAgICAgKiBicmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUu
bW06CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpjYWxsT2JqQ0ZhbGxiYWNrT2JqZWN0KToKKyAg
ICAgICAgKiBicmlkZ2UvcnVudGltZV9tZXRob2QuY3BwOgorICAgICAgICAoSlNDOjpjYWxsUnVu
dGltZU1ldGhvZCk6CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmNwcDoKKyAgICAg
ICAgKEpTQzo6QmluZGluZ3M6OmNhbGxSdW50aW1lT2JqZWN0KToKKwogMjAxMC0wNS0yOCAgQWRh
bSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMg
U2VpZGVsLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyVmlld0N1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyVmll
d0N1c3RvbS5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fy
cmF5QnVmZmVyVmlld0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDIzICs2NywyMyBA
QCBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgCiAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNBcnJheUJ1ZmZlclZpZXc6OnNsaWNlKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNBcnJheUJ1ZmZlclZp
ZXc6OnNsaWNlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBBcnJheUJ1ZmZlclZpZXcqIGFycmF5
ID0gcmVpbnRlcnByZXRfY2FzdDxBcnJheUJ1ZmZlclZpZXcqPihpbXBsKCkpOwogCiAgICAgaW50
IHN0YXJ0LCBlbmQ7Ci0gICAgc3dpdGNoIChhcmdzLnNpemUoKSkgeworICAgIHN3aXRjaCAoZXhl
Yy0+YXJndW1lbnRDb3VudCgpKSB7CiAgICAgY2FzZSAwOgogICAgICAgICBzdGFydCA9IDA7CiAg
ICAgICAgIGVuZCA9IGFycmF5LT5sZW5ndGgoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAx
OgotICAgICAgICBzdGFydCA9IGFyZ3MuYXQoMCkudG9JbnQzMihleGVjKTsKKyAgICAgICAgc3Rh
cnQgPSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOwogICAgICAgICBlbmQgPSBhcnJh
eS0+bGVuZ3RoKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN0YXJ0
ID0gYXJncy5hdCgwKS50b0ludDMyKGV4ZWMpOwotICAgICAgICBlbmQgPSBhcmdzLmF0KDEpLnRv
SW50MzIoZXhlYyk7CisgICAgICAgIHN0YXJ0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihl
eGVjKTsKKyAgICAgICAgZW5kID0gZXhlYy0+YXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKICAg
ICB9CiAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGFycmF5LT5zbGljZShz
dGFydCwgZW5kKSk7CiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXJyYXlCdWZmZXJW
aWV3SGVscGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FycmF5QnVm
ZmVyVmlld0hlbHBlci5oCShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNBcnJheUJ1ZmZlclZpZXdIZWxwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsMjkgKzM4LDI5
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHRlbXBsYXRlIDxjbGFzcyBUPgotSlNDOjpKU1Zh
bHVlIHNldFdlYkdMQXJyYXlIZWxwZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFQqIGltcGwsIEpT
Qzo6QXJnTGlzdCBjb25zdCYgYXJncywgVCogKCpjb252ZXJzaW9uRnVuYykoSlNDOjpKU1ZhbHVl
KSkKK0pTQzo6SlNWYWx1ZSBzZXRXZWJHTEFycmF5SGVscGVyKEpTQzo6RXhlY1N0YXRlKiBleGVj
LCBUKiBpbXBsLCBUKiAoKmNvbnZlcnNpb25GdW5jKShKU0M6OkpTVmFsdWUpKQogewotICAgIGlm
IChhcmdzLnNpemUoKSA8IDEpCisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAg
ICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIEpTQzo6U3ludGF4RXJyb3IpOwogCi0gICAg
VCogYXJyYXkgPSAoKmNvbnZlcnNpb25GdW5jKShhcmdzLmF0KDApKTsKKyAgICBUKiBhcnJheSA9
ICgqY29udmVyc2lvbkZ1bmMpKGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICBpZiAoYXJyYXkpIHsK
ICAgICAgICAgLy8gdm9pZCBzZXQoaW4gV2ViR0w8VD5BcnJheSBhcnJheSwgW09wdGlvbmFsXSBp
biB1bnNpZ25lZCBsb25nIG9mZnNldCk7CiAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IDA7Ci0g
ICAgICAgIGlmIChhcmdzLnNpemUoKSA9PSAyKQotICAgICAgICAgICAgb2Zmc2V0ID0gYXJncy5h
dCgxKS50b0ludDMyKGV4ZWMpOworICAgICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID09
IDIpCisgICAgICAgICAgICBvZmZzZXQgPSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMp
OwogICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICAgICAgaW1wbC0+c2V0KGFycmF5
LCBvZmZzZXQsIGVjKTsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICAg
ICAgcmV0dXJuIEpTQzo6anNVbmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBpZiAoYXJncy5hdCgw
KS5pc09iamVjdCgpKSB7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkpIHsK
ICAgICAgICAgLy8gdm9pZCBzZXQoaW4gc2VxdWVuY2U8bG9uZz4gYXJyYXksIFtPcHRpb25hbF0g
aW4gdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgICAgICBKU0M6OkpTT2JqZWN0KiBhcnJheSA9
IEpTQzo6YXNPYmplY3QoYXJncy5hdCgwKSk7CisgICAgICAgIEpTQzo6SlNPYmplY3QqIGFycmF5
ID0gSlNDOjphc09iamVjdChleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgICAgIHVpbnQzMl90IG9m
ZnNldCA9IDA7Ci0gICAgICAgIGlmIChhcmdzLnNpemUoKSA9PSAyKQotICAgICAgICAgICAgb2Zm
c2V0ID0gYXJncy5hdCgxKS50b0ludDMyKGV4ZWMpOworICAgICAgICBpZiAoZXhlYy0+YXJndW1l
bnRDb3VudCgpID09IDIpCisgICAgICAgICAgICBvZmZzZXQgPSBleGVjLT5hcmd1bWVudCgxKS50
b0ludDMyKGV4ZWMpOwogICAgICAgICB1aW50MzJfdCBsZW5ndGggPSBhcnJheS0+Z2V0KGV4ZWMs
IEpTQzo6SWRlbnRpZmllcihleGVjLCAibGVuZ3RoIikpLnRvSW50MzIoZXhlYyk7CiAgICAgICAg
IGlmIChvZmZzZXQgPiBpbXBsLT5sZW5ndGgoKQogICAgICAgICAgICAgfHwgb2Zmc2V0ICsgbGVu
Z3RoID4gaW1wbC0+bGVuZ3RoKCkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCShyZXZpc2lvbiA2MDM0
MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4OSw3IEBAIHZvaWQgSlNDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OnNldEZpbGwKICAgICBjb250ZXh0LT5zZXRGaWxsU3R5bGUodG9IVE1M
Q2FudmFzU3R5bGUoZXhlYywgdmFsdWUpKTsKIH0KIAotSlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6c2V0RmlsbENvbG9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYg
YXJncykKK0pTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZpbGxDb2xvcihF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0
ID0gc3RhdGljX2Nhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKj4oaW1wbCgpKTsKIApAQCAt
OTksMjYgKzk5LDI2IEBAIEpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEYK
ICAgICAvLyBudW1iZXIgYXJnLCBudW1iZXIgYXJnID0gZ3JheSBjb2xvciwgYWxwaGEKICAgICAv
LyA0IGFyZ3MgPSByLCBnLCBiLCBhCiAgICAgLy8gNSBhcmdzID0gYywgbSwgeSwgaywgYQotICAg
IHN3aXRjaCAoYXJncy5zaXplKCkpIHsKKyAgICBzd2l0Y2ggKGV4ZWMtPmFyZ3VtZW50Q291bnQo
KSkgewogICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICBpZiAoYXJncy5hdCgwKS5pc1N0cmlu
ZygpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcih1c3RyaW5nVG9TdHJp
bmcoYXNTdHJpbmcoYXJncy5hdCgwKSktPnZhbHVlKGV4ZWMpKSk7CisgICAgICAgICAgICBpZiAo
ZXhlYy0+YXJndW1lbnQoMCkuaXNTdHJpbmcoKSkKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5z
ZXRGaWxsQ29sb3IodXN0cmluZ1RvU3RyaW5nKGFzU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApKS0+
dmFsdWUoZXhlYykpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb250ZXh0
LT5zZXRGaWxsQ29sb3IoYXJncy5hdCgwKS50b0Zsb2F0KGV4ZWMpKTsKKyAgICAgICAgICAgICAg
ICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoZXhlYy0+YXJndW1lbnQoMCkudG9GbG9hdChleGVjKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgaWYgKGFy
Z3MuYXQoMCkuaXNTdHJpbmcoKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29s
b3IodXN0cmluZ1RvU3RyaW5nKGFzU3RyaW5nKGFyZ3MuYXQoMCkpLT52YWx1ZShleGVjKSksIGFy
Z3MuYXQoMSkudG9GbG9hdChleGVjKSk7CisgICAgICAgICAgICBpZiAoZXhlYy0+YXJndW1lbnQo
MCkuaXNTdHJpbmcoKSkKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IodXN0
cmluZ1RvU3RyaW5nKGFzU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApKS0+dmFsdWUoZXhlYykpLCBl
eGVjLT5hcmd1bWVudCgxKS50b0Zsb2F0KGV4ZWMpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoYXJncy5hdCgwKS50b0Zsb2F0KGV4ZWMp
LCBhcmdzLmF0KDEpLnRvRmxvYXQoZXhlYykpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPnNl
dEZpbGxDb2xvcihleGVjLT5hcmd1bWVudCgwKS50b0Zsb2F0KGV4ZWMpLCBleGVjLT5hcmd1bWVu
dCgxKS50b0Zsb2F0KGV4ZWMpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIDQ6
Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoYXJncy5hdCgwKS50b0Zsb2F0KGV4
ZWMpLCBhcmdzLmF0KDEpLnRvRmxvYXQoZXhlYyksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXJncy5hdCgyKS50b0Zsb2F0KGV4ZWMpLCBhcmdzLmF0KDMpLnRvRmxvYXQoZXhl
YykpOworICAgICAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKGV4ZWMtPmFyZ3VtZW50KDAp
LnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFyZ3VtZW50KDEpLnRvRmxvYXQoZXhlYyksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlYy0+YXJndW1lbnQoMikudG9GbG9hdChleGVj
KSwgZXhlYy0+YXJndW1lbnQoMykudG9GbG9hdChleGVjKSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSA1OgotICAgICAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKGFyZ3Mu
YXQoMCkudG9GbG9hdChleGVjKSwgYXJncy5hdCgxKS50b0Zsb2F0KGV4ZWMpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MuYXQoMikudG9GbG9hdChleGVjKSwgYXJncy5h
dCgzKS50b0Zsb2F0KGV4ZWMpLCBhcmdzLmF0KDQpLnRvRmxvYXQoZXhlYykpOworICAgICAgICAg
ICAgY29udGV4dC0+c2V0RmlsbENvbG9yKGV4ZWMtPmFyZ3VtZW50KDApLnRvRmxvYXQoZXhlYyks
IGV4ZWMtPmFyZ3VtZW50KDEpLnRvRmxvYXQoZXhlYyksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXhlYy0+YXJndW1lbnQoMikudG9GbG9hdChleGVjKSwgZXhlYy0+YXJndW1l
bnQoMykudG9GbG9hdChleGVjKSwgZXhlYy0+YXJndW1lbnQoNCkudG9GbG9hdChleGVjKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yKTsKQEAgLTEyNiw3ICsxMjYsNyBAQCBKU1ZhbHVl
IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiB9ICAgIAogCi1KU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTdHJv
a2VDb2xvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpT
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTdHJva2VDb2xvcihFeGVjU3RhdGUqIGV4ZWMp
CiB7IAogICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogY29udGV4dCA9IHN0YXRpY19jYXN0
PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCo+KGltcGwoKSk7CiAKQEAgLTEzNiwyNiArMTM2LDI2
IEBAIEpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFMKICAgICAvLyBudW1i
ZXIgYXJnLCBudW1iZXIgYXJnID0gZ3JheSBjb2xvciwgYWxwaGEKICAgICAvLyA0IGFyZ3MgPSBy
LCBnLCBiLCBhCiAgICAgLy8gNSBhcmdzID0gYywgbSwgeSwgaywgYQotICAgIHN3aXRjaCAoYXJn
cy5zaXplKCkpIHsKKyAgICBzd2l0Y2ggKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSkgewogICAgICAg
ICBjYXNlIDE6Ci0gICAgICAgICAgICBpZiAoYXJncy5hdCgwKS5pc1N0cmluZygpKQotICAgICAg
ICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKHVzdHJpbmdUb1N0cmluZyhhc1N0cmlu
ZyhhcmdzLmF0KDApKS0+dmFsdWUoZXhlYykpKTsKKyAgICAgICAgICAgIGlmIChleGVjLT5hcmd1
bWVudCgwKS5pc1N0cmluZygpKQorICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNv
bG9yKHVzdHJpbmdUb1N0cmluZyhhc1N0cmluZyhleGVjLT5hcmd1bWVudCgwKSktPnZhbHVlKGV4
ZWMpKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ry
b2tlQ29sb3IoYXJncy5hdCgwKS50b0Zsb2F0KGV4ZWMpKTsKKyAgICAgICAgICAgICAgICBjb250
ZXh0LT5zZXRTdHJva2VDb2xvcihleGVjLT5hcmd1bWVudCgwKS50b0Zsb2F0KGV4ZWMpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICBpZiAoYXJncy5h
dCgwKS5pc1N0cmluZygpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9y
KHVzdHJpbmdUb1N0cmluZyhhc1N0cmluZyhhcmdzLmF0KDApKS0+dmFsdWUoZXhlYykpLCBhcmdz
LmF0KDEpLnRvRmxvYXQoZXhlYykpOworICAgICAgICAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50KDAp
LmlzU3RyaW5nKCkpCisgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IodXN0
cmluZ1RvU3RyaW5nKGFzU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApKS0+dmFsdWUoZXhlYykpLCBl
eGVjLT5hcmd1bWVudCgxKS50b0Zsb2F0KGV4ZWMpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihhcmdzLmF0KDApLnRvRmxvYXQoZXhl
YyksIGFyZ3MuYXQoMSkudG9GbG9hdChleGVjKSk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+
c2V0U3Ryb2tlQ29sb3IoZXhlYy0+YXJndW1lbnQoMCkudG9GbG9hdChleGVjKSwgZXhlYy0+YXJn
dW1lbnQoMSkudG9GbG9hdChleGVjKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSA0OgotICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoYXJncy5hdCgwKS50b0Zs
b2F0KGV4ZWMpLCBhcmdzLmF0KDEpLnRvRmxvYXQoZXhlYyksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhcmdzLmF0KDIpLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoMykudG9G
bG9hdChleGVjKSk7CisgICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihleGVjLT5h
cmd1bWVudCgwKS50b0Zsb2F0KGV4ZWMpLCBleGVjLT5hcmd1bWVudCgxKS50b0Zsb2F0KGV4ZWMp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlYy0+YXJndW1lbnQoMiku
dG9GbG9hdChleGVjKSwgZXhlYy0+YXJndW1lbnQoMykudG9GbG9hdChleGVjKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSA1OgotICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ry
b2tlQ29sb3IoYXJncy5hdCgwKS50b0Zsb2F0KGV4ZWMpLCBhcmdzLmF0KDEpLnRvRmxvYXQoZXhl
YyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLmF0KDIpLnRvRmxv
YXQoZXhlYyksIGFyZ3MuYXQoMykudG9GbG9hdChleGVjKSwgYXJncy5hdCg0KS50b0Zsb2F0KGV4
ZWMpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKGV4ZWMtPmFyZ3VtZW50
KDApLnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFyZ3VtZW50KDEpLnRvRmxvYXQoZXhlYyksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjLT5hcmd1bWVudCgyKS50b0Zsb2F0
KGV4ZWMpLCBleGVjLT5hcmd1bWVudCgzKS50b0Zsb2F0KGV4ZWMpLCBleGVjLT5hcmd1bWVudCg0
KS50b0Zsb2F0KGV4ZWMpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOwpAQCAtMTY0
LDIxICsxNjQsMjEgQEAgSlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Uwog
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpzdHJva2VSZWN0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJn
cykKK0pTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnN0cm9rZVJlY3QoRXhlY1N0
YXRlKiBleGVjKQogeyAKICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGNvbnRleHQgPSBz
dGF0aWNfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqPihpbXBsKCkpOwogICAgIAotICAg
IGlmIChhcmdzLnNpemUoKSA8PSA0KQotICAgICAgICBjb250ZXh0LT5zdHJva2VSZWN0KGFyZ3Mu
YXQoMCkudG9GbG9hdChleGVjKSwgYXJncy5hdCgxKS50b0Zsb2F0KGV4ZWMpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFyZ3MuYXQoMikudG9GbG9hdChleGVjKSwgYXJncy5hdCgzKS50
b0Zsb2F0KGV4ZWMpKTsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDw9IDQpCisgICAg
ICAgIGNvbnRleHQtPnN0cm9rZVJlY3QoZXhlYy0+YXJndW1lbnQoMCkudG9GbG9hdChleGVjKSwg
ZXhlYy0+YXJndW1lbnQoMSkudG9GbG9hdChleGVjKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBleGVjLT5hcmd1bWVudCgyKS50b0Zsb2F0KGV4ZWMpLCBleGVjLT5hcmd1bWVudCgzKS50
b0Zsb2F0KGV4ZWMpKTsKICAgICBlbHNlCi0gICAgICAgIGNvbnRleHQtPnN0cm9rZVJlY3QoYXJn
cy5hdCgwKS50b0Zsb2F0KGV4ZWMpLCBhcmdzLmF0KDEpLnRvRmxvYXQoZXhlYyksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXJncy5hdCgyKS50b0Zsb2F0KGV4ZWMpLCBhcmdzLmF0KDMp
LnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoNCkudG9GbG9hdChleGVjKSk7CisgICAgICAgIGNvbnRl
eHQtPnN0cm9rZVJlY3QoZXhlYy0+YXJndW1lbnQoMCkudG9GbG9hdChleGVjKSwgZXhlYy0+YXJn
dW1lbnQoMSkudG9GbG9hdChleGVjKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVj
LT5hcmd1bWVudCgyKS50b0Zsb2F0KGV4ZWMpLCBleGVjLT5hcmd1bWVudCgzKS50b0Zsb2F0KGV4
ZWMpLCBleGVjLT5hcmd1bWVudCg0KS50b0Zsb2F0KGV4ZWMpKTsKIAogICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOyAgICAKIH0KIAotSlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
ZHJhd0ltYWdlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUg
SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZShFeGVjU3RhdGUqIGV4ZWMpCiB7
IAogICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogY29udGV4dCA9IHN0YXRpY19jYXN0PENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRCo+KGltcGwoKSk7CiAKQEAgLTE4OCw3ICsxODgsNyBAQCBK
U1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3CiAgICAgLy8gICAgIGRyYXdJ
bWFnZShpbWcsIHN4LCBzeSwgc3csIHNoLCBkeCwgZHksIGR3LCBkaCkKICAgICAvLyBDb21wb3Np
dGUgb3BlcmF0aW9uIGlzIHNwZWNpZmllZCB3aXRoIGdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbi4K
ICAgICAvLyBUaGUgaW1nIHBhcmFtZXRlciBjYW4gYmUgYSA8aW1nPiBvciA8Y2FudmFzPiBlbGVt
ZW50LgotICAgIEpTVmFsdWUgdmFsdWUgPSBhcmdzLmF0KDApOworICAgIEpTVmFsdWUgdmFsdWUg
PSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCiAgICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAgICAgSlNPYmplY3QqIG8gPSBh
c09iamVjdCh2YWx1ZSk7CkBAIC0xOTYsMjAgKzE5NiwyMCBAQCBKU1ZhbHVlIEpTQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpkcmF3CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgaWYg
KG8tPmluaGVyaXRzKCZKU0hUTUxJbWFnZUVsZW1lbnQ6OnNfaW5mbykpIHsKICAgICAgICAgSFRN
TEltYWdlRWxlbWVudCogaW1nRWx0ID0gc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudCo+KHN0
YXRpY19jYXN0PEpTSFRNTEVsZW1lbnQqPihvKS0+aW1wbCgpKTsKLSAgICAgICAgc3dpdGNoIChh
cmdzLnNpemUoKSkgeworICAgICAgICBzd2l0Y2ggKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSkgewog
ICAgICAgICAgICAgY2FzZSAzOgotICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShp
bWdFbHQsIGFyZ3MuYXQoMSkudG9GbG9hdChleGVjKSwgYXJncy5hdCgyKS50b0Zsb2F0KGV4ZWMp
LCBlYyk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKGltZ0VsdCwgZXhlYy0+
YXJndW1lbnQoMSkudG9GbG9hdChleGVjKSwgZXhlYy0+YXJndW1lbnQoMikudG9GbG9hdChleGVj
KSwgZWMpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSA1OgotICAg
ICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWdFbHQsIGFyZ3MuYXQoMSkudG9GbG9h
dChleGVjKSwgYXJncy5hdCgyKS50b0Zsb2F0KGV4ZWMpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhcmdzLmF0KDMpLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoNCkudG9GbG9h
dChleGVjKSwgZWMpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWdFbHQs
IGV4ZWMtPmFyZ3VtZW50KDEpLnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFyZ3VtZW50KDIpLnRvRmxv
YXQoZXhlYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWMtPmFyZ3Vt
ZW50KDMpLnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFyZ3VtZW50KDQpLnRvRmxvYXQoZXhlYyksIGVj
KTsKICAgICAgICAgICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSA5OgotICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmRyYXdJbWFnZShpbWdFbHQsIEZsb2F0UmVjdChhcmdzLmF0KDEpLnRvRmxvYXQoZXhlYyks
IGFyZ3MuYXQoMikudG9GbG9hdChleGVjKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYXJncy5hdCgzKS50b0Zsb2F0KGV4ZWMpLCBhcmdzLmF0KDQpLnRvRmxvYXQoZXhlYykp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlY3QoYXJncy5hdCg1
KS50b0Zsb2F0KGV4ZWMpLCBhcmdzLmF0KDYpLnRvRmxvYXQoZXhlYyksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFyZ3MuYXQoNykudG9GbG9hdChleGVjKSwgYXJncy5hdCg4
KS50b0Zsb2F0KGV4ZWMpKSwgZWMpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFn
ZShpbWdFbHQsIEZsb2F0UmVjdChleGVjLT5hcmd1bWVudCgxKS50b0Zsb2F0KGV4ZWMpLCBleGVj
LT5hcmd1bWVudCgyKS50b0Zsb2F0KGV4ZWMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBleGVjLT5hcmd1bWVudCgzKS50b0Zsb2F0KGV4ZWMpLCBleGVjLT5hcmd1bWVudCg0
KS50b0Zsb2F0KGV4ZWMpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxv
YXRSZWN0KGV4ZWMtPmFyZ3VtZW50KDUpLnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFyZ3VtZW50KDYp
LnRvRmxvYXQoZXhlYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWMt
PmFyZ3VtZW50KDcpLnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFyZ3VtZW50KDgpLnRvRmxvYXQoZXhl
YykpLCBlYyk7CiAgICAgICAgICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0yMTcsMjAgKzIx
NywyMCBAQCBKU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3CiAgICAgICAg
IH0KICAgICB9IGVsc2UgaWYgKG8tPmluaGVyaXRzKCZKU0hUTUxDYW52YXNFbGVtZW50OjpzX2lu
Zm8pKSB7CiAgICAgICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBzdGF0aWNfY2FzdDxI
VE1MQ2FudmFzRWxlbWVudCo+KHN0YXRpY19jYXN0PEpTSFRNTEVsZW1lbnQqPihvKS0+aW1wbCgp
KTsKLSAgICAgICAgc3dpdGNoIChhcmdzLnNpemUoKSkgeworICAgICAgICBzd2l0Y2ggKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSkgewogICAgICAgICAgICAgY2FzZSAzOgotICAgICAgICAgICAgICAg
IGNvbnRleHQtPmRyYXdJbWFnZShjYW52YXMsIGFyZ3MuYXQoMSkudG9GbG9hdChleGVjKSwgYXJn
cy5hdCgyKS50b0Zsb2F0KGV4ZWMpLCBlYyk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZHJh
d0ltYWdlKGNhbnZhcywgZXhlYy0+YXJndW1lbnQoMSkudG9GbG9hdChleGVjKSwgZXhlYy0+YXJn
dW1lbnQoMikudG9GbG9hdChleGVjKSwgZWMpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgY2FzZSA1OgotICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShjYW52
YXMsIGFyZ3MuYXQoMSkudG9GbG9hdChleGVjKSwgYXJncy5hdCgyKS50b0Zsb2F0KGV4ZWMpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLmF0KDMpLnRvRmxvYXQoZXhl
YyksIGFyZ3MuYXQoNCkudG9GbG9hdChleGVjKSwgZWMpOworICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmRyYXdJbWFnZShjYW52YXMsIGV4ZWMtPmFyZ3VtZW50KDEpLnRvRmxvYXQoZXhlYyksIGV4
ZWMtPmFyZ3VtZW50KDIpLnRvRmxvYXQoZXhlYyksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGV4ZWMtPmFyZ3VtZW50KDMpLnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFyZ3VtZW50
KDQpLnRvRmxvYXQoZXhlYyksIGVjKTsKICAgICAgICAgICAgICAgICBzZXRET01FeGNlcHRpb24o
ZXhlYywgZWMpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSA5Ogot
ICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShjYW52YXMsIEZsb2F0UmVjdChhcmdz
LmF0KDEpLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoMikudG9GbG9hdChleGVjKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5hdCgzKS50b0Zsb2F0KGV4ZWMpLCBhcmdz
LmF0KDQpLnRvRmxvYXQoZXhlYykpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBGbG9hdFJlY3QoYXJncy5hdCg1KS50b0Zsb2F0KGV4ZWMpLCBhcmdzLmF0KDYpLnRvRmxvYXQo
ZXhlYyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MuYXQoNykudG9G
bG9hdChleGVjKSwgYXJncy5hdCg4KS50b0Zsb2F0KGV4ZWMpKSwgZWMpOworICAgICAgICAgICAg
ICAgIGNvbnRleHQtPmRyYXdJbWFnZShjYW52YXMsIEZsb2F0UmVjdChleGVjLT5hcmd1bWVudCgx
KS50b0Zsb2F0KGV4ZWMpLCBleGVjLT5hcmd1bWVudCgyKS50b0Zsb2F0KGV4ZWMpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjLT5hcmd1bWVudCgzKS50b0Zsb2F0KGV4
ZWMpLCBleGVjLT5hcmd1bWVudCg0KS50b0Zsb2F0KGV4ZWMpKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRmxvYXRSZWN0KGV4ZWMtPmFyZ3VtZW50KDUpLnRvRmxvYXQoZXhl
YyksIGV4ZWMtPmFyZ3VtZW50KDYpLnRvRmxvYXQoZXhlYyksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGV4ZWMtPmFyZ3VtZW50KDcpLnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFy
Z3VtZW50KDgpLnRvRmxvYXQoZXhlYykpLCBlYyk7CiAgICAgICAgICAgICAgICAgc2V0RE9NRXhj
ZXB0aW9uKGV4ZWMsIGVjKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRl
ZmF1bHQ6CkBAIC0yMzksMjAgKzIzOSwyMCBAQCBKU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpkcmF3CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIH0gZWxzZSBpZiAoby0+aW5oZXJp
dHMoJkpTSFRNTFZpZGVvRWxlbWVudDo6c19pbmZvKSkgewogICAgICAgICAgICAgSFRNTFZpZGVv
RWxlbWVudCogdmlkZW8gPSBzdGF0aWNfY2FzdDxIVE1MVmlkZW9FbGVtZW50Kj4oc3RhdGljX2Nh
c3Q8SlNIVE1MRWxlbWVudCo+KG8pLT5pbXBsKCkpOwotICAgICAgICAgICAgc3dpdGNoIChhcmdz
LnNpemUoKSkgeworICAgICAgICAgICAgc3dpdGNoIChleGVjLT5hcmd1bWVudENvdW50KCkpIHsK
ICAgICAgICAgICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmRy
YXdJbWFnZSh2aWRlbywgYXJncy5hdCgxKS50b0Zsb2F0KGV4ZWMpLCBhcmdzLmF0KDIpLnRvRmxv
YXQoZXhlYyksIGVjKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKHZp
ZGVvLCBleGVjLT5hcmd1bWVudCgxKS50b0Zsb2F0KGV4ZWMpLCBleGVjLT5hcmd1bWVudCgyKS50
b0Zsb2F0KGV4ZWMpLCBlYyk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIGNhc2UgNToKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKHZp
ZGVvLCBhcmdzLmF0KDEpLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoMikudG9GbG9hdChleGVjKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MuYXQoMykudG9GbG9h
dChleGVjKSwgYXJncy5hdCg0KS50b0Zsb2F0KGV4ZWMpLCBlYyk7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQtPmRyYXdJbWFnZSh2aWRlbywgZXhlYy0+YXJndW1lbnQoMSkudG9GbG9hdChl
eGVjKSwgZXhlYy0+YXJndW1lbnQoMikudG9GbG9hdChleGVjKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGV4ZWMtPmFyZ3VtZW50KDMpLnRvRmxvYXQoZXhlYyksIGV4
ZWMtPmFyZ3VtZW50KDQpLnRvRmxvYXQoZXhlYyksIGVjKTsKICAgICAgICAgICAgICAgICAgICAg
c2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgY2FzZSA5OgotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5kcmF3
SW1hZ2UodmlkZW8sIEZsb2F0UmVjdChhcmdzLmF0KDEpLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQo
MikudG9GbG9hdChleGVjKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFyZ3MuYXQoMykudG9GbG9hdChleGVjKSwgYXJncy5hdCg0KS50b0Zsb2F0KGV4ZWMpKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVjdChhcmdzLmF0KDUp
LnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoNikudG9GbG9hdChleGVjKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MuYXQoNykudG9GbG9hdChleGVjKSwgYXJncy5h
dCg4KS50b0Zsb2F0KGV4ZWMpKSwgZWMpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5k
cmF3SW1hZ2UodmlkZW8sIEZsb2F0UmVjdChleGVjLT5hcmd1bWVudCgxKS50b0Zsb2F0KGV4ZWMp
LCBleGVjLT5hcmd1bWVudCgyKS50b0Zsb2F0KGV4ZWMpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXhlYy0+YXJndW1lbnQoMykudG9GbG9hdChleGVjKSwgZXhlYy0+
YXJndW1lbnQoNCkudG9GbG9hdChleGVjKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBGbG9hdFJlY3QoZXhlYy0+YXJndW1lbnQoNSkudG9GbG9hdChleGVjKSwgZXhl
Yy0+YXJndW1lbnQoNikudG9GbG9hdChleGVjKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGV4ZWMtPmFyZ3VtZW50KDcpLnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFyZ3Vt
ZW50KDgpLnRvRmxvYXQoZXhlYykpLCBlYyk7CiAgICAgICAgICAgICAgICAgICAgIHNldERPTUV4
Y2VwdGlvbihleGVjLCBlYyk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CkBAIC0yNjYsMTEgKzI2NiwxMSBAQCBKU1ZhbHVlIEpTQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpkcmF3CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7ICAgIAogfQog
Ci1KU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1hZ2VGcm9tUmVjdChF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1hZ2VGcm9tUmVjdChFeGVjU3RhdGUqIGV4ZWMpCiB7IAog
ICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogY29udGV4dCA9IHN0YXRpY19jYXN0PENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRCo+KGltcGwoKSk7CiAgICAgCi0gICAgSlNWYWx1ZSB2YWx1ZSA9
IGFyZ3MuYXQoMCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAg
IGlmICghdmFsdWUuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywg
VHlwZUVycm9yKTsKICAgICBKU09iamVjdCogbyA9IGFzT2JqZWN0KHZhbHVlKTsKQEAgLTI3OCw1
MiArMjc4LDUyIEBAIEpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXcKICAg
ICBpZiAoIW8tPmluaGVyaXRzKCZKU0hUTUxJbWFnZUVsZW1lbnQ6OnNfaW5mbykpCiAgICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAgICAgY29udGV4dC0+ZHJhd0lt
YWdlRnJvbVJlY3Qoc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudCo+KHN0YXRpY19jYXN0PEpT
SFRNTEVsZW1lbnQqPihvKS0+aW1wbCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhcmdzLmF0KDEpLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoMikudG9GbG9hdChleGVjKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLmF0KDMpLnRvRmxvYXQoZXhlYyksIGFy
Z3MuYXQoNCkudG9GbG9hdChleGVjKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
cmdzLmF0KDUpLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoNikudG9GbG9hdChleGVjKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLmF0KDcpLnRvRmxvYXQoZXhlYyksIGFyZ3Mu
YXQoOCkudG9GbG9hdChleGVjKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c3Ry
aW5nVG9TdHJpbmcoYXJncy5hdCg5KS50b1N0cmluZyhleGVjKSkpOyAgICAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBleGVjLT5hcmd1bWVudCgxKS50b0Zsb2F0KGV4ZWMpLCBleGVj
LT5hcmd1bWVudCgyKS50b0Zsb2F0KGV4ZWMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGV4ZWMtPmFyZ3VtZW50KDMpLnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFyZ3VtZW50KDQpLnRv
RmxvYXQoZXhlYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlYy0+YXJndW1l
bnQoNSkudG9GbG9hdChleGVjKSwgZXhlYy0+YXJndW1lbnQoNikudG9GbG9hdChleGVjKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjLT5hcmd1bWVudCg3KS50b0Zsb2F0KGV4
ZWMpLCBleGVjLT5hcmd1bWVudCg4KS50b0Zsb2F0KGV4ZWMpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCg5KS50b1N0cmluZyhl
eGVjKSkpOyAgICAKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsgICAgCiB9CiAKLUpTVmFsdWUg
SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFNoYWRvdyhFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpz
ZXRTaGFkb3coRXhlY1N0YXRlKiBleGVjKQogeyAKICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQqIGNvbnRleHQgPSBzdGF0aWNfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqPihpbXBs
KCkpOwogCi0gICAgc3dpdGNoIChhcmdzLnNpemUoKSkgeworICAgIHN3aXRjaCAoZXhlYy0+YXJn
dW1lbnRDb3VudCgpKSB7CiAgICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgIGNvbnRleHQtPnNl
dFNoYWRvdyhhcmdzLmF0KDApLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoMSkudG9GbG9hdChleGVj
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLmF0KDIpLnRvRmxvYXQoZXhl
YykpOworICAgICAgICAgICAgY29udGV4dC0+c2V0U2hhZG93KGV4ZWMtPmFyZ3VtZW50KDApLnRv
RmxvYXQoZXhlYyksIGV4ZWMtPmFyZ3VtZW50KDEpLnRvRmxvYXQoZXhlYyksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXhlYy0+YXJndW1lbnQoMikudG9GbG9hdChleGVjKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgaWYgKGFyZ3Mu
YXQoMykuaXNTdHJpbmcoKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRTaGFkb3coYXJn
cy5hdCgwKS50b0Zsb2F0KGV4ZWMpLCBhcmdzLmF0KDEpLnRvRmxvYXQoZXhlYyksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MuYXQoMikudG9GbG9hdChleGVjKSwgdXN0
cmluZ1RvU3RyaW5nKGFzU3RyaW5nKGFyZ3MuYXQoMykpLT52YWx1ZShleGVjKSkpOworICAgICAg
ICAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50KDMpLmlzU3RyaW5nKCkpCisgICAgICAgICAgICAgICAg
Y29udGV4dC0+c2V0U2hhZG93KGV4ZWMtPmFyZ3VtZW50KDApLnRvRmxvYXQoZXhlYyksIGV4ZWMt
PmFyZ3VtZW50KDEpLnRvRmxvYXQoZXhlYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGV4ZWMtPmFyZ3VtZW50KDIpLnRvRmxvYXQoZXhlYyksIHVzdHJpbmdUb1N0cmluZyhh
c1N0cmluZyhleGVjLT5hcmd1bWVudCgzKSktPnZhbHVlKGV4ZWMpKSk7CiAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U2hhZG93KGFyZ3MuYXQoMCkudG9GbG9h
dChleGVjKSwgYXJncy5hdCgxKS50b0Zsb2F0KGV4ZWMpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhcmdzLmF0KDIpLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoMykudG9GbG9h
dChleGVjKSk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U2hhZG93KGV4ZWMtPmFyZ3Vt
ZW50KDApLnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFyZ3VtZW50KDEpLnRvRmxvYXQoZXhlYyksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWMtPmFyZ3VtZW50KDIpLnRvRmxv
YXQoZXhlYyksIGV4ZWMtPmFyZ3VtZW50KDMpLnRvRmxvYXQoZXhlYykpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgNToKLSAgICAgICAgICAgIGlmIChhcmdzLmF0KDMpLmlzU3Ry
aW5nKCkpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U2hhZG93KGFyZ3MuYXQoMCkudG9G
bG9hdChleGVjKSwgYXJncy5hdCgxKS50b0Zsb2F0KGV4ZWMpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhcmdzLmF0KDIpLnRvRmxvYXQoZXhlYyksIHVzdHJpbmdUb1N0cmlu
Zyhhc1N0cmluZyhhcmdzLmF0KDMpKS0+dmFsdWUoZXhlYykpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhcmdzLmF0KDQpLnRvRmxvYXQoZXhlYykpOworICAgICAgICAgICAg
aWYgKGV4ZWMtPmFyZ3VtZW50KDMpLmlzU3RyaW5nKCkpCisgICAgICAgICAgICAgICAgY29udGV4
dC0+c2V0U2hhZG93KGV4ZWMtPmFyZ3VtZW50KDApLnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFyZ3Vt
ZW50KDEpLnRvRmxvYXQoZXhlYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGV4ZWMtPmFyZ3VtZW50KDIpLnRvRmxvYXQoZXhlYyksIHVzdHJpbmdUb1N0cmluZyhhc1N0cmlu
ZyhleGVjLT5hcmd1bWVudCgzKSktPnZhbHVlKGV4ZWMpKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXhlYy0+YXJndW1lbnQoNCkudG9GbG9hdChleGVjKSk7CiAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U2hhZG93KGFyZ3MuYXQoMCku
dG9GbG9hdChleGVjKSwgYXJncy5hdCgxKS50b0Zsb2F0KGV4ZWMpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhcmdzLmF0KDIpLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoMyku
dG9GbG9hdChleGVjKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5h
dCg0KS50b0Zsb2F0KGV4ZWMpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRTaGFkb3co
ZXhlYy0+YXJndW1lbnQoMCkudG9GbG9hdChleGVjKSwgZXhlYy0+YXJndW1lbnQoMSkudG9GbG9h
dChleGVjKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlYy0+YXJndW1l
bnQoMikudG9GbG9hdChleGVjKSwgZXhlYy0+YXJndW1lbnQoMykudG9GbG9hdChleGVjKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlYy0+YXJndW1lbnQoNCkudG9GbG9h
dChleGVjKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSA3OgotICAgICAgICAg
ICAgY29udGV4dC0+c2V0U2hhZG93KGFyZ3MuYXQoMCkudG9GbG9hdChleGVjKSwgYXJncy5hdCgx
KS50b0Zsb2F0KGV4ZWMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MuYXQo
MikudG9GbG9hdChleGVjKSwgYXJncy5hdCgzKS50b0Zsb2F0KGV4ZWMpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFyZ3MuYXQoNCkudG9GbG9hdChleGVjKSwgYXJncy5hdCg1KS50
b0Zsb2F0KGV4ZWMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MuYXQoNiku
dG9GbG9hdChleGVjKSk7CisgICAgICAgICAgICBjb250ZXh0LT5zZXRTaGFkb3coZXhlYy0+YXJn
dW1lbnQoMCkudG9GbG9hdChleGVjKSwgZXhlYy0+YXJndW1lbnQoMSkudG9GbG9hdChleGVjKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjLT5hcmd1bWVudCgyKS50b0Zsb2F0
KGV4ZWMpLCBleGVjLT5hcmd1bWVudCgzKS50b0Zsb2F0KGV4ZWMpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGV4ZWMtPmFyZ3VtZW50KDQpLnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFy
Z3VtZW50KDUpLnRvRmxvYXQoZXhlYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZXhlYy0+YXJndW1lbnQoNikudG9GbG9hdChleGVjKSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSA4OgotICAgICAgICAgICAgY29udGV4dC0+c2V0U2hhZG93KGFyZ3MuYXQoMCku
dG9GbG9hdChleGVjKSwgYXJncy5hdCgxKS50b0Zsb2F0KGV4ZWMpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFyZ3MuYXQoMikudG9GbG9hdChleGVjKSwgYXJncy5hdCgzKS50b0Zs
b2F0KGV4ZWMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MuYXQoNCkudG9G
bG9hdChleGVjKSwgYXJncy5hdCg1KS50b0Zsb2F0KGV4ZWMpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFyZ3MuYXQoNikudG9GbG9hdChleGVjKSwgYXJncy5hdCg3KS50b0Zsb2F0
KGV4ZWMpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFNoYWRvdyhleGVjLT5hcmd1bWVudCgw
KS50b0Zsb2F0KGV4ZWMpLCBleGVjLT5hcmd1bWVudCgxKS50b0Zsb2F0KGV4ZWMpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWMtPmFyZ3VtZW50KDIpLnRvRmxvYXQoZXhlYyks
IGV4ZWMtPmFyZ3VtZW50KDMpLnRvRmxvYXQoZXhlYyksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXhlYy0+YXJndW1lbnQoNCkudG9GbG9hdChleGVjKSwgZXhlYy0+YXJndW1lbnQo
NSkudG9GbG9hdChleGVjKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjLT5h
cmd1bWVudCg2KS50b0Zsb2F0KGV4ZWMpLCBleGVjLT5hcmd1bWVudCg3KS50b0Zsb2F0KGV4ZWMp
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOwpAQCAtMzMyLDExICszMzIsMTEgQEAg
SlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0UwogICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOyAgICAKIH0KIAotSlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
Y3JlYXRlUGF0dGVybihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1Zh
bHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGVQYXR0ZXJuKEV4ZWNTdGF0ZSog
ZXhlYykKIHsgCiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0gc3RhdGlj
X2Nhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKj4oaW1wbCgpKTsKIAotICAgIEpTVmFsdWUg
dmFsdWUgPSBhcmdzLmF0KDApOworICAgIEpTVmFsdWUgdmFsdWUgPSBleGVjLT5hcmd1bWVudCgw
KTsKICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KGV4ZWMsIFR5cGVFcnJvcik7CiAgICAgSlNPYmplY3QqIG8gPSBhc09iamVjdCh2YWx1ZSk7CkBA
IC0zNDUsNyArMzQ1LDcgQEAgSlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3Jl
YQogICAgICAgICBFeGNlcHRpb25Db2RlIGVjOwogICAgICAgICBKU1ZhbHVlIHBhdHRlcm4gPSB0
b0pTKGV4ZWMsCiAgICAgICAgICAgICBjb250ZXh0LT5jcmVhdGVQYXR0ZXJuKHN0YXRpY19jYXN0
PEhUTUxJbWFnZUVsZW1lbnQqPihzdGF0aWNfY2FzdDxKU0hUTUxFbGVtZW50Kj4obyktPmltcGwo
KSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlVG9TdHJpbmdXaXRo
TnVsbENoZWNrKGV4ZWMsIGFyZ3MuYXQoMSkpLCBlYykuZ2V0KCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhleGVjLCBleGVj
LT5hcmd1bWVudCgxKSksIGVjKS5nZXQoKSk7CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVj
LCBlYyk7CiAgICAgICAgIHJldHVybiBwYXR0ZXJuOwogICAgIH0KQEAgLTM1Myw3ICszNTMsNyBA
QCBKU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhCiAgICAgICAgIEV4Y2Vw
dGlvbkNvZGUgZWM7CiAgICAgICAgIEpTVmFsdWUgcGF0dGVybiA9IHRvSlMoZXhlYywKICAgICAg
ICAgICAgIGNvbnRleHQtPmNyZWF0ZVBhdHRlcm4oc3RhdGljX2Nhc3Q8SFRNTENhbnZhc0VsZW1l
bnQqPihzdGF0aWNfY2FzdDxKU0hUTUxFbGVtZW50Kj4obyktPmltcGwoKSksCi0gICAgICAgICAg
ICAgICAgdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgYXJncy5hdCgxKSksIGVjKS5n
ZXQoKSk7CisgICAgICAgICAgICAgICAgdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywg
ZXhlYy0+YXJndW1lbnQoMSkpLCBlYykuZ2V0KCkpOwogICAgICAgICBzZXRET01FeGNlcHRpb24o
ZXhlYywgZWMpOwogICAgICAgICByZXR1cm4gcGF0dGVybjsKICAgICB9CkBAIC0zNjEsNyArMzYx
LDcgQEAgSlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYQogICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpjcmVhdGVJbWFnZURhdGEoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQor
SlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlSW1hZ2VEYXRhKEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICAvLyBjcmVhdGVJbWFnZURhdGEgaGFzIHR3byB2YXJpYW50cwog
ICAgIC8vIGNyZWF0ZUltYWdlRGF0YShJbWFnZURhdGEpCkBAIC0zNzAsMTYgKzM3MCwxNiBAQCBK
U1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhCiAgICAgUmVmUHRyPEltYWdl
RGF0YT4gaW1hZ2VEYXRhID0gMDsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGlm
IChhcmdzLnNpemUoKSA9PSAxKQotICAgICAgICBpbWFnZURhdGEgPSBjb250ZXh0LT5jcmVhdGVJ
bWFnZURhdGEodG9JbWFnZURhdGEoYXJncy5hdCgwKSksIGVjKTsKLSAgICBlbHNlIGlmIChhcmdz
LnNpemUoKSA9PSAyKQotICAgICAgICBpbWFnZURhdGEgPSBjb250ZXh0LT5jcmVhdGVJbWFnZURh
dGEoYXJncy5hdCgwKS50b0Zsb2F0KGV4ZWMpLCBhcmdzLmF0KDEpLnRvRmxvYXQoZXhlYyksIGVj
KTsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID09IDEpCisgICAgICAgIGltYWdlRGF0
YSA9IGNvbnRleHQtPmNyZWF0ZUltYWdlRGF0YSh0b0ltYWdlRGF0YShleGVjLT5hcmd1bWVudCgw
KSksIGVjKTsKKyAgICBlbHNlIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPT0gMikKKyAgICAg
ICAgaW1hZ2VEYXRhID0gY29udGV4dC0+Y3JlYXRlSW1hZ2VEYXRhKGV4ZWMtPmFyZ3VtZW50KDAp
LnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFyZ3VtZW50KDEpLnRvRmxvYXQoZXhlYyksIGVjKTsKIAog
ICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xv
YmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltYWdlRGF0YSkpOwogfQogCi1KU1ZhbHVlIEpTQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpwdXRJbWFnZURhdGEoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cHV0
SW1hZ2VEYXRhKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICAvLyBwdXRJbWFnZURhdGEgaGFzIHR3
byB2YXJpYW50cwogICAgIC8vIHB1dEltYWdlRGF0YShJbWFnZURhdGEsIHgsIHkpCkBAIC0zODcs
MTcgKzM4NywxNyBAQCBKU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpwdXRJCiAg
ICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEKj4oaW1wbCgpKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwotICAgIGlmIChhcmdzLnNpemUoKSA+PSA3KQotICAgICAgICBjb250ZXh0LT5wdXRJbWFnZURh
dGEodG9JbWFnZURhdGEoYXJncy5hdCgwKSksIGFyZ3MuYXQoMSkudG9GbG9hdChleGVjKSwgYXJn
cy5hdCgyKS50b0Zsb2F0KGV4ZWMpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFy
Z3MuYXQoMykudG9GbG9hdChleGVjKSwgYXJncy5hdCg0KS50b0Zsb2F0KGV4ZWMpLCBhcmdzLmF0
KDUpLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoNikudG9GbG9hdChleGVjKSwgZWMpOworICAgIGlm
IChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gNykKKyAgICAgICAgY29udGV4dC0+cHV0SW1hZ2VE
YXRhKHRvSW1hZ2VEYXRhKGV4ZWMtPmFyZ3VtZW50KDApKSwgZXhlYy0+YXJndW1lbnQoMSkudG9G
bG9hdChleGVjKSwgZXhlYy0+YXJndW1lbnQoMikudG9GbG9hdChleGVjKSwgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBleGVjLT5hcmd1bWVudCgzKS50b0Zsb2F0KGV4ZWMpLCBleGVj
LT5hcmd1bWVudCg0KS50b0Zsb2F0KGV4ZWMpLCBleGVjLT5hcmd1bWVudCg1KS50b0Zsb2F0KGV4
ZWMpLCBleGVjLT5hcmd1bWVudCg2KS50b0Zsb2F0KGV4ZWMpLCBlYyk7CiAgICAgZWxzZQotICAg
ICAgICBjb250ZXh0LT5wdXRJbWFnZURhdGEodG9JbWFnZURhdGEoYXJncy5hdCgwKSksIGFyZ3Mu
YXQoMSkudG9GbG9hdChleGVjKSwgYXJncy5hdCgyKS50b0Zsb2F0KGV4ZWMpLCBlYyk7CisgICAg
ICAgIGNvbnRleHQtPnB1dEltYWdlRGF0YSh0b0ltYWdlRGF0YShleGVjLT5hcmd1bWVudCgwKSks
IGV4ZWMtPmFyZ3VtZW50KDEpLnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFyZ3VtZW50KDIpLnRvRmxv
YXQoZXhlYyksIGVjKTsKIAogICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OmZpbGxUZXh0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFs
dWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZpbGxUZXh0KEV4ZWNTdGF0ZSogZXhlYykK
IHsgCiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKj4oaW1wbCgpKTsKIApAQCAtNDA1LDE3ICs0MDUsMTcg
QEAgSlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZmlsbAogICAgIC8vIG51bWJl
ciBhcmcgPSB4CiAgICAgLy8gbnVtYmVyIGFyZyA9IHkKICAgICAvLyBvcHRpb25hbCBudW1iZXIg
YXJnID0gbWF4V2lkdGgKLSAgICBpZiAoYXJncy5zaXplKCkgPCAzIHx8IGFyZ3Muc2l6ZSgpID4g
NCkKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMyB8fCBleGVjLT5hcmd1bWVudENv
dW50KCkgPiA0KQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7
CiAgICAgCi0gICAgaWYgKGFyZ3Muc2l6ZSgpID09IDQpCi0gICAgICAgIGNvbnRleHQtPmZpbGxU
ZXh0KHVzdHJpbmdUb1N0cmluZyhhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpKSwgYXJncy5hdCgx
KS50b0Zsb2F0KGV4ZWMpLCBhcmdzLmF0KDIpLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoMykudG9G
bG9hdChleGVjKSk7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA9PSA0KQorICAgICAg
ICBjb250ZXh0LT5maWxsVGV4dCh1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9T
dHJpbmcoZXhlYykpLCBleGVjLT5hcmd1bWVudCgxKS50b0Zsb2F0KGV4ZWMpLCBleGVjLT5hcmd1
bWVudCgyKS50b0Zsb2F0KGV4ZWMpLCBleGVjLT5hcmd1bWVudCgzKS50b0Zsb2F0KGV4ZWMpKTsK
ICAgICBlbHNlCi0gICAgICAgIGNvbnRleHQtPmZpbGxUZXh0KHVzdHJpbmdUb1N0cmluZyhhcmdz
LmF0KDApLnRvU3RyaW5nKGV4ZWMpKSwgYXJncy5hdCgxKS50b0Zsb2F0KGV4ZWMpLCBhcmdzLmF0
KDIpLnRvRmxvYXQoZXhlYykpOworICAgICAgICBjb250ZXh0LT5maWxsVGV4dCh1c3RyaW5nVG9T
dHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpLCBleGVjLT5hcmd1bWVudCgx
KS50b0Zsb2F0KGV4ZWMpLCBleGVjLT5hcmd1bWVudCgyKS50b0Zsb2F0KGV4ZWMpKTsKICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6c3Ryb2tlVGV4dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitK
U1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzdHJva2VUZXh0KEV4ZWNTdGF0ZSog
ZXhlYykKIHsgCiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0gc3RhdGlj
X2Nhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKj4oaW1wbCgpKTsKIApAQCAtNDIzLDEzICs0
MjMsMTMgQEAgSlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c3RybwogICAgIC8v
IG51bWJlciBhcmcgPSB4CiAgICAgLy8gbnVtYmVyIGFyZyA9IHkKICAgICAvLyBvcHRpb25hbCBu
dW1iZXIgYXJnID0gbWF4V2lkdGgKLSAgICBpZiAoYXJncy5zaXplKCkgPCAzIHx8IGFyZ3Muc2l6
ZSgpID4gNCkKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMyB8fCBleGVjLT5hcmd1
bWVudENvdW50KCkgPiA0KQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhF
cnJvcik7CiAgICAgCi0gICAgaWYgKGFyZ3Muc2l6ZSgpID09IDQpCi0gICAgICAgIGNvbnRleHQt
PnN0cm9rZVRleHQodXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpLCBh
cmdzLmF0KDEpLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoMikudG9GbG9hdChleGVjKSwgYXJncy5h
dCgzKS50b0Zsb2F0KGV4ZWMpKTsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID09IDQp
CisgICAgICAgIGNvbnRleHQtPnN0cm9rZVRleHQodXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3Vt
ZW50KDApLnRvU3RyaW5nKGV4ZWMpKSwgZXhlYy0+YXJndW1lbnQoMSkudG9GbG9hdChleGVjKSwg
ZXhlYy0+YXJndW1lbnQoMikudG9GbG9hdChleGVjKSwgZXhlYy0+YXJndW1lbnQoMykudG9GbG9h
dChleGVjKSk7CiAgICAgZWxzZQotICAgICAgICBjb250ZXh0LT5zdHJva2VUZXh0KHVzdHJpbmdU
b1N0cmluZyhhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpKSwgYXJncy5hdCgxKS50b0Zsb2F0KGV4
ZWMpLCBhcmdzLmF0KDIpLnRvRmxvYXQoZXhlYykpOworICAgICAgICBjb250ZXh0LT5zdHJva2VU
ZXh0KHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSksIGV4
ZWMtPmFyZ3VtZW50KDEpLnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFyZ3VtZW50KDIpLnRvRmxvYXQo
ZXhlYykpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ2xpcGJvYXJkQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ2xpcGJvYXJkQ3VzdG9tLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ2xpcGJvYXJkQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjMsMTcgKzYzLDE3IEBAIEpTVmFsdWUgSlNDbGlwYm9hcmQ6OnR5cGVzKEV4ZWNTdGF0ZSogZXgK
ICAgICByZXR1cm4gY29uc3RydWN0QXJyYXkoZXhlYywgbGlzdCk7CiB9CiAKLUpTVmFsdWUgSlND
bGlwYm9hcmQ6OmNsZWFyRGF0YShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CitKU1ZhbHVlIEpTQ2xpcGJvYXJkOjpjbGVhckRhdGEoRXhlY1N0YXRlKiBleGVjKQogewogICAg
IENsaXBib2FyZCogY2xpcGJvYXJkID0gaW1wbCgpOwogCi0gICAgaWYgKGFyZ3Muc2l6ZSgpID09
IDApIHsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID09IDApIHsKICAgICAgICAgY2xp
cGJvYXJkLT5jbGVhckFsbERhdGEoKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAg
ICAgfQogCi0gICAgaWYgKGFyZ3Muc2l6ZSgpID09IDEpIHsKLSAgICAgICAgY2xpcGJvYXJkLT5j
bGVhckRhdGEodXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpKTsKKyAg
ICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID09IDEpIHsKKyAgICAgICAgY2xpcGJvYXJkLT5j
bGVhckRhdGEodXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMp
KSk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIApAQCAtODEsMjMgKzgx
LDIzIEBAIEpTVmFsdWUgSlNDbGlwYm9hcmQ6OmNsZWFyRGF0YShFeGVjU3RhdGUKICAgICByZXR1
cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvciwgImNsZWFyRGF0YTogSW52YWxpZCBudW1i
ZXIgb2YgYXJndW1lbnRzIik7CiB9CiAKLUpTVmFsdWUgSlNDbGlwYm9hcmQ6OmdldERhdGEoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NsaXBib2FyZDo6
Z2V0RGF0YShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgLy8gRklYTUU6IEl0IGRvZXMgbm90IG1h
dGNoIHRoZSByZXN0IG9mIHRoZSBKUyBiaW5kaW5ncyB0byB0aHJvdyBvbiBpbnZhbGlkIG51bWJl
ciBvZiBhcmd1bWVudHMuCi0gICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDEpCisgICAgaWYgKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSAhPSAxKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBT
eW50YXhFcnJvciwgImdldERhdGE6IEludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyIpOwogCiAg
ICAgQ2xpcGJvYXJkKiBjbGlwYm9hcmQgPSBpbXBsKCk7CiAKICAgICBib29sIHN1Y2Nlc3M7Ci0g
ICAgU3RyaW5nIHJlc3VsdCA9IGNsaXBib2FyZC0+Z2V0RGF0YSh1c3RyaW5nVG9TdHJpbmcoYXJn
cy5hdCgwKS50b1N0cmluZyhleGVjKSksIHN1Y2Nlc3MpOworICAgIFN0cmluZyByZXN1bHQgPSBj
bGlwYm9hcmQtPmdldERhdGEodXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3Ry
aW5nKGV4ZWMpKSwgc3VjY2Vzcyk7CiAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIAogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCByZXN1bHQpOwogfQog
Ci1KU1ZhbHVlIEpTQ2xpcGJvYXJkOjpzZXREcmFnSW1hZ2UoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NsaXBib2FyZDo6c2V0RHJhZ0ltYWdlKEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICBDbGlwYm9hcmQqIGNsaXBib2FyZCA9IGltcGwoKTsKIApAQCAt
MTA1LDE0ICsxMDUsMTQgQEAgSlNWYWx1ZSBKU0NsaXBib2FyZDo6c2V0RHJhZ0ltYWdlKEV4ZWNT
dAogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIC8vIEZJWE1FOiBJdCBkb2Vz
IG5vdCBtYXRjaCB0aGUgcmVzdCBvZiB0aGUgSlMgYmluZGluZ3MgdG8gdGhyb3cgb24gaW52YWxp
ZCBudW1iZXIgb2YgYXJndW1lbnRzLiAKLSAgICBpZiAoYXJncy5zaXplKCkgIT0gMykKKyAgICBp
ZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDMpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KGV4ZWMsIFN5bnRheEVycm9yLCAic2V0RHJhZ0ltYWdlOiBJbnZhbGlkIG51bWJlciBvZiBhcmd1
bWVudHMiKTsKIAotICAgIGludCB4ID0gYXJncy5hdCgxKS50b0ludDMyKGV4ZWMpOwotICAgIGlu
dCB5ID0gYXJncy5hdCgyKS50b0ludDMyKGV4ZWMpOworICAgIGludCB4ID0gZXhlYy0+YXJndW1l
bnQoMSkudG9JbnQzMihleGVjKTsKKyAgICBpbnQgeSA9IGV4ZWMtPmFyZ3VtZW50KDIpLnRvSW50
MzIoZXhlYyk7CiAKICAgICAvLyBTZWUgaWYgdGhleSBwYXNzZWQgdXMgYSBub2RlCi0gICAgTm9k
ZSogbm9kZSA9IHRvTm9kZShhcmdzLmF0KDApKTsKKyAgICBOb2RlKiBub2RlID0gdG9Ob2RlKGV4
ZWMtPmFyZ3VtZW50KDApKTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01B
cHBsaWNhdGlvbkNhY2hlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NQXBwbGljYXRpb25DYWNoZUN1c3RvbS5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysg
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUFwcGxpY2F0aW9uQ2FjaGVDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NCwxMiArNDQsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYg
RU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFX0RZTkFNSUNfRU5UUklFUykKIAotSlNWYWx1ZSBKU0RP
TUFwcGxpY2F0aW9uQ2FjaGU6Omhhc0l0ZW0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQorSlNWYWx1ZSBKU0RPTUFwcGxpY2F0aW9uQ2FjaGU6Omhhc0l0ZW0oRXhlY1N0YXRl
KiBleGVjKQogewogICAgIEZyYW1lKiBmcmFtZSA9IGFzSlNET01XaW5kb3coZXhlYy0+ZHluYW1p
Y0dsb2JhbE9iamVjdCgpKS0+aW1wbCgpLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIGNvbnN0IEtVUkwmIHVybCA9IGZyYW1lLT5s
b2FkZXIoKS0+Y29tcGxldGVVUkwoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSk7CisgICAgY29u
c3QgS1VSTCYgdXJsID0gZnJhbWUtPmxvYWRlcigpLT5jb21wbGV0ZVVSTChleGVjLT5hcmd1bWVu
dCgwKS50b1N0cmluZyhleGVjKSk7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBi
b29sIHJlc3VsdCA9IGltcGwoKS0+aGFzSXRlbSh1cmwsIGVjKTsKQEAgLTU3LDEyICs1NywxMiBA
QCBKU1ZhbHVlIEpTRE9NQXBwbGljYXRpb25DYWNoZTo6aGFzSXRlbShFCiAgICAgcmV0dXJuIGpz
Qm9vbGVhbihyZXN1bHQpOwogfQogCi1KU1ZhbHVlIEpTRE9NQXBwbGljYXRpb25DYWNoZTo6YWRk
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNET01BcHBs
aWNhdGlvbkNhY2hlOjphZGQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEZyYW1lKiBmcmFtZSA9
IGFzSlNET01XaW5kb3coZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpKS0+aW1wbCgpLT5mcmFt
ZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAg
IGNvbnN0IEtVUkwmIHVybCA9IGZyYW1lLT5sb2FkZXIoKS0+Y29tcGxldGVVUkwoYXJncy5hdCgw
KS50b1N0cmluZyhleGVjKSk7CisgICAgY29uc3QgS1VSTCYgdXJsID0gZnJhbWUtPmxvYWRlcigp
LT5jb21wbGV0ZVVSTChleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSk7CiAgICAgCiAg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgaW1wbCgpLT5hZGQodXJsLCBlYyk7CkBAIC03
MCwxMiArNzAsMTIgQEAgSlNWYWx1ZSBKU0RPTUFwcGxpY2F0aW9uQ2FjaGU6OmFkZChFeGVjUwog
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlIEpTRE9NQXBwbGljYXRpb25D
YWNoZTo6cmVtb3ZlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFs
dWUgSlNET01BcHBsaWNhdGlvbkNhY2hlOjpyZW1vdmUoRXhlY1N0YXRlKiBleGVjKQogewogICAg
IEZyYW1lKiBmcmFtZSA9IGFzSlNET01XaW5kb3coZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgp
KS0+aW1wbCgpLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwotICAgIGNvbnN0IEtVUkwmIHVybCA9IGZyYW1lLT5sb2FkZXIoKS0+Y29tcGxl
dGVVUkwoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSk7CisgICAgY29uc3QgS1VSTCYgdXJsID0g
ZnJhbWUtPmxvYWRlcigpLT5jb21wbGV0ZVVSTChleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhl
eGVjKSk7CiAgICAgCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgaW1wbCgpLT5yZW1v
dmUodXJsLCBlYyk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NRm9ybURhdGFDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01Gb3JtRGF0YUN1
c3RvbS5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUZv
cm1EYXRhQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksMTEgKzM5LDExIEBAIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSBKU0RPTUZv
cm1EYXRhOjphcHBlbmQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNW
YWx1ZSBKU0RPTUZvcm1EYXRhOjphcHBlbmQoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGlmIChh
cmdzLnNpemUoKSA+PSAyKSB7Ci0gICAgICAgIFN0cmluZyBuYW1lID0gdXN0cmluZ1RvU3RyaW5n
KGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpOwotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gYXJn
cy5hdCgxKTsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDIpIHsKKyAgICAgICAg
U3RyaW5nIG5hbWUgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmco
ZXhlYykpOworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+YXJndW1lbnQoMSk7CiAgICAg
ICAgIGlmICh2YWx1ZS5pbmhlcml0cygmSlNCbG9iOjpzX2luZm8pKQogICAgICAgICAgICAgaW1w
bCgpLT5hcHBlbmQobmFtZSwgdG9CbG9iKHZhbHVlKSk7CiAgICAgICAgIGVsc2UKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCShyZXZpc2lvbiA2MDM0MSkK
KysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03NjYsMTEgKzc2NiwxMSBAQCBzdGF0aWMgYm9vbCBkb21XaW5kb3dBbGxvd1BvcFVw
KEZyYW1lKiBhCiAgICAgcmV0dXJuIERPTVdpbmRvdzo6YWxsb3dQb3BVcChhY3RpdmVGcmFtZSk7
CiB9CiAKLUpTVmFsdWUgSlNET01XaW5kb3c6Om9wZW4oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0RPTVdpbmRvdzo6b3BlbihFeGVjU3RhdGUqIGV4ZWMp
CiB7Ci0gICAgU3RyaW5nIHVybFN0cmluZyA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JO
dWxsQ2hlY2soZXhlYywgYXJncy5hdCgwKSk7Ci0gICAgQXRvbWljU3RyaW5nIGZyYW1lTmFtZSA9
IGFyZ3MuYXQoMSkuaXNVbmRlZmluZWRPck51bGwoKSA/ICJfYmxhbmsiIDogdXN0cmluZ1RvQXRv
bWljU3RyaW5nKGFyZ3MuYXQoMSkudG9TdHJpbmcoZXhlYykpOwotICAgIFdpbmRvd0ZlYXR1cmVz
IHdpbmRvd0ZlYXR1cmVzKHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhl
YywgYXJncy5hdCgyKSkpOworICAgIFN0cmluZyB1cmxTdHJpbmcgPSB2YWx1ZVRvU3RyaW5nV2l0
aFVuZGVmaW5lZE9yTnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKKyAgICBBdG9t
aWNTdHJpbmcgZnJhbWVOYW1lID0gZXhlYy0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWRPck51bGwo
KSA/ICJfYmxhbmsiIDogdXN0cmluZ1RvQXRvbWljU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDEpLnRv
U3RyaW5nKGV4ZWMpKTsKKyAgICBXaW5kb3dGZWF0dXJlcyB3aW5kb3dGZWF0dXJlcyh2YWx1ZVRv
U3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDIpKSk7
CiAKICAgICBGcmFtZSogZnJhbWUgPSBpbXBsKCktPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkK
QEAgLTg0MCwxMSArODQwLDExIEBAIEpTVmFsdWUgSlNET01XaW5kb3c6Om9wZW4oRXhlY1N0YXRl
KiBleGUKICAgICByZXR1cm4gdG9KUyhleGVjLCBmcmFtZS0+ZG9tV2luZG93KCkpOwogfQogCi1K
U1ZhbHVlIEpTRE9NV2luZG93OjpzaG93TW9kYWxEaWFsb2coRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0RPTVdpbmRvdzo6c2hvd01vZGFsRGlhbG9nKEV4
ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBTdHJpbmcgdXJsID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRl
ZmluZWRPck51bGxDaGVjayhleGVjLCBhcmdzLmF0KDApKTsKLSAgICBKU1ZhbHVlIGRpYWxvZ0Fy
Z3MgPSBhcmdzLmF0KDEpOwotICAgIFN0cmluZyBmZWF0dXJlQXJncyA9IHZhbHVlVG9TdHJpbmdX
aXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgYXJncy5hdCgyKSk7CisgICAgU3RyaW5nIHVy
bCA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgZXhlYy0+YXJn
dW1lbnQoMCkpOworICAgIEpTVmFsdWUgZGlhbG9nQXJncyA9IGV4ZWMtPmFyZ3VtZW50KDEpOwor
ICAgIFN0cmluZyBmZWF0dXJlQXJncyA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxs
Q2hlY2soZXhlYywgZXhlYy0+YXJndW1lbnQoMikpOwogCiAgICAgRnJhbWUqIGZyYW1lID0gaW1w
bCgpLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCkBAIC05MjMsMjMgKzkyMywyMyBAQCBKU1Zh
bHVlIEpTRE9NV2luZG93OjpzaG93TW9kYWxEaWFsb2coRXhlCiAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNET01XaW5kb3c6OnBvc3RNZXNzYWdlKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNET01XaW5kb3c6OnBvc3RNZXNz
YWdlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBET01XaW5kb3cqIHdpbmRvdyA9IGltcGwoKTsK
IAogICAgIERPTVdpbmRvdyogc291cmNlID0gYXNKU0RPTVdpbmRvdyhleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCkpLT5pbXBsKCk7Ci0gICAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IG1lc3NhZ2UgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShleGVjLCBhcmdzLmF0
KDApKTsKKyAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbWVzc2FnZSA9IFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKIAog
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAKICAgICBNZXNzYWdlUG9ydEFycmF5IG1lc3NhZ2VQb3J0czsKLSAgICBpZiAoYXJncy5z
aXplKCkgPiAyKQotICAgICAgICBmaWxsTWVzc2FnZVBvcnRBcnJheShleGVjLCBhcmdzLmF0KDEp
LCBtZXNzYWdlUG9ydHMpOworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPiAyKQorICAg
ICAgICBmaWxsTWVzc2FnZVBvcnRBcnJheShleGVjLCBleGVjLT5hcmd1bWVudCgxKSwgbWVzc2Fn
ZVBvcnRzKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogCi0gICAgU3RyaW5nIHRhcmdldE9yaWdpbiA9IHZhbHVlVG9TdHJpbmdX
aXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgYXJncy5hdCgoYXJncy5zaXplKCkgPT0gMikg
PyAxIDogMikpOworICAgIFN0cmluZyB0YXJnZXRPcmlnaW4gPSB2YWx1ZVRvU3RyaW5nV2l0aFVu
ZGVmaW5lZE9yTnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KChleGVjLT5hcmd1bWVudENv
dW50KCkgPT0gMikgPyAxIDogMikpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKQEAgLTk1MCwxMiArOTUwLDEyIEBAIEpTVmFs
dWUgSlNET01XaW5kb3c6OnBvc3RNZXNzYWdlKEV4ZWNTdGEKICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIH0KIAotSlNWYWx1ZSBKU0RPTVdpbmRvdzo6c2V0VGltZW91dChFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTRE9NV2luZG93OjpzZXRUaW1lb3V0
KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBPd25QdHI8U2NoZWR1bGVkQWN0aW9uPiBhY3Rpb24g
PSBTY2hlZHVsZWRBY3Rpb246OmNyZWF0ZShleGVjLCBhcmdzLCBjdXJyZW50V29ybGQoZXhlYykp
OworICAgIE93blB0cjxTY2hlZHVsZWRBY3Rpb24+IGFjdGlvbiA9IFNjaGVkdWxlZEFjdGlvbjo6
Y3JlYXRlKGV4ZWMsIGN1cnJlbnRXb3JsZChleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBpbnQgZGVsYXkgPSBh
cmdzLmF0KDEpLnRvSW50MzIoZXhlYyk7CisgICAgaW50IGRlbGF5ID0gZXhlYy0+YXJndW1lbnQo
MSkudG9JbnQzMihleGVjKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGludCBy
ZXN1bHQgPSBpbXBsKCktPnNldFRpbWVvdXQoYWN0aW9uLnJlbGVhc2UoKSwgZGVsYXksIGVjKTsK
QEAgLTk2NCwxMiArOTY0LDEyIEBAIEpTVmFsdWUgSlNET01XaW5kb3c6OnNldFRpbWVvdXQoRXhl
Y1N0YXQKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgcmVzdWx0KTsKIH0KIAotSlNWYWx1ZSBK
U0RPTVdpbmRvdzo6c2V0SW50ZXJ2YWwoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQorSlNWYWx1ZSBKU0RPTVdpbmRvdzo6c2V0SW50ZXJ2YWwoRXhlY1N0YXRlKiBleGVjKQog
ewotICAgIE93blB0cjxTY2hlZHVsZWRBY3Rpb24+IGFjdGlvbiA9IFNjaGVkdWxlZEFjdGlvbjo6
Y3JlYXRlKGV4ZWMsIGFyZ3MsIGN1cnJlbnRXb3JsZChleGVjKSk7CisgICAgT3duUHRyPFNjaGVk
dWxlZEFjdGlvbj4gYWN0aW9uID0gU2NoZWR1bGVkQWN0aW9uOjpjcmVhdGUoZXhlYywgY3VycmVu
dFdvcmxkKGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwotICAgIGludCBkZWxheSA9IGFyZ3MuYXQoMSkudG9JbnQzMihl
eGVjKTsKKyAgICBpbnQgZGVsYXkgPSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwog
CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgaW50IHJlc3VsdCA9IGltcGwoKS0+c2V0
SW50ZXJ2YWwoYWN0aW9uLnJlbGVhc2UoKSwgZGVsYXksIGVjKTsKQEAgLTk3OCw2NyArOTc4LDY3
IEBAIEpTVmFsdWUgSlNET01XaW5kb3c6OnNldEludGVydmFsKEV4ZWNTdGEKICAgICByZXR1cm4g
anNOdW1iZXIoZXhlYywgcmVzdWx0KTsKIH0KIAotSlNWYWx1ZSBKU0RPTVdpbmRvdzo6YWRkRXZl
bnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVl
IEpTRE9NV2luZG93OjphZGRFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBG
cmFtZSogZnJhbWUgPSBpbXBsKCktPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBKU1ZhbHVlIGxpc3RlbmVyID0gYXJncy5hdCgx
KTsKKyAgICBKU1ZhbHVlIGxpc3RlbmVyID0gZXhlYy0+YXJndW1lbnQoMSk7CiAgICAgaWYgKCFs
aXN0ZW5lci5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAg
IGltcGwoKS0+YWRkRXZlbnRMaXN0ZW5lcih1c3RyaW5nVG9BdG9taWNTdHJpbmcoYXJncy5hdCgw
KS50b1N0cmluZyhleGVjKSksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3Rl
bmVyKSwgdGhpcywgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSksIGFyZ3MuYXQoMikudG9Cb29s
ZWFuKGV4ZWMpKTsKKyAgICBpbXBsKCktPmFkZEV2ZW50TGlzdGVuZXIodXN0cmluZ1RvQXRvbWlj
U3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSwgSlNFdmVudExpc3RlbmVy
OjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCB0aGlzLCBmYWxzZSwgY3VycmVudFdvcmxkKGV4
ZWMpKSwgZXhlYy0+YXJndW1lbnQoMikudG9Cb29sZWFuKGV4ZWMpKTsKICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBKU0RPTVdpbmRvdzo6cmVtb3ZlRXZlbnRMaXN0ZW5l
cihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTRE9NV2lu
ZG93OjpyZW1vdmVFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBGcmFtZSog
ZnJhbWUgPSBpbXBsKCktPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAKLSAgICBKU1ZhbHVlIGxpc3RlbmVyID0gYXJncy5hdCgxKTsKKyAg
ICBKU1ZhbHVlIGxpc3RlbmVyID0gZXhlYy0+YXJndW1lbnQoMSk7CiAgICAgaWYgKCFsaXN0ZW5l
ci5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIGltcGwo
KS0+cmVtb3ZlRXZlbnRMaXN0ZW5lcih1c3RyaW5nVG9BdG9taWNTdHJpbmcoYXJncy5hdCgwKS50
b1N0cmluZyhleGVjKSksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVy
KSwgdGhpcywgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSkuZ2V0KCksIGFyZ3MuYXQoMikudG9C
b29sZWFuKGV4ZWMpKTsKKyAgICBpbXBsKCktPnJlbW92ZUV2ZW50TGlzdGVuZXIodXN0cmluZ1Rv
QXRvbWljU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSwgSlNFdmVudExp
c3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCB0aGlzLCBmYWxzZSwgY3VycmVudFdv
cmxkKGV4ZWMpKS5nZXQoKSwgZXhlYy0+YXJndW1lbnQoMikudG9Cb29sZWFuKGV4ZWMpKTsKICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKLUpTVmFs
dWUgSlNET01XaW5kb3c6Om9wZW5EYXRhYmFzZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCitKU1ZhbHVlIEpTRE9NV2luZG93OjpvcGVuRGF0YWJhc2UoRXhlY1N0YXRlKiBl
eGVjKQogewotICAgIGlmICghYWxsb3dzQWNjZXNzRnJvbShleGVjKSB8fCAoYXJncy5zaXplKCkg
PCA0KSkgeworICAgIGlmICghYWxsb3dzQWNjZXNzRnJvbShleGVjKSB8fCAoZXhlYy0+YXJndW1l
bnRDb3VudCgpIDwgNCkpIHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFNZTlRBWF9F
UlIpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBTdHJpbmcg
bmFtZSA9IHVzdHJpbmdUb1N0cmluZyhhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBT
dHJpbmcgbmFtZSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhl
eGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIAotICAgIFN0cmluZyB2ZXJzaW9uID0gdXN0cmluZ1RvU3RyaW5nKGFyZ3Mu
YXQoMSkudG9TdHJpbmcoZXhlYykpOworICAgIFN0cmluZyB2ZXJzaW9uID0gdXN0cmluZ1RvU3Ry
aW5nKGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgU3RyaW5n
IGRpc3BsYXlOYW1lID0gdXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQoMikudG9TdHJpbmcoZXhlYykp
OworICAgIFN0cmluZyBkaXNwbGF5TmFtZSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVu
dCgyKS50b1N0cmluZyhleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIC8vIGFyZ3MuYXQoMykgPSBlc3RpbWF0
ZWQgc2l6ZQotICAgIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSA9IGFyZ3MuYXQoMykudG9V
SW50MzIoZXhlYyk7CisgICAgLy8gZXhlYy0+YXJndW1lbnQoMykgPSBlc3RpbWF0ZWQgc2l6ZQor
ICAgIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSA9IGV4ZWMtPmFyZ3VtZW50KDMpLnRvVUlu
dDMyKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAKICAgICBSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gY3JlYXRpb25D
YWxsYmFjazsKLSAgICBpZiAoYXJncy5zaXplKCkgPj0gNSkgewotICAgICAgICBpZiAoIWFyZ3Mu
YXQoNCkuaXNPYmplY3QoKSkgeworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gNSkg
eworICAgICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDQpLmlzT2JqZWN0KCkpIHsKICAgICAgICAg
ICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7CiAgICAgICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgfQogCi0gICAgICAgIGNyZWF0aW9uQ2Fs
bGJhY2sgPSBKU0RhdGFiYXNlQ2FsbGJhY2s6OmNyZWF0ZShhc09iamVjdChhcmdzLmF0KDQpKSwg
Z2xvYmFsT2JqZWN0KCkpOworICAgICAgICBjcmVhdGlvbkNhbGxiYWNrID0gSlNEYXRhYmFzZUNh
bGxiYWNrOjpjcmVhdGUoYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoNCkpLCBnbG9iYWxPYmplY3Qo
KSk7CiAgICAgfQogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRGF0YWJhc2VDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNEYXRhYmFzZUN1c3RvbS5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RhdGFiYXNlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcs
MTcgKzQ3LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsK
IAotSlNWYWx1ZSBKU0RhdGFiYXNlOjpjaGFuZ2VWZXJzaW9uKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNEYXRhYmFzZTo6Y2hhbmdlVmVyc2lvbihFeGVj
U3RhdGUqIGV4ZWMpCiB7Ci0gICAgU3RyaW5nIG9sZFZlcnNpb24gPSB1c3RyaW5nVG9TdHJpbmco
YXJncy5hdCgwKS50b1N0cmluZyhleGVjKSk7CisgICAgU3RyaW5nIG9sZFZlcnNpb24gPSB1c3Ry
aW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpOwogICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAg
ICBTdHJpbmcgbmV3VmVyc2lvbiA9IHVzdHJpbmdUb1N0cmluZyhhcmdzLmF0KDEpLnRvU3RyaW5n
KGV4ZWMpKTsKKyAgICBTdHJpbmcgbmV3VmVyc2lvbiA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5h
cmd1bWVudCgxKS50b1N0cmluZyhleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIEpTT2JqZWN0KiBvYmplY3Qg
PSBhcmdzLmF0KDIpLmdldE9iamVjdCgpOworICAgIEpTT2JqZWN0KiBvYmplY3QgPSBleGVjLT5h
cmd1bWVudCgyKS5nZXRPYmplY3QoKTsKICAgICBpZiAoIW9iamVjdCkgewogICAgICAgICBzZXRE
T01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOwogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKQEAgLTY2LDggKzY2LDggQEAgSlNWYWx1ZSBKU0RhdGFiYXNlOjpjaGFuZ2VW
ZXJzaW9uKEV4ZWNTdAogICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiBjYWxsYmFj
ayhKU1NRTFRyYW5zYWN0aW9uQ2FsbGJhY2s6OmNyZWF0ZShvYmplY3QsIHN0YXRpY19jYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkpKSk7CiAKICAgICBSZWZQdHI8U1FMVHJh
bnNhY3Rpb25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrOwotICAgIGlmICghYXJncy5hdCgz
KS5pc051bGwoKSkgewotICAgICAgICBvYmplY3QgPSBhcmdzLmF0KDMpLmdldE9iamVjdCgpOwor
ICAgIGlmICghZXhlYy0+YXJndW1lbnQoMykuaXNOdWxsKCkpIHsKKyAgICAgICAgb2JqZWN0ID0g
ZXhlYy0+YXJndW1lbnQoMykuZ2V0T2JqZWN0KCk7CiAgICAgICAgIGlmICghb2JqZWN0KSB7CiAg
ICAgICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOwogICAg
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC03Nyw4ICs3Nyw4IEBAIEpTVmFsdWUg
SlNEYXRhYmFzZTo6Y2hhbmdlVmVyc2lvbihFeGVjU3QKICAgICB9CiAKICAgICBSZWZQdHI8Vm9p
ZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2s7Ci0gICAgaWYgKCFhcmdzLmF0KDQpLmlzTnVsbCgp
KSB7Ci0gICAgICAgIG9iamVjdCA9IGFyZ3MuYXQoNCkuZ2V0T2JqZWN0KCk7CisgICAgaWYgKCFl
eGVjLT5hcmd1bWVudCg0KS5pc051bGwoKSkgeworICAgICAgICBvYmplY3QgPSBleGVjLT5hcmd1
bWVudCg0KS5nZXRPYmplY3QoKTsKICAgICAgICAgaWYgKCFvYmplY3QpIHsKICAgICAgICAgICAg
IHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7CiAgICAgICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKQEAgLTkyLDkgKzkyLDkgQEAgSlNWYWx1ZSBKU0RhdGFiYXNl
OjpjaGFuZ2VWZXJzaW9uKEV4ZWNTdAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1z
dGF0aWMgSlNWYWx1ZSBjcmVhdGVUcmFuc2FjdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MsIERhdGFiYXNlKiBkYXRhYmFzZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgYm9vbCByZWFkT25seSkKK3N0YXRpYyBKU1ZhbHVlIGNyZWF0ZVRyYW5zYWN0aW9u
KEV4ZWNTdGF0ZSogZXhlYywgRGF0YWJhc2UqIGRhdGFiYXNlLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBib29sIHJlYWRPbmx5KQogewotICAgIEpTT2JqZWN0KiBvYmplY3QgPSBh
cmdzLmF0KDApLmdldE9iamVjdCgpOworICAgIEpTT2JqZWN0KiBvYmplY3QgPSBleGVjLT5hcmd1
bWVudCgwKS5nZXRPYmplY3QoKTsKIAogICAgIGlmICghb2JqZWN0KSB7CiAgICAgICAgIHNldERP
TUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7CkBAIC0xMDMsOCArMTAzLDggQEAg
c3RhdGljIEpTVmFsdWUgY3JlYXRlVHJhbnNhY3Rpb24oRXhlY1N0YQogCiAgICAgUmVmUHRyPFNR
TFRyYW5zYWN0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrKEpTU1FMVHJhbnNhY3Rpb25DYWxsYmFjazo6
Y3JlYXRlKG9iamVjdCwgZ2xvYmFsT2JqZWN0KSk7CiAgICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9u
RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjazsKLSAgICBpZiAoYXJncy5zaXplKCkgPiAxICYm
ICFhcmdzLmF0KDEpLmlzTnVsbCgpKSB7Ci0gICAgICAgIG9iamVjdCA9IGFyZ3MuYXQoMSkuZ2V0
T2JqZWN0KCk7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+IDEgJiYgIWV4ZWMtPmFy
Z3VtZW50KDEpLmlzTnVsbCgpKSB7CisgICAgICAgIG9iamVjdCA9IGV4ZWMtPmFyZ3VtZW50KDEp
LmdldE9iamVjdCgpOwogICAgICAgICBpZiAoIW9iamVjdCkgewogICAgICAgICAgICAgc2V0RE9N
RXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKICAgICAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwpAQCAtMTE0LDggKzExNCw4IEBAIHN0YXRpYyBKU1ZhbHVlIGNyZWF0ZVRy
YW5zYWN0aW9uKEV4ZWNTdGEKICAgICB9CiAKICAgICBSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNj
ZXNzQ2FsbGJhY2s7Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpID4gMiAmJiAhYXJncy5hdCgyKS5pc051
bGwoKSkgewotICAgICAgICBvYmplY3QgPSBhcmdzLmF0KDIpLmdldE9iamVjdCgpOworICAgIGlm
IChleGVjLT5hcmd1bWVudENvdW50KCkgPiAyICYmICFleGVjLT5hcmd1bWVudCgyKS5pc051bGwo
KSkgeworICAgICAgICBvYmplY3QgPSBleGVjLT5hcmd1bWVudCgyKS5nZXRPYmplY3QoKTsKICAg
ICAgICAgaWYgKCFvYmplY3QpIHsKICAgICAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBU
WVBFX01JU01BVENIX0VSUik7CiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKQEAg
LTEyOCwxNCArMTI4LDE0IEBAIHN0YXRpYyBKU1ZhbHVlIGNyZWF0ZVRyYW5zYWN0aW9uKEV4ZWNT
dGEKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBKU0RhdGFiYXNlOjp0
cmFuc2FjdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVl
IEpTRGF0YWJhc2U6OnRyYW5zYWN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4g
Y3JlYXRlVHJhbnNhY3Rpb24oZXhlYywgYXJncywgbV9pbXBsLmdldCgpLCBzdGF0aWNfY2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCgpKSwgZmFsc2UpOworICAgIHJldHVybiBj
cmVhdGVUcmFuc2FjdGlvbihleGVjLCBtX2ltcGwuZ2V0KCksIHN0YXRpY19jYXN0PEpTRE9NR2xv
YmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkpLCBmYWxzZSk7CiB9CiAKLUpTVmFsdWUgSlNEYXRh
YmFzZTo6cmVhZFRyYW5zYWN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJn
cykKK0pTVmFsdWUgSlNEYXRhYmFzZTo6cmVhZFRyYW5zYWN0aW9uKEV4ZWNTdGF0ZSogZXhlYykK
IHsKLSAgICByZXR1cm4gY3JlYXRlVHJhbnNhY3Rpb24oZXhlYywgYXJncywgbV9pbXBsLmdldCgp
LCBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCgpKSwgdHJ1ZSk7
CisgICAgcmV0dXJuIGNyZWF0ZVRyYW5zYWN0aW9uKGV4ZWMsIG1faW1wbC5nZXQoKSwgc3RhdGlj
X2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QoKSksIHRydWUpOwogfQogCiB9
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YWJhc2VTeW5jQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YWJhc2VTeW5jQ3VzdG9tLmNwcAko
cmV2aXNpb24gNjAzNDEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YWJhc2VTeW5jQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTcgKzQyLDE3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotSlNWYWx1ZSBKU0RhdGFiYXNlU3luYzo6
Y2hhbmdlVmVyc2lvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1Zh
bHVlIEpTRGF0YWJhc2VTeW5jOjpjaGFuZ2VWZXJzaW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAg
ICBTdHJpbmcgb2xkVmVyc2lvbiA9IHVzdHJpbmdUb1N0cmluZyhhcmdzLmF0KDApLnRvU3RyaW5n
KGV4ZWMpKTsKKyAgICBTdHJpbmcgb2xkVmVyc2lvbiA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5h
cmd1bWVudCgwKS50b1N0cmluZyhleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIFN0cmluZyBuZXdWZXJzaW9u
ID0gdXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQoMSkudG9TdHJpbmcoZXhlYykpOworICAgIFN0cmlu
ZyBuZXdWZXJzaW9uID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5n
KGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogCi0gICAgSlNPYmplY3QqIG9iamVjdCA9IGFyZ3MuYXQoMikuZ2V0T2Jq
ZWN0KCk7CisgICAgSlNPYmplY3QqIG9iamVjdCA9IGV4ZWMtPmFyZ3VtZW50KDIpLmdldE9iamVj
dCgpOwogICAgIGlmICghb2JqZWN0KSB7CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBU
WVBFX01JU01BVENIX0VSUik7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpAQCAtNjcs
OSArNjcsOSBAQCBKU1ZhbHVlIEpTRGF0YWJhc2VTeW5jOjpjaGFuZ2VWZXJzaW9uKEV4CiAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlIGNyZWF0ZVRyYW5zYWN0
aW9uKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncywgRGF0YWJhc2VTeW5jKiBk
YXRhYmFzZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgYm9vbCByZWFkT25seSkK
K3N0YXRpYyBKU1ZhbHVlIGNyZWF0ZVRyYW5zYWN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRGF0YWJh
c2VTeW5jKiBkYXRhYmFzZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgYm9vbCBy
ZWFkT25seSkKIHsKLSAgICBKU09iamVjdCogb2JqZWN0ID0gYXJncy5hdCgwKS5nZXRPYmplY3Qo
KTsKKyAgICBKU09iamVjdCogb2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoMCkuZ2V0T2JqZWN0KCk7
CiAgICAgaWYgKCFvYmplY3QpIHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVf
TUlTTUFUQ0hfRVJSKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC04NCwxNCAr
ODQsMTQgQEAgc3RhdGljIEpTVmFsdWUgY3JlYXRlVHJhbnNhY3Rpb24oRXhlY1N0YQogICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlIEpTRGF0YWJhc2VTeW5jOjp0cmFuc2Fj
dGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTRGF0
YWJhc2VTeW5jOjp0cmFuc2FjdGlvbihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGNy
ZWF0ZVRyYW5zYWN0aW9uKGV4ZWMsIGFyZ3MsIG1faW1wbC5nZXQoKSwgc3RhdGljX2Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QoKSksIGZhbHNlKTsKKyAgICByZXR1cm4gY3Jl
YXRlVHJhbnNhY3Rpb24oZXhlYywgbV9pbXBsLmdldCgpLCBzdGF0aWNfY2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KGdsb2JhbE9iamVjdCgpKSwgZmFsc2UpOwogfQogCi1KU1ZhbHVlIEpTRGF0YWJh
c2VTeW5jOjpyZWFkVHJhbnNhY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQorSlNWYWx1ZSBKU0RhdGFiYXNlU3luYzo6cmVhZFRyYW5zYWN0aW9uKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKLSAgICByZXR1cm4gY3JlYXRlVHJhbnNhY3Rpb24oZXhlYywgYXJncywgbV9pbXBs
LmdldCgpLCBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCgpKSwg
dHJ1ZSk7CisgICAgcmV0dXJuIGNyZWF0ZVRyYW5zYWN0aW9uKGV4ZWMsIG1faW1wbC5nZXQoKSwg
c3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QoKSksIHRydWUpOwog
fQogCiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGVkaWNhdGVkV29ya2VyQ29udGV4
dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RlZGljYXRl
ZFdvcmtlckNvbnRleHRDdXN0b20uY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNEZWRpY2F0ZWRXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDIsOSArNDIsOSBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLUpTQzo6SlNWYWx1ZSBKU0RlZGljYXRlZFdvcmtlckNvbnRleHQ6OnBvc3RNZXNz
YWdlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MpCitKU0M6
OkpTVmFsdWUgSlNEZWRpY2F0ZWRXb3JrZXJDb250ZXh0Ojpwb3N0TWVzc2FnZShKU0M6OkV4ZWNT
dGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gaGFuZGxlUG9zdE1lc3NhZ2UoZXhlYywgYXJncywg
aW1wbCgpKTsKKyAgICByZXR1cm4gaGFuZGxlUG9zdE1lc3NhZ2UoZXhlYywgaW1wbCgpKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Rl
c2t0b3BOb3RpZmljYXRpb25zQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRGVza3RvcE5vdGlmaWNhdGlvbnNDdXN0b20uY3BwCShyZXZpc2lvbiA2MDM0MSkK
KysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNEZXNrdG9wTm90aWZpY2F0aW9uc0N1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ1LDE3ICs0NSwxNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUgSlNOb3RpZmljYXRpb25DZW50ZXI6OnJl
cXVlc3RQZXJtaXNzaW9uKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pT
VmFsdWUgSlNOb3RpZmljYXRpb25DZW50ZXI6OnJlcXVlc3RQZXJtaXNzaW9uKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICAvLyBQZXJtaXNzaW9uIHJlcXVlc3QgaXMgb25seSB2YWxpZCBmcm9tIHBh
Z2UgY29udGV4dC4KICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gaW1wbCgp
LT5jb250ZXh0KCk7CiAgICAgaWYgKGNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKQogICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7CiAKLSAgICBpZiAoIWFyZ3Mu
YXQoMCkuaXNPYmplY3QoKSkKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkp
CiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKLSAgICBQYXNz
UmVmUHRyPEpTQ3VzdG9tVm9pZENhbGxiYWNrPiBjYWxsYmFjayA9IEpTQ3VzdG9tVm9pZENhbGxi
YWNrOjpjcmVhdGUoYXJncy5hdCgwKS5nZXRPYmplY3QoKSwgdG9KU0RPTUdsb2JhbE9iamVjdChz
dGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpLCBleGVjKSk7CisgICAgUGFzc1JlZlB0cjxK
U0N1c3RvbVZvaWRDYWxsYmFjaz4gY2FsbGJhY2sgPSBKU0N1c3RvbVZvaWRDYWxsYmFjazo6Y3Jl
YXRlKGV4ZWMtPmFyZ3VtZW50KDApLmdldE9iamVjdCgpLCB0b0pTRE9NR2xvYmFsT2JqZWN0KHN0
YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4dCksIGV4ZWMpKTsKIAogICAgIGltcGwoKS0+cmVx
dWVzdFBlcm1pc3Npb24oY2FsbGJhY2spOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Zsb2F0QXJyYXlDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNGbG9hdEFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24g
NjAzNDEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmxvYXRBcnJheUN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ2LDkgKzQ2LDkgQEAgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVj
U3RhdGUqIGV4ZWMsIAogICAgIHJldHVybiBnZXRET01PYmplY3RXcmFwcGVyPEpTRmxvYXRBcnJh
eT4oZXhlYywgZ2xvYmFsT2JqZWN0LCBvYmplY3QpOwogfQogCi1KU0M6OkpTVmFsdWUgSlNGbG9h
dEFycmF5OjpzZXQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6QXJnTGlzdCBjb25zdCYgYXJn
cykKK0pTQzo6SlNWYWx1ZSBKU0Zsb2F0QXJyYXk6OnNldChKU0M6OkV4ZWNTdGF0ZSogZXhlYykK
IHsKLSAgICByZXR1cm4gc2V0V2ViR0xBcnJheUhlbHBlcihleGVjLCBpbXBsKCksIGFyZ3MsIHRv
RmxvYXRBcnJheSk7CisgICAgcmV0dXJuIHNldFdlYkdMQXJyYXlIZWxwZXIoZXhlYywgaW1wbCgp
LCB0b0Zsb2F0QXJyYXkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTR2VvbG9jYXRpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNHZW9sb2NhdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDYwMzQx
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0dlb2xvY2F0aW9uQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM1LDIwICsxMzUsMjAgQEAgc3RhdGljIFBhc3NSZWZQdHI8UG9zaXRpb25P
cHRpb25zPiBjcmVhdAogICAgIHJldHVybiBvcHRpb25zLnJlbGVhc2UoKTsKIH0KIAotSlNWYWx1
ZSBKU0dlb2xvY2F0aW9uOjpnZXRDdXJyZW50UG9zaXRpb24oRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0dlb2xvY2F0aW9uOjpnZXRDdXJyZW50UG9zaXRp
b24oRXhlY1N0YXRlKiBleGVjKQogewogICAgIC8vIEFyZ3VtZW50czogUG9zaXRpb25DYWxsYmFj
aywgKG9wdGlvbmFsKVBvc2l0aW9uRXJyb3JDYWxsYmFjaywgKG9wdGlvbmFsKVBvc2l0aW9uT3B0
aW9ucwogCi0gICAgUmVmUHRyPFBvc2l0aW9uQ2FsbGJhY2s+IHBvc2l0aW9uQ2FsbGJhY2sgPSBj
cmVhdGVQb3NpdGlvbkNhbGxiYWNrKGV4ZWMsIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0
Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSwgYXJncy5hdCgwKSk7CisgICAgUmVmUHRy
PFBvc2l0aW9uQ2FsbGJhY2s+IHBvc2l0aW9uQ2FsbGJhY2sgPSBjcmVhdGVQb3NpdGlvbkNhbGxi
YWNrKGV4ZWMsIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpKSwgZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgQVNTRVJUKHBvc2l0
aW9uQ2FsbGJhY2spOwogCi0gICAgUmVmUHRyPFBvc2l0aW9uRXJyb3JDYWxsYmFjaz4gcG9zaXRp
b25FcnJvckNhbGxiYWNrID0gY3JlYXRlUG9zaXRpb25FcnJvckNhbGxiYWNrKGV4ZWMsIHN0YXRp
Y19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSwg
YXJncy5hdCgxKSk7CisgICAgUmVmUHRyPFBvc2l0aW9uRXJyb3JDYWxsYmFjaz4gcG9zaXRpb25F
cnJvckNhbGxiYWNrID0gY3JlYXRlUG9zaXRpb25FcnJvckNhbGxiYWNrKGV4ZWMsIHN0YXRpY19j
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSwgZXhl
Yy0+YXJndW1lbnQoMSkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBSZWZQdHI8UG9zaXRpb25PcHRpb25zPiBwb3Np
dGlvbk9wdGlvbnMgPSBjcmVhdGVQb3NpdGlvbk9wdGlvbnMoZXhlYywgYXJncy5hdCgyKSk7Cisg
ICAgUmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4gcG9zaXRpb25PcHRpb25zID0gY3JlYXRlUG9zaXRp
b25PcHRpb25zKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDIpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIEFTU0VSVChwb3Np
dGlvbk9wdGlvbnMpOwpAQCAtMTU3LDIwICsxNTcsMjAgQEAgSlNWYWx1ZSBKU0dlb2xvY2F0aW9u
OjpnZXRDdXJyZW50UG9zaXRpbwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1Zh
bHVlIEpTR2VvbG9jYXRpb246OndhdGNoUG9zaXRpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0dlb2xvY2F0aW9uOjp3YXRjaFBvc2l0aW9uKEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICAvLyBBcmd1bWVudHM6IFBvc2l0aW9uQ2FsbGJhY2ssIChvcHRp
b25hbClQb3NpdGlvbkVycm9yQ2FsbGJhY2ssIChvcHRpb25hbClQb3NpdGlvbk9wdGlvbnMKIAot
ICAgIFJlZlB0cjxQb3NpdGlvbkNhbGxiYWNrPiBwb3NpdGlvbkNhbGxiYWNrID0gY3JlYXRlUG9z
aXRpb25DYWxsYmFjayhleGVjLCBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKSksIGFyZ3MuYXQoMCkpOworICAgIFJlZlB0cjxQb3NpdGlv
bkNhbGxiYWNrPiBwb3NpdGlvbkNhbGxiYWNrID0gY3JlYXRlUG9zaXRpb25DYWxsYmFjayhleGVj
LCBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSksIGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIEFTU0VSVChwb3NpdGlvbkNhbGxi
YWNrKTsKIAotICAgIFJlZlB0cjxQb3NpdGlvbkVycm9yQ2FsbGJhY2s+IHBvc2l0aW9uRXJyb3JD
YWxsYmFjayA9IGNyZWF0ZVBvc2l0aW9uRXJyb3JDYWxsYmFjayhleGVjLCBzdGF0aWNfY2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIGFyZ3MuYXQo
MSkpOworICAgIFJlZlB0cjxQb3NpdGlvbkVycm9yQ2FsbGJhY2s+IHBvc2l0aW9uRXJyb3JDYWxs
YmFjayA9IGNyZWF0ZVBvc2l0aW9uRXJyb3JDYWxsYmFjayhleGVjLCBzdGF0aWNfY2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIGV4ZWMtPmFyZ3Vt
ZW50KDEpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogCi0gICAgUmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4gcG9zaXRpb25PcHRp
b25zID0gY3JlYXRlUG9zaXRpb25PcHRpb25zKGV4ZWMsIGFyZ3MuYXQoMikpOworICAgIFJlZlB0
cjxQb3NpdGlvbk9wdGlvbnM+IHBvc2l0aW9uT3B0aW9ucyA9IGNyZWF0ZVBvc2l0aW9uT3B0aW9u
cyhleGVjLCBleGVjLT5hcmd1bWVudCgyKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBBU1NFUlQocG9zaXRpb25PcHRp
b25zKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQWxsQ29sbGVjdGlvbkN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxBbGxDb2xsZWN0
aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCwyMSArNTgs
MjEgQEAgc3RhdGljIEpTVmFsdWUgZ2V0TmFtZWRJdGVtcyhFeGVjU3RhdGUqIAogCiAvLyBIVE1M
Q29sbGVjdGlvbnMgYXJlIHN0cmFuZ2Ugb2JqZWN0cywgdGhleSBzdXBwb3J0IGJvdGggZ2V0IGFu
ZCBjYWxsLAogLy8gc28gdGhhdCBkb2N1bWVudC5mb3Jtcy5pdGVtKDApIGFuZCBkb2N1bWVudC5m
b3JtcygwKSBib3RoIHdvcmsuCi1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxIVE1M
QWxsQ29sbGVjdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBmdW5jdGlvbiwgSlNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2Fs
bEhUTUxBbGxDb2xsZWN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBpZiAoYXJncy5zaXpl
KCkgPCAxKQorICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIAogICAgIC8vIERvIG5vdCB1c2UgdGhpc09iaiBoZXJlLiBJdCBj
YW4gYmUgdGhlIEpTSFRNTERvY3VtZW50LCBpbiB0aGUgZG9jdW1lbnQuZm9ybXMoaSkgY2FzZS4K
LSAgICBKU0hUTUxBbGxDb2xsZWN0aW9uKiBqc0NvbGxlY3Rpb24gPSBzdGF0aWNfY2FzdDxKU0hU
TUxBbGxDb2xsZWN0aW9uKj4oZnVuY3Rpb24pOworICAgIEpTSFRNTEFsbENvbGxlY3Rpb24qIGpz
Q29sbGVjdGlvbiA9IHN0YXRpY19jYXN0PEpTSFRNTEFsbENvbGxlY3Rpb24qPihleGVjLT5jYWxs
ZWUoKSk7CiAgICAgSFRNTEFsbENvbGxlY3Rpb24qIGNvbGxlY3Rpb24gPSBzdGF0aWNfY2FzdDxI
VE1MQWxsQ29sbGVjdGlvbio+KGpzQ29sbGVjdGlvbi0+aW1wbCgpKTsKIAogICAgIC8vIEFsc28s
IGRvIHdlIG5lZWQgdGhlIFR5cGVFcnJvciB0ZXN0IGhlcmUgPwogCi0gICAgaWYgKGFyZ3Muc2l6
ZSgpID09IDEpIHsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID09IDEpIHsKICAgICAg
ICAgLy8gU3VwcG9ydCBmb3IgZG9jdW1lbnQuYWxsKDxpbmRleD4pIGV0Yy4KICAgICAgICAgYm9v
bCBvazsKLSAgICAgICAgVVN0cmluZyBzdHJpbmcgPSBhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMp
OworICAgICAgICBVU3RyaW5nIHN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4
ZWMpOwogICAgICAgICB1bnNpZ25lZCBpbmRleCA9IHN0cmluZy50b1VJbnQzMigmb2ssIGZhbHNl
KTsKICAgICAgICAgaWYgKG9rKQogICAgICAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywganNDb2xs
ZWN0aW9uLT5nbG9iYWxPYmplY3QoKSwgY29sbGVjdGlvbi0+aXRlbShpbmRleCkpOwpAQCAtODMs
OCArODMsOCBAQCBzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxIVE1MQWxsCiAKICAg
ICAvLyBUaGUgc2Vjb25kIGFyZywgaWYgc2V0LCBpcyB0aGUgaW5kZXggb2YgdGhlIGl0ZW0gd2Ug
d2FudAogICAgIGJvb2wgb2s7Ci0gICAgVVN0cmluZyBzdHJpbmcgPSBhcmdzLmF0KDApLnRvU3Ry
aW5nKGV4ZWMpOwotICAgIHVuc2lnbmVkIGluZGV4ID0gYXJncy5hdCgxKS50b1N0cmluZyhleGVj
KS50b1VJbnQzMigmb2ssIGZhbHNlKTsKKyAgICBVU3RyaW5nIHN0cmluZyA9IGV4ZWMtPmFyZ3Vt
ZW50KDApLnRvU3RyaW5nKGV4ZWMpOworICAgIHVuc2lnbmVkIGluZGV4ID0gZXhlYy0+YXJndW1l
bnQoMSkudG9TdHJpbmcoZXhlYykudG9VSW50MzIoJm9rLCBmYWxzZSk7CiAgICAgaWYgKG9rKSB7
CiAgICAgICAgIFN0cmluZyBwc3RyID0gdXN0cmluZ1RvU3RyaW5nKHN0cmluZyk7CiAgICAgICAg
IE5vZGUqIG5vZGUgPSBjb2xsZWN0aW9uLT5uYW1lZEl0ZW0ocHN0cik7CkBAIC0xMTgsMTggKzEx
OCwxOCBAQCBKU1ZhbHVlIEpTSFRNTEFsbENvbGxlY3Rpb246Om5hbWVHZXR0ZXIoCiAgICAgcmV0
dXJuIGdldE5hbWVkSXRlbXMoZXhlYywgdGhpc09iaiwgcHJvcGVydHlOYW1lKTsKIH0KIAotSlNW
YWx1ZSBKU0hUTUxBbGxDb2xsZWN0aW9uOjppdGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJn
TGlzdCYgYXJncykKK0pTVmFsdWUgSlNIVE1MQWxsQ29sbGVjdGlvbjo6aXRlbShFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgYm9vbCBvazsKLSAgICB1aW50MzJfdCBpbmRleCA9IGFyZ3MuYXQoMCku
dG9TdHJpbmcoZXhlYykudG9VSW50MzIoJm9rLCBmYWxzZSk7CisgICAgdWludDMyX3QgaW5kZXgg
PSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS50b1VJbnQzMigmb2ssIGZhbHNlKTsK
ICAgICBpZiAob2spCiAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBp
bXBsKCktPml0ZW0oaW5kZXgpKTsKLSAgICByZXR1cm4gZ2V0TmFtZWRJdGVtcyhleGVjLCB0aGlz
LCBJZGVudGlmaWVyKGV4ZWMsIGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpKTsKKyAgICByZXR1
cm4gZ2V0TmFtZWRJdGVtcyhleGVjLCB0aGlzLCBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPmFyZ3Vt
ZW50KDApLnRvU3RyaW5nKGV4ZWMpKSk7CiB9CiAKLUpTVmFsdWUgSlNIVE1MQWxsQ29sbGVjdGlv
bjo6bmFtZWRJdGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFs
dWUgSlNIVE1MQWxsQ29sbGVjdGlvbjo6bmFtZWRJdGVtKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAg
ICByZXR1cm4gZ2V0TmFtZWRJdGVtcyhleGVjLCB0aGlzLCBJZGVudGlmaWVyKGV4ZWMsIGFyZ3Mu
YXQoMCkudG9TdHJpbmcoZXhlYykpKTsKKyAgICByZXR1cm4gZ2V0TmFtZWRJdGVtcyhleGVjLCB0
aGlzLCBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMv
SlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNjAzNDEpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OSwxNyArNDksMTcgQEAgdm9pZCBKU0hUTUxDYW52YXNFbGVtZW50Ojpt
YXJrQ2hpbGRyZW4oTQogICAgIG1hcmtET01PYmplY3RXcmFwcGVyKG1hcmtTdGFjaywgZ2xvYmFs
RGF0YSwgY2FudmFzLT5yZW5kZXJpbmdDb250ZXh0KCkpOwogfQogCi1KU1ZhbHVlIEpTSFRNTENh
bnZhc0VsZW1lbnQ6OmdldENvbnRleHQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQorSlNWYWx1ZSBKU0hUTUxDYW52YXNFbGVtZW50OjpnZXRDb250ZXh0KEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gc3RhdGljX2Nhc3Q8SFRN
TENhbnZhc0VsZW1lbnQqPihpbXBsKCkpOwotICAgIGNvbnN0IFVTdHJpbmcmIGNvbnRleHRJZCA9
IGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyk7CisgICAgY29uc3QgVVN0cmluZyYgY29udGV4dElk
ID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CiAgICAgUmVmUHRyPENhbnZhc0Nv
bnRleHRBdHRyaWJ1dGVzPiBhdHRyczsKICNpZiBFTkFCTEUoM0RfQ0FOVkFTKQogICAgIGlmIChj
b250ZXh0SWQgPT0gImV4cGVyaW1lbnRhbC13ZWJnbCIgfHwgY29udGV4dElkID09ICJ3ZWJraXQt
M2QiKSB7CiAgICAgICAgIGF0dHJzID0gV2ViR0xDb250ZXh0QXR0cmlidXRlczo6Y3JlYXRlKCk7
CiAgICAgICAgIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMqIHdlYkdMQXR0cnMgPSBzdGF0aWNfY2Fz
dDxXZWJHTENvbnRleHRBdHRyaWJ1dGVzKj4oYXR0cnMuZ2V0KCkpOwotICAgICAgICBpZiAoYXJn
cy5zaXplKCkgPiAxICYmIGFyZ3MuYXQoMSkuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgSlNP
YmplY3QqIGpzQXR0cnMgPSBhcmdzLmF0KDEpLmdldE9iamVjdCgpOworICAgICAgICBpZiAoZXhl
Yy0+YXJndW1lbnRDb3VudCgpID4gMSAmJiBleGVjLT5hcmd1bWVudCgxKS5pc09iamVjdCgpKSB7
CisgICAgICAgICAgICBKU09iamVjdCoganNBdHRycyA9IGV4ZWMtPmFyZ3VtZW50KDEpLmdldE9i
amVjdCgpOwogICAgICAgICAgICAgSWRlbnRpZmllciBhbHBoYShleGVjLCAiYWxwaGEiKTsKICAg
ICAgICAgICAgIGlmIChqc0F0dHJzLT5oYXNQcm9wZXJ0eShleGVjLCBhbHBoYSkpCiAgICAgICAg
ICAgICAgICAgd2ViR0xBdHRycy0+c2V0QWxwaGEoanNBdHRycy0+Z2V0KGV4ZWMsIGFscGhhKS50
b0Jvb2xlYW4oZXhlYykpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDb2xsZWN0
aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENv
bGxlY3Rpb25DdXN0b20uY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNIVE1MQ29sbGVjdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDIxICs1
NSwyMSBAQCBzdGF0aWMgSlNWYWx1ZSBnZXROYW1lZEl0ZW1zKEV4ZWNTdGF0ZSogCiAKIC8vIEhU
TUxDb2xsZWN0aW9ucyBhcmUgc3RyYW5nZSBvYmplY3RzLCB0aGV5IHN1cHBvcnQgYm90aCBnZXQg
YW5kIGNhbGwsCiAvLyBzbyB0aGF0IGRvY3VtZW50LmZvcm1zLml0ZW0oMCkgYW5kIGRvY3VtZW50
LmZvcm1zKDApIGJvdGggd29yay4KLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEhU
TUxDb2xsZWN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9uLCBKU1ZhbHVl
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxs
SFRNTENvbGxlY3Rpb24oRXhlY1N0YXRlKiBleGVjKQogewotICAgIGlmIChhcmdzLnNpemUoKSA8
IDEpCisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogCiAgICAgLy8gRG8gbm90IHVzZSB0aGlzT2JqIGhlcmUuIEl0IGNhbiBi
ZSB0aGUgSlNIVE1MRG9jdW1lbnQsIGluIHRoZSBkb2N1bWVudC5mb3JtcyhpKSBjYXNlLgotICAg
IEpTSFRNTENvbGxlY3Rpb24qIGpzQ29sbGVjdGlvbiA9IHN0YXRpY19jYXN0PEpTSFRNTENvbGxl
Y3Rpb24qPihmdW5jdGlvbik7CisgICAgSlNIVE1MQ29sbGVjdGlvbioganNDb2xsZWN0aW9uID0g
c3RhdGljX2Nhc3Q8SlNIVE1MQ29sbGVjdGlvbio+KGV4ZWMtPmNhbGxlZSgpKTsKICAgICBIVE1M
Q29sbGVjdGlvbiogY29sbGVjdGlvbiA9IGpzQ29sbGVjdGlvbi0+aW1wbCgpOwogCiAgICAgLy8g
QWxzbywgZG8gd2UgbmVlZCB0aGUgVHlwZUVycm9yIHRlc3QgaGVyZSA/CiAKLSAgICBpZiAoYXJn
cy5zaXplKCkgPT0gMSkgeworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPT0gMSkgewog
ICAgICAgICAvLyBTdXBwb3J0IGZvciBkb2N1bWVudC5hbGwoPGluZGV4PikgZXRjLgogICAgICAg
ICBib29sIG9rOwotICAgICAgICBVU3RyaW5nIHN0cmluZyA9IGFyZ3MuYXQoMCkudG9TdHJpbmco
ZXhlYyk7CisgICAgICAgIFVTdHJpbmcgc3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJp
bmcoZXhlYyk7CiAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gc3RyaW5nLnRvVUludDMyKCZvaywg
ZmFsc2UpOwogICAgICAgICBpZiAob2spCiAgICAgICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBq
c0NvbGxlY3Rpb24tPmdsb2JhbE9iamVjdCgpLCBjb2xsZWN0aW9uLT5pdGVtKGluZGV4KSk7CkBA
IC04MCw4ICs4MCw4IEBAIHN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEhUTUxDb2wK
IAogICAgIC8vIFRoZSBzZWNvbmQgYXJnLCBpZiBzZXQsIGlzIHRoZSBpbmRleCBvZiB0aGUgaXRl
bSB3ZSB3YW50CiAgICAgYm9vbCBvazsKLSAgICBVU3RyaW5nIHN0cmluZyA9IGFyZ3MuYXQoMCku
dG9TdHJpbmcoZXhlYyk7Ci0gICAgdW5zaWduZWQgaW5kZXggPSBhcmdzLmF0KDEpLnRvU3RyaW5n
KGV4ZWMpLnRvVUludDMyKCZvaywgZmFsc2UpOworICAgIFVTdHJpbmcgc3RyaW5nID0gZXhlYy0+
YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CisgICAgdW5zaWduZWQgaW5kZXggPSBleGVjLT5h
cmd1bWVudCgxKS50b1N0cmluZyhleGVjKS50b1VJbnQzMigmb2ssIGZhbHNlKTsKICAgICBpZiAo
b2spIHsKICAgICAgICAgU3RyaW5nIHBzdHIgPSB1c3RyaW5nVG9TdHJpbmcoc3RyaW5nKTsKICAg
ICAgICAgTm9kZSogbm9kZSA9IGNvbGxlY3Rpb24tPm5hbWVkSXRlbShwc3RyKTsKQEAgLTExNSwx
OCArMTE1LDE4IEBAIEpTVmFsdWUgSlNIVE1MQ29sbGVjdGlvbjo6bmFtZUdldHRlcihFeGUKICAg
ICByZXR1cm4gZ2V0TmFtZWRJdGVtcyhleGVjLCB0aGlzT2JqLCBwcm9wZXJ0eU5hbWUpOwogfQog
Ci1KU1ZhbHVlIEpTSFRNTENvbGxlY3Rpb246Oml0ZW0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0hUTUxDb2xsZWN0aW9uOjppdGVtKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBib29sIG9rOwotICAgIHVpbnQzMl90IGluZGV4ID0gYXJncy5hdCgwKS50
b1N0cmluZyhleGVjKS50b1VJbnQzMigmb2ssIGZhbHNlKTsKKyAgICB1aW50MzJfdCBpbmRleCA9
IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLnRvVUludDMyKCZvaywgZmFsc2UpOwog
ICAgIGlmIChvaykKICAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGlt
cGwoKS0+aXRlbShpbmRleCkpOwotICAgIHJldHVybiBnZXROYW1lZEl0ZW1zKGV4ZWMsIHRoaXMs
IElkZW50aWZpZXIoZXhlYywgYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSkpOworICAgIHJldHVy
biBnZXROYW1lZEl0ZW1zKGV4ZWMsIHRoaXMsIElkZW50aWZpZXIoZXhlYywgZXhlYy0+YXJndW1l
bnQoMCkudG9TdHJpbmcoZXhlYykpKTsKIH0KIAotSlNWYWx1ZSBKU0hUTUxDb2xsZWN0aW9uOjpu
YW1lZEl0ZW0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBK
U0hUTUxDb2xsZWN0aW9uOjpuYW1lZEl0ZW0oRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVy
biBnZXROYW1lZEl0ZW1zKGV4ZWMsIHRoaXMsIElkZW50aWZpZXIoZXhlYywgYXJncy5hdCgwKS50
b1N0cmluZyhleGVjKSkpOworICAgIHJldHVybiBnZXROYW1lZEl0ZW1zKGV4ZWMsIHRoaXMsIElk
ZW50aWZpZXIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpKTsKIH0KIAog
SlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSFRNTENvbGxlY3Rpb24qIGNvbGxlY3Rpb24pCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTAwLDEwICsxMDAsMTAgQEAgdm9pZCBKU0hUTUxEb2N1bWVudDo6c2V0QWxsKEV4ZWNTdGF0
ZSogZQogCiAvLyBDdXN0b20gZnVuY3Rpb25zCiAKLUpTVmFsdWUgSlNIVE1MRG9jdW1lbnQ6Om9w
ZW4oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0hUTUxE
b2N1bWVudDo6b3BlbihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgLy8gRm9yIGNvbXBhdGliaWxp
dHkgd2l0aCBvdGhlciBicm93c2VycywgcGFzcyBvcGVuIGNhbGxzIHdpdGggbW9yZSB0aGFuIDIg
cGFyYW1ldGVycyB0byB0aGUgd2luZG93LgotICAgIGlmIChhcmdzLnNpemUoKSA+IDIpIHsKKyAg
ICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4gMikgewogICAgICAgICBGcmFtZSogZnJhbWUg
PSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihpbXBsKCkpLT5mcmFtZSgpOwogICAgICAgICBp
ZiAoZnJhbWUpIHsKICAgICAgICAgICAgIEpTRE9NV2luZG93U2hlbGwqIHdyYXBwZXIgPSB0b0pT
RE9NV2luZG93U2hlbGwoZnJhbWUsIGN1cnJlbnRXb3JsZChleGVjKSk7CkBAIC0xMTMsNyArMTEz
LDcgQEAgSlNWYWx1ZSBKU0hUTUxEb2N1bWVudDo6b3BlbihFeGVjU3RhdGUqIAogICAgICAgICAg
ICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZnVuY3Rpb24uZ2V0Q2FsbERhdGEoY2FsbERhdGEp
OwogICAgICAgICAgICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIEpTQzo6Y2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxE
YXRhLCB3cmFwcGVyLCBhcmdzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNDOjpjYWxsKGV4
ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHdyYXBwZXIsIEFyZ0xpc3QoZXhlYykp
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwpAQCAtMTMwLDIwICsxMzAsMjAgQEAgSlNWYWx1ZSBKU0hUTUxEb2N1bWVudDo6b3BlbihFeGVj
U3RhdGUqIAogCiBlbnVtIE5ld2xpbmVSZXF1aXJlbWVudCB7IERvTm90QWRkTmV3bGluZSwgRG9B
ZGROZXdsaW5lIH07CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkb2N1bWVudFdyaXRlKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncywgSFRNTERvY3VtZW50KiBkb2N1bWVudCwgTmV3
bGluZVJlcXVpcmVtZW50IGFkZE5ld2xpbmUpCitzdGF0aWMgaW5saW5lIHZvaWQgZG9jdW1lbnRX
cml0ZShFeGVjU3RhdGUqIGV4ZWMsIEhUTUxEb2N1bWVudCogZG9jdW1lbnQsIE5ld2xpbmVSZXF1
aXJlbWVudCBhZGROZXdsaW5lKQogewogICAgIC8vIERPTSBvbmx5IHNwZWNpZmllcyBzaW5nbGUg
c3RyaW5nIGFyZ3VtZW50LCBidXQgYnJvd3NlcnMgYWxsb3cgbXVsdGlwbGUgb3Igbm8gYXJndW1l
bnRzLgogCi0gICAgc2l6ZV90IHNpemUgPSBhcmdzLnNpemUoKTsKKyAgICBzaXplX3Qgc2l6ZSA9
IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKIAotICAgIFVTdHJpbmcgZmlyc3RTdHJpbmcgPSBhcmdz
LmF0KDApLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgZmlyc3RTdHJpbmcgPSBleGVjLT5h
cmd1bWVudCgwKS50b1N0cmluZyhleGVjKTsKICAgICBTZWdtZW50ZWRTdHJpbmcgc2VnbWVudGVk
U3RyaW5nID0gdXN0cmluZ1RvU3RyaW5nKGZpcnN0U3RyaW5nKTsKICAgICBpZiAoc2l6ZSAhPSAx
KSB7CiAgICAgICAgIGlmICghc2l6ZSkKICAgICAgICAgICAgIHNlZ21lbnRlZFN0cmluZy5jbGVh
cigpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwg
c2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgVVN0cmluZyBzdWJzZXF1ZW50U3RyaW5nID0g
YXJncy5hdChpKS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgICAgICAgICBVU3RyaW5nIHN1YnNl
cXVlbnRTdHJpbmcgPSBleGVjLT5hcmd1bWVudChpKS50b1N0cmluZyhleGVjKTsKICAgICAgICAg
ICAgICAgICBzZWdtZW50ZWRTdHJpbmcuYXBwZW5kKFNlZ21lbnRlZFN0cmluZyh1c3RyaW5nVG9T
dHJpbmcoc3Vic2VxdWVudFN0cmluZykpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAt
MTU1LDE1ICsxNTUsMTUgQEAgc3RhdGljIGlubGluZSB2b2lkIGRvY3VtZW50V3JpdGUoRXhlY1N0
YQogICAgIGRvY3VtZW50LT53cml0ZShzZWdtZW50ZWRTdHJpbmcsIGFjdGl2ZURvY3VtZW50KTsK
IH0KIAotSlNWYWx1ZSBKU0hUTUxEb2N1bWVudDo6d3JpdGUoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0hUTUxEb2N1bWVudDo6d3JpdGUoRXhlY1N0YXRl
KiBleGVjKQogewotICAgIGRvY3VtZW50V3JpdGUoZXhlYywgYXJncywgc3RhdGljX2Nhc3Q8SFRN
TERvY3VtZW50Kj4oaW1wbCgpKSwgRG9Ob3RBZGROZXdsaW5lKTsKKyAgICBkb2N1bWVudFdyaXRl
KGV4ZWMsIHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+KGltcGwoKSksIERvTm90QWRkTmV3bGlu
ZSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNIVE1MRG9jdW1l
bnQ6OndyaXRlbG4oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1
ZSBKU0hUTUxEb2N1bWVudDo6d3JpdGVsbihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgZG9jdW1l
bnRXcml0ZShleGVjLCBhcmdzLCBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihpbXBsKCkpLCBE
b0FkZE5ld2xpbmUpOworICAgIGRvY3VtZW50V3JpdGUoZXhlYywgc3RhdGljX2Nhc3Q8SFRNTERv
Y3VtZW50Kj4oaW1wbCgpKSwgRG9BZGROZXdsaW5lKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxJbnB1dEVsZW1lbnRDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MSW5wdXRFbGVt
ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SFRNTElucHV0RWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMywxNCArMTAz
LDE0IEBAIHZvaWQgSlNIVE1MSW5wdXRFbGVtZW50OjpzZXRTZWxlY3Rpb25FbmQKICAgICBpbnB1
dC0+c2V0U2VsZWN0aW9uRW5kKHZhbHVlLnRvSW50MzIoZXhlYykpOwogfQogCi1KU1ZhbHVlIEpT
SFRNTElucHV0RWxlbWVudDo6c2V0U2VsZWN0aW9uUmFuZ2UoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0hUTUxJbnB1dEVsZW1lbnQ6OnNldFNlbGVjdGlv
blJhbmdlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9
IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihpbXBsKCkpOwogICAgIGlmICghaW5wdXQt
PmNhbkhhdmVTZWxlY3Rpb24oKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlw
ZUVycm9yKTsKIAotICAgIGludCBzdGFydCA9IGFyZ3MuYXQoMCkudG9JbnQzMihleGVjKTsKLSAg
ICBpbnQgZW5kID0gYXJncy5hdCgxKS50b0ludDMyKGV4ZWMpOworICAgIGludCBzdGFydCA9IGV4
ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7CisgICAgaW50IGVuZCA9IGV4ZWMtPmFyZ3Vt
ZW50KDEpLnRvSW50MzIoZXhlYyk7CiAKICAgICBpbnB1dC0+c2V0U2VsZWN0aW9uUmFuZ2Uoc3Rh
cnQsIGVuZCk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSFRNTE9wdGlvbnNDb2xsZWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTE9wdGlvbnNDb2xsZWN0aW9uQ3VzdG9tLmNwcAkocmV2
aXNpb24gNjAzNDEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTE9wdGlvbnNDb2xsZWN0
aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsMTYgKzY3LDE2IEBAIHZvaWQgSlNI
VE1MT3B0aW9uc0NvbGxlY3Rpb246OmluZGV4U2V0dGUKICAgICBzZWxlY3RJbmRleFNldHRlcihi
YXNlLCBleGVjLCBpbmRleCwgdmFsdWUpOwogfQogCi1KU1ZhbHVlIEpTSFRNTE9wdGlvbnNDb2xs
ZWN0aW9uOjphZGQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1
ZSBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbjo6YWRkKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBI
VE1MT3B0aW9uc0NvbGxlY3Rpb24qIGltcCA9IHN0YXRpY19jYXN0PEhUTUxPcHRpb25zQ29sbGVj
dGlvbio+KGltcGwoKSk7Ci0gICAgSFRNTE9wdGlvbkVsZW1lbnQqIG9wdGlvbiA9IHRvSFRNTE9w
dGlvbkVsZW1lbnQoYXJncy5hdCgwKSk7CisgICAgSFRNTE9wdGlvbkVsZW1lbnQqIG9wdGlvbiA9
IHRvSFRNTE9wdGlvbkVsZW1lbnQoZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwotICAgIGlmIChhcmdzLnNpemUoKSA8IDIpCisgICAgaWYgKGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSA8IDIpCiAgICAgICAgIGltcC0+YWRkKG9wdGlvbiwgZWMpOwogICAgIGVsc2Ug
ewogICAgICAgICBib29sIG9rOwotICAgICAgICBpbnQgaW5kZXggPSBhcmdzLmF0KDEpLnRvSW50
MzIoZXhlYywgb2spOworICAgICAgICBpbnQgaW5kZXggPSBleGVjLT5hcmd1bWVudCgxKS50b0lu
dDMyKGV4ZWMsIG9rKTsKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIGlmICghb2spCkBAIC04OCwxMSAr
ODgsMTEgQEAgSlNWYWx1ZSBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbjo6YWRkKEV4ZQogICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlIEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9u
OjpyZW1vdmUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBK
U0hUTUxPcHRpb25zQ29sbGVjdGlvbjo6cmVtb3ZlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBI
VE1MT3B0aW9uc0NvbGxlY3Rpb24qIGltcCA9IHN0YXRpY19jYXN0PEhUTUxPcHRpb25zQ29sbGVj
dGlvbio+KGltcGwoKSk7CiAgICAgSlNIVE1MU2VsZWN0RWxlbWVudCogYmFzZSA9IHN0YXRpY19j
YXN0PEpTSFRNTFNlbGVjdEVsZW1lbnQqPihhc09iamVjdCh0b0pTKGV4ZWMsIGdsb2JhbE9iamVj
dCgpLCBpbXAtPmJhc2UoKSkpKTsKLSAgICByZXR1cm4gYmFzZS0+cmVtb3ZlKGV4ZWMsIGFyZ3Mp
OworICAgIHJldHVybiBiYXNlLT5yZW1vdmUoZXhlYyk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvanMvSlNIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNp
b24gNjAzNDEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTFNlbGVjdEVsZW1lbnRDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNiArMzIsMTYgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAK
LUpTVmFsdWUgSlNIVE1MU2VsZWN0RWxlbWVudDo6cmVtb3ZlKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNIVE1MU2VsZWN0RWxlbWVudDo6cmVtb3ZlKEV4
ZWNTdGF0ZSogZXhlYykKIHsKICAgICBIVE1MU2VsZWN0RWxlbWVudCYgc2VsZWN0ID0gKnN0YXRp
Y19jYXN0PEhUTUxTZWxlY3RFbGVtZW50Kj4oaW1wbCgpKTsKIAogICAgIC8vIHdlIHN1cHBvcnQg
Ym90aCBvcHRpb25zIGluZGV4IGFuZCBvcHRpb25zIG9iamVjdHMKLSAgICBIVE1MRWxlbWVudCog
ZWxlbWVudCA9IHRvSFRNTEVsZW1lbnQoYXJncy5hdCgwKSk7CisgICAgSFRNTEVsZW1lbnQqIGVs
ZW1lbnQgPSB0b0hUTUxFbGVtZW50KGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICBpZiAoZWxlbWVu
dCAmJiBlbGVtZW50LT5oYXNUYWdOYW1lKG9wdGlvblRhZykpCiAgICAgICAgIHNlbGVjdC5yZW1v
dmUoc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnQqPihlbGVtZW50KS0+aW5kZXgoKSk7CiAg
ICAgZWxzZQotICAgICAgICBzZWxlY3QucmVtb3ZlKGFyZ3MuYXQoMCkudG9JbnQzMihleGVjKSk7
CisgICAgICAgIHNlbGVjdC5yZW1vdmUoZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjKSk7
CiAKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNIaXN0b3J5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSGlzdG9yeUN1c3RvbS5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjIsMTkgKzE2Miwx
OSBAQCB2b2lkIEpTSGlzdG9yeTo6Z2V0T3duUHJvcGVydHlOYW1lcyhFeGVjCiAgICAgQmFzZTo6
Z2V0T3duUHJvcGVydHlOYW1lcyhleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAotSlNW
YWx1ZSBKU0hpc3Rvcnk6OnB1c2hTdGF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCitKU1ZhbHVlIEpTSGlzdG9yeTo6cHVzaFN0YXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsK
LSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBoaXN0b3J5U3RhdGUgPSBTZXJpYWxp
emVkU2NyaXB0VmFsdWU6OmNyZWF0ZShleGVjLCBhcmdzLmF0KDApKTsKKyAgICBSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiBoaXN0b3J5U3RhdGUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6
OmNyZWF0ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIFN0cmluZyB0aXRs
ZSA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgYXJncy5hdCgx
KSk7CisgICAgU3RyaW5nIHRpdGxlID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxD
aGVjayhleGVjLCBleGVjLT5hcmd1bWVudCgxKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgCiAgICAgU3RyaW5n
IHVybDsKLSAgICBpZiAoYXJncy5zaXplKCkgPiAyKSB7Ci0gICAgICAgIHVybCA9IHZhbHVlVG9T
dHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgYXJncy5hdCgyKSk7CisgICAgaWYg
KGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+IDIpIHsKKyAgICAgICAgdXJsID0gdmFsdWVUb1N0cmlu
Z1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhleGVjLCBleGVjLT5hcmd1bWVudCgyKSk7CiAgICAg
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogICAgIH0KQEAgLTE4NiwxOSArMTg2LDE5IEBAIEpTVmFsdWUgSlNIaXN0b3J5Ojpw
dXNoU3RhdGUoRXhlY1N0YXRlKiAKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNW
YWx1ZSBKU0hpc3Rvcnk6OnJlcGxhY2VTdGF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCitKU1ZhbHVlIEpTSGlzdG9yeTo6cmVwbGFjZVN0YXRlKEV4ZWNTdGF0ZSogZXhl
YykKIHsKLSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBoaXN0b3J5U3RhdGUgPSBT
ZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShleGVjLCBhcmdzLmF0KDApKTsKKyAgICBSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBoaXN0b3J5U3RhdGUgPSBTZXJpYWxpemVkU2NyaXB0
VmFsdWU6OmNyZWF0ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIFN0cmlu
ZyB0aXRsZSA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgYXJn
cy5hdCgxKSk7CisgICAgU3RyaW5nIHRpdGxlID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRP
ck51bGxDaGVjayhleGVjLCBleGVjLT5hcmd1bWVudCgxKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgCiAgICAg
U3RyaW5nIHVybDsKLSAgICBpZiAoYXJncy5zaXplKCkgPiAyKSB7Ci0gICAgICAgIHVybCA9IHZh
bHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgYXJncy5hdCgyKSk7Cisg
ICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+IDIpIHsKKyAgICAgICAgdXJsID0gdmFsdWVU
b1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhleGVjLCBleGVjLT5hcmd1bWVudCgyKSk7
CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3Rl
ZFNjcmlwdEhvc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDQsMTYgKzEwNCwxNiBAQCBTY3JpcHRPYmplY3QgSW5qZWN0ZWRTY3JpcHRIb3N0
OjpjcmVhdGVJCiB9CiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCi1KU1ZhbHVlIEpTSW5qZWN0ZWRT
Y3JpcHRIb3N0OjpkYXRhYmFzZUZvcklkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYg
YXJncykKK0pTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OmRhdGFiYXNlRm9ySWQoRXhlY1N0
YXRlKiBleGVjKQogewotICAgIGlmIChhcmdzLnNpemUoKSA8IDEpCisgICAgaWYgKGV4ZWMtPmFy
Z3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAg
SW5zcGVjdG9yQ29udHJvbGxlciogaWMgPSBpbXBsKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKTsK
ICAgICBpZiAoIWljKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIERhdGFi
YXNlKiBkYXRhYmFzZSA9IGltcGwoKS0+ZGF0YWJhc2VGb3JJZChhcmdzLmF0KDApLnRvSW50MzIo
ZXhlYykpOworICAgIERhdGFiYXNlKiBkYXRhYmFzZSA9IGltcGwoKS0+ZGF0YWJhc2VGb3JJZChl
eGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpKTsKICAgICBpZiAoIWRhdGFiYXNlKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICByZXR1cm4gdG9KUyhleGVjLCBkYXRhYmFz
ZSk7CkBAIC0xMjEsNyArMTIxLDcgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6ZGF0
YWJhc2VGbwogI2VuZGlmCiAKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLUpTVmFs
dWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OmN1cnJlbnRDYWxsRnJhbWUoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OmN1cnJlbnRD
YWxsRnJhbWUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEphdmFTY3JpcHRDYWxsRnJhbWUqIGNh
bGxGcmFtZSA9IFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5jdXJyZW50Q2FsbEZyYW1lKCk7
CiAgICAgaWYgKCFjYWxsRnJhbWUgfHwgIWNhbGxGcmFtZS0+aXNWYWxpZCgpKQpAQCAtMTMyLDEy
ICsxMzIsMTIgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6Y3VycmVudENhbAogfQog
I2VuZGlmCiAKLUpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6Om5vZGVGb3JJZChFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRI
b3N0Ojpub2RlRm9ySWQoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGlmIChhcmdzLnNpemUoKSA8
IDEpCisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogCi0gICAgTm9kZSogbm9kZSA9IGltcGwoKS0+bm9kZUZvcklkKGFyZ3Mu
YXQoMCkudG9JbnQzMihleGVjKSk7CisgICAgTm9kZSogbm9kZSA9IGltcGwoKS0+bm9kZUZvcklk
KGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYykpOwogICAgIGlmICghbm9kZSkKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKQEAgLTE0OSwyNyArMTQ5LDI3IEBAIEpTVmFsdWUg
SlNJbmplY3RlZFNjcmlwdEhvc3Q6Om5vZGVGb3JJZCgKICAgICByZXR1cm4gdG9KUyhleGVjLCBu
b2RlKTsKIH0KIAotSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6cHVzaE5vZGVQYXRoVG9G
cm9udGVuZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpT
SW5qZWN0ZWRTY3JpcHRIb3N0OjpwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKEV4ZWNTdGF0ZSogZXhl
YykKIHsKLSAgICBpZiAoYXJncy5zaXplKCkgPCAzKQorICAgIGlmIChleGVjLT5hcmd1bWVudENv
dW50KCkgPCAzKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIE5vZGUqIG5v
ZGUgPSB0b05vZGUoYXJncy5hdCgwKSk7CisgICAgTm9kZSogbm9kZSA9IHRvTm9kZShleGVjLT5h
cmd1bWVudCgwKSk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIAotICAgIGJvb2wgd2l0aENoaWxkcmVuID0gYXJncy5hdCgxKS50b0Jvb2xlYW4oZXhlYyk7
Ci0gICAgYm9vbCBzZWxlY3RJblVJID0gYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYyk7CisgICAg
Ym9vbCB3aXRoQ2hpbGRyZW4gPSBleGVjLT5hcmd1bWVudCgxKS50b0Jvb2xlYW4oZXhlYyk7Cisg
ICAgYm9vbCBzZWxlY3RJblVJID0gZXhlYy0+YXJndW1lbnQoMikudG9Cb29sZWFuKGV4ZWMpOwog
ICAgIHJldHVybiBqc051bWJlcihleGVjLCBpbXBsKCktPnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQo
bm9kZSwgd2l0aENoaWxkcmVuLCBzZWxlY3RJblVJKSk7CiB9CiAKICNpZiBFTkFCTEUoREFUQUJB
U0UpCi1KU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpzZWxlY3REYXRhYmFzZShFeGVjU3Rh
dGUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6
c2VsZWN0RGF0YWJhc2UoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGlmIChhcmdzLnNpemUoKSA8
IDEpCisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogCi0gICAgRGF0YWJhc2UqIGRhdGFiYXNlID0gdG9EYXRhYmFzZShhcmdz
LmF0KDApKTsKKyAgICBEYXRhYmFzZSogZGF0YWJhc2UgPSB0b0RhdGFiYXNlKGV4ZWMtPmFyZ3Vt
ZW50KDApKTsKICAgICBpZiAoZGF0YWJhc2UpCiAgICAgICAgIGltcGwoKS0+c2VsZWN0RGF0YWJh
c2UoZGF0YWJhc2UpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpAQCAtMTc3LDM0ICsxNzcs
MzQgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6c2VsZWN0RGF0YQogI2VuZGlmCiAK
ICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCi1KU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0Ojpz
ZWxlY3RET01TdG9yYWdlKEV4ZWNTdGF0ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVl
IEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpzZWxlY3RET01TdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYykK
IHsKLSAgICBpZiAoYXJncy5zaXplKCkgPCAxKQorICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50
KCkgPCAxKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBJbnNwZWN0b3JDb250
cm9sbGVyKiBpYyA9IGltcGwoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpOwogICAgIGlmICghaWMp
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgU3RvcmFnZSogc3RvcmFnZSA9
IHRvU3RvcmFnZShhcmdzLmF0KDApKTsKKyAgICBTdG9yYWdlKiBzdG9yYWdlID0gdG9TdG9yYWdl
KGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICBpZiAoc3RvcmFnZSkKICAgICAgICAgaW1wbCgpLT5z
ZWxlY3RET01TdG9yYWdlKHN0b3JhZ2UpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQog
I2VuZGlmCiAKLUpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OnJlcG9ydERpZERpc3BhdGNo
T25JbmplY3RlZFNjcmlwdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitK
U1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpyZXBvcnREaWREaXNwYXRjaE9uSW5qZWN0ZWRT
Y3JpcHQoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGlmIChhcmdzLnNpemUoKSA8IDMpCisgICAg
aWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDMpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogICAgIAotICAgIGlmICghYXJncy5hdCgwKS5pc0ludDMyKCkpCisgICAgaWYgKCFleGVj
LT5hcmd1bWVudCgwKS5pc0ludDMyKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwot
ICAgIGludCBjYWxsSWQgPSBhcmdzLmF0KDApLmFzSW50MzIoKTsKKyAgICBpbnQgY2FsbElkID0g
ZXhlYy0+YXJndW1lbnQoMCkuYXNJbnQzMigpOwogICAgIAotICAgIFJlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IHJlc3VsdChTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShleGVjLCBh
cmdzLmF0KDEpKSk7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcmVzdWx0KFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDEpKSk7CiAg
ICAgCiAgICAgYm9vbCBpc0V4Y2VwdGlvbjsKLSAgICBpZiAoIWFyZ3MuYXQoMikuZ2V0Qm9vbGVh
bihpc0V4Y2VwdGlvbikpCisgICAgaWYgKCFleGVjLT5hcmd1bWVudCgyKS5nZXRCb29sZWFuKGlz
RXhjZXB0aW9uKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgaW1wbCgpLT5y
ZXBvcnREaWREaXNwYXRjaE9uSW5qZWN0ZWRTY3JpcHQoY2FsbElkLCByZXN1bHQuZ2V0KCksIGlz
RXhjZXB0aW9uKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwCShy
ZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9udGVu
ZEhvc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIHVzaW5nIG5h
bWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSBKU0luc3BlY3Rv
ckZyb250ZW5kSG9zdDo6cGxhdGZvcm0oRXhlY1N0YXRlKiBleGVjU3RhdGUsIGNvbnN0IEFyZ0xp
c3QmKQorSlNWYWx1ZSBKU0luc3BlY3RvckZyb250ZW5kSG9zdDo6cGxhdGZvcm0oRXhlY1N0YXRl
KiBleGVjU3RhdGUpCiB7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIERFRklORV9TVEFUSUNfTE9D
QUwoY29uc3QgU3RyaW5nLCBwbGF0Zm9ybSwgKCJtYWMiKSk7CkBAIC02Myw3ICs2Myw3IEBAIEpT
VmFsdWUgSlNJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnBsYXRmb3IKICAgICByZXR1cm4ganNTdHJp
bmcoZXhlY1N0YXRlLCBwbGF0Zm9ybSk7CiB9CiAKLUpTVmFsdWUgSlNJbnNwZWN0b3JGcm9udGVu
ZEhvc3Q6OnBvcnQoRXhlY1N0YXRlKiBleGVjU3RhdGUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1
ZSBKU0luc3BlY3RvckZyb250ZW5kSG9zdDo6cG9ydChFeGVjU3RhdGUqIGV4ZWNTdGF0ZSkKIHsK
ICNpZiBQTEFURk9STShRVCkKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywg
cG9ydCwgKCJxdCIpKTsKQEAgLTc3LDMxICs3NywyOSBAQCBKU1ZhbHVlIEpTSW5zcGVjdG9yRnJv
bnRlbmRIb3N0Ojpwb3J0KEV4CiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWNTdGF0ZSwgcG9ydCk7
CiB9CiAKLUpTVmFsdWUgSlNJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDb250ZXh0TWVudShF
eGVjU3RhdGUqIGV4ZWNTdGF0ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNJbnNw
ZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDb250ZXh0TWVudShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0g
ICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMikKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwg
MikKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAjaWYgRU5BQkxFKENPTlRFWFRfTUVO
VVMpCi0gICAgRXZlbnQqIGV2ZW50ID0gdG9FdmVudChhcmdzLmF0KDApKTsKKyAgICBFdmVudCog
ZXZlbnQgPSB0b0V2ZW50KGV4ZWMtPmFyZ3VtZW50KDApKTsKIAotICAgIEpTQXJyYXkqIGFycmF5
ID0gYXNBcnJheShhcmdzLmF0KDEpKTsKKyAgICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkoZXhl
Yy0+YXJndW1lbnQoMSkpOwogICAgIFZlY3RvcjxDb250ZXh0TWVudUl0ZW0qPiBpdGVtczsKIAog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXktPmxlbmd0aCgpOyArK2kpIHsKICAgICAg
ICAgSlNPYmplY3QqIGl0ZW0gPSBhc09iamVjdChhcnJheS0+Z2V0SW5kZXgoaSkpOwotICAgICAg
ICBKU1ZhbHVlIGxhYmVsID0gaXRlbS0+Z2V0KGV4ZWNTdGF0ZSwgSWRlbnRpZmllcihleGVjU3Rh
dGUsICJsYWJlbCIpKTsKLSAgICAgICAgSlNWYWx1ZSBpZCA9IGl0ZW0tPmdldChleGVjU3RhdGUs
IElkZW50aWZpZXIoZXhlY1N0YXRlLCAiaWQiKSk7CisgICAgICAgIEpTVmFsdWUgbGFiZWwgPSBp
dGVtLT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAibGFiZWwiKSk7CisgICAgICAgIEpTVmFs
dWUgaWQgPSBpdGVtLT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAiaWQiKSk7CiAgICAgICAg
IGlmIChsYWJlbC5pc1VuZGVmaW5lZCgpIHx8IGlkLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgICAg
ICBpdGVtcy5hcHBlbmQobmV3IENvbnRleHRNZW51SXRlbShTZXBhcmF0b3JUeXBlLCBDb250ZXh0
TWVudUl0ZW1UYWdOb0FjdGlvbiwgU3RyaW5nKCkpKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICBDb250ZXh0TWVudUFjdGlvbiB0eXBlZElkID0gc3RhdGljX2Nhc3Q8Q29udGV4dE1lbnVB
Y3Rpb24+KENvbnRleHRNZW51SXRlbUJhc2VDdXN0b21UYWcgKyBpZC50b0ludDMyKGV4ZWNTdGF0
ZSkpOwotICAgICAgICAgICAgaXRlbXMuYXBwZW5kKG5ldyBDb250ZXh0TWVudUl0ZW0oQWN0aW9u
VHlwZSwgdHlwZWRJZCwgdXN0cmluZ1RvU3RyaW5nKGxhYmVsLnRvU3RyaW5nKGV4ZWNTdGF0ZSkp
KSk7CisgICAgICAgICAgICBDb250ZXh0TWVudUFjdGlvbiB0eXBlZElkID0gc3RhdGljX2Nhc3Q8
Q29udGV4dE1lbnVBY3Rpb24+KENvbnRleHRNZW51SXRlbUJhc2VDdXN0b21UYWcgKyBpZC50b0lu
dDMyKGV4ZWMpKTsKKyAgICAgICAgICAgIGl0ZW1zLmFwcGVuZChuZXcgQ29udGV4dE1lbnVJdGVt
KEFjdGlvblR5cGUsIHR5cGVkSWQsIHVzdHJpbmdUb1N0cmluZyhsYWJlbC50b1N0cmluZyhleGVj
KSkpKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGltcGwoKS0+c2hvd0NvbnRleHRNZW51KGV2
ZW50LCBpdGVtcyk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShleGVjU3RhdGUpOwogI2VuZGlm
CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSW50OEFycmF5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSW50OEFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSW50OEFycmF5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsOSArNDgs
OSBAQCBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgCiAgICAgcmV0dXJu
IGdldERPTU9iamVjdFdyYXBwZXI8SlNJbnQ4QXJyYXk+KGV4ZWMsIGdsb2JhbE9iamVjdCwgb2Jq
ZWN0KTsKIH0KIAotSlNDOjpKU1ZhbHVlIEpTSW50OEFycmF5OjpzZXQoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIEpTQzo6QXJnTGlzdCBjb25zdCYgYXJncykKK0pTQzo6SlNWYWx1ZSBKU0ludDhBcnJh
eTo6c2V0KEpTQzo6RXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBzZXRXZWJHTEFycmF5
SGVscGVyKGV4ZWMsIGltcGwoKSwgYXJncywgdG9JbnQ4QXJyYXkpOworICAgIHJldHVybiBzZXRX
ZWJHTEFycmF5SGVscGVyKGV4ZWMsIGltcGwoKSwgdG9JbnQ4QXJyYXkpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50MTZBcnJheUN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ludDE2QXJyYXlD
dXN0b20uY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbnQx
NkFycmF5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsOSArNDYsOSBAQCBKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgCiAgICAgcmV0dXJuIGdldERPTU9iamVj
dFdyYXBwZXI8SlNJbnQxNkFycmF5PihleGVjLCBnbG9iYWxPYmplY3QsIG9iamVjdCk7CiB9CiAK
LUpTQzo6SlNWYWx1ZSBKU0ludDE2QXJyYXk6OnNldChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlND
OjpBcmdMaXN0IGNvbnN0JiBhcmdzKQorSlNDOjpKU1ZhbHVlIEpTSW50MTZBcnJheTo6c2V0KEpT
Qzo6RXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBzZXRXZWJHTEFycmF5SGVscGVyKGV4
ZWMsIGltcGwoKSwgYXJncywgdG9JbnQxNkFycmF5KTsKKyAgICByZXR1cm4gc2V0V2ViR0xBcnJh
eUhlbHBlcihleGVjLCBpbXBsKCksIHRvSW50MTZBcnJheSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbnQzMkFycmF5Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50MzJBcnJheUN1c3RvbS5j
cHAJKHJldmlzaW9uIDYwMzQxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ludDMyQXJyYXlD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw5ICs0Niw5IEBAIEpTQzo6SlNWYWx1ZSB0
b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCAKICAgICByZXR1cm4gZ2V0RE9NT2JqZWN0V3JhcHBl
cjxKU0ludDMyQXJyYXk+KGV4ZWMsIGdsb2JhbE9iamVjdCwgb2JqZWN0KTsKIH0KIAotSlNDOjpK
U1ZhbHVlIEpTSW50MzJBcnJheTo6c2V0KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkFyZ0xp
c3QgY29uc3QmIGFyZ3MpCitKU0M6OkpTVmFsdWUgSlNJbnQzMkFycmF5OjpzZXQoSlNDOjpFeGVj
U3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIHNldFdlYkdMQXJyYXlIZWxwZXIoZXhlYywgaW1w
bCgpLCBhcmdzLCB0b0ludDMyQXJyYXkpOworICAgIHJldHVybiBzZXRXZWJHTEFycmF5SGVscGVy
KGV4ZWMsIGltcGwoKSwgdG9JbnQzMkFycmF5KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0phdmFTY3JpcHRDYWxsRnJhbWVDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNKYXZhU2NyaXB0Q2FsbEZy
YW1lQ3VzdG9tLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SmF2YVNjcmlwdENhbGxGcmFtZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEwICsz
NSwxMCBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpT
VmFsdWUgSlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTSmF2YVNjcmlwdENhbGxGcmFtZTo6ZXZhbHVh
dGUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgZXhjZXB0aW9uOwotICAgIEpTVmFs
dWUgcmVzdWx0ID0gaW1wbCgpLT5ldmFsdWF0ZShhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpLCBl
eGNlcHRpb24pOworICAgIEpTVmFsdWUgcmVzdWx0ID0gaW1wbCgpLT5ldmFsdWF0ZShleGVjLT5h
cmd1bWVudCgwKS50b1N0cmluZyhleGVjKSwgZXhjZXB0aW9uKTsKIAogICAgIGlmIChleGNlcHRp
b24pCiAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihleGNlcHRpb24pOwpAQCAtODUsMTQgKzg1
LDE0IEBAIEpTVmFsdWUgSlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpzY29wZUNoYWkKICAgICByZXR1
cm4gY29uc3RydWN0QXJyYXkoZXhlYywgbGlzdCk7CiB9CiAKLUpTVmFsdWUgSlNKYXZhU2NyaXB0
Q2FsbEZyYW1lOjpzY29wZVR5cGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQorSlNWYWx1ZSBKU0phdmFTY3JpcHRDYWxsRnJhbWU6OnNjb3BlVHlwZShFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgaWYgKCFpbXBsKCktPnNjb3BlQ2hhaW4oKSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAKLSAgICBpZiAoIWFyZ3MuYXQoMCkuaXNJbnQzMigpKQorICAgIGlmICgh
ZXhlYy0+YXJndW1lbnQoMCkuaXNJbnQzMigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKLSAgICBpbnQgaW5kZXggPSBhcmdzLmF0KDApLmFzSW50MzIoKTsKKyAgICBpbnQgaW5kZXgg
PSBleGVjLT5hcmd1bWVudCgwKS5hc0ludDMyKCk7CiAKICAgICBjb25zdCBTY29wZUNoYWluTm9k
ZSogc2NvcGVDaGFpbiA9IGltcGwoKS0+c2NvcGVDaGFpbigpOwogICAgIFNjb3BlQ2hhaW5JdGVy
YXRvciBlbmQgPSBzY29wZUNoYWluLT5lbmQoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMv
SlNMb2NhdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0xvY2F0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDEsMTMgKzMwMSwx
MyBAQCB2b2lkIEpTTG9jYXRpb246OnNldEhhc2goRXhlY1N0YXRlKiBleGVjCiAgICAgbmF2aWdh
dGVJZkFsbG93ZWQoZXhlYywgZnJhbWUsIHVybCwgIWZyYW1lLT5zY3JpcHQoKS0+YW55UGFnZUlz
UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCksIGZhbHNlKTsKIH0KIAotSlNWYWx1ZSBKU0xvY2F0aW9u
OjpyZXBsYWNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUg
SlNMb2NhdGlvbjo6cmVwbGFjZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgRnJhbWUqIGZyYW1l
ID0gaW1wbCgpLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogCi0gICAgS1VSTCB1cmwgPSBjb21wbGV0ZVVSTChleGVjLCB1c3RyaW5nVG9T
dHJpbmcoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSkpOworICAgIEtVUkwgdXJsID0gY29tcGxl
dGVVUkwoZXhlYywgdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4
ZWMpKSk7CiAgICAgaWYgKHVybC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAKQEAgLTMxOCw3ICszMTgsNyBAQCBKU1ZhbHVlIEpTTG9jYXRpb246OnJlcGxhY2UoRXhl
Y1N0YXRlKiBlCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNMb2Nh
dGlvbjo6cmVsb2FkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlIEpT
TG9jYXRpb246OnJlbG9hZChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0g
aW1wbCgpLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUgfHwgIWFsbG93c0FjY2Vzc0Zyb21GcmFt
ZShleGVjLCBmcmFtZSkpCkBAIC0zMjksMTMgKzMyOSwxMyBAQCBKU1ZhbHVlIEpTTG9jYXRpb246
OnJlbG9hZChFeGVjU3RhdGUqIGV4CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpT
VmFsdWUgSlNMb2NhdGlvbjo6YXNzaWduKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYg
YXJncykKK0pTVmFsdWUgSlNMb2NhdGlvbjo6YXNzaWduKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBGcmFtZSogZnJhbWUgPSBpbXBsKCktPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBLVVJMIHVybCA9IGNvbXBsZXRlVVJMKGV4
ZWMsIHVzdHJpbmdUb1N0cmluZyhhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgS1VS
TCB1cmwgPSBjb21wbGV0ZVVSTChleGVjLCB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQo
MCkudG9TdHJpbmcoZXhlYykpKTsKICAgICBpZiAodXJsLmlzTnVsbCgpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIApAQCAtMzQ3LDcgKzM0Nyw3IEBAIEpTVmFsdWUgSlNMb2NhdGlv
bjo6YXNzaWduKEV4ZWNTdGF0ZSogZXgKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAot
SlNWYWx1ZSBKU0xvY2F0aW9uOjp0b1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmKQorSlNWYWx1ZSBKU0xvY2F0aW9uOjp0b1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgRnJhbWUqIGZyYW1lID0gaW1wbCgpLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUgfHwgIWFs
bG93c0FjY2Vzc0Zyb21GcmFtZShleGVjLCBmcmFtZSkpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTQsMTkgKzU0LDE5IEBAIEpTVmFsdWUgSlNNZXNzYWdlRXZlbnQ6OnBvcnRzKEV4ZWNTdGF0
ZSoKICAgICByZXR1cm4gY29uc3RydWN0QXJyYXkoZXhlYywgbGlzdCk7CiB9CiAKLUpTQzo6SlNW
YWx1ZSBKU01lc3NhZ2VFdmVudDo6aW5pdE1lc3NhZ2VFdmVudChKU0M6OkV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzKQorSlNDOjpKU1ZhbHVlIEpTTWVzc2FnZUV2ZW50
Ojppbml0TWVzc2FnZUV2ZW50KEpTQzo6RXhlY1N0YXRlKiBleGVjKQogewotICAgIGNvbnN0IFVT
dHJpbmcmIHR5cGVBcmcgPSBhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpOwotICAgIGJvb2wgY2Fu
QnViYmxlQXJnID0gYXJncy5hdCgxKS50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgYm9vbCBjYW5jZWxh
YmxlQXJnID0gYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgUGFzc1JlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IGRhdGFBcmcgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0
ZShleGVjLCBhcmdzLmF0KDMpKTsKLSAgICBjb25zdCBVU3RyaW5nJiBvcmlnaW5BcmcgPSBhcmdz
LmF0KDQpLnRvU3RyaW5nKGV4ZWMpOwotICAgIGNvbnN0IFVTdHJpbmcmIGxhc3RFdmVudElkQXJn
ID0gYXJncy5hdCg1KS50b1N0cmluZyhleGVjKTsKLSAgICBET01XaW5kb3cqIHNvdXJjZUFyZyA9
IHRvRE9NV2luZG93KGFyZ3MuYXQoNikpOworICAgIGNvbnN0IFVTdHJpbmcmIHR5cGVBcmcgPSBl
eGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKTsKKyAgICBib29sIGNhbkJ1YmJsZUFyZyA9
IGV4ZWMtPmFyZ3VtZW50KDEpLnRvQm9vbGVhbihleGVjKTsKKyAgICBib29sIGNhbmNlbGFibGVB
cmcgPSBleGVjLT5hcmd1bWVudCgyKS50b0Jvb2xlYW4oZXhlYyk7CisgICAgUGFzc1JlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGFBcmcgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNy
ZWF0ZShleGVjLCBleGVjLT5hcmd1bWVudCgzKSk7CisgICAgY29uc3QgVVN0cmluZyYgb3JpZ2lu
QXJnID0gZXhlYy0+YXJndW1lbnQoNCkudG9TdHJpbmcoZXhlYyk7CisgICAgY29uc3QgVVN0cmlu
ZyYgbGFzdEV2ZW50SWRBcmcgPSBleGVjLT5hcmd1bWVudCg1KS50b1N0cmluZyhleGVjKTsKKyAg
ICBET01XaW5kb3cqIHNvdXJjZUFyZyA9IHRvRE9NV2luZG93KGV4ZWMtPmFyZ3VtZW50KDYpKTsK
ICAgICBPd25QdHI8TWVzc2FnZVBvcnRBcnJheT4gbWVzc2FnZVBvcnRzOwotICAgIGlmICghYXJn
cy5hdCg3KS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CisgICAgaWYgKCFleGVjLT5hcmd1bWVudCg3
KS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CiAgICAgICAgIG1lc3NhZ2VQb3J0cyA9IG5ldyBNZXNz
YWdlUG9ydEFycmF5KCk7Ci0gICAgICAgIGZpbGxNZXNzYWdlUG9ydEFycmF5KGV4ZWMsIGFyZ3Mu
YXQoNyksICptZXNzYWdlUG9ydHMpOworICAgICAgICBmaWxsTWVzc2FnZVBvcnRBcnJheShleGVj
LCBleGVjLT5hcmd1bWVudCg3KSwgKm1lc3NhZ2VQb3J0cyk7CiAgICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0K
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAkocmV2
aXNpb24gNjAzNDEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw5ICs1Miw5IEBAIHZvaWQgSlNNZXNzYWdlUG9ydDo6
bWFya0NoaWxkcmVuKE1hcmtTdGEKICAgICBtX2ltcGwtPm1hcmtKU0V2ZW50TGlzdGVuZXJzKG1h
cmtTdGFjayk7CiB9CiAKLUpTQzo6SlNWYWx1ZSBKU01lc3NhZ2VQb3J0Ojpwb3N0TWVzc2FnZShK
U0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzKQorSlNDOjpKU1Zh
bHVlIEpTTWVzc2FnZVBvcnQ6OnBvc3RNZXNzYWdlKEpTQzo6RXhlY1N0YXRlKiBleGVjKQogewot
ICAgIHJldHVybiBoYW5kbGVQb3N0TWVzc2FnZShleGVjLCBhcmdzLCBpbXBsKCkpOworICAgIHJl
dHVybiBoYW5kbGVQb3N0TWVzc2FnZShleGVjLCBpbXBsKCkpOwogfQogCiB2b2lkIGZpbGxNZXNz
YWdlUG9ydEFycmF5KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUsIE1l
c3NhZ2VQb3J0QXJyYXkmIHBvcnRBcnJheSkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNN
ZXNzYWdlUG9ydEN1c3RvbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNN
ZXNzYWdlUG9ydEN1c3RvbS5oCShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNNZXNzYWdlUG9ydEN1c3RvbS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NywxMSArNDcsMTEg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNvbnZl
cnQgZnJvbSBKUyBwb3N0TWVzc2FnZSBhcmd1bWVudHMgdG8gV2ViQ29yZSBwb3N0TWVzc2FnZSBh
cmd1bWVudHMuCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gICAgaW5saW5lIEpTQzo6SlNW
YWx1ZSBoYW5kbGVQb3N0TWVzc2FnZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpB
cmdMaXN0JiBhcmdzLCBUKiBpbXBsKQorICAgIGlubGluZSBKU0M6OkpTVmFsdWUgaGFuZGxlUG9z
dE1lc3NhZ2UoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFQqIGltcGwpCiAgICAgewotICAgICAgICBQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbWVzc2FnZSA9IFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsIGFyZ3MuYXQoMCkpOworICAgICAgICBQYXNzUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbWVzc2FnZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3Jl
YXRlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICAgICAgTWVzc2FnZVBvcnRBcnJheSBw
b3J0QXJyYXk7Ci0gICAgICAgIGZpbGxNZXNzYWdlUG9ydEFycmF5KGV4ZWMsIGFyZ3MuYXQoMSks
IHBvcnRBcnJheSk7CisgICAgICAgIGZpbGxNZXNzYWdlUG9ydEFycmF5KGV4ZWMsIGV4ZWMtPmFy
Z3VtZW50KDEpLCBwb3J0QXJyYXkpOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CiAgICAgICAgICAgICByZXR1cm4gSlNDOjpqc1VuZGVmaW5lZCgpOwogCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsNDcgKzY4LDQ3
IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1
ZSBKU05vZGU6Omluc2VydEJlZm9yZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCitKU1ZhbHVlIEpTTm9kZTo6aW5zZXJ0QmVmb3JlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBOb2RlKiBpbXAgPSBzdGF0aWNfY2FzdDxOb2RlKj4oaW1wbCgpKTsKICAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKLSAgICBib29sIG9rID0gaW1wLT5pbnNlcnRCZWZvcmUodG9Ob2RlKGFyZ3Mu
YXQoMCkpLCB0b05vZGUoYXJncy5hdCgxKSksIGVjLCB0cnVlKTsKKyAgICBib29sIG9rID0gaW1w
LT5pbnNlcnRCZWZvcmUodG9Ob2RlKGV4ZWMtPmFyZ3VtZW50KDApKSwgdG9Ob2RlKGV4ZWMtPmFy
Z3VtZW50KDEpKSwgZWMsIHRydWUpOwogICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAg
ICAgaWYgKG9rKQotICAgICAgICByZXR1cm4gYXJncy5hdCgwKTsKKyAgICAgICAgcmV0dXJuIGV4
ZWMtPmFyZ3VtZW50KDApOwogICAgIHJldHVybiBqc051bGwoKTsKIH0KIAotSlNWYWx1ZSBKU05v
ZGU6OnJlcGxhY2VDaGlsZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitK
U1ZhbHVlIEpTTm9kZTo6cmVwbGFjZUNoaWxkKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBOb2Rl
KiBpbXAgPSBzdGF0aWNfY2FzdDxOb2RlKj4oaW1wbCgpKTsKICAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKLSAgICBib29sIG9rID0gaW1wLT5yZXBsYWNlQ2hpbGQodG9Ob2RlKGFyZ3MuYXQoMCkp
LCB0b05vZGUoYXJncy5hdCgxKSksIGVjLCB0cnVlKTsKKyAgICBib29sIG9rID0gaW1wLT5yZXBs
YWNlQ2hpbGQodG9Ob2RlKGV4ZWMtPmFyZ3VtZW50KDApKSwgdG9Ob2RlKGV4ZWMtPmFyZ3VtZW50
KDEpKSwgZWMsIHRydWUpOwogICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAgICAgaWYg
KG9rKQotICAgICAgICByZXR1cm4gYXJncy5hdCgxKTsKKyAgICAgICAgcmV0dXJuIGV4ZWMtPmFy
Z3VtZW50KDEpOwogICAgIHJldHVybiBqc051bGwoKTsKIH0KIAotSlNWYWx1ZSBKU05vZGU6OnJl
bW92ZUNoaWxkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUg
SlNOb2RlOjpyZW1vdmVDaGlsZChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgTm9kZSogaW1wID0g
c3RhdGljX2Nhc3Q8Tm9kZSo+KGltcGwoKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0g
ICAgYm9vbCBvayA9IGltcC0+cmVtb3ZlQ2hpbGQodG9Ob2RlKGFyZ3MuYXQoMCkpLCBlYyk7Cisg
ICAgYm9vbCBvayA9IGltcC0+cmVtb3ZlQ2hpbGQodG9Ob2RlKGV4ZWMtPmFyZ3VtZW50KDApKSwg
ZWMpOwogICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAgICAgaWYgKG9rKQotICAgICAg
ICByZXR1cm4gYXJncy5hdCgwKTsKKyAgICAgICAgcmV0dXJuIGV4ZWMtPmFyZ3VtZW50KDApOwog
ICAgIHJldHVybiBqc051bGwoKTsKIH0KIAotSlNWYWx1ZSBKU05vZGU6OmFwcGVuZENoaWxkKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNOb2RlOjphcHBl
bmRDaGlsZChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgTm9kZSogaW1wID0gc3RhdGljX2Nhc3Q8
Tm9kZSo+KGltcGwoKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgYm9vbCBvayA9
IGltcC0+YXBwZW5kQ2hpbGQodG9Ob2RlKGFyZ3MuYXQoMCkpLCBlYywgdHJ1ZSk7CisgICAgYm9v
bCBvayA9IGltcC0+YXBwZW5kQ2hpbGQodG9Ob2RlKGV4ZWMtPmFyZ3VtZW50KDApKSwgZWMsIHRy
dWUpOwogICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAgICAgaWYgKG9rKQotICAgICAg
ICByZXR1cm4gYXJncy5hdCgwKTsKKyAgICAgICAgcmV0dXJuIGV4ZWMtPmFyZ3VtZW50KDApOwog
ICAgIHJldHVybiBqc051bGwoKTsKIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05v
ZGVMaXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9k
ZUxpc3RDdXN0b20uY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNOb2RlTGlzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDEzICszNiwxMyBAQCB1
c2luZyBuYW1lc3BhY2UgSlNDOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBOZWVkIHRvIHN1
cHBvcnQgY2FsbCBzbyB0aGF0IGxpc3QoMCkgd29ya3MuCi1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGNhbGxOb2RlTGlzdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBmdW5jdGlvbiwg
SlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY2FsbE5vZGVMaXN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBib29sIG9rOwotICAgIHVu
c2lnbmVkIGluZGV4ID0gYXJncy5hdCgwKS50b1N0cmluZyhleGVjKS50b1VJbnQzMigmb2spOwor
ICAgIHVuc2lnbmVkIGluZGV4ID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykudG9V
SW50MzIoJm9rKTsKICAgICBpZiAoIW9rKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
LSAgICByZXR1cm4gdG9KUyhleGVjLCBzdGF0aWNfY2FzdDxKU05vZGVMaXN0Kj4oZnVuY3Rpb24p
LT5pbXBsKCktPml0ZW0oaW5kZXgpKTsKKyAgICByZXR1cm4gdG9KUyhleGVjLCBzdGF0aWNfY2Fz
dDxKU05vZGVMaXN0Kj4oZXhlYy0+Y2FsbGVlKCkpLT5pbXBsKCktPml0ZW0oaW5kZXgpKTsKIH0K
IAogQ2FsbFR5cGUgSlNOb2RlTGlzdDo6Z2V0Q2FsbERhdGEoQ2FsbERhdGEmIGNhbGxEYXRhKQpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNQbHVnaW5FbGVtZW50RnVuY3Rpb25z
LmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luRWxl
bWVudEZ1bmN0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSwxMSArMTA1LDExIEBAIGJv
b2wgcnVudGltZU9iamVjdEN1c3RvbVB1dChFeGVjU3RhdGUqIGUKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsUGx1Z2luKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9uLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQor
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsUGx1Z2luKEV4ZWNTdGF0ZSogZXhlYykK
IHsKLSAgICBJbnN0YW5jZSogaW5zdGFuY2UgPSBwbHVnaW5JbnN0YW5jZShzdGF0aWNfY2FzdDxK
U0hUTUxFbGVtZW50Kj4oZnVuY3Rpb24pLT5pbXBsKCkpOworICAgIEluc3RhbmNlKiBpbnN0YW5j
ZSA9IHBsdWdpbkluc3RhbmNlKHN0YXRpY19jYXN0PEpTSFRNTEVsZW1lbnQqPihleGVjLT5jYWxs
ZWUoKSktPmltcGwoKSk7CiAgICAgaW5zdGFuY2UtPmJlZ2luKCk7Ci0gICAgSlNWYWx1ZSByZXN1
bHQgPSBpbnN0YW5jZS0+aW52b2tlRGVmYXVsdE1ldGhvZChleGVjLCBhcmdzKTsKKyAgICBKU1Zh
bHVlIHJlc3VsdCA9IGluc3RhbmNlLT5pbnZva2VEZWZhdWx0TWV0aG9kKGV4ZWMpOwogICAgIGlu
c3RhbmNlLT5lbmQoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1NRTFJlc3VsdFNldFJvd0xpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNTUUxSZXN1bHRTZXRSb3dMaXN0Q3VzdG9tLmNwcAkocmV2aXNp
b24gNjAzNDEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FMUmVzdWx0U2V0Um93TGlzdEN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDEwICszOSwxMCBAQCB1c2luZyBuYW1lc3Bh
Y2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUgSlNTUUxSZXN1bHRTZXRS
b3dMaXN0OjppdGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFs
dWUgSlNTUUxSZXN1bHRTZXRSb3dMaXN0OjppdGVtKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBi
b29sIGluZGV4T2s7Ci0gICAgaW50IGluZGV4ID0gYXJncy5hdCgwKS50b0ludDMyKGV4ZWMsIGlu
ZGV4T2spOworICAgIGludCBpbmRleCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYywg
aW5kZXhPayk7CiAgICAgaWYgKCFpbmRleE9rKSB7CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihl
eGVjLCBUWVBFX01JU01BVENIX0VSUik7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FMVHJhbnNhY3Rpb25DdXN0b20uY3Bw
CShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlv
bkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDIxICs0MiwyMSBAQCB1c2luZyBuYW1l
c3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUgSlNTUUxUcmFuc2Fj
dGlvbjo6ZXhlY3V0ZVNxbChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitK
U1ZhbHVlIEpTU1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTcWwoRXhlY1N0YXRlKiBleGVjKQogewot
ICAgIGlmIChhcmdzLmlzRW1wdHkoKSkgeworICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgp
KSB7CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBTWU5UQVhfRVJSKTsKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAgU3RyaW5nIHNxbFN0YXRlbWVudCA9
IHVzdHJpbmdUb1N0cmluZyhhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBTdHJpbmcg
c3FsU3RhdGVtZW50ID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5n
KGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogCiAgICAgLy8gTm93IGFzc2VtYmxlIHRoZSBsaXN0IG9mIFNRTCBhcmd1
bWVudHMKICAgICBWZWN0b3I8U1FMVmFsdWU+IHNxbFZhbHVlczsKLSAgICBpZiAoIWFyZ3MuYXQo
MSkuaXNVbmRlZmluZWRPck51bGwoKSkgewotICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXJn
cy5hdCgxKS5nZXRPYmplY3QoKTsKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDEpLmlzVW5kZWZp
bmVkT3JOdWxsKCkpIHsKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGV4ZWMtPmFyZ3VtZW50
KDEpLmdldE9iamVjdCgpOwogICAgICAgICBpZiAoIW9iamVjdCkgewogICAgICAgICAgICAgc2V0
RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKICAgICAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwpAQCAtODgsOCArODgsOCBAQCBKU1ZhbHVlIEpTU1FMVHJhbnNhY3Rp
b246OmV4ZWN1dGVTcWwoRXhlCiAgICAgfQogCiAgICAgUmVmUHRyPFNRTFN0YXRlbWVudENhbGxi
YWNrPiBjYWxsYmFjazsKLSAgICBpZiAoIWFyZ3MuYXQoMikuaXNVbmRlZmluZWRPck51bGwoKSkg
ewotICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXJncy5hdCgyKS5nZXRPYmplY3QoKTsKKyAg
ICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDIpLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKKyAgICAgICAg
SlNPYmplY3QqIG9iamVjdCA9IGV4ZWMtPmFyZ3VtZW50KDIpLmdldE9iamVjdCgpOwogICAgICAg
ICBpZiAoIW9iamVjdCkgewogICAgICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVf
TUlTTUFUQ0hfRVJSKTsKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpAQCAtOTks
OCArOTksOCBAQCBKU1ZhbHVlIEpTU1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTcWwoRXhlCiAgICAg
fQogCiAgICAgUmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2s7
Ci0gICAgaWYgKCFhcmdzLmF0KDMpLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKLSAgICAgICAgSlNP
YmplY3QqIG9iamVjdCA9IGFyZ3MuYXQoMykuZ2V0T2JqZWN0KCk7CisgICAgaWYgKCFleGVjLT5h
cmd1bWVudCgzKS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CisgICAgICAgIEpTT2JqZWN0KiBvYmpl
Y3QgPSBleGVjLT5hcmd1bWVudCgzKS5nZXRPYmplY3QoKTsKICAgICAgICAgaWYgKCFvYmplY3Qp
IHsKICAgICAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7
CiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNTUUxUcmFuc2FjdGlvblN5bmNDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlvblN5bmNDdXN0b20uY3BwCShyZXZpc2lvbiA2
MDM0MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlvblN5bmNDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwyMSArNDEsMjEgQEAgdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlIEpTU1FMVHJhbnNhY3Rpb25TeW5j
OjpleGVjdXRlU3FsKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFs
dWUgSlNTUUxUcmFuc2FjdGlvblN5bmM6OmV4ZWN1dGVTcWwoRXhlY1N0YXRlKiBleGVjKQogewot
ICAgIGlmIChhcmdzLmlzRW1wdHkoKSkgeworICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgp
KSB7CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBTWU5UQVhfRVJSKTsKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAgU3RyaW5nIHNxbFN0YXRlbWVudCA9
IHVzdHJpbmdUb1N0cmluZyhhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBTdHJpbmcg
c3FsU3RhdGVtZW50ID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5n
KGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogCiAgICAgLy8gTm93IGFzc2VtYmxlIHRoZSBsaXN0IG9mIFNRTCBhcmd1
bWVudHMKICAgICBWZWN0b3I8U1FMVmFsdWU+IHNxbFZhbHVlczsKLSAgICBpZiAoIWFyZ3MuYXQo
MSkuaXNVbmRlZmluZWRPck51bGwoKSkgewotICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXJn
cy5hdCgxKS5nZXRPYmplY3QoKTsKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDEpLmlzVW5kZWZp
bmVkT3JOdWxsKCkpIHsKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGV4ZWMtPmFyZ3VtZW50
KDEpLmdldE9iamVjdCgpOwogICAgICAgICBpZiAoIW9iamVjdCkgewogICAgICAgICAgICAgc2V0
RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKICAgICAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0xlbmd0aEN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0xlbmd0aEN1
c3RvbS5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0xl
bmd0aEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEzICszNSwxMyBAQCBKU1ZhbHVl
IEpTU1ZHTGVuZ3RoOjp2YWx1ZShFeGVjU3RhdGUqIGV4CiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4
ZWMsIHBvZEltcC52YWx1ZShjb250ZXh0KSk7CiB9CiAKLUpTVmFsdWUgSlNTVkdMZW5ndGg6OmNv
bnZlcnRUb1NwZWNpZmllZFVuaXRzKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJn
cykKK0pTVmFsdWUgSlNTVkdMZW5ndGg6OmNvbnZlcnRUb1NwZWNpZmllZFVuaXRzKEV4ZWNTdGF0
ZSogZXhlYykKIHsKICAgICBKU1NWR1BPRFR5cGVXcmFwcGVyPFNWR0xlbmd0aD4qIGltcCA9IGlt
cGwoKTsKICAgICBTVkdFbGVtZW50KiBjb250ZXh0ID0gSlNTVkdDb250ZXh0Q2FjaGU6OnN2Z0Nv
bnRleHRGb3JET01PYmplY3QodGhpcyk7CiAKICAgICBTVkdMZW5ndGggcG9kSW1wKCppbXApOwot
ICAgIHBvZEltcC5jb252ZXJ0VG9TcGVjaWZpZWRVbml0cyhhcmdzLmF0KDApLnRvSW50MzIoZXhl
YyksIGNvbnRleHQpOworICAgIHBvZEltcC5jb252ZXJ0VG9TcGVjaWZpZWRVbml0cyhleGVjLT5h
cmd1bWVudCgwKS50b0ludDMyKGV4ZWMpLCBjb250ZXh0KTsKIAogICAgIGltcC0+Y29tbWl0Q2hh
bmdlKHBvZEltcCwgdGhpcyk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTU1ZHTWF0cml4Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTU1ZHTWF0cml4Q3VzdG9tLmNwcAkocmV2aXNpb24gNjAzNDEpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHTWF0cml4Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzEsMTUgKzMxLDE1IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotSlNWYWx1ZSBKU1NWR01hdHJpeDo6bXVsdGlwbHkoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU1NWR01hdHJpeDo6bXVsdGlwbHkoRXhl
Y1N0YXRlKiBleGVjKQogewotICAgIGlmIChhcmdzLnNpemUoKSA8IDEpCisgICAgaWYgKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5
bnRheEVycm9yLCAiTm90IGVub3VnaCBhcmd1bWVudHMiKTsKIAotICAgIGlmICghYXJncy5hdCgw
KS5pbmhlcml0cygmSlNTVkdNYXRyaXg6OnNfaW5mbykpCisgICAgaWYgKCFleGVjLT5hcmd1bWVu
dCgwKS5pbmhlcml0cygmSlNTVkdNYXRyaXg6OnNfaW5mbykpCiAgICAgICAgIHJldHVybiB0aHJv
d0Vycm9yKGV4ZWMsIFR5cGVFcnJvciwgInNlY29uZE1hdHJpeCBhcmd1bWVudCB3YXMgbm90IGEg
U1ZHTWF0cml4Iik7CiAKLSAgICBKU1NWR01hdHJpeCogbWF0cml4T2JqID0gc3RhdGljX2Nhc3Q8
SlNTVkdNYXRyaXgqPihhc09iamVjdChhcmdzLmF0KDApKSk7CisgICAgSlNTVkdNYXRyaXgqIG1h
dHJpeE9iaiA9IHN0YXRpY19jYXN0PEpTU1ZHTWF0cml4Kj4oYXNPYmplY3QoZXhlYy0+YXJndW1l
bnQoMCkpKTsKIAogICAgIEFmZmluZVRyYW5zZm9ybSBtMSgqaW1wbCgpKTsKICAgICBBZmZpbmVU
cmFuc2Zvcm0gbTIoKihtYXRyaXhPYmotPmltcGwoKSkpOwpAQCAtNDgsNyArNDgsNyBAQCBKU1Zh
bHVlIEpTU1ZHTWF0cml4OjptdWx0aXBseShFeGVjU3RhdGUqCiAgICAgcmV0dXJuIHRvSlMoZXhl
YywgZ2xvYmFsT2JqZWN0KCksIEpTU1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI8QWZmaW5lVHJhbnNm
b3JtPjo6Y3JlYXRlKG0xLm11bHRMZWZ0KG0yKSkuZ2V0KCksIGNvbnRleHQpOwogfQogCi1KU1Zh
bHVlIEpTU1ZHTWF0cml4OjppbnZlcnNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYp
CitKU1ZhbHVlIEpTU1ZHTWF0cml4OjppbnZlcnNlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBB
ZmZpbmVUcmFuc2Zvcm0gaW1wKCppbXBsKCkpOwogCkBAIC02MSwxMiArNjEsMTIgQEAgSlNWYWx1
ZSBKU1NWR01hdHJpeDo6aW52ZXJzZShFeGVjU3RhdGUqIAogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLUpTVmFsdWUgSlNTVkdNYXRyaXg6OnJvdGF0ZUZyb21WZWN0b3IoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU1NWR01hdHJpeDo6cm90YXRlRnJvbVZl
Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgQWZmaW5lVHJhbnNmb3JtIGltcCgqaW1wbCgp
KTsKICAKLSAgICBmbG9hdCB4ID0gYXJncy5hdCgwKS50b0Zsb2F0KGV4ZWMpOwotICAgIGZsb2F0
IHkgPSBhcmdzLmF0KDEpLnRvRmxvYXQoZXhlYyk7CisgICAgZmxvYXQgeCA9IGV4ZWMtPmFyZ3Vt
ZW50KDApLnRvRmxvYXQoZXhlYyk7CisgICAgZmxvYXQgeSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRv
RmxvYXQoZXhlYyk7CiAKICAgICBTVkdFbGVtZW50KiBjb250ZXh0ID0gSlNTVkdDb250ZXh0Q2Fj
aGU6OnN2Z0NvbnRleHRGb3JET01PYmplY3QodGhpcyk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSB0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBKU1NWR1N0YXRpY1BPRFR5cGVXcmFwcGVyPEFmZmlu
ZVRyYW5zZm9ybT46OmNyZWF0ZShpbXAucm90YXRlRnJvbVZlY3Rvcih4LCB5KSkuZ2V0KCksIGNv
bnRleHQpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1BPRExpc3RDdXN0b20uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHUE9ETGlzdEN1c3RvbS5oCShy
ZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdQT0RMaXN0Q3VzdG9t
LmgJKHdvcmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDcgQEAgc3RhdGljIEpTQzo6SlNWYWx1ZSBm
aW5pc2hTZXR0ZXJSZWFkT25seQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBKU1BPRExpc3RUeXBl
LCB0eXBlbmFtZSBQT0RUeXBlPgotc3RhdGljIEpTQzo6SlNWYWx1ZSBjbGVhcihKU1BPRExpc3RU
eXBlKiB3cmFwcGVyLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpBcmdMaXN0JiwK
K3N0YXRpYyBKU0M6OkpTVmFsdWUgY2xlYXIoSlNQT0RMaXN0VHlwZSogd3JhcHBlciwgSlNDOjpF
eGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIEpTU1ZH
UE9ETGlzdFRyYWl0czxQT0RUeXBlPjo6Q29udmVyc2lvbkNhbGxiYWNrKQogewogICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOwpAQCAtMTA1LDIxICsxMDUsMjEgQEAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjbGVhcihKU1BPRExpc3RUeXBlKgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBKU1BPRExpc3RU
eXBlLCB0eXBlbmFtZSBQT0RUeXBlPgotc3RhdGljIEpTQzo6SlNWYWx1ZSBpbml0aWFsaXplKEpT
UE9ETGlzdFR5cGUqIHdyYXBwZXIsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFy
Z0xpc3QmIGFyZ3MsCitzdGF0aWMgSlNDOjpKU1ZhbHVlIGluaXRpYWxpemUoSlNQT0RMaXN0VHlw
ZSogd3JhcHBlciwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdHlwZW5hbWUgSlNTVkdQT0RMaXN0VHJhaXRzPFBPRFR5cGU+OjpDb252ZXJzaW9u
Q2FsbGJhY2sgY29udmVyc2lvbikKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICB0
eXBlbmFtZSBKU1NWR1BPRExpc3RUcmFpdHM8UE9EVHlwZT46OlBPRExpc3QqIGxpc3RJbXAgPSB3
cmFwcGVyLT5pbXBsKCk7CiAgICAgcmV0dXJuIGZpbmlzaFNldHRlcjxKU1BPRExpc3RUeXBlLCBQ
T0RUeXBlPihleGVjLCBlYywgd3JhcHBlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxpc3RJbXAtPmluaXRpYWxpemUoSlNTVkdQT0RMaXN0VHJhaXRz
PFBPRFR5cGU+OjpQT0RMaXN0SXRlbTo6Y29weShjb252ZXJzaW9uKGFyZ3MuYXQoMCkpKSwgZWMp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RJ
bXAtPmluaXRpYWxpemUoSlNTVkdQT0RMaXN0VHJhaXRzPFBPRFR5cGU+OjpQT0RMaXN0SXRlbTo6
Y29weShjb252ZXJzaW9uKGV4ZWMtPmFyZ3VtZW50KDApKSksIGVjKSk7CiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIEpTUE9ETGlzdFR5cGUsIHR5cGVuYW1lIFBPRFR5cGU+Ci1zdGF0aWMgSlNDOjpK
U1ZhbHVlIGdldEl0ZW0oSlNQT0RMaXN0VHlwZSogd3JhcHBlciwgSlNDOjpFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncywKK3N0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0SXRl
bShKU1BPRExpc3RUeXBlKiB3cmFwcGVyLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBKU1NWR1BPRExpc3RUcmFpdHM8UE9EVHlwZT46
OkNvbnZlcnNpb25DYWxsYmFjaykKIHsKICAgICBib29sIGluZGV4T2sgPSBmYWxzZTsKLSAgICB1
bnNpZ25lZCBpbmRleCA9IGFyZ3MuYXQoMCkudG9VSW50MzIoZXhlYywgaW5kZXhPayk7CisgICAg
dW5zaWduZWQgaW5kZXggPSBleGVjLT5hcmd1bWVudCgwKS50b1VJbnQzMihleGVjLCBpbmRleE9r
KTsKICAgICBpZiAoIWluZGV4T2spIHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZ
UEVfTUlTTUFUQ0hfRVJSKTsKICAgICAgICAgcmV0dXJuIEpTQzo6anNVbmRlZmluZWQoKTsKQEAg
LTEzMiwxMSArMTMyLDExIEBAIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0SXRlbShKU1BPRExpc3RU
eXAKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgSlNQT0RMaXN0VHlwZSwgdHlwZW5hbWUgUE9EVHlw
ZT4KLXN0YXRpYyBKU0M6OkpTVmFsdWUgaW5zZXJ0SXRlbUJlZm9yZShKU1BPRExpc3RUeXBlKiB3
cmFwcGVyLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzLAor
c3RhdGljIEpTQzo6SlNWYWx1ZSBpbnNlcnRJdGVtQmVmb3JlKEpTUE9ETGlzdFR5cGUqIHdyYXBw
ZXIsIEpTQzo6RXhlY1N0YXRlKiBleGVjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHR5cGVuYW1lIEpTU1ZHUE9ETGlzdFRyYWl0czxQT0RUeXBlPjo6Q29udmVyc2lvbkNh
bGxiYWNrIGNvbnZlcnNpb24pCiB7CiAgICAgYm9vbCBpbmRleE9rID0gZmFsc2U7Ci0gICAgdW5z
aWduZWQgaW5kZXggPSBhcmdzLmF0KDEpLnRvVUludDMyKGV4ZWMsIGluZGV4T2spOworICAgIHVu
c2lnbmVkIGluZGV4ID0gZXhlYy0+YXJndW1lbnQoMSkudG9VSW50MzIoZXhlYywgaW5kZXhPayk7
CiAgICAgaWYgKCFpbmRleE9rKSB7CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBF
X01JU01BVENIX0VSUik7CiAgICAgICAgIHJldHVybiBKU0M6OmpzVW5kZWZpbmVkKCk7CkBAIC0x
NDUsMTUgKzE0NSwxNSBAQCBzdGF0aWMgSlNDOjpKU1ZhbHVlIGluc2VydEl0ZW1CZWZvcmUoSlNQ
CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgdHlwZW5hbWUgSlNTVkdQT0RMaXN0VHJh
aXRzPFBPRFR5cGU+OjpQT0RMaXN0KiBsaXN0SW1wID0gd3JhcHBlci0+aW1wbCgpOwogICAgIHJl
dHVybiBmaW5pc2hTZXR0ZXI8SlNQT0RMaXN0VHlwZSwgUE9EVHlwZT4oZXhlYywgZWMsIHdyYXBw
ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0
SW1wLT5pbnNlcnRJdGVtQmVmb3JlKEpTU1ZHUE9ETGlzdFRyYWl0czxQT0RUeXBlPjo6UE9ETGlz
dEl0ZW06OmNvcHkoY29udmVyc2lvbihhcmdzLmF0KDApKSksIGluZGV4LCBlYykpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdEltcC0+aW5zZXJ0
SXRlbUJlZm9yZShKU1NWR1BPRExpc3RUcmFpdHM8UE9EVHlwZT46OlBPRExpc3RJdGVtOjpjb3B5
KGNvbnZlcnNpb24oZXhlYy0+YXJndW1lbnQoMCkpKSwgaW5kZXgsIGVjKSk7CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEpTUE9ETGlzdFR5cGUsIHR5cGVuYW1lIFBPRFR5cGU+Ci1zdGF0aWMgSlND
OjpKU1ZhbHVlIHJlcGxhY2VJdGVtKEpTUE9ETGlzdFR5cGUqIHdyYXBwZXIsIEpTQzo6RXhlY1N0
YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MsCitzdGF0aWMgSlNDOjpKU1ZhbHVl
IHJlcGxhY2VJdGVtKEpTUE9ETGlzdFR5cGUqIHdyYXBwZXIsIEpTQzo6RXhlY1N0YXRlKiBleGVj
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBKU1NWR1BPRExpc3RU
cmFpdHM8UE9EVHlwZT46OkNvbnZlcnNpb25DYWxsYmFjayBjb252ZXJzaW9uKQogewogICAgIGJv
b2wgaW5kZXhPayA9IGZhbHNlOwotICAgIHVuc2lnbmVkIGluZGV4ID0gYXJncy5hdCgxKS50b1VJ
bnQzMihleGVjLCBpbmRleE9rKTsKKyAgICB1bnNpZ25lZCBpbmRleCA9IGV4ZWMtPmFyZ3VtZW50
KDEpLnRvVUludDMyKGV4ZWMsIGluZGV4T2spOwogICAgIGlmICghaW5kZXhPaykgewogICAgICAg
ICBzZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOwogICAgICAgICByZXR1
cm4gSlNDOjpqc1VuZGVmaW5lZCgpOwpAQCAtMTYyLDE1ICsxNjIsMTUgQEAgc3RhdGljIEpTQzo6
SlNWYWx1ZSByZXBsYWNlSXRlbShKU1BPRExpcwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwog
ICAgIHR5cGVuYW1lIEpTU1ZHUE9ETGlzdFRyYWl0czxQT0RUeXBlPjo6UE9ETGlzdCogbGlzdElt
cCA9IHdyYXBwZXItPmltcGwoKTsKICAgICByZXR1cm4gZmluaXNoU2V0dGVyPEpTUE9ETGlzdFR5
cGUsIFBPRFR5cGU+KGV4ZWMsIGVjLCB3cmFwcGVyLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbGlzdEltcC0+cmVwbGFjZUl0ZW0oSlNTVkdQT0RMaXN0
VHJhaXRzPFBPRFR5cGU+OjpQT0RMaXN0SXRlbTo6Y29weShjb252ZXJzaW9uKGFyZ3MuYXQoMCkp
KSwgaW5kZXgsIGVjKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsaXN0SW1wLT5yZXBsYWNlSXRlbShKU1NWR1BPRExpc3RUcmFpdHM8UE9EVHlwZT46
OlBPRExpc3RJdGVtOjpjb3B5KGNvbnZlcnNpb24oZXhlYy0+YXJndW1lbnQoMCkpKSwgaW5kZXgs
IGVjKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEpTUE9ETGlzdFR5cGUsIHR5cGVuYW1lIFBP
RFR5cGU+Ci1zdGF0aWMgSlNDOjpKU1ZhbHVlIHJlbW92ZUl0ZW0oSlNQT0RMaXN0VHlwZSogd3Jh
cHBlciwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncywKK3N0
YXRpYyBKU0M6OkpTVmFsdWUgcmVtb3ZlSXRlbShKU1BPRExpc3RUeXBlKiB3cmFwcGVyLCBKU0M6
OkV4ZWNTdGF0ZSogZXhlYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFt
ZSBKU1NWR1BPRExpc3RUcmFpdHM8UE9EVHlwZT46OkNvbnZlcnNpb25DYWxsYmFjaykKIHsKICAg
ICBib29sIGluZGV4T2sgPSBmYWxzZTsKLSAgICB1bnNpZ25lZCBpbmRleCA9IGFyZ3MuYXQoMCku
dG9VSW50MzIoZXhlYywgaW5kZXhPayk7CisgICAgdW5zaWduZWQgaW5kZXggPSBleGVjLT5hcmd1
bWVudCgwKS50b1VJbnQzMihleGVjLCBpbmRleE9rKTsKICAgICBpZiAoIWluZGV4T2spIHsKICAg
ICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKICAgICAgICAg
cmV0dXJuIEpTQzo6anNVbmRlZmluZWQoKTsKQEAgLTE4MywxMyArMTgzLDEzIEBAIHN0YXRpYyBK
U0M6OkpTVmFsdWUgcmVtb3ZlSXRlbShKU1BPRExpc3QKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
SlNQT0RMaXN0VHlwZSwgdHlwZW5hbWUgUE9EVHlwZT4KLXN0YXRpYyBKU0M6OkpTVmFsdWUgYXBw
ZW5kSXRlbShKU1BPRExpc3RUeXBlKiB3cmFwcGVyLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSlNDOjpBcmdMaXN0JiBhcmdzLAorc3RhdGljIEpTQzo6SlNWYWx1ZSBhcHBlbmRJdGVtKEpT
UE9ETGlzdFR5cGUqIHdyYXBwZXIsIEpTQzo6RXhlY1N0YXRlKiBleGVjLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIEpTU1ZHUE9ETGlzdFRyYWl0czxQT0RUeXBlPjo6
Q29udmVyc2lvbkNhbGxiYWNrIGNvbnZlcnNpb24pCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CiAgICAgdHlwZW5hbWUgSlNTVkdQT0RMaXN0VHJhaXRzPFBPRFR5cGU+OjpQT0RMaXN0KiBs
aXN0SW1wID0gd3JhcHBlci0+aW1wbCgpOwogICAgIHJldHVybiBmaW5pc2hTZXR0ZXI8SlNQT0RM
aXN0VHlwZSwgUE9EVHlwZT4oZXhlYywgZWMsIHdyYXBwZXIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0SW1wLT5hcHBlbmRJdGVtKEpTU1ZHUE9E
TGlzdFRyYWl0czxQT0RUeXBlPjo6UE9ETGlzdEl0ZW06OmNvcHkoY29udmVyc2lvbihhcmdzLmF0
KDApKSksIGVjKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsaXN0SW1wLT5hcHBlbmRJdGVtKEpTU1ZHUE9ETGlzdFRyYWl0czxQT0RUeXBlPjo6UE9E
TGlzdEl0ZW06OmNvcHkoY29udmVyc2lvbihleGVjLT5hcmd1bWVudCgwKSkpLCBlYykpOwogfQog
CiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHUGF0aFNlZ0xpc3RDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdQYXRoU2VnTGlzdEN1c3Rv
bS5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1BhdGhT
ZWdMaXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCB1c2luZyBu
YW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUgSlNTVkdQYXRo
U2VnTGlzdDo6Y2xlYXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWUg
SlNTVkdQYXRoU2VnTGlzdDo6Y2xlYXIoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwogCkBAIC00OSwxMCArNDksMTAgQEAgSlNWYWx1ZSBKU1NWR1BhdGhTZWdM
aXN0OjpjbGVhcihFeGVjU3RhdAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1Zh
bHVlIEpTU1ZHUGF0aFNlZ0xpc3Q6OmluaXRpYWxpemUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU1NWR1BhdGhTZWdMaXN0Ojppbml0aWFsaXplKEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBTVkdQYXRoU2Vn
KiBuZXdJdGVtID0gdG9TVkdQYXRoU2VnKGFyZ3MuYXQoMCkpOworICAgIFNWR1BhdGhTZWcqIG5l
d0l0ZW0gPSB0b1NWR1BhdGhTZWcoZXhlYy0+YXJndW1lbnQoMCkpOwogCiAgICAgU1ZHUGF0aFNl
Z0xpc3QqIGxpc3QgPSBpbXBsKCk7CiAKQEAgLTY2LDEyICs2NiwxMiBAQCBKU1ZhbHVlIEpTU1ZH
UGF0aFNlZ0xpc3Q6OmluaXRpYWxpemUoRXhlCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNW
YWx1ZSBKU1NWR1BhdGhTZWdMaXN0OjpnZXRJdGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJn
TGlzdCYgYXJncykKK0pTVmFsdWUgSlNTVkdQYXRoU2VnTGlzdDo6Z2V0SXRlbShFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAKICAgICBib29sIGluZGV4T2s7
Ci0gICAgdW5zaWduZWQgaW5kZXggPSBhcmdzLmF0KDApLnRvSW50MzIoZXhlYywgaW5kZXhPayk7
CisgICAgdW5zaWduZWQgaW5kZXggPSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMsIGlu
ZGV4T2spOwogICAgIGlmICghaW5kZXhPaykgewogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhl
YywgVFlQRV9NSVNNQVRDSF9FUlIpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKQEAg
LTg2LDEzICs4NiwxMyBAQCBKU1ZhbHVlIEpTU1ZHUGF0aFNlZ0xpc3Q6OmdldEl0ZW0oRXhlY1N0
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSBKU1NWR1BhdGhTZWdMaXN0OjppbnNl
cnRJdGVtQmVmb3JlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFs
dWUgSlNTVkdQYXRoU2VnTGlzdDo6aW5zZXJ0SXRlbUJlZm9yZShFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgU1ZHUGF0aFNlZyogbmV3SXRlbSA9IHRv
U1ZHUGF0aFNlZyhhcmdzLmF0KDApKTsKKyAgICBTVkdQYXRoU2VnKiBuZXdJdGVtID0gdG9TVkdQ
YXRoU2VnKGV4ZWMtPmFyZ3VtZW50KDApKTsKIAogICAgIGJvb2wgaW5kZXhPazsKLSAgICB1bnNp
Z25lZCBpbmRleCA9IGFyZ3MuYXQoMSkudG9JbnQzMihleGVjLCBpbmRleE9rKTsKKyAgICB1bnNp
Z25lZCBpbmRleCA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYywgaW5kZXhPayk7CiAg
ICAgaWYgKCFpbmRleE9rKSB7CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01J
U01BVENIX0VSUik7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpAQCAtMTA4LDEzICsx
MDgsMTMgQEAgSlNWYWx1ZSBKU1NWR1BhdGhTZWdMaXN0OjppbnNlcnRJdGVtQmVmbwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUgSlNTVkdQYXRoU2VnTGlzdDo6cmVwbGFjZUl0ZW0o
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU1NWR1BhdGhT
ZWdMaXN0OjpyZXBsYWNlSXRlbShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7Ci0gICAgU1ZHUGF0aFNlZyogbmV3SXRlbSA9IHRvU1ZHUGF0aFNlZyhhcmdzLmF0
KDApKTsKKyAgICBTVkdQYXRoU2VnKiBuZXdJdGVtID0gdG9TVkdQYXRoU2VnKGV4ZWMtPmFyZ3Vt
ZW50KDApKTsKICAgICAKICAgICBib29sIGluZGV4T2s7Ci0gICAgdW5zaWduZWQgaW5kZXggPSBh
cmdzLmF0KDEpLnRvSW50MzIoZXhlYywgaW5kZXhPayk7CisgICAgdW5zaWduZWQgaW5kZXggPSBl
eGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMsIGluZGV4T2spOwogICAgIGlmICghaW5kZXhP
aykgewogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOwog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKQEAgLTEzMCwxMiArMTMwLDEyIEBAIEpTVmFs
dWUgSlNTVkdQYXRoU2VnTGlzdDo6cmVwbGFjZUl0ZW0oRXgKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1KU1ZhbHVlIEpTU1ZHUGF0aFNlZ0xpc3Q6OnJlbW92ZUl0ZW0oRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU1NWR1BhdGhTZWdMaXN0OjpyZW1vdmVJ
dGVtKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICAK
ICAgICBib29sIGluZGV4T2s7Ci0gICAgdW5zaWduZWQgaW5kZXggPSBhcmdzLmF0KDApLnRvSW50
MzIoZXhlYywgaW5kZXhPayk7CisgICAgdW5zaWduZWQgaW5kZXggPSBleGVjLT5hcmd1bWVudCgw
KS50b0ludDMyKGV4ZWMsIGluZGV4T2spOwogICAgIGlmICghaW5kZXhPaykgewogICAgICAgICBz
ZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOwogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKQEAgLTE1MywxMCArMTUzLDEwIEBAIEpTVmFsdWUgSlNTVkdQYXRoU2Vn
TGlzdDo6cmVtb3ZlSXRlbShFeGUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlIEpT
U1ZHUGF0aFNlZ0xpc3Q6OmFwcGVuZEl0ZW0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQorSlNWYWx1ZSBKU1NWR1BhdGhTZWdMaXN0OjphcHBlbmRJdGVtKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBTVkdQYXRoU2VnKiBuZXdJ
dGVtID0gdG9TVkdQYXRoU2VnKGFyZ3MuYXQoMCkpOworICAgIFNWR1BhdGhTZWcqIG5ld0l0ZW0g
PSB0b1NWR1BhdGhTZWcoZXhlYy0+YXJndW1lbnQoMCkpOwogCiAgICAgU1ZHUGF0aFNlZ0xpc3Qq
IGxpc3QgPSBpbXBsKCk7CiAgICAgU1ZHRWxlbWVudCogY29udGV4dCA9IEpTU1ZHQ29udGV4dENh
Y2hlOjpzdmdDb250ZXh0Rm9yRE9NT2JqZWN0KHRoaXMpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1VpbnQ4QXJyYXlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNVaW50OEFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTVWludDhBcnJheUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2
LDkgKzQ2LDkgQEAgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIAogICAg
IHJldHVybiBnZXRET01PYmplY3RXcmFwcGVyPEpTVWludDhBcnJheT4oZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBvYmplY3QpOwogfQogCi1KU0M6OkpTVmFsdWUgSlNVaW50OEFycmF5OjpzZXQoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMsIEpTQzo6QXJnTGlzdCBjb25zdCYgYXJncykKK0pTQzo6SlNWYWx1ZSBK
U1VpbnQ4QXJyYXk6OnNldChKU0M6OkV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gc2V0
V2ViR0xBcnJheUhlbHBlcihleGVjLCBpbXBsKCksIGFyZ3MsIHRvVWludDhBcnJheSk7CisgICAg
cmV0dXJuIHNldFdlYkdMQXJyYXlIZWxwZXIoZXhlYywgaW1wbCgpLCB0b1VpbnQ4QXJyYXkpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
VWludDE2QXJyYXlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNVaW50MTZBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1VpbnQxNkFycmF5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsOSAr
NDYsOSBAQCBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgCiAgICAgcmV0
dXJuIGdldERPTU9iamVjdFdyYXBwZXI8SlNVaW50MTZBcnJheT4oZXhlYywgZ2xvYmFsT2JqZWN0
LCBvYmplY3QpOwogfQogCi1KU0M6OkpTVmFsdWUgSlNVaW50MTZBcnJheTo6c2V0KEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBKU0M6OkFyZ0xpc3QgY29uc3QmIGFyZ3MpCitKU0M6OkpTVmFsdWUgSlNV
aW50MTZBcnJheTo6c2V0KEpTQzo6RXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBzZXRX
ZWJHTEFycmF5SGVscGVyKGV4ZWMsIGltcGwoKSwgYXJncywgdG9VaW50MTZBcnJheSk7CisgICAg
cmV0dXJuIHNldFdlYkdMQXJyYXlIZWxwZXIoZXhlYywgaW1wbCgpLCB0b1VpbnQxNkFycmF5KTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1VpbnQzMkFycmF5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTVWludDMyQXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNVaW50MzJBcnJheUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDkg
KzQ2LDkgQEAgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIAogICAgIHJl
dHVybiBnZXRET01PYmplY3RXcmFwcGVyPEpTVWludDMyQXJyYXk+KGV4ZWMsIGdsb2JhbE9iamVj
dCwgb2JqZWN0KTsKIH0KIAotSlNDOjpKU1ZhbHVlIEpTVWludDMyQXJyYXk6OnNldChKU0M6OkV4
ZWNTdGF0ZSogZXhlYywgSlNDOjpBcmdMaXN0IGNvbnN0JiBhcmdzKQorSlNDOjpKU1ZhbHVlIEpT
VWludDMyQXJyYXk6OnNldChKU0M6OkV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gc2V0
V2ViR0xBcnJheUhlbHBlcihleGVjLCBpbXBsKCksIGFyZ3MsIHRvVWludDMyQXJyYXkpOworICAg
IHJldHVybiBzZXRXZWJHTEFycmF5SGVscGVyKGV4ZWMsIGltcGwoKSwgdG9VaW50MzJBcnJheSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMv
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCShyZXZpc2lvbiA2
MDM0MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NywyMSArNjcsMjEgQEAgdXNpbmcgbmFtZXNwYWNl
IEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpidWZmZXJEYXRhKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkFyZ0xpc3QgY29u
c3QmIGFyZ3MpCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJEYXRhKEpT
Qzo6RXhlY1N0YXRlKiBleGVjKQogewotICAgIGlmIChhcmdzLnNpemUoKSAhPSAzKQorICAgIGlm
IChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMykKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3Io
ZXhlYywgU3ludGF4RXJyb3IpOwogCi0gICAgdW5zaWduZWQgdGFyZ2V0ID0gYXJncy5hdCgwKS50
b0ludDMyKGV4ZWMpOwotICAgIHVuc2lnbmVkIHVzYWdlID0gYXJncy5hdCgyKS50b0ludDMyKGV4
ZWMpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhl
Yyk7CisgICAgdW5zaWduZWQgdXNhZ2UgPSBleGVjLT5hcmd1bWVudCgyKS50b0ludDMyKGV4ZWMp
OwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogCiAgICAgLy8gSWYgYXJndW1lbnQgMSBpcyBh
IG51bWJlciwgd2UgYXJlIGluaXRpYWxpemluZyB0aGlzIGJ1ZmZlciB0byB0aGF0IHNpemUKLSAg
ICBpZiAoIWFyZ3MuYXQoMSkuaXNPYmplY3QoKSkgewotICAgICAgICB1bnNpZ25lZCBpbnQgY291
bnQgPSBhcmdzLmF0KDEpLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKCFleGVjLT5hcmd1bWVudCgx
KS5pc09iamVjdCgpKSB7CisgICAgICAgIHVuc2lnbmVkIGludCBjb3VudCA9IGV4ZWMtPmFyZ3Vt
ZW50KDEpLnRvSW50MzIoZXhlYyk7CiAgICAgICAgIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5n
Q29udGV4dCo+KGltcGwoKSktPmJ1ZmZlckRhdGEodGFyZ2V0LCBjb3VudCwgdXNhZ2UsIGVjKTsK
ICAgICB9IGVsc2UgewotICAgICAgICBBcnJheUJ1ZmZlclZpZXcqIGFycmF5ID0gdG9BcnJheUJ1
ZmZlclZpZXcoYXJncy5hdCgxKSk7CisgICAgICAgIEFycmF5QnVmZmVyVmlldyogYXJyYXkgPSB0
b0FycmF5QnVmZmVyVmlldyhleGVjLT5hcmd1bWVudCgxKSk7CiAgICAgICAgIHN0YXRpY19jYXN0
PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KGltcGwoKSktPmJ1ZmZlckRhdGEodGFyZ2V0LCBhcnJh
eSwgdXNhZ2UsIGVjKTsKICAgICB9CiAKQEAgLTg5LDE2ICs4OSwxNiBAQCBKU1ZhbHVlIEpTV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJECiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9
CiAKLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlclN1YkRhdGEoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMsIEpTQzo6QXJnTGlzdCBjb25zdCYgYXJncykKK0pTVmFsdWUgSlNXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlclN1YkRhdGEoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCiB7
Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDMpCisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQo
KSAhPSAzKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7CiAK
LSAgICB1bnNpZ25lZCB0YXJnZXQgPSBhcmdzLmF0KDApLnRvSW50MzIoZXhlYyk7Ci0gICAgdW5z
aWduZWQgb2Zmc2V0ID0gYXJncy5hdCgxKS50b0ludDMyKGV4ZWMpOworICAgIHVuc2lnbmVkIHRh
cmdldCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7CisgICAgdW5zaWduZWQgb2Zm
c2V0ID0gZXhlYy0+YXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKICAgICAKLSAgICBBcnJheUJ1ZmZlclZpZXcqIGFycmF5ID0gdG9BcnJheUJ1ZmZl
clZpZXcoYXJncy5hdCgyKSk7CisgICAgQXJyYXlCdWZmZXJWaWV3KiBhcnJheSA9IHRvQXJyYXlC
dWZmZXJWaWV3KGV4ZWMtPmFyZ3VtZW50KDIpKTsKICAgICAKICAgICBzdGF0aWNfY2FzdDxXZWJH
TFJlbmRlcmluZ0NvbnRleHQqPihpbXBsKCkpLT5idWZmZXJTdWJEYXRhKHRhcmdldCwgb2Zmc2V0
LCBhcnJheSwgZWMpOwogCkBAIC0xNDksMTcgKzE0OSwxNyBAQCBlbnVtIE9iamVjdFR5cGUgewog
ICAgIGtCdWZmZXIsIGtSZW5kZXJidWZmZXIsIGtUZXh0dXJlLCBrVmVydGV4QXR0cmliCiB9Owog
Ci1zdGF0aWMgSlNWYWx1ZSBnZXRPYmplY3RQYXJhbWV0ZXIoSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHQqIG9iaiwgRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBPYmplY3RUeXBl
IG9iamVjdFR5cGUpCitzdGF0aWMgSlNWYWx1ZSBnZXRPYmplY3RQYXJhbWV0ZXIoSlNXZWJHTFJl
bmRlcmluZ0NvbnRleHQqIG9iaiwgRXhlY1N0YXRlKiBleGVjLCBPYmplY3RUeXBlIG9iamVjdFR5
cGUpCiB7Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDIpCisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSAhPSAyKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJv
cik7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQqIGNvbnRleHQgPSBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihvYmotPmlt
cGwoKSk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0gYXJncy5hdCgwKS50b0ludDMyKGV4ZWMpOwor
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7CiAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKLSAgICB1bnNpZ25lZCBwbmFtZSA9IGFyZ3MuYXQoMSkudG9JbnQzMihleGVjKTsKKyAgICB1
bnNpZ25lZCBwbmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7CiAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICBXZWJHTEdldEluZm8gaW5mbzsKQEAgLTE5MiwyNSArMTkyLDI1IEBAIGVudW0gV2hpY2hQcm9n
cmFtQ2FsbCB7CiAgICAga1Byb2dyYW1QYXJhbWV0ZXIsIGtVbmlmb3JtCiB9OwogCi1KU1ZhbHVl
IEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCdWZmZXJQYXJhbWV0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Z2V0QnVmZmVyUGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gZ2V0
T2JqZWN0UGFyYW1ldGVyKHRoaXMsIGV4ZWMsIGFyZ3MsIGtCdWZmZXIpOworICAgIHJldHVybiBn
ZXRPYmplY3RQYXJhbWV0ZXIodGhpcywgZXhlYywga0J1ZmZlcik7CiB9CiAKLUpTVmFsdWUgSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoRXhlY1N0YXRl
KiBleGVjKQogewotICAgIGlmIChhcmdzLnNpemUoKSAhPSAzKQorICAgIGlmIChleGVjLT5hcmd1
bWVudENvdW50KCkgIT0gMykKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4
RXJyb3IpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgV2ViR0xSZW5kZXJpbmdD
b250ZXh0KiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4oaW1w
bCgpKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBhcmdzLmF0KDApLnRvSW50MzIoZXhlYyk7Cisg
ICAgdW5zaWduZWQgdGFyZ2V0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwotICAgIHVuc2lnbmVkIGF0dGFjaG1lbnQgPSBhcmdzLmF0KDEpLnRvSW50MzIoZXhlYyk7Cisg
ICAgdW5zaWduZWQgYXR0YWNobWVudCA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7
CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKLSAgICB1bnNpZ25lZCBwbmFtZSA9IGFyZ3MuYXQoMikudG9JbnQzMihleGVjKTsKKyAg
ICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDIpLnRvSW50MzIoZXhlYyk7CiAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
ICAgICBXZWJHTEdldEluZm8gaW5mbyA9IGNvbnRleHQtPmdldEZyYW1lYnVmZmVyQXR0YWNobWVu
dFBhcmFtZXRlcih0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCBlYyk7CkBAIC0yMjEsMTQgKzIy
MSwxNCBAQCBKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRGcmFtCiAgICAgcmV0
dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGluZm8pOwogfQogCi1KU1ZhbHVlIEpTV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UGFyYW1l
dGVyKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBpZiAoYXJncy5zaXplKCkgIT0gMSkKKyAgICBp
ZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDEpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KGV4ZWMsIFN5bnRheEVycm9yKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFdl
YkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCA9IHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5n
Q29udGV4dCo+KGltcGwoKSk7Ci0gICAgdW5zaWduZWQgcG5hbWUgPSBhcmdzLmF0KDApLnRvSW50
MzIoZXhlYyk7CisgICAgdW5zaWduZWQgcG5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMy
KGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LT5nZXRQYXJhbWV0
ZXIocG5hbWUsIGVjKTsKQEAgLTIzOSwxNSArMjM5LDE1IEBAIEpTVmFsdWUgSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmdldFBhcmEKICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3Qo
KSwgaW5mbyk7CiB9CiAKLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFByb2dy
YW1QYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1
ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UHJvZ3JhbVBhcmFtZXRlcihFeGVjU3RhdGUq
IGV4ZWMpCiB7Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDIpCisgICAgaWYgKGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSAhPSAyKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhF
cnJvcik7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQqIGNvbnRleHQgPSBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihpbXBs
KCkpOwotICAgIFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSA9IHRvV2ViR0xQcm9ncmFtKGFyZ3MuYXQo
MCkpOwotICAgIHVuc2lnbmVkIHBuYW1lID0gYXJncy5hdCgxKS50b0ludDMyKGV4ZWMpOworICAg
IFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSA9IHRvV2ViR0xQcm9ncmFtKGV4ZWMtPmFyZ3VtZW50KDAp
KTsKKyAgICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7
CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKICAgICBXZWJHTEdldEluZm8gaW5mbyA9IGNvbnRleHQtPmdldFByb2dyYW1QYXJhbWV0
ZXIocHJvZ3JhbSwgcG5hbWUsIGVjKTsKQEAgLTI1OCwyMCArMjU4LDIwIEBAIEpTVmFsdWUgSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFByb2cKICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9i
YWxPYmplY3QoKSwgaW5mbyk7CiB9CiAKLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJQ
YXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBnZXRPYmplY3RQYXJhbWV0
ZXIodGhpcywgZXhlYywgYXJncywga1JlbmRlcmJ1ZmZlcik7CisgICAgcmV0dXJuIGdldE9iamVj
dFBhcmFtZXRlcih0aGlzLCBleGVjLCBrUmVuZGVyYnVmZmVyKTsKIH0KIAotSlNWYWx1ZSBKU1dl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVyUGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omdl
dFNoYWRlclBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgaWYgKGFyZ3Muc2l6ZSgp
ICE9IDIpCisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAyKQogICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7CiAKICAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPSBzdGF0aWNfY2FzdDxX
ZWJHTFJlbmRlcmluZ0NvbnRleHQqPihpbXBsKCkpOwotICAgIFdlYkdMU2hhZGVyKiBzaGFkZXIg
PSB0b1dlYkdMU2hhZGVyKGFyZ3MuYXQoMCkpOwotICAgIHVuc2lnbmVkIHBuYW1lID0gYXJncy5h
dCgxKS50b0ludDMyKGV4ZWMpOworICAgIFdlYkdMU2hhZGVyKiBzaGFkZXIgPSB0b1dlYkdMU2hh
ZGVyKGV4ZWMtPmFyZ3VtZW50KDApKTsKKyAgICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMtPmFyZ3Vt
ZW50KDEpLnRvSW50MzIoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBXZWJHTEdldEluZm8gaW5mbyA9IGNvbnRl
eHQtPmdldFNoYWRlclBhcmFtZXRlcihzaGFkZXIsIHBuYW1lLCBlYyk7CkBAIC0yODIsMjAgKzI4
MiwyMCBAQCBKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkCiAgICAgcmV0
dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGluZm8pOwogfQogCi1KU1ZhbHVlIEpTV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpnZXRUZXhQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VGV4
UGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gZ2V0T2JqZWN0UGFyYW1l
dGVyKHRoaXMsIGV4ZWMsIGFyZ3MsIGtUZXh0dXJlKTsKKyAgICByZXR1cm4gZ2V0T2JqZWN0UGFy
YW1ldGVyKHRoaXMsIGV4ZWMsIGtUZXh0dXJlKTsKIH0KIAotSlNWYWx1ZSBKU1dlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Z2V0VW5pZm9ybShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVbmlmb3JtKEV4ZWNTdGF0
ZSogZXhlYykKIHsKLSAgICBpZiAoYXJncy5zaXplKCkgIT0gMikKKyAgICBpZiAoZXhlYy0+YXJn
dW1lbnRDb3VudCgpICE9IDIpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRh
eEVycm9yKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFdlYkdMUmVuZGVyaW5n
Q29udGV4dCogY29udGV4dCA9IHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KGlt
cGwoKSk7Ci0gICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0gdG9XZWJHTFByb2dyYW0oYXJncy5h
dCgwKSk7Ci0gICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvYyA9IHRvV2ViR0xVbmlmb3JtTG9j
YXRpb24oYXJncy5hdCgxKSk7CisgICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0gdG9XZWJHTFBy
b2dyYW0oZXhlYy0+YXJndW1lbnQoMCkpOworICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Mg
PSB0b1dlYkdMVW5pZm9ybUxvY2F0aW9uKGV4ZWMtPmFyZ3VtZW50KDEpKTsKICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIFdl
YkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC0+Z2V0VW5pZm9ybShwcm9ncmFtLCBsb2MsIGVjKTsK
QEAgLTMwNiw5ICszMDYsOSBAQCBKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRV
bmlmCiAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGluZm8pOwogfQogCi1K
U1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWIoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Z2V0VmVydGV4QXR0cmliKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gZ2V0
T2JqZWN0UGFyYW1ldGVyKHRoaXMsIGV4ZWMsIGFyZ3MsIGtWZXJ0ZXhBdHRyaWIpOworICAgIHJl
dHVybiBnZXRPYmplY3RQYXJhbWV0ZXIodGhpcywgZXhlYywga1ZlcnRleEF0dHJpYik7CiB9CiAK
IC8vICAgdm9pZCB0ZXhJbWFnZTJEKGluIEdMZW51bSB0YXJnZXQsIGluIEdMaW50IGxldmVsLCBp
biBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGluIEdMc2l6ZWkgd2lkdGgsIGluIEdMc2l6ZWkgaGVp
Z2h0LCBpbiBHTGludCBib3JkZXIsIGluIEdMZW51bSBmb3JtYXQsIGluIEdMZW51bSB0eXBlLCBp
biBBcnJheUJ1ZmZlclZpZXcgcGl4ZWxzKTsKQEAgLTMxNiwzNSArMzE2LDM1IEBAIEpTVmFsdWUg
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFZlcnQKIC8vICAgdm9pZCB0ZXhJbWFnZTJEKGlu
IEdMZW51bSB0YXJnZXQsIGluIEdMaW50IGxldmVsLCBpbiBIVE1MSW1hZ2VFbGVtZW50IGltYWdl
LCBbT3B0aW9uYWxdIGluIEdMYm9vbGVhbiBmbGlwWSwgW09wdGlvbmFsXSBpbiBwcmVtdWx0aXBs
eUFscGhhKTsKIC8vICAgdm9pZCB0ZXhJbWFnZTJEKGluIEdMZW51bSB0YXJnZXQsIGluIEdMaW50
IGxldmVsLCBpbiBIVE1MQ2FudmFzRWxlbWVudCBjYW52YXMsIFtPcHRpb25hbF0gaW4gR0xib29s
ZWFuIGZsaXBZLCBbT3B0aW9uYWxdIGluIHByZW11bHRpcGx5QWxwaGEpOwogLy8gICB2b2lkIHRl
eEltYWdlMkQoaW4gR0xlbnVtIHRhcmdldCwgaW4gR0xpbnQgbGV2ZWwsIGluIEhUTUxWaWRlb0Vs
ZW1lbnQgdmlkZW8sIFtPcHRpb25hbF0gaW4gR0xib29sZWFuIGZsaXBZLCBbT3B0aW9uYWxdIGlu
IHByZW11bHRpcGx5QWxwaGEpOwotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4
SW1hZ2UyRChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpT
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKEV4ZWNTdGF0ZSogZXhlYykKIHsgCi0g
ICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMyB8fCBhcmdzLnNpemUoKSA+IDkpCisgICAgaWYgKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSA8IDMgfHwgZXhlYy0+YXJndW1lbnRDb3VudCgpID4gOSkKICAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOwogCiAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7CiAgICAgCiAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0ID0g
c3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4oaW1wbCgpKTsgICAgCi0gICAgdW5z
aWduZWQgdGFyZ2V0ID0gYXJncy5hdCgwKS50b0ludDMyKGV4ZWMpOworICAgIHVuc2lnbmVkIHRh
cmdldCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKSAgICAKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgCi0g
ICAgdW5zaWduZWQgbGV2ZWwgPSBhcmdzLmF0KDEpLnRvSW50MzIoZXhlYyk7CisgICAgdW5zaWdu
ZWQgbGV2ZWwgPSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwogICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkgICAgCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAg
ICAgSlNPYmplY3QqIG8gPSAwOwogICAgIAotICAgIGlmIChhcmdzLnNpemUoKSA8PSA1KSB7Cisg
ICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8PSA1KSB7CiAgICAgICAgIC8vIFRoaXMgaXMg
b25lIG9mIHRoZSBsYXN0IDQgZm9ybXMuIFBhcmFtIDIgY2FuIGJlIEltYWdlRGF0YSBvciA8aW1n
PiwgPGNhbnZhcz4gb3IgPHZpZGVvPiBlbGVtZW50LgotICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
YXJncy5hdCgyKTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDIpOwog
ICAgIAogICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCiAgICAgICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogICAgICAgICAKICAgICAgICAgbyA9IGFzT2Jq
ZWN0KHZhbHVlKTsKICAgICAgICAgCi0gICAgICAgIGJvb2wgZmxpcFkgPSBhcmdzLmF0KDMpLnRv
Qm9vbGVhbihleGVjKTsKLSAgICAgICAgYm9vbCBwcmVtdWx0aXBseUFscGhhID0gYXJncy5hdCg0
KS50b0Jvb2xlYW4oZXhlYyk7CisgICAgICAgIGJvb2wgZmxpcFkgPSBleGVjLT5hcmd1bWVudCgz
KS50b0Jvb2xlYW4oZXhlYyk7CisgICAgICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSA9IGV4ZWMt
PmFyZ3VtZW50KDQpLnRvQm9vbGVhbihleGVjKTsKICAgICAgICAgCiAgICAgICAgIGlmIChvLT5p
bmhlcml0cygmSlNJbWFnZURhdGE6OnNfaW5mbykpIHsKICAgICAgICAgICAgIEltYWdlRGF0YSog
ZGF0YSA9IHN0YXRpY19jYXN0PEltYWdlRGF0YSo+KHN0YXRpY19jYXN0PEpTSW1hZ2VEYXRhKj4o
byktPmltcGwoKSk7CkBAIC0zNjMsMzUgKzM2MywzNSBAQCBKU1ZhbHVlIEpTV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp0ZXhJbWFnCiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgZWMgPSBUWVBF
X01JU01BVENIX0VSUjsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAoYXJncy5zaXplKCkgIT0g
OSkKKyAgICAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSA5KQogICAgICAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOwogCiAgICAgICAgIC8vIFRoaXMg
bXVzdCBiZSB0aGUgQXJyYXlCdWZmZXJWaWV3IGNhc2UKLSAgICAgICAgdW5zaWduZWQgaW50ZXJu
YWxmb3JtYXQgPSBhcmdzLmF0KDIpLnRvSW50MzIoZXhlYyk7CisgICAgICAgIHVuc2lnbmVkIGlu
dGVybmFsZm9ybWF0ID0gZXhlYy0+YXJndW1lbnQoMikudG9JbnQzMihleGVjKTsKICAgICAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogCi0gICAgICAgIHVuc2lnbmVkIHdpZHRoID0gYXJncy5hdCgzKS50b0ludDMyKGV4
ZWMpOworICAgICAgICB1bnNpZ25lZCB3aWR0aCA9IGV4ZWMtPmFyZ3VtZW50KDMpLnRvSW50MzIo
ZXhlYyk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgICAgCiAgICAgICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgICAgICB1bnNpZ25lZCBoZWlnaHQgPSBhcmdz
LmF0KDQpLnRvSW50MzIoZXhlYyk7CisgICAgICAgIHVuc2lnbmVkIGhlaWdodCA9IGV4ZWMtPmFy
Z3VtZW50KDQpLnRvSW50MzIoZXhlYyk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkgICAgCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgICAgICB1bnNp
Z25lZCBib3JkZXIgPSBhcmdzLmF0KDUpLnRvSW50MzIoZXhlYyk7CisgICAgICAgIHVuc2lnbmVk
IGJvcmRlciA9IGV4ZWMtPmFyZ3VtZW50KDUpLnRvSW50MzIoZXhlYyk7CiAgICAgICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkgICAgCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIAotICAgICAgICB1bnNpZ25lZCBmb3JtYXQgPSBhcmdzLmF0KDYpLnRvSW50MzIoZXhlYyk7
CisgICAgICAgIHVuc2lnbmVkIGZvcm1hdCA9IGV4ZWMtPmFyZ3VtZW50KDYpLnRvSW50MzIoZXhl
Yyk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgICAgCiAgICAgICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgICAgICB1bnNpZ25lZCB0eXBlID0gYXJncy5hdCg3
KS50b0ludDMyKGV4ZWMpOworICAgICAgICB1bnNpZ25lZCB0eXBlID0gZXhlYy0+YXJndW1lbnQo
NykudG9JbnQzMihleGVjKTsKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAK
ICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgICAgIEpTVmFsdWUgdmFs
dWUgPSBhcmdzLmF0KDgpOworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+YXJndW1lbnQo
OCk7CiAgICAgICAgICAgICAKICAgICAgICAgLy8gRm9yIHRoaXMgY2FzZSBwYXNzaW5nIDAgKGZv
ciBhIG51bGwgYXJyYXkpIGlzIGFsbG93ZWQKICAgICAgICAgaWYgKHZhbHVlLmlzTnVsbCgpKQpA
QCAtNDE5LDQzICs0MTksNDMgQEAgSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4
SW1hZwogLy8gICB2b2lkIHRleFN1YkltYWdlMkQoaW4gR0xlbnVtIHRhcmdldCwgaW4gR0xpbnQg
bGV2ZWwsIGluIEdMaW50IHhvZmZzZXQsIGluIEdMaW50IHlvZmZzZXQsIGluIEhUTUxJbWFnZUVs
ZW1lbnQgaW1hZ2UsIFtPcHRpb25hbF0gR0xib29sZWFuIGZsaXBZLCBbT3B0aW9uYWxdIGluIHBy
ZW11bHRpcGx5QWxwaGEpOwogLy8gICB2b2lkIHRleFN1YkltYWdlMkQoaW4gR0xlbnVtIHRhcmdl
dCwgaW4gR0xpbnQgbGV2ZWwsIGluIEdMaW50IHhvZmZzZXQsIGluIEdMaW50IHlvZmZzZXQsIGlu
IEhUTUxDYW52YXNFbGVtZW50IGNhbnZhcywgW09wdGlvbmFsXSBHTGJvb2xlYW4gZmxpcFksIFtP
cHRpb25hbF0gaW4gcHJlbXVsdGlwbHlBbHBoYSk7CiAvLyAgIHZvaWQgdGV4U3ViSW1hZ2UyRChp
biBHTGVudW0gdGFyZ2V0LCBpbiBHTGludCBsZXZlbCwgaW4gR0xpbnQgeG9mZnNldCwgaW4gR0xp
bnQgeW9mZnNldCwgaW4gSFRNTFZpZGVvRWxlbWVudCB2aWRlbywgW09wdGlvbmFsXSBHTGJvb2xl
YW4gZmxpcFksIFtPcHRpb25hbF0gaW4gcHJlbXVsdGlwbHlBbHBoYSk7Ci1KU1ZhbHVlIEpTV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
QXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1Yklt
YWdlMkQoRXhlY1N0YXRlKiBleGVjKQogeyAKLSAgICBpZiAoYXJncy5zaXplKCkgPCA1IHx8IGFy
Z3Muc2l6ZSgpID4gOSkKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgNSB8fCBleGVj
LT5hcmd1bWVudENvdW50KCkgPiA5KQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBT
eW50YXhFcnJvcik7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKIAogICAgIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCogY29udGV4dCA9IHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4
dCo+KGltcGwoKSk7ICAgIAotICAgIHVuc2lnbmVkIHRhcmdldCA9IGFyZ3MuYXQoMCkudG9JbnQz
MihleGVjKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMy
KGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgICAgCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogCi0gICAgdW5zaWduZWQgbGV2ZWwgPSBhcmdzLmF0KDEpLnRvSW50
MzIoZXhlYyk7CisgICAgdW5zaWduZWQgbGV2ZWwgPSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMy
KGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgICAgCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogICAgIAotICAgIHVuc2lnbmVkIHhvZmYgPSBhcmdzLmF0KDIpLnRv
SW50MzIoZXhlYyk7CisgICAgdW5zaWduZWQgeG9mZiA9IGV4ZWMtPmFyZ3VtZW50KDIpLnRvSW50
MzIoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgCi0gICAgdW5zaWduZWQgeW9mZiA9IGFyZ3MuYXQoMyku
dG9JbnQzMihleGVjKTsKKyAgICB1bnNpZ25lZCB5b2ZmID0gZXhlYy0+YXJndW1lbnQoMykudG9J
bnQzMihleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpICAgIAogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAKICAgICBKU09iamVjdCogbyA9IDA7CiAgICAgICAg
IAotICAgIGlmIChhcmdzLnNpemUoKSA8PSA3KSB7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291
bnQoKSA8PSA3KSB7CiAgICAgICAgIC8vIFRoaXMgaXMgb25lIG9mIHRoZSBsYXN0IDQgZm9ybXMu
IFBhcmFtIDQgY2FuIGJlIDxpbWc+LCA8Y2FudmFzPiBvciA8dmlkZW8+IGVsZW1lbnQsIG9mIHRo
ZSBmb3JtYXQgcGFyYW0uCi0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBhcmdzLmF0KDQpOworICAg
ICAgICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+YXJndW1lbnQoNCk7CiAKICAgICAgICAgaWYgKCF2
YWx1ZS5pc09iamVjdCgpKQogICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3lu
dGF4RXJyb3IpOwogCiAgICAgICAgIG8gPSBhc09iamVjdCh2YWx1ZSk7CiAKLSAgICAgICAgYm9v
bCBmbGlwWSA9IGFyZ3MuYXQoNSkudG9Cb29sZWFuKGV4ZWMpOwotICAgICAgICBib29sIHByZW11
bHRpcGx5QWxwaGEgPSBhcmdzLmF0KDYpLnRvQm9vbGVhbihleGVjKTsKKyAgICAgICAgYm9vbCBm
bGlwWSA9IGV4ZWMtPmFyZ3VtZW50KDUpLnRvQm9vbGVhbihleGVjKTsKKyAgICAgICAgYm9vbCBw
cmVtdWx0aXBseUFscGhhID0gZXhlYy0+YXJndW1lbnQoNikudG9Cb29sZWFuKGV4ZWMpOwogICAg
ICAgICAKICAgICAgICAgaWYgKG8tPmluaGVyaXRzKCZKU0ltYWdlRGF0YTo6c19pbmZvKSkgewog
ICAgICAgICAgICAgSW1hZ2VEYXRhKiBkYXRhID0gc3RhdGljX2Nhc3Q8SW1hZ2VEYXRhKj4oc3Rh
dGljX2Nhc3Q8SlNJbWFnZURhdGEqPihvKS0+aW1wbCgpKTsKQEAgLTQ3NSwyNiArNDc1LDI2IEBA
IEpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkkKICAgICAgICAgICAgIGVj
ID0gVFlQRV9NSVNNQVRDSF9FUlI7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gVGhpcyBtdXN0
IGJlIHRoZSBBcnJheUJ1ZmZlclZpZXcgZm9ybQotICAgICAgICBpZiAoYXJncy5zaXplKCkgIT0g
OSkKKyAgICAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSA5KQogICAgICAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOwogCi0gICAgICAgIHVuc2lnbmVk
IHdpZHRoID0gYXJncy5hdCg0KS50b0ludDMyKGV4ZWMpOworICAgICAgICB1bnNpZ25lZCB3aWR0
aCA9IGV4ZWMtPmFyZ3VtZW50KDQpLnRvSW50MzIoZXhlYyk7CiAgICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkgICAgCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICAgICAgCi0gICAgICAgIHVuc2lnbmVkIGhlaWdodCA9IGFyZ3MuYXQoNSkudG9JbnQzMihleGVj
KTsKKyAgICAgICAgdW5zaWduZWQgaGVpZ2h0ID0gZXhlYy0+YXJndW1lbnQoNSkudG9JbnQzMihl
eGVjKTsKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAKICAgICAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgZm9ybWF0
ID0gYXJncy5hdCg2KS50b0ludDMyKGV4ZWMpOworICAgICAgICB1bnNpZ25lZCBmb3JtYXQgPSBl
eGVjLT5hcmd1bWVudCg2KS50b0ludDMyKGV4ZWMpOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpICAgIAogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAg
IAotICAgICAgICB1bnNpZ25lZCB0eXBlID0gYXJncy5hdCg3KS50b0ludDMyKGV4ZWMpOworICAg
ICAgICB1bnNpZ25lZCB0eXBlID0gZXhlYy0+YXJndW1lbnQoNykudG9JbnQzMihleGVjKTsKICAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAKICAgICAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogICAgICAgICAKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGFyZ3MuYXQo
OCk7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBleGVjLT5hcmd1bWVudCg4KTsKICAgICAgICAg
aWYgKCF2YWx1ZS5pc09iamVjdCgpKQogICAgICAgICAgICAgY29udGV4dC0+dGV4U3ViSW1hZ2Uy
RCh0YXJnZXQsIGxldmVsLCB4b2ZmLCB5b2ZmLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUs
IDAsIGVjKTsKICAgICAgICAgZWxzZSB7CkBAIC01NTUsMjMgKzU1NSwyMyBAQCBzdGF0aWMgYm9v
bCBmdW5jdGlvbkZvclVuaWZvcm0oRGF0YUZ1bmN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1z
dGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbmYoRGF0YUZ1bmN0aW9uVG9DYWxsIGYsIEpT
Qzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MsIFdlYkdMUmVuZGVy
aW5nQ29udGV4dCogY29udGV4dCkKK3N0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uZihE
YXRhRnVuY3Rpb25Ub0NhbGwgZiwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFdlYkdMUmVuZGVyaW5n
Q29udGV4dCogY29udGV4dCkKIHsKLSAgICBpZiAoYXJncy5zaXplKCkgIT0gMikKKyAgICBpZiAo
ZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4
ZWMsIFN5bnRheEVycm9yKTsKICAgICAKICAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24gPSAwOwogICAgIGxvbmcgaW5kZXggPSAtMTsKICAgICAKICAgICBpZiAoZnVuY3Rpb25Gb3JV
bmlmb3JtKGYpKQotICAgICAgICBsb2NhdGlvbiA9IHRvV2ViR0xVbmlmb3JtTG9jYXRpb24oYXJn
cy5hdCgwKSk7CisgICAgICAgIGxvY2F0aW9uID0gdG9XZWJHTFVuaWZvcm1Mb2NhdGlvbihleGVj
LT5hcmd1bWVudCgwKSk7CiAgICAgZWxzZQotICAgICAgICBpbmRleCA9IGFyZ3MuYXQoMCkudG9J
bnQzMihleGVjKTsKKyAgICAgICAgaW5kZXggPSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4
ZWMpOwogCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgICAgICAgCi0gICAgUmVmUHRyPEZsb2F0QXJyYXk+IHdlYkdMQXJyYXkg
PSB0b0Zsb2F0QXJyYXkoYXJncy5hdCgxKSk7CisgICAgUmVmUHRyPEZsb2F0QXJyYXk+IHdlYkdM
QXJyYXkgPSB0b0Zsb2F0QXJyYXkoZXhlYy0+YXJndW1lbnQoMSkpOwogICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkgICAgCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAg
ICAKQEAgLTYwOSw3ICs2MDksNyBAQCBzdGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbmYo
RGF0YUZ1CiAgICAgfQogCiAgICAgVmVjdG9yPGZsb2F0LCA2ND4gYXJyYXk7Ci0gICAgaWYgKCF0
b1ZlY3RvcihleGVjLCBhcmdzLmF0KDEpLCBhcnJheSkpCisgICAgaWYgKCF0b1ZlY3RvcihleGVj
LCBleGVjLT5hcmd1bWVudCgxKSwgYXJyYXkpKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihl
eGVjLCBUeXBlRXJyb3IpOwogCiAgICAgc3dpdGNoIChmKSB7CkBAIC02NDMsMTcgKzY0MywxNyBA
QCBzdGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbmYoRGF0YUZ1CiAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uaShEYXRh
RnVuY3Rpb25Ub0NhbGwgZiwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6QXJnTGlz
dCYgYXJncywgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQorc3RhdGljIEpTQzo6SlNW
YWx1ZSBkYXRhRnVuY3Rpb25pKERhdGFGdW5jdGlvblRvQ2FsbCBmLCBKU0M6OkV4ZWNTdGF0ZSog
ZXhlYywgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQogewotICAgIGlmIChhcmdzLnNp
emUoKSAhPSAyKQorICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMikKICAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOwogCi0gICAgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uID0gdG9XZWJHTFVuaWZvcm1Mb2NhdGlvbihhcmdzLmF0KDApKTsK
KyAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24gPSB0b1dlYkdMVW5pZm9ybUxvY2F0
aW9uKGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgCi0gICAgUmVmUHRyPElu
dDMyQXJyYXk+IHdlYkdMQXJyYXkgPSB0b0ludDMyQXJyYXkoYXJncy5hdCgxKSk7CisgICAgUmVm
UHRyPEludDMyQXJyYXk+IHdlYkdMQXJyYXkgPSB0b0ludDMyQXJyYXkoZXhlYy0+YXJndW1lbnQo
MSkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgICAgCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogICAgICAgICAKQEAgLTY4Miw3ICs2ODIsNyBAQCBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGRhdGFGdW5jdGlvbmkoRGF0YUZ1CiAKIAogICAgIFZlY3RvcjxpbnQsIDY0PiBhcnJh
eTsKLSAgICBpZiAoIXRvVmVjdG9yKGV4ZWMsIGFyZ3MuYXQoMSksIGFycmF5KSkKKyAgICBpZiAo
IXRvVmVjdG9yKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDEpLCBhcnJheSkpCiAgICAgICAgIHJldHVy
biB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKICAgICBzd2l0Y2ggKGYpIHsKQEAgLTcw
NiwyMSArNzA2LDIxIEBAIHN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uaShEYXRhRnUK
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRh
RnVuY3Rpb25NYXRyaXgoRGF0YUZ1bmN0aW9uTWF0cml4VG9DYWxsIGYsIEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MsIFdlYkdMUmVuZGVyaW5nQ29udGV4dCog
Y29udGV4dCkKK3N0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uTWF0cml4KERhdGFGdW5j
dGlvbk1hdHJpeFRvQ2FsbCBmLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgV2ViR0xSZW5kZXJpbmdD
b250ZXh0KiBjb250ZXh0KQogewotICAgIGlmIChhcmdzLnNpemUoKSAhPSAzKQorICAgIGlmIChl
eGVjLT5hcmd1bWVudENvdW50KCkgIT0gMykKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhl
YywgU3ludGF4RXJyb3IpOwogCi0gICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uID0g
dG9XZWJHTFVuaWZvcm1Mb2NhdGlvbihhcmdzLmF0KDApKTsKKyAgICBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24gPSB0b1dlYkdMVW5pZm9ybUxvY2F0aW9uKGV4ZWMtPmFyZ3VtZW50KDAp
KTsKIAogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgICAgCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogICAgICAgICAKLSAgICBib29sIHRyYW5zcG9zZSA9IGFyZ3MuYXQoMSku
dG9Cb29sZWFuKGV4ZWMpOworICAgIGJvb2wgdHJhbnNwb3NlID0gZXhlYy0+YXJndW1lbnQoMSku
dG9Cb29sZWFuKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgICAgCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICAKLSAgICBSZWZQdHI8RmxvYXRBcnJh
eT4gd2ViR0xBcnJheSA9IHRvRmxvYXRBcnJheShhcmdzLmF0KDIpKTsKKyAgICBSZWZQdHI8Rmxv
YXRBcnJheT4gd2ViR0xBcnJheSA9IHRvRmxvYXRBcnJheShleGVjLT5hcmd1bWVudCgyKSk7CiAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAgICAgICAgIApAQCAtNzQzLDcgKzc0Myw3IEBAIHN0YXRpYyBKU0M6OkpTVmFsdWUg
ZGF0YUZ1bmN0aW9uTWF0cml4KEQKICAgICB9CiAKICAgICBWZWN0b3I8ZmxvYXQsIDY0PiBhcnJh
eTsKLSAgICBpZiAoIXRvVmVjdG9yKGV4ZWMsIGFyZ3MuYXQoMiksIGFycmF5KSkKKyAgICBpZiAo
IXRvVmVjdG9yKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDIpLCBhcnJheSkpCiAgICAgICAgIHJldHVy
biB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKICAgICBzd2l0Y2ggKGYpIHsKQEAgLTc2
Miw3OSArNzYyLDc5IEBAIHN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uTWF0cml4KEQK
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6
OkFyZ0xpc3QmIGFyZ3MpCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVu
aWZvcm0xZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlv
bmYoZl91bmlmb3JtMXYsIGV4ZWMsIGFyZ3MsIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29u
dGV4dCo+KGltcGwoKSkpOworICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdW5pZm9ybTF2LCBl
eGVjLCBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihpbXBsKCkpKTsKIH0KIAot
SlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWl2KEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MpCitKU0M6OkpTVmFsdWUgSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xaXYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCiB7
Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91bmlmb3JtMXYsIGV4ZWMsIGFyZ3MsIHN0YXRp
Y19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KGltcGwoKSkpOworICAgIHJldHVybiBkYXRh
RnVuY3Rpb25pKGZfdW5pZm9ybTF2LCBleGVjLCBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0Nv
bnRleHQqPihpbXBsKCkpKTsKIH0KIAotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp1bmlmb3JtMmZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3Qm
IGFyZ3MpCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZnYo
SlNDOjpFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl91bmlm
b3JtMnYsIGV4ZWMsIGFyZ3MsIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KGlt
cGwoKSkpOworICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdW5pZm9ybTJ2LCBleGVjLCBzdGF0
aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihpbXBsKCkpKTsKIH0KIAotSlNDOjpKU1Zh
bHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMml2KEpTQzo6RXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MpCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnVuaWZvcm0yaXYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0
dXJuIGRhdGFGdW5jdGlvbmkoZl91bmlmb3JtMnYsIGV4ZWMsIGFyZ3MsIHN0YXRpY19jYXN0PFdl
YkdMUmVuZGVyaW5nQ29udGV4dCo+KGltcGwoKSkpOworICAgIHJldHVybiBkYXRhRnVuY3Rpb25p
KGZfdW5pZm9ybTJ2LCBleGVjLCBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihp
bXBsKCkpKTsKIH0KIAotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlm
b3JtM2Z2KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MpCitK
U0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZnYoSlNDOjpFeGVj
U3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl91bmlmb3JtM3YsIGV4
ZWMsIGFyZ3MsIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KGltcGwoKSkpOwor
ICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdW5pZm9ybTN2LCBleGVjLCBzdGF0aWNfY2FzdDxX
ZWJHTFJlbmRlcmluZ0NvbnRleHQqPihpbXBsKCkpKTsKIH0KIAotSlNDOjpKU1ZhbHVlIEpTV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2l2KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25z
dCBKU0M6OkFyZ0xpc3QmIGFyZ3MpCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnVuaWZvcm0zaXYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGRhdGFG
dW5jdGlvbmkoZl91bmlmb3JtM3YsIGV4ZWMsIGFyZ3MsIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVy
aW5nQ29udGV4dCo+KGltcGwoKSkpOworICAgIHJldHVybiBkYXRhRnVuY3Rpb25pKGZfdW5pZm9y
bTN2LCBleGVjLCBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihpbXBsKCkpKTsK
IH0KIAotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGZ2KEpT
Qzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MpCitKU0M6OkpTVmFs
dWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00ZnYoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMpCiB7Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl91bmlmb3JtNHYsIGV4ZWMsIGFyZ3Ms
IHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KGltcGwoKSkpOworICAgIHJldHVy
biBkYXRhRnVuY3Rpb25mKGZfdW5pZm9ybTR2LCBleGVjLCBzdGF0aWNfY2FzdDxXZWJHTFJlbmRl
cmluZ0NvbnRleHQqPihpbXBsKCkpKTsKIH0KIAotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp1bmlmb3JtNGl2KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFy
Z0xpc3QmIGFyZ3MpCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZv
cm00aXYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmko
Zl91bmlmb3JtNHYsIGV4ZWMsIGFyZ3MsIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4
dCo+KGltcGwoKSkpOworICAgIHJldHVybiBkYXRhRnVuY3Rpb25pKGZfdW5pZm9ybTR2LCBleGVj
LCBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihpbXBsKCkpKTsKIH0KIAotSlND
OjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KEpTQzo6
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MpCitKU0M6OkpTVmFsdWUg
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgyZnYoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbk1hdHJpeChmX3VuaWZvcm1NYXRyaXgy
ZnYsIGV4ZWMsIGFyZ3MsIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KGltcGwo
KSkpOworICAgIHJldHVybiBkYXRhRnVuY3Rpb25NYXRyaXgoZl91bmlmb3JtTWF0cml4MmZ2LCBl
eGVjLCBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihpbXBsKCkpKTsKIH0KIAot
SlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4M2Z2KEpT
Qzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MpCitKU0M6OkpTVmFs
dWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgzZnYoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbk1hdHJpeChmX3VuaWZvcm1NYXRy
aXgzZnYsIGV4ZWMsIGFyZ3MsIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KGlt
cGwoKSkpOworICAgIHJldHVybiBkYXRhRnVuY3Rpb25NYXRyaXgoZl91bmlmb3JtTWF0cml4M2Z2
LCBleGVjLCBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihpbXBsKCkpKTsKIH0K
IAotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4NGZ2
KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MpCitKU0M6OkpT
VmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXg0ZnYoSlNDOjpFeGVj
U3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbk1hdHJpeChmX3VuaWZvcm1N
YXRyaXg0ZnYsIGV4ZWMsIGFyZ3MsIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+
KGltcGwoKSkpOworICAgIHJldHVybiBkYXRhRnVuY3Rpb25NYXRyaXgoZl91bmlmb3JtTWF0cml4
NGZ2LCBleGVjLCBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihpbXBsKCkpKTsK
IH0KIAotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIx
ZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncykKK0pTQzo6
SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMWZ2KEpTQzo6RXhl
Y1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVydGV4QXR0cmli
MXYsIGV4ZWMsIGFyZ3MsIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KGltcGwo
KSkpOworICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVydGV4QXR0cmliMXYsIGV4ZWMsIHN0
YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KGltcGwoKSkpOwogfQogCi1KU0M6OkpT
VmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjJmdihKU0M6OkV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzKQorSlNDOjpKU1ZhbHVlIEpTV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIyZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMp
CiB7Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWIydiwgZXhlYywgYXJn
cywgc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4oaW1wbCgpKSk7CisgICAgcmV0
dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWIydiwgZXhlYywgc3RhdGljX2Nhc3Q8V2Vi
R0xSZW5kZXJpbmdDb250ZXh0Kj4oaW1wbCgpKSk7CiB9CiAKLUpTQzo6SlNWYWx1ZSBKU1dlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliM2Z2KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBj
b25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MpCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnZlcnRleEF0dHJpYjNmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1
cm4gZGF0YUZ1bmN0aW9uZihmX3ZlcnRleEF0dHJpYjN2LCBleGVjLCBhcmdzLCBzdGF0aWNfY2Fz
dDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihpbXBsKCkpKTsKKyAgICByZXR1cm4gZGF0YUZ1bmN0
aW9uZihmX3ZlcnRleEF0dHJpYjN2LCBleGVjLCBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0Nv
bnRleHQqPihpbXBsKCkpKTsKIH0KIAotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2ZXJ0ZXhBdHRyaWI0ZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6QXJn
TGlzdCYgYXJncykKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4
QXR0cmliNGZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBkYXRhRnVuY3Rp
b25mKGZfdmVydGV4QXR0cmliNHYsIGV4ZWMsIGFyZ3MsIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVy
aW5nQ29udGV4dCo+KGltcGwoKSkpOworICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVydGV4
QXR0cmliNHYsIGV4ZWMsIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KGltcGwo
KSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTV2ViU29ja2V0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTV2ViU29ja2V0Q3VzdG9tLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTV2ViU29ja2V0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTIg
KzQ1LDEyIEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8v
IEN1c3RvbSBmdW5jdGlvbnMKLUpTVmFsdWUgSlNXZWJTb2NrZXQ6OnNlbmQoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU1dlYlNvY2tldDo6c2VuZChFeGVj
U3RhdGUqIGV4ZWMpCiB7Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMSkKKyAgICBpZiAoZXhlYy0+
YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3lu
dGF4RXJyb3IsICJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpOwogCi0gICAgY29uc3QgU3RyaW5nJiBt
c2cgPSB1c3RyaW5nVG9TdHJpbmcoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSk7CisgICAgY29u
c3QgU3RyaW5nJiBtc2cgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJp
bmcoZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJu
IHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsICJiYWQgbWVzc2FnZSBkYXRhLiIpOwogICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtl
ckNvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNX
b3JrZXJDb250ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSwx
NCArMTA1LDE0IEBAIEpTVmFsdWUgSlNXb3JrZXJDb250ZXh0Ojp3ZWJTb2NrZXQoRXhlY1MKIH0K
ICNlbmRpZgogCi1KU1ZhbHVlIEpTV29ya2VyQ29udGV4dDo6aW1wb3J0U2NyaXB0cyhFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTV29ya2VyQ29udGV4dDo6
aW1wb3J0U2NyaXB0cyhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgaWYgKCFhcmdzLnNpemUoKSkK
KyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAKICAgICBWZWN0b3I8U3RyaW5nPiB1cmxzOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBhcmdzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIHVybHMuYXBwZW5kKHVzdHJpbmdU
b1N0cmluZyhhcmdzLmF0KGkpLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsgaSsrKSB7CisgICAgICAgIHVybHMuYXBw
ZW5kKHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudChpKS50b1N0cmluZyhleGVjKSkpOwog
ICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgICB9CkBAIC0xMjMsMjEgKzEyMywyMSBAQCBKU1ZhbHVlIEpTV29ya2Vy
Q29udGV4dDo6aW1wb3J0U2NyaXB0cyhFCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAK
LUpTVmFsdWUgSlNXb3JrZXJDb250ZXh0OjpzZXRUaW1lb3V0KEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNXb3JrZXJDb250ZXh0OjpzZXRUaW1lb3V0KEV4
ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBPd25QdHI8U2NoZWR1bGVkQWN0aW9uPiBhY3Rpb24gPSBT
Y2hlZHVsZWRBY3Rpb246OmNyZWF0ZShleGVjLCBhcmdzLCBjdXJyZW50V29ybGQoZXhlYykpOwor
ICAgIE93blB0cjxTY2hlZHVsZWRBY3Rpb24+IGFjdGlvbiA9IFNjaGVkdWxlZEFjdGlvbjo6Y3Jl
YXRlKGV4ZWMsIGN1cnJlbnRXb3JsZChleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBpbnQgZGVsYXkgPSBhcmdz
LmF0KDEpLnRvSW50MzIoZXhlYyk7CisgICAgaW50IGRlbGF5ID0gZXhlYy0+YXJndW1lbnQoMSku
dG9JbnQzMihleGVjKTsKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgaW1wbCgpLT5zZXRUaW1l
b3V0KGFjdGlvbi5yZWxlYXNlKCksIGRlbGF5KSk7CiB9CiAKLUpTVmFsdWUgSlNXb3JrZXJDb250
ZXh0OjpzZXRJbnRlcnZhbChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitK
U1ZhbHVlIEpTV29ya2VyQ29udGV4dDo6c2V0SW50ZXJ2YWwoRXhlY1N0YXRlKiBleGVjKQogewot
ICAgIE93blB0cjxTY2hlZHVsZWRBY3Rpb24+IGFjdGlvbiA9IFNjaGVkdWxlZEFjdGlvbjo6Y3Jl
YXRlKGV4ZWMsIGFyZ3MsIGN1cnJlbnRXb3JsZChleGVjKSk7CisgICAgT3duUHRyPFNjaGVkdWxl
ZEFjdGlvbj4gYWN0aW9uID0gU2NoZWR1bGVkQWN0aW9uOjpjcmVhdGUoZXhlYywgY3VycmVudFdv
cmxkKGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwotICAgIGludCBkZWxheSA9IGFyZ3MuYXQoMSkudG9JbnQzMihleGVj
KTsKKyAgICBpbnQgZGVsYXkgPSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwogICAg
IHJldHVybiBqc051bWJlcihleGVjLCBpbXBsKCktPnNldEludGVydmFsKGFjdGlvbi5yZWxlYXNl
KCksIGRlbGF5KSk7CiB9CiAKQEAgLTE1MCwzOCArMTUwLDM4IEBAIEpTVmFsdWUgSlNXb3JrZXJD
b250ZXh0OjptZXNzYWdlQ2hhbm5lbCgKICNlbmRpZgogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQot
SlNWYWx1ZSBKU1dvcmtlckNvbnRleHQ6Om9wZW5EYXRhYmFzZShFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpIAorSlNWYWx1ZSBKU1dvcmtlckNvbnRleHQ6Om9wZW5EYXRhYmFz
ZShFeGVjU3RhdGUqIGV4ZWMpIAogeyAKLSAgICBpZiAoYXJncy5zaXplKCkgPCA0KSB7CisgICAg
aWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDQpIHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9u
KGV4ZWMsIFNZTlRBWF9FUlIpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9
CiAKLSAgICBTdHJpbmcgbmFtZSA9IHVzdHJpbmdUb1N0cmluZyhhcmdzLmF0KDApLnRvU3RyaW5n
KGV4ZWMpKTsKKyAgICBTdHJpbmcgbmFtZSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVu
dCgwKS50b1N0cmluZyhleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIFN0cmluZyB2ZXJzaW9uID0gdXN0cmlu
Z1RvU3RyaW5nKGFyZ3MuYXQoMSkudG9TdHJpbmcoZXhlYykpOworICAgIFN0cmluZyB2ZXJzaW9u
ID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpKTsKICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogCi0gICAgU3RyaW5nIGRpc3BsYXlOYW1lID0gdXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQoMiku
dG9TdHJpbmcoZXhlYykpOworICAgIFN0cmluZyBkaXNwbGF5TmFtZSA9IHVzdHJpbmdUb1N0cmlu
ZyhleGVjLT5hcmd1bWVudCgyKS50b1N0cmluZyhleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIC8vIGFyZ3Mu
YXQoMykgPSBlc3RpbWF0ZWQgc2l6ZQotICAgIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSA9
IGFyZ3MuYXQoMykudG9VSW50MzIoZXhlYyk7CisgICAgLy8gZXhlYy0+YXJndW1lbnQoMykgPSBl
c3RpbWF0ZWQgc2l6ZQorICAgIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSA9IGV4ZWMtPmFy
Z3VtZW50KDMpLnRvVUludDMyKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBSZWZQdHI8RGF0YWJhc2VDYWxs
YmFjaz4gY3JlYXRpb25DYWxsYmFjazsKLSAgICBpZiAoYXJncy5zaXplKCkgPj0gNSkgewotICAg
ICAgICBpZiAoIWFyZ3MuYXQoNCkuaXNPYmplY3QoKSkgeworICAgIGlmIChleGVjLT5hcmd1bWVu
dENvdW50KCkgPj0gNSkgeworICAgICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDQpLmlzT2JqZWN0
KCkpIHsKICAgICAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VS
Uik7CiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgfQogCi0gICAg
ICAgIGNyZWF0aW9uQ2FsbGJhY2sgPSBKU0RhdGFiYXNlQ2FsbGJhY2s6OmNyZWF0ZShhc09iamVj
dChhcmdzLmF0KDQpKSwgZ2xvYmFsT2JqZWN0KCkpOworICAgICAgICBjcmVhdGlvbkNhbGxiYWNr
ID0gSlNEYXRhYmFzZUNhbGxiYWNrOjpjcmVhdGUoYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoNCkp
LCBnbG9iYWxPYmplY3QoKSk7CiAgICAgfQogIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOyAK
QEAgLTE5MCwzOCArMTkwLDM4IEBAIEpTVmFsdWUgSlNXb3JrZXJDb250ZXh0OjpvcGVuRGF0YWJh
c2UoRXgKICAgICByZXR1cm4gcmVzdWx0OyAKIH0gCiAgCi1KU1ZhbHVlIEpTV29ya2VyQ29udGV4
dDo6b3BlbkRhdGFiYXNlU3luYyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CitKU1ZhbHVlIEpTV29ya2VyQ29udGV4dDo6b3BlbkRhdGFiYXNlU3luYyhFeGVjU3RhdGUqIGV4
ZWMpCiB7Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpIDwgNCkgeworICAgIGlmIChleGVjLT5hcmd1bWVu
dENvdW50KCkgPCA0KSB7CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBTWU5UQVhfRVJS
KTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAgU3RyaW5nIG5h
bWUgPSB1c3RyaW5nVG9TdHJpbmcoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSk7CisgICAgU3Ry
aW5nIG5hbWUgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhl
YykpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAKLSAgICBTdHJpbmcgdmVyc2lvbiA9IHVzdHJpbmdUb1N0cmluZyhhcmdzLmF0
KDEpLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBTdHJpbmcgdmVyc2lvbiA9IHVzdHJpbmdUb1N0cmlu
ZyhleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIFN0cmluZyBk
aXNwbGF5TmFtZSA9IHVzdHJpbmdUb1N0cmluZyhhcmdzLmF0KDIpLnRvU3RyaW5nKGV4ZWMpKTsK
KyAgICBTdHJpbmcgZGlzcGxheU5hbWUgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQo
MikudG9TdHJpbmcoZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICAvLyBhcmdzLmF0KDMpID0gZXN0aW1hdGVk
IHNpemUKLSAgICB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUgPSBhcmdzLmF0KDMpLnRvVUlu
dDMyKGV4ZWMpOworICAgIC8vIGV4ZWMtPmFyZ3VtZW50KDMpID0gZXN0aW1hdGVkIHNpemUKKyAg
ICB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUgPSBleGVjLT5hcmd1bWVudCgzKS50b1VJbnQz
MihleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogCiAgICAgUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2Fs
bGJhY2s7Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpID49IDUpIHsKLSAgICAgICAgaWYgKCFhcmdzLmF0
KDQpLmlzT2JqZWN0KCkpIHsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDUpIHsK
KyAgICAgICAgaWYgKCFleGVjLT5hcmd1bWVudCg0KS5pc09iamVjdCgpKSB7CiAgICAgICAgICAg
ICBzZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOwogICAgICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIH0KIAotICAgICAgICBjcmVhdGlvbkNhbGxi
YWNrID0gSlNEYXRhYmFzZUNhbGxiYWNrOjpjcmVhdGUoYXNPYmplY3QoYXJncy5hdCg0KSksIGds
b2JhbE9iamVjdCgpKTsKKyAgICAgICAgY3JlYXRpb25DYWxsYmFjayA9IEpTRGF0YWJhc2VDYWxs
YmFjazo6Y3JlYXRlKGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDQpKSwgZ2xvYmFsT2JqZWN0KCkp
OwogICAgIH0KIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dvcmtlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1dvcmtlckN1c3RvbS5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dvcmtlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDkgKzM3LDkg
QEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU0M6OkpT
VmFsdWUgSlNXb3JrZXI6OnBvc3RNZXNzYWdlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBK
U0M6OkFyZ0xpc3QmIGFyZ3MpCitKU0M6OkpTVmFsdWUgSlNXb3JrZXI6OnBvc3RNZXNzYWdlKEpT
Qzo6RXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBoYW5kbGVQb3N0TWVzc2FnZShleGVj
LCBhcmdzLCBpbXBsKCkpOworICAgIHJldHVybiBoYW5kbGVQb3N0TWVzc2FnZShleGVjLCBpbXBs
KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysg
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjIsMjMgKzYyLDIzIEBAIHZvaWQgSlNYTUxIdHRwUmVxdWVzdDo6bWFya0NoaWxk
cmVuKE1hcmsKIH0KIAogLy8gQ3VzdG9tIGZ1bmN0aW9ucwotSlNWYWx1ZSBKU1hNTEh0dHBSZXF1
ZXN0OjpvcGVuKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUg
SlNYTUxIdHRwUmVxdWVzdDo6b3BlbihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgaWYgKGFyZ3Mu
c2l6ZSgpIDwgMikKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMikKICAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsICJOb3QgZW5vdWdoIGFyZ3VtZW50
cyIpOwogCi0gICAgY29uc3QgS1VSTCYgdXJsID0gaW1wbCgpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCktPmNvbXBsZXRlVVJMKHVzdHJpbmdUb1N0cmluZyhhcmdzLmF0KDEpLnRvU3RyaW5nKGV4
ZWMpKSk7Ci0gICAgU3RyaW5nIG1ldGhvZCA9IHVzdHJpbmdUb1N0cmluZyhhcmdzLmF0KDApLnRv
U3RyaW5nKGV4ZWMpKTsKKyAgICBjb25zdCBLVVJMJiB1cmwgPSBpbXBsKCktPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKS0+Y29tcGxldGVVUkwodXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50
KDEpLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgU3RyaW5nIG1ldGhvZCA9IHVzdHJpbmdUb1N0cmlu
ZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSk7CiAKICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKLSAgICBpZiAoYXJncy5zaXplKCkgPj0gMykgewotICAgICAgICBib29sIGFzeW5j
ID0gYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYyk7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291
bnQoKSA+PSAzKSB7CisgICAgICAgIGJvb2wgYXN5bmMgPSBleGVjLT5hcmd1bWVudCgyKS50b0Jv
b2xlYW4oZXhlYyk7CiAKLSAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpID49IDQgJiYgIWFyZ3MuYXQo
MykuaXNVbmRlZmluZWQoKSkgewotICAgICAgICAgICAgU3RyaW5nIHVzZXIgPSB2YWx1ZVRvU3Ry
aW5nV2l0aE51bGxDaGVjayhleGVjLCBhcmdzLmF0KDMpKTsKKyAgICAgICAgaWYgKGV4ZWMtPmFy
Z3VtZW50Q291bnQoKSA+PSA0ICYmICFleGVjLT5hcmd1bWVudCgzKS5pc1VuZGVmaW5lZCgpKSB7
CisgICAgICAgICAgICBTdHJpbmcgdXNlciA9IHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4
ZWMsIGV4ZWMtPmFyZ3VtZW50KDMpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGFy
Z3Muc2l6ZSgpID49IDUgJiYgIWFyZ3MuYXQoNCkuaXNVbmRlZmluZWQoKSkgewotICAgICAgICAg
ICAgICAgIFN0cmluZyBwYXNzd29yZCA9IHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMs
IGFyZ3MuYXQoNCkpOworICAgICAgICAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSA1
ICYmICFleGVjLT5hcmd1bWVudCg0KS5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgICAgICAgICAg
U3RyaW5nIHBhc3N3b3JkID0gdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgZXhlYy0+
YXJndW1lbnQoNCkpOwogICAgICAgICAgICAgICAgIGltcGwoKS0+b3BlbihtZXRob2QsIHVybCwg
YXN5bmMsIHVzZXIsIHBhc3N3b3JkLCBlYyk7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAg
ICAgICAgICBpbXBsKCktPm9wZW4obWV0aG9kLCB1cmwsIGFzeW5jLCB1c2VyLCBlYyk7CkBAIC05
MSwxMyArOTEsMTMgQEAgSlNWYWx1ZSBKU1hNTEh0dHBSZXF1ZXN0OjpvcGVuKEV4ZWNTdGF0ZQog
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlIEpTWE1MSHR0cFJlcXVlc3Q6
OnNlbmQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU1hN
TEh0dHBSZXF1ZXN0OjpzZW5kKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKLSAgICBpZiAoYXJncy5pc0VtcHR5KCkpCisgICAgaWYgKCFleGVjLT5hcmd1bWVu
dENvdW50KCkpCiAgICAgICAgIGltcGwoKS0+c2VuZChlYyk7CiAgICAgZWxzZSB7Ci0gICAgICAg
IEpTVmFsdWUgdmFsID0gYXJncy5hdCgwKTsKKyAgICAgICAgSlNWYWx1ZSB2YWwgPSBleGVjLT5h
cmd1bWVudCgwKTsKICAgICAgICAgaWYgKHZhbC5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAg
ICAgICAgaW1wbCgpLT5zZW5kKGVjKTsKICAgICAgICAgZWxzZSBpZiAodmFsLmluaGVyaXRzKCZK
U0RvY3VtZW50OjpzX2luZm8pKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hTTFRQcm9j
ZXNzb3JDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNYU0xU
UHJvY2Vzc29yQ3VzdG9tLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTWFNMVFByb2Nlc3NvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDkgKzQ2
LDkgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1Zh
bHVlIEpTWFNMVFByb2Nlc3Nvcjo6aW1wb3J0U3R5bGVzaGVldChFeGVjU3RhdGUqLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU1hTTFRQcm9jZXNzb3I6OmltcG9ydFN0eWxlc2hlZXQo
RXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTVmFsdWUgbm9kZVZhbCA9IGFyZ3MuYXQoMCk7Cisg
ICAgSlNWYWx1ZSBub2RlVmFsID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKG5vZGVWYWwu
aW5oZXJpdHMoJkpTTm9kZTo6c19pbmZvKSkgewogICAgICAgICBKU05vZGUqIG5vZGUgPSBzdGF0
aWNfY2FzdDxKU05vZGUqPihhc09iamVjdChub2RlVmFsKSk7CiAgICAgICAgIGltcGwoKS0+aW1w
b3J0U3R5bGVzaGVldChub2RlLT5pbXBsKCkpOwpAQCAtNTgsMTAgKzU4LDEwIEBAIEpTVmFsdWUg
SlNYU0xUUHJvY2Vzc29yOjppbXBvcnRTdHlsZXNoZWUKICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIH0KIAotSlNWYWx1ZSBKU1hTTFRQcm9jZXNzb3I6OnRyYW5zZm9ybVRvRnJhZ21lbnQoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU1hTTFRQcm9jZXNz
b3I6OnRyYW5zZm9ybVRvRnJhZ21lbnQoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTVmFsdWUg
bm9kZVZhbCA9IGFyZ3MuYXQoMCk7Ci0gICAgSlNWYWx1ZSBkb2NWYWwgPSBhcmdzLmF0KDEpOwor
ICAgIEpTVmFsdWUgbm9kZVZhbCA9IGV4ZWMtPmFyZ3VtZW50KDApOworICAgIEpTVmFsdWUgZG9j
VmFsID0gZXhlYy0+YXJndW1lbnQoMSk7CiAgICAgaWYgKG5vZGVWYWwuaW5oZXJpdHMoJkpTTm9k
ZTo6c19pbmZvKSAmJiBkb2NWYWwuaW5oZXJpdHMoJkpTRG9jdW1lbnQ6OnNfaW5mbykpIHsKICAg
ICAgICAgV2ViQ29yZTo6Tm9kZSogbm9kZSA9IHN0YXRpY19jYXN0PEpTTm9kZSo+KGFzT2JqZWN0
KG5vZGVWYWwpKS0+aW1wbCgpOwogICAgICAgICBEb2N1bWVudCogZG9jID0gc3RhdGljX2Nhc3Q8
RG9jdW1lbnQqPihzdGF0aWNfY2FzdDxKU0RvY3VtZW50Kj4oYXNPYmplY3QoZG9jVmFsKSktPmlt
cGwoKSk7CkBAIC03MSw5ICs3MSw5IEBAIEpTVmFsdWUgSlNYU0xUUHJvY2Vzc29yOjp0cmFuc2Zv
cm1Ub0ZyYWcKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBKU1hTTFRQ
cm9jZXNzb3I6OnRyYW5zZm9ybVRvRG9jdW1lbnQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQorSlNWYWx1ZSBKU1hTTFRQcm9jZXNzb3I6OnRyYW5zZm9ybVRvRG9jdW1lbnQo
RXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTVmFsdWUgbm9kZVZhbCA9IGFyZ3MuYXQoMCk7Cisg
ICAgSlNWYWx1ZSBub2RlVmFsID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKG5vZGVWYWwu
aW5oZXJpdHMoJkpTTm9kZTo6c19pbmZvKSkgewogICAgICAgICBKU05vZGUqIG5vZGUgPSBzdGF0
aWNfY2FzdDxKU05vZGUqPihhc09iamVjdChub2RlVmFsKSk7CiAgICAgICAgIFJlZlB0cjxEb2N1
bWVudD4gcmVzdWx0RG9jdW1lbnQgPSBpbXBsKCktPnRyYW5zZm9ybVRvRG9jdW1lbnQobm9kZS0+
aW1wbCgpKTsKQEAgLTg1LDMzICs4NSwzMyBAQCBKU1ZhbHVlIEpTWFNMVFByb2Nlc3Nvcjo6dHJh
bnNmb3JtVG9Eb2N1CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNY
U0xUUHJvY2Vzc29yOjpzZXRQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQorSlNWYWx1ZSBKU1hTTFRQcm9jZXNzb3I6OnNldFBhcmFtZXRlcihFeGVjU3RhdGUq
IGV4ZWMpCiB7Ci0gICAgaWYgKGFyZ3MuYXQoMSkuaXNVbmRlZmluZWRPck51bGwoKSB8fCBhcmdz
LmF0KDIpLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50KDEpLmlz
VW5kZWZpbmVkT3JOdWxsKCkgfHwgZXhlYy0+YXJndW1lbnQoMikuaXNVbmRlZmluZWRPck51bGwo
KSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7IC8vIFRocm93IGV4Y2VwdGlvbj8KLSAg
ICBTdHJpbmcgbmFtZXNwYWNlVVJJID0gdXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQoMCkudG9TdHJp
bmcoZXhlYykpOwotICAgIFN0cmluZyBsb2NhbE5hbWUgPSB1c3RyaW5nVG9TdHJpbmcoYXJncy5h
dCgxKS50b1N0cmluZyhleGVjKSk7Ci0gICAgU3RyaW5nIHZhbHVlID0gdXN0cmluZ1RvU3RyaW5n
KGFyZ3MuYXQoMikudG9TdHJpbmcoZXhlYykpOworICAgIFN0cmluZyBuYW1lc3BhY2VVUkkgPSB1
c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpOworICAgIFN0
cmluZyBsb2NhbE5hbWUgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMSkudG9TdHJp
bmcoZXhlYykpOworICAgIFN0cmluZyB2YWx1ZSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1
bWVudCgyKS50b1N0cmluZyhleGVjKSk7CiAgICAgaW1wbCgpLT5zZXRQYXJhbWV0ZXIobmFtZXNw
YWNlVVJJLCBsb2NhbE5hbWUsIHZhbHVlKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0K
IAotSlNWYWx1ZSBKU1hTTFRQcm9jZXNzb3I6OmdldFBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTWFNMVFByb2Nlc3Nvcjo6Z2V0UGFyYW1l
dGVyKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBpZiAoYXJncy5hdCgxKS5pc1VuZGVmaW5lZE9y
TnVsbCgpKQorICAgIGlmIChleGVjLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBTdHJpbmcgbmFtZXNwYWNlVVJJID0g
dXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpOwotICAgIFN0cmluZyBs
b2NhbE5hbWUgPSB1c3RyaW5nVG9TdHJpbmcoYXJncy5hdCgxKS50b1N0cmluZyhleGVjKSk7Cisg
ICAgU3RyaW5nIG5hbWVzcGFjZVVSSSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgw
KS50b1N0cmluZyhleGVjKSk7CisgICAgU3RyaW5nIGxvY2FsTmFtZSA9IHVzdHJpbmdUb1N0cmlu
ZyhleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKSk7CiAgICAgU3RyaW5nIHZhbHVlID0g
aW1wbCgpLT5nZXRQYXJhbWV0ZXIobmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpOwogICAgIHJldHVy
biBqc1N0cmluZ09yVW5kZWZpbmVkKGV4ZWMsIHZhbHVlKTsKIH0KIAotSlNWYWx1ZSBKU1hTTFRQ
cm9jZXNzb3I6OnJlbW92ZVBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCitKU1ZhbHVlIEpTWFNMVFByb2Nlc3Nvcjo6cmVtb3ZlUGFyYW1ldGVyKEV4ZWNTdGF0
ZSogZXhlYykKIHsKLSAgICBpZiAoYXJncy5hdCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAg
IGlmIChleGVjLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKLSAgICBTdHJpbmcgbmFtZXNwYWNlVVJJID0gdXN0cmluZ1RvU3Ry
aW5nKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpOwotICAgIFN0cmluZyBsb2NhbE5hbWUgPSB1
c3RyaW5nVG9TdHJpbmcoYXJncy5hdCgxKS50b1N0cmluZyhleGVjKSk7CisgICAgU3RyaW5nIG5h
bWVzcGFjZVVSSSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhl
eGVjKSk7CisgICAgU3RyaW5nIGxvY2FsTmFtZSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1
bWVudCgxKS50b1N0cmluZyhleGVjKSk7CiAgICAgaW1wbCgpLT5yZW1vdmVQYXJhbWV0ZXIobmFt
ZXNwYWNlVVJJLCBsb2NhbE5hbWUpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcAkocmV2aXNpb24gNjAzNDEp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ3LDkgKzQ3LDkgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1QYXNzT3duUHRyPFNjaGVkdWxlZEFjdGlvbj4gU2NoZWR1bGVkQWN0aW9uOjpj
cmVhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBET01XcmFwcGVyV29y
bGQqIGlzb2xhdGVkV29ybGQpCitQYXNzT3duUHRyPFNjaGVkdWxlZEFjdGlvbj4gU2NoZWR1bGVk
QWN0aW9uOjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBET01XcmFwcGVyV29ybGQqIGlzb2xhdGVk
V29ybGQpCiB7Ci0gICAgSlNWYWx1ZSB2ID0gYXJncy5hdCgwKTsKKyAgICBKU1ZhbHVlIHYgPSBl
eGVjLT5hcmd1bWVudCgwKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBpZiAodi5nZXRD
YWxsRGF0YShjYWxsRGF0YSkgPT0gQ2FsbFR5cGVOb25lKSB7CiAgICAgICAgIFVTdHJpbmcgc3Ry
aW5nID0gdi50b1N0cmluZyhleGVjKTsKQEAgLTU3LDE4ICs1NywxOCBAQCBQYXNzT3duUHRyPFNj
aGVkdWxlZEFjdGlvbj4gU2NoZWR1bGVkQWN0CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAg
ICAgcmV0dXJuIG5ldyBTY2hlZHVsZWRBY3Rpb24odXN0cmluZ1RvU3RyaW5nKHN0cmluZyksIGlz
b2xhdGVkV29ybGQpOwogICAgIH0KLSAgICBBcmdMaXN0IGFyZ3NUYWlsOwotICAgIGFyZ3MuZ2V0
U2xpY2UoMiwgYXJnc1RhaWwpOwotICAgIHJldHVybiBuZXcgU2NoZWR1bGVkQWN0aW9uKHYsIGFy
Z3NUYWlsLCBpc29sYXRlZFdvcmxkKTsKKworICAgIHJldHVybiBuZXcgU2NoZWR1bGVkQWN0aW9u
KGV4ZWMsIHYsIGlzb2xhdGVkV29ybGQpOwogfQogCi1TY2hlZHVsZWRBY3Rpb246OlNjaGVkdWxl
ZEFjdGlvbihKU1ZhbHVlIGZ1bmN0aW9uLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBET01XcmFwcGVy
V29ybGQqIGlzb2xhdGVkV29ybGQpCitTY2hlZHVsZWRBY3Rpb246OlNjaGVkdWxlZEFjdGlvbihF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgZnVuY3Rpb24sIERPTVdyYXBwZXJXb3JsZCogaXNvbGF0
ZWRXb3JsZCkKICAgICA6IG1fZnVuY3Rpb24oZnVuY3Rpb24pCiAgICAgLCBtX2lzb2xhdGVkV29y
bGQoaXNvbGF0ZWRXb3JsZCkKIHsKLSAgICBBcmdMaXN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBh
cmdzLmVuZCgpOwotICAgIGZvciAoQXJnTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhcmdzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgbV9hcmdzLmFwcGVuZCgqaXQpOworICAg
IC8vIHNldFRpbWVvdXQoZnVuY3Rpb24sIGludGVydmFsLCBhcmcwLCBhcmcxLi4uKS4KKyAgICAv
LyBTdGFydCBhdCAyIHRvIHNraXAgZnVuY3Rpb24gYW5kIGludGVydmFsLgorICAgIGZvciAoc2l6
ZV90IGkgPSAyOyBpIDwgZXhlYy0+YXJndW1lbnRDb3VudCgpOyArK2kpCisgICAgICAgIG1fYXJn
cy5hcHBlbmQoZXhlYy0+YXJndW1lbnQoaSkpOwogfQogCiB2b2lkIFNjaGVkdWxlZEFjdGlvbjo6
ZXhlY3V0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5oCShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDEyICs0Mywx
MiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgKi8KICAgICBjbGFzcyBTY2hlZHVsZWRBY3Rp
b24gOiBwdWJsaWMgTm9uY29weWFibGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBh
c3NPd25QdHI8U2NoZWR1bGVkQWN0aW9uPiBjcmVhdGUoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBK
U0M6OkFyZ0xpc3QmLCBET01XcmFwcGVyV29ybGQqIGlzb2xhdGVkV29ybGQpOworICAgICAgICBz
dGF0aWMgUGFzc093blB0cjxTY2hlZHVsZWRBY3Rpb24+IGNyZWF0ZShKU0M6OkV4ZWNTdGF0ZSos
IERPTVdyYXBwZXJXb3JsZCogaXNvbGF0ZWRXb3JsZCk7CiAKICAgICAgICAgdm9pZCBleGVjdXRl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFNjaGVk
dWxlZEFjdGlvbihKU0M6OkpTVmFsdWUgZnVuY3Rpb24sIGNvbnN0IEpTQzo6QXJnTGlzdCYsIERP
TVdyYXBwZXJXb3JsZCogaXNvbGF0ZWRXb3JsZCk7CisgICAgICAgIFNjaGVkdWxlZEFjdGlvbihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSBmdW5jdGlvbiwgRE9NV3JhcHBlcldvcmxkKiBp
c29sYXRlZFdvcmxkKTsKICAgICAgICAgU2NoZWR1bGVkQWN0aW9uKGNvbnN0IFN0cmluZyYgY29k
ZSwgRE9NV3JhcHBlcldvcmxkKiBpc29sYXRlZFdvcmxkKQogICAgICAgICAgICAgOiBtX2NvZGUo
Y29kZSkKICAgICAgICAgICAgICwgbV9pc29sYXRlZFdvcmxkKGlzb2xhdGVkV29ybGQpCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWxsRnJhbWUuY3BwCShyZXZpc2lvbiA2MDM0MSkK
KysrIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzgsMTQgKzM4LDE2IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotU2NyaXB0Q2FsbEZyYW1lOjpTY3JpcHRDYWxsRnJhbWUoY29uc3QgVVN0cmlu
ZyYgZnVuY3Rpb25OYW1lLCBjb25zdCBVU3RyaW5nJiB1cmxTdHJpbmcsIGludCBsaW5lTnVtYmVy
LCBjb25zdCBBcmdMaXN0JiBhcmdzLCB1bnNpZ25lZCBza2lwQXJndW1lbnRDb3VudCkKK1Njcmlw
dENhbGxGcmFtZTo6U2NyaXB0Q2FsbEZyYW1lKGNvbnN0IFVTdHJpbmcmIGZ1bmN0aW9uTmFtZSwg
Y29uc3QgVVN0cmluZyYgdXJsU3RyaW5nLCBpbnQgbGluZU51bWJlciwgRXhlY1N0YXRlKiBleGVj
LCB1bnNpZ25lZCBza2lwQXJndW1lbnRDb3VudCkKICAgICA6IG1fZnVuY3Rpb25OYW1lKGZ1bmN0
aW9uTmFtZSkKICAgICAsIG1fc291cmNlVVJMKFBhcnNlZFVSTFN0cmluZywgdXN0cmluZ1RvU3Ry
aW5nKHVybFN0cmluZykpCiAgICAgLCBtX2xpbmVOdW1iZXIobGluZU51bWJlcikKIHsKLSAgICBz
aXplX3QgYXJndW1lbnRDb3VudCA9IGFyZ3Muc2l6ZSgpOworICAgIGlmICghZXhlYykKKyAgICAg
ICAgcmV0dXJuOworICAgIHNpemVfdCBhcmd1bWVudENvdW50ID0gZXhlYy0+YXJndW1lbnRDb3Vu
dCgpOwogICAgIGZvciAoc2l6ZV90IGkgPSBza2lwQXJndW1lbnRDb3VudDsgaSA8IGFyZ3VtZW50
Q291bnQ7ICsraSkKLSAgICAgICAgbV9hcmd1bWVudHMuYXBwZW5kKFNjcmlwdFZhbHVlKGFyZ3Mu
YXQoaSkpKTsKKyAgICAgICAgbV9hcmd1bWVudHMuYXBwZW5kKFNjcmlwdFZhbHVlKGV4ZWMtPmFy
Z3VtZW50KGkpKSk7CiB9CiAKIFNjcmlwdENhbGxGcmFtZTo6flNjcmlwdENhbGxGcmFtZSgpCklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhbGxGcmFtZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FsbEZyYW1lLmgJKHJldmlzaW9uIDYwMzQxKQor
KysgV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWxsRnJhbWUuaAkod29ya2luZyBjb3B5KQpA
QCAtNTAsNyArNTAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgLy8gPGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTE4MD4KICAgICBjbGFzcyBTY3JpcHRDYWxs
RnJhbWUgIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFNjcmlwdENhbGxGcmFtZShjb25zdCBKU0M6
OlVTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgY29uc3QgSlNDOjpVU3RyaW5nJiB1cmxTdHJpbmcsIGlu
dCBsaW5lTnVtYmVyLCBjb25zdCBKU0M6OkFyZ0xpc3QmLCB1bnNpZ25lZCBza2lwQXJndW1lbnRD
b3VudCk7CisgICAgICAgIFNjcmlwdENhbGxGcmFtZShjb25zdCBKU0M6OlVTdHJpbmcmIGZ1bmN0
aW9uTmFtZSwgY29uc3QgSlNDOjpVU3RyaW5nJiB1cmxTdHJpbmcsIGludCBsaW5lTnVtYmVyLCBK
U0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHNraXBBcmd1bWVudENvdW50KTsKICAgICAgICAgflNj
cmlwdENhbGxGcmFtZSgpOwogCiAgICAgICAgIGNvbnN0IFNjcmlwdFN0cmluZyYgZnVuY3Rpb25O
YW1lKCkgY29uc3QgeyByZXR1cm4gbV9mdW5jdGlvbk5hbWU7IH0KSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0Q2FsbFN0YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdENhbGxTdGFjay5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHRDYWxsU3RhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0
Miw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU2Ny
aXB0Q2FsbFN0YWNrOjpTY3JpcHRDYWxsU3RhY2soRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdM
aXN0JiBhcmdzLCB1bnNpZ25lZCBza2lwQXJndW1lbnRDb3VudCkKK1NjcmlwdENhbGxTdGFjazo6
U2NyaXB0Q2FsbFN0YWNrKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgc2tpcEFyZ3VtZW50Q291
bnQpCiAgICAgOiBtX2luaXRpYWxpemVkKGZhbHNlKQogICAgICwgbV9leGVjKGV4ZWMpCiAgICAg
LCBtX2NhbGxlcigwKQpAQCAtNTgsMTEgKzU4LDExIEBAIFNjcmlwdENhbGxTdGFjazo6U2NyaXB0
Q2FsbFN0YWNrKEV4ZWNTdGEKIAogICAgIGlmIChmdW5jdGlvbikgewogICAgICAgICBtX2NhbGxl
ciA9IGFzRnVuY3Rpb24oZnVuY3Rpb24pOwotICAgICAgICBtX2ZyYW1lcy5hcHBlbmQoU2NyaXB0
Q2FsbEZyYW1lKG1fY2FsbGVyLT5uYW1lKG1fZXhlYyksIHVybFN0cmluZywgbGluZU51bWJlciwg
YXJncywgc2tpcEFyZ3VtZW50Q291bnQpKTsKKyAgICAgICAgbV9mcmFtZXMuYXBwZW5kKFNjcmlw
dENhbGxGcmFtZShtX2NhbGxlci0+bmFtZShtX2V4ZWMpLCB1cmxTdHJpbmcsIGxpbmVOdW1iZXIs
IG1fZXhlYywgc2tpcEFyZ3VtZW50Q291bnQpKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBD
YWxsZXIgaXMgdW5rbm93biwgYnV0IHdlIHNob3VsZCBzdGlsbCBhZGQgdGhlIGZyYW1lLCBiZWNh
dXNlCiAgICAgICAgIC8vIHNvbWV0aGluZyBjYWxsZWQgdXMsIGFuZCBnYXZlIHVzIGFyZ3VtZW50
cy4KLSAgICAgICAgbV9mcmFtZXMuYXBwZW5kKFNjcmlwdENhbGxGcmFtZShVU3RyaW5nKCksIHVy
bFN0cmluZywgbGluZU51bWJlciwgYXJncywgc2tpcEFyZ3VtZW50Q291bnQpKTsKKyAgICAgICAg
bV9mcmFtZXMuYXBwZW5kKFNjcmlwdENhbGxGcmFtZShVU3RyaW5nKCksIHVybFN0cmluZywgbGlu
ZU51bWJlciwgbV9leGVjLCBza2lwQXJndW1lbnRDb3VudCkpOwogICAgIH0KIH0KIApAQCAtOTQs
OCArOTQsNyBAQCB2b2lkIFNjcmlwdENhbGxTdGFjazo6aW5pdGlhbGl6ZSgpCiAgICAgSlNWYWx1
ZSBmdW5jID0gbV9leGVjLT5pbnRlcnByZXRlcigpLT5yZXRyaWV2ZUNhbGxlcihtX2V4ZWMsIG1f
Y2FsbGVyKTsKICAgICB3aGlsZSAoIWZ1bmMuaXNOdWxsKCkpIHsKICAgICAgICAgSlNGdW5jdGlv
bioganNGdW5jdGlvbiA9IGFzRnVuY3Rpb24oZnVuYyk7Ci0gICAgICAgIEFyZ0xpc3QgZW1wdHlB
cmdMaXN0OwotICAgICAgICBtX2ZyYW1lcy5hcHBlbmQoU2NyaXB0Q2FsbEZyYW1lKGpzRnVuY3Rp
b24tPm5hbWUobV9leGVjKSwgVVN0cmluZygpLCAwLCBlbXB0eUFyZ0xpc3QsIDApKTsKKyAgICAg
ICAgbV9mcmFtZXMuYXBwZW5kKFNjcmlwdENhbGxGcmFtZShqc0Z1bmN0aW9uLT5uYW1lKG1fZXhl
YyksIFVTdHJpbmcoKSwgMCwgMCwgMCkpOwogICAgICAgICBmdW5jID0gbV9leGVjLT5pbnRlcnBy
ZXRlcigpLT5yZXRyaWV2ZUNhbGxlcihtX2V4ZWMsIGpzRnVuY3Rpb24pOwogICAgIH0KICAgICBt
X2luaXRpYWxpemVkID0gdHJ1ZTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2Fs
bFN0YWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWxsU3Rh
Y2suaAkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhbGxT
dGFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogICAgIGNsYXNzIFNjcmlwdENhbGxTdGFjayA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiAg
ICAgcHVibGljOgotICAgICAgICBTY3JpcHRDYWxsU3RhY2soSlNDOjpFeGVjU3RhdGUqLCBjb25z
dCBKU0M6OkFyZ0xpc3QmLCB1bnNpZ25lZCBza2lwQXJndW1lbnRDb3VudCA9IDApOworICAgICAg
ICBTY3JpcHRDYWxsU3RhY2soSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBza2lwQXJndW1lbnRD
b3VudCA9IDApOwogICAgICAgICB+U2NyaXB0Q2FsbFN0YWNrKCk7CiAKICAgICAgICAgU2NyaXB0
U3RhdGUqIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9leGVjOyB9CkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDYwMzQxKQorKysg
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5
KQpAQCAtMTc3LDEwICsxNzcsMTAgQEAgRU5ECiAgICAgfQogCiAgICAgcHVzaChAR2VuZXJhdGVF
dmVudExpc3RlbmVySW1wbCwgPDxFTkQpOwotICAgIEpTVmFsdWUgbGlzdGVuZXIgPSBhcmdzLmF0
KDEpOworICAgIEpTVmFsdWUgbGlzdGVuZXIgPSBleGVjLT5hcmd1bWVudCgxKTsKICAgICBpZiAo
IWxpc3RlbmVyLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAg
IGltcC0+JHtmdW5jdGlvbk5hbWV9RXZlbnRMaXN0ZW5lcih1c3RyaW5nVG9BdG9taWNTdHJpbmco
YXJncy5hdCgwKS50b1N0cmluZyhleGVjKSksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2Jq
ZWN0KGxpc3RlbmVyKSwgJHdyYXBwZXJPYmplY3QsIGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykp
JHBhc3NSZWZQdHJIYW5kbGluZywgYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYykpOworICAgIGlt
cC0+JHtmdW5jdGlvbk5hbWV9RXZlbnRMaXN0ZW5lcih1c3RyaW5nVG9BdG9taWNTdHJpbmcoZXhl
Yy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShh
c09iamVjdChsaXN0ZW5lciksICR3cmFwcGVyT2JqZWN0LCBmYWxzZSwgY3VycmVudFdvcmxkKGV4
ZWMpKSRwYXNzUmVmUHRySGFuZGxpbmcsIGV4ZWMtPmFyZ3VtZW50KDIpLnRvQm9vbGVhbihleGVj
KSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiBFTkQKICAgICByZXR1cm4gQEdlbmVyYXRl
RXZlbnRMaXN0ZW5lckltcGw7CkBAIC04NDYsNyArODQ2LDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVy
CiAgICAgICAgIGZvcmVhY2ggbXkgJGZ1bmN0aW9uIChAeyRkYXRhTm9kZS0+ZnVuY3Rpb25zfSkg
ewogICAgICAgICAgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiQ3VzdG9tIn0gfHwgJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJKU0NDdXN0b20ifSkgewogICAgICAgICAgICAgICAgIG15ICRmdW5jdGlvbkltcGxlbWVu
dGF0aW9uTmFtZSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
SW1wbGVtZW50YXRpb25GdW5jdGlvbiJ9IHx8ICRjb2RlR2VuZXJhdG9yLT5XS19sY2ZpcnN0KCRm
dW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiICAgIEpTQzo6SlNWYWx1ZSAiIC4gJGZ1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1l
IC4gIihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6QXJnTGlzdCYpO1xuIik7CisgICAgICAg
ICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBKU0M6OkpTVmFsdWUgIiAuICRmdW5j
dGlvbkltcGxlbWVudGF0aW9uTmFtZSAuICIoSlNDOjpFeGVjU3RhdGUqKTtcbiIpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtOTg5LDcgKzk4OSw3IEBAIHN1YiBHZW5lcmF0
ZUhlYWRlcgogICAgICAgICBmb3JlYWNoIG15ICRmdW5jdGlvbiAoQHskZGF0YU5vZGUtPmZ1bmN0
aW9uc30pIHsKICAgICAgICAgICAgIG5leHQgaWYgJGZ1bmN0aW9uLT57b3ZlcmxvYWRJbmRleH0g
JiYgJGZ1bmN0aW9uLT57b3ZlcmxvYWRJbmRleH0gPiAxOwogICAgICAgICAgICAgbXkgJGZ1bmN0
aW9uTmFtZSA9ICRjb2RlR2VuZXJhdG9yLT5XS19sY2ZpcnN0KCRjbGFzc05hbWUpIC4gIlByb3Rv
dHlwZUZ1bmN0aW9uIiAuICRjb2RlR2VuZXJhdG9yLT5XS191Y2ZpcnN0KCRmdW5jdGlvbi0+c2ln
bmF0dXJlLT5uYW1lKTsKLSAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJKU0M6OkpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCAke2Z1bmN0aW9uTmFtZX0oSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTT2JqZWN0KiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OkFyZ0xpc3QmKTtcbiIpOworICAg
ICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIkpTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxM
ICR7ZnVuY3Rpb25OYW1lfShKU0M6OkV4ZWNTdGF0ZSopO1xuIik7CiAgICAgICAgIH0KICAgICB9
CiAKQEAgLTExMDMsMTEgKzExMDMsMTEgQEAgc3ViIEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNrRXhw
cmVzc2lvbgogICAgIG15ICRmdW5jdGlvbiA9IHNoaWZ0OwogCiAgICAgbXkgQGFuZEV4cHJlc3Np
b24gPSAoKTsKLSAgICBwdXNoKEBhbmRFeHByZXNzaW9uLCAiYXJncy5zaXplKCkgPT0gJG51bVBh
cmFtZXRlcnMiKTsKKyAgICBwdXNoKEBhbmRFeHByZXNzaW9uLCAiZXhlYy0+YXJndW1lbnRDb3Vu
dCgpID09ICRudW1QYXJhbWV0ZXJzIik7CiAgICAgbXkgJHBhcmFtZXRlckluZGV4ID0gMDsKICAg
ICBmb3JlYWNoICRwYXJhbWV0ZXIgKEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSkgewogICAgICAg
ICBsYXN0IGlmICRwYXJhbWV0ZXJJbmRleCA+PSAkbnVtUGFyYW1ldGVyczsKLSAgICAgICAgbXkg
JHZhbHVlID0gImFyZ3MuYXQoJHBhcmFtZXRlckluZGV4KSI7CisgICAgICAgIG15ICR2YWx1ZSA9
ICJleGVjLT5hcmd1bWVudCgkcGFyYW1ldGVySW5kZXgpIjsKICAgICAgICAgbXkgJHR5cGUgPSAk
Y29kZUdlbmVyYXRvci0+U3RyaXBNb2R1bGUoJHBhcmFtZXRlci0+dHlwZSk7CiAKICAgICAgICAg
IyBPbmx5IERPTVN0cmluZyBvciB3cmFwcGVyIHR5cGVzIGFyZSBjaGVja2VkLgpAQCAtMTE1NCwx
NCArMTE1NCwxNCBAQCBzdWIgR2VuZXJhdGVPdmVybG9hZGVkUHJvdG90eXBlRnVuY3Rpb24KIAog
ICAgIG15ICRmdW5jdGlvbk5hbWUgPSAianMke2ltcGxDbGFzc05hbWV9UHJvdG90eXBlRnVuY3Rp
b24iIC4gJGNvZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5h
bWUpOwogCi0gICAgcHVzaChAaW1wbENvbnRlbnQsICJKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtm
dW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYgYXJncylcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMICR7ZnVuY3Rpb25OYW1lfShFeGVjU3RhdGUqIGV4ZWMpXG4iKTsK
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwogewogRU5ECiAgICAgZm9yZWFjaCBteSAk
b3ZlcmxvYWQgKEB7JGZ1bmN0aW9uLT57b3ZlcmxvYWRzfX0pIHsKICAgICAgICAgbXkgJHBhcmFt
ZXRlcnNDaGVjayA9IEdlbmVyYXRlRnVuY3Rpb25QYXJhbWV0ZXJzQ2hlY2soJG92ZXJsb2FkKTsK
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCRwYXJhbWV0ZXJzQ2hlY2spXG4i
KTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiAke2Z1bmN0aW9u
TmFtZX0kb3ZlcmxvYWQtPntvdmVybG9hZEluZGV4fShleGVjLCB0aGlzVmFsdWUsIGFyZ3MpO1xu
Iik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gJHtmdW5jdGlv
bk5hbWV9JG92ZXJsb2FkLT57b3ZlcmxvYWRJbmRleH0oZXhlYyk7XG4iKTsKICAgICB9CiAgICAg
cHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBU
eXBlRXJyb3IpOwpAQCAtMTc5MCwyMSArMTc5MCwyMSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRh
dGlvbgogICAgICAgICAgICAgCiAgICAgICAgICAgICBteSAkZnVuY3Rpb25JbXBsZW1lbnRhdGlv
bk5hbWUgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkltcGxl
bWVudGF0aW9uRnVuY3Rpb24ifSB8fCAkY29kZUdlbmVyYXRvci0+V0tfbGNmaXJzdCgkZnVuY3Rp
b24tPnNpZ25hdHVyZS0+bmFtZSk7CiAKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMICR7ZnVuY3Rpb25OYW1lfShFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpXG4iKTsKKyAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNWYWx1ZSBKU0NfSE9TVF9DQUxMICR7ZnVu
Y3Rpb25OYW1lfShFeGVjU3RhdGUqIGV4ZWMpXG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAie1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBVTlVT
RURfUEFSQU0oYXJncyk7XG4iKTsKIAogICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siPHJ1bnRp
bWUvRXJyb3IuaD4ifSA9IDE7CiAKICAgICAgICAgICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAi
RE9NV2luZG93IikgewotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRj
bGFzc05hbWUqIGNhc3RlZFRoaXMgPSB0b0pTRE9NV2luZG93KHRoaXNWYWx1ZS50b1RoaXNPYmpl
Y3QoZXhlYykpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
JGNsYXNzTmFtZSogY2FzdGVkVGhpcyA9IHRvSlNET01XaW5kb3coZXhlYy0+aG9zdFRoaXNWYWx1
ZSgpLnRvVGhpc09iamVjdChleGVjKSk7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBpZiAoIWNhc3RlZFRoaXMpXG4iKTsKICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9y
KTtcbiIpOwogICAgICAgICAgICAgfSBlbHNpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiSXNXb3JrZXJDb250ZXh0In0pIHsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAkY2xhc3NOYW1lKiBjYXN0ZWRUaGlzID0gdG8ke2NsYXNzTmFtZX0odGhpc1Zh
bHVlLnRvVGhpc09iamVjdChleGVjKSk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICAkY2xhc3NOYW1lKiBjYXN0ZWRUaGlzID0gdG8ke2NsYXNzTmFtZX0oZXhl
Yy0+aG9zdFRoaXNWYWx1ZSgpLnRvVGhpc09iamVjdChleGVjKSk7XG4iKTsKICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIWNhc3RlZFRoaXMpXG4iKTsKICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHRocm93RXJyb3Io
ZXhlYywgVHlwZUVycm9yKTtcbiIpOwogICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhv
c3RUaGlzVmFsdWUoKTtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCYke2NsYXNzTmFtZX06OnNfaW5mbykpXG4iKTsK
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoZXhlYywgVHlwZUVycm9yKTtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgICRjbGFzc05hbWUqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDwkY2xhc3NO
YW1lKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7XG4iKTsKQEAgLTE4MzIsMTIgKzE4MzIsMTIgQEAg
c3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
aWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tIn0g
fHwgJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0NDdXN0b20i
fSkgewotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBjYXN0
ZWRUaGlzLT4iIC4gJGZ1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lIC4gIihleGVjLCBhcmdzKTtc
biIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBjYXN0
ZWRUaGlzLT4iIC4gJGZ1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lIC4gIihleGVjKTtcbiIpOwog
ICAgICAgICAgICAgfSBlbHNpZiAoJHN2Z1BPRExpc3RUeXBlKSB7CiAgICAgICAgICAgICAgICAg
JGltcGxJbmNsdWRlc3siSlMke3N2Z1BPRExpc3RUeXBlfS5oIn0gPSAxOwogICAgICAgICAgICAg
ICAgICRpbXBsSW5jbHVkZXN7IkpTU1ZHUE9ETGlzdEN1c3RvbS5oIn0gPSAxOwogICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBKU1NWR1BPRExpc3RDdXN0b206
OiRmdW5jdGlvbkltcGxlbWVudGF0aW9uTmFtZTwkY2xhc3NOYW1lLCAiIC4gR2V0TmF0aXZlVHlw
ZSgkc3ZnUE9ETGlzdFR5cGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICI+
KGNhc3RlZFRoaXMsIGV4ZWMsIGFyZ3MsIHRvIiAuICRzdmdQT0RMaXN0VHlwZSAuICIpO1xuIik7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICI+KGNhc3RlZFRoaXMsIGV4ZWMs
IHRvIiAuICRzdmdQT0RMaXN0VHlwZSAuICIpO1xuIik7CiAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRpbXBsVHlwZSogaW1wID0g
c3RhdGljX2Nhc3Q8JGltcGxUeXBlKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTtcbiIpOwogICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRwb2RUeXBlIHBvZEltcCgqaW1wKTtc
biIpIGlmICRwb2RUeXBlOwpAQCAtMTg0Niw3ICsxODQ2LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVt
ZW50YXRpb24KIAogICAgICAgICAgICAgICAgIG15ICRyZXF1aXJlc0FsbEFyZ3VtZW50cyA9ICRm
dW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiUmVxdWlyZXNBbGxBcmd1
bWVudHMifTsKICAgICAgICAgICAgICAgICBpZiAoJHJlcXVpcmVzQWxsQXJndW1lbnRzKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoYXJncy5z
aXplKCkgPCAkbnVtUGFyYW1ldGVycylcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8ICRudW1QYXJh
bWV0ZXJzKVxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHJlcXVpcmVzQWxsQXJn
dW1lbnRzIGVxICJSYWlzZSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3Is
IFwiTm90IGVub3VnaCBhcmd1bWVudHNcIik7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CkBAIC0xODc1LDcgKzE4NzUsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlv
bgogICAgICAgICAgICAgICAgICAgICBteSAkaGFzT3B0aW9uYWxBcmd1bWVudHMgPSAwOwogCiAg
ICAgICAgICAgICAgICAgICAgIGlmICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkN1c3RvbUFyZ3VtZW50SGFuZGxpbmcifSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgU2NyaXB0Q2FsbFN0YWNrIGNhbGxTdGFjayhl
eGVjLCBhcmdzLCAkbnVtUGFyYW1ldGVycyk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIFNjcmlwdENhbGxTdGFjayBjYWxsU3RhY2soZXhlYywg
JG51bVBhcmFtZXRlcnMpO1xuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbEluY2x1
ZGVzeyJTY3JpcHRDYWxsU3RhY2suaCJ9ID0gMTsKICAgICAgICAgICAgICAgICAgICAgfQogCkBA
IC0xODk5LDcgKzE4OTksNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCRwYXJhbWV0ZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJPcHRp
b25hbCJ9KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHZW5lcmF0ZSBlYXJseSBj
YWxsIGlmIHRoZXJlIGFyZSBlbm91Z2ggcGFyYW1ldGVycy4KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoISRoYXNPcHRpb25hbEFyZ3VtZW50cykgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuICAgIGludCBhcmdzQ291bnQgPSBh
cmdzLnNpemUoKTtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIlxuICAgIGludCBhcmdzQ291bnQgPSBleGVjLT5hcmd1bWVudENvdW50KCk7
XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGhhc09wdGlvbmFsQXJndW1l
bnRzID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKGFyZ3NDb3VudCA8ICIgLiAo
JHBhcmFtSW5kZXggKyAxKSAuICIpIHtcbiIpOwpAQCAtMTkxMSwxNSArMTkxMSwxNSBAQCBzdWIg
R2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICgkcGFyYW1ldGVyLT50eXBlIGVxICJYUGF0aE5TUmVzb2x2ZXIiKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgUmVm
UHRyPFhQYXRoTlNSZXNvbHZlcj4gY3VzdG9tUmVzb2x2ZXI7XG4iKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBYUGF0aE5TUmVzb2x2ZXIqIHJl
c29sdmVyID0gdG9YUGF0aE5TUmVzb2x2ZXIoYXJncy5hdCgkcGFyYW1JbmRleCkpO1xuIik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgWFBhdGhO
U1Jlc29sdmVyKiByZXNvbHZlciA9IHRvWFBhdGhOU1Jlc29sdmVyKGV4ZWMtPmFyZ3VtZW50KCRw
YXJhbUluZGV4KSk7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBpZiAoIXJlc29sdmVyKSB7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgY3VzdG9tUmVzb2x2ZXIgPSBKU0N1
c3RvbVhQYXRoTlNSZXNvbHZlcjo6Y3JlYXRlKGV4ZWMsIGFyZ3MuYXQoJHBhcmFtSW5kZXgpKTtc
biIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
ICAgICBjdXN0b21SZXNvbHZlciA9IEpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyOjpjcmVhdGUoZXhl
YywgZXhlYy0+YXJndW1lbnQoJHBhcmFtSW5kZXgpKTtcbiIpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpO1xuIik7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJlc29sdmVyID0gY3Vz
dG9tUmVzb2x2ZXIuZ2V0KCk7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICB9XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
IiAuIEdldE5hdGl2ZVR5cGVGcm9tU2lnbmF0dXJlKCRwYXJhbWV0ZXIpIC4gIiAkbmFtZSA9ICIg
LiBKU1ZhbHVlVG9OYXRpdmUoJHBhcmFtZXRlciwgImFyZ3MuYXQoJHBhcmFtSW5kZXgpIikgLiAi
O1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgIiAuIEdldE5hdGl2ZVR5cGVGcm9tU2lnbmF0dXJlKCRwYXJhbWV0ZXIpIC4gIiAkbmFtZSA9
ICIgLiBKU1ZhbHVlVG9OYXRpdmUoJHBhcmFtZXRlciwgImV4ZWMtPmFyZ3VtZW50KCRwYXJhbUlu
ZGV4KSIpIC4gIjtcbiIpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJZiBhIHBh
cmFtZXRlciBpcyAiYW4gaW5kZXgiIGFuZCBpdCdzIG5lZ2F0aXZlIGl0IHNob3VsZCB0aHJvdyBh
biBJTkRFWF9TSVpFX0VSUiBleGNlcHRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IyBCdXQgdGhpcyBuZWVkcyB0byBiZSBkb25lIGluIHRoZSBiaW5kaW5ncywgYmVjYXVzZSB0aGUg
dHlwZSBpcyB1bnNpZ25lZCBhbmQgdGhlIGZhY3QgdGhhdCBpdApJbmRleDogV2ViQ29yZS9icmlk
Z2UvcnVudGltZV9tZXRob2QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL3J1bnRp
bWVfbWV0aG9kLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJDb3JlL2JyaWRnZS9ydW50aW1l
X21ldGhvZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDE1ICs4NywxNiBAQCBib29sIFJ1bnRp
bWVNZXRob2Q6OmdldE93blByb3BlcnR5RGVzY3JpCiAgICAgcmV0dXJuIEludGVybmFsRnVuY3Rp
b246OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0
b3IpOwogfQogCi1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxSdW50aW1lTWV0aG9k
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9uLCBKU1ZhbHVlIHRoaXNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYgYXJncykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFJ1
bnRpbWVNZXRob2QoRXhlY1N0YXRlKiBleGVjKQogewotICAgIFJ1bnRpbWVNZXRob2QqIG1ldGhv
ZCA9IHN0YXRpY19jYXN0PFJ1bnRpbWVNZXRob2QqPihmdW5jdGlvbik7CisgICAgUnVudGltZU1l
dGhvZCogbWV0aG9kID0gc3RhdGljX2Nhc3Q8UnVudGltZU1ldGhvZCo+KGV4ZWMtPmNhbGxlZSgp
KTsKIAogICAgIGlmIChtZXRob2QtPm1ldGhvZHMoKS0+aXNFbXB0eSgpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIAogICAgIFJlZlB0cjxJbnN0YW5jZT4gaW5zdGFuY2U7CiAKKyAg
ICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAodGhp
c1ZhbHVlLmluaGVyaXRzKCZSdW50aW1lT2JqZWN0OjpzX2luZm8pKSB7CiAgICAgICAgIFJ1bnRp
bWVPYmplY3QqIHJ1bnRpbWVPYmplY3QgPSBzdGF0aWNfY2FzdDxSdW50aW1lT2JqZWN0Kj4oYXNP
YmplY3QodGhpc1ZhbHVlKSk7CiAgICAgICAgIGluc3RhbmNlID0gcnVudGltZU9iamVjdC0+Z2V0
SW50ZXJuYWxJbnN0YW5jZSgpOwpAQCAtMTEzLDcgKzExNCw3IEBAIHN0YXRpYyBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY2FsbFJ1bnRpbWUKICAgICBBU1NFUlQoaW5zdGFuY2UpOwogCiAgICAgaW5z
dGFuY2UtPmJlZ2luKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBpbnN0YW5jZS0+aW52b2tlTWV0
aG9kKGV4ZWMsIG1ldGhvZCwgYXJncyk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBpbnN0YW5jZS0+
aW52b2tlTWV0aG9kKGV4ZWMsIG1ldGhvZCk7CiAgICAgaW5zdGFuY2UtPmVuZCgpOwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3QuY3BwCShyZXZpc2lv
biA2MDM0MSkKKysrIFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjUzLDEyICsyNTMsMTIgQEAgSlNWYWx1ZSBSdW50aW1lT2JqZWN0OjpkZWZhdWx0
VmFsdWUoRXhlYwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgY2FsbFJ1bnRpbWVPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogZnVu
Y3Rpb24sIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNhbGxSdW50aW1lT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBBU1NF
UlQoZnVuY3Rpb24tPmluaGVyaXRzKCZSdW50aW1lT2JqZWN0OjpzX2luZm8pKTsKLSAgICBSZWZQ
dHI8SW5zdGFuY2U+IGluc3RhbmNlKHN0YXRpY19jYXN0PFJ1bnRpbWVPYmplY3QqPihmdW5jdGlv
biktPmdldEludGVybmFsSW5zdGFuY2UoKSk7CisgICAgQVNTRVJUKGV4ZWMtPmNhbGxlZSgpLT5p
bmhlcml0cygmUnVudGltZU9iamVjdDo6c19pbmZvKSk7CisgICAgUmVmUHRyPEluc3RhbmNlPiBp
bnN0YW5jZShzdGF0aWNfY2FzdDxSdW50aW1lT2JqZWN0Kj4oZXhlYy0+Y2FsbGVlKCkpLT5nZXRJ
bnRlcm5hbEluc3RhbmNlKCkpOwogICAgIGluc3RhbmNlLT5iZWdpbigpOwotICAgIEpTVmFsdWUg
cmVzdWx0ID0gaW5zdGFuY2UtPmludm9rZURlZmF1bHRNZXRob2QoZXhlYywgYXJncyk7CisgICAg
SlNWYWx1ZSByZXN1bHQgPSBpbnN0YW5jZS0+aW52b2tlRGVmYXVsdE1ldGhvZChleGVjKTsKICAg
ICBpbnN0YW5jZS0+ZW5kKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFdlYkNvcmUv
YnJpZGdlL2MvY19pbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvYy9j
X2luc3RhbmNlLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJDb3JlL2JyaWRnZS9jL2NfaW5z
dGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4LDcgQEAgSlNWYWx1ZSBDSW5z
dGFuY2U6OmdldE1ldGhvZChFeGVjU3RhdGUqIAogICAgIHJldHVybiBuZXcgKGV4ZWMpIENSdW50
aW1lTWV0aG9kKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgcHJvcGVydHlOYW1l
LCBtZXRob2RMaXN0KTsKIH0KIAotSlNWYWx1ZSBDSW5zdGFuY2U6Omludm9rZU1ldGhvZChFeGVj
U3RhdGUqIGV4ZWMsIFJ1bnRpbWVNZXRob2QqIHJ1bnRpbWVNZXRob2QsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCitKU1ZhbHVlIENJbnN0YW5jZTo6aW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywg
UnVudGltZU1ldGhvZCogcnVudGltZU1ldGhvZCkKIHsKICAgICBpZiAoIWFzT2JqZWN0KHJ1bnRp
bWVNZXRob2QpLT5pbmhlcml0cygmQ1J1bnRpbWVNZXRob2Q6OnNfaW5mbykpCiAgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvciwgIkF0dGVtcHQgdG8gaW52b2tlIG5vbi1w
bHVnLWluIG1ldGhvZCBvbiBwbHVnLWluIG9iamVjdC4iKTsKQEAgLTE0NSwxMiArMTQ1LDEyIEBA
IEpTVmFsdWUgQ0luc3RhbmNlOjppbnZva2VNZXRob2QoRXhlY1N0YXQKICAgICBpZiAoIV9vYmpl
Y3QtPl9jbGFzcy0+aGFzTWV0aG9kKF9vYmplY3QsIGlkZW50KSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAKLSAgICB1bnNpZ25lZCBjb3VudCA9IGFyZ3Muc2l6ZSgpOworICAgIHVu
c2lnbmVkIGNvdW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOwogICAgIFZlY3RvcjxOUFZhcmlh
bnQsIDg+IGNBcmdzKGNvdW50KTsKIAogICAgIHVuc2lnbmVkIGk7CiAgICAgZm9yIChpID0gMDsg
aSA8IGNvdW50OyBpKyspCi0gICAgICAgIGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KGV4ZWMsIGFy
Z3MuYXQoaSksICZjQXJnc1tpXSk7CisgICAgICAgIGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KGV4
ZWMsIGV4ZWMtPmFyZ3VtZW50KGkpLCAmY0FyZ3NbaV0pOwogCiAgICAgLy8gSW52b2tlIHRoZSAn
QycgbWV0aG9kLgogICAgIGJvb2wgcmV0dmFsID0gdHJ1ZTsKQEAgLTE3NiwxNyArMTc2LDE3IEBA
IEpTVmFsdWUgQ0luc3RhbmNlOjppbnZva2VNZXRob2QoRXhlY1N0YXQKIH0KIAogCi1KU1ZhbHVl
IENJbnN0YW5jZTo6aW52b2tlRGVmYXVsdE1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCitKU1ZhbHVlIENJbnN0YW5jZTo6aW52b2tlRGVmYXVsdE1ldGhvZChFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgaWYgKCFfb2JqZWN0LT5fY2xhc3MtPmludm9rZURlZmF1bHQp
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgdW5zaWduZWQgY291bnQgPSBh
cmdzLnNpemUoKTsKKyAgICB1bnNpZ25lZCBjb3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsK
ICAgICBWZWN0b3I8TlBWYXJpYW50LCA4PiBjQXJncyhjb3VudCk7CiAKICAgICB1bnNpZ25lZCBp
OwogICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICBjb252ZXJ0VmFsdWVU
b05QVmFyaWFudChleGVjLCBhcmdzLmF0KGkpLCAmY0FyZ3NbaV0pOworICAgICAgICBjb252ZXJ0
VmFsdWVUb05QVmFyaWFudChleGVjLCBleGVjLT5hcmd1bWVudChpKSwgJmNBcmdzW2ldKTsKIAog
ICAgIC8vIEludm9rZSB0aGUgJ0MnIG1ldGhvZC4KICAgICBib29sIHJldHZhbCA9IHRydWU7Cklu
ZGV4OiBXZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JyaWRnZS9jL2NfaW5zdGFuY2UuaAkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJDb3JlL2JyaWRn
ZS9jL2NfaW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsOSArNjAsOSBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBKU1ZhbHVlIGRlZmF1bHRWYWx1ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQ
cmltaXRpdmVUeXBlKSBjb25zdDsKIAogICAgIHZpcnR1YWwgSlNWYWx1ZSBnZXRNZXRob2QoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpOwotICAgIHZpcnR1
YWwgSlNWYWx1ZSBpbnZva2VNZXRob2QoRXhlY1N0YXRlKiwgUnVudGltZU1ldGhvZCogbWV0aG9k
LCBjb25zdCBBcmdMaXN0Jik7CisgICAgdmlydHVhbCBKU1ZhbHVlIGludm9rZU1ldGhvZChFeGVj
U3RhdGUqLCBSdW50aW1lTWV0aG9kKiBtZXRob2QpOwogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0
c0ludm9rZURlZmF1bHRNZXRob2QoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEpTVmFsdWUgaW52b2tl
RGVmYXVsdE1ldGhvZChFeGVjU3RhdGUqLCBjb25zdCBBcmdMaXN0Jik7CisgICAgdmlydHVhbCBK
U1ZhbHVlIGludm9rZURlZmF1bHRNZXRob2QoRXhlY1N0YXRlKik7CiAKICAgICB2aXJ0dWFsIGJv
b2wgc3VwcG9ydHNDb25zdHJ1Y3QoKSBjb25zdDsKICAgICB2aXJ0dWFsIEpTVmFsdWUgaW52b2tl
Q29uc3RydWN0KEV4ZWNTdGF0ZSosIGNvbnN0IEFyZ0xpc3QmKTsKSW5kZXg6IFdlYkNvcmUvYnJp
ZGdlL2puaS9qc2MvSmF2YUluc3RhbmNlSlNDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jy
aWRnZS9qbmkvanNjL0phdmFJbnN0YW5jZUpTQy5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgV2Vi
Q29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzEsNyArMTMxLDcgQEAgSlNWYWx1ZSBKYXZhSW5zdGFuY2U6OmdldE1ldGhvZChFeGVjU3Rh
dAogICAgIHJldHVybiBuZXcgKGV4ZWMpIEphdmFSdW50aW1lTWV0aG9kKGV4ZWMsIGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSwgcHJvcGVydHlOYW1lLCBtZXRob2RMaXN0KTsKIH0KIAotSlNW
YWx1ZSBKYXZhSW5zdGFuY2U6Omludm9rZU1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIFJ1bnRpbWVN
ZXRob2QqIHJ1bnRpbWVNZXRob2QsIGNvbnN0IEFyZ0xpc3QgJmFyZ3MpCitKU1ZhbHVlIEphdmFJ
bnN0YW5jZTo6aW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgUnVudGltZU1ldGhvZCogcnVu
dGltZU1ldGhvZCkKIHsKICAgICBpZiAoIWFzT2JqZWN0KHJ1bnRpbWVNZXRob2QpLT5pbmhlcml0
cygmSmF2YVJ1bnRpbWVNZXRob2Q6OnNfaW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KGV4ZWMsIFR5cGVFcnJvciwgIkF0dGVtcHQgdG8gaW52b2tlIG5vbi1KYXZhIG1ldGhvZCBvbiBK
YXZhIG9iamVjdC4iKTsKQEAgLTEzOSw3ICsxMzksNyBAQCBKU1ZhbHVlIEphdmFJbnN0YW5jZTo6
aW52b2tlTWV0aG9kKEV4ZWNTCiAgICAgY29uc3QgTWV0aG9kTGlzdCYgbWV0aG9kTGlzdCA9ICpy
dW50aW1lTWV0aG9kLT5tZXRob2RzKCk7CiAKICAgICBpbnQgaTsKLSAgICBpbnQgY291bnQgPSBh
cmdzLnNpemUoKTsKKyAgICBpbnQgY291bnQgPSBleGVjLT5hcmd1bWVudENvdW50KCk7CiAgICAg
SlNWYWx1ZSByZXN1bHRWYWx1ZTsKICAgICBNZXRob2QqIG1ldGhvZCA9IDA7CiAgICAgc2l6ZV90
IG51bU1ldGhvZHMgPSBtZXRob2RMaXN0LnNpemUoKTsKQEAgLTE2OCw4ICsxNjgsOCBAQCBKU1Zh
bHVlIEphdmFJbnN0YW5jZTo6aW52b2tlTWV0aG9kKEV4ZWNTCiAKICAgICBmb3IgKGkgPSAwOyBp
IDwgY291bnQ7IGkrKykgewogICAgICAgICBKYXZhUGFyYW1ldGVyKiBhUGFyYW1ldGVyID0gak1l
dGhvZC0+cGFyYW1ldGVyQXQoaSk7Ci0gICAgICAgIGpBcmdzW2ldID0gY29udmVydFZhbHVlVG9K
VmFsdWUoZXhlYywgbV9yb290T2JqZWN0LmdldCgpLCBhcmdzLmF0KGkpLCBhUGFyYW1ldGVyLT5n
ZXRKTklUeXBlKCksIGFQYXJhbWV0ZXItPnR5cGUoKSk7Ci0gICAgICAgIExPRyhMaXZlQ29ubmVj
dCwgIkphdmFJbnN0YW5jZTo6aW52b2tlTWV0aG9kIGFyZ1slZF0gPSAlcyIsIGksIGFyZ3MuYXQo
aSkudG9TdHJpbmcoZXhlYykuYXNjaWkoKSk7CisgICAgICAgIGpBcmdzW2ldID0gY29udmVydFZh
bHVlVG9KVmFsdWUoZXhlYywgbV9yb290T2JqZWN0LmdldCgpLCBleGVjLT5hcmd1bWVudChpKSwg
YVBhcmFtZXRlci0+Z2V0Sk5JVHlwZSgpLCBhUGFyYW1ldGVyLT50eXBlKCkpOworICAgICAgICBM
T0coTGl2ZUNvbm5lY3QsICJKYXZhSW5zdGFuY2U6Omludm9rZU1ldGhvZCBhcmdbJWRdID0gJXMi
LCBpLCBleGVjLT5hcmd1bWVudChpKS50b1N0cmluZyhleGVjKS5hc2NpaSgpKTsKICAgICB9CiAK
ICAgICBqdmFsdWUgcmVzdWx0OwpJbmRleDogV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhSW5z
dGFuY2VKU0MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFJbnN0
YW5jZUpTQy5oCShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2
YUluc3RhbmNlSlNDLmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgSlNWYWx1ZSBkZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJp
bWl0aXZlVHlwZSkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIEpTVmFsdWUgZ2V0TWV0aG9kKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKLSAgICB2aXJ0dWFs
IEpTVmFsdWUgaW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgUnVudGltZU1ldGhvZCogbWV0
aG9kLCBjb25zdCBBcmdMaXN0JiBhcmdzKTsKKyAgICB2aXJ0dWFsIEpTVmFsdWUgaW52b2tlTWV0
aG9kKEV4ZWNTdGF0ZSogZXhlYywgUnVudGltZU1ldGhvZCogbWV0aG9kKTsKIAogICAgIGpvYmpl
Y3QgamF2YUluc3RhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0YW5jZS0+bV9pbnN0YW5jZTsg
fQogCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9qc2MvQnJpZGdlSlNDLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9icmlkZ2UvanNjL0JyaWRnZUpTQy5oCShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNv
cmUvYnJpZGdlL2pzYy9CcmlkZ2VKU0MuaAkod29ya2luZyBjb3B5KQpAQCAtOTIsMTAgKzkyLDEw
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgc2V0VmFsdWVPZlVuZGVmaW5lZEZpZWxkKEV4
ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBKU1ZhbHVlKSB7IHJldHVybiBmYWxzZTsgfQog
CiAgICAgdmlydHVhbCBKU1ZhbHVlIGdldE1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSkgPSAwOwotICAgIHZpcnR1YWwgSlNWYWx1ZSBpbnZva2VN
ZXRob2QoRXhlY1N0YXRlKiwgUnVudGltZU1ldGhvZCogbWV0aG9kLCBjb25zdCBBcmdMaXN0JiBh
cmdzKSA9IDA7CisgICAgdmlydHVhbCBKU1ZhbHVlIGludm9rZU1ldGhvZChFeGVjU3RhdGUqLCBS
dW50aW1lTWV0aG9kKiBtZXRob2QpID0gMDsKIAogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0lu
dm9rZURlZmF1bHRNZXRob2QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwg
SlNWYWx1ZSBpbnZva2VEZWZhdWx0TWV0aG9kKEV4ZWNTdGF0ZSosIGNvbnN0IEFyZ0xpc3QmKSB7
IHJldHVybiBqc1VuZGVmaW5lZCgpOyB9CisgICAgdmlydHVhbCBKU1ZhbHVlIGludm9rZURlZmF1
bHRNZXRob2QoRXhlY1N0YXRlKikgeyByZXR1cm4ganNVbmRlZmluZWQoKTsgfQogCiAgICAgdmly
dHVhbCBib29sIHN1cHBvcnRzQ29uc3RydWN0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAg
ICB2aXJ0dWFsIEpTVmFsdWUgaW52b2tlQ29uc3RydWN0KEV4ZWNTdGF0ZSosIGNvbnN0IEFyZ0xp
c3QmKSB7IHJldHVybiBKU1ZhbHVlKCk7IH0KSW5kZXg6IFdlYkNvcmUvYnJpZGdlL29iamMvb2Jq
Y19pbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY19pbnN0
YW5jZS5oCShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY19pbnN0
YW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMCArNDgsMTAgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgSlNWYWx1ZSBkZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZl
VHlwZSkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIEpTVmFsdWUgZ2V0TWV0aG9kKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKLSAgICBKU1ZhbHVlIGludm9r
ZU9iamNNZXRob2QoRXhlY1N0YXRlKiwgT2JqY01ldGhvZCogbWV0aG9kLCBjb25zdCBBcmdMaXN0
Jik7Ci0gICAgdmlydHVhbCBKU1ZhbHVlIGludm9rZU1ldGhvZChFeGVjU3RhdGUqLCBSdW50aW1l
TWV0aG9kKiBtZXRob2QsIGNvbnN0IEFyZ0xpc3QmKTsKKyAgICBKU1ZhbHVlIGludm9rZU9iamNN
ZXRob2QoRXhlY1N0YXRlKiwgT2JqY01ldGhvZCogbWV0aG9kKTsKKyAgICB2aXJ0dWFsIEpTVmFs
dWUgaW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSosIFJ1bnRpbWVNZXRob2QqIG1ldGhvZCk7CiAgICAg
dmlydHVhbCBib29sIHN1cHBvcnRzSW52b2tlRGVmYXVsdE1ldGhvZCgpIGNvbnN0OwotICAgIHZp
cnR1YWwgSlNWYWx1ZSBpbnZva2VEZWZhdWx0TWV0aG9kKEV4ZWNTdGF0ZSosIGNvbnN0IEFyZ0xp
c3QmKTsKKyAgICB2aXJ0dWFsIEpTVmFsdWUgaW52b2tlRGVmYXVsdE1ldGhvZChFeGVjU3RhdGUq
KTsKIAogICAgIEpTVmFsdWUgZ2V0VmFsdWVPZlVuZGVmaW5lZEZpZWxkKEV4ZWNTdGF0ZSosIGNv
bnN0IElkZW50aWZpZXImKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc2V0VmFsdWVPZlVuZGVm
aW5lZEZpZWxkKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBKU1ZhbHVlKTsKSW5kZXg6
IFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY19pbnN0YW5jZS5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JyaWRnZS9vYmpjL29iamNfaW5zdGFuY2UubW0JKHJldmlzaW9uIDYwMzQxKQorKysgV2Vi
Q29yZS9icmlkZ2Uvb2JqYy9vYmpjX2luc3RhbmNlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQs
NyArMTk0LDcgQEAgSlNWYWx1ZSBPYmpjSW5zdGFuY2U6OmdldE1ldGhvZChFeGVjU3RhdAogICAg
IHJldHVybiBuZXcgKGV4ZWMpIE9iakNSdW50aW1lTWV0aG9kKGV4ZWMsIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKSwgcHJvcGVydHlOYW1lLCBtZXRob2RMaXN0KTsKIH0KIAotSlNWYWx1ZSBP
YmpjSW5zdGFuY2U6Omludm9rZU1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIFJ1bnRpbWVNZXRob2Qq
IHJ1bnRpbWVNZXRob2QsIGNvbnN0IEFyZ0xpc3QgJmFyZ3MpCitKU1ZhbHVlIE9iamNJbnN0YW5j
ZTo6aW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgUnVudGltZU1ldGhvZCogcnVudGltZU1l
dGhvZCkKIHsKICAgICBpZiAoIWFzT2JqZWN0KHJ1bnRpbWVNZXRob2QpLT5pbmhlcml0cygmT2Jq
Q1J1bnRpbWVNZXRob2Q6OnNfaW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMs
IFR5cGVFcnJvciwgIkF0dGVtcHQgdG8gaW52b2tlIG5vbi1wbHVnLWluIG1ldGhvZCBvbiBwbHVn
LWluIG9iamVjdC4iKTsKQEAgLTIwNSwxMCArMjA1LDEwIEBAIEpTVmFsdWUgT2JqY0luc3RhbmNl
OjppbnZva2VNZXRob2QoRXhlY1MKICAgICAvLyBuYW1lIG1hdGNoIGZvciBhIHBhcnRpY3VsYXIg
bWV0aG9kLgogICAgIEFTU0VSVChtZXRob2RMaXN0LnNpemUoKSA9PSAxKTsKIAotICAgIHJldHVy
biBpbnZva2VPYmpjTWV0aG9kKGV4ZWMsIHN0YXRpY19jYXN0PE9iamNNZXRob2QqPihtZXRob2RM
aXN0WzBdKSwgYXJncyk7CisgICAgcmV0dXJuIGludm9rZU9iamNNZXRob2QoZXhlYywgc3RhdGlj
X2Nhc3Q8T2JqY01ldGhvZCo+KG1ldGhvZExpc3RbMF0pKTsKIH0KIAotSlNWYWx1ZSBPYmpjSW5z
dGFuY2U6Omludm9rZU9iamNNZXRob2QoRXhlY1N0YXRlKiBleGVjLCBPYmpjTWV0aG9kKiBtZXRo
b2QsIGNvbnN0IEFyZ0xpc3QgJmFyZ3MpCitKU1ZhbHVlIE9iamNJbnN0YW5jZTo6aW52b2tlT2Jq
Y01ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIE9iamNNZXRob2QqIG1ldGhvZCkKIHsKICAgICBKU1Zh
bHVlIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7CiAgICAgCkBAIC0yMzQsOSArMjM0LDkgQEAgSlNW
YWx1ZSBPYmpjSW5zdGFuY2U6Omludm9rZU9iamNNZXRob2QoRQogICAgICAgICBbaW52b2NhdGlv
biBzZXRBcmd1bWVudDomanNOYW1lIGF0SW5kZXg6Ml07CiAKICAgICAgICAgTlNNdXRhYmxlQXJy
YXkqIG9iamNBcmdzID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKLSAgICAgICAgaW50IGNvdW50
ID0gYXJncy5zaXplKCk7CisgICAgICAgIGludCBjb3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQo
KTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgICAg
ICBPYmpjVmFsdWUgdmFsdWUgPSBjb252ZXJ0VmFsdWVUb09iamNWYWx1ZShleGVjLCBhcmdzLmF0
KGkpLCBPYmpjT2JqZWN0VHlwZSk7CisgICAgICAgICAgICBPYmpjVmFsdWUgdmFsdWUgPSBjb252
ZXJ0VmFsdWVUb09iamNWYWx1ZShleGVjLCBleGVjLT5hcmd1bWVudChpKSwgT2JqY09iamVjdFR5
cGUpOwogICAgICAgICAgICAgW29iamNBcmdzIGFkZE9iamVjdDp2YWx1ZS5vYmplY3RWYWx1ZV07
CiAgICAgICAgIH0KICAgICAgICAgW2ludm9jYXRpb24gc2V0QXJndW1lbnQ6Jm9iamNBcmdzIGF0
SW5kZXg6M107CkBAIC0yNTEsNyArMjUxLDcgQEAgSlNWYWx1ZSBPYmpjSW5zdGFuY2U6Omludm9r
ZU9iamNNZXRob2QoRQogICAgICAgICAgICAgLy8gdHlwZXMuCiAgICAgICAgICAgICBBU1NFUlQo
b2JqY1ZhbHVlVHlwZSAhPSBPYmpjSW52YWxpZFR5cGUgJiYgb2JqY1ZhbHVlVHlwZSAhPSBPYmpj
Vm9pZFR5cGUpOwogCi0gICAgICAgICAgICBPYmpjVmFsdWUgdmFsdWUgPSBjb252ZXJ0VmFsdWVU
b09iamNWYWx1ZShleGVjLCBhcmdzLmF0KGktMiksIG9iamNWYWx1ZVR5cGUpOworICAgICAgICAg
ICAgT2JqY1ZhbHVlIHZhbHVlID0gY29udmVydFZhbHVlVG9PYmpjVmFsdWUoZXhlYywgZXhlYy0+
YXJndW1lbnQoaS0yKSwgb2JqY1ZhbHVlVHlwZSk7CiAKICAgICAgICAgICAgIHN3aXRjaCAob2Jq
Y1ZhbHVlVHlwZSkgewogICAgICAgICAgICAgICAgIGNhc2UgT2JqY09iamVjdFR5cGU6CkBAIC0z
MjMsNyArMzIzLDcgQEAgSlNWYWx1ZSBPYmpjSW5zdGFuY2U6Omludm9rZU9iamNNZXRob2QoRQog
ICAgIHJldHVybiBjb25zdF9jYXN0PEpTVmFsdWUmPihyZXN1bHQpOwogfQogCi1KU1ZhbHVlIE9i
amNJbnN0YW5jZTo6aW52b2tlRGVmYXVsdE1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFy
Z0xpc3QgJmFyZ3MpCitKU1ZhbHVlIE9iamNJbnN0YW5jZTo6aW52b2tlRGVmYXVsdE1ldGhvZChF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1VuZGVmaW5lZCgpOwog
CkBAIC0zNDUsOSArMzQ1LDkgQEAgSlNWYWx1ZSBPYmpjSW5zdGFuY2U6Omludm9rZURlZmF1bHRN
ZXRobwogICAgIH0KIAogICAgIE5TTXV0YWJsZUFycmF5KiBvYmpjQXJncyA9IFtOU011dGFibGVB
cnJheSBhcnJheV07Ci0gICAgdW5zaWduZWQgY291bnQgPSBhcmdzLnNpemUoKTsKKyAgICB1bnNp
Z25lZCBjb3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICBPYmpjVmFsdWUgdmFsdWUgPSBjb252ZXJ0
VmFsdWVUb09iamNWYWx1ZShleGVjLCBhcmdzLmF0KGkpLCBPYmpjT2JqZWN0VHlwZSk7CisgICAg
ICAgIE9iamNWYWx1ZSB2YWx1ZSA9IGNvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlKGV4ZWMsIGV4ZWMt
PmFyZ3VtZW50KGkpLCBPYmpjT2JqZWN0VHlwZSk7CiAgICAgICAgIFtvYmpjQXJncyBhZGRPYmpl
Y3Q6dmFsdWUub2JqZWN0VmFsdWVdOwogICAgIH0KICAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVu
dDomb2JqY0FyZ3MgYXRJbmRleDoyXTsKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY19y
dW50aW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1l
Lm1tCShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1l
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMTUsOCArMjE1LDkgQEAgdm9pZCBPYmpjRmFsbGJhY2tP
YmplY3RJbXA6OnB1dChFeGVjU3RhdAogewogfQogCi1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNhbGxPYmpDRmFsbGJhY2tPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogZnVu
Y3Rpb24sIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGljIEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsT2JqQ0ZhbGxiYWNrT2JqZWN0KEV4ZWNTdGF0ZSogZXhl
YykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAg
ICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmT2JqQ1J1bnRpbWVPYmplY3Q6OnNfaW5mbykpCiAg
ICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKQEAgLTIzNSwxMCAr
MjM2LDEwIEBAIHN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbE9iakNGYWwKICAgICBp
ZiAoW3RhcmdldE9iamVjdCByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGludm9rZVVuZGVm
aW5lZE1ldGhvZEZyb21XZWJTY3JpcHQ6d2l0aEFyZ3VtZW50czopXSl7CiAgICAgICAgIE9iamND
bGFzcyogb2JqY0NsYXNzID0gc3RhdGljX2Nhc3Q8T2JqY0NsYXNzKj4ob2JqY0luc3RhbmNlLT5n
ZXRDbGFzcygpKTsKICAgICAgICAgT3duUHRyPE9iamNNZXRob2Q+IGZhbGxiYWNrTWV0aG9kKG5l
dyBPYmpjTWV0aG9kKG9iamNDbGFzcy0+aXNhKCksIEBzZWxlY3RvcihpbnZva2VVbmRlZmluZWRN
ZXRob2RGcm9tV2ViU2NyaXB0OndpdGhBcmd1bWVudHM6KSkpOwotICAgICAgICBjb25zdCBJZGVu
dGlmaWVyJiBuYW1lSWRlbnRpZmllciA9IHN0YXRpY19jYXN0PE9iamNGYWxsYmFja09iamVjdElt
cCo+KGZ1bmN0aW9uKS0+cHJvcGVydHlOYW1lKCk7CisgICAgICAgIGNvbnN0IElkZW50aWZpZXIm
IG5hbWVJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8T2JqY0ZhbGxiYWNrT2JqZWN0SW1wKj4oZXhl
Yy0+Y2FsbGVlKCkpLT5wcm9wZXJ0eU5hbWUoKTsKICAgICAgICAgUmV0YWluUHRyPENGU3RyaW5n
UmVmPiBuYW1lKEFkb3B0Q0YsIENGU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgbmFtZUlk
ZW50aWZpZXIuZGF0YSgpLCBuYW1lSWRlbnRpZmllci5zaXplKCkpKTsKICAgICAgICAgZmFsbGJh
Y2tNZXRob2QtPnNldEphdmFTY3JpcHROYW1lKG5hbWUuZ2V0KCkpOwotICAgICAgICByZXN1bHQg
PSBvYmpjSW5zdGFuY2UtPmludm9rZU9iamNNZXRob2QoZXhlYywgZmFsbGJhY2tNZXRob2QuZ2V0
KCksIGFyZ3MpOworICAgICAgICByZXN1bHQgPSBvYmpjSW5zdGFuY2UtPmludm9rZU9iamNNZXRo
b2QoZXhlYywgZmFsbGJhY2tNZXRob2QuZ2V0KCkpOwogICAgIH0KICAgICAgICAgICAgIAogICAg
IG9iamNJbnN0YW5jZS0+ZW5kKCk7CkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gNjAzNzMpCisrKyBXZWJLaXQv
bWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDEwLTA1LTI4
ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2ltcGxpZmllZCB0aGUgaG9zdCBjYWxsaW5n
IGNvbnZlbnRpb24uCisKKyAgICAgICAgUEFSVCBPTkU6IEZ1bmN0aW9uYWwgY29kZSBjaGFuZ2Vz
LgorICAgICAgICAKKyAgICAgICAgWyBOb25lIGluIFdlYktpdCBdCisgICAgICAgIAorICAgICAg
ICBQQVJUIFRXTzogR2xvYmFsIHNlYXJjaCBhbmQgcmVwbGFjZS4KKyAgICAgICAgCisgICAgICAg
IEluIHRoZSBhcmVhcyBiZWxvdywgSSB1c2VkIGdsb2JhbCBzZWFyY2gtYW5kLXJlcGxhY2UgdG8g
Y2hhbmdlCisgICAgICAgICAgICAoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25z
dCBBcmdMaXN0JikgPT4gKEV4ZWNTdGF0ZSopCisgICAgICAgICAgICBhcmdzLnNpemUoKSA9PiBl
eGVjLT5hcmd1bWVudENvdW50KCkKKyAgICAgICAgICAgIGFyZ3MuYXQoaSkgPT4gZXhlYy0+YXJn
dW1lbnQoaSkKKworICAgICAgICAqIFBsdWdpbnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UuaDoKKyAg
ICAgICAgKiBQbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLm1tOgorICAgICAgICAoV2ViS2l0
OjpQcm94eUluc3RhbmNlOjppbnZva2UpOgorICAgICAgICAoV2ViS2l0OjpQcm94eUluc3RhbmNl
OjppbnZva2VNZXRob2QpOgorICAgICAgICAoV2ViS2l0OjpQcm94eUluc3RhbmNlOjppbnZva2VE
ZWZhdWx0TWV0aG9kKToKKwogMjAxMC0wNS0yNyAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgpJbmRleDogV2ViS2l0L21h
Yy9QbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21h
Yy9QbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLmgJKHJldmlzaW9uIDYwMzQxKQorKysgV2Vi
S2l0L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY0LDEwICs2NCwxMCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgSlNDOjpCaW5kaW5nczo6Q2xh
c3MqIGdldENsYXNzKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIEpTQzo6SlNWYWx1ZSBnZXRNZXRo
b2QoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlO
YW1lKTsKLSAgICB2aXJ0dWFsIEpTQzo6SlNWYWx1ZSBpbnZva2VNZXRob2QoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OlJ1bnRpbWVNZXRob2QqLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MpOworICAg
IHZpcnR1YWwgSlNDOjpKU1ZhbHVlIGludm9rZU1ldGhvZChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
UnVudGltZU1ldGhvZCopOwogCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzSW52b2tlRGVmYXVs
dE1ldGhvZCgpIGNvbnN0OwotICAgIHZpcnR1YWwgSlNDOjpKU1ZhbHVlIGludm9rZURlZmF1bHRN
ZXRob2QoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OkFyZ0xpc3QmKTsKKyAgICB2aXJ0dWFs
IEpTQzo6SlNWYWx1ZSBpbnZva2VEZWZhdWx0TWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNDb25zdHJ1Y3QoKSBjb25zdDsKICAgICB2aXJ0dWFsIEpT
Qzo6SlNWYWx1ZSBpbnZva2VDb25zdHJ1Y3QoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OkFy
Z0xpc3QmKTsKQEAgLTgxLDcgKzgxLDcgQEAgcHJpdmF0ZToKICAgICBKU0M6OkpTVmFsdWUgbnVt
YmVyVmFsdWUoSlNDOjpFeGVjU3RhdGUqKSBjb25zdDsKICAgICBKU0M6OkpTVmFsdWUgYm9vbGVh
blZhbHVlKCkgY29uc3Q7CiAgICAgCi0gICAgSlNDOjpKU1ZhbHVlIGludm9rZShKU0M6OkV4ZWNT
dGF0ZSosIEludm9rZVR5cGUsIHVpbnQ2NF90IGlkZW50aWZpZXIsIGNvbnN0IEpTQzo6QXJnTGlz
dCYgYXJncyk7CisgICAgSlNDOjpKU1ZhbHVlIGludm9rZShKU0M6OkV4ZWNTdGF0ZSosIEludm9r
ZVR5cGUsIHVpbnQ2NF90IGlkZW50aWZpZXIsIGNvbnN0IEpTQzo6QXJnTGlzdCYpOwogICAgIAog
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogICAgIHN0ZDo6YXV0b19wdHI8VD4gd2FpdEZvclJl
cGx5KHVpbnQzMl90IHJlcXVlc3RJRCkgY29uc3QgewpJbmRleDogV2ViS2l0L21hYy9QbHVnaW5z
L0hvc3RlZC9Qcm94eUluc3RhbmNlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvUGx1Z2lu
cy9Ib3N0ZWQvUHJveHlJbnN0YW5jZS5tbQkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJLaXQvbWFj
L1BsdWdpbnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTE0MSw3
ICsxNDEsNyBAQCBKU0M6OkJpbmRpbmdzOjpDbGFzcyogUHJveHlJbnN0YW5jZTo6Z2V0CiAgICAg
cmV0dXJuIHByb3h5Q2xhc3MoKTsKIH0KIAotSlNWYWx1ZSBQcm94eUluc3RhbmNlOjppbnZva2Uo
SlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEludm9rZVR5cGUgdHlwZSwgdWludDY0X3QgaWRlbnRpZmll
ciwgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBQcm94eUluc3RhbmNlOjppbnZv
a2UoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEludm9rZVR5cGUgdHlwZSwgdWludDY0X3QgaWRlbnRp
ZmllciwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBpZiAoIW1faW5zdGFuY2VQcm94eSkK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC0xOTYsNyArMTk2LDcgQEAgSlNWYWx1
ZSBQcm94eUluc3RhbmNlOjpnZXRNZXRob2QoSlNDOjpFeAogICAgIHJldHVybiBuZXcgKGV4ZWMp
IFByb3h5UnVudGltZU1ldGhvZChleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHBy
b3BlcnR5TmFtZSwgbWV0aG9kTGlzdCk7CiB9CiAKLUpTVmFsdWUgUHJveHlJbnN0YW5jZTo6aW52
b2tlTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgSlNDOjpSdW50aW1lTWV0aG9kKiBydW50aW1lTWV0
aG9kLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBQcm94eUluc3RhbmNlOjppbnZva2VN
ZXRob2QoRXhlY1N0YXRlKiBleGVjLCBKU0M6OlJ1bnRpbWVNZXRob2QqIHJ1bnRpbWVNZXRob2Qp
CiB7CiAgICAgaWYgKCFhc09iamVjdChydW50aW1lTWV0aG9kKS0+aW5oZXJpdHMoJlByb3h5UnVu
dGltZU1ldGhvZDo6c19pbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlw
ZUVycm9yLCAiQXR0ZW1wdCB0byBpbnZva2Ugbm9uLXBsdWctaW4gbWV0aG9kIG9uIHBsdWctaW4g
b2JqZWN0LiIpOwpAQCAtMjA3LDcgKzIwNyw3IEBAIEpTVmFsdWUgUHJveHlJbnN0YW5jZTo6aW52
b2tlTWV0aG9kKEV4ZWMKIAogICAgIFByb3h5TWV0aG9kKiBtZXRob2QgPSBzdGF0aWNfY2FzdDxQ
cm94eU1ldGhvZCo+KG1ldGhvZExpc3RbMF0pOwogCi0gICAgcmV0dXJuIGludm9rZShleGVjLCBJ
bnZva2UsIG1ldGhvZC0+c2VydmVySWRlbnRpZmllcigpLCBhcmdzKTsKKyAgICByZXR1cm4gaW52
b2tlKGV4ZWMsIEludm9rZSwgbWV0aG9kLT5zZXJ2ZXJJZGVudGlmaWVyKCksIEFyZ0xpc3QoZXhl
YykpOwogfQogCiBib29sIFByb3h5SW5zdGFuY2U6OnN1cHBvcnRzSW52b2tlRGVmYXVsdE1ldGhv
ZCgpIGNvbnN0CkBAIC0yMjgsMTAgKzIyOCwxMCBAQCBib29sIFByb3h5SW5zdGFuY2U6OnN1cHBv
cnRzSW52b2tlRGVmYXVsCiAgICAgICAgIAogICAgIHJldHVybiBmYWxzZTsKIH0KLSAgICAKLUpT
VmFsdWUgUHJveHlJbnN0YW5jZTo6aW52b2tlRGVmYXVsdE1ldGhvZChFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCisKK0pTVmFsdWUgUHJveHlJbnN0YW5jZTo6aW52b2tlRGVm
YXVsdE1ldGhvZChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGludm9rZShleGVjLCBJ
bnZva2VEZWZhdWx0LCAwLCBhcmdzKTsKKyAgICByZXR1cm4gaW52b2tlKGV4ZWMsIEludm9rZURl
ZmF1bHQsIDAsIEFyZ0xpc3QoZXhlYykpOwogfQogCiBib29sIFByb3h5SW5zdGFuY2U6OnN1cHBv
cnRzQ29uc3RydWN0KCkgY29uc3QKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDYwMzczKQorKysgTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTAtMDUt
MjggIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTaW1wbGlmaWVkIHRoZSBob3N0IGNhbGxp
bmcgY29udmVudGlvbi4KKworICAgICAgICBDaGFuZ2VkIHRoZXNlIHJlc3VsdHMgdG8gZXhwZWN0
IHRvIGZhaWwgdG8gc3RyaW5naWZ5IHRoZWlyIGV4Y2VwdGlvbgorICAgICAgICBvYmplY3RzIGlu
IHRoZSBjYXNlIG9mIHN0YWNrIG92ZXJmbG93LiAoU3RhbmRhcmRpemluZyB0aGUgY2FsbGluZwor
ICAgICAgICBjb252ZW50aW9uIGhhcyBpbXBsaWNpdGx5IGFkZGVkIHN0YWNrIG92ZXJmbG93IGNo
ZWNrcyB0byBzb21lIHBsYWNlcworICAgICAgICB3aGVyZSB0aGV5IHVzZWQgdG8gYmUgbWlzc2lu
Zy4pCisgICAgICAgIAorICAgICAgICBJbiBhIGZ1dHVyZSBwYXRjaCwgSSBwbGFuIHRvIGltcGxl
bWVudCBhIG1vcmUgcmVsaWFibGUgd2F5IHRvIHN0cmluZ2lmeQorICAgICAgICBleGNlcHRpb25z
IHdpdGhvdXQgaW52b2tpbmcgYSBKUyBmdW5jdGlvbi4gRm9yIG5vdywgdGhvdWdoLCBpdCBzZWVt
cyBiZXN0CisgICAgICAgIHRvIG1hdGNoIG90aGVyIHRlc3QgcmVzdWx0cywgaW5zdGVhZCBvZiBz
aWxlbnRseSBvdmVyZmxvd2luZyB0aGUgc3RhY2suCisKKyAgICAgICAgKiBmYXN0L2pzL2dsb2Jh
bC1yZWN1cnNpb24tb24tZnVsbC1zdGFjay1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC94
bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1yZWN1cnNpdmUtc3luYy1ldmVudC1leHBlY3Rl
ZC50eHQ6CisKIDIwMTAtMDUtMjggIENoYW5nIFNodSAgPENoYW5nLlNodUBub2tpYS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2pzL2dsb2JhbC1yZWN1cnNpb24tb24tZnVsbC1zdGFjay1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9nbG9iYWwtcmVjdXJzaW9u
LW9uLWZ1bGwtc3RhY2stZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA2MDM0MSkKKysrIExheW91dFRl
c3RzL2Zhc3QvanMvZ2xvYmFsLXJlY3Vyc2lvbi1vbi1mdWxsLXN0YWNrLWV4cGVjdGVkLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMgQEAKLUNPTlNPTEUgTUVTU0FHRTogbGluZSAwOiBS
YW5nZUVycm9yOiBNYXhpbXVtIGNhbGwgc3RhY2sgc2l6ZSBleGNlZWRlZC4KK0NPTlNPTEUgTUVT
U0FHRTogbGluZSAwOiAKIFRoaXMgdGVzdHMgZ2xvYmFsIGNvZGUgcmVjdXJzaW9uIHdoZW4gdGhl
IEpTIHN0YWNrIGlzIGZ1bGwuCiBQQVNTOiBFbnRlcmluZyBnbG9iYWwgY29kZSB3aXRoIGEgZnVs
bCBKUyBzdGFjayBkaWQgbm90IGNyYXNoLCBhbmQgZGlkIG5vdCBhbGxvdyBjb250aW51ZWQgcmVj
dXJzaW9uLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC94bWxodHRwcmVxdWVzdC94bWxodHRwcmVx
dWVzdC1yZWN1cnNpdmUtc3luYy1ldmVudC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1yZWN1cnNpdmUtc3lu
Yy1ldmVudC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDYwMzQxKQorKysgTGF5b3V0VGVzdHMvZmFz
dC94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1yZWN1cnNpdmUtc3luYy1ldmVudC1leHBl
Y3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACi1DT05TT0xFIE1FU1NBR0U6
IGxpbmUgMDogUmFuZ2VFcnJvcjogTWF4aW11bSBjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWQuCi1D
T05TT0xFIE1FU1NBR0U6IGxpbmUgMDogUmFuZ2VFcnJvcjogTWF4aW11bSBjYWxsIHN0YWNrIHNp
emUgZXhjZWVkZWQuCi1DT05TT0xFIE1FU1NBR0U6IGxpbmUgMDogUmFuZ2VFcnJvcjogTWF4aW11
bSBjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWQuCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMDogCitD
T05TT0xFIE1FU1NBR0U6IGxpbmUgMDogCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMDogCiBUaGlz
IHRlc3RzIHRoYXQgaGF2aW5nIGluZmluaXRlIHJlY3Vyc2lvbiBpbiBYTUxIdHRwUmVxdWVzdCBl
dmVudCBoYW5kbGVyIGRvZXMgbm90IGNyYXNoLiAKIFBBU1MKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57379</attachid>
            <date>2010-05-28 14:26:20 -0700</date>
            <delta_ts>2010-05-28 17:34:54 -0700</delta_ts>
            <desc>PART ONE: Functional code changes</desc>
            <filename>ro0.txt</filename>
            <type>text/plain</type>
            <size>100674</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDYwMzczKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzgwIEBACisyMDEwLTA1LTI4ICBHZW9mZnJl
eSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgU2ltcGxpZmllZCB0aGUgaG9zdCBjYWxsaW5nIGNvbnZlbnRp
b24uCisgICAgICAgIAorICAgICAgICAxNyUgc3BlZWR1cCBvbiBob3N0IGZ1bmN0aW9uIGNhbGxz
LiBObyBjaGFuZ2Ugb24gU3VuU3BpZGVyLgorICAgICAgICAKKyAgICAgICAgQWxsIEpTIGNhbGxz
IChidXQgbm90IGNvbnN0cnVjdHMsIHlldCkgbm93IGdvIHRocm91Z2ggdGhlIG5vcm1hbCBKUwor
ICAgICAgICBjYWxsaW5nIGNvbnZlbnRpb24gdmlhIHRoZSBSZWdpc3RlckZpbGUuIEFzIGEgcmVz
dWx0LCB0aGUgaG9zdCBjYWxsaW5nCisgICAgICAgIGNvbnZlbnRpb24sIHdoaWNoIHVzZWQgdG8g
YmUgdGhpcworCisgICAgICAgICAgICBKU1ZhbHVlIChKU0NfSE9TVF9DQUxMICpOYXRpdmVGdW5j
dGlvbikoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYpCisgICAgICAgICAgICAKKyAgICAgICAgaXMgbm93IHRoaXMKKworICAgICAgICAgICAg
SlNWYWx1ZSAoSlNDX0hPU1RfQ0FMTCAqTmF0aXZlRnVuY3Rpb24pKEV4ZWNTdGF0ZSopCisgICAg
ICAgICAgICAKKyAgICAgICAgQ2FsbGVlLCAndGhpcycsIGFuZCBhcmd1bWVudCBhY2Nlc3MgYWxs
IGhhcGVuIHJlbGF0aXZlIHRvIHRoZSBFeGVjU3RhdGUqLAorICAgICAgICB3aGljaCBpcyBhIHBv
aW50ZXIgaW50byB0aGUgUmVnaXN0ZXJGaWxlLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRj
aCBjb21lcyBpbiB0d28gcGFydHMuCisgICAgICAgIAorICAgICAgICBQQVJUIE9ORTogRnVuY3Rp
b25hbCBjb2RlIGNoYW5nZXMuCisgICAgICAgIAorICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOiBE
aXNhYmxlZCBvcHRpbWl6ZWQgY2FsbHMgb24gcGxhdGZvcm1zIEkgZGlkbid0IHRlc3QuCisgICAg
ICAgIFdlIGNhbiByZS1lbmFibGUgb25jZSB3ZSB2ZXJpZnkgdGhhdCBob3N0IGNhbGxzIG9uIHRo
ZXNlIHBsYXRmb3JtcyBhcmUKKyAgICAgICAgY29ycmVjdC4KKworICAgICAgICAqIGRlYnVnZ2Vy
L0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKEpTQzo6RGVidWdnZXJDYWxsRnJhbWU6
OmZ1bmN0aW9uTmFtZSk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lOjpjYWxjdWxh
dGVkRnVuY3Rpb25OYW1lKTogVXBkYXRlZCBmb3IgY2hhbmdlIHRvCisgICAgICAgIEV4ZWNTdGF0
ZTo6Y2FsbGVlKCkuCisKKyAgICAgICAgKEpTQzo6RGVidWdnZXJDYWxsRnJhbWU6OnRoaXNPYmpl
Y3QpOiBVcGRhdGVkIGZvciByZW1vdmFsIG9mIEV4ZWNTdGF0ZTo6dGhpc1ZhbHVlKCkuCisKKyAg
ICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwOgorICAgICAgICAqIGludGVycHJldGVy
L0NhbGxGcmFtZS5oOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OmNhbGxlZSk6CisgICAgICAg
IChKU0M6OkV4ZWNTdGF0ZTo6c2NvcGVDaGFpbik6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6
aW5pdCk6IENoYW5nZWQgY2FsbGVlKCkgdG8gYmUgSlNPYmplY3QqIGluc3RlYWQgb2YKKyAgICAg
ICAgSlNGdW5jdGlvbiogLS0gbm93LCBpdCBtaWdodCBiZSBzb21lIG90aGVyIGNhbGxhYmxlIGhv
c3Qgb2JqZWN0LgorCisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6aG9zdFRoaXNSZWdpc3Rlcik6
CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6aG9zdFRoaXNWYWx1ZSk6CisgICAgICAgIChKU0M6
OkV4ZWNTdGF0ZTo6YXJndW1lbnRDb3VudCk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OmFyZ3Vt
ZW50KToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpzZXRBcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6c2V0Q2FsbGVlKTogQWRkZWQgY29udmVu
aWVudCBhY2Nlc3NvcnMgZm9yIGFyZ3VtZW50cworICAgICAgICBmcm9tIHdpdGhpbiBhIGhvc3Qg
ZnVuY3Rpb24uIFJlbW92ZWQgdGhpc1ZhbHVlKCkgYmVjYXVzZSBpdCB3YXMgdG9vCisgICAgICAg
IHRlbXB0aW5nIHRvIHVzZSBpbmNvcnJlY3RseSwgYW5kIGl0IG9ubHkgaGFkIG9uZSBvciB0d28g
Y2xpZW50cywgYW55d2F5LgorCisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3Bw
OgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y2FsbEV2YWwpOiBVcGRhdGVkIGZvciByZW1v
dmFsIG9mIEV4ZWNTdGF0ZTo6dGhpc1ZhbHVlKCkuCisKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0
ZXI6OnRocm93RXhjZXB0aW9uKTogQmUgc3VyZSB0byBzaHJpbmsgdGhlIHJlZ2lzdGVyIGZpbGUK
KyAgICAgICAgYmVmb3JlIGludm9raW5nIHRoZSBleGNlcHRpb24gaGFuZGxlciwgdG8gcmVkdWNl
IHRoZSBjaGFuY2VzIHRoYXQgdGhlCisgICAgICAgIGhhbmRsZXIgd2lsbCByZS10aHJvdyBpbiB0
aGUgY2FzZSBvZiBzdGFjayBvdmVyZmxvdy4gKFJlLXRocm93aW5nIGlzIG5vdworICAgICAgICBt
b3JlIGxpa2VseSB0aGFuIGl0IHVzZWQgdG8gYmUsIHNpbmNlIHN0YW5kYXJkaXppbmcgdGhlIGNh
bGxpbmcgY29udmVudGlvbgorICAgICAgICBpbXBsaWNpdGx5IGFkZGVkIHN0YWNrIG92ZXJmbG93
IGNoZWNrcyB0byBzb21lIHBsYWNlcyB3aGVyZSB0aGV5IHVzZWQgdG8gYmUgbWlzc2luZy4pCisK
KyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGUpOiBDbGFyaWZpZWQgdGhlIHNjb3Bl
IG9mIER5bmFtaWNHbG9iYWxPYmplY3RTY29wZS4KKyAgICAgICAgVXBkYXRlZCBmb3IgQ2FsbEZy
YW1lOjppbml0IEFQSSBjaGFuZ2UuCisKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1
dGVDYWxsKTogQ2xhcmlmaWVkIHNjb3BlIG9mIER5bmFtaWNHbG9iYWxPYmplY3RTY29wZS4KKyAg
ICAgICAgVXBkYXRlZCBmb3IgQ2FsbEZyYW1lOjppbml0IEFQSSBjaGFuZ2UuIEFkZGVkIHN1cHBv
cnQgZm9yIGNhbGxpbmcgYSBob3N0CisgICAgICAgIGZ1bmN0aW9uLgorCisgICAgICAgIChKU0M6
OkludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KTogQ2xhcmlmaWVkIHNjb3BlIG9mIER5bmFt
aWNHbG9iYWxPYmplY3RTY29wZS4KKyAgICAgICAgVXBkYXRlZCBmb3IgQ2FsbEZyYW1lOjppbml0
IEFQSSBjaGFuZ2UuIAorCisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpwcmVwYXJlRm9yUmVw
ZWF0Q2FsbCk6IFVwZGF0ZWQgZm9yIENhbGxGcmFtZTo6aW5pdCBBUEkgY2hhbmdlLiAKKworICAg
ICAgICAoSlNDOjpJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUpOiBVcGRhdGVkIGZvciBDYWxs
RnJhbWU6OmluaXQgQVBJIGNoYW5nZS4KKyAgICAgICAgQWRkZWQgc29tZSBleHBsaWNpdCBKU1Zh
bHVlKEpTT2JqZWN0KikgaW5pdGlhbGl6YXRpb24sIHNpbmNlIHJlbGF4aW5nCisgICAgICAgIHRo
ZSBKU0Z1bmN0aW9uKiByZXN0cmljdGlvbiBvbiBjYWxsZWUgaGFzIG1hZGUgcmVnaXN0ZXIgdHlw
ZXMgbW9yZSBhbWJpZ3VvdXMuCisgICAgICAgIFJlbW92ZWQgdG9UaGlzT2JqZWN0KCkgY29udmVy
c2lvbiwgc2luY2UgYWxsIGNhbGxlZXMgZG8gaXQgdGhlbXNlbHZlcyBub3cuCisgICAgICAgIFVw
ZGF0ZWQgaG9zdCBmdW5jdGlvbiBjYWxsIGZvciBuZXcgaG9zdCBmdW5jdGlvbiBzaWduYXR1cmUu
IFVwZGF0ZWQgZm9yCisgICAgICAgIGNoYW5nZSB0byBFeGVjU3RhdGU6OmFyZ3VtZW50Q291bnQo
KSBBUEkuCisKKyAgICAgICAgKiBpbnRlcnByZXRlci9SZWdpc3Rlci5oOgorICAgICAgICAoSlND
OjpSZWdpc3Rlcjo6KToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXI6Om9wZXJhdG9yPSk6CisgICAg
ICAgIChKU0M6OlJlZ2lzdGVyOjpmdW5jdGlvbik6IENoYW5nZWQgY2FsbGVlKCkgdG8gYmUgSlNP
YmplY3QqIGluc3RlYWQgb2YKKyAgICAgICAgSlNGdW5jdGlvbiogLS0gbm93LCBpdCBtaWdodCBi
ZSBzb21lIG90aGVyIGNhbGxhYmxlIGhvc3Qgb2JqZWN0LgorCisgICAgICAgICogaml0L0pJVE9w
Y29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2Fs
bCk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKTogRGVsZXRlZCBhIGJ1bmNoIG9mIGNvZGUg
dGhhdAorICAgICAgICBzZXQgdXAgdGhlIGFyZ3VtZW50cyB0byBob3N0IGZ1bmN0aW9ucyAtLSBh
bGwgYnV0IG9uZSBvZiB0aGUgYXJndW1lbnRzCisgICAgICAgIGFyZSBnb25lIG5vdy4gVGhpcyBp
cyB0aGUgYWN0dWFsIG9wdGltaXphdGlvbi4KKworICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6
CisgICAgICAgIChKU0M6OkRFRklORV9TVFVCX0ZVTkNUSU9OKTogVXBkYXRlZCBmb3IgRXhlY1N0
YXRlIGFuZCBSZWdpc3RlciBBUEkKKyAgICAgICAgY2hhbmdlcyBub3RlZCBhYm92ZS4gUmVtb3Zl
ZCB0b1RoaXNPYmplY3QoKSBjb252ZXJzaW9uLCBzaW5jZSBhbGwgY2FsbGVlcworICAgICAgICBk
byBpdCB0aGVtc2VsdmVzIG5vdy4KKyAgICAgICAgCisgICAgICAgICogcnVudGltZS9BcmdMaXN0
Lmg6CisgICAgICAgIChKU0M6OkFyZ0xpc3Q6OkFyZ0xpc3QpOiBBcmdMaXN0IGlzIGdldHRpbmcg
Y2xvc2UgdG8gdW51c2VkLiBBZGRlZCBhCisgICAgICAgIHRlbXBvcmFyeSBzaGltIGZvciBjb252
ZXJ0aW5nIGZyb20gRXhlY1N0YXRlKiB0byBBcmdMaXN0IHdoZXJlIGl0J3Mgc3RpbGwKKyAgICAg
ICAgbmVjZXNzYXJ5LgorCisgICAgICAgICogcnVudGltZS9Bcmd1bWVudHMuaDoKKyAgICAgICAg
KEpTQzo6QXJndW1lbnRzOjpnZXRBcmd1bWVudHNEYXRhKToKKyAgICAgICAgKEpTQzo6QXJndW1l
bnRzOjpBcmd1bWVudHMpOiBVcGRhdGVkIGZvciBFeGVjU3RhdGUgYW5kIFJlZ2lzdGVyIEFQSQor
ICAgICAgICBjaGFuZ2VzIG5vdGVkIGFib3ZlLiAKKworICAgICAgICAqIHJ1bnRpbWUvQ2FsbERh
dGEuY3BwOgorICAgICAgICAoSlNDOjpjYWxsKTogQ2hhbmdlZCBjYWxsIGFsd2F5cyB0byBjYWxs
IEludGVycHJldGVyOjpleGVjdXRlQ2FsbCwgZXZlbgorICAgICAgICBmb3IgaG9zdCBmdW5jdGlv
bnMuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBub3JtYWwgY2FsbGluZyBjb252ZW50aW9uIGlzCisg
ICAgICAgIHNldCB1cCBpbiB0aGUgUmVnc2l0ZXJGaWxlIHdoZW4gY2FsbGluZyBmcm9tIEMrKyB0
byBob3N0IGZ1bmN0aW9uLgorCisgICAgICAgICogcnVudGltZS9DYWxsRGF0YS5oOiBDaGFuZ2Vk
IGhvc3QgZnVuY3Rpb24gc2lnbmF0dXJlIGFzIGRlc2NyaWJlZCBhYm92ZS4KKworICAgICAgICAq
IHJ1bnRpbWUvQ29uc3RydWN0RGF0YS5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdCk6IE1v
dmVkIEpTRnVuY3Rpb246OmNvbnN0cnVjdCBjb2RlIGhlcmUgc28gSSBjb3VsZCBuaXgKKyAgICAg
ICAgSlNGdW5jdGlvbjo6Y2FsbCBhbmQgSlNGdW5jdGlvbjo6Y2FsbC4gV2Ugd2FudCBhIEpTRnVu
Y3Rpb24tYWdub3N0aWMKKyAgICAgICAgd2F5IHRvIGNhbGwgYW5kIGNvbnN0cnVjdCwgc28gdGhh
dCBldmVyeXRoaW5nIHdvcmtzIG5hdHVyYWxseSBmb3Igbm9uLQorICAgICAgICBKU0Z1bmN0aW9u
IG9iamVjdHMuIAorCisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmNwcDoKKyAgICAgICAg
KEpTQzo6Y2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNGdW5jdGlvbi5oOiBVcGRhdGVkIGZvciBFeGVjU3RhdGUgYW5kIFJlZ2lzdGVyIEFQSSBjaGFu
Z2VzCisgICAgICAgIG5vdGVkIGFib3ZlLiBOaXhlZCBKU0Z1bmN0aW9uOjpjYWxsIGFuZCBKU0Z1
bmN0aW9uOjpjb25zdHJ1Y3QsIG5vdGVkIGFib3ZlLgorIAorICAgICAgICAqIHJ1bnRpbWUvSlNH
bG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6aW5pdCk6IERp
dHRvLgorCisgICAgICAgIFBBUlQgVFdPOiBHbG9iYWwgc2VhcmNoIGFuZCByZXBsYWNlLgorICAg
ICAgICAKKyAgICAgICAgSW4gdGhlIGFyZWFzIGJlbG93LCBJIHVzZWQgZ2xvYmFsIHNlYXJjaC1h
bmQtcmVwbGFjZSB0byBjaGFuZ2UKKyAgICAgICAgICAgIChFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKSA9PiAoRXhlY1N0YXRlKikKKyAgICAgICAgICAgIGFy
Z3Muc2l6ZSgpID0+IGV4ZWMtPmFyZ3VtZW50Q291bnQoKQorICAgICAgICAgICAgYXJncy5hdChp
KSA9PiBleGVjLT5hcmd1bWVudChpKQorCisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tGdW5jdGlv
bi5jcHA6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tGdW5jdGlvbjo6Y2FsbCk6CisgICAgICAg
ICogQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5oOgorICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2Jq
ZWN0Lmg6CisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaDoKKyAgICAg
ICAgKEpTQzo6OjpjYWxsKToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5leHA6CisgICAgICAg
ICoganNjLmNwcDoKKyAgICAgICAgKGZ1bmN0aW9uUHJpbnQpOgorICAgICAgICAoZnVuY3Rpb25E
ZWJ1Zyk6CisgICAgICAgIChmdW5jdGlvbkdDKToKKyAgICAgICAgKGZ1bmN0aW9uVmVyc2lvbik6
CisgICAgICAgIChmdW5jdGlvblJ1bik6CisgICAgICAgIChmdW5jdGlvbkxvYWQpOgorICAgICAg
ICAoZnVuY3Rpb25DaGVja1N5bnRheCk6CisgICAgICAgIChmdW5jdGlvblNldFNhbXBsaW5nRmxh
Z3MpOgorICAgICAgICAoZnVuY3Rpb25DbGVhclNhbXBsaW5nRmxhZ3MpOgorICAgICAgICAoZnVu
Y3Rpb25SZWFkbGluZSk6CisgICAgICAgIChmdW5jdGlvblF1aXQpOgorICAgICAgICAqIHJ1bnRp
bWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNhbGxBcnJheUNvbnN0cnVj
dG9yKToKKyAgICAgICAgKEpTQzo6YXJyYXlDb25zdHJ1Y3RvcklzQXJyYXkpOgorICAgICAgICAq
IHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVu
Y1RvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyk6
CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jSm9pbik6CisgICAgICAgIChKU0M6OmFycmF5
UHJvdG9GdW5jQ29uY2F0KToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNQb3ApOgorICAg
ICAgICAoSlNDOjphcnJheVByb3RvRnVuY1B1c2gpOgorICAgICAgICAoSlNDOjphcnJheVByb3Rv
RnVuY1JldmVyc2UpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NoaWZ0KToKKyAgICAg
ICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNTbGljZSk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9G
dW5jU29ydCk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jU3BsaWNlKToKKyAgICAgICAg
KEpTQzo6YXJyYXlQcm90b0Z1bmNVblNoaWZ0KToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1
bmNGaWx0ZXIpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY01hcCk6CisgICAgICAgIChK
U0M6OmFycmF5UHJvdG9GdW5jRXZlcnkpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY0Zv
ckVhY2gpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NvbWUpOgorICAgICAgICAoSlND
OjphcnJheVByb3RvRnVuY1JlZHVjZSk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jUmVk
dWNlUmlnaHQpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY0luZGV4T2YpOgorICAgICAg
ICAoSlNDOjphcnJheVByb3RvRnVuY0xhc3RJbmRleE9mKToKKyAgICAgICAgKiBydW50aW1lL0Jv
b2xlYW5Db25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNhbGxCb29sZWFuQ29uc3RydWN0
b3IpOgorICAgICAgICAqIHJ1bnRpbWUvQm9vbGVhblByb3RvdHlwZS5jcHA6CisgICAgICAgIChK
U0M6OmJvb2xlYW5Qcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAgIChKU0M6OmJvb2xlYW5Qcm90
b0Z1bmNWYWx1ZU9mKToKKyAgICAgICAgKiBydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHA6Cisg
ICAgICAgIChKU0M6OmNhbGxEYXRlKToKKyAgICAgICAgKEpTQzo6ZGF0ZVBhcnNlKToKKyAgICAg
ICAgKEpTQzo6ZGF0ZU5vdyk6CisgICAgICAgIChKU0M6OmRhdGVVVEMpOgorICAgICAgICAqIHJ1
bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OmZvcm1hdExvY2FsZURhdGUp
OgorICAgICAgICAoSlNDOjpmaWxsU3RydWN0dXJlc1VzaW5nVGltZUFyZ3MpOgorICAgICAgICAo
SlNDOjpmaWxsU3RydWN0dXJlc1VzaW5nRGF0ZUFyZ3MpOgorICAgICAgICAoSlNDOjpkYXRlUHJv
dG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9VVENTdHJpbmcp
OgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9JU09TdHJpbmcpOgorICAgICAgICAoSlND
OjpkYXRlUHJvdG9GdW5jVG9EYXRlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVu
Y1RvVGltZVN0cmluZyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNUb0xvY2FsZVN0cmlu
Zyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNUb0xvY2FsZURhdGVTdHJpbmcpOgorICAg
ICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9Mb2NhbGVUaW1lU3RyaW5nKToKKyAgICAgICAgKEpT
Qzo6ZGF0ZVByb3RvRnVuY0dldFRpbWUpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0
RnVsbFllYXIpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0VVRDRnVsbFllYXIpOgor
ICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9HTVRTdHJpbmcpOgorICAgICAgICAoSlNDOjpk
YXRlUHJvdG9GdW5jR2V0TW9udGgpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0VVRD
TW9udGgpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0RGF0ZSk6CisgICAgICAgIChK
U0M6OmRhdGVQcm90b0Z1bmNHZXRVVENEYXRlKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVu
Y0dldERheSk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRVVENEYXkpOgorICAgICAg
ICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0SG91cnMpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9G
dW5jR2V0VVRDSG91cnMpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0TWludXRlcyk6
CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRVVENNaW51dGVzKToKKyAgICAgICAgKEpT
Qzo6ZGF0ZVByb3RvRnVuY0dldFNlY29uZHMpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5j
R2V0VVRDU2Vjb25kcyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRNaWxsaVNlY29u
ZHMpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0VVRDTWlsbGlzZWNvbmRzKToKKyAg
ICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY0dldFRpbWV6b25lT2Zmc2V0KToKKyAgICAgICAgKEpT
Qzo6ZGF0ZVByb3RvRnVuY1NldFRpbWUpOgorICAgICAgICAoSlNDOjpzZXROZXdWYWx1ZUZyb21U
aW1lQXJncyk6CisgICAgICAgIChKU0M6OnNldE5ld1ZhbHVlRnJvbURhdGVBcmdzKToKKyAgICAg
ICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1NldE1pbGxpU2Vjb25kcyk6CisgICAgICAgIChKU0M6OmRh
dGVQcm90b0Z1bmNTZXRVVENNaWxsaXNlY29uZHMpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9G
dW5jU2V0U2Vjb25kcyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNTZXRVVENTZWNvbmRz
KToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1NldE1pbnV0ZXMpOgorICAgICAgICAoSlND
OjpkYXRlUHJvdG9GdW5jU2V0VVRDTWludXRlcyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1
bmNTZXRIb3Vycyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNTZXRVVENIb3Vycyk6Cisg
ICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNTZXREYXRlKToKKyAgICAgICAgKEpTQzo6ZGF0ZVBy
b3RvRnVuY1NldFVUQ0RhdGUpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jU2V0TW9udGgp
OgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jU2V0VVRDTW9udGgpOgorICAgICAgICAoSlND
OjpkYXRlUHJvdG9GdW5jU2V0RnVsbFllYXIpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5j
U2V0VVRDRnVsbFllYXIpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jU2V0WWVhcik6Cisg
ICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRZZWFyKToKKyAgICAgICAgKEpTQzo6ZGF0ZVBy
b3RvRnVuY1RvSlNPTik6CisgICAgICAgICogcnVudGltZS9FcnJvckNvbnN0cnVjdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6Y2FsbEVycm9yQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUv
RXJyb3JQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjplcnJvclByb3RvRnVuY1RvU3RyaW5n
KToKKyAgICAgICAgKiBydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAo
SlNDOjpjYWxsRnVuY3Rpb25Db25zdHJ1Y3Rvcik6CisgICAgICAgICogcnVudGltZS9GdW5jdGlv
blByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OmNhbGxGdW5jdGlvblByb3RvdHlwZSk6Cisg
ICAgICAgIChKU0M6OmZ1bmN0aW9uUHJvdG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpm
dW5jdGlvblByb3RvRnVuY0FwcGx5KToKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25Qcm90b0Z1bmND
YWxsKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcDoKKyAg
ICAgICAgKEpTQzo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6ZGVjb2RlKToKKyAgICAgICAgKEpT
Qzo6Z2xvYmFsRnVuY0V2YWwpOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jUGFyc2VJbnQpOgor
ICAgICAgICAoSlNDOjpnbG9iYWxGdW5jUGFyc2VGbG9hdCk6CisgICAgICAgIChKU0M6Omdsb2Jh
bEZ1bmNJc05hTik6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNJc0Zpbml0ZSk6CisgICAgICAg
IChKU0M6Omdsb2JhbEZ1bmNEZWNvZGVVUkkpOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jRGVj
b2RlVVJJQ29tcG9uZW50KToKKyAgICAgICAgKEpTQzo6Z2xvYmFsRnVuY0VuY29kZVVSSSk6Cisg
ICAgICAgIChKU0M6Omdsb2JhbEZ1bmNFbmNvZGVVUklDb21wb25lbnQpOgorICAgICAgICAoSlND
OjpnbG9iYWxGdW5jRXNjYXBlKToKKyAgICAgICAgKEpTQzo6Z2xvYmFsRnVuY1VuZXNjYXBlKToK
KyAgICAgICAgKEpTQzo6Z2xvYmFsRnVuY0pTQ1ByaW50KToKKyAgICAgICAgKiBydW50aW1lL0pT
R2xvYmFsT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgICogcnVudGltZS9KU09OT2JqZWN0LmNw
cDoKKyAgICAgICAgKEpTQzo6SlNPTlByb3RvRnVuY1BhcnNlKToKKyAgICAgICAgKEpTQzo6SlNP
TlByb3RvRnVuY1N0cmluZ2lmeSk6CisgICAgICAgICogcnVudGltZS9KU1N0cmluZy5oOgorICAg
ICAgICAqIHJ1bnRpbWUvTWF0aE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1
bmNBYnMpOgorICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5jQUNvcyk6CisgICAgICAgIChKU0M6
Om1hdGhQcm90b0Z1bmNBU2luKToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY0FUYW4pOgor
ICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5jQVRhbjIpOgorICAgICAgICAoSlNDOjptYXRoUHJv
dG9GdW5jQ2VpbCk6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNDb3MpOgorICAgICAgICAo
SlNDOjptYXRoUHJvdG9GdW5jRXhwKToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY0Zsb29y
KToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY0xvZyk6CisgICAgICAgIChKU0M6Om1hdGhQ
cm90b0Z1bmNNYXgpOgorICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5jTWluKToKKyAgICAgICAg
KEpTQzo6bWF0aFByb3RvRnVuY1Bvdyk6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNSYW5k
b20pOgorICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5jUm91bmQpOgorICAgICAgICAoSlNDOjpt
YXRoUHJvdG9GdW5jU2luKToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY1NxcnQpOgorICAg
ICAgICAoSlNDOjptYXRoUHJvdG9GdW5jVGFuKToKKyAgICAgICAgKiBydW50aW1lL05hdGl2ZUVy
cm9yQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjYWxsTmF0aXZlRXJyb3JDb25zdHJ1
Y3Rvcik6CisgICAgICAgICogcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAg
IChKU0M6OmNhbGxOdW1iZXJDb25zdHJ1Y3Rvcik6CisgICAgICAgICogcnVudGltZS9OdW1iZXJQ
cm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpudW1iZXJQcm90b0Z1bmNUb1N0cmluZyk6Cisg
ICAgICAgIChKU0M6Om51bWJlclByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKToKKyAgICAgICAgKEpT
Qzo6bnVtYmVyUHJvdG9GdW5jVmFsdWVPZik6CisgICAgICAgIChKU0M6Om51bWJlclByb3RvRnVu
Y1RvRml4ZWQpOgorICAgICAgICAoSlNDOjpudW1iZXJQcm90b0Z1bmNUb0V4cG9uZW50aWFsKToK
KyAgICAgICAgKEpTQzo6bnVtYmVyUHJvdG9GdW5jVG9QcmVjaXNpb24pOgorICAgICAgICAqIHJ1
bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjYWxsT2JqZWN0Q29u
c3RydWN0b3IpOgorICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3RvckdldFByb3RvdHlwZU9m
KToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IpOgorICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3RvckdldE93blByb3BlcnR5TmFtZXMp
OgorICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3RvcktleXMpOgorICAgICAgICAoSlNDOjpv
YmplY3RDb25zdHJ1Y3RvckRlZmluZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29u
c3RydWN0b3JEZWZpbmVQcm9wZXJ0aWVzKToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0
b3JDcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcDoKKyAgICAg
ICAgKEpTQzo6b2JqZWN0UHJvdG9GdW5jVmFsdWVPZik6CisgICAgICAgIChKU0M6Om9iamVjdFBy
b3RvRnVuY0hhc093blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG9GdW5jSXNQ
cm90b3R5cGVPZik6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY0RlZmluZUdldHRlcik6
CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY0RlZmluZVNldHRlcik6CisgICAgICAgIChK
U0M6Om9iamVjdFByb3RvRnVuY0xvb2t1cEdldHRlcik6CisgICAgICAgIChKU0M6Om9iamVjdFBy
b3RvRnVuY0xvb2t1cFNldHRlcik6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY1Byb3Bl
cnR5SXNFbnVtZXJhYmxlKToKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG9GdW5jVG9Mb2NhbGVT
dHJpbmcpOgorICAgICAgICAoSlNDOjpvYmplY3RQcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAg
ICogcnVudGltZS9PYmplY3RQcm90b3R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL09wZXJhdGlv
bnMuaDoKKyAgICAgICAgKEpTQzo6anNTdHJpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhw
Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjYWxsUmVnRXhwQ29uc3RydWN0b3IpOgor
ICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhw
T2JqZWN0Ojp0ZXN0KToKKyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0OjpleGVjKToKKyAgICAg
ICAgKEpTQzo6Y2FsbFJlZ0V4cE9iamVjdCk6CisgICAgICAgIChKU0M6OlJlZ0V4cE9iamVjdDo6
bWF0Y2gpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0Lmg6CisgICAgICAgICogcnVu
dGltZS9SZWdFeHBQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpyZWdFeHBQcm90b0Z1bmNU
ZXN0KToKKyAgICAgICAgKEpTQzo6cmVnRXhwUHJvdG9GdW5jRXhlYyk6CisgICAgICAgIChKU0M6
OnJlZ0V4cFByb3RvRnVuY0NvbXBpbGUpOgorICAgICAgICAoSlNDOjpyZWdFeHBQcm90b0Z1bmNU
b1N0cmluZyk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChKU0M6OnN0cmluZ0Zyb21DaGFyQ29kZVNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6c3Ry
aW5nRnJvbUNoYXJDb2RlKToKKyAgICAgICAgKEpTQzo6Y2FsbFN0cmluZ0NvbnN0cnVjdG9yKToK
KyAgICAgICAgKiBydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OnN0
cmluZ1Byb3RvRnVuY1JlcGxhY2UpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNUb1N0
cmluZyk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0NoYXJBdCk6CisgICAgICAgIChK
U0M6OnN0cmluZ1Byb3RvRnVuY0NoYXJDb2RlQXQpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90
b0Z1bmNDb25jYXQpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNJbmRleE9mKToKKyAg
ICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jTGFzdEluZGV4T2YpOgorICAgICAgICAoSlNDOjpz
dHJpbmdQcm90b0Z1bmNNYXRjaCk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1NlYXJj
aCk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1NsaWNlKToKKyAgICAgICAgKEpTQzo6
c3RyaW5nUHJvdG9GdW5jU3BsaXQpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTdWJz
dHIpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTdWJzdHJpbmcpOgorICAgICAgICAo
SlNDOjpzdHJpbmdQcm90b0Z1bmNUb0xvd2VyQ2FzZSk6CisgICAgICAgIChKU0M6OnN0cmluZ1By
b3RvRnVuY1RvVXBwZXJDYXNlKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jTG9jYWxl
Q29tcGFyZSk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0JpZyk6CisgICAgICAgIChK
U0M6OnN0cmluZ1Byb3RvRnVuY1NtYWxsKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5j
QmxpbmspOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNCb2xkKToKKyAgICAgICAgKEpT
Qzo6c3RyaW5nUHJvdG9GdW5jRml4ZWQpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNJ
dGFsaWNzKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jU3RyaWtlKToKKyAgICAgICAg
KEpTQzo6c3RyaW5nUHJvdG9GdW5jU3ViKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5j
U3VwKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jRm9udGNvbG9yKToKKyAgICAgICAg
KEpTQzo6c3RyaW5nUHJvdG9GdW5jRm9udHNpemUpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90
b0Z1bmNBbmNob3IpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNMaW5rKToKKyAgICAg
ICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jVHJpbSk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3Rv
RnVuY1RyaW1MZWZ0KToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jVHJpbVJpZ2h0KToK
KwogMjAxMC0wNS0yNyAgTHVpeiBBZ29zdGluaSAgPGx1aXouYWdvc3RpbmlAb3BlbmJvc3NhLm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IEphdmFTY3JpcHRD
b3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDYwMzQxKQor
KysgSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NCwxMCArNDQsMTAgQEAgY29uc3QgVVN0cmluZyogRGVidWdnZXJDYWxsRnJh
bWU6OmZ1bmN0aQogICAgIGlmICghbV9jYWxsRnJhbWUtPmNhbGxlZSgpKQogICAgICAgICByZXR1
cm4gMDsKIAotICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gYXNGdW5jdGlvbihtX2NhbGxGcmFt
ZS0+Y2FsbGVlKCkpOwotICAgIGlmICghZnVuY3Rpb24pCisgICAgSlNPYmplY3QqIGZ1bmN0aW9u
ID0gbV9jYWxsRnJhbWUtPmNhbGxlZSgpOworICAgIGlmICghZnVuY3Rpb24gfHwgIWZ1bmN0aW9u
LT5pbmhlcml0cygmSlNGdW5jdGlvbjo6aW5mbykpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJl
dHVybiAmZnVuY3Rpb24tPm5hbWUobV9jYWxsRnJhbWUpOworICAgIHJldHVybiAmYXNGdW5jdGlv
bihmdW5jdGlvbiktPm5hbWUobV9jYWxsRnJhbWUpOwogfQogICAgIAogVVN0cmluZyBEZWJ1Z2dl
ckNhbGxGcmFtZTo6Y2FsY3VsYXRlZEZ1bmN0aW9uTmFtZSgpIGNvbnN0CkBAIC01NSwxMyArNTUs
MTEgQEAgVVN0cmluZyBEZWJ1Z2dlckNhbGxGcmFtZTo6Y2FsY3VsYXRlZEZ1bgogICAgIGlmICgh
bV9jYWxsRnJhbWUtPmNvZGVCbG9jaygpKQogICAgICAgICByZXR1cm4gVVN0cmluZygpOwogCi0g
ICAgaWYgKCFtX2NhbGxGcmFtZS0+Y2FsbGVlKCkpCi0gICAgICAgIHJldHVybiBVU3RyaW5nKCk7
CisgICAgSlNPYmplY3QqIGZ1bmN0aW9uID0gbV9jYWxsRnJhbWUtPmNhbGxlZSgpOworICAgIGlm
ICghZnVuY3Rpb24gfHwgIWZ1bmN0aW9uLT5pbmhlcml0cygmSlNGdW5jdGlvbjo6aW5mbykpCisg
ICAgICAgIHJldHVybiAwOwogCi0gICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBhc0Z1bmN0aW9u
KG1fY2FsbEZyYW1lLT5jYWxsZWUoKSk7Ci0gICAgaWYgKCFmdW5jdGlvbikKLSAgICAgICAgcmV0
dXJuIFVTdHJpbmcoKTsKLSAgICByZXR1cm4gZnVuY3Rpb24tPmNhbGN1bGF0ZWREaXNwbGF5TmFt
ZShtX2NhbGxGcmFtZSk7CisgICAgcmV0dXJuIGFzRnVuY3Rpb24oZnVuY3Rpb24pLT5jYWxjdWxh
dGVkRGlzcGxheU5hbWUobV9jYWxsRnJhbWUpOwogfQogCiBEZWJ1Z2dlckNhbGxGcmFtZTo6VHlw
ZSBEZWJ1Z2dlckNhbGxGcmFtZTo6dHlwZSgpIGNvbnN0CkBAIC03NCwxMCArNzIsMTUgQEAgRGVi
dWdnZXJDYWxsRnJhbWU6OlR5cGUgRGVidWdnZXJDYWxsRnJhbQogCiBKU09iamVjdCogRGVidWdn
ZXJDYWxsRnJhbWU6OnRoaXNPYmplY3QoKSBjb25zdAogewotICAgIGlmICghbV9jYWxsRnJhbWUt
PmNvZGVCbG9jaygpKQorICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9jYWxsRnJhbWUtPmNv
ZGVCbG9jaygpOworICAgIGlmICghY29kZUJsb2NrKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IEpTVmFsdWUgdGhpc1ZhbHVlID0gbV9jYWxsRnJhbWUtPnIoY29kZUJsb2NrLT50aGlzUmVnaXN0
ZXIoKSkuanNWYWx1ZSgpOworICAgIGlmICghdGhpc1ZhbHVlLmlzT2JqZWN0KCkpCiAgICAgICAg
IHJldHVybiAwOwogCi0gICAgcmV0dXJuIGFzT2JqZWN0KG1fY2FsbEZyYW1lLT50aGlzVmFsdWUo
KSk7CisgICAgcmV0dXJuIGFzT2JqZWN0KHRoaXNWYWx1ZSk7CiB9CiAKIEpTVmFsdWUgRGVidWdn
ZXJDYWxsRnJhbWU6OmV2YWx1YXRlKGNvbnN0IFVTdHJpbmcmIHNjcmlwdCwgSlNWYWx1ZSYgZXhj
ZXB0aW9uKSBjb25zdApJbmRleDogSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1l
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUu
Y3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIEphdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxG
cmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDExICszMSw2IEBACiAKIG5hbWVzcGFjZSBK
U0MgewogCi1KU1ZhbHVlIENhbGxGcmFtZTo6dGhpc1ZhbHVlKCkKLXsKLSAgICByZXR1cm4gdGhp
c1tjb2RlQmxvY2soKS0+dGhpc1JlZ2lzdGVyKCldLmpzVmFsdWUoKTsKLX0KLQogI2lmbmRlZiBO
REVCVUcKIHZvaWQgQ2FsbEZyYW1lOjpkdW1wQ2FsbGVyKCkKIHsKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0NhbGxGcmFtZS5oCShyZXZpc2lvbiA2MDM0MSkKKysrIEphdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxNiArMzgs
MTMgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgIC8vIFBhc3NlZCBhcyB0aGUgZmlyc3QgYXJndW1l
bnQgdG8gbW9zdCBmdW5jdGlvbnMuCiAgICAgY2xhc3MgRXhlY1N0YXRlIDogcHJpdmF0ZSBSZWdp
c3RlciB7CiAgICAgcHVibGljOgotICAgICAgICBKU0Z1bmN0aW9uKiBjYWxsZWUoKSBjb25zdCB7
IHJldHVybiB0aGlzW1JlZ2lzdGVyRmlsZTo6Q2FsbGVlXS5mdW5jdGlvbigpOyB9CisgICAgICAg
IEpTT2JqZWN0KiBjYWxsZWUoKSBjb25zdCB7IHJldHVybiB0aGlzW1JlZ2lzdGVyRmlsZTo6Q2Fs
bGVlXS5mdW5jdGlvbigpOyB9CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgY29uc3Qg
eyByZXR1cm4gdGhpc1tSZWdpc3RlckZpbGU6OkNvZGVCbG9ja10uUmVnaXN0ZXI6OmNvZGVCbG9j
aygpOyB9CiAgICAgICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluKCkgY29uc3QKICAgICAg
ICAgewogICAgICAgICAgICAgQVNTRVJUKHRoaXNbUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluXS5S
ZWdpc3Rlcjo6c2NvcGVDaGFpbigpKTsKICAgICAgICAgICAgIHJldHVybiB0aGlzW1JlZ2lzdGVy
RmlsZTo6U2NvcGVDaGFpbl0uUmVnaXN0ZXI6OnNjb3BlQ2hhaW4oKTsKICAgICAgICAgfQotICAg
ICAgICBpbnQgYXJndW1lbnRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIHRoaXNbUmVnaXN0ZXJGaWxl
OjpBcmd1bWVudENvdW50XS5pKCk7IH0KLQotICAgICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSgpOwog
CiAgICAgICAgIC8vIEdsb2JhbCBvYmplY3QgaW4gd2hpY2ggZXhlY3V0aW9uIGJlZ2FuLgogICAg
ICAgICBKU0dsb2JhbE9iamVjdCogZHluYW1pY0dsb2JhbE9iamVjdCgpOwpAQCAtMTE4LDcgKzEx
NSw3IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgdm9pZCBzZXRTY29wZUNoYWluKFNjb3Bl
Q2hhaW5Ob2RlKiBzY29wZUNoYWluKSB7IHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4odGhpcylbUmVn
aXN0ZXJGaWxlOjpTY29wZUNoYWluXSA9IHNjb3BlQ2hhaW47IH0KIAogICAgICAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgaW5pdChDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb24qIHZQQywg
U2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sCi0gICAgICAgICAgICBDYWxsRnJhbWUqIGNhbGxl
ckZyYW1lLCBpbnQsIGludCBhcmdjLCBKU0Z1bmN0aW9uKiBmdW5jdGlvbikKKyAgICAgICAgICAg
IENhbGxGcmFtZSogY2FsbGVyRnJhbWUsIGludCBhcmdjLCBKU09iamVjdCogY2FsbGVlKQogICAg
ICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoY2FsbGVyRnJhbWUpOyAvLyBVc2Ugbm9DYWxsZXIo
KSByYXRoZXIgdGhhbiAwIGZvciB0aGUgb3V0ZXIgaG9zdCBjYWxsIGZyYW1lIGNhbGxlci4KIApA
QCAtMTI2LDIxICsxMjMsMzQgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICAgICAgc2V0U2Nv
cGVDaGFpbihzY29wZUNoYWluKTsKICAgICAgICAgICAgIHNldENhbGxlckZyYW1lKGNhbGxlckZy
YW1lKTsKICAgICAgICAgICAgIHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4odGhpcylbUmVnaXN0ZXJG
aWxlOjpSZXR1cm5QQ10gPSB2UEM7IC8vIFRoaXMgaXMgZWl0aGVyIGFuIEluc3RydWN0aW9uKiBv
ciBhIHBvaW50ZXIgaW50byBKSVQgZ2VuZXJhdGVkIGNvZGUgc3RvcmVkIGFzIGFuIEluc3RydWN0
aW9uKi4KLSAgICAgICAgICAgIHNldEFyZ3VtZW50Q291bnQoYXJnYyk7IC8vIG9yaWdpbmFsIGFy
Z3VtZW50IGNvdW50IChmb3IgdGhlIHNha2Ugb2YgdGhlICJhcmd1bWVudHMiIG9iamVjdCkKLSAg
ICAgICAgICAgIHNldENhbGxlZShmdW5jdGlvbik7CisgICAgICAgICAgICBzZXRBcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyhhcmdjKTsgLy8gb3JpZ2luYWwgYXJndW1lbnQgY291bnQgKGZvciB0
aGUgc2FrZSBvZiB0aGUgImFyZ3VtZW50cyIgb2JqZWN0KQorICAgICAgICAgICAgc2V0Q2FsbGVl
KGNhbGxlZSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBSZWFkIGEgcmVnaXN0ZXIgZnJvbSB0
aGUgY29kZWZyYW1lIChvciBjb25zdGFudCBmcm9tIHRoZSBDb2RlQmxvY2spLgogICAgICAgICBp
bmxpbmUgUmVnaXN0ZXImIHIoaW50KTsKIAorICAgICAgICAvLyBBY2Nlc3MgdG8gYXJndW1lbnRz
LgorICAgICAgICBpbnQgaG9zdFRoaXNSZWdpc3RlcigpIHsgcmV0dXJuIC1SZWdpc3RlckZpbGU6
OkNhbGxGcmFtZUhlYWRlclNpemUgLSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpOyB9Cisg
ICAgICAgIEpTVmFsdWUgaG9zdFRoaXNWYWx1ZSgpIHsgcmV0dXJuIHRoaXNbaG9zdFRoaXNSZWdp
c3RlcigpXS5qc1ZhbHVlKCk7IH0KKyAgICAgICAgc2l6ZV90IGFyZ3VtZW50Q291bnQoKSBjb25z
dCB7IHJldHVybiBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIC0gMTsgfQorICAgICAgICBz
aXplX3QgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSBjb25zdCB7IHJldHVybiB0aGlzW1Jl
Z2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudF0uaSgpOyB9CisgICAgICAgIEpTVmFsdWUgYXJndW1l
bnQoaW50IGFyZ3VtZW50TnVtYmVyKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgYXJndW1l
bnRJbmRleCA9IC1SZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgLSB0aGlzW1JlZ2lz
dGVyRmlsZTo6QXJndW1lbnRDb3VudF0uaSgpICsgYXJndW1lbnROdW1iZXIgKyAxOworICAgICAg
ICAgICAgaWYgKGFyZ3VtZW50SW5kZXggPj0gLVJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVy
U2l6ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzW2FyZ3VtZW50SW5kZXhdLmpzVmFsdWUoKTsKKyAgICAgICAgfQorCiAgICAg
ICAgIHN0YXRpYyBDYWxsRnJhbWUqIG5vQ2FsbGVyKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxDYWxsRnJhbWUqPihIb3N0Q2FsbEZyYW1lRmxhZyk7IH0KIAogICAgICAgICBib29sIGhhc0hv
c3RDYWxsRnJhbWVGbGFnKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJf
dD4odGhpcykgJiBIb3N0Q2FsbEZyYW1lRmxhZzsgfQogICAgICAgICBDYWxsRnJhbWUqIGFkZEhv
c3RDYWxsRnJhbWVGbGFnKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDYWxsRnJh
bWUqPihyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0aGlzKSB8IEhvc3RDYWxsRnJhbWVGbGFn
KTsgfQogICAgICAgICBDYWxsRnJhbWUqIHJlbW92ZUhvc3RDYWxsRnJhbWVGbGFnKCkgeyByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxDYWxsRnJhbWUqPihyZWludGVycHJldF9jYXN0PGludHB0cl90
Pih0aGlzKSAmIH5Ib3N0Q2FsbEZyYW1lRmxhZyk7IH0KIAotICAgICAgICB2b2lkIHNldEFyZ3Vt
ZW50Q291bnQoaW50IGNvdW50KSB7IHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4odGhpcylbUmVnaXN0
ZXJGaWxlOjpBcmd1bWVudENvdW50XSA9IFJlZ2lzdGVyOjp3aXRoSW50KGNvdW50KTsgfQotICAg
ICAgICB2b2lkIHNldENhbGxlZShKU0Z1bmN0aW9uKiBjYWxsZWUpIHsgc3RhdGljX2Nhc3Q8UmVn
aXN0ZXIqPih0aGlzKVtSZWdpc3RlckZpbGU6OkNhbGxlZV0gPSBjYWxsZWU7IH0KKyAgICAgICAg
dm9pZCBzZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhpbnQgY291bnQpIHsgc3RhdGljX2Nh
c3Q8UmVnaXN0ZXIqPih0aGlzKVtSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnRdID0gUmVnaXN0
ZXI6OndpdGhJbnQoY291bnQpOyB9CisgICAgICAgIHZvaWQgc2V0Q2FsbGVlKEpTT2JqZWN0KiBj
YWxsZWUpIHsgc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPih0aGlzKVtSZWdpc3RlckZpbGU6OkNhbGxl
ZV0gPSBjYWxsZWU7IH0KICAgICAgICAgdm9pZCBzZXRDb2RlQmxvY2soQ29kZUJsb2NrKiBjb2Rl
QmxvY2spIHsgc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPih0aGlzKVtSZWdpc3RlckZpbGU6OkNvZGVC
bG9ja10gPSBjb2RlQmxvY2s7IH0KIAogICAgIHByaXZhdGU6CkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIEphdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mzc1LDcgKzM3NSw3IEBAIE5FVkVSX0lOTElORSBKU1ZhbHVlIEludGVycHJldGVyOjpjYWxsRXYK
IAogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKICAgICBpZiAoZXZhbCkKLSAg
ICAgICAgcmVzdWx0ID0gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuaW50ZXJwcmV0ZXItPmV4ZWN1
dGUoZXZhbC5nZXQoKSwgY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpLnRvVGhpc09i
amVjdChjYWxsRnJhbWUpLCBjYWxsRnJhbWUtPnJlZ2lzdGVycygpIC0gcmVnaXN0ZXJGaWxlLT5z
dGFydCgpICsgcmVnaXN0ZXJPZmZzZXQsIHNjb3BlQ2hhaW4sICZleGNlcHRpb25WYWx1ZSk7Cisg
ICAgICAgIHJlc3VsdCA9IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmludGVycHJldGVyLT5leGVj
dXRlKGV2YWwuZ2V0KCksIGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5yKGNvZGVCbG9jay0+dGhpc1Jl
Z2lzdGVyKCkpLmpzVmFsdWUoKS50b1RoaXNPYmplY3QoY2FsbEZyYW1lKSwgY2FsbEZyYW1lLT5y
ZWdpc3RlcnMoKSAtIHJlZ2lzdGVyRmlsZS0+c3RhcnQoKSArIHJlZ2lzdGVyT2Zmc2V0LCBzY29w
ZUNoYWluLCAmZXhjZXB0aW9uVmFsdWUpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTYy
OCw4ICs2MjgsMTAgQEAgTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZvKiBJbnRlcnByZXRlcjo6dAog
ICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgLy8gTm93IHVud2luZCB0aGUgc2Nv
cGUgY2hhaW4gd2l0aGluIHRoZSBleGNlcHRpb24gaGFuZGxlcidzIGNhbGwgZnJhbWUuCisgICAg
Ly8gU2hyaW5rIHRoZSBKUyBzdGFjaywgaW4gY2FzZSBzdGFjayBvdmVyZmxvdyBtYWRlIGl0IGh1
Z2UuCisgICAgbV9yZWdpc3RlckZpbGUuc2hyaW5rKGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyBj
YWxsRnJhbWUtPmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyk7CiAKKyAgICAvLyBV
bndpbmQgdGhlIHNjb3BlIGNoYWluIHdpdGhpbiB0aGUgZXhjZXB0aW9uIGhhbmRsZXIncyBjYWxs
IGZyYW1lLgogICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gY2FsbEZyYW1lLT5zY29w
ZUNoYWluKCk7CiAgICAgU2NvcGVDaGFpbiBzYyhzY29wZUNoYWluKTsKICAgICBpbnQgc2NvcGVE
ZWx0YSA9IGRlcHRoKGNvZGVCbG9jaywgc2MpIC0gaGFuZGxlci0+c2NvcGVEZXB0aDsKQEAgLTY2
MSwxOSArNjYzLDIwIEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoUHJvZ3JhbUV4ZWMK
ICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAgIH0KIAotICAgIER5bmFtaWNHbG9iYWxPYmpl
Y3RTY29wZSBnbG9iYWxPYmplY3RTY29wZShjYWxsRnJhbWUsIHNjb3BlQ2hhaW4tPmdsb2JhbE9i
amVjdCk7Ci0KICAgICBKU0dsb2JhbE9iamVjdCogbGFzdEdsb2JhbE9iamVjdCA9IG1fcmVnaXN0
ZXJGaWxlLmdsb2JhbE9iamVjdCgpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBjYWxsRnJhbWUtPmR5bmFtaWNHbG9iYWxPYmplY3QoKTsKICAgICBnbG9iYWxPYmplY3QtPmNv
cHlHbG9iYWxzVG8obV9yZWdpc3RlckZpbGUpOwogCiAgICAgQ2FsbEZyYW1lKiBuZXdDYWxsRnJh
bWUgPSBDYWxsRnJhbWU6OmNyZWF0ZShvbGRFbmQgKyBjb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVy
cyArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSk7Ci0gICAgbmV3Q2FsbEZyYW1l
LT5yKGNvZGVCbG9jay0+dGhpc1JlZ2lzdGVyKCkpID0gSlNWYWx1ZSh0aGlzT2JqKTsKLSAgICBu
ZXdDYWxsRnJhbWUtPmluaXQoY29kZUJsb2NrLCAwLCBzY29wZUNoYWluLCBDYWxsRnJhbWU6Om5v
Q2FsbGVyKCksIDAsIDAsIDApOworICAgIEFTU0VSVChjb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVy
cyA9PSAxKTsgLy8gMSBwYXJhbWV0ZXIgZm9yICd0aGlzJy4KKyAgICBuZXdDYWxsRnJhbWUtPmlu
aXQoY29kZUJsb2NrLCAwLCBzY29wZUNoYWluLCBDYWxsRnJhbWU6Om5vQ2FsbGVyKCksIGNvZGVC
bG9jay0+bV9udW1QYXJhbWV0ZXJzLCAwKTsKKyAgICBuZXdDYWxsRnJhbWUtPnIobmV3Q2FsbEZy
YW1lLT5ob3N0VGhpc1JlZ2lzdGVyKCkpID0gSlNWYWx1ZSh0aGlzT2JqKTsKIAogICAgIGlmIChj
b2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKSkKICAgICAgICAgc2NvcGVDaGFpbi0+cmVm
KCk7CiAKKyAgICBEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGUgZ2xvYmFsT2JqZWN0U2NvcGUoY2Fs
bEZyYW1lLCBzY29wZUNoYWluLT5nbG9iYWxPYmplY3QpOworCiAgICAgUHJvZmlsZXIqKiBwcm9m
aWxlciA9IFByb2ZpbGVyOjplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UoKTsKICAgICBpZiAoKnBy
b2ZpbGVyKQogICAgICAgICAoKnByb2ZpbGVyKS0+d2lsbEV4ZWN1dGUobmV3Q2FsbEZyYW1lLCBw
cm9ncmFtLT5zb3VyY2VVUkwoKSwgcHJvZ3JhbS0+bGluZU5vKCkpOwpAQCAtNzAyLDkgKzcwNSw5
IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoUHJvZ3JhbUV4ZWMKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1KU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlQ2FsbChGdW5jdGlvbkV4
ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTRnVu
Y3Rpb24qIGZ1bmN0aW9uLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgQXJnTGlzdCYgYXJncywg
U2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIEpTVmFsdWUqIGV4Y2VwdGlvbikKK0pTVmFsdWUg
SW50ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU09iamVjdCog
ZnVuY3Rpb24sIENhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYgY2FsbERhdGEsIEpT
VmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBKU1ZhbHVlKiBleGNlcHRpb24p
CiB7Ci0gICAgQVNTRVJUKCFzY29wZUNoYWluLT5nbG9iYWxEYXRhLT5leGNlcHRpb24pOworICAg
IEFTU0VSVCghY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uKTsKIAogICAgIGlmICht
X3JlZW50cnlEZXB0aCA+PSBNYXhTbWFsbFRocmVhZFJlZW50cnlEZXB0aCkgewogICAgICAgICBp
ZiAobV9yZWVudHJ5RGVwdGggPj0gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkubWF4UmVlbnRyeURl
cHRoKSB7CkBAIC03MTQsNTEgKzcxNyw3OSBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRl
Q2FsbChGdW5jdGlvCiAgICAgfQogCiAgICAgUmVnaXN0ZXIqIG9sZEVuZCA9IG1fcmVnaXN0ZXJG
aWxlLmVuZCgpOwotICAgIGludCBhcmdjID0gMSArIGFyZ3Muc2l6ZSgpOyAvLyBpbXBsaWNpdCAi
dGhpcyIgcGFyYW1ldGVyCisgICAgaW50IGFyZ0NvdW50ID0gMSArIGFyZ3Muc2l6ZSgpOyAvLyBp
bXBsaWNpdCAidGhpcyIgcGFyYW1ldGVyCisgICAgc2l6ZV90IHJlZ2lzdGVyT2Zmc2V0ID0gYXJn
Q291bnQgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7CiAKLSAgICBpZiAoIW1f
cmVnaXN0ZXJGaWxlLmdyb3cob2xkRW5kICsgYXJnYykpIHsKKyAgICBpZiAoIW1fcmVnaXN0ZXJG
aWxlLmdyb3cob2xkRW5kICsgcmVnaXN0ZXJPZmZzZXQpKSB7CiAgICAgICAgICpleGNlcHRpb24g
PSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lKTsKICAgICAgICAgcmV0dXJuIGpz
TnVsbCgpOwogICAgIH0KIAotICAgIER5bmFtaWNHbG9iYWxPYmplY3RTY29wZSBnbG9iYWxPYmpl
Y3RTY29wZShjYWxsRnJhbWUsIHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdCk7Ci0KICAgICBDYWxs
RnJhbWUqIG5ld0NhbGxGcmFtZSA9IENhbGxGcmFtZTo6Y3JlYXRlKG9sZEVuZCk7CiAgICAgc2l6
ZV90IGRzdCA9IDA7Ci0gICAgbmV3Q2FsbEZyYW1lLT5yKDApID0gSlNWYWx1ZSh0aGlzT2JqKTsK
KyAgICBuZXdDYWxsRnJhbWUtPnIoMCkgPSB0aGlzVmFsdWU7CiAgICAgQXJnTGlzdDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gYXJncy5lbmQoKTsKICAgICBmb3IgKEFyZ0xpc3Q6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gYXJncy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgIG5ld0NhbGxG
cmFtZS0+cigrK2RzdCkgPSAqaXQ7CiAKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9ICZmdW5j
dGlvbkV4ZWN1dGFibGUtPmJ5dGVjb2RlRm9yQ2FsbChjYWxsRnJhbWUsIHNjb3BlQ2hhaW4pOwot
ICAgIG5ld0NhbGxGcmFtZSA9IHNsaWRlUmVnaXN0ZXJXaW5kb3dGb3JDYWxsKGNvZGVCbG9jaywg
Jm1fcmVnaXN0ZXJGaWxlLCBuZXdDYWxsRnJhbWUsIGFyZ2MgKyBSZWdpc3RlckZpbGU6OkNhbGxG
cmFtZUhlYWRlclNpemUsIGFyZ2MpOwotICAgIGlmIChVTkxJS0VMWSghbmV3Q2FsbEZyYW1lKSkg
ewotICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFt
ZSk7CisgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlSlMpIHsKKyAgICAgICAgU2NvcGVDaGFp
bk5vZGUqIGNhbGxEYXRhU2NvcGVDaGFpbiA9IGNhbGxEYXRhLmpzLnNjb3BlQ2hhaW47CisgICAg
ICAgIENvZGVCbG9jayogbmV3Q29kZUJsb2NrID0gJmNhbGxEYXRhLmpzLmZ1bmN0aW9uRXhlY3V0
YWJsZS0+Ynl0ZWNvZGVGb3JDYWxsKGNhbGxGcmFtZSwgY2FsbERhdGFTY29wZUNoYWluKTsKKwor
ICAgICAgICBuZXdDYWxsRnJhbWUgPSBzbGlkZVJlZ2lzdGVyV2luZG93Rm9yQ2FsbChuZXdDb2Rl
QmxvY2ssICZtX3JlZ2lzdGVyRmlsZSwgbmV3Q2FsbEZyYW1lLCByZWdpc3Rlck9mZnNldCwgYXJn
Q291bnQpOworICAgICAgICBpZiAoVU5MSUtFTFkoIW5ld0NhbGxGcmFtZSkpIHsKKyAgICAgICAg
ICAgICpleGNlcHRpb24gPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lKTsKKyAg
ICAgICAgICAgIG1fcmVnaXN0ZXJGaWxlLnNocmluayhvbGRFbmQpOworICAgICAgICAgICAgcmV0
dXJuIGpzTnVsbCgpOworICAgICAgICB9CisKKyAgICAgICAgbmV3Q2FsbEZyYW1lLT5pbml0KG5l
d0NvZGVCbG9jaywgMCwgY2FsbERhdGFTY29wZUNoYWluLCBjYWxsRnJhbWUtPmFkZEhvc3RDYWxs
RnJhbWVGbGFnKCksIGFyZ0NvdW50LCBmdW5jdGlvbik7CisKKyAgICAgICAgRHluYW1pY0dsb2Jh
bE9iamVjdFNjb3BlIGdsb2JhbE9iamVjdFNjb3BlKG5ld0NhbGxGcmFtZSwgY2FsbERhdGFTY29w
ZUNoYWluLT5nbG9iYWxPYmplY3QpOworCisgICAgICAgIFByb2ZpbGVyKiogcHJvZmlsZXIgPSBQ
cm9maWxlcjo6ZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlKCk7CisgICAgICAgIGlmICgqcHJvZmls
ZXIpCisgICAgICAgICAgICAoKnByb2ZpbGVyKS0+d2lsbEV4ZWN1dGUobmV3Q2FsbEZyYW1lLCBm
dW5jdGlvbik7CisKKyAgICAgICAgSlNWYWx1ZSByZXN1bHQ7CisgICAgICAgIHsKKyAgICAgICAg
ICAgIFNhbXBsaW5nVG9vbDo6Q2FsbFJlY29yZCBjYWxsUmVjb3JkKG1fc2FtcGxlci5nZXQoKSk7
CisKKyAgICAgICAgICAgIG1fcmVlbnRyeURlcHRoKys7CisgICAgI2lmIEVOQUJMRShKSVQpCisg
ICAgICAgICAgICByZXN1bHQgPSBjYWxsRGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUtPmppdENv
ZGVGb3JDYWxsKG5ld0NhbGxGcmFtZSwgY2FsbERhdGFTY29wZUNoYWluKS5leGVjdXRlKCZtX3Jl
Z2lzdGVyRmlsZSwgbmV3Q2FsbEZyYW1lLCBjYWxsRGF0YVNjb3BlQ2hhaW4tPmdsb2JhbERhdGEs
IGV4Y2VwdGlvbik7CisgICAgI2Vsc2UKKyAgICAgICAgICAgIHJlc3VsdCA9IHByaXZhdGVFeGVj
dXRlKE5vcm1hbCwgJm1fcmVnaXN0ZXJGaWxlLCBuZXdDYWxsRnJhbWUsIGV4Y2VwdGlvbik7Cisg
ICAgI2VuZGlmCisgICAgICAgICAgICBtX3JlZW50cnlEZXB0aC0tOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKCpwcm9maWxlcikKKyAgICAgICAgICAgICgqcHJvZmlsZXIpLT5kaWRFeGVjdXRl
KG5ld0NhbGxGcmFtZSwgZnVuY3Rpb24pOworCiAgICAgICAgIG1fcmVnaXN0ZXJGaWxlLnNocmlu
ayhvbGRFbmQpOwotICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgfQotICAgIC8vIGEgMCBjb2RlQmxvY2sgaW5kaWNhdGVzIGEgYnVpbHQtaW4gY2Fs
bGVyCi0gICAgbmV3Q2FsbEZyYW1lLT5pbml0KGNvZGVCbG9jaywgMCwgc2NvcGVDaGFpbiwgY2Fs
bEZyYW1lLT5hZGRIb3N0Q2FsbEZyYW1lRmxhZygpLCAwLCBhcmdjLCBmdW5jdGlvbik7CisKKyAg
ICBBU1NFUlQoY2FsbFR5cGUgPT0gQ2FsbFR5cGVIb3N0KTsKKyAgICBTY29wZUNoYWluTm9kZSog
c2NvcGVDaGFpbiA9IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpOworICAgIG5ld0NhbGxGcmFtZSA9
IENhbGxGcmFtZTo6Y3JlYXRlKG5ld0NhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyByZWdpc3Rlck9m
ZnNldCk7CisgICAgbmV3Q2FsbEZyYW1lLT5pbml0KDAsIDAsIHNjb3BlQ2hhaW4sIGNhbGxGcmFt
ZS0+YWRkSG9zdENhbGxGcmFtZUZsYWcoKSwgYXJnQ291bnQsIGZ1bmN0aW9uKTsKKworICAgIER5
bmFtaWNHbG9iYWxPYmplY3RTY29wZSBnbG9iYWxPYmplY3RTY29wZShuZXdDYWxsRnJhbWUsIHNj
b3BlQ2hhaW4tPmdsb2JhbE9iamVjdCk7CiAKICAgICBQcm9maWxlcioqIHByb2ZpbGVyID0gUHJv
ZmlsZXI6OmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSgpOwogICAgIGlmICgqcHJvZmlsZXIpCi0g
ICAgICAgICgqcHJvZmlsZXIpLT53aWxsRXhlY3V0ZShjYWxsRnJhbWUsIGZ1bmN0aW9uKTsKKyAg
ICAgICAgKCpwcm9maWxlciktPndpbGxFeGVjdXRlKG5ld0NhbGxGcmFtZSwgZnVuY3Rpb24pOwog
CiAgICAgSlNWYWx1ZSByZXN1bHQ7CiAgICAgewotICAgICAgICBTYW1wbGluZ1Rvb2w6OkNhbGxS
ZWNvcmQgY2FsbFJlY29yZChtX3NhbXBsZXIuZ2V0KCkpOwotCi0gICAgICAgIG1fcmVlbnRyeURl
cHRoKys7Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgcmVzdWx0ID0gZnVuY3Rpb25FeGVjdXRh
YmxlLT5qaXRDb2RlRm9yQ2FsbChuZXdDYWxsRnJhbWUsIHNjb3BlQ2hhaW4pLmV4ZWN1dGUoJm1f
cmVnaXN0ZXJGaWxlLCBuZXdDYWxsRnJhbWUsIHNjb3BlQ2hhaW4tPmdsb2JhbERhdGEsIGV4Y2Vw
dGlvbik7Ci0jZWxzZQotICAgICAgICByZXN1bHQgPSBwcml2YXRlRXhlY3V0ZShOb3JtYWwsICZt
X3JlZ2lzdGVyRmlsZSwgbmV3Q2FsbEZyYW1lLCBleGNlcHRpb24pOwotI2VuZGlmCi0gICAgICAg
IG1fcmVlbnRyeURlcHRoLS07CisgICAgICAgIFNhbXBsaW5nVG9vbDo6SG9zdENhbGxSZWNvcmQg
Y2FsbFJlY29yZChtX3NhbXBsZXIuZ2V0KCkpOworICAgICAgICByZXN1bHQgPSBjYWxsRGF0YS5u
YXRpdmUuZnVuY3Rpb24obmV3Q2FsbEZyYW1lKTsKICAgICB9CiAKICAgICBpZiAoKnByb2ZpbGVy
KQotICAgICAgICAoKnByb2ZpbGVyKS0+ZGlkRXhlY3V0ZShjYWxsRnJhbWUsIGZ1bmN0aW9uKTsK
KyAgICAgICAgKCpwcm9maWxlciktPmRpZEV4ZWN1dGUobmV3Q2FsbEZyYW1lLCBmdW5jdGlvbik7
CiAKICAgICBtX3JlZ2lzdGVyRmlsZS5zaHJpbmsob2xkRW5kKTsKICAgICByZXR1cm4gcmVzdWx0
OwpAQCAtNzgzLDggKzgxNCw2IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDb25zdHJ1
Y3QoRnUKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAgIH0KIAotICAgIER5bmFtaWNHbG9i
YWxPYmplY3RTY29wZSBnbG9iYWxPYmplY3RTY29wZShjYWxsRnJhbWUsIHNjb3BlQ2hhaW4tPmds
b2JhbE9iamVjdCk7Ci0KICAgICBDYWxsRnJhbWUqIG5ld0NhbGxGcmFtZSA9IENhbGxGcmFtZTo6
Y3JlYXRlKG9sZEVuZCk7CiAgICAgc2l6ZV90IGRzdCA9IDA7CiAgICAgbmV3Q2FsbEZyYW1lLT5y
KDApID0gSlNWYWx1ZSh0aGlzT2JqKTsKQEAgLTgwMCw3ICs4MjksOSBAQCBKU1ZhbHVlIEludGVy
cHJldGVyOjpleGVjdXRlQ29uc3RydWN0KEZ1CiAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAg
ICB9CiAgICAgLy8gYSAwIGNvZGVCbG9jayBpbmRpY2F0ZXMgYSBidWlsdC1pbiBjYWxsZXIKLSAg
ICBuZXdDYWxsRnJhbWUtPmluaXQoY29kZUJsb2NrLCAwLCBzY29wZUNoYWluLCBjYWxsRnJhbWUt
PmFkZEhvc3RDYWxsRnJhbWVGbGFnKCksIDAsIGFyZ2MsIGZ1bmN0aW9uKTsKKyAgICBuZXdDYWxs
RnJhbWUtPmluaXQoY29kZUJsb2NrLCAwLCBzY29wZUNoYWluLCBjYWxsRnJhbWUtPmFkZEhvc3RD
YWxsRnJhbWVGbGFnKCksIGFyZ2MsIGZ1bmN0aW9uKTsKKworICAgIER5bmFtaWNHbG9iYWxPYmpl
Y3RTY29wZSBnbG9iYWxPYmplY3RTY29wZShjYWxsRnJhbWUsIHNjb3BlQ2hhaW4tPmdsb2JhbE9i
amVjdCk7CiAKICAgICBQcm9maWxlcioqIHByb2ZpbGVyID0gUHJvZmlsZXI6OmVuYWJsZWRQcm9m
aWxlclJlZmVyZW5jZSgpOwogICAgIGlmICgqcHJvZmlsZXIpCkBAIC04NTgsNyArODg5LDcgQEAg
Q2FsbEZyYW1lQ2xvc3VyZSBJbnRlcnByZXRlcjo6cHJlcGFyZUZvcgogICAgICAgICByZXR1cm4g
Q2FsbEZyYW1lQ2xvc3VyZSgpOwogICAgIH0KICAgICAvLyBhIDAgY29kZUJsb2NrIGluZGljYXRl
cyBhIGJ1aWx0LWluIGNhbGxlcgotICAgIG5ld0NhbGxGcmFtZS0+aW5pdChjb2RlQmxvY2ssIDAs
IHNjb3BlQ2hhaW4sIGNhbGxGcmFtZS0+YWRkSG9zdENhbGxGcmFtZUZsYWcoKSwgMCwgYXJnYywg
ZnVuY3Rpb24pOworICAgIG5ld0NhbGxGcmFtZS0+aW5pdChjb2RlQmxvY2ssIDAsIHNjb3BlQ2hh
aW4sIGNhbGxGcmFtZS0+YWRkSG9zdENhbGxGcmFtZUZsYWcoKSwgYXJnYywgZnVuY3Rpb24pOwog
I2lmIEVOQUJMRShKSVQpCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlLT5qaXRDb2RlRm9yQ2FsbChu
ZXdDYWxsRnJhbWUsIHNjb3BlQ2hhaW4pOwogI2VuZGlmCkBAIC05NTcsOCArOTg4LDkgQEAgSlNW
YWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsRXhlY3V0YQogICAgIENhbGxGcmFtZSogbmV3
Q2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpjcmVhdGUobV9yZWdpc3RlckZpbGUuc3RhcnQoKSArIGds
b2JhbFJlZ2lzdGVyT2Zmc2V0KTsKIAogICAgIC8vIGEgMCBjb2RlQmxvY2sgaW5kaWNhdGVzIGEg
YnVpbHQtaW4gY2FsbGVyCi0gICAgbmV3Q2FsbEZyYW1lLT5yKGNvZGVCbG9jay0+dGhpc1JlZ2lz
dGVyKCkpID0gSlNWYWx1ZSh0aGlzT2JqKTsKLSAgICBuZXdDYWxsRnJhbWUtPmluaXQoY29kZUJs
b2NrLCAwLCBzY29wZUNoYWluLCBjYWxsRnJhbWUtPmFkZEhvc3RDYWxsRnJhbWVGbGFnKCksIDAs
IDAsIDApOworICAgIEFTU0VSVChjb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyA9PSAxKTsgLy8g
MSBwYXJhbWV0ZXIgZm9yICd0aGlzJy4KKyAgICBuZXdDYWxsRnJhbWUtPmluaXQoY29kZUJsb2Nr
LCAwLCBzY29wZUNoYWluLCBjYWxsRnJhbWUtPmFkZEhvc3RDYWxsRnJhbWVGbGFnKCksIGNvZGVC
bG9jay0+bV9udW1QYXJhbWV0ZXJzLCAwKTsKKyAgICBuZXdDYWxsRnJhbWUtPnIobmV3Q2FsbEZy
YW1lLT5ob3N0VGhpc1JlZ2lzdGVyKCkpID0gSlNWYWx1ZSh0aGlzT2JqKTsKIAogICAgIGlmIChj
b2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKSkKICAgICAgICAgc2NvcGVDaGFpbi0+cmVm
KCk7CkBAIC0yOTM4LDcgKzI5NzAsNyBAQCBza2lwX2lkX2N1c3RvbV9zZWxmOgogICAgICAgICBK
U1ZhbHVlIHJlc3VsdDsKICAgICAgICAgaW50IG9mZnNldCA9IDA7CiAgICAgICAgIGlmIChzdWJz
Y3JpcHQgPT0gZXhwZWN0ZWRTdWJzY3JpcHQgJiYgYmFzZVZhbHVlLmlzQ2VsbCgpICYmIChiYXNl
VmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpID09IGl0LT5jYWNoZWRTdHJ1Y3R1cmUoKSkgJiYg
aXQtPmdldE9mZnNldChpbmRleCwgb2Zmc2V0KSkgewotICAgICAgICAgICAgY2FsbEZyYW1lLT5y
KGRzdCkgPSBhc09iamVjdChiYXNlVmFsdWUpLT5nZXREaXJlY3RPZmZzZXQob2Zmc2V0KTsKKyAg
ICAgICAgICAgIGNhbGxGcmFtZS0+cihkc3QpID0gSlNWYWx1ZShhc09iamVjdChiYXNlVmFsdWUp
LT5nZXREaXJlY3RPZmZzZXQob2Zmc2V0KSk7CiAgICAgICAgICAgICB2UEMgKz0gT1BDT0RFX0xF
TkdUSChvcF9nZXRfYnlfcG5hbWUpOwogICAgICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwog
ICAgICAgICB9CkBAIC0zNTc3LDcgKzM2MDksNyBAQCBza2lwX2lkX2N1c3RvbV9zZWxmOgogICAg
ICAgICAgICAgICAgIGdvdG8gdm1fdGhyb3c7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IGNhbGxGcmFtZS0+aW5pdChuZXdDb2RlQmxvY2ssIHZQQyArIE9QQ09ERV9MRU5HVEgob3BfY2Fs
bCksIGNhbGxEYXRhU2NvcGVDaGFpbiwgcHJldmlvdXNDYWxsRnJhbWUsIDAsIGFyZ0NvdW50LCBh
c0Z1bmN0aW9uKHYpKTsKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+aW5pdChuZXdDb2RlQmxvY2ss
IHZQQyArIE9QQ09ERV9MRU5HVEgob3BfY2FsbCksIGNhbGxEYXRhU2NvcGVDaGFpbiwgcHJldmlv
dXNDYWxsRnJhbWUsIGFyZ0NvdW50LCBhc0Z1bmN0aW9uKHYpKTsKICAgICAgICAgICAgIGNvZGVC
bG9jayA9IG5ld0NvZGVCbG9jazsKICAgICAgICAgICAgIEFTU0VSVChjb2RlQmxvY2sgPT0gY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKSk7CiAgICAgICAgICAgICB2UEMgPSBuZXdDb2RlQmxvY2stPmlu
c3RydWN0aW9ucygpLmJlZ2luKCk7CkBAIC0zNTkyLDIwICszNjI0LDE1IEBAIHNraXBfaWRfY3Vz
dG9tX3NlbGY6CiAgICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUhvc3QpIHsKICAgICAg
ICAgICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gY2FsbEZyYW1lLT5zY29wZUNoYWlu
KCk7CiAgICAgICAgICAgICBDYWxsRnJhbWUqIG5ld0NhbGxGcmFtZSA9IENhbGxGcmFtZTo6Y3Jl
YXRlKGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyByZWdpc3Rlck9mZnNldCk7Ci0gICAgICAgICAg
ICBuZXdDYWxsRnJhbWUtPmluaXQoMCwgdlBDICsgT1BDT0RFX0xFTkdUSChvcF9jYWxsKSwgc2Nv
cGVDaGFpbiwgY2FsbEZyYW1lLCAwLCBhcmdDb3VudCwgMCk7CisgICAgICAgICAgICBuZXdDYWxs
RnJhbWUtPmluaXQoMCwgdlBDICsgT1BDT0RFX0xFTkdUSChvcF9jYWxsKSwgc2NvcGVDaGFpbiwg
Y2FsbEZyYW1lLCBhcmdDb3VudCwgYXNPYmplY3QodikpOwogCiAgICAgICAgICAgICBSZWdpc3Rl
ciogdGhpc1JlZ2lzdGVyID0gbmV3Q2FsbEZyYW1lLT5yZWdpc3RlcnMoKSAtIFJlZ2lzdGVyRmls
ZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIGFyZ0NvdW50OwogICAgICAgICAgICAgQXJnTGlzdCBh
cmdzKHRoaXNSZWdpc3RlciArIDEsIGFyZ0NvdW50IC0gMSk7CiAKLSAgICAgICAgICAgIC8vIEZJ
WE1FOiBBbGwgaG9zdCBtZXRob2RzIHNob3VsZCBiZSBjYWxsaW5nIHRvVGhpc09iamVjdCwgYnV0
IHRoaXMgaXMgbm90IHByZXNlbnRseSB0aGUgY2FzZS4KLSAgICAgICAgICAgIEpTVmFsdWUgdGhp
c1ZhbHVlID0gdGhpc1JlZ2lzdGVyLT5qc1ZhbHVlKCk7Ci0gICAgICAgICAgICBpZiAodGhpc1Zh
bHVlID09IGpzTnVsbCgpKQotICAgICAgICAgICAgICAgIHRoaXNWYWx1ZSA9IGNhbGxGcmFtZS0+
Z2xvYmFsVGhpc1ZhbHVlKCk7Ci0KICAgICAgICAgICAgIEpTVmFsdWUgcmV0dXJuVmFsdWU7CiAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgU2FtcGxpbmdUb29sOjpIb3N0Q2FsbFJlY29y
ZCBjYWxsUmVjb3JkKG1fc2FtcGxlci5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuVmFs
dWUgPSBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24obmV3Q2FsbEZyYW1lLCBhc09iamVjdCh2KSwg
dGhpc1ZhbHVlLCBhcmdzKTsKKyAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IGNhbGxEYXRh
Lm5hdGl2ZS5mdW5jdGlvbihuZXdDYWxsRnJhbWUpOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwogCkBAIC0zNjI3LDE1ICszNjU0LDE1IEBAIHNraXBf
aWRfY3VzdG9tX3NlbGY6CiAgICAgICAgIEpTVmFsdWUgYXJndW1lbnRzID0gY2FsbEZyYW1lLT5y
KGFyZ3NPZmZzZXQpLmpzVmFsdWUoKTsKICAgICAgICAgaW50MzJfdCBhcmdDb3VudCA9IDA7CiAg
ICAgICAgIGlmICghYXJndW1lbnRzKSB7Ci0gICAgICAgICAgICBhcmdDb3VudCA9ICh1aW50MzJf
dCkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkpIC0gMTsKKyAgICAgICAgICAgIGFyZ0NvdW50
ID0gKHVpbnQzMl90KShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSk7CiAgICAgICAgICAgICBp
bnQzMl90IHNpemVEZWx0YSA9IGFyZ3NPZmZzZXQgKyBhcmdDb3VudCArIFJlZ2lzdGVyRmlsZTo6
Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKICAgICAgICAgICAgIFJlZ2lzdGVyKiBuZXdFbmQgPSBjYWxs
RnJhbWUtPnJlZ2lzdGVycygpICsgc2l6ZURlbHRhOwogICAgICAgICAgICAgaWYgKCFyZWdpc3Rl
ckZpbGUtPmdyb3cobmV3RW5kKSB8fCAoKG5ld0VuZCAtIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkp
ICE9IHNpemVEZWx0YSkpIHsKICAgICAgICAgICAgICAgICBleGNlcHRpb25WYWx1ZSA9IGNyZWF0
ZVN0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpOwogICAgICAgICAgICAgICAgIGdvdG8gdm1f
dGhyb3c7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBBU1NFUlQoIWNhbGxGcmFtZS0+Y2Fs
bGVlKCktPmlzSG9zdEZ1bmN0aW9uKCkpOwotICAgICAgICAgICAgaW50MzJfdCBleHBlY3RlZFBh
cmFtcyA9IGNhbGxGcmFtZS0+Y2FsbGVlKCktPmpzRXhlY3V0YWJsZSgpLT5wYXJhbWV0ZXJDb3Vu
dCgpOworICAgICAgICAgICAgQVNTRVJUKCFhc0Z1bmN0aW9uKGNhbGxGcmFtZS0+Y2FsbGVlKCkp
LT5pc0hvc3RGdW5jdGlvbigpKTsKKyAgICAgICAgICAgIGludDMyX3QgZXhwZWN0ZWRQYXJhbXMg
PSBhc0Z1bmN0aW9uKGNhbGxGcmFtZS0+Y2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+cGFyYW1l
dGVyQ291bnQoKTsKICAgICAgICAgICAgIGludDMyX3QgaW5wbGFjZUFyZ3MgPSBtaW4oYXJnQ291
bnQsIGV4cGVjdGVkUGFyYW1zKTsKICAgICAgICAgICAgIGludDMyX3QgaSA9IDA7CiAgICAgICAg
ICAgICBSZWdpc3RlciogYXJnU3RvcmUgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgYXJnc09m
ZnNldDsKQEAgLTM3MzIsNyArMzc1OSw3IEBAIHNraXBfaWRfY3VzdG9tX3NlbGY6CiAgICAgICAg
ICAgICAgICAgZ290byB2bV90aHJvdzsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAg
ICAgICAgICAgY2FsbEZyYW1lLT5pbml0KG5ld0NvZGVCbG9jaywgdlBDICsgT1BDT0RFX0xFTkdU
SChvcF9jYWxsX3ZhcmFyZ3MpLCBjYWxsRGF0YVNjb3BlQ2hhaW4sIHByZXZpb3VzQ2FsbEZyYW1l
LCAwLCBhcmdDb3VudCwgYXNGdW5jdGlvbih2KSk7CisgICAgICAgICAgICBjYWxsRnJhbWUtPmlu
aXQobmV3Q29kZUJsb2NrLCB2UEMgKyBPUENPREVfTEVOR1RIKG9wX2NhbGxfdmFyYXJncyksIGNh
bGxEYXRhU2NvcGVDaGFpbiwgcHJldmlvdXNDYWxsRnJhbWUsIGFyZ0NvdW50LCBhc0Z1bmN0aW9u
KHYpKTsKICAgICAgICAgICAgIGNvZGVCbG9jayA9IG5ld0NvZGVCbG9jazsKICAgICAgICAgICAg
IEFTU0VSVChjb2RlQmxvY2sgPT0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKSk7CiAgICAgICAgICAg
ICB2UEMgPSBuZXdDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCk7CkBAIC0zNzQ3LDIw
ICszNzc0LDE1IEBAIHNraXBfaWRfY3VzdG9tX3NlbGY6CiAgICAgICAgIGlmIChjYWxsVHlwZSA9
PSBDYWxsVHlwZUhvc3QpIHsKICAgICAgICAgICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWlu
ID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCk7CiAgICAgICAgICAgICBDYWxsRnJhbWUqIG5ld0Nh
bGxGcmFtZSA9IENhbGxGcmFtZTo6Y3JlYXRlKGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyByZWdp
c3Rlck9mZnNldCk7Ci0gICAgICAgICAgICBuZXdDYWxsRnJhbWUtPmluaXQoMCwgdlBDICsgT1BD
T0RFX0xFTkdUSChvcF9jYWxsX3ZhcmFyZ3MpLCBzY29wZUNoYWluLCBjYWxsRnJhbWUsIDAsIGFy
Z0NvdW50LCAwKTsKKyAgICAgICAgICAgIG5ld0NhbGxGcmFtZS0+aW5pdCgwLCB2UEMgKyBPUENP
REVfTEVOR1RIKG9wX2NhbGxfdmFyYXJncyksIHNjb3BlQ2hhaW4sIGNhbGxGcmFtZSwgYXJnQ291
bnQsIGFzT2JqZWN0KHYpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgUmVnaXN0ZXIqIHRo
aXNSZWdpc3RlciA9IG5ld0NhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgLSBSZWdpc3RlckZpbGU6OkNh
bGxGcmFtZUhlYWRlclNpemUgLSBhcmdDb3VudDsKICAgICAgICAgICAgIEFyZ0xpc3QgYXJncyh0
aGlzUmVnaXN0ZXIgKyAxLCBhcmdDb3VudCAtIDEpOwogICAgICAgICAgICAgCi0gICAgICAgICAg
ICAvLyBGSVhNRTogQWxsIGhvc3QgbWV0aG9kcyBzaG91bGQgYmUgY2FsbGluZyB0b1RoaXNPYmpl
Y3QsIGJ1dCB0aGlzIGlzIG5vdCBwcmVzZW50bHkgdGhlIGNhc2UuCi0gICAgICAgICAgICBKU1Zh
bHVlIHRoaXNWYWx1ZSA9IHRoaXNSZWdpc3Rlci0+anNWYWx1ZSgpOwotICAgICAgICAgICAgaWYg
KHRoaXNWYWx1ZSA9PSBqc051bGwoKSkKLSAgICAgICAgICAgICAgICB0aGlzVmFsdWUgPSBjYWxs
RnJhbWUtPmdsb2JhbFRoaXNWYWx1ZSgpOwotICAgICAgICAgICAgCiAgICAgICAgICAgICBKU1Zh
bHVlIHJldHVyblZhbHVlOwogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIFNhbXBsaW5n
VG9vbDo6SG9zdENhbGxSZWNvcmQgY2FsbFJlY29yZChtX3NhbXBsZXIuZ2V0KCkpOwotICAgICAg
ICAgICAgICAgIHJldHVyblZhbHVlID0gY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKG5ld0NhbGxG
cmFtZSwgYXNPYmplY3QodiksIHRoaXNWYWx1ZSwgYXJncyk7CisgICAgICAgICAgICAgICAgcmV0
dXJuVmFsdWUgPSBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24obmV3Q2FsbEZyYW1lKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKICAgICAgICAgICAg
IApAQCAtMzk2NSw3ICszOTg3LDcgQEAgc2tpcF9pZF9jdXN0b21fc2VsZjoKICAgICAgICAgICAg
IHN0cnVjdHVyZSA9IGFzT2JqZWN0KHByb3RvKS0+aW5oZXJpdG9ySUQoKTsKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgc3RydWN0dXJlID0gY29uc3RydWN0b3ItPnNjb3BlKCkubm9kZSgpLT5n
bG9iYWxPYmplY3QtPmVtcHR5T2JqZWN0U3RydWN0dXJlKCk7Ci0gICAgICAgIGNhbGxGcmFtZS0+
cih0aGlzUmVnaXN0ZXIpID0gbmV3ICgmY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkpIEpTT2JqZWN0
KHN0cnVjdHVyZSk7CisgICAgICAgIGNhbGxGcmFtZS0+cih0aGlzUmVnaXN0ZXIpID0gSlNWYWx1
ZShuZXcgKCZjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSkgSlNPYmplY3Qoc3RydWN0dXJlKSk7CiAK
ICAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfY3JlYXRlX3RoaXMpOwogICAgICAgICBO
RVhUX0lOU1RSVUNUSU9OKCk7CkBAIC00MDU5LDcgKzQwODEsNyBAQCBza2lwX2lkX2N1c3RvbV9z
ZWxmOgogICAgICAgICAgICAgICAgIGdvdG8gdm1fdGhyb3c7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIGNhbGxGcmFtZS0+aW5pdChuZXdDb2RlQmxvY2ssIHZQQyArIE9QQ09ERV9MRU5H
VEgob3BfY29uc3RydWN0KSwgY2FsbERhdGFTY29wZUNoYWluLCBwcmV2aW91c0NhbGxGcmFtZSwg
MCwgYXJnQ291bnQsIGFzRnVuY3Rpb24odikpOworICAgICAgICAgICAgY2FsbEZyYW1lLT5pbml0
KG5ld0NvZGVCbG9jaywgdlBDICsgT1BDT0RFX0xFTkdUSChvcF9jb25zdHJ1Y3QpLCBjYWxsRGF0
YVNjb3BlQ2hhaW4sIHByZXZpb3VzQ2FsbEZyYW1lLCBhcmdDb3VudCwgYXNGdW5jdGlvbih2KSk7
CiAgICAgICAgICAgICBjb2RlQmxvY2sgPSBuZXdDb2RlQmxvY2s7CiAgICAgICAgICAgICB2UEMg
PSBuZXdDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCk7CiAKQEAgLTQwNzMsNyArNDA5
NSw3IEBAIHNraXBfaWRfY3VzdG9tX3NlbGY6CiAgICAgICAgIGlmIChjb25zdHJ1Y3RUeXBlID09
IENvbnN0cnVjdFR5cGVIb3N0KSB7CiAgICAgICAgICAgICBTY29wZUNoYWluTm9kZSogc2NvcGVD
aGFpbiA9IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpOwogICAgICAgICAgICAgQ2FsbEZyYW1lKiBu
ZXdDYWxsRnJhbWUgPSBDYWxsRnJhbWU6OmNyZWF0ZShjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsg
cmVnaXN0ZXJPZmZzZXQpOwotICAgICAgICAgICAgbmV3Q2FsbEZyYW1lLT5pbml0KDAsIHZQQyAr
IE9QQ09ERV9MRU5HVEgob3BfY29uc3RydWN0KSwgc2NvcGVDaGFpbiwgY2FsbEZyYW1lLCAwLCBh
cmdDb3VudCwgMCk7CisgICAgICAgICAgICBuZXdDYWxsRnJhbWUtPmluaXQoMCwgdlBDICsgT1BD
T0RFX0xFTkdUSChvcF9jb25zdHJ1Y3QpLCBzY29wZUNoYWluLCBjYWxsRnJhbWUsIGFyZ0NvdW50
LCAwKTsKIAogICAgICAgICAgICAgUmVnaXN0ZXIqIHRoaXNSZWdpc3RlciA9IG5ld0NhbGxGcmFt
ZS0+cmVnaXN0ZXJzKCkgLSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgLSBhcmdD
b3VudDsKICAgICAgICAgICAgIEFyZ0xpc3QgYXJncyh0aGlzUmVnaXN0ZXIgKyAxLCBhcmdDb3Vu
dCAtIDEpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCShy
ZXZpc2lvbiA2MDM0MSkKKysrIEphdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIGJvb2wgaXNPcGNvZGUoT3Bjb2RlKTsKICAgICAgICAgCiAgICAgICAgIEpTVmFsdWUgZXhl
Y3V0ZShQcm9ncmFtRXhlY3V0YWJsZSosIENhbGxGcmFtZSosIFNjb3BlQ2hhaW5Ob2RlKiwgSlNP
YmplY3QqIHRoaXNPYmosIEpTVmFsdWUqIGV4Y2VwdGlvbik7Ci0gICAgICAgIEpTVmFsdWUgZXhl
Y3V0ZUNhbGwoRnVuY3Rpb25FeGVjdXRhYmxlKiwgQ2FsbEZyYW1lKiwgSlNGdW5jdGlvbiosIEpT
T2JqZWN0KiB0aGlzT2JqLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBTY29wZUNoYWluTm9kZSosIEpT
VmFsdWUqIGV4Y2VwdGlvbik7CisgICAgICAgIEpTVmFsdWUgZXhlY3V0ZUNhbGwoQ2FsbEZyYW1l
KiwgSlNPYmplY3QqIGZ1bmN0aW9uLCBDYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmLCBKU1ZhbHVl
IHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYsIEpTVmFsdWUqIGV4Y2VwdGlvbik7CiAgICAgICAg
IEpTVmFsdWUgZXhlY3V0ZUNvbnN0cnVjdChGdW5jdGlvbkV4ZWN1dGFibGUqLCBDYWxsRnJhbWUq
LCBKU0Z1bmN0aW9uKiwgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIFNj
b3BlQ2hhaW5Ob2RlKiwgSlNWYWx1ZSogZXhjZXB0aW9uKTsKICAgICAgICAgSlNWYWx1ZSBleGVj
dXRlKEV2YWxFeGVjdXRhYmxlKiBldmFsTm9kZSwgQ2FsbEZyYW1lKiBleGVjLCBKU09iamVjdCog
dGhpc09iaiwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIEpTVmFsdWUqIGV4Y2VwdGlvbik7
CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaAkocmV2aXNpb24gNjAz
NDEpCisrKyBKYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zOSw3ICszOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIENvZGVCbG9j
azsKICAgICBjbGFzcyBFeGVjU3RhdGU7CiAgICAgY2xhc3MgSlNBY3RpdmF0aW9uOwotICAgIGNs
YXNzIEpTRnVuY3Rpb247CisgICAgY2xhc3MgSlNPYmplY3Q7CiAgICAgY2xhc3MgSlNQcm9wZXJ0
eU5hbWVJdGVyYXRvcjsKICAgICBjbGFzcyBTY29wZUNoYWluTm9kZTsKIApAQCAtNTgsNyArNTgs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVnaXN0ZXImIG9wZXJhdG9yPShKU0FjdGl2
YXRpb24qKTsKICAgICAgICAgUmVnaXN0ZXImIG9wZXJhdG9yPShDYWxsRnJhbWUqKTsKICAgICAg
ICAgUmVnaXN0ZXImIG9wZXJhdG9yPShDb2RlQmxvY2sqKTsKLSAgICAgICAgUmVnaXN0ZXImIG9w
ZXJhdG9yPShKU0Z1bmN0aW9uKik7CisgICAgICAgIFJlZ2lzdGVyJiBvcGVyYXRvcj0oSlNPYmpl
Y3QqKTsKICAgICAgICAgUmVnaXN0ZXImIG9wZXJhdG9yPShKU1Byb3BlcnR5TmFtZUl0ZXJhdG9y
Kik7CiAgICAgICAgIFJlZ2lzdGVyJiBvcGVyYXRvcj0oU2NvcGVDaGFpbk5vZGUqKTsKICAgICAg
ICAgUmVnaXN0ZXImIG9wZXJhdG9yPShJbnN0cnVjdGlvbiopOwpAQCAtNjcsNyArNjcsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uKCkgY29uc3Q7
CiAgICAgICAgIENhbGxGcmFtZSogY2FsbEZyYW1lKCkgY29uc3Q7CiAgICAgICAgIENvZGVCbG9j
ayogY29kZUJsb2NrKCkgY29uc3Q7Ci0gICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uKCkgY29u
c3Q7CisgICAgICAgIEpTT2JqZWN0KiBmdW5jdGlvbigpIGNvbnN0OwogICAgICAgICBKU1Byb3Bl
cnR5TmFtZUl0ZXJhdG9yKiBwcm9wZXJ0eU5hbWVJdGVyYXRvcigpIGNvbnN0OwogICAgICAgICBT
Y29wZUNoYWluTm9kZSogc2NvcGVDaGFpbigpIGNvbnN0OwogICAgICAgICBJbnN0cnVjdGlvbiog
dlBDKCkgY29uc3Q7CkBAIC04Nyw3ICs4Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAg
ICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uOwogICAgICAgICAgICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWU7CiAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jazsKLSAgICAgICAgICAgIEpT
RnVuY3Rpb24qIGZ1bmN0aW9uOworICAgICAgICAgICAgSlNPYmplY3QqIGZ1bmN0aW9uOwogICAg
ICAgICAgICAgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogcHJvcGVydHlOYW1lSXRlcmF0b3I7CiAg
ICAgICAgICAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbjsKICAgICAgICAgICAgIEluc3Ry
dWN0aW9uKiB2UEM7CkBAIC0xNDMsNyArMTQzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHJldHVybiAqdGhpczsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyJiBSZWdp
c3Rlcjo6b3BlcmF0b3I9KEpTRnVuY3Rpb24qIGZ1bmN0aW9uKQorICAgIEFMV0FZU19JTkxJTkUg
UmVnaXN0ZXImIFJlZ2lzdGVyOjpvcGVyYXRvcj0oSlNPYmplY3QqIGZ1bmN0aW9uKQogICAgIHsK
ICAgICAgICAgdS5mdW5jdGlvbiA9IGZ1bmN0aW9uOwogICAgICAgICByZXR1cm4gKnRoaXM7CkBA
IC0xODcsNyArMTg3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiB1LmNvZGVC
bG9jazsKICAgICB9CiAgICAgCi0gICAgQUxXQVlTX0lOTElORSBKU0Z1bmN0aW9uKiBSZWdpc3Rl
cjo6ZnVuY3Rpb24oKSBjb25zdAorICAgIEFMV0FZU19JTkxJTkUgSlNPYmplY3QqIFJlZ2lzdGVy
OjpmdW5jdGlvbigpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gdS5mdW5jdGlvbjsKICAg
ICB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24g
NjAzNDEpCisrKyBKYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjc0LDExNyArMjc0LDQ0IEBAIEpJVDo6TGFiZWwgSklUOjpwcml2YXRlQ29t
cGlsZUNUSU5hdGl2ZUMKICAgICBpbnQgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24gPSBpc0Nv
bnN0cnVjdCA/IE9CSkVDVF9PRkZTRVRPRihOYXRpdmVFeGVjdXRhYmxlLCBtX2NvbnN0cnVjdG9y
KSA6IE9CSkVDVF9PRkZTRVRPRihOYXRpdmVFeGVjdXRhYmxlLCBtX2Z1bmN0aW9uKTsKIAogICAg
IExhYmVsIG5hdGl2ZUNhbGxUaHVuayA9IGFsaWduKCk7Ci0jaWYgQ1BVKFg4NikgfHwgQ1BVKEFS
TV9UUkFESVRJT05BTCkKLSAgICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwocmVnVDAp
OwotICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihyZWdUMCwgUmVnaXN0ZXJGaWxlOjpSZXR1
cm5QQyk7IC8vIFB1c2ggcmV0dXJuIGFkZHJlc3MKIAogICAgIC8vIExvYWQgY2FsbGVyIGZyYW1l
J3Mgc2NvcGUgY2hhaW4gaW50byB0aGlzIGNhbGxmcmFtZSBzbyB0aGF0IHdoYXRldmVyIHdlIGNh
bGwgY2FuCiAgICAgLy8gZ2V0IHRvIGl0cyBnbG9iYWwgZGF0YS4KLSAgICBlbWl0R2V0RnJvbUNh
bGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZpbGU6OkNhbGxlckZyYW1lLCByZWdUMSk7Ci0gICAg
ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluLCBy
ZWdUMSwgcmVnVDEpOworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVy
RmlsZTo6Q2FsbGVyRnJhbWUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRl
clB0cihSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4sIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdFB1
dFRvQ2FsbEZyYW1lSGVhZGVyKHJlZ1QxLCBSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4pOwogCi0j
aWYgQ1BVKFg4NikKLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjMyKFJlZ2lzdGVyRmls
ZTo6QXJndW1lbnRDb3VudCwgcmVnVDApOworICAgIHBlZWsocmVnVDEpOworICAgIGVtaXRQdXRU
b0NhbGxGcmFtZUhlYWRlcihyZWdUMSwgUmVnaXN0ZXJGaWxlOjpSZXR1cm5QQyk7CiAKLSAgICAv
KiBXZSBoYXZlIHR3byBzdHJ1Y3RzIHRoYXQgd2UgdXNlIHRvIGRlc2NyaWJlIHRoZSBzdGFja2Zy
YW1lIHdlIHNldCB1cCBmb3Igb3VyCi0gICAgICogY2FsbCB0byBuYXRpdmUgY29kZS4gIE5hdGl2
ZUNhbGxGcmFtZVN0cnVjdHVyZSBkZXNjcmliZXMgdGhlIGhvdyB3ZSBzZXQgdXAgdGhlIHN0YWNr
Ci0gICAgICogaW4gYWR2YW5jZSBvZiB0aGUgY2FsbC4gIE5hdGl2ZUZ1bmN0aW9uQ2FsbGVlU2ln
bmF0dXJlIGRlc2NyaWJlcyB0aGUgY2FsbGZyYW1lCi0gICAgICogYXMgdGhlIG5hdGl2ZSBjb2Rl
IGV4cGVjdHMgaXQuICBXZSBkbyB0aGlzIGFzIHdlIGFyZSB1c2luZyB0aGUgZmFzdGNhbGwgY2Fs
bGluZwotICAgICAqIGNvbnZlbnRpb24gd2hpY2ggcmVzdWx0cyBpbiB0aGUgY2FsbGVlIHBvcHBp
bmcgaXRzIGFyZ3VtZW50cyBvZmYgdGhlIHN0YWNrLCBidXQKLSAgICAgKiBub3QgdGhlIHJlc3Qg
b2YgdGhlIGNhbGxmcmFtZSBzbyB3ZSBuZWVkIGEgbmljZSB3YXkgdG8gZW5zdXJlIHdlIGluY3Jl
bWVudCB0aGUKLSAgICAgKiBzdGFjayBwb2ludGVyIGJ5IHRoZSByaWdodCBhbW91bnQgYWZ0ZXIg
dGhlIGNhbGwuCi0gICAgICovCisjaWYgQ1BVKFg4NikgfHwgQ1BVKEFSTV9UUkFESVRJT05BTCkK
IAorI2lmIENQVShYODYpCiAjaWYgQ09NUElMRVIoTVNWQykgfHwgT1MoTElOVVgpCi0jaWYgQ09N
UElMRVIoTVNWQykKLSNwcmFnbWEgcGFjayhwdXNoKQotI3ByYWdtYSBwYWNrKDQpCi0jZW5kaWYg
Ly8gQ09NUElMRVIoTVNWQykKLSAgICBzdHJ1Y3QgTmF0aXZlQ2FsbEZyYW1lU3RydWN0dXJlIHsK
LSAgICAgICAgLy8gIENhbGxGcmFtZSogY2FsbEZyYW1lOyAvLyBwYXNzZWQgaW4gRURYCi0gICAg
ICAgIEpTT2JqZWN0KiBjYWxsZWU7Ci0gICAgICAgIEpTVmFsdWUgdGhpc1ZhbHVlOwotICAgICAg
ICBBcmdMaXN0KiBhcmdQb2ludGVyOwotICAgICAgICBBcmdMaXN0IGFyZ3M7Ci0gICAgICAgIEpT
VmFsdWUgcmVzdWx0OwotICAgIH07Ci0gICAgc3RydWN0IE5hdGl2ZUZ1bmN0aW9uQ2FsbGVlU2ln
bmF0dXJlIHsKLSAgICAgICAgSlNPYmplY3QqIGNhbGxlZTsKLSAgICAgICAgSlNWYWx1ZSB0aGlz
VmFsdWU7Ci0gICAgICAgIEFyZ0xpc3QqIGFyZ1BvaW50ZXI7Ci0gICAgfTsKLSNpZiBDT01QSUxF
UihNU1ZDKQotI3ByYWdtYSBwYWNrKHBvcCkKLSNlbmRpZiAvLyBDT01QSUxFUihNU1ZDKQotI2Vs
c2UKLSAgICBzdHJ1Y3QgTmF0aXZlQ2FsbEZyYW1lU3RydWN0dXJlIHsKLSAgICAgICAgLy8gIENh
bGxGcmFtZSogY2FsbEZyYW1lOyAvLyBwYXNzZWQgaW4gRUNYCi0gICAgICAgIC8vICBKU09iamVj
dCogY2FsbGVlOyAvLyBwYXNzZWQgaW4gRURYCi0gICAgICAgIEpTVmFsdWUgdGhpc1ZhbHVlOwot
ICAgICAgICBBcmdMaXN0KiBhcmdQb2ludGVyOwotICAgICAgICBBcmdMaXN0IGFyZ3M7Ci0gICAg
fTsKLSAgICBzdHJ1Y3QgTmF0aXZlRnVuY3Rpb25DYWxsZWVTaWduYXR1cmUgewotICAgICAgICBK
U1ZhbHVlIHRoaXNWYWx1ZTsKLSAgICAgICAgQXJnTGlzdCogYXJnUG9pbnRlcjsKLSAgICB9Owot
I2VuZGlmCi0KLSAgICBjb25zdCBpbnQgTmF0aXZlQ2FsbEZyYW1lU2l6ZSA9IChzaXplb2YoTmF0
aXZlQ2FsbEZyYW1lU3RydWN0dXJlKSArIDE1KSAmIH4xNTsKLSAgICAvLyBBbGxvY2F0ZSBzeXN0
ZW0gc3RhY2sgZnJhbWUKLSAgICBzdWJQdHIoSW1tMzIoTmF0aXZlQ2FsbEZyYW1lU2l6ZSksIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKLQotICAgIC8vIFNldCB1cCBhcmd1bWVudHMKLSAgICBzdWJQ
dHIoSW1tMzIoMSksIHJlZ1QwKTsgLy8gRG9uJ3QgaW5jbHVkZSAndGhpcycgaW4gYXJnY291bnQK
LQotICAgIC8vIHB1c2ggYXJnY291bnQKLSAgICBzdG9yZVB0cihyZWdUMCwgQWRkcmVzcyhzdGFj
a1BvaW50ZXJSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKE5hdGl2ZUNhbGxGcmFtZVN0cnVjdHVy
ZSwgYXJncykgKyBPQkpFQ1RfT0ZGU0VUT0YoQXJnTGlzdCwgbV9hcmdDb3VudCkpKTsKLQotICAg
IC8vIENhbGN1bGF0ZSB0aGUgc3RhcnQgb2YgdGhlIGNhbGxmcmFtZSBoZWFkZXIsIGFuZCBzdG9y
ZSBpbiByZWdUMQotICAgIGFkZFB0cihJbW0zMigtUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFk
ZXJTaXplICogKGludClzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1Qx
KTsKLQotICAgIC8vIENhbGN1bGF0ZSBzdGFydCBvZiBhcmd1bWVudHMgYXMgY2FsbGZyYW1lIGhl
YWRlciAtIHNpemVvZihSZWdpc3RlcikgKiBhcmdjb3VudCAocmVnVDApCi0gICAgbXVsMzIoSW1t
MzIoc2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QwLCByZWdUMCk7Ci0gICAgc3ViUHRyKHJlZ1QwLCBy
ZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIs
IE9CSkVDVF9PRkZTRVRPRihOYXRpdmVDYWxsRnJhbWVTdHJ1Y3R1cmUsIGFyZ3MpICsgT0JKRUNU
X09GRlNFVE9GKEFyZ0xpc3QsIG1fYXJncykpKTsKLQotICAgIC8vIEFyZ0xpc3QgaXMgcGFzc2Vk
IGJ5IHJlZmVyZW5jZSBzbyBpcyBzdGFja1BvaW50ZXJSZWdpc3RlciArIDQgKiBzaXplb2YoUmVn
aXN0ZXIpCi0gICAgYWRkUHRyKEltbTMyKE9CSkVDVF9PRkZTRVRPRihOYXRpdmVDYWxsRnJhbWVT
dHJ1Y3R1cmUsIGFyZ3MpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBzdG9y
ZVB0cihyZWdUMCwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9G
KE5hdGl2ZUNhbGxGcmFtZVN0cnVjdHVyZSwgYXJnUG9pbnRlcikpKTsKLQotICAgIC8vIHJlZ1Qx
IGN1cnJlbnRseSBwb2ludHMgdG8gdGhlIGZpcnN0IGFyZ3VtZW50LCByZWdUMSAtIHNpemVvZihS
ZWdpc3RlcikgcG9pbnRzIHRvICd0aGlzJwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgLShp
bnQpc2l6ZW9mKFJlZ2lzdGVyKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5w
YXlsb2FkKSksIHJlZ1QyKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIC0oaW50KXNpemVv
ZihSZWdpc3RlcikgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJl
Z1QzKTsKLSAgICBzdG9yZVB0cihyZWdUMiwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rlciwg
T0JKRUNUX09GRlNFVE9GKE5hdGl2ZUNhbGxGcmFtZVN0cnVjdHVyZSwgdGhpc1ZhbHVlKSArIE9C
SkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOwotICAgIHN0b3JlUHRy
KHJlZ1QzLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBPQkpFQ1RfT0ZGU0VUT0YoTmF0
aXZlQ2FsbEZyYW1lU3RydWN0dXJlLCB0aGlzVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFs
dWUsIHUuYXNCaXRzLnRhZykpKTsKKyAgICAvLyBDYWxsaW5nIGNvbnZlbnRpb246ICAgICAgZihl
ZHgsIC4uLik7CisgICAgLy8gSG9zdCBmdW5jdGlvbiBzaWduYXR1cmU6IGYoRXhlY1N0YXRlKik7
CisgICAgCisgICAgLy8gRXhlY1N0YXRlKgorICAgIG1vdmUoY2FsbEZyYW1lUmVnaXN0ZXIsIFg4
NlJlZ2lzdGVyczo6ZWR4KTsKIAotI2lmIENPTVBJTEVSKE1TVkMpIHx8IE9TKExJTlVYKQotICAg
IC8vIEFyZ0xpc3QgaXMgcGFzc2VkIGJ5IHJlZmVyZW5jZSBzbyBpcyBzdGFja1BvaW50ZXJSZWdp
c3RlciArIDQgKiBzaXplb2YoUmVnaXN0ZXIpCi0gICAgYWRkUHRyKEltbTMyKE9CSkVDVF9PRkZT
RVRPRihOYXRpdmVDYWxsRnJhbWVTdHJ1Y3R1cmUsIHJlc3VsdCkpLCBzdGFja1BvaW50ZXJSZWdp
c3RlciwgWDg2UmVnaXN0ZXJzOjplY3gpOworI2Vsc2UKKyAgICAvLyBDYWxsaW5nIGNvbnZlbnRp
b246ICAgICAgZihlY3gsIGVkeCwgLi4uKTsKKyAgICAvLyBIb3N0IGZ1bmN0aW9uIHNpZ25hdHVy
ZTogZihFeGVjU3RhdGUqKTsKIAotICAgIC8vIFBsYW50IGNhbGxlZQotICAgIGVtaXRHZXRGcm9t
Q2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6Q2FsbGVlLCBYODZSZWdpc3RlcnM6OmVh
eCk7Ci0gICAgc3RvcmVQdHIoWDg2UmVnaXN0ZXJzOjplYXgsIEFkZHJlc3Moc3RhY2tQb2ludGVy
UmVnaXN0ZXIsIE9CSkVDVF9PRkZTRVRPRihOYXRpdmVDYWxsRnJhbWVTdHJ1Y3R1cmUsIGNhbGxl
ZSkpKTsKKyAgICAvLyBFeGVjU3RhdGUqCisgICAgbW92ZShjYWxsRnJhbWVSZWdpc3RlciwgWDg2
UmVnaXN0ZXJzOjplY3gpOwogCi0gICAgLy8gUGxhbnQgY2FsbGZyYW1lCi0gICAgbW92ZShjYWxs
RnJhbWVSZWdpc3RlciwgWDg2UmVnaXN0ZXJzOjplZHgpOworI2VuZGlmIC8vIENPTVBJTEVSKE1T
VkMpIHx8IE9TKExJTlVYKQogCi0gICAgbG9hZFB0cihBZGRyZXNzKFg4NlJlZ2lzdGVyczo6ZWF4
LCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSksIFg4NlJlZ2lzdGVy
czo6ZWJ4KTsKLSAgICBjYWxsKEFkZHJlc3MoWDg2UmVnaXN0ZXJzOjplYngsIGV4ZWN1dGFibGVP
ZmZzZXRUb0Z1bmN0aW9uKSk7CisgICAgc3ViUHRyKEltbTMyKDE2IC0gc2l6ZW9mKHZvaWQqKSks
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAotICAgIC8vIEpTVmFsdWUgaXMgYSBub24tUE9EIHR5
cGUsIHNvIGVheCBwb2ludHMgdG8gaXQKLSAgICBlbWl0TG9hZCgwLCByZWdUMSwgcmVnVDAsIFg4
NlJlZ2lzdGVyczo6ZWF4KTsKLSNlbHNlCi0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQ
dHIoUmVnaXN0ZXJGaWxlOjpDYWxsZWUsIFg4NlJlZ2lzdGVyczo6ZWR4KTsgLy8gY2FsbGVlCi0g
ICAgbW92ZShjYWxsRnJhbWVSZWdpc3RlciwgWDg2UmVnaXN0ZXJzOjplY3gpOyAvLyBjYWxsRnJh
bWUKLSAgICBsb2FkUHRyKEFkZHJlc3MoWDg2UmVnaXN0ZXJzOjplZHgsIE9CSkVDVF9PRkZTRVRP
RihKU0Z1bmN0aW9uLCBtX2V4ZWN1dGFibGUpKSwgWDg2UmVnaXN0ZXJzOjplYngpOwotICAgIGNh
bGwoQWRkcmVzcyhYODZSZWdpc3RlcnM6OmVieCwgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24p
KTsKLSNlbmRpZgorICAgIC8vIGNhbGwgdGhlIGZ1bmN0aW9uCisgICAgZW1pdEdldEZyb21DYWxs
RnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpDYWxsZWUsIHJlZ1QxKTsKKyAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2V4ZWN1dGFibGUp
KSwgcmVnVDEpOworICAgIG1vdmUocmVnVDAsIGNhbGxGcmFtZVJlZ2lzdGVyKTsgLy8gRWFnZXJs
eSByZXN0b3JlIGNhbGxlciBmcmFtZSByZWdpc3RlciB0byBhdm9pZCBsb2FkaW5nIGZyb20gc3Rh
Y2suCisgICAgY2FsbChBZGRyZXNzKHJlZ1QxLCBleGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlvbikp
OwogCi0gICAgLy8gV2UndmUgcHV0IGEgZmV3IHRlbXBvcmFyaWVzIG9uIHRoZSBzdGFjayBpbiBh
ZGRpdGlvbiB0byB0aGUgYWN0dWFsIGFyZ3VtZW50cwotICAgIC8vIHNvIHB1bGwgdGhlbSBvZmYg
bm93Ci0gICAgYWRkUHRyKEltbTMyKE5hdGl2ZUNhbGxGcmFtZVNpemUgLSBzaXplb2YoTmF0aXZl
RnVuY3Rpb25DYWxsZWVTaWduYXR1cmUpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFk
ZFB0cihJbW0zMigxNiAtIHNpemVvZih2b2lkKikpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAK
ICNlbGlmIENQVShBUk1fVFJBRElUSU9OQUwpCiAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFk
ZXIzMihSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnQsIHJlZ1QwKTsKQEAgLTM5MywyMiArMzIw
LDggQEAgSklUOjpMYWJlbCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQwogICAgIENPTVBJ
TEVfQVNTRVJUKChzaXplb2YoQXJnTGlzdCkgJiAweDcpID09IDAgJiYgc2l6ZW9mKEpTVmFsdWUp
ID09IDggJiYgc2l6ZW9mKFJlZ2lzdGVyKSA9PSA4LCBBcmdMaXN0X3Nob3VsZF9ieV84Ynl0ZV9h
bGlnbmVkKTsKICAgICBzdWJQdHIoSW1tMzIoc2l6ZW9mKEFyZ0xpc3QpKSwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOwogCi0gICAgLy8gU2V0IHVwIGFyZ3VtZW50cwotICAgIHN1YlB0cihJbW0zMigx
KSwgcmVnVDApOyAvLyBEb24ndCBpbmNsdWRlICd0aGlzJyBpbiBhcmdjb3VudAotCi0gICAgLy8g
UHVzaCBhcmdjb3VudAotICAgIHN0b3JlUHRyKHJlZ1QwLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJl
Z2lzdGVyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJnTGlzdCwgbV9hcmdDb3VudCkpKTsKLQotICAgIC8v
IENhbGN1bGF0ZSB0aGUgc3RhcnQgb2YgdGhlIGNhbGxmcmFtZSBoZWFkZXIsIGFuZCBzdG9yZSBp
biByZWdUMQogICAgIG1vdmUoY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QxKTsKLSAgICBzdWIzMihJ
bW0zMihSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgKiAoaW50MzJfdClzaXplb2Yo
UmVnaXN0ZXIpKSwgcmVnVDEpOwotCi0gICAgLy8gQ2FsY3VsYXRlIHN0YXJ0IG9mIGFyZ3VtZW50
cyBhcyBjYWxsZnJhbWUgaGVhZGVyIC0gc2l6ZW9mKFJlZ2lzdGVyKSAqIGFyZ2NvdW50IChyZWdU
MSkKLSAgICBtdWwzMihJbW0zMihzaXplb2YoUmVnaXN0ZXIpKSwgcmVnVDAsIHJlZ1QwKTsKLSAg
ICBzdWJQdHIocmVnVDAsIHJlZ1QxKTsKLQotICAgIC8vIHB1c2ggcG9pbnRlciB0byBhcmd1bWVu
dHMKLSAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgT0JK
RUNUX09GRlNFVE9GKEFyZ0xpc3QsIG1fYXJncykpKTsKKyAgICBtb3ZlKHJlZ1QwLCBjYWxsRnJh
bWVSZWdpc3Rlcik7CiAKICAgICAvLyBBcmd1bWVudCBwYXNzaW5nIG1ldGhvZDoKICAgICAvLyBy
MCAtIHBvaW50cyB0byByZXR1cm4gdmFsdWUKQEAgLTQxNywyNCArMzMwLDEzIEBAIEpJVDo6TGFi
ZWwgSklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUMKICAgICAvLyBzdGFjazogdGhpcyhKU1Zh
bHVlKSBhbmQgYSBwb2ludGVyIHRvIEFyZ0xpc3QKIAogI2lmIE9TKFdJTkNFKQotICAgIC8vIFNl
dHVwIGFyZzQ6Ci0gICAgcHVzaChzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0KLSAgICAvLyBTZXR1
cCBhcmczOgotICAgIC8vIHJlZ1QxIGN1cnJlbnRseSBwb2ludHMgdG8gdGhlIGZpcnN0IGFyZ3Vt
ZW50LCByZWdUMS1zaXplb2YoUmVnaXN0ZXIpIHBvaW50cyB0byAndGhpcycKLSAgICBsb2FkMzIo
QWRkcmVzcyhyZWdUMSwgLShpbnQzMl90KXNpemVvZih2b2lkKikgKiAyKSwgQVJNUmVnaXN0ZXJz
OjpyMyk7Ci0gICAgcHVzaChBUk1SZWdpc3RlcnM6OnIzKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhy
ZWdUMSwgLShpbnQzMl90KXNpemVvZih2b2lkKikpLCByZWdUMyk7Ci0gICAgc3RvcmVQdHIocmVn
VDMsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIpKTsKKyAgICBzdWJQdHIoSW1tMzIoOCks
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAotICAgIC8vIFNldHVwIGFyZzI6CiAgICAgZW1pdEdl
dEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpDYWxsZWUsIHJlZ1QyKTsKIAog
ICAgIC8vIFNldHVwIGFyZzE6CiAgICAgbW92ZShjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDEpOwot
Ci0gICAgLy8gU2V0dXAgYXJnMDoKLSAgICBtb3ZlKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdU
MCk7CisgICAgbW92ZShyZWdUMCwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogCiAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSks
IHJlZ1QzKTsKICAgICBjYWxsKEFkZHJlc3MocmVnVDMsIGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0
aW9uKSk7CkBAIC00NDIsMjggKzM0NCwxMyBAQCBKSVQ6OkxhYmVsIEpJVDo6cHJpdmF0ZUNvbXBp
bGVDVElOYXRpdmVDCiAgICAgbG9hZDMyKEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIDAp
LCByZWdUMCk7CiAgICAgbG9hZDMyKEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIDQpLCBy
ZWdUMSk7CiAKLSAgICBhZGRQdHIoSW1tMzIoc2l6ZW9mKEFyZ0xpc3QpICsgOCksIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoSW1tMzIoOCksIHN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKICNlbHNlIC8vIE9TKFdJTkNFKQotICAgIG1vdmUoc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJl
Z1QzKTsKICAgICBzdWJQdHIoSW1tMzIoOCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICBt
b3ZlKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgc3ViUHRyKEltbTMyKDggKyA0
ICsgNCAvKiBwYWRkaW5nICovKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotCi0gICAgLy8gU2V0
dXAgYXJnNDoKLSAgICBzdG9yZVB0cihyZWdUMywgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rl
ciwgOCkpOwotCi0gICAgLy8gU2V0dXAgYXJnMzoKLSAgICAvLyByZWdUMSBjdXJyZW50bHkgcG9p
bnRzIHRvIHRoZSBmaXJzdCBhcmd1bWVudCwgcmVnVDEtc2l6ZW9mKFJlZ2lzdGVyKSBwb2ludHMg
dG8gJ3RoaXMnCi0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIC0oaW50MzJfdClzaXplb2Yodm9p
ZCopICogMiksIHJlZ1QzKTsKLSAgICBzdG9yZVB0cihyZWdUMywgQWRkcmVzcyhzdGFja1BvaW50
ZXJSZWdpc3RlciwgMCkpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCAtKGludDMyX3Qpc2l6
ZW9mKHZvaWQqKSksIHJlZ1QzKTsKLSAgICBzdG9yZVB0cihyZWdUMywgQWRkcmVzcyhzdGFja1Bv
aW50ZXJSZWdpc3RlciwgNCkpOwotCi0gICAgLy8gU2V0dXAgYXJnMjoKLSAgICBlbWl0R2V0RnJv
bUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZpbGU6OkNhbGxlZSwgcmVnVDIpOwogCiAgICAg
Ly8gU2V0dXAgYXJnMToKICAgICBtb3ZlKGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMSk7CisgICAg
bW92ZShyZWdUMCwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogCiAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QyLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSksIHJlZ1QzKTsK
ICAgICBjYWxsKEFkZHJlc3MocmVnVDMsIGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uKSk7CkBA
IC00NzIsMzUgKzM1OSwyNCBAQCBKSVQ6OkxhYmVsIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRp
dmVDCiAgICAgbG9hZDMyKEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIDE2KSwgcmVnVDAp
OwogICAgIGxvYWQzMihBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCAyMCksIHJlZ1QxKTsK
IAotICAgIGFkZFB0cihJbW0zMihzaXplb2YoQXJnTGlzdCkgKyAxNiArIDgpLCBzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKEltbTMyKDgpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CiAjZW5kaWYgLy8gT1MoV0lOQ0UpCiAKLSNlbmRpZgorI2VuZGlmIC8vIENQVShYODYpCiAKICAg
ICAvLyBDaGVjayBmb3IgYW4gZXhjZXB0aW9uCi0gICAgbW92ZShJbW1QdHIoJmdsb2JhbERhdGEt
PmV4Y2VwdGlvbiksIHJlZ1QyKTsKLSAgICBKdW1wIHNhd0V4Y2VwdGlvbiA9IGJyYW5jaDMyKE5v
dEVxdWFsLCB0YWdGb3IoMCwgcmVnVDIpLCBJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7
Ci0KLSAgICAvLyBHcmFiIHRoZSByZXR1cm4gYWRkcmVzcy4KLSAgICBlbWl0R2V0RnJvbUNhbGxG
cmFtZUhlYWRlclB0cihSZWdpc3RlckZpbGU6OlJldHVyblBDLCByZWdUMyk7Ci0KLSAgICAvLyBS
ZXN0b3JlIG91ciBjYWxsZXIncyAiciIuCi0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQ
dHIoUmVnaXN0ZXJGaWxlOjpDYWxsZXJGcmFtZSwgY2FsbEZyYW1lUmVnaXN0ZXIpOworICAgIEp1
bXAgc2F3RXhjZXB0aW9uID0gYnJhbmNoMzIoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhyZWlu
dGVycHJldF9jYXN0PGNoYXIqPigmZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uKSArIE9CSkVDVF9PRkZT
RVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRh
ZykpOwogCiAgICAgLy8gUmV0dXJuLgotICAgIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0
dXJuKHJlZ1QzKTsKICAgICByZXQoKTsKIAogICAgIC8vIEhhbmRsZSBhbiBleGNlcHRpb24KICAg
ICBzYXdFeGNlcHRpb24ubGluayh0aGlzKTsKLSAgICAvLyBHcmFiIHRoZSByZXR1cm4gYWRkcmVz
cy4KLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZpbGU6OlJldHVy
blBDLCByZWdUMSk7CisgICAgcGVlayhyZWdUMSk7CiAgICAgbW92ZShJbW1QdHIoJmdsb2JhbERh
dGEtPmV4Y2VwdGlvbkxvY2F0aW9uKSwgcmVnVDIpOwogICAgIHN0b3JlUHRyKHJlZ1QxLCByZWdU
Mik7Ci0gICAgbW92ZShJbW1QdHIoRnVuY3Rpb25QdHIoY3RpVk1UaHJvd1RyYW1wb2xpbmUpLnZh
bHVlKCkpLCByZWdUMik7Ci0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0
ZXJGaWxlOjpDYWxsZXJGcmFtZSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgIHBva2UoY2FsbEZy
YW1lUmVnaXN0ZXIsIE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgY2FsbEZy
YW1lKSAvIHNpemVvZih2b2lkKikpOwotICAgIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0
dXJuKHJlZ1QyKTsKKyAgICBwb2tlKGNhbGxGcmFtZVJlZ2lzdGVyLCAxICsgT0JKRUNUX09GRlNF
VE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBjYWxsRnJhbWUpIC8gc2l6ZW9mKHZvaWQqKSk7Cisg
ICAgcG9rZShJbW1QdHIoRnVuY3Rpb25QdHIoY3RpVk1UaHJvd1RyYW1wb2xpbmUpLnZhbHVlKCkp
KTsKICAgICByZXQoKTsKIAogI2VsaWYgRU5BQkxFKEpJVF9PUFRJTUlaRV9OQVRJVkVfQ0FMTCkK
QEAgLTUxNCwxOTQgKzM5MCw3NSBAQCBKSVQ6OkxhYmVsIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElO
YXRpdmVDCiAKIEpJVDo6Q29kZVB0ciBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChQ
YXNzUmVmUHRyPEV4ZWN1dGFibGVQb29sPiBleGVjdXRhYmxlUG9vbCwgSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhLCBOYXRpdmVGdW5jdGlvbiBmdW5jKQogewotI2lmIENQVShYODYpIHx8IENQVShB
Uk1fVFJBRElUSU9OQUwpCiAgICAgTGFiZWwgbmF0aXZlQ2FsbFRodW5rID0gYWxpZ24oKTsKLSAg
ICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwocmVnVDApOwotICAgIGVtaXRQdXRUb0Nh
bGxGcmFtZUhlYWRlcihyZWdUMCwgUmVnaXN0ZXJGaWxlOjpSZXR1cm5QQyk7IC8vIFB1c2ggcmV0
dXJuIGFkZHJlc3MKKyNpZiBDUFUoWDg2KSB8fCBDUFUoQVJNX1RSQURJVElPTkFMKQogCiAgICAg
Ly8gTG9hZCBjYWxsZXIgZnJhbWUncyBzY29wZSBjaGFpbiBpbnRvIHRoaXMgY2FsbGZyYW1lIHNv
IHRoYXQgd2hhdGV2ZXIgd2UgY2FsbCBjYW4KICAgICAvLyBnZXQgdG8gaXRzIGdsb2JhbCBkYXRh
LgotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6Q2FsbGVy
RnJhbWUsIHJlZ1QxKTsKLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3Rl
ckZpbGU6OlNjb3BlQ2hhaW4sIHJlZ1QxLCByZWdUMSk7CisgICAgZW1pdEdldEZyb21DYWxsRnJh
bWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpDYWxsZXJGcmFtZSwgcmVnVDApOworICAgIGVtaXRH
ZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbiwgcmVnVDEs
IHJlZ1QwKTsKICAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIocmVnVDEsIFJlZ2lzdGVyRmls
ZTo6U2NvcGVDaGFpbik7CiAKLSNpZiBDUFUoWDg2KQotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1l
SGVhZGVyMzIoUmVnaXN0ZXJGaWxlOjpBcmd1bWVudENvdW50LCByZWdUMCk7Ci0KLSAgICAvKiBX
ZSBoYXZlIHR3byBzdHJ1Y3RzIHRoYXQgd2UgdXNlIHRvIGRlc2NyaWJlIHRoZSBzdGFja2ZyYW1l
IHdlIHNldCB1cCBmb3Igb3VyCi0gICAgICogY2FsbCB0byBuYXRpdmUgY29kZS4gIE5hdGl2ZUNh
bGxGcmFtZVN0cnVjdHVyZSBkZXNjcmliZXMgdGhlIGhvdyB3ZSBzZXQgdXAgdGhlIHN0YWNrCi0g
ICAgICogaW4gYWR2YW5jZSBvZiB0aGUgY2FsbC4gIE5hdGl2ZUZ1bmN0aW9uQ2FsbGVlU2lnbmF0
dXJlIGRlc2NyaWJlcyB0aGUgY2FsbGZyYW1lCi0gICAgICogYXMgdGhlIG5hdGl2ZSBjb2RlIGV4
cGVjdHMgaXQuICBXZSBkbyB0aGlzIGFzIHdlIGFyZSB1c2luZyB0aGUgZmFzdGNhbGwgY2FsbGlu
ZwotICAgICAqIGNvbnZlbnRpb24gd2hpY2ggcmVzdWx0cyBpbiB0aGUgY2FsbGVlIHBvcHBpbmcg
aXRzIGFyZ3VtZW50cyBvZmYgdGhlIHN0YWNrLCBidXQKLSAgICAgKiBub3QgdGhlIHJlc3Qgb2Yg
dGhlIGNhbGxmcmFtZSBzbyB3ZSBuZWVkIGEgbmljZSB3YXkgdG8gZW5zdXJlIHdlIGluY3JlbWVu
dCB0aGUKLSAgICAgKiBzdGFjayBwb2ludGVyIGJ5IHRoZSByaWdodCBhbW91bnQgYWZ0ZXIgdGhl
IGNhbGwuCi0gICAgICovCisgICAgcGVlayhyZWdUMSk7CisgICAgZW1pdFB1dFRvQ2FsbEZyYW1l
SGVhZGVyKHJlZ1QxLCBSZWdpc3RlckZpbGU6OlJldHVyblBDKTsKIAorI2lmIENQVShYODYpCiAj
aWYgQ09NUElMRVIoTVNWQykgfHwgT1MoTElOVVgpCi0jaWYgQ09NUElMRVIoTVNWQykKLSNwcmFn
bWEgcGFjayhwdXNoKQotI3ByYWdtYSBwYWNrKDQpCi0jZW5kaWYgLy8gQ09NUElMRVIoTVNWQykK
LSAgICBzdHJ1Y3QgTmF0aXZlQ2FsbEZyYW1lU3RydWN0dXJlIHsKLSAgICAgICAgLy8gIENhbGxG
cmFtZSogY2FsbEZyYW1lOyAvLyBwYXNzZWQgaW4gRURYCi0gICAgICAgIEpTT2JqZWN0KiBjYWxs
ZWU7Ci0gICAgICAgIEpTVmFsdWUgdGhpc1ZhbHVlOwotICAgICAgICBBcmdMaXN0KiBhcmdQb2lu
dGVyOwotICAgICAgICBBcmdMaXN0IGFyZ3M7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0OwotICAg
IH07Ci0gICAgc3RydWN0IE5hdGl2ZUZ1bmN0aW9uQ2FsbGVlU2lnbmF0dXJlIHsKLSAgICAgICAg
SlNPYmplY3QqIGNhbGxlZTsKLSAgICAgICAgSlNWYWx1ZSB0aGlzVmFsdWU7Ci0gICAgICAgIEFy
Z0xpc3QqIGFyZ1BvaW50ZXI7Ci0gICAgfTsKLSNpZiBDT01QSUxFUihNU1ZDKQotI3ByYWdtYSBw
YWNrKHBvcCkKLSNlbmRpZiAvLyBDT01QSUxFUihNU1ZDKQotI2Vsc2UKLSAgICBzdHJ1Y3QgTmF0
aXZlQ2FsbEZyYW1lU3RydWN0dXJlIHsKLSAgICAgICAgLy8gIENhbGxGcmFtZSogY2FsbEZyYW1l
OyAvLyBwYXNzZWQgaW4gRUNYCi0gICAgICAgIC8vICBKU09iamVjdCogY2FsbGVlOyAvLyBwYXNz
ZWQgaW4gRURYCi0gICAgICAgIEpTVmFsdWUgdGhpc1ZhbHVlOwotICAgICAgICBBcmdMaXN0KiBh
cmdQb2ludGVyOwotICAgICAgICBBcmdMaXN0IGFyZ3M7Ci0gICAgfTsKLSAgICBzdHJ1Y3QgTmF0
aXZlRnVuY3Rpb25DYWxsZWVTaWduYXR1cmUgewotICAgICAgICBKU1ZhbHVlIHRoaXNWYWx1ZTsK
LSAgICAgICAgQXJnTGlzdCogYXJnUG9pbnRlcjsKLSAgICB9OwotI2VuZGlmCisgICAgLy8gQ2Fs
bGluZyBjb252ZW50aW9uOiAgICAgIGYoZWR4LCAuLi4pOworICAgIC8vIEhvc3QgZnVuY3Rpb24g
c2lnbmF0dXJlOiBmKEV4ZWNTdGF0ZSopOworICAgIAorICAgIC8vIEV4ZWNTdGF0ZSoKKyAgICBt
b3ZlKGNhbGxGcmFtZVJlZ2lzdGVyLCBYODZSZWdpc3RlcnM6OmVkeCk7CiAKLSAgICBjb25zdCBp
bnQgTmF0aXZlQ2FsbEZyYW1lU2l6ZSA9IChzaXplb2YoTmF0aXZlQ2FsbEZyYW1lU3RydWN0dXJl
KSArIDE1KSAmIH4xNTsKLSAgICAvLyBBbGxvY2F0ZSBzeXN0ZW0gc3RhY2sgZnJhbWUKLSAgICBz
dWJQdHIoSW1tMzIoTmF0aXZlQ2FsbEZyYW1lU2l6ZSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
LQotICAgIC8vIFNldCB1cCBhcmd1bWVudHMKLSAgICBzdWJQdHIoSW1tMzIoMSksIHJlZ1QwKTsg
Ly8gRG9uJ3QgaW5jbHVkZSAndGhpcycgaW4gYXJnY291bnQKLQotICAgIC8vIHB1c2ggYXJnY291
bnQKLSAgICBzdG9yZVB0cihyZWdUMCwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgT0JK
RUNUX09GRlNFVE9GKE5hdGl2ZUNhbGxGcmFtZVN0cnVjdHVyZSwgYXJncykgKyBPQkpFQ1RfT0ZG
U0VUT0YoQXJnTGlzdCwgbV9hcmdDb3VudCkpKTsKLQotICAgIC8vIENhbGN1bGF0ZSB0aGUgc3Rh
cnQgb2YgdGhlIGNhbGxmcmFtZSBoZWFkZXIsIGFuZCBzdG9yZSBpbiByZWdUMQotICAgIGFkZFB0
cihJbW0zMigtUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplICogKGludClzaXplb2Yo
UmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QxKTsKLQotICAgIC8vIENhbGN1bGF0
ZSBzdGFydCBvZiBhcmd1bWVudHMgYXMgY2FsbGZyYW1lIGhlYWRlciAtIHNpemVvZihSZWdpc3Rl
cikgKiBhcmdjb3VudCAocmVnVDApCi0gICAgbXVsMzIoSW1tMzIoc2l6ZW9mKFJlZ2lzdGVyKSks
IHJlZ1QwLCByZWdUMCk7Ci0gICAgc3ViUHRyKHJlZ1QwLCByZWdUMSk7Ci0gICAgc3RvcmVQdHIo
cmVnVDEsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIE9CSkVDVF9PRkZTRVRPRihOYXRp
dmVDYWxsRnJhbWVTdHJ1Y3R1cmUsIGFyZ3MpICsgT0JKRUNUX09GRlNFVE9GKEFyZ0xpc3QsIG1f
YXJncykpKTsKLQotICAgIC8vIEFyZ0xpc3QgaXMgcGFzc2VkIGJ5IHJlZmVyZW5jZSBzbyBpcyBz
dGFja1BvaW50ZXJSZWdpc3RlciArIDQgKiBzaXplb2YoUmVnaXN0ZXIpCi0gICAgYWRkUHRyKElt
bTMyKE9CSkVDVF9PRkZTRVRPRihOYXRpdmVDYWxsRnJhbWVTdHJ1Y3R1cmUsIGFyZ3MpKSwgc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBzdG9yZVB0cihyZWdUMCwgQWRkcmVzcyhz
dGFja1BvaW50ZXJSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKE5hdGl2ZUNhbGxGcmFtZVN0cnVj
dHVyZSwgYXJnUG9pbnRlcikpKTsKLQotICAgIC8vIHJlZ1QxIGN1cnJlbnRseSBwb2ludHMgdG8g
dGhlIGZpcnN0IGFyZ3VtZW50LCByZWdUMSAtIHNpemVvZihSZWdpc3RlcikgcG9pbnRzIHRvICd0
aGlzJwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgLShpbnQpc2l6ZW9mKFJlZ2lzdGVyKSAr
IE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlZ1QyKTsKLSAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIC0oaW50KXNpemVvZihSZWdpc3RlcikgKyBPQkpFQ1Rf
T0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlZ1QzKTsKLSAgICBzdG9yZVB0cihy
ZWdUMiwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKE5hdGl2
ZUNhbGxGcmFtZVN0cnVjdHVyZSwgdGhpc1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVl
LCB1LmFzQml0cy5wYXlsb2FkKSkpOwotICAgIHN0b3JlUHRyKHJlZ1QzLCBBZGRyZXNzKHN0YWNr
UG9pbnRlclJlZ2lzdGVyLCBPQkpFQ1RfT0ZGU0VUT0YoTmF0aXZlQ2FsbEZyYW1lU3RydWN0dXJl
LCB0aGlzVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsK
KyNlbHNlCisgICAgLy8gQ2FsbGluZyBjb252ZW50aW9uOiAgICAgIGYoZWN4LCBlZHgsIC4uLik7
CisgICAgLy8gSG9zdCBmdW5jdGlvbiBzaWduYXR1cmU6IGYoRXhlY1N0YXRlKik7CiAKLSNpZiBD
T01QSUxFUihNU1ZDKSB8fCBPUyhMSU5VWCkKLSAgICAvLyBBcmdMaXN0IGlzIHBhc3NlZCBieSBy
ZWZlcmVuY2Ugc28gaXMgc3RhY2tQb2ludGVyUmVnaXN0ZXIgKyA0ICogc2l6ZW9mKFJlZ2lzdGVy
KQotICAgIGFkZFB0cihJbW0zMihPQkpFQ1RfT0ZGU0VUT0YoTmF0aXZlQ2FsbEZyYW1lU3RydWN0
dXJlLCByZXN1bHQpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIFg4NlJlZ2lzdGVyczo6ZWN4KTsK
KyAgICAvLyBFeGVjU3RhdGUqCisgICAgbW92ZShjYWxsRnJhbWVSZWdpc3RlciwgWDg2UmVnaXN0
ZXJzOjplY3gpOwogCi0gICAgLy8gUGxhbnQgY2FsbGVlCi0gICAgZW1pdEdldEZyb21DYWxsRnJh
bWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpDYWxsZWUsIFg4NlJlZ2lzdGVyczo6ZWF4KTsKLSAg
ICBzdG9yZVB0cihYODZSZWdpc3RlcnM6OmVheCwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rl
ciwgT0JKRUNUX09GRlNFVE9GKE5hdGl2ZUNhbGxGcmFtZVN0cnVjdHVyZSwgY2FsbGVlKSkpOwor
I2VuZGlmIC8vIENPTVBJTEVSKE1TVkMpIHx8IE9TKExJTlVYKQogCi0gICAgLy8gUGxhbnQgY2Fs
bGZyYW1lCi0gICAgbW92ZShjYWxsRnJhbWVSZWdpc3RlciwgWDg2UmVnaXN0ZXJzOjplZHgpOwor
ICAgIHN1YlB0cihJbW0zMigxNiAtIHNpemVvZih2b2lkKikpLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CiAKLSAgICBDYWxsIG5hdGl2ZUNhbGwgPSBjYWxsKCk7CisgICAgbW92ZShyZWdUMCwgY2Fs
bEZyYW1lUmVnaXN0ZXIpOyAvLyBFYWdlcmx5IHJlc3RvcmUgY2FsbGVyIGZyYW1lIHJlZ2lzdGVy
IHRvIGF2b2lkIGxvYWRpbmcgZnJvbSBzdGFjay4KIAotICAgIC8vIEpTVmFsdWUgaXMgYSBub24t
UE9EIHR5cGUsIHNvIGVheCBwb2ludHMgdG8gaXQKLSAgICBlbWl0TG9hZCgwLCByZWdUMSwgcmVn
VDAsIFg4NlJlZ2lzdGVyczo6ZWF4KTsKLSNlbHNlCi0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVI
ZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpDYWxsZWUsIFg4NlJlZ2lzdGVyczo6ZWR4KTsgLy8gY2Fs
bGVlCi0gICAgbW92ZShjYWxsRnJhbWVSZWdpc3RlciwgWDg2UmVnaXN0ZXJzOjplY3gpOyAvLyBj
YWxsRnJhbWUKKyAgICAvLyBjYWxsIHRoZSBmdW5jdGlvbgogICAgIENhbGwgbmF0aXZlQ2FsbCA9
IGNhbGwoKTsKLSNlbmRpZgogCi0gICAgLy8gV2UndmUgcHV0IGEgZmV3IHRlbXBvcmFyaWVzIG9u
IHRoZSBzdGFjayBpbiBhZGRpdGlvbiB0byB0aGUgYWN0dWFsIGFyZ3VtZW50cwotICAgIC8vIHNv
IHB1bGwgdGhlbSBvZmYgbm93Ci0gICAgYWRkUHRyKEltbTMyKE5hdGl2ZUNhbGxGcmFtZVNpemUg
LSBzaXplb2YoTmF0aXZlRnVuY3Rpb25DYWxsZWVTaWduYXR1cmUpKSwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIpOworICAgIGFkZFB0cihJbW0zMigxNiAtIHNpemVvZih2b2lkKikpLCBzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CiAKICNlbGlmIENQVShBUk1fVFJBRElUSU9OQUwpCi0gICAgZW1pdEdldEZy
b21DYWxsRnJhbWVIZWFkZXIzMihSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnQsIHJlZ1QwKTsK
LQogICAgIC8vIEFsbG9jYXRlIHN0YWNrIHNwYWNlIGZvciBvdXIgYXJnbGlzdAogICAgIENPTVBJ
TEVfQVNTRVJUKChzaXplb2YoQXJnTGlzdCkgJiAweDcpID09IDAgJiYgc2l6ZW9mKEpTVmFsdWUp
ID09IDggJiYgc2l6ZW9mKFJlZ2lzdGVyKSA9PSA4LCBBcmdMaXN0X3Nob3VsZF9ieV84Ynl0ZV9h
bGlnbmVkKTsKICAgICBzdWJQdHIoSW1tMzIoc2l6ZW9mKEFyZ0xpc3QpKSwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOwogCi0gICAgLy8gU2V0IHVwIGFyZ3VtZW50cwotICAgIHN1YlB0cihJbW0zMigx
KSwgcmVnVDApOyAvLyBEb24ndCBpbmNsdWRlICd0aGlzJyBpbiBhcmdjb3VudAotCi0gICAgLy8g
UHVzaCBhcmdjb3VudAotICAgIHN0b3JlUHRyKHJlZ1QwLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJl
Z2lzdGVyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJnTGlzdCwgbV9hcmdDb3VudCkpKTsKLQotICAgIC8v
IENhbGN1bGF0ZSB0aGUgc3RhcnQgb2YgdGhlIGNhbGxmcmFtZSBoZWFkZXIsIGFuZCBzdG9yZSBp
biByZWdUMQogICAgIG1vdmUoY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QxKTsKLSAgICBzdWIzMihJ
bW0zMihSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgKiAoaW50MzJfdClzaXplb2Yo
UmVnaXN0ZXIpKSwgcmVnVDEpOwotCi0gICAgLy8gQ2FsY3VsYXRlIHN0YXJ0IG9mIGFyZ3VtZW50
cyBhcyBjYWxsZnJhbWUgaGVhZGVyIC0gc2l6ZW9mKFJlZ2lzdGVyKSAqIGFyZ2NvdW50IChyZWdU
MSkKLSAgICBtdWwzMihJbW0zMihzaXplb2YoUmVnaXN0ZXIpKSwgcmVnVDAsIHJlZ1QwKTsKLSAg
ICBzdWJQdHIocmVnVDAsIHJlZ1QxKTsKLQotICAgIC8vIHB1c2ggcG9pbnRlciB0byBhcmd1bWVu
dHMKLSAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgT0JK
RUNUX09GRlNFVE9GKEFyZ0xpc3QsIG1fYXJncykpKTsKKyAgICBtb3ZlKHJlZ1QwLCBjYWxsRnJh
bWVSZWdpc3Rlcik7CiAKICAgICAvLyBBcmd1bWVudCBwYXNzaW5nIG1ldGhvZDoKICAgICAvLyBy
MCAtIHBvaW50cyB0byByZXR1cm4gdmFsdWUKICAgICAvLyByMSAtIGNhbGxGcmFtZQotICAgIC8v
IHIyIC0gY2FsbGVlCi0gICAgLy8gc3RhY2s6IHRoaXMoSlNWYWx1ZSkgYW5kIGEgcG9pbnRlciB0
byBBcmdMaXN0CiAKICNpZiBPUyhXSU5DRSkKLSAgICAvLyBTZXR1cCBhcmc0OgotICAgIHB1c2go
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotCi0gICAgLy8gU2V0dXAgYXJnMzoKLSAgICAvLyByZWdU
MSBjdXJyZW50bHkgcG9pbnRzIHRvIHRoZSBmaXJzdCBhcmd1bWVudCwgcmVnVDEtc2l6ZW9mKFJl
Z2lzdGVyKSBwb2ludHMgdG8gJ3RoaXMnCi0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIC0oaW50
MzJfdClzaXplb2Yodm9pZCopICogMiksIEFSTVJlZ2lzdGVyczo6cjMpOwotICAgIHB1c2goQVJN
UmVnaXN0ZXJzOjpyMyk7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIC0oaW50MzJfdClzaXpl
b2Yodm9pZCopKSwgcmVnVDMpOwotICAgIHN0b3JlUHRyKHJlZ1QzLCBBZGRyZXNzKHN0YWNrUG9p
bnRlclJlZ2lzdGVyKSk7Ci0KLSAgICAvLyBTZXR1cCBhcmcyOgotICAgIGVtaXRHZXRGcm9tQ2Fs
bEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6Q2FsbGVlLCByZWdUMik7CisgICAgc3ViUHRy
KEltbTMyKDgpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICAvLyBTZXR1cCBhcmcxOgog
ICAgIG1vdmUoY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QxKTsKLQotICAgIC8vIFNldHVwIGFyZzA6
Ci0gICAgbW92ZShzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVnVDApOworICAgIG1vdmUocmVnVDAs
IGNhbGxGcmFtZVJlZ2lzdGVyKTsKIAogICAgIENhbGwgbmF0aXZlQ2FsbCA9IGNhbGwoKTsKIAog
ICAgIGxvYWQzMihBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCAwKSwgcmVnVDApOwogICAg
IGxvYWQzMihBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCA0KSwgcmVnVDEpOwogCi0gICAg
YWRkUHRyKEltbTMyKHNpemVvZihBcmdMaXN0KSArIDgpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CisgICAgYWRkUHRyKEltbTMyKDgpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAjZWxzZSAvLyBP
UyhXSU5DRSkKLSAgICBtb3ZlKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdUMyk7CiAgICAgc3Vi
UHRyKEltbTMyKDgpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgbW92ZShzdGFja1BvaW50
ZXJSZWdpc3RlciwgcmVnVDApOwotICAgIHN1YlB0cihJbW0zMig4ICsgNCArIDQgLyogcGFkZGlu
ZyAqLyksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLQotICAgIC8vIFNldHVwIGFyZzQ6Ci0gICAg
c3RvcmVQdHIocmVnVDMsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIDgpKTsKLQotICAg
IC8vIFNldHVwIGFyZzM6Ci0gICAgLy8gcmVnVDEgY3VycmVudGx5IHBvaW50cyB0byB0aGUgZmly
c3QgYXJndW1lbnQsIHJlZ1QxLXNpemVvZihSZWdpc3RlcikgcG9pbnRzIHRvICd0aGlzJwotICAg
IGxvYWQzMihBZGRyZXNzKHJlZ1QxLCAtKGludDMyX3Qpc2l6ZW9mKHZvaWQqKSAqIDIpLCByZWdU
Myk7Ci0gICAgc3RvcmVQdHIocmVnVDMsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIDAp
KTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgLShpbnQzMl90KXNpemVvZih2b2lkKikpLCBy
ZWdUMyk7Ci0gICAgc3RvcmVQdHIocmVnVDMsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIs
IDQpKTsKLQotICAgIC8vIFNldHVwIGFyZzI6Ci0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFk
ZXJQdHIoUmVnaXN0ZXJGaWxlOjpDYWxsZWUsIHJlZ1QyKTsKIAogICAgIC8vIFNldHVwIGFyZzE6
CiAgICAgbW92ZShjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDEpOworICAgIG1vdmUocmVnVDAsIGNh
bGxGcmFtZVJlZ2lzdGVyKTsKIAogICAgIENhbGwgbmF0aXZlQ2FsbCA9IGNhbGwoKTsKIApAQCAt
NzA5LDM1ICs0NjYsMjQgQEAgSklUOjpDb2RlUHRyIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRp
dgogICAgIGxvYWQzMihBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCAxNiksIHJlZ1QwKTsK
ICAgICBsb2FkMzIoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgMjApLCByZWdUMSk7CiAK
LSAgICBhZGRQdHIoSW1tMzIoc2l6ZW9mKEFyZ0xpc3QpICsgMTYgKyA4KSwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOworICAgIGFkZFB0cihJbW0zMig4KSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwog
I2VuZGlmIC8vIE9TKFdJTkNFKQogCi0jZW5kaWYKKyNlbmRpZiAvLyBDUFUoWDg2KQogCiAgICAg
Ly8gQ2hlY2sgZm9yIGFuIGV4Y2VwdGlvbgotICAgIG1vdmUoSW1tUHRyKCZnbG9iYWxEYXRhLT5l
eGNlcHRpb24pLCByZWdUMik7Ci0gICAgSnVtcCBzYXdFeGNlcHRpb24gPSBicmFuY2gzMihOb3RF
cXVhbCwgdGFnRm9yKDAsIHJlZ1QyKSwgSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOwot
Ci0gICAgLy8gR3JhYiB0aGUgcmV0dXJuIGFkZHJlc3MuCi0gICAgZW1pdEdldEZyb21DYWxsRnJh
bWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpSZXR1cm5QQywgcmVnVDMpOwotCi0gICAgLy8gUmVz
dG9yZSBvdXIgY2FsbGVyJ3MgInIiLgotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRy
KFJlZ2lzdGVyRmlsZTo6Q2FsbGVyRnJhbWUsIGNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICBKdW1w
IHNhd0V4Y2VwdGlvbiA9IGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MocmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4oJmdsb2JhbERhdGEtPmV4Y2VwdGlvbikgKyBPQkpFQ1RfT0ZGU0VU
T0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcp
KTsKIAogICAgIC8vIFJldHVybi4KLSAgICByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVy
bihyZWdUMyk7CiAgICAgcmV0KCk7CiAKICAgICAvLyBIYW5kbGUgYW4gZXhjZXB0aW9uCiAgICAg
c2F3RXhjZXB0aW9uLmxpbmsodGhpcyk7Ci0gICAgLy8gR3JhYiB0aGUgcmV0dXJuIGFkZHJlc3Mu
Ci0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpSZXR1cm5Q
QywgcmVnVDEpOworICAgIHBlZWsocmVnVDEpOwogICAgIG1vdmUoSW1tUHRyKCZnbG9iYWxEYXRh
LT5leGNlcHRpb25Mb2NhdGlvbiksIHJlZ1QyKTsKICAgICBzdG9yZVB0cihyZWdUMSwgcmVnVDIp
OwotICAgIG1vdmUoSW1tUHRyKEZ1bmN0aW9uUHRyKGN0aVZNVGhyb3dUcmFtcG9saW5lKS52YWx1
ZSgpKSwgcmVnVDIpOwotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVy
RmlsZTo6Q2FsbGVyRnJhbWUsIGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICBwb2tlKGNhbGxGcmFt
ZVJlZ2lzdGVyLCBPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIGNhbGxGcmFt
ZSkgLyBzaXplb2Yodm9pZCopKTsKLSAgICByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVy
bihyZWdUMik7CisgICAgcG9rZShjYWxsRnJhbWVSZWdpc3RlciwgMSArIE9CSkVDVF9PRkZTRVRP
RihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgY2FsbEZyYW1lKSAvIHNpemVvZih2b2lkKikpOworICAg
IHBva2UoSW1tUHRyKEZ1bmN0aW9uUHRyKGN0aVZNVGhyb3dUcmFtcG9saW5lKS52YWx1ZSgpKSk7
CiAgICAgcmV0KCk7CiAKICNlbGlmIEVOQUJMRShKSVRfT1BUSU1JWkVfTkFUSVZFX0NBTEwpCklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIEphdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc0LDU2ICsy
NzQsMzQgQEAgSklUOjpMYWJlbCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQwogICAgIGlu
dCBleGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlvbiA9IGlzQ29uc3RydWN0ID8gT0JKRUNUX09GRlNF
VE9GKE5hdGl2ZUV4ZWN1dGFibGUsIG1fY29uc3RydWN0b3IpIDogT0JKRUNUX09GRlNFVE9GKE5h
dGl2ZUV4ZWN1dGFibGUsIG1fZnVuY3Rpb24pOwogCiAgICAgTGFiZWwgbmF0aXZlQ2FsbFRodW5r
ID0gYWxpZ24oKTsKLSAgICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwocmVnVDApOwot
ICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihyZWdUMCwgUmVnaXN0ZXJGaWxlOjpSZXR1cm5Q
Qyk7IC8vIFB1c2ggcmV0dXJuIGFkZHJlc3MKIAogICAgIC8vIExvYWQgY2FsbGVyIGZyYW1lJ3Mg
c2NvcGUgY2hhaW4gaW50byB0aGlzIGNhbGxmcmFtZSBzbyB0aGF0IHdoYXRldmVyIHdlIGNhbGwg
Y2FuCiAgICAgLy8gZ2V0IHRvIGl0cyBnbG9iYWwgZGF0YS4KLSAgICBlbWl0R2V0RnJvbUNhbGxG
cmFtZUhlYWRlclB0cihSZWdpc3RlckZpbGU6OkNhbGxlckZyYW1lLCByZWdUMSk7Ci0gICAgZW1p
dEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluLCByZWdU
MSwgcmVnVDEpOworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmls
ZTo6Q2FsbGVyRnJhbWUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0
cihSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4sIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdFB1dFRv
Q2FsbEZyYW1lSGVhZGVyKHJlZ1QxLCBSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4pOwotICAgIAog
Ci0jaWYgQ1BVKFg4Nl82NCkKLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjMyKFJlZ2lz
dGVyRmlsZTo6QXJndW1lbnRDb3VudCwgWDg2UmVnaXN0ZXJzOjplY3gpOworICAgIHBlZWsocmVn
VDEpOworICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihyZWdUMSwgUmVnaXN0ZXJGaWxlOjpS
ZXR1cm5QQyk7CiAKLSAgICAvLyBBbGxvY2F0ZSBzdGFjayBzcGFjZSBmb3Igb3VyIGFyZ2xpc3QK
LSAgICBzdWJQdHIoSW1tMzIoc2l6ZW9mKEFyZ0xpc3QpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OwotICAgIENPTVBJTEVfQVNTRVJUKChzaXplb2YoQXJnTGlzdCkgJiAweGYpID09IDAsIEFyZ0xp
c3Rfc2hvdWxkX2J5XzE2Ynl0ZV9hbGlnbmVkKTsKLSAgICAKLSAgICAvLyBTZXQgdXAgYXJndW1l
bnRzCi0gICAgc3ViUHRyKEltbTMyKDEpLCBYODZSZWdpc3RlcnM6OmVjeCk7IC8vIERvbid0IGlu
Y2x1ZGUgJ3RoaXMnIGluIGFyZ2NvdW50CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAvLyBDYWxsaW5n
IGNvbnZlbnRpb246ICAgICAgZihlZGksIGVzaSwgZWR4LCBlY3gsIC4uLik7CisgICAgLy8gSG9z
dCBmdW5jdGlvbiBzaWduYXR1cmU6IGYoRXhlY1N0YXRlKik7CiAKLSAgICAvLyBQdXNoIGFyZ2Nv
dW50Ci0gICAgc3RvcmVQdHIoWDg2UmVnaXN0ZXJzOjplY3gsIEFkZHJlc3Moc3RhY2tQb2ludGVy
UmVnaXN0ZXIsIE9CSkVDVF9PRkZTRVRPRihBcmdMaXN0LCBtX2FyZ0NvdW50KSkpOworICAgIHN1
YlB0cihJbW0zMigxNiAtIHNpemVvZih2b2lkKikpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAK
LSAgICAvLyBDYWxjdWxhdGUgdGhlIHN0YXJ0IG9mIHRoZSBjYWxsZnJhbWUgaGVhZGVyLCBhbmQg
c3RvcmUgaW4gZWR4Ci0gICAgYWRkUHRyKEltbTMyKC1SZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhl
YWRlclNpemUgKiAoaW50MzJfdClzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIs
IFg4NlJlZ2lzdGVyczo6ZWR4KTsKLSAgICAKLSAgICAvLyBDYWxjdWxhdGUgc3RhcnQgb2YgYXJn
dW1lbnRzIGFzIGNhbGxmcmFtZSBoZWFkZXIgLSBzaXplb2YoUmVnaXN0ZXIpICogYXJnY291bnQg
KGVjeCkKLSAgICBtdWwzMihJbW0zMihzaXplb2YoUmVnaXN0ZXIpKSwgWDg2UmVnaXN0ZXJzOjpl
Y3gsIFg4NlJlZ2lzdGVyczo6ZWN4KTsKLSAgICBzdWJQdHIoWDg2UmVnaXN0ZXJzOjplY3gsIFg4
NlJlZ2lzdGVyczo6ZWR4KTsKKyAgICAvLyBFeGVjU3RhdGUqCisgICAgbW92ZShjYWxsRnJhbWVS
ZWdpc3RlciwgWDg2UmVnaXN0ZXJzOjplZGkpOwogCi0gICAgLy8gcHVzaCBwb2ludGVyIHRvIGFy
Z3VtZW50cwotICAgIHN0b3JlUHRyKFg4NlJlZ2lzdGVyczo6ZWR4LCBBZGRyZXNzKHN0YWNrUG9p
bnRlclJlZ2lzdGVyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJnTGlzdCwgbV9hcmdzKSkpOwotICAgIAot
ICAgIC8vIEFyZ0xpc3QgaXMgcGFzc2VkIGJ5IHJlZmVyZW5jZSBzbyBpcyBzdGFja1BvaW50ZXJS
ZWdpc3RlcgotICAgIG1vdmUoc3RhY2tQb2ludGVyUmVnaXN0ZXIsIFg4NlJlZ2lzdGVyczo6ZWN4
KTsKLSAgICAKLSAgICAvLyBlZHggY3VycmVudGx5IHBvaW50cyB0byB0aGUgZmlyc3QgYXJndW1l
bnQsIGVkeC1zaXplb2YoUmVnaXN0ZXIpIHBvaW50cyB0byAndGhpcycKLSAgICBsb2FkUHRyKEFk
ZHJlc3MoWDg2UmVnaXN0ZXJzOjplZHgsIC0oaW50MzJfdClzaXplb2YoUmVnaXN0ZXIpKSwgWDg2
UmVnaXN0ZXJzOjplZHgpOwotICAgIAotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRy
KFJlZ2lzdGVyRmlsZTo6Q2FsbGVlLCBYODZSZWdpc3RlcnM6OmVzaSk7CisgICAgLy8gY2FsbCB0
aGUgZnVuY3Rpb24KKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZp
bGU6OkNhbGxlZSwgWDg2UmVnaXN0ZXJzOjpyOSk7CisgICAgbG9hZFB0cihBZGRyZXNzKFg4NlJl
Z2lzdGVyczo6cjksIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2V4ZWN1dGFibGUpKSwg
WDg2UmVnaXN0ZXJzOjpyOSk7CisgICAgbW92ZShyZWdUMCwgY2FsbEZyYW1lUmVnaXN0ZXIpOyAv
LyBFYWdlcmx5IHJlc3RvcmUgY2FsbGVyIGZyYW1lIHJlZ2lzdGVyIHRvIGF2b2lkIGxvYWRpbmcg
ZnJvbSBzdGFjay4KKyAgICBjYWxsKEFkZHJlc3MoWDg2UmVnaXN0ZXJzOjpyOSwgZXhlY3V0YWJs
ZU9mZnNldFRvRnVuY3Rpb24pKTsKIAotICAgIG1vdmUoY2FsbEZyYW1lUmVnaXN0ZXIsIFg4NlJl
Z2lzdGVyczo6ZWRpKTsgCisgICAgYWRkUHRyKEltbTMyKDE2IC0gc2l6ZW9mKHZvaWQqKSksIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAotICAgIGxvYWRQdHIoQWRkcmVzcyhYODZSZWdpc3RlcnM6
OmVzaSwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fZXhlY3V0YWJsZSkpLCBYODZSZWdp
c3RlcnM6OnI5KTsKLSAgICBjYWxsKEFkZHJlc3MoWDg2UmVnaXN0ZXJzOjpyOSwgZXhlY3V0YWJs
ZU9mZnNldFRvRnVuY3Rpb24pKTsKLSAgICAKLSAgICBhZGRQdHIoSW1tMzIoc2l6ZW9mKEFyZ0xp
c3QpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogI2VsaWYgQ1BVKFg4NikKLSAgICBlbWl0R2V0
RnJvbUNhbGxGcmFtZUhlYWRlcjMyKFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCwgcmVnVDAp
OwotCiAgICAgLyogV2UgaGF2ZSB0d28gc3RydWN0cyB0aGF0IHdlIHVzZSB0byBkZXNjcmliZSB0
aGUgc3RhY2tmcmFtZSB3ZSBzZXQgdXAgZm9yIG91cgogICAgICAqIGNhbGwgdG8gbmF0aXZlIGNv
ZGUuICBOYXRpdmVDYWxsRnJhbWVTdHJ1Y3R1cmUgZGVzY3JpYmVzIHRoZSBob3cgd2Ugc2V0IHVw
IHRoZSBzdGFjawogICAgICAqIGluIGFkdmFuY2Ugb2YgdGhlIGNhbGwuICBOYXRpdmVGdW5jdGlv
bkNhbGxlZVNpZ25hdHVyZSBkZXNjcmliZXMgdGhlIGNhbGxmcmFtZQpAQCAtMzM0LDgwICszMTIs
MzUgQEAgSklUOjpMYWJlbCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQwogICAgICAqLwog
I2lmIENPTVBJTEVSKE1TVkMpIHx8IE9TKExJTlVYKQogICAgIHN0cnVjdCBOYXRpdmVDYWxsRnJh
bWVTdHJ1Y3R1cmUgewotICAgICAgLy8gIENhbGxGcmFtZSogY2FsbEZyYW1lOyAvLyBwYXNzZWQg
aW4gRURYCi0gICAgICAgIEpTT2JqZWN0KiBjYWxsZWU7Ci0gICAgICAgIEpTVmFsdWUgdGhpc1Zh
bHVlOwotICAgICAgICBBcmdMaXN0KiBhcmdQb2ludGVyOwotICAgICAgICBBcmdMaXN0IGFyZ3M7
CisgICAgLy8gIENhbGxGcmFtZSogY2FsbEZyYW1lOyAvLyBwYXNzZWQgaW4gRURYCiAgICAgICAg
IEpTVmFsdWUgcmVzdWx0OwogICAgIH07CiAgICAgc3RydWN0IE5hdGl2ZUZ1bmN0aW9uQ2FsbGVl
U2lnbmF0dXJlIHsKLSAgICAgICAgSlNPYmplY3QqIGNhbGxlZTsKLSAgICAgICAgSlNWYWx1ZSB0
aGlzVmFsdWU7Ci0gICAgICAgIEFyZ0xpc3QqIGFyZ1BvaW50ZXI7CiAgICAgfTsKICNlbHNlCiAg
ICAgc3RydWN0IE5hdGl2ZUNhbGxGcmFtZVN0cnVjdHVyZSB7CiAgICAgICAvLyAgQ2FsbEZyYW1l
KiBjYWxsRnJhbWU7IC8vIHBhc3NlZCBpbiBFQ1gKLSAgICAgIC8vICBKU09iamVjdCogY2FsbGVl
OyAvLyBwYXNzZWQgaW4gRURYCi0gICAgICAgIEpTVmFsdWUgdGhpc1ZhbHVlOwotICAgICAgICBB
cmdMaXN0KiBhcmdQb2ludGVyOwotICAgICAgICBBcmdMaXN0IGFyZ3M7CiAgICAgfTsKICAgICBz
dHJ1Y3QgTmF0aXZlRnVuY3Rpb25DYWxsZWVTaWduYXR1cmUgewotICAgICAgICBKU1ZhbHVlIHRo
aXNWYWx1ZTsKLSAgICAgICAgQXJnTGlzdCogYXJnUG9pbnRlcjsKICAgICB9OwogI2VuZGlmCiAg
ICAgY29uc3QgaW50IE5hdGl2ZUNhbGxGcmFtZVNpemUgPSAoc2l6ZW9mKE5hdGl2ZUNhbGxGcmFt
ZVN0cnVjdHVyZSkgKyAxNSkgJiB+MTU7CiAgICAgLy8gQWxsb2NhdGUgc3lzdGVtIHN0YWNrIGZy
YW1lCiAgICAgc3ViUHRyKEltbTMyKE5hdGl2ZUNhbGxGcmFtZVNpemUpLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CiAKLSAgICAvLyBTZXQgdXAgYXJndW1lbnRzCi0gICAgc3ViUHRyKEltbTMyKDEp
LCByZWdUMCk7IC8vIERvbid0IGluY2x1ZGUgJ3RoaXMnIGluIGFyZ2NvdW50Ci0KLSAgICAvLyBw
dXNoIGFyZ2NvdW50Ci0gICAgc3RvcmVQdHIocmVnVDAsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVn
aXN0ZXIsIE9CSkVDVF9PRkZTRVRPRihOYXRpdmVDYWxsRnJhbWVTdHJ1Y3R1cmUsIGFyZ3MpICsg
T0JKRUNUX09GRlNFVE9GKEFyZ0xpc3QsIG1fYXJnQ291bnQpKSk7Ci0gICAgCi0gICAgLy8gQ2Fs
Y3VsYXRlIHRoZSBzdGFydCBvZiB0aGUgY2FsbGZyYW1lIGhlYWRlciwgYW5kIHN0b3JlIGluIHJl
Z1QxCi0gICAgYWRkUHRyKEltbTMyKC1SZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUg
KiAoaW50KXNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDEpOwotICAg
IAotICAgIC8vIENhbGN1bGF0ZSBzdGFydCBvZiBhcmd1bWVudHMgYXMgY2FsbGZyYW1lIGhlYWRl
ciAtIHNpemVvZihSZWdpc3RlcikgKiBhcmdjb3VudCAocmVnVDApCi0gICAgbXVsMzIoSW1tMzIo
c2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QwLCByZWdUMCk7Ci0gICAgc3ViUHRyKHJlZ1QwLCByZWdU
MSk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIE9C
SkVDVF9PRkZTRVRPRihOYXRpdmVDYWxsRnJhbWVTdHJ1Y3R1cmUsIGFyZ3MpICsgT0JKRUNUX09G
RlNFVE9GKEFyZ0xpc3QsIG1fYXJncykpKTsKLQotICAgIC8vIEFyZ0xpc3QgaXMgcGFzc2VkIGJ5
IHJlZmVyZW5jZSBzbyBpcyBzdGFja1BvaW50ZXJSZWdpc3RlciArIDQgKiBzaXplb2YoUmVnaXN0
ZXIpCi0gICAgYWRkUHRyKEltbTMyKE9CSkVDVF9PRkZTRVRPRihOYXRpdmVDYWxsRnJhbWVTdHJ1
Y3R1cmUsIGFyZ3MpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBzdG9yZVB0
cihyZWdUMCwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKE5h
dGl2ZUNhbGxGcmFtZVN0cnVjdHVyZSwgYXJnUG9pbnRlcikpKTsKLQotICAgIC8vIHJlZ1QxIGN1
cnJlbnRseSBwb2ludHMgdG8gdGhlIGZpcnN0IGFyZ3VtZW50LCByZWdUMSAtIHNpemVvZihSZWdp
c3RlcikgcG9pbnRzIHRvICd0aGlzJwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgLShpbnQp
c2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhz
dGFja1BvaW50ZXJSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKE5hdGl2ZUNhbGxGcmFtZVN0cnVj
dHVyZSwgdGhpc1ZhbHVlKSkpOwotCiAjaWYgQ09NUElMRVIoTVNWQykgfHwgT1MoTElOVVgpCi0g
ICAgLy8gQXJnTGlzdCBpcyBwYXNzZWQgYnkgcmVmZXJlbmNlIHNvIGlzIHN0YWNrUG9pbnRlclJl
Z2lzdGVyICsgNCAqIHNpemVvZihSZWdpc3RlcikKLSAgICBhZGRQdHIoSW1tMzIoT0JKRUNUX09G
RlNFVE9GKE5hdGl2ZUNhbGxGcmFtZVN0cnVjdHVyZSwgcmVzdWx0KSksIHN0YWNrUG9pbnRlclJl
Z2lzdGVyLCBYODZSZWdpc3RlcnM6OmVjeCk7Ci0KLSAgICAvLyBQbGFudCBjYWxsZWUKLSAgICBl
bWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZpbGU6OkNhbGxlZSwgWDg2UmVn
aXN0ZXJzOjplYXgpOwotICAgIHN0b3JlUHRyKFg4NlJlZ2lzdGVyczo6ZWF4LCBBZGRyZXNzKHN0
YWNrUG9pbnRlclJlZ2lzdGVyLCBPQkpFQ1RfT0ZGU0VUT0YoTmF0aXZlQ2FsbEZyYW1lU3RydWN0
dXJlLCBjYWxsZWUpKSk7Ci0KICAgICAvLyBQbGFudCBjYWxsZnJhbWUKICAgICBtb3ZlKGNhbGxG
cmFtZVJlZ2lzdGVyLCBYODZSZWdpc3RlcnM6OmVkeCk7CiAKICAgICBsb2FkUHRyKEFkZHJlc3Mo
WDg2UmVnaXN0ZXJzOjplYXgsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2V4ZWN1dGFi
bGUpKSwgWDg2UmVnaXN0ZXJzOjplYngpOwotICAgIGNhbGwoQWRkcmVzcyhYODZSZWdpc3RlcnM6
OmVieCwgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24pKTsKKyAgICBtb3ZlKHJlZ1QwLCBjYWxs
RnJhbWVSZWdpc3Rlcik7CisgICAgY2FsbChBZGRyZXNzKFg4NlJlZ2lzdGVyczo6ZWJ4LCBleGVj
dXRhYmxlT2Zmc2V0VG9GdW5jdGlvbik7CiAKICAgICAvLyBKU1ZhbHVlIGlzIGEgbm9uLVBPRCB0
eXBlCiAgICAgbG9hZFB0cihBZGRyZXNzKFg4NlJlZ2lzdGVyczo6ZWF4KSwgWDg2UmVnaXN0ZXJz
OjplYXgpOwogI2Vsc2UKLSAgICAvLyBQbGFudCBjYWxsZWUKLSAgICBlbWl0R2V0RnJvbUNhbGxG
cmFtZUhlYWRlclB0cihSZWdpc3RlckZpbGU6OkNhbGxlZSwgWDg2UmVnaXN0ZXJzOjplZHgpOwot
Ci0gICAgLy8gUGxhbnQgY2FsbGZyYW1lCi0gICAgbW92ZShjYWxsRnJhbWVSZWdpc3RlciwgWDg2
UmVnaXN0ZXJzOjplY3gpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhYODZSZWdpc3RlcnM6OmVkeCwg
T0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fZXhlY3V0YWJsZSkpLCBYODZSZWdpc3RlcnM6
OmVieCk7CisgICAgbW92ZShyZWdUMCwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIGNhbGwoQWRk
cmVzcyhYODZSZWdpc3RlcnM6OmVieCwgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24pKTsKICNl
bmRpZgogCkBAIC00MTYsNjQgKzM0OSwyNCBAQCBKSVQ6OkxhYmVsIEpJVDo6cHJpdmF0ZUNvbXBp
bGVDVElOYXRpdmVDCiAgICAgYWRkUHRyKEltbTMyKE5hdGl2ZUNhbGxGcmFtZVNpemUgLSBzaXpl
b2YoTmF0aXZlRnVuY3Rpb25DYWxsZWVTaWduYXR1cmUpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OwogCiAjZWxpZiBDUFUoQVJNKQotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyMzIoUmVn
aXN0ZXJGaWxlOjpBcmd1bWVudENvdW50LCByZWdUMCk7Ci0KICAgICAvLyBBbGxvY2F0ZSBzdGFj
ayBzcGFjZSBmb3Igb3VyIGFyZ2xpc3QKICAgICBDT01QSUxFX0FTU0VSVCgoc2l6ZW9mKEFyZ0xp
c3QpICYgMHg3KSA9PSAwLCBBcmdMaXN0X3Nob3VsZF9ieV84Ynl0ZV9hbGlnbmVkKTsKICAgICBz
dWJQdHIoSW1tMzIoc2l6ZW9mKEFyZ0xpc3QpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCi0g
ICAgLy8gU2V0IHVwIGFyZ3VtZW50cwotICAgIHN1YlB0cihJbW0zMigxKSwgcmVnVDApOyAvLyBE
b24ndCBpbmNsdWRlICd0aGlzJyBpbiBhcmdjb3VudAotCi0gICAgLy8gUHVzaCBhcmdjb3VudAot
ICAgIHN0b3JlUHRyKHJlZ1QwLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBPQkpFQ1Rf
T0ZGU0VUT0YoQXJnTGlzdCwgbV9hcmdDb3VudCkpKTsKLQotICAgIC8vIENhbGN1bGF0ZSB0aGUg
c3RhcnQgb2YgdGhlIGNhbGxmcmFtZSBoZWFkZXIsIGFuZCBzdG9yZSBpbiByZWdUMQotICAgIG1v
dmUoY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QxKTsKLSAgICBzdWIzMihJbW0zMihSZWdpc3RlckZp
bGU6OkNhbGxGcmFtZUhlYWRlclNpemUgKiAoaW50MzJfdClzaXplb2YoUmVnaXN0ZXIpKSwgcmVn
VDEpOwotCi0gICAgLy8gQ2FsY3VsYXRlIHN0YXJ0IG9mIGFyZ3VtZW50cyBhcyBjYWxsZnJhbWUg
aGVhZGVyIC0gc2l6ZW9mKFJlZ2lzdGVyKSAqIGFyZ2NvdW50IChyZWdUMSkKLSAgICBtdWwzMihJ
bW0zMihzaXplb2YoUmVnaXN0ZXIpKSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBzdWJQdHIocmVnVDAs
IHJlZ1QxKTsKLQotICAgIC8vIHB1c2ggcG9pbnRlciB0byBhcmd1bWVudHMKLSAgICBzdG9yZVB0
cihyZWdUMSwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKEFy
Z0xpc3QsIG1fYXJncykpKTsKLQotICAgIC8vIHJlZ1QxIGN1cnJlbnRseSBwb2ludHMgdG8gdGhl
IGZpcnN0IGFyZ3VtZW50LCByZWdUMS1zaXplb2YoUmVnaXN0ZXIpIHBvaW50cyB0byAndGhpcycK
LQogI2lmIE9TKFdJTkNFKQotICAgIC8vIFNldHVwIGFyZzM6Ci0gICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QxLCAtKGludDMyX3Qpc2l6ZW9mKFJlZ2lzdGVyKSksIEFSTVJlZ2lzdGVyczo6cjMpOwot
Ci0gICAgLy8gU2V0dXAgYXJnMjoKLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihS
ZWdpc3RlckZpbGU6OkNhbGxlZSwgcmVnVDIpOwotCiAgICAgLy8gU2V0dXAgYXJnMToKICAgICBt
b3ZlKGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMSk7CiAKLSAgICAvLyBTZXR1cCBhcmcwOgotICAg
IG1vdmUoc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBzdWJQdHIoSW1tMzIoc2l6
ZW9mKFJlZ2lzdGVyKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICBzdG9yZVB0cihyZWdU
MCwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlcikpOwotCiAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSksIHJlZ1Qz
KTsKKyAgICBtb3ZlKHJlZ1QwLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgY2FsbChBZGRyZXNz
KHJlZ1QzLCBleGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlvbikpOwogCiAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QwKSwgcmVnVDApOwogCiAgICAgYWRkUHRyKEltbTMyKHNpemVvZihSZWdpc3Rlcikg
KyBzaXplb2YoQXJnTGlzdCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAjZWxzZSAvLyBPUyhX
SU5DRSkKLSAgICAvLyBTZXR1cCBhcmczOgotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgLShp
bnQzMl90KXNpemVvZihSZWdpc3RlcikpLCByZWdUMik7Ci0KLSAgICAvLyBTZXR1cCBhcmcyOgot
ICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6Q2FsbGVlLCBy
ZWdUMSk7Ci0KICAgICAvLyBTZXR1cCBhcmcxOgotICAgIG1vdmUoY2FsbEZyYW1lUmVnaXN0ZXIs
IHJlZ1QwKTsKLQotICAgIC8vIFNldHVwIGFyZzQ6IFRoaXMgaXMgYSBwbGFpbiBoYWNrCi0gICAg
bW92ZShzdGFja1BvaW50ZXJSZWdpc3RlciwgQVJNUmVnaXN0ZXJzOjpyMyk7CisgICAgc3dhcChj
YWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwogCiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBP
QkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSksIHJlZ1QzKTsKICAgICBj
YWxsKEFkZHJlc3MocmVnVDMsIGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uKSk7CkBAIC00ODIs
NDggKzM3NSwyMCBAQCBKSVQ6OkxhYmVsIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDCiAj
ZW5kaWYgLy8gT1MoV0lOQ0UpCiAKICNlbGlmIENQVShNSVBTKQotICAgIGVtaXRHZXRGcm9tQ2Fs
bEZyYW1lSGVhZGVyMzIoUmVnaXN0ZXJGaWxlOjpBcmd1bWVudENvdW50LCByZWdUMCk7Ci0KICAg
ICAvLyBBbGxvY2F0ZSBzdGFjayBzcGFjZSBmb3Igb3VyIGFyZ2xpc3QKICAgICBDT01QSUxFX0FT
U0VSVCghKHNpemVvZihBcmdMaXN0KSAmIDB4NyksIEFyZ0xpc3Rfc2hvdWxkX2J5XzhieXRlX2Fs
aWduZWQpOwogICAgIHN1YlB0cihJbW0zMihzaXplb2YoQXJnTGlzdCkgKyAyNCksIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKIAotICAgIC8vIFNldCB1cCBhcmd1bWVudHMKLSAgICBzdWJQdHIoSW1t
MzIoMSksIHJlZ1QwKTsgLy8gRG9uJ3QgaW5jbHVkZSAndGhpcycgaW4gYXJnY291bnQKLQotICAg
IC8vIFB1c2ggYXJnY291bnQgdG8gMjQgKyBvZmZzZXQoJHNwKQotICAgIHN0b3JlUHRyKHJlZ1Qw
LCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCAyNCArIE9CSkVDVF9PRkZTRVRPRihBcmdM
aXN0LCBtX2FyZ0NvdW50KSkpOwotCi0gICAgLy8gQ2FsY3VsYXRlIHRoZSBzdGFydCBvZiB0aGUg
Y2FsbGZyYW1lIGhlYWRlciwgYW5kIHN0b3JlIGluIHJlZ1QxCi0gICAgbW92ZShjYWxsRnJhbWVS
ZWdpc3RlciwgcmVnVDEpOwotICAgIHN1YjMyKEltbTMyKFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1l
SGVhZGVyU2l6ZSAqIChpbnQzMl90KXNpemVvZihSZWdpc3RlcikpLCByZWdUMSk7Ci0KLSAgICAv
LyBDYWxjdWxhdGUgc3RhcnQgb2YgYXJndW1lbnRzIGFzIGNhbGxmcmFtZSBoZWFkZXIgLSBzaXpl
b2YoUmVnaXN0ZXIpICogYXJnY291bnQgKHJlZ1QxKQotICAgIG11bDMyKEltbTMyKHNpemVvZihS
ZWdpc3RlcikpLCByZWdUMCwgcmVnVDApOwotICAgIHN1YlB0cihyZWdUMCwgcmVnVDEpOwotCi0g
ICAgLy8gcHVzaCBwb2ludGVyIHRvIGFyZ3VtZW50cyB0byAyNCArIG9mZnNldCgkc3ApCi0gICAg
c3RvcmVQdHIocmVnVDEsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIDI0ICsgT0JKRUNU
X09GRlNFVE9GKEFyZ0xpc3QsIG1fYXJncykpKTsKLQotICAgIC8vIFNldHVwIGFyZzM6IHJlZ1Qx
IGN1cnJlbnRseSBwb2ludHMgdG8gdGhlIGZpcnN0IGFyZ3VtZW50LCByZWdUMS1zaXplb2YoUmVn
aXN0ZXIpIHBvaW50cyB0byAndGhpcycKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIC0oaW50
MzJfdClzaXplb2YoUmVnaXN0ZXIpKSwgTUlQU1JlZ2lzdGVyczo6YTMpOwotCi0gICAgLy8gU2V0
dXAgYXJnMjoKLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZpbGU6
OkNhbGxlZSwgTUlQU1JlZ2lzdGVyczo6YTIpOwotCiAgICAgLy8gU2V0dXAgYXJnMToKICAgICBt
b3ZlKGNhbGxGcmFtZVJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJzOjphMSk7CiAKLSAgICAvLyBTZXR1
cCBhcmc0OiBBcmdMaXN0IGlzIHBhc3NlZCBieSByZWZlcmVuY2UuICBBdCAxNigkc3ApLCBzdG9y
ZSAoJHNwICsgMjQpCi0gICAgYWRkUHRyKEltbTMyKDI0KSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIs
IHJlZ1QyKTsKLSAgICBzdG9yZVB0cihyZWdUMiwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rl
ciwgMTYpKTsKLQogICAgIC8vIFNldHVwIGFyZzAgYXMgMjAoJHNwKSB0byBob2xkIHRoZSByZXR1
cm5lZCBzdHJ1Y3R1cmUuCiAgICAgQVNTRVJUKHNpemVvZihKU1ZhbHVlKSA9PSA0KTsKICAgICBh
ZGRQdHIoSW1tMzIoMjApLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6YTAp
OwogCiAgICAgLy8gQ2FsbAogICAgIGxvYWRQdHIoQWRkcmVzcyhNSVBTUmVnaXN0ZXJzOjphMiwg
T0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fZXhlY3V0YWJsZSkpLCByZWdUMik7CisgICAg
bW92ZShyZWdUMCwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIGNhbGwoQWRkcmVzcyhyZWdUMiwg
ZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24pKTsKIAogICAgIC8vIEdldCByZXR1cm5lZCB2YWx1
ZSBmcm9tIDAoJHYwKSB3aGljaCBpcyB0aGUgc2FtZSBhcyAyMCgkc3ApCkBAIC01NDIsMjYgKzQw
NywxNyBAQCBKSVQ6OkxhYmVsIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDCiAgICAgbG9h
ZFB0cigmKGdsb2JhbERhdGEtPmV4Y2VwdGlvbiksIHJlZ1QyKTsKICAgICBKdW1wIGV4Y2VwdGlv
bkhhbmRsZXIgPSBicmFuY2hUZXN0UHRyKE5vblplcm8sIHJlZ1QyKTsKIAotICAgIC8vIEdyYWIg
dGhlIHJldHVybiBhZGRyZXNzLgotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJl
Z2lzdGVyRmlsZTo6UmV0dXJuUEMsIHJlZ1QxKTsKLSAgICAKLSAgICAvLyBSZXN0b3JlIG91ciBj
YWxsZXIncyAiciIuCi0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJG
aWxlOjpDYWxsZXJGcmFtZSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgIAogICAgIC8vIFJldHVy
bi4KLSAgICByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihyZWdUMSk7CiAgICAgcmV0
KCk7CiAKICAgICAvLyBIYW5kbGUgYW4gZXhjZXB0aW9uCiAgICAgZXhjZXB0aW9uSGFuZGxlci5s
aW5rKHRoaXMpOwogICAgIC8vIEdyYWIgdGhlIHJldHVybiBhZGRyZXNzLgotICAgIGVtaXRHZXRG
cm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6UmV0dXJuUEMsIHJlZ1QxKTsKKyAg
ICBwZWVrKHJlZ1QxKTsKICAgICBtb3ZlKEltbVB0cigmZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uTG9j
YXRpb24pLCByZWdUMik7CiAgICAgc3RvcmVQdHIocmVnVDEsIHJlZ1QyKTsKLSAgICBtb3ZlKElt
bVB0cihGdW5jdGlvblB0cihjdGlWTVRocm93VHJhbXBvbGluZSkudmFsdWUoKSksIHJlZ1QyKTsK
LSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZpbGU6OkNhbGxlckZy
YW1lLCBjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgcG9rZShjYWxsRnJhbWVSZWdpc3RlciwgT0JK
RUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBjYWxsRnJhbWUpIC8gc2l6ZW9mICh2
b2lkKikpOwotICAgIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKHJlZ1QyKTsKKyAg
ICBwb2tlKGNhbGxGcmFtZVJlZ2lzdGVyLCAxICsgT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRT
dGFja0ZyYW1lLCBjYWxsRnJhbWUpIC8gc2l6ZW9mICh2b2lkKikpOworICAgIHBva2UoSW1tUHRy
KEZ1bmN0aW9uUHRyKGN0aVZNVGhyb3dUcmFtcG9saW5lKS52YWx1ZSgpKSk7CiAgICAgcmV0KCk7
CiAKICAgICByZXR1cm4gbmF0aXZlQ2FsbFRodW5rOwpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0
L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMu
Y3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE4MDgsNyArMTgwOCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9O
KHZvaWQqLCBvcF9jYWxsX2ppdEMKICAgICBBU1NFUlQoc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNh
bGxlZSgpLT5nZXRDYWxsRGF0YShjYWxsRGF0YSkgPT0gQ2FsbFR5cGVKUyk7CiAjZW5kaWYKIAot
ICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNhbGxlZSgp
OworICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gYXNGdW5jdGlvbihzdGFja0ZyYW1lLmNhbGxG
cmFtZS0+Y2FsbGVlKCkpOwogICAgIEFTU0VSVCghZnVuY3Rpb24tPmlzSG9zdEZ1bmN0aW9uKCkp
OwogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGZ1bmN0aW9uLT5qc0V4ZWN1
dGFibGUoKTsKICAgICBTY29wZUNoYWluTm9kZSogY2FsbERhdGFTY29wZUNoYWluID0gZnVuY3Rp
b24tPnNjb3BlKCkubm9kZSgpOwpAQCAtMTgyMywxMCArMTgyMywxMCBAQCBERUZJTkVfU1RVQl9G
VU5DVElPTih2b2lkKiwgb3BfY29uc3RydWN0CiAKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAg
Q29uc3RydWN0RGF0YSBjb25zdHJ1Y3REYXRhOwotICAgIEFTU0VSVChzdGFja0ZyYW1lLmNhbGxG
cmFtZS0+Y2FsbGVlKCktPmdldENvbnN0cnVjdERhdGEoY29uc3RydWN0RGF0YSkgPT0gQ29uc3Ry
dWN0VHlwZUpTKTsKKyAgICBBU1NFUlQoYXNGdW5jdGlvbihzdGFja0ZyYW1lLmNhbGxGcmFtZS0+
Y2FsbGVlKCkpLT5nZXRDb25zdHJ1Y3REYXRhKGNvbnN0cnVjdERhdGEpID09IENvbnN0cnVjdFR5
cGVKUyk7CiAjZW5kaWYKIAotICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gc3RhY2tGcmFtZS5j
YWxsRnJhbWUtPmNhbGxlZSgpOworICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gYXNGdW5jdGlv
bihzdGFja0ZyYW1lLmNhbGxGcmFtZS0+Y2FsbGVlKCkpOwogICAgIEFTU0VSVCghZnVuY3Rpb24t
PmlzSG9zdEZ1bmN0aW9uKCkpOwogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9
IGZ1bmN0aW9uLT5qc0V4ZWN1dGFibGUoKTsKICAgICBTY29wZUNoYWluTm9kZSogY2FsbERhdGFT
Y29wZUNoYWluID0gZnVuY3Rpb24tPnNjb3BlKCkubm9kZSgpOwpAQCAtMTg0MCwxMCArMTg0MCwx
MCBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkKiwgb3BfY2FsbF9hcml0CiAgICAgU1RVQl9J
TklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUg
PSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKLSAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBjYWxsRnJh
bWUtPmNhbGxlZSgpOworICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGFzRnVuY3Rpb24oY2FsbEZy
YW1lLT5jYWxsZWUoKSk7CiAgICAgQVNTRVJUKCFjYWxsZWUtPmlzSG9zdEZ1bmN0aW9uKCkpOwog
ICAgIENvZGVCbG9jayogbmV3Q29kZUJsb2NrID0gJmNhbGxlZS0+anNFeGVjdXRhYmxlKCktPmdl
bmVyYXRlZEJ5dGVjb2RlRm9yQ2FsbCgpOwotICAgIGludCBhcmdDb3VudCA9IGNhbGxGcmFtZS0+
YXJndW1lbnRDb3VudCgpOworICAgIGludCBhcmdDb3VudCA9IGNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMoKTsKIAogICAgIEFTU0VSVChhcmdDb3VudCAhPSBuZXdDb2RlQmxv
Y2stPm1fbnVtUGFyYW1ldGVycyk7CiAKQEAgLTE4ODQsNyArMTg4NCw3IEBAIERFRklORV9TVFVC
X0ZVTkNUSU9OKHZvaWQqLCBvcF9jYWxsX2FyaXQKIAogICAgIGNhbGxGcmFtZSA9IENhbGxGcmFt
ZTo6Y3JlYXRlKHIpOwogICAgIGNhbGxGcmFtZS0+c2V0Q2FsbGVyRnJhbWUob2xkQ2FsbEZyYW1l
KTsKLSAgICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50Q291bnQoYXJnQ291bnQpOworICAgIGNhbGxG
cmFtZS0+c2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoYXJnQ291bnQpOwogICAgIGNhbGxG
cmFtZS0+c2V0Q2FsbGVlKGNhbGxlZSk7CiAgICAgY2FsbEZyYW1lLT5zZXRTY29wZUNoYWluKGNh
bGxlZS0+c2NvcGUoKS5ub2RlKCkpOwogCkBAIC0xODk3LDEwICsxODk3LDEwIEBAIERFRklORV9T
VFVCX0ZVTkNUSU9OKHZvaWQqLCBvcF9jb25zdHJ1Y3QKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJB
TUUoc3RhY2tGcmFtZSk7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUu
Y2FsbEZyYW1lOwotICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGNhbGxGcmFtZS0+Y2FsbGVlKCk7
CisgICAgSlNGdW5jdGlvbiogY2FsbGVlID0gYXNGdW5jdGlvbihjYWxsRnJhbWUtPmNhbGxlZSgp
KTsKICAgICBBU1NFUlQoIWNhbGxlZS0+aXNIb3N0RnVuY3Rpb24oKSk7CiAgICAgQ29kZUJsb2Nr
KiBuZXdDb2RlQmxvY2sgPSAmY2FsbGVlLT5qc0V4ZWN1dGFibGUoKS0+Z2VuZXJhdGVkQnl0ZWNv
ZGVGb3JDb25zdHJ1Y3QoKTsKLSAgICBpbnQgYXJnQ291bnQgPSBjYWxsRnJhbWUtPmFyZ3VtZW50
Q291bnQoKTsKKyAgICBpbnQgYXJnQ291bnQgPSBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKCk7CiAKICAgICBBU1NFUlQoYXJnQ291bnQgIT0gbmV3Q29kZUJsb2NrLT5tX251
bVBhcmFtZXRlcnMpOwogCkBAIC0xOTQxLDcgKzE5NDEsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElP
Tih2b2lkKiwgb3BfY29uc3RydWN0CiAKICAgICBjYWxsRnJhbWUgPSBDYWxsRnJhbWU6OmNyZWF0
ZShyKTsKICAgICBjYWxsRnJhbWUtPnNldENhbGxlckZyYW1lKG9sZENhbGxGcmFtZSk7Ci0gICAg
Y2FsbEZyYW1lLT5zZXRBcmd1bWVudENvdW50KGFyZ0NvdW50KTsKKyAgICBjYWxsRnJhbWUtPnNl
dEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGFyZ0NvdW50KTsKICAgICBjYWxsRnJhbWUtPnNl
dENhbGxlZShjYWxsZWUpOwogICAgIGNhbGxGcmFtZS0+c2V0U2NvcGVDaGFpbihjYWxsZWUtPnNj
b3BlKCkubm9kZSgpKTsKIApAQCAtMTk1NCw3ICsxOTU0LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJ
T04odm9pZCosIHZtX2xhenlMaW5rQwogewogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFj
a0ZyYW1lKTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1l
OwotICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGNhbGxGcmFtZS0+Y2FsbGVlKCk7CisgICAgSlNG
dW5jdGlvbiogY2FsbGVlID0gYXNGdW5jdGlvbihjYWxsRnJhbWUtPmNhbGxlZSgpKTsKICAgICBF
eGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGNhbGxlZS0+ZXhlY3V0YWJsZSgpOwogICAgIEpJ
VENvZGUmIGppdENvZGUgPSBleGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpOwog
ICAgIApAQCAtMTk2Niw3ICsxOTY2LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCosIHZt
X2xhenlMaW5rQwogICAgIGlmICghY2FsbExpbmtJbmZvLT5zZWVuT25jZSgpKQogICAgICAgICBj
YWxsTGlua0luZm8tPnNldFNlZW4oKTsKICAgICBlbHNlCi0gICAgICAgIEpJVDo6bGlua0NhbGwo
Y2FsbGVlLCBzdGFja0ZyYW1lLmNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCks
IGNvZGVCbG9jaywgaml0Q29kZSwgY2FsbExpbmtJbmZvLCBjYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnQoKSwgc3RhY2tGcmFtZS5nbG9iYWxEYXRhKTsKKyAgICAgICAgSklUOjpsaW5rQ2FsbChjYWxs
ZWUsIHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKSwgY29k
ZUJsb2NrLCBqaXRDb2RlLCBjYWxsTGlua0luZm8sIGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMoKSwgc3RhY2tGcmFtZS5nbG9iYWxEYXRhKTsKIAogICAgIHJldHVybiBqaXRD
b2RlLmFkZHJlc3NGb3JDYWxsKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKIH0KQEAgLTE5NzUsNyAr
MTk3NSw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQqLCB2bV9sYXp5TGlua0MKIHsKICAg
ICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CiAgICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKLSAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBj
YWxsRnJhbWUtPmNhbGxlZSgpOworICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGFzRnVuY3Rpb24o
Y2FsbEZyYW1lLT5jYWxsZWUoKSk7CiAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBj
YWxsZWUtPmV4ZWN1dGFibGUoKTsKICAgICBKSVRDb2RlJiBqaXRDb2RlID0gZXhlY3V0YWJsZS0+
Z2VuZXJhdGVkSklUQ29kZUZvckNvbnN0cnVjdCgpOwogICAgIApAQCAtMTk4Nyw3ICsxOTg3LDcg
QEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCosIHZtX2xhenlMaW5rQwogICAgIGlmICghY2Fs
bExpbmtJbmZvLT5zZWVuT25jZSgpKQogICAgICAgICBjYWxsTGlua0luZm8tPnNldFNlZW4oKTsK
ICAgICBlbHNlCi0gICAgICAgIEpJVDo6bGlua0NvbnN0cnVjdChjYWxsZWUsIHN0YWNrRnJhbWUu
Y2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKSwgY29kZUJsb2NrLCBqaXRDb2Rl
LCBjYWxsTGlua0luZm8sIGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpLCBzdGFja0ZyYW1lLmds
b2JhbERhdGEpOworICAgICAgICBKSVQ6OmxpbmtDb25zdHJ1Y3QoY2FsbGVlLCBzdGFja0ZyYW1l
LmNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCksIGNvZGVCbG9jaywgaml0Q29k
ZSwgY2FsbExpbmtJbmZvLCBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCks
IHN0YWNrRnJhbWUuZ2xvYmFsRGF0YSk7CiAKICAgICByZXR1cm4gaml0Q29kZS5hZGRyZXNzRm9y
Q2FsbCgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiB9CkBAIC0yMDE5LDIyICsyMDE5LDEzIEBAIERF
RklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICAgICAgQ2FsbEZyYW1l
KiBwcmV2aW91c0NhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwogICAgICAgICBDYWxs
RnJhbWUqIGNhbGxGcmFtZSA9IENhbGxGcmFtZTo6Y3JlYXRlKHByZXZpb3VzQ2FsbEZyYW1lLT5y
ZWdpc3RlcnMoKSArIHJlZ2lzdGVyT2Zmc2V0KTsKIAotICAgICAgICBjYWxsRnJhbWUtPmluaXQo
MCwgc3RhdGljX2Nhc3Q8SW5zdHJ1Y3Rpb24qPigoU1RVQl9SRVRVUk5fQUREUkVTUykudmFsdWUo
KSksIHByZXZpb3VzQ2FsbEZyYW1lLT5zY29wZUNoYWluKCksIHByZXZpb3VzQ2FsbEZyYW1lLCAw
LCBhcmdDb3VudCwgMCk7CisgICAgICAgIGNhbGxGcmFtZS0+aW5pdCgwLCBzdGF0aWNfY2FzdDxJ
bnN0cnVjdGlvbio+KChTVFVCX1JFVFVSTl9BRERSRVNTKS52YWx1ZSgpKSwgcHJldmlvdXNDYWxs
RnJhbWUtPnNjb3BlQ2hhaW4oKSwgcHJldmlvdXNDYWxsRnJhbWUsIGFyZ0NvdW50LCBhc09iamVj
dChmdW5jVmFsKSk7CiAgICAgICAgIHN0YWNrRnJhbWUuY2FsbEZyYW1lID0gY2FsbEZyYW1lOwog
Ci0gICAgICAgIFJlZ2lzdGVyKiBhcmd2ID0gc3RhY2tGcmFtZS5jYWxsRnJhbWUtPnJlZ2lzdGVy
cygpIC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplIC0gYXJnQ291bnQ7Ci0gICAg
ICAgIEFyZ0xpc3QgYXJnTGlzdChhcmd2ICsgMSwgYXJnQ291bnQgLSAxKTsKLQogICAgICAgICBK
U1ZhbHVlIHJldHVyblZhbHVlOwogICAgICAgICB7CiAgICAgICAgICAgICBTYW1wbGluZ1Rvb2w6
Okhvc3RDYWxsUmVjb3JkIGNhbGxSZWNvcmQoQ1RJX1NBTVBMRVIpOwotCi0gICAgICAgICAgICAv
LyBGSVhNRTogQWxsIGhvc3QgbWV0aG9kcyBzaG91bGQgYmUgY2FsbGluZyB0b1RoaXNPYmplY3Qs
IGJ1dCB0aGlzIGlzIG5vdCBwcmVzZW50bHkgdGhlIGNhc2UuCi0gICAgICAgICAgICBKU1ZhbHVl
IHRoaXNWYWx1ZSA9IGFyZ3ZbMF0uanNWYWx1ZSgpOwotICAgICAgICAgICAgaWYgKHRoaXNWYWx1
ZSA9PSBqc051bGwoKSkKLSAgICAgICAgICAgICAgICB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPmds
b2JhbFRoaXNWYWx1ZSgpOwotCi0gICAgICAgICAgICByZXR1cm5WYWx1ZSA9IGNhbGxEYXRhLm5h
dGl2ZS5mdW5jdGlvbihjYWxsRnJhbWUsIGFzT2JqZWN0KGZ1bmNWYWwpLCB0aGlzVmFsdWUsIGFy
Z0xpc3QpOworICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rp
b24oY2FsbEZyYW1lKTsKICAgICAgICAgfQogICAgICAgICBzdGFja0ZyYW1lLmNhbGxGcmFtZSA9
IHByZXZpb3VzQ2FsbEZyYW1lOwogICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CkBAIC0y
NDI1LDcgKzI0MTYsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihpbnQsIG9wX2xvYWRfdmFyYXJn
CiAgICAgICAgICAgICBzdGFja0ZyYW1lLmdsb2JhbERhdGEtPmV4Y2VwdGlvbiA9IGNyZWF0ZVN0
YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpOwogICAgICAgICAgICAgVk1fVEhST1dfRVhDRVBU
SU9OKCk7CiAgICAgICAgIH0KLSAgICAgICAgaW50MzJfdCBleHBlY3RlZFBhcmFtcyA9IGNhbGxG
cmFtZS0+Y2FsbGVlKCktPmpzRXhlY3V0YWJsZSgpLT5wYXJhbWV0ZXJDb3VudCgpOworICAgICAg
ICBpbnQzMl90IGV4cGVjdGVkUGFyYW1zID0gYXNGdW5jdGlvbihjYWxsRnJhbWUtPmNhbGxlZSgp
KS0+anNFeGVjdXRhYmxlKCktPnBhcmFtZXRlckNvdW50KCk7CiAgICAgICAgIGludDMyX3QgaW5w
bGFjZUFyZ3MgPSBtaW4ocHJvdmlkZWRQYXJhbXMsIGV4cGVjdGVkUGFyYW1zKTsKICAgICAgICAg
CiAgICAgICAgIFJlZ2lzdGVyKiBpbnBsYWNlQXJnc0RzdCA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJz
KCkgKyBhcmdzT2Zmc2V0OwpAQCAtMzAxMiwxMCArMzAwMywxMCBAQCBERUZJTkVfU1RVQl9GVU5D
VElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAKICAgICBSZWdpc3RlciogbmV3Q2FsbEZyYW1lID0g
Y2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIHJlZ2lzdGVyT2Zmc2V0OwogICAgIFJlZ2lzdGVyKiBh
cmd2ID0gbmV3Q2FsbEZyYW1lIC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplIC0g
YXJnQ291bnQ7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBhcmd2WzBdLmpzVmFsdWUoKTsKKyAg
ICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IGFyZ3ZbMF0uanNWYWx1ZSgpOwogICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKS0+Z2xvYmFsT2JqZWN0
OwogCi0gICAgaWYgKHRoaXNWYWx1ZSA9PSBnbG9iYWxPYmplY3QgJiYgZnVuY1ZhbCA9PSBnbG9i
YWxPYmplY3QtPmV2YWxGdW5jdGlvbigpKSB7CisgICAgaWYgKGJhc2VWYWx1ZSA9PSBnbG9iYWxP
YmplY3QgJiYgZnVuY1ZhbCA9PSBnbG9iYWxPYmplY3QtPmV2YWxGdW5jdGlvbigpKSB7CiAgICAg
ICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWU7CiAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gaW50
ZXJwcmV0ZXItPmNhbGxFdmFsKGNhbGxGcmFtZSwgcmVnaXN0ZXJGaWxlLCBhcmd2LCBhcmdDb3Vu
dCwgcmVnaXN0ZXJPZmZzZXQsIGV4Y2VwdGlvblZhbHVlKTsKICAgICAgICAgaWYgKFVOTElLRUxZ
KGV4Y2VwdGlvblZhbHVlKSkgewpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmgJKHJldmlz
aW9uIDYwMzQxKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNpZm5kZWYgQXJnTGlzdF9oCiAjZGVmaW5lIEFyZ0xp
c3RfaAogCisjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXIuaCIKICNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgpAQCAt
MTg3LDYgKzE4OCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAg
ICAgICAgIAorICAgICAgICBBcmdMaXN0KEV4ZWNTdGF0ZSogZXhlYykKKyAgICAgICAgICAgIDog
bV9hcmdzKHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KCZleGVjW2V4ZWMtPmhvc3RUaGlzUmVn
aXN0ZXIoKSArIDFdKSkKKyAgICAgICAgICAgICwgbV9hcmdDb3VudChleGVjLT5hcmd1bWVudENv
dW50KCkpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgQXJnTGlzdChK
U1ZhbHVlKiBhcmdzLCB1bnNpZ25lZCBhcmdDb3VudCkKICAgICAgICAgICAgIDogbV9hcmdzKGFy
Z3MpCiAgICAgICAgICAgICAsIG1fYXJnQ291bnQoYXJnQ291bnQpCkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJndW1lbnRzLmgJKHJldmlzaW9uIDYwMzQxKQorKysgSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Bcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDEwICsxMTksMTAgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgQXJndW1lbnRzOjpnZXRBcmd1
bWVudHNEYXRhKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU0Z1bmN0aW9uKiYgZnVuY3Rpb24sIHB0
cmRpZmZfdCYgZmlyc3RQYXJhbWV0ZXJJbmRleCwgUmVnaXN0ZXIqJiBhcmd2LCBpbnQmIGFyZ2Mp
CiAgICAgewotICAgICAgICBmdW5jdGlvbiA9IGNhbGxGcmFtZS0+Y2FsbGVlKCk7CisgICAgICAg
IGZ1bmN0aW9uID0gYXNGdW5jdGlvbihjYWxsRnJhbWUtPmNhbGxlZSgpKTsKIAogICAgICAgICBp
bnQgbnVtUGFyYW1ldGVycyA9IGZ1bmN0aW9uLT5qc0V4ZWN1dGFibGUoKS0+cGFyYW1ldGVyQ291
bnQoKTsKLSAgICAgICAgYXJnYyA9IGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpOworICAgICAg
ICBhcmdjID0gY2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpOwogCiAgICAg
ICAgIGlmIChhcmdjIDw9IG51bVBhcmFtZXRlcnMpCiAgICAgICAgICAgICBhcmd2ID0gY2FsbEZy
YW1lLT5yZWdpc3RlcnMoKSAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIG51
bVBhcmFtZXRlcnM7CkBAIC0xNzQsOSArMTc0LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IDogSlNPYmplY3QoY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFyZ3VtZW50c1N0
cnVjdHVyZSgpKQogICAgICAgICAsIGQobmV3IEFyZ3VtZW50c0RhdGEpCiAgICAgewotICAgICAg
ICBBU1NFUlQoIWNhbGxGcmFtZS0+Y2FsbGVlKCktPmpzRXhlY3V0YWJsZSgpLT5wYXJhbWV0ZXJD
b3VudCgpKTsKKyAgICAgICAgQVNTRVJUKCFhc0Z1bmN0aW9uKGNhbGxGcmFtZS0+Y2FsbGVlKCkp
LT5qc0V4ZWN1dGFibGUoKS0+cGFyYW1ldGVyQ291bnQoKSk7CiAKLSAgICAgICAgdW5zaWduZWQg
bnVtQXJndW1lbnRzID0gY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgLSAxOworICAgICAgICB1
bnNpZ25lZCBudW1Bcmd1bWVudHMgPSBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKTsKIAogICAg
ICAgICBkLT5udW1QYXJhbWV0ZXJzID0gMDsKICAgICAgICAgZC0+bnVtQXJndW1lbnRzID0gbnVt
QXJndW1lbnRzOwpAQCAtMTk0LDcgKzE5NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAg
IGQtPmV4dHJhQXJndW1lbnRzID0gZXh0cmFBcmd1bWVudHM7CiAKLSAgICAgICAgZC0+Y2FsbGVl
ID0gY2FsbEZyYW1lLT5jYWxsZWUoKTsKKyAgICAgICAgZC0+Y2FsbGVlID0gYXNGdW5jdGlvbihj
YWxsRnJhbWUtPmNhbGxlZSgpKTsKICAgICAgICAgZC0+b3ZlcnJvZGVMZW5ndGggPSBmYWxzZTsK
ICAgICAgICAgZC0+b3ZlcnJvZGVDYWxsZWUgPSBmYWxzZTsKICAgICB9CkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NhbGxEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NhbGxEYXRhLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NhbGxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTcgKzI2LDE2IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ2FsbERhdGEuaCIKIAorI2luY2x1ZGUg
IkV4ZWN1dGFibGUuaCIKKyNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpTRnVu
Y3Rpb24uaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKIEpTVmFsdWUgY2FsbChFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIENhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBDYWxs
RGF0YSYgY2FsbERhdGEsIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQog
ewotICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUhvc3QpCi0gICAgICAgIHJldHVybiBjYWxs
RGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlYywgYXNPYmplY3QoZnVuY3Rpb25PYmplY3QpLCB0aGlz
VmFsdWUsIGFyZ3MpOwotICAgIEFTU0VSVChjYWxsVHlwZSA9PSBDYWxsVHlwZUpTKTsKLSAgICAv
LyBGSVhNRTogQ2FuIHRoaXMgYmUgZG9uZSBtb3JlIGVmZmljaWVudGx5IHVzaW5nIHRoZSBjYWxs
RGF0YT8KLSAgICByZXR1cm4gYXNGdW5jdGlvbihmdW5jdGlvbk9iamVjdCktPmNhbGwoZXhlYywg
dGhpc1ZhbHVlLCBhcmdzKTsKKyAgICBBU1NFUlQoY2FsbFR5cGUgPT0gQ2FsbFR5cGVKUyB8fCBj
YWxsVHlwZSA9PSBDYWxsVHlwZUhvc3QpOworICAgIHJldHVybiBleGVjLT5pbnRlcnByZXRlcigp
LT5leGVjdXRlQ2FsbChleGVjLCBhc09iamVjdChmdW5jdGlvbk9iamVjdCksIGNhbGxUeXBlLCBj
YWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzLCBleGVjLT5leGNlcHRpb25TbG90KCkpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FsbERhdGEu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRhLmgJKHJldmlz
aW9uIDYwMzQxKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBDYWxsVHlw
ZUpTCiAgICAgfTsKIAotICAgIHR5cGVkZWYgSlNWYWx1ZSAoSlNDX0hPU1RfQ0FMTCAqTmF0aXZl
RnVuY3Rpb24pKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmKTsKKyAgICB0eXBlZGVmIEpTVmFsdWUgKEpTQ19IT1NUX0NBTEwgKk5hdGl2ZUZ1
bmN0aW9uKShFeGVjU3RhdGUqKTsKIAogICAgIHVuaW9uIENhbGxEYXRhIHsKICAgICAgICAgc3Ry
dWN0IHsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmNwcAkocmV2
aXNpb24gNjAzNDEpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkNvbnN0cnVjdERhdGEuaCIKIAorI2luY2x1ZGUgIkV4ZWN1dGFibGUuaCIKKyNp
bmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKKyNpbmNsdWRl
ICJKU0dsb2JhbE9iamVjdC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMzQsOSArMzcsMjMg
QEAgSlNPYmplY3QqIGNvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTVgogewogICAgIGlmIChj
b25zdHJ1Y3RUeXBlID09IENvbnN0cnVjdFR5cGVIb3N0KQogICAgICAgICByZXR1cm4gY29uc3Ry
dWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlYywgYXNPYmplY3Qob2JqZWN0KSwgYXJncyk7CisK
ICAgICBBU1NFUlQoY29uc3RydWN0VHlwZSA9PSBDb25zdHJ1Y3RUeXBlSlMpOwotICAgIC8vIEZJ
WE1FOiBDYW4gdGhpcyBiZSBkb25lIG1vcmUgZWZmaWNpZW50bHkgdXNpbmcgdGhlIGNvbnN0cnVj
dERhdGE/Ci0gICAgcmV0dXJuIGFzRnVuY3Rpb24ob2JqZWN0KS0+Y29uc3RydWN0KGV4ZWMsIGFy
Z3MpOworICAgIEpTRnVuY3Rpb24qIGpzRnVuY3Rpb24gPSBhc0Z1bmN0aW9uKG9iamVjdCk7CisK
KyAgICBBU1NFUlQoIWpzRnVuY3Rpb24tPmlzSG9zdEZ1bmN0aW9uKCkpOworICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlOworICAgIEpTVmFsdWUgcHJvdG90eXBlID0ganNGdW5jdGlvbi0+Z2V0KGV4
ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUpOworICAgIGlmIChwcm90b3R5cGUu
aXNPYmplY3QoKSkKKyAgICAgICAgc3RydWN0dXJlID0gYXNPYmplY3QocHJvdG90eXBlKS0+aW5o
ZXJpdG9ySUQoKTsKKyAgICBlbHNlCisgICAgICAgIHN0cnVjdHVyZSA9IGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+ZW1wdHlPYmplY3RTdHJ1Y3R1cmUoKTsKKyAgICBKU09iamVjdCogdGhp
c09iaiA9IG5ldyAoZXhlYykgSlNPYmplY3Qoc3RydWN0dXJlKTsKKworICAgIEpTVmFsdWUgcmVz
dWx0ID0gZXhlYy0+aW50ZXJwcmV0ZXIoKS0+ZXhlY3V0ZUNvbnN0cnVjdChqc0Z1bmN0aW9uLT5q
c0V4ZWN1dGFibGUoKSwgZXhlYywganNGdW5jdGlvbiwgdGhpc09iaiwgYXJncywganNGdW5jdGlv
bi0+c2NvcGUoKS5ub2RlKCksIGV4ZWMtPmV4Y2VwdGlvblNsb3QoKSk7CisgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpIHx8ICFyZXN1bHQuaXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIHRo
aXNPYmo7CisgICAgcmV0dXJuIGFzT2JqZWN0KHJlc3VsdCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCShyZXZpc2lvbiA2
MDM0MSkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCiAj
aW5jbHVkZSAiRnVuY3Rpb25Qcm90b3R5cGUuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5o
IgorI2luY2x1ZGUgIkpTTm90QW5PYmplY3QuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgog
I2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgogI2luY2x1ZGUgIlBhcnNlci5oIgpAQCAtNDIs
MTEgKzQzLDExIEBAIHVzaW5nIG5hbWVzcGFjZSBVbmljb2RlOwogCiBuYW1lc3BhY2UgSlNDIHsK
IAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGNvbnN0cnVjdG9yLCBKU1ZhbHVlLCBjb25zdCBBcmdM
aXN0JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5j
YWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKTsKICAgICB1bnNpZ25lZCB2UENJbmRleCA9IGNvZGVC
bG9jay0+Ynl0ZWNvZGVPZmZzZXQoZXhlYywgZXhlYy0+cmV0dXJuUEMoKSk7Ci0gICAgZXhlYy0+
c2V0RXhjZXB0aW9uKGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGV4ZWMsIGNvbnN0cnVjdG9y
LCB2UENJbmRleCwgY29kZUJsb2NrKSk7CisgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGNyZWF0ZU5v
dEFDb25zdHJ1Y3RvckVycm9yKGV4ZWMsIGV4ZWMtPmNhbGxlZSgpLCB2UENJbmRleCwgY29kZUJs
b2NrKSk7CiAgICAgcmV0dXJuIEpTVmFsdWUoKTsKIH0KIApAQCAtMTY4LDEyICsxNjksNiBAQCBD
YWxsVHlwZSBKU0Z1bmN0aW9uOjpnZXRDYWxsRGF0YShDYWxsRGF0CiAgICAgcmV0dXJuIENhbGxU
eXBlSlM7CiB9CiAKLUpTVmFsdWUgSlNGdW5jdGlvbjo6Y2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQotewotICAgIEFTU0VSVCghaXNI
b3N0RnVuY3Rpb24oKSk7Ci0gICAgcmV0dXJuIGV4ZWMtPmludGVycHJldGVyKCktPmV4ZWN1dGVD
YWxsKGpzRXhlY3V0YWJsZSgpLCBleGVjLCB0aGlzLCB0aGlzVmFsdWUudG9UaGlzT2JqZWN0KGV4
ZWMpLCBhcmdzLCBzY29wZSgpLm5vZGUoKSwgZXhlYy0+ZXhjZXB0aW9uU2xvdCgpKTsKLX0KLQog
SlNWYWx1ZSBKU0Z1bmN0aW9uOjphcmd1bWVudHNHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIHNsb3RCYXNlLCBjb25zdCBJZGVudGlmaWVyJikKIHsKICAgICBKU0Z1bmN0aW9uKiB0aGlz
T2JqID0gYXNGdW5jdGlvbihzbG90QmFzZSk7CkBAIC0zMDEsMjEgKzI5Niw0IEBAIENvbnN0cnVj
dFR5cGUgSlNGdW5jdGlvbjo6Z2V0Q29uc3RydWN0RGEKICAgICByZXR1cm4gQ29uc3RydWN0VHlw
ZUpTOwogfQogCi1KU09iamVjdCogSlNGdW5jdGlvbjo6Y29uc3RydWN0KEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgQXJnTGlzdCYgYXJncykKLXsKLSAgICBBU1NFUlQoIWlzSG9zdEZ1bmN0aW9uKCkp
OwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlOwotICAgIEpTVmFsdWUgcHJvdG90eXBlID0gZ2V0
KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUpOwotICAgIGlmIChwcm90b3R5
cGUuaXNPYmplY3QoKSkKLSAgICAgICAgc3RydWN0dXJlID0gYXNPYmplY3QocHJvdG90eXBlKS0+
aW5oZXJpdG9ySUQoKTsKLSAgICBlbHNlCi0gICAgICAgIHN0cnVjdHVyZSA9IGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+ZW1wdHlPYmplY3RTdHJ1Y3R1cmUoKTsKLSAgICBKU09iamVjdCog
dGhpc09iaiA9IG5ldyAoZXhlYykgSlNPYmplY3Qoc3RydWN0dXJlKTsKLQotICAgIEpTVmFsdWUg
cmVzdWx0ID0gZXhlYy0+aW50ZXJwcmV0ZXIoKS0+ZXhlY3V0ZUNvbnN0cnVjdChqc0V4ZWN1dGFi
bGUoKSwgZXhlYywgdGhpcywgdGhpc09iaiwgYXJncywgc2NvcGUoKS5ub2RlKCksIGV4ZWMtPmV4
Y2VwdGlvblNsb3QoKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpIHx8ICFyZXN1bHQu
aXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIHRoaXNPYmo7Ci0gICAgcmV0dXJuIGFzT2JqZWN0
KHJlc3VsdCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDYwMzQxKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgY2xhc3MgSlNHbG9iYWxPYmplY3Q7CiAgICAgY2xhc3MgTmF0aXZlRXhlY3V0
YWJsZTsKIAotICAgIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25z
dHJ1Y3RvcihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsK
KyAgICBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3Io
RXhlY1N0YXRlKik7CiAKICAgICBjbGFzcyBKU0Z1bmN0aW9uIDogcHVibGljIEpTT2JqZWN0V2l0
aEdsb2JhbE9iamVjdCB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVQ7CkBAIC01MSw5ICs1MSw2
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIE5vbk51
bGxQYXNzUmVmUHRyPEZ1bmN0aW9uRXhlY3V0YWJsZT4sIFNjb3BlQ2hhaW5Ob2RlKik7CiAgICAg
ICAgIHZpcnR1YWwgfkpTRnVuY3Rpb24oKTsKIAotICAgICAgICBKU09iamVjdCogY29uc3RydWN0
KEV4ZWNTdGF0ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLSAgICAgICAgSlNWYWx1ZSBjYWxsKEV4ZWNT
dGF0ZSosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci0KICAgICAgICAgY29u
c3QgVVN0cmluZyYgbmFtZShFeGVjU3RhdGUqKTsKICAgICAgICAgY29uc3QgVVN0cmluZyBkaXNw
bGF5TmFtZShFeGVjU3RhdGUqKTsKICAgICAgICAgY29uc3QgVVN0cmluZyBjYWxjdWxhdGVkRGlz
cGxheU5hbWUoRXhlY1N0YXRlKik7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDcgKzEzMSw3IEBAIHZv
aWQgSlNHbG9iYWxPYmplY3Q6OmluaXQoSlNPYmplY3QqIHRoaXMKICAgICBkKCktPmdsb2JhbERh
dGEgPSBIZWFwOjpoZWFwKHRoaXMpLT5nbG9iYWxEYXRhKCk7CiAgICAgZCgpLT5nbG9iYWxTY29w
ZUNoYWluID0gU2NvcGVDaGFpbih0aGlzLCBkKCktPmdsb2JhbERhdGEuZ2V0KCksIHRoaXMsIHRo
aXNWYWx1ZSk7CiAKLSAgICBKU0dsb2JhbE9iamVjdDo6Z2xvYmFsRXhlYygpLT5pbml0KDAsIDAs
IGQoKS0+Z2xvYmFsU2NvcGVDaGFpbi5ub2RlKCksIENhbGxGcmFtZTo6bm9DYWxsZXIoKSwgMCwg
MCwgMCk7CisgICAgSlNHbG9iYWxPYmplY3Q6Omdsb2JhbEV4ZWMoKS0+aW5pdCgwLCAwLCBkKCkt
Pmdsb2JhbFNjb3BlQ2hhaW4ubm9kZSgpLCBDYWxsRnJhbWU6Om5vQ2FsbGVyKCksIDAsIDApOwog
CiAgICAgaWYgKEpTR2xvYmFsT2JqZWN0KiYgaGVhZE9iamVjdCA9IGhlYWQoKSkgewogICAgICAg
ICBkKCktPnByZXYgPSBoZWFkT2JqZWN0OwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm9wZXJ0eVNsb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
cGVydHlTbG90LmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Byb3BlcnR5U2xvdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDExICszNCw3IEBAIEpTVmFs
dWUgUHJvcGVydHlTbG90OjpmdW5jdGlvbkdldHRlcihFeGUKIAogICAgIENhbGxEYXRhIGNhbGxE
YXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gbV9kYXRhLmdldHRlckZ1bmMtPmdldENhbGxE
YXRhKGNhbGxEYXRhKTsKLSAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVIb3N0KQotICAgICAg
ICByZXR1cm4gY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWMsIG1fZGF0YS5nZXR0ZXJGdW5j
LCB0aGlzVmFsdWUoKSwgZXhlYy0+ZW1wdHlMaXN0KCkpOwotICAgIEFTU0VSVChjYWxsVHlwZSA9
PSBDYWxsVHlwZUpTKTsKLSAgICAvLyBGSVhNRTogQ2FuIHRoaXMgYmUgZG9uZSBtb3JlIGVmZmlj
aWVudGx5IHVzaW5nIHRoZSBjYWxsRGF0YT8KLSAgICByZXR1cm4gYXNGdW5jdGlvbihtX2RhdGEu
Z2V0dGVyRnVuYyktPmNhbGwoZXhlYywgdGhpc1ZhbHVlKCksIGV4ZWMtPmVtcHR5TGlzdCgpKTsK
KyAgICByZXR1cm4gY2FsbChleGVjLCBtX2RhdGEuZ2V0dGVyRnVuYywgY2FsbFR5cGUsIGNhbGxE
YXRhLCB0aGlzVmFsdWUoKSwgZXhlYy0+ZW1wdHlMaXN0KCkpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvZ2xvYmFsLXJlY3Vyc2lvbi1vbi1mdWxs
LXN0YWNrLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL2ds
b2JhbC1yZWN1cnNpb24tb24tZnVsbC1zdGFjay1leHBlY3RlZC50eHQJKHJldmlzaW9uIDYwMzQx
KQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9nbG9iYWwtcmVjdXJzaW9uLW9uLWZ1bGwtc3RhY2st
ZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMyBAQAotQ09OU09MRSBNRVNT
QUdFOiBsaW5lIDA6IFJhbmdlRXJyb3I6IE1heGltdW0gY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVk
LgorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDA6IAogVGhpcyB0ZXN0cyBnbG9iYWwgY29kZSByZWN1
cnNpb24gd2hlbiB0aGUgSlMgc3RhY2sgaXMgZnVsbC4KIFBBU1M6IEVudGVyaW5nIGdsb2JhbCBj
b2RlIHdpdGggYSBmdWxsIEpTIHN0YWNrIGRpZCBub3QgY3Jhc2gsIGFuZCBkaWQgbm90IGFsbG93
IGNvbnRpbnVlZCByZWN1cnNpb24uCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3htbGh0dHByZXF1
ZXN0L3htbGh0dHByZXF1ZXN0LXJlY3Vyc2l2ZS1zeW5jLWV2ZW50LWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0
LXJlY3Vyc2l2ZS1zeW5jLWV2ZW50LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNjAzNDEpCisrKyBM
YXlvdXRUZXN0cy9mYXN0L3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LXJlY3Vyc2l2ZS1z
eW5jLWV2ZW50LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKLUNP
TlNPTEUgTUVTU0FHRTogbGluZSAwOiBSYW5nZUVycm9yOiBNYXhpbXVtIGNhbGwgc3RhY2sgc2l6
ZSBleGNlZWRlZC4KLUNPTlNPTEUgTUVTU0FHRTogbGluZSAwOiBSYW5nZUVycm9yOiBNYXhpbXVt
IGNhbGwgc3RhY2sgc2l6ZSBleGNlZWRlZC4KLUNPTlNPTEUgTUVTU0FHRTogbGluZSAwOiBSYW5n
ZUVycm9yOiBNYXhpbXVtIGNhbGwgc3RhY2sgc2l6ZSBleGNlZWRlZC4KK0NPTlNPTEUgTUVTU0FH
RTogbGluZSAwOiAKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAwOiAKK0NPTlNPTEUgTUVTU0FHRTog
bGluZSAwOiAKIFRoaXMgdGVzdHMgdGhhdCBoYXZpbmcgaW5maW5pdGUgcmVjdXJzaW9uIGluIFhN
TEh0dHBSZXF1ZXN0IGV2ZW50IGhhbmRsZXIgZG9lcyBub3QgY3Jhc2guIAogUEFTUwogCkluZGV4
OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCShyZXZpc2lvbiA2MDM3MykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDEwLTA1LTI4ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJl
bkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgU2ltcGxpZmllZCB0aGUgaG9zdCBjYWxsaW5nIGNvbnZlbnRpb24uCisKKyAgICAgICAg
Q2hhbmdlZCB0aGVzZSByZXN1bHRzIHRvIGV4cGVjdCB0byBmYWlsIHRvIHN0cmluZ2lmeSB0aGVp
ciBleGNlcHRpb24KKyAgICAgICAgb2JqZWN0cyBpbiB0aGUgY2FzZSBvZiBzdGFjayBvdmVyZmxv
dy4gKFN0YW5kYXJkaXppbmcgdGhlIGNhbGxpbmcKKyAgICAgICAgY29udmVudGlvbiBoYXMgaW1w
bGljaXRseSBhZGRlZCBzdGFjayBvdmVyZmxvdyBjaGVja3MgdG8gc29tZSBwbGFjZXMKKyAgICAg
ICAgd2hlcmUgdGhleSB1c2VkIHRvIGJlIG1pc3NpbmcuKQorICAgICAgICAKKyAgICAgICAgSW4g
YSBmdXR1cmUgcGF0Y2gsIEkgcGxhbiB0byBpbXBsZW1lbnQgYSBtb3JlIHJlbGlhYmxlIHdheSB0
byBzdHJpbmdpZnkKKyAgICAgICAgZXhjZXB0aW9ucyB3aXRob3V0IGludm9raW5nIGEgSlMgZnVu
Y3Rpb24uIEZvciBub3csIHRob3VnaCwgaXQgc2VlbXMgYmVzdAorICAgICAgICB0byBtYXRjaCBv
dGhlciB0ZXN0IHJlc3VsdHMsIGluc3RlYWQgb2Ygc2lsZW50bHkgb3ZlcmZsb3dpbmcgdGhlIHN0
YWNrLgorCisgICAgICAgICogZmFzdC9qcy9nbG9iYWwtcmVjdXJzaW9uLW9uLWZ1bGwtc3RhY2st
ZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVl
c3QtcmVjdXJzaXZlLXN5bmMtZXZlbnQtZXhwZWN0ZWQudHh0OgorCiAyMDEwLTA1LTI4ICBDaGFu
ZyBTaHUgIDxDaGFuZy5TaHVAbm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5l
dGggUm9oZGUgQ2hyaXN0aWFuc2VuLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9nbG9iYWwt
cmVjdXJzaW9uLW9uLWZ1bGwtc3RhY2stZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvanMvZ2xvYmFsLXJlY3Vyc2lvbi1vbi1mdWxsLXN0YWNrLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gNjAzNDEpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL2dsb2JhbC1yZWN1cnNp
b24tb24tZnVsbC1zdGFjay1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwz
IEBACi1DT05TT0xFIE1FU1NBR0U6IGxpbmUgMDogUmFuZ2VFcnJvcjogTWF4aW11bSBjYWxsIHN0
YWNrIHNpemUgZXhjZWVkZWQuCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMDogCiBUaGlzIHRlc3Rz
IGdsb2JhbCBjb2RlIHJlY3Vyc2lvbiB3aGVuIHRoZSBKUyBzdGFjayBpcyBmdWxsLgogUEFTUzog
RW50ZXJpbmcgZ2xvYmFsIGNvZGUgd2l0aCBhIGZ1bGwgSlMgc3RhY2sgZGlkIG5vdCBjcmFzaCwg
YW5kIGRpZCBub3QgYWxsb3cgY29udGludWVkIHJlY3Vyc2lvbi4KSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtcmVjdXJzaXZlLXN5bmMtZXZlbnQt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QveG1saHR0cHJlcXVl
c3QveG1saHR0cHJlcXVlc3QtcmVjdXJzaXZlLXN5bmMtZXZlbnQtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiA2MDM0MSkKKysrIExheW91dFRlc3RzL2Zhc3QveG1saHR0cHJlcXVlc3QveG1saHR0cHJl
cXVlc3QtcmVjdXJzaXZlLXN5bmMtZXZlbnQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0xLDYgKzEsNiBAQAotQ09OU09MRSBNRVNTQUdFOiBsaW5lIDA6IFJhbmdlRXJyb3I6IE1heGlt
dW0gY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkLgotQ09OU09MRSBNRVNTQUdFOiBsaW5lIDA6IFJh
bmdlRXJyb3I6IE1heGltdW0gY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkLgotQ09OU09MRSBNRVNT
QUdFOiBsaW5lIDA6IFJhbmdlRXJyb3I6IE1heGltdW0gY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVk
LgorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDA6IAorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDA6IAor
Q09OU09MRSBNRVNTQUdFOiBsaW5lIDA6IAogVGhpcyB0ZXN0cyB0aGF0IGhhdmluZyBpbmZpbml0
ZSByZWN1cnNpb24gaW4gWE1MSHR0cFJlcXVlc3QgZXZlbnQgaGFuZGxlciBkb2VzIG5vdCBjcmFz
aC4gCiBQQVNTCiAK
</data>
<flag name="review"
          id="41946"
          type_id="1"
          status="+"
          setter="barraclough"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57380</attachid>
            <date>2010-05-28 14:26:52 -0700</date>
            <delta_ts>2010-05-28 14:33:54 -0700</delta_ts>
            <desc>PART TWO: Global search and replace</desc>
            <filename>ro1.txt</filename>
            <type>text/plain</type>
            <size>384420</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDYwMzczKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzgwIEBACisyMDEwLTA1LTI4ICBHZW9mZnJl
eSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgU2ltcGxpZmllZCB0aGUgaG9zdCBjYWxsaW5nIGNvbnZlbnRp
b24uCisgICAgICAgIAorICAgICAgICAxNyUgc3BlZWR1cCBvbiBob3N0IGZ1bmN0aW9uIGNhbGxz
LiBObyBjaGFuZ2Ugb24gU3VuU3BpZGVyLgorICAgICAgICAKKyAgICAgICAgQWxsIEpTIGNhbGxz
IChidXQgbm90IGNvbnN0cnVjdHMsIHlldCkgbm93IGdvIHRocm91Z2ggdGhlIG5vcm1hbCBKUwor
ICAgICAgICBjYWxsaW5nIGNvbnZlbnRpb24gdmlhIHRoZSBSZWdpc3RlckZpbGUuIEFzIGEgcmVz
dWx0LCB0aGUgaG9zdCBjYWxsaW5nCisgICAgICAgIGNvbnZlbnRpb24sIHdoaWNoIHVzZWQgdG8g
YmUgdGhpcworCisgICAgICAgICAgICBKU1ZhbHVlIChKU0NfSE9TVF9DQUxMICpOYXRpdmVGdW5j
dGlvbikoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYpCisgICAgICAgICAgICAKKyAgICAgICAgaXMgbm93IHRoaXMKKworICAgICAgICAgICAg
SlNWYWx1ZSAoSlNDX0hPU1RfQ0FMTCAqTmF0aXZlRnVuY3Rpb24pKEV4ZWNTdGF0ZSopCisgICAg
ICAgICAgICAKKyAgICAgICAgQ2FsbGVlLCAndGhpcycsIGFuZCBhcmd1bWVudCBhY2Nlc3MgYWxs
IGhhcGVuIHJlbGF0aXZlIHRvIHRoZSBFeGVjU3RhdGUqLAorICAgICAgICB3aGljaCBpcyBhIHBv
aW50ZXIgaW50byB0aGUgUmVnaXN0ZXJGaWxlLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRj
aCBjb21lcyBpbiB0d28gcGFydHMuCisgICAgICAgIAorICAgICAgICBQQVJUIE9ORTogRnVuY3Rp
b25hbCBjb2RlIGNoYW5nZXMuCisgICAgICAgIAorICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOiBE
aXNhYmxlZCBvcHRpbWl6ZWQgY2FsbHMgb24gcGxhdGZvcm1zIEkgZGlkbid0IHRlc3QuCisgICAg
ICAgIFdlIGNhbiByZS1lbmFibGUgb25jZSB3ZSB2ZXJpZnkgdGhhdCBob3N0IGNhbGxzIG9uIHRo
ZXNlIHBsYXRmb3JtcyBhcmUKKyAgICAgICAgY29ycmVjdC4KKworICAgICAgICAqIGRlYnVnZ2Vy
L0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKEpTQzo6RGVidWdnZXJDYWxsRnJhbWU6
OmZ1bmN0aW9uTmFtZSk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lOjpjYWxjdWxh
dGVkRnVuY3Rpb25OYW1lKTogVXBkYXRlZCBmb3IgY2hhbmdlIHRvCisgICAgICAgIEV4ZWNTdGF0
ZTo6Y2FsbGVlKCkuCisKKyAgICAgICAgKEpTQzo6RGVidWdnZXJDYWxsRnJhbWU6OnRoaXNPYmpl
Y3QpOiBVcGRhdGVkIGZvciByZW1vdmFsIG9mIEV4ZWNTdGF0ZTo6dGhpc1ZhbHVlKCkuCisKKyAg
ICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwOgorICAgICAgICAqIGludGVycHJldGVy
L0NhbGxGcmFtZS5oOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OmNhbGxlZSk6CisgICAgICAg
IChKU0M6OkV4ZWNTdGF0ZTo6c2NvcGVDaGFpbik6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6
aW5pdCk6IENoYW5nZWQgY2FsbGVlKCkgdG8gYmUgSlNPYmplY3QqIGluc3RlYWQgb2YKKyAgICAg
ICAgSlNGdW5jdGlvbiogLS0gbm93LCBpdCBtaWdodCBiZSBzb21lIG90aGVyIGNhbGxhYmxlIGhv
c3Qgb2JqZWN0LgorCisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6aG9zdFRoaXNSZWdpc3Rlcik6
CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6aG9zdFRoaXNWYWx1ZSk6CisgICAgICAgIChKU0M6
OkV4ZWNTdGF0ZTo6YXJndW1lbnRDb3VudCk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OmFyZ3Vt
ZW50KToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpzZXRBcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6c2V0Q2FsbGVlKTogQWRkZWQgY29udmVu
aWVudCBhY2Nlc3NvcnMgZm9yIGFyZ3VtZW50cworICAgICAgICBmcm9tIHdpdGhpbiBhIGhvc3Qg
ZnVuY3Rpb24uIFJlbW92ZWQgdGhpc1ZhbHVlKCkgYmVjYXVzZSBpdCB3YXMgdG9vCisgICAgICAg
IHRlbXB0aW5nIHRvIHVzZSBpbmNvcnJlY3RseSwgYW5kIGl0IG9ubHkgaGFkIG9uZSBvciB0d28g
Y2xpZW50cywgYW55d2F5LgorCisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3Bw
OgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y2FsbEV2YWwpOiBVcGRhdGVkIGZvciByZW1v
dmFsIG9mIEV4ZWNTdGF0ZTo6dGhpc1ZhbHVlKCkuCisKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0
ZXI6OnRocm93RXhjZXB0aW9uKTogQmUgc3VyZSB0byBzaHJpbmsgdGhlIHJlZ2lzdGVyIGZpbGUK
KyAgICAgICAgYmVmb3JlIGludm9raW5nIHRoZSBleGNlcHRpb24gaGFuZGxlciwgdG8gcmVkdWNl
IHRoZSBjaGFuY2VzIHRoYXQgdGhlCisgICAgICAgIGhhbmRsZXIgd2lsbCByZS10aHJvdyBpbiB0
aGUgY2FzZSBvZiBzdGFjayBvdmVyZmxvdy4gKFJlLXRocm93aW5nIGlzIG5vdworICAgICAgICBt
b3JlIGxpa2VseSB0aGFuIGl0IHVzZWQgdG8gYmUsIHNpbmNlIHN0YW5kYXJkaXppbmcgdGhlIGNh
bGxpbmcgY29udmVudGlvbgorICAgICAgICBpbXBsaWNpdGx5IGFkZGVkIHN0YWNrIG92ZXJmbG93
IGNoZWNrcyB0byBzb21lIHBsYWNlcyB3aGVyZSB0aGV5IHVzZWQgdG8gYmUgbWlzc2luZy4pCisK
KyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGUpOiBDbGFyaWZpZWQgdGhlIHNjb3Bl
IG9mIER5bmFtaWNHbG9iYWxPYmplY3RTY29wZS4KKyAgICAgICAgVXBkYXRlZCBmb3IgQ2FsbEZy
YW1lOjppbml0IEFQSSBjaGFuZ2UuCisKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1
dGVDYWxsKTogQ2xhcmlmaWVkIHNjb3BlIG9mIER5bmFtaWNHbG9iYWxPYmplY3RTY29wZS4KKyAg
ICAgICAgVXBkYXRlZCBmb3IgQ2FsbEZyYW1lOjppbml0IEFQSSBjaGFuZ2UuIEFkZGVkIHN1cHBv
cnQgZm9yIGNhbGxpbmcgYSBob3N0CisgICAgICAgIGZ1bmN0aW9uLgorCisgICAgICAgIChKU0M6
OkludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KTogQ2xhcmlmaWVkIHNjb3BlIG9mIER5bmFt
aWNHbG9iYWxPYmplY3RTY29wZS4KKyAgICAgICAgVXBkYXRlZCBmb3IgQ2FsbEZyYW1lOjppbml0
IEFQSSBjaGFuZ2UuIAorCisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpwcmVwYXJlRm9yUmVw
ZWF0Q2FsbCk6IFVwZGF0ZWQgZm9yIENhbGxGcmFtZTo6aW5pdCBBUEkgY2hhbmdlLiAKKworICAg
ICAgICAoSlNDOjpJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUpOiBVcGRhdGVkIGZvciBDYWxs
RnJhbWU6OmluaXQgQVBJIGNoYW5nZS4KKyAgICAgICAgQWRkZWQgc29tZSBleHBsaWNpdCBKU1Zh
bHVlKEpTT2JqZWN0KikgaW5pdGlhbGl6YXRpb24sIHNpbmNlIHJlbGF4aW5nCisgICAgICAgIHRo
ZSBKU0Z1bmN0aW9uKiByZXN0cmljdGlvbiBvbiBjYWxsZWUgaGFzIG1hZGUgcmVnaXN0ZXIgdHlw
ZXMgbW9yZSBhbWJpZ3VvdXMuCisgICAgICAgIFJlbW92ZWQgdG9UaGlzT2JqZWN0KCkgY29udmVy
c2lvbiwgc2luY2UgYWxsIGNhbGxlZXMgZG8gaXQgdGhlbXNlbHZlcyBub3cuCisgICAgICAgIFVw
ZGF0ZWQgaG9zdCBmdW5jdGlvbiBjYWxsIGZvciBuZXcgaG9zdCBmdW5jdGlvbiBzaWduYXR1cmUu
IFVwZGF0ZWQgZm9yCisgICAgICAgIGNoYW5nZSB0byBFeGVjU3RhdGU6OmFyZ3VtZW50Q291bnQo
KSBBUEkuCisKKyAgICAgICAgKiBpbnRlcnByZXRlci9SZWdpc3Rlci5oOgorICAgICAgICAoSlND
OjpSZWdpc3Rlcjo6KToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXI6Om9wZXJhdG9yPSk6CisgICAg
ICAgIChKU0M6OlJlZ2lzdGVyOjpmdW5jdGlvbik6IENoYW5nZWQgY2FsbGVlKCkgdG8gYmUgSlNP
YmplY3QqIGluc3RlYWQgb2YKKyAgICAgICAgSlNGdW5jdGlvbiogLS0gbm93LCBpdCBtaWdodCBi
ZSBzb21lIG90aGVyIGNhbGxhYmxlIGhvc3Qgb2JqZWN0LgorCisgICAgICAgICogaml0L0pJVE9w
Y29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2Fs
bCk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKTogRGVsZXRlZCBhIGJ1bmNoIG9mIGNvZGUg
dGhhdAorICAgICAgICBzZXQgdXAgdGhlIGFyZ3VtZW50cyB0byBob3N0IGZ1bmN0aW9ucyAtLSBh
bGwgYnV0IG9uZSBvZiB0aGUgYXJndW1lbnRzCisgICAgICAgIGFyZSBnb25lIG5vdy4gVGhpcyBp
cyB0aGUgYWN0dWFsIG9wdGltaXphdGlvbi4KKworICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6
CisgICAgICAgIChKU0M6OkRFRklORV9TVFVCX0ZVTkNUSU9OKTogVXBkYXRlZCBmb3IgRXhlY1N0
YXRlIGFuZCBSZWdpc3RlciBBUEkKKyAgICAgICAgY2hhbmdlcyBub3RlZCBhYm92ZS4gUmVtb3Zl
ZCB0b1RoaXNPYmplY3QoKSBjb252ZXJzaW9uLCBzaW5jZSBhbGwgY2FsbGVlcworICAgICAgICBk
byBpdCB0aGVtc2VsdmVzIG5vdy4KKyAgICAgICAgCisgICAgICAgICogcnVudGltZS9BcmdMaXN0
Lmg6CisgICAgICAgIChKU0M6OkFyZ0xpc3Q6OkFyZ0xpc3QpOiBBcmdMaXN0IGlzIGdldHRpbmcg
Y2xvc2UgdG8gdW51c2VkLiBBZGRlZCBhCisgICAgICAgIHRlbXBvcmFyeSBzaGltIGZvciBjb252
ZXJ0aW5nIGZyb20gRXhlY1N0YXRlKiB0byBBcmdMaXN0IHdoZXJlIGl0J3Mgc3RpbGwKKyAgICAg
ICAgbmVjZXNzYXJ5LgorCisgICAgICAgICogcnVudGltZS9Bcmd1bWVudHMuaDoKKyAgICAgICAg
KEpTQzo6QXJndW1lbnRzOjpnZXRBcmd1bWVudHNEYXRhKToKKyAgICAgICAgKEpTQzo6QXJndW1l
bnRzOjpBcmd1bWVudHMpOiBVcGRhdGVkIGZvciBFeGVjU3RhdGUgYW5kIFJlZ2lzdGVyIEFQSQor
ICAgICAgICBjaGFuZ2VzIG5vdGVkIGFib3ZlLiAKKworICAgICAgICAqIHJ1bnRpbWUvQ2FsbERh
dGEuY3BwOgorICAgICAgICAoSlNDOjpjYWxsKTogQ2hhbmdlZCBjYWxsIGFsd2F5cyB0byBjYWxs
IEludGVycHJldGVyOjpleGVjdXRlQ2FsbCwgZXZlbgorICAgICAgICBmb3IgaG9zdCBmdW5jdGlv
bnMuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBub3JtYWwgY2FsbGluZyBjb252ZW50aW9uIGlzCisg
ICAgICAgIHNldCB1cCBpbiB0aGUgUmVnc2l0ZXJGaWxlIHdoZW4gY2FsbGluZyBmcm9tIEMrKyB0
byBob3N0IGZ1bmN0aW9uLgorCisgICAgICAgICogcnVudGltZS9DYWxsRGF0YS5oOiBDaGFuZ2Vk
IGhvc3QgZnVuY3Rpb24gc2lnbmF0dXJlIGFzIGRlc2NyaWJlZCBhYm92ZS4KKworICAgICAgICAq
IHJ1bnRpbWUvQ29uc3RydWN0RGF0YS5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdCk6IE1v
dmVkIEpTRnVuY3Rpb246OmNvbnN0cnVjdCBjb2RlIGhlcmUgc28gSSBjb3VsZCBuaXgKKyAgICAg
ICAgSlNGdW5jdGlvbjo6Y2FsbCBhbmQgSlNGdW5jdGlvbjo6Y2FsbC4gV2Ugd2FudCBhIEpTRnVu
Y3Rpb24tYWdub3N0aWMKKyAgICAgICAgd2F5IHRvIGNhbGwgYW5kIGNvbnN0cnVjdCwgc28gdGhh
dCBldmVyeXRoaW5nIHdvcmtzIG5hdHVyYWxseSBmb3Igbm9uLQorICAgICAgICBKU0Z1bmN0aW9u
IG9iamVjdHMuIAorCisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmNwcDoKKyAgICAgICAg
KEpTQzo6Y2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNGdW5jdGlvbi5oOiBVcGRhdGVkIGZvciBFeGVjU3RhdGUgYW5kIFJlZ2lzdGVyIEFQSSBjaGFu
Z2VzCisgICAgICAgIG5vdGVkIGFib3ZlLiBOaXhlZCBKU0Z1bmN0aW9uOjpjYWxsIGFuZCBKU0Z1
bmN0aW9uOjpjb25zdHJ1Y3QsIG5vdGVkIGFib3ZlLgorIAorICAgICAgICAqIHJ1bnRpbWUvSlNH
bG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6aW5pdCk6IERp
dHRvLgorCisgICAgICAgIFBBUlQgVFdPOiBHbG9iYWwgc2VhcmNoIGFuZCByZXBsYWNlLgorICAg
ICAgICAKKyAgICAgICAgSW4gdGhlIGFyZWFzIGJlbG93LCBJIHVzZWQgZ2xvYmFsIHNlYXJjaC1h
bmQtcmVwbGFjZSB0byBjaGFuZ2UKKyAgICAgICAgICAgIChFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKSA9PiAoRXhlY1N0YXRlKikKKyAgICAgICAgICAgIGFy
Z3Muc2l6ZSgpID0+IGV4ZWMtPmFyZ3VtZW50Q291bnQoKQorICAgICAgICAgICAgYXJncy5hdChp
KSA9PiBleGVjLT5hcmd1bWVudChpKQorCisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tGdW5jdGlv
bi5jcHA6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tGdW5jdGlvbjo6Y2FsbCk6CisgICAgICAg
ICogQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5oOgorICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2Jq
ZWN0Lmg6CisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaDoKKyAgICAg
ICAgKEpTQzo6OjpjYWxsKToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5leHA6CisgICAgICAg
ICoganNjLmNwcDoKKyAgICAgICAgKGZ1bmN0aW9uUHJpbnQpOgorICAgICAgICAoZnVuY3Rpb25E
ZWJ1Zyk6CisgICAgICAgIChmdW5jdGlvbkdDKToKKyAgICAgICAgKGZ1bmN0aW9uVmVyc2lvbik6
CisgICAgICAgIChmdW5jdGlvblJ1bik6CisgICAgICAgIChmdW5jdGlvbkxvYWQpOgorICAgICAg
ICAoZnVuY3Rpb25DaGVja1N5bnRheCk6CisgICAgICAgIChmdW5jdGlvblNldFNhbXBsaW5nRmxh
Z3MpOgorICAgICAgICAoZnVuY3Rpb25DbGVhclNhbXBsaW5nRmxhZ3MpOgorICAgICAgICAoZnVu
Y3Rpb25SZWFkbGluZSk6CisgICAgICAgIChmdW5jdGlvblF1aXQpOgorICAgICAgICAqIHJ1bnRp
bWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNhbGxBcnJheUNvbnN0cnVj
dG9yKToKKyAgICAgICAgKEpTQzo6YXJyYXlDb25zdHJ1Y3RvcklzQXJyYXkpOgorICAgICAgICAq
IHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVu
Y1RvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyk6
CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jSm9pbik6CisgICAgICAgIChKU0M6OmFycmF5
UHJvdG9GdW5jQ29uY2F0KToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNQb3ApOgorICAg
ICAgICAoSlNDOjphcnJheVByb3RvRnVuY1B1c2gpOgorICAgICAgICAoSlNDOjphcnJheVByb3Rv
RnVuY1JldmVyc2UpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NoaWZ0KToKKyAgICAg
ICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNTbGljZSk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9G
dW5jU29ydCk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jU3BsaWNlKToKKyAgICAgICAg
KEpTQzo6YXJyYXlQcm90b0Z1bmNVblNoaWZ0KToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1
bmNGaWx0ZXIpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY01hcCk6CisgICAgICAgIChK
U0M6OmFycmF5UHJvdG9GdW5jRXZlcnkpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY0Zv
ckVhY2gpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NvbWUpOgorICAgICAgICAoSlND
OjphcnJheVByb3RvRnVuY1JlZHVjZSk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jUmVk
dWNlUmlnaHQpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY0luZGV4T2YpOgorICAgICAg
ICAoSlNDOjphcnJheVByb3RvRnVuY0xhc3RJbmRleE9mKToKKyAgICAgICAgKiBydW50aW1lL0Jv
b2xlYW5Db25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNhbGxCb29sZWFuQ29uc3RydWN0
b3IpOgorICAgICAgICAqIHJ1bnRpbWUvQm9vbGVhblByb3RvdHlwZS5jcHA6CisgICAgICAgIChK
U0M6OmJvb2xlYW5Qcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAgIChKU0M6OmJvb2xlYW5Qcm90
b0Z1bmNWYWx1ZU9mKToKKyAgICAgICAgKiBydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHA6Cisg
ICAgICAgIChKU0M6OmNhbGxEYXRlKToKKyAgICAgICAgKEpTQzo6ZGF0ZVBhcnNlKToKKyAgICAg
ICAgKEpTQzo6ZGF0ZU5vdyk6CisgICAgICAgIChKU0M6OmRhdGVVVEMpOgorICAgICAgICAqIHJ1
bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OmZvcm1hdExvY2FsZURhdGUp
OgorICAgICAgICAoSlNDOjpmaWxsU3RydWN0dXJlc1VzaW5nVGltZUFyZ3MpOgorICAgICAgICAo
SlNDOjpmaWxsU3RydWN0dXJlc1VzaW5nRGF0ZUFyZ3MpOgorICAgICAgICAoSlNDOjpkYXRlUHJv
dG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9VVENTdHJpbmcp
OgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9JU09TdHJpbmcpOgorICAgICAgICAoSlND
OjpkYXRlUHJvdG9GdW5jVG9EYXRlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVu
Y1RvVGltZVN0cmluZyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNUb0xvY2FsZVN0cmlu
Zyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNUb0xvY2FsZURhdGVTdHJpbmcpOgorICAg
ICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9Mb2NhbGVUaW1lU3RyaW5nKToKKyAgICAgICAgKEpT
Qzo6ZGF0ZVByb3RvRnVuY0dldFRpbWUpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0
RnVsbFllYXIpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0VVRDRnVsbFllYXIpOgor
ICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9HTVRTdHJpbmcpOgorICAgICAgICAoSlNDOjpk
YXRlUHJvdG9GdW5jR2V0TW9udGgpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0VVRD
TW9udGgpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0RGF0ZSk6CisgICAgICAgIChK
U0M6OmRhdGVQcm90b0Z1bmNHZXRVVENEYXRlKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVu
Y0dldERheSk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRVVENEYXkpOgorICAgICAg
ICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0SG91cnMpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9G
dW5jR2V0VVRDSG91cnMpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0TWludXRlcyk6
CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRVVENNaW51dGVzKToKKyAgICAgICAgKEpT
Qzo6ZGF0ZVByb3RvRnVuY0dldFNlY29uZHMpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5j
R2V0VVRDU2Vjb25kcyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRNaWxsaVNlY29u
ZHMpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0VVRDTWlsbGlzZWNvbmRzKToKKyAg
ICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY0dldFRpbWV6b25lT2Zmc2V0KToKKyAgICAgICAgKEpT
Qzo6ZGF0ZVByb3RvRnVuY1NldFRpbWUpOgorICAgICAgICAoSlNDOjpzZXROZXdWYWx1ZUZyb21U
aW1lQXJncyk6CisgICAgICAgIChKU0M6OnNldE5ld1ZhbHVlRnJvbURhdGVBcmdzKToKKyAgICAg
ICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1NldE1pbGxpU2Vjb25kcyk6CisgICAgICAgIChKU0M6OmRh
dGVQcm90b0Z1bmNTZXRVVENNaWxsaXNlY29uZHMpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9G
dW5jU2V0U2Vjb25kcyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNTZXRVVENTZWNvbmRz
KToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1NldE1pbnV0ZXMpOgorICAgICAgICAoSlND
OjpkYXRlUHJvdG9GdW5jU2V0VVRDTWludXRlcyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1
bmNTZXRIb3Vycyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNTZXRVVENIb3Vycyk6Cisg
ICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNTZXREYXRlKToKKyAgICAgICAgKEpTQzo6ZGF0ZVBy
b3RvRnVuY1NldFVUQ0RhdGUpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jU2V0TW9udGgp
OgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jU2V0VVRDTW9udGgpOgorICAgICAgICAoSlND
OjpkYXRlUHJvdG9GdW5jU2V0RnVsbFllYXIpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5j
U2V0VVRDRnVsbFllYXIpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jU2V0WWVhcik6Cisg
ICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRZZWFyKToKKyAgICAgICAgKEpTQzo6ZGF0ZVBy
b3RvRnVuY1RvSlNPTik6CisgICAgICAgICogcnVudGltZS9FcnJvckNvbnN0cnVjdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6Y2FsbEVycm9yQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUv
RXJyb3JQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjplcnJvclByb3RvRnVuY1RvU3RyaW5n
KToKKyAgICAgICAgKiBydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAo
SlNDOjpjYWxsRnVuY3Rpb25Db25zdHJ1Y3Rvcik6CisgICAgICAgICogcnVudGltZS9GdW5jdGlv
blByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OmNhbGxGdW5jdGlvblByb3RvdHlwZSk6Cisg
ICAgICAgIChKU0M6OmZ1bmN0aW9uUHJvdG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpm
dW5jdGlvblByb3RvRnVuY0FwcGx5KToKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25Qcm90b0Z1bmND
YWxsKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcDoKKyAg
ICAgICAgKEpTQzo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6ZGVjb2RlKToKKyAgICAgICAgKEpT
Qzo6Z2xvYmFsRnVuY0V2YWwpOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jUGFyc2VJbnQpOgor
ICAgICAgICAoSlNDOjpnbG9iYWxGdW5jUGFyc2VGbG9hdCk6CisgICAgICAgIChKU0M6Omdsb2Jh
bEZ1bmNJc05hTik6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNJc0Zpbml0ZSk6CisgICAgICAg
IChKU0M6Omdsb2JhbEZ1bmNEZWNvZGVVUkkpOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jRGVj
b2RlVVJJQ29tcG9uZW50KToKKyAgICAgICAgKEpTQzo6Z2xvYmFsRnVuY0VuY29kZVVSSSk6Cisg
ICAgICAgIChKU0M6Omdsb2JhbEZ1bmNFbmNvZGVVUklDb21wb25lbnQpOgorICAgICAgICAoSlND
OjpnbG9iYWxGdW5jRXNjYXBlKToKKyAgICAgICAgKEpTQzo6Z2xvYmFsRnVuY1VuZXNjYXBlKToK
KyAgICAgICAgKEpTQzo6Z2xvYmFsRnVuY0pTQ1ByaW50KToKKyAgICAgICAgKiBydW50aW1lL0pT
R2xvYmFsT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgICogcnVudGltZS9KU09OT2JqZWN0LmNw
cDoKKyAgICAgICAgKEpTQzo6SlNPTlByb3RvRnVuY1BhcnNlKToKKyAgICAgICAgKEpTQzo6SlNP
TlByb3RvRnVuY1N0cmluZ2lmeSk6CisgICAgICAgICogcnVudGltZS9KU1N0cmluZy5oOgorICAg
ICAgICAqIHJ1bnRpbWUvTWF0aE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1
bmNBYnMpOgorICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5jQUNvcyk6CisgICAgICAgIChKU0M6
Om1hdGhQcm90b0Z1bmNBU2luKToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY0FUYW4pOgor
ICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5jQVRhbjIpOgorICAgICAgICAoSlNDOjptYXRoUHJv
dG9GdW5jQ2VpbCk6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNDb3MpOgorICAgICAgICAo
SlNDOjptYXRoUHJvdG9GdW5jRXhwKToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY0Zsb29y
KToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY0xvZyk6CisgICAgICAgIChKU0M6Om1hdGhQ
cm90b0Z1bmNNYXgpOgorICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5jTWluKToKKyAgICAgICAg
KEpTQzo6bWF0aFByb3RvRnVuY1Bvdyk6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNSYW5k
b20pOgorICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5jUm91bmQpOgorICAgICAgICAoSlNDOjpt
YXRoUHJvdG9GdW5jU2luKToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY1NxcnQpOgorICAg
ICAgICAoSlNDOjptYXRoUHJvdG9GdW5jVGFuKToKKyAgICAgICAgKiBydW50aW1lL05hdGl2ZUVy
cm9yQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjYWxsTmF0aXZlRXJyb3JDb25zdHJ1
Y3Rvcik6CisgICAgICAgICogcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAg
IChKU0M6OmNhbGxOdW1iZXJDb25zdHJ1Y3Rvcik6CisgICAgICAgICogcnVudGltZS9OdW1iZXJQ
cm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpudW1iZXJQcm90b0Z1bmNUb1N0cmluZyk6Cisg
ICAgICAgIChKU0M6Om51bWJlclByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKToKKyAgICAgICAgKEpT
Qzo6bnVtYmVyUHJvdG9GdW5jVmFsdWVPZik6CisgICAgICAgIChKU0M6Om51bWJlclByb3RvRnVu
Y1RvRml4ZWQpOgorICAgICAgICAoSlNDOjpudW1iZXJQcm90b0Z1bmNUb0V4cG9uZW50aWFsKToK
KyAgICAgICAgKEpTQzo6bnVtYmVyUHJvdG9GdW5jVG9QcmVjaXNpb24pOgorICAgICAgICAqIHJ1
bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjYWxsT2JqZWN0Q29u
c3RydWN0b3IpOgorICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3RvckdldFByb3RvdHlwZU9m
KToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IpOgorICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3RvckdldE93blByb3BlcnR5TmFtZXMp
OgorICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3RvcktleXMpOgorICAgICAgICAoSlNDOjpv
YmplY3RDb25zdHJ1Y3RvckRlZmluZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29u
c3RydWN0b3JEZWZpbmVQcm9wZXJ0aWVzKToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0
b3JDcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcDoKKyAgICAg
ICAgKEpTQzo6b2JqZWN0UHJvdG9GdW5jVmFsdWVPZik6CisgICAgICAgIChKU0M6Om9iamVjdFBy
b3RvRnVuY0hhc093blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG9GdW5jSXNQ
cm90b3R5cGVPZik6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY0RlZmluZUdldHRlcik6
CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY0RlZmluZVNldHRlcik6CisgICAgICAgIChK
U0M6Om9iamVjdFByb3RvRnVuY0xvb2t1cEdldHRlcik6CisgICAgICAgIChKU0M6Om9iamVjdFBy
b3RvRnVuY0xvb2t1cFNldHRlcik6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY1Byb3Bl
cnR5SXNFbnVtZXJhYmxlKToKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG9GdW5jVG9Mb2NhbGVT
dHJpbmcpOgorICAgICAgICAoSlNDOjpvYmplY3RQcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAg
ICogcnVudGltZS9PYmplY3RQcm90b3R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL09wZXJhdGlv
bnMuaDoKKyAgICAgICAgKEpTQzo6anNTdHJpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhw
Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjYWxsUmVnRXhwQ29uc3RydWN0b3IpOgor
ICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhw
T2JqZWN0Ojp0ZXN0KToKKyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0OjpleGVjKToKKyAgICAg
ICAgKEpTQzo6Y2FsbFJlZ0V4cE9iamVjdCk6CisgICAgICAgIChKU0M6OlJlZ0V4cE9iamVjdDo6
bWF0Y2gpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0Lmg6CisgICAgICAgICogcnVu
dGltZS9SZWdFeHBQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpyZWdFeHBQcm90b0Z1bmNU
ZXN0KToKKyAgICAgICAgKEpTQzo6cmVnRXhwUHJvdG9GdW5jRXhlYyk6CisgICAgICAgIChKU0M6
OnJlZ0V4cFByb3RvRnVuY0NvbXBpbGUpOgorICAgICAgICAoSlNDOjpyZWdFeHBQcm90b0Z1bmNU
b1N0cmluZyk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChKU0M6OnN0cmluZ0Zyb21DaGFyQ29kZVNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6c3Ry
aW5nRnJvbUNoYXJDb2RlKToKKyAgICAgICAgKEpTQzo6Y2FsbFN0cmluZ0NvbnN0cnVjdG9yKToK
KyAgICAgICAgKiBydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OnN0
cmluZ1Byb3RvRnVuY1JlcGxhY2UpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNUb1N0
cmluZyk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0NoYXJBdCk6CisgICAgICAgIChK
U0M6OnN0cmluZ1Byb3RvRnVuY0NoYXJDb2RlQXQpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90
b0Z1bmNDb25jYXQpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNJbmRleE9mKToKKyAg
ICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jTGFzdEluZGV4T2YpOgorICAgICAgICAoSlNDOjpz
dHJpbmdQcm90b0Z1bmNNYXRjaCk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1NlYXJj
aCk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1NsaWNlKToKKyAgICAgICAgKEpTQzo6
c3RyaW5nUHJvdG9GdW5jU3BsaXQpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTdWJz
dHIpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTdWJzdHJpbmcpOgorICAgICAgICAo
SlNDOjpzdHJpbmdQcm90b0Z1bmNUb0xvd2VyQ2FzZSk6CisgICAgICAgIChKU0M6OnN0cmluZ1By
b3RvRnVuY1RvVXBwZXJDYXNlKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jTG9jYWxl
Q29tcGFyZSk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0JpZyk6CisgICAgICAgIChK
U0M6OnN0cmluZ1Byb3RvRnVuY1NtYWxsKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5j
QmxpbmspOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNCb2xkKToKKyAgICAgICAgKEpT
Qzo6c3RyaW5nUHJvdG9GdW5jRml4ZWQpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNJ
dGFsaWNzKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jU3RyaWtlKToKKyAgICAgICAg
KEpTQzo6c3RyaW5nUHJvdG9GdW5jU3ViKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5j
U3VwKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jRm9udGNvbG9yKToKKyAgICAgICAg
KEpTQzo6c3RyaW5nUHJvdG9GdW5jRm9udHNpemUpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90
b0Z1bmNBbmNob3IpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNMaW5rKToKKyAgICAg
ICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jVHJpbSk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3Rv
RnVuY1RyaW1MZWZ0KToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jVHJpbVJpZ2h0KToK
KwogMjAxMC0wNS0yNyAgTHVpeiBBZ29zdGluaSAgPGx1aXouYWdvc3RpbmlAb3BlbmJvc3NhLm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IEphdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS5leHAJKHJldmlzaW9uIDYwMzQxKQorKysgSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNyArMTA5LDcgQEAgX19aTjNKU0Mx
MElkZW50aWZpZXI0ZnJvbUVQTlNfOUV4ZWNTdGF0ZQogX19aTjNKU0MxMElkZW50aWZpZXI1ZXF1
YWxFUEtON1dlYkNvcmUxMFN0cmluZ0ltcGxFUEtjCiBfX1pOM0pTQzEwSlNGdW5jdGlvbjRpbmZv
RQogX19aTjNKU0MxMEpTRnVuY3Rpb240bmFtZUVQTlNfOUV4ZWNTdGF0ZUUKLV9fWk4zSlNDMTBK
U0Z1bmN0aW9uQzFFUE5TXzlFeGVjU3RhdGVFUE5TXzE0SlNHbG9iYWxPYmplY3RFTjNXVEYxN05v
bk51bGxQYXNzUmVmUHRySU5TXzlTdHJ1Y3R1cmVFRUVpUktOU18xMElkZW50aWZpZXJFUEZOU183
SlNWYWx1ZUVTMl9QTlNfOEpTT2JqZWN0RVNDX1JLTlNfN0FyZ0xpc3RFRQorX19aTjNKU0MxMEpT
RnVuY3Rpb25DMUVQTlNfOUV4ZWNTdGF0ZUVQTlNfMTRKU0dsb2JhbE9iamVjdEVOM1dURjE3Tm9u
TnVsbFBhc3NSZWZQdHJJTlNfOVN0cnVjdHVyZUVFRWlSS05TXzEwSWRlbnRpZmllckVQRk5TXzdK
U1ZhbHVlRVMyX0UKIF9fWk4zSlNDMTB0aHJvd0Vycm9yRVBOU185RXhlY1N0YXRlRU5TXzlFcnJv
clR5cGVFCiBfX1pOM0pTQzEwdGhyb3dFcnJvckVQTlNfOUV4ZWNTdGF0ZUVOU185RXJyb3JUeXBl
RVBLYwogX19aTjNKU0MxMHRocm93RXJyb3JFUE5TXzlFeGVjU3RhdGVFTlNfOUVycm9yVHlwZUVS
S05TXzdVU3RyaW5nRQpAQCAtMTc0LDcgKzE3NCw3IEBAIF9fWk4zSlNDMTZKU1ZhcmlhYmxlT2Jq
ZWN0MTlnZXRPd25Qcm9wZXIKIF9fWk4zSlNDMTZ0b1VJbnQzMlNsb3dDYXNlRWRSYgogX19aTjNK
U0MxN0J5dGVjb2RlR2VuZXJhdG9yMjFzZXREdW1wc0dlbmVyYXRlZENvZGVFYgogX19aTjNKU0Mx
N1Byb3BlcnR5TmFtZUFycmF5M2FkZEVQTjdXZWJDb3JlMTBTdHJpbmdJbXBsRQotX19aTjNKU0Mx
N1Byb3RvdHlwZUZ1bmN0aW9uQzFFUE5TXzlFeGVjU3RhdGVFUE5TXzE0SlNHbG9iYWxPYmplY3RF
TjNXVEYxN05vbk51bGxQYXNzUmVmUHRySU5TXzlTdHJ1Y3R1cmVFRUVpUktOU18xMElkZW50aWZp
ZXJFUEZOU183SlNWYWx1ZUVTMl9QTlNfOEpTT2JqZWN0RVNDX1JLTlNfN0FyZ0xpc3RFRQorX19a
TjNKU0MxN1Byb3RvdHlwZUZ1bmN0aW9uQzFFUE5TXzlFeGVjU3RhdGVFUE5TXzE0SlNHbG9iYWxP
YmplY3RFTjNXVEYxN05vbk51bGxQYXNzUmVmUHRySU5TXzlTdHJ1Y3R1cmVFRUVpUktOU18xMElk
ZW50aWZpZXJFUEZOU183SlNWYWx1ZUVTMl9FCiBfX1pOM0pTQzE3Y29uc3RydWN0RnVuY3Rpb25F
UE5TXzlFeGVjU3RhdGVFUktOU183QXJnTGlzdEVSS05TXzEwSWRlbnRpZmllckVSS05TXzdVU3Ry
aW5nRWkKIF9fWk4zSlNDMThEZWJ1Z2dlckFjdGl2YXRpb25DMUVQTlNfOEpTT2JqZWN0RQogX19a
TjNKU0MxOFByb3BlcnR5RGVzY3JpcHRvcjExc2V0V3JpdGFibGVFYgpAQCAtMTg5LDEwICsxODks
MTEgQEAgX19aTjNKU0MxOFByb3BlcnR5RGVzY3JpcHRvcjlzZXRTZXR0ZXJFTgogX19aTjNKU0Mx
OWluaXRpYWxpemVUaHJlYWRpbmdFdgogX19aTjNKU0MyME1hcmtlZEFyZ3VtZW50QnVmZmVyMTBz
bG93QXBwZW5kRU5TXzdKU1ZhbHVlRQogX19aTjNKU0MyM0Fic3RyYWN0U2FtcGxpbmdDb3VudGVy
NGR1bXBFdgotX19aTjNKU0MyM29iamVjdFByb3RvRnVuY1RvU3RyaW5nRVBOU185RXhlY1N0YXRl
RVBOU184SlNPYmplY3RFTlNfN0pTVmFsdWVFUktOU183QXJnTGlzdEUKK19fWk4zSlNDMjNvYmpl
Y3RQcm90b0Z1bmNUb1N0cmluZ0VQTlNfOUV4ZWNTdGF0ZUUKIF9fWk4zSlNDMjNzZXRVcFN0YXRp
Y0Z1bmN0aW9uU2xvdEVQTlNfOUV4ZWNTdGF0ZUVQS05TXzlIYXNoRW50cnlFUE5TXzhKU09iamVj
dEVSS05TXzEwSWRlbnRpZmllckVSTlNfMTJQcm9wZXJ0eVNsb3RFCiBfX1pOM0pTQzI0SlNPYmpl
Y3RXaXRoR2xvYmFsT2JqZWN0QzJFUE5TXzE0SlNHbG9iYWxPYmplY3RFTjNXVEYxN05vbk51bGxQ
YXNzUmVmUHRySU5TXzlTdHJ1Y3R1cmVFRUUKIF9fWk4zSlNDMjRjcmVhdGVTdGFja092ZXJmbG93
RXJyb3JFUE5TXzlFeGVjU3RhdGVFCitfX1pOM0pTQzI0Y3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9y
RVBOU185RXhlY1N0YXRlRQogX19aTjNKU0MyNWV2YWx1YXRlSW5HbG9iYWxDYWxsRnJhbWVFUktO
U183VVN0cmluZ0VSTlNfN0pTVmFsdWVFUE5TXzE0SlNHbG9iYWxPYmplY3RFCiBfX1pOM0pTQzM1
Y3JlYXRlSW50ZXJydXB0ZWRFeGVjdXRpb25FeGNlcHRpb25FUE5TXzEySlNHbG9iYWxEYXRhRQog
X19aTjNKU0MzTmFORQpJbmRleDogSmF2YVNjcmlwdENvcmUvanNjLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIEphdmFTY3JpcHRD
b3JlL2pzYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDE5ICs3MSwxOSBAQCB1c2luZyBuYW1l
c3BhY2UgV1RGOwogc3RhdGljIHZvaWQgY2xlYW51cEdsb2JhbERhdGEoSlNHbG9iYWxEYXRhKik7
CiBzdGF0aWMgYm9vbCBmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGNvbnN0IFVTdHJpbmcm
IGZpbGVOYW1lLCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcik7CiAKLXN0YXRpYyBKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25QcmludChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25EZWJ1
ZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRp
YyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25HQyhFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25WZXJzaW9uKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJ1bihFeGVjU3Rh
dGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Mb2FkKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bkNoZWNrU3ludGF4KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlz
dCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJlYWRsaW5lKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIE5PX1JF
VFVSTl9XSVRIX1ZBTFVFIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblF1aXQoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJpbnQoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRGVidWcoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR0MoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uVmVyc2lvbihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SdW4oRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uTG9hZChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25DaGVja1N5bnRheChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SZWFkbGluZShFeGVjU3RhdGUqKTsKK3N0YXRpYyBO
T19SRVRVUk5fV0lUSF9WQUxVRSBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25RdWl0KEV4
ZWNTdGF0ZSopOwogCiAjaWYgRU5BQkxFKFNBTVBMSU5HX0ZMQUdTKQotc3RhdGljIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNldFNhbXBsaW5nRmxhZ3MoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uQ2xlYXJTYW1wbGluZ0ZsYWdzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvblNldFNhbXBsaW5nRmxhZ3MoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uQ2xlYXJTYW1wbGluZ0ZsYWdzKEV4ZWNTdGF0ZSopOwogI2VuZGlmCiAK
IHN0cnVjdCBTY3JpcHQgewpAQCAtMTcxLDEzICsxNzEsMTMgQEAgR2xvYmFsT2JqZWN0OjpHbG9i
YWxPYmplY3QoY29uc3QgVmVjdG9yPAogICAgIHB1dERpcmVjdChJZGVudGlmaWVyKGdsb2JhbEV4
ZWMoKSwgImFyZ3VtZW50cyIpLCBhcnJheSk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvblByaW50KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJpbnQoRXhlY1N0
YXRlKiBleGVjKQogewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmdzLnNpemUoKTsg
KytpKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4ZWMtPmFyZ3VtZW50Q291bnQo
KTsgKytpKSB7CiAgICAgICAgIGlmIChpKQogICAgICAgICAgICAgcHV0Y2hhcignICcpOwogCi0g
ICAgICAgIHByaW50ZigiJXMiLCBhcmdzLmF0KGkpLnRvU3RyaW5nKGV4ZWMpLlVURjhTdHJpbmco
KS5kYXRhKCkpOworICAgICAgICBwcmludGYoIiVzIiwgZXhlYy0+YXJndW1lbnQoaSkudG9TdHJp
bmcoZXhlYykuVVRGOFN0cmluZygpLmRhdGEoKSk7CiAgICAgfQogCiAgICAgcHV0Y2hhcignXG4n
KTsKQEAgLTE4NSwzMCArMTg1LDMwIEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblBy
aW50KEV4ZWMKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uRGVidWcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25EZWJ1
ZyhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgZnByaW50ZihzdGRlcnIsICItLT4gJXNcbiIsIGFy
Z3MuYXQoMCkudG9TdHJpbmcoZXhlYykuVVRGOFN0cmluZygpLmRhdGEoKSk7CisgICAgZnByaW50
ZihzdGRlcnIsICItLT4gJXNcbiIsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLlVU
RjhTdHJpbmcoKS5kYXRhKCkpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25HQyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
SlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25H
QyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKICAgICBleGVjLT5oZWFwKCktPmNvbGxlY3RBbGxHYXJiYWdlKCk7CiAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblZlcnNp
b24oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblZlcnNpb24oRXhlY1N0YXRlKikKIHsKICAgICAvLyBX
ZSBuZWVkIHRoaXMgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgTW96aWxsYSBK
UyB0ZXN0cyBidXQgZm9yIG5vdwogICAgIC8vIHdlIGRvbid0IGFjdHVhbGx5IGRvIGFueSB2ZXJz
aW9uLXNwZWNpZmljIGhhbmRsaW5nCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJ1bihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvblJ1bihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgU3RvcFdhdGNoIHN0b3BXYXRjaDsK
LSAgICBVU3RyaW5nIGZpbGVOYW1lID0gYXJncy5hdCgwKS50b1N0cmluZyhleGVjKTsKKyAgICBV
U3RyaW5nIGZpbGVOYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CiAgICAg
VmVjdG9yPGNoYXI+IHNjcmlwdDsKICAgICBpZiAoIWZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZp
bGUoZmlsZU5hbWUsIHNjcmlwdCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIEdl
bmVyYWxFcnJvciwgIkNvdWxkIG5vdCBvcGVuIGZpbGUuIik7CkBAIC0yMjIsMTEgKzIyMiw5IEBA
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJ1bihFeGVjU3QKICAgICByZXR1cm4ganNO
dW1iZXIoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIHN0b3BXYXRjaC5nZXRFbGFwc2VkTVMo
KSk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkxvYWQoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogbywgSlNWYWx1ZSB2LCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTG9hZChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgVU5V
U0VEX1BBUkFNKG8pOwotICAgIFVOVVNFRF9QQVJBTSh2KTsKLSAgICBVU3RyaW5nIGZpbGVOYW1l
ID0gYXJncy5hdCgwKS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIGZpbGVOYW1lID0gZXhl
Yy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CiAgICAgVmVjdG9yPGNoYXI+IHNjcmlwdDsK
ICAgICBpZiAoIWZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoZmlsZU5hbWUsIHNjcmlwdCkp
CiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIEdlbmVyYWxFcnJvciwgIkNvdWxkIG5v
dCBvcGVuIGZpbGUuIik7CkBAIC0yMzgsMTEgKzIzNiw5IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvbkxvYWQoRXhlY1MKICAgICByZXR1cm4gcmVzdWx0LnZhbHVlKCk7CiB9CiAKLUpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNoZWNrU3ludGF4KEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIG8sIEpTVmFsdWUgdiwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvbkNoZWNrU3ludGF4KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBV
TlVTRURfUEFSQU0obyk7Ci0gICAgVU5VU0VEX1BBUkFNKHYpOwotICAgIFVTdHJpbmcgZmlsZU5h
bWUgPSBhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgZmlsZU5hbWUgPSBl
eGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKTsKICAgICBWZWN0b3I8Y2hhcj4gc2NyaXB0
OwogICAgIGlmICghZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZShmaWxlTmFtZSwgc2NyaXB0
KSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgR2VuZXJhbEVycm9yLCAiQ291bGQg
bm90IG9wZW4gZmlsZS4iKTsKQEAgLTI1NSwyMCArMjUxLDIwIEBAIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvbkNoZWNrU3ludGEKIH0KIAogI2lmIEVOQUJMRShTQU1QTElOR19GTEFHUykK
LUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNldFNhbXBsaW5nRmxhZ3MoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TZXRTYW1wbGluZ0ZsYWdzKEV4ZWNTdGF0ZSogZXhlYykK
IHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJncy5zaXplKCk7ICsraSkgewotICAg
ICAgICB1bnNpZ25lZCBmbGFnID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGFyZ3MuYXQoaSkudG9O
dW1iZXIoZXhlYykpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGVjLT5hcmd1bWVu
dENvdW50KCk7ICsraSkgeworICAgICAgICB1bnNpZ25lZCBmbGFnID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGV4ZWMtPmFyZ3VtZW50KGkpLnRvTnVtYmVyKGV4ZWMpKTsKICAgICAgICAgaWYgKChm
bGFnID49IDEpICYmIChmbGFnIDw9IDMyKSkKICAgICAgICAgICAgIFNhbXBsaW5nRmxhZ3M6OnNl
dEZsYWcoZmxhZyk7CiAgICAgfQogICAgIHJldHVybiBqc051bGwoKTsKIH0KIAotSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ2xlYXJTYW1wbGluZ0ZsYWdzKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uQ2xlYXJTYW1wbGluZ0ZsYWdzKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJncy5zaXplKCk7ICsraSkgewotICAgICAgICB1
bnNpZ25lZCBmbGFnID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGFyZ3MuYXQoaSkudG9OdW1iZXIo
ZXhlYykpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGVjLT5hcmd1bWVudENvdW50
KCk7ICsraSkgeworICAgICAgICB1bnNpZ25lZCBmbGFnID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGV4ZWMtPmFyZ3VtZW50KGkpLnRvTnVtYmVyKGV4ZWMpKTsKICAgICAgICAgaWYgKChmbGFnID49
IDEpICYmIChmbGFnIDw9IDMyKSkKICAgICAgICAgICAgIFNhbXBsaW5nRmxhZ3M6OmNsZWFyRmxh
ZyhmbGFnKTsKICAgICB9CkBAIC0yNzYsNyArMjcyLDcgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uQ2xlYXJTYW1wbAogfQogI2VuZGlmCiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvblJlYWRsaW5lKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25z
dCBBcmdMaXN0JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJlYWRsaW5lKEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICBWZWN0b3I8Y2hhciwgMjU2PiBsaW5lOwogICAgIGludCBjOwpA
QCAtMjkwLDcgKzI4Niw3IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJlYWRsaW5l
KEUKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgbGluZS5kYXRhKCkpOwogfQogCi1KU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25RdWl0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBK
U1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblF1
aXQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIC8vIFRlY2huaWNhbGx5LCBkZXN0cm95aW5nIHRo
ZSBoZWFwIGluIHRoZSBtaWRkbGUgb2YgSlMgZXhlY3V0aW9uIGlzIGEgbm8tbm8sCiAgICAgLy8g
YnV0IHdlIHdhbnQgdG8gbWFpbnRhaW4gY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBNb3ppbGxhIHRl
c3Qgc3VpdGUsIHNvCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0Z1bmN0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0Z1bmN0aW9u
LmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0Z1
bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsMjIgKzQ3LDIyIEBAIEpTQ2FsbGJhY2tG
dW5jdGlvbjo6SlNDYWxsYmFja0Z1bmN0aW9uKEUKIHsKIH0KIAotSlNWYWx1ZSBKU0NhbGxiYWNr
RnVuY3Rpb246OmNhbGwoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogZnVuY3Rpb25PYmplY3Qs
IEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NhbGxi
YWNrRnVuY3Rpb246OmNhbGwoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTQ29udGV4dFJlZiBl
eGVjUmVmID0gdG9SZWYoZXhlYyk7Ci0gICAgSlNPYmplY3RSZWYgZnVuY3Rpb25SZWYgPSB0b1Jl
ZihmdW5jdGlvbk9iamVjdCk7Ci0gICAgSlNPYmplY3RSZWYgdGhpc09ialJlZiA9IHRvUmVmKHRo
aXNWYWx1ZS50b1RoaXNPYmplY3QoZXhlYykpOworICAgIEpTT2JqZWN0UmVmIGZ1bmN0aW9uUmVm
ID0gdG9SZWYoZXhlYy0+Y2FsbGVlKCkpOworICAgIEpTT2JqZWN0UmVmIHRoaXNPYmpSZWYgPSB0
b1JlZihleGVjLT5ob3N0VGhpc1ZhbHVlKCkudG9UaGlzT2JqZWN0KGV4ZWMpKTsKIAotICAgIGlu
dCBhcmd1bWVudENvdW50ID0gc3RhdGljX2Nhc3Q8aW50PihhcmdzLnNpemUoKSk7CisgICAgaW50
IGFyZ3VtZW50Q291bnQgPSBzdGF0aWNfY2FzdDxpbnQ+KGV4ZWMtPmFyZ3VtZW50Q291bnQoKSk7
CiAgICAgVmVjdG9yPEpTVmFsdWVSZWYsIDE2PiBhcmd1bWVudHMoYXJndW1lbnRDb3VudCk7CiAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmd1bWVudENvdW50OyBpKyspCi0gICAgICAgIGFyZ3Vt
ZW50c1tpXSA9IHRvUmVmKGV4ZWMsIGFyZ3MuYXQoaSkpOworICAgICAgICBhcmd1bWVudHNbaV0g
PSB0b1JlZihleGVjLCBleGVjLT5hcmd1bWVudChpKSk7CiAKICAgICBKU1ZhbHVlUmVmIGV4Y2Vw
dGlvbiA9IDA7CiAgICAgSlNWYWx1ZVJlZiByZXN1bHQ7CiAgICAgewogICAgICAgICBBUElDYWxs
YmFja1NoaW0gY2FsbGJhY2tTaGltKGV4ZWMpOwotICAgICAgICByZXN1bHQgPSBzdGF0aWNfY2Fz
dDxKU0NhbGxiYWNrRnVuY3Rpb24qPihmdW5jdGlvbk9iamVjdCktPm1fY2FsbGJhY2soZXhlY1Jl
ZiwgZnVuY3Rpb25SZWYsIHRoaXNPYmpSZWYsIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cy5kYXRh
KCksICZleGNlcHRpb24pOworICAgICAgICByZXN1bHQgPSBzdGF0aWNfY2FzdDxKU0NhbGxiYWNr
RnVuY3Rpb24qPih0b0pTKGZ1bmN0aW9uUmVmKSktPm1fY2FsbGJhY2soZXhlY1JlZiwgZnVuY3Rp
b25SZWYsIHRoaXNPYmpSZWYsIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cy5kYXRhKCksICZleGNl
cHRpb24pOwogICAgIH0KICAgICBpZiAoZXhjZXB0aW9uKQogICAgICAgICBleGVjLT5zZXRFeGNl
cHRpb24odG9KUyhleGVjLCBleGNlcHRpb24pKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9K
U0NhbGxiYWNrRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9BUEkvSlND
YWxsYmFja0Z1bmN0aW9uLmgJKHJldmlzaW9uIDYwMzQxKQorKysgSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ2FsbGJhY2tGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHBy
aXZhdGU6CiAgICAgdmlydHVhbCBDYWxsVHlwZSBnZXRDYWxsRGF0YShDYWxsRGF0YSYpOwogICAg
IHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5m
bzsgfQogCi0gICAgc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOworICAgIHN0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY2FsbChFeGVjU3RhdGUqKTsKIAogICAgIEpTT2JqZWN0Q2FsbEFzRnVu
Y3Rpb25DYWxsYmFjayBtX2NhbGxiYWNrOwogfTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9K
U0NhbGxiYWNrT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2Fs
bGJhY2tPYmplY3QuaAkocmV2aXNpb24gNjAzNDEpCisrKyBKYXZhU2NyaXB0Q29yZS9BUEkvSlND
YWxsYmFja09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODIsNyArMTgyLDcgQEAgcHJpdmF0
ZToKICAKICAgICBzdGF0aWMgSlNDYWxsYmFja09iamVjdCogYXNDYWxsYmFja09iamVjdChKU1Zh
bHVlKTsKICAKLSAgICBzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwoRXhlY1N0YXRl
KiwgSlNPYmplY3QqIGZ1bmN0aW9uT2JqZWN0LCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYpOworICAgIHN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbChFeGVjU3RhdGUq
KTsKICAgICBzdGF0aWMgSlNPYmplY3QqIGNvbnN0cnVjdChFeGVjU3RhdGUqLCBKU09iamVjdCog
Y29uc3RydWN0b3IsIGNvbnN0IEFyZ0xpc3QmKTsKICAgIAogICAgIHN0YXRpYyBKU1ZhbHVlIHN0
YXRpY1ZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImKTsK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMu
aAkocmV2aXNpb24gNjAzNDEpCisrKyBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVj
dEZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAi
RXJyb3IuaCIKICNpbmNsdWRlICJKU0NhbGxiYWNrRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0Ns
YXNzUmVmLmgiCisjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2Jq
ZWN0LmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCiAjaW5jbHVkZSAiSlNPYmplY3RSZWYuaCIKQEAg
LTM3MCwxOCArMzcxLDE4IEBAIENhbGxUeXBlIEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT46OmdldENh
bGwKIH0KIAogdGVtcGxhdGUgPGNsYXNzIEJhc2U+Ci1KU1ZhbHVlIEpTQ2FsbGJhY2tPYmplY3Q8
QmFzZT46OmNhbGwoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogZnVuY3Rpb25PYmplY3QsIEpT
VmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NhbGxiYWNr
T2JqZWN0PEJhc2U+OjpjYWxsKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU0NvbnRleHRSZWYg
ZXhlY1JlZiA9IHRvUmVmKGV4ZWMpOwotICAgIEpTT2JqZWN0UmVmIGZ1bmN0aW9uUmVmID0gdG9S
ZWYoZnVuY3Rpb25PYmplY3QpOwotICAgIEpTT2JqZWN0UmVmIHRoaXNPYmpSZWYgPSB0b1JlZih0
aGlzVmFsdWUudG9UaGlzT2JqZWN0KGV4ZWMpKTsKKyAgICBKU09iamVjdFJlZiBmdW5jdGlvblJl
ZiA9IHRvUmVmKGV4ZWMtPmNhbGxlZSgpKTsKKyAgICBKU09iamVjdFJlZiB0aGlzT2JqUmVmID0g
dG9SZWYoZXhlYy0+aG9zdFRoaXNWYWx1ZSgpLnRvVGhpc09iamVjdChleGVjKSk7CiAgICAgCi0g
ICAgZm9yIChKU0NsYXNzUmVmIGpzQ2xhc3MgPSBzdGF0aWNfY2FzdDxKU0NhbGxiYWNrT2JqZWN0
PEJhc2U+Kj4oZnVuY3Rpb25PYmplY3QpLT5jbGFzc1JlZigpOyBqc0NsYXNzOyBqc0NsYXNzID0g
anNDbGFzcy0+cGFyZW50Q2xhc3MpIHsKKyAgICBmb3IgKEpTQ2xhc3NSZWYganNDbGFzcyA9IHN0
YXRpY19jYXN0PEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT4qPih0b0pTKGZ1bmN0aW9uUmVmKSktPmNs
YXNzUmVmKCk7IGpzQ2xhc3M7IGpzQ2xhc3MgPSBqc0NsYXNzLT5wYXJlbnRDbGFzcykgewogICAg
ICAgICBpZiAoSlNPYmplY3RDYWxsQXNGdW5jdGlvbkNhbGxiYWNrIGNhbGxBc0Z1bmN0aW9uID0g
anNDbGFzcy0+Y2FsbEFzRnVuY3Rpb24pIHsKLSAgICAgICAgICAgIGludCBhcmd1bWVudENvdW50
ID0gc3RhdGljX2Nhc3Q8aW50PihhcmdzLnNpemUoKSk7CisgICAgICAgICAgICBpbnQgYXJndW1l
bnRDb3VudCA9IHN0YXRpY19jYXN0PGludD4oZXhlYy0+YXJndW1lbnRDb3VudCgpKTsKICAgICAg
ICAgICAgIFZlY3RvcjxKU1ZhbHVlUmVmLCAxNj4gYXJndW1lbnRzKGFyZ3VtZW50Q291bnQpOwog
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmd1bWVudENvdW50OyBpKyspCi0gICAg
ICAgICAgICAgICAgYXJndW1lbnRzW2ldID0gdG9SZWYoZXhlYywgYXJncy5hdChpKSk7CisgICAg
ICAgICAgICAgICAgYXJndW1lbnRzW2ldID0gdG9SZWYoZXhlYywgZXhlYy0+YXJndW1lbnQoaSkp
OwogICAgICAgICAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOwogICAgICAgICAgICAgSlNW
YWx1ZSByZXN1bHQ7CiAgICAgICAgICAgICB7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FycmF5Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyAr
MzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChBcnJh
eUNvbnN0cnVjdG9yKTsKICAgICAKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlD
b25zdHJ1Y3RvcklzQXJyYXkoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBB
cmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5Q29uc3RydWN0b3JJ
c0FycmF5KEV4ZWNTdGF0ZSopOwogCiBBcnJheUNvbnN0cnVjdG9yOjpBcnJheUNvbnN0cnVjdG9y
KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgTm9uTnVsbFBh
c3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUsIEFycmF5UHJvdG90eXBlKiBhcnJheVByb3Rv
dHlwZSwgU3RydWN0dXJlKiBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSkKICAgICA6IEludGVy
bmFsRnVuY3Rpb24oJmV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUs
IElkZW50aWZpZXIoZXhlYywgYXJyYXlQcm90b3R5cGUtPmNsYXNzSW5mbygpLT5jbGFzc05hbWUp
KQpAQCAtNzYsOCArNzYsOSBAQCBDb25zdHJ1Y3RUeXBlIEFycmF5Q29uc3RydWN0b3I6OmdldENv
bnN0CiAgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OwogfQogCi1zdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNhbGxBcnJheUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGljIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjYWxsQXJyYXlDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgQXJn
TGlzdCBhcmdzKGV4ZWMpOwogICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheVdpdGhTaXplUXVpcmso
ZXhlYywgYXJncyk7CiB9CiAKQEAgLTg5LDkgKzkwLDkgQEAgQ2FsbFR5cGUgQXJyYXlDb25zdHJ1
Y3Rvcjo6Z2V0Q2FsbERhdGEoQwogICAgIHJldHVybiBDYWxsVHlwZUhvc3Q7CiB9CiAKLUpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBhcnJheUNvbnN0cnVjdG9ySXNBcnJheShFeGVjU3RhdGUqLCBKU09i
amVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgYXJyYXlDb25zdHJ1Y3RvcklzQXJyYXkoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVy
biBqc0Jvb2xlYW4oYXJncy5hdCgwKS5pbmhlcml0cygmSlNBcnJheTo6aW5mbykpOworICAgIHJl
dHVybiBqc0Jvb2xlYW4oZXhlYy0+YXJndW1lbnQoMCkuaW5oZXJpdHMoJkpTQXJyYXk6OmluZm8p
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FycmF5UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FycmF5UHJvdG90eXBlLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsMjcgKzQwLDI3
IEBAIG5hbWVzcGFjZSBKU0MgewogCiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEFycmF5UHJv
dG90eXBlKTsKIAotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1Rv
U3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwot
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1RvTG9jYWxlU3RyaW5n
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGlj
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0NvbmNhdChFeGVjU3RhdGUqLCBK
U09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNKb2luKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVBy
b3RvRnVuY1BvcChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
KTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNQdXNoKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1JldmVyc2UoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGFycmF5UHJvdG9GdW5jU2hpZnQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBj
b25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9G
dW5jU2xpY2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7
Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jU29ydChFeGVjU3Rh
dGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNTcGxpY2UoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGFycmF5UHJvdG9GdW5jVW5TaGlmdChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1
bmNFdmVyeShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsK
LXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNGb3JFYWNoKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1NvbWUoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGFycmF5UHJvdG9GdW5jSW5kZXhPZihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1
bmNGaWx0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7
Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jTWFwKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1JlZHVjZShFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
YXJyYXlQcm90b0Z1bmNSZWR1Y2VSaWdodChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90
b0Z1bmNMYXN0SW5kZXhPZihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNUb1N0
cmluZyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90
b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgYXJyYXlQcm90b0Z1bmNDb25jYXQoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jSm9pbihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNQb3AoRXhlY1N0YXRlKik7CitzdGF0aWMg
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jUHVzaChFeGVjU3RhdGUqKTsKK3N0
YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNSZXZlcnNlKEV4ZWNTdGF0
ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1NoaWZ0KEV4
ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1Ns
aWNlKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3Rv
RnVuY1NvcnQoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5
UHJvdG9GdW5jU3BsaWNlKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBhcnJheVByb3RvRnVuY1VuU2hpZnQoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jRXZlcnkoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jRm9yRWFjaChFeGVjU3RhdGUqKTsKK3N0YXRp
YyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNTb21lKEV4ZWNTdGF0ZSopOwor
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0luZGV4T2YoRXhlY1N0
YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jRmlsdGVy
KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVu
Y01hcChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90
b0Z1bmNSZWR1Y2UoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFy
cmF5UHJvdG9GdW5jUmVkdWNlUmlnaHQoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jTGFzdEluZGV4T2YoRXhlY1N0YXRlKik7CiAKIH0KIApA
QCAtMTQ5LDggKzE0OSw5IEBAIHN0YXRpYyB2b2lkIHB1dFByb3BlcnR5KEV4ZWNTdGF0ZSogZXhl
YywKICAgICBvYmotPnB1dChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKIH0KIAot
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykK
IHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBi
b29sIGlzUmVhbEFycmF5ID0gaXNKU0FycmF5KCZleGVjLT5nbG9iYWxEYXRhKCksIHRoaXNWYWx1
ZSk7CiAgICAgaWYgKCFpc1JlYWxBcnJheSAmJiAhdGhpc1ZhbHVlLmluaGVyaXRzKCZKU0FycmF5
OjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKQEAg
LTIwOCw4ICsyMDksOSBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNUb1N0
CiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIFVTdHJpbmc6OmFkb3B0KGJ1ZmZlcikpOwogfQog
Ci1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
KQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhl
Y1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNW
YWx1ZSgpOwogICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU0FycmF5OjppbmZvKSkKICAg
ICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKICAgICBKU09iamVjdCog
dGhpc09iaiA9IGFzQXJyYXkodGhpc1ZhbHVlKTsKQEAgLTI0OCw4ICsyNTAsOSBAQCBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNUb0xvCiAgICAgcmV0dXJuIHN0ckJ1ZmZlci5i
dWlsZChleGVjKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jSm9p
bihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNKb2luKEV4
ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlz
VmFsdWUoKTsKICAgICBKU09iamVjdCogdGhpc09iaiA9IHRoaXNWYWx1ZS50b1RoaXNPYmplY3Qo
ZXhlYyk7CiAKICAgICBIYXNoU2V0PEpTT2JqZWN0Kj4mIGFycmF5VmlzaXRlZEVsZW1lbnRzID0g
ZXhlYy0+Z2xvYmFsRGF0YSgpLmFycmF5VmlzaXRlZEVsZW1lbnRzOwpAQCAtMjY1LDggKzI2OCw4
IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0pvaW4KICAgICBKU1N0cmlu
Z0J1aWxkZXIgc3RyQnVmZmVyOwogCiAgICAgVVN0cmluZyBzZXBhcmF0b3I7Ci0gICAgaWYgKCFh
cmdzLmF0KDApLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIHNlcGFyYXRvciA9IGFyZ3MuYXQoMCku
dG9TdHJpbmcoZXhlYyk7CisgICAgaWYgKCFleGVjLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgp
KQorICAgICAgICBzZXBhcmF0b3IgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKTsK
IAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXNPYmotPmdldChleGVjLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkubGVuZ3RoKS50b1VJbnQzMihleGVjKTsKICAgICB1bnNpZ25lZCBrID0gMDsKQEAg
LTMxOSwxMyArMzIyLDE0IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0pv
aW4KICAgICByZXR1cm4gc3RyQnVmZmVyLmJ1aWxkKGV4ZWMpOwogfQogCi1KU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNDb25jYXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGFycmF5UHJvdG9GdW5jQ29uY2F0KEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1Zh
bHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBKU0FycmF5KiBhcnIg
PSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMpOwogICAgIGludCBuID0gMDsKICAgICBKU1ZhbHVl
IGN1ckFyZyA9IHRoaXNWYWx1ZS50b1RoaXNPYmplY3QoZXhlYyk7Ci0gICAgQXJnTGlzdDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBhcmdzLmJlZ2luKCk7Ci0gICAgQXJnTGlzdDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gYXJncy5lbmQoKTsKKyAgICBzaXplX3QgaSA9IDA7CisgICAgc2l6ZV90IGFyZ0Nv
dW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOwogICAgIHdoaWxlICgxKSB7CiAgICAgICAgIGlm
IChjdXJBcmcuaW5oZXJpdHMoJkpTQXJyYXk6OmluZm8pKSB7CiAgICAgICAgICAgICB1bnNpZ25l
ZCBsZW5ndGggPSBjdXJBcmcuZ2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgp
LnRvVUludDMyKGV4ZWMpOwpAQCAtMzM5LDE3ICszNDMsMTggQEAgSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGFycmF5UHJvdG9GdW5jQ29uYwogICAgICAgICAgICAgYXJyLT5wdXQoZXhlYywgbiwgY3Vy
QXJnKTsKICAgICAgICAgICAgIG4rKzsKICAgICAgICAgfQotICAgICAgICBpZiAoaXQgPT0gZW5k
KQorICAgICAgICBpZiAoaSA9PSBhcmdDb3VudCkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjdXJBcmcgPSAoKml0KTsKLSAgICAgICAgKytpdDsKKyAgICAgICAgY3VyQXJnID0gKGV4ZWMt
PmFyZ3VtZW50KGkpKTsKKyAgICAgICAgKytpOwogICAgIH0KICAgICBhcnItPnNldExlbmd0aChu
KTsKICAgICByZXR1cm4gYXJyOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90
b0Z1bmNQb3AoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBj
b25zdCBBcmdMaXN0JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1BvcChF
eGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhp
c1ZhbHVlKCk7CiAgICAgaWYgKGlzSlNBcnJheSgmZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzVmFs
dWUpKQogICAgICAgICByZXR1cm4gYXNBcnJheSh0aGlzVmFsdWUpLT5wb3AoKTsKIApAQCAtMzY3
LDI1ICszNzIsMjcgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jUG9wKAog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3Rv
RnVuY1B1c2goRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5j
UHVzaChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgaWYgKGlzSlNBcnJheSgmZXhlYy0+Z2xvYmFs
RGF0YSgpLCB0aGlzVmFsdWUpICYmIGFyZ3Muc2l6ZSgpID09IDEpIHsKKyAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKKyAgICBpZiAoaXNKU0FycmF5KCZleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXNWYWx1ZSkgJiYgZXhlYy0+YXJndW1lbnRDb3VudCgpID09IDEp
IHsKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5KHRoaXNWYWx1ZSk7Ci0gICAgICAg
IGFycmF5LT5wdXNoKGV4ZWMsICphcmdzLmJlZ2luKCkpOworICAgICAgICBhcnJheS0+cHVzaChl
eGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgICAgIHJldHVybiBqc051bWJlcihleGVjLCBh
cnJheS0+bGVuZ3RoKCkpOwogICAgIH0KIAogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gdGhpc1Zh
bHVlLnRvVGhpc09iamVjdChleGVjKTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzT2JqLT5n
ZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkudG9VSW50MzIoZXhlYyk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IGFyZ3Muc2l6ZSgpOyBuKyspCi0gICAgICAgIHRo
aXNPYmotPnB1dChleGVjLCBsZW5ndGggKyBuLCBhcmdzLmF0KG4pKTsKLSAgICBsZW5ndGggKz0g
YXJncy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IGV4ZWMtPmFyZ3VtZW50
Q291bnQoKTsgbisrKQorICAgICAgICB0aGlzT2JqLT5wdXQoZXhlYywgbGVuZ3RoICsgbiwgZXhl
Yy0+YXJndW1lbnQobikpOworICAgIGxlbmd0aCArPSBleGVjLT5hcmd1bWVudENvdW50KCk7CiAg
ICAgcHV0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0
aCwganNOdW1iZXIoZXhlYywgbGVuZ3RoKSk7CiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGxl
bmd0aCk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1JldmVyc2Uo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdM
aXN0JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1JldmVyc2UoRXhlY1N0
YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1
ZSgpOwogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gdGhpc1ZhbHVlLnRvVGhpc09iamVjdChleGVj
KTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzT2JqLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmxlbmd0aCkudG9VSW50MzIoZXhlYyk7CiAgICAgdW5zaWduZWQgbWlkZGxlID0g
bGVuZ3RoIC8gMjsKQEAgLTQwOCw4ICs0MTUsOSBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJy
YXlQcm90b0Z1bmNSZXZlCiAgICAgcmV0dXJuIHRoaXNPYmo7CiB9CiAKLUpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBhcnJheVByb3RvRnVuY1NoaWZ0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBK
U1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
YXJyYXlQcm90b0Z1bmNTaGlmdChFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSB0
aGlzVmFsdWUudG9UaGlzT2JqZWN0KGV4ZWMpOwogICAgIEpTVmFsdWUgcmVzdWx0OwogCkBAIC00
MzEsOCArNDM5LDkgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jU2hpZgog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3Rv
RnVuY1NsaWNlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVu
Y1NsaWNlKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMt
Pmhvc3RUaGlzVmFsdWUoKTsKICAgICAvLyBodHRwOi8vZGV2ZWxvcGVyLm5ldHNjYXBlLmNvbS9k
b2NzL21hbnVhbHMvanMvY2xpZW50L2pzcmVmL2FycmF5Lmh0bSMxMTkzNzEzIG9yIDE1LjQuNC4x
MAogCiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSB0aGlzVmFsdWUudG9UaGlzT2JqZWN0KGV4ZWMp
OwpAQCAtNDQwLDcgKzQ0OSw3IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVu
Y1NsaWMKICAgICAvLyBXZSByZXR1cm4gYSBuZXcgYXJyYXkKICAgICBKU0FycmF5KiByZXNPYmog
PSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gcmVzT2Jq
OwotICAgIGRvdWJsZSBiZWdpbiA9IGFyZ3MuYXQoMCkudG9JbnRlZ2VyKGV4ZWMpOworICAgIGRv
dWJsZSBiZWdpbiA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50ZWdlcihleGVjKTsKICAgICB1bnNp
Z25lZCBsZW5ndGggPSB0aGlzT2JqLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxl
bmd0aCkudG9VSW50MzIoZXhlYyk7CiAgICAgaWYgKGJlZ2luID49IDApIHsKICAgICAgICAgaWYg
KGJlZ2luID4gbGVuZ3RoKQpAQCAtNDUxLDEwICs0NjAsMTAgQEAgSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGFycmF5UHJvdG9GdW5jU2xpYwogICAgICAgICAgICAgYmVnaW4gPSAwOwogICAgIH0KICAg
ICBkb3VibGUgZW5kOwotICAgIGlmIChhcmdzLmF0KDEpLmlzVW5kZWZpbmVkKCkpCisgICAgaWYg
KGV4ZWMtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIGVuZCA9IGxlbmd0aDsK
ICAgICBlbHNlIHsKLSAgICAgICAgZW5kID0gYXJncy5hdCgxKS50b0ludGVnZXIoZXhlYyk7Cisg
ICAgICAgIGVuZCA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50ZWdlcihleGVjKTsKICAgICAgICAg
aWYgKGVuZCA8IDApIHsKICAgICAgICAgICAgIGVuZCArPSBsZW5ndGg7CiAgICAgICAgICAgICBp
ZiAoZW5kIDwgMCkKQEAgLTQ3NiwxMSArNDg1LDEyIEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBh
cnJheVByb3RvRnVuY1NsaWMKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNTb3J0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBK
U1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBhcnJheVByb3RvRnVuY1NvcnQoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUg
dGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIEpTT2JqZWN0KiB0aGlzT2Jq
ID0gdGhpc1ZhbHVlLnRvVGhpc09iamVjdChleGVjKTsKIAotICAgIEpTVmFsdWUgZnVuY3Rpb24g
PSBhcmdzLmF0KDApOworICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBleGVjLT5hcmd1bWVudCgwKTsK
ICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGZ1bmN0aW9u
LmdldENhbGxEYXRhKGNhbGxEYXRhKTsKIApAQCAtNTM0LDggKzU0NCw5IEBAIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1NvcnQKICAgICByZXR1cm4gdGhpc09iajsKIH0KIAot
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jU3BsaWNlKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1NwbGljZShFeGVjU3RhdGUqIGV4ZWMp
CiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAg
SlNPYmplY3QqIHRoaXNPYmogPSB0aGlzVmFsdWUudG9UaGlzT2JqZWN0KGV4ZWMpOwogCiAgICAg
Ly8gMTUuNC40LjEyCkBAIC01NDMsMTEgKzU1NCwxMSBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
YXJyYXlQcm90b0Z1bmNTcGxpCiAgICAgSlNWYWx1ZSByZXN1bHQgPSByZXNPYmo7CiAKICAgICAv
LyBGSVhNRTogRmlyZWZveCByZXR1cm5zIGFuIGVtcHR5IGFycmF5LgotICAgIGlmICghYXJncy5z
aXplKCkpCisgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpc09iai0+Z2V0KGV4ZWMs
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOwotICAgIGRvdWJs
ZSByZWxhdGl2ZUJlZ2luID0gYXJncy5hdCgwKS50b0ludGVnZXIoZXhlYyk7CisgICAgZG91Ymxl
IHJlbGF0aXZlQmVnaW4gPSBleGVjLT5hcmd1bWVudCgwKS50b0ludGVnZXIoZXhlYyk7CiAgICAg
dW5zaWduZWQgYmVnaW47CiAgICAgaWYgKHJlbGF0aXZlQmVnaW4gPCAwKSB7CiAgICAgICAgIHJl
bGF0aXZlQmVnaW4gKz0gbGVuZ3RoOwpAQCAtNTU2LDggKzU2Nyw4IEBAIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBhcnJheVByb3RvRnVuY1NwbGkKICAgICAgICAgYmVnaW4gPSBzdGQ6Om1pbjx1bnNp
Z25lZD4oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJlbGF0aXZlQmVnaW4pLCBsZW5ndGgpOwogCiAg
ICAgdW5zaWduZWQgZGVsZXRlQ291bnQ7Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpID4gMSkKLSAgICAg
ICAgZGVsZXRlQ291bnQgPSBzdGQ6Om1pbjxpbnQ+KHN0ZDo6bWF4PGludD4oYXJncy5hdCgxKS50
b1VJbnQzMihleGVjKSwgMCksIGxlbmd0aCAtIGJlZ2luKTsKKyAgICBpZiAoZXhlYy0+YXJndW1l
bnRDb3VudCgpID4gMSkKKyAgICAgICAgZGVsZXRlQ291bnQgPSBzdGQ6Om1pbjxpbnQ+KHN0ZDo6
bWF4PGludD4oZXhlYy0+YXJndW1lbnQoMSkudG9VSW50MzIoZXhlYyksIDApLCBsZW5ndGggLSBi
ZWdpbik7CiAgICAgZWxzZQogICAgICAgICBkZWxldGVDb3VudCA9IGxlbmd0aCAtIGJlZ2luOwog
CkBAIC01NjcsNyArNTc4LDcgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5j
U3BsaQogICAgIH0KICAgICByZXNPYmotPnNldExlbmd0aChkZWxldGVDb3VudCk7CiAKLSAgICB1
bnNpZ25lZCBhZGRpdGlvbmFsQXJncyA9IHN0ZDo6bWF4PGludD4oYXJncy5zaXplKCkgLSAyLCAw
KTsKKyAgICB1bnNpZ25lZCBhZGRpdGlvbmFsQXJncyA9IHN0ZDo6bWF4PGludD4oZXhlYy0+YXJn
dW1lbnRDb3VudCgpIC0gMiwgMCk7CiAgICAgaWYgKGFkZGl0aW9uYWxBcmdzICE9IGRlbGV0ZUNv
dW50KSB7CiAgICAgICAgIGlmIChhZGRpdGlvbmFsQXJncyA8IGRlbGV0ZUNvdW50KSB7CiAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGsgPSBiZWdpbjsgayA8IGxlbmd0aCAtIGRlbGV0ZUNvdW50
OyArK2spIHsKQEAgLTU4OCwxOSArNTk5LDIwIEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJh
eVByb3RvRnVuY1NwbGkKICAgICAgICAgfQogICAgIH0KICAgICBmb3IgKHVuc2lnbmVkIGsgPSAw
OyBrIDwgYWRkaXRpb25hbEFyZ3M7ICsraykKLSAgICAgICAgdGhpc09iai0+cHV0KGV4ZWMsIGsg
KyBiZWdpbiwgYXJncy5hdChrICsgMikpOworICAgICAgICB0aGlzT2JqLT5wdXQoZXhlYywgayAr
IGJlZ2luLCBleGVjLT5hcmd1bWVudChrICsgMikpOwogCiAgICAgcHV0UHJvcGVydHkoZXhlYywg
dGhpc09iaiwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoZXhlYywgbGVu
Z3RoIC0gZGVsZXRlQ291bnQgKyBhZGRpdGlvbmFsQXJncykpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1VuU2hpZnQoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jVW5TaGlmdChFeGVjU3Rh
dGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVl
KCk7CiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSB0aGlzVmFsdWUudG9UaGlzT2JqZWN0KGV4ZWMp
OwogCiAgICAgLy8gMTUuNC40LjEzCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpc09iai0+Z2V0
KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOwotICAg
IHVuc2lnbmVkIG5yQXJncyA9IGFyZ3Muc2l6ZSgpOworICAgIHVuc2lnbmVkIG5yQXJncyA9IGV4
ZWMtPmFyZ3VtZW50Q291bnQoKTsKICAgICBpZiAobnJBcmdzKSB7CiAgICAgICAgIGZvciAodW5z
aWduZWQgayA9IGxlbmd0aDsgayA+IDA7IC0taykgewogICAgICAgICAgICAgaWYgKEpTVmFsdWUg
diA9IGdldFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGsgLSAxKSkKQEAgLTYxMCwyMyArNjIyLDI0
IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1VuU2gKICAgICAgICAgfQog
ICAgIH0KICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgbnJBcmdzOyArK2spCi0gICAgICAg
IHRoaXNPYmotPnB1dChleGVjLCBrLCBhcmdzLmF0KGspKTsKKyAgICAgICAgdGhpc09iai0+cHV0
KGV4ZWMsIGssIGV4ZWMtPmFyZ3VtZW50KGspKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVt
YmVyKGV4ZWMsIGxlbmd0aCArIG5yQXJncyk7CiAgICAgcHV0UHJvcGVydHkoZXhlYywgdGhpc09i
aiwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwgcmVzdWx0KTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNGaWx0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jRmlsdGVyKEV4ZWNT
dGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFs
dWUoKTsKICAgICBKU09iamVjdCogdGhpc09iaiA9IHRoaXNWYWx1ZS50b1RoaXNPYmplY3QoZXhl
Yyk7CiAKLSAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gYXJncy5hdCgwKTsKKyAgICBKU1ZhbHVlIGZ1
bmN0aW9uID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAg
Q2FsbFR5cGUgY2FsbFR5cGUgPSBmdW5jdGlvbi5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CiAgICAg
aWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3Io
ZXhlYywgVHlwZUVycm9yKTsKIAotICAgIEpTT2JqZWN0KiBhcHBseVRoaXMgPSBhcmdzLmF0KDEp
LmlzVW5kZWZpbmVkT3JOdWxsKCkgPyBleGVjLT5nbG9iYWxUaGlzVmFsdWUoKSA6IGFyZ3MuYXQo
MSkudG9PYmplY3QoZXhlYyk7CisgICAgSlNPYmplY3QqIGFwcGx5VGhpcyA9IGV4ZWMtPmFyZ3Vt
ZW50KDEpLmlzVW5kZWZpbmVkT3JOdWxsKCkgPyBleGVjLT5nbG9iYWxUaGlzVmFsdWUoKSA6IGV4
ZWMtPmFyZ3VtZW50KDEpLnRvT2JqZWN0KGV4ZWMpOwogICAgIEpTQXJyYXkqIHJlc3VsdEFycmF5
ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjKTsKIAogICAgIHVuc2lnbmVkIGZpbHRlckluZGV4
ID0gMDsKQEAgLTY3NCwxNyArNjg3LDE4IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVBy
b3RvRnVuY0ZpbHQKICAgICByZXR1cm4gcmVzdWx0QXJyYXk7CiB9CiAKLUpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBhcnJheVByb3RvRnVuY01hcChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNW
YWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgYXJyYXlQcm90b0Z1bmNNYXAoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhp
c1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0g
dGhpc1ZhbHVlLnRvVGhpc09iamVjdChleGVjKTsKIAotICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBh
cmdzLmF0KDApOworICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBleGVjLT5hcmd1bWVudCgwKTsKICAg
ICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGZ1bmN0aW9uLmdl
dENhbGxEYXRhKGNhbGxEYXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKQog
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCi0gICAgSlNPYmpl
Y3QqIGFwcGx5VGhpcyA9IGFyZ3MuYXQoMSkuaXNVbmRlZmluZWRPck51bGwoKSA/IGV4ZWMtPmds
b2JhbFRoaXNWYWx1ZSgpIDogYXJncy5hdCgxKS50b09iamVjdChleGVjKTsKKyAgICBKU09iamVj
dCogYXBwbHlUaGlzID0gZXhlYy0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWRPck51bGwoKSA/IGV4
ZWMtPmdsb2JhbFRoaXNWYWx1ZSgpIDogZXhlYy0+YXJndW1lbnQoMSkudG9PYmplY3QoZXhlYyk7
CiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzT2JqLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmxlbmd0aCkudG9VSW50MzIoZXhlYyk7CiAKQEAgLTczMSwxNyArNzQ1LDE4IEBA
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY01hcCgKIC8vIGh0dHA6Ly9kZXZl
bG9wZXItdGVzdC5tb3ppbGxhLm9yZy9lbi9kb2NzL0NvcmVfSmF2YVNjcmlwdF8xLjVfUmVmZXJl
bmNlOk9iamVjdHM6QXJyYXk6Zm9yRWFjaAogLy8gaHR0cDovL2RldmVsb3Blci10ZXN0Lm1vemls
bGEub3JnL2VuL2RvY3MvQ29yZV9KYXZhU2NyaXB0XzEuNV9SZWZlcmVuY2U6T2JqZWN0czpBcnJh
eTpzb21lCiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0V2ZXJ5KEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYg
YXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0V2ZXJ5KEV4ZWNTdGF0
ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUo
KTsKICAgICBKU09iamVjdCogdGhpc09iaiA9IHRoaXNWYWx1ZS50b1RoaXNPYmplY3QoZXhlYyk7
CiAKLSAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gYXJncy5hdCgwKTsKKyAgICBKU1ZhbHVlIGZ1bmN0
aW9uID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2Fs
bFR5cGUgY2FsbFR5cGUgPSBmdW5jdGlvbi5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CiAgICAgaWYg
KGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhl
YywgVHlwZUVycm9yKTsKIAotICAgIEpTT2JqZWN0KiBhcHBseVRoaXMgPSBhcmdzLmF0KDEpLmlz
VW5kZWZpbmVkT3JOdWxsKCkgPyBleGVjLT5nbG9iYWxUaGlzVmFsdWUoKSA6IGFyZ3MuYXQoMSku
dG9PYmplY3QoZXhlYyk7CisgICAgSlNPYmplY3QqIGFwcGx5VGhpcyA9IGV4ZWMtPmFyZ3VtZW50
KDEpLmlzVW5kZWZpbmVkT3JOdWxsKCkgPyBleGVjLT5nbG9iYWxUaGlzVmFsdWUoKSA6IGV4ZWMt
PmFyZ3VtZW50KDEpLnRvT2JqZWN0KGV4ZWMpOwogCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0Jv
b2xlYW4odHJ1ZSk7CiAKQEAgLTc4NywxNyArODAyLDE4IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBhcnJheVByb3RvRnVuY0V2ZXIKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNGb3JFYWNoKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0ZvckVhY2goRXhlY1N0YXRlKiBleGVjKQogeworICAg
IEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIEpTT2JqZWN0
KiB0aGlzT2JqID0gdGhpc1ZhbHVlLnRvVGhpc09iamVjdChleGVjKTsKIAotICAgIEpTVmFsdWUg
ZnVuY3Rpb24gPSBhcmdzLmF0KDApOworICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBleGVjLT5hcmd1
bWVudCgwKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9
IGZ1bmN0aW9uLmdldENhbGxEYXRhKGNhbGxEYXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0gQ2Fs
bFR5cGVOb25lKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwog
Ci0gICAgSlNPYmplY3QqIGFwcGx5VGhpcyA9IGFyZ3MuYXQoMSkuaXNVbmRlZmluZWRPck51bGwo
KSA/IGV4ZWMtPmdsb2JhbFRoaXNWYWx1ZSgpIDogYXJncy5hdCgxKS50b09iamVjdChleGVjKTsK
KyAgICBKU09iamVjdCogYXBwbHlUaGlzID0gZXhlYy0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWRP
ck51bGwoKSA/IGV4ZWMtPmdsb2JhbFRoaXNWYWx1ZSgpIDogZXhlYy0+YXJndW1lbnQoMSkudG9P
YmplY3QoZXhlYyk7CiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzT2JqLT5nZXQoZXhlYywg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkudG9VSW50MzIoZXhlYyk7CiAgICAgdW5zaWdu
ZWQgayA9IDA7CkBAIC04MzIsMTcgKzg0OCwxOCBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJy
YXlQcm90b0Z1bmNGb3JFCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1NvbWUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jU29tZShFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNW
YWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgSlNPYmplY3QqIHRo
aXNPYmogPSB0aGlzVmFsdWUudG9UaGlzT2JqZWN0KGV4ZWMpOwogCi0gICAgSlNWYWx1ZSBmdW5j
dGlvbiA9IGFyZ3MuYXQoMCk7CisgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IGV4ZWMtPmFyZ3VtZW50
KDApOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZnVu
Y3Rpb24uZ2V0Q2FsbERhdGEoY2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlw
ZU5vbmUpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKLSAg
ICBKU09iamVjdCogYXBwbHlUaGlzID0gYXJncy5hdCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpID8g
ZXhlYy0+Z2xvYmFsVGhpc1ZhbHVlKCkgOiBhcmdzLmF0KDEpLnRvT2JqZWN0KGV4ZWMpOworICAg
IEpTT2JqZWN0KiBhcHBseVRoaXMgPSBleGVjLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZE9yTnVs
bCgpID8gZXhlYy0+Z2xvYmFsVGhpc1ZhbHVlKCkgOiBleGVjLT5hcmd1bWVudCgxKS50b09iamVj
dChleGVjKTsKIAogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNCb29sZWFuKGZhbHNlKTsKIApAQCAt
ODg1LDExICs5MDIsMTIgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jU29t
ZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVBy
b3RvRnVuY1JlZHVjZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFs
dWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90
b0Z1bmNSZWR1Y2UoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0g
ZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gdGhpc1ZhbHVl
LnRvVGhpc09iamVjdChleGVjKTsKICAgICAKLSAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gYXJncy5h
dCgwKTsKKyAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgQ2Fs
bERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBmdW5jdGlvbi5nZXRDYWxs
RGF0YShjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkKQEAgLTg5
OCwxNCArOTE2LDE0IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1JlZHUK
ICAgICB1bnNpZ25lZCBpID0gMDsKICAgICBKU1ZhbHVlIHJ2OwogICAgIHVuc2lnbmVkIGxlbmd0
aCA9IHRoaXNPYmotPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS50b1VJ
bnQzMihleGVjKTsKLSAgICBpZiAoIWxlbmd0aCAmJiBhcmdzLnNpemUoKSA9PSAxKQorICAgIGlm
ICghbGVuZ3RoICYmIGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA9PSAxKQogICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogICAgIEpTQXJyYXkqIGFycmF5ID0gMDsKICAg
ICBpZiAoaXNKU0FycmF5KCZleGVjLT5nbG9iYWxEYXRhKCksIHRoaXNPYmopKQogICAgICAgICBh
cnJheSA9IGFzQXJyYXkodGhpc09iaik7CiAKLSAgICBpZiAoYXJncy5zaXplKCkgPj0gMikKLSAg
ICAgICAgcnYgPSBhcmdzLmF0KDEpOworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0g
MikKKyAgICAgICAgcnYgPSBleGVjLT5hcmd1bWVudCgxKTsKICAgICBlbHNlIGlmIChhcnJheSAm
JiBhcnJheS0+Y2FuR2V0SW5kZXgoMCkpewogICAgICAgICBydiA9IGFycmF5LT5nZXRJbmRleCgw
KTsKICAgICAgICAgaSA9IDE7CkBAIC05NTUsMTEgKzk3MywxMiBAQCBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgYXJyYXlQcm90b0Z1bmNSZWR1CiAgICAgcmV0dXJuIHJ2OwogfQogCi1KU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNSZWR1Y2VSaWdodChFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNSZWR1Y2VSaWdodChFeGVjU3RhdGUqIGV4ZWMp
CiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAg
SlNPYmplY3QqIHRoaXNPYmogPSB0aGlzVmFsdWUudG9UaGlzT2JqZWN0KGV4ZWMpOwogICAgIAot
ICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBhcmdzLmF0KDApOworICAgIEpTVmFsdWUgZnVuY3Rpb24g
PSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlw
ZSBjYWxsVHlwZSA9IGZ1bmN0aW9uLmdldENhbGxEYXRhKGNhbGxEYXRhKTsKICAgICBpZiAoY2Fs
bFR5cGUgPT0gQ2FsbFR5cGVOb25lKQpAQCAtOTY4LDE0ICs5ODcsMTQgQEAgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jUmVkdQogICAgIHVuc2lnbmVkIGkgPSAwOwogICAgIEpT
VmFsdWUgcnY7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpc09iai0+Z2V0KGV4ZWMsIGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOwotICAgIGlmICghbGVuZ3Ro
ICYmIGFyZ3Muc2l6ZSgpID09IDEpCisgICAgaWYgKCFsZW5ndGggJiYgZXhlYy0+YXJndW1lbnRD
b3VudCgpID09IDEpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7
CiAgICAgSlNBcnJheSogYXJyYXkgPSAwOwogICAgIGlmIChpc0pTQXJyYXkoJmV4ZWMtPmdsb2Jh
bERhdGEoKSwgdGhpc09iaikpCiAgICAgICAgIGFycmF5ID0gYXNBcnJheSh0aGlzT2JqKTsKICAg
ICAKLSAgICBpZiAoYXJncy5zaXplKCkgPj0gMikKLSAgICAgICAgcnYgPSBhcmdzLmF0KDEpOwor
ICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMikKKyAgICAgICAgcnYgPSBleGVjLT5h
cmd1bWVudCgxKTsKICAgICBlbHNlIGlmIChhcnJheSAmJiBhcnJheS0+Y2FuR2V0SW5kZXgobGVu
Z3RoIC0gMSkpewogICAgICAgICBydiA9IGFycmF5LT5nZXRJbmRleChsZW5ndGggLSAxKTsKICAg
ICAgICAgaSA9IDE7CkBAIC0xMDI0LDE1ICsxMDQzLDE2IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBhcnJheVByb3RvRnVuY1JlZHUKICAgICByZXR1cm4gcnY7ICAgICAgICAKIH0KIAotSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jSW5kZXhPZihFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNJbmRleE9mKEV4ZWNTdGF0ZSogZXhlYykKIHsK
KyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICAvLyBK
YXZhU2NyaXB0IDEuNSBFeHRlbnNpb24gYnkgTW96aWxsYQogICAgIC8vIERvY3VtZW50YXRpb246
IGh0dHA6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vZG9jcy9Db3JlX0phdmFTY3JpcHRfMS41
X1JlZmVyZW5jZTpHbG9iYWxfT2JqZWN0czpBcnJheTppbmRleE9mCiAKICAgICBKU09iamVjdCog
dGhpc09iaiA9IHRoaXNWYWx1ZS50b1RoaXNPYmplY3QoZXhlYyk7CiAKICAgICB1bnNpZ25lZCBp
bmRleCA9IDA7Ci0gICAgZG91YmxlIGQgPSBhcmdzLmF0KDEpLnRvSW50ZWdlcihleGVjKTsKKyAg
ICBkb3VibGUgZCA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50ZWdlcihleGVjKTsKICAgICB1bnNp
Z25lZCBsZW5ndGggPSB0aGlzT2JqLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxl
bmd0aCkudG9VSW50MzIoZXhlYyk7CiAgICAgaWYgKGQgPCAwKQogICAgICAgICBkICs9IGxlbmd0
aDsKQEAgLTEwNDMsNyArMTA2Myw3IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3Rv
RnVuY0luZGUKICAgICAgICAgICAgIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGQpOwog
ICAgIH0KIAotICAgIEpTVmFsdWUgc2VhcmNoRWxlbWVudCA9IGFyZ3MuYXQoMCk7CisgICAgSlNW
YWx1ZSBzZWFyY2hFbGVtZW50ID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgZm9yICg7IGluZGV4
IDwgbGVuZ3RoOyArK2luZGV4KSB7CiAgICAgICAgIEpTVmFsdWUgZSA9IGdldFByb3BlcnR5KGV4
ZWMsIHRoaXNPYmosIGluZGV4KTsKICAgICAgICAgaWYgKCFlKQpAQCAtMTA1NSw4ICsxMDc1LDkg
QEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jSW5kZQogICAgIHJldHVybiBq
c051bWJlcihleGVjLCAtMSk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3Rv
RnVuY0xhc3RJbmRleE9mKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVBy
b3RvRnVuY0xhc3RJbmRleE9mKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNW
YWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICAvLyBKYXZhU2NyaXB0IDEuNiBFeHRl
bnNpb24gYnkgTW96aWxsYQogICAgIC8vIERvY3VtZW50YXRpb246IGh0dHA6Ly9kZXZlbG9wZXIu
bW96aWxsYS5vcmcvZW4vZG9jcy9Db3JlX0phdmFTY3JpcHRfMS41X1JlZmVyZW5jZTpHbG9iYWxf
T2JqZWN0czpBcnJheTpsYXN0SW5kZXhPZgogCkBAIC0xMDY0LDcgKzEwODUsNyBAQCBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNMYXN0CiAKICAgICB1bnNpZ25lZCBsZW5ndGgg
PSB0aGlzT2JqLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkudG9VSW50
MzIoZXhlYyk7CiAgICAgaW50IGluZGV4ID0gbGVuZ3RoIC0gMTsKLSAgICBkb3VibGUgZCA9IGFy
Z3MuYXQoMSkudG9JbnRlZ2VyUHJlc2VydmVOYU4oZXhlYyk7CisgICAgZG91YmxlIGQgPSBleGVj
LT5hcmd1bWVudCgxKS50b0ludGVnZXJQcmVzZXJ2ZU5hTihleGVjKTsKIAogICAgIGlmIChkIDwg
MCkgewogICAgICAgICBkICs9IGxlbmd0aDsKQEAgLTEwNzQsNyArMTA5NSw3IEBAIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0xhc3QKICAgICBpZiAoZCA8IGxlbmd0aCkKICAg
ICAgICAgaW5kZXggPSBzdGF0aWNfY2FzdDxpbnQ+KGQpOwogCi0gICAgSlNWYWx1ZSBzZWFyY2hF
bGVtZW50ID0gYXJncy5hdCgwKTsKKyAgICBKU1ZhbHVlIHNlYXJjaEVsZW1lbnQgPSBleGVjLT5h
cmd1bWVudCgwKTsKICAgICBmb3IgKDsgaW5kZXggPj0gMDsgLS1pbmRleCkgewogICAgICAgICBK
U1ZhbHVlIGUgPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBpbmRleCk7CiAgICAgICAgIGlm
ICghZSkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rv
ci5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFu
Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw5ICs1Nyw5IEBAIENvbnN0cnVj
dFR5cGUgQm9vbGVhbkNvbnN0cnVjdG9yOjpnZXRDb24KIH0KIAogLy8gRUNNQSAxNS42LjEKLXN0
YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEJvb2xlYW5Db25zdHJ1Y3RvcihFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK3N0YXRp
YyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEJvb2xlYW5Db25zdHJ1Y3RvcihFeGVjU3RhdGUq
IGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGpzQm9vbGVhbihhcmdzLmF0KDApLnRvQm9vbGVhbihleGVj
KSk7CisgICAgcmV0dXJuIGpzQm9vbGVhbihleGVjLT5hcmd1bWVudCgwKS50b0Jvb2xlYW4oZXhl
YykpOwogfQogCiBDYWxsVHlwZSBCb29sZWFuQ29uc3RydWN0b3I6OmdldENhbGxEYXRhKENhbGxE
YXRhJiBjYWxsRGF0YSkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhblByb3Rv
dHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuUHJv
dG90eXBlLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jv
b2xlYW5Qcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw4ICszMiw4IEBAIG5hbWVz
cGFjZSBKU0MgewogQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChCb29sZWFuUHJvdG90eXBlKTsK
IAogLy8gRnVuY3Rpb25zCi1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJvb2xlYW5Qcm90
b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xp
c3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYm9vbGVhblByb3RvRnVuY1ZhbHVl
T2YoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0
aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJvb2xlYW5Qcm90b0Z1bmNUb1N0cmluZyhFeGVjU3Rh
dGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYm9vbGVhblByb3RvRnVuY1ZhbHVl
T2YoRXhlY1N0YXRlKik7CiAKIC8vIEVDTUEgMTUuNi40CiAKQEAgLTUxLDggKzUxLDkgQEAgQm9v
bGVhblByb3RvdHlwZTo6Qm9vbGVhblByb3RvdHlwZShFeGVjUwogCiAvLyBFQ01BIDE1LjYuNC4y
ICsgMTUuNi40LjMKIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJvb2xlYW5Qcm90b0Z1bmNUb1N0
cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJvb2xlYW5Qcm90b0Z1bmNUb1N0cmlu
ZyhFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0
VGhpc1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNWYWx1ZSA9PSBqc0Jvb2xlYW4oZmFsc2UpKQogICAg
ICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsICJmYWxzZSIpOwogCkBAIC02OSw4
ICs3MCw5IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBib29sZWFuUHJvdG9GdW5jVG8KICAgICBy
ZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsICJ0cnVlIik7CiB9CiAKLUpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBib29sZWFuUHJvdG9GdW5jVmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGJvb2xlYW5Qcm90b0Z1bmNWYWx1ZU9mKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBK
U1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1Zh
bHVlLmlzQm9vbGVhbigpKQogICAgICAgICByZXR1cm4gdGhpc1ZhbHVlOwogCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA2MDM0MSkK
KysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTQsOSArNTQsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogQVNTRVJUX0NMQVNTX0ZJ
VFNfSU5fQ0VMTChEYXRlQ29uc3RydWN0b3IpOwogCi1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGRhdGVQYXJzZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xp
c3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZU5vdyhFeGVjU3RhdGUqLCBK
U09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZGF0ZVVUQyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVBhcnNlKEV4ZWNTdGF0
ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlTm93KEV4ZWNTdGF0ZSopOwor
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlVVRDKEV4ZWNTdGF0ZSopOwogCiBEYXRl
Q29uc3RydWN0b3I6OkRhdGVDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIE5vbk51bGxQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJl
LCBTdHJ1Y3R1cmUqIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLCBEYXRlUHJvdG90eXBlKiBk
YXRlUHJvdG90eXBlKQogICAgIDogSW50ZXJuYWxGdW5jdGlvbigmZXhlYy0+Z2xvYmFsRGF0YSgp
LCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgSWRlbnRpZmllcihleGVjLCBkYXRlUHJvdG90eXBl
LT5jbGFzc0luZm8oKS0+Y2xhc3NOYW1lKSkKQEAgLTEyOCw3ICsxMjgsNyBAQCBDb25zdHJ1Y3RU
eXBlIERhdGVDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RyCiB9CiAKIC8vIEVDTUEgMTUuOS4yCi1zdGF0
aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxEYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY2FsbERhdGUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIHRpbWVfdCBsb2NhbFRpbWUgPSB0
aW1lKDApOwogICAgIHRtIGxvY2FsVE07CkBAIC0xNDcsMzcgKzE0NywzNyBAQCBDYWxsVHlwZSBE
YXRlQ29uc3RydWN0b3I6OmdldENhbGxEYXRhKENhCiAgICAgcmV0dXJuIENhbGxUeXBlSG9zdDsK
IH0KIAotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUGFyc2UoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitzdGF0aWMgSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQYXJzZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0
dXJuIGpzTnVtYmVyKGV4ZWMsIHBhcnNlRGF0ZShleGVjLCBhcmdzLmF0KDApLnRvU3RyaW5nKGV4
ZWMpKSk7CisgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHBhcnNlRGF0ZShleGVjLCBleGVjLT5h
cmd1bWVudCgwKS50b1N0cmluZyhleGVjKSkpOwogfQogCi1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGRhdGVOb3coRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlTm93KEV4ZWNTdGF0
ZSogZXhlYykKIHsKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywganNDdXJyZW50VGltZSgpKTsK
IH0KIAotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlVVRDKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKSAKK3N0YXRpYyBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVVUQyhFeGVjU3RhdGUqIGV4ZWMpIAogewotICAgIGludCBu
ID0gYXJncy5zaXplKCk7Ci0gICAgaWYgKGlzbmFuKGFyZ3MuYXQoMCkudG9OdW1iZXIoZXhlYykp
Ci0gICAgICAgICAgICB8fCBpc25hbihhcmdzLmF0KDEpLnRvTnVtYmVyKGV4ZWMpKQotICAgICAg
ICAgICAgfHwgKG4gPj0gMyAmJiBpc25hbihhcmdzLmF0KDIpLnRvTnVtYmVyKGV4ZWMpKSkKLSAg
ICAgICAgICAgIHx8IChuID49IDQgJiYgaXNuYW4oYXJncy5hdCgzKS50b051bWJlcihleGVjKSkp
Ci0gICAgICAgICAgICB8fCAobiA+PSA1ICYmIGlzbmFuKGFyZ3MuYXQoNCkudG9OdW1iZXIoZXhl
YykpKQotICAgICAgICAgICAgfHwgKG4gPj0gNiAmJiBpc25hbihhcmdzLmF0KDUpLnRvTnVtYmVy
KGV4ZWMpKSkKLSAgICAgICAgICAgIHx8IChuID49IDcgJiYgaXNuYW4oYXJncy5hdCg2KS50b051
bWJlcihleGVjKSkpKQorICAgIGludCBuID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOworICAgIGlm
IChpc25hbihleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVjKSkKKyAgICAgICAgICAgIHx8
IGlzbmFuKGV4ZWMtPmFyZ3VtZW50KDEpLnRvTnVtYmVyKGV4ZWMpKQorICAgICAgICAgICAgfHwg
KG4gPj0gMyAmJiBpc25hbihleGVjLT5hcmd1bWVudCgyKS50b051bWJlcihleGVjKSkpCisgICAg
ICAgICAgICB8fCAobiA+PSA0ICYmIGlzbmFuKGV4ZWMtPmFyZ3VtZW50KDMpLnRvTnVtYmVyKGV4
ZWMpKSkKKyAgICAgICAgICAgIHx8IChuID49IDUgJiYgaXNuYW4oZXhlYy0+YXJndW1lbnQoNCku
dG9OdW1iZXIoZXhlYykpKQorICAgICAgICAgICAgfHwgKG4gPj0gNiAmJiBpc25hbihleGVjLT5h
cmd1bWVudCg1KS50b051bWJlcihleGVjKSkpCisgICAgICAgICAgICB8fCAobiA+PSA3ICYmIGlz
bmFuKGV4ZWMtPmFyZ3VtZW50KDYpLnRvTnVtYmVyKGV4ZWMpKSkpCiAgICAgICAgIHJldHVybiBq
c05hTihleGVjKTsKIAogICAgIEdyZWdvcmlhbkRhdGVUaW1lIHQ7Ci0gICAgaW50IHllYXIgPSBh
cmdzLmF0KDApLnRvSW50MzIoZXhlYyk7CisgICAgaW50IHllYXIgPSBleGVjLT5hcmd1bWVudCgw
KS50b0ludDMyKGV4ZWMpOwogICAgIHQueWVhciA9ICh5ZWFyID49IDAgJiYgeWVhciA8PSA5OSkg
PyB5ZWFyIDogeWVhciAtIDE5MDA7Ci0gICAgdC5tb250aCA9IGFyZ3MuYXQoMSkudG9JbnQzMihl
eGVjKTsKLSAgICB0Lm1vbnRoRGF5ID0gKG4gPj0gMykgPyBhcmdzLmF0KDIpLnRvSW50MzIoZXhl
YykgOiAxOwotICAgIHQuaG91ciA9IGFyZ3MuYXQoMykudG9JbnQzMihleGVjKTsKLSAgICB0Lm1p
bnV0ZSA9IGFyZ3MuYXQoNCkudG9JbnQzMihleGVjKTsKLSAgICB0LnNlY29uZCA9IGFyZ3MuYXQo
NSkudG9JbnQzMihleGVjKTsKLSAgICBkb3VibGUgbXMgPSAobiA+PSA3KSA/IGFyZ3MuYXQoNiku
dG9OdW1iZXIoZXhlYykgOiAwOworICAgIHQubW9udGggPSBleGVjLT5hcmd1bWVudCgxKS50b0lu
dDMyKGV4ZWMpOworICAgIHQubW9udGhEYXkgPSAobiA+PSAzKSA/IGV4ZWMtPmFyZ3VtZW50KDIp
LnRvSW50MzIoZXhlYykgOiAxOworICAgIHQuaG91ciA9IGV4ZWMtPmFyZ3VtZW50KDMpLnRvSW50
MzIoZXhlYyk7CisgICAgdC5taW51dGUgPSBleGVjLT5hcmd1bWVudCg0KS50b0ludDMyKGV4ZWMp
OworICAgIHQuc2Vjb25kID0gZXhlYy0+YXJndW1lbnQoNSkudG9JbnQzMihleGVjKTsKKyAgICBk
b3VibGUgbXMgPSAobiA+PSA3KSA/IGV4ZWMtPmFyZ3VtZW50KDYpLnRvTnVtYmVyKGV4ZWMpIDog
MDsKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgdGltZUNsaXAoZ3JlZ29yaWFuRGF0ZVRpbWVU
b01TKGV4ZWMsIHQsIG1zLCB0cnVlKSkpOwogfQogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0RhdGVQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRGF0ZVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgSmF2YVNjcmlwdENvcmUv
cnVudGltZS9EYXRlUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsNTIgKzczLDUx
IEBAIG5hbWVzcGFjZSBKU0MgewogCiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKERhdGVQcm90
b3R5cGUpOwogCi1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRE
YXRlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3Rh
dGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0RGF5KEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0RnVsbFllYXIoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGRhdGVQcm90b0Z1bmNHZXRIb3VycyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVu
Y0dldE1pbGxpU2Vjb25kcyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldE1p
bnV0ZXMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1z
dGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRNb250aChFeGVjU3Rh
dGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFNlY29uZHMoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGRhdGVQcm90b0Z1bmNHZXRUaW1lKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9G
dW5jR2V0VGltZXpvbmVPZmZzZXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25z
dCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNH
ZXRVVENEYXRlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYp
Owotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VVRDRGF5KEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VVRDRnVsbFllYXIoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENIb3VycyhFeGVjU3RhdGUqLCBKU09iamVj
dCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZGF0ZVByb3RvRnVuY0dldFVUQ01pbGxpc2Vjb25kcyhFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZGF0ZVByb3RvRnVuY0dldFVUQ01pbnV0ZXMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
LCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90
b0Z1bmNHZXRVVENNb250aChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVU
Q1NlY29uZHMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7
Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRZZWFyKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0RGF0ZShFeGVjU3RhdGUqLCBKU09iamVj
dCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZGF0ZVByb3RvRnVuY1NldEZ1bGxZZWFyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJv
dG9GdW5jU2V0SG91cnMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdM
aXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRNaWxs
aVNlY29uZHMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7
Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRNaW51dGVzKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0TW9udGgoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRTZWNvbmRzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRl
UHJvdG9GdW5jU2V0VGltZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFVU
Q0RhdGUoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1z
dGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRVVENGdWxsWWVhcihF
eGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFVUQ0hvdXJzKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0VVRDTWlsbGlzZWNvbmRzKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0VVRDTWludXRlcyhFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZGF0ZVByb3RvRnVuY1NldFVUQ01vbnRoKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9G
dW5jU2V0VVRDU2Vjb25kcyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFll
YXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0
aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb0RhdGVTdHJpbmcoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb0dNVFN0cmluZyhFeGVjU3RhdGUqLCBKU09i
amVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZGF0ZVByb3RvRnVuY1RvTG9jYWxlRGF0ZVN0cmluZyhFeGVjU3RhdGUqLCBKU09iamVj
dCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZGF0ZVByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRl
UHJvdG9GdW5jVG9Mb2NhbGVUaW1lU3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJv
dG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdM
aXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb1RpbWVT
dHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1z
dGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb1VUQ1N0cmluZyhFeGVj
U3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvSVNPU3RyaW5nKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotCi1zdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb0pTT04oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1Zh
bHVlLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQ
cm90b0Z1bmNHZXREYXRlKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBkYXRlUHJvdG9GdW5jR2V0RGF5KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0RnVsbFllYXIoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRIb3VycyhFeGVjU3RhdGUqKTsKK3N0
YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldE1pbGxpU2Vjb25kcyhF
eGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dl
dE1pbnV0ZXMoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQ
cm90b0Z1bmNHZXRNb250aChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZGF0ZVByb3RvRnVuY0dldFNlY29uZHMoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRUaW1lKEV4ZWNTdGF0ZSopOworc3RhdGljIEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VGltZXpvbmVPZmZzZXQoRXhlY1N0
YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENE
YXRlKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9G
dW5jR2V0VVRDRGF5KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBk
YXRlUHJvdG9GdW5jR2V0VVRDRnVsbFllYXIoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENIb3VycyhFeGVjU3RhdGUqKTsKK3N0YXRp
YyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVUQ01pbGxpc2Vjb25kcyhF
eGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dl
dFVUQ01pbnV0ZXMoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRh
dGVQcm90b0Z1bmNHZXRVVENNb250aChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVUQ1NlY29uZHMoRXhlY1N0YXRlKik7CitzdGF0aWMg
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRZZWFyKEV4ZWNTdGF0ZSopOwor
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0RGF0ZShFeGVjU3Rh
dGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldEZ1bGxZ
ZWFyKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9G
dW5jU2V0SG91cnMoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRh
dGVQcm90b0Z1bmNTZXRNaWxsaVNlY29uZHMoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRNaW51dGVzKEV4ZWNTdGF0ZSopOworc3RhdGlj
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0TW9udGgoRXhlY1N0YXRlKik7
CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRTZWNvbmRzKEV4
ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0
VGltZShFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3Rv
RnVuY1NldFVUQ0RhdGUoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGRhdGVQcm90b0Z1bmNTZXRVVENGdWxsWWVhcihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFVUQ0hvdXJzKEV4ZWNTdGF0ZSopOworc3Rh
dGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0VVRDTWlsbGlzZWNvbmRz
KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5j
U2V0VVRDTWludXRlcyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZGF0ZVByb3RvRnVuY1NldFVUQ01vbnRoKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0VVRDU2Vjb25kcyhFeGVjU3RhdGUqKTsKK3N0YXRp
YyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFllYXIoRXhlY1N0YXRlKik7
CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb0RhdGVTdHJpbmco
RXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNU
b0dNVFN0cmluZyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0
ZVByb3RvRnVuY1RvTG9jYWxlRGF0ZVN0cmluZyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKEV4ZWNTdGF0ZSopOwor
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9Mb2NhbGVUaW1lU3Ry
aW5nKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9G
dW5jVG9TdHJpbmcoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRh
dGVQcm90b0Z1bmNUb1RpbWVTdHJpbmcoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb1VUQ1N0cmluZyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvSVNPU3RyaW5nKEV4ZWNTdGF0ZSop
Oworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9KU09OKEV4ZWNT
dGF0ZSopOwogCiB9CiAKQEAgLTE0Niw3ICsxNDUsNyBAQCBzdGF0aWMgQ0ZEYXRlRm9ybWF0dGVy
U3R5bGUgc3R5bGVGcm9tQXJnCiAgICAgcmV0dXJuIGRlZmF1bHRTdHlsZTsKIH0KIAotc3RhdGlj
IEpTQ2VsbCogZm9ybWF0TG9jYWxlRGF0ZShFeGVjU3RhdGUqIGV4ZWMsIERhdGVJbnN0YW5jZSos
IGRvdWJsZSB0aW1lSW5NaWxsaXNlY29uZHMsIExvY2FsZURhdGVUaW1lRm9ybWF0IGZvcm1hdCwg
Y29uc3QgQXJnTGlzdCYgYXJncykKK3N0YXRpYyBKU0NlbGwqIGZvcm1hdExvY2FsZURhdGUoRXhl
Y1N0YXRlKiBleGVjLCBEYXRlSW5zdGFuY2UqLCBkb3VibGUgdGltZUluTWlsbGlzZWNvbmRzLCBM
b2NhbGVEYXRlVGltZUZvcm1hdCBmb3JtYXQpCiB7CiAgICAgQ0ZEYXRlRm9ybWF0dGVyU3R5bGUg
ZGF0ZVN0eWxlID0gKGZvcm1hdCAhPSBMb2NhbGVUaW1lID8ga0NGRGF0ZUZvcm1hdHRlckxvbmdT
dHlsZSA6IGtDRkRhdGVGb3JtYXR0ZXJOb1N0eWxlKTsKICAgICBDRkRhdGVGb3JtYXR0ZXJTdHls
ZSB0aW1lU3R5bGUgPSAoZm9ybWF0ICE9IExvY2FsZURhdGUgPyBrQ0ZEYXRlRm9ybWF0dGVyTG9u
Z1N0eWxlIDoga0NGRGF0ZUZvcm1hdHRlck5vU3R5bGUpOwpAQCAtMTU0LDE2ICsxNTMsMTYgQEAg
c3RhdGljIEpTQ2VsbCogZm9ybWF0TG9jYWxlRGF0ZShFeGVjU3RhdAogICAgIGJvb2wgdXNlQ3Vz
dG9tRm9ybWF0ID0gZmFsc2U7CiAgICAgVVN0cmluZyBjdXN0b21Gb3JtYXRTdHJpbmc7CiAKLSAg
ICBVU3RyaW5nIGFyZzBTdHJpbmcgPSBhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpOwotICAgIGlm
IChhcmcwU3RyaW5nID09ICJjdXN0b20iICYmICFhcmdzLmF0KDEpLmlzVW5kZWZpbmVkKCkpIHsK
KyAgICBVU3RyaW5nIGFyZzBTdHJpbmcgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVj
KTsKKyAgICBpZiAoYXJnMFN0cmluZyA9PSAiY3VzdG9tIiAmJiAhZXhlYy0+YXJndW1lbnQoMSku
aXNVbmRlZmluZWQoKSkgewogICAgICAgICB1c2VDdXN0b21Gb3JtYXQgPSB0cnVlOwotICAgICAg
ICBjdXN0b21Gb3JtYXRTdHJpbmcgPSBhcmdzLmF0KDEpLnRvU3RyaW5nKGV4ZWMpOwotICAgIH0g
ZWxzZSBpZiAoZm9ybWF0ID09IExvY2FsZURhdGVBbmRUaW1lICYmICFhcmdzLmF0KDEpLmlzVW5k
ZWZpbmVkKCkpIHsKKyAgICAgICAgY3VzdG9tRm9ybWF0U3RyaW5nID0gZXhlYy0+YXJndW1lbnQo
MSkudG9TdHJpbmcoZXhlYyk7CisgICAgfSBlbHNlIGlmIChmb3JtYXQgPT0gTG9jYWxlRGF0ZUFu
ZFRpbWUgJiYgIWV4ZWMtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkKCkpIHsKICAgICAgICAgZGF0
ZVN0eWxlID0gc3R5bGVGcm9tQXJnU3RyaW5nKGFyZzBTdHJpbmcsIGRhdGVTdHlsZSk7Ci0gICAg
ICAgIHRpbWVTdHlsZSA9IHN0eWxlRnJvbUFyZ1N0cmluZyhhcmdzLmF0KDEpLnRvU3RyaW5nKGV4
ZWMpLCB0aW1lU3R5bGUpOwotICAgIH0gZWxzZSBpZiAoZm9ybWF0ICE9IExvY2FsZVRpbWUgJiYg
IWFyZ3MuYXQoMCkuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgdGltZVN0eWxlID0gc3R5bGVGcm9t
QXJnU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpLCB0aW1lU3R5bGUpOwor
ICAgIH0gZWxzZSBpZiAoZm9ybWF0ICE9IExvY2FsZVRpbWUgJiYgIWV4ZWMtPmFyZ3VtZW50KDAp
LmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIGRhdGVTdHlsZSA9IHN0eWxlRnJvbUFyZ1N0cmluZyhh
cmcwU3RyaW5nLCBkYXRlU3R5bGUpOwotICAgIGVsc2UgaWYgKGZvcm1hdCAhPSBMb2NhbGVEYXRl
ICYmICFhcmdzLmF0KDApLmlzVW5kZWZpbmVkKCkpCisgICAgZWxzZSBpZiAoZm9ybWF0ICE9IExv
Y2FsZURhdGUgJiYgIWV4ZWMtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHRp
bWVTdHlsZSA9IHN0eWxlRnJvbUFyZ1N0cmluZyhhcmcwU3RyaW5nLCB0aW1lU3R5bGUpOwogCiAg
ICAgQ0ZMb2NhbGVSZWYgbG9jYWxlID0gQ0ZMb2NhbGVDb3B5Q3VycmVudCgpOwpAQCAtMjc0LDcg
KzI3Myw3IEBAIHN0YXRpYyBKU0NlbGwqIGZvcm1hdExvY2FsZURhdGUoRXhlY1N0YXQKICAgICBy
ZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsIHRpbWVidWZmZXIpOwogfQogCi1zdGF0aWMg
SlNDZWxsKiBmb3JtYXRMb2NhbGVEYXRlKEV4ZWNTdGF0ZSogZXhlYywgRGF0ZUluc3RhbmNlKiBk
YXRlT2JqZWN0LCBkb3VibGUsIExvY2FsZURhdGVUaW1lRm9ybWF0IGZvcm1hdCwgY29uc3QgQXJn
TGlzdCYpCitzdGF0aWMgSlNDZWxsKiBmb3JtYXRMb2NhbGVEYXRlKEV4ZWNTdGF0ZSogZXhlYywg
RGF0ZUluc3RhbmNlKiBkYXRlT2JqZWN0LCBkb3VibGUsIExvY2FsZURhdGVUaW1lRm9ybWF0IGZv
cm1hdCkKIHsKICAgICBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0ZVRpbWUg
PSBkYXRlT2JqZWN0LT5ncmVnb3JpYW5EYXRlVGltZShleGVjKTsKICAgICBpZiAoIWdyZWdvcmlh
bkRhdGVUaW1lKQpAQCAtMjg4LDEyICsyODcsMTIgQEAgc3RhdGljIEpTQ2VsbCogZm9ybWF0TG9j
YWxlRGF0ZShFeGVjU3RhdAogLy8gbXMgKHJlcHJlc2VudGluZyBtaWxsaXNlY29uZHMpIGFuZCB0
IChyZXByZXNlbnRpbmcgdGhlIHJlc3Qgb2YgdGhlIGRhdGUgc3RydWN0dXJlKSBhcHByb3ByaWF0
ZWx5LgogLy8KIC8vIEZvcm1hdCBvZiBtZW1iZXIgZnVuY3Rpb246IGYoW2hvdXIsXSBbbWluLF0g
W3NlYyxdIFttc10pCi1zdGF0aWMgYm9vbCBmaWxsU3RydWN0dXJlc1VzaW5nVGltZUFyZ3MoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBpbnQgbWF4QXJncywgZG91YmxlKiBt
cywgR3JlZ29yaWFuRGF0ZVRpbWUqIHQpCitzdGF0aWMgYm9vbCBmaWxsU3RydWN0dXJlc1VzaW5n
VGltZUFyZ3MoRXhlY1N0YXRlKiBleGVjLCBpbnQgbWF4QXJncywgZG91YmxlKiBtcywgR3JlZ29y
aWFuRGF0ZVRpbWUqIHQpCiB7CiAgICAgZG91YmxlIG1pbGxpc2Vjb25kcyA9IDA7CiAgICAgYm9v
bCBvayA9IHRydWU7CiAgICAgaW50IGlkeCA9IDA7Ci0gICAgaW50IG51bUFyZ3MgPSBhcmdzLnNp
emUoKTsKKyAgICBpbnQgbnVtQXJncyA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKICAgICAKICAg
ICAvLyBKUyBhbGxvd3MgZXh0cmEgdHJhaWxpbmcgYXJndW1lbnRzIC0tIGlnbm9yZSB0aGVtCiAg
ICAgaWYgKG51bUFyZ3MgPiBtYXhBcmdzKQpAQCAtMzAyLDE5ICszMDEsMTkgQEAgc3RhdGljIGJv
b2wgZmlsbFN0cnVjdHVyZXNVc2luZ1RpbWVBcmdzKAogICAgIC8vIGhvdXJzCiAgICAgaWYgKG1h
eEFyZ3MgPj0gNCAmJiBpZHggPCBudW1BcmdzKSB7CiAgICAgICAgIHQtPmhvdXIgPSAwOwotICAg
ICAgICBtaWxsaXNlY29uZHMgKz0gYXJncy5hdChpZHgrKykudG9JbnQzMihleGVjLCBvaykgKiBt
c1BlckhvdXI7CisgICAgICAgIG1pbGxpc2Vjb25kcyArPSBleGVjLT5hcmd1bWVudChpZHgrKyku
dG9JbnQzMihleGVjLCBvaykgKiBtc1BlckhvdXI7CiAgICAgfQogCiAgICAgLy8gbWludXRlcwog
ICAgIGlmIChtYXhBcmdzID49IDMgJiYgaWR4IDwgbnVtQXJncyAmJiBvaykgewogICAgICAgICB0
LT5taW51dGUgPSAwOwotICAgICAgICBtaWxsaXNlY29uZHMgKz0gYXJncy5hdChpZHgrKykudG9J
bnQzMihleGVjLCBvaykgKiBtc1Blck1pbnV0ZTsKKyAgICAgICAgbWlsbGlzZWNvbmRzICs9IGV4
ZWMtPmFyZ3VtZW50KGlkeCsrKS50b0ludDMyKGV4ZWMsIG9rKSAqIG1zUGVyTWludXRlOwogICAg
IH0KICAgICAKICAgICAvLyBzZWNvbmRzCiAgICAgaWYgKG1heEFyZ3MgPj0gMiAmJiBpZHggPCBu
dW1BcmdzICYmIG9rKSB7CiAgICAgICAgIHQtPnNlY29uZCA9IDA7Ci0gICAgICAgIG1pbGxpc2Vj
b25kcyArPSBhcmdzLmF0KGlkeCsrKS50b0ludDMyKGV4ZWMsIG9rKSAqIG1zUGVyU2Vjb25kOwor
ICAgICAgICBtaWxsaXNlY29uZHMgKz0gZXhlYy0+YXJndW1lbnQoaWR4KyspLnRvSW50MzIoZXhl
Yywgb2spICogbXNQZXJTZWNvbmQ7CiAgICAgfQogICAgIAogICAgIGlmICghb2spCkBAIC0zMjIs
NyArMzIxLDcgQEAgc3RhdGljIGJvb2wgZmlsbFN0cnVjdHVyZXNVc2luZ1RpbWVBcmdzKAogICAg
ICAgICAKICAgICAvLyBtaWxsaXNlY29uZHMKICAgICBpZiAoaWR4IDwgbnVtQXJncykgewotICAg
ICAgICBkb3VibGUgbWlsbGlzID0gYXJncy5hdChpZHgpLnRvTnVtYmVyKGV4ZWMpOworICAgICAg
ICBkb3VibGUgbWlsbGlzID0gZXhlYy0+YXJndW1lbnQoaWR4KS50b051bWJlcihleGVjKTsKICAg
ICAgICAgb2sgPSBpc2Zpbml0ZShtaWxsaXMpOwogICAgICAgICBtaWxsaXNlY29uZHMgKz0gbWls
bGlzOwogICAgIH0gZWxzZQpAQCAtMzM2LDExICszMzUsMTEgQEAgc3RhdGljIGJvb2wgZmlsbFN0
cnVjdHVyZXNVc2luZ1RpbWVBcmdzKAogLy8gbXMgKHJlcHJlc2VudGluZyBtaWxsaXNlY29uZHMp
IGFuZCB0IChyZXByZXNlbnRpbmcgdGhlIHJlc3Qgb2YgdGhlIGRhdGUgc3RydWN0dXJlKSBhcHBy
b3ByaWF0ZWx5LgogLy8KIC8vIEZvcm1hdCBvZiBtZW1iZXIgZnVuY3Rpb246IGYoW3llYXJzLF0g
W21vbnRocyxdIFtkYXlzXSkKLXN0YXRpYyBib29sIGZpbGxTdHJ1Y3R1cmVzVXNpbmdEYXRlQXJn
cyhFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIGludCBtYXhBcmdzLCBkb3Vi
bGUgKm1zLCBHcmVnb3JpYW5EYXRlVGltZSAqdCkKK3N0YXRpYyBib29sIGZpbGxTdHJ1Y3R1cmVz
VXNpbmdEYXRlQXJncyhFeGVjU3RhdGUgKmV4ZWMsIGludCBtYXhBcmdzLCBkb3VibGUgKm1zLCBH
cmVnb3JpYW5EYXRlVGltZSAqdCkKIHsKICAgICBpbnQgaWR4ID0gMDsKICAgICBib29sIG9rID0g
dHJ1ZTsKLSAgICBpbnQgbnVtQXJncyA9IGFyZ3Muc2l6ZSgpOworICAgIGludCBudW1BcmdzID0g
ZXhlYy0+YXJndW1lbnRDb3VudCgpOwogICAKICAgICAvLyBKUyBhbGxvd3MgZXh0cmEgdHJhaWxp
bmcgYXJndW1lbnRzIC0tIGlnbm9yZSB0aGVtCiAgICAgaWYgKG51bUFyZ3MgPiBtYXhBcmdzKQpA
QCAtMzQ4LDE2ICszNDcsMTYgQEAgc3RhdGljIGJvb2wgZmlsbFN0cnVjdHVyZXNVc2luZ0RhdGVB
cmdzKAogICAKICAgICAvLyB5ZWFycwogICAgIGlmIChtYXhBcmdzID49IDMgJiYgaWR4IDwgbnVt
QXJncykKLSAgICAgICAgdC0+eWVhciA9IGFyZ3MuYXQoaWR4KyspLnRvSW50MzIoZXhlYywgb2sp
IC0gMTkwMDsKKyAgICAgICAgdC0+eWVhciA9IGV4ZWMtPmFyZ3VtZW50KGlkeCsrKS50b0ludDMy
KGV4ZWMsIG9rKSAtIDE5MDA7CiAgICAgCiAgICAgLy8gbW9udGhzCiAgICAgaWYgKG1heEFyZ3Mg
Pj0gMiAmJiBpZHggPCBudW1BcmdzICYmIG9rKSAgIAotICAgICAgICB0LT5tb250aCA9IGFyZ3Mu
YXQoaWR4KyspLnRvSW50MzIoZXhlYywgb2spOworICAgICAgICB0LT5tb250aCA9IGV4ZWMtPmFy
Z3VtZW50KGlkeCsrKS50b0ludDMyKGV4ZWMsIG9rKTsKICAgICAKICAgICAvLyBkYXlzCiAgICAg
aWYgKGlkeCA8IG51bUFyZ3MgJiYgb2spIHsgICAKICAgICAgICAgdC0+bW9udGhEYXkgPSAwOwot
ICAgICAgICAqbXMgKz0gYXJncy5hdChpZHgpLnRvSW50MzIoZXhlYywgb2spICogbXNQZXJEYXk7
CisgICAgICAgICptcyArPSBleGVjLT5hcmd1bWVudChpZHgpLnRvSW50MzIoZXhlYywgb2spICog
bXNQZXJEYXk7CiAgICAgfQogICAgIAogICAgIHJldHVybiBvazsKQEAgLTQzOCw4ICs0MzcsOSBA
QCBib29sIERhdGVQcm90b3R5cGU6OmdldE93blByb3BlcnR5RGVzY3JpCiAKIC8vIEZ1bmN0aW9u
cwogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhl
YykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAg
ICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIApAQCAtNDU1LDggKzQ1NSw5IEBA
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9TdHIKICAgICByZXR1cm4ganNN
YWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCBkYXRlLCAiICIsIHRpbWUpOwogfQogCi1KU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvVVRDU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvVVRDU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKIHsK
KyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAo
IXRoaXNWYWx1ZS5pbmhlcml0cygmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0dXJu
IHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIApAQCAtNDcyLDggKzQ3Myw5IEBAIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9VVEMKICAgICByZXR1cm4ganNNYWtlTm9u
dHJpdmlhbFN0cmluZyhleGVjLCBkYXRlLCAiICIsIHRpbWUpOwogfQogCi1KU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvSVNPU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZGF0ZVByb3RvRnVuY1RvSVNPU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBK
U1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAoIXRoaXNW
YWx1ZS5pbmhlcml0cygmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKICAgICAKQEAgLTQ5MCw4ICs0OTIsOSBAQCBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvSVNPCiAgICAgcmV0dXJuIGpzTm9udHJpdmlh
bFN0cmluZyhleGVjLCBidWZmZXIpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVBy
b3RvRnVuY1RvRGF0ZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0
aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90
b0Z1bmNUb0RhdGVTdHJpbmcoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRz
KCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBU
eXBlRXJyb3IpOwogCkBAIC01MDUsOCArNTA4LDkgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRh
dGVQcm90b0Z1bmNUb0RhdAogICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgZGF0
ZSk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9UaW1lU3RyaW5n
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvVGltZVN0cmluZyhF
eGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhp
c1ZhbHVlKCk7CiAgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkRhdGVJbnN0YW5jZTo6aW5m
bykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKQEAgLTUy
MCw0MyArNTI0LDQ4IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9UaW0K
ICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsIHRpbWUpOwogfQogCi1KU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRl
KiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgp
OwogICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAg
ICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCiAgICAgRGF0ZUluc3Rh
bmNlKiB0aGlzRGF0ZU9iaiA9IGFzRGF0ZUluc3RhbmNlKHRoaXNWYWx1ZSk7IAotICAgIHJldHVy
biBmb3JtYXRMb2NhbGVEYXRlKGV4ZWMsIHRoaXNEYXRlT2JqLCB0aGlzRGF0ZU9iai0+aW50ZXJu
YWxOdW1iZXIoKSwgTG9jYWxlRGF0ZUFuZFRpbWUsIGFyZ3MpOworICAgIHJldHVybiBmb3JtYXRM
b2NhbGVEYXRlKGV4ZWMsIHRoaXNEYXRlT2JqLCB0aGlzRGF0ZU9iai0+aW50ZXJuYWxOdW1iZXIo
KSwgTG9jYWxlRGF0ZUFuZFRpbWUpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVBy
b3RvRnVuY1RvTG9jYWxlRGF0ZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNW
YWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZGF0ZVByb3RvRnVuY1RvTG9jYWxlRGF0ZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiB7Cisg
ICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKCF0
aGlzVmFsdWUuaW5oZXJpdHMoJkRhdGVJbnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKICAgICBEYXRlSW5zdGFuY2UqIHRoaXNEYXRl
T2JqID0gYXNEYXRlSW5zdGFuY2UodGhpc1ZhbHVlKTsgCi0gICAgcmV0dXJuIGZvcm1hdExvY2Fs
ZURhdGUoZXhlYywgdGhpc0RhdGVPYmosIHRoaXNEYXRlT2JqLT5pbnRlcm5hbE51bWJlcigpLCBM
b2NhbGVEYXRlLCBhcmdzKTsKKyAgICByZXR1cm4gZm9ybWF0TG9jYWxlRGF0ZShleGVjLCB0aGlz
RGF0ZU9iaiwgdGhpc0RhdGVPYmotPmludGVybmFsTnVtYmVyKCksIExvY2FsZURhdGUpOwogfQog
Ci1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvTG9jYWxlVGltZVN0cmluZyhF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvTG9jYWxlVGlt
ZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVj
LT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkRhdGVJbnN0
YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7
CiAKICAgICBEYXRlSW5zdGFuY2UqIHRoaXNEYXRlT2JqID0gYXNEYXRlSW5zdGFuY2UodGhpc1Zh
bHVlKTsgCi0gICAgcmV0dXJuIGZvcm1hdExvY2FsZURhdGUoZXhlYywgdGhpc0RhdGVPYmosIHRo
aXNEYXRlT2JqLT5pbnRlcm5hbE51bWJlcigpLCBMb2NhbGVUaW1lLCBhcmdzKTsKKyAgICByZXR1
cm4gZm9ybWF0TG9jYWxlRGF0ZShleGVjLCB0aGlzRGF0ZU9iaiwgdGhpc0RhdGVPYmotPmludGVy
bmFsTnVtYmVyKCksIExvY2FsZVRpbWUpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0
ZVByb3RvRnVuY0dldFRpbWUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhp
c1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9G
dW5jR2V0VGltZShFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBl
eGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkRhdGVJ
bnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJv
cik7CiAKICAgICByZXR1cm4gYXNEYXRlSW5zdGFuY2UodGhpc1ZhbHVlKS0+aW50ZXJuYWxWYWx1
ZSgpOyAKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRGdWxsWWVh
cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRGdWxsWWVhcihF
eGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhp
c1ZhbHVlKCk7CiAgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkRhdGVJbnN0YW5jZTo6aW5m
bykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKQEAgLTU2
OCw4ICs1NzcsOSBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldEZ1CiAg
ICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIDE5MDAgKyBncmVnb3JpYW5EYXRlVGltZS0+eWVhcik7
CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VVRDRnVsbFllYXIo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdM
aXN0JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VVRDRnVsbFllYXIo
RXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRo
aXNWYWx1ZSgpOwogICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6Omlu
Zm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCkBAIC01
ODEsOCArNTkxLDkgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVAog
ICAgIHJldHVybiBqc051bWJlcihleGVjLCAxOTAwICsgZ3JlZ29yaWFuRGF0ZVRpbWUtPnllYXIp
OwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvR01UU3RyaW5nKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlz
dCYpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvR01UU3RyaW5nKEV4ZWNT
dGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFs
dWUoKTsKICAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmRGF0ZUluc3RhbmNlOjppbmZvKSkK
ICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIApAQCAtNTk4LDgg
KzYwOSw5IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9HTVQKICAgICBy
ZXR1cm4ganNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCBkYXRlLCAiICIsIHRpbWUpOwogfQog
Ci1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldE1vbnRoKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldE1vbnRoKEV4ZWNTdGF0ZSogZXhlYykK
IHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBp
ZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIApAQCAtNjExLDggKzYyMyw5IEBAIEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0TW8KICAgICByZXR1cm4ganNOdW1i
ZXIoZXhlYywgZ3JlZ29yaWFuRGF0ZVRpbWUtPm1vbnRoKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENNb250aChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGRhdGVQcm90b0Z1bmNHZXRVVENNb250aChFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNW
YWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKCF0aGlzVmFs
dWUuaW5oZXJpdHMoJkRhdGVJbnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKQEAgLTYyNCw4ICs2MzcsOSBAQCBKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVUCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGdy
ZWdvcmlhbkRhdGVUaW1lLT5tb250aCk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRl
UHJvdG9GdW5jR2V0RGF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlz
VmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1
bmNHZXREYXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4
ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmRGF0ZUlu
c3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9y
KTsKIApAQCAtNjM3LDggKzY1MSw5IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9G
dW5jR2V0RGEKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgZ3JlZ29yaWFuRGF0ZVRpbWUtPm1v
bnRoRGF5KTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENE
YXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3Qg
QXJnTGlzdCYpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVUQ0RhdGUo
RXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRo
aXNWYWx1ZSgpOwogICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6Omlu
Zm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCkBAIC02
NTAsOCArNjY1LDkgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVAog
ICAgIHJldHVybiBqc051bWJlcihleGVjLCBncmVnb3JpYW5EYXRlVGltZS0+bW9udGhEYXkpOwog
fQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldERheShFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXREYXkoRXhlY1N0YXRlKiBleGVjKQog
eworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlm
ICghdGhpc1ZhbHVlLmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCkBAIC02NjMsOCArNjc5LDkgQEAgSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXREYQogICAgIHJldHVybiBqc051bWJl
cihleGVjLCBncmVnb3JpYW5EYXRlVGltZS0+d2Vla0RheSk7CiB9CiAKLUpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VVRDRGF5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
LCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZGF0ZVByb3RvRnVuY0dldFVUQ0RheShFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1
ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKCF0aGlzVmFsdWUu
aW5oZXJpdHMoJkRhdGVJbnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KGV4ZWMsIFR5cGVFcnJvcik7CiAKQEAgLTY3Niw4ICs2OTMsOSBAQCBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZGF0ZVByb3RvRnVuY0dldFVUCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGdyZWdv
cmlhbkRhdGVUaW1lLT53ZWVrRGF5KTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQ
cm90b0Z1bmNHZXRIb3VycyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlz
VmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1
bmNHZXRIb3VycyhFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBl
eGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkRhdGVJ
bnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJv
cik7CiAKQEAgLTY4OSw4ICs3MDcsOSBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3Rv
RnVuY0dldEhvCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGdyZWdvcmlhbkRhdGVUaW1lLT5o
b3VyKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENIb3Vy
cyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENIb3VycyhF
eGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhp
c1ZhbHVlKCk7CiAgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkRhdGVJbnN0YW5jZTo6aW5m
bykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKQEAgLTcw
Miw4ICs3MjEsOSBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVUCiAg
ICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGdyZWdvcmlhbkRhdGVUaW1lLT5ob3VyKTsKIH0KIAot
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRNaW51dGVzKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldE1pbnV0ZXMoRXhlY1N0YXRlKiBleGVj
KQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAg
IGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCkBAIC03MTUsOCArNzM1LDkgQEAg
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRNaQogICAgIHJldHVybiBqc051
bWJlcihleGVjLCBncmVnb3JpYW5EYXRlVGltZS0+bWludXRlKTsKIH0KIAotSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENNaW51dGVzKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVUQ01pbnV0ZXMoRXhlY1N0YXRlKiBleGVjKQogewor
ICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICgh
dGhpc1ZhbHVlLmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCkBAIC03MjgsOCArNzQ5LDkgQEAgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVAogICAgIHJldHVybiBqc051bWJlcihl
eGVjLCBncmVnb3JpYW5EYXRlVGltZS0+bWludXRlKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGRhdGVQcm90b0Z1bmNHZXRTZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBK
U1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZGF0ZVByb3RvRnVuY0dldFNlY29uZHMoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUg
dGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICghdGhpc1ZhbHVlLmlu
aGVyaXRzKCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihl
eGVjLCBUeXBlRXJyb3IpOwogCkBAIC03NDEsOCArNzYzLDkgQEAgSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGRhdGVQcm90b0Z1bmNHZXRTZQogICAgIHJldHVybiBqc051bWJlcihleGVjLCBncmVnb3Jp
YW5EYXRlVGltZS0+c2Vjb25kKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90
b0Z1bmNHZXRVVENTZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRo
aXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3Rv
RnVuY0dldFVUQ1NlY29uZHMoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRz
KCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBU
eXBlRXJyb3IpOwogCkBAIC03NTQsOCArNzc3LDkgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRh
dGVQcm90b0Z1bmNHZXRVVAogICAgIHJldHVybiBqc051bWJlcihleGVjLCBncmVnb3JpYW5EYXRl
VGltZS0+c2Vjb25kKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNH
ZXRNaWxsaVNlY29uZHMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1Zh
bHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5j
R2V0TWlsbGlTZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1
ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygm
RGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlw
ZUVycm9yKTsKIApAQCAtNzY5LDggKzc5Myw5IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRl
UHJvdG9GdW5jR2V0TWkKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgbXMpOwogfQogCi1KU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVUQ01pbGxpc2Vjb25kcyhFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENNaWxsaXNlY29uZHMoRXhl
Y1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNW
YWx1ZSgpOwogICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6OmluZm8p
KQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCkBAIC03ODQs
OCArODA5LDkgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVAogICAg
IHJldHVybiBqc051bWJlcihleGVjLCBtcyk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBk
YXRlUHJvdG9GdW5jR2V0VGltZXpvbmVPZmZzZXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBkYXRlUHJvdG9GdW5jR2V0VGltZXpvbmVPZmZzZXQoRXhlY1N0YXRlKiBleGVjKQogeworICAg
IEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICghdGhp
c1ZhbHVlLmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhy
b3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCkBAIC03OTcsMjggKzgyMywzMCBAQCBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFRpCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4
ZWMsIC1ncmVnb3JpYW5EYXRlVGltZS0+dXRjT2Zmc2V0IC8gbWludXRlc1BlckhvdXIpOwogfQog
Ci1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFRpbWUoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRUaW1lKEV4ZWNTdGF0ZSogZXhl
YykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAg
ICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAogICAgIERhdGVJbnN0YW5jZSog
dGhpc0RhdGVPYmogPSBhc0RhdGVJbnN0YW5jZSh0aGlzVmFsdWUpOyAKIAotICAgIGRvdWJsZSBt
aWxsaSA9IHRpbWVDbGlwKGFyZ3MuYXQoMCkudG9OdW1iZXIoZXhlYykpOworICAgIGRvdWJsZSBt
aWxsaSA9IHRpbWVDbGlwKGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKTsKICAgICBK
U1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGV4ZWMsIG1pbGxpKTsKICAgICB0aGlzRGF0ZU9iai0+
c2V0SW50ZXJuYWxWYWx1ZShyZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRp
YyBKU1ZhbHVlIHNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIGludCBudW1BcmdzVG9Vc2UsIGJvb2wg
aW5wdXRJc1VUQykKK3N0YXRpYyBKU1ZhbHVlIHNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKEV4ZWNT
dGF0ZSogZXhlYywgaW50IG51bUFyZ3NUb1VzZSwgYm9vbCBpbnB1dElzVVRDKQogeworICAgIEpT
VmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICghdGhpc1Zh
bHVlLmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dF
cnJvcihleGVjLCBUeXBlRXJyb3IpOwogCiAgICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9
IGFzRGF0ZUluc3RhbmNlKHRoaXNWYWx1ZSk7CiAgICAgZG91YmxlIG1pbGxpID0gdGhpc0RhdGVP
YmotPmludGVybmFsTnVtYmVyKCk7CiAgICAgCi0gICAgaWYgKGFyZ3MuaXNFbXB0eSgpIHx8IGlz
bmFuKG1pbGxpKSkgeworICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpIHx8IGlzbmFuKG1p
bGxpKSkgewogICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTmFOKGV4ZWMpOwogICAgICAgICB0
aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShyZXN1bHQpOwogICAgICAgICByZXR1cm4gcmVz
dWx0OwpAQCAtODM1LDcgKzg2Myw3IEBAIHN0YXRpYyBKU1ZhbHVlIHNldE5ld1ZhbHVlRnJvbVRp
bWVBcmdzKEUKIAogICAgIEdyZWdvcmlhbkRhdGVUaW1lIGdyZWdvcmlhbkRhdGVUaW1lOwogICAg
IGdyZWdvcmlhbkRhdGVUaW1lLmNvcHlGcm9tKCpvdGhlcik7Ci0gICAgaWYgKCFmaWxsU3RydWN0
dXJlc1VzaW5nVGltZUFyZ3MoZXhlYywgYXJncywgbnVtQXJnc1RvVXNlLCAmbXMsICZncmVnb3Jp
YW5EYXRlVGltZSkpIHsKKyAgICBpZiAoIWZpbGxTdHJ1Y3R1cmVzVXNpbmdUaW1lQXJncyhleGVj
LCBudW1BcmdzVG9Vc2UsICZtcywgJmdyZWdvcmlhbkRhdGVUaW1lKSkgewogICAgICAgICBKU1Zh
bHVlIHJlc3VsdCA9IGpzTmFOKGV4ZWMpOwogICAgICAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJu
YWxWYWx1ZShyZXN1bHQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtODQ2LDEzICs4NzQs
MTQgQEAgc3RhdGljIEpTVmFsdWUgc2V0TmV3VmFsdWVGcm9tVGltZUFyZ3MoRQogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlIHNldE5ld1ZhbHVlRnJvbURhdGVBcmdzKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIGlu
dCBudW1BcmdzVG9Vc2UsIGJvb2wgaW5wdXRJc1VUQykKK3N0YXRpYyBKU1ZhbHVlIHNldE5ld1Zh
bHVlRnJvbURhdGVBcmdzKEV4ZWNTdGF0ZSogZXhlYywgaW50IG51bUFyZ3NUb1VzZSwgYm9vbCBp
bnB1dElzVVRDKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1
ZSgpOwogICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6OmluZm8pKQog
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCiAgICAgRGF0ZUlu
c3RhbmNlKiB0aGlzRGF0ZU9iaiA9IGFzRGF0ZUluc3RhbmNlKHRoaXNWYWx1ZSk7Ci0gICAgaWYg
KGFyZ3MuaXNFbXB0eSgpKSB7CisgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpIHsKICAg
ICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc05hTihleGVjKTsKICAgICAgICAgdGhpc0RhdGVPYmot
PnNldEludGVybmFsVmFsdWUocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTg3
NCw3ICs5MDMsNyBAQCBzdGF0aWMgSlNWYWx1ZSBzZXROZXdWYWx1ZUZyb21EYXRlQXJncyhFCiAg
ICAgICAgIGdyZWdvcmlhbkRhdGVUaW1lLmNvcHlGcm9tKCpvdGhlcik7CiAgICAgfQogICAgIAot
ICAgIGlmICghZmlsbFN0cnVjdHVyZXNVc2luZ0RhdGVBcmdzKGV4ZWMsIGFyZ3MsIG51bUFyZ3NU
b1VzZSwgJm1zLCAmZ3JlZ29yaWFuRGF0ZVRpbWUpKSB7CisgICAgaWYgKCFmaWxsU3RydWN0dXJl
c1VzaW5nRGF0ZUFyZ3MoZXhlYywgbnVtQXJnc1RvVXNlLCAmbXMsICZncmVnb3JpYW5EYXRlVGlt
ZSkpIHsKICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc05hTihleGVjKTsKICAgICAgICAgdGhp
c0RhdGVPYmotPnNldEludGVybmFsVmFsdWUocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKQEAgLTg4NSw5NyArOTE0LDk4IEBAIHN0YXRpYyBKU1ZhbHVlIHNldE5ld1ZhbHVlRnJvbURh
dGVBcmdzKEUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZGF0ZVByb3RvRnVuY1NldE1pbGxpU2Vjb25kcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
SlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZGF0ZVByb3RvRnVuY1NldE1pbGxpU2Vjb25kcyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgY29uc3QgYm9vbCBpbnB1dElzVVRDID0gZmFsc2U7Ci0gICAgcmV0dXJuIHNldE5ld1ZhbHVl
RnJvbVRpbWVBcmdzKGV4ZWMsIHRoaXNWYWx1ZSwgYXJncywgMSwgaW5wdXRJc1VUQyk7CisgICAg
cmV0dXJuIHNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKGV4ZWMsIDEsIGlucHV0SXNVVEMpOwogfQog
Ci1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFVUQ01pbGxpc2Vjb25kcyhF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFVUQ01pbGxp
c2Vjb25kcyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgY29uc3QgYm9vbCBpbnB1dElzVVRDID0g
dHJ1ZTsKLSAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tVGltZUFyZ3MoZXhlYywgdGhpc1ZhbHVl
LCBhcmdzLCAxLCBpbnB1dElzVVRDKTsKKyAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tVGltZUFy
Z3MoZXhlYywgMSwgaW5wdXRJc1VUQyk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRl
UHJvdG9GdW5jU2V0U2Vjb25kcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0
aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0
ZVByb3RvRnVuY1NldFNlY29uZHMoRXhlY1N0YXRlKiBleGVjKQogewogICAgIGNvbnN0IGJvb2wg
aW5wdXRJc1VUQyA9IGZhbHNlOwotICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21UaW1lQXJncyhl
eGVjLCB0aGlzVmFsdWUsIGFyZ3MsIDIsIGlucHV0SXNVVEMpOworICAgIHJldHVybiBzZXROZXdW
YWx1ZUZyb21UaW1lQXJncyhleGVjLCAyLCBpbnB1dElzVVRDKTsKIH0KIAotSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRVVENTZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0VVRDU2Vjb25kcyhFeGVjU3RhdGUqIGV4ZWMp
CiB7CiAgICAgY29uc3QgYm9vbCBpbnB1dElzVVRDID0gdHJ1ZTsKLSAgICByZXR1cm4gc2V0TmV3
VmFsdWVGcm9tVGltZUFyZ3MoZXhlYywgdGhpc1ZhbHVlLCBhcmdzLCAyLCBpbnB1dElzVVRDKTsK
KyAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tVGltZUFyZ3MoZXhlYywgMiwgaW5wdXRJc1VUQyk7
CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0TWludXRlcyhFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldE1pbnV0ZXMoRXhl
Y1N0YXRlKiBleGVjKQogewogICAgIGNvbnN0IGJvb2wgaW5wdXRJc1VUQyA9IGZhbHNlOwotICAg
IHJldHVybiBzZXROZXdWYWx1ZUZyb21UaW1lQXJncyhleGVjLCB0aGlzVmFsdWUsIGFyZ3MsIDMs
IGlucHV0SXNVVEMpOworICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21UaW1lQXJncyhleGVjLCAz
LCBpbnB1dElzVVRDKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNT
ZXRVVENNaW51dGVzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9G
dW5jU2V0VVRDTWludXRlcyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgY29uc3QgYm9vbCBpbnB1
dElzVVRDID0gdHJ1ZTsKLSAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tVGltZUFyZ3MoZXhlYywg
dGhpc1ZhbHVlLCBhcmdzLCAzLCBpbnB1dElzVVRDKTsKKyAgICByZXR1cm4gc2V0TmV3VmFsdWVG
cm9tVGltZUFyZ3MoZXhlYywgMywgaW5wdXRJc1VUQyk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBkYXRlUHJvdG9GdW5jU2V0SG91cnMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpT
VmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGRhdGVQcm90b0Z1bmNTZXRIb3VycyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgY29uc3Qg
Ym9vbCBpbnB1dElzVVRDID0gZmFsc2U7Ci0gICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbVRpbWVB
cmdzKGV4ZWMsIHRoaXNWYWx1ZSwgYXJncywgNCwgaW5wdXRJc1VUQyk7CisgICAgcmV0dXJuIHNl
dE5ld1ZhbHVlRnJvbVRpbWVBcmdzKGV4ZWMsIDQsIGlucHV0SXNVVEMpOwogfQogCi1KU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFVUQ0hvdXJzKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0VVRDSG91cnMoRXhlY1N0YXRlKiBleGVj
KQogewogICAgIGNvbnN0IGJvb2wgaW5wdXRJc1VUQyA9IHRydWU7Ci0gICAgcmV0dXJuIHNldE5l
d1ZhbHVlRnJvbVRpbWVBcmdzKGV4ZWMsIHRoaXNWYWx1ZSwgYXJncywgNCwgaW5wdXRJc1VUQyk7
CisgICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKGV4ZWMsIDQsIGlucHV0SXNVVEMp
OwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldERhdGUoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXREYXRlKEV4ZWNTdGF0
ZSogZXhlYykKIHsKICAgICBjb25zdCBib29sIGlucHV0SXNVVEMgPSBmYWxzZTsKLSAgICByZXR1
cm4gc2V0TmV3VmFsdWVGcm9tRGF0ZUFyZ3MoZXhlYywgdGhpc1ZhbHVlLCBhcmdzLCAxLCBpbnB1
dElzVVRDKTsKKyAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tRGF0ZUFyZ3MoZXhlYywgMSwgaW5w
dXRJc1VUQyk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0VVRD
RGF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFVU
Q0RhdGUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIGNvbnN0IGJvb2wgaW5wdXRJc1VUQyA9IHRy
dWU7Ci0gICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbURhdGVBcmdzKGV4ZWMsIHRoaXNWYWx1ZSwg
YXJncywgMSwgaW5wdXRJc1VUQyk7CisgICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbURhdGVBcmdz
KGV4ZWMsIDEsIGlucHV0SXNVVEMpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVBy
b3RvRnVuY1NldE1vbnRoKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJv
dG9GdW5jU2V0TW9udGgoRXhlY1N0YXRlKiBleGVjKQogewogICAgIGNvbnN0IGJvb2wgaW5wdXRJ
c1VUQyA9IGZhbHNlOwotICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21EYXRlQXJncyhleGVjLCB0
aGlzVmFsdWUsIGFyZ3MsIDIsIGlucHV0SXNVVEMpOworICAgIHJldHVybiBzZXROZXdWYWx1ZUZy
b21EYXRlQXJncyhleGVjLCAyLCBpbnB1dElzVVRDKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGRhdGVQcm90b0Z1bmNTZXRVVENNb250aChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
SlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZGF0ZVByb3RvRnVuY1NldFVUQ01vbnRoKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBj
b25zdCBib29sIGlucHV0SXNVVEMgPSB0cnVlOwotICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21E
YXRlQXJncyhleGVjLCB0aGlzVmFsdWUsIGFyZ3MsIDIsIGlucHV0SXNVVEMpOworICAgIHJldHVy
biBzZXROZXdWYWx1ZUZyb21EYXRlQXJncyhleGVjLCAyLCBpbnB1dElzVVRDKTsKIH0KIAotSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRGdWxsWWVhcihFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldEZ1bGxZZWFyKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBjb25zdCBib29sIGlucHV0SXNVVEMgPSBmYWxzZTsKLSAgICByZXR1cm4g
c2V0TmV3VmFsdWVGcm9tRGF0ZUFyZ3MoZXhlYywgdGhpc1ZhbHVlLCBhcmdzLCAzLCBpbnB1dElz
VVRDKTsKKyAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tRGF0ZUFyZ3MoZXhlYywgMywgaW5wdXRJ
c1VUQyk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0VVRDRnVs
bFllYXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRV
VENGdWxsWWVhcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgY29uc3QgYm9vbCBpbnB1dElzVVRD
ID0gdHJ1ZTsKLSAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tRGF0ZUFyZ3MoZXhlYywgdGhpc1Zh
bHVlLCBhcmdzLCAzLCBpbnB1dElzVVRDKTsKKyAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tRGF0
ZUFyZ3MoZXhlYywgMywgaW5wdXRJc1VUQyk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBk
YXRlUHJvdG9GdW5jU2V0WWVhcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0
aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0
ZVByb3RvRnVuY1NldFllYXIoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRz
KCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBU
eXBlRXJyb3IpOwogCiAgICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9IGFzRGF0ZUluc3Rh
bmNlKHRoaXNWYWx1ZSk7ICAgICAKLSAgICBpZiAoYXJncy5pc0VtcHR5KCkpIHsgCisgICAgaWYg
KCFleGVjLT5hcmd1bWVudENvdW50KCkpIHsgCiAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNO
YU4oZXhlYyk7CiAgICAgICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKHJlc3VsdCk7
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC05OTcsNyArMTAyNyw3IEBAIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0WWUKICAgICB9CiAgICAgCiAgICAgYm9vbCBvayA9
IHRydWU7Ci0gICAgaW50MzJfdCB5ZWFyID0gYXJncy5hdCgwKS50b0ludDMyKGV4ZWMsIG9rKTsK
KyAgICBpbnQzMl90IHllYXIgPSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMsIG9rKTsK
ICAgICBpZiAoIW9rKSB7CiAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOYU4oZXhlYyk7CiAg
ICAgICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKHJlc3VsdCk7CkBAIC0xMDEwLDgg
KzEwNDAsOSBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFllCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNH
ZXRZZWFyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFllYXIo
RXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRo
aXNWYWx1ZSgpOwogICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6Omlu
Zm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCkBAIC0x
MDI1LDggKzEwNTYsOSBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFll
CiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGdyZWdvcmlhbkRhdGVUaW1lLT55ZWFyKTsKIH0K
IAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb0pTT04oRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9KU09OKEV4ZWNTdGF0ZSogZXhlYykKIHsK
KyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBKU09i
amVjdCogb2JqZWN0ID0gdGhpc1ZhbHVlLnRvVGhpc09iamVjdChleGVjKTsKICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKSW5kZXg6IEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gNjAzNDEp
CisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NywxMCArNTcsOSBAQCBDb25zdHJ1Y3RUeXBlIEVycm9yQ29uc3RydWN0b3I6
OmdldENvbnN0CiAgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OwogfQogCi0vLyBFQ01BIDE1
LjkuMgotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsRXJyb3JDb25zdHJ1Y3RvcihF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykK
K3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEVycm9yQ29uc3RydWN0b3IoRXhlY1N0
YXRlKiBleGVjKQogewotICAgIC8vICJFcnJvcigpIiBnaXZlcyB0aGUgc2FtZXMgcmVzdWx0IGFz
ICJuZXcgRXJyb3IoKSIKKyAgICBBcmdMaXN0IGFyZ3MoZXhlYyk7CiAgICAgcmV0dXJuIGNvbnN0
cnVjdEVycm9yKGV4ZWMsIGFyZ3MpOwogfQogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Vycm9yUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Vycm9yUHJvdG90eXBlLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChFcnJvclByb3Rv
dHlwZSk7CiAKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZXJyb3JQcm90b0Z1bmNUb1N0
cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0
YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZXJyb3JQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3Rh
dGUqKTsKIAogLy8gRUNNQSAxNS45LjQKIEVycm9yUHJvdG90eXBlOjpFcnJvclByb3RvdHlwZShF
eGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIE5vbk51bGxQYXNz
UmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZUZ1bmN0aW9u
U3RydWN0dXJlKQpAQCAtNDYsOSArNDYsOSBAQCBFcnJvclByb3RvdHlwZTo6RXJyb3JQcm90b3R5
cGUoRXhlY1N0YXRlCiAgICAgcHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbihleGVj
LCBuZXcgKGV4ZWMpIE5hdGl2ZUZ1bmN0aW9uV3JhcHBlcihleGVjLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLCAwLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9TdHJp
bmcsIGVycm9yUHJvdG9GdW5jVG9TdHJpbmcpLCBEb250RW51bSk7CiB9CiAKLUpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBlcnJvclByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZXJyb3JQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNP
YmplY3QqIHRoaXNPYmogPSB0aGlzVmFsdWUudG9UaGlzT2JqZWN0KGV4ZWMpOworICAgIEpTT2Jq
ZWN0KiB0aGlzT2JqID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpLnRvVGhpc09iamVjdChleGVjKTsK
ICAgICBKU1ZhbHVlIG5hbWUgPSB0aGlzT2JqLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1l
cygpLm5hbWUpOwogICAgIEpTVmFsdWUgbWVzc2FnZSA9IHRoaXNPYmotPmdldChleGVjLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkubWVzc2FnZSk7CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
cnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01NSw4ICs1NSw5IEBAIENvbnN0cnVjdFR5cGUgRnVuY3Rpb25Db25zdHJ1Y3Rvcjo6Z2V0
Q28KICAgICByZXR1cm4gQ29uc3RydWN0VHlwZUhvc3Q7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY2FsbEZ1bmN0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNhbGxGdW5jdGlvbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAg
ICBBcmdMaXN0IGFyZ3MoZXhlYyk7CiAgICAgcmV0dXJuIGNvbnN0cnVjdEZ1bmN0aW9uKGV4ZWMs
IGFyZ3MpOwogfQogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90
eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJv
dG90eXBlLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1
bmN0aW9uUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsOSArMzQsOSBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChGdW5jdGlvblByb3RvdHlw
ZSk7CiAKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Qcm90b0Z1bmNUb1N0
cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0
YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Qcm90b0Z1bmNBcHBseShFeGVjU3Rh
dGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Qcm90b0Z1bmNDYWxsKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvblByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByb3RvRnVuY0FwcGx5KEV4ZWNTdGF0ZSopOworc3RhdGlj
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByb3RvRnVuY0NhbGwoRXhlY1N0YXRlKik7
CiAKIEZ1bmN0aW9uUHJvdG90eXBlOjpGdW5jdGlvblByb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIE5vbk51bGxQYXNzUmVmUHRyPFN0cnVjdHVy
ZT4gc3RydWN0dXJlKQogICAgIDogSW50ZXJuYWxGdW5jdGlvbigmZXhlYy0+Z2xvYmFsRGF0YSgp
LCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLm51bGxJZGVu
dGlmaWVyKQpAQCAtNTMsNyArNTMsNyBAQCB2b2lkIEZ1bmN0aW9uUHJvdG90eXBlOjphZGRGdW5j
dGlvblByb3BlCiAgICAgcHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbihleGVjLCAq
Y2FsbEZ1bmN0aW9uLCBEb250RW51bSk7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY2FsbEZ1bmN0aW9uUHJvdG90eXBlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxGdW5jdGlv
blByb3RvdHlwZShFeGVjU3RhdGUqKQogewogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQpA
QCAtODMsOCArODMsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaW5zZXJ0U2VtaWNvbG9uSWZOZWVk
CiAgICAgfQogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Qcm90b0Z1bmNUb1N0
cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJvdG9GdW5jVG9TdHJp
bmcoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9z
dFRoaXNWYWx1ZSgpOwogICAgIGlmICh0aGlzVmFsdWUuaW5oZXJpdHMoJkpTRnVuY3Rpb246Omlu
Zm8pKSB7CiAgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gYXNGdW5jdGlvbih0aGlzVmFs
dWUpOwogICAgICAgICBpZiAoZnVuY3Rpb24tPmlzSG9zdEZ1bmN0aW9uKCkpCkBAIC0xMDMsMTQg
KzEwNCwxNSBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Qcm90b0Z1bmNUCiAgICAg
cmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uUHJvdG9GdW5jQXBwbHkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uUHJvdG9GdW5jQXBwbHkoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpT
VmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIENhbGxEYXRhIGNh
bGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gdGhpc1ZhbHVlLmdldENhbGxEYXRhKGNh
bGxEYXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKQogICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCi0gICAgSlNWYWx1ZSBhcnJheSA9IGFy
Z3MuYXQoMSk7CisgICAgSlNWYWx1ZSBhcnJheSA9IGV4ZWMtPmFyZ3VtZW50KDEpOwogCiAgICAg
TWFya2VkQXJndW1lbnRCdWZmZXIgYXBwbHlBcmdzOwogICAgIGlmICghYXJyYXkuaXNVbmRlZmlu
ZWRPck51bGwoKSkgewpAQCAtMTI4LDE5ICsxMzAsMjEgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uUHJvdG9GdW5jQQogICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywg
VHlwZUVycm9yKTsKICAgICB9CiAKLSAgICByZXR1cm4gY2FsbChleGVjLCB0aGlzVmFsdWUsIGNh
bGxUeXBlLCBjYWxsRGF0YSwgYXJncy5hdCgwKSwgYXBwbHlBcmdzKTsKKyAgICByZXR1cm4gY2Fs
bChleGVjLCB0aGlzVmFsdWUsIGNhbGxUeXBlLCBjYWxsRGF0YSwgZXhlYy0+YXJndW1lbnQoMCks
IGFwcGx5QXJncyk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByb3RvRnVu
Y0NhbGwoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJvdG9GdW5j
Q2FsbChFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5o
b3N0VGhpc1ZhbHVlKCk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2Fs
bFR5cGUgPSB0aGlzVmFsdWUuZ2V0Q2FsbERhdGEoY2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlw
ZSA9PSBDYWxsVHlwZU5vbmUpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVF
cnJvcik7CiAKKyAgICBBcmdMaXN0IGFyZ3MoZXhlYyk7CiAgICAgQXJnTGlzdCBjYWxsQXJnczsK
ICAgICBhcmdzLmdldFNsaWNlKDEsIGNhbGxBcmdzKTsKLSAgICByZXR1cm4gY2FsbChleGVjLCB0
aGlzVmFsdWUsIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXJncy5hdCgwKSwgY2FsbEFyZ3MpOworICAg
IHJldHVybiBjYWxsKGV4ZWMsIHRoaXNWYWx1ZSwgY2FsbFR5cGUsIGNhbGxEYXRhLCBleGVjLT5h
cmd1bWVudCgwKSwgY2FsbEFyZ3MpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3Bw
CShyZXZpc2lvbiA2MDM0MSkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3RGdW5jdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw5ICs1MSw5IEBAIHVzaW5nIG5h
bWVzcGFjZSBVbmljb2RlOwogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RhdGljIEpTVmFsdWUgZW5j
b2RlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncywgY29uc3QgY2hhciogZG9O
b3RFc2NhcGUpCitzdGF0aWMgSlNWYWx1ZSBlbmNvZGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBj
aGFyKiBkb05vdEVzY2FwZSkKIHsKLSAgICBVU3RyaW5nIHN0ciA9IGFyZ3MuYXQoMCkudG9TdHJp
bmcoZXhlYyk7CisgICAgVVN0cmluZyBzdHIgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhl
eGVjKTsKICAgICBDU3RyaW5nIGNzdHIgPSBzdHIuVVRGOFN0cmluZyh0cnVlKTsKICAgICBpZiAo
IWNzdHIuZGF0YSgpKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBVUklFcnJvciwg
IlN0cmluZyBjb250YWluZWQgYW4gaWxsZWdhbCBVVEYtMTYgc2VxdWVuY2UuIik7CkBAIC03Mywx
MCArNzMsMTAgQEAgc3RhdGljIEpTVmFsdWUgZW5jb2RlKEV4ZWNTdGF0ZSogZXhlYywgYwogICAg
IHJldHVybiBidWlsZGVyLmJ1aWxkKGV4ZWMpOwogfQogCi1zdGF0aWMgSlNWYWx1ZSBkZWNvZGUo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBjb25zdCBjaGFyKiBkb05vdFVu
ZXNjYXBlLCBib29sIHN0cmljdCkKK3N0YXRpYyBKU1ZhbHVlIGRlY29kZShFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IGNoYXIqIGRvTm90VW5lc2NhcGUsIGJvb2wgc3RyaWN0KQogewogICAgIEpTU3Ry
aW5nQnVpbGRlciBidWlsZGVyOwotICAgIFVTdHJpbmcgc3RyID0gYXJncy5hdCgwKS50b1N0cmlu
ZyhleGVjKTsKKyAgICBVU3RyaW5nIHN0ciA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4
ZWMpOwogICAgIGludCBrID0gMDsKICAgICBpbnQgbGVuID0gc3RyLnNpemUoKTsKICAgICBjb25z
dCBVQ2hhciogZCA9IHN0ci5kYXRhKCk7CkBAIC0yNzIsMTQgKzI3MiwxNCBAQCBzdGF0aWMgZG91
YmxlIHBhcnNlRmxvYXQoY29uc3QgVVN0cmluZyYgCiAgICAgcmV0dXJuIHMudG9Eb3VibGUodHJ1
ZSAvKnRvbGVyYW50Ki8sIGZhbHNlIC8qIE5hTiBmb3IgZW1wdHkgc3RyaW5nICovKTsKIH0KIAot
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNFdmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIGZ1bmN0aW9uLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRXZhbChFeGVjU3RhdGUqIGV4ZWMpCiB7
Ci0gICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSB0aGlzVmFsdWUudG9UaGlzT2JqZWN0KGV4ZWMp
OworICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpLnRvVGhp
c09iamVjdChleGVjKTsKICAgICBKU09iamVjdCogdW53cmFwcGVkT2JqZWN0ID0gdGhpc09iamVj
dC0+dW53cmFwcGVkT2JqZWN0KCk7Ci0gICAgaWYgKCF1bndyYXBwZWRPYmplY3QtPmlzR2xvYmFs
T2JqZWN0KCkgfHwgc3RhdGljX2Nhc3Q8SlNHbG9iYWxPYmplY3QqPih1bndyYXBwZWRPYmplY3Qp
LT5ldmFsRnVuY3Rpb24oKSAhPSBmdW5jdGlvbikKKyAgICBpZiAoIXVud3JhcHBlZE9iamVjdC0+
aXNHbG9iYWxPYmplY3QoKSB8fCBzdGF0aWNfY2FzdDxKU0dsb2JhbE9iamVjdCo+KHVud3JhcHBl
ZE9iamVjdCktPmV2YWxGdW5jdGlvbigpICE9IGV4ZWMtPmNhbGxlZSgpKQogICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcihleGVjLCBFdmFsRXJyb3IsICJUaGUgXCJ0aGlzXCIgdmFsdWUgcGFzc2Vk
IHRvIGV2YWwgbXVzdCBiZSB0aGUgZ2xvYmFsIG9iamVjdCBmcm9tIHdoaWNoIGV2YWwgb3JpZ2lu
YXRlZCIpOwogCi0gICAgSlNWYWx1ZSB4ID0gYXJncy5hdCgwKTsKKyAgICBKU1ZhbHVlIHggPSBl
eGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoIXguaXNTdHJpbmcoKSkKICAgICAgICAgcmV0dXJu
IHg7CiAKQEAgLTI5NywxMCArMjk3LDEwIEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxG
dW5jRXZhbChFeGUKICAgICByZXR1cm4gZXhlYy0+aW50ZXJwcmV0ZXIoKS0+ZXhlY3V0ZShldmFs
LmdldCgpLCBleGVjLCB0aGlzT2JqZWN0LCBzdGF0aWNfY2FzdDxKU0dsb2JhbE9iamVjdCo+KHVu
d3JhcHBlZE9iamVjdCktPmdsb2JhbFNjb3BlQ2hhaW4oKS5ub2RlKCksIGV4ZWMtPmV4Y2VwdGlv
blNsb3QoKSk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jUGFyc2VJbnQo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1BhcnNlSW50KEV4ZWNTdGF0ZSogZXhl
YykKIHsKLSAgICBKU1ZhbHVlIHZhbHVlID0gYXJncy5hdCgwKTsKLSAgICBpbnQzMl90IHJhZGl4
ID0gYXJncy5hdCgxKS50b0ludDMyKGV4ZWMpOworICAgIEpTVmFsdWUgdmFsdWUgPSBleGVjLT5h
cmd1bWVudCgwKTsKKyAgICBpbnQzMl90IHJhZGl4ID0gZXhlYy0+YXJndW1lbnQoMSkudG9JbnQz
MihleGVjKTsKIAogICAgIGlmIChyYWRpeCAhPSAwICYmIHJhZGl4ICE9IDEwKQogICAgICAgICBy
ZXR1cm4ganNOdW1iZXIoZXhlYywgcGFyc2VJbnQodmFsdWUudG9TdHJpbmcoZXhlYyksIHJhZGl4
KSk7CkBAIC0zMjAsMzYgKzMyMCwzNiBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVu
Y1BhcnNlSW50CiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHBhcnNlSW50KHZhbHVlLnRvU3Ry
aW5nKGV4ZWMpLCByYWRpeCkpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVu
Y1BhcnNlRmxvYXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1BhcnNlRmxvYXQo
RXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBqc051bWJlcihleGVjLCBwYXJzZUZsb2F0
KGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpKTsKKyAgICByZXR1cm4ganNOdW1iZXIoZXhlYywg
cGFyc2VGbG9hdChleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSkpOwogfQogCi1KU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0lzTmFOKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGdsb2JhbEZ1bmNJc05hTihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGpzQm9vbGVh
bihpc25hbihhcmdzLmF0KDApLnRvTnVtYmVyKGV4ZWMpKSk7CisgICAgcmV0dXJuIGpzQm9vbGVh
bihpc25hbihleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVjKSkpOwogfQogCi1KU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0lzRmluaXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGdsb2JhbEZ1bmNJc0Zpbml0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgZG91YmxlIG4gPSBh
cmdzLmF0KDApLnRvTnVtYmVyKGV4ZWMpOworICAgIGRvdWJsZSBuID0gZXhlYy0+YXJndW1lbnQo
MCkudG9OdW1iZXIoZXhlYyk7CiAgICAgcmV0dXJuIGpzQm9vbGVhbighaXNuYW4obikgJiYgIWlz
aW5mKG4pKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNEZWNvZGVVUkko
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0RlY29kZVVSSShFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgc3RhdGljIGNvbnN0IGNoYXIgZG9fbm90X3VuZXNjYXBlX3doZW5fZGVjb2Rp
bmdfVVJJW10gPQogICAgICAgICAiIyQmKywvOjs9P0AiOwogCi0gICAgcmV0dXJuIGRlY29kZShl
eGVjLCBhcmdzLCBkb19ub3RfdW5lc2NhcGVfd2hlbl9kZWNvZGluZ19VUkksIHRydWUpOworICAg
IHJldHVybiBkZWNvZGUoZXhlYywgZG9fbm90X3VuZXNjYXBlX3doZW5fZGVjb2RpbmdfVVJJLCB0
cnVlKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNEZWNvZGVVUklDb21w
b25lbnQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0RlY29kZVVSSUNvbXBvbmVu
dChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGRlY29kZShleGVjLCBhcmdzLCAiIiwg
dHJ1ZSk7CisgICAgcmV0dXJuIGRlY29kZShleGVjLCAiIiwgdHJ1ZSk7CiB9CiAKLUpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRW5jb2RlVVJJKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGdsb2JhbEZ1bmNFbmNvZGVVUkkoRXhlY1N0YXRlKiBleGVjKQogewogICAgIHN0YXRpYyBjb25z
dCBjaGFyIGRvX25vdF9lc2NhcGVfd2hlbl9lbmNvZGluZ19VUklbXSA9CiAgICAgICAgICJBQkNE
RUZHSElKS0xNTk9QUVJTVFVWV1hZWiIKQEAgLTM1NywxMCArMzU3LDEwIEBAIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBnbG9iYWxGdW5jRW5jb2RlVVIKICAgICAgICAgIjAxMjM0NTY3ODkiCiAgICAg
ICAgICIhIyQmJygpKissLS4vOjs9P0BffiI7CiAKLSAgICByZXR1cm4gZW5jb2RlKGV4ZWMsIGFy
Z3MsIGRvX25vdF9lc2NhcGVfd2hlbl9lbmNvZGluZ19VUkkpOworICAgIHJldHVybiBlbmNvZGUo
ZXhlYywgZG9fbm90X2VzY2FwZV93aGVuX2VuY29kaW5nX1VSSSk7CiB9CiAKLUpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBnbG9iYWxGdW5jRW5jb2RlVVJJQ29tcG9uZW50KEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGdsb2JhbEZ1bmNFbmNvZGVVUklDb21wb25lbnQoRXhlY1N0YXRlKiBleGVjKQogewog
ICAgIHN0YXRpYyBjb25zdCBjaGFyIGRvX25vdF9lc2NhcGVfd2hlbl9lbmNvZGluZ19VUklfY29t
cG9uZW50W10gPQogICAgICAgICAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiCkBAIC0zNjgs
MTAgKzM2OCwxMCBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0VuY29kZVVSCiAg
ICAgICAgICIwMTIzNDU2Nzg5IgogICAgICAgICAiIScoKSotLl9+IjsKIAotICAgIHJldHVybiBl
bmNvZGUoZXhlYywgYXJncywgZG9fbm90X2VzY2FwZV93aGVuX2VuY29kaW5nX1VSSV9jb21wb25l
bnQpOworICAgIHJldHVybiBlbmNvZGUoZXhlYywgZG9fbm90X2VzY2FwZV93aGVuX2VuY29kaW5n
X1VSSV9jb21wb25lbnQpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0Vz
Y2FwZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYg
YXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRXNjYXBlKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBzdGF0aWMgY29uc3QgY2hhciBkb19ub3RfZXNjYXBlW10gPQogICAgICAg
ICAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiCkBAIC0zODAsNyArMzgwLDcgQEAgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNFc2NhcGUoRQogICAgICAgICAiKistLi9AXyI7CiAK
ICAgICBKU1N0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBVU3RyaW5nIHN0ciA9IGFyZ3MuYXQo
MCkudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzdHIgPSBleGVjLT5hcmd1bWVudCgwKS50
b1N0cmluZyhleGVjKTsKICAgICBjb25zdCBVQ2hhciogYyA9IHN0ci5kYXRhKCk7CiAgICAgZm9y
ICh1bnNpZ25lZCBrID0gMDsgayA8IHN0ci5zaXplKCk7IGsrKywgYysrKSB7CiAgICAgICAgIGlu
dCB1ID0gY1swXTsKQEAgLTQwMCwxMCArNDAwLDEwIEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBn
bG9iYWxGdW5jRXNjYXBlKEUKICAgICByZXR1cm4gYnVpbGRlci5idWlsZChleGVjKTsKIH0KIAot
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNVbmVzY2FwZShFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBnbG9iYWxGdW5jVW5lc2NhcGUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFN0cmlu
Z0J1aWxkZXIgYnVpbGRlcjsKLSAgICBVU3RyaW5nIHN0ciA9IGFyZ3MuYXQoMCkudG9TdHJpbmco
ZXhlYyk7CisgICAgVVN0cmluZyBzdHIgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVj
KTsKICAgICBpbnQgayA9IDA7CiAgICAgaW50IGxlbiA9IHN0ci5zaXplKCk7CiAgICAgd2hpbGUg
KGsgPCBsZW4pIHsKQEAgLTQyOCw5ICs0MjgsOSBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xv
YmFsRnVuY1VuZXNjYXBlCiB9CiAKICNpZm5kZWYgTkRFQlVHCi1KU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZ2xvYmFsRnVuY0pTQ1ByaW50KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVl
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNK
U0NQcmludChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgQ1N0cmluZyBzdHJpbmcgPSBhcmdzLmF0
KDApLnRvU3RyaW5nKGV4ZWMpLlVURjhTdHJpbmcoKTsKKyAgICBDU3RyaW5nIHN0cmluZyA9IGV4
ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLlVURjhTdHJpbmcoKTsKICAgICBwdXRzKHN0
cmluZy5kYXRhKCkpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQpJbmRleDogSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaAkocmV2aXNp
b24gNjAzNDEpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rp
b25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDE5ICszNiwxOSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAvLyBGSVhNRTogVGhlc2UgZnVuY3Rpb25zIHNob3VsZCByZWFsbHkgYmUgaW4gSlNHbG9i
YWxPYmplY3QuY3BwLCBidXQgcHV0dGluZyB0aGVtIHRoZXJlCiAgICAgLy8gaXMgYSAwLjUlIHJl
ZHVjdGlvbi4KIAotICAgIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRXZhbChFeGVj
U3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLSAgICBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1BhcnNlSW50KEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
SlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotICAgIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9i
YWxGdW5jUGFyc2VGbG9hdChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmKTsKLSAgICBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0lzTmFOKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotICAgIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jSXNGaW5pdGUoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBK
U1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci0gICAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2Jh
bEZ1bmNEZWNvZGVVUkkoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdM
aXN0Jik7Ci0gICAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNEZWNvZGVVUklDb21w
b25lbnQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci0g
ICAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNFbmNvZGVVUkkoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci0gICAgSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGdsb2JhbEZ1bmNFbmNvZGVVUklDb21wb25lbnQoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci0gICAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGds
b2JhbEZ1bmNFc2NhcGUoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdM
aXN0Jik7Ci0gICAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNVbmVzY2FwZShFeGVj
U3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKKyAgICBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0V2YWwoRXhlY1N0YXRlKik7CisgICAgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNQYXJzZUludChFeGVjU3RhdGUqKTsKKyAgICBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1BhcnNlRmxvYXQoRXhlY1N0YXRlKik7CisgICAgSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNJc05hTihFeGVjU3RhdGUqKTsKKyAgICBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0lzRmluaXRlKEV4ZWNTdGF0ZSopOworICAgIEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRGVjb2RlVVJJKEV4ZWNTdGF0ZSopOworICAg
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRGVjb2RlVVJJQ29tcG9uZW50KEV4ZWNT
dGF0ZSopOworICAgIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRW5jb2RlVVJJKEV4
ZWNTdGF0ZSopOworICAgIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRW5jb2RlVVJJ
Q29tcG9uZW50KEV4ZWNTdGF0ZSopOworICAgIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxG
dW5jRXNjYXBlKEV4ZWNTdGF0ZSopOworICAgIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxG
dW5jVW5lc2NhcGUoRXhlY1N0YXRlKik7CiAjaWZuZGVmIE5ERUJVRwotICAgIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBnbG9iYWxGdW5jSlNDUHJpbnQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1Zh
bHVlLCBjb25zdCBBcmdMaXN0Jik7CisgICAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1
bmNKU0NQcmludChFeGVjU3RhdGUqKTsKICNlbmRpZgogCiAgICAgc3RhdGljIGNvbnN0IGRvdWJs
ZSBtYW50aXNzYU92ZXJmbG93TG93ZXJCb3VuZCA9IDkwMDcxOTkyNTQ3NDA5OTIuMDsKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MSw4ICs0MSw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxM
KEpTT05PYmplY3QpOwogCi1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTT05Qcm90b0Z1
bmNQYXJzZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsK
LXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNPTlByb3RvRnVuY1N0cmluZ2lmeShFeGVj
U3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgSlNPTlByb3RvRnVuY1BhcnNlKEV4ZWNTdGF0ZSopOworc3RhdGlj
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU09OUHJvdG9GdW5jU3RyaW5naWZ5KEV4ZWNTdGF0ZSop
OwogCiB9CiAKQEAgLTgzOSwxMSArODM5LDExIEBAIE5FVkVSX0lOTElORSBKU1ZhbHVlIFdhbGtl
cjo6d2FsayhKU1ZhbHUKIH0KIAogLy8gRUNNQS0yNjIgdjUgMTUuMTIuMgotSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIEpTT05Qcm90b0Z1bmNQYXJzZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
SlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU09O
UHJvdG9GdW5jUGFyc2UoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGlmIChhcmdzLmlzRW1wdHko
KSkKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKICAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoZXhlYywgR2VuZXJhbEVycm9yLCAiSlNPTi5wYXJzZSByZXF1aXJlcyBhdCBsZWFzdCBv
bmUgcGFyYW1ldGVyIik7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IGFyZ3MuYXQoMCk7CisgICAgSlNW
YWx1ZSB2YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIFVTdHJpbmcgc291cmNlID0gdmFs
dWUudG9TdHJpbmcoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAg
ICByZXR1cm4ganNOdWxsKCk7CkBAIC04NTMsMTAgKzg1MywxMCBAQCBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgSlNPTlByb3RvRnVuY1BhcnNlCiAgICAgaWYgKCF1bmZpbHRlcmVkKQogICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvciwgIlVuYWJsZSB0byBwYXJzZSBKU09O
IHN0cmluZyIpOwogICAgIAotICAgIGlmIChhcmdzLnNpemUoKSA8IDIpCisgICAgaWYgKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSA8IDIpCiAgICAgICAgIHJldHVybiB1bmZpbHRlcmVkOwogICAgIAot
ICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBhcmdzLmF0KDEpOworICAgIEpTVmFsdWUgZnVuY3Rpb24g
PSBleGVjLT5hcmd1bWVudCgxKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlw
ZSBjYWxsVHlwZSA9IGZ1bmN0aW9uLmdldENhbGxEYXRhKGNhbGxEYXRhKTsKICAgICBpZiAoY2Fs
bFR5cGUgPT0gQ2FsbFR5cGVOb25lKQpAQCAtODY1LDEzICs4NjUsMTMgQEAgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIEpTT05Qcm90b0Z1bmNQYXJzZQogfQogCiAvLyBFQ01BLTI2MiB2NSAxNS4xMi4z
Ci1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNPTlByb3RvRnVuY1N0cmluZ2lmeShFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBKU09OUHJvdG9GdW5jU3RyaW5naWZ5KEV4ZWNTdGF0ZSogZXhlYykKIHsK
LSAgICBpZiAoYXJncy5pc0VtcHR5KCkpCisgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkp
CiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIEdlbmVyYWxFcnJvciwgIk5vIGlucHV0
IHRvIHN0cmluZ2lmeSIpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBhcmdzLmF0KDApOwotICAgIEpT
VmFsdWUgcmVwbGFjZXIgPSBhcmdzLmF0KDEpOwotICAgIEpTVmFsdWUgc3BhY2UgPSBhcmdzLmF0
KDIpOworICAgIEpTVmFsdWUgdmFsdWUgPSBleGVjLT5hcmd1bWVudCgwKTsKKyAgICBKU1ZhbHVl
IHJlcGxhY2VyID0gZXhlYy0+YXJndW1lbnQoMSk7CisgICAgSlNWYWx1ZSBzcGFjZSA9IGV4ZWMt
PmFyZ3VtZW50KDIpOwogICAgIHJldHVybiBTdHJpbmdpZmllcihleGVjLCByZXBsYWNlciwgc3Bh
Y2UpLnN0cmluZ2lmeSh2YWx1ZSk7CiB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5n
LmgJKHJldmlzaW9uIDYwMzQxKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MzMsNyArNDMzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIGZyaWVuZCBKU1ZhbHVlIGpzU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVN0cmlu
ZyYgdTEsIEpTU3RyaW5nKiBzMik7CiAgICAgICAgIGZyaWVuZCBKU1ZhbHVlIGpzU3RyaW5nKEV4
ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHMxLCBjb25zdCBVU3RyaW5nJiB1Mik7CiAgICAgICAg
IGZyaWVuZCBKU1ZhbHVlIGpzU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgUmVnaXN0ZXIqIHN0cmlu
Z3MsIHVuc2lnbmVkIGNvdW50KTsKLSAgICAgICAgZnJpZW5kIEpTVmFsdWUganNTdHJpbmcoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncyk7Cisg
ICAgICAgIGZyaWVuZCBKU1ZhbHVlIGpzU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB0
aGlzVmFsdWUpOwogICAgICAgICBmcmllbmQgSlNTdHJpbmcqIGpzU3RyaW5nV2l0aEZpbmFsaXpl
cihFeGVjU3RhdGUqLCBjb25zdCBVU3RyaW5nJiwgSlNTdHJpbmdGaW5hbGl6ZXJDYWxsYmFjayBj
YWxsYmFjaywgdm9pZCogY29udGV4dCk7CiAgICAgfTsKIApJbmRleDogSmF2YVNjcmlwdENvcmUv
cnVudGltZS9NYXRoT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL01hdGhPYmplY3QuY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTWF0aE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDI0ICszNCwyNCBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChNYXRoT2JqZWN0KTsK
IAotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQWJzKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQUNvcyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpT
VmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0
aFByb3RvRnVuY0FTaW4oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdM
aXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNBVGFuKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQVRhbjIoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG1hdGhQcm90b0Z1bmNDZWlsKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5j
Q29zKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3Rh
dGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jRXhwKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBtYXRoUHJvdG9GdW5jRmxvb3IoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
LCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90
b0Z1bmNMb2coRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7
Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNNYXgoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNNaW4oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1Zh
bHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQ
cm90b0Z1bmNQb3coRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0
Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNSYW5kb20oRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNSb3VuZChFeGVjU3RhdGUqLCBKU09iamVj
dCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgbWF0aFByb3RvRnVuY1NpbihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY1Nx
cnQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0
aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNUYW4oRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG1hdGhQcm90b0Z1bmNBYnMoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNBQ29zKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQVNpbihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0FUYW4oRXhlY1N0YXRlKik7CitzdGF0aWMg
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNBVGFuMihFeGVjU3RhdGUqKTsKK3N0
YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0NlaWwoRXhlY1N0YXRlKik7
CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNDb3MoRXhlY1N0YXRl
Kik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNFeHAoRXhlY1N0
YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNGbG9vcihF
eGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0xv
ZyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVu
Y01heChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3Rv
RnVuY01pbihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFBy
b3RvRnVuY1BvdyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0
aFByb3RvRnVuY1JhbmRvbShFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgbWF0aFByb3RvRnVuY1JvdW5kKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBtYXRoUHJvdG9GdW5jU2luKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jU3FydChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY1RhbihFeGVjU3RhdGUqKTsKIAogfQogCkBAIC0x
MTMsNjIgKzExMyw2MiBAQCBib29sIE1hdGhPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRv
CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90
b0Z1bmNBYnMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0FicyhFeGVjU3Rh
dGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGZhYnMoYXJncy5hdCgwKS50
b051bWJlcihleGVjKSkpOworICAgIHJldHVybiBqc051bWJlcihleGVjLCBmYWJzKGV4ZWMtPmFy
Z3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKSk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBt
YXRoUHJvdG9GdW5jQUNvcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQUNv
cyhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGpzRG91YmxlTnVtYmVyKGV4ZWMsIGFj
b3MoYXJncy5hdCgwKS50b051bWJlcihleGVjKSkpOworICAgIHJldHVybiBqc0RvdWJsZU51bWJl
cihleGVjLCBhY29zKGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKSk7CiB9CiAKLUpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQVNpbihFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBtYXRoUHJvdG9GdW5jQVNpbihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGpz
RG91YmxlTnVtYmVyKGV4ZWMsIGFzaW4oYXJncy5hdCgwKS50b051bWJlcihleGVjKSkpOworICAg
IHJldHVybiBqc0RvdWJsZU51bWJlcihleGVjLCBhc2luKGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVt
YmVyKGV4ZWMpKSk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQVRh
bihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJn
cykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQVRhbihFeGVjU3RhdGUqIGV4
ZWMpCiB7Ci0gICAgcmV0dXJuIGpzRG91YmxlTnVtYmVyKGV4ZWMsIGF0YW4oYXJncy5hdCgwKS50
b051bWJlcihleGVjKSkpOworICAgIHJldHVybiBqc0RvdWJsZU51bWJlcihleGVjLCBhdGFuKGV4
ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKSk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBtYXRoUHJvdG9GdW5jQVRhbjIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFs
dWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3Rv
RnVuY0FUYW4yKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4ganNEb3VibGVOdW1iZXIo
ZXhlYywgYXRhbjIoYXJncy5hdCgwKS50b051bWJlcihleGVjKSwgYXJncy5hdCgxKS50b051bWJl
cihleGVjKSkpOworICAgIHJldHVybiBqc0RvdWJsZU51bWJlcihleGVjLCBhdGFuMihleGVjLT5h
cmd1bWVudCgwKS50b051bWJlcihleGVjKSwgZXhlYy0+YXJndW1lbnQoMSkudG9OdW1iZXIoZXhl
YykpKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNDZWlsKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNDZWlsKEV4ZWNTdGF0ZSogZXhlYykKIHsK
LSAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgY2VpbChhcmdzLmF0KDApLnRvTnVtYmVyKGV4ZWMp
KSk7CisgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGNlaWwoZXhlYy0+YXJndW1lbnQoMCkudG9O
dW1iZXIoZXhlYykpKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmND
b3MoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0NvcyhFeGVjU3RhdGUqIGV4
ZWMpCiB7Ci0gICAgcmV0dXJuIGpzRG91YmxlTnVtYmVyKGV4ZWMsIGNvcyhhcmdzLmF0KDApLnRv
TnVtYmVyKGV4ZWMpKSk7CisgICAgcmV0dXJuIGpzRG91YmxlTnVtYmVyKGV4ZWMsIGNvcyhleGVj
LT5hcmd1bWVudCgwKS50b051bWJlcihleGVjKSkpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgbWF0aFByb3RvRnVuY0V4cChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5j
RXhwKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4ganNEb3VibGVOdW1iZXIoZXhlYywg
ZXhwKGFyZ3MuYXQoMCkudG9OdW1iZXIoZXhlYykpKTsKKyAgICByZXR1cm4ganNEb3VibGVOdW1i
ZXIoZXhlYywgZXhwKGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKSk7CiB9CiAKLUpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jRmxvb3IoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgbWF0aFByb3RvRnVuY0Zsb29yKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4g
anNOdW1iZXIoZXhlYywgZmxvb3IoYXJncy5hdCgwKS50b051bWJlcihleGVjKSkpOworICAgIHJl
dHVybiBqc051bWJlcihleGVjLCBmbG9vcihleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVj
KSkpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0xvZyhFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jTG9nKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAg
ICByZXR1cm4ganNEb3VibGVOdW1iZXIoZXhlYywgbG9nKGFyZ3MuYXQoMCkudG9OdW1iZXIoZXhl
YykpKTsKKyAgICByZXR1cm4ganNEb3VibGVOdW1iZXIoZXhlYywgbG9nKGV4ZWMtPmFyZ3VtZW50
KDApLnRvTnVtYmVyKGV4ZWMpKSk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJv
dG9GdW5jTWF4KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNNYXgoRXhlY1N0
YXRlKiBleGVjKQogewotICAgIHVuc2lnbmVkIGFyZ3NDb3VudCA9IGFyZ3Muc2l6ZSgpOworICAg
IHVuc2lnbmVkIGFyZ3NDb3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKICAgICBkb3VibGUg
cmVzdWx0ID0gLUluZjsKICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgYXJnc0NvdW50OyAr
K2spIHsKLSAgICAgICAgZG91YmxlIHZhbCA9IGFyZ3MuYXQoaykudG9OdW1iZXIoZXhlYyk7Cisg
ICAgICAgIGRvdWJsZSB2YWwgPSBleGVjLT5hcmd1bWVudChrKS50b051bWJlcihleGVjKTsKICAg
ICAgICAgaWYgKGlzbmFuKHZhbCkpIHsKICAgICAgICAgICAgIHJlc3VsdCA9IE5hTjsKICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtMTc5LDEyICsxNzksMTIgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG1hdGhQcm90b0Z1bmNNYXgoRQogICAgIHJldHVybiBqc051bWJlcihleGVjLCByZXN1bHQpOwog
fQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY01pbihFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlND
X0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jTWluKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICB1bnNp
Z25lZCBhcmdzQ291bnQgPSBhcmdzLnNpemUoKTsKKyAgICB1bnNpZ25lZCBhcmdzQ291bnQgPSBl
eGVjLT5hcmd1bWVudENvdW50KCk7CiAgICAgZG91YmxlIHJlc3VsdCA9ICtJbmY7CiAgICAgZm9y
ICh1bnNpZ25lZCBrID0gMDsgayA8IGFyZ3NDb3VudDsgKytrKSB7Ci0gICAgICAgIGRvdWJsZSB2
YWwgPSBhcmdzLmF0KGspLnRvTnVtYmVyKGV4ZWMpOworICAgICAgICBkb3VibGUgdmFsID0gZXhl
Yy0+YXJndW1lbnQoaykudG9OdW1iZXIoZXhlYyk7CiAgICAgICAgIGlmIChpc25hbih2YWwpKSB7
CiAgICAgICAgICAgICByZXN1bHQgPSBOYU47CiAgICAgICAgICAgICBicmVhazsKQEAgLTE5NSwx
MiArMTk1LDEyIEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jTWluKEUKICAg
ICByZXR1cm4ganNOdW1iZXIoZXhlYywgcmVzdWx0KTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG1hdGhQcm90b0Z1bmNQb3coRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVu
Y1BvdyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgLy8gRUNNQSAxNS44LjIuMS4xMwogCi0gICAg
ZG91YmxlIGFyZyA9IGFyZ3MuYXQoMCkudG9OdW1iZXIoZXhlYyk7Ci0gICAgZG91YmxlIGFyZzIg
PSBhcmdzLmF0KDEpLnRvTnVtYmVyKGV4ZWMpOworICAgIGRvdWJsZSBhcmcgPSBleGVjLT5hcmd1
bWVudCgwKS50b051bWJlcihleGVjKTsKKyAgICBkb3VibGUgYXJnMiA9IGV4ZWMtPmFyZ3VtZW50
KDEpLnRvTnVtYmVyKGV4ZWMpOwogCiAgICAgaWYgKGlzbmFuKGFyZzIpKQogICAgICAgICByZXR1
cm4ganNOYU4oZXhlYyk7CkBAIC0yMDksMzEgKzIwOSwzMSBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgbWF0aFByb3RvRnVuY1BvdyhFCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHBvdyhhcmcs
IGFyZzIpKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNSYW5kb20o
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNSYW5kb20oRXhlY1N0YXRlKiBleGVjKQog
ewogICAgIHJldHVybiBqc0RvdWJsZU51bWJlcihleGVjLCBleGVjLT5nbG9iYWxEYXRhKCkud2Vh
a1JhbmRvbS5nZXQoKSk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5j
Um91bmQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY1JvdW5kKEV4ZWNTdGF0
ZSogZXhlYykKIHsKLSAgICBkb3VibGUgYXJnID0gYXJncy5hdCgwKS50b051bWJlcihleGVjKTsK
KyAgICBkb3VibGUgYXJnID0gZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYyk7CiAgICAg
ZG91YmxlIGludGVnZXIgPSBjZWlsKGFyZyk7CiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGlu
dGVnZXIgLSAoaW50ZWdlciAtIGFyZyA+IDAuNSkpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgbWF0aFByb3RvRnVuY1NpbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5j
U2luKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gZXhlYy0+Z2xvYmFsRGF0YSgpLmNh
Y2hlZFNpbihleGVjLCBhcmdzLmF0KDApLnRvTnVtYmVyKGV4ZWMpKTsKKyAgICByZXR1cm4gZXhl
Yy0+Z2xvYmFsRGF0YSgpLmNhY2hlZFNpbihleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b051bWJl
cihleGVjKSk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jU3FydChF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jU3FydChFeGVjU3RhdGUqIGV4ZWMp
CiB7Ci0gICAgcmV0dXJuIGpzRG91YmxlTnVtYmVyKGV4ZWMsIHNxcnQoYXJncy5hdCgwKS50b051
bWJlcihleGVjKSkpOworICAgIHJldHVybiBqc0RvdWJsZU51bWJlcihleGVjLCBzcXJ0KGV4ZWMt
PmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKSk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBtYXRoUHJvdG9GdW5jVGFuKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNU
YW4oRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBqc0RvdWJsZU51bWJlcihleGVjLCB0
YW4oYXJncy5hdCgwKS50b051bWJlcihleGVjKSkpOworICAgIHJldHVybiBqc0RvdWJsZU51bWJl
cihleGVjLCB0YW4oZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykpKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9y
Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0
aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgSmF2YVNjcmlwdENv
cmUvcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjIsOSArNjIsMTAgQEAgQ29uc3RydWN0VHlwZSBOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjpnZQog
ICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlSG9zdDsKIH0KICAgICAKLXN0YXRpYyBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY2FsbE5hdGl2ZUVycm9yQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogY29uc3RydWN0b3IsIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitzdGF0
aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxOYXRpdmVFcnJvckNvbnN0cnVjdG9yKEV4ZWNT
dGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TmF0aXZlRXJyb3JDb25zdHJ1
Y3Rvcio+KGNvbnN0cnVjdG9yKS0+Y29uc3RydWN0KGV4ZWMsIGFyZ3MpOworICAgIEFyZ0xpc3Qg
YXJncyhleGVjKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TmF0aXZlRXJyb3JDb25zdHJ1Y3Rv
cio+KGV4ZWMtPmNhbGxlZSgpKS0+Y29uc3RydWN0KGV4ZWMsIGFyZ3MpOwogfQogCiBDYWxsVHlw
ZSBOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjpnZXRDYWxsRGF0YShDYWxsRGF0YSYgY2FsbERhdGEp
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmNwcAko
cmV2aXNpb24gNjAzNDEpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVj
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDkgKzExNSw5IEBAIENvbnN0cnVjdFR5cGUg
TnVtYmVyQ29uc3RydWN0b3I6OmdldENvbnMKIH0KIAogLy8gRUNNQSAxNS43LjIKLXN0YXRpYyBK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbE51bWJlckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGljIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjYWxsTnVtYmVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQog
ewotICAgIHJldHVybiBqc051bWJlcihleGVjLCBhcmdzLmlzRW1wdHkoKSA/IDAgOiBhcmdzLmF0
KDApLnRvTnVtYmVyKGV4ZWMpKTsKKyAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgIWV4ZWMtPmFy
Z3VtZW50Q291bnQoKSA/IDAgOiBleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVjKSk7CiB9
CiAKIENhbGxUeXBlIE51bWJlckNvbnN0cnVjdG9yOjpnZXRDYWxsRGF0YShDYWxsRGF0YSYgY2Fs
bERhdGEpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlclByb3RvdHlwZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3Bw
CShyZXZpc2lvbiA2MDM0MSkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90
eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTIgKzM4LDEyIEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKE51bWJlclByb3RvdHlwZSk7CiAKLXN0YXRp
YyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNWYWx1ZU9mKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1i
ZXJQcm90b0Z1bmNUb0ZpeGVkKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3Qg
QXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNU
b0V4cG9uZW50aWFsKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlz
dCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNUb1ByZWNp
c2lvbihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0
YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0
YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1RvTG9j
YWxlU3RyaW5nKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1i
ZXJQcm90b0Z1bmNWYWx1ZU9mKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBudW1iZXJQcm90b0Z1bmNUb0ZpeGVkKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNUb0V4cG9uZW50aWFsKEV4ZWNTdGF0ZSopOwor
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNUb1ByZWNpc2lvbihF
eGVjU3RhdGUqKTsKIAogLy8gRUNNQSAxNS43LjQKIApAQCAtMTM3LDEzICsxMzcsMTQgQEAgc3Rh
dGljIGRvdWJsZSBpbnRQb3cxMChpbnQgZSkKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91Ymxl
PihyZXN1bHQpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9T
dHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1Rv
U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMt
Pmhvc3RUaGlzVmFsdWUoKTsKICAgICBKU1ZhbHVlIHYgPSB0aGlzVmFsdWUuZ2V0SlNOdW1iZXIo
KTsKICAgICBpZiAoIXYpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJv
cik7CiAKLSAgICBKU1ZhbHVlIHJhZGl4VmFsdWUgPSBhcmdzLmF0KDApOworICAgIEpTVmFsdWUg
cmFkaXhWYWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGludCByYWRpeDsKICAgICBpZiAo
cmFkaXhWYWx1ZS5pc0ludDMyKCkpCiAgICAgICAgIHJhZGl4ID0gcmFkaXhWYWx1ZS5hc0ludDMy
KCk7CkBAIC0yMjAsOCArMjIxLDkgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3Rv
RnVuY1RvUwogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBzdGFydE9mUmVzdWx0U3RyaW5nKTsK
IH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1RvTG9jYWxlU3RyaW5n
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9Mb2NhbGVTdHJp
bmcoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9z
dFRoaXNWYWx1ZSgpOwogICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQgeWV0LgogCiAgICAg
SlNWYWx1ZSB2ID0gdGhpc1ZhbHVlLmdldEpTTnVtYmVyKCk7CkBAIC0yMzEsOCArMjMzLDkgQEAg
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1RvTAogICAgIHJldHVybiBqc1N0
cmluZyhleGVjLCB2LnRvU3RyaW5nKGV4ZWMpKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG51bWJlclByb3RvRnVuY1ZhbHVlT2YoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFs
dWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1i
ZXJQcm90b0Z1bmNWYWx1ZU9mKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNW
YWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBKU1ZhbHVlIHYgPSB0aGlzVmFsdWUu
Z2V0SlNOdW1iZXIoKTsKICAgICBpZiAoIXYpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4
ZWMsIFR5cGVFcnJvcik7CkBAIC0yNDAsMTMgKzI0MywxNCBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgbnVtYmVyUHJvdG9GdW5jVmFsCiAgICAgcmV0dXJuIHY7CiB9CiAKLUpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNUb0ZpeGVkKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
LCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNUb0ZpeGVkKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBK
U1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBKU1ZhbHVlIHYg
PSB0aGlzVmFsdWUuZ2V0SlNOdW1iZXIoKTsKICAgICBpZiAoIXYpCiAgICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKLSAgICBKU1ZhbHVlIGZyYWN0aW9uRGlnaXRz
ID0gYXJncy5hdCgwKTsKKyAgICBKU1ZhbHVlIGZyYWN0aW9uRGlnaXRzID0gZXhlYy0+YXJndW1l
bnQoMCk7CiAgICAgZG91YmxlIGRmID0gZnJhY3Rpb25EaWdpdHMudG9JbnRlZ2VyKGV4ZWMpOwog
ICAgIGlmICghKGRmID49IDAgJiYgZGYgPD0gMjApKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJv
cihleGVjLCBSYW5nZUVycm9yLCAidG9GaXhlZCgpIGRpZ2l0cyBhcmd1bWVudCBtdXN0IGJlIGJl
dHdlZW4gMCBhbmQgMjAiKTsKQEAgLTMzMSw4ICszMzUsOSBAQCBzdGF0aWMgdm9pZCBleHBvbmVu
dGlhbFBhcnRUb1N0cmluZyhjaGFyCiAgICAgYnVmW2krK10gPSBzdGF0aWNfY2FzdDxjaGFyPign
MCcgKyBleHBvbmVudGlhbCAlIDEwKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJl
clByb3RvRnVuY1RvRXhwb25lbnRpYWwoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFs
dWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG51bWJlclByb3RvRnVuY1RvRXhwb25lbnRpYWwoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpT
VmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIEpTVmFsdWUgdiA9
IHRoaXNWYWx1ZS5nZXRKU051bWJlcigpOwogICAgIGlmICghdikKICAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKQEAgLTM0Miw3ICszNDcsNyBAQCBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9FCiAgICAgaWYgKGlzbmFuKHgpIHx8IGlzaW5m
KHgpKQogICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgVVN0cmluZzo6ZnJvbSh4KSk7CiAK
LSAgICBKU1ZhbHVlIGZyYWN0aW9uYWxEaWdpdHNWYWx1ZSA9IGFyZ3MuYXQoMCk7CisgICAgSlNW
YWx1ZSBmcmFjdGlvbmFsRGlnaXRzVmFsdWUgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBkb3Vi
bGUgZGYgPSBmcmFjdGlvbmFsRGlnaXRzVmFsdWUudG9JbnRlZ2VyKGV4ZWMpOwogICAgIGlmICgh
KGRmID49IDAgJiYgZGYgPD0gMjApKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBS
YW5nZUVycm9yLCAidG9FeHBvbmVudGlhbCgpIGFyZ3VtZW50IG11c3QgYmV0d2VlbiAwIGFuZCAy
MCIpOwpAQCAtNDAzLDE1ICs0MDgsMTYgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclBy
b3RvRnVuY1RvRQogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBidWYpOwogfQogCi1KU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9QcmVjaXNpb24oRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1RvUHJlY2lzaW9uKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsK
ICAgICBKU1ZhbHVlIHYgPSB0aGlzVmFsdWUuZ2V0SlNOdW1iZXIoKTsKICAgICBpZiAoIXYpCiAg
ICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKLSAgICBkb3VibGUg
ZG91YmxlUHJlY2lzaW9uID0gYXJncy5hdCgwKS50b0ludGVnZXJQcmVzZXJ2ZU5hTihleGVjKTsK
KyAgICBkb3VibGUgZG91YmxlUHJlY2lzaW9uID0gZXhlYy0+YXJndW1lbnQoMCkudG9JbnRlZ2Vy
UHJlc2VydmVOYU4oZXhlYyk7CiAgICAgZG91YmxlIHggPSB2LnVuY2hlY2tlZEdldE51bWJlcigp
OwotICAgIGlmIChhcmdzLmF0KDApLmlzVW5kZWZpbmVkKCkgfHwgaXNuYW4oeCkgfHwgaXNpbmYo
eCkpCisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgfHwgaXNuYW4oeCkg
fHwgaXNpbmYoeCkpCiAgICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCB2LnRvU3RyaW5nKGV4
ZWMpKTsKIAogICAgIFVTdHJpbmcgczsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2Jq
ZWN0Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T2JqZWN0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMyAr
MzQsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoT2Jq
ZWN0Q29uc3RydWN0b3IpOwogCi1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENv
bnN0cnVjdG9yR2V0UHJvdG90eXBlT2YoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBj
b25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0
cnVjdG9yR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmpl
Y3RDb25zdHJ1Y3RvckdldE93blByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBK
U1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9i
amVjdENvbnN0cnVjdG9yS2V5cyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0
b3JEZWZpbmVQcm9wZXJ0eShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JE
ZWZpbmVQcm9wZXJ0aWVzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvckNy
ZWF0ZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0
YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JHZXRQcm90b3R5cGVP
ZihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3Ry
dWN0b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlOYW1lcyhFeGVj
U3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JL
ZXlzKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25z
dHJ1Y3RvckRlZmluZVByb3BlcnR5KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvckRlZmluZVByb3BlcnRpZXMoRXhlY1N0YXRlKik7Citz
dGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yQ3JlYXRlKEV4ZWNT
dGF0ZSopOwogCiBPYmplY3RDb25zdHJ1Y3Rvcjo6T2JqZWN0Q29uc3RydWN0b3IoRXhlY1N0YXRl
KiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBOb25OdWxsUGFzc1JlZlB0cjxT
dHJ1Y3R1cmU+IHN0cnVjdHVyZSwgT2JqZWN0UHJvdG90eXBlKiBvYmplY3RQcm90b3R5cGUsIFN0
cnVjdHVyZSogcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUpCiA6IEludGVybmFsRnVuY3Rpb24o
JmV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIElkZW50aWZpZXIo
ZXhlYywgIk9iamVjdCIpKQpAQCAtODAsOCArODAsOSBAQCBDb25zdHJ1Y3RUeXBlIE9iamVjdENv
bnN0cnVjdG9yOjpnZXRDb25zCiAgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OwogfQogCi1z
dGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxPYmplY3RDb25zdHJ1Y3RvcihFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK3N0YXRp
YyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbE9iamVjdENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKKyAgICBBcmdMaXN0IGFyZ3MoZXhlYyk7CiAgICAgcmV0dXJuIGNvbnN0cnVjdE9i
amVjdChleGVjLCBhcmdzKTsKIH0KIApAQCAtOTEsMjEgKzkyLDIxIEBAIENhbGxUeXBlIE9iamVj
dENvbnN0cnVjdG9yOjpnZXRDYWxsRGF0YSgKICAgICByZXR1cm4gQ2FsbFR5cGVIb3N0OwogfQog
Ci1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JHZXRQcm90b3R5cGVPZihF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvckdldFByb3RvdHlwZU9mKEV4
ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBpZiAoIWFyZ3MuYXQoMCkuaXNPYmplY3QoKSkKKyAgICBp
ZiAoIWV4ZWMtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKGV4ZWMsIFR5cGVFcnJvciwgIlJlcXVlc3RlZCBwcm90b3R5cGUgb2YgYSB2YWx1ZSB0aGF0
IGlzIG5vdCBhbiBvYmplY3QuIik7Ci0gICAgcmV0dXJuIGFzT2JqZWN0KGFyZ3MuYXQoMCkpLT5w
cm90b3R5cGUoKTsKKyAgICByZXR1cm4gYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpLT5wcm90
b3R5cGUoKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yR2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVl
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0
cnVjdG9yR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBp
ZiAoIWFyZ3MuYXQoMCkuaXNPYmplY3QoKSkKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDApLmlz
T2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvciwgIlJl
cXVlc3RlZCBwcm9wZXJ0eSBkZXNjcmlwdG9yIG9mIGEgdmFsdWUgdGhhdCBpcyBub3QgYW4gb2Jq
ZWN0LiIpOwotICAgIFVTdHJpbmcgcHJvcGVydHlOYW1lID0gYXJncy5hdCgxKS50b1N0cmluZyhl
eGVjKTsKKyAgICBVU3RyaW5nIHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3Ry
aW5nKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJu
IGpzTnVsbCgpOwotICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChhcmdzLmF0KDApKTsK
KyAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpOwogICAg
IFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwogICAgIGlmICghb2JqZWN0LT5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgSWRlbnRpZmllcihleGVjLCBwcm9wZXJ0eU5hbWUpLCBk
ZXNjcmlwdG9yKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC0xMjgsMTIgKzEy
OSwxMiBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JHCiB9CiAKIC8v
IEZJWE1FOiBVc2UgdGhlIGVudW1lcmF0aW9uIGNhY2hlLgotSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlOYW1lcyhFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBvYmplY3RDb25zdHJ1Y3RvckdldE93blByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKiBleGVj
KQogewotICAgIGlmICghYXJncy5hdCgwKS5pc09iamVjdCgpKQorICAgIGlmICghZXhlYy0+YXJn
dW1lbnQoMCkuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlw
ZUVycm9yLCAiUmVxdWVzdGVkIHByb3BlcnR5IG5hbWVzIG9mIGEgdmFsdWUgdGhhdCBpcyBub3Qg
YW4gb2JqZWN0LiIpOwogICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnRpZXMoZXhlYyk7Ci0g
ICAgYXNPYmplY3QoYXJncy5hdCgwKSktPmdldE93blByb3BlcnR5TmFtZXMoZXhlYywgcHJvcGVy
dGllcywgSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyk7CisgICAgYXNPYmplY3QoZXhlYy0+YXJn
dW1lbnQoMCkpLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKGV4ZWMsIHByb3BlcnRpZXMsIEluY2x1ZGVE
b250RW51bVByb3BlcnRpZXMpOwogICAgIEpTQXJyYXkqIG5hbWVzID0gY29uc3RydWN0RW1wdHlB
cnJheShleGVjKTsKICAgICBzaXplX3QgbnVtUHJvcGVydGllcyA9IHByb3BlcnRpZXMuc2l6ZSgp
OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtUHJvcGVydGllczsgaSsrKQpAQCAtMTQy
LDEyICsxNDMsMTIgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yRwog
fQogCiAvLyBGSVhNRTogVXNlIHRoZSBlbnVtZXJhdGlvbiBjYWNoZS4KLUpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvcktleXMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2Jq
ZWN0Q29uc3RydWN0b3JLZXlzKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBpZiAoIWFyZ3MuYXQo
MCkuaXNPYmplY3QoKSkKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkpCiAg
ICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvciwgIlJlcXVlc3RlZCBrZXlz
IG9mIGEgdmFsdWUgdGhhdCBpcyBub3QgYW4gb2JqZWN0LiIpOwogICAgIFByb3BlcnR5TmFtZUFy
cmF5IHByb3BlcnRpZXMoZXhlYyk7Ci0gICAgYXNPYmplY3QoYXJncy5hdCgwKSktPmdldE93blBy
b3BlcnR5TmFtZXMoZXhlYywgcHJvcGVydGllcyk7CisgICAgYXNPYmplY3QoZXhlYy0+YXJndW1l
bnQoMCkpLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKGV4ZWMsIHByb3BlcnRpZXMpOwogICAgIEpTQXJy
YXkqIGtleXMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMpOwogICAgIHNpemVfdCBudW1Qcm9w
ZXJ0aWVzID0gcHJvcGVydGllcy5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBu
dW1Qcm9wZXJ0aWVzOyBpKyspCkBAIC0yNDEsMTYgKzI0MiwxNiBAQCBzdGF0aWMgYm9vbCB0b1By
b3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvckRlZmluZVByb3BlcnR5KEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yRGVmaW5lUHJvcGVydHkoRXhlY1N0YXRlKiBl
eGVjKQogewotICAgIGlmICghYXJncy5hdCgwKS5pc09iamVjdCgpKQorICAgIGlmICghZXhlYy0+
YXJndW1lbnQoMCkuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywg
VHlwZUVycm9yLCAiUHJvcGVydGllcyBjYW4gb25seSBiZSBkZWZpbmVkIG9uIE9iamVjdHMuIik7
Ci0gICAgSlNPYmplY3QqIE8gPSBhc09iamVjdChhcmdzLmF0KDApKTsKLSAgICBVU3RyaW5nIHBy
b3BlcnR5TmFtZSA9IGFyZ3MuYXQoMSkudG9TdHJpbmcoZXhlYyk7CisgICAgSlNPYmplY3QqIE8g
PSBhc09iamVjdChleGVjLT5hcmd1bWVudCgwKSk7CisgICAgVVN0cmluZyBwcm9wZXJ0eU5hbWUg
PSBleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICBQcm9wZXJ0eURlc2NyaXB0
b3IgZGVzY3JpcHRvcjsKLSAgICBpZiAoIXRvUHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIGFyZ3Mu
YXQoMiksIGRlc2NyaXB0b3IpKQorICAgIGlmICghdG9Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywg
ZXhlYy0+YXJndW1lbnQoMiksIGRlc2NyaXB0b3IpKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7
CiAgICAgQVNTRVJUKChkZXNjcmlwdG9yLmF0dHJpYnV0ZXMoKSAmIChHZXR0ZXIgfCBTZXR0ZXIp
KSB8fCAoIWRlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkpOwogICAgIEFTU0VSVCgh
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwpAQCAtMjkyLDI2ICsyOTMsMjYgQEAgc3RhdGljIEpTVmFs
dWUgZGVmaW5lUHJvcGVydGllcyhFeGVjU3RhdAogICAgIHJldHVybiBvYmplY3Q7CiB9CiAKLUpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvckRlZmluZVByb3BlcnRpZXMoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JEZWZpbmVQcm9wZXJ0aWVzKEV4
ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBpZiAoIWFyZ3MuYXQoMCkuaXNPYmplY3QoKSkKKyAgICBp
ZiAoIWV4ZWMtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKGV4ZWMsIFR5cGVFcnJvciwgIlByb3BlcnRpZXMgY2FuIG9ubHkgYmUgZGVmaW5lZCBvbiBP
YmplY3RzLiIpOwotICAgIGlmICghYXJncy5hdCgxKS5pc09iamVjdCgpKQorICAgIGlmICghZXhl
Yy0+YXJndW1lbnQoMSkuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhl
YywgVHlwZUVycm9yLCAiUHJvcGVydHkgZGVzY3JpcHRvciBsaXN0IG11c3QgYmUgYW4gT2JqZWN0
LiIpOwotICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0aWVzKGV4ZWMsIGFzT2JqZWN0KGFyZ3MuYXQo
MCkpLCBhc09iamVjdChhcmdzLmF0KDEpKSk7CisgICAgcmV0dXJuIGRlZmluZVByb3BlcnRpZXMo
ZXhlYywgYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpLCBhc09iamVjdChleGVjLT5hcmd1bWVu
dCgxKSkpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JDcmVh
dGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JDcmVhdGUoRXhlY1N0
YXRlKiBleGVjKQogewotICAgIGlmICghYXJncy5hdCgwKS5pc09iamVjdCgpICYmICFhcmdzLmF0
KDApLmlzTnVsbCgpKQorICAgIGlmICghZXhlYy0+YXJndW1lbnQoMCkuaXNPYmplY3QoKSAmJiAh
ZXhlYy0+YXJndW1lbnQoMCkuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4
ZWMsIFR5cGVFcnJvciwgIk9iamVjdCBwcm90b3R5cGUgbWF5IG9ubHkgYmUgYW4gT2JqZWN0IG9y
IG51bGwuIik7CiAgICAgSlNPYmplY3QqIG5ld09iamVjdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0
KGV4ZWMpOwotICAgIG5ld09iamVjdC0+c2V0UHJvdG90eXBlKGFyZ3MuYXQoMCkpOwotICAgIGlm
IChhcmdzLmF0KDEpLmlzVW5kZWZpbmVkKCkpCisgICAgbmV3T2JqZWN0LT5zZXRQcm90b3R5cGUo
ZXhlYy0+YXJndW1lbnQoMCkpOworICAgIGlmIChleGVjLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5l
ZCgpKQogICAgICAgICByZXR1cm4gbmV3T2JqZWN0OwotICAgIGlmICghYXJncy5hdCgxKS5pc09i
amVjdCgpKQorICAgIGlmICghZXhlYy0+YXJndW1lbnQoMSkuaXNPYmplY3QoKSkKICAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAiUHJvcGVydHkgZGVzY3JpcHRvciBs
aXN0IG11c3QgYmUgYW4gT2JqZWN0LiIpOwotICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0aWVzKGV4
ZWMsIG5ld09iamVjdCwgYXNPYmplY3QoYXJncy5hdCgxKSkpOworICAgIHJldHVybiBkZWZpbmVQ
cm9wZXJ0aWVzKGV4ZWMsIG5ld09iamVjdCwgYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMSkpKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL09i
amVjdFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
YmplY3RQcm90b3R5cGUuY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTUgKzMxLDE1
IEBAIG5hbWVzcGFjZSBKU0MgewogCiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKE9iamVjdFBy
b3RvdHlwZSk7CiAKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5j
VmFsdWVPZihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsK
LXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jSGFzT3duUHJvcGVy
dHkoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0
aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0lzUHJvdG90eXBlT2YoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0RlZmluZUdldHRlcihFeGVjU3RhdGUq
LCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jRGVmaW5lU2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBvYmplY3RQcm90b0Z1bmNMb29rdXBHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBK
U1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9i
amVjdFByb3RvRnVuY0xvb2t1cFNldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJv
dG9GdW5jUHJvcGVydHlJc0VudW1lcmFibGUoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
LCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFBy
b3RvRnVuY1RvTG9jYWxlU3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1
bmNWYWx1ZU9mKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmpl
Y3RQcm90b0Z1bmNIYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jSXNQcm90b3R5cGVPZihFeGVjU3RhdGUqKTsKK3N0
YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jRGVmaW5lR2V0dGVyKEV4
ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNE
ZWZpbmVTZXR0ZXIoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9i
amVjdFByb3RvRnVuY0xvb2t1cEdldHRlcihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jTG9va3VwU2V0dGVyKEV4ZWNTdGF0ZSopOworc3Rh
dGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNQcm9wZXJ0eUlzRW51bWVy
YWJsZShFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJv
dG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRlKik7CiAKIE9iamVjdFByb3RvdHlwZTo6T2Jq
ZWN0UHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgTm9uTnVsbFBhc3NSZWZQdHI8U3RydWN0dXJlPiBzdHVjdHVyZSwgU3RydWN0dXJlKiBwcm90
b3R5cGVGdW5jdGlvblN0cnVjdHVyZSkKICAgICA6IEpTT2JqZWN0KHN0dWN0dXJlKQpAQCAtODEs
NzQgKzgxLDg0IEBAIGJvb2wgT2JqZWN0UHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eVNsb3QKIAog
Ly8gRUNNQSAxNS4yLjQuMiwgMTUuMi40LjQsIDE1LjIuNC41LCAxNS4yLjQuNwogCi1KU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jVmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY1ZhbHVlT2YoRXhlY1N0YXRlKiBleGVjKQogeworICAg
IEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIHJldHVybiB0
aGlzVmFsdWUudG9UaGlzT2JqZWN0KGV4ZWMpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
b2JqZWN0UHJvdG9GdW5jSGFzT3duUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG9iamVjdFByb3RvRnVuY0hhc093blByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYykKIHsK
LSAgICByZXR1cm4ganNCb29sZWFuKHRoaXNWYWx1ZS50b1RoaXNPYmplY3QoZXhlYyktPmhhc093
blByb3BlcnR5KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgYXJncy5hdCgwKS50b1N0cmluZyhleGVj
KSkpKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKKyAg
ICByZXR1cm4ganNCb29sZWFuKHRoaXNWYWx1ZS50b1RoaXNPYmplY3QoZXhlYyktPmhhc093blBy
b3BlcnR5KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmco
ZXhlYykpKSk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNJc1By
b3RvdHlwZU9mKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1
bmNJc1Byb3RvdHlwZU9mKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1
ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBKU09iamVjdCogdGhpc09iaiA9IHRoaXNW
YWx1ZS50b1RoaXNPYmplY3QoZXhlYyk7CiAKLSAgICBpZiAoIWFyZ3MuYXQoMCkuaXNPYmplY3Qo
KSkKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVy
biBqc0Jvb2xlYW4oZmFsc2UpOwogCi0gICAgSlNWYWx1ZSB2ID0gYXNPYmplY3QoYXJncy5hdCgw
KSktPnByb3RvdHlwZSgpOworICAgIEpTVmFsdWUgdiA9IGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50
KDApKS0+cHJvdG90eXBlKCk7CiAKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBpZiAoIXYu
aXNPYmplY3QoKSkKICAgICAgICAgICAgIHJldHVybiBqc0Jvb2xlYW4oZmFsc2UpOwotICAgICAg
ICBpZiAodiA9PSB0aGlzT2JqKQsKKyAgICAgICAgaWYgKHYgPT0gdGhpc09iaikKICAgICAgICAg
ICAgIHJldHVybiBqc0Jvb2xlYW4odHJ1ZSk7CiAgICAgICAgIHYgPSBhc09iamVjdCh2KS0+cHJv
dG90eXBlKCk7CiAgICAgfQogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9G
dW5jRGVmaW5lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQ
cm90b0Z1bmNEZWZpbmVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhp
c1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwot
ICAgIGlmIChhcmdzLmF0KDEpLmdldENhbGxEYXRhKGNhbGxEYXRhKSA9PSBDYWxsVHlwZU5vbmUp
CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50KDEpLmdldENhbGxEYXRhKGNhbGxEYXRhKSA9PSBDYWxs
VHlwZU5vbmUpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCAi
aW52YWxpZCBnZXR0ZXIgdXNhZ2UiKTsKLSAgICB0aGlzVmFsdWUudG9UaGlzT2JqZWN0KGV4ZWMp
LT5kZWZpbmVHZXR0ZXIoZXhlYywgSWRlbnRpZmllcihleGVjLCBhcmdzLmF0KDApLnRvU3RyaW5n
KGV4ZWMpKSwgYXNPYmplY3QoYXJncy5hdCgxKSkpOworICAgIHRoaXNWYWx1ZS50b1RoaXNPYmpl
Y3QoZXhlYyktPmRlZmluZUdldHRlcihleGVjLCBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPmFyZ3Vt
ZW50KDApLnRvU3RyaW5nKGV4ZWMpKSwgYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMSkpKTsKICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVj
dFByb3RvRnVuY0RlZmluZVNldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1
ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
b2JqZWN0UHJvdG9GdW5jRGVmaW5lU2V0dGVyKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1Zh
bHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBDYWxsRGF0YSBjYWxs
RGF0YTsKLSAgICBpZiAoYXJncy5hdCgxKS5nZXRDYWxsRGF0YShjYWxsRGF0YSkgPT0gQ2FsbFR5
cGVOb25lKQorICAgIGlmIChleGVjLT5hcmd1bWVudCgxKS5nZXRDYWxsRGF0YShjYWxsRGF0YSkg
PT0gQ2FsbFR5cGVOb25lKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhF
cnJvciwgImludmFsaWQgc2V0dGVyIHVzYWdlIik7Ci0gICAgdGhpc1ZhbHVlLnRvVGhpc09iamVj
dChleGVjKS0+ZGVmaW5lU2V0dGVyKGV4ZWMsIElkZW50aWZpZXIoZXhlYywgYXJncy5hdCgwKS50
b1N0cmluZyhleGVjKSksIGFzT2JqZWN0KGFyZ3MuYXQoMSkpKTsKKyAgICB0aGlzVmFsdWUudG9U
aGlzT2JqZWN0KGV4ZWMpLT5kZWZpbmVTZXR0ZXIoZXhlYywgSWRlbnRpZmllcihleGVjLCBleGVj
LT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSksIGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDEp
KSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBvYmplY3RQcm90b0Z1bmNMb29rdXBHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG9iamVjdFByb3RvRnVuY0xvb2t1cEdldHRlcihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0g
ICAgcmV0dXJuIHRoaXNWYWx1ZS50b1RoaXNPYmplY3QoZXhlYyktPmxvb2t1cEdldHRlcihleGVj
LCBJZGVudGlmaWVyKGV4ZWMsIGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpKTsKKyAgICBKU1Zh
bHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKKyAgICByZXR1cm4gdGhpc1Zh
bHVlLnRvVGhpc09iamVjdChleGVjKS0+bG9va3VwR2V0dGVyKGV4ZWMsIElkZW50aWZpZXIoZXhl
YywgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpKTsKIH0KIAotSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0xvb2t1cFNldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jTG9va3VwU2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YykKIHsKLSAgICByZXR1cm4gdGhpc1ZhbHVlLnRvVGhpc09iamVjdChleGVjKS0+bG9va3VwU2V0
dGVyKGV4ZWMsIElkZW50aWZpZXIoZXhlYywgYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSkpOwor
ICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOworICAgIHJldHVy
biB0aGlzVmFsdWUudG9UaGlzT2JqZWN0KGV4ZWMpLT5sb29rdXBTZXR0ZXIoZXhlYywgSWRlbnRp
ZmllcihleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSkpOwogfQogCi1KU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jUHJvcGVydHlJc0VudW1lcmFibGUoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY1Byb3BlcnR5SXNF
bnVtZXJhYmxlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4ganNCb29sZWFuKHRoaXNW
YWx1ZS50b1RoaXNPYmplY3QoZXhlYyktPnByb3BlcnR5SXNFbnVtZXJhYmxlKGV4ZWMsIElkZW50
aWZpZXIoZXhlYywgYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSkpKTsKKyAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKKyAgICByZXR1cm4ganNCb29sZWFuKHRo
aXNWYWx1ZS50b1RoaXNPYmplY3QoZXhlYyktPnByb3BlcnR5SXNFbnVtZXJhYmxlKGV4ZWMsIElk
ZW50aWZpZXIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpKSk7CiB9CiAK
LUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
KQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKEV4
ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlz
VmFsdWUoKTsKICAgICByZXR1cm4gdGhpc1ZhbHVlLnRvVGhpc0pTU3RyaW5nKGV4ZWMpOwogfQog
Ci1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4
ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAg
ICAgcmV0dXJuIGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIltvYmplY3QgIiwgdGhpc1Zh
bHVlLnRvVGhpc09iamVjdChleGVjKS0+Y2xhc3NOYW1lKCksICJdIik7CiB9CiAKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuaAkocmV2aXNpb24gNjAzNDEpCisr
KyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIG1faGFzTm9Q
cm9wZXJ0aWVzV2l0aFVJbnQzMk5hbWVzOwogICAgIH07CiAKLSAgICBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgb2JqZWN0UHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1Zh
bHVlLCBjb25zdCBBcmdMaXN0Jik7CisgICAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFBy
b3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSopOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRl
eDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgJKHJldmlzaW9uIDYwMzQxKQorKysgSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4OSwx
NSArMTg5LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gbmV3IChnbG9iYWxE
YXRhKSBKU1N0cmluZyhnbG9iYWxEYXRhLCByb3BlQnVpbGRlci5yZWxlYXNlKCkpOwogICAgIH0K
IAotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorICAgIEFMV0FZU19JTkxJTkUg
SlNWYWx1ZSBqc1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdGhpc1ZhbHVlKQogICAg
IHsKICAgICAgICAgdW5zaWduZWQgZmliZXJDb3VudCA9IDA7CiAgICAgICAgIGlmIChMSUtFTFko
dGhpc1ZhbHVlLmlzU3RyaW5nKCkpKQogICAgICAgICAgICAgZmliZXJDb3VudCArPSBhc1N0cmlu
Zyh0aGlzVmFsdWUpLT5zaXplKCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgICsrZmliZXJD
b3VudDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3Muc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgICAgIEpTVmFsdWUgdiA9IGFyZ3MuYXQoaSk7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBleGVjLT5hcmd1bWVudENvdW50KCk7ICsraSkgeworICAgICAgICAg
ICAgSlNWYWx1ZSB2ID0gZXhlYy0+YXJndW1lbnQoaSk7CiAgICAgICAgICAgICBpZiAoTElLRUxZ
KHYuaXNTdHJpbmcoKSkpCiAgICAgICAgICAgICAgICAgZmliZXJDb3VudCArPSBhc1N0cmluZyh2
KS0+c2l6ZSgpOwogICAgICAgICAgICAgZWxzZQpAQCAtMjE2LDggKzIxNiw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSAwOwogICAgICAgICBib29sIG92ZXJm
bG93ID0gZmFsc2U7CiAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3Muc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIEpTVmFsdWUgdiA9IGFyZ3MuYXQoaSk7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGVjLT5hcmd1bWVudENvdW50KCk7ICsraSkgewor
ICAgICAgICAgICAgSlNWYWx1ZSB2ID0gZXhlYy0+YXJndW1lbnQoaSk7CiAgICAgICAgICAgICBp
ZiAoTElLRUxZKHYuaXNTdHJpbmcoKSkpCiAgICAgICAgICAgICAgICAgcm9wZUJ1aWxkZXIuYXBw
ZW5kKGFzU3RyaW5nKHYpKTsKICAgICAgICAgICAgIGVsc2UKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHJvcGVydHlTbG90LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb3BlcnR5U2xvdC5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm9wZXJ0eVNsb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMSArMzQs
NyBAQCBKU1ZhbHVlIFByb3BlcnR5U2xvdDo6ZnVuY3Rpb25HZXR0ZXIoRXhlCiAKICAgICBDYWxs
RGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IG1fZGF0YS5nZXR0ZXJGdW5j
LT5nZXRDYWxsRGF0YShjYWxsRGF0YSk7Ci0gICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlSG9z
dCkKLSAgICAgICAgcmV0dXJuIGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihleGVjLCBtX2RhdGEu
Z2V0dGVyRnVuYywgdGhpc1ZhbHVlKCksIGV4ZWMtPmVtcHR5TGlzdCgpKTsKLSAgICBBU1NFUlQo
Y2FsbFR5cGUgPT0gQ2FsbFR5cGVKUyk7Ci0gICAgLy8gRklYTUU6IENhbiB0aGlzIGJlIGRvbmUg
bW9yZSBlZmZpY2llbnRseSB1c2luZyB0aGUgY2FsbERhdGE/Ci0gICAgcmV0dXJuIGFzRnVuY3Rp
b24obV9kYXRhLmdldHRlckZ1bmMpLT5jYWxsKGV4ZWMsIHRoaXNWYWx1ZSgpLCBleGVjLT5lbXB0
eUxpc3QoKSk7CisgICAgcmV0dXJuIGNhbGwoZXhlYywgbV9kYXRhLmdldHRlckZ1bmMsIGNhbGxU
eXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlKCksIGV4ZWMtPmVtcHR5TGlzdCgpKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0
cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENv
bnN0cnVjdG9yLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE5LDggKzMxOSw5IEBA
IENvbnN0cnVjdFR5cGUgUmVnRXhwQ29uc3RydWN0b3I6OmdldENvbnMKIH0KIAogLy8gRUNNQSAx
NS4xMC4zCi1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxSZWdFeHBDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJn
cykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFJlZ0V4cENvbnN0cnVjdG9yKEV4
ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBBcmdMaXN0IGFyZ3MoZXhlYyk7CiAgICAgcmV0dXJuIGNv
bnN0cnVjdFJlZ0V4cChleGVjLCBhcmdzKTsKIH0KIApJbmRleDogSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwT2JqZWN0LmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMywyMSArMTEzLDIx
IEBAIHZvaWQgc2V0UmVnRXhwT2JqZWN0TGFzdEluZGV4KEV4ZWNTdGF0ZSoKICAgICBhc1JlZ0V4
cE9iamVjdChiYXNlT2JqZWN0KS0+c2V0TGFzdEluZGV4KHZhbHVlLnRvSW50ZWdlcihleGVjKSk7
CiB9CiAKLUpTVmFsdWUgUmVnRXhwT2JqZWN0Ojp0ZXN0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
QXJnTGlzdCYgYXJncykKK0pTVmFsdWUgUmVnRXhwT2JqZWN0Ojp0ZXN0KEV4ZWNTdGF0ZSogZXhl
YykKIHsKLSAgICByZXR1cm4ganNCb29sZWFuKG1hdGNoKGV4ZWMsIGFyZ3MpKTsKKyAgICByZXR1
cm4ganNCb29sZWFuKG1hdGNoKGV4ZWMpKTsKIH0KIAotSlNWYWx1ZSBSZWdFeHBPYmplY3Q6OmV4
ZWMoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBSZWdFeHBP
YmplY3Q6OmV4ZWMoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGlmIChtYXRjaChleGVjLCBhcmdz
KSkKKyAgICBpZiAobWF0Y2goZXhlYykpCiAgICAgICAgIHJldHVybiBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCktPnJlZ0V4cENvbnN0cnVjdG9yKCktPmFycmF5T2ZNYXRjaGVzKGV4ZWMpOwog
ICAgIHJldHVybiBqc051bGwoKTsKIH0KIAotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
YWxsUmVnRXhwT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9uLCBKU1Zh
bHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
YWxsUmVnRXhwT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gYXNSZWdFeHBP
YmplY3QoZnVuY3Rpb24pLT5leGVjKGV4ZWMsIGFyZ3MpOworICAgIHJldHVybiBhc1JlZ0V4cE9i
amVjdChleGVjLT5jYWxsZWUoKSktPmV4ZWMoZXhlYyk7CiB9CiAKIENhbGxUeXBlIFJlZ0V4cE9i
amVjdDo6Z2V0Q2FsbERhdGEoQ2FsbERhdGEmIGNhbGxEYXRhKQpAQCAtMTM3LDExICsxMzcsMTEg
QEAgQ2FsbFR5cGUgUmVnRXhwT2JqZWN0OjpnZXRDYWxsRGF0YShDYWxsRAogfQogCiAvLyBTaGFy
ZWQgaW1wbGVtZW50YXRpb24gdXNlZCBieSB0ZXN0IGFuZCBleGVjLgotYm9vbCBSZWdFeHBPYmpl
Y3Q6Om1hdGNoKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK2Jvb2wgUmVn
RXhwT2JqZWN0OjptYXRjaChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgUmVnRXhwQ29uc3RydWN0
b3IqIHJlZ0V4cENvbnN0cnVjdG9yID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5yZWdF
eHBDb25zdHJ1Y3RvcigpOwogCi0gICAgVVN0cmluZyBpbnB1dCA9IGFyZ3MuaXNFbXB0eSgpID8g
cmVnRXhwQ29uc3RydWN0b3ItPmlucHV0KCkgOiBhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpOwor
ICAgIFVTdHJpbmcgaW5wdXQgPSAhZXhlYy0+YXJndW1lbnRDb3VudCgpID8gcmVnRXhwQ29uc3Ry
dWN0b3ItPmlucHV0KCkgOiBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKTsKICAgICBp
ZiAoaW5wdXQuaXNOdWxsKCkpIHsKICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBHZW5lcmFsRXJy
b3IsIG1ha2VTdHJpbmcoIk5vIGlucHV0IHRvICIsIHRvU3RyaW5nKGV4ZWMpLCAiLiIpKTsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBP
YmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVj
dC5oCShyZXZpc2lvbiA2MDM0MSkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHZvaWQgc2V0TGFzdEluZGV4KGRvdWJsZSBsYXN0SW5kZXgpIHsgZC0+bGFzdEluZGV4
ID0gbGFzdEluZGV4OyB9CiAgICAgICAgIGRvdWJsZSBsYXN0SW5kZXgoKSBjb25zdCB7IHJldHVy
biBkLT5sYXN0SW5kZXg7IH0KIAotICAgICAgICBKU1ZhbHVlIHRlc3QoRXhlY1N0YXRlKiwgY29u
c3QgQXJnTGlzdCYpOwotICAgICAgICBKU1ZhbHVlIGV4ZWMoRXhlY1N0YXRlKiwgY29uc3QgQXJn
TGlzdCYpOworICAgICAgICBKU1ZhbHVlIHRlc3QoRXhlY1N0YXRlKik7CisgICAgICAgIEpTVmFs
dWUgZXhlYyhFeGVjU3RhdGUqKTsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90Jik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5RGVzY3JpcHRvciYpOwpAQCAt
NTYsNyArNTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNPYmpl
Y3RXaXRoR2xvYmFsT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKICAgICAgICAgCiAgICAgcHJpdmF0
ZToKLSAgICAgICAgYm9vbCBtYXRjaChFeGVjU3RhdGUqLCBjb25zdCBBcmdMaXN0Jik7CisgICAg
ICAgIGJvb2wgbWF0Y2goRXhlY1N0YXRlKik7CiAKICAgICAgICAgdmlydHVhbCBDYWxsVHlwZSBn
ZXRDYWxsRGF0YShDYWxsRGF0YSYpOwogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHBQcm90b3R5cGUuY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTAgKzM4LDEw
IEBAIG5hbWVzcGFjZSBKU0MgewogCiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKFJlZ0V4cFBy
b3RvdHlwZSk7CiAKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9GdW5j
VGVzdChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0
YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9GdW5jRXhlYyhFeGVjU3RhdGUq
LCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgcmVnRXhwUHJvdG9GdW5jQ29tcGlsZShFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
cmVnRXhwUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBj
b25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3Rv
RnVuY1Rlc3QoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4
cFByb3RvRnVuY0V4ZWMoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHJlZ0V4cFByb3RvRnVuY0NvbXBpbGUoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHJlZ0V4cFByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSopOwogCiAvLyBFQ01B
IDE1LjEwLjUKIApAQCAtNTgsMzUgKzU4LDM4IEBAIFJlZ0V4cFByb3RvdHlwZTo6UmVnRXhwUHJv
dG90eXBlKEV4ZWNTdGEKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0
aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAKLUpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCByZWdFeHBQcm90b0Z1bmNUZXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCByZWdFeHBQcm90b0Z1bmNUZXN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAoIXRoaXNWYWx1ZS5pbmhl
cml0cygmUmVnRXhwT2JqZWN0OjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhl
YywgVHlwZUVycm9yKTsKLSAgICByZXR1cm4gYXNSZWdFeHBPYmplY3QodGhpc1ZhbHVlKS0+dGVz
dChleGVjLCBhcmdzKTsKKyAgICByZXR1cm4gYXNSZWdFeHBPYmplY3QodGhpc1ZhbHVlKS0+dGVz
dChleGVjKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvRnVuY0V4ZWMo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvRnVuY0V4ZWMoRXhl
Y1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNW
YWx1ZSgpOwogICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZSZWdFeHBPYmplY3Q6OmluZm8p
KQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwotICAgIHJldHVy
biBhc1JlZ0V4cE9iamVjdCh0aGlzVmFsdWUpLT5leGVjKGV4ZWMsIGFyZ3MpOworICAgIHJldHVy
biBhc1JlZ0V4cE9iamVjdCh0aGlzVmFsdWUpLT5leGVjKGV4ZWMpOwogfQogCi1KU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgcmVnRXhwUHJvdG9GdW5jQ29tcGlsZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgcmVnRXhwUHJvdG9GdW5jQ29tcGlsZShFeGVjU3RhdGUqIGV4ZWMpCiB7Cisg
ICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKCF0
aGlzVmFsdWUuaW5oZXJpdHMoJlJlZ0V4cE9iamVjdDo6aW5mbykpCiAgICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKICAgICBSZWZQdHI8UmVnRXhwPiByZWdFeHA7
Ci0gICAgSlNWYWx1ZSBhcmcwID0gYXJncy5hdCgwKTsKLSAgICBKU1ZhbHVlIGFyZzEgPSBhcmdz
LmF0KDEpOworICAgIEpTVmFsdWUgYXJnMCA9IGV4ZWMtPmFyZ3VtZW50KDApOworICAgIEpTVmFs
dWUgYXJnMSA9IGV4ZWMtPmFyZ3VtZW50KDEpOwogICAgIAogICAgIGlmIChhcmcwLmluaGVyaXRz
KCZSZWdFeHBPYmplY3Q6OmluZm8pKSB7CiAgICAgICAgIGlmICghYXJnMS5pc1VuZGVmaW5lZCgp
KQogICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAiQ2Fubm90
IHN1cHBseSBmbGFncyB3aGVuIGNvbnN0cnVjdGluZyBvbmUgUmVnRXhwIGZyb20gYW5vdGhlci4i
KTsKICAgICAgICAgcmVnRXhwID0gYXNSZWdFeHBPYmplY3QoYXJnMCktPnJlZ0V4cCgpOwogICAg
IH0gZWxzZSB7Ci0gICAgICAgIFVTdHJpbmcgcGF0dGVybiA9IGFyZ3MuaXNFbXB0eSgpID8gVVN0
cmluZygiIikgOiBhcmcwLnRvU3RyaW5nKGV4ZWMpOworICAgICAgICBVU3RyaW5nIHBhdHRlcm4g
PSAhZXhlYy0+YXJndW1lbnRDb3VudCgpID8gVVN0cmluZygiIikgOiBhcmcwLnRvU3RyaW5nKGV4
ZWMpOwogICAgICAgICBVU3RyaW5nIGZsYWdzID0gYXJnMS5pc1VuZGVmaW5lZCgpID8gVVN0cmlu
ZygiIikgOiBhcmcxLnRvU3RyaW5nKGV4ZWMpOwogICAgICAgICByZWdFeHAgPSBSZWdFeHA6OmNy
ZWF0ZSgmZXhlYy0+Z2xvYmFsRGF0YSgpLCBwYXR0ZXJuLCBmbGFncyk7CiAgICAgfQpAQCAtOTks
OCArMTAyLDkgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvRnVuY0NvbQogICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhw
UHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhp
c1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90
b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUg
PSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJlJl
Z0V4cE9iamVjdDo6aW5mbykpIHsKICAgICAgICAgaWYgKHRoaXNWYWx1ZS5pbmhlcml0cygmUmVn
RXhwUHJvdG90eXBlOjppbmZvKSkKICAgICAgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJp
bmcoZXhlYywgIi8vIik7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0
cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0Nv
bnN0cnVjdG9yLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cmluZ0NvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMjEgKzMwLDIxIEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdGF0aWMgTkVWRVJfSU5MSU5FIEpTVmFsdWUgc3RyaW5n
RnJvbUNoYXJDb2RlU2xvd0Nhc2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQorc3RhdGljIE5FVkVSX0lOTElORSBKU1ZhbHVlIHN0cmluZ0Zyb21DaGFyQ29kZVNsb3dDYXNl
KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBhcmdzLnNpemUoKTsK
KyAgICB1bnNpZ25lZCBsZW5ndGggPSBleGVjLT5hcmd1bWVudENvdW50KCk7CiAgICAgVUNoYXIq
IGJ1ZjsKICAgICBQYXNzUmVmUHRyPFVTdHJpbmdJbXBsPiBpbXBsID0gVVN0cmluZ0ltcGw6OmNy
ZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWYpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgYnVmW2ldID0gc3RhdGljX2Nhc3Q8VUNoYXI+KGFy
Z3MuYXQoaSkudG9VSW50MzIoZXhlYykpOworICAgICAgICBidWZbaV0gPSBzdGF0aWNfY2FzdDxV
Q2hhcj4oZXhlYy0+YXJndW1lbnQoaSkudG9VSW50MzIoZXhlYykpOwogICAgIHJldHVybiBqc1N0
cmluZyhleGVjLCBpbXBsKTsKIH0KIAotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJp
bmdGcm9tQ2hhckNvZGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ0Zyb21D
aGFyQ29kZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgaWYgKExJS0VMWShhcmdzLnNpemUoKSA9
PSAxKSkKLSAgICAgICAgcmV0dXJuIGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGV4ZWMsIGFyZ3Mu
YXQoMCkudG9VSW50MzIoZXhlYykpOwotICAgIHJldHVybiBzdHJpbmdGcm9tQ2hhckNvZGVTbG93
Q2FzZShleGVjLCBhcmdzKTsKKyAgICBpZiAoTElLRUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA9
PSAxKSkKKyAgICAgICAgcmV0dXJuIGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGV4ZWMsIGV4ZWMt
PmFyZ3VtZW50KDApLnRvVUludDMyKGV4ZWMpKTsKKyAgICByZXR1cm4gc3RyaW5nRnJvbUNoYXJD
b2RlU2xvd0Nhc2UoZXhlYyk7CiB9CiAKIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoU3RyaW5n
Q29uc3RydWN0b3IpOwpAQCAtODAsMTEgKzgwLDExIEBAIENvbnN0cnVjdFR5cGUgU3RyaW5nQ29u
c3RydWN0b3I6OmdldENvbnMKIH0KIAogLy8gRUNNQSAxNS41LjEKLXN0YXRpYyBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY2FsbFN0cmluZ0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGljIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjYWxsU3RyaW5nQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGlm
IChhcmdzLmlzRW1wdHkoKSkKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKICAgICAg
ICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcoZXhlYyk7Ci0gICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMs
IGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpOworICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBl
eGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSk7CiB9CiAKIENhbGxUeXBlIFN0cmluZ0Nv
bnN0cnVjdG9yOjpnZXRDYWxsRGF0YShDYWxsRGF0YSYgY2FsbERhdGEpCkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiA2MDM0MSkKKysr
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDUsNDAgKzQ1LDM4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBBU1NFUlRfQ0xBU1NfRklU
U19JTl9DRUxMKFN0cmluZ1Byb3RvdHlwZSk7CiAKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgc3RyaW5nUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
LCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1By
b3RvRnVuY0NoYXJBdChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xp
c3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQ2hhckNv
ZGVBdChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0
YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQ29uY2F0KEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNJbmRleE9mKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzdHJpbmdQcm90b0Z1bmNMYXN0SW5kZXhPZihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFs
dWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5n
UHJvdG9GdW5jTWF0Y2goRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdM
aXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1JlcGxh
Y2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0
aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1NlYXJjaChFeGVjU3RhdGUq
LCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU2xpY2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBK
U1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0
cmluZ1Byb3RvRnVuY1NwbGl0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3Qg
QXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNT
dWJzdHIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1z
dGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1N1YnN0cmluZyhFeGVj
U3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVG9Mb3dlckNhc2UoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RvVXBwZXJDYXNlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzdHJpbmdQcm90b0Z1bmNMb2NhbGVDb21wYXJlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotCi1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0
cmluZ1Byb3RvRnVuY0JpZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU21h
bGwoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0
aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0JsaW5rKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNCb2xkKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJp
bmdQcm90b0Z1bmNGaXhlZChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jSXRh
bGljcyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0
YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU3RyaWtlKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTdWIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBK
U1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0
cmluZ1Byb3RvRnVuY1N1cChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jRm9u
dGNvbG9yKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwot
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNGb250c2l6ZShFeGVj
U3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQW5jaG9yKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBzdHJpbmdQcm90b0Z1bmNMaW5rKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYpOwotCi1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1By
b3RvRnVuY1RyaW0oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0
Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RyaW1MZWZ0
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGlj
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUcmltUmlnaHQoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSopOworc3RhdGlj
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNDaGFyQXQoRXhlY1N0YXRlKik7
CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0NoYXJDb2RlQXQo
RXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVu
Y0NvbmNhdChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5n
UHJvdG9GdW5jSW5kZXhPZihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgc3RyaW5nUHJvdG9GdW5jTGFzdEluZGV4T2YoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY01hdGNoKEV4ZWNTdGF0ZSopOworc3RhdGlj
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNSZXBsYWNlKEV4ZWNTdGF0ZSop
Oworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTZWFyY2goRXhl
Y1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1Ns
aWNlKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90
b0Z1bmNTcGxpdChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
aW5nUHJvdG9GdW5jU3Vic3RyKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBzdHJpbmdQcm90b0Z1bmNTdWJzdHJpbmcoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RvTG93ZXJDYXNlKEV4ZWNTdGF0ZSopOwor
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUb1VwcGVyQ2FzZShF
eGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5j
TG9jYWxlQ29tcGFyZShFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
c3RyaW5nUHJvdG9GdW5jQmlnKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBzdHJpbmdQcm90b0Z1bmNTbWFsbChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQmxpbmsoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0JvbGQoRXhlY1N0YXRlKik7CitzdGF0
aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0ZpeGVkKEV4ZWNTdGF0ZSop
Oworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNJdGFsaWNzKEV4
ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNT
dHJpa2UoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1By
b3RvRnVuY1N1YihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
aW5nUHJvdG9GdW5jU3VwKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzdHJpbmdQcm90b0Z1bmNGb250Y29sb3IoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0ZvbnRzaXplKEV4ZWNTdGF0ZSopOworc3RhdGlj
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNBbmNob3IoRXhlY1N0YXRlKik7
CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0xpbmsoRXhlY1N0
YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RyaW0o
RXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVu
Y1RyaW1MZWZ0KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJp
bmdQcm90b0Z1bmNUcmltUmlnaHQoRXhlY1N0YXRlKik7CiAKIH0KIApAQCAtMjg4LDExICsyODYs
MTIgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc1NwbGljZVN1YgogICAgIHJldHVy
biBqc1N0cmluZyhleGVjLCBpbXBsKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvRnVuY1JlcGxhY2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhp
c1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvRnVuY1JlcGxhY2UoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIEpTU3RyaW5nKiBzb3VyY2VWYWwgPSB0
aGlzVmFsdWUudG9UaGlzSlNTdHJpbmcoZXhlYyk7Ci0gICAgSlNWYWx1ZSBwYXR0ZXJuID0gYXJn
cy5hdCgwKTsKLSAgICBKU1ZhbHVlIHJlcGxhY2VtZW50ID0gYXJncy5hdCgxKTsKKyAgICBKU1Zh
bHVlIHBhdHRlcm4gPSBleGVjLT5hcmd1bWVudCgwKTsKKyAgICBKU1ZhbHVlIHJlcGxhY2VtZW50
ID0gZXhlYy0+YXJndW1lbnQoMSk7CiAKICAgICBVU3RyaW5nIHJlcGxhY2VtZW50U3RyaW5nOwog
ICAgIENhbGxEYXRhIGNhbGxEYXRhOwpAQCAtNDQ5LDggKzQ0OCw5IEBAIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNSZXAKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgc291
cmNlLnN1YnN0cigwLCBtYXRjaFBvcyksIHN1YnN0aXR1dGVCYWNrcmVmZXJlbmNlcyhyZXBsYWNl
bWVudFN0cmluZywgc291cmNlLCBvdmVjdG9yLCAwKSwgc291cmNlLnN1YnN0cihtYXRjaEVuZCkp
OwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVG9TdHJpbmcoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0
JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3Rh
dGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVl
KCk7CiAgICAgLy8gQWxzbyB1c2VkIGZvciB2YWx1ZU9mLgogCiAgICAgaWYgKHRoaXNWYWx1ZS5p
c1N0cmluZygpKQpAQCAtNDYyLDExICs0NjIsMTIgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0
cmluZ1Byb3RvRnVuY1RvUwogICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7
CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNDaGFyQXQoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0NoYXJBdChFeGVjU3Rh
dGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVl
KCk7CiAgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvVGhpc1N0cmluZyhleGVjKTsKICAgICB1
bnNpZ25lZCBsZW4gPSBzLnNpemUoKTsKLSAgICBKU1ZhbHVlIGEwID0gYXJncy5hdCgwKTsKKyAg
ICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKGEwLmlzVUludDMyKCkp
IHsKICAgICAgICAgdWludDMyX3QgaSA9IGEwLmFzVUludDMyKCk7CiAgICAgICAgIGlmIChpIDwg
bGVuKQpAQCAtNDc5LDExICs0ODAsMTIgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1By
b3RvRnVuY0NoYQogICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKGV4ZWMpOwogfQogCi1KU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQ2hhckNvZGVBdChFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQ2hhckNvZGVBdChFeGVjU3RhdGUqIGV4
ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAg
ICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvVGhpc1N0cmluZyhleGVjKTsKICAgICB1bnNpZ25l
ZCBsZW4gPSBzLnNpemUoKTsKLSAgICBKU1ZhbHVlIGEwID0gYXJncy5hdCgwKTsKKyAgICBKU1Zh
bHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKGEwLmlzVUludDMyKCkpIHsKICAg
ICAgICAgdWludDMyX3QgaSA9IGEwLmFzVUludDMyKCk7CiAgICAgICAgIGlmIChpIDwgbGVuKQpA
QCAtNDk2LDI1ICs0OTgsMjcgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVu
Y0NoYQogICAgIHJldHVybiBqc05hTihleGVjKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHN0cmluZ1Byb3RvRnVuY0NvbmNhdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1
ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
c3RyaW5nUHJvdG9GdW5jQ29uY2F0KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBpZiAodGhpc1Zh
bHVlLmlzU3RyaW5nKCkgJiYgKGFyZ3Muc2l6ZSgpID09IDEpKSB7Ci0gICAgICAgIEpTVmFsdWUg
diA9IGFyZ3MuYXQoMCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1Zh
bHVlKCk7CisgICAgaWYgKHRoaXNWYWx1ZS5pc1N0cmluZygpICYmIChleGVjLT5hcmd1bWVudENv
dW50KCkgPT0gMSkpIHsKKyAgICAgICAgSlNWYWx1ZSB2ID0gZXhlYy0+YXJndW1lbnQoMCk7CiAg
ICAgICAgIHJldHVybiB2LmlzU3RyaW5nKCkKICAgICAgICAgICAgID8ganNTdHJpbmcoZXhlYywg
YXNTdHJpbmcodGhpc1ZhbHVlKSwgYXNTdHJpbmcodikpCiAgICAgICAgICAgICA6IGpzU3RyaW5n
KGV4ZWMsIGFzU3RyaW5nKHRoaXNWYWx1ZSksIHYudG9TdHJpbmcoZXhlYykpOwogICAgIH0KIAot
ICAgIHJldHVybiBqc1N0cmluZyhleGVjLCB0aGlzVmFsdWUsIGFyZ3MpOworICAgIHJldHVybiBq
c1N0cmluZyhleGVjLCB0aGlzVmFsdWUpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
aW5nUHJvdG9GdW5jSW5kZXhPZihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0
aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
aW5nUHJvdG9GdW5jSW5kZXhPZihFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVl
LnRvVGhpc1N0cmluZyhleGVjKTsKICAgICBpbnQgbGVuID0gcy5zaXplKCk7CiAKLSAgICBKU1Zh
bHVlIGEwID0gYXJncy5hdCgwKTsKLSAgICBKU1ZhbHVlIGExID0gYXJncy5hdCgxKTsKKyAgICBK
U1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7CisgICAgSlNWYWx1ZSBhMSA9IGV4ZWMtPmFy
Z3VtZW50KDEpOwogICAgIFVTdHJpbmcgdTIgPSBhMC50b1N0cmluZyhleGVjKTsKICAgICBpbnQg
cG9zOwogICAgIGlmIChhMS5pc1VuZGVmaW5lZCgpKQpAQCAtNTM2LDEzICs1NDAsMTQgQEAgSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0luZAogICAgIHJldHVybiBqc051bWJl
cihleGVjLCByZXN1bHQpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9G
dW5jTGFzdEluZGV4T2YoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1Zh
bHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1By
b3RvRnVuY0xhc3RJbmRleE9mKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNW
YWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUu
dG9UaGlzU3RyaW5nKGV4ZWMpOwogICAgIGludCBsZW4gPSBzLnNpemUoKTsKIAotICAgIEpTVmFs
dWUgYTAgPSBhcmdzLmF0KDApOwotICAgIEpTVmFsdWUgYTEgPSBhcmdzLmF0KDEpOworICAgIEpT
VmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKKyAgICBKU1ZhbHVlIGExID0gZXhlYy0+YXJn
dW1lbnQoMSk7CiAKICAgICBVU3RyaW5nIHUyID0gYTAudG9TdHJpbmcoZXhlYyk7CiAgICAgZG91
YmxlIGRwb3MgPSBhMS50b0ludGVnZXJQcmVzZXJ2ZU5hTihleGVjKTsKQEAgLTU2MiwxMSArNTY3
LDEyIEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNMYXMKICAgICByZXR1
cm4ganNOdW1iZXIoZXhlYywgcmVzdWx0KTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0
cmluZ1Byb3RvRnVuY01hdGNoKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRo
aXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJp
bmdQcm90b0Z1bmNNYXRjaChFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFs
dWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRv
VGhpc1N0cmluZyhleGVjKTsKIAotICAgIEpTVmFsdWUgYTAgPSBhcmdzLmF0KDApOworICAgIEpT
VmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKIAogICAgIFVTdHJpbmcgdSA9IHM7CiAgICAg
UmVmUHRyPFJlZ0V4cD4gcmVnOwpAQCAtNjEzLDExICs2MTksMTIgQEAgSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHN0cmluZ1Byb3RvRnVuY01hdAogICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShleGVj
LCBsaXN0KTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1NlYXJj
aChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU2VhcmNo
KEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RU
aGlzVmFsdWUoKTsKICAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9UaGlzU3RyaW5nKGV4ZWMp
OwogCi0gICAgSlNWYWx1ZSBhMCA9IGFyZ3MuYXQoMCk7CisgICAgSlNWYWx1ZSBhMCA9IGV4ZWMt
PmFyZ3VtZW50KDApOwogCiAgICAgVVN0cmluZyB1ID0gczsKICAgICBSZWZQdHI8UmVnRXhwPiBy
ZWc7CkBAIC02MzgsMTMgKzY0NSwxNCBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJv
dG9GdW5jU2VhCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHBvcyk7CiB9CiAKLUpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTbGljZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU2xpY2UoRXhlY1N0YXRlKiBleGVjKQogeworICAg
IEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIFVTdHJpbmcg
cyA9IHRoaXNWYWx1ZS50b1RoaXNTdHJpbmcoZXhlYyk7CiAgICAgaW50IGxlbiA9IHMuc2l6ZSgp
OwogCi0gICAgSlNWYWx1ZSBhMCA9IGFyZ3MuYXQoMCk7Ci0gICAgSlNWYWx1ZSBhMSA9IGFyZ3Mu
YXQoMSk7CisgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOworICAgIEpTVmFsdWUg
YTEgPSBleGVjLT5hcmd1bWVudCgxKTsKIAogICAgIC8vIFRoZSBhcmcgcHJvY2Vzc2luZyBpcyB2
ZXJ5IG11Y2ggbGlrZSBBcnJheVByb3RvRnVuYzo6U2xpY2UKICAgICBkb3VibGUgc3RhcnQgPSBh
MC50b0ludGVnZXIoZXhlYyk7CkBAIC02NjIsMTIgKzY3MCwxMyBAQCBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc3RyaW5nUHJvdG9GdW5jU2xpCiAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcoZXhlYyk7
CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTcGxpdChFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU3BsaXQoRXhlY1N0YXRl
KiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgp
OwogICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1RoaXNTdHJpbmcoZXhlYyk7CiAKLSAgICBK
U1ZhbHVlIGEwID0gYXJncy5hdCgwKTsKLSAgICBKU1ZhbHVlIGExID0gYXJncy5hdCgxKTsKKyAg
ICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7CisgICAgSlNWYWx1ZSBhMSA9IGV4ZWMt
PmFyZ3VtZW50KDEpOwogCiAgICAgSlNBcnJheSogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJh
eShleGVjKTsKICAgICB1bnNpZ25lZCBpID0gMDsKQEAgLTcyNSwxMyArNzM0LDE0IEBAIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTcGwKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU3Vic3RyKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJn
cykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTdWJzdHIoRXhlY1N0YXRl
KiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgp
OwogICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1RoaXNTdHJpbmcoZXhlYyk7CiAgICAgaW50
IGxlbiA9IHMuc2l6ZSgpOwogCi0gICAgSlNWYWx1ZSBhMCA9IGFyZ3MuYXQoMCk7Ci0gICAgSlNW
YWx1ZSBhMSA9IGFyZ3MuYXQoMSk7CisgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDAp
OworICAgIEpTVmFsdWUgYTEgPSBleGVjLT5hcmd1bWVudCgxKTsKIAogICAgIGRvdWJsZSBzdGFy
dCA9IGEwLnRvSW50ZWdlcihleGVjKTsKICAgICBkb3VibGUgbGVuZ3RoID0gYTEuaXNVbmRlZmlu
ZWQoKSA/IGxlbiA6IGExLnRvSW50ZWdlcihleGVjKTsKQEAgLTc0NywxMyArNzU3LDE0IEBAIEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTdWIKICAgICByZXR1cm4ganNTdWJz
dHJpbmcoZXhlYywgcywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXJ0KSwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGxlbmd0aCkpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJv
dG9GdW5jU3Vic3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQ
cm90b0Z1bmNTdWJzdHJpbmcoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50
b1RoaXNTdHJpbmcoZXhlYyk7CiAgICAgaW50IGxlbiA9IHMuc2l6ZSgpOwogCi0gICAgSlNWYWx1
ZSBhMCA9IGFyZ3MuYXQoMCk7Ci0gICAgSlNWYWx1ZSBhMSA9IGFyZ3MuYXQoMSk7CisgICAgSlNW
YWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOworICAgIEpTVmFsdWUgYTEgPSBleGVjLT5hcmd1
bWVudCgxKTsKIAogICAgIGRvdWJsZSBzdGFydCA9IGEwLnRvTnVtYmVyKGV4ZWMpOwogICAgIGRv
dWJsZSBlbmQ7CkBAIC03NzgsOCArNzg5LDkgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvRnVuY1N1YgogICAgIHJldHVybiBqc1N1YnN0cmluZyhleGVjLCBzLCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oc3RhcnQpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZW5kKSAtIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihzdGFydCkpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5n
UHJvdG9GdW5jVG9Mb3dlckNhc2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUg
dGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQ
cm90b0Z1bmNUb0xvd2VyQ2FzZShFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgSlNTdHJpbmcqIHNWYWwgPSB0aGlz
VmFsdWUudG9UaGlzSlNTdHJpbmcoZXhlYyk7CiAgICAgY29uc3QgVVN0cmluZyYgcyA9IHNWYWwt
PnZhbHVlKGV4ZWMpOwogCkBAIC04MTUsOCArODI3LDkgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHN0cmluZ1Byb3RvRnVuY1RvTAogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBVU3RyaW5nOjph
ZG9wdChidWZmZXIpKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVu
Y1RvVXBwZXJDYXNlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5j
VG9VcHBlckNhc2UoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0g
ZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIEpTU3RyaW5nKiBzVmFsID0gdGhpc1ZhbHVlLnRv
VGhpc0pTU3RyaW5nKGV4ZWMpOwogICAgIGNvbnN0IFVTdHJpbmcmIHMgPSBzVmFsLT52YWx1ZShl
eGVjKTsKIApAQCAtODUyLDgxICs4NjUsOTMgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvRnVuY1RvVQogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBVU3RyaW5nOjphZG9wdChi
dWZmZXIpKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0xvY2Fs
ZUNvbXBhcmUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVu
Y0xvY2FsZUNvbXBhcmUoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGlmIChhcmdzLnNpemUoKSA8
IDEpCisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CisgICAg
aWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICByZXR1cm4ganNOdW1iZXIoZXhl
YywgMCk7CiAKICAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9UaGlzU3RyaW5nKGV4ZWMpOwot
ICAgIEpTVmFsdWUgYTAgPSBhcmdzLmF0KDApOworICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1
bWVudCgwKTsKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgbG9jYWxlQ29tcGFyZShzLCBhMC50
b1N0cmluZyhleGVjKSkpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9G
dW5jQmlnKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQmlnKEV4
ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlz
VmFsdWUoKTsKICAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9UaGlzU3RyaW5nKGV4ZWMpOwog
ICAgIHJldHVybiBqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8YmlnPiIsIHMsICI8L2Jp
Zz4iKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1NtYWxsKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlz
dCYpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU21hbGwoRXhlY1N0YXRl
KiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgp
OwogICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1RoaXNTdHJpbmcoZXhlYyk7CiAgICAgcmV0
dXJuIGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxzbWFsbD4iLCBzLCAiPC9zbWFsbD4i
KTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0JsaW5rKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYp
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQmxpbmsoRXhlY1N0YXRlKiBl
eGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwog
ICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1RoaXNTdHJpbmcoZXhlYyk7CiAgICAgcmV0dXJu
IGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxibGluaz4iLCBzLCAiPC9ibGluaz4iKTsK
IH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0JvbGQoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNCb2xkKEV4ZWNTdGF0ZSogZXhlYykK
IHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBV
U3RyaW5nIHMgPSB0aGlzVmFsdWUudG9UaGlzU3RyaW5nKGV4ZWMpOwogICAgIHJldHVybiBqc01h
a2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8Yj4iLCBzLCAiPC9iPiIpOwogfQogCi1KU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jRml4ZWQoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNGaXhlZChFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNW
YWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgVVN0cmluZyBzID0g
dGhpc1ZhbHVlLnRvVGhpc1N0cmluZyhleGVjKTsKICAgICByZXR1cm4ganNNYWtlTm9udHJpdmlh
bFN0cmluZyhleGVjLCAiPHR0PiIsIHMsICI8L3R0PiIpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc3RyaW5nUHJvdG9GdW5jSXRhbGljcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
SlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHN0cmluZ1Byb3RvRnVuY0l0YWxpY3MoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUg
dGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIFVTdHJpbmcgcyA9IHRoaXNW
YWx1ZS50b1RoaXNTdHJpbmcoZXhlYyk7CiAgICAgcmV0dXJuIGpzTWFrZU5vbnRyaXZpYWxTdHJp
bmcoZXhlYywgIjxpPiIsIHMsICI8L2k+Iik7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJpbmdQcm90b0Z1bmNTdHJpa2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUg
dGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQ
cm90b0Z1bmNTdHJpa2UoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVl
ID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1Ro
aXNTdHJpbmcoZXhlYyk7CiAgICAgcmV0dXJuIGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywg
IjxzdHJpa2U+IiwgcywgIjwvc3RyaWtlPiIpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
c3RyaW5nUHJvdG9GdW5jU3ViKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRo
aXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJv
dG9GdW5jU3ViKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4
ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9UaGlzU3Ry
aW5nKGV4ZWMpOwogICAgIHJldHVybiBqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8c3Vi
PiIsIHMsICI8L3N1Yj4iKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3Rv
RnVuY1N1cChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1N1cChF
eGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhp
c1ZhbHVlKCk7CiAgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvVGhpc1N0cmluZyhleGVjKTsK
ICAgICByZXR1cm4ganNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPHN1cD4iLCBzLCAiPC9z
dXA+Iik7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNGb250Y29s
b3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0ZvbnRj
b2xvcihFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5o
b3N0VGhpc1ZhbHVlKCk7CiAgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvVGhpc1N0cmluZyhl
eGVjKTsKLSAgICBKU1ZhbHVlIGEwID0gYXJncy5hdCgwKTsKKyAgICBKU1ZhbHVlIGEwID0gZXhl
Yy0+YXJndW1lbnQoMCk7CiAgICAgcmV0dXJuIGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywg
Ijxmb250IGNvbG9yPVwiIiwgYTAudG9TdHJpbmcoZXhlYyksICJcIj4iLCBzLCAiPC9mb250PiIp
OwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jRm9udHNpemUoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0ZvbnRzaXplKEV4
ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlz
VmFsdWUoKTsKICAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9UaGlzU3RyaW5nKGV4ZWMpOwot
ICAgIEpTVmFsdWUgYTAgPSBhcmdzLmF0KDApOworICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1
bWVudCgwKTsKIAogICAgIHVpbnQzMl90IHNtYWxsSW50ZWdlcjsKICAgICBpZiAoYTAuZ2V0VUlu
dDMyKHNtYWxsSW50ZWdlcikgJiYgc21hbGxJbnRlZ2VyIDw9IDkpIHsKQEAgLTk2NSwxNyArOTkw
LDE5IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNGb24KICAgICByZXR1
cm4ganNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPGZvbnQgc2l6ZT1cIiIsIGEwLnRvU3Ry
aW5nKGV4ZWMpLCAiXCI+IiwgcywgIjwvZm9udD4iKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHN0cmluZ1Byb3RvRnVuY0FuY2hvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNW
YWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgc3RyaW5nUHJvdG9GdW5jQW5jaG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVl
IHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBVU3RyaW5nIHMgPSB0aGlz
VmFsdWUudG9UaGlzU3RyaW5nKGV4ZWMpOwotICAgIEpTVmFsdWUgYTAgPSBhcmdzLmF0KDApOwor
ICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICByZXR1cm4ganNNYWtlTm9u
dHJpdmlhbFN0cmluZyhleGVjLCAiPGEgbmFtZT1cIiIsIGEwLnRvU3RyaW5nKGV4ZWMpLCAiXCI+
IiwgcywgIjwvYT4iKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVu
Y0xpbmsoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0xp
bmsoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9z
dFRoaXNWYWx1ZSgpOwogICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1RoaXNTdHJpbmcoZXhl
Yyk7Ci0gICAgSlNWYWx1ZSBhMCA9IGFyZ3MuYXQoMCk7CisgICAgSlNWYWx1ZSBhMCA9IGV4ZWMt
PmFyZ3VtZW50KDApOwogICAgIFVTdHJpbmcgbGlua1RleHQgPSBhMC50b1N0cmluZyhleGVjKTsK
IAogICAgIHVuc2lnbmVkIGxpbmtUZXh0U2l6ZSA9IGxpbmtUZXh0LnNpemUoKTsKQEAgLTEwMzYs
MTggKzEwNjMsMjEgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIHRyaW1TdHJpbmcoRXhlY1N0YQog
ICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBzdHIuc3Vic3RyKGxlZnQsIHJpZ2h0IC0gbGVmdCkp
OwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVHJpbShFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RyaW0oRXhlY1N0YXRlKiBleGVj
KQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAg
IHJldHVybiB0cmltU3RyaW5nKGV4ZWMsIHRoaXNWYWx1ZSwgVHJpbUxlZnQgfCBUcmltUmlnaHQp
OwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVHJpbUxlZnQoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0
JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUcmltTGVmdChFeGVjU3Rh
dGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVl
KCk7CiAgICAgcmV0dXJuIHRyaW1TdHJpbmcoZXhlYywgdGhpc1ZhbHVlLCBUcmltTGVmdCk7CiB9
CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUcmltUmlnaHQoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUcmltUmlnaHQoRXhlY1N0YXRl
KiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgp
OwogICAgIHJldHVybiB0cmltU3RyaW5nKGV4ZWMsIHRoaXNWYWx1ZSwgVHJpbVJpZ2h0KTsKIH0K
ICAgICAKSW5kZXg6IEphdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0R2x1ZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDYwMzczKQorKysgSmF2YVNjcmlwdEdsdWUv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTAtMDUtMjggIEdl
b2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTaW1wbGlmaWVkIHRoZSBob3N0IGNhbGxpbmcgY29u
dmVudGlvbi4KKworICAgICAgICBQQVJUIE9ORTogRnVuY3Rpb25hbCBjb2RlIGNoYW5nZXMuCisg
ICAgICAgIAorICAgICAgICBbIE5vbmUgaW4gSmF2YVNjcmlwdEdsdWUgXQorICAgICAgICAKKyAg
ICAgICAgUEFSVCBUV086IEdsb2JhbCBzZWFyY2ggYW5kIHJlcGxhY2UuCisgICAgICAgIAorICAg
ICAgICBJbiB0aGUgYXJlYXMgYmVsb3csIEkgdXNlZCBnbG9iYWwgc2VhcmNoLWFuZC1yZXBsYWNl
IHRvIGNoYW5nZQorICAgICAgICAgICAgKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYpID0+IChFeGVjU3RhdGUqKQorICAgICAgICAgICAgYXJncy5zaXplKCkg
PT4gZXhlYy0+YXJndW1lbnRDb3VudCgpCisgICAgICAgICAgICBhcmdzLmF0KGkpID0+IGV4ZWMt
PmFyZ3VtZW50KGkpCisKKyAgICAgICAgKiBKU09iamVjdC5jcHA6CisgICAgICAgIChuYXRpdmVD
YWxsRnVuY3Rpb24pOgorICAgICAgICAqIFVzZXJPYmplY3RJbXAuY3BwOgorICAgICAgICAoVXNl
ck9iamVjdEltcDo6Y2FsbEFzRnVuY3Rpb24pOgorICAgICAgICAqIFVzZXJPYmplY3RJbXAuaDoK
KwpJbmRleDogSmF2YVNjcmlwdEdsdWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRHbHVlL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBKYXZhU2NyaXB0R2x1
ZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDEwICs3MywxMCBAQCB2b2lkIEpT
VXNlck9iamVjdDo6U2V0UHJvcGVydHkoQ0ZTdHJpbmdSCiAKIH0KIAotc3RhdGljIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBuYXRpdmVDYWxsRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogZnVuY3Rpb25PYmplY3QsIEpTVmFsdWUgIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJn
cyk7Ci1zdGF0aWMgSlNWYWx1ZSAgbmF0aXZlQ2FsbEZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIGZ1bmN0aW9uT2JqZWN0LCBKU1ZhbHVlICB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG5hdGl2ZUNhbGxGdW5jdGlv
bihFeGVjU3RhdGUqIGV4ZWMpOworc3RhdGljIEpTVmFsdWUgIG5hdGl2ZUNhbGxGdW5jdGlvbihF
eGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFVzZXJPYmplY3RJbXAq
PihmdW5jdGlvbk9iamVjdCktPmNhbGxBc0Z1bmN0aW9uKGV4ZWMsIGFzT2JqZWN0KHRoaXNWYWx1
ZSksIGFyZ3MpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxVc2VyT2JqZWN0SW1wKj4oZXhlYy0+
Y2FsbGVlKCkpLT5jYWxsQXNGdW5jdGlvbihleGVjKTsKIH0KIAogQ2FsbFR5cGUgSlNVc2VyT2Jq
ZWN0OjpnZXRDYWxsRGF0YShDYWxsRGF0YSYgY2FsbERhdGEpCkluZGV4OiBKYXZhU2NyaXB0R2x1
ZS9Vc2VyT2JqZWN0SW1wLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0R2x1ZS9Vc2VyT2Jq
ZWN0SW1wLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBKYXZhU2NyaXB0R2x1ZS9Vc2VyT2JqZWN0
SW1wLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsMTggKzU2LDE4IEBAIENhbGxUeXBlIFVzZXJP
YmplY3RJbXA6OmdldENhbGxEYXRhKENhbGwKICAgICByZXR1cm4gZkpTVXNlck9iamVjdCA/IGZK
U1VzZXJPYmplY3QtPmdldENhbGxEYXRhKGNhbGxEYXRhKSA6IENhbGxUeXBlTm9uZTsKIH0KIAot
SlNWYWx1ZSBVc2VyT2JqZWN0SW1wOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIEpT
T2JqZWN0ICp0aGlzT2JqLCBjb25zdCBBcmdMaXN0ICZhcmdzKQorSlNWYWx1ZSBVc2VyT2JqZWN0
SW1wOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMpCiB7CiAgICAgSlNWYWx1ZSByZXN1
bHQgPSBqc1VuZGVmaW5lZCgpOwotICAgIEpTVXNlck9iamVjdCoganNUaGlzT2JqID0gS0pTVmFs
dWVUb0pTT2JqZWN0KHRoaXNPYmosIGV4ZWMpOworICAgIEpTVXNlck9iamVjdCoganNUaGlzT2Jq
ID0gS0pTVmFsdWVUb0pTT2JqZWN0KGV4ZWMtPmhvc3RUaGlzVmFsdWUoKS50b1RoaXNPYmplY3Qo
ZXhlYyksIGV4ZWMpOwogICAgIGlmIChqc1RoaXNPYmopIHsKLSAgICAgICAgQ0ZJbmRleCBhcmdD
b3VudCA9IGFyZ3Muc2l6ZSgpOworICAgICAgICBDRkluZGV4IGFyZ0NvdW50ID0gZXhlYy0+YXJn
dW1lbnRDb3VudCgpOwogICAgICAgICBDRkFycmF5Q2FsbEJhY2tzIGFycmF5Q2FsbEJhY2tzOwog
ICAgICAgICBKU1R5cGVHZXRDRkFycmF5Q2FsbEJhY2tzKCZhcnJheUNhbGxCYWNrcyk7CiAgICAg
ICAgIENGTXV0YWJsZUFycmF5UmVmIGpzQXJncyA9IENGQXJyYXlDcmVhdGVNdXRhYmxlKDAsIDAs
ICZhcnJheUNhbGxCYWNrcyk7CiAgICAgICAgIGlmIChqc0FyZ3MpIHsKICAgICAgICAgICAgIGZv
ciAoQ0ZJbmRleCBpID0gMDsgaSA8IGFyZ0NvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICBK
U1VzZXJPYmplY3QqIGpzQXJnID0gS0pTVmFsdWVUb0pTT2JqZWN0KGFyZ3MuYXQoaSksIGV4ZWMp
OworICAgICAgICAgICAgICAgIEpTVXNlck9iamVjdCoganNBcmcgPSBLSlNWYWx1ZVRvSlNPYmpl
Y3QoZXhlYy0+YXJndW1lbnQoaSksIGV4ZWMpOwogICAgICAgICAgICAgICAgIENGQXJyYXlBcHBl
bmRWYWx1ZShqc0FyZ3MsICh2b2lkKilqc0FyZyk7CiAgICAgICAgICAgICAgICAganNBcmctPlJl
bGVhc2UoKTsKICAgICAgICAgICAgIH0KSW5kZXg6IEphdmFTY3JpcHRHbHVlL1VzZXJPYmplY3RJ
bXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0R2x1ZS9Vc2VyT2JqZWN0SW1wLmgJKHJldmlz
aW9uIDYwMzQxKQorKysgSmF2YVNjcmlwdEdsdWUvVXNlck9iamVjdEltcC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBnZXRPd25Q
cm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25N
b2RlIG1vZGUgPSBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKIAotICAgIHZpcnR1YWwgSlNW
YWx1ZSBjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICp0aGlzT2JqLCBj
b25zdCBBcmdMaXN0ICZhcmdzKTsKKyAgICB2aXJ0dWFsIEpTVmFsdWUgY2FsbEFzRnVuY3Rpb24o
RXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4
ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7CiAgICAgdmlydHVh
bCB2b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAKSW5kZXg6IFdlYkNvcmUvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA2MDM3MykK
KysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYwIEBACisy
MDEwLTA1LTI4ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2ltcGxpZmllZCB0aGUgaG9z
dCBjYWxsaW5nIGNvbnZlbnRpb24uCisKKyAgICAgICAgUEFSVCBPTkU6IEZ1bmN0aW9uYWwgY29k
ZSBjaGFuZ2VzLgorICAgICAgICAKKyAgICAgICAgWyBOb25lIGluIFdlYkNvcmUgXQorICAgICAg
ICAKKyAgICAgICAgUEFSVCBUV086IEdsb2JhbCBzZWFyY2ggYW5kIHJlcGxhY2UuCisgICAgICAg
IAorICAgICAgICBJbiB0aGUgYXJlYXMgYmVsb3csIEkgdXNlZCBnbG9iYWwgc2VhcmNoLWFuZC1y
ZXBsYWNlIHRvIGNoYW5nZQorICAgICAgICAgICAgKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYpID0+IChFeGVjU3RhdGUqKQorICAgICAgICAgICAgYXJncy5z
aXplKCkgPT4gZXhlYy0+YXJndW1lbnRDb3VudCgpCisgICAgICAgICAgICBhcmdzLmF0KGkpID0+
IGV4ZWMtPmFyZ3VtZW50KGkpCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVy
Vmlld0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0FycmF5QnVmZmVyVmlldzo6c2xp
Y2UpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQXJyYXlCdWZmZXJWaWV3SGVscGVyLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRXZWJHTEFycmF5SGVscGVyKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0RmlsbENvbG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTdHJva2VDb2xvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c3Ryb2tlUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1h
Z2VGcm9tUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6c2V0U2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpjcmVhdGVQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpjcmVhdGVJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpKU0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZmlsbFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SlND
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnN0cm9rZVRleHQpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTQ2xpcGJvYXJkQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2xpcGJvYXJk
OjpjbGVhckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SlNDbGlwYm9hcmQ6OmdldERhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNDbGlwYm9hcmQ6OnNldERyYWdJbWFnZSk6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNET01BcHBsaWNhdGlvbkNhY2hlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTRE9NQXBwbGljYXRpb25DYWNoZTo6aGFzSXRlbSk6CisgICAgICAgIChXZWJDb3Jl
OjpKU0RPTUFwcGxpY2F0aW9uQ2FjaGU6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUFw
cGxpY2F0aW9uQ2FjaGU6OnJlbW92ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01Gb3Jt
RGF0YUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUZvcm1EYXRhOjphcHBlbmQp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTRE9NV2luZG93OjpvcGVuKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2lu
ZG93OjpzaG93TW9kYWxEaWFsb2cpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OnBv
c3RNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpzZXRUaW1lb3V0KToK
KyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpzZXRJbnRlcnZhbCk6CisgICAgICAgIChX
ZWJDb3JlOjpKU0RPTVdpbmRvdzo6YWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3Jl
OjpKU0RPTVdpbmRvdzo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpK
U0RPTVdpbmRvdzo6b3BlbkRhdGFiYXNlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RhdGFi
YXNlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRGF0YWJhc2U6OmNoYW5nZVZlcnNp
b24pOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6SlNEYXRhYmFzZTo6dHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNEYXRh
YmFzZTo6cmVhZFRyYW5zYWN0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RhdGFiYXNl
U3luY0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RhdGFiYXNlU3luYzo6Y2hhbmdl
VmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVUcmFuc2FjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpKU0RhdGFiYXNlU3luYzo6dHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6SlNEYXRhYmFzZVN5bmM6OnJlYWRUcmFuc2FjdGlvbik6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNEZWRpY2F0ZWRXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTRGVkaWNhdGVkV29ya2VyQ29udGV4dDo6cG9zdE1lc3NhZ2UpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTRGVza3RvcE5vdGlmaWNhdGlvbnNDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNOb3RpZmljYXRpb25DZW50ZXI6OnJlcXVlc3RQZXJtaXNzaW9uKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0Zsb2F0QXJyYXlDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNG
bG9hdEFycmF5OjpzZXQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTR2VvbG9jYXRpb25DdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNHZW9sb2NhdGlvbjo6Z2V0Q3VycmVudFBvc2l0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTR2VvbG9jYXRpb246OndhdGNoUG9zaXRpb24pOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y2FsbEhUTUxBbGxDb2xsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTSFRNTEFsbENvbGxlY3Rpb246Oml0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MQWxs
Q29sbGVjdGlvbjo6bmFtZWRJdGVtKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxDYW52
YXNFbGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTENhbnZhc0VsZW1l
bnQ6OmdldENvbnRleHQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTENvbGxlY3Rpb25D
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FsbEhUTUxDb2xsZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTSFRNTENvbGxlY3Rpb246Oml0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6
SlNIVE1MQ29sbGVjdGlvbjo6bmFtZWRJdGVtKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hU
TUxEb2N1bWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxEb2N1bWVudDo6
b3Blbik6CisgICAgICAgIChXZWJDb3JlOjpkb2N1bWVudFdyaXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTSFRNTERvY3VtZW50Ojp3cml0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxEb2N1
bWVudDo6d3JpdGVsbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MSW5wdXRFbGVtZW50
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTElucHV0RWxlbWVudDo6c2V0U2Vs
ZWN0aW9uUmFuZ2UpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTE9wdGlvbnNDb2xsZWN0
aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTE9wdGlvbnNDb2xsZWN0aW9u
OjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MT3B0aW9uc0NvbGxlY3Rpb246OnJlbW92
ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxTZWxlY3RFbGVtZW50OjpyZW1vdmUpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpK
U0hpc3Rvcnk6OnB1c2hTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0hpc3Rvcnk6OnJlcGxh
Y2VTdGF0ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6OmRhdGFiYXNl
Rm9ySWQpOgorICAgICAgICAoV2ViQ29yZTo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6OmN1cnJlbnRD
YWxsRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6Om5vZGVG
b3JJZCk6CisgICAgICAgIChXZWJDb3JlOjpKU0luamVjdGVkU2NyaXB0SG9zdDo6cHVzaE5vZGVQ
YXRoVG9Gcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpKU0luamVjdGVkU2NyaXB0SG9zdDo6
c2VsZWN0RGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6
OnNlbGVjdERPTVN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SlNJbmplY3RlZFNjcmlwdEhv
c3Q6OnJlcG9ydERpZERpc3BhdGNoT25JbmplY3RlZFNjcmlwdCk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnBsYXRmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTSW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojpwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTSW5z
cGVjdG9yRnJvbnRlbmRIb3N0OjpzaG93Q29udGV4dE1lbnUpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTSW50MTZBcnJheUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0ludDE2QXJy
YXk6OnNldCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJbnQzMkFycmF5Q3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTSW50MzJBcnJheTo6c2V0KToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0ludDhBcnJheUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0ludDhBcnJh
eTo6c2V0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0phdmFTY3JpcHRDYWxsRnJhbWVDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpldmFsdWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0phdmFTY3JpcHRDYWxsRnJhbWU6OnNjb3BlVHlwZSk6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU0xvY2F0aW9uOjpyZXBsYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRp
b246OnJlbG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uOjphc3NpZ24pOgorICAg
ICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6dG9TdHJpbmcpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTWVzc2Fn
ZUV2ZW50Ojppbml0TWVzc2FnZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01lc3Nh
Z2VQb3J0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTWVzc2FnZVBvcnQ6OnBvc3RN
ZXNzYWdlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpoYW5kbGVQb3N0TWVzc2FnZSk6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNOb2RlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTm9kZTo6aW5zZXJ0QmVm
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTm9kZTo6cmVwbGFjZUNoaWxkKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTTm9kZTo6cmVtb3ZlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2Rl
OjphcHBlbmRDaGlsZCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNOb2RlTGlzdEN1c3RvbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpjYWxsTm9kZUxpc3QpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTUGx1Z2luRWxlbWVudEZ1bmN0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYWxs
UGx1Z2luKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NRTFJlc3VsdFNldFJvd0xpc3RDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNTUUxSZXN1bHRTZXRSb3dMaXN0OjppdGVtKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTU1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTcWwpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTU1FMVHJhbnNhY3Rpb25TeW5jQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTU1FMVHJhbnNhY3Rpb25TeW5jOjpleGVjdXRlU3FsKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU1NWR0xlbmd0aEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR0xlbmd0
aDo6Y29udmVydFRvU3BlY2lmaWVkVW5pdHMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1ZH
TWF0cml4Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHTWF0cml4OjptdWx0aXBs
eSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR01hdHJpeDo6aW52ZXJzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpKU1NWR01hdHJpeDo6cm90YXRlRnJvbVZlY3Rvcik6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNTVkdQT0RMaXN0Q3VzdG9tLmg6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1BPRExp
c3RDdXN0b206OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHUE9ETGlzdEN1c3RvbTo6
aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1BPRExpc3RDdXN0b206OmdldEl0
ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdQT0RMaXN0Q3VzdG9tOjppbnNlcnRJdGVtQmVm
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHUE9ETGlzdEN1c3RvbTo6cmVwbGFjZUl0ZW0p
OgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdQT0RMaXN0Q3VzdG9tOjpyZW1vdmVJdGVtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTU1ZHUE9ETGlzdEN1c3RvbTo6YXBwZW5kSXRlbSk6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNTVkdQYXRoU2VnTGlzdEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU1NWR1BhdGhTZWdMaXN0OjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1Bh
dGhTZWdMaXN0Ojppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHUGF0aFNlZ0xp
c3Q6OmdldEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdQYXRoU2VnTGlzdDo6aW5zZXJ0
SXRlbUJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1BhdGhTZWdMaXN0OjpyZXBsYWNl
SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1BhdGhTZWdMaXN0OjpyZW1vdmVJdGVtKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHUGF0aFNlZ0xpc3Q6OmFwcGVuZEl0ZW0pOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTVWludDE2QXJyYXlDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNVaW50MTZBcnJheTo6c2V0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1VpbnQzMkFy
cmF5Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVWludDMyQXJyYXk6OnNldCk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNVaW50OEFycmF5Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTVWludDhBcnJheTo6c2V0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dlYkdM
UmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6YnVmZmVyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6YnVmZmVyU3ViRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRPYmpl
Y3RQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldEJ1ZmZlclBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQYXJhbWV0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFByb2dyYW1QYXJhbWV0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFJlbmRlcmJ1ZmZl
clBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Z2V0U2hhZGVyUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRUZXhQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmdldFVuaWZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmdldFZlcnRleEF0dHJpYik6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpkYXRh
RnVuY3Rpb25mKToKKyAgICAgICAgKFdlYkNvcmU6OmRhdGFGdW5jdGlvbmkpOgorICAgICAgICAo
V2ViQ29yZTo6ZGF0YUZ1bmN0aW9uTWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMml2KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2l2KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGl2KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkpT
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4M2Z2KToKKyAgICAgICAgKFdlYkNv
cmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4NGZ2KToKKyAgICAgICAg
KFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjJmdik6
CisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmli
M2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhB
dHRyaWI0ZnYpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTV2ViU29ja2V0OjpzZW5kKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU1dvcmtlckNvbnRleHRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNXb3Jr
ZXJDb250ZXh0OjppbXBvcnRTY3JpcHRzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2VyQ29u
dGV4dDo6c2V0VGltZW91dCk6CisgICAgICAgIChXZWJDb3JlOjpKU1dvcmtlckNvbnRleHQ6OnNl
dEludGVydmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2VyQ29udGV4dDo6b3BlbkRhdGFi
YXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2VyQ29udGV4dDo6b3BlbkRhdGFiYXNlU3lu
Yyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0b20uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNXb3JrZXI6OnBvc3RNZXNzYWdlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTWE1MSHR0cFJl
cXVlc3Q6Om9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6SlNYTUxIdHRwUmVxdWVzdDo6c2VuZCk6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTWFNMVFByb2Nlc3Nvcjo6aW1wb3J0U3R5bGVzaGVldCk6CisgICAgICAg
IChXZWJDb3JlOjpKU1hTTFRQcm9jZXNzb3I6OnRyYW5zZm9ybVRvRnJhZ21lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNYU0xUUHJvY2Vzc29yOjp0cmFuc2Zvcm1Ub0RvY3VtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTWFNMVFByb2Nlc3Nvcjo6c2V0UGFyYW1ldGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTWFNMVFByb2Nlc3Nvcjo6Z2V0UGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTWFNMVFByb2Nlc3Nvcjo6cmVtb3ZlUGFyYW1ldGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9TY2hlZHVsZWRBY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NoZWR1bGVkQWN0aW9u
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2NoZWR1bGVkQWN0aW9uOjpTY2hlZHVsZWRB
Y3Rpb24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5oOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL1NjcmlwdENhbGxGcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHRDYWxsRnJhbWU6OlNjcmlwdENhbGxGcmFtZSk6CisgICAgICAgICogYmluZGluZ3MvanMv
U2NyaXB0Q2FsbEZyYW1lLmg6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q2FsbFN0YWNr
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhbGxTdGFjazo6U2NyaXB0Q2FsbFN0YWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhbGxTdGFjazo6aW5pdGlhbGl6ZSk6CisgICAg
ICAgICogYmluZGluZ3MvanMvU2NyaXB0Q2FsbFN0YWNrLmg6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgICogYnJpZGdlL2MvY19pbnN0YW5j
ZS5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDSW5zdGFuY2U6Omludm9rZU1ldGhvZCk6
CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDSW5zdGFuY2U6Omludm9rZURlZmF1bHRNZXRob2Qp
OgorICAgICAgICAqIGJyaWRnZS9jL2NfaW5zdGFuY2UuaDoKKyAgICAgICAgKiBicmlkZ2Uvam5p
L2pzYy9KYXZhSW5zdGFuY2VKU0MuY3BwOgorICAgICAgICAoSmF2YUluc3RhbmNlOjppbnZva2VN
ZXRob2QpOgorICAgICAgICAqIGJyaWRnZS9qbmkvanNjL0phdmFJbnN0YW5jZUpTQy5oOgorICAg
ICAgICAqIGJyaWRnZS9qc2MvQnJpZGdlSlNDLmg6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpJ
bnN0YW5jZTo6aW52b2tlRGVmYXVsdE1ldGhvZCk6CisgICAgICAgICogYnJpZGdlL29iamMvb2Jq
Y19pbnN0YW5jZS5oOgorICAgICAgICAqIGJyaWRnZS9vYmpjL29iamNfaW5zdGFuY2UubW06Cisg
ICAgICAgIChPYmpjSW5zdGFuY2U6Omludm9rZU1ldGhvZCk6CisgICAgICAgIChPYmpjSW5zdGFu
Y2U6Omludm9rZU9iamNNZXRob2QpOgorICAgICAgICAoT2JqY0luc3RhbmNlOjppbnZva2VEZWZh
dWx0TWV0aG9kKToKKyAgICAgICAgKiBicmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW06CisgICAg
ICAgIChKU0M6OkJpbmRpbmdzOjpjYWxsT2JqQ0ZhbGxiYWNrT2JqZWN0KToKKyAgICAgICAgKiBi
cmlkZ2UvcnVudGltZV9tZXRob2QuY3BwOgorICAgICAgICAoSlNDOjpjYWxsUnVudGltZU1ldGhv
ZCk6CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6
QmluZGluZ3M6OmNhbGxSdW50aW1lT2JqZWN0KToKKwogMjAxMC0wNS0yOCAgQWRhbSBCYXJ0aCAg
PGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyVmlld0N1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyVmlld0N1c3RvbS5j
cHAJKHJldmlzaW9uIDYwMzQxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVy
Vmlld0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDIzICs2NywyMyBAQCBKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiB9CiAKLUpTVmFsdWUgSlNBcnJheUJ1ZmZlclZpZXc6OnNsaWNlKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNBcnJheUJ1ZmZlclZpZXc6OnNsaWNl
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBBcnJheUJ1ZmZlclZpZXcqIGFycmF5ID0gcmVpbnRl
cnByZXRfY2FzdDxBcnJheUJ1ZmZlclZpZXcqPihpbXBsKCkpOwogCiAgICAgaW50IHN0YXJ0LCBl
bmQ7Ci0gICAgc3dpdGNoIChhcmdzLnNpemUoKSkgeworICAgIHN3aXRjaCAoZXhlYy0+YXJndW1l
bnRDb3VudCgpKSB7CiAgICAgY2FzZSAwOgogICAgICAgICBzdGFydCA9IDA7CiAgICAgICAgIGVu
ZCA9IGFycmF5LT5sZW5ndGgoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAxOgotICAgICAg
ICBzdGFydCA9IGFyZ3MuYXQoMCkudG9JbnQzMihleGVjKTsKKyAgICAgICAgc3RhcnQgPSBleGVj
LT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOwogICAgICAgICBlbmQgPSBhcnJheS0+bGVuZ3Ro
KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN0YXJ0ID0gYXJncy5h
dCgwKS50b0ludDMyKGV4ZWMpOwotICAgICAgICBlbmQgPSBhcmdzLmF0KDEpLnRvSW50MzIoZXhl
Yyk7CisgICAgICAgIHN0YXJ0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKKyAg
ICAgICAgZW5kID0gZXhlYy0+YXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKICAgICB9CiAgICAg
cmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGFycmF5LT5zbGljZShzdGFydCwgZW5k
KSk7CiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXJyYXlCdWZmZXJWaWV3SGVscGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyVmlld0hl
bHBlci5oCShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNBcnJheUJ1
ZmZlclZpZXdIZWxwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsMjkgKzM4LDI5IEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIHRlbXBsYXRlIDxjbGFzcyBUPgotSlNDOjpKU1ZhbHVlIHNldFdl
YkdMQXJyYXlIZWxwZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFQqIGltcGwsIEpTQzo6QXJnTGlz
dCBjb25zdCYgYXJncywgVCogKCpjb252ZXJzaW9uRnVuYykoSlNDOjpKU1ZhbHVlKSkKK0pTQzo6
SlNWYWx1ZSBzZXRXZWJHTEFycmF5SGVscGVyKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBUKiBpbXBs
LCBUKiAoKmNvbnZlcnNpb25GdW5jKShKU0M6OkpTVmFsdWUpKQogewotICAgIGlmIChhcmdzLnNp
emUoKSA8IDEpCisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKGV4ZWMsIEpTQzo6U3ludGF4RXJyb3IpOwogCi0gICAgVCogYXJyYXkg
PSAoKmNvbnZlcnNpb25GdW5jKShhcmdzLmF0KDApKTsKKyAgICBUKiBhcnJheSA9ICgqY29udmVy
c2lvbkZ1bmMpKGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICBpZiAoYXJyYXkpIHsKICAgICAgICAg
Ly8gdm9pZCBzZXQoaW4gV2ViR0w8VD5BcnJheSBhcnJheSwgW09wdGlvbmFsXSBpbiB1bnNpZ25l
ZCBsb25nIG9mZnNldCk7CiAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IDA7Ci0gICAgICAgIGlm
IChhcmdzLnNpemUoKSA9PSAyKQotICAgICAgICAgICAgb2Zmc2V0ID0gYXJncy5hdCgxKS50b0lu
dDMyKGV4ZWMpOworICAgICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID09IDIpCisgICAg
ICAgICAgICBvZmZzZXQgPSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwogICAgICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICAgICAgaW1wbC0+c2V0KGFycmF5LCBvZmZzZXQs
IGVjKTsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICAgICAgcmV0dXJu
IEpTQzo6anNVbmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBpZiAoYXJncy5hdCgwKS5pc09iamVj
dCgpKSB7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkpIHsKICAgICAgICAg
Ly8gdm9pZCBzZXQoaW4gc2VxdWVuY2U8bG9uZz4gYXJyYXksIFtPcHRpb25hbF0gaW4gdW5zaWdu
ZWQgbG9uZyBvZmZzZXQpOwotICAgICAgICBKU0M6OkpTT2JqZWN0KiBhcnJheSA9IEpTQzo6YXNP
YmplY3QoYXJncy5hdCgwKSk7CisgICAgICAgIEpTQzo6SlNPYmplY3QqIGFycmF5ID0gSlNDOjph
c09iamVjdChleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgICAgIHVpbnQzMl90IG9mZnNldCA9IDA7
Ci0gICAgICAgIGlmIChhcmdzLnNpemUoKSA9PSAyKQotICAgICAgICAgICAgb2Zmc2V0ID0gYXJn
cy5hdCgxKS50b0ludDMyKGV4ZWMpOworICAgICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgp
ID09IDIpCisgICAgICAgICAgICBvZmZzZXQgPSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4
ZWMpOwogICAgICAgICB1aW50MzJfdCBsZW5ndGggPSBhcnJheS0+Z2V0KGV4ZWMsIEpTQzo6SWRl
bnRpZmllcihleGVjLCAibGVuZ3RoIikpLnRvSW50MzIoZXhlYyk7CiAgICAgICAgIGlmIChvZmZz
ZXQgPiBpbXBsLT5sZW5ndGgoKQogICAgICAgICAgICAgfHwgb2Zmc2V0ICsgbGVuZ3RoID4gaW1w
bC0+bGVuZ3RoKCkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlND
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4OSw3IEBAIHZvaWQgSlNDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OnNldEZpbGwKICAgICBjb250ZXh0LT5zZXRGaWxsU3R5bGUodG9IVE1MQ2FudmFzU3R5
bGUoZXhlYywgdmFsdWUpKTsKIH0KIAotSlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6c2V0RmlsbENvbG9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pT
VmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZpbGxDb2xvcihFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0gc3RhdGlj
X2Nhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKj4oaW1wbCgpKTsKIApAQCAtOTksMjYgKzk5
LDI2IEBAIEpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEYKICAgICAvLyBu
dW1iZXIgYXJnLCBudW1iZXIgYXJnID0gZ3JheSBjb2xvciwgYWxwaGEKICAgICAvLyA0IGFyZ3Mg
PSByLCBnLCBiLCBhCiAgICAgLy8gNSBhcmdzID0gYywgbSwgeSwgaywgYQotICAgIHN3aXRjaCAo
YXJncy5zaXplKCkpIHsKKyAgICBzd2l0Y2ggKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSkgewogICAg
ICAgICBjYXNlIDE6Ci0gICAgICAgICAgICBpZiAoYXJncy5hdCgwKS5pc1N0cmluZygpKQotICAg
ICAgICAgICAgICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcih1c3RyaW5nVG9TdHJpbmcoYXNTdHJp
bmcoYXJncy5hdCgwKSktPnZhbHVlKGV4ZWMpKSk7CisgICAgICAgICAgICBpZiAoZXhlYy0+YXJn
dW1lbnQoMCkuaXNTdHJpbmcoKSkKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29s
b3IodXN0cmluZ1RvU3RyaW5nKGFzU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApKS0+dmFsdWUoZXhl
YykpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxs
Q29sb3IoYXJncy5hdCgwKS50b0Zsb2F0KGV4ZWMpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0
LT5zZXRGaWxsQ29sb3IoZXhlYy0+YXJndW1lbnQoMCkudG9GbG9hdChleGVjKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgaWYgKGFyZ3MuYXQoMCku
aXNTdHJpbmcoKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IodXN0cmlu
Z1RvU3RyaW5nKGFzU3RyaW5nKGFyZ3MuYXQoMCkpLT52YWx1ZShleGVjKSksIGFyZ3MuYXQoMSku
dG9GbG9hdChleGVjKSk7CisgICAgICAgICAgICBpZiAoZXhlYy0+YXJndW1lbnQoMCkuaXNTdHJp
bmcoKSkKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IodXN0cmluZ1RvU3Ry
aW5nKGFzU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApKS0+dmFsdWUoZXhlYykpLCBleGVjLT5hcmd1
bWVudCgxKS50b0Zsb2F0KGV4ZWMpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoYXJncy5hdCgwKS50b0Zsb2F0KGV4ZWMpLCBhcmdzLmF0
KDEpLnRvRmxvYXQoZXhlYykpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldEZpbGxDb2xv
cihleGVjLT5hcmd1bWVudCgwKS50b0Zsb2F0KGV4ZWMpLCBleGVjLT5hcmd1bWVudCgxKS50b0Zs
b2F0KGV4ZWMpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIDQ6Ci0gICAgICAg
ICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoYXJncy5hdCgwKS50b0Zsb2F0KGV4ZWMpLCBhcmdz
LmF0KDEpLnRvRmxvYXQoZXhlYyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXJncy5hdCgyKS50b0Zsb2F0KGV4ZWMpLCBhcmdzLmF0KDMpLnRvRmxvYXQoZXhlYykpOworICAg
ICAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKGV4ZWMtPmFyZ3VtZW50KDApLnRvRmxvYXQo
ZXhlYyksIGV4ZWMtPmFyZ3VtZW50KDEpLnRvRmxvYXQoZXhlYyksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXhlYy0+YXJndW1lbnQoMikudG9GbG9hdChleGVjKSwgZXhlYy0+
YXJndW1lbnQoMykudG9GbG9hdChleGVjKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSA1OgotICAgICAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKGFyZ3MuYXQoMCkudG9G
bG9hdChleGVjKSwgYXJncy5hdCgxKS50b0Zsb2F0KGV4ZWMpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFyZ3MuYXQoMikudG9GbG9hdChleGVjKSwgYXJncy5hdCgzKS50b0Zs
b2F0KGV4ZWMpLCBhcmdzLmF0KDQpLnRvRmxvYXQoZXhlYykpOworICAgICAgICAgICAgY29udGV4
dC0+c2V0RmlsbENvbG9yKGV4ZWMtPmFyZ3VtZW50KDApLnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFy
Z3VtZW50KDEpLnRvRmxvYXQoZXhlYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXhlYy0+YXJndW1lbnQoMikudG9GbG9hdChleGVjKSwgZXhlYy0+YXJndW1lbnQoMykudG9G
bG9hdChleGVjKSwgZXhlYy0+YXJndW1lbnQoNCkudG9GbG9hdChleGVjKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KGV4ZWMsIFN5bnRheEVycm9yKTsKQEAgLTEyNiw3ICsxMjYsNyBAQCBKU1ZhbHVlIEpTQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9ICAg
IAogCi1KU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTdHJva2VDb2xvcihF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpzZXRTdHJva2VDb2xvcihFeGVjU3RhdGUqIGV4ZWMpCiB7IAogICAg
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogY29udGV4dCA9IHN0YXRpY19jYXN0PENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRCo+KGltcGwoKSk7CiAKQEAgLTEzNiwyNiArMTM2LDI2IEBAIEpTVmFs
dWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFMKICAgICAvLyBudW1iZXIgYXJnLCBu
dW1iZXIgYXJnID0gZ3JheSBjb2xvciwgYWxwaGEKICAgICAvLyA0IGFyZ3MgPSByLCBnLCBiLCBh
CiAgICAgLy8gNSBhcmdzID0gYywgbSwgeSwgaywgYQotICAgIHN3aXRjaCAoYXJncy5zaXplKCkp
IHsKKyAgICBzd2l0Y2ggKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSkgewogICAgICAgICBjYXNlIDE6
Ci0gICAgICAgICAgICBpZiAoYXJncy5hdCgwKS5pc1N0cmluZygpKQotICAgICAgICAgICAgICAg
IGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKHVzdHJpbmdUb1N0cmluZyhhc1N0cmluZyhhcmdzLmF0
KDApKS0+dmFsdWUoZXhlYykpKTsKKyAgICAgICAgICAgIGlmIChleGVjLT5hcmd1bWVudCgwKS5p
c1N0cmluZygpKQorICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKHVzdHJp
bmdUb1N0cmluZyhhc1N0cmluZyhleGVjLT5hcmd1bWVudCgwKSktPnZhbHVlKGV4ZWMpKSk7CiAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3Io
YXJncy5hdCgwKS50b0Zsb2F0KGV4ZWMpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRT
dHJva2VDb2xvcihleGVjLT5hcmd1bWVudCgwKS50b0Zsb2F0KGV4ZWMpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICBpZiAoYXJncy5hdCgwKS5pc1N0
cmluZygpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKHVzdHJpbmdU
b1N0cmluZyhhc1N0cmluZyhhcmdzLmF0KDApKS0+dmFsdWUoZXhlYykpLCBhcmdzLmF0KDEpLnRv
RmxvYXQoZXhlYykpOworICAgICAgICAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50KDApLmlzU3RyaW5n
KCkpCisgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IodXN0cmluZ1RvU3Ry
aW5nKGFzU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApKS0+dmFsdWUoZXhlYykpLCBleGVjLT5hcmd1
bWVudCgxKS50b0Zsb2F0KGV4ZWMpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihhcmdzLmF0KDApLnRvRmxvYXQoZXhlYyksIGFyZ3Mu
YXQoMSkudG9GbG9hdChleGVjKSk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tl
Q29sb3IoZXhlYy0+YXJndW1lbnQoMCkudG9GbG9hdChleGVjKSwgZXhlYy0+YXJndW1lbnQoMSku
dG9GbG9hdChleGVjKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSA0OgotICAg
ICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoYXJncy5hdCgwKS50b0Zsb2F0KGV4ZWMp
LCBhcmdzLmF0KDEpLnRvRmxvYXQoZXhlYyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhcmdzLmF0KDIpLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoMykudG9GbG9hdChleGVj
KSk7CisgICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihleGVjLT5hcmd1bWVudCgw
KS50b0Zsb2F0KGV4ZWMpLCBleGVjLT5hcmd1bWVudCgxKS50b0Zsb2F0KGV4ZWMpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlYy0+YXJndW1lbnQoMikudG9GbG9hdChl
eGVjKSwgZXhlYy0+YXJndW1lbnQoMykudG9GbG9hdChleGVjKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSA1OgotICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3Io
YXJncy5hdCgwKS50b0Zsb2F0KGV4ZWMpLCBhcmdzLmF0KDEpLnRvRmxvYXQoZXhlYyksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLmF0KDIpLnRvRmxvYXQoZXhlYyks
IGFyZ3MuYXQoMykudG9GbG9hdChleGVjKSwgYXJncy5hdCg0KS50b0Zsb2F0KGV4ZWMpKTsKKyAg
ICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKGV4ZWMtPmFyZ3VtZW50KDApLnRvRmxv
YXQoZXhlYyksIGV4ZWMtPmFyZ3VtZW50KDEpLnRvRmxvYXQoZXhlYyksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBleGVjLT5hcmd1bWVudCgyKS50b0Zsb2F0KGV4ZWMpLCBl
eGVjLT5hcmd1bWVudCgzKS50b0Zsb2F0KGV4ZWMpLCBleGVjLT5hcmd1bWVudCg0KS50b0Zsb2F0
KGV4ZWMpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOwpAQCAtMTY0LDIxICsxNjQs
MjEgQEAgSlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0UwogICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpzdHJva2VSZWN0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFs
dWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnN0cm9rZVJlY3QoRXhlY1N0YXRlKiBleGVj
KQogeyAKICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGNvbnRleHQgPSBzdGF0aWNfY2Fz
dDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqPihpbXBsKCkpOwogICAgIAotICAgIGlmIChhcmdz
LnNpemUoKSA8PSA0KQotICAgICAgICBjb250ZXh0LT5zdHJva2VSZWN0KGFyZ3MuYXQoMCkudG9G
bG9hdChleGVjKSwgYXJncy5hdCgxKS50b0Zsb2F0KGV4ZWMpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFyZ3MuYXQoMikudG9GbG9hdChleGVjKSwgYXJncy5hdCgzKS50b0Zsb2F0KGV4
ZWMpKTsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDw9IDQpCisgICAgICAgIGNvbnRl
eHQtPnN0cm9rZVJlY3QoZXhlYy0+YXJndW1lbnQoMCkudG9GbG9hdChleGVjKSwgZXhlYy0+YXJn
dW1lbnQoMSkudG9GbG9hdChleGVjKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVj
LT5hcmd1bWVudCgyKS50b0Zsb2F0KGV4ZWMpLCBleGVjLT5hcmd1bWVudCgzKS50b0Zsb2F0KGV4
ZWMpKTsKICAgICBlbHNlCi0gICAgICAgIGNvbnRleHQtPnN0cm9rZVJlY3QoYXJncy5hdCgwKS50
b0Zsb2F0KGV4ZWMpLCBhcmdzLmF0KDEpLnRvRmxvYXQoZXhlYyksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYXJncy5hdCgyKS50b0Zsb2F0KGV4ZWMpLCBhcmdzLmF0KDMpLnRvRmxvYXQo
ZXhlYyksIGFyZ3MuYXQoNCkudG9GbG9hdChleGVjKSk7CisgICAgICAgIGNvbnRleHQtPnN0cm9r
ZVJlY3QoZXhlYy0+YXJndW1lbnQoMCkudG9GbG9hdChleGVjKSwgZXhlYy0+YXJndW1lbnQoMSku
dG9GbG9hdChleGVjKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjLT5hcmd1bWVu
dCgyKS50b0Zsb2F0KGV4ZWMpLCBleGVjLT5hcmd1bWVudCgzKS50b0Zsb2F0KGV4ZWMpLCBleGVj
LT5hcmd1bWVudCg0KS50b0Zsb2F0KGV4ZWMpKTsKIAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OyAgICAKIH0KIAotSlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdl
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZShFeGVjU3RhdGUqIGV4ZWMpCiB7IAogICAgIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRCogY29udGV4dCA9IHN0YXRpY19jYXN0PENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRCo+KGltcGwoKSk7CiAKQEAgLTE4OCw3ICsxODgsNyBAQCBKU1ZhbHVlIEpT
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3CiAgICAgLy8gICAgIGRyYXdJbWFnZShpbWcs
IHN4LCBzeSwgc3csIHNoLCBkeCwgZHksIGR3LCBkaCkKICAgICAvLyBDb21wb3NpdGUgb3BlcmF0
aW9uIGlzIHNwZWNpZmllZCB3aXRoIGdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbi4KICAgICAvLyBU
aGUgaW1nIHBhcmFtZXRlciBjYW4gYmUgYSA8aW1nPiBvciA8Y2FudmFzPiBlbGVtZW50LgotICAg
IEpTVmFsdWUgdmFsdWUgPSBhcmdzLmF0KDApOworICAgIEpTVmFsdWUgdmFsdWUgPSBleGVjLT5h
cmd1bWVudCgwKTsKICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAgICAgSlNPYmplY3QqIG8gPSBhc09iamVjdCh2
YWx1ZSk7CkBAIC0xOTYsMjAgKzE5NiwyMCBAQCBKU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpkcmF3CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgaWYgKG8tPmluaGVy
aXRzKCZKU0hUTUxJbWFnZUVsZW1lbnQ6OnNfaW5mbykpIHsKICAgICAgICAgSFRNTEltYWdlRWxl
bWVudCogaW1nRWx0ID0gc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudCo+KHN0YXRpY19jYXN0
PEpTSFRNTEVsZW1lbnQqPihvKS0+aW1wbCgpKTsKLSAgICAgICAgc3dpdGNoIChhcmdzLnNpemUo
KSkgeworICAgICAgICBzd2l0Y2ggKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSkgewogICAgICAgICAg
ICAgY2FzZSAzOgotICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWdFbHQsIGFy
Z3MuYXQoMSkudG9GbG9hdChleGVjKSwgYXJncy5hdCgyKS50b0Zsb2F0KGV4ZWMpLCBlYyk7Cisg
ICAgICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKGltZ0VsdCwgZXhlYy0+YXJndW1lbnQo
MSkudG9GbG9hdChleGVjKSwgZXhlYy0+YXJndW1lbnQoMikudG9GbG9hdChleGVjKSwgZWMpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSA1OgotICAgICAgICAgICAg
ICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWdFbHQsIGFyZ3MuYXQoMSkudG9GbG9hdChleGVjKSwg
YXJncy5hdCgyKS50b0Zsb2F0KGV4ZWMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhcmdzLmF0KDMpLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoNCkudG9GbG9hdChleGVjKSwg
ZWMpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWdFbHQsIGV4ZWMtPmFy
Z3VtZW50KDEpLnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFyZ3VtZW50KDIpLnRvRmxvYXQoZXhlYyks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWMtPmFyZ3VtZW50KDMpLnRv
RmxvYXQoZXhlYyksIGV4ZWMtPmFyZ3VtZW50KDQpLnRvRmxvYXQoZXhlYyksIGVjKTsKICAgICAg
ICAgICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgY2FzZSA5OgotICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJ
bWFnZShpbWdFbHQsIEZsb2F0UmVjdChhcmdzLmF0KDEpLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQo
MikudG9GbG9hdChleGVjKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJn
cy5hdCgzKS50b0Zsb2F0KGV4ZWMpLCBhcmdzLmF0KDQpLnRvRmxvYXQoZXhlYykpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlY3QoYXJncy5hdCg1KS50b0Zsb2F0
KGV4ZWMpLCBhcmdzLmF0KDYpLnRvRmxvYXQoZXhlYyksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFyZ3MuYXQoNykudG9GbG9hdChleGVjKSwgYXJncy5hdCg4KS50b0Zsb2F0
KGV4ZWMpKSwgZWMpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWdFbHQs
IEZsb2F0UmVjdChleGVjLT5hcmd1bWVudCgxKS50b0Zsb2F0KGV4ZWMpLCBleGVjLT5hcmd1bWVu
dCgyKS50b0Zsb2F0KGV4ZWMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
eGVjLT5hcmd1bWVudCgzKS50b0Zsb2F0KGV4ZWMpLCBleGVjLT5hcmd1bWVudCg0KS50b0Zsb2F0
KGV4ZWMpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWN0KGV4
ZWMtPmFyZ3VtZW50KDUpLnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFyZ3VtZW50KDYpLnRvRmxvYXQo
ZXhlYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWMtPmFyZ3VtZW50
KDcpLnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFyZ3VtZW50KDgpLnRvRmxvYXQoZXhlYykpLCBlYyk7
CiAgICAgICAgICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0yMTcsMjAgKzIxNywyMCBAQCBK
U1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3CiAgICAgICAgIH0KICAgICB9
IGVsc2UgaWYgKG8tPmluaGVyaXRzKCZKU0hUTUxDYW52YXNFbGVtZW50OjpzX2luZm8pKSB7CiAg
ICAgICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBzdGF0aWNfY2FzdDxIVE1MQ2FudmFz
RWxlbWVudCo+KHN0YXRpY19jYXN0PEpTSFRNTEVsZW1lbnQqPihvKS0+aW1wbCgpKTsKLSAgICAg
ICAgc3dpdGNoIChhcmdzLnNpemUoKSkgeworICAgICAgICBzd2l0Y2ggKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSkgewogICAgICAgICAgICAgY2FzZSAzOgotICAgICAgICAgICAgICAgIGNvbnRleHQt
PmRyYXdJbWFnZShjYW52YXMsIGFyZ3MuYXQoMSkudG9GbG9hdChleGVjKSwgYXJncy5hdCgyKS50
b0Zsb2F0KGV4ZWMpLCBlYyk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKGNh
bnZhcywgZXhlYy0+YXJndW1lbnQoMSkudG9GbG9hdChleGVjKSwgZXhlYy0+YXJndW1lbnQoMiku
dG9GbG9hdChleGVjKSwgZWMpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
Y2FzZSA1OgotICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShjYW52YXMsIGFyZ3Mu
YXQoMSkudG9GbG9hdChleGVjKSwgYXJncy5hdCgyKS50b0Zsb2F0KGV4ZWMpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLmF0KDMpLnRvRmxvYXQoZXhlYyksIGFyZ3Mu
YXQoNCkudG9GbG9hdChleGVjKSwgZWMpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJ
bWFnZShjYW52YXMsIGV4ZWMtPmFyZ3VtZW50KDEpLnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFyZ3Vt
ZW50KDIpLnRvRmxvYXQoZXhlYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGV4ZWMtPmFyZ3VtZW50KDMpLnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFyZ3VtZW50KDQpLnRvRmxv
YXQoZXhlYyksIGVjKTsKICAgICAgICAgICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSA5OgotICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShjYW52YXMsIEZsb2F0UmVjdChhcmdzLmF0KDEpLnRv
RmxvYXQoZXhlYyksIGFyZ3MuYXQoMikudG9GbG9hdChleGVjKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXJncy5hdCgzKS50b0Zsb2F0KGV4ZWMpLCBhcmdzLmF0KDQpLnRv
RmxvYXQoZXhlYykpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJl
Y3QoYXJncy5hdCg1KS50b0Zsb2F0KGV4ZWMpLCBhcmdzLmF0KDYpLnRvRmxvYXQoZXhlYyksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MuYXQoNykudG9GbG9hdChleGVj
KSwgYXJncy5hdCg4KS50b0Zsb2F0KGV4ZWMpKSwgZWMpOworICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmRyYXdJbWFnZShjYW52YXMsIEZsb2F0UmVjdChleGVjLT5hcmd1bWVudCgxKS50b0Zsb2F0
KGV4ZWMpLCBleGVjLT5hcmd1bWVudCgyKS50b0Zsb2F0KGV4ZWMpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBleGVjLT5hcmd1bWVudCgzKS50b0Zsb2F0KGV4ZWMpLCBleGVj
LT5hcmd1bWVudCg0KS50b0Zsb2F0KGV4ZWMpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRmxvYXRSZWN0KGV4ZWMtPmFyZ3VtZW50KDUpLnRvRmxvYXQoZXhlYyksIGV4ZWMt
PmFyZ3VtZW50KDYpLnRvRmxvYXQoZXhlYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGV4ZWMtPmFyZ3VtZW50KDcpLnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFyZ3VtZW50KDgp
LnRvRmxvYXQoZXhlYykpLCBlYyk7CiAgICAgICAgICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIGVjKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CkBA
IC0yMzksMjAgKzIzOSwyMCBAQCBKU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpk
cmF3CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIH0gZWxzZSBpZiAoby0+aW5oZXJpdHMoJkpTSFRN
TFZpZGVvRWxlbWVudDo6c19pbmZvKSkgewogICAgICAgICAgICAgSFRNTFZpZGVvRWxlbWVudCog
dmlkZW8gPSBzdGF0aWNfY2FzdDxIVE1MVmlkZW9FbGVtZW50Kj4oc3RhdGljX2Nhc3Q8SlNIVE1M
RWxlbWVudCo+KG8pLT5pbXBsKCkpOwotICAgICAgICAgICAgc3dpdGNoIChhcmdzLnNpemUoKSkg
eworICAgICAgICAgICAgc3dpdGNoIChleGVjLT5hcmd1bWVudENvdW50KCkpIHsKICAgICAgICAg
ICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZSh2
aWRlbywgYXJncy5hdCgxKS50b0Zsb2F0KGV4ZWMpLCBhcmdzLmF0KDIpLnRvRmxvYXQoZXhlYyks
IGVjKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKHZpZGVvLCBleGVj
LT5hcmd1bWVudCgxKS50b0Zsb2F0KGV4ZWMpLCBleGVjLT5hcmd1bWVudCgyKS50b0Zsb2F0KGV4
ZWMpLCBlYyk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNh
c2UgNToKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKHZpZGVvLCBhcmdz
LmF0KDEpLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoMikudG9GbG9hdChleGVjKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MuYXQoMykudG9GbG9hdChleGVjKSwg
YXJncy5hdCg0KS50b0Zsb2F0KGV4ZWMpLCBlYyk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmRyYXdJbWFnZSh2aWRlbywgZXhlYy0+YXJndW1lbnQoMSkudG9GbG9hdChleGVjKSwgZXhl
Yy0+YXJndW1lbnQoMikudG9GbG9hdChleGVjKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGV4ZWMtPmFyZ3VtZW50KDMpLnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFyZ3Vt
ZW50KDQpLnRvRmxvYXQoZXhlYyksIGVjKTsKICAgICAgICAgICAgICAgICAgICAgc2V0RE9NRXhj
ZXB0aW9uKGV4ZWMsIGVjKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgY2FzZSA5OgotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2Uodmlk
ZW8sIEZsb2F0UmVjdChhcmdzLmF0KDEpLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoMikudG9GbG9h
dChleGVjKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MuYXQo
MykudG9GbG9hdChleGVjKSwgYXJncy5hdCg0KS50b0Zsb2F0KGV4ZWMpKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVjdChhcmdzLmF0KDUpLnRvRmxvYXQo
ZXhlYyksIGFyZ3MuYXQoNikudG9GbG9hdChleGVjKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFyZ3MuYXQoNykudG9GbG9hdChleGVjKSwgYXJncy5hdCg4KS50b0Zs
b2F0KGV4ZWMpKSwgZWMpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2Uo
dmlkZW8sIEZsb2F0UmVjdChleGVjLT5hcmd1bWVudCgxKS50b0Zsb2F0KGV4ZWMpLCBleGVjLT5h
cmd1bWVudCgyKS50b0Zsb2F0KGV4ZWMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXhlYy0+YXJndW1lbnQoMykudG9GbG9hdChleGVjKSwgZXhlYy0+YXJndW1lbnQo
NCkudG9GbG9hdChleGVjKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBGbG9hdFJlY3QoZXhlYy0+YXJndW1lbnQoNSkudG9GbG9hdChleGVjKSwgZXhlYy0+YXJndW1l
bnQoNikudG9GbG9hdChleGVjKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGV4ZWMtPmFyZ3VtZW50KDcpLnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFyZ3VtZW50KDgpLnRv
RmxvYXQoZXhlYykpLCBlYyk7CiAgICAgICAgICAgICAgICAgICAgIHNldERPTUV4Y2VwdGlvbihl
eGVjLCBlYyk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CkBAIC0yNjYsMTEgKzI2NiwxMSBAQCBKU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpkcmF3CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7ICAgIAogfQogCi1KU1ZhbHVl
IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1hZ2VGcm9tUmVjdChFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpkcmF3SW1hZ2VGcm9tUmVjdChFeGVjU3RhdGUqIGV4ZWMpCiB7IAogICAgIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRCogY29udGV4dCA9IHN0YXRpY19jYXN0PENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRCo+KGltcGwoKSk7CiAgICAgCi0gICAgSlNWYWx1ZSB2YWx1ZSA9IGFyZ3MuYXQo
MCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGlmICghdmFs
dWUuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9y
KTsKICAgICBKU09iamVjdCogbyA9IGFzT2JqZWN0KHZhbHVlKTsKQEAgLTI3OCw1MiArMjc4LDUy
IEBAIEpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXcKICAgICBpZiAoIW8t
PmluaGVyaXRzKCZKU0hUTUxJbWFnZUVsZW1lbnQ6OnNfaW5mbykpCiAgICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAgICAgY29udGV4dC0+ZHJhd0ltYWdlRnJvbVJl
Y3Qoc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudCo+KHN0YXRpY19jYXN0PEpTSFRNTEVsZW1l
bnQqPihvKS0+aW1wbCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLmF0
KDEpLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoMikudG9GbG9hdChleGVjKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhcmdzLmF0KDMpLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoNCku
dG9GbG9hdChleGVjKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLmF0KDUp
LnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoNikudG9GbG9hdChleGVjKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhcmdzLmF0KDcpLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoOCkudG9G
bG9hdChleGVjKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c3RyaW5nVG9TdHJp
bmcoYXJncy5hdCg5KS50b1N0cmluZyhleGVjKSkpOyAgICAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBleGVjLT5hcmd1bWVudCgxKS50b0Zsb2F0KGV4ZWMpLCBleGVjLT5hcmd1bWVu
dCgyKS50b0Zsb2F0KGV4ZWMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWMt
PmFyZ3VtZW50KDMpLnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFyZ3VtZW50KDQpLnRvRmxvYXQoZXhl
YyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlYy0+YXJndW1lbnQoNSkudG9G
bG9hdChleGVjKSwgZXhlYy0+YXJndW1lbnQoNikudG9GbG9hdChleGVjKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBleGVjLT5hcmd1bWVudCg3KS50b0Zsb2F0KGV4ZWMpLCBleGVj
LT5hcmd1bWVudCg4KS50b0Zsb2F0KGV4ZWMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCg5KS50b1N0cmluZyhleGVjKSkpOyAg
ICAKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsgICAgCiB9CiAKLUpTVmFsdWUgSlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OnNldFNoYWRvdyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTaGFkb3co
RXhlY1N0YXRlKiBleGVjKQogeyAKICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGNvbnRl
eHQgPSBzdGF0aWNfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqPihpbXBsKCkpOwogCi0g
ICAgc3dpdGNoIChhcmdzLnNpemUoKSkgeworICAgIHN3aXRjaCAoZXhlYy0+YXJndW1lbnRDb3Vu
dCgpKSB7CiAgICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFNoYWRvdyhh
cmdzLmF0KDApLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoMSkudG9GbG9hdChleGVjKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLmF0KDIpLnRvRmxvYXQoZXhlYykpOworICAg
ICAgICAgICAgY29udGV4dC0+c2V0U2hhZG93KGV4ZWMtPmFyZ3VtZW50KDApLnRvRmxvYXQoZXhl
YyksIGV4ZWMtPmFyZ3VtZW50KDEpLnRvRmxvYXQoZXhlYyksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXhlYy0+YXJndW1lbnQoMikudG9GbG9hdChleGVjKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgaWYgKGFyZ3MuYXQoMykuaXNT
dHJpbmcoKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRTaGFkb3coYXJncy5hdCgwKS50
b0Zsb2F0KGV4ZWMpLCBhcmdzLmF0KDEpLnRvRmxvYXQoZXhlYyksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFyZ3MuYXQoMikudG9GbG9hdChleGVjKSwgdXN0cmluZ1RvU3Ry
aW5nKGFzU3RyaW5nKGFyZ3MuYXQoMykpLT52YWx1ZShleGVjKSkpOworICAgICAgICAgICAgaWYg
KGV4ZWMtPmFyZ3VtZW50KDMpLmlzU3RyaW5nKCkpCisgICAgICAgICAgICAgICAgY29udGV4dC0+
c2V0U2hhZG93KGV4ZWMtPmFyZ3VtZW50KDApLnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFyZ3VtZW50
KDEpLnRvRmxvYXQoZXhlYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4
ZWMtPmFyZ3VtZW50KDIpLnRvRmxvYXQoZXhlYyksIHVzdHJpbmdUb1N0cmluZyhhc1N0cmluZyhl
eGVjLT5hcmd1bWVudCgzKSktPnZhbHVlKGV4ZWMpKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgY29udGV4dC0+c2V0U2hhZG93KGFyZ3MuYXQoMCkudG9GbG9hdChleGVjKSwg
YXJncy5hdCgxKS50b0Zsb2F0KGV4ZWMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhcmdzLmF0KDIpLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoMykudG9GbG9hdChleGVjKSk7
CisgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U2hhZG93KGV4ZWMtPmFyZ3VtZW50KDApLnRv
RmxvYXQoZXhlYyksIGV4ZWMtPmFyZ3VtZW50KDEpLnRvRmxvYXQoZXhlYyksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWMtPmFyZ3VtZW50KDIpLnRvRmxvYXQoZXhlYyks
IGV4ZWMtPmFyZ3VtZW50KDMpLnRvRmxvYXQoZXhlYykpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgNToKLSAgICAgICAgICAgIGlmIChhcmdzLmF0KDMpLmlzU3RyaW5nKCkpCi0g
ICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U2hhZG93KGFyZ3MuYXQoMCkudG9GbG9hdChleGVj
KSwgYXJncy5hdCgxKS50b0Zsb2F0KGV4ZWMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhcmdzLmF0KDIpLnRvRmxvYXQoZXhlYyksIHVzdHJpbmdUb1N0cmluZyhhc1N0cmlu
ZyhhcmdzLmF0KDMpKS0+dmFsdWUoZXhlYykpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhcmdzLmF0KDQpLnRvRmxvYXQoZXhlYykpOworICAgICAgICAgICAgaWYgKGV4ZWMt
PmFyZ3VtZW50KDMpLmlzU3RyaW5nKCkpCisgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U2hh
ZG93KGV4ZWMtPmFyZ3VtZW50KDApLnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFyZ3VtZW50KDEpLnRv
RmxvYXQoZXhlYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWMtPmFy
Z3VtZW50KDIpLnRvRmxvYXQoZXhlYyksIHVzdHJpbmdUb1N0cmluZyhhc1N0cmluZyhleGVjLT5h
cmd1bWVudCgzKSktPnZhbHVlKGV4ZWMpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXhlYy0+YXJndW1lbnQoNCkudG9GbG9hdChleGVjKSk7CiAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U2hhZG93KGFyZ3MuYXQoMCkudG9GbG9hdChl
eGVjKSwgYXJncy5hdCgxKS50b0Zsb2F0KGV4ZWMpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhcmdzLmF0KDIpLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoMykudG9GbG9hdChl
eGVjKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5hdCg0KS50b0Zs
b2F0KGV4ZWMpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRTaGFkb3coZXhlYy0+YXJn
dW1lbnQoMCkudG9GbG9hdChleGVjKSwgZXhlYy0+YXJndW1lbnQoMSkudG9GbG9hdChleGVjKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlYy0+YXJndW1lbnQoMikudG9G
bG9hdChleGVjKSwgZXhlYy0+YXJndW1lbnQoMykudG9GbG9hdChleGVjKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXhlYy0+YXJndW1lbnQoNCkudG9GbG9hdChleGVjKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSA3OgotICAgICAgICAgICAgY29udGV4
dC0+c2V0U2hhZG93KGFyZ3MuYXQoMCkudG9GbG9hdChleGVjKSwgYXJncy5hdCgxKS50b0Zsb2F0
KGV4ZWMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MuYXQoMikudG9GbG9h
dChleGVjKSwgYXJncy5hdCgzKS50b0Zsb2F0KGV4ZWMpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFyZ3MuYXQoNCkudG9GbG9hdChleGVjKSwgYXJncy5hdCg1KS50b0Zsb2F0KGV4
ZWMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MuYXQoNikudG9GbG9hdChl
eGVjKSk7CisgICAgICAgICAgICBjb250ZXh0LT5zZXRTaGFkb3coZXhlYy0+YXJndW1lbnQoMCku
dG9GbG9hdChleGVjKSwgZXhlYy0+YXJndW1lbnQoMSkudG9GbG9hdChleGVjKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBleGVjLT5hcmd1bWVudCgyKS50b0Zsb2F0KGV4ZWMpLCBl
eGVjLT5hcmd1bWVudCgzKS50b0Zsb2F0KGV4ZWMpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGV4ZWMtPmFyZ3VtZW50KDQpLnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFyZ3VtZW50KDUp
LnRvRmxvYXQoZXhlYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlYy0+YXJn
dW1lbnQoNikudG9GbG9hdChleGVjKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSA4OgotICAgICAgICAgICAgY29udGV4dC0+c2V0U2hhZG93KGFyZ3MuYXQoMCkudG9GbG9hdChl
eGVjKSwgYXJncy5hdCgxKS50b0Zsb2F0KGV4ZWMpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFyZ3MuYXQoMikudG9GbG9hdChleGVjKSwgYXJncy5hdCgzKS50b0Zsb2F0KGV4ZWMp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MuYXQoNCkudG9GbG9hdChleGVj
KSwgYXJncy5hdCg1KS50b0Zsb2F0KGV4ZWMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFyZ3MuYXQoNikudG9GbG9hdChleGVjKSwgYXJncy5hdCg3KS50b0Zsb2F0KGV4ZWMpKTsK
KyAgICAgICAgICAgIGNvbnRleHQtPnNldFNoYWRvdyhleGVjLT5hcmd1bWVudCgwKS50b0Zsb2F0
KGV4ZWMpLCBleGVjLT5hcmd1bWVudCgxKS50b0Zsb2F0KGV4ZWMpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGV4ZWMtPmFyZ3VtZW50KDIpLnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFy
Z3VtZW50KDMpLnRvRmxvYXQoZXhlYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZXhlYy0+YXJndW1lbnQoNCkudG9GbG9hdChleGVjKSwgZXhlYy0+YXJndW1lbnQoNSkudG9GbG9h
dChleGVjKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjLT5hcmd1bWVudCg2
KS50b0Zsb2F0KGV4ZWMpLCBleGVjLT5hcmd1bWVudCg3KS50b0Zsb2F0KGV4ZWMpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOwpAQCAtMzMyLDExICszMzIsMTEgQEAgSlNWYWx1ZSBK
U0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0UwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OyAgICAKIH0KIAotSlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlUGF0
dGVybihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGVQYXR0ZXJuKEV4ZWNTdGF0ZSogZXhlYykKIHsg
CiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEKj4oaW1wbCgpKTsKIAotICAgIEpTVmFsdWUgdmFsdWUgPSBh
cmdzLmF0KDApOworICAgIEpTVmFsdWUgdmFsdWUgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBp
ZiAoIXZhbHVlLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5
cGVFcnJvcik7CiAgICAgSlNPYmplY3QqIG8gPSBhc09iamVjdCh2YWx1ZSk7CkBAIC0zNDUsNyAr
MzQ1LDcgQEAgSlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYQogICAgICAg
ICBFeGNlcHRpb25Db2RlIGVjOwogICAgICAgICBKU1ZhbHVlIHBhdHRlcm4gPSB0b0pTKGV4ZWMs
CiAgICAgICAgICAgICBjb250ZXh0LT5jcmVhdGVQYXR0ZXJuKHN0YXRpY19jYXN0PEhUTUxJbWFn
ZUVsZW1lbnQqPihzdGF0aWNfY2FzdDxKU0hUTUxFbGVtZW50Kj4obyktPmltcGwoKSksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNr
KGV4ZWMsIGFyZ3MuYXQoMSkpLCBlYykuZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhleGVjLCBleGVjLT5hcmd1bWVu
dCgxKSksIGVjKS5nZXQoKSk7CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAg
ICAgICAgIHJldHVybiBwYXR0ZXJuOwogICAgIH0KQEAgLTM1Myw3ICszNTMsNyBAQCBKU1ZhbHVl
IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhCiAgICAgICAgIEV4Y2VwdGlvbkNvZGUg
ZWM7CiAgICAgICAgIEpTVmFsdWUgcGF0dGVybiA9IHRvSlMoZXhlYywKICAgICAgICAgICAgIGNv
bnRleHQtPmNyZWF0ZVBhdHRlcm4oc3RhdGljX2Nhc3Q8SFRNTENhbnZhc0VsZW1lbnQqPihzdGF0
aWNfY2FzdDxKU0hUTUxFbGVtZW50Kj4obyktPmltcGwoKSksCi0gICAgICAgICAgICAgICAgdmFs
dWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgYXJncy5hdCgxKSksIGVjKS5nZXQoKSk7Cisg
ICAgICAgICAgICAgICAgdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgZXhlYy0+YXJn
dW1lbnQoMSkpLCBlYykuZ2V0KCkpOwogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMp
OwogICAgICAgICByZXR1cm4gcGF0dGVybjsKICAgICB9CkBAIC0zNjEsNyArMzYxLDcgQEAgSlNW
YWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYQogICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogfQogCi1KU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGVJ
bWFnZURhdGEoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBK
U0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlSW1hZ2VEYXRhKEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICAvLyBjcmVhdGVJbWFnZURhdGEgaGFzIHR3byB2YXJpYW50cwogICAgIC8vIGNy
ZWF0ZUltYWdlRGF0YShJbWFnZURhdGEpCkBAIC0zNzAsMTYgKzM3MCwxNiBAQCBKU1ZhbHVlIEpT
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhCiAgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1h
Z2VEYXRhID0gMDsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGlmIChhcmdzLnNp
emUoKSA9PSAxKQotICAgICAgICBpbWFnZURhdGEgPSBjb250ZXh0LT5jcmVhdGVJbWFnZURhdGEo
dG9JbWFnZURhdGEoYXJncy5hdCgwKSksIGVjKTsKLSAgICBlbHNlIGlmIChhcmdzLnNpemUoKSA9
PSAyKQotICAgICAgICBpbWFnZURhdGEgPSBjb250ZXh0LT5jcmVhdGVJbWFnZURhdGEoYXJncy5h
dCgwKS50b0Zsb2F0KGV4ZWMpLCBhcmdzLmF0KDEpLnRvRmxvYXQoZXhlYyksIGVjKTsKKyAgICBp
ZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID09IDEpCisgICAgICAgIGltYWdlRGF0YSA9IGNvbnRl
eHQtPmNyZWF0ZUltYWdlRGF0YSh0b0ltYWdlRGF0YShleGVjLT5hcmd1bWVudCgwKSksIGVjKTsK
KyAgICBlbHNlIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPT0gMikKKyAgICAgICAgaW1hZ2VE
YXRhID0gY29udGV4dC0+Y3JlYXRlSW1hZ2VEYXRhKGV4ZWMtPmFyZ3VtZW50KDApLnRvRmxvYXQo
ZXhlYyksIGV4ZWMtPmFyZ3VtZW50KDEpLnRvRmxvYXQoZXhlYyksIGVjKTsKIAogICAgIHNldERP
TUV4Y2VwdGlvbihleGVjLCBlYyk7CiAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0
KCksIFdURjo6Z2V0UHRyKGltYWdlRGF0YSkpOwogfQogCi1KU1ZhbHVlIEpTQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpwdXRJbWFnZURhdGEoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQorSlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cHV0SW1hZ2VEYXRh
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICAvLyBwdXRJbWFnZURhdGEgaGFzIHR3byB2YXJpYW50
cwogICAgIC8vIHB1dEltYWdlRGF0YShJbWFnZURhdGEsIHgsIHkpCkBAIC0zODcsMTcgKzM4Nywx
NyBAQCBKU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpwdXRJCiAgICAgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEKj4oaW1wbCgpKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGlm
IChhcmdzLnNpemUoKSA+PSA3KQotICAgICAgICBjb250ZXh0LT5wdXRJbWFnZURhdGEodG9JbWFn
ZURhdGEoYXJncy5hdCgwKSksIGFyZ3MuYXQoMSkudG9GbG9hdChleGVjKSwgYXJncy5hdCgyKS50
b0Zsb2F0KGV4ZWMpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MuYXQoMyku
dG9GbG9hdChleGVjKSwgYXJncy5hdCg0KS50b0Zsb2F0KGV4ZWMpLCBhcmdzLmF0KDUpLnRvRmxv
YXQoZXhlYyksIGFyZ3MuYXQoNikudG9GbG9hdChleGVjKSwgZWMpOworICAgIGlmIChleGVjLT5h
cmd1bWVudENvdW50KCkgPj0gNykKKyAgICAgICAgY29udGV4dC0+cHV0SW1hZ2VEYXRhKHRvSW1h
Z2VEYXRhKGV4ZWMtPmFyZ3VtZW50KDApKSwgZXhlYy0+YXJndW1lbnQoMSkudG9GbG9hdChleGVj
KSwgZXhlYy0+YXJndW1lbnQoMikudG9GbG9hdChleGVjKSwgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBleGVjLT5hcmd1bWVudCgzKS50b0Zsb2F0KGV4ZWMpLCBleGVjLT5hcmd1bWVu
dCg0KS50b0Zsb2F0KGV4ZWMpLCBleGVjLT5hcmd1bWVudCg1KS50b0Zsb2F0KGV4ZWMpLCBleGVj
LT5hcmd1bWVudCg2KS50b0Zsb2F0KGV4ZWMpLCBlYyk7CiAgICAgZWxzZQotICAgICAgICBjb250
ZXh0LT5wdXRJbWFnZURhdGEodG9JbWFnZURhdGEoYXJncy5hdCgwKSksIGFyZ3MuYXQoMSkudG9G
bG9hdChleGVjKSwgYXJncy5hdCgyKS50b0Zsb2F0KGV4ZWMpLCBlYyk7CisgICAgICAgIGNvbnRl
eHQtPnB1dEltYWdlRGF0YSh0b0ltYWdlRGF0YShleGVjLT5hcmd1bWVudCgwKSksIGV4ZWMtPmFy
Z3VtZW50KDEpLnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFyZ3VtZW50KDIpLnRvRmxvYXQoZXhlYyks
IGVjKTsKIAogICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZpbGxU
ZXh0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZpbGxUZXh0KEV4ZWNTdGF0ZSogZXhlYykKIHsgCiAgICAg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEKj4oaW1wbCgpKTsKIApAQCAtNDA1LDE3ICs0MDUsMTcgQEAgSlNWYWx1
ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZmlsbAogICAgIC8vIG51bWJlciBhcmcgPSB4
CiAgICAgLy8gbnVtYmVyIGFyZyA9IHkKICAgICAvLyBvcHRpb25hbCBudW1iZXIgYXJnID0gbWF4
V2lkdGgKLSAgICBpZiAoYXJncy5zaXplKCkgPCAzIHx8IGFyZ3Muc2l6ZSgpID4gNCkKKyAgICBp
ZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMyB8fCBleGVjLT5hcmd1bWVudENvdW50KCkgPiA0
KQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7CiAgICAgCi0g
ICAgaWYgKGFyZ3Muc2l6ZSgpID09IDQpCi0gICAgICAgIGNvbnRleHQtPmZpbGxUZXh0KHVzdHJp
bmdUb1N0cmluZyhhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpKSwgYXJncy5hdCgxKS50b0Zsb2F0
KGV4ZWMpLCBhcmdzLmF0KDIpLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoMykudG9GbG9hdChleGVj
KSk7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA9PSA0KQorICAgICAgICBjb250ZXh0
LT5maWxsVGV4dCh1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhl
YykpLCBleGVjLT5hcmd1bWVudCgxKS50b0Zsb2F0KGV4ZWMpLCBleGVjLT5hcmd1bWVudCgyKS50
b0Zsb2F0KGV4ZWMpLCBleGVjLT5hcmd1bWVudCgzKS50b0Zsb2F0KGV4ZWMpKTsKICAgICBlbHNl
Ci0gICAgICAgIGNvbnRleHQtPmZpbGxUZXh0KHVzdHJpbmdUb1N0cmluZyhhcmdzLmF0KDApLnRv
U3RyaW5nKGV4ZWMpKSwgYXJncy5hdCgxKS50b0Zsb2F0KGV4ZWMpLCBhcmdzLmF0KDIpLnRvRmxv
YXQoZXhlYykpOworICAgICAgICBjb250ZXh0LT5maWxsVGV4dCh1c3RyaW5nVG9TdHJpbmcoZXhl
Yy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpLCBleGVjLT5hcmd1bWVudCgxKS50b0Zsb2F0
KGV4ZWMpLCBleGVjLT5hcmd1bWVudCgyKS50b0Zsb2F0KGV4ZWMpKTsKICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c3Ry
b2tlVGV4dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpT
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzdHJva2VUZXh0KEV4ZWNTdGF0ZSogZXhlYykKIHsg
CiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEKj4oaW1wbCgpKTsKIApAQCAtNDIzLDEzICs0MjMsMTMgQEAg
SlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c3RybwogICAgIC8vIG51bWJlciBh
cmcgPSB4CiAgICAgLy8gbnVtYmVyIGFyZyA9IHkKICAgICAvLyBvcHRpb25hbCBudW1iZXIgYXJn
ID0gbWF4V2lkdGgKLSAgICBpZiAoYXJncy5zaXplKCkgPCAzIHx8IGFyZ3Muc2l6ZSgpID4gNCkK
KyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMyB8fCBleGVjLT5hcmd1bWVudENvdW50
KCkgPiA0KQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7CiAg
ICAgCi0gICAgaWYgKGFyZ3Muc2l6ZSgpID09IDQpCi0gICAgICAgIGNvbnRleHQtPnN0cm9rZVRl
eHQodXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpLCBhcmdzLmF0KDEp
LnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoMikudG9GbG9hdChleGVjKSwgYXJncy5hdCgzKS50b0Zs
b2F0KGV4ZWMpKTsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID09IDQpCisgICAgICAg
IGNvbnRleHQtPnN0cm9rZVRleHQodXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRv
U3RyaW5nKGV4ZWMpKSwgZXhlYy0+YXJndW1lbnQoMSkudG9GbG9hdChleGVjKSwgZXhlYy0+YXJn
dW1lbnQoMikudG9GbG9hdChleGVjKSwgZXhlYy0+YXJndW1lbnQoMykudG9GbG9hdChleGVjKSk7
CiAgICAgZWxzZQotICAgICAgICBjb250ZXh0LT5zdHJva2VUZXh0KHVzdHJpbmdUb1N0cmluZyhh
cmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpKSwgYXJncy5hdCgxKS50b0Zsb2F0KGV4ZWMpLCBhcmdz
LmF0KDIpLnRvRmxvYXQoZXhlYykpOworICAgICAgICBjb250ZXh0LT5zdHJva2VUZXh0KHVzdHJp
bmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSksIGV4ZWMtPmFyZ3Vt
ZW50KDEpLnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFyZ3VtZW50KDIpLnRvRmxvYXQoZXhlYykpOwog
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ2xpcGJvYXJkQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ2xpcGJvYXJkQ3VzdG9tLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ2xpcGJvYXJkQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsMTcgKzYz
LDE3IEBAIEpTVmFsdWUgSlNDbGlwYm9hcmQ6OnR5cGVzKEV4ZWNTdGF0ZSogZXgKICAgICByZXR1
cm4gY29uc3RydWN0QXJyYXkoZXhlYywgbGlzdCk7CiB9CiAKLUpTVmFsdWUgSlNDbGlwYm9hcmQ6
OmNsZWFyRGF0YShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVl
IEpTQ2xpcGJvYXJkOjpjbGVhckRhdGEoRXhlY1N0YXRlKiBleGVjKQogewogICAgIENsaXBib2Fy
ZCogY2xpcGJvYXJkID0gaW1wbCgpOwogCi0gICAgaWYgKGFyZ3Muc2l6ZSgpID09IDApIHsKKyAg
ICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID09IDApIHsKICAgICAgICAgY2xpcGJvYXJkLT5j
bGVhckFsbERhdGEoKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCi0g
ICAgaWYgKGFyZ3Muc2l6ZSgpID09IDEpIHsKLSAgICAgICAgY2xpcGJvYXJkLT5jbGVhckRhdGEo
dXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpKTsKKyAgICBpZiAoZXhl
Yy0+YXJndW1lbnRDb3VudCgpID09IDEpIHsKKyAgICAgICAgY2xpcGJvYXJkLT5jbGVhckRhdGEo
dXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSk7CiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIApAQCAtODEsMjMgKzgxLDIzIEBAIEpT
VmFsdWUgSlNDbGlwYm9hcmQ6OmNsZWFyRGF0YShFeGVjU3RhdGUKICAgICByZXR1cm4gdGhyb3dF
cnJvcihleGVjLCBTeW50YXhFcnJvciwgImNsZWFyRGF0YTogSW52YWxpZCBudW1iZXIgb2YgYXJn
dW1lbnRzIik7CiB9CiAKLUpTVmFsdWUgSlNDbGlwYm9hcmQ6OmdldERhdGEoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NsaXBib2FyZDo6Z2V0RGF0YShF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgLy8gRklYTUU6IEl0IGRvZXMgbm90IG1hdGNoIHRoZSBy
ZXN0IG9mIHRoZSBKUyBiaW5kaW5ncyB0byB0aHJvdyBvbiBpbnZhbGlkIG51bWJlciBvZiBhcmd1
bWVudHMuCi0gICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDEpCisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSAhPSAxKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJv
ciwgImdldERhdGE6IEludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyIpOwogCiAgICAgQ2xpcGJv
YXJkKiBjbGlwYm9hcmQgPSBpbXBsKCk7CiAKICAgICBib29sIHN1Y2Nlc3M7Ci0gICAgU3RyaW5n
IHJlc3VsdCA9IGNsaXBib2FyZC0+Z2V0RGF0YSh1c3RyaW5nVG9TdHJpbmcoYXJncy5hdCgwKS50
b1N0cmluZyhleGVjKSksIHN1Y2Nlc3MpOworICAgIFN0cmluZyByZXN1bHQgPSBjbGlwYm9hcmQt
PmdldERhdGEodXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMp
KSwgc3VjY2Vzcyk7CiAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIAogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCByZXN1bHQpOwogfQogCi1KU1ZhbHVl
IEpTQ2xpcGJvYXJkOjpzZXREcmFnSW1hZ2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQorSlNWYWx1ZSBKU0NsaXBib2FyZDo6c2V0RHJhZ0ltYWdlKEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICBDbGlwYm9hcmQqIGNsaXBib2FyZCA9IGltcGwoKTsKIApAQCAtMTA1LDE0ICsx
MDUsMTQgQEAgSlNWYWx1ZSBKU0NsaXBib2FyZDo6c2V0RHJhZ0ltYWdlKEV4ZWNTdAogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIC8vIEZJWE1FOiBJdCBkb2VzIG5vdCBtYXRj
aCB0aGUgcmVzdCBvZiB0aGUgSlMgYmluZGluZ3MgdG8gdGhyb3cgb24gaW52YWxpZCBudW1iZXIg
b2YgYXJndW1lbnRzLiAKLSAgICBpZiAoYXJncy5zaXplKCkgIT0gMykKKyAgICBpZiAoZXhlYy0+
YXJndW1lbnRDb3VudCgpICE9IDMpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5
bnRheEVycm9yLCAic2V0RHJhZ0ltYWdlOiBJbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMiKTsK
IAotICAgIGludCB4ID0gYXJncy5hdCgxKS50b0ludDMyKGV4ZWMpOwotICAgIGludCB5ID0gYXJn
cy5hdCgyKS50b0ludDMyKGV4ZWMpOworICAgIGludCB4ID0gZXhlYy0+YXJndW1lbnQoMSkudG9J
bnQzMihleGVjKTsKKyAgICBpbnQgeSA9IGV4ZWMtPmFyZ3VtZW50KDIpLnRvSW50MzIoZXhlYyk7
CiAKICAgICAvLyBTZWUgaWYgdGhleSBwYXNzZWQgdXMgYSBub2RlCi0gICAgTm9kZSogbm9kZSA9
IHRvTm9kZShhcmdzLmF0KDApKTsKKyAgICBOb2RlKiBub2RlID0gdG9Ob2RlKGV4ZWMtPmFyZ3Vt
ZW50KDApKTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMs
IFR5cGVFcnJvcik7CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01BcHBsaWNhdGlv
bkNhY2hlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
QXBwbGljYXRpb25DYWNoZUN1c3RvbS5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUFwcGxpY2F0aW9uQ2FjaGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NCwxMiArNDQsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgRU5BQkxFKEFQ
UExJQ0FUSU9OX0NBQ0hFX0RZTkFNSUNfRU5UUklFUykKIAotSlNWYWx1ZSBKU0RPTUFwcGxpY2F0
aW9uQ2FjaGU6Omhhc0l0ZW0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQor
SlNWYWx1ZSBKU0RPTUFwcGxpY2F0aW9uQ2FjaGU6Omhhc0l0ZW0oRXhlY1N0YXRlKiBleGVjKQog
ewogICAgIEZyYW1lKiBmcmFtZSA9IGFzSlNET01XaW5kb3coZXhlYy0+ZHluYW1pY0dsb2JhbE9i
amVjdCgpKS0+aW1wbCgpLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwotICAgIGNvbnN0IEtVUkwmIHVybCA9IGZyYW1lLT5sb2FkZXIoKS0+
Y29tcGxldGVVUkwoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSk7CisgICAgY29uc3QgS1VSTCYg
dXJsID0gZnJhbWUtPmxvYWRlcigpLT5jb21wbGV0ZVVSTChleGVjLT5hcmd1bWVudCgwKS50b1N0
cmluZyhleGVjKSk7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBib29sIHJlc3Vs
dCA9IGltcGwoKS0+aGFzSXRlbSh1cmwsIGVjKTsKQEAgLTU3LDEyICs1NywxMiBAQCBKU1ZhbHVl
IEpTRE9NQXBwbGljYXRpb25DYWNoZTo6aGFzSXRlbShFCiAgICAgcmV0dXJuIGpzQm9vbGVhbihy
ZXN1bHQpOwogfQogCi1KU1ZhbHVlIEpTRE9NQXBwbGljYXRpb25DYWNoZTo6YWRkKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNET01BcHBsaWNhdGlvbkNh
Y2hlOjphZGQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEZyYW1lKiBmcmFtZSA9IGFzSlNET01X
aW5kb3coZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpKS0+aW1wbCgpLT5mcmFtZSgpOwogICAg
IGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIGNvbnN0IEtV
UkwmIHVybCA9IGZyYW1lLT5sb2FkZXIoKS0+Y29tcGxldGVVUkwoYXJncy5hdCgwKS50b1N0cmlu
ZyhleGVjKSk7CisgICAgY29uc3QgS1VSTCYgdXJsID0gZnJhbWUtPmxvYWRlcigpLT5jb21wbGV0
ZVVSTChleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSk7CiAgICAgCiAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7CiAgICAgaW1wbCgpLT5hZGQodXJsLCBlYyk7CkBAIC03MCwxMiArNzAs
MTIgQEAgSlNWYWx1ZSBKU0RPTUFwcGxpY2F0aW9uQ2FjaGU6OmFkZChFeGVjUwogICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlIEpTRE9NQXBwbGljYXRpb25DYWNoZTo6cmVt
b3ZlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNET01B
cHBsaWNhdGlvbkNhY2hlOjpyZW1vdmUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEZyYW1lKiBm
cmFtZSA9IGFzSlNET01XaW5kb3coZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpKS0+aW1wbCgp
LT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwotICAgIGNvbnN0IEtVUkwmIHVybCA9IGZyYW1lLT5sb2FkZXIoKS0+Y29tcGxldGVVUkwoYXJn
cy5hdCgwKS50b1N0cmluZyhleGVjKSk7CisgICAgY29uc3QgS1VSTCYgdXJsID0gZnJhbWUtPmxv
YWRlcigpLT5jb21wbGV0ZVVSTChleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSk7CiAg
ICAgCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgaW1wbCgpLT5yZW1vdmUodXJsLCBl
Yyk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NRm9ybURhdGFDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01Gb3JtRGF0YUN1c3RvbS5jcHAJ
KHJldmlzaW9uIDYwMzQxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUZvcm1EYXRhQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksMTEgKzM5LDExIEBAIHVzaW5nIG5hbWVzcGFj
ZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSBKU0RPTUZvcm1EYXRhOjph
cHBlbmQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0RP
TUZvcm1EYXRhOjphcHBlbmQoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGlmIChhcmdzLnNpemUo
KSA+PSAyKSB7Ci0gICAgICAgIFN0cmluZyBuYW1lID0gdXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQo
MCkudG9TdHJpbmcoZXhlYykpOwotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gYXJncy5hdCgxKTsK
KyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDIpIHsKKyAgICAgICAgU3RyaW5nIG5h
bWUgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpOwor
ICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+YXJndW1lbnQoMSk7CiAgICAgICAgIGlmICh2
YWx1ZS5pbmhlcml0cygmSlNCbG9iOjpzX2luZm8pKQogICAgICAgICAgICAgaW1wbCgpLT5hcHBl
bmQobmFtZSwgdG9CbG9iKHZhbHVlKSk7CiAgICAgICAgIGVsc2UKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
NjYsMTEgKzc2NiwxMSBAQCBzdGF0aWMgYm9vbCBkb21XaW5kb3dBbGxvd1BvcFVwKEZyYW1lKiBh
CiAgICAgcmV0dXJuIERPTVdpbmRvdzo6YWxsb3dQb3BVcChhY3RpdmVGcmFtZSk7CiB9CiAKLUpT
VmFsdWUgSlNET01XaW5kb3c6Om9wZW4oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQorSlNWYWx1ZSBKU0RPTVdpbmRvdzo6b3BlbihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAg
U3RyaW5nIHVybFN0cmluZyA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2so
ZXhlYywgYXJncy5hdCgwKSk7Ci0gICAgQXRvbWljU3RyaW5nIGZyYW1lTmFtZSA9IGFyZ3MuYXQo
MSkuaXNVbmRlZmluZWRPck51bGwoKSA/ICJfYmxhbmsiIDogdXN0cmluZ1RvQXRvbWljU3RyaW5n
KGFyZ3MuYXQoMSkudG9TdHJpbmcoZXhlYykpOwotICAgIFdpbmRvd0ZlYXR1cmVzIHdpbmRvd0Zl
YXR1cmVzKHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgYXJncy5h
dCgyKSkpOworICAgIFN0cmluZyB1cmxTdHJpbmcgPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5l
ZE9yTnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKKyAgICBBdG9taWNTdHJpbmcg
ZnJhbWVOYW1lID0gZXhlYy0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWRPck51bGwoKSA/ICJfYmxh
bmsiIDogdXN0cmluZ1RvQXRvbWljU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4
ZWMpKTsKKyAgICBXaW5kb3dGZWF0dXJlcyB3aW5kb3dGZWF0dXJlcyh2YWx1ZVRvU3RyaW5nV2l0
aFVuZGVmaW5lZE9yTnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDIpKSk7CiAKICAgICBG
cmFtZSogZnJhbWUgPSBpbXBsKCktPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKQEAgLTg0MCwx
MSArODQwLDExIEBAIEpTVmFsdWUgSlNET01XaW5kb3c6Om9wZW4oRXhlY1N0YXRlKiBleGUKICAg
ICByZXR1cm4gdG9KUyhleGVjLCBmcmFtZS0+ZG9tV2luZG93KCkpOwogfQogCi1KU1ZhbHVlIEpT
RE9NV2luZG93OjpzaG93TW9kYWxEaWFsb2coRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQorSlNWYWx1ZSBKU0RPTVdpbmRvdzo6c2hvd01vZGFsRGlhbG9nKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKLSAgICBTdHJpbmcgdXJsID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51
bGxDaGVjayhleGVjLCBhcmdzLmF0KDApKTsKLSAgICBKU1ZhbHVlIGRpYWxvZ0FyZ3MgPSBhcmdz
LmF0KDEpOwotICAgIFN0cmluZyBmZWF0dXJlQXJncyA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZp
bmVkT3JOdWxsQ2hlY2soZXhlYywgYXJncy5hdCgyKSk7CisgICAgU3RyaW5nIHVybCA9IHZhbHVl
VG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgZXhlYy0+YXJndW1lbnQoMCkp
OworICAgIEpTVmFsdWUgZGlhbG9nQXJncyA9IGV4ZWMtPmFyZ3VtZW50KDEpOworICAgIFN0cmlu
ZyBmZWF0dXJlQXJncyA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhl
YywgZXhlYy0+YXJndW1lbnQoMikpOwogCiAgICAgRnJhbWUqIGZyYW1lID0gaW1wbCgpLT5mcmFt
ZSgpOwogICAgIGlmICghZnJhbWUpCkBAIC05MjMsMjMgKzkyMywyMyBAQCBKU1ZhbHVlIEpTRE9N
V2luZG93OjpzaG93TW9kYWxEaWFsb2coRXhlCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9
CiAKLUpTVmFsdWUgSlNET01XaW5kb3c6OnBvc3RNZXNzYWdlKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNET01XaW5kb3c6OnBvc3RNZXNzYWdlKEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICBET01XaW5kb3cqIHdpbmRvdyA9IGltcGwoKTsKIAogICAgIERP
TVdpbmRvdyogc291cmNlID0gYXNKU0RPTVdpbmRvdyhleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCkpLT5pbXBsKCk7Ci0gICAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1lc3Nh
Z2UgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShleGVjLCBhcmdzLmF0KDApKTsKKyAg
ICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbWVzc2FnZSA9IFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKIAogICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAg
ICBNZXNzYWdlUG9ydEFycmF5IG1lc3NhZ2VQb3J0czsKLSAgICBpZiAoYXJncy5zaXplKCkgPiAy
KQotICAgICAgICBmaWxsTWVzc2FnZVBvcnRBcnJheShleGVjLCBhcmdzLmF0KDEpLCBtZXNzYWdl
UG9ydHMpOworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPiAyKQorICAgICAgICBmaWxs
TWVzc2FnZVBvcnRBcnJheShleGVjLCBleGVjLT5hcmd1bWVudCgxKSwgbWVzc2FnZVBvcnRzKTsK
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogCi0gICAgU3RyaW5nIHRhcmdldE9yaWdpbiA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZp
bmVkT3JOdWxsQ2hlY2soZXhlYywgYXJncy5hdCgoYXJncy5zaXplKCkgPT0gMikgPyAxIDogMikp
OworICAgIFN0cmluZyB0YXJnZXRPcmlnaW4gPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9y
TnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KChleGVjLT5hcmd1bWVudENvdW50KCkgPT0g
MikgPyAxIDogMikpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAKQEAgLTk1MCwxMiArOTUwLDEyIEBAIEpTVmFsdWUgSlNET01X
aW5kb3c6OnBvc3RNZXNzYWdlKEV4ZWNTdGEKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0K
IAotSlNWYWx1ZSBKU0RPTVdpbmRvdzo6c2V0VGltZW91dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTRE9NV2luZG93OjpzZXRUaW1lb3V0KEV4ZWNTdGF0
ZSogZXhlYykKIHsKLSAgICBPd25QdHI8U2NoZWR1bGVkQWN0aW9uPiBhY3Rpb24gPSBTY2hlZHVs
ZWRBY3Rpb246OmNyZWF0ZShleGVjLCBhcmdzLCBjdXJyZW50V29ybGQoZXhlYykpOworICAgIE93
blB0cjxTY2hlZHVsZWRBY3Rpb24+IGFjdGlvbiA9IFNjaGVkdWxlZEFjdGlvbjo6Y3JlYXRlKGV4
ZWMsIGN1cnJlbnRXb3JsZChleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBpbnQgZGVsYXkgPSBhcmdzLmF0KDEp
LnRvSW50MzIoZXhlYyk7CisgICAgaW50IGRlbGF5ID0gZXhlYy0+YXJndW1lbnQoMSkudG9JbnQz
MihleGVjKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGludCByZXN1bHQgPSBp
bXBsKCktPnNldFRpbWVvdXQoYWN0aW9uLnJlbGVhc2UoKSwgZGVsYXksIGVjKTsKQEAgLTk2NCwx
MiArOTY0LDEyIEBAIEpTVmFsdWUgSlNET01XaW5kb3c6OnNldFRpbWVvdXQoRXhlY1N0YXQKICAg
ICByZXR1cm4ganNOdW1iZXIoZXhlYywgcmVzdWx0KTsKIH0KIAotSlNWYWx1ZSBKU0RPTVdpbmRv
dzo6c2V0SW50ZXJ2YWwoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNW
YWx1ZSBKU0RPTVdpbmRvdzo6c2V0SW50ZXJ2YWwoRXhlY1N0YXRlKiBleGVjKQogewotICAgIE93
blB0cjxTY2hlZHVsZWRBY3Rpb24+IGFjdGlvbiA9IFNjaGVkdWxlZEFjdGlvbjo6Y3JlYXRlKGV4
ZWMsIGFyZ3MsIGN1cnJlbnRXb3JsZChleGVjKSk7CisgICAgT3duUHRyPFNjaGVkdWxlZEFjdGlv
bj4gYWN0aW9uID0gU2NoZWR1bGVkQWN0aW9uOjpjcmVhdGUoZXhlYywgY3VycmVudFdvcmxkKGV4
ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwotICAgIGludCBkZWxheSA9IGFyZ3MuYXQoMSkudG9JbnQzMihleGVjKTsKKyAg
ICBpbnQgZGVsYXkgPSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwogCiAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgaW50IHJlc3VsdCA9IGltcGwoKS0+c2V0SW50ZXJ2YWwo
YWN0aW9uLnJlbGVhc2UoKSwgZGVsYXksIGVjKTsKQEAgLTk3OCw2NyArOTc4LDY3IEBAIEpTVmFs
dWUgSlNET01XaW5kb3c6OnNldEludGVydmFsKEV4ZWNTdGEKICAgICByZXR1cm4ganNOdW1iZXIo
ZXhlYywgcmVzdWx0KTsKIH0KIAotSlNWYWx1ZSBKU0RPTVdpbmRvdzo6YWRkRXZlbnRMaXN0ZW5l
cihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTRE9NV2lu
ZG93OjphZGRFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBGcmFtZSogZnJh
bWUgPSBpbXBsKCktPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAKLSAgICBKU1ZhbHVlIGxpc3RlbmVyID0gYXJncy5hdCgxKTsKKyAgICBK
U1ZhbHVlIGxpc3RlbmVyID0gZXhlYy0+YXJndW1lbnQoMSk7CiAgICAgaWYgKCFsaXN0ZW5lci5p
c09iamVjdCgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIGltcGwoKS0+
YWRkRXZlbnRMaXN0ZW5lcih1c3RyaW5nVG9BdG9taWNTdHJpbmcoYXJncy5hdCgwKS50b1N0cmlu
ZyhleGVjKSksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwgdGhp
cywgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSksIGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMp
KTsKKyAgICBpbXBsKCktPmFkZEV2ZW50TGlzdGVuZXIodXN0cmluZ1RvQXRvbWljU3RyaW5nKGV4
ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUo
YXNPYmplY3QobGlzdGVuZXIpLCB0aGlzLCBmYWxzZSwgY3VycmVudFdvcmxkKGV4ZWMpKSwgZXhl
Yy0+YXJndW1lbnQoMikudG9Cb29sZWFuKGV4ZWMpKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIH0KIAotSlNWYWx1ZSBKU0RPTVdpbmRvdzo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTRE9NV2luZG93OjpyZW1v
dmVFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBGcmFtZSogZnJhbWUgPSBp
bXBsKCktPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAKLSAgICBKU1ZhbHVlIGxpc3RlbmVyID0gYXJncy5hdCgxKTsKKyAgICBKU1ZhbHVl
IGxpc3RlbmVyID0gZXhlYy0+YXJndW1lbnQoMSk7CiAgICAgaWYgKCFsaXN0ZW5lci5pc09iamVj
dCgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIGltcGwoKS0+cmVtb3Zl
RXZlbnRMaXN0ZW5lcih1c3RyaW5nVG9BdG9taWNTdHJpbmcoYXJncy5hdCgwKS50b1N0cmluZyhl
eGVjKSksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwgdGhpcywg
ZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSkuZ2V0KCksIGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4
ZWMpKTsKKyAgICBpbXBsKCktPnJlbW92ZUV2ZW50TGlzdGVuZXIodXN0cmluZ1RvQXRvbWljU3Ry
aW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSwgSlNFdmVudExpc3RlbmVyOjpj
cmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCB0aGlzLCBmYWxzZSwgY3VycmVudFdvcmxkKGV4ZWMp
KS5nZXQoKSwgZXhlYy0+YXJndW1lbnQoMikudG9Cb29sZWFuKGV4ZWMpKTsKICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIH0KIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKLUpTVmFsdWUgSlNET01X
aW5kb3c6Om9wZW5EYXRhYmFzZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CitKU1ZhbHVlIEpTRE9NV2luZG93OjpvcGVuRGF0YWJhc2UoRXhlY1N0YXRlKiBleGVjKQogewot
ICAgIGlmICghYWxsb3dzQWNjZXNzRnJvbShleGVjKSB8fCAoYXJncy5zaXplKCkgPCA0KSkgewor
ICAgIGlmICghYWxsb3dzQWNjZXNzRnJvbShleGVjKSB8fCAoZXhlYy0+YXJndW1lbnRDb3VudCgp
IDwgNCkpIHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFNZTlRBWF9FUlIpOwogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBTdHJpbmcgbmFtZSA9IHVz
dHJpbmdUb1N0cmluZyhhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBTdHJpbmcgbmFt
ZSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSk7CiAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIAotICAgIFN0cmluZyB2ZXJzaW9uID0gdXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQoMSkudG9T
dHJpbmcoZXhlYykpOworICAgIFN0cmluZyB2ZXJzaW9uID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMt
PmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgU3RyaW5nIGRpc3BsYXlO
YW1lID0gdXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQoMikudG9TdHJpbmcoZXhlYykpOworICAgIFN0
cmluZyBkaXNwbGF5TmFtZSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgyKS50b1N0
cmluZyhleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIAotICAgIC8vIGFyZ3MuYXQoMykgPSBlc3RpbWF0ZWQgc2l6ZQot
ICAgIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSA9IGFyZ3MuYXQoMykudG9VSW50MzIoZXhl
Yyk7CisgICAgLy8gZXhlYy0+YXJndW1lbnQoMykgPSBlc3RpbWF0ZWQgc2l6ZQorICAgIHVuc2ln
bmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSA9IGV4ZWMtPmFyZ3VtZW50KDMpLnRvVUludDMyKGV4ZWMp
OwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAKICAgICBSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gY3JlYXRpb25DYWxsYmFjazsK
LSAgICBpZiAoYXJncy5zaXplKCkgPj0gNSkgewotICAgICAgICBpZiAoIWFyZ3MuYXQoNCkuaXNP
YmplY3QoKSkgeworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gNSkgeworICAgICAg
ICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDQpLmlzT2JqZWN0KCkpIHsKICAgICAgICAgICAgIHNldERP
TUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7CiAgICAgICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKICAgICAgICAgfQogCi0gICAgICAgIGNyZWF0aW9uQ2FsbGJhY2sgPSBK
U0RhdGFiYXNlQ2FsbGJhY2s6OmNyZWF0ZShhc09iamVjdChhcmdzLmF0KDQpKSwgZ2xvYmFsT2Jq
ZWN0KCkpOworICAgICAgICBjcmVhdGlvbkNhbGxiYWNrID0gSlNEYXRhYmFzZUNhbGxiYWNrOjpj
cmVhdGUoYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoNCkpLCBnbG9iYWxPYmplY3QoKSk7CiAgICAg
fQogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRGF0YWJhc2VDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNEYXRhYmFzZUN1c3RvbS5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RhdGFiYXNlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsMTcgKzQ3LDE3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotSlNWYWx1
ZSBKU0RhdGFiYXNlOjpjaGFuZ2VWZXJzaW9uKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlz
dCYgYXJncykKK0pTVmFsdWUgSlNEYXRhYmFzZTo6Y2hhbmdlVmVyc2lvbihFeGVjU3RhdGUqIGV4
ZWMpCiB7Ci0gICAgU3RyaW5nIG9sZFZlcnNpb24gPSB1c3RyaW5nVG9TdHJpbmcoYXJncy5hdCgw
KS50b1N0cmluZyhleGVjKSk7CisgICAgU3RyaW5nIG9sZFZlcnNpb24gPSB1c3RyaW5nVG9TdHJp
bmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBTdHJpbmcg
bmV3VmVyc2lvbiA9IHVzdHJpbmdUb1N0cmluZyhhcmdzLmF0KDEpLnRvU3RyaW5nKGV4ZWMpKTsK
KyAgICBTdHJpbmcgbmV3VmVyc2lvbiA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgx
KS50b1N0cmluZyhleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhcmdzLmF0
KDIpLmdldE9iamVjdCgpOworICAgIEpTT2JqZWN0KiBvYmplY3QgPSBleGVjLT5hcmd1bWVudCgy
KS5nZXRPYmplY3QoKTsKICAgICBpZiAoIW9iamVjdCkgewogICAgICAgICBzZXRET01FeGNlcHRp
b24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKQEAgLTY2LDggKzY2LDggQEAgSlNWYWx1ZSBKU0RhdGFiYXNlOjpjaGFuZ2VWZXJzaW9uKEV4
ZWNTdAogICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiBjYWxsYmFjayhKU1NRTFRy
YW5zYWN0aW9uQ2FsbGJhY2s6OmNyZWF0ZShvYmplY3QsIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFs
T2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkpKSk7CiAKICAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb25F
cnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrOwotICAgIGlmICghYXJncy5hdCgzKS5pc051bGwo
KSkgewotICAgICAgICBvYmplY3QgPSBhcmdzLmF0KDMpLmdldE9iamVjdCgpOworICAgIGlmICgh
ZXhlYy0+YXJndW1lbnQoMykuaXNOdWxsKCkpIHsKKyAgICAgICAgb2JqZWN0ID0gZXhlYy0+YXJn
dW1lbnQoMykuZ2V0T2JqZWN0KCk7CiAgICAgICAgIGlmICghb2JqZWN0KSB7CiAgICAgICAgICAg
ICBzZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOwogICAgICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC03Nyw4ICs3Nyw4IEBAIEpTVmFsdWUgSlNEYXRhYmFz
ZTo6Y2hhbmdlVmVyc2lvbihFeGVjU3QKICAgICB9CiAKICAgICBSZWZQdHI8Vm9pZENhbGxiYWNr
PiBzdWNjZXNzQ2FsbGJhY2s7Ci0gICAgaWYgKCFhcmdzLmF0KDQpLmlzTnVsbCgpKSB7Ci0gICAg
ICAgIG9iamVjdCA9IGFyZ3MuYXQoNCkuZ2V0T2JqZWN0KCk7CisgICAgaWYgKCFleGVjLT5hcmd1
bWVudCg0KS5pc051bGwoKSkgeworICAgICAgICBvYmplY3QgPSBleGVjLT5hcmd1bWVudCg0KS5n
ZXRPYmplY3QoKTsKICAgICAgICAgaWYgKCFvYmplY3QpIHsKICAgICAgICAgICAgIHNldERPTUV4
Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7CiAgICAgICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKQEAgLTkyLDkgKzkyLDkgQEAgSlNWYWx1ZSBKU0RhdGFiYXNlOjpjaGFuZ2VW
ZXJzaW9uKEV4ZWNTdAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgSlNW
YWx1ZSBjcmVhdGVUcmFuc2FjdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MsIERhdGFiYXNlKiBkYXRhYmFzZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Ym9vbCByZWFkT25seSkKK3N0YXRpYyBKU1ZhbHVlIGNyZWF0ZVRyYW5zYWN0aW9uKEV4ZWNTdGF0
ZSogZXhlYywgRGF0YWJhc2UqIGRhdGFiYXNlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBib29sIHJlYWRPbmx5KQogewotICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhcmdzLmF0KDAp
LmdldE9iamVjdCgpOworICAgIEpTT2JqZWN0KiBvYmplY3QgPSBleGVjLT5hcmd1bWVudCgwKS5n
ZXRPYmplY3QoKTsKIAogICAgIGlmICghb2JqZWN0KSB7CiAgICAgICAgIHNldERPTUV4Y2VwdGlv
bihleGVjLCBUWVBFX01JU01BVENIX0VSUik7CkBAIC0xMDMsOCArMTAzLDggQEAgc3RhdGljIEpT
VmFsdWUgY3JlYXRlVHJhbnNhY3Rpb24oRXhlY1N0YQogCiAgICAgUmVmUHRyPFNRTFRyYW5zYWN0
aW9uQ2FsbGJhY2s+IGNhbGxiYWNrKEpTU1FMVHJhbnNhY3Rpb25DYWxsYmFjazo6Y3JlYXRlKG9i
amVjdCwgZ2xvYmFsT2JqZWN0KSk7CiAgICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxs
YmFjaz4gZXJyb3JDYWxsYmFjazsKLSAgICBpZiAoYXJncy5zaXplKCkgPiAxICYmICFhcmdzLmF0
KDEpLmlzTnVsbCgpKSB7Ci0gICAgICAgIG9iamVjdCA9IGFyZ3MuYXQoMSkuZ2V0T2JqZWN0KCk7
CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+IDEgJiYgIWV4ZWMtPmFyZ3VtZW50KDEp
LmlzTnVsbCgpKSB7CisgICAgICAgIG9iamVjdCA9IGV4ZWMtPmFyZ3VtZW50KDEpLmdldE9iamVj
dCgpOwogICAgICAgICBpZiAoIW9iamVjdCkgewogICAgICAgICAgICAgc2V0RE9NRXhjZXB0aW9u
KGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwpAQCAtMTE0LDggKzExNCw4IEBAIHN0YXRpYyBKU1ZhbHVlIGNyZWF0ZVRyYW5zYWN0aW9u
KEV4ZWNTdGEKICAgICB9CiAKICAgICBSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJh
Y2s7Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpID4gMiAmJiAhYXJncy5hdCgyKS5pc051bGwoKSkgewot
ICAgICAgICBvYmplY3QgPSBhcmdzLmF0KDIpLmdldE9iamVjdCgpOworICAgIGlmIChleGVjLT5h
cmd1bWVudENvdW50KCkgPiAyICYmICFleGVjLT5hcmd1bWVudCgyKS5pc051bGwoKSkgeworICAg
ICAgICBvYmplY3QgPSBleGVjLT5hcmd1bWVudCgyKS5nZXRPYmplY3QoKTsKICAgICAgICAgaWYg
KCFvYmplY3QpIHsKICAgICAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01B
VENIX0VSUik7CiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKQEAgLTEyOCwxNCAr
MTI4LDE0IEBAIHN0YXRpYyBKU1ZhbHVlIGNyZWF0ZVRyYW5zYWN0aW9uKEV4ZWNTdGEKICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBKU0RhdGFiYXNlOjp0cmFuc2FjdGlv
bihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTRGF0YWJh
c2U6OnRyYW5zYWN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gY3JlYXRlVHJh
bnNhY3Rpb24oZXhlYywgYXJncywgbV9pbXBsLmdldCgpLCBzdGF0aWNfY2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KGdsb2JhbE9iamVjdCgpKSwgZmFsc2UpOworICAgIHJldHVybiBjcmVhdGVUcmFu
c2FjdGlvbihleGVjLCBtX2ltcGwuZ2V0KCksIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0
Kj4oZ2xvYmFsT2JqZWN0KCkpLCBmYWxzZSk7CiB9CiAKLUpTVmFsdWUgSlNEYXRhYmFzZTo6cmVh
ZFRyYW5zYWN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFs
dWUgSlNEYXRhYmFzZTo6cmVhZFRyYW5zYWN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBy
ZXR1cm4gY3JlYXRlVHJhbnNhY3Rpb24oZXhlYywgYXJncywgbV9pbXBsLmdldCgpLCBzdGF0aWNf
Y2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCgpKSwgdHJ1ZSk7CisgICAgcmV0
dXJuIGNyZWF0ZVRyYW5zYWN0aW9uKGV4ZWMsIG1faW1wbC5nZXQoKSwgc3RhdGljX2Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QoKSksIHRydWUpOwogfQogCiB9CkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YWJhc2VTeW5jQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YWJhc2VTeW5jQ3VzdG9tLmNwcAkocmV2aXNpb24g
NjAzNDEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YWJhc2VTeW5jQ3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDIsMTcgKzQyLDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
dXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotSlNWYWx1ZSBKU0RhdGFiYXNlU3luYzo6Y2hhbmdlVmVy
c2lvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTRGF0
YWJhc2VTeW5jOjpjaGFuZ2VWZXJzaW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBTdHJpbmcg
b2xkVmVyc2lvbiA9IHVzdHJpbmdUb1N0cmluZyhhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpKTsK
KyAgICBTdHJpbmcgb2xkVmVyc2lvbiA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgw
KS50b1N0cmluZyhleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIFN0cmluZyBuZXdWZXJzaW9uID0gdXN0cmlu
Z1RvU3RyaW5nKGFyZ3MuYXQoMSkudG9TdHJpbmcoZXhlYykpOworICAgIFN0cmluZyBuZXdWZXJz
aW9uID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpKTsK
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogCi0gICAgSlNPYmplY3QqIG9iamVjdCA9IGFyZ3MuYXQoMikuZ2V0T2JqZWN0KCk7Cisg
ICAgSlNPYmplY3QqIG9iamVjdCA9IGV4ZWMtPmFyZ3VtZW50KDIpLmdldE9iamVjdCgpOwogICAg
IGlmICghb2JqZWN0KSB7CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01B
VENIX0VSUik7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpAQCAtNjcsOSArNjcsOSBA
QCBKU1ZhbHVlIEpTRGF0YWJhc2VTeW5jOjpjaGFuZ2VWZXJzaW9uKEV4CiAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlIGNyZWF0ZVRyYW5zYWN0aW9uKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncywgRGF0YWJhc2VTeW5jKiBkYXRhYmFzZSwg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgYm9vbCByZWFkT25seSkKK3N0YXRpYyBK
U1ZhbHVlIGNyZWF0ZVRyYW5zYWN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRGF0YWJhc2VTeW5jKiBk
YXRhYmFzZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgYm9vbCByZWFkT25seSkK
IHsKLSAgICBKU09iamVjdCogb2JqZWN0ID0gYXJncy5hdCgwKS5nZXRPYmplY3QoKTsKKyAgICBK
U09iamVjdCogb2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoMCkuZ2V0T2JqZWN0KCk7CiAgICAgaWYg
KCFvYmplY3QpIHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hf
RVJSKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC04NCwxNCArODQsMTQgQEAg
c3RhdGljIEpTVmFsdWUgY3JlYXRlVHJhbnNhY3Rpb24oRXhlY1N0YQogICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlIEpTRGF0YWJhc2VTeW5jOjp0cmFuc2FjdGlvbihFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTRGF0YWJhc2VTeW5j
Ojp0cmFuc2FjdGlvbihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZVRyYW5z
YWN0aW9uKGV4ZWMsIGFyZ3MsIG1faW1wbC5nZXQoKSwgc3RhdGljX2Nhc3Q8SlNET01HbG9iYWxP
YmplY3QqPihnbG9iYWxPYmplY3QoKSksIGZhbHNlKTsKKyAgICByZXR1cm4gY3JlYXRlVHJhbnNh
Y3Rpb24oZXhlYywgbV9pbXBsLmdldCgpLCBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KGdsb2JhbE9iamVjdCgpKSwgZmFsc2UpOwogfQogCi1KU1ZhbHVlIEpTRGF0YWJhc2VTeW5jOjpy
ZWFkVHJhbnNhY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNW
YWx1ZSBKU0RhdGFiYXNlU3luYzo6cmVhZFRyYW5zYWN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsK
LSAgICByZXR1cm4gY3JlYXRlVHJhbnNhY3Rpb24oZXhlYywgYXJncywgbV9pbXBsLmdldCgpLCBz
dGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCgpKSwgdHJ1ZSk7Cisg
ICAgcmV0dXJuIGNyZWF0ZVRyYW5zYWN0aW9uKGV4ZWMsIG1faW1wbC5nZXQoKSwgc3RhdGljX2Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QoKSksIHRydWUpOwogfQogCiB9Cklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGVkaWNhdGVkV29ya2VyQ29udGV4dEN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RlZGljYXRlZFdvcmtlckNv
bnRleHRDdXN0b20uY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNEZWRpY2F0ZWRXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIs
OSArNDIsOSBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LUpTQzo6SlNWYWx1ZSBKU0RlZGljYXRlZFdvcmtlckNvbnRleHQ6OnBvc3RNZXNzYWdlKEpTQzo6
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MpCitKU0M6OkpTVmFsdWUg
SlNEZWRpY2F0ZWRXb3JrZXJDb250ZXh0Ojpwb3N0TWVzc2FnZShKU0M6OkV4ZWNTdGF0ZSogZXhl
YykKIHsKLSAgICByZXR1cm4gaGFuZGxlUG9zdE1lc3NhZ2UoZXhlYywgYXJncywgaW1wbCgpKTsK
KyAgICByZXR1cm4gaGFuZGxlUG9zdE1lc3NhZ2UoZXhlYywgaW1wbCgpKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Rlc2t0b3BOb3Rp
ZmljYXRpb25zQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RGVza3RvcE5vdGlmaWNhdGlvbnNDdXN0b20uY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNEZXNrdG9wTm90aWZpY2F0aW9uc0N1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ1LDE3ICs0NSwxNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUgSlNOb3RpZmljYXRpb25DZW50ZXI6OnJlcXVlc3RQZXJt
aXNzaW9uKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNO
b3RpZmljYXRpb25DZW50ZXI6OnJlcXVlc3RQZXJtaXNzaW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICAvLyBQZXJtaXNzaW9uIHJlcXVlc3QgaXMgb25seSB2YWxpZCBmcm9tIHBhZ2UgY29udGV4
dC4KICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gaW1wbCgpLT5jb250ZXh0
KCk7CiAgICAgaWYgKGNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKQogICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7CiAKLSAgICBpZiAoIWFyZ3MuYXQoMCkuaXNP
YmplY3QoKSkKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkpCiAgICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKLSAgICBQYXNzUmVmUHRyPEpT
Q3VzdG9tVm9pZENhbGxiYWNrPiBjYWxsYmFjayA9IEpTQ3VzdG9tVm9pZENhbGxiYWNrOjpjcmVh
dGUoYXJncy5hdCgwKS5nZXRPYmplY3QoKSwgdG9KU0RPTUdsb2JhbE9iamVjdChzdGF0aWNfY2Fz
dDxEb2N1bWVudCo+KGNvbnRleHQpLCBleGVjKSk7CisgICAgUGFzc1JlZlB0cjxKU0N1c3RvbVZv
aWRDYWxsYmFjaz4gY2FsbGJhY2sgPSBKU0N1c3RvbVZvaWRDYWxsYmFjazo6Y3JlYXRlKGV4ZWMt
PmFyZ3VtZW50KDApLmdldE9iamVjdCgpLCB0b0pTRE9NR2xvYmFsT2JqZWN0KHN0YXRpY19jYXN0
PERvY3VtZW50Kj4oY29udGV4dCksIGV4ZWMpKTsKIAogICAgIGltcGwoKS0+cmVxdWVzdFBlcm1p
c3Npb24oY2FsbGJhY2spOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0Zsb2F0QXJyYXlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNGbG9hdEFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gNjAzNDEpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmxvYXRBcnJheUN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDkgKzQ2LDkgQEAgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMsIAogICAgIHJldHVybiBnZXRET01PYmplY3RXcmFwcGVyPEpTRmxvYXRBcnJheT4oZXhlYywg
Z2xvYmFsT2JqZWN0LCBvYmplY3QpOwogfQogCi1KU0M6OkpTVmFsdWUgSlNGbG9hdEFycmF5Ojpz
ZXQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6QXJnTGlzdCBjb25zdCYgYXJncykKK0pTQzo6
SlNWYWx1ZSBKU0Zsb2F0QXJyYXk6OnNldChKU0M6OkV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBy
ZXR1cm4gc2V0V2ViR0xBcnJheUhlbHBlcihleGVjLCBpbXBsKCksIGFyZ3MsIHRvRmxvYXRBcnJh
eSk7CisgICAgcmV0dXJuIHNldFdlYkdMQXJyYXlIZWxwZXIoZXhlYywgaW1wbCgpLCB0b0Zsb2F0
QXJyYXkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTR2VvbG9jYXRpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNHZW9sb2NhdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0dlb2xvY2F0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTM1LDIwICsxMzUsMjAgQEAgc3RhdGljIFBhc3NSZWZQdHI8UG9zaXRpb25PcHRpb25zPiBj
cmVhdAogICAgIHJldHVybiBvcHRpb25zLnJlbGVhc2UoKTsKIH0KIAotSlNWYWx1ZSBKU0dlb2xv
Y2F0aW9uOjpnZXRDdXJyZW50UG9zaXRpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQorSlNWYWx1ZSBKU0dlb2xvY2F0aW9uOjpnZXRDdXJyZW50UG9zaXRpb24oRXhlY1N0
YXRlKiBleGVjKQogewogICAgIC8vIEFyZ3VtZW50czogUG9zaXRpb25DYWxsYmFjaywgKG9wdGlv
bmFsKVBvc2l0aW9uRXJyb3JDYWxsYmFjaywgKG9wdGlvbmFsKVBvc2l0aW9uT3B0aW9ucwogCi0g
ICAgUmVmUHRyPFBvc2l0aW9uQ2FsbGJhY2s+IHBvc2l0aW9uQ2FsbGJhY2sgPSBjcmVhdGVQb3Np
dGlvbkNhbGxiYWNrKGV4ZWMsIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpKSwgYXJncy5hdCgwKSk7CisgICAgUmVmUHRyPFBvc2l0aW9u
Q2FsbGJhY2s+IHBvc2l0aW9uQ2FsbGJhY2sgPSBjcmVhdGVQb3NpdGlvbkNhbGxiYWNrKGV4ZWMs
IHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpKSwgZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgQVNTRVJUKHBvc2l0aW9uQ2FsbGJh
Y2spOwogCi0gICAgUmVmUHRyPFBvc2l0aW9uRXJyb3JDYWxsYmFjaz4gcG9zaXRpb25FcnJvckNh
bGxiYWNrID0gY3JlYXRlUG9zaXRpb25FcnJvckNhbGxiYWNrKGV4ZWMsIHN0YXRpY19jYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSwgYXJncy5hdCgx
KSk7CisgICAgUmVmUHRyPFBvc2l0aW9uRXJyb3JDYWxsYmFjaz4gcG9zaXRpb25FcnJvckNhbGxi
YWNrID0gY3JlYXRlUG9zaXRpb25FcnJvckNhbGxiYWNrKGV4ZWMsIHN0YXRpY19jYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSwgZXhlYy0+YXJndW1l
bnQoMSkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAKLSAgICBSZWZQdHI8UG9zaXRpb25PcHRpb25zPiBwb3NpdGlvbk9wdGlv
bnMgPSBjcmVhdGVQb3NpdGlvbk9wdGlvbnMoZXhlYywgYXJncy5hdCgyKSk7CisgICAgUmVmUHRy
PFBvc2l0aW9uT3B0aW9ucz4gcG9zaXRpb25PcHRpb25zID0gY3JlYXRlUG9zaXRpb25PcHRpb25z
KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDIpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIEFTU0VSVChwb3NpdGlvbk9wdGlv
bnMpOwpAQCAtMTU3LDIwICsxNTcsMjAgQEAgSlNWYWx1ZSBKU0dlb2xvY2F0aW9uOjpnZXRDdXJy
ZW50UG9zaXRpbwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlIEpTR2Vv
bG9jYXRpb246OndhdGNoUG9zaXRpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQorSlNWYWx1ZSBKU0dlb2xvY2F0aW9uOjp3YXRjaFBvc2l0aW9uKEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICAvLyBBcmd1bWVudHM6IFBvc2l0aW9uQ2FsbGJhY2ssIChvcHRpb25hbClQb3Np
dGlvbkVycm9yQ2FsbGJhY2ssIChvcHRpb25hbClQb3NpdGlvbk9wdGlvbnMKIAotICAgIFJlZlB0
cjxQb3NpdGlvbkNhbGxiYWNrPiBwb3NpdGlvbkNhbGxiYWNrID0gY3JlYXRlUG9zaXRpb25DYWxs
YmFjayhleGVjLCBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKSksIGFyZ3MuYXQoMCkpOworICAgIFJlZlB0cjxQb3NpdGlvbkNhbGxiYWNr
PiBwb3NpdGlvbkNhbGxiYWNrID0gY3JlYXRlUG9zaXRpb25DYWxsYmFjayhleGVjLCBzdGF0aWNf
Y2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIGV4
ZWMtPmFyZ3VtZW50KDApKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIEFTU0VSVChwb3NpdGlvbkNhbGxiYWNrKTsKIAot
ICAgIFJlZlB0cjxQb3NpdGlvbkVycm9yQ2FsbGJhY2s+IHBvc2l0aW9uRXJyb3JDYWxsYmFjayA9
IGNyZWF0ZVBvc2l0aW9uRXJyb3JDYWxsYmFjayhleGVjLCBzdGF0aWNfY2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIGFyZ3MuYXQoMSkpOworICAg
IFJlZlB0cjxQb3NpdGlvbkVycm9yQ2FsbGJhY2s+IHBvc2l0aW9uRXJyb3JDYWxsYmFjayA9IGNy
ZWF0ZVBvc2l0aW9uRXJyb3JDYWxsYmFjayhleGVjLCBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIGV4ZWMtPmFyZ3VtZW50KDEpKTsK
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogCi0gICAgUmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4gcG9zaXRpb25PcHRpb25zID0gY3Jl
YXRlUG9zaXRpb25PcHRpb25zKGV4ZWMsIGFyZ3MuYXQoMikpOworICAgIFJlZlB0cjxQb3NpdGlv
bk9wdGlvbnM+IHBvc2l0aW9uT3B0aW9ucyA9IGNyZWF0ZVBvc2l0aW9uT3B0aW9ucyhleGVjLCBl
eGVjLT5hcmd1bWVudCgyKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBBU1NFUlQocG9zaXRpb25PcHRpb25zKTsKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQWxsQ29sbGVjdGlvbkN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxBbGxDb2xsZWN0aW9uQ3VzdG9t
LmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEFsbENv
bGxlY3Rpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCwyMSArNTgsMjEgQEAgc3Rh
dGljIEpTVmFsdWUgZ2V0TmFtZWRJdGVtcyhFeGVjU3RhdGUqIAogCiAvLyBIVE1MQ29sbGVjdGlv
bnMgYXJlIHN0cmFuZ2Ugb2JqZWN0cywgdGhleSBzdXBwb3J0IGJvdGggZ2V0IGFuZCBjYWxsLAog
Ly8gc28gdGhhdCBkb2N1bWVudC5mb3Jtcy5pdGVtKDApIGFuZCBkb2N1bWVudC5mb3JtcygwKSBi
b3RoIHdvcmsuCi1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxIVE1MQWxsQ29sbGVj
dGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBmdW5jdGlvbiwgSlNWYWx1ZSwgY29uc3Qg
QXJnTGlzdCYgYXJncykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEhUTUxBbGxD
b2xsZWN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBpZiAoYXJncy5zaXplKCkgPCAxKQor
ICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIAogICAgIC8vIERvIG5vdCB1c2UgdGhpc09iaiBoZXJlLiBJdCBjYW4gYmUgdGhl
IEpTSFRNTERvY3VtZW50LCBpbiB0aGUgZG9jdW1lbnQuZm9ybXMoaSkgY2FzZS4KLSAgICBKU0hU
TUxBbGxDb2xsZWN0aW9uKiBqc0NvbGxlY3Rpb24gPSBzdGF0aWNfY2FzdDxKU0hUTUxBbGxDb2xs
ZWN0aW9uKj4oZnVuY3Rpb24pOworICAgIEpTSFRNTEFsbENvbGxlY3Rpb24qIGpzQ29sbGVjdGlv
biA9IHN0YXRpY19jYXN0PEpTSFRNTEFsbENvbGxlY3Rpb24qPihleGVjLT5jYWxsZWUoKSk7CiAg
ICAgSFRNTEFsbENvbGxlY3Rpb24qIGNvbGxlY3Rpb24gPSBzdGF0aWNfY2FzdDxIVE1MQWxsQ29s
bGVjdGlvbio+KGpzQ29sbGVjdGlvbi0+aW1wbCgpKTsKIAogICAgIC8vIEFsc28sIGRvIHdlIG5l
ZWQgdGhlIFR5cGVFcnJvciB0ZXN0IGhlcmUgPwogCi0gICAgaWYgKGFyZ3Muc2l6ZSgpID09IDEp
IHsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID09IDEpIHsKICAgICAgICAgLy8gU3Vw
cG9ydCBmb3IgZG9jdW1lbnQuYWxsKDxpbmRleD4pIGV0Yy4KICAgICAgICAgYm9vbCBvazsKLSAg
ICAgICAgVVN0cmluZyBzdHJpbmcgPSBhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpOworICAgICAg
ICBVU3RyaW5nIHN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpOwogICAg
ICAgICB1bnNpZ25lZCBpbmRleCA9IHN0cmluZy50b1VJbnQzMigmb2ssIGZhbHNlKTsKICAgICAg
ICAgaWYgKG9rKQogICAgICAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywganNDb2xsZWN0aW9uLT5n
bG9iYWxPYmplY3QoKSwgY29sbGVjdGlvbi0+aXRlbShpbmRleCkpOwpAQCAtODMsOCArODMsOCBA
QCBzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxIVE1MQWxsCiAKICAgICAvLyBUaGUg
c2Vjb25kIGFyZywgaWYgc2V0LCBpcyB0aGUgaW5kZXggb2YgdGhlIGl0ZW0gd2Ugd2FudAogICAg
IGJvb2wgb2s7Ci0gICAgVVN0cmluZyBzdHJpbmcgPSBhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMp
OwotICAgIHVuc2lnbmVkIGluZGV4ID0gYXJncy5hdCgxKS50b1N0cmluZyhleGVjKS50b1VJbnQz
Migmb2ssIGZhbHNlKTsKKyAgICBVU3RyaW5nIHN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRv
U3RyaW5nKGV4ZWMpOworICAgIHVuc2lnbmVkIGluZGV4ID0gZXhlYy0+YXJndW1lbnQoMSkudG9T
dHJpbmcoZXhlYykudG9VSW50MzIoJm9rLCBmYWxzZSk7CiAgICAgaWYgKG9rKSB7CiAgICAgICAg
IFN0cmluZyBwc3RyID0gdXN0cmluZ1RvU3RyaW5nKHN0cmluZyk7CiAgICAgICAgIE5vZGUqIG5v
ZGUgPSBjb2xsZWN0aW9uLT5uYW1lZEl0ZW0ocHN0cik7CkBAIC0xMTgsMTggKzExOCwxOCBAQCBK
U1ZhbHVlIEpTSFRNTEFsbENvbGxlY3Rpb246Om5hbWVHZXR0ZXIoCiAgICAgcmV0dXJuIGdldE5h
bWVkSXRlbXMoZXhlYywgdGhpc09iaiwgcHJvcGVydHlOYW1lKTsKIH0KIAotSlNWYWx1ZSBKU0hU
TUxBbGxDb2xsZWN0aW9uOjppdGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJn
cykKK0pTVmFsdWUgSlNIVE1MQWxsQ29sbGVjdGlvbjo6aXRlbShFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgYm9vbCBvazsKLSAgICB1aW50MzJfdCBpbmRleCA9IGFyZ3MuYXQoMCkudG9TdHJpbmco
ZXhlYykudG9VSW50MzIoJm9rLCBmYWxzZSk7CisgICAgdWludDMyX3QgaW5kZXggPSBleGVjLT5h
cmd1bWVudCgwKS50b1N0cmluZyhleGVjKS50b1VJbnQzMigmb2ssIGZhbHNlKTsKICAgICBpZiAo
b2spCiAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbXBsKCktPml0
ZW0oaW5kZXgpKTsKLSAgICByZXR1cm4gZ2V0TmFtZWRJdGVtcyhleGVjLCB0aGlzLCBJZGVudGlm
aWVyKGV4ZWMsIGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpKTsKKyAgICByZXR1cm4gZ2V0TmFt
ZWRJdGVtcyhleGVjLCB0aGlzLCBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRv
U3RyaW5nKGV4ZWMpKSk7CiB9CiAKLUpTVmFsdWUgSlNIVE1MQWxsQ29sbGVjdGlvbjo6bmFtZWRJ
dGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNIVE1M
QWxsQ29sbGVjdGlvbjo6bmFtZWRJdGVtKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4g
Z2V0TmFtZWRJdGVtcyhleGVjLCB0aGlzLCBJZGVudGlmaWVyKGV4ZWMsIGFyZ3MuYXQoMCkudG9T
dHJpbmcoZXhlYykpKTsKKyAgICByZXR1cm4gZ2V0TmFtZWRJdGVtcyhleGVjLCB0aGlzLCBJZGVu
dGlmaWVyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2Fu
dmFzRWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00OSwxNyArNDksMTcgQEAgdm9pZCBKU0hUTUxDYW52YXNFbGVtZW50OjptYXJrQ2hpbGRy
ZW4oTQogICAgIG1hcmtET01PYmplY3RXcmFwcGVyKG1hcmtTdGFjaywgZ2xvYmFsRGF0YSwgY2Fu
dmFzLT5yZW5kZXJpbmdDb250ZXh0KCkpOwogfQogCi1KU1ZhbHVlIEpTSFRNTENhbnZhc0VsZW1l
bnQ6OmdldENvbnRleHQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNW
YWx1ZSBKU0hUTUxDYW52YXNFbGVtZW50OjpnZXRDb250ZXh0KEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gc3RhdGljX2Nhc3Q8SFRNTENhbnZhc0Vs
ZW1lbnQqPihpbXBsKCkpOwotICAgIGNvbnN0IFVTdHJpbmcmIGNvbnRleHRJZCA9IGFyZ3MuYXQo
MCkudG9TdHJpbmcoZXhlYyk7CisgICAgY29uc3QgVVN0cmluZyYgY29udGV4dElkID0gZXhlYy0+
YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CiAgICAgUmVmUHRyPENhbnZhc0NvbnRleHRBdHRy
aWJ1dGVzPiBhdHRyczsKICNpZiBFTkFCTEUoM0RfQ0FOVkFTKQogICAgIGlmIChjb250ZXh0SWQg
PT0gImV4cGVyaW1lbnRhbC13ZWJnbCIgfHwgY29udGV4dElkID09ICJ3ZWJraXQtM2QiKSB7CiAg
ICAgICAgIGF0dHJzID0gV2ViR0xDb250ZXh0QXR0cmlidXRlczo6Y3JlYXRlKCk7CiAgICAgICAg
IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMqIHdlYkdMQXR0cnMgPSBzdGF0aWNfY2FzdDxXZWJHTENv
bnRleHRBdHRyaWJ1dGVzKj4oYXR0cnMuZ2V0KCkpOwotICAgICAgICBpZiAoYXJncy5zaXplKCkg
PiAxICYmIGFyZ3MuYXQoMSkuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgSlNPYmplY3QqIGpz
QXR0cnMgPSBhcmdzLmF0KDEpLmdldE9iamVjdCgpOworICAgICAgICBpZiAoZXhlYy0+YXJndW1l
bnRDb3VudCgpID4gMSAmJiBleGVjLT5hcmd1bWVudCgxKS5pc09iamVjdCgpKSB7CisgICAgICAg
ICAgICBKU09iamVjdCoganNBdHRycyA9IGV4ZWMtPmFyZ3VtZW50KDEpLmdldE9iamVjdCgpOwog
ICAgICAgICAgICAgSWRlbnRpZmllciBhbHBoYShleGVjLCAiYWxwaGEiKTsKICAgICAgICAgICAg
IGlmIChqc0F0dHJzLT5oYXNQcm9wZXJ0eShleGVjLCBhbHBoYSkpCiAgICAgICAgICAgICAgICAg
d2ViR0xBdHRycy0+c2V0QWxwaGEoanNBdHRycy0+Z2V0KGV4ZWMsIGFscGhhKS50b0Jvb2xlYW4o
ZXhlYykpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDb2xsZWN0aW9uQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENvbGxlY3Rpb25D
dXN0b20uY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1M
Q29sbGVjdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDIxICs1NSwyMSBAQCBz
dGF0aWMgSlNWYWx1ZSBnZXROYW1lZEl0ZW1zKEV4ZWNTdGF0ZSogCiAKIC8vIEhUTUxDb2xsZWN0
aW9ucyBhcmUgc3RyYW5nZSBvYmplY3RzLCB0aGV5IHN1cHBvcnQgYm90aCBnZXQgYW5kIGNhbGws
CiAvLyBzbyB0aGF0IGRvY3VtZW50LmZvcm1zLml0ZW0oMCkgYW5kIGRvY3VtZW50LmZvcm1zKDAp
IGJvdGggd29yay4KLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEhUTUxDb2xsZWN0
aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9uLCBKU1ZhbHVlLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSFRNTENvbGxl
Y3Rpb24oRXhlY1N0YXRlKiBleGVjKQogewotICAgIGlmIChhcmdzLnNpemUoKSA8IDEpCisgICAg
aWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogCiAgICAgLy8gRG8gbm90IHVzZSB0aGlzT2JqIGhlcmUuIEl0IGNhbiBiZSB0aGUgSlNI
VE1MRG9jdW1lbnQsIGluIHRoZSBkb2N1bWVudC5mb3JtcyhpKSBjYXNlLgotICAgIEpTSFRNTENv
bGxlY3Rpb24qIGpzQ29sbGVjdGlvbiA9IHN0YXRpY19jYXN0PEpTSFRNTENvbGxlY3Rpb24qPihm
dW5jdGlvbik7CisgICAgSlNIVE1MQ29sbGVjdGlvbioganNDb2xsZWN0aW9uID0gc3RhdGljX2Nh
c3Q8SlNIVE1MQ29sbGVjdGlvbio+KGV4ZWMtPmNhbGxlZSgpKTsKICAgICBIVE1MQ29sbGVjdGlv
biogY29sbGVjdGlvbiA9IGpzQ29sbGVjdGlvbi0+aW1wbCgpOwogCiAgICAgLy8gQWxzbywgZG8g
d2UgbmVlZCB0aGUgVHlwZUVycm9yIHRlc3QgaGVyZSA/CiAKLSAgICBpZiAoYXJncy5zaXplKCkg
PT0gMSkgeworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPT0gMSkgewogICAgICAgICAv
LyBTdXBwb3J0IGZvciBkb2N1bWVudC5hbGwoPGluZGV4PikgZXRjLgogICAgICAgICBib29sIG9r
OwotICAgICAgICBVU3RyaW5nIHN0cmluZyA9IGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyk7Cisg
ICAgICAgIFVTdHJpbmcgc3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7
CiAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gc3RyaW5nLnRvVUludDMyKCZvaywgZmFsc2UpOwog
ICAgICAgICBpZiAob2spCiAgICAgICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBqc0NvbGxlY3Rp
b24tPmdsb2JhbE9iamVjdCgpLCBjb2xsZWN0aW9uLT5pdGVtKGluZGV4KSk7CkBAIC04MCw4ICs4
MCw4IEBAIHN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEhUTUxDb2wKIAogICAgIC8v
IFRoZSBzZWNvbmQgYXJnLCBpZiBzZXQsIGlzIHRoZSBpbmRleCBvZiB0aGUgaXRlbSB3ZSB3YW50
CiAgICAgYm9vbCBvazsKLSAgICBVU3RyaW5nIHN0cmluZyA9IGFyZ3MuYXQoMCkudG9TdHJpbmco
ZXhlYyk7Ci0gICAgdW5zaWduZWQgaW5kZXggPSBhcmdzLmF0KDEpLnRvU3RyaW5nKGV4ZWMpLnRv
VUludDMyKCZvaywgZmFsc2UpOworICAgIFVTdHJpbmcgc3RyaW5nID0gZXhlYy0+YXJndW1lbnQo
MCkudG9TdHJpbmcoZXhlYyk7CisgICAgdW5zaWduZWQgaW5kZXggPSBleGVjLT5hcmd1bWVudCgx
KS50b1N0cmluZyhleGVjKS50b1VJbnQzMigmb2ssIGZhbHNlKTsKICAgICBpZiAob2spIHsKICAg
ICAgICAgU3RyaW5nIHBzdHIgPSB1c3RyaW5nVG9TdHJpbmcoc3RyaW5nKTsKICAgICAgICAgTm9k
ZSogbm9kZSA9IGNvbGxlY3Rpb24tPm5hbWVkSXRlbShwc3RyKTsKQEAgLTExNSwxOCArMTE1LDE4
IEBAIEpTVmFsdWUgSlNIVE1MQ29sbGVjdGlvbjo6bmFtZUdldHRlcihFeGUKICAgICByZXR1cm4g
Z2V0TmFtZWRJdGVtcyhleGVjLCB0aGlzT2JqLCBwcm9wZXJ0eU5hbWUpOwogfQogCi1KU1ZhbHVl
IEpTSFRNTENvbGxlY3Rpb246Oml0ZW0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQorSlNWYWx1ZSBKU0hUTUxDb2xsZWN0aW9uOjppdGVtKEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBib29sIG9rOwotICAgIHVpbnQzMl90IGluZGV4ID0gYXJncy5hdCgwKS50b1N0cmluZyhl
eGVjKS50b1VJbnQzMigmb2ssIGZhbHNlKTsKKyAgICB1aW50MzJfdCBpbmRleCA9IGV4ZWMtPmFy
Z3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLnRvVUludDMyKCZvaywgZmFsc2UpOwogICAgIGlmIChv
aykKICAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGltcGwoKS0+aXRl
bShpbmRleCkpOwotICAgIHJldHVybiBnZXROYW1lZEl0ZW1zKGV4ZWMsIHRoaXMsIElkZW50aWZp
ZXIoZXhlYywgYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSkpOworICAgIHJldHVybiBnZXROYW1l
ZEl0ZW1zKGV4ZWMsIHRoaXMsIElkZW50aWZpZXIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9T
dHJpbmcoZXhlYykpKTsKIH0KIAotSlNWYWx1ZSBKU0hUTUxDb2xsZWN0aW9uOjpuYW1lZEl0ZW0o
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0hUTUxDb2xs
ZWN0aW9uOjpuYW1lZEl0ZW0oRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBnZXROYW1l
ZEl0ZW1zKGV4ZWMsIHRoaXMsIElkZW50aWZpZXIoZXhlYywgYXJncy5hdCgwKS50b1N0cmluZyhl
eGVjKSkpOworICAgIHJldHVybiBnZXROYW1lZEl0ZW1zKGV4ZWMsIHRoaXMsIElkZW50aWZpZXIo
ZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpKTsKIH0KIAogSlNWYWx1ZSB0
b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSFRN
TENvbGxlY3Rpb24qIGNvbGxlY3Rpb24pCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRN
TERvY3VtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SFRNTERvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDEw
ICsxMDAsMTAgQEAgdm9pZCBKU0hUTUxEb2N1bWVudDo6c2V0QWxsKEV4ZWNTdGF0ZSogZQogCiAv
LyBDdXN0b20gZnVuY3Rpb25zCiAKLUpTVmFsdWUgSlNIVE1MRG9jdW1lbnQ6Om9wZW4oRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0hUTUxEb2N1bWVudDo6
b3BlbihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgLy8gRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBv
dGhlciBicm93c2VycywgcGFzcyBvcGVuIGNhbGxzIHdpdGggbW9yZSB0aGFuIDIgcGFyYW1ldGVy
cyB0byB0aGUgd2luZG93LgotICAgIGlmIChhcmdzLnNpemUoKSA+IDIpIHsKKyAgICBpZiAoZXhl
Yy0+YXJndW1lbnRDb3VudCgpID4gMikgewogICAgICAgICBGcmFtZSogZnJhbWUgPSBzdGF0aWNf
Y2FzdDxIVE1MRG9jdW1lbnQqPihpbXBsKCkpLT5mcmFtZSgpOwogICAgICAgICBpZiAoZnJhbWUp
IHsKICAgICAgICAgICAgIEpTRE9NV2luZG93U2hlbGwqIHdyYXBwZXIgPSB0b0pTRE9NV2luZG93
U2hlbGwoZnJhbWUsIGN1cnJlbnRXb3JsZChleGVjKSk7CkBAIC0xMTMsNyArMTEzLDcgQEAgSlNW
YWx1ZSBKU0hUTUxEb2N1bWVudDo6b3BlbihFeGVjU3RhdGUqIAogICAgICAgICAgICAgICAgIENh
bGxUeXBlIGNhbGxUeXBlID0gZnVuY3Rpb24uZ2V0Q2FsbERhdGEoY2FsbERhdGEpOwogICAgICAg
ICAgICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIEpTQzo6Y2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCB3cmFw
cGVyLCBhcmdzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNDOjpjYWxsKGV4ZWMsIGZ1bmN0
aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHdyYXBwZXIsIEFyZ0xpc3QoZXhlYykpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpAQCAtMTMw
LDIwICsxMzAsMjAgQEAgSlNWYWx1ZSBKU0hUTUxEb2N1bWVudDo6b3BlbihFeGVjU3RhdGUqIAog
CiBlbnVtIE5ld2xpbmVSZXF1aXJlbWVudCB7IERvTm90QWRkTmV3bGluZSwgRG9BZGROZXdsaW5l
IH07CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkb2N1bWVudFdyaXRlKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgQXJnTGlzdCYgYXJncywgSFRNTERvY3VtZW50KiBkb2N1bWVudCwgTmV3bGluZVJlcXVp
cmVtZW50IGFkZE5ld2xpbmUpCitzdGF0aWMgaW5saW5lIHZvaWQgZG9jdW1lbnRXcml0ZShFeGVj
U3RhdGUqIGV4ZWMsIEhUTUxEb2N1bWVudCogZG9jdW1lbnQsIE5ld2xpbmVSZXF1aXJlbWVudCBh
ZGROZXdsaW5lKQogewogICAgIC8vIERPTSBvbmx5IHNwZWNpZmllcyBzaW5nbGUgc3RyaW5nIGFy
Z3VtZW50LCBidXQgYnJvd3NlcnMgYWxsb3cgbXVsdGlwbGUgb3Igbm8gYXJndW1lbnRzLgogCi0g
ICAgc2l6ZV90IHNpemUgPSBhcmdzLnNpemUoKTsKKyAgICBzaXplX3Qgc2l6ZSA9IGV4ZWMtPmFy
Z3VtZW50Q291bnQoKTsKIAotICAgIFVTdHJpbmcgZmlyc3RTdHJpbmcgPSBhcmdzLmF0KDApLnRv
U3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgZmlyc3RTdHJpbmcgPSBleGVjLT5hcmd1bWVudCgw
KS50b1N0cmluZyhleGVjKTsKICAgICBTZWdtZW50ZWRTdHJpbmcgc2VnbWVudGVkU3RyaW5nID0g
dXN0cmluZ1RvU3RyaW5nKGZpcnN0U3RyaW5nKTsKICAgICBpZiAoc2l6ZSAhPSAxKSB7CiAgICAg
ICAgIGlmICghc2l6ZSkKICAgICAgICAgICAgIHNlZ21lbnRlZFN0cmluZy5jbGVhcigpOwogICAg
ICAgICBlbHNlIHsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgc2l6ZTsgKytp
KSB7Ci0gICAgICAgICAgICAgICAgVVN0cmluZyBzdWJzZXF1ZW50U3RyaW5nID0gYXJncy5hdChp
KS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgICAgICAgICBVU3RyaW5nIHN1YnNlcXVlbnRTdHJp
bmcgPSBleGVjLT5hcmd1bWVudChpKS50b1N0cmluZyhleGVjKTsKICAgICAgICAgICAgICAgICBz
ZWdtZW50ZWRTdHJpbmcuYXBwZW5kKFNlZ21lbnRlZFN0cmluZyh1c3RyaW5nVG9TdHJpbmcoc3Vi
c2VxdWVudFN0cmluZykpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTU1LDE1ICsx
NTUsMTUgQEAgc3RhdGljIGlubGluZSB2b2lkIGRvY3VtZW50V3JpdGUoRXhlY1N0YQogICAgIGRv
Y3VtZW50LT53cml0ZShzZWdtZW50ZWRTdHJpbmcsIGFjdGl2ZURvY3VtZW50KTsKIH0KIAotSlNW
YWx1ZSBKU0hUTUxEb2N1bWVudDo6d3JpdGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQorSlNWYWx1ZSBKU0hUTUxEb2N1bWVudDo6d3JpdGUoRXhlY1N0YXRlKiBleGVjKQog
ewotICAgIGRvY3VtZW50V3JpdGUoZXhlYywgYXJncywgc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50
Kj4oaW1wbCgpKSwgRG9Ob3RBZGROZXdsaW5lKTsKKyAgICBkb2N1bWVudFdyaXRlKGV4ZWMsIHN0
YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+KGltcGwoKSksIERvTm90QWRkTmV3bGluZSk7CiAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNIVE1MRG9jdW1lbnQ6OndyaXRl
bG4oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0hUTUxE
b2N1bWVudDo6d3JpdGVsbihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgZG9jdW1lbnRXcml0ZShl
eGVjLCBhcmdzLCBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihpbXBsKCkpLCBEb0FkZE5ld2xp
bmUpOworICAgIGRvY3VtZW50V3JpdGUoZXhlYywgc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4o
aW1wbCgpKSwgRG9BZGROZXdsaW5lKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIApJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxJbnB1dEVsZW1lbnRDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MSW5wdXRFbGVtZW50Q3VzdG9t
LmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTElucHV0
RWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMywxNCArMTAzLDE0IEBAIHZv
aWQgSlNIVE1MSW5wdXRFbGVtZW50OjpzZXRTZWxlY3Rpb25FbmQKICAgICBpbnB1dC0+c2V0U2Vs
ZWN0aW9uRW5kKHZhbHVlLnRvSW50MzIoZXhlYykpOwogfQogCi1KU1ZhbHVlIEpTSFRNTElucHV0
RWxlbWVudDo6c2V0U2VsZWN0aW9uUmFuZ2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQorSlNWYWx1ZSBKU0hUTUxJbnB1dEVsZW1lbnQ6OnNldFNlbGVjdGlvblJhbmdlKEV4
ZWNTdGF0ZSogZXhlYykKIHsKICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19j
YXN0PEhUTUxJbnB1dEVsZW1lbnQqPihpbXBsKCkpOwogICAgIGlmICghaW5wdXQtPmNhbkhhdmVT
ZWxlY3Rpb24oKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsK
IAotICAgIGludCBzdGFydCA9IGFyZ3MuYXQoMCkudG9JbnQzMihleGVjKTsKLSAgICBpbnQgZW5k
ID0gYXJncy5hdCgxKS50b0ludDMyKGV4ZWMpOworICAgIGludCBzdGFydCA9IGV4ZWMtPmFyZ3Vt
ZW50KDApLnRvSW50MzIoZXhlYyk7CisgICAgaW50IGVuZCA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRv
SW50MzIoZXhlYyk7CiAKICAgICBpbnB1dC0+c2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIGVuZCk7
CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SFRNTE9wdGlvbnNDb2xsZWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSFRNTE9wdGlvbnNDb2xsZWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gNjAz
NDEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTE9wdGlvbnNDb2xsZWN0aW9uQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsMTYgKzY3LDE2IEBAIHZvaWQgSlNIVE1MT3B0aW9u
c0NvbGxlY3Rpb246OmluZGV4U2V0dGUKICAgICBzZWxlY3RJbmRleFNldHRlcihiYXNlLCBleGVj
LCBpbmRleCwgdmFsdWUpOwogfQogCi1KU1ZhbHVlIEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uOjph
ZGQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0hUTUxP
cHRpb25zQ29sbGVjdGlvbjo6YWRkKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBIVE1MT3B0aW9u
c0NvbGxlY3Rpb24qIGltcCA9IHN0YXRpY19jYXN0PEhUTUxPcHRpb25zQ29sbGVjdGlvbio+KGlt
cGwoKSk7Ci0gICAgSFRNTE9wdGlvbkVsZW1lbnQqIG9wdGlvbiA9IHRvSFRNTE9wdGlvbkVsZW1l
bnQoYXJncy5hdCgwKSk7CisgICAgSFRNTE9wdGlvbkVsZW1lbnQqIG9wdGlvbiA9IHRvSFRNTE9w
dGlvbkVsZW1lbnQoZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwotICAgIGlmIChhcmdzLnNpemUoKSA8IDIpCisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQo
KSA8IDIpCiAgICAgICAgIGltcC0+YWRkKG9wdGlvbiwgZWMpOwogICAgIGVsc2UgewogICAgICAg
ICBib29sIG9rOwotICAgICAgICBpbnQgaW5kZXggPSBhcmdzLmF0KDEpLnRvSW50MzIoZXhlYywg
b2spOworICAgICAgICBpbnQgaW5kZXggPSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMs
IG9rKTsKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIGlmICghb2spCkBAIC04OCwxMSArODgsMTEgQEAg
SlNWYWx1ZSBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbjo6YWRkKEV4ZQogICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlIEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uOjpyZW1vdmUo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0hUTUxPcHRp
b25zQ29sbGVjdGlvbjo6cmVtb3ZlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBIVE1MT3B0aW9u
c0NvbGxlY3Rpb24qIGltcCA9IHN0YXRpY19jYXN0PEhUTUxPcHRpb25zQ29sbGVjdGlvbio+KGlt
cGwoKSk7CiAgICAgSlNIVE1MU2VsZWN0RWxlbWVudCogYmFzZSA9IHN0YXRpY19jYXN0PEpTSFRN
TFNlbGVjdEVsZW1lbnQqPihhc09iamVjdCh0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbXAt
PmJhc2UoKSkpKTsKLSAgICByZXR1cm4gYmFzZS0+cmVtb3ZlKGV4ZWMsIGFyZ3MpOworICAgIHJl
dHVybiBiYXNlLT5yZW1vdmUoZXhlYyk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0hUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNjAzNDEp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiwxNiArMzIsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdXNp
bmcgbmFtZXNwYWNlIEpTQzsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLUpTVmFsdWUg
SlNIVE1MU2VsZWN0RWxlbWVudDo6cmVtb3ZlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlz
dCYgYXJncykKK0pTVmFsdWUgSlNIVE1MU2VsZWN0RWxlbWVudDo6cmVtb3ZlKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBIVE1MU2VsZWN0RWxlbWVudCYgc2VsZWN0ID0gKnN0YXRpY19jYXN0PEhU
TUxTZWxlY3RFbGVtZW50Kj4oaW1wbCgpKTsKIAogICAgIC8vIHdlIHN1cHBvcnQgYm90aCBvcHRp
b25zIGluZGV4IGFuZCBvcHRpb25zIG9iamVjdHMKLSAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9
IHRvSFRNTEVsZW1lbnQoYXJncy5hdCgwKSk7CisgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0
b0hUTUxFbGVtZW50KGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICBpZiAoZWxlbWVudCAmJiBlbGVt
ZW50LT5oYXNUYWdOYW1lKG9wdGlvblRhZykpCiAgICAgICAgIHNlbGVjdC5yZW1vdmUoc3RhdGlj
X2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnQqPihlbGVtZW50KS0+aW5kZXgoKSk7CiAgICAgZWxzZQot
ICAgICAgICBzZWxlY3QucmVtb3ZlKGFyZ3MuYXQoMCkudG9JbnQzMihleGVjKSk7CisgICAgICAg
IHNlbGVjdC5yZW1vdmUoZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjKSk7CiAKICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0
b3J5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9y
eUN1c3RvbS5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hp
c3RvcnlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjIsMTkgKzE2MiwxOSBAQCB2b2lk
IEpTSGlzdG9yeTo6Z2V0T3duUHJvcGVydHlOYW1lcyhFeGVjCiAgICAgQmFzZTo6Z2V0T3duUHJv
cGVydHlOYW1lcyhleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAotSlNWYWx1ZSBKU0hp
c3Rvcnk6OnB1c2hTdGF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitK
U1ZhbHVlIEpTSGlzdG9yeTo6cHVzaFN0YXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBoaXN0b3J5U3RhdGUgPSBTZXJpYWxpemVkU2NyaXB0
VmFsdWU6OmNyZWF0ZShleGVjLCBhcmdzLmF0KDApKTsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiBoaXN0b3J5U3RhdGUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShl
eGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIFN0cmluZyB0aXRsZSA9IHZhbHVl
VG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgYXJncy5hdCgxKSk7CisgICAg
U3RyaW5nIHRpdGxlID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhleGVj
LCBleGVjLT5hcmd1bWVudCgxKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgCiAgICAgU3RyaW5nIHVybDsKLSAg
ICBpZiAoYXJncy5zaXplKCkgPiAyKSB7Ci0gICAgICAgIHVybCA9IHZhbHVlVG9TdHJpbmdXaXRo
VW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgYXJncy5hdCgyKSk7CisgICAgaWYgKGV4ZWMtPmFy
Z3VtZW50Q291bnQoKSA+IDIpIHsKKyAgICAgICAgdXJsID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRl
ZmluZWRPck51bGxDaGVjayhleGVjLCBleGVjLT5hcmd1bWVudCgyKSk7CiAgICAgICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
ICAgIH0KQEAgLTE4NiwxOSArMTg2LDE5IEBAIEpTVmFsdWUgSlNIaXN0b3J5OjpwdXNoU3RhdGUo
RXhlY1N0YXRlKiAKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBKU0hp
c3Rvcnk6OnJlcGxhY2VTdGF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CitKU1ZhbHVlIEpTSGlzdG9yeTo6cmVwbGFjZVN0YXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAg
ICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBoaXN0b3J5U3RhdGUgPSBTZXJpYWxpemVk
U2NyaXB0VmFsdWU6OmNyZWF0ZShleGVjLCBhcmdzLmF0KDApKTsKKyAgICBSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiBoaXN0b3J5U3RhdGUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNy
ZWF0ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIFN0cmluZyB0aXRsZSA9
IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgYXJncy5hdCgxKSk7
CisgICAgU3RyaW5nIHRpdGxlID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVj
ayhleGVjLCBleGVjLT5hcmd1bWVudCgxKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgCiAgICAgU3RyaW5nIHVy
bDsKLSAgICBpZiAoYXJncy5zaXplKCkgPiAyKSB7Ci0gICAgICAgIHVybCA9IHZhbHVlVG9TdHJp
bmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgYXJncy5hdCgyKSk7CisgICAgaWYgKGV4
ZWMtPmFyZ3VtZW50Q291bnQoKSA+IDIpIHsKKyAgICAgICAgdXJsID0gdmFsdWVUb1N0cmluZ1dp
dGhVbmRlZmluZWRPck51bGxDaGVjayhleGVjLCBleGVjLT5hcmd1bWVudCgyKSk7CiAgICAgICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhv
c3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3Rl
ZFNjcmlwdEhvc3RDdXN0b20uY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDQsMTYgKzEwNCwxNiBAQCBTY3JpcHRPYmplY3QgSW5qZWN0ZWRTY3JpcHRIb3N0OjpjcmVhdGVJ
CiB9CiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCi1KU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0
OjpkYXRhYmFzZUZvcklkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pT
VmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OmRhdGFiYXNlRm9ySWQoRXhlY1N0YXRlKiBleGVj
KQogewotICAgIGlmIChhcmdzLnNpemUoKSA8IDEpCisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291
bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgSW5zcGVjdG9y
Q29udHJvbGxlciogaWMgPSBpbXBsKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKTsKICAgICBpZiAo
IWljKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIERhdGFiYXNlKiBkYXRh
YmFzZSA9IGltcGwoKS0+ZGF0YWJhc2VGb3JJZChhcmdzLmF0KDApLnRvSW50MzIoZXhlYykpOwor
ICAgIERhdGFiYXNlKiBkYXRhYmFzZSA9IGltcGwoKS0+ZGF0YWJhc2VGb3JJZChleGVjLT5hcmd1
bWVudCgwKS50b0ludDMyKGV4ZWMpKTsKICAgICBpZiAoIWRhdGFiYXNlKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKICAgICByZXR1cm4gdG9KUyhleGVjLCBkYXRhYmFzZSk7CkBAIC0x
MjEsNyArMTIxLDcgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6ZGF0YWJhc2VGbwog
I2VuZGlmCiAKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLUpTVmFsdWUgSlNJbmpl
Y3RlZFNjcmlwdEhvc3Q6OmN1cnJlbnRDYWxsRnJhbWUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBB
cmdMaXN0JikKK0pTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OmN1cnJlbnRDYWxsRnJhbWUo
RXhlY1N0YXRlKiBleGVjKQogewogICAgIEphdmFTY3JpcHRDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5jdXJyZW50Q2FsbEZyYW1lKCk7CiAgICAgaWYg
KCFjYWxsRnJhbWUgfHwgIWNhbGxGcmFtZS0+aXNWYWxpZCgpKQpAQCAtMTMyLDEyICsxMzIsMTIg
QEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6Y3VycmVudENhbAogfQogI2VuZGlmCiAK
LUpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6Om5vZGVGb3JJZChFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0Ojpub2Rl
Rm9ySWQoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGlmIChhcmdzLnNpemUoKSA8IDEpCisgICAg
aWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogCi0gICAgTm9kZSogbm9kZSA9IGltcGwoKS0+bm9kZUZvcklkKGFyZ3MuYXQoMCkudG9J
bnQzMihleGVjKSk7CisgICAgTm9kZSogbm9kZSA9IGltcGwoKS0+bm9kZUZvcklkKGV4ZWMtPmFy
Z3VtZW50KDApLnRvSW50MzIoZXhlYykpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAKQEAgLTE0OSwyNyArMTQ5LDI3IEBAIEpTVmFsdWUgSlNJbmplY3Rl
ZFNjcmlwdEhvc3Q6Om5vZGVGb3JJZCgKICAgICByZXR1cm4gdG9KUyhleGVjLCBub2RlKTsKIH0K
IAotSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTSW5qZWN0ZWRT
Y3JpcHRIb3N0OjpwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAg
ICBpZiAoYXJncy5zaXplKCkgPCAzKQorICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAz
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIE5vZGUqIG5vZGUgPSB0b05v
ZGUoYXJncy5hdCgwKSk7CisgICAgTm9kZSogbm9kZSA9IHRvTm9kZShleGVjLT5hcmd1bWVudCgw
KSk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAg
IGJvb2wgd2l0aENoaWxkcmVuID0gYXJncy5hdCgxKS50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgYm9v
bCBzZWxlY3RJblVJID0gYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYyk7CisgICAgYm9vbCB3aXRo
Q2hpbGRyZW4gPSBleGVjLT5hcmd1bWVudCgxKS50b0Jvb2xlYW4oZXhlYyk7CisgICAgYm9vbCBz
ZWxlY3RJblVJID0gZXhlYy0+YXJndW1lbnQoMikudG9Cb29sZWFuKGV4ZWMpOwogICAgIHJldHVy
biBqc051bWJlcihleGVjLCBpbXBsKCktPnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQobm9kZSwgd2l0
aENoaWxkcmVuLCBzZWxlY3RJblVJKSk7CiB9CiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCi1KU1Zh
bHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpzZWxlY3REYXRhYmFzZShFeGVjU3RhdGUqLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6c2VsZWN0RGF0
YWJhc2UoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGlmIChhcmdzLnNpemUoKSA8IDEpCisgICAg
aWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogCi0gICAgRGF0YWJhc2UqIGRhdGFiYXNlID0gdG9EYXRhYmFzZShhcmdzLmF0KDApKTsK
KyAgICBEYXRhYmFzZSogZGF0YWJhc2UgPSB0b0RhdGFiYXNlKGV4ZWMtPmFyZ3VtZW50KDApKTsK
ICAgICBpZiAoZGF0YWJhc2UpCiAgICAgICAgIGltcGwoKS0+c2VsZWN0RGF0YWJhc2UoZGF0YWJh
c2UpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpAQCAtMTc3LDM0ICsxNzcsMzQgQEAgSlNW
YWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6c2VsZWN0RGF0YQogI2VuZGlmCiAKICNpZiBFTkFC
TEUoRE9NX1NUT1JBR0UpCi1KU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpzZWxlY3RET01T
dG9yYWdlKEV4ZWNTdGF0ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTSW5qZWN0
ZWRTY3JpcHRIb3N0OjpzZWxlY3RET01TdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBp
ZiAoYXJncy5zaXplKCkgPCAxKQorICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBp
YyA9IGltcGwoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpOwogICAgIGlmICghaWMpCiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgU3RvcmFnZSogc3RvcmFnZSA9IHRvU3RvcmFn
ZShhcmdzLmF0KDApKTsKKyAgICBTdG9yYWdlKiBzdG9yYWdlID0gdG9TdG9yYWdlKGV4ZWMtPmFy
Z3VtZW50KDApKTsKICAgICBpZiAoc3RvcmFnZSkKICAgICAgICAgaW1wbCgpLT5zZWxlY3RET01T
dG9yYWdlKHN0b3JhZ2UpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogI2VuZGlmCiAK
LUpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OnJlcG9ydERpZERpc3BhdGNoT25JbmplY3Rl
ZFNjcmlwdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpT
SW5qZWN0ZWRTY3JpcHRIb3N0OjpyZXBvcnREaWREaXNwYXRjaE9uSW5qZWN0ZWRTY3JpcHQoRXhl
Y1N0YXRlKiBleGVjKQogewotICAgIGlmIChhcmdzLnNpemUoKSA8IDMpCisgICAgaWYgKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSA8IDMpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAg
IAotICAgIGlmICghYXJncy5hdCgwKS5pc0ludDMyKCkpCisgICAgaWYgKCFleGVjLT5hcmd1bWVu
dCgwKS5pc0ludDMyKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIGludCBj
YWxsSWQgPSBhcmdzLmF0KDApLmFzSW50MzIoKTsKKyAgICBpbnQgY2FsbElkID0gZXhlYy0+YXJn
dW1lbnQoMCkuYXNJbnQzMigpOwogICAgIAotICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IHJlc3VsdChTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShleGVjLCBhcmdzLmF0KDEp
KSk7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcmVzdWx0KFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDEpKSk7CiAgICAgCiAgICAg
Ym9vbCBpc0V4Y2VwdGlvbjsKLSAgICBpZiAoIWFyZ3MuYXQoMikuZ2V0Qm9vbGVhbihpc0V4Y2Vw
dGlvbikpCisgICAgaWYgKCFleGVjLT5hcmd1bWVudCgyKS5nZXRCb29sZWFuKGlzRXhjZXB0aW9u
KSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgaW1wbCgpLT5yZXBvcnREaWRE
aXNwYXRjaE9uSW5qZWN0ZWRTY3JpcHQoY2FsbElkLCByZXN1bHQuZ2V0KCksIGlzRXhjZXB0aW9u
KTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMv
SlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwCShyZXZpc2lvbiA2
MDM0MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSBKU0luc3BlY3RvckZyb250ZW5k
SG9zdDo6cGxhdGZvcm0oRXhlY1N0YXRlKiBleGVjU3RhdGUsIGNvbnN0IEFyZ0xpc3QmKQorSlNW
YWx1ZSBKU0luc3BlY3RvckZyb250ZW5kSG9zdDo6cGxhdGZvcm0oRXhlY1N0YXRlKiBleGVjU3Rh
dGUpCiB7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3Qg
U3RyaW5nLCBwbGF0Zm9ybSwgKCJtYWMiKSk7CkBAIC02Myw3ICs2Myw3IEBAIEpTVmFsdWUgSlNJ
bnNwZWN0b3JGcm9udGVuZEhvc3Q6OnBsYXRmb3IKICAgICByZXR1cm4ganNTdHJpbmcoZXhlY1N0
YXRlLCBwbGF0Zm9ybSk7CiB9CiAKLUpTVmFsdWUgSlNJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnBv
cnQoRXhlY1N0YXRlKiBleGVjU3RhdGUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZSBKU0luc3Bl
Y3RvckZyb250ZW5kSG9zdDo6cG9ydChFeGVjU3RhdGUqIGV4ZWNTdGF0ZSkKIHsKICNpZiBQTEFU
Rk9STShRVCkKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgcG9ydCwgKCJx
dCIpKTsKQEAgLTc3LDMxICs3NywyOSBAQCBKU1ZhbHVlIEpTSW5zcGVjdG9yRnJvbnRlbmRIb3N0
Ojpwb3J0KEV4CiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWNTdGF0ZSwgcG9ydCk7CiB9CiAKLUpT
VmFsdWUgSlNJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDb250ZXh0TWVudShFeGVjU3RhdGUq
IGV4ZWNTdGF0ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNJbnNwZWN0b3JGcm9u
dGVuZEhvc3Q6OnNob3dDb250ZXh0TWVudShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgaWYgKGFy
Z3Muc2l6ZSgpIDwgMikKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMikKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCi0gICAg
RXZlbnQqIGV2ZW50ID0gdG9FdmVudChhcmdzLmF0KDApKTsKKyAgICBFdmVudCogZXZlbnQgPSB0
b0V2ZW50KGV4ZWMtPmFyZ3VtZW50KDApKTsKIAotICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJh
eShhcmdzLmF0KDEpKTsKKyAgICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkoZXhlYy0+YXJndW1l
bnQoMSkpOwogICAgIFZlY3RvcjxDb250ZXh0TWVudUl0ZW0qPiBpdGVtczsKIAogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgYXJyYXktPmxlbmd0aCgpOyArK2kpIHsKICAgICAgICAgSlNPYmpl
Y3QqIGl0ZW0gPSBhc09iamVjdChhcnJheS0+Z2V0SW5kZXgoaSkpOwotICAgICAgICBKU1ZhbHVl
IGxhYmVsID0gaXRlbS0+Z2V0KGV4ZWNTdGF0ZSwgSWRlbnRpZmllcihleGVjU3RhdGUsICJsYWJl
bCIpKTsKLSAgICAgICAgSlNWYWx1ZSBpZCA9IGl0ZW0tPmdldChleGVjU3RhdGUsIElkZW50aWZp
ZXIoZXhlY1N0YXRlLCAiaWQiKSk7CisgICAgICAgIEpTVmFsdWUgbGFiZWwgPSBpdGVtLT5nZXQo
ZXhlYywgSWRlbnRpZmllcihleGVjLCAibGFiZWwiKSk7CisgICAgICAgIEpTVmFsdWUgaWQgPSBp
dGVtLT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAiaWQiKSk7CiAgICAgICAgIGlmIChsYWJl
bC5pc1VuZGVmaW5lZCgpIHx8IGlkLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgICAgICBpdGVtcy5h
cHBlbmQobmV3IENvbnRleHRNZW51SXRlbShTZXBhcmF0b3JUeXBlLCBDb250ZXh0TWVudUl0ZW1U
YWdOb0FjdGlvbiwgU3RyaW5nKCkpKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBDb250
ZXh0TWVudUFjdGlvbiB0eXBlZElkID0gc3RhdGljX2Nhc3Q8Q29udGV4dE1lbnVBY3Rpb24+KENv
bnRleHRNZW51SXRlbUJhc2VDdXN0b21UYWcgKyBpZC50b0ludDMyKGV4ZWNTdGF0ZSkpOwotICAg
ICAgICAgICAgaXRlbXMuYXBwZW5kKG5ldyBDb250ZXh0TWVudUl0ZW0oQWN0aW9uVHlwZSwgdHlw
ZWRJZCwgdXN0cmluZ1RvU3RyaW5nKGxhYmVsLnRvU3RyaW5nKGV4ZWNTdGF0ZSkpKSk7CisgICAg
ICAgICAgICBDb250ZXh0TWVudUFjdGlvbiB0eXBlZElkID0gc3RhdGljX2Nhc3Q8Q29udGV4dE1l
bnVBY3Rpb24+KENvbnRleHRNZW51SXRlbUJhc2VDdXN0b21UYWcgKyBpZC50b0ludDMyKGV4ZWMp
KTsKKyAgICAgICAgICAgIGl0ZW1zLmFwcGVuZChuZXcgQ29udGV4dE1lbnVJdGVtKEFjdGlvblR5
cGUsIHR5cGVkSWQsIHVzdHJpbmdUb1N0cmluZyhsYWJlbC50b1N0cmluZyhleGVjKSkpKTsKICAg
ICAgICAgfQogICAgIH0KIAogICAgIGltcGwoKS0+c2hvd0NvbnRleHRNZW51KGV2ZW50LCBpdGVt
cyk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShleGVjU3RhdGUpOwogI2VuZGlmCiAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50OEFy
cmF5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50OEFy
cmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SW50OEFycmF5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsOSArNDgsOSBAQCBKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgCiAgICAgcmV0dXJuIGdldERPTU9i
amVjdFdyYXBwZXI8SlNJbnQ4QXJyYXk+KGV4ZWMsIGdsb2JhbE9iamVjdCwgb2JqZWN0KTsKIH0K
IAotSlNDOjpKU1ZhbHVlIEpTSW50OEFycmF5OjpzZXQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpT
Qzo6QXJnTGlzdCBjb25zdCYgYXJncykKK0pTQzo6SlNWYWx1ZSBKU0ludDhBcnJheTo6c2V0KEpT
Qzo6RXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBzZXRXZWJHTEFycmF5SGVscGVyKGV4
ZWMsIGltcGwoKSwgYXJncywgdG9JbnQ4QXJyYXkpOworICAgIHJldHVybiBzZXRXZWJHTEFycmF5
SGVscGVyKGV4ZWMsIGltcGwoKSwgdG9JbnQ4QXJyYXkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50MTZBcnJheUN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ludDE2QXJyYXlDdXN0b20uY3Bw
CShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbnQxNkFycmF5Q3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsOSArNDYsOSBAQCBKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgCiAgICAgcmV0dXJuIGdldERPTU9iamVjdFdyYXBwZXI8
SlNJbnQxNkFycmF5PihleGVjLCBnbG9iYWxPYmplY3QsIG9iamVjdCk7CiB9CiAKLUpTQzo6SlNW
YWx1ZSBKU0ludDE2QXJyYXk6OnNldChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpBcmdMaXN0
IGNvbnN0JiBhcmdzKQorSlNDOjpKU1ZhbHVlIEpTSW50MTZBcnJheTo6c2V0KEpTQzo6RXhlY1N0
YXRlKiBleGVjKQogewotICAgIHJldHVybiBzZXRXZWJHTEFycmF5SGVscGVyKGV4ZWMsIGltcGwo
KSwgYXJncywgdG9JbnQxNkFycmF5KTsKKyAgICByZXR1cm4gc2V0V2ViR0xBcnJheUhlbHBlcihl
eGVjLCBpbXBsKCksIHRvSW50MTZBcnJheSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbnQzMkFycmF5Q3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50MzJBcnJheUN1c3RvbS5jcHAJKHJldmlz
aW9uIDYwMzQxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ludDMyQXJyYXlDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00Niw5ICs0Niw5IEBAIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlKiBleGVjLCAKICAgICByZXR1cm4gZ2V0RE9NT2JqZWN0V3JhcHBlcjxKU0ludDMy
QXJyYXk+KGV4ZWMsIGdsb2JhbE9iamVjdCwgb2JqZWN0KTsKIH0KIAotSlNDOjpKU1ZhbHVlIEpT
SW50MzJBcnJheTo6c2V0KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkFyZ0xpc3QgY29uc3Qm
IGFyZ3MpCitKU0M6OkpTVmFsdWUgSlNJbnQzMkFycmF5OjpzZXQoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMpCiB7Ci0gICAgcmV0dXJuIHNldFdlYkdMQXJyYXlIZWxwZXIoZXhlYywgaW1wbCgpLCBhcmdz
LCB0b0ludDMyQXJyYXkpOworICAgIHJldHVybiBzZXRXZWJHTEFycmF5SGVscGVyKGV4ZWMsIGlt
cGwoKSwgdG9JbnQzMkFycmF5KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0phdmFTY3JpcHRDYWxsRnJhbWVDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lQ3VzdG9t
LmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSmF2YVNjcmlw
dENhbGxGcmFtZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEwICszNSwxMCBAQCB1
c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUgSlNK
YXZhU2NyaXB0Q2FsbEZyYW1lOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCitKU1ZhbHVlIEpTSmF2YVNjcmlwdENhbGxGcmFtZTo6ZXZhbHVhdGUoRXhlY1N0
YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgZXhjZXB0aW9uOwotICAgIEpTVmFsdWUgcmVzdWx0
ID0gaW1wbCgpLT5ldmFsdWF0ZShhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpLCBleGNlcHRpb24p
OworICAgIEpTVmFsdWUgcmVzdWx0ID0gaW1wbCgpLT5ldmFsdWF0ZShleGVjLT5hcmd1bWVudCgw
KS50b1N0cmluZyhleGVjKSwgZXhjZXB0aW9uKTsKIAogICAgIGlmIChleGNlcHRpb24pCiAgICAg
ICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihleGNlcHRpb24pOwpAQCAtODUsMTQgKzg1LDE0IEBAIEpT
VmFsdWUgSlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpzY29wZUNoYWkKICAgICByZXR1cm4gY29uc3Ry
dWN0QXJyYXkoZXhlYywgbGlzdCk7CiB9CiAKLUpTVmFsdWUgSlNKYXZhU2NyaXB0Q2FsbEZyYW1l
OjpzY29wZVR5cGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1
ZSBKU0phdmFTY3JpcHRDYWxsRnJhbWU6OnNjb3BlVHlwZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgaWYgKCFpbXBsKCktPnNjb3BlQ2hhaW4oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAKLSAgICBpZiAoIWFyZ3MuYXQoMCkuaXNJbnQzMigpKQorICAgIGlmICghZXhlYy0+YXJn
dW1lbnQoMCkuaXNJbnQzMigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBp
bnQgaW5kZXggPSBhcmdzLmF0KDApLmFzSW50MzIoKTsKKyAgICBpbnQgaW5kZXggPSBleGVjLT5h
cmd1bWVudCgwKS5hc0ludDMyKCk7CiAKICAgICBjb25zdCBTY29wZUNoYWluTm9kZSogc2NvcGVD
aGFpbiA9IGltcGwoKS0+c2NvcGVDaGFpbigpOwogICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBlbmQg
PSBzY29wZUNoYWluLT5lbmQoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlv
bkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9u
Q3VzdG9tLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9j
YXRpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDEsMTMgKzMwMSwxMyBAQCB2b2lk
IEpTTG9jYXRpb246OnNldEhhc2goRXhlY1N0YXRlKiBleGVjCiAgICAgbmF2aWdhdGVJZkFsbG93
ZWQoZXhlYywgZnJhbWUsIHVybCwgIWZyYW1lLT5zY3JpcHQoKS0+YW55UGFnZUlzUHJvY2Vzc2lu
Z1VzZXJHZXN0dXJlKCksIGZhbHNlKTsKIH0KIAotSlNWYWx1ZSBKU0xvY2F0aW9uOjpyZXBsYWNl
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNMb2NhdGlv
bjo6cmVwbGFjZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gaW1wbCgp
LT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogCi0gICAgS1VSTCB1cmwgPSBjb21wbGV0ZVVSTChleGVjLCB1c3RyaW5nVG9TdHJpbmcoYXJn
cy5hdCgwKS50b1N0cmluZyhleGVjKSkpOworICAgIEtVUkwgdXJsID0gY29tcGxldGVVUkwoZXhl
YywgdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSk7CiAg
ICAgaWYgKHVybC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKQEAg
LTMxOCw3ICszMTgsNyBAQCBKU1ZhbHVlIEpTTG9jYXRpb246OnJlcGxhY2UoRXhlY1N0YXRlKiBl
CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNMb2NhdGlvbjo6cmVs
b2FkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlIEpTTG9jYXRpb246
OnJlbG9hZChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gaW1wbCgpLT5m
cmFtZSgpOwogICAgIGlmICghZnJhbWUgfHwgIWFsbG93c0FjY2Vzc0Zyb21GcmFtZShleGVjLCBm
cmFtZSkpCkBAIC0zMjksMTMgKzMyOSwxMyBAQCBKU1ZhbHVlIEpTTG9jYXRpb246OnJlbG9hZChF
eGVjU3RhdGUqIGV4CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNM
b2NhdGlvbjo6YXNzaWduKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pT
VmFsdWUgSlNMb2NhdGlvbjo6YXNzaWduKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBGcmFtZSog
ZnJhbWUgPSBpbXBsKCktPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAKLSAgICBLVVJMIHVybCA9IGNvbXBsZXRlVVJMKGV4ZWMsIHVzdHJp
bmdUb1N0cmluZyhhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgS1VSTCB1cmwgPSBj
b21wbGV0ZVVSTChleGVjLCB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJp
bmcoZXhlYykpKTsKICAgICBpZiAodXJsLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIApAQCAtMzQ3LDcgKzM0Nyw3IEBAIEpTVmFsdWUgSlNMb2NhdGlvbjo6YXNzaWdu
KEV4ZWNTdGF0ZSogZXgKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBK
U0xvY2F0aW9uOjp0b1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmKQorSlNW
YWx1ZSBKU0xvY2F0aW9uOjp0b1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgRnJhbWUq
IGZyYW1lID0gaW1wbCgpLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUgfHwgIWFsbG93c0FjY2Vz
c0Zyb21GcmFtZShleGVjLCBmcmFtZSkpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVz
c2FnZUV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
TWVzc2FnZUV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTkg
KzU0LDE5IEBAIEpTVmFsdWUgSlNNZXNzYWdlRXZlbnQ6OnBvcnRzKEV4ZWNTdGF0ZSoKICAgICBy
ZXR1cm4gY29uc3RydWN0QXJyYXkoZXhlYywgbGlzdCk7CiB9CiAKLUpTQzo6SlNWYWx1ZSBKU01l
c3NhZ2VFdmVudDo6aW5pdE1lc3NhZ2VFdmVudChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SlNDOjpBcmdMaXN0JiBhcmdzKQorSlNDOjpKU1ZhbHVlIEpTTWVzc2FnZUV2ZW50Ojppbml0TWVz
c2FnZUV2ZW50KEpTQzo6RXhlY1N0YXRlKiBleGVjKQogewotICAgIGNvbnN0IFVTdHJpbmcmIHR5
cGVBcmcgPSBhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpOwotICAgIGJvb2wgY2FuQnViYmxlQXJn
ID0gYXJncy5hdCgxKS50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgYm9vbCBjYW5jZWxhYmxlQXJnID0g
YXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+IGRhdGFBcmcgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShleGVjLCBh
cmdzLmF0KDMpKTsKLSAgICBjb25zdCBVU3RyaW5nJiBvcmlnaW5BcmcgPSBhcmdzLmF0KDQpLnRv
U3RyaW5nKGV4ZWMpOwotICAgIGNvbnN0IFVTdHJpbmcmIGxhc3RFdmVudElkQXJnID0gYXJncy5h
dCg1KS50b1N0cmluZyhleGVjKTsKLSAgICBET01XaW5kb3cqIHNvdXJjZUFyZyA9IHRvRE9NV2lu
ZG93KGFyZ3MuYXQoNikpOworICAgIGNvbnN0IFVTdHJpbmcmIHR5cGVBcmcgPSBleGVjLT5hcmd1
bWVudCgwKS50b1N0cmluZyhleGVjKTsKKyAgICBib29sIGNhbkJ1YmJsZUFyZyA9IGV4ZWMtPmFy
Z3VtZW50KDEpLnRvQm9vbGVhbihleGVjKTsKKyAgICBib29sIGNhbmNlbGFibGVBcmcgPSBleGVj
LT5hcmd1bWVudCgyKS50b0Jvb2xlYW4oZXhlYyk7CisgICAgUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IGRhdGFBcmcgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShleGVj
LCBleGVjLT5hcmd1bWVudCgzKSk7CisgICAgY29uc3QgVVN0cmluZyYgb3JpZ2luQXJnID0gZXhl
Yy0+YXJndW1lbnQoNCkudG9TdHJpbmcoZXhlYyk7CisgICAgY29uc3QgVVN0cmluZyYgbGFzdEV2
ZW50SWRBcmcgPSBleGVjLT5hcmd1bWVudCg1KS50b1N0cmluZyhleGVjKTsKKyAgICBET01XaW5k
b3cqIHNvdXJjZUFyZyA9IHRvRE9NV2luZG93KGV4ZWMtPmFyZ3VtZW50KDYpKTsKICAgICBPd25Q
dHI8TWVzc2FnZVBvcnRBcnJheT4gbWVzc2FnZVBvcnRzOwotICAgIGlmICghYXJncy5hdCg3KS5p
c1VuZGVmaW5lZE9yTnVsbCgpKSB7CisgICAgaWYgKCFleGVjLT5hcmd1bWVudCg3KS5pc1VuZGVm
aW5lZE9yTnVsbCgpKSB7CiAgICAgICAgIG1lc3NhZ2VQb3J0cyA9IG5ldyBNZXNzYWdlUG9ydEFy
cmF5KCk7Ci0gICAgICAgIGZpbGxNZXNzYWdlUG9ydEFycmF5KGV4ZWMsIGFyZ3MuYXQoNyksICpt
ZXNzYWdlUG9ydHMpOworICAgICAgICBmaWxsTWVzc2FnZVBvcnRBcnJheShleGVjLCBleGVjLT5h
cmd1bWVudCg3KSwgKm1lc3NhZ2VQb3J0cyk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAkocmV2aXNpb24gNjAz
NDEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Miw5ICs1Miw5IEBAIHZvaWQgSlNNZXNzYWdlUG9ydDo6bWFya0NoaWxk
cmVuKE1hcmtTdGEKICAgICBtX2ltcGwtPm1hcmtKU0V2ZW50TGlzdGVuZXJzKG1hcmtTdGFjayk7
CiB9CiAKLUpTQzo6SlNWYWx1ZSBKU01lc3NhZ2VQb3J0Ojpwb3N0TWVzc2FnZShKU0M6OkV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzKQorSlNDOjpKU1ZhbHVlIEpTTWVz
c2FnZVBvcnQ6OnBvc3RNZXNzYWdlKEpTQzo6RXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVy
biBoYW5kbGVQb3N0TWVzc2FnZShleGVjLCBhcmdzLCBpbXBsKCkpOworICAgIHJldHVybiBoYW5k
bGVQb3N0TWVzc2FnZShleGVjLCBpbXBsKCkpOwogfQogCiB2b2lkIGZpbGxNZXNzYWdlUG9ydEFy
cmF5KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUsIE1lc3NhZ2VQb3J0
QXJyYXkmIHBvcnRBcnJheSkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9y
dEN1c3RvbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9y
dEN1c3RvbS5oCShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNz
YWdlUG9ydEN1c3RvbS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NywxMSArNDcsMTEgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNvbnZlcnQgZnJvbSBK
UyBwb3N0TWVzc2FnZSBhcmd1bWVudHMgdG8gV2ViQ29yZSBwb3N0TWVzc2FnZSBhcmd1bWVudHMu
CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gICAgaW5saW5lIEpTQzo6SlNWYWx1ZSBoYW5k
bGVQb3N0TWVzc2FnZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpBcmdMaXN0JiBh
cmdzLCBUKiBpbXBsKQorICAgIGlubGluZSBKU0M6OkpTVmFsdWUgaGFuZGxlUG9zdE1lc3NhZ2Uo
SlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFQqIGltcGwpCiAgICAgewotICAgICAgICBQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbWVzc2FnZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6
Y3JlYXRlKGV4ZWMsIGFyZ3MuYXQoMCkpOworICAgICAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gbWVzc2FnZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMs
IGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICAgICAgTWVzc2FnZVBvcnRBcnJheSBwb3J0QXJyYXk7
Ci0gICAgICAgIGZpbGxNZXNzYWdlUG9ydEFycmF5KGV4ZWMsIGFyZ3MuYXQoMSksIHBvcnRBcnJh
eSk7CisgICAgICAgIGZpbGxNZXNzYWdlUG9ydEFycmF5KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDEp
LCBwb3J0QXJyYXkpOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAg
ICAgICByZXR1cm4gSlNDOjpqc1VuZGVmaW5lZCgpOwogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTm9kZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U05vZGVDdXN0b20uY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNOb2RlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsNDcgKzY4LDQ3IEBAIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSBKU05vZGU6
Omluc2VydEJlZm9yZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1Zh
bHVlIEpTTm9kZTo6aW5zZXJ0QmVmb3JlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBOb2RlKiBp
bXAgPSBzdGF0aWNfY2FzdDxOb2RlKj4oaW1wbCgpKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKLSAgICBib29sIG9rID0gaW1wLT5pbnNlcnRCZWZvcmUodG9Ob2RlKGFyZ3MuYXQoMCkpLCB0
b05vZGUoYXJncy5hdCgxKSksIGVjLCB0cnVlKTsKKyAgICBib29sIG9rID0gaW1wLT5pbnNlcnRC
ZWZvcmUodG9Ob2RlKGV4ZWMtPmFyZ3VtZW50KDApKSwgdG9Ob2RlKGV4ZWMtPmFyZ3VtZW50KDEp
KSwgZWMsIHRydWUpOwogICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAgICAgaWYgKG9r
KQotICAgICAgICByZXR1cm4gYXJncy5hdCgwKTsKKyAgICAgICAgcmV0dXJuIGV4ZWMtPmFyZ3Vt
ZW50KDApOwogICAgIHJldHVybiBqc051bGwoKTsKIH0KIAotSlNWYWx1ZSBKU05vZGU6OnJlcGxh
Y2VDaGlsZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpT
Tm9kZTo6cmVwbGFjZUNoaWxkKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBOb2RlKiBpbXAgPSBz
dGF0aWNfY2FzdDxOb2RlKj4oaW1wbCgpKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAg
ICBib29sIG9rID0gaW1wLT5yZXBsYWNlQ2hpbGQodG9Ob2RlKGFyZ3MuYXQoMCkpLCB0b05vZGUo
YXJncy5hdCgxKSksIGVjLCB0cnVlKTsKKyAgICBib29sIG9rID0gaW1wLT5yZXBsYWNlQ2hpbGQo
dG9Ob2RlKGV4ZWMtPmFyZ3VtZW50KDApKSwgdG9Ob2RlKGV4ZWMtPmFyZ3VtZW50KDEpKSwgZWMs
IHRydWUpOwogICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAgICAgaWYgKG9rKQotICAg
ICAgICByZXR1cm4gYXJncy5hdCgxKTsKKyAgICAgICAgcmV0dXJuIGV4ZWMtPmFyZ3VtZW50KDEp
OwogICAgIHJldHVybiBqc051bGwoKTsKIH0KIAotSlNWYWx1ZSBKU05vZGU6OnJlbW92ZUNoaWxk
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNOb2RlOjpy
ZW1vdmVDaGlsZChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgTm9kZSogaW1wID0gc3RhdGljX2Nh
c3Q8Tm9kZSo+KGltcGwoKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgYm9vbCBv
ayA9IGltcC0+cmVtb3ZlQ2hpbGQodG9Ob2RlKGFyZ3MuYXQoMCkpLCBlYyk7CisgICAgYm9vbCBv
ayA9IGltcC0+cmVtb3ZlQ2hpbGQodG9Ob2RlKGV4ZWMtPmFyZ3VtZW50KDApKSwgZWMpOwogICAg
IHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAgICAgaWYgKG9rKQotICAgICAgICByZXR1cm4g
YXJncy5hdCgwKTsKKyAgICAgICAgcmV0dXJuIGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIHJldHVy
biBqc051bGwoKTsKIH0KIAotSlNWYWx1ZSBKU05vZGU6OmFwcGVuZENoaWxkKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNOb2RlOjphcHBlbmRDaGlsZChF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgTm9kZSogaW1wID0gc3RhdGljX2Nhc3Q8Tm9kZSo+KGlt
cGwoKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgYm9vbCBvayA9IGltcC0+YXBw
ZW5kQ2hpbGQodG9Ob2RlKGFyZ3MuYXQoMCkpLCBlYywgdHJ1ZSk7CisgICAgYm9vbCBvayA9IGlt
cC0+YXBwZW5kQ2hpbGQodG9Ob2RlKGV4ZWMtPmFyZ3VtZW50KDApKSwgZWMsIHRydWUpOwogICAg
IHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAgICAgaWYgKG9rKQotICAgICAgICByZXR1cm4g
YXJncy5hdCgwKTsKKyAgICAgICAgcmV0dXJuIGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIHJldHVy
biBqc051bGwoKTsKIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVMaXN0Q3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUxpc3RDdXN0
b20uY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlTGlz
dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDEzICszNiwxMyBAQCB1c2luZyBuYW1l
c3BhY2UgSlNDOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBOZWVkIHRvIHN1cHBvcnQgY2Fs
bCBzbyB0aGF0IGxpc3QoMCkgd29ya3MuCi1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNh
bGxOb2RlTGlzdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBmdW5jdGlvbiwgSlNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYgYXJncykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbE5v
ZGVMaXN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBib29sIG9rOwotICAgIHVuc2lnbmVkIGlu
ZGV4ID0gYXJncy5hdCgwKS50b1N0cmluZyhleGVjKS50b1VJbnQzMigmb2spOworICAgIHVuc2ln
bmVkIGluZGV4ID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykudG9VSW50MzIoJm9r
KTsKICAgICBpZiAoIW9rKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICByZXR1
cm4gdG9KUyhleGVjLCBzdGF0aWNfY2FzdDxKU05vZGVMaXN0Kj4oZnVuY3Rpb24pLT5pbXBsKCkt
Pml0ZW0oaW5kZXgpKTsKKyAgICByZXR1cm4gdG9KUyhleGVjLCBzdGF0aWNfY2FzdDxKU05vZGVM
aXN0Kj4oZXhlYy0+Y2FsbGVlKCkpLT5pbXBsKCktPml0ZW0oaW5kZXgpKTsKIH0KIAogQ2FsbFR5
cGUgSlNOb2RlTGlzdDo6Z2V0Q2FsbERhdGEoQ2FsbERhdGEmIGNhbGxEYXRhKQpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNQbHVnaW5FbGVtZW50RnVuY3Rpb25zLmNwcAkocmV2
aXNpb24gNjAzNDEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luRWxlbWVudEZ1bmN0
aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSwxMSArMTA1LDExIEBAIGJvb2wgcnVudGlt
ZU9iamVjdEN1c3RvbVB1dChFeGVjU3RhdGUqIGUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3Rh
dGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsUGx1Z2luKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIGZ1bmN0aW9uLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGljIEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsUGx1Z2luKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBJ
bnN0YW5jZSogaW5zdGFuY2UgPSBwbHVnaW5JbnN0YW5jZShzdGF0aWNfY2FzdDxKU0hUTUxFbGVt
ZW50Kj4oZnVuY3Rpb24pLT5pbXBsKCkpOworICAgIEluc3RhbmNlKiBpbnN0YW5jZSA9IHBsdWdp
bkluc3RhbmNlKHN0YXRpY19jYXN0PEpTSFRNTEVsZW1lbnQqPihleGVjLT5jYWxsZWUoKSktPmlt
cGwoKSk7CiAgICAgaW5zdGFuY2UtPmJlZ2luKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBpbnN0
YW5jZS0+aW52b2tlRGVmYXVsdE1ldGhvZChleGVjLCBhcmdzKTsKKyAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGluc3RhbmNlLT5pbnZva2VEZWZhdWx0TWV0aG9kKGV4ZWMpOwogICAgIGluc3RhbmNlLT5l
bmQoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1NRTFJlc3VsdFNldFJvd0xpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNTUUxSZXN1bHRTZXRSb3dMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gNjAzNDEp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FMUmVzdWx0U2V0Um93TGlzdEN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM5LDEwICszOSwxMCBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUgSlNTUUxSZXN1bHRTZXRSb3dMaXN0Ojpp
dGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNTUUxS
ZXN1bHRTZXRSb3dMaXN0OjppdGVtKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBib29sIGluZGV4
T2s7Ci0gICAgaW50IGluZGV4ID0gYXJncy5hdCgwKS50b0ludDMyKGV4ZWMsIGluZGV4T2spOwor
ICAgIGludCBpbmRleCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYywgaW5kZXhPayk7
CiAgICAgaWYgKCFpbmRleE9rKSB7CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBF
X01JU01BVENIX0VSUik7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwCShyZXZpc2lv
biA2MDM0MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlvbkN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDIxICs0MiwyMSBAQCB1c2luZyBuYW1lc3BhY2UgSlND
OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUgSlNTUUxUcmFuc2FjdGlvbjo6ZXhl
Y3V0ZVNxbChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpT
U1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTcWwoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGlmIChh
cmdzLmlzRW1wdHkoKSkgeworICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKSB7CiAgICAg
ICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBTWU5UQVhfRVJSKTsKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAgU3RyaW5nIHNxbFN0YXRlbWVudCA9IHVzdHJpbmdU
b1N0cmluZyhhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBTdHJpbmcgc3FsU3RhdGVt
ZW50ID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKTsK
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogCiAgICAgLy8gTm93IGFzc2VtYmxlIHRoZSBsaXN0IG9mIFNRTCBhcmd1bWVudHMKICAg
ICBWZWN0b3I8U1FMVmFsdWU+IHNxbFZhbHVlczsKLSAgICBpZiAoIWFyZ3MuYXQoMSkuaXNVbmRl
ZmluZWRPck51bGwoKSkgewotICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXJncy5hdCgxKS5n
ZXRPYmplY3QoKTsKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkT3JOdWxs
KCkpIHsKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGV4ZWMtPmFyZ3VtZW50KDEpLmdldE9i
amVjdCgpOwogICAgICAgICBpZiAoIW9iamVjdCkgewogICAgICAgICAgICAgc2V0RE9NRXhjZXB0
aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwpAQCAtODgsOCArODgsOCBAQCBKU1ZhbHVlIEpTU1FMVHJhbnNhY3Rpb246OmV4ZWN1
dGVTcWwoRXhlCiAgICAgfQogCiAgICAgUmVmUHRyPFNRTFN0YXRlbWVudENhbGxiYWNrPiBjYWxs
YmFjazsKLSAgICBpZiAoIWFyZ3MuYXQoMikuaXNVbmRlZmluZWRPck51bGwoKSkgewotICAgICAg
ICBKU09iamVjdCogb2JqZWN0ID0gYXJncy5hdCgyKS5nZXRPYmplY3QoKTsKKyAgICBpZiAoIWV4
ZWMtPmFyZ3VtZW50KDIpLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKKyAgICAgICAgSlNPYmplY3Qq
IG9iamVjdCA9IGV4ZWMtPmFyZ3VtZW50KDIpLmdldE9iamVjdCgpOwogICAgICAgICBpZiAoIW9i
amVjdCkgewogICAgICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hf
RVJSKTsKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpAQCAtOTksOCArOTksOCBA
QCBKU1ZhbHVlIEpTU1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTcWwoRXhlCiAgICAgfQogCiAgICAg
UmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2s7Ci0gICAgaWYg
KCFhcmdzLmF0KDMpLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKLSAgICAgICAgSlNPYmplY3QqIG9i
amVjdCA9IGFyZ3MuYXQoMykuZ2V0T2JqZWN0KCk7CisgICAgaWYgKCFleGVjLT5hcmd1bWVudCgz
KS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBleGVj
LT5hcmd1bWVudCgzKS5nZXRPYmplY3QoKTsKICAgICAgICAgaWYgKCFvYmplY3QpIHsKICAgICAg
ICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7CiAgICAgICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNT
UUxUcmFuc2FjdGlvblN5bmNDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNTUUxUcmFuc2FjdGlvblN5bmNDdXN0b20uY3BwCShyZXZpc2lvbiA2MDM0MSkKKysr
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlvblN5bmNDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSwyMSArNDEsMjEgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlIEpTU1FMVHJhbnNhY3Rpb25TeW5jOjpleGVjdXRl
U3FsKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNTUUxU
cmFuc2FjdGlvblN5bmM6OmV4ZWN1dGVTcWwoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGlmIChh
cmdzLmlzRW1wdHkoKSkgeworICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKSB7CiAgICAg
ICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBTWU5UQVhfRVJSKTsKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAgU3RyaW5nIHNxbFN0YXRlbWVudCA9IHVzdHJpbmdU
b1N0cmluZyhhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBTdHJpbmcgc3FsU3RhdGVt
ZW50ID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKTsK
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogCiAgICAgLy8gTm93IGFzc2VtYmxlIHRoZSBsaXN0IG9mIFNRTCBhcmd1bWVudHMKICAg
ICBWZWN0b3I8U1FMVmFsdWU+IHNxbFZhbHVlczsKLSAgICBpZiAoIWFyZ3MuYXQoMSkuaXNVbmRl
ZmluZWRPck51bGwoKSkgewotICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXJncy5hdCgxKS5n
ZXRPYmplY3QoKTsKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkT3JOdWxs
KCkpIHsKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGV4ZWMtPmFyZ3VtZW50KDEpLmdldE9i
amVjdCgpOwogICAgICAgICBpZiAoIW9iamVjdCkgewogICAgICAgICAgICAgc2V0RE9NRXhjZXB0
aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0xlbmd0aEN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0xlbmd0aEN1c3RvbS5jcHAJ
KHJldmlzaW9uIDYwMzQxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0xlbmd0aEN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEzICszNSwxMyBAQCBKU1ZhbHVlIEpTU1ZHTGVu
Z3RoOjp2YWx1ZShFeGVjU3RhdGUqIGV4CiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHBvZElt
cC52YWx1ZShjb250ZXh0KSk7CiB9CiAKLUpTVmFsdWUgSlNTVkdMZW5ndGg6OmNvbnZlcnRUb1Nw
ZWNpZmllZFVuaXRzKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFs
dWUgSlNTVkdMZW5ndGg6OmNvbnZlcnRUb1NwZWNpZmllZFVuaXRzKEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICBKU1NWR1BPRFR5cGVXcmFwcGVyPFNWR0xlbmd0aD4qIGltcCA9IGltcGwoKTsKICAg
ICBTVkdFbGVtZW50KiBjb250ZXh0ID0gSlNTVkdDb250ZXh0Q2FjaGU6OnN2Z0NvbnRleHRGb3JE
T01PYmplY3QodGhpcyk7CiAKICAgICBTVkdMZW5ndGggcG9kSW1wKCppbXApOwotICAgIHBvZElt
cC5jb252ZXJ0VG9TcGVjaWZpZWRVbml0cyhhcmdzLmF0KDApLnRvSW50MzIoZXhlYyksIGNvbnRl
eHQpOworICAgIHBvZEltcC5jb252ZXJ0VG9TcGVjaWZpZWRVbml0cyhleGVjLT5hcmd1bWVudCgw
KS50b0ludDMyKGV4ZWMpLCBjb250ZXh0KTsKIAogICAgIGltcC0+Y29tbWl0Q2hhbmdlKHBvZElt
cCwgdGhpcyk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTU1ZHTWF0cml4Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTU1ZHTWF0cml4Q3VzdG9tLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTU1ZHTWF0cml4Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEs
MTUgKzMxLDE1IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotSlNWYWx1ZSBKU1NWR01hdHJpeDo6bXVsdGlwbHkoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU1NWR01hdHJpeDo6bXVsdGlwbHkoRXhlY1N0YXRlKiBl
eGVjKQogewotICAgIGlmIChhcmdzLnNpemUoKSA8IDEpCisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9y
LCAiTm90IGVub3VnaCBhcmd1bWVudHMiKTsKIAotICAgIGlmICghYXJncy5hdCgwKS5pbmhlcml0
cygmSlNTVkdNYXRyaXg6OnNfaW5mbykpCisgICAgaWYgKCFleGVjLT5hcmd1bWVudCgwKS5pbmhl
cml0cygmSlNTVkdNYXRyaXg6OnNfaW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4
ZWMsIFR5cGVFcnJvciwgInNlY29uZE1hdHJpeCBhcmd1bWVudCB3YXMgbm90IGEgU1ZHTWF0cml4
Iik7CiAKLSAgICBKU1NWR01hdHJpeCogbWF0cml4T2JqID0gc3RhdGljX2Nhc3Q8SlNTVkdNYXRy
aXgqPihhc09iamVjdChhcmdzLmF0KDApKSk7CisgICAgSlNTVkdNYXRyaXgqIG1hdHJpeE9iaiA9
IHN0YXRpY19jYXN0PEpTU1ZHTWF0cml4Kj4oYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpKTsK
IAogICAgIEFmZmluZVRyYW5zZm9ybSBtMSgqaW1wbCgpKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0g
bTIoKihtYXRyaXhPYmotPmltcGwoKSkpOwpAQCAtNDgsNyArNDgsNyBAQCBKU1ZhbHVlIEpTU1ZH
TWF0cml4OjptdWx0aXBseShFeGVjU3RhdGUqCiAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0KCksIEpTU1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI8QWZmaW5lVHJhbnNmb3JtPjo6Y3Jl
YXRlKG0xLm11bHRMZWZ0KG0yKSkuZ2V0KCksIGNvbnRleHQpOwogfQogCi1KU1ZhbHVlIEpTU1ZH
TWF0cml4OjppbnZlcnNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVl
IEpTU1ZHTWF0cml4OjppbnZlcnNlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBBZmZpbmVUcmFu
c2Zvcm0gaW1wKCppbXBsKCkpOwogCkBAIC02MSwxMiArNjEsMTIgQEAgSlNWYWx1ZSBKU1NWR01h
dHJpeDo6aW52ZXJzZShFeGVjU3RhdGUqIAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFs
dWUgSlNTVkdNYXRyaXg6OnJvdGF0ZUZyb21WZWN0b3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU1NWR01hdHJpeDo6cm90YXRlRnJvbVZlY3RvcihFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgQWZmaW5lVHJhbnNmb3JtIGltcCgqaW1wbCgpKTsKICAKLSAg
ICBmbG9hdCB4ID0gYXJncy5hdCgwKS50b0Zsb2F0KGV4ZWMpOwotICAgIGZsb2F0IHkgPSBhcmdz
LmF0KDEpLnRvRmxvYXQoZXhlYyk7CisgICAgZmxvYXQgeCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRv
RmxvYXQoZXhlYyk7CisgICAgZmxvYXQgeSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvRmxvYXQoZXhl
Yyk7CiAKICAgICBTVkdFbGVtZW50KiBjb250ZXh0ID0gSlNTVkdDb250ZXh0Q2FjaGU6OnN2Z0Nv
bnRleHRGb3JET01PYmplY3QodGhpcyk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMs
IGdsb2JhbE9iamVjdCgpLCBKU1NWR1N0YXRpY1BPRFR5cGVXcmFwcGVyPEFmZmluZVRyYW5zZm9y
bT46OmNyZWF0ZShpbXAucm90YXRlRnJvbVZlY3Rvcih4LCB5KSkuZ2V0KCksIGNvbnRleHQpOwpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1BPRExpc3RDdXN0b20uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHUE9ETGlzdEN1c3RvbS5oCShyZXZpc2lvbiA2
MDM0MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdQT0RMaXN0Q3VzdG9tLmgJKHdvcmtp
bmcgY29weSkKQEAgLTg5LDcgKzg5LDcgQEAgc3RhdGljIEpTQzo6SlNWYWx1ZSBmaW5pc2hTZXR0
ZXJSZWFkT25seQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBKU1BPRExpc3RUeXBlLCB0eXBlbmFt
ZSBQT0RUeXBlPgotc3RhdGljIEpTQzo6SlNWYWx1ZSBjbGVhcihKU1BPRExpc3RUeXBlKiB3cmFw
cGVyLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpBcmdMaXN0JiwKK3N0YXRpYyBK
U0M6OkpTVmFsdWUgY2xlYXIoSlNQT0RMaXN0VHlwZSogd3JhcHBlciwgSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIEpTU1ZHUE9ETGlzdFRy
YWl0czxQT0RUeXBlPjo6Q29udmVyc2lvbkNhbGxiYWNrKQogewogICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwpAQCAtMTA1LDIxICsxMDUsMjEgQEAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjbGVhcihK
U1BPRExpc3RUeXBlKgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBKU1BPRExpc3RUeXBlLCB0eXBl
bmFtZSBQT0RUeXBlPgotc3RhdGljIEpTQzo6SlNWYWx1ZSBpbml0aWFsaXplKEpTUE9ETGlzdFR5
cGUqIHdyYXBwZXIsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFy
Z3MsCitzdGF0aWMgSlNDOjpKU1ZhbHVlIGluaXRpYWxpemUoSlNQT0RMaXN0VHlwZSogd3JhcHBl
ciwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dHlwZW5hbWUgSlNTVkdQT0RMaXN0VHJhaXRzPFBPRFR5cGU+OjpDb252ZXJzaW9uQ2FsbGJhY2sg
Y29udmVyc2lvbikKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICB0eXBlbmFtZSBK
U1NWR1BPRExpc3RUcmFpdHM8UE9EVHlwZT46OlBPRExpc3QqIGxpc3RJbXAgPSB3cmFwcGVyLT5p
bXBsKCk7CiAgICAgcmV0dXJuIGZpbmlzaFNldHRlcjxKU1BPRExpc3RUeXBlLCBQT0RUeXBlPihl
eGVjLCBlYywgd3JhcHBlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxpc3RJbXAtPmluaXRpYWxpemUoSlNTVkdQT0RMaXN0VHJhaXRzPFBPRFR5cGU+
OjpQT0RMaXN0SXRlbTo6Y29weShjb252ZXJzaW9uKGFyZ3MuYXQoMCkpKSwgZWMpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RJbXAtPmluaXRp
YWxpemUoSlNTVkdQT0RMaXN0VHJhaXRzPFBPRFR5cGU+OjpQT0RMaXN0SXRlbTo6Y29weShjb252
ZXJzaW9uKGV4ZWMtPmFyZ3VtZW50KDApKSksIGVjKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IEpTUE9ETGlzdFR5cGUsIHR5cGVuYW1lIFBPRFR5cGU+Ci1zdGF0aWMgSlNDOjpKU1ZhbHVlIGdl
dEl0ZW0oSlNQT0RMaXN0VHlwZSogd3JhcHBlciwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IEpTQzo6QXJnTGlzdCYgYXJncywKK3N0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0SXRlbShKU1BPRExp
c3RUeXBlKiB3cmFwcGVyLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0eXBlbmFtZSBKU1NWR1BPRExpc3RUcmFpdHM8UE9EVHlwZT46OkNvbnZlcnNp
b25DYWxsYmFjaykKIHsKICAgICBib29sIGluZGV4T2sgPSBmYWxzZTsKLSAgICB1bnNpZ25lZCBp
bmRleCA9IGFyZ3MuYXQoMCkudG9VSW50MzIoZXhlYywgaW5kZXhPayk7CisgICAgdW5zaWduZWQg
aW5kZXggPSBleGVjLT5hcmd1bWVudCgwKS50b1VJbnQzMihleGVjLCBpbmRleE9rKTsKICAgICBp
ZiAoIWluZGV4T2spIHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFU
Q0hfRVJSKTsKICAgICAgICAgcmV0dXJuIEpTQzo6anNVbmRlZmluZWQoKTsKQEAgLTEzMiwxMSAr
MTMyLDExIEBAIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0SXRlbShKU1BPRExpc3RUeXAKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgSlNQT0RMaXN0VHlwZSwgdHlwZW5hbWUgUE9EVHlwZT4KLXN0YXRp
YyBKU0M6OkpTVmFsdWUgaW5zZXJ0SXRlbUJlZm9yZShKU1BPRExpc3RUeXBlKiB3cmFwcGVyLCBK
U0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzLAorc3RhdGljIEpT
Qzo6SlNWYWx1ZSBpbnNlcnRJdGVtQmVmb3JlKEpTUE9ETGlzdFR5cGUqIHdyYXBwZXIsIEpTQzo6
RXhlY1N0YXRlKiBleGVjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5
cGVuYW1lIEpTU1ZHUE9ETGlzdFRyYWl0czxQT0RUeXBlPjo6Q29udmVyc2lvbkNhbGxiYWNrIGNv
bnZlcnNpb24pCiB7CiAgICAgYm9vbCBpbmRleE9rID0gZmFsc2U7Ci0gICAgdW5zaWduZWQgaW5k
ZXggPSBhcmdzLmF0KDEpLnRvVUludDMyKGV4ZWMsIGluZGV4T2spOworICAgIHVuc2lnbmVkIGlu
ZGV4ID0gZXhlYy0+YXJndW1lbnQoMSkudG9VSW50MzIoZXhlYywgaW5kZXhPayk7CiAgICAgaWYg
KCFpbmRleE9rKSB7CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENI
X0VSUik7CiAgICAgICAgIHJldHVybiBKU0M6OmpzVW5kZWZpbmVkKCk7CkBAIC0xNDUsMTUgKzE0
NSwxNSBAQCBzdGF0aWMgSlNDOjpKU1ZhbHVlIGluc2VydEl0ZW1CZWZvcmUoSlNQCiAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgdHlwZW5hbWUgSlNTVkdQT0RMaXN0VHJhaXRzPFBPRFR5
cGU+OjpQT0RMaXN0KiBsaXN0SW1wID0gd3JhcHBlci0+aW1wbCgpOwogICAgIHJldHVybiBmaW5p
c2hTZXR0ZXI8SlNQT0RMaXN0VHlwZSwgUE9EVHlwZT4oZXhlYywgZWMsIHdyYXBwZXIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0SW1wLT5pbnNl
cnRJdGVtQmVmb3JlKEpTU1ZHUE9ETGlzdFRyYWl0czxQT0RUeXBlPjo6UE9ETGlzdEl0ZW06OmNv
cHkoY29udmVyc2lvbihhcmdzLmF0KDApKSksIGluZGV4LCBlYykpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdEltcC0+aW5zZXJ0SXRlbUJlZm9y
ZShKU1NWR1BPRExpc3RUcmFpdHM8UE9EVHlwZT46OlBPRExpc3RJdGVtOjpjb3B5KGNvbnZlcnNp
b24oZXhlYy0+YXJndW1lbnQoMCkpKSwgaW5kZXgsIGVjKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIEpTUE9ETGlzdFR5cGUsIHR5cGVuYW1lIFBPRFR5cGU+Ci1zdGF0aWMgSlNDOjpKU1ZhbHVl
IHJlcGxhY2VJdGVtKEpTUE9ETGlzdFR5cGUqIHdyYXBwZXIsIEpTQzo6RXhlY1N0YXRlKiBleGVj
LCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MsCitzdGF0aWMgSlNDOjpKU1ZhbHVlIHJlcGxhY2VJ
dGVtKEpTUE9ETGlzdFR5cGUqIHdyYXBwZXIsIEpTQzo6RXhlY1N0YXRlKiBleGVjLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBKU1NWR1BPRExpc3RUcmFpdHM8UE9E
VHlwZT46OkNvbnZlcnNpb25DYWxsYmFjayBjb252ZXJzaW9uKQogewogICAgIGJvb2wgaW5kZXhP
ayA9IGZhbHNlOwotICAgIHVuc2lnbmVkIGluZGV4ID0gYXJncy5hdCgxKS50b1VJbnQzMihleGVj
LCBpbmRleE9rKTsKKyAgICB1bnNpZ25lZCBpbmRleCA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvVUlu
dDMyKGV4ZWMsIGluZGV4T2spOwogICAgIGlmICghaW5kZXhPaykgewogICAgICAgICBzZXRET01F
eGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOwogICAgICAgICByZXR1cm4gSlNDOjpq
c1VuZGVmaW5lZCgpOwpAQCAtMTYyLDE1ICsxNjIsMTUgQEAgc3RhdGljIEpTQzo6SlNWYWx1ZSBy
ZXBsYWNlSXRlbShKU1BPRExpcwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIHR5cGVu
YW1lIEpTU1ZHUE9ETGlzdFRyYWl0czxQT0RUeXBlPjo6UE9ETGlzdCogbGlzdEltcCA9IHdyYXBw
ZXItPmltcGwoKTsKICAgICByZXR1cm4gZmluaXNoU2V0dGVyPEpTUE9ETGlzdFR5cGUsIFBPRFR5
cGU+KGV4ZWMsIGVjLCB3cmFwcGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbGlzdEltcC0+cmVwbGFjZUl0ZW0oSlNTVkdQT0RMaXN0VHJhaXRzPFBP
RFR5cGU+OjpQT0RMaXN0SXRlbTo6Y29weShjb252ZXJzaW9uKGFyZ3MuYXQoMCkpKSwgaW5kZXgs
IGVjKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
aXN0SW1wLT5yZXBsYWNlSXRlbShKU1NWR1BPRExpc3RUcmFpdHM8UE9EVHlwZT46OlBPRExpc3RJ
dGVtOjpjb3B5KGNvbnZlcnNpb24oZXhlYy0+YXJndW1lbnQoMCkpKSwgaW5kZXgsIGVjKSk7CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEpTUE9ETGlzdFR5cGUsIHR5cGVuYW1lIFBPRFR5cGU+Ci1z
dGF0aWMgSlNDOjpKU1ZhbHVlIHJlbW92ZUl0ZW0oSlNQT0RMaXN0VHlwZSogd3JhcHBlciwgSlND
OjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncywKK3N0YXRpYyBKU0M6
OkpTVmFsdWUgcmVtb3ZlSXRlbShKU1BPRExpc3RUeXBlKiB3cmFwcGVyLCBKU0M6OkV4ZWNTdGF0
ZSogZXhlYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBKU1NWR1BP
RExpc3RUcmFpdHM8UE9EVHlwZT46OkNvbnZlcnNpb25DYWxsYmFjaykKIHsKICAgICBib29sIGlu
ZGV4T2sgPSBmYWxzZTsKLSAgICB1bnNpZ25lZCBpbmRleCA9IGFyZ3MuYXQoMCkudG9VSW50MzIo
ZXhlYywgaW5kZXhPayk7CisgICAgdW5zaWduZWQgaW5kZXggPSBleGVjLT5hcmd1bWVudCgwKS50
b1VJbnQzMihleGVjLCBpbmRleE9rKTsKICAgICBpZiAoIWluZGV4T2spIHsKICAgICAgICAgc2V0
RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKICAgICAgICAgcmV0dXJuIEpT
Qzo6anNVbmRlZmluZWQoKTsKQEAgLTE4MywxMyArMTgzLDEzIEBAIHN0YXRpYyBKU0M6OkpTVmFs
dWUgcmVtb3ZlSXRlbShKU1BPRExpc3QKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgSlNQT0RMaXN0
VHlwZSwgdHlwZW5hbWUgUE9EVHlwZT4KLXN0YXRpYyBKU0M6OkpTVmFsdWUgYXBwZW5kSXRlbShK
U1BPRExpc3RUeXBlKiB3cmFwcGVyLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpB
cmdMaXN0JiBhcmdzLAorc3RhdGljIEpTQzo6SlNWYWx1ZSBhcHBlbmRJdGVtKEpTUE9ETGlzdFR5
cGUqIHdyYXBwZXIsIEpTQzo6RXhlY1N0YXRlKiBleGVjLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHR5cGVuYW1lIEpTU1ZHUE9ETGlzdFRyYWl0czxQT0RUeXBlPjo6Q29udmVyc2lv
bkNhbGxiYWNrIGNvbnZlcnNpb24pCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAg
dHlwZW5hbWUgSlNTVkdQT0RMaXN0VHJhaXRzPFBPRFR5cGU+OjpQT0RMaXN0KiBsaXN0SW1wID0g
d3JhcHBlci0+aW1wbCgpOwogICAgIHJldHVybiBmaW5pc2hTZXR0ZXI8SlNQT0RMaXN0VHlwZSwg
UE9EVHlwZT4oZXhlYywgZWMsIHdyYXBwZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsaXN0SW1wLT5hcHBlbmRJdGVtKEpTU1ZHUE9ETGlzdFRyYWl0
czxQT0RUeXBlPjo6UE9ETGlzdEl0ZW06OmNvcHkoY29udmVyc2lvbihhcmdzLmF0KDApKSksIGVj
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0
SW1wLT5hcHBlbmRJdGVtKEpTU1ZHUE9ETGlzdFRyYWl0czxQT0RUeXBlPjo6UE9ETGlzdEl0ZW06
OmNvcHkoY29udmVyc2lvbihleGVjLT5hcmd1bWVudCgwKSkpLCBlYykpOwogfQogCiB9CkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHUGF0aFNlZ0xpc3RDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdQYXRoU2VnTGlzdEN1c3RvbS5jcHAJKHJl
dmlzaW9uIDYwMzQxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1BhdGhTZWdMaXN0Q3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCB1c2luZyBuYW1lc3BhY2Ug
SlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUgSlNTVkdQYXRoU2VnTGlzdDo6
Y2xlYXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWUgSlNTVkdQYXRo
U2VnTGlzdDo6Y2xlYXIoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwogCkBAIC00OSwxMCArNDksMTAgQEAgSlNWYWx1ZSBKU1NWR1BhdGhTZWdMaXN0OjpjbGVh
cihFeGVjU3RhdAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlIEpTU1ZH
UGF0aFNlZ0xpc3Q6OmluaXRpYWxpemUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQorSlNWYWx1ZSBKU1NWR1BhdGhTZWdMaXN0Ojppbml0aWFsaXplKEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBTVkdQYXRoU2VnKiBuZXdJdGVt
ID0gdG9TVkdQYXRoU2VnKGFyZ3MuYXQoMCkpOworICAgIFNWR1BhdGhTZWcqIG5ld0l0ZW0gPSB0
b1NWR1BhdGhTZWcoZXhlYy0+YXJndW1lbnQoMCkpOwogCiAgICAgU1ZHUGF0aFNlZ0xpc3QqIGxp
c3QgPSBpbXBsKCk7CiAKQEAgLTY2LDEyICs2NiwxMiBAQCBKU1ZhbHVlIEpTU1ZHUGF0aFNlZ0xp
c3Q6OmluaXRpYWxpemUoRXhlCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSBKU1NW
R1BhdGhTZWdMaXN0OjpnZXRJdGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJn
cykKK0pTVmFsdWUgSlNTVkdQYXRoU2VnTGlzdDo6Z2V0SXRlbShFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAKICAgICBib29sIGluZGV4T2s7Ci0gICAgdW5z
aWduZWQgaW5kZXggPSBhcmdzLmF0KDApLnRvSW50MzIoZXhlYywgaW5kZXhPayk7CisgICAgdW5z
aWduZWQgaW5kZXggPSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMsIGluZGV4T2spOwog
ICAgIGlmICghaW5kZXhPaykgewogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9N
SVNNQVRDSF9FUlIpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKQEAgLTg2LDEzICs4
NiwxMyBAQCBKU1ZhbHVlIEpTU1ZHUGF0aFNlZ0xpc3Q6OmdldEl0ZW0oRXhlY1N0CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSBKU1NWR1BhdGhTZWdMaXN0OjppbnNlcnRJdGVtQmVm
b3JlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNTVkdQ
YXRoU2VnTGlzdDo6aW5zZXJ0SXRlbUJlZm9yZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgU1ZHUGF0aFNlZyogbmV3SXRlbSA9IHRvU1ZHUGF0aFNl
ZyhhcmdzLmF0KDApKTsKKyAgICBTVkdQYXRoU2VnKiBuZXdJdGVtID0gdG9TVkdQYXRoU2VnKGV4
ZWMtPmFyZ3VtZW50KDApKTsKIAogICAgIGJvb2wgaW5kZXhPazsKLSAgICB1bnNpZ25lZCBpbmRl
eCA9IGFyZ3MuYXQoMSkudG9JbnQzMihleGVjLCBpbmRleE9rKTsKKyAgICB1bnNpZ25lZCBpbmRl
eCA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYywgaW5kZXhPayk7CiAgICAgaWYgKCFp
bmRleE9rKSB7CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VS
Uik7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpAQCAtMTA4LDEzICsxMDgsMTMgQEAg
SlNWYWx1ZSBKU1NWR1BhdGhTZWdMaXN0OjppbnNlcnRJdGVtQmVmbwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLUpTVmFsdWUgSlNTVkdQYXRoU2VnTGlzdDo6cmVwbGFjZUl0ZW0oRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU1NWR1BhdGhTZWdMaXN0Ojpy
ZXBsYWNlSXRlbShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
Ci0gICAgU1ZHUGF0aFNlZyogbmV3SXRlbSA9IHRvU1ZHUGF0aFNlZyhhcmdzLmF0KDApKTsKKyAg
ICBTVkdQYXRoU2VnKiBuZXdJdGVtID0gdG9TVkdQYXRoU2VnKGV4ZWMtPmFyZ3VtZW50KDApKTsK
ICAgICAKICAgICBib29sIGluZGV4T2s7Ci0gICAgdW5zaWduZWQgaW5kZXggPSBhcmdzLmF0KDEp
LnRvSW50MzIoZXhlYywgaW5kZXhPayk7CisgICAgdW5zaWduZWQgaW5kZXggPSBleGVjLT5hcmd1
bWVudCgxKS50b0ludDMyKGV4ZWMsIGluZGV4T2spOwogICAgIGlmICghaW5kZXhPaykgewogICAg
ICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOwogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKQEAgLTEzMCwxMiArMTMwLDEyIEBAIEpTVmFsdWUgSlNTVkdQ
YXRoU2VnTGlzdDo6cmVwbGFjZUl0ZW0oRXgKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1Zh
bHVlIEpTU1ZHUGF0aFNlZ0xpc3Q6OnJlbW92ZUl0ZW0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU1NWR1BhdGhTZWdMaXN0OjpyZW1vdmVJdGVtKEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICAKICAgICBib29s
IGluZGV4T2s7Ci0gICAgdW5zaWduZWQgaW5kZXggPSBhcmdzLmF0KDApLnRvSW50MzIoZXhlYywg
aW5kZXhPayk7CisgICAgdW5zaWduZWQgaW5kZXggPSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMy
KGV4ZWMsIGluZGV4T2spOwogICAgIGlmICghaW5kZXhPaykgewogICAgICAgICBzZXRET01FeGNl
cHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOwogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKQEAgLTE1MywxMCArMTUzLDEwIEBAIEpTVmFsdWUgSlNTVkdQYXRoU2VnTGlzdDo6cmVt
b3ZlSXRlbShFeGUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlIEpTU1ZHUGF0aFNl
Z0xpc3Q6OmFwcGVuZEl0ZW0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQor
SlNWYWx1ZSBKU1NWR1BhdGhTZWdMaXN0OjphcHBlbmRJdGVtKEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBTVkdQYXRoU2VnKiBuZXdJdGVtID0gdG9T
VkdQYXRoU2VnKGFyZ3MuYXQoMCkpOworICAgIFNWR1BhdGhTZWcqIG5ld0l0ZW0gPSB0b1NWR1Bh
dGhTZWcoZXhlYy0+YXJndW1lbnQoMCkpOwogCiAgICAgU1ZHUGF0aFNlZ0xpc3QqIGxpc3QgPSBp
bXBsKCk7CiAgICAgU1ZHRWxlbWVudCogY29udGV4dCA9IEpTU1ZHQ29udGV4dENhY2hlOjpzdmdD
b250ZXh0Rm9yRE9NT2JqZWN0KHRoaXMpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Vp
bnQ4QXJyYXlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNV
aW50OEFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTVWludDhBcnJheUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDkgKzQ2LDkg
QEAgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIAogICAgIHJldHVybiBn
ZXRET01PYmplY3RXcmFwcGVyPEpTVWludDhBcnJheT4oZXhlYywgZ2xvYmFsT2JqZWN0LCBvYmpl
Y3QpOwogfQogCi1KU0M6OkpTVmFsdWUgSlNVaW50OEFycmF5OjpzZXQoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIEpTQzo6QXJnTGlzdCBjb25zdCYgYXJncykKK0pTQzo6SlNWYWx1ZSBKU1VpbnQ4QXJy
YXk6OnNldChKU0M6OkV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gc2V0V2ViR0xBcnJh
eUhlbHBlcihleGVjLCBpbXBsKCksIGFyZ3MsIHRvVWludDhBcnJheSk7CisgICAgcmV0dXJuIHNl
dFdlYkdMQXJyYXlIZWxwZXIoZXhlYywgaW1wbCgpLCB0b1VpbnQ4QXJyYXkpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTVWludDE2QXJy
YXlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNVaW50MTZB
cnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1VpbnQxNkFycmF5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsOSArNDYsOSBAQCBK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgCiAgICAgcmV0dXJuIGdldERP
TU9iamVjdFdyYXBwZXI8SlNVaW50MTZBcnJheT4oZXhlYywgZ2xvYmFsT2JqZWN0LCBvYmplY3Qp
OwogfQogCi1KU0M6OkpTVmFsdWUgSlNVaW50MTZBcnJheTo6c2V0KEpTQzo6RXhlY1N0YXRlKiBl
eGVjLCBKU0M6OkFyZ0xpc3QgY29uc3QmIGFyZ3MpCitKU0M6OkpTVmFsdWUgSlNVaW50MTZBcnJh
eTo6c2V0KEpTQzo6RXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBzZXRXZWJHTEFycmF5
SGVscGVyKGV4ZWMsIGltcGwoKSwgYXJncywgdG9VaW50MTZBcnJheSk7CisgICAgcmV0dXJuIHNl
dFdlYkdMQXJyYXlIZWxwZXIoZXhlYywgaW1wbCgpLCB0b1VpbnQxNkFycmF5KTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1VpbnQzMkFy
cmF5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTVWludDMy
QXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNVaW50MzJBcnJheUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDkgKzQ2LDkgQEAg
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIAogICAgIHJldHVybiBnZXRE
T01PYmplY3RXcmFwcGVyPEpTVWludDMyQXJyYXk+KGV4ZWMsIGdsb2JhbE9iamVjdCwgb2JqZWN0
KTsKIH0KIAotSlNDOjpKU1ZhbHVlIEpTVWludDMyQXJyYXk6OnNldChKU0M6OkV4ZWNTdGF0ZSog
ZXhlYywgSlNDOjpBcmdMaXN0IGNvbnN0JiBhcmdzKQorSlNDOjpKU1ZhbHVlIEpTVWludDMyQXJy
YXk6OnNldChKU0M6OkV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gc2V0V2ViR0xBcnJh
eUhlbHBlcihleGVjLCBpbXBsKCksIGFyZ3MsIHRvVWludDMyQXJyYXkpOworICAgIHJldHVybiBz
ZXRXZWJHTEFycmF5SGVscGVyKGV4ZWMsIGltcGwoKSwgdG9VaW50MzJBcnJheSk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJl
bmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCShyZXZpc2lvbiA2MDM0MSkKKysr
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02NywyMSArNjcsMjEgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpi
dWZmZXJEYXRhKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkFyZ0xpc3QgY29uc3QmIGFyZ3Mp
CitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJEYXRhKEpTQzo6RXhlY1N0
YXRlKiBleGVjKQogewotICAgIGlmIChhcmdzLnNpemUoKSAhPSAzKQorICAgIGlmIChleGVjLT5h
cmd1bWVudENvdW50KCkgIT0gMykKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3lu
dGF4RXJyb3IpOwogCi0gICAgdW5zaWduZWQgdGFyZ2V0ID0gYXJncy5hdCgwKS50b0ludDMyKGV4
ZWMpOwotICAgIHVuc2lnbmVkIHVzYWdlID0gYXJncy5hdCgyKS50b0ludDMyKGV4ZWMpOworICAg
IHVuc2lnbmVkIHRhcmdldCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7CisgICAg
dW5zaWduZWQgdXNhZ2UgPSBleGVjLT5hcmd1bWVudCgyKS50b0ludDMyKGV4ZWMpOwogICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwogCiAgICAgLy8gSWYgYXJndW1lbnQgMSBpcyBhIG51bWJlciwg
d2UgYXJlIGluaXRpYWxpemluZyB0aGlzIGJ1ZmZlciB0byB0aGF0IHNpemUKLSAgICBpZiAoIWFy
Z3MuYXQoMSkuaXNPYmplY3QoKSkgewotICAgICAgICB1bnNpZ25lZCBpbnQgY291bnQgPSBhcmdz
LmF0KDEpLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKCFleGVjLT5hcmd1bWVudCgxKS5pc09iamVj
dCgpKSB7CisgICAgICAgIHVuc2lnbmVkIGludCBjb3VudCA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRv
SW50MzIoZXhlYyk7CiAgICAgICAgIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+
KGltcGwoKSktPmJ1ZmZlckRhdGEodGFyZ2V0LCBjb3VudCwgdXNhZ2UsIGVjKTsKICAgICB9IGVs
c2UgewotICAgICAgICBBcnJheUJ1ZmZlclZpZXcqIGFycmF5ID0gdG9BcnJheUJ1ZmZlclZpZXco
YXJncy5hdCgxKSk7CisgICAgICAgIEFycmF5QnVmZmVyVmlldyogYXJyYXkgPSB0b0FycmF5QnVm
ZmVyVmlldyhleGVjLT5hcmd1bWVudCgxKSk7CiAgICAgICAgIHN0YXRpY19jYXN0PFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCo+KGltcGwoKSktPmJ1ZmZlckRhdGEodGFyZ2V0LCBhcnJheSwgdXNhZ2Us
IGVjKTsKICAgICB9CiAKQEAgLTg5LDE2ICs4OSwxNiBAQCBKU1ZhbHVlIEpTV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpidWZmZXJECiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFs
dWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlclN1YkRhdGEoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIEpTQzo6QXJnTGlzdCBjb25zdCYgYXJncykKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmJ1ZmZlclN1YkRhdGEoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgaWYg
KGFyZ3Muc2l6ZSgpICE9IDMpCisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAzKQog
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7CiAKLSAgICB1bnNp
Z25lZCB0YXJnZXQgPSBhcmdzLmF0KDApLnRvSW50MzIoZXhlYyk7Ci0gICAgdW5zaWduZWQgb2Zm
c2V0ID0gYXJncy5hdCgxKS50b0ludDMyKGV4ZWMpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGV4
ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7CisgICAgdW5zaWduZWQgb2Zmc2V0ID0gZXhl
Yy0+YXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
ICAgICAKLSAgICBBcnJheUJ1ZmZlclZpZXcqIGFycmF5ID0gdG9BcnJheUJ1ZmZlclZpZXcoYXJn
cy5hdCgyKSk7CisgICAgQXJyYXlCdWZmZXJWaWV3KiBhcnJheSA9IHRvQXJyYXlCdWZmZXJWaWV3
KGV4ZWMtPmFyZ3VtZW50KDIpKTsKICAgICAKICAgICBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmlu
Z0NvbnRleHQqPihpbXBsKCkpLT5idWZmZXJTdWJEYXRhKHRhcmdldCwgb2Zmc2V0LCBhcnJheSwg
ZWMpOwogCkBAIC0xNDksMTcgKzE0OSwxNyBAQCBlbnVtIE9iamVjdFR5cGUgewogICAgIGtCdWZm
ZXIsIGtSZW5kZXJidWZmZXIsIGtUZXh0dXJlLCBrVmVydGV4QXR0cmliCiB9OwogCi1zdGF0aWMg
SlNWYWx1ZSBnZXRPYmplY3RQYXJhbWV0ZXIoSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQqIG9iaiwg
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBPYmplY3RUeXBlIG9iamVjdFR5
cGUpCitzdGF0aWMgSlNWYWx1ZSBnZXRPYmplY3RQYXJhbWV0ZXIoSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHQqIG9iaiwgRXhlY1N0YXRlKiBleGVjLCBPYmplY3RUeXBlIG9iamVjdFR5cGUpCiB7Ci0g
ICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDIpCisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAh
PSAyKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7CiAKICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRl
eHQgPSBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihvYmotPmltcGwoKSk7Ci0g
ICAgdW5zaWduZWQgdGFyZ2V0ID0gYXJncy5hdCgwKS50b0ludDMyKGV4ZWMpOworICAgIHVuc2ln
bmVkIHRhcmdldCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7CiAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB1
bnNpZ25lZCBwbmFtZSA9IGFyZ3MuYXQoMSkudG9JbnQzMihleGVjKTsKKyAgICB1bnNpZ25lZCBw
bmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBXZWJHTEdl
dEluZm8gaW5mbzsKQEAgLTE5MiwyNSArMTkyLDI1IEBAIGVudW0gV2hpY2hQcm9ncmFtQ2FsbCB7
CiAgICAga1Byb2dyYW1QYXJhbWV0ZXIsIGtVbmlmb3JtCiB9OwogCi1KU1ZhbHVlIEpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpnZXRCdWZmZXJQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QnVm
ZmVyUGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gZ2V0T2JqZWN0UGFy
YW1ldGVyKHRoaXMsIGV4ZWMsIGFyZ3MsIGtCdWZmZXIpOworICAgIHJldHVybiBnZXRPYmplY3RQ
YXJhbWV0ZXIodGhpcywgZXhlYywga0J1ZmZlcik7CiB9CiAKLUpTVmFsdWUgSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQog
ewotICAgIGlmIChhcmdzLnNpemUoKSAhPSAzKQorICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50
KCkgIT0gMykKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOwog
CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBj
b250ZXh0ID0gc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4oaW1wbCgpKTsKLSAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBhcmdzLmF0KDApLnRvSW50MzIoZXhlYyk7CisgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIHVu
c2lnbmVkIGF0dGFjaG1lbnQgPSBhcmdzLmF0KDEpLnRvSW50MzIoZXhlYyk7CisgICAgdW5zaWdu
ZWQgYXR0YWNobWVudCA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7CiAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAg
ICB1bnNpZ25lZCBwbmFtZSA9IGFyZ3MuYXQoMikudG9JbnQzMihleGVjKTsKKyAgICB1bnNpZ25l
ZCBwbmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDIpLnRvSW50MzIoZXhlYyk7CiAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBXZWJH
TEdldEluZm8gaW5mbyA9IGNvbnRleHQtPmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRl
cih0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCBlYyk7CkBAIC0yMjEsMTQgKzIyMSwxNCBAQCBK
U1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRGcmFtCiAgICAgcmV0dXJuIHRvSlMo
ZXhlYywgZ2xvYmFsT2JqZWN0KCksIGluZm8pOwogfQogCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQorSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UGFyYW1ldGVyKEV4ZWNT
dGF0ZSogZXhlYykKIHsKLSAgICBpZiAoYXJncy5zaXplKCkgIT0gMSkKKyAgICBpZiAoZXhlYy0+
YXJndW1lbnRDb3VudCgpICE9IDEpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5
bnRheEVycm9yKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFdlYkdMUmVuZGVy
aW5nQ29udGV4dCogY29udGV4dCA9IHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+
KGltcGwoKSk7Ci0gICAgdW5zaWduZWQgcG5hbWUgPSBhcmdzLmF0KDApLnRvSW50MzIoZXhlYyk7
CisgICAgdW5zaWduZWQgcG5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOwog
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LT5nZXRQYXJhbWV0ZXIocG5hbWUs
IGVjKTsKQEAgLTIzOSwxNSArMjM5LDE1IEBAIEpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmdldFBhcmEKICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7
CiB9CiAKLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFByb2dyYW1QYXJhbWV0
ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU1dlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0UHJvZ3JhbVBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCiB7
Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDIpCisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQo
KSAhPSAyKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7CiAK
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNv
bnRleHQgPSBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihpbXBsKCkpOwotICAg
IFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSA9IHRvV2ViR0xQcm9ncmFtKGFyZ3MuYXQoMCkpOwotICAg
IHVuc2lnbmVkIHBuYW1lID0gYXJncy5hdCgxKS50b0ludDMyKGV4ZWMpOworICAgIFdlYkdMUHJv
Z3JhbSogcHJvZ3JhbSA9IHRvV2ViR0xQcm9ncmFtKGV4ZWMtPmFyZ3VtZW50KDApKTsKKyAgICB1
bnNpZ25lZCBwbmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7CiAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICBXZWJHTEdldEluZm8gaW5mbyA9IGNvbnRleHQtPmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3Jh
bSwgcG5hbWUsIGVjKTsKQEAgLTI1OCwyMCArMjU4LDIwIEBAIEpTVmFsdWUgSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmdldFByb2cKICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3Qo
KSwgaW5mbyk7CiB9CiAKLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFJlbmRl
cmJ1ZmZlclBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitK
U1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIo
RXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBnZXRPYmplY3RQYXJhbWV0ZXIodGhpcywg
ZXhlYywgYXJncywga1JlbmRlcmJ1ZmZlcik7CisgICAgcmV0dXJuIGdldE9iamVjdFBhcmFtZXRl
cih0aGlzLCBleGVjLCBrUmVuZGVyYnVmZmVyKTsKIH0KIAotSlNWYWx1ZSBKU1dlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Z2V0U2hhZGVyUGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJn
TGlzdCYgYXJncykKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFNoYWRlclBh
cmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDIpCisg
ICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAyKQogICAgICAgICByZXR1cm4gdGhyb3dF
cnJvcihleGVjLCBTeW50YXhFcnJvcik7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAg
ICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPSBzdGF0aWNfY2FzdDxXZWJHTFJlbmRl
cmluZ0NvbnRleHQqPihpbXBsKCkpOwotICAgIFdlYkdMU2hhZGVyKiBzaGFkZXIgPSB0b1dlYkdM
U2hhZGVyKGFyZ3MuYXQoMCkpOwotICAgIHVuc2lnbmVkIHBuYW1lID0gYXJncy5hdCgxKS50b0lu
dDMyKGV4ZWMpOworICAgIFdlYkdMU2hhZGVyKiBzaGFkZXIgPSB0b1dlYkdMU2hhZGVyKGV4ZWMt
PmFyZ3VtZW50KDApKTsKKyAgICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRv
SW50MzIoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKICAgICBXZWJHTEdldEluZm8gaW5mbyA9IGNvbnRleHQtPmdldFNo
YWRlclBhcmFtZXRlcihzaGFkZXIsIHBuYW1lLCBlYyk7CkBAIC0yODIsMjAgKzI4MiwyMCBAQCBK
U1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkCiAgICAgcmV0dXJuIHRvSlMo
ZXhlYywgZ2xvYmFsT2JqZWN0KCksIGluZm8pOwogfQogCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRUZXhQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQorSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VGV4UGFyYW1ldGVy
KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gZ2V0T2JqZWN0UGFyYW1ldGVyKHRoaXMs
IGV4ZWMsIGFyZ3MsIGtUZXh0dXJlKTsKKyAgICByZXR1cm4gZ2V0T2JqZWN0UGFyYW1ldGVyKHRo
aXMsIGV4ZWMsIGtUZXh0dXJlKTsKIH0KIAotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Z2V0VW5pZm9ybShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1Zh
bHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVbmlmb3JtKEV4ZWNTdGF0ZSogZXhlYykK
IHsKLSAgICBpZiAoYXJncy5zaXplKCkgIT0gMikKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3Vu
dCgpICE9IDIpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yKTsK
IAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCog
Y29udGV4dCA9IHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KGltcGwoKSk7Ci0g
ICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0gdG9XZWJHTFByb2dyYW0oYXJncy5hdCgwKSk7Ci0g
ICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvYyA9IHRvV2ViR0xVbmlmb3JtTG9jYXRpb24oYXJn
cy5hdCgxKSk7CisgICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0gdG9XZWJHTFByb2dyYW0oZXhl
Yy0+YXJndW1lbnQoMCkpOworICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2MgPSB0b1dlYkdM
VW5pZm9ybUxvY2F0aW9uKGV4ZWMtPmFyZ3VtZW50KDEpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIFdlYkdMR2V0SW5m
byBpbmZvID0gY29udGV4dC0+Z2V0VW5pZm9ybShwcm9ncmFtLCBsb2MsIGVjKTsKQEAgLTMwNiw5
ICszMDYsOSBAQCBKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVbmlmCiAgICAg
cmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGluZm8pOwogfQogCi1KU1ZhbHVlIEpT
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWIoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
VmVydGV4QXR0cmliKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gZ2V0T2JqZWN0UGFy
YW1ldGVyKHRoaXMsIGV4ZWMsIGFyZ3MsIGtWZXJ0ZXhBdHRyaWIpOworICAgIHJldHVybiBnZXRP
YmplY3RQYXJhbWV0ZXIodGhpcywgZXhlYywga1ZlcnRleEF0dHJpYik7CiB9CiAKIC8vICAgdm9p
ZCB0ZXhJbWFnZTJEKGluIEdMZW51bSB0YXJnZXQsIGluIEdMaW50IGxldmVsLCBpbiBHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIGluIEdMc2l6ZWkgd2lkdGgsIGluIEdMc2l6ZWkgaGVpZ2h0LCBpbiBH
TGludCBib3JkZXIsIGluIEdMZW51bSBmb3JtYXQsIGluIEdMZW51bSB0eXBlLCBpbiBBcnJheUJ1
ZmZlclZpZXcgcGl4ZWxzKTsKQEAgLTMxNiwzNSArMzE2LDM1IEBAIEpTVmFsdWUgSlNXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmdldFZlcnQKIC8vICAgdm9pZCB0ZXhJbWFnZTJEKGluIEdMZW51bSB0
YXJnZXQsIGluIEdMaW50IGxldmVsLCBpbiBIVE1MSW1hZ2VFbGVtZW50IGltYWdlLCBbT3B0aW9u
YWxdIGluIEdMYm9vbGVhbiBmbGlwWSwgW09wdGlvbmFsXSBpbiBwcmVtdWx0aXBseUFscGhhKTsK
IC8vICAgdm9pZCB0ZXhJbWFnZTJEKGluIEdMZW51bSB0YXJnZXQsIGluIEdMaW50IGxldmVsLCBp
biBIVE1MQ2FudmFzRWxlbWVudCBjYW52YXMsIFtPcHRpb25hbF0gaW4gR0xib29sZWFuIGZsaXBZ
LCBbT3B0aW9uYWxdIGluIHByZW11bHRpcGx5QWxwaGEpOwogLy8gICB2b2lkIHRleEltYWdlMkQo
aW4gR0xlbnVtIHRhcmdldCwgaW4gR0xpbnQgbGV2ZWwsIGluIEhUTUxWaWRlb0VsZW1lbnQgdmlk
ZW8sIFtPcHRpb25hbF0gaW4gR0xib29sZWFuIGZsaXBZLCBbT3B0aW9uYWxdIGluIHByZW11bHRp
cGx5QWxwaGEpOwotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKEV4ZWNTdGF0ZSogZXhlYykKIHsgCi0gICAgaWYgKGFy
Z3Muc2l6ZSgpIDwgMyB8fCBhcmdzLnNpemUoKSA+IDkpCisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSA8IDMgfHwgZXhlYy0+YXJndW1lbnRDb3VudCgpID4gOSkKICAgICAgICAgcmV0dXJu
IHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CiAgICAgCiAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0ID0gc3RhdGljX2Nh
c3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4oaW1wbCgpKTsgICAgCi0gICAgdW5zaWduZWQgdGFy
Z2V0ID0gYXJncy5hdCgwKS50b0ludDMyKGV4ZWMpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGV4
ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKSAgICAKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgCi0gICAgdW5zaWdu
ZWQgbGV2ZWwgPSBhcmdzLmF0KDEpLnRvSW50MzIoZXhlYyk7CisgICAgdW5zaWduZWQgbGV2ZWwg
PSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkgICAgCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgSlNPYmpl
Y3QqIG8gPSAwOwogICAgIAotICAgIGlmIChhcmdzLnNpemUoKSA8PSA1KSB7CisgICAgaWYgKGV4
ZWMtPmFyZ3VtZW50Q291bnQoKSA8PSA1KSB7CiAgICAgICAgIC8vIFRoaXMgaXMgb25lIG9mIHRo
ZSBsYXN0IDQgZm9ybXMuIFBhcmFtIDIgY2FuIGJlIEltYWdlRGF0YSBvciA8aW1nPiwgPGNhbnZh
cz4gb3IgPHZpZGVvPiBlbGVtZW50LgotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gYXJncy5hdCgy
KTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDIpOwogICAgIAogICAg
ICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJv
cihleGVjLCBUeXBlRXJyb3IpOwogICAgICAgICAKICAgICAgICAgbyA9IGFzT2JqZWN0KHZhbHVl
KTsKICAgICAgICAgCi0gICAgICAgIGJvb2wgZmxpcFkgPSBhcmdzLmF0KDMpLnRvQm9vbGVhbihl
eGVjKTsKLSAgICAgICAgYm9vbCBwcmVtdWx0aXBseUFscGhhID0gYXJncy5hdCg0KS50b0Jvb2xl
YW4oZXhlYyk7CisgICAgICAgIGJvb2wgZmxpcFkgPSBleGVjLT5hcmd1bWVudCgzKS50b0Jvb2xl
YW4oZXhlYyk7CisgICAgICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSA9IGV4ZWMtPmFyZ3VtZW50
KDQpLnRvQm9vbGVhbihleGVjKTsKICAgICAgICAgCiAgICAgICAgIGlmIChvLT5pbmhlcml0cygm
SlNJbWFnZURhdGE6OnNfaW5mbykpIHsKICAgICAgICAgICAgIEltYWdlRGF0YSogZGF0YSA9IHN0
YXRpY19jYXN0PEltYWdlRGF0YSo+KHN0YXRpY19jYXN0PEpTSW1hZ2VEYXRhKj4obyktPmltcGwo
KSk7CkBAIC0zNjMsMzUgKzM2MywzNSBAQCBKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp0ZXhJbWFnCiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgZWMgPSBUWVBFX01JU01BVENI
X0VSUjsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAoYXJncy5zaXplKCkgIT0gOSkKKyAgICAg
ICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSA5KQogICAgICAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOwogCiAgICAgICAgIC8vIFRoaXMgbXVzdCBiZSB0
aGUgQXJyYXlCdWZmZXJWaWV3IGNhc2UKLSAgICAgICAgdW5zaWduZWQgaW50ZXJuYWxmb3JtYXQg
PSBhcmdzLmF0KDIpLnRvSW50MzIoZXhlYyk7CisgICAgICAgIHVuc2lnbmVkIGludGVybmFsZm9y
bWF0ID0gZXhlYy0+YXJndW1lbnQoMikudG9JbnQzMihleGVjKTsKICAgICAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKSAgICAKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
Ci0gICAgICAgIHVuc2lnbmVkIHdpZHRoID0gYXJncy5hdCgzKS50b0ludDMyKGV4ZWMpOworICAg
ICAgICB1bnNpZ25lZCB3aWR0aCA9IGV4ZWMtPmFyZ3VtZW50KDMpLnRvSW50MzIoZXhlYyk7CiAg
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgICAgCiAgICAgICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIAotICAgICAgICB1bnNpZ25lZCBoZWlnaHQgPSBhcmdzLmF0KDQpLnRv
SW50MzIoZXhlYyk7CisgICAgICAgIHVuc2lnbmVkIGhlaWdodCA9IGV4ZWMtPmFyZ3VtZW50KDQp
LnRvSW50MzIoZXhlYyk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgICAgCiAg
ICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgICAgICB1bnNpZ25lZCBib3Jk
ZXIgPSBhcmdzLmF0KDUpLnRvSW50MzIoZXhlYyk7CisgICAgICAgIHVuc2lnbmVkIGJvcmRlciA9
IGV4ZWMtPmFyZ3VtZW50KDUpLnRvSW50MzIoZXhlYyk7CiAgICAgICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkgICAgCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAg
ICAgICB1bnNpZ25lZCBmb3JtYXQgPSBhcmdzLmF0KDYpLnRvSW50MzIoZXhlYyk7CisgICAgICAg
IHVuc2lnbmVkIGZvcm1hdCA9IGV4ZWMtPmFyZ3VtZW50KDYpLnRvSW50MzIoZXhlYyk7CiAgICAg
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgICAgCiAgICAgICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIAotICAgICAgICB1bnNpZ25lZCB0eXBlID0gYXJncy5hdCg3KS50b0ludDMy
KGV4ZWMpOworICAgICAgICB1bnNpZ25lZCB0eXBlID0gZXhlYy0+YXJndW1lbnQoNykudG9JbnQz
MihleGVjKTsKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAKICAgICAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBhcmdz
LmF0KDgpOworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+YXJndW1lbnQoOCk7CiAgICAg
ICAgICAgICAKICAgICAgICAgLy8gRm9yIHRoaXMgY2FzZSBwYXNzaW5nIDAgKGZvciBhIG51bGwg
YXJyYXkpIGlzIGFsbG93ZWQKICAgICAgICAgaWYgKHZhbHVlLmlzTnVsbCgpKQpAQCAtNDE5LDQz
ICs0MTksNDMgQEAgSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZwogLy8g
ICB2b2lkIHRleFN1YkltYWdlMkQoaW4gR0xlbnVtIHRhcmdldCwgaW4gR0xpbnQgbGV2ZWwsIGlu
IEdMaW50IHhvZmZzZXQsIGluIEdMaW50IHlvZmZzZXQsIGluIEhUTUxJbWFnZUVsZW1lbnQgaW1h
Z2UsIFtPcHRpb25hbF0gR0xib29sZWFuIGZsaXBZLCBbT3B0aW9uYWxdIGluIHByZW11bHRpcGx5
QWxwaGEpOwogLy8gICB2b2lkIHRleFN1YkltYWdlMkQoaW4gR0xlbnVtIHRhcmdldCwgaW4gR0xp
bnQgbGV2ZWwsIGluIEdMaW50IHhvZmZzZXQsIGluIEdMaW50IHlvZmZzZXQsIGluIEhUTUxDYW52
YXNFbGVtZW50IGNhbnZhcywgW09wdGlvbmFsXSBHTGJvb2xlYW4gZmxpcFksIFtPcHRpb25hbF0g
aW4gcHJlbXVsdGlwbHlBbHBoYSk7CiAvLyAgIHZvaWQgdGV4U3ViSW1hZ2UyRChpbiBHTGVudW0g
dGFyZ2V0LCBpbiBHTGludCBsZXZlbCwgaW4gR0xpbnQgeG9mZnNldCwgaW4gR0xpbnQgeW9mZnNl
dCwgaW4gSFRNTFZpZGVvRWxlbWVudCB2aWRlbywgW09wdGlvbmFsXSBHTGJvb2xlYW4gZmxpcFks
IFtPcHRpb25hbF0gaW4gcHJlbXVsdGlwbHlBbHBoYSk7Ci1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYg
YXJncykKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoRXhl
Y1N0YXRlKiBleGVjKQogeyAKLSAgICBpZiAoYXJncy5zaXplKCkgPCA1IHx8IGFyZ3Muc2l6ZSgp
ID4gOSkKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgNSB8fCBleGVjLT5hcmd1bWVu
dENvdW50KCkgPiA5KQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJv
cik7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKIAogICAgIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dCogY29udGV4dCA9IHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KGltcGwo
KSk7ICAgIAotICAgIHVuc2lnbmVkIHRhcmdldCA9IGFyZ3MuYXQoMCkudG9JbnQzMihleGVjKTsK
KyAgICB1bnNpZ25lZCB0YXJnZXQgPSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOwog
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgICAgCiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogCi0gICAgdW5zaWduZWQgbGV2ZWwgPSBhcmdzLmF0KDEpLnRvSW50MzIoZXhlYyk7
CisgICAgdW5zaWduZWQgbGV2ZWwgPSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwog
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgICAgCiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogICAgIAotICAgIHVuc2lnbmVkIHhvZmYgPSBhcmdzLmF0KDIpLnRvSW50MzIoZXhl
Yyk7CisgICAgdW5zaWduZWQgeG9mZiA9IGV4ZWMtPmFyZ3VtZW50KDIpLnRvSW50MzIoZXhlYyk7
CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAgICAgCi0gICAgdW5zaWduZWQgeW9mZiA9IGFyZ3MuYXQoMykudG9JbnQzMihl
eGVjKTsKKyAgICB1bnNpZ25lZCB5b2ZmID0gZXhlYy0+YXJndW1lbnQoMykudG9JbnQzMihleGVj
KTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpICAgIAogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgICAKICAgICBKU09iamVjdCogbyA9IDA7CiAgICAgICAgIAotICAgIGlm
IChhcmdzLnNpemUoKSA8PSA3KSB7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8PSA3
KSB7CiAgICAgICAgIC8vIFRoaXMgaXMgb25lIG9mIHRoZSBsYXN0IDQgZm9ybXMuIFBhcmFtIDQg
Y2FuIGJlIDxpbWc+LCA8Y2FudmFzPiBvciA8dmlkZW8+IGVsZW1lbnQsIG9mIHRoZSBmb3JtYXQg
cGFyYW0uCi0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBhcmdzLmF0KDQpOworICAgICAgICBKU1Zh
bHVlIHZhbHVlID0gZXhlYy0+YXJndW1lbnQoNCk7CiAKICAgICAgICAgaWYgKCF2YWx1ZS5pc09i
amVjdCgpKQogICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3Ip
OwogCiAgICAgICAgIG8gPSBhc09iamVjdCh2YWx1ZSk7CiAKLSAgICAgICAgYm9vbCBmbGlwWSA9
IGFyZ3MuYXQoNSkudG9Cb29sZWFuKGV4ZWMpOwotICAgICAgICBib29sIHByZW11bHRpcGx5QWxw
aGEgPSBhcmdzLmF0KDYpLnRvQm9vbGVhbihleGVjKTsKKyAgICAgICAgYm9vbCBmbGlwWSA9IGV4
ZWMtPmFyZ3VtZW50KDUpLnRvQm9vbGVhbihleGVjKTsKKyAgICAgICAgYm9vbCBwcmVtdWx0aXBs
eUFscGhhID0gZXhlYy0+YXJndW1lbnQoNikudG9Cb29sZWFuKGV4ZWMpOwogICAgICAgICAKICAg
ICAgICAgaWYgKG8tPmluaGVyaXRzKCZKU0ltYWdlRGF0YTo6c19pbmZvKSkgewogICAgICAgICAg
ICAgSW1hZ2VEYXRhKiBkYXRhID0gc3RhdGljX2Nhc3Q8SW1hZ2VEYXRhKj4oc3RhdGljX2Nhc3Q8
SlNJbWFnZURhdGEqPihvKS0+aW1wbCgpKTsKQEAgLTQ3NSwyNiArNDc1LDI2IEBAIEpTVmFsdWUg
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkkKICAgICAgICAgICAgIGVjID0gVFlQRV9N
SVNNQVRDSF9FUlI7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gVGhpcyBtdXN0IGJlIHRoZSBB
cnJheUJ1ZmZlclZpZXcgZm9ybQotICAgICAgICBpZiAoYXJncy5zaXplKCkgIT0gOSkKKyAgICAg
ICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSA5KQogICAgICAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOwogCi0gICAgICAgIHVuc2lnbmVkIHdpZHRoID0g
YXJncy5hdCg0KS50b0ludDMyKGV4ZWMpOworICAgICAgICB1bnNpZ25lZCB3aWR0aCA9IGV4ZWMt
PmFyZ3VtZW50KDQpLnRvSW50MzIoZXhlYyk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkgICAgCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgCi0g
ICAgICAgIHVuc2lnbmVkIGhlaWdodCA9IGFyZ3MuYXQoNSkudG9JbnQzMihleGVjKTsKKyAgICAg
ICAgdW5zaWduZWQgaGVpZ2h0ID0gZXhlYy0+YXJndW1lbnQoNSkudG9JbnQzMihleGVjKTsKICAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAKICAgICAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgZm9ybWF0ID0gYXJncy5h
dCg2KS50b0ludDMyKGV4ZWMpOworICAgICAgICB1bnNpZ25lZCBmb3JtYXQgPSBleGVjLT5hcmd1
bWVudCg2KS50b0ludDMyKGV4ZWMpOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
ICAgIAogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIAotICAgICAg
ICB1bnNpZ25lZCB0eXBlID0gYXJncy5hdCg3KS50b0ludDMyKGV4ZWMpOworICAgICAgICB1bnNp
Z25lZCB0eXBlID0gZXhlYy0+YXJndW1lbnQoNykudG9JbnQzMihleGVjKTsKICAgICAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogICAgICAgICAKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGFyZ3MuYXQoOCk7CisgICAg
ICAgIEpTVmFsdWUgdmFsdWUgPSBleGVjLT5hcmd1bWVudCg4KTsKICAgICAgICAgaWYgKCF2YWx1
ZS5pc09iamVjdCgpKQogICAgICAgICAgICAgY29udGV4dC0+dGV4U3ViSW1hZ2UyRCh0YXJnZXQs
IGxldmVsLCB4b2ZmLCB5b2ZmLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIDAsIGVjKTsK
ICAgICAgICAgZWxzZSB7CkBAIC01NTUsMjMgKzU1NSwyMyBAQCBzdGF0aWMgYm9vbCBmdW5jdGlv
bkZvclVuaWZvcm0oRGF0YUZ1bmN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgSlND
OjpKU1ZhbHVlIGRhdGFGdW5jdGlvbmYoRGF0YUZ1bmN0aW9uVG9DYWxsIGYsIEpTQzo6RXhlY1N0
YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MsIFdlYkdMUmVuZGVyaW5nQ29udGV4
dCogY29udGV4dCkKK3N0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uZihEYXRhRnVuY3Rp
b25Ub0NhbGwgZiwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFdlYkdMUmVuZGVyaW5nQ29udGV4dCog
Y29udGV4dCkKIHsKLSAgICBpZiAoYXJncy5zaXplKCkgIT0gMikKKyAgICBpZiAoZXhlYy0+YXJn
dW1lbnRDb3VudCgpICE9IDIpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRh
eEVycm9yKTsKICAgICAKICAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24gPSAwOwog
ICAgIGxvbmcgaW5kZXggPSAtMTsKICAgICAKICAgICBpZiAoZnVuY3Rpb25Gb3JVbmlmb3JtKGYp
KQotICAgICAgICBsb2NhdGlvbiA9IHRvV2ViR0xVbmlmb3JtTG9jYXRpb24oYXJncy5hdCgwKSk7
CisgICAgICAgIGxvY2F0aW9uID0gdG9XZWJHTFVuaWZvcm1Mb2NhdGlvbihleGVjLT5hcmd1bWVu
dCgwKSk7CiAgICAgZWxzZQotICAgICAgICBpbmRleCA9IGFyZ3MuYXQoMCkudG9JbnQzMihleGVj
KTsKKyAgICAgICAgaW5kZXggPSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOwogCiAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKICAgICAgICAgCi0gICAgUmVmUHRyPEZsb2F0QXJyYXk+IHdlYkdMQXJyYXkgPSB0b0Zsb2F0
QXJyYXkoYXJncy5hdCgxKSk7CisgICAgUmVmUHRyPEZsb2F0QXJyYXk+IHdlYkdMQXJyYXkgPSB0
b0Zsb2F0QXJyYXkoZXhlYy0+YXJndW1lbnQoMSkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkgICAgCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICAKQEAgLTYw
OSw3ICs2MDksNyBAQCBzdGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbmYoRGF0YUZ1CiAg
ICAgfQogCiAgICAgVmVjdG9yPGZsb2F0LCA2ND4gYXJyYXk7Ci0gICAgaWYgKCF0b1ZlY3Rvcihl
eGVjLCBhcmdzLmF0KDEpLCBhcnJheSkpCisgICAgaWYgKCF0b1ZlY3RvcihleGVjLCBleGVjLT5h
cmd1bWVudCgxKSwgYXJyYXkpKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBl
RXJyb3IpOwogCiAgICAgc3dpdGNoIChmKSB7CkBAIC02NDMsMTcgKzY0MywxNyBAQCBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbmYoRGF0YUZ1CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiB9CiAKLXN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uaShEYXRhRnVuY3Rpb25U
b0NhbGwgZiwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncywg
V2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQorc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRh
RnVuY3Rpb25pKERhdGFGdW5jdGlvblRvQ2FsbCBmLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQogewotICAgIGlmIChhcmdzLnNpemUoKSAhPSAy
KQorICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMikKICAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOwogCi0gICAgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IGxvY2F0aW9uID0gdG9XZWJHTFVuaWZvcm1Mb2NhdGlvbihhcmdzLmF0KDApKTsKKyAgICBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24gPSB0b1dlYkdMVW5pZm9ybUxvY2F0aW9uKGV4ZWMt
PmFyZ3VtZW50KDApKTsKICAgCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgCi0gICAgUmVmUHRyPEludDMyQXJyYXk+
IHdlYkdMQXJyYXkgPSB0b0ludDMyQXJyYXkoYXJncy5hdCgxKSk7CisgICAgUmVmUHRyPEludDMy
QXJyYXk+IHdlYkdMQXJyYXkgPSB0b0ludDMyQXJyYXkoZXhlYy0+YXJndW1lbnQoMSkpOwogICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgICAgCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogICAgICAgICAKQEAgLTY4Miw3ICs2ODIsNyBAQCBzdGF0aWMgSlNDOjpKU1ZhbHVlIGRh
dGFGdW5jdGlvbmkoRGF0YUZ1CiAKIAogICAgIFZlY3RvcjxpbnQsIDY0PiBhcnJheTsKLSAgICBp
ZiAoIXRvVmVjdG9yKGV4ZWMsIGFyZ3MuYXQoMSksIGFycmF5KSkKKyAgICBpZiAoIXRvVmVjdG9y
KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDEpLCBhcnJheSkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKICAgICBzd2l0Y2ggKGYpIHsKQEAgLTcwNiwyMSArNzA2
LDIxIEBAIHN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uaShEYXRhRnUKICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25N
YXRyaXgoRGF0YUZ1bmN0aW9uTWF0cml4VG9DYWxsIGYsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBj
b25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MsIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkK
K3N0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uTWF0cml4KERhdGFGdW5jdGlvbk1hdHJp
eFRvQ2FsbCBmLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBj
b250ZXh0KQogewotICAgIGlmIChhcmdzLnNpemUoKSAhPSAzKQorICAgIGlmIChleGVjLT5hcmd1
bWVudENvdW50KCkgIT0gMykKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4
RXJyb3IpOwogCi0gICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uID0gdG9XZWJHTFVu
aWZvcm1Mb2NhdGlvbihhcmdzLmF0KDApKTsKKyAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24gPSB0b1dlYkdMVW5pZm9ybUxvY2F0aW9uKGV4ZWMtPmFyZ3VtZW50KDApKTsKIAogICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgICAgCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogICAgICAgICAKLSAgICBib29sIHRyYW5zcG9zZSA9IGFyZ3MuYXQoMSkudG9Cb29sZWFu
KGV4ZWMpOworICAgIGJvb2wgdHJhbnNwb3NlID0gZXhlYy0+YXJndW1lbnQoMSkudG9Cb29sZWFu
KGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgICAgCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogICAgICAgICAKLSAgICBSZWZQdHI8RmxvYXRBcnJheT4gd2ViR0xB
cnJheSA9IHRvRmxvYXRBcnJheShhcmdzLmF0KDIpKTsKKyAgICBSZWZQdHI8RmxvYXRBcnJheT4g
d2ViR0xBcnJheSA9IHRvRmxvYXRBcnJheShleGVjLT5hcmd1bWVudCgyKSk7CiAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAg
ICAgICAgIApAQCAtNzQzLDcgKzc0Myw3IEBAIHN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0
aW9uTWF0cml4KEQKICAgICB9CiAKICAgICBWZWN0b3I8ZmxvYXQsIDY0PiBhcnJheTsKLSAgICBp
ZiAoIXRvVmVjdG9yKGV4ZWMsIGFyZ3MuYXQoMiksIGFycmF5KSkKKyAgICBpZiAoIXRvVmVjdG9y
KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDIpLCBhcnJheSkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKICAgICBzd2l0Y2ggKGYpIHsKQEAgLTc2Miw3OSArNzYy
LDc5IEBAIHN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uTWF0cml4KEQKICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp1bmlmb3JtMWZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3Qm
IGFyZ3MpCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZnYo
SlNDOjpFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl91bmlm
b3JtMXYsIGV4ZWMsIGFyZ3MsIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KGlt
cGwoKSkpOworICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdW5pZm9ybTF2LCBleGVjLCBzdGF0
aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihpbXBsKCkpKTsKIH0KIAotSlNDOjpKU1Zh
bHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWl2KEpTQzo6RXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MpCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnVuaWZvcm0xaXYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0
dXJuIGRhdGFGdW5jdGlvbmkoZl91bmlmb3JtMXYsIGV4ZWMsIGFyZ3MsIHN0YXRpY19jYXN0PFdl
YkdMUmVuZGVyaW5nQ29udGV4dCo+KGltcGwoKSkpOworICAgIHJldHVybiBkYXRhRnVuY3Rpb25p
KGZfdW5pZm9ybTF2LCBleGVjLCBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihp
bXBsKCkpKTsKIH0KIAotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlm
b3JtMmZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MpCitK
U0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZnYoSlNDOjpFeGVj
U3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl91bmlmb3JtMnYsIGV4
ZWMsIGFyZ3MsIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KGltcGwoKSkpOwor
ICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdW5pZm9ybTJ2LCBleGVjLCBzdGF0aWNfY2FzdDxX
ZWJHTFJlbmRlcmluZ0NvbnRleHQqPihpbXBsKCkpKTsKIH0KIAotSlNDOjpKU1ZhbHVlIEpTV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMml2KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25z
dCBKU0M6OkFyZ0xpc3QmIGFyZ3MpCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnVuaWZvcm0yaXYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGRhdGFG
dW5jdGlvbmkoZl91bmlmb3JtMnYsIGV4ZWMsIGFyZ3MsIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVy
aW5nQ29udGV4dCo+KGltcGwoKSkpOworICAgIHJldHVybiBkYXRhRnVuY3Rpb25pKGZfdW5pZm9y
bTJ2LCBleGVjLCBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihpbXBsKCkpKTsK
IH0KIAotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2Z2KEpT
Qzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MpCitKU0M6OkpTVmFs
dWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZnYoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMpCiB7Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl91bmlmb3JtM3YsIGV4ZWMsIGFyZ3Ms
IHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KGltcGwoKSkpOworICAgIHJldHVy
biBkYXRhRnVuY3Rpb25mKGZfdW5pZm9ybTN2LCBleGVjLCBzdGF0aWNfY2FzdDxXZWJHTFJlbmRl
cmluZ0NvbnRleHQqPihpbXBsKCkpKTsKIH0KIAotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp1bmlmb3JtM2l2KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFy
Z0xpc3QmIGFyZ3MpCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZv
cm0zaXYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmko
Zl91bmlmb3JtM3YsIGV4ZWMsIGFyZ3MsIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4
dCo+KGltcGwoKSkpOworICAgIHJldHVybiBkYXRhRnVuY3Rpb25pKGZfdW5pZm9ybTN2LCBleGVj
LCBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihpbXBsKCkpKTsKIH0KIAotSlND
OjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGZ2KEpTQzo6RXhlY1N0
YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MpCitKU0M6OkpTVmFsdWUgSlNXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00ZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0g
ICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl91bmlmb3JtNHYsIGV4ZWMsIGFyZ3MsIHN0YXRpY19j
YXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KGltcGwoKSkpOworICAgIHJldHVybiBkYXRhRnVu
Y3Rpb25mKGZfdW5pZm9ybTR2LCBleGVjLCBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRl
eHQqPihpbXBsKCkpKTsKIH0KIAotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtNGl2KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFy
Z3MpCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aXYoSlND
OjpFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91bmlmb3Jt
NHYsIGV4ZWMsIGFyZ3MsIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KGltcGwo
KSkpOworICAgIHJldHVybiBkYXRhRnVuY3Rpb25pKGZfdW5pZm9ybTR2LCBleGVjLCBzdGF0aWNf
Y2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihpbXBsKCkpKTsKIH0KIAotSlNDOjpKU1ZhbHVl
IEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MpCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgyZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCiB7
Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbk1hdHJpeChmX3VuaWZvcm1NYXRyaXgyZnYsIGV4ZWMs
IGFyZ3MsIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KGltcGwoKSkpOworICAg
IHJldHVybiBkYXRhRnVuY3Rpb25NYXRyaXgoZl91bmlmb3JtTWF0cml4MmZ2LCBleGVjLCBzdGF0
aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihpbXBsKCkpKTsKIH0KIAotSlNDOjpKU1Zh
bHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4M2Z2KEpTQzo6RXhlY1N0
YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MpCitKU0M6OkpTVmFsdWUgSlNXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgzZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMp
CiB7Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbk1hdHJpeChmX3VuaWZvcm1NYXRyaXgzZnYsIGV4
ZWMsIGFyZ3MsIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KGltcGwoKSkpOwor
ICAgIHJldHVybiBkYXRhRnVuY3Rpb25NYXRyaXgoZl91bmlmb3JtTWF0cml4M2Z2LCBleGVjLCBz
dGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihpbXBsKCkpKTsKIH0KIAotSlNDOjpK
U1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4NGZ2KEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MpCitKU0M6OkpTVmFsdWUgSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXg0ZnYoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMpCiB7Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbk1hdHJpeChmX3VuaWZvcm1NYXRyaXg0ZnYs
IGV4ZWMsIGFyZ3MsIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KGltcGwoKSkp
OworICAgIHJldHVybiBkYXRhRnVuY3Rpb25NYXRyaXgoZl91bmlmb3JtTWF0cml4NGZ2LCBleGVj
LCBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihpbXBsKCkpKTsKIH0KIAotSlND
OjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZnYoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncykKK0pTQzo6SlNWYWx1ZSBK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMWZ2KEpTQzo6RXhlY1N0YXRlKiBl
eGVjKQogewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVydGV4QXR0cmliMXYsIGV4ZWMs
IGFyZ3MsIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KGltcGwoKSkpOworICAg
IHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVydGV4QXR0cmliMXYsIGV4ZWMsIHN0YXRpY19jYXN0
PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KGltcGwoKSkpOwogfQogCi1KU0M6OkpTVmFsdWUgSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjJmdihKU0M6OkV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzKQorSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIyZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAg
cmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWIydiwgZXhlYywgYXJncywgc3RhdGlj
X2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4oaW1wbCgpKSk7CisgICAgcmV0dXJuIGRhdGFG
dW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWIydiwgZXhlYywgc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJp
bmdDb250ZXh0Kj4oaW1wbCgpKSk7CiB9CiAKLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmVydGV4QXR0cmliM2Z2KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6
OkFyZ0xpc3QmIGFyZ3MpCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZl
cnRleEF0dHJpYjNmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gZGF0YUZ1
bmN0aW9uZihmX3ZlcnRleEF0dHJpYjN2LCBleGVjLCBhcmdzLCBzdGF0aWNfY2FzdDxXZWJHTFJl
bmRlcmluZ0NvbnRleHQqPihpbXBsKCkpKTsKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3Zl
cnRleEF0dHJpYjN2LCBleGVjLCBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihp
bXBsKCkpKTsKIH0KIAotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0
ZXhBdHRyaWI0ZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJn
cykKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliNGZ2
KEpTQzo6RXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVy
dGV4QXR0cmliNHYsIGV4ZWMsIGFyZ3MsIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4
dCo+KGltcGwoKSkpOworICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVydGV4QXR0cmliNHYs
IGV4ZWMsIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KGltcGwoKSkpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2Vi
U29ja2V0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2Vi
U29ja2V0Q3VzdG9tLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTV2ViU29ja2V0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTIgKzQ1LDEyIEBA
IHVzaW5nIG5hbWVzcGFjZSBKU0M7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIEN1c3RvbSBm
dW5jdGlvbnMKLUpTVmFsdWUgSlNXZWJTb2NrZXQ6OnNlbmQoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU1dlYlNvY2tldDo6c2VuZChFeGVjU3RhdGUqIGV4
ZWMpCiB7Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMSkKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRD
b3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3Is
ICJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpOwogCi0gICAgY29uc3QgU3RyaW5nJiBtc2cgPSB1c3Ry
aW5nVG9TdHJpbmcoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSk7CisgICAgY29uc3QgU3RyaW5n
JiBtc2cgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykp
OwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJy
b3IoZXhlYywgU3ludGF4RXJyb3IsICJiYWQgbWVzc2FnZSBkYXRhLiIpOwogICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb250
ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
V29ya2VyQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSwxNCArMTA1LDE0
IEBAIEpTVmFsdWUgSlNXb3JrZXJDb250ZXh0Ojp3ZWJTb2NrZXQoRXhlY1MKIH0KICNlbmRpZgog
Ci1KU1ZhbHVlIEpTV29ya2VyQ29udGV4dDo6aW1wb3J0U2NyaXB0cyhFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTV29ya2VyQ29udGV4dDo6aW1wb3J0U2Ny
aXB0cyhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgaWYgKCFhcmdzLnNpemUoKSkKKyAgICBpZiAo
IWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAK
ICAgICBWZWN0b3I8U3RyaW5nPiB1cmxzOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBh
cmdzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIHVybHMuYXBwZW5kKHVzdHJpbmdUb1N0cmluZyhh
cmdzLmF0KGkpLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsgaSsrKSB7CisgICAgICAgIHVybHMuYXBwZW5kKHVzdHJp
bmdUb1N0cmluZyhleGVjLT5hcmd1bWVudChpKS50b1N0cmluZyhleGVjKSkpOwogICAgICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKICAgICB9CkBAIC0xMjMsMjEgKzEyMywyMSBAQCBKU1ZhbHVlIEpTV29ya2VyQ29udGV4dDo6
aW1wb3J0U2NyaXB0cyhFCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUg
SlNXb3JrZXJDb250ZXh0OjpzZXRUaW1lb3V0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlz
dCYgYXJncykKK0pTVmFsdWUgSlNXb3JrZXJDb250ZXh0OjpzZXRUaW1lb3V0KEV4ZWNTdGF0ZSog
ZXhlYykKIHsKLSAgICBPd25QdHI8U2NoZWR1bGVkQWN0aW9uPiBhY3Rpb24gPSBTY2hlZHVsZWRB
Y3Rpb246OmNyZWF0ZShleGVjLCBhcmdzLCBjdXJyZW50V29ybGQoZXhlYykpOworICAgIE93blB0
cjxTY2hlZHVsZWRBY3Rpb24+IGFjdGlvbiA9IFNjaGVkdWxlZEFjdGlvbjo6Y3JlYXRlKGV4ZWMs
IGN1cnJlbnRXb3JsZChleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBpbnQgZGVsYXkgPSBhcmdzLmF0KDEpLnRv
SW50MzIoZXhlYyk7CisgICAgaW50IGRlbGF5ID0gZXhlYy0+YXJndW1lbnQoMSkudG9JbnQzMihl
eGVjKTsKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgaW1wbCgpLT5zZXRUaW1lb3V0KGFjdGlv
bi5yZWxlYXNlKCksIGRlbGF5KSk7CiB9CiAKLUpTVmFsdWUgSlNXb3JrZXJDb250ZXh0OjpzZXRJ
bnRlcnZhbChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpT
V29ya2VyQ29udGV4dDo6c2V0SW50ZXJ2YWwoRXhlY1N0YXRlKiBleGVjKQogewotICAgIE93blB0
cjxTY2hlZHVsZWRBY3Rpb24+IGFjdGlvbiA9IFNjaGVkdWxlZEFjdGlvbjo6Y3JlYXRlKGV4ZWMs
IGFyZ3MsIGN1cnJlbnRXb3JsZChleGVjKSk7CisgICAgT3duUHRyPFNjaGVkdWxlZEFjdGlvbj4g
YWN0aW9uID0gU2NoZWR1bGVkQWN0aW9uOjpjcmVhdGUoZXhlYywgY3VycmVudFdvcmxkKGV4ZWMp
KTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwotICAgIGludCBkZWxheSA9IGFyZ3MuYXQoMSkudG9JbnQzMihleGVjKTsKKyAgICBp
bnQgZGVsYXkgPSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwogICAgIHJldHVybiBq
c051bWJlcihleGVjLCBpbXBsKCktPnNldEludGVydmFsKGFjdGlvbi5yZWxlYXNlKCksIGRlbGF5
KSk7CiB9CiAKQEAgLTE1MCwzOCArMTUwLDM4IEBAIEpTVmFsdWUgSlNXb3JrZXJDb250ZXh0Ojpt
ZXNzYWdlQ2hhbm5lbCgKICNlbmRpZgogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQotSlNWYWx1ZSBK
U1dvcmtlckNvbnRleHQ6Om9wZW5EYXRhYmFzZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpIAorSlNWYWx1ZSBKU1dvcmtlckNvbnRleHQ6Om9wZW5EYXRhYmFzZShFeGVjU3Rh
dGUqIGV4ZWMpIAogeyAKLSAgICBpZiAoYXJncy5zaXplKCkgPCA0KSB7CisgICAgaWYgKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSA8IDQpIHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFNZ
TlRBWF9FUlIpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBT
dHJpbmcgbmFtZSA9IHVzdHJpbmdUb1N0cmluZyhhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpKTsK
KyAgICBTdHJpbmcgbmFtZSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0
cmluZyhleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIAotICAgIFN0cmluZyB2ZXJzaW9uID0gdXN0cmluZ1RvU3RyaW5n
KGFyZ3MuYXQoMSkudG9TdHJpbmcoZXhlYykpOworICAgIFN0cmluZyB2ZXJzaW9uID0gdXN0cmlu
Z1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpKTsKICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAg
U3RyaW5nIGRpc3BsYXlOYW1lID0gdXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQoMikudG9TdHJpbmco
ZXhlYykpOworICAgIFN0cmluZyBkaXNwbGF5TmFtZSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5h
cmd1bWVudCgyKS50b1N0cmluZyhleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIC8vIGFyZ3MuYXQoMykgPSBl
c3RpbWF0ZWQgc2l6ZQotICAgIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSA9IGFyZ3MuYXQo
MykudG9VSW50MzIoZXhlYyk7CisgICAgLy8gZXhlYy0+YXJndW1lbnQoMykgPSBlc3RpbWF0ZWQg
c2l6ZQorICAgIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSA9IGV4ZWMtPmFyZ3VtZW50KDMp
LnRvVUludDMyKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gY3Jl
YXRpb25DYWxsYmFjazsKLSAgICBpZiAoYXJncy5zaXplKCkgPj0gNSkgewotICAgICAgICBpZiAo
IWFyZ3MuYXQoNCkuaXNPYmplY3QoKSkgeworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkg
Pj0gNSkgeworICAgICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDQpLmlzT2JqZWN0KCkpIHsKICAg
ICAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7CiAgICAg
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgfQogCi0gICAgICAgIGNyZWF0
aW9uQ2FsbGJhY2sgPSBKU0RhdGFiYXNlQ2FsbGJhY2s6OmNyZWF0ZShhc09iamVjdChhcmdzLmF0
KDQpKSwgZ2xvYmFsT2JqZWN0KCkpOworICAgICAgICBjcmVhdGlvbkNhbGxiYWNrID0gSlNEYXRh
YmFzZUNhbGxiYWNrOjpjcmVhdGUoYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoNCkpLCBnbG9iYWxP
YmplY3QoKSk7CiAgICAgfQogIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOyAKQEAgLTE5MCwz
OCArMTkwLDM4IEBAIEpTVmFsdWUgSlNXb3JrZXJDb250ZXh0OjpvcGVuRGF0YWJhc2UoRXgKICAg
ICByZXR1cm4gcmVzdWx0OyAKIH0gCiAgCi1KU1ZhbHVlIEpTV29ya2VyQ29udGV4dDo6b3BlbkRh
dGFiYXNlU3luYyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVl
IEpTV29ya2VyQ29udGV4dDo6b3BlbkRhdGFiYXNlU3luYyhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0g
ICAgaWYgKGFyZ3Muc2l6ZSgpIDwgNCkgeworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkg
PCA0KSB7CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBTWU5UQVhfRVJSKTsKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAgU3RyaW5nIG5hbWUgPSB1c3Ry
aW5nVG9TdHJpbmcoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSk7CisgICAgU3RyaW5nIG5hbWUg
PSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpOwogICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAKLSAgICBTdHJpbmcgdmVyc2lvbiA9IHVzdHJpbmdUb1N0cmluZyhhcmdzLmF0KDEpLnRvU3Ry
aW5nKGV4ZWMpKTsKKyAgICBTdHJpbmcgdmVyc2lvbiA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5h
cmd1bWVudCgxKS50b1N0cmluZyhleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIFN0cmluZyBkaXNwbGF5TmFt
ZSA9IHVzdHJpbmdUb1N0cmluZyhhcmdzLmF0KDIpLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBTdHJp
bmcgZGlzcGxheU5hbWUgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMikudG9TdHJp
bmcoZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAKLSAgICAvLyBhcmdzLmF0KDMpID0gZXN0aW1hdGVkIHNpemUKLSAg
ICB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUgPSBhcmdzLmF0KDMpLnRvVUludDMyKGV4ZWMp
OworICAgIC8vIGV4ZWMtPmFyZ3VtZW50KDMpID0gZXN0aW1hdGVkIHNpemUKKyAgICB1bnNpZ25l
ZCBsb25nIGVzdGltYXRlZFNpemUgPSBleGVjLT5hcmd1bWVudCgzKS50b1VJbnQzMihleGVjKTsK
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogCiAgICAgUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJhY2s7Ci0g
ICAgaWYgKGFyZ3Muc2l6ZSgpID49IDUpIHsKLSAgICAgICAgaWYgKCFhcmdzLmF0KDQpLmlzT2Jq
ZWN0KCkpIHsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDUpIHsKKyAgICAgICAg
aWYgKCFleGVjLT5hcmd1bWVudCg0KS5pc09iamVjdCgpKSB7CiAgICAgICAgICAgICBzZXRET01F
eGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOwogICAgICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgICAgIH0KIAotICAgICAgICBjcmVhdGlvbkNhbGxiYWNrID0gSlNE
YXRhYmFzZUNhbGxiYWNrOjpjcmVhdGUoYXNPYmplY3QoYXJncy5hdCg0KSksIGdsb2JhbE9iamVj
dCgpKTsKKyAgICAgICAgY3JlYXRpb25DYWxsYmFjayA9IEpTRGF0YWJhc2VDYWxsYmFjazo6Y3Jl
YXRlKGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDQpKSwgZ2xvYmFsT2JqZWN0KCkpOwogICAgIH0K
IAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1dvcmtlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dv
cmtlckN1c3RvbS5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1dvcmtlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDkgKzM3LDkgQEAgdXNpbmcg
bmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU0M6OkpTVmFsdWUgSlNX
b3JrZXI6OnBvc3RNZXNzYWdlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xp
c3QmIGFyZ3MpCitKU0M6OkpTVmFsdWUgSlNXb3JrZXI6OnBvc3RNZXNzYWdlKEpTQzo6RXhlY1N0
YXRlKiBleGVjKQogewotICAgIHJldHVybiBoYW5kbGVQb3N0TWVzc2FnZShleGVjLCBhcmdzLCBp
bXBsKCkpOworICAgIHJldHVybiBoYW5kbGVQb3N0TWVzc2FnZShleGVjLCBpbXBsKCkpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1M
SHR0cFJlcXVlc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjIsMjMgKzYyLDIzIEBAIHZvaWQgSlNYTUxIdHRwUmVxdWVzdDo6bWFya0NoaWxkcmVuKE1hcmsK
IH0KIAogLy8gQ3VzdG9tIGZ1bmN0aW9ucwotSlNWYWx1ZSBKU1hNTEh0dHBSZXF1ZXN0OjpvcGVu
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNYTUxIdHRw
UmVxdWVzdDo6b3BlbihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpIDwg
MikKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMikKICAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsICJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpOwogCi0g
ICAgY29uc3QgS1VSTCYgdXJsID0gaW1wbCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmNv
bXBsZXRlVVJMKHVzdHJpbmdUb1N0cmluZyhhcmdzLmF0KDEpLnRvU3RyaW5nKGV4ZWMpKSk7Ci0g
ICAgU3RyaW5nIG1ldGhvZCA9IHVzdHJpbmdUb1N0cmluZyhhcmdzLmF0KDApLnRvU3RyaW5nKGV4
ZWMpKTsKKyAgICBjb25zdCBLVVJMJiB1cmwgPSBpbXBsKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKS0+Y29tcGxldGVVUkwodXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3Ry
aW5nKGV4ZWMpKSk7CisgICAgU3RyaW5nIG1ldGhvZCA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5h
cmd1bWVudCgwKS50b1N0cmluZyhleGVjKSk7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
LSAgICBpZiAoYXJncy5zaXplKCkgPj0gMykgewotICAgICAgICBib29sIGFzeW5jID0gYXJncy5h
dCgyKS50b0Jvb2xlYW4oZXhlYyk7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAz
KSB7CisgICAgICAgIGJvb2wgYXN5bmMgPSBleGVjLT5hcmd1bWVudCgyKS50b0Jvb2xlYW4oZXhl
Yyk7CiAKLSAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpID49IDQgJiYgIWFyZ3MuYXQoMykuaXNVbmRl
ZmluZWQoKSkgewotICAgICAgICAgICAgU3RyaW5nIHVzZXIgPSB2YWx1ZVRvU3RyaW5nV2l0aE51
bGxDaGVjayhleGVjLCBhcmdzLmF0KDMpKTsKKyAgICAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291
bnQoKSA+PSA0ICYmICFleGVjLT5hcmd1bWVudCgzKS5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAg
ICAgICBTdHJpbmcgdXNlciA9IHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMsIGV4ZWMt
PmFyZ3VtZW50KDMpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgp
ID49IDUgJiYgIWFyZ3MuYXQoNCkuaXNVbmRlZmluZWQoKSkgewotICAgICAgICAgICAgICAgIFN0
cmluZyBwYXNzd29yZCA9IHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMsIGFyZ3MuYXQo
NCkpOworICAgICAgICAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSA1ICYmICFleGVj
LT5hcmd1bWVudCg0KS5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIHBh
c3N3b3JkID0gdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgZXhlYy0+YXJndW1lbnQo
NCkpOwogICAgICAgICAgICAgICAgIGltcGwoKS0+b3BlbihtZXRob2QsIHVybCwgYXN5bmMsIHVz
ZXIsIHBhc3N3b3JkLCBlYyk7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBp
bXBsKCktPm9wZW4obWV0aG9kLCB1cmwsIGFzeW5jLCB1c2VyLCBlYyk7CkBAIC05MSwxMyArOTEs
MTMgQEAgSlNWYWx1ZSBKU1hNTEh0dHBSZXF1ZXN0OjpvcGVuKEV4ZWNTdGF0ZQogICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlIEpTWE1MSHR0cFJlcXVlc3Q6OnNlbmQoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU1hNTEh0dHBSZXF1
ZXN0OjpzZW5kKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
LSAgICBpZiAoYXJncy5pc0VtcHR5KCkpCisgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkp
CiAgICAgICAgIGltcGwoKS0+c2VuZChlYyk7CiAgICAgZWxzZSB7Ci0gICAgICAgIEpTVmFsdWUg
dmFsID0gYXJncy5hdCgwKTsKKyAgICAgICAgSlNWYWx1ZSB2YWwgPSBleGVjLT5hcmd1bWVudCgw
KTsKICAgICAgICAgaWYgKHZhbC5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICAgICAgaW1w
bCgpLT5zZW5kKGVjKTsKICAgICAgICAgZWxzZSBpZiAodmFsLmluaGVyaXRzKCZKU0RvY3VtZW50
OjpzX2luZm8pKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hTTFRQcm9jZXNzb3JDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29y
Q3VzdG9tLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFNM
VFByb2Nlc3NvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDkgKzQ2LDkgQEAgdXNp
bmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlIEpTWFNM
VFByb2Nlc3Nvcjo6aW1wb3J0U3R5bGVzaGVldChFeGVjU3RhdGUqLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQorSlNWYWx1ZSBKU1hTTFRQcm9jZXNzb3I6OmltcG9ydFN0eWxlc2hlZXQoRXhlY1N0YXRl
KiBleGVjKQogewotICAgIEpTVmFsdWUgbm9kZVZhbCA9IGFyZ3MuYXQoMCk7CisgICAgSlNWYWx1
ZSBub2RlVmFsID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKG5vZGVWYWwuaW5oZXJpdHMo
JkpTTm9kZTo6c19pbmZvKSkgewogICAgICAgICBKU05vZGUqIG5vZGUgPSBzdGF0aWNfY2FzdDxK
U05vZGUqPihhc09iamVjdChub2RlVmFsKSk7CiAgICAgICAgIGltcGwoKS0+aW1wb3J0U3R5bGVz
aGVldChub2RlLT5pbXBsKCkpOwpAQCAtNTgsMTAgKzU4LDEwIEBAIEpTVmFsdWUgSlNYU0xUUHJv
Y2Vzc29yOjppbXBvcnRTdHlsZXNoZWUKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAot
SlNWYWx1ZSBKU1hTTFRQcm9jZXNzb3I6OnRyYW5zZm9ybVRvRnJhZ21lbnQoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU1hTTFRQcm9jZXNzb3I6OnRyYW5z
Zm9ybVRvRnJhZ21lbnQoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTVmFsdWUgbm9kZVZhbCA9
IGFyZ3MuYXQoMCk7Ci0gICAgSlNWYWx1ZSBkb2NWYWwgPSBhcmdzLmF0KDEpOworICAgIEpTVmFs
dWUgbm9kZVZhbCA9IGV4ZWMtPmFyZ3VtZW50KDApOworICAgIEpTVmFsdWUgZG9jVmFsID0gZXhl
Yy0+YXJndW1lbnQoMSk7CiAgICAgaWYgKG5vZGVWYWwuaW5oZXJpdHMoJkpTTm9kZTo6c19pbmZv
KSAmJiBkb2NWYWwuaW5oZXJpdHMoJkpTRG9jdW1lbnQ6OnNfaW5mbykpIHsKICAgICAgICAgV2Vi
Q29yZTo6Tm9kZSogbm9kZSA9IHN0YXRpY19jYXN0PEpTTm9kZSo+KGFzT2JqZWN0KG5vZGVWYWwp
KS0+aW1wbCgpOwogICAgICAgICBEb2N1bWVudCogZG9jID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQq
PihzdGF0aWNfY2FzdDxKU0RvY3VtZW50Kj4oYXNPYmplY3QoZG9jVmFsKSktPmltcGwoKSk7CkBA
IC03MSw5ICs3MSw5IEBAIEpTVmFsdWUgSlNYU0xUUHJvY2Vzc29yOjp0cmFuc2Zvcm1Ub0ZyYWcK
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBKU1hTTFRQcm9jZXNzb3I6
OnRyYW5zZm9ybVRvRG9jdW1lbnQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQorSlNWYWx1ZSBKU1hTTFRQcm9jZXNzb3I6OnRyYW5zZm9ybVRvRG9jdW1lbnQoRXhlY1N0YXRl
KiBleGVjKQogewotICAgIEpTVmFsdWUgbm9kZVZhbCA9IGFyZ3MuYXQoMCk7CisgICAgSlNWYWx1
ZSBub2RlVmFsID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKG5vZGVWYWwuaW5oZXJpdHMo
JkpTTm9kZTo6c19pbmZvKSkgewogICAgICAgICBKU05vZGUqIG5vZGUgPSBzdGF0aWNfY2FzdDxK
U05vZGUqPihhc09iamVjdChub2RlVmFsKSk7CiAgICAgICAgIFJlZlB0cjxEb2N1bWVudD4gcmVz
dWx0RG9jdW1lbnQgPSBpbXBsKCktPnRyYW5zZm9ybVRvRG9jdW1lbnQobm9kZS0+aW1wbCgpKTsK
QEAgLTg1LDMzICs4NSwzMyBAQCBKU1ZhbHVlIEpTWFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9E
b2N1CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNYU0xUUHJvY2Vz
c29yOjpzZXRQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQor
SlNWYWx1ZSBKU1hTTFRQcm9jZXNzb3I6OnNldFBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCiB7
Ci0gICAgaWYgKGFyZ3MuYXQoMSkuaXNVbmRlZmluZWRPck51bGwoKSB8fCBhcmdzLmF0KDIpLmlz
VW5kZWZpbmVkT3JOdWxsKCkpCisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVk
T3JOdWxsKCkgfHwgZXhlYy0+YXJndW1lbnQoMikuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7IC8vIFRocm93IGV4Y2VwdGlvbj8KLSAgICBTdHJpbmcg
bmFtZXNwYWNlVVJJID0gdXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykp
OwotICAgIFN0cmluZyBsb2NhbE5hbWUgPSB1c3RyaW5nVG9TdHJpbmcoYXJncy5hdCgxKS50b1N0
cmluZyhleGVjKSk7Ci0gICAgU3RyaW5nIHZhbHVlID0gdXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQo
MikudG9TdHJpbmcoZXhlYykpOworICAgIFN0cmluZyBuYW1lc3BhY2VVUkkgPSB1c3RyaW5nVG9T
dHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpOworICAgIFN0cmluZyBsb2Nh
bE5hbWUgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYykp
OworICAgIFN0cmluZyB2YWx1ZSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgyKS50
b1N0cmluZyhleGVjKSk7CiAgICAgaW1wbCgpLT5zZXRQYXJhbWV0ZXIobmFtZXNwYWNlVVJJLCBs
b2NhbE5hbWUsIHZhbHVlKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1
ZSBKU1hTTFRQcm9jZXNzb3I6OmdldFBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTWFNMVFByb2Nlc3Nvcjo6Z2V0UGFyYW1ldGVyKEV4ZWNT
dGF0ZSogZXhlYykKIHsKLSAgICBpZiAoYXJncy5hdCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQor
ICAgIGlmIChleGVjLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBTdHJpbmcgbmFtZXNwYWNlVVJJID0gdXN0cmluZ1Rv
U3RyaW5nKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpOwotICAgIFN0cmluZyBsb2NhbE5hbWUg
PSB1c3RyaW5nVG9TdHJpbmcoYXJncy5hdCgxKS50b1N0cmluZyhleGVjKSk7CisgICAgU3RyaW5n
IG5hbWVzcGFjZVVSSSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmlu
ZyhleGVjKSk7CisgICAgU3RyaW5nIGxvY2FsTmFtZSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5h
cmd1bWVudCgxKS50b1N0cmluZyhleGVjKSk7CiAgICAgU3RyaW5nIHZhbHVlID0gaW1wbCgpLT5n
ZXRQYXJhbWV0ZXIobmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpOwogICAgIHJldHVybiBqc1N0cmlu
Z09yVW5kZWZpbmVkKGV4ZWMsIHZhbHVlKTsKIH0KIAotSlNWYWx1ZSBKU1hTTFRQcm9jZXNzb3I6
OnJlbW92ZVBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitK
U1ZhbHVlIEpTWFNMVFByb2Nlc3Nvcjo6cmVtb3ZlUGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykK
IHsKLSAgICBpZiAoYXJncy5hdCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgIGlmIChleGVj
LT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKLSAgICBTdHJpbmcgbmFtZXNwYWNlVVJJID0gdXN0cmluZ1RvU3RyaW5nKGFyZ3Mu
YXQoMCkudG9TdHJpbmcoZXhlYykpOwotICAgIFN0cmluZyBsb2NhbE5hbWUgPSB1c3RyaW5nVG9T
dHJpbmcoYXJncy5hdCgxKS50b1N0cmluZyhleGVjKSk7CisgICAgU3RyaW5nIG5hbWVzcGFjZVVS
SSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSk7Cisg
ICAgU3RyaW5nIGxvY2FsTmFtZSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgxKS50
b1N0cmluZyhleGVjKSk7CiAgICAgaW1wbCgpLT5yZW1vdmVQYXJhbWV0ZXIobmFtZXNwYWNlVVJJ
LCBsb2NhbE5hbWUpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3
LDkgKzQ3LDkgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1QYXNzT3duUHRyPFNjaGVkdWxlZEFjdGlvbj4gU2NoZWR1bGVkQWN0aW9uOjpjcmVhdGUoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBET01XcmFwcGVyV29ybGQqIGlzb2xh
dGVkV29ybGQpCitQYXNzT3duUHRyPFNjaGVkdWxlZEFjdGlvbj4gU2NoZWR1bGVkQWN0aW9uOjpj
cmVhdGUoRXhlY1N0YXRlKiBleGVjLCBET01XcmFwcGVyV29ybGQqIGlzb2xhdGVkV29ybGQpCiB7
Ci0gICAgSlNWYWx1ZSB2ID0gYXJncy5hdCgwKTsKKyAgICBKU1ZhbHVlIHYgPSBleGVjLT5hcmd1
bWVudCgwKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBpZiAodi5nZXRDYWxsRGF0YShj
YWxsRGF0YSkgPT0gQ2FsbFR5cGVOb25lKSB7CiAgICAgICAgIFVTdHJpbmcgc3RyaW5nID0gdi50
b1N0cmluZyhleGVjKTsKQEAgLTU3LDE4ICs1NywxOCBAQCBQYXNzT3duUHRyPFNjaGVkdWxlZEFj
dGlvbj4gU2NoZWR1bGVkQWN0CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgcmV0dXJu
IG5ldyBTY2hlZHVsZWRBY3Rpb24odXN0cmluZ1RvU3RyaW5nKHN0cmluZyksIGlzb2xhdGVkV29y
bGQpOwogICAgIH0KLSAgICBBcmdMaXN0IGFyZ3NUYWlsOwotICAgIGFyZ3MuZ2V0U2xpY2UoMiwg
YXJnc1RhaWwpOwotICAgIHJldHVybiBuZXcgU2NoZWR1bGVkQWN0aW9uKHYsIGFyZ3NUYWlsLCBp
c29sYXRlZFdvcmxkKTsKKworICAgIHJldHVybiBuZXcgU2NoZWR1bGVkQWN0aW9uKGV4ZWMsIHYs
IGlzb2xhdGVkV29ybGQpOwogfQogCi1TY2hlZHVsZWRBY3Rpb246OlNjaGVkdWxlZEFjdGlvbihK
U1ZhbHVlIGZ1bmN0aW9uLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBET01XcmFwcGVyV29ybGQqIGlz
b2xhdGVkV29ybGQpCitTY2hlZHVsZWRBY3Rpb246OlNjaGVkdWxlZEFjdGlvbihFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgZnVuY3Rpb24sIERPTVdyYXBwZXJXb3JsZCogaXNvbGF0ZWRXb3JsZCkK
ICAgICA6IG1fZnVuY3Rpb24oZnVuY3Rpb24pCiAgICAgLCBtX2lzb2xhdGVkV29ybGQoaXNvbGF0
ZWRXb3JsZCkKIHsKLSAgICBBcmdMaXN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBhcmdzLmVuZCgp
OwotICAgIGZvciAoQXJnTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhcmdzLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKLSAgICAgICAgbV9hcmdzLmFwcGVuZCgqaXQpOworICAgIC8vIHNldFRp
bWVvdXQoZnVuY3Rpb24sIGludGVydmFsLCBhcmcwLCBhcmcxLi4uKS4KKyAgICAvLyBTdGFydCBh
dCAyIHRvIHNraXAgZnVuY3Rpb24gYW5kIGludGVydmFsLgorICAgIGZvciAoc2l6ZV90IGkgPSAy
OyBpIDwgZXhlYy0+YXJndW1lbnRDb3VudCgpOyArK2kpCisgICAgICAgIG1fYXJncy5hcHBlbmQo
ZXhlYy0+YXJndW1lbnQoaSkpOwogfQogCiB2b2lkIFNjaGVkdWxlZEFjdGlvbjo6ZXhlY3V0ZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY2hlZHVsZWRBY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL1Nj
aGVkdWxlZEFjdGlvbi5oCShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMv
U2NoZWR1bGVkQWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDEyICs0MywxMiBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgKi8KICAgICBjbGFzcyBTY2hlZHVsZWRBY3Rpb24gOiBwdWJs
aWMgTm9uY29weWFibGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8
U2NoZWR1bGVkQWN0aW9uPiBjcmVhdGUoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OkFyZ0xp
c3QmLCBET01XcmFwcGVyV29ybGQqIGlzb2xhdGVkV29ybGQpOworICAgICAgICBzdGF0aWMgUGFz
c093blB0cjxTY2hlZHVsZWRBY3Rpb24+IGNyZWF0ZShKU0M6OkV4ZWNTdGF0ZSosIERPTVdyYXBw
ZXJXb3JsZCogaXNvbGF0ZWRXb3JsZCk7CiAKICAgICAgICAgdm9pZCBleGVjdXRlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFNjaGVkdWxlZEFjdGlv
bihKU0M6OkpTVmFsdWUgZnVuY3Rpb24sIGNvbnN0IEpTQzo6QXJnTGlzdCYsIERPTVdyYXBwZXJX
b3JsZCogaXNvbGF0ZWRXb3JsZCk7CisgICAgICAgIFNjaGVkdWxlZEFjdGlvbihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNWYWx1ZSBmdW5jdGlvbiwgRE9NV3JhcHBlcldvcmxkKiBpc29sYXRlZFdv
cmxkKTsKICAgICAgICAgU2NoZWR1bGVkQWN0aW9uKGNvbnN0IFN0cmluZyYgY29kZSwgRE9NV3Jh
cHBlcldvcmxkKiBpc29sYXRlZFdvcmxkKQogICAgICAgICAgICAgOiBtX2NvZGUoY29kZSkKICAg
ICAgICAgICAgICwgbV9pc29sYXRlZFdvcmxkKGlzb2xhdGVkV29ybGQpCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjcmlwdENhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHRDYWxsRnJhbWUuY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0Q2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgs
MTQgKzM4LDE2IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotU2NyaXB0Q2FsbEZyYW1lOjpTY3JpcHRDYWxsRnJhbWUoY29uc3QgVVN0cmluZyYgZnVuY3Rp
b25OYW1lLCBjb25zdCBVU3RyaW5nJiB1cmxTdHJpbmcsIGludCBsaW5lTnVtYmVyLCBjb25zdCBB
cmdMaXN0JiBhcmdzLCB1bnNpZ25lZCBza2lwQXJndW1lbnRDb3VudCkKK1NjcmlwdENhbGxGcmFt
ZTo6U2NyaXB0Q2FsbEZyYW1lKGNvbnN0IFVTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgY29uc3QgVVN0
cmluZyYgdXJsU3RyaW5nLCBpbnQgbGluZU51bWJlciwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25l
ZCBza2lwQXJndW1lbnRDb3VudCkKICAgICA6IG1fZnVuY3Rpb25OYW1lKGZ1bmN0aW9uTmFtZSkK
ICAgICAsIG1fc291cmNlVVJMKFBhcnNlZFVSTFN0cmluZywgdXN0cmluZ1RvU3RyaW5nKHVybFN0
cmluZykpCiAgICAgLCBtX2xpbmVOdW1iZXIobGluZU51bWJlcikKIHsKLSAgICBzaXplX3QgYXJn
dW1lbnRDb3VudCA9IGFyZ3Muc2l6ZSgpOworICAgIGlmICghZXhlYykKKyAgICAgICAgcmV0dXJu
OworICAgIHNpemVfdCBhcmd1bWVudENvdW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOwogICAg
IGZvciAoc2l6ZV90IGkgPSBza2lwQXJndW1lbnRDb3VudDsgaSA8IGFyZ3VtZW50Q291bnQ7ICsr
aSkKLSAgICAgICAgbV9hcmd1bWVudHMuYXBwZW5kKFNjcmlwdFZhbHVlKGFyZ3MuYXQoaSkpKTsK
KyAgICAgICAgbV9hcmd1bWVudHMuYXBwZW5kKFNjcmlwdFZhbHVlKGV4ZWMtPmFyZ3VtZW50KGkp
KSk7CiB9CiAKIFNjcmlwdENhbGxGcmFtZTo6flNjcmlwdENhbGxGcmFtZSgpCkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0Q2FsbEZyYW1lLmgJKHJldmlzaW9uIDYwMzQxKQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWxsRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyAr
NTAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgLy8gPGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTE4MD4KICAgICBjbGFzcyBTY3JpcHRDYWxsRnJhbWUgIHsK
ICAgICBwdWJsaWM6Ci0gICAgICAgIFNjcmlwdENhbGxGcmFtZShjb25zdCBKU0M6OlVTdHJpbmcm
IGZ1bmN0aW9uTmFtZSwgY29uc3QgSlNDOjpVU3RyaW5nJiB1cmxTdHJpbmcsIGludCBsaW5lTnVt
YmVyLCBjb25zdCBKU0M6OkFyZ0xpc3QmLCB1bnNpZ25lZCBza2lwQXJndW1lbnRDb3VudCk7Cisg
ICAgICAgIFNjcmlwdENhbGxGcmFtZShjb25zdCBKU0M6OlVTdHJpbmcmIGZ1bmN0aW9uTmFtZSwg
Y29uc3QgSlNDOjpVU3RyaW5nJiB1cmxTdHJpbmcsIGludCBsaW5lTnVtYmVyLCBKU0M6OkV4ZWNT
dGF0ZSosIHVuc2lnbmVkIHNraXBBcmd1bWVudENvdW50KTsKICAgICAgICAgflNjcmlwdENhbGxG
cmFtZSgpOwogCiAgICAgICAgIGNvbnN0IFNjcmlwdFN0cmluZyYgZnVuY3Rpb25OYW1lKCkgY29u
c3QgeyByZXR1cm4gbV9mdW5jdGlvbk5hbWU7IH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0Q2FsbFN0YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL1Nj
cmlwdENhbGxTdGFjay5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHRDYWxsU3RhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIHVz
aW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU2NyaXB0Q2FsbFN0
YWNrOjpTY3JpcHRDYWxsU3RhY2soRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdz
LCB1bnNpZ25lZCBza2lwQXJndW1lbnRDb3VudCkKK1NjcmlwdENhbGxTdGFjazo6U2NyaXB0Q2Fs
bFN0YWNrKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgc2tpcEFyZ3VtZW50Q291bnQpCiAgICAg
OiBtX2luaXRpYWxpemVkKGZhbHNlKQogICAgICwgbV9leGVjKGV4ZWMpCiAgICAgLCBtX2NhbGxl
cigwKQpAQCAtNTgsMTEgKzU4LDExIEBAIFNjcmlwdENhbGxTdGFjazo6U2NyaXB0Q2FsbFN0YWNr
KEV4ZWNTdGEKIAogICAgIGlmIChmdW5jdGlvbikgewogICAgICAgICBtX2NhbGxlciA9IGFzRnVu
Y3Rpb24oZnVuY3Rpb24pOwotICAgICAgICBtX2ZyYW1lcy5hcHBlbmQoU2NyaXB0Q2FsbEZyYW1l
KG1fY2FsbGVyLT5uYW1lKG1fZXhlYyksIHVybFN0cmluZywgbGluZU51bWJlciwgYXJncywgc2tp
cEFyZ3VtZW50Q291bnQpKTsKKyAgICAgICAgbV9mcmFtZXMuYXBwZW5kKFNjcmlwdENhbGxGcmFt
ZShtX2NhbGxlci0+bmFtZShtX2V4ZWMpLCB1cmxTdHJpbmcsIGxpbmVOdW1iZXIsIG1fZXhlYywg
c2tpcEFyZ3VtZW50Q291bnQpKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBDYWxsZXIgaXMg
dW5rbm93biwgYnV0IHdlIHNob3VsZCBzdGlsbCBhZGQgdGhlIGZyYW1lLCBiZWNhdXNlCiAgICAg
ICAgIC8vIHNvbWV0aGluZyBjYWxsZWQgdXMsIGFuZCBnYXZlIHVzIGFyZ3VtZW50cy4KLSAgICAg
ICAgbV9mcmFtZXMuYXBwZW5kKFNjcmlwdENhbGxGcmFtZShVU3RyaW5nKCksIHVybFN0cmluZywg
bGluZU51bWJlciwgYXJncywgc2tpcEFyZ3VtZW50Q291bnQpKTsKKyAgICAgICAgbV9mcmFtZXMu
YXBwZW5kKFNjcmlwdENhbGxGcmFtZShVU3RyaW5nKCksIHVybFN0cmluZywgbGluZU51bWJlciwg
bV9leGVjLCBza2lwQXJndW1lbnRDb3VudCkpOwogICAgIH0KIH0KIApAQCAtOTQsOCArOTQsNyBA
QCB2b2lkIFNjcmlwdENhbGxTdGFjazo6aW5pdGlhbGl6ZSgpCiAgICAgSlNWYWx1ZSBmdW5jID0g
bV9leGVjLT5pbnRlcnByZXRlcigpLT5yZXRyaWV2ZUNhbGxlcihtX2V4ZWMsIG1fY2FsbGVyKTsK
ICAgICB3aGlsZSAoIWZ1bmMuaXNOdWxsKCkpIHsKICAgICAgICAgSlNGdW5jdGlvbioganNGdW5j
dGlvbiA9IGFzRnVuY3Rpb24oZnVuYyk7Ci0gICAgICAgIEFyZ0xpc3QgZW1wdHlBcmdMaXN0Owot
ICAgICAgICBtX2ZyYW1lcy5hcHBlbmQoU2NyaXB0Q2FsbEZyYW1lKGpzRnVuY3Rpb24tPm5hbWUo
bV9leGVjKSwgVVN0cmluZygpLCAwLCBlbXB0eUFyZ0xpc3QsIDApKTsKKyAgICAgICAgbV9mcmFt
ZXMuYXBwZW5kKFNjcmlwdENhbGxGcmFtZShqc0Z1bmN0aW9uLT5uYW1lKG1fZXhlYyksIFVTdHJp
bmcoKSwgMCwgMCwgMCkpOwogICAgICAgICBmdW5jID0gbV9leGVjLT5pbnRlcnByZXRlcigpLT5y
ZXRyaWV2ZUNhbGxlcihtX2V4ZWMsIGpzRnVuY3Rpb24pOwogICAgIH0KICAgICBtX2luaXRpYWxp
emVkID0gdHJ1ZTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FsbFN0YWNrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWxsU3RhY2suaAkocmV2
aXNpb24gNjAzNDEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhbGxTdGFjay5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAg
IGNsYXNzIFNjcmlwdENhbGxTdGFjayA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiAgICAgcHVibGlj
OgotICAgICAgICBTY3JpcHRDYWxsU3RhY2soSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OkFy
Z0xpc3QmLCB1bnNpZ25lZCBza2lwQXJndW1lbnRDb3VudCA9IDApOworICAgICAgICBTY3JpcHRD
YWxsU3RhY2soSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBza2lwQXJndW1lbnRDb3VudCA9IDAp
OwogICAgICAgICB+U2NyaXB0Q2FsbFN0YWNrKCk7CiAKICAgICAgICAgU2NyaXB0U3RhdGUqIHN0
YXRlKCkgY29uc3QgeyByZXR1cm4gbV9leGVjOyB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDYwMzQxKQorKysgV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMTc3
LDEwICsxNzcsMTAgQEAgRU5ECiAgICAgfQogCiAgICAgcHVzaChAR2VuZXJhdGVFdmVudExpc3Rl
bmVySW1wbCwgPDxFTkQpOwotICAgIEpTVmFsdWUgbGlzdGVuZXIgPSBhcmdzLmF0KDEpOworICAg
IEpTVmFsdWUgbGlzdGVuZXIgPSBleGVjLT5hcmd1bWVudCgxKTsKICAgICBpZiAoIWxpc3RlbmVy
LmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIGltcC0+JHtm
dW5jdGlvbk5hbWV9RXZlbnRMaXN0ZW5lcih1c3RyaW5nVG9BdG9taWNTdHJpbmcoYXJncy5hdCgw
KS50b1N0cmluZyhleGVjKSksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3Rl
bmVyKSwgJHdyYXBwZXJPYmplY3QsIGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykpJHBhc3NSZWZQ
dHJIYW5kbGluZywgYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYykpOworICAgIGltcC0+JHtmdW5j
dGlvbk5hbWV9RXZlbnRMaXN0ZW5lcih1c3RyaW5nVG9BdG9taWNTdHJpbmcoZXhlYy0+YXJndW1l
bnQoMCkudG9TdHJpbmcoZXhlYykpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChs
aXN0ZW5lciksICR3cmFwcGVyT2JqZWN0LCBmYWxzZSwgY3VycmVudFdvcmxkKGV4ZWMpKSRwYXNz
UmVmUHRySGFuZGxpbmcsIGV4ZWMtPmFyZ3VtZW50KDIpLnRvQm9vbGVhbihleGVjKSk7CiAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiBFTkQKICAgICByZXR1cm4gQEdlbmVyYXRlRXZlbnRMaXN0
ZW5lckltcGw7CkBAIC04NDYsNyArODQ2LDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgICAg
IGZvcmVhY2ggbXkgJGZ1bmN0aW9uIChAeyRkYXRhTm9kZS0+ZnVuY3Rpb25zfSkgewogICAgICAg
ICAgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3Vz
dG9tIn0gfHwgJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0ND
dXN0b20ifSkgewogICAgICAgICAgICAgICAgIG15ICRmdW5jdGlvbkltcGxlbWVudGF0aW9uTmFt
ZSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW1wbGVtZW50
YXRpb25GdW5jdGlvbiJ9IHx8ICRjb2RlR2VuZXJhdG9yLT5XS19sY2ZpcnN0KCRmdW5jdGlvbi0+
c2lnbmF0dXJlLT5uYW1lKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
ICAgIEpTQzo6SlNWYWx1ZSAiIC4gJGZ1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lIC4gIihKU0M6
OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6QXJnTGlzdCYpO1xuIik7CisgICAgICAgICAgICAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBKU0M6OkpTVmFsdWUgIiAuICRmdW5jdGlvbkltcGxl
bWVudGF0aW9uTmFtZSAuICIoSlNDOjpFeGVjU3RhdGUqKTtcbiIpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgfQpAQCAtOTg5LDcgKzk4OSw3IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgog
ICAgICAgICBmb3JlYWNoIG15ICRmdW5jdGlvbiAoQHskZGF0YU5vZGUtPmZ1bmN0aW9uc30pIHsK
ICAgICAgICAgICAgIG5leHQgaWYgJGZ1bmN0aW9uLT57b3ZlcmxvYWRJbmRleH0gJiYgJGZ1bmN0
aW9uLT57b3ZlcmxvYWRJbmRleH0gPiAxOwogICAgICAgICAgICAgbXkgJGZ1bmN0aW9uTmFtZSA9
ICRjb2RlR2VuZXJhdG9yLT5XS19sY2ZpcnN0KCRjbGFzc05hbWUpIC4gIlByb3RvdHlwZUZ1bmN0
aW9uIiAuICRjb2RlR2VuZXJhdG9yLT5XS191Y2ZpcnN0KCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5u
YW1lKTsKLSAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJKU0M6OkpTVmFsdWUgSlND
X0hPU1RfQ0FMTCAke2Z1bmN0aW9uTmFtZX0oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0
KiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OkFyZ0xpc3QmKTtcbiIpOworICAgICAgICAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIkpTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMICR7ZnVuY3Rp
b25OYW1lfShKU0M6OkV4ZWNTdGF0ZSopO1xuIik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEx
MDMsMTEgKzExMDMsMTEgQEAgc3ViIEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNrRXhwcmVzc2lvbgog
ICAgIG15ICRmdW5jdGlvbiA9IHNoaWZ0OwogCiAgICAgbXkgQGFuZEV4cHJlc3Npb24gPSAoKTsK
LSAgICBwdXNoKEBhbmRFeHByZXNzaW9uLCAiYXJncy5zaXplKCkgPT0gJG51bVBhcmFtZXRlcnMi
KTsKKyAgICBwdXNoKEBhbmRFeHByZXNzaW9uLCAiZXhlYy0+YXJndW1lbnRDb3VudCgpID09ICRu
dW1QYXJhbWV0ZXJzIik7CiAgICAgbXkgJHBhcmFtZXRlckluZGV4ID0gMDsKICAgICBmb3JlYWNo
ICRwYXJhbWV0ZXIgKEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSkgewogICAgICAgICBsYXN0IGlm
ICRwYXJhbWV0ZXJJbmRleCA+PSAkbnVtUGFyYW1ldGVyczsKLSAgICAgICAgbXkgJHZhbHVlID0g
ImFyZ3MuYXQoJHBhcmFtZXRlckluZGV4KSI7CisgICAgICAgIG15ICR2YWx1ZSA9ICJleGVjLT5h
cmd1bWVudCgkcGFyYW1ldGVySW5kZXgpIjsKICAgICAgICAgbXkgJHR5cGUgPSAkY29kZUdlbmVy
YXRvci0+U3RyaXBNb2R1bGUoJHBhcmFtZXRlci0+dHlwZSk7CiAKICAgICAgICAgIyBPbmx5IERP
TVN0cmluZyBvciB3cmFwcGVyIHR5cGVzIGFyZSBjaGVja2VkLgpAQCAtMTE1NCwxNCArMTE1NCwx
NCBAQCBzdWIgR2VuZXJhdGVPdmVybG9hZGVkUHJvdG90eXBlRnVuY3Rpb24KIAogICAgIG15ICRm
dW5jdGlvbk5hbWUgPSAianMke2ltcGxDbGFzc05hbWV9UHJvdG90eXBlRnVuY3Rpb24iIC4gJGNv
ZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWUpOwogCi0g
ICAgcHVzaChAaW1wbENvbnRlbnQsICJKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtmdW5jdGlvbk5h
bWV9KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3Qg
QXJnTGlzdCYgYXJncylcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMICR7ZnVuY3Rpb25OYW1lfShFeGVjU3RhdGUqIGV4ZWMpXG4iKTsKICAgICBwdXNo
KEBpbXBsQ29udGVudCwgPDxFTkQpOwogewogRU5ECiAgICAgZm9yZWFjaCBteSAkb3ZlcmxvYWQg
KEB7JGZ1bmN0aW9uLT57b3ZlcmxvYWRzfX0pIHsKICAgICAgICAgbXkgJHBhcmFtZXRlcnNDaGVj
ayA9IEdlbmVyYXRlRnVuY3Rpb25QYXJhbWV0ZXJzQ2hlY2soJG92ZXJsb2FkKTsKICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCRwYXJhbWV0ZXJzQ2hlY2spXG4iKTsKLSAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiAke2Z1bmN0aW9uTmFtZX0kb3Zl
cmxvYWQtPntvdmVybG9hZEluZGV4fShleGVjLCB0aGlzVmFsdWUsIGFyZ3MpO1xuIik7CisgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gJHtmdW5jdGlvbk5hbWV9JG92
ZXJsb2FkLT57b3ZlcmxvYWRJbmRleH0oZXhlYyk7XG4iKTsKICAgICB9CiAgICAgcHVzaChAaW1w
bENvbnRlbnQsIDw8RU5EKTsKICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3Ip
OwpAQCAtMTc5MCwyMSArMTc5MCwyMSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBteSAkZnVuY3Rpb25JbXBsZW1lbnRhdGlvbk5hbWUgPSAk
ZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkltcGxlbWVudGF0aW9u
RnVuY3Rpb24ifSB8fCAkY29kZUdlbmVyYXRvci0+V0tfbGNmaXJzdCgkZnVuY3Rpb24tPnNpZ25h
dHVyZS0+bmFtZSk7CiAKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMICR7ZnVuY3Rpb25OYW1lfShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
SlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpXG4iKTsKKyAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiSlNWYWx1ZSBKU0NfSE9TVF9DQUxMICR7ZnVuY3Rpb25OYW1l
fShFeGVjU3RhdGUqIGV4ZWMpXG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
e1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBVTlVTRURfUEFSQU0o
YXJncyk7XG4iKTsKIAogICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siPHJ1bnRpbWUvRXJyb3Iu
aD4ifSA9IDE7CiAKICAgICAgICAgICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93
IikgewotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRjbGFzc05hbWUq
IGNhc3RlZFRoaXMgPSB0b0pTRE9NV2luZG93KHRoaXNWYWx1ZS50b1RoaXNPYmplY3QoZXhlYykp
O1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJGNsYXNzTmFt
ZSogY2FzdGVkVGhpcyA9IHRvSlNET01XaW5kb3coZXhlYy0+aG9zdFRoaXNWYWx1ZSgpLnRvVGhp
c09iamVjdChleGVjKSk7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBpZiAoIWNhc3RlZFRoaXMpXG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTtcbiIpOwog
ICAgICAgICAgICAgfSBlbHNpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSXNX
b3JrZXJDb250ZXh0In0pIHsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICAkY2xhc3NOYW1lKiBjYXN0ZWRUaGlzID0gdG8ke2NsYXNzTmFtZX0odGhpc1ZhbHVlLnRvVGhp
c09iamVjdChleGVjKSk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICAkY2xhc3NOYW1lKiBjYXN0ZWRUaGlzID0gdG8ke2NsYXNzTmFtZX0oZXhlYy0+aG9zdFRo
aXNWYWx1ZSgpLnRvVGhpc09iamVjdChleGVjKSk7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBpZiAoIWNhc3RlZFRoaXMpXG4iKTsKICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlw
ZUVycm9yKTtcbiIpOwogICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFs
dWUoKTtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICgh
dGhpc1ZhbHVlLmluaGVyaXRzKCYke2NsYXNzTmFtZX06OnNfaW5mbykpXG4iKTsKICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhl
YywgVHlwZUVycm9yKTtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICRjbGFzc05hbWUqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDwkY2xhc3NOYW1lKj4oYXNP
YmplY3QodGhpc1ZhbHVlKSk7XG4iKTsKQEAgLTE4MzIsMTIgKzE4MzIsMTIgQEAgc3ViIEdlbmVy
YXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKCRmdW5j
dGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tIn0gfHwgJGZ1bmN0
aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0NDdXN0b20ifSkgewotICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBjYXN0ZWRUaGlzLT4i
IC4gJGZ1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lIC4gIihleGVjLCBhcmdzKTtcbiIpOworICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBjYXN0ZWRUaGlzLT4i
IC4gJGZ1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lIC4gIihleGVjKTtcbiIpOwogICAgICAgICAg
ICAgfSBlbHNpZiAoJHN2Z1BPRExpc3RUeXBlKSB7CiAgICAgICAgICAgICAgICAgJGltcGxJbmNs
dWRlc3siSlMke3N2Z1BPRExpc3RUeXBlfS5oIn0gPSAxOwogICAgICAgICAgICAgICAgICRpbXBs
SW5jbHVkZXN7IkpTU1ZHUE9ETGlzdEN1c3RvbS5oIn0gPSAxOwogICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBKU1NWR1BPRExpc3RDdXN0b206OiRmdW5jdGlv
bkltcGxlbWVudGF0aW9uTmFtZTwkY2xhc3NOYW1lLCAiIC4gR2V0TmF0aXZlVHlwZSgkc3ZnUE9E
TGlzdFR5cGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICI+KGNhc3RlZFRo
aXMsIGV4ZWMsIGFyZ3MsIHRvIiAuICRzdmdQT0RMaXN0VHlwZSAuICIpO1xuIik7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAuICI+KGNhc3RlZFRoaXMsIGV4ZWMsIHRvIiAuICRz
dmdQT0RMaXN0VHlwZSAuICIpO1xuIik7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRpbXBsVHlwZSogaW1wID0gc3RhdGljX2Nh
c3Q8JGltcGxUeXBlKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTtcbiIpOwogICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgICRwb2RUeXBlIHBvZEltcCgqaW1wKTtcbiIpIGlmICRw
b2RUeXBlOwpAQCAtMTg0Niw3ICsxODQ2LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24K
IAogICAgICAgICAgICAgICAgIG15ICRyZXF1aXJlc0FsbEFyZ3VtZW50cyA9ICRmdW5jdGlvbi0+
c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiUmVxdWlyZXNBbGxBcmd1bWVudHMifTsK
ICAgICAgICAgICAgICAgICBpZiAoJHJlcXVpcmVzQWxsQXJndW1lbnRzKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoYXJncy5zaXplKCkgPCAk
bnVtUGFyYW1ldGVycylcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8ICRudW1QYXJhbWV0ZXJzKVxu
Iik7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHJlcXVpcmVzQWxsQXJndW1lbnRzIGVx
ICJSYWlzZSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsIFwiTm90IGVu
b3VnaCBhcmd1bWVudHNcIik7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CkBAIC0xODc1LDcgKzE4NzUsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAg
ICAgICAgICAgICAgICBteSAkaGFzT3B0aW9uYWxBcmd1bWVudHMgPSAwOwogCiAgICAgICAgICAg
ICAgICAgICAgIGlmICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkN1c3RvbUFyZ3VtZW50SGFuZGxpbmcifSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgU2NyaXB0Q2FsbFN0YWNrIGNhbGxTdGFjayhleGVjLCBhcmdz
LCAkbnVtUGFyYW1ldGVycyk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIFNjcmlwdENhbGxTdGFjayBjYWxsU3RhY2soZXhlYywgJG51bVBhcmFt
ZXRlcnMpO1xuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJTY3Jp
cHRDYWxsU3RhY2suaCJ9ID0gMTsKICAgICAgICAgICAgICAgICAgICAgfQogCkBAIC0xODk5LDcg
KzE4OTksNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCRwYXJhbWV0ZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJPcHRpb25hbCJ9KSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHZW5lcmF0ZSBlYXJseSBjYWxsIGlmIHRo
ZXJlIGFyZSBlbm91Z2ggcGFyYW1ldGVycy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoISRoYXNPcHRpb25hbEFyZ3VtZW50cykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuICAgIGludCBhcmdzQ291bnQgPSBhcmdzLnNpemUo
KTtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIlxuICAgIGludCBhcmdzQ291bnQgPSBleGVjLT5hcmd1bWVudENvdW50KCk7XG4iKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGhhc09wdGlvbmFsQXJndW1lbnRzID0gMTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKGFyZ3NDb3VudCA8ICIgLiAoJHBhcmFtSW5k
ZXggKyAxKSAuICIpIHtcbiIpOwpAQCAtMTkxMSwxNSArMTkxMSwxNSBAQCBzdWIgR2VuZXJhdGVJ
bXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICgkcGFyYW1ldGVyLT50eXBlIGVxICJYUGF0aE5TUmVzb2x2ZXIiKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgUmVmUHRyPFhQYXRo
TlNSZXNvbHZlcj4gY3VzdG9tUmVzb2x2ZXI7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBYUGF0aE5TUmVzb2x2ZXIqIHJlc29sdmVyID0g
dG9YUGF0aE5TUmVzb2x2ZXIoYXJncy5hdCgkcGFyYW1JbmRleCkpO1xuIik7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgWFBhdGhOU1Jlc29sdmVy
KiByZXNvbHZlciA9IHRvWFBhdGhOU1Jlc29sdmVyKGV4ZWMtPmFyZ3VtZW50KCRwYXJhbUluZGV4
KSk7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBpZiAoIXJlc29sdmVyKSB7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgY3VzdG9tUmVzb2x2ZXIgPSBKU0N1c3RvbVhQYXRo
TlNSZXNvbHZlcjo6Y3JlYXRlKGV4ZWMsIGFyZ3MuYXQoJHBhcmFtSW5kZXgpKTtcbiIpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBjdXN0
b21SZXNvbHZlciA9IEpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyOjpjcmVhdGUoZXhlYywgZXhlYy0+
YXJndW1lbnQoJHBhcmFtSW5kZXgpKTtcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpXG4i
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpO1xuIik7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJlc29sdmVyID0gY3VzdG9tUmVzb2x2
ZXIuZ2V0KCk7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICB9XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgIiAuIEdldE5h
dGl2ZVR5cGVGcm9tU2lnbmF0dXJlKCRwYXJhbWV0ZXIpIC4gIiAkbmFtZSA9ICIgLiBKU1ZhbHVl
VG9OYXRpdmUoJHBhcmFtZXRlciwgImFyZ3MuYXQoJHBhcmFtSW5kZXgpIikgLiAiO1xuIik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgIiAuIEdl
dE5hdGl2ZVR5cGVGcm9tU2lnbmF0dXJlKCRwYXJhbWV0ZXIpIC4gIiAkbmFtZSA9ICIgLiBKU1Zh
bHVlVG9OYXRpdmUoJHBhcmFtZXRlciwgImV4ZWMtPmFyZ3VtZW50KCRwYXJhbUluZGV4KSIpIC4g
IjtcbiIpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJZiBhIHBhcmFtZXRlciBp
cyAiYW4gaW5kZXgiIGFuZCBpdCdzIG5lZ2F0aXZlIGl0IHNob3VsZCB0aHJvdyBhbiBJTkRFWF9T
SVpFX0VSUiBleGNlcHRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBCdXQgdGhp
cyBuZWVkcyB0byBiZSBkb25lIGluIHRoZSBiaW5kaW5ncywgYmVjYXVzZSB0aGUgdHlwZSBpcyB1
bnNpZ25lZCBhbmQgdGhlIGZhY3QgdGhhdCBpdApJbmRleDogV2ViQ29yZS9icmlkZ2UvcnVudGlt
ZV9tZXRob2QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0aG9k
LmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX21ldGhvZC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDE1ICs4NywxNiBAQCBib29sIFJ1bnRpbWVNZXRob2Q6
OmdldE93blByb3BlcnR5RGVzY3JpCiAgICAgcmV0dXJuIEludGVybmFsRnVuY3Rpb246OmdldE93
blByb3BlcnR5RGVzY3JpcHRvcihleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwogfQog
Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxSdW50aW1lTWV0aG9kKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9uLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYgYXJncykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFJ1bnRpbWVNZXRo
b2QoRXhlY1N0YXRlKiBleGVjKQogewotICAgIFJ1bnRpbWVNZXRob2QqIG1ldGhvZCA9IHN0YXRp
Y19jYXN0PFJ1bnRpbWVNZXRob2QqPihmdW5jdGlvbik7CisgICAgUnVudGltZU1ldGhvZCogbWV0
aG9kID0gc3RhdGljX2Nhc3Q8UnVudGltZU1ldGhvZCo+KGV4ZWMtPmNhbGxlZSgpKTsKIAogICAg
IGlmIChtZXRob2QtPm1ldGhvZHMoKS0+aXNFbXB0eSgpKQogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIAogICAgIFJlZlB0cjxJbnN0YW5jZT4gaW5zdGFuY2U7CiAKKyAgICBKU1ZhbHVl
IHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1ZhbHVlLmlu
aGVyaXRzKCZSdW50aW1lT2JqZWN0OjpzX2luZm8pKSB7CiAgICAgICAgIFJ1bnRpbWVPYmplY3Qq
IHJ1bnRpbWVPYmplY3QgPSBzdGF0aWNfY2FzdDxSdW50aW1lT2JqZWN0Kj4oYXNPYmplY3QodGhp
c1ZhbHVlKSk7CiAgICAgICAgIGluc3RhbmNlID0gcnVudGltZU9iamVjdC0+Z2V0SW50ZXJuYWxJ
bnN0YW5jZSgpOwpAQCAtMTEzLDcgKzExNCw3IEBAIHN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY2FsbFJ1bnRpbWUKICAgICBBU1NFUlQoaW5zdGFuY2UpOwogCiAgICAgaW5zdGFuY2UtPmJl
Z2luKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBpbnN0YW5jZS0+aW52b2tlTWV0aG9kKGV4ZWMs
IG1ldGhvZCwgYXJncyk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBpbnN0YW5jZS0+aW52b2tlTWV0
aG9kKGV4ZWMsIG1ldGhvZCk7CiAgICAgaW5zdGFuY2UtPmVuZCgpOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3QuY3BwCShyZXZpc2lvbiA2MDM0MSkK
KysrIFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjUzLDEyICsyNTMsMTIgQEAgSlNWYWx1ZSBSdW50aW1lT2JqZWN0OjpkZWZhdWx0VmFsdWUoRXhl
YwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y2FsbFJ1bnRpbWVPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogZnVuY3Rpb24sIEpT
VmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNhbGxSdW50aW1lT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBBU1NFUlQoZnVuY3Rp
b24tPmluaGVyaXRzKCZSdW50aW1lT2JqZWN0OjpzX2luZm8pKTsKLSAgICBSZWZQdHI8SW5zdGFu
Y2U+IGluc3RhbmNlKHN0YXRpY19jYXN0PFJ1bnRpbWVPYmplY3QqPihmdW5jdGlvbiktPmdldElu
dGVybmFsSW5zdGFuY2UoKSk7CisgICAgQVNTRVJUKGV4ZWMtPmNhbGxlZSgpLT5pbmhlcml0cygm
UnVudGltZU9iamVjdDo6c19pbmZvKSk7CisgICAgUmVmUHRyPEluc3RhbmNlPiBpbnN0YW5jZShz
dGF0aWNfY2FzdDxSdW50aW1lT2JqZWN0Kj4oZXhlYy0+Y2FsbGVlKCkpLT5nZXRJbnRlcm5hbElu
c3RhbmNlKCkpOwogICAgIGluc3RhbmNlLT5iZWdpbigpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0g
aW5zdGFuY2UtPmludm9rZURlZmF1bHRNZXRob2QoZXhlYywgYXJncyk7CisgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBpbnN0YW5jZS0+aW52b2tlRGVmYXVsdE1ldGhvZChleGVjKTsKICAgICBpbnN0YW5j
ZS0+ZW5kKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFdlYkNvcmUvYnJpZGdlL2Mv
Y19pbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvYy9jX2luc3RhbmNl
LmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4LDcgQEAgSlNWYWx1ZSBDSW5zdGFuY2U6Omdl
dE1ldGhvZChFeGVjU3RhdGUqIAogICAgIHJldHVybiBuZXcgKGV4ZWMpIENSdW50aW1lTWV0aG9k
KGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgcHJvcGVydHlOYW1lLCBtZXRob2RM
aXN0KTsKIH0KIAotSlNWYWx1ZSBDSW5zdGFuY2U6Omludm9rZU1ldGhvZChFeGVjU3RhdGUqIGV4
ZWMsIFJ1bnRpbWVNZXRob2QqIHJ1bnRpbWVNZXRob2QsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitK
U1ZhbHVlIENJbnN0YW5jZTo6aW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgUnVudGltZU1l
dGhvZCogcnVudGltZU1ldGhvZCkKIHsKICAgICBpZiAoIWFzT2JqZWN0KHJ1bnRpbWVNZXRob2Qp
LT5pbmhlcml0cygmQ1J1bnRpbWVNZXRob2Q6OnNfaW5mbykpCiAgICAgICAgIHJldHVybiB0aHJv
d0Vycm9yKGV4ZWMsIFR5cGVFcnJvciwgIkF0dGVtcHQgdG8gaW52b2tlIG5vbi1wbHVnLWluIG1l
dGhvZCBvbiBwbHVnLWluIG9iamVjdC4iKTsKQEAgLTE0NSwxMiArMTQ1LDEyIEBAIEpTVmFsdWUg
Q0luc3RhbmNlOjppbnZva2VNZXRob2QoRXhlY1N0YXQKICAgICBpZiAoIV9vYmplY3QtPl9jbGFz
cy0+aGFzTWV0aG9kKF9vYmplY3QsIGlkZW50KSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAKLSAgICB1bnNpZ25lZCBjb3VudCA9IGFyZ3Muc2l6ZSgpOworICAgIHVuc2lnbmVkIGNv
dW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOwogICAgIFZlY3RvcjxOUFZhcmlhbnQsIDg+IGNB
cmdzKGNvdW50KTsKIAogICAgIHVuc2lnbmVkIGk7CiAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50
OyBpKyspCi0gICAgICAgIGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KGV4ZWMsIGFyZ3MuYXQoaSks
ICZjQXJnc1tpXSk7CisgICAgICAgIGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KGV4ZWMsIGV4ZWMt
PmFyZ3VtZW50KGkpLCAmY0FyZ3NbaV0pOwogCiAgICAgLy8gSW52b2tlIHRoZSAnQycgbWV0aG9k
LgogICAgIGJvb2wgcmV0dmFsID0gdHJ1ZTsKQEAgLTE3NiwxNyArMTc2LDE3IEBAIEpTVmFsdWUg
Q0luc3RhbmNlOjppbnZva2VNZXRob2QoRXhlY1N0YXQKIH0KIAogCi1KU1ZhbHVlIENJbnN0YW5j
ZTo6aW52b2tlRGVmYXVsdE1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCitKU1ZhbHVlIENJbnN0YW5jZTo6aW52b2tlRGVmYXVsdE1ldGhvZChFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgaWYgKCFfb2JqZWN0LT5fY2xhc3MtPmludm9rZURlZmF1bHQpCiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgdW5zaWduZWQgY291bnQgPSBhcmdzLnNpemUo
KTsKKyAgICB1bnNpZ25lZCBjb3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKICAgICBWZWN0
b3I8TlBWYXJpYW50LCA4PiBjQXJncyhjb3VudCk7CiAKICAgICB1bnNpZ25lZCBpOwogICAgIGZv
ciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICBjb252ZXJ0VmFsdWVUb05QVmFyaWFu
dChleGVjLCBhcmdzLmF0KGkpLCAmY0FyZ3NbaV0pOworICAgICAgICBjb252ZXJ0VmFsdWVUb05Q
VmFyaWFudChleGVjLCBleGVjLT5hcmd1bWVudChpKSwgJmNBcmdzW2ldKTsKIAogICAgIC8vIElu
dm9rZSB0aGUgJ0MnIG1ldGhvZC4KICAgICBib29sIHJldHZhbCA9IHRydWU7CkluZGV4OiBXZWJD
b3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9j
L2NfaW5zdGFuY2UuaAkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJDb3JlL2JyaWRnZS9jL2NfaW5z
dGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsOSArNjAsOSBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBKU1ZhbHVlIGRlZmF1bHRWYWx1ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVU
eXBlKSBjb25zdDsKIAogICAgIHZpcnR1YWwgSlNWYWx1ZSBnZXRNZXRob2QoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpOwotICAgIHZpcnR1YWwgSlNWYWx1
ZSBpbnZva2VNZXRob2QoRXhlY1N0YXRlKiwgUnVudGltZU1ldGhvZCogbWV0aG9kLCBjb25zdCBB
cmdMaXN0Jik7CisgICAgdmlydHVhbCBKU1ZhbHVlIGludm9rZU1ldGhvZChFeGVjU3RhdGUqLCBS
dW50aW1lTWV0aG9kKiBtZXRob2QpOwogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ludm9rZURl
ZmF1bHRNZXRob2QoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEpTVmFsdWUgaW52b2tlRGVmYXVsdE1l
dGhvZChFeGVjU3RhdGUqLCBjb25zdCBBcmdMaXN0Jik7CisgICAgdmlydHVhbCBKU1ZhbHVlIGlu
dm9rZURlZmF1bHRNZXRob2QoRXhlY1N0YXRlKik7CiAKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9y
dHNDb25zdHJ1Y3QoKSBjb25zdDsKICAgICB2aXJ0dWFsIEpTVmFsdWUgaW52b2tlQ29uc3RydWN0
KEV4ZWNTdGF0ZSosIGNvbnN0IEFyZ0xpc3QmKTsKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL2puaS9q
c2MvSmF2YUluc3RhbmNlSlNDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9qbmkv
anNjL0phdmFJbnN0YW5jZUpTQy5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgV2ViQ29yZS9icmlk
Z2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsNyAr
MTMxLDcgQEAgSlNWYWx1ZSBKYXZhSW5zdGFuY2U6OmdldE1ldGhvZChFeGVjU3RhdAogICAgIHJl
dHVybiBuZXcgKGV4ZWMpIEphdmFSdW50aW1lTWV0aG9kKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKSwgcHJvcGVydHlOYW1lLCBtZXRob2RMaXN0KTsKIH0KIAotSlNWYWx1ZSBKYXZh
SW5zdGFuY2U6Omludm9rZU1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIFJ1bnRpbWVNZXRob2QqIHJ1
bnRpbWVNZXRob2QsIGNvbnN0IEFyZ0xpc3QgJmFyZ3MpCitKU1ZhbHVlIEphdmFJbnN0YW5jZTo6
aW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgUnVudGltZU1ldGhvZCogcnVudGltZU1ldGhv
ZCkKIHsKICAgICBpZiAoIWFzT2JqZWN0KHJ1bnRpbWVNZXRob2QpLT5pbmhlcml0cygmSmF2YVJ1
bnRpbWVNZXRob2Q6OnNfaW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5
cGVFcnJvciwgIkF0dGVtcHQgdG8gaW52b2tlIG5vbi1KYXZhIG1ldGhvZCBvbiBKYXZhIG9iamVj
dC4iKTsKQEAgLTEzOSw3ICsxMzksNyBAQCBKU1ZhbHVlIEphdmFJbnN0YW5jZTo6aW52b2tlTWV0
aG9kKEV4ZWNTCiAgICAgY29uc3QgTWV0aG9kTGlzdCYgbWV0aG9kTGlzdCA9ICpydW50aW1lTWV0
aG9kLT5tZXRob2RzKCk7CiAKICAgICBpbnQgaTsKLSAgICBpbnQgY291bnQgPSBhcmdzLnNpemUo
KTsKKyAgICBpbnQgY291bnQgPSBleGVjLT5hcmd1bWVudENvdW50KCk7CiAgICAgSlNWYWx1ZSBy
ZXN1bHRWYWx1ZTsKICAgICBNZXRob2QqIG1ldGhvZCA9IDA7CiAgICAgc2l6ZV90IG51bU1ldGhv
ZHMgPSBtZXRob2RMaXN0LnNpemUoKTsKQEAgLTE2OCw4ICsxNjgsOCBAQCBKU1ZhbHVlIEphdmFJ
bnN0YW5jZTo6aW52b2tlTWV0aG9kKEV4ZWNTCiAKICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7
IGkrKykgewogICAgICAgICBKYXZhUGFyYW1ldGVyKiBhUGFyYW1ldGVyID0gak1ldGhvZC0+cGFy
YW1ldGVyQXQoaSk7Ci0gICAgICAgIGpBcmdzW2ldID0gY29udmVydFZhbHVlVG9KVmFsdWUoZXhl
YywgbV9yb290T2JqZWN0LmdldCgpLCBhcmdzLmF0KGkpLCBhUGFyYW1ldGVyLT5nZXRKTklUeXBl
KCksIGFQYXJhbWV0ZXItPnR5cGUoKSk7Ci0gICAgICAgIExPRyhMaXZlQ29ubmVjdCwgIkphdmFJ
bnN0YW5jZTo6aW52b2tlTWV0aG9kIGFyZ1slZF0gPSAlcyIsIGksIGFyZ3MuYXQoaSkudG9TdHJp
bmcoZXhlYykuYXNjaWkoKSk7CisgICAgICAgIGpBcmdzW2ldID0gY29udmVydFZhbHVlVG9KVmFs
dWUoZXhlYywgbV9yb290T2JqZWN0LmdldCgpLCBleGVjLT5hcmd1bWVudChpKSwgYVBhcmFtZXRl
ci0+Z2V0Sk5JVHlwZSgpLCBhUGFyYW1ldGVyLT50eXBlKCkpOworICAgICAgICBMT0coTGl2ZUNv
bm5lY3QsICJKYXZhSW5zdGFuY2U6Omludm9rZU1ldGhvZCBhcmdbJWRdID0gJXMiLCBpLCBleGVj
LT5hcmd1bWVudChpKS50b1N0cmluZyhleGVjKS5hc2NpaSgpKTsKICAgICB9CiAKICAgICBqdmFs
dWUgcmVzdWx0OwpJbmRleDogV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0Mu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFJbnN0YW5jZUpTQy5o
CShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUluc3RhbmNl
SlNDLmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgSlNWYWx1ZSBkZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlw
ZSkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIEpTVmFsdWUgZ2V0TWV0aG9kKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKLSAgICB2aXJ0dWFsIEpTVmFsdWUg
aW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgUnVudGltZU1ldGhvZCogbWV0aG9kLCBjb25z
dCBBcmdMaXN0JiBhcmdzKTsKKyAgICB2aXJ0dWFsIEpTVmFsdWUgaW52b2tlTWV0aG9kKEV4ZWNT
dGF0ZSogZXhlYywgUnVudGltZU1ldGhvZCogbWV0aG9kKTsKIAogICAgIGpvYmplY3QgamF2YUlu
c3RhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0YW5jZS0+bV9pbnN0YW5jZTsgfQogCkluZGV4
OiBXZWJDb3JlL2JyaWRnZS9qc2MvQnJpZGdlSlNDLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
cmlkZ2UvanNjL0JyaWRnZUpTQy5oCShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNvcmUvYnJpZGdl
L2pzYy9CcmlkZ2VKU0MuaAkod29ya2luZyBjb3B5KQpAQCAtOTIsMTAgKzkyLDEwIEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIGJvb2wgc2V0VmFsdWVPZlVuZGVmaW5lZEZpZWxkKEV4ZWNTdGF0ZSos
IGNvbnN0IElkZW50aWZpZXImLCBKU1ZhbHVlKSB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgdmly
dHVhbCBKU1ZhbHVlIGdldE1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSkgPSAwOwotICAgIHZpcnR1YWwgSlNWYWx1ZSBpbnZva2VNZXRob2QoRXhl
Y1N0YXRlKiwgUnVudGltZU1ldGhvZCogbWV0aG9kLCBjb25zdCBBcmdMaXN0JiBhcmdzKSA9IDA7
CisgICAgdmlydHVhbCBKU1ZhbHVlIGludm9rZU1ldGhvZChFeGVjU3RhdGUqLCBSdW50aW1lTWV0
aG9kKiBtZXRob2QpID0gMDsKIAogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ludm9rZURlZmF1
bHRNZXRob2QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgSlNWYWx1ZSBp
bnZva2VEZWZhdWx0TWV0aG9kKEV4ZWNTdGF0ZSosIGNvbnN0IEFyZ0xpc3QmKSB7IHJldHVybiBq
c1VuZGVmaW5lZCgpOyB9CisgICAgdmlydHVhbCBKU1ZhbHVlIGludm9rZURlZmF1bHRNZXRob2Qo
RXhlY1N0YXRlKikgeyByZXR1cm4ganNVbmRlZmluZWQoKTsgfQogCiAgICAgdmlydHVhbCBib29s
IHN1cHBvcnRzQ29uc3RydWN0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFs
IEpTVmFsdWUgaW52b2tlQ29uc3RydWN0KEV4ZWNTdGF0ZSosIGNvbnN0IEFyZ0xpc3QmKSB7IHJl
dHVybiBKU1ZhbHVlKCk7IH0KSW5kZXg6IFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY19pbnN0YW5j
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY19pbnN0YW5jZS5oCShy
ZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY19pbnN0YW5jZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC00OCwxMCArNDgsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgSlNW
YWx1ZSBkZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29u
c3Q7CiAKICAgICB2aXJ0dWFsIEpTVmFsdWUgZ2V0TWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKLSAgICBKU1ZhbHVlIGludm9rZU9iamNNZXRo
b2QoRXhlY1N0YXRlKiwgT2JqY01ldGhvZCogbWV0aG9kLCBjb25zdCBBcmdMaXN0Jik7Ci0gICAg
dmlydHVhbCBKU1ZhbHVlIGludm9rZU1ldGhvZChFeGVjU3RhdGUqLCBSdW50aW1lTWV0aG9kKiBt
ZXRob2QsIGNvbnN0IEFyZ0xpc3QmKTsKKyAgICBKU1ZhbHVlIGludm9rZU9iamNNZXRob2QoRXhl
Y1N0YXRlKiwgT2JqY01ldGhvZCogbWV0aG9kKTsKKyAgICB2aXJ0dWFsIEpTVmFsdWUgaW52b2tl
TWV0aG9kKEV4ZWNTdGF0ZSosIFJ1bnRpbWVNZXRob2QqIG1ldGhvZCk7CiAgICAgdmlydHVhbCBi
b29sIHN1cHBvcnRzSW52b2tlRGVmYXVsdE1ldGhvZCgpIGNvbnN0OwotICAgIHZpcnR1YWwgSlNW
YWx1ZSBpbnZva2VEZWZhdWx0TWV0aG9kKEV4ZWNTdGF0ZSosIGNvbnN0IEFyZ0xpc3QmKTsKKyAg
ICB2aXJ0dWFsIEpTVmFsdWUgaW52b2tlRGVmYXVsdE1ldGhvZChFeGVjU3RhdGUqKTsKIAogICAg
IEpTVmFsdWUgZ2V0VmFsdWVPZlVuZGVmaW5lZEZpZWxkKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50
aWZpZXImKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc2V0VmFsdWVPZlVuZGVmaW5lZEZpZWxk
KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBKU1ZhbHVlKTsKSW5kZXg6IFdlYkNvcmUv
YnJpZGdlL29iamMvb2JqY19pbnN0YW5jZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRn
ZS9vYmpjL29iamNfaW5zdGFuY2UubW0JKHJldmlzaW9uIDYwMzQxKQorKysgV2ViQ29yZS9icmlk
Z2Uvb2JqYy9vYmpjX2luc3RhbmNlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQsNyArMTk0LDcg
QEAgSlNWYWx1ZSBPYmpjSW5zdGFuY2U6OmdldE1ldGhvZChFeGVjU3RhdAogICAgIHJldHVybiBu
ZXcgKGV4ZWMpIE9iakNSdW50aW1lTWV0aG9kKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSwgcHJvcGVydHlOYW1lLCBtZXRob2RMaXN0KTsKIH0KIAotSlNWYWx1ZSBPYmpjSW5zdGFu
Y2U6Omludm9rZU1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIFJ1bnRpbWVNZXRob2QqIHJ1bnRpbWVN
ZXRob2QsIGNvbnN0IEFyZ0xpc3QgJmFyZ3MpCitKU1ZhbHVlIE9iamNJbnN0YW5jZTo6aW52b2tl
TWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgUnVudGltZU1ldGhvZCogcnVudGltZU1ldGhvZCkKIHsK
ICAgICBpZiAoIWFzT2JqZWN0KHJ1bnRpbWVNZXRob2QpLT5pbmhlcml0cygmT2JqQ1J1bnRpbWVN
ZXRob2Q6OnNfaW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJv
ciwgIkF0dGVtcHQgdG8gaW52b2tlIG5vbi1wbHVnLWluIG1ldGhvZCBvbiBwbHVnLWluIG9iamVj
dC4iKTsKQEAgLTIwNSwxMCArMjA1LDEwIEBAIEpTVmFsdWUgT2JqY0luc3RhbmNlOjppbnZva2VN
ZXRob2QoRXhlY1MKICAgICAvLyBuYW1lIG1hdGNoIGZvciBhIHBhcnRpY3VsYXIgbWV0aG9kLgog
ICAgIEFTU0VSVChtZXRob2RMaXN0LnNpemUoKSA9PSAxKTsKIAotICAgIHJldHVybiBpbnZva2VP
YmpjTWV0aG9kKGV4ZWMsIHN0YXRpY19jYXN0PE9iamNNZXRob2QqPihtZXRob2RMaXN0WzBdKSwg
YXJncyk7CisgICAgcmV0dXJuIGludm9rZU9iamNNZXRob2QoZXhlYywgc3RhdGljX2Nhc3Q8T2Jq
Y01ldGhvZCo+KG1ldGhvZExpc3RbMF0pKTsKIH0KIAotSlNWYWx1ZSBPYmpjSW5zdGFuY2U6Omlu
dm9rZU9iamNNZXRob2QoRXhlY1N0YXRlKiBleGVjLCBPYmpjTWV0aG9kKiBtZXRob2QsIGNvbnN0
IEFyZ0xpc3QgJmFyZ3MpCitKU1ZhbHVlIE9iamNJbnN0YW5jZTo6aW52b2tlT2JqY01ldGhvZChF
eGVjU3RhdGUqIGV4ZWMsIE9iamNNZXRob2QqIG1ldGhvZCkKIHsKICAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGpzVW5kZWZpbmVkKCk7CiAgICAgCkBAIC0yMzQsOSArMjM0LDkgQEAgSlNWYWx1ZSBPYmpj
SW5zdGFuY2U6Omludm9rZU9iamNNZXRob2QoRQogICAgICAgICBbaW52b2NhdGlvbiBzZXRBcmd1
bWVudDomanNOYW1lIGF0SW5kZXg6Ml07CiAKICAgICAgICAgTlNNdXRhYmxlQXJyYXkqIG9iamNB
cmdzID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKLSAgICAgICAgaW50IGNvdW50ID0gYXJncy5z
aXplKCk7CisgICAgICAgIGludCBjb3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICBPYmpjVmFs
dWUgdmFsdWUgPSBjb252ZXJ0VmFsdWVUb09iamNWYWx1ZShleGVjLCBhcmdzLmF0KGkpLCBPYmpj
T2JqZWN0VHlwZSk7CisgICAgICAgICAgICBPYmpjVmFsdWUgdmFsdWUgPSBjb252ZXJ0VmFsdWVU
b09iamNWYWx1ZShleGVjLCBleGVjLT5hcmd1bWVudChpKSwgT2JqY09iamVjdFR5cGUpOwogICAg
ICAgICAgICAgW29iamNBcmdzIGFkZE9iamVjdDp2YWx1ZS5vYmplY3RWYWx1ZV07CiAgICAgICAg
IH0KICAgICAgICAgW2ludm9jYXRpb24gc2V0QXJndW1lbnQ6Jm9iamNBcmdzIGF0SW5kZXg6M107
CkBAIC0yNTEsNyArMjUxLDcgQEAgSlNWYWx1ZSBPYmpjSW5zdGFuY2U6Omludm9rZU9iamNNZXRo
b2QoRQogICAgICAgICAgICAgLy8gdHlwZXMuCiAgICAgICAgICAgICBBU1NFUlQob2JqY1ZhbHVl
VHlwZSAhPSBPYmpjSW52YWxpZFR5cGUgJiYgb2JqY1ZhbHVlVHlwZSAhPSBPYmpjVm9pZFR5cGUp
OwogCi0gICAgICAgICAgICBPYmpjVmFsdWUgdmFsdWUgPSBjb252ZXJ0VmFsdWVUb09iamNWYWx1
ZShleGVjLCBhcmdzLmF0KGktMiksIG9iamNWYWx1ZVR5cGUpOworICAgICAgICAgICAgT2JqY1Zh
bHVlIHZhbHVlID0gY29udmVydFZhbHVlVG9PYmpjVmFsdWUoZXhlYywgZXhlYy0+YXJndW1lbnQo
aS0yKSwgb2JqY1ZhbHVlVHlwZSk7CiAKICAgICAgICAgICAgIHN3aXRjaCAob2JqY1ZhbHVlVHlw
ZSkgewogICAgICAgICAgICAgICAgIGNhc2UgT2JqY09iamVjdFR5cGU6CkBAIC0zMjMsNyArMzIz
LDcgQEAgSlNWYWx1ZSBPYmpjSW5zdGFuY2U6Omludm9rZU9iamNNZXRob2QoRQogICAgIHJldHVy
biBjb25zdF9jYXN0PEpTVmFsdWUmPihyZXN1bHQpOwogfQogCi1KU1ZhbHVlIE9iamNJbnN0YW5j
ZTo6aW52b2tlRGVmYXVsdE1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QgJmFy
Z3MpCitKU1ZhbHVlIE9iamNJbnN0YW5jZTo6aW52b2tlRGVmYXVsdE1ldGhvZChFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1VuZGVmaW5lZCgpOwogCkBAIC0zNDUs
OSArMzQ1LDkgQEAgSlNWYWx1ZSBPYmpjSW5zdGFuY2U6Omludm9rZURlZmF1bHRNZXRobwogICAg
IH0KIAogICAgIE5TTXV0YWJsZUFycmF5KiBvYmpjQXJncyA9IFtOU011dGFibGVBcnJheSBhcnJh
eV07Ci0gICAgdW5zaWduZWQgY291bnQgPSBhcmdzLnNpemUoKTsKKyAgICB1bnNpZ25lZCBjb3Vu
dCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
Y291bnQ7IGkrKykgewotICAgICAgICBPYmpjVmFsdWUgdmFsdWUgPSBjb252ZXJ0VmFsdWVUb09i
amNWYWx1ZShleGVjLCBhcmdzLmF0KGkpLCBPYmpjT2JqZWN0VHlwZSk7CisgICAgICAgIE9iamNW
YWx1ZSB2YWx1ZSA9IGNvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50
KGkpLCBPYmpjT2JqZWN0VHlwZSk7CiAgICAgICAgIFtvYmpjQXJncyBhZGRPYmplY3Q6dmFsdWUu
b2JqZWN0VmFsdWVdOwogICAgIH0KICAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomb2JqY0Fy
Z3MgYXRJbmRleDoyXTsKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLm1tCShyZXZp
c2lvbiA2MDM0MSkKKysrIFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMTUsOCArMjE1LDkgQEAgdm9pZCBPYmpjRmFsbGJhY2tPYmplY3RJbXA6
OnB1dChFeGVjU3RhdAogewogfQogCi1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxP
YmpDRmFsbGJhY2tPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogZnVuY3Rpb24sIEpT
VmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGljIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjYWxsT2JqQ0ZhbGxiYWNrT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAg
ICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAoIXRo
aXNWYWx1ZS5pbmhlcml0cygmT2JqQ1J1bnRpbWVPYmplY3Q6OnNfaW5mbykpCiAgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKQEAgLTIzNSwxMCArMjM2LDEwIEBA
IHN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbE9iakNGYWwKICAgICBpZiAoW3Rhcmdl
dE9iamVjdCByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGludm9rZVVuZGVmaW5lZE1ldGhv
ZEZyb21XZWJTY3JpcHQ6d2l0aEFyZ3VtZW50czopXSl7CiAgICAgICAgIE9iamNDbGFzcyogb2Jq
Y0NsYXNzID0gc3RhdGljX2Nhc3Q8T2JqY0NsYXNzKj4ob2JqY0luc3RhbmNlLT5nZXRDbGFzcygp
KTsKICAgICAgICAgT3duUHRyPE9iamNNZXRob2Q+IGZhbGxiYWNrTWV0aG9kKG5ldyBPYmpjTWV0
aG9kKG9iamNDbGFzcy0+aXNhKCksIEBzZWxlY3RvcihpbnZva2VVbmRlZmluZWRNZXRob2RGcm9t
V2ViU2NyaXB0OndpdGhBcmd1bWVudHM6KSkpOwotICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBu
YW1lSWRlbnRpZmllciA9IHN0YXRpY19jYXN0PE9iamNGYWxsYmFja09iamVjdEltcCo+KGZ1bmN0
aW9uKS0+cHJvcGVydHlOYW1lKCk7CisgICAgICAgIGNvbnN0IElkZW50aWZpZXImIG5hbWVJZGVu
dGlmaWVyID0gc3RhdGljX2Nhc3Q8T2JqY0ZhbGxiYWNrT2JqZWN0SW1wKj4oZXhlYy0+Y2FsbGVl
KCkpLT5wcm9wZXJ0eU5hbWUoKTsKICAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBuYW1l
KEFkb3B0Q0YsIENGU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgbmFtZUlkZW50aWZpZXIu
ZGF0YSgpLCBuYW1lSWRlbnRpZmllci5zaXplKCkpKTsKICAgICAgICAgZmFsbGJhY2tNZXRob2Qt
PnNldEphdmFTY3JpcHROYW1lKG5hbWUuZ2V0KCkpOwotICAgICAgICByZXN1bHQgPSBvYmpjSW5z
dGFuY2UtPmludm9rZU9iamNNZXRob2QoZXhlYywgZmFsbGJhY2tNZXRob2QuZ2V0KCksIGFyZ3Mp
OworICAgICAgICByZXN1bHQgPSBvYmpjSW5zdGFuY2UtPmludm9rZU9iamNNZXRob2QoZXhlYywg
ZmFsbGJhY2tNZXRob2QuZ2V0KCkpOwogICAgIH0KICAgICAgICAgICAgIAogICAgIG9iamNJbnN0
YW5jZS0+ZW5kKCk7CkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gNjAzNzMpCisrKyBXZWJLaXQvbWFjL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDEwLTA1LTI4ICBHZW9mZnJl
eSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgU2ltcGxpZmllZCB0aGUgaG9zdCBjYWxsaW5nIGNvbnZlbnRp
b24uCisKKyAgICAgICAgUEFSVCBPTkU6IEZ1bmN0aW9uYWwgY29kZSBjaGFuZ2VzLgorICAgICAg
ICAKKyAgICAgICAgWyBOb25lIGluIFdlYktpdCBdCisgICAgICAgIAorICAgICAgICBQQVJUIFRX
TzogR2xvYmFsIHNlYXJjaCBhbmQgcmVwbGFjZS4KKyAgICAgICAgCisgICAgICAgIEluIHRoZSBh
cmVhcyBiZWxvdywgSSB1c2VkIGdsb2JhbCBzZWFyY2gtYW5kLXJlcGxhY2UgdG8gY2hhbmdlCisg
ICAgICAgICAgICAoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0
JikgPT4gKEV4ZWNTdGF0ZSopCisgICAgICAgICAgICBhcmdzLnNpemUoKSA9PiBleGVjLT5hcmd1
bWVudENvdW50KCkKKyAgICAgICAgICAgIGFyZ3MuYXQoaSkgPT4gZXhlYy0+YXJndW1lbnQoaSkK
KworICAgICAgICAqIFBsdWdpbnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UuaDoKKyAgICAgICAgKiBQ
bHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLm1tOgorICAgICAgICAoV2ViS2l0OjpQcm94eUlu
c3RhbmNlOjppbnZva2UpOgorICAgICAgICAoV2ViS2l0OjpQcm94eUluc3RhbmNlOjppbnZva2VN
ZXRob2QpOgorICAgICAgICAoV2ViS2l0OjpQcm94eUluc3RhbmNlOjppbnZva2VEZWZhdWx0TWV0
aG9kKToKKwogMjAxMC0wNS0yNyAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgpJbmRleDogV2ViS2l0L21hYy9QbHVnaW5z
L0hvc3RlZC9Qcm94eUluc3RhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9QbHVnaW5z
L0hvc3RlZC9Qcm94eUluc3RhbmNlLmgJKHJldmlzaW9uIDYwMzQxKQorKysgV2ViS2l0L21hYy9Q
bHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDEwICs2
NCwxMCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgSlNDOjpCaW5kaW5nczo6Q2xhc3MqIGdldENs
YXNzKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIEpTQzo6SlNWYWx1ZSBnZXRNZXRob2QoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKLSAg
ICB2aXJ0dWFsIEpTQzo6SlNWYWx1ZSBpbnZva2VNZXRob2QoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OlJ1bnRpbWVNZXRob2QqLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MpOworICAgIHZpcnR1YWwg
SlNDOjpKU1ZhbHVlIGludm9rZU1ldGhvZChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UnVudGltZU1l
dGhvZCopOwogCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzSW52b2tlRGVmYXVsdE1ldGhvZCgp
IGNvbnN0OwotICAgIHZpcnR1YWwgSlNDOjpKU1ZhbHVlIGludm9rZURlZmF1bHRNZXRob2QoSlND
OjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OkFyZ0xpc3QmKTsKKyAgICB2aXJ0dWFsIEpTQzo6SlNW
YWx1ZSBpbnZva2VEZWZhdWx0TWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7CiAKICAgICB2aXJ0dWFs
IGJvb2wgc3VwcG9ydHNDb25zdHJ1Y3QoKSBjb25zdDsKICAgICB2aXJ0dWFsIEpTQzo6SlNWYWx1
ZSBpbnZva2VDb25zdHJ1Y3QoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OkFyZ0xpc3QmKTsK
QEAgLTgxLDcgKzgxLDcgQEAgcHJpdmF0ZToKICAgICBKU0M6OkpTVmFsdWUgbnVtYmVyVmFsdWUo
SlNDOjpFeGVjU3RhdGUqKSBjb25zdDsKICAgICBKU0M6OkpTVmFsdWUgYm9vbGVhblZhbHVlKCkg
Y29uc3Q7CiAgICAgCi0gICAgSlNDOjpKU1ZhbHVlIGludm9rZShKU0M6OkV4ZWNTdGF0ZSosIElu
dm9rZVR5cGUsIHVpbnQ2NF90IGlkZW50aWZpZXIsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncyk7
CisgICAgSlNDOjpKU1ZhbHVlIGludm9rZShKU0M6OkV4ZWNTdGF0ZSosIEludm9rZVR5cGUsIHVp
bnQ2NF90IGlkZW50aWZpZXIsIGNvbnN0IEpTQzo6QXJnTGlzdCYpOwogICAgIAogICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBUPgogICAgIHN0ZDo6YXV0b19wdHI8VD4gd2FpdEZvclJlcGx5KHVpbnQz
Ml90IHJlcXVlc3RJRCkgY29uc3QgewpJbmRleDogV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9Q
cm94eUluc3RhbmNlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQv
UHJveHlJbnN0YW5jZS5tbQkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJLaXQvbWFjL1BsdWdpbnMv
SG9zdGVkL1Byb3h5SW5zdGFuY2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTE0MSw3ICsxNDEsNyBA
QCBKU0M6OkJpbmRpbmdzOjpDbGFzcyogUHJveHlJbnN0YW5jZTo6Z2V0CiAgICAgcmV0dXJuIHBy
b3h5Q2xhc3MoKTsKIH0KIAotSlNWYWx1ZSBQcm94eUluc3RhbmNlOjppbnZva2UoSlNDOjpFeGVj
U3RhdGUqIGV4ZWMsIEludm9rZVR5cGUgdHlwZSwgdWludDY0X3QgaWRlbnRpZmllciwgY29uc3Qg
SlNDOjpBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBQcm94eUluc3RhbmNlOjppbnZva2UoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMsIEludm9rZVR5cGUgdHlwZSwgdWludDY0X3QgaWRlbnRpZmllciwgY29u
c3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBpZiAoIW1faW5zdGFuY2VQcm94eSkKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC0xOTYsNyArMTk2LDcgQEAgSlNWYWx1ZSBQcm94eUlu
c3RhbmNlOjpnZXRNZXRob2QoSlNDOjpFeAogICAgIHJldHVybiBuZXcgKGV4ZWMpIFByb3h5UnVu
dGltZU1ldGhvZChleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHByb3BlcnR5TmFt
ZSwgbWV0aG9kTGlzdCk7CiB9CiAKLUpTVmFsdWUgUHJveHlJbnN0YW5jZTo6aW52b2tlTWV0aG9k
KEV4ZWNTdGF0ZSogZXhlYywgSlNDOjpSdW50aW1lTWV0aG9kKiBydW50aW1lTWV0aG9kLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBQcm94eUluc3RhbmNlOjppbnZva2VNZXRob2QoRXhl
Y1N0YXRlKiBleGVjLCBKU0M6OlJ1bnRpbWVNZXRob2QqIHJ1bnRpbWVNZXRob2QpCiB7CiAgICAg
aWYgKCFhc09iamVjdChydW50aW1lTWV0aG9kKS0+aW5oZXJpdHMoJlByb3h5UnVudGltZU1ldGhv
ZDo6c19pbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAi
QXR0ZW1wdCB0byBpbnZva2Ugbm9uLXBsdWctaW4gbWV0aG9kIG9uIHBsdWctaW4gb2JqZWN0LiIp
OwpAQCAtMjA3LDcgKzIwNyw3IEBAIEpTVmFsdWUgUHJveHlJbnN0YW5jZTo6aW52b2tlTWV0aG9k
KEV4ZWMKIAogICAgIFByb3h5TWV0aG9kKiBtZXRob2QgPSBzdGF0aWNfY2FzdDxQcm94eU1ldGhv
ZCo+KG1ldGhvZExpc3RbMF0pOwogCi0gICAgcmV0dXJuIGludm9rZShleGVjLCBJbnZva2UsIG1l
dGhvZC0+c2VydmVySWRlbnRpZmllcigpLCBhcmdzKTsKKyAgICByZXR1cm4gaW52b2tlKGV4ZWMs
IEludm9rZSwgbWV0aG9kLT5zZXJ2ZXJJZGVudGlmaWVyKCksIEFyZ0xpc3QoZXhlYykpOwogfQog
CiBib29sIFByb3h5SW5zdGFuY2U6OnN1cHBvcnRzSW52b2tlRGVmYXVsdE1ldGhvZCgpIGNvbnN0
CkBAIC0yMjgsMTAgKzIyOCwxMCBAQCBib29sIFByb3h5SW5zdGFuY2U6OnN1cHBvcnRzSW52b2tl
RGVmYXVsCiAgICAgICAgIAogICAgIHJldHVybiBmYWxzZTsKIH0KLSAgICAKLUpTVmFsdWUgUHJv
eHlJbnN0YW5jZTo6aW52b2tlRGVmYXVsdE1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCisKK0pTVmFsdWUgUHJveHlJbnN0YW5jZTo6aW52b2tlRGVmYXVsdE1ldGhv
ZChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGludm9rZShleGVjLCBJbnZva2VEZWZh
dWx0LCAwLCBhcmdzKTsKKyAgICByZXR1cm4gaW52b2tlKGV4ZWMsIEludm9rZURlZmF1bHQsIDAs
IEFyZ0xpc3QoZXhlYykpOwogfQogCiBib29sIFByb3h5SW5zdGFuY2U6OnN1cHBvcnRzQ29uc3Ry
dWN0KCkgY29uc3QK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57381</attachid>
            <date>2010-05-28 14:33:54 -0700</date>
            <delta_ts>2010-05-28 15:38:10 -0700</delta_ts>
            <desc>PART TWO: Global search and replace</desc>
            <filename>ro1.txt</filename>
            <type>text/plain</type>
            <size>384416</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDYwMzczKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzgwIEBACisyMDEwLTA1LTI4ICBHZW9mZnJl
eSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgU2ltcGxpZmllZCB0aGUgaG9zdCBjYWxsaW5nIGNvbnZlbnRp
b24uCisgICAgICAgIAorICAgICAgICAxNyUgc3BlZWR1cCBvbiBob3N0IGZ1bmN0aW9uIGNhbGxz
LiBObyBjaGFuZ2Ugb24gU3VuU3BpZGVyLgorICAgICAgICAKKyAgICAgICAgQWxsIEpTIGNhbGxz
IChidXQgbm90IGNvbnN0cnVjdHMsIHlldCkgbm93IGdvIHRocm91Z2ggdGhlIG5vcm1hbCBKUwor
ICAgICAgICBjYWxsaW5nIGNvbnZlbnRpb24gdmlhIHRoZSBSZWdpc3RlckZpbGUuIEFzIGEgcmVz
dWx0LCB0aGUgaG9zdCBjYWxsaW5nCisgICAgICAgIGNvbnZlbnRpb24sIHdoaWNoIHVzZWQgdG8g
YmUgdGhpcworCisgICAgICAgICAgICBKU1ZhbHVlIChKU0NfSE9TVF9DQUxMICpOYXRpdmVGdW5j
dGlvbikoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYpCisgICAgICAgICAgICAKKyAgICAgICAgaXMgbm93IHRoaXMKKworICAgICAgICAgICAg
SlNWYWx1ZSAoSlNDX0hPU1RfQ0FMTCAqTmF0aXZlRnVuY3Rpb24pKEV4ZWNTdGF0ZSopCisgICAg
ICAgICAgICAKKyAgICAgICAgQ2FsbGVlLCAndGhpcycsIGFuZCBhcmd1bWVudCBhY2Nlc3MgYWxs
IGhhcGVuIHJlbGF0aXZlIHRvIHRoZSBFeGVjU3RhdGUqLAorICAgICAgICB3aGljaCBpcyBhIHBv
aW50ZXIgaW50byB0aGUgUmVnaXN0ZXJGaWxlLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRj
aCBjb21lcyBpbiB0d28gcGFydHMuCisgICAgICAgIAorICAgICAgICBQQVJUIE9ORTogRnVuY3Rp
b25hbCBjb2RlIGNoYW5nZXMuCisgICAgICAgIAorICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOiBE
aXNhYmxlZCBvcHRpbWl6ZWQgY2FsbHMgb24gcGxhdGZvcm1zIEkgZGlkbid0IHRlc3QuCisgICAg
ICAgIFdlIGNhbiByZS1lbmFibGUgb25jZSB3ZSB2ZXJpZnkgdGhhdCBob3N0IGNhbGxzIG9uIHRo
ZXNlIHBsYXRmb3JtcyBhcmUKKyAgICAgICAgY29ycmVjdC4KKworICAgICAgICAqIGRlYnVnZ2Vy
L0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKEpTQzo6RGVidWdnZXJDYWxsRnJhbWU6
OmZ1bmN0aW9uTmFtZSk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lOjpjYWxjdWxh
dGVkRnVuY3Rpb25OYW1lKTogVXBkYXRlZCBmb3IgY2hhbmdlIHRvCisgICAgICAgIEV4ZWNTdGF0
ZTo6Y2FsbGVlKCkuCisKKyAgICAgICAgKEpTQzo6RGVidWdnZXJDYWxsRnJhbWU6OnRoaXNPYmpl
Y3QpOiBVcGRhdGVkIGZvciByZW1vdmFsIG9mIEV4ZWNTdGF0ZTo6dGhpc1ZhbHVlKCkuCisKKyAg
ICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwOgorICAgICAgICAqIGludGVycHJldGVy
L0NhbGxGcmFtZS5oOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OmNhbGxlZSk6CisgICAgICAg
IChKU0M6OkV4ZWNTdGF0ZTo6c2NvcGVDaGFpbik6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6
aW5pdCk6IENoYW5nZWQgY2FsbGVlKCkgdG8gYmUgSlNPYmplY3QqIGluc3RlYWQgb2YKKyAgICAg
ICAgSlNGdW5jdGlvbiogLS0gbm93LCBpdCBtaWdodCBiZSBzb21lIG90aGVyIGNhbGxhYmxlIGhv
c3Qgb2JqZWN0LgorCisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6aG9zdFRoaXNSZWdpc3Rlcik6
CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6aG9zdFRoaXNWYWx1ZSk6CisgICAgICAgIChKU0M6
OkV4ZWNTdGF0ZTo6YXJndW1lbnRDb3VudCk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OmFyZ3Vt
ZW50KToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpzZXRBcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6c2V0Q2FsbGVlKTogQWRkZWQgY29udmVu
aWVudCBhY2Nlc3NvcnMgZm9yIGFyZ3VtZW50cworICAgICAgICBmcm9tIHdpdGhpbiBhIGhvc3Qg
ZnVuY3Rpb24uIFJlbW92ZWQgdGhpc1ZhbHVlKCkgYmVjYXVzZSBpdCB3YXMgdG9vCisgICAgICAg
IHRlbXB0aW5nIHRvIHVzZSBpbmNvcnJlY3RseSwgYW5kIGl0IG9ubHkgaGFkIG9uZSBvciB0d28g
Y2xpZW50cywgYW55d2F5LgorCisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3Bw
OgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y2FsbEV2YWwpOiBVcGRhdGVkIGZvciByZW1v
dmFsIG9mIEV4ZWNTdGF0ZTo6dGhpc1ZhbHVlKCkuCisKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0
ZXI6OnRocm93RXhjZXB0aW9uKTogQmUgc3VyZSB0byBzaHJpbmsgdGhlIHJlZ2lzdGVyIGZpbGUK
KyAgICAgICAgYmVmb3JlIGludm9raW5nIHRoZSBleGNlcHRpb24gaGFuZGxlciwgdG8gcmVkdWNl
IHRoZSBjaGFuY2VzIHRoYXQgdGhlCisgICAgICAgIGhhbmRsZXIgd2lsbCByZS10aHJvdyBpbiB0
aGUgY2FzZSBvZiBzdGFjayBvdmVyZmxvdy4gKFJlLXRocm93aW5nIGlzIG5vdworICAgICAgICBt
b3JlIGxpa2VseSB0aGFuIGl0IHVzZWQgdG8gYmUsIHNpbmNlIHN0YW5kYXJkaXppbmcgdGhlIGNh
bGxpbmcgY29udmVudGlvbgorICAgICAgICBpbXBsaWNpdGx5IGFkZGVkIHN0YWNrIG92ZXJmbG93
IGNoZWNrcyB0byBzb21lIHBsYWNlcyB3aGVyZSB0aGV5IHVzZWQgdG8gYmUgbWlzc2luZy4pCisK
KyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGUpOiBDbGFyaWZpZWQgdGhlIHNjb3Bl
IG9mIER5bmFtaWNHbG9iYWxPYmplY3RTY29wZS4KKyAgICAgICAgVXBkYXRlZCBmb3IgQ2FsbEZy
YW1lOjppbml0IEFQSSBjaGFuZ2UuCisKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1
dGVDYWxsKTogQ2xhcmlmaWVkIHNjb3BlIG9mIER5bmFtaWNHbG9iYWxPYmplY3RTY29wZS4KKyAg
ICAgICAgVXBkYXRlZCBmb3IgQ2FsbEZyYW1lOjppbml0IEFQSSBjaGFuZ2UuIEFkZGVkIHN1cHBv
cnQgZm9yIGNhbGxpbmcgYSBob3N0CisgICAgICAgIGZ1bmN0aW9uLgorCisgICAgICAgIChKU0M6
OkludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KTogQ2xhcmlmaWVkIHNjb3BlIG9mIER5bmFt
aWNHbG9iYWxPYmplY3RTY29wZS4KKyAgICAgICAgVXBkYXRlZCBmb3IgQ2FsbEZyYW1lOjppbml0
IEFQSSBjaGFuZ2UuIAorCisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpwcmVwYXJlRm9yUmVw
ZWF0Q2FsbCk6IFVwZGF0ZWQgZm9yIENhbGxGcmFtZTo6aW5pdCBBUEkgY2hhbmdlLiAKKworICAg
ICAgICAoSlNDOjpJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUpOiBVcGRhdGVkIGZvciBDYWxs
RnJhbWU6OmluaXQgQVBJIGNoYW5nZS4KKyAgICAgICAgQWRkZWQgc29tZSBleHBsaWNpdCBKU1Zh
bHVlKEpTT2JqZWN0KikgaW5pdGlhbGl6YXRpb24sIHNpbmNlIHJlbGF4aW5nCisgICAgICAgIHRo
ZSBKU0Z1bmN0aW9uKiByZXN0cmljdGlvbiBvbiBjYWxsZWUgaGFzIG1hZGUgcmVnaXN0ZXIgdHlw
ZXMgbW9yZSBhbWJpZ3VvdXMuCisgICAgICAgIFJlbW92ZWQgdG9UaGlzT2JqZWN0KCkgY29udmVy
c2lvbiwgc2luY2UgYWxsIGNhbGxlZXMgZG8gaXQgdGhlbXNlbHZlcyBub3cuCisgICAgICAgIFVw
ZGF0ZWQgaG9zdCBmdW5jdGlvbiBjYWxsIGZvciBuZXcgaG9zdCBmdW5jdGlvbiBzaWduYXR1cmUu
IFVwZGF0ZWQgZm9yCisgICAgICAgIGNoYW5nZSB0byBFeGVjU3RhdGU6OmFyZ3VtZW50Q291bnQo
KSBBUEkuCisKKyAgICAgICAgKiBpbnRlcnByZXRlci9SZWdpc3Rlci5oOgorICAgICAgICAoSlND
OjpSZWdpc3Rlcjo6KToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXI6Om9wZXJhdG9yPSk6CisgICAg
ICAgIChKU0M6OlJlZ2lzdGVyOjpmdW5jdGlvbik6IENoYW5nZWQgY2FsbGVlKCkgdG8gYmUgSlNP
YmplY3QqIGluc3RlYWQgb2YKKyAgICAgICAgSlNGdW5jdGlvbiogLS0gbm93LCBpdCBtaWdodCBi
ZSBzb21lIG90aGVyIGNhbGxhYmxlIGhvc3Qgb2JqZWN0LgorCisgICAgICAgICogaml0L0pJVE9w
Y29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2Fs
bCk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKTogRGVsZXRlZCBhIGJ1bmNoIG9mIGNvZGUg
dGhhdAorICAgICAgICBzZXQgdXAgdGhlIGFyZ3VtZW50cyB0byBob3N0IGZ1bmN0aW9ucyAtLSBh
bGwgYnV0IG9uZSBvZiB0aGUgYXJndW1lbnRzCisgICAgICAgIGFyZSBnb25lIG5vdy4gVGhpcyBp
cyB0aGUgYWN0dWFsIG9wdGltaXphdGlvbi4KKworICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6
CisgICAgICAgIChKU0M6OkRFRklORV9TVFVCX0ZVTkNUSU9OKTogVXBkYXRlZCBmb3IgRXhlY1N0
YXRlIGFuZCBSZWdpc3RlciBBUEkKKyAgICAgICAgY2hhbmdlcyBub3RlZCBhYm92ZS4gUmVtb3Zl
ZCB0b1RoaXNPYmplY3QoKSBjb252ZXJzaW9uLCBzaW5jZSBhbGwgY2FsbGVlcworICAgICAgICBk
byBpdCB0aGVtc2VsdmVzIG5vdy4KKyAgICAgICAgCisgICAgICAgICogcnVudGltZS9BcmdMaXN0
Lmg6CisgICAgICAgIChKU0M6OkFyZ0xpc3Q6OkFyZ0xpc3QpOiBBcmdMaXN0IGlzIGdldHRpbmcg
Y2xvc2UgdG8gdW51c2VkLiBBZGRlZCBhCisgICAgICAgIHRlbXBvcmFyeSBzaGltIGZvciBjb252
ZXJ0aW5nIGZyb20gRXhlY1N0YXRlKiB0byBBcmdMaXN0IHdoZXJlIGl0J3Mgc3RpbGwKKyAgICAg
ICAgbmVjZXNzYXJ5LgorCisgICAgICAgICogcnVudGltZS9Bcmd1bWVudHMuaDoKKyAgICAgICAg
KEpTQzo6QXJndW1lbnRzOjpnZXRBcmd1bWVudHNEYXRhKToKKyAgICAgICAgKEpTQzo6QXJndW1l
bnRzOjpBcmd1bWVudHMpOiBVcGRhdGVkIGZvciBFeGVjU3RhdGUgYW5kIFJlZ2lzdGVyIEFQSQor
ICAgICAgICBjaGFuZ2VzIG5vdGVkIGFib3ZlLiAKKworICAgICAgICAqIHJ1bnRpbWUvQ2FsbERh
dGEuY3BwOgorICAgICAgICAoSlNDOjpjYWxsKTogQ2hhbmdlZCBjYWxsIGFsd2F5cyB0byBjYWxs
IEludGVycHJldGVyOjpleGVjdXRlQ2FsbCwgZXZlbgorICAgICAgICBmb3IgaG9zdCBmdW5jdGlv
bnMuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBub3JtYWwgY2FsbGluZyBjb252ZW50aW9uIGlzCisg
ICAgICAgIHNldCB1cCBpbiB0aGUgUmVnc2l0ZXJGaWxlIHdoZW4gY2FsbGluZyBmcm9tIEMrKyB0
byBob3N0IGZ1bmN0aW9uLgorCisgICAgICAgICogcnVudGltZS9DYWxsRGF0YS5oOiBDaGFuZ2Vk
IGhvc3QgZnVuY3Rpb24gc2lnbmF0dXJlIGFzIGRlc2NyaWJlZCBhYm92ZS4KKworICAgICAgICAq
IHJ1bnRpbWUvQ29uc3RydWN0RGF0YS5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdCk6IE1v
dmVkIEpTRnVuY3Rpb246OmNvbnN0cnVjdCBjb2RlIGhlcmUgc28gSSBjb3VsZCBuaXgKKyAgICAg
ICAgSlNGdW5jdGlvbjo6Y2FsbCBhbmQgSlNGdW5jdGlvbjo6Y2FsbC4gV2Ugd2FudCBhIEpTRnVu
Y3Rpb24tYWdub3N0aWMKKyAgICAgICAgd2F5IHRvIGNhbGwgYW5kIGNvbnN0cnVjdCwgc28gdGhh
dCBldmVyeXRoaW5nIHdvcmtzIG5hdHVyYWxseSBmb3Igbm9uLQorICAgICAgICBKU0Z1bmN0aW9u
IG9iamVjdHMuIAorCisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmNwcDoKKyAgICAgICAg
KEpTQzo6Y2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNGdW5jdGlvbi5oOiBVcGRhdGVkIGZvciBFeGVjU3RhdGUgYW5kIFJlZ2lzdGVyIEFQSSBjaGFu
Z2VzCisgICAgICAgIG5vdGVkIGFib3ZlLiBOaXhlZCBKU0Z1bmN0aW9uOjpjYWxsIGFuZCBKU0Z1
bmN0aW9uOjpjb25zdHJ1Y3QsIG5vdGVkIGFib3ZlLgorIAorICAgICAgICAqIHJ1bnRpbWUvSlNH
bG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6aW5pdCk6IERp
dHRvLgorCisgICAgICAgIFBBUlQgVFdPOiBHbG9iYWwgc2VhcmNoIGFuZCByZXBsYWNlLgorICAg
ICAgICAKKyAgICAgICAgSW4gdGhlIGFyZWFzIGJlbG93LCBJIHVzZWQgZ2xvYmFsIHNlYXJjaC1h
bmQtcmVwbGFjZSB0byBjaGFuZ2UKKyAgICAgICAgICAgIChFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKSA9PiAoRXhlY1N0YXRlKikKKyAgICAgICAgICAgIGFy
Z3Muc2l6ZSgpID0+IGV4ZWMtPmFyZ3VtZW50Q291bnQoKQorICAgICAgICAgICAgYXJncy5hdChp
KSA9PiBleGVjLT5hcmd1bWVudChpKQorCisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tGdW5jdGlv
bi5jcHA6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tGdW5jdGlvbjo6Y2FsbCk6CisgICAgICAg
ICogQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5oOgorICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2Jq
ZWN0Lmg6CisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaDoKKyAgICAg
ICAgKEpTQzo6OjpjYWxsKToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5leHA6CisgICAgICAg
ICoganNjLmNwcDoKKyAgICAgICAgKGZ1bmN0aW9uUHJpbnQpOgorICAgICAgICAoZnVuY3Rpb25E
ZWJ1Zyk6CisgICAgICAgIChmdW5jdGlvbkdDKToKKyAgICAgICAgKGZ1bmN0aW9uVmVyc2lvbik6
CisgICAgICAgIChmdW5jdGlvblJ1bik6CisgICAgICAgIChmdW5jdGlvbkxvYWQpOgorICAgICAg
ICAoZnVuY3Rpb25DaGVja1N5bnRheCk6CisgICAgICAgIChmdW5jdGlvblNldFNhbXBsaW5nRmxh
Z3MpOgorICAgICAgICAoZnVuY3Rpb25DbGVhclNhbXBsaW5nRmxhZ3MpOgorICAgICAgICAoZnVu
Y3Rpb25SZWFkbGluZSk6CisgICAgICAgIChmdW5jdGlvblF1aXQpOgorICAgICAgICAqIHJ1bnRp
bWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNhbGxBcnJheUNvbnN0cnVj
dG9yKToKKyAgICAgICAgKEpTQzo6YXJyYXlDb25zdHJ1Y3RvcklzQXJyYXkpOgorICAgICAgICAq
IHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVu
Y1RvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyk6
CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jSm9pbik6CisgICAgICAgIChKU0M6OmFycmF5
UHJvdG9GdW5jQ29uY2F0KToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNQb3ApOgorICAg
ICAgICAoSlNDOjphcnJheVByb3RvRnVuY1B1c2gpOgorICAgICAgICAoSlNDOjphcnJheVByb3Rv
RnVuY1JldmVyc2UpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NoaWZ0KToKKyAgICAg
ICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNTbGljZSk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9G
dW5jU29ydCk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jU3BsaWNlKToKKyAgICAgICAg
KEpTQzo6YXJyYXlQcm90b0Z1bmNVblNoaWZ0KToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1
bmNGaWx0ZXIpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY01hcCk6CisgICAgICAgIChK
U0M6OmFycmF5UHJvdG9GdW5jRXZlcnkpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY0Zv
ckVhY2gpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NvbWUpOgorICAgICAgICAoSlND
OjphcnJheVByb3RvRnVuY1JlZHVjZSk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jUmVk
dWNlUmlnaHQpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY0luZGV4T2YpOgorICAgICAg
ICAoSlNDOjphcnJheVByb3RvRnVuY0xhc3RJbmRleE9mKToKKyAgICAgICAgKiBydW50aW1lL0Jv
b2xlYW5Db25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNhbGxCb29sZWFuQ29uc3RydWN0
b3IpOgorICAgICAgICAqIHJ1bnRpbWUvQm9vbGVhblByb3RvdHlwZS5jcHA6CisgICAgICAgIChK
U0M6OmJvb2xlYW5Qcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAgIChKU0M6OmJvb2xlYW5Qcm90
b0Z1bmNWYWx1ZU9mKToKKyAgICAgICAgKiBydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHA6Cisg
ICAgICAgIChKU0M6OmNhbGxEYXRlKToKKyAgICAgICAgKEpTQzo6ZGF0ZVBhcnNlKToKKyAgICAg
ICAgKEpTQzo6ZGF0ZU5vdyk6CisgICAgICAgIChKU0M6OmRhdGVVVEMpOgorICAgICAgICAqIHJ1
bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OmZvcm1hdExvY2FsZURhdGUp
OgorICAgICAgICAoSlNDOjpmaWxsU3RydWN0dXJlc1VzaW5nVGltZUFyZ3MpOgorICAgICAgICAo
SlNDOjpmaWxsU3RydWN0dXJlc1VzaW5nRGF0ZUFyZ3MpOgorICAgICAgICAoSlNDOjpkYXRlUHJv
dG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9VVENTdHJpbmcp
OgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9JU09TdHJpbmcpOgorICAgICAgICAoSlND
OjpkYXRlUHJvdG9GdW5jVG9EYXRlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVu
Y1RvVGltZVN0cmluZyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNUb0xvY2FsZVN0cmlu
Zyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNUb0xvY2FsZURhdGVTdHJpbmcpOgorICAg
ICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9Mb2NhbGVUaW1lU3RyaW5nKToKKyAgICAgICAgKEpT
Qzo6ZGF0ZVByb3RvRnVuY0dldFRpbWUpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0
RnVsbFllYXIpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0VVRDRnVsbFllYXIpOgor
ICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9HTVRTdHJpbmcpOgorICAgICAgICAoSlNDOjpk
YXRlUHJvdG9GdW5jR2V0TW9udGgpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0VVRD
TW9udGgpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0RGF0ZSk6CisgICAgICAgIChK
U0M6OmRhdGVQcm90b0Z1bmNHZXRVVENEYXRlKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVu
Y0dldERheSk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRVVENEYXkpOgorICAgICAg
ICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0SG91cnMpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9G
dW5jR2V0VVRDSG91cnMpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0TWludXRlcyk6
CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRVVENNaW51dGVzKToKKyAgICAgICAgKEpT
Qzo6ZGF0ZVByb3RvRnVuY0dldFNlY29uZHMpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5j
R2V0VVRDU2Vjb25kcyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRNaWxsaVNlY29u
ZHMpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0VVRDTWlsbGlzZWNvbmRzKToKKyAg
ICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY0dldFRpbWV6b25lT2Zmc2V0KToKKyAgICAgICAgKEpT
Qzo6ZGF0ZVByb3RvRnVuY1NldFRpbWUpOgorICAgICAgICAoSlNDOjpzZXROZXdWYWx1ZUZyb21U
aW1lQXJncyk6CisgICAgICAgIChKU0M6OnNldE5ld1ZhbHVlRnJvbURhdGVBcmdzKToKKyAgICAg
ICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1NldE1pbGxpU2Vjb25kcyk6CisgICAgICAgIChKU0M6OmRh
dGVQcm90b0Z1bmNTZXRVVENNaWxsaXNlY29uZHMpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9G
dW5jU2V0U2Vjb25kcyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNTZXRVVENTZWNvbmRz
KToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1NldE1pbnV0ZXMpOgorICAgICAgICAoSlND
OjpkYXRlUHJvdG9GdW5jU2V0VVRDTWludXRlcyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1
bmNTZXRIb3Vycyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNTZXRVVENIb3Vycyk6Cisg
ICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNTZXREYXRlKToKKyAgICAgICAgKEpTQzo6ZGF0ZVBy
b3RvRnVuY1NldFVUQ0RhdGUpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jU2V0TW9udGgp
OgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jU2V0VVRDTW9udGgpOgorICAgICAgICAoSlND
OjpkYXRlUHJvdG9GdW5jU2V0RnVsbFllYXIpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5j
U2V0VVRDRnVsbFllYXIpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jU2V0WWVhcik6Cisg
ICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRZZWFyKToKKyAgICAgICAgKEpTQzo6ZGF0ZVBy
b3RvRnVuY1RvSlNPTik6CisgICAgICAgICogcnVudGltZS9FcnJvckNvbnN0cnVjdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6Y2FsbEVycm9yQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUv
RXJyb3JQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjplcnJvclByb3RvRnVuY1RvU3RyaW5n
KToKKyAgICAgICAgKiBydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAo
SlNDOjpjYWxsRnVuY3Rpb25Db25zdHJ1Y3Rvcik6CisgICAgICAgICogcnVudGltZS9GdW5jdGlv
blByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OmNhbGxGdW5jdGlvblByb3RvdHlwZSk6Cisg
ICAgICAgIChKU0M6OmZ1bmN0aW9uUHJvdG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpm
dW5jdGlvblByb3RvRnVuY0FwcGx5KToKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25Qcm90b0Z1bmND
YWxsKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcDoKKyAg
ICAgICAgKEpTQzo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6ZGVjb2RlKToKKyAgICAgICAgKEpT
Qzo6Z2xvYmFsRnVuY0V2YWwpOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jUGFyc2VJbnQpOgor
ICAgICAgICAoSlNDOjpnbG9iYWxGdW5jUGFyc2VGbG9hdCk6CisgICAgICAgIChKU0M6Omdsb2Jh
bEZ1bmNJc05hTik6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNJc0Zpbml0ZSk6CisgICAgICAg
IChKU0M6Omdsb2JhbEZ1bmNEZWNvZGVVUkkpOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jRGVj
b2RlVVJJQ29tcG9uZW50KToKKyAgICAgICAgKEpTQzo6Z2xvYmFsRnVuY0VuY29kZVVSSSk6Cisg
ICAgICAgIChKU0M6Omdsb2JhbEZ1bmNFbmNvZGVVUklDb21wb25lbnQpOgorICAgICAgICAoSlND
OjpnbG9iYWxGdW5jRXNjYXBlKToKKyAgICAgICAgKEpTQzo6Z2xvYmFsRnVuY1VuZXNjYXBlKToK
KyAgICAgICAgKEpTQzo6Z2xvYmFsRnVuY0pTQ1ByaW50KToKKyAgICAgICAgKiBydW50aW1lL0pT
R2xvYmFsT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgICogcnVudGltZS9KU09OT2JqZWN0LmNw
cDoKKyAgICAgICAgKEpTQzo6SlNPTlByb3RvRnVuY1BhcnNlKToKKyAgICAgICAgKEpTQzo6SlNP
TlByb3RvRnVuY1N0cmluZ2lmeSk6CisgICAgICAgICogcnVudGltZS9KU1N0cmluZy5oOgorICAg
ICAgICAqIHJ1bnRpbWUvTWF0aE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1
bmNBYnMpOgorICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5jQUNvcyk6CisgICAgICAgIChKU0M6
Om1hdGhQcm90b0Z1bmNBU2luKToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY0FUYW4pOgor
ICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5jQVRhbjIpOgorICAgICAgICAoSlNDOjptYXRoUHJv
dG9GdW5jQ2VpbCk6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNDb3MpOgorICAgICAgICAo
SlNDOjptYXRoUHJvdG9GdW5jRXhwKToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY0Zsb29y
KToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY0xvZyk6CisgICAgICAgIChKU0M6Om1hdGhQ
cm90b0Z1bmNNYXgpOgorICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5jTWluKToKKyAgICAgICAg
KEpTQzo6bWF0aFByb3RvRnVuY1Bvdyk6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNSYW5k
b20pOgorICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5jUm91bmQpOgorICAgICAgICAoSlNDOjpt
YXRoUHJvdG9GdW5jU2luKToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY1NxcnQpOgorICAg
ICAgICAoSlNDOjptYXRoUHJvdG9GdW5jVGFuKToKKyAgICAgICAgKiBydW50aW1lL05hdGl2ZUVy
cm9yQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjYWxsTmF0aXZlRXJyb3JDb25zdHJ1
Y3Rvcik6CisgICAgICAgICogcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAg
IChKU0M6OmNhbGxOdW1iZXJDb25zdHJ1Y3Rvcik6CisgICAgICAgICogcnVudGltZS9OdW1iZXJQ
cm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpudW1iZXJQcm90b0Z1bmNUb1N0cmluZyk6Cisg
ICAgICAgIChKU0M6Om51bWJlclByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKToKKyAgICAgICAgKEpT
Qzo6bnVtYmVyUHJvdG9GdW5jVmFsdWVPZik6CisgICAgICAgIChKU0M6Om51bWJlclByb3RvRnVu
Y1RvRml4ZWQpOgorICAgICAgICAoSlNDOjpudW1iZXJQcm90b0Z1bmNUb0V4cG9uZW50aWFsKToK
KyAgICAgICAgKEpTQzo6bnVtYmVyUHJvdG9GdW5jVG9QcmVjaXNpb24pOgorICAgICAgICAqIHJ1
bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjYWxsT2JqZWN0Q29u
c3RydWN0b3IpOgorICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3RvckdldFByb3RvdHlwZU9m
KToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IpOgorICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3RvckdldE93blByb3BlcnR5TmFtZXMp
OgorICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3RvcktleXMpOgorICAgICAgICAoSlNDOjpv
YmplY3RDb25zdHJ1Y3RvckRlZmluZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29u
c3RydWN0b3JEZWZpbmVQcm9wZXJ0aWVzKToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0
b3JDcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcDoKKyAgICAg
ICAgKEpTQzo6b2JqZWN0UHJvdG9GdW5jVmFsdWVPZik6CisgICAgICAgIChKU0M6Om9iamVjdFBy
b3RvRnVuY0hhc093blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG9GdW5jSXNQ
cm90b3R5cGVPZik6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY0RlZmluZUdldHRlcik6
CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY0RlZmluZVNldHRlcik6CisgICAgICAgIChK
U0M6Om9iamVjdFByb3RvRnVuY0xvb2t1cEdldHRlcik6CisgICAgICAgIChKU0M6Om9iamVjdFBy
b3RvRnVuY0xvb2t1cFNldHRlcik6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY1Byb3Bl
cnR5SXNFbnVtZXJhYmxlKToKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG9GdW5jVG9Mb2NhbGVT
dHJpbmcpOgorICAgICAgICAoSlNDOjpvYmplY3RQcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAg
ICogcnVudGltZS9PYmplY3RQcm90b3R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL09wZXJhdGlv
bnMuaDoKKyAgICAgICAgKEpTQzo6anNTdHJpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhw
Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjYWxsUmVnRXhwQ29uc3RydWN0b3IpOgor
ICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhw
T2JqZWN0Ojp0ZXN0KToKKyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0OjpleGVjKToKKyAgICAg
ICAgKEpTQzo6Y2FsbFJlZ0V4cE9iamVjdCk6CisgICAgICAgIChKU0M6OlJlZ0V4cE9iamVjdDo6
bWF0Y2gpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0Lmg6CisgICAgICAgICogcnVu
dGltZS9SZWdFeHBQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpyZWdFeHBQcm90b0Z1bmNU
ZXN0KToKKyAgICAgICAgKEpTQzo6cmVnRXhwUHJvdG9GdW5jRXhlYyk6CisgICAgICAgIChKU0M6
OnJlZ0V4cFByb3RvRnVuY0NvbXBpbGUpOgorICAgICAgICAoSlNDOjpyZWdFeHBQcm90b0Z1bmNU
b1N0cmluZyk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChKU0M6OnN0cmluZ0Zyb21DaGFyQ29kZVNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6c3Ry
aW5nRnJvbUNoYXJDb2RlKToKKyAgICAgICAgKEpTQzo6Y2FsbFN0cmluZ0NvbnN0cnVjdG9yKToK
KyAgICAgICAgKiBydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OnN0
cmluZ1Byb3RvRnVuY1JlcGxhY2UpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNUb1N0
cmluZyk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0NoYXJBdCk6CisgICAgICAgIChK
U0M6OnN0cmluZ1Byb3RvRnVuY0NoYXJDb2RlQXQpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90
b0Z1bmNDb25jYXQpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNJbmRleE9mKToKKyAg
ICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jTGFzdEluZGV4T2YpOgorICAgICAgICAoSlNDOjpz
dHJpbmdQcm90b0Z1bmNNYXRjaCk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1NlYXJj
aCk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1NsaWNlKToKKyAgICAgICAgKEpTQzo6
c3RyaW5nUHJvdG9GdW5jU3BsaXQpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTdWJz
dHIpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTdWJzdHJpbmcpOgorICAgICAgICAo
SlNDOjpzdHJpbmdQcm90b0Z1bmNUb0xvd2VyQ2FzZSk6CisgICAgICAgIChKU0M6OnN0cmluZ1By
b3RvRnVuY1RvVXBwZXJDYXNlKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jTG9jYWxl
Q29tcGFyZSk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0JpZyk6CisgICAgICAgIChK
U0M6OnN0cmluZ1Byb3RvRnVuY1NtYWxsKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5j
QmxpbmspOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNCb2xkKToKKyAgICAgICAgKEpT
Qzo6c3RyaW5nUHJvdG9GdW5jRml4ZWQpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNJ
dGFsaWNzKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jU3RyaWtlKToKKyAgICAgICAg
KEpTQzo6c3RyaW5nUHJvdG9GdW5jU3ViKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5j
U3VwKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jRm9udGNvbG9yKToKKyAgICAgICAg
KEpTQzo6c3RyaW5nUHJvdG9GdW5jRm9udHNpemUpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90
b0Z1bmNBbmNob3IpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNMaW5rKToKKyAgICAg
ICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jVHJpbSk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3Rv
RnVuY1RyaW1MZWZ0KToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jVHJpbVJpZ2h0KToK
KwogMjAxMC0wNS0yNyAgTHVpeiBBZ29zdGluaSAgPGx1aXouYWdvc3RpbmlAb3BlbmJvc3NhLm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IEphdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS5leHAJKHJldmlzaW9uIDYwMzQxKQorKysgSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNyArMTA5LDcgQEAgX19aTjNKU0Mx
MElkZW50aWZpZXI0ZnJvbUVQTlNfOUV4ZWNTdGF0ZQogX19aTjNKU0MxMElkZW50aWZpZXI1ZXF1
YWxFUEtON1dlYkNvcmUxMFN0cmluZ0ltcGxFUEtjCiBfX1pOM0pTQzEwSlNGdW5jdGlvbjRpbmZv
RQogX19aTjNKU0MxMEpTRnVuY3Rpb240bmFtZUVQTlNfOUV4ZWNTdGF0ZUUKLV9fWk4zSlNDMTBK
U0Z1bmN0aW9uQzFFUE5TXzlFeGVjU3RhdGVFUE5TXzE0SlNHbG9iYWxPYmplY3RFTjNXVEYxN05v
bk51bGxQYXNzUmVmUHRySU5TXzlTdHJ1Y3R1cmVFRUVpUktOU18xMElkZW50aWZpZXJFUEZOU183
SlNWYWx1ZUVTMl9QTlNfOEpTT2JqZWN0RVNDX1JLTlNfN0FyZ0xpc3RFRQorX19aTjNKU0MxMEpT
RnVuY3Rpb25DMUVQTlNfOUV4ZWNTdGF0ZUVQTlNfMTRKU0dsb2JhbE9iamVjdEVOM1dURjE3Tm9u
TnVsbFBhc3NSZWZQdHJJTlNfOVN0cnVjdHVyZUVFRWlSS05TXzEwSWRlbnRpZmllckVQRk5TXzdK
U1ZhbHVlRVMyX0UKIF9fWk4zSlNDMTB0aHJvd0Vycm9yRVBOU185RXhlY1N0YXRlRU5TXzlFcnJv
clR5cGVFCiBfX1pOM0pTQzEwdGhyb3dFcnJvckVQTlNfOUV4ZWNTdGF0ZUVOU185RXJyb3JUeXBl
RVBLYwogX19aTjNKU0MxMHRocm93RXJyb3JFUE5TXzlFeGVjU3RhdGVFTlNfOUVycm9yVHlwZUVS
S05TXzdVU3RyaW5nRQpAQCAtMTc0LDcgKzE3NCw3IEBAIF9fWk4zSlNDMTZKU1ZhcmlhYmxlT2Jq
ZWN0MTlnZXRPd25Qcm9wZXIKIF9fWk4zSlNDMTZ0b1VJbnQzMlNsb3dDYXNlRWRSYgogX19aTjNK
U0MxN0J5dGVjb2RlR2VuZXJhdG9yMjFzZXREdW1wc0dlbmVyYXRlZENvZGVFYgogX19aTjNKU0Mx
N1Byb3BlcnR5TmFtZUFycmF5M2FkZEVQTjdXZWJDb3JlMTBTdHJpbmdJbXBsRQotX19aTjNKU0Mx
N1Byb3RvdHlwZUZ1bmN0aW9uQzFFUE5TXzlFeGVjU3RhdGVFUE5TXzE0SlNHbG9iYWxPYmplY3RF
TjNXVEYxN05vbk51bGxQYXNzUmVmUHRySU5TXzlTdHJ1Y3R1cmVFRUVpUktOU18xMElkZW50aWZp
ZXJFUEZOU183SlNWYWx1ZUVTMl9QTlNfOEpTT2JqZWN0RVNDX1JLTlNfN0FyZ0xpc3RFRQorX19a
TjNKU0MxN1Byb3RvdHlwZUZ1bmN0aW9uQzFFUE5TXzlFeGVjU3RhdGVFUE5TXzE0SlNHbG9iYWxP
YmplY3RFTjNXVEYxN05vbk51bGxQYXNzUmVmUHRySU5TXzlTdHJ1Y3R1cmVFRUVpUktOU18xMElk
ZW50aWZpZXJFUEZOU183SlNWYWx1ZUVTMl9FCiBfX1pOM0pTQzE3Y29uc3RydWN0RnVuY3Rpb25F
UE5TXzlFeGVjU3RhdGVFUktOU183QXJnTGlzdEVSS05TXzEwSWRlbnRpZmllckVSS05TXzdVU3Ry
aW5nRWkKIF9fWk4zSlNDMThEZWJ1Z2dlckFjdGl2YXRpb25DMUVQTlNfOEpTT2JqZWN0RQogX19a
TjNKU0MxOFByb3BlcnR5RGVzY3JpcHRvcjExc2V0V3JpdGFibGVFYgpAQCAtMTg5LDEwICsxODks
MTEgQEAgX19aTjNKU0MxOFByb3BlcnR5RGVzY3JpcHRvcjlzZXRTZXR0ZXJFTgogX19aTjNKU0Mx
OWluaXRpYWxpemVUaHJlYWRpbmdFdgogX19aTjNKU0MyME1hcmtlZEFyZ3VtZW50QnVmZmVyMTBz
bG93QXBwZW5kRU5TXzdKU1ZhbHVlRQogX19aTjNKU0MyM0Fic3RyYWN0U2FtcGxpbmdDb3VudGVy
NGR1bXBFdgotX19aTjNKU0MyM29iamVjdFByb3RvRnVuY1RvU3RyaW5nRVBOU185RXhlY1N0YXRl
RVBOU184SlNPYmplY3RFTlNfN0pTVmFsdWVFUktOU183QXJnTGlzdEUKK19fWk4zSlNDMjNvYmpl
Y3RQcm90b0Z1bmNUb1N0cmluZ0VQTlNfOUV4ZWNTdGF0ZUUKIF9fWk4zSlNDMjNzZXRVcFN0YXRp
Y0Z1bmN0aW9uU2xvdEVQTlNfOUV4ZWNTdGF0ZUVQS05TXzlIYXNoRW50cnlFUE5TXzhKU09iamVj
dEVSS05TXzEwSWRlbnRpZmllckVSTlNfMTJQcm9wZXJ0eVNsb3RFCiBfX1pOM0pTQzI0SlNPYmpl
Y3RXaXRoR2xvYmFsT2JqZWN0QzJFUE5TXzE0SlNHbG9iYWxPYmplY3RFTjNXVEYxN05vbk51bGxQ
YXNzUmVmUHRySU5TXzlTdHJ1Y3R1cmVFRUUKIF9fWk4zSlNDMjRjcmVhdGVTdGFja092ZXJmbG93
RXJyb3JFUE5TXzlFeGVjU3RhdGVFCitfX1pOM0pTQzI0Y3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9y
RVBOU185RXhlY1N0YXRlRQogX19aTjNKU0MyNWV2YWx1YXRlSW5HbG9iYWxDYWxsRnJhbWVFUktO
U183VVN0cmluZ0VSTlNfN0pTVmFsdWVFUE5TXzE0SlNHbG9iYWxPYmplY3RFCiBfX1pOM0pTQzM1
Y3JlYXRlSW50ZXJydXB0ZWRFeGVjdXRpb25FeGNlcHRpb25FUE5TXzEySlNHbG9iYWxEYXRhRQog
X19aTjNKU0MzTmFORQpJbmRleDogSmF2YVNjcmlwdENvcmUvanNjLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIEphdmFTY3JpcHRD
b3JlL2pzYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDE5ICs3MSwxOSBAQCB1c2luZyBuYW1l
c3BhY2UgV1RGOwogc3RhdGljIHZvaWQgY2xlYW51cEdsb2JhbERhdGEoSlNHbG9iYWxEYXRhKik7
CiBzdGF0aWMgYm9vbCBmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGNvbnN0IFVTdHJpbmcm
IGZpbGVOYW1lLCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcik7CiAKLXN0YXRpYyBKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25QcmludChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25EZWJ1
ZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRp
YyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25HQyhFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25WZXJzaW9uKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJ1bihFeGVjU3Rh
dGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Mb2FkKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bkNoZWNrU3ludGF4KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlz
dCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJlYWRsaW5lKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIE5PX1JF
VFVSTl9XSVRIX1ZBTFVFIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblF1aXQoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJpbnQoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRGVidWcoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR0MoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uVmVyc2lvbihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SdW4oRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uTG9hZChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25DaGVja1N5bnRheChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SZWFkbGluZShFeGVjU3RhdGUqKTsKK3N0YXRpYyBO
T19SRVRVUk5fV0lUSF9WQUxVRSBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25RdWl0KEV4
ZWNTdGF0ZSopOwogCiAjaWYgRU5BQkxFKFNBTVBMSU5HX0ZMQUdTKQotc3RhdGljIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNldFNhbXBsaW5nRmxhZ3MoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uQ2xlYXJTYW1wbGluZ0ZsYWdzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvblNldFNhbXBsaW5nRmxhZ3MoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uQ2xlYXJTYW1wbGluZ0ZsYWdzKEV4ZWNTdGF0ZSopOwogI2VuZGlmCiAK
IHN0cnVjdCBTY3JpcHQgewpAQCAtMTcxLDEzICsxNzEsMTMgQEAgR2xvYmFsT2JqZWN0OjpHbG9i
YWxPYmplY3QoY29uc3QgVmVjdG9yPAogICAgIHB1dERpcmVjdChJZGVudGlmaWVyKGdsb2JhbEV4
ZWMoKSwgImFyZ3VtZW50cyIpLCBhcnJheSk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvblByaW50KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJpbnQoRXhlY1N0
YXRlKiBleGVjKQogewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmdzLnNpemUoKTsg
KytpKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4ZWMtPmFyZ3VtZW50Q291bnQo
KTsgKytpKSB7CiAgICAgICAgIGlmIChpKQogICAgICAgICAgICAgcHV0Y2hhcignICcpOwogCi0g
ICAgICAgIHByaW50ZigiJXMiLCBhcmdzLmF0KGkpLnRvU3RyaW5nKGV4ZWMpLlVURjhTdHJpbmco
KS5kYXRhKCkpOworICAgICAgICBwcmludGYoIiVzIiwgZXhlYy0+YXJndW1lbnQoaSkudG9TdHJp
bmcoZXhlYykuVVRGOFN0cmluZygpLmRhdGEoKSk7CiAgICAgfQogCiAgICAgcHV0Y2hhcignXG4n
KTsKQEAgLTE4NSwzMCArMTg1LDMwIEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblBy
aW50KEV4ZWMKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uRGVidWcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25EZWJ1
ZyhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgZnByaW50ZihzdGRlcnIsICItLT4gJXNcbiIsIGFy
Z3MuYXQoMCkudG9TdHJpbmcoZXhlYykuVVRGOFN0cmluZygpLmRhdGEoKSk7CisgICAgZnByaW50
ZihzdGRlcnIsICItLT4gJXNcbiIsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLlVU
RjhTdHJpbmcoKS5kYXRhKCkpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25HQyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
SlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25H
QyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKICAgICBleGVjLT5oZWFwKCktPmNvbGxlY3RBbGxHYXJiYWdlKCk7CiAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblZlcnNp
b24oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblZlcnNpb24oRXhlY1N0YXRlKikKIHsKICAgICAvLyBX
ZSBuZWVkIHRoaXMgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgTW96aWxsYSBK
UyB0ZXN0cyBidXQgZm9yIG5vdwogICAgIC8vIHdlIGRvbid0IGFjdHVhbGx5IGRvIGFueSB2ZXJz
aW9uLXNwZWNpZmljIGhhbmRsaW5nCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJ1bihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvblJ1bihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgU3RvcFdhdGNoIHN0b3BXYXRjaDsK
LSAgICBVU3RyaW5nIGZpbGVOYW1lID0gYXJncy5hdCgwKS50b1N0cmluZyhleGVjKTsKKyAgICBV
U3RyaW5nIGZpbGVOYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CiAgICAg
VmVjdG9yPGNoYXI+IHNjcmlwdDsKICAgICBpZiAoIWZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZp
bGUoZmlsZU5hbWUsIHNjcmlwdCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIEdl
bmVyYWxFcnJvciwgIkNvdWxkIG5vdCBvcGVuIGZpbGUuIik7CkBAIC0yMjIsMTEgKzIyMiw5IEBA
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJ1bihFeGVjU3QKICAgICByZXR1cm4ganNO
dW1iZXIoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIHN0b3BXYXRjaC5nZXRFbGFwc2VkTVMo
KSk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkxvYWQoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogbywgSlNWYWx1ZSB2LCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTG9hZChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgVU5V
U0VEX1BBUkFNKG8pOwotICAgIFVOVVNFRF9QQVJBTSh2KTsKLSAgICBVU3RyaW5nIGZpbGVOYW1l
ID0gYXJncy5hdCgwKS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIGZpbGVOYW1lID0gZXhl
Yy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CiAgICAgVmVjdG9yPGNoYXI+IHNjcmlwdDsK
ICAgICBpZiAoIWZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoZmlsZU5hbWUsIHNjcmlwdCkp
CiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIEdlbmVyYWxFcnJvciwgIkNvdWxkIG5v
dCBvcGVuIGZpbGUuIik7CkBAIC0yMzgsMTEgKzIzNiw5IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvbkxvYWQoRXhlY1MKICAgICByZXR1cm4gcmVzdWx0LnZhbHVlKCk7CiB9CiAKLUpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNoZWNrU3ludGF4KEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIG8sIEpTVmFsdWUgdiwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvbkNoZWNrU3ludGF4KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBV
TlVTRURfUEFSQU0obyk7Ci0gICAgVU5VU0VEX1BBUkFNKHYpOwotICAgIFVTdHJpbmcgZmlsZU5h
bWUgPSBhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgZmlsZU5hbWUgPSBl
eGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKTsKICAgICBWZWN0b3I8Y2hhcj4gc2NyaXB0
OwogICAgIGlmICghZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZShmaWxlTmFtZSwgc2NyaXB0
KSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgR2VuZXJhbEVycm9yLCAiQ291bGQg
bm90IG9wZW4gZmlsZS4iKTsKQEAgLTI1NSwyMCArMjUxLDIwIEBAIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvbkNoZWNrU3ludGEKIH0KIAogI2lmIEVOQUJMRShTQU1QTElOR19GTEFHUykK
LUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNldFNhbXBsaW5nRmxhZ3MoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TZXRTYW1wbGluZ0ZsYWdzKEV4ZWNTdGF0ZSogZXhlYykK
IHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJncy5zaXplKCk7ICsraSkgewotICAg
ICAgICB1bnNpZ25lZCBmbGFnID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGFyZ3MuYXQoaSkudG9O
dW1iZXIoZXhlYykpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGVjLT5hcmd1bWVu
dENvdW50KCk7ICsraSkgeworICAgICAgICB1bnNpZ25lZCBmbGFnID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGV4ZWMtPmFyZ3VtZW50KGkpLnRvTnVtYmVyKGV4ZWMpKTsKICAgICAgICAgaWYgKChm
bGFnID49IDEpICYmIChmbGFnIDw9IDMyKSkKICAgICAgICAgICAgIFNhbXBsaW5nRmxhZ3M6OnNl
dEZsYWcoZmxhZyk7CiAgICAgfQogICAgIHJldHVybiBqc051bGwoKTsKIH0KIAotSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ2xlYXJTYW1wbGluZ0ZsYWdzKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uQ2xlYXJTYW1wbGluZ0ZsYWdzKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJncy5zaXplKCk7ICsraSkgewotICAgICAgICB1
bnNpZ25lZCBmbGFnID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGFyZ3MuYXQoaSkudG9OdW1iZXIo
ZXhlYykpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGVjLT5hcmd1bWVudENvdW50
KCk7ICsraSkgeworICAgICAgICB1bnNpZ25lZCBmbGFnID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGV4ZWMtPmFyZ3VtZW50KGkpLnRvTnVtYmVyKGV4ZWMpKTsKICAgICAgICAgaWYgKChmbGFnID49
IDEpICYmIChmbGFnIDw9IDMyKSkKICAgICAgICAgICAgIFNhbXBsaW5nRmxhZ3M6OmNsZWFyRmxh
ZyhmbGFnKTsKICAgICB9CkBAIC0yNzYsNyArMjcyLDcgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uQ2xlYXJTYW1wbAogfQogI2VuZGlmCiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvblJlYWRsaW5lKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25z
dCBBcmdMaXN0JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJlYWRsaW5lKEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICBWZWN0b3I8Y2hhciwgMjU2PiBsaW5lOwogICAgIGludCBjOwpA
QCAtMjkwLDcgKzI4Niw3IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJlYWRsaW5l
KEUKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgbGluZS5kYXRhKCkpOwogfQogCi1KU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25RdWl0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBK
U1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblF1
aXQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIC8vIFRlY2huaWNhbGx5LCBkZXN0cm95aW5nIHRo
ZSBoZWFwIGluIHRoZSBtaWRkbGUgb2YgSlMgZXhlY3V0aW9uIGlzIGEgbm8tbm8sCiAgICAgLy8g
YnV0IHdlIHdhbnQgdG8gbWFpbnRhaW4gY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBNb3ppbGxhIHRl
c3Qgc3VpdGUsIHNvCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0Z1bmN0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0Z1bmN0aW9u
LmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0Z1
bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsMjIgKzQ3LDIyIEBAIEpTQ2FsbGJhY2tG
dW5jdGlvbjo6SlNDYWxsYmFja0Z1bmN0aW9uKEUKIHsKIH0KIAotSlNWYWx1ZSBKU0NhbGxiYWNr
RnVuY3Rpb246OmNhbGwoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogZnVuY3Rpb25PYmplY3Qs
IEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NhbGxi
YWNrRnVuY3Rpb246OmNhbGwoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTQ29udGV4dFJlZiBl
eGVjUmVmID0gdG9SZWYoZXhlYyk7Ci0gICAgSlNPYmplY3RSZWYgZnVuY3Rpb25SZWYgPSB0b1Jl
ZihmdW5jdGlvbk9iamVjdCk7Ci0gICAgSlNPYmplY3RSZWYgdGhpc09ialJlZiA9IHRvUmVmKHRo
aXNWYWx1ZS50b1RoaXNPYmplY3QoZXhlYykpOworICAgIEpTT2JqZWN0UmVmIGZ1bmN0aW9uUmVm
ID0gdG9SZWYoZXhlYy0+Y2FsbGVlKCkpOworICAgIEpTT2JqZWN0UmVmIHRoaXNPYmpSZWYgPSB0
b1JlZihleGVjLT5ob3N0VGhpc1ZhbHVlKCkudG9UaGlzT2JqZWN0KGV4ZWMpKTsKIAotICAgIGlu
dCBhcmd1bWVudENvdW50ID0gc3RhdGljX2Nhc3Q8aW50PihhcmdzLnNpemUoKSk7CisgICAgaW50
IGFyZ3VtZW50Q291bnQgPSBzdGF0aWNfY2FzdDxpbnQ+KGV4ZWMtPmFyZ3VtZW50Q291bnQoKSk7
CiAgICAgVmVjdG9yPEpTVmFsdWVSZWYsIDE2PiBhcmd1bWVudHMoYXJndW1lbnRDb3VudCk7CiAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmd1bWVudENvdW50OyBpKyspCi0gICAgICAgIGFyZ3Vt
ZW50c1tpXSA9IHRvUmVmKGV4ZWMsIGFyZ3MuYXQoaSkpOworICAgICAgICBhcmd1bWVudHNbaV0g
PSB0b1JlZihleGVjLCBleGVjLT5hcmd1bWVudChpKSk7CiAKICAgICBKU1ZhbHVlUmVmIGV4Y2Vw
dGlvbiA9IDA7CiAgICAgSlNWYWx1ZVJlZiByZXN1bHQ7CiAgICAgewogICAgICAgICBBUElDYWxs
YmFja1NoaW0gY2FsbGJhY2tTaGltKGV4ZWMpOwotICAgICAgICByZXN1bHQgPSBzdGF0aWNfY2Fz
dDxKU0NhbGxiYWNrRnVuY3Rpb24qPihmdW5jdGlvbk9iamVjdCktPm1fY2FsbGJhY2soZXhlY1Jl
ZiwgZnVuY3Rpb25SZWYsIHRoaXNPYmpSZWYsIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cy5kYXRh
KCksICZleGNlcHRpb24pOworICAgICAgICByZXN1bHQgPSBzdGF0aWNfY2FzdDxKU0NhbGxiYWNr
RnVuY3Rpb24qPih0b0pTKGZ1bmN0aW9uUmVmKSktPm1fY2FsbGJhY2soZXhlY1JlZiwgZnVuY3Rp
b25SZWYsIHRoaXNPYmpSZWYsIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cy5kYXRhKCksICZleGNl
cHRpb24pOwogICAgIH0KICAgICBpZiAoZXhjZXB0aW9uKQogICAgICAgICBleGVjLT5zZXRFeGNl
cHRpb24odG9KUyhleGVjLCBleGNlcHRpb24pKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9K
U0NhbGxiYWNrRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9BUEkvSlND
YWxsYmFja0Z1bmN0aW9uLmgJKHJldmlzaW9uIDYwMzQxKQorKysgSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ2FsbGJhY2tGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHBy
aXZhdGU6CiAgICAgdmlydHVhbCBDYWxsVHlwZSBnZXRDYWxsRGF0YShDYWxsRGF0YSYpOwogICAg
IHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5m
bzsgfQogCi0gICAgc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOworICAgIHN0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY2FsbChFeGVjU3RhdGUqKTsKIAogICAgIEpTT2JqZWN0Q2FsbEFzRnVu
Y3Rpb25DYWxsYmFjayBtX2NhbGxiYWNrOwogfTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9K
U0NhbGxiYWNrT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2Fs
bGJhY2tPYmplY3QuaAkocmV2aXNpb24gNjAzNDEpCisrKyBKYXZhU2NyaXB0Q29yZS9BUEkvSlND
YWxsYmFja09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODIsNyArMTgyLDcgQEAgcHJpdmF0
ZToKICAKICAgICBzdGF0aWMgSlNDYWxsYmFja09iamVjdCogYXNDYWxsYmFja09iamVjdChKU1Zh
bHVlKTsKICAKLSAgICBzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwoRXhlY1N0YXRl
KiwgSlNPYmplY3QqIGZ1bmN0aW9uT2JqZWN0LCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYpOworICAgIHN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbChFeGVjU3RhdGUq
KTsKICAgICBzdGF0aWMgSlNPYmplY3QqIGNvbnN0cnVjdChFeGVjU3RhdGUqLCBKU09iamVjdCog
Y29uc3RydWN0b3IsIGNvbnN0IEFyZ0xpc3QmKTsKICAgIAogICAgIHN0YXRpYyBKU1ZhbHVlIHN0
YXRpY1ZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImKTsK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMu
aAkocmV2aXNpb24gNjAzNDEpCisrKyBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVj
dEZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAi
RXJyb3IuaCIKICNpbmNsdWRlICJKU0NhbGxiYWNrRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0Ns
YXNzUmVmLmgiCisjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2Jq
ZWN0LmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCiAjaW5jbHVkZSAiSlNPYmplY3RSZWYuaCIKQEAg
LTM3MCwxOCArMzcxLDE4IEBAIENhbGxUeXBlIEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT46OmdldENh
bGwKIH0KIAogdGVtcGxhdGUgPGNsYXNzIEJhc2U+Ci1KU1ZhbHVlIEpTQ2FsbGJhY2tPYmplY3Q8
QmFzZT46OmNhbGwoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogZnVuY3Rpb25PYmplY3QsIEpT
VmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NhbGxiYWNr
T2JqZWN0PEJhc2U+OjpjYWxsKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU0NvbnRleHRSZWYg
ZXhlY1JlZiA9IHRvUmVmKGV4ZWMpOwotICAgIEpTT2JqZWN0UmVmIGZ1bmN0aW9uUmVmID0gdG9S
ZWYoZnVuY3Rpb25PYmplY3QpOwotICAgIEpTT2JqZWN0UmVmIHRoaXNPYmpSZWYgPSB0b1JlZih0
aGlzVmFsdWUudG9UaGlzT2JqZWN0KGV4ZWMpKTsKKyAgICBKU09iamVjdFJlZiBmdW5jdGlvblJl
ZiA9IHRvUmVmKGV4ZWMtPmNhbGxlZSgpKTsKKyAgICBKU09iamVjdFJlZiB0aGlzT2JqUmVmID0g
dG9SZWYoZXhlYy0+aG9zdFRoaXNWYWx1ZSgpLnRvVGhpc09iamVjdChleGVjKSk7CiAgICAgCi0g
ICAgZm9yIChKU0NsYXNzUmVmIGpzQ2xhc3MgPSBzdGF0aWNfY2FzdDxKU0NhbGxiYWNrT2JqZWN0
PEJhc2U+Kj4oZnVuY3Rpb25PYmplY3QpLT5jbGFzc1JlZigpOyBqc0NsYXNzOyBqc0NsYXNzID0g
anNDbGFzcy0+cGFyZW50Q2xhc3MpIHsKKyAgICBmb3IgKEpTQ2xhc3NSZWYganNDbGFzcyA9IHN0
YXRpY19jYXN0PEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT4qPih0b0pTKGZ1bmN0aW9uUmVmKSktPmNs
YXNzUmVmKCk7IGpzQ2xhc3M7IGpzQ2xhc3MgPSBqc0NsYXNzLT5wYXJlbnRDbGFzcykgewogICAg
ICAgICBpZiAoSlNPYmplY3RDYWxsQXNGdW5jdGlvbkNhbGxiYWNrIGNhbGxBc0Z1bmN0aW9uID0g
anNDbGFzcy0+Y2FsbEFzRnVuY3Rpb24pIHsKLSAgICAgICAgICAgIGludCBhcmd1bWVudENvdW50
ID0gc3RhdGljX2Nhc3Q8aW50PihhcmdzLnNpemUoKSk7CisgICAgICAgICAgICBpbnQgYXJndW1l
bnRDb3VudCA9IHN0YXRpY19jYXN0PGludD4oZXhlYy0+YXJndW1lbnRDb3VudCgpKTsKICAgICAg
ICAgICAgIFZlY3RvcjxKU1ZhbHVlUmVmLCAxNj4gYXJndW1lbnRzKGFyZ3VtZW50Q291bnQpOwog
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmd1bWVudENvdW50OyBpKyspCi0gICAg
ICAgICAgICAgICAgYXJndW1lbnRzW2ldID0gdG9SZWYoZXhlYywgYXJncy5hdChpKSk7CisgICAg
ICAgICAgICAgICAgYXJndW1lbnRzW2ldID0gdG9SZWYoZXhlYywgZXhlYy0+YXJndW1lbnQoaSkp
OwogICAgICAgICAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOwogICAgICAgICAgICAgSlNW
YWx1ZSByZXN1bHQ7CiAgICAgICAgICAgICB7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FycmF5Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyAr
MzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChBcnJh
eUNvbnN0cnVjdG9yKTsKICAgICAKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlD
b25zdHJ1Y3RvcklzQXJyYXkoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBB
cmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5Q29uc3RydWN0b3JJ
c0FycmF5KEV4ZWNTdGF0ZSopOwogCiBBcnJheUNvbnN0cnVjdG9yOjpBcnJheUNvbnN0cnVjdG9y
KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgTm9uTnVsbFBh
c3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUsIEFycmF5UHJvdG90eXBlKiBhcnJheVByb3Rv
dHlwZSwgU3RydWN0dXJlKiBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSkKICAgICA6IEludGVy
bmFsRnVuY3Rpb24oJmV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUs
IElkZW50aWZpZXIoZXhlYywgYXJyYXlQcm90b3R5cGUtPmNsYXNzSW5mbygpLT5jbGFzc05hbWUp
KQpAQCAtNzYsOCArNzYsOSBAQCBDb25zdHJ1Y3RUeXBlIEFycmF5Q29uc3RydWN0b3I6OmdldENv
bnN0CiAgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OwogfQogCi1zdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNhbGxBcnJheUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGljIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjYWxsQXJyYXlDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgQXJn
TGlzdCBhcmdzKGV4ZWMpOwogICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheVdpdGhTaXplUXVpcmso
ZXhlYywgYXJncyk7CiB9CiAKQEAgLTg5LDkgKzkwLDkgQEAgQ2FsbFR5cGUgQXJyYXlDb25zdHJ1
Y3Rvcjo6Z2V0Q2FsbERhdGEoQwogICAgIHJldHVybiBDYWxsVHlwZUhvc3Q7CiB9CiAKLUpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBhcnJheUNvbnN0cnVjdG9ySXNBcnJheShFeGVjU3RhdGUqLCBKU09i
amVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgYXJyYXlDb25zdHJ1Y3RvcklzQXJyYXkoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVy
biBqc0Jvb2xlYW4oYXJncy5hdCgwKS5pbmhlcml0cygmSlNBcnJheTo6aW5mbykpOworICAgIHJl
dHVybiBqc0Jvb2xlYW4oZXhlYy0+YXJndW1lbnQoMCkuaW5oZXJpdHMoJkpTQXJyYXk6OmluZm8p
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FycmF5UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FycmF5UHJvdG90eXBlLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsMjcgKzQwLDI3
IEBAIG5hbWVzcGFjZSBKU0MgewogCiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEFycmF5UHJv
dG90eXBlKTsKIAotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1Rv
U3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwot
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1RvTG9jYWxlU3RyaW5n
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGlj
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0NvbmNhdChFeGVjU3RhdGUqLCBK
U09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNKb2luKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVBy
b3RvRnVuY1BvcChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
KTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNQdXNoKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1JldmVyc2UoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGFycmF5UHJvdG9GdW5jU2hpZnQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBj
b25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9G
dW5jU2xpY2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7
Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jU29ydChFeGVjU3Rh
dGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNTcGxpY2UoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGFycmF5UHJvdG9GdW5jVW5TaGlmdChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1
bmNFdmVyeShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsK
LXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNGb3JFYWNoKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1NvbWUoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGFycmF5UHJvdG9GdW5jSW5kZXhPZihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1
bmNGaWx0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7
Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jTWFwKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1JlZHVjZShFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
YXJyYXlQcm90b0Z1bmNSZWR1Y2VSaWdodChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90
b0Z1bmNMYXN0SW5kZXhPZihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNUb1N0
cmluZyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90
b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgYXJyYXlQcm90b0Z1bmNDb25jYXQoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jSm9pbihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNQb3AoRXhlY1N0YXRlKik7CitzdGF0aWMg
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jUHVzaChFeGVjU3RhdGUqKTsKK3N0
YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNSZXZlcnNlKEV4ZWNTdGF0
ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1NoaWZ0KEV4
ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1Ns
aWNlKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3Rv
RnVuY1NvcnQoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5
UHJvdG9GdW5jU3BsaWNlKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBhcnJheVByb3RvRnVuY1VuU2hpZnQoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jRXZlcnkoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jRm9yRWFjaChFeGVjU3RhdGUqKTsKK3N0YXRp
YyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNTb21lKEV4ZWNTdGF0ZSopOwor
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0luZGV4T2YoRXhlY1N0
YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jRmlsdGVy
KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVu
Y01hcChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90
b0Z1bmNSZWR1Y2UoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFy
cmF5UHJvdG9GdW5jUmVkdWNlUmlnaHQoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jTGFzdEluZGV4T2YoRXhlY1N0YXRlKik7CiAKIH0KIApA
QCAtMTQ5LDggKzE0OSw5IEBAIHN0YXRpYyB2b2lkIHB1dFByb3BlcnR5KEV4ZWNTdGF0ZSogZXhl
YywKICAgICBvYmotPnB1dChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKIH0KIAot
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykK
IHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBi
b29sIGlzUmVhbEFycmF5ID0gaXNKU0FycmF5KCZleGVjLT5nbG9iYWxEYXRhKCksIHRoaXNWYWx1
ZSk7CiAgICAgaWYgKCFpc1JlYWxBcnJheSAmJiAhdGhpc1ZhbHVlLmluaGVyaXRzKCZKU0FycmF5
OjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKQEAg
LTIwOCw4ICsyMDksOSBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNUb1N0
CiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIFVTdHJpbmc6OmFkb3B0KGJ1ZmZlcikpOwogfQog
Ci1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
KQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhl
Y1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNW
YWx1ZSgpOwogICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU0FycmF5OjppbmZvKSkKICAg
ICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKICAgICBKU09iamVjdCog
dGhpc09iaiA9IGFzQXJyYXkodGhpc1ZhbHVlKTsKQEAgLTI0OCw4ICsyNTAsOSBAQCBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNUb0xvCiAgICAgcmV0dXJuIHN0ckJ1ZmZlci5i
dWlsZChleGVjKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jSm9p
bihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNKb2luKEV4
ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlz
VmFsdWUoKTsKICAgICBKU09iamVjdCogdGhpc09iaiA9IHRoaXNWYWx1ZS50b1RoaXNPYmplY3Qo
ZXhlYyk7CiAKICAgICBIYXNoU2V0PEpTT2JqZWN0Kj4mIGFycmF5VmlzaXRlZEVsZW1lbnRzID0g
ZXhlYy0+Z2xvYmFsRGF0YSgpLmFycmF5VmlzaXRlZEVsZW1lbnRzOwpAQCAtMjY1LDggKzI2OCw4
IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0pvaW4KICAgICBKU1N0cmlu
Z0J1aWxkZXIgc3RyQnVmZmVyOwogCiAgICAgVVN0cmluZyBzZXBhcmF0b3I7Ci0gICAgaWYgKCFh
cmdzLmF0KDApLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIHNlcGFyYXRvciA9IGFyZ3MuYXQoMCku
dG9TdHJpbmcoZXhlYyk7CisgICAgaWYgKCFleGVjLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgp
KQorICAgICAgICBzZXBhcmF0b3IgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKTsK
IAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXNPYmotPmdldChleGVjLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkubGVuZ3RoKS50b1VJbnQzMihleGVjKTsKICAgICB1bnNpZ25lZCBrID0gMDsKQEAg
LTMxOSwxMyArMzIyLDE0IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0pv
aW4KICAgICByZXR1cm4gc3RyQnVmZmVyLmJ1aWxkKGV4ZWMpOwogfQogCi1KU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNDb25jYXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGFycmF5UHJvdG9GdW5jQ29uY2F0KEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1Zh
bHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBKU0FycmF5KiBhcnIg
PSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMpOwogICAgIGludCBuID0gMDsKICAgICBKU1ZhbHVl
IGN1ckFyZyA9IHRoaXNWYWx1ZS50b1RoaXNPYmplY3QoZXhlYyk7Ci0gICAgQXJnTGlzdDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBhcmdzLmJlZ2luKCk7Ci0gICAgQXJnTGlzdDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gYXJncy5lbmQoKTsKKyAgICBzaXplX3QgaSA9IDA7CisgICAgc2l6ZV90IGFyZ0Nv
dW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOwogICAgIHdoaWxlICgxKSB7CiAgICAgICAgIGlm
IChjdXJBcmcuaW5oZXJpdHMoJkpTQXJyYXk6OmluZm8pKSB7CiAgICAgICAgICAgICB1bnNpZ25l
ZCBsZW5ndGggPSBjdXJBcmcuZ2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgp
LnRvVUludDMyKGV4ZWMpOwpAQCAtMzM5LDE3ICszNDMsMTggQEAgSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGFycmF5UHJvdG9GdW5jQ29uYwogICAgICAgICAgICAgYXJyLT5wdXQoZXhlYywgbiwgY3Vy
QXJnKTsKICAgICAgICAgICAgIG4rKzsKICAgICAgICAgfQotICAgICAgICBpZiAoaXQgPT0gZW5k
KQorICAgICAgICBpZiAoaSA9PSBhcmdDb3VudCkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjdXJBcmcgPSAoKml0KTsKLSAgICAgICAgKytpdDsKKyAgICAgICAgY3VyQXJnID0gKGV4ZWMt
PmFyZ3VtZW50KGkpKTsKKyAgICAgICAgKytpOwogICAgIH0KICAgICBhcnItPnNldExlbmd0aChu
KTsKICAgICByZXR1cm4gYXJyOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90
b0Z1bmNQb3AoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBj
b25zdCBBcmdMaXN0JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1BvcChF
eGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhp
c1ZhbHVlKCk7CiAgICAgaWYgKGlzSlNBcnJheSgmZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzVmFs
dWUpKQogICAgICAgICByZXR1cm4gYXNBcnJheSh0aGlzVmFsdWUpLT5wb3AoKTsKIApAQCAtMzY3
LDI1ICszNzIsMjcgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jUG9wKAog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3Rv
RnVuY1B1c2goRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5j
UHVzaChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgaWYgKGlzSlNBcnJheSgmZXhlYy0+Z2xvYmFs
RGF0YSgpLCB0aGlzVmFsdWUpICYmIGFyZ3Muc2l6ZSgpID09IDEpIHsKKyAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKKyAgICBpZiAoaXNKU0FycmF5KCZleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXNWYWx1ZSkgJiYgZXhlYy0+YXJndW1lbnRDb3VudCgpID09IDEp
IHsKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5KHRoaXNWYWx1ZSk7Ci0gICAgICAg
IGFycmF5LT5wdXNoKGV4ZWMsICphcmdzLmJlZ2luKCkpOworICAgICAgICBhcnJheS0+cHVzaChl
eGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgICAgIHJldHVybiBqc051bWJlcihleGVjLCBh
cnJheS0+bGVuZ3RoKCkpOwogICAgIH0KIAogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gdGhpc1Zh
bHVlLnRvVGhpc09iamVjdChleGVjKTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzT2JqLT5n
ZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkudG9VSW50MzIoZXhlYyk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IGFyZ3Muc2l6ZSgpOyBuKyspCi0gICAgICAgIHRo
aXNPYmotPnB1dChleGVjLCBsZW5ndGggKyBuLCBhcmdzLmF0KG4pKTsKLSAgICBsZW5ndGggKz0g
YXJncy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IGV4ZWMtPmFyZ3VtZW50
Q291bnQoKTsgbisrKQorICAgICAgICB0aGlzT2JqLT5wdXQoZXhlYywgbGVuZ3RoICsgbiwgZXhl
Yy0+YXJndW1lbnQobikpOworICAgIGxlbmd0aCArPSBleGVjLT5hcmd1bWVudENvdW50KCk7CiAg
ICAgcHV0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0
aCwganNOdW1iZXIoZXhlYywgbGVuZ3RoKSk7CiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGxl
bmd0aCk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1JldmVyc2Uo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdM
aXN0JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1JldmVyc2UoRXhlY1N0
YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1
ZSgpOwogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gdGhpc1ZhbHVlLnRvVGhpc09iamVjdChleGVj
KTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzT2JqLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmxlbmd0aCkudG9VSW50MzIoZXhlYyk7CiAgICAgdW5zaWduZWQgbWlkZGxlID0g
bGVuZ3RoIC8gMjsKQEAgLTQwOCw4ICs0MTUsOSBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJy
YXlQcm90b0Z1bmNSZXZlCiAgICAgcmV0dXJuIHRoaXNPYmo7CiB9CiAKLUpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBhcnJheVByb3RvRnVuY1NoaWZ0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBK
U1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
YXJyYXlQcm90b0Z1bmNTaGlmdChFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSB0
aGlzVmFsdWUudG9UaGlzT2JqZWN0KGV4ZWMpOwogICAgIEpTVmFsdWUgcmVzdWx0OwogCkBAIC00
MzEsOCArNDM5LDkgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jU2hpZgog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3Rv
RnVuY1NsaWNlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVu
Y1NsaWNlKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMt
Pmhvc3RUaGlzVmFsdWUoKTsKICAgICAvLyBodHRwOi8vZGV2ZWxvcGVyLm5ldHNjYXBlLmNvbS9k
b2NzL21hbnVhbHMvanMvY2xpZW50L2pzcmVmL2FycmF5Lmh0bSMxMTkzNzEzIG9yIDE1LjQuNC4x
MAogCiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSB0aGlzVmFsdWUudG9UaGlzT2JqZWN0KGV4ZWMp
OwpAQCAtNDQwLDcgKzQ0OSw3IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVu
Y1NsaWMKICAgICAvLyBXZSByZXR1cm4gYSBuZXcgYXJyYXkKICAgICBKU0FycmF5KiByZXNPYmog
PSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gcmVzT2Jq
OwotICAgIGRvdWJsZSBiZWdpbiA9IGFyZ3MuYXQoMCkudG9JbnRlZ2VyKGV4ZWMpOworICAgIGRv
dWJsZSBiZWdpbiA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50ZWdlcihleGVjKTsKICAgICB1bnNp
Z25lZCBsZW5ndGggPSB0aGlzT2JqLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxl
bmd0aCkudG9VSW50MzIoZXhlYyk7CiAgICAgaWYgKGJlZ2luID49IDApIHsKICAgICAgICAgaWYg
KGJlZ2luID4gbGVuZ3RoKQpAQCAtNDUxLDEwICs0NjAsMTAgQEAgSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGFycmF5UHJvdG9GdW5jU2xpYwogICAgICAgICAgICAgYmVnaW4gPSAwOwogICAgIH0KICAg
ICBkb3VibGUgZW5kOwotICAgIGlmIChhcmdzLmF0KDEpLmlzVW5kZWZpbmVkKCkpCisgICAgaWYg
KGV4ZWMtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIGVuZCA9IGxlbmd0aDsK
ICAgICBlbHNlIHsKLSAgICAgICAgZW5kID0gYXJncy5hdCgxKS50b0ludGVnZXIoZXhlYyk7Cisg
ICAgICAgIGVuZCA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50ZWdlcihleGVjKTsKICAgICAgICAg
aWYgKGVuZCA8IDApIHsKICAgICAgICAgICAgIGVuZCArPSBsZW5ndGg7CiAgICAgICAgICAgICBp
ZiAoZW5kIDwgMCkKQEAgLTQ3NiwxMSArNDg1LDEyIEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBh
cnJheVByb3RvRnVuY1NsaWMKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNTb3J0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBK
U1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBhcnJheVByb3RvRnVuY1NvcnQoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUg
dGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIEpTT2JqZWN0KiB0aGlzT2Jq
ID0gdGhpc1ZhbHVlLnRvVGhpc09iamVjdChleGVjKTsKIAotICAgIEpTVmFsdWUgZnVuY3Rpb24g
PSBhcmdzLmF0KDApOworICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBleGVjLT5hcmd1bWVudCgwKTsK
ICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGZ1bmN0aW9u
LmdldENhbGxEYXRhKGNhbGxEYXRhKTsKIApAQCAtNTM0LDggKzU0NCw5IEBAIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1NvcnQKICAgICByZXR1cm4gdGhpc09iajsKIH0KIAot
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jU3BsaWNlKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1NwbGljZShFeGVjU3RhdGUqIGV4ZWMp
CiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAg
SlNPYmplY3QqIHRoaXNPYmogPSB0aGlzVmFsdWUudG9UaGlzT2JqZWN0KGV4ZWMpOwogCiAgICAg
Ly8gMTUuNC40LjEyCkBAIC01NDMsMTEgKzU1NCwxMSBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
YXJyYXlQcm90b0Z1bmNTcGxpCiAgICAgSlNWYWx1ZSByZXN1bHQgPSByZXNPYmo7CiAKICAgICAv
LyBGSVhNRTogRmlyZWZveCByZXR1cm5zIGFuIGVtcHR5IGFycmF5LgotICAgIGlmICghYXJncy5z
aXplKCkpCisgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpc09iai0+Z2V0KGV4ZWMs
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOwotICAgIGRvdWJs
ZSByZWxhdGl2ZUJlZ2luID0gYXJncy5hdCgwKS50b0ludGVnZXIoZXhlYyk7CisgICAgZG91Ymxl
IHJlbGF0aXZlQmVnaW4gPSBleGVjLT5hcmd1bWVudCgwKS50b0ludGVnZXIoZXhlYyk7CiAgICAg
dW5zaWduZWQgYmVnaW47CiAgICAgaWYgKHJlbGF0aXZlQmVnaW4gPCAwKSB7CiAgICAgICAgIHJl
bGF0aXZlQmVnaW4gKz0gbGVuZ3RoOwpAQCAtNTU2LDggKzU2Nyw4IEBAIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBhcnJheVByb3RvRnVuY1NwbGkKICAgICAgICAgYmVnaW4gPSBzdGQ6Om1pbjx1bnNp
Z25lZD4oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJlbGF0aXZlQmVnaW4pLCBsZW5ndGgpOwogCiAg
ICAgdW5zaWduZWQgZGVsZXRlQ291bnQ7Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpID4gMSkKLSAgICAg
ICAgZGVsZXRlQ291bnQgPSBzdGQ6Om1pbjxpbnQ+KHN0ZDo6bWF4PGludD4oYXJncy5hdCgxKS50
b1VJbnQzMihleGVjKSwgMCksIGxlbmd0aCAtIGJlZ2luKTsKKyAgICBpZiAoZXhlYy0+YXJndW1l
bnRDb3VudCgpID4gMSkKKyAgICAgICAgZGVsZXRlQ291bnQgPSBzdGQ6Om1pbjxpbnQ+KHN0ZDo6
bWF4PGludD4oZXhlYy0+YXJndW1lbnQoMSkudG9VSW50MzIoZXhlYyksIDApLCBsZW5ndGggLSBi
ZWdpbik7CiAgICAgZWxzZQogICAgICAgICBkZWxldGVDb3VudCA9IGxlbmd0aCAtIGJlZ2luOwog
CkBAIC01NjcsNyArNTc4LDcgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5j
U3BsaQogICAgIH0KICAgICByZXNPYmotPnNldExlbmd0aChkZWxldGVDb3VudCk7CiAKLSAgICB1
bnNpZ25lZCBhZGRpdGlvbmFsQXJncyA9IHN0ZDo6bWF4PGludD4oYXJncy5zaXplKCkgLSAyLCAw
KTsKKyAgICB1bnNpZ25lZCBhZGRpdGlvbmFsQXJncyA9IHN0ZDo6bWF4PGludD4oZXhlYy0+YXJn
dW1lbnRDb3VudCgpIC0gMiwgMCk7CiAgICAgaWYgKGFkZGl0aW9uYWxBcmdzICE9IGRlbGV0ZUNv
dW50KSB7CiAgICAgICAgIGlmIChhZGRpdGlvbmFsQXJncyA8IGRlbGV0ZUNvdW50KSB7CiAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGsgPSBiZWdpbjsgayA8IGxlbmd0aCAtIGRlbGV0ZUNvdW50
OyArK2spIHsKQEAgLTU4OCwxOSArNTk5LDIwIEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJh
eVByb3RvRnVuY1NwbGkKICAgICAgICAgfQogICAgIH0KICAgICBmb3IgKHVuc2lnbmVkIGsgPSAw
OyBrIDwgYWRkaXRpb25hbEFyZ3M7ICsraykKLSAgICAgICAgdGhpc09iai0+cHV0KGV4ZWMsIGsg
KyBiZWdpbiwgYXJncy5hdChrICsgMikpOworICAgICAgICB0aGlzT2JqLT5wdXQoZXhlYywgayAr
IGJlZ2luLCBleGVjLT5hcmd1bWVudChrICsgMikpOwogCiAgICAgcHV0UHJvcGVydHkoZXhlYywg
dGhpc09iaiwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoZXhlYywgbGVu
Z3RoIC0gZGVsZXRlQ291bnQgKyBhZGRpdGlvbmFsQXJncykpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1VuU2hpZnQoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jVW5TaGlmdChFeGVjU3Rh
dGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVl
KCk7CiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSB0aGlzVmFsdWUudG9UaGlzT2JqZWN0KGV4ZWMp
OwogCiAgICAgLy8gMTUuNC40LjEzCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpc09iai0+Z2V0
KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOwotICAg
IHVuc2lnbmVkIG5yQXJncyA9IGFyZ3Muc2l6ZSgpOworICAgIHVuc2lnbmVkIG5yQXJncyA9IGV4
ZWMtPmFyZ3VtZW50Q291bnQoKTsKICAgICBpZiAobnJBcmdzKSB7CiAgICAgICAgIGZvciAodW5z
aWduZWQgayA9IGxlbmd0aDsgayA+IDA7IC0taykgewogICAgICAgICAgICAgaWYgKEpTVmFsdWUg
diA9IGdldFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGsgLSAxKSkKQEAgLTYxMCwyMyArNjIyLDI0
IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1VuU2gKICAgICAgICAgfQog
ICAgIH0KICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgbnJBcmdzOyArK2spCi0gICAgICAg
IHRoaXNPYmotPnB1dChleGVjLCBrLCBhcmdzLmF0KGspKTsKKyAgICAgICAgdGhpc09iai0+cHV0
KGV4ZWMsIGssIGV4ZWMtPmFyZ3VtZW50KGspKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVt
YmVyKGV4ZWMsIGxlbmd0aCArIG5yQXJncyk7CiAgICAgcHV0UHJvcGVydHkoZXhlYywgdGhpc09i
aiwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwgcmVzdWx0KTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNGaWx0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jRmlsdGVyKEV4ZWNT
dGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFs
dWUoKTsKICAgICBKU09iamVjdCogdGhpc09iaiA9IHRoaXNWYWx1ZS50b1RoaXNPYmplY3QoZXhl
Yyk7CiAKLSAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gYXJncy5hdCgwKTsKKyAgICBKU1ZhbHVlIGZ1
bmN0aW9uID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAg
Q2FsbFR5cGUgY2FsbFR5cGUgPSBmdW5jdGlvbi5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CiAgICAg
aWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3Io
ZXhlYywgVHlwZUVycm9yKTsKIAotICAgIEpTT2JqZWN0KiBhcHBseVRoaXMgPSBhcmdzLmF0KDEp
LmlzVW5kZWZpbmVkT3JOdWxsKCkgPyBleGVjLT5nbG9iYWxUaGlzVmFsdWUoKSA6IGFyZ3MuYXQo
MSkudG9PYmplY3QoZXhlYyk7CisgICAgSlNPYmplY3QqIGFwcGx5VGhpcyA9IGV4ZWMtPmFyZ3Vt
ZW50KDEpLmlzVW5kZWZpbmVkT3JOdWxsKCkgPyBleGVjLT5nbG9iYWxUaGlzVmFsdWUoKSA6IGV4
ZWMtPmFyZ3VtZW50KDEpLnRvT2JqZWN0KGV4ZWMpOwogICAgIEpTQXJyYXkqIHJlc3VsdEFycmF5
ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjKTsKIAogICAgIHVuc2lnbmVkIGZpbHRlckluZGV4
ID0gMDsKQEAgLTY3NCwxNyArNjg3LDE4IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVBy
b3RvRnVuY0ZpbHQKICAgICByZXR1cm4gcmVzdWx0QXJyYXk7CiB9CiAKLUpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBhcnJheVByb3RvRnVuY01hcChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNW
YWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgYXJyYXlQcm90b0Z1bmNNYXAoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhp
c1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0g
dGhpc1ZhbHVlLnRvVGhpc09iamVjdChleGVjKTsKIAotICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBh
cmdzLmF0KDApOworICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBleGVjLT5hcmd1bWVudCgwKTsKICAg
ICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGZ1bmN0aW9uLmdl
dENhbGxEYXRhKGNhbGxEYXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKQog
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCi0gICAgSlNPYmpl
Y3QqIGFwcGx5VGhpcyA9IGFyZ3MuYXQoMSkuaXNVbmRlZmluZWRPck51bGwoKSA/IGV4ZWMtPmds
b2JhbFRoaXNWYWx1ZSgpIDogYXJncy5hdCgxKS50b09iamVjdChleGVjKTsKKyAgICBKU09iamVj
dCogYXBwbHlUaGlzID0gZXhlYy0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWRPck51bGwoKSA/IGV4
ZWMtPmdsb2JhbFRoaXNWYWx1ZSgpIDogZXhlYy0+YXJndW1lbnQoMSkudG9PYmplY3QoZXhlYyk7
CiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzT2JqLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmxlbmd0aCkudG9VSW50MzIoZXhlYyk7CiAKQEAgLTczMSwxNyArNzQ1LDE4IEBA
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY01hcCgKIC8vIGh0dHA6Ly9kZXZl
bG9wZXItdGVzdC5tb3ppbGxhLm9yZy9lbi9kb2NzL0NvcmVfSmF2YVNjcmlwdF8xLjVfUmVmZXJl
bmNlOk9iamVjdHM6QXJyYXk6Zm9yRWFjaAogLy8gaHR0cDovL2RldmVsb3Blci10ZXN0Lm1vemls
bGEub3JnL2VuL2RvY3MvQ29yZV9KYXZhU2NyaXB0XzEuNV9SZWZlcmVuY2U6T2JqZWN0czpBcnJh
eTpzb21lCiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0V2ZXJ5KEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYg
YXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0V2ZXJ5KEV4ZWNTdGF0
ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUo
KTsKICAgICBKU09iamVjdCogdGhpc09iaiA9IHRoaXNWYWx1ZS50b1RoaXNPYmplY3QoZXhlYyk7
CiAKLSAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gYXJncy5hdCgwKTsKKyAgICBKU1ZhbHVlIGZ1bmN0
aW9uID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2Fs
bFR5cGUgY2FsbFR5cGUgPSBmdW5jdGlvbi5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CiAgICAgaWYg
KGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhl
YywgVHlwZUVycm9yKTsKIAotICAgIEpTT2JqZWN0KiBhcHBseVRoaXMgPSBhcmdzLmF0KDEpLmlz
VW5kZWZpbmVkT3JOdWxsKCkgPyBleGVjLT5nbG9iYWxUaGlzVmFsdWUoKSA6IGFyZ3MuYXQoMSku
dG9PYmplY3QoZXhlYyk7CisgICAgSlNPYmplY3QqIGFwcGx5VGhpcyA9IGV4ZWMtPmFyZ3VtZW50
KDEpLmlzVW5kZWZpbmVkT3JOdWxsKCkgPyBleGVjLT5nbG9iYWxUaGlzVmFsdWUoKSA6IGV4ZWMt
PmFyZ3VtZW50KDEpLnRvT2JqZWN0KGV4ZWMpOwogCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0Jv
b2xlYW4odHJ1ZSk7CiAKQEAgLTc4NywxNyArODAyLDE4IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBhcnJheVByb3RvRnVuY0V2ZXIKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNGb3JFYWNoKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0ZvckVhY2goRXhlY1N0YXRlKiBleGVjKQogeworICAg
IEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIEpTT2JqZWN0
KiB0aGlzT2JqID0gdGhpc1ZhbHVlLnRvVGhpc09iamVjdChleGVjKTsKIAotICAgIEpTVmFsdWUg
ZnVuY3Rpb24gPSBhcmdzLmF0KDApOworICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBleGVjLT5hcmd1
bWVudCgwKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9
IGZ1bmN0aW9uLmdldENhbGxEYXRhKGNhbGxEYXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0gQ2Fs
bFR5cGVOb25lKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwog
Ci0gICAgSlNPYmplY3QqIGFwcGx5VGhpcyA9IGFyZ3MuYXQoMSkuaXNVbmRlZmluZWRPck51bGwo
KSA/IGV4ZWMtPmdsb2JhbFRoaXNWYWx1ZSgpIDogYXJncy5hdCgxKS50b09iamVjdChleGVjKTsK
KyAgICBKU09iamVjdCogYXBwbHlUaGlzID0gZXhlYy0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWRP
ck51bGwoKSA/IGV4ZWMtPmdsb2JhbFRoaXNWYWx1ZSgpIDogZXhlYy0+YXJndW1lbnQoMSkudG9P
YmplY3QoZXhlYyk7CiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzT2JqLT5nZXQoZXhlYywg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkudG9VSW50MzIoZXhlYyk7CiAgICAgdW5zaWdu
ZWQgayA9IDA7CkBAIC04MzIsMTcgKzg0OCwxOCBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJy
YXlQcm90b0Z1bmNGb3JFCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1NvbWUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jU29tZShFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNW
YWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgSlNPYmplY3QqIHRo
aXNPYmogPSB0aGlzVmFsdWUudG9UaGlzT2JqZWN0KGV4ZWMpOwogCi0gICAgSlNWYWx1ZSBmdW5j
dGlvbiA9IGFyZ3MuYXQoMCk7CisgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IGV4ZWMtPmFyZ3VtZW50
KDApOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZnVu
Y3Rpb24uZ2V0Q2FsbERhdGEoY2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlw
ZU5vbmUpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKLSAg
ICBKU09iamVjdCogYXBwbHlUaGlzID0gYXJncy5hdCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpID8g
ZXhlYy0+Z2xvYmFsVGhpc1ZhbHVlKCkgOiBhcmdzLmF0KDEpLnRvT2JqZWN0KGV4ZWMpOworICAg
IEpTT2JqZWN0KiBhcHBseVRoaXMgPSBleGVjLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZE9yTnVs
bCgpID8gZXhlYy0+Z2xvYmFsVGhpc1ZhbHVlKCkgOiBleGVjLT5hcmd1bWVudCgxKS50b09iamVj
dChleGVjKTsKIAogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNCb29sZWFuKGZhbHNlKTsKIApAQCAt
ODg1LDExICs5MDIsMTIgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jU29t
ZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVBy
b3RvRnVuY1JlZHVjZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFs
dWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90
b0Z1bmNSZWR1Y2UoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0g
ZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gdGhpc1ZhbHVl
LnRvVGhpc09iamVjdChleGVjKTsKICAgICAKLSAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gYXJncy5h
dCgwKTsKKyAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgQ2Fs
bERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBmdW5jdGlvbi5nZXRDYWxs
RGF0YShjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkKQEAgLTg5
OCwxNCArOTE2LDE0IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1JlZHUK
ICAgICB1bnNpZ25lZCBpID0gMDsKICAgICBKU1ZhbHVlIHJ2OwogICAgIHVuc2lnbmVkIGxlbmd0
aCA9IHRoaXNPYmotPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS50b1VJ
bnQzMihleGVjKTsKLSAgICBpZiAoIWxlbmd0aCAmJiBhcmdzLnNpemUoKSA9PSAxKQorICAgIGlm
ICghbGVuZ3RoICYmIGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA9PSAxKQogICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogICAgIEpTQXJyYXkqIGFycmF5ID0gMDsKICAg
ICBpZiAoaXNKU0FycmF5KCZleGVjLT5nbG9iYWxEYXRhKCksIHRoaXNPYmopKQogICAgICAgICBh
cnJheSA9IGFzQXJyYXkodGhpc09iaik7CiAKLSAgICBpZiAoYXJncy5zaXplKCkgPj0gMikKLSAg
ICAgICAgcnYgPSBhcmdzLmF0KDEpOworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0g
MikKKyAgICAgICAgcnYgPSBleGVjLT5hcmd1bWVudCgxKTsKICAgICBlbHNlIGlmIChhcnJheSAm
JiBhcnJheS0+Y2FuR2V0SW5kZXgoMCkpewogICAgICAgICBydiA9IGFycmF5LT5nZXRJbmRleCgw
KTsKICAgICAgICAgaSA9IDE7CkBAIC05NTUsMTEgKzk3MywxMiBAQCBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgYXJyYXlQcm90b0Z1bmNSZWR1CiAgICAgcmV0dXJuIHJ2OwogfQogCi1KU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNSZWR1Y2VSaWdodChFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNSZWR1Y2VSaWdodChFeGVjU3RhdGUqIGV4ZWMp
CiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAg
SlNPYmplY3QqIHRoaXNPYmogPSB0aGlzVmFsdWUudG9UaGlzT2JqZWN0KGV4ZWMpOwogICAgIAot
ICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBhcmdzLmF0KDApOworICAgIEpTVmFsdWUgZnVuY3Rpb24g
PSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlw
ZSBjYWxsVHlwZSA9IGZ1bmN0aW9uLmdldENhbGxEYXRhKGNhbGxEYXRhKTsKICAgICBpZiAoY2Fs
bFR5cGUgPT0gQ2FsbFR5cGVOb25lKQpAQCAtOTY4LDE0ICs5ODcsMTQgQEAgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jUmVkdQogICAgIHVuc2lnbmVkIGkgPSAwOwogICAgIEpT
VmFsdWUgcnY7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpc09iai0+Z2V0KGV4ZWMsIGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOwotICAgIGlmICghbGVuZ3Ro
ICYmIGFyZ3Muc2l6ZSgpID09IDEpCisgICAgaWYgKCFsZW5ndGggJiYgZXhlYy0+YXJndW1lbnRD
b3VudCgpID09IDEpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7
CiAgICAgSlNBcnJheSogYXJyYXkgPSAwOwogICAgIGlmIChpc0pTQXJyYXkoJmV4ZWMtPmdsb2Jh
bERhdGEoKSwgdGhpc09iaikpCiAgICAgICAgIGFycmF5ID0gYXNBcnJheSh0aGlzT2JqKTsKICAg
ICAKLSAgICBpZiAoYXJncy5zaXplKCkgPj0gMikKLSAgICAgICAgcnYgPSBhcmdzLmF0KDEpOwor
ICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMikKKyAgICAgICAgcnYgPSBleGVjLT5h
cmd1bWVudCgxKTsKICAgICBlbHNlIGlmIChhcnJheSAmJiBhcnJheS0+Y2FuR2V0SW5kZXgobGVu
Z3RoIC0gMSkpewogICAgICAgICBydiA9IGFycmF5LT5nZXRJbmRleChsZW5ndGggLSAxKTsKICAg
ICAgICAgaSA9IDE7CkBAIC0xMDI0LDE1ICsxMDQzLDE2IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBhcnJheVByb3RvRnVuY1JlZHUKICAgICByZXR1cm4gcnY7ICAgICAgICAKIH0KIAotSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jSW5kZXhPZihFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNJbmRleE9mKEV4ZWNTdGF0ZSogZXhlYykKIHsK
KyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICAvLyBK
YXZhU2NyaXB0IDEuNSBFeHRlbnNpb24gYnkgTW96aWxsYQogICAgIC8vIERvY3VtZW50YXRpb246
IGh0dHA6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vZG9jcy9Db3JlX0phdmFTY3JpcHRfMS41
X1JlZmVyZW5jZTpHbG9iYWxfT2JqZWN0czpBcnJheTppbmRleE9mCiAKICAgICBKU09iamVjdCog
dGhpc09iaiA9IHRoaXNWYWx1ZS50b1RoaXNPYmplY3QoZXhlYyk7CiAKICAgICB1bnNpZ25lZCBp
bmRleCA9IDA7Ci0gICAgZG91YmxlIGQgPSBhcmdzLmF0KDEpLnRvSW50ZWdlcihleGVjKTsKKyAg
ICBkb3VibGUgZCA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50ZWdlcihleGVjKTsKICAgICB1bnNp
Z25lZCBsZW5ndGggPSB0aGlzT2JqLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxl
bmd0aCkudG9VSW50MzIoZXhlYyk7CiAgICAgaWYgKGQgPCAwKQogICAgICAgICBkICs9IGxlbmd0
aDsKQEAgLTEwNDMsNyArMTA2Myw3IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3Rv
RnVuY0luZGUKICAgICAgICAgICAgIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGQpOwog
ICAgIH0KIAotICAgIEpTVmFsdWUgc2VhcmNoRWxlbWVudCA9IGFyZ3MuYXQoMCk7CisgICAgSlNW
YWx1ZSBzZWFyY2hFbGVtZW50ID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgZm9yICg7IGluZGV4
IDwgbGVuZ3RoOyArK2luZGV4KSB7CiAgICAgICAgIEpTVmFsdWUgZSA9IGdldFByb3BlcnR5KGV4
ZWMsIHRoaXNPYmosIGluZGV4KTsKICAgICAgICAgaWYgKCFlKQpAQCAtMTA1NSw4ICsxMDc1LDkg
QEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jSW5kZQogICAgIHJldHVybiBq
c051bWJlcihleGVjLCAtMSk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3Rv
RnVuY0xhc3RJbmRleE9mKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVBy
b3RvRnVuY0xhc3RJbmRleE9mKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNW
YWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICAvLyBKYXZhU2NyaXB0IDEuNiBFeHRl
bnNpb24gYnkgTW96aWxsYQogICAgIC8vIERvY3VtZW50YXRpb246IGh0dHA6Ly9kZXZlbG9wZXIu
bW96aWxsYS5vcmcvZW4vZG9jcy9Db3JlX0phdmFTY3JpcHRfMS41X1JlZmVyZW5jZTpHbG9iYWxf
T2JqZWN0czpBcnJheTpsYXN0SW5kZXhPZgogCkBAIC0xMDY0LDcgKzEwODUsNyBAQCBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNMYXN0CiAKICAgICB1bnNpZ25lZCBsZW5ndGgg
PSB0aGlzT2JqLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkudG9VSW50
MzIoZXhlYyk7CiAgICAgaW50IGluZGV4ID0gbGVuZ3RoIC0gMTsKLSAgICBkb3VibGUgZCA9IGFy
Z3MuYXQoMSkudG9JbnRlZ2VyUHJlc2VydmVOYU4oZXhlYyk7CisgICAgZG91YmxlIGQgPSBleGVj
LT5hcmd1bWVudCgxKS50b0ludGVnZXJQcmVzZXJ2ZU5hTihleGVjKTsKIAogICAgIGlmIChkIDwg
MCkgewogICAgICAgICBkICs9IGxlbmd0aDsKQEAgLTEwNzQsNyArMTA5NSw3IEBAIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0xhc3QKICAgICBpZiAoZCA8IGxlbmd0aCkKICAg
ICAgICAgaW5kZXggPSBzdGF0aWNfY2FzdDxpbnQ+KGQpOwogCi0gICAgSlNWYWx1ZSBzZWFyY2hF
bGVtZW50ID0gYXJncy5hdCgwKTsKKyAgICBKU1ZhbHVlIHNlYXJjaEVsZW1lbnQgPSBleGVjLT5h
cmd1bWVudCgwKTsKICAgICBmb3IgKDsgaW5kZXggPj0gMDsgLS1pbmRleCkgewogICAgICAgICBK
U1ZhbHVlIGUgPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBpbmRleCk7CiAgICAgICAgIGlm
ICghZSkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rv
ci5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFu
Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw5ICs1Nyw5IEBAIENvbnN0cnVj
dFR5cGUgQm9vbGVhbkNvbnN0cnVjdG9yOjpnZXRDb24KIH0KIAogLy8gRUNNQSAxNS42LjEKLXN0
YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEJvb2xlYW5Db25zdHJ1Y3RvcihFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK3N0YXRp
YyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEJvb2xlYW5Db25zdHJ1Y3RvcihFeGVjU3RhdGUq
IGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGpzQm9vbGVhbihhcmdzLmF0KDApLnRvQm9vbGVhbihleGVj
KSk7CisgICAgcmV0dXJuIGpzQm9vbGVhbihleGVjLT5hcmd1bWVudCgwKS50b0Jvb2xlYW4oZXhl
YykpOwogfQogCiBDYWxsVHlwZSBCb29sZWFuQ29uc3RydWN0b3I6OmdldENhbGxEYXRhKENhbGxE
YXRhJiBjYWxsRGF0YSkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhblByb3Rv
dHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuUHJv
dG90eXBlLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jv
b2xlYW5Qcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw4ICszMiw4IEBAIG5hbWVz
cGFjZSBKU0MgewogQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChCb29sZWFuUHJvdG90eXBlKTsK
IAogLy8gRnVuY3Rpb25zCi1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJvb2xlYW5Qcm90
b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xp
c3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYm9vbGVhblByb3RvRnVuY1ZhbHVl
T2YoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0
aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJvb2xlYW5Qcm90b0Z1bmNUb1N0cmluZyhFeGVjU3Rh
dGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYm9vbGVhblByb3RvRnVuY1ZhbHVl
T2YoRXhlY1N0YXRlKik7CiAKIC8vIEVDTUEgMTUuNi40CiAKQEAgLTUxLDggKzUxLDkgQEAgQm9v
bGVhblByb3RvdHlwZTo6Qm9vbGVhblByb3RvdHlwZShFeGVjUwogCiAvLyBFQ01BIDE1LjYuNC4y
ICsgMTUuNi40LjMKIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJvb2xlYW5Qcm90b0Z1bmNUb1N0
cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJvb2xlYW5Qcm90b0Z1bmNUb1N0cmlu
ZyhFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0
VGhpc1ZhbHVlKCk7CiAgICAgaWYgKHRoaXNWYWx1ZSA9PSBqc0Jvb2xlYW4oZmFsc2UpKQogICAg
ICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsICJmYWxzZSIpOwogCkBAIC02OSw4
ICs3MCw5IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBib29sZWFuUHJvdG9GdW5jVG8KICAgICBy
ZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsICJ0cnVlIik7CiB9CiAKLUpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBib29sZWFuUHJvdG9GdW5jVmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGJvb2xlYW5Qcm90b0Z1bmNWYWx1ZU9mKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBK
U1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1Zh
bHVlLmlzQm9vbGVhbigpKQogICAgICAgICByZXR1cm4gdGhpc1ZhbHVlOwogCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA2MDM0MSkK
KysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTQsOSArNTQsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogQVNTRVJUX0NMQVNTX0ZJ
VFNfSU5fQ0VMTChEYXRlQ29uc3RydWN0b3IpOwogCi1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGRhdGVQYXJzZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xp
c3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZU5vdyhFeGVjU3RhdGUqLCBK
U09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZGF0ZVVUQyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVBhcnNlKEV4ZWNTdGF0
ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlTm93KEV4ZWNTdGF0ZSopOwor
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlVVRDKEV4ZWNTdGF0ZSopOwogCiBEYXRl
Q29uc3RydWN0b3I6OkRhdGVDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIE5vbk51bGxQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJl
LCBTdHJ1Y3R1cmUqIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLCBEYXRlUHJvdG90eXBlKiBk
YXRlUHJvdG90eXBlKQogICAgIDogSW50ZXJuYWxGdW5jdGlvbigmZXhlYy0+Z2xvYmFsRGF0YSgp
LCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgSWRlbnRpZmllcihleGVjLCBkYXRlUHJvdG90eXBl
LT5jbGFzc0luZm8oKS0+Y2xhc3NOYW1lKSkKQEAgLTEyOCw3ICsxMjgsNyBAQCBDb25zdHJ1Y3RU
eXBlIERhdGVDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RyCiB9CiAKIC8vIEVDTUEgMTUuOS4yCi1zdGF0
aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxEYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY2FsbERhdGUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIHRpbWVfdCBsb2NhbFRpbWUgPSB0
aW1lKDApOwogICAgIHRtIGxvY2FsVE07CkBAIC0xNDcsMzcgKzE0NywzNyBAQCBDYWxsVHlwZSBE
YXRlQ29uc3RydWN0b3I6OmdldENhbGxEYXRhKENhCiAgICAgcmV0dXJuIENhbGxUeXBlSG9zdDsK
IH0KIAotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUGFyc2UoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitzdGF0aWMgSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQYXJzZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0
dXJuIGpzTnVtYmVyKGV4ZWMsIHBhcnNlRGF0ZShleGVjLCBhcmdzLmF0KDApLnRvU3RyaW5nKGV4
ZWMpKSk7CisgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHBhcnNlRGF0ZShleGVjLCBleGVjLT5h
cmd1bWVudCgwKS50b1N0cmluZyhleGVjKSkpOwogfQogCi1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGRhdGVOb3coRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlTm93KEV4ZWNTdGF0
ZSogZXhlYykKIHsKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywganNDdXJyZW50VGltZSgpKTsK
IH0KIAotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlVVRDKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKSAKK3N0YXRpYyBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVVUQyhFeGVjU3RhdGUqIGV4ZWMpIAogewotICAgIGludCBu
ID0gYXJncy5zaXplKCk7Ci0gICAgaWYgKGlzbmFuKGFyZ3MuYXQoMCkudG9OdW1iZXIoZXhlYykp
Ci0gICAgICAgICAgICB8fCBpc25hbihhcmdzLmF0KDEpLnRvTnVtYmVyKGV4ZWMpKQotICAgICAg
ICAgICAgfHwgKG4gPj0gMyAmJiBpc25hbihhcmdzLmF0KDIpLnRvTnVtYmVyKGV4ZWMpKSkKLSAg
ICAgICAgICAgIHx8IChuID49IDQgJiYgaXNuYW4oYXJncy5hdCgzKS50b051bWJlcihleGVjKSkp
Ci0gICAgICAgICAgICB8fCAobiA+PSA1ICYmIGlzbmFuKGFyZ3MuYXQoNCkudG9OdW1iZXIoZXhl
YykpKQotICAgICAgICAgICAgfHwgKG4gPj0gNiAmJiBpc25hbihhcmdzLmF0KDUpLnRvTnVtYmVy
KGV4ZWMpKSkKLSAgICAgICAgICAgIHx8IChuID49IDcgJiYgaXNuYW4oYXJncy5hdCg2KS50b051
bWJlcihleGVjKSkpKQorICAgIGludCBuID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOworICAgIGlm
IChpc25hbihleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVjKSkKKyAgICAgICAgICAgIHx8
IGlzbmFuKGV4ZWMtPmFyZ3VtZW50KDEpLnRvTnVtYmVyKGV4ZWMpKQorICAgICAgICAgICAgfHwg
KG4gPj0gMyAmJiBpc25hbihleGVjLT5hcmd1bWVudCgyKS50b051bWJlcihleGVjKSkpCisgICAg
ICAgICAgICB8fCAobiA+PSA0ICYmIGlzbmFuKGV4ZWMtPmFyZ3VtZW50KDMpLnRvTnVtYmVyKGV4
ZWMpKSkKKyAgICAgICAgICAgIHx8IChuID49IDUgJiYgaXNuYW4oZXhlYy0+YXJndW1lbnQoNCku
dG9OdW1iZXIoZXhlYykpKQorICAgICAgICAgICAgfHwgKG4gPj0gNiAmJiBpc25hbihleGVjLT5h
cmd1bWVudCg1KS50b051bWJlcihleGVjKSkpCisgICAgICAgICAgICB8fCAobiA+PSA3ICYmIGlz
bmFuKGV4ZWMtPmFyZ3VtZW50KDYpLnRvTnVtYmVyKGV4ZWMpKSkpCiAgICAgICAgIHJldHVybiBq
c05hTihleGVjKTsKIAogICAgIEdyZWdvcmlhbkRhdGVUaW1lIHQ7Ci0gICAgaW50IHllYXIgPSBh
cmdzLmF0KDApLnRvSW50MzIoZXhlYyk7CisgICAgaW50IHllYXIgPSBleGVjLT5hcmd1bWVudCgw
KS50b0ludDMyKGV4ZWMpOwogICAgIHQueWVhciA9ICh5ZWFyID49IDAgJiYgeWVhciA8PSA5OSkg
PyB5ZWFyIDogeWVhciAtIDE5MDA7Ci0gICAgdC5tb250aCA9IGFyZ3MuYXQoMSkudG9JbnQzMihl
eGVjKTsKLSAgICB0Lm1vbnRoRGF5ID0gKG4gPj0gMykgPyBhcmdzLmF0KDIpLnRvSW50MzIoZXhl
YykgOiAxOwotICAgIHQuaG91ciA9IGFyZ3MuYXQoMykudG9JbnQzMihleGVjKTsKLSAgICB0Lm1p
bnV0ZSA9IGFyZ3MuYXQoNCkudG9JbnQzMihleGVjKTsKLSAgICB0LnNlY29uZCA9IGFyZ3MuYXQo
NSkudG9JbnQzMihleGVjKTsKLSAgICBkb3VibGUgbXMgPSAobiA+PSA3KSA/IGFyZ3MuYXQoNiku
dG9OdW1iZXIoZXhlYykgOiAwOworICAgIHQubW9udGggPSBleGVjLT5hcmd1bWVudCgxKS50b0lu
dDMyKGV4ZWMpOworICAgIHQubW9udGhEYXkgPSAobiA+PSAzKSA/IGV4ZWMtPmFyZ3VtZW50KDIp
LnRvSW50MzIoZXhlYykgOiAxOworICAgIHQuaG91ciA9IGV4ZWMtPmFyZ3VtZW50KDMpLnRvSW50
MzIoZXhlYyk7CisgICAgdC5taW51dGUgPSBleGVjLT5hcmd1bWVudCg0KS50b0ludDMyKGV4ZWMp
OworICAgIHQuc2Vjb25kID0gZXhlYy0+YXJndW1lbnQoNSkudG9JbnQzMihleGVjKTsKKyAgICBk
b3VibGUgbXMgPSAobiA+PSA3KSA/IGV4ZWMtPmFyZ3VtZW50KDYpLnRvTnVtYmVyKGV4ZWMpIDog
MDsKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgdGltZUNsaXAoZ3JlZ29yaWFuRGF0ZVRpbWVU
b01TKGV4ZWMsIHQsIG1zLCB0cnVlKSkpOwogfQogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0RhdGVQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRGF0ZVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgSmF2YVNjcmlwdENvcmUv
cnVudGltZS9EYXRlUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsNTIgKzczLDUx
IEBAIG5hbWVzcGFjZSBKU0MgewogCiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKERhdGVQcm90
b3R5cGUpOwogCi1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRE
YXRlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3Rh
dGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0RGF5KEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0RnVsbFllYXIoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGRhdGVQcm90b0Z1bmNHZXRIb3VycyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVu
Y0dldE1pbGxpU2Vjb25kcyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldE1p
bnV0ZXMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1z
dGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRNb250aChFeGVjU3Rh
dGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFNlY29uZHMoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGRhdGVQcm90b0Z1bmNHZXRUaW1lKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9G
dW5jR2V0VGltZXpvbmVPZmZzZXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25z
dCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNH
ZXRVVENEYXRlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYp
Owotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VVRDRGF5KEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VVRDRnVsbFllYXIoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENIb3VycyhFeGVjU3RhdGUqLCBKU09iamVj
dCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZGF0ZVByb3RvRnVuY0dldFVUQ01pbGxpc2Vjb25kcyhFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZGF0ZVByb3RvRnVuY0dldFVUQ01pbnV0ZXMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
LCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90
b0Z1bmNHZXRVVENNb250aChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVU
Q1NlY29uZHMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7
Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRZZWFyKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0RGF0ZShFeGVjU3RhdGUqLCBKU09iamVj
dCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZGF0ZVByb3RvRnVuY1NldEZ1bGxZZWFyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJv
dG9GdW5jU2V0SG91cnMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdM
aXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRNaWxs
aVNlY29uZHMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7
Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRNaW51dGVzKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0TW9udGgoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRTZWNvbmRzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRl
UHJvdG9GdW5jU2V0VGltZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFVU
Q0RhdGUoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1z
dGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRVVENGdWxsWWVhcihF
eGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFVUQ0hvdXJzKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0VVRDTWlsbGlzZWNvbmRzKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0VVRDTWludXRlcyhFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZGF0ZVByb3RvRnVuY1NldFVUQ01vbnRoKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9G
dW5jU2V0VVRDU2Vjb25kcyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFll
YXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0
aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb0RhdGVTdHJpbmcoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb0dNVFN0cmluZyhFeGVjU3RhdGUqLCBKU09i
amVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZGF0ZVByb3RvRnVuY1RvTG9jYWxlRGF0ZVN0cmluZyhFeGVjU3RhdGUqLCBKU09iamVj
dCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZGF0ZVByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRl
UHJvdG9GdW5jVG9Mb2NhbGVUaW1lU3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJv
dG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdM
aXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb1RpbWVT
dHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1z
dGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb1VUQ1N0cmluZyhFeGVj
U3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvSVNPU3RyaW5nKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotCi1zdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb0pTT04oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1Zh
bHVlLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQ
cm90b0Z1bmNHZXREYXRlKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBkYXRlUHJvdG9GdW5jR2V0RGF5KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0RnVsbFllYXIoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRIb3VycyhFeGVjU3RhdGUqKTsKK3N0
YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldE1pbGxpU2Vjb25kcyhF
eGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dl
dE1pbnV0ZXMoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQ
cm90b0Z1bmNHZXRNb250aChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZGF0ZVByb3RvRnVuY0dldFNlY29uZHMoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRUaW1lKEV4ZWNTdGF0ZSopOworc3RhdGljIEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VGltZXpvbmVPZmZzZXQoRXhlY1N0
YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENE
YXRlKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9G
dW5jR2V0VVRDRGF5KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBk
YXRlUHJvdG9GdW5jR2V0VVRDRnVsbFllYXIoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENIb3VycyhFeGVjU3RhdGUqKTsKK3N0YXRp
YyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVUQ01pbGxpc2Vjb25kcyhF
eGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dl
dFVUQ01pbnV0ZXMoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRh
dGVQcm90b0Z1bmNHZXRVVENNb250aChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVUQ1NlY29uZHMoRXhlY1N0YXRlKik7CitzdGF0aWMg
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRZZWFyKEV4ZWNTdGF0ZSopOwor
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0RGF0ZShFeGVjU3Rh
dGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldEZ1bGxZ
ZWFyKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9G
dW5jU2V0SG91cnMoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRh
dGVQcm90b0Z1bmNTZXRNaWxsaVNlY29uZHMoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRNaW51dGVzKEV4ZWNTdGF0ZSopOworc3RhdGlj
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0TW9udGgoRXhlY1N0YXRlKik7
CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRTZWNvbmRzKEV4
ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0
VGltZShFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3Rv
RnVuY1NldFVUQ0RhdGUoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGRhdGVQcm90b0Z1bmNTZXRVVENGdWxsWWVhcihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFVUQ0hvdXJzKEV4ZWNTdGF0ZSopOworc3Rh
dGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0VVRDTWlsbGlzZWNvbmRz
KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5j
U2V0VVRDTWludXRlcyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZGF0ZVByb3RvRnVuY1NldFVUQ01vbnRoKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0VVRDU2Vjb25kcyhFeGVjU3RhdGUqKTsKK3N0YXRp
YyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFllYXIoRXhlY1N0YXRlKik7
CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb0RhdGVTdHJpbmco
RXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNU
b0dNVFN0cmluZyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0
ZVByb3RvRnVuY1RvTG9jYWxlRGF0ZVN0cmluZyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKEV4ZWNTdGF0ZSopOwor
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9Mb2NhbGVUaW1lU3Ry
aW5nKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9G
dW5jVG9TdHJpbmcoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRh
dGVQcm90b0Z1bmNUb1RpbWVTdHJpbmcoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb1VUQ1N0cmluZyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvSVNPU3RyaW5nKEV4ZWNTdGF0ZSop
Oworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9KU09OKEV4ZWNT
dGF0ZSopOwogCiB9CiAKQEAgLTE0Niw3ICsxNDUsNyBAQCBzdGF0aWMgQ0ZEYXRlRm9ybWF0dGVy
U3R5bGUgc3R5bGVGcm9tQXJnCiAgICAgcmV0dXJuIGRlZmF1bHRTdHlsZTsKIH0KIAotc3RhdGlj
IEpTQ2VsbCogZm9ybWF0TG9jYWxlRGF0ZShFeGVjU3RhdGUqIGV4ZWMsIERhdGVJbnN0YW5jZSos
IGRvdWJsZSB0aW1lSW5NaWxsaXNlY29uZHMsIExvY2FsZURhdGVUaW1lRm9ybWF0IGZvcm1hdCwg
Y29uc3QgQXJnTGlzdCYgYXJncykKK3N0YXRpYyBKU0NlbGwqIGZvcm1hdExvY2FsZURhdGUoRXhl
Y1N0YXRlKiBleGVjLCBEYXRlSW5zdGFuY2UqLCBkb3VibGUgdGltZUluTWlsbGlzZWNvbmRzLCBM
b2NhbGVEYXRlVGltZUZvcm1hdCBmb3JtYXQpCiB7CiAgICAgQ0ZEYXRlRm9ybWF0dGVyU3R5bGUg
ZGF0ZVN0eWxlID0gKGZvcm1hdCAhPSBMb2NhbGVUaW1lID8ga0NGRGF0ZUZvcm1hdHRlckxvbmdT
dHlsZSA6IGtDRkRhdGVGb3JtYXR0ZXJOb1N0eWxlKTsKICAgICBDRkRhdGVGb3JtYXR0ZXJTdHls
ZSB0aW1lU3R5bGUgPSAoZm9ybWF0ICE9IExvY2FsZURhdGUgPyBrQ0ZEYXRlRm9ybWF0dGVyTG9u
Z1N0eWxlIDoga0NGRGF0ZUZvcm1hdHRlck5vU3R5bGUpOwpAQCAtMTU0LDE2ICsxNTMsMTYgQEAg
c3RhdGljIEpTQ2VsbCogZm9ybWF0TG9jYWxlRGF0ZShFeGVjU3RhdAogICAgIGJvb2wgdXNlQ3Vz
dG9tRm9ybWF0ID0gZmFsc2U7CiAgICAgVVN0cmluZyBjdXN0b21Gb3JtYXRTdHJpbmc7CiAKLSAg
ICBVU3RyaW5nIGFyZzBTdHJpbmcgPSBhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpOwotICAgIGlm
IChhcmcwU3RyaW5nID09ICJjdXN0b20iICYmICFhcmdzLmF0KDEpLmlzVW5kZWZpbmVkKCkpIHsK
KyAgICBVU3RyaW5nIGFyZzBTdHJpbmcgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVj
KTsKKyAgICBpZiAoYXJnMFN0cmluZyA9PSAiY3VzdG9tIiAmJiAhZXhlYy0+YXJndW1lbnQoMSku
aXNVbmRlZmluZWQoKSkgewogICAgICAgICB1c2VDdXN0b21Gb3JtYXQgPSB0cnVlOwotICAgICAg
ICBjdXN0b21Gb3JtYXRTdHJpbmcgPSBhcmdzLmF0KDEpLnRvU3RyaW5nKGV4ZWMpOwotICAgIH0g
ZWxzZSBpZiAoZm9ybWF0ID09IExvY2FsZURhdGVBbmRUaW1lICYmICFhcmdzLmF0KDEpLmlzVW5k
ZWZpbmVkKCkpIHsKKyAgICAgICAgY3VzdG9tRm9ybWF0U3RyaW5nID0gZXhlYy0+YXJndW1lbnQo
MSkudG9TdHJpbmcoZXhlYyk7CisgICAgfSBlbHNlIGlmIChmb3JtYXQgPT0gTG9jYWxlRGF0ZUFu
ZFRpbWUgJiYgIWV4ZWMtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkKCkpIHsKICAgICAgICAgZGF0
ZVN0eWxlID0gc3R5bGVGcm9tQXJnU3RyaW5nKGFyZzBTdHJpbmcsIGRhdGVTdHlsZSk7Ci0gICAg
ICAgIHRpbWVTdHlsZSA9IHN0eWxlRnJvbUFyZ1N0cmluZyhhcmdzLmF0KDEpLnRvU3RyaW5nKGV4
ZWMpLCB0aW1lU3R5bGUpOwotICAgIH0gZWxzZSBpZiAoZm9ybWF0ICE9IExvY2FsZVRpbWUgJiYg
IWFyZ3MuYXQoMCkuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgdGltZVN0eWxlID0gc3R5bGVGcm9t
QXJnU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpLCB0aW1lU3R5bGUpOwor
ICAgIH0gZWxzZSBpZiAoZm9ybWF0ICE9IExvY2FsZVRpbWUgJiYgIWV4ZWMtPmFyZ3VtZW50KDAp
LmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIGRhdGVTdHlsZSA9IHN0eWxlRnJvbUFyZ1N0cmluZyhh
cmcwU3RyaW5nLCBkYXRlU3R5bGUpOwotICAgIGVsc2UgaWYgKGZvcm1hdCAhPSBMb2NhbGVEYXRl
ICYmICFhcmdzLmF0KDApLmlzVW5kZWZpbmVkKCkpCisgICAgZWxzZSBpZiAoZm9ybWF0ICE9IExv
Y2FsZURhdGUgJiYgIWV4ZWMtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHRp
bWVTdHlsZSA9IHN0eWxlRnJvbUFyZ1N0cmluZyhhcmcwU3RyaW5nLCB0aW1lU3R5bGUpOwogCiAg
ICAgQ0ZMb2NhbGVSZWYgbG9jYWxlID0gQ0ZMb2NhbGVDb3B5Q3VycmVudCgpOwpAQCAtMjc0LDcg
KzI3Myw3IEBAIHN0YXRpYyBKU0NlbGwqIGZvcm1hdExvY2FsZURhdGUoRXhlY1N0YXQKICAgICBy
ZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsIHRpbWVidWZmZXIpOwogfQogCi1zdGF0aWMg
SlNDZWxsKiBmb3JtYXRMb2NhbGVEYXRlKEV4ZWNTdGF0ZSogZXhlYywgRGF0ZUluc3RhbmNlKiBk
YXRlT2JqZWN0LCBkb3VibGUsIExvY2FsZURhdGVUaW1lRm9ybWF0IGZvcm1hdCwgY29uc3QgQXJn
TGlzdCYpCitzdGF0aWMgSlNDZWxsKiBmb3JtYXRMb2NhbGVEYXRlKEV4ZWNTdGF0ZSogZXhlYywg
RGF0ZUluc3RhbmNlKiBkYXRlT2JqZWN0LCBkb3VibGUsIExvY2FsZURhdGVUaW1lRm9ybWF0IGZv
cm1hdCkKIHsKICAgICBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0ZVRpbWUg
PSBkYXRlT2JqZWN0LT5ncmVnb3JpYW5EYXRlVGltZShleGVjKTsKICAgICBpZiAoIWdyZWdvcmlh
bkRhdGVUaW1lKQpAQCAtMjg4LDEyICsyODcsMTIgQEAgc3RhdGljIEpTQ2VsbCogZm9ybWF0TG9j
YWxlRGF0ZShFeGVjU3RhdAogLy8gbXMgKHJlcHJlc2VudGluZyBtaWxsaXNlY29uZHMpIGFuZCB0
IChyZXByZXNlbnRpbmcgdGhlIHJlc3Qgb2YgdGhlIGRhdGUgc3RydWN0dXJlKSBhcHByb3ByaWF0
ZWx5LgogLy8KIC8vIEZvcm1hdCBvZiBtZW1iZXIgZnVuY3Rpb246IGYoW2hvdXIsXSBbbWluLF0g
W3NlYyxdIFttc10pCi1zdGF0aWMgYm9vbCBmaWxsU3RydWN0dXJlc1VzaW5nVGltZUFyZ3MoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBpbnQgbWF4QXJncywgZG91YmxlKiBt
cywgR3JlZ29yaWFuRGF0ZVRpbWUqIHQpCitzdGF0aWMgYm9vbCBmaWxsU3RydWN0dXJlc1VzaW5n
VGltZUFyZ3MoRXhlY1N0YXRlKiBleGVjLCBpbnQgbWF4QXJncywgZG91YmxlKiBtcywgR3JlZ29y
aWFuRGF0ZVRpbWUqIHQpCiB7CiAgICAgZG91YmxlIG1pbGxpc2Vjb25kcyA9IDA7CiAgICAgYm9v
bCBvayA9IHRydWU7CiAgICAgaW50IGlkeCA9IDA7Ci0gICAgaW50IG51bUFyZ3MgPSBhcmdzLnNp
emUoKTsKKyAgICBpbnQgbnVtQXJncyA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKICAgICAKICAg
ICAvLyBKUyBhbGxvd3MgZXh0cmEgdHJhaWxpbmcgYXJndW1lbnRzIC0tIGlnbm9yZSB0aGVtCiAg
ICAgaWYgKG51bUFyZ3MgPiBtYXhBcmdzKQpAQCAtMzAyLDE5ICszMDEsMTkgQEAgc3RhdGljIGJv
b2wgZmlsbFN0cnVjdHVyZXNVc2luZ1RpbWVBcmdzKAogICAgIC8vIGhvdXJzCiAgICAgaWYgKG1h
eEFyZ3MgPj0gNCAmJiBpZHggPCBudW1BcmdzKSB7CiAgICAgICAgIHQtPmhvdXIgPSAwOwotICAg
ICAgICBtaWxsaXNlY29uZHMgKz0gYXJncy5hdChpZHgrKykudG9JbnQzMihleGVjLCBvaykgKiBt
c1BlckhvdXI7CisgICAgICAgIG1pbGxpc2Vjb25kcyArPSBleGVjLT5hcmd1bWVudChpZHgrKyku
dG9JbnQzMihleGVjLCBvaykgKiBtc1BlckhvdXI7CiAgICAgfQogCiAgICAgLy8gbWludXRlcwog
ICAgIGlmIChtYXhBcmdzID49IDMgJiYgaWR4IDwgbnVtQXJncyAmJiBvaykgewogICAgICAgICB0
LT5taW51dGUgPSAwOwotICAgICAgICBtaWxsaXNlY29uZHMgKz0gYXJncy5hdChpZHgrKykudG9J
bnQzMihleGVjLCBvaykgKiBtc1Blck1pbnV0ZTsKKyAgICAgICAgbWlsbGlzZWNvbmRzICs9IGV4
ZWMtPmFyZ3VtZW50KGlkeCsrKS50b0ludDMyKGV4ZWMsIG9rKSAqIG1zUGVyTWludXRlOwogICAg
IH0KICAgICAKICAgICAvLyBzZWNvbmRzCiAgICAgaWYgKG1heEFyZ3MgPj0gMiAmJiBpZHggPCBu
dW1BcmdzICYmIG9rKSB7CiAgICAgICAgIHQtPnNlY29uZCA9IDA7Ci0gICAgICAgIG1pbGxpc2Vj
b25kcyArPSBhcmdzLmF0KGlkeCsrKS50b0ludDMyKGV4ZWMsIG9rKSAqIG1zUGVyU2Vjb25kOwor
ICAgICAgICBtaWxsaXNlY29uZHMgKz0gZXhlYy0+YXJndW1lbnQoaWR4KyspLnRvSW50MzIoZXhl
Yywgb2spICogbXNQZXJTZWNvbmQ7CiAgICAgfQogICAgIAogICAgIGlmICghb2spCkBAIC0zMjIs
NyArMzIxLDcgQEAgc3RhdGljIGJvb2wgZmlsbFN0cnVjdHVyZXNVc2luZ1RpbWVBcmdzKAogICAg
ICAgICAKICAgICAvLyBtaWxsaXNlY29uZHMKICAgICBpZiAoaWR4IDwgbnVtQXJncykgewotICAg
ICAgICBkb3VibGUgbWlsbGlzID0gYXJncy5hdChpZHgpLnRvTnVtYmVyKGV4ZWMpOworICAgICAg
ICBkb3VibGUgbWlsbGlzID0gZXhlYy0+YXJndW1lbnQoaWR4KS50b051bWJlcihleGVjKTsKICAg
ICAgICAgb2sgPSBpc2Zpbml0ZShtaWxsaXMpOwogICAgICAgICBtaWxsaXNlY29uZHMgKz0gbWls
bGlzOwogICAgIH0gZWxzZQpAQCAtMzM2LDExICszMzUsMTEgQEAgc3RhdGljIGJvb2wgZmlsbFN0
cnVjdHVyZXNVc2luZ1RpbWVBcmdzKAogLy8gbXMgKHJlcHJlc2VudGluZyBtaWxsaXNlY29uZHMp
IGFuZCB0IChyZXByZXNlbnRpbmcgdGhlIHJlc3Qgb2YgdGhlIGRhdGUgc3RydWN0dXJlKSBhcHBy
b3ByaWF0ZWx5LgogLy8KIC8vIEZvcm1hdCBvZiBtZW1iZXIgZnVuY3Rpb246IGYoW3llYXJzLF0g
W21vbnRocyxdIFtkYXlzXSkKLXN0YXRpYyBib29sIGZpbGxTdHJ1Y3R1cmVzVXNpbmdEYXRlQXJn
cyhFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIGludCBtYXhBcmdzLCBkb3Vi
bGUgKm1zLCBHcmVnb3JpYW5EYXRlVGltZSAqdCkKK3N0YXRpYyBib29sIGZpbGxTdHJ1Y3R1cmVz
VXNpbmdEYXRlQXJncyhFeGVjU3RhdGUgKmV4ZWMsIGludCBtYXhBcmdzLCBkb3VibGUgKm1zLCBH
cmVnb3JpYW5EYXRlVGltZSAqdCkKIHsKICAgICBpbnQgaWR4ID0gMDsKICAgICBib29sIG9rID0g
dHJ1ZTsKLSAgICBpbnQgbnVtQXJncyA9IGFyZ3Muc2l6ZSgpOworICAgIGludCBudW1BcmdzID0g
ZXhlYy0+YXJndW1lbnRDb3VudCgpOwogICAKICAgICAvLyBKUyBhbGxvd3MgZXh0cmEgdHJhaWxp
bmcgYXJndW1lbnRzIC0tIGlnbm9yZSB0aGVtCiAgICAgaWYgKG51bUFyZ3MgPiBtYXhBcmdzKQpA
QCAtMzQ4LDE2ICszNDcsMTYgQEAgc3RhdGljIGJvb2wgZmlsbFN0cnVjdHVyZXNVc2luZ0RhdGVB
cmdzKAogICAKICAgICAvLyB5ZWFycwogICAgIGlmIChtYXhBcmdzID49IDMgJiYgaWR4IDwgbnVt
QXJncykKLSAgICAgICAgdC0+eWVhciA9IGFyZ3MuYXQoaWR4KyspLnRvSW50MzIoZXhlYywgb2sp
IC0gMTkwMDsKKyAgICAgICAgdC0+eWVhciA9IGV4ZWMtPmFyZ3VtZW50KGlkeCsrKS50b0ludDMy
KGV4ZWMsIG9rKSAtIDE5MDA7CiAgICAgCiAgICAgLy8gbW9udGhzCiAgICAgaWYgKG1heEFyZ3Mg
Pj0gMiAmJiBpZHggPCBudW1BcmdzICYmIG9rKSAgIAotICAgICAgICB0LT5tb250aCA9IGFyZ3Mu
YXQoaWR4KyspLnRvSW50MzIoZXhlYywgb2spOworICAgICAgICB0LT5tb250aCA9IGV4ZWMtPmFy
Z3VtZW50KGlkeCsrKS50b0ludDMyKGV4ZWMsIG9rKTsKICAgICAKICAgICAvLyBkYXlzCiAgICAg
aWYgKGlkeCA8IG51bUFyZ3MgJiYgb2spIHsgICAKICAgICAgICAgdC0+bW9udGhEYXkgPSAwOwot
ICAgICAgICAqbXMgKz0gYXJncy5hdChpZHgpLnRvSW50MzIoZXhlYywgb2spICogbXNQZXJEYXk7
CisgICAgICAgICptcyArPSBleGVjLT5hcmd1bWVudChpZHgpLnRvSW50MzIoZXhlYywgb2spICog
bXNQZXJEYXk7CiAgICAgfQogICAgIAogICAgIHJldHVybiBvazsKQEAgLTQzOCw4ICs0MzcsOSBA
QCBib29sIERhdGVQcm90b3R5cGU6OmdldE93blByb3BlcnR5RGVzY3JpCiAKIC8vIEZ1bmN0aW9u
cwogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhl
YykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAg
ICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIApAQCAtNDU1LDggKzQ1NSw5IEBA
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9TdHIKICAgICByZXR1cm4ganNN
YWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCBkYXRlLCAiICIsIHRpbWUpOwogfQogCi1KU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvVVRDU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvVVRDU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKIHsK
KyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAo
IXRoaXNWYWx1ZS5pbmhlcml0cygmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0dXJu
IHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIApAQCAtNDcyLDggKzQ3Myw5IEBAIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9VVEMKICAgICByZXR1cm4ganNNYWtlTm9u
dHJpdmlhbFN0cmluZyhleGVjLCBkYXRlLCAiICIsIHRpbWUpOwogfQogCi1KU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvSVNPU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZGF0ZVByb3RvRnVuY1RvSVNPU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBK
U1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAoIXRoaXNW
YWx1ZS5pbmhlcml0cygmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKICAgICAKQEAgLTQ5MCw4ICs0OTIsOSBAQCBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvSVNPCiAgICAgcmV0dXJuIGpzTm9udHJpdmlh
bFN0cmluZyhleGVjLCBidWZmZXIpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVBy
b3RvRnVuY1RvRGF0ZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0
aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90
b0Z1bmNUb0RhdGVTdHJpbmcoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRz
KCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBU
eXBlRXJyb3IpOwogCkBAIC01MDUsOCArNTA4LDkgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRh
dGVQcm90b0Z1bmNUb0RhdAogICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgZGF0
ZSk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9UaW1lU3RyaW5n
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvVGltZVN0cmluZyhF
eGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhp
c1ZhbHVlKCk7CiAgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkRhdGVJbnN0YW5jZTo6aW5m
bykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKQEAgLTUy
MCw0MyArNTI0LDQ4IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9UaW0K
ICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsIHRpbWUpOwogfQogCi1KU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRl
KiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgp
OwogICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAg
ICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCiAgICAgRGF0ZUluc3Rh
bmNlKiB0aGlzRGF0ZU9iaiA9IGFzRGF0ZUluc3RhbmNlKHRoaXNWYWx1ZSk7IAotICAgIHJldHVy
biBmb3JtYXRMb2NhbGVEYXRlKGV4ZWMsIHRoaXNEYXRlT2JqLCB0aGlzRGF0ZU9iai0+aW50ZXJu
YWxOdW1iZXIoKSwgTG9jYWxlRGF0ZUFuZFRpbWUsIGFyZ3MpOworICAgIHJldHVybiBmb3JtYXRM
b2NhbGVEYXRlKGV4ZWMsIHRoaXNEYXRlT2JqLCB0aGlzRGF0ZU9iai0+aW50ZXJuYWxOdW1iZXIo
KSwgTG9jYWxlRGF0ZUFuZFRpbWUpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVBy
b3RvRnVuY1RvTG9jYWxlRGF0ZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNW
YWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZGF0ZVByb3RvRnVuY1RvTG9jYWxlRGF0ZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiB7Cisg
ICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKCF0
aGlzVmFsdWUuaW5oZXJpdHMoJkRhdGVJbnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKICAgICBEYXRlSW5zdGFuY2UqIHRoaXNEYXRl
T2JqID0gYXNEYXRlSW5zdGFuY2UodGhpc1ZhbHVlKTsgCi0gICAgcmV0dXJuIGZvcm1hdExvY2Fs
ZURhdGUoZXhlYywgdGhpc0RhdGVPYmosIHRoaXNEYXRlT2JqLT5pbnRlcm5hbE51bWJlcigpLCBM
b2NhbGVEYXRlLCBhcmdzKTsKKyAgICByZXR1cm4gZm9ybWF0TG9jYWxlRGF0ZShleGVjLCB0aGlz
RGF0ZU9iaiwgdGhpc0RhdGVPYmotPmludGVybmFsTnVtYmVyKCksIExvY2FsZURhdGUpOwogfQog
Ci1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvTG9jYWxlVGltZVN0cmluZyhF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvTG9jYWxlVGlt
ZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVj
LT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkRhdGVJbnN0
YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7
CiAKICAgICBEYXRlSW5zdGFuY2UqIHRoaXNEYXRlT2JqID0gYXNEYXRlSW5zdGFuY2UodGhpc1Zh
bHVlKTsgCi0gICAgcmV0dXJuIGZvcm1hdExvY2FsZURhdGUoZXhlYywgdGhpc0RhdGVPYmosIHRo
aXNEYXRlT2JqLT5pbnRlcm5hbE51bWJlcigpLCBMb2NhbGVUaW1lLCBhcmdzKTsKKyAgICByZXR1
cm4gZm9ybWF0TG9jYWxlRGF0ZShleGVjLCB0aGlzRGF0ZU9iaiwgdGhpc0RhdGVPYmotPmludGVy
bmFsTnVtYmVyKCksIExvY2FsZVRpbWUpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0
ZVByb3RvRnVuY0dldFRpbWUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhp
c1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9G
dW5jR2V0VGltZShFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBl
eGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkRhdGVJ
bnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJv
cik7CiAKICAgICByZXR1cm4gYXNEYXRlSW5zdGFuY2UodGhpc1ZhbHVlKS0+aW50ZXJuYWxWYWx1
ZSgpOyAKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRGdWxsWWVh
cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRGdWxsWWVhcihF
eGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhp
c1ZhbHVlKCk7CiAgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkRhdGVJbnN0YW5jZTo6aW5m
bykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKQEAgLTU2
OCw4ICs1NzcsOSBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldEZ1CiAg
ICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIDE5MDAgKyBncmVnb3JpYW5EYXRlVGltZS0+eWVhcik7
CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VVRDRnVsbFllYXIo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdM
aXN0JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VVRDRnVsbFllYXIo
RXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRo
aXNWYWx1ZSgpOwogICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6Omlu
Zm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCkBAIC01
ODEsOCArNTkxLDkgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVAog
ICAgIHJldHVybiBqc051bWJlcihleGVjLCAxOTAwICsgZ3JlZ29yaWFuRGF0ZVRpbWUtPnllYXIp
OwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvR01UU3RyaW5nKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlz
dCYpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvR01UU3RyaW5nKEV4ZWNT
dGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFs
dWUoKTsKICAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmRGF0ZUluc3RhbmNlOjppbmZvKSkK
ICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIApAQCAtNTk4LDgg
KzYwOSw5IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9HTVQKICAgICBy
ZXR1cm4ganNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCBkYXRlLCAiICIsIHRpbWUpOwogfQog
Ci1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldE1vbnRoKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldE1vbnRoKEV4ZWNTdGF0ZSogZXhlYykK
IHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBp
ZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIApAQCAtNjExLDggKzYyMyw5IEBAIEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0TW8KICAgICByZXR1cm4ganNOdW1i
ZXIoZXhlYywgZ3JlZ29yaWFuRGF0ZVRpbWUtPm1vbnRoKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENNb250aChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGRhdGVQcm90b0Z1bmNHZXRVVENNb250aChFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNW
YWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKCF0aGlzVmFs
dWUuaW5oZXJpdHMoJkRhdGVJbnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKQEAgLTYyNCw4ICs2MzcsOSBAQCBKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVUCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGdy
ZWdvcmlhbkRhdGVUaW1lLT5tb250aCk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRl
UHJvdG9GdW5jR2V0RGF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlz
VmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1
bmNHZXREYXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4
ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmRGF0ZUlu
c3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9y
KTsKIApAQCAtNjM3LDggKzY1MSw5IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9G
dW5jR2V0RGEKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgZ3JlZ29yaWFuRGF0ZVRpbWUtPm1v
bnRoRGF5KTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENE
YXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3Qg
QXJnTGlzdCYpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVUQ0RhdGUo
RXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRo
aXNWYWx1ZSgpOwogICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6Omlu
Zm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCkBAIC02
NTAsOCArNjY1LDkgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVAog
ICAgIHJldHVybiBqc051bWJlcihleGVjLCBncmVnb3JpYW5EYXRlVGltZS0+bW9udGhEYXkpOwog
fQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldERheShFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXREYXkoRXhlY1N0YXRlKiBleGVjKQog
eworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlm
ICghdGhpc1ZhbHVlLmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCkBAIC02NjMsOCArNjc5LDkgQEAgSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXREYQogICAgIHJldHVybiBqc051bWJl
cihleGVjLCBncmVnb3JpYW5EYXRlVGltZS0+d2Vla0RheSk7CiB9CiAKLUpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VVRDRGF5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
LCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZGF0ZVByb3RvRnVuY0dldFVUQ0RheShFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1
ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKCF0aGlzVmFsdWUu
aW5oZXJpdHMoJkRhdGVJbnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KGV4ZWMsIFR5cGVFcnJvcik7CiAKQEAgLTY3Niw4ICs2OTMsOSBAQCBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZGF0ZVByb3RvRnVuY0dldFVUCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGdyZWdv
cmlhbkRhdGVUaW1lLT53ZWVrRGF5KTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQ
cm90b0Z1bmNHZXRIb3VycyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlz
VmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1
bmNHZXRIb3VycyhFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBl
eGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkRhdGVJ
bnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJv
cik7CiAKQEAgLTY4OSw4ICs3MDcsOSBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3Rv
RnVuY0dldEhvCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGdyZWdvcmlhbkRhdGVUaW1lLT5o
b3VyKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENIb3Vy
cyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENIb3VycyhF
eGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhp
c1ZhbHVlKCk7CiAgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkRhdGVJbnN0YW5jZTo6aW5m
bykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKQEAgLTcw
Miw4ICs3MjEsOSBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVUCiAg
ICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGdyZWdvcmlhbkRhdGVUaW1lLT5ob3VyKTsKIH0KIAot
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRNaW51dGVzKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldE1pbnV0ZXMoRXhlY1N0YXRlKiBleGVj
KQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAg
IGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCkBAIC03MTUsOCArNzM1LDkgQEAg
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRNaQogICAgIHJldHVybiBqc051
bWJlcihleGVjLCBncmVnb3JpYW5EYXRlVGltZS0+bWludXRlKTsKIH0KIAotSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENNaW51dGVzKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVUQ01pbnV0ZXMoRXhlY1N0YXRlKiBleGVjKQogewor
ICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICgh
dGhpc1ZhbHVlLmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCkBAIC03MjgsOCArNzQ5LDkgQEAgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVAogICAgIHJldHVybiBqc051bWJlcihl
eGVjLCBncmVnb3JpYW5EYXRlVGltZS0+bWludXRlKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGRhdGVQcm90b0Z1bmNHZXRTZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBK
U1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZGF0ZVByb3RvRnVuY0dldFNlY29uZHMoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUg
dGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICghdGhpc1ZhbHVlLmlu
aGVyaXRzKCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihl
eGVjLCBUeXBlRXJyb3IpOwogCkBAIC03NDEsOCArNzYzLDkgQEAgSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGRhdGVQcm90b0Z1bmNHZXRTZQogICAgIHJldHVybiBqc051bWJlcihleGVjLCBncmVnb3Jp
YW5EYXRlVGltZS0+c2Vjb25kKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90
b0Z1bmNHZXRVVENTZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRo
aXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3Rv
RnVuY0dldFVUQ1NlY29uZHMoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRz
KCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBU
eXBlRXJyb3IpOwogCkBAIC03NTQsOCArNzc3LDkgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRh
dGVQcm90b0Z1bmNHZXRVVAogICAgIHJldHVybiBqc051bWJlcihleGVjLCBncmVnb3JpYW5EYXRl
VGltZS0+c2Vjb25kKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNH
ZXRNaWxsaVNlY29uZHMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1Zh
bHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5j
R2V0TWlsbGlTZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1
ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygm
RGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlw
ZUVycm9yKTsKIApAQCAtNzY5LDggKzc5Myw5IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRl
UHJvdG9GdW5jR2V0TWkKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgbXMpOwogfQogCi1KU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVUQ01pbGxpc2Vjb25kcyhFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENNaWxsaXNlY29uZHMoRXhl
Y1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNW
YWx1ZSgpOwogICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6OmluZm8p
KQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCkBAIC03ODQs
OCArODA5LDkgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVAogICAg
IHJldHVybiBqc051bWJlcihleGVjLCBtcyk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBk
YXRlUHJvdG9GdW5jR2V0VGltZXpvbmVPZmZzZXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBkYXRlUHJvdG9GdW5jR2V0VGltZXpvbmVPZmZzZXQoRXhlY1N0YXRlKiBleGVjKQogeworICAg
IEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICghdGhp
c1ZhbHVlLmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhy
b3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCkBAIC03OTcsMjggKzgyMywzMCBAQCBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFRpCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4
ZWMsIC1ncmVnb3JpYW5EYXRlVGltZS0+dXRjT2Zmc2V0IC8gbWludXRlc1BlckhvdXIpOwogfQog
Ci1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFRpbWUoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRUaW1lKEV4ZWNTdGF0ZSogZXhl
YykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAg
ICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAogICAgIERhdGVJbnN0YW5jZSog
dGhpc0RhdGVPYmogPSBhc0RhdGVJbnN0YW5jZSh0aGlzVmFsdWUpOyAKIAotICAgIGRvdWJsZSBt
aWxsaSA9IHRpbWVDbGlwKGFyZ3MuYXQoMCkudG9OdW1iZXIoZXhlYykpOworICAgIGRvdWJsZSBt
aWxsaSA9IHRpbWVDbGlwKGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKTsKICAgICBK
U1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGV4ZWMsIG1pbGxpKTsKICAgICB0aGlzRGF0ZU9iai0+
c2V0SW50ZXJuYWxWYWx1ZShyZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRp
YyBKU1ZhbHVlIHNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIGludCBudW1BcmdzVG9Vc2UsIGJvb2wg
aW5wdXRJc1VUQykKK3N0YXRpYyBKU1ZhbHVlIHNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKEV4ZWNT
dGF0ZSogZXhlYywgaW50IG51bUFyZ3NUb1VzZSwgYm9vbCBpbnB1dElzVVRDKQogeworICAgIEpT
VmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICghdGhpc1Zh
bHVlLmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dF
cnJvcihleGVjLCBUeXBlRXJyb3IpOwogCiAgICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9
IGFzRGF0ZUluc3RhbmNlKHRoaXNWYWx1ZSk7CiAgICAgZG91YmxlIG1pbGxpID0gdGhpc0RhdGVP
YmotPmludGVybmFsTnVtYmVyKCk7CiAgICAgCi0gICAgaWYgKGFyZ3MuaXNFbXB0eSgpIHx8IGlz
bmFuKG1pbGxpKSkgeworICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpIHx8IGlzbmFuKG1p
bGxpKSkgewogICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTmFOKGV4ZWMpOwogICAgICAgICB0
aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShyZXN1bHQpOwogICAgICAgICByZXR1cm4gcmVz
dWx0OwpAQCAtODM1LDcgKzg2Myw3IEBAIHN0YXRpYyBKU1ZhbHVlIHNldE5ld1ZhbHVlRnJvbVRp
bWVBcmdzKEUKIAogICAgIEdyZWdvcmlhbkRhdGVUaW1lIGdyZWdvcmlhbkRhdGVUaW1lOwogICAg
IGdyZWdvcmlhbkRhdGVUaW1lLmNvcHlGcm9tKCpvdGhlcik7Ci0gICAgaWYgKCFmaWxsU3RydWN0
dXJlc1VzaW5nVGltZUFyZ3MoZXhlYywgYXJncywgbnVtQXJnc1RvVXNlLCAmbXMsICZncmVnb3Jp
YW5EYXRlVGltZSkpIHsKKyAgICBpZiAoIWZpbGxTdHJ1Y3R1cmVzVXNpbmdUaW1lQXJncyhleGVj
LCBudW1BcmdzVG9Vc2UsICZtcywgJmdyZWdvcmlhbkRhdGVUaW1lKSkgewogICAgICAgICBKU1Zh
bHVlIHJlc3VsdCA9IGpzTmFOKGV4ZWMpOwogICAgICAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJu
YWxWYWx1ZShyZXN1bHQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtODQ2LDEzICs4NzQs
MTQgQEAgc3RhdGljIEpTVmFsdWUgc2V0TmV3VmFsdWVGcm9tVGltZUFyZ3MoRQogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlIHNldE5ld1ZhbHVlRnJvbURhdGVBcmdzKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIGlu
dCBudW1BcmdzVG9Vc2UsIGJvb2wgaW5wdXRJc1VUQykKK3N0YXRpYyBKU1ZhbHVlIHNldE5ld1Zh
bHVlRnJvbURhdGVBcmdzKEV4ZWNTdGF0ZSogZXhlYywgaW50IG51bUFyZ3NUb1VzZSwgYm9vbCBp
bnB1dElzVVRDKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1
ZSgpOwogICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6OmluZm8pKQog
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCiAgICAgRGF0ZUlu
c3RhbmNlKiB0aGlzRGF0ZU9iaiA9IGFzRGF0ZUluc3RhbmNlKHRoaXNWYWx1ZSk7Ci0gICAgaWYg
KGFyZ3MuaXNFbXB0eSgpKSB7CisgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpIHsKICAg
ICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc05hTihleGVjKTsKICAgICAgICAgdGhpc0RhdGVPYmot
PnNldEludGVybmFsVmFsdWUocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTg3
NCw3ICs5MDMsNyBAQCBzdGF0aWMgSlNWYWx1ZSBzZXROZXdWYWx1ZUZyb21EYXRlQXJncyhFCiAg
ICAgICAgIGdyZWdvcmlhbkRhdGVUaW1lLmNvcHlGcm9tKCpvdGhlcik7CiAgICAgfQogICAgIAot
ICAgIGlmICghZmlsbFN0cnVjdHVyZXNVc2luZ0RhdGVBcmdzKGV4ZWMsIGFyZ3MsIG51bUFyZ3NU
b1VzZSwgJm1zLCAmZ3JlZ29yaWFuRGF0ZVRpbWUpKSB7CisgICAgaWYgKCFmaWxsU3RydWN0dXJl
c1VzaW5nRGF0ZUFyZ3MoZXhlYywgbnVtQXJnc1RvVXNlLCAmbXMsICZncmVnb3JpYW5EYXRlVGlt
ZSkpIHsKICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc05hTihleGVjKTsKICAgICAgICAgdGhp
c0RhdGVPYmotPnNldEludGVybmFsVmFsdWUocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKQEAgLTg4NSw5NyArOTE0LDk4IEBAIHN0YXRpYyBKU1ZhbHVlIHNldE5ld1ZhbHVlRnJvbURh
dGVBcmdzKEUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZGF0ZVByb3RvRnVuY1NldE1pbGxpU2Vjb25kcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
SlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZGF0ZVByb3RvRnVuY1NldE1pbGxpU2Vjb25kcyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgY29uc3QgYm9vbCBpbnB1dElzVVRDID0gZmFsc2U7Ci0gICAgcmV0dXJuIHNldE5ld1ZhbHVl
RnJvbVRpbWVBcmdzKGV4ZWMsIHRoaXNWYWx1ZSwgYXJncywgMSwgaW5wdXRJc1VUQyk7CisgICAg
cmV0dXJuIHNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKGV4ZWMsIDEsIGlucHV0SXNVVEMpOwogfQog
Ci1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFVUQ01pbGxpc2Vjb25kcyhF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFVUQ01pbGxp
c2Vjb25kcyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgY29uc3QgYm9vbCBpbnB1dElzVVRDID0g
dHJ1ZTsKLSAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tVGltZUFyZ3MoZXhlYywgdGhpc1ZhbHVl
LCBhcmdzLCAxLCBpbnB1dElzVVRDKTsKKyAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tVGltZUFy
Z3MoZXhlYywgMSwgaW5wdXRJc1VUQyk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRl
UHJvdG9GdW5jU2V0U2Vjb25kcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0
aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0
ZVByb3RvRnVuY1NldFNlY29uZHMoRXhlY1N0YXRlKiBleGVjKQogewogICAgIGNvbnN0IGJvb2wg
aW5wdXRJc1VUQyA9IGZhbHNlOwotICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21UaW1lQXJncyhl
eGVjLCB0aGlzVmFsdWUsIGFyZ3MsIDIsIGlucHV0SXNVVEMpOworICAgIHJldHVybiBzZXROZXdW
YWx1ZUZyb21UaW1lQXJncyhleGVjLCAyLCBpbnB1dElzVVRDKTsKIH0KIAotSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRVVENTZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0VVRDU2Vjb25kcyhFeGVjU3RhdGUqIGV4ZWMp
CiB7CiAgICAgY29uc3QgYm9vbCBpbnB1dElzVVRDID0gdHJ1ZTsKLSAgICByZXR1cm4gc2V0TmV3
VmFsdWVGcm9tVGltZUFyZ3MoZXhlYywgdGhpc1ZhbHVlLCBhcmdzLCAyLCBpbnB1dElzVVRDKTsK
KyAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tVGltZUFyZ3MoZXhlYywgMiwgaW5wdXRJc1VUQyk7
CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0TWludXRlcyhFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldE1pbnV0ZXMoRXhl
Y1N0YXRlKiBleGVjKQogewogICAgIGNvbnN0IGJvb2wgaW5wdXRJc1VUQyA9IGZhbHNlOwotICAg
IHJldHVybiBzZXROZXdWYWx1ZUZyb21UaW1lQXJncyhleGVjLCB0aGlzVmFsdWUsIGFyZ3MsIDMs
IGlucHV0SXNVVEMpOworICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21UaW1lQXJncyhleGVjLCAz
LCBpbnB1dElzVVRDKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNT
ZXRVVENNaW51dGVzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9G
dW5jU2V0VVRDTWludXRlcyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgY29uc3QgYm9vbCBpbnB1
dElzVVRDID0gdHJ1ZTsKLSAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tVGltZUFyZ3MoZXhlYywg
dGhpc1ZhbHVlLCBhcmdzLCAzLCBpbnB1dElzVVRDKTsKKyAgICByZXR1cm4gc2V0TmV3VmFsdWVG
cm9tVGltZUFyZ3MoZXhlYywgMywgaW5wdXRJc1VUQyk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBkYXRlUHJvdG9GdW5jU2V0SG91cnMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpT
VmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGRhdGVQcm90b0Z1bmNTZXRIb3VycyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgY29uc3Qg
Ym9vbCBpbnB1dElzVVRDID0gZmFsc2U7Ci0gICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbVRpbWVB
cmdzKGV4ZWMsIHRoaXNWYWx1ZSwgYXJncywgNCwgaW5wdXRJc1VUQyk7CisgICAgcmV0dXJuIHNl
dE5ld1ZhbHVlRnJvbVRpbWVBcmdzKGV4ZWMsIDQsIGlucHV0SXNVVEMpOwogfQogCi1KU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFVUQ0hvdXJzKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0VVRDSG91cnMoRXhlY1N0YXRlKiBleGVj
KQogewogICAgIGNvbnN0IGJvb2wgaW5wdXRJc1VUQyA9IHRydWU7Ci0gICAgcmV0dXJuIHNldE5l
d1ZhbHVlRnJvbVRpbWVBcmdzKGV4ZWMsIHRoaXNWYWx1ZSwgYXJncywgNCwgaW5wdXRJc1VUQyk7
CisgICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKGV4ZWMsIDQsIGlucHV0SXNVVEMp
OwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldERhdGUoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXREYXRlKEV4ZWNTdGF0
ZSogZXhlYykKIHsKICAgICBjb25zdCBib29sIGlucHV0SXNVVEMgPSBmYWxzZTsKLSAgICByZXR1
cm4gc2V0TmV3VmFsdWVGcm9tRGF0ZUFyZ3MoZXhlYywgdGhpc1ZhbHVlLCBhcmdzLCAxLCBpbnB1
dElzVVRDKTsKKyAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tRGF0ZUFyZ3MoZXhlYywgMSwgaW5w
dXRJc1VUQyk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0VVRD
RGF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFVU
Q0RhdGUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIGNvbnN0IGJvb2wgaW5wdXRJc1VUQyA9IHRy
dWU7Ci0gICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbURhdGVBcmdzKGV4ZWMsIHRoaXNWYWx1ZSwg
YXJncywgMSwgaW5wdXRJc1VUQyk7CisgICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbURhdGVBcmdz
KGV4ZWMsIDEsIGlucHV0SXNVVEMpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVBy
b3RvRnVuY1NldE1vbnRoKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJv
dG9GdW5jU2V0TW9udGgoRXhlY1N0YXRlKiBleGVjKQogewogICAgIGNvbnN0IGJvb2wgaW5wdXRJ
c1VUQyA9IGZhbHNlOwotICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21EYXRlQXJncyhleGVjLCB0
aGlzVmFsdWUsIGFyZ3MsIDIsIGlucHV0SXNVVEMpOworICAgIHJldHVybiBzZXROZXdWYWx1ZUZy
b21EYXRlQXJncyhleGVjLCAyLCBpbnB1dElzVVRDKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGRhdGVQcm90b0Z1bmNTZXRVVENNb250aChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
SlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZGF0ZVByb3RvRnVuY1NldFVUQ01vbnRoKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBj
b25zdCBib29sIGlucHV0SXNVVEMgPSB0cnVlOwotICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21E
YXRlQXJncyhleGVjLCB0aGlzVmFsdWUsIGFyZ3MsIDIsIGlucHV0SXNVVEMpOworICAgIHJldHVy
biBzZXROZXdWYWx1ZUZyb21EYXRlQXJncyhleGVjLCAyLCBpbnB1dElzVVRDKTsKIH0KIAotSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRGdWxsWWVhcihFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldEZ1bGxZZWFyKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBjb25zdCBib29sIGlucHV0SXNVVEMgPSBmYWxzZTsKLSAgICByZXR1cm4g
c2V0TmV3VmFsdWVGcm9tRGF0ZUFyZ3MoZXhlYywgdGhpc1ZhbHVlLCBhcmdzLCAzLCBpbnB1dElz
VVRDKTsKKyAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tRGF0ZUFyZ3MoZXhlYywgMywgaW5wdXRJ
c1VUQyk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0VVRDRnVs
bFllYXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRV
VENGdWxsWWVhcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgY29uc3QgYm9vbCBpbnB1dElzVVRD
ID0gdHJ1ZTsKLSAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tRGF0ZUFyZ3MoZXhlYywgdGhpc1Zh
bHVlLCBhcmdzLCAzLCBpbnB1dElzVVRDKTsKKyAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tRGF0
ZUFyZ3MoZXhlYywgMywgaW5wdXRJc1VUQyk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBk
YXRlUHJvdG9GdW5jU2V0WWVhcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0
aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0
ZVByb3RvRnVuY1NldFllYXIoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRz
KCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBU
eXBlRXJyb3IpOwogCiAgICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9IGFzRGF0ZUluc3Rh
bmNlKHRoaXNWYWx1ZSk7ICAgICAKLSAgICBpZiAoYXJncy5pc0VtcHR5KCkpIHsgCisgICAgaWYg
KCFleGVjLT5hcmd1bWVudENvdW50KCkpIHsgCiAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNO
YU4oZXhlYyk7CiAgICAgICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKHJlc3VsdCk7
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC05OTcsNyArMTAyNyw3IEBAIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0WWUKICAgICB9CiAgICAgCiAgICAgYm9vbCBvayA9
IHRydWU7Ci0gICAgaW50MzJfdCB5ZWFyID0gYXJncy5hdCgwKS50b0ludDMyKGV4ZWMsIG9rKTsK
KyAgICBpbnQzMl90IHllYXIgPSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMsIG9rKTsK
ICAgICBpZiAoIW9rKSB7CiAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOYU4oZXhlYyk7CiAg
ICAgICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKHJlc3VsdCk7CkBAIC0xMDEwLDgg
KzEwNDAsOSBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFllCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNH
ZXRZZWFyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFllYXIo
RXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRo
aXNWYWx1ZSgpOwogICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6Omlu
Zm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCkBAIC0x
MDI1LDggKzEwNTYsOSBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFll
CiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGdyZWdvcmlhbkRhdGVUaW1lLT55ZWFyKTsKIH0K
IAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb0pTT04oRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9KU09OKEV4ZWNTdGF0ZSogZXhlYykKIHsK
KyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBKU09i
amVjdCogb2JqZWN0ID0gdGhpc1ZhbHVlLnRvVGhpc09iamVjdChleGVjKTsKICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKSW5kZXg6IEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gNjAzNDEp
CisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NywxMCArNTcsOSBAQCBDb25zdHJ1Y3RUeXBlIEVycm9yQ29uc3RydWN0b3I6
OmdldENvbnN0CiAgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OwogfQogCi0vLyBFQ01BIDE1
LjkuMgotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsRXJyb3JDb25zdHJ1Y3RvcihF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykK
K3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEVycm9yQ29uc3RydWN0b3IoRXhlY1N0
YXRlKiBleGVjKQogewotICAgIC8vICJFcnJvcigpIiBnaXZlcyB0aGUgc2FtZXMgcmVzdWx0IGFz
ICJuZXcgRXJyb3IoKSIKKyAgICBBcmdMaXN0IGFyZ3MoZXhlYyk7CiAgICAgcmV0dXJuIGNvbnN0
cnVjdEVycm9yKGV4ZWMsIGFyZ3MpOwogfQogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Vycm9yUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Vycm9yUHJvdG90eXBlLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChFcnJvclByb3Rv
dHlwZSk7CiAKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZXJyb3JQcm90b0Z1bmNUb1N0
cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0
YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZXJyb3JQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3Rh
dGUqKTsKIAogLy8gRUNNQSAxNS45LjQKIEVycm9yUHJvdG90eXBlOjpFcnJvclByb3RvdHlwZShF
eGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIE5vbk51bGxQYXNz
UmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZUZ1bmN0aW9u
U3RydWN0dXJlKQpAQCAtNDYsOSArNDYsOSBAQCBFcnJvclByb3RvdHlwZTo6RXJyb3JQcm90b3R5
cGUoRXhlY1N0YXRlCiAgICAgcHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbihleGVj
LCBuZXcgKGV4ZWMpIE5hdGl2ZUZ1bmN0aW9uV3JhcHBlcihleGVjLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLCAwLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9TdHJp
bmcsIGVycm9yUHJvdG9GdW5jVG9TdHJpbmcpLCBEb250RW51bSk7CiB9CiAKLUpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBlcnJvclByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZXJyb3JQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNP
YmplY3QqIHRoaXNPYmogPSB0aGlzVmFsdWUudG9UaGlzT2JqZWN0KGV4ZWMpOworICAgIEpTT2Jq
ZWN0KiB0aGlzT2JqID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpLnRvVGhpc09iamVjdChleGVjKTsK
ICAgICBKU1ZhbHVlIG5hbWUgPSB0aGlzT2JqLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1l
cygpLm5hbWUpOwogICAgIEpTVmFsdWUgbWVzc2FnZSA9IHRoaXNPYmotPmdldChleGVjLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkubWVzc2FnZSk7CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
cnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01NSw4ICs1NSw5IEBAIENvbnN0cnVjdFR5cGUgRnVuY3Rpb25Db25zdHJ1Y3Rvcjo6Z2V0
Q28KICAgICByZXR1cm4gQ29uc3RydWN0VHlwZUhvc3Q7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY2FsbEZ1bmN0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNhbGxGdW5jdGlvbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAg
ICBBcmdMaXN0IGFyZ3MoZXhlYyk7CiAgICAgcmV0dXJuIGNvbnN0cnVjdEZ1bmN0aW9uKGV4ZWMs
IGFyZ3MpOwogfQogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90
eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJv
dG90eXBlLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1
bmN0aW9uUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsOSArMzQsOSBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChGdW5jdGlvblByb3RvdHlw
ZSk7CiAKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Qcm90b0Z1bmNUb1N0
cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0
YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Qcm90b0Z1bmNBcHBseShFeGVjU3Rh
dGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Qcm90b0Z1bmNDYWxsKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvblByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByb3RvRnVuY0FwcGx5KEV4ZWNTdGF0ZSopOworc3RhdGlj
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByb3RvRnVuY0NhbGwoRXhlY1N0YXRlKik7
CiAKIEZ1bmN0aW9uUHJvdG90eXBlOjpGdW5jdGlvblByb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIE5vbk51bGxQYXNzUmVmUHRyPFN0cnVjdHVy
ZT4gc3RydWN0dXJlKQogICAgIDogSW50ZXJuYWxGdW5jdGlvbigmZXhlYy0+Z2xvYmFsRGF0YSgp
LCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLm51bGxJZGVu
dGlmaWVyKQpAQCAtNTMsNyArNTMsNyBAQCB2b2lkIEZ1bmN0aW9uUHJvdG90eXBlOjphZGRGdW5j
dGlvblByb3BlCiAgICAgcHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbihleGVjLCAq
Y2FsbEZ1bmN0aW9uLCBEb250RW51bSk7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY2FsbEZ1bmN0aW9uUHJvdG90eXBlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxGdW5jdGlv
blByb3RvdHlwZShFeGVjU3RhdGUqKQogewogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQpA
QCAtODMsOCArODMsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaW5zZXJ0U2VtaWNvbG9uSWZOZWVk
CiAgICAgfQogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Qcm90b0Z1bmNUb1N0
cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJvdG9GdW5jVG9TdHJp
bmcoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9z
dFRoaXNWYWx1ZSgpOwogICAgIGlmICh0aGlzVmFsdWUuaW5oZXJpdHMoJkpTRnVuY3Rpb246Omlu
Zm8pKSB7CiAgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gYXNGdW5jdGlvbih0aGlzVmFs
dWUpOwogICAgICAgICBpZiAoZnVuY3Rpb24tPmlzSG9zdEZ1bmN0aW9uKCkpCkBAIC0xMDMsMTQg
KzEwNCwxNSBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Qcm90b0Z1bmNUCiAgICAg
cmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uUHJvdG9GdW5jQXBwbHkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uUHJvdG9GdW5jQXBwbHkoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpT
VmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIENhbGxEYXRhIGNh
bGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gdGhpc1ZhbHVlLmdldENhbGxEYXRhKGNh
bGxEYXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKQogICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCi0gICAgSlNWYWx1ZSBhcnJheSA9IGFy
Z3MuYXQoMSk7CisgICAgSlNWYWx1ZSBhcnJheSA9IGV4ZWMtPmFyZ3VtZW50KDEpOwogCiAgICAg
TWFya2VkQXJndW1lbnRCdWZmZXIgYXBwbHlBcmdzOwogICAgIGlmICghYXJyYXkuaXNVbmRlZmlu
ZWRPck51bGwoKSkgewpAQCAtMTI4LDE5ICsxMzAsMjEgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uUHJvdG9GdW5jQQogICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywg
VHlwZUVycm9yKTsKICAgICB9CiAKLSAgICByZXR1cm4gY2FsbChleGVjLCB0aGlzVmFsdWUsIGNh
bGxUeXBlLCBjYWxsRGF0YSwgYXJncy5hdCgwKSwgYXBwbHlBcmdzKTsKKyAgICByZXR1cm4gY2Fs
bChleGVjLCB0aGlzVmFsdWUsIGNhbGxUeXBlLCBjYWxsRGF0YSwgZXhlYy0+YXJndW1lbnQoMCks
IGFwcGx5QXJncyk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByb3RvRnVu
Y0NhbGwoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJvdG9GdW5j
Q2FsbChFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5o
b3N0VGhpc1ZhbHVlKCk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2Fs
bFR5cGUgPSB0aGlzVmFsdWUuZ2V0Q2FsbERhdGEoY2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlw
ZSA9PSBDYWxsVHlwZU5vbmUpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVF
cnJvcik7CiAKKyAgICBBcmdMaXN0IGFyZ3MoZXhlYyk7CiAgICAgQXJnTGlzdCBjYWxsQXJnczsK
ICAgICBhcmdzLmdldFNsaWNlKDEsIGNhbGxBcmdzKTsKLSAgICByZXR1cm4gY2FsbChleGVjLCB0
aGlzVmFsdWUsIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXJncy5hdCgwKSwgY2FsbEFyZ3MpOworICAg
IHJldHVybiBjYWxsKGV4ZWMsIHRoaXNWYWx1ZSwgY2FsbFR5cGUsIGNhbGxEYXRhLCBleGVjLT5h
cmd1bWVudCgwKSwgY2FsbEFyZ3MpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3Bw
CShyZXZpc2lvbiA2MDM0MSkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3RGdW5jdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw5ICs1MSw5IEBAIHVzaW5nIG5h
bWVzcGFjZSBVbmljb2RlOwogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RhdGljIEpTVmFsdWUgZW5j
b2RlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncywgY29uc3QgY2hhciogZG9O
b3RFc2NhcGUpCitzdGF0aWMgSlNWYWx1ZSBlbmNvZGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBj
aGFyKiBkb05vdEVzY2FwZSkKIHsKLSAgICBVU3RyaW5nIHN0ciA9IGFyZ3MuYXQoMCkudG9TdHJp
bmcoZXhlYyk7CisgICAgVVN0cmluZyBzdHIgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhl
eGVjKTsKICAgICBDU3RyaW5nIGNzdHIgPSBzdHIuVVRGOFN0cmluZyh0cnVlKTsKICAgICBpZiAo
IWNzdHIuZGF0YSgpKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBVUklFcnJvciwg
IlN0cmluZyBjb250YWluZWQgYW4gaWxsZWdhbCBVVEYtMTYgc2VxdWVuY2UuIik7CkBAIC03Mywx
MCArNzMsMTAgQEAgc3RhdGljIEpTVmFsdWUgZW5jb2RlKEV4ZWNTdGF0ZSogZXhlYywgYwogICAg
IHJldHVybiBidWlsZGVyLmJ1aWxkKGV4ZWMpOwogfQogCi1zdGF0aWMgSlNWYWx1ZSBkZWNvZGUo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBjb25zdCBjaGFyKiBkb05vdFVu
ZXNjYXBlLCBib29sIHN0cmljdCkKK3N0YXRpYyBKU1ZhbHVlIGRlY29kZShFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IGNoYXIqIGRvTm90VW5lc2NhcGUsIGJvb2wgc3RyaWN0KQogewogICAgIEpTU3Ry
aW5nQnVpbGRlciBidWlsZGVyOwotICAgIFVTdHJpbmcgc3RyID0gYXJncy5hdCgwKS50b1N0cmlu
ZyhleGVjKTsKKyAgICBVU3RyaW5nIHN0ciA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4
ZWMpOwogICAgIGludCBrID0gMDsKICAgICBpbnQgbGVuID0gc3RyLnNpemUoKTsKICAgICBjb25z
dCBVQ2hhciogZCA9IHN0ci5kYXRhKCk7CkBAIC0yNzIsMTQgKzI3MiwxNCBAQCBzdGF0aWMgZG91
YmxlIHBhcnNlRmxvYXQoY29uc3QgVVN0cmluZyYgCiAgICAgcmV0dXJuIHMudG9Eb3VibGUodHJ1
ZSAvKnRvbGVyYW50Ki8sIGZhbHNlIC8qIE5hTiBmb3IgZW1wdHkgc3RyaW5nICovKTsKIH0KIAot
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNFdmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIGZ1bmN0aW9uLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRXZhbChFeGVjU3RhdGUqIGV4ZWMpCiB7
Ci0gICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSB0aGlzVmFsdWUudG9UaGlzT2JqZWN0KGV4ZWMp
OworICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpLnRvVGhp
c09iamVjdChleGVjKTsKICAgICBKU09iamVjdCogdW53cmFwcGVkT2JqZWN0ID0gdGhpc09iamVj
dC0+dW53cmFwcGVkT2JqZWN0KCk7Ci0gICAgaWYgKCF1bndyYXBwZWRPYmplY3QtPmlzR2xvYmFs
T2JqZWN0KCkgfHwgc3RhdGljX2Nhc3Q8SlNHbG9iYWxPYmplY3QqPih1bndyYXBwZWRPYmplY3Qp
LT5ldmFsRnVuY3Rpb24oKSAhPSBmdW5jdGlvbikKKyAgICBpZiAoIXVud3JhcHBlZE9iamVjdC0+
aXNHbG9iYWxPYmplY3QoKSB8fCBzdGF0aWNfY2FzdDxKU0dsb2JhbE9iamVjdCo+KHVud3JhcHBl
ZE9iamVjdCktPmV2YWxGdW5jdGlvbigpICE9IGV4ZWMtPmNhbGxlZSgpKQogICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcihleGVjLCBFdmFsRXJyb3IsICJUaGUgXCJ0aGlzXCIgdmFsdWUgcGFzc2Vk
IHRvIGV2YWwgbXVzdCBiZSB0aGUgZ2xvYmFsIG9iamVjdCBmcm9tIHdoaWNoIGV2YWwgb3JpZ2lu
YXRlZCIpOwogCi0gICAgSlNWYWx1ZSB4ID0gYXJncy5hdCgwKTsKKyAgICBKU1ZhbHVlIHggPSBl
eGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoIXguaXNTdHJpbmcoKSkKICAgICAgICAgcmV0dXJu
IHg7CiAKQEAgLTI5NywxMCArMjk3LDEwIEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxG
dW5jRXZhbChFeGUKICAgICByZXR1cm4gZXhlYy0+aW50ZXJwcmV0ZXIoKS0+ZXhlY3V0ZShldmFs
LmdldCgpLCBleGVjLCB0aGlzT2JqZWN0LCBzdGF0aWNfY2FzdDxKU0dsb2JhbE9iamVjdCo+KHVu
d3JhcHBlZE9iamVjdCktPmdsb2JhbFNjb3BlQ2hhaW4oKS5ub2RlKCksIGV4ZWMtPmV4Y2VwdGlv
blNsb3QoKSk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jUGFyc2VJbnQo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1BhcnNlSW50KEV4ZWNTdGF0ZSogZXhl
YykKIHsKLSAgICBKU1ZhbHVlIHZhbHVlID0gYXJncy5hdCgwKTsKLSAgICBpbnQzMl90IHJhZGl4
ID0gYXJncy5hdCgxKS50b0ludDMyKGV4ZWMpOworICAgIEpTVmFsdWUgdmFsdWUgPSBleGVjLT5h
cmd1bWVudCgwKTsKKyAgICBpbnQzMl90IHJhZGl4ID0gZXhlYy0+YXJndW1lbnQoMSkudG9JbnQz
MihleGVjKTsKIAogICAgIGlmIChyYWRpeCAhPSAwICYmIHJhZGl4ICE9IDEwKQogICAgICAgICBy
ZXR1cm4ganNOdW1iZXIoZXhlYywgcGFyc2VJbnQodmFsdWUudG9TdHJpbmcoZXhlYyksIHJhZGl4
KSk7CkBAIC0zMjAsMzYgKzMyMCwzNiBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVu
Y1BhcnNlSW50CiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHBhcnNlSW50KHZhbHVlLnRvU3Ry
aW5nKGV4ZWMpLCByYWRpeCkpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVu
Y1BhcnNlRmxvYXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1BhcnNlRmxvYXQo
RXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBqc051bWJlcihleGVjLCBwYXJzZUZsb2F0
KGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpKTsKKyAgICByZXR1cm4ganNOdW1iZXIoZXhlYywg
cGFyc2VGbG9hdChleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSkpOwogfQogCi1KU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0lzTmFOKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGdsb2JhbEZ1bmNJc05hTihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGpzQm9vbGVh
bihpc25hbihhcmdzLmF0KDApLnRvTnVtYmVyKGV4ZWMpKSk7CisgICAgcmV0dXJuIGpzQm9vbGVh
bihpc25hbihleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVjKSkpOwogfQogCi1KU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0lzRmluaXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGdsb2JhbEZ1bmNJc0Zpbml0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgZG91YmxlIG4gPSBh
cmdzLmF0KDApLnRvTnVtYmVyKGV4ZWMpOworICAgIGRvdWJsZSBuID0gZXhlYy0+YXJndW1lbnQo
MCkudG9OdW1iZXIoZXhlYyk7CiAgICAgcmV0dXJuIGpzQm9vbGVhbighaXNuYW4obikgJiYgIWlz
aW5mKG4pKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNEZWNvZGVVUkko
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0RlY29kZVVSSShFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgc3RhdGljIGNvbnN0IGNoYXIgZG9fbm90X3VuZXNjYXBlX3doZW5fZGVjb2Rp
bmdfVVJJW10gPQogICAgICAgICAiIyQmKywvOjs9P0AiOwogCi0gICAgcmV0dXJuIGRlY29kZShl
eGVjLCBhcmdzLCBkb19ub3RfdW5lc2NhcGVfd2hlbl9kZWNvZGluZ19VUkksIHRydWUpOworICAg
IHJldHVybiBkZWNvZGUoZXhlYywgZG9fbm90X3VuZXNjYXBlX3doZW5fZGVjb2RpbmdfVVJJLCB0
cnVlKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNEZWNvZGVVUklDb21w
b25lbnQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0RlY29kZVVSSUNvbXBvbmVu
dChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGRlY29kZShleGVjLCBhcmdzLCAiIiwg
dHJ1ZSk7CisgICAgcmV0dXJuIGRlY29kZShleGVjLCAiIiwgdHJ1ZSk7CiB9CiAKLUpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRW5jb2RlVVJJKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGdsb2JhbEZ1bmNFbmNvZGVVUkkoRXhlY1N0YXRlKiBleGVjKQogewogICAgIHN0YXRpYyBjb25z
dCBjaGFyIGRvX25vdF9lc2NhcGVfd2hlbl9lbmNvZGluZ19VUklbXSA9CiAgICAgICAgICJBQkNE
RUZHSElKS0xNTk9QUVJTVFVWV1hZWiIKQEAgLTM1NywxMCArMzU3LDEwIEBAIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBnbG9iYWxGdW5jRW5jb2RlVVIKICAgICAgICAgIjAxMjM0NTY3ODkiCiAgICAg
ICAgICIhIyQmJygpKissLS4vOjs9P0BffiI7CiAKLSAgICByZXR1cm4gZW5jb2RlKGV4ZWMsIGFy
Z3MsIGRvX25vdF9lc2NhcGVfd2hlbl9lbmNvZGluZ19VUkkpOworICAgIHJldHVybiBlbmNvZGUo
ZXhlYywgZG9fbm90X2VzY2FwZV93aGVuX2VuY29kaW5nX1VSSSk7CiB9CiAKLUpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBnbG9iYWxGdW5jRW5jb2RlVVJJQ29tcG9uZW50KEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGdsb2JhbEZ1bmNFbmNvZGVVUklDb21wb25lbnQoRXhlY1N0YXRlKiBleGVjKQogewog
ICAgIHN0YXRpYyBjb25zdCBjaGFyIGRvX25vdF9lc2NhcGVfd2hlbl9lbmNvZGluZ19VUklfY29t
cG9uZW50W10gPQogICAgICAgICAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiCkBAIC0zNjgs
MTAgKzM2OCwxMCBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0VuY29kZVVSCiAg
ICAgICAgICIwMTIzNDU2Nzg5IgogICAgICAgICAiIScoKSotLl9+IjsKIAotICAgIHJldHVybiBl
bmNvZGUoZXhlYywgYXJncywgZG9fbm90X2VzY2FwZV93aGVuX2VuY29kaW5nX1VSSV9jb21wb25l
bnQpOworICAgIHJldHVybiBlbmNvZGUoZXhlYywgZG9fbm90X2VzY2FwZV93aGVuX2VuY29kaW5n
X1VSSV9jb21wb25lbnQpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0Vz
Y2FwZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYg
YXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRXNjYXBlKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBzdGF0aWMgY29uc3QgY2hhciBkb19ub3RfZXNjYXBlW10gPQogICAgICAg
ICAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiCkBAIC0zODAsNyArMzgwLDcgQEAgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNFc2NhcGUoRQogICAgICAgICAiKistLi9AXyI7CiAK
ICAgICBKU1N0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBVU3RyaW5nIHN0ciA9IGFyZ3MuYXQo
MCkudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyBzdHIgPSBleGVjLT5hcmd1bWVudCgwKS50
b1N0cmluZyhleGVjKTsKICAgICBjb25zdCBVQ2hhciogYyA9IHN0ci5kYXRhKCk7CiAgICAgZm9y
ICh1bnNpZ25lZCBrID0gMDsgayA8IHN0ci5zaXplKCk7IGsrKywgYysrKSB7CiAgICAgICAgIGlu
dCB1ID0gY1swXTsKQEAgLTQwMCwxMCArNDAwLDEwIEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBn
bG9iYWxGdW5jRXNjYXBlKEUKICAgICByZXR1cm4gYnVpbGRlci5idWlsZChleGVjKTsKIH0KIAot
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNVbmVzY2FwZShFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBnbG9iYWxGdW5jVW5lc2NhcGUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFN0cmlu
Z0J1aWxkZXIgYnVpbGRlcjsKLSAgICBVU3RyaW5nIHN0ciA9IGFyZ3MuYXQoMCkudG9TdHJpbmco
ZXhlYyk7CisgICAgVVN0cmluZyBzdHIgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVj
KTsKICAgICBpbnQgayA9IDA7CiAgICAgaW50IGxlbiA9IHN0ci5zaXplKCk7CiAgICAgd2hpbGUg
KGsgPCBsZW4pIHsKQEAgLTQyOCw5ICs0MjgsOSBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xv
YmFsRnVuY1VuZXNjYXBlCiB9CiAKICNpZm5kZWYgTkRFQlVHCi1KU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZ2xvYmFsRnVuY0pTQ1ByaW50KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVl
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNK
U0NQcmludChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgQ1N0cmluZyBzdHJpbmcgPSBhcmdzLmF0
KDApLnRvU3RyaW5nKGV4ZWMpLlVURjhTdHJpbmcoKTsKKyAgICBDU3RyaW5nIHN0cmluZyA9IGV4
ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLlVURjhTdHJpbmcoKTsKICAgICBwdXRzKHN0
cmluZy5kYXRhKCkpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQpJbmRleDogSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaAkocmV2aXNp
b24gNjAzNDEpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rp
b25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDE5ICszNiwxOSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAvLyBGSVhNRTogVGhlc2UgZnVuY3Rpb25zIHNob3VsZCByZWFsbHkgYmUgaW4gSlNHbG9i
YWxPYmplY3QuY3BwLCBidXQgcHV0dGluZyB0aGVtIHRoZXJlCiAgICAgLy8gaXMgYSAwLjUlIHJl
ZHVjdGlvbi4KIAotICAgIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRXZhbChFeGVj
U3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLSAgICBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1BhcnNlSW50KEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
SlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotICAgIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9i
YWxGdW5jUGFyc2VGbG9hdChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmKTsKLSAgICBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0lzTmFOKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotICAgIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jSXNGaW5pdGUoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBK
U1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci0gICAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2Jh
bEZ1bmNEZWNvZGVVUkkoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdM
aXN0Jik7Ci0gICAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNEZWNvZGVVUklDb21w
b25lbnQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci0g
ICAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNFbmNvZGVVUkkoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci0gICAgSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGdsb2JhbEZ1bmNFbmNvZGVVUklDb21wb25lbnQoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci0gICAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGds
b2JhbEZ1bmNFc2NhcGUoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdM
aXN0Jik7Ci0gICAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNVbmVzY2FwZShFeGVj
U3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKKyAgICBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0V2YWwoRXhlY1N0YXRlKik7CisgICAgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNQYXJzZUludChFeGVjU3RhdGUqKTsKKyAgICBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1BhcnNlRmxvYXQoRXhlY1N0YXRlKik7CisgICAgSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNJc05hTihFeGVjU3RhdGUqKTsKKyAgICBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0lzRmluaXRlKEV4ZWNTdGF0ZSopOworICAgIEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRGVjb2RlVVJJKEV4ZWNTdGF0ZSopOworICAg
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRGVjb2RlVVJJQ29tcG9uZW50KEV4ZWNT
dGF0ZSopOworICAgIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRW5jb2RlVVJJKEV4
ZWNTdGF0ZSopOworICAgIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRW5jb2RlVVJJ
Q29tcG9uZW50KEV4ZWNTdGF0ZSopOworICAgIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxG
dW5jRXNjYXBlKEV4ZWNTdGF0ZSopOworICAgIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxG
dW5jVW5lc2NhcGUoRXhlY1N0YXRlKik7CiAjaWZuZGVmIE5ERUJVRwotICAgIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBnbG9iYWxGdW5jSlNDUHJpbnQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1Zh
bHVlLCBjb25zdCBBcmdMaXN0Jik7CisgICAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1
bmNKU0NQcmludChFeGVjU3RhdGUqKTsKICNlbmRpZgogCiAgICAgc3RhdGljIGNvbnN0IGRvdWJs
ZSBtYW50aXNzYU92ZXJmbG93TG93ZXJCb3VuZCA9IDkwMDcxOTkyNTQ3NDA5OTIuMDsKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MSw4ICs0MSw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxM
KEpTT05PYmplY3QpOwogCi1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTT05Qcm90b0Z1
bmNQYXJzZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsK
LXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNPTlByb3RvRnVuY1N0cmluZ2lmeShFeGVj
U3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgSlNPTlByb3RvRnVuY1BhcnNlKEV4ZWNTdGF0ZSopOworc3RhdGlj
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU09OUHJvdG9GdW5jU3RyaW5naWZ5KEV4ZWNTdGF0ZSop
OwogCiB9CiAKQEAgLTgzOSwxMSArODM5LDExIEBAIE5FVkVSX0lOTElORSBKU1ZhbHVlIFdhbGtl
cjo6d2FsayhKU1ZhbHUKIH0KIAogLy8gRUNNQS0yNjIgdjUgMTUuMTIuMgotSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIEpTT05Qcm90b0Z1bmNQYXJzZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
SlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU09O
UHJvdG9GdW5jUGFyc2UoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGlmIChhcmdzLmlzRW1wdHko
KSkKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKICAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoZXhlYywgR2VuZXJhbEVycm9yLCAiSlNPTi5wYXJzZSByZXF1aXJlcyBhdCBsZWFzdCBv
bmUgcGFyYW1ldGVyIik7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IGFyZ3MuYXQoMCk7CisgICAgSlNW
YWx1ZSB2YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIFVTdHJpbmcgc291cmNlID0gdmFs
dWUudG9TdHJpbmcoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAg
ICByZXR1cm4ganNOdWxsKCk7CkBAIC04NTMsMTAgKzg1MywxMCBAQCBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgSlNPTlByb3RvRnVuY1BhcnNlCiAgICAgaWYgKCF1bmZpbHRlcmVkKQogICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvciwgIlVuYWJsZSB0byBwYXJzZSBKU09O
IHN0cmluZyIpOwogICAgIAotICAgIGlmIChhcmdzLnNpemUoKSA8IDIpCisgICAgaWYgKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSA8IDIpCiAgICAgICAgIHJldHVybiB1bmZpbHRlcmVkOwogICAgIAot
ICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBhcmdzLmF0KDEpOworICAgIEpTVmFsdWUgZnVuY3Rpb24g
PSBleGVjLT5hcmd1bWVudCgxKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlw
ZSBjYWxsVHlwZSA9IGZ1bmN0aW9uLmdldENhbGxEYXRhKGNhbGxEYXRhKTsKICAgICBpZiAoY2Fs
bFR5cGUgPT0gQ2FsbFR5cGVOb25lKQpAQCAtODY1LDEzICs4NjUsMTMgQEAgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIEpTT05Qcm90b0Z1bmNQYXJzZQogfQogCiAvLyBFQ01BLTI2MiB2NSAxNS4xMi4z
Ci1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNPTlByb3RvRnVuY1N0cmluZ2lmeShFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBKU09OUHJvdG9GdW5jU3RyaW5naWZ5KEV4ZWNTdGF0ZSogZXhlYykKIHsK
LSAgICBpZiAoYXJncy5pc0VtcHR5KCkpCisgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkp
CiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIEdlbmVyYWxFcnJvciwgIk5vIGlucHV0
IHRvIHN0cmluZ2lmeSIpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBhcmdzLmF0KDApOwotICAgIEpT
VmFsdWUgcmVwbGFjZXIgPSBhcmdzLmF0KDEpOwotICAgIEpTVmFsdWUgc3BhY2UgPSBhcmdzLmF0
KDIpOworICAgIEpTVmFsdWUgdmFsdWUgPSBleGVjLT5hcmd1bWVudCgwKTsKKyAgICBKU1ZhbHVl
IHJlcGxhY2VyID0gZXhlYy0+YXJndW1lbnQoMSk7CisgICAgSlNWYWx1ZSBzcGFjZSA9IGV4ZWMt
PmFyZ3VtZW50KDIpOwogICAgIHJldHVybiBTdHJpbmdpZmllcihleGVjLCByZXBsYWNlciwgc3Bh
Y2UpLnN0cmluZ2lmeSh2YWx1ZSk7CiB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5n
LmgJKHJldmlzaW9uIDYwMzQxKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MzMsNyArNDMzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIGZyaWVuZCBKU1ZhbHVlIGpzU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVN0cmlu
ZyYgdTEsIEpTU3RyaW5nKiBzMik7CiAgICAgICAgIGZyaWVuZCBKU1ZhbHVlIGpzU3RyaW5nKEV4
ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHMxLCBjb25zdCBVU3RyaW5nJiB1Mik7CiAgICAgICAg
IGZyaWVuZCBKU1ZhbHVlIGpzU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgUmVnaXN0ZXIqIHN0cmlu
Z3MsIHVuc2lnbmVkIGNvdW50KTsKLSAgICAgICAgZnJpZW5kIEpTVmFsdWUganNTdHJpbmcoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncyk7Cisg
ICAgICAgIGZyaWVuZCBKU1ZhbHVlIGpzU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB0
aGlzVmFsdWUpOwogICAgICAgICBmcmllbmQgSlNTdHJpbmcqIGpzU3RyaW5nV2l0aEZpbmFsaXpl
cihFeGVjU3RhdGUqLCBjb25zdCBVU3RyaW5nJiwgSlNTdHJpbmdGaW5hbGl6ZXJDYWxsYmFjayBj
YWxsYmFjaywgdm9pZCogY29udGV4dCk7CiAgICAgfTsKIApJbmRleDogSmF2YVNjcmlwdENvcmUv
cnVudGltZS9NYXRoT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL01hdGhPYmplY3QuY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTWF0aE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDI0ICszNCwyNCBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChNYXRoT2JqZWN0KTsK
IAotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQWJzKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQUNvcyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpT
VmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0
aFByb3RvRnVuY0FTaW4oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdM
aXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNBVGFuKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQVRhbjIoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG1hdGhQcm90b0Z1bmNDZWlsKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5j
Q29zKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3Rh
dGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jRXhwKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBtYXRoUHJvdG9GdW5jRmxvb3IoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
LCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90
b0Z1bmNMb2coRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7
Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNNYXgoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNNaW4oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1Zh
bHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQ
cm90b0Z1bmNQb3coRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0
Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNSYW5kb20oRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNSb3VuZChFeGVjU3RhdGUqLCBKU09iamVj
dCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgbWF0aFByb3RvRnVuY1NpbihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY1Nx
cnQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0
aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNUYW4oRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG1hdGhQcm90b0Z1bmNBYnMoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNBQ29zKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQVNpbihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0FUYW4oRXhlY1N0YXRlKik7CitzdGF0aWMg
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNBVGFuMihFeGVjU3RhdGUqKTsKK3N0
YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0NlaWwoRXhlY1N0YXRlKik7
CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNDb3MoRXhlY1N0YXRl
Kik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNFeHAoRXhlY1N0
YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNGbG9vcihF
eGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0xv
ZyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVu
Y01heChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3Rv
RnVuY01pbihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFBy
b3RvRnVuY1BvdyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0
aFByb3RvRnVuY1JhbmRvbShFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgbWF0aFByb3RvRnVuY1JvdW5kKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBtYXRoUHJvdG9GdW5jU2luKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jU3FydChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY1RhbihFeGVjU3RhdGUqKTsKIAogfQogCkBAIC0x
MTMsNjIgKzExMyw2MiBAQCBib29sIE1hdGhPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRv
CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90
b0Z1bmNBYnMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0FicyhFeGVjU3Rh
dGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGZhYnMoYXJncy5hdCgwKS50
b051bWJlcihleGVjKSkpOworICAgIHJldHVybiBqc051bWJlcihleGVjLCBmYWJzKGV4ZWMtPmFy
Z3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKSk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBt
YXRoUHJvdG9GdW5jQUNvcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQUNv
cyhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGpzRG91YmxlTnVtYmVyKGV4ZWMsIGFj
b3MoYXJncy5hdCgwKS50b051bWJlcihleGVjKSkpOworICAgIHJldHVybiBqc0RvdWJsZU51bWJl
cihleGVjLCBhY29zKGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKSk7CiB9CiAKLUpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQVNpbihFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBtYXRoUHJvdG9GdW5jQVNpbihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGpz
RG91YmxlTnVtYmVyKGV4ZWMsIGFzaW4oYXJncy5hdCgwKS50b051bWJlcihleGVjKSkpOworICAg
IHJldHVybiBqc0RvdWJsZU51bWJlcihleGVjLCBhc2luKGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVt
YmVyKGV4ZWMpKSk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQVRh
bihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJn
cykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQVRhbihFeGVjU3RhdGUqIGV4
ZWMpCiB7Ci0gICAgcmV0dXJuIGpzRG91YmxlTnVtYmVyKGV4ZWMsIGF0YW4oYXJncy5hdCgwKS50
b051bWJlcihleGVjKSkpOworICAgIHJldHVybiBqc0RvdWJsZU51bWJlcihleGVjLCBhdGFuKGV4
ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKSk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBtYXRoUHJvdG9GdW5jQVRhbjIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFs
dWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3Rv
RnVuY0FUYW4yKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4ganNEb3VibGVOdW1iZXIo
ZXhlYywgYXRhbjIoYXJncy5hdCgwKS50b051bWJlcihleGVjKSwgYXJncy5hdCgxKS50b051bWJl
cihleGVjKSkpOworICAgIHJldHVybiBqc0RvdWJsZU51bWJlcihleGVjLCBhdGFuMihleGVjLT5h
cmd1bWVudCgwKS50b051bWJlcihleGVjKSwgZXhlYy0+YXJndW1lbnQoMSkudG9OdW1iZXIoZXhl
YykpKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNDZWlsKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNDZWlsKEV4ZWNTdGF0ZSogZXhlYykKIHsK
LSAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgY2VpbChhcmdzLmF0KDApLnRvTnVtYmVyKGV4ZWMp
KSk7CisgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGNlaWwoZXhlYy0+YXJndW1lbnQoMCkudG9O
dW1iZXIoZXhlYykpKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmND
b3MoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0NvcyhFeGVjU3RhdGUqIGV4
ZWMpCiB7Ci0gICAgcmV0dXJuIGpzRG91YmxlTnVtYmVyKGV4ZWMsIGNvcyhhcmdzLmF0KDApLnRv
TnVtYmVyKGV4ZWMpKSk7CisgICAgcmV0dXJuIGpzRG91YmxlTnVtYmVyKGV4ZWMsIGNvcyhleGVj
LT5hcmd1bWVudCgwKS50b051bWJlcihleGVjKSkpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgbWF0aFByb3RvRnVuY0V4cChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5j
RXhwKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4ganNEb3VibGVOdW1iZXIoZXhlYywg
ZXhwKGFyZ3MuYXQoMCkudG9OdW1iZXIoZXhlYykpKTsKKyAgICByZXR1cm4ganNEb3VibGVOdW1i
ZXIoZXhlYywgZXhwKGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKSk7CiB9CiAKLUpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jRmxvb3IoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgbWF0aFByb3RvRnVuY0Zsb29yKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4g
anNOdW1iZXIoZXhlYywgZmxvb3IoYXJncy5hdCgwKS50b051bWJlcihleGVjKSkpOworICAgIHJl
dHVybiBqc051bWJlcihleGVjLCBmbG9vcihleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVj
KSkpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0xvZyhFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jTG9nKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAg
ICByZXR1cm4ganNEb3VibGVOdW1iZXIoZXhlYywgbG9nKGFyZ3MuYXQoMCkudG9OdW1iZXIoZXhl
YykpKTsKKyAgICByZXR1cm4ganNEb3VibGVOdW1iZXIoZXhlYywgbG9nKGV4ZWMtPmFyZ3VtZW50
KDApLnRvTnVtYmVyKGV4ZWMpKSk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJv
dG9GdW5jTWF4KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNNYXgoRXhlY1N0
YXRlKiBleGVjKQogewotICAgIHVuc2lnbmVkIGFyZ3NDb3VudCA9IGFyZ3Muc2l6ZSgpOworICAg
IHVuc2lnbmVkIGFyZ3NDb3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKICAgICBkb3VibGUg
cmVzdWx0ID0gLUluZjsKICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgYXJnc0NvdW50OyAr
K2spIHsKLSAgICAgICAgZG91YmxlIHZhbCA9IGFyZ3MuYXQoaykudG9OdW1iZXIoZXhlYyk7Cisg
ICAgICAgIGRvdWJsZSB2YWwgPSBleGVjLT5hcmd1bWVudChrKS50b051bWJlcihleGVjKTsKICAg
ICAgICAgaWYgKGlzbmFuKHZhbCkpIHsKICAgICAgICAgICAgIHJlc3VsdCA9IE5hTjsKICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtMTc5LDEyICsxNzksMTIgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG1hdGhQcm90b0Z1bmNNYXgoRQogICAgIHJldHVybiBqc051bWJlcihleGVjLCByZXN1bHQpOwog
fQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY01pbihFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlND
X0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jTWluKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICB1bnNp
Z25lZCBhcmdzQ291bnQgPSBhcmdzLnNpemUoKTsKKyAgICB1bnNpZ25lZCBhcmdzQ291bnQgPSBl
eGVjLT5hcmd1bWVudENvdW50KCk7CiAgICAgZG91YmxlIHJlc3VsdCA9ICtJbmY7CiAgICAgZm9y
ICh1bnNpZ25lZCBrID0gMDsgayA8IGFyZ3NDb3VudDsgKytrKSB7Ci0gICAgICAgIGRvdWJsZSB2
YWwgPSBhcmdzLmF0KGspLnRvTnVtYmVyKGV4ZWMpOworICAgICAgICBkb3VibGUgdmFsID0gZXhl
Yy0+YXJndW1lbnQoaykudG9OdW1iZXIoZXhlYyk7CiAgICAgICAgIGlmIChpc25hbih2YWwpKSB7
CiAgICAgICAgICAgICByZXN1bHQgPSBOYU47CiAgICAgICAgICAgICBicmVhazsKQEAgLTE5NSwx
MiArMTk1LDEyIEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jTWluKEUKICAg
ICByZXR1cm4ganNOdW1iZXIoZXhlYywgcmVzdWx0KTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG1hdGhQcm90b0Z1bmNQb3coRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVu
Y1BvdyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgLy8gRUNNQSAxNS44LjIuMS4xMwogCi0gICAg
ZG91YmxlIGFyZyA9IGFyZ3MuYXQoMCkudG9OdW1iZXIoZXhlYyk7Ci0gICAgZG91YmxlIGFyZzIg
PSBhcmdzLmF0KDEpLnRvTnVtYmVyKGV4ZWMpOworICAgIGRvdWJsZSBhcmcgPSBleGVjLT5hcmd1
bWVudCgwKS50b051bWJlcihleGVjKTsKKyAgICBkb3VibGUgYXJnMiA9IGV4ZWMtPmFyZ3VtZW50
KDEpLnRvTnVtYmVyKGV4ZWMpOwogCiAgICAgaWYgKGlzbmFuKGFyZzIpKQogICAgICAgICByZXR1
cm4ganNOYU4oZXhlYyk7CkBAIC0yMDksMzEgKzIwOSwzMSBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgbWF0aFByb3RvRnVuY1BvdyhFCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHBvdyhhcmcs
IGFyZzIpKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNSYW5kb20o
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNSYW5kb20oRXhlY1N0YXRlKiBleGVjKQog
ewogICAgIHJldHVybiBqc0RvdWJsZU51bWJlcihleGVjLCBleGVjLT5nbG9iYWxEYXRhKCkud2Vh
a1JhbmRvbS5nZXQoKSk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5j
Um91bmQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY1JvdW5kKEV4ZWNTdGF0
ZSogZXhlYykKIHsKLSAgICBkb3VibGUgYXJnID0gYXJncy5hdCgwKS50b051bWJlcihleGVjKTsK
KyAgICBkb3VibGUgYXJnID0gZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYyk7CiAgICAg
ZG91YmxlIGludGVnZXIgPSBjZWlsKGFyZyk7CiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGlu
dGVnZXIgLSAoaW50ZWdlciAtIGFyZyA+IDAuNSkpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgbWF0aFByb3RvRnVuY1NpbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5j
U2luKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gZXhlYy0+Z2xvYmFsRGF0YSgpLmNh
Y2hlZFNpbihleGVjLCBhcmdzLmF0KDApLnRvTnVtYmVyKGV4ZWMpKTsKKyAgICByZXR1cm4gZXhl
Yy0+Z2xvYmFsRGF0YSgpLmNhY2hlZFNpbihleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b051bWJl
cihleGVjKSk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jU3FydChF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jU3FydChFeGVjU3RhdGUqIGV4ZWMp
CiB7Ci0gICAgcmV0dXJuIGpzRG91YmxlTnVtYmVyKGV4ZWMsIHNxcnQoYXJncy5hdCgwKS50b051
bWJlcihleGVjKSkpOworICAgIHJldHVybiBqc0RvdWJsZU51bWJlcihleGVjLCBzcXJ0KGV4ZWMt
PmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpKSk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBtYXRoUHJvdG9GdW5jVGFuKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNU
YW4oRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBqc0RvdWJsZU51bWJlcihleGVjLCB0
YW4oYXJncy5hdCgwKS50b051bWJlcihleGVjKSkpOworICAgIHJldHVybiBqc0RvdWJsZU51bWJl
cihleGVjLCB0YW4oZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykpKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9y
Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0
aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgSmF2YVNjcmlwdENv
cmUvcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjIsOSArNjIsMTAgQEAgQ29uc3RydWN0VHlwZSBOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjpnZQog
ICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlSG9zdDsKIH0KICAgICAKLXN0YXRpYyBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY2FsbE5hdGl2ZUVycm9yQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogY29uc3RydWN0b3IsIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitzdGF0
aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxOYXRpdmVFcnJvckNvbnN0cnVjdG9yKEV4ZWNT
dGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TmF0aXZlRXJyb3JDb25zdHJ1
Y3Rvcio+KGNvbnN0cnVjdG9yKS0+Y29uc3RydWN0KGV4ZWMsIGFyZ3MpOworICAgIEFyZ0xpc3Qg
YXJncyhleGVjKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TmF0aXZlRXJyb3JDb25zdHJ1Y3Rv
cio+KGV4ZWMtPmNhbGxlZSgpKS0+Y29uc3RydWN0KGV4ZWMsIGFyZ3MpOwogfQogCiBDYWxsVHlw
ZSBOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjpnZXRDYWxsRGF0YShDYWxsRGF0YSYgY2FsbERhdGEp
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmNwcAko
cmV2aXNpb24gNjAzNDEpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVj
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDkgKzExNSw5IEBAIENvbnN0cnVjdFR5cGUg
TnVtYmVyQ29uc3RydWN0b3I6OmdldENvbnMKIH0KIAogLy8gRUNNQSAxNS43LjIKLXN0YXRpYyBK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbE51bWJlckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGljIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjYWxsTnVtYmVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQog
ewotICAgIHJldHVybiBqc051bWJlcihleGVjLCBhcmdzLmlzRW1wdHkoKSA/IDAgOiBhcmdzLmF0
KDApLnRvTnVtYmVyKGV4ZWMpKTsKKyAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgIWV4ZWMtPmFy
Z3VtZW50Q291bnQoKSA/IDAgOiBleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVjKSk7CiB9
CiAKIENhbGxUeXBlIE51bWJlckNvbnN0cnVjdG9yOjpnZXRDYWxsRGF0YShDYWxsRGF0YSYgY2Fs
bERhdGEpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlclByb3RvdHlwZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3Bw
CShyZXZpc2lvbiA2MDM0MSkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90
eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTIgKzM4LDEyIEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKE51bWJlclByb3RvdHlwZSk7CiAKLXN0YXRp
YyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNWYWx1ZU9mKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1i
ZXJQcm90b0Z1bmNUb0ZpeGVkKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3Qg
QXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNU
b0V4cG9uZW50aWFsKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlz
dCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNUb1ByZWNp
c2lvbihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0
YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0
YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1RvTG9j
YWxlU3RyaW5nKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1i
ZXJQcm90b0Z1bmNWYWx1ZU9mKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBudW1iZXJQcm90b0Z1bmNUb0ZpeGVkKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNUb0V4cG9uZW50aWFsKEV4ZWNTdGF0ZSopOwor
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNUb1ByZWNpc2lvbihF
eGVjU3RhdGUqKTsKIAogLy8gRUNNQSAxNS43LjQKIApAQCAtMTM3LDEzICsxMzcsMTQgQEAgc3Rh
dGljIGRvdWJsZSBpbnRQb3cxMChpbnQgZSkKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91Ymxl
PihyZXN1bHQpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9T
dHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1Rv
U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMt
Pmhvc3RUaGlzVmFsdWUoKTsKICAgICBKU1ZhbHVlIHYgPSB0aGlzVmFsdWUuZ2V0SlNOdW1iZXIo
KTsKICAgICBpZiAoIXYpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJv
cik7CiAKLSAgICBKU1ZhbHVlIHJhZGl4VmFsdWUgPSBhcmdzLmF0KDApOworICAgIEpTVmFsdWUg
cmFkaXhWYWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGludCByYWRpeDsKICAgICBpZiAo
cmFkaXhWYWx1ZS5pc0ludDMyKCkpCiAgICAgICAgIHJhZGl4ID0gcmFkaXhWYWx1ZS5hc0ludDMy
KCk7CkBAIC0yMjAsOCArMjIxLDkgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3Rv
RnVuY1RvUwogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBzdGFydE9mUmVzdWx0U3RyaW5nKTsK
IH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1RvTG9jYWxlU3RyaW5n
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9Mb2NhbGVTdHJp
bmcoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9z
dFRoaXNWYWx1ZSgpOwogICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQgeWV0LgogCiAgICAg
SlNWYWx1ZSB2ID0gdGhpc1ZhbHVlLmdldEpTTnVtYmVyKCk7CkBAIC0yMzEsOCArMjMzLDkgQEAg
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1RvTAogICAgIHJldHVybiBqc1N0
cmluZyhleGVjLCB2LnRvU3RyaW5nKGV4ZWMpKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG51bWJlclByb3RvRnVuY1ZhbHVlT2YoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFs
dWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1i
ZXJQcm90b0Z1bmNWYWx1ZU9mKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNW
YWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBKU1ZhbHVlIHYgPSB0aGlzVmFsdWUu
Z2V0SlNOdW1iZXIoKTsKICAgICBpZiAoIXYpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4
ZWMsIFR5cGVFcnJvcik7CkBAIC0yNDAsMTMgKzI0MywxNCBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgbnVtYmVyUHJvdG9GdW5jVmFsCiAgICAgcmV0dXJuIHY7CiB9CiAKLUpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNUb0ZpeGVkKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
LCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNUb0ZpeGVkKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBK
U1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBKU1ZhbHVlIHYg
PSB0aGlzVmFsdWUuZ2V0SlNOdW1iZXIoKTsKICAgICBpZiAoIXYpCiAgICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKLSAgICBKU1ZhbHVlIGZyYWN0aW9uRGlnaXRz
ID0gYXJncy5hdCgwKTsKKyAgICBKU1ZhbHVlIGZyYWN0aW9uRGlnaXRzID0gZXhlYy0+YXJndW1l
bnQoMCk7CiAgICAgZG91YmxlIGRmID0gZnJhY3Rpb25EaWdpdHMudG9JbnRlZ2VyKGV4ZWMpOwog
ICAgIGlmICghKGRmID49IDAgJiYgZGYgPD0gMjApKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJv
cihleGVjLCBSYW5nZUVycm9yLCAidG9GaXhlZCgpIGRpZ2l0cyBhcmd1bWVudCBtdXN0IGJlIGJl
dHdlZW4gMCBhbmQgMjAiKTsKQEAgLTMzMSw4ICszMzUsOSBAQCBzdGF0aWMgdm9pZCBleHBvbmVu
dGlhbFBhcnRUb1N0cmluZyhjaGFyCiAgICAgYnVmW2krK10gPSBzdGF0aWNfY2FzdDxjaGFyPign
MCcgKyBleHBvbmVudGlhbCAlIDEwKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJl
clByb3RvRnVuY1RvRXhwb25lbnRpYWwoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFs
dWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG51bWJlclByb3RvRnVuY1RvRXhwb25lbnRpYWwoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpT
VmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIEpTVmFsdWUgdiA9
IHRoaXNWYWx1ZS5nZXRKU051bWJlcigpOwogICAgIGlmICghdikKICAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKQEAgLTM0Miw3ICszNDcsNyBAQCBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9FCiAgICAgaWYgKGlzbmFuKHgpIHx8IGlzaW5m
KHgpKQogICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgVVN0cmluZzo6ZnJvbSh4KSk7CiAK
LSAgICBKU1ZhbHVlIGZyYWN0aW9uYWxEaWdpdHNWYWx1ZSA9IGFyZ3MuYXQoMCk7CisgICAgSlNW
YWx1ZSBmcmFjdGlvbmFsRGlnaXRzVmFsdWUgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBkb3Vi
bGUgZGYgPSBmcmFjdGlvbmFsRGlnaXRzVmFsdWUudG9JbnRlZ2VyKGV4ZWMpOwogICAgIGlmICgh
KGRmID49IDAgJiYgZGYgPD0gMjApKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBS
YW5nZUVycm9yLCAidG9FeHBvbmVudGlhbCgpIGFyZ3VtZW50IG11c3QgYmV0d2VlbiAwIGFuZCAy
MCIpOwpAQCAtNDAzLDE1ICs0MDgsMTYgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclBy
b3RvRnVuY1RvRQogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBidWYpOwogfQogCi1KU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9QcmVjaXNpb24oRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1RvUHJlY2lzaW9uKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsK
ICAgICBKU1ZhbHVlIHYgPSB0aGlzVmFsdWUuZ2V0SlNOdW1iZXIoKTsKICAgICBpZiAoIXYpCiAg
ICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKLSAgICBkb3VibGUg
ZG91YmxlUHJlY2lzaW9uID0gYXJncy5hdCgwKS50b0ludGVnZXJQcmVzZXJ2ZU5hTihleGVjKTsK
KyAgICBkb3VibGUgZG91YmxlUHJlY2lzaW9uID0gZXhlYy0+YXJndW1lbnQoMCkudG9JbnRlZ2Vy
UHJlc2VydmVOYU4oZXhlYyk7CiAgICAgZG91YmxlIHggPSB2LnVuY2hlY2tlZEdldE51bWJlcigp
OwotICAgIGlmIChhcmdzLmF0KDApLmlzVW5kZWZpbmVkKCkgfHwgaXNuYW4oeCkgfHwgaXNpbmYo
eCkpCisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgfHwgaXNuYW4oeCkg
fHwgaXNpbmYoeCkpCiAgICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCB2LnRvU3RyaW5nKGV4
ZWMpKTsKIAogICAgIFVTdHJpbmcgczsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2Jq
ZWN0Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T2JqZWN0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMyAr
MzQsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoT2Jq
ZWN0Q29uc3RydWN0b3IpOwogCi1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENv
bnN0cnVjdG9yR2V0UHJvdG90eXBlT2YoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBj
b25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0
cnVjdG9yR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmpl
Y3RDb25zdHJ1Y3RvckdldE93blByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBK
U1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9i
amVjdENvbnN0cnVjdG9yS2V5cyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0
b3JEZWZpbmVQcm9wZXJ0eShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JE
ZWZpbmVQcm9wZXJ0aWVzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvckNy
ZWF0ZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0
YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JHZXRQcm90b3R5cGVP
ZihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3Ry
dWN0b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlOYW1lcyhFeGVj
U3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JL
ZXlzKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25z
dHJ1Y3RvckRlZmluZVByb3BlcnR5KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvckRlZmluZVByb3BlcnRpZXMoRXhlY1N0YXRlKik7Citz
dGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yQ3JlYXRlKEV4ZWNT
dGF0ZSopOwogCiBPYmplY3RDb25zdHJ1Y3Rvcjo6T2JqZWN0Q29uc3RydWN0b3IoRXhlY1N0YXRl
KiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBOb25OdWxsUGFzc1JlZlB0cjxT
dHJ1Y3R1cmU+IHN0cnVjdHVyZSwgT2JqZWN0UHJvdG90eXBlKiBvYmplY3RQcm90b3R5cGUsIFN0
cnVjdHVyZSogcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUpCiA6IEludGVybmFsRnVuY3Rpb24o
JmV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIElkZW50aWZpZXIo
ZXhlYywgIk9iamVjdCIpKQpAQCAtODAsOCArODAsOSBAQCBDb25zdHJ1Y3RUeXBlIE9iamVjdENv
bnN0cnVjdG9yOjpnZXRDb25zCiAgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OwogfQogCi1z
dGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxPYmplY3RDb25zdHJ1Y3RvcihFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK3N0YXRp
YyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbE9iamVjdENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKKyAgICBBcmdMaXN0IGFyZ3MoZXhlYyk7CiAgICAgcmV0dXJuIGNvbnN0cnVjdE9i
amVjdChleGVjLCBhcmdzKTsKIH0KIApAQCAtOTEsMjEgKzkyLDIxIEBAIENhbGxUeXBlIE9iamVj
dENvbnN0cnVjdG9yOjpnZXRDYWxsRGF0YSgKICAgICByZXR1cm4gQ2FsbFR5cGVIb3N0OwogfQog
Ci1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JHZXRQcm90b3R5cGVPZihF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvckdldFByb3RvdHlwZU9mKEV4
ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBpZiAoIWFyZ3MuYXQoMCkuaXNPYmplY3QoKSkKKyAgICBp
ZiAoIWV4ZWMtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKGV4ZWMsIFR5cGVFcnJvciwgIlJlcXVlc3RlZCBwcm90b3R5cGUgb2YgYSB2YWx1ZSB0aGF0
IGlzIG5vdCBhbiBvYmplY3QuIik7Ci0gICAgcmV0dXJuIGFzT2JqZWN0KGFyZ3MuYXQoMCkpLT5w
cm90b3R5cGUoKTsKKyAgICByZXR1cm4gYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpLT5wcm90
b3R5cGUoKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yR2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVl
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0
cnVjdG9yR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBp
ZiAoIWFyZ3MuYXQoMCkuaXNPYmplY3QoKSkKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDApLmlz
T2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvciwgIlJl
cXVlc3RlZCBwcm9wZXJ0eSBkZXNjcmlwdG9yIG9mIGEgdmFsdWUgdGhhdCBpcyBub3QgYW4gb2Jq
ZWN0LiIpOwotICAgIFVTdHJpbmcgcHJvcGVydHlOYW1lID0gYXJncy5hdCgxKS50b1N0cmluZyhl
eGVjKTsKKyAgICBVU3RyaW5nIHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3Ry
aW5nKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJu
IGpzTnVsbCgpOwotICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChhcmdzLmF0KDApKTsK
KyAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpOwogICAg
IFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwogICAgIGlmICghb2JqZWN0LT5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgSWRlbnRpZmllcihleGVjLCBwcm9wZXJ0eU5hbWUpLCBk
ZXNjcmlwdG9yKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC0xMjgsMTIgKzEy
OSwxMiBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JHCiB9CiAKIC8v
IEZJWE1FOiBVc2UgdGhlIGVudW1lcmF0aW9uIGNhY2hlLgotSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlOYW1lcyhFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBvYmplY3RDb25zdHJ1Y3RvckdldE93blByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKiBleGVj
KQogewotICAgIGlmICghYXJncy5hdCgwKS5pc09iamVjdCgpKQorICAgIGlmICghZXhlYy0+YXJn
dW1lbnQoMCkuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlw
ZUVycm9yLCAiUmVxdWVzdGVkIHByb3BlcnR5IG5hbWVzIG9mIGEgdmFsdWUgdGhhdCBpcyBub3Qg
YW4gb2JqZWN0LiIpOwogICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnRpZXMoZXhlYyk7Ci0g
ICAgYXNPYmplY3QoYXJncy5hdCgwKSktPmdldE93blByb3BlcnR5TmFtZXMoZXhlYywgcHJvcGVy
dGllcywgSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyk7CisgICAgYXNPYmplY3QoZXhlYy0+YXJn
dW1lbnQoMCkpLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKGV4ZWMsIHByb3BlcnRpZXMsIEluY2x1ZGVE
b250RW51bVByb3BlcnRpZXMpOwogICAgIEpTQXJyYXkqIG5hbWVzID0gY29uc3RydWN0RW1wdHlB
cnJheShleGVjKTsKICAgICBzaXplX3QgbnVtUHJvcGVydGllcyA9IHByb3BlcnRpZXMuc2l6ZSgp
OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtUHJvcGVydGllczsgaSsrKQpAQCAtMTQy
LDEyICsxNDMsMTIgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yRwog
fQogCiAvLyBGSVhNRTogVXNlIHRoZSBlbnVtZXJhdGlvbiBjYWNoZS4KLUpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvcktleXMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2Jq
ZWN0Q29uc3RydWN0b3JLZXlzKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBpZiAoIWFyZ3MuYXQo
MCkuaXNPYmplY3QoKSkKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkpCiAg
ICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvciwgIlJlcXVlc3RlZCBrZXlz
IG9mIGEgdmFsdWUgdGhhdCBpcyBub3QgYW4gb2JqZWN0LiIpOwogICAgIFByb3BlcnR5TmFtZUFy
cmF5IHByb3BlcnRpZXMoZXhlYyk7Ci0gICAgYXNPYmplY3QoYXJncy5hdCgwKSktPmdldE93blBy
b3BlcnR5TmFtZXMoZXhlYywgcHJvcGVydGllcyk7CisgICAgYXNPYmplY3QoZXhlYy0+YXJndW1l
bnQoMCkpLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKGV4ZWMsIHByb3BlcnRpZXMpOwogICAgIEpTQXJy
YXkqIGtleXMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMpOwogICAgIHNpemVfdCBudW1Qcm9w
ZXJ0aWVzID0gcHJvcGVydGllcy5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBu
dW1Qcm9wZXJ0aWVzOyBpKyspCkBAIC0yNDEsMTYgKzI0MiwxNiBAQCBzdGF0aWMgYm9vbCB0b1By
b3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvckRlZmluZVByb3BlcnR5KEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yRGVmaW5lUHJvcGVydHkoRXhlY1N0YXRlKiBl
eGVjKQogewotICAgIGlmICghYXJncy5hdCgwKS5pc09iamVjdCgpKQorICAgIGlmICghZXhlYy0+
YXJndW1lbnQoMCkuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywg
VHlwZUVycm9yLCAiUHJvcGVydGllcyBjYW4gb25seSBiZSBkZWZpbmVkIG9uIE9iamVjdHMuIik7
Ci0gICAgSlNPYmplY3QqIE8gPSBhc09iamVjdChhcmdzLmF0KDApKTsKLSAgICBVU3RyaW5nIHBy
b3BlcnR5TmFtZSA9IGFyZ3MuYXQoMSkudG9TdHJpbmcoZXhlYyk7CisgICAgSlNPYmplY3QqIE8g
PSBhc09iamVjdChleGVjLT5hcmd1bWVudCgwKSk7CisgICAgVVN0cmluZyBwcm9wZXJ0eU5hbWUg
PSBleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICBQcm9wZXJ0eURlc2NyaXB0
b3IgZGVzY3JpcHRvcjsKLSAgICBpZiAoIXRvUHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIGFyZ3Mu
YXQoMiksIGRlc2NyaXB0b3IpKQorICAgIGlmICghdG9Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywg
ZXhlYy0+YXJndW1lbnQoMiksIGRlc2NyaXB0b3IpKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7
CiAgICAgQVNTRVJUKChkZXNjcmlwdG9yLmF0dHJpYnV0ZXMoKSAmIChHZXR0ZXIgfCBTZXR0ZXIp
KSB8fCAoIWRlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkpOwogICAgIEFTU0VSVCgh
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwpAQCAtMjkyLDI2ICsyOTMsMjYgQEAgc3RhdGljIEpTVmFs
dWUgZGVmaW5lUHJvcGVydGllcyhFeGVjU3RhdAogICAgIHJldHVybiBvYmplY3Q7CiB9CiAKLUpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvckRlZmluZVByb3BlcnRpZXMoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JEZWZpbmVQcm9wZXJ0aWVzKEV4
ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBpZiAoIWFyZ3MuYXQoMCkuaXNPYmplY3QoKSkKKyAgICBp
ZiAoIWV4ZWMtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKGV4ZWMsIFR5cGVFcnJvciwgIlByb3BlcnRpZXMgY2FuIG9ubHkgYmUgZGVmaW5lZCBvbiBP
YmplY3RzLiIpOwotICAgIGlmICghYXJncy5hdCgxKS5pc09iamVjdCgpKQorICAgIGlmICghZXhl
Yy0+YXJndW1lbnQoMSkuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhl
YywgVHlwZUVycm9yLCAiUHJvcGVydHkgZGVzY3JpcHRvciBsaXN0IG11c3QgYmUgYW4gT2JqZWN0
LiIpOwotICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0aWVzKGV4ZWMsIGFzT2JqZWN0KGFyZ3MuYXQo
MCkpLCBhc09iamVjdChhcmdzLmF0KDEpKSk7CisgICAgcmV0dXJuIGRlZmluZVByb3BlcnRpZXMo
ZXhlYywgYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpLCBhc09iamVjdChleGVjLT5hcmd1bWVu
dCgxKSkpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JDcmVh
dGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JDcmVhdGUoRXhlY1N0
YXRlKiBleGVjKQogewotICAgIGlmICghYXJncy5hdCgwKS5pc09iamVjdCgpICYmICFhcmdzLmF0
KDApLmlzTnVsbCgpKQorICAgIGlmICghZXhlYy0+YXJndW1lbnQoMCkuaXNPYmplY3QoKSAmJiAh
ZXhlYy0+YXJndW1lbnQoMCkuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4
ZWMsIFR5cGVFcnJvciwgIk9iamVjdCBwcm90b3R5cGUgbWF5IG9ubHkgYmUgYW4gT2JqZWN0IG9y
IG51bGwuIik7CiAgICAgSlNPYmplY3QqIG5ld09iamVjdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0
KGV4ZWMpOwotICAgIG5ld09iamVjdC0+c2V0UHJvdG90eXBlKGFyZ3MuYXQoMCkpOwotICAgIGlm
IChhcmdzLmF0KDEpLmlzVW5kZWZpbmVkKCkpCisgICAgbmV3T2JqZWN0LT5zZXRQcm90b3R5cGUo
ZXhlYy0+YXJndW1lbnQoMCkpOworICAgIGlmIChleGVjLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5l
ZCgpKQogICAgICAgICByZXR1cm4gbmV3T2JqZWN0OwotICAgIGlmICghYXJncy5hdCgxKS5pc09i
amVjdCgpKQorICAgIGlmICghZXhlYy0+YXJndW1lbnQoMSkuaXNPYmplY3QoKSkKICAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAiUHJvcGVydHkgZGVzY3JpcHRvciBs
aXN0IG11c3QgYmUgYW4gT2JqZWN0LiIpOwotICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0aWVzKGV4
ZWMsIG5ld09iamVjdCwgYXNPYmplY3QoYXJncy5hdCgxKSkpOworICAgIHJldHVybiBkZWZpbmVQ
cm9wZXJ0aWVzKGV4ZWMsIG5ld09iamVjdCwgYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMSkpKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL09i
amVjdFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
YmplY3RQcm90b3R5cGUuY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTUgKzMxLDE1
IEBAIG5hbWVzcGFjZSBKU0MgewogCiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKE9iamVjdFBy
b3RvdHlwZSk7CiAKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5j
VmFsdWVPZihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsK
LXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jSGFzT3duUHJvcGVy
dHkoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0
aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0lzUHJvdG90eXBlT2YoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0RlZmluZUdldHRlcihFeGVjU3RhdGUq
LCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jRGVmaW5lU2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBvYmplY3RQcm90b0Z1bmNMb29rdXBHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBK
U1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9i
amVjdFByb3RvRnVuY0xvb2t1cFNldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJv
dG9GdW5jUHJvcGVydHlJc0VudW1lcmFibGUoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
LCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFBy
b3RvRnVuY1RvTG9jYWxlU3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1
bmNWYWx1ZU9mKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmpl
Y3RQcm90b0Z1bmNIYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jSXNQcm90b3R5cGVPZihFeGVjU3RhdGUqKTsKK3N0
YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jRGVmaW5lR2V0dGVyKEV4
ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNE
ZWZpbmVTZXR0ZXIoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9i
amVjdFByb3RvRnVuY0xvb2t1cEdldHRlcihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jTG9va3VwU2V0dGVyKEV4ZWNTdGF0ZSopOworc3Rh
dGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNQcm9wZXJ0eUlzRW51bWVy
YWJsZShFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJv
dG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRlKik7CiAKIE9iamVjdFByb3RvdHlwZTo6T2Jq
ZWN0UHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgTm9uTnVsbFBhc3NSZWZQdHI8U3RydWN0dXJlPiBzdHVjdHVyZSwgU3RydWN0dXJlKiBwcm90
b3R5cGVGdW5jdGlvblN0cnVjdHVyZSkKICAgICA6IEpTT2JqZWN0KHN0dWN0dXJlKQpAQCAtODEs
NzQgKzgxLDg0IEBAIGJvb2wgT2JqZWN0UHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eVNsb3QKIAog
Ly8gRUNNQSAxNS4yLjQuMiwgMTUuMi40LjQsIDE1LjIuNC41LCAxNS4yLjQuNwogCi1KU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jVmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY1ZhbHVlT2YoRXhlY1N0YXRlKiBleGVjKQogeworICAg
IEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIHJldHVybiB0
aGlzVmFsdWUudG9UaGlzT2JqZWN0KGV4ZWMpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
b2JqZWN0UHJvdG9GdW5jSGFzT3duUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG9iamVjdFByb3RvRnVuY0hhc093blByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYykKIHsK
LSAgICByZXR1cm4ganNCb29sZWFuKHRoaXNWYWx1ZS50b1RoaXNPYmplY3QoZXhlYyktPmhhc093
blByb3BlcnR5KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgYXJncy5hdCgwKS50b1N0cmluZyhleGVj
KSkpKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKKyAg
ICByZXR1cm4ganNCb29sZWFuKHRoaXNWYWx1ZS50b1RoaXNPYmplY3QoZXhlYyktPmhhc093blBy
b3BlcnR5KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmco
ZXhlYykpKSk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNJc1By
b3RvdHlwZU9mKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1
bmNJc1Byb3RvdHlwZU9mKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1
ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBKU09iamVjdCogdGhpc09iaiA9IHRoaXNW
YWx1ZS50b1RoaXNPYmplY3QoZXhlYyk7CiAKLSAgICBpZiAoIWFyZ3MuYXQoMCkuaXNPYmplY3Qo
KSkKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVy
biBqc0Jvb2xlYW4oZmFsc2UpOwogCi0gICAgSlNWYWx1ZSB2ID0gYXNPYmplY3QoYXJncy5hdCgw
KSktPnByb3RvdHlwZSgpOworICAgIEpTVmFsdWUgdiA9IGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50
KDApKS0+cHJvdG90eXBlKCk7CiAKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBpZiAoIXYu
aXNPYmplY3QoKSkKICAgICAgICAgICAgIHJldHVybiBqc0Jvb2xlYW4oZmFsc2UpOwotICAgICAg
ICBpZiAodiA9PSB0aGlzT2JqKQsKKyAgICAgICAgaWYgKHYgPT0gdGhpc09iaikKICAgICAgICAg
ICAgIHJldHVybiBqc0Jvb2xlYW4odHJ1ZSk7CiAgICAgICAgIHYgPSBhc09iamVjdCh2KS0+cHJv
dG90eXBlKCk7CiAgICAgfQogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9G
dW5jRGVmaW5lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQ
cm90b0Z1bmNEZWZpbmVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhp
c1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwot
ICAgIGlmIChhcmdzLmF0KDEpLmdldENhbGxEYXRhKGNhbGxEYXRhKSA9PSBDYWxsVHlwZU5vbmUp
CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50KDEpLmdldENhbGxEYXRhKGNhbGxEYXRhKSA9PSBDYWxs
VHlwZU5vbmUpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCAi
aW52YWxpZCBnZXR0ZXIgdXNhZ2UiKTsKLSAgICB0aGlzVmFsdWUudG9UaGlzT2JqZWN0KGV4ZWMp
LT5kZWZpbmVHZXR0ZXIoZXhlYywgSWRlbnRpZmllcihleGVjLCBhcmdzLmF0KDApLnRvU3RyaW5n
KGV4ZWMpKSwgYXNPYmplY3QoYXJncy5hdCgxKSkpOworICAgIHRoaXNWYWx1ZS50b1RoaXNPYmpl
Y3QoZXhlYyktPmRlZmluZUdldHRlcihleGVjLCBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPmFyZ3Vt
ZW50KDApLnRvU3RyaW5nKGV4ZWMpKSwgYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMSkpKTsKICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVj
dFByb3RvRnVuY0RlZmluZVNldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1
ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
b2JqZWN0UHJvdG9GdW5jRGVmaW5lU2V0dGVyKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1Zh
bHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBDYWxsRGF0YSBjYWxs
RGF0YTsKLSAgICBpZiAoYXJncy5hdCgxKS5nZXRDYWxsRGF0YShjYWxsRGF0YSkgPT0gQ2FsbFR5
cGVOb25lKQorICAgIGlmIChleGVjLT5hcmd1bWVudCgxKS5nZXRDYWxsRGF0YShjYWxsRGF0YSkg
PT0gQ2FsbFR5cGVOb25lKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhF
cnJvciwgImludmFsaWQgc2V0dGVyIHVzYWdlIik7Ci0gICAgdGhpc1ZhbHVlLnRvVGhpc09iamVj
dChleGVjKS0+ZGVmaW5lU2V0dGVyKGV4ZWMsIElkZW50aWZpZXIoZXhlYywgYXJncy5hdCgwKS50
b1N0cmluZyhleGVjKSksIGFzT2JqZWN0KGFyZ3MuYXQoMSkpKTsKKyAgICB0aGlzVmFsdWUudG9U
aGlzT2JqZWN0KGV4ZWMpLT5kZWZpbmVTZXR0ZXIoZXhlYywgSWRlbnRpZmllcihleGVjLCBleGVj
LT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSksIGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDEp
KSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBvYmplY3RQcm90b0Z1bmNMb29rdXBHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG9iamVjdFByb3RvRnVuY0xvb2t1cEdldHRlcihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0g
ICAgcmV0dXJuIHRoaXNWYWx1ZS50b1RoaXNPYmplY3QoZXhlYyktPmxvb2t1cEdldHRlcihleGVj
LCBJZGVudGlmaWVyKGV4ZWMsIGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpKTsKKyAgICBKU1Zh
bHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKKyAgICByZXR1cm4gdGhpc1Zh
bHVlLnRvVGhpc09iamVjdChleGVjKS0+bG9va3VwR2V0dGVyKGV4ZWMsIElkZW50aWZpZXIoZXhl
YywgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpKTsKIH0KIAotSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0xvb2t1cFNldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jTG9va3VwU2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YykKIHsKLSAgICByZXR1cm4gdGhpc1ZhbHVlLnRvVGhpc09iamVjdChleGVjKS0+bG9va3VwU2V0
dGVyKGV4ZWMsIElkZW50aWZpZXIoZXhlYywgYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSkpOwor
ICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOworICAgIHJldHVy
biB0aGlzVmFsdWUudG9UaGlzT2JqZWN0KGV4ZWMpLT5sb29rdXBTZXR0ZXIoZXhlYywgSWRlbnRp
ZmllcihleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSkpOwogfQogCi1KU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jUHJvcGVydHlJc0VudW1lcmFibGUoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY1Byb3BlcnR5SXNF
bnVtZXJhYmxlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4ganNCb29sZWFuKHRoaXNW
YWx1ZS50b1RoaXNPYmplY3QoZXhlYyktPnByb3BlcnR5SXNFbnVtZXJhYmxlKGV4ZWMsIElkZW50
aWZpZXIoZXhlYywgYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSkpKTsKKyAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKKyAgICByZXR1cm4ganNCb29sZWFuKHRo
aXNWYWx1ZS50b1RoaXNPYmplY3QoZXhlYyktPnByb3BlcnR5SXNFbnVtZXJhYmxlKGV4ZWMsIElk
ZW50aWZpZXIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpKSk7CiB9CiAK
LUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
KQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKEV4
ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlz
VmFsdWUoKTsKICAgICByZXR1cm4gdGhpc1ZhbHVlLnRvVGhpc0pTU3RyaW5nKGV4ZWMpOwogfQog
Ci1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4
ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAg
ICAgcmV0dXJuIGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIltvYmplY3QgIiwgdGhpc1Zh
bHVlLnRvVGhpc09iamVjdChleGVjKS0+Y2xhc3NOYW1lKCksICJdIik7CiB9CiAKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuaAkocmV2aXNpb24gNjAzNDEpCisr
KyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIG1faGFzTm9Q
cm9wZXJ0aWVzV2l0aFVJbnQzMk5hbWVzOwogICAgIH07CiAKLSAgICBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgb2JqZWN0UHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1Zh
bHVlLCBjb25zdCBBcmdMaXN0Jik7CisgICAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFBy
b3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSopOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRl
eDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgJKHJldmlzaW9uIDYwMzQxKQorKysgSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4OSwx
NSArMTg5LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gbmV3IChnbG9iYWxE
YXRhKSBKU1N0cmluZyhnbG9iYWxEYXRhLCByb3BlQnVpbGRlci5yZWxlYXNlKCkpOwogICAgIH0K
IAotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorICAgIEFMV0FZU19JTkxJTkUg
SlNWYWx1ZSBqc1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdGhpc1ZhbHVlKQogICAg
IHsKICAgICAgICAgdW5zaWduZWQgZmliZXJDb3VudCA9IDA7CiAgICAgICAgIGlmIChMSUtFTFko
dGhpc1ZhbHVlLmlzU3RyaW5nKCkpKQogICAgICAgICAgICAgZmliZXJDb3VudCArPSBhc1N0cmlu
Zyh0aGlzVmFsdWUpLT5zaXplKCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgICsrZmliZXJD
b3VudDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3Muc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgICAgIEpTVmFsdWUgdiA9IGFyZ3MuYXQoaSk7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBleGVjLT5hcmd1bWVudENvdW50KCk7ICsraSkgeworICAgICAgICAg
ICAgSlNWYWx1ZSB2ID0gZXhlYy0+YXJndW1lbnQoaSk7CiAgICAgICAgICAgICBpZiAoTElLRUxZ
KHYuaXNTdHJpbmcoKSkpCiAgICAgICAgICAgICAgICAgZmliZXJDb3VudCArPSBhc1N0cmluZyh2
KS0+c2l6ZSgpOwogICAgICAgICAgICAgZWxzZQpAQCAtMjE2LDggKzIxNiw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSAwOwogICAgICAgICBib29sIG92ZXJm
bG93ID0gZmFsc2U7CiAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3Muc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIEpTVmFsdWUgdiA9IGFyZ3MuYXQoaSk7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGVjLT5hcmd1bWVudENvdW50KCk7ICsraSkgewor
ICAgICAgICAgICAgSlNWYWx1ZSB2ID0gZXhlYy0+YXJndW1lbnQoaSk7CiAgICAgICAgICAgICBp
ZiAoTElLRUxZKHYuaXNTdHJpbmcoKSkpCiAgICAgICAgICAgICAgICAgcm9wZUJ1aWxkZXIuYXBw
ZW5kKGFzU3RyaW5nKHYpKTsKICAgICAgICAgICAgIGVsc2UKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHJvcGVydHlTbG90LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb3BlcnR5U2xvdC5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm9wZXJ0eVNsb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMSArMzQs
NyBAQCBKU1ZhbHVlIFByb3BlcnR5U2xvdDo6ZnVuY3Rpb25HZXR0ZXIoRXhlCiAKICAgICBDYWxs
RGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IG1fZGF0YS5nZXR0ZXJGdW5j
LT5nZXRDYWxsRGF0YShjYWxsRGF0YSk7Ci0gICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlSG9z
dCkKLSAgICAgICAgcmV0dXJuIGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihleGVjLCBtX2RhdGEu
Z2V0dGVyRnVuYywgdGhpc1ZhbHVlKCksIGV4ZWMtPmVtcHR5TGlzdCgpKTsKLSAgICBBU1NFUlQo
Y2FsbFR5cGUgPT0gQ2FsbFR5cGVKUyk7Ci0gICAgLy8gRklYTUU6IENhbiB0aGlzIGJlIGRvbmUg
bW9yZSBlZmZpY2llbnRseSB1c2luZyB0aGUgY2FsbERhdGE/Ci0gICAgcmV0dXJuIGFzRnVuY3Rp
b24obV9kYXRhLmdldHRlckZ1bmMpLT5jYWxsKGV4ZWMsIHRoaXNWYWx1ZSgpLCBleGVjLT5lbXB0
eUxpc3QoKSk7CisgICAgcmV0dXJuIGNhbGwoZXhlYywgbV9kYXRhLmdldHRlckZ1bmMsIGNhbGxU
eXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlKCksIGV4ZWMtPmVtcHR5TGlzdCgpKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0
cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENv
bnN0cnVjdG9yLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE5LDggKzMxOSw5IEBA
IENvbnN0cnVjdFR5cGUgUmVnRXhwQ29uc3RydWN0b3I6OmdldENvbnMKIH0KIAogLy8gRUNNQSAx
NS4xMC4zCi1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxSZWdFeHBDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJn
cykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFJlZ0V4cENvbnN0cnVjdG9yKEV4
ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBBcmdMaXN0IGFyZ3MoZXhlYyk7CiAgICAgcmV0dXJuIGNv
bnN0cnVjdFJlZ0V4cChleGVjLCBhcmdzKTsKIH0KIApJbmRleDogSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwT2JqZWN0LmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMywyMSArMTEzLDIx
IEBAIHZvaWQgc2V0UmVnRXhwT2JqZWN0TGFzdEluZGV4KEV4ZWNTdGF0ZSoKICAgICBhc1JlZ0V4
cE9iamVjdChiYXNlT2JqZWN0KS0+c2V0TGFzdEluZGV4KHZhbHVlLnRvSW50ZWdlcihleGVjKSk7
CiB9CiAKLUpTVmFsdWUgUmVnRXhwT2JqZWN0Ojp0ZXN0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
QXJnTGlzdCYgYXJncykKK0pTVmFsdWUgUmVnRXhwT2JqZWN0Ojp0ZXN0KEV4ZWNTdGF0ZSogZXhl
YykKIHsKLSAgICByZXR1cm4ganNCb29sZWFuKG1hdGNoKGV4ZWMsIGFyZ3MpKTsKKyAgICByZXR1
cm4ganNCb29sZWFuKG1hdGNoKGV4ZWMpKTsKIH0KIAotSlNWYWx1ZSBSZWdFeHBPYmplY3Q6OmV4
ZWMoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBSZWdFeHBP
YmplY3Q6OmV4ZWMoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGlmIChtYXRjaChleGVjLCBhcmdz
KSkKKyAgICBpZiAobWF0Y2goZXhlYykpCiAgICAgICAgIHJldHVybiBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCktPnJlZ0V4cENvbnN0cnVjdG9yKCktPmFycmF5T2ZNYXRjaGVzKGV4ZWMpOwog
ICAgIHJldHVybiBqc051bGwoKTsKIH0KIAotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
YWxsUmVnRXhwT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9uLCBKU1Zh
bHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
YWxsUmVnRXhwT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gYXNSZWdFeHBP
YmplY3QoZnVuY3Rpb24pLT5leGVjKGV4ZWMsIGFyZ3MpOworICAgIHJldHVybiBhc1JlZ0V4cE9i
amVjdChleGVjLT5jYWxsZWUoKSktPmV4ZWMoZXhlYyk7CiB9CiAKIENhbGxUeXBlIFJlZ0V4cE9i
amVjdDo6Z2V0Q2FsbERhdGEoQ2FsbERhdGEmIGNhbGxEYXRhKQpAQCAtMTM3LDExICsxMzcsMTEg
QEAgQ2FsbFR5cGUgUmVnRXhwT2JqZWN0OjpnZXRDYWxsRGF0YShDYWxsRAogfQogCiAvLyBTaGFy
ZWQgaW1wbGVtZW50YXRpb24gdXNlZCBieSB0ZXN0IGFuZCBleGVjLgotYm9vbCBSZWdFeHBPYmpl
Y3Q6Om1hdGNoKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK2Jvb2wgUmVn
RXhwT2JqZWN0OjptYXRjaChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgUmVnRXhwQ29uc3RydWN0
b3IqIHJlZ0V4cENvbnN0cnVjdG9yID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5yZWdF
eHBDb25zdHJ1Y3RvcigpOwogCi0gICAgVVN0cmluZyBpbnB1dCA9IGFyZ3MuaXNFbXB0eSgpID8g
cmVnRXhwQ29uc3RydWN0b3ItPmlucHV0KCkgOiBhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpOwor
ICAgIFVTdHJpbmcgaW5wdXQgPSAhZXhlYy0+YXJndW1lbnRDb3VudCgpID8gcmVnRXhwQ29uc3Ry
dWN0b3ItPmlucHV0KCkgOiBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKTsKICAgICBp
ZiAoaW5wdXQuaXNOdWxsKCkpIHsKICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBHZW5lcmFsRXJy
b3IsIG1ha2VTdHJpbmcoIk5vIGlucHV0IHRvICIsIHRvU3RyaW5nKGV4ZWMpLCAiLiIpKTsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBP
YmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVj
dC5oCShyZXZpc2lvbiA2MDM0MSkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHZvaWQgc2V0TGFzdEluZGV4KGRvdWJsZSBsYXN0SW5kZXgpIHsgZC0+bGFzdEluZGV4
ID0gbGFzdEluZGV4OyB9CiAgICAgICAgIGRvdWJsZSBsYXN0SW5kZXgoKSBjb25zdCB7IHJldHVy
biBkLT5sYXN0SW5kZXg7IH0KIAotICAgICAgICBKU1ZhbHVlIHRlc3QoRXhlY1N0YXRlKiwgY29u
c3QgQXJnTGlzdCYpOwotICAgICAgICBKU1ZhbHVlIGV4ZWMoRXhlY1N0YXRlKiwgY29uc3QgQXJn
TGlzdCYpOworICAgICAgICBKU1ZhbHVlIHRlc3QoRXhlY1N0YXRlKik7CisgICAgICAgIEpTVmFs
dWUgZXhlYyhFeGVjU3RhdGUqKTsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90Jik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5RGVzY3JpcHRvciYpOwpAQCAt
NTYsNyArNTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNPYmpl
Y3RXaXRoR2xvYmFsT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKICAgICAgICAgCiAgICAgcHJpdmF0
ZToKLSAgICAgICAgYm9vbCBtYXRjaChFeGVjU3RhdGUqLCBjb25zdCBBcmdMaXN0Jik7CisgICAg
ICAgIGJvb2wgbWF0Y2goRXhlY1N0YXRlKik7CiAKICAgICAgICAgdmlydHVhbCBDYWxsVHlwZSBn
ZXRDYWxsRGF0YShDYWxsRGF0YSYpOwogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHBQcm90b3R5cGUuY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTAgKzM4LDEw
IEBAIG5hbWVzcGFjZSBKU0MgewogCiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKFJlZ0V4cFBy
b3RvdHlwZSk7CiAKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9GdW5j
VGVzdChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0
YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9GdW5jRXhlYyhFeGVjU3RhdGUq
LCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgcmVnRXhwUHJvdG9GdW5jQ29tcGlsZShFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
cmVnRXhwUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBj
b25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3Rv
RnVuY1Rlc3QoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4
cFByb3RvRnVuY0V4ZWMoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHJlZ0V4cFByb3RvRnVuY0NvbXBpbGUoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHJlZ0V4cFByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSopOwogCiAvLyBFQ01B
IDE1LjEwLjUKIApAQCAtNTgsMzUgKzU4LDM4IEBAIFJlZ0V4cFByb3RvdHlwZTo6UmVnRXhwUHJv
dG90eXBlKEV4ZWNTdGEKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0
aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAKLUpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCByZWdFeHBQcm90b0Z1bmNUZXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCByZWdFeHBQcm90b0Z1bmNUZXN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAoIXRoaXNWYWx1ZS5pbmhl
cml0cygmUmVnRXhwT2JqZWN0OjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhl
YywgVHlwZUVycm9yKTsKLSAgICByZXR1cm4gYXNSZWdFeHBPYmplY3QodGhpc1ZhbHVlKS0+dGVz
dChleGVjLCBhcmdzKTsKKyAgICByZXR1cm4gYXNSZWdFeHBPYmplY3QodGhpc1ZhbHVlKS0+dGVz
dChleGVjKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvRnVuY0V4ZWMo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvRnVuY0V4ZWMoRXhl
Y1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNW
YWx1ZSgpOwogICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZSZWdFeHBPYmplY3Q6OmluZm8p
KQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwotICAgIHJldHVy
biBhc1JlZ0V4cE9iamVjdCh0aGlzVmFsdWUpLT5leGVjKGV4ZWMsIGFyZ3MpOworICAgIHJldHVy
biBhc1JlZ0V4cE9iamVjdCh0aGlzVmFsdWUpLT5leGVjKGV4ZWMpOwogfQogCi1KU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgcmVnRXhwUHJvdG9GdW5jQ29tcGlsZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgcmVnRXhwUHJvdG9GdW5jQ29tcGlsZShFeGVjU3RhdGUqIGV4ZWMpCiB7Cisg
ICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKCF0
aGlzVmFsdWUuaW5oZXJpdHMoJlJlZ0V4cE9iamVjdDo6aW5mbykpCiAgICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKICAgICBSZWZQdHI8UmVnRXhwPiByZWdFeHA7
Ci0gICAgSlNWYWx1ZSBhcmcwID0gYXJncy5hdCgwKTsKLSAgICBKU1ZhbHVlIGFyZzEgPSBhcmdz
LmF0KDEpOworICAgIEpTVmFsdWUgYXJnMCA9IGV4ZWMtPmFyZ3VtZW50KDApOworICAgIEpTVmFs
dWUgYXJnMSA9IGV4ZWMtPmFyZ3VtZW50KDEpOwogICAgIAogICAgIGlmIChhcmcwLmluaGVyaXRz
KCZSZWdFeHBPYmplY3Q6OmluZm8pKSB7CiAgICAgICAgIGlmICghYXJnMS5pc1VuZGVmaW5lZCgp
KQogICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAiQ2Fubm90
IHN1cHBseSBmbGFncyB3aGVuIGNvbnN0cnVjdGluZyBvbmUgUmVnRXhwIGZyb20gYW5vdGhlci4i
KTsKICAgICAgICAgcmVnRXhwID0gYXNSZWdFeHBPYmplY3QoYXJnMCktPnJlZ0V4cCgpOwogICAg
IH0gZWxzZSB7Ci0gICAgICAgIFVTdHJpbmcgcGF0dGVybiA9IGFyZ3MuaXNFbXB0eSgpID8gVVN0
cmluZygiIikgOiBhcmcwLnRvU3RyaW5nKGV4ZWMpOworICAgICAgICBVU3RyaW5nIHBhdHRlcm4g
PSAhZXhlYy0+YXJndW1lbnRDb3VudCgpID8gVVN0cmluZygiIikgOiBhcmcwLnRvU3RyaW5nKGV4
ZWMpOwogICAgICAgICBVU3RyaW5nIGZsYWdzID0gYXJnMS5pc1VuZGVmaW5lZCgpID8gVVN0cmlu
ZygiIikgOiBhcmcxLnRvU3RyaW5nKGV4ZWMpOwogICAgICAgICByZWdFeHAgPSBSZWdFeHA6OmNy
ZWF0ZSgmZXhlYy0+Z2xvYmFsRGF0YSgpLCBwYXR0ZXJuLCBmbGFncyk7CiAgICAgfQpAQCAtOTks
OCArMTAyLDkgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvRnVuY0NvbQogICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhw
UHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhp
c1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90
b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUg
PSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJlJl
Z0V4cE9iamVjdDo6aW5mbykpIHsKICAgICAgICAgaWYgKHRoaXNWYWx1ZS5pbmhlcml0cygmUmVn
RXhwUHJvdG90eXBlOjppbmZvKSkKICAgICAgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJp
bmcoZXhlYywgIi8vIik7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0
cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0Nv
bnN0cnVjdG9yLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cmluZ0NvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMjEgKzMwLDIxIEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdGF0aWMgTkVWRVJfSU5MSU5FIEpTVmFsdWUgc3RyaW5n
RnJvbUNoYXJDb2RlU2xvd0Nhc2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQorc3RhdGljIE5FVkVSX0lOTElORSBKU1ZhbHVlIHN0cmluZ0Zyb21DaGFyQ29kZVNsb3dDYXNl
KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBhcmdzLnNpemUoKTsK
KyAgICB1bnNpZ25lZCBsZW5ndGggPSBleGVjLT5hcmd1bWVudENvdW50KCk7CiAgICAgVUNoYXIq
IGJ1ZjsKICAgICBQYXNzUmVmUHRyPFVTdHJpbmdJbXBsPiBpbXBsID0gVVN0cmluZ0ltcGw6OmNy
ZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWYpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgYnVmW2ldID0gc3RhdGljX2Nhc3Q8VUNoYXI+KGFy
Z3MuYXQoaSkudG9VSW50MzIoZXhlYykpOworICAgICAgICBidWZbaV0gPSBzdGF0aWNfY2FzdDxV
Q2hhcj4oZXhlYy0+YXJndW1lbnQoaSkudG9VSW50MzIoZXhlYykpOwogICAgIHJldHVybiBqc1N0
cmluZyhleGVjLCBpbXBsKTsKIH0KIAotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJp
bmdGcm9tQ2hhckNvZGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ0Zyb21D
aGFyQ29kZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgaWYgKExJS0VMWShhcmdzLnNpemUoKSA9
PSAxKSkKLSAgICAgICAgcmV0dXJuIGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGV4ZWMsIGFyZ3Mu
YXQoMCkudG9VSW50MzIoZXhlYykpOwotICAgIHJldHVybiBzdHJpbmdGcm9tQ2hhckNvZGVTbG93
Q2FzZShleGVjLCBhcmdzKTsKKyAgICBpZiAoTElLRUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA9
PSAxKSkKKyAgICAgICAgcmV0dXJuIGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGV4ZWMsIGV4ZWMt
PmFyZ3VtZW50KDApLnRvVUludDMyKGV4ZWMpKTsKKyAgICByZXR1cm4gc3RyaW5nRnJvbUNoYXJD
b2RlU2xvd0Nhc2UoZXhlYyk7CiB9CiAKIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoU3RyaW5n
Q29uc3RydWN0b3IpOwpAQCAtODAsMTEgKzgwLDExIEBAIENvbnN0cnVjdFR5cGUgU3RyaW5nQ29u
c3RydWN0b3I6OmdldENvbnMKIH0KIAogLy8gRUNNQSAxNS41LjEKLXN0YXRpYyBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY2FsbFN0cmluZ0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGljIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjYWxsU3RyaW5nQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGlm
IChhcmdzLmlzRW1wdHkoKSkKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKICAgICAg
ICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcoZXhlYyk7Ci0gICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMs
IGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpOworICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBl
eGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSk7CiB9CiAKIENhbGxUeXBlIFN0cmluZ0Nv
bnN0cnVjdG9yOjpnZXRDYWxsRGF0YShDYWxsRGF0YSYgY2FsbERhdGEpCkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiA2MDM0MSkKKysr
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDUsNDAgKzQ1LDM4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBBU1NFUlRfQ0xBU1NfRklU
U19JTl9DRUxMKFN0cmluZ1Byb3RvdHlwZSk7CiAKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgc3RyaW5nUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
LCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1By
b3RvRnVuY0NoYXJBdChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xp
c3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQ2hhckNv
ZGVBdChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0
YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQ29uY2F0KEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNJbmRleE9mKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzdHJpbmdQcm90b0Z1bmNMYXN0SW5kZXhPZihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFs
dWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5n
UHJvdG9GdW5jTWF0Y2goRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdM
aXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1JlcGxh
Y2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0
aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1NlYXJjaChFeGVjU3RhdGUq
LCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU2xpY2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBK
U1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0
cmluZ1Byb3RvRnVuY1NwbGl0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3Qg
QXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNT
dWJzdHIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1z
dGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1N1YnN0cmluZyhFeGVj
U3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVG9Mb3dlckNhc2UoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RvVXBwZXJDYXNlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzdHJpbmdQcm90b0Z1bmNMb2NhbGVDb21wYXJlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotCi1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0
cmluZ1Byb3RvRnVuY0JpZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU21h
bGwoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0
aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0JsaW5rKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNCb2xkKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJp
bmdQcm90b0Z1bmNGaXhlZChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jSXRh
bGljcyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0
YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU3RyaWtlKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTdWIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBK
U1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0
cmluZ1Byb3RvRnVuY1N1cChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jRm9u
dGNvbG9yKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwot
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNGb250c2l6ZShFeGVj
U3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQW5jaG9yKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBzdHJpbmdQcm90b0Z1bmNMaW5rKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYpOwotCi1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1By
b3RvRnVuY1RyaW0oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0
Jik7Ci1zdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RyaW1MZWZ0
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGlj
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUcmltUmlnaHQoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSopOworc3RhdGlj
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNDaGFyQXQoRXhlY1N0YXRlKik7
CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0NoYXJDb2RlQXQo
RXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVu
Y0NvbmNhdChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5n
UHJvdG9GdW5jSW5kZXhPZihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgc3RyaW5nUHJvdG9GdW5jTGFzdEluZGV4T2YoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY01hdGNoKEV4ZWNTdGF0ZSopOworc3RhdGlj
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNSZXBsYWNlKEV4ZWNTdGF0ZSop
Oworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTZWFyY2goRXhl
Y1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1Ns
aWNlKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90
b0Z1bmNTcGxpdChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
aW5nUHJvdG9GdW5jU3Vic3RyKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBzdHJpbmdQcm90b0Z1bmNTdWJzdHJpbmcoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RvTG93ZXJDYXNlKEV4ZWNTdGF0ZSopOwor
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUb1VwcGVyQ2FzZShF
eGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5j
TG9jYWxlQ29tcGFyZShFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
c3RyaW5nUHJvdG9GdW5jQmlnKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBzdHJpbmdQcm90b0Z1bmNTbWFsbChFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQmxpbmsoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0JvbGQoRXhlY1N0YXRlKik7CitzdGF0
aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0ZpeGVkKEV4ZWNTdGF0ZSop
Oworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNJdGFsaWNzKEV4
ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNT
dHJpa2UoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1By
b3RvRnVuY1N1YihFeGVjU3RhdGUqKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
aW5nUHJvdG9GdW5jU3VwKEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzdHJpbmdQcm90b0Z1bmNGb250Y29sb3IoRXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0ZvbnRzaXplKEV4ZWNTdGF0ZSopOworc3RhdGlj
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNBbmNob3IoRXhlY1N0YXRlKik7
CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0xpbmsoRXhlY1N0
YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RyaW0o
RXhlY1N0YXRlKik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVu
Y1RyaW1MZWZ0KEV4ZWNTdGF0ZSopOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJp
bmdQcm90b0Z1bmNUcmltUmlnaHQoRXhlY1N0YXRlKik7CiAKIH0KIApAQCAtMjg4LDExICsyODYs
MTIgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc1NwbGljZVN1YgogICAgIHJldHVy
biBqc1N0cmluZyhleGVjLCBpbXBsKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvRnVuY1JlcGxhY2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhp
c1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvRnVuY1JlcGxhY2UoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIEpTU3RyaW5nKiBzb3VyY2VWYWwgPSB0
aGlzVmFsdWUudG9UaGlzSlNTdHJpbmcoZXhlYyk7Ci0gICAgSlNWYWx1ZSBwYXR0ZXJuID0gYXJn
cy5hdCgwKTsKLSAgICBKU1ZhbHVlIHJlcGxhY2VtZW50ID0gYXJncy5hdCgxKTsKKyAgICBKU1Zh
bHVlIHBhdHRlcm4gPSBleGVjLT5hcmd1bWVudCgwKTsKKyAgICBKU1ZhbHVlIHJlcGxhY2VtZW50
ID0gZXhlYy0+YXJndW1lbnQoMSk7CiAKICAgICBVU3RyaW5nIHJlcGxhY2VtZW50U3RyaW5nOwog
ICAgIENhbGxEYXRhIGNhbGxEYXRhOwpAQCAtNDQ5LDggKzQ0OCw5IEBAIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNSZXAKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgc291
cmNlLnN1YnN0cigwLCBtYXRjaFBvcyksIHN1YnN0aXR1dGVCYWNrcmVmZXJlbmNlcyhyZXBsYWNl
bWVudFN0cmluZywgc291cmNlLCBvdmVjdG9yLCAwKSwgc291cmNlLnN1YnN0cihtYXRjaEVuZCkp
OwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVG9TdHJpbmcoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0
JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3Rh
dGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVl
KCk7CiAgICAgLy8gQWxzbyB1c2VkIGZvciB2YWx1ZU9mLgogCiAgICAgaWYgKHRoaXNWYWx1ZS5p
c1N0cmluZygpKQpAQCAtNDYyLDExICs0NjIsMTIgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0
cmluZ1Byb3RvRnVuY1RvUwogICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7
CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNDaGFyQXQoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0NoYXJBdChFeGVjU3Rh
dGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVl
KCk7CiAgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvVGhpc1N0cmluZyhleGVjKTsKICAgICB1
bnNpZ25lZCBsZW4gPSBzLnNpemUoKTsKLSAgICBKU1ZhbHVlIGEwID0gYXJncy5hdCgwKTsKKyAg
ICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKGEwLmlzVUludDMyKCkp
IHsKICAgICAgICAgdWludDMyX3QgaSA9IGEwLmFzVUludDMyKCk7CiAgICAgICAgIGlmIChpIDwg
bGVuKQpAQCAtNDc5LDExICs0ODAsMTIgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1By
b3RvRnVuY0NoYQogICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKGV4ZWMpOwogfQogCi1KU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQ2hhckNvZGVBdChFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQ2hhckNvZGVBdChFeGVjU3RhdGUqIGV4
ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAg
ICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvVGhpc1N0cmluZyhleGVjKTsKICAgICB1bnNpZ25l
ZCBsZW4gPSBzLnNpemUoKTsKLSAgICBKU1ZhbHVlIGEwID0gYXJncy5hdCgwKTsKKyAgICBKU1Zh
bHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKGEwLmlzVUludDMyKCkpIHsKICAg
ICAgICAgdWludDMyX3QgaSA9IGEwLmFzVUludDMyKCk7CiAgICAgICAgIGlmIChpIDwgbGVuKQpA
QCAtNDk2LDI1ICs0OTgsMjcgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVu
Y0NoYQogICAgIHJldHVybiBqc05hTihleGVjKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHN0cmluZ1Byb3RvRnVuY0NvbmNhdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1
ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
c3RyaW5nUHJvdG9GdW5jQ29uY2F0KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBpZiAodGhpc1Zh
bHVlLmlzU3RyaW5nKCkgJiYgKGFyZ3Muc2l6ZSgpID09IDEpKSB7Ci0gICAgICAgIEpTVmFsdWUg
diA9IGFyZ3MuYXQoMCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1Zh
bHVlKCk7CisgICAgaWYgKHRoaXNWYWx1ZS5pc1N0cmluZygpICYmIChleGVjLT5hcmd1bWVudENv
dW50KCkgPT0gMSkpIHsKKyAgICAgICAgSlNWYWx1ZSB2ID0gZXhlYy0+YXJndW1lbnQoMCk7CiAg
ICAgICAgIHJldHVybiB2LmlzU3RyaW5nKCkKICAgICAgICAgICAgID8ganNTdHJpbmcoZXhlYywg
YXNTdHJpbmcodGhpc1ZhbHVlKSwgYXNTdHJpbmcodikpCiAgICAgICAgICAgICA6IGpzU3RyaW5n
KGV4ZWMsIGFzU3RyaW5nKHRoaXNWYWx1ZSksIHYudG9TdHJpbmcoZXhlYykpOwogICAgIH0KIAot
ICAgIHJldHVybiBqc1N0cmluZyhleGVjLCB0aGlzVmFsdWUsIGFyZ3MpOworICAgIHJldHVybiBq
c1N0cmluZyhleGVjLCB0aGlzVmFsdWUpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
aW5nUHJvdG9GdW5jSW5kZXhPZihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0
aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
aW5nUHJvdG9GdW5jSW5kZXhPZihFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVl
LnRvVGhpc1N0cmluZyhleGVjKTsKICAgICBpbnQgbGVuID0gcy5zaXplKCk7CiAKLSAgICBKU1Zh
bHVlIGEwID0gYXJncy5hdCgwKTsKLSAgICBKU1ZhbHVlIGExID0gYXJncy5hdCgxKTsKKyAgICBK
U1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7CisgICAgSlNWYWx1ZSBhMSA9IGV4ZWMtPmFy
Z3VtZW50KDEpOwogICAgIFVTdHJpbmcgdTIgPSBhMC50b1N0cmluZyhleGVjKTsKICAgICBpbnQg
cG9zOwogICAgIGlmIChhMS5pc1VuZGVmaW5lZCgpKQpAQCAtNTM2LDEzICs1NDAsMTQgQEAgSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0luZAogICAgIHJldHVybiBqc051bWJl
cihleGVjLCByZXN1bHQpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9G
dW5jTGFzdEluZGV4T2YoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1Zh
bHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1By
b3RvRnVuY0xhc3RJbmRleE9mKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNW
YWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUu
dG9UaGlzU3RyaW5nKGV4ZWMpOwogICAgIGludCBsZW4gPSBzLnNpemUoKTsKIAotICAgIEpTVmFs
dWUgYTAgPSBhcmdzLmF0KDApOwotICAgIEpTVmFsdWUgYTEgPSBhcmdzLmF0KDEpOworICAgIEpT
VmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKKyAgICBKU1ZhbHVlIGExID0gZXhlYy0+YXJn
dW1lbnQoMSk7CiAKICAgICBVU3RyaW5nIHUyID0gYTAudG9TdHJpbmcoZXhlYyk7CiAgICAgZG91
YmxlIGRwb3MgPSBhMS50b0ludGVnZXJQcmVzZXJ2ZU5hTihleGVjKTsKQEAgLTU2MiwxMSArNTY3
LDEyIEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNMYXMKICAgICByZXR1
cm4ganNOdW1iZXIoZXhlYywgcmVzdWx0KTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0
cmluZ1Byb3RvRnVuY01hdGNoKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRo
aXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJp
bmdQcm90b0Z1bmNNYXRjaChFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFs
dWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRv
VGhpc1N0cmluZyhleGVjKTsKIAotICAgIEpTVmFsdWUgYTAgPSBhcmdzLmF0KDApOworICAgIEpT
VmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKIAogICAgIFVTdHJpbmcgdSA9IHM7CiAgICAg
UmVmUHRyPFJlZ0V4cD4gcmVnOwpAQCAtNjEzLDExICs2MTksMTIgQEAgSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHN0cmluZ1Byb3RvRnVuY01hdAogICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShleGVj
LCBsaXN0KTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1NlYXJj
aChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU2VhcmNo
KEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RU
aGlzVmFsdWUoKTsKICAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9UaGlzU3RyaW5nKGV4ZWMp
OwogCi0gICAgSlNWYWx1ZSBhMCA9IGFyZ3MuYXQoMCk7CisgICAgSlNWYWx1ZSBhMCA9IGV4ZWMt
PmFyZ3VtZW50KDApOwogCiAgICAgVVN0cmluZyB1ID0gczsKICAgICBSZWZQdHI8UmVnRXhwPiBy
ZWc7CkBAIC02MzgsMTMgKzY0NSwxNCBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJv
dG9GdW5jU2VhCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHBvcyk7CiB9CiAKLUpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTbGljZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU2xpY2UoRXhlY1N0YXRlKiBleGVjKQogeworICAg
IEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIFVTdHJpbmcg
cyA9IHRoaXNWYWx1ZS50b1RoaXNTdHJpbmcoZXhlYyk7CiAgICAgaW50IGxlbiA9IHMuc2l6ZSgp
OwogCi0gICAgSlNWYWx1ZSBhMCA9IGFyZ3MuYXQoMCk7Ci0gICAgSlNWYWx1ZSBhMSA9IGFyZ3Mu
YXQoMSk7CisgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOworICAgIEpTVmFsdWUg
YTEgPSBleGVjLT5hcmd1bWVudCgxKTsKIAogICAgIC8vIFRoZSBhcmcgcHJvY2Vzc2luZyBpcyB2
ZXJ5IG11Y2ggbGlrZSBBcnJheVByb3RvRnVuYzo6U2xpY2UKICAgICBkb3VibGUgc3RhcnQgPSBh
MC50b0ludGVnZXIoZXhlYyk7CkBAIC02NjIsMTIgKzY3MCwxMyBAQCBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc3RyaW5nUHJvdG9GdW5jU2xpCiAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcoZXhlYyk7
CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTcGxpdChFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU3BsaXQoRXhlY1N0YXRl
KiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgp
OwogICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1RoaXNTdHJpbmcoZXhlYyk7CiAKLSAgICBK
U1ZhbHVlIGEwID0gYXJncy5hdCgwKTsKLSAgICBKU1ZhbHVlIGExID0gYXJncy5hdCgxKTsKKyAg
ICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7CisgICAgSlNWYWx1ZSBhMSA9IGV4ZWMt
PmFyZ3VtZW50KDEpOwogCiAgICAgSlNBcnJheSogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJh
eShleGVjKTsKICAgICB1bnNpZ25lZCBpID0gMDsKQEAgLTcyNSwxMyArNzM0LDE0IEBAIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTcGwKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU3Vic3RyKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJn
cykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTdWJzdHIoRXhlY1N0YXRl
KiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgp
OwogICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1RoaXNTdHJpbmcoZXhlYyk7CiAgICAgaW50
IGxlbiA9IHMuc2l6ZSgpOwogCi0gICAgSlNWYWx1ZSBhMCA9IGFyZ3MuYXQoMCk7Ci0gICAgSlNW
YWx1ZSBhMSA9IGFyZ3MuYXQoMSk7CisgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDAp
OworICAgIEpTVmFsdWUgYTEgPSBleGVjLT5hcmd1bWVudCgxKTsKIAogICAgIGRvdWJsZSBzdGFy
dCA9IGEwLnRvSW50ZWdlcihleGVjKTsKICAgICBkb3VibGUgbGVuZ3RoID0gYTEuaXNVbmRlZmlu
ZWQoKSA/IGxlbiA6IGExLnRvSW50ZWdlcihleGVjKTsKQEAgLTc0NywxMyArNzU3LDE0IEBAIEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTdWIKICAgICByZXR1cm4ganNTdWJz
dHJpbmcoZXhlYywgcywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXJ0KSwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGxlbmd0aCkpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJv
dG9GdW5jU3Vic3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQ
cm90b0Z1bmNTdWJzdHJpbmcoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50
b1RoaXNTdHJpbmcoZXhlYyk7CiAgICAgaW50IGxlbiA9IHMuc2l6ZSgpOwogCi0gICAgSlNWYWx1
ZSBhMCA9IGFyZ3MuYXQoMCk7Ci0gICAgSlNWYWx1ZSBhMSA9IGFyZ3MuYXQoMSk7CisgICAgSlNW
YWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOworICAgIEpTVmFsdWUgYTEgPSBleGVjLT5hcmd1
bWVudCgxKTsKIAogICAgIGRvdWJsZSBzdGFydCA9IGEwLnRvTnVtYmVyKGV4ZWMpOwogICAgIGRv
dWJsZSBlbmQ7CkBAIC03NzgsOCArNzg5LDkgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvRnVuY1N1YgogICAgIHJldHVybiBqc1N1YnN0cmluZyhleGVjLCBzLCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oc3RhcnQpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZW5kKSAtIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihzdGFydCkpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5n
UHJvdG9GdW5jVG9Mb3dlckNhc2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUg
dGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQ
cm90b0Z1bmNUb0xvd2VyQ2FzZShFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgSlNTdHJpbmcqIHNWYWwgPSB0aGlz
VmFsdWUudG9UaGlzSlNTdHJpbmcoZXhlYyk7CiAgICAgY29uc3QgVVN0cmluZyYgcyA9IHNWYWwt
PnZhbHVlKGV4ZWMpOwogCkBAIC04MTUsOCArODI3LDkgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHN0cmluZ1Byb3RvRnVuY1RvTAogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBVU3RyaW5nOjph
ZG9wdChidWZmZXIpKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVu
Y1RvVXBwZXJDYXNlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5j
VG9VcHBlckNhc2UoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0g
ZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIEpTU3RyaW5nKiBzVmFsID0gdGhpc1ZhbHVlLnRv
VGhpc0pTU3RyaW5nKGV4ZWMpOwogICAgIGNvbnN0IFVTdHJpbmcmIHMgPSBzVmFsLT52YWx1ZShl
eGVjKTsKIApAQCAtODUyLDgxICs4NjUsOTMgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvRnVuY1RvVQogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBVU3RyaW5nOjphZG9wdChi
dWZmZXIpKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0xvY2Fs
ZUNvbXBhcmUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVu
Y0xvY2FsZUNvbXBhcmUoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGlmIChhcmdzLnNpemUoKSA8
IDEpCisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CisgICAg
aWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICByZXR1cm4ganNOdW1iZXIoZXhl
YywgMCk7CiAKICAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9UaGlzU3RyaW5nKGV4ZWMpOwot
ICAgIEpTVmFsdWUgYTAgPSBhcmdzLmF0KDApOworICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1
bWVudCgwKTsKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgbG9jYWxlQ29tcGFyZShzLCBhMC50
b1N0cmluZyhleGVjKSkpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9G
dW5jQmlnKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQmlnKEV4
ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlz
VmFsdWUoKTsKICAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9UaGlzU3RyaW5nKGV4ZWMpOwog
ICAgIHJldHVybiBqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8YmlnPiIsIHMsICI8L2Jp
Zz4iKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1NtYWxsKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlz
dCYpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU21hbGwoRXhlY1N0YXRl
KiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgp
OwogICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1RoaXNTdHJpbmcoZXhlYyk7CiAgICAgcmV0
dXJuIGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxzbWFsbD4iLCBzLCAiPC9zbWFsbD4i
KTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0JsaW5rKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYp
CitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQmxpbmsoRXhlY1N0YXRlKiBl
eGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwog
ICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1RoaXNTdHJpbmcoZXhlYyk7CiAgICAgcmV0dXJu
IGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxibGluaz4iLCBzLCAiPC9ibGluaz4iKTsK
IH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0JvbGQoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNCb2xkKEV4ZWNTdGF0ZSogZXhlYykK
IHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBV
U3RyaW5nIHMgPSB0aGlzVmFsdWUudG9UaGlzU3RyaW5nKGV4ZWMpOwogICAgIHJldHVybiBqc01h
a2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8Yj4iLCBzLCAiPC9iPiIpOwogfQogCi1KU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jRml4ZWQoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNGaXhlZChFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNW
YWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgVVN0cmluZyBzID0g
dGhpc1ZhbHVlLnRvVGhpc1N0cmluZyhleGVjKTsKICAgICByZXR1cm4ganNNYWtlTm9udHJpdmlh
bFN0cmluZyhleGVjLCAiPHR0PiIsIHMsICI8L3R0PiIpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc3RyaW5nUHJvdG9GdW5jSXRhbGljcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
SlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHN0cmluZ1Byb3RvRnVuY0l0YWxpY3MoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUg
dGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIFVTdHJpbmcgcyA9IHRoaXNW
YWx1ZS50b1RoaXNTdHJpbmcoZXhlYyk7CiAgICAgcmV0dXJuIGpzTWFrZU5vbnRyaXZpYWxTdHJp
bmcoZXhlYywgIjxpPiIsIHMsICI8L2k+Iik7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJpbmdQcm90b0Z1bmNTdHJpa2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUg
dGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQ
cm90b0Z1bmNTdHJpa2UoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVl
ID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1Ro
aXNTdHJpbmcoZXhlYyk7CiAgICAgcmV0dXJuIGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywg
IjxzdHJpa2U+IiwgcywgIjwvc3RyaWtlPiIpOwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
c3RyaW5nUHJvdG9GdW5jU3ViKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRo
aXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJv
dG9GdW5jU3ViKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4
ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9UaGlzU3Ry
aW5nKGV4ZWMpOwogICAgIHJldHVybiBqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8c3Vi
PiIsIHMsICI8L3N1Yj4iKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3Rv
RnVuY1N1cChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1N1cChF
eGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhp
c1ZhbHVlKCk7CiAgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvVGhpc1N0cmluZyhleGVjKTsK
ICAgICByZXR1cm4ganNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPHN1cD4iLCBzLCAiPC9z
dXA+Iik7CiB9CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNGb250Y29s
b3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0ZvbnRj
b2xvcihFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5o
b3N0VGhpc1ZhbHVlKCk7CiAgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLnRvVGhpc1N0cmluZyhl
eGVjKTsKLSAgICBKU1ZhbHVlIGEwID0gYXJncy5hdCgwKTsKKyAgICBKU1ZhbHVlIGEwID0gZXhl
Yy0+YXJndW1lbnQoMCk7CiAgICAgcmV0dXJuIGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywg
Ijxmb250IGNvbG9yPVwiIiwgYTAudG9TdHJpbmcoZXhlYyksICJcIj4iLCBzLCAiPC9mb250PiIp
OwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jRm9udHNpemUoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0ZvbnRzaXplKEV4
ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlz
VmFsdWUoKTsKICAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9UaGlzU3RyaW5nKGV4ZWMpOwot
ICAgIEpTVmFsdWUgYTAgPSBhcmdzLmF0KDApOworICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1
bWVudCgwKTsKIAogICAgIHVpbnQzMl90IHNtYWxsSW50ZWdlcjsKICAgICBpZiAoYTAuZ2V0VUlu
dDMyKHNtYWxsSW50ZWdlcikgJiYgc21hbGxJbnRlZ2VyIDw9IDkpIHsKQEAgLTk2NSwxNyArOTkw
LDE5IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNGb24KICAgICByZXR1
cm4ganNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPGZvbnQgc2l6ZT1cIiIsIGEwLnRvU3Ry
aW5nKGV4ZWMpLCAiXCI+IiwgcywgIjwvZm9udD4iKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHN0cmluZ1Byb3RvRnVuY0FuY2hvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNW
YWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgc3RyaW5nUHJvdG9GdW5jQW5jaG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBKU1ZhbHVl
IHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBVU3RyaW5nIHMgPSB0aGlz
VmFsdWUudG9UaGlzU3RyaW5nKGV4ZWMpOwotICAgIEpTVmFsdWUgYTAgPSBhcmdzLmF0KDApOwor
ICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICByZXR1cm4ganNNYWtlTm9u
dHJpdmlhbFN0cmluZyhleGVjLCAiPGEgbmFtZT1cIiIsIGEwLnRvU3RyaW5nKGV4ZWMpLCAiXCI+
IiwgcywgIjwvYT4iKTsKIH0KIAotSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVu
Y0xpbmsoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0xp
bmsoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9z
dFRoaXNWYWx1ZSgpOwogICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1RoaXNTdHJpbmcoZXhl
Yyk7Ci0gICAgSlNWYWx1ZSBhMCA9IGFyZ3MuYXQoMCk7CisgICAgSlNWYWx1ZSBhMCA9IGV4ZWMt
PmFyZ3VtZW50KDApOwogICAgIFVTdHJpbmcgbGlua1RleHQgPSBhMC50b1N0cmluZyhleGVjKTsK
IAogICAgIHVuc2lnbmVkIGxpbmtUZXh0U2l6ZSA9IGxpbmtUZXh0LnNpemUoKTsKQEAgLTEwMzYs
MTggKzEwNjMsMjEgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIHRyaW1TdHJpbmcoRXhlY1N0YQog
ICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBzdHIuc3Vic3RyKGxlZnQsIHJpZ2h0IC0gbGVmdCkp
OwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVHJpbShFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RyaW0oRXhlY1N0YXRlKiBleGVj
KQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAg
IHJldHVybiB0cmltU3RyaW5nKGV4ZWMsIHRoaXNWYWx1ZSwgVHJpbUxlZnQgfCBUcmltUmlnaHQp
OwogfQogCi1KU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVHJpbUxlZnQoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0
JikKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUcmltTGVmdChFeGVjU3Rh
dGUqIGV4ZWMpCiB7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVl
KCk7CiAgICAgcmV0dXJuIHRyaW1TdHJpbmcoZXhlYywgdGhpc1ZhbHVlLCBUcmltTGVmdCk7CiB9
CiAKLUpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUcmltUmlnaHQoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUcmltUmlnaHQoRXhlY1N0YXRl
KiBleGVjKQogeworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgp
OwogICAgIHJldHVybiB0cmltU3RyaW5nKGV4ZWMsIHRoaXNWYWx1ZSwgVHJpbVJpZ2h0KTsKIH0K
ICAgICAKSW5kZXg6IEphdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0R2x1ZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDYwMzczKQorKysgSmF2YVNjcmlwdEdsdWUv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTAtMDUtMjggIEdl
b2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTaW1wbGlmaWVkIHRoZSBob3N0IGNhbGxpbmcgY29u
dmVudGlvbi4KKworICAgICAgICBQQVJUIE9ORTogRnVuY3Rpb25hbCBjb2RlIGNoYW5nZXMuCisg
ICAgICAgIAorICAgICAgICBbIE5vbmUgaW4gSmF2YVNjcmlwdEdsdWUgXQorICAgICAgICAKKyAg
ICAgICAgUEFSVCBUV086IEdsb2JhbCBzZWFyY2ggYW5kIHJlcGxhY2UuCisgICAgICAgIAorICAg
ICAgICBJbiB0aGUgYXJlYXMgYmVsb3csIEkgdXNlZCBnbG9iYWwgc2VhcmNoLWFuZC1yZXBsYWNl
IHRvIGNoYW5nZQorICAgICAgICAgICAgKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYpID0+IChFeGVjU3RhdGUqKQorICAgICAgICAgICAgYXJncy5zaXplKCkg
PT4gZXhlYy0+YXJndW1lbnRDb3VudCgpCisgICAgICAgICAgICBhcmdzLmF0KGkpID0+IGV4ZWMt
PmFyZ3VtZW50KGkpCisKKyAgICAgICAgKiBKU09iamVjdC5jcHA6CisgICAgICAgIChuYXRpdmVD
YWxsRnVuY3Rpb24pOgorICAgICAgICAqIFVzZXJPYmplY3RJbXAuY3BwOgorICAgICAgICAoVXNl
ck9iamVjdEltcDo6Y2FsbEFzRnVuY3Rpb24pOgorICAgICAgICAqIFVzZXJPYmplY3RJbXAuaDoK
KwpJbmRleDogSmF2YVNjcmlwdEdsdWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRHbHVlL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBKYXZhU2NyaXB0R2x1
ZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDEwICs3MywxMCBAQCB2b2lkIEpT
VXNlck9iamVjdDo6U2V0UHJvcGVydHkoQ0ZTdHJpbmdSCiAKIH0KIAotc3RhdGljIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBuYXRpdmVDYWxsRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogZnVuY3Rpb25PYmplY3QsIEpTVmFsdWUgIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJn
cyk7Ci1zdGF0aWMgSlNWYWx1ZSAgbmF0aXZlQ2FsbEZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIGZ1bmN0aW9uT2JqZWN0LCBKU1ZhbHVlICB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG5hdGl2ZUNhbGxGdW5jdGlv
bihFeGVjU3RhdGUqIGV4ZWMpOworc3RhdGljIEpTVmFsdWUgIG5hdGl2ZUNhbGxGdW5jdGlvbihF
eGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFVzZXJPYmplY3RJbXAq
PihmdW5jdGlvbk9iamVjdCktPmNhbGxBc0Z1bmN0aW9uKGV4ZWMsIGFzT2JqZWN0KHRoaXNWYWx1
ZSksIGFyZ3MpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxVc2VyT2JqZWN0SW1wKj4oZXhlYy0+
Y2FsbGVlKCkpLT5jYWxsQXNGdW5jdGlvbihleGVjKTsKIH0KIAogQ2FsbFR5cGUgSlNVc2VyT2Jq
ZWN0OjpnZXRDYWxsRGF0YShDYWxsRGF0YSYgY2FsbERhdGEpCkluZGV4OiBKYXZhU2NyaXB0R2x1
ZS9Vc2VyT2JqZWN0SW1wLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0R2x1ZS9Vc2VyT2Jq
ZWN0SW1wLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBKYXZhU2NyaXB0R2x1ZS9Vc2VyT2JqZWN0
SW1wLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsMTggKzU2LDE4IEBAIENhbGxUeXBlIFVzZXJP
YmplY3RJbXA6OmdldENhbGxEYXRhKENhbGwKICAgICByZXR1cm4gZkpTVXNlck9iamVjdCA/IGZK
U1VzZXJPYmplY3QtPmdldENhbGxEYXRhKGNhbGxEYXRhKSA6IENhbGxUeXBlTm9uZTsKIH0KIAot
SlNWYWx1ZSBVc2VyT2JqZWN0SW1wOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIEpT
T2JqZWN0ICp0aGlzT2JqLCBjb25zdCBBcmdMaXN0ICZhcmdzKQorSlNWYWx1ZSBVc2VyT2JqZWN0
SW1wOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMpCiB7CiAgICAgSlNWYWx1ZSByZXN1
bHQgPSBqc1VuZGVmaW5lZCgpOwotICAgIEpTVXNlck9iamVjdCoganNUaGlzT2JqID0gS0pTVmFs
dWVUb0pTT2JqZWN0KHRoaXNPYmosIGV4ZWMpOworICAgIEpTVXNlck9iamVjdCoganNUaGlzT2Jq
ID0gS0pTVmFsdWVUb0pTT2JqZWN0KGV4ZWMtPmhvc3RUaGlzVmFsdWUoKS50b1RoaXNPYmplY3Qo
ZXhlYyksIGV4ZWMpOwogICAgIGlmIChqc1RoaXNPYmopIHsKLSAgICAgICAgQ0ZJbmRleCBhcmdD
b3VudCA9IGFyZ3Muc2l6ZSgpOworICAgICAgICBDRkluZGV4IGFyZ0NvdW50ID0gZXhlYy0+YXJn
dW1lbnRDb3VudCgpOwogICAgICAgICBDRkFycmF5Q2FsbEJhY2tzIGFycmF5Q2FsbEJhY2tzOwog
ICAgICAgICBKU1R5cGVHZXRDRkFycmF5Q2FsbEJhY2tzKCZhcnJheUNhbGxCYWNrcyk7CiAgICAg
ICAgIENGTXV0YWJsZUFycmF5UmVmIGpzQXJncyA9IENGQXJyYXlDcmVhdGVNdXRhYmxlKDAsIDAs
ICZhcnJheUNhbGxCYWNrcyk7CiAgICAgICAgIGlmIChqc0FyZ3MpIHsKICAgICAgICAgICAgIGZv
ciAoQ0ZJbmRleCBpID0gMDsgaSA8IGFyZ0NvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICBK
U1VzZXJPYmplY3QqIGpzQXJnID0gS0pTVmFsdWVUb0pTT2JqZWN0KGFyZ3MuYXQoaSksIGV4ZWMp
OworICAgICAgICAgICAgICAgIEpTVXNlck9iamVjdCoganNBcmcgPSBLSlNWYWx1ZVRvSlNPYmpl
Y3QoZXhlYy0+YXJndW1lbnQoaSksIGV4ZWMpOwogICAgICAgICAgICAgICAgIENGQXJyYXlBcHBl
bmRWYWx1ZShqc0FyZ3MsICh2b2lkKilqc0FyZyk7CiAgICAgICAgICAgICAgICAganNBcmctPlJl
bGVhc2UoKTsKICAgICAgICAgICAgIH0KSW5kZXg6IEphdmFTY3JpcHRHbHVlL1VzZXJPYmplY3RJ
bXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0R2x1ZS9Vc2VyT2JqZWN0SW1wLmgJKHJldmlz
aW9uIDYwMzQxKQorKysgSmF2YVNjcmlwdEdsdWUvVXNlck9iamVjdEltcC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBnZXRPd25Q
cm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25N
b2RlIG1vZGUgPSBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKIAotICAgIHZpcnR1YWwgSlNW
YWx1ZSBjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICp0aGlzT2JqLCBj
b25zdCBBcmdMaXN0ICZhcmdzKTsKKyAgICB2aXJ0dWFsIEpTVmFsdWUgY2FsbEFzRnVuY3Rpb24o
RXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4
ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7CiAgICAgdmlydHVh
bCB2b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAKSW5kZXg6IFdlYkNvcmUvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA2MDM3MykK
KysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYwIEBACisy
MDEwLTA1LTI4ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2ltcGxpZmllZCB0aGUgaG9z
dCBjYWxsaW5nIGNvbnZlbnRpb24uCisKKyAgICAgICAgUEFSVCBPTkU6IEZ1bmN0aW9uYWwgY29k
ZSBjaGFuZ2VzLgorICAgICAgICAKKyAgICAgICAgWyBOb25lIGluIFdlYkNvcmUgXQorICAgICAg
ICAKKyAgICAgICAgUEFSVCBUV086IEdsb2JhbCBzZWFyY2ggYW5kIHJlcGxhY2UuCisgICAgICAg
IAorICAgICAgICBJbiB0aGUgYXJlYXMgYmVsb3csIEkgdXNlZCBnbG9iYWwgc2VhcmNoLWFuZC1y
ZXBsYWNlIHRvIGNoYW5nZQorICAgICAgICAgICAgKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYpID0+IChFeGVjU3RhdGUqKQorICAgICAgICAgICAgYXJncy5z
aXplKCkgPT4gZXhlYy0+YXJndW1lbnRDb3VudCgpCisgICAgICAgICAgICBhcmdzLmF0KGkpID0+
IGV4ZWMtPmFyZ3VtZW50KGkpCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVy
Vmlld0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0FycmF5QnVmZmVyVmlldzo6c2xp
Y2UpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQXJyYXlCdWZmZXJWaWV3SGVscGVyLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRXZWJHTEFycmF5SGVscGVyKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0RmlsbENvbG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTdHJva2VDb2xvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c3Ryb2tlUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1h
Z2VGcm9tUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6c2V0U2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpjcmVhdGVQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpjcmVhdGVJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpKU0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZmlsbFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SlND
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnN0cm9rZVRleHQpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTQ2xpcGJvYXJkQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2xpcGJvYXJk
OjpjbGVhckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SlNDbGlwYm9hcmQ6OmdldERhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNDbGlwYm9hcmQ6OnNldERyYWdJbWFnZSk6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNET01BcHBsaWNhdGlvbkNhY2hlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTRE9NQXBwbGljYXRpb25DYWNoZTo6aGFzSXRlbSk6CisgICAgICAgIChXZWJDb3Jl
OjpKU0RPTUFwcGxpY2F0aW9uQ2FjaGU6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUFw
cGxpY2F0aW9uQ2FjaGU6OnJlbW92ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01Gb3Jt
RGF0YUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUZvcm1EYXRhOjphcHBlbmQp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTRE9NV2luZG93OjpvcGVuKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2lu
ZG93OjpzaG93TW9kYWxEaWFsb2cpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OnBv
c3RNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpzZXRUaW1lb3V0KToK
KyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpzZXRJbnRlcnZhbCk6CisgICAgICAgIChX
ZWJDb3JlOjpKU0RPTVdpbmRvdzo6YWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3Jl
OjpKU0RPTVdpbmRvdzo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpK
U0RPTVdpbmRvdzo6b3BlbkRhdGFiYXNlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RhdGFi
YXNlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRGF0YWJhc2U6OmNoYW5nZVZlcnNp
b24pOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6SlNEYXRhYmFzZTo6dHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNEYXRh
YmFzZTo6cmVhZFRyYW5zYWN0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RhdGFiYXNl
U3luY0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RhdGFiYXNlU3luYzo6Y2hhbmdl
VmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVUcmFuc2FjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpKU0RhdGFiYXNlU3luYzo6dHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6SlNEYXRhYmFzZVN5bmM6OnJlYWRUcmFuc2FjdGlvbik6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNEZWRpY2F0ZWRXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTRGVkaWNhdGVkV29ya2VyQ29udGV4dDo6cG9zdE1lc3NhZ2UpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTRGVza3RvcE5vdGlmaWNhdGlvbnNDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNOb3RpZmljYXRpb25DZW50ZXI6OnJlcXVlc3RQZXJtaXNzaW9uKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0Zsb2F0QXJyYXlDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNG
bG9hdEFycmF5OjpzZXQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTR2VvbG9jYXRpb25DdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNHZW9sb2NhdGlvbjo6Z2V0Q3VycmVudFBvc2l0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTR2VvbG9jYXRpb246OndhdGNoUG9zaXRpb24pOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y2FsbEhUTUxBbGxDb2xsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTSFRNTEFsbENvbGxlY3Rpb246Oml0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MQWxs
Q29sbGVjdGlvbjo6bmFtZWRJdGVtKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxDYW52
YXNFbGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTENhbnZhc0VsZW1l
bnQ6OmdldENvbnRleHQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTENvbGxlY3Rpb25D
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FsbEhUTUxDb2xsZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTSFRNTENvbGxlY3Rpb246Oml0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6
SlNIVE1MQ29sbGVjdGlvbjo6bmFtZWRJdGVtKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hU
TUxEb2N1bWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxEb2N1bWVudDo6
b3Blbik6CisgICAgICAgIChXZWJDb3JlOjpkb2N1bWVudFdyaXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTSFRNTERvY3VtZW50Ojp3cml0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxEb2N1
bWVudDo6d3JpdGVsbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MSW5wdXRFbGVtZW50
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTElucHV0RWxlbWVudDo6c2V0U2Vs
ZWN0aW9uUmFuZ2UpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTE9wdGlvbnNDb2xsZWN0
aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTE9wdGlvbnNDb2xsZWN0aW9u
OjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MT3B0aW9uc0NvbGxlY3Rpb246OnJlbW92
ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxTZWxlY3RFbGVtZW50OjpyZW1vdmUpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpK
U0hpc3Rvcnk6OnB1c2hTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0hpc3Rvcnk6OnJlcGxh
Y2VTdGF0ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6OmRhdGFiYXNl
Rm9ySWQpOgorICAgICAgICAoV2ViQ29yZTo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6OmN1cnJlbnRD
YWxsRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6Om5vZGVG
b3JJZCk6CisgICAgICAgIChXZWJDb3JlOjpKU0luamVjdGVkU2NyaXB0SG9zdDo6cHVzaE5vZGVQ
YXRoVG9Gcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpKU0luamVjdGVkU2NyaXB0SG9zdDo6
c2VsZWN0RGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6
OnNlbGVjdERPTVN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SlNJbmplY3RlZFNjcmlwdEhv
c3Q6OnJlcG9ydERpZERpc3BhdGNoT25JbmplY3RlZFNjcmlwdCk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnBsYXRmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTSW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojpwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTSW5z
cGVjdG9yRnJvbnRlbmRIb3N0OjpzaG93Q29udGV4dE1lbnUpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTSW50MTZBcnJheUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0ludDE2QXJy
YXk6OnNldCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJbnQzMkFycmF5Q3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTSW50MzJBcnJheTo6c2V0KToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0ludDhBcnJheUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0ludDhBcnJh
eTo6c2V0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0phdmFTY3JpcHRDYWxsRnJhbWVDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpldmFsdWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0phdmFTY3JpcHRDYWxsRnJhbWU6OnNjb3BlVHlwZSk6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU0xvY2F0aW9uOjpyZXBsYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRp
b246OnJlbG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uOjphc3NpZ24pOgorICAg
ICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6dG9TdHJpbmcpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTWVzc2Fn
ZUV2ZW50Ojppbml0TWVzc2FnZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01lc3Nh
Z2VQb3J0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTWVzc2FnZVBvcnQ6OnBvc3RN
ZXNzYWdlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpoYW5kbGVQb3N0TWVzc2FnZSk6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNOb2RlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTm9kZTo6aW5zZXJ0QmVm
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTm9kZTo6cmVwbGFjZUNoaWxkKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTTm9kZTo6cmVtb3ZlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2Rl
OjphcHBlbmRDaGlsZCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNOb2RlTGlzdEN1c3RvbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpjYWxsTm9kZUxpc3QpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTUGx1Z2luRWxlbWVudEZ1bmN0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYWxs
UGx1Z2luKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NRTFJlc3VsdFNldFJvd0xpc3RDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNTUUxSZXN1bHRTZXRSb3dMaXN0OjppdGVtKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTU1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTcWwpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTU1FMVHJhbnNhY3Rpb25TeW5jQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTU1FMVHJhbnNhY3Rpb25TeW5jOjpleGVjdXRlU3FsKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU1NWR0xlbmd0aEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR0xlbmd0
aDo6Y29udmVydFRvU3BlY2lmaWVkVW5pdHMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1ZH
TWF0cml4Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHTWF0cml4OjptdWx0aXBs
eSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR01hdHJpeDo6aW52ZXJzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpKU1NWR01hdHJpeDo6cm90YXRlRnJvbVZlY3Rvcik6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNTVkdQT0RMaXN0Q3VzdG9tLmg6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1BPRExp
c3RDdXN0b206OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHUE9ETGlzdEN1c3RvbTo6
aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1BPRExpc3RDdXN0b206OmdldEl0
ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdQT0RMaXN0Q3VzdG9tOjppbnNlcnRJdGVtQmVm
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHUE9ETGlzdEN1c3RvbTo6cmVwbGFjZUl0ZW0p
OgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdQT0RMaXN0Q3VzdG9tOjpyZW1vdmVJdGVtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTU1ZHUE9ETGlzdEN1c3RvbTo6YXBwZW5kSXRlbSk6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNTVkdQYXRoU2VnTGlzdEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU1NWR1BhdGhTZWdMaXN0OjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1Bh
dGhTZWdMaXN0Ojppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHUGF0aFNlZ0xp
c3Q6OmdldEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdQYXRoU2VnTGlzdDo6aW5zZXJ0
SXRlbUJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1BhdGhTZWdMaXN0OjpyZXBsYWNl
SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1BhdGhTZWdMaXN0OjpyZW1vdmVJdGVtKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHUGF0aFNlZ0xpc3Q6OmFwcGVuZEl0ZW0pOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTVWludDE2QXJyYXlDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNVaW50MTZBcnJheTo6c2V0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1VpbnQzMkFy
cmF5Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVWludDMyQXJyYXk6OnNldCk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNVaW50OEFycmF5Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTVWludDhBcnJheTo6c2V0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dlYkdM
UmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6YnVmZmVyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6YnVmZmVyU3ViRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRPYmpl
Y3RQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldEJ1ZmZlclBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQYXJhbWV0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFByb2dyYW1QYXJhbWV0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFJlbmRlcmJ1ZmZl
clBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Z2V0U2hhZGVyUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRUZXhQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmdldFVuaWZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmdldFZlcnRleEF0dHJpYik6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpkYXRh
RnVuY3Rpb25mKToKKyAgICAgICAgKFdlYkNvcmU6OmRhdGFGdW5jdGlvbmkpOgorICAgICAgICAo
V2ViQ29yZTo6ZGF0YUZ1bmN0aW9uTWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMml2KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2l2KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGl2KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkpT
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4M2Z2KToKKyAgICAgICAgKFdlYkNv
cmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4NGZ2KToKKyAgICAgICAg
KFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjJmdik6
CisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmli
M2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhB
dHRyaWI0ZnYpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTV2ViU29ja2V0OjpzZW5kKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU1dvcmtlckNvbnRleHRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNXb3Jr
ZXJDb250ZXh0OjppbXBvcnRTY3JpcHRzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2VyQ29u
dGV4dDo6c2V0VGltZW91dCk6CisgICAgICAgIChXZWJDb3JlOjpKU1dvcmtlckNvbnRleHQ6OnNl
dEludGVydmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2VyQ29udGV4dDo6b3BlbkRhdGFi
YXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2VyQ29udGV4dDo6b3BlbkRhdGFiYXNlU3lu
Yyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0b20uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNXb3JrZXI6OnBvc3RNZXNzYWdlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTWE1MSHR0cFJl
cXVlc3Q6Om9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6SlNYTUxIdHRwUmVxdWVzdDo6c2VuZCk6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTWFNMVFByb2Nlc3Nvcjo6aW1wb3J0U3R5bGVzaGVldCk6CisgICAgICAg
IChXZWJDb3JlOjpKU1hTTFRQcm9jZXNzb3I6OnRyYW5zZm9ybVRvRnJhZ21lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNYU0xUUHJvY2Vzc29yOjp0cmFuc2Zvcm1Ub0RvY3VtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTWFNMVFByb2Nlc3Nvcjo6c2V0UGFyYW1ldGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTWFNMVFByb2Nlc3Nvcjo6Z2V0UGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTWFNMVFByb2Nlc3Nvcjo6cmVtb3ZlUGFyYW1ldGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9TY2hlZHVsZWRBY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NoZWR1bGVkQWN0aW9u
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2NoZWR1bGVkQWN0aW9uOjpTY2hlZHVsZWRB
Y3Rpb24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5oOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL1NjcmlwdENhbGxGcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHRDYWxsRnJhbWU6OlNjcmlwdENhbGxGcmFtZSk6CisgICAgICAgICogYmluZGluZ3MvanMv
U2NyaXB0Q2FsbEZyYW1lLmg6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q2FsbFN0YWNr
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhbGxTdGFjazo6U2NyaXB0Q2FsbFN0YWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhbGxTdGFjazo6aW5pdGlhbGl6ZSk6CisgICAg
ICAgICogYmluZGluZ3MvanMvU2NyaXB0Q2FsbFN0YWNrLmg6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgICogYnJpZGdlL2MvY19pbnN0YW5j
ZS5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDSW5zdGFuY2U6Omludm9rZU1ldGhvZCk6
CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDSW5zdGFuY2U6Omludm9rZURlZmF1bHRNZXRob2Qp
OgorICAgICAgICAqIGJyaWRnZS9jL2NfaW5zdGFuY2UuaDoKKyAgICAgICAgKiBicmlkZ2Uvam5p
L2pzYy9KYXZhSW5zdGFuY2VKU0MuY3BwOgorICAgICAgICAoSmF2YUluc3RhbmNlOjppbnZva2VN
ZXRob2QpOgorICAgICAgICAqIGJyaWRnZS9qbmkvanNjL0phdmFJbnN0YW5jZUpTQy5oOgorICAg
ICAgICAqIGJyaWRnZS9qc2MvQnJpZGdlSlNDLmg6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpJ
bnN0YW5jZTo6aW52b2tlRGVmYXVsdE1ldGhvZCk6CisgICAgICAgICogYnJpZGdlL29iamMvb2Jq
Y19pbnN0YW5jZS5oOgorICAgICAgICAqIGJyaWRnZS9vYmpjL29iamNfaW5zdGFuY2UubW06Cisg
ICAgICAgIChPYmpjSW5zdGFuY2U6Omludm9rZU1ldGhvZCk6CisgICAgICAgIChPYmpjSW5zdGFu
Y2U6Omludm9rZU9iamNNZXRob2QpOgorICAgICAgICAoT2JqY0luc3RhbmNlOjppbnZva2VEZWZh
dWx0TWV0aG9kKToKKyAgICAgICAgKiBicmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW06CisgICAg
ICAgIChKU0M6OkJpbmRpbmdzOjpjYWxsT2JqQ0ZhbGxiYWNrT2JqZWN0KToKKyAgICAgICAgKiBi
cmlkZ2UvcnVudGltZV9tZXRob2QuY3BwOgorICAgICAgICAoSlNDOjpjYWxsUnVudGltZU1ldGhv
ZCk6CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6
QmluZGluZ3M6OmNhbGxSdW50aW1lT2JqZWN0KToKKwogMjAxMC0wNS0yOCAgQWRhbSBCYXJ0aCAg
PGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyVmlld0N1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyVmlld0N1c3RvbS5j
cHAJKHJldmlzaW9uIDYwMzQxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVy
Vmlld0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDIzICs2NywyMyBAQCBKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiB9CiAKLUpTVmFsdWUgSlNBcnJheUJ1ZmZlclZpZXc6OnNsaWNlKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNBcnJheUJ1ZmZlclZpZXc6OnNsaWNl
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBBcnJheUJ1ZmZlclZpZXcqIGFycmF5ID0gcmVpbnRl
cnByZXRfY2FzdDxBcnJheUJ1ZmZlclZpZXcqPihpbXBsKCkpOwogCiAgICAgaW50IHN0YXJ0LCBl
bmQ7Ci0gICAgc3dpdGNoIChhcmdzLnNpemUoKSkgeworICAgIHN3aXRjaCAoZXhlYy0+YXJndW1l
bnRDb3VudCgpKSB7CiAgICAgY2FzZSAwOgogICAgICAgICBzdGFydCA9IDA7CiAgICAgICAgIGVu
ZCA9IGFycmF5LT5sZW5ndGgoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAxOgotICAgICAg
ICBzdGFydCA9IGFyZ3MuYXQoMCkudG9JbnQzMihleGVjKTsKKyAgICAgICAgc3RhcnQgPSBleGVj
LT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOwogICAgICAgICBlbmQgPSBhcnJheS0+bGVuZ3Ro
KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN0YXJ0ID0gYXJncy5h
dCgwKS50b0ludDMyKGV4ZWMpOwotICAgICAgICBlbmQgPSBhcmdzLmF0KDEpLnRvSW50MzIoZXhl
Yyk7CisgICAgICAgIHN0YXJ0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKKyAg
ICAgICAgZW5kID0gZXhlYy0+YXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKICAgICB9CiAgICAg
cmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGFycmF5LT5zbGljZShzdGFydCwgZW5k
KSk7CiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXJyYXlCdWZmZXJWaWV3SGVscGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyVmlld0hl
bHBlci5oCShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNBcnJheUJ1
ZmZlclZpZXdIZWxwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsMjkgKzM4LDI5IEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIHRlbXBsYXRlIDxjbGFzcyBUPgotSlNDOjpKU1ZhbHVlIHNldFdl
YkdMQXJyYXlIZWxwZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFQqIGltcGwsIEpTQzo6QXJnTGlz
dCBjb25zdCYgYXJncywgVCogKCpjb252ZXJzaW9uRnVuYykoSlNDOjpKU1ZhbHVlKSkKK0pTQzo6
SlNWYWx1ZSBzZXRXZWJHTEFycmF5SGVscGVyKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBUKiBpbXBs
LCBUKiAoKmNvbnZlcnNpb25GdW5jKShKU0M6OkpTVmFsdWUpKQogewotICAgIGlmIChhcmdzLnNp
emUoKSA8IDEpCisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKGV4ZWMsIEpTQzo6U3ludGF4RXJyb3IpOwogCi0gICAgVCogYXJyYXkg
PSAoKmNvbnZlcnNpb25GdW5jKShhcmdzLmF0KDApKTsKKyAgICBUKiBhcnJheSA9ICgqY29udmVy
c2lvbkZ1bmMpKGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICBpZiAoYXJyYXkpIHsKICAgICAgICAg
Ly8gdm9pZCBzZXQoaW4gV2ViR0w8VD5BcnJheSBhcnJheSwgW09wdGlvbmFsXSBpbiB1bnNpZ25l
ZCBsb25nIG9mZnNldCk7CiAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IDA7Ci0gICAgICAgIGlm
IChhcmdzLnNpemUoKSA9PSAyKQotICAgICAgICAgICAgb2Zmc2V0ID0gYXJncy5hdCgxKS50b0lu
dDMyKGV4ZWMpOworICAgICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID09IDIpCisgICAg
ICAgICAgICBvZmZzZXQgPSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwogICAgICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICAgICAgaW1wbC0+c2V0KGFycmF5LCBvZmZzZXQs
IGVjKTsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICAgICAgcmV0dXJu
IEpTQzo6anNVbmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBpZiAoYXJncy5hdCgwKS5pc09iamVj
dCgpKSB7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkpIHsKICAgICAgICAg
Ly8gdm9pZCBzZXQoaW4gc2VxdWVuY2U8bG9uZz4gYXJyYXksIFtPcHRpb25hbF0gaW4gdW5zaWdu
ZWQgbG9uZyBvZmZzZXQpOwotICAgICAgICBKU0M6OkpTT2JqZWN0KiBhcnJheSA9IEpTQzo6YXNP
YmplY3QoYXJncy5hdCgwKSk7CisgICAgICAgIEpTQzo6SlNPYmplY3QqIGFycmF5ID0gSlNDOjph
c09iamVjdChleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgICAgIHVpbnQzMl90IG9mZnNldCA9IDA7
Ci0gICAgICAgIGlmIChhcmdzLnNpemUoKSA9PSAyKQotICAgICAgICAgICAgb2Zmc2V0ID0gYXJn
cy5hdCgxKS50b0ludDMyKGV4ZWMpOworICAgICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgp
ID09IDIpCisgICAgICAgICAgICBvZmZzZXQgPSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4
ZWMpOwogICAgICAgICB1aW50MzJfdCBsZW5ndGggPSBhcnJheS0+Z2V0KGV4ZWMsIEpTQzo6SWRl
bnRpZmllcihleGVjLCAibGVuZ3RoIikpLnRvSW50MzIoZXhlYyk7CiAgICAgICAgIGlmIChvZmZz
ZXQgPiBpbXBsLT5sZW5ndGgoKQogICAgICAgICAgICAgfHwgb2Zmc2V0ICsgbGVuZ3RoID4gaW1w
bC0+bGVuZ3RoKCkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlND
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4OSw3IEBAIHZvaWQgSlNDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OnNldEZpbGwKICAgICBjb250ZXh0LT5zZXRGaWxsU3R5bGUodG9IVE1MQ2FudmFzU3R5
bGUoZXhlYywgdmFsdWUpKTsKIH0KIAotSlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6c2V0RmlsbENvbG9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pT
VmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZpbGxDb2xvcihFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0gc3RhdGlj
X2Nhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKj4oaW1wbCgpKTsKIApAQCAtOTksMjYgKzk5
LDI2IEBAIEpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEYKICAgICAvLyBu
dW1iZXIgYXJnLCBudW1iZXIgYXJnID0gZ3JheSBjb2xvciwgYWxwaGEKICAgICAvLyA0IGFyZ3Mg
PSByLCBnLCBiLCBhCiAgICAgLy8gNSBhcmdzID0gYywgbSwgeSwgaywgYQotICAgIHN3aXRjaCAo
YXJncy5zaXplKCkpIHsKKyAgICBzd2l0Y2ggKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSkgewogICAg
ICAgICBjYXNlIDE6Ci0gICAgICAgICAgICBpZiAoYXJncy5hdCgwKS5pc1N0cmluZygpKQotICAg
ICAgICAgICAgICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcih1c3RyaW5nVG9TdHJpbmcoYXNTdHJp
bmcoYXJncy5hdCgwKSktPnZhbHVlKGV4ZWMpKSk7CisgICAgICAgICAgICBpZiAoZXhlYy0+YXJn
dW1lbnQoMCkuaXNTdHJpbmcoKSkKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29s
b3IodXN0cmluZ1RvU3RyaW5nKGFzU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApKS0+dmFsdWUoZXhl
YykpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxs
Q29sb3IoYXJncy5hdCgwKS50b0Zsb2F0KGV4ZWMpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0
LT5zZXRGaWxsQ29sb3IoZXhlYy0+YXJndW1lbnQoMCkudG9GbG9hdChleGVjKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgaWYgKGFyZ3MuYXQoMCku
aXNTdHJpbmcoKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IodXN0cmlu
Z1RvU3RyaW5nKGFzU3RyaW5nKGFyZ3MuYXQoMCkpLT52YWx1ZShleGVjKSksIGFyZ3MuYXQoMSku
dG9GbG9hdChleGVjKSk7CisgICAgICAgICAgICBpZiAoZXhlYy0+YXJndW1lbnQoMCkuaXNTdHJp
bmcoKSkKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IodXN0cmluZ1RvU3Ry
aW5nKGFzU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApKS0+dmFsdWUoZXhlYykpLCBleGVjLT5hcmd1
bWVudCgxKS50b0Zsb2F0KGV4ZWMpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoYXJncy5hdCgwKS50b0Zsb2F0KGV4ZWMpLCBhcmdzLmF0
KDEpLnRvRmxvYXQoZXhlYykpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldEZpbGxDb2xv
cihleGVjLT5hcmd1bWVudCgwKS50b0Zsb2F0KGV4ZWMpLCBleGVjLT5hcmd1bWVudCgxKS50b0Zs
b2F0KGV4ZWMpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIDQ6Ci0gICAgICAg
ICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoYXJncy5hdCgwKS50b0Zsb2F0KGV4ZWMpLCBhcmdz
LmF0KDEpLnRvRmxvYXQoZXhlYyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXJncy5hdCgyKS50b0Zsb2F0KGV4ZWMpLCBhcmdzLmF0KDMpLnRvRmxvYXQoZXhlYykpOworICAg
ICAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKGV4ZWMtPmFyZ3VtZW50KDApLnRvRmxvYXQo
ZXhlYyksIGV4ZWMtPmFyZ3VtZW50KDEpLnRvRmxvYXQoZXhlYyksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXhlYy0+YXJndW1lbnQoMikudG9GbG9hdChleGVjKSwgZXhlYy0+
YXJndW1lbnQoMykudG9GbG9hdChleGVjKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSA1OgotICAgICAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKGFyZ3MuYXQoMCkudG9G
bG9hdChleGVjKSwgYXJncy5hdCgxKS50b0Zsb2F0KGV4ZWMpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFyZ3MuYXQoMikudG9GbG9hdChleGVjKSwgYXJncy5hdCgzKS50b0Zs
b2F0KGV4ZWMpLCBhcmdzLmF0KDQpLnRvRmxvYXQoZXhlYykpOworICAgICAgICAgICAgY29udGV4
dC0+c2V0RmlsbENvbG9yKGV4ZWMtPmFyZ3VtZW50KDApLnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFy
Z3VtZW50KDEpLnRvRmxvYXQoZXhlYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXhlYy0+YXJndW1lbnQoMikudG9GbG9hdChleGVjKSwgZXhlYy0+YXJndW1lbnQoMykudG9G
bG9hdChleGVjKSwgZXhlYy0+YXJndW1lbnQoNCkudG9GbG9hdChleGVjKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KGV4ZWMsIFN5bnRheEVycm9yKTsKQEAgLTEyNiw3ICsxMjYsNyBAQCBKU1ZhbHVlIEpTQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9ICAg
IAogCi1KU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTdHJva2VDb2xvcihF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpzZXRTdHJva2VDb2xvcihFeGVjU3RhdGUqIGV4ZWMpCiB7IAogICAg
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogY29udGV4dCA9IHN0YXRpY19jYXN0PENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRCo+KGltcGwoKSk7CiAKQEAgLTEzNiwyNiArMTM2LDI2IEBAIEpTVmFs
dWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFMKICAgICAvLyBudW1iZXIgYXJnLCBu
dW1iZXIgYXJnID0gZ3JheSBjb2xvciwgYWxwaGEKICAgICAvLyA0IGFyZ3MgPSByLCBnLCBiLCBh
CiAgICAgLy8gNSBhcmdzID0gYywgbSwgeSwgaywgYQotICAgIHN3aXRjaCAoYXJncy5zaXplKCkp
IHsKKyAgICBzd2l0Y2ggKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSkgewogICAgICAgICBjYXNlIDE6
Ci0gICAgICAgICAgICBpZiAoYXJncy5hdCgwKS5pc1N0cmluZygpKQotICAgICAgICAgICAgICAg
IGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKHVzdHJpbmdUb1N0cmluZyhhc1N0cmluZyhhcmdzLmF0
KDApKS0+dmFsdWUoZXhlYykpKTsKKyAgICAgICAgICAgIGlmIChleGVjLT5hcmd1bWVudCgwKS5p
c1N0cmluZygpKQorICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKHVzdHJp
bmdUb1N0cmluZyhhc1N0cmluZyhleGVjLT5hcmd1bWVudCgwKSktPnZhbHVlKGV4ZWMpKSk7CiAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3Io
YXJncy5hdCgwKS50b0Zsb2F0KGV4ZWMpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRT
dHJva2VDb2xvcihleGVjLT5hcmd1bWVudCgwKS50b0Zsb2F0KGV4ZWMpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICBpZiAoYXJncy5hdCgwKS5pc1N0
cmluZygpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKHVzdHJpbmdU
b1N0cmluZyhhc1N0cmluZyhhcmdzLmF0KDApKS0+dmFsdWUoZXhlYykpLCBhcmdzLmF0KDEpLnRv
RmxvYXQoZXhlYykpOworICAgICAgICAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50KDApLmlzU3RyaW5n
KCkpCisgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IodXN0cmluZ1RvU3Ry
aW5nKGFzU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApKS0+dmFsdWUoZXhlYykpLCBleGVjLT5hcmd1
bWVudCgxKS50b0Zsb2F0KGV4ZWMpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihhcmdzLmF0KDApLnRvRmxvYXQoZXhlYyksIGFyZ3Mu
YXQoMSkudG9GbG9hdChleGVjKSk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tl
Q29sb3IoZXhlYy0+YXJndW1lbnQoMCkudG9GbG9hdChleGVjKSwgZXhlYy0+YXJndW1lbnQoMSku
dG9GbG9hdChleGVjKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSA0OgotICAg
ICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoYXJncy5hdCgwKS50b0Zsb2F0KGV4ZWMp
LCBhcmdzLmF0KDEpLnRvRmxvYXQoZXhlYyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhcmdzLmF0KDIpLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoMykudG9GbG9hdChleGVj
KSk7CisgICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihleGVjLT5hcmd1bWVudCgw
KS50b0Zsb2F0KGV4ZWMpLCBleGVjLT5hcmd1bWVudCgxKS50b0Zsb2F0KGV4ZWMpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlYy0+YXJndW1lbnQoMikudG9GbG9hdChl
eGVjKSwgZXhlYy0+YXJndW1lbnQoMykudG9GbG9hdChleGVjKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSA1OgotICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3Io
YXJncy5hdCgwKS50b0Zsb2F0KGV4ZWMpLCBhcmdzLmF0KDEpLnRvRmxvYXQoZXhlYyksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLmF0KDIpLnRvRmxvYXQoZXhlYyks
IGFyZ3MuYXQoMykudG9GbG9hdChleGVjKSwgYXJncy5hdCg0KS50b0Zsb2F0KGV4ZWMpKTsKKyAg
ICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKGV4ZWMtPmFyZ3VtZW50KDApLnRvRmxv
YXQoZXhlYyksIGV4ZWMtPmFyZ3VtZW50KDEpLnRvRmxvYXQoZXhlYyksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBleGVjLT5hcmd1bWVudCgyKS50b0Zsb2F0KGV4ZWMpLCBl
eGVjLT5hcmd1bWVudCgzKS50b0Zsb2F0KGV4ZWMpLCBleGVjLT5hcmd1bWVudCg0KS50b0Zsb2F0
KGV4ZWMpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOwpAQCAtMTY0LDIxICsxNjQs
MjEgQEAgSlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0UwogICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpzdHJva2VSZWN0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFs
dWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnN0cm9rZVJlY3QoRXhlY1N0YXRlKiBleGVj
KQogeyAKICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGNvbnRleHQgPSBzdGF0aWNfY2Fz
dDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqPihpbXBsKCkpOwogICAgIAotICAgIGlmIChhcmdz
LnNpemUoKSA8PSA0KQotICAgICAgICBjb250ZXh0LT5zdHJva2VSZWN0KGFyZ3MuYXQoMCkudG9G
bG9hdChleGVjKSwgYXJncy5hdCgxKS50b0Zsb2F0KGV4ZWMpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFyZ3MuYXQoMikudG9GbG9hdChleGVjKSwgYXJncy5hdCgzKS50b0Zsb2F0KGV4
ZWMpKTsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDw9IDQpCisgICAgICAgIGNvbnRl
eHQtPnN0cm9rZVJlY3QoZXhlYy0+YXJndW1lbnQoMCkudG9GbG9hdChleGVjKSwgZXhlYy0+YXJn
dW1lbnQoMSkudG9GbG9hdChleGVjKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVj
LT5hcmd1bWVudCgyKS50b0Zsb2F0KGV4ZWMpLCBleGVjLT5hcmd1bWVudCgzKS50b0Zsb2F0KGV4
ZWMpKTsKICAgICBlbHNlCi0gICAgICAgIGNvbnRleHQtPnN0cm9rZVJlY3QoYXJncy5hdCgwKS50
b0Zsb2F0KGV4ZWMpLCBhcmdzLmF0KDEpLnRvRmxvYXQoZXhlYyksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYXJncy5hdCgyKS50b0Zsb2F0KGV4ZWMpLCBhcmdzLmF0KDMpLnRvRmxvYXQo
ZXhlYyksIGFyZ3MuYXQoNCkudG9GbG9hdChleGVjKSk7CisgICAgICAgIGNvbnRleHQtPnN0cm9r
ZVJlY3QoZXhlYy0+YXJndW1lbnQoMCkudG9GbG9hdChleGVjKSwgZXhlYy0+YXJndW1lbnQoMSku
dG9GbG9hdChleGVjKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjLT5hcmd1bWVu
dCgyKS50b0Zsb2F0KGV4ZWMpLCBleGVjLT5hcmd1bWVudCgzKS50b0Zsb2F0KGV4ZWMpLCBleGVj
LT5hcmd1bWVudCg0KS50b0Zsb2F0KGV4ZWMpKTsKIAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OyAgICAKIH0KIAotSlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdl
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZShFeGVjU3RhdGUqIGV4ZWMpCiB7IAogICAgIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRCogY29udGV4dCA9IHN0YXRpY19jYXN0PENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRCo+KGltcGwoKSk7CiAKQEAgLTE4OCw3ICsxODgsNyBAQCBKU1ZhbHVlIEpT
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3CiAgICAgLy8gICAgIGRyYXdJbWFnZShpbWcs
IHN4LCBzeSwgc3csIHNoLCBkeCwgZHksIGR3LCBkaCkKICAgICAvLyBDb21wb3NpdGUgb3BlcmF0
aW9uIGlzIHNwZWNpZmllZCB3aXRoIGdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbi4KICAgICAvLyBU
aGUgaW1nIHBhcmFtZXRlciBjYW4gYmUgYSA8aW1nPiBvciA8Y2FudmFzPiBlbGVtZW50LgotICAg
IEpTVmFsdWUgdmFsdWUgPSBhcmdzLmF0KDApOworICAgIEpTVmFsdWUgdmFsdWUgPSBleGVjLT5h
cmd1bWVudCgwKTsKICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAgICAgSlNPYmplY3QqIG8gPSBhc09iamVjdCh2
YWx1ZSk7CkBAIC0xOTYsMjAgKzE5NiwyMCBAQCBKU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpkcmF3CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgaWYgKG8tPmluaGVy
aXRzKCZKU0hUTUxJbWFnZUVsZW1lbnQ6OnNfaW5mbykpIHsKICAgICAgICAgSFRNTEltYWdlRWxl
bWVudCogaW1nRWx0ID0gc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudCo+KHN0YXRpY19jYXN0
PEpTSFRNTEVsZW1lbnQqPihvKS0+aW1wbCgpKTsKLSAgICAgICAgc3dpdGNoIChhcmdzLnNpemUo
KSkgeworICAgICAgICBzd2l0Y2ggKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSkgewogICAgICAgICAg
ICAgY2FzZSAzOgotICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWdFbHQsIGFy
Z3MuYXQoMSkudG9GbG9hdChleGVjKSwgYXJncy5hdCgyKS50b0Zsb2F0KGV4ZWMpLCBlYyk7Cisg
ICAgICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKGltZ0VsdCwgZXhlYy0+YXJndW1lbnQo
MSkudG9GbG9hdChleGVjKSwgZXhlYy0+YXJndW1lbnQoMikudG9GbG9hdChleGVjKSwgZWMpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSA1OgotICAgICAgICAgICAg
ICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWdFbHQsIGFyZ3MuYXQoMSkudG9GbG9hdChleGVjKSwg
YXJncy5hdCgyKS50b0Zsb2F0KGV4ZWMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhcmdzLmF0KDMpLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoNCkudG9GbG9hdChleGVjKSwg
ZWMpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWdFbHQsIGV4ZWMtPmFy
Z3VtZW50KDEpLnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFyZ3VtZW50KDIpLnRvRmxvYXQoZXhlYyks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWMtPmFyZ3VtZW50KDMpLnRv
RmxvYXQoZXhlYyksIGV4ZWMtPmFyZ3VtZW50KDQpLnRvRmxvYXQoZXhlYyksIGVjKTsKICAgICAg
ICAgICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgY2FzZSA5OgotICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJ
bWFnZShpbWdFbHQsIEZsb2F0UmVjdChhcmdzLmF0KDEpLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQo
MikudG9GbG9hdChleGVjKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJn
cy5hdCgzKS50b0Zsb2F0KGV4ZWMpLCBhcmdzLmF0KDQpLnRvRmxvYXQoZXhlYykpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlY3QoYXJncy5hdCg1KS50b0Zsb2F0
KGV4ZWMpLCBhcmdzLmF0KDYpLnRvRmxvYXQoZXhlYyksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFyZ3MuYXQoNykudG9GbG9hdChleGVjKSwgYXJncy5hdCg4KS50b0Zsb2F0
KGV4ZWMpKSwgZWMpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWdFbHQs
IEZsb2F0UmVjdChleGVjLT5hcmd1bWVudCgxKS50b0Zsb2F0KGV4ZWMpLCBleGVjLT5hcmd1bWVu
dCgyKS50b0Zsb2F0KGV4ZWMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
eGVjLT5hcmd1bWVudCgzKS50b0Zsb2F0KGV4ZWMpLCBleGVjLT5hcmd1bWVudCg0KS50b0Zsb2F0
KGV4ZWMpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWN0KGV4
ZWMtPmFyZ3VtZW50KDUpLnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFyZ3VtZW50KDYpLnRvRmxvYXQo
ZXhlYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWMtPmFyZ3VtZW50
KDcpLnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFyZ3VtZW50KDgpLnRvRmxvYXQoZXhlYykpLCBlYyk7
CiAgICAgICAgICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0yMTcsMjAgKzIxNywyMCBAQCBK
U1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3CiAgICAgICAgIH0KICAgICB9
IGVsc2UgaWYgKG8tPmluaGVyaXRzKCZKU0hUTUxDYW52YXNFbGVtZW50OjpzX2luZm8pKSB7CiAg
ICAgICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBzdGF0aWNfY2FzdDxIVE1MQ2FudmFz
RWxlbWVudCo+KHN0YXRpY19jYXN0PEpTSFRNTEVsZW1lbnQqPihvKS0+aW1wbCgpKTsKLSAgICAg
ICAgc3dpdGNoIChhcmdzLnNpemUoKSkgeworICAgICAgICBzd2l0Y2ggKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSkgewogICAgICAgICAgICAgY2FzZSAzOgotICAgICAgICAgICAgICAgIGNvbnRleHQt
PmRyYXdJbWFnZShjYW52YXMsIGFyZ3MuYXQoMSkudG9GbG9hdChleGVjKSwgYXJncy5hdCgyKS50
b0Zsb2F0KGV4ZWMpLCBlYyk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKGNh
bnZhcywgZXhlYy0+YXJndW1lbnQoMSkudG9GbG9hdChleGVjKSwgZXhlYy0+YXJndW1lbnQoMiku
dG9GbG9hdChleGVjKSwgZWMpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
Y2FzZSA1OgotICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShjYW52YXMsIGFyZ3Mu
YXQoMSkudG9GbG9hdChleGVjKSwgYXJncy5hdCgyKS50b0Zsb2F0KGV4ZWMpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLmF0KDMpLnRvRmxvYXQoZXhlYyksIGFyZ3Mu
YXQoNCkudG9GbG9hdChleGVjKSwgZWMpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJ
bWFnZShjYW52YXMsIGV4ZWMtPmFyZ3VtZW50KDEpLnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFyZ3Vt
ZW50KDIpLnRvRmxvYXQoZXhlYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGV4ZWMtPmFyZ3VtZW50KDMpLnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFyZ3VtZW50KDQpLnRvRmxv
YXQoZXhlYyksIGVjKTsKICAgICAgICAgICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSA5OgotICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShjYW52YXMsIEZsb2F0UmVjdChhcmdzLmF0KDEpLnRv
RmxvYXQoZXhlYyksIGFyZ3MuYXQoMikudG9GbG9hdChleGVjKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXJncy5hdCgzKS50b0Zsb2F0KGV4ZWMpLCBhcmdzLmF0KDQpLnRv
RmxvYXQoZXhlYykpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJl
Y3QoYXJncy5hdCg1KS50b0Zsb2F0KGV4ZWMpLCBhcmdzLmF0KDYpLnRvRmxvYXQoZXhlYyksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MuYXQoNykudG9GbG9hdChleGVj
KSwgYXJncy5hdCg4KS50b0Zsb2F0KGV4ZWMpKSwgZWMpOworICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmRyYXdJbWFnZShjYW52YXMsIEZsb2F0UmVjdChleGVjLT5hcmd1bWVudCgxKS50b0Zsb2F0
KGV4ZWMpLCBleGVjLT5hcmd1bWVudCgyKS50b0Zsb2F0KGV4ZWMpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBleGVjLT5hcmd1bWVudCgzKS50b0Zsb2F0KGV4ZWMpLCBleGVj
LT5hcmd1bWVudCg0KS50b0Zsb2F0KGV4ZWMpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRmxvYXRSZWN0KGV4ZWMtPmFyZ3VtZW50KDUpLnRvRmxvYXQoZXhlYyksIGV4ZWMt
PmFyZ3VtZW50KDYpLnRvRmxvYXQoZXhlYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGV4ZWMtPmFyZ3VtZW50KDcpLnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFyZ3VtZW50KDgp
LnRvRmxvYXQoZXhlYykpLCBlYyk7CiAgICAgICAgICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIGVjKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CkBA
IC0yMzksMjAgKzIzOSwyMCBAQCBKU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpk
cmF3CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIH0gZWxzZSBpZiAoby0+aW5oZXJpdHMoJkpTSFRN
TFZpZGVvRWxlbWVudDo6c19pbmZvKSkgewogICAgICAgICAgICAgSFRNTFZpZGVvRWxlbWVudCog
dmlkZW8gPSBzdGF0aWNfY2FzdDxIVE1MVmlkZW9FbGVtZW50Kj4oc3RhdGljX2Nhc3Q8SlNIVE1M
RWxlbWVudCo+KG8pLT5pbXBsKCkpOwotICAgICAgICAgICAgc3dpdGNoIChhcmdzLnNpemUoKSkg
eworICAgICAgICAgICAgc3dpdGNoIChleGVjLT5hcmd1bWVudENvdW50KCkpIHsKICAgICAgICAg
ICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZSh2
aWRlbywgYXJncy5hdCgxKS50b0Zsb2F0KGV4ZWMpLCBhcmdzLmF0KDIpLnRvRmxvYXQoZXhlYyks
IGVjKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKHZpZGVvLCBleGVj
LT5hcmd1bWVudCgxKS50b0Zsb2F0KGV4ZWMpLCBleGVjLT5hcmd1bWVudCgyKS50b0Zsb2F0KGV4
ZWMpLCBlYyk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNh
c2UgNToKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKHZpZGVvLCBhcmdz
LmF0KDEpLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoMikudG9GbG9hdChleGVjKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MuYXQoMykudG9GbG9hdChleGVjKSwg
YXJncy5hdCg0KS50b0Zsb2F0KGV4ZWMpLCBlYyk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmRyYXdJbWFnZSh2aWRlbywgZXhlYy0+YXJndW1lbnQoMSkudG9GbG9hdChleGVjKSwgZXhl
Yy0+YXJndW1lbnQoMikudG9GbG9hdChleGVjKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGV4ZWMtPmFyZ3VtZW50KDMpLnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFyZ3Vt
ZW50KDQpLnRvRmxvYXQoZXhlYyksIGVjKTsKICAgICAgICAgICAgICAgICAgICAgc2V0RE9NRXhj
ZXB0aW9uKGV4ZWMsIGVjKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgY2FzZSA5OgotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2Uodmlk
ZW8sIEZsb2F0UmVjdChhcmdzLmF0KDEpLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoMikudG9GbG9h
dChleGVjKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MuYXQo
MykudG9GbG9hdChleGVjKSwgYXJncy5hdCg0KS50b0Zsb2F0KGV4ZWMpKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVjdChhcmdzLmF0KDUpLnRvRmxvYXQo
ZXhlYyksIGFyZ3MuYXQoNikudG9GbG9hdChleGVjKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFyZ3MuYXQoNykudG9GbG9hdChleGVjKSwgYXJncy5hdCg4KS50b0Zs
b2F0KGV4ZWMpKSwgZWMpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2Uo
dmlkZW8sIEZsb2F0UmVjdChleGVjLT5hcmd1bWVudCgxKS50b0Zsb2F0KGV4ZWMpLCBleGVjLT5h
cmd1bWVudCgyKS50b0Zsb2F0KGV4ZWMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXhlYy0+YXJndW1lbnQoMykudG9GbG9hdChleGVjKSwgZXhlYy0+YXJndW1lbnQo
NCkudG9GbG9hdChleGVjKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBGbG9hdFJlY3QoZXhlYy0+YXJndW1lbnQoNSkudG9GbG9hdChleGVjKSwgZXhlYy0+YXJndW1l
bnQoNikudG9GbG9hdChleGVjKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGV4ZWMtPmFyZ3VtZW50KDcpLnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFyZ3VtZW50KDgpLnRv
RmxvYXQoZXhlYykpLCBlYyk7CiAgICAgICAgICAgICAgICAgICAgIHNldERPTUV4Y2VwdGlvbihl
eGVjLCBlYyk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CkBAIC0yNjYsMTEgKzI2NiwxMSBAQCBKU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpkcmF3CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7ICAgIAogfQogCi1KU1ZhbHVl
IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1hZ2VGcm9tUmVjdChFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpkcmF3SW1hZ2VGcm9tUmVjdChFeGVjU3RhdGUqIGV4ZWMpCiB7IAogICAgIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRCogY29udGV4dCA9IHN0YXRpY19jYXN0PENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRCo+KGltcGwoKSk7CiAgICAgCi0gICAgSlNWYWx1ZSB2YWx1ZSA9IGFyZ3MuYXQo
MCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGlmICghdmFs
dWUuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9y
KTsKICAgICBKU09iamVjdCogbyA9IGFzT2JqZWN0KHZhbHVlKTsKQEAgLTI3OCw1MiArMjc4LDUy
IEBAIEpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXcKICAgICBpZiAoIW8t
PmluaGVyaXRzKCZKU0hUTUxJbWFnZUVsZW1lbnQ6OnNfaW5mbykpCiAgICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAgICAgY29udGV4dC0+ZHJhd0ltYWdlRnJvbVJl
Y3Qoc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudCo+KHN0YXRpY19jYXN0PEpTSFRNTEVsZW1l
bnQqPihvKS0+aW1wbCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLmF0
KDEpLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoMikudG9GbG9hdChleGVjKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhcmdzLmF0KDMpLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoNCku
dG9GbG9hdChleGVjKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLmF0KDUp
LnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoNikudG9GbG9hdChleGVjKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhcmdzLmF0KDcpLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoOCkudG9G
bG9hdChleGVjKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c3RyaW5nVG9TdHJp
bmcoYXJncy5hdCg5KS50b1N0cmluZyhleGVjKSkpOyAgICAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBleGVjLT5hcmd1bWVudCgxKS50b0Zsb2F0KGV4ZWMpLCBleGVjLT5hcmd1bWVu
dCgyKS50b0Zsb2F0KGV4ZWMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWMt
PmFyZ3VtZW50KDMpLnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFyZ3VtZW50KDQpLnRvRmxvYXQoZXhl
YyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlYy0+YXJndW1lbnQoNSkudG9G
bG9hdChleGVjKSwgZXhlYy0+YXJndW1lbnQoNikudG9GbG9hdChleGVjKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBleGVjLT5hcmd1bWVudCg3KS50b0Zsb2F0KGV4ZWMpLCBleGVj
LT5hcmd1bWVudCg4KS50b0Zsb2F0KGV4ZWMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCg5KS50b1N0cmluZyhleGVjKSkpOyAg
ICAKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsgICAgCiB9CiAKLUpTVmFsdWUgSlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OnNldFNoYWRvdyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTaGFkb3co
RXhlY1N0YXRlKiBleGVjKQogeyAKICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGNvbnRl
eHQgPSBzdGF0aWNfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqPihpbXBsKCkpOwogCi0g
ICAgc3dpdGNoIChhcmdzLnNpemUoKSkgeworICAgIHN3aXRjaCAoZXhlYy0+YXJndW1lbnRDb3Vu
dCgpKSB7CiAgICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFNoYWRvdyhh
cmdzLmF0KDApLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoMSkudG9GbG9hdChleGVjKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLmF0KDIpLnRvRmxvYXQoZXhlYykpOworICAg
ICAgICAgICAgY29udGV4dC0+c2V0U2hhZG93KGV4ZWMtPmFyZ3VtZW50KDApLnRvRmxvYXQoZXhl
YyksIGV4ZWMtPmFyZ3VtZW50KDEpLnRvRmxvYXQoZXhlYyksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXhlYy0+YXJndW1lbnQoMikudG9GbG9hdChleGVjKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgaWYgKGFyZ3MuYXQoMykuaXNT
dHJpbmcoKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRTaGFkb3coYXJncy5hdCgwKS50
b0Zsb2F0KGV4ZWMpLCBhcmdzLmF0KDEpLnRvRmxvYXQoZXhlYyksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFyZ3MuYXQoMikudG9GbG9hdChleGVjKSwgdXN0cmluZ1RvU3Ry
aW5nKGFzU3RyaW5nKGFyZ3MuYXQoMykpLT52YWx1ZShleGVjKSkpOworICAgICAgICAgICAgaWYg
KGV4ZWMtPmFyZ3VtZW50KDMpLmlzU3RyaW5nKCkpCisgICAgICAgICAgICAgICAgY29udGV4dC0+
c2V0U2hhZG93KGV4ZWMtPmFyZ3VtZW50KDApLnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFyZ3VtZW50
KDEpLnRvRmxvYXQoZXhlYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4
ZWMtPmFyZ3VtZW50KDIpLnRvRmxvYXQoZXhlYyksIHVzdHJpbmdUb1N0cmluZyhhc1N0cmluZyhl
eGVjLT5hcmd1bWVudCgzKSktPnZhbHVlKGV4ZWMpKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgY29udGV4dC0+c2V0U2hhZG93KGFyZ3MuYXQoMCkudG9GbG9hdChleGVjKSwg
YXJncy5hdCgxKS50b0Zsb2F0KGV4ZWMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhcmdzLmF0KDIpLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoMykudG9GbG9hdChleGVjKSk7
CisgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U2hhZG93KGV4ZWMtPmFyZ3VtZW50KDApLnRv
RmxvYXQoZXhlYyksIGV4ZWMtPmFyZ3VtZW50KDEpLnRvRmxvYXQoZXhlYyksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWMtPmFyZ3VtZW50KDIpLnRvRmxvYXQoZXhlYyks
IGV4ZWMtPmFyZ3VtZW50KDMpLnRvRmxvYXQoZXhlYykpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgNToKLSAgICAgICAgICAgIGlmIChhcmdzLmF0KDMpLmlzU3RyaW5nKCkpCi0g
ICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U2hhZG93KGFyZ3MuYXQoMCkudG9GbG9hdChleGVj
KSwgYXJncy5hdCgxKS50b0Zsb2F0KGV4ZWMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhcmdzLmF0KDIpLnRvRmxvYXQoZXhlYyksIHVzdHJpbmdUb1N0cmluZyhhc1N0cmlu
ZyhhcmdzLmF0KDMpKS0+dmFsdWUoZXhlYykpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhcmdzLmF0KDQpLnRvRmxvYXQoZXhlYykpOworICAgICAgICAgICAgaWYgKGV4ZWMt
PmFyZ3VtZW50KDMpLmlzU3RyaW5nKCkpCisgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U2hh
ZG93KGV4ZWMtPmFyZ3VtZW50KDApLnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFyZ3VtZW50KDEpLnRv
RmxvYXQoZXhlYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWMtPmFy
Z3VtZW50KDIpLnRvRmxvYXQoZXhlYyksIHVzdHJpbmdUb1N0cmluZyhhc1N0cmluZyhleGVjLT5h
cmd1bWVudCgzKSktPnZhbHVlKGV4ZWMpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXhlYy0+YXJndW1lbnQoNCkudG9GbG9hdChleGVjKSk7CiAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U2hhZG93KGFyZ3MuYXQoMCkudG9GbG9hdChl
eGVjKSwgYXJncy5hdCgxKS50b0Zsb2F0KGV4ZWMpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhcmdzLmF0KDIpLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoMykudG9GbG9hdChl
eGVjKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5hdCg0KS50b0Zs
b2F0KGV4ZWMpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRTaGFkb3coZXhlYy0+YXJn
dW1lbnQoMCkudG9GbG9hdChleGVjKSwgZXhlYy0+YXJndW1lbnQoMSkudG9GbG9hdChleGVjKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlYy0+YXJndW1lbnQoMikudG9G
bG9hdChleGVjKSwgZXhlYy0+YXJndW1lbnQoMykudG9GbG9hdChleGVjKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXhlYy0+YXJndW1lbnQoNCkudG9GbG9hdChleGVjKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSA3OgotICAgICAgICAgICAgY29udGV4
dC0+c2V0U2hhZG93KGFyZ3MuYXQoMCkudG9GbG9hdChleGVjKSwgYXJncy5hdCgxKS50b0Zsb2F0
KGV4ZWMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MuYXQoMikudG9GbG9h
dChleGVjKSwgYXJncy5hdCgzKS50b0Zsb2F0KGV4ZWMpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFyZ3MuYXQoNCkudG9GbG9hdChleGVjKSwgYXJncy5hdCg1KS50b0Zsb2F0KGV4
ZWMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MuYXQoNikudG9GbG9hdChl
eGVjKSk7CisgICAgICAgICAgICBjb250ZXh0LT5zZXRTaGFkb3coZXhlYy0+YXJndW1lbnQoMCku
dG9GbG9hdChleGVjKSwgZXhlYy0+YXJndW1lbnQoMSkudG9GbG9hdChleGVjKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBleGVjLT5hcmd1bWVudCgyKS50b0Zsb2F0KGV4ZWMpLCBl
eGVjLT5hcmd1bWVudCgzKS50b0Zsb2F0KGV4ZWMpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGV4ZWMtPmFyZ3VtZW50KDQpLnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFyZ3VtZW50KDUp
LnRvRmxvYXQoZXhlYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlYy0+YXJn
dW1lbnQoNikudG9GbG9hdChleGVjKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSA4OgotICAgICAgICAgICAgY29udGV4dC0+c2V0U2hhZG93KGFyZ3MuYXQoMCkudG9GbG9hdChl
eGVjKSwgYXJncy5hdCgxKS50b0Zsb2F0KGV4ZWMpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFyZ3MuYXQoMikudG9GbG9hdChleGVjKSwgYXJncy5hdCgzKS50b0Zsb2F0KGV4ZWMp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MuYXQoNCkudG9GbG9hdChleGVj
KSwgYXJncy5hdCg1KS50b0Zsb2F0KGV4ZWMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFyZ3MuYXQoNikudG9GbG9hdChleGVjKSwgYXJncy5hdCg3KS50b0Zsb2F0KGV4ZWMpKTsK
KyAgICAgICAgICAgIGNvbnRleHQtPnNldFNoYWRvdyhleGVjLT5hcmd1bWVudCgwKS50b0Zsb2F0
KGV4ZWMpLCBleGVjLT5hcmd1bWVudCgxKS50b0Zsb2F0KGV4ZWMpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGV4ZWMtPmFyZ3VtZW50KDIpLnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFy
Z3VtZW50KDMpLnRvRmxvYXQoZXhlYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZXhlYy0+YXJndW1lbnQoNCkudG9GbG9hdChleGVjKSwgZXhlYy0+YXJndW1lbnQoNSkudG9GbG9h
dChleGVjKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjLT5hcmd1bWVudCg2
KS50b0Zsb2F0KGV4ZWMpLCBleGVjLT5hcmd1bWVudCg3KS50b0Zsb2F0KGV4ZWMpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOwpAQCAtMzMyLDExICszMzIsMTEgQEAgSlNWYWx1ZSBK
U0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0UwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OyAgICAKIH0KIAotSlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlUGF0
dGVybihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGVQYXR0ZXJuKEV4ZWNTdGF0ZSogZXhlYykKIHsg
CiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEKj4oaW1wbCgpKTsKIAotICAgIEpTVmFsdWUgdmFsdWUgPSBh
cmdzLmF0KDApOworICAgIEpTVmFsdWUgdmFsdWUgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBp
ZiAoIXZhbHVlLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5
cGVFcnJvcik7CiAgICAgSlNPYmplY3QqIG8gPSBhc09iamVjdCh2YWx1ZSk7CkBAIC0zNDUsNyAr
MzQ1LDcgQEAgSlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYQogICAgICAg
ICBFeGNlcHRpb25Db2RlIGVjOwogICAgICAgICBKU1ZhbHVlIHBhdHRlcm4gPSB0b0pTKGV4ZWMs
CiAgICAgICAgICAgICBjb250ZXh0LT5jcmVhdGVQYXR0ZXJuKHN0YXRpY19jYXN0PEhUTUxJbWFn
ZUVsZW1lbnQqPihzdGF0aWNfY2FzdDxKU0hUTUxFbGVtZW50Kj4obyktPmltcGwoKSksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNr
KGV4ZWMsIGFyZ3MuYXQoMSkpLCBlYykuZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhleGVjLCBleGVjLT5hcmd1bWVu
dCgxKSksIGVjKS5nZXQoKSk7CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAg
ICAgICAgIHJldHVybiBwYXR0ZXJuOwogICAgIH0KQEAgLTM1Myw3ICszNTMsNyBAQCBKU1ZhbHVl
IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhCiAgICAgICAgIEV4Y2VwdGlvbkNvZGUg
ZWM7CiAgICAgICAgIEpTVmFsdWUgcGF0dGVybiA9IHRvSlMoZXhlYywKICAgICAgICAgICAgIGNv
bnRleHQtPmNyZWF0ZVBhdHRlcm4oc3RhdGljX2Nhc3Q8SFRNTENhbnZhc0VsZW1lbnQqPihzdGF0
aWNfY2FzdDxKU0hUTUxFbGVtZW50Kj4obyktPmltcGwoKSksCi0gICAgICAgICAgICAgICAgdmFs
dWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgYXJncy5hdCgxKSksIGVjKS5nZXQoKSk7Cisg
ICAgICAgICAgICAgICAgdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgZXhlYy0+YXJn
dW1lbnQoMSkpLCBlYykuZ2V0KCkpOwogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMp
OwogICAgICAgICByZXR1cm4gcGF0dGVybjsKICAgICB9CkBAIC0zNjEsNyArMzYxLDcgQEAgSlNW
YWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYQogICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogfQogCi1KU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGVJ
bWFnZURhdGEoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBK
U0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlSW1hZ2VEYXRhKEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICAvLyBjcmVhdGVJbWFnZURhdGEgaGFzIHR3byB2YXJpYW50cwogICAgIC8vIGNy
ZWF0ZUltYWdlRGF0YShJbWFnZURhdGEpCkBAIC0zNzAsMTYgKzM3MCwxNiBAQCBKU1ZhbHVlIEpT
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhCiAgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1h
Z2VEYXRhID0gMDsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGlmIChhcmdzLnNp
emUoKSA9PSAxKQotICAgICAgICBpbWFnZURhdGEgPSBjb250ZXh0LT5jcmVhdGVJbWFnZURhdGEo
dG9JbWFnZURhdGEoYXJncy5hdCgwKSksIGVjKTsKLSAgICBlbHNlIGlmIChhcmdzLnNpemUoKSA9
PSAyKQotICAgICAgICBpbWFnZURhdGEgPSBjb250ZXh0LT5jcmVhdGVJbWFnZURhdGEoYXJncy5h
dCgwKS50b0Zsb2F0KGV4ZWMpLCBhcmdzLmF0KDEpLnRvRmxvYXQoZXhlYyksIGVjKTsKKyAgICBp
ZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID09IDEpCisgICAgICAgIGltYWdlRGF0YSA9IGNvbnRl
eHQtPmNyZWF0ZUltYWdlRGF0YSh0b0ltYWdlRGF0YShleGVjLT5hcmd1bWVudCgwKSksIGVjKTsK
KyAgICBlbHNlIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPT0gMikKKyAgICAgICAgaW1hZ2VE
YXRhID0gY29udGV4dC0+Y3JlYXRlSW1hZ2VEYXRhKGV4ZWMtPmFyZ3VtZW50KDApLnRvRmxvYXQo
ZXhlYyksIGV4ZWMtPmFyZ3VtZW50KDEpLnRvRmxvYXQoZXhlYyksIGVjKTsKIAogICAgIHNldERP
TUV4Y2VwdGlvbihleGVjLCBlYyk7CiAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0
KCksIFdURjo6Z2V0UHRyKGltYWdlRGF0YSkpOwogfQogCi1KU1ZhbHVlIEpTQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpwdXRJbWFnZURhdGEoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQorSlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cHV0SW1hZ2VEYXRh
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICAvLyBwdXRJbWFnZURhdGEgaGFzIHR3byB2YXJpYW50
cwogICAgIC8vIHB1dEltYWdlRGF0YShJbWFnZURhdGEsIHgsIHkpCkBAIC0zODcsMTcgKzM4Nywx
NyBAQCBKU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpwdXRJCiAgICAgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEKj4oaW1wbCgpKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGlm
IChhcmdzLnNpemUoKSA+PSA3KQotICAgICAgICBjb250ZXh0LT5wdXRJbWFnZURhdGEodG9JbWFn
ZURhdGEoYXJncy5hdCgwKSksIGFyZ3MuYXQoMSkudG9GbG9hdChleGVjKSwgYXJncy5hdCgyKS50
b0Zsb2F0KGV4ZWMpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MuYXQoMyku
dG9GbG9hdChleGVjKSwgYXJncy5hdCg0KS50b0Zsb2F0KGV4ZWMpLCBhcmdzLmF0KDUpLnRvRmxv
YXQoZXhlYyksIGFyZ3MuYXQoNikudG9GbG9hdChleGVjKSwgZWMpOworICAgIGlmIChleGVjLT5h
cmd1bWVudENvdW50KCkgPj0gNykKKyAgICAgICAgY29udGV4dC0+cHV0SW1hZ2VEYXRhKHRvSW1h
Z2VEYXRhKGV4ZWMtPmFyZ3VtZW50KDApKSwgZXhlYy0+YXJndW1lbnQoMSkudG9GbG9hdChleGVj
KSwgZXhlYy0+YXJndW1lbnQoMikudG9GbG9hdChleGVjKSwgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBleGVjLT5hcmd1bWVudCgzKS50b0Zsb2F0KGV4ZWMpLCBleGVjLT5hcmd1bWVu
dCg0KS50b0Zsb2F0KGV4ZWMpLCBleGVjLT5hcmd1bWVudCg1KS50b0Zsb2F0KGV4ZWMpLCBleGVj
LT5hcmd1bWVudCg2KS50b0Zsb2F0KGV4ZWMpLCBlYyk7CiAgICAgZWxzZQotICAgICAgICBjb250
ZXh0LT5wdXRJbWFnZURhdGEodG9JbWFnZURhdGEoYXJncy5hdCgwKSksIGFyZ3MuYXQoMSkudG9G
bG9hdChleGVjKSwgYXJncy5hdCgyKS50b0Zsb2F0KGV4ZWMpLCBlYyk7CisgICAgICAgIGNvbnRl
eHQtPnB1dEltYWdlRGF0YSh0b0ltYWdlRGF0YShleGVjLT5hcmd1bWVudCgwKSksIGV4ZWMtPmFy
Z3VtZW50KDEpLnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFyZ3VtZW50KDIpLnRvRmxvYXQoZXhlYyks
IGVjKTsKIAogICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZpbGxU
ZXh0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZpbGxUZXh0KEV4ZWNTdGF0ZSogZXhlYykKIHsgCiAgICAg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEKj4oaW1wbCgpKTsKIApAQCAtNDA1LDE3ICs0MDUsMTcgQEAgSlNWYWx1
ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZmlsbAogICAgIC8vIG51bWJlciBhcmcgPSB4
CiAgICAgLy8gbnVtYmVyIGFyZyA9IHkKICAgICAvLyBvcHRpb25hbCBudW1iZXIgYXJnID0gbWF4
V2lkdGgKLSAgICBpZiAoYXJncy5zaXplKCkgPCAzIHx8IGFyZ3Muc2l6ZSgpID4gNCkKKyAgICBp
ZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMyB8fCBleGVjLT5hcmd1bWVudENvdW50KCkgPiA0
KQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7CiAgICAgCi0g
ICAgaWYgKGFyZ3Muc2l6ZSgpID09IDQpCi0gICAgICAgIGNvbnRleHQtPmZpbGxUZXh0KHVzdHJp
bmdUb1N0cmluZyhhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpKSwgYXJncy5hdCgxKS50b0Zsb2F0
KGV4ZWMpLCBhcmdzLmF0KDIpLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoMykudG9GbG9hdChleGVj
KSk7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA9PSA0KQorICAgICAgICBjb250ZXh0
LT5maWxsVGV4dCh1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhl
YykpLCBleGVjLT5hcmd1bWVudCgxKS50b0Zsb2F0KGV4ZWMpLCBleGVjLT5hcmd1bWVudCgyKS50
b0Zsb2F0KGV4ZWMpLCBleGVjLT5hcmd1bWVudCgzKS50b0Zsb2F0KGV4ZWMpKTsKICAgICBlbHNl
Ci0gICAgICAgIGNvbnRleHQtPmZpbGxUZXh0KHVzdHJpbmdUb1N0cmluZyhhcmdzLmF0KDApLnRv
U3RyaW5nKGV4ZWMpKSwgYXJncy5hdCgxKS50b0Zsb2F0KGV4ZWMpLCBhcmdzLmF0KDIpLnRvRmxv
YXQoZXhlYykpOworICAgICAgICBjb250ZXh0LT5maWxsVGV4dCh1c3RyaW5nVG9TdHJpbmcoZXhl
Yy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpLCBleGVjLT5hcmd1bWVudCgxKS50b0Zsb2F0
KGV4ZWMpLCBleGVjLT5hcmd1bWVudCgyKS50b0Zsb2F0KGV4ZWMpKTsKICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c3Ry
b2tlVGV4dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpT
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzdHJva2VUZXh0KEV4ZWNTdGF0ZSogZXhlYykKIHsg
CiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEKj4oaW1wbCgpKTsKIApAQCAtNDIzLDEzICs0MjMsMTMgQEAg
SlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c3RybwogICAgIC8vIG51bWJlciBh
cmcgPSB4CiAgICAgLy8gbnVtYmVyIGFyZyA9IHkKICAgICAvLyBvcHRpb25hbCBudW1iZXIgYXJn
ID0gbWF4V2lkdGgKLSAgICBpZiAoYXJncy5zaXplKCkgPCAzIHx8IGFyZ3Muc2l6ZSgpID4gNCkK
KyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMyB8fCBleGVjLT5hcmd1bWVudENvdW50
KCkgPiA0KQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7CiAg
ICAgCi0gICAgaWYgKGFyZ3Muc2l6ZSgpID09IDQpCi0gICAgICAgIGNvbnRleHQtPnN0cm9rZVRl
eHQodXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpLCBhcmdzLmF0KDEp
LnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoMikudG9GbG9hdChleGVjKSwgYXJncy5hdCgzKS50b0Zs
b2F0KGV4ZWMpKTsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID09IDQpCisgICAgICAg
IGNvbnRleHQtPnN0cm9rZVRleHQodXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRv
U3RyaW5nKGV4ZWMpKSwgZXhlYy0+YXJndW1lbnQoMSkudG9GbG9hdChleGVjKSwgZXhlYy0+YXJn
dW1lbnQoMikudG9GbG9hdChleGVjKSwgZXhlYy0+YXJndW1lbnQoMykudG9GbG9hdChleGVjKSk7
CiAgICAgZWxzZQotICAgICAgICBjb250ZXh0LT5zdHJva2VUZXh0KHVzdHJpbmdUb1N0cmluZyhh
cmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpKSwgYXJncy5hdCgxKS50b0Zsb2F0KGV4ZWMpLCBhcmdz
LmF0KDIpLnRvRmxvYXQoZXhlYykpOworICAgICAgICBjb250ZXh0LT5zdHJva2VUZXh0KHVzdHJp
bmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSksIGV4ZWMtPmFyZ3Vt
ZW50KDEpLnRvRmxvYXQoZXhlYyksIGV4ZWMtPmFyZ3VtZW50KDIpLnRvRmxvYXQoZXhlYykpOwog
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ2xpcGJvYXJkQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ2xpcGJvYXJkQ3VzdG9tLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ2xpcGJvYXJkQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsMTcgKzYz
LDE3IEBAIEpTVmFsdWUgSlNDbGlwYm9hcmQ6OnR5cGVzKEV4ZWNTdGF0ZSogZXgKICAgICByZXR1
cm4gY29uc3RydWN0QXJyYXkoZXhlYywgbGlzdCk7CiB9CiAKLUpTVmFsdWUgSlNDbGlwYm9hcmQ6
OmNsZWFyRGF0YShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVl
IEpTQ2xpcGJvYXJkOjpjbGVhckRhdGEoRXhlY1N0YXRlKiBleGVjKQogewogICAgIENsaXBib2Fy
ZCogY2xpcGJvYXJkID0gaW1wbCgpOwogCi0gICAgaWYgKGFyZ3Muc2l6ZSgpID09IDApIHsKKyAg
ICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkgewogICAgICAgICBjbGlwYm9hcmQtPmNsZWFy
QWxsRGF0YSgpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBp
ZiAoYXJncy5zaXplKCkgPT0gMSkgewotICAgICAgICBjbGlwYm9hcmQtPmNsZWFyRGF0YSh1c3Ry
aW5nVG9TdHJpbmcoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSkpOworICAgIGlmIChleGVjLT5h
cmd1bWVudENvdW50KCkgPT0gMSkgeworICAgICAgICBjbGlwYm9hcmQtPmNsZWFyRGF0YSh1c3Ry
aW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpKTsKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCkBAIC04MSwyMyArODEsMjMgQEAgSlNWYWx1
ZSBKU0NsaXBib2FyZDo6Y2xlYXJEYXRhKEV4ZWNTdGF0ZQogICAgIHJldHVybiB0aHJvd0Vycm9y
KGV4ZWMsIFN5bnRheEVycm9yLCAiY2xlYXJEYXRhOiBJbnZhbGlkIG51bWJlciBvZiBhcmd1bWVu
dHMiKTsKIH0KIAotSlNWYWx1ZSBKU0NsaXBib2FyZDo6Z2V0RGF0YShFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTQ2xpcGJvYXJkOjpnZXREYXRhKEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICAvLyBGSVhNRTogSXQgZG9lcyBub3QgbWF0Y2ggdGhlIHJlc3Qg
b2YgdGhlIEpTIGJpbmRpbmdzIHRvIHRocm93IG9uIGludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50
cy4KLSAgICBpZiAoYXJncy5zaXplKCkgIT0gMSkKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3Vu
dCgpICE9IDEpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCAi
Z2V0RGF0YTogSW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzIik7CiAKICAgICBDbGlwYm9hcmQq
IGNsaXBib2FyZCA9IGltcGwoKTsKIAogICAgIGJvb2wgc3VjY2VzczsKLSAgICBTdHJpbmcgcmVz
dWx0ID0gY2xpcGJvYXJkLT5nZXREYXRhKHVzdHJpbmdUb1N0cmluZyhhcmdzLmF0KDApLnRvU3Ry
aW5nKGV4ZWMpKSwgc3VjY2Vzcyk7CisgICAgU3RyaW5nIHJlc3VsdCA9IGNsaXBib2FyZC0+Z2V0
RGF0YSh1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpLCBz
dWNjZXNzKTsKICAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogCiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHJlc3VsdCk7CiB9CiAKLUpTVmFsdWUgSlND
bGlwYm9hcmQ6OnNldERyYWdJbWFnZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCitKU1ZhbHVlIEpTQ2xpcGJvYXJkOjpzZXREcmFnSW1hZ2UoRXhlY1N0YXRlKiBleGVjKQog
ewogICAgIENsaXBib2FyZCogY2xpcGJvYXJkID0gaW1wbCgpOwogCkBAIC0xMDUsMTQgKzEwNSwx
NCBAQCBKU1ZhbHVlIEpTQ2xpcGJvYXJkOjpzZXREcmFnSW1hZ2UoRXhlY1N0CiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgLy8gRklYTUU6IEl0IGRvZXMgbm90IG1hdGNoIHRo
ZSByZXN0IG9mIHRoZSBKUyBiaW5kaW5ncyB0byB0aHJvdyBvbiBpbnZhbGlkIG51bWJlciBvZiBh
cmd1bWVudHMuIAotICAgIGlmIChhcmdzLnNpemUoKSAhPSAzKQorICAgIGlmIChleGVjLT5hcmd1
bWVudENvdW50KCkgIT0gMykKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4
RXJyb3IsICJzZXREcmFnSW1hZ2U6IEludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyIpOwogCi0g
ICAgaW50IHggPSBhcmdzLmF0KDEpLnRvSW50MzIoZXhlYyk7Ci0gICAgaW50IHkgPSBhcmdzLmF0
KDIpLnRvSW50MzIoZXhlYyk7CisgICAgaW50IHggPSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMy
KGV4ZWMpOworICAgIGludCB5ID0gZXhlYy0+YXJndW1lbnQoMikudG9JbnQzMihleGVjKTsKIAog
ICAgIC8vIFNlZSBpZiB0aGV5IHBhc3NlZCB1cyBhIG5vZGUKLSAgICBOb2RlKiBub2RlID0gdG9O
b2RlKGFyZ3MuYXQoMCkpOworICAgIE5vZGUqIG5vZGUgPSB0b05vZGUoZXhlYy0+YXJndW1lbnQo
MCkpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlw
ZUVycm9yKTsKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUFwcGxpY2F0aW9uQ2Fj
aGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01BcHBs
aWNhdGlvbkNhY2hlQ3VzdG9tLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQXBwbGljYXRpb25DYWNoZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ0LDEyICs0NCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBFTkFCTEUoQVBQTElD
QVRJT05fQ0FDSEVfRFlOQU1JQ19FTlRSSUVTKQogCi1KU1ZhbHVlIEpTRE9NQXBwbGljYXRpb25D
YWNoZTo6aGFzSXRlbShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1Zh
bHVlIEpTRE9NQXBwbGljYXRpb25DYWNoZTo6aGFzSXRlbShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgRnJhbWUqIGZyYW1lID0gYXNKU0RPTVdpbmRvdyhleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0
KCkpLT5pbXBsKCktPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7Ci0gICAgY29uc3QgS1VSTCYgdXJsID0gZnJhbWUtPmxvYWRlcigpLT5jb21w
bGV0ZVVSTChhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBjb25zdCBLVVJMJiB1cmwg
PSBmcmFtZS0+bG9hZGVyKCktPmNvbXBsZXRlVVJMKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5n
KGV4ZWMpKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGJvb2wgcmVzdWx0ID0g
aW1wbCgpLT5oYXNJdGVtKHVybCwgZWMpOwpAQCAtNTcsMTIgKzU3LDEyIEBAIEpTVmFsdWUgSlNE
T01BcHBsaWNhdGlvbkNhY2hlOjpoYXNJdGVtKEUKICAgICByZXR1cm4ganNCb29sZWFuKHJlc3Vs
dCk7CiB9CiAKLUpTVmFsdWUgSlNET01BcHBsaWNhdGlvbkNhY2hlOjphZGQoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0RPTUFwcGxpY2F0aW9uQ2FjaGU6
OmFkZChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gYXNKU0RPTVdpbmRv
dyhleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpLT5pbXBsKCktPmZyYW1lKCk7CiAgICAgaWYg
KCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgY29uc3QgS1VSTCYg
dXJsID0gZnJhbWUtPmxvYWRlcigpLT5jb21wbGV0ZVVSTChhcmdzLmF0KDApLnRvU3RyaW5nKGV4
ZWMpKTsKKyAgICBjb25zdCBLVVJMJiB1cmwgPSBmcmFtZS0+bG9hZGVyKCktPmNvbXBsZXRlVVJM
KGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKTsKICAgICAKICAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKICAgICBpbXBsKCktPmFkZCh1cmwsIGVjKTsKQEAgLTcwLDEyICs3MCwxMiBA
QCBKU1ZhbHVlIEpTRE9NQXBwbGljYXRpb25DYWNoZTo6YWRkKEV4ZWNTCiAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNET01BcHBsaWNhdGlvbkNhY2hlOjpyZW1vdmUo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0RPTUFwcGxp
Y2F0aW9uQ2FjaGU6OnJlbW92ZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgRnJhbWUqIGZyYW1l
ID0gYXNKU0RPTVdpbmRvdyhleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpLT5pbXBsKCktPmZy
YW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0g
ICAgY29uc3QgS1VSTCYgdXJsID0gZnJhbWUtPmxvYWRlcigpLT5jb21wbGV0ZVVSTChhcmdzLmF0
KDApLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBjb25zdCBLVVJMJiB1cmwgPSBmcmFtZS0+bG9hZGVy
KCktPmNvbXBsZXRlVVJMKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKTsKICAgICAK
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBpbXBsKCktPnJlbW92ZSh1cmwsIGVjKTsK
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01Gb3JtRGF0YUN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUZvcm1EYXRhQ3VzdG9tLmNwcAkocmV2
aXNpb24gNjAzNDEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NRm9ybURhdGFDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMSArMzksMTEgQEAgdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlIEpTRE9NRm9ybURhdGE6OmFwcGVu
ZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTRE9NRm9y
bURhdGE6OmFwcGVuZChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpID49
IDIpIHsKLSAgICAgICAgU3RyaW5nIG5hbWUgPSB1c3RyaW5nVG9TdHJpbmcoYXJncy5hdCgwKS50
b1N0cmluZyhleGVjKSk7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBhcmdzLmF0KDEpOworICAg
IGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMikgeworICAgICAgICBTdHJpbmcgbmFtZSA9
IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSk7CisgICAg
ICAgIEpTVmFsdWUgdmFsdWUgPSBleGVjLT5hcmd1bWVudCgxKTsKICAgICAgICAgaWYgKHZhbHVl
LmluaGVyaXRzKCZKU0Jsb2I6OnNfaW5mbykpCiAgICAgICAgICAgICBpbXBsKCktPmFwcGVuZChu
YW1lLCB0b0Jsb2IodmFsdWUpKTsKICAgICAgICAgZWxzZQpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2Niwx
MSArNzY2LDExIEBAIHN0YXRpYyBib29sIGRvbVdpbmRvd0FsbG93UG9wVXAoRnJhbWUqIGEKICAg
ICByZXR1cm4gRE9NV2luZG93OjphbGxvd1BvcFVwKGFjdGl2ZUZyYW1lKTsKIH0KIAotSlNWYWx1
ZSBKU0RPTVdpbmRvdzo6b3BlbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CitKU1ZhbHVlIEpTRE9NV2luZG93OjpvcGVuKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBTdHJp
bmcgdXJsU3RyaW5nID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhleGVj
LCBhcmdzLmF0KDApKTsKLSAgICBBdG9taWNTdHJpbmcgZnJhbWVOYW1lID0gYXJncy5hdCgxKS5p
c1VuZGVmaW5lZE9yTnVsbCgpID8gIl9ibGFuayIgOiB1c3RyaW5nVG9BdG9taWNTdHJpbmcoYXJn
cy5hdCgxKS50b1N0cmluZyhleGVjKSk7Ci0gICAgV2luZG93RmVhdHVyZXMgd2luZG93RmVhdHVy
ZXModmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhleGVjLCBhcmdzLmF0KDIp
KSk7CisgICAgU3RyaW5nIHVybFN0cmluZyA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JO
dWxsQ2hlY2soZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOworICAgIEF0b21pY1N0cmluZyBmcmFt
ZU5hbWUgPSBleGVjLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpID8gIl9ibGFuayIg
OiB1c3RyaW5nVG9BdG9taWNTdHJpbmcoZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYykp
OworICAgIFdpbmRvd0ZlYXR1cmVzIHdpbmRvd0ZlYXR1cmVzKHZhbHVlVG9TdHJpbmdXaXRoVW5k
ZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgZXhlYy0+YXJndW1lbnQoMikpKTsKIAogICAgIEZyYW1l
KiBmcmFtZSA9IGltcGwoKS0+ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQpAQCAtODQwLDExICs4
NDAsMTEgQEAgSlNWYWx1ZSBKU0RPTVdpbmRvdzo6b3BlbihFeGVjU3RhdGUqIGV4ZQogICAgIHJl
dHVybiB0b0pTKGV4ZWMsIGZyYW1lLT5kb21XaW5kb3coKSk7CiB9CiAKLUpTVmFsdWUgSlNET01X
aW5kb3c6OnNob3dNb2RhbERpYWxvZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCitKU1ZhbHVlIEpTRE9NV2luZG93OjpzaG93TW9kYWxEaWFsb2coRXhlY1N0YXRlKiBleGVj
KQogewotICAgIFN0cmluZyB1cmwgPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENo
ZWNrKGV4ZWMsIGFyZ3MuYXQoMCkpOwotICAgIEpTVmFsdWUgZGlhbG9nQXJncyA9IGFyZ3MuYXQo
MSk7Ci0gICAgU3RyaW5nIGZlYXR1cmVBcmdzID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRP
ck51bGxDaGVjayhleGVjLCBhcmdzLmF0KDIpKTsKKyAgICBTdHJpbmcgdXJsID0gdmFsdWVUb1N0
cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7Cisg
ICAgSlNWYWx1ZSBkaWFsb2dBcmdzID0gZXhlYy0+YXJndW1lbnQoMSk7CisgICAgU3RyaW5nIGZl
YXR1cmVBcmdzID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhleGVjLCBl
eGVjLT5hcmd1bWVudCgyKSk7CiAKICAgICBGcmFtZSogZnJhbWUgPSBpbXBsKCktPmZyYW1lKCk7
CiAgICAgaWYgKCFmcmFtZSkKQEAgLTkyMywyMyArOTIzLDIzIEBAIEpTVmFsdWUgSlNET01XaW5k
b3c6OnNob3dNb2RhbERpYWxvZyhFeGUKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAot
SlNWYWx1ZSBKU0RPTVdpbmRvdzo6cG9zdE1lc3NhZ2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0RPTVdpbmRvdzo6cG9zdE1lc3NhZ2UoRXhlY1N0YXRl
KiBleGVjKQogewogICAgIERPTVdpbmRvdyogd2luZG93ID0gaW1wbCgpOwogCiAgICAgRE9NV2lu
ZG93KiBzb3VyY2UgPSBhc0pTRE9NV2luZG93KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSkt
PmltcGwoKTsKLSAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbWVzc2FnZSA9
IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsIGFyZ3MuYXQoMCkpOworICAgIFBh
c3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBtZXNzYWdlID0gU2VyaWFsaXplZFNjcmlw
dFZhbHVlOjpjcmVhdGUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOwogCiAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIE1l
c3NhZ2VQb3J0QXJyYXkgbWVzc2FnZVBvcnRzOwotICAgIGlmIChhcmdzLnNpemUoKSA+IDIpCi0g
ICAgICAgIGZpbGxNZXNzYWdlUG9ydEFycmF5KGV4ZWMsIGFyZ3MuYXQoMSksIG1lc3NhZ2VQb3J0
cyk7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+IDIpCisgICAgICAgIGZpbGxNZXNz
YWdlUG9ydEFycmF5KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDEpLCBtZXNzYWdlUG9ydHMpOwogICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAKLSAgICBTdHJpbmcgdGFyZ2V0T3JpZ2luID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRP
ck51bGxDaGVjayhleGVjLCBhcmdzLmF0KChhcmdzLnNpemUoKSA9PSAyKSA/IDEgOiAyKSk7Cisg
ICAgU3RyaW5nIHRhcmdldE9yaWdpbiA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxs
Q2hlY2soZXhlYywgZXhlYy0+YXJndW1lbnQoKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA9PSAyKSA/
IDEgOiAyKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIApAQCAtOTUwLDEyICs5NTAsMTIgQEAgSlNWYWx1ZSBKU0RPTVdpbmRv
dzo6cG9zdE1lc3NhZ2UoRXhlY1N0YQogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1K
U1ZhbHVlIEpTRE9NV2luZG93OjpzZXRUaW1lb3V0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJn
TGlzdCYgYXJncykKK0pTVmFsdWUgSlNET01XaW5kb3c6OnNldFRpbWVvdXQoRXhlY1N0YXRlKiBl
eGVjKQogewotICAgIE93blB0cjxTY2hlZHVsZWRBY3Rpb24+IGFjdGlvbiA9IFNjaGVkdWxlZEFj
dGlvbjo6Y3JlYXRlKGV4ZWMsIGFyZ3MsIGN1cnJlbnRXb3JsZChleGVjKSk7CisgICAgT3duUHRy
PFNjaGVkdWxlZEFjdGlvbj4gYWN0aW9uID0gU2NoZWR1bGVkQWN0aW9uOjpjcmVhdGUoZXhlYywg
Y3VycmVudFdvcmxkKGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIGludCBkZWxheSA9IGFyZ3MuYXQoMSkudG9J
bnQzMihleGVjKTsKKyAgICBpbnQgZGVsYXkgPSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4
ZWMpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgaW50IHJlc3VsdCA9IGltcGwo
KS0+c2V0VGltZW91dChhY3Rpb24ucmVsZWFzZSgpLCBkZWxheSwgZWMpOwpAQCAtOTY0LDEyICs5
NjQsMTIgQEAgSlNWYWx1ZSBKU0RPTVdpbmRvdzo6c2V0VGltZW91dChFeGVjU3RhdAogICAgIHJl
dHVybiBqc051bWJlcihleGVjLCByZXN1bHQpOwogfQogCi1KU1ZhbHVlIEpTRE9NV2luZG93Ojpz
ZXRJbnRlcnZhbChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVl
IEpTRE9NV2luZG93OjpzZXRJbnRlcnZhbChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgT3duUHRy
PFNjaGVkdWxlZEFjdGlvbj4gYWN0aW9uID0gU2NoZWR1bGVkQWN0aW9uOjpjcmVhdGUoZXhlYywg
YXJncywgY3VycmVudFdvcmxkKGV4ZWMpKTsKKyAgICBPd25QdHI8U2NoZWR1bGVkQWN0aW9uPiBh
Y3Rpb24gPSBTY2hlZHVsZWRBY3Rpb246OmNyZWF0ZShleGVjLCBjdXJyZW50V29ybGQoZXhlYykp
OwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7Ci0gICAgaW50IGRlbGF5ID0gYXJncy5hdCgxKS50b0ludDMyKGV4ZWMpOworICAgIGlu
dCBkZWxheSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7CiAKICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKICAgICBpbnQgcmVzdWx0ID0gaW1wbCgpLT5zZXRJbnRlcnZhbChhY3Rp
b24ucmVsZWFzZSgpLCBkZWxheSwgZWMpOwpAQCAtOTc4LDY3ICs5NzgsNjcgQEAgSlNWYWx1ZSBK
U0RPTVdpbmRvdzo6c2V0SW50ZXJ2YWwoRXhlY1N0YQogICAgIHJldHVybiBqc051bWJlcihleGVj
LCByZXN1bHQpOwogfQogCi1KU1ZhbHVlIEpTRE9NV2luZG93OjphZGRFdmVudExpc3RlbmVyKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNET01XaW5kb3c6
OmFkZEV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEZyYW1lKiBmcmFtZSA9
IGltcGwoKS0+ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIAotICAgIEpTVmFsdWUgbGlzdGVuZXIgPSBhcmdzLmF0KDEpOworICAgIEpTVmFs
dWUgbGlzdGVuZXIgPSBleGVjLT5hcmd1bWVudCgxKTsKICAgICBpZiAoIWxpc3RlbmVyLmlzT2Jq
ZWN0KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgaW1wbCgpLT5hZGRF
dmVudExpc3RlbmVyKHVzdHJpbmdUb0F0b21pY1N0cmluZyhhcmdzLmF0KDApLnRvU3RyaW5nKGV4
ZWMpKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCB0aGlzLCBm
YWxzZSwgY3VycmVudFdvcmxkKGV4ZWMpKSwgYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYykpOwor
ICAgIGltcGwoKS0+YWRkRXZlbnRMaXN0ZW5lcih1c3RyaW5nVG9BdG9taWNTdHJpbmcoZXhlYy0+
YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09i
amVjdChsaXN0ZW5lciksIHRoaXMsIGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykpLCBleGVjLT5h
cmd1bWVudCgyKS50b0Jvb2xlYW4oZXhlYykpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
fQogCi1KU1ZhbHVlIEpTRE9NV2luZG93OjpyZW1vdmVFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNET01XaW5kb3c6OnJlbW92ZUV2
ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEZyYW1lKiBmcmFtZSA9IGltcGwo
KS0+ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIAotICAgIEpTVmFsdWUgbGlzdGVuZXIgPSBhcmdzLmF0KDEpOworICAgIEpTVmFsdWUgbGlz
dGVuZXIgPSBleGVjLT5hcmd1bWVudCgxKTsKICAgICBpZiAoIWxpc3RlbmVyLmlzT2JqZWN0KCkp
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgaW1wbCgpLT5yZW1vdmVFdmVu
dExpc3RlbmVyKHVzdHJpbmdUb0F0b21pY1N0cmluZyhhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMp
KSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCB0aGlzLCBmYWxz
ZSwgY3VycmVudFdvcmxkKGV4ZWMpKS5nZXQoKSwgYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYykp
OworICAgIGltcGwoKS0+cmVtb3ZlRXZlbnRMaXN0ZW5lcih1c3RyaW5nVG9BdG9taWNTdHJpbmco
ZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0
ZShhc09iamVjdChsaXN0ZW5lciksIHRoaXMsIGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykpLmdl
dCgpLCBleGVjLT5hcmd1bWVudCgyKS50b0Jvb2xlYW4oZXhlYykpOwogICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogfQogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQotSlNWYWx1ZSBKU0RPTVdpbmRv
dzo6b3BlbkRhdGFiYXNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pT
VmFsdWUgSlNET01XaW5kb3c6Om9wZW5EYXRhYmFzZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAg
aWYgKCFhbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpIHx8IChhcmdzLnNpemUoKSA8IDQpKSB7CisgICAg
aWYgKCFhbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpIHx8IChleGVjLT5hcmd1bWVudENvdW50KCkgPCA0
KSkgewogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgU1lOVEFYX0VSUik7CiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAotICAgIFN0cmluZyBuYW1lID0gdXN0cmlu
Z1RvU3RyaW5nKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpOworICAgIFN0cmluZyBuYW1lID0g
dXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKTsKICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
Ci0gICAgU3RyaW5nIHZlcnNpb24gPSB1c3RyaW5nVG9TdHJpbmcoYXJncy5hdCgxKS50b1N0cmlu
ZyhleGVjKSk7CisgICAgU3RyaW5nIHZlcnNpb24gPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJn
dW1lbnQoMSkudG9TdHJpbmcoZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBTdHJpbmcgZGlzcGxheU5hbWUg
PSB1c3RyaW5nVG9TdHJpbmcoYXJncy5hdCgyKS50b1N0cmluZyhleGVjKSk7CisgICAgU3RyaW5n
IGRpc3BsYXlOYW1lID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDIpLnRvU3RyaW5n
KGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogCi0gICAgLy8gYXJncy5hdCgzKSA9IGVzdGltYXRlZCBzaXplCi0gICAg
dW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplID0gYXJncy5hdCgzKS50b1VJbnQzMihleGVjKTsK
KyAgICAvLyBleGVjLT5hcmd1bWVudCgzKSA9IGVzdGltYXRlZCBzaXplCisgICAgdW5zaWduZWQg
bG9uZyBlc3RpbWF0ZWRTaXplID0gZXhlYy0+YXJndW1lbnQoMykudG9VSW50MzIoZXhlYyk7CiAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIAogICAgIFJlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBjcmVhdGlvbkNhbGxiYWNrOwotICAg
IGlmIChhcmdzLnNpemUoKSA+PSA1KSB7Ci0gICAgICAgIGlmICghYXJncy5hdCg0KS5pc09iamVj
dCgpKSB7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSA1KSB7CisgICAgICAgIGlm
ICghZXhlYy0+YXJndW1lbnQoNCkuaXNPYmplY3QoKSkgewogICAgICAgICAgICAgc2V0RE9NRXhj
ZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKICAgICAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogICAgICAgICB9CiAKLSAgICAgICAgY3JlYXRpb25DYWxsYmFjayA9IEpTRGF0
YWJhc2VDYWxsYmFjazo6Y3JlYXRlKGFzT2JqZWN0KGFyZ3MuYXQoNCkpLCBnbG9iYWxPYmplY3Qo
KSk7CisgICAgICAgIGNyZWF0aW9uQ2FsbGJhY2sgPSBKU0RhdGFiYXNlQ2FsbGJhY2s6OmNyZWF0
ZShhc09iamVjdChleGVjLT5hcmd1bWVudCg0KSksIGdsb2JhbE9iamVjdCgpKTsKICAgICB9CiAK
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNE
YXRhYmFzZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Rh
dGFiYXNlQ3VzdG9tLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRGF0YWJhc2VDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NywxNyArNDcsMTcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1KU1ZhbHVlIEpT
RGF0YWJhc2U6OmNoYW5nZVZlcnNpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQorSlNWYWx1ZSBKU0RhdGFiYXNlOjpjaGFuZ2VWZXJzaW9uKEV4ZWNTdGF0ZSogZXhlYykK
IHsKLSAgICBTdHJpbmcgb2xkVmVyc2lvbiA9IHVzdHJpbmdUb1N0cmluZyhhcmdzLmF0KDApLnRv
U3RyaW5nKGV4ZWMpKTsKKyAgICBTdHJpbmcgb2xkVmVyc2lvbiA9IHVzdHJpbmdUb1N0cmluZyhl
eGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIFN0cmluZyBuZXdW
ZXJzaW9uID0gdXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQoMSkudG9TdHJpbmcoZXhlYykpOworICAg
IFN0cmluZyBuZXdWZXJzaW9uID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDEpLnRv
U3RyaW5nKGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgSlNPYmplY3QqIG9iamVjdCA9IGFyZ3MuYXQoMiku
Z2V0T2JqZWN0KCk7CisgICAgSlNPYmplY3QqIG9iamVjdCA9IGV4ZWMtPmFyZ3VtZW50KDIpLmdl
dE9iamVjdCgpOwogICAgIGlmICghb2JqZWN0KSB7CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihl
eGVjLCBUWVBFX01JU01BVENIX0VSUik7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpA
QCAtNjYsOCArNjYsOCBAQCBKU1ZhbHVlIEpTRGF0YWJhc2U6OmNoYW5nZVZlcnNpb24oRXhlY1N0
CiAgICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrKEpTU1FMVHJhbnNh
Y3Rpb25DYWxsYmFjazo6Y3JlYXRlKG9iamVjdCwgc3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPihnbG9iYWxPYmplY3QoKSkpKTsKIAogICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9y
Q2FsbGJhY2s+IGVycm9yQ2FsbGJhY2s7Ci0gICAgaWYgKCFhcmdzLmF0KDMpLmlzTnVsbCgpKSB7
Ci0gICAgICAgIG9iamVjdCA9IGFyZ3MuYXQoMykuZ2V0T2JqZWN0KCk7CisgICAgaWYgKCFleGVj
LT5hcmd1bWVudCgzKS5pc051bGwoKSkgeworICAgICAgICBvYmplY3QgPSBleGVjLT5hcmd1bWVu
dCgzKS5nZXRPYmplY3QoKTsKICAgICAgICAgaWYgKCFvYmplY3QpIHsKICAgICAgICAgICAgIHNl
dERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7CiAgICAgICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKQEAgLTc3LDggKzc3LDggQEAgSlNWYWx1ZSBKU0RhdGFiYXNlOjpj
aGFuZ2VWZXJzaW9uKEV4ZWNTdAogICAgIH0KIAogICAgIFJlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1
Y2Nlc3NDYWxsYmFjazsKLSAgICBpZiAoIWFyZ3MuYXQoNCkuaXNOdWxsKCkpIHsKLSAgICAgICAg
b2JqZWN0ID0gYXJncy5hdCg0KS5nZXRPYmplY3QoKTsKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50
KDQpLmlzTnVsbCgpKSB7CisgICAgICAgIG9iamVjdCA9IGV4ZWMtPmFyZ3VtZW50KDQpLmdldE9i
amVjdCgpOwogICAgICAgICBpZiAoIW9iamVjdCkgewogICAgICAgICAgICAgc2V0RE9NRXhjZXB0
aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwpAQCAtOTIsOSArOTIsOSBAQCBKU1ZhbHVlIEpTRGF0YWJhc2U6OmNoYW5nZVZlcnNp
b24oRXhlY1N0CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBKU1ZhbHVl
IGNyZWF0ZVRyYW5zYWN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncywg
RGF0YWJhc2UqIGRhdGFiYXNlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBib29s
IHJlYWRPbmx5KQorc3RhdGljIEpTVmFsdWUgY3JlYXRlVHJhbnNhY3Rpb24oRXhlY1N0YXRlKiBl
eGVjLCBEYXRhYmFzZSogZGF0YWJhc2UsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IGJvb2wgcmVhZE9ubHkpCiB7Ci0gICAgSlNPYmplY3QqIG9iamVjdCA9IGFyZ3MuYXQoMCkuZ2V0
T2JqZWN0KCk7CisgICAgSlNPYmplY3QqIG9iamVjdCA9IGV4ZWMtPmFyZ3VtZW50KDApLmdldE9i
amVjdCgpOwogCiAgICAgaWYgKCFvYmplY3QpIHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKQEAgLTEwMyw4ICsxMDMsOCBAQCBzdGF0aWMgSlNWYWx1
ZSBjcmVhdGVUcmFuc2FjdGlvbihFeGVjU3RhCiAKICAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb25D
YWxsYmFjaz4gY2FsbGJhY2soSlNTUUxUcmFuc2FjdGlvbkNhbGxiYWNrOjpjcmVhdGUob2JqZWN0
LCBnbG9iYWxPYmplY3QpKTsKICAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNr
PiBlcnJvckNhbGxiYWNrOwotICAgIGlmIChhcmdzLnNpemUoKSA+IDEgJiYgIWFyZ3MuYXQoMSku
aXNOdWxsKCkpIHsKLSAgICAgICAgb2JqZWN0ID0gYXJncy5hdCgxKS5nZXRPYmplY3QoKTsKKyAg
ICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4gMSAmJiAhZXhlYy0+YXJndW1lbnQoMSkuaXNO
dWxsKCkpIHsKKyAgICAgICAgb2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoMSkuZ2V0T2JqZWN0KCk7
CiAgICAgICAgIGlmICghb2JqZWN0KSB7CiAgICAgICAgICAgICBzZXRET01FeGNlcHRpb24oZXhl
YywgVFlQRV9NSVNNQVRDSF9FUlIpOwogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CkBAIC0xMTQsOCArMTE0LDggQEAgc3RhdGljIEpTVmFsdWUgY3JlYXRlVHJhbnNhY3Rpb24oRXhl
Y1N0YQogICAgIH0KIAogICAgIFJlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjazsK
LSAgICBpZiAoYXJncy5zaXplKCkgPiAyICYmICFhcmdzLmF0KDIpLmlzTnVsbCgpKSB7Ci0gICAg
ICAgIG9iamVjdCA9IGFyZ3MuYXQoMikuZ2V0T2JqZWN0KCk7CisgICAgaWYgKGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSA+IDIgJiYgIWV4ZWMtPmFyZ3VtZW50KDIpLmlzTnVsbCgpKSB7CisgICAgICAg
IG9iamVjdCA9IGV4ZWMtPmFyZ3VtZW50KDIpLmdldE9iamVjdCgpOwogICAgICAgICBpZiAoIW9i
amVjdCkgewogICAgICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hf
RVJSKTsKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpAQCAtMTI4LDE0ICsxMjgs
MTQgQEAgc3RhdGljIEpTVmFsdWUgY3JlYXRlVHJhbnNhY3Rpb24oRXhlY1N0YQogICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlIEpTRGF0YWJhc2U6OnRyYW5zYWN0aW9uKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNEYXRhYmFzZTo6
dHJhbnNhY3Rpb24oRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBjcmVhdGVUcmFuc2Fj
dGlvbihleGVjLCBhcmdzLCBtX2ltcGwuZ2V0KCksIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4oZ2xvYmFsT2JqZWN0KCkpLCBmYWxzZSk7CisgICAgcmV0dXJuIGNyZWF0ZVRyYW5zYWN0
aW9uKGV4ZWMsIG1faW1wbC5nZXQoKSwgc3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihn
bG9iYWxPYmplY3QoKSksIGZhbHNlKTsKIH0KIAotSlNWYWx1ZSBKU0RhdGFiYXNlOjpyZWFkVHJh
bnNhY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBK
U0RhdGFiYXNlOjpyZWFkVHJhbnNhY3Rpb24oRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVy
biBjcmVhdGVUcmFuc2FjdGlvbihleGVjLCBhcmdzLCBtX2ltcGwuZ2V0KCksIHN0YXRpY19jYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkpLCB0cnVlKTsKKyAgICByZXR1cm4g
Y3JlYXRlVHJhbnNhY3Rpb24oZXhlYywgbV9pbXBsLmdldCgpLCBzdGF0aWNfY2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCgpKSwgdHJ1ZSk7CiB9CiAKIH0KSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3MvanMvSlNEYXRhYmFzZVN5bmNDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNEYXRhYmFzZVN5bmNDdXN0b20uY3BwCShyZXZpc2lvbiA2MDM0
MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNEYXRhYmFzZVN5bmNDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MiwxNyArNDIsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2lu
ZyBuYW1lc3BhY2UgSlNDOwogCi1KU1ZhbHVlIEpTRGF0YWJhc2VTeW5jOjpjaGFuZ2VWZXJzaW9u
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNEYXRhYmFz
ZVN5bmM6OmNoYW5nZVZlcnNpb24oRXhlY1N0YXRlKiBleGVjKQogewotICAgIFN0cmluZyBvbGRW
ZXJzaW9uID0gdXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpOworICAg
IFN0cmluZyBvbGRWZXJzaW9uID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRv
U3RyaW5nKGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgU3RyaW5nIG5ld1ZlcnNpb24gPSB1c3RyaW5nVG9T
dHJpbmcoYXJncy5hdCgxKS50b1N0cmluZyhleGVjKSk7CisgICAgU3RyaW5nIG5ld1ZlcnNpb24g
PSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYykpOwogICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAKLSAgICBKU09iamVjdCogb2JqZWN0ID0gYXJncy5hdCgyKS5nZXRPYmplY3QoKTsKKyAgICBK
U09iamVjdCogb2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoMikuZ2V0T2JqZWN0KCk7CiAgICAgaWYg
KCFvYmplY3QpIHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hf
RVJSKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC02Nyw5ICs2Nyw5IEBAIEpT
VmFsdWUgSlNEYXRhYmFzZVN5bmM6OmNoYW5nZVZlcnNpb24oRXgKICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIH0KIAotc3RhdGljIEpTVmFsdWUgY3JlYXRlVHJhbnNhY3Rpb24oRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBEYXRhYmFzZVN5bmMqIGRhdGFiYXNlLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBib29sIHJlYWRPbmx5KQorc3RhdGljIEpTVmFs
dWUgY3JlYXRlVHJhbnNhY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBEYXRhYmFzZVN5bmMqIGRhdGFi
YXNlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBib29sIHJlYWRPbmx5KQogewot
ICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhcmdzLmF0KDApLmdldE9iamVjdCgpOworICAgIEpTT2Jq
ZWN0KiBvYmplY3QgPSBleGVjLT5hcmd1bWVudCgwKS5nZXRPYmplY3QoKTsKICAgICBpZiAoIW9i
amVjdCkgewogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIp
OwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKQEAgLTg0LDE0ICs4NCwxNCBAQCBzdGF0
aWMgSlNWYWx1ZSBjcmVhdGVUcmFuc2FjdGlvbihFeGVjU3RhCiAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNEYXRhYmFzZVN5bmM6OnRyYW5zYWN0aW9uKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNEYXRhYmFzZVN5bmM6OnRy
YW5zYWN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gY3JlYXRlVHJhbnNhY3Rp
b24oZXhlYywgYXJncywgbV9pbXBsLmdldCgpLCBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVj
dCo+KGdsb2JhbE9iamVjdCgpKSwgZmFsc2UpOworICAgIHJldHVybiBjcmVhdGVUcmFuc2FjdGlv
bihleGVjLCBtX2ltcGwuZ2V0KCksIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xv
YmFsT2JqZWN0KCkpLCBmYWxzZSk7CiB9CiAKLUpTVmFsdWUgSlNEYXRhYmFzZVN5bmM6OnJlYWRU
cmFuc2FjdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVl
IEpTRGF0YWJhc2VTeW5jOjpyZWFkVHJhbnNhY3Rpb24oRXhlY1N0YXRlKiBleGVjKQogewotICAg
IHJldHVybiBjcmVhdGVUcmFuc2FjdGlvbihleGVjLCBhcmdzLCBtX2ltcGwuZ2V0KCksIHN0YXRp
Y19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkpLCB0cnVlKTsKKyAgICBy
ZXR1cm4gY3JlYXRlVHJhbnNhY3Rpb24oZXhlYywgbV9pbXBsLmdldCgpLCBzdGF0aWNfY2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCgpKSwgdHJ1ZSk7CiB9CiAKIH0KSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNEZWRpY2F0ZWRXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGVkaWNhdGVkV29ya2VyQ29udGV4
dEN1c3RvbS5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Rl
ZGljYXRlZFdvcmtlckNvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw5ICs0
Miw5IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlND
OjpKU1ZhbHVlIEpTRGVkaWNhdGVkV29ya2VyQ29udGV4dDo6cG9zdE1lc3NhZ2UoSlNDOjpFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncykKK0pTQzo6SlNWYWx1ZSBKU0Rl
ZGljYXRlZFdvcmtlckNvbnRleHQ6OnBvc3RNZXNzYWdlKEpTQzo6RXhlY1N0YXRlKiBleGVjKQog
ewotICAgIHJldHVybiBoYW5kbGVQb3N0TWVzc2FnZShleGVjLCBhcmdzLCBpbXBsKCkpOworICAg
IHJldHVybiBoYW5kbGVQb3N0TWVzc2FnZShleGVjLCBpbXBsKCkpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGVza3RvcE5vdGlmaWNh
dGlvbnNDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNEZXNr
dG9wTm90aWZpY2F0aW9uc0N1c3RvbS5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0Rlc2t0b3BOb3RpZmljYXRpb25zQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDUsMTcgKzQ1LDE3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotSlNWYWx1ZSBKU05vdGlmaWNhdGlvbkNlbnRlcjo6cmVxdWVzdFBlcm1pc3Np
b24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU05vdGlm
aWNhdGlvbkNlbnRlcjo6cmVxdWVzdFBlcm1pc3Npb24oRXhlY1N0YXRlKiBleGVjKQogewogICAg
IC8vIFBlcm1pc3Npb24gcmVxdWVzdCBpcyBvbmx5IHZhbGlkIGZyb20gcGFnZSBjb250ZXh0Lgog
ICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBpbXBsKCktPmNvbnRleHQoKTsK
ICAgICBpZiAoY29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpCiAgICAgICAgIHJldHVybiB0aHJv
d0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yKTsKIAotICAgIGlmICghYXJncy5hdCgwKS5pc09iamVj
dCgpKQorICAgIGlmICghZXhlYy0+YXJndW1lbnQoMCkuaXNPYmplY3QoKSkKICAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAotICAgIFBhc3NSZWZQdHI8SlNDdXN0
b21Wb2lkQ2FsbGJhY2s+IGNhbGxiYWNrID0gSlNDdXN0b21Wb2lkQ2FsbGJhY2s6OmNyZWF0ZShh
cmdzLmF0KDApLmdldE9iamVjdCgpLCB0b0pTRE9NR2xvYmFsT2JqZWN0KHN0YXRpY19jYXN0PERv
Y3VtZW50Kj4oY29udGV4dCksIGV4ZWMpKTsKKyAgICBQYXNzUmVmUHRyPEpTQ3VzdG9tVm9pZENh
bGxiYWNrPiBjYWxsYmFjayA9IEpTQ3VzdG9tVm9pZENhbGxiYWNrOjpjcmVhdGUoZXhlYy0+YXJn
dW1lbnQoMCkuZ2V0T2JqZWN0KCksIHRvSlNET01HbG9iYWxPYmplY3Qoc3RhdGljX2Nhc3Q8RG9j
dW1lbnQqPihjb250ZXh0KSwgZXhlYykpOwogCiAgICAgaW1wbCgpLT5yZXF1ZXN0UGVybWlzc2lv
bihjYWxsYmFjayk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRmxvYXRBcnJheUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0Zsb2F0QXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNGbG9hdEFycmF5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDYsOSArNDYsOSBAQCBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywg
CiAgICAgcmV0dXJuIGdldERPTU9iamVjdFdyYXBwZXI8SlNGbG9hdEFycmF5PihleGVjLCBnbG9i
YWxPYmplY3QsIG9iamVjdCk7CiB9CiAKLUpTQzo6SlNWYWx1ZSBKU0Zsb2F0QXJyYXk6OnNldChK
U0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpBcmdMaXN0IGNvbnN0JiBhcmdzKQorSlNDOjpKU1Zh
bHVlIEpTRmxvYXRBcnJheTo6c2V0KEpTQzo6RXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVy
biBzZXRXZWJHTEFycmF5SGVscGVyKGV4ZWMsIGltcGwoKSwgYXJncywgdG9GbG9hdEFycmF5KTsK
KyAgICByZXR1cm4gc2V0V2ViR0xBcnJheUhlbHBlcihleGVjLCBpbXBsKCksIHRvRmxvYXRBcnJh
eSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNHZW9sb2NhdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0dlb2xvY2F0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTR2VvbG9jYXRpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzUsMjAgKzEzNSwyMCBAQCBzdGF0aWMgUGFzc1JlZlB0cjxQb3NpdGlvbk9wdGlvbnM+IGNyZWF0
CiAgICAgcmV0dXJuIG9wdGlvbnMucmVsZWFzZSgpOwogfQogCi1KU1ZhbHVlIEpTR2VvbG9jYXRp
b246OmdldEN1cnJlbnRQb3NpdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCitKU1ZhbHVlIEpTR2VvbG9jYXRpb246OmdldEN1cnJlbnRQb3NpdGlvbihFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgLy8gQXJndW1lbnRzOiBQb3NpdGlvbkNhbGxiYWNrLCAob3B0aW9uYWwp
UG9zaXRpb25FcnJvckNhbGxiYWNrLCAob3B0aW9uYWwpUG9zaXRpb25PcHRpb25zCiAKLSAgICBS
ZWZQdHI8UG9zaXRpb25DYWxsYmFjaz4gcG9zaXRpb25DYWxsYmFjayA9IGNyZWF0ZVBvc2l0aW9u
Q2FsbGJhY2soZXhlYywgc3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCkpLCBhcmdzLmF0KDApKTsKKyAgICBSZWZQdHI8UG9zaXRpb25DYWxs
YmFjaz4gcG9zaXRpb25DYWxsYmFjayA9IGNyZWF0ZVBvc2l0aW9uQ2FsbGJhY2soZXhlYywgc3Rh
dGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkp
LCBleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBBU1NFUlQocG9zaXRpb25DYWxsYmFjayk7
CiAKLSAgICBSZWZQdHI8UG9zaXRpb25FcnJvckNhbGxiYWNrPiBwb3NpdGlvbkVycm9yQ2FsbGJh
Y2sgPSBjcmVhdGVQb3NpdGlvbkVycm9yQ2FsbGJhY2soZXhlYywgc3RhdGljX2Nhc3Q8SlNET01H
bG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLCBhcmdzLmF0KDEpKTsK
KyAgICBSZWZQdHI8UG9zaXRpb25FcnJvckNhbGxiYWNrPiBwb3NpdGlvbkVycm9yQ2FsbGJhY2sg
PSBjcmVhdGVQb3NpdGlvbkVycm9yQ2FsbGJhY2soZXhlYywgc3RhdGljX2Nhc3Q8SlNET01HbG9i
YWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLCBleGVjLT5hcmd1bWVudCgx
KSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIAotICAgIFJlZlB0cjxQb3NpdGlvbk9wdGlvbnM+IHBvc2l0aW9uT3B0aW9ucyA9
IGNyZWF0ZVBvc2l0aW9uT3B0aW9ucyhleGVjLCBhcmdzLmF0KDIpKTsKKyAgICBSZWZQdHI8UG9z
aXRpb25PcHRpb25zPiBwb3NpdGlvbk9wdGlvbnMgPSBjcmVhdGVQb3NpdGlvbk9wdGlvbnMoZXhl
YywgZXhlYy0+YXJndW1lbnQoMikpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgQVNTRVJUKHBvc2l0aW9uT3B0aW9ucyk7
CkBAIC0xNTcsMjAgKzE1NywyMCBAQCBKU1ZhbHVlIEpTR2VvbG9jYXRpb246OmdldEN1cnJlbnRQ
b3NpdGlvCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNHZW9sb2Nh
dGlvbjo6d2F0Y2hQb3NpdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CitKU1ZhbHVlIEpTR2VvbG9jYXRpb246OndhdGNoUG9zaXRpb24oRXhlY1N0YXRlKiBleGVjKQog
ewogICAgIC8vIEFyZ3VtZW50czogUG9zaXRpb25DYWxsYmFjaywgKG9wdGlvbmFsKVBvc2l0aW9u
RXJyb3JDYWxsYmFjaywgKG9wdGlvbmFsKVBvc2l0aW9uT3B0aW9ucwogCi0gICAgUmVmUHRyPFBv
c2l0aW9uQ2FsbGJhY2s+IHBvc2l0aW9uQ2FsbGJhY2sgPSBjcmVhdGVQb3NpdGlvbkNhbGxiYWNr
KGV4ZWMsIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpKSwgYXJncy5hdCgwKSk7CisgICAgUmVmUHRyPFBvc2l0aW9uQ2FsbGJhY2s+IHBv
c2l0aW9uQ2FsbGJhY2sgPSBjcmVhdGVQb3NpdGlvbkNhbGxiYWNrKGV4ZWMsIHN0YXRpY19jYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSwgZXhlYy0+
YXJndW1lbnQoMCkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgQVNTRVJUKHBvc2l0aW9uQ2FsbGJhY2spOwogCi0gICAg
UmVmUHRyPFBvc2l0aW9uRXJyb3JDYWxsYmFjaz4gcG9zaXRpb25FcnJvckNhbGxiYWNrID0gY3Jl
YXRlUG9zaXRpb25FcnJvckNhbGxiYWNrKGV4ZWMsIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSwgYXJncy5hdCgxKSk7CisgICAgUmVm
UHRyPFBvc2l0aW9uRXJyb3JDYWxsYmFjaz4gcG9zaXRpb25FcnJvckNhbGxiYWNrID0gY3JlYXRl
UG9zaXRpb25FcnJvckNhbGxiYWNrKGV4ZWMsIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0
Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSwgZXhlYy0+YXJndW1lbnQoMSkpOwogICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAKLSAgICBSZWZQdHI8UG9zaXRpb25PcHRpb25zPiBwb3NpdGlvbk9wdGlvbnMgPSBjcmVhdGVQ
b3NpdGlvbk9wdGlvbnMoZXhlYywgYXJncy5hdCgyKSk7CisgICAgUmVmUHRyPFBvc2l0aW9uT3B0
aW9ucz4gcG9zaXRpb25PcHRpb25zID0gY3JlYXRlUG9zaXRpb25PcHRpb25zKGV4ZWMsIGV4ZWMt
PmFyZ3VtZW50KDIpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogICAgIEFTU0VSVChwb3NpdGlvbk9wdGlvbnMpOwpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxBbGxDb2xsZWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3Bw
CShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQWxsQ29sbGVj
dGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDIxICs1OCwyMSBAQCBzdGF0aWMg
SlNWYWx1ZSBnZXROYW1lZEl0ZW1zKEV4ZWNTdGF0ZSogCiAKIC8vIEhUTUxDb2xsZWN0aW9ucyBh
cmUgc3RyYW5nZSBvYmplY3RzLCB0aGV5IHN1cHBvcnQgYm90aCBnZXQgYW5kIGNhbGwsCiAvLyBz
byB0aGF0IGRvY3VtZW50LmZvcm1zLml0ZW0oMCkgYW5kIGRvY3VtZW50LmZvcm1zKDApIGJvdGgg
d29yay4KLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEhUTUxBbGxDb2xsZWN0aW9u
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9uLCBKU1ZhbHVlLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSFRNTEFsbENvbGxl
Y3Rpb24oRXhlY1N0YXRlKiBleGVjKQogewotICAgIGlmIChhcmdzLnNpemUoKSA8IDEpCisgICAg
aWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogCiAgICAgLy8gRG8gbm90IHVzZSB0aGlzT2JqIGhlcmUuIEl0IGNhbiBiZSB0aGUgSlNI
VE1MRG9jdW1lbnQsIGluIHRoZSBkb2N1bWVudC5mb3JtcyhpKSBjYXNlLgotICAgIEpTSFRNTEFs
bENvbGxlY3Rpb24qIGpzQ29sbGVjdGlvbiA9IHN0YXRpY19jYXN0PEpTSFRNTEFsbENvbGxlY3Rp
b24qPihmdW5jdGlvbik7CisgICAgSlNIVE1MQWxsQ29sbGVjdGlvbioganNDb2xsZWN0aW9uID0g
c3RhdGljX2Nhc3Q8SlNIVE1MQWxsQ29sbGVjdGlvbio+KGV4ZWMtPmNhbGxlZSgpKTsKICAgICBI
VE1MQWxsQ29sbGVjdGlvbiogY29sbGVjdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxBbGxDb2xsZWN0
aW9uKj4oanNDb2xsZWN0aW9uLT5pbXBsKCkpOwogCiAgICAgLy8gQWxzbywgZG8gd2UgbmVlZCB0
aGUgVHlwZUVycm9yIHRlc3QgaGVyZSA/CiAKLSAgICBpZiAoYXJncy5zaXplKCkgPT0gMSkgewor
ICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPT0gMSkgewogICAgICAgICAvLyBTdXBwb3J0
IGZvciBkb2N1bWVudC5hbGwoPGluZGV4PikgZXRjLgogICAgICAgICBib29sIG9rOwotICAgICAg
ICBVU3RyaW5nIHN0cmluZyA9IGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyk7CisgICAgICAgIFVT
dHJpbmcgc3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CiAgICAgICAg
IHVuc2lnbmVkIGluZGV4ID0gc3RyaW5nLnRvVUludDMyKCZvaywgZmFsc2UpOwogICAgICAgICBp
ZiAob2spCiAgICAgICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBqc0NvbGxlY3Rpb24tPmdsb2Jh
bE9iamVjdCgpLCBjb2xsZWN0aW9uLT5pdGVtKGluZGV4KSk7CkBAIC04Myw4ICs4Myw4IEBAIHN0
YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEhUTUxBbGwKIAogICAgIC8vIFRoZSBzZWNv
bmQgYXJnLCBpZiBzZXQsIGlzIHRoZSBpbmRleCBvZiB0aGUgaXRlbSB3ZSB3YW50CiAgICAgYm9v
bCBvazsKLSAgICBVU3RyaW5nIHN0cmluZyA9IGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyk7Ci0g
ICAgdW5zaWduZWQgaW5kZXggPSBhcmdzLmF0KDEpLnRvU3RyaW5nKGV4ZWMpLnRvVUludDMyKCZv
aywgZmFsc2UpOworICAgIFVTdHJpbmcgc3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJp
bmcoZXhlYyk7CisgICAgdW5zaWduZWQgaW5kZXggPSBleGVjLT5hcmd1bWVudCgxKS50b1N0cmlu
ZyhleGVjKS50b1VJbnQzMigmb2ssIGZhbHNlKTsKICAgICBpZiAob2spIHsKICAgICAgICAgU3Ry
aW5nIHBzdHIgPSB1c3RyaW5nVG9TdHJpbmcoc3RyaW5nKTsKICAgICAgICAgTm9kZSogbm9kZSA9
IGNvbGxlY3Rpb24tPm5hbWVkSXRlbShwc3RyKTsKQEAgLTExOCwxOCArMTE4LDE4IEBAIEpTVmFs
dWUgSlNIVE1MQWxsQ29sbGVjdGlvbjo6bmFtZUdldHRlcigKICAgICByZXR1cm4gZ2V0TmFtZWRJ
dGVtcyhleGVjLCB0aGlzT2JqLCBwcm9wZXJ0eU5hbWUpOwogfQogCi1KU1ZhbHVlIEpTSFRNTEFs
bENvbGxlY3Rpb246Oml0ZW0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQor
SlNWYWx1ZSBKU0hUTUxBbGxDb2xsZWN0aW9uOjppdGVtKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBib29sIG9rOwotICAgIHVpbnQzMl90IGluZGV4ID0gYXJncy5hdCgwKS50b1N0cmluZyhleGVj
KS50b1VJbnQzMigmb2ssIGZhbHNlKTsKKyAgICB1aW50MzJfdCBpbmRleCA9IGV4ZWMtPmFyZ3Vt
ZW50KDApLnRvU3RyaW5nKGV4ZWMpLnRvVUludDMyKCZvaywgZmFsc2UpOwogICAgIGlmIChvaykK
ICAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGltcGwoKS0+aXRlbShp
bmRleCkpOwotICAgIHJldHVybiBnZXROYW1lZEl0ZW1zKGV4ZWMsIHRoaXMsIElkZW50aWZpZXIo
ZXhlYywgYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSkpOworICAgIHJldHVybiBnZXROYW1lZEl0
ZW1zKGV4ZWMsIHRoaXMsIElkZW50aWZpZXIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJp
bmcoZXhlYykpKTsKIH0KIAotSlNWYWx1ZSBKU0hUTUxBbGxDb2xsZWN0aW9uOjpuYW1lZEl0ZW0o
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0hUTUxBbGxD
b2xsZWN0aW9uOjpuYW1lZEl0ZW0oRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBnZXRO
YW1lZEl0ZW1zKGV4ZWMsIHRoaXMsIElkZW50aWZpZXIoZXhlYywgYXJncy5hdCgwKS50b1N0cmlu
ZyhleGVjKSkpOworICAgIHJldHVybiBnZXROYW1lZEl0ZW1zKGV4ZWMsIHRoaXMsIElkZW50aWZp
ZXIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNF
bGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRN
TENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ5LDE3ICs0OSwxNyBAQCB2b2lkIEpTSFRNTENhbnZhc0VsZW1lbnQ6Om1hcmtDaGlsZHJlbihN
CiAgICAgbWFya0RPTU9iamVjdFdyYXBwZXIobWFya1N0YWNrLCBnbG9iYWxEYXRhLCBjYW52YXMt
PnJlbmRlcmluZ0NvbnRleHQoKSk7CiB9CiAKLUpTVmFsdWUgSlNIVE1MQ2FudmFzRWxlbWVudDo6
Z2V0Q29udGV4dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVl
IEpTSFRNTENhbnZhc0VsZW1lbnQ6OmdldENvbnRleHQoRXhlY1N0YXRlKiBleGVjKQogewogICAg
IEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBzdGF0aWNfY2FzdDxIVE1MQ2FudmFzRWxlbWVu
dCo+KGltcGwoKSk7Ci0gICAgY29uc3QgVVN0cmluZyYgY29udGV4dElkID0gYXJncy5hdCgwKS50
b1N0cmluZyhleGVjKTsKKyAgICBjb25zdCBVU3RyaW5nJiBjb250ZXh0SWQgPSBleGVjLT5hcmd1
bWVudCgwKS50b1N0cmluZyhleGVjKTsKICAgICBSZWZQdHI8Q2FudmFzQ29udGV4dEF0dHJpYnV0
ZXM+IGF0dHJzOwogI2lmIEVOQUJMRSgzRF9DQU5WQVMpCiAgICAgaWYgKGNvbnRleHRJZCA9PSAi
ZXhwZXJpbWVudGFsLXdlYmdsIiB8fCBjb250ZXh0SWQgPT0gIndlYmtpdC0zZCIpIHsKICAgICAg
ICAgYXR0cnMgPSBXZWJHTENvbnRleHRBdHRyaWJ1dGVzOjpjcmVhdGUoKTsKICAgICAgICAgV2Vi
R0xDb250ZXh0QXR0cmlidXRlcyogd2ViR0xBdHRycyA9IHN0YXRpY19jYXN0PFdlYkdMQ29udGV4
dEF0dHJpYnV0ZXMqPihhdHRycy5nZXQoKSk7Ci0gICAgICAgIGlmIChhcmdzLnNpemUoKSA+IDEg
JiYgYXJncy5hdCgxKS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICBKU09iamVjdCoganNBdHRy
cyA9IGFyZ3MuYXQoMSkuZ2V0T2JqZWN0KCk7CisgICAgICAgIGlmIChleGVjLT5hcmd1bWVudENv
dW50KCkgPiAxICYmIGV4ZWMtPmFyZ3VtZW50KDEpLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAg
IEpTT2JqZWN0KiBqc0F0dHJzID0gZXhlYy0+YXJndW1lbnQoMSkuZ2V0T2JqZWN0KCk7CiAgICAg
ICAgICAgICBJZGVudGlmaWVyIGFscGhhKGV4ZWMsICJhbHBoYSIpOwogICAgICAgICAgICAgaWYg
KGpzQXR0cnMtPmhhc1Byb3BlcnR5KGV4ZWMsIGFscGhhKSkKICAgICAgICAgICAgICAgICB3ZWJH
TEF0dHJzLT5zZXRBbHBoYShqc0F0dHJzLT5nZXQoZXhlYywgYWxwaGEpLnRvQm9vbGVhbihleGVj
KSk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENvbGxlY3Rpb25DdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ29sbGVjdGlvbkN1c3Rv
bS5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDb2xs
ZWN0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsMjEgKzU1LDIxIEBAIHN0YXRp
YyBKU1ZhbHVlIGdldE5hbWVkSXRlbXMoRXhlY1N0YXRlKiAKIAogLy8gSFRNTENvbGxlY3Rpb25z
IGFyZSBzdHJhbmdlIG9iamVjdHMsIHRoZXkgc3VwcG9ydCBib3RoIGdldCBhbmQgY2FsbCwKIC8v
IHNvIHRoYXQgZG9jdW1lbnQuZm9ybXMuaXRlbSgwKSBhbmQgZG9jdW1lbnQuZm9ybXMoMCkgYm90
aCB3b3JrLgotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSFRNTENvbGxlY3Rpb24o
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogZnVuY3Rpb24sIEpTVmFsdWUsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxIVE1MQ29sbGVjdGlv
bihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMSkKKyAgICBpZiAo
ZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAKICAgICAvLyBEbyBub3QgdXNlIHRoaXNPYmogaGVyZS4gSXQgY2FuIGJlIHRoZSBKU0hUTUxE
b2N1bWVudCwgaW4gdGhlIGRvY3VtZW50LmZvcm1zKGkpIGNhc2UuCi0gICAgSlNIVE1MQ29sbGVj
dGlvbioganNDb2xsZWN0aW9uID0gc3RhdGljX2Nhc3Q8SlNIVE1MQ29sbGVjdGlvbio+KGZ1bmN0
aW9uKTsKKyAgICBKU0hUTUxDb2xsZWN0aW9uKiBqc0NvbGxlY3Rpb24gPSBzdGF0aWNfY2FzdDxK
U0hUTUxDb2xsZWN0aW9uKj4oZXhlYy0+Y2FsbGVlKCkpOwogICAgIEhUTUxDb2xsZWN0aW9uKiBj
b2xsZWN0aW9uID0ganNDb2xsZWN0aW9uLT5pbXBsKCk7CiAKICAgICAvLyBBbHNvLCBkbyB3ZSBu
ZWVkIHRoZSBUeXBlRXJyb3IgdGVzdCBoZXJlID8KIAotICAgIGlmIChhcmdzLnNpemUoKSA9PSAx
KSB7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA9PSAxKSB7CiAgICAgICAgIC8vIFN1
cHBvcnQgZm9yIGRvY3VtZW50LmFsbCg8aW5kZXg+KSBldGMuCiAgICAgICAgIGJvb2wgb2s7Ci0g
ICAgICAgIFVTdHJpbmcgc3RyaW5nID0gYXJncy5hdCgwKS50b1N0cmluZyhleGVjKTsKKyAgICAg
ICAgVVN0cmluZyBzdHJpbmcgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKTsKICAg
ICAgICAgdW5zaWduZWQgaW5kZXggPSBzdHJpbmcudG9VSW50MzIoJm9rLCBmYWxzZSk7CiAgICAg
ICAgIGlmIChvaykKICAgICAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGpzQ29sbGVjdGlvbi0+
Z2xvYmFsT2JqZWN0KCksIGNvbGxlY3Rpb24tPml0ZW0oaW5kZXgpKTsKQEAgLTgwLDggKzgwLDgg
QEAgc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSFRNTENvbAogCiAgICAgLy8gVGhl
IHNlY29uZCBhcmcsIGlmIHNldCwgaXMgdGhlIGluZGV4IG9mIHRoZSBpdGVtIHdlIHdhbnQKICAg
ICBib29sIG9rOwotICAgIFVTdHJpbmcgc3RyaW5nID0gYXJncy5hdCgwKS50b1N0cmluZyhleGVj
KTsKLSAgICB1bnNpZ25lZCBpbmRleCA9IGFyZ3MuYXQoMSkudG9TdHJpbmcoZXhlYykudG9VSW50
MzIoJm9rLCBmYWxzZSk7CisgICAgVVN0cmluZyBzdHJpbmcgPSBleGVjLT5hcmd1bWVudCgwKS50
b1N0cmluZyhleGVjKTsKKyAgICB1bnNpZ25lZCBpbmRleCA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRv
U3RyaW5nKGV4ZWMpLnRvVUludDMyKCZvaywgZmFsc2UpOwogICAgIGlmIChvaykgewogICAgICAg
ICBTdHJpbmcgcHN0ciA9IHVzdHJpbmdUb1N0cmluZyhzdHJpbmcpOwogICAgICAgICBOb2RlKiBu
b2RlID0gY29sbGVjdGlvbi0+bmFtZWRJdGVtKHBzdHIpOwpAQCAtMTE1LDE4ICsxMTUsMTggQEAg
SlNWYWx1ZSBKU0hUTUxDb2xsZWN0aW9uOjpuYW1lR2V0dGVyKEV4ZQogICAgIHJldHVybiBnZXRO
YW1lZEl0ZW1zKGV4ZWMsIHRoaXNPYmosIHByb3BlcnR5TmFtZSk7CiB9CiAKLUpTVmFsdWUgSlNI
VE1MQ29sbGVjdGlvbjo6aXRlbShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CitKU1ZhbHVlIEpTSFRNTENvbGxlY3Rpb246Oml0ZW0oRXhlY1N0YXRlKiBleGVjKQogewogICAg
IGJvb2wgb2s7Ci0gICAgdWludDMyX3QgaW5kZXggPSBhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMp
LnRvVUludDMyKCZvaywgZmFsc2UpOworICAgIHVpbnQzMl90IGluZGV4ID0gZXhlYy0+YXJndW1l
bnQoMCkudG9TdHJpbmcoZXhlYykudG9VSW50MzIoJm9rLCBmYWxzZSk7CiAgICAgaWYgKG9rKQog
ICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW1wbCgpLT5pdGVtKGlu
ZGV4KSk7Ci0gICAgcmV0dXJuIGdldE5hbWVkSXRlbXMoZXhlYywgdGhpcywgSWRlbnRpZmllcihl
eGVjLCBhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgcmV0dXJuIGdldE5hbWVkSXRl
bXMoZXhlYywgdGhpcywgSWRlbnRpZmllcihleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmlu
ZyhleGVjKSkpOwogfQogCi1KU1ZhbHVlIEpTSFRNTENvbGxlY3Rpb246Om5hbWVkSXRlbShFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTSFRNTENvbGxlY3Rp
b246Om5hbWVkSXRlbShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGdldE5hbWVkSXRl
bXMoZXhlYywgdGhpcywgSWRlbnRpZmllcihleGVjLCBhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMp
KSk7CisgICAgcmV0dXJuIGdldE5hbWVkSXRlbXMoZXhlYywgdGhpcywgSWRlbnRpZmllcihleGVj
LCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSkpOwogfQogCiBKU1ZhbHVlIHRvSlMo
RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBIVE1MQ29s
bGVjdGlvbiogY29sbGVjdGlvbikKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRG9j
dW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1M
RG9jdW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsMTAgKzEw
MCwxMCBAQCB2b2lkIEpTSFRNTERvY3VtZW50OjpzZXRBbGwoRXhlY1N0YXRlKiBlCiAKIC8vIEN1
c3RvbSBmdW5jdGlvbnMKIAotSlNWYWx1ZSBKU0hUTUxEb2N1bWVudDo6b3BlbihFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTSFRNTERvY3VtZW50OjpvcGVu
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICAvLyBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIG90aGVy
IGJyb3dzZXJzLCBwYXNzIG9wZW4gY2FsbHMgd2l0aCBtb3JlIHRoYW4gMiBwYXJhbWV0ZXJzIHRv
IHRoZSB3aW5kb3cuCi0gICAgaWYgKGFyZ3Muc2l6ZSgpID4gMikgeworICAgIGlmIChleGVjLT5h
cmd1bWVudENvdW50KCkgPiAyKSB7CiAgICAgICAgIEZyYW1lKiBmcmFtZSA9IHN0YXRpY19jYXN0
PEhUTUxEb2N1bWVudCo+KGltcGwoKSktPmZyYW1lKCk7CiAgICAgICAgIGlmIChmcmFtZSkgewog
ICAgICAgICAgICAgSlNET01XaW5kb3dTaGVsbCogd3JhcHBlciA9IHRvSlNET01XaW5kb3dTaGVs
bChmcmFtZSwgY3VycmVudFdvcmxkKGV4ZWMpKTsKQEAgLTExMyw3ICsxMTMsNyBAQCBKU1ZhbHVl
IEpTSFRNTERvY3VtZW50OjpvcGVuKEV4ZWNTdGF0ZSogCiAgICAgICAgICAgICAgICAgQ2FsbFR5
cGUgY2FsbFR5cGUgPSBmdW5jdGlvbi5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CiAgICAgICAgICAg
ICAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gSlNDOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHdyYXBwZXIs
IGFyZ3MpOworICAgICAgICAgICAgICAgIHJldHVybiBKU0M6OmNhbGwoZXhlYywgZnVuY3Rpb24s
IGNhbGxUeXBlLCBjYWxsRGF0YSwgd3JhcHBlciwgQXJnTGlzdChleGVjKSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC0xMzAsMjAg
KzEzMCwyMCBAQCBKU1ZhbHVlIEpTSFRNTERvY3VtZW50OjpvcGVuKEV4ZWNTdGF0ZSogCiAKIGVu
dW0gTmV3bGluZVJlcXVpcmVtZW50IHsgRG9Ob3RBZGROZXdsaW5lLCBEb0FkZE5ld2xpbmUgfTsK
IAotc3RhdGljIGlubGluZSB2b2lkIGRvY3VtZW50V3JpdGUoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBBcmdMaXN0JiBhcmdzLCBIVE1MRG9jdW1lbnQqIGRvY3VtZW50LCBOZXdsaW5lUmVxdWlyZW1l
bnQgYWRkTmV3bGluZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBkb2N1bWVudFdyaXRlKEV4ZWNTdGF0
ZSogZXhlYywgSFRNTERvY3VtZW50KiBkb2N1bWVudCwgTmV3bGluZVJlcXVpcmVtZW50IGFkZE5l
d2xpbmUpCiB7CiAgICAgLy8gRE9NIG9ubHkgc3BlY2lmaWVzIHNpbmdsZSBzdHJpbmcgYXJndW1l
bnQsIGJ1dCBicm93c2VycyBhbGxvdyBtdWx0aXBsZSBvciBubyBhcmd1bWVudHMuCiAKLSAgICBz
aXplX3Qgc2l6ZSA9IGFyZ3Muc2l6ZSgpOworICAgIHNpemVfdCBzaXplID0gZXhlYy0+YXJndW1l
bnRDb3VudCgpOwogCi0gICAgVVN0cmluZyBmaXJzdFN0cmluZyA9IGFyZ3MuYXQoMCkudG9TdHJp
bmcoZXhlYyk7CisgICAgVVN0cmluZyBmaXJzdFN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRv
U3RyaW5nKGV4ZWMpOwogICAgIFNlZ21lbnRlZFN0cmluZyBzZWdtZW50ZWRTdHJpbmcgPSB1c3Ry
aW5nVG9TdHJpbmcoZmlyc3RTdHJpbmcpOwogICAgIGlmIChzaXplICE9IDEpIHsKICAgICAgICAg
aWYgKCFzaXplKQogICAgICAgICAgICAgc2VnbWVudGVkU3RyaW5nLmNsZWFyKCk7CiAgICAgICAg
IGVsc2UgewogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBzaXplOyArK2kpIHsK
LSAgICAgICAgICAgICAgICBVU3RyaW5nIHN1YnNlcXVlbnRTdHJpbmcgPSBhcmdzLmF0KGkpLnRv
U3RyaW5nKGV4ZWMpOworICAgICAgICAgICAgICAgIFVTdHJpbmcgc3Vic2VxdWVudFN0cmluZyA9
IGV4ZWMtPmFyZ3VtZW50KGkpLnRvU3RyaW5nKGV4ZWMpOwogICAgICAgICAgICAgICAgIHNlZ21l
bnRlZFN0cmluZy5hcHBlbmQoU2VnbWVudGVkU3RyaW5nKHVzdHJpbmdUb1N0cmluZyhzdWJzZXF1
ZW50U3RyaW5nKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xNTUsMTUgKzE1NSwx
NSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZG9jdW1lbnRXcml0ZShFeGVjU3RhCiAgICAgZG9jdW1l
bnQtPndyaXRlKHNlZ21lbnRlZFN0cmluZywgYWN0aXZlRG9jdW1lbnQpOwogfQogCi1KU1ZhbHVl
IEpTSFRNTERvY3VtZW50Ojp3cml0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCitKU1ZhbHVlIEpTSFRNTERvY3VtZW50Ojp3cml0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0g
ICAgZG9jdW1lbnRXcml0ZShleGVjLCBhcmdzLCBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihp
bXBsKCkpLCBEb05vdEFkZE5ld2xpbmUpOworICAgIGRvY3VtZW50V3JpdGUoZXhlYywgc3RhdGlj
X2Nhc3Q8SFRNTERvY3VtZW50Kj4oaW1wbCgpKSwgRG9Ob3RBZGROZXdsaW5lKTsKICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBKU0hUTUxEb2N1bWVudDo6d3JpdGVsbihF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTSFRNTERvY3Vt
ZW50Ojp3cml0ZWxuKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBkb2N1bWVudFdyaXRlKGV4ZWMs
IGFyZ3MsIHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+KGltcGwoKSksIERvQWRkTmV3bGluZSk7
CisgICAgZG9jdW1lbnRXcml0ZShleGVjLCBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihpbXBs
KCkpLCBEb0FkZE5ld2xpbmUpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTElucHV0RWxlbWVudEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxJbnB1dEVsZW1lbnRDdXN0b20uY3Bw
CShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MSW5wdXRFbGVt
ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDE0ICsxMDMsMTQgQEAgdm9pZCBK
U0hUTUxJbnB1dEVsZW1lbnQ6OnNldFNlbGVjdGlvbkVuZAogICAgIGlucHV0LT5zZXRTZWxlY3Rp
b25FbmQodmFsdWUudG9JbnQzMihleGVjKSk7CiB9CiAKLUpTVmFsdWUgSlNIVE1MSW5wdXRFbGVt
ZW50OjpzZXRTZWxlY3Rpb25SYW5nZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCitKU1ZhbHVlIEpTSFRNTElucHV0RWxlbWVudDo6c2V0U2VsZWN0aW9uUmFuZ2UoRXhlY1N0
YXRlKiBleGVjKQogewogICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8
SFRNTElucHV0RWxlbWVudCo+KGltcGwoKSk7CiAgICAgaWYgKCFpbnB1dC0+Y2FuSGF2ZVNlbGVj
dGlvbigpKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCi0g
ICAgaW50IHN0YXJ0ID0gYXJncy5hdCgwKS50b0ludDMyKGV4ZWMpOwotICAgIGludCBlbmQgPSBh
cmdzLmF0KDEpLnRvSW50MzIoZXhlYyk7CisgICAgaW50IHN0YXJ0ID0gZXhlYy0+YXJndW1lbnQo
MCkudG9JbnQzMihleGVjKTsKKyAgICBpbnQgZW5kID0gZXhlYy0+YXJndW1lbnQoMSkudG9JbnQz
MihleGVjKTsKIAogICAgIGlucHV0LT5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kKTsKICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1M
T3B0aW9uc0NvbGxlY3Rpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb25DdXN0b20uY3BwCShyZXZpc2lvbiA2MDM0MSkK
KysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb25DdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02NywxNiArNjcsMTYgQEAgdm9pZCBKU0hUTUxPcHRpb25zQ29s
bGVjdGlvbjo6aW5kZXhTZXR0ZQogICAgIHNlbGVjdEluZGV4U2V0dGVyKGJhc2UsIGV4ZWMsIGlu
ZGV4LCB2YWx1ZSk7CiB9CiAKLUpTVmFsdWUgSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb246OmFkZChF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTSFRNTE9wdGlv
bnNDb2xsZWN0aW9uOjphZGQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEhUTUxPcHRpb25zQ29s
bGVjdGlvbiogaW1wID0gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbnNDb2xsZWN0aW9uKj4oaW1wbCgp
KTsKLSAgICBIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9uID0gdG9IVE1MT3B0aW9uRWxlbWVudChh
cmdzLmF0KDApKTsKKyAgICBIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9uID0gdG9IVE1MT3B0aW9u
RWxlbWVudChleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0g
ICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMikKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwg
MikKICAgICAgICAgaW1wLT5hZGQob3B0aW9uLCBlYyk7CiAgICAgZWxzZSB7CiAgICAgICAgIGJv
b2wgb2s7Ci0gICAgICAgIGludCBpbmRleCA9IGFyZ3MuYXQoMSkudG9JbnQzMihleGVjLCBvayk7
CisgICAgICAgIGludCBpbmRleCA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYywgb2sp
OwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKICAgICAgICAgaWYgKCFvaykKQEAgLTg4LDExICs4OCwxMSBAQCBKU1Zh
bHVlIEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uOjphZGQoRXhlCiAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb246OnJlbW92ZShFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTSFRNTE9wdGlvbnND
b2xsZWN0aW9uOjpyZW1vdmUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEhUTUxPcHRpb25zQ29s
bGVjdGlvbiogaW1wID0gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbnNDb2xsZWN0aW9uKj4oaW1wbCgp
KTsKICAgICBKU0hUTUxTZWxlY3RFbGVtZW50KiBiYXNlID0gc3RhdGljX2Nhc3Q8SlNIVE1MU2Vs
ZWN0RWxlbWVudCo+KGFzT2JqZWN0KHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGltcC0+YmFz
ZSgpKSkpOwotICAgIHJldHVybiBiYXNlLT5yZW1vdmUoZXhlYywgYXJncyk7CisgICAgcmV0dXJu
IGJhc2UtPnJlbW92ZShleGVjKTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0hUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA2MDM0MSkKKysr
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDE2ICszMiwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBu
YW1lc3BhY2UgSlNDOwogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotSlNWYWx1ZSBKU0hU
TUxTZWxlY3RFbGVtZW50OjpyZW1vdmUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQorSlNWYWx1ZSBKU0hUTUxTZWxlY3RFbGVtZW50OjpyZW1vdmUoRXhlY1N0YXRlKiBleGVj
KQogewogICAgIEhUTUxTZWxlY3RFbGVtZW50JiBzZWxlY3QgPSAqc3RhdGljX2Nhc3Q8SFRNTFNl
bGVjdEVsZW1lbnQqPihpbXBsKCkpOwogCiAgICAgLy8gd2Ugc3VwcG9ydCBib3RoIG9wdGlvbnMg
aW5kZXggYW5kIG9wdGlvbnMgb2JqZWN0cwotICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gdG9I
VE1MRWxlbWVudChhcmdzLmF0KDApKTsKKyAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHRvSFRN
TEVsZW1lbnQoZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQt
Pmhhc1RhZ05hbWUob3B0aW9uVGFnKSkKICAgICAgICAgc2VsZWN0LnJlbW92ZShzdGF0aWNfY2Fz
dDxIVE1MT3B0aW9uRWxlbWVudCo+KGVsZW1lbnQpLT5pbmRleCgpKTsKICAgICBlbHNlCi0gICAg
ICAgIHNlbGVjdC5yZW1vdmUoYXJncy5hdCgwKS50b0ludDMyKGV4ZWMpKTsKKyAgICAgICAgc2Vs
ZWN0LnJlbW92ZShleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpKTsKIAogICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3Vz
dG9tLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9y
eUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MiwxOSArMTYyLDE5IEBAIHZvaWQgSlNI
aXN0b3J5OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEV4ZWMKICAgICBCYXNlOjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCi1KU1ZhbHVlIEpTSGlzdG9y
eTo6cHVzaFN0YXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFs
dWUgSlNIaXN0b3J5OjpwdXNoU3RhdGUoRXhlY1N0YXRlKiBleGVjKQogewotICAgIFJlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+IGhpc3RvcnlTdGF0ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6Y3JlYXRlKGV4ZWMsIGFyZ3MuYXQoMCkpOworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IGhpc3RvcnlTdGF0ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMs
IGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgU3RyaW5nIHRpdGxlID0gdmFsdWVUb1N0
cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhleGVjLCBhcmdzLmF0KDEpKTsKKyAgICBTdHJp
bmcgdGl0bGUgPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGV4ZWMsIGV4
ZWMtPmFyZ3VtZW50KDEpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICAKICAgICBTdHJpbmcgdXJsOwotICAgIGlm
IChhcmdzLnNpemUoKSA+IDIpIHsKLSAgICAgICAgdXJsID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRl
ZmluZWRPck51bGxDaGVjayhleGVjLCBhcmdzLmF0KDIpKTsKKyAgICBpZiAoZXhlYy0+YXJndW1l
bnRDb3VudCgpID4gMikgeworICAgICAgICB1cmwgPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5l
ZE9yTnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDIpKTsKICAgICAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAg
fQpAQCAtMTg2LDE5ICsxODYsMTkgQEAgSlNWYWx1ZSBKU0hpc3Rvcnk6OnB1c2hTdGF0ZShFeGVj
U3RhdGUqIAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlIEpTSGlzdG9y
eTo6cmVwbGFjZVN0YXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pT
VmFsdWUgSlNIaXN0b3J5OjpyZXBsYWNlU3RhdGUoRXhlY1N0YXRlKiBleGVjKQogewotICAgIFJl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGhpc3RvcnlTdGF0ZSA9IFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsIGFyZ3MuYXQoMCkpOworICAgIFJlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IGhpc3RvcnlTdGF0ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRl
KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgU3RyaW5nIHRpdGxlID0gdmFs
dWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhleGVjLCBhcmdzLmF0KDEpKTsKKyAg
ICBTdHJpbmcgdGl0bGUgPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGV4
ZWMsIGV4ZWMtPmFyZ3VtZW50KDEpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICAKICAgICBTdHJpbmcgdXJsOwot
ICAgIGlmIChhcmdzLnNpemUoKSA+IDIpIHsKLSAgICAgICAgdXJsID0gdmFsdWVUb1N0cmluZ1dp
dGhVbmRlZmluZWRPck51bGxDaGVjayhleGVjLCBhcmdzLmF0KDIpKTsKKyAgICBpZiAoZXhlYy0+
YXJndW1lbnRDb3VudCgpID4gMikgeworICAgICAgICB1cmwgPSB2YWx1ZVRvU3RyaW5nV2l0aFVu
ZGVmaW5lZE9yTnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDIpKTsKICAgICAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAgICAgfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0SG9zdEN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVjdGVkU2Ny
aXB0SG9zdEN1c3RvbS5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0luamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCwx
NiArMTA0LDE2IEBAIFNjcmlwdE9iamVjdCBJbmplY3RlZFNjcmlwdEhvc3Q6OmNyZWF0ZUkKIH0K
IAogI2lmIEVOQUJMRShEQVRBQkFTRSkKLUpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OmRh
dGFiYXNlRm9ySWQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1
ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6ZGF0YWJhc2VGb3JJZChFeGVjU3RhdGUqIGV4ZWMpCiB7
Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMSkKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgp
IDwgMSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBJbnNwZWN0b3JDb250
cm9sbGVyKiBpYyA9IGltcGwoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpOwogICAgIGlmICghaWMp
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgRGF0YWJhc2UqIGRhdGFiYXNl
ID0gaW1wbCgpLT5kYXRhYmFzZUZvcklkKGFyZ3MuYXQoMCkudG9JbnQzMihleGVjKSk7CisgICAg
RGF0YWJhc2UqIGRhdGFiYXNlID0gaW1wbCgpLT5kYXRhYmFzZUZvcklkKGV4ZWMtPmFyZ3VtZW50
KDApLnRvSW50MzIoZXhlYykpOwogICAgIGlmICghZGF0YWJhc2UpCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogICAgIHJldHVybiB0b0pTKGV4ZWMsIGRhdGFiYXNlKTsKQEAgLTEyMSw3
ICsxMjEsNyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpkYXRhYmFzZUZvCiAjZW5k
aWYKIAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotSlNWYWx1ZSBKU0luamVjdGVk
U2NyaXB0SG9zdDo6Y3VycmVudENhbGxGcmFtZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmKQorSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6Y3VycmVudENhbGxGcmFtZShFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgSmF2YVNjcmlwdENhbGxGcmFtZSogY2FsbEZyYW1lID0gU2Ny
aXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLmN1cnJlbnRDYWxsRnJhbWUoKTsKICAgICBpZiAoIWNh
bGxGcmFtZSB8fCAhY2FsbEZyYW1lLT5pc1ZhbGlkKCkpCkBAIC0xMzIsMTIgKzEzMiwxMiBAQCBK
U1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpjdXJyZW50Q2FsCiB9CiAjZW5kaWYKIAotSlNW
YWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6bm9kZUZvcklkKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6Om5vZGVGb3JJ
ZChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMSkKKyAgICBpZiAo
ZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAKLSAgICBOb2RlKiBub2RlID0gaW1wbCgpLT5ub2RlRm9ySWQoYXJncy5hdCgwKS50b0ludDMy
KGV4ZWMpKTsKKyAgICBOb2RlKiBub2RlID0gaW1wbCgpLT5ub2RlRm9ySWQoZXhlYy0+YXJndW1l
bnQoMCkudG9JbnQzMihleGVjKSk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIApAQCAtMTQ5LDI3ICsxNDksMjcgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2Ny
aXB0SG9zdDo6bm9kZUZvcklkKAogICAgIHJldHVybiB0b0pTKGV4ZWMsIG5vZGUpOwogfQogCi1K
U1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNJbmplY3RlZFNjcmlw
dEhvc3Q6OnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGlm
IChhcmdzLnNpemUoKSA8IDMpCisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDMpCiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgTm9kZSogbm9kZSA9IHRvTm9kZShh
cmdzLmF0KDApKTsKKyAgICBOb2RlKiBub2RlID0gdG9Ob2RlKGV4ZWMtPmFyZ3VtZW50KDApKTsK
ICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgYm9v
bCB3aXRoQ2hpbGRyZW4gPSBhcmdzLmF0KDEpLnRvQm9vbGVhbihleGVjKTsKLSAgICBib29sIHNl
bGVjdEluVUkgPSBhcmdzLmF0KDIpLnRvQm9vbGVhbihleGVjKTsKKyAgICBib29sIHdpdGhDaGls
ZHJlbiA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvQm9vbGVhbihleGVjKTsKKyAgICBib29sIHNlbGVj
dEluVUkgPSBleGVjLT5hcmd1bWVudCgyKS50b0Jvb2xlYW4oZXhlYyk7CiAgICAgcmV0dXJuIGpz
TnVtYmVyKGV4ZWMsIGltcGwoKS0+cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChub2RlLCB3aXRoQ2hp
bGRyZW4sIHNlbGVjdEluVUkpKTsKIH0KIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKLUpTVmFsdWUg
SlNJbmplY3RlZFNjcmlwdEhvc3Q6OnNlbGVjdERhdGFiYXNlKEV4ZWNTdGF0ZSosIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpzZWxlY3REYXRhYmFz
ZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMSkKKyAgICBpZiAo
ZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAKLSAgICBEYXRhYmFzZSogZGF0YWJhc2UgPSB0b0RhdGFiYXNlKGFyZ3MuYXQoMCkpOworICAg
IERhdGFiYXNlKiBkYXRhYmFzZSA9IHRvRGF0YWJhc2UoZXhlYy0+YXJndW1lbnQoMCkpOwogICAg
IGlmIChkYXRhYmFzZSkKICAgICAgICAgaW1wbCgpLT5zZWxlY3REYXRhYmFzZShkYXRhYmFzZSk7
CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC0xNzcsMzQgKzE3NywzNCBAQCBKU1ZhbHVl
IEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpzZWxlY3REYXRhCiAjZW5kaWYKIAogI2lmIEVOQUJMRShE
T01fU1RPUkFHRSkKLUpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OnNlbGVjdERPTVN0b3Jh
Z2UoRXhlY1N0YXRlKiwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNJbmplY3RlZFNj
cmlwdEhvc3Q6OnNlbGVjdERPTVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGlmIChh
cmdzLnNpemUoKSA8IDEpCisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGljID0g
aW1wbCgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCk7CiAgICAgaWYgKCFpYykKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBTdG9yYWdlKiBzdG9yYWdlID0gdG9TdG9yYWdlKGFy
Z3MuYXQoMCkpOworICAgIFN0b3JhZ2UqIHN0b3JhZ2UgPSB0b1N0b3JhZ2UoZXhlYy0+YXJndW1l
bnQoMCkpOwogICAgIGlmIChzdG9yYWdlKQogICAgICAgICBpbXBsKCktPnNlbGVjdERPTVN0b3Jh
Z2Uoc3RvcmFnZSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAjZW5kaWYKIAotSlNW
YWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6cmVwb3J0RGlkRGlzcGF0Y2hPbkluamVjdGVkU2Ny
aXB0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNJbmpl
Y3RlZFNjcmlwdEhvc3Q6OnJlcG9ydERpZERpc3BhdGNoT25JbmplY3RlZFNjcmlwdChFeGVjU3Rh
dGUqIGV4ZWMpCiB7Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMykKKyAgICBpZiAoZXhlYy0+YXJn
dW1lbnRDb3VudCgpIDwgMykKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgCi0g
ICAgaWYgKCFhcmdzLmF0KDApLmlzSW50MzIoKSkKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDAp
LmlzSW50MzIoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgaW50IGNhbGxJ
ZCA9IGFyZ3MuYXQoMCkuYXNJbnQzMigpOworICAgIGludCBjYWxsSWQgPSBleGVjLT5hcmd1bWVu
dCgwKS5hc0ludDMyKCk7CiAgICAgCi0gICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
cmVzdWx0KFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsIGFyZ3MuYXQoMSkpKTsK
KyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiByZXN1bHQoU2VyaWFsaXplZFNjcmlw
dFZhbHVlOjpjcmVhdGUoZXhlYywgZXhlYy0+YXJndW1lbnQoMSkpKTsKICAgICAKICAgICBib29s
IGlzRXhjZXB0aW9uOwotICAgIGlmICghYXJncy5hdCgyKS5nZXRCb29sZWFuKGlzRXhjZXB0aW9u
KSkKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDIpLmdldEJvb2xlYW4oaXNFeGNlcHRpb24pKQog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBpbXBsKCktPnJlcG9ydERpZERpc3Bh
dGNoT25JbmplY3RlZFNjcmlwdChjYWxsSWQsIHJlc3VsdC5nZXQoKSwgaXNFeGNlcHRpb24pOwog
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lu
c3BlY3RvckZyb250ZW5kSG9zdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0luc3BlY3RvckZyb250ZW5kSG9zdEN1c3RvbS5jcHAJKHJldmlzaW9uIDYwMzQx
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckZyb250ZW5kSG9zdEN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlIEpTSW5zcGVjdG9yRnJvbnRlbmRIb3N0
OjpwbGF0Zm9ybShFeGVjU3RhdGUqIGV4ZWNTdGF0ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVl
IEpTSW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpwbGF0Zm9ybShFeGVjU3RhdGUqIGV4ZWNTdGF0ZSkK
IHsKICNpZiBQTEFURk9STShNQUMpCiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJp
bmcsIHBsYXRmb3JtLCAoIm1hYyIpKTsKQEAgLTYzLDcgKzYzLDcgQEAgSlNWYWx1ZSBKU0luc3Bl
Y3RvckZyb250ZW5kSG9zdDo6cGxhdGZvcgogICAgIHJldHVybiBqc1N0cmluZyhleGVjU3RhdGUs
IHBsYXRmb3JtKTsKIH0KIAotSlNWYWx1ZSBKU0luc3BlY3RvckZyb250ZW5kSG9zdDo6cG9ydChF
eGVjU3RhdGUqIGV4ZWNTdGF0ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlIEpTSW5zcGVjdG9y
RnJvbnRlbmRIb3N0Ojpwb3J0KEV4ZWNTdGF0ZSogZXhlY1N0YXRlKQogewogI2lmIFBMQVRGT1JN
KFFUKQogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBwb3J0LCAoInF0Iikp
OwpAQCAtNzcsMzEgKzc3LDI5IEBAIEpTVmFsdWUgSlNJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnBv
cnQoRXgKICAgICByZXR1cm4ganNTdHJpbmcoZXhlY1N0YXRlLCBwb3J0KTsKIH0KIAotSlNWYWx1
ZSBKU0luc3BlY3RvckZyb250ZW5kSG9zdDo6c2hvd0NvbnRleHRNZW51KEV4ZWNTdGF0ZSogZXhl
Y1N0YXRlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0luc3BlY3RvckZyb250ZW5k
SG9zdDo6c2hvd0NvbnRleHRNZW51KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBpZiAoYXJncy5z
aXplKCkgPCAyKQorICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAyKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICNpZiBFTkFCTEUoQ09OVEVYVF9NRU5VUykKLSAgICBFdmVu
dCogZXZlbnQgPSB0b0V2ZW50KGFyZ3MuYXQoMCkpOworICAgIEV2ZW50KiBldmVudCA9IHRvRXZl
bnQoZXhlYy0+YXJndW1lbnQoMCkpOwogCi0gICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5KGFy
Z3MuYXQoMSkpOworICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheShleGVjLT5hcmd1bWVudCgx
KSk7CiAgICAgVmVjdG9yPENvbnRleHRNZW51SXRlbSo+IGl0ZW1zOwogCiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBhcnJheS0+bGVuZ3RoKCk7ICsraSkgewogICAgICAgICBKU09iamVjdCog
aXRlbSA9IGFzT2JqZWN0KGFycmF5LT5nZXRJbmRleChpKSk7Ci0gICAgICAgIEpTVmFsdWUgbGFi
ZWwgPSBpdGVtLT5nZXQoZXhlY1N0YXRlLCBJZGVudGlmaWVyKGV4ZWNTdGF0ZSwgImxhYmVsIikp
OwotICAgICAgICBKU1ZhbHVlIGlkID0gaXRlbS0+Z2V0KGV4ZWNTdGF0ZSwgSWRlbnRpZmllcihl
eGVjU3RhdGUsICJpZCIpKTsKKyAgICAgICAgSlNWYWx1ZSBsYWJlbCA9IGl0ZW0tPmdldChleGVj
LCBJZGVudGlmaWVyKGV4ZWMsICJsYWJlbCIpKTsKKyAgICAgICAgSlNWYWx1ZSBpZCA9IGl0ZW0t
PmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJpZCIpKTsKICAgICAgICAgaWYgKGxhYmVsLmlz
VW5kZWZpbmVkKCkgfHwgaWQuaXNVbmRlZmluZWQoKSkKICAgICAgICAgICAgIGl0ZW1zLmFwcGVu
ZChuZXcgQ29udGV4dE1lbnVJdGVtKFNlcGFyYXRvclR5cGUsIENvbnRleHRNZW51SXRlbVRhZ05v
QWN0aW9uLCBTdHJpbmcoKSkpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIENvbnRleHRN
ZW51QWN0aW9uIHR5cGVkSWQgPSBzdGF0aWNfY2FzdDxDb250ZXh0TWVudUFjdGlvbj4oQ29udGV4
dE1lbnVJdGVtQmFzZUN1c3RvbVRhZyArIGlkLnRvSW50MzIoZXhlY1N0YXRlKSk7Ci0gICAgICAg
ICAgICBpdGVtcy5hcHBlbmQobmV3IENvbnRleHRNZW51SXRlbShBY3Rpb25UeXBlLCB0eXBlZElk
LCB1c3RyaW5nVG9TdHJpbmcobGFiZWwudG9TdHJpbmcoZXhlY1N0YXRlKSkpKTsKKyAgICAgICAg
ICAgIENvbnRleHRNZW51QWN0aW9uIHR5cGVkSWQgPSBzdGF0aWNfY2FzdDxDb250ZXh0TWVudUFj
dGlvbj4oQ29udGV4dE1lbnVJdGVtQmFzZUN1c3RvbVRhZyArIGlkLnRvSW50MzIoZXhlYykpOwor
ICAgICAgICAgICAgaXRlbXMuYXBwZW5kKG5ldyBDb250ZXh0TWVudUl0ZW0oQWN0aW9uVHlwZSwg
dHlwZWRJZCwgdXN0cmluZ1RvU3RyaW5nKGxhYmVsLnRvU3RyaW5nKGV4ZWMpKSkpOwogICAgICAg
ICB9CiAgICAgfQogCiAgICAgaW1wbCgpLT5zaG93Q29udGV4dE1lbnUoZXZlbnQsIGl0ZW1zKTsK
LSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGV4ZWNTdGF0ZSk7CiAjZW5kaWYKICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbnQ4QXJyYXlD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbnQ4QXJyYXlD
dXN0b20uY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbnQ4
QXJyYXlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw5ICs0OCw5IEBAIEpTQzo6SlNW
YWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCAKICAgICByZXR1cm4gZ2V0RE9NT2JqZWN0
V3JhcHBlcjxKU0ludDhBcnJheT4oZXhlYywgZ2xvYmFsT2JqZWN0LCBvYmplY3QpOwogfQogCi1K
U0M6OkpTVmFsdWUgSlNJbnQ4QXJyYXk6OnNldChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpB
cmdMaXN0IGNvbnN0JiBhcmdzKQorSlNDOjpKU1ZhbHVlIEpTSW50OEFycmF5OjpzZXQoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIHNldFdlYkdMQXJyYXlIZWxwZXIoZXhlYywg
aW1wbCgpLCBhcmdzLCB0b0ludDhBcnJheSk7CisgICAgcmV0dXJuIHNldFdlYkdMQXJyYXlIZWxw
ZXIoZXhlYywgaW1wbCgpLCB0b0ludDhBcnJheSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbnQxNkFycmF5Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50MTZBcnJheUN1c3RvbS5jcHAJKHJl
dmlzaW9uIDYwMzQxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ludDE2QXJyYXlDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw5ICs0Niw5IEBAIEpTQzo6SlNWYWx1ZSB0b0pTKEpT
Qzo6RXhlY1N0YXRlKiBleGVjLCAKICAgICByZXR1cm4gZ2V0RE9NT2JqZWN0V3JhcHBlcjxKU0lu
dDE2QXJyYXk+KGV4ZWMsIGdsb2JhbE9iamVjdCwgb2JqZWN0KTsKIH0KIAotSlNDOjpKU1ZhbHVl
IEpTSW50MTZBcnJheTo6c2V0KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkFyZ0xpc3QgY29u
c3QmIGFyZ3MpCitKU0M6OkpTVmFsdWUgSlNJbnQxNkFycmF5OjpzZXQoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMpCiB7Ci0gICAgcmV0dXJuIHNldFdlYkdMQXJyYXlIZWxwZXIoZXhlYywgaW1wbCgpLCBh
cmdzLCB0b0ludDE2QXJyYXkpOworICAgIHJldHVybiBzZXRXZWJHTEFycmF5SGVscGVyKGV4ZWMs
IGltcGwoKSwgdG9JbnQxNkFycmF5KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ludDMyQXJyYXlDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbnQzMkFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24g
NjAzNDEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50MzJBcnJheUN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ2LDkgKzQ2LDkgQEAgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVj
U3RhdGUqIGV4ZWMsIAogICAgIHJldHVybiBnZXRET01PYmplY3RXcmFwcGVyPEpTSW50MzJBcnJh
eT4oZXhlYywgZ2xvYmFsT2JqZWN0LCBvYmplY3QpOwogfQogCi1KU0M6OkpTVmFsdWUgSlNJbnQz
MkFycmF5OjpzZXQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6QXJnTGlzdCBjb25zdCYgYXJn
cykKK0pTQzo6SlNWYWx1ZSBKU0ludDMyQXJyYXk6OnNldChKU0M6OkV4ZWNTdGF0ZSogZXhlYykK
IHsKLSAgICByZXR1cm4gc2V0V2ViR0xBcnJheUhlbHBlcihleGVjLCBpbXBsKCksIGFyZ3MsIHRv
SW50MzJBcnJheSk7CisgICAgcmV0dXJuIHNldFdlYkdMQXJyYXlIZWxwZXIoZXhlYywgaW1wbCgp
LCB0b0ludDMyQXJyYXkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSmF2YVNjcmlwdENhbGxGcmFtZUN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0phdmFTY3JpcHRDYWxsRnJhbWVDdXN0b20uY3Bw
CShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNKYXZhU2NyaXB0Q2Fs
bEZyYW1lQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTAgKzM1LDEwIEBAIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSBKU0phdmFT
Y3JpcHRDYWxsRnJhbWU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYg
YXJncykKK0pTVmFsdWUgSlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpldmFsdWF0ZShFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSBleGNlcHRpb247Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBp
bXBsKCktPmV2YWx1YXRlKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyksIGV4Y2VwdGlvbik7Cisg
ICAgSlNWYWx1ZSByZXN1bHQgPSBpbXBsKCktPmV2YWx1YXRlKGV4ZWMtPmFyZ3VtZW50KDApLnRv
U3RyaW5nKGV4ZWMpLCBleGNlcHRpb24pOwogCiAgICAgaWYgKGV4Y2VwdGlvbikKICAgICAgICAg
ZXhlYy0+c2V0RXhjZXB0aW9uKGV4Y2VwdGlvbik7CkBAIC04NSwxNCArODUsMTQgQEAgSlNWYWx1
ZSBKU0phdmFTY3JpcHRDYWxsRnJhbWU6OnNjb3BlQ2hhaQogICAgIHJldHVybiBjb25zdHJ1Y3RB
cnJheShleGVjLCBsaXN0KTsKIH0KIAotSlNWYWx1ZSBKU0phdmFTY3JpcHRDYWxsRnJhbWU6OnNj
b3BlVHlwZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpT
SmF2YVNjcmlwdENhbGxGcmFtZTo6c2NvcGVUeXBlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBp
ZiAoIWltcGwoKS0+c2NvcGVDaGFpbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
IAotICAgIGlmICghYXJncy5hdCgwKS5pc0ludDMyKCkpCisgICAgaWYgKCFleGVjLT5hcmd1bWVu
dCgwKS5pc0ludDMyKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIGludCBp
bmRleCA9IGFyZ3MuYXQoMCkuYXNJbnQzMigpOworICAgIGludCBpbmRleCA9IGV4ZWMtPmFyZ3Vt
ZW50KDApLmFzSW50MzIoKTsKIAogICAgIGNvbnN0IFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWlu
ID0gaW1wbCgpLT5zY29wZUNoYWluKCk7CiAgICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGVuZCA9IHNj
b3BlQ2hhaW4tPmVuZCgpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0
b20uY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlv
bkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwMSwxMyArMzAxLDEzIEBAIHZvaWQgSlNM
b2NhdGlvbjo6c2V0SGFzaChFeGVjU3RhdGUqIGV4ZWMKICAgICBuYXZpZ2F0ZUlmQWxsb3dlZChl
eGVjLCBmcmFtZSwgdXJsLCAhZnJhbWUtPnNjcmlwdCgpLT5hbnlQYWdlSXNQcm9jZXNzaW5nVXNl
ckdlc3R1cmUoKSwgZmFsc2UpOwogfQogCi1KU1ZhbHVlIEpTTG9jYXRpb246OnJlcGxhY2UoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0xvY2F0aW9uOjpy
ZXBsYWNlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBGcmFtZSogZnJhbWUgPSBpbXBsKCktPmZy
YW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAK
LSAgICBLVVJMIHVybCA9IGNvbXBsZXRlVVJMKGV4ZWMsIHVzdHJpbmdUb1N0cmluZyhhcmdzLmF0
KDApLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgS1VSTCB1cmwgPSBjb21wbGV0ZVVSTChleGVjLCB1
c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpKTsKICAgICBp
ZiAodXJsLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIApAQCAtMzE4
LDcgKzMxOCw3IEBAIEpTVmFsdWUgSlNMb2NhdGlvbjo6cmVwbGFjZShFeGVjU3RhdGUqIGUKICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBKU0xvY2F0aW9uOjpyZWxvYWQo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWUgSlNMb2NhdGlvbjo6cmVs
b2FkKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBGcmFtZSogZnJhbWUgPSBpbXBsKCktPmZyYW1l
KCk7CiAgICAgaWYgKCFmcmFtZSB8fCAhYWxsb3dzQWNjZXNzRnJvbUZyYW1lKGV4ZWMsIGZyYW1l
KSkKQEAgLTMyOSwxMyArMzI5LDEzIEBAIEpTVmFsdWUgSlNMb2NhdGlvbjo6cmVsb2FkKEV4ZWNT
dGF0ZSogZXgKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBKU0xvY2F0
aW9uOjphc3NpZ24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1
ZSBKU0xvY2F0aW9uOjphc3NpZ24oRXhlY1N0YXRlKiBleGVjKQogewogICAgIEZyYW1lKiBmcmFt
ZSA9IGltcGwoKS0+ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIAotICAgIEtVUkwgdXJsID0gY29tcGxldGVVUkwoZXhlYywgdXN0cmluZ1Rv
U3RyaW5nKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpKTsKKyAgICBLVVJMIHVybCA9IGNvbXBs
ZXRlVVJMKGV4ZWMsIHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhl
eGVjKSkpOwogICAgIGlmICh1cmwuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogCkBAIC0zNDcsNyArMzQ3LDcgQEAgSlNWYWx1ZSBKU0xvY2F0aW9uOjphc3NpZ24oRXhl
Y1N0YXRlKiBleAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlIEpTTG9j
YXRpb246OnRvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVl
IEpTTG9jYXRpb246OnRvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBGcmFtZSogZnJh
bWUgPSBpbXBsKCktPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSB8fCAhYWxsb3dzQWNjZXNzRnJv
bUZyYW1lKGV4ZWMsIGZyYW1lKSkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdl
RXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNz
YWdlRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCwxOSArNTQs
MTkgQEAgSlNWYWx1ZSBKU01lc3NhZ2VFdmVudDo6cG9ydHMoRXhlY1N0YXRlKgogICAgIHJldHVy
biBjb25zdHJ1Y3RBcnJheShleGVjLCBsaXN0KTsKIH0KIAotSlNDOjpKU1ZhbHVlIEpTTWVzc2Fn
ZUV2ZW50Ojppbml0TWVzc2FnZUV2ZW50KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6
OkFyZ0xpc3QmIGFyZ3MpCitKU0M6OkpTVmFsdWUgSlNNZXNzYWdlRXZlbnQ6OmluaXRNZXNzYWdl
RXZlbnQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgY29uc3QgVVN0cmluZyYgdHlwZUFy
ZyA9IGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyk7Ci0gICAgYm9vbCBjYW5CdWJibGVBcmcgPSBh
cmdzLmF0KDEpLnRvQm9vbGVhbihleGVjKTsKLSAgICBib29sIGNhbmNlbGFibGVBcmcgPSBhcmdz
LmF0KDIpLnRvQm9vbGVhbihleGVjKTsKLSAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gZGF0YUFyZyA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsIGFyZ3Mu
YXQoMykpOwotICAgIGNvbnN0IFVTdHJpbmcmIG9yaWdpbkFyZyA9IGFyZ3MuYXQoNCkudG9TdHJp
bmcoZXhlYyk7Ci0gICAgY29uc3QgVVN0cmluZyYgbGFzdEV2ZW50SWRBcmcgPSBhcmdzLmF0KDUp
LnRvU3RyaW5nKGV4ZWMpOwotICAgIERPTVdpbmRvdyogc291cmNlQXJnID0gdG9ET01XaW5kb3co
YXJncy5hdCg2KSk7CisgICAgY29uc3QgVVN0cmluZyYgdHlwZUFyZyA9IGV4ZWMtPmFyZ3VtZW50
KDApLnRvU3RyaW5nKGV4ZWMpOworICAgIGJvb2wgY2FuQnViYmxlQXJnID0gZXhlYy0+YXJndW1l
bnQoMSkudG9Cb29sZWFuKGV4ZWMpOworICAgIGJvb2wgY2FuY2VsYWJsZUFyZyA9IGV4ZWMtPmFy
Z3VtZW50KDIpLnRvQm9vbGVhbihleGVjKTsKKyAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gZGF0YUFyZyA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsIGV4
ZWMtPmFyZ3VtZW50KDMpKTsKKyAgICBjb25zdCBVU3RyaW5nJiBvcmlnaW5BcmcgPSBleGVjLT5h
cmd1bWVudCg0KS50b1N0cmluZyhleGVjKTsKKyAgICBjb25zdCBVU3RyaW5nJiBsYXN0RXZlbnRJ
ZEFyZyA9IGV4ZWMtPmFyZ3VtZW50KDUpLnRvU3RyaW5nKGV4ZWMpOworICAgIERPTVdpbmRvdyog
c291cmNlQXJnID0gdG9ET01XaW5kb3coZXhlYy0+YXJndW1lbnQoNikpOwogICAgIE93blB0cjxN
ZXNzYWdlUG9ydEFycmF5PiBtZXNzYWdlUG9ydHM7Ci0gICAgaWYgKCFhcmdzLmF0KDcpLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpIHsKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDcpLmlzVW5kZWZpbmVk
T3JOdWxsKCkpIHsKICAgICAgICAgbWVzc2FnZVBvcnRzID0gbmV3IE1lc3NhZ2VQb3J0QXJyYXko
KTsKLSAgICAgICAgZmlsbE1lc3NhZ2VQb3J0QXJyYXkoZXhlYywgYXJncy5hdCg3KSwgKm1lc3Nh
Z2VQb3J0cyk7CisgICAgICAgIGZpbGxNZXNzYWdlUG9ydEFycmF5KGV4ZWMsIGV4ZWMtPmFyZ3Vt
ZW50KDcpLCAqbWVzc2FnZVBvcnRzKTsKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwCShyZXZpc2lvbiA2MDM0MSkK
KysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUyLDkgKzUyLDkgQEAgdm9pZCBKU01lc3NhZ2VQb3J0OjptYXJrQ2hpbGRyZW4o
TWFya1N0YQogICAgIG1faW1wbC0+bWFya0pTRXZlbnRMaXN0ZW5lcnMobWFya1N0YWNrKTsKIH0K
IAotSlNDOjpKU1ZhbHVlIEpTTWVzc2FnZVBvcnQ6OnBvc3RNZXNzYWdlKEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MpCitKU0M6OkpTVmFsdWUgSlNNZXNzYWdl
UG9ydDo6cG9zdE1lc3NhZ2UoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGhh
bmRsZVBvc3RNZXNzYWdlKGV4ZWMsIGFyZ3MsIGltcGwoKSk7CisgICAgcmV0dXJuIGhhbmRsZVBv
c3RNZXNzYWdlKGV4ZWMsIGltcGwoKSk7CiB9CiAKIHZvaWQgZmlsbE1lc3NhZ2VQb3J0QXJyYXko
SlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgTWVzc2FnZVBvcnRBcnJh
eSYgcG9ydEFycmF5KQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3Vz
dG9tLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3Vz
dG9tLmgJKHJldmlzaW9uIDYwMzQxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQ
b3J0Q3VzdG9tLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDExICs0NywxMSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY29udmVydCBmcm9tIEpTIHBv
c3RNZXNzYWdlIGFyZ3VtZW50cyB0byBXZWJDb3JlIHBvc3RNZXNzYWdlIGFyZ3VtZW50cy4KICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgICBpbmxpbmUgSlNDOjpKU1ZhbHVlIGhhbmRsZVBv
c3RNZXNzYWdlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3Ms
IFQqIGltcGwpCisgICAgaW5saW5lIEpTQzo6SlNWYWx1ZSBoYW5kbGVQb3N0TWVzc2FnZShKU0M6
OkV4ZWNTdGF0ZSogZXhlYywgVCogaW1wbCkKICAgICB7Ci0gICAgICAgIFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiBtZXNzYWdlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVh
dGUoZXhlYywgYXJncy5hdCgwKSk7CisgICAgICAgIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiBtZXNzYWdlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoZXhlYywgZXhl
Yy0+YXJndW1lbnQoMCkpOwogICAgICAgICBNZXNzYWdlUG9ydEFycmF5IHBvcnRBcnJheTsKLSAg
ICAgICAgZmlsbE1lc3NhZ2VQb3J0QXJyYXkoZXhlYywgYXJncy5hdCgxKSwgcG9ydEFycmF5KTsK
KyAgICAgICAgZmlsbE1lc3NhZ2VQb3J0QXJyYXkoZXhlYywgZXhlYy0+YXJndW1lbnQoMSksIHBv
cnRBcnJheSk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAg
IHJldHVybiBKU0M6OmpzVW5kZWZpbmVkKCk7CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMv
SlNOb2RlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9k
ZUN1c3RvbS5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05v
ZGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw0NyArNjgsNDcgQEAgdXNpbmcgbmFt
ZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlIEpTTm9kZTo6aW5z
ZXJ0QmVmb3JlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUg
SlNOb2RlOjppbnNlcnRCZWZvcmUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIE5vZGUqIGltcCA9
IHN0YXRpY19jYXN0PE5vZGUqPihpbXBsKCkpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwot
ICAgIGJvb2wgb2sgPSBpbXAtPmluc2VydEJlZm9yZSh0b05vZGUoYXJncy5hdCgwKSksIHRvTm9k
ZShhcmdzLmF0KDEpKSwgZWMsIHRydWUpOworICAgIGJvb2wgb2sgPSBpbXAtPmluc2VydEJlZm9y
ZSh0b05vZGUoZXhlYy0+YXJndW1lbnQoMCkpLCB0b05vZGUoZXhlYy0+YXJndW1lbnQoMSkpLCBl
YywgdHJ1ZSk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICBpZiAob2spCi0g
ICAgICAgIHJldHVybiBhcmdzLmF0KDApOworICAgICAgICByZXR1cm4gZXhlYy0+YXJndW1lbnQo
MCk7CiAgICAgcmV0dXJuIGpzTnVsbCgpOwogfQogCi1KU1ZhbHVlIEpTTm9kZTo6cmVwbGFjZUNo
aWxkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNOb2Rl
OjpyZXBsYWNlQ2hpbGQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIE5vZGUqIGltcCA9IHN0YXRp
Y19jYXN0PE5vZGUqPihpbXBsKCkpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGJv
b2wgb2sgPSBpbXAtPnJlcGxhY2VDaGlsZCh0b05vZGUoYXJncy5hdCgwKSksIHRvTm9kZShhcmdz
LmF0KDEpKSwgZWMsIHRydWUpOworICAgIGJvb2wgb2sgPSBpbXAtPnJlcGxhY2VDaGlsZCh0b05v
ZGUoZXhlYy0+YXJndW1lbnQoMCkpLCB0b05vZGUoZXhlYy0+YXJndW1lbnQoMSkpLCBlYywgdHJ1
ZSk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICBpZiAob2spCi0gICAgICAg
IHJldHVybiBhcmdzLmF0KDEpOworICAgICAgICByZXR1cm4gZXhlYy0+YXJndW1lbnQoMSk7CiAg
ICAgcmV0dXJuIGpzTnVsbCgpOwogfQogCi1KU1ZhbHVlIEpTTm9kZTo6cmVtb3ZlQ2hpbGQoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU05vZGU6OnJlbW92
ZUNoaWxkKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBOb2RlKiBpbXAgPSBzdGF0aWNfY2FzdDxO
b2RlKj4oaW1wbCgpKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBib29sIG9rID0g
aW1wLT5yZW1vdmVDaGlsZCh0b05vZGUoYXJncy5hdCgwKSksIGVjKTsKKyAgICBib29sIG9rID0g
aW1wLT5yZW1vdmVDaGlsZCh0b05vZGUoZXhlYy0+YXJndW1lbnQoMCkpLCBlYyk7CiAgICAgc2V0
RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICBpZiAob2spCi0gICAgICAgIHJldHVybiBhcmdz
LmF0KDApOworICAgICAgICByZXR1cm4gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgcmV0dXJuIGpz
TnVsbCgpOwogfQogCi1KU1ZhbHVlIEpTTm9kZTo6YXBwZW5kQ2hpbGQoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU05vZGU6OmFwcGVuZENoaWxkKEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICBOb2RlKiBpbXAgPSBzdGF0aWNfY2FzdDxOb2RlKj4oaW1wbCgp
KTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBib29sIG9rID0gaW1wLT5hcHBlbmRD
aGlsZCh0b05vZGUoYXJncy5hdCgwKSksIGVjLCB0cnVlKTsKKyAgICBib29sIG9rID0gaW1wLT5h
cHBlbmRDaGlsZCh0b05vZGUoZXhlYy0+YXJndW1lbnQoMCkpLCBlYywgdHJ1ZSk7CiAgICAgc2V0
RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICBpZiAob2spCi0gICAgICAgIHJldHVybiBhcmdz
LmF0KDApOworICAgICAgICByZXR1cm4gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgcmV0dXJuIGpz
TnVsbCgpOwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUxpc3RDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlTGlzdEN1c3RvbS5j
cHAJKHJldmlzaW9uIDYwMzQxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVMaXN0Q3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTMgKzM2LDEzIEBAIHVzaW5nIG5hbWVzcGFj
ZSBKU0M7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIE5lZWQgdG8gc3VwcG9ydCBjYWxsIHNv
IHRoYXQgbGlzdCgwKSB3b3Jrcy4KLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbE5v
ZGVMaXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9uLCBKU1ZhbHVlLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsTm9kZUxp
c3QoRXhlY1N0YXRlKiBleGVjKQogewogICAgIGJvb2wgb2s7Ci0gICAgdW5zaWduZWQgaW5kZXgg
PSBhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpLnRvVUludDMyKCZvayk7CisgICAgdW5zaWduZWQg
aW5kZXggPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS50b1VJbnQzMigmb2spOwog
ICAgIGlmICghb2spCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIHJldHVybiB0
b0pTKGV4ZWMsIHN0YXRpY19jYXN0PEpTTm9kZUxpc3QqPihmdW5jdGlvbiktPmltcGwoKS0+aXRl
bShpbmRleCkpOworICAgIHJldHVybiB0b0pTKGV4ZWMsIHN0YXRpY19jYXN0PEpTTm9kZUxpc3Qq
PihleGVjLT5jYWxsZWUoKSktPmltcGwoKS0+aXRlbShpbmRleCkpOwogfQogCiBDYWxsVHlwZSBK
U05vZGVMaXN0OjpnZXRDYWxsRGF0YShDYWxsRGF0YSYgY2FsbERhdGEpCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTUGx1Z2luRWxlbWVudEZ1bmN0aW9ucy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMuY3BwCShyZXZpc2lv
biA2MDM0MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNQbHVnaW5FbGVtZW50RnVuY3Rpb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDExICsxMDUsMTEgQEAgYm9vbCBydW50aW1lT2Jq
ZWN0Q3VzdG9tUHV0KEV4ZWNTdGF0ZSogZQogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMg
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxQbHVnaW4oRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogZnVuY3Rpb24sIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitzdGF0aWMgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNhbGxQbHVnaW4oRXhlY1N0YXRlKiBleGVjKQogewotICAgIEluc3Rh
bmNlKiBpbnN0YW5jZSA9IHBsdWdpbkluc3RhbmNlKHN0YXRpY19jYXN0PEpTSFRNTEVsZW1lbnQq
PihmdW5jdGlvbiktPmltcGwoKSk7CisgICAgSW5zdGFuY2UqIGluc3RhbmNlID0gcGx1Z2luSW5z
dGFuY2Uoc3RhdGljX2Nhc3Q8SlNIVE1MRWxlbWVudCo+KGV4ZWMtPmNhbGxlZSgpKS0+aW1wbCgp
KTsKICAgICBpbnN0YW5jZS0+YmVnaW4oKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGluc3RhbmNl
LT5pbnZva2VEZWZhdWx0TWV0aG9kKGV4ZWMsIGFyZ3MpOworICAgIEpTVmFsdWUgcmVzdWx0ID0g
aW5zdGFuY2UtPmludm9rZURlZmF1bHRNZXRob2QoZXhlYyk7CiAgICAgaW5zdGFuY2UtPmVuZCgp
OwogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FM
UmVzdWx0U2V0Um93TGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1NRTFJlc3VsdFNldFJvd0xpc3RDdXN0b20uY3BwCShyZXZpc2lvbiA2MDM0MSkKKysr
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxSZXN1bHRTZXRSb3dMaXN0Q3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzksMTAgKzM5LDEwIEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSBKU1NRTFJlc3VsdFNldFJvd0xpc3Q6Oml0ZW0o
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU1NRTFJlc3Vs
dFNldFJvd0xpc3Q6Oml0ZW0oRXhlY1N0YXRlKiBleGVjKQogewogICAgIGJvb2wgaW5kZXhPazsK
LSAgICBpbnQgaW5kZXggPSBhcmdzLmF0KDApLnRvSW50MzIoZXhlYywgaW5kZXhPayk7CisgICAg
aW50IGluZGV4ID0gZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjLCBpbmRleE9rKTsKICAg
ICBpZiAoIWluZGV4T2spIHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlT
TUFUQ0hfRVJSKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTU1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDYw
MzQxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDIsMjEgKzQyLDIxIEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSBKU1NRTFRyYW5zYWN0aW9uOjpleGVjdXRl
U3FsKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNTUUxU
cmFuc2FjdGlvbjo6ZXhlY3V0ZVNxbChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgaWYgKGFyZ3Mu
aXNFbXB0eSgpKSB7CisgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpIHsKICAgICAgICAg
c2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFNZTlRBWF9FUlIpOwogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKICAgICB9CiAKLSAgICBTdHJpbmcgc3FsU3RhdGVtZW50ID0gdXN0cmluZ1RvU3Ry
aW5nKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpOworICAgIFN0cmluZyBzcWxTdGF0ZW1lbnQg
PSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpOwogICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAKICAgICAvLyBOb3cgYXNzZW1ibGUgdGhlIGxpc3Qgb2YgU1FMIGFyZ3VtZW50cwogICAgIFZl
Y3RvcjxTUUxWYWx1ZT4gc3FsVmFsdWVzOwotICAgIGlmICghYXJncy5hdCgxKS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKSB7Ci0gICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhcmdzLmF0KDEpLmdldE9i
amVjdCgpOworICAgIGlmICghZXhlYy0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWRPck51bGwoKSkg
eworICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoMSkuZ2V0T2JqZWN0
KCk7CiAgICAgICAgIGlmICghb2JqZWN0KSB7CiAgICAgICAgICAgICBzZXRET01FeGNlcHRpb24o
ZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOwogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CkBAIC04OCw4ICs4OCw4IEBAIEpTVmFsdWUgSlNTUUxUcmFuc2FjdGlvbjo6ZXhlY3V0ZVNx
bChFeGUKICAgICB9CiAKICAgICBSZWZQdHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+IGNhbGxiYWNr
OwotICAgIGlmICghYXJncy5hdCgyKS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7Ci0gICAgICAgIEpT
T2JqZWN0KiBvYmplY3QgPSBhcmdzLmF0KDIpLmdldE9iamVjdCgpOworICAgIGlmICghZXhlYy0+
YXJndW1lbnQoMikuaXNVbmRlZmluZWRPck51bGwoKSkgeworICAgICAgICBKU09iamVjdCogb2Jq
ZWN0ID0gZXhlYy0+YXJndW1lbnQoMikuZ2V0T2JqZWN0KCk7CiAgICAgICAgIGlmICghb2JqZWN0
KSB7CiAgICAgICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIp
OwogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC05OSw4ICs5OSw4IEBAIEpT
VmFsdWUgSlNTUUxUcmFuc2FjdGlvbjo6ZXhlY3V0ZVNxbChFeGUKICAgICB9CiAKICAgICBSZWZQ
dHI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjazsKLSAgICBpZiAoIWFy
Z3MuYXQoMykuaXNVbmRlZmluZWRPck51bGwoKSkgewotICAgICAgICBKU09iamVjdCogb2JqZWN0
ID0gYXJncy5hdCgzKS5nZXRPYmplY3QoKTsKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDMpLmlz
VW5kZWZpbmVkT3JOdWxsKCkpIHsKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGV4ZWMtPmFy
Z3VtZW50KDMpLmdldE9iamVjdCgpOwogICAgICAgICBpZiAoIW9iamVjdCkgewogICAgICAgICAg
ICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKICAgICAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFRy
YW5zYWN0aW9uU3luY0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1NRTFRyYW5zYWN0aW9uU3luY0N1c3RvbS5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uU3luY0N1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQxLDIxICs0MSwyMSBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUgSlNTUUxUcmFuc2FjdGlvblN5bmM6OmV4ZWN1dGVTcWwo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU1NRTFRyYW5z
YWN0aW9uU3luYzo6ZXhlY3V0ZVNxbChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgaWYgKGFyZ3Mu
aXNFbXB0eSgpKSB7CisgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpIHsKICAgICAgICAg
c2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFNZTlRBWF9FUlIpOwogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKICAgICB9CiAKLSAgICBTdHJpbmcgc3FsU3RhdGVtZW50ID0gdXN0cmluZ1RvU3Ry
aW5nKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpOworICAgIFN0cmluZyBzcWxTdGF0ZW1lbnQg
PSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpOwogICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAKICAgICAvLyBOb3cgYXNzZW1ibGUgdGhlIGxpc3Qgb2YgU1FMIGFyZ3VtZW50cwogICAgIFZl
Y3RvcjxTUUxWYWx1ZT4gc3FsVmFsdWVzOwotICAgIGlmICghYXJncy5hdCgxKS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKSB7Ci0gICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhcmdzLmF0KDEpLmdldE9i
amVjdCgpOworICAgIGlmICghZXhlYy0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWRPck51bGwoKSkg
eworICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoMSkuZ2V0T2JqZWN0
KCk7CiAgICAgICAgIGlmICghb2JqZWN0KSB7CiAgICAgICAgICAgICBzZXRET01FeGNlcHRpb24o
ZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOwogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHTGVuZ3RoQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHTGVuZ3RoQ3VzdG9tLmNwcAkocmV2
aXNpb24gNjAzNDEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHTGVuZ3RoQ3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTMgKzM1LDEzIEBAIEpTVmFsdWUgSlNTVkdMZW5ndGg6
OnZhbHVlKEV4ZWNTdGF0ZSogZXgKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgcG9kSW1wLnZh
bHVlKGNvbnRleHQpKTsKIH0KIAotSlNWYWx1ZSBKU1NWR0xlbmd0aDo6Y29udmVydFRvU3BlY2lm
aWVkVW5pdHMoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBK
U1NWR0xlbmd0aDo6Y29udmVydFRvU3BlY2lmaWVkVW5pdHMoRXhlY1N0YXRlKiBleGVjKQogewog
ICAgIEpTU1ZHUE9EVHlwZVdyYXBwZXI8U1ZHTGVuZ3RoPiogaW1wID0gaW1wbCgpOwogICAgIFNW
R0VsZW1lbnQqIGNvbnRleHQgPSBKU1NWR0NvbnRleHRDYWNoZTo6c3ZnQ29udGV4dEZvckRPTU9i
amVjdCh0aGlzKTsKIAogICAgIFNWR0xlbmd0aCBwb2RJbXAoKmltcCk7Ci0gICAgcG9kSW1wLmNv
bnZlcnRUb1NwZWNpZmllZFVuaXRzKGFyZ3MuYXQoMCkudG9JbnQzMihleGVjKSwgY29udGV4dCk7
CisgICAgcG9kSW1wLmNvbnZlcnRUb1NwZWNpZmllZFVuaXRzKGV4ZWMtPmFyZ3VtZW50KDApLnRv
SW50MzIoZXhlYyksIGNvbnRleHQpOwogCiAgICAgaW1wLT5jb21taXRDaGFuZ2UocG9kSW1wLCB0
aGlzKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNTVkdNYXRyaXhDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNTVkdNYXRyaXhDdXN0b20uY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNTVkdNYXRyaXhDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNSAr
MzEsMTUgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1K
U1ZhbHVlIEpTU1ZHTWF0cml4OjptdWx0aXBseShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCitKU1ZhbHVlIEpTU1ZHTWF0cml4OjptdWx0aXBseShFeGVjU3RhdGUqIGV4ZWMp
CiB7Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMSkKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsICJO
b3QgZW5vdWdoIGFyZ3VtZW50cyIpOwogCi0gICAgaWYgKCFhcmdzLmF0KDApLmluaGVyaXRzKCZK
U1NWR01hdHJpeDo6c19pbmZvKSkKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDApLmluaGVyaXRz
KCZKU1NWR01hdHJpeDo6c19pbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywg
VHlwZUVycm9yLCAic2Vjb25kTWF0cml4IGFyZ3VtZW50IHdhcyBub3QgYSBTVkdNYXRyaXgiKTsK
IAotICAgIEpTU1ZHTWF0cml4KiBtYXRyaXhPYmogPSBzdGF0aWNfY2FzdDxKU1NWR01hdHJpeCo+
KGFzT2JqZWN0KGFyZ3MuYXQoMCkpKTsKKyAgICBKU1NWR01hdHJpeCogbWF0cml4T2JqID0gc3Rh
dGljX2Nhc3Q8SlNTVkdNYXRyaXgqPihhc09iamVjdChleGVjLT5hcmd1bWVudCgwKSkpOwogCiAg
ICAgQWZmaW5lVHJhbnNmb3JtIG0xKCppbXBsKCkpOwogICAgIEFmZmluZVRyYW5zZm9ybSBtMigq
KG1hdHJpeE9iai0+aW1wbCgpKSk7CkBAIC00OCw3ICs0OCw3IEBAIEpTVmFsdWUgSlNTVkdNYXRy
aXg6Om11bHRpcGx5KEV4ZWNTdGF0ZSoKICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmpl
Y3QoKSwgSlNTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjxBZmZpbmVUcmFuc2Zvcm0+OjpjcmVhdGUo
bTEubXVsdExlZnQobTIpKS5nZXQoKSwgY29udGV4dCk7CiB9CiAKLUpTVmFsdWUgSlNTVkdNYXRy
aXg6OmludmVyc2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWUgSlNT
VkdNYXRyaXg6OmludmVyc2UoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEFmZmluZVRyYW5zZm9y
bSBpbXAoKmltcGwoKSk7CiAKQEAgLTYxLDEyICs2MSwxMiBAQCBKU1ZhbHVlIEpTU1ZHTWF0cml4
OjppbnZlcnNlKEV4ZWNTdGF0ZSogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSBK
U1NWR01hdHJpeDo6cm90YXRlRnJvbVZlY3RvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCitKU1ZhbHVlIEpTU1ZHTWF0cml4Ojpyb3RhdGVGcm9tVmVjdG9yKEV4ZWNTdGF0
ZSogZXhlYykKIHsKICAgICBBZmZpbmVUcmFuc2Zvcm0gaW1wKCppbXBsKCkpOwogIAotICAgIGZs
b2F0IHggPSBhcmdzLmF0KDApLnRvRmxvYXQoZXhlYyk7Ci0gICAgZmxvYXQgeSA9IGFyZ3MuYXQo
MSkudG9GbG9hdChleGVjKTsKKyAgICBmbG9hdCB4ID0gZXhlYy0+YXJndW1lbnQoMCkudG9GbG9h
dChleGVjKTsKKyAgICBmbG9hdCB5ID0gZXhlYy0+YXJndW1lbnQoMSkudG9GbG9hdChleGVjKTsK
IAogICAgIFNWR0VsZW1lbnQqIGNvbnRleHQgPSBKU1NWR0NvbnRleHRDYWNoZTo6c3ZnQ29udGV4
dEZvckRPTU9iamVjdCh0aGlzKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgZ2xv
YmFsT2JqZWN0KCksIEpTU1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI8QWZmaW5lVHJhbnNmb3JtPjo6
Y3JlYXRlKGltcC5yb3RhdGVGcm9tVmVjdG9yKHgsIHkpKS5nZXQoKSwgY29udGV4dCk7CkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHUE9ETGlzdEN1c3RvbS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdQT0RMaXN0Q3VzdG9tLmgJKHJldmlzaW9uIDYwMzQx
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1BPRExpc3RDdXN0b20uaAkod29ya2luZyBj
b3B5KQpAQCAtODksNyArODksNyBAQCBzdGF0aWMgSlNDOjpKU1ZhbHVlIGZpbmlzaFNldHRlclJl
YWRPbmx5CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEpTUE9ETGlzdFR5cGUsIHR5cGVuYW1lIFBP
RFR5cGU+Ci1zdGF0aWMgSlNDOjpKU1ZhbHVlIGNsZWFyKEpTUE9ETGlzdFR5cGUqIHdyYXBwZXIs
IEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmLAorc3RhdGljIEpTQzo6
SlNWYWx1ZSBjbGVhcihKU1BPRExpc3RUeXBlKiB3cmFwcGVyLCBKU0M6OkV4ZWNTdGF0ZSogZXhl
YywKICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgSlNTVkdQT0RMaXN0VHJhaXRz
PFBPRFR5cGU+OjpDb252ZXJzaW9uQ2FsbGJhY2spCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CkBAIC0xMDUsMjEgKzEwNSwyMSBAQCBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNsZWFyKEpTUE9E
TGlzdFR5cGUqCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEpTUE9ETGlzdFR5cGUsIHR5cGVuYW1l
IFBPRFR5cGU+Ci1zdGF0aWMgSlNDOjpKU1ZhbHVlIGluaXRpYWxpemUoSlNQT0RMaXN0VHlwZSog
d3JhcHBlciwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncywK
K3N0YXRpYyBKU0M6OkpTVmFsdWUgaW5pdGlhbGl6ZShKU1BPRExpc3RUeXBlKiB3cmFwcGVyLCBK
U0M6OkV4ZWNTdGF0ZSogZXhlYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBl
bmFtZSBKU1NWR1BPRExpc3RUcmFpdHM8UE9EVHlwZT46OkNvbnZlcnNpb25DYWxsYmFjayBjb252
ZXJzaW9uKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIHR5cGVuYW1lIEpTU1ZH
UE9ETGlzdFRyYWl0czxQT0RUeXBlPjo6UE9ETGlzdCogbGlzdEltcCA9IHdyYXBwZXItPmltcGwo
KTsKICAgICByZXR1cm4gZmluaXNoU2V0dGVyPEpTUE9ETGlzdFR5cGUsIFBPRFR5cGU+KGV4ZWMs
IGVjLCB3cmFwcGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGlzdEltcC0+aW5pdGlhbGl6ZShKU1NWR1BPRExpc3RUcmFpdHM8UE9EVHlwZT46OlBP
RExpc3RJdGVtOjpjb3B5KGNvbnZlcnNpb24oYXJncy5hdCgwKSkpLCBlYykpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdEltcC0+aW5pdGlhbGl6
ZShKU1NWR1BPRExpc3RUcmFpdHM8UE9EVHlwZT46OlBPRExpc3RJdGVtOjpjb3B5KGNvbnZlcnNp
b24oZXhlYy0+YXJndW1lbnQoMCkpKSwgZWMpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgSlNQ
T0RMaXN0VHlwZSwgdHlwZW5hbWUgUE9EVHlwZT4KLXN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0SXRl
bShKU1BPRExpc3RUeXBlKiB3cmFwcGVyLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlND
OjpBcmdMaXN0JiBhcmdzLAorc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRJdGVtKEpTUE9ETGlzdFR5
cGUqIHdyYXBwZXIsIEpTQzo6RXhlY1N0YXRlKiBleGVjLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHR5cGVuYW1lIEpTU1ZHUE9ETGlzdFRyYWl0czxQT0RUeXBlPjo6Q29udmVyc2lvbkNh
bGxiYWNrKQogewogICAgIGJvb2wgaW5kZXhPayA9IGZhbHNlOwotICAgIHVuc2lnbmVkIGluZGV4
ID0gYXJncy5hdCgwKS50b1VJbnQzMihleGVjLCBpbmRleE9rKTsKKyAgICB1bnNpZ25lZCBpbmRl
eCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvVUludDMyKGV4ZWMsIGluZGV4T2spOwogICAgIGlmICgh
aW5kZXhPaykgewogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9F
UlIpOwogICAgICAgICByZXR1cm4gSlNDOjpqc1VuZGVmaW5lZCgpOwpAQCAtMTMyLDExICsxMzIs
MTEgQEAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRJdGVtKEpTUE9ETGlzdFR5cAogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBKU1BPRExpc3RUeXBlLCB0eXBlbmFtZSBQT0RUeXBlPgotc3RhdGljIEpT
Qzo6SlNWYWx1ZSBpbnNlcnRJdGVtQmVmb3JlKEpTUE9ETGlzdFR5cGUqIHdyYXBwZXIsIEpTQzo6
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MsCitzdGF0aWMgSlNDOjpK
U1ZhbHVlIGluc2VydEl0ZW1CZWZvcmUoSlNQT0RMaXN0VHlwZSogd3JhcHBlciwgSlNDOjpFeGVj
U3RhdGUqIGV4ZWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5h
bWUgSlNTVkdQT0RMaXN0VHJhaXRzPFBPRFR5cGU+OjpDb252ZXJzaW9uQ2FsbGJhY2sgY29udmVy
c2lvbikKIHsKICAgICBib29sIGluZGV4T2sgPSBmYWxzZTsKLSAgICB1bnNpZ25lZCBpbmRleCA9
IGFyZ3MuYXQoMSkudG9VSW50MzIoZXhlYywgaW5kZXhPayk7CisgICAgdW5zaWduZWQgaW5kZXgg
PSBleGVjLT5hcmd1bWVudCgxKS50b1VJbnQzMihleGVjLCBpbmRleE9rKTsKICAgICBpZiAoIWlu
ZGV4T2spIHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJS
KTsKICAgICAgICAgcmV0dXJuIEpTQzo6anNVbmRlZmluZWQoKTsKQEAgLTE0NSwxNSArMTQ1LDE1
IEBAIHN0YXRpYyBKU0M6OkpTVmFsdWUgaW5zZXJ0SXRlbUJlZm9yZShKU1AKICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKICAgICB0eXBlbmFtZSBKU1NWR1BPRExpc3RUcmFpdHM8UE9EVHlwZT46
OlBPRExpc3QqIGxpc3RJbXAgPSB3cmFwcGVyLT5pbXBsKCk7CiAgICAgcmV0dXJuIGZpbmlzaFNl
dHRlcjxKU1BPRExpc3RUeXBlLCBQT0RUeXBlPihleGVjLCBlYywgd3JhcHBlciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RJbXAtPmluc2VydEl0
ZW1CZWZvcmUoSlNTVkdQT0RMaXN0VHJhaXRzPFBPRFR5cGU+OjpQT0RMaXN0SXRlbTo6Y29weShj
b252ZXJzaW9uKGFyZ3MuYXQoMCkpKSwgaW5kZXgsIGVjKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0SW1wLT5pbnNlcnRJdGVtQmVmb3JlKEpT
U1ZHUE9ETGlzdFRyYWl0czxQT0RUeXBlPjo6UE9ETGlzdEl0ZW06OmNvcHkoY29udmVyc2lvbihl
eGVjLT5hcmd1bWVudCgwKSkpLCBpbmRleCwgZWMpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
SlNQT0RMaXN0VHlwZSwgdHlwZW5hbWUgUE9EVHlwZT4KLXN0YXRpYyBKU0M6OkpTVmFsdWUgcmVw
bGFjZUl0ZW0oSlNQT0RMaXN0VHlwZSogd3JhcHBlciwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IEpTQzo6QXJnTGlzdCYgYXJncywKK3N0YXRpYyBKU0M6OkpTVmFsdWUgcmVwbGFjZUl0ZW0o
SlNQT0RMaXN0VHlwZSogd3JhcHBlciwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIEpTU1ZHUE9ETGlzdFRyYWl0czxQT0RUeXBl
Pjo6Q29udmVyc2lvbkNhbGxiYWNrIGNvbnZlcnNpb24pCiB7CiAgICAgYm9vbCBpbmRleE9rID0g
ZmFsc2U7Ci0gICAgdW5zaWduZWQgaW5kZXggPSBhcmdzLmF0KDEpLnRvVUludDMyKGV4ZWMsIGlu
ZGV4T2spOworICAgIHVuc2lnbmVkIGluZGV4ID0gZXhlYy0+YXJndW1lbnQoMSkudG9VSW50MzIo
ZXhlYywgaW5kZXhPayk7CiAgICAgaWYgKCFpbmRleE9rKSB7CiAgICAgICAgIHNldERPTUV4Y2Vw
dGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7CiAgICAgICAgIHJldHVybiBKU0M6OmpzVW5k
ZWZpbmVkKCk7CkBAIC0xNjIsMTUgKzE2MiwxNSBAQCBzdGF0aWMgSlNDOjpKU1ZhbHVlIHJlcGxh
Y2VJdGVtKEpTUE9ETGlzCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgdHlwZW5hbWUg
SlNTVkdQT0RMaXN0VHJhaXRzPFBPRFR5cGU+OjpQT0RMaXN0KiBsaXN0SW1wID0gd3JhcHBlci0+
aW1wbCgpOwogICAgIHJldHVybiBmaW5pc2hTZXR0ZXI8SlNQT0RMaXN0VHlwZSwgUE9EVHlwZT4o
ZXhlYywgZWMsIHdyYXBwZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsaXN0SW1wLT5yZXBsYWNlSXRlbShKU1NWR1BPRExpc3RUcmFpdHM8UE9EVHlw
ZT46OlBPRExpc3RJdGVtOjpjb3B5KGNvbnZlcnNpb24oYXJncy5hdCgwKSkpLCBpbmRleCwgZWMp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RJ
bXAtPnJlcGxhY2VJdGVtKEpTU1ZHUE9ETGlzdFRyYWl0czxQT0RUeXBlPjo6UE9ETGlzdEl0ZW06
OmNvcHkoY29udmVyc2lvbihleGVjLT5hcmd1bWVudCgwKSkpLCBpbmRleCwgZWMpKTsKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgSlNQT0RMaXN0VHlwZSwgdHlwZW5hbWUgUE9EVHlwZT4KLXN0YXRp
YyBKU0M6OkpTVmFsdWUgcmVtb3ZlSXRlbShKU1BPRExpc3RUeXBlKiB3cmFwcGVyLCBKU0M6OkV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzLAorc3RhdGljIEpTQzo6SlNW
YWx1ZSByZW1vdmVJdGVtKEpTUE9ETGlzdFR5cGUqIHdyYXBwZXIsIEpTQzo6RXhlY1N0YXRlKiBl
eGVjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIEpTU1ZHUE9ETGlz
dFRyYWl0czxQT0RUeXBlPjo6Q29udmVyc2lvbkNhbGxiYWNrKQogewogICAgIGJvb2wgaW5kZXhP
ayA9IGZhbHNlOwotICAgIHVuc2lnbmVkIGluZGV4ID0gYXJncy5hdCgwKS50b1VJbnQzMihleGVj
LCBpbmRleE9rKTsKKyAgICB1bnNpZ25lZCBpbmRleCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvVUlu
dDMyKGV4ZWMsIGluZGV4T2spOwogICAgIGlmICghaW5kZXhPaykgewogICAgICAgICBzZXRET01F
eGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOwogICAgICAgICByZXR1cm4gSlNDOjpq
c1VuZGVmaW5lZCgpOwpAQCAtMTgzLDEzICsxODMsMTMgQEAgc3RhdGljIEpTQzo6SlNWYWx1ZSBy
ZW1vdmVJdGVtKEpTUE9ETGlzdAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBKU1BPRExpc3RUeXBl
LCB0eXBlbmFtZSBQT0RUeXBlPgotc3RhdGljIEpTQzo6SlNWYWx1ZSBhcHBlbmRJdGVtKEpTUE9E
TGlzdFR5cGUqIHdyYXBwZXIsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xp
c3QmIGFyZ3MsCitzdGF0aWMgSlNDOjpKU1ZhbHVlIGFwcGVuZEl0ZW0oSlNQT0RMaXN0VHlwZSog
d3JhcHBlciwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdHlwZW5hbWUgSlNTVkdQT0RMaXN0VHJhaXRzPFBPRFR5cGU+OjpDb252ZXJzaW9uQ2Fs
bGJhY2sgY29udmVyc2lvbikKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICB0eXBl
bmFtZSBKU1NWR1BPRExpc3RUcmFpdHM8UE9EVHlwZT46OlBPRExpc3QqIGxpc3RJbXAgPSB3cmFw
cGVyLT5pbXBsKCk7CiAgICAgcmV0dXJuIGZpbmlzaFNldHRlcjxKU1BPRExpc3RUeXBlLCBQT0RU
eXBlPihleGVjLCBlYywgd3JhcHBlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxpc3RJbXAtPmFwcGVuZEl0ZW0oSlNTVkdQT0RMaXN0VHJhaXRzPFBP
RFR5cGU+OjpQT0RMaXN0SXRlbTo6Y29weShjb252ZXJzaW9uKGFyZ3MuYXQoMCkpKSwgZWMpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RJbXAt
PmFwcGVuZEl0ZW0oSlNTVkdQT0RMaXN0VHJhaXRzPFBPRFR5cGU+OjpQT0RMaXN0SXRlbTo6Y29w
eShjb252ZXJzaW9uKGV4ZWMtPmFyZ3VtZW50KDApKSksIGVjKSk7CiB9CiAKIH0KSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvanMvSlNTVkdQYXRoU2VnTGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1BhdGhTZWdMaXN0Q3VzdG9tLmNwcAkocmV2aXNp
b24gNjAzNDEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHUGF0aFNlZ0xpc3RDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSBKU1NWR1BhdGhTZWdMaXN0OjpjbGVh
cihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZSBKU1NWR1BhdGhTZWdM
aXN0OjpjbGVhcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CiAKQEAgLTQ5LDEwICs0OSwxMCBAQCBKU1ZhbHVlIEpTU1ZHUGF0aFNlZ0xpc3Q6OmNsZWFyKEV4
ZWNTdGF0CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNTVkdQYXRo
U2VnTGlzdDo6aW5pdGlhbGl6ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CitKU1ZhbHVlIEpTU1ZHUGF0aFNlZ0xpc3Q6OmluaXRpYWxpemUoRXhlY1N0YXRlKiBleGVjKQog
ewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFNWR1BhdGhTZWcqIG5ld0l0ZW0gPSB0
b1NWR1BhdGhTZWcoYXJncy5hdCgwKSk7CisgICAgU1ZHUGF0aFNlZyogbmV3SXRlbSA9IHRvU1ZH
UGF0aFNlZyhleGVjLT5hcmd1bWVudCgwKSk7CiAKICAgICBTVkdQYXRoU2VnTGlzdCogbGlzdCA9
IGltcGwoKTsKIApAQCAtNjYsMTIgKzY2LDEyIEBAIEpTVmFsdWUgSlNTVkdQYXRoU2VnTGlzdDo6
aW5pdGlhbGl6ZShFeGUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlIEpTU1ZHUGF0
aFNlZ0xpc3Q6OmdldEl0ZW0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQor
SlNWYWx1ZSBKU1NWR1BhdGhTZWdMaXN0OjpnZXRJdGVtKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKIAogICAgIGJvb2wgaW5kZXhPazsKLSAgICB1bnNpZ25l
ZCBpbmRleCA9IGFyZ3MuYXQoMCkudG9JbnQzMihleGVjLCBpbmRleE9rKTsKKyAgICB1bnNpZ25l
ZCBpbmRleCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYywgaW5kZXhPayk7CiAgICAg
aWYgKCFpbmRleE9rKSB7CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01B
VENIX0VSUik7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpAQCAtODYsMTMgKzg2LDEz
IEBAIEpTVmFsdWUgSlNTVkdQYXRoU2VnTGlzdDo6Z2V0SXRlbShFeGVjU3QKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1KU1ZhbHVlIEpTU1ZHUGF0aFNlZ0xpc3Q6Omluc2VydEl0ZW1CZWZvcmUo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU1NWR1BhdGhT
ZWdMaXN0OjppbnNlcnRJdGVtQmVmb3JlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKLSAgICBTVkdQYXRoU2VnKiBuZXdJdGVtID0gdG9TVkdQYXRoU2VnKGFy
Z3MuYXQoMCkpOworICAgIFNWR1BhdGhTZWcqIG5ld0l0ZW0gPSB0b1NWR1BhdGhTZWcoZXhlYy0+
YXJndW1lbnQoMCkpOwogCiAgICAgYm9vbCBpbmRleE9rOwotICAgIHVuc2lnbmVkIGluZGV4ID0g
YXJncy5hdCgxKS50b0ludDMyKGV4ZWMsIGluZGV4T2spOworICAgIHVuc2lnbmVkIGluZGV4ID0g
ZXhlYy0+YXJndW1lbnQoMSkudG9JbnQzMihleGVjLCBpbmRleE9rKTsKICAgICBpZiAoIWluZGV4
T2spIHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC0xMDgsMTMgKzEwOCwxMyBAQCBKU1Zh
bHVlIEpTU1ZHUGF0aFNlZ0xpc3Q6Omluc2VydEl0ZW1CZWZvCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotSlNWYWx1ZSBKU1NWR1BhdGhTZWdMaXN0OjpyZXBsYWNlSXRlbShFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTU1ZHUGF0aFNlZ0xpc3Q6OnJlcGxh
Y2VJdGVtKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAg
ICBTVkdQYXRoU2VnKiBuZXdJdGVtID0gdG9TVkdQYXRoU2VnKGFyZ3MuYXQoMCkpOworICAgIFNW
R1BhdGhTZWcqIG5ld0l0ZW0gPSB0b1NWR1BhdGhTZWcoZXhlYy0+YXJndW1lbnQoMCkpOwogICAg
IAogICAgIGJvb2wgaW5kZXhPazsKLSAgICB1bnNpZ25lZCBpbmRleCA9IGFyZ3MuYXQoMSkudG9J
bnQzMihleGVjLCBpbmRleE9rKTsKKyAgICB1bnNpZ25lZCBpbmRleCA9IGV4ZWMtPmFyZ3VtZW50
KDEpLnRvSW50MzIoZXhlYywgaW5kZXhPayk7CiAgICAgaWYgKCFpbmRleE9rKSB7CiAgICAgICAg
IHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7CiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwpAQCAtMTMwLDEyICsxMzAsMTIgQEAgSlNWYWx1ZSBKU1NWR1BhdGhT
ZWdMaXN0OjpyZXBsYWNlSXRlbShFeAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUg
SlNTVkdQYXRoU2VnTGlzdDo6cmVtb3ZlSXRlbShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCitKU1ZhbHVlIEpTU1ZHUGF0aFNlZ0xpc3Q6OnJlbW92ZUl0ZW0oRXhlY1N0YXRl
KiBleGVjKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIAogICAgIGJvb2wgaW5k
ZXhPazsKLSAgICB1bnNpZ25lZCBpbmRleCA9IGFyZ3MuYXQoMCkudG9JbnQzMihleGVjLCBpbmRl
eE9rKTsKKyAgICB1bnNpZ25lZCBpbmRleCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhl
YywgaW5kZXhPayk7CiAgICAgaWYgKCFpbmRleE9rKSB7CiAgICAgICAgIHNldERPTUV4Y2VwdGlv
bihleGVjLCBUWVBFX01JU01BVENIX0VSUik7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwpAQCAtMTUzLDEwICsxNTMsMTAgQEAgSlNWYWx1ZSBKU1NWR1BhdGhTZWdMaXN0OjpyZW1vdmVJ
dGVtKEV4ZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUgSlNTVkdQYXRoU2VnTGlz
dDo6YXBwZW5kSXRlbShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1Zh
bHVlIEpTU1ZHUGF0aFNlZ0xpc3Q6OmFwcGVuZEl0ZW0oRXhlY1N0YXRlKiBleGVjKQogewogICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFNWR1BhdGhTZWcqIG5ld0l0ZW0gPSB0b1NWR1Bh
dGhTZWcoYXJncy5hdCgwKSk7CisgICAgU1ZHUGF0aFNlZyogbmV3SXRlbSA9IHRvU1ZHUGF0aFNl
ZyhleGVjLT5hcmd1bWVudCgwKSk7CiAKICAgICBTVkdQYXRoU2VnTGlzdCogbGlzdCA9IGltcGwo
KTsKICAgICBTVkdFbGVtZW50KiBjb250ZXh0ID0gSlNTVkdDb250ZXh0Q2FjaGU6OnN2Z0NvbnRl
eHRGb3JET01PYmplY3QodGhpcyk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTVWludDhB
cnJheUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1VpbnQ4
QXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNVaW50OEFycmF5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsOSArNDYsOSBAQCBK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgCiAgICAgcmV0dXJuIGdldERP
TU9iamVjdFdyYXBwZXI8SlNVaW50OEFycmF5PihleGVjLCBnbG9iYWxPYmplY3QsIG9iamVjdCk7
CiB9CiAKLUpTQzo6SlNWYWx1ZSBKU1VpbnQ4QXJyYXk6OnNldChKU0M6OkV4ZWNTdGF0ZSogZXhl
YywgSlNDOjpBcmdMaXN0IGNvbnN0JiBhcmdzKQorSlNDOjpKU1ZhbHVlIEpTVWludDhBcnJheTo6
c2V0KEpTQzo6RXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBzZXRXZWJHTEFycmF5SGVs
cGVyKGV4ZWMsIGltcGwoKSwgYXJncywgdG9VaW50OEFycmF5KTsKKyAgICByZXR1cm4gc2V0V2Vi
R0xBcnJheUhlbHBlcihleGVjLCBpbXBsKCksIHRvVWludDhBcnJheSk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNVaW50MTZBcnJheUN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1VpbnQxNkFycmF5
Q3VzdG9tLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTVWlu
dDE2QXJyYXlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw5ICs0Niw5IEBAIEpTQzo6
SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCAKICAgICByZXR1cm4gZ2V0RE9NT2Jq
ZWN0V3JhcHBlcjxKU1VpbnQxNkFycmF5PihleGVjLCBnbG9iYWxPYmplY3QsIG9iamVjdCk7CiB9
CiAKLUpTQzo6SlNWYWx1ZSBKU1VpbnQxNkFycmF5OjpzZXQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMs
IEpTQzo6QXJnTGlzdCBjb25zdCYgYXJncykKK0pTQzo6SlNWYWx1ZSBKU1VpbnQxNkFycmF5Ojpz
ZXQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIHNldFdlYkdMQXJyYXlIZWxw
ZXIoZXhlYywgaW1wbCgpLCBhcmdzLCB0b1VpbnQxNkFycmF5KTsKKyAgICByZXR1cm4gc2V0V2Vi
R0xBcnJheUhlbHBlcihleGVjLCBpbXBsKCksIHRvVWludDE2QXJyYXkpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTVWludDMyQXJyYXlD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNVaW50MzJBcnJh
eUN1c3RvbS5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Vp
bnQzMkFycmF5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsOSArNDYsOSBAQCBKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgCiAgICAgcmV0dXJuIGdldERPTU9i
amVjdFdyYXBwZXI8SlNVaW50MzJBcnJheT4oZXhlYywgZ2xvYmFsT2JqZWN0LCBvYmplY3QpOwog
fQogCi1KU0M6OkpTVmFsdWUgSlNVaW50MzJBcnJheTo6c2V0KEpTQzo6RXhlY1N0YXRlKiBleGVj
LCBKU0M6OkFyZ0xpc3QgY29uc3QmIGFyZ3MpCitKU0M6OkpTVmFsdWUgSlNVaW50MzJBcnJheTo6
c2V0KEpTQzo6RXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBzZXRXZWJHTEFycmF5SGVs
cGVyKGV4ZWMsIGltcGwoKSwgYXJncywgdG9VaW50MzJBcnJheSk7CisgICAgcmV0dXJuIHNldFdl
YkdMQXJyYXlIZWxwZXIoZXhlYywgaW1wbCgpLCB0b1VpbnQzMkFycmF5KTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVy
aW5nQ29udGV4dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY3LDIxICs2NywyMSBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZl
ckRhdGEoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6QXJnTGlzdCBjb25zdCYgYXJncykKK0pT
VmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckRhdGEoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMpCiB7Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDMpCisgICAgaWYgKGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSAhPSAzKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhF
cnJvcik7CiAKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBhcmdzLmF0KDApLnRvSW50MzIoZXhlYyk7
Ci0gICAgdW5zaWduZWQgdXNhZ2UgPSBhcmdzLmF0KDIpLnRvSW50MzIoZXhlYyk7CisgICAgdW5z
aWduZWQgdGFyZ2V0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKKyAgICB1bnNp
Z25lZCB1c2FnZSA9IGV4ZWMtPmFyZ3VtZW50KDIpLnRvSW50MzIoZXhlYyk7CiAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7CiAKICAgICAvLyBJZiBhcmd1bWVudCAxIGlzIGEgbnVtYmVyLCB3ZSBh
cmUgaW5pdGlhbGl6aW5nIHRoaXMgYnVmZmVyIHRvIHRoYXQgc2l6ZQotICAgIGlmICghYXJncy5h
dCgxKS5pc09iamVjdCgpKSB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBjb3VudCA9IGFyZ3MuYXQo
MSkudG9JbnQzMihleGVjKTsKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDEpLmlzT2JqZWN0KCkp
IHsKKyAgICAgICAgdW5zaWduZWQgaW50IGNvdW50ID0gZXhlYy0+YXJndW1lbnQoMSkudG9JbnQz
MihleGVjKTsKICAgICAgICAgc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4oaW1w
bCgpKS0+YnVmZmVyRGF0YSh0YXJnZXQsIGNvdW50LCB1c2FnZSwgZWMpOwogICAgIH0gZWxzZSB7
Ci0gICAgICAgIEFycmF5QnVmZmVyVmlldyogYXJyYXkgPSB0b0FycmF5QnVmZmVyVmlldyhhcmdz
LmF0KDEpKTsKKyAgICAgICAgQXJyYXlCdWZmZXJWaWV3KiBhcnJheSA9IHRvQXJyYXlCdWZmZXJW
aWV3KGV4ZWMtPmFyZ3VtZW50KDEpKTsKICAgICAgICAgc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJp
bmdDb250ZXh0Kj4oaW1wbCgpKS0+YnVmZmVyRGF0YSh0YXJnZXQsIGFycmF5LCB1c2FnZSwgZWMp
OwogICAgIH0KIApAQCAtODksMTYgKzg5LDE2IEBAIEpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmJ1ZmZlckQKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyU3ViRGF0YShKU0M6OkV4ZWNTdGF0ZSogZXhl
YywgSlNDOjpBcmdMaXN0IGNvbnN0JiBhcmdzKQorSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6YnVmZmVyU3ViRGF0YShKU0M6OkV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBpZiAoYXJn
cy5zaXplKCkgIT0gMykKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDMpCiAgICAg
ICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yKTsKIAotICAgIHVuc2lnbmVk
IHRhcmdldCA9IGFyZ3MuYXQoMCkudG9JbnQzMihleGVjKTsKLSAgICB1bnNpZ25lZCBvZmZzZXQg
PSBhcmdzLmF0KDEpLnRvSW50MzIoZXhlYyk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0gZXhlYy0+
YXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSBleGVjLT5h
cmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAg
IAotICAgIEFycmF5QnVmZmVyVmlldyogYXJyYXkgPSB0b0FycmF5QnVmZmVyVmlldyhhcmdzLmF0
KDIpKTsKKyAgICBBcnJheUJ1ZmZlclZpZXcqIGFycmF5ID0gdG9BcnJheUJ1ZmZlclZpZXcoZXhl
Yy0+YXJndW1lbnQoMikpOwogICAgIAogICAgIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29u
dGV4dCo+KGltcGwoKSktPmJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBvZmZzZXQsIGFycmF5LCBlYyk7
CiAKQEAgLTE0OSwxNyArMTQ5LDE3IEBAIGVudW0gT2JqZWN0VHlwZSB7CiAgICAga0J1ZmZlciwg
a1JlbmRlcmJ1ZmZlciwga1RleHR1cmUsIGtWZXJ0ZXhBdHRyaWIKIH07CiAKLXN0YXRpYyBKU1Zh
bHVlIGdldE9iamVjdFBhcmFtZXRlcihKU1dlYkdMUmVuZGVyaW5nQ29udGV4dCogb2JqLCBFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIE9iamVjdFR5cGUgb2JqZWN0VHlwZSkK
K3N0YXRpYyBKU1ZhbHVlIGdldE9iamVjdFBhcmFtZXRlcihKU1dlYkdMUmVuZGVyaW5nQ29udGV4
dCogb2JqLCBFeGVjU3RhdGUqIGV4ZWMsIE9iamVjdFR5cGUgb2JqZWN0VHlwZSkKIHsKLSAgICBp
ZiAoYXJncy5zaXplKCkgIT0gMikKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIp
CiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yKTsKIAogICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCA9
IHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KG9iai0+aW1wbCgpKTsKLSAgICB1
bnNpZ25lZCB0YXJnZXQgPSBhcmdzLmF0KDApLnRvSW50MzIoZXhlYyk7CisgICAgdW5zaWduZWQg
dGFyZ2V0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIHVuc2ln
bmVkIHBuYW1lID0gYXJncy5hdCgxKS50b0ludDMyKGV4ZWMpOworICAgIHVuc2lnbmVkIHBuYW1l
ID0gZXhlYy0+YXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIFdlYkdMR2V0SW5m
byBpbmZvOwpAQCAtMTkyLDI1ICsxOTIsMjUgQEAgZW51bSBXaGljaFByb2dyYW1DYWxsIHsKICAg
ICBrUHJvZ3JhbVBhcmFtZXRlciwga1VuaWZvcm0KIH07CiAKLUpTVmFsdWUgSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmdldEJ1ZmZlclBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCdWZmZXJQ
YXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBnZXRPYmplY3RQYXJhbWV0
ZXIodGhpcywgZXhlYywgYXJncywga0J1ZmZlcik7CisgICAgcmV0dXJuIGdldE9iamVjdFBhcmFt
ZXRlcih0aGlzLCBleGVjLCBrQnVmZmVyKTsKIH0KIAotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0g
ICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDMpCisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAh
PSAzKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7CiAKICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRl
eHQgPSBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihpbXBsKCkpOwotICAgIHVu
c2lnbmVkIHRhcmdldCA9IGFyZ3MuYXQoMCkudG9JbnQzMihleGVjKTsKKyAgICB1bnNpZ25lZCB0
YXJnZXQgPSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOwogICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgdW5zaWdu
ZWQgYXR0YWNobWVudCA9IGFyZ3MuYXQoMSkudG9JbnQzMihleGVjKTsKKyAgICB1bnNpZ25lZCBh
dHRhY2htZW50ID0gZXhlYy0+YXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIHVu
c2lnbmVkIHBuYW1lID0gYXJncy5hdCgyKS50b0ludDMyKGV4ZWMpOworICAgIHVuc2lnbmVkIHBu
YW1lID0gZXhlYy0+YXJndW1lbnQoMikudG9JbnQzMihleGVjKTsKICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIFdlYkdMR2V0
SW5mbyBpbmZvID0gY29udGV4dC0+Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKHRh
cmdldCwgYXR0YWNobWVudCwgcG5hbWUsIGVjKTsKQEAgLTIyMSwxNCArMjIxLDE0IEBAIEpTVmFs
dWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEZyYW0KICAgICByZXR1cm4gdG9KUyhleGVj
LCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7CiB9CiAKLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldFBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQYXJhbWV0ZXIoRXhlY1N0YXRl
KiBleGVjKQogewotICAgIGlmIChhcmdzLnNpemUoKSAhPSAxKQorICAgIGlmIChleGVjLT5hcmd1
bWVudENvdW50KCkgIT0gMSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4
RXJyb3IpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgV2ViR0xSZW5kZXJpbmdD
b250ZXh0KiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4oaW1w
bCgpKTsKLSAgICB1bnNpZ25lZCBwbmFtZSA9IGFyZ3MuYXQoMCkudG9JbnQzMihleGVjKTsKKyAg
ICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7CiAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
ICAgICBXZWJHTEdldEluZm8gaW5mbyA9IGNvbnRleHQtPmdldFBhcmFtZXRlcihwbmFtZSwgZWMp
OwpAQCAtMjM5LDE1ICsyMzksMTUgQEAgSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Z2V0UGFyYQogICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKIH0K
IAotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UHJvZ3JhbVBhcmFtZXRlcihF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFtUGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAg
ICBpZiAoYXJncy5zaXplKCkgIT0gMikKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9
IDIpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yKTsKIAogICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4
dCA9IHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KGltcGwoKSk7Ci0gICAgV2Vi
R0xQcm9ncmFtKiBwcm9ncmFtID0gdG9XZWJHTFByb2dyYW0oYXJncy5hdCgwKSk7Ci0gICAgdW5z
aWduZWQgcG5hbWUgPSBhcmdzLmF0KDEpLnRvSW50MzIoZXhlYyk7CisgICAgV2ViR0xQcm9ncmFt
KiBwcm9ncmFtID0gdG9XZWJHTFByb2dyYW0oZXhlYy0+YXJndW1lbnQoMCkpOworICAgIHVuc2ln
bmVkIHBuYW1lID0gZXhlYy0+YXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIFdl
YkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC0+Z2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBw
bmFtZSwgZWMpOwpAQCAtMjU4LDIwICsyNTgsMjAgQEAgSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Z2V0UHJvZwogICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBp
bmZvKTsKIH0KIAotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UmVuZGVyYnVm
ZmVyUGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFs
dWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcihFeGVj
U3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGdldE9iamVjdFBhcmFtZXRlcih0aGlzLCBleGVj
LCBhcmdzLCBrUmVuZGVyYnVmZmVyKTsKKyAgICByZXR1cm4gZ2V0T2JqZWN0UGFyYW1ldGVyKHRo
aXMsIGV4ZWMsIGtSZW5kZXJidWZmZXIpOwogfQogCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRTaGFkZXJQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQorSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVyUGFyYW1l
dGVyKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBpZiAoYXJncy5zaXplKCkgIT0gMikKKyAgICBp
ZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KGV4ZWMsIFN5bnRheEVycm9yKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFdl
YkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCA9IHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5n
Q29udGV4dCo+KGltcGwoKSk7Ci0gICAgV2ViR0xTaGFkZXIqIHNoYWRlciA9IHRvV2ViR0xTaGFk
ZXIoYXJncy5hdCgwKSk7Ci0gICAgdW5zaWduZWQgcG5hbWUgPSBhcmdzLmF0KDEpLnRvSW50MzIo
ZXhlYyk7CisgICAgV2ViR0xTaGFkZXIqIHNoYWRlciA9IHRvV2ViR0xTaGFkZXIoZXhlYy0+YXJn
dW1lbnQoMCkpOworICAgIHVuc2lnbmVkIHBuYW1lID0gZXhlYy0+YXJndW1lbnQoMSkudG9JbnQz
MihleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC0+Z2V0U2hhZGVy
UGFyYW1ldGVyKHNoYWRlciwgcG5hbWUsIGVjKTsKQEAgLTI4MiwyMCArMjgyLDIwIEBAIEpTVmFs
dWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFNoYWQKICAgICByZXR1cm4gdG9KUyhleGVj
LCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7CiB9CiAKLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldFRleFBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRUZXhQYXJhbWV0ZXIoRXhl
Y1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBnZXRPYmplY3RQYXJhbWV0ZXIodGhpcywgZXhl
YywgYXJncywga1RleHR1cmUpOworICAgIHJldHVybiBnZXRPYmplY3RQYXJhbWV0ZXIodGhpcywg
ZXhlYywga1RleHR1cmUpOwogfQogCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRVbmlmb3JtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUg
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFVuaWZvcm0oRXhlY1N0YXRlKiBleGVjKQogewot
ICAgIGlmIChhcmdzLnNpemUoKSAhPSAyKQorICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkg
IT0gMikKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOwogCiAg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250
ZXh0ID0gc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4oaW1wbCgpKTsKLSAgICBX
ZWJHTFByb2dyYW0qIHByb2dyYW0gPSB0b1dlYkdMUHJvZ3JhbShhcmdzLmF0KDApKTsKLSAgICBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jID0gdG9XZWJHTFVuaWZvcm1Mb2NhdGlvbihhcmdzLmF0
KDEpKTsKKyAgICBXZWJHTFByb2dyYW0qIHByb2dyYW0gPSB0b1dlYkdMUHJvZ3JhbShleGVjLT5h
cmd1bWVudCgwKSk7CisgICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvYyA9IHRvV2ViR0xVbmlm
b3JtTG9jYXRpb24oZXhlYy0+YXJndW1lbnQoMSkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgV2ViR0xHZXRJbmZvIGlu
Zm8gPSBjb250ZXh0LT5nZXRVbmlmb3JtKHByb2dyYW0sIGxvYywgZWMpOwpAQCAtMzA2LDkgKzMw
Niw5IEBAIEpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFVuaWYKICAgICByZXR1
cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7CiB9CiAKLUpTVmFsdWUgSlNXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmdldFZlcnRleEF0dHJpYihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRWZXJ0
ZXhBdHRyaWIoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBnZXRPYmplY3RQYXJhbWV0
ZXIodGhpcywgZXhlYywgYXJncywga1ZlcnRleEF0dHJpYik7CisgICAgcmV0dXJuIGdldE9iamVj
dFBhcmFtZXRlcih0aGlzLCBleGVjLCBrVmVydGV4QXR0cmliKTsKIH0KIAogLy8gICB2b2lkIHRl
eEltYWdlMkQoaW4gR0xlbnVtIHRhcmdldCwgaW4gR0xpbnQgbGV2ZWwsIGluIEdMZW51bSBpbnRl
cm5hbGZvcm1hdCwgaW4gR0xzaXplaSB3aWR0aCwgaW4gR0xzaXplaSBoZWlnaHQsIGluIEdMaW50
IGJvcmRlciwgaW4gR0xlbnVtIGZvcm1hdCwgaW4gR0xlbnVtIHR5cGUsIGluIEFycmF5QnVmZmVy
VmlldyBwaXhlbHMpOwpAQCAtMzE2LDM1ICszMTYsMzUgQEAgSlNWYWx1ZSBKU1dlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Z2V0VmVydAogLy8gICB2b2lkIHRleEltYWdlMkQoaW4gR0xlbnVtIHRhcmdl
dCwgaW4gR0xpbnQgbGV2ZWwsIGluIEhUTUxJbWFnZUVsZW1lbnQgaW1hZ2UsIFtPcHRpb25hbF0g
aW4gR0xib29sZWFuIGZsaXBZLCBbT3B0aW9uYWxdIGluIHByZW11bHRpcGx5QWxwaGEpOwogLy8g
ICB2b2lkIHRleEltYWdlMkQoaW4gR0xlbnVtIHRhcmdldCwgaW4gR0xpbnQgbGV2ZWwsIGluIEhU
TUxDYW52YXNFbGVtZW50IGNhbnZhcywgW09wdGlvbmFsXSBpbiBHTGJvb2xlYW4gZmxpcFksIFtP
cHRpb25hbF0gaW4gcHJlbXVsdGlwbHlBbHBoYSk7CiAvLyAgIHZvaWQgdGV4SW1hZ2UyRChpbiBH
TGVudW0gdGFyZ2V0LCBpbiBHTGludCBsZXZlbCwgaW4gSFRNTFZpZGVvRWxlbWVudCB2aWRlbywg
W09wdGlvbmFsXSBpbiBHTGJvb2xlYW4gZmxpcFksIFtPcHRpb25hbF0gaW4gcHJlbXVsdGlwbHlB
bHBoYSk7Ci1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnRleEltYWdlMkQoRXhlY1N0YXRlKiBleGVjKQogeyAKLSAgICBpZiAoYXJncy5z
aXplKCkgPCAzIHx8IGFyZ3Muc2l6ZSgpID4gOSkKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3Vu
dCgpIDwgMyB8fCBleGVjLT5hcmd1bWVudENvdW50KCkgPiA5KQogICAgICAgICByZXR1cm4gdGhy
b3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
ICAgICAKICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPSBzdGF0aWNfY2FzdDxX
ZWJHTFJlbmRlcmluZ0NvbnRleHQqPihpbXBsKCkpOyAgICAKLSAgICB1bnNpZ25lZCB0YXJnZXQg
PSBhcmdzLmF0KDApLnRvSW50MzIoZXhlYyk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0gZXhlYy0+
YXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
ICAgIAogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAKLSAgICB1bnNpZ25lZCBs
ZXZlbCA9IGFyZ3MuYXQoMSkudG9JbnQzMihleGVjKTsKKyAgICB1bnNpZ25lZCBsZXZlbCA9IGV4
ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKSAgICAKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBKU09iamVjdCog
byA9IDA7CiAgICAgCi0gICAgaWYgKGFyZ3Muc2l6ZSgpIDw9IDUpIHsKKyAgICBpZiAoZXhlYy0+
YXJndW1lbnRDb3VudCgpIDw9IDUpIHsKICAgICAgICAgLy8gVGhpcyBpcyBvbmUgb2YgdGhlIGxh
c3QgNCBmb3Jtcy4gUGFyYW0gMiBjYW4gYmUgSW1hZ2VEYXRhIG9yIDxpbWc+LCA8Y2FudmFzPiBv
ciA8dmlkZW8+IGVsZW1lbnQuCi0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBhcmdzLmF0KDIpOwor
ICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+YXJndW1lbnQoMik7CiAgICAgCiAgICAgICAg
IGlmICghdmFsdWUuaXNPYmplY3QoKSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4
ZWMsIFR5cGVFcnJvcik7CiAgICAgICAgIAogICAgICAgICBvID0gYXNPYmplY3QodmFsdWUpOwog
ICAgICAgICAKLSAgICAgICAgYm9vbCBmbGlwWSA9IGFyZ3MuYXQoMykudG9Cb29sZWFuKGV4ZWMp
OwotICAgICAgICBib29sIHByZW11bHRpcGx5QWxwaGEgPSBhcmdzLmF0KDQpLnRvQm9vbGVhbihl
eGVjKTsKKyAgICAgICAgYm9vbCBmbGlwWSA9IGV4ZWMtPmFyZ3VtZW50KDMpLnRvQm9vbGVhbihl
eGVjKTsKKyAgICAgICAgYm9vbCBwcmVtdWx0aXBseUFscGhhID0gZXhlYy0+YXJndW1lbnQoNCku
dG9Cb29sZWFuKGV4ZWMpOwogICAgICAgICAKICAgICAgICAgaWYgKG8tPmluaGVyaXRzKCZKU0lt
YWdlRGF0YTo6c19pbmZvKSkgewogICAgICAgICAgICAgSW1hZ2VEYXRhKiBkYXRhID0gc3RhdGlj
X2Nhc3Q8SW1hZ2VEYXRhKj4oc3RhdGljX2Nhc3Q8SlNJbWFnZURhdGEqPihvKS0+aW1wbCgpKTsK
QEAgLTM2MywzNSArMzYzLDM1IEBAIEpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRl
eEltYWcKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJS
OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSA5KQorICAgICAgICBp
ZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDkpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dF
cnJvcihleGVjLCBTeW50YXhFcnJvcik7CiAKICAgICAgICAgLy8gVGhpcyBtdXN0IGJlIHRoZSBB
cnJheUJ1ZmZlclZpZXcgY2FzZQotICAgICAgICB1bnNpZ25lZCBpbnRlcm5hbGZvcm1hdCA9IGFy
Z3MuYXQoMikudG9JbnQzMihleGVjKTsKKyAgICAgICAgdW5zaWduZWQgaW50ZXJuYWxmb3JtYXQg
PSBleGVjLT5hcmd1bWVudCgyKS50b0ludDMyKGV4ZWMpOwogICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpICAgIAogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAg
ICAgICAgdW5zaWduZWQgd2lkdGggPSBhcmdzLmF0KDMpLnRvSW50MzIoZXhlYyk7CisgICAgICAg
IHVuc2lnbmVkIHdpZHRoID0gZXhlYy0+YXJndW1lbnQoMykudG9JbnQzMihleGVjKTsKICAgICAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAKICAgICAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogCi0gICAgICAgIHVuc2lnbmVkIGhlaWdodCA9IGFyZ3MuYXQoNCkudG9JbnQz
MihleGVjKTsKKyAgICAgICAgdW5zaWduZWQgaGVpZ2h0ID0gZXhlYy0+YXJndW1lbnQoNCkudG9J
bnQzMihleGVjKTsKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAKICAgICAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgICAgIHVuc2lnbmVkIGJvcmRlciA9
IGFyZ3MuYXQoNSkudG9JbnQzMihleGVjKTsKKyAgICAgICAgdW5zaWduZWQgYm9yZGVyID0gZXhl
Yy0+YXJndW1lbnQoNSkudG9JbnQzMihleGVjKTsKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKSAgICAKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgICAg
IHVuc2lnbmVkIGZvcm1hdCA9IGFyZ3MuYXQoNikudG9JbnQzMihleGVjKTsKKyAgICAgICAgdW5z
aWduZWQgZm9ybWF0ID0gZXhlYy0+YXJndW1lbnQoNikudG9JbnQzMihleGVjKTsKICAgICAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogCi0gICAgICAgIHVuc2lnbmVkIHR5cGUgPSBhcmdzLmF0KDcpLnRvSW50MzIoZXhl
Yyk7CisgICAgICAgIHVuc2lnbmVkIHR5cGUgPSBleGVjLT5hcmd1bWVudCg3KS50b0ludDMyKGV4
ZWMpOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpICAgIAogICAgICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGFyZ3MuYXQo
OCk7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBleGVjLT5hcmd1bWVudCg4KTsKICAgICAgICAg
ICAgIAogICAgICAgICAvLyBGb3IgdGhpcyBjYXNlIHBhc3NpbmcgMCAoZm9yIGEgbnVsbCBhcnJh
eSkgaXMgYWxsb3dlZAogICAgICAgICBpZiAodmFsdWUuaXNOdWxsKCkpCkBAIC00MTksNDMgKzQx
OSw0MyBAQCBKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnCiAvLyAgIHZv
aWQgdGV4U3ViSW1hZ2UyRChpbiBHTGVudW0gdGFyZ2V0LCBpbiBHTGludCBsZXZlbCwgaW4gR0xp
bnQgeG9mZnNldCwgaW4gR0xpbnQgeW9mZnNldCwgaW4gSFRNTEltYWdlRWxlbWVudCBpbWFnZSwg
W09wdGlvbmFsXSBHTGJvb2xlYW4gZmxpcFksIFtPcHRpb25hbF0gaW4gcHJlbXVsdGlwbHlBbHBo
YSk7CiAvLyAgIHZvaWQgdGV4U3ViSW1hZ2UyRChpbiBHTGVudW0gdGFyZ2V0LCBpbiBHTGludCBs
ZXZlbCwgaW4gR0xpbnQgeG9mZnNldCwgaW4gR0xpbnQgeW9mZnNldCwgaW4gSFRNTENhbnZhc0Vs
ZW1lbnQgY2FudmFzLCBbT3B0aW9uYWxdIEdMYm9vbGVhbiBmbGlwWSwgW09wdGlvbmFsXSBpbiBw
cmVtdWx0aXBseUFscGhhKTsKIC8vICAgdm9pZCB0ZXhTdWJJbWFnZTJEKGluIEdMZW51bSB0YXJn
ZXQsIGluIEdMaW50IGxldmVsLCBpbiBHTGludCB4b2Zmc2V0LCBpbiBHTGludCB5b2Zmc2V0LCBp
biBIVE1MVmlkZW9FbGVtZW50IHZpZGVvLCBbT3B0aW9uYWxdIEdMYm9vbGVhbiBmbGlwWSwgW09w
dGlvbmFsXSBpbiBwcmVtdWx0aXBseUFscGhhKTsKLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnRleFN1YkltYWdlMkQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQorSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChFeGVjU3Rh
dGUqIGV4ZWMpCiB7IAotICAgIGlmIChhcmdzLnNpemUoKSA8IDUgfHwgYXJncy5zaXplKCkgPiA5
KQorICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCA1IHx8IGV4ZWMtPmFyZ3VtZW50Q291
bnQoKSA+IDkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yKTsK
IAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogCiAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0
KiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4oaW1wbCgpKTsg
ICAgCi0gICAgdW5zaWduZWQgdGFyZ2V0ID0gYXJncy5hdCgwKS50b0ludDMyKGV4ZWMpOworICAg
IHVuc2lnbmVkIHRhcmdldCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7CiAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAKLSAgICB1bnNpZ25lZCBsZXZlbCA9IGFyZ3MuYXQoMSkudG9JbnQzMihleGVjKTsKKyAg
ICB1bnNpZ25lZCBsZXZlbCA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7CiAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgCi0gICAgdW5zaWduZWQgeG9mZiA9IGFyZ3MuYXQoMikudG9JbnQzMihleGVjKTsK
KyAgICB1bnNpZ25lZCB4b2ZmID0gZXhlYy0+YXJndW1lbnQoMikudG9JbnQzMihleGVjKTsKICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpICAgIAogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKICAgICAKLSAgICB1bnNpZ25lZCB5b2ZmID0gYXJncy5hdCgzKS50b0ludDMyKGV4ZWMp
OworICAgIHVuc2lnbmVkIHlvZmYgPSBleGVjLT5hcmd1bWVudCgzKS50b0ludDMyKGV4ZWMpOwog
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgICAgCiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogICAgIAogICAgIEpTT2JqZWN0KiBvID0gMDsKICAgICAgICAgCi0gICAgaWYgKGFy
Z3Muc2l6ZSgpIDw9IDcpIHsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDw9IDcpIHsK
ICAgICAgICAgLy8gVGhpcyBpcyBvbmUgb2YgdGhlIGxhc3QgNCBmb3Jtcy4gUGFyYW0gNCBjYW4g
YmUgPGltZz4sIDxjYW52YXM+IG9yIDx2aWRlbz4gZWxlbWVudCwgb2YgdGhlIGZvcm1hdCBwYXJh
bS4KLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGFyZ3MuYXQoNCk7CisgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBleGVjLT5hcmd1bWVudCg0KTsKIAogICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0
KCkpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7CiAK
ICAgICAgICAgbyA9IGFzT2JqZWN0KHZhbHVlKTsKIAotICAgICAgICBib29sIGZsaXBZID0gYXJn
cy5hdCg1KS50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSA9
IGFyZ3MuYXQoNikudG9Cb29sZWFuKGV4ZWMpOworICAgICAgICBib29sIGZsaXBZID0gZXhlYy0+
YXJndW1lbnQoNSkudG9Cb29sZWFuKGV4ZWMpOworICAgICAgICBib29sIHByZW11bHRpcGx5QWxw
aGEgPSBleGVjLT5hcmd1bWVudCg2KS50b0Jvb2xlYW4oZXhlYyk7CiAgICAgICAgIAogICAgICAg
ICBpZiAoby0+aW5oZXJpdHMoJkpTSW1hZ2VEYXRhOjpzX2luZm8pKSB7CiAgICAgICAgICAgICBJ
bWFnZURhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxJbWFnZURhdGEqPihzdGF0aWNfY2FzdDxKU0lt
YWdlRGF0YSo+KG8pLT5pbXBsKCkpOwpAQCAtNDc1LDI2ICs0NzUsMjYgQEAgSlNWYWx1ZSBKU1dl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSQogICAgICAgICAgICAgZWMgPSBUWVBFX01JU01B
VENIX0VSUjsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBUaGlzIG11c3QgYmUgdGhlIEFycmF5
QnVmZmVyVmlldyBmb3JtCi0gICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSA5KQorICAgICAgICBp
ZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDkpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dF
cnJvcihleGVjLCBTeW50YXhFcnJvcik7CiAKLSAgICAgICAgdW5zaWduZWQgd2lkdGggPSBhcmdz
LmF0KDQpLnRvSW50MzIoZXhlYyk7CisgICAgICAgIHVuc2lnbmVkIHdpZHRoID0gZXhlYy0+YXJn
dW1lbnQoNCkudG9JbnQzMihleGVjKTsKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KSAgICAKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICAKLSAgICAg
ICAgdW5zaWduZWQgaGVpZ2h0ID0gYXJncy5hdCg1KS50b0ludDMyKGV4ZWMpOworICAgICAgICB1
bnNpZ25lZCBoZWlnaHQgPSBleGVjLT5hcmd1bWVudCg1KS50b0ludDMyKGV4ZWMpOwogICAgICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpICAgIAogICAgICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAgICAgICAgIAotICAgICAgICB1bnNpZ25lZCBmb3JtYXQgPSBhcmdzLmF0KDYp
LnRvSW50MzIoZXhlYyk7CisgICAgICAgIHVuc2lnbmVkIGZvcm1hdCA9IGV4ZWMtPmFyZ3VtZW50
KDYpLnRvSW50MzIoZXhlYyk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgICAg
CiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgCi0gICAgICAgIHVu
c2lnbmVkIHR5cGUgPSBhcmdzLmF0KDcpLnRvSW50MzIoZXhlYyk7CisgICAgICAgIHVuc2lnbmVk
IHR5cGUgPSBleGVjLT5hcmd1bWVudCg3KS50b0ludDMyKGV4ZWMpOwogICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpICAgIAogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAgICAgICAgIAotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gYXJncy5hdCg4KTsKKyAgICAgICAg
SlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDgpOwogICAgICAgICBpZiAoIXZhbHVlLmlz
T2JqZWN0KCkpCiAgICAgICAgICAgICBjb250ZXh0LT50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2
ZWwsIHhvZmYsIHlvZmYsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgMCwgZWMpOwogICAg
ICAgICBlbHNlIHsKQEAgLTU1NSwyMyArNTU1LDIzIEBAIHN0YXRpYyBib29sIGZ1bmN0aW9uRm9y
VW5pZm9ybShEYXRhRnVuY3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBKU0M6OkpT
VmFsdWUgZGF0YUZ1bmN0aW9uZihEYXRhRnVuY3Rpb25Ub0NhbGwgZiwgSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncywgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBj
b250ZXh0KQorc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25mKERhdGFGdW5jdGlvblRv
Q2FsbCBmLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250
ZXh0KQogewotICAgIGlmIChhcmdzLnNpemUoKSAhPSAyKQorICAgIGlmIChleGVjLT5hcmd1bWVu
dENvdW50KCkgIT0gMikKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJy
b3IpOwogICAgIAogICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiA9IDA7CiAgICAg
bG9uZyBpbmRleCA9IC0xOwogICAgIAogICAgIGlmIChmdW5jdGlvbkZvclVuaWZvcm0oZikpCi0g
ICAgICAgIGxvY2F0aW9uID0gdG9XZWJHTFVuaWZvcm1Mb2NhdGlvbihhcmdzLmF0KDApKTsKKyAg
ICAgICAgbG9jYXRpb24gPSB0b1dlYkdMVW5pZm9ybUxvY2F0aW9uKGV4ZWMtPmFyZ3VtZW50KDAp
KTsKICAgICBlbHNlCi0gICAgICAgIGluZGV4ID0gYXJncy5hdCgwKS50b0ludDMyKGV4ZWMpOwor
ICAgICAgICBpbmRleCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7CiAKICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
ICAgICAgICAKLSAgICBSZWZQdHI8RmxvYXRBcnJheT4gd2ViR0xBcnJheSA9IHRvRmxvYXRBcnJh
eShhcmdzLmF0KDEpKTsKKyAgICBSZWZQdHI8RmxvYXRBcnJheT4gd2ViR0xBcnJheSA9IHRvRmxv
YXRBcnJheShleGVjLT5hcmd1bWVudCgxKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KSAgICAKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIApAQCAtNjA5LDcg
KzYwOSw3IEBAIHN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uZihEYXRhRnUKICAgICB9
CiAKICAgICBWZWN0b3I8ZmxvYXQsIDY0PiBhcnJheTsKLSAgICBpZiAoIXRvVmVjdG9yKGV4ZWMs
IGFyZ3MuYXQoMSksIGFycmF5KSkKKyAgICBpZiAoIXRvVmVjdG9yKGV4ZWMsIGV4ZWMtPmFyZ3Vt
ZW50KDEpLCBhcnJheSkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJv
cik7CiAKICAgICBzd2l0Y2ggKGYpIHsKQEAgLTY0MywxNyArNjQzLDE3IEBAIHN0YXRpYyBKU0M6
OkpTVmFsdWUgZGF0YUZ1bmN0aW9uZihEYXRhRnUKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
IH0KIAotc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25pKERhdGFGdW5jdGlvblRvQ2Fs
bCBmLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzLCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCitzdGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFGdW5j
dGlvbmkoRGF0YUZ1bmN0aW9uVG9DYWxsIGYsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDIpCisg
ICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAyKQogICAgICAgICByZXR1cm4gdGhyb3dF
cnJvcihleGVjLCBTeW50YXhFcnJvcik7CiAKLSAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24gPSB0b1dlYkdMVW5pZm9ybUxvY2F0aW9uKGFyZ3MuYXQoMCkpOworICAgIFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiA9IHRvV2ViR0xVbmlmb3JtTG9jYXRpb24oZXhlYy0+YXJn
dW1lbnQoMCkpOwogICAKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICAKLSAgICBSZWZQdHI8SW50MzJBcnJheT4gd2Vi
R0xBcnJheSA9IHRvSW50MzJBcnJheShhcmdzLmF0KDEpKTsKKyAgICBSZWZQdHI8SW50MzJBcnJh
eT4gd2ViR0xBcnJheSA9IHRvSW50MzJBcnJheShleGVjLT5hcmd1bWVudCgxKSk7CiAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAgICAgICAgIApAQCAtNjgyLDcgKzY4Miw3IEBAIHN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1
bmN0aW9uaShEYXRhRnUKIAogCiAgICAgVmVjdG9yPGludCwgNjQ+IGFycmF5OwotICAgIGlmICgh
dG9WZWN0b3IoZXhlYywgYXJncy5hdCgxKSwgYXJyYXkpKQorICAgIGlmICghdG9WZWN0b3IoZXhl
YywgZXhlYy0+YXJndW1lbnQoMSksIGFycmF5KSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3Io
ZXhlYywgVHlwZUVycm9yKTsKIAogICAgIHN3aXRjaCAoZikgewpAQCAtNzA2LDIxICs3MDYsMjEg
QEAgc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25pKERhdGFGdQogICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbk1hdHJp
eChEYXRhRnVuY3Rpb25NYXRyaXhUb0NhbGwgZiwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IEpTQzo6QXJnTGlzdCYgYXJncywgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQorc3Rh
dGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25NYXRyaXgoRGF0YUZ1bmN0aW9uTWF0cml4VG9D
YWxsIGYsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRl
eHQpCiB7Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDMpCisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSAhPSAzKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJv
cik7CiAKLSAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24gPSB0b1dlYkdMVW5pZm9y
bUxvY2F0aW9uKGFyZ3MuYXQoMCkpOworICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biA9IHRvV2ViR0xVbmlmb3JtTG9jYXRpb24oZXhlYy0+YXJndW1lbnQoMCkpOwogCiAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAgICAgICAgIAotICAgIGJvb2wgdHJhbnNwb3NlID0gYXJncy5hdCgxKS50b0Jvb2xlYW4oZXhl
Yyk7CisgICAgYm9vbCB0cmFuc3Bvc2UgPSBleGVjLT5hcmd1bWVudCgxKS50b0Jvb2xlYW4oZXhl
Yyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgICAgIAotICAgIFJlZlB0cjxGbG9hdEFycmF5PiB3ZWJHTEFycmF5
ID0gdG9GbG9hdEFycmF5KGFyZ3MuYXQoMikpOworICAgIFJlZlB0cjxGbG9hdEFycmF5PiB3ZWJH
TEFycmF5ID0gdG9GbG9hdEFycmF5KGV4ZWMtPmFyZ3VtZW50KDIpKTsKICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpICAgIAogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAg
ICAgCkBAIC03NDMsNyArNzQzLDcgQEAgc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25N
YXRyaXgoRAogICAgIH0KIAogICAgIFZlY3RvcjxmbG9hdCwgNjQ+IGFycmF5OwotICAgIGlmICgh
dG9WZWN0b3IoZXhlYywgYXJncy5hdCgyKSwgYXJyYXkpKQorICAgIGlmICghdG9WZWN0b3IoZXhl
YywgZXhlYy0+YXJndW1lbnQoMiksIGFycmF5KSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3Io
ZXhlYywgVHlwZUVycm9yKTsKIAogICAgIHN3aXRjaCAoZikgewpAQCAtNzYyLDc5ICs3NjIsNzkg
QEAgc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25NYXRyaXgoRAogICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogfQogCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnVuaWZvcm0xZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJn
cykKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFmdihKU0M6
OkV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3VuaWZvcm0x
diwgZXhlYywgYXJncywgc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4oaW1wbCgp
KSk7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl91bmlmb3JtMXYsIGV4ZWMsIHN0YXRpY19j
YXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KGltcGwoKSkpOwogfQogCi1KU0M6OkpTVmFsdWUg
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xaXYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncykKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybTFpdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4g
ZGF0YUZ1bmN0aW9uaShmX3VuaWZvcm0xdiwgZXhlYywgYXJncywgc3RhdGljX2Nhc3Q8V2ViR0xS
ZW5kZXJpbmdDb250ZXh0Kj4oaW1wbCgpKSk7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91
bmlmb3JtMXYsIGV4ZWMsIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KGltcGwo
KSkpOwogfQogCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0y
ZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncykKK0pTQzo6
SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJmdihKU0M6OkV4ZWNTdGF0
ZSogZXhlYykKIHsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3VuaWZvcm0ydiwgZXhlYywg
YXJncywgc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4oaW1wbCgpKSk7CisgICAg
cmV0dXJuIGRhdGFGdW5jdGlvbmYoZl91bmlmb3JtMnYsIGV4ZWMsIHN0YXRpY19jYXN0PFdlYkdM
UmVuZGVyaW5nQ29udGV4dCo+KGltcGwoKSkpOwogfQogCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaXYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpT
Qzo6QXJnTGlzdCYgYXJncykKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybTJpdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gZGF0YUZ1bmN0
aW9uaShmX3VuaWZvcm0ydiwgZXhlYywgYXJncywgc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdD
b250ZXh0Kj4oaW1wbCgpKSk7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91bmlmb3JtMnYs
IGV4ZWMsIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KGltcGwoKSkpOwogfQog
Ci1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZnYoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncykKK0pTQzo6SlNWYWx1ZSBK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykK
IHsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3VuaWZvcm0zdiwgZXhlYywgYXJncywgc3Rh
dGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4oaW1wbCgpKSk7CisgICAgcmV0dXJuIGRh
dGFGdW5jdGlvbmYoZl91bmlmb3JtM3YsIGV4ZWMsIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5n
Q29udGV4dCo+KGltcGwoKSkpOwogfQogCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm0zaXYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6QXJnTGlz
dCYgYXJncykKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNp
dihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uaShmX3Vu
aWZvcm0zdiwgZXhlYywgYXJncywgc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4o
aW1wbCgpKSk7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91bmlmb3JtM3YsIGV4ZWMsIHN0
YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KGltcGwoKSkpOwogfQogCi1KU0M6OkpT
VmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00ZnYoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncykKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBy
ZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3VuaWZvcm00diwgZXhlYywgYXJncywgc3RhdGljX2Nhc3Q8
V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4oaW1wbCgpKSk7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlv
bmYoZl91bmlmb3JtNHYsIGV4ZWMsIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+
KGltcGwoKSkpOwogfQogCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVu
aWZvcm00aXYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncykK
K0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpdihKU0M6OkV4
ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uaShmX3VuaWZvcm00diwg
ZXhlYywgYXJncywgc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4oaW1wbCgpKSk7
CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91bmlmb3JtNHYsIGV4ZWMsIHN0YXRpY19jYXN0
PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KGltcGwoKSkpOwogfQogCi1KU0M6OkpTVmFsdWUgSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgyZnYoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncykKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDJmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKIHsKLSAg
ICByZXR1cm4gZGF0YUZ1bmN0aW9uTWF0cml4KGZfdW5pZm9ybU1hdHJpeDJmdiwgZXhlYywgYXJn
cywgc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4oaW1wbCgpKSk7CisgICAgcmV0
dXJuIGRhdGFGdW5jdGlvbk1hdHJpeChmX3VuaWZvcm1NYXRyaXgyZnYsIGV4ZWMsIHN0YXRpY19j
YXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KGltcGwoKSkpOwogfQogCi1KU0M6OkpTVmFsdWUg
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgzZnYoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncykKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDNmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKIHsK
LSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uTWF0cml4KGZfdW5pZm9ybU1hdHJpeDNmdiwgZXhlYywg
YXJncywgc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4oaW1wbCgpKSk7CisgICAg
cmV0dXJuIGRhdGFGdW5jdGlvbk1hdHJpeChmX3VuaWZvcm1NYXRyaXgzZnYsIGV4ZWMsIHN0YXRp
Y19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KGltcGwoKSkpOwogfQogCi1KU0M6OkpTVmFs
dWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXg0ZnYoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncykKK0pTQzo6SlNWYWx1ZSBKU1dlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDRmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykK
IHsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uTWF0cml4KGZfdW5pZm9ybU1hdHJpeDRmdiwgZXhl
YywgYXJncywgc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4oaW1wbCgpKSk7Cisg
ICAgcmV0dXJuIGRhdGFGdW5jdGlvbk1hdHJpeChmX3VuaWZvcm1NYXRyaXg0ZnYsIGV4ZWMsIHN0
YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KGltcGwoKSkpOwogfQogCi1KU0M6OkpT
VmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjFmdihKU0M6OkV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzKQorSlNDOjpKU1ZhbHVlIEpTV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMp
CiB7Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWIxdiwgZXhlYywgYXJn
cywgc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4oaW1wbCgpKSk7CisgICAgcmV0
dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWIxdiwgZXhlYywgc3RhdGljX2Nhc3Q8V2Vi
R0xSZW5kZXJpbmdDb250ZXh0Kj4oaW1wbCgpKSk7CiB9CiAKLUpTQzo6SlNWYWx1ZSBKU1dlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMmZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBj
b25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MpCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnZlcnRleEF0dHJpYjJmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1
cm4gZGF0YUZ1bmN0aW9uZihmX3ZlcnRleEF0dHJpYjJ2LCBleGVjLCBhcmdzLCBzdGF0aWNfY2Fz
dDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihpbXBsKCkpKTsKKyAgICByZXR1cm4gZGF0YUZ1bmN0
aW9uZihmX3ZlcnRleEF0dHJpYjJ2LCBleGVjLCBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0Nv
bnRleHQqPihpbXBsKCkpKTsKIH0KIAotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6QXJn
TGlzdCYgYXJncykKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4
QXR0cmliM2Z2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBkYXRhRnVuY3Rp
b25mKGZfdmVydGV4QXR0cmliM3YsIGV4ZWMsIGFyZ3MsIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVy
aW5nQ29udGV4dCo+KGltcGwoKSkpOworICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVydGV4
QXR0cmliM3YsIGV4ZWMsIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KGltcGwo
KSkpOwogfQogCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0
dHJpYjRmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzKQor
SlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWI0ZnYoSlND
OjpFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhB
dHRyaWI0diwgZXhlYywgYXJncywgc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4o
aW1wbCgpKSk7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWI0diwgZXhl
Yywgc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4oaW1wbCgpKSk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2Nr
ZXRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2Nr
ZXRDdXN0b20uY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNX
ZWJTb2NrZXRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxMiArNDUsMTIgQEAgdXNp
bmcgbmFtZXNwYWNlIEpTQzsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gQ3VzdG9tIGZ1bmN0
aW9ucwotSlNWYWx1ZSBKU1dlYlNvY2tldDo6c2VuZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTV2ViU29ja2V0OjpzZW5kKEV4ZWNTdGF0ZSogZXhlYykK
IHsKLSAgICBpZiAoYXJncy5zaXplKCkgPCAxKQorICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50
KCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvciwgIk5v
dCBlbm91Z2ggYXJndW1lbnRzIik7CiAKLSAgICBjb25zdCBTdHJpbmcmIG1zZyA9IHVzdHJpbmdU
b1N0cmluZyhhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBjb25zdCBTdHJpbmcmIG1z
ZyA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSk7CiAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihl
eGVjLCBTeW50YXhFcnJvciwgImJhZCBtZXNzYWdlIGRhdGEuIik7CiAgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRD
dXN0b20uY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXb3Jr
ZXJDb250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDE0ICsxMDUsMTQgQEAg
SlNWYWx1ZSBKU1dvcmtlckNvbnRleHQ6OndlYlNvY2tldChFeGVjUwogfQogI2VuZGlmCiAKLUpT
VmFsdWUgSlNXb3JrZXJDb250ZXh0OjppbXBvcnRTY3JpcHRzKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNXb3JrZXJDb250ZXh0OjppbXBvcnRTY3JpcHRz
KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBpZiAoIWFyZ3Muc2l6ZSgpKQorICAgIGlmICghZXhl
Yy0+YXJndW1lbnRDb3VudCgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAg
IFZlY3RvcjxTdHJpbmc+IHVybHM7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3Mu
c2l6ZSgpOyBpKyspIHsKLSAgICAgICAgdXJscy5hcHBlbmQodXN0cmluZ1RvU3RyaW5nKGFyZ3Mu
YXQoaSkudG9TdHJpbmcoZXhlYykpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhl
Yy0+YXJndW1lbnRDb3VudCgpOyBpKyspIHsKKyAgICAgICAgdXJscy5hcHBlbmQodXN0cmluZ1Rv
U3RyaW5nKGV4ZWMtPmFyZ3VtZW50KGkpLnRvU3RyaW5nKGV4ZWMpKSk7CiAgICAgICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
ICAgIH0KQEAgLTEyMywyMSArMTIzLDIxIEBAIEpTVmFsdWUgSlNXb3JrZXJDb250ZXh0OjppbXBv
cnRTY3JpcHRzKEUKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBKU1dv
cmtlckNvbnRleHQ6OnNldFRpbWVvdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQorSlNWYWx1ZSBKU1dvcmtlckNvbnRleHQ6OnNldFRpbWVvdXQoRXhlY1N0YXRlKiBleGVj
KQogewotICAgIE93blB0cjxTY2hlZHVsZWRBY3Rpb24+IGFjdGlvbiA9IFNjaGVkdWxlZEFjdGlv
bjo6Y3JlYXRlKGV4ZWMsIGFyZ3MsIGN1cnJlbnRXb3JsZChleGVjKSk7CisgICAgT3duUHRyPFNj
aGVkdWxlZEFjdGlvbj4gYWN0aW9uID0gU2NoZWR1bGVkQWN0aW9uOjpjcmVhdGUoZXhlYywgY3Vy
cmVudFdvcmxkKGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIGludCBkZWxheSA9IGFyZ3MuYXQoMSkudG9JbnQz
MihleGVjKTsKKyAgICBpbnQgZGVsYXkgPSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMp
OwogICAgIHJldHVybiBqc051bWJlcihleGVjLCBpbXBsKCktPnNldFRpbWVvdXQoYWN0aW9uLnJl
bGVhc2UoKSwgZGVsYXkpKTsKIH0KIAotSlNWYWx1ZSBKU1dvcmtlckNvbnRleHQ6OnNldEludGVy
dmFsKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNXb3Jr
ZXJDb250ZXh0OjpzZXRJbnRlcnZhbChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgT3duUHRyPFNj
aGVkdWxlZEFjdGlvbj4gYWN0aW9uID0gU2NoZWR1bGVkQWN0aW9uOjpjcmVhdGUoZXhlYywgYXJn
cywgY3VycmVudFdvcmxkKGV4ZWMpKTsKKyAgICBPd25QdHI8U2NoZWR1bGVkQWN0aW9uPiBhY3Rp
b24gPSBTY2hlZHVsZWRBY3Rpb246OmNyZWF0ZShleGVjLCBjdXJyZW50V29ybGQoZXhlYykpOwog
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7Ci0gICAgaW50IGRlbGF5ID0gYXJncy5hdCgxKS50b0ludDMyKGV4ZWMpOworICAgIGludCBk
ZWxheSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7CiAgICAgcmV0dXJuIGpzTnVt
YmVyKGV4ZWMsIGltcGwoKS0+c2V0SW50ZXJ2YWwoYWN0aW9uLnJlbGVhc2UoKSwgZGVsYXkpKTsK
IH0KIApAQCAtMTUwLDM4ICsxNTAsMzggQEAgSlNWYWx1ZSBKU1dvcmtlckNvbnRleHQ6Om1lc3Nh
Z2VDaGFubmVsKAogI2VuZGlmCiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCi1KU1ZhbHVlIEpTV29y
a2VyQ29udGV4dDo6b3BlbkRhdGFiYXNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYg
YXJncykgCitKU1ZhbHVlIEpTV29ya2VyQ29udGV4dDo6b3BlbkRhdGFiYXNlKEV4ZWNTdGF0ZSog
ZXhlYykgCiB7IAotICAgIGlmIChhcmdzLnNpemUoKSA8IDQpIHsKKyAgICBpZiAoZXhlYy0+YXJn
dW1lbnRDb3VudCgpIDwgNCkgewogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgU1lOVEFY
X0VSUik7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAotICAgIFN0cmlu
ZyBuYW1lID0gdXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpOworICAg
IFN0cmluZyBuYW1lID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5n
KGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogCi0gICAgU3RyaW5nIHZlcnNpb24gPSB1c3RyaW5nVG9TdHJpbmcoYXJn
cy5hdCgxKS50b1N0cmluZyhleGVjKSk7CisgICAgU3RyaW5nIHZlcnNpb24gPSB1c3RyaW5nVG9T
dHJpbmcoZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYykpOwogICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBTdHJp
bmcgZGlzcGxheU5hbWUgPSB1c3RyaW5nVG9TdHJpbmcoYXJncy5hdCgyKS50b1N0cmluZyhleGVj
KSk7CisgICAgU3RyaW5nIGRpc3BsYXlOYW1lID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3Vt
ZW50KDIpLnRvU3RyaW5nKGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgLy8gYXJncy5hdCgzKSA9IGVzdGlt
YXRlZCBzaXplCi0gICAgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplID0gYXJncy5hdCgzKS50
b1VJbnQzMihleGVjKTsKKyAgICAvLyBleGVjLT5hcmd1bWVudCgzKSA9IGVzdGltYXRlZCBzaXpl
CisgICAgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplID0gZXhlYy0+YXJndW1lbnQoMykudG9V
SW50MzIoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIAogICAgIFJlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBjcmVhdGlv
bkNhbGxiYWNrOwotICAgIGlmIChhcmdzLnNpemUoKSA+PSA1KSB7Ci0gICAgICAgIGlmICghYXJn
cy5hdCg0KS5pc09iamVjdCgpKSB7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSA1
KSB7CisgICAgICAgIGlmICghZXhlYy0+YXJndW1lbnQoNCkuaXNPYmplY3QoKSkgewogICAgICAg
ICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKICAgICAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICB9CiAKLSAgICAgICAgY3JlYXRpb25D
YWxsYmFjayA9IEpTRGF0YWJhc2VDYWxsYmFjazo6Y3JlYXRlKGFzT2JqZWN0KGFyZ3MuYXQoNCkp
LCBnbG9iYWxPYmplY3QoKSk7CisgICAgICAgIGNyZWF0aW9uQ2FsbGJhY2sgPSBKU0RhdGFiYXNl
Q2FsbGJhY2s6OmNyZWF0ZShhc09iamVjdChleGVjLT5hcmd1bWVudCg0KSksIGdsb2JhbE9iamVj
dCgpKTsKICAgICB9CiAgCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7IApAQCAtMTkwLDM4ICsx
OTAsMzggQEAgSlNWYWx1ZSBKU1dvcmtlckNvbnRleHQ6Om9wZW5EYXRhYmFzZShFeAogICAgIHJl
dHVybiByZXN1bHQ7IAogfSAKICAKLUpTVmFsdWUgSlNXb3JrZXJDb250ZXh0OjpvcGVuRGF0YWJh
c2VTeW5jKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNX
b3JrZXJDb250ZXh0OjpvcGVuRGF0YWJhc2VTeW5jKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBp
ZiAoYXJncy5zaXplKCkgPCA0KSB7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDQp
IHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFNZTlRBWF9FUlIpOwogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBTdHJpbmcgbmFtZSA9IHVzdHJpbmdU
b1N0cmluZyhhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBTdHJpbmcgbmFtZSA9IHVz
dHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSk7CiAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAot
ICAgIFN0cmluZyB2ZXJzaW9uID0gdXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQoMSkudG9TdHJpbmco
ZXhlYykpOworICAgIFN0cmluZyB2ZXJzaW9uID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3Vt
ZW50KDEpLnRvU3RyaW5nKGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgU3RyaW5nIGRpc3BsYXlOYW1lID0g
dXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQoMikudG9TdHJpbmcoZXhlYykpOworICAgIFN0cmluZyBk
aXNwbGF5TmFtZSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgyKS50b1N0cmluZyhl
eGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIAotICAgIC8vIGFyZ3MuYXQoMykgPSBlc3RpbWF0ZWQgc2l6ZQotICAgIHVu
c2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSA9IGFyZ3MuYXQoMykudG9VSW50MzIoZXhlYyk7Cisg
ICAgLy8gZXhlYy0+YXJndW1lbnQoMykgPSBlc3RpbWF0ZWQgc2l6ZQorICAgIHVuc2lnbmVkIGxv
bmcgZXN0aW1hdGVkU2l6ZSA9IGV4ZWMtPmFyZ3VtZW50KDMpLnRvVUludDMyKGV4ZWMpOwogICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAKICAgICBSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gY3JlYXRpb25DYWxsYmFjazsKLSAgICBp
ZiAoYXJncy5zaXplKCkgPj0gNSkgewotICAgICAgICBpZiAoIWFyZ3MuYXQoNCkuaXNPYmplY3Qo
KSkgeworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gNSkgeworICAgICAgICBpZiAo
IWV4ZWMtPmFyZ3VtZW50KDQpLmlzT2JqZWN0KCkpIHsKICAgICAgICAgICAgIHNldERPTUV4Y2Vw
dGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7CiAgICAgICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKICAgICAgICAgfQogCi0gICAgICAgIGNyZWF0aW9uQ2FsbGJhY2sgPSBKU0RhdGFi
YXNlQ2FsbGJhY2s6OmNyZWF0ZShhc09iamVjdChhcmdzLmF0KDQpKSwgZ2xvYmFsT2JqZWN0KCkp
OworICAgICAgICBjcmVhdGlvbkNhbGxiYWNrID0gSlNEYXRhYmFzZUNhbGxiYWNrOjpjcmVhdGUo
YXNPYmplY3QoZXhlYy0+YXJndW1lbnQoNCkpLCBnbG9iYWxPYmplY3QoKSk7CiAgICAgfQogCiAg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29y
a2VyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2Vy
Q3VzdG9tLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29y
a2VyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsOSArMzcsOSBAQCB1c2luZyBuYW1l
c3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTQzo6SlNWYWx1ZSBKU1dvcmtl
cjo6cG9zdE1lc3NhZ2UoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6QXJnTGlzdCYg
YXJncykKK0pTQzo6SlNWYWx1ZSBKU1dvcmtlcjo6cG9zdE1lc3NhZ2UoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGhhbmRsZVBvc3RNZXNzYWdlKGV4ZWMsIGFyZ3MsIGltcGwo
KSk7CisgICAgcmV0dXJuIGhhbmRsZVBvc3RNZXNzYWdlKGV4ZWMsIGltcGwoKSk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRw
UmVxdWVzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hN
TEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miwy
MyArNjIsMjMgQEAgdm9pZCBKU1hNTEh0dHBSZXF1ZXN0OjptYXJrQ2hpbGRyZW4oTWFyawogfQog
CiAvLyBDdXN0b20gZnVuY3Rpb25zCi1KU1ZhbHVlIEpTWE1MSHR0cFJlcXVlc3Q6Om9wZW4oRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU1hNTEh0dHBSZXF1
ZXN0OjpvcGVuKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBpZiAoYXJncy5zaXplKCkgPCAyKQor
ICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAyKQogICAgICAgICByZXR1cm4gdGhyb3dF
cnJvcihleGVjLCBTeW50YXhFcnJvciwgIk5vdCBlbm91Z2ggYXJndW1lbnRzIik7CiAKLSAgICBj
b25zdCBLVVJMJiB1cmwgPSBpbXBsKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+Y29tcGxl
dGVVUkwodXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQoMSkudG9TdHJpbmcoZXhlYykpKTsKLSAgICBT
dHJpbmcgbWV0aG9kID0gdXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykp
OworICAgIGNvbnN0IEtVUkwmIHVybCA9IGltcGwoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LT5jb21wbGV0ZVVSTCh1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmco
ZXhlYykpKTsKKyAgICBTdHJpbmcgbWV0aG9kID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3Vt
ZW50KDApLnRvU3RyaW5nKGV4ZWMpKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAg
IGlmIChhcmdzLnNpemUoKSA+PSAzKSB7Ci0gICAgICAgIGJvb2wgYXN5bmMgPSBhcmdzLmF0KDIp
LnRvQm9vbGVhbihleGVjKTsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDMpIHsK
KyAgICAgICAgYm9vbCBhc3luYyA9IGV4ZWMtPmFyZ3VtZW50KDIpLnRvQm9vbGVhbihleGVjKTsK
IAotICAgICAgICBpZiAoYXJncy5zaXplKCkgPj0gNCAmJiAhYXJncy5hdCgzKS5pc1VuZGVmaW5l
ZCgpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgdXNlciA9IHZhbHVlVG9TdHJpbmdXaXRoTnVsbENo
ZWNrKGV4ZWMsIGFyZ3MuYXQoMykpOworICAgICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgp
ID49IDQgJiYgIWV4ZWMtPmFyZ3VtZW50KDMpLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgICAg
IFN0cmluZyB1c2VyID0gdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgZXhlYy0+YXJn
dW1lbnQoMykpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgPj0g
NSAmJiAhYXJncy5hdCg0KS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5n
IHBhc3N3b3JkID0gdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgYXJncy5hdCg0KSk7
CisgICAgICAgICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDUgJiYgIWV4ZWMtPmFy
Z3VtZW50KDQpLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgcGFzc3dv
cmQgPSB2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhleGVjLCBleGVjLT5hcmd1bWVudCg0KSk7
CiAgICAgICAgICAgICAgICAgaW1wbCgpLT5vcGVuKG1ldGhvZCwgdXJsLCBhc3luYywgdXNlciwg
cGFzc3dvcmQsIGVjKTsKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIGltcGwo
KS0+b3BlbihtZXRob2QsIHVybCwgYXN5bmMsIHVzZXIsIGVjKTsKQEAgLTkxLDEzICs5MSwxMyBA
QCBKU1ZhbHVlIEpTWE1MSHR0cFJlcXVlc3Q6Om9wZW4oRXhlY1N0YXRlCiAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNYTUxIdHRwUmVxdWVzdDo6c2VuZChFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTWE1MSHR0cFJlcXVlc3Q6
OnNlbmQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAg
IGlmIChhcmdzLmlzRW1wdHkoKSkKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKICAg
ICAgICAgaW1wbCgpLT5zZW5kKGVjKTsKICAgICBlbHNlIHsKLSAgICAgICAgSlNWYWx1ZSB2YWwg
PSBhcmdzLmF0KDApOworICAgICAgICBKU1ZhbHVlIHZhbCA9IGV4ZWMtPmFyZ3VtZW50KDApOwog
ICAgICAgICBpZiAodmFsLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgICAgICBpbXBsKCkt
PnNlbmQoZWMpOwogICAgICAgICBlbHNlIGlmICh2YWwuaW5oZXJpdHMoJkpTRG9jdW1lbnQ6OnNf
aW5mbykpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3NvckN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hTTFRQcm9jZXNzb3JDdXN0
b20uY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNYU0xUUHJv
Y2Vzc29yQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsOSArNDYsOSBAQCB1c2luZyBu
YW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUgSlNYU0xUUHJv
Y2Vzc29yOjppbXBvcnRTdHlsZXNoZWV0KEV4ZWNTdGF0ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CitKU1ZhbHVlIEpTWFNMVFByb2Nlc3Nvcjo6aW1wb3J0U3R5bGVzaGVldChFeGVjU3RhdGUqIGV4
ZWMpCiB7Ci0gICAgSlNWYWx1ZSBub2RlVmFsID0gYXJncy5hdCgwKTsKKyAgICBKU1ZhbHVlIG5v
ZGVWYWwgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAobm9kZVZhbC5pbmhlcml0cygmSlNO
b2RlOjpzX2luZm8pKSB7CiAgICAgICAgIEpTTm9kZSogbm9kZSA9IHN0YXRpY19jYXN0PEpTTm9k
ZSo+KGFzT2JqZWN0KG5vZGVWYWwpKTsKICAgICAgICAgaW1wbCgpLT5pbXBvcnRTdHlsZXNoZWV0
KG5vZGUtPmltcGwoKSk7CkBAIC01OCwxMCArNTgsMTAgQEAgSlNWYWx1ZSBKU1hTTFRQcm9jZXNz
b3I6OmltcG9ydFN0eWxlc2hlZQogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1Zh
bHVlIEpTWFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9GcmFnbWVudChFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIEpTWFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3Jt
VG9GcmFnbWVudChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNWYWx1ZSBub2RlVmFsID0gYXJn
cy5hdCgwKTsKLSAgICBKU1ZhbHVlIGRvY1ZhbCA9IGFyZ3MuYXQoMSk7CisgICAgSlNWYWx1ZSBu
b2RlVmFsID0gZXhlYy0+YXJndW1lbnQoMCk7CisgICAgSlNWYWx1ZSBkb2NWYWwgPSBleGVjLT5h
cmd1bWVudCgxKTsKICAgICBpZiAobm9kZVZhbC5pbmhlcml0cygmSlNOb2RlOjpzX2luZm8pICYm
IGRvY1ZhbC5pbmhlcml0cygmSlNEb2N1bWVudDo6c19pbmZvKSkgewogICAgICAgICBXZWJDb3Jl
OjpOb2RlKiBub2RlID0gc3RhdGljX2Nhc3Q8SlNOb2RlKj4oYXNPYmplY3Qobm9kZVZhbCkpLT5p
bXBsKCk7CiAgICAgICAgIERvY3VtZW50KiBkb2MgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KHN0
YXRpY19jYXN0PEpTRG9jdW1lbnQqPihhc09iamVjdChkb2NWYWwpKS0+aW1wbCgpKTsKQEAgLTcx
LDkgKzcxLDkgQEAgSlNWYWx1ZSBKU1hTTFRQcm9jZXNzb3I6OnRyYW5zZm9ybVRvRnJhZwogICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlIEpTWFNMVFByb2Nlc3Nvcjo6dHJh
bnNmb3JtVG9Eb2N1bWVudChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitK
U1ZhbHVlIEpTWFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9Eb2N1bWVudChFeGVjU3RhdGUqIGV4
ZWMpCiB7Ci0gICAgSlNWYWx1ZSBub2RlVmFsID0gYXJncy5hdCgwKTsKKyAgICBKU1ZhbHVlIG5v
ZGVWYWwgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAobm9kZVZhbC5pbmhlcml0cygmSlNO
b2RlOjpzX2luZm8pKSB7CiAgICAgICAgIEpTTm9kZSogbm9kZSA9IHN0YXRpY19jYXN0PEpTTm9k
ZSo+KGFzT2JqZWN0KG5vZGVWYWwpKTsKICAgICAgICAgUmVmUHRyPERvY3VtZW50PiByZXN1bHRE
b2N1bWVudCA9IGltcGwoKS0+dHJhbnNmb3JtVG9Eb2N1bWVudChub2RlLT5pbXBsKCkpOwpAQCAt
ODUsMzMgKzg1LDMzIEBAIEpTVmFsdWUgSlNYU0xUUHJvY2Vzc29yOjp0cmFuc2Zvcm1Ub0RvY3UK
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBKU1hTTFRQcm9jZXNzb3I6
OnNldFBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1Zh
bHVlIEpTWFNMVFByb2Nlc3Nvcjo6c2V0UGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAg
ICBpZiAoYXJncy5hdCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpIHx8IGFyZ3MuYXQoMikuaXNVbmRl
ZmluZWRPck51bGwoKSkKKyAgICBpZiAoZXhlYy0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWRPck51
bGwoKSB8fCBleGVjLT5hcmd1bWVudCgyKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsgLy8gVGhyb3cgZXhjZXB0aW9uPwotICAgIFN0cmluZyBuYW1l
c3BhY2VVUkkgPSB1c3RyaW5nVG9TdHJpbmcoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSk7Ci0g
ICAgU3RyaW5nIGxvY2FsTmFtZSA9IHVzdHJpbmdUb1N0cmluZyhhcmdzLmF0KDEpLnRvU3RyaW5n
KGV4ZWMpKTsKLSAgICBTdHJpbmcgdmFsdWUgPSB1c3RyaW5nVG9TdHJpbmcoYXJncy5hdCgyKS50
b1N0cmluZyhleGVjKSk7CisgICAgU3RyaW5nIG5hbWVzcGFjZVVSSSA9IHVzdHJpbmdUb1N0cmlu
ZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSk7CisgICAgU3RyaW5nIGxvY2FsTmFt
ZSA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKSk7Cisg
ICAgU3RyaW5nIHZhbHVlID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDIpLnRvU3Ry
aW5nKGV4ZWMpKTsKICAgICBpbXBsKCktPnNldFBhcmFtZXRlcihuYW1lc3BhY2VVUkksIGxvY2Fs
TmFtZSwgdmFsdWUpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlIEpT
WFNMVFByb2Nlc3Nvcjo6Z2V0UGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlz
dCYgYXJncykKK0pTVmFsdWUgSlNYU0xUUHJvY2Vzc29yOjpnZXRQYXJhbWV0ZXIoRXhlY1N0YXRl
KiBleGVjKQogewotICAgIGlmIChhcmdzLmF0KDEpLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAg
aWYgKGV4ZWMtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwotICAgIFN0cmluZyBuYW1lc3BhY2VVUkkgPSB1c3RyaW5nVG9TdHJp
bmcoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSk7Ci0gICAgU3RyaW5nIGxvY2FsTmFtZSA9IHVz
dHJpbmdUb1N0cmluZyhhcmdzLmF0KDEpLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBTdHJpbmcgbmFt
ZXNwYWNlVVJJID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4
ZWMpKTsKKyAgICBTdHJpbmcgbG9jYWxOYW1lID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3Vt
ZW50KDEpLnRvU3RyaW5nKGV4ZWMpKTsKICAgICBTdHJpbmcgdmFsdWUgPSBpbXBsKCktPmdldFBh
cmFtZXRlcihuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSk7CiAgICAgcmV0dXJuIGpzU3RyaW5nT3JV
bmRlZmluZWQoZXhlYywgdmFsdWUpOwogfQogCi1KU1ZhbHVlIEpTWFNMVFByb2Nlc3Nvcjo6cmVt
b3ZlUGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFs
dWUgSlNYU0xUUHJvY2Vzc29yOjpyZW1vdmVQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQogewot
ICAgIGlmIChhcmdzLmF0KDEpLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgaWYgKGV4ZWMtPmFy
Z3VtZW50KDEpLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwotICAgIFN0cmluZyBuYW1lc3BhY2VVUkkgPSB1c3RyaW5nVG9TdHJpbmcoYXJncy5hdCgw
KS50b1N0cmluZyhleGVjKSk7Ci0gICAgU3RyaW5nIGxvY2FsTmFtZSA9IHVzdHJpbmdUb1N0cmlu
ZyhhcmdzLmF0KDEpLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBTdHJpbmcgbmFtZXNwYWNlVVJJID0g
dXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBT
dHJpbmcgbG9jYWxOYW1lID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3Ry
aW5nKGV4ZWMpKTsKICAgICBpbXBsKCktPnJlbW92ZVBhcmFtZXRlcihuYW1lc3BhY2VVUkksIGxv
Y2FsTmFtZSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsOSAr
NDcsOSBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBh
c3NPd25QdHI8U2NoZWR1bGVkQWN0aW9uPiBTY2hlZHVsZWRBY3Rpb246OmNyZWF0ZShFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIERPTVdyYXBwZXJXb3JsZCogaXNvbGF0ZWRX
b3JsZCkKK1Bhc3NPd25QdHI8U2NoZWR1bGVkQWN0aW9uPiBTY2hlZHVsZWRBY3Rpb246OmNyZWF0
ZShFeGVjU3RhdGUqIGV4ZWMsIERPTVdyYXBwZXJXb3JsZCogaXNvbGF0ZWRXb3JsZCkKIHsKLSAg
ICBKU1ZhbHVlIHYgPSBhcmdzLmF0KDApOworICAgIEpTVmFsdWUgdiA9IGV4ZWMtPmFyZ3VtZW50
KDApOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIGlmICh2LmdldENhbGxEYXRhKGNhbGxE
YXRhKSA9PSBDYWxsVHlwZU5vbmUpIHsKICAgICAgICAgVVN0cmluZyBzdHJpbmcgPSB2LnRvU3Ry
aW5nKGV4ZWMpOwpAQCAtNTcsMTggKzU3LDE4IEBAIFBhc3NPd25QdHI8U2NoZWR1bGVkQWN0aW9u
PiBTY2hlZHVsZWRBY3QKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICByZXR1cm4gbmV3
IFNjaGVkdWxlZEFjdGlvbih1c3RyaW5nVG9TdHJpbmcoc3RyaW5nKSwgaXNvbGF0ZWRXb3JsZCk7
CiAgICAgfQotICAgIEFyZ0xpc3QgYXJnc1RhaWw7Ci0gICAgYXJncy5nZXRTbGljZSgyLCBhcmdz
VGFpbCk7Ci0gICAgcmV0dXJuIG5ldyBTY2hlZHVsZWRBY3Rpb24odiwgYXJnc1RhaWwsIGlzb2xh
dGVkV29ybGQpOworCisgICAgcmV0dXJuIG5ldyBTY2hlZHVsZWRBY3Rpb24oZXhlYywgdiwgaXNv
bGF0ZWRXb3JsZCk7CiB9CiAKLVNjaGVkdWxlZEFjdGlvbjo6U2NoZWR1bGVkQWN0aW9uKEpTVmFs
dWUgZnVuY3Rpb24sIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIERPTVdyYXBwZXJXb3JsZCogaXNvbGF0
ZWRXb3JsZCkKK1NjaGVkdWxlZEFjdGlvbjo6U2NoZWR1bGVkQWN0aW9uKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSBmdW5jdGlvbiwgRE9NV3JhcHBlcldvcmxkKiBpc29sYXRlZFdvcmxkKQogICAg
IDogbV9mdW5jdGlvbihmdW5jdGlvbikKICAgICAsIG1faXNvbGF0ZWRXb3JsZChpc29sYXRlZFdv
cmxkKQogewotICAgIEFyZ0xpc3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGFyZ3MuZW5kKCk7Ci0g
ICAgZm9yIChBcmdMaXN0Ojpjb25zdF9pdGVyYXRvciBpdCA9IGFyZ3MuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQotICAgICAgICBtX2FyZ3MuYXBwZW5kKCppdCk7CisgICAgLy8gc2V0VGltZW91
dChmdW5jdGlvbiwgaW50ZXJ2YWwsIGFyZzAsIGFyZzEuLi4pLgorICAgIC8vIFN0YXJ0IGF0IDIg
dG8gc2tpcCBmdW5jdGlvbiBhbmQgaW50ZXJ2YWwuCisgICAgZm9yIChzaXplX3QgaSA9IDI7IGkg
PCBleGVjLT5hcmd1bWVudENvdW50KCk7ICsraSkKKyAgICAgICAgbV9hcmdzLmFwcGVuZChleGVj
LT5hcmd1bWVudChpKSk7CiB9CiAKIHZvaWQgU2NoZWR1bGVkQWN0aW9uOjpleGVjdXRlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL1Nj
aGVkdWxlZEFjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvU2NoZWR1
bGVkQWN0aW9uLmgJKHJldmlzaW9uIDYwMzQxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hl
ZHVsZWRBY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTIgKzQzLDEyIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAqLwogICAgIGNsYXNzIFNjaGVkdWxlZEFjdGlvbiA6IHB1YmxpYyBO
b25jb3B5YWJsZSB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc093blB0cjxTY2hl
ZHVsZWRBY3Rpb24+IGNyZWF0ZShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6QXJnTGlzdCYs
IERPTVdyYXBwZXJXb3JsZCogaXNvbGF0ZWRXb3JsZCk7CisgICAgICAgIHN0YXRpYyBQYXNzT3du
UHRyPFNjaGVkdWxlZEFjdGlvbj4gY3JlYXRlKEpTQzo6RXhlY1N0YXRlKiwgRE9NV3JhcHBlcldv
cmxkKiBpc29sYXRlZFdvcmxkKTsKIAogICAgICAgICB2b2lkIGV4ZWN1dGUoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCopOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgU2NoZWR1bGVkQWN0aW9uKEpT
Qzo6SlNWYWx1ZSBmdW5jdGlvbiwgY29uc3QgSlNDOjpBcmdMaXN0JiwgRE9NV3JhcHBlcldvcmxk
KiBpc29sYXRlZFdvcmxkKTsKKyAgICAgICAgU2NoZWR1bGVkQWN0aW9uKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uLCBET01XcmFwcGVyV29ybGQqIGlzb2xhdGVkV29ybGQp
OwogICAgICAgICBTY2hlZHVsZWRBY3Rpb24oY29uc3QgU3RyaW5nJiBjb2RlLCBET01XcmFwcGVy
V29ybGQqIGlzb2xhdGVkV29ybGQpCiAgICAgICAgICAgICA6IG1fY29kZShjb2RlKQogICAgICAg
ICAgICAgLCBtX2lzb2xhdGVkV29ybGQoaXNvbGF0ZWRXb3JsZCkKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0Q2FsbEZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdENhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysgV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHRDYWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxNCAr
MzgsMTYgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1T
Y3JpcHRDYWxsRnJhbWU6OlNjcmlwdENhbGxGcmFtZShjb25zdCBVU3RyaW5nJiBmdW5jdGlvbk5h
bWUsIGNvbnN0IFVTdHJpbmcmIHVybFN0cmluZywgaW50IGxpbmVOdW1iZXIsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MsIHVuc2lnbmVkIHNraXBBcmd1bWVudENvdW50KQorU2NyaXB0Q2FsbEZyYW1lOjpT
Y3JpcHRDYWxsRnJhbWUoY29uc3QgVVN0cmluZyYgZnVuY3Rpb25OYW1lLCBjb25zdCBVU3RyaW5n
JiB1cmxTdHJpbmcsIGludCBsaW5lTnVtYmVyLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHNr
aXBBcmd1bWVudENvdW50KQogICAgIDogbV9mdW5jdGlvbk5hbWUoZnVuY3Rpb25OYW1lKQogICAg
ICwgbV9zb3VyY2VVUkwoUGFyc2VkVVJMU3RyaW5nLCB1c3RyaW5nVG9TdHJpbmcodXJsU3RyaW5n
KSkKICAgICAsIG1fbGluZU51bWJlcihsaW5lTnVtYmVyKQogewotICAgIHNpemVfdCBhcmd1bWVu
dENvdW50ID0gYXJncy5zaXplKCk7CisgICAgaWYgKCFleGVjKQorICAgICAgICByZXR1cm47Cisg
ICAgc2l6ZV90IGFyZ3VtZW50Q291bnQgPSBleGVjLT5hcmd1bWVudENvdW50KCk7CiAgICAgZm9y
IChzaXplX3QgaSA9IHNraXBBcmd1bWVudENvdW50OyBpIDwgYXJndW1lbnRDb3VudDsgKytpKQot
ICAgICAgICBtX2FyZ3VtZW50cy5hcHBlbmQoU2NyaXB0VmFsdWUoYXJncy5hdChpKSkpOworICAg
ICAgICBtX2FyZ3VtZW50cy5hcHBlbmQoU2NyaXB0VmFsdWUoZXhlYy0+YXJndW1lbnQoaSkpKTsK
IH0KIAogU2NyaXB0Q2FsbEZyYW1lOjp+U2NyaXB0Q2FsbEZyYW1lKCkKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0Q2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRDYWxsRnJhbWUuaAkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdENhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAvLyA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIxMTgwPgogICAgIGNsYXNzIFNjcmlwdENhbGxGcmFtZSAgewogICAg
IHB1YmxpYzoKLSAgICAgICAgU2NyaXB0Q2FsbEZyYW1lKGNvbnN0IEpTQzo6VVN0cmluZyYgZnVu
Y3Rpb25OYW1lLCBjb25zdCBKU0M6OlVTdHJpbmcmIHVybFN0cmluZywgaW50IGxpbmVOdW1iZXIs
IGNvbnN0IEpTQzo6QXJnTGlzdCYsIHVuc2lnbmVkIHNraXBBcmd1bWVudENvdW50KTsKKyAgICAg
ICAgU2NyaXB0Q2FsbEZyYW1lKGNvbnN0IEpTQzo6VVN0cmluZyYgZnVuY3Rpb25OYW1lLCBjb25z
dCBKU0M6OlVTdHJpbmcmIHVybFN0cmluZywgaW50IGxpbmVOdW1iZXIsIEpTQzo6RXhlY1N0YXRl
KiwgdW5zaWduZWQgc2tpcEFyZ3VtZW50Q291bnQpOwogICAgICAgICB+U2NyaXB0Q2FsbEZyYW1l
KCk7CiAKICAgICAgICAgY29uc3QgU2NyaXB0U3RyaW5nJiBmdW5jdGlvbk5hbWUoKSBjb25zdCB7
IHJldHVybiBtX2Z1bmN0aW9uTmFtZTsgfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRDYWxsU3RhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
Q2FsbFN0YWNrLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL1Nj
cmlwdENhbGxTdGFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgdXNpbmcg
bmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TY3JpcHRDYWxsU3RhY2s6
OlNjcmlwdENhbGxTdGFjayhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIHVu
c2lnbmVkIHNraXBBcmd1bWVudENvdW50KQorU2NyaXB0Q2FsbFN0YWNrOjpTY3JpcHRDYWxsU3Rh
Y2soRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBza2lwQXJndW1lbnRDb3VudCkKICAgICA6IG1f
aW5pdGlhbGl6ZWQoZmFsc2UpCiAgICAgLCBtX2V4ZWMoZXhlYykKICAgICAsIG1fY2FsbGVyKDAp
CkBAIC01OCwxMSArNTgsMTEgQEAgU2NyaXB0Q2FsbFN0YWNrOjpTY3JpcHRDYWxsU3RhY2soRXhl
Y1N0YQogCiAgICAgaWYgKGZ1bmN0aW9uKSB7CiAgICAgICAgIG1fY2FsbGVyID0gYXNGdW5jdGlv
bihmdW5jdGlvbik7Ci0gICAgICAgIG1fZnJhbWVzLmFwcGVuZChTY3JpcHRDYWxsRnJhbWUobV9j
YWxsZXItPm5hbWUobV9leGVjKSwgdXJsU3RyaW5nLCBsaW5lTnVtYmVyLCBhcmdzLCBza2lwQXJn
dW1lbnRDb3VudCkpOworICAgICAgICBtX2ZyYW1lcy5hcHBlbmQoU2NyaXB0Q2FsbEZyYW1lKG1f
Y2FsbGVyLT5uYW1lKG1fZXhlYyksIHVybFN0cmluZywgbGluZU51bWJlciwgbV9leGVjLCBza2lw
QXJndW1lbnRDb3VudCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIENhbGxlciBpcyB1bmtu
b3duLCBidXQgd2Ugc2hvdWxkIHN0aWxsIGFkZCB0aGUgZnJhbWUsIGJlY2F1c2UKICAgICAgICAg
Ly8gc29tZXRoaW5nIGNhbGxlZCB1cywgYW5kIGdhdmUgdXMgYXJndW1lbnRzLgotICAgICAgICBt
X2ZyYW1lcy5hcHBlbmQoU2NyaXB0Q2FsbEZyYW1lKFVTdHJpbmcoKSwgdXJsU3RyaW5nLCBsaW5l
TnVtYmVyLCBhcmdzLCBza2lwQXJndW1lbnRDb3VudCkpOworICAgICAgICBtX2ZyYW1lcy5hcHBl
bmQoU2NyaXB0Q2FsbEZyYW1lKFVTdHJpbmcoKSwgdXJsU3RyaW5nLCBsaW5lTnVtYmVyLCBtX2V4
ZWMsIHNraXBBcmd1bWVudENvdW50KSk7CiAgICAgfQogfQogCkBAIC05NCw4ICs5NCw3IEBAIHZv
aWQgU2NyaXB0Q2FsbFN0YWNrOjppbml0aWFsaXplKCkKICAgICBKU1ZhbHVlIGZ1bmMgPSBtX2V4
ZWMtPmludGVycHJldGVyKCktPnJldHJpZXZlQ2FsbGVyKG1fZXhlYywgbV9jYWxsZXIpOwogICAg
IHdoaWxlICghZnVuYy5pc051bGwoKSkgewogICAgICAgICBKU0Z1bmN0aW9uKiBqc0Z1bmN0aW9u
ID0gYXNGdW5jdGlvbihmdW5jKTsKLSAgICAgICAgQXJnTGlzdCBlbXB0eUFyZ0xpc3Q7Ci0gICAg
ICAgIG1fZnJhbWVzLmFwcGVuZChTY3JpcHRDYWxsRnJhbWUoanNGdW5jdGlvbi0+bmFtZShtX2V4
ZWMpLCBVU3RyaW5nKCksIDAsIGVtcHR5QXJnTGlzdCwgMCkpOworICAgICAgICBtX2ZyYW1lcy5h
cHBlbmQoU2NyaXB0Q2FsbEZyYW1lKGpzRnVuY3Rpb24tPm5hbWUobV9leGVjKSwgVVN0cmluZygp
LCAwLCAwLCAwKSk7CiAgICAgICAgIGZ1bmMgPSBtX2V4ZWMtPmludGVycHJldGVyKCktPnJldHJp
ZXZlQ2FsbGVyKG1fZXhlYywganNGdW5jdGlvbik7CiAgICAgfQogICAgIG1faW5pdGlhbGl6ZWQg
PSB0cnVlOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWxsU3RhY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhbGxTdGFjay5oCShyZXZpc2lv
biA2MDM0MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FsbFN0YWNrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xh
c3MgU2NyaXB0Q2FsbFN0YWNrIDogcHVibGljIE5vbmNvcHlhYmxlIHsKICAgICBwdWJsaWM6Ci0g
ICAgICAgIFNjcmlwdENhbGxTdGFjayhKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6QXJnTGlz
dCYsIHVuc2lnbmVkIHNraXBBcmd1bWVudENvdW50ID0gMCk7CisgICAgICAgIFNjcmlwdENhbGxT
dGFjayhKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHNraXBBcmd1bWVudENvdW50ID0gMCk7CiAg
ICAgICAgIH5TY3JpcHRDYWxsU3RhY2soKTsKIAogICAgICAgICBTY3JpcHRTdGF0ZSogc3RhdGUo
KSBjb25zdCB7IHJldHVybiBtX2V4ZWM7IH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xNzcsMTAg
KzE3NywxMCBAQCBFTkQKICAgICB9CiAKICAgICBwdXNoKEBHZW5lcmF0ZUV2ZW50TGlzdGVuZXJJ
bXBsLCA8PEVORCk7Ci0gICAgSlNWYWx1ZSBsaXN0ZW5lciA9IGFyZ3MuYXQoMSk7CisgICAgSlNW
YWx1ZSBsaXN0ZW5lciA9IGV4ZWMtPmFyZ3VtZW50KDEpOwogICAgIGlmICghbGlzdGVuZXIuaXNP
YmplY3QoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgaW1wLT4ke2Z1bmN0
aW9uTmFtZX1FdmVudExpc3RlbmVyKHVzdHJpbmdUb0F0b21pY1N0cmluZyhhcmdzLmF0KDApLnRv
U3RyaW5nKGV4ZWMpKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIp
LCAkd3JhcHBlck9iamVjdCwgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSkkcGFzc1JlZlB0ckhh
bmRsaW5nLCBhcmdzLmF0KDIpLnRvQm9vbGVhbihleGVjKSk7CisgICAgaW1wLT4ke2Z1bmN0aW9u
TmFtZX1FdmVudExpc3RlbmVyKHVzdHJpbmdUb0F0b21pY1N0cmluZyhleGVjLT5hcmd1bWVudCgw
KS50b1N0cmluZyhleGVjKSksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3Rl
bmVyKSwgJHdyYXBwZXJPYmplY3QsIGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykpJHBhc3NSZWZQ
dHJIYW5kbGluZywgZXhlYy0+YXJndW1lbnQoMikudG9Cb29sZWFuKGV4ZWMpKTsKICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIEVORAogICAgIHJldHVybiBAR2VuZXJhdGVFdmVudExpc3RlbmVy
SW1wbDsKQEAgLTg0Niw3ICs4NDYsNyBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgZm9y
ZWFjaCBteSAkZnVuY3Rpb24gKEB7JGRhdGFOb2RlLT5mdW5jdGlvbnN9KSB7CiAgICAgICAgICAg
ICBpZiAoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b20i
fSB8fCAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ0N1c3Rv
bSJ9KSB7CiAgICAgICAgICAgICAgICAgbXkgJGZ1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lID0g
JGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbXBsZW1lbnRhdGlv
bkZ1bmN0aW9uIn0gfHwgJGNvZGVHZW5lcmF0b3ItPldLX2xjZmlyc3QoJGZ1bmN0aW9uLT5zaWdu
YXR1cmUtPm5hbWUpOwotICAgICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAg
SlNDOjpKU1ZhbHVlICIgLiAkZnVuY3Rpb25JbXBsZW1lbnRhdGlvbk5hbWUgLiAiKEpTQzo6RXhl
Y1N0YXRlKiwgY29uc3QgSlNDOjpBcmdMaXN0Jik7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNo
KEBoZWFkZXJDb250ZW50LCAiICAgIEpTQzo6SlNWYWx1ZSAiIC4gJGZ1bmN0aW9uSW1wbGVtZW50
YXRpb25OYW1lIC4gIihKU0M6OkV4ZWNTdGF0ZSopO1xuIik7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9CkBAIC05ODksNyArOTg5LDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAg
ICAgIGZvcmVhY2ggbXkgJGZ1bmN0aW9uIChAeyRkYXRhTm9kZS0+ZnVuY3Rpb25zfSkgewogICAg
ICAgICAgICAgbmV4dCBpZiAkZnVuY3Rpb24tPntvdmVybG9hZEluZGV4fSAmJiAkZnVuY3Rpb24t
PntvdmVybG9hZEluZGV4fSA+IDE7CiAgICAgICAgICAgICBteSAkZnVuY3Rpb25OYW1lID0gJGNv
ZGVHZW5lcmF0b3ItPldLX2xjZmlyc3QoJGNsYXNzTmFtZSkgLiAiUHJvdG90eXBlRnVuY3Rpb24i
IC4gJGNvZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWUp
OwotICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIkpTQzo6SlNWYWx1ZSBKU0NfSE9T
VF9DQUxMICR7ZnVuY3Rpb25OYW1lfShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBK
U0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6QXJnTGlzdCYpO1xuIik7CisgICAgICAgICAgICBwdXNo
KEBoZWFkZXJDb250ZW50LCAiSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtmdW5jdGlvbk5h
bWV9KEpTQzo6RXhlY1N0YXRlKik7XG4iKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTEwMywx
MSArMTEwMywxMSBAQCBzdWIgR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2tFeHByZXNzaW9uCiAgICAg
bXkgJGZ1bmN0aW9uID0gc2hpZnQ7CiAKICAgICBteSBAYW5kRXhwcmVzc2lvbiA9ICgpOwotICAg
IHB1c2goQGFuZEV4cHJlc3Npb24sICJhcmdzLnNpemUoKSA9PSAkbnVtUGFyYW1ldGVycyIpOwor
ICAgIHB1c2goQGFuZEV4cHJlc3Npb24sICJleGVjLT5hcmd1bWVudENvdW50KCkgPT0gJG51bVBh
cmFtZXRlcnMiKTsKICAgICBteSAkcGFyYW1ldGVySW5kZXggPSAwOwogICAgIGZvcmVhY2ggJHBh
cmFtZXRlciAoQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9KSB7CiAgICAgICAgIGxhc3QgaWYgJHBh
cmFtZXRlckluZGV4ID49ICRudW1QYXJhbWV0ZXJzOwotICAgICAgICBteSAkdmFsdWUgPSAiYXJn
cy5hdCgkcGFyYW1ldGVySW5kZXgpIjsKKyAgICAgICAgbXkgJHZhbHVlID0gImV4ZWMtPmFyZ3Vt
ZW50KCRwYXJhbWV0ZXJJbmRleCkiOwogICAgICAgICBteSAkdHlwZSA9ICRjb2RlR2VuZXJhdG9y
LT5TdHJpcE1vZHVsZSgkcGFyYW1ldGVyLT50eXBlKTsKIAogICAgICAgICAjIE9ubHkgRE9NU3Ry
aW5nIG9yIHdyYXBwZXIgdHlwZXMgYXJlIGNoZWNrZWQuCkBAIC0xMTU0LDE0ICsxMTU0LDE0IEBA
IHN1YiBHZW5lcmF0ZU92ZXJsb2FkZWRQcm90b3R5cGVGdW5jdGlvbgogCiAgICAgbXkgJGZ1bmN0
aW9uTmFtZSA9ICJqcyR7aW1wbENsYXNzTmFtZX1Qcm90b3R5cGVGdW5jdGlvbiIgLiAkY29kZUdl
bmVyYXRvci0+V0tfdWNmaXJzdCgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSk7CiAKLSAgICBw
dXNoKEBpbXBsQ29udGVudCwgIkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAke2Z1bmN0aW9uTmFtZX0o
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdM
aXN0JiBhcmdzKVxuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgJHtmdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSogZXhlYylcbiIpOwogICAgIHB1c2goQGlt
cGxDb250ZW50LCA8PEVORCk7CiB7CiBFTkQKICAgICBmb3JlYWNoIG15ICRvdmVybG9hZCAoQHsk
ZnVuY3Rpb24tPntvdmVybG9hZHN9fSkgewogICAgICAgICBteSAkcGFyYW1ldGVyc0NoZWNrID0g
R2VuZXJhdGVGdW5jdGlvblBhcmFtZXRlcnNDaGVjaygkb3ZlcmxvYWQpOwogICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBpZiAoJHBhcmFtZXRlcnNDaGVjaylcbiIpOwotICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuICR7ZnVuY3Rpb25OYW1lfSRvdmVybG9h
ZC0+e292ZXJsb2FkSW5kZXh9KGV4ZWMsIHRoaXNWYWx1ZSwgYXJncyk7XG4iKTsKKyAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiAke2Z1bmN0aW9uTmFtZX0kb3Zlcmxv
YWQtPntvdmVybG9hZEluZGV4fShleGVjKTtcbiIpOwogICAgIH0KICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgPDxFTkQpOwogICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CkBA
IC0xNzkwLDIxICsxNzkwLDIxIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIG15ICRmdW5jdGlvbkltcGxlbWVudGF0aW9uTmFtZSA9ICRmdW5j
dGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW1wbGVtZW50YXRpb25GdW5j
dGlvbiJ9IHx8ICRjb2RlR2VuZXJhdG9yLT5XS19sY2ZpcnN0KCRmdW5jdGlvbi0+c2lnbmF0dXJl
LT5uYW1lKTsKIAotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgJHtmdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncylcbiIpOworICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICJKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtmdW5jdGlvbk5hbWV9KEV4
ZWNTdGF0ZSogZXhlYylcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4i
KTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFVOVVNFRF9QQVJBTShhcmdz
KTtcbiIpOwogCiAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyI8cnVudGltZS9FcnJvci5oPiJ9
ID0gMTsKIAogICAgICAgICAgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciKSB7
Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJGNsYXNzTmFtZSogY2Fz
dGVkVGhpcyA9IHRvSlNET01XaW5kb3codGhpc1ZhbHVlLnRvVGhpc09iamVjdChleGVjKSk7XG4i
KTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAkY2xhc3NOYW1lKiBj
YXN0ZWRUaGlzID0gdG9KU0RPTVdpbmRvdyhleGVjLT5ob3N0VGhpc1ZhbHVlKCkudG9UaGlzT2Jq
ZWN0KGV4ZWMpKTtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IGlmICghY2FzdGVkVGhpcylcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpO1xuIik7CiAgICAg
ICAgICAgICB9IGVsc2lmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJc1dvcmtl
ckNvbnRleHQifSkgewotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRj
bGFzc05hbWUqIGNhc3RlZFRoaXMgPSB0byR7Y2xhc3NOYW1lfSh0aGlzVmFsdWUudG9UaGlzT2Jq
ZWN0KGV4ZWMpKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
ICRjbGFzc05hbWUqIGNhc3RlZFRoaXMgPSB0byR7Y2xhc3NOYW1lfShleGVjLT5ob3N0VGhpc1Zh
bHVlKCkudG9UaGlzT2JqZWN0KGV4ZWMpKTtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIGlmICghY2FzdGVkVGhpcylcbiIpOwogICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJy
b3IpO1xuIik7CiAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgp
O1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCF0aGlz
VmFsdWUuaW5oZXJpdHMoJiR7Y2xhc3NOYW1lfTo6c19pbmZvKSlcbiIpOwogICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBU
eXBlRXJyb3IpO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
JGNsYXNzTmFtZSogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PCRjbGFzc05hbWUqPihhc09iamVj
dCh0aGlzVmFsdWUpKTtcbiIpOwpAQCAtMTgzMiwxMiArMTgzMiwxMiBAQCBzdWIgR2VuZXJhdGVJ
bXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoJGZ1bmN0aW9u
LT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b20ifSB8fCAkZnVuY3Rpb24t
PnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ0N1c3RvbSJ9KSB7Ci0gICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIGNhc3RlZFRoaXMtPiIgLiAk
ZnVuY3Rpb25JbXBsZW1lbnRhdGlvbk5hbWUgLiAiKGV4ZWMsIGFyZ3MpO1xuIik7CisgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIGNhc3RlZFRoaXMtPiIgLiAk
ZnVuY3Rpb25JbXBsZW1lbnRhdGlvbk5hbWUgLiAiKGV4ZWMpO1xuIik7CiAgICAgICAgICAgICB9
IGVsc2lmICgkc3ZnUE9ETGlzdFR5cGUpIHsKICAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVz
eyJKUyR7c3ZnUE9ETGlzdFR5cGV9LmgifSA9IDE7CiAgICAgICAgICAgICAgICAgJGltcGxJbmNs
dWRlc3siSlNTVkdQT0RMaXN0Q3VzdG9tLmgifSA9IDE7CiAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTU1ZHUE9ETGlzdEN1c3RvbTo6JGZ1bmN0aW9uSW1w
bGVtZW50YXRpb25OYW1lPCRjbGFzc05hbWUsICIgLiBHZXROYXRpdmVUeXBlKCRzdmdQT0RMaXN0
VHlwZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIj4oY2FzdGVkVGhpcywg
ZXhlYywgYXJncywgdG8iIC4gJHN2Z1BPRExpc3RUeXBlIC4gIik7XG4iKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC4gIj4oY2FzdGVkVGhpcywgZXhlYywgdG8iIC4gJHN2Z1BP
RExpc3RUeXBlIC4gIik7XG4iKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJGltcGxUeXBlKiBpbXAgPSBzdGF0aWNfY2FzdDwk
aW1wbFR5cGUqPihjYXN0ZWRUaGlzLT5pbXBsKCkpO1xuIik7CiAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgJHBvZFR5cGUgcG9kSW1wKCppbXApO1xuIikgaWYgJHBvZFR5
cGU7CkBAIC0xODQ2LDcgKzE4NDYsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogCiAg
ICAgICAgICAgICAgICAgbXkgJHJlcXVpcmVzQWxsQXJndW1lbnRzID0gJGZ1bmN0aW9uLT5zaWdu
YXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSZXF1aXJlc0FsbEFyZ3VtZW50cyJ9OwogICAg
ICAgICAgICAgICAgIGlmICgkcmVxdWlyZXNBbGxBcmd1bWVudHMpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChhcmdzLnNpemUoKSA8ICRudW1Q
YXJhbWV0ZXJzKVxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgJG51bVBhcmFtZXRlcnMpXG4iKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcmVxdWlyZXNBbGxBcmd1bWVudHMgZXEgIlJh
aXNlIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvciwgXCJOb3QgZW5vdWdo
IGFyZ3VtZW50c1wiKTtcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKQEAg
LTE4NzUsNyArMTg3NSw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAg
ICAgICAgICAgIG15ICRoYXNPcHRpb25hbEFyZ3VtZW50cyA9IDA7CiAKICAgICAgICAgICAgICAg
ICAgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3Vz
dG9tQXJndW1lbnRIYW5kbGluZyJ9KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBTY3JpcHRDYWxsU3RhY2sgY2FsbFN0YWNrKGV4ZWMsIGFyZ3MsICRu
dW1QYXJhbWV0ZXJzKTtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgU2NyaXB0Q2FsbFN0YWNrIGNhbGxTdGFjayhleGVjLCAkbnVtUGFyYW1ldGVy
cyk7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IlNjcmlwdENh
bGxTdGFjay5oIn0gPSAxOwogICAgICAgICAgICAgICAgICAgICB9CiAKQEAgLTE4OTksNyArMTg5
OSw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik9wdGlvbmFsIn0pIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAjIEdlbmVyYXRlIGVhcmx5IGNhbGwgaWYgdGhlcmUg
YXJlIGVub3VnaCBwYXJhbWV0ZXJzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
JGhhc09wdGlvbmFsQXJndW1lbnRzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiXG4gICAgaW50IGFyZ3NDb3VudCA9IGFyZ3Muc2l6ZSgpO1xu
Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
XG4gICAgaW50IGFyZ3NDb3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTtcbiIpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAkaGFzT3B0aW9uYWxBcmd1bWVudHMgPSAxOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoYXJnc0NvdW50IDwgIiAuICgkcGFyYW1JbmRleCAr
IDEpIC4gIikge1xuIik7CkBAIC0xOTExLDE1ICsxOTExLDE1IEBAIHN1YiBHZW5lcmF0ZUltcGxl
bWVudGF0aW9uCiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCRwYXJhbWV0ZXItPnR5cGUgZXEgIlhQYXRoTlNSZXNvbHZlciIpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBSZWZQdHI8WFBhdGhOU1Jl
c29sdmVyPiBjdXN0b21SZXNvbHZlcjtcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIFhQYXRoTlNSZXNvbHZlciogcmVzb2x2ZXIgPSB0b1hQ
YXRoTlNSZXNvbHZlcihhcmdzLmF0KCRwYXJhbUluZGV4KSk7XG4iKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBYUGF0aE5TUmVzb2x2ZXIqIHJl
c29sdmVyID0gdG9YUGF0aE5TUmVzb2x2ZXIoZXhlYy0+YXJndW1lbnQoJHBhcmFtSW5kZXgpKTtc
biIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IGlmICghcmVzb2x2ZXIpIHtcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgICAgICBjdXN0b21SZXNvbHZlciA9IEpTQ3VzdG9tWFBhdGhOU1Jl
c29sdmVyOjpjcmVhdGUoZXhlYywgYXJncy5hdCgkcGFyYW1JbmRleCkpO1xuIik7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIGN1c3RvbVJl
c29sdmVyID0gSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI6OmNyZWF0ZShleGVjLCBleGVjLT5hcmd1
bWVudCgkcGFyYW1JbmRleCkpO1xuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSlcbiIpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmVzb2x2ZXIgPSBjdXN0b21SZXNvbHZlci5n
ZXQoKTtcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIH1cbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAiIC4gR2V0TmF0aXZl
VHlwZUZyb21TaWduYXR1cmUoJHBhcmFtZXRlcikgLiAiICRuYW1lID0gIiAuIEpTVmFsdWVUb05h
dGl2ZSgkcGFyYW1ldGVyLCAiYXJncy5hdCgkcGFyYW1JbmRleCkiKSAuICI7XG4iKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAiIC4gR2V0TmF0
aXZlVHlwZUZyb21TaWduYXR1cmUoJHBhcmFtZXRlcikgLiAiICRuYW1lID0gIiAuIEpTVmFsdWVU
b05hdGl2ZSgkcGFyYW1ldGVyLCAiZXhlYy0+YXJndW1lbnQoJHBhcmFtSW5kZXgpIikgLiAiO1xu
Iik7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIElmIGEgcGFyYW1ldGVyIGlzICJh
biBpbmRleCIgYW5kIGl0J3MgbmVnYXRpdmUgaXQgc2hvdWxkIHRocm93IGFuIElOREVYX1NJWkVf
RVJSIGV4Y2VwdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEJ1dCB0aGlzIG5l
ZWRzIHRvIGJlIGRvbmUgaW4gdGhlIGJpbmRpbmdzLCBiZWNhdXNlIHRoZSB0eXBlIGlzIHVuc2ln
bmVkIGFuZCB0aGUgZmFjdCB0aGF0IGl0CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX21l
dGhvZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvcnVudGltZV9tZXRob2QuY3Bw
CShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODcsMTUgKzg3LDE2IEBAIGJvb2wgUnVudGltZU1ldGhvZDo6Z2V0
T3duUHJvcGVydHlEZXNjcmkKICAgICByZXR1cm4gSW50ZXJuYWxGdW5jdGlvbjo6Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7CiB9CiAKLXN0
YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFJ1bnRpbWVNZXRob2QoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogZnVuY3Rpb24sIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQorc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsUnVudGltZU1ldGhvZChF
eGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgUnVudGltZU1ldGhvZCogbWV0aG9kID0gc3RhdGljX2Nh
c3Q8UnVudGltZU1ldGhvZCo+KGZ1bmN0aW9uKTsKKyAgICBSdW50aW1lTWV0aG9kKiBtZXRob2Qg
PSBzdGF0aWNfY2FzdDxSdW50aW1lTWV0aG9kKj4oZXhlYy0+Y2FsbGVlKCkpOwogCiAgICAgaWYg
KG1ldGhvZC0+bWV0aG9kcygpLT5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogCiAgICAgUmVmUHRyPEluc3RhbmNlPiBpbnN0YW5jZTsKIAorICAgIEpTVmFsdWUgdGhp
c1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICh0aGlzVmFsdWUuaW5oZXJp
dHMoJlJ1bnRpbWVPYmplY3Q6OnNfaW5mbykpIHsKICAgICAgICAgUnVudGltZU9iamVjdCogcnVu
dGltZU9iamVjdCA9IHN0YXRpY19jYXN0PFJ1bnRpbWVPYmplY3QqPihhc09iamVjdCh0aGlzVmFs
dWUpKTsKICAgICAgICAgaW5zdGFuY2UgPSBydW50aW1lT2JqZWN0LT5nZXRJbnRlcm5hbEluc3Rh
bmNlKCk7CkBAIC0xMTMsNyArMTE0LDcgQEAgc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
YWxsUnVudGltZQogICAgIEFTU0VSVChpbnN0YW5jZSk7CiAKICAgICBpbnN0YW5jZS0+YmVnaW4o
KTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGluc3RhbmNlLT5pbnZva2VNZXRob2QoZXhlYywgbWV0
aG9kLCBhcmdzKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGluc3RhbmNlLT5pbnZva2VNZXRob2Qo
ZXhlYywgbWV0aG9kKTsKICAgICBpbnN0YW5jZS0+ZW5kKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KSW5kZXg6IFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5jcHAJKHJldmlzaW9uIDYwMzQxKQorKysg
V2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMs
MTIgKzI1MywxMiBAQCBKU1ZhbHVlIFJ1bnRpbWVPYmplY3Q6OmRlZmF1bHRWYWx1ZShFeGVjCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxs
UnVudGltZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBmdW5jdGlvbiwgSlNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2Fs
bFJ1bnRpbWVPYmplY3QoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEFTU0VSVChmdW5jdGlvbi0+
aW5oZXJpdHMoJlJ1bnRpbWVPYmplY3Q6OnNfaW5mbykpOwotICAgIFJlZlB0cjxJbnN0YW5jZT4g
aW5zdGFuY2Uoc3RhdGljX2Nhc3Q8UnVudGltZU9iamVjdCo+KGZ1bmN0aW9uKS0+Z2V0SW50ZXJu
YWxJbnN0YW5jZSgpKTsKKyAgICBBU1NFUlQoZXhlYy0+Y2FsbGVlKCktPmluaGVyaXRzKCZSdW50
aW1lT2JqZWN0OjpzX2luZm8pKTsKKyAgICBSZWZQdHI8SW5zdGFuY2U+IGluc3RhbmNlKHN0YXRp
Y19jYXN0PFJ1bnRpbWVPYmplY3QqPihleGVjLT5jYWxsZWUoKSktPmdldEludGVybmFsSW5zdGFu
Y2UoKSk7CiAgICAgaW5zdGFuY2UtPmJlZ2luKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBpbnN0
YW5jZS0+aW52b2tlRGVmYXVsdE1ldGhvZChleGVjLCBhcmdzKTsKKyAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGluc3RhbmNlLT5pbnZva2VEZWZhdWx0TWV0aG9kKGV4ZWMpOwogICAgIGluc3RhbmNlLT5l
bmQoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogV2ViQ29yZS9icmlkZ2UvYy9jX2lu
c3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuY3Bw
CShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNvcmUvYnJpZGdlL2MvY19pbnN0YW5jZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEyOCw3ICsxMjgsNyBAQCBKU1ZhbHVlIENJbnN0YW5jZTo6Z2V0TWV0
aG9kKEV4ZWNTdGF0ZSogCiAgICAgcmV0dXJuIG5ldyAoZXhlYykgQ1J1bnRpbWVNZXRob2QoZXhl
YywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBwcm9wZXJ0eU5hbWUsIG1ldGhvZExpc3Qp
OwogfQogCi1KU1ZhbHVlIENJbnN0YW5jZTo6aW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywg
UnVudGltZU1ldGhvZCogcnVudGltZU1ldGhvZCwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFs
dWUgQ0luc3RhbmNlOjppbnZva2VNZXRob2QoRXhlY1N0YXRlKiBleGVjLCBSdW50aW1lTWV0aG9k
KiBydW50aW1lTWV0aG9kKQogewogICAgIGlmICghYXNPYmplY3QocnVudGltZU1ldGhvZCktPmlu
aGVyaXRzKCZDUnVudGltZU1ldGhvZDo6c19pbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJy
b3IoZXhlYywgVHlwZUVycm9yLCAiQXR0ZW1wdCB0byBpbnZva2Ugbm9uLXBsdWctaW4gbWV0aG9k
IG9uIHBsdWctaW4gb2JqZWN0LiIpOwpAQCAtMTQ1LDEyICsxNDUsMTIgQEAgSlNWYWx1ZSBDSW5z
dGFuY2U6Omludm9rZU1ldGhvZChFeGVjU3RhdAogICAgIGlmICghX29iamVjdC0+X2NsYXNzLT5o
YXNNZXRob2QoX29iamVjdCwgaWRlbnQpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
IAotICAgIHVuc2lnbmVkIGNvdW50ID0gYXJncy5zaXplKCk7CisgICAgdW5zaWduZWQgY291bnQg
PSBleGVjLT5hcmd1bWVudENvdW50KCk7CiAgICAgVmVjdG9yPE5QVmFyaWFudCwgOD4gY0FyZ3Mo
Y291bnQpOwogCiAgICAgdW5zaWduZWQgaTsKICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkr
KykKLSAgICAgICAgY29udmVydFZhbHVlVG9OUFZhcmlhbnQoZXhlYywgYXJncy5hdChpKSwgJmNB
cmdzW2ldKTsKKyAgICAgICAgY29udmVydFZhbHVlVG9OUFZhcmlhbnQoZXhlYywgZXhlYy0+YXJn
dW1lbnQoaSksICZjQXJnc1tpXSk7CiAKICAgICAvLyBJbnZva2UgdGhlICdDJyBtZXRob2QuCiAg
ICAgYm9vbCByZXR2YWwgPSB0cnVlOwpAQCAtMTc2LDE3ICsxNzYsMTcgQEAgSlNWYWx1ZSBDSW5z
dGFuY2U6Omludm9rZU1ldGhvZChFeGVjU3RhdAogfQogCiAKLUpTVmFsdWUgQ0luc3RhbmNlOjpp
bnZva2VEZWZhdWx0TWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykK
K0pTVmFsdWUgQ0luc3RhbmNlOjppbnZva2VEZWZhdWx0TWV0aG9kKEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICBpZiAoIV9vYmplY3QtPl9jbGFzcy0+aW52b2tlRGVmYXVsdCkKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICB1bnNpZ25lZCBjb3VudCA9IGFyZ3Muc2l6ZSgpOwor
ICAgIHVuc2lnbmVkIGNvdW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOwogICAgIFZlY3RvcjxO
UFZhcmlhbnQsIDg+IGNBcmdzKGNvdW50KTsKIAogICAgIHVuc2lnbmVkIGk7CiAgICAgZm9yIChp
ID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgIGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KGV4
ZWMsIGFyZ3MuYXQoaSksICZjQXJnc1tpXSk7CisgICAgICAgIGNvbnZlcnRWYWx1ZVRvTlBWYXJp
YW50KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KGkpLCAmY0FyZ3NbaV0pOwogCiAgICAgLy8gSW52b2tl
IHRoZSAnQycgbWV0aG9kLgogICAgIGJvb2wgcmV0dmFsID0gdHJ1ZTsKSW5kZXg6IFdlYkNvcmUv
YnJpZGdlL2MvY19pbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2MvY19p
bnN0YW5jZS5oCShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYkNvcmUvYnJpZGdlL2MvY19pbnN0YW5j
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw5ICs2MCw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IEpTVmFsdWUgZGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUp
IGNvbnN0OwogCiAgICAgdmlydHVhbCBKU1ZhbHVlIGdldE1ldGhvZChFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSk7Ci0gICAgdmlydHVhbCBKU1ZhbHVlIGlu
dm9rZU1ldGhvZChFeGVjU3RhdGUqLCBSdW50aW1lTWV0aG9kKiBtZXRob2QsIGNvbnN0IEFyZ0xp
c3QmKTsKKyAgICB2aXJ0dWFsIEpTVmFsdWUgaW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSosIFJ1bnRp
bWVNZXRob2QqIG1ldGhvZCk7CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzSW52b2tlRGVmYXVs
dE1ldGhvZCgpIGNvbnN0OwotICAgIHZpcnR1YWwgSlNWYWx1ZSBpbnZva2VEZWZhdWx0TWV0aG9k
KEV4ZWNTdGF0ZSosIGNvbnN0IEFyZ0xpc3QmKTsKKyAgICB2aXJ0dWFsIEpTVmFsdWUgaW52b2tl
RGVmYXVsdE1ldGhvZChFeGVjU3RhdGUqKTsKIAogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Nv
bnN0cnVjdCgpIGNvbnN0OwogICAgIHZpcnR1YWwgSlNWYWx1ZSBpbnZva2VDb25zdHJ1Y3QoRXhl
Y1N0YXRlKiwgY29uc3QgQXJnTGlzdCYpOwpJbmRleDogV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9K
YXZhSW5zdGFuY2VKU0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2puaS9qc2Mv
SmF2YUluc3RhbmNlSlNDLmNwcAkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJDb3JlL2JyaWRnZS9q
bmkvanNjL0phdmFJbnN0YW5jZUpTQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMSw3ICsxMzEs
NyBAQCBKU1ZhbHVlIEphdmFJbnN0YW5jZTo6Z2V0TWV0aG9kKEV4ZWNTdGF0CiAgICAgcmV0dXJu
IG5ldyAoZXhlYykgSmF2YVJ1bnRpbWVNZXRob2QoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLCBwcm9wZXJ0eU5hbWUsIG1ldGhvZExpc3QpOwogfQogCi1KU1ZhbHVlIEphdmFJbnN0
YW5jZTo6aW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgUnVudGltZU1ldGhvZCogcnVudGlt
ZU1ldGhvZCwgY29uc3QgQXJnTGlzdCAmYXJncykKK0pTVmFsdWUgSmF2YUluc3RhbmNlOjppbnZv
a2VNZXRob2QoRXhlY1N0YXRlKiBleGVjLCBSdW50aW1lTWV0aG9kKiBydW50aW1lTWV0aG9kKQog
ewogICAgIGlmICghYXNPYmplY3QocnVudGltZU1ldGhvZCktPmluaGVyaXRzKCZKYXZhUnVudGlt
ZU1ldGhvZDo6c19pbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVy
cm9yLCAiQXR0ZW1wdCB0byBpbnZva2Ugbm9uLUphdmEgbWV0aG9kIG9uIEphdmEgb2JqZWN0LiIp
OwpAQCAtMTM5LDcgKzEzOSw3IEBAIEpTVmFsdWUgSmF2YUluc3RhbmNlOjppbnZva2VNZXRob2Qo
RXhlY1MKICAgICBjb25zdCBNZXRob2RMaXN0JiBtZXRob2RMaXN0ID0gKnJ1bnRpbWVNZXRob2Qt
Pm1ldGhvZHMoKTsKIAogICAgIGludCBpOwotICAgIGludCBjb3VudCA9IGFyZ3Muc2l6ZSgpOwor
ICAgIGludCBjb3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKICAgICBKU1ZhbHVlIHJlc3Vs
dFZhbHVlOwogICAgIE1ldGhvZCogbWV0aG9kID0gMDsKICAgICBzaXplX3QgbnVtTWV0aG9kcyA9
IG1ldGhvZExpc3Quc2l6ZSgpOwpAQCAtMTY4LDggKzE2OCw4IEBAIEpTVmFsdWUgSmF2YUluc3Rh
bmNlOjppbnZva2VNZXRob2QoRXhlY1MKIAogICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsr
KSB7CiAgICAgICAgIEphdmFQYXJhbWV0ZXIqIGFQYXJhbWV0ZXIgPSBqTWV0aG9kLT5wYXJhbWV0
ZXJBdChpKTsKLSAgICAgICAgakFyZ3NbaV0gPSBjb252ZXJ0VmFsdWVUb0pWYWx1ZShleGVjLCBt
X3Jvb3RPYmplY3QuZ2V0KCksIGFyZ3MuYXQoaSksIGFQYXJhbWV0ZXItPmdldEpOSVR5cGUoKSwg
YVBhcmFtZXRlci0+dHlwZSgpKTsKLSAgICAgICAgTE9HKExpdmVDb25uZWN0LCAiSmF2YUluc3Rh
bmNlOjppbnZva2VNZXRob2QgYXJnWyVkXSA9ICVzIiwgaSwgYXJncy5hdChpKS50b1N0cmluZyhl
eGVjKS5hc2NpaSgpKTsKKyAgICAgICAgakFyZ3NbaV0gPSBjb252ZXJ0VmFsdWVUb0pWYWx1ZShl
eGVjLCBtX3Jvb3RPYmplY3QuZ2V0KCksIGV4ZWMtPmFyZ3VtZW50KGkpLCBhUGFyYW1ldGVyLT5n
ZXRKTklUeXBlKCksIGFQYXJhbWV0ZXItPnR5cGUoKSk7CisgICAgICAgIExPRyhMaXZlQ29ubmVj
dCwgIkphdmFJbnN0YW5jZTo6aW52b2tlTWV0aG9kIGFyZ1slZF0gPSAlcyIsIGksIGV4ZWMtPmFy
Z3VtZW50KGkpLnRvU3RyaW5nKGV4ZWMpLmFzY2lpKCkpOwogICAgIH0KIAogICAgIGp2YWx1ZSBy
ZXN1bHQ7CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFJbnN0YW5jZUpTQy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUluc3RhbmNlSlNDLmgJKHJl
dmlzaW9uIDYwMzQxKQorKysgV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0Mu
aAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBK
U1ZhbHVlIGRlZmF1bHRWYWx1ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBj
b25zdDsKIAogICAgIHZpcnR1YWwgSlNWYWx1ZSBnZXRNZXRob2QoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpOwotICAgIHZpcnR1YWwgSlNWYWx1ZSBpbnZv
a2VNZXRob2QoRXhlY1N0YXRlKiBleGVjLCBSdW50aW1lTWV0aG9kKiBtZXRob2QsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpOworICAgIHZpcnR1YWwgSlNWYWx1ZSBpbnZva2VNZXRob2QoRXhlY1N0YXRl
KiBleGVjLCBSdW50aW1lTWV0aG9kKiBtZXRob2QpOwogCiAgICAgam9iamVjdCBqYXZhSW5zdGFu
Y2UoKSBjb25zdCB7IHJldHVybiBtX2luc3RhbmNlLT5tX2luc3RhbmNlOyB9CiAKSW5kZXg6IFdl
YkNvcmUvYnJpZGdlL2pzYy9CcmlkZ2VKU0MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRn
ZS9qc2MvQnJpZGdlSlNDLmgJKHJldmlzaW9uIDYwMzQxKQorKysgV2ViQ29yZS9icmlkZ2UvanNj
L0JyaWRnZUpTQy5oCSh3b3JraW5nIGNvcHkpCkBAIC05MiwxMCArOTIsMTAgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgYm9vbCBzZXRWYWx1ZU9mVW5kZWZpbmVkRmllbGQoRXhlY1N0YXRlKiwgY29u
c3QgSWRlbnRpZmllciYsIEpTVmFsdWUpIHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICB2aXJ0dWFs
IEpTVmFsdWUgZ2V0TWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lKSA9IDA7Ci0gICAgdmlydHVhbCBKU1ZhbHVlIGludm9rZU1ldGhvZChFeGVjU3Rh
dGUqLCBSdW50aW1lTWV0aG9kKiBtZXRob2QsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpID0gMDsKKyAg
ICB2aXJ0dWFsIEpTVmFsdWUgaW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSosIFJ1bnRpbWVNZXRob2Qq
IG1ldGhvZCkgPSAwOwogCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzSW52b2tlRGVmYXVsdE1l
dGhvZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBKU1ZhbHVlIGludm9r
ZURlZmF1bHRNZXRob2QoRXhlY1N0YXRlKiwgY29uc3QgQXJnTGlzdCYpIHsgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7IH0KKyAgICB2aXJ0dWFsIEpTVmFsdWUgaW52b2tlRGVmYXVsdE1ldGhvZChFeGVj
U3RhdGUqKSB7IHJldHVybiBqc1VuZGVmaW5lZCgpOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgc3Vw
cG9ydHNDb25zdHJ1Y3QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgSlNW
YWx1ZSBpbnZva2VDb25zdHJ1Y3QoRXhlY1N0YXRlKiwgY29uc3QgQXJnTGlzdCYpIHsgcmV0dXJu
IEpTVmFsdWUoKTsgfQpJbmRleDogV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX2luc3RhbmNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX2luc3RhbmNlLmgJKHJldmlz
aW9uIDYwMzQxKQorKysgV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX2luc3RhbmNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ4LDEwICs0OCwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBKU1ZhbHVl
IGRlZmF1bHRWYWx1ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdDsK
IAogICAgIHZpcnR1YWwgSlNWYWx1ZSBnZXRNZXRob2QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpOwotICAgIEpTVmFsdWUgaW52b2tlT2JqY01ldGhvZChF
eGVjU3RhdGUqLCBPYmpjTWV0aG9kKiBtZXRob2QsIGNvbnN0IEFyZ0xpc3QmKTsKLSAgICB2aXJ0
dWFsIEpTVmFsdWUgaW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSosIFJ1bnRpbWVNZXRob2QqIG1ldGhv
ZCwgY29uc3QgQXJnTGlzdCYpOworICAgIEpTVmFsdWUgaW52b2tlT2JqY01ldGhvZChFeGVjU3Rh
dGUqLCBPYmpjTWV0aG9kKiBtZXRob2QpOworICAgIHZpcnR1YWwgSlNWYWx1ZSBpbnZva2VNZXRo
b2QoRXhlY1N0YXRlKiwgUnVudGltZU1ldGhvZCogbWV0aG9kKTsKICAgICB2aXJ0dWFsIGJvb2wg
c3VwcG9ydHNJbnZva2VEZWZhdWx0TWV0aG9kKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBKU1ZhbHVl
IGludm9rZURlZmF1bHRNZXRob2QoRXhlY1N0YXRlKiwgY29uc3QgQXJnTGlzdCYpOworICAgIHZp
cnR1YWwgSlNWYWx1ZSBpbnZva2VEZWZhdWx0TWV0aG9kKEV4ZWNTdGF0ZSopOwogCiAgICAgSlNW
YWx1ZSBnZXRWYWx1ZU9mVW5kZWZpbmVkRmllbGQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmll
ciYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBzZXRWYWx1ZU9mVW5kZWZpbmVkRmllbGQoRXhl
Y1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIEpTVmFsdWUpOwpJbmRleDogV2ViQ29yZS9icmlk
Z2Uvb2JqYy9vYmpjX2luc3RhbmNlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL29i
amMvb2JqY19pbnN0YW5jZS5tbQkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJDb3JlL2JyaWRnZS9v
YmpjL29iamNfaW5zdGFuY2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTE5NCw3ICsxOTQsNyBAQCBK
U1ZhbHVlIE9iamNJbnN0YW5jZTo6Z2V0TWV0aG9kKEV4ZWNTdGF0CiAgICAgcmV0dXJuIG5ldyAo
ZXhlYykgT2JqQ1J1bnRpbWVNZXRob2QoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LCBwcm9wZXJ0eU5hbWUsIG1ldGhvZExpc3QpOwogfQogCi1KU1ZhbHVlIE9iamNJbnN0YW5jZTo6
aW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgUnVudGltZU1ldGhvZCogcnVudGltZU1ldGhv
ZCwgY29uc3QgQXJnTGlzdCAmYXJncykKK0pTVmFsdWUgT2JqY0luc3RhbmNlOjppbnZva2VNZXRo
b2QoRXhlY1N0YXRlKiBleGVjLCBSdW50aW1lTWV0aG9kKiBydW50aW1lTWV0aG9kKQogewogICAg
IGlmICghYXNPYmplY3QocnVudGltZU1ldGhvZCktPmluaGVyaXRzKCZPYmpDUnVudGltZU1ldGhv
ZDo6c19pbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAi
QXR0ZW1wdCB0byBpbnZva2Ugbm9uLXBsdWctaW4gbWV0aG9kIG9uIHBsdWctaW4gb2JqZWN0LiIp
OwpAQCAtMjA1LDEwICsyMDUsMTAgQEAgSlNWYWx1ZSBPYmpjSW5zdGFuY2U6Omludm9rZU1ldGhv
ZChFeGVjUwogICAgIC8vIG5hbWUgbWF0Y2ggZm9yIGEgcGFydGljdWxhciBtZXRob2QuCiAgICAg
QVNTRVJUKG1ldGhvZExpc3Quc2l6ZSgpID09IDEpOwogCi0gICAgcmV0dXJuIGludm9rZU9iamNN
ZXRob2QoZXhlYywgc3RhdGljX2Nhc3Q8T2JqY01ldGhvZCo+KG1ldGhvZExpc3RbMF0pLCBhcmdz
KTsKKyAgICByZXR1cm4gaW52b2tlT2JqY01ldGhvZChleGVjLCBzdGF0aWNfY2FzdDxPYmpjTWV0
aG9kKj4obWV0aG9kTGlzdFswXSkpOwogfQogCi1KU1ZhbHVlIE9iamNJbnN0YW5jZTo6aW52b2tl
T2JqY01ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIE9iamNNZXRob2QqIG1ldGhvZCwgY29uc3QgQXJn
TGlzdCAmYXJncykKK0pTVmFsdWUgT2JqY0luc3RhbmNlOjppbnZva2VPYmpjTWV0aG9kKEV4ZWNT
dGF0ZSogZXhlYywgT2JqY01ldGhvZCogbWV0aG9kKQogewogICAgIEpTVmFsdWUgcmVzdWx0ID0g
anNVbmRlZmluZWQoKTsKICAgICAKQEAgLTIzNCw5ICsyMzQsOSBAQCBKU1ZhbHVlIE9iamNJbnN0
YW5jZTo6aW52b2tlT2JqY01ldGhvZChFCiAgICAgICAgIFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50
OiZqc05hbWUgYXRJbmRleDoyXTsKIAogICAgICAgICBOU011dGFibGVBcnJheSogb2JqY0FyZ3Mg
PSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOwotICAgICAgICBpbnQgY291bnQgPSBhcmdzLnNpemUo
KTsKKyAgICAgICAgaW50IGNvdW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOwogICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgICAgIE9iamNWYWx1ZSB2
YWx1ZSA9IGNvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlKGV4ZWMsIGFyZ3MuYXQoaSksIE9iamNPYmpl
Y3RUeXBlKTsKKyAgICAgICAgICAgIE9iamNWYWx1ZSB2YWx1ZSA9IGNvbnZlcnRWYWx1ZVRvT2Jq
Y1ZhbHVlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KGkpLCBPYmpjT2JqZWN0VHlwZSk7CiAgICAgICAg
ICAgICBbb2JqY0FyZ3MgYWRkT2JqZWN0OnZhbHVlLm9iamVjdFZhbHVlXTsKICAgICAgICAgfQog
ICAgICAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomb2JqY0FyZ3MgYXRJbmRleDozXTsKQEAg
LTI1MSw3ICsyNTEsNyBAQCBKU1ZhbHVlIE9iamNJbnN0YW5jZTo6aW52b2tlT2JqY01ldGhvZChF
CiAgICAgICAgICAgICAvLyB0eXBlcy4KICAgICAgICAgICAgIEFTU0VSVChvYmpjVmFsdWVUeXBl
ICE9IE9iamNJbnZhbGlkVHlwZSAmJiBvYmpjVmFsdWVUeXBlICE9IE9iamNWb2lkVHlwZSk7CiAK
LSAgICAgICAgICAgIE9iamNWYWx1ZSB2YWx1ZSA9IGNvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlKGV4
ZWMsIGFyZ3MuYXQoaS0yKSwgb2JqY1ZhbHVlVHlwZSk7CisgICAgICAgICAgICBPYmpjVmFsdWUg
dmFsdWUgPSBjb252ZXJ0VmFsdWVUb09iamNWYWx1ZShleGVjLCBleGVjLT5hcmd1bWVudChpLTIp
LCBvYmpjVmFsdWVUeXBlKTsKIAogICAgICAgICAgICAgc3dpdGNoIChvYmpjVmFsdWVUeXBlKSB7
CiAgICAgICAgICAgICAgICAgY2FzZSBPYmpjT2JqZWN0VHlwZToKQEAgLTMyMyw3ICszMjMsNyBA
QCBKU1ZhbHVlIE9iamNJbnN0YW5jZTo6aW52b2tlT2JqY01ldGhvZChFCiAgICAgcmV0dXJuIGNv
bnN0X2Nhc3Q8SlNWYWx1ZSY+KHJlc3VsdCk7CiB9CiAKLUpTVmFsdWUgT2JqY0luc3RhbmNlOjpp
bnZva2VEZWZhdWx0TWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCAmYXJncykK
K0pTVmFsdWUgT2JqY0luc3RhbmNlOjppbnZva2VEZWZhdWx0TWV0aG9kKEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7CiAKQEAgLTM0NSw5ICsz
NDUsOSBAQCBKU1ZhbHVlIE9iamNJbnN0YW5jZTo6aW52b2tlRGVmYXVsdE1ldGhvCiAgICAgfQog
CiAgICAgTlNNdXRhYmxlQXJyYXkqIG9iamNBcmdzID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsK
LSAgICB1bnNpZ25lZCBjb3VudCA9IGFyZ3Muc2l6ZSgpOworICAgIHVuc2lnbmVkIGNvdW50ID0g
ZXhlYy0+YXJndW1lbnRDb3VudCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKSB7Ci0gICAgICAgIE9iamNWYWx1ZSB2YWx1ZSA9IGNvbnZlcnRWYWx1ZVRvT2JqY1Zh
bHVlKGV4ZWMsIGFyZ3MuYXQoaSksIE9iamNPYmplY3RUeXBlKTsKKyAgICAgICAgT2JqY1ZhbHVl
IHZhbHVlID0gY29udmVydFZhbHVlVG9PYmpjVmFsdWUoZXhlYywgZXhlYy0+YXJndW1lbnQoaSks
IE9iamNPYmplY3RUeXBlKTsKICAgICAgICAgW29iamNBcmdzIGFkZE9iamVjdDp2YWx1ZS5vYmpl
Y3RWYWx1ZV07CiAgICAgfQogICAgIFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZvYmpjQXJncyBh
dEluZGV4OjJdOwpJbmRleDogV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW0JKHJldmlzaW9u
IDYwMzQxKQorKysgV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTIxNSw4ICsyMTUsOSBAQCB2b2lkIE9iamNGYWxsYmFja09iamVjdEltcDo6cHV0
KEV4ZWNTdGF0CiB7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbE9iakNG
YWxsYmFja09iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBmdW5jdGlvbiwgSlNWYWx1
ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGNhbGxPYmpDRmFsbGJhY2tPYmplY3QoRXhlY1N0YXRlKiBleGVjKQogeworICAgIEpT
VmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICghdGhpc1Zh
bHVlLmluaGVyaXRzKCZPYmpDUnVudGltZU9iamVjdDo6c19pbmZvKSkKICAgICAgICAgcmV0dXJu
IHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIApAQCAtMjM1LDEwICsyMzYsMTAgQEAgc3Rh
dGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsT2JqQ0ZhbAogICAgIGlmIChbdGFyZ2V0T2Jq
ZWN0IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoaW52b2tlVW5kZWZpbmVkTWV0aG9kRnJv
bVdlYlNjcmlwdDp3aXRoQXJndW1lbnRzOildKXsKICAgICAgICAgT2JqY0NsYXNzKiBvYmpjQ2xh
c3MgPSBzdGF0aWNfY2FzdDxPYmpjQ2xhc3MqPihvYmpjSW5zdGFuY2UtPmdldENsYXNzKCkpOwog
ICAgICAgICBPd25QdHI8T2JqY01ldGhvZD4gZmFsbGJhY2tNZXRob2QobmV3IE9iamNNZXRob2Qo
b2JqY0NsYXNzLT5pc2EoKSwgQHNlbGVjdG9yKGludm9rZVVuZGVmaW5lZE1ldGhvZEZyb21XZWJT
Y3JpcHQ6d2l0aEFyZ3VtZW50czopKSk7Ci0gICAgICAgIGNvbnN0IElkZW50aWZpZXImIG5hbWVJ
ZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8T2JqY0ZhbGxiYWNrT2JqZWN0SW1wKj4oZnVuY3Rpb24p
LT5wcm9wZXJ0eU5hbWUoKTsKKyAgICAgICAgY29uc3QgSWRlbnRpZmllciYgbmFtZUlkZW50aWZp
ZXIgPSBzdGF0aWNfY2FzdDxPYmpjRmFsbGJhY2tPYmplY3RJbXAqPihleGVjLT5jYWxsZWUoKSkt
PnByb3BlcnR5TmFtZSgpOwogICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IG5hbWUoQWRv
cHRDRiwgQ0ZTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCBuYW1lSWRlbnRpZmllci5kYXRh
KCksIG5hbWVJZGVudGlmaWVyLnNpemUoKSkpOwogICAgICAgICBmYWxsYmFja01ldGhvZC0+c2V0
SmF2YVNjcmlwdE5hbWUobmFtZS5nZXQoKSk7Ci0gICAgICAgIHJlc3VsdCA9IG9iamNJbnN0YW5j
ZS0+aW52b2tlT2JqY01ldGhvZChleGVjLCBmYWxsYmFja01ldGhvZC5nZXQoKSwgYXJncyk7Cisg
ICAgICAgIHJlc3VsdCA9IG9iamNJbnN0YW5jZS0+aW52b2tlT2JqY01ldGhvZChleGVjLCBmYWxs
YmFja01ldGhvZC5nZXQoKSk7CiAgICAgfQogICAgICAgICAgICAgCiAgICAgb2JqY0luc3RhbmNl
LT5lbmQoKTsKSW5kZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2MDM3MykKKysrIFdlYktpdC9tYWMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTAtMDUtMjggIEdlb2ZmcmV5IEdh
cmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBTaW1wbGlmaWVkIHRoZSBob3N0IGNhbGxpbmcgY29udmVudGlvbi4K
KworICAgICAgICBQQVJUIE9ORTogRnVuY3Rpb25hbCBjb2RlIGNoYW5nZXMuCisgICAgICAgIAor
ICAgICAgICBbIE5vbmUgaW4gV2ViS2l0IF0KKyAgICAgICAgCisgICAgICAgIFBBUlQgVFdPOiBH
bG9iYWwgc2VhcmNoIGFuZCByZXBsYWNlLgorICAgICAgICAKKyAgICAgICAgSW4gdGhlIGFyZWFz
IGJlbG93LCBJIHVzZWQgZ2xvYmFsIHNlYXJjaC1hbmQtcmVwbGFjZSB0byBjaGFuZ2UKKyAgICAg
ICAgICAgIChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKSA9
PiAoRXhlY1N0YXRlKikKKyAgICAgICAgICAgIGFyZ3Muc2l6ZSgpID0+IGV4ZWMtPmFyZ3VtZW50
Q291bnQoKQorICAgICAgICAgICAgYXJncy5hdChpKSA9PiBleGVjLT5hcmd1bWVudChpKQorCisg
ICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0YW5jZS5oOgorICAgICAgICAqIFBsdWdp
bnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UubW06CisgICAgICAgIChXZWJLaXQ6OlByb3h5SW5zdGFu
Y2U6Omludm9rZSk6CisgICAgICAgIChXZWJLaXQ6OlByb3h5SW5zdGFuY2U6Omludm9rZU1ldGhv
ZCk6CisgICAgICAgIChXZWJLaXQ6OlByb3h5SW5zdGFuY2U6Omludm9rZURlZmF1bHRNZXRob2Qp
OgorCiAyMDEwLTA1LTI3ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCkluZGV4OiBXZWJLaXQvbWFjL1BsdWdpbnMvSG9z
dGVkL1Byb3h5SW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1BsdWdpbnMvSG9z
dGVkL1Byb3h5SW5zdGFuY2UuaAkocmV2aXNpb24gNjAzNDEpCisrKyBXZWJLaXQvbWFjL1BsdWdp
bnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsMTAgKzY0LDEw
IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBKU0M6OkJpbmRpbmdzOjpDbGFzcyogZ2V0Q2xhc3Mo
KSBjb25zdDsKIAogICAgIHZpcnR1YWwgSlNDOjpKU1ZhbHVlIGdldE1ldGhvZChKU0M6OkV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpOwotICAgIHZp
cnR1YWwgSlNDOjpKU1ZhbHVlIGludm9rZU1ldGhvZChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UnVu
dGltZU1ldGhvZCosIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncyk7CisgICAgdmlydHVhbCBKU0M6
OkpTVmFsdWUgaW52b2tlTWV0aG9kKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpSdW50aW1lTWV0aG9k
Kik7CiAKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNJbnZva2VEZWZhdWx0TWV0aG9kKCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBKU0M6OkpTVmFsdWUgaW52b2tlRGVmYXVsdE1ldGhvZChKU0M6OkV4
ZWNTdGF0ZSosIGNvbnN0IEpTQzo6QXJnTGlzdCYpOworICAgIHZpcnR1YWwgSlNDOjpKU1ZhbHVl
IGludm9rZURlZmF1bHRNZXRob2QoSlNDOjpFeGVjU3RhdGUqKTsKIAogICAgIHZpcnR1YWwgYm9v
bCBzdXBwb3J0c0NvbnN0cnVjdCgpIGNvbnN0OwogICAgIHZpcnR1YWwgSlNDOjpKU1ZhbHVlIGlu
dm9rZUNvbnN0cnVjdChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6QXJnTGlzdCYpOwpAQCAt
ODEsNyArODEsNyBAQCBwcml2YXRlOgogICAgIEpTQzo6SlNWYWx1ZSBudW1iZXJWYWx1ZShKU0M6
OkV4ZWNTdGF0ZSopIGNvbnN0OwogICAgIEpTQzo6SlNWYWx1ZSBib29sZWFuVmFsdWUoKSBjb25z
dDsKICAgICAKLSAgICBKU0M6OkpTVmFsdWUgaW52b2tlKEpTQzo6RXhlY1N0YXRlKiwgSW52b2tl
VHlwZSwgdWludDY0X3QgaWRlbnRpZmllciwgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzKTsKKyAg
ICBKU0M6OkpTVmFsdWUgaW52b2tlKEpTQzo6RXhlY1N0YXRlKiwgSW52b2tlVHlwZSwgdWludDY0
X3QgaWRlbnRpZmllciwgY29uc3QgSlNDOjpBcmdMaXN0Jik7CiAgICAgCiAgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CiAgICAgc3RkOjphdXRvX3B0cjxUPiB3YWl0Rm9yUmVwbHkodWludDMyX3Qg
cmVxdWVzdElEKSBjb25zdCB7CkluZGV4OiBXZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5
SW5zdGFuY2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94
eUluc3RhbmNlLm1tCShyZXZpc2lvbiA2MDM0MSkKKysrIFdlYktpdC9tYWMvUGx1Z2lucy9Ib3N0
ZWQvUHJveHlJbnN0YW5jZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTQxLDcgKzE0MSw3IEBAIEpT
Qzo6QmluZGluZ3M6OkNsYXNzKiBQcm94eUluc3RhbmNlOjpnZXQKICAgICByZXR1cm4gcHJveHlD
bGFzcygpOwogfQogCi1KU1ZhbHVlIFByb3h5SW5zdGFuY2U6Omludm9rZShKU0M6OkV4ZWNTdGF0
ZSogZXhlYywgSW52b2tlVHlwZSB0eXBlLCB1aW50NjRfdCBpZGVudGlmaWVyLCBjb25zdCBKU0M6
OkFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIFByb3h5SW5zdGFuY2U6Omludm9rZShKU0M6OkV4ZWNT
dGF0ZSogZXhlYywgSW52b2tlVHlwZSB0eXBlLCB1aW50NjRfdCBpZGVudGlmaWVyLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQogewogICAgIGlmICghbV9pbnN0YW5jZVByb3h5KQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKQEAgLTE5Niw3ICsxOTYsNyBAQCBKU1ZhbHVlIFByb3h5SW5zdGFu
Y2U6OmdldE1ldGhvZChKU0M6OkV4CiAgICAgcmV0dXJuIG5ldyAoZXhlYykgUHJveHlSdW50aW1l
TWV0aG9kKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgcHJvcGVydHlOYW1lLCBt
ZXRob2RMaXN0KTsKIH0KIAotSlNWYWx1ZSBQcm94eUluc3RhbmNlOjppbnZva2VNZXRob2QoRXhl
Y1N0YXRlKiBleGVjLCBKU0M6OlJ1bnRpbWVNZXRob2QqIHJ1bnRpbWVNZXRob2QsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCitKU1ZhbHVlIFByb3h5SW5zdGFuY2U6Omludm9rZU1ldGhvZChFeGVjU3Rh
dGUqIGV4ZWMsIEpTQzo6UnVudGltZU1ldGhvZCogcnVudGltZU1ldGhvZCkKIHsKICAgICBpZiAo
IWFzT2JqZWN0KHJ1bnRpbWVNZXRob2QpLT5pbmhlcml0cygmUHJveHlSdW50aW1lTWV0aG9kOjpz
X2luZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJBdHRl
bXB0IHRvIGludm9rZSBub24tcGx1Zy1pbiBtZXRob2Qgb24gcGx1Zy1pbiBvYmplY3QuIik7CkBA
IC0yMDcsNyArMjA3LDcgQEAgSlNWYWx1ZSBQcm94eUluc3RhbmNlOjppbnZva2VNZXRob2QoRXhl
YwogCiAgICAgUHJveHlNZXRob2QqIG1ldGhvZCA9IHN0YXRpY19jYXN0PFByb3h5TWV0aG9kKj4o
bWV0aG9kTGlzdFswXSk7CiAKLSAgICByZXR1cm4gaW52b2tlKGV4ZWMsIEludm9rZSwgbWV0aG9k
LT5zZXJ2ZXJJZGVudGlmaWVyKCksIGFyZ3MpOworICAgIHJldHVybiBpbnZva2UoZXhlYywgSW52
b2tlLCBtZXRob2QtPnNlcnZlcklkZW50aWZpZXIoKSwgQXJnTGlzdChleGVjKSk7CiB9CiAKIGJv
b2wgUHJveHlJbnN0YW5jZTo6c3VwcG9ydHNJbnZva2VEZWZhdWx0TWV0aG9kKCkgY29uc3QKQEAg
LTIyOCwxMCArMjI4LDEwIEBAIGJvb2wgUHJveHlJbnN0YW5jZTo6c3VwcG9ydHNJbnZva2VEZWZh
dWwKICAgICAgICAgCiAgICAgcmV0dXJuIGZhbHNlOwogfQotICAgIAotSlNWYWx1ZSBQcm94eUlu
c3RhbmNlOjppbnZva2VEZWZhdWx0TWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlz
dCYgYXJncykKKworSlNWYWx1ZSBQcm94eUluc3RhbmNlOjppbnZva2VEZWZhdWx0TWV0aG9kKEV4
ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gaW52b2tlKGV4ZWMsIEludm9rZURlZmF1bHQs
IDAsIGFyZ3MpOworICAgIHJldHVybiBpbnZva2UoZXhlYywgSW52b2tlRGVmYXVsdCwgMCwgQXJn
TGlzdChleGVjKSk7CiB9CiAKIGJvb2wgUHJveHlJbnN0YW5jZTo6c3VwcG9ydHNDb25zdHJ1Y3Qo
KSBjb25zdAo=
</data>
<flag name="review"
          id="41948"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>