Re: dccp
Ivo Calado <[email protected]> Mon, 19 Oct 2009 14:29:09 -0300
| Newsgroups | gmane.comp.gnu.ccrtp.devel |
|---|---|
| Message-ID | <[email protected]> |
--000e0cd59fd883e20604764d168b Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Hi Patrick and all, the patch which enable DCCP on CcRTP is attached. Please, give us feedback if you could merged it successfully. Thanks, Ivo On Mon, Oct 19, 2009 at 13:01, Leandro Sales <[email protected]> wrote: > Hi Patrick, > =A0=A0 Ivo or Erivaldo will provide you the patches. Please, let us have > feedbacks on this. Do you have write access to the CCRTP repository? if y= es, > please let me know because I can send you the patches by myself. > > Thanks, > Leandro. > > On Mon, Oct 19, 2009 at 9:14 AM, Patrick Schreiner > <[email protected]> wrote: >> >> Hi Leandro, >> >> first of all thank you very much for extending cc++ with DCCP. This is >> going to save me a lot of work and desperation. Do you think you could s= end >> me these patches so I could try merging them with the main project? >> >> Thanks >> Patrick >> >> Zitat von Leandro Sales <[email protected]>: >> >>> Hi Patrick, >>> =A0We from the Federal University of Campina Grande has provided >>> support for dccp in commoncpp. We have also provided support for >>> ccrtp, but the code wasn't (still) merged in the mainline of the >>> project. We've submitted the patches to the ccrtp guys, but after they >>> confirm they received the patches, until this moment, they didn't >>> confirm the merge, probably they are busy. >>> >>> []s >>> >>> On 10/19/09, Patrick Schreiner >>> <[email protected]> wrote: >>>> >>>> Hi @all, >>>> >>>> my name is Patrick Schreiner and I am a student at the university of >>>> T=FCbingen. >>>> I'm trying to give proof of concept for a VoIP client which can adapt >>>> to net bandwidth and adjust the algorithmic delay used by its codec. >>>> Since common c++ supports DCCP sockets since version 1.7.1 I wanted to >>>> ask if anyone has already extended ccRTP to also support DCCP. Or if >>>> no one has done that yet, if anyone could give me a little jump-start. >>>> My understandig up to now is, that I would have to extend the >>>> channel.h by the class RTPBaseDCCPIPv4Socket. But how would have =A0a >>>> DualRTPChannel class for DCCP to look like? I'll appreciate any help >>>> you can give me. >>>> >>>> Thanks in advance, >>>> Patrick Schreiner >>>> >>>> >>>> _______________________________________________ >>>> Ccrtp-devel mailing list >>>> [email protected] >>>> http://lists.gnu.org/mailman/listinfo/ccrtp-devel >>>> >>> >>> -- >>> Sent from my mobile device >>> >>> Leandro Melo de Sales >>> Pervasive and Embedded Computing Laboratory >>> Professor in Computer Science at Federal University of Alagoas, Brazil >>> PhD candidate in Computer Science at UFCG >>> >>> "The warrior is strong in loyalty, intensity, determination, >>> initiative, persistence, courage and willpower. The warrior is light >>> in the soul, self-trust and compassion. The warrior is often called to >>> take the front when other cowardly make a step backwards. There are >>> warriors on the battlefields and in everyday life." >>> >>> http://www.leandrosales.com/ >>> >> > > > > -- > Leandro Melo de Sales > Pervasive and Embedded Computing Laboratory > Professor in Computer Science at Federal University of Alagoas, Brazil > PhD candidate in Computer Science at UFCG > > "The warrior is strong in loyalty, intensity, determination, initiative, > persistence, courage and willpower. The warrior is light in the soul, > self-trust and compassion. The warrior is often called to take the front > when other cowardly make a step backwards. There are warriors on the > battlefields and in everyday life." > > http://www.leandrosales.com/ > --=20 Ivo Augusto Andrade Rocha Calado MSc. Candidate Embedded Systems and Pervasive Computing Lab - http://embedded.ufcg.edu.br Systems and Computing Department - http://www.dsc.ufcg.edu.br Electrical Engineering and Informatics Center - http://www.ceei.ufcg.edu.br Federal University of Campina Grande - http://www.ufcg.edu.br PGP: 0x03422935 Quidquid latine dictum sit, altum viditur. --000e0cd59fd883e20604764d168b Content-Type: application/octet-stream; name="ccrtp_dccp.patch" Content-Disposition: attachment; filename="ccrtp_dccp.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g0zi2na90 ZGlmZiAtdXByTiBjY3J0cC9BVVRIT1JTIGNjcnRwX2RjY3AvQVVUSE9SUwotLS0gY2NydHAvQVVU SE9SUwkyMDA5LTA5LTAxIDE1OjM1OjU4LjAwMDAwMDAwMCAtMDMwMAorKysgY2NydHBfZGNjcC9B VVRIT1JTCTIwMDktMDktMDEgMTU6Mzc6MjMuMDAwMDAwMDAwIC0wMzAwCkBAIC01LDMgKzUsNCBA QCBTZWUgYWxzbyB0aGUgZmlsZXMgVEhBTktTIGFuZCBDaGFuZ2VMb2cuCiBEYXZpZCBTdWdhciA8 ZHlmZXRAb3N0ZWwuY29tPiBkZXNpZ25lZCBhbmQgaW1wbGVtZW50ZWQgaW5pdGlhbCBjY1JUUC4K IEZlZGVyaWNvIE1vbnRlc2lubyBQb3V6b2xzIDxmZWRlbXBAYWx0ZXJuLm9yZz4gaGFzIGhlbHBl ZCBtYWtlIGl0IHdvcmsuCiBXZXJuZXIgRGl0dG1hbiBhZGRlZCBTUlRQIHN1cHBvcnQgYmFzZWQg b24gc3J0cCBwYWNrYWdlLgorSXZvIENhbGFkbzx0eGl0aGloYXVzZW5AZ21haWwuY29tPiwgSGV2 ZXJ0b24gU3R1YXJ0PGhldmVydG9uc25zQGdtYWlsLmNvbT4gYW5kIExlYW5kcm8gU2FsZXM8bGVh bmRyb2FsQGdtYWlsLmNvbT4gYWRkZWQgc3VwcG9ydCBEQ0NQIHRyYW5zcG9ydCBwcm90b2NvbApk aWZmIC11cHJOIGNjcnRwL2RlbW8vUkVBRE1FIGNjcnRwX2RjY3AvZGVtby9SRUFETUUKLS0tIGNj cnRwL2RlbW8vUkVBRE1FCTIwMDktMDktMDEgMTU6MzY6MDMuMDAwMDAwMDAwIC0wMzAwCisrKyBj Y3J0cF9kY2NwL2RlbW8vUkVBRE1FCTIwMDktMDktMDEgMTU6Mzc6MjMuMDAwMDAwMDAwIC0wMzAw CkBAIC01LDkgKzUsMTMgQEAgYW5kIGlsbHVzdHJhdGluZyBmZWF0dXJlcyBvZiBjY1JUUDoKIAkq IHJwdGhlbGxvOiBpbGx1c3RyYXRlcyB0cmFuc21pc3Npb24vcmVjZXB0aW9uIG9mIFJUUCBwYWNr ZXRzCiAJdXNpbmcgdGhlIFJUUFNlc3Npb24gY2xhc3MuCiAKLQkqIHJ0cHNlbmQ6IHNlbmRzIFJU UC9SVENQIHBhY2tldHMKKwkqIHJ0cHNlbmQ6IHNlbmRzIFJUUC9SVENQIHBhY2tldHMsIHVzaW5n IFVEUCBzb2NrZXQKIAotCSogcnRwbGlzdGVuOiB3YWl0cyBmb3IgUlRQL1JUQ1AgaW5jb21pbmcg cGFja2V0cworCSogcnRwbGlzdGVuOiB3YWl0cyBmb3IgUlRQL1JUQ1AgaW5jb21pbmcgcGFja2V0 cywgdXNpbmcgVURQIHNvY2tldAorCisJKiBydHBkY2Nwc2VuZDogc2VuZHMgUlRQL1JUQ1AgcGFj a2V0cywgdXNpbmcgRENDUCBzb2NrZXQKKworCSogcnRwZGNjcGxpc3Rlbjogd2FpdHMgZm9yIFJU UC9SVENQIGluY29taW5nIHBhY2tldHMsIHVzaW5nIERDQ1Agc29ja2V0CiAKIAkqIHJ0cGR1cGhl bGxvOiBpbGx1c3RyYXRlcyB0cmFuc21pc3Npb24vcmVjZXB0aW9uIG9mIFJUUCBwYWNrZXRzCiAJ dXNpbmcgUlRQRHVwbGV4CmRpZmYgLXVwck4gY2NydHAvZGVtby9ydHBkY2NwbGlzdGVuLmNwcCBj Y3J0cF9kY2NwL2RlbW8vcnRwZGNjcGxpc3Rlbi5jcHAKLS0tIGNjcnRwL2RlbW8vcnRwZGNjcGxp c3Rlbi5jcHAJMTk2OS0xMi0zMSAyMTowMDowMC4wMDAwMDAwMDAgLTAzMDAKKysrIGNjcnRwX2Rj Y3AvZGVtby9ydHBkY2NwbGlzdGVuLmNwcAkyMDA5LTA5LTAxIDE1OjM3OjIzLjAwMDAwMDAwMCAt MDMwMApAQCAtMCwwICsxLDE2NyBAQAorLy8gcnRwZGNjcGxpc3RlbgorLy8gTGlzdGVuIGZvciBS VFAgcGFja2V0cyB0aHJvdWdoIG9mIERDQ1AgU29ja2V0LiBUaGlzIGV4YW1wbGUgaXMgYmFzZWQg CisvLyBvbiBkZW1vL3J0cGxpc3Rlbi5jcHAgcHJvZ3JhbQorLy8gQ29weXJpZ2h0IChDKSAyMDA5 IEl2byBDYWxhZG8gPHR4aXRoaWhhdXNlbkBnbWFpbC5jb20+CisvLyBDb3B5cmlnaHQgKEMpIDIw MDkgSGV2ZXJ0b24gU3R1YXJ0IDxoZXZlcnRvbnNuc0BnbWFpbC5jb20+CisvLyAgCisvLyBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQorLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisvLyAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgorLy8gIAorLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor Ly8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy8vICAKKy8v IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlCisvLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0 aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBT dWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorCisjaW5jbHVkZSA8Y3N0ZGxp Yj4KKyNpbmNsdWRlIDxjY3J0cC9ydHAuaD4KKworI2lmZGVmICBDQ1hYX05BTUVTUEFDRVMKK3Vz aW5nIG5hbWVzcGFjZSBvc3Q7Cit1c2luZyBuYW1lc3BhY2Ugc3RkOworI2VuZGlmCisKK2NsYXNz IExpc3RlbmVyOiBSVFBEQ0NQU2Vzc2lvbiB7CitwdWJsaWM6CisJTGlzdGVuZXIoSW5ldE1jYXN0 QWRkcmVzcyYgaW1hLCB0cHBvcnRfdCBwb3J0KToKKwkJUlRQRENDUFNlc3Npb24oaW1hLHBvcnQp CisJeyB9CisKKwlMaXN0ZW5lcihJbmV0SG9zdEFkZHJlc3MmIGlhLCB0cHBvcnRfdCBwb3J0KToK KwkJUlRQRENDUFNlc3Npb24oaWEscG9ydCkKKwl7IH0KKworCXZvaWQgbGlzdGVuKCkKKwl7CisJ CWNvdXQgPDwgIk15IFNTUkMgaWRlbnRpZmllciBpczogIiAKKwkJICAgICA8PCBoZXggPDwgKGlu dClnZXRMb2NhbFNTUkMoKSA8PCBlbmRsOworCisJCWRlZmF1bHRBcHBsaWNhdGlvbigpLnNldFNE RVNJdGVtKFNERVNJdGVtVHlwZVRPT0wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgInJ0cGRjY3BsaXN0ZW4gZGVtbyBhcHAuIik7CisJCXNldEV4cGly ZVRpbWVvdXQoMTAwMDAwMCk7CisKKwkJc2V0UGF5bG9hZEZvcm1hdChTdGF0aWNQYXlsb2FkRm9y bWF0KHNwdFBDTVUpKTsKKwkJc3RhcnRSdW5uaW5nKCk7CisJCWZvciAoOzspIHsKKwkJCWNvbnN0 IEFwcERhdGFVbml0KiBhZHU7CisJCQl3aGlsZSAoIChhZHUgPSBnZXREYXRhKGdldEZpcnN0VGlt ZXN0YW1wKCkpKSApIHsKKwkJCQljZXJyIDw8ICJJIGdvdCBhbiBhcHAuIGRhdGEgdW5pdCAtICIK KwkJCQkgICAgIDw8IGFkdS0+Z2V0U2l6ZSgpCisJCQkJICAgICA8PCAiIHBheWxvYWQgb2N0ZXRz ICgiCisJCQkJICAgICA8PCAicHQgIiA8PCAoaW50KWFkdS0+Z2V0VHlwZSgpCisJCQkJICAgICA8 PCAiKSBmcm9tICIKKwkJCQkgICAgIDw8IGhleCA8PCAoaW50KWFkdS0+Z2V0U291cmNlKCkuZ2V0 SUQoKSAKKwkJCQkgICAgIDw8ICJAIiA8PCBkZWMgPDwKKwkJCQkJYWR1LT5nZXRTb3VyY2UoKS5n ZXROZXR3b3JrQWRkcmVzcygpCisJCQkJICAgICA8PCAiOiIgCisJCQkJICAgICA8PCBhZHUtPmdl dFNvdXJjZSgpLmdldERhdGFUcmFuc3BvcnRQb3J0KCkKKwkJCQkgICAgIDw8IGVuZGw7CisJCQkJ ZGVsZXRlIGFkdTsKKwkJCX0KKwkJCVRocmVhZDo6c2xlZXAoNyk7CisJCX0KKwl9CisKKwkvLyBy ZWRlZmluZWQgZnJvbSBJbmNvbWluZ0RhdGFRdWV1ZQorCXZvaWQgb25OZXdTeW5jU291cmNlKGNv bnN0IFN5bmNTb3VyY2UmIHNyYykKKwl7CisJCWNvdXQgPDwgIiogTmV3IHN5bmNocm9uaXphdGlv biBzb3VyY2U6ICIgPDwKKwkJICAgICBoZXggPDwgKGludClzcmMuZ2V0SUQoKSA8PCBlbmRsOwor CX0KKworCS8vIHJlZGVmaW5lZCBmcm9tIFF1ZXVlUlRDUE1hbmFnZXIKKwl2b2lkCisJb25Hb3RT UihTeW5jU291cmNlJiBzb3VyY2UsIFNlbmRSZXBvcnQmIFNSLCB1aW50OCBibG9ja3MpCisJewor CQlSVFBEQ0NQU2Vzc2lvbjo6b25Hb3RTUihzb3VyY2UsU1IsYmxvY2tzKTsKKwkJY291dCA8PCAi SSBnb3QgYW4gU1IgUlRDUCByZXBvcnQgZnJvbSAiCisJCSAgICAgPDwgaGV4IDw8IChpbnQpc291 cmNlLmdldElEKCkgPDwgIkAiCisJCSAgICAgPDwgZGVjCisJCSAgICAgPDwgc291cmNlLmdldE5l dHdvcmtBZGRyZXNzKCkgPDwgIjoiIAorCQkgICAgIDw8IHNvdXJjZS5nZXRDb250cm9sVHJhbnNw b3J0UG9ydCgpIDw8IGVuZGw7CisJfQorCisJLy8gcmVkZWZpbmVkIGZyb20gUXVldWVSVENQTWFu YWdlcgorCXZvaWQKKwlvbkdvdFJSKFN5bmNTb3VyY2UmIHNvdXJjZSwgUmVjdlJlcG9ydCYgUlIs IHVpbnQ4IGJsb2NrcykKKwl7CisJCVJUUERDQ1BTZXNzaW9uOjpvbkdvdFJSKHNvdXJjZSxSUixi bG9ja3MpOworCQljb3V0IDw8ICJJIGdvdCBhbiBSUiBSVENQIHJlcG9ydCBmcm9tICIKKwkJICAg ICA8PCBoZXggPDwgKGludClzb3VyY2UuZ2V0SUQoKSA8PCAiQCIKKwkJICAgICA8PCBkZWMKKwkJ ICAgICA8PCBzb3VyY2UuZ2V0TmV0d29ya0FkZHJlc3MoKSA8PCAiOiIgCisJCSAgICAgPDwgc291 cmNlLmdldENvbnRyb2xUcmFuc3BvcnRQb3J0KCkgPDwgZW5kbDsKKwl9CisKKwkvLyByZWRlZmlu ZWQgZnJvbSBRdWV1ZVJUQ1BNYW5hZ2VyCisJYm9vbAorCW9uR290U0RFU0NodW5rKFN5bmNTb3Vy Y2UmIHNvdXJjZSwgU0RFU0NodW5rJiBjaHVuaywgc2l6ZV90IGxlbikKKwl7IAorCQlib29sIHJl c3VsdCA9IFJUUERDQ1BTZXNzaW9uOjpvbkdvdFNERVNDaHVuayhzb3VyY2UsY2h1bmssbGVuKTsK KwkJY291dCA8PCAiSSBnb3QgYSBTREVTIGNodW5rIGZyb20gIgorCQkgICAgIDw8IGhleCA8PCAo aW50KXNvdXJjZS5nZXRJRCgpIDw8ICJAIiAKKwkJICAgICA8PCBkZWMKKwkJICAgICA8PCBzb3Vy Y2UuZ2V0TmV0d29ya0FkZHJlc3MoKSA8PCAiOiIgCisJCSAgICAgPDwgc291cmNlLmdldENvbnRy b2xUcmFuc3BvcnRQb3J0KCkKKwkJICAgICA8PCAiICgiIAorCQkgICAgIDw8IHNvdXJjZS5nZXRQ YXJ0aWNpcGFudCgpLT5nZXRTREVTSXRlbShTREVTSXRlbVR5cGVDTkFNRSkKKwkJICAgICA8PCAi KSAiIDw8IGVuZGw7CisJCXJldHVybiByZXN1bHQ7CisJfQorCQorCXZvaWQKKwlvbkdvdEdvb2Ri eWUoY29uc3QgU3luY1NvdXJjZSYgc291cmNlLCBjb25zdCBzdGQ6OnN0cmluZyYgcmVhc29uKQor CXsgCisJCWNvdXQgPDwgIkkgZ290IGEgR29vZGJ5ZSBwYWNrZXQgZnJvbSAiCisJCSAgICAgPDwg aGV4IDw8IChpbnQpc291cmNlLmdldElEKCkgPDwgIkAiIAorCQkgICAgIDw8IGRlYworCQkgICAg IDw8IHNvdXJjZS5nZXROZXR3b3JrQWRkcmVzcygpIDw8ICI6IiAKKwkJICAgICA8PCBzb3VyY2Uu Z2V0Q29udHJvbFRyYW5zcG9ydFBvcnQoKSA8PCBlbmRsOworCQljb3V0IDw8ICIgICBHb29kYnll IHJlYXNvbjogXCIiIDw8IHJlYXNvbiA8PCAiXCIiIDw8IGVuZGw7CisJfQorfTsKKworaW50Citt YWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgICAgIGNvdXQgPDwgInJ0cGRjY3Bs aXN0ZW4iIDw8IGVuZGw7CisKKwlpZiAoYXJnYyAhPSAzKSB7IAorCQljZXJyIDw8ICJTeW50YXg6 ICIgPDwgIiBpcCBwb3J0IiA8PCBlbmRsOworCQlleGl0KDEpOworCX0KKworCUluZXRNY2FzdEFk ZHJlc3MgaW1hOworCXRyeSB7CisJCWltYSA9IEluZXRNY2FzdEFkZHJlc3MoYXJndlsxXSk7CisJ fSBjYXRjaCAoLi4uKSB7CX0KKworCUxpc3RlbmVyICpmb287CisJdHBwb3J0X3QgcG9ydCA9IGF0 b2koYXJndlsyXSk7CisJaWYgKCBpbWEuaXNJbmV0QWRkcmVzcygpICkgeworCQlmb28gPSBuZXcg TGlzdGVuZXIoaW1hLHBvcnQpOworCQljb3V0IDw8ICJMaXN0ZW5pbmcgb24gbXVsdGljYXN0IGFk ZHJlc3MgIiA8PCBpbWEgPDwgIjoiIDw8IAorCQkJcG9ydCA8PCBlbmRsOworCX0gZWxzZSB7CisJ CUluZXRIb3N0QWRkcmVzcyBpYShhcmd2WzFdKTsKKwkJZm9vID0gbmV3IExpc3RlbmVyKGlhLGF0 b2koYXJndlsyXSkpOworCQljb3V0IDw8ICJMaXN0ZW5pbmcgb24gdW5pY2FzdCBhZGRyZXNzICIg PDwgaWEgPDwgIjoiIDw8CisJCQlwb3J0IDw8IGVuZGw7CisJfQorCWNvdXQgPDwgIlByZXNzIEN0 cmwtQyB0byBmaW5pc2guIiA8PCBlbmRsOworCWZvby0+bGlzdGVuKCk7CisJZGVsZXRlIGZvbzsK KwlyZXR1cm4gMDsKK30KKworLyoqIEVNQUNTICoqCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBt b2RlOiBjKysKKyAqIGMtYmFzaWMtb2Zmc2V0OiA4CisgKiBFbmQ6CisgKi8KZGlmZiAtdXByTiBj Y3J0cC9kZW1vL3J0cGRjY3BzZW5kLmNwcCBjY3J0cF9kY2NwL2RlbW8vcnRwZGNjcHNlbmQuY3Bw Ci0tLSBjY3J0cC9kZW1vL3J0cGRjY3BzZW5kLmNwcAkxOTY5LTEyLTMxIDIxOjAwOjAwLjAwMDAw MDAwMCAtMDMwMAorKysgY2NydHBfZGNjcC9kZW1vL3J0cGRjY3BzZW5kLmNwcAkyMDA5LTA5LTAx IDE1OjM3OjIzLjAwMDAwMDAwMCAtMDMwMApAQCAtMCwwICsxLDk4IEBACisvLyBydHBkY2Nwc2Vu ZAorLy8gU2VuZCBmb3IgUlRQIHBhY2tldHMgdGhyb3VnaCBvZiBEQ0NQIFNvY2tldC4gVGhpcyBl eGFtcGxlIGlzIGJhc2VkIAorLy8gb24gZGVtby9ydHBzZW5kLmNwcCBwcm9ncmFtCisvLyBDb3B5 cmlnaHQgKEMpIDIwMDkgSXZvIENhbGFkbyA8dHhpdGhpaGF1c2VuQGdtYWlsLmNvbT4KKy8vIENv cHlyaWdodCAoQykgMjAwOSBIZXZlcnRvbiBTdHVhcnQgPGhldmVydG9uc25zQGdtYWlsLmNvbT4K Ky8vICAKKy8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisvLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLy8gdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKy8vIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisvLyAgCisvLyBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgorLy8gIAorLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBu b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBU ZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisKKyNp bmNsdWRlIDxjc3RkbGliPgorI2luY2x1ZGUgPGNjcnRwL3J0cC5oPgorCisjaWZkZWYgIENDWFhf TkFNRVNQQUNFUwordXNpbmcgbmFtZXNwYWNlIG9zdDsKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7Cisj ZW5kaWYKKworLyoqCisgKiBAYnJpZWYgVGhpcyBjbGFzcyBzZW5kcyBhbiBSVFAgUGFja2V0Cisg KiovCitjbGFzcyBTZW5kZXI6IHB1YmxpYyBSVFBEQ0NQU2Vzc2lvbiwgcHVibGljIFRpbWVyUG9y dCB7CitwdWJsaWM6CisJU2VuZGVyKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIGNvbnN0IElu ZXRIb3N0QWRkcmVzcyYgaWEsIAorCSAgICAgICB0cHBvcnRfdCBwb3J0LCB1aW50MzIgdHN0YW1w LCB1aW50MTYgY291bnQsIHRwcG9ydF90IHBvcnQyKToKKwkJUlRQRENDUFNlc3Npb24oSW5ldEhv c3RBZGRyZXNzKCIwLjAuMC4wIikscG9ydDIpLAorCQlwYWNrZXRzUGVyU2Vjb25kKDEwKQorCXsK KwkJdWludDMyIHRpbWVzdGFtcCA9IHRzdGFtcD8gdHN0YW1wIDogMDsKKwkJCisJCWNvdXQgPDwg Ik15IFNTUkMgaWRlbnRpZmllciBpczogIiAKKwkJICAgICA8PCBoZXggPDwgKGludClnZXRMb2Nh bFNTUkMoKSA8PCBlbmRsOworCisJCWRlZmF1bHRBcHBsaWNhdGlvbigpLnNldFNERVNJdGVtKFNE RVNJdGVtVHlwZVRPT0wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgInJ0cGRjY3BzZW5kIGRlbW8gYXBwLiIpOworCQlzZXRTY2hlZHVsaW5nVGltZW91 dCgxMDAwMCk7CisJCXNldEV4cGlyZVRpbWVvdXQoMTAwMDAwMCk7CisJCQorCQlpZiAoICFhZGRE ZXN0aW5hdGlvbihpYSxwb3J0KSApIHsKKwkJCWNlcnIgPDwgIkNvdWxkIG5vdCBjb25uZWN0IiA8 PCBlbmRsOworCQkJZXhpdCgpOworCQl9CisJCQorCQlzZXRQYXlsb2FkRm9ybWF0KFN0YXRpY1Bh eWxvYWRGb3JtYXQoc3B0UENNVSkpOworCQlzdGFydFJ1bm5pbmcoKTsKKworCQl1aW50MTYgdHN0 YW1wSW5jID0gZ2V0Q3VycmVudFJUUENsb2NrUmF0ZSgpL3BhY2tldHNQZXJTZWNvbmQ7CisJCXVp bnQzMiBwZXJpb2QgPSAxMDAwL3BhY2tldHNQZXJTZWNvbmQ7CisJCVRpbWVyUG9ydDo6c2V0VGlt ZXIocGVyaW9kKTsKKwkJZm9yICggaW50IGkgPSAwOyBpIDwgY291bnQgOyBpKysgKSB7CisJCQlw dXREYXRhKHRpbWVzdGFtcCArIGkqdHN0YW1wSW5jLAorCQkJCWRhdGEsc3RybGVuKChjaGFyICop ZGF0YSkgKyAxKTsKKwkJCVRocmVhZDo6c2xlZXAoVGltZXJQb3J0OjpnZXRUaW1lcigpKTsKKwkJ CVRpbWVyUG9ydDo6aW5jVGltZXIocGVyaW9kKTsKKwkJfQorCX0KKworcHJpdmF0ZToKKwljb25z dCB1aW50MTYgcGFja2V0c1BlclNlY29uZDsKK307CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hh ciAqYXJndltdKQoreworICAgICAgICBjb3V0IDw8ICJydHBkY2Nwc2VuZC4uLiIgPDwgZW5kbDsK KworCWlmIChhcmdjICE9IDcpIHsgCisgICAgICAgICAgICAgICAgY2VyciA8PCAiU3ludGF4OiAi IDw8ICJkYXRhIGhvc3QgcG9ydCB0aW1lc3RhbXAgY291bnQgbG9jYWxwb3J0IiA8PCBlbmRsOwor CQlleGl0KDEpOworCX0KKworCVNlbmRlciBzZW5kZXIoKHVuc2lnbmVkIGNoYXIgKilhcmd2WzFd LCBJbmV0SG9zdEFkZHJlc3MoYXJndlsyXSksCisJCSAgICAgIGF0b2koYXJndlszXSksIGF0b2ko YXJndls0XSksIGF0b2koYXJndls1XSksIGF0b2koYXJndls2XSkpOworCQorCWNvdXQgPDwgIkkg aGF2ZSBzZW50ICIgPDwgYXJndls1XSAKKwkgICAgIDw8ICIgUlRQIHBhY2tldHMgY29udGFpbmlu ZyBcIiIgPDwgYXJndlsxXQorCSAgICAgPDwgIlwiLCB3aXRoIHRpbWVzdGFtcCAiIDw8IGFyZ3Zb NF0KKwkgICAgIDw8ICIgdG8gIiA8PCBhcmd2WzJdIDw8ICI6IiA8PCBhcmd2WzNdCisJICAgICA8 PCBlbmRsOworCXJldHVybiAwOworfQorCisvKiogRU1BQ1MgKioKKyAqIExvY2FsIHZhcmlhYmxl czoKKyAqIG1vZGU6IGMrKworICogYy1iYXNpYy1vZmZzZXQ6IDgKKyAqIEVuZDoKKyAqLwpkaWZm IC11cHJOIGNjcnRwL3NyYy9jY3J0cC9jaGFubmVsLmggY2NydHBfZGNjcC9zcmMvY2NydHAvY2hh bm5lbC5oCi0tLSBjY3J0cC9zcmMvY2NydHAvY2hhbm5lbC5oCTIwMDktMDktMDEgMTU6MzY6MDgu MDAwMDAwMDAwIC0wMzAwCisrKyBjY3J0cF9kY2NwL3NyYy9jY3J0cC9jaGFubmVsLmgJMjAwOS0w OS0wMSAxNTozODo0NC4wMDAwMDAwMDAgLTAzMDAKQEAgLTM5LDYgKzM5LDggQEAKICNkZWZpbmUg Q0NSVFBfQ0hBTk5FTF9IXwogCiAjaW5jbHVkZSA8Y2NydHAvYmFzZS5oPgorI2luY2x1ZGUgPG1h cD4KK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKICNpZm5kZWYgV0lOMzIKICNpbmNsdWRlIDxzeXMv aW9jdGwuaD4KQEAgLTE2NiwyNCArMTY4LDE0NiBAQCBwdWJsaWM6CiB9OwogCiAvKioKLSAqIEBj bGFzcyBEdWFsVURQSVB2NFNvY2tldAotICogQHNob3J0IEEgc29ja2V0IGNsYXNzIGJhc2VkIG9u IHR3byBVRFAvSVB2NCBzb2NrZXRzLgorICogQGNsYXNzIFJUUEJhc2VEQ0NQSVB2NFNvY2tldAor ICogQHNob3J0IEEgRENDUC9JUHY0IHNvY2tldCBjbGFzcyB0YXJnZXR0ZWQgYXQgUlRQIHN0YWNr cy4KKyAqCisgKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgZmxhdCBpbnRlcmZhY2UgdGhhdCBpbmNs dWRlcyBhbGwgdGhlIHNlcnZpY2VzCisgKiByZXF1aXJlZCBieSBhbiBSVFAgc3RhY2suCisgKgor ICogSXQgY2FuIGJlIHVzZWQgaW4gdHdvIHdheXM6CisgKgorICogVG8gaW5zdGFudGlhdGUgdGhl IER1YWxTb2NrZXQgdGVtcGxhdGUsIHdoaWNoIHdpbGwgYmUgdXNlZCB0bworICogaW5zdGFudGlh dGUgYW4gUlRQIHN0YWNrIHRlbXBsYXRlIChzdWNoIGFzIFRSVFBTZXNzaW9uQmFzZSkuCisgKgor ICogVG8gZGlyZWN0bHkgaW5zdGFudGlhdGUgYW4gUlRQIHN0YWNrIHRlbXBsYXRlIChzdWNoIGFz CisgKiBUUlRQU2Vzc2lvbkJhc2UpLgorICoKKyAqIFRoaXMgY2xhc3Mgb2ZmZXJzIGFuIGV4YW1w bGUgb2YgdGhlIGludGVyZmFjZSB0aGF0IG90aGVyIGNsYXNzZXMKKyAqIHNob3VsZCBwcm92aWRl IGluIG9yZGVyIHRvIHNwZWNpYWxpemUgdGhlIGNjUlRQIHN0YWNrIGZvciBkaWZmZXJlbnQKKyAq IHVuZGVybHlpbmcgcHJvdG9jb2xzLgorICoKKyAqIEBhdXRob3IgTGVhbmRybyBTYWxlcyA8bGVh bmRyb2FsQGdtYWlsLmNvbT4KKyAqIEBhdXRob3IgSXZvIENhbGFkbyA8dHhpdGhpaGF1c2VuQGdt YWlsLmNvbT4KKyAqIEBhdXRob3IgSGV2ZXJ0b24gU3R1YXJ0IDxoZXZlcnRvbnNuc0BnbWFpbC5j b20+CisgKiovCitjbGFzcyBSVFBCYXNlRENDUElQdjRTb2NrZXQ6IHByaXZhdGUgRENDUFNvY2tl dCB7CitwdWJsaWM6CisJLyoqCisJICogQ29uc3RydWN0b3IgZm9yIHJlY2VpdmVyLgorCSAqKi8K KwlSVFBCYXNlRENDUElQdjRTb2NrZXQoY29uc3QgSW5ldEFkZHJlc3MmIGhvc3QsIHRwcG9ydF90 IHBvcnQpIDoKKwkJRENDUFNvY2tldCgoSVBWNEhvc3QmKSBob3N0LCBwb3J0KSB7CisJfQorCisJ aW5saW5lIH5SVFBCYXNlRENDUElQdjRTb2NrZXQoKSB7CisJCWVuZFNvY2tldCgpOworCX0KKwor CWlubGluZSBzaXplX3QgYXZhaWxhYmxlKCkgeworCQlyZXR1cm4gRENDUFNvY2tldDo6YXZhaWxh YmxlKCk7CisJfQorCisJaW5saW5lIGJvb2wgaXNQZW5kaW5nUmVjdihtaWNyb3RpbWVvdXRfdCB0 aW1lb3V0ID0gMCkgeworCQlyZXR1cm4gRENDUFNvY2tldDo6aXNQZW5kaW5nQ29ubmVjdGlvbih0 aW1lb3V0KTsKKwl9CisKKwlpbmxpbmUgSW5ldEhvc3RBZGRyZXNzIGdldFNlbmRlcih0cHBvcnRf dCYgcG9ydCkgY29uc3QgeworCQlyZXR1cm4gRENDUFNvY2tldDo6Z2V0SVBWNFNlbmRlcigmcG9y dCk7CisJfQorCisJaW5saW5lIHNpemVfdCByZWN2KHVuc2lnbmVkIGNoYXIqIGJ1ZmZlciwgc2l6 ZV90IGxlbikgeworCQlzaXplX3QgYXYgPSBnZXROZXh0UGFja2V0U2l6ZSgpOworCQlsZW4gPSBs ZW4gPiBhdiA/IGF2IDogbGVuOworCQlyZXR1cm4gRENDUFNvY2tldDo6cmVhZERhdGEoKGNoYXIq KSBidWZmZXIsIGxlbik7CisJfQorCisJaW5saW5lIHZvaWQgY29ubmVjdChJUFY0SG9zdCAmaG9z dCwgdHBwb3J0X3QgcG9ydCkgeworCQlyZXR1cm4gRENDUFNvY2tldDo6Y29ubmVjdChob3N0LCBw b3J0KTsKKwl9CisKKwkvKioKKwkgKiBHZXQgc2l6ZSBvZiBuZXh0IGRhdGFncmFtIHdhaXRpbmcg dG8gYmUgcmVhZC4KKwkgKiovCisJaW5saW5lIHNpemVfdCBnZXROZXh0UGFja2V0U2l6ZSgpIGNv bnN0IHsKKwkJc2l6ZV90IGxlbjsKKwkJY2Npb2N0bChEQ0NQU29ja2V0OjpzbywgRklPTlJFQUQs IGxlbik7CisJCXJldHVybiBsZW47CisJfQorCisJU29ja2V0OjpFcnJvciBzZXRNdWx0aWNhc3Qo Ym9vbCBlbmFibGUpIHsKKwkJcmV0dXJuIERDQ1BTb2NrZXQ6OnNldE11bHRpY2FzdEJ5RmFtaWx5 KGVuYWJsZSk7CisJfQorCisJaW5saW5lIFNvY2tldDo6RXJyb3Igam9pbihjb25zdCBJUFY0TXVs dGljYXN0JiBob3N0LCB1aW50MzIgaWZhY2UpIHsKKwkJcmV0dXJuIERDQ1BTb2NrZXQ6OmpvaW4o aG9zdCk7CisJfQorCisJaW5saW5lIFNvY2tldDo6RXJyb3IgZHJvcChjb25zdCBJbmV0TWNhc3RB ZGRyZXNzJiBpYSkgeworCQlyZXR1cm4gRENDUFNvY2tldDo6ZHJvcChpYSk7CisJfQorCisJaW5s aW5lIFNvY2tldDo6RXJyb3Igc2V0VGltZVRvTGl2ZSh1bnNpZ25lZCBjaGFyIHR0bCkgeworCQly ZXR1cm4gRENDUFNvY2tldDo6c2V0VGltZVRvTGl2ZUJ5RmFtaWx5KHR0bCk7CisJfQorCisJLyoq CisJICogQ29uc3RydWN0b3IgZm9yIHRyYW5zbWl0dGVyLgorCSAqKi8KKwlSVFBCYXNlRENDUElQ djRTb2NrZXQoKSA6CisJCURDQ1BTb2NrZXQoKSB7CisJfQorCisJUlRQQmFzZURDQ1BJUHY0U29j a2V0KFJUUEJhc2VEQ0NQSVB2NFNvY2tldCYgc2VydmVyKSA6CisJCURDQ1BTb2NrZXQoc2VydmVy KSB7CisJfQorCisJaW5saW5lIHZvaWQgc2V0UGVlcihjb25zdCBJbmV0QWRkcmVzcyAmaWEsIHRw cG9ydF90IHBvcnQpIHsKKwkJaWYgKCFEQ0NQU29ja2V0Ojppc0Nvbm5lY3RlZCgpKQorCQkJREND UFNvY2tldDo6Y29ubmVjdCgoSVBWNEhvc3QmKSBpYSwgcG9ydCk7CisJfQorCisJaW5saW5lIGJv b2wgaXNDb25uZWN0KHZvaWQpIHsKKwkJcmV0dXJuIERDQ1BTb2NrZXQ6OmlzQ29ubmVjdGVkKCk7 CisJfQorCisJaW5saW5lIHNpemVfdCBzZW5kKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGNvbnN0IGJ1 ZmZlciwgc2l6ZV90IGxlbikgeworCQlEQ0NQU29ja2V0OjpidWZmZXJTaXplKGxlbik7CisJCXJl dHVybiBEQ0NQU29ja2V0Ojp3cml0ZURhdGEoYnVmZmVyLCBsZW4pOworCX0KKworCWlubGluZSBT T0NLRVQgZ2V0UmVjdlNvY2tldCgpIGNvbnN0IHsKKwkJcmV0dXJuIERDQ1BTb2NrZXQ6OnNvOwor CX0KKworCS8vIGNvbW1vbgorCWlubGluZSB2b2lkIGVuZFNvY2tldCgpIHsKKwkJRENDUFNvY2tl dDo6ZW5kU29ja2V0KCk7CisJfQorfTsKKworLyoqCisgKiBAY2xhc3MgRHVhbFJUUENoYW5uZWwK KyAqIEBzaG9ydCBBIHNvY2tldCBjbGFzcyBiYXNlZCBvbiB0d28gKFVEUCBvciBEQ0NQKS9JUHY0 IHNvY2tldHMuCiAgKgogICogRGVmaW5lcyBhIGNvbW11bmljYXRpb24gY2hhbm5lbCBmb3IgUlRQ IGRhdGEgYW5kL29yIFJUQ1Agc3RyZWFtcy4KICAqIFNvY2tldHMgdXNlZCB0byBpbnN0YW50aWF0 ZSB0aGlzIHRlbXBsYXRlIG11c3QgZGVmaW5lIGEgZnJhbWluZwogICogbWVjaGFuaXNtIChVRFAg ZG9lcyBub3QgbmVlZCBhbnkgYWRkaXRpb24sIFRDUCBkb2VzKS4KICAqCi0gKiBUaGlzIGNsYXNz IGltcGxlbWVudHMgYSBzb2NrZXQgYXMgYSBwYWlyIG9mIFVEUC9JUHY0IHNvY2tldHMsCisgKiBU aGlzIGNsYXNzIGltcGxlbWVudHMgYSBzb2NrZXQgYXMgYSBwYWlyIG9mIElQdjQgc29ja2V0cyAo c3VjaCBzb2NrZXRzCisgKiBjb3VsZCBiZSBVRFAgb3IgRENDUC1iYXNlZCksCiAgKiBhbGxsb3dp bmcgYm90aCB0cmFuc21pc3Npb24gYW5kIHJlY2VwdGlvbiBvZiBwYWNrZXRzIGluIHVuaWNhc3Qg YXMKLSAqIHdlbGwgYXMgbXVsdGljYXN0IG1vZGUuIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlz IGNsYXNzIHJlbGllcyBvbgotICogdGhlIENvbW1vbiBDKysgVURQU29ja2V0IGNsYXNzIGJ1dCBw cm92aWRlcyB0aGUgaW50ZXJmYWNlIG5lZWRlZCBieQotICogYSBjY1JUUCBzdGFjay4KKyAqIHdl bGwgYXMgbXVsdGljYXN0IG1vZGUgKGp1c3QgZm9yIFVEUCkuIFRoZSBpbXBsZW1lbnRhdGlvbiBv ZiB0aGlzIGNsYXNzCisgKiByZWxpZXMgb24gdGhlIENvbW1vbiBDKysgVURQU29ja2V0IGFuZCBE Q0NQU29ja2V0IGNsYXNzZXMgYnV0IHByb3ZpZGVzIAorICogdGhlIGludGVyZmFjZSBuZWVkZWQg YnkgYSBjY1JUUCBzdGFjay4KICAqCiAgKiBOb3JtYWxseSwgUlRQIHN0YWNrcyB3aWxsIHVzZSB0 d28gb2JqZWN0cyBvZiB0aGlzIGNsYXNzLCBvbmUgZm9yCiAgKiBSVFAgZGF0YSBwYWNrZXRzIHRy YW5zbWlzc2lvbi9yZWNlcHRpb24gYW5kIG90aGVyIGZvciBSVENQCiAgKiAoY29udHJvbCkgdHJh bnNtaXNzaW9uL3JlY2VwdGlvbi4KICAqCiAgKiBAYXV0aG9yIEZlZGVyaWNvIE1vbnRlc2lubyBQ b3V6b2xzIDxmZWRlbXBAYWx0ZXJuLm9yZz4KKyAqIEBhdXRob3IgTGVhbmRybyBTYWxlcyA8bGVh bmRyb2FsQGdtYWlsLmNvbT4KKyAqIEBhdXRob3IgSXZvIENhbGFkbyA8dHhpdGhpaGF1c2VuQGdt YWlsLmNvbT4KKyAqIEBhdXRob3IgSGV2ZXJ0b24gU3R1YXJ0IDxoZXZlcnRvbnNuc0BnbWFpbC5j b20+CiAgKiovCiB0ZW1wbGF0ZTxjbGFzcyBCYXNlU29ja2V0PgogY2xhc3MgRHVhbFJUUENoYW5u ZWwKQEAgLTE5MywyMiArMzE3LDc4IEBAIHB1YmxpYzoKIAl7IAogCQlyZWN2U29ja2V0ID0gbmV3 IEJhc2VTb2NrZXQoaWEscG9ydCk7CiAJCXNlbmRTb2NrZXQgPSBuZXcgQmFzZVNvY2tldDsKKwkJ cmVhZERhdGEgPSAwOwogCX0KIAogCWlubGluZSB+RHVhbFJUUENoYW5uZWwoKQotCXsgZGVsZXRl IHNlbmRTb2NrZXQ7IGRlbGV0ZSByZWN2U29ja2V0OyB9CisJeworCQlkZWxldGUgcmVjdlNvY2tl dDsKKwkJaWYgKGR5bmFtaWNfY2FzdDxSVFBCYXNlVURQSVB2NFNvY2tldCo+IChzZW5kU29ja2V0 KSkKKwkJCWRlbGV0ZSBzZW5kU29ja2V0OworCQllbHNlCisJCQlmb3IgKHR5cGVuYW1lIG1hcDxB ZGRyZXNzUGVlciosIEJhc2VTb2NrZXQqPjo6aXRlcmF0b3IgaXQgPQorCQkJCQljbGllbnRzU2Vy dmVyLmJlZ2luKCk7IGl0ICE9IGNsaWVudHNTZXJ2ZXIuZW5kKCk7IGl0KyspIHsKKwkJCQlkZWxl dGUgaXQtPmZpcnN0OworCQkJCWRlbGV0ZSBpdC0+c2Vjb25kOworCQkJfQorCX0KIAkKIAlpbmxp bmUgYm9vbAotCWlzUGVuZGluZ1JlY3YobWljcm90aW1lb3V0X3QgdGltZW91dCkgY29uc3QKLQl7 IHJldHVybiByZWN2U29ja2V0LT5pc1BlbmRpbmdSZWN2KHRpbWVvdXQpOyB9CisJaXNQZW5kaW5n UmVjdihtaWNyb3RpbWVvdXRfdCB0aW1lb3V0KQorCXsKKwkJaWYgKGR5bmFtaWNfY2FzdDxSVFBC YXNlVURQSVB2NFNvY2tldCo+IChyZWN2U29ja2V0KSkKKwkJCXJldHVybiByZWN2U29ja2V0LT5p c1BlbmRpbmdSZWN2KHRpbWVvdXQpOworCQllbHNlIGlmIChyZWN2U29ja2V0LT5pc1BlbmRpbmdS ZWN2KHRpbWVvdXQpKSB7CisJCQlCYXNlU29ja2V0KiBteUNsaWVudFNlcnZlciA9IG5ldyBCYXNl U29ja2V0KCpyZWN2U29ja2V0KTsKKwkJCXRwcG9ydF90IHBvcnQ7CisJCQlJbmV0SG9zdEFkZHJl c3MgbXlDbGllbnRTZXJ2ZXJBZGRyZXNzID0gbXlDbGllbnRTZXJ2ZXItPmdldFNlbmRlcigKKwkJ CQkJcG9ydCk7CisJCQlBZGRyZXNzUGVlciogYWRkciA9IG5ldyBBZGRyZXNzUGVlcigKKwkJCQkJ KEluZXRBZGRyZXNzKSBteUNsaWVudFNlcnZlckFkZHJlc3MsIHBvcnQpOworCQkJY2xpZW50c1Nl cnZlclthZGRyXSA9IG15Q2xpZW50U2VydmVyOworCQkJcmV0dXJuIHRydWU7CisJCX0gZWxzZSB7 CisJCQlmb3IgKHR5cGVuYW1lIG1hcDxBZGRyZXNzUGVlciosIEJhc2VTb2NrZXQqPjo6aXRlcmF0 b3IgaXQgPQorCQkJCQljbGllbnRzU2VydmVyLmJlZ2luKCk7IGl0ICE9IGNsaWVudHNTZXJ2ZXIu ZW5kKCk7IGl0KyspIHsKKwkJCQlSVFBCYXNlRENDUElQdjRTb2NrZXQqIHB0ciA9CisJCQkJCQlk eW5hbWljX2Nhc3Q8UlRQQmFzZURDQ1BJUHY0U29ja2V0Kj4gKGl0LT5zZWNvbmQpOworCQkJCWlm IChwdHIpIHsKKwkJCQkJc2l6ZV90IGF2YSA9IHB0ci0+Z2V0TmV4dFBhY2tldFNpemUoKTsKKwkJ CQkJaWYgKGF2YSA+IDApIHsKKwkJCQkJCXJlYWREYXRhID0gaXQtPnNlY29uZDsKKwkJCQkJCXJl dHVybiB0cnVlOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIGZhbHNlOworCQl9CisK Kwl9CiAKIAlpbmxpbmUgSW5ldEhvc3RBZGRyZXNzCi0JZ2V0U2VuZGVyKHRwcG9ydF90JiBwb3J0 KSBjb25zdAotCXsgcmV0dXJuIHJlY3ZTb2NrZXQtPmdldFNlbmRlcihwb3J0KTsgfQorCWdldFNl bmRlcih0cHBvcnRfdCYgcG9ydCkKKwl7CisJCWlmIChkeW5hbWljX2Nhc3Q8UlRQQmFzZVVEUElQ djRTb2NrZXQqPiAocmVjdlNvY2tldCkpIHsKKwkJCXJldHVybiByZWN2U29ja2V0LT5nZXRTZW5k ZXIocG9ydCk7CisJCX0gZWxzZSB7CisJCQlpZiAocmVhZERhdGEpCisJCQkJcmV0dXJuIHJlYWRE YXRhLT5nZXRTZW5kZXIocG9ydCk7CisJCQllbHNlIHsKKwkJCQkvL0ZJWE1FOiB3aGF0IHNob3Vs ZCB3ZSBkbyBpZiB0aGUgcmVhZERhdGEgaXMgbnVsbD8KKwkJCQlyZWFkRGF0YSA9IGNsaWVudHNT ZXJ2ZXIuYmVnaW4oKS0+c2Vjb25kOworCQkJCXJldHVybiByZWFkRGF0YS0+Z2V0U2VuZGVyKHBv cnQpOworCQkJfQorCQl9CisJfQogCiAJaW5saW5lIHNpemVfdAogCXJlY3YodW5zaWduZWQgY2hh ciogYnVmZmVyLCBzaXplX3QgbGVuKQotCXsgcmV0dXJuIHJlY3ZTb2NrZXQtPnJlY3YoYnVmZmVy LCBsZW4pOyB9CisJeworCQlpZiAoZHluYW1pY19jYXN0PFJUUEJhc2VVRFBJUHY0U29ja2V0Kj4g KHJlY3ZTb2NrZXQpKQorCQkJcmV0dXJuIHJlY3ZTb2NrZXQtPnJlY3YoYnVmZmVyLCBsZW4pOwor CQllbHNlCisJCQlyZXR1cm4gcmVhZERhdGEtPnJlY3YoYnVmZmVyLCBsZW4pOworCX0KIAogCWlu bGluZSBzaXplX3QKIAlnZXROZXh0UGFja2V0U2l6ZSgpIGNvbnN0CkBAIC0yMzQsNyArNDE0LDMx IEBAIHB1YmxpYzoKICAKIAlpbmxpbmUgdm9pZCAKIAlzZXRQZWVyKGNvbnN0IEluZXRBZGRyZXNz JiBob3N0LCB0cHBvcnRfdCBwb3J0KQotCXsgc2VuZFNvY2tldC0+c2V0UGVlcihob3N0LHBvcnQp OyB9CisJeworCQl1c2luZyBuYW1lc3BhY2Ugc3RkOworCQl0eXBlbmFtZSBtYXA8QWRkcmVzc1Bl ZXIqLCBCYXNlU29ja2V0Kj46Oml0ZXJhdG9yIGl0OworCisJCWlmIChkeW5hbWljX2Nhc3Q8UlRQ QmFzZVVEUElQdjRTb2NrZXQqPiAocmVjdlNvY2tldCkpCisJCQlzZW5kU29ja2V0LT5zZXRQZWVy KGhvc3QsIHBvcnQpOworCQllbHNlIHsKKwkJCUFkZHJlc3NQZWVyKiBhZGRyID0gbmV3IEFkZHJl c3NQZWVyKGhvc3QsIHBvcnQpOworCQkJZm9yIChpdCA9IGNsaWVudHNTZXJ2ZXIuYmVnaW4oKTsg aXQgIT0gY2xpZW50c1NlcnZlci5lbmQoKTsgaXQrKykgeworCQkJCUFkZHJlc3NQZWVyKiBwZWVy ID0gaXQtPmZpcnN0OworCQkJCWlmIChwZWVyLT5uZXR3b3JrQWRkcmVzcyA9PSBhZGRyLT5uZXR3 b3JrQWRkcmVzcykKKwkJCQkJaWYgKHBlZXItPmRhdGFQb3J0ID09IGFkZHItPmRhdGFQb3J0KSB7 CisJCQkJCQlzZW5kU29ja2V0ID0gaXQtPnNlY29uZDsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJ CQl9CisJCQlpZiAoaXQgPT0gY2xpZW50c1NlcnZlci5lbmQoKSkgeworCQkJCUJhc2VTb2NrZXQq IG5ld1NvY2tldCA9IG5ldyBCYXNlU29ja2V0OworCQkJCW5ld1NvY2tldC0+c2V0UGVlcihob3N0 LCBwb3J0KTsKKwkJCQljbGllbnRzU2VydmVyW2FkZHJdID0gbmV3U29ja2V0OworCQkJCXNlbmRT b2NrZXQgPSBuZXdTb2NrZXQ7CisJCQl9IGVsc2UKKwkJCQlkZWxldGUgYWRkcjsKKwkJfQorCX0K IAogCWlubGluZSBzaXplX3QKIAlzZW5kKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGNvbnN0IGJ1ZmZl ciwgc2l6ZV90IGxlbikJCSAgCkBAIC0yNDMsMTQgKzQ0NywzOSBAQCBwdWJsaWM6CiAJaW5saW5l IFNPQ0tFVCBnZXRSZWN2U29ja2V0KCkgY29uc3QKIAl7IHJldHVybiByZWN2U29ja2V0LT5nZXRS ZWN2U29ja2V0KCk7IH0KIAotCS8vIGNvbW1vbi4KKwogCWlubGluZSB2b2lkCiAJZW5kU29ja2V0 KCkKLQl7IHNlbmRTb2NrZXQtPmVuZFNvY2tldCgpOyByZWN2U29ja2V0LT5lbmRTb2NrZXQoKTsg fQorCXsKKwkJc2VuZFNvY2tldC0+ZW5kU29ja2V0KCk7CisJCXJlY3ZTb2NrZXQtPmVuZFNvY2tl dCgpOworCQlmb3IgKHR5cGVuYW1lIG1hcDxBZGRyZXNzUGVlciosIEJhc2VTb2NrZXQqPjo6aXRl cmF0b3IgaXQgPQorCQkJCWNsaWVudHNTZXJ2ZXIuYmVnaW4oKTsgaXQgIT0gY2xpZW50c1NlcnZl ci5lbmQoKTsgaXQrKykKKwkJCWl0LT5zZWNvbmQtPmVuZFNvY2tldCgpOworCX0KKworCXN0cnVj dCBBZGRyZXNzUGVlciB7CisJCUFkZHJlc3NQZWVyKEluZXRBZGRyZXNzIG5hLCB0cHBvcnRfdCBk dHApIDoKKwkJCW5ldHdvcmtBZGRyZXNzKG5hKSwgZGF0YVBvcnQoZHRwKSB7CisJCX0KKworCQlp bmxpbmUgY29uc3QgSW5ldEFkZHJlc3MmIGdldE5ldHdvcmtBZGRyZXNzKCkgY29uc3QgeworCQkJ cmV0dXJuIG5ldHdvcmtBZGRyZXNzOworCQl9CisKKwkJaW5saW5lIHRwcG9ydF90IGdldERhdGFQ b3J0KCkgY29uc3QgeworCQkJcmV0dXJuIGRhdGFQb3J0OworCQl9CisKKwkJSW5ldEFkZHJlc3Mg bmV0d29ya0FkZHJlc3M7CisJCXRwcG9ydF90IGRhdGFQb3J0OworCX07CiAKIHByaXZhdGU6CiAJ QmFzZVNvY2tldCogc2VuZFNvY2tldDsKIAlCYXNlU29ja2V0KiByZWN2U29ja2V0OworCW1hcDxB ZGRyZXNzUGVlciosIEJhc2VTb2NrZXQqPiBjbGllbnRzU2VydmVyOworCUJhc2VTb2NrZXQqIHJl YWREYXRhOwogfTsKIAogI2lmZGVmCUNDWFhfSVBWNgpAQCAtMzQ5LDI0ICs1NzgsMTMwIEBAIHB1 YmxpYzoKIH07CiAKIC8qKgotICogQGNsYXNzIER1YWxVRFBJUHY2U29ja2V0Ci0gKiBAc2hvcnQg QSBzb2NrZXQgY2xhc3MgYmFzZWQgb24gdHdvIFVEUC9JUHY2IHNvY2tldHMuCisgKiBAY2xhc3Mg UlRQQmFzZURDQ1BJUHY2U29ja2V0CisgKiBAc2hvcnQgQSBEQ0NQL0lQdjYgc29ja2V0IGNsYXNz IHRhcmdldHRlZCBhdCBSVFAgc3RhY2tzLgorICoKKyAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBm bGF0IGludGVyZmFjZSB0aGF0IGluY2x1ZGVzIGFsbCB0aGUgc2VydmljZXMKKyAqIHJlcXVpcmVk IGJ5IGFuIFJUUCBzdGFjay4KKyAqCisgKiBJdCBjYW4gYmUgdXNlZCBpbiB0d28gd2F5czoKKyAq CisgKiBUbyBpbnN0YW50aWF0ZSB0aGUgRHVhbFNvY2tldCB0ZW1wbGF0ZSwgd2hpY2ggd2lsbCBi ZSB1c2VkIHRvCisgKiBpbnN0YW50aWF0ZSBhbiBSVFAgc3RhY2sgdGVtcGxhdGUgKHN1Y2ggYXMg VFJUUFNlc3Npb25CYXNlSVBWNikuCisgKgorICogVG8gZGlyZWN0bHkgaW5zdGFudGlhdGUgYW4g UlRQIHN0YWNrIHRlbXBsYXRlIChzdWNoIGFzCisgKiBUUlRQU2Vzc2lvbkJhc2VJUFY2KS4KKyAq CisgKiBUaGlzIGNsYXNzIG9mZmVycyBhbiBleGFtcGxlIG9mIHRoZSBpbnRlcmZhY2UgdGhhdCBv dGhlciBjbGFzc2VzCisgKiBzaG91bGQgcHJvdmlkZSBpbiBvcmRlciB0byBzcGVjaWFsaXplIHRo ZSBjY1JUUCBzdGFjayBmb3IgZGlmZmVyZW50CisgKiB1bmRlcmx5aW5nIHByb3RvY29scy4KKyAq CisgKiBAYXV0aG9yIExlYW5kcm8gU2FsZXMgPGxlYW5kcm9hbEBnbWFpbC5jb20+CisgKiBAYXV0 aG9yIEl2byBDYWxhZG8gPHR4aXRoaWhhdXNlbkBnbWFpbC5jb20+CisgKiBAYXV0aG9yIEhldmVy dG9uIFN0dWFydCA8aGV2ZXJ0b25zbnNAZ21haWwuY29tPgorICoqLworY2xhc3MgUlRQQmFzZURD Q1BJUHY2U29ja2V0IDogcHJpdmF0ZSBEQ0NQU29ja2V0Cit7CitwdWJsaWM6CisJLyoqCisJICog Q29uc3RydWN0b3IgZm9yIHJlY2VpdmVyLgorCSAqKi8KKwlSVFBCYXNlRENDUElQdjZTb2NrZXQo Y29uc3QgSW5ldEFkZHJlc3MmIGhvc3QsIHRwcG9ydF90IHBvcnQpIDoKKwlEQ0NQU29ja2V0KChJ UFY2SG9zdCYpIGhvc3QsIHBvcnQpIHt9CisKKwlpbmxpbmUgflJUUEJhc2VEQ0NQSVB2NlNvY2tl dCgpCisJewllbmRTb2NrZXQoKTt9CisKKwlpbmxpbmUgc2l6ZV90IGF2YWlsYWJsZSgpCisJewly ZXR1cm4gRENDUFNvY2tldDo6YXZhaWxhYmxlKCk7fQorCisJaW5saW5lIGJvb2wgaXNQZW5kaW5n UmVjdihtaWNyb3RpbWVvdXRfdCB0aW1lb3V0ID0gMCkKKwl7CXJldHVybiBEQ0NQU29ja2V0Ojpp c1BlbmRpbmdDb25uZWN0aW9uKHRpbWVvdXQpO30KKworCWlubGluZSBJUFY2SG9zdCBnZXRTZW5k ZXIodHBwb3J0X3QmIHBvcnQpIGNvbnN0CisJewlyZXR1cm4gRENDUFNvY2tldDo6Z2V0SVBWNlNl bmRlcigmcG9ydCk7fQorCisJaW5saW5lIHNpemVfdCByZWN2KHVuc2lnbmVkIGNoYXIqIGJ1ZmZl ciwgc2l6ZV90IGxlbikgeworCQlzaXplX3QgYXYgPSBnZXROZXh0UGFja2V0U2l6ZSgpOworCQls ZW4gPSBsZW4gPiBhdiA/IGF2IDogbGVuOworCQlyZXR1cm4gRENDUFNvY2tldDo6cmVhZERhdGEo KGNoYXIqKSBidWZmZXIsIGxlbik7CisJfQorCisJaW5saW5lIHZvaWQgY29ubmVjdChJUFY2SG9z dCAmaG9zdCwgdHBwb3J0X3QgcG9ydCkKKwl7CXJldHVybiBEQ0NQU29ja2V0Ojpjb25uZWN0KGhv c3QsIHBvcnQpO30KKworCS8qKgorCSAqIEdldCBzaXplIG9mIG5leHQgZGF0YWdyYW0gd2FpdGlu ZyB0byBiZSByZWFkLgorCSAqKi8KKwlpbmxpbmUgc2l6ZV90IGdldE5leHRQYWNrZXRTaXplKCkg Y29uc3QKKwl7CXNpemVfdCBsZW47IGNjaW9jdGwoRENDUFNvY2tldDo6c28sIEZJT05SRUFELCBs ZW4pOyByZXR1cm4gbGVuO30KKworCVNvY2tldDo6RXJyb3Igc2V0TXVsdGljYXN0KGJvb2wgZW5h YmxlKQorCXsJcmV0dXJuIERDQ1BTb2NrZXQ6OnNldE11bHRpY2FzdEJ5RmFtaWx5KGVuYWJsZSk7 fQorCisJaW5saW5lIFNvY2tldDo6RXJyb3Igam9pbihjb25zdCBJUFY2TXVsdGljYXN0JiBob3N0 LCB1aW50MzIgaWZhY2UpCisJewlyZXR1cm4gRENDUFNvY2tldDo6am9pbihob3N0KTt9CisKKwlp bmxpbmUgU29ja2V0OjpFcnJvciBkcm9wKGNvbnN0IEluZXRNY2FzdEFkZHJlc3MmIGlhKQorCXsJ cmV0dXJuIERDQ1BTb2NrZXQ6OmRyb3AoaWEpO30KKworCWlubGluZSBTb2NrZXQ6OkVycm9yIHNl dFRpbWVUb0xpdmUodW5zaWduZWQgY2hhciB0dGwpCisJewlyZXR1cm4gRENDUFNvY2tldDo6c2V0 VGltZVRvTGl2ZUJ5RmFtaWx5KHR0bCk7fQorCisJLyoqCisJICogQ29uc3RydWN0b3IgZm9yIHRy YW5zbWl0dGVyLgorCSAqKi8KKwlSVFBCYXNlRENDUElQdjZTb2NrZXQoKSA6CisJRENDUFNvY2tl dCgpIHt9CisKKwlSVFBCYXNlRENDUElQdjZTb2NrZXQoUlRQQmFzZURDQ1BJUHY2U29ja2V0JiBz ZXJ2ZXIpIDoKKwlEQ0NQU29ja2V0KHNlcnZlcikge30KKworCWlubGluZSB2b2lkIHNldFBlZXIo Y29uc3QgSW5ldEFkZHJlc3MgJmlhLCB0cHBvcnRfdCBwb3J0KSB7CisJCWlmICghRENDUFNvY2tl dDo6aXNDb25uZWN0ZWQoKSkKKwkJRENDUFNvY2tldDo6Y29ubmVjdCgoSVBWNkhvc3QmKSBpYSwg cG9ydCk7CisJfQorCisJaW5saW5lIGJvb2wgaXNDb25uZWN0KHZvaWQpCisJewlyZXR1cm4gREND UFNvY2tldDo6aXNDb25uZWN0ZWQoKTt9CisKKwlpbmxpbmUgc2l6ZV90IHNlbmQoY29uc3QgdW5z aWduZWQgY2hhciogY29uc3QgYnVmZmVyLCBzaXplX3QgbGVuKSB7CisJCURDQ1BTb2NrZXQ6OmJ1 ZmZlclNpemUobGVuKTsKKwkJcmV0dXJuIERDQ1BTb2NrZXQ6OndyaXRlRGF0YShidWZmZXIsIGxl bik7CisJfQorCisJaW5saW5lIFNPQ0tFVCBnZXRSZWN2U29ja2V0KCkgY29uc3QKKwl7CXJldHVy biBEQ0NQU29ja2V0Ojpzbzt9CisKKwkvLyBjb21tb24KKwlpbmxpbmUgdm9pZCBlbmRTb2NrZXQo KQorCXsJRENDUFNvY2tldDo6ZW5kU29ja2V0KCk7fQorCit9OworCisvKioKKyAqIEBjbGFzcyBE dWFsUlRQQ2hhbm5lbElQVjYKKyAqIEBzaG9ydCBBIHNvY2tldCBjbGFzcyBiYXNlZCBvbiB0d28g KFVEUCBvciBEQ0NQKS9JUHY2IHNvY2tldHMuCiAgKgogICogRGVmaW5lcyBhIGNvbW11bmljYXRp b24gY2hhbm5lbCBmb3IgUlRQIGRhdGEgYW5kL29yIFJUQ1Agc3RyZWFtcy4KICAqIFNvY2tldHMg dXNlZCB0byBpbnN0YW50aWF0ZSB0aGlzIHRlbXBsYXRlIG11c3QgZGVmaW5lIGEgZnJhbWluZwog ICogbWVjaGFuaXNtIChVRFAgZG9lcyBub3QgbmVlZCBhbnkgYWRkaXRpb24sIFRDUCBkb2VzKS4K ICAqCi0gKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgYSBzb2NrZXQgYXMgYSBwYWlyIG9mIFVEUC9J UHY2IHNvY2tldHMsCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgYSBzb2NrZXQgYXMgYSBwYWly IG9mIElQdjYgc29ja2V0cyAoc3VjaCBzb2NrZXRzCisgKiBjb3VsZCBiZSBVRFAgb3IgRENDUC1i YXNlZCksCiAgKiBhbGxsb3dpbmcgYm90aCB0cmFuc21pc3Npb24gYW5kIHJlY2VwdGlvbiBvZiBw YWNrZXRzIGluIHVuaWNhc3QgYXMKLSAqIHdlbGwgYXMgbXVsdGljYXN0IG1vZGUuIFRoZSBpbXBs ZW1lbnRhdGlvbiBvZiB0aGlzIGNsYXNzIHJlbGllcyBvbgotICogdGhlIENvbW1vbiBDKysgVURQ U29ja2V0IGNsYXNzIGJ1dCBwcm92aWRlcyB0aGUgaW50ZXJmYWNlIG5lZWRlZCBieQotICogYSBj Y1JUUCBzdGFjay4KKyAqIHdlbGwgYXMgbXVsdGljYXN0IG1vZGUgKGp1c3QgZm9yIFVEUCkuIFRo ZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGNsYXNzCisgKiByZWxpZXMgb24gdGhlIENvbW1vbiBD KysgVURQU29ja2V0IGFuZCBEQ0NQU29ja2V0IGNsYXNzZXMgYnV0IHByb3ZpZGVzIAorICogdGhl IGludGVyZmFjZSBuZWVkZWQgYnkgYSBjY1JUUCBzdGFjay4KICAqCiAgKiBOb3JtYWxseSwgUlRQ IHN0YWNrcyB3aWxsIHVzZSB0d28gb2JqZWN0cyBvZiB0aGlzIGNsYXNzLCBvbmUgZm9yCiAgKiBS VFAgZGF0YSBwYWNrZXRzIHRyYW5zbWlzc2lvbi9yZWNlcHRpb24gYW5kIG90aGVyIGZvciBSVENQ CiAgKiAoY29udHJvbCkgdHJhbnNtaXNzaW9uL3JlY2VwdGlvbi4KICAqCiAgKiBAYXV0aG9yIERh dmlkIFN1Z2FyIDxkeWZldEBnbnV0ZWxlcGhvbnkub3JnPgorICogQGF1dGhvciBMZWFuZHJvIFNh bGVzIDxsZWFuZHJvYWxAZ21haWwuY29tPgorICogQGF1dGhvciBJdm8gQ2FsYWRvIDx0eGl0aGlo YXVzZW5AZ21haWwuY29tPgorICogQGF1dGhvciBIZXZlcnRvbiBTdHVhcnQgPGhldmVydG9uc25z QGdtYWlsLmNvbT4KICAqKi8KIHRlbXBsYXRlPGNsYXNzIEJhc2VTb2NrZXQ+CiBjbGFzcyBEdWFs UlRQQ2hhbm5lbElQVjYKQEAgLTM3NiwyMiArNzExLDc4IEBAIHB1YmxpYzoKIAl7IAogCQlyZWN2 U29ja2V0ID0gbmV3IEJhc2VTb2NrZXQoaWEscG9ydCk7CiAJCXNlbmRTb2NrZXQgPSBuZXcgQmFz ZVNvY2tldDsKKwkJcmVhZERhdGEgPSAwOwogCX0KIAogCWlubGluZSB+RHVhbFJUUENoYW5uZWxJ UFY2KCkKLQl7IGRlbGV0ZSBzZW5kU29ja2V0OyBkZWxldGUgcmVjdlNvY2tldDsgfQorCXsKKwkJ ZGVsZXRlIHJlY3ZTb2NrZXQ7CisJCWlmIChkeW5hbWljX2Nhc3Q8UlRQQmFzZVVEUElQdjRTb2Nr ZXQqPiAoc2VuZFNvY2tldCkpCisJCQlkZWxldGUgc2VuZFNvY2tldDsKKwkJZWxzZQorCQkJZm9y ICh0eXBlbmFtZSBtYXA8QWRkcmVzc1BlZXIqLCBCYXNlU29ja2V0Kj46Oml0ZXJhdG9yIGl0ID0K KwkJCQljbGllbnRzU2VydmVyLmJlZ2luKCk7IGl0ICE9IGNsaWVudHNTZXJ2ZXIuZW5kKCk7IGl0 KyspIHsKKwkJCQlkZWxldGUgaXQtPmZpcnN0OworCQkJCWRlbGV0ZSBpdC0+c2Vjb25kOworCQkJ fQorCX0KIAkKIAlpbmxpbmUgYm9vbAotCWlzUGVuZGluZ1JlY3YobWljcm90aW1lb3V0X3QgdGlt ZW91dCkgY29uc3QKLQl7IHJldHVybiByZWN2U29ja2V0LT5pc1BlbmRpbmdSZWN2KHRpbWVvdXQp OyB9CisJaXNQZW5kaW5nUmVjdihtaWNyb3RpbWVvdXRfdCB0aW1lb3V0KQorCXsKKwkJaWYgKGR5 bmFtaWNfY2FzdDxSVFBCYXNlVURQSVB2NlNvY2tldCo+IChyZWN2U29ja2V0KSkKKwkJCXJldHVy biByZWN2U29ja2V0LT5pc1BlbmRpbmdSZWN2KHRpbWVvdXQpOworCQllbHNlIGlmIChyZWN2U29j a2V0LT5pc1BlbmRpbmdSZWN2KHRpbWVvdXQpKSB7CisJCQlCYXNlU29ja2V0KiBteUNsaWVudFNl cnZlciA9IG5ldyBCYXNlU29ja2V0KCpyZWN2U29ja2V0KTsKKwkJCXRwcG9ydF90IHBvcnQ7CisJ CQlJbmV0SG9zdEFkZHJlc3MgbXlDbGllbnRTZXJ2ZXJBZGRyZXNzID0gbXlDbGllbnRTZXJ2ZXIt PmdldFNlbmRlcihwb3J0KTsKKwkJCUFkZHJlc3NQZWVyKiBhZGRyID0gbmV3IEFkZHJlc3NQZWVy KChJbmV0QWRkcmVzcykgbXlDbGllbnRTZXJ2ZXJBZGRyZXNzLCBwb3J0KTsKKwkJCWNsaWVudHNT ZXJ2ZXJbYWRkcl0gPSBteUNsaWVudFNlcnZlcjsKKwkJCXJldHVybiB0cnVlOworCQl9IGVsc2Ug eworCQkJZm9yICh0eXBlbmFtZSBtYXA8QWRkcmVzc1BlZXIqLCBCYXNlU29ja2V0Kj46Oml0ZXJh dG9yIGl0ID0KKwkJCQkJY2xpZW50c1NlcnZlci5iZWdpbigpOyBpdCAhPSBjbGllbnRzU2VydmVy LmVuZCgpOyBpdCsrKSB7CisJCQkJUlRQQmFzZURDQ1BJUHY0U29ja2V0KiBwdHIgPQorCQkJCWR5 bmFtaWNfY2FzdDxSVFBCYXNlRENDUElQdjZTb2NrZXQqPiAoaXQtPnNlY29uZCk7CisJCQkJaWYg KHB0cikKKwkJCQl7CisJCQkJCXNpemVfdCBhdmEgPSBwdHItPmdldE5leHRQYWNrZXRTaXplKCk7 CisJCQkJCWlmIChhdmEgPiAwKSB7CisJCQkJCQlyZWFkRGF0YSA9IGl0LT5zZWNvbmQ7CisJCQkJ CQlyZXR1cm4gdHJ1ZTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCXJldHVybiBmYWxzZTsKKwkJ fQorCX0KIAogCWlubGluZSBJUFY2SG9zdAotCWdldFNlbmRlcih0cHBvcnRfdCYgcG9ydCkgY29u c3QKLQl7IHJldHVybiByZWN2U29ja2V0LT5nZXRJUFY2U2VuZGVyKHBvcnQpOyB9CisJZ2V0U2Vu ZGVyKHRwcG9ydF90JiBwb3J0KQorCXsKKwkJaWYgKGR5bmFtaWNfY2FzdDxSVFBCYXNlVURQSVB2 NlNvY2tldCo+IChyZWN2U29ja2V0KSkgeworCQkJcmV0dXJuIHJlY3ZTb2NrZXQtPmdldElQVjZT ZW5kZXIocG9ydCk7CisJCX0gZWxzZSB7CisJCQlpZiAocmVhZERhdGEpCisJCQkJcmV0dXJuIHJl YWREYXRhLT5nZXRJUFY2U2VuZGVyKHBvcnQpOworCQkJZWxzZQorCQkJeworCQkJCS8vRklYTUU6 IHdoYXQgc2hvdWxkIHdlIGRvIGlmIHRoZSByZWFkRGF0YSBpcyBudWxsPworCQkJCXJlYWREYXRh ID0gY2xpZW50c1NlcnZlci5iZWdpbigpLT5zZWNvbmQ7CisJCQkJcmV0dXJuIHJlYWREYXRhLT5n ZXRTZW5kZXIocG9ydCk7CisJCQl9CisKKwkJfQorCX0KIAogCWlubGluZSBzaXplX3QKIAlyZWN2 KHVuc2lnbmVkIGNoYXIqIGJ1ZmZlciwgc2l6ZV90IGxlbikKLQl7IHJldHVybiByZWN2U29ja2V0 LT5yZWN2KGJ1ZmZlciwgbGVuKTsgfQorCXsKKwkJaWYgKGR5bmFtaWNfY2FzdDxSVFBCYXNlVURQ SVB2NlNvY2tldCo+IChyZWN2U29ja2V0KSkKKwkJCXJldHVybiByZWN2U29ja2V0LT5yZWN2KGJ1 ZmZlciwgbGVuKTsKKwkJZWxzZQorCQkJcmV0dXJuIHJlYWREYXRhLT5yZWN2KGJ1ZmZlciwgbGVu KTsKKwl9CiAKIAlpbmxpbmUgc2l6ZV90CiAJZ2V0TmV4dFBhY2tldFNpemUoKSBjb25zdApAQCAt NDE3LDcgKzgwOCwzNCBAQCBwdWJsaWM6CiAgCiAJaW5saW5lIHZvaWQgCiAJc2V0UGVlcihjb25z dCBJUFY2SG9zdCYgaG9zdCwgdHBwb3J0X3QgcG9ydCkKLQl7IHNlbmRTb2NrZXQtPnNldFBlZXIo aG9zdCxwb3J0KTsgfQorCXsKKwkJdXNpbmcgbmFtZXNwYWNlIHN0ZDsKKwkJdHlwZW5hbWUgbWFw PEFkZHJlc3NQZWVyKiwgQmFzZVNvY2tldCo+OjppdGVyYXRvciBpdDsKKworCQlpZiAoZHluYW1p Y19jYXN0PFJUUEJhc2VVRFBJUHY2U29ja2V0Kj4gKHJlY3ZTb2NrZXQpKQorCQkJc2VuZFNvY2tl dC0+c2V0UGVlcihob3N0LCBwb3J0KTsKKwkJZWxzZSB7CisJCQlBZGRyZXNzUGVlciogYWRkciA9 IG5ldyBBZGRyZXNzUGVlcihob3N0LCBwb3J0KTsKKwkJCWZvciAoaXQgPSBjbGllbnRzU2VydmVy LmJlZ2luKCk7IGl0ICE9IGNsaWVudHNTZXJ2ZXIuZW5kKCk7IGl0KyspIHsKKwkJCQlBZGRyZXNz UGVlciogcGVlciA9IGl0LT5maXJzdDsKKwkJCQlpZiAocGVlci0+bmV0d29ya0FkZHJlc3MgPT0g YWRkci0+bmV0d29ya0FkZHJlc3MpCisJCQkJCWlmIChwZWVyLT5kYXRhUG9ydCA9PSBhZGRyLT5k YXRhUG9ydCkKKwkJCQkJeworCQkJCQkJc2VuZFNvY2tldCA9IGl0LT5zZWNvbmQ7CisJCQkJCQli cmVhazsKKwkJCQkJfQorCQkJfQorCQkJaWYgKGl0ID09IGNsaWVudHNTZXJ2ZXIuZW5kKCkpCisJ CQl7CisJCQkJQmFzZVNvY2tldCogbmV3U29ja2V0ID0gbmV3IEJhc2VTb2NrZXQ7CisJCQkJbmV3 U29ja2V0LT5zZXRQZWVyKGhvc3QsIHBvcnQpOworCQkJCWNsaWVudHNTZXJ2ZXJbYWRkcl0gPSBu ZXdTb2NrZXQ7CisJCQkJc2VuZFNvY2tldCA9IG5ld1NvY2tldDsKKwkJCX0KKwkJCWVsc2UKKwkJ CQlkZWxldGUgYWRkcjsKKwkJfQorCX0KIAogCWlubGluZSBzaXplX3QKIAlzZW5kKGNvbnN0IHVu c2lnbmVkIGNoYXIqIGNvbnN0IGJ1ZmZlciwgc2l6ZV90IGxlbikJCSAgCkBAIC00MjYsMTQgKzg0 NCwzOSBAQCBwdWJsaWM6CiAJaW5saW5lIFNPQ0tFVCBnZXRSZWN2U29ja2V0KCkgY29uc3QKIAl7 IHJldHVybiByZWN2U29ja2V0LT5nZXRSZWN2U29ja2V0KCk7IH0KIAotCS8vIGNvbW1vbi4KKwog CWlubGluZSB2b2lkCiAJZW5kU29ja2V0KCkKLQl7IHNlbmRTb2NrZXQtPmVuZFNvY2tldCgpOyBy ZWN2U29ja2V0LT5lbmRTb2NrZXQoKTsgfQorCXsKKwkJc2VuZFNvY2tldC0+ZW5kU29ja2V0KCk7 CisJCXJlY3ZTb2NrZXQtPmVuZFNvY2tldCgpOworCQlmb3IgKHR5cGVuYW1lIG1hcDxBZGRyZXNz UGVlciosIEJhc2VTb2NrZXQqPjo6aXRlcmF0b3IgaXQgPQorCQkJCWNsaWVudHNTZXJ2ZXIuYmVn aW4oKTsgaXQgIT0gY2xpZW50c1NlcnZlci5lbmQoKTsgaXQrKykKKwkJCWl0LT5zZWNvbmQtPmVu ZFNvY2tldCgpOworCX0KKworCXN0cnVjdCBBZGRyZXNzUGVlciB7CisJCUFkZHJlc3NQZWVyKElu ZXRBZGRyZXNzIG5hLCB0cHBvcnRfdCBkdHApIDoKKwkJbmV0d29ya0FkZHJlc3MobmEpLCBkYXRh UG9ydChkdHApIHsKKwkJfQorCisJCWlubGluZSBjb25zdCBJbmV0QWRkcmVzcyYgZ2V0TmV0d29y a0FkZHJlc3MoKSBjb25zdCB7CisJCQlyZXR1cm4gbmV0d29ya0FkZHJlc3M7CisJCX0KKworCQlp bmxpbmUgdHBwb3J0X3QgZ2V0RGF0YVBvcnQoKSBjb25zdCB7CisJCQlyZXR1cm4gZGF0YVBvcnQ7 CisJCX0KKworCQlJbmV0QWRkcmVzcyBuZXR3b3JrQWRkcmVzczsKKwkJdHBwb3J0X3QgZGF0YVBv cnQ7CisJfTsKIAogcHJpdmF0ZToKIAlCYXNlU29ja2V0KiBzZW5kU29ja2V0OwogCUJhc2VTb2Nr ZXQqIHJlY3ZTb2NrZXQ7CisJbWFwPEFkZHJlc3NQZWVyKiwgQmFzZVNvY2tldCo+IGNsaWVudHNT ZXJ2ZXI7CisJQmFzZVNvY2tldCogcmVhZERhdGE7CiB9OwogCiAKQEAgLTQ0MSw5ICs4ODQsMTQg QEAgdHlwZWRlZiBEdWFsUlRQQ2hhbm5lbElQVjY8UlRQQmFzZVVEUElQdgogdHlwZWRlZglSVFBC YXNlVURQSVB2NlNvY2tldCBTaW5nbGVSVFBDaGFubmVsSVBWNjsKIHR5cGVkZWYgU2luZ2xlUlRQ Q2hhbm5lbElQVjYgU3ltbWV0cmljUlRQQ2hhbm5lbElQVjY7CiAKK3R5cGVkZWYgRHVhbFJUUENo YW5uZWxJUFY2PFJUUEJhc2VEQ0NQSVB2NlNvY2tldD4gRHVhbFJUUERDQ1BJUHY2Q2hhbm5lbDsK K3R5cGVkZWYgUlRQQmFzZURDQ1BJUHY2U29ja2V0IFNpbmdsZVJUUERDQ1BDaGFubmVsSVBWNjsK K3R5cGVkZWYgU2luZ2xlUlRQRENDUENoYW5uZWxJUFY2IFN5bW1ldHJpY1JUUERDQ1BDaGFubmVs SVBWNjsKKwogI2VuZGlmCiAKIHR5cGVkZWYgRHVhbFJUUENoYW5uZWw8UlRQQmFzZVVEUElQdjRT b2NrZXQ+IER1YWxSVFBVRFBJUHY0Q2hhbm5lbDsKK3R5cGVkZWYgRHVhbFJUUENoYW5uZWw8UlRQ QmFzZURDQ1BJUHY0U29ja2V0PiBEdWFsUlRQRENDUElQdjRDaGFubmVsOwogCiAvKioKICAqIE1h eSBiZSB1c2VkIGluIGFwcGxpY2F0aW9ucyB3aGVyZSB1c2luZyB0aGUgc2FtZSBzb2NrZXQgZm9y IGJvdGgKQEAgLTQ1MiwxMCArOTAwLDIxIEBAIHR5cGVkZWYgRHVhbFJUUENoYW5uZWw8UlRQQmFz ZVVEUElQdjRTb2MKIHR5cGVkZWYgUlRQQmFzZVVEUElQdjRTb2NrZXQgU2luZ2xlUlRQQ2hhbm5l bDsKIAogLyoqCisgKiBNYXkgYmUgdXNlZCBpbiBhcHBsaWNhdGlvbnMgd2hlcmUgdXNpbmcgdGhl IHNhbWUgRENDUCBzb2NrZXQgZm9yIGJvdGgKKyAqIHNlbmRpbmcgYW5kIHJlY2VpdmluZyBpcyBu b3QgYSBsaW1pdGF0aW9uLgorICoqLwordHlwZWRlZiBSVFBCYXNlRENDUElQdjRTb2NrZXQgU2lu Z2xlUlRQRENDUENoYW5uZWw7CisKKy8qKgogICogQWN0dWFsbHksIFJUUCB3aXRoIGEgc2luZ2xl IGNoYW5uZWwgY2FuIGJlIGNhbGxlZCAnU3ltbWV0cmljIFJUUCcKICAqKi8KIHR5cGVkZWYgU2lu Z2xlUlRQQ2hhbm5lbCBTeW1tZXRyaWNSVFBDaGFubmVsOwogCisvKioKKyAqIEFjdHVhbGx5LCBS VFAgd2l0aCBhIHNpbmdsZSBjaGFubmVsIHVzaW5nIERDQ1AgdHJhbnNwb3J0IHByb3RvY29sIGNh biBiZSBjYWxsZWQgJ1N5bW1ldHJpYyBSVFAtRENDUCcKKyAqKi8KK3R5cGVkZWYgU2luZ2xlUlRQ RENDUENoYW5uZWwgU3ltbWV0cmljUlRQRENDUENoYW5uZWw7CisKIC8qKiBAfSovIC8vIHNvY2tl dHMKIAogI2lmZGVmICBDQ1hYX05BTUVTUEFDRVMKZGlmZiAtdXByTiBjY3J0cC9zcmMvY2NydHAv cnRwLmggY2NydHBfZGNjcC9zcmMvY2NydHAvcnRwLmgKLS0tIGNjcnRwL3NyYy9jY3J0cC9ydHAu aAkyMDA5LTA5LTAxIDE1OjM2OjA4LjAwMDAwMDAwMCAtMDMwMAorKysgY2NydHBfZGNjcC9zcmMv Y2NydHAvcnRwLmgJMjAwOS0wOS0wMSAxNTozNzoyMy4wMDAwMDAwMDAgLTAzMDAKQEAgLTYwNiw2 ICs2MDYsNyBAQCBpbmxpbmUgc2l6ZV90IGRpc3BhdGNoQllFKGNvbnN0IHN0ZDo6c3RyCiAgKiBA c2hvcnQgVURQL0lQdjQgUlRQIFNlc3Npb24gc2NoZWR1bGVkIGJ5IG9uZSB0aHJlYWQgb2YgZXhl Y3V0aW9uLgogICoqLwogdHlwZWRlZiBTaW5nbGVUaHJlYWRSVFBTZXNzaW9uPD4gUlRQU2Vzc2lv bjsKK3R5cGVkZWYgU2luZ2xlVGhyZWFkUlRQU2Vzc2lvbjxEdWFsUlRQRENDUElQdjRDaGFubmVs LCBEdWFsUlRQRENDUElQdjRDaGFubmVsLCBBVlBRdWV1ZT4gUlRQRENDUFNlc3Npb247CiAKIC8q KgogICogQHR5cGVkZWYgUlRQU29ja2V0Cg== --000e0cd59fd883e20604764d168b Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Ccrtp-devel mailing list [email protected] http://lists.gnu.org/mailman/listinfo/ccrtp-devel --000e0cd59fd883e20604764d168b--