Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 23 Sep 2014 20:20:23 -0700
From:      Patrick Powell <papowell@astart.com>
To:        freebsd-pkg@freebsd.org
Cc:        FreeBSD Ports ML <freebsd-ports@freebsd.org>
Subject:   Suggestion on how to add search order to multiple reponsitories
Message-ID:  <54223877.1000302@astart.com>

next in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format.
--------------070901020907000709010302
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit

Currently there does not appear to be simple way to specify the
order that repositories searched for packages,  or at least there
is none documented as such that I can find.

Suppose we add a 'repo_order' field to the repository specification, i.e. -

FreeBSDMyStuff: {
   URL: http://myserver/${ABI}/latest
   ENABLED: yes
   MIRROR_TYPE: SRV
   repo_order:  1
  }

FreeBSD: {
   URL: http://pkg.freebsd.org/${ABI}/latest
   ENABLED: yes
   MIRROR_TYPE: SRV
   repo_order:  2
  }

When doing a search for packages,  the found/discovered packages
would be sorted by the value of the order field.  By default,  if
there is no value for the order field then this entry would come
last.  If there are two entries with no or the same order value
then they would be sorted on the repo name,  as is currently done.

Also,  when displaying repositories,  i.e. - pkg -v -v,  you would
sort the display entries by the repo_order field as well.

Just to jumpstart this effort I am attaching a set of patches for
pkg-1.4.0.pre-alpha15.  This implements the basic functionality to
add repo_order to the repository definitions and adds support to
display the repo_order when doing 'pkg search'.

I would happy to add this ordering functionality to other parts of
the pkg support,  but I need a bit of help with the current code.

 From my understanding/reading/crystal ball gazing/looking at the
code entrails, it appears that when doing a 'pkg install X' the X
is first used to determine the set of packages in question.  Once
these have been determined there is a rather intimidating (recursive
as well?) procedure which is used to determine any dependencies.

Somewhere in this process there is a place where the listed/named
repositories are searched for candidates for dependencies.  It
appears at a casual reading that the repositories are searched in
the reverse order they were put in the reponsitory list and candidates
found during the search are then added to the dependency list as
they are found.  This has the effect of having entries found in
earlier listed repositories overwrite those found in later listed
respositories (I thought this was VERY clever!).

Rather than modify this code,  I would suggest adding a 'repository
ordering' step or routine.  Just after the repositories are
found/listed,  the repository list should be sorted (stably) using
the name and the repo_order field.  That is,  all of the repositories
with a lower repo_order value would be moved ahead of those with
lower repo_order values, while preserving the order for those with
the same repo_order value.

If this is done and the algorithm for searching the repositories
is as I have outlined it,  then you should get the desired repository
priority effect.  And perhaps no other code changes would be required.

I hope.  Perhaps.  Maybe.


--------------070901020907000709010302
Content-Type: text/plain; charset=us-ascii;
 name="patch-pkg-1.4.0.pre-alpha15"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="patch-pkg-1.4.0.pre-alpha15"

