Subject: Re: com on bluetooth
To: Daniel Carosone <dan@geek.com.au>
From: Iain Hibbert <plunky@rya-online.net>
List: tech-userlevel
Date: 01/23/2007 21:21:49
  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.

--0-1451580420-1169587309=:5136
Content-Type: TEXT/PLAIN; charset=US-ASCII

On Thu, 18 Jan 2007, Daniel Carosone wrote:

> I haven't been able to get the other direction working, fwiw.  While
> RFCOMM to other devices like the gps works, trying to use the phone's
> SPP like a modem doesn't - I get a connection, but just echoes of
> whatever I type and no other response to AT commands, etc. I need to
> resort to irda for that.

I found why this happens in stdio mode. Because of the tty input
processing, no <cr> ever gets transmitted..

Then I found another problem. The slave tty was being set to raw mode and
probably it was this that made the 'cu -l ttyp9' fail to work properly..

So, in the process of adding a server mode I've mostly rewritten
rfcomm_sppd.c, new version and manpage is attached.. Please take a look
and let me know if you can get it to work* with pppd?  I'm not sure how to
go about setting that up with only one machine so I haven't tried it, but
plain connections work just fine as do outgoing PPP connections.

regards,
iain
(* or any other problems/comments :)

caveats:

1. if you do

	% rfcomm_sppd -a phone -c dun -t ttyp9
		<makes connection and detaches>
	% cu -l ttyp9
		<works fine, then exit cu>
	% cu -l ttyp9

the second time you try to access the slave tty you just get Device
Busy and must HUP the rfcomm_sppd process. I'm looking into that.

2. registering services with sdpd is privileged but libsdp returns EIO for
that (there is no SDP error corresponding to EPERM, so it gets lost) - use
sudo for server mode.
--0-1451580420-1169587309=:5136
Content-Type: TEXT/PLAIN; charset=US-ASCII; name=rfcomm_sppd.c
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.NEB.4.64.0701232121490.5136@localhost.>
Content-Description: rfcomm_sppd.c
Content-Disposition: attachment; filename=rfcomm_sppd.c

