<?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>151214</bug_id>
          
          <creation_ts>2015-11-12 12:42:41 -0800</creation_ts>
          <short_desc>CheckAdd/Mul should have commutativity optimizations in B3-&gt;Air lowering</short_desc>
          <delta_ts>2015-11-17 14:31:58 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>151213</dependson>
    
    <dependson>151315</dependson>
          <blocked>150279</blocked>
    
    <blocked>151335</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1141594</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-12 12:42:41 -0800</bug_when>
    <thetext>Stuff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142300</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-16 12:24:21 -0800</bug_when>
    <thetext>I think that the right story for commutativity is just to allow B3 to commute CheckAdd/CheckMul.  If you are a client of B3 and you want to emit:

    CheckAdd(@x, @y)

And you want your generator to know what @x and @y are *before* commutation, you should do:

    CheckAdd(@x, @y, @x, @y)

We might commute the first two args since those are relevant to the math, but we won&apos;t commute the stackmap arguments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142383</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-16 16:10:47 -0800</bug_when>
    <thetext>While doing this and talking to Ben, I realized that we need to have the notion of a LateUse: a Use that happens after all relevant Def&apos;s, i.e. it appears like it&apos;s a Use on the instruction following this one.  We need this to handle:

- CheckAdd(@x, @x)
- CheckMul(@x, @y) where the register allocator uses the same register for the result as for the inputs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142384</commentid>
    <comment_count>3</comment_count>
      <attachid>265634</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-16 16:11:17 -0800</bug_when>
    <thetext>Created attachment 265634
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142470</commentid>
    <comment_count>4</comment_count>
      <attachid>265661</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-16 21:35:26 -0800</bug_when>
    <thetext>Created attachment 265661
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142473</commentid>
    <comment_count>5</comment_count>
      <attachid>265662</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-16 21:42:14 -0800</bug_when>
    <thetext>Created attachment 265662
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142474</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-16 21:44:36 -0800</bug_when>
    <thetext>Attachment 265662 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/testb3.cpp:3216:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3219:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3250:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3251:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3254:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3285:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3286:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3322:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3354:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3426:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3429:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3461:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3462:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3499:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3536:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3607:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3636:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3670:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3709:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3710:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3754:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3755:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3758:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3788:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:56:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:137:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3StackmapSpecial.h:57:  The parameter name &quot;role&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3CheckSpecial.cpp:158:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 28 in 32 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>1142519</commentid>
    <comment_count>7</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-11-17 03:12:39 -0800</bug_when>
    <thetext>I think I got the allocator bug: https://bugs.webkit.org/show_bug.cgi?id=151345</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142644</commentid>
    <comment_count>8</comment_count>
      <attachid>265662</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-11-17 13:50:54 -0800</bug_when>
    <thetext>Comment on attachment 265662
the patch

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

r=me

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:573
&gt; -        
&gt; +

Revert-o.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142661</commentid>
    <comment_count>9</comment_count>
      <attachid>265662</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-17 14:18:50 -0800</bug_when>
    <thetext>Comment on attachment 265662
the patch

Clearing cq so that I can land it myself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142666</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-17 14:31:58 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/192540</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265634</attachid>
            <date>2015-11-16 16:11:17 -0800</date>
            <delta_ts>2015-11-16 21:35:26 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>44648</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmNwcAkocmV2
aXNpb24gMTkyNDc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksOSArMzksOSBAQCB1c2luZyBuYW1lc3BhY2UgQWly
OwogCiBuYW1lc3BhY2UgewogCi11bnNpZ25lZCBudW1CM0FyZ3MoSW5zdCYgaW5zdCkKK3Vuc2ln
bmVkIG51bUIzQXJncyhCMzo6T3Bjb2RlIG9wY29kZSkKIHsKLSAgICBzd2l0Y2ggKGluc3Qub3Jp
Z2luLT5vcGNvZGUoKSkgeworICAgIHN3aXRjaCAob3Bjb2RlKSB7CiAgICAgY2FzZSBDaGVja0Fk
ZDoKICAgICBjYXNlIENoZWNrU3ViOgogICAgIGNhc2UgQ2hlY2tNdWw6CkBAIC01NCw2ICs1NCwx
NiBAQCB1bnNpZ25lZCBudW1CM0FyZ3MoSW5zdCYgaW5zdCkKICAgICB9CiB9CiAKK3Vuc2lnbmVk
IG51bUIzQXJncyhWYWx1ZSogdmFsdWUpCit7CisgICAgcmV0dXJuIG51bUIzQXJncyh2YWx1ZS0+
b3Bjb2RlKCkpOworfQorCit1bnNpZ25lZCBudW1CM0FyZ3MoSW5zdCYgaW5zdCkKK3sKKyAgICBy
ZXR1cm4gbnVtQjNBcmdzKGluc3Qub3JpZ2luKTsKK30KKwogfSAvLyBhbm9ueW1vdXMgbmFtZXNw
YWNlCiAKIENoZWNrU3BlY2lhbDo6S2V5OjpLZXkoY29uc3QgSW5zdCYgaW5zdCkKQEAgLTEzMCwy
OCArMTQwLDQ3IEBAIENDYWxsSGVscGVyczo6SnVtcCBDaGVja1NwZWNpYWw6OmdlbmVyYXQKICAg
ICBBU1NFUlQodmFsdWUpOwogCiAgICAgVmVjdG9yPFZhbHVlUmVwPiByZXBzOwotICAgIGlmIChp
c0NoZWNrTWF0aCh2YWx1ZS0+b3Bjb2RlKCkpKSB7Ci0gICAgICAgIGlmICh2YWx1ZS0+b3Bjb2Rl
KCkgPT0gQ2hlY2tNdWwpIHsKLSAgICAgICAgICAgIHJlcHMuYXBwZW5kKHJlcEZvckFyZygqY29u
dGV4dC5jb2RlLCBpbnN0LmFyZ3NbMl0pKTsKLSAgICAgICAgICAgIHJlcHMuYXBwZW5kKHJlcEZv
ckFyZygqY29udGV4dC5jb2RlLCBpbnN0LmFyZ3NbM10pKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIGlmICh2YWx1ZS0+b3Bjb2RlKCkgPT0gQ2hlY2tTdWIgJiYgdmFsdWUtPmNoaWxk
KDApLT5pc0ludCgwKSkKLSAgICAgICAgICAgICAgICByZXBzLmFwcGVuZChWYWx1ZVJlcDo6Y29u
c3RhbnQoMCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlcHMuYXBwZW5k
KHJlcEZvckFyZygqY29udGV4dC5jb2RlLCBpbnN0LmFyZ3NbM10pKTsKLSAgICAgICAgICAgIHJl
cHMuYXBwZW5kKHJlcEZvckFyZygqY29udGV4dC5jb2RlLCBpbnN0LmFyZ3NbMl0pKTsKLSAgICAg
ICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVCh2YWx1ZS0+b3Bjb2RlKCkgPT0gQ2hl
Y2spOwotICAgICAgICByZXBzLmFwcGVuZChWYWx1ZVJlcDo6Y29uc3RhbnQoMSkpOwotICAgIH0K
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1CM0FyZ3ModmFsdWUpOyBpLS07KQorICAgICAgICBy
ZXBzLmFwcGVuZChWYWx1ZVJlcCgpKTsKIAogICAgIGFwcGVuZFJlcHNJbXBsKGNvbnRleHQsIG1f
bnVtQ2hlY2tBcmdzICsgMSwgaW5zdCwgcmVwcyk7Ci0gICAgCisKKyAgICAvLyBGaWd1cmUgb3V0
IHdoYXQgd2UnbGwgZG8gdG8gdW5kbyB0aGUgb3BlcmF0aW9uIHdoaWxlIEluc3QmIGluc3QgaXMg
c3RpbGwgdmFsaWQuIEl0IHNvcnQgb2YgbWF5YmUKKyAgICAvLyBtaWdodCBiZSB2YWxpZCBpbnNp
ZGUgdGhlIGxhdGUgcGF0aCwgYnV0IHRoYXQgc2VlbXMgbGlrZSBhbiB1bm5lY2Vzc2FyaWx5IHJp
c2t5IGFzc3VtcHRpb24uCisgICAgSW5zdCB1bmRvOworICAgIHN3aXRjaCAobV9jaGVja09wY29k
ZSkgeworICAgIGNhc2UgQnJhbmNoQWRkMzI6CisgICAgICAgIHVuZG8gPSBJbnN0KFN1YjMyLCBu
dWxscHRyLCBpbnN0LmFyZ3NbMl0sIGluc3QuYXJnc1szXSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQnJhbmNoQWRkNjQ6CisgICAgICAgIHVuZG8gPSBJbnN0KFN1YjY0LCBudWxscHRyLCBp
bnN0LmFyZ3NbMl0sIGluc3QuYXJnc1szXSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQnJh
bmNoU3ViMzI6CisgICAgICAgIHVuZG8gPSBJbnN0KEFkZDMyLCBudWxscHRyLCBpbnN0LmFyZ3Nb
Ml0sIGluc3QuYXJnc1szXSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQnJhbmNoU3ViNjQ6
CisgICAgICAgIHVuZG8gPSBJbnN0KEFkZDY0LCBudWxscHRyLCBpbnN0LmFyZ3NbMl0sIGluc3Qu
YXJnc1szXSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQnJhbmNoTmVnMzI6CisgICAgICAg
IHVuZG8gPSBJbnN0KE5lZzMyLCBudWxscHRyLCBpbnN0LmFyZ3NbMl0pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEJyYW5jaE5lZzY0OgorICAgICAgICB1bmRvID0gSW5zdChOZWc2NCwgbnVs
bHB0ciwgaW5zdC5hcmdzWzJdKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCiAgICAgY29udGV4dC5sYXRlUGF0aHMuYXBwZW5kKAogICAgICAg
ICBjcmVhdGVTaGFyZWRUYXNrPEdlbmVyYXRpb25Db250ZXh0OjpMYXRlUGF0aEZ1bmN0aW9uPigK
LSAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEdlbmVyYXRpb25Db250ZXh0Jikg
eworICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgR2VuZXJhdGlvbkNvbnRleHQm
IGNvbnRleHQpIHsKICAgICAgICAgICAgICAgICBmYWlsLmxpbmsoJmppdCk7CisKKyAgICAgICAg
ICAgICAgICAvLyBJZiBuZWNlc3NhcnksIHVuZG8gdGhlIG9wZXJhdGlvbi4KKyAgICAgICAgICAg
ICAgICBpZiAodW5kbykgeworICAgICAgICAgICAgICAgICAgICBJbnN0IHRoZVVuZG8gPSB1bmRv
OyAvLyBnZW5lcmF0ZSgpIGlzIG5vdCBjb25zdAorICAgICAgICAgICAgICAgICAgICB0aGVVbmRv
LmdlbmVyYXRlKGppdCwgY29udGV4dCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyBwYXJhbXM7CiAg
ICAgICAgICAgICAgICAgcGFyYW1zLnZhbHVlID0gdmFsdWU7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNwcAkocmV2aXNpb24gMTkyNDc4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDYgKzM0LDEyIEBAIENoZWNrVmFsdWU6On5DaGVja1ZhbHVlKCkKIHsKIH0KIAordm9pZCBDaGVj
a1ZhbHVlOjpjb252ZXJ0VG9BZGQoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG9wY29kZSgpID09
IENoZWNrQWRkIHx8IG9wY29kZSgpID09IENoZWNrU3ViIHx8IG9wY29kZSgpID09IENoZWNrTXVs
KTsKKyAgICBtX29wY29kZSA9IENoZWNrQWRkOworfQorCiAvLyBVc2UgdGhpcyBmb3JtIGZvciBD
aGVja0FkZCwgQ2hlY2tTdWIsIGFuZCBDaGVja011bC4KIENoZWNrVmFsdWU6OkNoZWNrVmFsdWUo
dW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0
LCBWYWx1ZSogcmlnaHQpCiAgICAgOiBTdGFja21hcFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2Rl
LCBvcGNvZGUsIGxlZnQtPnR5cGUoKSwgb3JpZ2luKQpAQCAtNDEsOCArNDcsOCBAQCBDaGVja1Zh
bHVlOjpDaGVja1ZhbHVlKHVuc2lnbmVkIGluZGV4LCBPCiAgICAgQVNTRVJUKEIzOjppc0ludCh0
eXBlKCkpKTsKICAgICBBU1NFUlQobGVmdC0+dHlwZSgpID09IHJpZ2h0LT50eXBlKCkpOwogICAg
IEFTU0VSVChvcGNvZGUgPT0gQ2hlY2tBZGQgfHwgb3Bjb2RlID09IENoZWNrU3ViIHx8IG9wY29k
ZSA9PSBDaGVja011bCk7Ci0gICAgYXBwZW5kKENvbnN0cmFpbmVkVmFsdWUobGVmdCwgVmFsdWVS
ZXA6OlNvbWVSZWdpc3RlcikpOwotICAgIGFwcGVuZChDb25zdHJhaW5lZFZhbHVlKHJpZ2h0LCBW
YWx1ZVJlcDo6U29tZVJlZ2lzdGVyKSk7CisgICAgYXBwZW5kKENvbnN0cmFpbmVkVmFsdWUobGVm
dCwgVmFsdWVSZXA6OkFueSkpOworICAgIGFwcGVuZChDb25zdHJhaW5lZFZhbHVlKHJpZ2h0LCBW
YWx1ZVJlcDo6QW55KSk7CiB9CiAKIC8vIFVzZSB0aGlzIGZvcm0gZm9yIENoZWNrLgpAQCAtNTAs
NyArNTYsNyBAQCBDaGVja1ZhbHVlOjpDaGVja1ZhbHVlKHVuc2lnbmVkIGluZGV4LCBPCiAgICAg
OiBTdGFja21hcFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBvcGNvZGUsIFZvaWQsIG9yaWdp
bikKIHsKICAgICBBU1NFUlQob3Bjb2RlID09IENoZWNrKTsKLSAgICBhcHBlbmQocHJlZGljYXRl
KTsKKyAgICBhcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShwcmVkaWNhdGUsIFZhbHVlUmVwOjpBbnkp
KTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDaGVja1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ2hlY2tWYWx1ZS5oCShyZXZpc2lvbiAxOTI0NzgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDgg
QEAgcHVibGljOgogCiAgICAgfkNoZWNrVmFsdWUoKTsKIAorICAgIHZvaWQgY29udmVydFRvQWRk
KCk7CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuY3BwCShyZXZpc2lvbiAxOTI0
NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05OCw2ICs5OCwxMyBAQCBWYWx1ZSogQ29uc3QzMlZhbHVlOjpjaGVja011
bENvbnN0YW50KFByCiAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0MzJWYWx1ZT4ob3JpZ2luKCks
IHJlc3VsdC51bnNhZmVHZXQoKSk7CiB9CiAKK1ZhbHVlKiBDb25zdDMyVmFsdWU6OmNoZWNrTmVn
Q29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jKSBjb25zdAoreworICAgIGlmIChtX3ZhbHVlID09IC1t
X3ZhbHVlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gbmVnQ29uc3RhbnQo
cHJvYyk7Cit9CisKIFZhbHVlKiBDb25zdDMyVmFsdWU6OmRpdkNvbnN0YW50KFByb2NlZHVyZSYg
cHJvYywgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0lu
dDMyKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuaAko
cmV2aXNpb24gMTkyNDc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZh
bHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgcHVibGljOgogICAgIFZhbHVl
KiBjaGVja0FkZENvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qg
b3ZlcnJpZGU7CiAgICAgVmFsdWUqIGNoZWNrU3ViQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3Qg
VmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKICAgICBWYWx1ZSogY2hlY2tNdWxDb25zdGFu
dChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFZh
bHVlKiBjaGVja05lZ0NvbnN0YW50KFByb2NlZHVyZSYpIGNvbnN0IG92ZXJyaWRlOwogICAgIFZh
bHVlKiBkaXZDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92
ZXJyaWRlOwogICAgIFZhbHVlKiBiaXRBbmRDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1
ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwogICAgIFZhbHVlKiBiaXRPckNvbnN0YW50KFByb2Nl
ZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5jcHAJKHJldmlzaW9uIDE5MjQ3OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTk4LDYgKzk4LDEzIEBAIFZhbHVlKiBDb25zdDY0VmFsdWU6OmNoZWNrTXVsQ29u
c3RhbnQoUHIKICAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3Q2NFZhbHVlPihvcmlnaW4oKSwgcmVz
dWx0LnVuc2FmZUdldCgpKTsKIH0KIAorVmFsdWUqIENvbnN0NjRWYWx1ZTo6Y2hlY2tOZWdDb25z
dGFudChQcm9jZWR1cmUmIHByb2MpIGNvbnN0Cit7CisgICAgaWYgKG1fdmFsdWUgPT0gLW1fdmFs
dWUpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBuZWdDb25zdGFudChwcm9j
KTsKK30KKwogVmFsdWUqIENvbnN0NjRWYWx1ZTo6ZGl2Q29uc3RhbnQoUHJvY2VkdXJlJiBwcm9j
LCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50NjQo
KSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCShyZXZp
c2lvbiAxOTI0NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUu
aAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQCBwdWJsaWM6CiAgICAgVmFsdWUqIGNo
ZWNrQWRkQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVy
cmlkZTsKICAgICBWYWx1ZSogY2hlY2tTdWJDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1
ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwogICAgIFZhbHVlKiBjaGVja011bENvbnN0YW50KFBy
b2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUq
IGNoZWNrTmVnQ29uc3RhbnQoUHJvY2VkdXJlJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmFsdWUq
IGRpdkNvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgVmFsdWUqIGJpdEFuZENvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBv
dGhlcikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmFsdWUqIGJpdE9yQ29uc3RhbnQoUHJvY2VkdXJl
JiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCShyZXZpc2lvbiAxOTI0NzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTcwLDcgKzU3MCw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgd2Ug
cHJlZmVyIHZlcnNpb25zIG9mIHRoZSBvcGVyYXRpb24gdGhhdCBoYXZlIGEgZnVzZWQgbG9hZCBv
ciBhbiBpbW1lZGlhdGUKICAgICAgICAgLy8gb3ZlciB0aHJlZSBvcGVyYW5kIGZvcm1zLgotICAg
ICAgICAKKwogICAgICAgICBpZiAoY29tbXV0YXRpdml0eSA9PSBDb21tdXRhdGl2ZSkgewogICAg
ICAgICAgICAgQXJnUHJvbWlzZSBsZWZ0QWRkciA9IGxvYWRQcm9taXNlKGxlZnQpOwogICAgICAg
ICAgICAgaWYgKGlzVmFsaWRGb3JtKG9wY29kZSwgbGVmdEFkZHIua2luZCgpLCBBcmc6OlRtcCkp
IHsKQEAgLTU5OCw2ICs1OTgsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogCisgICAgICAgIC8vIEZJWE1FOiBJZiB3ZSdyZSBnb2luZyB0byB1c2UgYSB0d28t
b3BlcmFuZCBpbnN0cnVjdGlvbiwgYW5kIHRoZSBvcGVyYW5kIGlzIGNvbW11dGF0aXZlLCB3ZQor
ICAgICAgICAvLyBzaG91bGQgY29hbGVzY2UgdGhlIHJlc3VsdCB3aXRoIHRoZSBvcGVyYW5kIHRo
YXQgaXMga2lsbGVkLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTUxMzIxCisgICAgICAgIAogICAgICAgICBhcHBlbmQocmVsYXhlZE1vdmVGb3JU
eXBlKG1fdmFsdWUtPnR5cGUoKSksIHRtcChsZWZ0KSwgcmVzdWx0KTsKICAgICAgICAgYXBwZW5k
KG9wY29kZSwgdG1wKHJpZ2h0KSwgcmVzdWx0KTsKICAgICB9CkBAIC0xNTMxLDEwICsxNTM1LDYg
QEAgcHJpdmF0ZToKIAogICAgICAgICBjYXNlIENoZWNrQWRkOgogICAgICAgICBjYXNlIENoZWNr
U3ViOiB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogTWFrZSB0aGlzIHN1cHBvcnQgY29tbXV0YXRp
dml0eS4gVGhhdCB3aWxsIGxldCB1cyBsZXZlcmFnZSBtb3JlIGluc3RydWN0aW9uIGZvcm1zCi0g
ICAgICAgICAgICAvLyBhbmQgaXQgbGV0IHVzIGNvbW11dGUgdG8gbWF4aW1pemUgY29hbGVzY2lu
Zy4KLSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTEyMTQKLQogICAgICAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2tWYWx1ZSA9IG1fdmFsdWUt
PmFzPENoZWNrVmFsdWU+KCk7CiAKICAgICAgICAgICAgIFZhbHVlKiBsZWZ0ID0gY2hlY2tWYWx1
ZS0+Y2hpbGQoMCk7CkBAIC0xNTYwLDcgKzE1NjAsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGFwcGVuZChyZWxheGVk
TW92ZUZvclR5cGUobV92YWx1ZS0+dHlwZSgpKSwgdG1wKGxlZnQpLCByZXN1bHQpOworICAgICAg
ICAgICAgLy8gRklYTUU6IFVzZSBjb21tdXRhdGl2aXR5IG9mIENoZWNrQWRkIHRvIGluY3JlYXNl
IHRoZSBsaWtlbGlob29kIG9mIGNvYWxlc2NpbmcuCisgICAgICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxMzIxCisKKyAgICAgICAgICAgIGlmIChs
ZWZ0ID09IHJpZ2h0KSB7CisgICAgICAgICAgICAgICAgLy8gRm9yIENoZWNrQWRkKEB4LCBAeCks
IHdlIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHJlc3VsdCBpcyBhIGRpZmZlcmVudCB0ZW1w
b3JhcnkKKyAgICAgICAgICAgICAgICAvLyB0aGFuIHRoZSBpbnB1dHMuIE90aGVyd2lzZSwgdGhl
IHVuZG8gd291bGQgZG8gU3ViICV4LCAleCwgd2hpY2ggd291bGQgYWx3YXlzIHByb2R1Y2UKKyAg
ICAgICAgICAgICAgICAvLyB6ZXJvLgorICAgICAgICAgICAgICAgIGFwcGVuZChIYXJkTW92ZSwg
dG1wKGxlZnQpLCByZXN1bHQpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAg
YXBwZW5kKE1vdmUsIHRtcChsZWZ0KSwgcmVzdWx0KTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gQWlyOjpPb3BzOwogICAgICAgICAgICAgQ2hlY2tTcGVj
aWFsKiBzcGVjaWFsID0gbnVsbHB0cjsKQEAgLTE1ODYsNyArMTU5NSw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAvLyBydWxlIGZvciBzdGFja21hcHMgaXMgdGhhdCBhbGwgYWRkcmVzc2VzIGFy
ZSBqdXN0IHN0YWNrIGFkZHJlc3Nlcy4gTWF5YmUgd2UgY291bGQgcmVsYXgKICAgICAgICAgICAg
IC8vIHRoaXMgcnVsZSBoZXJlLgogICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1MTIyOAotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlm
IChpbW0ocmlnaHQpICYmIGlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpSZXNDb25kLCBBcmc6Oklt
bSwgQXJnOjpUbXApKQogICAgICAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQoaW1tKHJpZ2h0
KSk7CiAgICAgICAgICAgICBlbHNlCkBAIC0xNjAwLDEwICsxNjA5LDYgQEAgcHJpdmF0ZToKICAg
ICAgICAgfQogCiAgICAgICAgIGNhc2UgQ2hlY2tNdWw6IHsKLSAgICAgICAgICAgIC8vIEhhbmRs
ZSBtdWx0aXBsaWNhdGlvbiBzZXBhcmF0ZWx5LiBNdWx0aXBsaWNhdGlvbiBpcyBoYXJkIGJlY2F1
c2Ugd2UgaGF2ZSB0byBwcmVzZXJ2ZQotICAgICAgICAgICAgLy8gYm90aCBpbnB1dHMuIFRoaXMg
cmVxdWlyZXMgdXNpbmcgdGhyZWUtb3BlcmFuZCBtdWx0aXBsaWNhdGlvbiwgZXZlbiBvbiBwbGF0
Zm9ybXMgd2hlcmUKLSAgICAgICAgICAgIC8vIHRoaXMgcmVxdWlyZXMgYW4gYWRkaXRpb25hbCBN
b3ZlLgotCiAgICAgICAgICAgICBDaGVja1ZhbHVlKiBjaGVja1ZhbHVlID0gbV92YWx1ZS0+YXM8
Q2hlY2tWYWx1ZT4oKTsKIAogICAgICAgICAgICAgVmFsdWUqIGxlZnQgPSBjaGVja1ZhbHVlLT5j
aGlsZCgwKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCShyZXZpc2lvbiAx
OTI0NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMTYzLDYgKzE2MywxMCBAQCBlbnVtIE9wY29kZSA6IGludDE2X3QgewogICAgIC8v
IGNhbGxiYWNrcy4gWWV0LCB0aGlzIHRyYW5zZm9ybWF0aW9uIGlzIHZhbGlkIGV2ZW4gaWYgdGhl
eSBhcmUgZGlmZmVyZW50IGJlY2F1c2Ugd2Uga25vdyB0aGF0CiAgICAgLy8gYWZ0ZXIgdGhlIGZp
cnN0IENoZWNrQWRkIGV4ZWN1dGVzLCB0aGUgc2Vjb25kIENoZWNrQWRkIGNvdWxkIG5vdCBoYXZl
IHBvc3NpYmx5IHRha2VuIHNsb3cKICAgICAvLyBwYXRoLiBUaGVyZWZvcmUsIHRoZSBzZWNvbmQg
Q2hlY2tBZGQncyBjYWxsYmFjayBpcyBpcnJlbGV2YW50LgorICAgIC8vCisgICAgLy8gTm90ZSB0
aGF0IHRoZSBmaXJzdCB0d28gY2hpbGRyZW4gb2YgdGhlc2Ugb3BlcmF0aW9ucyBoYXZlIFZhbHVl
UmVwJ3MsIGJvdGggYXMgaW5wdXQgY29uc3RyYWludHMgYW5kCisgICAgLy8gaW4gdGhlIHJlcHMg
cHJvdmlkZWQgdG8gdGhlIGdlbmVyYXRvci4gVGhlIG91dHB1dCBjb25zdHJhaW50cyBjb3VsZCBi
ZSBhbnl0aGluZywgYW5kIHNob3VsZCBub3QgYmUKKyAgICAvLyBpbnNwZWN0ZWQgZm9yIG1lYW5p
bmcuIElmIHlvdSB3YW50IHRvIGNhcHR1cmUgdGhlIHZhbHVlcyBvZiB0aGUgaW5wdXRzLCB1c2Ug
c3RhY2ttYXAgYXJndW1lbnRzLgogICAgIENoZWNrQWRkLAogICAgIENoZWNrU3ViLAogICAgIENo
ZWNrTXVsLApAQCAtMTcwLDcgKzE3NCw4IEBAIGVudW0gT3Bjb2RlIDogaW50MTZfdCB7CiAgICAg
Ly8gQ2hlY2sgdGhhdCBzaWRlLWV4aXRzLiBVc2UgdGhlIENoZWNrVmFsdWUgY2xhc3MuIExpa2Ug
Q2hlY2tBZGQgYW5kIGZyaWVuZHMsIHRoaXMgaGFzIGEKICAgICAvLyBzdGFja21hcCB3aXRoIGEg
Z2VuZXJhdGlvbiBjYWxsYmFjay4gVGhpcyB0YWtlcyBhbiBpbnQgYXJndW1lbnQgdGhhdCB0aGlz
IGJyYW5jaGVzIG9uLCB3aXRoCiAgICAgLy8gZnVsbCBicmFuY2ggZnVzaW9uIGluIHRoZSBpbnN0
cnVjdGlvbiBzZWxlY3Rvci4gQSB0cnVlIHZhbHVlIGp1bXBzIHRvIHRoZSBnZW5lcmF0b3IncyBz
bG93Ci0gICAgLy8gcGF0aC4KKyAgICAvLyBwYXRoLiBOb3RlIHRoYXQgdGhlIHByZWRpY2F0ZSBj
aGlsZCBpcyBoYXMgYm90aCBhbiBpbnB1dCBhbmQgb3V0cHV0IFZhbHVlUmVwLiBUaGUgaW5wdXQg
Y29uc3RyYWludAorICAgIC8vIG11c3QgYmUgQW55LCBhbmQgdGhlIG91dHB1dCBjb3VsZCBiZSBh
bnl0aGluZy4KICAgICBDaGVjaywKIAogICAgIC8vIFNTQSBzdXBwb3J0LCBpbiB0aGUgc3R5bGUg
b2YgREZHIFNTQS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVu
Z3RoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VT
dHJlbmd0aC5jcHAJKHJldmlzaW9uIDE5MjQ3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1JlZHVjZVN0cmVuZ3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMzLDE3ICs2MzMsMTAg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgQ2hlY2tBZGQ6
Ci0gICAgICAgICAgICAvLyBGSVhNRTogSGFuZGxlIGNvbW11dGF0aXZpdHkuCi0gICAgICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxMjE0Ci0gICAg
ICAgICAgICAKICAgICAgICAgICAgIGlmIChyZXBsYWNlV2l0aE5ld1ZhbHVlKG1fdmFsdWUtPmNo
aWxkKDApLT5jaGVja0FkZENvbnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMSkpKSkKICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG1fdmFs
dWUtPmNoaWxkKDApLT5pc0ludCgwKSkgewotICAgICAgICAgICAgICAgIG1fdmFsdWUtPnJlcGxh
Y2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMSkpOwotICAgICAgICAgICAgICAgIG1fY2hh
bmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGhhbmRsZUNvbW11dGF0aXZpdHkoKTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5pc0ludCgwKSkgewogICAgICAgICAgICAgICAgIG1f
dmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMCkpOwpAQCAtNjYxLDMw
ICs2NTQsNDMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
VmFsdWUqIG5lZ2F0ZWRDb25zdGFudCA9IG1fdmFsdWUtPmNoaWxkKDEpLT5jaGVja05lZ0NvbnN0
YW50KG1fcHJvYykpIHsKKyAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRWYWx1
ZShtX2luZGV4LCBuZWdhdGVkQ29uc3RhbnQpOworICAgICAgICAgICAgICAgIG1fdmFsdWUtPmFz
PENoZWNrVmFsdWU+KCktPmNvbnZlcnRUb0FkZCgpOworICAgICAgICAgICAgICAgIG1fdmFsdWUt
PmNoaWxkKDEpID0gbmVnYXRlZENvbnN0YW50OworICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9
IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBicmVhazsKIAogICAgICAgICBjYXNlIENoZWNrTXVsOgotICAgICAgICAgICAgLy8gRklYTUU6
IEhhbmRsZSBjb21tdXRhdGl2aXR5LgotICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTIxNAotICAgICAgICAgICAgCiAgICAgICAgICAgICBp
ZiAocmVwbGFjZVdpdGhOZXdWYWx1ZShtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hlY2tNdWxDb25zdGFu
dChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDEpKSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAK
LSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+aXNJbnQoMSkpIHsKLSAgICAgICAg
ICAgICAgICBtX3ZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDEpKTsK
LSAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+
Y2hpbGQoMSktPmlzSW50KDEpKSB7Ci0gICAgICAgICAgICAgICAgbV92YWx1ZS0+cmVwbGFjZVdp
dGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICAgICAgbV9jaGFuZ2Vk
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGhhbmRsZUNvbW11dGF0aXZpdHkoKTsKIAotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNo
aWxkKDApLT5pc0ludCgwKSB8fCBtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQoMCkpIHsKLSAgICAg
ICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKG1fcHJvYy5hZGRJbnRDb25zdGFudChtX3Zh
bHVlLCAwKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAobV92YWx1
ZS0+Y2hpbGQoMSktPmhhc0ludCgpKSB7CisgICAgICAgICAgICAgICAgYm9vbCBtb2RpZmllZCA9
IHRydWU7CisgICAgICAgICAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT5jaGlsZCgxKS0+YXNJbnQo
KSkgeworICAgICAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICAgICAgcmVwbGFj
ZVdpdGhOZXdWYWx1ZShtX3Byb2MuYWRkSW50Q29uc3RhbnQobV92YWx1ZSwgMCkpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAg
ICAgICAgICAgIG1fdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMCkp
OworICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAg
IG1fdmFsdWUtPmFzPENoZWNrVmFsdWU+KCktPmNvbnZlcnRUb0FkZCgpOworICAgICAgICAgICAg
ICAgICAgICBtX3ZhbHVlLT5jaGlsZCgxKSA9IG1fdmFsdWUtPmNoaWxkKDApOworICAgICAgICAg
ICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBtb2RpZmllZCA9
IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgaWYgKG1vZGlmaWVkKQorICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogCkBAIC03NjEsNiArNzY3LDEwIEBA
IHByaXZhdGU6CiAgICAgLy8gSWYgd2UgZGVjaWRlIHRoYXQgdmFsdWUyIGNvbWluZyBmaXJzdCBp
cyB0aGUgY2Fub25pY2FsIG9yZGVyaW5nLgogICAgIHZvaWQgaGFuZGxlQ29tbXV0YXRpdml0eSgp
CiAgICAgeworICAgICAgICAvLyBOb3RlIHRoYXQgd2UgaGF2ZSBjb21tdXRhdGl2ZSBvcGVyYXRp
b25zIHRoYXQgdGFrZSBtb3JlIHRoYW4gdHdvIGNoaWxkcmVuLiBUaG9zZSBvcGVyYXRpb25zIG1h
eQorICAgICAgICAvLyBjb21tdXRlIHRoZWlyIGZpcnN0IHR3byBjaGlsZHJlbiB3aGlsZSBsZWF2
aW5nIHRoZSByZXN0IHVuYWZmZWN0ZWQuCisgICAgICAgIEFTU0VSVChtX3ZhbHVlLT5udW1DaGls
ZHJlbigpID49IDIpOworICAgICAgICAKICAgICAgICAgLy8gTGVhdmUgaXQgYWxvbmUgaWYgdGhl
IHJpZ2h0IGNoaWxkIGlzIGEgY29uc3RhbnQuCiAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgx
KS0+aXNDb25zdGFudCgpKQogICAgICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5jcHAJKHJldmlzaW9uIDE5MjQ3OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwVmFsdWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00OCw2ICs0OCwxMSBAQCB2b2lkIFN0YWNrbWFwVmFsdWU6OmFwcGVuZChjb25zdCBD
b25zdHJhCiAgICAgbV9yZXBzLmFwcGVuZChjb25zdHJhaW5lZFZhbHVlLnJlcCgpKTsKIH0KIAor
dm9pZCBTdGFja21hcFZhbHVlOjphcHBlbmRTb21lUmVnaXN0ZXIoVmFsdWUqIHZhbHVlKQorewor
ICAgIGFwcGVuZChDb25zdHJhaW5lZFZhbHVlKHZhbHVlLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVy
KSk7Cit9CisKIHZvaWQgU3RhY2ttYXBWYWx1ZTo6c2V0Q29uc3RyYWluZWRDaGlsZCh1bnNpZ25l
ZCBpbmRleCwgY29uc3QgQ29uc3RyYWluZWRWYWx1ZSYgY29uc3RyYWluZWRWYWx1ZSkKIHsKICAg
ICBjaGlsZChpbmRleCkgPSBjb25zdHJhaW5lZFZhbHVlLnZhbHVlKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5oCShyZXZpc2lvbiAxOTI0NzgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFZhbHVlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTc3LDYgKzc3LDEwIEBAIHB1YmxpYzoKICAgICAvLyBjaGlsZHJlbigpLmFwcGVuZCgp
LiBUaGF0IHdpbGwgd29yayBmaW5lLCBidXQgaXQncyBub3QgcmVjb21tZW5kZWQuCiAgICAgdm9p
ZCBhcHBlbmQoY29uc3QgQ29uc3RyYWluZWRWYWx1ZSYpOwogCisgICAgLy8gVGhpcyBpcyBhIGhl
bHBlciBmb3Igc29tZXRoaW5nIHlvdSBtaWdodCBkbyBhIGxvdCBvZjogYXBwZW5kIGEgdmFsdWUg
dGhhdCBzaG91bGQgYmUgY29uc3RyYWluZWQKKyAgICAvLyB0byBTb21lUmVnaXN0ZXIuCisgICAg
dm9pZCBhcHBlbmRTb21lUmVnaXN0ZXIoVmFsdWUqKTsKKwogICAgIGNvbnN0IFZlY3RvcjxWYWx1
ZVJlcD4mIHJlcHMoKSBjb25zdCB7IHJldHVybiBtX3JlcHM7IH0KIAogICAgIHZvaWQgY2xvYmJl
cihjb25zdCBSZWdpc3RlclNldCYgc2V0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1ZhbGlkYXRlLmNwcAkocmV2aXNpb24gMTkyNDc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzgsNiArMjc4LDggQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID49IDIs
ICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUoaXNJbnQodmFsdWUt
PmNoaWxkKDApLT50eXBlKCkpLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZB
TElEQVRFKGlzSW50KHZhbHVlLT5jaGlsZCgxKS0+dHlwZSgpKSwgKCJBdCAiLCAqdmFsdWUpKTsK
KyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+YXM8U3RhY2ttYXBWYWx1ZT4oKS0+Y29u
c3RyYWluZWRDaGlsZCgwKS5yZXAoKSA9PSBWYWx1ZVJlcDo6QW55LCAoIkF0ICIsICp2YWx1ZSkp
OworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5hczxTdGFja21hcFZhbHVlPigpLT5j
b25zdHJhaW5lZENoaWxkKDEpLnJlcCgpID09IFZhbHVlUmVwOjpBbnksICgiQXQgIiwgKnZhbHVl
KSk7CiAgICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFja21hcCh2YWx1ZSk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENoZWNrOgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1ZhbHVlLmNwcAkocmV2aXNpb24gMTkyNDc4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsNiArMTU0LDExIEBA
IFZhbHVlKiBWYWx1ZTo6Y2hlY2tNdWxDb25zdGFudChQcm9jZWR1cmUKICAgICByZXR1cm4gbnVs
bHB0cjsKIH0KIAorVmFsdWUqIFZhbHVlOjpjaGVja05lZ0NvbnN0YW50KFByb2NlZHVyZSYpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIFZhbHVlKiBWYWx1ZTo6ZGl2Q29uc3Rh
bnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqKSBjb25zdAogewogICAgIHJldHVybiBudWxscHRy
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCShyZXZpc2lvbiAxOTI0NzgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MSw2ICs0MSw3IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAogY2xhc3MgQmFz
aWNCbG9jazsKK2NsYXNzIENoZWNrVmFsdWU7CiBjbGFzcyBQcm9jZWR1cmU7CiAKIGNsYXNzIEpT
X0VYUE9SVF9QUklWQVRFIFZhbHVlIHsKQEAgLTExOCw2ICsxMTksNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBWYWx1ZSogY2hlY2tBZGRDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSog
b3RoZXIpIGNvbnN0OwogICAgIHZpcnR1YWwgVmFsdWUqIGNoZWNrU3ViQ29uc3RhbnQoUHJvY2Vk
dXJlJiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdDsKICAgICB2aXJ0dWFsIFZhbHVlKiBjaGVj
a011bENvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Q7CisgICAg
dmlydHVhbCBWYWx1ZSogY2hlY2tOZWdDb25zdGFudChQcm9jZWR1cmUmKSBjb25zdDsKICAgICB2
aXJ0dWFsIFZhbHVlKiBkaXZDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIp
IGNvbnN0OyAvLyBUaGlzIGNob29zZXMgQ2hpbGxEaXYgc2VtYW50aWNzIGZvciBpbnRlZ2Vycy4K
ICAgICB2aXJ0dWFsIFZhbHVlKiBiaXRBbmRDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1
ZSogb3RoZXIpIGNvbnN0OwogICAgIHZpcnR1YWwgVmFsdWUqIGJpdE9yQ29uc3RhbnQoUHJvY2Vk
dXJlJiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdDsKQEAgLTI3Miw2ICsyNzQsOCBAQCBwcm90
ZWN0ZWQ6CiAgICAgfQogCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDaGVja1ZhbHVlOyAv
LyBDaGVja1ZhbHVlOjpjb252ZXJ0VG9BZGQoKSBtb2RpZmllcyBtX29wY29kZS4KKyAgICAKICAg
ICBzdGF0aWMgVHlwZSB0eXBlRm9yKE9wY29kZSwgVmFsdWUqIGZpcnN0Q2hpbGQpOwogCiAgICAg
Ly8gVGhpcyBncm91cCBvZiBmaWVsZHMgaXMgYXJyYW5nZWQgdG8gZml0IGluIDY0IGJpdHMuCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkocmV2aXNpb24gMTkyNDc4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
NSw3ICsyOTUsOCBAQCB2b2lkIHRlc3RNdWxBcmcoaW50IGEpCiB7CiAgICAgUHJvY2VkdXJlIHBy
b2M7CiAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKLSAgICBWYWx1ZSog
dmFsdWUgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgVmFsdWUqIHZhbHVlID0gcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPigKKyAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLCByb290LT5hcHBlbmRO
ZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BS
MCkpOwogICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAogICAgICAgICBwcm9jLCBS
ZXR1cm4sIE9yaWdpbigpLAogICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIE11
bCwgT3JpZ2luKCksIHZhbHVlLCB2YWx1ZSkpOwpAQCAtMzAzLDYgKzMwNCw1MSBAQCB2b2lkIHRl
c3RNdWxBcmcoaW50IGEpCiAgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MsIGEpID09
IGEgKiBhKTsKIH0KIAordm9pZCB0ZXN0TXVsQXJnU3RvcmUoaW50IGEpCit7CisgICAgUHJvY2Vk
dXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAg
IGludCBtdWxTbG90OworICAgIGludCB2YWx1ZVNsb3Q7CisgICAgCisgICAgVmFsdWUqIHZhbHVl
ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigp
LAorICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgIFZhbHVlKiBtdWwgPSByb290LT5hcHBl
bmROZXc8VmFsdWU+KHByb2MsIE11bCwgT3JpZ2luKCksIHZhbHVlLCB2YWx1ZSk7CisKKyAgICBy
b290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KAorICAgICAgICBwcm9jLCBTdG9yZSwgT3JpZ2lu
KCksIHZhbHVlLAorICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywg
T3JpZ2luKCksICZ2YWx1ZVNsb3QpKTsKKyAgICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+
KAorICAgICAgICBwcm9jLCBTdG9yZSwgT3JpZ2luKCksIG11bCwKKyAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAmbXVsU2xvdCkpOworCisgICAg
cm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3Jp
Z2luKCksIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSk7
CisKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MsIGEpKTsKKyAgICBDSEVDSyht
dWxTbG90ID09IGEgKiBhKTsKKyAgICBDSEVDSyh2YWx1ZVNsb3QgPT0gYSk7Cit9CisKK3ZvaWQg
dGVzdE11bEFkZEFyZyhpbnQgYSkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Js
b2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiB2YWx1ZSA9IHJvb3QtPmFw
cGVuZE5ldzxWYWx1ZT4oCisgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAg
cm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjApKTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAg
ICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZh
bHVlPigKKyAgICAgICAgICAgIHByb2MsIEFkZCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIE11bCwgT3JpZ2luKCksIHZhbHVlLCB2YWx1ZSksCisg
ICAgICAgICAgICB2YWx1ZSkpOworCisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2Ms
IGEpID09IGEgKiBhICsgYSk7Cit9CisKIHZvaWQgdGVzdE11bEFyZ3MoaW50IGEsIGludCBiKQog
ewogICAgIFByb2NlZHVyZSBwcm9jOwpAQCAtMjg0MSw4ICsyODg3LDYgQEAgdm9pZCB0ZXN0U2lt
cGxlQ2hlY2soKQogICAgIGNoZWNrLT5zZXRHZW5lcmF0b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAg
ICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwcy5zaXplKCkgPT0gMSk7Ci0gICAgICAgICAgICBD
SEVDSyhwYXJhbXMucmVwc1swXS5pc0NvbnN0YW50KCkpOwotICAgICAgICAgICAgQ0hFQ0socGFy
YW1zLnJlcHNbMF0udmFsdWUoKSA9PSAxKTsKIAogICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQg
YWx3YXlzIHdvcmsgYmVjYXVzZSBhIGZ1bmN0aW9uIHRoaXMgc2ltcGxlIHNob3VsZCBuZXZlciBo
YXZlIGNhbGxlZQogICAgICAgICAgICAgLy8gc2F2ZXMuCkBAIC0yODc0LDggKzI5MTgsNiBAQCB2
b2lkIHRlc3RDaGVja0xlc3NUaGFuKCkKICAgICBjaGVjay0+c2V0R2VuZXJhdG9yKAogICAgICAg
ICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMm
IHBhcmFtcykgewogICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDEpOwot
ICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMF0uaXNDb25zdGFudCgpKTsKLSAgICAgICAg
ICAgIENIRUNLKHBhcmFtcy5yZXBzWzBdLnZhbHVlKCkgPT0gMSk7CiAKICAgICAgICAgICAgIC8v
IFRoaXMgc2hvdWxkIGFsd2F5cyB3b3JrIGJlY2F1c2UgYSBmdW5jdGlvbiB0aGlzIHNpbXBsZSBz
aG91bGQgbmV2ZXIgaGF2ZSBjYWxsZWUKICAgICAgICAgICAgIC8vIHNhdmVzLgpAQCAtMjkyMSw4
ICsyOTYzLDYgQEAgdm9pZCB0ZXN0Q2hlY2tNZWdhQ29tYm8oKQogICAgIGNoZWNrLT5zZXRHZW5l
cmF0b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwcy5z
aXplKCkgPT0gMSk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1swXS5pc0NvbnN0YW50
KCkpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMF0udmFsdWUoKSA9PSAxKTsKIAog
ICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgYWx3YXlzIHdvcmsgYmVjYXVzZSBhIGZ1bmN0aW9u
IHRoaXMgc2ltcGxlIHNob3VsZCBuZXZlciBoYXZlIGNhbGxlZQogICAgICAgICAgICAgLy8gc2F2
ZXMuCkBAIC0yOTU3LDE0ICsyOTk3LDUwIEBAIHZvaWQgdGVzdENoZWNrQWRkSW1tKCkKICAgICAg
ICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjApKTsKICAgICBWYWx1ZSogYXJnMiA9IHJvb3QtPmFwcGVuZE5ldzxD
b25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCA0Mik7CiAgICAgQ2hlY2tWYWx1ZSogY2hlY2tB
ZGQgPSByb290LT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4ocHJvYywgQ2hlY2tBZGQsIE9yaWdpbigp
LCBhcmcxLCBhcmcyKTsKKyAgICBjaGVja0FkZC0+YXBwZW5kKGFyZzEpOworICAgIGNoZWNrQWRk
LT5hcHBlbmQoYXJnMik7CiAgICAgY2hlY2tBZGQtPnNldEdlbmVyYXRvcigKICAgICAgICAgWyZd
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJh
bXMpIHsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSAyKTsKLSAgICAg
ICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzBdLmlzR1BSKCkpOwotICAgICAgICAgICAgQ0hFQ0so
cGFyYW1zLnJlcHNbMV0uaXNDb25zdGFudCgpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5y
ZXBzWzFdLnZhbHVlKCkgPT0gNDIpOwotICAgICAgICAgICAgaml0LnN1YjMyKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKDQyKSwgcGFyYW1zLnJlcHNbMF0uZ3ByKCkpOwotICAgICAgICAgICAg
aml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBhcmFtcy5yZXBzWzBdLmdwcigpLCBGUFJJbmZvOjpm
cFJlZ1QwKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSA0KTsKKyAg
ICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzJdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hF
Q0socGFyYW1zLnJlcHNbM10uaXNDb25zdGFudCgpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFt
cy5yZXBzWzNdLnZhbHVlKCkgPT0gNDIpOworICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRv
RG91YmxlKHBhcmFtcy5yZXBzWzJdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAg
ICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMig0
MiksIEZQUkluZm86OmZwUmVnVDEpOworICAgICAgICAgICAgaml0LmFkZERvdWJsZShGUFJJbmZv
OjpmcFJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5lbWl0RnVuY3Rp
b25FcGlsb2d1ZSgpOworICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICB9KTsKKyAgICBy
b290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmln
aW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBJVG9ELCBPcmlnaW4o
KSwgY2hlY2tBZGQpKTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisKKyAgICBD
SEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgMCkgPT0gNDIuMCk7CisgICAgQ0hFQ0soaW52b2tl
PGRvdWJsZT4oKmNvZGUsIDEpID09IDQzLjApOworICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpj
b2RlLCA0MikgPT0gODQuMCk7CisgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDIxNDc0
ODM2NDcpID09IDIxNDc0ODM2ODkuMCk7Cit9CisKK3ZvaWQgdGVzdENoZWNrQWRkSW1tQ29tbXV0
ZSgpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2Mu
YWRkQmxvY2soKTsKKyAgICBWYWx1ZSogYXJnMSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisg
ICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFy
Z3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsK
KyAgICBWYWx1ZSogYXJnMiA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9y
aWdpbigpLCA0Mik7CisgICAgQ2hlY2tWYWx1ZSogY2hlY2tBZGQgPSByb290LT5hcHBlbmROZXc8
Q2hlY2tWYWx1ZT4ocHJvYywgQ2hlY2tBZGQsIE9yaWdpbigpLCBhcmcyLCBhcmcxKTsKKyAgICBj
aGVja0FkZC0+YXBwZW5kKGFyZzEpOworICAgIGNoZWNrQWRkLT5hcHBlbmQoYXJnMik7CisgICAg
Y2hlY2tBZGQtPnNldEdlbmVyYXRvcigKKyAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIENI
RUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSA0KTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5y
ZXBzWzJdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbM10uaXNDb25z
dGFudCgpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzNdLnZhbHVlKCkgPT0gNDIp
OworICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBhcmFtcy5yZXBzWzJdLmdw
cigpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKICAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0Rv
dWJsZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMig0MiksIEZQUkluZm86OmZwUmVnVDEpOwog
ICAgICAgICAgICAgaml0LmFkZERvdWJsZShGUFJJbmZvOjpmcFJlZ1QxLCBGUFJJbmZvOjpmcFJl
Z1QwKTsKICAgICAgICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwpAQCAtMjk4Miw2
ICszMDU4LDQwIEBAIHZvaWQgdGVzdENoZWNrQWRkSW1tKCkKICAgICBDSEVDSyhpbnZva2U8ZG91
YmxlPigqY29kZSwgMjE0NzQ4MzY0NykgPT0gMjE0NzQ4MzY4OS4wKTsKIH0KIAordm9pZCB0ZXN0
Q2hlY2tBZGRJbW1Tb21lUmVnaXN0ZXIoKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJh
c2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgVmFsdWUqIGFyZzEgPSByb290
LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgVmFsdWUqIGFyZzIgPSByb290LT5hcHBlbmROZXc8
Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgNDIpOworICAgIENoZWNrVmFsdWUqIGNoZWNr
QWRkID0gcm9vdC0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KHByb2MsIENoZWNrQWRkLCBPcmlnaW4o
KSwgYXJnMSwgYXJnMik7CisgICAgY2hlY2tBZGQtPmFwcGVuZFNvbWVSZWdpc3RlcihhcmcxKTsK
KyAgICBjaGVja0FkZC0+YXBwZW5kU29tZVJlZ2lzdGVyKGFyZzIpOworICAgIGNoZWNrQWRkLT5z
ZXRHZW5lcmF0b3IoCisgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMu
cmVwcy5zaXplKCkgPT0gNCk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1syXS5pc0dQ
UigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzNdLmlzR1BSKCkpOworICAgICAg
ICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBhcmFtcy5yZXBzWzJdLmdwcigpLCBGUFJJ
bmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJh
bXMucmVwc1szXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAgICAgICAgICBqaXQuYWRk
RG91YmxlKEZQUkluZm86OmZwUmVnVDEsIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICAgICAg
aml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAg
ICAgIH0pOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9j
LCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2Ms
IElUb0QsIE9yaWdpbigpLCBjaGVja0FkZCkpOworCisgICAgYXV0byBjb2RlID0gY29tcGlsZShw
cm9jKTsKKworICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCAwKSA9PSA0Mi4wKTsKKyAg
ICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgMSkgPT0gNDMuMCk7CisgICAgQ0hFQ0soaW52
b2tlPGRvdWJsZT4oKmNvZGUsIDQyKSA9PSA4NC4wKTsKKyAgICBDSEVDSyhpbnZva2U8ZG91Ymxl
PigqY29kZSwgMjE0NzQ4MzY0NykgPT0gMjE0NzQ4MzY4OS4wKTsKK30KKwogdm9pZCB0ZXN0Q2hl
Y2tBZGQoKQogewogICAgIFByb2NlZHVyZSBwcm9jOwpAQCAtMjk5MywxNCArMzEwMywxNSBAQCB2
b2lkIHRlc3RDaGVja0FkZCgpCiAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwKICAgICAg
ICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjEpKTsKICAgICBDaGVja1ZhbHVlKiBjaGVja0FkZCA9IHJvb3QtPmFw
cGVuZE5ldzxDaGVja1ZhbHVlPihwcm9jLCBDaGVja0FkZCwgT3JpZ2luKCksIGFyZzEsIGFyZzIp
OworICAgIGNoZWNrQWRkLT5hcHBlbmRTb21lUmVnaXN0ZXIoYXJnMSk7CisgICAgY2hlY2tBZGQt
PmFwcGVuZFNvbWVSZWdpc3RlcihhcmcyKTsKICAgICBjaGVja0FkZC0+c2V0R2VuZXJhdG9yKAog
ICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmIHBhcmFtcykgewotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09
IDIpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMF0uaXNHUFIoKSk7Ci0gICAgICAg
ICAgICBDSEVDSyhwYXJhbXMucmVwc1sxXS5pc0dQUigpKTsKLSAgICAgICAgICAgIGppdC5zdWIz
MihwYXJhbXMucmVwc1sxXS5ncHIoKSwgcGFyYW1zLnJlcHNbMF0uZ3ByKCkpOwotICAgICAgICAg
ICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBhcmFtcy5yZXBzWzBdLmdwcigpLCBGUFJJbmZv
OjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXMu
cmVwc1sxXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAgICAgICAgICBDSEVDSyhwYXJh
bXMucmVwcy5zaXplKCkgPT0gNCk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1syXS5p
c0dQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzNdLmlzR1BSKCkpOworICAg
ICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBhcmFtcy5yZXBzWzJdLmdwcigpLCBG
UFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShw
YXJhbXMucmVwc1szXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CiAgICAgICAgICAgICBqaXQu
YWRkRG91YmxlKEZQUkluZm86OmZwUmVnVDEsIEZQUkluZm86OmZwUmVnVDApOwogICAgICAgICAg
ICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgICAgICAgICBqaXQucmV0KCk7CkBA
IC0zMDI0LDE0ICszMTM1LDE1IEBAIHZvaWQgdGVzdENoZWNrQWRkNjQoKQogICAgIFZhbHVlKiBh
cmcxID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBH
UFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgIFZhbHVlKiBhcmcyID0gcm9vdC0+YXBwZW5kTmV3
PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEp
OwogICAgIENoZWNrVmFsdWUqIGNoZWNrQWRkID0gcm9vdC0+YXBwZW5kTmV3PENoZWNrVmFsdWU+
KHByb2MsIENoZWNrQWRkLCBPcmlnaW4oKSwgYXJnMSwgYXJnMik7CisgICAgY2hlY2tBZGQtPmFw
cGVuZFNvbWVSZWdpc3RlcihhcmcxKTsKKyAgICBjaGVja0FkZC0+YXBwZW5kU29tZVJlZ2lzdGVy
KGFyZzIpOwogICAgIGNoZWNrQWRkLT5zZXRHZW5lcmF0b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7Ci0g
ICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwcy5zaXplKCkgPT0gMik7Ci0gICAgICAgICAgICBD
SEVDSyhwYXJhbXMucmVwc1swXS5pc0dQUigpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5y
ZXBzWzFdLmlzR1BSKCkpOwotICAgICAgICAgICAgaml0LnN1YjY0KHBhcmFtcy5yZXBzWzFdLmdw
cigpLCBwYXJhbXMucmVwc1swXS5ncHIoKSk7Ci0gICAgICAgICAgICBqaXQuY29udmVydEludDY0
VG9Eb3VibGUocGFyYW1zLnJlcHNbMF0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDApOwotICAgICAg
ICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKHBhcmFtcy5yZXBzWzFdLmdwcigpLCBGUFJJ
bmZvOjpmcFJlZ1QxKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSA0
KTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzJdLmlzR1BSKCkpOworICAgICAgICAg
ICAgQ0hFQ0socGFyYW1zLnJlcHNbM10uaXNHUFIoKSk7CisgICAgICAgICAgICBqaXQuY29udmVy
dEludDY0VG9Eb3VibGUocGFyYW1zLnJlcHNbMl0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDApOwor
ICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKHBhcmFtcy5yZXBzWzNdLmdwcigp
LCBGUFJJbmZvOjpmcFJlZ1QxKTsKICAgICAgICAgICAgIGppdC5hZGREb3VibGUoRlBSSW5mbzo6
ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CiAgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9u
RXBpbG9ndWUoKTsKICAgICAgICAgICAgIGppdC5yZXQoKTsKQEAgLTMwOTUsMTQgKzMyMDcsMTUg
QEAgdm9pZCB0ZXN0Q2hlY2tTdWJJbW0oKQogICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1l
bnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOwogICAg
IFZhbHVlKiBhcmcyID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIDQyKTsKICAgICBDaGVja1ZhbHVlKiBjaGVja1N1YiA9IHJvb3QtPmFwcGVuZE5ldzxDaGVj
a1ZhbHVlPihwcm9jLCBDaGVja1N1YiwgT3JpZ2luKCksIGFyZzEsIGFyZzIpOworICAgIGNoZWNr
U3ViLT5hcHBlbmQoYXJnMSk7CisgICAgY2hlY2tTdWItPmFwcGVuZChhcmcyKTsKICAgICBjaGVj
a1N1Yi0+c2V0R2VuZXJhdG9yKAogICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewotICAgICAgICAgICAgQ0hFQ0so
cGFyYW1zLnJlcHMuc2l6ZSgpID09IDIpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNb
MF0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1sxXS5pc0NvbnN0YW50
KCkpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMV0udmFsdWUoKSA9PSA0Mik7Ci0g
ICAgICAgICAgICBqaXQuYWRkMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoNDIpLCBwYXJh
bXMucmVwc1swXS5ncHIoKSk7Ci0gICAgICAgICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUo
cGFyYW1zLnJlcHNbMF0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICAgICAgQ0hF
Q0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDQpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJl
cHNbMl0uaXNHUFIoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1szXS5pc0NvbnN0
YW50KCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbM10udmFsdWUoKSA9PSA0Mik7
CisgICAgICAgICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUocGFyYW1zLnJlcHNbMl0uZ3By
KCksIEZQUkluZm86OmZwUmVnVDApOwogICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91
YmxlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDQyKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CiAg
ICAgICAgICAgICBqaXQuc3ViRG91YmxlKEZQUkluZm86OmZwUmVnVDEsIEZQUkluZm86OmZwUmVn
VDApOwogICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CkBAIC0zMTIwLDYg
KzMyMzMsNDIgQEAgdm9pZCB0ZXN0Q2hlY2tTdWJJbW0oKQogICAgIENIRUNLKGludm9rZTxkb3Vi
bGU+KCpjb2RlLCAtMjE0NzQ4MzY0NykgPT0gLTIxNDc0ODM2ODkuMCk7CiB9CiAKK3ZvaWQgdGVz
dENoZWNrU3ViQmFkSW1tKCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2Nr
KiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiBhcmcxID0gcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPigKKyAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICByb290
LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFy
Z3VtZW50R1BSMCkpOworICAgIGludDMyX3QgYmFkSW1tID0gc3RkOjpudW1lcmljX2xpbWl0czxp
bnQ+OjptaW4oKTsKKyAgICBWYWx1ZSogYXJnMiA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBiYWRJbW0pOworICAgIENoZWNrVmFsdWUqIGNoZWNrU3ViID0g
cm9vdC0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KHByb2MsIENoZWNrU3ViLCBPcmlnaW4oKSwgYXJn
MSwgYXJnMik7CisgICAgY2hlY2tTdWItPmFwcGVuZChhcmcxKTsKKyAgICBjaGVja1N1Yi0+YXBw
ZW5kKGFyZzIpOworICAgIGNoZWNrU3ViLT5zZXRHZW5lcmF0b3IoCisgICAgICAgIFsmXSAoQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7
CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwcy5zaXplKCkgPT0gNCk7CisgICAgICAgICAg
ICBDSEVDSyhwYXJhbXMucmVwc1syXS5pc0dQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFt
cy5yZXBzWzNdLmlzQ29uc3RhbnQoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1sz
XS52YWx1ZSgpID09IGJhZEltbSk7CisgICAgICAgICAgICBqaXQuY29udmVydEludDMyVG9Eb3Vi
bGUocGFyYW1zLnJlcHNbMl0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICAgICAg
aml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGJhZElt
bSksIEZQUkluZm86OmZwUmVnVDEpOworICAgICAgICAgICAgaml0LnN1YkRvdWJsZShGUFJJbmZv
OjpmcFJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5lbWl0RnVuY3Rp
b25FcGlsb2d1ZSgpOworICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICB9KTsKKyAgICBy
b290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmln
aW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBJVG9ELCBPcmlnaW4o
KSwgY2hlY2tTdWIpKTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisKKyAgICBD
SEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgMCkgPT0gLXN0YXRpY19jYXN0PGRvdWJsZT4oYmFk
SW1tKSk7CisgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIC0xKSA9PSAtc3RhdGljX2Nh
c3Q8ZG91YmxlPihiYWRJbW0pIC0gMSk7CisgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUs
IDEpID09IC1zdGF0aWNfY2FzdDxkb3VibGU+KGJhZEltbSkgKyAxKTsKKyAgICBDSEVDSyhpbnZv
a2U8ZG91YmxlPigqY29kZSwgNDIpID09IC1zdGF0aWNfY2FzdDxkb3VibGU+KGJhZEltbSkgKyA0
Mik7Cit9CisKIHZvaWQgdGVzdENoZWNrU3ViKCkKIHsKICAgICBQcm9jZWR1cmUgcHJvYzsKQEAg
LTMxMzEsMTQgKzMyODAsMTUgQEAgdm9pZCB0ZXN0Q2hlY2tTdWIoKQogICAgICAgICBwcm9jLCBU
cnVuYywgT3JpZ2luKCksCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSk7CiAgICAgQ2hlY2tWYWx1
ZSogY2hlY2tTdWIgPSByb290LT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4ocHJvYywgQ2hlY2tTdWIs
IE9yaWdpbigpLCBhcmcxLCBhcmcyKTsKKyAgICBjaGVja1N1Yi0+YXBwZW5kKGFyZzEpOworICAg
IGNoZWNrU3ViLT5hcHBlbmQoYXJnMik7CiAgICAgY2hlY2tTdWItPnNldEdlbmVyYXRvcigKICAg
ICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zJiBwYXJhbXMpIHsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSAy
KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzBdLmlzR1BSKCkpOwotICAgICAgICAg
ICAgQ0hFQ0socGFyYW1zLnJlcHNbMV0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBqaXQuYWRkMzIo
cGFyYW1zLnJlcHNbMV0uZ3ByKCksIHBhcmFtcy5yZXBzWzBdLmdwcigpKTsKLSAgICAgICAgICAg
IGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXMucmVwc1swXS5ncHIoKSwgRlBSSW5mbzo6
ZnBSZWdUMCk7Ci0gICAgICAgICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUocGFyYW1zLnJl
cHNbMV0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDEpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1z
LnJlcHMuc2l6ZSgpID09IDQpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMl0uaXNH
UFIoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1szXS5pc0dQUigpKTsKKyAgICAg
ICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXMucmVwc1syXS5ncHIoKSwgRlBS
SW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUocGFy
YW1zLnJlcHNbM10uZ3ByKCksIEZQUkluZm86OmZwUmVnVDEpOwogICAgICAgICAgICAgaml0LnN1
YkRvdWJsZShGUFJJbmZvOjpmcFJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1QwKTsKICAgICAgICAgICAg
IGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgICAgICAgICAgaml0LnJldCgpOwpAQCAt
MzE2NywxNCArMzMxNywxNSBAQCB2b2lkIHRlc3RDaGVja1N1YjY0KCkKICAgICBWYWx1ZSogYXJn
MSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICBWYWx1ZSogYXJnMiA9IHJvb3QtPmFwcGVuZE5ldzxB
cmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsK
ICAgICBDaGVja1ZhbHVlKiBjaGVja1N1YiA9IHJvb3QtPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihw
cm9jLCBDaGVja1N1YiwgT3JpZ2luKCksIGFyZzEsIGFyZzIpOworICAgIGNoZWNrU3ViLT5hcHBl
bmQoYXJnMSk7CisgICAgY2hlY2tTdWItPmFwcGVuZChhcmcyKTsKICAgICBjaGVja1N1Yi0+c2V0
R2VuZXJhdG9yKAogICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJl
cHMuc2l6ZSgpID09IDIpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMF0uaXNHUFIo
KSk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1sxXS5pc0dQUigpKTsKLSAgICAgICAg
ICAgIGppdC5hZGQ2NChwYXJhbXMucmVwc1sxXS5ncHIoKSwgcGFyYW1zLnJlcHNbMF0uZ3ByKCkp
OwotICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKHBhcmFtcy5yZXBzWzBdLmdw
cigpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0SW50NjRUb0Rv
dWJsZShwYXJhbXMucmVwc1sxXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAgICAgICAg
ICBDSEVDSyhwYXJhbXMucmVwcy5zaXplKCkgPT0gNCk7CisgICAgICAgICAgICBDSEVDSyhwYXJh
bXMucmVwc1syXS5pc0dQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzNdLmlz
R1BSKCkpOworICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKHBhcmFtcy5yZXBz
WzJdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50
NjRUb0RvdWJsZShwYXJhbXMucmVwc1szXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CiAgICAg
ICAgICAgICBqaXQuc3ViRG91YmxlKEZQUkluZm86OmZwUmVnVDEsIEZQUkluZm86OmZwUmVnVDAp
OwogICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgICAgICAgICBq
aXQucmV0KCk7CkBAIC0zMjM4LDEzICszMzg5LDEyIEBAIHZvaWQgdGVzdENoZWNrTmVnKCkKICAg
ICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAogICAgICAgICByb290LT5hcHBlbmROZXc8QXJn
dW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOwog
ICAgIENoZWNrVmFsdWUqIGNoZWNrTmVnID0gcm9vdC0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KHBy
b2MsIENoZWNrU3ViLCBPcmlnaW4oKSwgYXJnMSwgYXJnMik7CisgICAgY2hlY2tOZWctPmFwcGVu
ZChhcmcyKTsKICAgICBjaGVja05lZy0+c2V0R2VuZXJhdG9yKAogICAgICAgICBbJl0gKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewot
ICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDIpOwotICAgICAgICAgICAg
Q0hFQ0socGFyYW1zLnJlcHNbMF0gPT0gVmFsdWVSZXA6OmNvbnN0YW50KDApKTsKLSAgICAgICAg
ICAgIENIRUNLKHBhcmFtcy5yZXBzWzFdLmlzR1BSKCkpOwotICAgICAgICAgICAgaml0Lm5lZzMy
KHBhcmFtcy5yZXBzWzFdLmdwcigpKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0Rv
dWJsZShwYXJhbXMucmVwc1sxXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAgICAgICAg
ICBDSEVDSyhwYXJhbXMucmVwcy5zaXplKCkgPT0gMyk7CisgICAgICAgICAgICBDSEVDSyhwYXJh
bXMucmVwc1syXS5pc0dQUigpKTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJs
ZShwYXJhbXMucmVwc1syXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CiAgICAgICAgICAgICBq
aXQubmVnYXRlRG91YmxlKEZQUkluZm86OmZwUmVnVDEsIEZQUkluZm86OmZwUmVnVDApOwogICAg
ICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgICAgICAgICBqaXQucmV0
KCk7CkBAIC0zMjY4LDEzICszNDE4LDEyIEBAIHZvaWQgdGVzdENoZWNrTmVnNjQoKQogICAgIFZh
bHVlKiBhcmcxID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IDApOwogICAgIFZhbHVlKiBhcmcyID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgIENoZWNrVmFsdWUq
IGNoZWNrTmVnID0gcm9vdC0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KHByb2MsIENoZWNrU3ViLCBP
cmlnaW4oKSwgYXJnMSwgYXJnMik7CisgICAgY2hlY2tOZWctPmFwcGVuZChhcmcyKTsKICAgICBj
aGVja05lZy0+c2V0R2VuZXJhdG9yKAogICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewotICAgICAgICAgICAgQ0hF
Q0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDIpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJl
cHNbMF0gPT0gVmFsdWVSZXA6OmNvbnN0YW50KDApKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFt
cy5yZXBzWzFdLmlzR1BSKCkpOwotICAgICAgICAgICAgaml0Lm5lZzY0KHBhcmFtcy5yZXBzWzFd
LmdwcigpKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0SW50NjRUb0RvdWJsZShwYXJhbXMucmVw
c1sxXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMu
cmVwcy5zaXplKCkgPT0gMyk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1syXS5pc0dQ
UigpKTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50NjRUb0RvdWJsZShwYXJhbXMucmVwc1sy
XS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CiAgICAgICAgICAgICBqaXQubmVnYXRlRG91Ymxl
KEZQUkluZm86OmZwUmVnVDEsIEZQUkluZm86OmZwUmVnVDApOwogICAgICAgICAgICAgaml0LmVt
aXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgICAgICAgICBqaXQucmV0KCk7CkBAIC0zMzAyLDEz
ICszNDUxLDE1IEBAIHZvaWQgdGVzdENoZWNrTXVsKCkKICAgICAgICAgcHJvYywgVHJ1bmMsIE9y
aWdpbigpLAogICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSkpOwogICAgIENoZWNrVmFsdWUqIGNoZWNr
TXVsID0gcm9vdC0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KHByb2MsIENoZWNrTXVsLCBPcmlnaW4o
KSwgYXJnMSwgYXJnMik7CisgICAgY2hlY2tNdWwtPmFwcGVuZChhcmcxKTsKKyAgICBjaGVja011
bC0+YXBwZW5kKGFyZzIpOwogICAgIGNoZWNrTXVsLT5zZXRHZW5lcmF0b3IoCiAgICAgICAgIFsm
XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFy
YW1zKSB7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwcy5zaXplKCkgPT0gMik7Ci0gICAg
ICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1swXS5pc0dQUigpKTsKLSAgICAgICAgICAgIENIRUNL
KHBhcmFtcy5yZXBzWzFdLmlzR1BSKCkpOwotICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRv
RG91YmxlKHBhcmFtcy5yZXBzWzBdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAg
ICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXMucmVwc1sxXS5ncHIoKSwgRlBSSW5m
bzo6ZnBSZWdUMSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwcy5zaXplKCkgPT0gNCk7
CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1syXS5pc0dQUigpKTsKKyAgICAgICAgICAg
IENIRUNLKHBhcmFtcy5yZXBzWzNdLmlzR1BSKCkpOworICAgICAgICAgICAgaml0LmNvbnZlcnRJ
bnQzMlRvRG91YmxlKHBhcmFtcy5yZXBzWzJdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAg
ICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXMucmVwc1szXS5ncHIoKSwg
RlBSSW5mbzo6ZnBSZWdUMSk7CiAgICAgICAgICAgICBqaXQubXVsRG91YmxlKEZQUkluZm86OmZw
UmVnVDEsIEZQUkluZm86OmZwUmVnVDApOwogICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVw
aWxvZ3VlKCk7CiAgICAgICAgICAgICBqaXQucmV0KCk7CkBAIC0zMzI1LDYgKzM0NzYsNDIgQEAg
dm9pZCB0ZXN0Q2hlY2tNdWwoKQogICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCAyMTQ3
NDgzNjQ3LCA0MikgPT0gMjE0NzQ4MzY0Ny4wICogNDIuMCk7CiB9CiAKK3ZvaWQgdGVzdENoZWNr
TXVsMigpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHBy
b2MuYWRkQmxvY2soKTsKKyAgICBWYWx1ZSogYXJnMSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
CisgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjAp
KTsKKyAgICBWYWx1ZSogYXJnMiA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCAyKTsKKyAgICBDaGVja1ZhbHVlKiBjaGVja011bCA9IHJvb3QtPmFwcGVuZE5l
dzxDaGVja1ZhbHVlPihwcm9jLCBDaGVja011bCwgT3JpZ2luKCksIGFyZzEsIGFyZzIpOworICAg
IGNoZWNrTXVsLT5hcHBlbmQoYXJnMSk7CisgICAgY2hlY2tNdWwtPmFwcGVuZChhcmcyKTsKKyAg
ICBjaGVja011bC0+c2V0R2VuZXJhdG9yKAorICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAg
Q0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDQpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1z
LnJlcHNbMl0uaXNHUFIoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1szXS5pc0Nv
bnN0YW50KCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbM10udmFsdWUoKSA9PSAy
KTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXMucmVwc1syXS5n
cHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAgICBqaXQuY29udmVydEludDMyVG9E
b3VibGUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMiksIEZQUkluZm86OmZwUmVnVDEpOwor
ICAgICAgICAgICAgaml0Lm11bERvdWJsZShGUFJJbmZvOjpmcFJlZ1QxLCBGUFJJbmZvOjpmcFJl
Z1QwKTsKKyAgICAgICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAgICAgICAg
ICAgaml0LnJldCgpOworICAgICAgICB9KTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZh
bHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBJVG9ELCBPcmlnaW4oKSwgY2hlY2tNdWwpKTsKKworICAgIGF1
dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisKKyAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29k
ZSwgMCkgPT0gMC4wKTsKKyAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgMSkgPT0gMi4w
KTsKKyAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgNDIpID09IDQyLjAgKiAyLjApOwor
ICAgIGRhdGFMb2coIlJlc3VsdDogIiwgaW52b2tlPGRvdWJsZT4oKmNvZGUsIDIxNDc0ODM2NDcp
LCAiXG4iKTsKKyAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgMjE0NzQ4MzY0NykgPT0g
MjE0NzQ4MzY0Ny4wICogMi4wKTsKK30KKwogdm9pZCB0ZXN0Q2hlY2tNdWw2NCgpCiB7CiAgICAg
UHJvY2VkdXJlIHByb2M7CkBAIC0zMzMyLDEzICszNTE5LDE1IEBAIHZvaWQgdGVzdENoZWNrTXVs
NjQoKQogICAgIFZhbHVlKiBhcmcxID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgIFZhbHVlKiBhcmcy
ID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjEpOwogICAgIENoZWNrVmFsdWUqIGNoZWNrTXVsID0gcm9vdC0+YXBw
ZW5kTmV3PENoZWNrVmFsdWU+KHByb2MsIENoZWNrTXVsLCBPcmlnaW4oKSwgYXJnMSwgYXJnMik7
CisgICAgY2hlY2tNdWwtPmFwcGVuZChhcmcxKTsKKyAgICBjaGVja011bC0+YXBwZW5kKGFyZzIp
OwogICAgIGNoZWNrTXVsLT5zZXRHZW5lcmF0b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7Ci0gICAgICAg
ICAgICBDSEVDSyhwYXJhbXMucmVwcy5zaXplKCkgPT0gMik7Ci0gICAgICAgICAgICBDSEVDSyhw
YXJhbXMucmVwc1swXS5pc0dQUigpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzFd
LmlzR1BSKCkpOwotICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKHBhcmFtcy5y
ZXBzWzBdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0
SW50NjRUb0RvdWJsZShwYXJhbXMucmVwc1sxXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7Cisg
ICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwcy5zaXplKCkgPT0gNCk7CisgICAgICAgICAgICBD
SEVDSyhwYXJhbXMucmVwc1syXS5pc0dQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5y
ZXBzWzNdLmlzR1BSKCkpOworICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKHBh
cmFtcy5yZXBzWzJdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5j
b252ZXJ0SW50NjRUb0RvdWJsZShwYXJhbXMucmVwc1szXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdU
MSk7CiAgICAgICAgICAgICBqaXQubXVsRG91YmxlKEZQUkluZm86OmZwUmVnVDEsIEZQUkluZm86
OmZwUmVnVDApOwogICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAg
ICAgICAgICBqaXQucmV0KCk7CkBAIC00MDIyLDYgKzQyMTEsMTAgQEAgdm9pZCBydW4oY29uc3Qg
Y2hhciogZmlsdGVyKQogICAgIFJVTih0ZXN0QWRkSW1tc0RvdWJsZShuZWdhdGl2ZVplcm8oKSwg
bmVnYXRpdmVaZXJvKCkpKTsKIAogICAgIFJVTih0ZXN0TXVsQXJnKDUpKTsKKyAgICBSVU4odGVz
dE11bEFkZEFyZyg1KSk7CisgICAgUlVOKHRlc3RNdWxBZGRBcmcoODUpKTsKKyAgICBSVU4odGVz
dE11bEFyZ1N0b3JlKDUpKTsKKyAgICBSVU4odGVzdE11bEFyZ1N0b3JlKDg1KSk7CiAgICAgUlVO
KHRlc3RNdWxBcmdzKDEsIDEpKTsKICAgICBSVU4odGVzdE11bEFyZ3MoMSwgMikpOwogICAgIFJV
Tih0ZXN0TXVsQXJncygzLCAzKSk7CkBAIC00NDM3LDExICs0NjMwLDE0IEBAIHZvaWQgcnVuKGNv
bnN0IGNoYXIqIGZpbHRlcikKICAgICBSVU4odGVzdENoZWNrTGVzc1RoYW4oKSk7CiAgICAgUlVO
KHRlc3RDaGVja01lZ2FDb21ibygpKTsKICAgICBSVU4odGVzdENoZWNrQWRkSW1tKCkpOworICAg
IFJVTih0ZXN0Q2hlY2tBZGRJbW1Db21tdXRlKCkpOworICAgIFJVTih0ZXN0Q2hlY2tBZGRJbW1T
b21lUmVnaXN0ZXIoKSk7CiAgICAgUlVOKHRlc3RDaGVja0FkZCgpKTsKICAgICBSVU4odGVzdENo
ZWNrQWRkNjQoKSk7CiAgICAgUlVOKHRlc3RDaGVja0FkZEZvbGQoMTAwLCAyMDApKTsKICAgICBS
VU4odGVzdENoZWNrQWRkRm9sZEZhaWwoMjE0NzQ4MzY0NywgMTAwKSk7CiAgICAgUlVOKHRlc3RD
aGVja1N1YkltbSgpKTsKKyAgICBSVU4odGVzdENoZWNrU3ViQmFkSW1tKCkpOwogICAgIFJVTih0
ZXN0Q2hlY2tTdWIoKSk7CiAgICAgUlVOKHRlc3RDaGVja1N1YjY0KCkpOwogICAgIFJVTih0ZXN0
Q2hlY2tTdWJGb2xkKDEwMCwgMjAwKSk7CkBAIC00NDQ5LDYgKzQ2NDUsNyBAQCB2b2lkIHJ1bihj
b25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgUlVOKHRlc3RDaGVja05lZygpKTsKICAgICBSVU4odGVz
dENoZWNrTmVnNjQoKSk7CiAgICAgUlVOKHRlc3RDaGVja011bCgpKTsKKyAgICBSVU4odGVzdENo
ZWNrTXVsMigpKTsKICAgICBSVU4odGVzdENoZWNrTXVsNjQoKSk7CiAgICAgUlVOKHRlc3RDaGVj
a011bEZvbGQoMTAwLCAyMDApKTsKICAgICBSVU4odGVzdENoZWNrTXVsRm9sZEZhaWwoMjE0NzQ4
MzY0NywgMTAwKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckl0ZXJh
dGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcAkocmV2aXNpb24g
MTkyNDc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJdGVyYXRlZFJlZ2lz
dGVyQ29hbGVzY2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNs
dWRlICJBaXJMaXZlbmVzcy5oIgogI2luY2x1ZGUgIkFpclBoYXNlU2NvcGUuaCIKICNpbmNsdWRl
ICJBaXJSZWdpc3RlclByaW9yaXR5LmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CiAjaW5j
bHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eyBuYW1lc3BhY2UgQWlyIHsKQEAgLTE5Niw2ICsxOTcsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1h
a2VXb3JrTGlzdCgpOwogCiAgICAgICAgIGlmIChkZWJ1ZykgeworICAgICAgICAgICAgZGF0YUxv
ZygiSW50ZXJmZXJlbmNlOiAiLCBsaXN0RHVtcChtX2ludGVyZmVyZW5jZUVkZ2VzKSwgIlxuIik7
CiAgICAgICAgICAgICBkdW1wSW50ZXJmZXJlbmNlR3JhcGhJbkRvdChXVEY6OmRhdGFGaWxlKCkp
OwogICAgICAgICAgICAgZGF0YUxvZygiSW5pdGlhbCB3b3JrIGxpc3RcbiIpOwogICAgICAgICAg
ICAgZHVtcFdvcmtMaXN0cyhXVEY6OmRhdGFGaWxlKCkpOwpAQCAtNzMxLDYgKzczMywxMSBAQCBw
cml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIFdURjo6SW50SGFzaDx1aW50NjRfdD46Omhhc2go
bV92YWx1ZSk7CiAgICAgICAgIH0KIAorICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgb3V0LnByaW50KGZpcnN0KCksICI8PT4i
LCBzZWNvbmQoKSk7CisgICAgICAgIH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIHVpbnQ2NF90
IG1fdmFsdWUgeyAwIH07CiAgICAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyT3Bjb2RlLm9wY29kZXMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwkocmV2aXNpb24gMTkyNDc4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwkod29ya2luZyBjb3B5KQpAQCAt
MjA0LDYgKzIwNCwxMyBAQCBNb3ZlIFU6RywgRDpHCiAgICAgVG1wLCBJbmRleCBhcyBzdG9yZVB0
cgogICAgIEltbSwgQWRkciBhcyBzdG9yZVB0cgogCisjIEhhcmRNb3ZlIGlzIGxpa2UgYSBNb3Zl
LCBidXQgaXQgZG9lcyBub3QgYXBwZWFyIGxpa2Ugb25lIHRvIHRoZSByZWdpc3RlciBhbGxvY2F0
b3IuIFRoZSBhbGxvY2F0b3Igd2lsbAorIyBub3QgYXR0ZW1wdCB0byBjb2FsZXNjZSBIYXJkTW92
ZSdzLiBXZSB1c2UgdGhpcyBpbiBwbGFjZXMgd2hlcmUgdGhlIGNvYWxlc2Npbmcgb2YgdHdvIHRl
bXBvcmFyaWVzIHdvdWxkCisjIGJyZWFrIHRoaW5ncy4KK0hhcmRNb3ZlIFU6RywgRDpHCisgICAg
VG1wLCBUbXAgYXMgbW92ZQorICAgIEltbSwgVG1wIGFzIHNpZ25FeHRlbmQzMlRvUHRyCisKIE1v
dmUzMiBVOkcsIEQ6RwogICAgIFRtcCwgVG1wIGFzIHplcm9FeHRlbmQzMlRvUHRyCiAgICAgQWRk
ciwgVG1wIGFzIGxvYWQzMgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265661</attachid>
            <date>2015-11-16 21:35:26 -0800</date>
            <delta_ts>2015-11-16 21:42:14 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>86305</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkyNTA3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3NCBA
QAorMjAxNS0xMS0xNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IENoZWNrQWRkL011bCBzaG91bGQgaGF2ZSBjb21tdXRhdGl2aXR5IG9wdGltaXphdGlvbnMgaW4g
QjMtPkFpciBsb3dlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTUxMjE0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGhpcyBpcyBhbiBvdmVyaGF1bCBvZiBDaGVja0FkZC9DaGVja1N1Yi9DaGVja011
bCB0aGF0IGZpeGVzIGJ1Z3MsIGltcHJvdmVzIGNvZGVnZW4sIGFuZAorICAgICAgICBzaW1wbGlm
aWVzIHRoZSBjb250cmFjdCBiZXR3ZWVuIEIzIGFuZCBpdHMgY2xpZW50LgorCisgICAgICAgIFBy
ZXZpb3VzbHksIHRoZSBpZGVhIHdhcyB0aGF0IHRoZSBvcGVyYW5kcyB0byB0aGUgQWlyIEJyYW5j
aEFkZC9TdWIvTXVsIG1hdGNoZWQgdGhlIGNoaWxkcmVuIG9mCisgICAgICAgIHRoZSBCMyBDaGVj
a0FkZC9TdWIvTXVsLCBvciBhdCBsZWFzdCwgdGhhdCdzIHdoYXQgdGhlIEIzOjpDaGVja1NwZWNp
YWwgd291bGQgbWFrZSB5b3UgYmVsaWV2ZS4KKyAgICAgICAgVGhpcyBtZWFudCB0aGF0IEIzL0Fp
ciBoYWQgdG8gYXZvaWQgb3B0aW1pemF0aW9ucyB0aGF0IHdvdWxkIGJyZWFrIHRoaXMgcHJvdG9j
b2wuIFRoaXMgcHJldmVudGVkCisgICAgICAgIGNvbW11dGF0aXZpdHkgb3B0aW1pemF0aW9ucyBv
biBDaGVja0FkZC9NdWwgYW5kIGl0IGFsc28gcHJldmVudGVkIHN0cmVuZ3RoIHJlZHVjdGlvbiBm
cm9tCisgICAgICAgIENoZWNrTXVsKHgsIDIpIHRvIENoZWNrQWRkKHgsIHgpLCBmb3IgZXhhbXBs
ZS4gVGhvc2Ugb3B0aW1pemF0aW9ucyB3b3VsZCBicmVhayB0aGluZ3MgYmVjYXVzZSB0aGUKKyAg
ICAgICAgY2xpZW50J3MgU3RhY2ttYXAgZ2VuZXJhdGlvbiBjYWxsYmFjayB3YXMgYWxsb3dlZCB0
byBhc3N1bWUgdGhhdCB0aGUgZmlyc3QgZW50cnkgaW4gcGFyYW1zLnJlcHMKKyAgICAgICAgd2Fz
IHRoZSBmaXJzdCBjaGlsZC4gQWxzbywgdGhlcmUgd2FzIGEgY29udHJhY3QgYmV0d2VlbiBCMyBh
bmQgaXRzIGNsaWVudCB0aGF0IGZvciBDaGVja0FkZC9TdWIsCisgICAgICAgIHRoZSBjbGllbnQg
d291bGQgdW5kbyB0aGUgb3BlcmF0aW9uIGJ5IGRvaW5nIHRoZSBvcHBvc2l0ZSBvcGVyYXRpb24g
d2l0aCB0aGUgcGFyYW1zLnJlcHNbMF0gYXMgdGhlCisgICAgICAgIHNvdXJjZSBhbmQgcGFyYW1z
LnJlcHNbMV0gYXMgdGhlIGRlc3RpbmF0aW9uLgorCisgICAgICAgIFRoaXMgbm90IG9ubHkgcHJl
dmVudGVkIGNvbW11dGF0aXZpdHkgb3B0aW1pemF0aW9ucywgaXQgYWxzbyBsZWQgdG8gYnVncy4g
SGVyZSBhcmUgdHdvIGJ1Z3MgdGhhdAorICAgICAgICB3ZSBoYWQ6CisKKyAgICAgICAgLSBBZGQo
eCwgeCkgd291bGQgbm90IHdvcmsuIFRoZSBjbGllbnQgd291bGQgYmUgdG9sZCB0byB1bmRvIHRo
ZSBhZGQgdXNpbmcgJXggYXMgYm90aCB0aGUgc291cmNlCisgICAgICAgICAgYW5kIGRlc3RpbmF0
aW9uLiBUaGUgY2xpZW50IHdvdWxkIHVzZSBhIHN1YigpIGluc3RydWN0aW9uLiBUaGUgcmVzdWx0
IHdvdWxkIG5vdCBiZSB4IC0gaXQgd291bGQKKyAgICAgICAgICBiZSB6ZXJvLgorCisgICAgICAg
IC0gTXVsIHdoZXJlIHRoZSByZXN1bHQgZ290IGNvYWxlc2NlZCB3aXRoIG9uZSBvZiB0aGUgc291
cmNlcy4gWW91IGNhbid0IHVuZG8gYSBtdWx0aXBsaWNhdGlvbiwgc28KKyAgICAgICAgICB5b3Ug
bmVlZCB0byBrZWVwIHRoZSBpbnB1dHMgYWxpdmUgdW50aWwgYWZ0ZXIgdGhlIHJlc3VsdCBpcyBj
b21wdXRlZCAtIGkuZS4gdGhlIGlucHV0cyBhcmUgbGF0ZQorICAgICAgICAgIHVzZXMuIEkgaW5p
dGlhbGx5IHRob3VnaHQgSSB3b3JrZWQgYXJvdW5kIHRoaXMgYnkgdXNpbmcgYSB0aHJlZS1vcGVy
YW5kIGZvcm0gb2YgTXVsLCBidXQgb2YKKyAgICAgICAgICBjb3Vyc2UgdGhhdCBkb2Vzbid0IGFj
dHVhbGx5IGZpeCB0aGUgaXNzdWUuCisKKyAgICAgICAgVGhpcyBwYXRjaCBmaXhlcyB0aGVzZSBp
c3N1ZXMgY29tcHJlaGVuc2l2ZWx5IGJ5IGludHJvZHVjaW5nIHRoZSBmb2xsb3dpbmcgY2hhbmdl
czoKKworICAgICAgICBUaGUgcGFyYW1zLnJlcHMgY29ycmVzcG9uZGluZyB0byB0aGUgZmlyc3Qg
dHdvIGNoaWxkcmVuIG9mIENoZWNrQWRkL1N1Yi9NdWwgYW5kIHRoZSBmaXJzdCBjaGlsZCBvZgor
ICAgICAgICBDaGVjayBhcmUgYWx3YXlzIGdhcmJhZ2U6IGlmIHlvdSB3YW50IHRvIGtub3cgdGhl
IHZhbHVlcyBvZiB0aG9zZSBjaGlsZHJlbiBpbiB0aGUgc2xvdyBwYXRoLCBwYXNzCisgICAgICAg
IHRoZW0gYXMgYWRkaXRpb25hbCBzdGFja21hcCBjaGlsZHJlbi4gVGhpcyBtYWtlcyBpdCBjbGVh
ciB0byB0aGUgY29tcGlsZXIgd2hvc2UgdmFsdWVzIHlvdQorICAgICAgICBhY3R1YWxseSBjYXJl
IGFib3V0LCBhbmQgZnJlZXMgdGhlIGNvbXBpbGVyIHRvIHJlb3JkZXIgYW5kIGNvbW11dGUgdGhl
IG5vbi1zdGFja21hcCBjaGlsZHJlbi4KKworICAgICAgICBUaGUgInVuZG8iIG9mIGFuIEFkZCBv
ciBTdWIgaXMgaGFuZGxlZCBpbnRlcm5hbGx5IGJ5IEIzOiB0aGUgY2xpZW50IGRvZXNuJ3QgaGF2
ZSB0byBrbm93IGFueXRoaW5nCisgICAgICAgIGFib3V0IHVuZG9pbmcuIEIzIGRvZXMgaXQuIFRo
ZSBjb250cmFjdCBpcyBzaW1wbHkgdGhhdCBpZiBhIEIzOjpWYWx1ZSogaXMgYSBzdGFja21hcCBj
aGlsZCBvZiBhCisgICAgICAgIENoZWNrWFlaLCB0aGVuIHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5
IGluIHBhcmFtcy5yZXBzIGluc2lkZSB0aGUgc3RhY2ttYXAgZ2VuZXJhdG9yIGNhbGxiYWNrIHdp
bGwKKyAgICAgICAgY29udGFpbiB0aGUgdmFsdWUgb2YgdGhhdCBWYWx1ZSouIEZvciBBZGQgYW5k
IFN1YiwgQjMgdW5kb2VzIHRoZSBvcGVyYXRpb24uIEZvciBBZGQoeCwgeCksIHRoZQorICAgICAg
ICB1bmRvIHVzZXMgdGhlIGNhcnJ5IGZsYWcgYW5kIHNvbWUgc2hpZnQgbWFnaWMuIEZvciBNdWws
IEIzIHVzZXMgTGF0ZVVzZToKKworICAgICAgICBBIG5ldyBraW5kIG9mIEFyZzo6Um9sZSBjYWxs
ZWQgQXJnOjpMYXRlVXNlIGlzIGludHJvZHVjZWQ6IFRoaXMga2luZCBvZiB1c2UgbWVhbnMgdGhh
dCB0aGUgdXNlCisgICAgICAgIGhhcHBlbnMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBleGVjdXRpb24g
b2YgdGhlIG5leHQgaW5zdHJ1Y3Rpb24uIE5vbmUgb2YgdGhlIGJ1aWx0LWluIEFpciBvcGNvZGVz
CisgICAgICAgIHVzZSBMYXRlVXNlLCBidXQgaXQgaXMgdXNlZCBieSBCMzo6Q2hlY2tTcGVjaWFs
LiBXZSB1c2UgaXQgdG8gaW1wbGVtZW50IENoZWNrTXVsLgorCisgICAgICAgIEZpbmFsbHksIHRo
aXMgY2hhbmdlIGZpeGVzIHRlc3RDb21wbGV4IHRvIGFjdHVhbGx5IGNyZWF0ZSBtYW55IGxpdmUg
dmFyaWFibGVzLiBUaGlzIHJldmVhbGVkIGEKKyAgICAgICAgcmVhbGx5IGR1bWIgcGF0aG9sb2d5
IGluIGFsbG9jYXRlU3RhY2soKSwgYW5kIHRoaXMgcGF0Y2ggZml4ZXMgaXQuIEJhc2ljYWxseSwg
aXQncyBhIGJhZCBpZGVhIHRvCisgICAgICAgIGJ1aWxkIGludGVyZmVyZW5jZSBncmFwaHMgYnkg
cmVwZWF0ZWRseSByZWNyZWF0aW5nIHRoZSBzYW1lIGNsaXF1ZXMuCisKKyAgICAgICAgKiBhc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJYODZDb21tb246OnRlc3QzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2
Q29tbW9uOjpzZXRDYXJyeSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29tbW9u
OjppbnZlcnQpOgorICAgICAgICAqIGIzL0IzQ2hlY2tTcGVjaWFsLmNwcDoKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6bnVtQjNBcmdzKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6
S2V5OjpLZXkpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpLZXk6OmR1bXApOgor
ICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpDaGVja1NwZWNpYWwpOgorICAgICAgICAo
SlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpmb3JFYWNoQXJnKToKKyAgICAgICAgKEpTQzo6QjM6OkNo
ZWNrU3BlY2lhbDo6aXNWYWxpZCk6CisgICAgICAgIChKU0M6OkIzOjpDaGVja1NwZWNpYWw6Omdl
bmVyYXRlKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6ZHVtcEltcGwpOgorICAg
ICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpkZWVwRHVtcEltcGwpOgorICAgICAgICAqIGIz
L0IzQ2hlY2tTcGVjaWFsLmg6CisgICAgICAgIChKU0M6OkIzOjpDaGVja1NwZWNpYWw6OktleTo6
S2V5KToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6S2V5OjpvcGVyYXRvcj09KToK
KyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6S2V5OjpvcGVyYXRvciE9KToKKyAgICAg
ICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6S2V5OjpvcGNvZGUpOgorICAgICAgICAoSlNDOjpC
Mzo6Q2hlY2tTcGVjaWFsOjpLZXk6Om51bUFyZ3MpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tT
cGVjaWFsOjpLZXk6OnN0YWNrbWFwUm9sZSk6CisgICAgICAgIChKU0M6OkIzOjpDaGVja1NwZWNp
YWw6OktleTo6aGFzaCk6CisgICAgICAgICogYjMvQjNDaGVja1ZhbHVlLmNwcDoKKyAgICAgICAg
KEpTQzo6QjM6OkNoZWNrVmFsdWU6On5DaGVja1ZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OkNo
ZWNrVmFsdWU6OmNvbnZlcnRUb0FkZCk6CisgICAgICAgIChKU0M6OkIzOjpDaGVja1ZhbHVlOjpD
aGVja1ZhbHVlKToKKyAgICAgICAgKiBiMy9CM0NoZWNrVmFsdWUuaDoKKyAgICAgICAgKiBiMy9C
M0NvbnN0MzJWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDMyVmFsdWU6OmNoZWNr
TXVsQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3QzMlZhbHVlOjpjaGVja05lZ0Nv
bnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0MzJWYWx1ZTo6ZGl2Q29uc3RhbnQpOgor
ICAgICAgICAqIGIzL0IzQ29uc3QzMlZhbHVlLmg6CisgICAgICAgICogYjMvQjNDb25zdDY0VmFs
dWUuY3BwOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjpjaGVja011bENvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6Y2hlY2tOZWdDb25zdGFudCk6Cisg
ICAgICAgIChKU0M6OkIzOjpDb25zdDY0VmFsdWU6OmRpdkNvbnN0YW50KToKKyAgICAgICAgKiBi
My9CM0NvbnN0NjRWYWx1ZS5oOgorICAgICAgICAqIGIzL0IzTG93ZXJUb0Fpci5jcHA6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmFwcGVuZEJpbk9wKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6bG93ZXIpOgorICAgICAgICAqIGIzL0IzT3Bjb2RlLmg6
CisgICAgICAgICogYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHA6CisgICAgICAgIChKU0M6OkIz
OjpQYXRjaHBvaW50U3BlY2lhbDo6flBhdGNocG9pbnRTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6
QjM6OlBhdGNocG9pbnRTcGVjaWFsOjpmb3JFYWNoQXJnKToKKyAgICAgICAgKEpTQzo6QjM6OlBh
dGNocG9pbnRTcGVjaWFsOjppc1ZhbGlkKToKKyAgICAgICAgKiBiMy9CM1JlZHVjZVN0cmVuZ3Ro
LmNwcDoKKyAgICAgICAgKiBiMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHA6CisgICAgICAgIChKU0M6
OkIzOjpTdGFja21hcFNwZWNpYWw6OmZvckVhY2hBcmdJbXBsKToKKyAgICAgICAgKiBiMy9CM1N0
YWNrbWFwU3BlY2lhbC5oOgorICAgICAgICAqIGIzL0IzU3RhY2ttYXBWYWx1ZS5jcHA6CisgICAg
ICAgIChKU0M6OkIzOjpTdGFja21hcFZhbHVlOjphcHBlbmQpOgorICAgICAgICAoSlNDOjpCMzo6
U3RhY2ttYXBWYWx1ZTo6YXBwZW5kU29tZVJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6QjM6OlN0
YWNrbWFwVmFsdWU6OnNldENvbnN0cmFpbmVkQ2hpbGQpOgorICAgICAgICAqIGIzL0IzU3RhY2tt
YXBWYWx1ZS5oOgorICAgICAgICAqIGIzL0IzVmFsaWRhdGUuY3BwOgorICAgICAgICAqIGIzL0Iz
VmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmNoZWNrTXVsQ29uc3RhbnQpOgor
ICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmNoZWNrTmVnQ29uc3RhbnQpOgorICAgICAgICAoSlND
OjpCMzo6VmFsdWU6OmRpdkNvbnN0YW50KToKKyAgICAgICAgKiBiMy9CM1ZhbHVlLmg6CisgICAg
ICAgICogYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjphbGxvY2F0ZVN0YWNrKToKKyAgICAgICAgKiBiMy9haXIvQWlyQXJnLmNwcDoKKyAgICAgICAg
KFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogYjMvYWlyL0FpckFyZy5oOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzQW55VXNlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjppc0Vhcmx5VXNlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0xhdGVVc2Up
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzRGVmKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QXJnOjpmb3JFYWNoVG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1Vz
ZSk6IERlbGV0ZWQuCisgICAgICAgICogYjMvYWlyL0FpckdlbmVyYXRlLmNwcDoKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6Z2VuZXJhdGUpOgorICAgICAgICAqIGIzL2Fpci9BaXJJdGVyYXRlZFJl
Z2lzdGVyQ29hbGVzY2luZy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okl0ZXJhdGVkUmVn
aXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yOjpidWlsZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
Okl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yOjphbGxvY2F0ZSk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6Okl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yOjpJbnRl
cmZlcmVuY2VFZGdlOjpoYXNoKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SXRlcmF0ZWRSZWdp
c3RlckNvYWxlc2NpbmdBbGxvY2F0b3I6OkludGVyZmVyZW5jZUVkZ2U6OmR1bXApOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjphZGRTcGlsbEFuZEZpbGxUb1Byb2dyYW0pOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjppdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ09uVHlwZSk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6Oml0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nKToKKyAgICAgICAgKiBiMy9h
aXIvQWlyTGl2ZW5lc3MuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TGl2ZW5lc3M6OkxpdmVu
ZXNzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TGl2ZW5lc3M6OkxvY2FsQ2FsYzo6TG9jYWxD
YWxjKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TGl2ZW5lc3M6OkxvY2FsQ2FsYzo6bGl2ZSk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkxpdmVuZXNzOjpMb2NhbENhbGM6OnRha2VMaXZlKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TGl2ZW5lc3M6OkxvY2FsQ2FsYzo6ZXhlY3V0ZSk6Cisg
ICAgICAgICogYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzOgorICAgICAgICAqIGIzL2Fpci9BaXJS
ZXBvcnRVc2VkUmVnaXN0ZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6cmVwb3J0VXNl
ZFJlZ2lzdGVycyk6CisgICAgICAgICogYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHA6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OnNwaWxsRXZlcnl0aGluZyk6CisgICAgICAgICogYjMvdGVz
dGIzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RNdWxBcmcpOgorICAgICAgICAoSlNDOjpC
Mzo6dGVzdE11bEFyZ1N0b3JlKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RNdWxBZGRBcmcpOgor
ICAgICAgICAoSlNDOjpCMzo6dGVzdE11bEFyZ3MpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENv
bXBsZXgpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdFNpbXBsZUNoZWNrKToKKyAgICAgICAgKEpT
Qzo6QjM6OnRlc3RDaGVja0xlc3NUaGFuKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RDaGVja01l
Z2FDb21ibyk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Q2hlY2tBZGRJbW0pOgorICAgICAgICAo
SlNDOjpCMzo6dGVzdENoZWNrQWRkSW1tQ29tbXV0ZSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0
Q2hlY2tBZGRJbW1Tb21lUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENoZWNrQWRk
KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RDaGVja0FkZDY0KToKKyAgICAgICAgKEpTQzo6QjM6
OnRlc3RDaGVja1N1YkltbSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Q2hlY2tTdWJCYWRJbW0p
OgorICAgICAgICAoSlNDOjpCMzo6dGVzdENoZWNrU3ViKToKKyAgICAgICAgKEpTQzo6QjM6OnRl
c3RDaGVja1N1YjY0KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RDaGVja05lZyk6CisgICAgICAg
IChKU0M6OkIzOjp0ZXN0Q2hlY2tOZWc2NCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Q2hlY2tN
dWwpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENoZWNrTXVsTWVtb3J5KToKKyAgICAgICAgKEpT
Qzo6QjM6OnRlc3RDaGVja011bDIpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENoZWNrTXVsNjQp
OgorICAgICAgICAoSlNDOjpCMzo6cnVuKToKKwogMjAxNS0xMS0xNiAgQmVuamFtaW4gUG91bGFp
biAgPGJwb3VsYWluQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggYSB0eXBvIGluIEFpckl0ZXJh
dGVkUmVnaXN0ZXJDb2FsZXNjaW5nCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCShyZXZpc2lvbiAx
OTI0NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
WDg2Q29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MTEsNiArMTYxMSwxMSBAQCBwdWJsaWM6
CiAgICAgICAgIHNldDMyKHg4NkNvbmRpdGlvbihjb25kKSwgZGVzdCk7CiAgICAgfQogCisgICAg
dm9pZCBzZXRDYXJyeShSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBzZXQzMihYODZB
c3NlbWJsZXI6OkNvbmRpdGlvbkMsIGRlc3QpOworICAgIH0KKwogICAgIC8vIEludmVydCBhIHJl
bGF0aW9uYWwgY29uZGl0aW9uLCBlLmcuID09IGJlY29tZXMgIT0sIDwgYmVjb21lcyA+PSwgZXRj
LgogICAgIHN0YXRpYyBSZWxhdGlvbmFsQ29uZGl0aW9uIGludmVydChSZWxhdGlvbmFsQ29uZGl0
aW9uIGNvbmQpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tT
cGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVj
a1NwZWNpYWwuY3BwCShyZXZpc2lvbiAxOTI0NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDaGVja1NwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw5ICszOSw5IEBAIHVz
aW5nIG5hbWVzcGFjZSBBaXI7CiAKIG5hbWVzcGFjZSB7CiAKLXVuc2lnbmVkIG51bUIzQXJncyhJ
bnN0JiBpbnN0KQordW5zaWduZWQgbnVtQjNBcmdzKEIzOjpPcGNvZGUgb3Bjb2RlKQogewotICAg
IHN3aXRjaCAoaW5zdC5vcmlnaW4tPm9wY29kZSgpKSB7CisgICAgc3dpdGNoIChvcGNvZGUpIHsK
ICAgICBjYXNlIENoZWNrQWRkOgogICAgIGNhc2UgQ2hlY2tTdWI6CiAgICAgY2FzZSBDaGVja011
bDoKQEAgLTU0LDI4ICs1NCw0MCBAQCB1bnNpZ25lZCBudW1CM0FyZ3MoSW5zdCYgaW5zdCkKICAg
ICB9CiB9CiAKK3Vuc2lnbmVkIG51bUIzQXJncyhWYWx1ZSogdmFsdWUpCit7CisgICAgcmV0dXJu
IG51bUIzQXJncyh2YWx1ZS0+b3Bjb2RlKCkpOworfQorCit1bnNpZ25lZCBudW1CM0FyZ3MoSW5z
dCYgaW5zdCkKK3sKKyAgICByZXR1cm4gbnVtQjNBcmdzKGluc3Qub3JpZ2luKTsKK30KKwogfSAv
LyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKIENoZWNrU3BlY2lhbDo6S2V5OjpLZXkoY29uc3QgSW5z
dCYgaW5zdCkKIHsKICAgICBtX29wY29kZSA9IGluc3Qub3Bjb2RlOwogICAgIG1fbnVtQXJncyA9
IGluc3QuYXJncy5zaXplKCk7CisgICAgbV9zdGFja21hcFJvbGUgPSBBcmc6OlVzZTsKIH0KIAog
dm9pZCBDaGVja1NwZWNpYWw6OktleTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewot
ICAgIG91dC5wcmludChtX29wY29kZSwgIigiLCBtX251bUFyZ3MsICIpIik7CisgICAgb3V0LnBy
aW50KG1fb3Bjb2RlLCAiKCIsIG1fbnVtQXJncywgIiwiLCBtX3N0YWNrbWFwUm9sZSwgIikiKTsK
IH0KIAotQ2hlY2tTcGVjaWFsOjpDaGVja1NwZWNpYWwoQWlyOjpPcGNvZGUgb3Bjb2RlLCB1bnNp
Z25lZCBudW1BcmdzKQorQ2hlY2tTcGVjaWFsOjpDaGVja1NwZWNpYWwoQWlyOjpPcGNvZGUgb3Bj
b2RlLCB1bnNpZ25lZCBudW1BcmdzLCBBcmc6OlJvbGUgc3RhY2ttYXBSb2xlKQogICAgIDogbV9j
aGVja09wY29kZShvcGNvZGUpCisgICAgLCBtX3N0YWNrbWFwUm9sZShzdGFja21hcFJvbGUpCiAg
ICAgLCBtX251bUNoZWNrQXJncyhudW1BcmdzKQogewogICAgIEFTU0VSVChpc1Rlcm1pbmFsKG9w
Y29kZSkpOwogfQogCiBDaGVja1NwZWNpYWw6OkNoZWNrU3BlY2lhbChjb25zdCBDaGVja1NwZWNp
YWw6OktleSYga2V5KQotICAgIDogQ2hlY2tTcGVjaWFsKGtleS5vcGNvZGUoKSwga2V5Lm51bUFy
Z3MoKSkKKyAgICA6IENoZWNrU3BlY2lhbChrZXkub3Bjb2RlKCksIGtleS5udW1BcmdzKCksIGtl
eS5zdGFja21hcFJvbGUoKSkKIHsKIH0KIApAQCAtMTA1LDcgKzExNyw3IEBAIHZvaWQgQ2hlY2tT
cGVjaWFsOjpmb3JFYWNoQXJnKEluc3QmIGluc3QKICAgICBJbnN0IGhpZGRlbiA9IGhpZGRlbkJy
YW5jaChpbnN0KTsKICAgICBoaWRkZW4uZm9yRWFjaEFyZyhjYWxsYmFjayk7CiAgICAgY29tbWl0
SGlkZGVuQnJhbmNoKGluc3QsIGhpZGRlbik7Ci0gICAgZm9yRWFjaEFyZ0ltcGwobnVtQjNBcmdz
KGluc3QpLCBtX251bUNoZWNrQXJncyArIDEsIGluc3QsIGNhbGxiYWNrKTsKKyAgICBmb3JFYWNo
QXJnSW1wbChudW1CM0FyZ3MoaW5zdCksIG1fbnVtQ2hlY2tBcmdzICsgMSwgaW5zdCwgbV9zdGFj
a21hcFJvbGUsIGNhbGxiYWNrKTsKIH0KIAogYm9vbCBDaGVja1NwZWNpYWw6OmlzVmFsaWQoSW5z
dCYgaW5zdCkKQEAgLTEzMCwyOCArMTQyLDcxIEBAIENDYWxsSGVscGVyczo6SnVtcCBDaGVja1Nw
ZWNpYWw6OmdlbmVyYXQKICAgICBBU1NFUlQodmFsdWUpOwogCiAgICAgVmVjdG9yPFZhbHVlUmVw
PiByZXBzOwotICAgIGlmIChpc0NoZWNrTWF0aCh2YWx1ZS0+b3Bjb2RlKCkpKSB7Ci0gICAgICAg
IGlmICh2YWx1ZS0+b3Bjb2RlKCkgPT0gQ2hlY2tNdWwpIHsKLSAgICAgICAgICAgIHJlcHMuYXBw
ZW5kKHJlcEZvckFyZygqY29udGV4dC5jb2RlLCBpbnN0LmFyZ3NbMl0pKTsKLSAgICAgICAgICAg
IHJlcHMuYXBwZW5kKHJlcEZvckFyZygqY29udGV4dC5jb2RlLCBpbnN0LmFyZ3NbM10pKTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS0+b3Bjb2RlKCkgPT0gQ2hlY2tT
dWIgJiYgdmFsdWUtPmNoaWxkKDApLT5pc0ludCgwKSkKLSAgICAgICAgICAgICAgICByZXBzLmFw
cGVuZChWYWx1ZVJlcDo6Y29uc3RhbnQoMCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIHJlcHMuYXBwZW5kKHJlcEZvckFyZygqY29udGV4dC5jb2RlLCBpbnN0LmFyZ3NbM10p
KTsKLSAgICAgICAgICAgIHJlcHMuYXBwZW5kKHJlcEZvckFyZygqY29udGV4dC5jb2RlLCBpbnN0
LmFyZ3NbMl0pKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVCh2YWx1
ZS0+b3Bjb2RlKCkgPT0gQ2hlY2spOwotICAgICAgICByZXBzLmFwcGVuZChWYWx1ZVJlcDo6Y29u
c3RhbnQoMSkpOwotICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1CM0FyZ3ModmFsdWUp
OyBpLS07KQorICAgICAgICByZXBzLmFwcGVuZChWYWx1ZVJlcCgpKTsKIAogICAgIGFwcGVuZFJl
cHNJbXBsKGNvbnRleHQsIG1fbnVtQ2hlY2tBcmdzICsgMSwgaW5zdCwgcmVwcyk7Ci0gICAgCisK
KyAgICAvLyBTZXQgYXNpZGUgdGhlIGFyZ3MgdGhhdCBhcmUgcmVsZXZhbnQgdG8gdW5kb2luZyB0
aGUgb3BlcmF0aW9uLiBUaGlzIGlzIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0bworICAgIC8vIGNh
cHR1cmUgYWxsIG9mIGluc3QgaW4gdGhlIGNsb3N1cmUgYmVsb3cuCisgICAgVmVjdG9yPEFyZywg
Mz4gYXJnczsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9udW1DaGVja0FyZ3M7ICsr
aSkKKyAgICAgICAgYXJncy5hcHBlbmQoaW5zdC5hcmdzWzEgKyBpXSk7CisKICAgICBjb250ZXh0
LmxhdGVQYXRocy5hcHBlbmQoCiAgICAgICAgIGNyZWF0ZVNoYXJlZFRhc2s8R2VuZXJhdGlvbkNv
bnRleHQ6OkxhdGVQYXRoRnVuY3Rpb24+KAotICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMm
IGppdCwgR2VuZXJhdGlvbkNvbnRleHQmKSB7CisgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVy
cyYgaml0LCBHZW5lcmF0aW9uQ29udGV4dCYgY29udGV4dCkgewogICAgICAgICAgICAgICAgIGZh
aWwubGluaygmaml0KTsKKworICAgICAgICAgICAgICAgIC8vIElmIG5lY2Vzc2FyeSwgdW5kbyB0
aGUgb3BlcmF0aW9uLgorICAgICAgICAgICAgICAgIHN3aXRjaCAobV9jaGVja09wY29kZSkgewor
ICAgICAgICAgICAgICAgIGNhc2UgQnJhbmNoQWRkMzI6CisgICAgICAgICAgICAgICAgICAgIGlm
IChhcmdzWzFdID09IGFyZ3NbMl0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMg
aXMgdWdseSwgYnV0IHRoYXQncyBmaW5lIC0gd2Ugd29uJ3QgaGF2ZSB0byBkbyB0aGlzIHZlcnkg
b2Z0ZW4uCisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYXJnc1sxXS5pc0dQUigpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IGFyZ3NbMV0uZ3ByKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IENDYWxsSGVscGVy
czo6c2VsZWN0U2NyYXRjaEdQUih2YWx1ZUdQUik7CisgICAgICAgICAgICAgICAgICAgICAgICBq
aXQucHVzaFRvU2F2ZShzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5z
ZXRDYXJyeShzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sc2hpZnQz
MihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigzMSksIHNjcmF0Y2hHUFIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgaml0LnVyc2hpZnQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigx
KSwgdmFsdWVHUFIpOworICAgICAgICAgICAgICAgICAgICAgICAgaml0Lm9yMzIoc2NyYXRjaEdQ
UiwgdmFsdWVHUFIpOworICAgICAgICAgICAgICAgICAgICAgICAgaml0LnBvcFRvUmVzdG9yZShz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIEluc3QoU3ViMzIsIG51bGxwdHIsIGFyZ3Nb
MV0sIGFyZ3NbMl0pLmdlbmVyYXRlKGppdCwgY29udGV4dCk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQnJhbmNoQWRkNjQ6CisgICAgICAgICAgICAg
ICAgICAgIGlmIChhcmdzWzFdID09IGFyZ3NbMl0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFRoaXMgaXMgdWdseSwgYnV0IHRoYXQncyBmaW5lIC0gd2Ugd29uJ3QgaGF2ZSB0byBkbyB0
aGlzIHZlcnkgb2Z0ZW4uCisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYXJnc1sxXS5p
c0dQUigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IGFyZ3Nb
MV0uZ3ByKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IEND
YWxsSGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUih2YWx1ZUdQUik7CisgICAgICAgICAgICAgICAg
ICAgICAgICBqaXQucHVzaFRvU2F2ZShzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGppdC5zZXRDYXJyeShzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGpp
dC5sc2hpZnQ2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMig2MyksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaml0LnVyc2hpZnQ2NChDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMigxKSwgdmFsdWVHUFIpOworICAgICAgICAgICAgICAgICAgICAgICAgaml0Lm9yNjQo
c2NyYXRjaEdQUiwgdmFsdWVHUFIpOworICAgICAgICAgICAgICAgICAgICAgICAgaml0LnBvcFRv
UmVzdG9yZShzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIEluc3QoU3ViNjQsIG51bGxw
dHIsIGFyZ3NbMV0sIGFyZ3NbMl0pLmdlbmVyYXRlKGppdCwgY29udGV4dCk7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQnJhbmNoU3ViMzI6CisgICAg
ICAgICAgICAgICAgICAgIEluc3QoQWRkMzIsIG51bGxwdHIsIGFyZ3NbMV0sIGFyZ3NbMl0pLmdl
bmVyYXRlKGppdCwgY29udGV4dCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIGNhc2UgQnJhbmNoU3ViNjQ6CisgICAgICAgICAgICAgICAgICAgIEluc3QoQWRk
NjQsIG51bGxwdHIsIGFyZ3NbMV0sIGFyZ3NbMl0pLmdlbmVyYXRlKGppdCwgY29udGV4dCk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQnJhbmNoTmVn
MzI6CisgICAgICAgICAgICAgICAgICAgIEluc3QoTmVnMzIsIG51bGxwdHIsIGFyZ3NbMV0pLmdl
bmVyYXRlKGppdCwgY29udGV4dCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIGNhc2UgQnJhbmNoTmVnNjQ6CisgICAgICAgICAgICAgICAgICAgIEluc3QoTmVn
NjQsIG51bGxwdHIsIGFyZ3NbMV0pLmdlbmVyYXRlKGppdCwgY29udGV4dCk7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMgcGFyYW1zOwogICAgICAgICAgICAg
ICAgIHBhcmFtcy52YWx1ZSA9IHZhbHVlOwpAQCAtMTY2LDcgKzIyMSw3IEBAIENDYWxsSGVscGVy
czo6SnVtcCBDaGVja1NwZWNpYWw6OmdlbmVyYXQKIAogdm9pZCBDaGVja1NwZWNpYWw6OmR1bXBJ
bXBsKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAgb3V0LnByaW50KG1fY2hlY2tPcGNv
ZGUsICIoIiwgbV9udW1DaGVja0FyZ3MsICIpIik7CisgICAgb3V0LnByaW50KG1fY2hlY2tPcGNv
ZGUsICIoIiwgbV9udW1DaGVja0FyZ3MsICIsIiwgbV9zdGFja21hcFJvbGUsICIpIik7CiB9CiAK
IHZvaWQgQ2hlY2tTcGVjaWFsOjpkZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5oCShyZXZpc2lv
biAxOTI0NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuaAko
d29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIAor
I2luY2x1ZGUgIkFpckFyZy5oIgogI2luY2x1ZGUgIkFpck9wY29kZS5oIgogI2luY2x1ZGUgIkIz
U3RhY2ttYXBTcGVjaWFsLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTU2LDEyICs1
NywxNCBAQCBwdWJsaWM6CiAgICAgcHVibGljOgogICAgICAgICBLZXkoKQogICAgICAgICAgICAg
OiBtX29wY29kZShBaXI6Ok5vcCkKKyAgICAgICAgICAgICwgbV9zdGFja21hcFJvbGUoQWlyOjpB
cmc6OlVzZSkKICAgICAgICAgICAgICwgbV9udW1BcmdzKDApCiAgICAgICAgIHsKICAgICAgICAg
fQogICAgICAgICAKLSAgICAgICAgS2V5KEFpcjo6T3Bjb2RlIG9wY29kZSwgdW5zaWduZWQgbnVt
QXJncykKKyAgICAgICAgS2V5KEFpcjo6T3Bjb2RlIG9wY29kZSwgdW5zaWduZWQgbnVtQXJncywg
QWlyOjpBcmc6OlJvbGUgc3RhY2ttYXBSb2xlID0gQWlyOjpBcmc6OlVzZSkKICAgICAgICAgICAg
IDogbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAgICAgLCBtX3N0YWNrbWFwUm9sZShzdGFja21h
cFJvbGUpCiAgICAgICAgICAgICAsIG1fbnVtQXJncyhudW1BcmdzKQogICAgICAgICB7CiAgICAg
ICAgIH0KQEAgLTcxLDcgKzc0LDggQEAgcHVibGljOgogICAgICAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgS2V5JiBvdGhlcikgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIG1f
b3Bjb2RlID09IG90aGVyLm1fb3Bjb2RlCi0gICAgICAgICAgICAgICAgJiYgbV9udW1BcmdzID09
IG90aGVyLm1fbnVtQXJnczsKKyAgICAgICAgICAgICAgICAmJiBtX251bUFyZ3MgPT0gb3RoZXIu
bV9udW1BcmdzCisgICAgICAgICAgICAgICAgJiYgbV9zdGFja21hcFJvbGUgPT0gb3RoZXIubV9z
dGFja21hcFJvbGU7CiAgICAgICAgIH0KIAogICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
S2V5JiBvdGhlcikgY29uc3QKQEAgLTgzLDExICs4NywxMyBAQCBwdWJsaWM6CiAKICAgICAgICAg
QWlyOjpPcGNvZGUgb3Bjb2RlKCkgY29uc3QgeyByZXR1cm4gbV9vcGNvZGU7IH0KICAgICAgICAg
dW5zaWduZWQgbnVtQXJncygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQXJnczsgfQorICAgICAgICBB
aXI6OkFyZzo6Um9sZSBzdGFja21hcFJvbGUoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrbWFwUm9s
ZTsgfQogCiAgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKIAogICAg
ICAgICBLZXkoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQogICAgICAgICAgICAgOiBt
X29wY29kZShBaXI6Ok5vcCkKKyAgICAgICAgICAgICwgbV9zdGFja21hcFJvbGUoQWlyOjpBcmc6
OlVzZSkKICAgICAgICAgICAgICwgbV9udW1BcmdzKDEpCiAgICAgICAgIHsKICAgICAgICAgfQpA
QCAtMTAwLDE1ICsxMDYsMTYgQEAgcHVibGljOgogICAgICAgICB1bnNpZ25lZCBoYXNoKCkgY29u
c3QKICAgICAgICAgewogICAgICAgICAgICAgLy8gU2VyaW91c2x5LCB3ZSBkb24ndCBuZWVkIHRv
IGJlIHNtYXJ0IGhlcmUuIEl0IGp1c3QgZG9lc24ndCBtYXR0ZXIuCi0gICAgICAgICAgICByZXR1
cm4gbV9vcGNvZGUgKyBtX251bUFyZ3M7CisgICAgICAgICAgICByZXR1cm4gbV9vcGNvZGUgKyBt
X251bUFyZ3MgKyBtX3N0YWNrbWFwUm9sZTsKICAgICAgICAgfQogICAgICAgICAKICAgICBwcml2
YXRlOgogICAgICAgICBBaXI6Ok9wY29kZSBtX29wY29kZTsKKyAgICAgICAgQWlyOjpBcmc6OlJv
bGUgbV9zdGFja21hcFJvbGU7CiAgICAgICAgIHVuc2lnbmVkIG1fbnVtQXJnczsKICAgICB9Owog
ICAgIAotICAgIENoZWNrU3BlY2lhbChBaXI6Ok9wY29kZSwgdW5zaWduZWQgbnVtQXJncyk7Cisg
ICAgQ2hlY2tTcGVjaWFsKEFpcjo6T3Bjb2RlLCB1bnNpZ25lZCBudW1BcmdzLCBBaXI6OkFyZzo6
Um9sZSBzdGFja21hcFJvbGUgPSBBaXI6OkFyZzo6VXNlKTsKICAgICBDaGVja1NwZWNpYWwoY29u
c3QgS2V5Jik7CiAgICAgfkNoZWNrU3BlY2lhbCgpOwogCkBAIC0xMzMsNiArMTQwLDcgQEAgcHJv
dGVjdGVkOgogCiBwcml2YXRlOgogICAgIEFpcjo6T3Bjb2RlIG1fY2hlY2tPcGNvZGU7CisgICAg
QWlyOjpBcmc6OlJvbGUgbV9zdGFja21hcFJvbGU7CiAgICAgdW5zaWduZWQgbV9udW1DaGVja0Fy
Z3M7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNw
cAkocmV2aXNpb24gMTkyNDc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tW
YWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDEyIEBAIENoZWNrVmFsdWU6On5D
aGVja1ZhbHVlKCkKIHsKIH0KIAordm9pZCBDaGVja1ZhbHVlOjpjb252ZXJ0VG9BZGQoKQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKG9wY29kZSgpID09IENoZWNrQWRkIHx8IG9wY29kZSgpID09IENo
ZWNrU3ViIHx8IG9wY29kZSgpID09IENoZWNrTXVsKTsKKyAgICBtX29wY29kZSA9IENoZWNrQWRk
OworfQorCiAvLyBVc2UgdGhpcyBmb3JtIGZvciBDaGVja0FkZCwgQ2hlY2tTdWIsIGFuZCBDaGVj
a011bC4KIENoZWNrVmFsdWU6OkNoZWNrVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNv
ZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCiAgICAgOiBTdGFj
a21hcFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBvcGNvZGUsIGxlZnQtPnR5cGUoKSwgb3Jp
Z2luKQpAQCAtNDEsOCArNDcsOCBAQCBDaGVja1ZhbHVlOjpDaGVja1ZhbHVlKHVuc2lnbmVkIGlu
ZGV4LCBPCiAgICAgQVNTRVJUKEIzOjppc0ludCh0eXBlKCkpKTsKICAgICBBU1NFUlQobGVmdC0+
dHlwZSgpID09IHJpZ2h0LT50eXBlKCkpOwogICAgIEFTU0VSVChvcGNvZGUgPT0gQ2hlY2tBZGQg
fHwgb3Bjb2RlID09IENoZWNrU3ViIHx8IG9wY29kZSA9PSBDaGVja011bCk7Ci0gICAgYXBwZW5k
KENvbnN0cmFpbmVkVmFsdWUobGVmdCwgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcikpOwotICAgIGFw
cGVuZChDb25zdHJhaW5lZFZhbHVlKHJpZ2h0LCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKSk7Cisg
ICAgYXBwZW5kKENvbnN0cmFpbmVkVmFsdWUobGVmdCwgVmFsdWVSZXA6OkFueSkpOworICAgIGFw
cGVuZChDb25zdHJhaW5lZFZhbHVlKHJpZ2h0LCBWYWx1ZVJlcDo6QW55KSk7CiB9CiAKIC8vIFVz
ZSB0aGlzIGZvcm0gZm9yIENoZWNrLgpAQCAtNTAsNyArNTYsNyBAQCBDaGVja1ZhbHVlOjpDaGVj
a1ZhbHVlKHVuc2lnbmVkIGluZGV4LCBPCiAgICAgOiBTdGFja21hcFZhbHVlKGluZGV4LCBDaGVj
a2VkT3Bjb2RlLCBvcGNvZGUsIFZvaWQsIG9yaWdpbikKIHsKICAgICBBU1NFUlQob3Bjb2RlID09
IENoZWNrKTsKLSAgICBhcHBlbmQocHJlZGljYXRlKTsKKyAgICBhcHBlbmQoQ29uc3RyYWluZWRW
YWx1ZShwcmVkaWNhdGUsIFZhbHVlUmVwOjpBbnkpKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5oCShyZXZp
c2lvbiAxOTI0NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDggQEAgcHVibGljOgogCiAgICAgfkNoZWNrVmFs
dWUoKTsKIAorICAgIHZvaWQgY29udmVydFRvQWRkKCk7CisKIHByaXZhdGU6CiAgICAgZnJpZW5k
IGNsYXNzIFByb2NlZHVyZTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29u
c3QzMlZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
b25zdDMyVmFsdWUuY3BwCShyZXZpc2lvbiAxOTI0NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb25zdDMyVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCw2ICs5OCwxMyBA
QCBWYWx1ZSogQ29uc3QzMlZhbHVlOjpjaGVja011bENvbnN0YW50KFByCiAgICAgcmV0dXJuIHBy
b2MuYWRkPENvbnN0MzJWYWx1ZT4ob3JpZ2luKCksIHJlc3VsdC51bnNhZmVHZXQoKSk7CiB9CiAK
K1ZhbHVlKiBDb25zdDMyVmFsdWU6OmNoZWNrTmVnQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jKSBj
b25zdAoreworICAgIGlmIChtX3ZhbHVlID09IC1tX3ZhbHVlKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICByZXR1cm4gbmVnQ29uc3RhbnQocHJvYyk7Cit9CisKIFZhbHVlKiBDb25zdDMy
VmFsdWU6OmRpdkNvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgY29uc3QgVmFsdWUqIG90aGVyKSBj
b25zdAogewogICAgIGlmICghb3RoZXItPmhhc0ludDMyKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuaAkocmV2aXNpb24gMTkyNDc4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4
LDYgKzQ4LDcgQEAgcHVibGljOgogICAgIFZhbHVlKiBjaGVja0FkZENvbnN0YW50KFByb2NlZHVy
ZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmFsdWUqIGNoZWNr
U3ViQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlk
ZTsKICAgICBWYWx1ZSogY2hlY2tNdWxDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSog
b3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFZhbHVlKiBjaGVja05lZ0NvbnN0YW50KFByb2Nl
ZHVyZSYpIGNvbnN0IG92ZXJyaWRlOwogICAgIFZhbHVlKiBkaXZDb25zdGFudChQcm9jZWR1cmUm
LCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwogICAgIFZhbHVlKiBiaXRBbmRD
b25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwog
ICAgIFZhbHVlKiBiaXRPckNvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikg
Y29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0
VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0
NjRWYWx1ZS5jcHAJKHJldmlzaW9uIDE5MjQ3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0NvbnN0NjRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDYgKzk4LDEzIEBAIFZh
bHVlKiBDb25zdDY0VmFsdWU6OmNoZWNrTXVsQ29uc3RhbnQoUHIKICAgICByZXR1cm4gcHJvYy5h
ZGQ8Q29uc3Q2NFZhbHVlPihvcmlnaW4oKSwgcmVzdWx0LnVuc2FmZUdldCgpKTsKIH0KIAorVmFs
dWUqIENvbnN0NjRWYWx1ZTo6Y2hlY2tOZWdDb25zdGFudChQcm9jZWR1cmUmIHByb2MpIGNvbnN0
Cit7CisgICAgaWYgKG1fdmFsdWUgPT0gLW1fdmFsdWUpCisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIHJldHVybiBuZWdDb25zdGFudChwcm9jKTsKK30KKwogVmFsdWUqIENvbnN0NjRWYWx1
ZTo6ZGl2Q29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0
CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50NjQoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCShyZXZpc2lvbiAxOTI0NzgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiAr
NDgsNyBAQCBwdWJsaWM6CiAgICAgVmFsdWUqIGNoZWNrQWRkQ29uc3RhbnQoUHJvY2VkdXJlJiwg
Y29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKICAgICBWYWx1ZSogY2hlY2tTdWJD
b25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwog
ICAgIFZhbHVlKiBjaGVja011bENvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhl
cikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIGNoZWNrTmVnQ29uc3RhbnQoUHJvY2VkdXJl
JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmFsdWUqIGRpdkNvbnN0YW50KFByb2NlZHVyZSYsIGNv
bnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmFsdWUqIGJpdEFuZENvbnN0
YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CiAgICAg
VmFsdWUqIGJpdE9yQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25z
dCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIu
Y3BwCShyZXZpc2lvbiAxOTI0NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dl
clRvQWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcwLDcgKzU3MCw3IEBAIHByaXZhdGU6CiAK
ICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgd2UgcHJlZmVyIHZlcnNpb25zIG9mIHRoZSBvcGVy
YXRpb24gdGhhdCBoYXZlIGEgZnVzZWQgbG9hZCBvciBhbiBpbW1lZGlhdGUKICAgICAgICAgLy8g
b3ZlciB0aHJlZSBvcGVyYW5kIGZvcm1zLgotICAgICAgICAKKwogICAgICAgICBpZiAoY29tbXV0
YXRpdml0eSA9PSBDb21tdXRhdGl2ZSkgewogICAgICAgICAgICAgQXJnUHJvbWlzZSBsZWZ0QWRk
ciA9IGxvYWRQcm9taXNlKGxlZnQpOwogICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKG9wY29k
ZSwgbGVmdEFkZHIua2luZCgpLCBBcmc6OlRtcCkpIHsKQEAgLTU5OCw2ICs1OTgsMTAgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCisgICAgICAgIC8vIEZJWE1F
OiBJZiB3ZSdyZSBnb2luZyB0byB1c2UgYSB0d28tb3BlcmFuZCBpbnN0cnVjdGlvbiwgYW5kIHRo
ZSBvcGVyYW5kIGlzIGNvbW11dGF0aXZlLCB3ZQorICAgICAgICAvLyBzaG91bGQgY29hbGVzY2Ug
dGhlIHJlc3VsdCB3aXRoIHRoZSBvcGVyYW5kIHRoYXQgaXMga2lsbGVkLgorICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxMzIxCisgICAgICAgIAog
ICAgICAgICBhcHBlbmQocmVsYXhlZE1vdmVGb3JUeXBlKG1fdmFsdWUtPnR5cGUoKSksIHRtcChs
ZWZ0KSwgcmVzdWx0KTsKICAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKHJpZ2h0KSwgcmVzdWx0
KTsKICAgICB9CkBAIC0xNTMxLDEwICsxNTM1LDYgQEAgcHJpdmF0ZToKIAogICAgICAgICBjYXNl
IENoZWNrQWRkOgogICAgICAgICBjYXNlIENoZWNrU3ViOiB7Ci0gICAgICAgICAgICAvLyBGSVhN
RTogTWFrZSB0aGlzIHN1cHBvcnQgY29tbXV0YXRpdml0eS4gVGhhdCB3aWxsIGxldCB1cyBsZXZl
cmFnZSBtb3JlIGluc3RydWN0aW9uIGZvcm1zCi0gICAgICAgICAgICAvLyBhbmQgaXQgbGV0IHVz
IGNvbW11dGUgdG8gbWF4aW1pemUgY29hbGVzY2luZy4KLSAgICAgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTEyMTQKLQogICAgICAgICAgICAgQ2hl
Y2tWYWx1ZSogY2hlY2tWYWx1ZSA9IG1fdmFsdWUtPmFzPENoZWNrVmFsdWU+KCk7CiAKICAgICAg
ICAgICAgIFZhbHVlKiBsZWZ0ID0gY2hlY2tWYWx1ZS0+Y2hpbGQoMCk7CkBAIC0xNTQ0LDcgKzE1
NDQsNyBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICAvLyBIYW5kbGUgY2hlY2tlZCBuZWdhdGlv
bi4KICAgICAgICAgICAgIGlmIChjaGVja1ZhbHVlLT5vcGNvZGUoKSA9PSBDaGVja1N1YiAmJiBs
ZWZ0LT5pc0ludCgwKSkgewotICAgICAgICAgICAgICAgIGFwcGVuZChyZWxheGVkTW92ZUZvclR5
cGUoY2hlY2tWYWx1ZS0+dHlwZSgpKSwgdG1wKHJpZ2h0KSwgcmVzdWx0KTsKKyAgICAgICAgICAg
ICAgICBhcHBlbmQoTW92ZSwgdG1wKHJpZ2h0KSwgcmVzdWx0KTsKIAogICAgICAgICAgICAgICAg
IEFpcjo6T3Bjb2RlIG9wY29kZSA9CiAgICAgICAgICAgICAgICAgICAgIG9wY29kZUZvclR5cGUo
QnJhbmNoTmVnMzIsIEJyYW5jaE5lZzY0LCBBaXI6Ok9vcHMsIGNoZWNrVmFsdWUtPnR5cGUoKSk7
CkBAIC0xNTYwLDM5ICsxNTYwLDY3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBhcHBlbmQocmVsYXhlZE1vdmVGb3JUeXBl
KG1fdmFsdWUtPnR5cGUoKSksIHRtcChsZWZ0KSwgcmVzdWx0KTsKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBVc2UgY29tbXV0YXRpdml0eSBvZiBDaGVja0FkZCB0byBpbmNyZWFzZSB0aGUgbGlrZWxp
aG9vZCBvZiBjb2FsZXNjaW5nLgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1MTMyMQorCisgICAgICAgICAgICBhcHBlbmQoTW92ZSwgdG1w
KGxlZnQpLCByZXN1bHQpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBBaXI6Ok9wY29kZSBv
cGNvZGUgPSBBaXI6Ok9vcHM7Ci0gICAgICAgICAgICBDaGVja1NwZWNpYWwqIHNwZWNpYWwgPSBu
dWxscHRyOwogICAgICAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT5vcGNvZGUoKSkgewogICAgICAg
ICAgICAgY2FzZSBDaGVja0FkZDoKICAgICAgICAgICAgICAgICBvcGNvZGUgPSBvcGNvZGVGb3JU
eXBlKEJyYW5jaEFkZDMyLCBCcmFuY2hBZGQ2NCwgQWlyOjpPb3BzLCBtX3ZhbHVlLT50eXBlKCkp
OwotICAgICAgICAgICAgICAgIHNwZWNpYWwgPSBlbnN1cmVDaGVja1NwZWNpYWwob3Bjb2RlLCAz
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ2hlY2tTdWI6CiAg
ICAgICAgICAgICAgICAgb3Bjb2RlID0gb3Bjb2RlRm9yVHlwZShCcmFuY2hTdWIzMiwgQnJhbmNo
U3ViNjQsIEFpcjo6T29wcywgbV92YWx1ZS0+dHlwZSgpKTsKLSAgICAgICAgICAgICAgICBzcGVj
aWFsID0gZW5zdXJlQ2hlY2tTcGVjaWFsKG9wY29kZSwgMyk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIEluc3QgaW5zdChQYXRjaCwgY2hlY2tWYWx1ZSwgQXJnOjpzcGVjaWFsKHNw
ZWNpYWwpKTsKLQotICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChBcmc6OnJlc0NvbmQoTWFj
cm9Bc3NlbWJsZXI6Ok92ZXJmbG93KSk7Ci0KICAgICAgICAgICAgIC8vIEZJWE1FOiBJdCB3b3Vs
ZCBiZSBncmVhdCB0byBmdXNlIExvYWRzIGludG8gdGhlc2UuIFdlIGN1cnJlbnRseSBkb24ndCBk
byBpdCBiZWNhdXNlIHRoZQogICAgICAgICAgICAgLy8gcnVsZSBmb3Igc3RhY2ttYXBzIGlzIHRo
YXQgYWxsIGFkZHJlc3NlcyBhcmUganVzdCBzdGFjayBhZGRyZXNzZXMuIE1heWJlIHdlIGNvdWxk
IHJlbGF4CiAgICAgICAgICAgICAvLyB0aGlzIHJ1bGUgaGVyZS4KICAgICAgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTEyMjgKLSAgICAgICAgICAg
IAorCisgICAgICAgICAgICBBcmcgc291cmNlOwogICAgICAgICAgICAgaWYgKGltbShyaWdodCkg
JiYgaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlJlc0NvbmQsIEFyZzo6SW1tLCBBcmc6OlRtcCkp
Ci0gICAgICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChpbW0ocmlnaHQpKTsKKyAgICAgICAg
ICAgICAgICBzb3VyY2UgPSBpbW0ocmlnaHQpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIGluc3QuYXJncy5hcHBlbmQodG1wKHJpZ2h0KSk7Ci0gICAgICAgICAgICBpbnN0LmFy
Z3MuYXBwZW5kKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgc291cmNlID0gdG1wKHJpZ2h0KTsK
KworICAgICAgICAgICAgLy8gVGhlcmUgaXMgYSByZWFsbHkgaGlsYXJpb3VzIGNhc2UgdGhhdCBh
cmlzZXMgd2hlbiB3ZSBkbyBCcmFuY2hBZGQzMigleCwgJXgpLiBXZSB3b24ndCBlbWl0CisgICAg
ICAgICAgICAvLyBzdWNoIGNvZGUsIGJ1dCB0aGUgY29hbGVzY2luZyBpbiBvdXIgcmVnaXN0ZXIg
YWxsb2NhdG9yIGFsc28gZG9lcyBjb3B5IHByb3BhZ2F0aW9uLCBzbworICAgICAgICAgICAgLy8g
YWx0aG91Z2ggd2UgZW1pdDoKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyAgICAgTW92
ZSAldG1wMSwgJXRtcDIKKyAgICAgICAgICAgIC8vICAgICBCcmFuY2hBZGQzMiAldG1wMSwgJXRt
cDIKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBUaGUgcmVnaXN0ZXIgYWxsb2NhdG9y
IG1heSB0dXJuIHRoaXMgaW50bzoKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyAgICAg
QnJhbmNoQWRkMzIgJXJheCwgJXJheAorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIEN1
cnJlbnRseSB3ZSBoYW5kbGUgdGhpcyBieSBlbnN1cmluZyB0aGF0IGV2ZW4gdGhpcyBraW5kIG9m
IGFkZGl0aW9uIGNhbiBiZSB1bmRvbmUuIFdlIGNhbgorICAgICAgICAgICAgLy8gdW5kbyBpdCBi
eSB1c2luZyB0aGUgY2FycnkgZmxhZy4gSXQncyB0ZW1wdGluZyB0byBnZXQgcmlkIG9mIHRoYXQg
Y29kZSBhbmQganVzdCAiZml4IiB0aGlzCisgICAgICAgICAgICAvLyBoZXJlIGJ5IGZvcmNpbmcg
TGF0ZVVzZSBvbiB0aGUgc3RhY2ttYXAuIElmIHdlIGRpZCB0aGF0IHVuY29uZGl0aW9uYWxseSwg
d2UnZCBsb3NlIGEgbG90IG9mCisgICAgICAgICAgICAvLyBwZXJmb3JtYW5jZS4gU28gaXQncyB0
ZW1wdGluZyB0byBkbyBpdCBvbmx5IGlmIGxlZnQgPT0gcmlnaHQuIEJ1dCB0aGF0IGNyZWF0ZXMg
YW4gYXdrd2FyZAorICAgICAgICAgICAgLy8gY29uc3RyYWludCBvbiBBaXI6IGl0IG1lYW5zIHRo
YXQgQWlyIHdvdWxkIG5vdCBiZSBhbGxvd2VkIHRvIGRvIGFueSBjb3B5IHByb3BhZ2F0aW9uLgor
ICAgICAgICAgICAgLy8gTm90aWNlIHRoYXQgdGhlICVyYXgsJXJheCBzaXR1YXRpb24gaGFwcGVu
ZWQgYWZ0ZXIgQWlyIGNvcHktcHJvcGFnYXRlZCB0aGUgTW92ZSB3ZSBhcmUKKyAgICAgICAgICAg
IC8vIGVtaXR0aW5nLiBXZSBrbm93IHRoYXQgY29weS1wcm9wYWdhdGluZyBvdmVyIHRoYXQgTW92
ZSBjYXVzZXMgYWRkLXRvLXNlbGYuIEJ1dCB3aGF0IGlmIHdlCisgICAgICAgICAgICAvLyBlbWl0
IHNvbWV0aGluZyBsaWtlIGEgTW92ZSAtIG9yIGV2ZW4gZG8gb3RoZXIga2luZHMgb2YgY29weS1w
cm9wYWdhdGlvbiBvbiB0bXAncyAtCisgICAgICAgICAgICAvLyBzb21ld2hlcmUgZWxzZSBpbiB0
aGlzIGNvZGUuIFRoZSBhZGQtdG8tc2VsZiBzaXR1YXRpb24gbWF5IG9ubHkgZW1lcmdlIGFmdGVy
IHNvbWUgb3RoZXIgQWlyCisgICAgICAgICAgICAvLyBvcHRpbWl6YXRpb25zIHJlbW92ZSBvdGhl
ciBNb3ZlJ3Mgb3IgaWRlbnRpdHktbGlrZSBvcGVyYXRpb25zLiBUaGF0J3Mgd2h5IHdlIGRvbid0
IHVzZQorICAgICAgICAgICAgLy8gTGF0ZVVzZSBoZXJlIHRvIHRha2UgY2FyZSBvZiBhZGQtdG8t
c2VsZi4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgQ2hlY2tTcGVjaWFsKiBzcGVjaWFsID0g
ZW5zdXJlQ2hlY2tTcGVjaWFsKG9wY29kZSwgMyk7CiAgICAgICAgICAgICAKKyAgICAgICAgICAg
IEluc3QgaW5zdChQYXRjaCwgY2hlY2tWYWx1ZSwgQXJnOjpzcGVjaWFsKHNwZWNpYWwpKTsKKwor
ICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6
Ok92ZXJmbG93KSk7CisKKyAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQoc291cmNlKTsKKyAg
ICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQocmVzdWx0KTsKKwogICAgICAgICAgICAgZmlsbFN0
YWNrbWFwKGluc3QsIGNoZWNrVmFsdWUsIDIpOwogCiAgICAgICAgICAgICBtX2luc3RzLmxhc3Qo
KS5hcHBlbmQoV1RGOjptb3ZlKGluc3QpKTsKQEAgLTE2MDAsMTAgKzE2MjgsNiBAQCBwcml2YXRl
OgogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBDaGVja011bDogewotICAgICAgICAgICAgLy8g
SGFuZGxlIG11bHRpcGxpY2F0aW9uIHNlcGFyYXRlbHkuIE11bHRpcGxpY2F0aW9uIGlzIGhhcmQg
YmVjYXVzZSB3ZSBoYXZlIHRvIHByZXNlcnZlCi0gICAgICAgICAgICAvLyBib3RoIGlucHV0cy4g
VGhpcyByZXF1aXJlcyB1c2luZyB0aHJlZS1vcGVyYW5kIG11bHRpcGxpY2F0aW9uLCBldmVuIG9u
IHBsYXRmb3JtcyB3aGVyZQotICAgICAgICAgICAgLy8gdGhpcyByZXF1aXJlcyBhbiBhZGRpdGlv
bmFsIE1vdmUuCi0KICAgICAgICAgICAgIENoZWNrVmFsdWUqIGNoZWNrVmFsdWUgPSBtX3ZhbHVl
LT5hczxDaGVja1ZhbHVlPigpOwogCiAgICAgICAgICAgICBWYWx1ZSogbGVmdCA9IGNoZWNrVmFs
dWUtPmNoaWxkKDApOwpAQCAtMTYxMywxNCArMTYzNywxNSBAQCBwcml2YXRlOgogCiAgICAgICAg
ICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPQogICAgICAgICAgICAgICAgIG9wY29kZUZvclR5cGUo
QnJhbmNoTXVsMzIsIEJyYW5jaE11bDY0LCBBaXI6Ok9vcHMsIGNoZWNrVmFsdWUtPnR5cGUoKSk7
Ci0gICAgICAgICAgICBDaGVja1NwZWNpYWwqIHNwZWNpYWwgPSBlbnN1cmVDaGVja1NwZWNpYWwo
b3Bjb2RlLCA0KTsKKyAgICAgICAgICAgIENoZWNrU3BlY2lhbCogc3BlY2lhbCA9IGVuc3VyZUNo
ZWNrU3BlY2lhbChvcGNvZGUsIDMsIEFyZzo6TGF0ZVVzZSk7CiAKICAgICAgICAgICAgIC8vIEZJ
WE1FOiBIYW5kbGUgaW1tZWRpYXRlcy4KICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTEyMzAKIAorICAgICAgICAgICAgYXBwZW5kKE1vdmUs
IHRtcChsZWZ0KSwgcmVzdWx0KTsKKwogICAgICAgICAgICAgSW5zdCBpbnN0KFBhdGNoLCBjaGVj
a1ZhbHVlLCBBcmc6OnNwZWNpYWwoc3BlY2lhbCkpOwogICAgICAgICAgICAgaW5zdC5hcmdzLmFw
cGVuZChBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93KSk7Ci0gICAgICAgICAg
ICBpbnN0LmFyZ3MuYXBwZW5kKHRtcChsZWZ0KSk7CiAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBw
ZW5kKHRtcChyaWdodCkpOwogICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChyZXN1bHQpOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAkocmV2aXNpb24gMTkyNDc4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE2Myw2ICsxNjMsMTAgQEAgZW51bSBPcGNvZGUgOiBpbnQxNl90IHsKICAgICAvLyBjYWxsYmFj
a3MuIFlldCwgdGhpcyB0cmFuc2Zvcm1hdGlvbiBpcyB2YWxpZCBldmVuIGlmIHRoZXkgYXJlIGRp
ZmZlcmVudCBiZWNhdXNlIHdlIGtub3cgdGhhdAogICAgIC8vIGFmdGVyIHRoZSBmaXJzdCBDaGVj
a0FkZCBleGVjdXRlcywgdGhlIHNlY29uZCBDaGVja0FkZCBjb3VsZCBub3QgaGF2ZSBwb3NzaWJs
eSB0YWtlbiBzbG93CiAgICAgLy8gcGF0aC4gVGhlcmVmb3JlLCB0aGUgc2Vjb25kIENoZWNrQWRk
J3MgY2FsbGJhY2sgaXMgaXJyZWxldmFudC4KKyAgICAvLworICAgIC8vIE5vdGUgdGhhdCB0aGUg
Zmlyc3QgdHdvIGNoaWxkcmVuIG9mIHRoZXNlIG9wZXJhdGlvbnMgaGF2ZSBWYWx1ZVJlcCdzLCBi
b3RoIGFzIGlucHV0IGNvbnN0cmFpbnRzIGFuZAorICAgIC8vIGluIHRoZSByZXBzIHByb3ZpZGVk
IHRvIHRoZSBnZW5lcmF0b3IuIFRoZSBvdXRwdXQgY29uc3RyYWludHMgY291bGQgYmUgYW55dGhp
bmcsIGFuZCBzaG91bGQgbm90IGJlCisgICAgLy8gaW5zcGVjdGVkIGZvciBtZWFuaW5nLiBJZiB5
b3Ugd2FudCB0byBjYXB0dXJlIHRoZSB2YWx1ZXMgb2YgdGhlIGlucHV0cywgdXNlIHN0YWNrbWFw
IGFyZ3VtZW50cy4KICAgICBDaGVja0FkZCwKICAgICBDaGVja1N1YiwKICAgICBDaGVja011bCwK
QEAgLTE3MCw3ICsxNzQsOCBAQCBlbnVtIE9wY29kZSA6IGludDE2X3QgewogICAgIC8vIENoZWNr
IHRoYXQgc2lkZS1leGl0cy4gVXNlIHRoZSBDaGVja1ZhbHVlIGNsYXNzLiBMaWtlIENoZWNrQWRk
IGFuZCBmcmllbmRzLCB0aGlzIGhhcyBhCiAgICAgLy8gc3RhY2ttYXAgd2l0aCBhIGdlbmVyYXRp
b24gY2FsbGJhY2suIFRoaXMgdGFrZXMgYW4gaW50IGFyZ3VtZW50IHRoYXQgdGhpcyBicmFuY2hl
cyBvbiwgd2l0aAogICAgIC8vIGZ1bGwgYnJhbmNoIGZ1c2lvbiBpbiB0aGUgaW5zdHJ1Y3Rpb24g
c2VsZWN0b3IuIEEgdHJ1ZSB2YWx1ZSBqdW1wcyB0byB0aGUgZ2VuZXJhdG9yJ3Mgc2xvdwotICAg
IC8vIHBhdGguCisgICAgLy8gcGF0aC4gTm90ZSB0aGF0IHRoZSBwcmVkaWNhdGUgY2hpbGQgaXMg
aGFzIGJvdGggYW4gaW5wdXQgYW5kIG91dHB1dCBWYWx1ZVJlcC4gVGhlIGlucHV0IGNvbnN0cmFp
bnQKKyAgICAvLyBtdXN0IGJlIEFueSwgYW5kIHRoZSBvdXRwdXQgY291bGQgYmUgYW55dGhpbmcu
CiAgICAgQ2hlY2ssCiAKICAgICAvLyBTU0Egc3VwcG9ydCwgaW4gdGhlIHN0eWxlIG9mIERGRyBT
U0EuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFNw
ZWNpYWwuY3BwCShyZXZpc2lvbiAxOTI0NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQYXRjaHBvaW50U3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDE2ICs0MywxOCBA
QCBQYXRjaHBvaW50U3BlY2lhbDo6flBhdGNocG9pbnRTcGVjaWFsKCkKIHsKIH0KIAotdm9pZCBQ
YXRjaHBvaW50U3BlY2lhbDo6Zm9yRWFjaEFyZygKLSAgICBJbnN0JiBpbnN0LCBjb25zdCBTY29w
ZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYgY2FsbGJhY2spCit2b2lkIFBhdGNocG9p
bnRTcGVjaWFsOjpmb3JFYWNoQXJnKEluc3QmIGluc3QsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0
OjpFYWNoQXJnQ2FsbGJhY2s+JiBjYWxsYmFjaykKIHsKKyAgICAvLyBGSVhNRTogQWxsb3cgQjMg
UGF0Y2hwb2ludHMgdG8gc3BlY2lmeSBMYXRlVXNlLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTEzMzUKKyAgICAKICAgICBpZiAoaW5zdC5vcmlnaW4t
PnR5cGUoKSA9PSBWb2lkKSB7Ci0gICAgICAgIGZvckVhY2hBcmdJbXBsKDAsIDEsIGluc3QsIGNh
bGxiYWNrKTsKKyAgICAgICAgZm9yRWFjaEFyZ0ltcGwoMCwgMSwgaW5zdCwgQXJnOjpVc2UsIGNh
bGxiYWNrKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGNhbGxiYWNrKGluc3QuYXJn
c1sxXSwgQXJnOjpEZWYsIGluc3Qub3JpZ2luLT5haXJUeXBlKCkpOwotICAgIGZvckVhY2hBcmdJ
bXBsKDAsIDIsIGluc3QsIGNhbGxiYWNrKTsKKyAgICBmb3JFYWNoQXJnSW1wbCgwLCAyLCBpbnN0
LCBBcmc6OlVzZSwgY2FsbGJhY2spOwogfQogCiBib29sIFBhdGNocG9pbnRTcGVjaWFsOjppc1Zh
bGlkKEluc3QmIGluc3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VT
dHJlbmd0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVk
dWNlU3RyZW5ndGguY3BwCShyZXZpc2lvbiAxOTI0NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzMywxNyArNjMz
LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIENoZWNr
QWRkOgotICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRsZSBjb21tdXRhdGl2aXR5LgotICAgICAg
ICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTIxNAot
ICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAocmVwbGFjZVdpdGhOZXdWYWx1ZShtX3ZhbHVl
LT5jaGlsZCgwKS0+Y2hlY2tBZGRDb25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDEpKSkp
CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICht
X3ZhbHVlLT5jaGlsZCgwKS0+aXNJbnQoMCkpIHsKLSAgICAgICAgICAgICAgICBtX3ZhbHVlLT5y
ZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDEpKTsKLSAgICAgICAgICAgICAgICBt
X2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBoYW5kbGVDb21tdXRhdGl2aXR5KCk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQoMCkpIHsKICAgICAgICAgICAgICAg
ICBtX3ZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKQEAgLTY2
MSwzMCArNjU0LDQzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKFZhbHVlKiBuZWdhdGVkQ29uc3RhbnQgPSBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hlY2tOZWdD
b25zdGFudChtX3Byb2MpKSB7CisgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0
VmFsdWUobV9pbmRleCwgbmVnYXRlZENvbnN0YW50KTsKKyAgICAgICAgICAgICAgICBtX3ZhbHVl
LT5hczxDaGVja1ZhbHVlPigpLT5jb252ZXJ0VG9BZGQoKTsKKyAgICAgICAgICAgICAgICBtX3Zh
bHVlLT5jaGlsZCgxKSA9IG5lZ2F0ZWRDb25zdGFudDsKKyAgICAgICAgICAgICAgICBtX2NoYW5n
ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAg
ICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBDaGVja011bDoKLSAgICAgICAgICAgIC8vIEZJ
WE1FOiBIYW5kbGUgY29tbXV0YXRpdml0eS4KLSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTEyMTQKLSAgICAgICAgICAgIAogICAgICAgICAg
ICAgaWYgKHJlcGxhY2VXaXRoTmV3VmFsdWUobV92YWx1ZS0+Y2hpbGQoMCktPmNoZWNrTXVsQ29u
c3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgxKSkpKQogICAgICAgICAgICAgICAgIGJyZWFr
OwogCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPmlzSW50KDEpKSB7Ci0gICAg
ICAgICAgICAgICAgbV92YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgx
KSk7Ci0gICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG1fdmFs
dWUtPmNoaWxkKDEpLT5pc0ludCgxKSkgewotICAgICAgICAgICAgICAgIG1fdmFsdWUtPnJlcGxh
Y2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAgIG1fY2hh
bmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisgICAg
ICAgICAgICBoYW5kbGVDb21tdXRhdGl2aXR5KCk7CiAKLSAgICAgICAgICAgIGlmIChtX3ZhbHVl
LT5jaGlsZCgwKS0+aXNJbnQoMCkgfHwgbV92YWx1ZS0+Y2hpbGQoMSktPmlzSW50KDApKSB7Ci0g
ICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShtX3Byb2MuYWRkSW50Q29uc3RhbnQo
bV92YWx1ZSwgMCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKG1f
dmFsdWUtPmNoaWxkKDEpLT5oYXNJbnQoKSkgeworICAgICAgICAgICAgICAgIGJvb2wgbW9kaWZp
ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIHN3aXRjaCAobV92YWx1ZS0+Y2hpbGQoMSktPmFz
SW50KCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgICAgIHJl
cGxhY2VXaXRoTmV3VmFsdWUobV9wcm9jLmFkZEludENvbnN0YW50KG1fdmFsdWUsIDApKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAxOgorICAgICAg
ICAgICAgICAgICAgICBtX3ZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxk
KDApKTsKKyAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAg
ICAgICBtX3ZhbHVlLT5hczxDaGVja1ZhbHVlPigpLT5jb252ZXJ0VG9BZGQoKTsKKyAgICAgICAg
ICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMSkgPSBtX3ZhbHVlLT5jaGlsZCgwKTsKKyAgICAg
ICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgbW9kaWZp
ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGlmIChtb2RpZmllZCkKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKIApAQCAtNzYxLDYgKzc2Nywx
MCBAQCBwcml2YXRlOgogICAgIC8vIElmIHdlIGRlY2lkZSB0aGF0IHZhbHVlMiBjb21pbmcgZmly
c3QgaXMgdGhlIGNhbm9uaWNhbCBvcmRlcmluZy4KICAgICB2b2lkIGhhbmRsZUNvbW11dGF0aXZp
dHkoKQogICAgIHsKKyAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGhhdmUgY29tbXV0YXRpdmUgb3Bl
cmF0aW9ucyB0aGF0IHRha2UgbW9yZSB0aGFuIHR3byBjaGlsZHJlbi4gVGhvc2Ugb3BlcmF0aW9u
cyBtYXkKKyAgICAgICAgLy8gY29tbXV0ZSB0aGVpciBmaXJzdCB0d28gY2hpbGRyZW4gd2hpbGUg
bGVhdmluZyB0aGUgcmVzdCB1bmFmZmVjdGVkLgorICAgICAgICBBU1NFUlQobV92YWx1ZS0+bnVt
Q2hpbGRyZW4oKSA+PSAyKTsKKyAgICAgICAgCiAgICAgICAgIC8vIExlYXZlIGl0IGFsb25lIGlm
IHRoZSByaWdodCBjaGlsZCBpcyBhIGNvbnN0YW50LgogICAgICAgICBpZiAobV92YWx1ZS0+Y2hp
bGQoMSktPmlzQ29uc3RhbnQoKSkKICAgICAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAkocmV2aXNpb24gMTky
NDc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBjb25zdCBSZWdpc3RlclNldCYgU3RhY2tt
YXBTcGVjaWFsOjpleHRyCiAKIHZvaWQgU3RhY2ttYXBTcGVjaWFsOjpmb3JFYWNoQXJnSW1wbCgK
ICAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQWlyQXJn
cywKLSAgICBJbnN0JiBpbnN0LCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxi
YWNrPiYgY2FsbGJhY2spCisgICAgSW5zdCYgaW5zdCwgQXJnOjpSb2xlIHJvbGUsIGNvbnN0IFNj
b3BlZExhbWJkYTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+JiBjYWxsYmFjaykKIHsKICAgICBWYWx1
ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsKIApAQCAtNzgsNyArNzgsNyBAQCB2b2lkIFN0YWNrbWFw
U3BlY2lhbDo6Zm9yRWFjaEFyZ0ltcGwoCiAgICAgICAgIEFyZyYgYXJnID0gaW5zdC5hcmdzW2kg
KyBudW1JZ25vcmVkQWlyQXJnc107CiAgICAgICAgIFZhbHVlKiBjaGlsZCA9IHZhbHVlLT5jaGls
ZChpICsgbnVtSWdub3JlZEIzQXJncyk7CiAKLSAgICAgICAgY2FsbGJhY2soYXJnLCBBcmc6OlVz
ZSwgQXJnOjp0eXBlRm9yQjNUeXBlKGNoaWxkLT50eXBlKCkpKTsKKyAgICAgICAgY2FsbGJhY2so
YXJnLCByb2xlLCBBcmc6OnR5cGVGb3JCM1R5cGUoY2hpbGQtPnR5cGUoKSkpOwogICAgIH0KIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgJ
KHJldmlzaW9uIDE5MjQ3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFw
U3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUo
QjNfSklUKQogCisjaW5jbHVkZSAiQWlyQXJnLmgiCiAjaW5jbHVkZSAiQWlyU3BlY2lhbC5oIgog
I2luY2x1ZGUgIkIzVmFsdWVSZXAuaCIKIApAQCAtNTMsNyArNTQsNyBAQCBwcm90ZWN0ZWQ6CiAK
ICAgICB2b2lkIGZvckVhY2hBcmdJbXBsKAogICAgICAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNB
cmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQWlyQXJncywKLSAgICAgICAgQWlyOjpJbnN0JiwgY29u
c3QgU2NvcGVkTGFtYmRhPEFpcjo6SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYpOworICAgICAgICBB
aXI6Okluc3QmLCBBaXI6OkFyZzo6Um9sZSByb2xlLCBjb25zdCBTY29wZWRMYW1iZGE8QWlyOjpJ
bnN0OjpFYWNoQXJnQ2FsbGJhY2s+Jik7CiAgICAgYm9vbCBpc1ZhbGlkSW1wbCgKICAgICAgICAg
dW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3MsCiAg
ICAgICAgIEFpcjo6SW5zdCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3Rh
Y2ttYXBWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3RhY2ttYXBWYWx1ZS5jcHAJKHJldmlzaW9uIDE5MjQ3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1N0YWNrbWFwVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCwx
MSBAQCB2b2lkIFN0YWNrbWFwVmFsdWU6OmFwcGVuZChjb25zdCBDb25zdHJhCiAgICAgbV9yZXBz
LmFwcGVuZChjb25zdHJhaW5lZFZhbHVlLnJlcCgpKTsKIH0KIAordm9pZCBTdGFja21hcFZhbHVl
OjphcHBlbmRTb21lUmVnaXN0ZXIoVmFsdWUqIHZhbHVlKQoreworICAgIGFwcGVuZChDb25zdHJh
aW5lZFZhbHVlKHZhbHVlLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKSk7Cit9CisKIHZvaWQgU3Rh
Y2ttYXBWYWx1ZTo6c2V0Q29uc3RyYWluZWRDaGlsZCh1bnNpZ25lZCBpbmRleCwgY29uc3QgQ29u
c3RyYWluZWRWYWx1ZSYgY29uc3RyYWluZWRWYWx1ZSkKIHsKICAgICBjaGlsZChpbmRleCkgPSBj
b25zdHJhaW5lZFZhbHVlLnZhbHVlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTdGFja21hcFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzU3RhY2ttYXBWYWx1ZS5oCShyZXZpc2lvbiAxOTI0NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdGFja21hcFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDYgKzc3LDEw
IEBAIHB1YmxpYzoKICAgICAvLyBjaGlsZHJlbigpLmFwcGVuZCgpLiBUaGF0IHdpbGwgd29yayBm
aW5lLCBidXQgaXQncyBub3QgcmVjb21tZW5kZWQuCiAgICAgdm9pZCBhcHBlbmQoY29uc3QgQ29u
c3RyYWluZWRWYWx1ZSYpOwogCisgICAgLy8gVGhpcyBpcyBhIGhlbHBlciBmb3Igc29tZXRoaW5n
IHlvdSBtaWdodCBkbyBhIGxvdCBvZjogYXBwZW5kIGEgdmFsdWUgdGhhdCBzaG91bGQgYmUgY29u
c3RyYWluZWQKKyAgICAvLyB0byBTb21lUmVnaXN0ZXIuCisgICAgdm9pZCBhcHBlbmRTb21lUmVn
aXN0ZXIoVmFsdWUqKTsKKwogICAgIGNvbnN0IFZlY3RvcjxWYWx1ZVJlcD4mIHJlcHMoKSBjb25z
dCB7IHJldHVybiBtX3JlcHM7IH0KIAogICAgIHZvaWQgY2xvYmJlcihjb25zdCBSZWdpc3RlclNl
dCYgc2V0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAkocmV2
aXNpb24gMTkyNDc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNzgsNiArMjc4LDggQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID49IDIsICgiQXQgIiwgKnZhbHVlKSk7
CiAgICAgICAgICAgICAgICAgVkFMSURBVEUoaXNJbnQodmFsdWUtPmNoaWxkKDApLT50eXBlKCkp
LCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKGlzSW50KHZhbHVl
LT5jaGlsZCgxKS0+dHlwZSgpKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBW
QUxJREFURSh2YWx1ZS0+YXM8U3RhY2ttYXBWYWx1ZT4oKS0+Y29uc3RyYWluZWRDaGlsZCgwKS5y
ZXAoKSA9PSBWYWx1ZVJlcDo6QW55LCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAg
IFZBTElEQVRFKHZhbHVlLT5hczxTdGFja21hcFZhbHVlPigpLT5jb25zdHJhaW5lZENoaWxkKDEp
LnJlcCgpID09IFZhbHVlUmVwOjpBbnksICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAg
ICAgdmFsaWRhdGVTdGFja21hcCh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBjYXNlIENoZWNrOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFs
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNw
cAkocmV2aXNpb24gMTkyNDc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsNiArMTU0LDExIEBAIFZhbHVlKiBWYWx1ZTo6Y2hl
Y2tNdWxDb25zdGFudChQcm9jZWR1cmUKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAorVmFsdWUq
IFZhbHVlOjpjaGVja05lZ0NvbnN0YW50KFByb2NlZHVyZSYpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG51bGxwdHI7Cit9CisKIFZhbHVlKiBWYWx1ZTo6ZGl2Q29uc3RhbnQoUHJvY2VkdXJlJiwgY29u
c3QgVmFsdWUqKSBjb25zdAogewogICAgIHJldHVybiBudWxscHRyOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNWYWx1ZS5oCShyZXZpc2lvbiAxOTI0NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAogY2xhc3MgQmFzaWNCbG9jazsKK2NsYXNzIENo
ZWNrVmFsdWU7CiBjbGFzcyBQcm9jZWR1cmU7CiAKIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIFZh
bHVlIHsKQEAgLTExOCw2ICsxMTksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBWYWx1ZSogY2hl
Y2tBZGRDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0OwogICAg
IHZpcnR1YWwgVmFsdWUqIGNoZWNrU3ViQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUq
IG90aGVyKSBjb25zdDsKICAgICB2aXJ0dWFsIFZhbHVlKiBjaGVja011bENvbnN0YW50KFByb2Nl
ZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Q7CisgICAgdmlydHVhbCBWYWx1ZSogY2hl
Y2tOZWdDb25zdGFudChQcm9jZWR1cmUmKSBjb25zdDsKICAgICB2aXJ0dWFsIFZhbHVlKiBkaXZD
b25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0OyAvLyBUaGlzIGNo
b29zZXMgQ2hpbGxEaXYgc2VtYW50aWNzIGZvciBpbnRlZ2Vycy4KICAgICB2aXJ0dWFsIFZhbHVl
KiBiaXRBbmRDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0Owog
ICAgIHZpcnR1YWwgVmFsdWUqIGJpdE9yQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUq
IG90aGVyKSBjb25zdDsKQEAgLTI3Miw2ICsyNzQsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgfQogCiBw
cml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDaGVja1ZhbHVlOyAvLyBDaGVja1ZhbHVlOjpjb252
ZXJ0VG9BZGQoKSBtb2RpZmllcyBtX29wY29kZS4KKyAgICAKICAgICBzdGF0aWMgVHlwZSB0eXBl
Rm9yKE9wY29kZSwgVmFsdWUqIGZpcnN0Q2hpbGQpOwogCiAgICAgLy8gVGhpcyBncm91cCBvZiBm
aWVsZHMgaXMgYXJyYW5nZWQgdG8gZml0IGluIDY0IGJpdHMuCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvdGVzdGIzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvdGVzdGIzLmNwcAkocmV2aXNpb24gMTkyNDc4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL3Rlc3RiMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5NSw3ICsyOTUsOCBAQCB2b2lk
IHRlc3RNdWxBcmcoaW50IGEpCiB7CiAgICAgUHJvY2VkdXJlIHByb2M7CiAgICAgQmFzaWNCbG9j
ayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKLSAgICBWYWx1ZSogdmFsdWUgPSByb290LT5hcHBl
bmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50
R1BSMCk7CisgICAgVmFsdWUqIHZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAg
ICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLCByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOwogICAgIHJvb3QtPmFw
cGVuZE5ldzxDb250cm9sVmFsdWU+KAogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAog
ICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIE11bCwgT3JpZ2luKCksIHZhbHVl
LCB2YWx1ZSkpOwpAQCAtMzAzLDYgKzMwNCw1MSBAQCB2b2lkIHRlc3RNdWxBcmcoaW50IGEpCiAg
ICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MsIGEpID09IGEgKiBhKTsKIH0KIAordm9p
ZCB0ZXN0TXVsQXJnU3RvcmUoaW50IGEpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFz
aWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgIGludCBtdWxTbG90OworICAg
IGludCB2YWx1ZVNsb3Q7CisgICAgCisgICAgVmFsdWUqIHZhbHVlID0gcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPigKKyAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICByb290LT5h
cHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCkpOworICAgIFZhbHVlKiBtdWwgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2Ms
IE11bCwgT3JpZ2luKCksIHZhbHVlLCB2YWx1ZSk7CisKKyAgICByb290LT5hcHBlbmROZXc8TWVt
b3J5VmFsdWU+KAorICAgICAgICBwcm9jLCBTdG9yZSwgT3JpZ2luKCksIHZhbHVlLAorICAgICAg
ICByb290LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksICZ2YWx1ZVNs
b3QpKTsKKyAgICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KAorICAgICAgICBwcm9jLCBT
dG9yZSwgT3JpZ2luKCksIG11bCwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0UHRyVmFs
dWU+KHByb2MsIE9yaWdpbigpLCAmbXVsU2xvdCkpOworCisgICAgcm9vdC0+YXBwZW5kTmV3PENv
bnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksIHJvb3QtPmFwcGVu
ZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSk7CisKKyAgICBDSEVDSyghY29t
cGlsZUFuZFJ1bjxpbnQ+KHByb2MsIGEpKTsKKyAgICBDSEVDSyhtdWxTbG90ID09IGEgKiBhKTsK
KyAgICBDSEVDSyh2YWx1ZVNsb3QgPT0gYSk7Cit9CisKK3ZvaWQgdGVzdE11bEFkZEFyZyhpbnQg
YSkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5h
ZGRCbG9jaygpOworICAgIFZhbHVlKiB2YWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisg
ICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFy
Z3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsK
KyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJu
LCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAg
IHByb2MsIEFkZCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+
KHByb2MsIE11bCwgT3JpZ2luKCksIHZhbHVlLCB2YWx1ZSksCisgICAgICAgICAgICB2YWx1ZSkp
OworCisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MsIGEpID09IGEgKiBhICsgYSk7
Cit9CisKIHZvaWQgdGVzdE11bEFyZ3MoaW50IGEsIGludCBiKQogewogICAgIFByb2NlZHVyZSBw
cm9jOwpAQCAtMjU2MCw5ICsyNjA2LDkgQEAgdm9pZCB0ZXN0Q29tcGxleCh1bnNpZ25lZCBudW1W
YXJzLCB1bnNpZwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1Db25zdHJ1Y3RzOyAr
K2kpIHsKICAgICAgICAgaWYgKGkgJiAxKSB7CiAgICAgICAgICAgICAvLyBDb250cm9sIGZsb3cg
ZGlhbW9uZC4KLSAgICAgICAgICAgIHVuc2lnbmVkIHByZWRpY2F0ZVZhckluZGV4ID0gKGkgPj4g
MSkgJSBudW1WYXJzOwotICAgICAgICAgICAgdW5zaWduZWQgdGhlbkluY1ZhckluZGV4ID0gKChp
ID4+IDEpICsgMSkgJSBudW1WYXJzOwotICAgICAgICAgICAgdW5zaWduZWQgZWxzZUluY1Zhcklu
ZGV4ID0gKChpID4+IDEpICsgMikgJSBudW1WYXJzOworICAgICAgICAgICAgdW5zaWduZWQgcHJl
ZGljYXRlVmFySW5kZXggPSAoKGkgPj4gMSkgKyAyKSAlIG51bVZhcnM7CisgICAgICAgICAgICB1
bnNpZ25lZCB0aGVuSW5jVmFySW5kZXggPSAoKGkgPj4gMSkgKyAwKSAlIG51bVZhcnM7CisgICAg
ICAgICAgICB1bnNpZ25lZCBlbHNlSW5jVmFySW5kZXggPSAoKGkgPj4gMSkgKyAxKSAlIG51bVZh
cnM7CiAKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHRoZW5CbG9jayA9IHByb2MuYWRkQmxvY2so
KTsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGVsc2VCbG9jayA9IHByb2MuYWRkQmxvY2soKTsK
QEAgLTI2MDcsNyArMjY1Myw3IEBAIHZvaWQgdGVzdENvbXBsZXgodW5zaWduZWQgbnVtVmFycywg
dW5zaWcKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGxvb3BTa2lwID0gcHJvYy5hZGRCbG9jaygp
OwogICAgICAgICAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gcHJvYy5hZGRCbG9jaygp
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBWYWx1ZSogc3RhcnRJbmRleCA9IHZhcnNbKGkg
Pj4gMSkgJSBudW1WYXJzXTsKKyAgICAgICAgICAgIFZhbHVlKiBzdGFydEluZGV4ID0gdmFyc1so
KGkgPj4gMSkgKyAxKSAlIG51bVZhcnNdOwogICAgICAgICAgICAgVmFsdWUqIHN0YXJ0U3VtID0g
Y3VycmVudC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApOwogICAg
ICAgICAgICAgY3VycmVudC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCiAgICAgICAgICAgICAg
ICAgcHJvYywgQnJhbmNoLCBPcmlnaW4oKSwgc3RhcnRJbmRleCwKQEAgLTI2NjEsNyArMjcwNyw3
IEBAIHZvaWQgdGVzdENvbXBsZXgodW5zaWduZWQgbnVtVmFycywgdW5zaWcKICAgICAgICAgICAg
IHNraXBTdW0tPnNldFBoaShmaW5hbFN1bSk7CiAKICAgICAgICAgICAgIGN1cnJlbnQgPSBjb250
aW51YXRpb247Ci0gICAgICAgICAgICB2YXJzWygoaSA+PiAxKSArIDEpICUgbnVtVmFyc10gPSBm
aW5hbFN1bTsKKyAgICAgICAgICAgIHZhcnNbKChpID4+IDEpICsgMCkgJSBudW1WYXJzXSA9IGZp
bmFsU3VtOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yODQxLDggKzI4ODcsNiBAQCB2b2lkIHRl
c3RTaW1wbGVDaGVjaygpCiAgICAgY2hlY2stPnNldEdlbmVyYXRvcigKICAgICAgICAgWyZdIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMp
IHsKICAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSAxKTsKLSAgICAgICAg
ICAgIENIRUNLKHBhcmFtcy5yZXBzWzBdLmlzQ29uc3RhbnQoKSk7Ci0gICAgICAgICAgICBDSEVD
SyhwYXJhbXMucmVwc1swXS52YWx1ZSgpID09IDEpOwogCiAgICAgICAgICAgICAvLyBUaGlzIHNo
b3VsZCBhbHdheXMgd29yayBiZWNhdXNlIGEgZnVuY3Rpb24gdGhpcyBzaW1wbGUgc2hvdWxkIG5l
dmVyIGhhdmUgY2FsbGVlCiAgICAgICAgICAgICAvLyBzYXZlcy4KQEAgLTI4NzQsOCArMjkxOCw2
IEBAIHZvaWQgdGVzdENoZWNrTGVzc1RoYW4oKQogICAgIGNoZWNrLT5zZXRHZW5lcmF0b3IoCiAg
ICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwcy5zaXplKCkgPT0g
MSk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1swXS5pc0NvbnN0YW50KCkpOwotICAg
ICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMF0udmFsdWUoKSA9PSAxKTsKIAogICAgICAgICAg
ICAgLy8gVGhpcyBzaG91bGQgYWx3YXlzIHdvcmsgYmVjYXVzZSBhIGZ1bmN0aW9uIHRoaXMgc2lt
cGxlIHNob3VsZCBuZXZlciBoYXZlIGNhbGxlZQogICAgICAgICAgICAgLy8gc2F2ZXMuCkBAIC0y
OTIxLDggKzI5NjMsNiBAQCB2b2lkIHRlc3RDaGVja01lZ2FDb21ibygpCiAgICAgY2hlY2stPnNl
dEdlbmVyYXRvcigKICAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgIENIRUNLKHBhcmFtcy5y
ZXBzLnNpemUoKSA9PSAxKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzBdLmlzQ29u
c3RhbnQoKSk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1swXS52YWx1ZSgpID09IDEp
OwogCiAgICAgICAgICAgICAvLyBUaGlzIHNob3VsZCBhbHdheXMgd29yayBiZWNhdXNlIGEgZnVu
Y3Rpb24gdGhpcyBzaW1wbGUgc2hvdWxkIG5ldmVyIGhhdmUgY2FsbGVlCiAgICAgICAgICAgICAv
LyBzYXZlcy4KQEAgLTI5NTcsMTQgKzI5OTcsNTAgQEAgdm9pZCB0ZXN0Q2hlY2tBZGRJbW0oKQog
ICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOwogICAgIFZhbHVlKiBhcmcyID0gcm9vdC0+YXBwZW5k
TmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDQyKTsKICAgICBDaGVja1ZhbHVlKiBj
aGVja0FkZCA9IHJvb3QtPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihwcm9jLCBDaGVja0FkZCwgT3Jp
Z2luKCksIGFyZzEsIGFyZzIpOworICAgIGNoZWNrQWRkLT5hcHBlbmQoYXJnMSk7CisgICAgY2hl
Y2tBZGQtPmFwcGVuZChhcmcyKTsKICAgICBjaGVja0FkZC0+c2V0R2VuZXJhdG9yKAogICAgICAg
ICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMm
IHBhcmFtcykgewotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDIpOwot
ICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMF0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBD
SEVDSyhwYXJhbXMucmVwc1sxXS5pc0NvbnN0YW50KCkpOwotICAgICAgICAgICAgQ0hFQ0socGFy
YW1zLnJlcHNbMV0udmFsdWUoKSA9PSA0Mik7Ci0gICAgICAgICAgICBqaXQuc3ViMzIoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoNDIpLCBwYXJhbXMucmVwc1swXS5ncHIoKSk7Ci0gICAgICAg
ICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUocGFyYW1zLnJlcHNbMF0uZ3ByKCksIEZQUklu
Zm86OmZwUmVnVDApOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDQp
OworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMl0uaXNHUFIoKSk7CisgICAgICAgICAg
ICBDSEVDSyhwYXJhbXMucmVwc1szXS5pc0NvbnN0YW50KCkpOworICAgICAgICAgICAgQ0hFQ0so
cGFyYW1zLnJlcHNbM10udmFsdWUoKSA9PSA0Mik7CisgICAgICAgICAgICBqaXQuY29udmVydElu
dDMyVG9Eb3VibGUocGFyYW1zLnJlcHNbMl0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDApOworICAg
ICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKDQyKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAgICAgICAgICBqaXQuYWRkRG91YmxlKEZQ
UkluZm86OmZwUmVnVDEsIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICAgICAgaml0LmVtaXRG
dW5jdGlvbkVwaWxvZ3VlKCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOwor
ICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1cm4s
IE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIElUb0QsIE9y
aWdpbigpLCBjaGVja0FkZCkpOworCisgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKwor
ICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCAwKSA9PSA0Mi4wKTsKKyAgICBDSEVDSyhp
bnZva2U8ZG91YmxlPigqY29kZSwgMSkgPT0gNDMuMCk7CisgICAgQ0hFQ0soaW52b2tlPGRvdWJs
ZT4oKmNvZGUsIDQyKSA9PSA4NC4wKTsKKyAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwg
MjE0NzQ4MzY0NykgPT0gMjE0NzQ4MzY4OS4wKTsKK30KKwordm9pZCB0ZXN0Q2hlY2tBZGRJbW1D
b21tdXRlKCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0g
cHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiBhcmcxID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVl
PigKKyAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmRO
ZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BS
MCkpOworICAgIFZhbHVlKiBhcmcyID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIDQyKTsKKyAgICBDaGVja1ZhbHVlKiBjaGVja0FkZCA9IHJvb3QtPmFwcGVu
ZE5ldzxDaGVja1ZhbHVlPihwcm9jLCBDaGVja0FkZCwgT3JpZ2luKCksIGFyZzIsIGFyZzEpOwor
ICAgIGNoZWNrQWRkLT5hcHBlbmQoYXJnMSk7CisgICAgY2hlY2tBZGQtPmFwcGVuZChhcmcyKTsK
KyAgICBjaGVja0FkZC0+c2V0R2VuZXJhdG9yKAorICAgICAgICBbJl0gKENDYWxsSGVscGVycyYg
aml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAg
ICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDQpOworICAgICAgICAgICAgQ0hFQ0socGFy
YW1zLnJlcHNbMl0uaXNHUFIoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1szXS5p
c0NvbnN0YW50KCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbM10udmFsdWUoKSA9
PSA0Mik7CisgICAgICAgICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUocGFyYW1zLnJlcHNb
Ml0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDApOwogICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQz
MlRvRG91YmxlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDQyKSwgRlBSSW5mbzo6ZnBSZWdU
MSk7CiAgICAgICAgICAgICBqaXQuYWRkRG91YmxlKEZQUkluZm86OmZwUmVnVDEsIEZQUkluZm86
OmZwUmVnVDApOwogICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CkBAIC0y
OTgyLDYgKzMwNTgsNDAgQEAgdm9pZCB0ZXN0Q2hlY2tBZGRJbW0oKQogICAgIENIRUNLKGludm9r
ZTxkb3VibGU+KCpjb2RlLCAyMTQ3NDgzNjQ3KSA9PSAyMTQ3NDgzNjg5LjApOwogfQogCit2b2lk
IHRlc3RDaGVja0FkZEltbVNvbWVSZWdpc3RlcigpCit7CisgICAgUHJvY2VkdXJlIHByb2M7Cisg
ICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBWYWx1ZSogYXJnMSA9
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwK
KyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICBWYWx1ZSogYXJnMiA9IHJvb3QtPmFwcGVu
ZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCA0Mik7CisgICAgQ2hlY2tWYWx1ZSog
Y2hlY2tBZGQgPSByb290LT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4ocHJvYywgQ2hlY2tBZGQsIE9y
aWdpbigpLCBhcmcxLCBhcmcyKTsKKyAgICBjaGVja0FkZC0+YXBwZW5kU29tZVJlZ2lzdGVyKGFy
ZzEpOworICAgIGNoZWNrQWRkLT5hcHBlbmRTb21lUmVnaXN0ZXIoYXJnMik7CisgICAgY2hlY2tB
ZGQtPnNldEdlbmVyYXRvcigKKyAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3Qg
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIENIRUNLKHBh
cmFtcy5yZXBzLnNpemUoKSA9PSA0KTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzJd
LmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbM10uaXNHUFIoKSk7Cisg
ICAgICAgICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUocGFyYW1zLnJlcHNbMl0uZ3ByKCks
IEZQUkluZm86OmZwUmVnVDApOworICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91Ymxl
KHBhcmFtcy5yZXBzWzNdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKKyAgICAgICAgICAgIGpp
dC5hZGREb3VibGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAg
ICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsK
KyAgICAgICAgfSk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAg
IHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
cHJvYywgSVRvRCwgT3JpZ2luKCksIGNoZWNrQWRkKSk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21w
aWxlKHByb2MpOworCisgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDApID09IDQyLjAp
OworICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCAxKSA9PSA0My4wKTsKKyAgICBDSEVD
SyhpbnZva2U8ZG91YmxlPigqY29kZSwgNDIpID09IDg0LjApOworICAgIENIRUNLKGludm9rZTxk
b3VibGU+KCpjb2RlLCAyMTQ3NDgzNjQ3KSA9PSAyMTQ3NDgzNjg5LjApOworfQorCiB2b2lkIHRl
c3RDaGVja0FkZCgpCiB7CiAgICAgUHJvY2VkdXJlIHByb2M7CkBAIC0yOTkzLDE0ICszMTAzLDE1
IEBAIHZvaWQgdGVzdENoZWNrQWRkKCkKICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAog
ICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IEdQUkluZm86OmFyZ3VtZW50R1BSMSkpOwogICAgIENoZWNrVmFsdWUqIGNoZWNrQWRkID0gcm9v
dC0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KHByb2MsIENoZWNrQWRkLCBPcmlnaW4oKSwgYXJnMSwg
YXJnMik7CisgICAgY2hlY2tBZGQtPmFwcGVuZFNvbWVSZWdpc3RlcihhcmcxKTsKKyAgICBjaGVj
a0FkZC0+YXBwZW5kU29tZVJlZ2lzdGVyKGFyZzIpOwogICAgIGNoZWNrQWRkLT5zZXRHZW5lcmF0
b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYgcGFyYW1zKSB7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwcy5zaXpl
KCkgPT0gMik7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1swXS5pc0dQUigpKTsKLSAg
ICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzFdLmlzR1BSKCkpOwotICAgICAgICAgICAgaml0
LnN1YjMyKHBhcmFtcy5yZXBzWzFdLmdwcigpLCBwYXJhbXMucmVwc1swXS5ncHIoKSk7Ci0gICAg
ICAgICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUocGFyYW1zLnJlcHNbMF0uZ3ByKCksIEZQ
UkluZm86OmZwUmVnVDApOwotICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBh
cmFtcy5yZXBzWzFdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKKyAgICAgICAgICAgIENIRUNL
KHBhcmFtcy5yZXBzLnNpemUoKSA9PSA0KTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBz
WzJdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbM10uaXNHUFIoKSk7
CisgICAgICAgICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUocGFyYW1zLnJlcHNbMl0uZ3By
KCksIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91
YmxlKHBhcmFtcy5yZXBzWzNdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKICAgICAgICAgICAg
IGppdC5hZGREb3VibGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CiAgICAg
ICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICAgICAgICAgIGppdC5yZXQo
KTsKQEAgLTMwMjQsMTQgKzMxMzUsMTUgQEAgdm9pZCB0ZXN0Q2hlY2tBZGQ2NCgpCiAgICAgVmFs
dWUqIGFyZzEgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgVmFsdWUqIGFyZzIgPSByb290LT5hcHBl
bmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50
R1BSMSk7CiAgICAgQ2hlY2tWYWx1ZSogY2hlY2tBZGQgPSByb290LT5hcHBlbmROZXc8Q2hlY2tW
YWx1ZT4ocHJvYywgQ2hlY2tBZGQsIE9yaWdpbigpLCBhcmcxLCBhcmcyKTsKKyAgICBjaGVja0Fk
ZC0+YXBwZW5kU29tZVJlZ2lzdGVyKGFyZzEpOworICAgIGNoZWNrQWRkLT5hcHBlbmRTb21lUmVn
aXN0ZXIoYXJnMik7CiAgICAgY2hlY2tBZGQtPnNldEdlbmVyYXRvcigKICAgICAgICAgWyZdIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMp
IHsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSAyKTsKLSAgICAgICAg
ICAgIENIRUNLKHBhcmFtcy5yZXBzWzBdLmlzR1BSKCkpOwotICAgICAgICAgICAgQ0hFQ0socGFy
YW1zLnJlcHNbMV0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBqaXQuc3ViNjQocGFyYW1zLnJlcHNb
MV0uZ3ByKCksIHBhcmFtcy5yZXBzWzBdLmdwcigpKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0
SW50NjRUb0RvdWJsZShwYXJhbXMucmVwc1swXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7Ci0g
ICAgICAgICAgICBqaXQuY29udmVydEludDY0VG9Eb3VibGUocGFyYW1zLnJlcHNbMV0uZ3ByKCks
IEZQUkluZm86OmZwUmVnVDEpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgp
ID09IDQpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMl0uaXNHUFIoKSk7CisgICAg
ICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1szXS5pc0dQUigpKTsKKyAgICAgICAgICAgIGppdC5j
b252ZXJ0SW50NjRUb0RvdWJsZShwYXJhbXMucmVwc1syXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdU
MCk7CisgICAgICAgICAgICBqaXQuY29udmVydEludDY0VG9Eb3VibGUocGFyYW1zLnJlcHNbM10u
Z3ByKCksIEZQUkluZm86OmZwUmVnVDEpOwogICAgICAgICAgICAgaml0LmFkZERvdWJsZShGUFJJ
bmZvOjpmcFJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1QwKTsKICAgICAgICAgICAgIGppdC5lbWl0RnVu
Y3Rpb25FcGlsb2d1ZSgpOwogICAgICAgICAgICAgaml0LnJldCgpOwpAQCAtMzA5NSwxNCArMzIw
NywxNSBAQCB2b2lkIHRlc3RDaGVja1N1YkltbSgpCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxB
cmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7
CiAgICAgVmFsdWUqIGFyZzIgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgNDIpOwogICAgIENoZWNrVmFsdWUqIGNoZWNrU3ViID0gcm9vdC0+YXBwZW5kTmV3
PENoZWNrVmFsdWU+KHByb2MsIENoZWNrU3ViLCBPcmlnaW4oKSwgYXJnMSwgYXJnMik7CisgICAg
Y2hlY2tTdWItPmFwcGVuZChhcmcxKTsKKyAgICBjaGVja1N1Yi0+YXBwZW5kKGFyZzIpOwogICAg
IGNoZWNrU3ViLT5zZXRHZW5lcmF0b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7Ci0gICAgICAgICAgICBD
SEVDSyhwYXJhbXMucmVwcy5zaXplKCkgPT0gMik7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMu
cmVwc1swXS5pc0dQUigpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzFdLmlzQ29u
c3RhbnQoKSk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1sxXS52YWx1ZSgpID09IDQy
KTsKLSAgICAgICAgICAgIGppdC5hZGQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMig0Miks
IHBhcmFtcy5yZXBzWzBdLmdwcigpKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0Rv
dWJsZShwYXJhbXMucmVwc1swXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAg
ICBDSEVDSyhwYXJhbXMucmVwcy5zaXplKCkgPT0gNCk7CisgICAgICAgICAgICBDSEVDSyhwYXJh
bXMucmVwc1syXS5pc0dQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzNdLmlz
Q29uc3RhbnQoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1szXS52YWx1ZSgpID09
IDQyKTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXMucmVwc1sy
XS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7CiAgICAgICAgICAgICBqaXQuY29udmVydEludDMy
VG9Eb3VibGUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoNDIpLCBGUFJJbmZvOjpmcFJlZ1Qx
KTsKICAgICAgICAgICAgIGppdC5zdWJEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6
ZnBSZWdUMCk7CiAgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKQEAgLTMx
MjAsNiArMzIzMyw0MiBAQCB2b2lkIHRlc3RDaGVja1N1YkltbSgpCiAgICAgQ0hFQ0soaW52b2tl
PGRvdWJsZT4oKmNvZGUsIC0yMTQ3NDgzNjQ3KSA9PSAtMjE0NzQ4MzY4OS4wKTsKIH0KIAordm9p
ZCB0ZXN0Q2hlY2tTdWJCYWRJbW0oKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2lj
QmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgVmFsdWUqIGFyZzEgPSByb290LT5h
cHBlbmROZXc8VmFsdWU+KAorICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIwKSk7CisgICAgaW50MzJfdCBiYWRJbW0gPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPGludD46Om1pbigpOworICAgIFZhbHVlKiBhcmcyID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0
MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGJhZEltbSk7CisgICAgQ2hlY2tWYWx1ZSogY2hlY2tT
dWIgPSByb290LT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4ocHJvYywgQ2hlY2tTdWIsIE9yaWdpbigp
LCBhcmcxLCBhcmcyKTsKKyAgICBjaGVja1N1Yi0+YXBwZW5kKGFyZzEpOworICAgIGNoZWNrU3Vi
LT5hcHBlbmQoYXJnMik7CisgICAgY2hlY2tTdWItPnNldEdlbmVyYXRvcigKKyAgICAgICAgWyZd
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJh
bXMpIHsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSA0KTsKKyAgICAg
ICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzJdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0so
cGFyYW1zLnJlcHNbM10uaXNDb25zdGFudCgpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5y
ZXBzWzNdLnZhbHVlKCkgPT0gYmFkSW1tKTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJU
b0RvdWJsZShwYXJhbXMucmVwc1syXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAg
ICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
YmFkSW1tKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAgICAgICAgICBqaXQuc3ViRG91YmxlKEZQ
UkluZm86OmZwUmVnVDEsIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICAgICAgaml0LmVtaXRG
dW5jdGlvbkVwaWxvZ3VlKCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOwor
ICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1cm4s
IE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIElUb0QsIE9y
aWdpbigpLCBjaGVja1N1YikpOworCisgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKwor
ICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCAwKSA9PSAtc3RhdGljX2Nhc3Q8ZG91Ymxl
PihiYWRJbW0pKTsKKyAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgLTEpID09IC1zdGF0
aWNfY2FzdDxkb3VibGU+KGJhZEltbSkgLSAxKTsKKyAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigq
Y29kZSwgMSkgPT0gLXN0YXRpY19jYXN0PGRvdWJsZT4oYmFkSW1tKSArIDEpOworICAgIENIRUNL
KGludm9rZTxkb3VibGU+KCpjb2RlLCA0MikgPT0gLXN0YXRpY19jYXN0PGRvdWJsZT4oYmFkSW1t
KSArIDQyKTsKK30KKwogdm9pZCB0ZXN0Q2hlY2tTdWIoKQogewogICAgIFByb2NlZHVyZSBwcm9j
OwpAQCAtMzEzMSwxNCArMzI4MCwxNSBAQCB2b2lkIHRlc3RDaGVja1N1YigpCiAgICAgICAgIHBy
b2MsIFRydW5jLCBPcmlnaW4oKSwKICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVn
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKTsKICAgICBDaGVj
a1ZhbHVlKiBjaGVja1N1YiA9IHJvb3QtPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihwcm9jLCBDaGVj
a1N1YiwgT3JpZ2luKCksIGFyZzEsIGFyZzIpOworICAgIGNoZWNrU3ViLT5hcHBlbmQoYXJnMSk7
CisgICAgY2hlY2tTdWItPmFwcGVuZChhcmcyKTsKICAgICBjaGVja1N1Yi0+c2V0R2VuZXJhdG9y
KAogICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmIHBhcmFtcykgewotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgp
ID09IDIpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMF0uaXNHUFIoKSk7Ci0gICAg
ICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1sxXS5pc0dQUigpKTsKLSAgICAgICAgICAgIGppdC5h
ZGQzMihwYXJhbXMucmVwc1sxXS5ncHIoKSwgcGFyYW1zLnJlcHNbMF0uZ3ByKCkpOwotICAgICAg
ICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBhcmFtcy5yZXBzWzBdLmdwcigpLCBGUFJJ
bmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJh
bXMucmVwc1sxXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAgICAgICAgICBDSEVDSyhw
YXJhbXMucmVwcy5zaXplKCkgPT0gNCk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1sy
XS5pc0dQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzNdLmlzR1BSKCkpOwor
ICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBhcmFtcy5yZXBzWzJdLmdwcigp
LCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJs
ZShwYXJhbXMucmVwc1szXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CiAgICAgICAgICAgICBq
aXQuc3ViRG91YmxlKEZQUkluZm86OmZwUmVnVDEsIEZQUkluZm86OmZwUmVnVDApOwogICAgICAg
ICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgICAgICAgICBqaXQucmV0KCk7
CkBAIC0zMTY3LDE0ICszMzE3LDE1IEBAIHZvaWQgdGVzdENoZWNrU3ViNjQoKQogICAgIFZhbHVl
KiBhcmcxID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgIFZhbHVlKiBhcmcyID0gcm9vdC0+YXBwZW5k
TmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjEpOwogICAgIENoZWNrVmFsdWUqIGNoZWNrU3ViID0gcm9vdC0+YXBwZW5kTmV3PENoZWNrVmFs
dWU+KHByb2MsIENoZWNrU3ViLCBPcmlnaW4oKSwgYXJnMSwgYXJnMik7CisgICAgY2hlY2tTdWIt
PmFwcGVuZChhcmcxKTsKKyAgICBjaGVja1N1Yi0+YXBwZW5kKGFyZzIpOwogICAgIGNoZWNrU3Vi
LT5zZXRHZW5lcmF0b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7Ci0gICAgICAgICAgICBDSEVDSyhwYXJh
bXMucmVwcy5zaXplKCkgPT0gMik7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1swXS5p
c0dQUigpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzFdLmlzR1BSKCkpOwotICAg
ICAgICAgICAgaml0LmFkZDY0KHBhcmFtcy5yZXBzWzFdLmdwcigpLCBwYXJhbXMucmVwc1swXS5n
cHIoKSk7Ci0gICAgICAgICAgICBqaXQuY29udmVydEludDY0VG9Eb3VibGUocGFyYW1zLnJlcHNb
MF0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDApOwotICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQ2
NFRvRG91YmxlKHBhcmFtcy5yZXBzWzFdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKKyAgICAg
ICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSA0KTsKKyAgICAgICAgICAgIENIRUNL
KHBhcmFtcy5yZXBzWzJdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNb
M10uaXNHUFIoKSk7CisgICAgICAgICAgICBqaXQuY29udmVydEludDY0VG9Eb3VibGUocGFyYW1z
LnJlcHNbMl0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICAgICAgaml0LmNvbnZl
cnRJbnQ2NFRvRG91YmxlKHBhcmFtcy5yZXBzWzNdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QxKTsK
ICAgICAgICAgICAgIGppdC5zdWJEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBS
ZWdUMCk7CiAgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICAgICAg
ICAgIGppdC5yZXQoKTsKQEAgLTMyMzgsMTMgKzMzODksMTIgQEAgdm9pZCB0ZXN0Q2hlY2tOZWco
KQogICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCiAgICAgICAgIHJvb3QtPmFwcGVuZE5l
dzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIw
KSk7CiAgICAgQ2hlY2tWYWx1ZSogY2hlY2tOZWcgPSByb290LT5hcHBlbmROZXc8Q2hlY2tWYWx1
ZT4ocHJvYywgQ2hlY2tTdWIsIE9yaWdpbigpLCBhcmcxLCBhcmcyKTsKKyAgICBjaGVja05lZy0+
YXBwZW5kKGFyZzIpOwogICAgIGNoZWNrTmVnLT5zZXRHZW5lcmF0b3IoCiAgICAgICAgIFsmXSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1z
KSB7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwcy5zaXplKCkgPT0gMik7Ci0gICAgICAg
ICAgICBDSEVDSyhwYXJhbXMucmVwc1swXSA9PSBWYWx1ZVJlcDo6Y29uc3RhbnQoMCkpOwotICAg
ICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMV0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBqaXQu
bmVnMzIocGFyYW1zLnJlcHNbMV0uZ3ByKCkpOwotICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQz
MlRvRG91YmxlKHBhcmFtcy5yZXBzWzFdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKKyAgICAg
ICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSAzKTsKKyAgICAgICAgICAgIENIRUNL
KHBhcmFtcy5yZXBzWzJdLmlzR1BSKCkpOworICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRv
RG91YmxlKHBhcmFtcy5yZXBzWzJdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKICAgICAgICAg
ICAgIGppdC5uZWdhdGVEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7
CiAgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICAgICAgICAgIGpp
dC5yZXQoKTsKQEAgLTMyNjgsMTMgKzM0MTgsMTIgQEAgdm9pZCB0ZXN0Q2hlY2tOZWc2NCgpCiAg
ICAgVmFsdWUqIGFyZzEgPSByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmln
aW4oKSwgMCk7CiAgICAgVmFsdWUqIGFyZzIgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgQ2hlY2tW
YWx1ZSogY2hlY2tOZWcgPSByb290LT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4ocHJvYywgQ2hlY2tT
dWIsIE9yaWdpbigpLCBhcmcxLCBhcmcyKTsKKyAgICBjaGVja05lZy0+YXBwZW5kKGFyZzIpOwog
ICAgIGNoZWNrTmVnLT5zZXRHZW5lcmF0b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7Ci0gICAgICAgICAg
ICBDSEVDSyhwYXJhbXMucmVwcy5zaXplKCkgPT0gMik7Ci0gICAgICAgICAgICBDSEVDSyhwYXJh
bXMucmVwc1swXSA9PSBWYWx1ZVJlcDo6Y29uc3RhbnQoMCkpOwotICAgICAgICAgICAgQ0hFQ0so
cGFyYW1zLnJlcHNbMV0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBqaXQubmVnNjQocGFyYW1zLnJl
cHNbMV0uZ3ByKCkpOwotICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKHBhcmFt
cy5yZXBzWzFdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKKyAgICAgICAgICAgIENIRUNLKHBh
cmFtcy5yZXBzLnNpemUoKSA9PSAzKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzJd
LmlzR1BSKCkpOworICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKHBhcmFtcy5y
ZXBzWzJdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKICAgICAgICAgICAgIGppdC5uZWdhdGVE
b3VibGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CiAgICAgICAgICAgICBq
aXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICAgICAgICAgIGppdC5yZXQoKTsKQEAgLTMz
MDIsMTMgKzM0NTEsMTUgQEAgdm9pZCB0ZXN0Q2hlY2tNdWwoKQogICAgICAgICBwcm9jLCBUcnVu
YywgT3JpZ2luKCksCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSk7CiAgICAgQ2hlY2tWYWx1ZSog
Y2hlY2tNdWwgPSByb290LT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4ocHJvYywgQ2hlY2tNdWwsIE9y
aWdpbigpLCBhcmcxLCBhcmcyKTsKKyAgICBjaGVja011bC0+YXBwZW5kKGFyZzEpOworICAgIGNo
ZWNrTXVsLT5hcHBlbmQoYXJnMik7CiAgICAgY2hlY2tNdWwtPnNldEdlbmVyYXRvcigKICAgICAg
ICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1z
JiBwYXJhbXMpIHsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSAyKTsK
LSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzBdLmlzR1BSKCkpOwotICAgICAgICAgICAg
Q0hFQ0socGFyYW1zLnJlcHNbMV0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBqaXQuY29udmVydElu
dDMyVG9Eb3VibGUocGFyYW1zLnJlcHNbMF0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDApOwotICAg
ICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBhcmFtcy5yZXBzWzFdLmdwcigpLCBG
UFJJbmZvOjpmcFJlZ1QxKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9
PSA0KTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzJdLmlzR1BSKCkpOworICAgICAg
ICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbM10uaXNHUFIoKSk7CisgICAgICAgICAgICBqaXQuY29u
dmVydEludDMyVG9Eb3VibGUocGFyYW1zLnJlcHNbMl0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDAp
OworICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBhcmFtcy5yZXBzWzNdLmdw
cigpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKICAgICAgICAgICAgIGppdC5tdWxEb3VibGUoRlBSSW5m
bzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CiAgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0
aW9uRXBpbG9ndWUoKTsKICAgICAgICAgICAgIGppdC5yZXQoKTsKQEAgLTMzMjUsNiArMzQ3Niw5
MiBAQCB2b2lkIHRlc3RDaGVja011bCgpCiAgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUs
IDIxNDc0ODM2NDcsIDQyKSA9PSAyMTQ3NDgzNjQ3LjAgKiA0Mi4wKTsKIH0KIAordm9pZCB0ZXN0
Q2hlY2tNdWxNZW1vcnkoKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sq
IHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICBpbnQgbGVmdDsKKyAgICBpbnQgcmlnaHQ7
CisgICAgCisgICAgVmFsdWUqIGFyZzEgPSByb290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KAor
ICAgICAgICBwcm9jLCBMb2FkLCBJbnQzMiwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgJmxlZnQpKTsKKyAgICBWYWx1ZSog
YXJnMiA9IHJvb3QtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4oCisgICAgICAgIHByb2MsIExvYWQs
IEludDMyLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+
KHByb2MsIE9yaWdpbigpLCAmcmlnaHQpKTsKKyAgICBDaGVja1ZhbHVlKiBjaGVja011bCA9IHJv
b3QtPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihwcm9jLCBDaGVja011bCwgT3JpZ2luKCksIGFyZzEs
IGFyZzIpOworICAgIGNoZWNrTXVsLT5hcHBlbmQoYXJnMSk7CisgICAgY2hlY2tNdWwtPmFwcGVu
ZChhcmcyKTsKKyAgICBjaGVja011bC0+c2V0R2VuZXJhdG9yKAorICAgICAgICBbJl0gKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewor
ICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDQpOworICAgICAgICAgICAg
Q0hFQ0socGFyYW1zLnJlcHNbMl0uaXNHUFIoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMu
cmVwc1szXS5pc0dQUigpKTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShw
YXJhbXMucmVwc1syXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAgICBqaXQu
Y29udmVydEludDMyVG9Eb3VibGUocGFyYW1zLnJlcHNbM10uZ3ByKCksIEZQUkluZm86OmZwUmVn
VDEpOworICAgICAgICAgICAgaml0Lm11bERvdWJsZShGUFJJbmZvOjpmcFJlZ1QxLCBGUFJJbmZv
OjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAg
ICAgICAgICAgaml0LnJldCgpOworICAgICAgICB9KTsKKyAgICByb290LT5hcHBlbmROZXc8Q29u
dHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBJVG9ELCBPcmlnaW4oKSwgY2hlY2tNdWwpKTsKKwor
ICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisKKyAgICBsZWZ0ID0gMDsKKyAgICByaWdo
dCA9IDQyOworICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlKSA9PSAwLjApOworICAgIAor
ICAgIGxlZnQgPSAxOworICAgIHJpZ2h0ID0gNDI7CisgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4o
KmNvZGUpID09IDQyLjApOworCisgICAgbGVmdCA9IDQyOworICAgIHJpZ2h0ID0gNDI7CisgICAg
Q0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUpID09IDQyLjAgKiA0Mi4wKTsKKworICAgIGxlZnQg
PSAyMTQ3NDgzNjQ3OworICAgIHJpZ2h0ID0gNDI7CisgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4o
KmNvZGUpID09IDIxNDc0ODM2NDcuMCAqIDQyLjApOworfQorCit2b2lkIHRlc3RDaGVja011bDIo
KQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFk
ZEJsb2NrKCk7CisgICAgVmFsdWUqIGFyZzEgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAg
ICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1
bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7Cisg
ICAgVmFsdWUqIGFyZzIgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmln
aW4oKSwgMik7CisgICAgQ2hlY2tWYWx1ZSogY2hlY2tNdWwgPSByb290LT5hcHBlbmROZXc8Q2hl
Y2tWYWx1ZT4ocHJvYywgQ2hlY2tNdWwsIE9yaWdpbigpLCBhcmcxLCBhcmcyKTsKKyAgICBjaGVj
a011bC0+YXBwZW5kKGFyZzEpOworICAgIGNoZWNrTXVsLT5hcHBlbmQoYXJnMik7CisgICAgY2hl
Y2tNdWwtPnNldEdlbmVyYXRvcigKKyAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIENIRUNL
KHBhcmFtcy5yZXBzLnNpemUoKSA9PSA0KTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBz
WzJdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbM10uaXNDb25zdGFu
dCgpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzNdLnZhbHVlKCkgPT0gMik7Cisg
ICAgICAgICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUocGFyYW1zLnJlcHNbMl0uZ3ByKCks
IEZQUkluZm86OmZwUmVnVDApOworICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91Ymxl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDIpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKKyAgICAg
ICAgICAgIGppdC5tdWxEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7
CisgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAgICAgICAgICAgIGpp
dC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4o
CisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5l
dzxWYWx1ZT4ocHJvYywgSVRvRCwgT3JpZ2luKCksIGNoZWNrTXVsKSk7CisKKyAgICBhdXRvIGNv
ZGUgPSBjb21waWxlKHByb2MpOworCisgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDAp
ID09IDAuMCk7CisgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDEpID09IDIuMCk7Cisg
ICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDQyKSA9PSA0Mi4wICogMi4wKTsKKyAgICBD
SEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgMjE0NzQ4MzY0NykgPT0gMjE0NzQ4MzY0Ny4wICog
Mi4wKTsKK30KKwogdm9pZCB0ZXN0Q2hlY2tNdWw2NCgpCiB7CiAgICAgUHJvY2VkdXJlIHByb2M7
CkBAIC0zMzMyLDEzICszNTY5LDE1IEBAIHZvaWQgdGVzdENoZWNrTXVsNjQoKQogICAgIFZhbHVl
KiBhcmcxID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgIFZhbHVlKiBhcmcyID0gcm9vdC0+YXBwZW5k
TmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjEpOwogICAgIENoZWNrVmFsdWUqIGNoZWNrTXVsID0gcm9vdC0+YXBwZW5kTmV3PENoZWNrVmFs
dWU+KHByb2MsIENoZWNrTXVsLCBPcmlnaW4oKSwgYXJnMSwgYXJnMik7CisgICAgY2hlY2tNdWwt
PmFwcGVuZChhcmcxKTsKKyAgICBjaGVja011bC0+YXBwZW5kKGFyZzIpOwogICAgIGNoZWNrTXVs
LT5zZXRHZW5lcmF0b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7Ci0gICAgICAgICAgICBDSEVDSyhwYXJh
bXMucmVwcy5zaXplKCkgPT0gMik7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1swXS5p
c0dQUigpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzFdLmlzR1BSKCkpOwotICAg
ICAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKHBhcmFtcy5yZXBzWzBdLmdwcigpLCBG
UFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0SW50NjRUb0RvdWJsZShw
YXJhbXMucmVwc1sxXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAgICAgICAgICBDSEVD
SyhwYXJhbXMucmVwcy5zaXplKCkgPT0gNCk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVw
c1syXS5pc0dQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzNdLmlzR1BSKCkp
OworICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKHBhcmFtcy5yZXBzWzJdLmdw
cigpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50NjRUb0Rv
dWJsZShwYXJhbXMucmVwc1szXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CiAgICAgICAgICAg
ICBqaXQubXVsRG91YmxlKEZQUkluZm86OmZwUmVnVDEsIEZQUkluZm86OmZwUmVnVDApOwogICAg
ICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgICAgICAgICBqaXQucmV0
KCk7CkBAIC00MDIyLDYgKzQyNjEsMTAgQEAgdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQog
ICAgIFJVTih0ZXN0QWRkSW1tc0RvdWJsZShuZWdhdGl2ZVplcm8oKSwgbmVnYXRpdmVaZXJvKCkp
KTsKIAogICAgIFJVTih0ZXN0TXVsQXJnKDUpKTsKKyAgICBSVU4odGVzdE11bEFkZEFyZyg1KSk7
CisgICAgUlVOKHRlc3RNdWxBZGRBcmcoODUpKTsKKyAgICBSVU4odGVzdE11bEFyZ1N0b3JlKDUp
KTsKKyAgICBSVU4odGVzdE11bEFyZ1N0b3JlKDg1KSk7CiAgICAgUlVOKHRlc3RNdWxBcmdzKDEs
IDEpKTsKICAgICBSVU4odGVzdE11bEFyZ3MoMSwgMikpOwogICAgIFJVTih0ZXN0TXVsQXJncygz
LCAzKSk7CkBAIC00NDM3LDExICs0NjgwLDE0IEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRl
cikKICAgICBSVU4odGVzdENoZWNrTGVzc1RoYW4oKSk7CiAgICAgUlVOKHRlc3RDaGVja01lZ2FD
b21ibygpKTsKICAgICBSVU4odGVzdENoZWNrQWRkSW1tKCkpOworICAgIFJVTih0ZXN0Q2hlY2tB
ZGRJbW1Db21tdXRlKCkpOworICAgIFJVTih0ZXN0Q2hlY2tBZGRJbW1Tb21lUmVnaXN0ZXIoKSk7
CiAgICAgUlVOKHRlc3RDaGVja0FkZCgpKTsKICAgICBSVU4odGVzdENoZWNrQWRkNjQoKSk7CiAg
ICAgUlVOKHRlc3RDaGVja0FkZEZvbGQoMTAwLCAyMDApKTsKICAgICBSVU4odGVzdENoZWNrQWRk
Rm9sZEZhaWwoMjE0NzQ4MzY0NywgMTAwKSk7CiAgICAgUlVOKHRlc3RDaGVja1N1YkltbSgpKTsK
KyAgICBSVU4odGVzdENoZWNrU3ViQmFkSW1tKCkpOwogICAgIFJVTih0ZXN0Q2hlY2tTdWIoKSk7
CiAgICAgUlVOKHRlc3RDaGVja1N1YjY0KCkpOwogICAgIFJVTih0ZXN0Q2hlY2tTdWJGb2xkKDEw
MCwgMjAwKSk7CkBAIC00NDQ5LDYgKzQ2OTUsOCBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0
ZXIpCiAgICAgUlVOKHRlc3RDaGVja05lZygpKTsKICAgICBSVU4odGVzdENoZWNrTmVnNjQoKSk7
CiAgICAgUlVOKHRlc3RDaGVja011bCgpKTsKKyAgICBSVU4odGVzdENoZWNrTXVsTWVtb3J5KCkp
OworICAgIFJVTih0ZXN0Q2hlY2tNdWwyKCkpOwogICAgIFJVTih0ZXN0Q2hlY2tNdWw2NCgpKTsK
ICAgICBSVU4odGVzdENoZWNrTXVsRm9sZCgxMDAsIDIwMCkpOwogICAgIFJVTih0ZXN0Q2hlY2tN
dWxGb2xkRmFpbCgyMTQ3NDgzNjQ3LCAxMDApKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAkocmV2aXNpb24gMTkyNDc4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTQ2LDM4ICsxNDYsMjIgQEAgdm9pZCBhbGxvY2F0ZVN0YWNrKENvZGUm
IGNvZGUpCiAgICAgICAgIGF1dG8gaW50ZXJmZXJlID0gWyZdIChJbnN0JiBpbnN0KSB7CiAgICAg
ICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJJbnRlcmZlcmlu
ZzogIiwgcG9pbnRlckxpc3REdW1wKGxvY2FsQ2FsYy5saXZlKCkpLCAiXG4iKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgLy8gRm9ybSBhIGNsaXF1ZSBvZiBzdGFjayBzbG90cyB0aGF0IGlu
dGVyZmVyZS4gRmlyc3QgZmluZCB0aGUgbGlzdCBvZiBzdGFjayBzbG90cwotICAgICAgICAgICAg
Ly8gdGhhdCBhcmUgbGl2ZSByaWdodCBub3cuCi0gICAgICAgICAgICBzbG90cy5yZXNpemUoMCk7
Ci0gICAgICAgICAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IGxvY2FsQ2FsYy5saXZlKCkpIHsK
LSAgICAgICAgICAgICAgICBpZiAoc2xvdC0+a2luZCgpID09IFN0YWNrU2xvdEtpbmQ6OkFub255
bW91cykKLSAgICAgICAgICAgICAgICAgICAgc2xvdHMuYXBwZW5kKHNsb3QpOwotICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICAvLyBXZSBtdXN0bid0IG1hbmRhdGUgdGhhdCB0aGUgaW5wdXQg
Y29kZSBpcyBvcHRpbWFsLiBUaGVyZWZvcmUsIGl0IG1heSBoYXZlIGRlYWQgc3RvcmVzCi0gICAg
ICAgICAgICAvLyB0byB0aGUgc3RhY2suIFdlIG5lZWQgdG8gdHJlYXQgdGhlc2UgYXMgaW50ZXJm
ZXJpbmcuCiAgICAgICAgICAgICBpbnN0LmZvckVhY2hBcmcoCiAgICAgICAgICAgICAgICAgWyZd
IChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSkgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoQXJnOjppc0RlZihyb2xlKSAmJiBhcmcuaXNTdGFjaygpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBTdGFja1Nsb3QqIHNsb3QgPSBhcmcuc3RhY2tTbG90KCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoc2xvdC0+a2luZCgpID09IFN0YWNrU2xvdEtpbmQ6OkFub255
bW91cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICFsb2NhbENhbGMubGl2ZSgpLmNv
bnRhaW5zKHNsb3QpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3RzLmFwcGVuZChz
bG90KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFBcmc6OmlzRGVmKHJvbGUpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZy5p
c1N0YWNrKCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgICAgIFN0YWNrU2xvdCogc2xvdCA9IGFyZy5zdGFja1Nsb3QoKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHNsb3QtPmtpbmQoKSAhPSBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXMpCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAgICAgICAgZm9yIChT
dGFja1Nsb3QqIG90aGVyU2xvdCA6IGxvY2FsQ2FsYy5saXZlKCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGludGVyZmVyZW5jZVtzbG90XS5hZGQob3RoZXJTbG90KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGludGVyZmVyZW5jZVtvdGhlclNsb3RdLmFkZChzbG90KTsKICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgU2xvdHM6ICIs
IHBvaW50ZXJMaXN0RHVtcChzbG90cyksICJcbiIpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNsb3RzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgU3RhY2tT
bG90KiBvdXRlciA9IHNsb3RzW2ldOwotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9
IGkgKyAxOyBqIDwgc2xvdHMuc2l6ZSgpOyArK2opIHsKLSAgICAgICAgICAgICAgICAgICAgU3Rh
Y2tTbG90KiBpbm5lciA9IHNsb3RzW2pdOwotCi0gICAgICAgICAgICAgICAgICAgIGludGVyZmVy
ZW5jZVtpbm5lcl0uYWRkKG91dGVyKTsKLSAgICAgICAgICAgICAgICAgICAgaW50ZXJmZXJlbmNl
W291dGVyXS5hZGQoaW5uZXIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KICAg
ICAgICAgfTsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IGJsb2NrLT5zaXpl
KCk7IGluc3RJbmRleC0tOykgewpAQCAtMTg1LDcgKzE2OSw3IEBAIHZvaWQgYWxsb2NhdGVTdGFj
ayhDb2RlJiBjb2RlKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIkFuYWx5emluZzogIiwgYmxv
Y2stPmF0KGluc3RJbmRleCksICJcbiIpOwogICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2Nr
LT5hdChpbnN0SW5kZXgpOwogICAgICAgICAgICAgaW50ZXJmZXJlKGluc3QpOwotICAgICAgICAg
ICAgbG9jYWxDYWxjLmV4ZWN1dGUoaW5zdCk7CisgICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0
ZShpbnN0SW5kZXgpOwogICAgICAgICB9CiAgICAgICAgIEluc3Qgbm9wOwogICAgICAgICBpbnRl
cmZlcmUobm9wKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAJ
KHJldmlzaW9uIDE5MjQ3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJn
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgxLDYgKzE4MSw5IEBAIHZvaWQgcHJpbnRJbnRlcm5h
bChQcmludFN0cmVhbSYgb3V0LCBBcmcKICAgICBjYXNlIEFyZzo6VXNlQWRkcjoKICAgICAgICAg
b3V0LnByaW50KCJVc2VBZGRyIik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFyZzo6TGF0
ZVVzZToKKyAgICAgICAgb3V0LnByaW50KCJMYXRlVXNlIik7CisgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCShyZXZpc2lvbiAxOTI0NzgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Myw2ICs4Mywx
MCBAQCBwdWJsaWM6CiAgICAgICAgIC8vIGFsd2F5cyBlc2NhcGluZywgYW5kIFN0YWNrIGlzIHBy
ZXN1bWVkIHRvIGJlIGFsd2F5cyBlc2NhcGluZyBpZiBpdCdzIExvY2tlZC4KICAgICAgICAgVXNl
LAogCisgICAgICAgIC8vIExhdGVVc2UgbWVhbnMgdGhhdCB0aGUgSW5zdCB3aWxsIHJlYWQgZnJv
bSB0aGlzIHZhbHVlIGFmdGVyIGRvaW5nIGl0cyBEZWYncy4gTm90ZSB0aGF0IExhdGVVc2UKKyAg
ICAgICAgLy8gb24gYW4gQWRkciBvciBJbmRleCBzdGlsbCBtZWFucyBVc2Ugb24gdGhlIGludGVy
bmFsIHRlbXBvcmFyaWVzLgorICAgICAgICBMYXRlVXNlLAorCiAgICAgICAgIC8vIERlZiBtZWFu
cyB0aGF0IHRoZSBJbnN0IHdpbGwgd3JpdGUgdG8gdGhpcyB2YWx1ZSBhZnRlciBkb2luZyBldmVy
eXRoaW5nIGVsc2UuCiAgICAgICAgIC8vCiAgICAgICAgIC8vIEZvciBUbXA6IFRoZSBJbnN0IHdp
bGwgd3JpdGUgdG8gdGhpcyBUbXAuCkBAIC0xMjMsMTIgKzEyNywxMyBAQCBwdWJsaWM6CiAgICAg
fTsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgUm9sZSBpbXBsaWVzIHRoYXQgdGhlIElu
c3Qgd2lsbCBVc2UgdGhlIEFyZy4gSXQncyBkZWxpYmVyYXRlbHkgZmFsc2UgZm9yCi0gICAgLy8g
VXNlQWRkciwgc2luY2UgaXNVc2UoKSBmb3IgYW4gQXJnOjphZGRyIG1lYW5zIHRoYXQgd2UgYXJl
IGxvYWRpbmcgZnJvbSB0aGUgYWRkcmVzcy4KLSAgICBzdGF0aWMgYm9vbCBpc1VzZShSb2xlIHJv
bGUpCisgICAgLy8gVXNlQWRkciwgc2luY2UgaXNBbnlVc2UoKSBmb3IgYW4gQXJnOjphZGRyIG1l
YW5zIHRoYXQgd2UgYXJlIGxvYWRpbmcgZnJvbSB0aGUgYWRkcmVzcy4KKyAgICBzdGF0aWMgYm9v
bCBpc0FueVVzZShSb2xlIHJvbGUpCiAgICAgewogICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKICAg
ICAgICAgY2FzZSBVc2U6CiAgICAgICAgIGNhc2UgVXNlRGVmOgorICAgICAgICBjYXNlIExhdGVV
c2U6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgY2FzZSBEZWY6CiAgICAgICAg
IGNhc2UgVXNlQWRkcjoKQEAgLTEzNiwxMiArMTQxLDMzIEBAIHB1YmxpYzoKICAgICAgICAgfQog
ICAgIH0KIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgUm9sZSBpbXBsaWVzIHRoYXQgdGhl
IEluc3Qgd2lsbCBVc2UgdGhlIEFyZyBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZS4KKyAgICBz
dGF0aWMgYm9vbCBpc0Vhcmx5VXNlKFJvbGUgcm9sZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
cm9sZSkgeworICAgICAgICBjYXNlIFVzZToKKyAgICAgICAgY2FzZSBVc2VEZWY6CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBEZWY6CisgICAgICAgIGNhc2UgVXNlQWRk
cjoKKyAgICAgICAgY2FzZSBMYXRlVXNlOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBSb2xlIGltcGxpZXMg
dGhhdCB0aGUgSW5zdCB3aWxsIFVzZSB0aGUgQXJnIGFmdGVyIGRvaW5nIGV2ZXJ5dGhpbmcgZWxz
ZS4KKyAgICBzdGF0aWMgYm9vbCBpc0xhdGVVc2UoUm9sZSByb2xlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHJvbGUgPT0gTGF0ZVVzZTsKKyAgICB9CisKICAgICAvLyBSZXR1cm5zIHRydWUgaWYg
dGhlIFJvbGUgaW1wbGllcyB0aGF0IHRoZSBJbnN0IHdpbGwgRGVmIHRoZSBBcmcuCiAgICAgc3Rh
dGljIGJvb2wgaXNEZWYoUm9sZSByb2xlKQogICAgIHsKICAgICAgICAgc3dpdGNoIChyb2xlKSB7
CiAgICAgICAgIGNhc2UgVXNlOgogICAgICAgICBjYXNlIFVzZUFkZHI6CisgICAgICAgIGNhc2Ug
TGF0ZVVzZToKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgY2FzZSBEZWY6CiAg
ICAgICAgIGNhc2UgVXNlRGVmOgpAQCAtNjU0LDcgKzY4MCw3IEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIHN3aXRjaCAobV9raW5kKSB7CiAgICAgICAgIGNhc2UgVG1wOgotICAgICAgICAgICAg
QVNTRVJUKGlzVXNlKGFyZ1JvbGUpIHx8IGlzRGVmKGFyZ1JvbGUpKTsKKyAgICAgICAgICAgIEFT
U0VSVChpc0FueVVzZShhcmdSb2xlKSB8fCBpc0RlZihhcmdSb2xlKSk7CiAgICAgICAgICAgICBm
dW5jdG9yKG1fYmFzZSwgYXJnUm9sZSwgYXJnVHlwZSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBBZGRyOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJH
ZW5lcmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJHZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDE5MjQ3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSwxMCBA
QCB2b2lkIGdlbmVyYXRlKENvZGUmIGNvZGUsIENDYWxsSGVscGVycyYgCiAKICAgICAvLyBUaGlz
IGlzIHdoZXJlIHdlIHdvdWxkIGhhdmUgYSByZWFsIHJlZ2lzdGVyIGFsbG9jYXRvci4gVGhlbiwg
d2UgY291bGQgdXNlIHNwaWxsRXZlcnl0aGluZygpCiAgICAgLy8gaW4gcGxhY2Ugb2YgdGhlIHJl
Z2lzdGVyIGFsbG9jYXRvciBvbmx5IGZvciB0ZXN0aW5nLgotICAgIGl0ZXJhdGVkUmVnaXN0ZXJD
b2FsZXNjaW5nKGNvZGUpOworICAgIGlmIChmYWxzZSkKKyAgICAgICAgc3BpbGxFdmVyeXRoaW5n
KGNvZGUpOworICAgIGVsc2UKKyAgICAgICAgaXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcoY29k
ZSk7CiAKICAgICAvLyBQcmlvciB0byB0aGlzIHBvaW50IHRoZSBwcm9sb2d1ZSBhbmQgZXBpbG9n
dWUgaXMgaW1wbGljaXQuIFRoaXMgbWFrZXMgaXQgZXhwbGljaXQuIEl0IGFsc28KICAgICAvLyBk
b2VzIHRoaW5ncyBsaWtlIGlkZW50aWZ5IHdoaWNoIGNhbGxlZS1zYXZlcyB3ZSdyZSB1c2luZyBh
bmQgc2F2ZXMgdGhlbS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySXRl
cmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuY3BwCShyZXZpc2lv
biAxOTI0NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckl0ZXJhdGVkUmVn
aXN0ZXJDb2FsZXNjaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTIgKzM0LDE0IEBACiAj
aW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKICNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCiAjaW5j
bHVkZSAiQWlyUmVnaXN0ZXJQcmlvcml0eS5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgog
I2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsgbmFtZXNwYWNlIEFpciB7CiAKIHN0YXRpYyBib29sIGRlYnVnID0gZmFsc2U7CiBzdGF0
aWMgYm9vbCB0cmFjZURlYnVnID0gZmFsc2U7CitzdGF0aWMgYm9vbCByZXBvcnRTdGF0cyA9IGZh
bHNlOwogCiB0ZW1wbGF0ZTxBcmc6OlR5cGUgdHlwZT4KIHN0cnVjdCBNb3ZlSW5zdEhlbHBlcjsK
QEAgLTE3Niw3ICsxNzgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNE
ZWYocm9sZSkpCiAgICAgICAgICAgICAgICAgICAgIGRlZlRtcCA9IGFyZ1RtcDsKICAgICAgICAg
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKEFyZzo6aXNVc2Uocm9s
ZSkpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoQXJnOjppc0Vhcmx5VXNlKHJvbGUpKTsK
ICAgICAgICAgICAgICAgICAgICAgdXNlVG1wID0gYXJnVG1wOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0pOwpAQCAtMTk2LDYgKzE5OCw3IEBAIHB1YmxpYzoKICAgICAgICAgbWFr
ZVdvcmtMaXN0KCk7CiAKICAgICAgICAgaWYgKGRlYnVnKSB7CisgICAgICAgICAgICBkYXRhTG9n
KCJJbnRlcmZlcmVuY2U6ICIsIGxpc3REdW1wKG1faW50ZXJmZXJlbmNlRWRnZXMpLCAiXG4iKTsK
ICAgICAgICAgICAgIGR1bXBJbnRlcmZlcmVuY2VHcmFwaEluRG90KFdURjo6ZGF0YUZpbGUoKSk7
CiAgICAgICAgICAgICBkYXRhTG9nKCJJbml0aWFsIHdvcmsgbGlzdFxuIik7CiAgICAgICAgICAg
ICBkdW1wV29ya0xpc3RzKFdURjo6ZGF0YUZpbGUoKSk7CkBAIC03MzEsNiArNzM0LDExIEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpJbnRIYXNoPHVpbnQ2NF90Pjo6aGFzaCht
X3ZhbHVlKTsKICAgICAgICAgfQogCisgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBvdXQucHJpbnQoZmlyc3QoKSwgIjw9PiIs
IHNlY29uZCgpKTsKKyAgICAgICAgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgdWludDY0X3Qg
bV92YWx1ZSB7IDAgfTsKICAgICB9OwpAQCAtODU1LDcgKzg2Myw3IEBAIHN0YXRpYyB2b2lkIGFk
ZFNwaWxsQW5kRmlsbFRvUHJvZ3JhbShDb2QKICAgICAgICAgICAgICAgICBBcmcgYXJnID0gQXJn
OjpzdGFjayhzdGFja1Nsb3RFbnRyeS0+dmFsdWUpOwogICAgICAgICAgICAgICAgIE9wY29kZSBt
b3ZlID0gdHlwZSA9PSBBcmc6OkdQID8gTW92ZSA6IE1vdmVEb3VibGU7CiAKLSAgICAgICAgICAg
ICAgICBpZiAoQXJnOjppc1VzZShyb2xlKSkgeworICAgICAgICAgICAgICAgIGlmIChBcmc6Omlz
QW55VXNlKHJvbGUpKSB7CiAgICAgICAgICAgICAgICAgICAgIFRtcCBuZXdUbXAgPSBjb2RlLm5l
d1RtcCh0eXBlKTsKICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydChpbnN0
SW5kZXgsIG1vdmUsIGluc3Qub3JpZ2luLCBhcmcsIG5ld1RtcCk7CiAgICAgICAgICAgICAgICAg
ICAgIHRtcCA9IG5ld1RtcDsKQEAgLTg2OSw5ICs4NzcsMTAgQEAgc3RhdGljIHZvaWQgYWRkU3Bp
bGxBbmRGaWxsVG9Qcm9ncmFtKENvZAogfQogCiB0ZW1wbGF0ZTxBcmc6OlR5cGUgdHlwZT4KLXN0
YXRpYyB2b2lkIGl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nT25UeXBlKENvZGUmIGNvZGUpCitz
dGF0aWMgdm9pZCBpdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ09uVHlwZShDb2RlJiBjb2RlLCB1
bnNpZ25lZCYgbnVtSXRlcmF0aW9ucykKIHsKICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBu
dW1JdGVyYXRpb25zKys7CiAgICAgICAgIEl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2Nh
dG9yPHR5cGU+IGFsbG9jYXRvcihjb2RlKTsKICAgICAgICAgTGl2ZW5lc3M8VG1wPiBsaXZlbmVz
cyhjb2RlKTsKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKQEAgLTg3
OSw3ICs4ODgsNyBAQCBzdGF0aWMgdm9pZCBpdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ09uCiAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJ
bmRleC0tOykgewogICAgICAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdElu
ZGV4KTsKICAgICAgICAgICAgICAgICBhbGxvY2F0b3IuYnVpbGQoaW5zdCwgbG9jYWxDYWxjKTsK
LSAgICAgICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZShpbnN0KTsKKyAgICAgICAgICAgICAg
ICBsb2NhbENhbGMuZXhlY3V0ZShpbnN0SW5kZXgpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAKQEAgLTg5OCw5ICs5MDcsMTEgQEAgdm9pZCBpdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZyhD
b2RlJiBjbwogCiAgICAgYm9vbCBncElzQ29sb3JlZCA9IGZhbHNlOwogICAgIGJvb2wgZnBJc0Nv
bG9yZWQgPSBmYWxzZTsKKyAgICB1bnNpZ25lZCBudW1JdGVyYXRpb25zID0gMDsKIAogICAgIC8v
IEZpcnN0IHdlIHJ1biBib3RoIGFsbG9jYXRvciB0b2dldGhlciBhcyBsb25nIGFzIHRoZXkgYm90
aCBzcGlsbC4KICAgICB3aGlsZSAoIWdwSXNDb2xvcmVkICYmICFmcElzQ29sb3JlZCkgeworICAg
ICAgICBudW1JdGVyYXRpb25zKys7CiAgICAgICAgIEl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5n
QWxsb2NhdG9yPEFyZzo6R1A+IGdwQWxsb2NhdG9yKGNvZGUpOwogICAgICAgICBJdGVyYXRlZFJl
Z2lzdGVyQ29hbGVzY2luZ0FsbG9jYXRvcjxBcmc6OkZQPiBmcEFsbG9jYXRvcihjb2RlKTsKIApA
QCAtOTE1LDcgKzkyNiw3IEBAIHZvaWQgaXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcoQ29kZSYg
Y28KICAgICAgICAgICAgICAgICBncEFsbG9jYXRvci5idWlsZChpbnN0LCBsb2NhbENhbGMpOwog
ICAgICAgICAgICAgICAgIGZwQWxsb2NhdG9yLmJ1aWxkKGluc3QsIGxvY2FsQ2FsYyk7CiAKLSAg
ICAgICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZShpbnN0KTsKKyAgICAgICAgICAgICAgICBs
b2NhbENhbGMuZXhlY3V0ZShpbnN0SW5kZXgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAK
QEAgLTkzNiw5ICs5NDcsMTIgQEAgdm9pZCBpdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZyhDb2Rl
JiBjbwogICAgIH07CiAKICAgICBpZiAoIWdwSXNDb2xvcmVkKQotICAgICAgICBpdGVyYXRlZFJl
Z2lzdGVyQ29hbGVzY2luZ09uVHlwZTxBcmc6OkdQPihjb2RlKTsKKyAgICAgICAgaXRlcmF0ZWRS
ZWdpc3RlckNvYWxlc2NpbmdPblR5cGU8QXJnOjpHUD4oY29kZSwgbnVtSXRlcmF0aW9ucyk7CiAg
ICAgaWYgKCFmcElzQ29sb3JlZCkKLSAgICAgICAgaXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdP
blR5cGU8QXJnOjpGUD4oY29kZSk7CisgICAgICAgIGl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5n
T25UeXBlPEFyZzo6RlA+KGNvZGUsIG51bUl0ZXJhdGlvbnMpOworCisgICAgaWYgKHJlcG9ydFN0
YXRzKQorICAgICAgICBkYXRhTG9nKCJOdW0gaXRlcmF0aW9ucyA9ICIsIG51bUl0ZXJhdGlvbnMs
ICJcbiIpOwogfQogCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCShyZXZpc2lvbiAxOTI0Nzgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ5LDYgKzQ5LDE2IEBAIHB1YmxpYzoKICAgICAgICAgbV9saXZlQXRIZWFkLnJl
c2l6ZShjb2RlLnNpemUoKSk7CiAgICAgICAgIG1fbGl2ZUF0VGFpbC5yZXNpemUoY29kZS5zaXpl
KCkpOwogCisgICAgICAgIC8vIFRoZSBsaXZlQXRUYWlsIG9mIGVhY2ggYmxvY2sgYXV0b21hdGlj
YWxseSBjb250YWlucyB0aGUgTGF0ZVVzZSdzIG9mIHRoZSB0ZXJtaW5hbC4KKyAgICAgICAgZm9y
IChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgICAgIEhhc2hTZXQ8VGhpbmc+
JiBsaXZlID0gbV9saXZlQXRUYWlsW2Jsb2NrXTsKKyAgICAgICAgICAgIGJsb2NrLT5sYXN0KCku
Zm9yRWFjaDxUaGluZz4oCisgICAgICAgICAgICAgICAgWyZdIChUaGluZyYgdGhpbmcsIEFyZzo6
Um9sZSByb2xlLCBBcmc6OlR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNM
YXRlVXNlKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZS5hZGQodGhpbmcpOwor
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisKICAgICAgICAgSW5kZXhTZXQ8QmFzaWNC
bG9jaz4gc2VlbjsKIAogICAgICAgICBib29sIGNoYW5nZWQgPSB0cnVlOwpAQCAtNjEsNyArNzEs
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
ICAgIExvY2FsQ2FsYyBsb2NhbENhbGMoKnRoaXMsIGJsb2NrKTsKICAgICAgICAgICAgICAgICBm
b3IgKHNpemVfdCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspCi0gICAg
ICAgICAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGJsb2NrLT5hdChpbnN0SW5kZXgpKTsK
KyAgICAgICAgICAgICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUoaW5zdEluZGV4KTsKICAgICAg
ICAgICAgICAgICBib29sIGZpcnN0VGltZSA9IHNlZW4uYWRkKGJsb2NrKTsKICAgICAgICAgICAg
ICAgICBpZiAoIWZpcnN0VGltZSAmJiBsb2NhbENhbGMubGl2ZSgpID09IG1fbGl2ZUF0SGVhZFti
bG9ja10pCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtOTAsMTQgKzEwMCwxNyBA
QCBwdWJsaWM6CiAgICAgcHVibGljOgogICAgICAgICBMb2NhbENhbGMoTGl2ZW5lc3MmIGxpdmVu
ZXNzLCBCYXNpY0Jsb2NrKiBibG9jaykKICAgICAgICAgICAgIDogbV9saXZlKGxpdmVuZXNzLmxp
dmVBdFRhaWwoYmxvY2spKQorICAgICAgICAgICAgLCBtX2Jsb2NrKGJsb2NrKQogICAgICAgICB7
CiAgICAgICAgIH0KIAogICAgICAgICBjb25zdCBIYXNoU2V0PFRoaW5nPiYgbGl2ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbGl2ZTsgfQogICAgICAgICBIYXNoU2V0PFRoaW5nPiYmIHRha2VMaXZlKCkg
eyByZXR1cm4gV1RGOjptb3ZlKG1fbGl2ZSk7IH0KIAotICAgICAgICB2b2lkIGV4ZWN1dGUoSW5z
dCYgaW5zdCkKKyAgICAgICAgdm9pZCBleGVjdXRlKHVuc2lnbmVkIGluc3RJbmRleCkKICAgICAg
ICAgeworICAgICAgICAgICAgSW5zdCYgaW5zdCA9IG1fYmxvY2stPmF0KGluc3RJbmRleCk7Cisg
ICAgICAgICAgICAKICAgICAgICAgICAgIC8vIEZpcnN0IGhhbmRsZSBkZWYncy4KICAgICAgICAg
ICAgIGluc3QuZm9yRWFjaDxUaGluZz4oCiAgICAgICAgICAgICAgICAgW3RoaXNdIChUaGluZyYg
YXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlKSB7CkBAIC0xMDcsMjAgKzEyMCwzNCBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2xpdmUucmVtb3ZlKGFyZyk7CiAgICAg
ICAgICAgICAgICAgfSk7CiAKLSAgICAgICAgICAgIC8vIEZpbmFsbHkgaGFuZGxlIHVzZSdzLgor
ICAgICAgICAgICAgLy8gVGhlbiBoYW5kbGUgdXNlJ3MuCiAgICAgICAgICAgICBpbnN0LmZvckVh
Y2g8VGhpbmc+KAogICAgICAgICAgICAgICAgIFt0aGlzXSAoVGhpbmcmIGFyZywgQXJnOjpSb2xl
IHJvbGUsIEFyZzo6VHlwZSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQWxpdmUoYXJn
KSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKEFyZzo6aXNVc2Uocm9sZSkpCisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzRWFy
bHlVc2Uocm9sZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2xpdmUuYWRkKGFyZyk7CiAg
ICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIC8vIEFuZCBmaW5hbGx5LCBoYW5kbGUg
dGhlIGxhdGUgdXNlJ3Mgb2YgdGhlIHByZXZpb3VzIGluc3RydWN0aW9uLgorICAgICAgICAgICAg
aWYgKGluc3RJbmRleCkgeworICAgICAgICAgICAgICAgIEluc3QmIHByZXZJbnN0ID0gbV9ibG9j
ay0+YXQoaW5zdEluZGV4IC0gMSk7CisKKyAgICAgICAgICAgICAgICBwcmV2SW5zdC5mb3JFYWNo
PFRoaW5nPigKKyAgICAgICAgICAgICAgICAgICAgW3RoaXNdIChUaGluZyYgYXJnLCBBcmc6OlJv
bGUgcm9sZSwgQXJnOjpUeXBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFyZzo6
aXNMYXRlVXNlKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0FsaXZlKGFyZykpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9saXZlLmFkZChhcmcpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgSGFzaFNldDxU
aGluZz4gbV9saXZlOworICAgICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOwogICAgIH07Ci0gICAg
CisKIHByaXZhdGU6CiAgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgSGFzaFNldDxUaGluZz4+IG1f
bGl2ZUF0SGVhZDsKICAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBIYXNoU2V0PFRoaW5nPj4gbV9s
aXZlQXRUYWlsOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUu
b3Bjb2Rlcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9w
Y29kZS5vcGNvZGVzCShyZXZpc2lvbiAxOTI0NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCSh3b3JraW5nIGNvcHkpCkBAIC0zMTYsMTUgKzMxNiw5
IEBAIEJyYW5jaE11bDMyIFU6RywgVTpHLCBVRDpHIC9icmFuY2gKICAgICBSZXNDb25kLCBUbXAs
IFRtcAogICAgIFJlc0NvbmQsIEFkZHIsIFRtcAogCi1CcmFuY2hNdWwzMiBVOkcsIFU6RywgVTpH
LCBEOkcgL2JyYW5jaAotICAgIFJlc0NvbmQsIFRtcCwgVG1wLCBUbXAKLQogQnJhbmNoTXVsNjQg
VTpHLCBVOkcsIFVEOkcgL2JyYW5jaAogICAgIFJlc0NvbmQsIFRtcCwgVG1wCiAKLUJyYW5jaE11
bDY0IFU6RywgVTpHLCBVOkcsIEQ6RyAvYnJhbmNoCi0gICAgUmVzQ29uZCwgVG1wLCBUbXAsIFRt
cAotCiBCcmFuY2hTdWIzMiBVOkcsIFU6RywgVUQ6RyAvYnJhbmNoCiAgICAgUmVzQ29uZCwgVG1w
LCBUbXAKICAgICBSZXNDb25kLCBJbW0sIFRtcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJSZXBvcnRVc2VkUmVnaXN0ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlcG9ydFVzZWRSZWdpc3RlcnMuY3BwCShyZXZpc2lv
biAxOTI0NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlcG9ydFVzZWRS
ZWdpc3RlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHZvaWQgcmVwb3J0
VXNlZFJlZ2lzdGVycyhDb2RlJiBjb2RlKQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICBpbnN0LnJlcG9ydFVzZWRSZWdpc3RlcnMocmVnaXN0ZXJTZXQpOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUoaW5zdCk7CisgICAgICAgICAgICBsb2Nh
bENhbGMuZXhlY3V0ZShpbnN0SW5kZXgpOwogICAgICAgICB9CiAgICAgfQogfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNw
cAkocmV2aXNpb24gMTkyNDc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJT
cGlsbEV2ZXJ5dGhpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3IEBAIHZvaWQg
c3BpbGxFdmVyeXRoaW5nKENvZGUmIGNvZGUpCiAgICAgICAgIGZvciAodW5zaWduZWQgaW5zdElu
ZGV4ID0gYmxvY2stPnNpemUoKTsgaW5zdEluZGV4LS07KSB7CiAgICAgICAgICAgICBJbnN0JiBp
bnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CiAgICAgICAgICAgICBzZXRVc2VkUmVnaXN0ZXJz
KGluc3RJbmRleCArIDEsIGluc3QpOwotICAgICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUoaW5z
dCk7CisgICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZShpbnN0SW5kZXgpOwogICAgICAgICB9
CiAKICAgICAgICAgSW5zdCBub3A7CkBAIC0xMzksNiArMTM5LDcgQEAgdm9pZCBzcGlsbEV2ZXJ5
dGhpbmcoQ29kZSYgY29kZSkKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6VXNlRGVm
OgorICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6TGF0ZVVzZToKICAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAoUmVnIHJlZyA6IHJlZ3NJblByaW9yaXR5T3JkZXIodHlwZSkpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNldEJlZm9yZS5nZXQocmVnKSAmJiAhc2V0
QWZ0ZXIuZ2V0KHJlZykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QWZ0
ZXIuc2V0KHJlZyk7CkBAIC0xNTksNyArMTYwLDcgQEAgdm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29k
ZSYgY29kZSkKIAogICAgICAgICAgICAgICAgICAgICBPcGNvZGUgbW92ZSA9IHR5cGUgPT0gQXJn
OjpHUCA/IE1vdmUgOiBNb3ZlRG91YmxlOwogCi0gICAgICAgICAgICAgICAgICAgIGlmIChBcmc6
OmlzVXNlKHJvbGUpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55VXNlKHJv
bGUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RJbmRleCwgbW92ZSwgaW5zdC5vcmlnaW4sIGFy
ZywgdG1wKTsKICAgICAgICAgICAgICAgICAgICAgfQpJbmRleDogU291cmNlL1dURi9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MjQ3OCkK
KysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAK
KzIwMTUtMTEtMTYgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBD
aGVja0FkZC9NdWwgc2hvdWxkIGhhdmUgY29tbXV0YXRpdml0eSBvcHRpbWl6YXRpb25zIGluIEIz
LT5BaXIgbG93ZXJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1MTIxNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIERpc2FibGUgbXkgZmFpbGVkIGF0dGVtcHRzIGF0IHBlcmZlY3QgZm9yd2FyZGluZywg
c2luY2UgdGhleSB3ZXJlIGluY29ycmVjdCwgYW5kIGNhdXNlZCBjb21waWxlCisgICAgICAgIGVy
cm9ycyBpZiB5b3UgdHJpZWQgdG8gcGFzcyBhbiBhcmd1bWVudCB0aGF0IGJvdW5kIHRvIGx2YWx1
ZS4gVGhpcyBzaG91bGRuJ3QgYWZmZWN0IHBlcmZvcm1hbmNlIG9mCisgICAgICAgIGFueXRoaW5n
IHdlIGNhcmUgYWJvdXQsIGFuZCBwZXJmb3JtYW5jZSB0ZXN0cyBzZWVtIHRvIGNvbmZpcm0gdGhh
dCBpdCdzIGFsbCBnb29kLgorCisgICAgICAgICogd3RmL1Njb3BlZExhbWJkYS5oOgorCiAyMDE1
LTExLTExICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAg
RW5hYmxlIGNyb3NzLXBsYXRmb3JtIGNvbnRleHQgbWVudXMgYnkgZGVmYXVsdApJbmRleDogU291
cmNlL1dURi93dGYvU2NvcGVkTGFtYmRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
U2NvcGVkTGFtYmRhLmgJKHJldmlzaW9uIDE5MjQ3OCkKKysrIFNvdXJjZS9XVEYvd3RmL1Njb3Bl
ZExhbWJkYS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCwxOSArNDQsMjAgQEAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rpb25UeXBlPiBjbGFzcyBTYwogdGVtcGxhdGU8dHlwZW5hbWUgUmVzdWx0VHlw
ZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4KIGNsYXNzIFNjb3BlZExhbWJkYTxSZXN1bHRU
eXBlIChBcmd1bWVudFR5cGVzLi4uKT4gewogcHVibGljOgotICAgIFNjb3BlZExhbWJkYShSZXN1
bHRUeXBlICgqaW1wbCkodm9pZCogYXJnLCBBcmd1bWVudFR5cGVzJiYuLi4pID0gbnVsbHB0ciwg
dm9pZCogYXJnID0gbnVsbHB0cikKKyAgICBTY29wZWRMYW1iZGEoUmVzdWx0VHlwZSAoKmltcGwp
KHZvaWQqIGFyZywgQXJndW1lbnRUeXBlcy4uLikgPSBudWxscHRyLCB2b2lkKiBhcmcgPSBudWxs
cHRyKQogICAgICAgICA6IG1faW1wbChpbXBsKQogICAgICAgICAsIG1fYXJnKGFyZykKICAgICB7
CiAgICAgfQotICAgIAotICAgIFJlc3VsdFR5cGUgb3BlcmF0b3IoKShBcmd1bWVudFR5cGVzJiYu
Li4gYXJndW1lbnRzKSBjb25zdAorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gUGFzc2VkQXJn
dW1lbnRUeXBlcz4KKyAgICBSZXN1bHRUeXBlIG9wZXJhdG9yKCkoUGFzc2VkQXJndW1lbnRUeXBl
cyYmLi4uIGFyZ3VtZW50cykgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2ltcGwobV9h
cmcsIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudFR5cGVzPihhcmd1bWVudHMpLi4uKTsKKyAgICAgICAg
cmV0dXJuIG1faW1wbChtX2FyZywgc3RkOjpmb3J3YXJkPFBhc3NlZEFyZ3VtZW50VHlwZXM+KGFy
Z3VtZW50cykuLi4pOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBSZXN1bHRUeXBlICgqbV9pbXBs
KSh2b2lkKiBhcmcsIEFyZ3VtZW50VHlwZXMmJi4uLik7CisgICAgUmVzdWx0VHlwZSAoKm1faW1w
bCkodm9pZCogYXJnLCBBcmd1bWVudFR5cGVzLi4uKTsKICAgICB2b2lkICptX2FyZzsKIH07CiAK
QEAgLTcyLDEwICs3Myw5IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgc3RhdGlj
IFJlc3VsdFR5cGUgaW1wbEZ1bmN0aW9uKHZvaWQqIGFyZ3VtZW50LCBBcmd1bWVudFR5cGVzJiYu
Li4gYXJndW1lbnRzKQorICAgIHN0YXRpYyBSZXN1bHRUeXBlIGltcGxGdW5jdGlvbih2b2lkKiBh
cmd1bWVudCwgQXJndW1lbnRUeXBlcy4uLiBhcmd1bWVudHMpCiAgICAgewotICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8U2NvcGVkTGFtYmRhRnVuY3Rvcio+KGFyZ3VtZW50KS0+bV9mdW5jdG9y
KAotICAgICAgICAgICAgc3RkOjpmb3J3YXJkPEFyZ3VtZW50VHlwZXM+KGFyZ3VtZW50cykuLi4p
OworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U2NvcGVkTGFtYmRhRnVuY3Rvcio+KGFyZ3Vt
ZW50KS0+bV9mdW5jdG9yKGFyZ3VtZW50cy4uLik7CiAgICAgfQogCiAgICAgRnVuY3RvciBtX2Z1
bmN0b3I7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265662</attachid>
            <date>2015-11-16 21:42:14 -0800</date>
            <delta_ts>2015-11-17 14:18:50 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>86551</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkyNTA3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3NCBA
QAorMjAxNS0xMS0xNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IENoZWNrQWRkL011bCBzaG91bGQgaGF2ZSBjb21tdXRhdGl2aXR5IG9wdGltaXphdGlvbnMgaW4g
QjMtPkFpciBsb3dlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTUxMjE0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGhpcyBpcyBhbiBvdmVyaGF1bCBvZiBDaGVja0FkZC9DaGVja1N1Yi9DaGVja011
bCB0aGF0IGZpeGVzIGJ1Z3MsIGltcHJvdmVzIGNvZGVnZW4sIGFuZAorICAgICAgICBzaW1wbGlm
aWVzIHRoZSBjb250cmFjdCBiZXR3ZWVuIEIzIGFuZCBpdHMgY2xpZW50LgorCisgICAgICAgIFBy
ZXZpb3VzbHksIHRoZSBpZGVhIHdhcyB0aGF0IHRoZSBvcGVyYW5kcyB0byB0aGUgQWlyIEJyYW5j
aEFkZC9TdWIvTXVsIG1hdGNoZWQgdGhlIGNoaWxkcmVuIG9mCisgICAgICAgIHRoZSBCMyBDaGVj
a0FkZC9TdWIvTXVsLCBvciBhdCBsZWFzdCwgdGhhdCdzIHdoYXQgdGhlIEIzOjpDaGVja1NwZWNp
YWwgd291bGQgbWFrZSB5b3UgYmVsaWV2ZS4KKyAgICAgICAgVGhpcyBtZWFudCB0aGF0IEIzL0Fp
ciBoYWQgdG8gYXZvaWQgb3B0aW1pemF0aW9ucyB0aGF0IHdvdWxkIGJyZWFrIHRoaXMgcHJvdG9j
b2wuIFRoaXMgcHJldmVudGVkCisgICAgICAgIGNvbW11dGF0aXZpdHkgb3B0aW1pemF0aW9ucyBv
biBDaGVja0FkZC9NdWwgYW5kIGl0IGFsc28gcHJldmVudGVkIHN0cmVuZ3RoIHJlZHVjdGlvbiBm
cm9tCisgICAgICAgIENoZWNrTXVsKHgsIDIpIHRvIENoZWNrQWRkKHgsIHgpLCBmb3IgZXhhbXBs
ZS4gVGhvc2Ugb3B0aW1pemF0aW9ucyB3b3VsZCBicmVhayB0aGluZ3MgYmVjYXVzZSB0aGUKKyAg
ICAgICAgY2xpZW50J3MgU3RhY2ttYXAgZ2VuZXJhdGlvbiBjYWxsYmFjayB3YXMgYWxsb3dlZCB0
byBhc3N1bWUgdGhhdCB0aGUgZmlyc3QgZW50cnkgaW4gcGFyYW1zLnJlcHMKKyAgICAgICAgd2Fz
IHRoZSBmaXJzdCBjaGlsZC4gQWxzbywgdGhlcmUgd2FzIGEgY29udHJhY3QgYmV0d2VlbiBCMyBh
bmQgaXRzIGNsaWVudCB0aGF0IGZvciBDaGVja0FkZC9TdWIsCisgICAgICAgIHRoZSBjbGllbnQg
d291bGQgdW5kbyB0aGUgb3BlcmF0aW9uIGJ5IGRvaW5nIHRoZSBvcHBvc2l0ZSBvcGVyYXRpb24g
d2l0aCB0aGUgcGFyYW1zLnJlcHNbMF0gYXMgdGhlCisgICAgICAgIHNvdXJjZSBhbmQgcGFyYW1z
LnJlcHNbMV0gYXMgdGhlIGRlc3RpbmF0aW9uLgorCisgICAgICAgIFRoaXMgbm90IG9ubHkgcHJl
dmVudGVkIGNvbW11dGF0aXZpdHkgb3B0aW1pemF0aW9ucywgaXQgYWxzbyBsZWQgdG8gYnVncy4g
SGVyZSBhcmUgdHdvIGJ1Z3MgdGhhdAorICAgICAgICB3ZSBoYWQ6CisKKyAgICAgICAgLSBBZGQo
eCwgeCkgd291bGQgbm90IHdvcmsuIFRoZSBjbGllbnQgd291bGQgYmUgdG9sZCB0byB1bmRvIHRo
ZSBhZGQgdXNpbmcgJXggYXMgYm90aCB0aGUgc291cmNlCisgICAgICAgICAgYW5kIGRlc3RpbmF0
aW9uLiBUaGUgY2xpZW50IHdvdWxkIHVzZSBhIHN1YigpIGluc3RydWN0aW9uLiBUaGUgcmVzdWx0
IHdvdWxkIG5vdCBiZSB4IC0gaXQgd291bGQKKyAgICAgICAgICBiZSB6ZXJvLgorCisgICAgICAg
IC0gTXVsIHdoZXJlIHRoZSByZXN1bHQgZ290IGNvYWxlc2NlZCB3aXRoIG9uZSBvZiB0aGUgc291
cmNlcy4gWW91IGNhbid0IHVuZG8gYSBtdWx0aXBsaWNhdGlvbiwgc28KKyAgICAgICAgICB5b3Ug
bmVlZCB0byBrZWVwIHRoZSBpbnB1dHMgYWxpdmUgdW50aWwgYWZ0ZXIgdGhlIHJlc3VsdCBpcyBj
b21wdXRlZCAtIGkuZS4gdGhlIGlucHV0cyBhcmUgbGF0ZQorICAgICAgICAgIHVzZXMuIEkgaW5p
dGlhbGx5IHRob3VnaHQgSSB3b3JrZWQgYXJvdW5kIHRoaXMgYnkgdXNpbmcgYSB0aHJlZS1vcGVy
YW5kIGZvcm0gb2YgTXVsLCBidXQgb2YKKyAgICAgICAgICBjb3Vyc2UgdGhhdCBkb2Vzbid0IGFj
dHVhbGx5IGZpeCB0aGUgaXNzdWUuCisKKyAgICAgICAgVGhpcyBwYXRjaCBmaXhlcyB0aGVzZSBp
c3N1ZXMgY29tcHJlaGVuc2l2ZWx5IGJ5IGludHJvZHVjaW5nIHRoZSBmb2xsb3dpbmcgY2hhbmdl
czoKKworICAgICAgICBUaGUgcGFyYW1zLnJlcHMgY29ycmVzcG9uZGluZyB0byB0aGUgZmlyc3Qg
dHdvIGNoaWxkcmVuIG9mIENoZWNrQWRkL1N1Yi9NdWwgYW5kIHRoZSBmaXJzdCBjaGlsZCBvZgor
ICAgICAgICBDaGVjayBhcmUgYWx3YXlzIGdhcmJhZ2U6IGlmIHlvdSB3YW50IHRvIGtub3cgdGhl
IHZhbHVlcyBvZiB0aG9zZSBjaGlsZHJlbiBpbiB0aGUgc2xvdyBwYXRoLCBwYXNzCisgICAgICAg
IHRoZW0gYXMgYWRkaXRpb25hbCBzdGFja21hcCBjaGlsZHJlbi4gVGhpcyBtYWtlcyBpdCBjbGVh
ciB0byB0aGUgY29tcGlsZXIgd2hvc2UgdmFsdWVzIHlvdQorICAgICAgICBhY3R1YWxseSBjYXJl
IGFib3V0LCBhbmQgZnJlZXMgdGhlIGNvbXBpbGVyIHRvIHJlb3JkZXIgYW5kIGNvbW11dGUgdGhl
IG5vbi1zdGFja21hcCBjaGlsZHJlbi4KKworICAgICAgICBUaGUgInVuZG8iIG9mIGFuIEFkZCBv
ciBTdWIgaXMgaGFuZGxlZCBpbnRlcm5hbGx5IGJ5IEIzOiB0aGUgY2xpZW50IGRvZXNuJ3QgaGF2
ZSB0byBrbm93IGFueXRoaW5nCisgICAgICAgIGFib3V0IHVuZG9pbmcuIEIzIGRvZXMgaXQuIFRo
ZSBjb250cmFjdCBpcyBzaW1wbHkgdGhhdCBpZiBhIEIzOjpWYWx1ZSogaXMgYSBzdGFja21hcCBj
aGlsZCBvZiBhCisgICAgICAgIENoZWNrWFlaLCB0aGVuIHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5
IGluIHBhcmFtcy5yZXBzIGluc2lkZSB0aGUgc3RhY2ttYXAgZ2VuZXJhdG9yIGNhbGxiYWNrIHdp
bGwKKyAgICAgICAgY29udGFpbiB0aGUgdmFsdWUgb2YgdGhhdCBWYWx1ZSouIEZvciBBZGQgYW5k
IFN1YiwgQjMgdW5kb2VzIHRoZSBvcGVyYXRpb24uIEZvciBBZGQoeCwgeCksIHRoZQorICAgICAg
ICB1bmRvIHVzZXMgdGhlIGNhcnJ5IGZsYWcgYW5kIHNvbWUgc2hpZnQgbWFnaWMuIEZvciBNdWws
IEIzIHVzZXMgTGF0ZVVzZToKKworICAgICAgICBBIG5ldyBraW5kIG9mIEFyZzo6Um9sZSBjYWxs
ZWQgQXJnOjpMYXRlVXNlIGlzIGludHJvZHVjZWQ6IFRoaXMga2luZCBvZiB1c2UgbWVhbnMgdGhh
dCB0aGUgdXNlCisgICAgICAgIGhhcHBlbnMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBleGVjdXRpb24g
b2YgdGhlIG5leHQgaW5zdHJ1Y3Rpb24uIE5vbmUgb2YgdGhlIGJ1aWx0LWluIEFpciBvcGNvZGVz
CisgICAgICAgIHVzZSBMYXRlVXNlLCBidXQgaXQgaXMgdXNlZCBieSBCMzo6Q2hlY2tTcGVjaWFs
LiBXZSB1c2UgaXQgdG8gaW1wbGVtZW50IENoZWNrTXVsLgorCisgICAgICAgIEZpbmFsbHksIHRo
aXMgY2hhbmdlIGZpeGVzIHRlc3RDb21wbGV4IHRvIGFjdHVhbGx5IGNyZWF0ZSBtYW55IGxpdmUg
dmFyaWFibGVzLiBUaGlzIHJldmVhbGVkIGEKKyAgICAgICAgcmVhbGx5IGR1bWIgcGF0aG9sb2d5
IGluIGFsbG9jYXRlU3RhY2soKSwgYW5kIHRoaXMgcGF0Y2ggZml4ZXMgaXQuIEJhc2ljYWxseSwg
aXQncyBhIGJhZCBpZGVhIHRvCisgICAgICAgIGJ1aWxkIGludGVyZmVyZW5jZSBncmFwaHMgYnkg
cmVwZWF0ZWRseSByZWNyZWF0aW5nIHRoZSBzYW1lIGNsaXF1ZXMuCisKKyAgICAgICAgKiBhc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJYODZDb21tb246OnRlc3QzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2
Q29tbW9uOjpzZXRDYXJyeSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29tbW9u
OjppbnZlcnQpOgorICAgICAgICAqIGIzL0IzQ2hlY2tTcGVjaWFsLmNwcDoKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6bnVtQjNBcmdzKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6
S2V5OjpLZXkpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpLZXk6OmR1bXApOgor
ICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpDaGVja1NwZWNpYWwpOgorICAgICAgICAo
SlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpmb3JFYWNoQXJnKToKKyAgICAgICAgKEpTQzo6QjM6OkNo
ZWNrU3BlY2lhbDo6aXNWYWxpZCk6CisgICAgICAgIChKU0M6OkIzOjpDaGVja1NwZWNpYWw6Omdl
bmVyYXRlKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6ZHVtcEltcGwpOgorICAg
ICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpkZWVwRHVtcEltcGwpOgorICAgICAgICAqIGIz
L0IzQ2hlY2tTcGVjaWFsLmg6CisgICAgICAgIChKU0M6OkIzOjpDaGVja1NwZWNpYWw6OktleTo6
S2V5KToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6S2V5OjpvcGVyYXRvcj09KToK
KyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6S2V5OjpvcGVyYXRvciE9KToKKyAgICAg
ICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6S2V5OjpvcGNvZGUpOgorICAgICAgICAoSlNDOjpC
Mzo6Q2hlY2tTcGVjaWFsOjpLZXk6Om51bUFyZ3MpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tT
cGVjaWFsOjpLZXk6OnN0YWNrbWFwUm9sZSk6CisgICAgICAgIChKU0M6OkIzOjpDaGVja1NwZWNp
YWw6OktleTo6aGFzaCk6CisgICAgICAgICogYjMvQjNDaGVja1ZhbHVlLmNwcDoKKyAgICAgICAg
KEpTQzo6QjM6OkNoZWNrVmFsdWU6On5DaGVja1ZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OkNo
ZWNrVmFsdWU6OmNvbnZlcnRUb0FkZCk6CisgICAgICAgIChKU0M6OkIzOjpDaGVja1ZhbHVlOjpD
aGVja1ZhbHVlKToKKyAgICAgICAgKiBiMy9CM0NoZWNrVmFsdWUuaDoKKyAgICAgICAgKiBiMy9C
M0NvbnN0MzJWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDMyVmFsdWU6OmNoZWNr
TXVsQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3QzMlZhbHVlOjpjaGVja05lZ0Nv
bnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0MzJWYWx1ZTo6ZGl2Q29uc3RhbnQpOgor
ICAgICAgICAqIGIzL0IzQ29uc3QzMlZhbHVlLmg6CisgICAgICAgICogYjMvQjNDb25zdDY0VmFs
dWUuY3BwOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjpjaGVja011bENvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6Y2hlY2tOZWdDb25zdGFudCk6Cisg
ICAgICAgIChKU0M6OkIzOjpDb25zdDY0VmFsdWU6OmRpdkNvbnN0YW50KToKKyAgICAgICAgKiBi
My9CM0NvbnN0NjRWYWx1ZS5oOgorICAgICAgICAqIGIzL0IzTG93ZXJUb0Fpci5jcHA6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmFwcGVuZEJpbk9wKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6bG93ZXIpOgorICAgICAgICAqIGIzL0IzT3Bjb2RlLmg6
CisgICAgICAgICogYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHA6CisgICAgICAgIChKU0M6OkIz
OjpQYXRjaHBvaW50U3BlY2lhbDo6flBhdGNocG9pbnRTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6
QjM6OlBhdGNocG9pbnRTcGVjaWFsOjpmb3JFYWNoQXJnKToKKyAgICAgICAgKEpTQzo6QjM6OlBh
dGNocG9pbnRTcGVjaWFsOjppc1ZhbGlkKToKKyAgICAgICAgKiBiMy9CM1JlZHVjZVN0cmVuZ3Ro
LmNwcDoKKyAgICAgICAgKiBiMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHA6CisgICAgICAgIChKU0M6
OkIzOjpTdGFja21hcFNwZWNpYWw6OmZvckVhY2hBcmdJbXBsKToKKyAgICAgICAgKiBiMy9CM1N0
YWNrbWFwU3BlY2lhbC5oOgorICAgICAgICAqIGIzL0IzU3RhY2ttYXBWYWx1ZS5jcHA6CisgICAg
ICAgIChKU0M6OkIzOjpTdGFja21hcFZhbHVlOjphcHBlbmQpOgorICAgICAgICAoSlNDOjpCMzo6
U3RhY2ttYXBWYWx1ZTo6YXBwZW5kU29tZVJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6QjM6OlN0
YWNrbWFwVmFsdWU6OnNldENvbnN0cmFpbmVkQ2hpbGQpOgorICAgICAgICAqIGIzL0IzU3RhY2tt
YXBWYWx1ZS5oOgorICAgICAgICAqIGIzL0IzVmFsaWRhdGUuY3BwOgorICAgICAgICAqIGIzL0Iz
VmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmNoZWNrTXVsQ29uc3RhbnQpOgor
ICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmNoZWNrTmVnQ29uc3RhbnQpOgorICAgICAgICAoSlND
OjpCMzo6VmFsdWU6OmRpdkNvbnN0YW50KToKKyAgICAgICAgKiBiMy9CM1ZhbHVlLmg6CisgICAg
ICAgICogYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjphbGxvY2F0ZVN0YWNrKToKKyAgICAgICAgKiBiMy9haXIvQWlyQXJnLmNwcDoKKyAgICAgICAg
KFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogYjMvYWlyL0FpckFyZy5oOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzQW55VXNlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjppc0Vhcmx5VXNlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0xhdGVVc2Up
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzRGVmKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QXJnOjpmb3JFYWNoVG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1Vz
ZSk6IERlbGV0ZWQuCisgICAgICAgICogYjMvYWlyL0FpckdlbmVyYXRlLmNwcDoKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6Z2VuZXJhdGUpOgorICAgICAgICAqIGIzL2Fpci9BaXJJdGVyYXRlZFJl
Z2lzdGVyQ29hbGVzY2luZy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okl0ZXJhdGVkUmVn
aXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yOjpidWlsZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
Okl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yOjphbGxvY2F0ZSk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6Okl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yOjpJbnRl
cmZlcmVuY2VFZGdlOjpoYXNoKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SXRlcmF0ZWRSZWdp
c3RlckNvYWxlc2NpbmdBbGxvY2F0b3I6OkludGVyZmVyZW5jZUVkZ2U6OmR1bXApOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjphZGRTcGlsbEFuZEZpbGxUb1Byb2dyYW0pOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjppdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ09uVHlwZSk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6Oml0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nKToKKyAgICAgICAgKiBiMy9h
aXIvQWlyTGl2ZW5lc3MuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TGl2ZW5lc3M6OkxpdmVu
ZXNzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TGl2ZW5lc3M6OkxvY2FsQ2FsYzo6TG9jYWxD
YWxjKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TGl2ZW5lc3M6OkxvY2FsQ2FsYzo6bGl2ZSk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkxpdmVuZXNzOjpMb2NhbENhbGM6OnRha2VMaXZlKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TGl2ZW5lc3M6OkxvY2FsQ2FsYzo6ZXhlY3V0ZSk6Cisg
ICAgICAgICogYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzOgorICAgICAgICAqIGIzL2Fpci9BaXJS
ZXBvcnRVc2VkUmVnaXN0ZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6cmVwb3J0VXNl
ZFJlZ2lzdGVycyk6CisgICAgICAgICogYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHA6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OnNwaWxsRXZlcnl0aGluZyk6CisgICAgICAgICogYjMvdGVz
dGIzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RNdWxBcmcpOgorICAgICAgICAoSlNDOjpC
Mzo6dGVzdE11bEFyZ1N0b3JlKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RNdWxBZGRBcmcpOgor
ICAgICAgICAoSlNDOjpCMzo6dGVzdE11bEFyZ3MpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENv
bXBsZXgpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdFNpbXBsZUNoZWNrKToKKyAgICAgICAgKEpT
Qzo6QjM6OnRlc3RDaGVja0xlc3NUaGFuKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RDaGVja01l
Z2FDb21ibyk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Q2hlY2tBZGRJbW0pOgorICAgICAgICAo
SlNDOjpCMzo6dGVzdENoZWNrQWRkSW1tQ29tbXV0ZSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0
Q2hlY2tBZGRJbW1Tb21lUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENoZWNrQWRk
KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RDaGVja0FkZDY0KToKKyAgICAgICAgKEpTQzo6QjM6
OnRlc3RDaGVja1N1YkltbSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Q2hlY2tTdWJCYWRJbW0p
OgorICAgICAgICAoSlNDOjpCMzo6dGVzdENoZWNrU3ViKToKKyAgICAgICAgKEpTQzo6QjM6OnRl
c3RDaGVja1N1YjY0KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RDaGVja05lZyk6CisgICAgICAg
IChKU0M6OkIzOjp0ZXN0Q2hlY2tOZWc2NCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Q2hlY2tN
dWwpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENoZWNrTXVsTWVtb3J5KToKKyAgICAgICAgKEpT
Qzo6QjM6OnRlc3RDaGVja011bDIpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENoZWNrTXVsNjQp
OgorICAgICAgICAoSlNDOjpCMzo6cnVuKToKKwogMjAxNS0xMS0xNiAgQmVuamFtaW4gUG91bGFp
biAgPGJwb3VsYWluQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggYSB0eXBvIGluIEFpckl0ZXJh
dGVkUmVnaXN0ZXJDb2FsZXNjaW5nCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCShyZXZpc2lvbiAx
OTI1MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
WDg2Q29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MTEsNiArMTYxMSwxMSBAQCBwdWJsaWM6
CiAgICAgICAgIHNldDMyKHg4NkNvbmRpdGlvbihjb25kKSwgZGVzdCk7CiAgICAgfQogCisgICAg
dm9pZCBzZXRDYXJyeShSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBzZXQzMihYODZB
c3NlbWJsZXI6OkNvbmRpdGlvbkMsIGRlc3QpOworICAgIH0KKwogICAgIC8vIEludmVydCBhIHJl
bGF0aW9uYWwgY29uZGl0aW9uLCBlLmcuID09IGJlY29tZXMgIT0sIDwgYmVjb21lcyA+PSwgZXRj
LgogICAgIHN0YXRpYyBSZWxhdGlvbmFsQ29uZGl0aW9uIGludmVydChSZWxhdGlvbmFsQ29uZGl0
aW9uIGNvbmQpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tT
cGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVj
a1NwZWNpYWwuY3BwCShyZXZpc2lvbiAxOTI1MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDaGVja1NwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw5ICszOSw5IEBAIHVz
aW5nIG5hbWVzcGFjZSBBaXI7CiAKIG5hbWVzcGFjZSB7CiAKLXVuc2lnbmVkIG51bUIzQXJncyhJ
bnN0JiBpbnN0KQordW5zaWduZWQgbnVtQjNBcmdzKEIzOjpPcGNvZGUgb3Bjb2RlKQogewotICAg
IHN3aXRjaCAoaW5zdC5vcmlnaW4tPm9wY29kZSgpKSB7CisgICAgc3dpdGNoIChvcGNvZGUpIHsK
ICAgICBjYXNlIENoZWNrQWRkOgogICAgIGNhc2UgQ2hlY2tTdWI6CiAgICAgY2FzZSBDaGVja011
bDoKQEAgLTU0LDI4ICs1NCw0MCBAQCB1bnNpZ25lZCBudW1CM0FyZ3MoSW5zdCYgaW5zdCkKICAg
ICB9CiB9CiAKK3Vuc2lnbmVkIG51bUIzQXJncyhWYWx1ZSogdmFsdWUpCit7CisgICAgcmV0dXJu
IG51bUIzQXJncyh2YWx1ZS0+b3Bjb2RlKCkpOworfQorCit1bnNpZ25lZCBudW1CM0FyZ3MoSW5z
dCYgaW5zdCkKK3sKKyAgICByZXR1cm4gbnVtQjNBcmdzKGluc3Qub3JpZ2luKTsKK30KKwogfSAv
LyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKIENoZWNrU3BlY2lhbDo6S2V5OjpLZXkoY29uc3QgSW5z
dCYgaW5zdCkKIHsKICAgICBtX29wY29kZSA9IGluc3Qub3Bjb2RlOwogICAgIG1fbnVtQXJncyA9
IGluc3QuYXJncy5zaXplKCk7CisgICAgbV9zdGFja21hcFJvbGUgPSBBcmc6OlVzZTsKIH0KIAog
dm9pZCBDaGVja1NwZWNpYWw6OktleTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewot
ICAgIG91dC5wcmludChtX29wY29kZSwgIigiLCBtX251bUFyZ3MsICIpIik7CisgICAgb3V0LnBy
aW50KG1fb3Bjb2RlLCAiKCIsIG1fbnVtQXJncywgIiwiLCBtX3N0YWNrbWFwUm9sZSwgIikiKTsK
IH0KIAotQ2hlY2tTcGVjaWFsOjpDaGVja1NwZWNpYWwoQWlyOjpPcGNvZGUgb3Bjb2RlLCB1bnNp
Z25lZCBudW1BcmdzKQorQ2hlY2tTcGVjaWFsOjpDaGVja1NwZWNpYWwoQWlyOjpPcGNvZGUgb3Bj
b2RlLCB1bnNpZ25lZCBudW1BcmdzLCBBcmc6OlJvbGUgc3RhY2ttYXBSb2xlKQogICAgIDogbV9j
aGVja09wY29kZShvcGNvZGUpCisgICAgLCBtX3N0YWNrbWFwUm9sZShzdGFja21hcFJvbGUpCiAg
ICAgLCBtX251bUNoZWNrQXJncyhudW1BcmdzKQogewogICAgIEFTU0VSVChpc1Rlcm1pbmFsKG9w
Y29kZSkpOwogfQogCiBDaGVja1NwZWNpYWw6OkNoZWNrU3BlY2lhbChjb25zdCBDaGVja1NwZWNp
YWw6OktleSYga2V5KQotICAgIDogQ2hlY2tTcGVjaWFsKGtleS5vcGNvZGUoKSwga2V5Lm51bUFy
Z3MoKSkKKyAgICA6IENoZWNrU3BlY2lhbChrZXkub3Bjb2RlKCksIGtleS5udW1BcmdzKCksIGtl
eS5zdGFja21hcFJvbGUoKSkKIHsKIH0KIApAQCAtMTA1LDcgKzExNyw3IEBAIHZvaWQgQ2hlY2tT
cGVjaWFsOjpmb3JFYWNoQXJnKEluc3QmIGluc3QKICAgICBJbnN0IGhpZGRlbiA9IGhpZGRlbkJy
YW5jaChpbnN0KTsKICAgICBoaWRkZW4uZm9yRWFjaEFyZyhjYWxsYmFjayk7CiAgICAgY29tbWl0
SGlkZGVuQnJhbmNoKGluc3QsIGhpZGRlbik7Ci0gICAgZm9yRWFjaEFyZ0ltcGwobnVtQjNBcmdz
KGluc3QpLCBtX251bUNoZWNrQXJncyArIDEsIGluc3QsIGNhbGxiYWNrKTsKKyAgICBmb3JFYWNo
QXJnSW1wbChudW1CM0FyZ3MoaW5zdCksIG1fbnVtQ2hlY2tBcmdzICsgMSwgaW5zdCwgbV9zdGFj
a21hcFJvbGUsIGNhbGxiYWNrKTsKIH0KIAogYm9vbCBDaGVja1NwZWNpYWw6OmlzVmFsaWQoSW5z
dCYgaW5zdCkKQEAgLTEzMCwyOCArMTQyLDcxIEBAIENDYWxsSGVscGVyczo6SnVtcCBDaGVja1Nw
ZWNpYWw6OmdlbmVyYXQKICAgICBBU1NFUlQodmFsdWUpOwogCiAgICAgVmVjdG9yPFZhbHVlUmVw
PiByZXBzOwotICAgIGlmIChpc0NoZWNrTWF0aCh2YWx1ZS0+b3Bjb2RlKCkpKSB7Ci0gICAgICAg
IGlmICh2YWx1ZS0+b3Bjb2RlKCkgPT0gQ2hlY2tNdWwpIHsKLSAgICAgICAgICAgIHJlcHMuYXBw
ZW5kKHJlcEZvckFyZygqY29udGV4dC5jb2RlLCBpbnN0LmFyZ3NbMl0pKTsKLSAgICAgICAgICAg
IHJlcHMuYXBwZW5kKHJlcEZvckFyZygqY29udGV4dC5jb2RlLCBpbnN0LmFyZ3NbM10pKTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS0+b3Bjb2RlKCkgPT0gQ2hlY2tT
dWIgJiYgdmFsdWUtPmNoaWxkKDApLT5pc0ludCgwKSkKLSAgICAgICAgICAgICAgICByZXBzLmFw
cGVuZChWYWx1ZVJlcDo6Y29uc3RhbnQoMCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIHJlcHMuYXBwZW5kKHJlcEZvckFyZygqY29udGV4dC5jb2RlLCBpbnN0LmFyZ3NbM10p
KTsKLSAgICAgICAgICAgIHJlcHMuYXBwZW5kKHJlcEZvckFyZygqY29udGV4dC5jb2RlLCBpbnN0
LmFyZ3NbMl0pKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVCh2YWx1
ZS0+b3Bjb2RlKCkgPT0gQ2hlY2spOwotICAgICAgICByZXBzLmFwcGVuZChWYWx1ZVJlcDo6Y29u
c3RhbnQoMSkpOwotICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1CM0FyZ3ModmFsdWUp
OyBpLS07KQorICAgICAgICByZXBzLmFwcGVuZChWYWx1ZVJlcCgpKTsKIAogICAgIGFwcGVuZFJl
cHNJbXBsKGNvbnRleHQsIG1fbnVtQ2hlY2tBcmdzICsgMSwgaW5zdCwgcmVwcyk7Ci0gICAgCisK
KyAgICAvLyBTZXQgYXNpZGUgdGhlIGFyZ3MgdGhhdCBhcmUgcmVsZXZhbnQgdG8gdW5kb2luZyB0
aGUgb3BlcmF0aW9uLiBUaGlzIGlzIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0bworICAgIC8vIGNh
cHR1cmUgYWxsIG9mIGluc3QgaW4gdGhlIGNsb3N1cmUgYmVsb3cuCisgICAgVmVjdG9yPEFyZywg
Mz4gYXJnczsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9udW1DaGVja0FyZ3M7ICsr
aSkKKyAgICAgICAgYXJncy5hcHBlbmQoaW5zdC5hcmdzWzEgKyBpXSk7CisKICAgICBjb250ZXh0
LmxhdGVQYXRocy5hcHBlbmQoCiAgICAgICAgIGNyZWF0ZVNoYXJlZFRhc2s8R2VuZXJhdGlvbkNv
bnRleHQ6OkxhdGVQYXRoRnVuY3Rpb24+KAotICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMm
IGppdCwgR2VuZXJhdGlvbkNvbnRleHQmKSB7CisgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVy
cyYgaml0LCBHZW5lcmF0aW9uQ29udGV4dCYgY29udGV4dCkgewogICAgICAgICAgICAgICAgIGZh
aWwubGluaygmaml0KTsKKworICAgICAgICAgICAgICAgIC8vIElmIG5lY2Vzc2FyeSwgdW5kbyB0
aGUgb3BlcmF0aW9uLgorICAgICAgICAgICAgICAgIHN3aXRjaCAobV9jaGVja09wY29kZSkgewor
ICAgICAgICAgICAgICAgIGNhc2UgQnJhbmNoQWRkMzI6CisgICAgICAgICAgICAgICAgICAgIGlm
IChhcmdzWzFdID09IGFyZ3NbMl0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMg
aXMgdWdseSwgYnV0IHRoYXQncyBmaW5lIC0gd2Ugd29uJ3QgaGF2ZSB0byBkbyB0aGlzIHZlcnkg
b2Z0ZW4uCisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYXJnc1sxXS5pc0dQUigpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IGFyZ3NbMV0uZ3ByKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IENDYWxsSGVscGVy
czo6c2VsZWN0U2NyYXRjaEdQUih2YWx1ZUdQUik7CisgICAgICAgICAgICAgICAgICAgICAgICBq
aXQucHVzaFRvU2F2ZShzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5z
ZXRDYXJyeShzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sc2hpZnQz
MihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigzMSksIHNjcmF0Y2hHUFIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgaml0LnVyc2hpZnQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigx
KSwgdmFsdWVHUFIpOworICAgICAgICAgICAgICAgICAgICAgICAgaml0Lm9yMzIoc2NyYXRjaEdQ
UiwgdmFsdWVHUFIpOworICAgICAgICAgICAgICAgICAgICAgICAgaml0LnBvcFRvUmVzdG9yZShz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIEluc3QoU3ViMzIsIG51bGxwdHIsIGFyZ3Nb
MV0sIGFyZ3NbMl0pLmdlbmVyYXRlKGppdCwgY29udGV4dCk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQnJhbmNoQWRkNjQ6CisgICAgICAgICAgICAg
ICAgICAgIGlmIChhcmdzWzFdID09IGFyZ3NbMl0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFRoaXMgaXMgdWdseSwgYnV0IHRoYXQncyBmaW5lIC0gd2Ugd29uJ3QgaGF2ZSB0byBkbyB0
aGlzIHZlcnkgb2Z0ZW4uCisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYXJnc1sxXS5p
c0dQUigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IGFyZ3Nb
MV0uZ3ByKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IEND
YWxsSGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUih2YWx1ZUdQUik7CisgICAgICAgICAgICAgICAg
ICAgICAgICBqaXQucHVzaFRvU2F2ZShzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGppdC5zZXRDYXJyeShzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGpp
dC5sc2hpZnQ2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMig2MyksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaml0LnVyc2hpZnQ2NChDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMigxKSwgdmFsdWVHUFIpOworICAgICAgICAgICAgICAgICAgICAgICAgaml0Lm9yNjQo
c2NyYXRjaEdQUiwgdmFsdWVHUFIpOworICAgICAgICAgICAgICAgICAgICAgICAgaml0LnBvcFRv
UmVzdG9yZShzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIEluc3QoU3ViNjQsIG51bGxw
dHIsIGFyZ3NbMV0sIGFyZ3NbMl0pLmdlbmVyYXRlKGppdCwgY29udGV4dCk7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQnJhbmNoU3ViMzI6CisgICAg
ICAgICAgICAgICAgICAgIEluc3QoQWRkMzIsIG51bGxwdHIsIGFyZ3NbMV0sIGFyZ3NbMl0pLmdl
bmVyYXRlKGppdCwgY29udGV4dCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIGNhc2UgQnJhbmNoU3ViNjQ6CisgICAgICAgICAgICAgICAgICAgIEluc3QoQWRk
NjQsIG51bGxwdHIsIGFyZ3NbMV0sIGFyZ3NbMl0pLmdlbmVyYXRlKGppdCwgY29udGV4dCk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQnJhbmNoTmVn
MzI6CisgICAgICAgICAgICAgICAgICAgIEluc3QoTmVnMzIsIG51bGxwdHIsIGFyZ3NbMV0pLmdl
bmVyYXRlKGppdCwgY29udGV4dCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIGNhc2UgQnJhbmNoTmVnNjQ6CisgICAgICAgICAgICAgICAgICAgIEluc3QoTmVn
NjQsIG51bGxwdHIsIGFyZ3NbMV0pLmdlbmVyYXRlKGppdCwgY29udGV4dCk7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMgcGFyYW1zOwogICAgICAgICAgICAg
ICAgIHBhcmFtcy52YWx1ZSA9IHZhbHVlOwpAQCAtMTY2LDcgKzIyMSw3IEBAIENDYWxsSGVscGVy
czo6SnVtcCBDaGVja1NwZWNpYWw6OmdlbmVyYXQKIAogdm9pZCBDaGVja1NwZWNpYWw6OmR1bXBJ
bXBsKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAgb3V0LnByaW50KG1fY2hlY2tPcGNv
ZGUsICIoIiwgbV9udW1DaGVja0FyZ3MsICIpIik7CisgICAgb3V0LnByaW50KG1fY2hlY2tPcGNv
ZGUsICIoIiwgbV9udW1DaGVja0FyZ3MsICIsIiwgbV9zdGFja21hcFJvbGUsICIpIik7CiB9CiAK
IHZvaWQgQ2hlY2tTcGVjaWFsOjpkZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5oCShyZXZpc2lv
biAxOTI1MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuaAko
d29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIAor
I2luY2x1ZGUgIkFpckFyZy5oIgogI2luY2x1ZGUgIkFpck9wY29kZS5oIgogI2luY2x1ZGUgIkIz
U3RhY2ttYXBTcGVjaWFsLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTU2LDEyICs1
NywxNCBAQCBwdWJsaWM6CiAgICAgcHVibGljOgogICAgICAgICBLZXkoKQogICAgICAgICAgICAg
OiBtX29wY29kZShBaXI6Ok5vcCkKKyAgICAgICAgICAgICwgbV9zdGFja21hcFJvbGUoQWlyOjpB
cmc6OlVzZSkKICAgICAgICAgICAgICwgbV9udW1BcmdzKDApCiAgICAgICAgIHsKICAgICAgICAg
fQogICAgICAgICAKLSAgICAgICAgS2V5KEFpcjo6T3Bjb2RlIG9wY29kZSwgdW5zaWduZWQgbnVt
QXJncykKKyAgICAgICAgS2V5KEFpcjo6T3Bjb2RlIG9wY29kZSwgdW5zaWduZWQgbnVtQXJncywg
QWlyOjpBcmc6OlJvbGUgc3RhY2ttYXBSb2xlID0gQWlyOjpBcmc6OlVzZSkKICAgICAgICAgICAg
IDogbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAgICAgLCBtX3N0YWNrbWFwUm9sZShzdGFja21h
cFJvbGUpCiAgICAgICAgICAgICAsIG1fbnVtQXJncyhudW1BcmdzKQogICAgICAgICB7CiAgICAg
ICAgIH0KQEAgLTcxLDcgKzc0LDggQEAgcHVibGljOgogICAgICAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgS2V5JiBvdGhlcikgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIG1f
b3Bjb2RlID09IG90aGVyLm1fb3Bjb2RlCi0gICAgICAgICAgICAgICAgJiYgbV9udW1BcmdzID09
IG90aGVyLm1fbnVtQXJnczsKKyAgICAgICAgICAgICAgICAmJiBtX251bUFyZ3MgPT0gb3RoZXIu
bV9udW1BcmdzCisgICAgICAgICAgICAgICAgJiYgbV9zdGFja21hcFJvbGUgPT0gb3RoZXIubV9z
dGFja21hcFJvbGU7CiAgICAgICAgIH0KIAogICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
S2V5JiBvdGhlcikgY29uc3QKQEAgLTgzLDExICs4NywxMyBAQCBwdWJsaWM6CiAKICAgICAgICAg
QWlyOjpPcGNvZGUgb3Bjb2RlKCkgY29uc3QgeyByZXR1cm4gbV9vcGNvZGU7IH0KICAgICAgICAg
dW5zaWduZWQgbnVtQXJncygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQXJnczsgfQorICAgICAgICBB
aXI6OkFyZzo6Um9sZSBzdGFja21hcFJvbGUoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrbWFwUm9s
ZTsgfQogCiAgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKIAogICAg
ICAgICBLZXkoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQogICAgICAgICAgICAgOiBt
X29wY29kZShBaXI6Ok5vcCkKKyAgICAgICAgICAgICwgbV9zdGFja21hcFJvbGUoQWlyOjpBcmc6
OlVzZSkKICAgICAgICAgICAgICwgbV9udW1BcmdzKDEpCiAgICAgICAgIHsKICAgICAgICAgfQpA
QCAtMTAwLDE1ICsxMDYsMTYgQEAgcHVibGljOgogICAgICAgICB1bnNpZ25lZCBoYXNoKCkgY29u
c3QKICAgICAgICAgewogICAgICAgICAgICAgLy8gU2VyaW91c2x5LCB3ZSBkb24ndCBuZWVkIHRv
IGJlIHNtYXJ0IGhlcmUuIEl0IGp1c3QgZG9lc24ndCBtYXR0ZXIuCi0gICAgICAgICAgICByZXR1
cm4gbV9vcGNvZGUgKyBtX251bUFyZ3M7CisgICAgICAgICAgICByZXR1cm4gbV9vcGNvZGUgKyBt
X251bUFyZ3MgKyBtX3N0YWNrbWFwUm9sZTsKICAgICAgICAgfQogICAgICAgICAKICAgICBwcml2
YXRlOgogICAgICAgICBBaXI6Ok9wY29kZSBtX29wY29kZTsKKyAgICAgICAgQWlyOjpBcmc6OlJv
bGUgbV9zdGFja21hcFJvbGU7CiAgICAgICAgIHVuc2lnbmVkIG1fbnVtQXJnczsKICAgICB9Owog
ICAgIAotICAgIENoZWNrU3BlY2lhbChBaXI6Ok9wY29kZSwgdW5zaWduZWQgbnVtQXJncyk7Cisg
ICAgQ2hlY2tTcGVjaWFsKEFpcjo6T3Bjb2RlLCB1bnNpZ25lZCBudW1BcmdzLCBBaXI6OkFyZzo6
Um9sZSBzdGFja21hcFJvbGUgPSBBaXI6OkFyZzo6VXNlKTsKICAgICBDaGVja1NwZWNpYWwoY29u
c3QgS2V5Jik7CiAgICAgfkNoZWNrU3BlY2lhbCgpOwogCkBAIC0xMzMsNiArMTQwLDcgQEAgcHJv
dGVjdGVkOgogCiBwcml2YXRlOgogICAgIEFpcjo6T3Bjb2RlIG1fY2hlY2tPcGNvZGU7CisgICAg
QWlyOjpBcmc6OlJvbGUgbV9zdGFja21hcFJvbGU7CiAgICAgdW5zaWduZWQgbV9udW1DaGVja0Fy
Z3M7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNw
cAkocmV2aXNpb24gMTkyNTA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tW
YWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDEyIEBAIENoZWNrVmFsdWU6On5D
aGVja1ZhbHVlKCkKIHsKIH0KIAordm9pZCBDaGVja1ZhbHVlOjpjb252ZXJ0VG9BZGQoKQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKG9wY29kZSgpID09IENoZWNrQWRkIHx8IG9wY29kZSgpID09IENo
ZWNrU3ViIHx8IG9wY29kZSgpID09IENoZWNrTXVsKTsKKyAgICBtX29wY29kZSA9IENoZWNrQWRk
OworfQorCiAvLyBVc2UgdGhpcyBmb3JtIGZvciBDaGVja0FkZCwgQ2hlY2tTdWIsIGFuZCBDaGVj
a011bC4KIENoZWNrVmFsdWU6OkNoZWNrVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNv
ZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCiAgICAgOiBTdGFj
a21hcFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBvcGNvZGUsIGxlZnQtPnR5cGUoKSwgb3Jp
Z2luKQpAQCAtNDEsOCArNDcsOCBAQCBDaGVja1ZhbHVlOjpDaGVja1ZhbHVlKHVuc2lnbmVkIGlu
ZGV4LCBPCiAgICAgQVNTRVJUKEIzOjppc0ludCh0eXBlKCkpKTsKICAgICBBU1NFUlQobGVmdC0+
dHlwZSgpID09IHJpZ2h0LT50eXBlKCkpOwogICAgIEFTU0VSVChvcGNvZGUgPT0gQ2hlY2tBZGQg
fHwgb3Bjb2RlID09IENoZWNrU3ViIHx8IG9wY29kZSA9PSBDaGVja011bCk7Ci0gICAgYXBwZW5k
KENvbnN0cmFpbmVkVmFsdWUobGVmdCwgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcikpOwotICAgIGFw
cGVuZChDb25zdHJhaW5lZFZhbHVlKHJpZ2h0LCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKSk7Cisg
ICAgYXBwZW5kKENvbnN0cmFpbmVkVmFsdWUobGVmdCwgVmFsdWVSZXA6OkFueSkpOworICAgIGFw
cGVuZChDb25zdHJhaW5lZFZhbHVlKHJpZ2h0LCBWYWx1ZVJlcDo6QW55KSk7CiB9CiAKIC8vIFVz
ZSB0aGlzIGZvcm0gZm9yIENoZWNrLgpAQCAtNTAsNyArNTYsNyBAQCBDaGVja1ZhbHVlOjpDaGVj
a1ZhbHVlKHVuc2lnbmVkIGluZGV4LCBPCiAgICAgOiBTdGFja21hcFZhbHVlKGluZGV4LCBDaGVj
a2VkT3Bjb2RlLCBvcGNvZGUsIFZvaWQsIG9yaWdpbikKIHsKICAgICBBU1NFUlQob3Bjb2RlID09
IENoZWNrKTsKLSAgICBhcHBlbmQocHJlZGljYXRlKTsKKyAgICBhcHBlbmQoQ29uc3RyYWluZWRW
YWx1ZShwcmVkaWNhdGUsIFZhbHVlUmVwOjpBbnkpKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5oCShyZXZp
c2lvbiAxOTI1MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDggQEAgcHVibGljOgogCiAgICAgfkNoZWNrVmFs
dWUoKTsKIAorICAgIHZvaWQgY29udmVydFRvQWRkKCk7CisKIHByaXZhdGU6CiAgICAgZnJpZW5k
IGNsYXNzIFByb2NlZHVyZTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29u
c3QzMlZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
b25zdDMyVmFsdWUuY3BwCShyZXZpc2lvbiAxOTI1MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb25zdDMyVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCw2ICs5OCwxMyBA
QCBWYWx1ZSogQ29uc3QzMlZhbHVlOjpjaGVja011bENvbnN0YW50KFByCiAgICAgcmV0dXJuIHBy
b2MuYWRkPENvbnN0MzJWYWx1ZT4ob3JpZ2luKCksIHJlc3VsdC51bnNhZmVHZXQoKSk7CiB9CiAK
K1ZhbHVlKiBDb25zdDMyVmFsdWU6OmNoZWNrTmVnQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jKSBj
b25zdAoreworICAgIGlmIChtX3ZhbHVlID09IC1tX3ZhbHVlKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICByZXR1cm4gbmVnQ29uc3RhbnQocHJvYyk7Cit9CisKIFZhbHVlKiBDb25zdDMy
VmFsdWU6OmRpdkNvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgY29uc3QgVmFsdWUqIG90aGVyKSBj
b25zdAogewogICAgIGlmICghb3RoZXItPmhhc0ludDMyKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuaAkocmV2aXNpb24gMTkyNTA3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4
LDYgKzQ4LDcgQEAgcHVibGljOgogICAgIFZhbHVlKiBjaGVja0FkZENvbnN0YW50KFByb2NlZHVy
ZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmFsdWUqIGNoZWNr
U3ViQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlk
ZTsKICAgICBWYWx1ZSogY2hlY2tNdWxDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSog
b3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFZhbHVlKiBjaGVja05lZ0NvbnN0YW50KFByb2Nl
ZHVyZSYpIGNvbnN0IG92ZXJyaWRlOwogICAgIFZhbHVlKiBkaXZDb25zdGFudChQcm9jZWR1cmUm
LCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwogICAgIFZhbHVlKiBiaXRBbmRD
b25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwog
ICAgIFZhbHVlKiBiaXRPckNvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikg
Y29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0
VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0
NjRWYWx1ZS5jcHAJKHJldmlzaW9uIDE5MjUwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0NvbnN0NjRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDYgKzk4LDEzIEBAIFZh
bHVlKiBDb25zdDY0VmFsdWU6OmNoZWNrTXVsQ29uc3RhbnQoUHIKICAgICByZXR1cm4gcHJvYy5h
ZGQ8Q29uc3Q2NFZhbHVlPihvcmlnaW4oKSwgcmVzdWx0LnVuc2FmZUdldCgpKTsKIH0KIAorVmFs
dWUqIENvbnN0NjRWYWx1ZTo6Y2hlY2tOZWdDb25zdGFudChQcm9jZWR1cmUmIHByb2MpIGNvbnN0
Cit7CisgICAgaWYgKG1fdmFsdWUgPT0gLW1fdmFsdWUpCisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIHJldHVybiBuZWdDb25zdGFudChwcm9jKTsKK30KKwogVmFsdWUqIENvbnN0NjRWYWx1
ZTo6ZGl2Q29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0
CiB7CiAgICAgaWYgKCFvdGhlci0+aGFzSW50NjQoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCShyZXZpc2lvbiAxOTI1MDcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiAr
NDgsNyBAQCBwdWJsaWM6CiAgICAgVmFsdWUqIGNoZWNrQWRkQ29uc3RhbnQoUHJvY2VkdXJlJiwg
Y29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKICAgICBWYWx1ZSogY2hlY2tTdWJD
b25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwog
ICAgIFZhbHVlKiBjaGVja011bENvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhl
cikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIGNoZWNrTmVnQ29uc3RhbnQoUHJvY2VkdXJl
JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmFsdWUqIGRpdkNvbnN0YW50KFByb2NlZHVyZSYsIGNv
bnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmFsdWUqIGJpdEFuZENvbnN0
YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CiAgICAg
VmFsdWUqIGJpdE9yQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25z
dCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIu
Y3BwCShyZXZpc2lvbiAxOTI1MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dl
clRvQWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcwLDcgKzU3MCw3IEBAIHByaXZhdGU6CiAK
ICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgd2UgcHJlZmVyIHZlcnNpb25zIG9mIHRoZSBvcGVy
YXRpb24gdGhhdCBoYXZlIGEgZnVzZWQgbG9hZCBvciBhbiBpbW1lZGlhdGUKICAgICAgICAgLy8g
b3ZlciB0aHJlZSBvcGVyYW5kIGZvcm1zLgotICAgICAgICAKKwogICAgICAgICBpZiAoY29tbXV0
YXRpdml0eSA9PSBDb21tdXRhdGl2ZSkgewogICAgICAgICAgICAgQXJnUHJvbWlzZSBsZWZ0QWRk
ciA9IGxvYWRQcm9taXNlKGxlZnQpOwogICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKG9wY29k
ZSwgbGVmdEFkZHIua2luZCgpLCBBcmc6OlRtcCkpIHsKQEAgLTU5OCw2ICs1OTgsMTAgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCisgICAgICAgIC8vIEZJWE1F
OiBJZiB3ZSdyZSBnb2luZyB0byB1c2UgYSB0d28tb3BlcmFuZCBpbnN0cnVjdGlvbiwgYW5kIHRo
ZSBvcGVyYW5kIGlzIGNvbW11dGF0aXZlLCB3ZQorICAgICAgICAvLyBzaG91bGQgY29hbGVzY2Ug
dGhlIHJlc3VsdCB3aXRoIHRoZSBvcGVyYW5kIHRoYXQgaXMga2lsbGVkLgorICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxMzIxCisgICAgICAgIAog
ICAgICAgICBhcHBlbmQocmVsYXhlZE1vdmVGb3JUeXBlKG1fdmFsdWUtPnR5cGUoKSksIHRtcChs
ZWZ0KSwgcmVzdWx0KTsKICAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKHJpZ2h0KSwgcmVzdWx0
KTsKICAgICB9CkBAIC0xNTMwLDEwICsxNTM0LDYgQEAgcHJpdmF0ZToKIAogICAgICAgICBjYXNl
IENoZWNrQWRkOgogICAgICAgICBjYXNlIENoZWNrU3ViOiB7Ci0gICAgICAgICAgICAvLyBGSVhN
RTogTWFrZSB0aGlzIHN1cHBvcnQgY29tbXV0YXRpdml0eS4gVGhhdCB3aWxsIGxldCB1cyBsZXZl
cmFnZSBtb3JlIGluc3RydWN0aW9uIGZvcm1zCi0gICAgICAgICAgICAvLyBhbmQgaXQgbGV0IHVz
IGNvbW11dGUgdG8gbWF4aW1pemUgY29hbGVzY2luZy4KLSAgICAgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTEyMTQKLQogICAgICAgICAgICAgQ2hl
Y2tWYWx1ZSogY2hlY2tWYWx1ZSA9IG1fdmFsdWUtPmFzPENoZWNrVmFsdWU+KCk7CiAKICAgICAg
ICAgICAgIFZhbHVlKiBsZWZ0ID0gY2hlY2tWYWx1ZS0+Y2hpbGQoMCk7CkBAIC0xNTQzLDcgKzE1
NDMsNyBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICAvLyBIYW5kbGUgY2hlY2tlZCBuZWdhdGlv
bi4KICAgICAgICAgICAgIGlmIChjaGVja1ZhbHVlLT5vcGNvZGUoKSA9PSBDaGVja1N1YiAmJiBs
ZWZ0LT5pc0ludCgwKSkgewotICAgICAgICAgICAgICAgIGFwcGVuZChyZWxheGVkTW92ZUZvclR5
cGUoY2hlY2tWYWx1ZS0+dHlwZSgpKSwgdG1wKHJpZ2h0KSwgcmVzdWx0KTsKKyAgICAgICAgICAg
ICAgICBhcHBlbmQoTW92ZSwgdG1wKHJpZ2h0KSwgcmVzdWx0KTsKIAogICAgICAgICAgICAgICAg
IEFpcjo6T3Bjb2RlIG9wY29kZSA9CiAgICAgICAgICAgICAgICAgICAgIG9wY29kZUZvclR5cGUo
QnJhbmNoTmVnMzIsIEJyYW5jaE5lZzY0LCBBaXI6Ok9vcHMsIGNoZWNrVmFsdWUtPnR5cGUoKSk7
CkBAIC0xNTU5LDM5ICsxNTU5LDY3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBhcHBlbmQocmVsYXhlZE1vdmVGb3JUeXBl
KG1fdmFsdWUtPnR5cGUoKSksIHRtcChsZWZ0KSwgcmVzdWx0KTsKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBVc2UgY29tbXV0YXRpdml0eSBvZiBDaGVja0FkZCB0byBpbmNyZWFzZSB0aGUgbGlrZWxp
aG9vZCBvZiBjb2FsZXNjaW5nLgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1MTMyMQorCisgICAgICAgICAgICBhcHBlbmQoTW92ZSwgdG1w
KGxlZnQpLCByZXN1bHQpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBBaXI6Ok9wY29kZSBv
cGNvZGUgPSBBaXI6Ok9vcHM7Ci0gICAgICAgICAgICBDaGVja1NwZWNpYWwqIHNwZWNpYWwgPSBu
dWxscHRyOwogICAgICAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT5vcGNvZGUoKSkgewogICAgICAg
ICAgICAgY2FzZSBDaGVja0FkZDoKICAgICAgICAgICAgICAgICBvcGNvZGUgPSBvcGNvZGVGb3JU
eXBlKEJyYW5jaEFkZDMyLCBCcmFuY2hBZGQ2NCwgQWlyOjpPb3BzLCBtX3ZhbHVlLT50eXBlKCkp
OwotICAgICAgICAgICAgICAgIHNwZWNpYWwgPSBlbnN1cmVDaGVja1NwZWNpYWwob3Bjb2RlLCAz
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ2hlY2tTdWI6CiAg
ICAgICAgICAgICAgICAgb3Bjb2RlID0gb3Bjb2RlRm9yVHlwZShCcmFuY2hTdWIzMiwgQnJhbmNo
U3ViNjQsIEFpcjo6T29wcywgbV92YWx1ZS0+dHlwZSgpKTsKLSAgICAgICAgICAgICAgICBzcGVj
aWFsID0gZW5zdXJlQ2hlY2tTcGVjaWFsKG9wY29kZSwgMyk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIEluc3QgaW5zdChQYXRjaCwgY2hlY2tWYWx1ZSwgQXJnOjpzcGVjaWFsKHNw
ZWNpYWwpKTsKLQotICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChBcmc6OnJlc0NvbmQoTWFj
cm9Bc3NlbWJsZXI6Ok92ZXJmbG93KSk7Ci0KICAgICAgICAgICAgIC8vIEZJWE1FOiBJdCB3b3Vs
ZCBiZSBncmVhdCB0byBmdXNlIExvYWRzIGludG8gdGhlc2UuIFdlIGN1cnJlbnRseSBkb24ndCBk
byBpdCBiZWNhdXNlIHRoZQogICAgICAgICAgICAgLy8gcnVsZSBmb3Igc3RhY2ttYXBzIGlzIHRo
YXQgYWxsIGFkZHJlc3NlcyBhcmUganVzdCBzdGFjayBhZGRyZXNzZXMuIE1heWJlIHdlIGNvdWxk
IHJlbGF4CiAgICAgICAgICAgICAvLyB0aGlzIHJ1bGUgaGVyZS4KICAgICAgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTEyMjgKLSAgICAgICAgICAg
IAorCisgICAgICAgICAgICBBcmcgc291cmNlOwogICAgICAgICAgICAgaWYgKGltbShyaWdodCkg
JiYgaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlJlc0NvbmQsIEFyZzo6SW1tLCBBcmc6OlRtcCkp
Ci0gICAgICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChpbW0ocmlnaHQpKTsKKyAgICAgICAg
ICAgICAgICBzb3VyY2UgPSBpbW0ocmlnaHQpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIGluc3QuYXJncy5hcHBlbmQodG1wKHJpZ2h0KSk7Ci0gICAgICAgICAgICBpbnN0LmFy
Z3MuYXBwZW5kKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgc291cmNlID0gdG1wKHJpZ2h0KTsK
KworICAgICAgICAgICAgLy8gVGhlcmUgaXMgYSByZWFsbHkgaGlsYXJpb3VzIGNhc2UgdGhhdCBh
cmlzZXMgd2hlbiB3ZSBkbyBCcmFuY2hBZGQzMigleCwgJXgpLiBXZSB3b24ndCBlbWl0CisgICAg
ICAgICAgICAvLyBzdWNoIGNvZGUsIGJ1dCB0aGUgY29hbGVzY2luZyBpbiBvdXIgcmVnaXN0ZXIg
YWxsb2NhdG9yIGFsc28gZG9lcyBjb3B5IHByb3BhZ2F0aW9uLCBzbworICAgICAgICAgICAgLy8g
YWx0aG91Z2ggd2UgZW1pdDoKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyAgICAgTW92
ZSAldG1wMSwgJXRtcDIKKyAgICAgICAgICAgIC8vICAgICBCcmFuY2hBZGQzMiAldG1wMSwgJXRt
cDIKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBUaGUgcmVnaXN0ZXIgYWxsb2NhdG9y
IG1heSB0dXJuIHRoaXMgaW50bzoKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyAgICAg
QnJhbmNoQWRkMzIgJXJheCwgJXJheAorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIEN1
cnJlbnRseSB3ZSBoYW5kbGUgdGhpcyBieSBlbnN1cmluZyB0aGF0IGV2ZW4gdGhpcyBraW5kIG9m
IGFkZGl0aW9uIGNhbiBiZSB1bmRvbmUuIFdlIGNhbgorICAgICAgICAgICAgLy8gdW5kbyBpdCBi
eSB1c2luZyB0aGUgY2FycnkgZmxhZy4gSXQncyB0ZW1wdGluZyB0byBnZXQgcmlkIG9mIHRoYXQg
Y29kZSBhbmQganVzdCAiZml4IiB0aGlzCisgICAgICAgICAgICAvLyBoZXJlIGJ5IGZvcmNpbmcg
TGF0ZVVzZSBvbiB0aGUgc3RhY2ttYXAuIElmIHdlIGRpZCB0aGF0IHVuY29uZGl0aW9uYWxseSwg
d2UnZCBsb3NlIGEgbG90IG9mCisgICAgICAgICAgICAvLyBwZXJmb3JtYW5jZS4gU28gaXQncyB0
ZW1wdGluZyB0byBkbyBpdCBvbmx5IGlmIGxlZnQgPT0gcmlnaHQuIEJ1dCB0aGF0IGNyZWF0ZXMg
YW4gYXdrd2FyZAorICAgICAgICAgICAgLy8gY29uc3RyYWludCBvbiBBaXI6IGl0IG1lYW5zIHRo
YXQgQWlyIHdvdWxkIG5vdCBiZSBhbGxvd2VkIHRvIGRvIGFueSBjb3B5IHByb3BhZ2F0aW9uLgor
ICAgICAgICAgICAgLy8gTm90aWNlIHRoYXQgdGhlICVyYXgsJXJheCBzaXR1YXRpb24gaGFwcGVu
ZWQgYWZ0ZXIgQWlyIGNvcHktcHJvcGFnYXRlZCB0aGUgTW92ZSB3ZSBhcmUKKyAgICAgICAgICAg
IC8vIGVtaXR0aW5nLiBXZSBrbm93IHRoYXQgY29weS1wcm9wYWdhdGluZyBvdmVyIHRoYXQgTW92
ZSBjYXVzZXMgYWRkLXRvLXNlbGYuIEJ1dCB3aGF0IGlmIHdlCisgICAgICAgICAgICAvLyBlbWl0
IHNvbWV0aGluZyBsaWtlIGEgTW92ZSAtIG9yIGV2ZW4gZG8gb3RoZXIga2luZHMgb2YgY29weS1w
cm9wYWdhdGlvbiBvbiB0bXAncyAtCisgICAgICAgICAgICAvLyBzb21ld2hlcmUgZWxzZSBpbiB0
aGlzIGNvZGUuIFRoZSBhZGQtdG8tc2VsZiBzaXR1YXRpb24gbWF5IG9ubHkgZW1lcmdlIGFmdGVy
IHNvbWUgb3RoZXIgQWlyCisgICAgICAgICAgICAvLyBvcHRpbWl6YXRpb25zIHJlbW92ZSBvdGhl
ciBNb3ZlJ3Mgb3IgaWRlbnRpdHktbGlrZSBvcGVyYXRpb25zLiBUaGF0J3Mgd2h5IHdlIGRvbid0
IHVzZQorICAgICAgICAgICAgLy8gTGF0ZVVzZSBoZXJlIHRvIHRha2UgY2FyZSBvZiBhZGQtdG8t
c2VsZi4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgQ2hlY2tTcGVjaWFsKiBzcGVjaWFsID0g
ZW5zdXJlQ2hlY2tTcGVjaWFsKG9wY29kZSwgMyk7CiAgICAgICAgICAgICAKKyAgICAgICAgICAg
IEluc3QgaW5zdChQYXRjaCwgY2hlY2tWYWx1ZSwgQXJnOjpzcGVjaWFsKHNwZWNpYWwpKTsKKwor
ICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6
Ok92ZXJmbG93KSk7CisKKyAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQoc291cmNlKTsKKyAg
ICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQocmVzdWx0KTsKKwogICAgICAgICAgICAgZmlsbFN0
YWNrbWFwKGluc3QsIGNoZWNrVmFsdWUsIDIpOwogCiAgICAgICAgICAgICBtX2luc3RzLmxhc3Qo
KS5hcHBlbmQoV1RGOjptb3ZlKGluc3QpKTsKQEAgLTE1OTksMTAgKzE2MjcsNiBAQCBwcml2YXRl
OgogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBDaGVja011bDogewotICAgICAgICAgICAgLy8g
SGFuZGxlIG11bHRpcGxpY2F0aW9uIHNlcGFyYXRlbHkuIE11bHRpcGxpY2F0aW9uIGlzIGhhcmQg
YmVjYXVzZSB3ZSBoYXZlIHRvIHByZXNlcnZlCi0gICAgICAgICAgICAvLyBib3RoIGlucHV0cy4g
VGhpcyByZXF1aXJlcyB1c2luZyB0aHJlZS1vcGVyYW5kIG11bHRpcGxpY2F0aW9uLCBldmVuIG9u
IHBsYXRmb3JtcyB3aGVyZQotICAgICAgICAgICAgLy8gdGhpcyByZXF1aXJlcyBhbiBhZGRpdGlv
bmFsIE1vdmUuCi0KICAgICAgICAgICAgIENoZWNrVmFsdWUqIGNoZWNrVmFsdWUgPSBtX3ZhbHVl
LT5hczxDaGVja1ZhbHVlPigpOwogCiAgICAgICAgICAgICBWYWx1ZSogbGVmdCA9IGNoZWNrVmFs
dWUtPmNoaWxkKDApOwpAQCAtMTYxMiwxNCArMTYzNiwxNSBAQCBwcml2YXRlOgogCiAgICAgICAg
ICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPQogICAgICAgICAgICAgICAgIG9wY29kZUZvclR5cGUo
QnJhbmNoTXVsMzIsIEJyYW5jaE11bDY0LCBBaXI6Ok9vcHMsIGNoZWNrVmFsdWUtPnR5cGUoKSk7
Ci0gICAgICAgICAgICBDaGVja1NwZWNpYWwqIHNwZWNpYWwgPSBlbnN1cmVDaGVja1NwZWNpYWwo
b3Bjb2RlLCA0KTsKKyAgICAgICAgICAgIENoZWNrU3BlY2lhbCogc3BlY2lhbCA9IGVuc3VyZUNo
ZWNrU3BlY2lhbChvcGNvZGUsIDMsIEFyZzo6TGF0ZVVzZSk7CiAKICAgICAgICAgICAgIC8vIEZJ
WE1FOiBIYW5kbGUgaW1tZWRpYXRlcy4KICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTEyMzAKIAorICAgICAgICAgICAgYXBwZW5kKE1vdmUs
IHRtcChsZWZ0KSwgcmVzdWx0KTsKKwogICAgICAgICAgICAgSW5zdCBpbnN0KFBhdGNoLCBjaGVj
a1ZhbHVlLCBBcmc6OnNwZWNpYWwoc3BlY2lhbCkpOwogICAgICAgICAgICAgaW5zdC5hcmdzLmFw
cGVuZChBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93KSk7Ci0gICAgICAgICAg
ICBpbnN0LmFyZ3MuYXBwZW5kKHRtcChsZWZ0KSk7CiAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBw
ZW5kKHRtcChyaWdodCkpOwogICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChyZXN1bHQpOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAkocmV2aXNpb24gMTkyNTA3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE2Myw2ICsxNjMsMTAgQEAgZW51bSBPcGNvZGUgOiBpbnQxNl90IHsKICAgICAvLyBjYWxsYmFj
a3MuIFlldCwgdGhpcyB0cmFuc2Zvcm1hdGlvbiBpcyB2YWxpZCBldmVuIGlmIHRoZXkgYXJlIGRp
ZmZlcmVudCBiZWNhdXNlIHdlIGtub3cgdGhhdAogICAgIC8vIGFmdGVyIHRoZSBmaXJzdCBDaGVj
a0FkZCBleGVjdXRlcywgdGhlIHNlY29uZCBDaGVja0FkZCBjb3VsZCBub3QgaGF2ZSBwb3NzaWJs
eSB0YWtlbiBzbG93CiAgICAgLy8gcGF0aC4gVGhlcmVmb3JlLCB0aGUgc2Vjb25kIENoZWNrQWRk
J3MgY2FsbGJhY2sgaXMgaXJyZWxldmFudC4KKyAgICAvLworICAgIC8vIE5vdGUgdGhhdCB0aGUg
Zmlyc3QgdHdvIGNoaWxkcmVuIG9mIHRoZXNlIG9wZXJhdGlvbnMgaGF2ZSBWYWx1ZVJlcCdzLCBi
b3RoIGFzIGlucHV0IGNvbnN0cmFpbnRzIGFuZAorICAgIC8vIGluIHRoZSByZXBzIHByb3ZpZGVk
IHRvIHRoZSBnZW5lcmF0b3IuIFRoZSBvdXRwdXQgY29uc3RyYWludHMgY291bGQgYmUgYW55dGhp
bmcsIGFuZCBzaG91bGQgbm90IGJlCisgICAgLy8gaW5zcGVjdGVkIGZvciBtZWFuaW5nLiBJZiB5
b3Ugd2FudCB0byBjYXB0dXJlIHRoZSB2YWx1ZXMgb2YgdGhlIGlucHV0cywgdXNlIHN0YWNrbWFw
IGFyZ3VtZW50cy4KICAgICBDaGVja0FkZCwKICAgICBDaGVja1N1YiwKICAgICBDaGVja011bCwK
QEAgLTE3MCw3ICsxNzQsOCBAQCBlbnVtIE9wY29kZSA6IGludDE2X3QgewogICAgIC8vIENoZWNr
IHRoYXQgc2lkZS1leGl0cy4gVXNlIHRoZSBDaGVja1ZhbHVlIGNsYXNzLiBMaWtlIENoZWNrQWRk
IGFuZCBmcmllbmRzLCB0aGlzIGhhcyBhCiAgICAgLy8gc3RhY2ttYXAgd2l0aCBhIGdlbmVyYXRp
b24gY2FsbGJhY2suIFRoaXMgdGFrZXMgYW4gaW50IGFyZ3VtZW50IHRoYXQgdGhpcyBicmFuY2hl
cyBvbiwgd2l0aAogICAgIC8vIGZ1bGwgYnJhbmNoIGZ1c2lvbiBpbiB0aGUgaW5zdHJ1Y3Rpb24g
c2VsZWN0b3IuIEEgdHJ1ZSB2YWx1ZSBqdW1wcyB0byB0aGUgZ2VuZXJhdG9yJ3Mgc2xvdwotICAg
IC8vIHBhdGguCisgICAgLy8gcGF0aC4gTm90ZSB0aGF0IHRoZSBwcmVkaWNhdGUgY2hpbGQgaXMg
aGFzIGJvdGggYW4gaW5wdXQgYW5kIG91dHB1dCBWYWx1ZVJlcC4gVGhlIGlucHV0IGNvbnN0cmFp
bnQKKyAgICAvLyBtdXN0IGJlIEFueSwgYW5kIHRoZSBvdXRwdXQgY291bGQgYmUgYW55dGhpbmcu
CiAgICAgQ2hlY2ssCiAKICAgICAvLyBTU0Egc3VwcG9ydCwgaW4gdGhlIHN0eWxlIG9mIERGRyBT
U0EuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFNw
ZWNpYWwuY3BwCShyZXZpc2lvbiAxOTI1MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQYXRjaHBvaW50U3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDE2ICs0MywxOCBA
QCBQYXRjaHBvaW50U3BlY2lhbDo6flBhdGNocG9pbnRTcGVjaWFsKCkKIHsKIH0KIAotdm9pZCBQ
YXRjaHBvaW50U3BlY2lhbDo6Zm9yRWFjaEFyZygKLSAgICBJbnN0JiBpbnN0LCBjb25zdCBTY29w
ZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYgY2FsbGJhY2spCit2b2lkIFBhdGNocG9p
bnRTcGVjaWFsOjpmb3JFYWNoQXJnKEluc3QmIGluc3QsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0
OjpFYWNoQXJnQ2FsbGJhY2s+JiBjYWxsYmFjaykKIHsKKyAgICAvLyBGSVhNRTogQWxsb3cgQjMg
UGF0Y2hwb2ludHMgdG8gc3BlY2lmeSBMYXRlVXNlLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTEzMzUKKyAgICAKICAgICBpZiAoaW5zdC5vcmlnaW4t
PnR5cGUoKSA9PSBWb2lkKSB7Ci0gICAgICAgIGZvckVhY2hBcmdJbXBsKDAsIDEsIGluc3QsIGNh
bGxiYWNrKTsKKyAgICAgICAgZm9yRWFjaEFyZ0ltcGwoMCwgMSwgaW5zdCwgQXJnOjpVc2UsIGNh
bGxiYWNrKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGNhbGxiYWNrKGluc3QuYXJn
c1sxXSwgQXJnOjpEZWYsIGluc3Qub3JpZ2luLT5haXJUeXBlKCkpOwotICAgIGZvckVhY2hBcmdJ
bXBsKDAsIDIsIGluc3QsIGNhbGxiYWNrKTsKKyAgICBmb3JFYWNoQXJnSW1wbCgwLCAyLCBpbnN0
LCBBcmc6OlVzZSwgY2FsbGJhY2spOwogfQogCiBib29sIFBhdGNocG9pbnRTcGVjaWFsOjppc1Zh
bGlkKEluc3QmIGluc3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VT
dHJlbmd0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVk
dWNlU3RyZW5ndGguY3BwCShyZXZpc2lvbiAxOTI1MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzMywxNyArNjMz
LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIENoZWNr
QWRkOgotICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRsZSBjb21tdXRhdGl2aXR5LgotICAgICAg
ICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTIxNAot
ICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAocmVwbGFjZVdpdGhOZXdWYWx1ZShtX3ZhbHVl
LT5jaGlsZCgwKS0+Y2hlY2tBZGRDb25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDEpKSkp
CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICht
X3ZhbHVlLT5jaGlsZCgwKS0+aXNJbnQoMCkpIHsKLSAgICAgICAgICAgICAgICBtX3ZhbHVlLT5y
ZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDEpKTsKLSAgICAgICAgICAgICAgICBt
X2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBoYW5kbGVDb21tdXRhdGl2aXR5KCk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQoMCkpIHsKICAgICAgICAgICAgICAg
ICBtX3ZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKQEAgLTY2
MSwzMCArNjU0LDQzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKFZhbHVlKiBuZWdhdGVkQ29uc3RhbnQgPSBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hlY2tOZWdD
b25zdGFudChtX3Byb2MpKSB7CisgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0
VmFsdWUobV9pbmRleCwgbmVnYXRlZENvbnN0YW50KTsKKyAgICAgICAgICAgICAgICBtX3ZhbHVl
LT5hczxDaGVja1ZhbHVlPigpLT5jb252ZXJ0VG9BZGQoKTsKKyAgICAgICAgICAgICAgICBtX3Zh
bHVlLT5jaGlsZCgxKSA9IG5lZ2F0ZWRDb25zdGFudDsKKyAgICAgICAgICAgICAgICBtX2NoYW5n
ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAg
ICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBDaGVja011bDoKLSAgICAgICAgICAgIC8vIEZJ
WE1FOiBIYW5kbGUgY29tbXV0YXRpdml0eS4KLSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTEyMTQKLSAgICAgICAgICAgIAogICAgICAgICAg
ICAgaWYgKHJlcGxhY2VXaXRoTmV3VmFsdWUobV92YWx1ZS0+Y2hpbGQoMCktPmNoZWNrTXVsQ29u
c3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgxKSkpKQogICAgICAgICAgICAgICAgIGJyZWFr
OwogCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPmlzSW50KDEpKSB7Ci0gICAg
ICAgICAgICAgICAgbV92YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgx
KSk7Ci0gICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG1fdmFs
dWUtPmNoaWxkKDEpLT5pc0ludCgxKSkgewotICAgICAgICAgICAgICAgIG1fdmFsdWUtPnJlcGxh
Y2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAgIG1fY2hh
bmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisgICAg
ICAgICAgICBoYW5kbGVDb21tdXRhdGl2aXR5KCk7CiAKLSAgICAgICAgICAgIGlmIChtX3ZhbHVl
LT5jaGlsZCgwKS0+aXNJbnQoMCkgfHwgbV92YWx1ZS0+Y2hpbGQoMSktPmlzSW50KDApKSB7Ci0g
ICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShtX3Byb2MuYWRkSW50Q29uc3RhbnQo
bV92YWx1ZSwgMCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKG1f
dmFsdWUtPmNoaWxkKDEpLT5oYXNJbnQoKSkgeworICAgICAgICAgICAgICAgIGJvb2wgbW9kaWZp
ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIHN3aXRjaCAobV92YWx1ZS0+Y2hpbGQoMSktPmFz
SW50KCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgICAgIHJl
cGxhY2VXaXRoTmV3VmFsdWUobV9wcm9jLmFkZEludENvbnN0YW50KG1fdmFsdWUsIDApKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAxOgorICAgICAg
ICAgICAgICAgICAgICBtX3ZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxk
KDApKTsKKyAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAg
ICAgICBtX3ZhbHVlLT5hczxDaGVja1ZhbHVlPigpLT5jb252ZXJ0VG9BZGQoKTsKKyAgICAgICAg
ICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMSkgPSBtX3ZhbHVlLT5jaGlsZCgwKTsKKyAgICAg
ICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgbW9kaWZp
ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGlmIChtb2RpZmllZCkKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKIApAQCAtNzYxLDYgKzc2Nywx
MCBAQCBwcml2YXRlOgogICAgIC8vIElmIHdlIGRlY2lkZSB0aGF0IHZhbHVlMiBjb21pbmcgZmly
c3QgaXMgdGhlIGNhbm9uaWNhbCBvcmRlcmluZy4KICAgICB2b2lkIGhhbmRsZUNvbW11dGF0aXZp
dHkoKQogICAgIHsKKyAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGhhdmUgY29tbXV0YXRpdmUgb3Bl
cmF0aW9ucyB0aGF0IHRha2UgbW9yZSB0aGFuIHR3byBjaGlsZHJlbi4gVGhvc2Ugb3BlcmF0aW9u
cyBtYXkKKyAgICAgICAgLy8gY29tbXV0ZSB0aGVpciBmaXJzdCB0d28gY2hpbGRyZW4gd2hpbGUg
bGVhdmluZyB0aGUgcmVzdCB1bmFmZmVjdGVkLgorICAgICAgICBBU1NFUlQobV92YWx1ZS0+bnVt
Q2hpbGRyZW4oKSA+PSAyKTsKKyAgICAgICAgCiAgICAgICAgIC8vIExlYXZlIGl0IGFsb25lIGlm
IHRoZSByaWdodCBjaGlsZCBpcyBhIGNvbnN0YW50LgogICAgICAgICBpZiAobV92YWx1ZS0+Y2hp
bGQoMSktPmlzQ29uc3RhbnQoKSkKICAgICAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAkocmV2aXNpb24gMTky
NTA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBjb25zdCBSZWdpc3RlclNldCYgU3RhY2tt
YXBTcGVjaWFsOjpleHRyCiAKIHZvaWQgU3RhY2ttYXBTcGVjaWFsOjpmb3JFYWNoQXJnSW1wbCgK
ICAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQWlyQXJn
cywKLSAgICBJbnN0JiBpbnN0LCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxi
YWNrPiYgY2FsbGJhY2spCisgICAgSW5zdCYgaW5zdCwgQXJnOjpSb2xlIHJvbGUsIGNvbnN0IFNj
b3BlZExhbWJkYTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+JiBjYWxsYmFjaykKIHsKICAgICBWYWx1
ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsKIApAQCAtNzgsNyArNzgsNyBAQCB2b2lkIFN0YWNrbWFw
U3BlY2lhbDo6Zm9yRWFjaEFyZ0ltcGwoCiAgICAgICAgIEFyZyYgYXJnID0gaW5zdC5hcmdzW2kg
KyBudW1JZ25vcmVkQWlyQXJnc107CiAgICAgICAgIFZhbHVlKiBjaGlsZCA9IHZhbHVlLT5jaGls
ZChpICsgbnVtSWdub3JlZEIzQXJncyk7CiAKLSAgICAgICAgY2FsbGJhY2soYXJnLCBBcmc6OlVz
ZSwgQXJnOjp0eXBlRm9yQjNUeXBlKGNoaWxkLT50eXBlKCkpKTsKKyAgICAgICAgY2FsbGJhY2so
YXJnLCByb2xlLCBBcmc6OnR5cGVGb3JCM1R5cGUoY2hpbGQtPnR5cGUoKSkpOwogICAgIH0KIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgJ
KHJldmlzaW9uIDE5MjUwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFw
U3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUo
QjNfSklUKQogCisjaW5jbHVkZSAiQWlyQXJnLmgiCiAjaW5jbHVkZSAiQWlyU3BlY2lhbC5oIgog
I2luY2x1ZGUgIkIzVmFsdWVSZXAuaCIKIApAQCAtNTMsNyArNTQsNyBAQCBwcm90ZWN0ZWQ6CiAK
ICAgICB2b2lkIGZvckVhY2hBcmdJbXBsKAogICAgICAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNB
cmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQWlyQXJncywKLSAgICAgICAgQWlyOjpJbnN0JiwgY29u
c3QgU2NvcGVkTGFtYmRhPEFpcjo6SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYpOworICAgICAgICBB
aXI6Okluc3QmLCBBaXI6OkFyZzo6Um9sZSByb2xlLCBjb25zdCBTY29wZWRMYW1iZGE8QWlyOjpJ
bnN0OjpFYWNoQXJnQ2FsbGJhY2s+Jik7CiAgICAgYm9vbCBpc1ZhbGlkSW1wbCgKICAgICAgICAg
dW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3MsCiAg
ICAgICAgIEFpcjo6SW5zdCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3Rh
Y2ttYXBWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3RhY2ttYXBWYWx1ZS5jcHAJKHJldmlzaW9uIDE5MjUwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1N0YWNrbWFwVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCwx
MSBAQCB2b2lkIFN0YWNrbWFwVmFsdWU6OmFwcGVuZChjb25zdCBDb25zdHJhCiAgICAgbV9yZXBz
LmFwcGVuZChjb25zdHJhaW5lZFZhbHVlLnJlcCgpKTsKIH0KIAordm9pZCBTdGFja21hcFZhbHVl
OjphcHBlbmRTb21lUmVnaXN0ZXIoVmFsdWUqIHZhbHVlKQoreworICAgIGFwcGVuZChDb25zdHJh
aW5lZFZhbHVlKHZhbHVlLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKSk7Cit9CisKIHZvaWQgU3Rh
Y2ttYXBWYWx1ZTo6c2V0Q29uc3RyYWluZWRDaGlsZCh1bnNpZ25lZCBpbmRleCwgY29uc3QgQ29u
c3RyYWluZWRWYWx1ZSYgY29uc3RyYWluZWRWYWx1ZSkKIHsKICAgICBjaGlsZChpbmRleCkgPSBj
b25zdHJhaW5lZFZhbHVlLnZhbHVlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTdGFja21hcFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzU3RhY2ttYXBWYWx1ZS5oCShyZXZpc2lvbiAxOTI1MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdGFja21hcFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDYgKzc3LDEw
IEBAIHB1YmxpYzoKICAgICAvLyBjaGlsZHJlbigpLmFwcGVuZCgpLiBUaGF0IHdpbGwgd29yayBm
aW5lLCBidXQgaXQncyBub3QgcmVjb21tZW5kZWQuCiAgICAgdm9pZCBhcHBlbmQoY29uc3QgQ29u
c3RyYWluZWRWYWx1ZSYpOwogCisgICAgLy8gVGhpcyBpcyBhIGhlbHBlciBmb3Igc29tZXRoaW5n
IHlvdSBtaWdodCBkbyBhIGxvdCBvZjogYXBwZW5kIGEgdmFsdWUgdGhhdCBzaG91bGQgYmUgY29u
c3RyYWluZWQKKyAgICAvLyB0byBTb21lUmVnaXN0ZXIuCisgICAgdm9pZCBhcHBlbmRTb21lUmVn
aXN0ZXIoVmFsdWUqKTsKKwogICAgIGNvbnN0IFZlY3RvcjxWYWx1ZVJlcD4mIHJlcHMoKSBjb25z
dCB7IHJldHVybiBtX3JlcHM7IH0KIAogICAgIHZvaWQgY2xvYmJlcihjb25zdCBSZWdpc3RlclNl
dCYgc2V0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAkocmV2
aXNpb24gMTkyNTA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNzgsNiArMjc4LDggQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID49IDIsICgiQXQgIiwgKnZhbHVlKSk7
CiAgICAgICAgICAgICAgICAgVkFMSURBVEUoaXNJbnQodmFsdWUtPmNoaWxkKDApLT50eXBlKCkp
LCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKGlzSW50KHZhbHVl
LT5jaGlsZCgxKS0+dHlwZSgpKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBW
QUxJREFURSh2YWx1ZS0+YXM8U3RhY2ttYXBWYWx1ZT4oKS0+Y29uc3RyYWluZWRDaGlsZCgwKS5y
ZXAoKSA9PSBWYWx1ZVJlcDo6QW55LCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAg
IFZBTElEQVRFKHZhbHVlLT5hczxTdGFja21hcFZhbHVlPigpLT5jb25zdHJhaW5lZENoaWxkKDEp
LnJlcCgpID09IFZhbHVlUmVwOjpBbnksICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAg
ICAgdmFsaWRhdGVTdGFja21hcCh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBjYXNlIENoZWNrOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFs
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNw
cAkocmV2aXNpb24gMTkyNTA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsNiArMTU0LDExIEBAIFZhbHVlKiBWYWx1ZTo6Y2hl
Y2tNdWxDb25zdGFudChQcm9jZWR1cmUKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAorVmFsdWUq
IFZhbHVlOjpjaGVja05lZ0NvbnN0YW50KFByb2NlZHVyZSYpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG51bGxwdHI7Cit9CisKIFZhbHVlKiBWYWx1ZTo6ZGl2Q29uc3RhbnQoUHJvY2VkdXJlJiwgY29u
c3QgVmFsdWUqKSBjb25zdAogewogICAgIHJldHVybiBudWxscHRyOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNWYWx1ZS5oCShyZXZpc2lvbiAxOTI1MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAogY2xhc3MgQmFzaWNCbG9jazsKK2NsYXNzIENo
ZWNrVmFsdWU7CiBjbGFzcyBQcm9jZWR1cmU7CiAKIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIFZh
bHVlIHsKQEAgLTExOCw2ICsxMTksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBWYWx1ZSogY2hl
Y2tBZGRDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0OwogICAg
IHZpcnR1YWwgVmFsdWUqIGNoZWNrU3ViQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUq
IG90aGVyKSBjb25zdDsKICAgICB2aXJ0dWFsIFZhbHVlKiBjaGVja011bENvbnN0YW50KFByb2Nl
ZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Q7CisgICAgdmlydHVhbCBWYWx1ZSogY2hl
Y2tOZWdDb25zdGFudChQcm9jZWR1cmUmKSBjb25zdDsKICAgICB2aXJ0dWFsIFZhbHVlKiBkaXZD
b25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0OyAvLyBUaGlzIGNo
b29zZXMgQ2hpbGxEaXYgc2VtYW50aWNzIGZvciBpbnRlZ2Vycy4KICAgICB2aXJ0dWFsIFZhbHVl
KiBiaXRBbmRDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0Owog
ICAgIHZpcnR1YWwgVmFsdWUqIGJpdE9yQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUq
IG90aGVyKSBjb25zdDsKQEAgLTI3Miw2ICsyNzQsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgfQogCiBw
cml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDaGVja1ZhbHVlOyAvLyBDaGVja1ZhbHVlOjpjb252
ZXJ0VG9BZGQoKSBtb2RpZmllcyBtX29wY29kZS4KKyAgICAKICAgICBzdGF0aWMgVHlwZSB0eXBl
Rm9yKE9wY29kZSwgVmFsdWUqIGZpcnN0Q2hpbGQpOwogCiAgICAgLy8gVGhpcyBncm91cCBvZiBm
aWVsZHMgaXMgYXJyYW5nZWQgdG8gZml0IGluIDY0IGJpdHMuCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvdGVzdGIzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvdGVzdGIzLmNwcAkocmV2aXNpb24gMTkyNTA3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL3Rlc3RiMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5NSw3ICsyOTUsOCBAQCB2b2lk
IHRlc3RNdWxBcmcoaW50IGEpCiB7CiAgICAgUHJvY2VkdXJlIHByb2M7CiAgICAgQmFzaWNCbG9j
ayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKLSAgICBWYWx1ZSogdmFsdWUgPSByb290LT5hcHBl
bmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50
R1BSMCk7CisgICAgVmFsdWUqIHZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAg
ICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLCByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOwogICAgIHJvb3QtPmFw
cGVuZE5ldzxDb250cm9sVmFsdWU+KAogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAog
ICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIE11bCwgT3JpZ2luKCksIHZhbHVl
LCB2YWx1ZSkpOwpAQCAtMzAzLDYgKzMwNCw1MSBAQCB2b2lkIHRlc3RNdWxBcmcoaW50IGEpCiAg
ICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MsIGEpID09IGEgKiBhKTsKIH0KIAordm9p
ZCB0ZXN0TXVsQXJnU3RvcmUoaW50IGEpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFz
aWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgIGludCBtdWxTbG90OworICAg
IGludCB2YWx1ZVNsb3Q7CisgICAgCisgICAgVmFsdWUqIHZhbHVlID0gcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPigKKyAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICByb290LT5h
cHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCkpOworICAgIFZhbHVlKiBtdWwgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2Ms
IE11bCwgT3JpZ2luKCksIHZhbHVlLCB2YWx1ZSk7CisKKyAgICByb290LT5hcHBlbmROZXc8TWVt
b3J5VmFsdWU+KAorICAgICAgICBwcm9jLCBTdG9yZSwgT3JpZ2luKCksIHZhbHVlLAorICAgICAg
ICByb290LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksICZ2YWx1ZVNs
b3QpKTsKKyAgICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KAorICAgICAgICBwcm9jLCBT
dG9yZSwgT3JpZ2luKCksIG11bCwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0UHRyVmFs
dWU+KHByb2MsIE9yaWdpbigpLCAmbXVsU2xvdCkpOworCisgICAgcm9vdC0+YXBwZW5kTmV3PENv
bnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksIHJvb3QtPmFwcGVu
ZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSk7CisKKyAgICBDSEVDSyghY29t
cGlsZUFuZFJ1bjxpbnQ+KHByb2MsIGEpKTsKKyAgICBDSEVDSyhtdWxTbG90ID09IGEgKiBhKTsK
KyAgICBDSEVDSyh2YWx1ZVNsb3QgPT0gYSk7Cit9CisKK3ZvaWQgdGVzdE11bEFkZEFyZyhpbnQg
YSkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5h
ZGRCbG9jaygpOworICAgIFZhbHVlKiB2YWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisg
ICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFy
Z3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsK
KyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJu
LCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAg
IHByb2MsIEFkZCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+
KHByb2MsIE11bCwgT3JpZ2luKCksIHZhbHVlLCB2YWx1ZSksCisgICAgICAgICAgICB2YWx1ZSkp
OworCisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MsIGEpID09IGEgKiBhICsgYSk7
Cit9CisKIHZvaWQgdGVzdE11bEFyZ3MoaW50IGEsIGludCBiKQogewogICAgIFByb2NlZHVyZSBw
cm9jOwpAQCAtMjYyNCw5ICsyNjcwLDkgQEAgdm9pZCB0ZXN0Q29tcGxleCh1bnNpZ25lZCBudW1W
YXJzLCB1bnNpZwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1Db25zdHJ1Y3RzOyAr
K2kpIHsKICAgICAgICAgaWYgKGkgJiAxKSB7CiAgICAgICAgICAgICAvLyBDb250cm9sIGZsb3cg
ZGlhbW9uZC4KLSAgICAgICAgICAgIHVuc2lnbmVkIHByZWRpY2F0ZVZhckluZGV4ID0gKGkgPj4g
MSkgJSBudW1WYXJzOwotICAgICAgICAgICAgdW5zaWduZWQgdGhlbkluY1ZhckluZGV4ID0gKChp
ID4+IDEpICsgMSkgJSBudW1WYXJzOwotICAgICAgICAgICAgdW5zaWduZWQgZWxzZUluY1Zhcklu
ZGV4ID0gKChpID4+IDEpICsgMikgJSBudW1WYXJzOworICAgICAgICAgICAgdW5zaWduZWQgcHJl
ZGljYXRlVmFySW5kZXggPSAoKGkgPj4gMSkgKyAyKSAlIG51bVZhcnM7CisgICAgICAgICAgICB1
bnNpZ25lZCB0aGVuSW5jVmFySW5kZXggPSAoKGkgPj4gMSkgKyAwKSAlIG51bVZhcnM7CisgICAg
ICAgICAgICB1bnNpZ25lZCBlbHNlSW5jVmFySW5kZXggPSAoKGkgPj4gMSkgKyAxKSAlIG51bVZh
cnM7CiAKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHRoZW5CbG9jayA9IHByb2MuYWRkQmxvY2so
KTsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGVsc2VCbG9jayA9IHByb2MuYWRkQmxvY2soKTsK
QEAgLTI2NzEsNyArMjcxNyw3IEBAIHZvaWQgdGVzdENvbXBsZXgodW5zaWduZWQgbnVtVmFycywg
dW5zaWcKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGxvb3BTa2lwID0gcHJvYy5hZGRCbG9jaygp
OwogICAgICAgICAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gcHJvYy5hZGRCbG9jaygp
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBWYWx1ZSogc3RhcnRJbmRleCA9IHZhcnNbKGkg
Pj4gMSkgJSBudW1WYXJzXTsKKyAgICAgICAgICAgIFZhbHVlKiBzdGFydEluZGV4ID0gdmFyc1so
KGkgPj4gMSkgKyAxKSAlIG51bVZhcnNdOwogICAgICAgICAgICAgVmFsdWUqIHN0YXJ0U3VtID0g
Y3VycmVudC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApOwogICAg
ICAgICAgICAgY3VycmVudC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCiAgICAgICAgICAgICAg
ICAgcHJvYywgQnJhbmNoLCBPcmlnaW4oKSwgc3RhcnRJbmRleCwKQEAgLTI3MjUsNyArMjc3MSw3
IEBAIHZvaWQgdGVzdENvbXBsZXgodW5zaWduZWQgbnVtVmFycywgdW5zaWcKICAgICAgICAgICAg
IHNraXBTdW0tPnNldFBoaShmaW5hbFN1bSk7CiAKICAgICAgICAgICAgIGN1cnJlbnQgPSBjb250
aW51YXRpb247Ci0gICAgICAgICAgICB2YXJzWygoaSA+PiAxKSArIDEpICUgbnVtVmFyc10gPSBm
aW5hbFN1bTsKKyAgICAgICAgICAgIHZhcnNbKChpID4+IDEpICsgMCkgJSBudW1WYXJzXSA9IGZp
bmFsU3VtOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zMDUzLDggKzMwOTksNiBAQCB2b2lkIHRl
c3RTaW1wbGVDaGVjaygpCiAgICAgY2hlY2stPnNldEdlbmVyYXRvcigKICAgICAgICAgWyZdIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMp
IHsKICAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSAxKTsKLSAgICAgICAg
ICAgIENIRUNLKHBhcmFtcy5yZXBzWzBdLmlzQ29uc3RhbnQoKSk7Ci0gICAgICAgICAgICBDSEVD
SyhwYXJhbXMucmVwc1swXS52YWx1ZSgpID09IDEpOwogCiAgICAgICAgICAgICAvLyBUaGlzIHNo
b3VsZCBhbHdheXMgd29yayBiZWNhdXNlIGEgZnVuY3Rpb24gdGhpcyBzaW1wbGUgc2hvdWxkIG5l
dmVyIGhhdmUgY2FsbGVlCiAgICAgICAgICAgICAvLyBzYXZlcy4KQEAgLTMwODYsOCArMzEzMCw2
IEBAIHZvaWQgdGVzdENoZWNrTGVzc1RoYW4oKQogICAgIGNoZWNrLT5zZXRHZW5lcmF0b3IoCiAg
ICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwcy5zaXplKCkgPT0g
MSk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1swXS5pc0NvbnN0YW50KCkpOwotICAg
ICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMF0udmFsdWUoKSA9PSAxKTsKIAogICAgICAgICAg
ICAgLy8gVGhpcyBzaG91bGQgYWx3YXlzIHdvcmsgYmVjYXVzZSBhIGZ1bmN0aW9uIHRoaXMgc2lt
cGxlIHNob3VsZCBuZXZlciBoYXZlIGNhbGxlZQogICAgICAgICAgICAgLy8gc2F2ZXMuCkBAIC0z
MTMzLDggKzMxNzUsNiBAQCB2b2lkIHRlc3RDaGVja01lZ2FDb21ibygpCiAgICAgY2hlY2stPnNl
dEdlbmVyYXRvcigKICAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgIENIRUNLKHBhcmFtcy5y
ZXBzLnNpemUoKSA9PSAxKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzBdLmlzQ29u
c3RhbnQoKSk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1swXS52YWx1ZSgpID09IDEp
OwogCiAgICAgICAgICAgICAvLyBUaGlzIHNob3VsZCBhbHdheXMgd29yayBiZWNhdXNlIGEgZnVu
Y3Rpb24gdGhpcyBzaW1wbGUgc2hvdWxkIG5ldmVyIGhhdmUgY2FsbGVlCiAgICAgICAgICAgICAv
LyBzYXZlcy4KQEAgLTMxNjksMTQgKzMyMDksMTUgQEAgdm9pZCB0ZXN0Q2hlY2tBZGRJbW0oKQog
ICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOwogICAgIFZhbHVlKiBhcmcyID0gcm9vdC0+YXBwZW5k
TmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDQyKTsKICAgICBDaGVja1ZhbHVlKiBj
aGVja0FkZCA9IHJvb3QtPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihwcm9jLCBDaGVja0FkZCwgT3Jp
Z2luKCksIGFyZzEsIGFyZzIpOworICAgIGNoZWNrQWRkLT5hcHBlbmQoYXJnMSk7CisgICAgY2hl
Y2tBZGQtPmFwcGVuZChhcmcyKTsKICAgICBjaGVja0FkZC0+c2V0R2VuZXJhdG9yKAogICAgICAg
ICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMm
IHBhcmFtcykgewotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDIpOwot
ICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMF0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBD
SEVDSyhwYXJhbXMucmVwc1sxXS5pc0NvbnN0YW50KCkpOwotICAgICAgICAgICAgQ0hFQ0socGFy
YW1zLnJlcHNbMV0udmFsdWUoKSA9PSA0Mik7Ci0gICAgICAgICAgICBqaXQuc3ViMzIoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoNDIpLCBwYXJhbXMucmVwc1swXS5ncHIoKSk7Ci0gICAgICAg
ICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUocGFyYW1zLnJlcHNbMF0uZ3ByKCksIEZQUklu
Zm86OmZwUmVnVDApOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDQp
OworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMl0uaXNHUFIoKSk7CisgICAgICAgICAg
ICBDSEVDSyhwYXJhbXMucmVwc1szXS5pc0NvbnN0YW50KCkpOworICAgICAgICAgICAgQ0hFQ0so
cGFyYW1zLnJlcHNbM10udmFsdWUoKSA9PSA0Mik7CisgICAgICAgICAgICBqaXQuY29udmVydElu
dDMyVG9Eb3VibGUocGFyYW1zLnJlcHNbMl0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDApOwogICAg
ICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKDQyKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CiAgICAgICAgICAgICBqaXQuYWRkRG91YmxlKEZQ
UkluZm86OmZwUmVnVDEsIEZQUkluZm86OmZwUmVnVDApOwogICAgICAgICAgICAgaml0LmVtaXRG
dW5jdGlvbkVwaWxvZ3VlKCk7CkBAIC0zMTk0LDYgKzMyMzUsNzUgQEAgdm9pZCB0ZXN0Q2hlY2tB
ZGRJbW0oKQogICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCAyMTQ3NDgzNjQ3KSA9PSAy
MTQ3NDgzNjg5LjApOwogfQogCit2b2lkIHRlc3RDaGVja0FkZEltbUNvbW11dGUoKQoreworICAg
IFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7
CisgICAgVmFsdWUqIGFyZzEgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICBwcm9j
LCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1Zh
bHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgVmFsdWUq
IGFyZzIgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgNDIp
OworICAgIENoZWNrVmFsdWUqIGNoZWNrQWRkID0gcm9vdC0+YXBwZW5kTmV3PENoZWNrVmFsdWU+
KHByb2MsIENoZWNrQWRkLCBPcmlnaW4oKSwgYXJnMiwgYXJnMSk7CisgICAgY2hlY2tBZGQtPmFw
cGVuZChhcmcxKTsKKyAgICBjaGVja0FkZC0+YXBwZW5kKGFyZzIpOworICAgIGNoZWNrQWRkLT5z
ZXRHZW5lcmF0b3IoCisgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMu
cmVwcy5zaXplKCkgPT0gNCk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1syXS5pc0dQ
UigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzNdLmlzQ29uc3RhbnQoKSk7Cisg
ICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1szXS52YWx1ZSgpID09IDQyKTsKKyAgICAgICAg
ICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXMucmVwc1syXS5ncHIoKSwgRlBSSW5m
bzo6ZnBSZWdUMCk7CisgICAgICAgICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoNDIpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKKyAgICAgICAgICAg
IGppdC5hZGREb3VibGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAg
ICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAgICAgICAgICAgIGppdC5yZXQo
KTsKKyAgICAgICAgfSk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAg
ICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgSVRvRCwgT3JpZ2luKCksIGNoZWNrQWRkKSk7CisKKyAgICBhdXRvIGNvZGUgPSBj
b21waWxlKHByb2MpOworCisgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDApID09IDQy
LjApOworICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCAxKSA9PSA0My4wKTsKKyAgICBD
SEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgNDIpID09IDg0LjApOworICAgIENIRUNLKGludm9r
ZTxkb3VibGU+KCpjb2RlLCAyMTQ3NDgzNjQ3KSA9PSAyMTQ3NDgzNjg5LjApOworfQorCit2b2lk
IHRlc3RDaGVja0FkZEltbVNvbWVSZWdpc3RlcigpCit7CisgICAgUHJvY2VkdXJlIHByb2M7Cisg
ICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBWYWx1ZSogYXJnMSA9
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwK
KyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICBWYWx1ZSogYXJnMiA9IHJvb3QtPmFwcGVu
ZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCA0Mik7CisgICAgQ2hlY2tWYWx1ZSog
Y2hlY2tBZGQgPSByb290LT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4ocHJvYywgQ2hlY2tBZGQsIE9y
aWdpbigpLCBhcmcxLCBhcmcyKTsKKyAgICBjaGVja0FkZC0+YXBwZW5kU29tZVJlZ2lzdGVyKGFy
ZzEpOworICAgIGNoZWNrQWRkLT5hcHBlbmRTb21lUmVnaXN0ZXIoYXJnMik7CisgICAgY2hlY2tB
ZGQtPnNldEdlbmVyYXRvcigKKyAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3Qg
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIENIRUNLKHBh
cmFtcy5yZXBzLnNpemUoKSA9PSA0KTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzJd
LmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbM10uaXNHUFIoKSk7Cisg
ICAgICAgICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUocGFyYW1zLnJlcHNbMl0uZ3ByKCks
IEZQUkluZm86OmZwUmVnVDApOworICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91Ymxl
KHBhcmFtcy5yZXBzWzNdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKKyAgICAgICAgICAgIGpp
dC5hZGREb3VibGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAg
ICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsK
KyAgICAgICAgfSk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAg
IHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
cHJvYywgSVRvRCwgT3JpZ2luKCksIGNoZWNrQWRkKSk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21w
aWxlKHByb2MpOworCisgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDApID09IDQyLjAp
OworICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCAxKSA9PSA0My4wKTsKKyAgICBDSEVD
SyhpbnZva2U8ZG91YmxlPigqY29kZSwgNDIpID09IDg0LjApOworICAgIENIRUNLKGludm9rZTxk
b3VibGU+KCpjb2RlLCAyMTQ3NDgzNjQ3KSA9PSAyMTQ3NDgzNjg5LjApOworfQorCiB2b2lkIHRl
c3RDaGVja0FkZCgpCiB7CiAgICAgUHJvY2VkdXJlIHByb2M7CkBAIC0zMjA1LDE0ICszMzE1LDE1
IEBAIHZvaWQgdGVzdENoZWNrQWRkKCkKICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAog
ICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IEdQUkluZm86OmFyZ3VtZW50R1BSMSkpOwogICAgIENoZWNrVmFsdWUqIGNoZWNrQWRkID0gcm9v
dC0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KHByb2MsIENoZWNrQWRkLCBPcmlnaW4oKSwgYXJnMSwg
YXJnMik7CisgICAgY2hlY2tBZGQtPmFwcGVuZFNvbWVSZWdpc3RlcihhcmcxKTsKKyAgICBjaGVj
a0FkZC0+YXBwZW5kU29tZVJlZ2lzdGVyKGFyZzIpOwogICAgIGNoZWNrQWRkLT5zZXRHZW5lcmF0
b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYgcGFyYW1zKSB7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwcy5zaXpl
KCkgPT0gMik7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1swXS5pc0dQUigpKTsKLSAg
ICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzFdLmlzR1BSKCkpOwotICAgICAgICAgICAgaml0
LnN1YjMyKHBhcmFtcy5yZXBzWzFdLmdwcigpLCBwYXJhbXMucmVwc1swXS5ncHIoKSk7Ci0gICAg
ICAgICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUocGFyYW1zLnJlcHNbMF0uZ3ByKCksIEZQ
UkluZm86OmZwUmVnVDApOwotICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBh
cmFtcy5yZXBzWzFdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKKyAgICAgICAgICAgIENIRUNL
KHBhcmFtcy5yZXBzLnNpemUoKSA9PSA0KTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBz
WzJdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbM10uaXNHUFIoKSk7
CisgICAgICAgICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUocGFyYW1zLnJlcHNbMl0uZ3By
KCksIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91
YmxlKHBhcmFtcy5yZXBzWzNdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKICAgICAgICAgICAg
IGppdC5hZGREb3VibGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CiAgICAg
ICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICAgICAgICAgIGppdC5yZXQo
KTsKQEAgLTMyMzYsMTQgKzMzNDcsMTUgQEAgdm9pZCB0ZXN0Q2hlY2tBZGQ2NCgpCiAgICAgVmFs
dWUqIGFyZzEgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgVmFsdWUqIGFyZzIgPSByb290LT5hcHBl
bmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50
R1BSMSk7CiAgICAgQ2hlY2tWYWx1ZSogY2hlY2tBZGQgPSByb290LT5hcHBlbmROZXc8Q2hlY2tW
YWx1ZT4ocHJvYywgQ2hlY2tBZGQsIE9yaWdpbigpLCBhcmcxLCBhcmcyKTsKKyAgICBjaGVja0Fk
ZC0+YXBwZW5kU29tZVJlZ2lzdGVyKGFyZzEpOworICAgIGNoZWNrQWRkLT5hcHBlbmRTb21lUmVn
aXN0ZXIoYXJnMik7CiAgICAgY2hlY2tBZGQtPnNldEdlbmVyYXRvcigKICAgICAgICAgWyZdIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMp
IHsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSAyKTsKLSAgICAgICAg
ICAgIENIRUNLKHBhcmFtcy5yZXBzWzBdLmlzR1BSKCkpOwotICAgICAgICAgICAgQ0hFQ0socGFy
YW1zLnJlcHNbMV0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBqaXQuc3ViNjQocGFyYW1zLnJlcHNb
MV0uZ3ByKCksIHBhcmFtcy5yZXBzWzBdLmdwcigpKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0
SW50NjRUb0RvdWJsZShwYXJhbXMucmVwc1swXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7Ci0g
ICAgICAgICAgICBqaXQuY29udmVydEludDY0VG9Eb3VibGUocGFyYW1zLnJlcHNbMV0uZ3ByKCks
IEZQUkluZm86OmZwUmVnVDEpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgp
ID09IDQpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMl0uaXNHUFIoKSk7CisgICAg
ICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1szXS5pc0dQUigpKTsKKyAgICAgICAgICAgIGppdC5j
b252ZXJ0SW50NjRUb0RvdWJsZShwYXJhbXMucmVwc1syXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdU
MCk7CisgICAgICAgICAgICBqaXQuY29udmVydEludDY0VG9Eb3VibGUocGFyYW1zLnJlcHNbM10u
Z3ByKCksIEZQUkluZm86OmZwUmVnVDEpOwogICAgICAgICAgICAgaml0LmFkZERvdWJsZShGUFJJ
bmZvOjpmcFJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1QwKTsKICAgICAgICAgICAgIGppdC5lbWl0RnVu
Y3Rpb25FcGlsb2d1ZSgpOwogICAgICAgICAgICAgaml0LnJldCgpOwpAQCAtMzMwNywxNCArMzQx
OSwxNSBAQCB2b2lkIHRlc3RDaGVja1N1YkltbSgpCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxB
cmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7
CiAgICAgVmFsdWUqIGFyZzIgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgNDIpOwogICAgIENoZWNrVmFsdWUqIGNoZWNrU3ViID0gcm9vdC0+YXBwZW5kTmV3
PENoZWNrVmFsdWU+KHByb2MsIENoZWNrU3ViLCBPcmlnaW4oKSwgYXJnMSwgYXJnMik7CisgICAg
Y2hlY2tTdWItPmFwcGVuZChhcmcxKTsKKyAgICBjaGVja1N1Yi0+YXBwZW5kKGFyZzIpOwogICAg
IGNoZWNrU3ViLT5zZXRHZW5lcmF0b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7Ci0gICAgICAgICAgICBD
SEVDSyhwYXJhbXMucmVwcy5zaXplKCkgPT0gMik7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMu
cmVwc1swXS5pc0dQUigpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzFdLmlzQ29u
c3RhbnQoKSk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1sxXS52YWx1ZSgpID09IDQy
KTsKLSAgICAgICAgICAgIGppdC5hZGQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMig0Miks
IHBhcmFtcy5yZXBzWzBdLmdwcigpKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0Rv
dWJsZShwYXJhbXMucmVwc1swXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAg
ICBDSEVDSyhwYXJhbXMucmVwcy5zaXplKCkgPT0gNCk7CisgICAgICAgICAgICBDSEVDSyhwYXJh
bXMucmVwc1syXS5pc0dQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzNdLmlz
Q29uc3RhbnQoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1szXS52YWx1ZSgpID09
IDQyKTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXMucmVwc1sy
XS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7CiAgICAgICAgICAgICBqaXQuY29udmVydEludDMy
VG9Eb3VibGUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoNDIpLCBGUFJJbmZvOjpmcFJlZ1Qx
KTsKICAgICAgICAgICAgIGppdC5zdWJEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6
ZnBSZWdUMCk7CiAgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKQEAgLTMz
MzIsNiArMzQ0NSw0MiBAQCB2b2lkIHRlc3RDaGVja1N1YkltbSgpCiAgICAgQ0hFQ0soaW52b2tl
PGRvdWJsZT4oKmNvZGUsIC0yMTQ3NDgzNjQ3KSA9PSAtMjE0NzQ4MzY4OS4wKTsKIH0KIAordm9p
ZCB0ZXN0Q2hlY2tTdWJCYWRJbW0oKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2lj
QmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgVmFsdWUqIGFyZzEgPSByb290LT5h
cHBlbmROZXc8VmFsdWU+KAorICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIwKSk7CisgICAgaW50MzJfdCBiYWRJbW0gPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPGludD46Om1pbigpOworICAgIFZhbHVlKiBhcmcyID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0
MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGJhZEltbSk7CisgICAgQ2hlY2tWYWx1ZSogY2hlY2tT
dWIgPSByb290LT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4ocHJvYywgQ2hlY2tTdWIsIE9yaWdpbigp
LCBhcmcxLCBhcmcyKTsKKyAgICBjaGVja1N1Yi0+YXBwZW5kKGFyZzEpOworICAgIGNoZWNrU3Vi
LT5hcHBlbmQoYXJnMik7CisgICAgY2hlY2tTdWItPnNldEdlbmVyYXRvcigKKyAgICAgICAgWyZd
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJh
bXMpIHsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSA0KTsKKyAgICAg
ICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzJdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0so
cGFyYW1zLnJlcHNbM10uaXNDb25zdGFudCgpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5y
ZXBzWzNdLnZhbHVlKCkgPT0gYmFkSW1tKTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJU
b0RvdWJsZShwYXJhbXMucmVwc1syXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAg
ICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
YmFkSW1tKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAgICAgICAgICBqaXQuc3ViRG91YmxlKEZQ
UkluZm86OmZwUmVnVDEsIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICAgICAgaml0LmVtaXRG
dW5jdGlvbkVwaWxvZ3VlKCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOwor
ICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1cm4s
IE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIElUb0QsIE9y
aWdpbigpLCBjaGVja1N1YikpOworCisgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKwor
ICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCAwKSA9PSAtc3RhdGljX2Nhc3Q8ZG91Ymxl
PihiYWRJbW0pKTsKKyAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgLTEpID09IC1zdGF0
aWNfY2FzdDxkb3VibGU+KGJhZEltbSkgLSAxKTsKKyAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigq
Y29kZSwgMSkgPT0gLXN0YXRpY19jYXN0PGRvdWJsZT4oYmFkSW1tKSArIDEpOworICAgIENIRUNL
KGludm9rZTxkb3VibGU+KCpjb2RlLCA0MikgPT0gLXN0YXRpY19jYXN0PGRvdWJsZT4oYmFkSW1t
KSArIDQyKTsKK30KKwogdm9pZCB0ZXN0Q2hlY2tTdWIoKQogewogICAgIFByb2NlZHVyZSBwcm9j
OwpAQCAtMzM0MywxNCArMzQ5MiwxNSBAQCB2b2lkIHRlc3RDaGVja1N1YigpCiAgICAgICAgIHBy
b2MsIFRydW5jLCBPcmlnaW4oKSwKICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVn
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKTsKICAgICBDaGVj
a1ZhbHVlKiBjaGVja1N1YiA9IHJvb3QtPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihwcm9jLCBDaGVj
a1N1YiwgT3JpZ2luKCksIGFyZzEsIGFyZzIpOworICAgIGNoZWNrU3ViLT5hcHBlbmQoYXJnMSk7
CisgICAgY2hlY2tTdWItPmFwcGVuZChhcmcyKTsKICAgICBjaGVja1N1Yi0+c2V0R2VuZXJhdG9y
KAogICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmIHBhcmFtcykgewotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgp
ID09IDIpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMF0uaXNHUFIoKSk7Ci0gICAg
ICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1sxXS5pc0dQUigpKTsKLSAgICAgICAgICAgIGppdC5h
ZGQzMihwYXJhbXMucmVwc1sxXS5ncHIoKSwgcGFyYW1zLnJlcHNbMF0uZ3ByKCkpOwotICAgICAg
ICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBhcmFtcy5yZXBzWzBdLmdwcigpLCBGUFJJ
bmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJh
bXMucmVwc1sxXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAgICAgICAgICBDSEVDSyhw
YXJhbXMucmVwcy5zaXplKCkgPT0gNCk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1sy
XS5pc0dQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzNdLmlzR1BSKCkpOwor
ICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBhcmFtcy5yZXBzWzJdLmdwcigp
LCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJs
ZShwYXJhbXMucmVwc1szXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CiAgICAgICAgICAgICBq
aXQuc3ViRG91YmxlKEZQUkluZm86OmZwUmVnVDEsIEZQUkluZm86OmZwUmVnVDApOwogICAgICAg
ICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgICAgICAgICBqaXQucmV0KCk7
CkBAIC0zMzc5LDE0ICszNTI5LDE1IEBAIHZvaWQgdGVzdENoZWNrU3ViNjQoKQogICAgIFZhbHVl
KiBhcmcxID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgIFZhbHVlKiBhcmcyID0gcm9vdC0+YXBwZW5k
TmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjEpOwogICAgIENoZWNrVmFsdWUqIGNoZWNrU3ViID0gcm9vdC0+YXBwZW5kTmV3PENoZWNrVmFs
dWU+KHByb2MsIENoZWNrU3ViLCBPcmlnaW4oKSwgYXJnMSwgYXJnMik7CisgICAgY2hlY2tTdWIt
PmFwcGVuZChhcmcxKTsKKyAgICBjaGVja1N1Yi0+YXBwZW5kKGFyZzIpOwogICAgIGNoZWNrU3Vi
LT5zZXRHZW5lcmF0b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7Ci0gICAgICAgICAgICBDSEVDSyhwYXJh
bXMucmVwcy5zaXplKCkgPT0gMik7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1swXS5p
c0dQUigpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzFdLmlzR1BSKCkpOwotICAg
ICAgICAgICAgaml0LmFkZDY0KHBhcmFtcy5yZXBzWzFdLmdwcigpLCBwYXJhbXMucmVwc1swXS5n
cHIoKSk7Ci0gICAgICAgICAgICBqaXQuY29udmVydEludDY0VG9Eb3VibGUocGFyYW1zLnJlcHNb
MF0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDApOwotICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQ2
NFRvRG91YmxlKHBhcmFtcy5yZXBzWzFdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKKyAgICAg
ICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSA0KTsKKyAgICAgICAgICAgIENIRUNL
KHBhcmFtcy5yZXBzWzJdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNb
M10uaXNHUFIoKSk7CisgICAgICAgICAgICBqaXQuY29udmVydEludDY0VG9Eb3VibGUocGFyYW1z
LnJlcHNbMl0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICAgICAgaml0LmNvbnZl
cnRJbnQ2NFRvRG91YmxlKHBhcmFtcy5yZXBzWzNdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QxKTsK
ICAgICAgICAgICAgIGppdC5zdWJEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBS
ZWdUMCk7CiAgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICAgICAg
ICAgIGppdC5yZXQoKTsKQEAgLTM0NTAsMTMgKzM2MDEsMTIgQEAgdm9pZCB0ZXN0Q2hlY2tOZWco
KQogICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCiAgICAgICAgIHJvb3QtPmFwcGVuZE5l
dzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIw
KSk7CiAgICAgQ2hlY2tWYWx1ZSogY2hlY2tOZWcgPSByb290LT5hcHBlbmROZXc8Q2hlY2tWYWx1
ZT4ocHJvYywgQ2hlY2tTdWIsIE9yaWdpbigpLCBhcmcxLCBhcmcyKTsKKyAgICBjaGVja05lZy0+
YXBwZW5kKGFyZzIpOwogICAgIGNoZWNrTmVnLT5zZXRHZW5lcmF0b3IoCiAgICAgICAgIFsmXSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1z
KSB7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwcy5zaXplKCkgPT0gMik7Ci0gICAgICAg
ICAgICBDSEVDSyhwYXJhbXMucmVwc1swXSA9PSBWYWx1ZVJlcDo6Y29uc3RhbnQoMCkpOwotICAg
ICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMV0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBqaXQu
bmVnMzIocGFyYW1zLnJlcHNbMV0uZ3ByKCkpOwotICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQz
MlRvRG91YmxlKHBhcmFtcy5yZXBzWzFdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKKyAgICAg
ICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSAzKTsKKyAgICAgICAgICAgIENIRUNL
KHBhcmFtcy5yZXBzWzJdLmlzR1BSKCkpOworICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRv
RG91YmxlKHBhcmFtcy5yZXBzWzJdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKICAgICAgICAg
ICAgIGppdC5uZWdhdGVEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7
CiAgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICAgICAgICAgIGpp
dC5yZXQoKTsKQEAgLTM0ODAsMTMgKzM2MzAsMTIgQEAgdm9pZCB0ZXN0Q2hlY2tOZWc2NCgpCiAg
ICAgVmFsdWUqIGFyZzEgPSByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmln
aW4oKSwgMCk7CiAgICAgVmFsdWUqIGFyZzIgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgQ2hlY2tW
YWx1ZSogY2hlY2tOZWcgPSByb290LT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4ocHJvYywgQ2hlY2tT
dWIsIE9yaWdpbigpLCBhcmcxLCBhcmcyKTsKKyAgICBjaGVja05lZy0+YXBwZW5kKGFyZzIpOwog
ICAgIGNoZWNrTmVnLT5zZXRHZW5lcmF0b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7Ci0gICAgICAgICAg
ICBDSEVDSyhwYXJhbXMucmVwcy5zaXplKCkgPT0gMik7Ci0gICAgICAgICAgICBDSEVDSyhwYXJh
bXMucmVwc1swXSA9PSBWYWx1ZVJlcDo6Y29uc3RhbnQoMCkpOwotICAgICAgICAgICAgQ0hFQ0so
cGFyYW1zLnJlcHNbMV0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBqaXQubmVnNjQocGFyYW1zLnJl
cHNbMV0uZ3ByKCkpOwotICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKHBhcmFt
cy5yZXBzWzFdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKKyAgICAgICAgICAgIENIRUNLKHBh
cmFtcy5yZXBzLnNpemUoKSA9PSAzKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzJd
LmlzR1BSKCkpOworICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKHBhcmFtcy5y
ZXBzWzJdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKICAgICAgICAgICAgIGppdC5uZWdhdGVE
b3VibGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CiAgICAgICAgICAgICBq
aXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICAgICAgICAgIGppdC5yZXQoKTsKQEAgLTM1
MTQsMTMgKzM2NjMsMTUgQEAgdm9pZCB0ZXN0Q2hlY2tNdWwoKQogICAgICAgICBwcm9jLCBUcnVu
YywgT3JpZ2luKCksCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSk7CiAgICAgQ2hlY2tWYWx1ZSog
Y2hlY2tNdWwgPSByb290LT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4ocHJvYywgQ2hlY2tNdWwsIE9y
aWdpbigpLCBhcmcxLCBhcmcyKTsKKyAgICBjaGVja011bC0+YXBwZW5kKGFyZzEpOworICAgIGNo
ZWNrTXVsLT5hcHBlbmQoYXJnMik7CiAgICAgY2hlY2tNdWwtPnNldEdlbmVyYXRvcigKICAgICAg
ICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1z
JiBwYXJhbXMpIHsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSAyKTsK
LSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzBdLmlzR1BSKCkpOwotICAgICAgICAgICAg
Q0hFQ0socGFyYW1zLnJlcHNbMV0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBqaXQuY29udmVydElu
dDMyVG9Eb3VibGUocGFyYW1zLnJlcHNbMF0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDApOwotICAg
ICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBhcmFtcy5yZXBzWzFdLmdwcigpLCBG
UFJJbmZvOjpmcFJlZ1QxKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9
PSA0KTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzJdLmlzR1BSKCkpOworICAgICAg
ICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbM10uaXNHUFIoKSk7CisgICAgICAgICAgICBqaXQuY29u
dmVydEludDMyVG9Eb3VibGUocGFyYW1zLnJlcHNbMl0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDAp
OworICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBhcmFtcy5yZXBzWzNdLmdw
cigpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKICAgICAgICAgICAgIGppdC5tdWxEb3VibGUoRlBSSW5m
bzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CiAgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0
aW9uRXBpbG9ndWUoKTsKICAgICAgICAgICAgIGppdC5yZXQoKTsKQEAgLTM1MzcsNiArMzY4OCw5
MiBAQCB2b2lkIHRlc3RDaGVja011bCgpCiAgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUs
IDIxNDc0ODM2NDcsIDQyKSA9PSAyMTQ3NDgzNjQ3LjAgKiA0Mi4wKTsKIH0KIAordm9pZCB0ZXN0
Q2hlY2tNdWxNZW1vcnkoKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sq
IHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICBpbnQgbGVmdDsKKyAgICBpbnQgcmlnaHQ7
CisgICAgCisgICAgVmFsdWUqIGFyZzEgPSByb290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KAor
ICAgICAgICBwcm9jLCBMb2FkLCBJbnQzMiwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgJmxlZnQpKTsKKyAgICBWYWx1ZSog
YXJnMiA9IHJvb3QtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4oCisgICAgICAgIHByb2MsIExvYWQs
IEludDMyLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+
KHByb2MsIE9yaWdpbigpLCAmcmlnaHQpKTsKKyAgICBDaGVja1ZhbHVlKiBjaGVja011bCA9IHJv
b3QtPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihwcm9jLCBDaGVja011bCwgT3JpZ2luKCksIGFyZzEs
IGFyZzIpOworICAgIGNoZWNrTXVsLT5hcHBlbmQoYXJnMSk7CisgICAgY2hlY2tNdWwtPmFwcGVu
ZChhcmcyKTsKKyAgICBjaGVja011bC0+c2V0R2VuZXJhdG9yKAorICAgICAgICBbJl0gKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewor
ICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDQpOworICAgICAgICAgICAg
Q0hFQ0socGFyYW1zLnJlcHNbMl0uaXNHUFIoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMu
cmVwc1szXS5pc0dQUigpKTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShw
YXJhbXMucmVwc1syXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAgICBqaXQu
Y29udmVydEludDMyVG9Eb3VibGUocGFyYW1zLnJlcHNbM10uZ3ByKCksIEZQUkluZm86OmZwUmVn
VDEpOworICAgICAgICAgICAgaml0Lm11bERvdWJsZShGUFJJbmZvOjpmcFJlZ1QxLCBGUFJJbmZv
OjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAg
ICAgICAgICAgaml0LnJldCgpOworICAgICAgICB9KTsKKyAgICByb290LT5hcHBlbmROZXc8Q29u
dHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBJVG9ELCBPcmlnaW4oKSwgY2hlY2tNdWwpKTsKKwor
ICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisKKyAgICBsZWZ0ID0gMDsKKyAgICByaWdo
dCA9IDQyOworICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlKSA9PSAwLjApOworICAgIAor
ICAgIGxlZnQgPSAxOworICAgIHJpZ2h0ID0gNDI7CisgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4o
KmNvZGUpID09IDQyLjApOworCisgICAgbGVmdCA9IDQyOworICAgIHJpZ2h0ID0gNDI7CisgICAg
Q0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUpID09IDQyLjAgKiA0Mi4wKTsKKworICAgIGxlZnQg
PSAyMTQ3NDgzNjQ3OworICAgIHJpZ2h0ID0gNDI7CisgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4o
KmNvZGUpID09IDIxNDc0ODM2NDcuMCAqIDQyLjApOworfQorCit2b2lkIHRlc3RDaGVja011bDIo
KQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFk
ZEJsb2NrKCk7CisgICAgVmFsdWUqIGFyZzEgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAg
ICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1
bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7Cisg
ICAgVmFsdWUqIGFyZzIgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmln
aW4oKSwgMik7CisgICAgQ2hlY2tWYWx1ZSogY2hlY2tNdWwgPSByb290LT5hcHBlbmROZXc8Q2hl
Y2tWYWx1ZT4ocHJvYywgQ2hlY2tNdWwsIE9yaWdpbigpLCBhcmcxLCBhcmcyKTsKKyAgICBjaGVj
a011bC0+YXBwZW5kKGFyZzEpOworICAgIGNoZWNrTXVsLT5hcHBlbmQoYXJnMik7CisgICAgY2hl
Y2tNdWwtPnNldEdlbmVyYXRvcigKKyAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIENIRUNL
KHBhcmFtcy5yZXBzLnNpemUoKSA9PSA0KTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBz
WzJdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbM10uaXNDb25zdGFu
dCgpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzNdLnZhbHVlKCkgPT0gMik7Cisg
ICAgICAgICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUocGFyYW1zLnJlcHNbMl0uZ3ByKCks
IEZQUkluZm86OmZwUmVnVDApOworICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91Ymxl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDIpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKKyAgICAg
ICAgICAgIGppdC5tdWxEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7
CisgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAgICAgICAgICAgIGpp
dC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4o
CisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5l
dzxWYWx1ZT4ocHJvYywgSVRvRCwgT3JpZ2luKCksIGNoZWNrTXVsKSk7CisKKyAgICBhdXRvIGNv
ZGUgPSBjb21waWxlKHByb2MpOworCisgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDAp
ID09IDAuMCk7CisgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDEpID09IDIuMCk7Cisg
ICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDQyKSA9PSA0Mi4wICogMi4wKTsKKyAgICBD
SEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgMjE0NzQ4MzY0NykgPT0gMjE0NzQ4MzY0Ny4wICog
Mi4wKTsKK30KKwogdm9pZCB0ZXN0Q2hlY2tNdWw2NCgpCiB7CiAgICAgUHJvY2VkdXJlIHByb2M7
CkBAIC0zNTQ0LDEzICszNzgxLDE1IEBAIHZvaWQgdGVzdENoZWNrTXVsNjQoKQogICAgIFZhbHVl
KiBhcmcxID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgIFZhbHVlKiBhcmcyID0gcm9vdC0+YXBwZW5k
TmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjEpOwogICAgIENoZWNrVmFsdWUqIGNoZWNrTXVsID0gcm9vdC0+YXBwZW5kTmV3PENoZWNrVmFs
dWU+KHByb2MsIENoZWNrTXVsLCBPcmlnaW4oKSwgYXJnMSwgYXJnMik7CisgICAgY2hlY2tNdWwt
PmFwcGVuZChhcmcxKTsKKyAgICBjaGVja011bC0+YXBwZW5kKGFyZzIpOwogICAgIGNoZWNrTXVs
LT5zZXRHZW5lcmF0b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7Ci0gICAgICAgICAgICBDSEVDSyhwYXJh
bXMucmVwcy5zaXplKCkgPT0gMik7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1swXS5p
c0dQUigpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzFdLmlzR1BSKCkpOwotICAg
ICAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKHBhcmFtcy5yZXBzWzBdLmdwcigpLCBG
UFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0SW50NjRUb0RvdWJsZShw
YXJhbXMucmVwc1sxXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAgICAgICAgICBDSEVD
SyhwYXJhbXMucmVwcy5zaXplKCkgPT0gNCk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVw
c1syXS5pc0dQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzNdLmlzR1BSKCkp
OworICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKHBhcmFtcy5yZXBzWzJdLmdw
cigpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50NjRUb0Rv
dWJsZShwYXJhbXMucmVwc1szXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CiAgICAgICAgICAg
ICBqaXQubXVsRG91YmxlKEZQUkluZm86OmZwUmVnVDEsIEZQUkluZm86OmZwUmVnVDApOwogICAg
ICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgICAgICAgICBqaXQucmV0
KCk7CkBAIC00MjM0LDYgKzQ0NzMsMTAgQEAgdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQog
ICAgIFJVTih0ZXN0QWRkSW1tc0RvdWJsZShuZWdhdGl2ZVplcm8oKSwgbmVnYXRpdmVaZXJvKCkp
KTsKIAogICAgIFJVTih0ZXN0TXVsQXJnKDUpKTsKKyAgICBSVU4odGVzdE11bEFkZEFyZyg1KSk7
CisgICAgUlVOKHRlc3RNdWxBZGRBcmcoODUpKTsKKyAgICBSVU4odGVzdE11bEFyZ1N0b3JlKDUp
KTsKKyAgICBSVU4odGVzdE11bEFyZ1N0b3JlKDg1KSk7CiAgICAgUlVOKHRlc3RNdWxBcmdzKDEs
IDEpKTsKICAgICBSVU4odGVzdE11bEFyZ3MoMSwgMikpOwogICAgIFJVTih0ZXN0TXVsQXJncygz
LCAzKSk7CkBAIC00Njc3LDExICs0OTIwLDE0IEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRl
cikKICAgICBSVU4odGVzdENoZWNrTGVzc1RoYW4oKSk7CiAgICAgUlVOKHRlc3RDaGVja01lZ2FD
b21ibygpKTsKICAgICBSVU4odGVzdENoZWNrQWRkSW1tKCkpOworICAgIFJVTih0ZXN0Q2hlY2tB
ZGRJbW1Db21tdXRlKCkpOworICAgIFJVTih0ZXN0Q2hlY2tBZGRJbW1Tb21lUmVnaXN0ZXIoKSk7
CiAgICAgUlVOKHRlc3RDaGVja0FkZCgpKTsKICAgICBSVU4odGVzdENoZWNrQWRkNjQoKSk7CiAg
ICAgUlVOKHRlc3RDaGVja0FkZEZvbGQoMTAwLCAyMDApKTsKICAgICBSVU4odGVzdENoZWNrQWRk
Rm9sZEZhaWwoMjE0NzQ4MzY0NywgMTAwKSk7CiAgICAgUlVOKHRlc3RDaGVja1N1YkltbSgpKTsK
KyAgICBSVU4odGVzdENoZWNrU3ViQmFkSW1tKCkpOwogICAgIFJVTih0ZXN0Q2hlY2tTdWIoKSk7
CiAgICAgUlVOKHRlc3RDaGVja1N1YjY0KCkpOwogICAgIFJVTih0ZXN0Q2hlY2tTdWJGb2xkKDEw
MCwgMjAwKSk7CkBAIC00Njg5LDYgKzQ5MzUsOCBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0
ZXIpCiAgICAgUlVOKHRlc3RDaGVja05lZygpKTsKICAgICBSVU4odGVzdENoZWNrTmVnNjQoKSk7
CiAgICAgUlVOKHRlc3RDaGVja011bCgpKTsKKyAgICBSVU4odGVzdENoZWNrTXVsTWVtb3J5KCkp
OworICAgIFJVTih0ZXN0Q2hlY2tNdWwyKCkpOwogICAgIFJVTih0ZXN0Q2hlY2tNdWw2NCgpKTsK
ICAgICBSVU4odGVzdENoZWNrTXVsRm9sZCgxMDAsIDIwMCkpOwogICAgIFJVTih0ZXN0Q2hlY2tN
dWxGb2xkRmFpbCgyMTQ3NDgzNjQ3LCAxMDApKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAkocmV2aXNpb24gMTkyNTA3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTQ2LDM4ICsxNDYsMjIgQEAgdm9pZCBhbGxvY2F0ZVN0YWNrKENvZGUm
IGNvZGUpCiAgICAgICAgIGF1dG8gaW50ZXJmZXJlID0gWyZdIChJbnN0JiBpbnN0KSB7CiAgICAg
ICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJJbnRlcmZlcmlu
ZzogIiwgcG9pbnRlckxpc3REdW1wKGxvY2FsQ2FsYy5saXZlKCkpLCAiXG4iKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgLy8gRm9ybSBhIGNsaXF1ZSBvZiBzdGFjayBzbG90cyB0aGF0IGlu
dGVyZmVyZS4gRmlyc3QgZmluZCB0aGUgbGlzdCBvZiBzdGFjayBzbG90cwotICAgICAgICAgICAg
Ly8gdGhhdCBhcmUgbGl2ZSByaWdodCBub3cuCi0gICAgICAgICAgICBzbG90cy5yZXNpemUoMCk7
Ci0gICAgICAgICAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IGxvY2FsQ2FsYy5saXZlKCkpIHsK
LSAgICAgICAgICAgICAgICBpZiAoc2xvdC0+a2luZCgpID09IFN0YWNrU2xvdEtpbmQ6OkFub255
bW91cykKLSAgICAgICAgICAgICAgICAgICAgc2xvdHMuYXBwZW5kKHNsb3QpOwotICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICAvLyBXZSBtdXN0bid0IG1hbmRhdGUgdGhhdCB0aGUgaW5wdXQg
Y29kZSBpcyBvcHRpbWFsLiBUaGVyZWZvcmUsIGl0IG1heSBoYXZlIGRlYWQgc3RvcmVzCi0gICAg
ICAgICAgICAvLyB0byB0aGUgc3RhY2suIFdlIG5lZWQgdG8gdHJlYXQgdGhlc2UgYXMgaW50ZXJm
ZXJpbmcuCiAgICAgICAgICAgICBpbnN0LmZvckVhY2hBcmcoCiAgICAgICAgICAgICAgICAgWyZd
IChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSkgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoQXJnOjppc0RlZihyb2xlKSAmJiBhcmcuaXNTdGFjaygpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBTdGFja1Nsb3QqIHNsb3QgPSBhcmcuc3RhY2tTbG90KCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoc2xvdC0+a2luZCgpID09IFN0YWNrU2xvdEtpbmQ6OkFub255
bW91cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICFsb2NhbENhbGMubGl2ZSgpLmNv
bnRhaW5zKHNsb3QpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3RzLmFwcGVuZChz
bG90KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFBcmc6OmlzRGVmKHJvbGUpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZy5p
c1N0YWNrKCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgICAgIFN0YWNrU2xvdCogc2xvdCA9IGFyZy5zdGFja1Nsb3QoKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHNsb3QtPmtpbmQoKSAhPSBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXMpCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAgICAgICAgZm9yIChT
dGFja1Nsb3QqIG90aGVyU2xvdCA6IGxvY2FsQ2FsYy5saXZlKCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGludGVyZmVyZW5jZVtzbG90XS5hZGQob3RoZXJTbG90KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGludGVyZmVyZW5jZVtvdGhlclNsb3RdLmFkZChzbG90KTsKICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgU2xvdHM6ICIs
IHBvaW50ZXJMaXN0RHVtcChzbG90cyksICJcbiIpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNsb3RzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgU3RhY2tT
bG90KiBvdXRlciA9IHNsb3RzW2ldOwotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9
IGkgKyAxOyBqIDwgc2xvdHMuc2l6ZSgpOyArK2opIHsKLSAgICAgICAgICAgICAgICAgICAgU3Rh
Y2tTbG90KiBpbm5lciA9IHNsb3RzW2pdOwotCi0gICAgICAgICAgICAgICAgICAgIGludGVyZmVy
ZW5jZVtpbm5lcl0uYWRkKG91dGVyKTsKLSAgICAgICAgICAgICAgICAgICAgaW50ZXJmZXJlbmNl
W291dGVyXS5hZGQoaW5uZXIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KICAg
ICAgICAgfTsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IGJsb2NrLT5zaXpl
KCk7IGluc3RJbmRleC0tOykgewpAQCAtMTg1LDcgKzE2OSw3IEBAIHZvaWQgYWxsb2NhdGVTdGFj
ayhDb2RlJiBjb2RlKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIkFuYWx5emluZzogIiwgYmxv
Y2stPmF0KGluc3RJbmRleCksICJcbiIpOwogICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2Nr
LT5hdChpbnN0SW5kZXgpOwogICAgICAgICAgICAgaW50ZXJmZXJlKGluc3QpOwotICAgICAgICAg
ICAgbG9jYWxDYWxjLmV4ZWN1dGUoaW5zdCk7CisgICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0
ZShpbnN0SW5kZXgpOwogICAgICAgICB9CiAgICAgICAgIEluc3Qgbm9wOwogICAgICAgICBpbnRl
cmZlcmUobm9wKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAJ
KHJldmlzaW9uIDE5MjUwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJn
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgxLDYgKzE4MSw5IEBAIHZvaWQgcHJpbnRJbnRlcm5h
bChQcmludFN0cmVhbSYgb3V0LCBBcmcKICAgICBjYXNlIEFyZzo6VXNlQWRkcjoKICAgICAgICAg
b3V0LnByaW50KCJVc2VBZGRyIik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFyZzo6TGF0
ZVVzZToKKyAgICAgICAgb3V0LnByaW50KCJMYXRlVXNlIik7CisgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCShyZXZpc2lvbiAxOTI1MDcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Myw2ICs4Mywx
MCBAQCBwdWJsaWM6CiAgICAgICAgIC8vIGFsd2F5cyBlc2NhcGluZywgYW5kIFN0YWNrIGlzIHBy
ZXN1bWVkIHRvIGJlIGFsd2F5cyBlc2NhcGluZyBpZiBpdCdzIExvY2tlZC4KICAgICAgICAgVXNl
LAogCisgICAgICAgIC8vIExhdGVVc2UgbWVhbnMgdGhhdCB0aGUgSW5zdCB3aWxsIHJlYWQgZnJv
bSB0aGlzIHZhbHVlIGFmdGVyIGRvaW5nIGl0cyBEZWYncy4gTm90ZSB0aGF0IExhdGVVc2UKKyAg
ICAgICAgLy8gb24gYW4gQWRkciBvciBJbmRleCBzdGlsbCBtZWFucyBVc2Ugb24gdGhlIGludGVy
bmFsIHRlbXBvcmFyaWVzLgorICAgICAgICBMYXRlVXNlLAorCiAgICAgICAgIC8vIERlZiBtZWFu
cyB0aGF0IHRoZSBJbnN0IHdpbGwgd3JpdGUgdG8gdGhpcyB2YWx1ZSBhZnRlciBkb2luZyBldmVy
eXRoaW5nIGVsc2UuCiAgICAgICAgIC8vCiAgICAgICAgIC8vIEZvciBUbXA6IFRoZSBJbnN0IHdp
bGwgd3JpdGUgdG8gdGhpcyBUbXAuCkBAIC0xMjMsMTIgKzEyNywxMyBAQCBwdWJsaWM6CiAgICAg
fTsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgUm9sZSBpbXBsaWVzIHRoYXQgdGhlIElu
c3Qgd2lsbCBVc2UgdGhlIEFyZy4gSXQncyBkZWxpYmVyYXRlbHkgZmFsc2UgZm9yCi0gICAgLy8g
VXNlQWRkciwgc2luY2UgaXNVc2UoKSBmb3IgYW4gQXJnOjphZGRyIG1lYW5zIHRoYXQgd2UgYXJl
IGxvYWRpbmcgZnJvbSB0aGUgYWRkcmVzcy4KLSAgICBzdGF0aWMgYm9vbCBpc1VzZShSb2xlIHJv
bGUpCisgICAgLy8gVXNlQWRkciwgc2luY2UgaXNBbnlVc2UoKSBmb3IgYW4gQXJnOjphZGRyIG1l
YW5zIHRoYXQgd2UgYXJlIGxvYWRpbmcgZnJvbSB0aGUgYWRkcmVzcy4KKyAgICBzdGF0aWMgYm9v
bCBpc0FueVVzZShSb2xlIHJvbGUpCiAgICAgewogICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKICAg
ICAgICAgY2FzZSBVc2U6CiAgICAgICAgIGNhc2UgVXNlRGVmOgorICAgICAgICBjYXNlIExhdGVV
c2U6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgY2FzZSBEZWY6CiAgICAgICAg
IGNhc2UgVXNlQWRkcjoKQEAgLTEzNiwxMiArMTQxLDMzIEBAIHB1YmxpYzoKICAgICAgICAgfQog
ICAgIH0KIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgUm9sZSBpbXBsaWVzIHRoYXQgdGhl
IEluc3Qgd2lsbCBVc2UgdGhlIEFyZyBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZS4KKyAgICBz
dGF0aWMgYm9vbCBpc0Vhcmx5VXNlKFJvbGUgcm9sZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
cm9sZSkgeworICAgICAgICBjYXNlIFVzZToKKyAgICAgICAgY2FzZSBVc2VEZWY6CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBEZWY6CisgICAgICAgIGNhc2UgVXNlQWRk
cjoKKyAgICAgICAgY2FzZSBMYXRlVXNlOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBSb2xlIGltcGxpZXMg
dGhhdCB0aGUgSW5zdCB3aWxsIFVzZSB0aGUgQXJnIGFmdGVyIGRvaW5nIGV2ZXJ5dGhpbmcgZWxz
ZS4KKyAgICBzdGF0aWMgYm9vbCBpc0xhdGVVc2UoUm9sZSByb2xlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHJvbGUgPT0gTGF0ZVVzZTsKKyAgICB9CisKICAgICAvLyBSZXR1cm5zIHRydWUgaWYg
dGhlIFJvbGUgaW1wbGllcyB0aGF0IHRoZSBJbnN0IHdpbGwgRGVmIHRoZSBBcmcuCiAgICAgc3Rh
dGljIGJvb2wgaXNEZWYoUm9sZSByb2xlKQogICAgIHsKICAgICAgICAgc3dpdGNoIChyb2xlKSB7
CiAgICAgICAgIGNhc2UgVXNlOgogICAgICAgICBjYXNlIFVzZUFkZHI6CisgICAgICAgIGNhc2Ug
TGF0ZVVzZToKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgY2FzZSBEZWY6CiAg
ICAgICAgIGNhc2UgVXNlRGVmOgpAQCAtNjU0LDcgKzY4MCw3IEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIHN3aXRjaCAobV9raW5kKSB7CiAgICAgICAgIGNhc2UgVG1wOgotICAgICAgICAgICAg
QVNTRVJUKGlzVXNlKGFyZ1JvbGUpIHx8IGlzRGVmKGFyZ1JvbGUpKTsKKyAgICAgICAgICAgIEFT
U0VSVChpc0FueVVzZShhcmdSb2xlKSB8fCBpc0RlZihhcmdSb2xlKSk7CiAgICAgICAgICAgICBm
dW5jdG9yKG1fYmFzZSwgYXJnUm9sZSwgYXJnVHlwZSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBBZGRyOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJH
ZW5lcmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJHZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDE5MjUwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSwxMCBA
QCB2b2lkIGdlbmVyYXRlKENvZGUmIGNvZGUsIENDYWxsSGVscGVycyYgCiAgICAgLy8gQWZ0ZXIg
dGhpcyBwaGFzZSwgZXZlcnkgVG1wIGhhcyBhIHJlZy4KICAgICAvLwogICAgIC8vIEZvciBkZWJ1
Z2dpbmcsIHlvdSBjYW4gdXNlIHNwaWxsRXZlcnl0aGluZygpIHRvIHB1dCBldmVyeXRoaW5nIHRv
IHRoZSBzdGFjayBiZXR3ZWVuIGVhY2ggSW5zdC4KLSAgICBpdGVyYXRlZFJlZ2lzdGVyQ29hbGVz
Y2luZyhjb2RlKTsKKyAgICBpZiAoZmFsc2UpCisgICAgICAgIHNwaWxsRXZlcnl0aGluZyhjb2Rl
KTsKKyAgICBlbHNlCisgICAgICAgIGl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nKGNvZGUpOwog
CiAgICAgLy8gUHJpb3IgdG8gdGhpcyBwb2ludCB0aGUgcHJvbG9ndWUgYW5kIGVwaWxvZ3VlIGlz
IGltcGxpY2l0LiBUaGlzIG1ha2VzIGl0IGV4cGxpY2l0LiBJdCBhbHNvCiAgICAgLy8gZG9lcyB0
aGluZ3MgbGlrZSBpZGVudGlmeSB3aGljaCBjYWxsZWUtc2F2ZXMgd2UncmUgdXNpbmcgYW5kIHNh
dmVzIHRoZW0uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckl0ZXJhdGVk
UmVnaXN0ZXJDb2FsZXNjaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcAkocmV2aXNpb24gMTky
NTA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVy
Q29hbGVzY2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEyICszNCwxNCBAQAogI2luY2x1
ZGUgIkFpckxpdmVuZXNzLmgiCiAjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgogI2luY2x1ZGUg
IkFpclJlZ2lzdGVyUHJpb3JpdHkuaCIKKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KICNpbmNs
dWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
IG5hbWVzcGFjZSBBaXIgewogCiBzdGF0aWMgYm9vbCBkZWJ1ZyA9IGZhbHNlOwogc3RhdGljIGJv
b2wgdHJhY2VEZWJ1ZyA9IGZhbHNlOworc3RhdGljIGJvb2wgcmVwb3J0U3RhdHMgPSBmYWxzZTsK
IAogdGVtcGxhdGU8QXJnOjpUeXBlIHR5cGU+CiBzdHJ1Y3QgTW92ZUluc3RIZWxwZXI7CkBAIC0x
NjgsNyArMTcwLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzRGVmKHJv
bGUpKQogICAgICAgICAgICAgICAgICAgICBkZWZUbXAgPSBhcmdUbXA7CiAgICAgICAgICAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChBcmc6OmlzVXNlKHJvbGUpKTsK
KyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKEFyZzo6aXNFYXJseVVzZShyb2xlKSk7CiAgICAg
ICAgICAgICAgICAgICAgIHVzZVRtcCA9IGFyZ1RtcDsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9KTsKQEAgLTIwNCw2ICsyMDYsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1ha2VXb3Jr
TGlzdCgpOwogCiAgICAgICAgIGlmIChkZWJ1ZykgeworICAgICAgICAgICAgZGF0YUxvZygiSW50
ZXJmZXJlbmNlOiAiLCBsaXN0RHVtcChtX2ludGVyZmVyZW5jZUVkZ2VzKSwgIlxuIik7CiAgICAg
ICAgICAgICBkdW1wSW50ZXJmZXJlbmNlR3JhcGhJbkRvdChXVEY6OmRhdGFGaWxlKCkpOwogICAg
ICAgICAgICAgZGF0YUxvZygiSW5pdGlhbCB3b3JrIGxpc3RcbiIpOwogICAgICAgICAgICAgZHVt
cFdvcmtMaXN0cyhXVEY6OmRhdGFGaWxlKCkpOwpAQCAtNzQwLDYgKzc0MywxMSBAQCBwcml2YXRl
OgogICAgICAgICAgICAgcmV0dXJuIFdURjo6SW50SGFzaDx1aW50NjRfdD46Omhhc2gobV92YWx1
ZSk7CiAgICAgICAgIH0KIAorICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKKyAgICAgICAgeworICAgICAgICAgICAgb3V0LnByaW50KGZpcnN0KCksICI8PT4iLCBzZWNv
bmQoKSk7CisgICAgICAgIH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIHVpbnQ2NF90IG1fdmFs
dWUgeyAwIH07CiAgICAgfTsKQEAgLTk0OSw3ICs5NTcsNyBAQCBzdGF0aWMgdm9pZCBhZGRTcGls
bEFuZEZpbGxUb1Byb2dyYW0oQ29kCiAgICAgICAgICAgICAgICAgQXJnIGFyZyA9IEFyZzo6c3Rh
Y2soc3RhY2tTbG90RW50cnktPnZhbHVlKTsKICAgICAgICAgICAgICAgICBPcGNvZGUgbW92ZSA9
IHR5cGUgPT0gQXJnOjpHUCA/IE1vdmUgOiBNb3ZlRG91YmxlOwogCi0gICAgICAgICAgICAgICAg
aWYgKEFyZzo6aXNVc2Uocm9sZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueVVz
ZShyb2xlKSkgewogICAgICAgICAgICAgICAgICAgICBUbXAgbmV3VG1wID0gY29kZS5uZXdUbXAo
dHlwZSk7CiAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoaW5zdEluZGV4
LCBtb3ZlLCBpbnN0Lm9yaWdpbiwgYXJnLCBuZXdUbXApOwogICAgICAgICAgICAgICAgICAgICB0
bXAgPSBuZXdUbXA7CkBAIC05NjYsOSArOTc0LDEwIEBAIHN0YXRpYyB2b2lkIGFkZFNwaWxsQW5k
RmlsbFRvUHJvZ3JhbShDb2QKIH0KIAogdGVtcGxhdGU8QXJnOjpUeXBlIHR5cGU+Ci1zdGF0aWMg
dm9pZCBpdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ09uVHlwZShDb2RlJiBjb2RlLCBIYXNoU2V0
PFRtcD4mIHVuc3BpbGxhYmxlVG1wcykKK3N0YXRpYyB2b2lkIGl0ZXJhdGVkUmVnaXN0ZXJDb2Fs
ZXNjaW5nT25UeXBlKENvZGUmIGNvZGUsIEhhc2hTZXQ8VG1wPiYgdW5zcGlsbGFibGVUbXBzLCB1
bnNpZ25lZCYgbnVtSXRlcmF0aW9ucykKIHsKICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBu
dW1JdGVyYXRpb25zKys7CiAgICAgICAgIEl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2Nh
dG9yPHR5cGU+IGFsbG9jYXRvcihjb2RlLCB1bnNwaWxsYWJsZVRtcHMpOwogICAgICAgICBMaXZl
bmVzczxUbXA+IGxpdmVuZXNzKGNvZGUpOwogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2Nr
IDogY29kZSkgewpAQCAtOTc2LDcgKzk4NSw3IEBAIHN0YXRpYyB2b2lkIGl0ZXJhdGVkUmVnaXN0
ZXJDb2FsZXNjaW5nT24KICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gYmxv
Y2stPnNpemUoKTsgaW5zdEluZGV4LS07KSB7CiAgICAgICAgICAgICAgICAgSW5zdCYgaW5zdCA9
IGJsb2NrLT5hdChpbnN0SW5kZXgpOwogICAgICAgICAgICAgICAgIGFsbG9jYXRvci5idWlsZChp
bnN0LCBsb2NhbENhbGMpOwotICAgICAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGluc3Qp
OworICAgICAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGluc3RJbmRleCk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KIApAQCAtOTk1LDEyICsxMDA0LDE0IEBAIHZvaWQgaXRlcmF0ZWRS
ZWdpc3RlckNvYWxlc2NpbmcoQ29kZSYgY28KIAogICAgIGJvb2wgZ3BJc0NvbG9yZWQgPSBmYWxz
ZTsKICAgICBib29sIGZwSXNDb2xvcmVkID0gZmFsc2U7CisgICAgdW5zaWduZWQgbnVtSXRlcmF0
aW9ucyA9IDA7CiAKICAgICBIYXNoU2V0PFRtcD4gdW5zcGlsbGFibGVHUHM7CiAgICAgSGFzaFNl
dDxUbXA+IHVuc3BpbGxhYmxlRlBzOwogCiAgICAgLy8gRmlyc3Qgd2UgcnVuIGJvdGggYWxsb2Nh
dG9yIHRvZ2V0aGVyIGFzIGxvbmcgYXMgdGhleSBib3RoIHNwaWxsLgogICAgIHdoaWxlICghZ3BJ
c0NvbG9yZWQgJiYgIWZwSXNDb2xvcmVkKSB7CisgICAgICAgIG51bUl0ZXJhdGlvbnMrKzsKICAg
ICAgICAgSXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdBbGxvY2F0b3I8QXJnOjpHUD4gZ3BBbGxv
Y2F0b3IoY29kZSwgdW5zcGlsbGFibGVHUHMpOwogICAgICAgICBJdGVyYXRlZFJlZ2lzdGVyQ29h
bGVzY2luZ0FsbG9jYXRvcjxBcmc6OkZQPiBmcEFsbG9jYXRvcihjb2RlLCB1bnNwaWxsYWJsZUZQ
cyk7CiAKQEAgLTEwMTUsNyArMTAyNiw3IEBAIHZvaWQgaXRlcmF0ZWRSZWdpc3RlckNvYWxlc2Np
bmcoQ29kZSYgY28KICAgICAgICAgICAgICAgICBncEFsbG9jYXRvci5idWlsZChpbnN0LCBsb2Nh
bENhbGMpOwogICAgICAgICAgICAgICAgIGZwQWxsb2NhdG9yLmJ1aWxkKGluc3QsIGxvY2FsQ2Fs
Yyk7CiAKLSAgICAgICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZShpbnN0KTsKKyAgICAgICAg
ICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZShpbnN0SW5kZXgpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAKQEAgLTEwMzYsOSArMTA0NywxMiBAQCB2b2lkIGl0ZXJhdGVkUmVnaXN0ZXJDb2Fs
ZXNjaW5nKENvZGUmIGNvCiAgICAgfTsKIAogICAgIGlmICghZ3BJc0NvbG9yZWQpCi0gICAgICAg
IGl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nT25UeXBlPEFyZzo6R1A+KGNvZGUsIHVuc3BpbGxh
YmxlR1BzKTsKKyAgICAgICAgaXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdPblR5cGU8QXJnOjpH
UD4oY29kZSwgdW5zcGlsbGFibGVHUHMsIG51bUl0ZXJhdGlvbnMpOwogICAgIGlmICghZnBJc0Nv
bG9yZWQpCi0gICAgICAgIGl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nT25UeXBlPEFyZzo6RlA+
KGNvZGUsIHVuc3BpbGxhYmxlRlBzKTsKKyAgICAgICAgaXRlcmF0ZWRSZWdpc3RlckNvYWxlc2Np
bmdPblR5cGU8QXJnOjpGUD4oY29kZSwgdW5zcGlsbGFibGVGUHMsIG51bUl0ZXJhdGlvbnMpOwor
CisgICAgaWYgKHJlcG9ydFN0YXRzKQorICAgICAgICBkYXRhTG9nKCJOdW0gaXRlcmF0aW9ucyA9
ICIsIG51bUl0ZXJhdGlvbnMsICJcbiIpOwogfQogCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
Mzo6QWlyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5o
CShyZXZpc2lvbiAxOTI1MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxp
dmVuZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDE2IEBAIHB1YmxpYzoKICAgICAg
ICAgbV9saXZlQXRIZWFkLnJlc2l6ZShjb2RlLnNpemUoKSk7CiAgICAgICAgIG1fbGl2ZUF0VGFp
bC5yZXNpemUoY29kZS5zaXplKCkpOwogCisgICAgICAgIC8vIFRoZSBsaXZlQXRUYWlsIG9mIGVh
Y2ggYmxvY2sgYXV0b21hdGljYWxseSBjb250YWlucyB0aGUgTGF0ZVVzZSdzIG9mIHRoZSB0ZXJt
aW5hbC4KKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAg
ICAgIEhhc2hTZXQ8VGhpbmc+JiBsaXZlID0gbV9saXZlQXRUYWlsW2Jsb2NrXTsKKyAgICAgICAg
ICAgIGJsb2NrLT5sYXN0KCkuZm9yRWFjaDxUaGluZz4oCisgICAgICAgICAgICAgICAgWyZdIChU
aGluZyYgdGhpbmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKEFyZzo6aXNMYXRlVXNlKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAg
bGl2ZS5hZGQodGhpbmcpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisKICAgICAg
ICAgSW5kZXhTZXQ8QmFzaWNCbG9jaz4gc2VlbjsKIAogICAgICAgICBib29sIGNoYW5nZWQgPSB0
cnVlOwpAQCAtNjEsNyArNzEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgICAgIExvY2FsQ2FsYyBsb2NhbENhbGMoKnRoaXMsIGJsb2NrKTsK
ICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBp
bnN0SW5kZXgtLTspCi0gICAgICAgICAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGJsb2Nr
LT5hdChpbnN0SW5kZXgpKTsKKyAgICAgICAgICAgICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUo
aW5zdEluZGV4KTsKICAgICAgICAgICAgICAgICBib29sIGZpcnN0VGltZSA9IHNlZW4uYWRkKGJs
b2NrKTsKICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0VGltZSAmJiBsb2NhbENhbGMubGl2ZSgp
ID09IG1fbGl2ZUF0SGVhZFtibG9ja10pCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpA
QCAtOTAsMTQgKzEwMCwxNyBAQCBwdWJsaWM6CiAgICAgcHVibGljOgogICAgICAgICBMb2NhbENh
bGMoTGl2ZW5lc3MmIGxpdmVuZXNzLCBCYXNpY0Jsb2NrKiBibG9jaykKICAgICAgICAgICAgIDog
bV9saXZlKGxpdmVuZXNzLmxpdmVBdFRhaWwoYmxvY2spKQorICAgICAgICAgICAgLCBtX2Jsb2Nr
KGJsb2NrKQogICAgICAgICB7CiAgICAgICAgIH0KIAogICAgICAgICBjb25zdCBIYXNoU2V0PFRo
aW5nPiYgbGl2ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGl2ZTsgfQogICAgICAgICBIYXNoU2V0PFRo
aW5nPiYmIHRha2VMaXZlKCkgeyByZXR1cm4gV1RGOjptb3ZlKG1fbGl2ZSk7IH0KIAotICAgICAg
ICB2b2lkIGV4ZWN1dGUoSW5zdCYgaW5zdCkKKyAgICAgICAgdm9pZCBleGVjdXRlKHVuc2lnbmVk
IGluc3RJbmRleCkKICAgICAgICAgeworICAgICAgICAgICAgSW5zdCYgaW5zdCA9IG1fYmxvY2st
PmF0KGluc3RJbmRleCk7CisgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIEZpcnN0IGhhbmRs
ZSBkZWYncy4KICAgICAgICAgICAgIGluc3QuZm9yRWFjaDxUaGluZz4oCiAgICAgICAgICAgICAg
ICAgW3RoaXNdIChUaGluZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlKSB7CkBAIC0x
MDcsMjAgKzEyMCwzNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2xpdmUu
cmVtb3ZlKGFyZyk7CiAgICAgICAgICAgICAgICAgfSk7CiAKLSAgICAgICAgICAgIC8vIEZpbmFs
bHkgaGFuZGxlIHVzZSdzLgorICAgICAgICAgICAgLy8gVGhlbiBoYW5kbGUgdXNlJ3MuCiAgICAg
ICAgICAgICBpbnN0LmZvckVhY2g8VGhpbmc+KAogICAgICAgICAgICAgICAgIFt0aGlzXSAoVGhp
bmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSkgewogICAgICAgICAgICAgICAgICAg
ICBpZiAoIWlzQWxpdmUoYXJnKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNVc2Uocm9sZSkpCisgICAgICAgICAgICAgICAg
ICAgIGlmIChBcmc6OmlzRWFybHlVc2Uocm9sZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBt
X2xpdmUuYWRkKGFyZyk7CiAgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIC8vIEFu
ZCBmaW5hbGx5LCBoYW5kbGUgdGhlIGxhdGUgdXNlJ3Mgb2YgdGhlIHByZXZpb3VzIGluc3RydWN0
aW9uLgorICAgICAgICAgICAgaWYgKGluc3RJbmRleCkgeworICAgICAgICAgICAgICAgIEluc3Qm
IHByZXZJbnN0ID0gbV9ibG9jay0+YXQoaW5zdEluZGV4IC0gMSk7CisKKyAgICAgICAgICAgICAg
ICBwcmV2SW5zdC5mb3JFYWNoPFRoaW5nPigKKyAgICAgICAgICAgICAgICAgICAgW3RoaXNdIChU
aGluZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIUFyZzo6aXNMYXRlVXNlKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0FsaXZlKGFyZykp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9saXZlLmFkZChhcmcpOworICAgICAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgSGFzaFNldDxUaGluZz4gbV9saXZlOworICAgICAgICBCYXNpY0Jsb2NrKiBtX2Js
b2NrOwogICAgIH07Ci0gICAgCisKIHByaXZhdGU6CiAgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywg
SGFzaFNldDxUaGluZz4+IG1fbGl2ZUF0SGVhZDsKICAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBI
YXNoU2V0PFRoaW5nPj4gbV9saXZlQXRUYWlsOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCShyZXZpc2lvbiAxOTI1MDcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCSh3b3JraW5nIGNvcHkp
CkBAIC0zMjAsMTUgKzMyMCw5IEBAIEJyYW5jaE11bDMyIFU6RywgVTpHLCBVRDpHIC9icmFuY2gK
ICAgICBSZXNDb25kLCBUbXAsIFRtcAogICAgIFJlc0NvbmQsIEFkZHIsIFRtcAogCi1CcmFuY2hN
dWwzMiBVOkcsIFU6RywgVTpHLCBEOkcgL2JyYW5jaAotICAgIFJlc0NvbmQsIFRtcCwgVG1wLCBU
bXAKLQogQnJhbmNoTXVsNjQgVTpHLCBVOkcsIFVEOkcgL2JyYW5jaAogICAgIFJlc0NvbmQsIFRt
cCwgVG1wCiAKLUJyYW5jaE11bDY0IFU6RywgVTpHLCBVOkcsIEQ6RyAvYnJhbmNoCi0gICAgUmVz
Q29uZCwgVG1wLCBUbXAsIFRtcAotCiBCcmFuY2hTdWIzMiBVOkcsIFU6RywgVUQ6RyAvYnJhbmNo
CiAgICAgUmVzQ29uZCwgVG1wLCBUbXAKICAgICBSZXNDb25kLCBJbW0sIFRtcApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZXBvcnRVc2VkUmVnaXN0ZXJzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlcG9ydFVzZWRSZWdp
c3RlcnMuY3BwCShyZXZpc2lvbiAxOTI1MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpclJlcG9ydFVzZWRSZWdpc3RlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1
Niw3IEBAIHZvaWQgcmVwb3J0VXNlZFJlZ2lzdGVycyhDb2RlJiBjb2RlKQogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICBpbnN0LnJlcG9ydFVzZWRSZWdpc3RlcnMocmVnaXN0ZXJT
ZXQpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUoaW5zdCk7
CisgICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZShpbnN0SW5kZXgpOwogICAgICAgICB9CiAg
ICAgfQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5
dGhpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
U3BpbGxFdmVyeXRoaW5nLmNwcAkocmV2aXNpb24gMTkyNTA3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
OSw3ICs2OSw3IEBAIHZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUmIGNvZGUpCiAgICAgICAgIGZv
ciAodW5zaWduZWQgaW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5zdEluZGV4LS07KSB7CiAg
ICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CiAgICAgICAgICAg
ICBzZXRVc2VkUmVnaXN0ZXJzKGluc3RJbmRleCArIDEsIGluc3QpOwotICAgICAgICAgICAgbG9j
YWxDYWxjLmV4ZWN1dGUoaW5zdCk7CisgICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZShpbnN0
SW5kZXgpOwogICAgICAgICB9CiAKICAgICAgICAgSW5zdCBub3A7CkBAIC0xNDAsNiArMTQwLDcg
QEAgdm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29kZSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAg
ICBjYXNlIEFyZzo6VXNlRGVmOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6TGF0ZVVz
ZToKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IHJlZ3NJblByaW9yaXR5
T3JkZXIodHlwZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNldEJlZm9y
ZS5nZXQocmVnKSAmJiAhc2V0QWZ0ZXIuZ2V0KHJlZykpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2V0QWZ0ZXIuc2V0KHJlZyk7CkBAIC0xNjAsNyArMTYxLDcgQEAgdm9pZCBz
cGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29kZSkKIAogICAgICAgICAgICAgICAgICAgICBPcGNvZGUg
bW92ZSA9IHR5cGUgPT0gQXJnOjpHUCA/IE1vdmUgOiBNb3ZlRG91YmxlOwogCi0gICAgICAgICAg
ICAgICAgICAgIGlmIChBcmc6OmlzVXNlKHJvbGUpKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChBcmc6OmlzQW55VXNlKHJvbGUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRp
b25TZXQuaW5zZXJ0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RJbmRleCwgbW92
ZSwgaW5zdC5vcmlnaW4sIGFyZywgdG1wKTsKICAgICAgICAgICAgICAgICAgICAgfQpJbmRleDog
U291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDE5MjUwNykKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTYgQEAKKzIwMTUtMTEtMTYgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxl
LmNvbT4KKworICAgICAgICBDaGVja0FkZC9NdWwgc2hvdWxkIGhhdmUgY29tbXV0YXRpdml0eSBv
cHRpbWl6YXRpb25zIGluIEIzLT5BaXIgbG93ZXJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTIxNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIERpc2FibGUgbXkgZmFpbGVkIGF0dGVtcHRzIGF0IHBl
cmZlY3QgZm9yd2FyZGluZywgc2luY2UgdGhleSB3ZXJlIGluY29ycmVjdCwgYW5kIGNhdXNlZCBj
b21waWxlCisgICAgICAgIGVycm9ycyBpZiB5b3UgdHJpZWQgdG8gcGFzcyBhbiBhcmd1bWVudCB0
aGF0IGJvdW5kIHRvIGx2YWx1ZS4gVGhpcyBzaG91bGRuJ3QgYWZmZWN0IHBlcmZvcm1hbmNlIG9m
CisgICAgICAgIGFueXRoaW5nIHdlIGNhcmUgYWJvdXQsIGFuZCBwZXJmb3JtYW5jZSB0ZXN0cyBz
ZWVtIHRvIGNvbmZpcm0gdGhhdCBpdCdzIGFsbCBnb29kLgorCisgICAgICAgICogd3RmL1Njb3Bl
ZExhbWJkYS5oOgorCiAyMDE1LTExLTExICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBs
ZS5jb20+CiAKICAgICAgICAgRW5hYmxlIGNyb3NzLXBsYXRmb3JtIGNvbnRleHQgbWVudXMgYnkg
ZGVmYXVsdApJbmRleDogU291cmNlL1dURi93dGYvU2NvcGVkTGFtYmRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvU2NvcGVkTGFtYmRhLmgJKHJldmlzaW9uIDE5MjUwNykKKysrIFNv
dXJjZS9XVEYvd3RmL1Njb3BlZExhbWJkYS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCwxOSArNDQs
MjAgQEAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlPiBjbGFzcyBTYwogdGVtcGxhdGU8
dHlwZW5hbWUgUmVzdWx0VHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4KIGNsYXNzIFNj
b3BlZExhbWJkYTxSZXN1bHRUeXBlIChBcmd1bWVudFR5cGVzLi4uKT4gewogcHVibGljOgotICAg
IFNjb3BlZExhbWJkYShSZXN1bHRUeXBlICgqaW1wbCkodm9pZCogYXJnLCBBcmd1bWVudFR5cGVz
JiYuLi4pID0gbnVsbHB0ciwgdm9pZCogYXJnID0gbnVsbHB0cikKKyAgICBTY29wZWRMYW1iZGEo
UmVzdWx0VHlwZSAoKmltcGwpKHZvaWQqIGFyZywgQXJndW1lbnRUeXBlcy4uLikgPSBudWxscHRy
LCB2b2lkKiBhcmcgPSBudWxscHRyKQogICAgICAgICA6IG1faW1wbChpbXBsKQogICAgICAgICAs
IG1fYXJnKGFyZykKICAgICB7CiAgICAgfQotICAgIAotICAgIFJlc3VsdFR5cGUgb3BlcmF0b3Io
KShBcmd1bWVudFR5cGVzJiYuLi4gYXJndW1lbnRzKSBjb25zdAorCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUuLi4gUGFzc2VkQXJndW1lbnRUeXBlcz4KKyAgICBSZXN1bHRUeXBlIG9wZXJhdG9yKCko
UGFzc2VkQXJndW1lbnRUeXBlcyYmLi4uIGFyZ3VtZW50cykgY29uc3QKICAgICB7Ci0gICAgICAg
IHJldHVybiBtX2ltcGwobV9hcmcsIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudFR5cGVzPihhcmd1bWVu
dHMpLi4uKTsKKyAgICAgICAgcmV0dXJuIG1faW1wbChtX2FyZywgc3RkOjpmb3J3YXJkPFBhc3Nl
ZEFyZ3VtZW50VHlwZXM+KGFyZ3VtZW50cykuLi4pOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBS
ZXN1bHRUeXBlICgqbV9pbXBsKSh2b2lkKiBhcmcsIEFyZ3VtZW50VHlwZXMmJi4uLik7CisgICAg
UmVzdWx0VHlwZSAoKm1faW1wbCkodm9pZCogYXJnLCBBcmd1bWVudFR5cGVzLi4uKTsKICAgICB2
b2lkICptX2FyZzsKIH07CiAKQEAgLTcyLDEwICs3Myw5IEBAIHB1YmxpYzoKICAgICB9CiAKIHBy
aXZhdGU6Ci0gICAgc3RhdGljIFJlc3VsdFR5cGUgaW1wbEZ1bmN0aW9uKHZvaWQqIGFyZ3VtZW50
LCBBcmd1bWVudFR5cGVzJiYuLi4gYXJndW1lbnRzKQorICAgIHN0YXRpYyBSZXN1bHRUeXBlIGlt
cGxGdW5jdGlvbih2b2lkKiBhcmd1bWVudCwgQXJndW1lbnRUeXBlcy4uLiBhcmd1bWVudHMpCiAg
ICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U2NvcGVkTGFtYmRhRnVuY3Rvcio+KGFy
Z3VtZW50KS0+bV9mdW5jdG9yKAotICAgICAgICAgICAgc3RkOjpmb3J3YXJkPEFyZ3VtZW50VHlw
ZXM+KGFyZ3VtZW50cykuLi4pOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U2NvcGVkTGFt
YmRhRnVuY3Rvcio+KGFyZ3VtZW50KS0+bV9mdW5jdG9yKGFyZ3VtZW50cy4uLik7CiAgICAgfQog
CiAgICAgRnVuY3RvciBtX2Z1bmN0b3I7Cg==
</data>
<flag name="review"
          id="290685"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>