<?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>23367</bug_id>
          
          <creation_ts>2009-01-15 16:57:16 -0800</creation_ts>
          <short_desc>Increase range of values that can be represented by JSImmediate on 64-bit platforms.</short_desc>
          <delta_ts>2009-01-15 21:32:15 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>105990</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-01-15 16:57:16 -0800</bug_when>
    <thetext>Increase range of values that can be represented by JSImmediate on 64-bit platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105991</commentid>
    <comment_count>1</comment_count>
      <attachid>26776</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-01-15 16:58:13 -0800</bug_when>
    <thetext>Created attachment 26776
The patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106002</commentid>
    <comment_count>2</comment_count>
      <attachid>26776</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2009-01-15 17:35:14 -0800</bug_when>
    <thetext>Comment on attachment 26776
The patch


&gt; +    addSlowCase(emitJumpIfEitherNumber(X86::ecx));

Let&apos;s call this &quot;emitJumpIfImmediateNumber&quot;.

&gt; +                emitJumpSlowCaseIfNotImmediateIntegerNumber(X86::eax);

Let&apos;s call &quot;*IntegerNumber&quot; &quot;*Integer&quot;.


-    , numberStructure(JSNumberCell::createStructure(jsNull()))
+    , numberStructure(createNumberStructure(jsNull()))

You could just use NULL or 0xbbadbeef here in 64bit, since we shouldn&apos;t be using the JSNumberCell structure on 64bit. Not a big deal, though.

+     * C++&apos;s idea of a reinterpret_cast lacks sufficient cojones.
+     */
+    template&lt;typename TO, typename FROM&gt;
+    TO wtf_reinterpret_cast(FROM in)

Let&apos;s put this in wtf/StdLibExtras.h, in the WTF namespace. Then, we can remove the &quot;wtf_&quot; prefix. Maybe we should call this &quot;union_cast.&quot;

+    inline JSValuePtr JSImmediate::makeOutOfIntegerRange(T value)

