This is the mail archive of the gcc-prs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

c/4830: rand( ) of gcc-3.0.2 does not generate proper random number



>Number:         4830
>Category:       c
>Synopsis:       rand( ) of gcc-3.0.2 does not generate proper random number
>Confidential:   no
>Severity:       critical
>Priority:       high
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Wed Nov 07 21:26:02 PST 2001
>Closed-Date:
>Last-Modified:
>Originator:     yjkim@spring8.or.jp
>Release:        gcc-3.0.2
>Organization:
>Environment:
Linux Redhad-7.0
>Description:
Although I used same C-code, rand() with srand(SEED) of gcc-3.0.2 does not generate the 
proper random number while the same code is well work at the SUN Solaris with gcc-2.95.2
. 

Following is results of the code 

1) Sun Solaris with gcc-2.95.2
RAND = 0.004822 dRAN = 0.004822
RAND = 0.756798 dRAN = 0.256798
RAND = 0.912198 dRAN = 0.412198
RAND = 0.908017 dRAN = 0.408017
RAND = 0.346416 dRAN = -0.346416
RAND = 0.057070 dRAN = 0.057070
RAND = 0.470229 dRAN = -0.470229
RAND = 0.094790 dRAN = 0.094790
RAND = 0.585253 dRAN = -0.085253
RAND = 0.191168 dRAN = 0.191168
RAND = 0.027619 dRAN = 0.027619
RAND = 0.086520 dRAN = 0.086520
RAND = 0.474166 dRAN = -0.474166
RAND = 0.378185 dRAN = -0.378185
RAND = 0.758995 dRAN = 0.258995
RAND = 0.365642 dRAN = -0.365642


2) Linux with gcc-3.0.2 

RAND = 36070.838984 dRAN = 2.099855
RAND = 50699.677786 dRAN = 2.099855
RAND = 55031.045106 dRAN = 2.099855
RAND = 26715.078005 dRAN = 2.099855
RAND = 62605.128727 dRAN = 2.099855
RAND = 46181.374065 dRAN = 2.099855
RAND = 63831.988311 dRAN = 2.099855
RAND = 55056.637471 dRAN = 2.099855
RAND = 10422.073336 dRAN = 2.099855
RAND = 61697.643330 dRAN = 2.099855
RAND = 29747.113224 dRAN = 2.099855
RAND = 46206.974456 dRAN = 2.099855
RAND = 56680.105777 dRAN = 2.099855
RAND = 4855.569842 dRAN = 2.099855
RAND = 13371.208869 dRAN = 2.099855
RAND = 54192.185461 dRAN = 2.099855
>How-To-Repeat:
Always happen the problem
>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="multi_e1000_sweep_05.c"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="multi_e1000_sweep_05.c"