LyoJJE5ldEJTRDogcmZjb21tX3NwcGQuYyx2IDEuMSAyMDA2LzA2LzE5IDE1
OjQ0OjU2IGdkYW1vcmUgRXhwICQJKi8NCg0KLyotDQogKiBDb3B5cmlnaHQg
KGMpIDIwMDYgSXRyb25peCBJbmMuDQogKiBBbGwgcmlnaHRzIHJlc2VydmVk
Lg0KICoNCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zDQogKiBhcmUgbWV0Og0KICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQNCiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCiAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0DQogKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlDQog
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KICogMy4gVGhlIG5hbWUg
b2YgSXRyb25peCBJbmMuIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlDQog
KiAgICBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMNCiAqICAgIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4NCiAqDQogKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIElUUk9OSVggSU5DLiBgYEFTIElTJycgQU5EDQogKiBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEDQogKiBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUg0KICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIElU
Uk9OSVggSU5DLiBCRSBMSUFCTEUgRk9SIEFOWQ0KICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMNCiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsNCiAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORA0K
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4NCiAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpDQogKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRQ0KICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuDQogKi8NCi8qDQogKiByZmNvbW1fc3BwZC5jDQogKg0KICogQ29weXJp
Z2h0IChjKSAyMDA3IElhaW4gSGliYmVydA0KICogQ29weXJpZ2h0IChjKSAy
MDAzIE1ha3NpbSBZZXZtZW5raW4gPG1fZXZtZW5raW5AeWFob28uY29tPg0K
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqDQogKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQNCiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucw0KICogYXJlIG1l
dDoNCiAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQogKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuDQogKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodA0KICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQ0KICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4NCiAqDQogKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EDQogKiBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUNCiAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFDQogKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFDQog
KiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTA0KICogREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMNCiAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KQ0KICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QNCiAqIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkNCiAqIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YNCiAqIFNVQ0ggREFNQUdFLg0KICoNCiAqICRGcmVlQlNEOiBz
cmMvdXNyLmJpbi9ibHVldG9vdGgvcmZjb21tX3NwcGQvcmZjb21tX3NwcGQu
Yyx2IDEuOCAyMDA1LzEyLzA3IDE5OjQxOjU4IGVtYXggRXhwICQNCiAqLw0K
DQojaW5jbHVkZSA8c3lzL2NkZWZzLmg+DQpfX0NPUFlSSUdIVCgiQCgjKSBD
b3B5cmlnaHQgKGMpIDIwMDcgSWFpbiBIaWJiZXJ0XG4iDQoJICAgICJAKCMp
IENvcHlyaWdodCAoYykgMjAwNiBJdHJvbml4LCBJbmMuXG4iDQoJICAgICJA
KCMpIENvcHlyaWdodCAoYykgMjAwMyBNYWtzaW0gWWV2bWVua2luIDxtX2V2
bWVua2luQHlhaG9vLmNvbT5cbiINCgkgICAgIkFsbCByaWdodHMgcmVzZXJ2
ZWQuXG4iKTsNCl9fUkNTSUQoIiROZXRCU0Q6IHJmY29tbV9zcHBkLmMsdiAx
LjEgMjAwNi8wNi8xOSAxNTo0NDo1NiBnZGFtb3JlIEV4cCAkIik7DQoNCiNp
bmNsdWRlIDxibHVldG9vdGguaD4NCiNpbmNsdWRlIDxjdHlwZS5oPg0KI2lu
Y2x1ZGUgPGVyci5oPg0KI2luY2x1ZGUgPGVycm5vLmg+DQojaW5jbHVkZSA8
ZmNudGwuaD4NCiNpbmNsdWRlIDxncnAuaD4NCiNpbmNsdWRlIDxsaW1pdHMu
aD4NCiNpbmNsdWRlIDxwYXRocy5oPg0KI2luY2x1ZGUgPHNkcC5oPg0KI2lu
Y2x1ZGUgPHNpZ25hbC5oPg0KI2luY2x1ZGUgPHN0ZGFyZy5oPg0KI2luY2x1
ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8c3RkbGliLmg+DQojaW5jbHVkZSA8
c3RyaW5nLmg+DQojaW5jbHVkZSA8c3lzbG9nLmg+DQojaW5jbHVkZSA8dGVy
bWlvcy5oPg0KI2luY2x1ZGUgPHVuaXN0ZC5oPg0KDQojaW5jbHVkZSAicmZj
b21tX3NkcC5oIg0KDQojZGVmaW5lIG1heChhLCBiKQkoKGEpID4gKGIpID8g
KGEpIDogKGIpKQ0KDQp1aW50OF90IHF1ZXJ5X2NoYW5uZWwoYmRhZGRyX3Qg
KiwgYmRhZGRyX3QgKiwgY29uc3QgY2hhciAqKTsNCmludCBvcGVuX3R0eShj
b25zdCBjaGFyICopOw0KaW50IG9wZW5fY2xpZW50KGJkYWRkcl90ICosIGJk
YWRkcl90ICosIHVpbnQ4X3QpOw0KaW50IG9wZW5fc2VydmVyKGJkYWRkcl90
ICosIHVpbnQ4X3QsIGNvbnN0IGNoYXIgKik7DQp2b2lkIGNvcHlfZGF0YShp
bnQsIGludCk7DQp2b2lkIHNpZ2hhbmRsZXIoaW50KTsNCnZvaWQgdXNhZ2Uo
dm9pZCk7DQp2b2lkIHJlc2V0X3Rpbyh2b2lkKTsNCg0KaW50IGRvbmU7CQkv
KiB3ZSBhcmUgZG9uZSAqLw0Kc3RydWN0IHRlcm1pb3MgdGlvOwkvKiBzdG9y
ZWQgdGVybWlvcyBmb3IgcmVzZXQgb24gZXhpdCAqLw0KDQpzdHJ1Y3Qgc2Rw
X2R1bl9wcm9maWxlIGR1bjsNCnN0cnVjdCBzZHBfbGFuX3Byb2ZpbGUgbGFu
Ow0Kc3RydWN0IHNkcF9zcF9wcm9maWxlIHNwOw0KDQpzdHJ1Y3Qgc2Vydmlj
ZSB7DQoJY29uc3QgY2hhcgkqbmFtZTsNCgljb25zdCBjaGFyCSpkZXNjcmlw
dGlvbjsNCgl1aW50MTZfdAljbGFzczsNCgl1aW50OF90CQkqcGR1Ow0KCWlu
dAkJbGVuOw0KfSBzZXJ2aWNlc1tdID0gew0KCXsgIkRVTiIsCSJEaWFsdXAg
TmV0d29ya2luZyIsDQoJICBTRFBfU0VSVklDRV9DTEFTU19ESUFMVVBfTkVU
V09SS0lORywNCgkgICh1aW50OF90ICopJmR1biwJc2l6ZW9mKGR1bikNCgl9
LA0KCXsgIkxBTiIsCSJMYW4gYWNjZXNzIHVzaW5nIFBQUCIsDQoJICBTRFBf
U0VSVklDRV9DTEFTU19MQU5fQUNDRVNTX1VTSU5HX1BQUCwNCgkgICh1aW50
OF90ICopJmxhbiwJc2l6ZW9mKGxhbikNCgl9LA0KCXsgIlNQIiwJCSJTZXJp
YWwgUG9ydCIsDQoJICBTRFBfU0VSVklDRV9DTEFTU19TRVJJQUxfUE9SVCwN
CgkgICh1aW50OF90ICopJnNwLAlzaXplb2Yoc3ApDQoJfSwNCgl7IE5VTEwg
fQ0KfTsNCg0KaW50DQptYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pDQp7
DQoJc3RydWN0IHNpZ2FjdGlvbglzYTsNCglzdHJ1Y3QgdGVybWlvcwkJdDsN
CgliZGFkZHJfdAkJbGFkZHIsIHJhZGRyOw0KCWZkX3NldAkJCXJkc2V0Ow0K
CWNoYXIJCQkqZXAsICpzZXJ2aWNlLCAqdHR5LCAqY2xhc3M7DQoJaW50CQkJ
biwgcmZjb21tLCB0dHlfaW4sIHR0eV9vdXQ7DQoJdWludDhfdAkJCWNoYW5u
ZWw7DQoNCglkb25lID0gMDsNCg0KCWJkYWRkcl9jb3B5KCZsYWRkciwgQkRB
RERSX0FOWSk7DQoJYmRhZGRyX2NvcHkoJnJhZGRyLCBCREFERFJfQU5ZKTsN
CgljbGFzcyA9IHNlcnZpY2UgPSB0dHkgPSBOVUxMOw0KCWNoYW5uZWwgPSAw
Ow0KDQoJLyogUGFyc2UgY29tbWFuZCBsaW5lIG9wdGlvbnMgKi8NCgl3aGls
ZSAoKG4gPSBnZXRvcHQoYXJnYywgYXJndiwgImE6YzpkOmhzOnQ6IikpICE9
IC0xKSB7DQoJCXN3aXRjaCAobikgew0KCQljYXNlICdhJzogLyogQkRBRERS
ICovDQoJCQlpZiAoIWJ0X2F0b24ob3B0YXJnLCAmcmFkZHIpKSB7DQoJCQkJ
c3RydWN0IGhvc3RlbnQJKmhlID0gTlVMTDsNCg0KCQkJCWlmICgoaGUgPSBi
dF9nZXRob3N0YnluYW1lKG9wdGFyZykpID09IE5VTEwpDQoJCQkJCWVycngo
RVhJVF9GQUlMVVJFLCAiJXM6ICVzIiwgb3B0YXJnLA0KCQkJCQkgICAgaHN0
cmVycm9yKGhfZXJybm8pKTsNCg0KCQkJCWJkYWRkcl9jb3B5KCZyYWRkciwg
KGJkYWRkcl90ICopaGUtPmhfYWRkcik7DQoJCQl9DQoNCgkJCWJyZWFrOw0K
DQoJCWNhc2UgJ2MnOiAvKiBSRkNPTU0gY2hhbm5lbCAqLw0KCQkJY2hhbm5l
bCA9IHN0cnRvdWwob3B0YXJnLCAmZXAsIDEwKTsNCgkJCWlmICgqZXAgIT0g
J1wwJykgew0KCQkJCWNoYW5uZWwgPSAwOw0KCQkJCWNsYXNzID0gb3B0YXJn
Ow0KCQkJfQ0KDQoJCQlicmVhazsNCg0KCQljYXNlICdkJzogLyogZGV2aWNl
ICovDQoJCQlpZiAoIWJ0X2RldmFkZHIob3B0YXJnLCAmbGFkZHIpKQ0KCQkJ
CWVycihFWElUX0ZBSUxVUkUsICIlcyIsIG9wdGFyZyk7DQoNCgkJCWJyZWFr
Ow0KDQoJCWNhc2UgJ3MnOiAvKiBzZXJ2ZXIgKi8NCgkJCXNlcnZpY2UgPSBv
cHRhcmc7DQoJCQlicmVhazsNCg0KCQljYXNlICd0JzogLyogU2xhdmUgVFRZ
IG5hbWUgKi8NCgkJCWlmIChvcHRhcmdbMF0gIT0gJy8nKQ0KCQkJCWFzcHJp
bnRmKCZ0dHksICIlcyVzIiwgX1BBVEhfREVWLCBvcHRhcmcpOw0KCQkJZWxz
ZQ0KCQkJCXR0eSA9IG9wdGFyZzsNCg0KCQkJYnJlYWs7DQoNCgkJY2FzZSAn
aCc6DQoJCWRlZmF1bHQ6DQoJCQl1c2FnZSgpOw0KCQkJLyogTk9UIFJFQUNI
RUQgKi8NCgkJfQ0KCX0NCg0KCS8qDQoJICogdmFsaWRhdGUgb3B0aW9uczoN
CgkgKgltdXN0IGhhdmUgc2VydmljZSBvciByZW1vdGUgYWRkcmVzcw0KCSAq
CXNlcnZpY2UgbXVzdCBoYXZlIGNoYW5uZWwgYnV0IG5vIHJlbW90ZSBhZGRy
ZXNzDQoJICovDQoJaWYgKChzZXJ2aWNlID09IE5VTEwgJiYgYmRhZGRyX2Fu
eSgmcmFkZHIpKQ0KCSAgICB8fCAoc2VydmljZSAhPSBOVUxMICYmICghYmRh
ZGRyX2FueSgmcmFkZHIpIHx8IGNoYW5uZWwgPT0gMCkpKQ0KCQl1c2FnZSgp
Ow0KDQoJLyoNCgkgKiBsb29rdXAgcmVtb3RlIGNoYW5uZWwgbm93IGlmIHdl
IGRvbid0IGhhdmUgaXQgKGNsaWVudCBtb2RlKQ0KCSAqLw0KCWlmIChjaGFu
bmVsID09IDApDQoJCWNoYW5uZWwgPSBxdWVyeV9jaGFubmVsKCZsYWRkciwg
JnJhZGRyLCBjbGFzcyk7DQoNCglpZiAoY2hhbm5lbCA8IDEgfHwgY2hhbm5l
bCA+IDMwKQ0KCQllcnJ4KEVYSVRfRkFJTFVSRSwgIkludmFsaWQgUkZDT01N
IGNoYW5uZWwgbnVtYmVyICVkIiwgY2hhbm5lbCk7DQoNCgkvKg0KCSAqIGdy
YWIgdHR5cyBiZWZvcmUgd2Ugc3RhcnQgdGhlIGJsdWV0b290aA0KCSAqLw0K
CWlmICh0dHkgPT0gTlVMTCkgew0KCQl0dHlfaW4gPSBTVERJTl9GSUxFTk87
DQoJCXR0eV9vdXQgPSBTVERPVVRfRklMRU5POw0KDQoJCS8qDQoJCSAqIEkn
bSBub3Qgc3VyZSBpZiB0aGlzIGlzIGEgZ29vZCBpZGVhLCBidXQgaXQgbWVh
bnMgeW91DQoJCSAqIGNhbiB1c2UgcmZjb21tX3NwcGQgZGlyZWN0bHkgaW5z
dGVhZCBvZiB3aXRoIGEgcHR5DQoJCSAqLw0KCQlpZiAodGNnZXRhdHRyKHR0
eV9pbiwgJnQpIDwgMCkNCgkJCWVycihFWElUX0ZBSUxVUkUsICJ0Y2dldGF0
dHIiKTsNCg0KCQltZW1jcHkoJnRpbywgJnQsIHNpemVvZih0aW8pKTsNCgkJ
dC5jX2xmbGFnICY9IH4oRUNITyB8IElDQU5PTik7DQoJCXQuY19pZmxhZyAm
PSB+KElDUk5MKTsNCg0KCQlpZiAodGNzZXRhdHRyKHR0eV9pbiwgVENTQU5P
VywgJnQpIDwgMCkNCgkJCWVycihFWElUX0ZBSUxVUkUsICJ0Y3NldGF0dHIi
KTsNCg0KCQlhdGV4aXQocmVzZXRfdGlvKTsNCgl9IGVsc2Ugew0KCQl0dHlf
aW4gPSBvcGVuX3R0eSh0dHkpOw0KCQl0dHlfb3V0ID0gdHR5X2luOw0KCX0N
Cg0KCS8qIG9wZW4gUkZDT01NICovDQoJaWYgKHNlcnZpY2UgPT0gTlVMTCkN
CgkJcmZjb21tID0gb3Blbl9jbGllbnQoJmxhZGRyLCAmcmFkZHIsIGNoYW5u
ZWwpOw0KCWVsc2UNCgkJcmZjb21tID0gb3Blbl9zZXJ2ZXIoJmxhZGRyLCBj
aGFubmVsLCBzZXJ2aWNlKTsNCg0KCS8qIGRldGFjaCwgaWYgbmVjZXNzYXJ5
ICovDQoJaWYgKHR0eSAhPSBOVUxMICYmIGRhZW1vbigwLCAwKSA8IDApDQoJ
CWVycihFWElUX0ZBSUxVUkUsICJkYWVtb24oKSBmYWlsZWQiKTsNCg0KCW9w
ZW5sb2coZ2V0cHJvZ25hbWUoKSwgTE9HX1BFUlJPUiB8IExPR19QSUQsIExP
R19EQUVNT04pOw0KCXN5c2xvZyhMT0dfSU5GTywgIlN0YXJ0aW5nIG9uICVz
Li4uIiwgKHR0eSA/IHR0eSA6ICJzdGRpbyIpKTsNCg0KCS8qIGNhdGNoIHNp
Z25hbHMgKi8NCgltZW1zZXQoJnNhLCAwLCBzaXplb2Yoc2EpKTsNCglzYS5z
YV9oYW5kbGVyID0gc2lnaGFuZGxlcjsNCglpZiAoc2lnYWN0aW9uKFNJR1RF
Uk0sICZzYSwgTlVMTCkgPCAwDQoJICAgIHx8IHNpZ2FjdGlvbihTSUdIVVAs
ICZzYSwgTlVMTCkgPCAwDQoJICAgIHx8IHNpZ2FjdGlvbihTSUdJTlQsICZz
YSwgTlVMTCkgPCAwKSB7DQoJCXN5c2xvZyhMT0dfRVJSLCAic2lnYWN0aW9u
OiAlbSIpOw0KCQlleGl0KEVYSVRfRkFJTFVSRSk7DQoJfQ0KDQoJbiA9IG1h
eCh0dHlfaW4sIHJmY29tbSkgKyAxOw0KCXdoaWxlICghZG9uZSkgew0KCQlG
RF9aRVJPKCZyZHNldCk7DQoJCUZEX1NFVCh0dHlfaW4sICZyZHNldCk7DQoJ
CUZEX1NFVChyZmNvbW0sICZyZHNldCk7DQoNCgkJaWYgKHNlbGVjdChuLCAm
cmRzZXQsIE5VTEwsIE5VTEwsIE5VTEwpIDwgMCkgew0KCQkJaWYgKGVycm5v
ID09IEVJTlRSKQ0KCQkJCWNvbnRpbnVlOw0KDQoJCQlzeXNsb2coTE9HX0VS
UiwgInNlbGVjdCBlcnJvcjogJW0iKTsNCgkJCWV4aXQoRVhJVF9GQUlMVVJF
KTsNCgkJfQ0KDQoJCWlmIChGRF9JU1NFVCh0dHlfaW4sICZyZHNldCkpDQoJ
CQljb3B5X2RhdGEodHR5X2luLCByZmNvbW0pOw0KDQoJCWlmIChGRF9JU1NF
VChyZmNvbW0sICZyZHNldCkpDQoJCQljb3B5X2RhdGEocmZjb21tLCB0dHlf
b3V0KTsNCgl9DQoNCglzeXNsb2coTE9HX0lORk8sICJDb21wbGV0ZWQgb24g
JXMiLCAodHR5ID8gdHR5IDogInN0ZGlvIikpOw0KCWNsb3NlbG9nKCk7DQoJ
ZXhpdChFWElUX1NVQ0NFU1MpOw0KfQ0KDQp1aW50OF90DQpxdWVyeV9jaGFu
bmVsKGJkYWRkcl90ICpsYWRkciwgYmRhZGRyX3QgKnJhZGRyLCBjb25zdCBj
aGFyICpjbGFzcykNCnsNCglzdHJ1Y3Qgc2VydmljZSAqczsNCgl1aW50OF90
IGNoYW5uZWw7DQoNCglpZiAoY2xhc3MgPT0gTlVMTCkNCgkJY2xhc3MgPSAi
U1AiOwkvKiBkZWZhdWx0ICovDQoNCglmb3IgKHMgPSBzZXJ2aWNlcyA7IDsg
cysrKSB7DQoJCWlmIChzLT5uYW1lID09IE5VTEwpDQoJCQl1c2FnZSgpOw0K
DQoJCWlmIChzdHJjYXNlY21wKHMtPm5hbWUsIGNsYXNzKSA9PSAwKQ0KCQkJ
YnJlYWs7DQoJfQ0KDQoJaWYgKHJmY29tbV9jaGFubmVsX2xvb2t1cChsYWRk
ciwgcmFkZHIsIHMtPmNsYXNzLCAmY2hhbm5lbCwgJmVycm5vKSA8IDApDQoJ
CWVycihFWElUX0ZBSUxVUkUsICIlcyIsIHMtPm5hbWUpOw0KDQoJcmV0dXJu
IGNoYW5uZWw7DQp9DQoNCmludA0Kb3Blbl90dHkoY29uc3QgY2hhciAqdHR5
KQ0Kew0KCWNoYXIJCSBwdHlbUEFUSF9NQVhdLCAqc2xhc2g7DQoJc3RydWN0
IGdyb3VwCSpnciA9IE5VTEw7DQoJZ2lkX3QJCSB0dHlnaWQ7DQoJaW50CQkg
bWFzdGVyLCBzbGF2ZTsNCg0KCS8qDQoJICogQ29uc3RydWN0IG1hc3RlciBQ
VFkgbmFtZS4gVGhlIHNsYXZlIHR0eSBuYW1lIG11c3QgYmUgbGVzcyB0aGVu
DQoJICogUEFUSF9NQVggY2hhcmFjdGVycyBpbiBsZW5ndGgsIG11c3QgY29u
dGFpbiAnLycgY2hhcmFjdGVyIGFuZA0KCSAqIG11c3Qgbm90IGVuZCB3aXRo
ICcvJy4NCgkgKi8NCglpZiAoc3RybGVuKHR0eSkgPj0gc2l6ZW9mKHB0eSkp
DQoJCWVycngoRVhJVF9GQUlMVVJFLCAiOiB0dHkgbmFtZSB0b28gbG9uZyIp
Ow0KDQoJc3RybGNweShwdHksIHR0eSwgc2l6ZW9mKHB0eSkpOw0KCXNsYXNo
ID0gc3RycmNocihwdHksICcvJyk7DQoJaWYgKHNsYXNoID09IE5VTEwgfHwg
c2xhc2hbMV0gPT0gJ1wwJykNCgkJZXJyeChFWElUX0ZBSUxVUkUsICIlczog
aW52YWxpZCB0dHkiLCB0dHkpOw0KDQoJc2xhc2hbMV0gPSAncCc7DQoJaWYg
KHN0cmNtcChwdHksIHR0eSkgPT0gMCkNCgkJZXJyeChFWElUX0ZBSUxVUkUs
ICJNYXN0ZXIgYW5kIHNsYXZlIHR0eSBhcmUgdGhlIHNhbWUgKCVzKSIsIHR0
eSk7DQoNCglpZiAoKG1hc3RlciA9IG9wZW4ocHR5LCBPX1JEV1IsIDApKSA8
IDApDQoJCWVycihFWElUX0ZBSUxVUkUsICIlcyIsIHB0eSk7DQoNCgkvKg0K
CSAqIFNsYXZlIFRUWQ0KCSAqLw0KDQoJaWYgKChnciA9IGdldGdybmFtKCJ0
dHkiKSkgIT0gTlVMTCkNCgkJdHR5Z2lkID0gZ3ItPmdyX2dpZDsNCgllbHNl
DQoJCXR0eWdpZCA9IChnaWRfdCktMTsNCg0KCSh2b2lkKSBjaG93bih0dHks
IGdldHVpZCgpLCB0dHlnaWQpOw0KCSh2b2lkKSBjaG1vZCh0dHksIFNfSVJV
U1IgfCBTX0lXVVNSIHwgU19JV0dSUCk7DQoJKHZvaWQpIHJldm9rZSh0dHkp
Ow0KDQoJaWYgKChzbGF2ZSA9IG9wZW4odHR5LCBPX1JEV1IsIDApKSA8IDAp
DQoJCWVycihFWElUX0ZBSUxVUkUsICIlcyIsIHR0eSk7DQoNCglyZXR1cm4g
bWFzdGVyOw0KfQ0KDQppbnQNCm9wZW5fY2xpZW50KGJkYWRkcl90ICpsYWRk
ciwgYmRhZGRyX3QgKnJhZGRyLCB1aW50OF90IGNoYW5uZWwpDQp7DQoJc3Ry
dWN0IHNvY2thZGRyX2J0IHNhOw0KCWludCBzOw0KDQoJbWVtc2V0KCZzYSwg
MCwgc2l6ZW9mKHNhKSk7DQoJc2EuYnRfbGVuID0gc2l6ZW9mKHNhKTsNCglz
YS5idF9mYW1pbHkgPSBBRl9CTFVFVE9PVEg7DQoJYmRhZGRyX2NvcHkoJnNh
LmJ0X2JkYWRkciwgbGFkZHIpOw0KDQoJcyA9IHNvY2tldChQRl9CTFVFVE9P
VEgsIFNPQ0tfU1RSRUFNLCBCVFBST1RPX1JGQ09NTSk7DQoJaWYgKHMgPCAw
KQ0KCQllcnIoRVhJVF9GQUlMVVJFLCAic29ja2V0KCkiKTsNCg0KCWlmIChi
aW5kKHMsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2EsIHNpemVvZihzYSkpIDwg
MCkNCgkJZXJyKEVYSVRfRkFJTFVSRSwgImJpbmQoJXMpIiwgYnRfbnRvYShs
YWRkciwgTlVMTCkpOw0KDQoJc2EuYnRfY2hhbm5lbCA9IGNoYW5uZWw7DQoJ
YmRhZGRyX2NvcHkoJnNhLmJ0X2JkYWRkciwgcmFkZHIpOw0KDQoJaWYgKGNv
bm5lY3QocywgKHN0cnVjdCBzb2NrYWRkciAqKSZzYSwgc2l6ZW9mKHNhKSkg
PCAwKQ0KCQllcnIoRVhJVF9GQUlMVVJFLCAiY29ubmVjdCglcywgJWQpIiwg
YnRfbnRvYShyYWRkciwgTlVMTCksDQoJCQkJCQkgICAgIGNoYW5uZWwpOw0K
DQoJcmV0dXJuIHM7DQp9DQoNCmludA0Kb3Blbl9zZXJ2ZXIoYmRhZGRyX3Qg
KmxhZGRyLCB1aW50OF90IGNoYW5uZWwsIGNvbnN0IGNoYXIgKnNlcnZpY2Up
DQp7DQoJc3RydWN0IHNvY2thZGRyX2J0IHNhOw0KCXNvY2tsZW5fdCBsZW47
DQoJdm9pZCAqc3M7DQoJaW50IHN2LCBmZCwgbjsNCg0KCW1lbXNldCgmc2Es
IDAsIHNpemVvZihzYSkpOw0KCXNhLmJ0X2xlbiA9IHNpemVvZihzYSk7DQoJ
c2EuYnRfZmFtaWx5ID0gQUZfQkxVRVRPT1RIOw0KCWJkYWRkcl9jb3B5KCZz
YS5idF9iZGFkZHIsIGxhZGRyKTsNCglzYS5idF9jaGFubmVsID0gY2hhbm5l
bDsNCg0KCXN2ID0gc29ja2V0KFBGX0JMVUVUT09USCwgU09DS19TVFJFQU0s
IEJUUFJPVE9fUkZDT01NKTsNCglpZiAoc3YgPCAwKQ0KCQllcnIoRVhJVF9G
QUlMVVJFLCAic29ja2V0KCkiKTsNCg0KCWlmIChiaW5kKHN2LCAoc3RydWN0
IHNvY2thZGRyICopJnNhLCBzaXplb2Yoc2EpKSA8IDApDQoJCWVycihFWElU
X0ZBSUxVUkUsICJiaW5kKCVzLCAlZCkiLCBidF9udG9hKGxhZGRyLCBOVUxM
KSwNCgkJCQkJCSAgY2hhbm5lbCk7DQoNCglpZiAobGlzdGVuKHN2LCAxKSA8
IDApDQoJCWVycihFWElUX0ZBSUxVUkUsICJsaXN0ZW4oKSIpOw0KDQoJLyog
UmVnaXN0ZXIgc2VydmljZSB3aXRoIFNEUCBzZXJ2ZXIgKi8NCglmb3IgKG4g
PSAwIDsgOyBuKyspIHsNCgkJaWYgKHNlcnZpY2VzW25dLm5hbWUgPT0gTlVM
TCkNCgkJCXVzYWdlKCk7DQoNCgkJaWYgKHN0cmNhc2VjbXAoc2VydmljZXNb
bl0ubmFtZSwgc2VydmljZSkgPT0gMCkNCgkJCWJyZWFrOw0KCX0NCg0KCS8q
DQoJICogSW4gYWxsIHRoZSBwcm9maWxlcyB3ZSBzdXBwb3J0IHJlZ2lzdGVy
aW5nLCB0aGUgc2VydmVyX2NoYW5uZWwNCgkgKiBpcyB0aGUgZmlyc3Qgb2N0
ZXQgb2YgdGhlIHN0cnVjdHVyZSwgYW5kIGl0IHNlZW1zIGFsbCB0aGUgcmVz
dA0KCSAqIGNhbiBiZSB6ZXJvDQoJICovDQoJbWVtc2V0KHNlcnZpY2VzW25d
LnBkdSwgMCwgc2VydmljZXNbbl0ubGVuKTsNCglzZXJ2aWNlc1tuXS5wZHVb
MF0gPSBjaGFubmVsOw0KDQoJc3MgPSBzZHBfb3Blbl9sb2NhbChOVUxMKTsN
CglpZiAoc3MgPT0gTlVMTCB8fCAoZXJybm8gPSBzZHBfZXJyb3Ioc3MpKSAh
PSAwKQ0KCQllcnIoRVhJVF9GQUlMVVJFLCAic2RwX29wZW5fbG9jYWwiKTsN
Cg0KCWlmIChzZHBfcmVnaXN0ZXJfc2VydmljZShzcywgc2VydmljZXNbbl0u
Y2xhc3MsIGxhZGRyLA0KCQkgICAgc2VydmljZXNbbl0ucGR1LCBzZXJ2aWNl
c1tuXS5sZW4sIE5VTEwpICE9IDApIHsNCgkJZXJybm8gPSBzZHBfZXJyb3Io
c3MpOw0KCQllcnIoRVhJVF9GQUlMVVJFLCAic2RwX3JlZ2lzdGVyX3NlcnZp
Y2UiKTsNCgl9DQoNCglsZW4gPSBzaXplb2Yoc2EpOw0KCWZkID0gYWNjZXB0
KHN2LCAoc3RydWN0IHNvY2thZGRyICopJnNhLCAmbGVuKTsNCglpZiAoZmQg
PCAwKSANCgkJZXJyKEVYSVRfRkFJTFVSRSwgImFjY2VwdCIpOw0KDQoJY2xv
c2Uoc3YpOw0KCXJldHVybiBmZDsNCn0NCg0Kdm9pZA0KY29weV9kYXRhKGlu
dCBzcmMsIGludCBkc3QpDQp7DQoJc3RhdGljIGNoYXIJYnVmW0JVRlNJWl07
DQoJc3NpemVfdAkJbnIsIG53LCBvZmY7DQoNCgl3aGlsZSAoKG5yID0gcmVh
ZChzcmMsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKSA9PSAtMSkgew0KCQlpZiAoZXJy
bm8gIT0gRUlOVFIpIHsNCgkJCXN5c2xvZyhMT0dfRVJSLCAicmVhZCBmYWls
ZWQ6ICVtIik7DQoJCQlleGl0KEVYSVRfRkFJTFVSRSk7DQoJCX0NCgl9DQoN
Cglmb3IgKG9mZiA9IDAgOyBuciA7IG5yIC09IG53LCBvZmYgKz0gbncpIHsN
CgkJaWYgKChudyA9IHdyaXRlKGRzdCwgYnVmICsgb2ZmLCAoc2l6ZV90KW5y
KSkgPT0gLTEpIHsNCgkJCXN5c2xvZyhMT0dfRVJSLCAid3JpdGUgZmFpbGVk
OiAlbSIpOw0KCQkJZXhpdChFWElUX0ZBSUxVUkUpOw0KCQl9DQoJfQ0KfQ0K
DQp2b2lkDQpzaWdoYW5kbGVyKGludCBzKQ0Kew0KDQoJc3lzbG9nKExPR19J
TkZPLCAiU2lnbmFsICVkIHJlY2VpdmVkLiBUb3RhbCAlZCBzaWduYWxzIHJl
Y2VpdmVkXG4iLA0KCQkJcywgKysgZG9uZSk7DQp9DQoNCnZvaWQNCnJlc2V0
X3Rpbyh2b2lkKQ0Kew0KDQoJdGNzZXRhdHRyKFNURElOX0ZJTEVOTywgVENT
QUZMVVNILCAmdGlvKTsNCn0NCg0Kdm9pZA0KdXNhZ2Uodm9pZCkNCnsNCglz
dHJ1Y3Qgc2VydmljZSAqczsNCg0KCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6
ICVzIFstYyBjaGFubmVsXSBbLWQgZGV2aWNlXSBbLXQgdHR5XSAtYSBiZGFk
ZHJcbiINCgkJCSIgICAgICAgJXMgWy1kIGRldmljZV0gWy10IHR0eV0gLWMg
Y2hhbm5lbCAtcyBzZXJ2aWNlXG4iDQoJCQkiXG4iDQoJCQkiV2hlcmU6XG4i
DQoJCQkiXHQtYSBiZGFkZHIgICAgcmVtb3RlIGRldmljZSBhZGRyZXNzXG4i
DQoJCQkiXHQtYyBjaGFubmVsICAgUkZDT01NIGNoYW5uZWwgb3IgcmVtb3Rl
IHNlcnZpY2VcbiINCgkJCSJcdC1kIGRldmljZSAgICBsb2NhbCBkZXZpY2Ug
YWRkcmVzc1xuIg0KCQkJIlx0LXMgc2VydmljZSAgIGxvY2FsIHNlcnZpY2Ug
dG8gcmVnaXN0ZXJcbiINCgkJCSJcdC10IHR0eSAgICAgICBydW4gaW4gYmFj
a2dyb3VuZCB1c2luZyBwdHlcbiINCgkJCSJcbiIsIGdldHByb2duYW1lKCks
IGdldHByb2duYW1lKCkpOw0KDQoJZnByaW50ZihzdGRlcnIsICJLbm93biBz
ZXJ2aWNlczpcbiIpOw0KCWZvciAocyA9IHNlcnZpY2VzIDsgcy0+bmFtZSAh
PSBOVUxMIDsgcysrKQ0KCQlmcHJpbnRmKHN0ZGVyciwgIlx0JXNcdCVzXG4i
LCBzLT5uYW1lLCBzLT5kZXNjcmlwdGlvbik7DQoNCglleGl0KEVYSVRfRkFJ
TFVSRSk7DQp9DQo=