How about calling this &quot;fromOutOfRangeInteger&quot;.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106015</commentid>
    <comment_count>3</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-01-15 21:32:15 -0800</bug_when>
    <thetext>fixed in r39958</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26776</attachid>
            <date>2009-01-15 16:58:13 -0800</date>
            <delta_ts>2009-01-15 17:35:14 -0800</delta_ts>
            <desc>The patch</desc>
            <filename>patch.NaN.101plusplus.txt</filename>
            <type>text/plain</type>
            <size>78941</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM5OTU1
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTI2IEBACisyMDA5LTAx
LTE1ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPbiB4ODYtNjQgYWxsb3cg
SlNJbW1lZGlhdGUgdG8gZW5jb2RlIDY0LWJpdCBkb3VibGUgcHJlY2lzaW9uIHZhbHVlcy4KKyAg
ICAgICAgVGhpcyBwYXRjaCBvbmx5IGFmZmVjdHMgYnVpbGRzIHRoYXQgc2V0IFVTRShBTFRFUk5B
VEVfSlNJTU1FRElBVEUpLgorICAgICAgICBVcGRhdGVzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBK
U1ZhbHVlUHRyOjogYW5kIEpTSW1tZWRpYXRlOjogbWV0aG9kcworICAgICAgICB0aGF0IG9wZXJh
dGUgb24gbmV1bWVyaWMgdmFsdWVzIHRvIGJlIGJlIGF3YXJlIG9mIHRoZSBuZXcgcmVwcmVzZW50
YXRpb24uCisgICAgICAgIFdoZW4gdGhpcyByZXByZXNlbnRhdGlvbiBpcyBpbiB1c2UsIHRoZSBj
bGFzcyBKU051bWJlckNlbGwgaXMgcmVkdW5kYW50CisgICAgICAgIGFuZCBpcyBjb21waWxlZCBv
dXQuCisKKyAgICAgICAgVGhlIGZvcm1hdCBvZiB0aGUgbmV3IGltbWVkaWF0ZSByZXByZXNlbnRh
dGlvbiBpcyBkb2N1bWVudGVkIGluIEpTSW1tZWRpYXRlLmguCisKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS5leHA6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmg6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpzdWJQdHIpOgorICAgICAgICAqIGFzc2VtYmxlci9Y
ODZBc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjopOgorICAgICAgICAo
SlNDOjpYODZBc3NlbWJsZXI6OnN1YnFfcnIpOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6
Om1vdnFfcnIpOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OnVjb21pc2RfcnIpOgorICAg
ICAgICAoSlNDOjpYODZBc3NlbWJsZXI6Olg4Nkluc3RydWN0aW9uRm9ybWF0dGVyOjp0d29CeXRl
T3A2NCk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAo
SlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX3N0cmljdGVxKToKKyAgICAgICAgKEpTQzo6SW50ZXJw
cmV0ZXI6OmN0aV9vcF9uc3RyaWN0ZXEpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAg
ICAoSlNDOjpKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVNs
b3dDYXNlcyk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRBcml0aG1l
dGljLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlRmFzdEFyaXRoX29wX2xzaGlmdCk6
CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUZhc3RBcml0aF9vcF9yc2hpZnQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmNvbXBpbGVGYXN0QXJpdGhfb3BfYml0YW5kKToKKyAgICAgICAgKEpTQzo6
SklUOjpjb21waWxlRmFzdEFyaXRoX29wX21vZCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGls
ZUZhc3RBcml0aF9vcF9hZGQpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVGYXN0QXJpdGhf
b3BfbXVsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlRmFzdEFyaXRoX29wX3Bvc3RfaW5j
KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlRmFzdEFyaXRoX29wX3Bvc3RfZGVjKToKKyAg
ICAgICAgKEpTQzo6SklUOjpjb21waWxlRmFzdEFyaXRoX29wX3ByZV9pbmMpOgorICAgICAgICAo
SlNDOjpKSVQ6OmNvbXBpbGVGYXN0QXJpdGhfb3BfcHJlX2RlYyk6CisgICAgICAgIChKU0M6OkpJ
VDo6cHV0RG91YmxlUmVzdWx0VG9KU051bWJlckNlbGxPckpTSW1tZWRpYXRlKToKKyAgICAgICAg
KEpTQzo6SklUOjpjb21waWxlQmluYXJ5QXJpdGhPcCk6CisgICAgICAgICogaml0L0pJVElubGlu
ZU1ldGhvZHMuaDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SnVtcElmQm90aEpTQ2VsbHMpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRKdW1wSWZFaXRoZXJOdW1iZXIpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRKdW1wSWZOb3RFaXRoZXJOdW1iZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRKdW1wSWZJbW1lZGlhdGVJbnRlZ2VyTnVtYmVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
SnVtcElmTm90SW1tZWRpYXRlSW50ZWdlck51bWJlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dEp1bXBJZk5vdEltbWVkaWF0ZUludGVnZXJOdW1iZXJzKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyTnVtYmVyKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyTnVtYmVycyk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdEZhc3RBcml0aERlVGFnSW1tZWRpYXRlKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0RmFzdEFyaXRoRGVUYWdJbW1lZGlhdGVKdW1wSWZaZXJvKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0RmFzdEFyaXRoUmVUYWdJbW1lZGlhdGUpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRGYXN0QXJpdGhJbnRUb0ltbU5vQ2hlY2spOgorICAgICAgICAqIHJ1bnRpbWUv
SlNDZWxsLmg6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEuY3BwOgorICAgICAgICAo
SlNDOjpKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YSk6CisgICAgICAgICogcnVudGltZS9KU0lt
bWVkaWF0ZS5jcHA6CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjp0b1RoaXNPYmplY3QpOgor
ICAgICAgICAoSlNDOjpKU0ltbWVkaWF0ZTo6dG9PYmplY3QpOgorICAgICAgICAoSlNDOjpKU0lt
bWVkaWF0ZTo6dG9TdHJpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvSlNJbW1lZGlhdGUuaDoKKyAg
ICAgICAgKEpTQzo6d3RmX3JlaW50ZXJwcmV0X2Nhc3QpOgorICAgICAgICAoSlNDOjpKU0ltbWVk
aWF0ZTo6aXNOdW1iZXIpOgorICAgICAgICAoSlNDOjpKU0ltbWVkaWF0ZTo6aXNJbnRlZ2VyTnVt
YmVyKToKKyAgICAgICAgKEpTQzo6SlNJbW1lZGlhdGU6OmlzRG91YmxlTnVtYmVyKToKKyAgICAg
ICAgKEpTQzo6SlNJbW1lZGlhdGU6OmlzUG9zaXRpdmVJbnRlZ2VyTnVtYmVyKToKKyAgICAgICAg
KEpTQzo6SlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1lZGlhdGVJbnRlZ2VyTnVtYmVycyk6CisgICAg
ICAgIChKU0M6OkpTSW1tZWRpYXRlOjptYWtlSW50KToKKyAgICAgICAgKEpTQzo6SlNJbW1lZGlh
dGU6Om1ha2VEb3VibGUpOgorICAgICAgICAoSlNDOjpKU0ltbWVkaWF0ZTo6ZG91YmxlVmFsdWUp
OgorICAgICAgICAoSlNDOjpkb3VibGVUb0Jvb2xlYW4pOgorICAgICAgICAoSlNDOjpKU0ltbWVk
aWF0ZTo6dG9Cb29sZWFuKToKKyAgICAgICAgKEpTQzo6SlNJbW1lZGlhdGU6OmdldFRydW5jYXRl
ZFVJbnQzMik6CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjptYWtlT3V0T2ZJbnRlZ2VyUmFu
Z2UpOgorICAgICAgICAoSlNDOjpKU0ltbWVkaWF0ZTo6ZnJvbSk6CisgICAgICAgIChKU0M6OkpT
SW1tZWRpYXRlOjpnZXRUcnVuY2F0ZWRJbnQzMik6CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRl
Ojp0b0RvdWJsZSk6CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjpnZXRVSW50MzIpOgorICAg
ICAgICAoSlNDOjpKU1ZhbHVlUHRyOjppc0ludDMyRmFzdCk6CisgICAgICAgIChKU0M6OkpTVmFs
dWVQdHI6OmlzVUludDMyRmFzdCk6CisgICAgICAgIChKU0M6OkpTVmFsdWVQdHI6OmFyZUJvdGhJ
bnQzMkZhc3QpOgorICAgICAgICAoSlNDOjpKU0Zhc3RNYXRoOjpjYW5Eb0Zhc3RCaXR3aXNlT3Bl
cmF0aW9ucyk6CisgICAgICAgIChKU0M6OkpTRmFzdE1hdGg6OnhvckltbWVkaWF0ZU51bWJlcnMp
OgorICAgICAgICAoSlNDOjpKU0Zhc3RNYXRoOjpjYW5Eb0Zhc3RSc2hpZnQpOgorICAgICAgICAo
SlNDOjpKU0Zhc3RNYXRoOjpjYW5Eb0Zhc3RVcnNoaWZ0KToKKyAgICAgICAgKEpTQzo6SlNGYXN0
TWF0aDo6cmlnaHRTaGlmdEltbWVkaWF0ZU51bWJlcnMpOgorICAgICAgICAoSlNDOjpKU0Zhc3RN
YXRoOjpjYW5Eb0Zhc3RBZGRpdGl2ZU9wZXJhdGlvbnMpOgorICAgICAgICAoSlNDOjpKU0Zhc3RN
YXRoOjphZGRJbW1lZGlhdGVOdW1iZXJzKToKKyAgICAgICAgKEpTQzo6SlNGYXN0TWF0aDo6c3Vi
SW1tZWRpYXRlTnVtYmVycyk6CisgICAgICAgICogcnVudGltZS9KU051bWJlckNlbGwuY3BwOgor
ICAgICAgICAoSlNDOjpqc051bWJlckNlbGwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNOdW1iZXJD
ZWxsLmg6CisgICAgICAgIChKU0M6OmNyZWF0ZU51bWJlclN0cnVjdHVyZSk6CisgICAgICAgIChK
U0M6OmlzTnVtYmVyQ2VsbCk6CisgICAgICAgIChKU0M6OmFzTnVtYmVyQ2VsbCk6CisgICAgICAg
IChKU0M6OmpzTnVtYmVyKToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZVB0cjo6aXNEb3VibGVOdW1i
ZXIpOgorICAgICAgICAoSlNDOjpKU1ZhbHVlUHRyOjpnZXREb3VibGVOdW1iZXIpOgorICAgICAg
ICAoSlNDOjpKU1ZhbHVlUHRyOjppc051bWJlcik6CisgICAgICAgIChKU0M6OkpTVmFsdWVQdHI6
OnVuY2hlY2tlZEdldE51bWJlcik6CisgICAgICAgIChKU0M6OmpzTmFOKToKKyAgICAgICAgKEpT
Qzo6SlNWYWx1ZVB0cjo6Z2V0TnVtYmVyKToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZVB0cjo6bnVt
YmVyVG9JbnQzMik6CisgICAgICAgIChKU0M6OkpTVmFsdWVQdHI6Om51bWJlclRvVUludDMyKToK
KyAgICAgICAgKiBydW50aW1lL0pTVmFsdWUuaDoKKyAgICAgICAgKiBydW50aW1lL051bWJlckNv
bnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6bnVtYmVyQ29uc3RydWN0b3JOZWdJbmZpbml0
eSk6CisgICAgICAgIChKU0M6Om51bWJlckNvbnN0cnVjdG9yUG9zSW5maW5pdHkpOgorICAgICAg
ICAoSlNDOjpudW1iZXJDb25zdHJ1Y3Rvck1heFZhbHVlKToKKyAgICAgICAgKEpTQzo6bnVtYmVy
Q29uc3RydWN0b3JNaW5WYWx1ZSk6CisgICAgICAgICogcnVudGltZS9OdW1iZXJPYmplY3QuY3Bw
OgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3ROdW1iZXIpOgorICAgICAgICAqIHJ1bnRpbWUvTnVt
YmVyT2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9PcGVyYXRpb25zLmg6CisgICAgICAgIChK
U0M6OkpTVmFsdWVQdHI6OmVxdWFsKToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZVB0cjo6ZXF1YWxT
bG93Q2FzZUlubGluZSk6CisgICAgICAgIChKU0M6OkpTVmFsdWVQdHI6OnN0cmljdEVxdWFsKToK
KyAgICAgICAgKEpTQzo6SlNWYWx1ZVB0cjo6c3RyaWN0RXF1YWxTbG93Q2FzZUlubGluZSk6Cisg
ICAgICAgICogd3RmL1BsYXRmb3JtLmg6CisKIDIwMDktMDEtMTUgIFNhbSBXZWluaWcgIDxzYW1A
d2Via2l0Lm9yZz4KIAogICAgICAgICBGaXggUXQgYnVpbGQuCkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUuZXhwCShyZXZpc2lvbiAzOTk1NSkK
KysrIEphdmFTY3JpcHRDb3JlLmV4cAkod29ya2luZyBjb3B5KQpAQCAtMzU1LDcgKzM1NSw2IEBA
IF9fWk5LM0pTQzhKU09iamVjdDl0b0Jvb2xlYW5FUE5TXzlFeGVjU3QKIF9fWk5LM0pTQzlIYXNo
VGFibGUxMWNyZWF0ZVRhYmxlRVBOU18xMkpTR2xvYmFsRGF0YUUKIF9fWk5LM0pTQzlIYXNoVGFi
bGUxMWRlbGV0ZVRhYmxlRXYKIF9fWk5LM1dURjhDb2xsYXRvcjdjb2xsYXRlRVBLdG1TMl9tCi1f
X1pUVk4zSlNDMTJKU051bWJlckNlbGxFCiBfX1pUVk4zSlNDMTJTdHJpbmdPYmplY3RFCiBfX1pU
Vk4zSlNDMTRKU0dsb2JhbE9iamVjdEUKIF9fWlRWTjNKU0MxNUpTV3JhcHBlck9iamVjdEUKSW5k
ZXg6IGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGFzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAzOTk1NSkKKysrIGFzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02OTMsNiArNjkzLDE2IEBAIHB1YmxpYzoKICNlbmRp
ZgogICAgIH0KICAgICAKKyAgICB2b2lkIHN1YlB0cihJbW1QdHIgaW1tLCBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworI2lmIFBMQVRGT1JNKFg4Nl82NCkKKyAgICAgICAgbW92ZShpbW0sIHNjcmF0
Y2hSZWdpc3Rlcik7CisgICAgICAgIG1fYXNzZW1ibGVyLnN1YnFfcnIoc2NyYXRjaFJlZ2lzdGVy
LCBkZXN0KTsKKyNlbHNlCisgICAgICAgIHN1YjMyKEltbTMyKGltbSksIGRlc3QpOworI2VuZGlm
CisgICAgfQorCiAgICAgdm9pZCBzdWIzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKICAg
ICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLnN1YmxfaXIoaW1tLm1fdmFsdWUsIGRlc3QpOwpJbmRl
eDogYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGFzc2VtYmxlci9YODZB
c3NlbWJsZXIuaAkocmV2aXNpb24gMzk5NTUpCisrKyBhc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE0NSw2ICsxNDUsNyBAQCBwdWJsaWM6CiAgICAgICAgIE9QMl9B
RERTRF9Wc2RXc2QgICAgPSAweDU4LAogICAgICAgICBPUDJfTVVMU0RfVnNkV3NkICAgID0gMHg1
OSwKICAgICAgICAgT1AyX1NVQlNEX1ZzZFdzZCAgICA9IDB4NUMsCisgICAgICAgIE9QMl9NT1ZE
X1ZkRWQgICAgICAgPSAweDZFLAogICAgICAgICBPUDJfTU9WRF9FZFZkICAgICAgID0gMHg3RSwK
ICAgICAgICAgT1AyX0pPX3JlbDMyICAgICAgICA9IDB4ODAsCiAgICAgICAgIE9QMl9KQl9yZWwz
MiAgICAgICAgPSAweDgyLApAQCAtNDQxLDYgKzQ0MiwxMSBAQCBwdWJsaWM6CiAgICAgfQogCiAj
aWYgUExBVEZPUk0oWDg2XzY0KQorICAgIHZvaWQgc3VicV9ycihSZWdpc3RlcklEIHNyYywgUmVn
aXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9T
VUJfRXZHdiwgc3JjLCBkc3QpOworICAgIH0KKwogICAgIHZvaWQgc3VicV9pcihpbnQgaW1tLCBS
ZWdpc3RlcklEIGRzdCkKICAgICB7CiAgICAgICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihp
bW0pKSB7CkBAIC0xMDg4LDYgKzEwOTQsMTQgQEAgcHVibGljOgogICAgICAgICBtX2Zvcm1hdHRl
ci50d29CeXRlT3AoT1AyX01PVkRfRWRWZCwgKFJlZ2lzdGVySUQpc3JjLCBkc3QpOwogICAgIH0K
IAorI2lmIFBMQVRGT1JNKFg4Nl82NCkKKyAgICB2b2lkIG1vdnFfcnIoUmVnaXN0ZXJJRCBzcmMs
IFhNTVJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBS
RV9TU0VfNjYpOworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3A2NChPUDJfTU9WRF9WZEVk
LCAoUmVnaXN0ZXJJRClkc3QsIHNyYyk7CisgICAgfQorI2VuZGlmCisKICAgICB2b2lkIG1vdnNk
X3JtKFhNTVJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCiAgICAg
ewogICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX1NTRV9GMik7CkBAIC0xMTMxLDcgKzEx
NDUsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcChPUDJfU1VCU0Rf
VnNkV3NkLCAoUmVnaXN0ZXJJRClkc3QsIGJhc2UsIG9mZnNldCk7CiAgICAgfQogCi0gICAgdm9p
ZCB1Y29taXNfcnIoWE1NUmVnaXN0ZXJJRCBzcmMsIFhNTVJlZ2lzdGVySUQgZHN0KQorICAgIHZv
aWQgdWNvbWlzZF9ycihYTU1SZWdpc3RlcklEIHNyYywgWE1NUmVnaXN0ZXJJRCBkc3QpCiAgICAg
ewogICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX1NTRV82Nik7CiAgICAgICAgIG1fZm9y
bWF0dGVyLnR3b0J5dGVPcChPUDJfVUNPTUlTRF9Wc2RXc2QsIChSZWdpc3RlcklEKWRzdCwgKFJl
Z2lzdGVySUQpc3JjKTsKQEAgLTE0MTUsNiArMTQyOSwxNSBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgbV9idWZmZXIucHV0Qnl0ZVVuY2hlY2tlZChvcGNvZGUpOwogICAgICAgICAgICAgbWVtb3J5
TW9kUk0ocmVnLCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CiAgICAgICAgIH0KKworICAg
ICAgICB2b2lkIHR3b0J5dGVPcDY0KFR3b0J5dGVPcGNvZGVJRCBvcGNvZGUsIGludCByZWcsIFJl
Z2lzdGVySUQgcm0pCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fYnVmZmVyLmVuc3VyZVNwYWNl
KG1heEluc3RydWN0aW9uU2l6ZSk7CisgICAgICAgICAgICBlbWl0UmV4VyhyZWcsIDAsIHJtKTsK
KyAgICAgICAgICAgIG1fYnVmZmVyLnB1dEJ5dGVVbmNoZWNrZWQoT1BfMkJZVEVfRVNDQVBFKTsK
KyAgICAgICAgICAgIG1fYnVmZmVyLnB1dEJ5dGVVbmNoZWNrZWQob3Bjb2RlKTsKKyAgICAgICAg
ICAgIHJlZ2lzdGVyTW9kUk0ocmVnLCBybSk7CisgICAgICAgIH0KICNlbmRpZgogCiAgICAgICAg
IC8vIEJ5dGUtb3BlcmFuZHM6CkluZGV4OiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAzOTk1NSkK
KysrIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTg2OCwx
MCArNTg2OCw3IEBAIEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3QKICAg
ICBKU1ZhbHVlUHRyIHNyYzEgPSBBUkdfc3JjMTsKICAgICBKU1ZhbHVlUHRyIHNyYzIgPSBBUkdf
c3JjMjsKIAotICAgIC8vIGhhbmRsZWQgaW5saW5lIGFzIGZhc3QgY2FzZXMKLSAgICBBU1NFUlQo
IUpJVDo6aXNTdHJpY3RFcUNhc2VIYW5kbGVkSW5KSVRDb2RlKHNyYzEsIHNyYzIpKTsKLQotICAg
IHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUoanNCb29sZWFuKEpTVmFsdWVQdHI6OnN0cmljdEVx
dWFsU2xvd0Nhc2VJbmxpbmUoc3JjMSwgc3JjMikpKTsKKyAgICByZXR1cm4gSlNWYWx1ZVB0cjo6
ZW5jb2RlKGpzQm9vbGVhbihKU1ZhbHVlUHRyOjpzdHJpY3RFcXVhbChzcmMxLCBzcmMyKSkpOwog
fQogCiBKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSW50ZXJwcmV0ZXI6OmN0aV9vcF9uc3RyaWN0
ZXEoU1RVQl9BUkdTKQpAQCAtNTg4MSwxMCArNTg3OCw3IEBAIEpTVmFsdWVFbmNvZGVkQXNQb2lu
dGVyKiBJbnRlcnByZXRlcjo6Y3QKICAgICBKU1ZhbHVlUHRyIHNyYzEgPSBBUkdfc3JjMTsKICAg
ICBKU1ZhbHVlUHRyIHNyYzIgPSBBUkdfc3JjMjsKIAotICAgIC8vIGhhbmRsZWQgaW5saW5lIGFz
IGZhc3QgY2FzZXMKLSAgICBBU1NFUlQoIUpJVDo6aXNTdHJpY3RFcUNhc2VIYW5kbGVkSW5KSVRD
b2RlKHNyYzEsIHNyYzIpKTsKLSAgICAKLSAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKGpz
Qm9vbGVhbighSlNWYWx1ZVB0cjo6c3RyaWN0RXF1YWxTbG93Q2FzZUlubGluZShzcmMxLCBzcmMy
KSkpOworICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUoanNCb29sZWFuKCFKU1ZhbHVlUHRy
OjpzdHJpY3RFcXVhbChzcmMxLCBzcmMyKSkpOwogfQogCiBKU1ZhbHVlRW5jb2RlZEFzUG9pbnRl
ciogSW50ZXJwcmV0ZXI6OmN0aV9vcF90b19qc251bWJlcihTVFVCX0FSR1MpCkluZGV4OiBqaXQv
SklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBqaXQvSklULmNwcAkocmV2aXNpb24gMzk5NTUpCisrKyBq
aXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEzLDE4ICsyMTMsMzEgQEAgSklUOjpKSVQo
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlQgogCiB2b2lkIEpJVDo6Y29tcGlsZU9wU3Ry
aWN0RXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFU
eXBlIHR5cGUpCiB7Ci0gICAgYm9vbCBuZWdhdGVkID0gKHR5cGUgPT0gT3BOU3RyaWN0RXEpOwot
CiAgICAgdW5zaWduZWQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAg
ICB1bnNpZ25lZCBzcmMxID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICB1
bnNpZ25lZCBzcmMyID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKIAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEsIFg4Njo6ZWF4LCBzcmMyLCBYODY6OmVkeCk7CiAK
LSAgICAvLyBDaGVjayB0aGF0IGJvdCBhcmUgaW1tZWRpYXRlcywgaWYgc28gY2hlY2sgaWYgdGhl
eSdyZSBlcXVhbAorI2lmIFVTRShBTFRFUk5BVEVfSlNJTU1FRElBVEUpCisgICAgLy8gSnVtcCB0
byBhIHNsb3cgY2FzZSBpZiBlaXRoZXIgb3BlcmFuZCBpcyBhIG51bWJlciwgb3IgaWYgYm90aCBh
cmUgSlNDZWxsKnMuCisgICAgbW92ZShYODY6OmVheCwgWDg2OjplY3gpOworICAgIG9yUHRyKFg4
Njo6ZWR4LCBYODY6OmVjeCk7CisgICAgYWRkU2xvd0Nhc2UoZW1pdEp1bXBJZkpTQ2VsbChYODY6
OmVjeCkpOworICAgIGFkZFNsb3dDYXNlKGVtaXRKdW1wSWZFaXRoZXJOdW1iZXIoWDg2OjplY3gp
KTsKKworICAgIGlmICh0eXBlID09IE9wU3RyaWN0RXEpCisgICAgICAgIHNldGUzMihYODY6OmVk
eCwgWDg2OjplYXgpOworICAgIGVsc2UKKyAgICAgICAgc2V0bmUzMihYODY6OmVkeCwgWDg2Ojpl
YXgpOworICAgIGVtaXRUYWdBc0Jvb2xJbW1lZGlhdGUoWDg2OjplYXgpOworI2Vsc2UKKyAgICBi
b29sIG5lZ2F0ZWQgPSAodHlwZSA9PSBPcE5TdHJpY3RFcSk7CisKKyAgICAvLyBDaGVjayB0aGF0
IGJvdGggYXJlIGltbWVkaWF0ZXMsIGlmIHNvIGNoZWNrIGlmIHRoZXkncmUgZXF1YWwKICAgICBK
dW1wIGZpcnN0Tm90SW1tZWRpYXRlID0gZW1pdEp1bXBJZkpTQ2VsbChYODY6OmVheCk7CiAgICAg
SnVtcCBzZWNvbmROb3RJbW1lZGlhdGUgPSBlbWl0SnVtcElmSlNDZWxsKFg4Njo6ZWR4KTsKLSAg
ICBKdW1wIGJvdGhXZXJlSW1tZWRpYXRlc0J1dE5vdEVxdWFsID0gam5lMzIoWDg2OjplZHgsIFg4
Njo6ZWF4KTsKKyAgICBKdW1wIGJvdGhXZXJlSW1tZWRpYXRlc0J1dE5vdEVxdWFsID0gam5lUHRy
KFg4Njo6ZWR4LCBYODY6OmVheCk7CiAKICAgICAvLyBUaGV5IGFyZSBlcXVhbCAtIHNldCB0aGUg
cmVzdWx0IHRvIHRydWUuIChPciBmYWxzZSwgaWYgbmVnYXRlZCkuCiAgICAgbW92ZShJbW1QdHIo
SlNWYWx1ZVB0cjo6ZW5jb2RlKGpzQm9vbGVhbighbmVnYXRlZCkpKSwgWDg2OjplYXgpOwpAQCAt
MjUwLDYgKzI2Myw4IEBAIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcShJbnN0cnVjdGlvbioK
ICAgICBtb3ZlKEltbVB0cihKU1ZhbHVlUHRyOjplbmNvZGUoanNCb29sZWFuKG5lZ2F0ZWQpKSks
IFg4Njo6ZWF4KTsKICAgICAKICAgICBib3RoV2VyZUltbWVkaWF0ZXNBbmRFcXVhbC5saW5rKHRo
aXMpOworI2VuZGlmCisKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAg
LTM0Nyw3ICszNjIsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAg
ICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
OwogICAgICAgICAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KG9wMikpIHsK
ICAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgWDg2OjplYXgpOwot
ICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCk7Cisg
ICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlSW50ZWdlck51bWJl
cihYODY6OmVheCk7CiAjaWYgVVNFKEFMVEVSTkFURV9KU0lNTUVESUFURSkKICAgICAgICAgICAg
ICAgICBpbnQzMl90IG9wMmltbSA9IGdldENvbnN0YW50T3BlcmFuZEltbWVkaWF0ZUludChvcDIp
OwogI2Vsc2UKQEAgLTM1Niw4ICszNzEsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWlu
UGFzcygpCiAgICAgICAgICAgICAgICAgYWRkSnVtcChqbDMyKFg4Njo6ZWF4LCBJbW0zMihvcDJp
bW0pKSwgdGFyZ2V0ICsgMyk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwgWDg2OjplYXgsIG9wMiwgWDg2OjplZHgpOwot
ICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCk7Ci0g
ICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWR4KTsKKyAg
ICAgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyTnVtYmVy
KFg4Njo6ZWF4KTsKKyAgICAgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlh
dGVJbnRlZ2VyTnVtYmVyKFg4Njo6ZWR4KTsKICAgICAgICAgICAgICAgICBhZGRKdW1wKGpsMzIo
WDg2OjplYXgsIFg4Njo6ZWR4KSwgdGFyZ2V0ICsgMyk7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBORVhUX09QQ09ERShvcF9sb29wX2lmX2xlc3MpOwpAQCAtMzcwLDcgKzM4NSw3IEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgICAgIHVuc2lnbmVkIHRh
cmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpZiAo
aXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AyKSkgewogICAgICAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBYODY6OmVheCk7Ci0gICAgICAgICAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4KTsKKyAgICAgICAgICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyTnVtYmVyKFg4Njo6ZWF4KTsKICNpZiBV
U0UoQUxURVJOQVRFX0pTSU1NRURJQVRFKQogICAgICAgICAgICAgICAgIGludDMyX3Qgb3AyaW1t
ID0gZ2V0Q29uc3RhbnRPcGVyYW5kSW1tZWRpYXRlSW50KG9wMik7CiAjZWxzZQpAQCAtMzc5LDgg
KzM5NCw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgICAg
ICAgICBhZGRKdW1wKGpsZTMyKFg4Njo6ZWF4LCBJbW0zMihvcDJpbW0pKSwgdGFyZ2V0ICsgMyk7
CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXJzKG9wMSwgWDg2OjplYXgsIG9wMiwgWDg2OjplZHgpOwotICAgICAgICAgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCk7Ci0gICAgICAgICAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWR4KTsKKyAgICAgICAgICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyTnVtYmVyKFg4Njo6ZWF4KTsKKyAgICAg
ICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyTnVtYmVyKFg4
Njo6ZWR4KTsKICAgICAgICAgICAgICAgICBhZGRKdW1wKGpsZTMyKFg4Njo6ZWF4LCBYODY6OmVk
eCksIHRhcmdldCArIDMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgTkVYVF9PUENPREUo
b3BfbG9vcF9pZl9sZXNzKTsKQEAgLTU3Miw3ICs1ODcsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVNYWluUGFzcygpCiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9nZXRfYnlfdmFsOiB7
CiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kLCBYODY6OmVheCwgY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCwg
WDg2OjplZHgpOwotICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6
ZWR4KTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXJO
dW1iZXIoWDg2OjplZHgpOwogI2lmIFVTRShBTFRFUk5BVEVfSlNJTU1FRElBVEUpCiAgICAgICAg
ICAgICAvLyBUaGlzIGlzIHRlY2huaWNhbGx5IGluY29ycmVjdCAtIHdlJ3JlIHplcm8tZXh0ZW5k
aW5nIGFuIGludDMyLiAgT24gdGhlIGhvdCBwYXRoIHRoaXMgZG9lc24ndCBtYXR0ZXIuCiAgICAg
ICAgICAgICAvLyBXZSBjaGVjayB0aGUgdmFsdWUgYXMgaWYgaXQgd2FzIGEgdWludDMyIGFnYWlu
c3QgdGhlIG1fZmFzdEFjY2Vzc0N1dG9mZiAtIHdoaWNoIHdpbGwgYWx3YXlzIGZhaWwgaWYKQEAg
LTYxMCw3ICs2MjUsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsOiB7CiAgICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVycyhjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBYODY6OmVh
eCwgY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCwgWDg2OjplZHgpOwotICAgICAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWR4KTsKKyAgICAgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXJOdW1iZXIoWDg2OjplZHgpOwogI2lm
IFVTRShBTFRFUk5BVEVfSlNJTU1FRElBVEUpCiAgICAgICAgICAgICAvLyBTZWUgY29tbWVudCBp
biBvcF9nZXRfYnlfdmFsLgogICAgICAgICAgICAgemVyb0V4dGVuZDMyVG9QdHIoWDg2OjplZHgs
IFg4Njo6ZWR4KTsKQEAgLTY0NCw3ICs2NTksNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVN
YWluUGFzcygpCiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQsIFg4Njo6ZWF4KTsKIAogICAgICAgICAgICAgSnVtcCBpc1pl
cm8gPSBqZVB0cihYODY6OmVheCwgSW1tUHRyKEpTVmFsdWVQdHI6OmVuY29kZShqczAoKSkpKTsK
LSAgICAgICAgICAgIGFkZEp1bXAoZW1pdEp1bXBJZkltbU51bShYODY6OmVheCksIHRhcmdldCAr
IDIpOworICAgICAgICAgICAgYWRkSnVtcChlbWl0SnVtcElmSW1tZWRpYXRlSW50ZWdlck51bWJl
cihYODY6OmVheCksIHRhcmdldCArIDIpOwogCiAgICAgICAgICAgICBhZGRKdW1wKGplUHRyKFg4
Njo6ZWF4LCBJbW1QdHIoSlNWYWx1ZVB0cjo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpKSwgdGFy
Z2V0ICsgMik7CiAgICAgICAgICAgICBhZGRTbG93Q2FzZShqbmVQdHIoWDg2OjplYXgsIEltbVB0
cihKU1ZhbHVlUHRyOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSkpKSk7CkBAIC03MTUsNyArNzMw
LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICAgICAgdW5z
aWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKICAgICAgICAg
ICAgIGlmIChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDIpKSB7CiAgICAgICAgICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplYXgpOworICAgICAgICAgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXJOdW1iZXIoWDg2OjplYXgp
OwogI2lmIFVTRShBTFRFUk5BVEVfSlNJTU1FRElBVEUpCiAgICAgICAgICAgICAgICAgaW50MzJf
dCBvcDJpbW0gPSBnZXRDb25zdGFudE9wZXJhbmRJbW1lZGlhdGVJbnQob3AyKTsKICNlbHNlCkBA
IC03MjQsOCArNzM5LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAg
ICAgICAgICAgICAgIGFkZEp1bXAoamdlMzIoWDg2OjplYXgsIEltbTMyKG9wMmltbSkpLCB0YXJn
ZXQgKyAzKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcnMob3AxLCBYODY6OmVheCwgb3AyLCBYODY6OmVkeCk7Ci0gICAgICAgICAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4KTsKLSAgICAgICAgICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplZHgpOworICAgICAgICAgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXJOdW1iZXIoWDg2OjplYXgp
OworICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXJO
dW1iZXIoWDg2OjplZHgpOwogICAgICAgICAgICAgICAgIGFkZEp1bXAoamdlMzIoWDg2OjplYXgs
IFg4Njo6ZWR4KSwgdGFyZ2V0ICsgMyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBORVhU
X09QQ09ERShvcF9qbmxlc3MpOwpAQCAtNzQzLDcgKzc1OCw3IEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgWDg2OjplYXgpOwogCiAgICAgICAgICAgICBh
ZGRKdW1wKGplUHRyKFg4Njo6ZWF4LCBJbW1QdHIoSlNWYWx1ZVB0cjo6ZW5jb2RlKGpzMCgpKSkp
LCB0YXJnZXQgKyAyKTsKLSAgICAgICAgICAgIEp1bXAgaXNOb25aZXJvID0gZW1pdEp1bXBJZklt
bU51bShYODY6OmVheCk7CisgICAgICAgICAgICBKdW1wIGlzTm9uWmVybyA9IGVtaXRKdW1wSWZJ
bW1lZGlhdGVJbnRlZ2VyTnVtYmVyKFg4Njo6ZWF4KTsKIAogICAgICAgICAgICAgYWRkSnVtcChq
ZVB0cihYODY6OmVheCwgSW1tUHRyKEpTVmFsdWVQdHI6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2Up
KSkpLCB0YXJnZXQgKyAyKTsKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGpuZVB0cihYODY6OmVh
eCwgSW1tUHRyKEpTVmFsdWVQdHI6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSkpOwpAQCAtODE1
LDcgKzgzMCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAg
fQogICAgICAgICBjYXNlIG9wX2VxOiB7CiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVycyhjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kLCBYODY6OmVheCwgY3VycmVudElu
c3RydWN0aW9uWzNdLnUub3BlcmFuZCwgWDg2OjplZHgpOwotICAgICAgICAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SW1tTnVtcyhYODY6OmVheCwgWDg2OjplZHgsIFg4Njo6ZWN4KTsKKyAgICAg
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXJOdW1iZXJzKFg4Njo6
ZWF4LCBYODY6OmVkeCwgWDg2OjplY3gpOwogICAgICAgICAgICAgc2V0ZTMyKFg4Njo6ZWR4LCBY
ODY6OmVheCk7CiAgICAgICAgICAgICBlbWl0VGFnQXNCb29sSW1tZWRpYXRlKFg4Njo6ZWF4KTsK
ICAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCk7CkBAIC04MzUsMTIgKzg1MCwxMiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVNYWluUGFzcygpCiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9iaXRub3Q6IHsKICAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZCwgWDg2OjplYXgpOwotICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVt
KFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUlu
dGVnZXJOdW1iZXIoWDg2OjplYXgpOwogI2lmIFVTRShBTFRFUk5BVEVfSlNJTU1FRElBVEUpCiAg
ICAgICAgICAgICBub3QzMihYODY6OmVheCk7CiAgICAgICAgICAgICBlbWl0RmFzdEFyaXRoSW50
VG9JbW1Ob0NoZWNrKFg4Njo6ZWF4LCBYODY6OmVheCk7CiAjZWxzZQotICAgICAgICAgICAgeG9y
UHRyKEltbTMyKH5KU0ltbWVkaWF0ZTo6VGFnVHlwZUludGVnZXIpLCBYODY6OmVheCk7CisgICAg
ICAgICAgICB4b3JQdHIoSW1tMzIofkpTSW1tZWRpYXRlOjpUYWdUeXBlTnVtYmVyKSwgWDg2Ojpl
YXgpOwogI2VuZGlmCiAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfYml0
bm90KTsKQEAgLTg2OSw3ICs4ODQsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFz
cygpCiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQsIFg4Njo6ZWF4KTsKIAogICAgICAgICAgICAgSnVtcCBpc1plcm8gPSBq
ZVB0cihYODY6OmVheCwgSW1tUHRyKEpTVmFsdWVQdHI6OmVuY29kZShqczAoKSkpKTsKLSAgICAg
ICAgICAgIGFkZEp1bXAoZW1pdEp1bXBJZkltbU51bShYODY6OmVheCksIHRhcmdldCArIDIpOwor
ICAgICAgICAgICAgYWRkSnVtcChlbWl0SnVtcElmSW1tZWRpYXRlSW50ZWdlck51bWJlcihYODY6
OmVheCksIHRhcmdldCArIDIpOwogCiAgICAgICAgICAgICBhZGRKdW1wKGplUHRyKFg4Njo6ZWF4
LCBJbW1QdHIoSlNWYWx1ZVB0cjo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpKSwgdGFyZ2V0ICsg
Mik7CiAgICAgICAgICAgICBhZGRTbG93Q2FzZShqbmVQdHIoWDg2OjplYXgsIEltbVB0cihKU1Zh
bHVlUHRyOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSkpKSk7CkBAIC04ODAsNyArODk1LDcgQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBDVElfQ09NUElMRV9C
SU5BUllfT1Aob3BfbGVzcykKICAgICAgICAgY2FzZSBvcF9uZXE6IHsKICAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQsIFg4
Njo6ZWF4LCBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kLCBYODY6OmVkeCk7Ci0gICAg
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW1zKFg4Njo6ZWF4LCBYODY6OmVkeCwg
WDg2OjplY3gpOworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlSW50
ZWdlck51bWJlcnMoWDg2OjplYXgsIFg4Njo6ZWR4LCBYODY6OmVjeCk7CiAgICAgICAgICAgICBz
ZXRuZTMyKFg4Njo6ZWR4LCBYODY6OmVheCk7CiAgICAgICAgICAgICBlbWl0VGFnQXNCb29sSW1t
ZWRpYXRlKFg4Njo6ZWF4KTsKIApAQCAtODk1LDcgKzkxMCw3IEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgQ1RJX0NPTVBJTEVfQklOQVJZX09QKG9wX3Vyc2hp
ZnQpCiAgICAgICAgIGNhc2Ugb3BfYml0eG9yOiB7CiAgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVycyhjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kLCBYODY6OmVheCwgY3Vy
cmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCwgWDg2OjplZHgpOwotICAgICAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtcyhYODY6OmVheCwgWDg2OjplZHgsIFg4Njo6ZWN4KTsK
KyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXJOdW1iZXJz
KFg4Njo6ZWF4LCBYODY6OmVkeCwgWDg2OjplY3gpOwogICAgICAgICAgICAgeG9yUHRyKFg4Njo6
ZWR4LCBYODY6OmVheCk7CiAgICAgICAgICAgICBlbWl0RmFzdEFyaXRoUmVUYWdJbW1lZGlhdGUo
WDg2OjplYXgsIFg4Njo6ZWF4KTsKICAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CkBAIC05MTAsNyArOTI1LDcgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
b3BfYml0b3I6IHsKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBjdXJyZW50SW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kLCBYODY6OmVkeCk7Ci0gICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bW1OdW1zKFg4Njo6ZWF4LCBYODY6OmVkeCwgWDg2OjplY3gpOworICAgICAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlSW50ZWdlck51bWJlcnMoWDg2OjplYXgsIFg4Njo6ZWR4
LCBYODY6OmVjeCk7CiAgICAgICAgICAgICBvclB0cihYODY6OmVkeCwgWDg2OjplYXgpOwogICAg
ICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2JpdG9yKTsKQEAgLTk4MCw3ICs5
OTUsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICBp
bnQgc3JjVlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAgICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIFg4Njo6ZWF4KTsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgSnVtcCB3YXNJbW1lZGlhdGUgPSBlbWl0SnVtcElmSW1tTnVtKFg4Njo6
ZWF4KTsKKyAgICAgICAgICAgIEp1bXAgd2FzSW1tZWRpYXRlID0gZW1pdEp1bXBJZkltbWVkaWF0
ZUludGVnZXJOdW1iZXIoWDg2OjplYXgpOwogCiAgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoWDg2OjplYXgsIHNyY1ZSZWcpOwogICAgICAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKFg4Njo6ZWF4LCBGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSkpLCBYODY6OmVj
eCk7CkBAIC0xNTA2LDcgKzE1MjEsOSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2Fz
ZXMoKQogICAgICAgICBjYXNlIG9wX3N0cmljdGVxOiB7CiAgICAgICAgICAgICBsaW5rU2xvd0Nh
c2UoaXRlcik7CiAgICAgICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CisjaWYgIVVTRShBTFRF
Uk5BVEVfSlNJTU1FRElBVEUpCiAgICAgICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CisjZW5k
aWYKICAgICAgICAgICAgIGVtaXRQdXRKSVRTdHViQXJnKFg4Njo6ZWF4LCAxKTsKICAgICAgICAg
ICAgIGVtaXRQdXRKSVRTdHViQXJnKFg4Njo6ZWR4LCAyKTsKICAgICAgICAgICAgIGVtaXRDVElD
YWxsKEludGVycHJldGVyOjpjdGlfb3Bfc3RyaWN0ZXEpOwpAQCAtMTUxNiw3ICsxNTMzLDkgQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgY2FzZSBvcF9uc3Ry
aWN0ZXE6IHsKICAgICAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKICAgICAgICAgICAgIGxp
bmtTbG93Q2FzZShpdGVyKTsKKyNpZiAhVVNFKEFMVEVSTkFURV9KU0lNTUVESUFURSkKICAgICAg
ICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKKyNlbmRpZgogICAgICAgICAgICAgZW1pdFB1dEpJ
VFN0dWJBcmcoWDg2OjplYXgsIDEpOwogICAgICAgICAgICAgZW1pdFB1dEpJVFN0dWJBcmcoWDg2
OjplZHgsIDIpOwogICAgICAgICAgICAgZW1pdENUSUNhbGwoSW50ZXJwcmV0ZXI6OmN0aV9vcF9u
c3RyaWN0ZXEpOwpJbmRleDogaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGppdC9KSVQuaAkocmV2
aXNpb24gMzk5NTUpCisrKyBqaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTM1MSwxMSArMzUx
LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICAgICAgY29kZSwgcmVnaXN0ZXJGaWxl
LCBjYWxsRnJhbWUsIGV4Y2VwdGlvbiwgUHJvZmlsZXI6OmVuYWJsZWRQcm9maWxlclJlZmVyZW5j
ZSgpLCBnbG9iYWxEYXRhKSk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgYm9vbCBpc1N0
cmljdEVxQ2FzZUhhbmRsZWRJbkpJVENvZGUoSlNWYWx1ZVB0ciBzcmMxLCBKU1ZhbHVlUHRyIHNy
YzIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBKU0ltbWVkaWF0ZTo6YXJlQm90aElt
bWVkaWF0ZShzcmMxLCBzcmMyKSB8fCAoSlNJbW1lZGlhdGU6OmlzRWl0aGVySW1tZWRpYXRlKHNy
YzEsIHNyYzIpICYgKHNyYzEgIT0ganMwKCkpICYgKHNyYzIgIT0ganMwKCkpKTsKLSAgICAgICAg
fQotCiAgICAgcHJpdmF0ZToKICAgICAgICAgSklUKEpTR2xvYmFsRGF0YSosIENvZGVCbG9jayog
PSAwKTsKIApAQCAtNDQzLDEwICs0MzgsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJv
b2wgaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQodW5zaWduZWQgc3JjKTsKIAogICAgICAg
ICBKdW1wIGVtaXRKdW1wSWZKU0NlbGwoUmVnaXN0ZXJJRCk7CisgICAgICAgIEp1bXAgZW1pdEp1
bXBJZkJvdGhKU0NlbGxzKFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQpOwogICAg
ICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZkpTQ2VsbChSZWdpc3RlcklEKTsKICAgICAgICAg
SnVtcCBlbWl0SnVtcElmTm90SlNDZWxsKFJlZ2lzdGVySUQpOwogICAgICAgICB2b2lkIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEKTsKICAgICAgICAgdm9pZCBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCwgaW50IFZSZWcpOworI2lmIFVTRShBTFRF
Uk5BVEVfSlNJTU1FRElBVEUpCisgICAgICAgIEpJVDo6SnVtcCBlbWl0SnVtcElmRWl0aGVyTnVt
YmVyKFJlZ2lzdGVySUQpOworICAgICAgICBKSVQ6Okp1bXAgZW1pdEp1bXBJZk5vdEVpdGhlck51
bWJlcihSZWdpc3RlcklEKTsKKyNlbmRpZgogCiAgICAgICAgIEp1bXAgZ2V0U2xvd0Nhc2UoVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKICAgICAgICAgewpAQCAtNDU5LDkg
KzQ1OSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgICAgICB2b2lkIGxpbmtT
bG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBpbnQg
dlJlZyk7CiAKLSAgICAgICAgSklUOjpKdW1wIGVtaXRKdW1wSWZJbW1OdW0oUmVnaXN0ZXJJRCk7
Ci0gICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFJlZ2lzdGVySUQpOwot
ICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bXMoUmVnaXN0ZXJJRCwgUmVn
aXN0ZXJJRCwgUmVnaXN0ZXJJRCk7CisgICAgICAgIEpJVDo6SnVtcCBlbWl0SnVtcElmSW1tZWRp
YXRlSW50ZWdlck51bWJlcihSZWdpc3RlcklEKTsKKyAgICAgICAgSklUOjpKdW1wIGVtaXRKdW1w
SWZOb3RJbW1lZGlhdGVJbnRlZ2VyTnVtYmVyKFJlZ2lzdGVySUQpOworICAgICAgICBKSVQ6Okp1
bXAgZW1pdEp1bXBJZk5vdEltbWVkaWF0ZUludGVnZXJOdW1iZXJzKFJlZ2lzdGVySUQsIFJlZ2lz
dGVySUQsIFJlZ2lzdGVySUQpOworICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElt
bWVkaWF0ZUludGVnZXJOdW1iZXIoUmVnaXN0ZXJJRCk7CisgICAgICAgIHZvaWQgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SW1tZWRpYXRlSW50ZWdlck51bWJlcnMoUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJ
RCwgUmVnaXN0ZXJJRCk7CiAKICAgICAgICAgSnVtcCBjaGVja1N0cnVjdHVyZShSZWdpc3RlcklE
IHJlZywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpOwogCkluZGV4OiBqaXQvSklUQXJpdGhtZXRpYy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gaml0L0pJVEFyaXRobWV0aWMuY3BwCShyZXZpc2lvbiAzOTk1NSkK
KysrIGppdC9KSVRBcml0aG1ldGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksOSArNDksOSBA
QCBuYW1lc3BhY2UgSlNDIHsKIHZvaWQgSklUOjpjb21waWxlRmFzdEFyaXRoX29wX2xzaGlmdCh1
bnNpZ25lZCByZXN1bHQsIHVuc2lnbmVkIG9wMSwgdW5zaWduZWQgb3AyKQogewogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwgWDg2OjplYXgsIG9wMiwgWDg2OjplY3gpOwotICAgIC8v
IEZJWE1FOiB3b3VsZCB3ZSBiZSBiZXR0ZXIgdXNpbmcgJ2VtaXRKdW1wU2xvd0Nhc2VJZk5vdElt
bU51bXMnPyAtIHdlICpwcm9iYWJseSogb3VnaHQgdG8gYmUgY29uc2lzdGVudC4KLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplYXgpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEltbU51bShYODY6OmVjeCk7CisgICAgLy8gRklYTUU6IHdvdWxkIHdlIGJlIGJldHRlciB1
c2luZyAnZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlSW50ZWdlck51bWJlcnMnPyAtIHdl
ICpwcm9iYWJseSogb3VnaHQgdG8gYmUgY29uc2lzdGVudC4KKyAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbW1lZGlhdGVJbnRlZ2VyTnVtYmVyKFg4Njo6ZWF4KTsKKyAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyTnVtYmVyKFg4Njo6ZWN4KTsKICAgICBlbWl0RmFzdEFy
aXRoSW1tVG9JbnQoWDg2OjplYXgpOwogICAgIGVtaXRGYXN0QXJpdGhJbW1Ub0ludChYODY6OmVj
eCk7CiAjaWYgIVBMQVRGT1JNKFg4NikKQEAgLTkzLDcgKzkzLDcgQEAgdm9pZCBKSVQ6OmNvbXBp
bGVGYXN0QXJpdGhfb3BfcnNoaWZ0KHVucwogewogICAgIGlmIChpc09wZXJhbmRDb25zdGFudElt
bWVkaWF0ZUludChvcDIpKSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBY
ODY6OmVheCk7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCk7
CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXJOdW1iZXIoWDg2
OjplYXgpOwogICAgICAgICAvLyBNYXNrIHdpdGggMHgxZiBhcyBwZXIgZWNtYS0yNjIgMTEuNy4y
IHN0ZXAgNy4KICNpZiBVU0UoQUxURVJOQVRFX0pTSU1NRURJQVRFKQogICAgICAgICByc2hpZnQz
MihJbW0zMihnZXRDb25zdGFudE9wZXJhbmRJbW1lZGlhdGVJbnQob3AyKSAmIDB4MWYpLCBYODY6
OmVheCk7CkBAIC0xMDIsOCArMTAyLDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVGYXN0QXJpdGhfb3Bf
cnNoaWZ0KHVucwogI2VuZGlmCiAgICAgfSBlbHNlIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMob3AxLCBYODY6OmVheCwgb3AyLCBYODY6OmVjeCk7Ci0gICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCk7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEltbU51bShYODY6OmVjeCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVk
aWF0ZUludGVnZXJOdW1iZXIoWDg2OjplYXgpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RJbW1lZGlhdGVJbnRlZ2VyTnVtYmVyKFg4Njo6ZWN4KTsKICAgICAgICAgZW1pdEZhc3RBcml0
aEltbVRvSW50KFg4Njo6ZWN4KTsKICNpZiAhUExBVEZPUk0oWDg2KQogICAgICAgICAvLyBNYXNr
IHdpdGggMHgxZiBhcyBwZXIgZWNtYS0yNjIgMTEuNy4yIHN0ZXAgNy4KQEAgLTExOSw3ICsxMTks
NyBAQCB2b2lkIEpJVDo6Y29tcGlsZUZhc3RBcml0aF9vcF9yc2hpZnQodW5zCiAjaWYgVVNFKEFM
VEVSTkFURV9KU0lNTUVESUFURSkKICAgICBlbWl0RmFzdEFyaXRoSW50VG9JbW1Ob0NoZWNrKFg4
Njo6ZWF4LCBYODY6OmVheCk7CiAjZWxzZQotICAgIG9yUHRyKEltbTMyKEpTSW1tZWRpYXRlOjpU
YWdUeXBlSW50ZWdlciksIFg4Njo6ZWF4KTsKKyAgICBvclB0cihJbW0zMihKU0ltbWVkaWF0ZTo6
VGFnVHlwZU51bWJlciksIFg4Njo6ZWF4KTsKICNlbmRpZgogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIocmVzdWx0KTsKIH0KQEAgLTE0Miw3ICsxNDIsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUZh
c3RBcml0aF9vcF9iaXRhbmQodW5zCiB7CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW1tZWRp
YXRlSW50KG9wMSkpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIFg4Njo6
ZWF4KTsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4KTsKKyAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlSW50ZWdlck51bWJlcihYODY6OmVh
eCk7CiAjaWYgVVNFKEFMVEVSTkFURV9KU0lNTUVESUFURSkKICAgICAgICAgaW50MzJfdCBpbW0g
PSBnZXRDb25zdGFudE9wZXJhbmRJbW1lZGlhdGVJbnQob3AxKTsKICAgICAgICAgYW5kUHRyKElt
bTMyKGltbSksIFg4Njo6ZWF4KTsKQEAgLTE1Myw3ICsxNTMsNyBAQCB2b2lkIEpJVDo6Y29tcGls
ZUZhc3RBcml0aF9vcF9iaXRhbmQodW5zCiAjZW5kaWYKICAgICB9IGVsc2UgaWYgKGlzT3BlcmFu
ZENvbnN0YW50SW1tZWRpYXRlSW50KG9wMikpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDEsIFg4Njo6ZWF4KTsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVt
KFg4Njo6ZWF4KTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlSW50ZWdl
ck51bWJlcihYODY6OmVheCk7CiAjaWYgVVNFKEFMVEVSTkFURV9KU0lNTUVESUFURSkKICAgICAg
ICAgaW50MzJfdCBpbW0gPSBnZXRDb25zdGFudE9wZXJhbmRJbW1lZGlhdGVJbnQob3AyKTsKICAg
ICAgICAgYW5kUHRyKEltbTMyKGltbSksIFg4Njo6ZWF4KTsKQEAgLTE2NSw3ICsxNjUsNyBAQCB2
b2lkIEpJVDo6Y29tcGlsZUZhc3RBcml0aF9vcF9iaXRhbmQodW5zCiAgICAgfSBlbHNlIHsKICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCBYODY6OmVheCwgb3AyLCBYODY6OmVk
eCk7CiAgICAgICAgIGFuZFB0cihYODY6OmVkeCwgWDg2OjplYXgpOwotICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplYXgpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbW1lZGlhdGVJbnRlZ2VyTnVtYmVyKFg4Njo6ZWF4KTsKICAgICB9CiAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQpOwogfQpAQCAtMTg5LDggKzE4OSw4IEBAIHZvaWQgSklU
Ojpjb21waWxlRmFzdEFyaXRoU2xvd19vcF9iaXRhbmQKIHZvaWQgSklUOjpjb21waWxlRmFzdEFy
aXRoX29wX21vZCh1bnNpZ25lZCByZXN1bHQsIHVuc2lnbmVkIG9wMSwgdW5zaWduZWQgb3AyKQog
ewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwgWDg2OjplYXgsIG9wMiwgWDg2Ojpl
Y3gpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCk7Ci0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWN4KTsKKyAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbW1lZGlhdGVJbnRlZ2VyTnVtYmVyKFg4Njo6ZWF4KTsKKyAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyTnVtYmVyKFg4Njo6ZWN4KTsKICNpZiBVU0UoQUxURVJO
QVRFX0pTSU1NRURJQVRFKQogICAgIGFkZFNsb3dDYXNlKGplUHRyKFg4Njo6ZWN4LCBJbW1QdHIo
SlNWYWx1ZVB0cjo6ZW5jb2RlKGpzMCgpKSkpKTsKICAgICBtb2QzMihYODY6OmVjeCwgWDg2Ojpl
YXgsIFg4Njo6ZWR4KTsKQEAgLTIzMiw3ICsyMzIsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUZhc3RB
cml0aF9vcF9hZGQoSW5zdHJ1CiAKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJ
bnQob3AxKSkgewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgWDg2OjplYXgp
OwotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplYXgpOworICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyTnVtYmVyKFg4Njo6ZWF4KTsK
ICNpZiBVU0UoQUxURVJOQVRFX0pTSU1NRURJQVRFKQogICAgICAgICAvLyBGSVhNRTogaW52ZXN0
aWdhdGUgcGVyZm9ybWluZyBhIDMxLWJpdCBhZGQgaGVyZSAoY2FuIHdlIHByZXNlcnZlIHVwcGVy
IGJpdCAmIGRldGVjdCBvdmVyZmxvdyBmcm9tIGxvdyB3b3JkIHRvIGhpZ2g/KQogICAgICAgICAv
LyAgICAgICAgKG9yLCBkZXRlY3QgY2Fycnk/IC0gaWYgY29uc3QgaXMgcG9zaXRpdmUsIHdpbGwg
b25seSBjYXJyeSB3aGVuIG92ZXJmbG93aW5nIGZyb20gbmVnYXRpdmUgdG8gcG9zaXRpdmU/KQpA
QCAtMjQ1LDcgKzI0NSw3IEBAIHZvaWQgSklUOjpjb21waWxlRmFzdEFyaXRoX29wX2FkZChJbnN0
cnUKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQpOwogICAgIH0gZWxzZSBp
ZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AyKSkgewogICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wMSwgWDg2OjplYXgpOwotICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbW1OdW0oWDg2OjplYXgpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1l
ZGlhdGVJbnRlZ2VyTnVtYmVyKFg4Njo6ZWF4KTsKICNpZiBVU0UoQUxURVJOQVRFX0pTSU1NRURJ
QVRFKQogICAgICAgICBlbWl0RmFzdEFyaXRoSW1tVG9JbnQoWDg2OjplYXgpOwogICAgICAgICBh
ZGRTbG93Q2FzZShqb0FkZDMyKEltbTMyKGdldENvbnN0YW50T3BlcmFuZEltbWVkaWF0ZUludChv
cDIpKSwgWDg2OjplYXgpKTsKQEAgLTMyMiw3ICszMjIsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUZh
c3RBcml0aF9vcF9tdWwoSW5zdHJ1CiAgICAgaW50MzJfdCB2YWx1ZTsKICAgICBpZiAoaXNPcGVy
YW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AxKSAmJiAoKHZhbHVlID0gZ2V0Q29uc3RhbnRPcGVy
YW5kSW1tZWRpYXRlSW50KG9wMSkpID4gMCkpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDIsIFg4Njo6ZWF4KTsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVt
KFg4Njo6ZWF4KTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlSW50ZWdl
ck51bWJlcihYODY6OmVheCk7CiAjaWYgVVNFKEFMVEVSTkFURV9KU0lNTUVESUFURSkKICAgICAg
ICAgYWRkU2xvd0Nhc2Uoam9NdWwzMihJbW0zMih2YWx1ZSksIFg4Njo6ZWF4LCBYODY6OmVheCkp
OwogI2Vsc2UKQEAgLTMzNCw3ICszMzQsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUZhc3RBcml0aF9v
cF9tdWwoSW5zdHJ1CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0KTsKICAg
ICB9IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KG9wMikgJiYgKCh2YWx1
ZSA9IGdldENvbnN0YW50T3BlcmFuZEltbWVkaWF0ZUludChvcDIpKSA+IDApKSB7CiAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBYODY6OmVheCk7Ci0gICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEltbWVkaWF0ZUludGVnZXJOdW1iZXIoWDg2OjplYXgpOwogI2lmIFVTRShBTFRFUk5BVEVf
SlNJTU1FRElBVEUpCiAgICAgICAgIGFkZFNsb3dDYXNlKGpvTXVsMzIoSW1tMzIodmFsdWUpLCBY
ODY6OmVheCwgWDg2OjplYXgpKTsKICNlbHNlCkBAIC0zNzAsNyArMzcwLDcgQEAgdm9pZCBKSVQ6
OmNvbXBpbGVGYXN0QXJpdGhfb3BfcG9zdF9pbmModQogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjRHN0LCBYODY6OmVheCk7CiAgICAgbW92ZShYODY6OmVheCwgWDg2OjplZHgpOwot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCk7CisgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SW1tZWRpYXRlSW50ZWdlck51bWJlcihYODY6OmVheCk7CiAjaWYgVVNFKEFM
VEVSTkFURV9KU0lNTUVESUFURSkKICAgICBhZGRTbG93Q2FzZShqb0FkZDMyKEltbTMyKDEpLCBY
ODY6OmVkeCkpOwogICAgIGVtaXRGYXN0QXJpdGhJbnRUb0ltbU5vQ2hlY2soWDg2OjplZHgsIFg4
Njo6ZWR4KTsKQEAgLTM5NSw3ICszOTUsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUZhc3RBcml0aF9v
cF9wb3N0X2RlYyh1CiB7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIFg4Njo6
ZWF4KTsKICAgICBtb3ZlKFg4Njo6ZWF4LCBYODY6OmVkeCk7Ci0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SW1tTnVtKFg4Njo6ZWF4KTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlh
dGVJbnRlZ2VyTnVtYmVyKFg4Njo6ZWF4KTsKICNpZiBVU0UoQUxURVJOQVRFX0pTSU1NRURJQVRF
KQogICAgIGFkZFNsb3dDYXNlKGpvU3ViMzIoSW1tMzIoMSksIFg4Njo6ZWR4KSk7CiAgICAgZW1p
dEZhc3RBcml0aEludFRvSW1tTm9DaGVjayhYODY6OmVkeCwgWDg2OjplZHgpOwpAQCAtNDE5LDcg
KzQxOSw3IEBAIHZvaWQgSklUOjpjb21waWxlRmFzdEFyaXRoU2xvd19vcF9wb3N0X2QKIHZvaWQg
SklUOjpjb21waWxlRmFzdEFyaXRoX29wX3ByZV9pbmModW5zaWduZWQgc3JjRHN0KQogewogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCBYODY6OmVheCk7Ci0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4KTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bW1lZGlhdGVJbnRlZ2VyTnVtYmVyKFg4Njo6ZWF4KTsKICNpZiBVU0UoQUxURVJOQVRFX0pTSU1N
RURJQVRFKQogICAgIC8vIEZJWE1FOiBDb3VsZCBhZGQgcHRyICYgc3BlY2lmeSBpbnQ2NDsgbm8g
bmVlZCB0byByZS1zaWduLWV4dGVuZD8KICAgICBhZGRTbG93Q2FzZShqb0FkZDMyKEltbTMyKDEp
LCBYODY6OmVheCkpOwpAQCAtNDQ0LDcgKzQ0NCw3IEBAIHZvaWQgSklUOjpjb21waWxlRmFzdEFy
aXRoU2xvd19vcF9wcmVfaW4KIHZvaWQgSklUOjpjb21waWxlRmFzdEFyaXRoX29wX3ByZV9kZWMo
dW5zaWduZWQgc3JjRHN0KQogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCBY
ODY6OmVheCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4KTsKKyAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyTnVtYmVyKFg4Njo6ZWF4KTsK
ICNpZiBVU0UoQUxURVJOQVRFX0pTSU1NRURJQVRFKQogICAgIGFkZFNsb3dDYXNlKGpvU3ViMzIo
SW1tMzIoMSksIFg4Njo6ZWF4KSk7CiAgICAgZW1pdEZhc3RBcml0aEludFRvSW1tTm9DaGVjayhY
ODY6OmVheCwgWDg2OjplYXgpOwpAQCAtNTQ3LDcgKzU0Nyw3IEBAIHZvaWQgSklUOjpwdXREb3Vi
bGVSZXN1bHRUb0pTTnVtYmVyQ2VsbE8KICAgICBfXyBzYXJsX2k4cigxLCB0ZW1wUmVnMSk7CiAg
ICAgX18gY3Z0c2kyc2RfcnIodGVtcFJlZzEsIHRlbXBYbW0pOwogICAgIC8vIENvbXBhcmUgJiBi
cmFuY2ggaWYgaW1tZWRpYXRlLiAKLSAgICBfXyB1Y29taXNfcnIodGVtcFhtbSwgeG1tU291cmNl
KTsKKyAgICBfXyB1Y29taXNkX3JyKHRlbXBYbW0sIHhtbVNvdXJjZSk7CiAgICAgSm1wU3JjIHJl
c3VsdElzSW1tID0gX18gamUoKTsKICAgICBKbXBEc3QgcmVzdWx0TG9va2VkTGlrZUltbUJ1dEFj
dHVhbGx5SXNudCA9IF9fIGxhYmVsKCk7CiAgICAgCkBAIC01ODQsNyArNTg0LDcgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVCaW5hcnlBcml0aE9wKE9wY29kZUlEIAogICAgICAgICBBU1NFUlQodHlwZXMu
c2Vjb25kKCkubWlnaHRCZU51bWJlcigpKTsKIAogICAgICAgICAvLyBDaGVjayBvcDIgaXMgYSBu
dW1iZXIKLSAgICAgICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnVHlwZUludGVnZXIs
IFg4Njo6ZWR4KTsKKyAgICAgICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnVHlwZU51
bWJlciwgWDg2OjplZHgpOwogICAgICAgICBKbXBTcmMgb3AyaW1tID0gX18gam5lKCk7CiAgICAg
ICAgIGlmICghdHlwZXMuc2Vjb25kKCkuZGVmaW5pdGVseUlzTnVtYmVyKCkpIHsKICAgICAgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChYODY6OmVkeCwgc3JjMik7CkBAIC01OTQs
NyArNTk0LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVCaW5hcnlBcml0aE9wKE9wY29kZUlEIAogCiAg
ICAgICAgIC8vICgxKSBJbiB0aGlzIGNhc2Ugc3JjMiBpcyBhIHJldXNhYmxlIG51bWJlciBjZWxs
LgogICAgICAgICAvLyAgICAgU2xvdyBjYXNlIGlmIHNyYzEgaXMgbm90IGEgbnVtYmVyIHR5cGUu
Ci0gICAgICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ1R5cGVJbnRlZ2VyLCBYODY6
OmVheCk7CisgICAgICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ1R5cGVOdW1iZXIs
IFg4Njo6ZWF4KTsKICAgICAgICAgSm1wU3JjIG9wMWltbSA9IF9fIGpuZSgpOwogICAgICAgICBp
ZiAoIXR5cGVzLmZpcnN0KCkuZGVmaW5pdGVseUlzTnVtYmVyKCkpIHsKICAgICAgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChYODY6OmVheCwgc3JjMSk7CkBAIC02MjYsMTIgKzYy
NiwxMiBAQCB2b2lkIEpJVDo6Y29tcGlsZUJpbmFyeUFyaXRoT3AoT3Bjb2RlSUQgCiAgICAgICAg
IC8vICgyKSBUaGlzIGhhbmRsZXMgY2FzZXMgd2hlcmUgc3JjMiBpcyBhbiBpbW1lZGlhdGUgbnVt
YmVyLgogICAgICAgICAvLyAgICAgVHdvIHNsb3cgY2FzZXMgLSBlaXRoZXIgc3JjMSBpc24ndCBh
biBpbW1lZGlhdGUsIG9yIHRoZSBzdWJ0cmFjdCBvdmVyZmxvd3MuCiAgICAgICAgIF9fIGxpbmso
b3AyaW1tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVt
KFg4Njo6ZWF4KTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlSW50ZWdl
ck51bWJlcihYODY6OmVheCk7CiAgICAgfSBlbHNlIGlmICh0eXBlcy5maXJzdCgpLmlzUmV1c2Fi
bGUoKSAmJiBpc1NTRTJQcmVzZW50KCkpIHsKICAgICAgICAgQVNTRVJUKHR5cGVzLmZpcnN0KCku
bWlnaHRCZU51bWJlcigpKTsKIAogICAgICAgICAvLyBDaGVjayBvcDEgaXMgYSBudW1iZXIKLSAg
ICAgICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnVHlwZUludGVnZXIsIFg4Njo6ZWF4
KTsKKyAgICAgICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnVHlwZU51bWJlciwgWDg2
OjplYXgpOwogICAgICAgICBKbXBTcmMgb3AxaW1tID0gX18gam5lKCk7CiAgICAgICAgIGlmICgh
dHlwZXMuZmlyc3QoKS5kZWZpbml0ZWx5SXNOdW1iZXIoKSkgewogICAgICAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKFg4Njo6ZWF4LCBzcmMxKTsKQEAgLTY0MSw3ICs2NDEsNyBA
QCB2b2lkIEpJVDo6Y29tcGlsZUJpbmFyeUFyaXRoT3AoT3Bjb2RlSUQgCiAKICAgICAgICAgLy8g
KDEpIEluIHRoaXMgY2FzZSBzcmMxIGlzIGEgcmV1c2FibGUgbnVtYmVyIGNlbGwuCiAgICAgICAg
IC8vICAgICBTbG93IGNhc2UgaWYgc3JjMiBpcyBub3QgYSBudW1iZXIgdHlwZS4KLSAgICAgICAg
X18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnVHlwZUludGVnZXIsIFg4Njo6ZWR4KTsKKyAg
ICAgICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnVHlwZU51bWJlciwgWDg2OjplZHgp
OwogICAgICAgICBKbXBTcmMgb3AyaW1tID0gX18gam5lKCk7CiAgICAgICAgIGlmICghdHlwZXMu
c2Vjb25kKCkuZGVmaW5pdGVseUlzTnVtYmVyKCkpIHsKICAgICAgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChYODY6OmVkeCwgc3JjMik7CkBAIC02NzYsOSArNjc2LDkgQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVCaW5hcnlBcml0aE9wKE9wY29kZUlEIAogICAgICAgICAvLyAoMikgVGhp
cyBoYW5kbGVzIGNhc2VzIHdoZXJlIHNyYzEgaXMgYW4gaW1tZWRpYXRlIG51bWJlci4KICAgICAg
ICAgLy8gICAgIFR3byBzbG93IGNhc2VzIC0gZWl0aGVyIHNyYzIgaXNuJ3QgYW4gaW1tZWRpYXRl
LCBvciB0aGUgc3VidHJhY3Qgb3ZlcmZsb3dzLgogICAgICAgICBfXyBsaW5rKG9wMWltbSwgX18g
bGFiZWwoKSk7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVkeCk7
CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXJOdW1iZXIoWDg2
OjplZHgpOwogICAgIH0gZWxzZQotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW1z
KFg4Njo6ZWF4LCBYODY6OmVkeCwgWDg2OjplY3gpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbW1lZGlhdGVJbnRlZ2VyTnVtYmVycyhYODY6OmVheCwgWDg2OjplZHgsIFg4Njo6ZWN4
KTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9hZGQpIHsKICAgICAgICAgZW1pdEZhc3RBcml0
aERlVGFnSW1tZWRpYXRlKFg4Njo6ZWF4KTsKSW5kZXg6IGppdC9KSVRJbmxpbmVNZXRob2RzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gaml0L0pJVElubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMzk5NTUpCisr
KyBqaXQvSklUSW5saW5lTWV0aG9kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzAsNiArMjcwLDEz
IEBAIEFMV0FZU19JTkxJTkUgSklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJZkoKICNlbmRpZgogfQog
CitBTFdBWVNfSU5MSU5FIEpJVDo6SnVtcCBKSVQ6OmVtaXRKdW1wSWZCb3RoSlNDZWxscyhSZWdp
c3RlcklEIHJlZzEsIFJlZ2lzdGVySUQgcmVnMiwgUmVnaXN0ZXJJRCBzY3JhdGNoKQoreworICAg
IG1vdmUocmVnMSwgc2NyYXRjaCk7CisgICAgb3JQdHIocmVnMiwgc2NyYXRjaCk7CisgICAgcmV0
dXJuIGVtaXRKdW1wSWZKU0NlbGwoc2NyYXRjaCk7Cit9CisKIEFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZkpTQ2VsbChSZWdpc3RlcklEIHJlZykKIHsKICAgICBhZGRT
bG93Q2FzZShlbWl0SnVtcElmSlNDZWxsKHJlZykpOwpAQCAtMzAxLDQwICszMDgsNjEgQEAgQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZObwogICAgICAgICBsaW5rU2xvd0Nh
c2UoaXRlcik7CiB9CiAKLUFMV0FZU19JTkxJTkUgSklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJZklt
bU51bShSZWdpc3RlcklEIHJlZykKKyNpZiBVU0UoQUxURVJOQVRFX0pTSU1NRURJQVRFKQorQUxX
QVlTX0lOTElORSBKSVQ6Okp1bXAgSklUOjplbWl0SnVtcElmRWl0aGVyTnVtYmVyKFJlZ2lzdGVy
SUQgcmVnKQoreworICAgIHJldHVybiBqbnpQdHIocmVnLCBJbW1QdHIocmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oSlNJbW1lZGlhdGU6OlRhZ1R5cGVOdW1iZXIpKSk7Cit9CitBTFdBWVNfSU5MSU5F
IEpJVDo6SnVtcCBKSVQ6OmVtaXRKdW1wSWZOb3RFaXRoZXJOdW1iZXIoUmVnaXN0ZXJJRCByZWcp
Cit7CisgICAgcmV0dXJuIGp6UHRyKHJlZywgSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KEpTSW1tZWRpYXRlOjpUYWdUeXBlTnVtYmVyKSkpOworfQorI2VuZGlmCisKK0FMV0FZU19JTkxJ
TkUgSklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJZkltbWVkaWF0ZUludGVnZXJOdW1iZXIoUmVnaXN0
ZXJJRCByZWcpCiB7CiAjaWYgVVNFKEFMVEVSTkFURV9KU0lNTUVESUFURSkKLSAgICByZXR1cm4g
amFlUHRyKHJlZywgSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEpTSW1tZWRpYXRlOjpU
YWdUeXBlSW50ZWdlcikpKTsKKyAgICByZXR1cm4gamFlUHRyKHJlZywgSW1tUHRyKHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KEpTSW1tZWRpYXRlOjpUYWdUeXBlTnVtYmVyKSkpOwogI2Vsc2UKLSAg
ICByZXR1cm4gam56MzIocmVnLCBJbW0zMihKU0ltbWVkaWF0ZTo6VGFnVHlwZUludGVnZXIpKTsK
KyAgICByZXR1cm4gam56MzIocmVnLCBJbW0zMihKU0ltbWVkaWF0ZTo6VGFnVHlwZU51bWJlcikp
OwogI2VuZGlmCiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEltbU51bShSZWdpc3RlcklEIHJlZykKK0FMV0FZU19JTkxJTkUgSklUOjpKdW1wIEpJVDo6
ZW1pdEp1bXBJZk5vdEltbWVkaWF0ZUludGVnZXJOdW1iZXIoUmVnaXN0ZXJJRCByZWcpCiB7CiAj
aWYgVVNFKEFMVEVSTkFURV9KU0lNTUVESUFURSkKLSAgICBhZGRTbG93Q2FzZShqYlB0cihyZWcs
IEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihKU0ltbWVkaWF0ZTo6VGFnVHlwZUludGVn
ZXIpKSkpOworICAgIHJldHVybiBqYlB0cihyZWcsIEltbVB0cihyZWludGVycHJldF9jYXN0PHZv
aWQqPihKU0ltbWVkaWF0ZTo6VGFnVHlwZU51bWJlcikpKTsKICNlbHNlCi0gICAgYWRkU2xvd0Nh
c2UoanozMihyZWcsIEltbTMyKEpTSW1tZWRpYXRlOjpUYWdUeXBlSW50ZWdlcikpKTsKKyAgICBy
ZXR1cm4ganozMihyZWcsIEltbTMyKEpTSW1tZWRpYXRlOjpUYWdUeXBlTnVtYmVyKSk7CiAjZW5k
aWYKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1t
TnVtcyhSZWdpc3RlcklEIHJlZzEsIFJlZ2lzdGVySUQgcmVnMiwgUmVnaXN0ZXJJRCBzY3JhdGNo
KQorQUxXQVlTX0lOTElORSBKSVQ6Okp1bXAgSklUOjplbWl0SnVtcElmTm90SW1tZWRpYXRlSW50
ZWdlck51bWJlcnMoUmVnaXN0ZXJJRCByZWcxLCBSZWdpc3RlcklEIHJlZzIsIFJlZ2lzdGVySUQg
c2NyYXRjaCkKIHsKICAgICBtb3ZlKHJlZzEsIHNjcmF0Y2gpOwogICAgIGFuZFB0cihyZWcyLCBz
Y3JhdGNoKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oc2NyYXRjaCk7CisgICAg
cmV0dXJuIGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVJbnRlZ2VyTnVtYmVyKHNjcmF0Y2gpOworfQor
CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJ
bnRlZ2VyTnVtYmVyKFJlZ2lzdGVySUQgcmVnKQoreworICAgIGFkZFNsb3dDYXNlKGVtaXRKdW1w
SWZOb3RJbW1lZGlhdGVJbnRlZ2VyTnVtYmVyKHJlZykpOworfQorCitBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyTnVtYmVycyhSZWdp
c3RlcklEIHJlZzEsIFJlZ2lzdGVySUQgcmVnMiwgUmVnaXN0ZXJJRCBzY3JhdGNoKQoreworICAg
IGFkZFNsb3dDYXNlKGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVJbnRlZ2VyTnVtYmVycyhyZWcxLCBy
ZWcyLCBzY3JhdGNoKSk7CiB9CiAKICNpZiAhVVNFKEFMVEVSTkFURV9KU0lNTUVESUFURSkKIEFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRGYXN0QXJpdGhEZVRhZ0ltbWVkaWF0ZShSZWdpc3Rl
cklEIHJlZykKIHsKLSAgICBzdWJQdHIoSW1tMzIoSlNJbW1lZGlhdGU6OlRhZ1R5cGVJbnRlZ2Vy
KSwgcmVnKTsKKyAgICBzdWJQdHIoSW1tMzIoSlNJbW1lZGlhdGU6OlRhZ1R5cGVOdW1iZXIpLCBy
ZWcpOwogfQogCiBBTFdBWVNfSU5MSU5FIEpJVDo6SnVtcCBKSVQ6OmVtaXRGYXN0QXJpdGhEZVRh
Z0ltbWVkaWF0ZUp1bXBJZlplcm8oUmVnaXN0ZXJJRCByZWcpCiB7Ci0gICAgcmV0dXJuIGp6U3Vi
UHRyKEltbTMyKEpTSW1tZWRpYXRlOjpUYWdUeXBlSW50ZWdlciksIHJlZyk7CisgICAgcmV0dXJu
IGp6U3ViUHRyKEltbTMyKEpTSW1tZWRpYXRlOjpUYWdUeXBlTnVtYmVyKSwgcmVnKTsKIH0KICNl
bmRpZgogCkBAIC0zNDUsNyArMzczLDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEZh
c3RBcml0aFJlVAogI2Vsc2UKICAgICBpZiAoc3JjICE9IGRlc3QpCiAgICAgICAgIG1vdmUoc3Jj
LCBkZXN0KTsKLSAgICBhZGRQdHIoSW1tMzIoSlNJbW1lZGlhdGU6OlRhZ1R5cGVJbnRlZ2VyKSwg
ZGVzdCk7CisgICAgYWRkUHRyKEltbTMyKEpTSW1tZWRpYXRlOjpUYWdUeXBlTnVtYmVyKSwgZGVz
dCk7CiAjZW5kaWYKIH0KIApAQCAtMzY0LDcgKzM5Miw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmVtaXRGYXN0QXJpdGhJbnQKICNpZiBVU0UoQUxURVJOQVRFX0pTSU1NRURJQVRFKQogICAg
IGlmIChzcmMgIT0gZGVzdCkKICAgICAgICAgbW92ZShzcmMsIGRlc3QpOwotICAgIG9yUHRyKElt
bVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihKU0ltbWVkaWF0ZTo6VGFnVHlwZUludGVnZXIp
KSwgZGVzdCk7CisgICAgb3JQdHIoSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEpTSW1t
ZWRpYXRlOjpUYWdUeXBlTnVtYmVyKSksIGRlc3QpOwogI2Vsc2UKICAgICBzaWduRXh0ZW5kMzJU
b1B0cihzcmMsIGRlc3QpOwogICAgIGFkZFB0cihkZXN0LCBkZXN0KTsKSW5kZXg6IHJ1bnRpbWUv
SlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMzk5NTUp
CisrKyBydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksMTEgKzEyOSw2IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gSGVhcDo6aXNOdW1iZXIoY29uc3RfY2Fz
dDxKU0NlbGwqPih0aGlzKSk7CiAgICAgfQogCi0gICAgaW5saW5lIGJvb2wgSlNWYWx1ZVB0cjo6
aXNOdW1iZXJDZWxsKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBpc0NlbGwoKSAmJiBh
c0NlbGwoKS0+aXNOdW1iZXIoKTsKLSAgICB9Ci0KICAgICBpbmxpbmUgYm9vbCBKU0NlbGw6Omlz
T2JqZWN0KCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX3N0cnVjdHVyZS0+dHlwZUlu
Zm8oKS50eXBlKCkgPT0gT2JqZWN0VHlwZTsKQEAgLTE3NiwxMSArMTcxLDYgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICAvLyAtLS0gSlNWYWx1ZSBpbmxpbmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KIAotICAgIGlubGluZSBib29sIEpTVmFsdWVQdHI6OmlzTnVtYmVyKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBKU0ltbWVkaWF0ZTo6aXNOdW1iZXIoYXNWYWx1ZSgpKSB8
fCAoaXNDZWxsKCkgJiYgYXNDZWxsKCktPmlzTnVtYmVyKCkpOwotICAgIH0KLQogICAgIGlubGlu
ZSBib29sIEpTVmFsdWVQdHI6OmlzU3RyaW5nKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVy
biAhSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKGFzVmFsdWUoKSkgJiYgYXNDZWxsKCktPmlzU3Ry
aW5nKCk7CkluZGV4OiBydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcnVu
dGltZS9KU0dsb2JhbERhdGEuY3BwCShyZXZpc2lvbiAzOTk1NSkKKysrIHJ1bnRpbWUvSlNHbG9i
YWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCBKU0dsb2JhbERhdGE6
OkpTR2xvYmFsRGF0YShib29sIGlzU2hhcmVkCiAgICAgLCBzdHJpbmdTdHJ1Y3R1cmUoSlNTdHJp
bmc6OmNyZWF0ZVN0cnVjdHVyZShqc051bGwoKSkpCiAgICAgLCBub3RBbk9iamVjdEVycm9yU3R1
YlN0cnVjdHVyZShKU05vdEFuT2JqZWN0RXJyb3JTdHViOjpjcmVhdGVTdHJ1Y3R1cmUoanNOdWxs
KCkpKQogICAgICwgbm90QW5PYmplY3RTdHJ1Y3R1cmUoSlNOb3RBbk9iamVjdDo6Y3JlYXRlU3Ry
dWN0dXJlKGpzTnVsbCgpKSkKLSAgICAsIG51bWJlclN0cnVjdHVyZShKU051bWJlckNlbGw6OmNy
ZWF0ZVN0cnVjdHVyZShqc051bGwoKSkpCisgICAgLCBudW1iZXJTdHJ1Y3R1cmUoY3JlYXRlTnVt
YmVyU3RydWN0dXJlKGpzTnVsbCgpKSkKICAgICAsIGlkZW50aWZpZXJUYWJsZShjcmVhdGVJZGVu
dGlmaWVyVGFibGUoKSkKICAgICAsIHByb3BlcnR5TmFtZXMobmV3IENvbW1vbklkZW50aWZpZXJz
KHRoaXMpKQogICAgICwgZW1wdHlMaXN0KG5ldyBBcmdMaXN0KQpJbmRleDogcnVudGltZS9KU0lt
bWVkaWF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gcnVudGltZS9KU0ltbWVkaWF0ZS5jcHAJKHJldmlz
aW9uIDM5OTU1KQorKysgcnVudGltZS9KU0ltbWVkaWF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDcgKzM2LDcgQEAgSlNPYmplY3QqIEpTSW1tZWRpYXRlOjp0b1RoaXNPYmplY3QoSlNWYQog
ewogICAgIEFTU0VSVChpc0ltbWVkaWF0ZSh2KSk7CiAgICAgaWYgKGlzTnVtYmVyKHYpKQotICAg
ICAgICByZXR1cm4gY29uc3RydWN0TnVtYmVyRnJvbUltbWVkaWF0ZU51bWJlcihleGVjLCB2KTsK
KyAgICAgICAgcmV0dXJuIGNvbnN0cnVjdE51bWJlcihleGVjLCB2KTsKICAgICBpZiAoaXNCb29s
ZWFuKHYpKQogICAgICAgICByZXR1cm4gY29uc3RydWN0Qm9vbGVhbkZyb21JbW1lZGlhdGVCb29s
ZWFuKGV4ZWMsIHYpOwogICAgIGlmICh2LT5pc051bGwoKSkKQEAgLTUxLDcgKzUxLDcgQEAgSlNP
YmplY3QqIEpTSW1tZWRpYXRlOjp0b09iamVjdChKU1ZhbHVlUAogewogICAgIEFTU0VSVChpc0lt
bWVkaWF0ZSh2KSk7CiAgICAgaWYgKGlzTnVtYmVyKHYpKQotICAgICAgICByZXR1cm4gY29uc3Ry
dWN0TnVtYmVyRnJvbUltbWVkaWF0ZU51bWJlcihleGVjLCB2KTsKKyAgICAgICAgcmV0dXJuIGNv
bnN0cnVjdE51bWJlcihleGVjLCB2KTsKICAgICBpZiAoaXNCb29sZWFuKHYpKQogICAgICAgICBy
ZXR1cm4gY29uc3RydWN0Qm9vbGVhbkZyb21JbW1lZGlhdGVCb29sZWFuKGV4ZWMsIHYpOwogICAg
IApAQCAtNzYsOCArNzYsMTkgQEAgSlNPYmplY3QqIEpTSW1tZWRpYXRlOjpwcm90b3R5cGUoSlNW
YWx1ZQogVVN0cmluZyBKU0ltbWVkaWF0ZTo6dG9TdHJpbmcoSlNWYWx1ZVB0ciB2KQogewogICAg
IEFTU0VSVChpc0ltbWVkaWF0ZSh2KSk7Ci0gICAgaWYgKGlzTnVtYmVyKHYpKQorICAgIGlmIChp
c0ludGVnZXJOdW1iZXIodikpCiAgICAgICAgIHJldHVybiBVU3RyaW5nOjpmcm9tKGdldFRydW5j
YXRlZEludDMyKHYpKTsKKyNpZiBVU0UoQUxURVJOQVRFX0pTSU1NRURJQVRFKQorICAgIGlmIChp
c051bWJlcih2KSkgeworICAgICAgICBBU1NFUlQoaXNEb3VibGVOdW1iZXIodikpOworICAgICAg
ICBkb3VibGUgdmFsdWUgPSBkb3VibGVWYWx1ZSh2KTsKKyAgICAgICAgaWYgKHZhbHVlID09IDAu
MCkgLy8gKzAuMCBvciAtMC4wCisgICAgICAgICAgICByZXR1cm4gIjAiOworICAgICAgICByZXR1
cm4gVVN0cmluZzo6ZnJvbSh2YWx1ZSk7CisgICAgfQorI2Vsc2UKKyAgICAgICAgQVNTRVJUKCFp
c051bWJlcih2KSk7CisjZW5kaWYKICAgICBpZiAoanNCb29sZWFuKGZhbHNlKSA9PSB2KQogICAg
ICAgICByZXR1cm4gImZhbHNlIjsKICAgICBpZiAoanNCb29sZWFuKHRydWUpID09IHYpCkluZGV4
OiBydW50aW1lL0pTSW1tZWRpYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcnVudGltZS9KU0ltbWVkaWF0
ZS5oCShyZXZpc2lvbiAzOTk1NSkKKysrIHJ1bnRpbWUvSlNJbW1lZGlhdGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNjgsNiArNjgsMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgSlNWYWx1ZVB0ciBq
c051bWJlcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIHVuc2lnbmVkIGxvbmcgbG9uZyBpKTsK
IAogICAgIC8qCisgICAgICogQysrJ3MgaWRlYSBvZiBhIHJlaW50ZXJwcmV0X2Nhc3QgbGFja3Mg
c3VmZmljaWVudCBjb2pvbmVzLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRPLCB0
eXBlbmFtZSBGUk9NPgorICAgIFRPIHd0Zl9yZWludGVycHJldF9jYXN0KEZST00gaW4pCisgICAg
eworICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoVE8pID09IHNpemVvZihGUk9NKSwgV1RG
X3d0Zl9yZWludGVycHJldF9jYXN0X3NpemVvZl90eXBlc19pc19lcXVhbCk7CisgICAgICAgIHVu
aW9uIHsKKyAgICAgICAgICAgIEZST00gZnJvbTsKKyAgICAgICAgICAgIFRPIHRvOworICAgICAg
ICB9IHU7CisgICAgICAgIHUuZnJvbSA9IGluOworICAgICAgICByZXR1cm4gdS50bzsKKyAgICB9
CisKKyAgICAvKgogICAgICAqIEEgSlNWYWx1ZSogaXMgZWl0aGVyIGEgcG9pbnRlciB0byBhIGNl
bGwgKGEgaGVhcC1hbGxvY2F0ZWQgb2JqZWN0KSBvciBhbiBpbW1lZGlhdGUgKGEgdHlwZS10YWdn
ZWQgCiAgICAgICogdmFsdWUgbWFzcXVlcmFkaW5nIGFzIGEgcG9pbnRlcikuIFRoZSBsb3cgdHdv
IGJpdHMgaW4gYSBKU1ZhbHVlKiBhcmUgYXZhaWxhYmxlIGZvciB0eXBlIHRhZ2dpbmcKICAgICAg
KiBiZWNhdXNlIGFsbG9jYXRvciBhbGlnbm1lbnQgZ3VhcmFudGVlcyB0aGV5IHdpbGwgYmUgMDAg
aW4gY2VsbCBwb2ludGVycy4KQEAgLTExMSwxNCArMTI2LDMzIEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgLyoKICAgICAgKiBPbiA2NC1iaXQgcGxhdGZvcm1zLCB3ZSBzdXBwb3J0IGFuIGFsdGVy
bmF0aXZlIGVuY29kaW5nIGZvcm0gZm9yIGltbWVkaWF0ZXMsIGlmCi0gICAgICogVVNFKEFMVEVS
TkFURV9KU0lNTUVESUFURSkgaXMgZGVmaW5lZC4KKyAgICAgKiBVU0UoQUxURVJOQVRFX0pTSU1N
RURJQVRFKSBpcyBkZWZpbmVkLiAgV2hlbiB0aGlzIGZvcm1hdCBpcyB1c2VkLCBkb3VibGUgcHJl
Y2lzaW9uCisgICAgICogZmxvYXRpbmcgcG9pbnQgdmFsdWVzIG1heSBhbHNvIGJlIGVuY29kZWQg
YXMgSlNJbW1lZGlhdGVzLgogICAgICAqCi0gICAgICogVGhlIHRvcCAxNi1iaXRzIGRlbm90ZSB0
aGUgdHlwZToKKyAgICAgKiBUaGUgZW5jb2RpbmcgbWFrZXMgdXNlIG9mIHVudXNlZCBOYU4gc3Bh
Y2UgaW4gdGhlIElFRUU3NTQgcmVwcmVzZW50YXRpb24uICBBbnkgdmFsdWUKKyAgICAgKiB3aXRo
IHRoZSB0b3AgMTMgYml0cyBzZXQgcmVwcmVzZW50cyBhIFFOYU4gKHdpdGggdGhlIHNpZ24gYml0
IHNldCkuICBRTmFOIHZhbHVlcworICAgICAqIGNhbiBlbmNvZGUgYSA1MS1iaXQgcGF5bG9hZC4g
IEhhcmR3YXJlIHByb2R1Y2VkIGFuZCBDLWxpYnJhcnkgcGF5bG9hZHMgdHlwaWNhbGx5CisgICAg
ICogaGF2ZSBhIHBheWxvYWQgb2YgemVyby4gIFdlIGFzc3VtZSB0aGF0IG5vbi16ZXJvIHBheWxv
YWRzIGFyZSBhdmFpbGFibGUgdG8gZW5jb2RlCisgICAgICogcG9pbnRlciBhbmQgaW50ZWdlciB2
YWx1ZXMuICBTaW5jZSBhbnkgNjQtYml0IGJpdCBwYXR0ZXJuIHdoZXJlIHRoZSB0b3AgMTUgYml0
cyBhcmUKKyAgICAgKiBhbGwgc2V0IHJlcHJlc2VudHMgYSBOYU4gd2l0aCBhIG5vbi16ZXJvIHBh
eWxvYWQsIHdlIGNhbiB1c2UgdGhpcyBzcGFjZSBpbiB0aGUgTmFOCisgICAgICogcmFuZ2VzIHRv
IGVuY29kZSBvdGhlciB2YWx1ZXMgKGhvd2V2ZXIgdGhlcmUgYXJlIGFsc28gb3RoZXIgcmFuZ2Vz
IG9mIE5hTiBzcGFjZSB0aGF0CisgICAgICogY291bGQgaGF2ZSBiZWVuIHNlbGVjdGVkKS4gIFRo
aXMgcmFuZ2Ugb2YgTmFOIHNwYWNlIGlzIHJlcHJlc2VudGVkIGJ5IDY0LWJpdCBudW1iZXJzCisg
ICAgICogYmVnaW5pbmcgd2l0aCB0aGUgMTYtYml0IGhleCBwYXR0ZXJucyAweEZGRkUgYW5kIDB4
RkZGRiAtIHdlIHJlbHkgb24gdGhlIGZhY3QgdGhhdCBubworICAgICAqIHZhbGlkIGRvdWJsZS1w
cmVjaXNpb24gbnVtYmVycyB3aWxsIGJlZ2luIGZhbGwgaW4gdGhlc2UgcmFuZ2VzLgorICAgICAq
CisgICAgICogVGhlIHNjaGVtZSB3ZSBoYXZlIGltcGxlbWVudGVkIGVuY29kZXMgZG91YmxlIHBy
ZWNpc2lvbiB2YWx1ZXMgYnkgYWRkaW5nIDJeNDggdG8gdGhlCisgICAgICogNjQtYml0IGludGVn
ZXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIG51bWJlci4gIEFmdGVyIHRoaXMgbWFuaXB1bGF0aW9u
LCBubyBlbmNvZGVkCisgICAgICogZG91YmxlLXByZWNpc2lvbiB2YWx1ZSB3aWxsIGJlZ2luIHdp
dGggdGhlIHBhdHRlcm4gMHgwMDAwIG9yIDB4RkZGRi4KKyAgICAgKgorICAgICAqIFRoZSB0b3Ag
MTYtYml0cyBkZW5vdGUgdGhlIHR5cGUgb2YgdGhlIGVuY29kZWQgSlNJbW1lZGlhdGU6CiAgICAg
ICoKICAgICAgKiBQb2ludGVyOiAwMDAwOlBQUFA6UFBQUDpQUFBQCisgICAgICogICAgICAgICAg
MDAwMToqKioqOioqKio6KioqKgorICAgICAqIERvdWJsZTp7ICAgICAgICAgLi4uCisgICAgICog
ICAgICAgICAgRkZGRToqKioqOioqKio6KioqKgogICAgICAqIEludGVnZXI6IEZGRkY6MDAwMDpJ
SUlJOklJSUkKICAgICAgKgotICAgICAqIDMyLWJpdCBzaWduZWQgaW50ZWdlcnMgYXJlIG1hcmtl
ZCB3aXRoIHRoZSAxNi1iaXQgdGFnICcweEZGRkYnLiAgVGhlIHRhZyAnMHgwMDAwJworICAgICAq
IDMyLWJpdCBzaWduZWQgaW50ZWdlcnMgYXJlIG1hcmtlZCB3aXRoIHRoZSAxNi1iaXQgdGFnIDB4
RkZGRi4gIFRoZSB0YWcgMHgwMDAwCiAgICAgICogZGVub3RlcyBhIHBvaW50ZXIsIG9yIGFub3Ro
ZXIgZm9ybSBvZiB0YWdnZWQgaW1tZWRpYXRlLiAgQm9vbGVhbiwgbnVsbCBhbmQgdW5kZWZpbmVk
CiAgICAgICogdmFsdWVzIGFyZSBlbmNvZGVkIGluIHRoZSBzYW1lIG1hbm5lciBhcyB0aGUgZGVm
YXVsdCBmb3JtYXQuCiAgICAgICovCkBAIC0xNTUsMTIgKzE4OSwxNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgZnJpZW5kIEpTVmFsdWVQdHIganNOdW1iZXIoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhLCB1bnNpZ25lZCBsb25nIGxvbmcgaSk7CiAKICNpZiBVU0UoQUxURVJOQVRFX0pTSU1N
RURJQVRFKQotICAgICAgICBzdGF0aWMgY29uc3QgaW50cHRyX3QgVGFnVHlwZUludGVnZXIgPSAw
eGZmZmYwMDAwMDAwMDAwMDBsbDsgLy8gYm90dG9tIGJpdCBzZXQgaW5kaWNhdGVzIGludGVnZXIs
IHRoaXMgZG9taW5hdGVzIHRoZSBmb2xsb3dpbmcgYml0CisgICAgICAgIC8vIElmIGFsbCBiaXRz
IGluIHRoZSBtYXNrIGFyZSBzZXQsIHRoaXMgaW5kaWNhdGVzIGFuIGludGVnZXIgbnVtYmVyLAor
ICAgICAgICAvLyBpZiBhbnkgYnV0IG5vdCBhbGwgYXJlIHNldCB0aGlzIHZhbHVlIGlzIGEgZG91
YmxlIHByZWNpc2lvbiBudW1iZXIuCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBUYWdU
eXBlTnVtYmVyID0gMHhmZmZmMDAwMDAwMDAwMDAwbGw7CisgICAgICAgIC8vIFRoaXMgdmFsdWUg
aXMgMl40OCwgdXNlZCB0byBlbmNvZGUgZG91YmxlcyBzdWNoIHRoYXQgdGhlIGVuY29kZWQgdmFs
dWUgd2lsbCBiZWdpbgorICAgICAgICAvLyB3aXRoIGEgMTYtYml0IHBhdHRlcm4gd2l0aGluIHRo
ZSByYW5nZSAweDAwMDEuLjB4RkZGRS4KKyAgICAgICAgc3RhdGljIGNvbnN0IGludHB0cl90IERv
dWJsZUVuY29kZU9mZnNldCA9IDB4MTAwMDAwMDAwMDAwMGxsOwogI2Vsc2UKLSAgICAgICAgc3Rh
dGljIGNvbnN0IGludHB0cl90IFRhZ1R5cGVJbnRlZ2VyID0gMHgxOyAvLyBib3R0b20gYml0IHNl
dCBpbmRpY2F0ZXMgaW50ZWdlciwgdGhpcyBkb21pbmF0ZXMgdGhlIGZvbGxvd2luZyBiaXQKKyAg
ICAgICAgc3RhdGljIGNvbnN0IGludHB0cl90IFRhZ1R5cGVOdW1iZXIgPSAweDE7IC8vIGJvdHRv
bSBiaXQgc2V0IGluZGljYXRlcyBpbnRlZ2VyLCB0aGlzIGRvbWluYXRlcyB0aGUgZm9sbG93aW5n
IGJpdAogI2VuZGlmCiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBUYWdCaXRUeXBlT3Ro
ZXIgICA9IDB4MjsgLy8gc2Vjb25kIGJpdCBzZXQgaW5kaWNhdGVzIGltbWVkaWF0ZSBvdGhlciB0
aGFuIGFuIGludGVnZXIKLSAgICAgICAgc3RhdGljIGNvbnN0IGludHB0cl90IFRhZ01hc2sgICAg
ICAgICAgID0gVGFnVHlwZUludGVnZXIgfCBUYWdCaXRUeXBlT3RoZXI7CisgICAgICAgIHN0YXRp
YyBjb25zdCBpbnRwdHJfdCBUYWdNYXNrICAgICAgICAgICA9IFRhZ1R5cGVOdW1iZXIgfCBUYWdC
aXRUeXBlT3RoZXI7CiAKICAgICAgICAgc3RhdGljIGNvbnN0IGludHB0cl90IEV4dGVuZGVkVGFn
TWFzayAgICAgICAgID0gMHhDOyAvLyBleHRlbmRlZCB0YWcgaG9sZHMgYSBmdXJ0aGVyIHR3byBi
aXRzCiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBFeHRlbmRlZFRhZ0JpdEJvb2wgICAg
ICA9IDB4NDsKQEAgLTE4OSwxMyArMjI4LDI5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAK
ICAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBpc051bWJlcihKU1ZhbHVlUHRyIHYp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiByYXdWYWx1ZSh2KSAmIFRhZ1R5cGVJbnRl
Z2VyOworICAgICAgICAgICAgcmV0dXJuIHJhd1ZhbHVlKHYpICYgVGFnVHlwZU51bWJlcjsKKyAg
ICAgICAgfQorCisgICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgaXNJbnRlZ2VyTnVt
YmVyKEpTVmFsdWVQdHIgdikKKyAgICAgICAgeworI2lmIFVTRShBTFRFUk5BVEVfSlNJTU1FRElB
VEUpCisgICAgICAgICAgICByZXR1cm4gKHJhd1ZhbHVlKHYpICYgVGFnVHlwZU51bWJlcikgPT0g
VGFnVHlwZU51bWJlcjsKKyNlbHNlCisgICAgICAgICAgICByZXR1cm4gaXNOdW1iZXIodik7Cisj
ZW5kaWYKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgaXNQ
b3NpdGl2ZU51bWJlcihKU1ZhbHVlUHRyIHYpCisjaWYgVVNFKEFMVEVSTkFURV9KU0lNTUVESUFU
RSkKKyAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBpc0RvdWJsZU51bWJlcihKU1Zh
bHVlUHRyIHYpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc051bWJlcih2KSAmJiAh
aXNJbnRlZ2VyTnVtYmVyKHYpOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICBzdGF0aWMg
QUxXQVlTX0lOTElORSBib29sIGlzUG9zaXRpdmVJbnRlZ2VyTnVtYmVyKEpTVmFsdWVQdHIgdikK
ICAgICAgICAgewogICAgICAgICAgICAgLy8gQSBzaW5nbGUgbWFzayB0byBjaGVjayBmb3IgdGhl
IHNpZ24gYml0IGFuZCB0aGUgbnVtYmVyIHRhZyBhbGwgYXQgb25jZS4KLSAgICAgICAgICAgIHJl
dHVybiAocmF3VmFsdWUodikgJiAoc2lnbkJpdCB8IFRhZ1R5cGVJbnRlZ2VyKSkgPT0gVGFnVHlw
ZUludGVnZXI7CisgICAgICAgICAgICByZXR1cm4gKHJhd1ZhbHVlKHYpICYgKHNpZ25CaXQgfCBU
YWdUeXBlTnVtYmVyKSkgPT0gVGFnVHlwZU51bWJlcjsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBpc0Jvb2xlYW4oSlNWYWx1ZVB0ciB2KQpA
QCAtMjA5LDEyICsyNjQsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiAo
cmF3VmFsdWUodikgJiB+RXh0ZW5kZWRUYWdCaXRVbmRlZmluZWQpID09IEZ1bGxUYWdUeXBlTnVs
bDsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBib29sIGlzTmVnYXRpdmUoSlNWYWx1ZVB0
ciB2KQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoaXNOdW1iZXIodikpOwotICAgICAg
ICAgICAgcmV0dXJuIHJhd1ZhbHVlKHYpICYgc2lnbkJpdDsKLSAgICAgICAgfQotCiAgICAgICAg
IHN0YXRpYyBKU1ZhbHVlUHRyIGZyb20oY2hhcik7CiAgICAgICAgIHN0YXRpYyBKU1ZhbHVlUHRy
IGZyb20oc2lnbmVkIGNoYXIpOwogICAgICAgICBzdGF0aWMgSlNWYWx1ZVB0ciBmcm9tKHVuc2ln
bmVkIGNoYXIpOwpAQCAtMjM4LDkgKzI4NywxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
ICAgIHJldHVybiBpc0ltbWVkaWF0ZSh2MSkgJiBpc0ltbWVkaWF0ZSh2Mik7CiAgICAgICAgIH0K
IAotICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIGFyZUJvdGhJbW1lZGlhdGVOdW1i
ZXJzKEpTVmFsdWVQdHIgdjEsIEpTVmFsdWVQdHIgdjIpCisgICAgICAgIHN0YXRpYyBBTFdBWVNf
SU5MSU5FIGJvb2wgYXJlQm90aEltbWVkaWF0ZUludGVnZXJOdW1iZXJzKEpTVmFsdWVQdHIgdjEs
IEpTVmFsdWVQdHIgdjIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiByYXdWYWx1ZSh2
MSkgJiByYXdWYWx1ZSh2MikgJiBUYWdUeXBlSW50ZWdlcjsKKyNpZiBVU0UoQUxURVJOQVRFX0pT
SU1NRURJQVRFKQorICAgICAgICAgICAgcmV0dXJuIChyYXdWYWx1ZSh2MSkgJiByYXdWYWx1ZSh2
MikgJiBUYWdUeXBlTnVtYmVyKSA9PSBUYWdUeXBlTnVtYmVyOworI2Vsc2UKKyAgICAgICAgICAg
IHJldHVybiByYXdWYWx1ZSh2MSkgJiByYXdWYWx1ZSh2MikgJiBUYWdUeXBlTnVtYmVyOworI2Vu
ZGlmCiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgZG91YmxlIHRvRG91YmxlKEpTVmFsdWVQ
dHIpOwpAQCAtMjgyLDE0ICszMzUsMjQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZVB0cjo6bWFrZUltbWVkaWF0ZShpbnRlZ2VyKTsKICAgICAgICAgfQogCisg
ICAgICAgIC8vIFdpdGggVVNFKEFMVEVSTkFURV9KU0lNTUVESUFURSkgd2Ugd2FudCB0aGUgYXJn
dW1lbnQgdG8gYmUgemVybyBleHRlbmRlZCwgc28gdGhlCisgICAgICAgIC8vIGludGVnZXIgZG9l
c24ndCBpbnRlcmZlcmUgd2l0aCB0aGUgdGFnIGJpdHMgaW4gdGhlIHVwcGVyIHdvcmQuICBJbiB0
aGUgZGVmYXVsdCBlbmNvZGluZywKKyAgICAgICAgLy8gaWYgaW50cHRyX3QgaWQgbGFyZ2VyIHRo
ZW4gaW50MzJfdCB3ZSBzaWduIGV4dGVuZCB0aGUgdmFsdWUgdGhyb3VnaCB0aGUgdXBwZXIgd29y
ZC4KICNpZiBVU0UoQUxURVJOQVRFX0pTSU1NRURJQVRFKQogICAgICAgICBzdGF0aWMgQUxXQVlT
X0lOTElORSBKU1ZhbHVlUHRyIG1ha2VJbnQodWludDMyX3QgdmFsdWUpCiAjZWxzZQogICAgICAg
ICBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIG1ha2VJbnQoaW50MzJfdCB2YWx1ZSkK
ICNlbmRpZgogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbWFrZVZhbHVlKChzdGF0aWNf
Y2FzdDxpbnRwdHJfdD4odmFsdWUpIDw8IEludGVnZXJQYXlsb2FkU2hpZnQpIHwgVGFnVHlwZUlu
dGVnZXIpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VWYWx1ZSgoc3RhdGljX2Nhc3Q8aW50cHRy
X3Q+KHZhbHVlKSA8PCBJbnRlZ2VyUGF5bG9hZFNoaWZ0KSB8IFRhZ1R5cGVOdW1iZXIpOworICAg
ICAgICB9CisgICAgICAgIAorI2lmIFVTRShBTFRFUk5BVEVfSlNJTU1FRElBVEUpCisgICAgICAg
IHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIgbWFrZURvdWJsZShkb3VibGUgdmFsdWUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVmFsdWUod3RmX3JlaW50ZXJwcmV0
X2Nhc3Q8aW50cHRyX3Q+KHZhbHVlKSArIERvdWJsZUVuY29kZU9mZnNldCk7CiAgICAgICAgIH0K
KyNlbmRpZgogICAgICAgICAKICAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0
ciBtYWtlQm9vbChib29sIGIpCiAgICAgICAgIHsKQEAgLTMwNSw3ICszNjgsMTcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBtYWtlVmFsdWUoRnVsbFRh
Z1R5cGVOdWxsKTsKICAgICAgICAgfQotICAgICAgICAKKworICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorICAgICAgICBzdGF0aWMgSlNWYWx1ZVB0ciBtYWtlT3V0T2ZJbnRlZ2VyUmFuZ2Uo
VCk7CisKKyNpZiBVU0UoQUxURVJOQVRFX0pTSU1NRURJQVRFKQorICAgICAgICBzdGF0aWMgQUxX
QVlTX0lOTElORSBkb3VibGUgZG91YmxlVmFsdWUoSlNWYWx1ZVB0ciB2KQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gd3RmX3JlaW50ZXJwcmV0X2Nhc3Q8ZG91YmxlPihyYXdWYWx1ZSh2
KSAtIERvdWJsZUVuY29kZU9mZnNldCk7CisgICAgICAgIH0KKyNlbmRpZgorCiAgICAgICAgIHN0
YXRpYyBBTFdBWVNfSU5MSU5FIGludDMyX3QgaW50VmFsdWUoSlNWYWx1ZVB0ciB2KQogICAgICAg
ICB7CiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50MzJfdD4ocmF3VmFsdWUodikg
Pj4gSW50ZWdlclBheWxvYWRTaGlmdCk7CkBAIC0zMzksMjEgKzQxMiw0NyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAvLyBUaGlzIHZhbHVlIGlzIGltcG9zc2libGUgYmVjYXVzZSAweDQgaXMgbm90
IGEgdmFsaWQgcG9pbnRlciBidXQgYSB0YWcgb2YgMCB3b3VsZCBpbmRpY2F0ZSBub24taW1tZWRp
YXRlCiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIEpTSW1tZWRpYXRlOjppbXBvc3NpYmxl
VmFsdWUoKSB7IHJldHVybiBtYWtlVmFsdWUoMHg0KTsgfQogCisjaWYgVVNFKEFMVEVSTkFURV9K
U0lNTUVESUFURSkKKyAgICBpbmxpbmUgYm9vbCBkb3VibGVUb0Jvb2xlYW4oZG91YmxlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlIDwgMC4wIHx8IHZhbHVlID4gMC4wOworICAg
IH0KKworICAgIEFMV0FZU19JTkxJTkUgYm9vbCBKU0ltbWVkaWF0ZTo6dG9Cb29sZWFuKEpTVmFs
dWVQdHIgdikKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0ltbWVkaWF0ZSh2KSk7CisgICAgICAg
IHJldHVybiBpc051bWJlcih2KSA/IGlzSW50ZWdlck51bWJlcih2KSA/IHYgIT0gemVyb0ltbWVk
aWF0ZSgpCisgICAgICAgICAgICA6IGRvdWJsZVRvQm9vbGVhbihkb3VibGVWYWx1ZSh2KSkgOiB2
ID09IHRydWVJbW1lZGlhdGUoKTsKKyAgICB9CisjZWxzZQogICAgIEFMV0FZU19JTkxJTkUgYm9v
bCBKU0ltbWVkaWF0ZTo6dG9Cb29sZWFuKEpTVmFsdWVQdHIgdikKICAgICB7CiAgICAgICAgIEFT
U0VSVChpc0ltbWVkaWF0ZSh2KSk7Ci0gICAgICAgIGludHB0cl90IGJpdHMgPSByYXdWYWx1ZSh2
KTsKLSAgICAgICAgcmV0dXJuIChiaXRzICYgVGFnVHlwZUludGVnZXIpCi0gICAgICAgICAgICA/
IGJpdHMgIT0gVGFnVHlwZUludGVnZXIgLy8gITAgaW50cwotICAgICAgICAgICAgOiBiaXRzID09
IChGdWxsVGFnVHlwZUJvb2wgfCBFeHRlbmRlZFBheWxvYWRCaXRCb29sVmFsdWUpOyAvLyBib29s
IHRydWUKKyAgICAgICAgcmV0dXJuIGlzSW50ZWdlck51bWJlcih2KSA/IHYgIT0gemVyb0ltbWVk
aWF0ZSgpIDogdiA9PSB0cnVlSW1tZWRpYXRlKCk7CiAgICAgfQorI2VuZGlmCiAKICAgICBBTFdB
WVNfSU5MSU5FIHVpbnQzMl90IEpTSW1tZWRpYXRlOjpnZXRUcnVuY2F0ZWRVSW50MzIoSlNWYWx1
ZVB0ciB2KQogICAgIHsKLSAgICAgICAgQVNTRVJUKGlzTnVtYmVyKHYpKTsKKyAgICAgICAgLy8g
RklYTUU6IHNob3VsZCBwcm9iYWJseSBiZSBhc3NlcnRpbmcgaXNQb3NpdGl2ZUludGVnZXJOdW1i
ZXIgaGVyZS4KKyAgICAgICAgQVNTRVJUKGlzSW50ZWdlck51bWJlcih2KSk7CiAgICAgICAgIHJl
dHVybiBpbnRWYWx1ZSh2KTsKICAgICB9CiAKKyNpZiBVU0UoQUxURVJOQVRFX0pTSU1NRURJQVRF
KQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgaW5saW5lIEpTVmFsdWVQdHIgSlNJbW1l
ZGlhdGU6Om1ha2VPdXRPZkludGVnZXJSYW5nZShUIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1ha2VEb3VibGUoc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSkpOworICAgIH0KKyNlbHNl
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBpbmxpbmUgSlNWYWx1ZVB0ciBKU0ltbWVk
aWF0ZTo6bWFrZU91dE9mSW50ZWdlclJhbmdlKFQpCisgICAgeworICAgICAgICByZXR1cm4gbm9W
YWx1ZSgpOworICAgIH0KKyNlbmRpZgorCiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIEpT
SW1tZWRpYXRlOjpmcm9tKGNoYXIgaSkKICAgICB7CiAgICAgICAgIHJldHVybiBtYWtlSW50KGkp
OwpAQCAtMzgxLDI5ICs0ODAsMzEgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBBTFdBWVNfSU5M
SU5FIEpTVmFsdWVQdHIgSlNJbW1lZGlhdGU6OmZyb20oaW50IGkpCiAgICAgeworI2lmICFVU0Uo
QUxURVJOQVRFX0pTSU1NRURJQVRFKQogICAgICAgICBpZiAoKGkgPCBtaW5JbW1lZGlhdGVJbnQp
IHwgKGkgPiBtYXhJbW1lZGlhdGVJbnQpKQotICAgICAgICAgICAgcmV0dXJuIG5vVmFsdWUoKTsK
KyAgICAgICAgICAgIHJldHVybiBtYWtlT3V0T2ZJbnRlZ2VyUmFuZ2UoaSk7CisjZW5kaWYKICAg
ICAgICAgcmV0dXJuIG1ha2VJbnQoaSk7CiAgICAgfQogCiAgICAgQUxXQVlTX0lOTElORSBKU1Zh
bHVlUHRyIEpTSW1tZWRpYXRlOjpmcm9tKHVuc2lnbmVkIGkpCiAgICAgewogICAgICAgICBpZiAo
aSA+IG1heEltbWVkaWF0ZVVJbnQpCi0gICAgICAgICAgICByZXR1cm4gbm9WYWx1ZSgpOworICAg
ICAgICAgICAgcmV0dXJuIG1ha2VPdXRPZkludGVnZXJSYW5nZShpKTsKICAgICAgICAgcmV0dXJu
IG1ha2VJbnQoaSk7CiAgICAgfQogCiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIEpTSW1t
ZWRpYXRlOjpmcm9tKGxvbmcgaSkKICAgICB7CiAgICAgICAgIGlmICgoaSA8IG1pbkltbWVkaWF0
ZUludCkgfCAoaSA+IG1heEltbWVkaWF0ZUludCkpCi0gICAgICAgICAgICByZXR1cm4gbm9WYWx1
ZSgpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VPdXRPZkludGVnZXJSYW5nZShpKTsKICAgICAg
ICAgcmV0dXJuIG1ha2VJbnQoaSk7CiAgICAgfQogCiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVl
UHRyIEpTSW1tZWRpYXRlOjpmcm9tKHVuc2lnbmVkIGxvbmcgaSkKICAgICB7CiAgICAgICAgIGlm
IChpID4gbWF4SW1tZWRpYXRlVUludCkKLSAgICAgICAgICAgIHJldHVybiBub1ZhbHVlKCk7Cisg
ICAgICAgICAgICByZXR1cm4gbWFrZU91dE9mSW50ZWdlclJhbmdlKGkpOwogICAgICAgICByZXR1
cm4gbWFrZUludChpKTsKICAgICB9CiAKQEAgLTQxNyw3ICs1MTgsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIgSlNJbW1lZGlhdGU6OmZyb20odW5zaWdu
ZWQgbG9uZyBsb25nIGkpCiAgICAgewogICAgICAgICBpZiAoaSA+IG1heEltbWVkaWF0ZVVJbnQp
Ci0gICAgICAgICAgICByZXR1cm4gbm9WYWx1ZSgpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VP
dXRPZkludGVnZXJSYW5nZShpKTsKICAgICAgICAgcmV0dXJuIG1ha2VJbnQoc3RhdGljX2Nhc3Q8
aW50cHRyX3Q+KGkpKTsKICAgICB9CiAKQEAgLTQyNSw0NSArNTI2LDUyIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgIHsKICAgICAgICAgY29uc3QgaW50IGludFZhbCA9IHN0YXRpY19jYXN0PGludD4o
ZCk7CiAKLSAgICAgICAgaWYgKChpbnRWYWwgPCBtaW5JbW1lZGlhdGVJbnQpIHwgKGludFZhbCA+
IG1heEltbWVkaWF0ZUludCkpCi0gICAgICAgICAgICByZXR1cm4gbm9WYWx1ZSgpOwotCiAgICAg
ICAgIC8vIENoZWNrIGZvciBkYXRhIGxvc3MgZnJvbSBjb252ZXJzaW9uIHRvIGludC4KICAgICAg
ICAgaWYgKGludFZhbCAhPSBkIHx8ICghaW50VmFsICYmIHNpZ25iaXQoZCkpKQotICAgICAgICAg
ICAgcmV0dXJuIG5vVmFsdWUoKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlT3V0T2ZJbnRlZ2Vy
UmFuZ2UoZCk7CiAKLSAgICAgICAgcmV0dXJuIG1ha2VJbnQoaW50VmFsKTsKKyAgICAgICAgcmV0
dXJuIGZyb20oaW50VmFsKTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIGludDMyX3QgSlNJ
bW1lZGlhdGU6OmdldFRydW5jYXRlZEludDMyKEpTVmFsdWVQdHIgdikKICAgICB7Ci0gICAgICAg
IEFTU0VSVChpc051bWJlcih2KSk7CisgICAgICAgIEFTU0VSVChpc0ludGVnZXJOdW1iZXIodikp
OwogICAgICAgICByZXR1cm4gaW50VmFsdWUodik7CiAgICAgfQogCiAgICAgQUxXQVlTX0lOTElO
RSBkb3VibGUgSlNJbW1lZGlhdGU6OnRvRG91YmxlKEpTVmFsdWVQdHIgdikKICAgICB7CiAgICAg
ICAgIEFTU0VSVChpc0ltbWVkaWF0ZSh2KSk7Ci0gICAgICAgIGludCBpOwotICAgICAgICBpZiAo
aXNOdW1iZXIodikpCi0gICAgICAgICAgICBpID0gaW50VmFsdWUodik7Ci0gICAgICAgIGVsc2Ug
aWYgKHJhd1ZhbHVlKHYpID09IEZ1bGxUYWdUeXBlVW5kZWZpbmVkKQorCisgICAgICAgIGlmIChp
c0ludGVnZXJOdW1iZXIodikpCisgICAgICAgICAgICByZXR1cm4gaW50VmFsdWUodik7CisKKyNp
ZiBVU0UoQUxURVJOQVRFX0pTSU1NRURJQVRFKQorICAgICAgICBpZiAoaXNOdW1iZXIodikpIHsK
KyAgICAgICAgICAgIEFTU0VSVChpc0RvdWJsZU51bWJlcih2KSk7CisgICAgICAgICAgICByZXR1
cm4gZG91YmxlVmFsdWUodik7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIEFTU0VSVCghaXNO
dW1iZXIodikpOworI2VuZGlmCisKKyAgICAgICAgaWYgKHJhd1ZhbHVlKHYpID09IEZ1bGxUYWdU
eXBlVW5kZWZpbmVkKQogICAgICAgICAgICAgcmV0dXJuIG5vbklubGluZU5hTigpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBpID0gcmF3VmFsdWUodikgPj4gRXh0ZW5kZWRQYXlsb2FkU2hp
ZnQ7Ci0gICAgICAgIHJldHVybiBpOworCisgICAgICAgIEFTU0VSVChKU0ltbWVkaWF0ZTo6aXNC
b29sZWFuKHYpIHx8ICh2ID09IEpTSW1tZWRpYXRlOjpudWxsSW1tZWRpYXRlKCkpKTsKKyAgICAg
ICAgcmV0dXJuIHJhd1ZhbHVlKHYpID4+IEV4dGVuZGVkUGF5bG9hZFNoaWZ0OwogICAgIH0KIAog
ICAgIEFMV0FZU19JTkxJTkUgYm9vbCBKU0ltbWVkaWF0ZTo6Z2V0VUludDMyKEpTVmFsdWVQdHIg
diwgdWludDMyX3QmIGkpCiAgICAgewogICAgICAgICBpID0gdWludFZhbHVlKHYpOwotICAgICAg
ICByZXR1cm4gaXNQb3NpdGl2ZU51bWJlcih2KTsKKyAgICAgICAgcmV0dXJuIGlzUG9zaXRpdmVJ
bnRlZ2VyTnVtYmVyKHYpOwogICAgIH0KIAogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBKU0ltbWVk
aWF0ZTo6Z2V0VHJ1bmNhdGVkSW50MzIoSlNWYWx1ZVB0ciB2LCBpbnQzMl90JiBpKQogICAgIHsK
ICAgICAgICAgaSA9IGludFZhbHVlKHYpOwotICAgICAgICByZXR1cm4gaXNOdW1iZXIodik7Cisg
ICAgICAgIHJldHVybiBpc0ludGVnZXJOdW1iZXIodik7CiAgICAgfQogCiAgICAgQUxXQVlTX0lO
TElORSBib29sIEpTSW1tZWRpYXRlOjpnZXRUcnVuY2F0ZWRVSW50MzIoSlNWYWx1ZVB0ciB2LCB1
aW50MzJfdCYgaSkKQEAgLTYwMCw3ICs3MDgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGlu
bGluZSBib29sIEpTVmFsdWVQdHI6OmlzSW50MzJGYXN0KCkgY29uc3QKICAgICB7Ci0gICAgICAg
IHJldHVybiBKU0ltbWVkaWF0ZTo6aXNOdW1iZXIoYXNWYWx1ZSgpKTsKKyAgICAgICAgcmV0dXJu
IEpTSW1tZWRpYXRlOjppc0ludGVnZXJOdW1iZXIoYXNWYWx1ZSgpKTsKICAgICB9CiAKICAgICBp
bmxpbmUgaW50MzJfdCBKU1ZhbHVlUHRyOjpnZXRJbnQzMkZhc3QoKSBjb25zdApAQCAtNjExLDcg
KzcxOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgaW5saW5lIGJvb2wgSlNWYWx1ZVB0cjo6
aXNVSW50MzJGYXN0KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0ltbWVkaWF0ZTo6
aXNQb3NpdGl2ZU51bWJlcihhc1ZhbHVlKCkpOworICAgICAgICByZXR1cm4gSlNJbW1lZGlhdGU6
OmlzUG9zaXRpdmVJbnRlZ2VyTnVtYmVyKGFzVmFsdWUoKSk7CiAgICAgfQogCiAgICAgaW5saW5l
IHVpbnQzMl90IEpTVmFsdWVQdHI6OmdldFVJbnQzMkZhc3QoKSBjb25zdApAQCAtNjI3LDE0ICs3
MzUsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlUHRyOjph
cmVCb3RoSW50MzJGYXN0KEpTVmFsdWVQdHIgdjEsIEpTVmFsdWVQdHIgdjIpCiAgICAgewotICAg
ICAgICByZXR1cm4gSlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1lZGlhdGVOdW1iZXJzKHYxLCB2Mik7
CisgICAgICAgIHJldHVybiBKU0ltbWVkaWF0ZTo6YXJlQm90aEltbWVkaWF0ZUludGVnZXJOdW1i
ZXJzKHYxLCB2Mik7CiAgICAgfQogCiAgICAgY2xhc3MgSlNGYXN0TWF0aCB7CiAgICAgcHVibGlj
OgogICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIGNhbkRvRmFzdEJpdHdpc2VPcGVy
YXRpb25zKEpTVmFsdWVQdHIgdjEsIEpTVmFsdWVQdHIgdjIpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBKU0ltbWVkaWF0ZTo6YXJlQm90aEltbWVkaWF0ZU51bWJlcnModjEsIHYyKTsK
KyAgICAgICAgICAgIHJldHVybiBKU0ltbWVkaWF0ZTo6YXJlQm90aEltbWVkaWF0ZUludGVnZXJO
dW1iZXJzKHYxLCB2Mik7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElO
RSBKU1ZhbHVlUHRyIGVxdWFsKEpTVmFsdWVQdHIgdjEsIEpTVmFsdWVQdHIgdjIpCkBAIC02NTgs
NyArNzY2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5F
IEpTVmFsdWVQdHIgeG9ySW1tZWRpYXRlTnVtYmVycyhKU1ZhbHVlUHRyIHYxLCBKU1ZhbHVlUHRy
IHYyKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoY2FuRG9GYXN0Qml0d2lzZU9wZXJh
dGlvbnModjEsIHYyKSk7Ci0gICAgICAgICAgICByZXR1cm4gSlNJbW1lZGlhdGU6Om1ha2VWYWx1
ZSgoSlNJbW1lZGlhdGU6OnJhd1ZhbHVlKHYxKSBeIEpTSW1tZWRpYXRlOjpyYXdWYWx1ZSh2Mikp
IHwgSlNJbW1lZGlhdGU6OlRhZ1R5cGVJbnRlZ2VyKTsKKyAgICAgICAgICAgIHJldHVybiBKU0lt
bWVkaWF0ZTo6bWFrZVZhbHVlKChKU0ltbWVkaWF0ZTo6cmF3VmFsdWUodjEpIF4gSlNJbW1lZGlh
dGU6OnJhd1ZhbHVlKHYyKSkgfCBKU0ltbWVkaWF0ZTo6VGFnVHlwZU51bWJlcik7CiAgICAgICAg
IH0KIAogICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIG9ySW1tZWRpYXRl
TnVtYmVycyhKU1ZhbHVlUHRyIHYxLCBKU1ZhbHVlUHRyIHYyKQpAQCAtNjY5LDIxICs3NzcsMjEg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBj
YW5Eb0Zhc3RSc2hpZnQoSlNWYWx1ZVB0ciB2MSwgSlNWYWx1ZVB0ciB2MikKICAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIEpTSW1tZWRpYXRlOjphcmVCb3RoSW1tZWRpYXRlTnVtYmVycyh2
MSwgdjIpOworICAgICAgICAgICAgcmV0dXJuIEpTSW1tZWRpYXRlOjphcmVCb3RoSW1tZWRpYXRl
SW50ZWdlck51bWJlcnModjEsIHYyKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBBTFdB
WVNfSU5MSU5FIGJvb2wgY2FuRG9GYXN0VXJzaGlmdChKU1ZhbHVlUHRyIHYxLCBKU1ZhbHVlUHRy
IHYyKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gSlNJbW1lZGlhdGU6OmFyZUJvdGhJ
bW1lZGlhdGVOdW1iZXJzKHYxLCB2MikgJiYgIUpTSW1tZWRpYXRlOjppc05lZ2F0aXZlKHYxKTsK
KyAgICAgICAgICAgIHJldHVybiBKU0ltbWVkaWF0ZTo6YXJlQm90aEltbWVkaWF0ZUludGVnZXJO
dW1iZXJzKHYxLCB2MikgJiYgIShKU0ltbWVkaWF0ZTo6cmF3VmFsdWUodjEpICYgSlNJbW1lZGlh
dGU6OnNpZ25CaXQpOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUg
SlNWYWx1ZVB0ciByaWdodFNoaWZ0SW1tZWRpYXRlTnVtYmVycyhKU1ZhbHVlUHRyIHZhbCwgSlNW
YWx1ZVB0ciBzaGlmdCkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKGNhbkRvRmFzdFJz
aGlmdCh2YWwsIHNoaWZ0KSB8fCBjYW5Eb0Zhc3RVcnNoaWZ0KHZhbCwgc2hpZnQpKTsKICNpZiBV
U0UoQUxURVJOQVRFX0pTSU1NRURJQVRFKQotICAgICAgICAgICAgcmV0dXJuIEpTSW1tZWRpYXRl
OjptYWtlVmFsdWUoc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHN0YXRpY19jYXN0PHVpbnQzMl90Pihz
dGF0aWNfY2FzdDxpbnQzMl90PihKU0ltbWVkaWF0ZTo6cmF3VmFsdWUodmFsKSkgPj4gKChKU0lt
bWVkaWF0ZTo6cmF3VmFsdWUoc2hpZnQpID4+IEpTSW1tZWRpYXRlOjpJbnRlZ2VyUGF5bG9hZFNo
aWZ0KSAmIDB4MWYpKSkgfCBKU0ltbWVkaWF0ZTo6VGFnVHlwZUludGVnZXIpOworICAgICAgICAg
ICAgcmV0dXJuIEpTSW1tZWRpYXRlOjptYWtlVmFsdWUoc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHN0
YXRpY19jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxpbnQzMl90PihKU0ltbWVkaWF0ZTo6cmF3
VmFsdWUodmFsKSkgPj4gKChKU0ltbWVkaWF0ZTo6cmF3VmFsdWUoc2hpZnQpID4+IEpTSW1tZWRp
YXRlOjpJbnRlZ2VyUGF5bG9hZFNoaWZ0KSAmIDB4MWYpKSkgfCBKU0ltbWVkaWF0ZTo6VGFnVHlw
ZU51bWJlcik7CiAjZWxzZQotICAgICAgICAgICAgcmV0dXJuIEpTSW1tZWRpYXRlOjptYWtlVmFs
dWUoKEpTSW1tZWRpYXRlOjpyYXdWYWx1ZSh2YWwpID4+ICgoSlNJbW1lZGlhdGU6OnJhd1ZhbHVl
KHNoaWZ0KSA+PiBKU0ltbWVkaWF0ZTo6SW50ZWdlclBheWxvYWRTaGlmdCkgJiAweDFmKSkgfCBK
U0ltbWVkaWF0ZTo6VGFnVHlwZUludGVnZXIpOworICAgICAgICAgICAgcmV0dXJuIEpTSW1tZWRp
YXRlOjptYWtlVmFsdWUoKEpTSW1tZWRpYXRlOjpyYXdWYWx1ZSh2YWwpID4+ICgoSlNJbW1lZGlh
dGU6OnJhd1ZhbHVlKHNoaWZ0KSA+PiBKU0ltbWVkaWF0ZTo6SW50ZWdlclBheWxvYWRTaGlmdCkg
JiAweDFmKSkgfCBKU0ltbWVkaWF0ZTo6VGFnVHlwZU51bWJlcik7CiAjZW5kaWYKICAgICAgICAg
fQogCkBAIC02OTEsNyArNzk5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAg
ICAgICAgIC8vIE51bWJlciBpcyBub24tbmVnYXRpdmUgYW5kIGFuIG9wZXJhdGlvbiBpbnZvbHZp
bmcgdHdvIG9mIHRoZXNlIGNhbid0IG92ZXJmbG93LgogICAgICAgICAgICAgLy8gQ2hlY2tpbmcg
Zm9yIGFsbG93ZWQgbmVnYXRpdmUgbnVtYmVycyB0YWtlcyBtb3JlIHRpbWUgdGhhbiBpdCdzIHdv
cnRoIG9uIFN1blNwaWRlci4KLSAgICAgICAgICAgIHJldHVybiAoSlNJbW1lZGlhdGU6OnJhd1Zh
bHVlKHYpICYgKEpTSW1tZWRpYXRlOjpUYWdUeXBlSW50ZWdlciArIChKU0ltbWVkaWF0ZTo6c2ln
bkJpdCB8IChKU0ltbWVkaWF0ZTo6c2lnbkJpdCA+PiAxKSkpKSA9PSBKU0ltbWVkaWF0ZTo6VGFn
VHlwZUludGVnZXI7CisgICAgICAgICAgICByZXR1cm4gKEpTSW1tZWRpYXRlOjpyYXdWYWx1ZSh2
KSAmIChKU0ltbWVkaWF0ZTo6VGFnVHlwZU51bWJlciArIChKU0ltbWVkaWF0ZTo6c2lnbkJpdCB8
IChKU0ltbWVkaWF0ZTo6c2lnbkJpdCA+PiAxKSkpKSA9PSBKU0ltbWVkaWF0ZTo6VGFnVHlwZU51
bWJlcjsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgY2Fu
RG9GYXN0QWRkaXRpdmVPcGVyYXRpb25zKEpTVmFsdWVQdHIgdjEsIEpTVmFsdWVQdHIgdjIpCkBA
IC03MDQsMTMgKzgxMiwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIEFMV0FZ
U19JTkxJTkUgSlNWYWx1ZVB0ciBhZGRJbW1lZGlhdGVOdW1iZXJzKEpTVmFsdWVQdHIgdjEsIEpT
VmFsdWVQdHIgdjIpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChjYW5Eb0Zhc3RBZGRp
dGl2ZU9wZXJhdGlvbnModjEsIHYyKSk7Ci0gICAgICAgICAgICByZXR1cm4gSlNJbW1lZGlhdGU6
Om1ha2VWYWx1ZShKU0ltbWVkaWF0ZTo6cmF3VmFsdWUodjEpICsgSlNJbW1lZGlhdGU6OnJhd1Zh
bHVlKHYyKSAtIEpTSW1tZWRpYXRlOjpUYWdUeXBlSW50ZWdlcik7CisgICAgICAgICAgICByZXR1
cm4gSlNJbW1lZGlhdGU6Om1ha2VWYWx1ZShKU0ltbWVkaWF0ZTo6cmF3VmFsdWUodjEpICsgSlNJ
bW1lZGlhdGU6OnJhd1ZhbHVlKHYyKSAtIEpTSW1tZWRpYXRlOjpUYWdUeXBlTnVtYmVyKTsKICAg
ICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIgc3ViSW1t
ZWRpYXRlTnVtYmVycyhKU1ZhbHVlUHRyIHYxLCBKU1ZhbHVlUHRyIHYyKQogICAgICAgICB7CiAg
ICAgICAgICAgICBBU1NFUlQoY2FuRG9GYXN0QWRkaXRpdmVPcGVyYXRpb25zKHYxLCB2MikpOwot
ICAgICAgICAgICAgcmV0dXJuIEpTSW1tZWRpYXRlOjptYWtlVmFsdWUoSlNJbW1lZGlhdGU6OnJh
d1ZhbHVlKHYxKSAtIEpTSW1tZWRpYXRlOjpyYXdWYWx1ZSh2MikgKyBKU0ltbWVkaWF0ZTo6VGFn
VHlwZUludGVnZXIpOworICAgICAgICAgICAgcmV0dXJuIEpTSW1tZWRpYXRlOjptYWtlVmFsdWUo
SlNJbW1lZGlhdGU6OnJhd1ZhbHVlKHYxKSAtIEpTSW1tZWRpYXRlOjpyYXdWYWx1ZSh2MikgKyBK
U0ltbWVkaWF0ZTo6VGFnVHlwZU51bWJlcik7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMg
QUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIGluY0ltbWVkaWF0ZU51bWJlcihKU1ZhbHVlUHRyIHYp
CkluZGV4OiBydW50aW1lL0pTTnVtYmVyQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcnVudGltZS9K
U051bWJlckNlbGwuY3BwCShyZXZpc2lvbiAzOTk1NSkKKysrIHJ1bnRpbWUvSlNOdW1iZXJDZWxs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsK
IAorI2lmICFVU0UoQUxURVJOQVRFX0pTSU1NRURJQVRFKQorCiBKU1ZhbHVlUHRyIEpTTnVtYmVy
Q2VsbDo6dG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29u
c3QKIHsKICAgICByZXR1cm4gY29uc3RfY2FzdDxKU051bWJlckNlbGwqPih0aGlzKTsKQEAgLTEw
MSwyNCArMTAzLDI0IEBAIEpTVmFsdWVQdHIgSlNOdW1iZXJDZWxsOjpnZXRKU051bWJlcigpCiAg
ICAgcmV0dXJuIHRoaXM7CiB9CiAKLU5FVkVSX0lOTElORSBKU1ZhbHVlUHRyIGpzTnVtYmVyQ2Vs
bChFeGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSBkKQorSlNWYWx1ZVB0ciBqc051bWJlckNlbGwoRXhl
Y1N0YXRlKiBleGVjLCBkb3VibGUgZCkKIHsKICAgICByZXR1cm4gbmV3IChleGVjKSBKU051bWJl
ckNlbGwoZXhlYywgZCk7CiB9CiAKLU5FVkVSX0lOTElORSBKU1ZhbHVlUHRyIGpzTmFOKEV4ZWNT
dGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gbmV3IChleGVjKSBKU051bWJlckNlbGwoZXhlYywg
TmFOKTsKLX0KLQotTkVWRVJfSU5MSU5FIEpTVmFsdWVQdHIganNOdW1iZXJDZWxsKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSwgZG91YmxlIGQpCitKU1ZhbHVlUHRyIGpzTnVtYmVyQ2VsbChKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIGRvdWJsZSBkKQogewogICAgIHJldHVybiBuZXcgKGdsb2Jh
bERhdGEpIEpTTnVtYmVyQ2VsbChnbG9iYWxEYXRhLCBkKTsKIH0KIAotTkVWRVJfSU5MSU5FIEpT
VmFsdWVQdHIganNOYU4oSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorI2Vsc2UKKworSlNWYWx1
ZVB0ciBqc051bWJlckNlbGwoRXhlY1N0YXRlKiwgZG91YmxlKQogewotICAgIHJldHVybiBuZXcg
KGdsb2JhbERhdGEpIEpTTnVtYmVyQ2VsbChnbG9iYWxEYXRhLCBOYU4pOworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBub1ZhbHVlKCk7CiB9CiAKKyNlbmRpZgorCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IHJ1bnRpbWUvSlNOdW1iZXJDZWxsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gcnVudGltZS9KU051bWJlckNlbGwuaAkocmV2aXNpb24gMzk5NTUpCisrKyBydW50aW1lL0pT
TnVtYmVyQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiwxMyBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAorICAgIGV4dGVybiBjb25zdCBkb3VibGUgTmFOOworICAgIGV4dGVybiBjb25z
dCBkb3VibGUgSW5mOworCisgICAgaW5saW5lIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVO
dW1iZXJTdHJ1Y3R1cmUoSlNWYWx1ZVB0ciBwcm90bykgeyByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUocHJvdG8sIFR5cGVJbmZvKE51bWJlclR5cGUsIE5lZWRzVGhpc0NvbnZlcnNpb24pKTsgfQor
CisjaWYgIVVTRShBTFRFUk5BVEVfSlNJTU1FRElBVEUpCisKICAgICBjbGFzcyBJZGVudGlmaWVy
OwogICAgIGNsYXNzIEpTQ2VsbDsKICAgICBjbGFzcyBKU09iamVjdDsKQEAgLTQ0LDkgKzUxLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgSlNOdW1iZXJDZWxsIDogcHVibGljIEpTQ2Vs
bCB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiAgICAgICAgIGZyaWVuZCBKU1ZhbHVlUHRy
IGpzTnVtYmVyQ2VsbChKU0dsb2JhbERhdGEqLCBkb3VibGUpOwotICAgICAgICBmcmllbmQgSlNW
YWx1ZVB0ciBqc05hTihKU0dsb2JhbERhdGEqKTsKICAgICAgICAgZnJpZW5kIEpTVmFsdWVQdHIg
anNOdW1iZXJDZWxsKEV4ZWNTdGF0ZSosIGRvdWJsZSk7Ci0gICAgICAgIGZyaWVuZCBKU1ZhbHVl
UHRyIGpzTmFOKEV4ZWNTdGF0ZSopOwogICAgIHB1YmxpYzoKICAgICAgICAgZG91YmxlIHZhbHVl
KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQogCkBAIC02MSw5ICs2Niw2IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiB0b1RoaXNPYmplY3QoRXhlY1N0YXRl
KikgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgSlNWYWx1ZVB0ciBnZXRKU051bWJlcigpOwogCi0g
ICAgICAgIGludDMyX3QgdG9JbnQzMigpIGNvbnN0OwotICAgICAgICB1aW50MzJfdCB0b1VJbnQz
MigpIGNvbnN0OwotCiAgICAgICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qgc2l6ZSwgRXhl
Y1N0YXRlKiBleGVjKQogICAgICAgICB7CiAgICAgI2lmZGVmIEpBVkFTQ1JJUFRDT1JFX0JVSUxE
SU5HX0FMTF9JTl9PTkVfRklMRQpAQCAtODIsOCArODQsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAjZW5kaWYKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVy
ZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWVQdHIgcHJvdG8pIHsgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKHByb3RvLCBUeXBlSW5mbyhOdW1iZXJUeXBlLCBOZWVkc1RoaXNDb252ZXJzaW9uKSk7
IH0KLQogICAgIHByaXZhdGU6CiAgICAgICAgIEpTTnVtYmVyQ2VsbChKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIGRvdWJsZSB2YWx1ZSkKICAgICAgICAgICAgIDogSlNDZWxsKGdsb2JhbERhdGEt
Pm51bWJlclN0cnVjdHVyZS5nZXQoKSkKQEAgLTEwNCw0OCArMTA0LDI0IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBkb3VibGUgbV92YWx1ZTsKICAgICB9OwogCi0gICAgZXh0ZXJuIGNvbnN0
IGRvdWJsZSBOYU47Ci0gICAgZXh0ZXJuIGNvbnN0IGRvdWJsZSBJbmY7Ci0KICAgICBKU1ZhbHVl
UHRyIGpzTnVtYmVyQ2VsbChKU0dsb2JhbERhdGEqLCBkb3VibGUpOwotICAgIEpTVmFsdWVQdHIg
anNOYU4oSlNHbG9iYWxEYXRhKik7CiAgICAgSlNWYWx1ZVB0ciBqc051bWJlckNlbGwoRXhlY1N0
YXRlKiwgZG91YmxlKTsKLSAgICBKU1ZhbHVlUHRyIGpzTmFOKEV4ZWNTdGF0ZSopOwotCi0gICAg
aW5saW5lIEpTTnVtYmVyQ2VsbCogSlNWYWx1ZVB0cjo6YXNOdW1iZXJDZWxsKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVChpc051bWJlckNlbGwoKSk7Ci0gICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxKU051bWJlckNlbGwqPihhc0NlbGwoKSk7Ci0gICAgfQotCi0gICAgQUxXQVlTX0lO
TElORSBKU1ZhbHVlUHRyIGpzTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYywgZG91YmxlIGQpCi0gICAg
ewotICAgICAgICBKU1ZhbHVlUHRyIHYgPSBKU0ltbWVkaWF0ZTo6ZnJvbShkKTsKLSAgICAgICAg
cmV0dXJuIHYgPyB2IDoganNOdW1iZXJDZWxsKGV4ZWMsIGQpOwotICAgIH0KLQotICAgIEFMV0FZ
U19JTkxJTkUgSlNWYWx1ZVB0ciBqc051bWJlcihFeGVjU3RhdGUqLCBjaGFyIGkpCi0gICAgewot
ICAgICAgICBBU1NFUlQoSlNJbW1lZGlhdGU6OmZyb20oaSkpOwotICAgICAgICByZXR1cm4gSlNJ
bW1lZGlhdGU6OmZyb20oaSk7Ci0gICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRy
IGpzTnVtYmVyKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGNoYXIgaSkKKyAgICBpbmxpbmUgYm9vbCBp
c051bWJlckNlbGwoSlNWYWx1ZVB0ciB2KQogICAgIHsKLSAgICAgICAgQVNTRVJUKEpTSW1tZWRp
YXRlOjpmcm9tKGkpKTsKLSAgICAgICAgcmV0dXJuIEpTSW1tZWRpYXRlOjpmcm9tKGkpOworICAg
ICAgICByZXR1cm4gdi5pc0NlbGwoKSAmJiB2LmFzQ2VsbCgpLT5pc051bWJlcigpOwogICAgIH0K
IAotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBqc051bWJlcihFeGVjU3RhdGUqLCBzaG9y
dCBpKQorICAgIGlubGluZSBKU051bWJlckNlbGwqIGFzTnVtYmVyQ2VsbChKU1ZhbHVlUHRyIHYp
CiAgICAgewotICAgICAgICBBU1NFUlQoSlNJbW1lZGlhdGU6OmZyb20oaSkpOwotICAgICAgICBy
ZXR1cm4gSlNJbW1lZGlhdGU6OmZyb20oaSk7CisgICAgICAgIEFTU0VSVChpc051bWJlckNlbGwo
dikpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNOdW1iZXJDZWxsKj4odi5hc0NlbGwo
KSk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIGpzTnVtYmVyKEV4ZWNT
dGF0ZSosIHVuc2lnbmVkIHNob3J0IGkpCisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIGpz
TnVtYmVyKEV4ZWNTdGF0ZSogZXhlYywgZG91YmxlIGQpCiAgICAgewotICAgICAgICBBU1NFUlQo
SlNJbW1lZGlhdGU6OmZyb20oaSkpOwotICAgICAgICByZXR1cm4gSlNJbW1lZGlhdGU6OmZyb20o
aSk7CisgICAgICAgIEpTVmFsdWVQdHIgdiA9IEpTSW1tZWRpYXRlOjpmcm9tKGQpOworICAgICAg
ICByZXR1cm4gdiA/IHYgOiBqc051bWJlckNlbGwoZXhlYywgZCk7CiAgICAgfQogCiAgICAgQUxX
QVlTX0lOTElORSBKU1ZhbHVlUHRyIGpzTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IGkpCkBA
IC0xOTAsMTggKzE2Niw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gdiA/IHYg
OiBqc051bWJlckNlbGwoZ2xvYmFsRGF0YSwgZCk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElO
RSBKU1ZhbHVlUHRyIGpzTnVtYmVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgc2hvcnQgaSkK
LSAgICB7Ci0gICAgICAgIEpTVmFsdWVQdHIgdiA9IEpTSW1tZWRpYXRlOjpmcm9tKGkpOwotICAg
ICAgICByZXR1cm4gdiA/IHYgOiBqc051bWJlckNlbGwoZ2xvYmFsRGF0YSwgaSk7Ci0gICAgfQot
Ci0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIGpzTnVtYmVyKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgdW5zaWduZWQgc2hvcnQgaSkKLSAgICB7Ci0gICAgICAgIEpTVmFsdWVQdHIgdiA9
IEpTSW1tZWRpYXRlOjpmcm9tKGkpOwotICAgICAgICByZXR1cm4gdiA/IHYgOiBqc051bWJlckNl
bGwoZ2xvYmFsRGF0YSwgaSk7Ci0gICAgfQotCiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRy
IGpzTnVtYmVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgaW50IGkpCiAgICAgewogICAgICAg
ICBKU1ZhbHVlUHRyIHYgPSBKU0ltbWVkaWF0ZTo6ZnJvbShpKTsKQEAgLTIzOCwzMCArMjAyLDE5
OCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIHYgPyB2IDoganNOdW1iZXJDZWxs
KGdsb2JhbERhdGEsIHN0YXRpY19jYXN0PGRvdWJsZT4oaSkpOwogICAgIH0KIAotICAgIC8vIC0t
LSBKU1ZhbHVlIGlubGluZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIGlubGlu
ZSBib29sIEpTVmFsdWVQdHI6OmlzRG91YmxlTnVtYmVyKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBpc051bWJlckNlbGwoYXNWYWx1ZSgpKTsKKyAgICB9CisKKyAgICBpbmxpbmUgZG91
YmxlIEpTVmFsdWVQdHI6OmdldERvdWJsZU51bWJlcigpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gYXNOdW1iZXJDZWxsKGFzVmFsdWUoKSktPnZhbHVlKCk7CisgICAgfQorCisgICAgaW5s
aW5lIGJvb2wgSlNWYWx1ZVB0cjo6aXNOdW1iZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIEpTSW1tZWRpYXRlOjppc051bWJlcihhc1ZhbHVlKCkpIHx8IGlzRG91YmxlTnVtYmVyKCk7
CisgICAgfQorCisgICAgaW5saW5lIGRvdWJsZSBKU1ZhbHVlUHRyOjp1bmNoZWNrZWRHZXROdW1i
ZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzTnVtYmVyKCkpOworICAgICAgICBy
ZXR1cm4gSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKGFzVmFsdWUoKSkgPyBKU0ltbWVkaWF0ZTo6
dG9Eb3VibGUoYXNWYWx1ZSgpKSA6IGdldERvdWJsZU51bWJlcigpOworICAgIH0KKworI2Vsc2UK
KworICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBqc051bWJlcihFeGVjU3RhdGUqLCBkb3Vi
bGUgZCkKKyAgICB7CisgICAgICAgIEpTVmFsdWVQdHIgdiA9IEpTSW1tZWRpYXRlOjpmcm9tKGQp
OworICAgICAgICBBU1NFUlQodik7CisgICAgICAgIHJldHVybiB2OworICAgIH0KKworICAgIEFM
V0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBqc051bWJlcihFeGVjU3RhdGUqLCBpbnQgaSkKKyAgICB7
CisgICAgICAgIEpTVmFsdWVQdHIgdiA9IEpTSW1tZWRpYXRlOjpmcm9tKGkpOworICAgICAgICBB
U1NFUlQodik7CisgICAgICAgIHJldHVybiB2OworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUg
SlNWYWx1ZVB0ciBqc051bWJlcihFeGVjU3RhdGUqLCB1bnNpZ25lZCBpKQorICAgIHsKKyAgICAg
ICAgSlNWYWx1ZVB0ciB2ID0gSlNJbW1lZGlhdGU6OmZyb20oaSk7CisgICAgICAgIEFTU0VSVCh2
KTsKKyAgICAgICAgcmV0dXJuIHY7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVl
UHRyIGpzTnVtYmVyKEV4ZWNTdGF0ZSosIGxvbmcgaSkKKyAgICB7CisgICAgICAgIEpTVmFsdWVQ
dHIgdiA9IEpTSW1tZWRpYXRlOjpmcm9tKGkpOworICAgICAgICBBU1NFUlQodik7CisgICAgICAg
IHJldHVybiB2OworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBqc051bWJl
cihFeGVjU3RhdGUqLCB1bnNpZ25lZCBsb25nIGkpCisgICAgeworICAgICAgICBKU1ZhbHVlUHRy
IHYgPSBKU0ltbWVkaWF0ZTo6ZnJvbShpKTsKKyAgICAgICAgQVNTRVJUKHYpOworICAgICAgICBy
ZXR1cm4gdjsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIganNOdW1iZXIo
RXhlY1N0YXRlKiwgbG9uZyBsb25nIGkpCisgICAgeworICAgICAgICBKU1ZhbHVlUHRyIHYgPSBK
U0ltbWVkaWF0ZTo6ZnJvbShzdGF0aWNfY2FzdDxkb3VibGU+KGkpKTsKKyAgICAgICAgQVNTRVJU
KHYpOworICAgICAgICByZXR1cm4gdjsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFs
dWVQdHIganNOdW1iZXIoRXhlY1N0YXRlKiwgdW5zaWduZWQgbG9uZyBsb25nIGkpCisgICAgewor
ICAgICAgICBKU1ZhbHVlUHRyIHYgPSBKU0ltbWVkaWF0ZTo6ZnJvbShzdGF0aWNfY2FzdDxkb3Vi
bGU+KGkpKTsKKyAgICAgICAgQVNTRVJUKHYpOworICAgICAgICByZXR1cm4gdjsKKyAgICB9CisK
KyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIganNOdW1iZXIoSlNHbG9iYWxEYXRhKiwgZG91
YmxlIGQpCisgICAgeworICAgICAgICBKU1ZhbHVlUHRyIHYgPSBKU0ltbWVkaWF0ZTo6ZnJvbShk
KTsKKyAgICAgICAgQVNTRVJUKHYpOworICAgICAgICByZXR1cm4gdjsKKyAgICB9CisKKyAgICBB
TFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIganNOdW1iZXIoSlNHbG9iYWxEYXRhKiwgaW50IGkpCisg
ICAgeworICAgICAgICBKU1ZhbHVlUHRyIHYgPSBKU0ltbWVkaWF0ZTo6ZnJvbShpKTsKKyAgICAg
ICAgQVNTRVJUKHYpOworICAgICAgICByZXR1cm4gdjsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5M
SU5FIEpTVmFsdWVQdHIganNOdW1iZXIoSlNHbG9iYWxEYXRhKiwgdW5zaWduZWQgaSkKKyAgICB7
CisgICAgICAgIEpTVmFsdWVQdHIgdiA9IEpTSW1tZWRpYXRlOjpmcm9tKGkpOworICAgICAgICBB
U1NFUlQodik7CisgICAgICAgIHJldHVybiB2OworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUg
SlNWYWx1ZVB0ciBqc051bWJlcihKU0dsb2JhbERhdGEqLCBsb25nIGkpCisgICAgeworICAgICAg
ICBKU1ZhbHVlUHRyIHYgPSBKU0ltbWVkaWF0ZTo6ZnJvbShpKTsKKyAgICAgICAgQVNTRVJUKHYp
OworICAgICAgICByZXR1cm4gdjsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQ
dHIganNOdW1iZXIoSlNHbG9iYWxEYXRhKiwgdW5zaWduZWQgbG9uZyBpKQorICAgIHsKKyAgICAg
ICAgSlNWYWx1ZVB0ciB2ID0gSlNJbW1lZGlhdGU6OmZyb20oaSk7CisgICAgICAgIEFTU0VSVCh2
KTsKKyAgICAgICAgcmV0dXJuIHY7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVl
UHRyIGpzTnVtYmVyKEpTR2xvYmFsRGF0YSosIGxvbmcgbG9uZyBpKQorICAgIHsKKyAgICAgICAg
SlNWYWx1ZVB0ciB2ID0gSlNJbW1lZGlhdGU6OmZyb20oc3RhdGljX2Nhc3Q8ZG91YmxlPihpKSk7
CisgICAgICAgIEFTU0VSVCh2KTsKKyAgICAgICAgcmV0dXJuIHY7CisgICAgfQorCisgICAgQUxX
QVlTX0lOTElORSBKU1ZhbHVlUHRyIGpzTnVtYmVyKEpTR2xvYmFsRGF0YSosIHVuc2lnbmVkIGxv
bmcgbG9uZyBpKQorICAgIHsKKyAgICAgICAgSlNWYWx1ZVB0ciB2ID0gSlNJbW1lZGlhdGU6OmZy
b20oc3RhdGljX2Nhc3Q8ZG91YmxlPihpKSk7CisgICAgICAgIEFTU0VSVCh2KTsKKyAgICAgICAg
cmV0dXJuIHY7CisgICAgfQorCisgICAgaW5saW5lIGJvb2wgSlNWYWx1ZVB0cjo6aXNEb3VibGVO
dW1iZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTSW1tZWRpYXRlOjppc0RvdWJs
ZU51bWJlcihhc1ZhbHVlKCkpOworICAgIH0KKworICAgIGlubGluZSBkb3VibGUgSlNWYWx1ZVB0
cjo6Z2V0RG91YmxlTnVtYmVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBKU0ltbWVk
aWF0ZTo6ZG91YmxlVmFsdWUoYXNWYWx1ZSgpKTsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBK
U1ZhbHVlUHRyOjppc051bWJlcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gSlNJbW1l
ZGlhdGU6OmlzTnVtYmVyKGFzVmFsdWUoKSk7CisgICAgfQogCiAgICAgaW5saW5lIGRvdWJsZSBK
U1ZhbHVlUHRyOjp1bmNoZWNrZWRHZXROdW1iZXIoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNT
RVJUKGlzTnVtYmVyKCkpOwotICAgICAgICByZXR1cm4gSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRl
KGFzVmFsdWUoKSkgPyBKU0ltbWVkaWF0ZTo6dG9Eb3VibGUoYXNWYWx1ZSgpKSA6IGFzTnVtYmVy
Q2VsbCgpLT52YWx1ZSgpOworICAgICAgICByZXR1cm4gSlNJbW1lZGlhdGU6OnRvRG91YmxlKGFz
VmFsdWUoKSk7CisgICAgfQorCisjZW5kaWYKKworICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0
ciBqc051bWJlcihFeGVjU3RhdGUqLCBjaGFyIGkpCisgICAgeworICAgICAgICBBU1NFUlQoSlNJ
bW1lZGlhdGU6OmZyb20oaSkpOworICAgICAgICByZXR1cm4gSlNJbW1lZGlhdGU6OmZyb20oaSk7
CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIGpzTnVtYmVyKEV4ZWNTdGF0
ZSosIHVuc2lnbmVkIGNoYXIgaSkKKyAgICB7CisgICAgICAgIEFTU0VSVChKU0ltbWVkaWF0ZTo6
ZnJvbShpKSk7CisgICAgICAgIHJldHVybiBKU0ltbWVkaWF0ZTo6ZnJvbShpKTsKKyAgICB9CisK
KyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIganNOdW1iZXIoRXhlY1N0YXRlKiwgc2hvcnQg
aSkKKyAgICB7CisgICAgICAgIEFTU0VSVChKU0ltbWVkaWF0ZTo6ZnJvbShpKSk7CisgICAgICAg
IHJldHVybiBKU0ltbWVkaWF0ZTo6ZnJvbShpKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5F
IEpTVmFsdWVQdHIganNOdW1iZXIoRXhlY1N0YXRlKiwgdW5zaWduZWQgc2hvcnQgaSkKKyAgICB7
CisgICAgICAgIEFTU0VSVChKU0ltbWVkaWF0ZTo6ZnJvbShpKSk7CisgICAgICAgIHJldHVybiBK
U0ltbWVkaWF0ZTo6ZnJvbShpKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQ
dHIganNOdW1iZXIoSlNHbG9iYWxEYXRhKiwgc2hvcnQgaSkKKyAgICB7CisgICAgICAgIEFTU0VS
VChKU0ltbWVkaWF0ZTo6ZnJvbShpKSk7CisgICAgICAgIHJldHVybiBKU0ltbWVkaWF0ZTo6ZnJv
bShpKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIganNOdW1iZXIoSlNH
bG9iYWxEYXRhKiwgdW5zaWduZWQgc2hvcnQgaSkKKyAgICB7CisgICAgICAgIEFTU0VSVChKU0lt
bWVkaWF0ZTo6ZnJvbShpKSk7CisgICAgICAgIHJldHVybiBKU0ltbWVkaWF0ZTo6ZnJvbShpKTsK
ICAgICB9CiAKLSAgICBpbmxpbmUgaW50MzJfdCBKU051bWJlckNlbGw6OnRvSW50MzIoKSBjb25z
dAorICAgIGlubGluZSBKU1ZhbHVlUHRyIGpzTmFOKEV4ZWNTdGF0ZSogZXhlYykKICAgICB7Ci0g
ICAgICAgIGlmIChtX3ZhbHVlID49IC0yMTQ3NDgzNjQ4LjAgJiYgbV92YWx1ZSA8IDIxNDc0ODM2
NDguMCkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90PihtX3ZhbHVlKTsK
LSAgICAgICAgYm9vbCBpZ25vcmVkOwotICAgICAgICByZXR1cm4gdG9JbnQzMlNsb3dDYXNlKG1f
dmFsdWUsIGlnbm9yZWQpOworICAgICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgTmFOKTsKICAg
ICB9CiAKLSAgICBpbmxpbmUgdWludDMyX3QgSlNOdW1iZXJDZWxsOjp0b1VJbnQzMigpIGNvbnN0
CisgICAgaW5saW5lIEpTVmFsdWVQdHIganNOYU4oSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQog
ICAgIHsKLSAgICAgICAgaWYgKG1fdmFsdWUgPj0gMC4wICYmIG1fdmFsdWUgPCA0Mjk0OTY3Mjk2
LjApCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1fdmFsdWUpOwot
ICAgICAgICBib29sIGlnbm9yZWQ7Ci0gICAgICAgIHJldHVybiB0b1VJbnQzMlNsb3dDYXNlKG1f
dmFsdWUsIGlnbm9yZWQpOworICAgICAgICByZXR1cm4ganNOdW1iZXIoZ2xvYmFsRGF0YSwgTmFO
KTsKICAgICB9CiAKKyAgICAvLyAtLS0gSlNWYWx1ZSBpbmxpbmVzIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKwogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBKU1ZhbHVlUHRyOjp0
b0pTTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBp
c051bWJlcigpID8gYXNWYWx1ZSgpIDoganNOdW1iZXIoZXhlYywgdGhpcy0+dG9OdW1iZXIoZXhl
YykpOwpAQCAtMjcxLDggKzQwMyw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICAgICAg
aWYgKGlzSW50MzJGYXN0KCkpCiAgICAgICAgICAgICByZXN1bHQgPSBnZXRJbnQzMkZhc3QoKTsK
LSAgICAgICAgZWxzZSBpZiAoTElLRUxZKGlzTnVtYmVyQ2VsbCgpKSkKLSAgICAgICAgICAgIHJl
c3VsdCA9IGFzTnVtYmVyQ2VsbCgpLT52YWx1ZSgpOworICAgICAgICBlbHNlIGlmIChMSUtFTFko
aXNEb3VibGVOdW1iZXIoKSkpCisgICAgICAgICAgICByZXN1bHQgPSBnZXREb3VibGVOdW1iZXIo
KTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBBU1NFUlQoIWlzTnVtYmVyKCkpOwogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjg0LDggKzQxNiw4IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgIHsKICAgICAgICAgaWYgKGlzSW50MzJGYXN0KCkpCiAgICAgICAgICAgICBhcmcgPSBn
ZXRJbnQzMkZhc3QoKTsKLSAgICAgICAgZWxzZSBpZiAoTElLRUxZKGlzTnVtYmVyQ2VsbCgpKSkK
LSAgICAgICAgICAgIGFyZyA9IGFzTnVtYmVyQ2VsbCgpLT50b0ludDMyKCk7CisgICAgICAgIGVs
c2UgaWYgKExJS0VMWShpc0RvdWJsZU51bWJlcigpKSkKKyAgICAgICAgICAgIGFyZyA9IEpTQzo6
dG9JbnQzMihnZXREb3VibGVOdW1iZXIoKSk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg
QVNTRVJUKCFpc051bWJlcigpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI5Nyw4
ICs0MjksOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB7CiAgICAgICAgIGlmIChpc1VJbnQzMkZh
c3QoKSkKICAgICAgICAgICAgIGFyZyA9IGdldFVJbnQzMkZhc3QoKTsKLSAgICAgICAgZWxzZSBp
ZiAoTElLRUxZKGlzTnVtYmVyQ2VsbCgpKSkKLSAgICAgICAgICAgIGFyZyA9IGFzTnVtYmVyQ2Vs
bCgpLT50b1VJbnQzMigpOworICAgICAgICBlbHNlIGlmIChMSUtFTFkoaXNEb3VibGVOdW1iZXIo
KSkpCisgICAgICAgICAgICBhcmcgPSBKU0M6OnRvVUludDMyKGdldERvdWJsZU51bWJlcigpKTsK
ICAgICAgICAgZWxzZSBpZiAoaXNJbnQzMkZhc3QoKSkgewogICAgICAgICAgICAgLy8gRklYTUU6
IEkgdGhpbmsgdGhpcyBjYXNlIGNhbiBiZSBtZXJnZWQgd2l0aCB0aGUgdWludCBjYXNlOyB0b1VJ
bnQzMlNsb3dDYXNlCiAgICAgICAgICAgICAvLyBvbiBhIG5lZ2F0aXZlIHZhbHVlIGlzIGVxdWl2
YWxlbnQgdG8gc2ltcGxlIHN0YXRpY19jYXN0aW5nLgpJbmRleDogcnVudGltZS9KU1ZhbHVlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gcnVudGltZS9KU1ZhbHVlLmgJKHJldmlzaW9uIDM5OTU1KQorKysgcnVu
dGltZS9KU1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDYgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICBjbGFzcyBJZGVudGlmaWVyOwogICAgIGNsYXNzIEpTQ2VsbDsKLSAgICBj
bGFzcyBKU051bWJlckNlbGw7CiAgICAgY2xhc3MgSlNPYmplY3Q7CiAgICAgY2xhc3MgSlNTdHJp
bmc7CiAgICAgY2xhc3MgUHJvcGVydHlTbG90OwpAQCAtMjA2LDggKzIwNSw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIHByaXZhdGU6CiAgICAgICAgIGlubGluZSBjb25zdCBKU1ZhbHVlUHRyIGFz
VmFsdWUoKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQogCi0gICAgICAgIGJvb2wgaXNOdW1iZXJD
ZWxsKCkgY29uc3Q7Ci0gICAgICAgIEpTTnVtYmVyQ2VsbCogYXNOdW1iZXJDZWxsKCkgY29uc3Q7
CisgICAgICAgIGJvb2wgaXNEb3VibGVOdW1iZXIoKSBjb25zdDsKKyAgICAgICAgZG91YmxlIGdl
dERvdWJsZU51bWJlcigpIGNvbnN0OwogCiAgICAgICAgIEpTQ2VsbCogbV9wdHI7CiAgICAgfTsK
SW5kZXg6IHJ1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJ1bnRp
bWUvTnVtYmVyQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAzOTk1NSkKKysrIHJ1bnRpbWUvTnVt
YmVyQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSwyMiArNzUsMjIgQEAgSlNW
YWx1ZVB0ciBudW1iZXJDb25zdHJ1Y3Rvck5hTlZhbHVlKEV4ZQogCiBKU1ZhbHVlUHRyIG51bWJl
ckNvbnN0cnVjdG9yTmVnSW5maW5pdHkoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90JikKIHsKLSAgICByZXR1cm4ganNOdW1iZXJDZWxsKGV4ZWMs
IC1JbmYpOworICAgIHJldHVybiBqc051bWJlcihleGVjLCAtSW5mKTsKIH0KIAogSlNWYWx1ZVB0
ciBudW1iZXJDb25zdHJ1Y3RvclBvc0luZmluaXR5KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRl
bnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpCiB7Ci0gICAgcmV0dXJuIGpzTnVtYmVyQ2Vs
bChleGVjLCBJbmYpOworICAgIHJldHVybiBqc051bWJlcihleGVjLCBJbmYpOwogfQogCiBKU1Zh
bHVlUHRyIG51bWJlckNvbnN0cnVjdG9yTWF4VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JikKIHsKLSAgICByZXR1cm4ganNOdW1iZXJD
ZWxsKGV4ZWMsIDEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4KTsKKyAgICByZXR1cm4ganNOdW1iZXIo
ZXhlYywgMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgpOwogfQogCiBKU1ZhbHVlUHRyIG51bWJlckNv
bnN0cnVjdG9yTWluVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29u
c3QgUHJvcGVydHlTbG90JikKIHsKLSAgICByZXR1cm4ganNOdW1iZXJDZWxsKGV4ZWMsIDVFLTMy
NCk7CisgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIDVFLTMyNCk7CiB9CiAKIC8vIEVDTUEgMTUu
Ny4xCkluZGV4OiBydW50aW1lL051bWJlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcnVudGlt
ZS9OdW1iZXJPYmplY3QuY3BwCShyZXZpc2lvbiAzOTk1NSkKKysrIHJ1bnRpbWUvTnVtYmVyT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTggKzQxLDExIEBAIEpTVmFsdWVQdHIgTnVt
YmVyT2JqZWN0OjpnZXRKU051bWJlcigpCiAgICAgcmV0dXJuIGludGVybmFsVmFsdWUoKTsKIH0K
IAotTnVtYmVyT2JqZWN0KiBjb25zdHJ1Y3ROdW1iZXIoRXhlY1N0YXRlKiBleGVjLCBKU051bWJl
ckNlbGwqIG51bWJlcikKK051bWJlck9iamVjdCogY29uc3RydWN0TnVtYmVyKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZVB0ciBudW1iZXIpCiB7CiAgICAgTnVtYmVyT2JqZWN0KiBvYmplY3QgPSBu
ZXcgKGV4ZWMpIE51bWJlck9iamVjdChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm51bWJl
ck9iamVjdFN0cnVjdHVyZSgpKTsKICAgICBvYmplY3QtPnNldEludGVybmFsVmFsdWUobnVtYmVy
KTsKICAgICByZXR1cm4gb2JqZWN0OwogfQogCi1OdW1iZXJPYmplY3QqIGNvbnN0cnVjdE51bWJl
ckZyb21JbW1lZGlhdGVOdW1iZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRyIHZhbHVlKQot
ewotICAgIE51bWJlck9iamVjdCogb2JqZWN0ID0gbmV3IChleGVjKSBOdW1iZXJPYmplY3QoZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5udW1iZXJPYmplY3RTdHJ1Y3R1cmUoKSk7Ci0gICAg
b2JqZWN0LT5zZXRJbnRlcm5hbFZhbHVlKHZhbHVlKTsKLSAgICByZXR1cm4gb2JqZWN0OwotfQot
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IHJ1bnRpbWUvTnVtYmVyT2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gcnVudGltZS9OdW1iZXJPYmplY3QuaAkocmV2aXNpb24gMzk5NTUpCisrKyBydW50
aW1lL051bWJlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsyNSw2IEBACiAKIG5h
bWVzcGFjZSBKU0MgewogCi0gICAgY2xhc3MgSlNOdW1iZXJDZWxsOwotCiAgICAgY2xhc3MgTnVt
YmVyT2JqZWN0IDogcHVibGljIEpTV3JhcHBlck9iamVjdCB7CiAgICAgcHVibGljOgogICAgICAg
ICBleHBsaWNpdCBOdW1iZXJPYmplY3QoUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+KTsKQEAgLTM5LDgg
KzM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgSlNWYWx1ZVB0ciBnZXRK
U051bWJlcigpOwogICAgIH07CiAKLSAgICBOdW1iZXJPYmplY3QqIGNvbnN0cnVjdE51bWJlcihF
eGVjU3RhdGUqLCBKU051bWJlckNlbGwqKTsKLSAgICBOdW1iZXJPYmplY3QqIGNvbnN0cnVjdE51
bWJlckZyb21JbW1lZGlhdGVOdW1iZXIoRXhlY1N0YXRlKiwgSlNWYWx1ZVB0cik7CisgICAgTnVt
YmVyT2JqZWN0KiBjb25zdHJ1Y3ROdW1iZXIoRXhlY1N0YXRlKiwgSlNWYWx1ZVB0cik7CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBydW50aW1lL09wZXJhdGlvbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBydW50aW1lL09wZXJhdGlvbnMuaAkocmV2aXNpb24gMzk5NTUpCisrKyBydW50aW1lL09w
ZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAvLyBFQ01BIDExLjkuMwogICAgIGlubGluZSBib29sIEpTVmFsdWVQdHI6OmVxdWFs
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciB2MSwgSlNWYWx1ZVB0ciB2MikKICAgICB7Ci0g
ICAgICAgIGlmIChKU0ltbWVkaWF0ZTo6YXJlQm90aEltbWVkaWF0ZU51bWJlcnModjEsIHYyKSkK
KyAgICAgICAgaWYgKEpTSW1tZWRpYXRlOjphcmVCb3RoSW1tZWRpYXRlSW50ZWdlck51bWJlcnMo
djEsIHYyKSkKICAgICAgICAgICAgIHJldHVybiB2MSA9PSB2MjsKIAogICAgICAgICByZXR1cm4g
ZXF1YWxTbG93Q2FzZShleGVjLCB2MSwgdjIpOwpAQCAtMzksNyArMzksNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBKU1ZhbHVlUHRyOjplcXVhbFNsb3dDYXNl
SW5saW5lKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciB2MSwgSlNWYWx1ZVB0ciB2MikKICAg
ICB7Ci0gICAgICAgIEFTU0VSVCghSlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1lZGlhdGVOdW1iZXJz
KHYxLCB2MikpOworICAgICAgICBBU1NFUlQoIUpTSW1tZWRpYXRlOjphcmVCb3RoSW1tZWRpYXRl
SW50ZWdlck51bWJlcnModjEsIHYyKSk7CiAKICAgICAgICAgZG8gewogICAgICAgICAgICAgaWYg
KHYxLT5pc051bWJlcigpICYmIHYyLT5pc051bWJlcigpKQpAQCAtNzEsNyArNzEsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICB2MSA9IHAx
OwotICAgICAgICAgICAgICAgIGlmIChKU0ltbWVkaWF0ZTo6YXJlQm90aEltbWVkaWF0ZU51bWJl
cnModjEsIHYyKSkKKyAgICAgICAgICAgICAgICBpZiAoSlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1l
ZGlhdGVJbnRlZ2VyTnVtYmVycyh2MSwgdjIpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
djEgPT0gdjI7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CkBAIC04
MSw3ICs4MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAgICAgICAgIHYyID0gcDI7Ci0gICAgICAgICAgICAgICAgaWYgKEpTSW1tZWRpYXRlOjphcmVC
b3RoSW1tZWRpYXRlTnVtYmVycyh2MSwgdjIpKQorICAgICAgICAgICAgICAgIGlmIChKU0ltbWVk
aWF0ZTo6YXJlQm90aEltbWVkaWF0ZUludGVnZXJOdW1iZXJzKHYxLCB2MikpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB2MSA9PSB2MjsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgIH0KQEAgLTEwNywzNCArMTA3LDIzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIC8v
IEVDTUEgMTEuOS4zCiAgICAgaW5saW5lIGJvb2wgSlNWYWx1ZVB0cjo6c3RyaWN0RXF1YWwoSlNW
YWx1ZVB0ciB2MSwgSlNWYWx1ZVB0ciB2MikKICAgICB7Ci0gICAgICAgIGlmIChKU0ltbWVkaWF0
ZTo6YXJlQm90aEltbWVkaWF0ZSh2MSwgdjIpKQorICAgICAgICBpZiAoSlNJbW1lZGlhdGU6OmFy
ZUJvdGhJbW1lZGlhdGVJbnRlZ2VyTnVtYmVycyh2MSwgdjIpKQogICAgICAgICAgICAgcmV0dXJu
IHYxID09IHYyOwogCi0gICAgICAgIGlmIChKU0ltbWVkaWF0ZTo6aXNFaXRoZXJJbW1lZGlhdGUo
djEsIHYyKSAmICh2MSAhPSBqczAoKSkgJiAodjIgIT0ganMwKCkpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBpZiAodjEtPmlzTnVtYmVyKCkgJiYgdjItPmlzTnVtYmVyKCkp
CisgICAgICAgICAgICByZXR1cm4gdjEtPnVuY2hlY2tlZEdldE51bWJlcigpID09IHYyLT51bmNo
ZWNrZWRHZXROdW1iZXIoKTsKKworICAgICAgICBpZiAoSlNJbW1lZGlhdGU6OmlzRWl0aGVySW1t
ZWRpYXRlKHYxLCB2MikpCisgICAgICAgICAgICByZXR1cm4gdjEgPT0gdjI7CiAKICAgICAgICAg
cmV0dXJuIHN0cmljdEVxdWFsU2xvd0Nhc2UodjEsIHYyKTsKICAgICB9CiAKICAgICBBTFdBWVNf
SU5MSU5FIGJvb2wgSlNWYWx1ZVB0cjo6c3RyaWN0RXF1YWxTbG93Q2FzZUlubGluZShKU1ZhbHVl
UHRyIHYxLCBKU1ZhbHVlUHRyIHYyKQogICAgIHsKLSAgICAgICAgQVNTRVJUKCFKU0ltbWVkaWF0
ZTo6YXJlQm90aEltbWVkaWF0ZSh2MSwgdjIpKTsKLQotICAgICAgICBpZiAoSlNJbW1lZGlhdGU6
OmlzRWl0aGVySW1tZWRpYXRlKHYxLCB2MikpIHsKLSAgICAgICAgICAgIEFTU0VSVCh2MSA9PSBq
czAoKSB8fCB2MiA9PSBqczAoKSk7Ci0gICAgICAgICAgICBBU1NFUlQodjEgIT0gdjIpOwotCi0g
ICAgICAgICAgICAvLyBUaGUgcmVhc29uIHdlIGNhbid0IGp1c3QgcmV0dXJuIGZhbHNlIGhlcmUg
aXMgdGhhdCAwID09PSAtMCwKLSAgICAgICAgICAgIC8vIGFuZCB3aGlsZSB0aGUgZm9ybWVyIGlz
IGFuIGltbWVkaWF0ZSBudW1iZXIsIHRoZSBsYXR0ZXIgaXMgbm90LgotICAgICAgICAgICAgaWYg
KHYxID09IGpzMCgpKQotICAgICAgICAgICAgICAgIHJldHVybiB2Mi0+YXNDZWxsKCktPmlzTnVt
YmVyKCkgJiYgdjItPmFzTnVtYmVyQ2VsbCgpLT52YWx1ZSgpID09IDA7Ci0gICAgICAgICAgICBy
ZXR1cm4gdjEtPmFzQ2VsbCgpLT5pc051bWJlcigpICYmIHYxLT5hc051bWJlckNlbGwoKS0+dmFs
dWUoKSA9PSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHYxLT5hc0NlbGwoKS0+aXNOdW1i
ZXIoKSkgewotICAgICAgICAgICAgcmV0dXJuIHYyLT5hc0NlbGwoKS0+aXNOdW1iZXIoKQotICAg
ICAgICAgICAgICAgICYmIHYxLT5hc051bWJlckNlbGwoKS0+dmFsdWUoKSA9PSB2Mi0+YXNOdW1i
ZXJDZWxsKCktPnZhbHVlKCk7Ci0gICAgICAgIH0KKyAgICAgICAgQVNTRVJUKCFKU0ltbWVkaWF0
ZTo6aXNFaXRoZXJJbW1lZGlhdGUodjEsIHYyKSk7CisgICAgICAgIEFTU0VSVCghdjEtPmlzTnVt
YmVyKCkpOworICAgICAgICBBU1NFUlQoIXYyLT5pc051bWJlcigpKTsKIAogICAgICAgICBpZiAo
djEtPmFzQ2VsbCgpLT5pc1N0cmluZygpKSB7CiAgICAgICAgICAgICByZXR1cm4gdjItPmFzQ2Vs
bCgpLT5pc1N0cmluZygpCkluZGV4OiB3dGYvUGxhdGZvcm0uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB3dGYv
UGxhdGZvcm0uaAkocmV2aXNpb24gMzk5NTUpCisrKyB3dGYvUGxhdGZvcm0uaAkod29ya2luZyBj
b3B5KQpAQCAtNDM1LDYgKzQzNSwxMCBAQAogI2RlZmluZSBFTkFCTEVfVEVYVF9DQVJFVCAxCiAj
ZW5kaWYKIAorI2lmICFkZWZpbmVkKFdURl9VU0VfQUxURVJOQVRFX0pTSU1NRURJQVRFKSAmJiBQ
TEFURk9STShYODZfNjQpICYmIFBMQVRGT1JNKE1BQykKKyNkZWZpbmUgV1RGX1VTRV9BTFRFUk5B
VEVfSlNJTU1FRElBVEUgMQorI2VuZGlmCisKICNpZiAhZGVmaW5lZChFTkFCTEVfSklUKQogLyog
eDg2LTY0IHN1cHBvcnQgaXMgdW5kZXIgZGV2ZWxvcG1lbnQuICovCiAjaWYgUExBVEZPUk0oWDg2
XzY0KSAmJiBQTEFURk9STShNQUMpCkBAIC00NDIsNyArNDQ2LDYgQEAKICAgICAjZGVmaW5lIFdU
Rl9VU0VfSklUX1NUVUJfQVJHVU1FTlRfUkVHSVNURVIgMQogICAgICNkZWZpbmUgRU5BQkxFX0pJ
VF9PUFRJTUlaRV9DQUxMIDEKICAgICAjZGVmaW5lIEVOQUJMRV9KSVRfT1BUSU1JWkVfUFJPUEVS
VFlfQUNDRVNTIDEKLSAgICAjZGVmaW5lIFdURl9VU0VfQUxURVJOQVRFX0pTSU1NRURJQVRFIDEK
IC8qIFRoZSBKSVQgaXMgdGVzdGVkICYgd29ya2luZyBvbiB4ODYgTWFjICovCiAjZWxpZiBQTEFU
Rk9STShYODYpICYmIFBMQVRGT1JNKE1BQykKICAgICAjZGVmaW5lIEVOQUJMRV9KSVQgMQo=
</data>
<flag name="review"
          id="12776"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>