KioqIHBrZy0xLjQuMC5wcmUtYWxwaGExNS9kb2NzL3BrZ19wcmludGYuMwlNb24gU2VwIDE1
IDEzOjE4OjI2IDIwMTQKLS0tIHBrZy0xLjQuMC5wcmUtYWxwaGExNS5vcmlnL2RvY3MvcGtn
X3ByaW50Zi4zCVN1biBKdW4gIDggMTI6NTk6NTIgMjAxNAoqKioqKioqKioqKioqKioKKioq
IDY0NCw2NTUgKioqKgogIFZhbGlkIG9ubHkgZHVyaW5nIG9wZXJhdGlvbnMgd2hlbiBvbmUg
dmVyc2lvbiBvZiBhIHBhY2thZ2UgaXMgYmVpbmcKICByZXBsYWNlZCBieSBhbm90aGVyLgog
IC5WdCBzdHJ1Y3QgcGtnICoKLSAuSXQgQ20gJVoKLSBSZXBvc2l0b3J5IE9yZGVyIChyZXBv
X29yZGVyKSBbaW50ZWdlcl0gdmFsdWUuCi0gVmFsdWUgaXMgc2V0IGluIHRoZSByZXBvc2l0
b3J5IGluZm9ybWF0aW9uIGFuZCBpcyBsaW1pdGVkIHRvIDAtMTAwIChkZWZhdWx0IDEwMCku
Ci0gV2hlbiBzZWxlY3RpbmcgcGFja2FnZXMgZm9yIGluc3RhbGxhdGlvbiwgcmVwb3NpdG9y
aWVzIHdpdGggbG93ZXIgb3JkZXIgbnVtYmVycwotIGFyZSBzZWFyY2hlZCBiZWZvcmUgcGFj
a2FnZXMgd2l0aCBoaWdoZXIgb3JkZXIgbnVtYmVycy4KLSAuVnQgc3RydWN0IHBrZyAqCiAg
Lkl0IENtICVhCiAgQXV0b3JlbW92ZSBmbGFnIFtib29sZWFuXQogIC5WdCBzdHJ1Y3QgcGtn
ICoKLS0tIDY0NCw2NDkgLS0tLQoqKiogcGtnLTEuNC4wLnByZS1hbHBoYTE1L2RvY3MvcGtn
LmNvbmYuNQlNb24gU2VwIDE1IDEzOjMzOjAyIDIwMTQKLS0tIHBrZy0xLjQuMC5wcmUtYWxw
aGExNS5vcmlnL2RvY3MvcGtnLmNvbmYuNQlTdW4gU2VwIDE0IDE1OjExOjQwIDIwMTQKKioq
KioqKioqKioqKioqCioqKiAyNzEsMjc5ICoqKioKICAuVmEgaHcubmNwdQogIGlzIHVzZWQu
CiAgRGVmYXVsdDogMC4KLSAuSXQgQ20gUkVQT19PUkRFUjogaW50ZWdlciBbMS0xMDAsIGRl
ZmF1bHQgMTAwXQotIFJlcG9zaXRvcmllcyB3aXRoIGxvd2VyIHJlcG9fb3JkZXIgdmFsdWVz
IGFyZSBleGFtaW5lZCBiZWZvcmUgcmVwb25zaXRvcmllcyB3aXRoCi0gbGFyZ2VyIHJlcG9f
b3JkZXIgdmFsdWVzLgogIC5FbAogIC5TaCBSRVBPU0lUT1JZIENPTkZJR1VSQVRJT04KICBU
byB1c2UgYSByZXBvc2l0b3J5IHlvdSB3aWxsIG5lZWQgYXQgbGVhc3Qgb25lIHJlcG9zaXRv
cnkKLS0tIDI3MSwyNzYgLS0tLQoqKioqKioqKioqKioqKioKKioqIDQyMiw0MzggKioqKgog
IC5TeSBSRVBPU19ESVIKICBzZWFyY2ggcGF0aCwgd2l0aCBpbmRpdmlkdWFsIHJlcG9zaXRv
cnkgY29uZmlndXJhdGlvbiBmaWxlcyBpbiB0aGUKICBzYW1lIGRpcmVjdG9yeSBwcm9jZXNz
ZWQgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLgohIFRoaXMgc2VhcmNoIG9yZGVyIGlzIG1vZGlm
aWVkIGJ5IHRoZQohIC5TeSByZXBvX29yZGVyCiEgdmFsdWU7IHJlcG9zaXRvcmllcyB3aXRo
IHNtYWxsZXIKISAuU3kgcmVwb19vcmRlcgohIHZhbHVlcyBhcmUgc2VhcmNoZWQgYmVmb3Ig
cmVwb3NpdG9yaWVzIHdpdGggbGFyZ2VyCiEgLlN5IHJlcG9fb3JkZXIKISB2YWx1ZXMuCiEg
UGFja2FnZXMgZm91bmQgZWFybGllciBpbiB0aGUgc2VhcmNoIG9yZGVyIHRha2UgcHJlY2Vk
ZW5jZSwKISBtZWFuaW5nIHRoYXQgCiEgaWYgdGhlIHNhbWUgcGFja2FnZSBpcyBhdmFpbGFi
bGUgZnJvbSBzZXZlcmFsIHJlcG9zaXRvcmllcwohIHRoZSBmaXJzdCBvbmUgZm91bmQgaW4g
dGhlIHNlYXJjaCBvcmRlciB3aWxsIGJlIHVzZWQuCiAgVGhpcyBiZWhhdmlvdXIgbWF5IGJl
IG92ZXJyaWRkZW4gcGVyLXBhY2thZ2UgYnkgYWRkaW5nIGEgCiAgLlN5IHJlcG9zaXRvcnkK
ICBhbm5vdGF0aW9uIHRvIHRoZSBpbnN0YWxsZWQgcGFja2FnZS4KLS0tIDQxOSw0MjcgLS0t
LQogIC5TeSBSRVBPU19ESVIKICBzZWFyY2ggcGF0aCwgd2l0aCBpbmRpdmlkdWFsIHJlcG9z
aXRvcnkgY29uZmlndXJhdGlvbiBmaWxlcyBpbiB0aGUKICBzYW1lIGRpcmVjdG9yeSBwcm9j
ZXNzZWQgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLgohIEVhcmxpZXIgZmlsZXMgdGFrZSBwcmVj
ZWRlbmNlLCBtZWFuaW5nIHRoYXQgcGFja2FnZXMgd2lsbCBiZSBkb3dubG9hZGVkCiEgZnJv
bSB0aGVtIHByZWZlcmVudGlhbGx5IHdoZXJlIHRoZSBzYW1lIHBhY2thZ2UgaXMgYXZhaWxh
YmxlIGZyb20gc2V2ZXJhbAohIHJlcG9zaXRvcmllcy4KICBUaGlzIGJlaGF2aW91ciBtYXkg
YmUgb3ZlcnJpZGRlbiBwZXItcGFja2FnZSBieSBhZGRpbmcgYSAKICAuU3kgcmVwb3NpdG9y
eQogIGFubm90YXRpb24gdG8gdGhlIGluc3RhbGxlZCBwYWNrYWdlLgoqKioqKioqKioqKioq
KioKKioqIDQ1NSw0NzggKioqKgogICAgICBmaW5nZXJwcmludHM6ICIvdXNyL3NoYXJlL2tl
eXMvcGtnIiwKICAgICAgbWlycm9yX3R5cGU6ICJzcnYiCiAgfQotIAotICMgY2FuIGJlIGlu
IHRoZSBzYW1lIG9yIHNlcGFyYXRlIGZpbGUKLSBGcmVlQlNEX215X21vZHM6IHsKLSAgICAg
dXJsOiAicGtnK2h0dHA6Ly9teS5zZXJ2ZXIucHJpdmF0ZS8ke0FCSX0vbGF0ZXN0IiwKLSAg
ICAgZW5hYmxlZDogdHJ1ZSwKLSAgICAgc2lnbmF0dXJlX3R5cGU6ICJmaW5nZXJwcmludHMi
LAotICAgICBmaW5nZXJwcmludHM6ICIvdXNyL3NoYXJlL2tleXMvcGtnIiwKLSAgICAgbWly
cm9yX3R5cGU6ICJzcnYiCi0gICAgIHJlcG9fb3JkZXI6IDIwCi0gfQogIC5FZAotIC5QcAot
IFRoZSAKLSAuU3kgRnJlZUJTRF9teV9tb2RzCi0gcmVwb3NpdG9yeSAocmVwb19vcmRlciAy
MCkgd2lsbCBiZSBzZWFyY2hlZCBiZWZvcmUgdGhlCi0gLlN5IEZyZWVCU0QKLSByZXBvc2l0
b3J5IChyZXBvX29yZGVyIGRlZmF1bHQgMTAwKS4KLSAuUHAKICBFeGFtcGxlIGZvciBwa2cu
Y29uZgogIC5CZCAtbGl0ZXJhbCAtb2Zmc2V0IGluZGVudAogIHBrZ19kYmRpcjogIi92YXIv
ZGIvcGtnIgotLS0gNDQ0LDQ1MCAtLS0tCioqKiBwa2ctMS40LjAucHJlLWFscGhhMTUvbGli
cGtnL3BrZy5jCU1vbiBTZXAgMTUgMTM6NTg6MjEgMjAxNAotLS0gcGtnLTEuNC4wLnByZS1h
bHBoYTE1Lm9yaWcvbGlicGtnL3BrZy5jCUZyaSBTZXAgMTIgMTY6NTU6MTQgMjAxNAoqKioq
KioqKioqKioqKioKKioqIDQxLDExMSAqKioqCiAgCiAgc3RhdGljIHVjbF9vYmplY3RfdCAq
bWFuaWZlc3Rfc2NoZW1hID0gTlVMTDsKICAKISBzdGF0aWMgc3RydWN0IHBrZ19rZXlfeCBw
a2dfa2V5c194W10gPSB7CiEgCXsgUEtHX09SSUdJTiwgIm9yaWdpbiIsIFVDTF9TVFJJTkcg
fSwKISAJeyBQS0dfTkFNRSwgIm5hbWUiLCBVQ0xfU1RSSU5HIH0sCiEgCXsgUEtHX1ZFUlNJ
T04sICJ2ZXJzaW9uIiwgVUNMX1NUUklORyB9LAohIAl7IFBLR19DT01NRU5ULCAiY29tbWVu
dCIsIFVDTF9TVFJJTkcgfSwKISAJeyBQS0dfREVTQywgImRlc2MiLCBVQ0xfU1RSSU5HIH0s
CiEgCXsgUEtHX01UUkVFLCAibXRyZWUiLCBVQ0xfU1RSSU5HIH0sCiEgCXsgUEtHX01FU1NB
R0UsICJtZXNzYWdlIiwgVUNMX1NUUklORyB9LAohIAl7IFBLR19BUkNILCAiYXJjaCIsIFVD
TF9TVFJJTkcgfSwKISAJeyBQS0dfTUFJTlRBSU5FUiwgIm1haW50YWluZXIiLCBVQ0xfU1RS
SU5HIH0sCiEgCXsgUEtHX1dXVywgInd3dyIsIFVDTF9TVFJJTkcgfSwKISAJeyBQS0dfUFJF
RklYLCAicHJlZml4IiwgVUNMX1NUUklORyB9LAohIAl7IFBLR19SRVBPUEFUSCwgInJlcG9w
YXRoIiwgVUNMX1NUUklORyB9LAohIAl7IFBLR19DS1NVTSwgInN1bSIsIFVDTF9TVFJJTkcg
fSwKISAJeyBQS0dfT0xEX1ZFUlNJT04sICJvbGR2ZXJzaW9uIiwgVUNMX1NUUklORyB9LAoh
IAl7IFBLR19SRVBPTkFNRSwgInJlcG9uYW1lIiwgVUNMX1NUUklORyB9LAohIAl7IFBLR19S
RVBPVVJMLCAicmVwb3VybCIsIFVDTF9TVFJJTkcgfSwKISAJeyBQS0dfRElHRVNULCAiZGln
ZXN0IiwgVUNMX1NUUklORyB9LAohIAl7IFBLR19SRUFTT04sICJyZWFzb24iLCBVQ0xfU1RS
SU5HIH0sCiEgCXsgUEtHX0ZMQVRTSVpFLCAiZmxhdHNpemUiLCBVQ0xfSU5UIH0sCiEgCXsg
UEtHX09MRF9GTEFUU0laRSwgIm9sZGZsYXRzaXplIiwgVUNMX0lOVCB9LAohIAl7IFBLR19Q
S0dTSVpFLCAicGtnc2l6ZSIsIFVDTF9JTlQgfSwKISAJeyBQS0dfTElDRU5TRV9MT0dJQywg
ImxpY2Vuc2Vsb2dpYyIsIFVDTF9JTlQgfSwKISAJeyBQS0dfQVVUT01BVElDLCAiYXV0b21h
dGljIiwgVUNMX0JPT0xFQU4gfSwKISAJeyBQS0dfTE9DS0VELCAibG9ja2VkIiwgVUNMX0JP
T0xFQU4gfSwKISAJeyBQS0dfUk9XSUQsICJyb3dpZCIsIFVDTF9JTlQgfSwKISAJeyBQS0df
VElNRSwgInRpbWUiLCBVQ0xfSU5UIH0sCiEgCXsgUEtHX0FOTk9UQVRJT05TLCAiYW5ub3Rh
dGlvbnMiLCBVQ0xfT0JKRUNUIH0sCiEgCXsgUEtHX0xJQ0VOU0VTLCAibGljZW5zZXMiLCBV
Q0xfQVJSQVkgfSwKISAJeyBQS0dfQ0FURUdPUklFUywgImNhdGVnb3JpZXMiLCBVQ0xfQVJS
QVkgfSwKISAJeyBQS0dfVU5JUVVFSUQsICJ1bmlxdWVpZCIsIFVDTF9TVFJJTkcgfSwKISAJ
eyBQS0dfT0xEX0RJR0VTVCwgIm9sZGRpZ2VzdCIsIFVDTF9TVFJJTkcgfSwKISAJeyBQS0df
UkVQT19PUkRFUiwgInJlcG9fb3JkZXIiLCBVQ0xfSU5UIH0KICB9OwogIAotIHN0cnVjdCBw
a2dfa2V5X3ggKmdldF9wa2dfa2V5X2J5X2VudW1fdGFnKCBpbnQgZW51bV90YWcgKQotIHsK
LSAJc3RydWN0IHBrZ19rZXlfeCAqZm91bmQgPSAwOwotIAlpbnQgaTsKLSAJZm9yKCBpID0g
MDsgaSA8IHNpemVvZihwa2dfa2V5c194KS9zaXplb2YocGtnX2tleXNfeFswXSk7ICsraSAp
ewotIAkJc3RydWN0IHBrZ19rZXlfeCAqdGVzdCA9ICZwa2dfa2V5c194W2ldOwotIAkJaWYo
IHRlc3QtPmVudW1fdGFnID09IGVudW1fdGFnICl7Ci0gCQkJZm91bmQgPSB0ZXN0OwotIAkJ
CWJyZWFrOwotIAkJfQotIAl9Ci0gCXJldHVybiggZm91bmQgKTsKLSB9Ci0gCi0gCi0gc3Ry
dWN0IHBrZ19rZXlfeCAqZ2V0X3BrZ19rZXlfYnlfbmFtZSggY29uc3QgY2hhciAqIG5hbWUg
KQotIHsKLSAJc3RydWN0IHBrZ19rZXlfeCAqZm91bmQgPSAwOwotIAlpbnQgaTsKLSAJZm9y
KCBpID0gMDsgaSA8IHNpemVvZihwa2dfa2V5c194KS9zaXplb2YocGtnX2tleXNfeFswXSk7
ICsraSApewotIAkJc3RydWN0IHBrZ19rZXlfeCAqdGVzdCA9ICZwa2dfa2V5c194W2ldOwot
IAkJaWYoICEgc3RyY21wKCB0ZXN0LT5uYW1lICwgbmFtZSApICl7Ci0gCQkJZm91bmQgPSB0
ZXN0OwotIAkJCWJyZWFrOwotIAkJfQotIAl9Ci0gCXJldHVybiggZm91bmQgKTsKLSB9Ci0g
Ci0gCiAgaW50CiAgcGtnX25ldyhzdHJ1Y3QgcGtnICoqcGtnLCBwa2dfdCB0eXBlKQogIHsK
LS0tIDQxLDgwIC0tLS0KICAKICBzdGF0aWMgdWNsX29iamVjdF90ICptYW5pZmVzdF9zY2hl
bWEgPSBOVUxMOwogIAohIHN0cnVjdCBwa2dfa2V5IHBrZ19rZXlzW1BLR19OVU1fRklFTERT
XSA9IHsKISAJW1BLR19PUklHSU5dID0geyAib3JpZ2luIiwgVUNMX1NUUklORyB9LAohIAlb
UEtHX05BTUVdID0geyAibmFtZSIsIFVDTF9TVFJJTkcgfSwKISAJW1BLR19WRVJTSU9OXSA9
IHsgInZlcnNpb24iLCBVQ0xfU1RSSU5HIH0sCiEgCVtQS0dfQ09NTUVOVF0gPSB7ICJjb21t
ZW50IiwgVUNMX1NUUklORyB9LAohIAlbUEtHX0RFU0NdID0geyAiZGVzYyIsIFVDTF9TVFJJ
TkcgfSwKISAJW1BLR19NVFJFRV0gPSB7ICJtdHJlZSIsIFVDTF9TVFJJTkcgfSwKISAJW1BL
R19NRVNTQUdFXSA9IHsgIm1lc3NhZ2UiLCBVQ0xfU1RSSU5HIH0sCiEgCVtQS0dfQVJDSF0g
PSB7ICJhcmNoIiwgVUNMX1NUUklORyB9LAohIAlbUEtHX01BSU5UQUlORVJdID0geyAibWFp
bnRhaW5lciIsIFVDTF9TVFJJTkcgfSwKISAJW1BLR19XV1ddID0geyAid3d3IiwgVUNMX1NU
UklORyB9LAohIAlbUEtHX1BSRUZJWF0gPSB7ICJwcmVmaXgiLCBVQ0xfU1RSSU5HIH0sCiEg
CVtQS0dfUkVQT1BBVEhdID0geyAicmVwb3BhdGgiLCBVQ0xfU1RSSU5HIH0sCiEgCVtQS0df
Q0tTVU1dID0geyAic3VtIiwgVUNMX1NUUklORyB9LAohIAlbUEtHX09MRF9WRVJTSU9OXSA9
IHsgIm9sZHZlcnNpb24iLCBVQ0xfU1RSSU5HIH0sCiEgCVtQS0dfUkVQT05BTUVdID0geyAi
cmVwb25hbWUiLCBVQ0xfU1RSSU5HIH0sCiEgCVtQS0dfUkVQT1VSTF0gPSB7ICJyZXBvdXJs
IiwgVUNMX1NUUklORyB9LAohIAlbUEtHX0RJR0VTVF0gPSB7ICJkaWdlc3QiLCBVQ0xfU1RS
SU5HIH0sCiEgCVtQS0dfUkVBU09OXSA9IHsgInJlYXNvbiIsIFVDTF9TVFJJTkcgfSwKISAJ
W1BLR19GTEFUU0laRV0gPSB7ICJmbGF0c2l6ZSIsIFVDTF9JTlQgfSwKISAJW1BLR19PTERf
RkxBVFNJWkVdID0geyAib2xkZmxhdHNpemUiLCBVQ0xfSU5UIH0sCiEgCVtQS0dfUEtHU0la
RV0gPSB7ICJwa2dzaXplIiwgVUNMX0lOVCB9LAohIAlbUEtHX0xJQ0VOU0VfTE9HSUNdID0g
eyAibGljZW5zZWxvZ2ljIiwgVUNMX0lOVCB9LAohIAlbUEtHX0FVVE9NQVRJQ10gPSB7ICJh
dXRvbWF0aWMiLCBVQ0xfQk9PTEVBTiB9LAohIAlbUEtHX0xPQ0tFRF0gPSB7ICJsb2NrZWQi
LCBVQ0xfQk9PTEVBTiB9LAohIAlbUEtHX1JPV0lEXSA9IHsgInJvd2lkIiwgVUNMX0lOVCB9
LAohIAlbUEtHX1RJTUVdID0geyAidGltZSIsIFVDTF9JTlQgfSwKISAJW1BLR19BTk5PVEFU
SU9OU10gPSB7ICJhbm5vdGF0aW9ucyIsIFVDTF9PQkpFQ1QgfSwKISAJW1BLR19MSUNFTlNF
U10gPSB7ICJsaWNlbnNlcyIsIFVDTF9BUlJBWSB9LAohIAlbUEtHX0NBVEVHT1JJRVNdID0g
eyAiY2F0ZWdvcmllcyIsIFVDTF9BUlJBWSB9LAohIAlbUEtHX1VOSVFVRUlEXSA9IHsgInVu
aXF1ZWlkIiwgVUNMX1NUUklORyB9LAohIAlbUEtHX09MRF9ESUdFU1RdID0geyAib2xkZGln
ZXN0IiwgVUNMX1NUUklORyB9LAogIH07CiAgCiAgaW50CiAgcGtnX25ldyhzdHJ1Y3QgcGtn
ICoqcGtnLCBwa2dfdCB0eXBlKQogIHsKKioqKioqKioqKioqKioqCioqKiAyODksMzAyICoq
KioKICAKICAJd2hpbGUgKChhdHRyID0gdmFfYXJnKGFwLCBpbnQpKSA+IDApIHsKICAKISAJ
CXN0cnVjdCBwa2dfa2V5X3ggKmtleSA9IGdldF9wa2dfa2V5X2J5X2VudW1fdGFnKCBhdHRy
ICk7CiEgCQlpZiAoIWtleSkgewohIAkJCXBrZ19lbWl0X2Vycm9yKCJCYWQgZW51bSB2YWx1
ZSAlZCB0byBwa2dfdnNldCIsIGF0dHIgKTsKICAJCQlyZXR1cm4gKEVQS0dfRkFUQUwpOwog
IAkJfQohIAkJCiEgCQlvYmogPSB1Y2xfb2JqZWN0X2ZpbmRfa2V5KHBrZy0+ZmllbGRzLCBr
ZXktPm5hbWUpOwohIAkJc3dpdGNoIChrZXktPnR5cGUpIHsKICAJCWNhc2UgVUNMX1NUUklO
RzoKICAJCQlpZiAob2JqID09IE5VTEwpIHsKICAJCQkJKnZhX2FyZyhhcCwgY29uc3QgY2hh
ciAqKikgPSBOVUxMOwotLS0gMjU4LDI3MCAtLS0tCiAgCiAgCXdoaWxlICgoYXR0ciA9IHZh
X2FyZyhhcCwgaW50KSkgPiAwKSB7CiAgCiEgCQlpZiAoYXR0ciA+PSBQS0dfTlVNX0ZJRUxE
UyB8fCBhdHRyIDw9IDApIHsKISAJCQlwa2dfZW1pdF9lcnJvcigiQmFkIGFyZ3VtZW50IG9u
IHBrZ19nZXQiKTsKICAJCQlyZXR1cm4gKEVQS0dfRkFUQUwpOwogIAkJfQohIAohIAkJb2Jq
ID0gdWNsX29iamVjdF9maW5kX2tleShwa2ctPmZpZWxkcywgcGtnX2tleXNbYXR0cl0ubmFt
ZSk7CiEgCQlzd2l0Y2ggKHBrZ19rZXlzW2F0dHJdLnR5cGUpIHsKICAJCWNhc2UgVUNMX1NU
UklORzoKICAJCQlpZiAob2JqID09IE5VTEwpIHsKICAJCQkJKnZhX2FyZyhhcCwgY29uc3Qg
Y2hhciAqKikgPSBOVUxMOwoqKioqKioqKioqKioqKioKKioqIDM1NiwzNjggKioqKgogIAl1
Y2xfb2JqZWN0X3QgKm87CiAgCiAgCXdoaWxlICgoYXR0ciA9IHZhX2FyZyhhcCwgaW50KSkg
PiAwKSB7CiEgCQlzdHJ1Y3QgcGtnX2tleV94ICprZXkgPSBnZXRfcGtnX2tleV9ieV9lbnVt
X3RhZyggYXR0ciApOwohIAkJaWYgKCFrZXkpIHsKISAJCQlwa2dfZW1pdF9lcnJvcigiQmFk
IGVudW0gdmFsdWUgJWQgdG8gcGtnX3ZzZXQiLCBhdHRyICk7CiAgCQkJcmV0dXJuIChFUEtH
X0ZBVEFMKTsKICAJCX0KISAJCQohIAkJc3dpdGNoIChrZXktPnR5cGUpIHsKICAJCWNhc2Ug
VUNMX1NUUklORzoKICAJCQlzdHIgPSB2YV9hcmcoYXAsIGNvbnN0IGNoYXIgKik7CiAgCQkJ
ZGF0YSA9IHN0cjsKLS0tIDMyNCwzMzUgLS0tLQogIAl1Y2xfb2JqZWN0X3QgKm87CiAgCiAg
CXdoaWxlICgoYXR0ciA9IHZhX2FyZyhhcCwgaW50KSkgPiAwKSB7CiEgCQlpZiAoYXR0ciA+
PSBQS0dfTlVNX0ZJRUxEUyB8fCBhdHRyIDw9IDApIHsKISAJCQlwa2dfZW1pdF9lcnJvcigi
QmFkIGFyZ3VtZW50IG9uIHBrZ19nZXQiKTsKICAJCQlyZXR1cm4gKEVQS0dfRkFUQUwpOwog
IAkJfQohIAohIAkJc3dpdGNoIChwa2dfa2V5c1thdHRyXS50eXBlKSB7CiAgCQljYXNlIFVD
TF9TVFJJTkc6CiAgCQkJc3RyID0gdmFfYXJnKGFwLCBjb25zdCBjaGFyICopOwogIAkJCWRh
dGEgPSBzdHI7CioqKioqKioqKioqKioqKgoqKiogMzczLDQwMSAqKioqCiAgCQkJfQogIAog
IAkJCWlmIChkYXRhID09IE5VTEwpCiEgCQkJCXVjbF9vYmplY3RfZGVsZXRlX2tleShwa2ct
PmZpZWxkcywga2V5LT5uYW1lKTsKICAJCQllbHNlCiAgCQkJCXVjbF9vYmplY3RfcmVwbGFj
ZV9rZXkocGtnLT5maWVsZHMsCiAgCQkJCSAgICB1Y2xfb2JqZWN0X2Zyb21zdHJpbmdfY29t
bW9uKGRhdGEsIHN0cmxlbihkYXRhKSwgMCksCiEgCQkJCSAgICBrZXktPm5hbWUsIHN0cmxl
bihrZXktPm5hbWUpLCBmYWxzZSk7CiAgCiAgCQkJZnJlZShidWYpOwogIAkJCWJyZWFrOwog
IAkJY2FzZSBVQ0xfQk9PTEVBTjoKICAJCQl1Y2xfb2JqZWN0X3JlcGxhY2Vfa2V5KHBrZy0+
ZmllbGRzLAogIAkJCSAgICB1Y2xfb2JqZWN0X2Zyb21ib29sKChib29sKXZhX2FyZyhhcCwg
aW50KSksCiEgCQkJICAgIGtleS0+bmFtZSwgc3RybGVuKGtleS0+bmFtZSksIGZhbHNlKTsK
ICAJCQlicmVhazsKICAJCWNhc2UgVUNMX0lOVDoKICAJCQl1Y2xfb2JqZWN0X3JlcGxhY2Vf
a2V5KHBrZy0+ZmllbGRzLAogIAkJCSAgICB1Y2xfb2JqZWN0X2Zyb21pbnQodmFfYXJnKGFw
LCBpbnQ2NF90KSksCiEgCQkJICAgIGtleS0+bmFtZSwgc3RybGVuKGtleS0+bmFtZSksIGZh
bHNlKTsKICAJCQlicmVhazsKICAJCWNhc2UgVUNMX09CSkVDVDoKICAJCWNhc2UgVUNMX0FS
UkFZOgogIAkJCW8gPSB2YV9hcmcoYXAsIHVjbF9vYmplY3RfdCAqKTsKICAJCQl1Y2xfb2Jq
ZWN0X3JlcGxhY2Vfa2V5KHBrZy0+ZmllbGRzLCBvLAohIAkJCSAgICBrZXktPm5hbWUsIHN0
cmxlbihrZXktPm5hbWUpLCBmYWxzZSk7CiAgCQkJYnJlYWs7CiAgCQlkZWZhdWx0OgogIAkJ
CSh2b2lkKSB2YV9hcmcoYXAsIHZvaWQgKik7Ci0tLSAzNDAsMzY4IC0tLS0KICAJCQl9CiAg
CiAgCQkJaWYgKGRhdGEgPT0gTlVMTCkKISAJCQkJdWNsX29iamVjdF9kZWxldGVfa2V5KHBr
Zy0+ZmllbGRzLCBwa2dfa2V5c1thdHRyXS5uYW1lKTsKICAJCQllbHNlCiAgCQkJCXVjbF9v
YmplY3RfcmVwbGFjZV9rZXkocGtnLT5maWVsZHMsCiAgCQkJCSAgICB1Y2xfb2JqZWN0X2Zy
b21zdHJpbmdfY29tbW9uKGRhdGEsIHN0cmxlbihkYXRhKSwgMCksCiEgCQkJCSAgICBwa2df
a2V5c1thdHRyXS5uYW1lLCBzdHJsZW4ocGtnX2tleXNbYXR0cl0ubmFtZSksIGZhbHNlKTsK
ICAKICAJCQlmcmVlKGJ1Zik7CiAgCQkJYnJlYWs7CiAgCQljYXNlIFVDTF9CT09MRUFOOgog
IAkJCXVjbF9vYmplY3RfcmVwbGFjZV9rZXkocGtnLT5maWVsZHMsCiAgCQkJICAgIHVjbF9v
YmplY3RfZnJvbWJvb2woKGJvb2wpdmFfYXJnKGFwLCBpbnQpKSwKISAJCQkgICAgcGtnX2tl
eXNbYXR0cl0ubmFtZSwgc3RybGVuKHBrZ19rZXlzW2F0dHJdLm5hbWUpLCBmYWxzZSk7CiAg
CQkJYnJlYWs7CiAgCQljYXNlIFVDTF9JTlQ6CiAgCQkJdWNsX29iamVjdF9yZXBsYWNlX2tl
eShwa2ctPmZpZWxkcywKICAJCQkgICAgdWNsX29iamVjdF9mcm9taW50KHZhX2FyZyhhcCwg
aW50NjRfdCkpLAohIAkJCSAgICBwa2dfa2V5c1thdHRyXS5uYW1lLCBzdHJsZW4ocGtnX2tl
eXNbYXR0cl0ubmFtZSksIGZhbHNlKTsKICAJCQlicmVhazsKICAJCWNhc2UgVUNMX09CSkVD
VDoKICAJCWNhc2UgVUNMX0FSUkFZOgogIAkJCW8gPSB2YV9hcmcoYXAsIHVjbF9vYmplY3Rf
dCAqKTsKICAJCQl1Y2xfb2JqZWN0X3JlcGxhY2Vfa2V5KHBrZy0+ZmllbGRzLCBvLAohIAkJ
CSAgICBwa2dfa2V5c1thdHRyXS5uYW1lLCBzdHJsZW4ocGtnX2tleXNbYXR0cl0ubmFtZSks
IGZhbHNlKTsKICAJCQlicmVhazsKICAJCWRlZmF1bHQ6CiAgCQkJKHZvaWQpIHZhX2FyZyhh
cCwgdm9pZCAqKTsKKioqIHBrZy0xLjQuMC5wcmUtYWxwaGExNS9saWJwa2cvcGtnLmguaW4J
TW9uIFNlcCAxNSAxMzoxNzoxMCAyMDE0Ci0tLSBwa2ctMS40LjAucHJlLWFscGhhMTUub3Jp
Zy9saWJwa2cvcGtnLmguaW4JU3VuIFNlcCAxNCAxNToxMTo0MCAyMDE0CioqKioqKioqKioq
KioqKgoqKiogMjY2LDI3MiAqKioqCiAgCVBLR19DQVRFR09SSUVTLAogIAlQS0dfVU5JUVVF
SUQsCiAgCVBLR19PTERfRElHRVNULAohIAlQS0dfUkVQT19PUkRFUiwKICB9IHBrZ19hdHRy
OwogIAogIHR5cGVkZWYgZW51bSB7Ci0tLSAyNjYsMjcyIC0tLS0KICAJUEtHX0NBVEVHT1JJ
RVMsCiAgCVBLR19VTklRVUVJRCwKICAJUEtHX09MRF9ESUdFU1QsCiEgCVBLR19OVU1fRklF
TERTLCAJLyogZW5kIG9mIGZpZWxkcyAqLwogIH0gcGtnX2F0dHI7CiAgCiAgdHlwZWRlZiBl
bnVtIHsKKioqIHBrZy0xLjQuMC5wcmUtYWxwaGExNS9saWJwa2cvcGtnX2NoZWNrc3VtLmMJ
TW9uIFNlcCAxNSAxMzoxMzo1NCAyMDE0Ci0tLSBwa2ctMS40LjAucHJlLWFscGhhMTUub3Jp
Zy9saWJwa2cvcGtnX2NoZWNrc3VtLmMJU2F0IFNlcCAgNiAxOTowMTo0NiAyMDE0CioqKioq
KioqKioqKioqKgoqKiogMTI3LDEzMiAqKioqCi0tLSAxMjcsMTMzIC0tLS0KICBwa2dfY2hl
Y2tzdW1fZ2VuZXJhdGUoc3RydWN0IHBrZyAqcGtnLCBjaGFyICpkZXN0LCBzaXplX3QgZGVz
dGxlbiwKICAJcGtnX2NoZWNrc3VtX3R5cGVfdCB0eXBlKQogIHsKKyAJY29uc3QgY2hhciAq
a2V5OwogIAl1bnNpZ25lZCBjaGFyICpiZGlnZXN0OwogIAlzaXplX3QgYmxlbjsKICAJc3Ry
dWN0IHBrZ19jaGVja3N1bV9lbnRyeSAqZW50cmllcyA9IE5VTEw7CioqKioqKioqKioqKioq
KgoqKiogMTUwLDE2MyAqKioqCiAgCQlyZXR1cm4gKEVQS0dfRkFUQUwpOwogIAogIAlmb3Ig
KGkgPSAwOyByZWNvcGllc1tpXSAhPSAtMTsgaSsrKSB7CiEgCQlzdHJ1Y3QgcGtnX2tleV94
ICprZXkgPSBnZXRfcGtnX2tleV9ieV9lbnVtX3RhZyhyZWNvcGllc1tpXSk7CiEgCQlpZigg
IWtleSApewohIAkJCXBrZ19lbWl0X2Vycm9yKCJwa2dfY2hlY2tzdW1fZ2VuZXJhdGU6IG5v
IGtleSBmb3IgZW51bSB2YWx1ZSAnJWQnIiwgcmVjb3BpZXNbaV0pOwohIAkJfSBlbHNlIHsK
ISAJCQlpZiAoKG8gPSB1Y2xfb2JqZWN0X2ZpbmRfa2V5KHBrZy0+ZmllbGRzLCBrZXktPm5h
bWUpKSl7CiEgCQkJCXBrZ19jaGVja3N1bV9hZGRfZW50cnkoa2V5LT5uYW1lLCB1Y2xfb2Jq
ZWN0X3Rvc3RyaW5nKG8pLCAmZW50cmllcyk7CiEgCQkJfQohIAkJfQogIAl9CiAgCiAgCXdo
aWxlIChwa2dfb3B0aW9ucyhwa2csICZvcHRpb24pID09IEVQS0dfT0spIHsKLS0tIDE1MSwx
NTkgLS0tLQogIAkJcmV0dXJuIChFUEtHX0ZBVEFMKTsKICAKICAJZm9yIChpID0gMDsgcmVj
b3BpZXNbaV0gIT0gLTE7IGkrKykgewohIAkJa2V5ID0gcGtnX2tleXNbcmVjb3BpZXNbaV1d
Lm5hbWU7CiEgCQlpZiAoKG8gPSB1Y2xfb2JqZWN0X2ZpbmRfa2V5KHBrZy0+ZmllbGRzLCBr
ZXkpKSkKISAJCQlwa2dfY2hlY2tzdW1fYWRkX2VudHJ5KGtleSwgdWNsX29iamVjdF90b3N0
cmluZyhvKSwgJmVudHJpZXMpOwogIAl9CiAgCiAgCXdoaWxlIChwa2dfb3B0aW9ucyhwa2cs
ICZvcHRpb24pID09IEVQS0dfT0spIHsKKioqIHBrZy0xLjQuMC5wcmUtYWxwaGExNS9saWJw
a2cvcGtnX2NvbmZpZy5jCU1vbiBTZXAgMTUgMTM6MDk6NTcgMjAxNAotLS0gcGtnLTEuNC4w
LnByZS1hbHBoYTE1Lm9yaWcvbGlicGtnL3BrZ19jb25maWcuYwlTdW4gU2VwIDE0IDE1OjEx
OjQwIDIwMTQKKioqKioqKioqKioqKioqCioqKiA0MjQsNDMwICoqKioKICAJY29uc3QgY2hh
ciAqc2lnbmF0dXJlX3R5cGUgPSBOVUxMLCAqZmluZ2VycHJpbnRzID0gTlVMTDsKICAJY29u
c3QgY2hhciAqa2V5OwogIAljb25zdCBjaGFyICp0eXBlID0gTlVMTDsKLSAJaW50IHJlcG9f
b3JkZXIgPSAxMDA7CiAgCWludCB1c2VfaXB2eDsKICAKICAJcGtnX2RlYnVnKDEsICJQa2dD
b25maWc6IHBhcnNpbmcgcmVwb3NpdG9yeSBvYmplY3QgJXMiLCBybmFtZSk7Ci0tLSA0MjQs
NDI5IC0tLS0KKioqKioqKioqKioqKioqCioqKiA1MTMsNTI5ICoqKioKICAJCQl1c2VfaXB2
eCA9IHVjbF9vYmplY3RfdG9pbnQoY3VyKTsKICAJCQlpZiAodXNlX2lwdnggIT0gNCAmJiB1
c2VfaXB2eCAhPSA2KQogIAkJCQl1c2VfaXB2eCA9IDA7Ci0gCQl9IGVsc2UgaWYgKHN0cmNh
c2VjbXAoa2V5LCAicmVwb19vcmRlciIpID09IDApIHsKLSAJCSAgICBwa2dfZGVidWcoMSwg
InJlcG8gJXMgaGFzICdyZXBvX29yZGVyJyIsIHJuYW1lKTsKLSAJCQlpZiAoY3VyLT50eXBl
ICE9IFVDTF9JTlQpIHsKLSAJCQkJcGtnX2VtaXRfZXJyb3IoIkV4cGVjdGluZyBhbiBpbnRl
Z2VyIGZvciB0aGUgIgotIAkJCQkJIiclcycga2V5IG9mIHRoZSAnJXMnIHJlcG8iLAotIAkJ
CQkJa2V5LCBybmFtZSk7Ci0gCQkJCXJldHVybjsKLSAJCQl9Ci0gCQkJcmVwb19vcmRlciA9
IHVjbF9vYmplY3RfdG9pbnQoY3VyKTsKLSAJCQlpZiggcmVwb19vcmRlciA+PSAxMDAgKXsg
cmVwb19vcmRlciA9IDEwMDsgfQotIAkJCWlmKCByZXBvX29yZGVyIDwgMCApeyByZXBvX29y
ZGVyID0gMDsgfQogIAkJfQogIAl9CiAgCi0tLSA1MTIsNTE3IC0tLS0KKioqKioqKioqKioq
KioqCioqKiA1NTgsNTY0ICoqKioKICAJfQogIAogIAlyLT5lbmFibGUgPSBlbmFibGU7Ci0g
CXItPnJlcG9fb3JkZXIgPSByZXBvX29yZGVyOwogIAogIAlpZiAobWlycm9yX3R5cGUgIT0g
TlVMTCkgewogIAkJaWYgKHN0cmNhc2VjbXAobWlycm9yX3R5cGUsICJzcnYiKSA9PSAwKQot
LS0gNTQ2LDU1MSAtLS0tCioqKiBwa2ctMS40LjAucHJlLWFscGhhMTUvbGlicGtnL3BrZ19t
YW5pZmVzdC5jCU1vbiBTZXAgMTUgMTM6MDM6NDYgMjAxNAotLS0gcGtnLTEuNC4wLnByZS1h
bHBoYTE1Lm9yaWcvbGlicGtnL3BrZ19tYW5pZmVzdC5jCVN1biBTZXAgIDcgMjM6MjM6MjQg
MjAxNAoqKioqKioqKioqKioqKioKKioqIDk5LDEwNSAqKioqCiAgCXsgIm9wdGlvbl9kZXNj
cmlwdGlvbnMiLCBQS0dfT1BUSU9OX0RFU0NSSVBUSU9OUywgVUNMX09CSkVDVCwgcGtnX29i
an0sCiAgCXsgIm9yaWdpbiIsICAgICAgICAgICAgICBQS0dfT1JJR0lOLCAgICAgICAgICAg
ICAgVUNMX1NUUklORywgcGtnX3N0cmluZ30sCiAgCXsgInBhdGgiLCAgICAgICAgICAgICAg
ICBQS0dfUkVQT1BBVEgsICAgICAgICAgICAgVUNMX1NUUklORywgcGtnX3N0cmluZ30sCi0g
CXsgInJlcG9fb3JkZXIiLCAgICAgICAgICBQS0dfUkVQT19PUkRFUiwgICAgICAgICAgVUNM
X0lOVCwgICAgcGtnX2ludH0sCiAgCXsgInJlcG9wYXRoIiwgICAgICAgICAgICBQS0dfUkVQ
T1BBVEgsICAgICAgICAgICAgVUNMX1NUUklORywgcGtnX3N0cmluZ30sCiAgCXsgInBrZ3Np
emUiLCAgICAgICAgICAgICBQS0dfUEtHU0laRSwgICAgICAgICAgICAgVUNMX0lOVCwgICAg
cGtnX2ludH0sCiAgCXsgInByZWZpeCIsICAgICAgICAgICAgICBQS0dfUFJFRklYLCAgICAg
ICAgICAgICAgVUNMX1NUUklORywgcGtnX3N0cmluZ30sCi0tLSA5OSwxMDQgLS0tLQoqKioq
KioqKioqKioqKioKKioqIDg4Myw4ODggKioqKgotLS0gODgyLDg4OCAtLS0tCiAgCXVjbF9v
YmplY3RfdCAqbWFwLCAqc2VxLCAqc3VibWFwOwogIAl1Y2xfb2JqZWN0X3QgKnRvcCA9IHVj
bF9vYmplY3RfdHlwZWRfbmV3KFVDTF9PQkpFQ1QpOwogIAljb25zdCB1Y2xfb2JqZWN0X3Qg
Km87CisgCWNvbnN0IGNoYXIgKmtleTsKICAJaW50IHJlY29waWVzW10gPSB7CiAgCQlQS0df
TkFNRSwKICAJCVBLR19PUklHSU4sCioqKioqKioqKioqKioqKgoqKiogOTA0LDkxNyAqKioq
CiAgCiAgCXBrZ19kZWJ1Zyg0LCAiRW1pdHRpbmcgYmFzaWMgbWV0YWRhdGEiKTsKICAJZm9y
IChpID0gMDsgcmVjb3BpZXNbaV0gIT0gLTE7IGkrKykgewohIAkJc3RydWN0IHBrZ19rZXlf
eCAqa2V5ID0gZ2V0X3BrZ19rZXlfYnlfZW51bV90YWcoIHJlY29waWVzW2ldICk7CiEgCQlp
ZiggIWtleSApewohIAkJCXBrZ19lbWl0X2Vycm9yKCJwa2dfZW1pdF9vYmo6IGJhZCBlbnVt
IHZhbHVlICVkIiwgcmVjb3BpZXNbaV0gKTsKISAJCQljb250aW51ZTsKISAJCX0KISAJCWlm
ICgobyA9IHVjbF9vYmplY3RfZmluZF9rZXkocGtnLT5maWVsZHMsIGtleS0+bmFtZSkpKQog
IAkJCXVjbF9vYmplY3RfaW5zZXJ0X2tleSh0b3AsIHVjbF9vYmplY3RfcmVmKG8pLAohIAkJ
CSAgICBrZXktPm5hbWUsIHN0cmxlbihrZXktPm5hbWUpLCBmYWxzZSk7CiAgCX0KICAJaWYg
KGNvbW1lbnQpCiAgCQl1Y2xfb2JqZWN0X2luc2VydF9rZXkodG9wLCB1Y2xfb2JqZWN0X2Zy
b21zdHJpbmdfY29tbW9uKGNvbW1lbnQsIDAsCi0tLSA5MDQsOTEzIC0tLS0KICAKICAJcGtn
X2RlYnVnKDQsICJFbWl0dGluZyBiYXNpYyBtZXRhZGF0YSIpOwogIAlmb3IgKGkgPSAwOyBy
ZWNvcGllc1tpXSAhPSAtMTsgaSsrKSB7CiEgCQlrZXkgPSBwa2dfa2V5c1tyZWNvcGllc1tp
XV0ubmFtZTsKISAJCWlmICgobyA9IHVjbF9vYmplY3RfZmluZF9rZXkocGtnLT5maWVsZHMs
IGtleSkpKQogIAkJCXVjbF9vYmplY3RfaW5zZXJ0X2tleSh0b3AsIHVjbF9vYmplY3RfcmVm
KG8pLAohIAkJCSAgICBrZXksIHN0cmxlbihrZXkpLCBmYWxzZSk7CiAgCX0KICAJaWYgKGNv
bW1lbnQpCiAgCQl1Y2xfb2JqZWN0X2luc2VydF9rZXkodG9wLCB1Y2xfb2JqZWN0X2Zyb21z
dHJpbmdfY29tbW9uKGNvbW1lbnQsIDAsCioqKioqKioqKioqKioqKgoqKiogMTA1NCwxMDYw
ICoqKioKICAJCW1hcCA9IHVjbF9vYmplY3RfdHlwZWRfbmV3KFVDTF9PQkpFQ1QpOwogIAkJ
LyogQWRkIGFubm90YXRpb25zIGV4Y2VwdCBmb3IgaW50ZXJuYWwgb25lcy4gKi8KICAJCXdo
aWxlICgobyA9IHVjbF9pdGVyYXRlX29iamVjdChhbm5vdGF0aW9ucywgJml0LCB0cnVlKSkp
IHsKLSAJCQljb25zdCBjaGFyICprZXk7CiAgCQkJaWYgKChrZXkgPSB1Y2xfb2JqZWN0X2tl
eWwobywgJmtleV9sZW4pKSA9PSBOVUxMKQogIAkJCQljb250aW51ZTsKICAJCQkvKiBJbnRl
cm5hbCBhbm5vdGF0aW9ucy4gKi8KLS0tIDEwNTAsMTA1NSAtLS0tCioqKiBwa2ctMS40LjAu
cHJlLWFscGhhMTUvbGlicGtnL3BrZ19wcmludGYuYwlNb24gU2VwIDE1IDEyOjQ4OjE1IDIw
MTQKLS0tIHBrZy0xLjQuMC5wcmUtYWxwaGExNS5vcmlnL2xpYnBrZy9wa2dfcHJpbnRmLmMJ
RnJpIFNlcCAxMiAxNjozMjo0MyAyMDE0CioqKioqKioqKioqKioqKgoqKiogMTExLDExNyAq
KioqCiAgICogVwogICAqIFgKICAgKiBZCiEgICogWiAgcGtnICAgICAgICAgIHJlcG9fb3Jk
ZXIKICAgKgogICAqIGEgIHBrZyAgICAgICAgICBhdXRvcmVtb3ZlIGZsYWcKICAgKgotLS0g
MTExLDExNyAtLS0tCiAgICogVwogICAqIFgKICAgKiBZCiEgICogWgogICAqCiAgICogYSAg
cGtnICAgICAgICAgIGF1dG9yZW1vdmUgZmxhZwogICAqCioqKioqKioqKioqKioqKgoqKiog
Nzg2LDgwMCAqKioqCiAgCQlQUF9BTEwsCiAgCQkmZm9ybWF0X2hvbWVfdXJsLAogIAl9LAot
IAlbUFBfUEtHX1JFUE9fT1JERVJdID0KLSAJewotIAkJJ1onLAotIAkJJ1wwJywKLSAJCWZh
bHNlLAotIAkJdHJ1ZSwKLSAJCVBQX0FMTCwKLSAJCSZmb3JtYXRfcmVwb19vcmRlciwKLSAJ
fSwKICAJW1BQX0xJVEVSQUxfUEVSQ0VOVF0gPQogIAl7CiAgCQknJScsCi0tLSA3ODYsNzkx
IC0tLS0KKioqKioqKioqKioqKioqCioqKiAxODg0LDE5MDMgKioqKgogIAlyZXR1cm4gKHN0
cmluZ192YWwoc2J1ZiwgdXJsLCBwKSk7CiAgfQogIAotIAotIC8qCi0gICogJVogLS0gUmVw
byBPcmRlci4gaW50ZWdlcgotICAqLwotIHN0cnVjdCBzYnVmICoKLSBmb3JtYXRfcmVwb19v
cmRlcihzdHJ1Y3Qgc2J1ZiAqc2J1ZiwgY29uc3Qgdm9pZCAqZGF0YSwgc3RydWN0IHBlcmNl
bnRfZXNjICpwKQotIHsKLSAJY29uc3Qgc3RydWN0IHBrZwkqcGtnID0gZGF0YTsKLSAJaW50
NjRfdAkJCSByZXBvX29yZGVyOwotIAotIAlwa2dfZ2V0KHBrZywgUEtHX1JFUE9fT1JERVIs
ICZyZXBvX29yZGVyKTsKLSAJcmV0dXJuIChpbnRfdmFsKHNidWYsIHJlcG9fb3JkZXIsIHAp
KTsKLSB9Ci0gCiAgLyoKICAgKiAlJSAtLSBPdXRwdXQgYSBsaXRlcmFsICclJyBjaGFyYWN0
ZXIKICAgKi8KLS0tIDE4NzUsMTg4MCAtLS0tCioqKiBwa2ctMS40LjAucHJlLWFscGhhMTUv
bGlicGtnL3BrZ2RiLmMJTW9uIFNlcCAxNSAxMjo0MjowOSAyMDE0Ci0tLSBwa2ctMS40LjAu
cHJlLWFscGhhMTUub3JpZy9saWJwa2cvcGtnZGIuYwlXZWQgU2VwIDEwIDIzOjE3OjUyIDIw
MTQKKioqKioqKioqKioqKioqCioqKiAxMDY5LDEwNzUgKioqKgogIAkJY29uc3QgY2hhciBz
cWxbXSA9ICJCRUdJTiBJTU1FRElBVEUgVFJBTlNBQ1RJT04iOwogIAkJCiAgCQlwc3FsID0g
c3FsOwohIAkJcGtnX2RlYnVnKDQsICJQa2dkYjogcGtnZGJfdHJhbnNhY3Rpb25fYmVnaW4g
cnVubmluZyAnJXMnIiwgc3FsKTsKICAJCXJldCA9IHNxbGl0ZTNfcHJlcGFyZV92MihzcWxp
dGUsIHNxbCwgc3RybGVuKHNxbCkgKyAxLAogIAkJCQkJICZzdG10LCBOVUxMKTsKICAJfSBl
bHNlIHsKLS0tIDEwNjksMTA3NSAtLS0tCiAgCQljb25zdCBjaGFyIHNxbFtdID0gIkJFR0lO
IElNTUVESUFURSBUUkFOU0FDVElPTiI7CiAgCQkKICAJCXBzcWwgPSBzcWw7CiEgCQlwa2df
ZGVidWcoNCwgIlBrZ2RiOiBydW5uaW5nICclcyciLCBzcWwpOwogIAkJcmV0ID0gc3FsaXRl
M19wcmVwYXJlX3YyKHNxbGl0ZSwgc3FsLCBzdHJsZW4oc3FsKSArIDEsCiAgCQkJCQkgJnN0
bXQsIE5VTEwpOwogIAl9IGVsc2UgewoqKioqKioqKioqKioqKioKKioqIDEwNzgsMTA4NCAq
KioqCiAgCQlzdHJsY2F0KHNxbCwgc2F2ZXBvaW50LCBzaXplb2Yoc3FsKSk7CiAgCiAgCQlw
c3FsID0gc3FsOwohIAkJcGtnX2RlYnVnKDQsICJQa2dkYjogcGtnZGJfdHJhbnNhY3Rpb25f
YmVnaW4gcnVubmluZyAnJXMnIiwgc3FsKTsKICAJCXJldCA9IHNxbGl0ZTNfcHJlcGFyZV92
MihzcWxpdGUsIHNxbCwgc3RybGVuKHNxbCkgKyAxLAogIAkJCQkJICZzdG10LCBOVUxMKTsK
ICAJfQotLS0gMTA3OCwxMDg0IC0tLS0KICAJCXN0cmxjYXQoc3FsLCBzYXZlcG9pbnQsIHNp
emVvZihzcWwpKTsKICAKICAJCXBzcWwgPSBzcWw7CiEgCQlwa2dfZGVidWcoNCwgIlBrZ2Ri
OiBydW5uaW5nICclcyciLCBzcWwpOwogIAkJcmV0ID0gc3FsaXRlM19wcmVwYXJlX3YyKHNx
bGl0ZSwgc3FsLCBzdHJsZW4oc3FsKSArIDEsCiAgCQkJCQkgJnN0bXQsIE5VTEwpOwogIAl9
CioqKioqKioqKioqKioqKgoqKiogMTEwOCwxMTE0ICoqKioKICAJCWNvbnN0IGNoYXIgc3Fs
W10gPSAiQ09NTUlUIFRSQU5TQUNUSU9OIjsKICAJCXBzcWwgPSBzcWw7CiAgCiEgCQlwa2df
ZGVidWcoNCwgIlBrZ2RiOiBwa2dkYl90cmFuc2FjdGlvbl9jb21taXQgcnVubmluZyAnJXMn
Iiwgc3FsKTsKICAJCXJldCA9IHNxbGl0ZTNfcHJlcGFyZV92MihzcWxpdGUsIHNxbCwgc3Ry
bGVuKHNxbCkgKyAxLAogIAkJCQkJICZzdG10LCBOVUxMKTsKICAJfSBlbHNlIHsKLS0tIDEx
MDgsMTExNCAtLS0tCiAgCQljb25zdCBjaGFyIHNxbFtdID0gIkNPTU1JVCBUUkFOU0FDVElP
TiI7CiAgCQlwc3FsID0gc3FsOwogIAohIAkJcGtnX2RlYnVnKDQsICJQa2dkYjogcnVubmlu
ZyAnJXMnIiwgc3FsKTsKICAJCXJldCA9IHNxbGl0ZTNfcHJlcGFyZV92MihzcWxpdGUsIHNx
bCwgc3RybGVuKHNxbCkgKyAxLAogIAkJCQkJICZzdG10LCBOVUxMKTsKICAJfSBlbHNlIHsK
KioqKioqKioqKioqKioqCioqKiAxMTE4LDExMjQgKioqKgogIAogIAkJcHNxbCA9IHNxbDsK
ICAKISAJCXBrZ19kZWJ1Zyg0LCAiUGtnZGI6IHBrZ2RiX3RyYW5zYWN0aW9uX2NvbW1pdCBy
dW5uaW5nICclcyciLCBzcWwpOwogIAkJcmV0ID0gc3FsaXRlM19wcmVwYXJlX3YyKHNxbGl0
ZSwgc3FsLCBzdHJsZW4oc3FsKSArIDEsCiAgCQkJCQkgJnN0bXQsIE5VTEwpOwogIAl9Ci0t
LSAxMTE4LDExMjQgLS0tLQogIAogIAkJcHNxbCA9IHNxbDsKICAKISAJCXBrZ19kZWJ1Zyg0
LCAiUGtnZGI6IHJ1bm5pbmcgJyVzJyIsIHNxbCk7CiAgCQlyZXQgPSBzcWxpdGUzX3ByZXBh
cmVfdjIoc3FsaXRlLCBzcWwsIHN0cmxlbihzcWwpICsgMSwKICAJCQkJCSAmc3RtdCwgTlVM
TCk7CiAgCX0KKioqKioqKioqKioqKioqCioqKiAxMTQ4LDExNTQgKioqKgogIAkJY29uc3Qg
Y2hhciBzcWxbXSA9ICJST0xMQkFDSyBUUkFOU0FDVElPTiI7CiAgCiAgCQlwc3FsID0gc3Fs
OwohIAkJcGtnX2RlYnVnKDQsICJQa2dkYjogcGtnZGJfdHJhbnNhY3Rpb25fcm9sbGJhY2sg
cnVubmluZyAnJXMnIiwgc3FsKTsKICAJCXJldCA9IHNxbGl0ZTNfcHJlcGFyZV92MihzcWxp
dGUsIHNxbCwgc3RybGVuKHNxbCkgKyAxLAogIAkJCQkJICZzdG10LCBOVUxMKTsKICAJfSBl
bHNlIHsKLS0tIDExNDgsMTE1NCAtLS0tCiAgCQljb25zdCBjaGFyIHNxbFtdID0gIlJPTExC
QUNLIFRSQU5TQUNUSU9OIjsKICAKICAJCXBzcWwgPSBzcWw7CiEgCQlwa2dfZGVidWcoNCwg
IlBrZ2RiOiBydW5uaW5nICclcyciLCBzcWwpOwogIAkJcmV0ID0gc3FsaXRlM19wcmVwYXJl
X3YyKHNxbGl0ZSwgc3FsLCBzdHJsZW4oc3FsKSArIDEsCiAgCQkJCQkgJnN0bXQsIE5VTEwp
OwogIAl9IGVsc2UgewoqKioqKioqKioqKioqKioKKioqIDExNTcsMTE2MyAqKioqCiAgCQlz
dHJsY2F0KHNxbCwgc2F2ZXBvaW50LCBzaXplb2Yoc3FsKSk7CiAgCiAgCQlwc3FsID0gc3Fs
OwohIAkJcGtnX2RlYnVnKDQsICJQa2dkYjogcGtnZGJfdHJhbnNhY3Rpb25fcm9sbGJhY2sg
cnVubmluZyAnJXMnIiwgc3FsKTsKICAJCXJldCA9IHNxbGl0ZTNfcHJlcGFyZV92MihzcWxp
dGUsIHNxbCwgc3RybGVuKHNxbCkgKyAxLAogIAkJCQkJICZzdG10LCBOVUxMKTsKICAJfQot
LS0gMTE1NywxMTYzIC0tLS0KICAJCXN0cmxjYXQoc3FsLCBzYXZlcG9pbnQsIHNpemVvZihz
cWwpKTsKICAKICAJCXBzcWwgPSBzcWw7CiEgCQlwa2dfZGVidWcoNCwgIlBrZ2RiOiBydW5u
aW5nICclcyciLCBzcWwpOwogIAkJcmV0ID0gc3FsaXRlM19wcmVwYXJlX3YyKHNxbGl0ZSwg
c3FsLCBzdHJsZW4oc3FsKSArIDEsCiAgCQkJCQkgJnN0bXQsIE5VTEwpOwogIAl9CioqKioq
KioqKioqKioqKgoqKiogMTk3OSwxOTg1ICoqKioKICAKICAJCWZvciAoaSA9IDA7IGkgPCAy
OyBpKyspIHsKICAJCQkvKiBDbGVhbiBvdXQgb2xkIHNobGlicyBmaXJzdCAqLwohIAkJCXBr
Z19kZWJ1Zyg0LCAiUGtnZGI6IHBrZ2RiX3JlYW5hbHlzZV9zaGxpYnMgcnVubmluZyAnJXMn
Iiwgc3FsW2ldKTsKICAJCQlpZiAoc3FsaXRlM19wcmVwYXJlX3YyKGRiLT5zcWxpdGUsIHNx
bFtpXSwgLTEsCiAgCQkJCQkgICAgICAgJnN0bXRfZGVsLCBOVUxMKQogIAkJCSAgICAhPSBT
UUxJVEVfT0spIHsKLS0tIDE5NzksMTk4NSAtLS0tCiAgCiAgCQlmb3IgKGkgPSAwOyBpIDwg
MjsgaSsrKSB7CiAgCQkJLyogQ2xlYW4gb3V0IG9sZCBzaGxpYnMgZmlyc3QgKi8KISAJCQlw
a2dfZGVidWcoNCwgIlBrZ2RiOiBydW5uaW5nICclcyciLCBzcWxbaV0pOwogIAkJCWlmIChz
cWxpdGUzX3ByZXBhcmVfdjIoZGItPnNxbGl0ZSwgc3FsW2ldLCAtMSwKICAJCQkJCSAgICAg
ICAmc3RtdF9kZWwsIE5VTEwpCiAgCQkJICAgICE9IFNRTElURV9PSykgewoqKioqKioqKioq
KioqKioKKioqIDIyMDEsMjIwNyAqKioqCiAgCiAgCWFzc2VydChkYiAhPSBOVUxMKTsKICAK
ISAJcGtnX2RlYnVnKDQsICJQa2dkYjogcGtnZGJfdW5yZWdpc3Rlcl9wa2cgcnVubmluZyAn
JXMnIiwgc3FsKTsKICAJaWYgKHNxbGl0ZTNfcHJlcGFyZV92MihkYi0+c3FsaXRlLCBzcWws
IC0xLCAmc3RtdF9kZWwsIE5VTEwpCiAgCSAgICAhPSBTUUxJVEVfT0spewogIAkJRVJST1Jf
U1FMSVRFKGRiLT5zcWxpdGUsIHNxbCk7Ci0tLSAyMjAxLDIyMDcgLS0tLQogIAogIAlhc3Nl
cnQoZGIgIT0gTlVMTCk7CiAgCiEgCXBrZ19kZWJ1Zyg0LCAiUGtnZGI6IHJ1bm5pbmcgJyVz
JyIsIHNxbCk7CiAgCWlmIChzcWxpdGUzX3ByZXBhcmVfdjIoZGItPnNxbGl0ZSwgc3FsLCAt
MSwgJnN0bXRfZGVsLCBOVUxMKQogIAkgICAgIT0gU1FMSVRFX09LKXsKICAJCUVSUk9SX1NR
TElURShkYi0+c3FsaXRlLCBzcWwpOwoqKioqKioqKioqKioqKioKKioqIDIyNDcsMjI1MyAq
KioqCiAgCQlzcWxfdG9fZXhlYyA9IHNxbDsKICAJfQogIAohIAlwa2dfZGVidWcoNCwgIlBr
Z2RiOiBzcWxfZXhlYyBleGVjdXRpbmcgJyVzJyIsIHNxbF90b19leGVjKTsKICAJaWYgKHNx
bGl0ZTNfZXhlYyhzLCBzcWxfdG9fZXhlYywgTlVMTCwgTlVMTCwgJmVycm1zZykgIT0gU1FM
SVRFX09LKSB7CiAgCQlFUlJPUl9TUUxJVEUocywgc3FsX3RvX2V4ZWMpOwogIAkJc3FsaXRl
M19mcmVlKGVycm1zZyk7Ci0tLSAyMjQ3LDIyNTMgLS0tLQogIAkJc3FsX3RvX2V4ZWMgPSBz
cWw7CiAgCX0KICAKISAJcGtnX2RlYnVnKDQsICJQa2dkYjogZXhlY3V0aW5nICclcyciLCBz
cWxfdG9fZXhlYyk7CiAgCWlmIChzcWxpdGUzX2V4ZWMocywgc3FsX3RvX2V4ZWMsIE5VTEws
IE5VTEwsICZlcnJtc2cpICE9IFNRTElURV9PSykgewogIAkJRVJST1JfU1FMSVRFKHMsIHNx
bF90b19leGVjKTsKICAJCXNxbGl0ZTNfZnJlZShlcnJtc2cpOwoqKioqKioqKioqKioqKioK
KioqIDIyNzEsMjI3NyAqKioqCiAgCiAgCWFzc2VydChzICE9IE5VTEwgJiYgc3FsICE9IE5V
TEwpOwogIAohIAlwa2dfZGVidWcoNCwgIlBrZ2RiOiBnZXRfcHJhZ21hIHJ1bm5pbmcgJyVz
JyIsIHNxbCk7CiAgCWlmIChzcWxpdGUzX3ByZXBhcmVfdjIocywgc3FsLCAtMSwgJnN0bXQs
IE5VTEwpICE9IFNRTElURV9PSykgewogIAkJaWYgKCFzaWxlbmNlKQogIAkJCUVSUk9SX1NR
TElURShzLCBzcWwpOwotLS0gMjI3MSwyMjc3IC0tLS0KICAKICAJYXNzZXJ0KHMgIT0gTlVM
TCAmJiBzcWwgIT0gTlVMTCk7CiAgCiEgCXBrZ19kZWJ1Zyg0LCAiUGtnZGI6IHJ1bm5pbmcg
JyVzJyIsIHNxbCk7CiAgCWlmIChzcWxpdGUzX3ByZXBhcmVfdjIocywgc3FsLCAtMSwgJnN0
bXQsIE5VTEwpICE9IFNRTElURV9PSykgewogIAkJaWYgKCFzaWxlbmNlKQogIAkJCUVSUk9S
X1NRTElURShzLCBzcWwpOwoqKioqKioqKioqKioqKioKKioqIDIzMDMsMjMwOSAqKioqCiAg
CiAgCWFzc2VydChzICE9IE5VTEwgJiYgc3FsICE9IE5VTEwpOwogIAohIAlwa2dfZGVidWco
NCwgIlBrZ2RiOiBnZXRfc3FsX3N0cmluZyBydW5uaW5nICclcyciLCBzcWwpOwogIAlpZiAo
c3FsaXRlM19wcmVwYXJlX3YyKHMsIHNxbCwgLTEsICZzdG10LCBOVUxMKSAhPSBTUUxJVEVf
T0spIHsKICAJCUVSUk9SX1NRTElURShzLCBzcWwpOwogIAkJcmV0dXJuIChFUEtHX09LKTsK
LS0tIDIzMDMsMjMwOSAtLS0tCiAgCiAgCWFzc2VydChzICE9IE5VTEwgJiYgc3FsICE9IE5V
TEwpOwogIAohIAlwa2dfZGVidWcoNCwgIlBrZ2RiOiBydW5uaW5nICclcyciLCBzcWwpOwog
IAlpZiAoc3FsaXRlM19wcmVwYXJlX3YyKHMsIHNxbCwgLTEsICZzdG10LCBOVUxMKSAhPSBT
UUxJVEVfT0spIHsKICAJCUVSUk9SX1NRTElURShzLCBzcWwpOwogIAkJcmV0dXJuIChFUEtH
X09LKTsKKioqKioqKioqKioqKioqCioqKiAyMzgyLDIzODggKioqKgogIAkJCSJwYXRoIFRF
WFQgVU5JUVVFKTsiCiAgCQkpOwogIAohIAlwa2dfZGVidWcoNCwgIlBrZ2RiOiBwa2dkYl9p
bnRlZ3JpdHlfYXBwZW5kIHJ1bm5pbmcgJyVzJyIsIHNxbCk7CiAgCWlmIChzcWxpdGUzX3By
ZXBhcmVfdjIoZGItPnNxbGl0ZSwgc3FsLCAtMSwgJnN0bXQsIE5VTEwpCiAgCSAgICAhPSBT
UUxJVEVfT0spIHsKICAJCUVSUk9SX1NRTElURShkYi0+c3FsaXRlLCBzcWwpOwotLS0gMjM4
MiwyMzg4IC0tLS0KICAJCQkicGF0aCBURVhUIFVOSVFVRSk7IgogIAkJKTsKICAKISAJcGtn
X2RlYnVnKDQsICJQa2dkYjogcnVubmluZyAnJXMnIiwgc3FsKTsKICAJaWYgKHNxbGl0ZTNf
cHJlcGFyZV92MihkYi0+c3FsaXRlLCBzcWwsIC0xLCAmc3RtdCwgTlVMTCkKICAJICAgICE9
IFNRTElURV9PSykgewogIAkJRVJST1JfU1FMSVRFKGRiLT5zcWxpdGUsIHNxbCk7CioqKioq
KioqKioqKioqKgoqKiogMjM5MSwyMzk3ICoqKioKICAKICAJcGtnX2dldChwLCBQS0dfVU5J
UVVFSUQsICZwdWlkKTsKICAKISAJcGtnX2RlYnVnKDQsICJQa2dkYjogcGtnZGJfaW50ZWdy
aXR5X2FwcGVuZCB0ZXN0IGNvbmZsaWN0cyBmb3IgJXMiLCBwdWlkKTsKICAJd2hpbGUgKHBr
Z19maWxlcyhwLCAmZmlsZSkgPT0gRVBLR19PSykgewogIAkJY29uc3QgY2hhcgkqdWlkOwog
IAkJY29uc3QgY2hhcgkqcGtnX3BhdGggPSBwa2dfZmlsZV9wYXRoKGZpbGUpOwotLS0gMjM5
MSwyMzk3IC0tLS0KICAKICAJcGtnX2dldChwLCBQS0dfVU5JUVVFSUQsICZwdWlkKTsKICAK
ISAJcGtnX2RlYnVnKDQsICJQa2dkYjogdGVzdCBjb25mbGljdHMgZm9yICVzIiwgcHVpZCk7
CiAgCXdoaWxlIChwa2dfZmlsZXMocCwgJmZpbGUpID09IEVQS0dfT0spIHsKICAJCWNvbnN0
IGNoYXIJKnVpZDsKICAJCWNvbnN0IGNoYXIJKnBrZ19wYXRoID0gcGtnX2ZpbGVfcGF0aChm
aWxlKTsKKioqKioqKioqKioqKioqCioqKiAyNDAzLDI0MDkgKioqKgogIAogIAkJaWYgKHNx
bGl0ZTNfc3RlcChzdG10KSAhPSBTUUxJVEVfRE9ORSkgewogIAohIAkJCXBrZ19kZWJ1Zyg0
LCAiUGtnZGI6IHBrZ2RiX2ludGVncml0eV9hcHBlbmQgcnVubmluZyAnJXMnIiwgc3FsX2Nv
bmZsaWN0cyk7CiAgCQkJaWYgKHNxbGl0ZTNfcHJlcGFyZV92MihkYi0+c3FsaXRlLCBzcWxf
Y29uZmxpY3RzLAogIAkJCSAgICAtMSwgJnN0bXRfY29uZmxpY3RzLCBOVUxMKSAhPSBTUUxJ
VEVfT0spIHsKICAJCQkJRVJST1JfU1FMSVRFKGRiLT5zcWxpdGUsIHNxbF9jb25mbGljdHMp
OwotLS0gMjQwMywyNDA5IC0tLS0KICAKICAJCWlmIChzcWxpdGUzX3N0ZXAoc3RtdCkgIT0g
U1FMSVRFX0RPTkUpIHsKICAKISAJCQlwa2dfZGVidWcoNCwgIlBrZ2RiOiBydW5uaW5nICcl
cyciLCBzcWxfY29uZmxpY3RzKTsKICAJCQlpZiAoc3FsaXRlM19wcmVwYXJlX3YyKGRiLT5z
cWxpdGUsIHNxbF9jb25mbGljdHMsCiAgCQkJICAgIC0xLCAmc3RtdF9jb25mbGljdHMsIE5V
TEwpICE9IFNRTElURV9PSykgewogIAkJCQlFUlJPUl9TUUxJVEUoZGItPnNxbGl0ZSwgc3Fs
X2NvbmZsaWN0cyk7CioqKioqKioqKioqKioqKgoqKiogMjQ3NCwyNDgwICoqKioKICAJICog
U2VsZWN0IHBhdGhzIHRoYXQgYXJlIGJvdGggaW4gaW50ZWdyaXR5Y2hlY2sgYW5kIGxvY2Fs
IHRhYmxlIGJ1dCB0aGVpcgogIAkgKiBVSURzIGFyZSBkaWZmZXJlbnQKICAJICovCiEgCXBr
Z19kZWJ1Zyg0LCAiUGtnZGI6IHBrZ2RiX2ludGVncml0eV9hcHBlbmQgcnVubmluZyAnJXMn
Iiwgc3FsX2ludGVncml0eV9wcmVwYXJlKTsKICAJaWYgKHNxbGl0ZTNfcHJlcGFyZV92Mihk
Yi0+c3FsaXRlLAogIAkJc3FsX2ludGVncml0eV9wcmVwYXJlLAogIAkJLTEsICZzdG10LCBO
VUxMKSAhPSBTUUxJVEVfT0spIHsKLS0tIDI0NzQsMjQ4MCAtLS0tCiAgCSAqIFNlbGVjdCBw
YXRocyB0aGF0IGFyZSBib3RoIGluIGludGVncml0eWNoZWNrIGFuZCBsb2NhbCB0YWJsZSBi
dXQgdGhlaXIKICAJICogVUlEcyBhcmUgZGlmZmVyZW50CiAgCSAqLwohIAlwa2dfZGVidWco
NCwgIlBrZ2RiOiBydW5uaW5nICclcyciLCBzcWxfaW50ZWdyaXR5X3ByZXBhcmUpOwogIAlp
ZiAoc3FsaXRlM19wcmVwYXJlX3YyKGRiLT5zcWxpdGUsCiAgCQlzcWxfaW50ZWdyaXR5X3By
ZXBhcmUsCiAgCQktMSwgJnN0bXQsIE5VTEwpICE9IFNRTElURV9PSykgewoqKioqKioqKioq
KioqKioKKioqIDI0OTUsMjUwMSAqKioqCiAgCQkgKiBDb25mbGljdCBmb3VuZCBvbiBwYXRo
LCBzbyBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIGxvY2FsCiAgCQkgKiBwYWNrYWdlCiAgCQkg
Ki8KISAJCXBrZ19kZWJ1Zyg0LCAiUGtnZGI6IHBrZ2RiX2ludGVncml0eV9hcHBlbmQgcnVu
bmluZyAnJXMnIiwgc3FsX2xvY2FsX2NvbmZsaWN0KTsKICAJCXJldCA9IHNxbGl0ZTNfcHJl
cGFyZV92MihkYi0+c3FsaXRlLCBzcWxfbG9jYWxfY29uZmxpY3QsIC0xLAogIAkJICAgICZz
dG10X2NvbmZsaWN0cywgTlVMTCk7CiAgCQlpZiAocmV0ICE9IFNRTElURV9PSykgewotLS0g
MjQ5NSwyNTAxIC0tLS0KICAJCSAqIENvbmZsaWN0IGZvdW5kIG9uIHBhdGgsIHNvIGZpbmQg
dGhlIGNvcnJlc3BvbmRpbmcgbG9jYWwKICAJCSAqIHBhY2thZ2UKICAJCSAqLwohIAkJcGtn
X2RlYnVnKDQsICJQa2dkYjogcnVubmluZyAnJXMnIiwgc3FsX2xvY2FsX2NvbmZsaWN0KTsK
ICAJCXJldCA9IHNxbGl0ZTNfcHJlcGFyZV92MihkYi0+c3FsaXRlLCBzcWxfbG9jYWxfY29u
ZmxpY3QsIC0xLAogIAkJICAgICZzdG10X2NvbmZsaWN0cywgTlVMTCk7CiAgCQlpZiAocmV0
ICE9IFNRTElURV9PSykgewoqKioqKioqKioqKioqKioKKioqIDI1MjMsMjUyOSAqKioqCiAg
CQkvKgogIAkJICogTm93IG1hdGNoIGxvY2FsIGFuZCByZW1vdGUgY29uZmxpY3RpbmcgcGFj
a2FnZXMKICAJCSAqLwohIAkJcGtnX2RlYnVnKDQsICJQa2dkYjogcGtnZGJfaW50ZWdyaXR5
X2FwcGVuZCBydW5uaW5nICclcyciLCBzcWxfY29uZmxpY3RzKTsKICAJCXJldCA9IHNxbGl0
ZTNfcHJlcGFyZV92MihkYi0+c3FsaXRlLCBzcWxfY29uZmxpY3RzLCAtMSwKICAJCSAgICAm
c3RtdF9jb25mbGljdHMsIE5VTEwpOwogIAkJaWYgKHJldCAhPSBTUUxJVEVfT0spIHsKLS0t
IDI1MjMsMjUyOSAtLS0tCiAgCQkvKgogIAkJICogTm93IG1hdGNoIGxvY2FsIGFuZCByZW1v
dGUgY29uZmxpY3RpbmcgcGFja2FnZXMKICAJCSAqLwohIAkJcGtnX2RlYnVnKDQsICJQa2dk
YjogcnVubmluZyAnJXMnIiwgc3FsX2NvbmZsaWN0cyk7CiAgCQlyZXQgPSBzcWxpdGUzX3By
ZXBhcmVfdjIoZGItPnNxbGl0ZSwgc3FsX2NvbmZsaWN0cywgLTEsCiAgCQkgICAgJnN0bXRf
Y29uZmxpY3RzLCBOVUxMKTsKICAJCWlmIChyZXQgIT0gU1FMSVRFX09LKSB7CioqKioqKioq
KioqKioqKgoqKiogMjU3OSwyNTg1ICoqKioKICAJCSJBTkQgaS51aWQgPSA/MSBBTkQgIgog
IAkJImkudWlkICE9IHAubmFtZSB8fCAnficgfHwgcC5vcmlnaW4iOwogIAohIAlwa2dfZGVi
dWcoNCwgIlBrZ2RiOiBwa2dkYl9pbnRlZ3JpdHlfY29uZmxpY3RfbG9jYWwgcnVubmluZyAn
JXMnIiwgc3FsX2NvbmZsaWN0cyk7CiAgCXJldCA9IHNxbGl0ZTNfcHJlcGFyZV92MihkYi0+
c3FsaXRlLCBzcWxfY29uZmxpY3RzLCAtMSwgJnN0bXQsIE5VTEwpOwogIAlpZiAocmV0ICE9
IFNRTElURV9PSykgewogIAkJRVJST1JfU1FMSVRFKGRiLT5zcWxpdGUsIHNxbF9jb25mbGlj
dHMpOwotLS0gMjU3OSwyNTg1IC0tLS0KICAJCSJBTkQgaS51aWQgPSA/MSBBTkQgIgogIAkJ
ImkudWlkICE9IHAubmFtZSB8fCAnficgfHwgcC5vcmlnaW4iOwogIAohIAlwa2dfZGVidWco
NCwgIlBrZ2RiOiBydW5uaW5nICclcyciLCBzcWxfY29uZmxpY3RzKTsKICAJcmV0ID0gc3Fs
aXRlM19wcmVwYXJlX3YyKGRiLT5zcWxpdGUsIHNxbF9jb25mbGljdHMsIC0xLCAmc3RtdCwg
TlVMTCk7CiAgCWlmIChyZXQgIT0gU1FMSVRFX09LKSB7CiAgCQlFUlJPUl9TUUxJVEUoZGIt
PnNxbGl0ZSwgc3FsX2NvbmZsaWN0cyk7CioqKioqKioqKioqKioqKgoqKiogMjYxOSwyNjI1
ICoqKioKICAJfTsKICAKICAJd2hpbGUgKChhdHRyID0gdmFfYXJnKGFwLCBpbnQpKSA+IDAp
IHsKISAJCXBrZ19kZWJ1Zyg0LCAiUGtnZGI6IHBrZ2RiX3ZzZXQgcnVubmluZyAnJXMnIiwg
c3FsW2F0dHJdKTsKICAJCWlmIChzcWxpdGUzX3ByZXBhcmVfdjIoZGItPnNxbGl0ZSwgc3Fs
W2F0dHJdLCAtMSwgJnN0bXQsIE5VTEwpCiAgCQkgICAgIT0gU1FMSVRFX09LKSB7CiAgCQkJ
RVJST1JfU1FMSVRFKGRiLT5zcWxpdGUsIHNxbFthdHRyXSk7Ci0tLSAyNjE5LDI2MjUgLS0t
LQogIAl9OwogIAogIAl3aGlsZSAoKGF0dHIgPSB2YV9hcmcoYXAsIGludCkpID4gMCkgewoh
IAkJcGtnX2RlYnVnKDQsICJQa2dkYjogcnVubmluZyAnJXMnIiwgc3FsW2F0dHJdKTsKICAJ
CWlmIChzcWxpdGUzX3ByZXBhcmVfdjIoZGItPnNxbGl0ZSwgc3FsW2F0dHJdLCAtMSwgJnN0
bXQsIE5VTEwpCiAgCQkgICAgIT0gU1FMSVRFX09LKSB7CiAgCQkJRVJST1JfU1FMSVRFKGRi
LT5zcWxpdGUsIHNxbFthdHRyXSk7CioqKioqKioqKioqKioqKgoqKiogMjcwMCwyNzA2ICoq
KioKICAJCSJVUERBVEUgZmlsZXMgU0VUIHNoYTI1NiA9ID8xIFdIRVJFIHBhdGggPSA/MiI7
CiAgCWludAkJIHJldDsKICAKISAJcGtnX2RlYnVnKDQsICJQa2dkYjogcGtnZGJfZmlsZV9z
ZXRfY2tzdW0gcnVubmluZyAnJXMnIiwgc3FsX2ZpbGVfdXBkYXRlKTsKICAJcmV0ID0gc3Fs
aXRlM19wcmVwYXJlX3YyKGRiLT5zcWxpdGUsIHNxbF9maWxlX3VwZGF0ZSwgLTEsICZzdG10
LCBOVUxMKTsKICAJaWYgKHJldCAhPSBTUUxJVEVfT0spIHsKICAJCUVSUk9SX1NRTElURShk
Yi0+c3FsaXRlLCBzcWxfZmlsZV91cGRhdGUpOwotLS0gMjcwMCwyNzA2IC0tLS0KICAJCSJV
UERBVEUgZmlsZXMgU0VUIHNoYTI1NiA9ID8xIFdIRVJFIHBhdGggPSA/MiI7CiAgCWludAkJ
IHJldDsKICAKISAJcGtnX2RlYnVnKDQsICJQa2dkYjogcnVubmluZyAnJXMnIiwgc3FsX2Zp
bGVfdXBkYXRlKTsKICAJcmV0ID0gc3FsaXRlM19wcmVwYXJlX3YyKGRiLT5zcWxpdGUsIHNx
bF9maWxlX3VwZGF0ZSwgLTEsICZzdG10LCBOVUxMKTsKICAJaWYgKHJldCAhPSBTUUxJVEVf
T0spIHsKICAJCUVSUk9SX1NRTElURShkYi0+c3FsaXRlLCBzcWxfZmlsZV91cGRhdGUpOwoq
KioqKioqKioqKioqKioKKioqIDMxMDIsMzEwOCAqKioqCiAgCX0KICAKICAJc2J1Zl9maW5p
c2goc3FsKTsKISAJcGtnX2RlYnVnKDQsICJQa2dkYjogcGtnZGJfc3RhdHMgcnVubmluZyAn
JXMnIiwgc2J1Zl9kYXRhKHNxbCkpOwogIAlyZXQgPSBzcWxpdGUzX3ByZXBhcmVfdjIoZGIt
PnNxbGl0ZSwgc2J1Zl9kYXRhKHNxbCksIC0xLCAmc3RtdCwgTlVMTCk7CiAgCWlmIChyZXQg
IT0gU1FMSVRFX09LKSB7CiAgCQlFUlJPUl9TUUxJVEUoZGItPnNxbGl0ZSwgc2J1Zl9kYXRh
KHNxbCkpOwotLS0gMzEwMiwzMTA4IC0tLS0KICAJfQogIAogIAlzYnVmX2ZpbmlzaChzcWwp
OwohIAlwa2dfZGVidWcoNCwgIlBrZ2RiOiBydW5uaW5nICclcyciLCBzYnVmX2RhdGEoc3Fs
KSk7CiAgCXJldCA9IHNxbGl0ZTNfcHJlcGFyZV92MihkYi0+c3FsaXRlLCBzYnVmX2RhdGEo
c3FsKSwgLTEsICZzdG10LCBOVUxMKTsKICAJaWYgKHJldCAhPSBTUUxJVEVfT0spIHsKICAJ
CUVSUk9SX1NRTElURShkYi0+c3FsaXRlLCBzYnVmX2RhdGEoc3FsKSk7CioqKiBwa2ctMS40
LjAucHJlLWFscGhhMTUvbGlicGtnL3BrZ2RiX2l0ZXJhdG9yLmMJTW9uIFNlcCAxNSAxMjo0
MDowMyAyMDE0Ci0tLSBwa2ctMS40LjAucHJlLWFscGhhMTUub3JpZy9saWJwa2cvcGtnZGJf
aXRlcmF0b3IuYwlXZWQgQXVnIDI3IDE1OjAzOjExIDIwMTQKKioqKioqKioqKioqKioqCioq
KiA4Myw4OSAqKioqCiAgCXsgIm9yaWdpbiIsCVBLR19PUklHSU4sIFBLR19TUUxJVEVfU1RS
SU5HIH0sCiAgCXsgInBrZ3NpemUiLAlQS0dfUEtHU0laRSwgUEtHX1NRTElURV9JTlQ2NCB9
LAogIAl7ICJwcmVmaXgiLAlQS0dfUFJFRklYLCBQS0dfU1FMSVRFX1NUUklORyB9LAotIAl7
ICJyZXBvX29yZGVyIiwJUEtHX1JFUE9fT1JERVIsIFBLR19TUUxJVEVfSU5UNjQgfSwKICAJ
eyAicmVwb3BhdGgiLAlQS0dfUkVQT1BBVEgsIFBLR19TUUxJVEVfU1RSSU5HIH0sCiAgCXsg
InJlcG91cmwiLAlQS0dfUkVQT1VSTCwgUEtHX1NRTElURV9TVFJJTkcgfSwKICAJeyAicm93
aWQiLAlQS0dfUk9XSUQsIFBLR19TUUxJVEVfSU5UNjQgfSwKLS0tIDgzLDg4IC0tLS0KKioq
KioqKioqKioqKioqCioqKiAxMDgsMTE0ICoqKioKICAJaWYgKHBrZy0+ZmxhZ3MgJiBmbGFn
cykKICAJCXJldHVybiAoRVBLR19PSyk7CiAgCiEgCXBrZ19kZWJ1Zyg0LCAiUGtnZGI6IGxv
YWRfdmFsIHJ1bm5pbmcgJyVzJyIsIHNxbCk7CiAgCWlmIChzcWxpdGUzX3ByZXBhcmVfdjIo
ZGIsIHNxbCwgLTEsICZzdG10LCBOVUxMKSAhPSBTUUxJVEVfT0spIHsKICAJCUVSUk9SX1NR
TElURShkYiwgc3FsKTsKICAJCXJldHVybiAoRVBLR19GQVRBTCk7Ci0tLSAxMDcsMTEzIC0t
LS0KICAJaWYgKHBrZy0+ZmxhZ3MgJiBmbGFncykKICAJCXJldHVybiAoRVBLR19PSyk7CiAg
CiEgCXBrZ19kZWJ1Zyg0LCAiUGtnZGI6IHJ1bm5pbmcgJyVzJyIsIHNxbCk7CiAgCWlmIChz
cWxpdGUzX3ByZXBhcmVfdjIoZGIsIHNxbCwgLTEsICZzdG10LCBOVUxMKSAhPSBTUUxJVEVf
T0spIHsKICAJCUVSUk9SX1NRTElURShkYiwgc3FsKTsKICAJCXJldHVybiAoRVBLR19GQVRB
TCk7CioqKioqKioqKioqKioqKgoqKiogMTQ4LDE1NCAqKioqCiAgCWlmIChwa2ctPmZsYWdz
ICYgZmxhZ3MpCiAgCQlyZXR1cm4gKEVQS0dfT0spOwogIAohIAlwa2dfZGVidWcoNCwgIlBr
Z2RiOiBsb2FkX3RhZ192YWwgcnVubmluZyAnJXMnIiwgc3FsKTsKICAJaWYgKHNxbGl0ZTNf
cHJlcGFyZV92MihkYiwgc3FsLCAtMSwgJnN0bXQsIE5VTEwpICE9IFNRTElURV9PSykgewog
IAkJRVJST1JfU1FMSVRFKGRiLCBzcWwpOwogIAkJcmV0dXJuIChFUEtHX0ZBVEFMKTsKLS0t
IDE0NywxNTMgLS0tLQogIAlpZiAocGtnLT5mbGFncyAmIGZsYWdzKQogIAkJcmV0dXJuIChF
UEtHX09LKTsKICAKISAJcGtnX2RlYnVnKDQsICJQa2dkYjogcnVubmluZyAnJXMnIiwgc3Fs
KTsKICAJaWYgKHNxbGl0ZTNfcHJlcGFyZV92MihkYiwgc3FsLCAtMSwgJnN0bXQsIE5VTEwp
ICE9IFNRTElURV9PSykgewogIAkJRVJST1JfU1FMSVRFKGRiLCBzcWwpOwogIAkJcmV0dXJu
IChFUEtHX0ZBVEFMKTsKKioqKioqKioqKioqKioqCioqKiAyMDQsMjEwICoqKioKICAJCXJl
dHVybiAoRVBLR19PSyk7CiAgCiAgCiEgCXBrZ19kZWJ1Zyg0LCAiUGtnZGI6IHBrZ2RiX2xv
YWRfZGVwcyBydW5uaW5nICclcyciLCBtYWluc3FsKTsKICAJcmV0ID0gc3FsaXRlM19wcmVw
YXJlX3YyKHNxbGl0ZSwgbWFpbnNxbCwgLTEsICZzdG10LCBOVUxMKTsKICAKICAJaWYgKHJl
dCAhPSBTUUxJVEVfT0spIHsKLS0tIDIwMywyMDkgLS0tLQogIAkJcmV0dXJuIChFUEtHX09L
KTsKICAKICAKISAJcGtnX2RlYnVnKDQsICJQa2dkYjogcnVubmluZyAnJXMnIiwgbWFpbnNx
bCk7CiAgCXJldCA9IHNxbGl0ZTNfcHJlcGFyZV92MihzcWxpdGUsIG1haW5zcWwsIC0xLCAm
c3RtdCwgTlVMTCk7CiAgCiAgCWlmIChyZXQgIT0gU1FMSVRFX09LKSB7CioqKioqKioqKioq
KioqKgoqKiogMjUzLDI1OSAqKioqCiAgCQlyZXR1cm4gKEVQS0dfT0spOwogIAogIAohIAlw
a2dfZGVidWcoNCwgIlBrZ2RiOiBwa2dkYl9sb2FkX3JkZXBzIHJ1bm5pbmcgJyVzJyIsIG1h
aW5zcWwpOwogIAlyZXQgPSBzcWxpdGUzX3ByZXBhcmVfdjIoc3FsaXRlLCBtYWluc3FsLCAt
MSwgJnN0bXQsIE5VTEwpOwogIAogIAlpZiAocmV0ICE9IFNRTElURV9PSykgewotLS0gMjUy
LDI1OCAtLS0tCiAgCQlyZXR1cm4gKEVQS0dfT0spOwogIAogIAohIAlwa2dfZGVidWcoNCwg
IlBrZ2RiOiBydW5uaW5nICclcyciLCBtYWluc3FsKTsKICAJcmV0ID0gc3FsaXRlM19wcmVw
YXJlX3YyKHNxbGl0ZSwgbWFpbnNxbCwgLTEsICZzdG10LCBOVUxMKTsKICAKICAJaWYgKHJl
dCAhPSBTUUxJVEVfT0spIHsKKioqKioqKioqKioqKioqCioqKiAzMDEsMzA3ICoqKioKICAJ
aWYgKHBrZy0+ZmxhZ3MgJiBQS0dfTE9BRF9GSUxFUykKICAJCXJldHVybiAoRVBLR19PSyk7
CiAgCiEgCXBrZ19kZWJ1Zyg0LCAiUGtnZGI6IHBrZ2RiX2xvYWRfZmlsZXMgcnVubmluZyAn
JXMnIiwgc3FsKTsKICAJaWYgKHNxbGl0ZTNfcHJlcGFyZV92MihzcWxpdGUsIHNxbCwgLTEs
ICZzdG10LCBOVUxMKSAhPSBTUUxJVEVfT0spIHsKICAJCUVSUk9SX1NRTElURShzcWxpdGUs
IHNxbCk7CiAgCQlyZXR1cm4gKEVQS0dfRkFUQUwpOwotLS0gMzAwLDMwNiAtLS0tCiAgCWlm
IChwa2ctPmZsYWdzICYgUEtHX0xPQURfRklMRVMpCiAgCQlyZXR1cm4gKEVQS0dfT0spOwog
IAohIAlwa2dfZGVidWcoNCwgIlBrZ2RiOiBydW5uaW5nICclcyciLCBzcWwpOwogIAlpZiAo
c3FsaXRlM19wcmVwYXJlX3YyKHNxbGl0ZSwgc3FsLCAtMSwgJnN0bXQsIE5VTEwpICE9IFNR
TElURV9PSykgewogIAkJRVJST1JfU1FMSVRFKHNxbGl0ZSwgc3FsKTsKICAJCXJldHVybiAo
RVBLR19GQVRBTCk7CioqKioqKioqKioqKioqKgoqKiogMzQ1LDM1MSAqKioqCiAgCWlmIChw
a2ctPmZsYWdzICYgUEtHX0xPQURfRElSUykKICAJCXJldHVybiAoRVBLR19PSyk7CiAgCiEg
CXBrZ19kZWJ1Zyg0LCAiUGtnZGI6IHBrZ2RiX2xvYWRfZGlycyBydW5uaW5nICclcyciLCBz
cWwpOwogIAlpZiAoc3FsaXRlM19wcmVwYXJlX3YyKHNxbGl0ZSwgc3FsLCAtMSwgJnN0bXQs
IE5VTEwpICE9IFNRTElURV9PSykgewogIAkJRVJST1JfU1FMSVRFKHNxbGl0ZSwgc3FsKTsK
ICAJCXJldHVybiAoRVBLR19GQVRBTCk7Ci0tLSAzNDQsMzUwIC0tLS0KICAJaWYgKHBrZy0+
ZmxhZ3MgJiBQS0dfTE9BRF9ESVJTKQogIAkJcmV0dXJuIChFUEtHX09LKTsKICAKISAJcGtn
X2RlYnVnKDQsICJQa2dkYjogcnVubmluZyAnJXMnIiwgc3FsKTsKICAJaWYgKHNxbGl0ZTNf
cHJlcGFyZV92MihzcWxpdGUsIHNxbCwgLTEsICZzdG10LCBOVUxMKSAhPSBTUUxJVEVfT0sp
IHsKICAJCUVSUk9SX1NRTElURShzcWxpdGUsIHNxbCk7CiAgCQlyZXR1cm4gKEVQS0dfRkFU
QUwpOwoqKioqKioqKioqKioqKioKKioqIDU0Myw1NDkgKioqKgogIAlpZiAocGtnLT5mbGFn
cyAmIFBLR19MT0FEX1NDUklQVFMpCiAgCQlyZXR1cm4gKEVQS0dfT0spOwogIAohIAlwa2df
ZGVidWcoNCwgIlBrZ2RiOiBwa2dkYl9sb2FkX3NjcmlwdHMgcnVubmluZyAnJXMnIiwgc3Fs
KTsKICAJaWYgKHNxbGl0ZTNfcHJlcGFyZV92MihzcWxpdGUsIHNxbCwgLTEsICZzdG10LCBO
VUxMKSAhPSBTUUxJVEVfT0spIHsKICAJCUVSUk9SX1NRTElURShzcWxpdGUsIHNxbCk7CiAg
CQlyZXR1cm4gKEVQS0dfRkFUQUwpOwotLS0gNTQyLDU0OCAtLS0tCiAgCWlmIChwa2ctPmZs
YWdzICYgUEtHX0xPQURfU0NSSVBUUykKICAJCXJldHVybiAoRVBLR19PSyk7CiAgCiEgCXBr
Z19kZWJ1Zyg0LCAiUGtnZGI6IHJ1bm5pbmcgJyVzJyIsIHNxbCk7CiAgCWlmIChzcWxpdGUz
X3ByZXBhcmVfdjIoc3FsaXRlLCBzcWwsIC0xLCAmc3RtdCwgTlVMTCkgIT0gU1FMSVRFX09L
KSB7CiAgCQlFUlJPUl9TUUxJVEUoc3FsaXRlLCBzcWwpOwogIAkJcmV0dXJuIChFUEtHX0ZB
VEFMKTsKKioqIHBrZy0xLjQuMC5wcmUtYWxwaGExNS9saWJwa2cvcHJpdmF0ZS9wa2cuaAlN
b24gU2VwIDE1IDEyOjMzOjI2IDIwMTQKLS0tIHBrZy0xLjQuMC5wcmUtYWxwaGExNS5vcmln
L2xpYnBrZy9wcml2YXRlL3BrZy5oCVN1biBTZXAgMTQgMTU6MTE6NDAgMjAxNAoqKioqKioq
KioqKioqKioKKioqIDM1MSwzNTggKioqKgogIAogIAlwa2dfcmVwb19mbGFncyBmbGFnczsK
ICAKLSAJLyogb3JkZXIgZm9yIHJlcG9zaXRvcnkgKi8KLSAgICAgaW50IHJlcG9fb3JkZXI7
CiAgCS8qIE9wYXF1ZSByZXBvc2l0b3J5IGRhdGEgKi8KICAJdm9pZCAqcHJpdjsKICB9Owot
LS0gMzUxLDM1NiAtLS0tCioqKioqKioqKioqKioqKgoqKiogNDM2LDQ1MCAqKioqCiAgI2Rl
ZmluZSBQS0dfREVMRVRFX05PU0NSSVBUICgxPDwyKQogICNkZWZpbmUgUEtHX0RFTEVURV9D
T05GTElDVCAoMTw8MykKICAKISAKISBzdHJ1Y3QgcGtnX2tleV94IHsKISAJaW50IGVudW1f
dGFnOwogIAljb25zdCBjaGFyICpuYW1lOwogIAlpbnQgdHlwZTsKISB9OwohIAohIHN0cnVj
dCBwa2dfa2V5X3ggKmdldF9wa2dfa2V5X2J5X2VudW1fdGFnKCBpbnQgZW51bV90YWcgKTsK
ISBzdHJ1Y3QgcGtnX2tleV94ICpnZXRfcGtnX2tleV9ieV9uYW1lKCBjb25zdCBjaGFyICpu
YW1lICk7CiAgCiAgaW50IHBrZ19mZXRjaF9maWxlX3RvX2ZkKHN0cnVjdCBwa2dfcmVwbyAq
cmVwbywgY29uc3QgY2hhciAqdXJsLAogIAkJaW50IGRlc3QsIHRpbWVfdCAqdCk7Ci0tLSA0
MzQsNDQzIC0tLS0KICAjZGVmaW5lIFBLR19ERUxFVEVfTk9TQ1JJUFQgKDE8PDIpCiAgI2Rl
ZmluZSBQS0dfREVMRVRFX0NPTkZMSUNUICgxPDwzKQogIAohIGV4dGVybiBzdHJ1Y3QgcGtn
X2tleSB7CiAgCWNvbnN0IGNoYXIgKm5hbWU7CiAgCWludCB0eXBlOwohIH0gcGtnX2tleXNb
UEtHX05VTV9GSUVMRFNdOwogIAogIGludCBwa2dfZmV0Y2hfZmlsZV90b19mZChzdHJ1Y3Qg
cGtnX3JlcG8gKnJlcG8sIGNvbnN0IGNoYXIgKnVybCwKICAJCWludCBkZXN0LCB0aW1lX3Qg
KnQpOwoqKiogcGtnLTEuNC4wLnByZS1hbHBoYTE1L2xpYnBrZy9wcml2YXRlL3BrZ19wcmlu
dGYuaAlNb24gU2VwIDE1IDEyOjI0OjAzIDIwMTQKLS0tIHBrZy0xLjQuMC5wcmUtYWxwaGEx
NS5vcmlnL2xpYnBrZy9wcml2YXRlL3BrZ19wcmludGYuaAlTdW4gSnVuICA4IDEyOjU5OjUz
IDIwMTQKKioqKioqKioqKioqKioqCioqKiAxNDEsMTQ3ICoqKioKICAJUFBfUEtHX0NIRUNL
U1VNLAogIAlQUF9QS0dfVkVSU0lPTiwKICAJUFBfUEtHX0hPTUVfUEFHRSwKLSAJUFBfUEtH
X1JFUE9fT1JERVIsCiAgCVBQX1BLR19TSE9SVF9DSEVDS1NVTSwKICAJUFBfTEFTVF9GT1JN
QVQgPSBQUF9QS0dfU0hPUlRfQ0hFQ0tTVU0sCiAgCVBQX0xJVEVSQUxfUEVSQ0VOVCwKLS0t
IDE0MSwxNDYgLS0tLQoqKioqKioqKioqKioqKioKKioqIDIyNiwyMzIgKioqKgogIF9zdGF0
aWMgc3RydWN0IHNidWYgKmZvcm1hdF9zaG9ydF9jaGVja3N1bShzdHJ1Y3Qgc2J1ZiAqLCBj
b25zdCB2b2lkICosIHN0cnVjdCBwZXJjZW50X2VzYyAqKTsKICBfc3RhdGljIHN0cnVjdCBz
YnVmICpmb3JtYXRfdmVyc2lvbihzdHJ1Y3Qgc2J1ZiAqLCBjb25zdCB2b2lkICosIHN0cnVj
dCBwZXJjZW50X2VzYyAqKTsKICBfc3RhdGljIHN0cnVjdCBzYnVmICpmb3JtYXRfaG9tZV91
cmwoc3RydWN0IHNidWYgKiwgY29uc3Qgdm9pZCAqLCBzdHJ1Y3QgcGVyY2VudF9lc2MgKik7
Ci0gX3N0YXRpYyBzdHJ1Y3Qgc2J1ZiAqZm9ybWF0X3JlcG9fb3JkZXIoc3RydWN0IHNidWYg
KiwgY29uc3Qgdm9pZCAqLCBzdHJ1Y3QgcGVyY2VudF9lc2MgKik7CiAgX3N0YXRpYyBzdHJ1
Y3Qgc2J1ZiAqZm9ybWF0X2xpdGVyYWxfcGVyY2VudChzdHJ1Y3Qgc2J1ZiAqLCBfX3VudXNl
ZCBjb25zdCB2b2lkICosIF9fdW51c2VkIHN0cnVjdCBwZXJjZW50X2VzYyAqKTsKICBfc3Rh
dGljIHN0cnVjdCBzYnVmICpmb3JtYXRfdW5rbm93bihzdHJ1Y3Qgc2J1ZiAqLCBfX3VudXNl
ZCBjb25zdCB2b2lkICosIF9fdW51c2VkIHN0cnVjdCBwZXJjZW50X2VzYyAqKTsKICAKLS0t
IDIyNSwyMzAgLS0tLQoqKiogcGtnLTEuNC4wLnByZS1hbHBoYTE1L2xpYnBrZy9yZXBvL2Jp
bmFyeS9pbml0LmMJTW9uIFNlcCAxNSAxMjoyMzoxMCAyMDE0Ci0tLSBwa2ctMS40LjAucHJl
LWFscGhhMTUub3JpZy9saWJwa2cvcmVwby9iaW5hcnkvaW5pdC5jCVdlZCBBdWcgMjcgMTU6
MDM6MTEgMjAxNAoqKioqKioqKioqKioqKioKKioqIDEzNywxNDMgKioqKgogIAogIAkvKiBh
cHBseSBjaGFuZ2UgKi8KICAJaWYgKHJldCA9PSBFUEtHX09LKSB7CiEgCQlwa2dfZGVidWco
NCwgIlBrZ2RiOiBwa2dfcmVwb19iaW5hcnlfYXBwbHlfY2hhbmdlIHJ1bm5pbmcgJyVzJyIs
IGNoYW5nZS0+c3FsKTsKICAJCXJldCA9IHNxbGl0ZTNfZXhlYyhzcWxpdGUsIGNoYW5nZS0+
c3FsLCBOVUxMLCBOVUxMLCAmZXJybXNnKTsKICAJCWlmIChyZXQgIT0gU1FMSVRFX09LKSB7
CiAgCQkJcGtnX2VtaXRfZXJyb3IoInNxbGl0ZTogJXMiLCBlcnJtc2cpOwotLS0gMTM3LDE0
MyAtLS0tCiAgCiAgCS8qIGFwcGx5IGNoYW5nZSAqLwogIAlpZiAocmV0ID09IEVQS0dfT0sp
IHsKISAJCXBrZ19kZWJ1Zyg0LCAiUGtnZGI6IHJ1bm5pbmcgJyVzJyIsIGNoYW5nZS0+c3Fs
KTsKICAJCXJldCA9IHNxbGl0ZTNfZXhlYyhzcWxpdGUsIGNoYW5nZS0+c3FsLCBOVUxMLCBO
VUxMLCAmZXJybXNnKTsKICAJCWlmIChyZXQgIT0gU1FMSVRFX09LKSB7CiAgCQkJcGtnX2Vt
aXRfZXJyb3IoInNxbGl0ZTogJXMiLCBlcnJtc2cpOwoqKiogcGtnLTEuNC4wLnByZS1hbHBo
YTE1L2xpYnBrZy9yZXBvL2JpbmFyeS9xdWVyeS5jCU1vbiBTZXAgMTUgMTI6MjI6MTAgMjAx
NAotLS0gcGtnLTEuNC4wLnByZS1hbHBoYTE1Lm9yaWcvbGlicGtnL3JlcG8vYmluYXJ5L3F1
ZXJ5LmMJV2VkIEF1ZyAyNyAxNTowMzoxMSAyMDE0CioqKioqKioqKioqKioqKgoqKiogMTI4
LDEzNCAqKioqCiAgCXNidWZfY2F0KHNxbCwgIiBPUkRFUiBCWSBuYW1lOyIpOwogIAlzYnVm
X2ZpbmlzaChzcWwpOwogIAohIAlwa2dfZGVidWcoNCwgIlBrZ2RiOiBwa2dfcmVwb19iaW5h
cnlfcXVlcnkgcnVubmluZyAnJXMnIHF1ZXJ5IGZvciAlcyIsIHNidWZfZ2V0KHNxbCksIHBh
dHRlcm4pOwogIAlyZXQgPSBzcWxpdGUzX3ByZXBhcmVfdjIoc3FsaXRlLCBzYnVmX2dldChz
cWwpLCBzYnVmX3NpemUoc3FsKSwgJnN0bXQsIE5VTEwpOwogIAlpZiAocmV0ICE9IFNRTElU
RV9PSykgewogIAkJRVJST1JfU1FMSVRFKHNxbGl0ZSwgc2J1Zl9nZXQoc3FsKSk7Ci0tLSAx
MjgsMTM0IC0tLS0KICAJc2J1Zl9jYXQoc3FsLCAiIE9SREVSIEJZIG5hbWU7Iik7CiAgCXNi
dWZfZmluaXNoKHNxbCk7CiAgCiEgCXBrZ19kZWJ1Zyg0LCAiUGtnZGI6IHJ1bm5pbmcgJyVz
JyBxdWVyeSBmb3IgJXMiLCBzYnVmX2dldChzcWwpLCBwYXR0ZXJuKTsKICAJcmV0ID0gc3Fs
aXRlM19wcmVwYXJlX3YyKHNxbGl0ZSwgc2J1Zl9nZXQoc3FsKSwgc2J1Zl9zaXplKHNxbCks
ICZzdG10LCBOVUxMKTsKICAJaWYgKHJldCAhPSBTUUxJVEVfT0spIHsKICAJCUVSUk9SX1NR
TElURShzcWxpdGUsIHNidWZfZ2V0KHNxbCkpOwoqKioqKioqKioqKioqKioKKioqIDE2Nywx
NzMgKioqKgogIAogIAlzYnVmX2ZpbmlzaChzcWwpOwogIAohIAlwa2dfZGVidWcoNCwgIlBr
Z2RiOiBwa2dfcmVwb19iaW5hcnlfc2hsaWJfcHJvdmlkZSBydW5uaW5nICclcyciLCBzYnVm
X2dldChzcWwpKTsKICAJcmV0ID0gc3FsaXRlM19wcmVwYXJlX3YyKHNxbGl0ZSwgc2J1Zl9n
ZXQoc3FsKSwgLTEsICZzdG10LCBOVUxMKTsKICAJaWYgKHJldCAhPSBTUUxJVEVfT0spIHsK
ICAJCUVSUk9SX1NRTElURShzcWxpdGUsIHNidWZfZ2V0KHNxbCkpOwotLS0gMTY3LDE3MyAt
LS0tCiAgCiAgCXNidWZfZmluaXNoKHNxbCk7CiAgCiEgCXBrZ19kZWJ1Zyg0LCAiUGtnZGI6
IHJ1bm5pbmcgJyVzJyIsIHNidWZfZ2V0KHNxbCkpOwogIAlyZXQgPSBzcWxpdGUzX3ByZXBh
cmVfdjIoc3FsaXRlLCBzYnVmX2dldChzcWwpLCAtMSwgJnN0bXQsIE5VTEwpOwogIAlpZiAo
cmV0ICE9IFNRTElURV9PSykgewogIAkJRVJST1JfU1FMSVRFKHNxbGl0ZSwgc2J1Zl9nZXQo
c3FsKSk7CioqKioqKioqKioqKioqKgoqKiogMjA0LDIxMCAqKioqCiAgCiAgCXNidWZfZmlu
aXNoKHNxbCk7CiAgCiEgCXBrZ19kZWJ1Zyg0LCAiUGtnZGI6IHBrZ19yZXBvX2JpbmFyeV9z
aGxpYl9yZXF1aXJlIHJ1bm5pbmcgJyVzJyIsIHNidWZfZ2V0KHNxbCkpOwogIAlyZXQgPSBz
cWxpdGUzX3ByZXBhcmVfdjIoc3FsaXRlLCBzYnVmX2dldChzcWwpLCAtMSwgJnN0bXQsIE5V
TEwpOwogIAlpZiAocmV0ICE9IFNRTElURV9PSykgewogIAkJRVJST1JfU1FMSVRFKHNxbGl0
ZSwgc2J1Zl9nZXQoc3FsKSk7Ci0tLSAyMDQsMjEwIC0tLS0KICAKICAJc2J1Zl9maW5pc2go
c3FsKTsKICAKISAJcGtnX2RlYnVnKDQsICJQa2dkYjogcnVubmluZyAnJXMnIiwgc2J1Zl9n
ZXQoc3FsKSk7CiAgCXJldCA9IHNxbGl0ZTNfcHJlcGFyZV92MihzcWxpdGUsIHNidWZfZ2V0
KHNxbCksIC0xLCAmc3RtdCwgTlVMTCk7CiAgCWlmIChyZXQgIT0gU1FMSVRFX09LKSB7CiAg
CQlFUlJPUl9TUUxJVEUoc3FsaXRlLCBzYnVmX2dldChzcWwpKTsKKioqKioqKioqKioqKioq
CioqKiAzMjUsMzM5ICoqKioKICAJCSJTRUxFQ1QgaWQsIG9yaWdpbiwgbmFtZSwgdmVyc2lv
biwgY29tbWVudCwgIgogIAkJInByZWZpeCwgZGVzYywgYXJjaCwgbWFpbnRhaW5lciwgd3d3
LCAiCiAgCQkibGljZW5zZWxvZ2ljLCBmbGF0c2l6ZSwgcGtnc2l6ZSwgIgohIAkJImNrc3Vt
LCBwYXRoIEFTIHJlcG9wYXRoLCAnJTEkcycgQVMgZGJuYW1lLCAnJTIkcycgQVMgcmVwb3Vy
bCwgIgohICAgICAgICAgIiUzJGQgYXMgcmVwb19vcmRlciAiCiAgCQkiRlJPTSBwYWNrYWdl
cyAiOwogIAogIAlpZiAocGF0dGVybiA9PSBOVUxMIHx8IHBhdHRlcm5bMF0gPT0gJ1wwJykK
ICAJCXJldHVybiAoTlVMTCk7CiAgCiAgCXNxbCA9IHNidWZfbmV3X2F1dG8oKTsKISAJc2J1
Zl9wcmludGYoc3FsLCBtdWx0aXJlcG9zcWwsIHJlcG8tPm5hbWUsIHJlcG8tPnVybCwgcmVw
by0+cmVwb19vcmRlciApOwogIAogIAkvKiBjbG9zZSB0aGUgVU5JT05zIGFuZCBidWlsZCB0
aGUgc2VhcmNoIHF1ZXJ5ICovCiAgCXNidWZfY2F0KHNxbCwgIldIRVJFICIpOwotLS0gMzI1
LDMzOCAtLS0tCiAgCQkiU0VMRUNUIGlkLCBvcmlnaW4sIG5hbWUsIHZlcnNpb24sIGNvbW1l
bnQsICIKICAJCSJwcmVmaXgsIGRlc2MsIGFyY2gsIG1haW50YWluZXIsIHd3dywgIgogIAkJ
ImxpY2Vuc2Vsb2dpYywgZmxhdHNpemUsIHBrZ3NpemUsICIKISAJCSJja3N1bSwgcGF0aCBB
UyByZXBvcGF0aCwgJyUxJHMnIEFTIGRibmFtZSwgJyUyJHMnIEFTIHJlcG91cmwgIgogIAkJ
IkZST00gcGFja2FnZXMgIjsKICAKICAJaWYgKHBhdHRlcm4gPT0gTlVMTCB8fCBwYXR0ZXJu
WzBdID09ICdcMCcpCiAgCQlyZXR1cm4gKE5VTEwpOwogIAogIAlzcWwgPSBzYnVmX25ld19h
dXRvKCk7CiEgCXNidWZfcHJpbnRmKHNxbCwgbXVsdGlyZXBvc3FsLCByZXBvLT5uYW1lLCBy
ZXBvLT51cmwpOwogIAogIAkvKiBjbG9zZSB0aGUgVU5JT05zIGFuZCBidWlsZCB0aGUgc2Vh
cmNoIHF1ZXJ5ICovCiAgCXNidWZfY2F0KHNxbCwgIldIRVJFICIpOwoqKioqKioqKioqKioq
KioKKioqIDM0MiwzNDggKioqKgogIAlzYnVmX2NhdChzcWwsICI7Iik7CiAgCXNidWZfZmlu
aXNoKHNxbCk7CiAgCiEgCXBrZ19kZWJ1Zyg0LCAiUGtnZGI6IHBrZ19yZXBvX2JpbmFyeV9z
ZWFyY2ggcnVubmluZyAnJXMnIiwgc2J1Zl9nZXQoc3FsKSk7CiAgCXJldCA9IHNxbGl0ZTNf
cHJlcGFyZV92MihzcWxpdGUsIHNidWZfZ2V0KHNxbCksIC0xLCAmc3RtdCwgTlVMTCk7CiAg
CWlmIChyZXQgIT0gU1FMSVRFX09LKSB7CiAgCQlFUlJPUl9TUUxJVEUoc3FsaXRlLCBzYnVm
X2dldChzcWwpKTsKLS0tIDM0MSwzNDcgLS0tLQogIAlzYnVmX2NhdChzcWwsICI7Iik7CiAg
CXNidWZfZmluaXNoKHNxbCk7CiAgCiEgCXBrZ19kZWJ1Zyg0LCAiUGtnZGI6IHJ1bm5pbmcg
JyVzJyIsIHNidWZfZ2V0KHNxbCkpOwogIAlyZXQgPSBzcWxpdGUzX3ByZXBhcmVfdjIoc3Fs
aXRlLCBzYnVmX2dldChzcWwpLCAtMSwgJnN0bXQsIE5VTEwpOwogIAlpZiAocmV0ICE9IFNR
TElURV9PSykgewogIAkJRVJST1JfU1FMSVRFKHNxbGl0ZSwgc2J1Zl9nZXQoc3FsKSk7Cioq
KioqKioqKioqKioqKgoqKiogNDIzLDQyOSAqKioqCiAgCX0KICAKICAJc2J1Zl9maW5pc2go
c3FsKTsKISAJcGtnX2RlYnVnKDQsICJiaW5hcnlfcmVwbzogcGtnX3JlcG9fYmluYXJ5X3N0
YXQgcnVubmluZyAnJXMnIiwgc2J1Zl9kYXRhKHNxbCkpOwogIAlyZXQgPSBzcWxpdGUzX3By
ZXBhcmVfdjIoc3FsaXRlLCBzYnVmX2RhdGEoc3FsKSwgLTEsICZzdG10LCBOVUxMKTsKICAJ
aWYgKHJldCAhPSBTUUxJVEVfT0spIHsKICAJCUVSUk9SX1NRTElURShzcWxpdGUsIHNidWZf
ZGF0YShzcWwpKTsKLS0tIDQyMiw0MjggLS0tLQogIAl9CiAgCiAgCXNidWZfZmluaXNoKHNx
bCk7CiEgCXBrZ19kZWJ1Zyg0LCAiYmluYXJ5X3JlcG86IHJ1bm5pbmcgJyVzJyIsIHNidWZf
ZGF0YShzcWwpKTsKICAJcmV0ID0gc3FsaXRlM19wcmVwYXJlX3YyKHNxbGl0ZSwgc2J1Zl9k
YXRhKHNxbCksIC0xLCAmc3RtdCwgTlVMTCk7CiAgCWlmIChyZXQgIT0gU1FMSVRFX09LKSB7
CiAgCQlFUlJPUl9TUUxJVEUoc3FsaXRlLCBzYnVmX2RhdGEoc3FsKSk7CioqKiBwa2ctMS40
LjAucHJlLWFscGhhMTUvc3JjL2NoZWNrLmMJTW9uIFNlcCAxNSAxMjoxNzo0OSAyMDE0Ci0t
LSBwa2ctMS40LjAucHJlLWFscGhhMTUub3JpZy9zcmMvY2hlY2suYwlUaHUgQXVnIDI4IDEx
OjU4OjA1IDIwMTQKKioqKioqKioqKioqKioqCioqKiAyNTMsMjU5ICoqKioKICAJYm9vbCBy
ZWFuYWx5c2Vfc2hsaWJzID0gZmFsc2U7CiAgCWJvb2wgbm9pbnN0YWxsID0gZmFsc2U7CiAg
CWludCBuYnBrZ3MgPSAwOwohIAlpbnQgaSwgcHJvY2Vzc2VkID0gMCwgdG90YWwgPSAwOwog
IAlpbnQgdmVyYm9zZSA9IDA7CiAgCiAgCXN0cnVjdCBvcHRpb24gbG9uZ29wdHNbXSA9IHsK
LS0tIDI1MywyNTkgLS0tLQogIAlib29sIHJlYW5hbHlzZV9zaGxpYnMgPSBmYWxzZTsKICAJ
Ym9vbCBub2luc3RhbGwgPSBmYWxzZTsKICAJaW50IG5icGtncyA9IDA7CiEgCWludCBpLCBw
cm9jZXNzZWQsIHRvdGFsOwogIAlpbnQgdmVyYm9zZSA9IDA7CiAgCiAgCXN0cnVjdCBvcHRp
b24gbG9uZ29wdHNbXSA9IHsKKioqIHBrZy0xLjQuMC5wcmUtYWxwaGExNS9zcmMvZXZlbnQu
YwlNb24gU2VwIDE1IDEyOjE0OjIyIDIwMTQKLS0tIHBrZy0xLjQuMC5wcmUtYWxwaGExNS5v
cmlnL3NyYy9ldmVudC5jCVRodSBBdWcgMjggMTE6NTg6MDUgMjAxNAoqKioqKioqKioqKioq
KioKKioqIDQxMiw0MTggKioqKgogIHsKICAJaW50IHBlcmNlbnQ7CiAgCWludDY0X3QgdHJh
bnNmZXJyZWQ7CiEgCXRpbWVfdCBlbGFwc2VkID0gMCwgbm93ID0gMDsKICAJY2hhciBidWZb
N107CiAgCWludDY0X3QgYnl0ZXNfbGVmdDsKICAJaW50IGN1cl9zcGVlZDsKLS0tIDQxMiw0
MTggLS0tLQogIHsKICAJaW50IHBlcmNlbnQ7CiAgCWludDY0X3QgdHJhbnNmZXJyZWQ7CiEg
CXRpbWVfdCBlbGFwc2VkLCBub3c7CiAgCWNoYXIgYnVmWzddOwogIAlpbnQ2NF90IGJ5dGVz
X2xlZnQ7CiAgCWludCBjdXJfc3BlZWQ7CioqKiBwa2ctMS40LjAucHJlLWFscGhhMTUvc3Jj
L3BrZ2NsaS5oCU1vbiBTZXAgMTUgMTI6MTA6MTAgMjAxNAotLS0gcGtnLTEuNC4wLnByZS1h
bHBoYTE1Lm9yaWcvc3JjL3BrZ2NsaS5oCVdlZCBBdWcgMjcgMTU6MDM6MTEgMjAxNAoqKioq
KioqKioqKioqKioKKioqIDIxNCwyMjYgKioqKgogICNkZWZpbmUgSU5GT19ESVJTCQkoMUxM
PDwyMykKICAjZGVmaW5lIElORk9fVVNFUlMJCSgxTEw8PDI0KQogICNkZWZpbmUgSU5GT19H
Uk9VUFMJCSgxTEw8PDI1KQohICNkZWZpbmUgSU5GT19SRVBPVVJMCSgxTEw8PDI2KQogICNk
ZWZpbmUgSU5GT19MT0NLRUQJCSgxTEw8PDI3KQohICNkZWZpbmUgSU5GT19SRVBPX09SREVS
CSgxTEw8PDI4KQohICNkZWZpbmUgSU5GT19PUFRJT05fREVGQVVMVFMgICAgKDFMTDw8Mjkp
CiEgI2RlZmluZSBJTkZPX09QVElPTl9ERVNDUklQVElPTlMgKDFMTDw8MzApCiAgCiEgI2Rl
ZmluZSBJTkZPX0xBU1RGSUVMRAlJTkZPX1JFUE9fT1JERVIKICAjZGVmaW5lIElORk9fQUxM
CSgoKElORk9fTEFTVEZJRUxEKSA8PCAxKSAtIDEpCiAgCiAgLyogSWRlbnRpZnlpbmcgdGFn
cyAqLwotLS0gMjE0LDIyNSAtLS0tCiAgI2RlZmluZSBJTkZPX0RJUlMJCSgxTEw8PDIzKQog
ICNkZWZpbmUgSU5GT19VU0VSUwkJKDFMTDw8MjQpCiAgI2RlZmluZSBJTkZPX0dST1VQUwkJ
KDFMTDw8MjUpCiEgI2RlZmluZSBJTkZPX1JFUE9VUkwJCSgxTEw8PDI2KQogICNkZWZpbmUg
SU5GT19MT0NLRUQJCSgxTEw8PDI3KQohICNkZWZpbmUgSU5GT19PUFRJT05fREVGQVVMVFMg
ICAgKDFMTDw8MjgpCiEgI2RlZmluZSBJTkZPX09QVElPTl9ERVNDUklQVElPTlMgKDFMTDw8
MjkpCiAgCiEgI2RlZmluZSBJTkZPX0xBU1RGSUVMRAlJTkZPX0xPQ0tFRAogICNkZWZpbmUg
SU5GT19BTEwJKCgoSU5GT19MQVNURklFTEQpIDw8IDEpIC0gMSkKICAKICAvKiBJZGVudGlm
eWluZyB0YWdzICovCioqKiBwa2ctMS40LjAucHJlLWFscGhhMTUvc3JjL3NlYXJjaC5jCU1v
biBTZXAgMTUgMTI6MDg6MzggMjAxNAotLS0gcGtnLTEuNC4wLnByZS1hbHBoYTE1Lm9yaWcv
c3JjL3NlYXJjaC5jCU1vbiBBdWcgIDQgMTQ6NTk6NDAgMjAxNAoqKioqKioqKioqKioqKioK
KioqIDY5LDc1ICoqKioKICAJeyAib3B0aW9ucyIsICAgICAgICAgICAgICAnbycgIH0sCiAg
CXsgInBrZy1zaXplIiwJICAgICAgICAgICdQJyAgfSwKICAJeyAicHJlZml4IiwgICAgICAg
ICAgICAgICAncCcgIH0sCi0gCXsgInJlcG9fb3JkZXIiLCAgICAgICAgICAgJ1onICB9LAog
IAl7ICJyZXBvc2l0b3J5IiwgICAgICAgICAgICdSJyAgfSwKICAJeyAicmVxdWlyZWQtYnki
LCAgICAgICAgICAncicgIH0sCiAgCXsgInNoYXJlZC1saWJzLXJlcXVpcmVkIiwgJ0InICB9
LAotLS0gNjksNzQgLS0tLQoqKioqKioqKioqKioqKioKKioqIDE3NywxODUgKioqKgogIAlj
YXNlICdvJzoKICAJCW9wdCA9IElORk9fT1BUSU9OUzsKICAJCWJyZWFrOwotIAljYXNlICda
JzoKLSAJCW9wdCA9IElORk9fUkVQT19PUkRFUjsKLSAJCWJyZWFrOwogIAljYXNlICdQJzoK
ICAJCW9wdCA9IElORk9fUEtHU0laRTsKICAJCWJyZWFrOwotLS0gMTc2LDE4MSAtLS0tCioq
KioqKioqKioqKioqKgoqKiogMjEyLDIxOCAqKioqCiAgCQlicmVhazsKICAJZGVmYXVsdDoK
ICAJCXVzYWdlX3NlYXJjaCgpOwohIAkJZXJyeChFWF9VU0FHRSwgIlVua25vd24gbW9kaWZp
ZXIgb3B0aW9uICVzIiwgb3B0aW9uYXJnKTsKICAJCS8qIE5PVFJFQUNIRUQgKi8KICAJfQog
IAlyZXR1cm4gb3B0OwotLS0gMjA4LDIxNCAtLS0tCiAgCQlicmVhazsKICAJZGVmYXVsdDoK
ICAJCXVzYWdlX3NlYXJjaCgpOwohIAkJZXJyeChFWF9VU0FHRSwgIlVua293biBtb2RpZmll
ciBvcHRpb24gJXMiLCBvcHRpb25hcmcpOwogIAkJLyogTk9UUkVBQ0hFRCAqLwogIAl9CiAg
CXJldHVybiBvcHQ7CioqKiBwa2ctMS40LjAucHJlLWFscGhhMTUvc3JjL3V0aWxzLmMJTW9u
IFNlcCAxNSAxMjowMzo0MiAyMDE0Ci0tLSBwa2ctMS40LjAucHJlLWFscGhhMTUub3JpZy9z
cmMvdXRpbHMuYwlXZWQgQXVnIDI3IDE1OjAzOjExIDIwMTQKKioqKioqKioqKioqKioqCioq
KiA0NzIsNDgyICoqKioKICAJCQkJcHJpbnRmKCIlLTE1czogIiwgIldXVyIpOwogIAkJCXBr
Z19wcmludGYoIiV3XG4iLCBwa2cpOwogIAkJCWJyZWFrOwotIAkJY2FzZSBJTkZPX1JFUE9f
T1JERVI6CQotIAkJCWlmIChwcmludF90YWcpCi0gCQkJCXByaW50ZigiJS0xNXM6ICIsICJS
ZXBvX29yZGVyIik7Ci0gCQkJcGtnX3ByaW50ZigiJVpcbiIsIHBrZyk7Ci0gCQkJYnJlYWs7
CiAgCQljYXNlIElORk9fQ09NTUVOVDoKICAJCQlpZiAocHJpbnRfdGFnKQogIAkJCQlwcmlu
dGYoIiUtMTVzOiAiLCAiQ29tbWVudCIpOwotLS0gNDcyLDQ3NyAtLS0tCioqKiBwa2ctMS40
LjAucHJlLWFscGhhMTUvc3JjL3doaWNoLmMJTW9uIFNlcCAxNSAxMjowMzowMiAyMDE0Ci0t
LSBwa2ctMS40LjAucHJlLWFscGhhMTUub3JpZy9zcmMvd2hpY2guYwlXZWQgQXVnIDI3IDE1
OjAzOjExIDIwMTQKKioqKioqKioqKioqKioqCioqKiA1Nyw2NiAqKioqCiAgCXN0cnVjdCBw
a2dkYl9pdAkqaXQgPSBOVUxMOwogIAlzdHJ1Y3QgcGtnCSpwa2cgPSBOVUxMOwogIAljaGFy
CQkgcGF0aGFic1tNQVhQQVRITEVOXTsKISAJY2hhcgkJKnAsICpwYXRoID0gMCwgKm1hdGNo
OwogIAlpbnQJCSByZXQgPSBFUEtHX09LLCByZXRjb2RlID0gRVhfU09GVFdBUkU7CiAgCWlu
dAkJIGNoOwohIAlpbnQJCSByZXMsIHBhdGhsZW4gPSAwOwogIAlib29sCQkgb3JpZyA9IGZh
bHNlOwogIAlib29sCQkgZ2xvYiA9IGZhbHNlOwogIAlib29sCQkgc2VhcmNoID0gZmFsc2U7
Ci0tLSA1Nyw2NiAtLS0tCiAgCXN0cnVjdCBwa2dkYl9pdAkqaXQgPSBOVUxMOwogIAlzdHJ1
Y3QgcGtnCSpwa2cgPSBOVUxMOwogIAljaGFyCQkgcGF0aGFic1tNQVhQQVRITEVOXTsKISAJ
Y2hhcgkJKnAsICpwYXRoLCAqbWF0Y2g7CiAgCWludAkJIHJldCA9IEVQS0dfT0ssIHJldGNv
ZGUgPSBFWF9TT0ZUV0FSRTsKICAJaW50CQkgY2g7CiEgCWludAkJIHJlcywgcGF0aGxlbjsK
ICAJYm9vbAkJIG9yaWcgPSBmYWxzZTsKICAJYm9vbAkJIGdsb2IgPSBmYWxzZTsKICAJYm9v
bAkJIHNlYXJjaCA9IGZhbHNlOwo=
--------------070901020907000709010302--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?54223877.1000302>