--0-1451580420-1169587309=:5136
Content-Type: TEXT/PLAIN; charset=US-ASCII; name=rfcomm_sppd.1
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.NEB.4.64.0701232121491.5136@localhost.>
Content-Description: rfcomm_sppd.1
Content-Disposition: attachment; filename=rfcomm_sppd.1

LlwiICROZXRCU0Q6IHJmY29tbV9zcHBkLjEsdiAxLjEgMjAwNi8wNi8xOSAx
NTo0NDo1NiBnZGFtb3JlIEV4cCAkDQouXCINCi5cIiBDb3B5cmlnaHQgKGMp
IDIwMDYgSXRyb25peCBJbmMuDQouXCIgQWxsIHJpZ2h0cyByZXNlcnZlZC4N
Ci5cIg0KLlwiIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KLlwiIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucw0KLlwiIGFyZSBtZXQ6DQouXCIgMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQNCi5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQouXCIgMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQNCi5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlDQouXCIgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCi5cIiAzLiBU
aGUgbmFtZSBvZiBJdHJvbml4IEluYy4gbWF5IG5vdCBiZSB1c2VkIHRvIGVu
ZG9yc2UNCi5cIiAgICBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMNCi5cIiAgICBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uDQouXCINCi5cIiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIElUUk9OSVggSU5DLiBgYEFTIElTJycgQU5EDQou
XCIgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRA0KLlwiIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSDQouXCIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIElUUk9OSVggSU5DLiBCRSBMSUFCTEUgRk9SIEFOWQ0K
LlwiIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQouXCIgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KLlwiIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORA0KLlwiIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElODQouXCIgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkNCi5cIiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQ0KLlwiIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KLlwiDQouXCINCi5cIiBDb3B5
cmlnaHQgKGMpIDIwMDEtMjAwMyBNYWtzaW0gWWV2bWVua2luIDxtX2V2bWVu
a2luQHlhaG9vLmNvbT4NCi5cIiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLlwi
DQouXCIgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQouXCIgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zDQouXCIgYXJlIG1ldDoNCi5cIiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodA0KLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCi5cIiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodA0KLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUN
Ci5cIiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KLlwiDQouXCIgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORA0KLlwiIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQ0KLlwiIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFDQou
XCIgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRI
T1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQ0KLlwiIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMDQouXCIgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMNCi5cIiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikNCi5cIiBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVA0KLlwiIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkNCi5cIiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
DQouXCIgU1VDSCBEQU1BR0UuDQouXCINCi5cIiAkRnJlZUJTRDogc3JjL3Vz
ci5iaW4vYmx1ZXRvb3RoL3JmY29tbV9zcHBkL3JmY29tbV9zcHBkLjEsdiAx
LjkgMjAwNS8xMi8wNyAxOTo0MTo1OCBlbWF4IEV4cCAkDQouXCINCi5EZCBK
YW51YXJ5IDMwLCAyMDA3DQouRHQgUkZDT01NX1NQUEQgMQ0KLk9zDQouU2gg
TkFNRQ0KLk5tIHJmY29tbV9zcHBkDQouTmQgUkZDT01NIFNlcmlhbCBQb3J0
IFByb2ZpbGUgZGFlbW9uDQouU2ggU1lOT1BTSVMNCi5ObQ0KLk9wIEZsIGMg
QXIgY2hhbm5lbA0KLk9wIEZsIGQgQXIgZGV2aWNlDQouT3AgRmwgdCBBciB0
dHkNCi5GbCBhIEFyIGFkZHJlc3MNCi5ObQ0KLk9wIEZsIGQgQXIgZGV2aWNl
DQouT3AgRmwgdCBBciB0dHkNCi5GbCBjIEFyIGNoYW5uZWwNCi5GbCBzIEFy
IHNlcnZpY2UgDQouU2ggREVTQ1JJUFRJT04NClRoZQ0KLk5tDQp1dGlsaXR5
IGlzIGEgU2VyaWFsIFBvcnQgUHJvZmlsZSBkYWVtb24sIHByb3ZpZGluZyBz
ZXJpYWwgYWNjZXNzIG92ZXINCmFuIFJGQ09NTSBjb25uZWN0aW9uIHRvIGEg
cmVtb3RlIGRldmljZS4NCi5ObQ0KY2FuIHdvcmsgaW4gY2xpZW50IG9yIHNl
cnZlciBtb2RlLg0KLlBwDQpJbiBjbGllbnQgbW9kZSwNCi5ObQ0KaW5pdGlh
dGVzIGFuIFJGQ09NTSBjb25uZWN0aW9uIHRvIHRoZSByZW1vdGUNCi5BciBh
ZGRyZXNzDQphbmQNCi5BciBjaGFubmVsIC4NCi5QcA0KSW4gc2VydmVyIG1v
ZGUsDQouTm0NCnJlZ2lzdGVycyB0aGUgZ2l2ZW4NCi5BciBzZXJ2aWNlDQp3
aXRoIHRoZSBsb2NhbCBTRFAgc2VydmVyIGFuZCBsaXN0ZW5zIG9uIHRoZSBz
cGVjaWZpZWQNCi5BciBjaGFubmVsDQpmb3IgaW5jb21pbmcgY29ubmVjdGlv
bnMuDQouUHANClRoZSBvcHRpb25zIGFyZSBhcyBmb2xsb3dzOg0KLkJsIC10
YWcgLXdpZHRoICIuRmwgYyBBciBjaGFubmVsIg0KLkl0IEZsIGEgQXIgYWRk
cmVzcw0KU3BlY2lmeSB0aGUgYWRkcmVzcyBvZiB0aGUgcmVtb3RlIFJGQ09N
TSBkZXZpY2UsIHRvIGNvbm5lY3QgaW4gY2xpZW50IG1vZGUuDQpUaGUgYWRk
cmVzcyBjYW4gYmUgc3BlY2lmaWVkIGFzIEJEX0FERFIgb3IgbmFtZS4NCklm
IGdpdmVuIGFzIGEgbmFtZSwgdGhlbiB0aGUNCi5ObQ0KdXRpbGl0eSB3aWxs
IGF0dGVtcHQgdG8gcmVzb2x2ZSB0aGUgbmFtZSB2aWENCi5YciBidF9nZXRo
b3N0YnluYW1lIDMgLg0KLkl0IEZsIGMgQXIgY2hhbm5lbA0KVGhpcyBvcHRp
b24gc3BlY2lmaWVzIHRoZSBSRkNPTU0gY2hhbm5lbCB0byB1c2UuDQpUaGUN
Ci5BciBjaGFubmVsDQptYXkgYmUgc3BlY2lmaWVkIGFzIGEgbnVtYmVyIG9y
LCBpbiBjbGllbnQgbW9kZSwgdGhlIG5hbWUgb2YNCnRoZSBzZXJ2aWNlIG9u
IHRoZSByZW1vdGUgZGV2aWNlLg0KSWYgbm8gcmVtb3RlDQouQXIgY2hhbm5l
bA0KaXMgc3BlY2lmaWVkLCB0aGVuDQouTm0NCndpbGwgc2VhcmNoIGZvciB0
aGUgU2VyaWFsIFBvcnQgc2VydmljZSBieSBkZWZhdWx0Lg0KLkl0IEZsIGQg
QXIgZGV2aWNlDQpVc2UgdGhlIGxvY2FsIGRldmljZSB3aXRoIHRoZSBzcGVj
aWZlZCBhZGRyZXNzLg0KVGhlIGRldmljZSBjYW4gYmUgc3BlY2lmaWVkIGJ5
IEJEX0FERFIgb3IgZGV2aWNlIG5hbWUuDQpTZWUNCi5YciBidGNvbmZpZyA4
DQpmb3IgYSBsaXN0IG9mIGRldmljZXMgYXZhaWxhYmxlLg0KSWYgbm8NCi5B
ciBkZXZpY2UNCmlzIHNwZWNpZmllZCwgdGhlIGNvbm5lY3Rpb24gd2lsbCBi
ZSBzZXQgdXAgb24gYSBzeXN0ZW0gZGV0ZXJtaW5lZCBkZXZpY2UuDQouSXQg
RmwgcyBBciBzZXJ2aWNlDQpTZXJ2ZXIgbW9kZS4NCldoZW4gdGhpcyBvcHRp
b24gaXMgZ2l2ZW4sDQouTm0NCndpbGwgcmVnaXN0ZXIgYXMgdGhlDQouQXIg
c2VydmljZQ0Kd2l0aCB0aGUgbG9jYWwgU0RQIHNlcnZlciBhbmQgbGlzdGVu
IGZvciBpbmNvbWluZyBjb25uZWN0aW9ucyBvbiB0aGUgZ2l2ZW4NCi5BciBj
aGFubmVsIC4NCi5JdCBGbCB0IEFyIHR0eQ0KU2xhdmUgcHNldWRvIHR0eSBu
YW1lLg0KSWYgdGhpcyBvcHRpb24gaXMgZ2l2ZW4sDQouTm0NCndpbGwgZGV0
YWNoIGZyb20gdGhlIGNvbnRyb2xsaW5nIHByb2Nlc3MgYW5kIG9wZXJhdGUg
b3ZlciB0aGUgbmFtZWQNCi5YciBwdHkgNA0KcGFpciwgb3RoZXJ3aXNlLCBz
dGRpbi9zdGRvdXQgd2lsbCBiZSB1c2VkLg0KLk5tDQpkb2VzIG5vdCBkZXRh
Y2ggdW50aWwgdGhlIGJsdWV0b290aCBjb25uZWN0aW9uIGlzIHJlYWR5LCBh
bmQgb3BlbnMgYm90aA0KbWFzdGVyIGFuZCBzbGF2ZSBwc2V1ZG8gdGVybWlu
YWxzIHRvIGVuc3VyZSB0aGF0IHRoZSBSRkNPTU0gY29ubmVjdGlvbg0Kc3Rh
eXMgb3BlbiB1bnRpbA0KLk5tDQppcyB0ZXJtaW5hdGVkLg0KLkVsDQouUHAN
Cktub3duIHNlcnZpY2VzIGFyZToNCi5QcA0KLkJsIC10YWcgLWNvbXBhY3Qg
LW9mZnNldCBpbmRlbnQNCi5JdCBEVU4NCkRpYWx1cCBOZXR3b3JraW5nDQou
SXQgTEFODQpMQU4gYWNjZXNzIHVzaW5nIFBQUA0KLkl0IFNQDQpTZXJpYWwg
UG9ydCBzZXJ2aWNlDQouRWwNCi5QcA0KLlNoIEZJTEVTDQouQmwgLXRhZyAt
d2lkdGggIi5QYSAvZGV2L3R0eVtwLXNQLVNdWzAtOWEtdl0iIC1jb21wYWN0
DQouSXQgUGEgL2Rldi9wdHlbcC1zUC1TXVswLTlhLXZdDQptYXN0ZXIgcHNl
dWRvIHRlcm1pbmFscw0KLkl0IFBhIC9kZXYvdHR5W3Atc1AtU11bMC05YS12
XQ0Kc2xhdmUgcHNldWRvIHRlcm1pbmFscw0KLkVsDQouU2ggRVhJVCBTVEFU
VVMNCi5FeCAtc3RkDQouU2ggRVhBTVBMRVMNCi5EbCByZmNvbW1fc3BwZCAt
YSAwMDowMTowMjowMzowNDowNSAtYyAxIC10IC9kZXYvdHR5cDENCi5QcA0K
V2lsbCBvcGVuIGFuIFJGQ09NTSBjb25uZWN0aW9uIHRvIHRoZSBzZXJ2ZXIg
YXQNCi5MaSAwMDowMTowMjowMzowNDowNQ0Kb24gY2hhbm5lbA0KLkxpIDEg
Lg0KT25jZSB0aGUgY29ubmVjdGlvbiBoYXMgYmVlbiBlc3RhYmxpc2hlZCwN
Ci5ObQ0Kd2lsbCBkZXRhY2ggYW5kDQouUGEgL2Rldi90dHlwMQ0KY2FuIGJl
IHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgcmVtb3RlIHNlcmlhbCBw
b3J0IG9uIHRoZSBzZXJ2ZXIsIGVnDQp3aXRoIHRoZSB1c2Ugb2YNCi5QcA0K
LkRsIGN1IC1sIC9kZXYvdHR5cDENCi5QcA0KSW4gb3JkZXIgdG8gdXNlDQou
Tm0NCnRvIGF1dG9tYXRpY2FsbHkgY3JlYXRlIGEgbGluayBmb3INCi5YciBw
cHBkIDggLA0KdXNlDQouRGwgcHR5IFFvIHJmY29tbV9zcHBkIC1hIDAwOjAx
OjAyOjAzOjA0OjA1IC1jIGR1biBRYw0KLlBwDQppbiB5b3VyDQouWHIgcHBw
ZCA4DQpjb25maWd1cmF0aW9uIGZpbGUuDQouU2ggU0VFIEFMU08NCi5YciBi
bHVldG9vdGggMyAsDQouWHIgYmx1ZXRvb3RoIDQgLA0KLlhyIHB0eSA0ICwN
Ci5YciBidGNvbmZpZyA4ICwNCi5YciBwcHBkIDggLA0KLlhyIHNkcGQgOA0K
LlNoIEFVVEhPUlMNCi5BbiBNYWtzaW0gWWV2bWVua2luIEFxIG1fZXZtZW5r
aW5AeWFob28uY29tICwNCi5BbiBJYWluIEhpYmJlcnQNCi5TaCBCVUdTDQpQ
bGVhc2UgcmVwb3J0IGlmIGZvdW5kLg0KLlNoIEhJU1RPUlkNClRoZQ0KLk5t
DQpwcm9ncmFtIGZpcnN0IGFwcGVhcmVkIGluDQouRngNCmFuZCB3YXMgcG9y
dGVkIHRvDQouTnggNC4wDQpieQ0KLkFuIElhaW4gSGliYmVydA0KdW5kZXIg
dGhlIHNwb25zb3JzaGlwIG9mDQouQW4gSXRyb25peCwgSW5jDQo=

--0-1451580420-1169587309=:5136--