LyogTXVsdGkgZWxlY3Ryb25zIGNyb3NzIGNoZWNraW5nIHByb2dyYW0gZm9yIGZvbGxvd2luZyBj
b25kaXRpb24gICAgICAgICovCi8qIHBoaV9zMSA9IGFueSwgcGhpX3MyID0gMCwgcGhpX3M0ID0g
YW55LCBwaGlfczYsNyw4ID0gYW55ICAgICAgICAgICAgICAqLwovKiBUaGlzIGNvZGUgaXMgdXNl
ZCB0byBkZXRlcm1pbmUgdGhlIGJlc3Qgc3luY2hyb3VzIHBoYXNlcyBvZiBMLWJhbmQsICAgKi8K
LyogQy1CYW5kIGNvcnJlY3Rpb24sIFVuaXQtSSwgVW5pdC1JSSwgVW5pdC1JSUksIGFuZCBVbml0
LUlWLCBDLWJhbmQgICAgICovCi8qIE1haW4gTGluYWMncyB0byBvYnRhaW4gdGhlIG1pbmltdW0g
ZW5lcmd5IHNwcmVhZCBhdCBVbmR1bGF0b3IgcmVnaW9uLiAqLwovKiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFNQcmluZy04IENvbXBhY3QgU0FTRSBTb3VyY2UgKFNDU1MpIFByb2plY3QgKi8g
ICAgICAgCi8qICAgICAgICAgICAgICAgICAgICAgT2N0b2JlciAxOCwgMjAwMSwgWXVqb25nIEtp
bSwgeWpraW1Ac3ByaW5nOC5vci5qcCAqLwoKCiNpbmNsdWRlIDxtYXRoLmg+CiNpbmNsdWRlIDxz
dGRpby5oPgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlICJzY3NzX211bHRpX2UxMDAwLmgi
CQkvKiBTQ1NTIFByb2plY3QgTWFjaGluZSBQYXJhbWV0ZXJzICovCgovKiBTdGFydGluZyBvZiBO
UkMgKi8KI2RlZmluZSBOUl9FTkQgCQkxCQkvKiBOUkMgUmVsYXRlZCAqLwkKI2RlZmluZSBGUkVF
X0FSRyAJY2hhcioJCS8qIE5SQyBSZWxhdGVkICovCgovKiBSYW5kb20gTnVtYmVyIEdlbmVyYXRv
ciAqLwojZGVmaW5lIFJBTkRfTUFYCTMyNzY3LjAJCS8qIE1heCBSYW5kb20gTnVtYmVyIEdlbmVy
YXRvciAqLyAKI2RlZmluZSBTRUVECQk0MzI4CQkvKiBTZWVkIG9mIFJhbmRvbSBOdW1iZXIgR2Vu
ZXJhdG9yICovCgovKiBUbyB1c2UgYW55IGludGVnZXIgaW5zdGVhZCBvZiB6ZXJvIGFzIHN0YXJ0
aW5nIGluZGV4IG9mIE1hdHJpeCBhbmQgVmVjdG9yICovCi8qIEZyb20gTlJDLCBucnV0aWwuaCBh
bmQgbnJ1dGlsLmMuICovCi8qIE5SQywgc3RhbmRhcmQgZXJyb3IgaGFuZGxlciAqLwp2b2lkIG5y
ZXJyb3IoY2hhciBlcnJvcl90ZXh0W10pCnsKICAgICAgICBmcHJpbnRmKHN0ZGVyciwiTnVtZXJp
Y2FsIFJlY2lwZXMgcnVuLXRpbWUgZXJyb3IuLi5cbiIpOwogICAgICAgIGZwcmludGYoc3RkZXJy
LCIlc1xuIixlcnJvcl90ZXh0KTsKICAgICAgICBmcHJpbnRmKHN0ZGVyciwiLi4ubm93IGV4aXRp
bmcgdG8gc3lzdGVtLi4uXG4iKTsKICAgICAgICBleGl0KDEpOwp9CgovKiBOUkMsIGFsbG9jYXRl
IGEgZG91YmxlIG1hdHJpeCB3aXRoIHN1YnNjcmlwdCByYW5nZSBtW25ybC4ubnJoXVtuY2wuLm5j
aF0gKi8KZG91YmxlICoqZG1hdHJpeChsb25nIG5ybCwgbG9uZyBucmgsIGxvbmcgbmNsLCBsb25n
IG5jaCkKewogICAgICAgIGxvbmcgaSwgbnJvdz1ucmgtbnJsKzEsbmNvbD1uY2gtbmNsKzE7CiAg
ICAgICAgZG91YmxlICoqbTsKCiAgICAgICAgLyogYWxsb2NhdGUgcG9pbnRlcnMgdG8gcm93cyAq
LwogICAgICAgIG09KGRvdWJsZSAqKikgbWFsbG9jKChzaXplX3QpKChucm93K05SX0VORCkqc2l6
ZW9mKGRvdWJsZSopKSk7CiAgICAgICAgaWYgKCFtKSBucmVycm9yKCJhbGxvY2F0aW9uIGZhaWx1
cmUgMSBpbiBtYXRyaXgoKSIpOwogICAgICAgIG0gKz0gTlJfRU5EOwogICAgICAgIG0gLT0gbnJs
OwoKICAgICAgICAvKiBhbGxvY2F0ZSByb3dzIGFuZCBzZXQgcG9pbnRlcnMgdG8gdGhlbSAqLwog
ICAgICAgIG1bbnJsXT0oZG91YmxlICopIG1hbGxvYygoc2l6ZV90KSgobnJvdypuY29sK05SX0VO
RCkqc2l6ZW9mKGRvdWJsZSkpKTsKICAgICAgICBpZiAoIW1bbnJsXSkgbnJlcnJvcigiYWxsb2Nh
dGlvbiBmYWlsdXJlIDIgaW4gbWF0cml4KCkiKTsKICAgICAgICBtW25ybF0gKz0gTlJfRU5EOwog
ICAgICAgIG1bbnJsXSAtPSBuY2w7CgogICAgICAgIGZvcihpPW5ybCsxO2k8PW5yaDtpKyspIG1b
aV09bVtpLTFdK25jb2w7CgogICAgICAgIC8qIHJldHVybiBwb2ludGVyIHRvIGFycmF5IG9mIHBv
aW50ZXJzIHRvIHJvd3MgKi8KICAgICAgICByZXR1cm4gbTsKfQoKLyogTlJDLCBmcmVlIGEgZG91
YmxlIG1hdHJpeCBhbGxvY2F0ZWQgYnkgZG1hdHJpeCgpICovCnZvaWQgZnJlZV9kbWF0cml4KGRv
dWJsZSAqKm0sIGxvbmcgbnJsLCBsb25nIG5yaCwgbG9uZyBuY2wsIGxvbmcgbmNoKQp7CiAgICAg
ICAgZnJlZSgoRlJFRV9BUkcpIChtW25ybF0rbmNsLU5SX0VORCkpOwogICAgICAgIGZyZWUoKEZS
RUVfQVJHKSAobStucmwtTlJfRU5EKSk7Cn0KCi8qIE5SQywgYWxsb2NhdGUgYSBkb3VibGUgdmVj
dG9yIHdpdGggc3Vic2NyaXB0IHJhbmdlIHZbbmwuLm5oXSAqLwpkb3VibGUgKmR2ZWN0b3IobG9u
ZyBubCwgbG9uZyBuaCkKewogICAgICAgIGRvdWJsZSAqdjsKCiAgICAgICAgdj0oZG91YmxlICop
bWFsbG9jKChzaXplX3QpICgobmgtbmwrMStOUl9FTkQpKnNpemVvZihkb3VibGUpKSk7CiAgICAg
ICAgaWYgKCF2KSBucmVycm9yKCJhbGxvY2F0aW9uIGZhaWx1cmUgaW4gZHZlY3RvcigpIik7CiAg
ICAgICAgcmV0dXJuIHYtbmwrTlJfRU5EOwp9CgovKiBOUkMsIGZyZWUgYSBkb3VibGUgdmVjdG9y
IGFsbG9jYXRlZCB3aXRoIGR2ZWN0b3IoKSAqLwp2b2lkIGZyZWVfZHZlY3Rvcihkb3VibGUgKnYs
IGxvbmcgbmwsIGxvbmcgbmgpCnsKICAgICAgICBmcmVlKChGUkVFX0FSRykgKHYrbmwtTlJfRU5E
KSk7Cn0KCi8qIEVORCBvZiBOUkMgKi8KCi8qIFByb2dyYW0gSW50cm9kdWN0aW9uICovCnZvaWQg
aW50cm8oKQp7CiAgICAgICAgcHJpbnRmKCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFxuIik7CiAgICAgICAgcHJpbnRmKCIjICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFxuIik7
CiAgICAgICAgcHJpbnRmKCIjIC0gVHVuaW5nIENvZGUgZm9yIE1pbmltdW0gRW5lcmd5IFNwcmVh
ZCBhdCBVbmR1bGF0b3IgLSAjIFxuIik7CiAgICAgICAgcHJpbnRmKCIjICAgICAgICAgICAgICAg
ICBTUHJpbmctOCBDb21wYWN0IFNBU0UgU291cmNlIFByb2plY3QgICAjIFxuIik7CiAgICAgICAg
cHJpbnRmKCIjICAgICAgICAgICAgICAgICAgICAgIHlqa2ltQHNwcmluZzgub3IuanAgIFl1am9u
ZyBLaW0gICAjIFxuIik7CglwcmludGYoIiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICMgXG4iKTsKICAgICAgICBwcmludGYoIiMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgXG4iKTsK
fQoKLyogRGVmaW5pdGlvbiBvZiBVbml0ICovCi8qIFVuaXQgb2YgRW5lcmd5ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgID0gTWVWICovCi8qIFVuaXQgb2YgTGVuZ3RoICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgID0gbW0gICovCi8qIFVuaXQgb2YgVGltZSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgID0gc2VjICovCgovKiBEZWZpbml0aW9uIG9mIEluZGV4ICovCi8q
IEluZGV4IG9mIGFmdGVyIEluamVjdG9yLCBJbml0aWFsIHBvaW50ICAgICAgID0gMCAqLwovKiBJ
bmRleCBvZiBhZnRlciBMLWJhbmQgTGluYWMgICAgICAgICAgICAgICAgICA9IDEgKi8KLyogSW5k
ZXggb2YgYWZ0ZXIgQy1iYW5kIENvcnJlY3Rpb24gQ2F2aXR5ICAgICAgPSAyICovCi8qIEluZGV4
IG9mIGFmdGVyIEJDLUkgICAgICAgICAgICAgICAgICAgICAgICAgID0gMyAqLwovKiBJbmRleCBv
ZiBhZnRlciBVbml0LUkgQy1iYW5kIExpbmFjICAgICAgICAgICA9IDQgKi8KLyogSW5kZXggb2Yg
YWZ0ZXIgQkMtSUkgICAgICAgICAgICAgICAgICAgICAgICAgPSA1ICovCi8qIEluZGV4IG9mIGFm
dGVyIFVuaXQtSUkgQy1iYW5kIExpbmFjICAgICAgICAgID0gNiAqLwovKiBJbmRleCBvZiBhZnRl
ciBVbml0LUlJSSBDLWJhbmQgTGluYWMgICAgICAgICA9IDcgKi8KLyogSW5kZXggb2YgYWZ0ZXIg
VW5pdC1JViBDLWJhbmQgTGluYWMgICAgICAgICAgPSA4ICovCi8qIEluZGV4IG9mIG11bHRpIGVs
ZWN0cm9ucwkJCT0gZSAqLwoKCi8qIERlZmluaXRpb24gb2YgUGFyYW1ldGVycywgSW5kZXggPSBp
ICovCi8qIHBoaV9zaSAJPSBCZWFtIFBoYXNlIGF0IExpbmFjIFtyYWRdICovCi8qIEVpIAkJPSBC
ZWFtIEVuZXJneSBvZiBhbiBFbGVjdHJvbiBhdCB0aGUgQnVuY2ggQ2VudGVyIFtNZVZdICovCi8q
IGRFaVtlXSAJPSBkZWx0YUVpW2VdLCBFbmVyZ3kgRGV2aWF0aW9uIG9mIGFuIEVsZWN0cm9uIGZy
b20gQmVhbSBFbmVyZ3kgb2YgYW4gRWxlY3Ryb24gYXQgQnVuY2ggQ2VudGVyIFtNZVZdICovCi8q
IGRFX0VpW2VdIAk9IGRlbHRhRWlbZV0vRWksIFJlbGF0aXZlIEVuZXJneSBEZXZpYXRpb24gb2Yg
YW4gRWxlY3Ryb24gKi8KLyogZEVfRVBpW2VdIAk9IDEwMC4wKmRFX0VpW2VdIFslXSAqLwovKiBk
RVNQaQk9IFJNUyBSZWxhdGl2ZSBFbmVyZ3kgU3ByZWFkIFslXSAqLyAKLyogZFppW2VdCT0gRGlz
dGFuY2UgRGV2aWF0aW9uIG9mIGFuIEVsZWN0cm9uIGZyb20gQnVuY2ggQ2VudGVyIFttbV0gKi8K
LyogZEJpCQk9IE1hZ25pdHVkZSBvZiBCdW5jaCBMZW5ndGggKEZXSE0pIFttbV0gPSBmYWJzKGRa
aV9NQVggLSBkWmlfTUlOKSAqLwovKiBSNTZJLCBSNTZJSQk9IE1vbWVudHVtIENvbXBhY3Rpb24g
RmFjdG9ycyBbbW1dIG9mIHRoZSBCQy1JIGFuZCBCQy1JSSAqLwoKLyogSW5pdCBMb25naXR1ZGlu
YWwgUGhhc2UgU3BhY2UgRGlzdHJpYnV0aW9uLCBJbmRleCA9IDAgKi8KZG91YmxlIElOSVRfRElT
VChkb3VibGUgKmRFMCwgZG91YmxlICpkRV9FUDAsIGRvdWJsZSAqZEVTUDAsIGRvdWJsZSAqZFow
LCBkb3VibGUgKmRCMCkKewoJaW50IGU7IAkJCQkvKiBJbmRleCBvZiBNdWx0aSBFbGVjdHJvbnMg
Ki8KCWRvdWJsZSBkRVNQMF9URU1QOwkJLyogVGVtcCBWYWx1ZSBvZiBkRVNQMCAqLwoJZG91Ymxl
IGRaMF9NSU4sIGRaMF9NQVg7ICAgICAgICAvKiBNaW4gJiBNYXggb2YgZFowIGZvciBCdW5jaCBM
ZW5ndGggQ2FsY3VsYXRpb24gKi8KCWRvdWJsZSBSQU5ELCBkUkFOOyAJCS8qIFJhbmRvbSBOdW1i
ZXIgZm9yIGRFMCBEaXN0cmlidXRpb24gKi8KCglzcmFuZChTRUVEKTsJCQkvKiBUdXJuIG9uIFJh
bmRvbSBOdW1iZXIgR2VuZXJhdG9yIHdpdGggU2VlZCAqLwoKCS8qIEluaXRpYWwgVmFsdWUgb2Yg
Uk1TIFJlbGF0aXZlIEVuZXJneSBTcHJlYWQgKi8KICAgICAgICBkRVNQMF9URU1QID0gMC4wOwoK
CS8qIEluaXRpYWwgVmFsdWVzIG9mIE1pbiAmIE1heCBvZiBkWjAgKi8KCWRaMF9NSU4gPSAtMC4w
MTsKCWRaMF9NQVggPSAgMC4wMDsKCgkvKiBJbmRleCBvZiBIZWFkIEVsZWN0cm9uID0gLUVOICov
CgkvKiBJbmRleCBvZiBUYWlsIEVsZWN0cm9uID0gLUVOICovCgkvKiBJbmRleCBvZiBDZW50ZXIg
RWxlY3Ryb24gPSAwICovCgkvKiBUb3RhbCBFbGVjdHJvbnMgPSAyLjAqRU4rMSAgICovCglmb3Io
ZT0tRU47ZTw9RU47ZSsrKQoJewoJCS8qIFJhbmRvbSBEaXN0cmlidXRpb24gb2YgZEUwICovCgkJ
UkFORCA9IChkb3VibGUpKHJhbmQoKS9SQU5EX01BWCk7CgkJaWYoUkFORCA8PSAwLjI1KQkgCgkJ
ewoJCQlkUkFOID0gUkFORDsKCQl9CgkJZWxzZSBpZihSQU5EIDw9IDAuNSkKCQl7CgkJCWRSQU4g
PSAtUkFORDsKCQl9CgkJZWxzZSBpZihSQU5EIDw9IDAuNzUpCgkJewoJCQlkUkFOID0gLTEuMCoo
UkFORCAtIDAuNSk7CgkJfQoJCWVsc2UgaWYoUkFORCA8PSAxLjApCgkJewoJCQlkUkFOID0gMS4w
KihSQU5EIC0gMC41KTsKCQl9CgoJCXByaW50ZigiUkFORCA9ICVsZiBkUkFOID0gJWxmIFxuIiwg
UkFORCwgZFJBTik7IAoKCQlkRTBbZV0gPSAoKGRvdWJsZSkoZSkqZEUwMCkvKChkb3VibGUpKEVO
KSkgKyBkUkFOLzQwLjA7ICAgICAJLyogTGluZWFybHkgUmFuZG9tIERpc3RyaWJ1dGlvbiwgTWF4
ICsvLTAuMDEyNSBNZVYgVmFyaWF0aW9uICovCgkJZEVfRVAwW2VdID0gMTAwLjAqKGRFMFtlXSkv
KEUwKTsJCQkJLyogUmVsYXRpdmUgRW5lcmd5IERldmlhdGlvbiBbJV0gKi8KCQlkWjBbZV0gPSAt
KChkb3VibGUpKGUpKmRaMDApLygoZG91YmxlKShFTikpOyAJCQkvKiBMaW5lYXJseSBEaXN0cmli
dXRlZCBJbml0aWFsIERpc3RhbmNlIERldmlhdGlvbiAqLwoKCQkvKiBTdW1tYXRpb24gb2YgZEUw
KmRFMCAqLwogICAgICAgICAgICAgICAgZEVTUDBfVEVNUCA9IGRFU1AwX1RFTVAgKyAoZEUwW2Vd
KSooZEUwW2VdKTsKCgkJLyogRmluZGluZyBNQVggYW5kIE1JTiBvZiBkWjAgKi8KCQlpZihkWjBb
ZV0gPj0gZFowX01BWCkKCQl7CgkJCWRaMF9NQVggPSBkWjBbZV07CgkJCWRaMF9NSU4gPSBkWjBf
TUlOOwoJCS8qCXByaW50ZigiZFowID0gJWxmIGRaMF9NQVggPSAlbGYgZFowX01JTiA9ICVsZiBc
biIsIGRaMFtlXSwgZFowX01BWCwgZFowX01JTik7ICovCgkJfQoJCWVsc2UgaWYoKGRaMFtlXTxk
WjBfTUFYKSYmKGRaMFtlXT5kWjBfTUlOKSkKCQl7CgkJCWRaMF9NQVggPSBkWjBfTUFYOwoJCQlk
WjBfTUlOID0gZFowX01JTjsKCQkvKglwcmludGYoImRaMCA9ICVsZiBkWjBfTUFYID0gJWxmIGRa
MF9NSU4gPSAlbGYgXG4iLCBkWjBbZV0sIGRaMF9NQVgsIGRaMF9NSU4pOyAqLwoJCX0KCQllbHNl
IGlmKGRaMFtlXTxkWjBfTUlOKQoJCXsKCQkJZFowX01BWCA9IGRaMF9NQVg7CgkJCWRaMF9NSU4g
PSBkWjBbZV07CgkJLyoJcHJpbnRmKCJkWjAgPSAlbGYgZFowX01BWCA9ICVsZiBkWjBfTUlOID0g
JWxmIFxuIiwgZFowW2VdLCBkWjBfTUFYLCBkWjBfTUlOKTsgKi8KCQl9Cgl9CgogICAgICAgIC8q
IENhbGN1bGF0aW9uIEluaXRpYWwgUk1TIFJlbGF0aXZlIEVuZXJneSBTcHJlYWQgWyVdID0gMTAw
LjAqKGRTaWdtYV9FL0UpICovCiAgICAgICAgKmRFU1AwID0gKDEwMC4wLyhFMCkpKnNxcnQoZEVT
UDBfVEVNUC8oMi4wKihkb3VibGUpKEVOKSsxLjApKTsKCiAgICAgICAgLyogQ2FsY3VsYXRpb24g
b2YgdGhlIEluaXRpYWwgQnVuY2ggTGVuZ3RoIChGV0hNKSAqLwogICAgICAgICpkQjAgPSBmYWJz
KGRaMF9NQVggLSBkWjBfTUlOKTsKCi8qCXByaW50ZigiZFowX01BWD0gJWxmIGRaMF9NSU4gPSAl
bGYgZEVTUDAgPSAlbGYgZEIwID0gJWxmIFxuIiwgZFowX01BWCwgZFowX01JTiwgKmRFU1AwLCAq
ZEIwKTsgKi8KfQoKLyogQWZ0ZXIgTC1iYW5kIExpbmFjLCBJbmRleCA9IDEgKi8KLyogTm90ZSB0
aGF0IHRoaXMgaXMgbW9kaWZpZWQgZm9yIHRoZSB0YWlsIGVsZWN0cm9uICovCmRvdWJsZSBMX0JB
TkQoZG91YmxlICpkRTAsIGRvdWJsZSAqZFowLCBkb3VibGUgcGhpX3MxLCBkb3VibGUgKkUxLCBk
b3VibGUgKmRFMSwgZG91YmxlICpkRV9FMSwgZG91YmxlICpkRV9FUDEsIGRvdWJsZSAqZEVTUDEs
IGRvdWJsZSAqZFoxLCBkb3VibGUgKmRCMSkKewoJaW50IGU7CQkJCS8qIEluZGV4IG9mIE11bHRp
IEVsZWN0cm9ucyAqLwoJZG91YmxlIGRFU1AxX1RFTVA7CQkvKiBUZW1wIFZhbHVlIG9mIGRFU1Ax
ICovCglkb3VibGUgZFoxX01JTiwgZFoxX01BWDsJLyogQnVuY2ggTGVuZ3RoIENhbGN1bGF0aW9u
LCBNaW4gJiBNYXggb2YgZFoxICovCgkKICAgICAgICAvKiBJbml0aWFsIFZhbHVlIG9mIFJNUyBS
ZWxhdGl2ZSBFbmVyZ3kgU3ByZWFkICovCiAgICAgICAgZEVTUDFfVEVNUCA9IDAuMDsKCiAgICAg
ICAgLyogSW5pdGlhbCBWYWx1ZXMgb2YgTWluICYgTWF4IG9mIGRaMSAqLwogICAgICAgIGRaMV9N
SU4gPSAtMC4wMTsKICAgICAgICBkWjFfTUFYID0gIDAuMDA7CgoJLyogQmVhbSBFbmVyZ3kgb2Yg
YW4gRWxlY3Ryb24gYXQgdGhlIEJ1bmNoIENlbnRlciAqLwoJKkUxID0gRTAgKyBHTDEqY29zKHBo
aV9zMSk7CgoJLyogSW5kZXggb2YgSGVhZCBFbGVjdHJvbiA9IC1FTiAqLwoJLyogSW5kZXggb2Yg
VGFpbCBFbGVjdHJvbiA9IC1FTiAqLwoJLyogSW5kZXggb2YgQ2VudGVyIEVsZWN0cm9uID0gMCAq
LwoJLyogVG90YWwgRWxlY3Ryb25zID0gMi4wKkVOKzEgKi8KCWZvcihlPS1FTjtlPD1FTjtlKysp
Cgl7CgkJZEUxW2VdID0gZEUwW2VdICsgR0wxKihjb3MoMi4wKk1fUEkqKGRaMFtlXS9MQU1EQUwp
K3BoaV9zMSkgLSBjb3MocGhpX3MxKSk7CgkJZEVfRTFbZV0gPSAoZEUxW2VdKS8oKkUxKTsKCQlk
RV9FUDFbZV0gPSAxMDAuMCooZEVfRTFbZV0pOwoJCWRaMVtlXSA9IGRaMFtlXTsKCgkJLyogU3Vt
bWF0aW9uIG9mIGRFMSpkRTEgKi8KCQlkRVNQMV9URU1QID0gZEVTUDFfVEVNUCArIChkRTFbZV0p
KihkRTFbZV0pOwoKCQkvKiBGaW5kaW5nIE1BWCBhbmQgTUlOIG9mIGRaMSAqLwogICAgICAgICAg
ICAgICAgaWYoZFoxW2VdID49IGRaMV9NQVgpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGRaMV9NQVggPSBkWjFbZV07CiAgICAgICAgICAgICAgICAgICAgICAgIGRa
MV9NSU4gPSBkWjFfTUlOOwogICAgICAgICAgICAgICAgLyogICAgIAlwcmludGYoImRaMSA9ICVs
ZiBkWjFfTUFYID0gJWxmIGRaMV9NSU4gPSAlbGYgXG4iLCBkWjFbZV0sIGRaMV9NQVgsIGRaMV9N
SU4pOyAqLwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZigoZFoxW2Vd
PGRaMV9NQVgpJiYoZFoxW2VdPmRaMV9NSU4pKQogICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgICAgICBkWjFfTUFYID0gZFoxX01BWDsKICAgICAgICAgICAgICAgICAgICAgICAg
ZFoxX01JTiA9IGRaMV9NSU47CiAgICAgICAgICAJLyoJcHJpbnRmKCJkWjEgPSAlbGYgZFoxX01B
WCA9ICVsZiBkWjFfTUlOID0gJWxmIFxuIiwgZFoxW2VdLCBkWjFfTUFYLCBkWjFfTUlOKTsgKi8K
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYoZFoxW2VdPGRaMV9NSU4p
CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRaMV9NQVggPSBkWjFf
TUFYOwogICAgICAgICAgICAgICAgICAgICAgICBkWjFfTUlOID0gZFoxW2VdOwogICAgICAgICAg
ICAgIAkvKglwcmludGYoImRaMSA9ICVsZiBkWjFfTUFYID0gJWxmIGRaMV9NSU4gPSAlbGYgXG4i
LCBkWjFbZV0sIGRaMV9NQVgsIGRaMV9NSU4pOyAqLwogICAgICAgICAgICAgICAgfQoKCX0KCS8q
IENhbGN1bGF0aW9uIFJNUyBSZWxhdGl2ZSBFbmVyZ3kgU3ByZWFkIGFmdGVyIHRoZSBMLWJhbmQg
TGluYWMgWyVdID0gMTAwLjAqKGRTaWdtYV9FL0UpICovCgkqZEVTUDEgPSAoMTAwLjAvKCpFMSkp
KnNxcnQoZEVTUDFfVEVNUC8oMi4wKihkb3VibGUpKEVOKSsxLjApKTsJCgogICAgICAgIC8qIENh
bGN1bGF0aW9uIG9mIHRoZSBCdW5jaCBMZW5ndGggYWZ0ZXIgdGhlIEwtYmFuZCBMaW5hYyAoRldI
TSkgKi8KICAgICAgICAqZEIxID0gZmFicyhkWjFfTUFYIC0gZFoxX01JTik7CgovKglwcmludGYo
ImRaMV9NQVg9ICVsZiBkWjFfTUlOID0gJWxmIGRFU1AxID0gJWxmIGRCMSA9ICVsZiBcbiIsIGRa
MV9NQVgsIGRaMV9NSU4sICpkRVNQMSwgKmRCMSk7ICovCn0KCi8qIEFmdGVyIEMtYmFuZCBDb3Jy
ZWN0aW9uIENhdml0eSwgSW5kZXggPSAyICovCmRvdWJsZSBDX0NPUlJFQ1QoZG91YmxlIEUxLCBk
b3VibGUgKmRFMSwgZG91YmxlICpkWjEsIGRvdWJsZSBwaGlfczEsIGRvdWJsZSBwaGlfczIsIGRv
dWJsZSAqRTIsIGRvdWJsZSAqZEUyLCBkb3VibGUgKmRFX0UyLCBkb3VibGUgKmRFX0VQMiwgZG91
YmxlICpkRVNQMiwgZG91YmxlICpkWjIsIGRvdWJsZSAqZEIyKQp7CglpbnQgZTsJCQkJLyogSW5k
ZXggb2YgTXVsdGkgRWxlY3Ryb25zICovCglkb3VibGUgZEVTUDJfVEVNUDsJCS8qIFRlbXAgVmFs
dWUgb2YgZEVTUDIgKi8KCWRvdWJsZSBkWjJfTUlOLCBkWjJfTUFYOwkvKiBCdW5jaCBMZW5ndGgg
Q2FsY3VsYXRpb24sIE1pbiAmIE1heCBvZiBkWjIgKi8KCgkvKiBQYXJhbXRlcnMgb2YgQy1iYW5k
IENvcnJlY3Rpb24gQ2F2aXR5ICovCiAgICAgICAgZG91YmxlIEdMMjsKCgkvKiBJbml0aWFsIFZh
bHVzZSBvZiBSTVMgUmVsYXRpdmUgRW5lcmd5IFNwcmVhZCAqLwoJZEVTUDJfVEVNUCA9IDAuMDsK
CiAgICAgICAgLyogSW5pdGlhbCBWYWx1ZXMgb2YgTWluICYgTWF4IG9mIGRaMiAqLwogICAgICAg
IGRaMl9NSU4gPSAtMC4wMTsKICAgICAgICBkWjJfTUFYID0gIDAuMDA7CgoJLyogRmxhdCBQbGF0
ZWF1IENvbmRpdGlvbiAqLwoJR0wyID0gLShHTDEqY29zKHBoaV9zMSkpLygxNi4wKmNvcyhwaGlf
czIpKTsJLyogQW55IEJlYW0gUGhhc2Ugb2YgQy1iYW5kIENvcnJlY3Rpb24gQ2F2aXR5ICovCgoJ
LyogQmVhbSBFbmVyZ3kgb2YgYW4gRWxlY3Ryb24gYXQgdGhlIEJ1bmNoIENlbnRlciAqLwoJKkUy
ID0gRTEgKyBHTDIqY29zKHBoaV9zMik7CgoJLyogQ2FsY3VsYXRpb25zIG9mIEMtYmFuZCBDb3Jy
ZWN0aW9uIENhdml0eSAqLwoJZm9yKGU9LUVOO2U8PUVOO2UrKykKCXsKCQlkRTJbZV0gPSBkRTFb
ZV0gKyBHTDIqKGNvcyg4LjAqTV9QSSooZFoxW2VdL0xBTURBTCkrcGhpX3MyKSAtIGNvcyhwaGlf
czIpKTsKCQlkRV9FMltlXSA9IChkRTJbZV0pLygqRTIpOwoJCWRFX0VQMltlXSA9IDEwMC4wKihk
RV9FMltlXSk7CgkJZFoyW2VdID0gZFoxW2VdOwoJCQogICAgICAgICAgICAgICAgLyogU3VtbWF0
aW9uIG9mIGRFMipkRTIgKi8KICAgICAgICAgICAgICAgIGRFU1AyX1RFTVAgPSBkRVNQMl9URU1Q
ICsgKGRFMltlXSkqKGRFMltlXSk7CgogICAgICAgICAgICAgICAgLyogRmluZGluZyBNQVggYW5k
IE1JTiBvZiBkWjIgKi8KICAgICAgICAgICAgICAgIGlmKGRaMltlXSA+PSBkWjJfTUFYKQogICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBkWjJfTUFYID0gZFoyW2VdOwog
ICAgICAgICAgICAgICAgICAgICAgICBkWjJfTUlOID0gZFoyX01JTjsKICAgICAgICAgICAgICAg
IC8qICAgICAJcHJpbnRmKCJkWjIgPSAlbGYgZFoyX01BWCA9ICVsZiBkWjJfTUlOID0gJWxmIFxu
IiwgZFoyW2VdLCBkWjJfTUFYLCBkWjJfTUlOKTsgKi8KICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgIGVsc2UgaWYoKGRaMltlXTxkWjJfTUFYKSYmKGRaMltlXT5kWjJfTUlOKSkKICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgZFoyX01BWCA9IGRaMl9NQVg7
CiAgICAgICAgICAgICAgICAgICAgICAgIGRaMl9NSU4gPSBkWjJfTUlOOwogICAgICAgICAgICAg
ICAJLyogCXByaW50ZigiZFoyID0gJWxmIGRaMl9NQVggPSAlbGYgZFoyX01JTiA9ICVsZiBcbiIs
IGRaMltlXSwgZFoyX01BWCwgZFoyX01JTik7ICovCiAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICBlbHNlIGlmKGRaMltlXTxkWjJfTUlOKQogICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICAgICAgICBkWjJfTUFYID0gZFoyX01BWDsKICAgICAgICAgICAgICAgICAgICAg
ICAgZFoyX01JTiA9IGRaMltlXTsKICAgICAgICAgICAgICAgCS8qIAlwcmludGYoImRaMiA9ICVs
ZiBkWjJfTUFYID0gJWxmIGRaMl9NSU4gPSAlbGYgXG4iLCBkWjJbZV0sIGRaMl9NQVgsIGRaMl9N
SU4pOyAqLwogICAgICAgICAgICAgICAgfQoKICAgICAgICB9CiAgICAgICAgLyogQ2FsY3VsYXRp
b24gUk1TIFJlbGF0aXZlIEVuZXJneSBTcHJlYWQgYWZ0ZXIgdGhlIEMtYmFuZCBDb3JyZWN0aW9u
IENhdml0eSBbJV0gPSAxMDAuMCooZFNpZ21hX0UvRSkgKi8KICAgICAgICAqZEVTUDIgPSAoMTAw
LjAvKCpFMikpKnNxcnQoZEVTUDJfVEVNUC8oMi4wKihkb3VibGUpKEVOKSsxLjApKTsKCiAgICAg
ICAgLyogQ2FsY3VsYXRpb24gb2YgdGhlIEJ1bmNoIExlbmd0aCBhZnRlciB0aGUgQy1iYW5kIENv
cnJlY3Rpb24gQ2F2aXR5IChGV0hNKSAqLwogICAgICAgICpkQjIgPSBmYWJzKGRaMl9NQVggLSBk
WjJfTUlOKTsKCi8qCXByaW50ZigiZFoyX01BWD0gJWxmIGRaMl9NSU4gPSAlbGYgZEVTUDIgPSAl
bGYgZEIyID0gJWxmIFxuIiwgZFoyX01BWCwgZFoyX01JTiwgKmRFU1AyLCAqZEIyKTsgKi8gCn0K
Ci8qIEFmdGVyIHRoZSBGaXJzdCBCdW5jaCBDb21wcmVzc29yIChCQy1JKSwgSW5kZXggPSAzICov
CmRvdWJsZSBCQ19JKGRvdWJsZSBFMiwgZG91YmxlICpkRTIsIGRvdWJsZSAqZEVfRTIsIGRvdWJs
ZSAqZFoyLCBkb3VibGUgUjU2SSwgZG91YmxlICpFMywgZG91YmxlICpkRTMsIGRvdWJsZSAqZEVf
RTMsIGRvdWJsZSAqZEVfRVAzLCBkb3VibGUgKmRFU1AzLCBkb3VibGUgKmRaMywgZG91YmxlICpk
QjMpCnsKICAgICAgICBpbnQgZTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluZGV4IG9m
IE11bHRpIEVsZWN0cm9ucyAqLwoJZG91YmxlIGRFU1AzX1RFTVA7CQkvKiBUZW1wIFZhbHVlIG9m
IGRFU1AzICovCiAgICAgICAgZG91YmxlIGRaM19NSU4sIGRaM19NQVg7ICAgICAgICAvKiBCdW5j
aCBMZW5ndGggQ2FsY3VsYXRpb24sIE1pbiAmIE1heCBvZiBkWjMgKi8KCgkvKiBJbml0aWFsIFZh
bHVlcyBvZiBSTVMgUmVsYXRpdmUgRW5lcmd5IFNwcmVhZCAqLwoJZEVTUDNfVEVNUCA9IDAuMDsK
CiAgICAgICAgLyogSW5pdGlhbCBWYWx1ZXMgb2YgTWluICYgTWF4IG9mIGRaMyAqLwogICAgICAg
IGRaM19NSU4gPSAtMC4wMTsKICAgICAgICBkWjNfTUFYID0gIDAuMDA7CgoJLyogRW5lcmd5IGlz
IHRoZSBzYW1lIGFzIHRoYXQgb2YgQy1iYW5kIENvcnJlY3Rpb24gQ2F2aXR5ICovCgkqRTMgPSBF
MjsKCQoJLyogQ2FsY3VsYXRpb24gb2YgQkMtSSAqLwoJZm9yKGU9LUVOO2U8PUVOO2UrKykKCXsK
CQkvKiBVbmNoYW5nZWQgVmFsdWVzIGZyb20gQy1iYW5kIENvcnJlY3Rpb24gQ2F2aXR5ICovCiAg
ICAgCQlkRTNbZV0gPSBkRTJbZV07CQkJLyogQ1NSIGlzIG5vdCBjb25zaWRlcmVkIHlldCAqLwog
ICAgICAgICAgICAgCWRFX0UzW2VdID0gZEVfRTJbZV07CQkJLyogQ1NSIGlzIG5vdCBjb25zaWRl
cmVkIHlldCAqLwogICAgICAgICAgICAgCWRFX0VQM1tlXSA9IDEwMC4wKihkRV9FMltlXSk7CQkv
KiBDU1IgaXMgbm90IGNvbnNpZGVyZWQgeWV0ICovCgkJZFozW2VdID0gZFoyW2VdICsgUjU2SSoo
ZEVfRTJbZV0pOwkvKiBCdW5jaCBDb21wcmVzc2lvbiAqLwoKCQkvKiBTdW1tYXRpb24gb2YgZEUz
KmRFMyAqLwoJCWRFU1AzX1RFTVAgPSBkRVNQM19URU1QICsgKGRFM1tlXSkqKGRFM1tlXSk7Cgog
ICAgICAgICAgICAgICAgLyogRmluZGluZyBNQVggYW5kIE1JTiBvZiBkWjMgKi8KICAgICAgICAg
ICAgICAgIGlmKGRaM1tlXSA+PSBkWjNfTUFYKQogICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgICAgICBkWjNfTUFYID0gZFozW2VdOwogICAgICAgICAgICAgICAgICAgICAgICBk
WjNfTUlOID0gZFozX01JTjsKICAgICAgICAgICAgICAgCS8qICAgIAlwcmludGYoImRaMyA9ICVs
ZiBkWjNfTUFYID0gJWxmIGRaM19NSU4gPSAlbGYgXG4iLCBkWjNbZV0sIGRaM19NQVgsIGRaM19N
SU4pOyAqLwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZigoZFozW2Vd
PGRaM19NQVgpJiYoZFozW2VdPmRaM19NSU4pKQogICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgICAgICBkWjNfTUFYID0gZFozX01BWDsKICAgICAgICAgICAgICAgICAgICAgICAg
ZFozX01JTiA9IGRaM19NSU47CiAgICAgICAgICAgICAgICAvKiAgICAgCXByaW50ZigiZFozID0g
JWxmIGRaM19NQVggPSAlbGYgZFozX01JTiA9ICVsZiBcbiIsIGRaM1tlXSwgZFozX01BWCwgZFoz
X01JTik7ICovCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmKGRaM1tl
XTxkWjNfTUlOKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBkWjNf
TUFYID0gZFozX01BWDsKICAgICAgICAgICAgICAgICAgICAgICAgZFozX01JTiA9IGRaM1tlXTsK
ICAgICAgICAgICAgICAgIC8qICAgICAJcHJpbnRmKCJkWjMgPSAlbGYgZFozX01BWCA9ICVsZiBk
WjNfTUlOID0gJWxmIFxuIiwgZFozW2VdLCBkWjNfTUFYLCBkWjNfTUlOKTsgKi8KICAgICAgICAg
ICAgICAgIH0KCX0KCgkvKiBDYWxjdWxhdGlvbiBSTVMgUmVsYXRpdmUgRW5lcmd5IFNwcmVhZCBh
ZnRlciB0aGUgQkMtSSAqLwoJKmRFU1AzID0gKDEwMC4wLygqRTMpKSpzcXJ0KGRFU1AzX1RFTVAv
KDIuMCooZG91YmxlKShFTikrMS4wKSk7CgogICAgICAgIC8qIENhbGN1bGF0aW9uIG9mIHRoZSBC
dW5jaCBMZW5ndGggYWZ0ZXIgdGhlIEJDLUkgKEZXSE0pICovCiAgICAgICAgKmRCMyA9IGZhYnMo
ZFozX01BWCAtIGRaM19NSU4pOwoKLyoJcHJpbnRmKCJkWjNfTUFYPSAlbGYgZFozX01JTiA9ICVs
ZiBkRVNQMyA9ICVsZiBkQjMgPSAlbGYgXG4iLCBkWjNfTUFYLCBkWjNfTUlOLCAqZEVTUDMsICpk
QjMpOyAqLwp9CgovKiBBZnRlciB0aGUgVW5pdC1JIEMtYmFuZCBNYWluIExpbmFjLCBJbmRleCA9
IDQgKi8KZG91YmxlIFVOSVRfSShkb3VibGUgRTMsIGRvdWJsZSAqZEUzLCBkb3VibGUgKmRaMywg
ZG91YmxlIHBoaV9zNCwgZG91YmxlICpFNCwgZG91YmxlICpkRTQsIGRvdWJsZSAqZEVfRTQsIGRv
dWJsZSAqZEVfRVA0LCBkb3VibGUgKmRFU1A0LCBkb3VibGUgKmRaNCwgZG91YmxlICpkQjQpCnsK
ICAgICAgICBpbnQgZTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluZGV4IG9mIE11bHRp
IEVsZWN0cm9ucyAqLwogICAgICAgIGRvdWJsZSBkRVNQNF9URU1QOyAgICAgICAgICAgICAgLyog
VGVtcCBWYWx1ZSBvZiBkRVNQNCAqLwogICAgICAgIGRvdWJsZSBkWjRfTUlOLCBkWjRfTUFYOyAg
ICAgICAgLyogQnVuY2ggTGVuZ3RoIENhbGN1bGF0aW9uLCBNaW4gJiBNYXggb2YgZFo0ICovCgog
ICAgICAgIC8qIEluaXRpYWwgVmFsdXNlIG9mIFJNUyBSZWxhdGl2ZSBFbmVyZ3kgU3ByZWFkICov
CiAgICAgICAgZEVTUDRfVEVNUCA9IDAuMDsKCiAgICAgICAgLyogSW5pdGlhbCBWYWx1ZXMgb2Yg
TWluICYgTWF4IG9mIGRaNCAqLwogICAgICAgIGRaNF9NSU4gPSAtMC4wMTsKICAgICAgICBkWjRf
TUFYID0gIDAuMDA7CgoJLyogQmVhbSBFbmVyZ3kgb2YgYW4gRWxlY3Ryb24gYXQgdGhlIEJ1bmNo
IENlbnRlciAqLwoJKkU0ID0gRTMgKyBHTDQqY29zKHBoaV9zNCk7CgoJLyogQ2FsY3VsYXRpb24g
b2YgVW5pdC1JIEMtYmFuZCBMaW5hYyAqLwoJZm9yKGU9LUVOO2U8PUVOO2UrKykKCXsKCQlkRTRb
ZV0gPSBkRTNbZV0gKyBHTDQqKGNvcyg4LjAqTV9QSSooZFozW2VdL0xBTURBTCkrcGhpX3M0KSAt
IGNvcyhwaGlfczQpKTsKCQlkRV9FNFtlXSA9IChkRTRbZV0pLygqRTQpOwoJCWRFX0VQNFtlXSA9
IDEwMC4wKihkRV9FNFtlXSk7CgkJZFo0W2VdID0gZFozW2VdOwoKICAgICAgICAgICAgICAgIC8q
IFN1bW1hdGlvbiBvZiBkRTQqZEU0ICovCiAgICAgICAgICAgICAgICBkRVNQNF9URU1QID0gZEVT
UDRfVEVNUCArIChkRTRbZV0pKihkRTRbZV0pOwoKICAgICAgICAgICAgICAgIC8qIEZpbmRpbmcg
TUFYIGFuZCBNSU4gb2YgZFo0ICovCiAgICAgICAgICAgICAgICBpZihkWjRbZV0gPj0gZFo0X01B
WCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgZFo0X01BWCA9IGRa
NFtlXTsKICAgICAgICAgICAgICAgICAgICAgICAgZFo0X01JTiA9IGRaNF9NSU47CiAgICAgICAJ
CS8qICAgICAJcHJpbnRmKCJkWjQgPSAlbGYgZFo0X01BWCA9ICVsZiBkWjRfTUlOID0gJWxmIFxu
IiwgZFo0W2VdLCBkWjRfTUFYLCBkWjRfTUlOKTsgKi8KICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgIGVsc2UgaWYoKGRaNFtlXTxkWjRfTUFYKSYmKGRaNFtlXT5kWjRfTUlOKSkKICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgZFo0X01BWCA9IGRaNF9NQVg7
CiAgICAgICAgICAgICAgICAgICAgICAgIGRaNF9NSU4gPSBkWjRfTUlOOwogICAgICAgICAgICAg
ICAgLyogICAgIAlwcmludGYoImRaNCA9ICVsZiBkWjRfTUFYID0gJWxmIGRaNF9NSU4gPSAlbGYg
XG4iLCBkWjRbZV0sIGRaNF9NQVgsIGRaNF9NSU4pOyAqLwogICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgZWxzZSBpZihkWjRbZV08ZFo0X01JTikKICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgZFo0X01BWCA9IGRaNF9NQVg7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGRaNF9NSU4gPSBkWjRbZV07CiAgICAgICAgICAgICAgICAvKiAgICAgCXByaW50Zigi
ZFo0ID0gJWxmIGRaNF9NQVggPSAlbGYgZFo0X01JTiA9ICVsZiBcbiIsIGRaNFtlXSwgZFo0X01B
WCwgZFo0X01JTik7ICovCiAgICAgICAgICAgICAgICB9CgogICAgICAgIH0KICAgICAgICAvKiBD
YWxjdWxhdGlvbiBSTVMgUmVsYXRpdmUgRW5lcmd5IFNwcmVhZCBhZnRlciB0aGUgVW5pdC1JIEMt
YmFuZCBMaW5hYyBbJV0gPSAxMDAuMCooZFNpZ21hX0UvRSkgKi8KICAgICAgICAqZEVTUDQgPSAo
MTAwLjAvKCpFNCkpKnNxcnQoZEVTUDRfVEVNUC8oMi4wKihkb3VibGUpKEVOKSsxLjApKTsKCiAg
ICAgICAgLyogQ2FsY3VsYXRpb24gb2YgdGhlIEJ1bmNoIExlbmd0aCBhZnRlciB0aGUgVW5pdC1J
IEMtYmFuZCBMaW5hYyAoRldITSkgKi8KICAgICAgICAqZEI0ID0gZmFicyhkWjRfTUFYIC0gZFo0
X01JTik7CgovKiAgICAgCXByaW50ZigiZFo0X01BWD0gJWxmIGRaNF9NSU4gPSAlbGYgZEVTUDQg
PSAlbGYgZEI0ID0gJWxmIFxuIiwgZFo0X01BWCwgZFo0X01JTiwgKmRFU1A0LCAqZEI0KTsgKi8K
fQoKLyogQWZ0ZXIgdGhlIFNlY29uZCBCdW5jaCBDb21wcmVzc29yIChCQy1JSSksIEluZGV4ID0g
NSAqLwpkb3VibGUgQkNfSUkoZG91YmxlIEU0LCBkb3VibGUgKmRFNCwgZG91YmxlICpkRV9FNCwg
ZG91YmxlICpkWjQsIGRvdWJsZSBSNTZJSSwgZG91YmxlICpFNSwgZG91YmxlICpkRTUsIGRvdWJs
ZSAqZEVfRTUsIGRvdWJsZSAqZEVfRVA1LCBkb3VibGUgKmRFU1A1LCBkb3VibGUgKmRaNSwgZG91
YmxlICpkQjUpCnsJCglpbnQgZTsJCQkJLyogSW5kZXggb2YgTXVsdGkgRWxlY3Ryb25zICovCglk
b3VibGUgZEVTUDVfVEVNUDsJCS8qIFRlbXAgVmFsdWUgb2YgZEVTUDUgKi8KCWRvdWJsZSBkWjVf
TUlOLCBkWjVfTUFYOwkvKiBCdW5jaCBMZW5ndGggQ2FsY3VsYXRpb24sIE1pbiAmIE1heCBvZiBk
WjUgKi8KCiAgICAgICAgLyogSW5pdGlhbCBWYWx1ZXMgb2YgUk1TIFJlbGF0aXZlIEVuZXJneSBT
cHJlYWQgKi8KICAgICAgICBkRVNQNV9URU1QID0gMC4wOwoKICAgICAgICAvKiBJbml0aWFsIFZh
bHVlcyBvZiBNaW4gJiBNYXggb2YgZFo1ICovCiAgICAgICAgZFo1X01JTiA9IC0wLjAxOwogICAg
ICAgIGRaNV9NQVggPSArMC4wMDsKCiAgICAgICAgLyogRW5lcmd5IGlzIHRoZSBzYW1lIGFzIHRo
YXQgb2YgdGhlIFVuaXQtSSBDLWJhbmQgTGluYWMgKi8KICAgICAgICAqRTUgPSBFNDsKCiAgICAg
ICAgLyogQ2FsY3VsYXRpb24gb2YgQkMtSUkgKi8KICAgICAgICBmb3IoZT0tRU47ZTw9RU47ZSsr
KQogICAgICAgIHsKCQkvKiBVbmNoYW5nZWQgVmFsdWVzIGZyb20gdGhlIFVuaXQtSSBDLWJhbmQg
TGluYWMgKi8KICAgICAgICAgICAgICAgIGRFNVtlXSA9IGRFNFtlXTsgICAgICAgICAgICAgICAg
ICAgICAgICAvKiBDU1IgaXMgbm90IGNvbnNpZGVyZWQgeWV0ICovCiAgICAgICAgICAgICAgICBk
RV9FNVtlXSA9IGRFX0U0W2VdOyAgICAgICAgICAgICAgICAgICAgLyogQ1NSIGlzIG5vdCBjb25z
aWRlcmVkIHlldCAqLwogICAgICAgICAgICAgICAgZEVfRVA1W2VdID0gMTAwLjAqKGRFX0U0W2Vd
KTsgICAgICAgICAgIC8qIENTUiBpcyBub3QgY29uc2lkZXJlZCB5ZXQgKi8KICAgICAgICAgICAg
ICAgIGRaNVtlXSA9IGRaNFtlXSArIFI1NklJKihkRV9FNFtlXSk7ICAJLyogQnVuY2ggQ29tcHJl
c3Npb24gKi8KCiAgICAgICAgICAgICAgICAvKiBTdW1tYXRpb24gb2YgZEU1KmRFNSAqLwogICAg
ICAgICAgICAgICAgZEVTUDVfVEVNUCA9IGRFU1A1X1RFTVAgKyAoZEU1W2VdKSooZEU1W2VdKTsK
CiAgICAgICAgICAgICAgICAvKiBGaW5kaW5nIE1BWCBhbmQgTUlOIG9mIGRaNSAqLwogICAgICAg
ICAgICAgICAgaWYoZFo1W2VdID49IGRaNV9NQVgpCiAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIGRaNV9NQVggPSBkWjVbZV07CiAgICAgICAgICAgICAgICAgICAgICAg
IGRaNV9NSU4gPSBkWjVfTUlOOwogICAgICAgICAgICAgICAgLyogICAgIAlwcmludGYoImRaNSA9
ICVsZiBkWjVfTUFYID0gJWxmIGRaNV9NSU4gPSAlbGYgXG4iLCBkWjVbZV0sIGRaNV9NQVgsIGRa
NV9NSU4pOyAqLwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZigoZFo1
W2VdPGRaNV9NQVgpJiYoZFo1W2VdPmRaNV9NSU4pKQogICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICAgICAgICBkWjVfTUFYID0gZFo1X01BWDsKICAgICAgICAgICAgICAgICAgICAg
ICAgZFo1X01JTiA9IGRaNV9NSU47CiAgICAgICAgICAgICAgIAkvKiAJcHJpbnRmKCJkWjUgPSAl
bGYgZFo1X01BWCA9ICVsZiBkWjVfTUlOID0gJWxmIFxuIiwgZFo1W2VdLCBkWjVfTUFYLCBkWjVf
TUlOKTsgKi8KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYoZFo1W2Vd
PGRaNV9NSU4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRaNV9N
QVggPSBkWjVfTUFYOwogICAgICAgICAgICAgICAgICAgICAgICBkWjVfTUlOID0gZFo1W2VdOwog
ICAgICAgICAgICAgIAkvKglwcmludGYoImRaNSA9ICVsZiBkWjVfTUFYID0gJWxmIGRaNV9NSU4g
PSAlbGYgXG4iLCBkWjVbZV0sIGRaNV9NQVgsIGRaNV9NSU4pOyAqLwogICAgICAgICAgICAgICAg
fQogICAgICAgIH0KCiAgICAgICAgLyogQ2FsY3VsYXRpb24gUk1TIFJlbGF0aXZlIEVuZXJneSBT
cHJlYWQgYWZ0ZXIgdGhlIEJDLUlJICovCiAgICAgICAgKmRFU1A1ID0gKDEwMC4wLygqRTUpKSpz
cXJ0KGRFU1A1X1RFTVAvKDIuMCooZG91YmxlKShFTikrMS4wKSk7CgogICAgICAgIC8qIENhbGN1
bGF0aW9uIG9mIHRoZSBCdW5jaCBMZW5ndGggYWZ0ZXIgdGhlIEJDLUlJIChGV0hNKSAqLwogICAg
ICAgICpkQjUgPSBmYWJzKGRaNV9NQVggLSBkWjVfTUlOKTsKCi8qCXByaW50ZigiZFo1X01BWD0g
JWxmIGRaNV9NSU4gPSAlbGYgZEVTUDUgPSAlbGYgZEI1ID0gJWxmIFxuIiwgZFo1X01BWCwgZFo1
X01JTiwgKmRFU1A1LCAqZEI1KTsgKi8KfQoKLyogQWZ0ZXIgdGhlIFVuaXQtSUkgQy1iYW5kIExp
bmFjLCBJbmRleCA9IDYgKi8KZG91YmxlIFVOSVRfSUkoZG91YmxlIEU1LCBkb3VibGUgKmRFNSwg
ZG91YmxlICpkWjUsIGRvdWJsZSBwaGlfczYsIGRvdWJsZSAqRTYsIGRvdWJsZSAqZEU2LCBkb3Vi
bGUgKmRFX0U2LCBkb3VibGUgKmRFX0VQNiwgZG91YmxlICpkRVNQNiwgZG91YmxlICpkWjYsIGRv
dWJsZSAqZEI2KQp7CiAgICAgICAgaW50IGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJ
bmRleCBvZiBNdWx0aSBFbGVjdHJvbnMgKi8KICAgICAgICBkb3VibGUgZEVTUDZfVEVNUDsgICAg
ICAgICAgICAgIC8qIFRlbXAgVmFsdWUgb2YgZEVTUDYgKi8KICAgICAgICBkb3VibGUgZFo2X01J
TiwgZFo2X01BWDsgICAgICAgIC8qIEJ1bmNoIExlbmd0aCBDYWxjdWxhdGlvbiwgTWluICYgTWF4
IG9mIGRaNiAqLwoKICAgICAgICAvKiBJbml0aWFsIFZhbHVzZSBvZiBSTVMgUmVsYXRpdmUgRW5l
cmd5IFNwcmVhZCAqLwogICAgICAgIGRFU1A2X1RFTVAgPSAwLjA7CgogICAgICAgIC8qIEluaXRp
YWwgVmFsdWVzIG9mIE1pbiAmIE1heCBvZiBkWjYgKi8KICAgICAgICBkWjZfTUlOID0gLTAuMDE7
CiAgICAgICAgZFo2X01BWCA9ICAwLjAwOwoKICAgICAgICAvKiBCZWFtIEVuZXJneSBvZiBhbiBF
bGVjdHJvbiBhdCB0aGUgQnVuY2ggQ2VudGVyICovCiAgICAgICAgKkU2ID0gRTUgKyBHTDYqY29z
KHBoaV9zNik7CgoJLyogQ2FsY3VsYXRpb24gb2YgVW5pdC1JSSAqLwoJZm9yKGU9LUVOO2U8PUVO
O2UrKykKCXsKCQlkRTZbZV0gPSBkRTVbZV0gKyBHTDYqKGNvcyg4LjAqTV9QSSooZFo1W2VdL0xB
TURBTCkrcGhpX3M2KSAtIGNvcyhwaGlfczYpKTsKCQlkRV9FNltlXSA9IChkRTZbZV0pLygqRTYp
OwoJCWRFX0VQNltlXSA9IDEwMC4wKihkRV9FNltlXSk7CgkJZFo2W2VdID0gZFo1W2VdOwoKICAg
ICAgICAgICAgICAgIC8qIFN1bW1hdGlvbiBvZiBkRTYqZEU2ICovCiAgICAgICAgICAgICAgICBk
RVNQNl9URU1QID0gZEVTUDZfVEVNUCArIChkRTZbZV0pKihkRTZbZV0pOwoKICAgICAgICAgICAg
ICAgIC8qIEZpbmRpbmcgTUFYIGFuZCBNSU4gb2YgZFo2ICovCiAgICAgICAgICAgICAgICBpZihk
WjZbZV0gPj0gZFo2X01BWCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgZFo2X01BWCA9IGRaNltlXTsKICAgICAgICAgICAgICAgICAgICAgICAgZFo2X01JTiA9IGRa
Nl9NSU47CiAgICAgICAgICAgICAgICAvKiAgICAgCXByaW50ZigiZFo2ID0gJWxmIGRaNl9NQVgg
PSAlbGYgZFo2X01JTiA9ICVsZiBcbiIsIGRaNltlXSwgZFo2X01BWCwgZFo2X01JTik7ICovCiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmKChkWjZbZV08ZFo2X01BWCkm
JihkWjZbZV0+ZFo2X01JTikpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIGRaNl9NQVggPSBkWjZfTUFYOwogICAgICAgICAgICAgICAgICAgICAgICBkWjZfTUlOID0g
ZFo2X01JTjsKICAgICAgICAgICAgICAgIC8qICAgICAJcHJpbnRmKCJkWjYgPSAlbGYgZFo2X01B
WCA9ICVsZiBkWjZfTUlOID0gJWxmIFxuIiwgZFo2W2VdLCBkWjZfTUFYLCBkWjZfTUlOKTsgKi8K
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYoZFo2W2VdPGRaNl9NSU4p
CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRaNl9NQVggPSBkWjZf
TUFYOwogICAgICAgICAgICAgICAgICAgICAgICBkWjZfTUlOID0gZFo2W2VdOwogICAgICAgICAg
ICAgICAgLyogICAgIAlwcmludGYoImRaNiA9ICVsZiBkWjZfTUFYID0gJWxmIGRaNl9NSU4gPSAl
bGYgXG4iLCBkWjZbZV0sIGRaNl9NQVgsIGRaNl9NSU4pOyAqLwogICAgICAgICAgICAgICAgfQoK
ICAgICAgICB9CiAgICAgICAgLyogQ2FsY3VsYXRpb24gUk1TIFJlbGF0aXZlIEVuZXJneSBTcHJl
YWQgYWZ0ZXIgdGhlIFVuaXQtSUkgQy1iYW5kIExpbmFjIFslXSA9IDEwMC4wKihkU2lnbWFfRS9F
KSAqLwogICAgICAgICpkRVNQNiA9ICgxMDAuMC8oKkU2KSkqc3FydChkRVNQNl9URU1QLygyLjAq
KGRvdWJsZSkoRU4pKzEuMCkpOwoKICAgICAgICAvKiBDYWxjdWxhdGlvbiBvZiB0aGUgQnVuY2gg
TGVuZ3RoIGFmdGVyIHRoZSBVbml0LUlJIEMtYmFuZCBMaW5hYyAoRldITSkgKi8KICAgICAgICAq
ZEI2ID0gZmFicyhkWjZfTUFYIC0gZFo2X01JTik7CgovKiAgICAgCXByaW50ZigiZFo2X01BWD0g
JWxmIGRaNl9NSU4gPSAlbGYgZEVTUDYgPSAlbGYgZEI2ID0gJWxmIFxuIiwgZFo2X01BWCwgZFo2
X01JTiwgKmRFU1A2LCAqZEI2KTsgKi8KfQoKLyogQWZ0ZXIgdGhlIFVuaXQtSUlJIEMtYmFuZCBM
aW5hYywgSW5kZXggPSA3ICovCmRvdWJsZSBVTklUX0lJSShkb3VibGUgRTYsIGRvdWJsZSAqZEU2
LCBkb3VibGUgKmRaNiwgZG91YmxlIHBoaV9zNywgZG91YmxlICpFNywgZG91YmxlICpkRTcsIGRv
dWJsZSAqZEVfRTcsIGRvdWJsZSAqZEVfRVA3LCBkb3VibGUgKmRFU1A3LCBkb3VibGUgKmRaNywg
ZG91YmxlICpkQjcpCnsKICAgICAgICBpbnQgZTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8q
IEluZGV4IG9mIE11bHRpIEVsZWN0cm9ucyAqLwogICAgICAgIGRvdWJsZSBkRVNQN19URU1QOyAg
ICAgICAgICAgICAgLyogVGVtcCBWYWx1ZSBvZiBkRVNQNyAqLwogICAgICAgIGRvdWJsZSBkWjdf
TUlOLCBkWjdfTUFYOyAgICAgICAgLyogQnVuY2ggTGVuZ3RoIENhbGN1bGF0aW9uLCBNaW4gJiBN
YXggb2YgZFo3ICovCgogICAgICAgIC8qIEluaXRpYWwgVmFsdXNlIG9mIFJNUyBSZWxhdGl2ZSBF
bmVyZ3kgU3ByZWFkICovCiAgICAgICAgZEVTUDdfVEVNUCA9IDAuMDsKCiAgICAgICAgLyogSW5p
dGlhbCBWYWx1ZXMgb2YgTWluICYgTWF4IG9mIGRaNyAqLwogICAgICAgIGRaN19NSU4gPSAtMC4w
MTsKICAgICAgICBkWjdfTUFYID0gIDAuMDA7CgogICAgICAgIC8qIEJlYW0gRW5lcmd5IG9mIGFu
IEVsZWN0cm9uIGF0IHRoZSBCdW5jaCBDZW50ZXIgKi8KICAgICAgICAqRTcgPSBFNiArIEdMNypj
b3MocGhpX3M3KTsKCiAgICAgICAgLyogQ2FsY3VsYXRpb24gb2YgVW5pdC1JSUkgKi8KICAgICAg
ICBmb3IoZT0tRU47ZTw9RU47ZSsrKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGRFN1tlXSA9
IGRFNltlXSArIEdMNyooY29zKDguMCpNX1BJKihkWjZbZV0vTEFNREFMKStwaGlfczcpIC0gY29z
KHBoaV9zNykpOwogICAgICAgICAgICAgICAgZEVfRTdbZV0gPSAoZEU3W2VdKS8oKkU3KTsKICAg
ICAgICAgICAgICAgIGRFX0VQN1tlXSA9IDEwMC4wKihkRV9FN1tlXSk7CiAgICAgICAgICAgICAg
ICBkWjdbZV0gPSBkWjZbZV07CgogICAgICAgICAgICAgICAgLyogU3VtbWF0aW9uIG9mIGRFNypk
RTcgKi8KICAgICAgICAgICAgICAgIGRFU1A3X1RFTVAgPSBkRVNQN19URU1QICsgKGRFN1tlXSkq
KGRFN1tlXSk7CgogICAgICAgICAgICAgICAgLyogRmluZGluZyBNQVggYW5kIE1JTiBvZiBkWjcg
Ki8KICAgICAgICAgICAgICAgIGlmKGRaN1tlXSA+PSBkWjdfTUFYKQogICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICAgICAgICBkWjdfTUFYID0gZFo3W2VdOwogICAgICAgICAgICAg
ICAgICAgICAgICBkWjdfTUlOID0gZFo3X01JTjsKICAgICAgICAgICAgICAgIC8qICAgICAJcHJp
bnRmKCJkWjcgPSAlbGYgZFo3X01BWCA9ICVsZiBkWjdfTUlOID0gJWxmIFxuIiwgZFo3W2VdLCBk
WjdfTUFYLCBkWjdfTUlOKTsgKi8KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVs
c2UgaWYoKGRaN1tlXTxkWjdfTUFYKSYmKGRaN1tlXT5kWjdfTUlOKSkKICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICAgICAgZFo3X01BWCA9IGRaN19NQVg7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGRaN19NSU4gPSBkWjdfTUlOOwogICAgICAgICAgICAgICAgLyogICAgIAlw
cmludGYoImRaNyA9ICVsZiBkWjdfTUFYID0gJWxmIGRaN19NSU4gPSAlbGYgXG4iLCBkWjdbZV0s
IGRaN19NQVgsIGRaN19NSU4pOyAqLwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ZWxzZSBpZihkWjdbZV08ZFo3X01JTikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgZFo3X01BWCA9IGRaN19NQVg7CiAgICAgICAgICAgICAgICAgICAgICAgIGRaN19N
SU4gPSBkWjdbZV07CiAgICAgICAgICAgICAgICAvKiAgICAgCXByaW50ZigiZFo3ID0gJWxmIGRa
N19NQVggPSAlbGYgZFo3X01JTiA9ICVsZiBcbiIsIGRaN1tlXSwgZFo3X01BWCwgZFo3X01JTik7
ICovCiAgICAgICAgICAgICAgICB9CgogICAgICAgIH0KICAgICAgICAvKiBDYWxjdWxhdGlvbiBS
TVMgUmVsYXRpdmUgRW5lcmd5IFNwcmVhZCBhZnRlciB0aGUgVW5pdC1JSUkgQy1iYW5kIExpbmFj
IFslXSA9IDEwMC4wKihkU2lnbWFfRS9FKSAqLwogICAgICAgICpkRVNQNyA9ICgxMDAuMC8oKkU3
KSkqc3FydChkRVNQN19URU1QLygyLjAqKGRvdWJsZSkoRU4pKzEuMCkpOwoKICAgICAgICAvKiBD
YWxjdWxhdGlvbiBvZiB0aGUgQnVuY2ggTGVuZ3RoIGFmdGVyIHRoZSBVbml0LUlJSSBDLWJhbmQg
TGluYWMgKEZXSE0pICovCiAgICAgICAgKmRCNyA9IGZhYnMoZFo3X01BWCAtIGRaN19NSU4pOwoK
LyogICAgIAlwcmludGYoImRaN19NQVg9ICVsZiBkWjdfTUlOID0gJWxmIGRFU1A3ID0gJWxmIGRC
NyA9ICVsZiBcbiIsIGRaN19NQVgsIGRaN19NSU4sICpkRVNQNywgKmRCNyk7ICovCn0KCi8qIEFm
dGVyIHRoZSBVbml0LUlWIEMtYmFuZCBMaW5hYywgSW5kZXggPSA4ICovCmRvdWJsZSBVTklUX0lW
KGRvdWJsZSBFNywgZG91YmxlICpkRTcsIGRvdWJsZSAqZFo3LCBkb3VibGUgcGhpX3M4LCBkb3Vi
bGUgKkU4LCBkb3VibGUgKmRFOCwgZG91YmxlICpkRV9FOCwgZG91YmxlICpkRV9FUDgsIGRvdWJs
ZSAqZEVTUDgsIGRvdWJsZSAqZFo4LCBkb3VibGUgKmRCOCkKewogICAgICAgIGludCBlOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgLyogSW5kZXggb2YgTXVsdGkgRWxlY3Ryb25zICovCiAgICAg
ICAgZG91YmxlIGRFU1A4X1RFTVA7ICAgICAgICAgICAgICAvKiBUZW1wIFZhbHVlIG9mIGRFU1A4
ICovCiAgICAgICAgZG91YmxlIGRaOF9NSU4sIGRaOF9NQVg7ICAgICAgICAvKiBCdW5jaCBMZW5n
dGggQ2FsY3VsYXRpb24sIE1pbiAmIE1heCBvZiBkWjggKi8KCiAgICAgICAgLyogSW5pdGlhbCBW
YWx1c2Ugb2YgUk1TIFJlbGF0aXZlIEVuZXJneSBTcHJlYWQgKi8KICAgICAgICBkRVNQOF9URU1Q
ID0gMC4wOwoKICAgICAgICAvKiBJbml0aWFsIFZhbHVlcyBvZiBNaW4gJiBNYXggb2YgZFo4ICov
CiAgICAgICAgZFo4X01JTiA9IC0wLjAxOwogICAgICAgIGRaOF9NQVggPSAgMC4wMDsKCiAgICAg
ICAgLyogQmVhbSBFbmVyZ3kgb2YgYW4gRWxlY3Ryb24gYXQgdGhlIEJ1bmNoIENlbnRlciAqLwog
ICAgICAgICpFOCA9IEU3ICsgR0w4KmNvcyhwaGlfczgpOwoKICAgICAgICAvKiBDYWxjdWxhdGlv
biBvZiBVbml0LUlWICovCiAgICAgICAgZm9yKGU9LUVOO2U8PUVOO2UrKykKICAgICAgICB7CiAg
ICAgICAgICAgICAgICBkRThbZV0gPSBkRTdbZV0gKyBHTDgqKGNvcyg4LjAqTV9QSSooZFo3W2Vd
L0xBTURBTCkrcGhpX3M4KSAtIGNvcyhwaGlfczgpKTsKICAgICAgICAgICAgICAgIGRFX0U4W2Vd
ID0gKGRFOFtlXSkvKCpFOCk7CiAgICAgICAgICAgICAgICBkRV9FUDhbZV0gPSAxMDAuMCooZEVf
RThbZV0pOwogICAgICAgICAgICAgICAgZFo4W2VdID0gZFo3W2VdOwoKICAgICAgICAgICAgICAg
IC8qIFN1bW1hdGlvbiBvZiBkRTgqZEU4ICovCiAgICAgICAgICAgICAgICBkRVNQOF9URU1QID0g
ZEVTUDhfVEVNUCArIChkRThbZV0pKihkRThbZV0pOwoKICAgICAgICAgICAgICAgIC8qIEZpbmRp
bmcgTUFYIGFuZCBNSU4gb2YgZFo4ICovCiAgICAgICAgICAgICAgICBpZihkWjhbZV0gPj0gZFo4
X01BWCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgZFo4X01BWCA9
IGRaOFtlXTsKICAgICAgICAgICAgICAgICAgICAgICAgZFo4X01JTiA9IGRaOF9NSU47CiAgICAg
ICAgICAgICAgICAvKiAgICAgCXByaW50ZigiZFo4ID0gJWxmIGRaOF9NQVggPSAlbGYgZFo4X01J
TiA9ICVsZiBcbiIsIGRaOFtlXSwgZFo4X01BWCwgZFo4X01JTik7ICovCiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmKChkWjhbZV08ZFo4X01BWCkmJihkWjhbZV0+ZFo4
X01JTikpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRaOF9NQVgg
PSBkWjhfTUFYOwogICAgICAgICAgICAgICAgICAgICAgICBkWjhfTUlOID0gZFo4X01JTjsKICAg
ICAgICAgICAgICAgIC8qICAgICAJcHJpbnRmKCJkWjggPSAlbGYgZFo4X01BWCA9ICVsZiBkWjhf
TUlOID0gJWxmIFxuIiwgZFo4W2VdLCBkWjhfTUFYLCBkWjhfTUlOKTsgKi8KICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYoZFo4W2VdPGRaOF9NSU4pCiAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRaOF9NQVggPSBkWjhfTUFYOwogICAgICAg
ICAgICAgICAgICAgICAgICBkWjhfTUlOID0gZFo4W2VdOwogICAgICAgICAgICAgICAgLyogICAg
IAlwcmludGYoImRaOCA9ICVsZiBkWjhfTUFYID0gJWxmIGRaOF9NSU4gPSAlbGYgXG4iLCBkWjhb
ZV0sIGRaOF9NQVgsIGRaOF9NSU4pOyAqLwogICAgICAgICAgICAgICAgfQoKICAgICAgICB9CiAg
ICAgICAgLyogQ2FsY3VsYXRpb24gUk1TIFJlbGF0aXZlIEVuZXJneSBTcHJlYWQgYWZ0ZXIgdGhl
IFVuaXQtSVYgQy1iYW5kIExpbmFjIFslXSA9IDEwMC4wKihkU2lnbWFfRS9FKSAqLwogICAgICAg
ICpkRVNQOCA9ICgxMDAuMC8oKkU4KSkqc3FydChkRVNQOF9URU1QLygyLjAqKGRvdWJsZSkoRU4p
KzEuMCkpOwoKICAgICAgICAvKiBDYWxjdWxhdGlvbiBvZiB0aGUgQnVuY2ggTGVuZ3RoIGFmdGVy
IHRoZSBVbml0LUlWIEMtYmFuZCBMaW5hYyAoRldITSkgKi8KICAgICAgICAqZEI4ID0gZmFicyhk
WjhfTUFYIC0gZFo4X01JTik7CgovKiAgICAgCXByaW50ZigiZFo4X01BWD0gJWxmIGRaOF9NSU4g
PSAlbGYgZEVTUDggPSAlbGYgZEI4ID0gJWxmIFxuIiwgZFo4X01BWCwgZFo4X01JTiwgKmRFU1A4
LCAqZEI4KTsgKi8KfQoJCi8qIE91dHB1dCAqLwpvdXRwdXQoaW50ICoqc3BpbiwgaW50IEwsIGZs
b2F0IGgsIGZsb2F0IFQsIGludCBOLCBpbnQgbWNzLCBmbG9hdCAqYW0sIGludCBhY2N0LCBpbnQg
Km10YWcpCnsKCWludCBpLCBqOwoJZmxvYXQgbm9ybSwgZWF2ZSwgZTJhdmUsIG1hdmUsIG0yYXZl
LCBhYnNfbWF2ZSwgZmFjY3QsIGMsIHgsIHN4LCBzeSwKICAgICAgICAgICAgICB3c2l6ZSwgeG1p
biwgeG1heCwgeW1pbiwgeW1heCwgVGM7CglGSUxFICpzZGF0YTsKCgoJc2RhdGE9Zm9wZW4oImlz
aW5nLmRhdCIsImEiKTsKCgkvKiBGaWxlIE91dHB1dCAqLwoJZnByaW50ZihzZGF0YSwgIiU4LjVm
ICU4LjVmICU4LjVmICU4LjVmICU4LjVmICU4LjVmICU4LjVmIFxuIiwgVCxoLCBlYXZlLCBtYXZl
LCBhYnNfbWF2ZSwgYywgeCk7CglmY2xvc2Uoc2RhdGEpOwkKCn0gCgptYWluKCkKewoJCgkvKiBQ
YXJhbWV0ZXJzIGZvciB0aGUgaW5pdGlhbCBkaXN0cmlidXRpb24gKi8KCWludCBlOwkvKiBJbmRl
eCBvZiBlbGVjdHJvbnMgKi8KCWRvdWJsZSAqZEUwLCAqZEVfRVAwLCBkRVNQMCwgKmRaMCwgZEIw
OwoKCS8qIFBhcmFtZXRlcnMgYWZ0ZXIgTC1iYW5kIExpbmFjICovIAoJaW50IGk7CS8qIEluZGV4
IG9mIEJlYW0gUGhhc2UgYXQgTC1iYW5kIExpbmFjICovCQkJCQoJZG91YmxlIHBoaV9zMSwgRTEs
ICpkRTEsICpkRV9FMSwgKmRFX0VQMSwgZEVTUDEsICpkWjEsIGRCMTsKCgkvKiBQYXJhbWV0ZXJz
IGFmdGVyIEMtYmFuZCBjb3JyZWN0aW9uIENhdml0eSAqLwoJaW50IGo7CS8qIEluZGV4IG9mIEJl
YW0gUGhhc2UgYXQgQy1iYW5kIENvbGxlY3Rpb24gQ2F2aXR5ICovCglkb3VibGUgcGhpX3MyLCBF
MiwgKmRFMiwgKmRFX0UyLCAqZEVfRVAyLCBkRVNQMiwgKmRaMiwgZEIyOwoKCS8qIFBhcmFtZXRl
cnMgYWZ0ZXIgQkMtSSAqLwoJaW50IGs7CS8qIEluZGV4IGZvciB0aGUgUjU2SSBTY2FubmluZyAq
LyAKCWRvdWJsZSBSNTZJX1RFTVAsIFI1NkksIEUzLCAqZEUzLCAqZEVfRTMsICpkRV9FUDMsIGRF
U1AzLCAqZFozLCBkQjM7CgoJLyogUGFyYW1ldGVycyBhZnRlciBVbml0LUkgQy1iYW5kIExpbmFj
ICovCglpbnQgbDsJLyogSW5kZXggZm9yIEJlYW0gUGhhc2UgYXQgVW5pdC1JIEMtYmFuZCBMaW5h
YyAqLwoJZG91YmxlIHBoaV9zNCwgRTQsICpkRTQsICpkRV9FNCwgKmRFX0VQNCwgZEVTUDQsICpk
WjQsIGRCNDsKCgkvKiBQYXJhbWV0ZXJzIGFmdGVyIEJDLUlJICovCglpbnQgbTsJLyogSW5kZXgg
Zm9yIGZ1dHVyZSBSNTZJSSBTY2FubmluZyAqLwoJZG91YmxlIFI1NklJX1RFTVAsIFI1NklJLCBF
NSwgKmRFNSwgKmRFX0U1LCAqZEVfRVA1LCBkRVNQNSwgKmRaNSwgZEI1OwoKCS8qIFBhcmFtZXRl
cnMgYWZ0ZXIgVW5pdC1JSSBDLWJhbmQgTGluYWMgKi8KCWludCBuOwkvKiBJbmRleCBmb3IgQmVh
bSBQaGFzZSBhdCBVbml0LUlJIEMtYmFuZCBMaW5hYyAqLwoJZG91YmxlIHBoaV9zNiwgRTYsICpk
RTYsICpkRV9FNiwgKmRFX0VQNiwgZEVTUDYsICpkWjYsIGRCNjsKCgkvKiBQYXJhbWV0ZXJzIGFm
dGVyIFVuaXQtSUlJIEMtYmFuZCBMaW5hYyAqLwoJaW50IG87CS8qIEluZGV4IGZvciBCZWFtIFBo
YXNlIGF0IElJSSBDLWJhbmQgTGluYWMgKi8KCWRvdWJsZSBwaGlfczcsIEU3LCAqZEU3LCAqZEVf
RTcsICpkRV9FUDcsIGRFU1A3LCAqZFo3LCBkQjc7CgoJLyogUGFyYW1ldGVycyBhZnRlciBVbml0
LUlWIEMtYmFuZCBMaW5hYyAqLwoJaW50IHA7IC8qIEluZGV4IGZvciBCZWFtIFBoYXNlIGF0IElW
IEMtYmFuZCBMaW5hYyAqLwoJZG91YmxlIHBoaV9zOCwgRTgsICpkRTgsICpkRV9FOCwgKmRFX0VQ
OCwgZEVTUDgsICpkWjgsIGRCODsKCgkvKiBPdXRwdXQgRmlsZSAqLwoJRklMRSAqc2RhdGE7CgoJ
LyogVG90YWwgKDIuMCpFTisxKSBFbGVjdHJvbnMgKi8KCS8qIEluZGV4IG9mIEVsZWN0cm9uICJl
IiBpcyBmcm9tICAtRU4gdG8gK0VOICovCgkvKiBJbml0aWFsIERpc3RhbmNlIERldmlhdGlvbiBh
dCBIZWFkID0gZFowWy1FTl0gKi8KCS8qIEluaXRpYWwgRGlzdGFuY2UgRGV2aWF0aW9uIGF0IFRh
aWwgPSBkWjBbK0VOXSAqLwogICAgICAgIC8qIEluaXRpYWwgRW5lcmd5IERldmlhdGlvbiBhdCBI
ZWFkICAgPSBkRTBbLUVOXSAqLwogICAgICAgIC8qIEluaXRpYWwgRW5lcmd5IERldmlhdGlvbiBh
dCBUYWlsICAgPSBkRTBbK0VOXSAqLwoKCS8qICBNZW1vcnkgQWxsb2NhdGlvbiAqLwoJLyogSW5p
dGlhbCBwaGFzZSBzcGFjZSBkaXN0cmlidXRpb24gKi8KCWRFMCAgICA9IChkb3VibGUgKilkdmVj
dG9yKC1FTixFTik7CglkRV9FUDAgPSAoZG91YmxlICopZHZlY3RvcigtRU4sRU4pOwoJZFowICAg
ID0gKGRvdWJsZSAqKWR2ZWN0b3IoLUVOLEVOKTsKCgkvKiBMLWJhbmQgTGluYWMgKi8KCWRFMSAg
ICA9IChkb3VibGUgKilkdmVjdG9yKC1FTixFTik7CglkRV9FMSAgPSAoZG91YmxlICopZHZlY3Rv
cigtRU4sRU4pOwoJZEVfRVAxID0gKGRvdWJsZSAqKWR2ZWN0b3IoLUVOLEVOKTsKCWRaMSAgICA9
IChkb3VibGUgKilkdmVjdG9yKC1FTixFTik7CgoJLyogQy1iYW5kIENvcnJlY3Rpb24gQ2F2aXR5
ICovCglkRTIgICAgPSAoZG91YmxlICopZHZlY3RvcigtRU4sRU4pOwogICAgICAgIGRFX0UyICA9
IChkb3VibGUgKilkdmVjdG9yKC1FTixFTik7CiAgICAgICAgZEVfRVAyID0gKGRvdWJsZSAqKWR2
ZWN0b3IoLUVOLEVOKTsKICAgICAgICBkWjIgICAgPSAoZG91YmxlICopZHZlY3RvcigtRU4sRU4p
OwoKCS8qIEJDLUkgKi8KICAgICAgICBkRTMgICAgPSAoZG91YmxlICopZHZlY3RvcigtRU4sRU4p
OwogICAgICAgIGRFX0UzICA9IChkb3VibGUgKilkdmVjdG9yKC1FTixFTik7CiAgICAgICAgZEVf
RVAzID0gKGRvdWJsZSAqKWR2ZWN0b3IoLUVOLEVOKTsKICAgICAgICBkWjMgICAgPSAoZG91Ymxl
ICopZHZlY3RvcigtRU4sRU4pOwoKCS8qIFVuaXQtSSBDLWJhbmQgTGluYWMgKi8KICAgICAgICBk
RTQgICAgPSAoZG91YmxlICopZHZlY3RvcigtRU4sRU4pOwogICAgICAgIGRFX0U0ICA9IChkb3Vi
bGUgKilkdmVjdG9yKC1FTixFTik7CiAgICAgICAgZEVfRVA0ID0gKGRvdWJsZSAqKWR2ZWN0b3Io
LUVOLEVOKTsKICAgICAgICBkWjQgICAgPSAoZG91YmxlICopZHZlY3RvcigtRU4sRU4pOwoKCS8q
IEJDLUlJICovCglkRTUgICAgPSAoZG91YmxlICopZHZlY3RvcigtRU4sRU4pOwogICAgICAgIGRF
X0U1ICA9IChkb3VibGUgKilkdmVjdG9yKC1FTixFTik7CiAgICAgICAgZEVfRVA1ID0gKGRvdWJs
ZSAqKWR2ZWN0b3IoLUVOLEVOKTsKICAgICAgICBkWjUgICAgPSAoZG91YmxlICopZHZlY3Rvcigt
RU4sRU4pOwoKCS8qIFVuaXQtSUkgKi8KICAgICAgICBkRTYgICAgPSAoZG91YmxlICopZHZlY3Rv
cigtRU4sRU4pOwogICAgICAgIGRFX0U2ICA9IChkb3VibGUgKilkdmVjdG9yKC1FTixFTik7CiAg
ICAgICAgZEVfRVA2ID0gKGRvdWJsZSAqKWR2ZWN0b3IoLUVOLEVOKTsKICAgICAgICBkWjYgICAg
PSAoZG91YmxlICopZHZlY3RvcigtRU4sRU4pOwoKCS8qIFVuaXQtSUlJICovCiAgICAgICAgZEU3
ICAgID0gKGRvdWJsZSAqKWR2ZWN0b3IoLUVOLEVOKTsKICAgICAgICBkRV9FNyAgPSAoZG91Ymxl
ICopZHZlY3RvcigtRU4sRU4pOwogICAgICAgIGRFX0VQNyA9IChkb3VibGUgKilkdmVjdG9yKC1F
TixFTik7CiAgICAgICAgZFo3ICAgID0gKGRvdWJsZSAqKWR2ZWN0b3IoLUVOLEVOKTsKCgkvKiBV
bml0LUlWICovCiAgICAgICAgZEU4ICAgID0gKGRvdWJsZSAqKWR2ZWN0b3IoLUVOLEVOKTsKICAg
ICAgICBkRV9FOCAgPSAoZG91YmxlICopZHZlY3RvcigtRU4sRU4pOwogICAgICAgIGRFX0VQOCA9
IChkb3VibGUgKilkdmVjdG9yKC1FTixFTik7CiAgICAgICAgZFo4ICAgID0gKGRvdWJsZSAqKWR2
ZWN0b3IoLUVOLEVOKTsKCgoJLyogSW50cm9kdWN0aW9uIFByb2dyYW0gKi8KCWludHJvKCk7CgoJ
LyogQ2FsbGluZyBJbml0IERpc3RyaWJ1dGlvbiAqLyAKCS8qIGRFU1AwIDogSW5pdGlhbCBSTVMg
UmVsYXRpdmUgRW5lcmd5IFNwcmVhZCBbJV0gKi8KCS8qIGRCMCA6IEluaXRpYWwgQnVuY2ggTGVu
Z3RoIChGV0hNKSBbbW1dICovCgkKCUlOSVRfRElTVChkRTAsIGRFX0VQMCwgJmRFU1AwLCBkWjAs
ICZkQjApOwoKCS8qIFByaW50aW5nIEluaXQgRGlzdHJpYnV0aW9uICovCi8qCWZvcihlPS1FTjtl
PD1FTjtlKyspCgl7CgkJcHJpbnRmKCIlbGYgICVsZiAgJWxmICAlbGYgICVsZiAgJWxmXG4iLCBF
MCwgZEVTUDAsIGRCMCwgZFowW2VdLCBkRTBbZV0sIGRFX0VQMFtlXSk7IAoJfQoqLwoKCS8qIEwt
YmFuZCBMaW5hYyBDYWxjdWxhdGlvbiAqLwoJZm9yKGk9MzI7aTw9MzI7aT1pKzIpICAvKiBCZWFt
IFBoYXNlIG9mIEwtYmFuZCBMaW5hYyA9IDMyIFtkZWdyZWVdIGZvciBmYXN0IHN3ZWVwICovIAoJ
ewoJCXBoaV9zMSA9IChkb3VibGUpKGkqTV9QSS8xODAuMCk7ICAvKiBCZWFtIFBoYXNlIG9mIEwt
YmFuZCBMaW5hYyBbcmFkaWFuXSAqLwoJCUxfQkFORChkRTAsIGRaMCwgcGhpX3MxLCAmRTEsIGRF
MSwgZEVfRTEsIGRFX0VQMSwgJmRFU1AxLCBkWjEsICZkQjEpOwoKCQkvKiBQcmludGluZyBvZiBM
LWJhbmQgTGluYWMgQ2FsY3VsYXRpb24gKi8gCgkvKglmb3IoZT0tRU47ZTw9RU47ZSsrKQoJCXsg
CgkJCXByaW50ZigiJWQgICVsZiAgJWxmICAlbGYgICVsZiAgJWxmICAlbGYgICVsZiAgJWxmICAl
bGYgICVsZiAgJWxmICAlbGYgXG4iLCBpLCBFMCwgRTEsIGRFU1AwLCBkRVNQMSwgZEIwLCBkQjEs
IGRaMFtlXSwgZEUwW2VdLCBkRV9FUDBbZV0sIGRaMVtlXSwgZEUxW2VdLCBkRV9FUDFbZV0pOyAK
CQl9CgkqLwoJCS8qIEMtYmFuZCBDb3JyZWN0aW9uIENhdml0eSBDYWxjdWxhdGlvbiAqLwoJCWZv
cihqPTA7ajw9MDtqKyspICAvKiBCZWFtIFBoYXNlIG9mIEMtYmFuZCBDb3JyZWN0aW9uIENhdml0
eSBbZGVncmVlXSAqLwoJCXsKCQkJcGhpX3MyID0gKGRvdWJsZSkoaipNX1BJLzE4MC4wKTsKCQkJ
Q19DT1JSRUNUKEUxLCBkRTEsIGRaMSwgcGhpX3MxLCBwaGlfczIsICZFMiwgZEUyLCBkRV9FMiwg
ZEVfRVAyLCAmZEVTUDIsIGRaMiwgJmRCMik7CgkKCQkJLyogUHJpbnRpbmcgb2YgQy1iYW5kIENv
cnJlY3Rpb24gQ2F2aXR5ICovCgoJCS8qCWZvcihlPS1FTjtlPD1FTjtlKyspCgkJCXsKCQkJCXBy
aW50ZigiJWQgICVkICAlbGYgICVsZiAgJWxmICAlbGYgICVsZiAgJWxmICAlbGYgICVsZiAgJWxm
ICAlbGYgICVsZiAgJWxmICAlbGYgICVsZiAgJWxmICAlbGYgICVsZiAgJWxmIFxuIiwgaSwgaiwg
RTAsIEUxLCBFMiwgZEVTUDAsIGRFU1AxLCBkRVNQMiwgZEIwLCBkQjEsIGRCMiwgZFowW2VdLCBk
RTBbZV0sIGRFX0VQMFtlXSwgZFoxW2VdLCBkRTFbZV0sIGRFX0VQMVtlXSwgZFoyW2VdLCBkRTJb
ZV0sIGRFX0VQMltlXSk7CgkJCX0KCQkqLwoJCgkJCS8qIEJDLUkgQ2FsY3VsYXRpb24gKi8KICAg
ICAgICAgICAgICAgICAgICAgICAgLyogUjU2SSBWYWx1ZSBmb3IgZmMgPSA4LjI1IGF0IEJDLUkg
KDE2LjUgcHMgLT4gMiBwcyBmb3IgTWFyZ2luIEVsZWN0cm9uKSAqLwoJCQkvKiBUbyBmaW5kIHRo
ZSBtYXhpbXVtIFI1NkkgKi8KCQkJaWYoZmFicyhkRV9FMltFTl0pIDwgZmFicyhkRV9FMlstRU5d
KSkJCS8qIFJlbGF0aXZlIEVuZXJneSBEZXZpYXRpb24gb2YgSGVhZCA+IFJlbGF0aXZlIEVuZXJn
eSBEZXZpYXRpb24gb2YgVGFpbCAqLwoJCQl7CiAgICAgICAgICAgICAgICAgICAgICAgIAlSNTZJ
X1RFTVAgPSAoMTQuNUUtMTIqQykvZmFicygoZEVfRTJbRU5dKSk7IAoJCQl9CgoJCQllbHNlIGlm
KGZhYnMoZEVfRTJbRU5dKSA+IGZhYnMoZEVfRTJbLUVOXSkpCS8qIFJlbGF0aXZlIEVuZXJneSBE
ZXZpYXRpb24gb2YgSGVhZCA8IFJlbGF0aXZlIEVuZXJneSBEZXZpYXRpb24gb2YgVGFpbCAqLwoJ
CQl7CgkJCQlSNTZJX1RFTVAgPSAoMTQuNUUtMTIqQykvZmFicygoZEVfRTJbLUVOXSkpOwoJCQl9
CgkKCQkJLyogRmlyc3QgQnVuY2ggTGVuZ3RoIENvbXByZXNzaW9uICovCgkJCWZvcihrPTA7azw9
MDtrPWsrMTApCgkJCXsKCQkJCS8qIFZhcmlhdGlvbiBvZiBSNTZJICovCgkJCQlSNTZJID0gUjU2
SV9URU1QICsgKGRvdWJsZSkoay8xMC4wKTsgICAKCgkJCQkvKiBDYWxsaW5nIEJDLUkgKi8KCQkJ
CUJDX0koRTIsIGRFMiwgZEVfRTIsIGRaMiwgUjU2SSwgJkUzLCBkRTMsIGRFX0UzLCBkRV9FUDMs
ICZkRVNQMywgZFozLCAmZEIzKTsKCQkJCQoJCQkJZm9yKGU9LUVOO2U8PUVOO2UrKykKCQkJCXsK
CQkJCQlwcmludGYoIiVkICAlZCAgJWxmICAlbGYgICVsZiAgJWxmICAlbGYgICVsZiAgJWxmICAl
bGYgICVsZiAgJWxmICAlbGYgICVsZiAgJWxmICAlbGYgICVsZiAgJWxmICAlbGYgICVsZiAgJWxm
ICAlbGYgICVsZiAgJWxmICAlbGYgICVsZiAgJWxmIFxuIiwgaSwgaiwgUjU2SSwgRTAsIEUxLCBF
MiwgRTMsIGRFU1AwLCBkRVNQMSwgZEVTUDIsIGRFU1AzLCBkQjAsIGRCMSwgZEIyLCBkQjMsIGRa
MFtlXSwgZEUwW2VdLCBkRV9FUDBbZV0sIGRaMVtlXSwgZEUxW2VdLCBkRV9FUDFbZV0sIGRaMltl
XSwgZEUyW2VdLCBkRV9FUDJbZV0sIGRaM1tlXSwgZEUzW2VdLCBkRV9FUDNbZV0pOwoJCQkJfQoJ
CQkKCgkJCQkvKiBVbml0LUkgQy1iYW5kIExpbmFjIENhbGN1bGF0aW9uICovCgkJCQlmb3IobD0w
O2w8PTIwO2w9bCsyKSAvKiBCZWFtIFBoYXNlIG9mIFVuaXQtSSBDLWJhbmQgTGluYWMgKi8KCQkJ
CXsKCQkJCQlwaGlfczQgPSAoZG91YmxlKShsKk1fUEkvMTgwLjApOwoJCQkJCVVOSVRfSShFMywg
ZEUzLCBkWjMsIHBoaV9zNCwgJkU0LCBkRTQsIGRFX0U0LCBkRV9FUDQsICZkRVNQNCwgZFo0LCAm
ZEI0KTsgCgoJCQkJLyoJZm9yKGU9LUVOO2U8PUVOO2UrKykKCQkJCQl7CgkJCQkJCXByaW50Zigi
JWQgICVkICAlZCAgJWxmICAlbGYgICVsZiAgJWxmICAlbGYgICVsZiAgJWxmICAlbGYgICVsZiAg
JWxmICAlbGYgICVsZiAgJWxmICAlbGYgICVsZiAgJWxmICAlbGYgICVsZiAgJWxmICAlbGYgICVs
ZiAgJWxmICAlbGYgICVsZiAgJWxmICAlbGYgICVsZiAgJWxmICAlbGYgICVsZiAgJWxmIFxuIiwg
aSwgaiwgbCwgUjU2SSwgRTAsIEUxLCBFMiwgRTMsIEU0LCBkRVNQMCwgZEVTUDEsIGRFU1AyLCBk
RVNQMywgZEVTUDQsIGRCMCwgZEIxLCBkQjIsIGRCMywgZEI0LCBkWjBbZV0sIGRFMFtlXSwgZEVf
RVAwW2VdLCBkWjFbZV0sIGRFMVtlXSwgZEVfRVAxW2VdLCBkWjJbZV0sIGRFMltlXSwgZEVfRVAy
W2VdLCBkWjNbZV0sIGRFM1tlXSwgZEVfRVAzW2VdLCBkWjRbZV0sIGRFNFtlXSwgZEVfRVA0W2Vd
KTsgCgkJCQkJfQoJCQkJKi8KCgkJCQkJLyogQkMtSUkgQ2FsY3VsYXRpb24gKi8KCgkJCQkJLyog
UjU2SUkgVmFsdWUgZm9yIGZjID0gOC4wMCBhdCBCQy1JSSAoMiBwcyAtPiAwLjI1IHBzIGZvciBN
YXJnaW4gRWxlY3Ryb24pICovCgkJCQkJLyogVG8gZmluZCB0aGUgbWF4aW11bSBSNTZJSSAqLwoJ
CQkJCWlmKGZhYnMoZEVfRTRbRU5dKSA8IGZhYnMoZEVfRTRbLUVOXSkpCQkvKiBSZWxhdGl2ZSBF
bmVyZ3kgRGV2aWF0aW9uIG9mIEhlYWQgPiBSZWxhdGl2ZSBFbmVyZ3kgRGV2aWF0aW9uIG9mIFRh
aWwgKi8KCQkJCQl7CgkJCQkJCVI1NklJX1RFTVAgPSAoMS43NUUtMTIqQykvZmFicyhkRV9FNFtF
Tl0pOyAgCgkJCQkJLyoJUjU2SUlfVEVNUCA9IDIuMCooMS43NUUtMTIqQykvKCBmYWJzKGRFX0U0
W0VOXSkrIGZhYnMoZEVfRTRbLUVOXSkgKTsgKi8KCQkJCQkJCgkJCQkJfQoJCQkJCWVsc2UgaWYo
ZmFicyhkRV9FNFtFTl0pID4gZmFicyhkRV9FNFstRU5dKSkJLyogUmVsYXRpdmUgRW5lcmd5IERl
dmlhdGlvbiBvZiBIZWFkIDwgUmVsYXRpdmUgRW5lcmd5IERldmlhdGlvbiBvZiBUYWlsICovCgkJ
CQkJewoJCQkJCQlSNTZJSV9URU1QID0gKDEuNzVFLTEyKkMpL2ZhYnMoKGRFX0U0Wy1FTl0pKTsK
CQkJCQl9CgkJCQkJCgkJCQkJLyogU2Vjb25kIEJ1bmNoIExlbmd0aCBDb21wcmVzc2lvbiAqLwoJ
CQkJCWZvcihtPTA7bTw9MDttPW0rMTApCgkJCQkJewoJCQkJCQkvKiBWYXJpYXRpb24gb2YgUjU2
SUkgKi8KCQkJCQkJUjU2SUkgPSBSNTZJSV9URU1QICsgKGRvdWJsZSkobS8xMC4wKTsKCQoJCQkJ
CQkvKiBDYWxsaW5nIEJDLUlJICovCgkJCQkJCUJDX0lJKEU0LCBkRTQsIGRFX0U0LCBkWjQsIFI1
NklJLCAmRTUsIGRFNSwgZEVfRTUsIGRFX0VQNSwgJmRFU1A1LCBkWjUsICZkQjUpOyAKCi8qIFRF
U1QJCQkJCQlmb3IoZT0tRU47ZTw9RU47ZSsrKQoJCQkJCQl7CgkJCQkJCQlwcmludGYoIiVkICAl
ZCAgJWQgICVsZiAgJWxmICAlbGYgICVsZiAgJWxmICAlbGYgICVsZiAgJWxmICAlbGYgICVsZiAg
JWxmICAlbGYgICVsZiAgJWxmICAlbGYgICVsZiBcbiIsIGksIGosIGwsIFI1NkksIFI1NklJLCBF
MywgRTUsIGRFU1AzLCBkRVNQNCwgZEVTUDUsIGRCMywgZEI0LCBkQjUsIGRaNFtlXSwgZEU0W2Vd
LCBkRV9FUDRbZV0sIGRaNVtlXSwgZEU1W2VdLCBkRV9FUDVbZV0pOyAKCQkJCQkJfQoKKi8KCQkJ
CQkKCgkJCQkJCS8qIFVuaXQtSUkgQ2FsY3VsYXRpb24gKi8KCQkJCQkJZm9yKG49MDtuPD0wO249
bis0KSAJLyogQmVhbSBQaGFzZSBvZiBVbml0LUlJLCBVbml0LUlJSSwgYW5kIFVuaXQtSVYgQy1i
YW5kIExpbmFjICovCgkJCQkJCXsKCQkJCQkJCXBoaV9zNiA9IChkb3VibGUpKG4qTV9QSS8xODAu
MCk7CgkJCQkJCS8qIFRFU1QJVU5JVF9JSShFNSwgZEU1LCBkWjUsIHBoaV9zNiwgJkU2LCBkRTYs
IGRFX0U2LCBkRV9FUDYsICZkRVNQNiwgZFo2LCAmZEI2KTsgICAqLwoJCQkJCQkKCQkJCQkJLyoJ
Zm9yKGU9LUVOO2U8PUVOO2UrKykKCQkJCQkJCXsKCQkJCQkJCQlwcmludGYoIiVkICAlZCAgJWQg
ICVkICAlbGYgICVsZiAgJWxmICAlbGYgICVsZiAgJWxmICAlbGYgICVsZiAgJWxmICAlbGYgICVs
ZiAgJWxmICAlbGYgICVsZiBcbiIsIGksIGosIGwsIG4sIFI1NkksIFI1NklJLCBFNSwgRTYsIGRF
U1A1LCBkRVNQNiwgZEI1LCBkQjYsIGRaNVtlXSwgZEU1W2VdLCBkRV9FUDVbZV0sIGRaNltlXSwg
ZEU2W2VdLCBkRV9FUDZbZV0pOyAgCgkJCQkJCQl9CgkJCQkJCSovCgoJCQkJCQkJLyogVW5pdC1J
SUkgQ2FsY3VsYXRpb24gKi8KCQkJCQkJCWZvcihvPTA7bzw9MDtvPW8rNCkKCQkJCQkJCXsKCQkJ
CQkJCQlwaGlfczcgPSAoZG91YmxlKShvKk1fUEkvMTgwLjApOwoJCQkJCQkJLyogVEVTVAlVTklU
X0lJSShFNiwgZEU2LCBkWjYsIHBoaV9zNywgJkU3LCBkRTcsIGRFX0U3LCBkRV9FUDcsICZkRVNQ
NywgZFo3LCAmZEI3KTsgKi8KCQkJCQkJCQoJCQkJCQkJLyoJZm9yKGU9LUVOO2U8PUVOO2UrKykK
CQkJCQkJCQl7CgkJCQkJCQkJCXByaW50ZigiJWQgICVkICAlZCAgJWQgICVsZiAgJWxmICAlbGYg
ICVsZiAgJWxmICAlbGYgICVsZiAgJWxmICAlbGYgICVsZiAgJWxmICAlbGYgICVsZiAgJWxmIFxu
IiwgaSwgaiwgbCwgbiwgUjU2SSwgUjU2SUksIEU2LCBFNywgZEVTUDYsIGRFU1A3LCBkQjYsIGRC
NywgZFo2W2VdLCBkRTZbZV0sIGRFX0VQNltlXSwgZFo3W2VdLCBkRTdbZV0sIGRFX0VQN1tlXSk7
CgkJCQkJCQkJfQoJCQkJCQkJKi8KCQkJCQkJCgkJCQkJCQkJLyogVW5pdC1JViBDYWxjdWxhdGlv
biAqLwoJCQkJCQkJCWZvcihwPTA7cDw9MDtwPXArNCkKCQkJCQkJCQl7CgkJCQkJCQkJCXBoaV9z
OCA9IChkb3VibGUpKHAqTV9QSS8xODAuMCk7ICAKCQkJCQkJCQkvKiBURVNUCVVOSVRfSVYoRTcs
IGRFNywgZFo3LCBwaGlfczgsICZFOCwgZEU4LCBkRV9FOCwgZEVfRVA4LCAmZEVTUDgsIGRaOCwg
JmRCOCk7ICovCgkJCQkJCQkgCgkJCQkJCQkJCS8qIENvbmRpdGlvbiBvZiBSTVMgRW5lcmd5IFNw
cmVhZCBpcyBsZXNzIHRoYW4gMC4wMiUgCSAgICAgKi8KCQkJCQkJCQkJLyogQ29uZGl0aW9uIG9m
IEJ1bmNoIExlbmd0aCAoRldITSkgYXQgVW5kdWxhdG9yIDwgMC4xNSBtbSAgICovCgkJCQkJCSAJ
CQkvKiBDb25kaXRpb24gb2YgQmVhbSBFbmVyZ3kgc2hvdWxkIGJlIGxhcmdlciB0aGFuIDEwMDAu
MCBNZVYgKi8KCQkJCQkJCQkvKiBURVNUCWlmKChkRVNQODwwLjgpJiYoRTg+OTAwLjApJiYoZEI4
PDAuMTUpKQoJCQkJCQkJCQl7CgkJCQkJCQkJCQlmb3IoZT0tRU47ZTw9RU47ZSsrKQoJCQkJCQkJ
CQkJeyAgCgkJCQkJCQkJCQkJcHJpbnRmKCIlZCAgJWQgICVkICAlZCAgJWQgICVkICAlbGYgICVs
ZiAgJWxmICAlbGYgICVsZiAgJWxmICAlbGYgICVsZiAgJWxmICAlbGYgICVsZiAgJWxmICAlbGYg
ICVsZiAgJWxmICAlbGYgICVsZiAgJWxmICAlbGYgICVsZiAgJWxmICAlbGYgICVsZiBcbiIsIGks
IGosIGwsIG4sIG8sIHAsIFI1NkksIFI1NklJLCBFMCwgRTEsIEUyLCBFNCwgRTYsIEU3LCBFOCwg
ZEVTUDAsIGRFU1AxLCBkRVNQMiwgZEVTUDQsIGRFU1A2LCBkRVNQNywgZEVTUDgsIGRCMCwgZEIz
LCBkQjUsIGRCOCwgZFo4W2VdLCBkRThbZV0sIGRFX0VQOFtlXSk7IAoJCQkJCQkJCQkJfQoJCQkJ
CQkJCQkJCQoJCQkJCQkJCQl9ICovCgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQl9IAoJCQkJCX0g
IAoJCQkJfSAgIAoJCQl9IAoJCX0gICAKCX0gCgoJLyogQ2xlYXJpbmcgdGhlIEFsbG9jYXRlZCBN
ZW1vcnkgKi8KCS8qIEluaXQgRGlzdHJpYnV0aW9uICovCglmcmVlX2R2ZWN0b3IoZEUwLCAtRU4s
IEVOKTsKCWZyZWVfZHZlY3RvcihkRV9FUDAsIC1FTiwgRU4pOwoJZnJlZV9kdmVjdG9yKGRaMCwg
LUVOLCBFTik7CgoJLyogTC1iYW5kIExpbmFjICovCQoJZnJlZV9kdmVjdG9yKGRFMSwgLUVOLCBF
Tik7CglmcmVlX2R2ZWN0b3IoZEVfRTEsIC1FTiwgRU4pOwoJZnJlZV9kdmVjdG9yKGRFX0VQMSwg
LUVOLCBFTik7CglmcmVlX2R2ZWN0b3IoZFoxLCAtRU4sIEVOKTsKCgkvKiBDLWJhbmQgQ29ycmVj
dGlvbiBDYXZpdHkgKi8KICAgICAgICBmcmVlX2R2ZWN0b3IoZEUyLCAtRU4sIEVOKTsKICAgICAg
ICBmcmVlX2R2ZWN0b3IoZEVfRTIsIC1FTiwgRU4pOwogICAgICAgIGZyZWVfZHZlY3RvcihkRV9F
UDIsIC1FTiwgRU4pOwogICAgICAgIGZyZWVfZHZlY3RvcihkWjIsIC1FTiwgRU4pOwoKCS8qIEJD
LUkgKi8KICAgICAgICBmcmVlX2R2ZWN0b3IoZEUzLCAtRU4sIEVOKTsKICAgICAgICBmcmVlX2R2
ZWN0b3IoZEVfRTMsIC1FTiwgRU4pOwogICAgICAgIGZyZWVfZHZlY3RvcihkRV9FUDMsIC1FTiwg
RU4pOwogICAgICAgIGZyZWVfZHZlY3RvcihkWjMsIC1FTiwgRU4pOwoJCiAgICAgICAgLyogVW5p
dC1JIEMtYmFuZCBMaW5hYyAqLwogICAgICAgIGZyZWVfZHZlY3RvcihkRTQsIC1FTiwgRU4pOwog
ICAgICAgIGZyZWVfZHZlY3RvcihkRV9FNCwgLUVOLCBFTik7CiAgICAgICAgZnJlZV9kdmVjdG9y
KGRFX0VQNCwgLUVOLCBFTik7CiAgICAgICAgZnJlZV9kdmVjdG9yKGRaNCwgLUVOLCBFTik7CgoJ
LyogQkMtSUkgKi8KCWZyZWVfZHZlY3RvcihkRTUsIC1FTiwgRU4pOwogICAgICAgIGZyZWVfZHZl
Y3RvcihkRV9FNSwgLUVOLCBFTik7CiAgICAgICAgZnJlZV9kdmVjdG9yKGRFX0VQNSwgLUVOLCBF
Tik7CiAgICAgICAgZnJlZV9kdmVjdG9yKGRaNSwgLUVOLCBFTik7CgogICAgICAgIC8qIFVuaXQt
SUkgKi8KICAgICAgICBmcmVlX2R2ZWN0b3IoZEU2LCAtRU4sIEVOKTsKICAgICAgICBmcmVlX2R2
ZWN0b3IoZEVfRTYsIC1FTiwgRU4pOwogICAgICAgIGZyZWVfZHZlY3RvcihkRV9FUDYsIC1FTiwg
RU4pOwogICAgICAgIGZyZWVfZHZlY3RvcihkWjYsIC1FTiwgRU4pOwoKICAgICAgICAvKiBVbml0
LUlJSSAqLwogICAgICAgIGZyZWVfZHZlY3RvcihkRTcsIC1FTiwgRU4pOwogICAgICAgIGZyZWVf
ZHZlY3RvcihkRV9FNywgLUVOLCBFTik7CiAgICAgICAgZnJlZV9kdmVjdG9yKGRFX0VQNywgLUVO
LCBFTik7CiAgICAgICAgZnJlZV9kdmVjdG9yKGRaNywgLUVOLCBFTik7CgogICAgICAgIC8qIFVu
aXQtSVYgKi8KICAgICAgICBmcmVlX2R2ZWN0b3IoZEU4LCAtRU4sIEVOKTsKICAgICAgICBmcmVl
X2R2ZWN0b3IoZEVfRTgsIC1FTiwgRU4pOwogICAgICAgIGZyZWVfZHZlY3RvcihkRV9FUDgsIC1F
TiwgRU4pOwogICAgICAgIGZyZWVfZHZlY3RvcihkWjgsIC1FTiwgRU4pOwoKfQo=


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]