<?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>16207</bug_id>
          
          <creation_ts>2007-11-30 07:02:13 -0800</creation_ts>
          <short_desc>JavaScript regular expressions should match UTF-16 code units rather than characters</short_desc>
          <delta_ts>2007-11-30 10:55:00 -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.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>Minor</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>62791</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-11-30 07:02:13 -0800</bug_when>
    <thetext>Testing with other browsers indicates that the JavaScript regular expression code needs to treat surrogate pairs as two &quot;characters&quot; rather than a single character to match them.

This is good news in a way, because it&apos;s an easy way to make the regular expression engine faster, by removing the UTF-16 smarts from most of the engine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62792</commentid>
    <comment_count>1</comment_count>
      <attachid>17606</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-11-30 07:08:54 -0800</bug_when>
    <thetext>Created attachment 17606
patch, speeds up SunSpider</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62798</commentid>
    <comment_count>2</comment_count>
      <attachid>17606</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2007-11-30 10:08:37 -0800</bug_when>
    <thetext>Comment on attachment 17606
patch, speeds up SunSpider

 2425                                 d = *++ptr;

The precedence here seems correct, but potentially confusing. Maybe *(++ptr) would be better?

 757                 int c = *stack.currentFrame-&gt;args.subjectPtr++;

Again, parentheses might make it clearer what precedence you&apos;re expecting here (and in the other instances of this expression).

 1640                                 if (stack.currentFrame-&gt;args.subjectPtr &gt;= md.end_subject || isNewline(*stack.currentFrame-&gt;args.subjectPtr))

Why did you leave the comparison with md.end_subject here but now elsewhere?

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62800</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-11-30 10:55:00 -0800</bug_when>
    <thetext>Committed revision 28243.
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17606</attachid>
            <date>2007-11-30 07:08:54 -0800</date>
            <delta_ts>2007-11-30 10:08:37 -0800</delta_ts>
            <desc>patch, speeds up SunSpider</desc>
            <filename>JSRegExpNonBMPPatch.txt</filename>
            <type>text/plain</type>
            <size>66186</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4MjMyKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzAgQEAKKzIwMDctMTEtMzAgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIC0gZml4IGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2MjA3CisgICAgICAgICAgSmF2YVNjcmlwdCByZWd1bGFyIGV4cHJlc3Npb25zIHNob3Vs
