Mail Archives: cygwin-developers/1998/08/12/07:00:55
This is a multi-part message in MIME format.
--------------0FF6D0FCD74BC9B46B0A1CBA
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
The attached file 'windres-res_sup.tar'
contains a couple of files related to
processing binary .RES files.
The files are:
resres.c - write_res_file and read_res_file functions
rcparse.diff - a patch to rcparse.y that makes windres aware of
SEPARATOR items in extended menus.
rj.c, rj.h - a small program to join multiple .RES files
Just remove the write_res_file and read_res_file stubs
from windres.c and compile windres together with resres.c
to add support for .RES files.
A have also noted that windres doesn't allow
CONTROL statements with the class specified as
as string, but I haven't looked into the parser
concerning that.
Another suggestion:
It would be better if windres worked more like
a linker, that is it would take multiple input files
and produce one single output file.
It wouldn't be too difficult to modify windres to
use a global resource directory that all resource
parser routines add resources to.
That way it would be possible to specify COFF, RES,
executable and resource scripts as input and get one
single output file.
Best wishes
/Anders Norlander
--------------0FF6D0FCD74BC9B46B0A1CBA
Content-Type: application/x-unknown-content-type-WinZip; name="windres-res_sup.tar"
Content-Transfer-Encoding: base64
Content-Disposition: inline; filename="windres-res_sup.tar"
cmVzcmVzLmMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADEwMDY0NCAA
ICAgNzY0IAAgICAxNDQgACAgICAgIDM1NjczICA2NTY0MzEyNjMwICAxMDc0NgAgMAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZXZlcnlvbmUAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjaW5jbHVkZSA8YXNzZXJ0Lmg+DQojaW5jbHVk
ZSA8c3RkaW8uaD4NCiNpbmNsdWRlIDxlcnJuby5oPg0KDQojaW5jbHVkZSAid2luZHJlcy5o
Ig0KDQpzdHJ1Y3QgcmVzX2hkcg0Kew0KICB1bnNpZ25lZCBsb25nIGRhdGFfc2l6ZTsNCiAg
dW5zaWduZWQgbG9uZyBoZWFkZXJfc2l6ZTsNCn07DQoNCnN0YXRpYyB2b2lkIHdyaXRlX3Jl
c19kaXJlY3RvcnkNCiAgUEFSQU1TKChjb25zdCBzdHJ1Y3QgcmVzX2RpcmVjdG9yeSAqLA0K
CSAgY29uc3Qgc3RydWN0IHJlc19pZCAqLGNvbnN0IHN0cnVjdCByZXNfaWQgKiwNCgkgIGlu
dCAqLCBpbnQpKTsNCnN0YXRpYyB2b2lkIHdyaXRlX3Jlc19yZXNvdXJjZQ0KICBQQVJBTVMo
KGNvbnN0IHN0cnVjdCByZXNfaWQgKixjb25zdCBzdHJ1Y3QgcmVzX2lkICosDQoJICBjb25z
dCBzdHJ1Y3QgcmVzX3Jlc291cmNlICosaW50ICopKTsNCnN0YXRpYyB2b2lkIHdyaXRlX3Jl
c19iaW4NClBBUkFNUygoY29uc3Qgc3RydWN0IHJlc19yZXNvdXJjZSAqLCBjb25zdCBzdHJ1
Y3QgcmVzX2lkICosDQoJY29uc3Qgc3RydWN0IHJlc19pZCAqLCBjb25zdCBzdHJ1Y3QgcmVz
X3Jlc19pbmZvICopKTsNCg0Kc3RhdGljIHZvaWQgd3JpdGVfcmVzX2lkIFBBUkFNUygoY29u
c3Qgc3RydWN0IHJlc19pZCAqKSk7DQpzdGF0aWMgdm9pZCB3cml0ZV9yZXNfaW5mbyBQQVJB
TVMoKGNvbnN0IHN0cnVjdCByZXNfcmVzX2luZm8gKikpOw0Kc3RhdGljIHZvaWQgd3JpdGVf
cmVzX2RhdGEgUEFSQU1TKChjb25zdCB2b2lkICosIHNpemVfdCwgaW50KSk7DQpzdGF0aWMg
dm9pZCB3cml0ZV9yZXNfaGVhZGVyDQogIFBBUkFNUygodW5zaWduZWQgbG9uZywgY29uc3Qg
c3RydWN0IHJlc19pZCAqLCBjb25zdCBzdHJ1Y3QgcmVzX2lkICosDQoJICBjb25zdCBzdHJ1
Y3QgcmVzX3Jlc19pbmZvICopKTsNCg0Kc3RhdGljIGludCByZWFkX3Jlc291cmNlX2VudHJ5
IFBBUkFNUygodm9pZCkpOw0Kc3RhdGljIHZvaWQgcmVhZF9yZXNfZGF0YSBQQVJBTVMoKHZv
aWQgKiwgc2l6ZV90LCBpbnQpKTsNCnN0YXRpYyB2b2lkIHJlYWRfcmVzX2lkIFBBUkFNUygo
c3RydWN0IHJlc19pZCAqKSk7DQpzdGF0aWMgdW5pY2hhciAqcmVhZF91bmlzdHJpbmcgUEFS
QU1TKChpbnQgKikpOw0Kc3RhdGljIHZvaWQgc2tpcF9udWxsX3Jlc291cmNlIFBBUkFNUygo
dm9pZCkpOw0KDQpzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfaWRfc2l6ZSBQQVJBTVMoKGNv
bnN0IHN0cnVjdCByZXNfaWQgKikpOw0Kc3RhdGljIHZvaWQgcmVzX2FsaWduX2ZpbGUgUEFS
QU1TKCh2b2lkKSk7DQoNCnN0YXRpYyB2b2lkDQpyZXNfYWRkX3Jlc291cmNlDQogIFBBUkFN
Uygoc3RydWN0IHJlc19yZXNvdXJjZSAqLGNvbnN0IHN0cnVjdCByZXNfaWQgKiwNCgkgIGNv
bnN0IHN0cnVjdCByZXNfaWQgKixpbnQsaW50KSk7DQoNCnZvaWQNCnJlc19hcHBlbmRfcmVz
b3VyY2UNCiAgUEFSQU1TKChzdHJ1Y3QgcmVzX2RpcmVjdG9yeSAqKiwgc3RydWN0IHJlc19y
ZXNvdXJjZSAqLA0KCSAgaW50LCBjb25zdCBzdHJ1Y3QgcmVzX2lkICosIGludCkpOw0KDQpz
dGF0aWMgc3RydWN0IHJlc19kaXJlY3RvcnkgKnJlc291cmNlcyA9IE5VTEw7DQoNCnN0YXRp
YyBGSUxFICpmcmVzOw0Kc3RhdGljIGNvbnN0IGNoYXIgKmZpbGVuYW1lOw0KDQpleHRlcm4g
Y2hhciAqcHJvZ3JhbV9uYW1lOw0KDQovKiBSZWFkIHJlc291cmNlIGZpbGUgKi8NCnN0cnVj
dCByZXNfZGlyZWN0b3J5ICoNCnJlYWRfcmVzX2ZpbGUgKGZuKQ0KICAgICBjb25zdCBjaGFy
ICpmbjsNCnsNCiAgZmlsZW5hbWUgPSBmbjsNCiAgZnJlcyA9IGZvcGVuKGZpbGVuYW1lLCAi
cmIiKTsNCiAgaWYgKGZyZXMgPT0gTlVMTCkNCiAgICBmYXRhbCAoImNhbid0IG9wZW4gYCVz
JyBmb3Igb3V0cHV0OiAlcyIsIGZpbGVuYW1lLCBzdHJlcnJvciAoZXJybm8pKTsNCg0KICBz
a2lwX251bGxfcmVzb3VyY2UoKTsNCg0KICB3aGlsZSAocmVhZF9yZXNvdXJjZV9lbnRyeSgp
KQ0KICAgIDsNCg0KICBmY2xvc2UoZnJlcyk7DQoNCiAgcmV0dXJuIHJlc291cmNlczsNCn0N
Cg0KLyogV3JpdGUgcmVzb3VyY2UgZmlsZSAqLw0Kdm9pZA0Kd3JpdGVfcmVzX2ZpbGUgKGZu
LCByZXNkaXIpDQogICAgIGNvbnN0IGNoYXIgKmZuOw0KICAgICBjb25zdCBzdHJ1Y3QgcmVz
X2RpcmVjdG9yeSAqcmVzZGlyOw0Kew0KICBpbnQgbGFuZ3VhZ2U7DQogIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBjaGFyIHNpZ25bXSA9DQogIHsweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDIwLCAweDAwLCAweDAwLCAweDAwLA0KICAgMHhGRiwgMHhGRiwgMHgwMCwgMHgwMCwgMHhG
RiwgMHhGRiwgMHgwMCwgMHgwMCwNCiAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsDQogICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwfTsNCiAgbG9uZyBmcG9zOw0KICBzdHJ1Y3QgcmVzX2VudHJ5ICpl
Ow0KICBpbnQgaTsNCg0KICBmaWxlbmFtZSA9IGZuOw0KDQogIGZyZXMgPSBmb3BlbihmaWxl
bmFtZSwgIndiIik7DQogIGlmIChmcmVzID09IE5VTEwpDQogICAgZmF0YWwgKCJjYW4ndCBv
cGVuIGAlcycgZm9yIG91dHB1dDogJXMiLCBmaWxlbmFtZSwgc3RyZXJyb3IgKGVycm5vKSk7
DQogIA0KICAvKiBXcml0ZSAzMiBiaXQgcmVzb3VyY2Ugc2lnbmF0dXJlICovDQogIHdyaXRl
X3Jlc19kYXRhKHNpZ24sIHNpemVvZihzaWduKSwgMSk7DQoNCiAgLyogd3JpdGUgcmVzb3Vy
Y2VzICovDQoNCiAgbGFuZ3VhZ2UgPSAtMTsNCiAgd3JpdGVfcmVzX2RpcmVjdG9yeSAocmVz
ZGlyLCAoY29uc3Qgc3RydWN0IHJlc19pZCAqKSBOVUxMLA0KCQkgICAgICAgKGNvbnN0IHN0
cnVjdCByZXNfaWQgKikgTlVMTCwgJmxhbmd1YWdlLCAxKTsNCiAgDQogIC8qIGVuZCBmaWxl
IG9uIERXT1JEIGJvdW5kYXJ5ICovDQogIGZwb3MgPSBmdGVsbChmcmVzKTsNCiAgaWYgKGZw
b3MgJSA0KQ0KICAgIHdyaXRlX3Jlc19kYXRhKHNpZ24sIGZwb3MgJSA0LCAxKTsNCiAgDQog
IGZjbG9zZShmcmVzKTsNCn0NCg0KLyogUmVhZCBhIHJlc291cmNlIGVudHJ5LCByZXR1cm5z
IDAgd2hlbiBhbGwgcmVzb3VyY2VzIGFyZSByZWFkICovDQpzdGF0aWMgaW50DQpyZWFkX3Jl
c291cmNlX2VudHJ5KHZvaWQpDQp7DQogIHN0cnVjdCByZXNfaWQgdHlwZTsNCiAgc3RydWN0
IHJlc19pZCBuYW1lOw0KICBzdHJ1Y3QgcmVzX3Jlc19pbmZvIHJlc2luZm87DQogIHN0cnVj
dCByZXNfaGRyIHJlc2hkcjsNCiAgZW51bSByZXNfdHlwZSBydHlwZTsNCiAgbG9uZyB2ZXJz
aW9uOw0KICBsb25nIG47DQogIHZvaWQgKmJ1ZmY7DQoNCiAgc3RydWN0IHJlc19yZXNvdXJj
ZSAqcjsNCg0KICByZXNfYWxpZ25fZmlsZSgpOw0KDQogIC8qIFJlYWQgaGVhZGVyICovDQog
IGlmIChmcmVhZCgmcmVzaGRyLCBzaXplb2YocmVzaGRyKSwgMSwgZnJlcykgIT0gMSkNCiAg
ICByZXR1cm4gMDsNCiAgZnByaW50ZihzdGRlcnIsICJkYXRhX3NpemU6ICVkXG5oZWFkZXJf
c2l6ZTogJWRcbiIsDQoJICByZXNoZHIuZGF0YV9zaXplLCByZXNoZHIuaGVhZGVyX3NpemUp
Ow0KICANCiAgLyogcmVhZCByZXNvdXJjZSB0eXBlICovDQogIHJlYWRfcmVzX2lkKCZ0eXBl
KTsNCiAgLyogcmVhZCByZXNvdXJjZSBpZCovDQogIHJlYWRfcmVzX2lkKCZuYW1lKTsNCg0K
ICByZXNfYWxpZ25fZmlsZSgpOw0KDQogIC8qIFJlYWQgYWRkaXRpb25hbCByZXNvdXJjZSBo
ZWFkZXIgKi8NCiAgcmVhZF9yZXNfZGF0YSgmcmVzaW5mby52ZXJzaW9uLCBzaXplb2YocmVz
aW5mby52ZXJzaW9uKSwgMSk7DQogIHJlYWRfcmVzX2RhdGEoJnJlc2luZm8ubWVtZmxhZ3Ms
IHNpemVvZihyZXNpbmZvLm1lbWZsYWdzKSwgMSk7DQogIHJlYWRfcmVzX2RhdGEoJnJlc2lu
Zm8ubGFuZ3VhZ2UsIHNpemVvZihyZXNpbmZvLmxhbmd1YWdlKSwgMSk7DQogIHJlYWRfcmVz
X2RhdGEoJnZlcnNpb24sIHNpemVvZih2ZXJzaW9uKSwgMSk7DQogIHJlYWRfcmVzX2RhdGEo
JnJlc2luZm8uY2hhcmFjdGVyaXN0aWNzLCBzaXplb2YocmVzaW5mby5jaGFyYWN0ZXJpc3Rp
Y3MpLCAxKTsNCg0KICByZXNfYWxpZ25fZmlsZSgpOw0KDQogIC8qIEFsbG9jYXRlIGJ1ZmZl
ciBmb3IgZGF0YSAqLw0KICBidWZmID0gcmVzX2FsbG9jKHJlc2hkci5kYXRhX3NpemUpOw0K
ICAvKiBSZWFkIGRhdGEgKi8NCiAgcmVhZF9yZXNfZGF0YShidWZmLCByZXNoZHIuZGF0YV9z
aXplLCAxKTsNCiAgLyogQ29udmVydCBiaW5hcnkgZGF0YSB0byByZXNvdXJjZSAqLw0KICBy
ID0gYmluX3RvX3Jlcyh0eXBlLCBidWZmLCByZXNoZHIuZGF0YV9zaXplLCAwKTsNCiAgci0+
cmVzX2luZm8gPSByZXNpbmZvOw0KICAvKiBBZGQgcmVzb3VyY2UgdG8gcmVzb3VyY2UgZGly
ZWN0b3J5ICovDQogIHJlc19hZGRfcmVzb3VyY2UociwgJnR5cGUsICZuYW1lLCByZXNpbmZv
Lmxhbmd1YWdlLCAwKTsNCg0KICByZXR1cm4gMTsNCn0NCg0KLyogd3JpdGUgcmVzb3VyY2Ug
ZGlyZWN0b3J5IHRvIGJpbmFyeSByZXNvdXJjZSBmaWxlICovDQpzdGF0aWMgdm9pZA0Kd3Jp
dGVfcmVzX2RpcmVjdG9yeSAocmQsIHR5cGUsIG5hbWUsIGxhbmd1YWdlLCBsZXZlbCkNCiAg
ICAgY29uc3Qgc3RydWN0IHJlc19kaXJlY3RvcnkgKnJkOw0KICAgICBjb25zdCBzdHJ1Y3Qg
cmVzX2lkICp0eXBlOw0KICAgICBjb25zdCBzdHJ1Y3QgcmVzX2lkICpuYW1lOw0KICAgICBp
bnQgKmxhbmd1YWdlOw0KICAgICBpbnQgbGV2ZWw7DQp7DQogIGNvbnN0IHN0cnVjdCByZXNf
ZW50cnkgKnJlOw0KDQogIGZvciAocmUgPSByZC0+ZW50cmllczsgIHJlICE9IE5VTEw7IHJl
ID0gcmUtPm5leHQpDQogICAgew0KICAgICAgc3dpdGNoIChsZXZlbCkNCgl7DQoJY2FzZSAx
Og0KCSAgLyogSWYgd2UncmUgYXQgbGV2ZWwgMSwgdGhlIGtleSBvZiB0aGlzIHJlc291cmNl
IGlzIHRoZQ0KICAgICAgICAgICAgIHR5cGUuICBUaGlzIG5vcm1hbGx5IGR1cGxpY2F0ZXMg
dGhlIGluZm9ybWF0aW9uIHdlIGhhdmUNCiAgICAgICAgICAgICBzdG9yZWQgd2l0aCB0aGUg
cmVzb3VyY2UgaXRzZWxmLCBidXQgd2UgbmVlZCB0byByZW1lbWJlcg0KICAgICAgICAgICAg
IHRoZSB0eXBlIGlmIHRoaXMgaXMgYSB1c2VyIGRlZmluZSByZXNvdXJjZSB0eXBlLiAgKi8N
CgkgIHR5cGUgPSAmcmUtPmlkOw0KCSAgYnJlYWs7DQoNCgljYXNlIDI6DQoJICAvKiBJZiB3
ZSdyZSBhdCBsZXZlbCAyLCB0aGUga2V5IG9mIHRoaXMgcmVzb3VyY2UgaXMgdGhlIG5hbWUN
CgkgICAgIHdlIGFyZSBnb2luZyB0byB1c2UgaW4gdGhlIHJjIHByaW50b3V0LiAqLw0KCSAg
bmFtZSA9ICZyZS0+aWQ7DQoJICBicmVhazsNCg0KCWNhc2UgMzoNCgkgIC8qIElmIHdlJ3Jl
IGF0IGxldmVsIDMsIHRoZW4gdGhpcyBrZXkgcmVwcmVzZW50cyBhIGxhbmd1YWdlLg0KCSAg
ICAgVXNlIGl0IHRvIHVwZGF0ZSB0aGUgY3VycmVudCBsYW5ndWFnZS4gICovDQoJICBpZiAo
ISByZS0+aWQubmFtZWQNCgkgICAgICAmJiByZS0+aWQudS5pZCAhPSAqbGFuZ3VhZ2UNCgkg
ICAgICAmJiAocmUtPmlkLnUuaWQgJiAweGZmZmYpID09IHJlLT5pZC51LmlkKQ0KCSAgICB7
DQoJICAgICAgKmxhbmd1YWdlID0gcmUtPmlkLnUuaWQ7DQoJICAgIH0NCgkgIGJyZWFrOw0K
DQoJZGVmYXVsdDoNCgkgIGJyZWFrOw0KCX0NCg0KICAgICAgaWYgKHJlLT5zdWJkaXIpDQoJ
d3JpdGVfcmVzX2RpcmVjdG9yeSAocmUtPnUuZGlyLCB0eXBlLCBuYW1lLCBsYW5ndWFnZSwg
bGV2ZWwgKyAxKTsNCiAgICAgIGVsc2UNCgl7DQoJICBpZiAobGV2ZWwgPT0gMykNCgkgICAg
ew0KCSAgICAgIC8qIFRoaXMgaXMgdGhlIG5vcm1hbCBjYXNlOiB0aGUgdGhyZWUgbGV2ZWxz
IGFyZQ0KICAgICAgICAgICAgICAgICBUWVBFL05BTUUvTEFOR1VBR0UuICBOQU1FIHdpbGwg
aGF2ZSBiZWVuIHNldCBhdCBsZXZlbA0KICAgICAgICAgICAgICAgICAyLCBhbmQgcmVwcmVz
ZW50cyB0aGUgbmFtZSB0byB1c2UuICBXZSBwcm9iYWJseSBqdXN0DQogICAgICAgICAgICAg
ICAgIHNldCBMQU5HVUFHRSwgYW5kIGl0IHdpbGwgcHJvYmFibHkgbWF0Y2ggd2hhdCB0aGUN
CiAgICAgICAgICAgICAgICAgcmVzb3VyY2UgaXRzZWxmIHJlY29yZHMgaWYgYW55dGhpbmcu
ICAqLw0KCSAgICAgIHdyaXRlX3Jlc19yZXNvdXJjZSAodHlwZSwgbmFtZSwgcmUtPnUucmVz
LCBsYW5ndWFnZSk7DQoJICAgIH0NCgkgIGVsc2UNCgkgICAgew0KCSAgICAgIGZwcmludGYg
KHN0ZGVyciwgIi8vIFJlc291cmNlIGF0IHVuZXhwZWN0ZWQgbGV2ZWwgJWRcbiIsIGxldmVs
KTsNCgkgICAgICB3cml0ZV9yZXNfcmVzb3VyY2UgKHR5cGUsIChzdHJ1Y3QgcmVzX2lkICop
IE5VTEwsIHJlLT51LnJlcywNCgkJCQkgbGFuZ3VhZ2UpOw0KCSAgICB9DQoJfQ0KICAgIH0N
Cg0KfQ0KDQpzdGF0aWMgdm9pZA0Kd3JpdGVfcmVzX3Jlc291cmNlICh0eXBlLCBuYW1lLCBy
ZXMsIGxhbmd1YWdlKQ0KICAgICBjb25zdCBzdHJ1Y3QgcmVzX2lkICp0eXBlOw0KICAgICBj
b25zdCBzdHJ1Y3QgcmVzX2lkICpuYW1lOw0KICAgICBjb25zdCBzdHJ1Y3QgcmVzX3Jlc291
cmNlICpyZXM7DQogICAgIGludCAqbGFuZ3VhZ2U7DQp7DQogIGludCBydDsNCg0KICBzd2l0
Y2ggKHJlcy0+dHlwZSkNCiAgICB7DQogICAgZGVmYXVsdDoNCiAgICAgIGFib3J0ICgpOw0K
DQogICAgY2FzZSBSRVNfVFlQRV9BQ0NFTEVSQVRPUjoNCiAgICAgIHJ0ID0gUlRfQUNDRUxF
UkFUT1JTOw0KICAgICAgYnJlYWs7DQoNCiAgICBjYXNlIFJFU19UWVBFX0JJVE1BUDoNCiAg
ICAgIHJ0ID0gUlRfQklUTUFQOw0KICAgICAgYnJlYWs7DQoNCiAgICBjYXNlIFJFU19UWVBF
X0NVUlNPUjoNCiAgICAgIHJ0ID0gUlRfQ1VSU09SOw0KICAgICAgYnJlYWs7DQoNCiAgICBj
YXNlIFJFU19UWVBFX0dST1VQX0NVUlNPUjoNCiAgICAgIHJ0ID0gUlRfR1JPVVBfQ1VSU09S
Ow0KICAgICAgYnJlYWs7DQoNCiAgICBjYXNlIFJFU19UWVBFX0RJQUxPRzoNCiAgICAgIHJ0
ID0gUlRfRElBTE9HOw0KICAgICAgYnJlYWs7DQoNCiAgICBjYXNlIFJFU19UWVBFX0ZPTlQ6
DQogICAgICBydCA9IFJUX0ZPTlQ7DQogICAgICBicmVhazsNCg0KICAgIGNhc2UgUkVTX1RZ
UEVfRk9OVERJUjoNCiAgICAgIHJ0ID0gUlRfRk9OVERJUjsNCiAgICAgIGJyZWFrOw0KDQog
ICAgY2FzZSBSRVNfVFlQRV9JQ09OOg0KICAgICAgcnQgPSBSVF9JQ09OOw0KICAgICAgYnJl
YWs7DQoNCiAgICBjYXNlIFJFU19UWVBFX0dST1VQX0lDT046DQogICAgICBydCA9IFJUX0dS
T1VQX0lDT047DQogICAgICBicmVhazsNCg0KICAgIGNhc2UgUkVTX1RZUEVfTUVOVToNCiAg
ICAgIHJ0ID0gUlRfTUVOVTsNCiAgICAgIGJyZWFrOw0KDQogICAgY2FzZSBSRVNfVFlQRV9N
RVNTQUdFVEFCTEU6DQogICAgICBydCA9IFJUX01FU1NBR0VUQUJMRTsNCiAgICAgIGJyZWFr
Ow0KDQogICAgY2FzZSBSRVNfVFlQRV9SQ0RBVEE6DQogICAgICBydCA9IFJUX1JDREFUQTsN
CiAgICAgIGJyZWFrOw0KDQogICAgY2FzZSBSRVNfVFlQRV9TVFJJTkdUQUJMRToNCiAgICAg
IHJ0ID0gUlRfU1RSSU5HOw0KICAgICAgYnJlYWs7DQoNCiAgICBjYXNlIFJFU19UWVBFX1VT
RVJEQVRBOg0KICAgICAgcnQgPSAwOw0KICAgICAgYnJlYWs7DQoNCiAgICBjYXNlIFJFU19U
WVBFX1ZFUlNJT05JTkZPOg0KICAgICAgcnQgPSBSVF9WRVJTSU9OOw0KICAgICAgYnJlYWs7
DQogICAgfQ0KDQogIGlmIChydCAhPSAwDQogICAgICAmJiB0eXBlICE9IE5VTEwNCiAgICAg
ICYmICh0eXBlLT5uYW1lZCB8fCB0eXBlLT51LmlkICE9IHJ0KSkNCiAgICB7DQogICAgICBm
cHJpbnRmIChzdGRlcnIsICIvLyBVbmV4cGVjdGVkIHJlc291cmNlIHR5cGUgbWlzbWF0Y2g6
ICIpOw0KICAgICAgcmVzX2lkX3ByaW50IChzdGRlcnIsICp0eXBlLCAxKTsNCiAgICAgIGZw
cmludGYgKHN0ZGVyciwgIiAhPSAlZCIsIHJ0KTsNCiAgICAgIGFib3J0KCk7DQogICAgfQ0K
DQogIHdyaXRlX3Jlc19iaW4ocmVzLCB0eXBlLCBuYW1lLCAmcmVzLT5yZXNfaW5mbyk7DQog
IHJldHVybjsNCn0NCg0KLyogV3JpdGUgYSByZXNvdXJjZSBpbiBiaW5hcnkgcmVzb3VyY2Ug
Zm9ybWF0ICovDQpzdGF0aWMgdm9pZA0Kd3JpdGVfcmVzX2JpbihyZXMsIHR5cGUsIG5hbWUs
IHJlc2luZm8pDQogICAgIGNvbnN0IHN0cnVjdCByZXNfcmVzb3VyY2UgKnJlczsNCiAgICAg
Y29uc3Qgc3RydWN0IHJlc19pZCAqdHlwZTsNCiAgICAgY29uc3Qgc3RydWN0IHJlc19pZCAq
bmFtZTsNCiAgICAgY29uc3Qgc3RydWN0IHJlc19yZXNfaW5mbyAqcmVzaW5mbzsNCnsNCiAg
dW5zaWduZWQgbG9uZyBkYXRhc2l6ZSA9IDA7DQogIGNvbnN0IHN0cnVjdCBiaW5kYXRhICpi
aW5fcmVwLCAqZGF0YTsNCg0KICBiaW5fcmVwID0gcmVzX3RvX2JpbihyZXMsIDApOw0KICBm
b3IgKGRhdGEgPSBiaW5fcmVwOyBkYXRhICE9IE5VTEw7IGRhdGEgPSBkYXRhLT5uZXh0KQ0K
ICAgIGRhdGFzaXplICs9IGRhdGEtPmxlbmd0aDsNCiAgDQogIHdyaXRlX3Jlc19oZWFkZXIo
ZGF0YXNpemUsIHR5cGUsIG5hbWUsIHJlc2luZm8pOw0KDQogIGZvciAoZGF0YSA9IGJpbl9y
ZXA7IGRhdGEgIT0gTlVMTDsgZGF0YSA9IGRhdGEtPm5leHQpDQogICAgd3JpdGVfcmVzX2Rh
dGEoZGF0YS0+ZGF0YSwgZGF0YS0+bGVuZ3RoLCAxKTsNCn0NCg0KLyogR2V0IG51bWJlciBv
ZiBieXRlcyBuZWVkZWQgdG8gc3RvcmUgYW4gaWQgaW4gYmluYXJ5IGZvcm1hdCAqLw0Kc3Rh
dGljIHVuc2lnbmVkIGxvbmcNCmdldF9pZF9zaXplKGlkKQ0KICAgICBjb25zdCBzdHJ1Y3Qg
cmVzX2lkICppZDsNCnsNCiAgaWYgKGlkLT5uYW1lZCkNCiAgICByZXR1cm4gc2l6ZW9mKHVu
aWNoYXIpICogKGlkLT51Lm4ubGVuZ3RoICsgMSk7DQogIGVsc2UNCiAgICByZXR1cm4gc2l6
ZW9mKHVuaWNoYXIpICogMjsNCn0NCg0KLyogV3JpdGUgYSByZXNvdXJjZSBoZWFkZXIgKi8N
CnN0YXRpYyB2b2lkDQp3cml0ZV9yZXNfaGVhZGVyKGRhdGFzaXplLHR5cGUsbmFtZSxyZXNp
bmZvKQ0KICAgICB1bnNpZ25lZCBsb25nIGRhdGFzaXplOw0KICAgICBjb25zdCBzdHJ1Y3Qg
cmVzX2lkICp0eXBlOw0KICAgICBjb25zdCBzdHJ1Y3QgcmVzX2lkICpuYW1lOw0KICAgICBj
b25zdCBzdHJ1Y3QgcmVzX3Jlc19pbmZvICpyZXNpbmZvOw0Kew0KICBzdHJ1Y3QgcmVzX2hk
ciByZXNoZHI7DQogIHJlc2hkci5kYXRhX3NpemUgPSBkYXRhc2l6ZTsNCiAgcmVzaGRyLmhl
YWRlcl9zaXplID0gMjQgKyBnZXRfaWRfc2l6ZSh0eXBlKSArIGdldF9pZF9zaXplKG5hbWUp
Ow0KDQogIHJlc19hbGlnbl9maWxlKCk7DQogIHdyaXRlX3Jlc19kYXRhKCZyZXNoZHIsIHNp
emVvZihyZXNoZHIpLCAxKTsNCiAgd3JpdGVfcmVzX2lkKHR5cGUpOw0KICB3cml0ZV9yZXNf
aWQobmFtZSk7DQoNCiAgcmVzX2FsaWduX2ZpbGUoKTsNCg0KICB3cml0ZV9yZXNfaW5mbyhy
ZXNpbmZvKTsNCiAgcmVzX2FsaWduX2ZpbGUoKTsNCn0NCg0KDQovKiBXcml0ZSBkYXRhIHRv
IGZpbGUsIGFib3J0IG9uIGZhaWx1cmUgKi8NCnN0YXRpYyB2b2lkDQp3cml0ZV9yZXNfZGF0
YShkYXRhLCBzaXplLCBjb3VudCkNCiAgICAgY29uc3Qgdm9pZCAqZGF0YTsNCiAgICAgc2l6
ZV90IHNpemU7DQogICAgIGludCBjb3VudDsNCnsNCiAgaWYgKGZ3cml0ZShkYXRhLCBzaXpl
LCBjb3VudCwgZnJlcykgIT0gY291bnQpDQogICAgZmF0YWwoIiVzOiAlczogY291bGQgbm90
IHdyaXRlIHRvIGZpbGUiLCBwcm9ncmFtX25hbWUsIGZpbGVuYW1lKTsNCn0NCg0KLyogUmVh
ZCBkYXRhIGZyb20gZmlsZSwgYWJvcnQgb24gZmFpbHVyZSAqLw0Kc3RhdGljIHZvaWQNCnJl
YWRfcmVzX2RhdGEoZGF0YSwgc2l6ZSwgY291bnQpDQogICAgIHZvaWQgKmRhdGE7DQogICAg
IHNpemVfdCBzaXplOw0KICAgICBpbnQgY291bnQ7DQp7DQogIGlmIChmcmVhZChkYXRhLCBz
aXplLCBjb3VudCwgZnJlcykgIT0gY291bnQpDQogICAgZmF0YWwoIiVzOiAlczogdW5leHBl
Y3RlZCBlbmQgb2YgZmlsZSIsIHByb2dyYW1fbmFtZSwgZmlsZW5hbWUpOw0KfQ0KDQovKiBX
cml0ZSBhIHJlc291cmNlIGlkICovDQpzdGF0aWMgdm9pZA0Kd3JpdGVfcmVzX2lkKGlkKQ0K
ICAgICBjb25zdCBzdHJ1Y3QgcmVzX2lkICppZDsNCnsNCiAgaWYgKGlkLT5uYW1lZCkNCiAg
ICB7DQogICAgICB1bnNpZ25lZCBsb25nIGxlbiA9IGlkLT51Lm4ubGVuZ3RoOw0KICAgICAg
dW5pY2hhciBudWxsX3Rlcm0gPSAwOw0KICAgICAgd3JpdGVfcmVzX2RhdGEoaWQtPnUubi5u
YW1lLCBsZW4gKiBzaXplb2YodW5pY2hhciksIDEpOw0KICAgICAgd3JpdGVfcmVzX2RhdGEo
Jm51bGxfdGVybSwgc2l6ZW9mKG51bGxfdGVybSksIDEpOw0KICAgIH0NCiAgZWxzZQ0KICAg
IHsNCiAgICAgIHVuc2lnbmVkIHNob3J0IGkgPSAweEZGRkY7DQogICAgICB3cml0ZV9yZXNf
ZGF0YSgmaSwgc2l6ZW9mKGkpLCAxKTsNCiAgICAgIGkgPSBpZC0+dS5pZDsNCiAgICAgIHdy
aXRlX3Jlc19kYXRhKCZpLCBzaXplb2YoaSksIDEpOw0KICAgIH0NCn0NCg0KLyogV3JpdGUg
cmVzb3VyY2UgaW5mbyAqLw0Kc3RhdGljIHZvaWQNCndyaXRlX3Jlc19pbmZvKGluZm8pDQog
ICAgIGNvbnN0IHN0cnVjdCByZXNfcmVzX2luZm8gKmluZm87DQp7DQogIHdyaXRlX3Jlc19k
YXRhKCZpbmZvLT52ZXJzaW9uLCBzaXplb2YoaW5mby0+dmVyc2lvbiksIDEpOw0KICB3cml0
ZV9yZXNfZGF0YSgmaW5mby0+bWVtZmxhZ3MsIHNpemVvZihpbmZvLT5tZW1mbGFncyksIDEp
Ow0KICB3cml0ZV9yZXNfZGF0YSgmaW5mby0+bGFuZ3VhZ2UsIHNpemVvZihpbmZvLT5sYW5n
dWFnZSksIDEpOw0KICB3cml0ZV9yZXNfZGF0YSgmaW5mby0+dmVyc2lvbiwgc2l6ZW9mKGlu
Zm8tPnZlcnNpb24pLCAxKTsNCiAgd3JpdGVfcmVzX2RhdGEoJmluZm8tPmNoYXJhY3Rlcmlz
dGljcywgc2l6ZW9mKGluZm8tPmNoYXJhY3RlcmlzdGljcyksIDEpOw0KfQ0KDQovKiByZWFk
IGEgcmVzb3VyY2UgaWRlbnRpZmllciAqLw0Kdm9pZCByZWFkX3Jlc19pZChpZCkNCiAgICAg
c3RydWN0IHJlc19pZCAqaWQ7DQp7DQogIHVuc2lnbmVkIHNob3J0IG9yZDsNCiAgdW5pY2hh
ciAqaWRfcyA9IE5VTEw7DQogIGludCBsZW47DQoNCiAgcmVhZF9yZXNfZGF0YSgmb3JkLCBz
aXplb2Yob3JkKSwgMSk7DQogIGlmIChvcmQgPT0gMHhGRkZGKSAvKiBhbiBvcmRpbmFsIGlk
ICovDQogICAgew0KICAgICAgcmVhZF9yZXNfZGF0YSgmb3JkLCBzaXplb2Yob3JkKSwgMSk7
DQogICAgICBpZC0+bmFtZWQgPSAwOw0KICAgICAgaWQtPnUuaWQgPSBvcmQ7DQogICAgfQ0K
ICBlbHNlIC8qIG5hbWVkIGlkICovDQogICAgew0KICAgICAgaWYgKGZzZWVrKGZyZXMsIC1z
aXplb2Yob3JkKSwgU0VFS19DVVIpICE9IDApDQoJZmF0YWwoIiVzOiAlczogY291bGQgbm90
IHNlZWsgaW4gZmlsZSIsIHByb2dyYW1fbmFtZSwgZmlsZW5hbWUpOw0KICAgICAgaWRfcyA9
IHJlYWRfdW5pc3RyaW5nKCZsZW4pOw0KICAgICAgaWQtPm5hbWVkID0gMTsNCiAgICAgIGlk
LT51Lm4ubGVuZ3RoID0gbGVuOw0KICAgICAgaWQtPnUubi5uYW1lID0gaWRfczsNCiAgICB9
DQp9DQoNCi8qIFJlYWQgYSBudWxsIHRlcm1pbmF0ZWQgVU5JQ09ERSBzdHJpbmcgKi8NCnN0
YXRpYyB1bmljaGFyICoNCnJlYWRfdW5pc3RyaW5nKGxlbikNCiAgICAgaW50ICpsZW47DQp7
DQogIHVuaWNoYXIgKnM7DQogIHVuaWNoYXIgYzsNCiAgdW5pY2hhciAqcDsNCiAgaW50IG47
DQogIGludCBsOw0KDQogICpsZW4gPSAwOw0KICBsID0gMDsNCiAgDQogIC8qIHRoZXJlIGFy
ZSBoYXJkbHkgYW55IG5hbWVzIGxvbmdlciB0aGFuIDI1NiBjaGFyYWN0ZXJzICovDQogIHAg
PSBzID0gKHVuaWNoYXIgKikgeG1hbGxvYyhzaXplb2YodW5pY2hhcikgKiAyNTYpOyANCiAg
ZG8gDQogICAgew0KICAgICAgcmVhZF9yZXNfZGF0YSgmYywgc2l6ZW9mKGMpLCAxKTsNCiAg
ICAgICpwKysgPSBjOw0KICAgICAgaWYgKGMgIT0gMCkNCglsKys7DQogICAgfQ0KICB3aGls
ZSAoYyAhPSAwKTsNCiAgKmxlbiA9IGw7DQogIHJldHVybiBzOw0KfQ0KDQovKiBhbGlnbiBm
aWxlIG9uIERXT1JEIGJvdW5kYXJ5ICovDQpzdGF0aWMgdm9pZA0KcmVzX2FsaWduX2ZpbGUo
dm9pZCkNCnsNCiAgaWYgKGZzZWVrKGZyZXMsIGZ0ZWxsKGZyZXMpICUgNCwgU0VFS19DVVIp
ICE9IDApDQogICAgZmF0YWwoIiVzOiAlczogdW5hYmxlIHRvIGFsaWduIGZpbGUiLCBwcm9n
cmFtX25hbWUsIGZpbGVuYW1lKTsNCn0NCg0KLyogQ2hlY2sgaWYgZmlsZSBpcyBhIHdpbjMy
IGJpbmFyeSByZXNvdXJjZSBmaWxlLCBpZiBzbw0KICAgc2tpcCBwYXN0IHRoZSBudWxsIHJl
c291cmNlLiBSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCwgLTEgb24NCiAgIGVycm9yLg0KICov
DQpzdGF0aWMgdm9pZA0Kc2tpcF9udWxsX3Jlc291cmNlKHZvaWQpDQp7DQogIHN0cnVjdCBy
ZXNfaGRyIHJlc2hkciA9IHswLDB9Ow0KICByZWFkX3Jlc19kYXRhKCZyZXNoZHIsIHNpemVv
ZihyZXNoZHIpLCAxKTsNCiAgaWYgKChyZXNoZHIuZGF0YV9zaXplICE9IDApIHx8IChyZXNo
ZHIuaGVhZGVyX3NpemUgIT0gMHgyMCkpDQogICAgZ290byBza2lwX2VycjsNCiAgDQogIC8q
IFN1YnRyYWN0IHNpemUgb2YgSGVhZGVyU2l6ZSBhbmQgRGF0YVNpemUgKi8NCiAgaWYgKGZz
ZWVrKGZyZXMsIHJlc2hkci5oZWFkZXJfc2l6ZSAtIDgsIFNFRUtfQ1VSKSAhPSAwKQ0KICAg
IGdvdG8gc2tpcF9lcnI7DQoNCiAgcmV0dXJuOw0KDQpza2lwX2VycjoNCiAgZnByaW50Zihz
dGRlcnIsICIlczogJXM6IE5vdCBhIHZhbGlkIFdJTjMyIHJlc291cmNlIGZpbGVcbiIsIHBy
b2dyYW1fbmFtZSwNCgkgIGZpbGVuYW1lKTsNCiAgeGV4aXQoMSk7DQp9DQoNCi8qIEFkZCBh
IHJlc291cmNlIHRvIHJlc291cmNlIGRpcmVjdG9yeSAqLw0Kdm9pZA0KcmVzX2FkZF9yZXNv
dXJjZSAocix0eXBlLGlkLGxhbmd1YWdlLGR1cG9rKQ0KICAgICBzdHJ1Y3QgcmVzX3Jlc291
cmNlICpyOw0KICAgICBjb25zdCBzdHJ1Y3QgcmVzX2lkICp0eXBlOw0KICAgICBjb25zdCBz
dHJ1Y3QgcmVzX2lkICppZDsNCiAgICAgaW50IGxhbmd1YWdlOw0KICAgICBpbnQgZHVwb2s7
DQp7DQogIHN0cnVjdCByZXNfaWQgYVszXTsNCg0KICBhWzBdID0gKnR5cGU7DQogIGFbMV0g
PSAqaWQ7DQogIGFbMl0ubmFtZWQgPSAwOw0KICBhWzJdLnUuaWQgPSBsYW5ndWFnZTsNCiAg
cmVzX2FwcGVuZF9yZXNvdXJjZSAoJnJlc291cmNlcywgciwgMywgYSwgZHVwb2spOw0KfQ0K
DQovKiBBcHBlbmQgYSByZXNvdXJjZSB0byByZXNvdXJjZSBkaXJlY3RvcnkuDQogICBUaGlz
IGlzIGp1c3QgY29waWVkIGZyb20gZGVmaW5lX3Jlc291cmNlDQogICBhbmQgbW9kaWZpZWQg
dG8gYWRkIGFuIGV4aXN0aW5nIHJlc291cmNlLg0KKi8NCnZvaWQNCnJlc19hcHBlbmRfcmVz
b3VyY2UgKHJlc291cmNlcywgcmVzb3VyY2UsIGNpZHMsIGlkcywgZHVwb2spDQogICAgIHN0
cnVjdCByZXNfZGlyZWN0b3J5ICoqcmVzb3VyY2VzOw0KICAgICBzdHJ1Y3QgcmVzX3Jlc291
cmNlICpyZXNvdXJjZTsNCiAgICAgaW50IGNpZHM7DQogICAgIGNvbnN0IHN0cnVjdCByZXNf
aWQgKmlkczsNCiAgICAgaW50IGR1cG9rOw0Kew0KICBzdHJ1Y3QgcmVzX2VudHJ5ICpyZSA9
IE5VTEw7DQogIGludCBpOw0KDQogIGFzc2VydCAoY2lkcyA+IDApOw0KICBmb3IgKGkgPSAw
OyBpIDwgY2lkczsgaSsrKQ0KICAgIHsNCiAgICAgIHN0cnVjdCByZXNfZW50cnkgKipwcDsN
Cg0KICAgICAgaWYgKCpyZXNvdXJjZXMgPT0gTlVMTCkNCgl7DQoJICBzdGF0aWMgdW5zaWdu
ZWQgbG9uZyB0aW1ldmFsOw0KDQoJICAvKiBVc2UgdGhlIHNhbWUgdGltZXN0YW1wIGZvciBl
dmVyeSByZXNvdXJjZSBjcmVhdGVkIGluIGENCiAgICAgICAgICAgICBzaW5nbGUgcnVuLiAg
Ki8NCgkgIGlmICh0aW1ldmFsID09IDApDQoJICAgIHRpbWV2YWwgPSB0aW1lIChOVUxMKTsN
Cg0KCSAgKnJlc291cmNlcyA9ICgoc3RydWN0IHJlc19kaXJlY3RvcnkgKikNCgkJCXJlc19h
bGxvYyAoc2l6ZW9mICoqcmVzb3VyY2VzKSk7DQoJICAoKnJlc291cmNlcyktPmNoYXJhY3Rl
cmlzdGljcyA9IDA7DQoJICAoKnJlc291cmNlcyktPnRpbWUgPSB0aW1ldmFsOw0KCSAgKCpy
ZXNvdXJjZXMpLT5tYWpvciA9IDA7DQoJICAoKnJlc291cmNlcyktPm1pbm9yID0gMDsNCgkg
ICgqcmVzb3VyY2VzKS0+ZW50cmllcyA9IE5VTEw7DQoJfQ0KDQogICAgICBmb3IgKHBwID0g
JigqcmVzb3VyY2VzKS0+ZW50cmllczsgKnBwICE9IE5VTEw7IHBwID0gJigqcHApLT5uZXh0
KQ0KCWlmIChyZXNfaWRfY21wICgoKnBwKS0+aWQsIGlkc1tpXSkgPT0gMCkNCgkgIGJyZWFr
Ow0KDQogICAgICBpZiAoKnBwICE9IE5VTEwpDQoJcmUgPSAqcHA7DQogICAgICBlbHNlDQoJ
ew0KCSAgcmUgPSAoc3RydWN0IHJlc19lbnRyeSAqKSByZXNfYWxsb2MgKHNpemVvZiAqcmUp
Ow0KCSAgcmUtPm5leHQgPSBOVUxMOw0KCSAgcmUtPmlkID0gaWRzW2ldOw0KCSAgaWYgKChp
ICsgMSkgPCBjaWRzKQ0KCSAgICB7DQoJICAgICAgcmUtPnN1YmRpciA9IDE7DQoJICAgICAg
cmUtPnUuZGlyID0gTlVMTDsNCgkgICAgfQ0KCSAgZWxzZQ0KCSAgICB7DQoJICAgICAgcmUt
PnN1YmRpciA9IDA7DQoJICAgICAgcmUtPnUucmVzID0gTlVMTDsNCgkgICAgfQ0KDQoJICAq
cHAgPSByZTsNCgl9DQoNCiAgICAgIGlmICgoaSArIDEpIDwgY2lkcykNCgl7DQoJICBpZiAo
ISByZS0+c3ViZGlyKQ0KCSAgICB7DQoJICAgICAgZnByaW50ZiAoc3RkZXJyLCAiJXM6ICIs
IHByb2dyYW1fbmFtZSk7DQoJICAgICAgcmVzX2lkc19wcmludCAoc3RkZXJyLCBpLCBpZHMp
Ow0KCSAgICAgIGZwcmludGYgKHN0ZGVyciwgIjogZXhwZWN0ZWQgdG8gYmUgYSBkaXJlY3Rv
cnlcbiIpOw0KCSAgICAgIHhleGl0ICgxKTsNCgkgICAgfQ0KDQoJICByZXNvdXJjZXMgPSAm
cmUtPnUuZGlyOw0KCX0NCiAgICB9DQoNCiAgaWYgKHJlLT5zdWJkaXIpDQogICAgew0KICAg
ICAgZnByaW50ZiAoc3RkZXJyLCAiJXM6ICIsIHByb2dyYW1fbmFtZSk7DQogICAgICByZXNf
aWRzX3ByaW50IChzdGRlcnIsIGNpZHMsIGlkcyk7DQogICAgICBmcHJpbnRmIChzdGRlcnIs
ICI6IGV4cGVjdGVkIHRvIGJlIGEgbGVhZlxuIik7DQogICAgICB4ZXhpdCAoMSk7DQogICAg
fQ0KDQogIGlmIChyZS0+dS5yZXMgIT0gTlVMTCkNCiAgICB7DQogICAgICBpZiAoZHVwb2sp
DQoJcmV0dXJuOw0KDQogICAgICBmcHJpbnRmIChzdGRlcnIsICIlczogd2FybmluZzogIiwg
cHJvZ3JhbV9uYW1lKTsNCiAgICAgIHJlc19pZHNfcHJpbnQgKHN0ZGVyciwgY2lkcywgaWRz
KTsNCiAgICAgIGZwcmludGYgKHN0ZGVyciwgIjogZHVwbGljYXRlIHZhbHVlXG4iKTsNCiAg
ICB9DQoNCiAgcmUtPnUucmVzID0gcmVzb3VyY2U7DQp9DQoAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByY3Bh
cnNlLmRpZmYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMTAwNjQ0IAAgICA3
NjQgACAgIDE0NCAAICAgICAgICA2NDEgIDY1NjQzMTQ1MzIgIDExNTE2ACAwAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABldmVyeW9uZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAACoqKiByY3BhcnNlLnkub3JpZwlGcmkgTWF5IDAxIDE3
OjQ5OjM2IDE5OTgNCi0tLSByY3BhcnNlLnkJV2VkIEF1ZyAxMiAxNTozMToyMCAxOTk4DQoq
KioqKioqKioqKioqKioNCioqKiA5ODgsOTkzICoqKioNCi0tLSA5ODgsOTk3IC0tLS0NCiAg
CSAgew0KICAJICAgICQkID0gZGVmaW5lX21lbnVpdGVtICgkMiwgJDMsICQ0LCAkNSwgMCwg
TlVMTCk7DQogIAkgIH0NCisgCXwgTUVOVUlURU0gU0VQQVJBVE9SDQorICAgICAgICAgICB7
DQorIAkgICAgJCQgPSBkZWZpbmVfbWVudWl0ZW0gKE5VTEwsIDAsIDAsIDAsIDAsIE5VTEwp
Ow0KKyAJICB9DQogIAl8IFBPUFVQIFFVT1RFRFNUUklORyBCRUcgbWVudWV4aXRlbXMgRU5E
DQogIAkgIHsNCiAgCSAgICAkJCA9IGRlZmluZV9tZW51aXRlbSAoJDIsIDAsIDAsIDAsIDAs
ICQ0KTsNCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcmouYwAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADEwMDY0NCAAICAgNzY0
IAAgICAxNDQgACAgICAgICA2MDI0ICA2NTY0MzEzNjM0ICAxMDAyNwAgMAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAZXZlcnlvbmUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAvKg0KICByaiAtIEEgcHJvZ3JhbSB0byBqb2luIFdJTjMy
IHJlc291cmNlIGZpbGVzIHRvIG9uZSBzaW5nbGUgZmlsZQ0KICANCiAgVGhpcyBwcm9ncmFt
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBtYXkgcmVkaXN0cmlidXRlIGl0IHVuZGVyIHRoZQ0K
ICB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIHByb2dy
YW0gaGFzDQogIGFic29sdXRlbHkgbm8gd2FycmFudHkuDQogIA0KICBUaGlzIHByb2dyYW0g
dG8gam9pbnMgc2V2ZXJhbCAuUkVTIGZpbGVzIGludG8gb25lIHNpbmdsZSBmaWxlIC5SRVMg
ZmlsZS4NCg0KKi8NCg0KI2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8bGltaXRzLmg+
DQojaW5jbHVkZSA8c3RyaW5nLmg+DQojaW5jbHVkZSA8c3RkbGliLmg+DQoNCiNpbmNsdWRl
ICJyai5oIg0KDQojaWZuZGVmIFBBVEhfTUFYDQojZGVmaW5lIFBBVEhfTUFYIDI2MA0KI2Vu
ZGlmIC8qIFBBVEhfTUFYICovDQoNCi8qIE91dHB1dCBmaWxlICovDQpGSUxFICpmb3V0ID0g
TlVMTDsNCg0KLyogTmFtZSBvZiBvdXRwdXQgZmlsZSAqLw0KY2hhciBvdXRwdXRfZmlsZW5h
bWVbUEFUSF9NQVhdID0gIiI7DQoNCmNoYXIgKnByZ19uYW1lOw0KY2hhciAqY3VycmVudF9m
aWxlID0gTlVMTDsNCg0Kdm9pZCBhYm9ydF9taXNzaW5nX291dHB1dCgpOw0Kdm9pZCBhYm9y
dF9lcnJvcihjb25zdCBjaGFyICptc2cpOw0Kdm9pZCBhZGRfZmlsZShjaGFyICpmaWxlbmFt
ZSwgaW50IHNraXApOw0Kdm9pZCBza2lwX251bGxyZXNvdXJjZShGSUxFICpmaW4pOw0KDQpp
bnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQ0Kew0KCWNoYXIgKmZpbGVuYW1lOw0K
CWludCBpOw0KCS8qIE51bWJlciBvZiBpbnB1dCBmaWxlcyAqLw0KCWludCBuX2lucHV0X2Zp
bGVzID0gMDsNCg0KCXByZ19uYW1lID0gYXJndlswXTsNCg0KCWlmIChhcmdjIDwgMikNCgl7
DQoJCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6ICVzIC1vIG91dHB1dCBGSUxFLi4uXG4iLCBw
cmdfbmFtZSk7DQoJCWV4aXQoMSk7DQoJfQ0KDQoJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkr
KykNCgl7DQoJCWZpbGVuYW1lID0gYXJndltpXTsNCgkJaWYgKHN0cm5jbXAoIi1vIiwgZmls
ZW5hbWUsIDIpID09IDApDQoJCXsNCgkJCWlmIChmaWxlbmFtZVsyXSAhPSAnXDAnKQ0KCQkJ
ew0KCQkJCXN0cmNweShvdXRwdXRfZmlsZW5hbWUsIGZpbGVuYW1lKzIpOw0KCQkJCWFyZ3Zb
aV0gPSBOVUxMOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCWFyZ3ZbaV0gPSBOVUxMOw0K
CQkJCWlmIChhcmd2W2krMV0gIT0gTlVMTCkNCgkJCQl7DQoJCQkJCXN0cmNweShvdXRwdXRf
ZmlsZW5hbWUsIGFyZ3ZbKytpXSk7DQoJCQkJCWFyZ3ZbaV0gPSBOVUxMOw0KCQkJCX0NCgkJ
CQllbHNlDQoJCQkJCWFib3J0X21pc3Npbmdfb3V0cHV0KCk7DQoJCQl9DQoJCQlmb3V0ID0g
Zm9wZW4ob3V0cHV0X2ZpbGVuYW1lLCAidyIpOw0KCQkJYnJlYWs7DQoJCX0NCgl9DQoNCglp
ZiAoZm91dCA9PSBOVUxMKQ0KCQlhYm9ydF9taXNzaW5nX291dHB1dCgpOw0KDQoJZm9yIChp
ID0gMTsgaSA8IGFyZ2M7IGkrKykNCgl7DQoJCWlmIChhcmd2W2ldICE9IE5VTEwpDQoJCXsN
CgkJCWN1cnJlbnRfZmlsZSA9IGFyZ3ZbaV07DQoJCQlhZGRfZmlsZShjdXJyZW50X2ZpbGUs
IG5faW5wdXRfZmlsZXMgIT0gMCk7DQoJCQluX2lucHV0X2ZpbGVzKys7DQoJCX0NCgl9DQoJ
ZmNsb3NlKGZvdXQpOw0KCXJldHVybiAwOw0KfQ0KDQp2b2lkIGFib3J0X21pc3Npbmdfb3V0
cHV0KCkNCnsNCglmcHJpbnRmKHN0ZGVyciwgIiVzOiBNaXNzaW5nIG91dHB1dCBmaWxlXG4i
LCBwcmdfbmFtZSk7DQoJZXhpdCgxKTsNCn0NCg0Kdm9pZCBhYm9ydF9lcnJvcihjb25zdCBj
aGFyICptc2cpDQp7DQoJZnByaW50ZihzdGRlcnIsICIlczogJXM6ICVzXG4iLCBwcmdfbmFt
ZSwgY3VycmVudF9maWxlLCBtc2cpOw0KCWV4aXQoMSk7DQp9DQoNCi8qIEFkZCBhIHJlc291
cmNlIGZpbGUgdG8gb3V0cHV0IGZpbGUgKi8NCnZvaWQgYWRkX2ZpbGUoY2hhciAqZmlsZW5h
bWUsIGludCBza2lwKQ0Kew0KCXZvaWQgKmJ1ZmY7DQoJaW50IG5yZWFkOw0KCWxvbmcgZnBv
czsNCglGSUxFICpmaW47DQoNCglidWZmID0gbWFsbG9jKEJVRkZfU0laRSk7DQoJaWYgKGJ1
ZmYgPT0gTlVMTCkNCgl7DQoJCXBlcnJvcihOVUxMKTsNCgkJZXhpdCgxKTsNCgl9DQoNCglm
aW4gPSBmb3BlbihmaWxlbmFtZSwgInJiIik7DQoJaWYgKGZpbiA9PSBOVUxMKQ0KCXsNCgkJ
cGVycm9yKGZpbGVuYW1lKTsNCgkJZXhpdCgxKTsNCgl9DQoNCglpZiAoc2tpcCkNCgkJc2tp
cF9udWxscmVzb3VyY2UoZmluKTsNCg0KCWRvIHsNCgkJbnJlYWQgPSBmcmVhZChidWZmLCAx
LCBCVUZGX1NJWkUsIGZpbik7DQoJCWlmIChmd3JpdGUoYnVmZiwgMSwgbnJlYWQsIGZvdXQp
ICE9IG5yZWFkKQ0KCQl7DQoJCQlwZXJyb3IoZmlsZW5hbWUpOw0KCQkJZXhpdCgxKTsNCgkJ
fQ0KCX0gd2hpbGUgKG5yZWFkID09IEJVRkZfU0laRSk7DQoNCglmcG9zID0gZnRlbGwoZm91
dCk7DQoJaWYgKGZwb3MgJSA0KQ0KCSAgew0KCSAgICB1bnNpZ25lZCBjaGFyIHRlcm1bXSA9
IHswLDAsMH07DQoJICAgIGZ3cml0ZSh0ZXJtLCBmcG9zICUgNCwgMSwgZm91dCk7DQoJICB9
DQoNCglmY2xvc2UoZmluKTsNCglmcmVlKGJ1ZmYpOw0KfQ0KDQovKg0KCVNraXBzIHRoZSBu
dWxsIHJlc291cmNlIGF0IHRoZSBoZWFkIG9mIGEgV0lOMzIgcmVzb3VyY2UgZmlsZS4NCiov
DQp2b2lkIHNraXBfbnVsbHJlc291cmNlKEZJTEUgKmZpbikNCnsNCglyc3JjX2hkciBoZHI7
DQoNCglpZiAoZnJlYWQoJmhkciwgMSwgc2l6ZW9mKGhkciksIGZpbikgIT0gc2l6ZW9mKGhk
cikpDQoJCWFib3J0X2Vycm9yKCJVbmV4cGVjdGVkIGVuZCBvZiBmaWxlIik7DQoJaWYgKCAo
aGRyLkRhdGFTaXplICE9IDApIHx8IChoZHIuSGVhZGVyU2l6ZSAhPSAweDIwKSApDQoJCWFi
b3J0X2Vycm9yKCJOb3QgYSB2YWxpZCBXSU4zMiByZXNvdXJjZSIpOw0KDQoJaWYgKGZzZWVr
KGZpbiwgaGRyLkhlYWRlclNpemUgLSA4LCBTRUVLX0NVUikgIT0gMCkNCgkJYWJvcnRfZXJy
b3IoIlVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiKTsNCn0NCgAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJqLmgAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxMDA2NDQgACAgIDc2NCAAICAgMTQ0
IAAgICAgICAgIDU3NiAgNjU2NDMxMzQ2NiAgMTAwMjUAIDAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAGV2ZXJ5b25lAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAI2lmbmRlZiBfcmpfaF8NCiNkZWZpbmUgX3JqX2hfDQoNCnR5cGVkZWYg
dW5zaWduZWQgbG9uZyBEV09SRDsNCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IFdPUkQ7
DQoNCnR5cGVkZWYgc3RydWN0IF9yc3JjX2hkciB7DQogIERXT1JECURhdGFTaXplOw0KICBE
V09SRAlIZWFkZXJTaXplOw0KfSByc3JjX2hkcjsNCg0KdHlwZWRlZiBzdHJ1Y3QgX3JzcmNf
ZGF0YV9oZHIgew0KICBEV09SRAlEYXRhVmVyc2lvbjsNCiAgRFdPUkQJTWVtb3J5RmxhZ3Nf
TGFuZ3VhZ2VJRDsNCiAgRFdPUkQJVmVyc2lvbjsNCiAgRFdPUkQJQ2hhcmFjdGVyaXN0aWNz
Ow0KfSByc3JjX2RhdGFfaGRyOw0KDQojZGVmaW5lIEJVRkZfU0laRSAyMDQ4DQoNCiNlbmRp
ZiAvKiBfcmpfaF8gKi8NCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
--------------0FF6D0FCD74BC9B46B0A1CBA--
- Raw text -