ZCBtYXRjaCBVVEYtMTYgY29kZSB1bml0cyByYXRoZXIgdGhhbiBjaGFyYWN0ZXJzCisKKyAgICAg
ICAgU3VuU3BpZGVyIHNheXMgdGhpcyBpcyA1LjUlIGZhc3RlciBvbiB0aGUgcmVnZXhwIHRlc3Qs
IDAuNCUgZmFzdGUgb3ZlcmFsbC4KKworICAgICAgICBUZXN0OiBmYXN0L2pzL3JlZ2V4cC1ub24t
Ym1wLmh0bWwKKworICAgICAgICAqIHBjcmUvcGNyZV9jb21waWxlLmNwcDoKKyAgICAgICAgKGNv
bXBpbGVfYnJhbmNoKTogUmVtb3ZlZCBjYWxscyB0byB0aGUgVVRGLTE2IGNoYXJhY3RlciBhY2Nl
c3NvciBmdW5jdGlvbnMsIHJlcGxhY2luZworICAgICAgICB0aGVtIHdpdGggc2ltcGxlIHBvaW50
ZXIgZGVyZWZlcmVuY2VzIGluIHNvbWUgY2FzZXMsIGFuZCBubyBjb2RlIGF0IGFsbCBpbiBvdGhl
cnMuCisgICAgICAgIChjYWxjdWxhdGVDb21waWxlZFBhdHRlcm5MZW5ndGhBbmRGbGFncyk6IERp
dHRvLgorCisgICAgICAgICogcGNyZS9wY3JlX2V4ZWMuY3BwOgorICAgICAgICAobWF0Y2gpOiBG
aXhlZCBpbmRlbnRhdGlvbiBvZiBzb21lIGNhc2UgbGFiZWxzIChpbmNsdWRpbmcgYWxsIHRoZSBC
RUdJTl9PUENPREUpLgorICAgICAgICBSZW1vdmVkIGNhbGxzIHRvIHRoZSBVVEYtMTYgY2hhcmFj
dGVyIGFjY2Vzc29yIGZ1bmN0aW9ucywgcmVwbGFjaW5nIHRoZW0gd2l0aCBzaW1wbGUKKyAgICAg
ICAgcG9pbnRlciBkZXJlZmVyZW5jZXMgaW4gc29tZSBjYXNlcywgYW5kIG5vIGNvZGUgYXQgYWxs
IGluIG90aGVycy4gQWxzbyByZW1vdmVkIHNvbWUKKyAgICAgICAgZXhwbGljaXQgVVRGLTE2IHN1
cHBvcnQgY29kZSBpbiBhIGZldyBjYXNlcy4gUmVtb3ZlZCB0aGUgdW5uZWVkZWQgIlVURi04IiBj
b2RlIHBhdGgKKyAgICAgICAgaW4gdGhlIEFOWV9DSEFSIHJlcGVhdCBjb2RlLCBhbmQgaW4gYW5v
dGhlciBjYXNlLCBlbGltaW5hdGVkIHRoZSBjb2RlIHRvIGNoZWNrIGFnYWluc3QKKyAgICAgICAg
ZW5kX3N1YmplY3QgaW4gYmVjYXVzZSBpdCBpcyBhbHJlYWR5IGRvbmUgb3V0c2lkZSB0aGUgbG9v
cC4KKyAgICAgICAgKGpzUmVnRXhwRXhlY3V0ZSk6CisKKyAgICAgICAgKiBwY3JlL3BjcmVfaW50
ZXJuYWwuaDogUmVtb3ZlZCBhbGwgdGhlIFVURi0xNiBoZWxwZXIgZnVuY3Rpb25zLgorCiAyMDA3
LTExLTMwICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBNYWNpZWouCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9wY3JlL3BjcmVfY29tcGlsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcGNyZS9wY3JlX2NvbXBpbGUuY3BwCShyZXZp
c2lvbiAyODIzMikKKysrIEphdmFTY3JpcHRDb3JlL3BjcmUvcGNyZV9jb21waWxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODk0LDkgKzg5NCw2IEBAIGNvbXBpbGVfYnJhbmNoKGludCBvcHRpb25z
LCBpbnQqIGJyYWNrZXQKICAgICAgICAgICAgICAgICAgc3RyaWN0IGhlcmUuIEF0IHRoZSBzdGFy
dCBvZiB0aGUgbG9vcCwgYyBjb250YWlucyB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUKICAgICAgICAg
ICAgICAgICAgY2hhcmFjdGVyLiAqLwogICAgICAgICAgICAgICAgIHdoaWxlICgoYyA9ICooKytw
dHIpKSAhPSAnXScpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGMgPiAxMjcpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBjID0gZ2V0Q2hhckFuZEFkdmFuY2VJZlN1cnJvZ2F0ZShwdHIpOwot
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLyogQmFja3NsYXNoIG1h
eSBpbnRyb2R1Y2UgYSBzaW5nbGUgY2hhcmFjdGVyLCBvciBpdCBtYXkgaW50cm9kdWNlIG9uZQog
ICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHNwZWNpYWxzLCB3aGljaCBqdXN0IHNldCBhIGZs
YWcuIEVzY2FwZWQgaXRlbXMgYXJlIGNoZWNrZWQgZm9yCiAgICAgICAgICAgICAgICAgICAgICB2
YWxpZGl0eSBpbiB0aGUgcHJlLWNvbXBpbGluZyBwYXNzLiBUaGUgc2VxdWVuY2UgXGIgaXMgYSBz
cGVjaWFsIGNhc2UuCkBAIC05NjksNyArOTY2LDcgQEAgY29tcGlsZV9icmFuY2goaW50IG9wdGlv
bnMsIGludCogYnJhY2tldAogICAgICAgICAgICAgICAgICAgICBpZiAocHRyWzFdID09ICctJyAm
JiBwdHJbMl0gIT0gJ10nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwdHIgKz0gMjsKICAg
ICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGQgPSBn
ZXRDaGFyQW5kQWR2YW5jZUlmU3Vycm9nYXRlKHB0cik7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgZCA9ICpwdHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8qIFRoZSBzZWNvbmQgcGFydCBvZiBhIHJhbmdlIGNhbiBiZSBhIHNpbmdsZS1j
aGFyYWN0ZXIgZXNjYXBlLCBidXQKICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgYW55IG9m
IHRoZSBvdGhlciBlc2NhcGVzLiBQZXJsIDUuNiB0cmVhdHMgYSBoeXBoZW4gYXMgYSBsaXRlcmFs
CkBAIC0yNDA2LDcgKzI0MDMsNyBAQCBzdGF0aWMgaW50IGNhbGN1bGF0ZUNvbXBpbGVkUGF0dGVy
bkxlbmd0CiAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzLiAqLwogICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBjID0gZ2V0Q2hhckFuZEFkdmFuY2VJZlN1cnJvZ2F0ZShwdHIsIHBhdHRlcm5FbmQpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYyA9ICpwdHI7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbWUgaGVyZSBmcm9tIGhhbmRsaW5nIFwg
YWJvdmUgd2hlbiBpdCBlc2NhcGVzIHRvIGEgY2hhciB2YWx1ZSAqLwogICAgICAgICAgICAgICAg
ICAgICAgICAgCkBAIC0yNDI0LDEwICsyNDIxLDggQEAgc3RhdGljIGludCBjYWxjdWxhdGVDb21w
aWxlZFBhdHRlcm5MZW5ndAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLWQg
PT0gRVNDX2IpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gJ1xiJzsg
ICAgICAgIC8qIGJhY2tzcGFjZSAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChwdHIgKyAxIDwgcGF0dGVybkVuZCAm
JiBwdHJbMV0gIT0gJ10nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0cisr
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gZ2V0Q2hhckFuZEFkdmFuY2VJ
ZlN1cnJvZ2F0ZShwdHIsIHBhdHRlcm5FbmQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChwdHIgKyAxIDwgcGF0dGVy
bkVuZCAmJiBwdHJbMV0gIT0gJ10nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
ID0gKisrcHRyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkIDwgMCkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRyID0gaHlwdHI7ICAgICAgLyogZ28gYmFjayB0
byBoeXBoZW4gYXMgZGF0YSAqLwogICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjY3Nyw2
ICsyNjcyLDcgQEAgc3RhdGljIGludCBjYWxjdWxhdGVDb21waWxlZFBhdHRlcm5MZW5ndAogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0K
KwogICAgICAgICAgICAgICAgIC8qIE5vbi1zcGVjaWFsIGNoYXJhY3Rlci4gSXQgd29uJ3QgYmUg
c3BhY2Ugb3IgIyBpbiBleHRlbmRlZCBtb2RlLCBzbyBpdCBpcwogICAgICAgICAgICAgICAgICBh
bHdheXMgYSBnZW51aW5lIGNoYXJhY3Rlci4gSWYgd2UgYXJlIGluIGEgXFEuLi5cRSBzZXF1ZW5j
ZSwgY2hlY2sgZm9yIHRoZQogICAgICAgICAgICAgICAgICBlbmQ7IGlmIG5vdCwgd2UgaGF2ZSBh
IGxpdGVyYWwuICovCkBAIC0yNjg2LDE5ICsyNjgyLDE0IEBAIHN0YXRpYyBpbnQgY2FsY3VsYXRl
Q29tcGlsZWRQYXR0ZXJuTGVuZ3QKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBs
ZW5ndGggKz0gMjsgICAgICAgICAgLyogRm9yIGEgb25lLWJ5dGUgY2hhcmFjdGVyICovCiAgICAg
ICAgICAgICAgICAgbGFzdGl0ZW1sZW5ndGggPSAxOyAgIC8qIERlZmF1bHQgbGVuZ3RoIG9mIGxh
c3QgaXRlbSBmb3IgcmVwZWF0cyAqLwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IC8qIEluIFVURi04IG1vZGUsIGNoZWNrIGZvciBhZGRpdGlvbmFsIGJ5dGVzLiAqLwotICAgICAg
ICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgaWYgKGMgPiAxMjcpIHsKLSAgICAgICAgICAg
ICAgICAgICAgYyA9IGdldENoYXJBbmRBZHZhbmNlSWZTdXJyb2dhdGUocHRyLCBwYXR0ZXJuRW5k
KTsKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgX3BjcmVfdXRmOF90YWJs
ZTFfc2l6ZTsgaSsrKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjIDw9IF9wY3Jl
X3V0ZjhfdGFibGUxW2ldKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCArPSBpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgbGFzdGl0ZW1sZW5ndGggKz0gaTsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBpbnQgaTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8
IF9wY3JlX3V0ZjhfdGFibGUxX3NpemU7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChjIDw9IF9wY3JlX3V0ZjhfdGFibGUxW2ldKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBsZW5ndGggKz0gaTsKKyAgICAgICAgICAgICAg
ICAgICAgbGFzdGl0ZW1sZW5ndGggKz0gaTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgY29udGludWU7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9w
Y3JlL3BjcmVfZXhlYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcGNyZS9wY3Jl
X2V4ZWMuY3BwCShyZXZpc2lvbiAyODIzMikKKysrIEphdmFTY3JpcHRDb3JlL3BjcmUvcGNyZV9l
eGVjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYyLDcgKzQ2Miw3IEBAIFJFQ1VSU0U6CiAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAvKiBOb24tY2FwdHVyaW5nIGJyYWNrZXQ6IG9wdGltaXpl
ZCAqLwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEJFR0lOX09QQ09ERShCUkEp
OgorICAgICAgICAgICAgQkVHSU5fT1BDT0RFKEJSQSk6CiAgICAgICAgICAgICBOT05fQ0FQVFVS
SU5HX0JSQUNLRVQ6CiAgICAgICAgICAgICAgICAgRFBSSU5URigoInN0YXJ0IGJyYWNrZXQgMFxu
IikpOwogICAgICAgICAgICAgICAgIGRvIHsKQEAgLTQ3NiwxMyArNDc2LDEzIEBAIFJFQ1VSU0U6
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLyogU2tpcCBvdmVyIGxhcmdlIGV4
dHJhY3Rpb24gbnVtYmVyIGRhdGEgaWYgZW5jb3VudGVyZWQuICovCiAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgQkVHSU5fT1BDT0RFKEJSQU5VTUJFUik6CisgICAgICAgICAgICBC
RUdJTl9PUENPREUoQlJBTlVNQkVSKToKICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJh
bWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKz0gMzsKICAgICAgICAgICAgICAgICBORVhUX09QQ09E
RTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvKiBFbmQgb2YgdGhlIHBhdHRl
cm4uICovCiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgQkVHSU5fT1BDT0RFKEVO
RCk6CisgICAgICAgICAgICBCRUdJTl9PUENPREUoRU5EKToKICAgICAgICAgICAgICAgICBtZC5l
bmRfbWF0Y2hfcHRyID0gc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHI7ICAgICAg
ICAgIC8qIFJlY29yZCB3aGVyZSB3ZSBlbmRlZCAqLwogICAgICAgICAgICAgICAgIG1kLmVuZF9v
ZmZzZXRfdG9wID0gc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLm9mZnNldF90b3A7ICAgLyogYW5k
IGhvdyBtYW55IGV4dHJhY3RzIHdlcmUgdGFrZW4gKi8KICAgICAgICAgICAgICAgICBpc19tYXRj
aCA9IHRydWU7CkBAIC00OTQsNyArNDk0LDcgQEAgUkVDVVJTRToKICAgICAgICAgICAgICAgICAg
c3RhcnQgb2YgZWFjaCBicmFuY2ggdG8gbW92ZSB0aGUgY3VycmVudCBwb2ludCBiYWNrd2FyZHMs
IHNvIHRoZSBjb2RlIGF0CiAgICAgICAgICAgICAgICAgIHRoaXMgbGV2ZWwgaXMgaWRlbnRpY2Fs
IHRvIHRoZSBsb29rYWhlYWQgY2FzZS4gKi8KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBCRUdJTl9PUENPREUoQVNTRVJUKToKKyAgICAgICAgICAgIEJFR0lOX09QQ09ERShBU1NF
UlQpOgogICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgICAgUkVDVVJTSVZF
X01BVENIX1NUQVJUTkdfTkVXX0dST1VQKDYsIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0
cnVjdGlvblB0ciArIDEgKyBMSU5LX1NJWkUsIE5VTEwpOwogICAgICAgICAgICAgICAgICAgICBp
ZiAoaXNfbWF0Y2gpCkBAIC01MTQsNyArNTE0LDcgQEAgUkVDVVJTRToKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAvKiBOZWdhdGl2ZSBhc3NlcnRpb246IGFsbCBicmFuY2hlcyBt
dXN0IGZhaWwgdG8gbWF0Y2ggKi8KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBC
RUdJTl9PUENPREUoQVNTRVJUX05PVCk6CisgICAgICAgICAgICBCRUdJTl9PUENPREUoQVNTRVJU
X05PVCk6CiAgICAgICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgICAgICBSRUNVUlNJ
VkVfTUFUQ0hfU1RBUlROR19ORVdfR1JPVVAoNywgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmlu
c3RydWN0aW9uUHRyICsgMSArIExJTktfU0laRSwgTlVMTCk7CiAgICAgICAgICAgICAgICAgICAg
IGlmIChpc19tYXRjaCkKQEAgLTUzMiw3ICs1MzIsNyBAQCBSRUNVUlNFOgogICAgICAgICAgICAg
ICAgICBmb3IgdGhpcyBraW5kIG9mIHN1YnBhdHRlcm4uIElmIGFueSBvbmUgYnJhbmNoIG1hdGNo
ZXMsIHdlIGNhcnJ5IG9uIGFzIGF0CiAgICAgICAgICAgICAgICAgIHRoZSBlbmQgb2YgYSBub3Jt
YWwgYnJhY2tldCwgbGVhdmluZyB0aGUgc3ViamVjdCBwb2ludGVyLiAqLwogICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIEJFR0lOX09QQ09ERShPTkNFKToKKyAgICAgICAgICAgIEJF
R0lOX09QQ09ERShPTkNFKToKICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmxv
Y2Fscy5pbnN0cnVjdGlvblB0ckF0U3RhcnRPZk9uY2UgPSBzdGFjay5jdXJyZW50RnJhbWUtPmFy
Z3MuaW5zdHJ1Y3Rpb25QdHI7CiAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5s
b2NhbHMuc3ViamVjdFB0ckF0U3RhcnRPZkluc3RydWN0aW9uID0gc3RhY2suY3VycmVudEZyYW1l
LT5hcmdzLnN1YmplY3RQdHI7CiAgICAgICAgICAgICAgICAgCkBAIC01OTIsNyArNTkyLDcgQEAg
UkVDVVJTRToKICAgICAgICAgICAgICAgICAvKiBBbiBhbHRlcm5hdGlvbiBpcyB0aGUgZW5kIG9m
IGEgYnJhbmNoOyBzY2FuIGFsb25nIHRvIGZpbmQgdGhlIGVuZCBvZiB0aGUKICAgICAgICAgICAg
ICAgICAgYnJhY2tldGVkIGdyb3VwIGFuZCBnbyB0byB0aGVyZS4gKi8KICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBCRUdJTl9PUENPREUoQUxUKToKKyAgICAgICAgICAgIEJFR0lO
X09QQ09ERShBTFQpOgogICAgICAgICAgICAgICAgIG1vdmVPcGNvZGVQdHJQYXN0QW55QWx0ZXJu
YXRlQnJhbmNoZXMoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyKTsKICAg
ICAgICAgICAgICAgICBORVhUX09QQ09ERTsKICAgICAgICAgICAgICAgICAKQEAgLTYwMiwzNiAr
NjAyLDM0IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgIHJlcGVhdCBsaW1pdHMgYXJlIGNv
bXBpbGVkIGFzIGEgbnVtYmVyIG9mIGNvcGllcywgd2l0aCB0aGUgb3B0aW9uYWwgb25lcwogICAg
ICAgICAgICAgICAgICBwcmVjZWRlZCBieSBCUkFaRVJPIG9yIEJSQU1JTlpFUk8uICovCiAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgQkVHSU5fT1BDT0RFKEJSQVpFUk8pOgotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5s
b2NhbHMuc3RhcnRPZlJlcGVhdGluZ0JyYWNrZXQgPSBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Mu
aW5zdHJ1Y3Rpb25QdHIgKyAxOwotICAgICAgICAgICAgICAgICAgICBSRUNVUlNJVkVfTUFUQ0hf
U1RBUlROR19ORVdfR1JPVVAoMTQsIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnN0YXJ0T2ZS
ZXBlYXRpbmdCcmFja2V0LCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3VicGF0dGVyblN0YXJ0
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzX21hdGNoKQotICAgICAgICAgICAgICAgICAg
ICAgICAgUlJFVFVSTjsKLSAgICAgICAgICAgICAgICAgICAgbW92ZU9wY29kZVB0clBhc3RBbnlB
bHRlcm5hdGVCcmFuY2hlcyhzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5zdGFydE9mUmVwZWF0
aW5nQnJhY2tldCk7Ci0gICAgICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJn
cy5pbnN0cnVjdGlvblB0ciA9IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnN0YXJ0T2ZSZXBl
YXRpbmdCcmFja2V0ICsgMSArIExJTktfU0laRTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICBCRUdJTl9PUENPREUoQlJBWkVSTyk6IHsKKyAgICAgICAgICAgICAgICBzdGFjay5jdXJy
ZW50RnJhbWUtPmxvY2Fscy5zdGFydE9mUmVwZWF0aW5nQnJhY2tldCA9IHN0YWNrLmN1cnJlbnRG
cmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciArIDE7CisgICAgICAgICAgICAgICAgUkVDVVJTSVZF
X01BVENIX1NUQVJUTkdfTkVXX0dST1VQKDE0LCBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5z
dGFydE9mUmVwZWF0aW5nQnJhY2tldCwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YnBhdHRl
cm5TdGFydCk7CisgICAgICAgICAgICAgICAgaWYgKGlzX21hdGNoKQorICAgICAgICAgICAgICAg
ICAgICBSUkVUVVJOOworICAgICAgICAgICAgICAgIG1vdmVPcGNvZGVQdHJQYXN0QW55QWx0ZXJu
YXRlQnJhbmNoZXMoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuc3RhcnRPZlJlcGVhdGluZ0Jy
YWNrZXQpOworICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVj
dGlvblB0ciA9IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnN0YXJ0T2ZSZXBlYXRpbmdCcmFj
a2V0ICsgMSArIExJTktfU0laRTsKICAgICAgICAgICAgICAgICBORVhUX09QQ09ERTsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBCRUdJTl9PUENPREUo
QlJBTUlOWkVSTyk6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzdGFj
ay5jdXJyZW50RnJhbWUtPmxvY2Fscy5zdGFydE9mUmVwZWF0aW5nQnJhY2tldCA9IHN0YWNrLmN1
cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciArIDE7Ci0gICAgICAgICAgICAgICAgICAg
IG1vdmVPcGNvZGVQdHJQYXN0QW55QWx0ZXJuYXRlQnJhbmNoZXMoc3RhY2suY3VycmVudEZyYW1l
LT5sb2NhbHMuc3RhcnRPZlJlcGVhdGluZ0JyYWNrZXQpOwotICAgICAgICAgICAgICAgICAgICBS
RUNVUlNJVkVfTUFUQ0hfU1RBUlROR19ORVdfR1JPVVAoMTUsIHN0YWNrLmN1cnJlbnRGcmFtZS0+
bG9jYWxzLnN0YXJ0T2ZSZXBlYXRpbmdCcmFja2V0ICsgMSArIExJTktfU0laRSwgc3RhY2suY3Vy
cmVudEZyYW1lLT5hcmdzLnN1YnBhdHRlcm5TdGFydCk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChpc19tYXRjaCkKLSAgICAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk47Ci0gICAgICAgICAg
ICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0cisrOwotICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEJFR0lOX09QQ09ERShCUkFNSU5aRVJPKTogewor
ICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnN0YXJ0T2ZSZXBlYXRp
bmdCcmFja2V0ID0gc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICsgMTsK
KyAgICAgICAgICAgICAgICBtb3ZlT3Bjb2RlUHRyUGFzdEFueUFsdGVybmF0ZUJyYW5jaGVzKHN0
YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnN0YXJ0T2ZSZXBlYXRpbmdCcmFja2V0KTsKKyAgICAg
ICAgICAgICAgICBSRUNVUlNJVkVfTUFUQ0hfU1RBUlROR19ORVdfR1JPVVAoMTUsIHN0YWNrLmN1
cnJlbnRGcmFtZS0+bG9jYWxzLnN0YXJ0T2ZSZXBlYXRpbmdCcmFja2V0ICsgMSArIExJTktfU0la
RSwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YnBhdHRlcm5TdGFydCk7CisgICAgICAgICAg
ICAgICAgaWYgKGlzX21hdGNoKQorICAgICAgICAgICAgICAgICAgICBSUkVUVVJOOworICAgICAg
ICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0cisrOwogICAg
ICAgICAgICAgICAgIE5FWFRfT1BDT0RFOworICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIC8qIEVuZCBvZiBhIGdyb3VwLCByZXBlYXRlZCBvciBub24tcmVw
ZWF0aW5nLiBJZiB3ZSBhcmUgYXQgdGhlIGVuZCBvZgogICAgICAgICAgICAgICAgICBhbiBhc3Nl
cnRpb24gImdyb3VwIiwgc3RvcCBtYXRjaGluZyBhbmQgcmV0dXJuIE1BVENIX01BVENILCBidXQg
cmVjb3JkIHRoZQogICAgICAgICAgICAgICAgICBjdXJyZW50IGhpZ2ggd2F0ZXIgbWFyayBmb3Ig
dXNlIGJ5IHBvc2l0aXZlIGFzc2VydGlvbnMuIERvIHRoaXMgYWxzbwogICAgICAgICAgICAgICAg
ICBmb3IgdGhlICJvbmNlIiAobm90LWJhY2t1cCB1cCkgZ3JvdXBzLiAqLwogICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIEJFR0lOX09QQ09ERShLRVQpOgotICAgICAgICAgICAgICAg
IEJFR0lOX09QQ09ERShLRVRSTUlOKToKLSAgICAgICAgICAgICAgICBCRUdJTl9PUENPREUoS0VU
Uk1BWCk6CisgICAgICAgICAgICBCRUdJTl9PUENPREUoS0VUKToKKyAgICAgICAgICAgIEJFR0lO
X09QQ09ERShLRVRSTUlOKToKKyAgICAgICAgICAgIEJFR0lOX09QQ09ERShLRVRSTUFYKToKICAg
ICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5pbnN0cnVjdGlvblB0ckF0
U3RhcnRPZk9uY2UgPSBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgLSBn
ZXRPcGNvZGVWYWx1ZUF0T2Zmc2V0KHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlv
blB0ciwgMSk7CiAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YnBh
dHRlcm5TdGFydCA9IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnN1YnBhdHRlcm5TdGFydDsK
ICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5zdWJwYXR0ZXJuU3Rh
cnQgPSBzdGFjay5jdXJyZW50RnJhbWUtPnByZXZpb3VzRnJhbWUtPmFyZ3Muc3VicGF0dGVyblN0
YXJ0OwpAQCAtNzExLDcgKzcwOSw3IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgLyogU3RhcnQgb2Ygc3ViamVjdCwgb3IgYWZ0ZXIgaW50ZXJuYWwgbmV3bGlu
ZSBpZiBtdWx0aWxpbmUuICovCiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgQkVH
SU5fT1BDT0RFKENJUkMpOgorICAgICAgICAgICAgQkVHSU5fT1BDT0RFKENJUkMpOgogICAgICAg
ICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciAhPSBtZC5z
dGFydF9zdWJqZWN0ICYmICghbWQubXVsdGlsaW5lIHx8ICFpc05ld2xpbmUoc3RhY2suY3VycmVu
dEZyYW1lLT5hcmdzLnN1YmplY3RQdHJbLTFdKSkpCiAgICAgICAgICAgICAgICAgICAgIFJSRVRV
Uk5fTk9fTUFUQ0g7CiAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmlu
c3RydWN0aW9uUHRyKys7CkBAIC03MTksNyArNzE3LDcgQEAgUkVDVVJTRToKICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAvKiBFbmQgb2Ygc3ViamVjdCwgb3IgYmVmb3JlIGludGVy
bmFsIG5ld2xpbmUgaWYgbXVsdGlsaW5lLiAqLwogICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIEJFR0lOX09QQ09ERShET0xMKToKKyAgICAgICAgICAgIEJFR0lOX09QQ09ERShET0xM
KToKICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQ
dHIgPCBtZC5lbmRfc3ViamVjdCAmJiAoIW1kLm11bHRpbGluZSB8fCAhaXNOZXdsaW5lKCpzdGFj
ay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cikpKQogICAgICAgICAgICAgICAgICAgICBS
UkVUVVJOX05PX01BVENIOwogICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJn
cy5pbnN0cnVjdGlvblB0cisrOwpAQCAtNzI3LDE2ICs3MjUsMTUgQEAgUkVDVVJTRToKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvKiBXb3JkIGJvdW5kYXJ5IGFzc2VydGlvbnMg
Ki8KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBCRUdJTl9PUENPREUoTk9UX1dP
UkRfQk9VTkRBUlkpOgotICAgICAgICAgICAgICAgIEJFR0lOX09QQ09ERShXT1JEX0JPVU5EQVJZ
KToKLSAgICAgICAgICAgIHsKKyAgICAgICAgICAgIEJFR0lOX09QQ09ERShOT1RfV09SRF9CT1VO
REFSWSk6CisgICAgICAgICAgICBCRUdJTl9PUENPREUoV09SRF9CT1VOREFSWSk6IHsKICAgICAg
ICAgICAgICAgICBib29sIGN1cnJlbnRDaGFySXNXb3JkQ2hhciA9IGZhbHNlOwogICAgICAgICAg
ICAgICAgIGJvb2wgcHJldmlvdXNDaGFySXNXb3JkQ2hhciA9IGZhbHNlOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVj
dFB0ciA+IG1kLnN0YXJ0X3N1YmplY3QpCi0gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzQ2hh
cklzV29yZENoYXIgPSBpc1dvcmRDaGFyKGdldFByZXZpb3VzQ2hhcihzdGFjay5jdXJyZW50RnJh
bWUtPmFyZ3Muc3ViamVjdFB0cikpOworICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0NoYXJJ
c1dvcmRDaGFyID0gaXNXb3JkQ2hhcihzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0
clstMV0pOwogICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3Vi
amVjdFB0ciA8IG1kLmVuZF9zdWJqZWN0KQotICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q2hh
cklzV29yZENoYXIgPSBpc1dvcmRDaGFyKGdldENoYXIoc3RhY2suY3VycmVudEZyYW1lLT5hcmdz
LnN1YmplY3RQdHIpKTsKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudENoYXJJc1dvcmRDaGFy
ID0gaXNXb3JkQ2hhcigqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIpOwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8qIE5vdyBzZWUgaWYgdGhlIHNpdHVhdGlv
biBpcyB3aGF0IHdlIHdhbnQgKi8KICAgICAgICAgICAgICAgICBib29sIHdvcmRCb3VuZGFyeURl
c2lyZWQgPSAoKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0cisrID09IE9Q
X1dPUkRfQk9VTkRBUlkpOwpAQCAtNzQ3LDczICs3NDQsNjcgQEAgUkVDVVJTRToKICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAvKiBNYXRjaCBhIHNpbmdsZSBjaGFyYWN0ZXIgdHlw
ZTsgaW5saW5lIGZvciBzcGVlZCAqLwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IEJFR0lOX09QQ09ERShBTllfQ0hBUik6CisgICAgICAgICAgICBCRUdJTl9PUENPREUoQU5ZX0NI
QVIpOgogICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVj
dFB0ciA8IG1kLmVuZF9zdWJqZWN0ICYmIGlzTmV3bGluZSgqc3RhY2suY3VycmVudEZyYW1lLT5h
cmdzLnN1YmplY3RQdHIpKQogICAgICAgICAgICAgICAgICAgICBSUkVUVVJOX05PX01BVENIOwot
ICAgICAgICAgICAgICAgIGlmICghbW92ZVB0clRvTmV4dENoYXIoc3RhY2suY3VycmVudEZyYW1l
LT5hcmdzLnN1YmplY3RQdHIsIG1kLmVuZF9zdWJqZWN0KSkKLSAgICAgICAgICAgICAgICAgICAg
UlJFVFVSTl9OT19NQVRDSDsKKyAgICAgICAgICAgICAgICArK3N0YWNrLmN1cnJlbnRGcmFtZS0+
YXJncy5zdWJqZWN0UHRyOwogICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJn
cy5pbnN0cnVjdGlvblB0cisrOwogICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFOwogICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIEJFR0lOX09QQ09ERShOT1RfRElHSVQpOgotICAg
ICAgICAgICAgeworICAgICAgICAgICAgQkVHSU5fT1BDT0RFKE5PVF9ESUdJVCk6IHsKICAgICAg
ICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQu
ZW5kX3N1YmplY3QpCiAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7Ci0gICAg
ICAgICAgICAgICAgaW50IGMgPSBnZXRDaGFyQW5kQWR2YW5jZShzdGFjay5jdXJyZW50RnJhbWUt
PmFyZ3Muc3ViamVjdFB0cik7CisgICAgICAgICAgICAgICAgaW50IGMgPSAqc3RhY2suY3VycmVu
dEZyYW1lLT5hcmdzLnN1YmplY3RQdHIrKzsKICAgICAgICAgICAgICAgICBpZiAoaXNBU0NJSURp
Z2l0KGMpKQogICAgICAgICAgICAgICAgICAgICBSUkVUVVJOX05PX01BVENIOwogICAgICAgICAg
ICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0cisrOwogICAgICAg
ICAgICAgICAgIE5FWFRfT1BDT0RFOwogICAgICAgICAgICAgfSAgICAKLSAgICAgICAgICAgICAg
ICBCRUdJTl9PUENPREUoRElHSVQpOgotICAgICAgICAgICAgeworCisgICAgICAgICAgICBCRUdJ
Tl9PUENPREUoRElHSVQpOiB7CiAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFt
ZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZF9zdWJqZWN0KQogICAgICAgICAgICAgICAgICAg
ICBSUkVUVVJOX05PX01BVENIOwotICAgICAgICAgICAgICAgIGludCBjID0gZ2V0Q2hhckFuZEFk
dmFuY2Uoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIpOworICAgICAgICAgICAg
ICAgIGludCBjID0gKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyKys7CiAgICAg
ICAgICAgICAgICAgaWYgKCFpc0FTQ0lJRGlnaXQoYykpCiAgICAgICAgICAgICAgICAgICAgIFJS
RVRVUk5fTk9fTUFUQ0g7CiAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5hcmdz
Lmluc3RydWN0aW9uUHRyKys7CiAgICAgICAgICAgICAgICAgTkVYVF9PUENPREU7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgQkVHSU5fT1BDT0RFKE5P
VF9XSElURVNQQUNFKToKLSAgICAgICAgICAgIHsKKyAgICAgICAgICAgIEJFR0lOX09QQ09ERShO
T1RfV0hJVEVTUEFDRSk6IHsKICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1l
LT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kX3N1YmplY3QpCiAgICAgICAgICAgICAgICAgICAg
IFJSRVRVUk5fTk9fTUFUQ0g7Ci0gICAgICAgICAgICAgICAgaW50IGMgPSBnZXRDaGFyQW5kQWR2
YW5jZShzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cik7CisgICAgICAgICAgICAg
ICAgaW50IGMgPSAqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIrKzsKICAgICAg
ICAgICAgICAgICBpZiAoaXNTcGFjZUNoYXIoYykpCiAgICAgICAgICAgICAgICAgICAgIFJSRVRV
Uk5fTk9fTUFUQ0g7CiAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmlu
c3RydWN0aW9uUHRyKys7CiAgICAgICAgICAgICAgICAgTkVYVF9PUENPREU7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgQkVHSU5fT1BDT0RFKFdISVRF
U1BBQ0UpOgotICAgICAgICAgICAgeworICAgICAgICAgICAgQkVHSU5fT1BDT0RFKFdISVRFU1BB
Q0UpOiB7CiAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJq
ZWN0UHRyID49IG1kLmVuZF9zdWJqZWN0KQogICAgICAgICAgICAgICAgICAgICBSUkVUVVJOX05P
X01BVENIOwotICAgICAgICAgICAgICAgIGludCBjID0gZ2V0Q2hhckFuZEFkdmFuY2Uoc3RhY2su
Y3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIpOworICAgICAgICAgICAgICAgIGludCBjID0g
KnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyKys7CiAgICAgICAgICAgICAgICAg
aWYgKCFpc1NwYWNlQ2hhcihjKSkKICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTl9OT19NQVRD
SDsKICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25Q
dHIrKzsKICAgICAgICAgICAgICAgICBORVhUX09QQ09ERTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBCRUdJTl9PUENPREUoTk9UX1dPUkRDSEFSKToK
LSAgICAgICAgICAgIHsKKyAgICAgICAgICAgIEJFR0lOX09QQ09ERShOT1RfV09SRENIQVIpOiB7
CiAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRy
ID49IG1kLmVuZF9zdWJqZWN0KQogICAgICAgICAgICAgICAgICAgICBSUkVUVVJOX05PX01BVENI
OwotICAgICAgICAgICAgICAgIGludCBjID0gZ2V0Q2hhckFuZEFkdmFuY2Uoc3RhY2suY3VycmVu
dEZyYW1lLT5hcmdzLnN1YmplY3RQdHIpOworICAgICAgICAgICAgICAgIGludCBjID0gKnN0YWNr
LmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyKys7CiAgICAgICAgICAgICAgICAgaWYgKGlz
V29yZENoYXIoYykpCiAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7CiAgICAg
ICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyKys7CiAg
ICAgICAgICAgICAgICAgTkVYVF9PUENPREU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgQkVHSU5fT1BDT0RFKFdPUkRDSEFSKToKLSAgICAgICAgICAg
IHsKKyAgICAgICAgICAgIEJFR0lOX09QQ09ERShXT1JEQ0hBUik6IHsKICAgICAgICAgICAgICAg
ICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kX3N1Ympl
Y3QpCiAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7Ci0gICAgICAgICAgICAg
ICAgaW50IGMgPSBnZXRDaGFyQW5kQWR2YW5jZShzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3Vi
amVjdFB0cik7CisgICAgICAgICAgICAgICAgaW50IGMgPSAqc3RhY2suY3VycmVudEZyYW1lLT5h
cmdzLnN1YmplY3RQdHIrKzsKICAgICAgICAgICAgICAgICBpZiAoIWlzV29yZENoYXIoYykpCiAg
ICAgICAgICAgICAgICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7CiAgICAgICAgICAgICAgICAgc3Rh
Y2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyKys7CkBAIC04MjgsNyArODE5LDcg
QEAgUkVDVVJTRToKICAgICAgICAgICAgICAgICAgaXQgYXMgbWF0Y2hlZCwgYW55IG51bWJlciBv
ZiB0aW1lcyAob3RoZXJ3aXNlIHRoZXJlIGNvdWxkIGJlIGluZmluaXRlCiAgICAgICAgICAgICAg
ICAgIGxvb3BzKS4gKi8KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBCRUdJTl9P
UENPREUoUkVGKToKKyAgICAgICAgICAgIEJFR0lOX09QQ09ERShSRUYpOgogICAgICAgICAgICAg
ICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm9mZnNldCA9IGdldDJCeXRlT3Bjb2RlVmFs
dWVBdE9mZnNldChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIsIDEpIDw8
IDE7ICAgICAgICAgICAgICAgLyogRG91YmxlZCByZWYgbnVtYmVyICovCiAgICAgICAgICAgICAg
ICAgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICs9IDM7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLyogQWR2YW5jZSBwYXN0IGl0ZW0gKi8KICAgICAgICAg
ICAgICAgICAKQEAgLTkzNSw4ICs5MjYsOCBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAgICBm
b2xsb3dpbmcuIFRoZW4gb2JleSBzaW1pbGFyIGNvZGUgdG8gY2hhcmFjdGVyIHR5cGUgcmVwZWF0
cyAtIHdyaXR0ZW4gb3V0CiAgICAgICAgICAgICAgICAgIGFnYWluIGZvciBzcGVlZC4gKi8KICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBCRUdJTl9PUENPREUoTkNMQVNTKToKLSAg
ICAgICAgICAgICAgICBCRUdJTl9PUENPREUoQ0xBU1MpOgorICAgICAgICAgICAgQkVHSU5fT1BD
T0RFKE5DTEFTUyk6CisgICAgICAgICAgICBCRUdJTl9PUENPREUoQ0xBU1MpOgogICAgICAgICAg
ICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmRhdGEgPSBzdGFjay5jdXJyZW50RnJh
bWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKyAxOyAgICAgICAgICAgICAgICAvKiBTYXZlIGZvciBt
YXRjaGluZyAqLwogICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0
cnVjdGlvblB0ciArPSAzMzsgICAgICAgICAgICAgICAgICAgICAvKiBBZHZhbmNlIHBhc3QgdGhl
IGl0ZW0gKi8KICAgICAgICAgICAgICAgICAKQEAgLTk3MCw3ICs5NjEsNyBAQCBSRUNVUlNFOgog
ICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG1pbjsgaSsrKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBt
ZC5lbmRfc3ViamVjdCkKICAgICAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7
Ci0gICAgICAgICAgICAgICAgICAgIGludCBjID0gZ2V0Q2hhckFuZEFkdmFuY2Uoc3RhY2suY3Vy
cmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIpOworICAgICAgICAgICAgICAgICAgICBpbnQgYyA9
ICpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cisrOwogICAgICAgICAgICAgICAg
ICAgICBpZiAoYyA+IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1
cnJlbnRGcmFtZS0+bG9jYWxzLmRhdGFbLTFdID09IE9QX0NMQVNTKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7CkBAIC05OTUsNyArOTg2LDcgQEAgUkVDVVJT
RToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSUkVUVVJOOwogICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZpID49IHN0YWNrLmN1cnJl
bnRGcmFtZS0+bG9jYWxzLm1heCB8fCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0
ciA+PSBtZC5lbmRfc3ViamVjdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSUkVUVVJO
OwotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGMgPSBnZXRDaGFyQW5kQWR2YW5jZShzdGFj
ay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cik7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgYyA9ICpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cisrOwogICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGMgPiAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZGF0YVstMV0gPT0gT1BfQ0xBU1Mp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk47CkBAIC0xMDEzLDggKzEw
MDQsNyBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gbWluOyBp
IDwgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4OyBpKyspIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5l
bmRfc3ViamVjdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBsZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQg
YyA9IGdldENoYXJBbmRMZW5ndGgoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIs
IGxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYyA9ICpzdGFjay5jdXJyZW50
RnJhbWUtPmFyZ3Muc3ViamVjdFB0cjsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID4g
MjU1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFt
ZS0+bG9jYWxzLmRhdGFbLTFdID09IE9QX0NMQVNTKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKQEAgLTEwMjIsNyArMTAxMiw3IEBAIFJFQ1VSU0U6CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCEoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZGF0YVtj
IC8gOF0gJiAoMSA8PCAoYyAmIDcpKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgKz0gbGVuZ3RoOworICAgICAg
ICAgICAgICAgICAgICAgICAgKytzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cjsK
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBSRUNVUlNJVkVfTUFUQ0goMjQsIHN0YWNrLmN1cnJlbnRG
cmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YnBh
dHRlcm5TdGFydCk7CkBAIC0xMDMwLDcgKzEwMjAsNiBAQCBSRUNVUlNFOgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFJSRVRVUk47CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3Rh
Y2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHItLSA9PSBzdGFjay5jdXJyZW50RnJhbWUt
PmxvY2Fscy5zdWJqZWN0UHRyQXRTdGFydE9mSW5zdHJ1Y3Rpb24pCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7ICAgICAgICAvKiBTdG9wIGlmIHRyaWVkIGF0IG9yaWdpbmFsIHBv
cyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgbW92ZVB0clRvU3RhcnRPZkN1cnJlbnRDaGFy
KHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyKTsKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTjsK
QEAgLTEwNDAsNyArMTAyOSw3IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgLyogTWF0Y2gg
YW4gZXh0ZW5kZWQgY2hhcmFjdGVyIGNsYXNzLiBUaGlzIG9wY29kZSBpcyBlbmNvdW50ZXJlZCBv
bmx5CiAgICAgICAgICAgICAgICAgIGluIFVURi04IG1vZGUsIGJlY2F1c2UgdGhhdCdzIHRoZSBv
bmx5IHRpbWUgaXQgaXMgY29tcGlsZWQuICovCiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgQkVHSU5fT1BDT0RFKFhDTEFTUyk6CisgICAgICAgICAgICBCRUdJTl9PUENPREUoWENM
QVNTKToKICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5kYXRhID0g
c3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyICsgMSArIExJTktfU0laRTsg
ICAgICAgICAgICAgICAgLyogU2F2ZSBmb3IgbWF0Y2hpbmcgKi8KICAgICAgICAgICAgICAgICBz
dGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKz0gZ2V0T3Bjb2RlVmFsdWVB
dE9mZnNldChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIsIDEpOyAgICAg
ICAgICAgICAgICAgICAgICAvKiBBZHZhbmNlIHBhc3QgdGhlIGl0ZW0gKi8KICAgICAgICAgICAg
ICAgICAKQEAgLTEwNzMsNyArMTA2Miw3IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDE7IGkgPD0gbWluOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHN0
YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZF9zdWJqZWN0KQogICAg
ICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTl9OT19NQVRDSDsKLSAgICAgICAgICAgICAgICAg
ICAgaW50IGMgPSBnZXRDaGFyQW5kQWR2YW5jZShzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3Vi
amVjdFB0cik7CisgICAgICAgICAgICAgICAgICAgIGludCBjID0gKnN0YWNrLmN1cnJlbnRGcmFt
ZS0+YXJncy5zdWJqZWN0UHRyKys7CiAgICAgICAgICAgICAgICAgICAgIGlmICghX3BjcmVfeGNs
YXNzKGMsIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmRhdGEpKQogICAgICAgICAgICAgICAg
ICAgICAgICAgUlJFVFVSTl9OT19NQVRDSDsKICAgICAgICAgICAgICAgICB9CkBAIC0xMDk0LDcg
KzEwODMsNyBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk47
CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMu
ZmkgPj0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4IHx8IHN0YWNrLmN1cnJlbnRGcmFt
ZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZF9zdWJqZWN0KQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFJSRVRVUk47Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgYyA9IGdldENo
YXJBbmRBZHZhbmNlKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBjID0gKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJq
ZWN0UHRyKys7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIV9wY3JlX3hjbGFzcyhjLCBz
dGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5kYXRhKSkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBSUkVUVVJOOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0xMTA4LDExICsxMDk3LDEw
IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSBtaW47IGkgPCBz
dGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5tYXg7IGkrKykgewogICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZF9z
dWJqZWN0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGxlbmd0aDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBjID0g
Z2V0Q2hhckFuZExlbmd0aChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciwgbGVu
Z3RoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBjID0gKnN0YWNrLmN1cnJlbnRGcmFt
ZS0+YXJncy5zdWJqZWN0UHRyOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFfcGNyZV94
Y2xhc3MoYywgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZGF0YSkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5jdXJy
ZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciArPSBsZW5ndGg7CisgICAgICAgICAgICAgICAgICAg
ICAgICArK3N0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyOwogICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGZvcig7OykgewogICAgICAgICAgICAgICAg
ICAgICAgICAgUkVDVVJTSVZFX01BVENIKDI3LCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5z
dHJ1Y3Rpb25QdHIsIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJwYXR0ZXJuU3RhcnQpOwpA
QCAtMTEyMCw3ICsxMTA4LDYgQEAgUkVDVVJTRToKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBSUkVUVVJOOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFt
ZS0+YXJncy5zdWJqZWN0UHRyLS0gPT0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuc3ViamVj
dFB0ckF0U3RhcnRPZkluc3RydWN0aW9uKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOyAgICAgICAgLyogU3RvcCBpZiB0cmllZCBhdCBvcmlnaW5hbCBwb3MgKi8KLSAgICAgICAg
ICAgICAgICAgICAgICAgIG1vdmVQdHJUb1N0YXJ0T2ZDdXJyZW50Q2hhcihzdGFjay5jdXJyZW50
RnJhbWUtPmFyZ3Muc3ViamVjdFB0cik7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgUlJFVFVSTjsKICAgICAgICAgICAgICAgICB9CkBAIC0xMTI5LDYyICsxMTE2
LDM1IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLyogTWF0
Y2ggYSBzaW5nbGUgY2hhcmFjdGVyLCBjYXNlZnVsbHkgKi8KICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBCRUdJTl9PUENPREUoQ0hBUik6CisgICAgICAgICAgICBCRUdJTl9PUENP
REUoQ0hBUik6CiAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubGVu
Z3RoID0gMTsKICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1
Y3Rpb25QdHIrKzsKICAgICAgICAgICAgICAgICBnZXRVVEY4Q2hhckFuZEluY3JlbWVudExlbmd0
aChzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5mYywgc3RhY2suY3VycmVudEZyYW1lLT5hcmdz
Lmluc3RydWN0aW9uUHRyLCBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5sZW5ndGgpOwotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCBkYzsKICAgICAgICAgICAgICAgICBzdGFj
ay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKz0gc3RhY2suY3VycmVudEZyYW1l
LT5sb2NhbHMubGVuZ3RoOwotICAgICAgICAgICAgICAgIHN3aXRjaCAobWQuZW5kX3N1YmplY3Qg
LSBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cikgewotICAgICAgICAgICAgICAg
IGNhc2UgMDoKKyAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1
YmplY3RQdHIgPj0gbWQuZW5kX3N1YmplY3QpCiAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk5f
Tk9fTUFUQ0g7Ci0gICAgICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgICAgICAgICBk
YyA9ICpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cisrOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoaXNMZWFkaW5nU3Vycm9nYXRlKGRjKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIFJSRVRVUk5fTk9fTUFUQ0g7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGRjID0gZ2V0Q2hhckFuZEFk
dmFuY2Uoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmMg
IT0gZGMpCisgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZj
ICE9ICpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cisrKQogICAgICAgICAgICAg
ICAgICAgICBSUkVUVVJOX05PX01BVENIOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IE5FWFRfT1BDT0RFOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8qIE1hdGNo
IGEgc2luZ2xlIGNoYXJhY3RlciwgY2FzZWxlc3NseSAqLwogICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIEJFR0lOX09QQ09ERShDSEFSX0lHTk9SSU5HX0NBU0UpOgorICAgICAgICAg
ICAgQkVHSU5fT1BDT0RFKENIQVJfSUdOT1JJTkdfQ0FTRSk6IHsKICAgICAgICAgICAgICAgICBz
dGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5sZW5ndGggPSAxOwogICAgICAgICAgICAgICAgIHN0
YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0cisrOwogICAgICAgICAgICAgICAg
IGdldFVURjhDaGFyQW5kSW5jcmVtZW50TGVuZ3RoKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxz
LmZjLCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIsIHN0YWNrLmN1cnJl
bnRGcmFtZS0+bG9jYWxzLmxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgaWYgKG1kLmVuZF9zdWJqZWN0IC0gc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQ
dHIgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgUlJFVFVSTl9OT19NQVRDSDsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgZGM7Ci0gICAgICAg
ICAgICAgICAgaWYgKG1kLmVuZF9zdWJqZWN0IC0gc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1
YmplY3RQdHIgPT0gMSkgewotICAgICAgICAgICAgICAgICAgICBkYyA9ICpzdGFjay5jdXJyZW50
RnJhbWUtPmFyZ3Muc3ViamVjdFB0cisrOwotICAgICAgICAgICAgICAgICAgICBpZiAoaXNMZWFk
aW5nU3Vycm9nYXRlKGRjKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk5fTk9fTUFU
Q0g7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGRjID0gZ2V0
Q2hhckFuZEFkdmFuY2Uoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIpOwogICAg
ICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciArPSBz
dGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgLyogSWYgd2UgaGF2ZSBVbmljb2RlIHByb3BlcnR5IHN1cHBvcnQsIHdlIGNh
biB1c2UgaXQgdG8gdGVzdCB0aGUgb3RoZXIKLSAgICAgICAgICAgICAgICAgY2FzZSBvZiB0aGUg
Y2hhcmFjdGVyLCBpZiB0aGVyZSBpcyBvbmUuICovCi0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZjICE9IGRjKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChkYyAhPSBfcGNyZV91Y3Bfb3RoZXJjYXNlKHN0YWNrLmN1cnJl
bnRGcmFtZS0+bG9jYWxzLmZjKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk5fTk9f
TUFUQ0g7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRfc3ViamVj
dCkKKyAgICAgICAgICAgICAgICAgICAgUlJFVFVSTl9OT19NQVRDSDsKKyAgICAgICAgICAgICAg
ICBpbnQgZGMgPSAqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIrKzsKKyAgICAg
ICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmMgIT0gZGMgJiYgX3Bj
cmVfdWNwX290aGVyY2FzZShzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5mYykgIT0gZGMpCisg
ICAgICAgICAgICAgICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7CiAgICAgICAgICAgICAgICAgTkVY
VF9PUENPREU7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgLyogTWF0Y2ggYSBzaW5nbGUgQVNDSUkgY2hhcmFjdGVyLiAqLwogICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIEJFR0lOX09QQ09ERShBU0NJSV9DSEFSKToKKyAgICAgICAgICAg
IEJFR0lOX09QQ09ERShBU0NJSV9DSEFSKToKICAgICAgICAgICAgICAgICBpZiAobWQuZW5kX3N1
YmplY3QgPT0gc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIpCiAgICAgICAgICAg
ICAgICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7CiAgICAgICAgICAgICAgICAgaWYgKCpzdGFjay5j
dXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciAhPSBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Mu
aW5zdHJ1Y3Rpb25QdHJbMV0pCkBAIC0xMTk1LDcgKzExNTUsNyBAQCBSRUNVUlNFOgogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8qIE1hdGNoIG9uZSBvZiB0d28gY2FzZXMgb2Yg
YW4gQVNDSUkgY2hhcmFjdGVyLiAqLwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IEJFR0lOX09QQ09ERShBU0NJSV9MRVRURVJfSUdOT1JJTkdfQ0FTRSk6CisgICAgICAgICAgICBC
RUdJTl9PUENPREUoQVNDSUlfTEVUVEVSX0lHTk9SSU5HX0NBU0UpOgogICAgICAgICAgICAgICAg
IGlmIChtZC5lbmRfc3ViamVjdCA9PSBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0
cikKICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTl9OT19NQVRDSDsKICAgICAgICAgICAgICAg
ICBpZiAoKCpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciB8IDB4MjApICE9IHN0
YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0clsxXSkKQEAgLTEyMDYsMjYgKzEx
NjYsMjYgQEAgUkVDVVJTRToKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvKiBN
YXRjaCBhIHNpbmdsZSBjaGFyYWN0ZXIgcmVwZWF0ZWRseTsgZGlmZmVyZW50IG9wY29kZXMgc2hh
cmUgY29kZS4gKi8KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBCRUdJTl9PUENP
REUoRVhBQ1QpOgorICAgICAgICAgICAgQkVHSU5fT1BDT0RFKEVYQUNUKToKICAgICAgICAgICAg
ICAgICBtaW4gPSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5tYXggPSBnZXQyQnl0ZU9wY29k
ZVZhbHVlQXRPZmZzZXQoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyLCAx
KTsKICAgICAgICAgICAgICAgICBtaW5pbWl6ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgIHN0
YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciArPSAzOwogICAgICAgICAgICAg
ICAgIGdvdG8gUkVQRUFUQ0hBUjsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBC
RUdJTl9PUENPREUoVVBUTyk6Ci0gICAgICAgICAgICAgICAgQkVHSU5fT1BDT0RFKE1JTlVQVE8p
OgorICAgICAgICAgICAgQkVHSU5fT1BDT0RFKFVQVE8pOgorICAgICAgICAgICAgQkVHSU5fT1BD
T0RFKE1JTlVQVE8pOgogICAgICAgICAgICAgICAgIG1pbiA9IDA7CiAgICAgICAgICAgICAgICAg
c3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4ID0gZ2V0MkJ5dGVPcGNvZGVWYWx1ZUF0T2Zm
c2V0KHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciwgMSk7CiAgICAgICAg
ICAgICAgICAgbWluaW1pemUgPSAqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9u
UHRyID09IE9QX01JTlVQVE87CiAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5h
cmdzLmluc3RydWN0aW9uUHRyICs9IDM7CiAgICAgICAgICAgICAgICAgZ290byBSRVBFQVRDSEFS
OwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEJFR0lOX09QQ09ERShTVEFSKToK
LSAgICAgICAgICAgICAgICBCRUdJTl9PUENPREUoTUlOU1RBUik6Ci0gICAgICAgICAgICAgICAg
QkVHSU5fT1BDT0RFKFBMVVMpOgotICAgICAgICAgICAgICAgIEJFR0lOX09QQ09ERShNSU5QTFVT
KToKLSAgICAgICAgICAgICAgICBCRUdJTl9PUENPREUoUVVFUlkpOgotICAgICAgICAgICAgICAg
IEJFR0lOX09QQ09ERShNSU5RVUVSWSk6CisgICAgICAgICAgICBCRUdJTl9PUENPREUoU1RBUik6
CisgICAgICAgICAgICBCRUdJTl9PUENPREUoTUlOU1RBUik6CisgICAgICAgICAgICBCRUdJTl9P
UENPREUoUExVUyk6CisgICAgICAgICAgICBCRUdJTl9PUENPREUoTUlOUExVUyk6CisgICAgICAg
ICAgICBCRUdJTl9PUENPREUoUVVFUlkpOgorICAgICAgICAgICAgQkVHSU5fT1BDT0RFKE1JTlFV
RVJZKToKICAgICAgICAgICAgICAgICByZXBlYXRJbmZvcm1hdGlvbkZyb21JbnN0cnVjdGlvbk9m
ZnNldCgqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyKysgLSBPUF9TVEFS
LCBtaW5pbWl6ZSwgbWluLCBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5tYXgpOwogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8qIENvbW1vbiBjb2RlIGZvciBhbGwgcmVwZWF0
ZWQgc2luZ2xlLWNoYXJhY3RlciBtYXRjaGVzLiBXZSBjYW4gZ2l2ZQpAQCAtMTMzMSwxMiArMTI5
MSwxMSBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAgIC8qIE1hdGNoIGEgbmVnYXRlZCBzaW5n
bGUgb25lLWJ5dGUgY2hhcmFjdGVyLiBUaGUgY2hhcmFjdGVyIHdlIGFyZQogICAgICAgICAgICAg
ICAgICBjaGVja2luZyBjYW4gYmUgbXVsdGlieXRlLiAqLwogICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIEJFR0lOX09QQ09ERShOT1QpOgotICAgICAgICAgICAgeworICAgICAgICAg
ICAgQkVHSU5fT1BDT0RFKE5PVCk6IHsKICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVu
dEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kX3N1YmplY3QpCiAgICAgICAgICAgICAg
ICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7CiAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZy
YW1lLT5hcmdzLmluc3RydWN0aW9uUHRyKys7Ci0gICAgICAgICAgICAgICAgaW50IGMgPSBnZXRD
aGFyQW5kQWR2YW5jZShzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cik7CisgICAg
ICAgICAgICAgICAgaW50IGMgPSAqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIr
KzsKICAgICAgICAgICAgICAgICBpZiAobWQuaWdub3JlQ2FzZSkgewogICAgICAgICAgICAgICAg
ICAgICBpZiAoYyA8IDEyOCkKICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSB0b0xvd2VyQ2Fz
ZShjKTsKQEAgLTEzNTYsMjYgKzEzMTUsMjYgQEAgUkVDVVJTRToKICAgICAgICAgICAgICAgICAg
dmVyeSBtdWNoIHRvIHRoZSB0aW1lIHRha2VuLCBidXQgY2hhcmFjdGVyIG1hdGNoaW5nICppcyog
d2hhdCB0aGlzIGlzIGFsbAogICAgICAgICAgICAgICAgICBhYm91dC4uLiAqLwogICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIEJFR0lOX09QQ09ERShOT1RFWEFDVCk6CisgICAgICAg
ICAgICBCRUdJTl9PUENPREUoTk9URVhBQ1QpOgogICAgICAgICAgICAgICAgIG1pbiA9IHN0YWNr
LmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heCA9IGdldDJCeXRlT3Bjb2RlVmFsdWVBdE9mZnNldChz
dGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIsIDEpOwogICAgICAgICAgICAg
ICAgIG1pbmltaXplID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1l
LT5hcmdzLmluc3RydWN0aW9uUHRyICs9IDM7CiAgICAgICAgICAgICAgICAgZ290byBSRVBFQVRO
T1RDSEFSOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEJFR0lOX09QQ09ERShO
T1RVUFRPKToKLSAgICAgICAgICAgICAgICBCRUdJTl9PUENPREUoTk9UTUlOVVBUTyk6CisgICAg
ICAgICAgICBCRUdJTl9PUENPREUoTk9UVVBUTyk6CisgICAgICAgICAgICBCRUdJTl9PUENPREUo
Tk9UTUlOVVBUTyk6CiAgICAgICAgICAgICAgICAgbWluID0gMDsKICAgICAgICAgICAgICAgICBz
dGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5tYXggPSBnZXQyQnl0ZU9wY29kZVZhbHVlQXRPZmZz
ZXQoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyLCAxKTsKICAgICAgICAg
ICAgICAgICBtaW5pbWl6ZSA9ICpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25Q
dHIgPT0gT1BfTk9UTUlOVVBUTzsKICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUt
PmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKz0gMzsKICAgICAgICAgICAgICAgICBnb3RvIFJFUEVBVE5P
VENIQVI7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgQkVHSU5fT1BDT0RFKE5P
VFNUQVIpOgotICAgICAgICAgICAgICAgIEJFR0lOX09QQ09ERShOT1RNSU5TVEFSKToKLSAgICAg
ICAgICAgICAgICBCRUdJTl9PUENPREUoTk9UUExVUyk6Ci0gICAgICAgICAgICAgICAgQkVHSU5f
T1BDT0RFKE5PVE1JTlBMVVMpOgotICAgICAgICAgICAgICAgIEJFR0lOX09QQ09ERShOT1RRVUVS
WSk6Ci0gICAgICAgICAgICAgICAgQkVHSU5fT1BDT0RFKE5PVE1JTlFVRVJZKToKKyAgICAgICAg
ICAgIEJFR0lOX09QQ09ERShOT1RTVEFSKToKKyAgICAgICAgICAgIEJFR0lOX09QQ09ERShOT1RN
SU5TVEFSKToKKyAgICAgICAgICAgIEJFR0lOX09QQ09ERShOT1RQTFVTKToKKyAgICAgICAgICAg
IEJFR0lOX09QQ09ERShOT1RNSU5QTFVTKToKKyAgICAgICAgICAgIEJFR0lOX09QQ09ERShOT1RR
VUVSWSk6CisgICAgICAgICAgICBCRUdJTl9PUENPREUoTk9UTUlOUVVFUlkpOgogICAgICAgICAg
ICAgICAgIHJlcGVhdEluZm9ybWF0aW9uRnJvbUluc3RydWN0aW9uT2Zmc2V0KCpzdGFjay5jdXJy
ZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIrKyAtIE9QX05PVFNUQVIsIG1pbmltaXplLCBt
aW4sIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heCk7CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgLyogQ29tbW9uIGNvZGUgZm9yIGFsbCByZXBlYXRlZCBzaW5nbGUtYnl0
ZSBtYXRjaGVzLiBXZSBjYW4gZ2l2ZSB1cCBxdWlja2x5CkBAIC0xNDAxLDE0ICsxMzYwLDEyIEBA
IFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmxv
Y2Fscy5mYyA8IDEyOCkKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFt
ZS0+bG9jYWxzLmZjID0gdG9Mb3dlckNhc2Uoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmMp
OwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbWluOyBpKyspIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgZCA9IGdldENoYXJBbmRBZHZhbmNlKHN0YWNrLmN1cnJl
bnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoZCA8IDEyOCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCA9IHRvTG93ZXJD
YXNlKGQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJh
bWUtPmxvY2Fscy5mYyA9PSBkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSUkVU
VVJOX05PX01BVENIOwotICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBtaW47IGkrKykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGQgPSAqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIrKzsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChkIDwgMTI4KQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGQgPSB0b0xvd2VyQ2FzZShkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChz
dGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5mYyA9PSBkKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGlmIChtaW4gPT0gc3RhY2suY3VycmVu
dEZyYW1lLT5sb2NhbHMubWF4KQpAQCAtMTQxOSw3ICsxMzc2LDcgQEAgUkVDVVJTRToKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBSRUNVUlNJVkVfTUFUQ0goMzgsIHN0YWNrLmN1cnJlbnRG
cmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YnBh
dHRlcm5TdGFydCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzX21hdGNoKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSUkVUVVJOOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBkID0gZ2V0Q2hhckFuZEFkdmFuY2Uoc3RhY2suY3VycmVudEZyYW1l
LT5hcmdzLnN1YmplY3RQdHIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkID0g
KnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyKys7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGQgPCAxMjgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGQgPSB0b0xvd2VyQ2FzZShkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3Rh
Y2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmkgPj0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMu
bWF4IHx8IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZF9zdWJq
ZWN0IHx8IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZjID09IGQpCkBAIC0xNDM2LDEzICsx
MzkzLDEyIEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0g
bWluOyBpIDwgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4OyBpKyspIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQ
dHIgPj0gbWQuZW5kX3N1YmplY3QpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW5ndGg7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGQgPSBnZXRDaGFyQW5kTGVuZ3RoKHN0YWNrLmN1cnJlbnRG
cmFtZS0+YXJncy5zdWJqZWN0UHRyLCBsZW5ndGgpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBkID0gKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChkIDwgMTI4KQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkID0gdG9Mb3dlckNhc2UoZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZjID09IGQpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyICs9IGxlbmd0aDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICArK3N0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyOwog
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7
OykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFQ1VSU0lWRV9NQVRDSCg0MCwgc3Rh
Y2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0aW9uUHRyLCBzdGFjay5jdXJyZW50RnJhbWUt
PmFyZ3Muc3VicGF0dGVyblN0YXJ0KTsKQEAgLTE0NTAsNyArMTQwNiw2IEBAIFJFQ1VSU0U6CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk47CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyLS0gPT0g
c3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuc3ViamVjdFB0ckF0U3RhcnRPZkluc3RydWN0aW9u
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgIC8qIFN0b3Ag
aWYgdHJpZWQgYXQgb3JpZ2luYWwgcG9zICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
bW92ZVB0clRvU3RhcnRPZkN1cnJlbnRDaGFyKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJq
ZWN0UHRyKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTjsKQEAgLTE0NjIsNyArMTQxNyw3
IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG1pbjsgaSsrKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgZCA9IGdldENoYXJBbmRBZHZhbmNlKHN0YWNrLmN1cnJl
bnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBk
ID0gKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyKys7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmMgPT0gZCkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBSUkVUVVJOX05PX01BVENIOwogICAgICAgICAgICAgICAg
ICAgICB9CkBAIC0xNDc1LDcgKzE0MzAsNyBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFJFQ1VSU0lWRV9NQVRDSCg0Miwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmlu
c3RydWN0aW9uUHRyLCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3VicGF0dGVyblN0YXJ0KTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNfbWF0Y2gpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFJSRVRVUk47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGQgPSBnZXRDaGFyQW5kQWR2YW5jZShzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVj
dFB0cik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGQgPSAqc3RhY2suY3VycmVu
dEZyYW1lLT5hcmdzLnN1YmplY3RQdHIrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMuZmkgPj0gc3RhY2suY3VycmVudEZyYW1lLT5s
b2NhbHMubWF4IHx8IHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVu
ZF9zdWJqZWN0IHx8IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZjID09IGQpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk47CiAgICAgICAgICAgICAgICAgICAgICAg
ICB9CkBAIC0xNDg3LDI2ICsxNDQyLDIyIEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgICAg
IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5sb2Nh
bHMuc3ViamVjdFB0ckF0U3RhcnRPZkluc3RydWN0aW9uID0gc3RhY2suY3VycmVudEZyYW1lLT5h
cmdzLnN1YmplY3RQdHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gbWlu
OyBpIDwgc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4OyBpKyspIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0
UHRyID49IG1kLmVuZF9zdWJqZWN0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW5ndGg7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkID0gZ2V0Q2hhckFuZExlbmd0aChz
dGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciwgbGVuZ3RoKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZjID09
IGQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQ
dHIgKz0gbGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFJFQ1VSU0lWRV9NQVRDSCg0NCwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLmluc3RydWN0
aW9uUHRyLCBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3VicGF0dGVyblN0YXJ0KTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzX21hdGNoKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyLS0gPT0gc3RhY2su
Y3VycmVudEZyYW1lLT5sb2NhbHMuc3ViamVjdFB0ckF0U3RhcnRPZkluc3RydWN0aW9uKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAvKiBTdG9wIGlm
IHRyaWVkIGF0IG9yaWdpbmFsIHBvcyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtb3ZlUHRyVG9TdGFydE9mQ3VycmVudENoYXIoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1
YmplY3RQdHIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAoaW50IGkgPSBtaW47IGkgPCBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fs
cy5tYXg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJy
ZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRfc3ViamVjdCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGQgPSAqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHI7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmZjID09IGQp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICsrc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHI7CiAgICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBS
RUNVUlNJVkVfTUFUQ0goNDQsIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0
ciwgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YnBhdHRlcm5TdGFydCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGlzX21hdGNoKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBSUkVUVVJOOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5j
dXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ci0tID09IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9j
YWxzLnN1YmplY3RQdHJBdFN0YXJ0T2ZJbnN0cnVjdGlvbikKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7ICAgICAgICAvKiBTdG9wIGlmIHRyaWVkIGF0IG9yaWdpbmFsIHBv
cyAqLworICAgICAgICAgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgICAgICAg
ICBSUkVUVVJOOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAt
MTUxNiwyNiArMTQ2NywyNiBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAgICBzaGFyZSBjb2Rl
LiBUaGlzIGlzIHZlcnkgc2ltaWxhciB0byB0aGUgY29kZSBmb3Igc2luZ2xlIGNoYXJhY3RlcnMs
IGJ1dCB3ZQogICAgICAgICAgICAgICAgICByZXBlYXQgaXQgaW4gdGhlIGludGVyZXN0cyBvZiBl
ZmZpY2llbmN5LiAqLwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEJFR0lOX09Q
Q09ERShUWVBFRVhBQ1QpOgorICAgICAgICAgICAgQkVHSU5fT1BDT0RFKFRZUEVFWEFDVCk6CiAg
ICAgICAgICAgICAgICAgbWluID0gc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4ID0gZ2V0
MkJ5dGVPcGNvZGVWYWx1ZUF0T2Zmc2V0KHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVj
dGlvblB0ciwgMSk7CiAgICAgICAgICAgICAgICAgbWluaW1pemUgPSB0cnVlOwogICAgICAgICAg
ICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciArPSAzOwogICAg
ICAgICAgICAgICAgIGdvdG8gUkVQRUFUVFlQRTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBCRUdJTl9PUENPREUoVFlQRVVQVE8pOgotICAgICAgICAgICAgICAgIEJFR0lOX09Q
Q09ERShUWVBFTUlOVVBUTyk6CisgICAgICAgICAgICBCRUdJTl9PUENPREUoVFlQRVVQVE8pOgor
ICAgICAgICAgICAgQkVHSU5fT1BDT0RFKFRZUEVNSU5VUFRPKToKICAgICAgICAgICAgICAgICBt
aW4gPSAwOwogICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heCA9
IGdldDJCeXRlT3Bjb2RlVmFsdWVBdE9mZnNldChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5z
dHJ1Y3Rpb25QdHIsIDEpOwogICAgICAgICAgICAgICAgIG1pbmltaXplID0gKnN0YWNrLmN1cnJl
bnRGcmFtZS0+YXJncy5pbnN0cnVjdGlvblB0ciA9PSBPUF9UWVBFTUlOVVBUTzsKICAgICAgICAg
ICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1Y3Rpb25QdHIgKz0gMzsKICAg
ICAgICAgICAgICAgICBnb3RvIFJFUEVBVFRZUEU7CiAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgQkVHSU5fT1BDT0RFKFRZUEVTVEFSKToKLSAgICAgICAgICAgICAgICBCRUdJTl9P
UENPREUoVFlQRU1JTlNUQVIpOgotICAgICAgICAgICAgICAgIEJFR0lOX09QQ09ERShUWVBFUExV
Uyk6Ci0gICAgICAgICAgICAgICAgQkVHSU5fT1BDT0RFKFRZUEVNSU5QTFVTKToKLSAgICAgICAg
ICAgICAgICBCRUdJTl9PUENPREUoVFlQRVFVRVJZKToKLSAgICAgICAgICAgICAgICBCRUdJTl9P
UENPREUoVFlQRU1JTlFVRVJZKToKKyAgICAgICAgICAgIEJFR0lOX09QQ09ERShUWVBFU1RBUik6
CisgICAgICAgICAgICBCRUdJTl9PUENPREUoVFlQRU1JTlNUQVIpOgorICAgICAgICAgICAgQkVH
SU5fT1BDT0RFKFRZUEVQTFVTKToKKyAgICAgICAgICAgIEJFR0lOX09QQ09ERShUWVBFTUlOUExV
Uyk6CisgICAgICAgICAgICBCRUdJTl9PUENPREUoVFlQRVFVRVJZKToKKyAgICAgICAgICAgIEJF
R0lOX09QQ09ERShUWVBFTUlOUVVFUlkpOgogICAgICAgICAgICAgICAgIHJlcGVhdEluZm9ybWF0
aW9uRnJvbUluc3RydWN0aW9uT2Zmc2V0KCpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3MuaW5zdHJ1
Y3Rpb25QdHIrKyAtIE9QX1RZUEVTVEFSLCBtaW5pbWl6ZSwgbWluLCBzdGFjay5jdXJyZW50RnJh
bWUtPmxvY2Fscy5tYXgpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8qIENv
bW1vbiBjb2RlIGZvciBhbGwgcmVwZWF0ZWQgc2luZ2xlIGNoYXJhY3RlciB0eXBlIG1hdGNoZXMu
IE5vdGUgdGhhdApAQCAtMTU0OCw3NyArMTQ5OSw2OSBAQCBSRUNVUlNFOgogICAgICAgICAgICAg
ICAgIC8qIEZpcnN0LCBlbnN1cmUgdGhlIG1pbmltdW0gbnVtYmVyIG9mIG1hdGNoZXMgYXJlIHBy
ZXNlbnQuIFVzZSBpbmxpbmUKICAgICAgICAgICAgICAgICAgY29kZSBmb3IgbWF4aW1pemluZyB0
aGUgc3BlZWQsIGFuZCBkbyB0aGUgdHlwZSB0ZXN0IG9uY2UgYXQgdGhlIHN0YXJ0CiAgICAgICAg
ICAgICAgICAgIChpLmUuIGtlZXAgaXQgb3V0IG9mIHRoZSBsb29wKS4gQWxzbyB3ZSBjYW4gdGVz
dCB0aGF0IHRoZXJlIGFyZSBhdCBsZWFzdAotICAgICAgICAgICAgICAgICB0aGUgbWluaW11bSBu
dW1iZXIgb2YgYnl0ZXMgYmVmb3JlIHdlIHN0YXJ0LiBUaGlzIGlzbid0IGFzIGVmZmVjdGl2ZSBp
bgotICAgICAgICAgICAgICAgICBVVEYtOCBtb2RlLCBidXQgaXQgZG9lcyBubyBoYXJtLiBTZXBh
cmF0ZSB0aGUgVVRGLTggY29kZSBjb21wbGV0ZWx5IGFzIHRoYXQKLSAgICAgICAgICAgICAgICAg
aXMgdGlkaWVyLiBBbHNvIHNlcGFyYXRlIHRoZSBVQ1AgY29kZSwgd2hpY2ggY2FuIGJlIHRoZSBz
YW1lIGZvciBib3RoIFVURi04Ci0gICAgICAgICAgICAgICAgIGFuZCBzaW5nbGUtYnl0ZXMuICov
CisgICAgICAgICAgICAgICAgIHRoZSBtaW5pbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIGJlZm9y
ZSB3ZSBzdGFydC4gKi8KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAobWlu
ID4gbWQuZW5kX3N1YmplY3QgLSBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cikK
ICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTl9OT19NQVRDSDsKICAgICAgICAgICAgICAgICBp
ZiAobWluID4gMCkgewotICAgICAgICAgICAgICAgICAgICBzd2l0Y2goc3RhY2suY3VycmVudEZy
YW1lLT5sb2NhbHMuY3R5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzdGFjay5j
dXJyZW50RnJhbWUtPmxvY2Fscy5jdHlwZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBPUF9BTllfQ0hBUjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0g
MTsgaSA8PSBtaW47IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
aXNOZXdsaW5lKCpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cikpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSUkVUVVJOX05PX01BVENIOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1vdmVQdHJUb05leHRDaGFyKHN0YWNrLmN1cnJl
bnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyLCBtZC5lbmRfc3ViamVjdCkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBSUkVUVVJOX05PX01BVENIOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICArK3N0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIE9QX05PVF9ESUdJVDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgT1BfTk9UX0RJR0lUOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkg
PSAxOyBpIDw9IG1pbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChpc0FTQ0lJRGlnaXQoKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyKSkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbW92ZVB0clRvTmV4dENoYXIoc3RhY2su
Y3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIsIG1kLmVuZF9zdWJqZWN0KSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICsrc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQ
dHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgT1BfRElHSVQ6CisgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIE9QX0RJR0lUOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAx
OyBpIDw9IG1pbjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBXaHkgZG8gd2UgYWR2YW5jZSB0aGUgc3ViamVjdFB0ciBoZXJlIGJ1dCBub3QgaW4gT1Bf
V0hJVEVTUEFDRSBvciBPUF9XT1JEQ0hBUiA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRfc3Vi
amVjdCB8fCAhaXNBU0NJSURpZ2l0KCpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0
cisrKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0FTQ0lJRGlnaXQo
KnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8qIE5vIG5lZWQgdG8gc2tpcCBtb3JlIGJ5dGVzIC0gd2Uga25vdyBpdCdz
IGEgMS1ieXRlIGNoYXJhY3RlciAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAr
K3N0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIE9Q
X05PVF9XSElURVNQQUNFOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBPUF9OT1RfV0hJ
VEVTUEFDRToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8
PSBtaW47IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNTcGFj
ZUNoYXIoKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghbW92ZVB0clRvTmV4dENoYXIoc3RhY2suY3VycmVudEZy
YW1lLT5hcmdzLnN1YmplY3RQdHIsIG1kLmVuZF9zdWJqZWN0KSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICsrc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHI7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgT1BfV0hJVEVTUEFDRToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
T1BfV0hJVEVTUEFDRToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0g
MTsgaSA8PSBtaW47IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
c3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kX3N1YmplY3QgfHwg
IWlzU3BhY2VDaGFyKCpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cisrKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1NwYWNlQ2hhcigqc3RhY2suY3Vy
cmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUlJFVFVSTl9OT19NQVRDSDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLyogTm8gbmVlZCB0byBza2lwIG1vcmUgYnl0ZXMgLSB3ZSBrbm93IGl0J3MgYSAxLWJ5dGUg
Y2hhcmFjdGVyICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrc3RhY2suY3Vy
cmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgT1BfTk9UX1dPUkRD
SEFSOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBPUF9OT1RfV09SRENIQVI6CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbWluOyBpKyspIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzV29yZENoYXIoKnN0YWNrLmN1
cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFJSRVRVUk5fTk9fTUFUQ0g7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghbW92ZVB0clRvTmV4dENoYXIoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1Ympl
Y3RQdHIsIG1kLmVuZF9zdWJqZWN0KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFJSRVRVUk5fTk9fTUFUQ0g7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsr
c3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHI7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgT1Bf
V09SRENIQVI6CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIE9QX1dPUkRDSEFSOgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG1pbjsgaSsrKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUt
PmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRfc3ViamVjdCB8fCAhaXNXb3JkQ2hhcigqc3RhY2su
Y3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIrKykpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghaXNXb3JkQ2hhcigqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1Ympl
Y3RQdHIpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTl9OT19N
QVRDSDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm8gbmVlZCB0byBza2lw
IG1vcmUgYnl0ZXMgLSB3ZSBrbm93IGl0J3MgYSAxLWJ5dGUgY2hhcmFjdGVyICovCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICsrc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1Ympl
Y3RQdHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaEVycm9yKEpTUmVnRXhwRXJy
b3JJbnRlcm5hbCwgc3RhY2spOwogICAgICAgICAgICAgICAgICAgICB9ICAvKiBFbmQgc3dpdGNo
KHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmN0eXBlKSAqLwpAQCAtMTY0MCw3ICsxNTgzLDcg
QEAgUkVDVVJTRToKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJh
bWUtPmxvY2Fscy5maSA+PSBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5tYXggfHwgc3RhY2su
Y3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kX3N1YmplY3QpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUlJFVFVSTjsKICAgICAgICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGMgPSBnZXRDaGFyQW5kQWR2YW5jZShzdGFjay5j
dXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cik7CisgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgYyA9ICpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cisrOwogICAgICAgICAg
ICAgICAgICAgICAgICAgc3dpdGNoKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmN0eXBlKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIE9QX0FOWV9DSEFSOgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChpc05ld2xpbmUoYykpCkBAIC0xNjYzLDcgKzE2MDYsNyBAQCBS
RUNVUlNFOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBPUF9XSElURVNQ
QUNFOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICAoIWlzU3BhY2VDaGFyKGMpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNTcGFjZUNoYXIoYykpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFJSRVRVUk47CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCkBAIC0xNjkzLDEwNiAr
MTYzNiw4MCBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgc3dpdGNoKHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLmN0eXBlKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIE9QX0FOWV9DSEFSOgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNwZWNpYWwgY29kZSBpcyBy
ZXF1aXJlZCBmb3IgVVRGOCwgYnV0IHdoZW4gdGhlIG1heGltdW0gaXMgdW5saW1pdGVkCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdlIGRvbid0IG5lZWQgaXQsIHNvIHdlIHJlcGVhdCB0
aGUgbm9uLVVURjggY29kZS4gVGhpcyBpcyBwcm9iYWJseQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3b3J0aCBpdCwgYmVjYXVzZSAuKiBpcyBxdWl0ZSBhIGNvbW1vbiBpZGlvbS4gKi8K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4IDwgSU5UX01BWCkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gbWluOyBpIDwgc3RhY2suY3Vy
cmVudEZyYW1lLT5sb2NhbHMubWF4OyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5l
bmRfc3ViamVjdCB8fCBpc05ld2xpbmUoKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0
UHRyKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJn
cy5zdWJqZWN0UHRyKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGls
ZSAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPCBtZC5lbmRfc3ViamVjdCAm
JiAoKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyICYgMHhjMCkgPT0gMHg4MCkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJh
bWUtPmFyZ3Muc3ViamVjdFB0cisrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhhbmRsZSB1bmxpbWl0ZWQgVVRG
LTggcmVwZWF0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAoaW50IGkgPSBtaW47IGkgPCBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5tYXg7IGkrKykg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRG
cmFtZS0+YXJncy5zdWJqZWN0UHRyID49IG1kLmVuZF9zdWJqZWN0IHx8IGlzTmV3bGluZSgqc3Rh
Y2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIrKzsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gbWluOyBpIDwg
c3RhY2suY3VycmVudEZyYW1lLT5sb2NhbHMubWF4OyBpKyspIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyID49
IG1kLmVuZF9zdWJqZWN0IHx8IGlzTmV3bGluZSgqc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1
YmplY3RQdHIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5z
dWJqZWN0UHRyKys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgT1BfTk9UX0RJR0lUOgorICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSBPUF9OT1RfRElHSVQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IG1pbjsgaSA8IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heDsg
aSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50
RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBtZC5lbmRfc3ViamVjdCkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgbGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYyA9
IGdldENoYXJBbmRMZW5ndGgoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIsIGxl
bmd0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjID0gKnN0YWNrLmN1
cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoaXNBU0NJSURpZ2l0KGMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLmN1cnJl
bnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyICs9IGxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKytzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cjsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBPUF9ESUdJVDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgT1BfRElH
SVQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IG1pbjsgaSA8IHN0
YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciA+PSBt
ZC5lbmRfc3ViamVjdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuZ3RoOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgYyA9IGdldENoYXJBbmRMZW5ndGgoc3RhY2suY3Vy
cmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIsIGxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBjID0gKnN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRy
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQVNDSUlEaWdpdChjKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciAr
PSBsZW5ndGg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrc3RhY2suY3VycmVu
dEZyYW1lLT5hcmdzLnN1YmplY3RQdHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgT1BfTk9UX1dISVRFU1BB
Q0U6CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIE9QX05PVF9XSElURVNQQUNFOgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSBtaW47IGkgPCBzdGFjay5jdXJy
ZW50RnJhbWUtPmxvY2Fscy5tYXg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kX3N1
YmplY3QpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGMgPSBnZXRDaGFyQW5kTGVuZ3RoKHN0YWNrLmN1cnJlbnRGcmFt
ZS0+YXJncy5zdWJqZWN0UHRyLCBsZW5ndGgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgYyA9ICpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cjsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzU3BhY2VDaGFyKGMpKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyICs9IGxlbmd0aDsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytzdGFjay5jdXJyZW50RnJhbWUtPmFy
Z3Muc3ViamVjdFB0cjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBPUF9XSElURVNQQUNFOgorICAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSBPUF9XSElURVNQQUNFOgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAoaW50IGkgPSBtaW47IGkgPCBzdGFjay5jdXJyZW50RnJhbWUtPmxvY2Fscy5t
YXg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suY3Vy
cmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5kX3N1YmplY3QpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGxlbmd0aDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGMgPSBnZXRDaGFyQW5kTGVuZ3RoKHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRy
LCBsZW5ndGgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYyA9ICpzdGFj
ay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cjsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFpc1NwYWNlQ2hhcihjKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5j
dXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0ciArPSBsZW5ndGg7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICsrc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHI7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgT1BfTk9UX1dPUkRDSEFSOgorICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSBPUF9OT1RfV09SRENIQVI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChp
bnQgaSA9IG1pbjsgaSA8IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLm1heDsgaSsrKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUtPmFy
Z3Muc3ViamVjdFB0ciA+PSBtZC5lbmRfc3ViamVjdCkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
bGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYyA9IGdldENoYXJB
bmRMZW5ndGgoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIsIGxlbmd0aCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjID0gKnN0YWNrLmN1cnJlbnRGcmFt
ZS0+YXJncy5zdWJqZWN0UHRyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
aXNXb3JkQ2hhcihjKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5jdXJyZW50RnJhbWUtPmFy
Z3Muc3ViamVjdFB0ciArPSBsZW5ndGg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICsrc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHI7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
T1BfV09SRENIQVI6CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIE9QX1dPUkRDSEFSOgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSBtaW47IGkgPCBzdGFjay5j
dXJyZW50RnJhbWUtPmxvY2Fscy5tYXg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoc3RhY2suY3VycmVudEZyYW1lLT5hcmdzLnN1YmplY3RQdHIgPj0gbWQuZW5k
X3N1YmplY3QpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aDsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGMgPSBnZXRDaGFyQW5kTGVuZ3RoKHN0YWNrLmN1cnJlbnRG
cmFtZS0+YXJncy5zdWJqZWN0UHRyLCBsZW5ndGgpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgYyA9ICpzdGFjay5jdXJyZW50RnJhbWUtPmFyZ3Muc3ViamVjdFB0cjsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1dvcmRDaGFyKGMpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YWNrLmN1cnJlbnRGcmFtZS0+YXJncy5zdWJqZWN0UHRyICs9IGxlbmd0
aDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytzdGFjay5jdXJyZW50RnJhbWUt
PmFyZ3Muc3ViamVjdFB0cjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoRXJyb3Io
SlNSZWdFeHBFcnJvckludGVybmFsLCBzdGFjayk7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAg
LTE4MDUsNyArMTcyMiw2IEBAIFJFQ1VSU0U6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UlJFVFVSTjsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5jdXJyZW50RnJhbWUt
PmFyZ3Muc3ViamVjdFB0ci0tID09IHN0YWNrLmN1cnJlbnRGcmFtZS0+bG9jYWxzLnN1YmplY3RQ
dHJBdFN0YXJ0T2ZJbnN0cnVjdGlvbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsgICAgICAgIC8qIFN0b3AgaWYgdHJpZWQgYXQgb3JpZ2luYWwgcG9zICovCi0gICAgICAgICAg
ICAgICAgICAgICAgICBtb3ZlUHRyVG9TdGFydE9mQ3VycmVudENoYXIoc3RhY2suY3VycmVudEZy
YW1lLT5hcmdzLnN1YmplY3RQdHIpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAvKiBHZXQgaGVyZSBpZiB3ZSBjYW4ndCBt
YWtlIGl0IG1hdGNoIHdpdGggYW55IHBlcm1pdHRlZCByZXBldGl0aW9ucyAqLwpAQCAtMTgxNCwx
NCArMTczMCwxNCBAQCBSRUNVUlNFOgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAvKiBDb250cm9sIG5ldmVyIHJlYWNoZXMgaGVyZSAqLwogICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIEJFR0lOX09QQ09ERShDUk1JTlBMVVMpOgotICAgICAgICAgICAgICAgIEJF
R0lOX09QQ09ERShDUk1JTlFVRVJZKToKLSAgICAgICAgICAgICAgICBCRUdJTl9PUENPREUoQ1JN
SU5SQU5HRSk6Ci0gICAgICAgICAgICAgICAgQkVHSU5fT1BDT0RFKENSTUlOU1RBUik6Ci0gICAg
ICAgICAgICAgICAgQkVHSU5fT1BDT0RFKENSUExVUyk6Ci0gICAgICAgICAgICAgICAgQkVHSU5f
T1BDT0RFKENSUVVFUlkpOgotICAgICAgICAgICAgICAgIEJFR0lOX09QQ09ERShDUlJBTkdFKToK
LSAgICAgICAgICAgICAgICBCRUdJTl9PUENPREUoQ1JTVEFSKToKKyAgICAgICAgICAgIEJFR0lO
X09QQ09ERShDUk1JTlBMVVMpOgorICAgICAgICAgICAgQkVHSU5fT1BDT0RFKENSTUlOUVVFUlkp
OgorICAgICAgICAgICAgQkVHSU5fT1BDT0RFKENSTUlOUkFOR0UpOgorICAgICAgICAgICAgQkVH
SU5fT1BDT0RFKENSTUlOU1RBUik6CisgICAgICAgICAgICBCRUdJTl9PUENPREUoQ1JQTFVTKToK
KyAgICAgICAgICAgIEJFR0lOX09QQ09ERShDUlFVRVJZKToKKyAgICAgICAgICAgIEJFR0lOX09Q
Q09ERShDUlJBTkdFKToKKyAgICAgICAgICAgIEJFR0lOX09QQ09ERShDUlNUQVIpOgogICAgICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgIHJldHVybiBt
YXRjaEVycm9yKEpTUmVnRXhwRXJyb3JJbnRlcm5hbCwgc3RhY2spOwogICAgICAgICAgICAgICAg
IApAQCAtMjE4NCw4ICsyMTAwLDYgQEAgaW50IGpzUmVnRXhwRXhlY3V0ZShjb25zdCBKU1JlZ0V4
cCogcmUsCiAgICAgICAgIAogICAgICAgICBpZiAocmV0dXJuQ29kZSA9PSBNQVRDSF9OT01BVENI
KSB7CiAgICAgICAgICAgICBzdGFydF9tYXRjaCsrOwotICAgICAgICAgICAgaWYgKHN0YXJ0X21h
dGNoIDwgZW5kX3N1YmplY3QgJiYgaXNUcmFpbGluZ1N1cnJvZ2F0ZSgqc3RhcnRfbWF0Y2gpKQot
ICAgICAgICAgICAgICAgIHN0YXJ0X21hdGNoKys7CiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgfQogICAgICAgICAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3BjcmUvcGNyZV9pbnRlcm5h
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3BjcmUvcGNyZV9pbnRlcm5hbC5oCShy
ZXZpc2lvbiAyODIzMikKKysrIEphdmFTY3JpcHRDb3JlL3BjcmUvcGNyZV9pbnRlcm5hbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMzUsMTEyICsyMzUsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHV0
MkJ5dGVPcGNvZGVWYWx1ZUF0CiAgICAgb3Bjb2RlUHRyICs9IDI7CiB9CiAKLSNkZWZpbmUgTEVB
RF9PRkZTRVQgKDB4ZDgwMCAtICgweDEwMDAwID4+IDEwKSkKLSNkZWZpbmUgU1VSUk9HQVRFX09G
RlNFVCAoMHgxMDAwMCAtICgweGQ4MDAgPDwgMTApIC0gMHhkYzAwKQotCi1zdGF0aWMgaW5saW5l
IGJvb2wgaXNMZWFkaW5nU3Vycm9nYXRlKGludCBjKQotewotICAgIHJldHVybiAoKGMgJiB+MHgz
ZmYpID09IDB4ZDgwMCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1RyYWlsaW5nU3Vycm9n
YXRlKGludCBjKQotewotICAgIHJldHVybiAoKGMgJiB+MHgzZmYpID09IDB4ZGMwMCk7Ci19Ci0K
LXN0YXRpYyBpbmxpbmUgaW50IGRlY29kZVN1cnJvZ2F0ZVBhaXIoaW50IGxlYWRpbmdTdXJyb2dh
dGUsIGludCB0cmFpbGluZ1N1cnJvZ2F0ZSkKLXsKLSAgICByZXR1cm4gKChsZWFkaW5nU3Vycm9n
YXRlIDw8IDEwKSArIHRyYWlsaW5nU3Vycm9nYXRlICsgU1VSUk9HQVRFX09GRlNFVCk7Ci19Ci0K
LXN0YXRpYyBpbmxpbmUgaW50IGdldENoYXIoY29uc3QgVUNoYXIqIHN1YmplY3RQdHIpCi17Ci0g
ICAgaW50IGMgPSBzdWJqZWN0UHRyWzBdOwotICAgIGlmIChpc0xlYWRpbmdTdXJyb2dhdGUoYykp
Ci0gICAgICAgIGMgPSBkZWNvZGVTdXJyb2dhdGVQYWlyKGMsIHN1YmplY3RQdHJbMV0pOwotICAg
IHJldHVybiBjOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBnZXRDaGFyQW5kQWR2YW5jZShjb25z
dCBVQ2hhciomIHN1YmplY3RQdHIpCi17Ci0gICAgaW50IGMgPSAqc3ViamVjdFB0cisrOwotICAg
IGlmIChpc0xlYWRpbmdTdXJyb2dhdGUoYykpCi0gICAgICAgIGMgPSBkZWNvZGVTdXJyb2dhdGVQ
YWlyKGMsICpzdWJqZWN0UHRyKyspOwotICAgIHJldHVybiBjOwotfQotCi1zdGF0aWMgaW5saW5l
IGludCBnZXRDaGFyQW5kTGVuZ3RoKGNvbnN0IFVDaGFyKiYgc3ViamVjdFB0ciwgaW50JiBsZW5n
dGgpCi17Ci0gICAgaW50IGMgPSBzdWJqZWN0UHRyWzBdOwotICAgIGlmIChpc0xlYWRpbmdTdXJy
b2dhdGUoYykpIHsKLSAgICAgICAgYyA9IGRlY29kZVN1cnJvZ2F0ZVBhaXIoYywgc3ViamVjdFB0
clsxXSk7Ci0gICAgICAgIGxlbmd0aCA9IDI7Ci0gICAgfSBlbHNlCi0gICAgICAgIGxlbmd0aCA9
IDE7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLS8vIEZJWE1FOiBBbGwgKDIpIGNhbGxzIHRvIHRoaXMg
ZnVudGlvbiBzaG91bGQgYmUgcmVtb3ZlZCBhbmQgcmVwbGFjZWQgd2l0aAotLy8gY2FsbHMgdG8g
Z2V0Q2hhckFuZEFkdmFuY2UKLXN0YXRpYyBpbmxpbmUgaW50IGdldENoYXJBbmRBZHZhbmNlSWZT
dXJyb2dhdGUoY29uc3QgVUNoYXIqJiBzdWJqZWN0UHRyKQotewotICAgIGludCBjID0gc3ViamVj
dFB0clswXTsKLSAgICBpZiAoaXNMZWFkaW5nU3Vycm9nYXRlKGMpKSB7Ci0gICAgICAgIGMgPSBk
ZWNvZGVTdXJyb2dhdGVQYWlyKGMsIHN1YmplY3RQdHJbMV0pOwotICAgICAgICBzdWJqZWN0UHRy
Kys7Ci0gICAgfQotICAgIHJldHVybiBjOwotfQotCi0vLyBUaGlzIGZsYXZvciBjaGVja3MgdG8g
bWFrZSBzdXJlIHdlIGRvbid0IHdhbGsgb2ZmIHRoZSBlbmQKLS8vIEZJWE1FOiBUaGlzIGNvdWxk
IGFsc28gYmUgcmVtb3ZlZCBhbmQgYW4gZW5kLWF3YXJlIGdldENoYXJBbmRBZHZhbmNlIGFkZGVk
IGluc3RlYWQuCi1zdGF0aWMgaW5saW5lIGludCBnZXRDaGFyQW5kQWR2YW5jZUlmU3Vycm9nYXRl
KGNvbnN0IFVDaGFyKiYgc3ViamVjdFB0ciwgY29uc3QgVUNoYXIqIGVuZCkKLXsKLSAgICBpbnQg
YyA9IHN1YmplY3RQdHJbMF07Ci0gICAgaWYgKGlzTGVhZGluZ1N1cnJvZ2F0ZShjKSkgewotICAg
ICAgICBpZiAoc3ViamVjdFB0ciArIDEgPCBlbmQpCi0gICAgICAgICAgICBjID0gZGVjb2RlU3Vy
cm9nYXRlUGFpcihjLCBzdWJqZWN0UHRyWzFdKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
YyA9IGRlY29kZVN1cnJvZ2F0ZVBhaXIoYywgMCk7Ci0gICAgICAgIHN1YmplY3RQdHIrKzsKLSAg
ICB9Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGdldFByZXZpb3VzQ2hh
cihjb25zdCBVQ2hhciogc3ViamVjdFB0cikKLXsKLSAgICBpbnQgdmFsdWVBdFN1YmplY3RNaW51
c09uZSA9IHN1YmplY3RQdHJbLTFdOwotICAgIGlmIChpc1RyYWlsaW5nU3Vycm9nYXRlKHZhbHVl
QXRTdWJqZWN0TWludXNPbmUpKQotICAgICAgICByZXR1cm4gZGVjb2RlU3Vycm9nYXRlUGFpcihz
dWJqZWN0UHRyWy0yXSwgdmFsdWVBdFN1YmplY3RNaW51c09uZSk7Ci0gICAgcmV0dXJuIHZhbHVl
QXRTdWJqZWN0TWludXNPbmU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBtb3ZlUHRyVG9QcmV2
aW91c0NoYXIoY29uc3QgVUNoYXIqJiBzdWJqZWN0UHRyKQotewotICAgIHN1YmplY3RQdHItLTsK
LSAgICBpZiAoaXNUcmFpbGluZ1N1cnJvZ2F0ZSgqc3ViamVjdFB0cikpCi0gICAgICAgIHN1Ympl
Y3RQdHItLTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIG1vdmVQdHJUb05leHRDaGFyKGNvbnN0
IFVDaGFyKiYgc3ViamVjdFB0ciwgY29uc3QgVUNoYXIqIGVuZFN1YmplY3QpCi17Ci0gICAgaWYg
KHN1YmplY3RQdHIgPCBlbmRTdWJqZWN0KSB7Ci0gICAgICAgIHN1YmplY3RQdHIrKzsKLSAgICAg
ICAgaWYgKHN1YmplY3RQdHIgPCBlbmRTdWJqZWN0ICYmIGlzVHJhaWxpbmdTdXJyb2dhdGUoKnN1
YmplY3RQdHIpKSB7Ci0gICAgICAgICAgICBzdWJqZWN0UHRyKys7Ci0gICAgICAgICAgICByZXR1
cm4gc3ViamVjdFB0ciA8IGVuZFN1YmplY3Q7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG1v
dmVQdHJUb1N0YXJ0T2ZDdXJyZW50Q2hhcihjb25zdCBVQ2hhciomIHN1YmplY3RQdHIpCi17Ci0g
ICAgaWYgKGlzVHJhaWxpbmdTdXJyb2dhdGUoKnN1YmplY3RQdHIpKQotICAgICAgICBzdWJqZWN0
UHRyLS07Ci19Ci0KIC8vIEZJWE1FOiBUaGVzZSBhcmUgcmVhbGx5IG1vcmUgb2YgYSAiY29tcGls
ZWQgcmVnZXhwIHN0YXRlIiB0aGFuICJyZWdleHAgb3B0aW9ucyIKIGVudW0gUmVnRXhwT3B0aW9u
cyB7CiAgICAgVXNlRmlyc3RCeXRlT3B0aW1pemF0aW9uT3B0aW9uID0gMHg0MDAwMDAwMCwgIC8q
IGZpcnN0X2J5dGUgaXMgc2V0ICovCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyODIzMikKKysrIExheW91
dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDA3LTEx
LTMwICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIHRlc3QgZm9yIGh0dHA6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjA3CisgICAgICAgICAgSmF2YVNjcmlwdCByZWd1bGFy
IGV4cHJlc3Npb25zIHNob3VsZCBtYXRjaCBVVEYtMTYgY29kZSB1bml0cyByYXRoZXIgdGhhbiBj
aGFyYWN0ZXJzCisKKyAgICAgICAgKiBmYXN0L2pzL3JlZ2V4cC1ub24tYm1wLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9yZWdleHAtbm9uLWJtcC5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2pzL3Jlc291cmNlcy9yZWdleHAtbm9uLWJtcC5qczogQWRkZWQuCisK
IDIwMDctMTEtMzAgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJraXQub3JnPgogCiAgICAg
ICAgICogcGxhdGZvcm0vd2luL1NraXBwZWQ6IEFkZGVkIGVkaXRpbmcvc2VsZWN0aW9uLzUyNDEx
NDguaHRtbCwgd2hpY2ggY3Jhc2hlcyBmb3IgbWUuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pz
L3JlZ2V4cC1ub24tYm1wLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2pzL3JlZ2V4cC1ub24tYm1wLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3QvanMvcmVnZXhwLW5vbi1ibXAtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDE3IEBACitUZXN0cyB0aGF0IHJlZ3VsYXIgZXhwcmVzc2lvbnMgdHJlYXQgbm9u
LUJNUCBjaGFyYWN0ZXJzIGFzIHR3byBzZXBhcmF0ZSBjaGFyYWN0ZXJzLiBGcm9tIGEgVW5pY29k
ZSBjb3JyZWN0bmVzcyBwb2ludCBvZiB2aWV3IHRoaXMgaXMgd3JvbmcsIGJ1dCBpdCBpcyB3aGF0
IG90aGVyIGJyb3dzZXJzIGRvLiBBbmQgZ2l2ZW4gdGhhdCB3ZSBzdG9yZSBzdHJpbmdzIGFzIFVU
Ri0xNiwgaXQgaXMgYWxzbyBtb3JlIGVmZmljaWVudCB0byBpbXBsZW1lbnQuIEFsc28gdGVzdCBz
b21lIG90aGVyIGNhc2VzIHJlbGF0ZWQgdG8gVVRGLTggYW5kIFVURi0xNi4KKworT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkg
IlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgLy4vLmV4ZWMoc3Vycm9nYXRlUGFpcikudG9TdHJp
bmcoKS5sZW5ndGggaXMgMQorUEFTUyAvXEQvLmV4ZWMoc3Vycm9nYXRlUGFpcikudG9TdHJpbmco
KS5sZW5ndGggaXMgMQorUEFTUyAvXFMvLmV4ZWMoc3Vycm9nYXRlUGFpcikudG9TdHJpbmcoKS5s
ZW5ndGggaXMgMQorUEFTUyAvXFcvLmV4ZWMoc3Vycm9nYXRlUGFpcikudG9TdHJpbmcoKS5sZW5n
dGggaXMgMQorUEFTUyAvW154XS8uZXhlYyhzdXJyb2dhdGVQYWlyKS50b1N0cmluZygpLmxlbmd0
aCBpcyAxCisKK1BBU1MgLy57MSwyfS8uZXhlYygiISEiICsgU3RyaW5nLmZyb21DaGFyQ29kZSgw
eEExKSkudG9TdHJpbmcoKS5sZW5ndGggaXMgMgorCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVz
dHMvZmFzdC9qcy9yZWdleHAtbm9uLWJtcC1leHBlY3RlZC50eHQKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBz
dm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdl
eHAtbm9uLWJtcC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVnZXhw
LW5vbi1ibXAuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVnZXhw
LW5vbi1ibXAuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhU
TUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5r
IHJlbD0ic3R5bGVzaGVldCIgaHJlZj0icmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxz
Y3JpcHQgc3JjPSJyZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2
PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdleHAtbm9uLWJtcC5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0icmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ2V4
cC1ub24tYm1wLmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46bWltZS10eXBlCiAgICsgdGV4dC9o
dG1sCk5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L2pzL3Jlc291cmNlcy9yZWdleHAtbm9uLWJtcC5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2pzL3Jlc291cmNlcy9yZWdleHAtbm9uLWJtcC5qcwkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3QvanMvcmVzb3VyY2VzL3JlZ2V4cC1ub24tYm1wLmpzCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDIyIEBACitkZXNjcmlwdGlvbigKKydUZXN0cyB0aGF0IHJlZ3VsYXIg
ZXhwcmVzc2lvbnMgdHJlYXQgbm9uLUJNUCBjaGFyYWN0ZXJzIGFzIHR3byBzZXBhcmF0ZSBjaGFy
YWN0ZXJzLiAnCisrICdGcm9tIGEgVW5pY29kZSBjb3JyZWN0bmVzcyBwb2ludCBvZiB2aWV3IHRo
aXMgaXMgd3JvbmcsIGJ1dCBpdCBpcyB3aGF0IG90aGVyIGJyb3dzZXJzIGRvLiAnCisrICdBbmQg
Z2l2ZW4gdGhhdCB3ZSBzdG9yZSBzdHJpbmdzIGFzIFVURi0xNiwgaXQgaXMgYWxzbyBtb3JlIGVm
ZmljaWVudCB0byBpbXBsZW1lbnQuICcKKysgJ0Fsc28gdGVzdCBzb21lIG90aGVyIGNhc2VzIHJl
bGF0ZWQgdG8gVVRGLTggYW5kIFVURi0xNi4nCispOworCit2YXIgc3Vycm9nYXRlUGFpciA9IFN0
cmluZy5mcm9tQ2hhckNvZGUoMHhEODAwKSArIFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEQzAwKTsK
Kworc2hvdWxkQmUoJy8uLy5leGVjKHN1cnJvZ2F0ZVBhaXIpLnRvU3RyaW5nKCkubGVuZ3RoJywg
JzEnKTsKK3Nob3VsZEJlKCcvXFxELy5leGVjKHN1cnJvZ2F0ZVBhaXIpLnRvU3RyaW5nKCkubGVu
Z3RoJywgJzEnKTsKK3Nob3VsZEJlKCcvXFxTLy5leGVjKHN1cnJvZ2F0ZVBhaXIpLnRvU3RyaW5n
KCkubGVuZ3RoJywgJzEnKTsKK3Nob3VsZEJlKCcvXFxXLy5leGVjKHN1cnJvZ2F0ZVBhaXIpLnRv
U3RyaW5nKCkubGVuZ3RoJywgJzEnKTsKK3Nob3VsZEJlKCcvW154XS8uZXhlYyhzdXJyb2dhdGVQ
YWlyKS50b1N0cmluZygpLmxlbmd0aCcsICcxJyk7CisKK2RlYnVnKCcnKTsKKworc2hvdWxkQmUo
Jy8uezEsMn0vLmV4ZWMoIiEhIiArIFN0cmluZy5mcm9tQ2hhckNvZGUoMHhBMSkpLnRvU3RyaW5n
KCkubGVuZ3RoJywgJzInKTsKKworZGVidWcoJycpOworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2Vk
ID0gdHJ1ZTsK
</data>
<flag name="review"
          id="7576"
          type_id="1"
          status="+"
          setter="aroben"
    />
          </attachment>
      

    </bug>

</bugzilla>