From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5328 invoked by alias); 27 Aug 2002 16:14:29 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 5320 invoked from network); 27 Aug 2002 16:14:27 -0000 Received: from unknown (HELO valrhona.uglyboxes.com) (64.1.192.220) by sources.redhat.com with SMTP; 27 Aug 2002 16:14:27 -0000 Received: from localhost.localdomain (IDENT:xnKWEkL6qUQGy73aH+bAbrzu38TVwNbR@localhost.localdomain [127.0.0.1]) by valrhona.uglyboxes.com (8.11.6/8.11.6) with ESMTP id g7RGHAv01658 for ; Tue, 27 Aug 2002 09:17:10 -0700 Date: Tue, 27 Aug 2002 09:26:00 -0000 From: Keith Seitz X-X-Sender: keiths@valrhona.uglyboxes.com To: gdb-patches@sources.redhat.com Subject: [RFC] Interpreters (~final) (fwd) Message-ID: MIME-Version: 1.0 Content-Type: MULTIPART/Mixed; BOUNDARY="26610376-1587295155-1029270166=:1395" Content-ID: X-SW-Source: 2002-08/txt/msg00898.txt.bz2 This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. --26610376-1587295155-1029270166=:1395 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII Content-ID: Content-length: 1968 Ping. ---------- Forwarded message ---------- Date: Tue, 13 Aug 2002 13:22:46 -0700 (PDT) From: Keith Seitz To: gdb-patches@sources.redhat.com Subject: [RFC] Interpreters (~final) Hi, Well, at long last, I think I am ready to try and get some of this work approved. So, first on the chopping block: interps.c, interps.h. ChangeLogs (to be massaged appropriately): 2002-08-13 Keith Seitz * interps.c (_initialize_interpreter): Remove ability to set the interpreter. This could really undermine MI clients. * top.c (catcher): Don't worry about interpreter changes. 2002-08-12 Keith Seitz * interps.c (_initialize_interpreter): Add completer function to "set interpreter" command. 2002-08-12 Keith Seitz * interps.c: Run through gdb_indent.sh * interps.h: Ditto. 2002-06-24 Keith Seitz * interps.c: Include gdb-events.h. (clear_interpreter_hooks): Also clear out event handlers. (gdb_set_interpreter): Clear out any hooks/event handlers that may have been installed by old interpreter. 2002-06-18 Keith Seitz * interps.h: Add GDB_INTERPRETER_MI1. GDB_INTERPRETER_MI will now be mi version 2. 2002-05-28 Keith Seitz * interps.c: New file. (Originally called interpreter.c by Apple) * interps.h: New file. (Originally called interpreter.h by Apple) "Patch" See appeneded files, interps.h and interps.c For the curious, you can play with the whole thing by checking out kseitz_interps-20020528-branch, which was last merged with cvs HEAD on 9 Aug 2002. The branch contains testcases, documentation, etc, too. It probably isn't perfect, but it's at least a place to start (IMO). There are no regressions with this compared to gdb of 9 Aug 2002. Questions/comments welcome. Keith --26610376-1587295155-1029270166=:1395 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; NAME="interps.h" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: ATTACHMENT; FILENAME="interps.h" Content-length: 4209 LyogTWFuYWdlcyBpbnRlcnByZXRlcnMgZm9yIGdkYi4NCiAgIENvcHlyaWdo dCAyMDAwLDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuDQog ICBXcml0dGVuIGJ5IEppbSBJbmdoYW0gPGppbmdoYW1AYXBwbGUuY29tPiBv ZiBBcHBsZSBDb21wdXRlciwgSW5jLg0KDQogICBUaGlzIGZpbGUgaXMgcGFy dCBvZiBHREIuDQoNCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQogICBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KICAgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg b3INCiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQoN CiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KICAgYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YN CiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUNCiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQoNCiAgIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlDQogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3 cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KICAgRm91bmRhdGlvbiwgSW5j LiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLA0KICAgQm9zdG9uLCBN QSAwMjExMS0xMzA3LCBVU0EuICovDQoNCiNpZm5kZWYgR0RCX0lOVEVSUFJF VEVSX0gNCiNkZWZpbmUgR0RCX0lOVEVSUFJFVEVSX0gNCg0KdHlwZWRlZiBp bnQgKCppbnRlcnBfaW5pdF9mdHlwZSkgKHZvaWQgKmRhdGEpOw0KdHlwZWRl ZiBpbnQgKCppbnRlcnBfcmVzdW1lX2Z0eXBlKSAodm9pZCAqZGF0YSk7DQp0 eXBlZGVmIGludCAoKmludGVycF9kb19vbmVfZXZlbnRfZnR5cGUpICh2b2lk ICpkYXRhKTsNCnR5cGVkZWYgaW50ICgqaW50ZXJwX3N1c3BlbmRfZnR5cGUp ICh2b2lkICpkYXRhKTsNCnR5cGVkZWYgaW50ICgqaW50ZXJwX2RlbGV0ZV9m dHlwZSkgKHZvaWQgKmRhdGEpOw0KdHlwZWRlZiBpbnQgKCppbnRlcnBfcHJv bXB0X2Z0eXBlKSAodm9pZCAqZGF0YSwgY2hhciAqbmV3X3Byb21wdCk7DQp0 eXBlZGVmIGludCAoKmludGVycF9leGVjX2Z0eXBlKSAodm9pZCAqZGF0YSwg Y2hhciAqY29tbWFuZCk7DQoNCnN0cnVjdCB1aV9vdXQ7DQpzdHJ1Y3QgZ2Ri X2ludGVycHJldGVyOw0KDQpzdHJ1Y3QgZ2RiX2ludGVycHJldGVyX3Byb2Nz DQp7DQogIGludGVycF9pbml0X2Z0eXBlIGluaXRfcHJvYzsNCiAgaW50ZXJw X3Jlc3VtZV9mdHlwZSByZXN1bWVfcHJvYzsNCiAgaW50ZXJwX2RvX29uZV9l dmVudF9mdHlwZSBkb19vbmVfZXZlbnRfcHJvYzsNCiAgaW50ZXJwX3N1c3Bl bmRfZnR5cGUgc3VzcGVuZF9wcm9jOw0KICBpbnRlcnBfZGVsZXRlX2Z0eXBl IGRlbGV0ZV9wcm9jOw0KICBpbnRlcnBfZXhlY19mdHlwZSBleGVjX3Byb2M7 DQogIGludGVycF9wcm9tcHRfZnR5cGUgcHJvbXB0X3Byb2M7DQp9Ow0KDQpl eHRlcm4gc3RydWN0IGdkYl9pbnRlcnByZXRlcg0KICAqZ2RiX25ld19pbnRl cnByZXRlciAoY2hhciAqbmFtZSwgdm9pZCAqZGF0YSwgc3RydWN0IHVpX291 dCAqdWlvdXQsDQoJCQlzdHJ1Y3QgZ2RiX2ludGVycHJldGVyX3Byb2NzICpw cm9jcyk7DQoNCmV4dGVybiBpbnQgZ2RiX2FkZF9pbnRlcnByZXRlciAoc3Ry dWN0IGdkYl9pbnRlcnByZXRlciAqaW50ZXJwKTsNCmV4dGVybiBpbnQgZ2Ri X2RlbGV0ZV9pbnRlcnByZXRlciAoc3RydWN0IGdkYl9pbnRlcnByZXRlciAq aW50ZXJwKTsNCmV4dGVybiBpbnQgZ2RiX3NldF9pbnRlcnByZXRlciAoc3Ry dWN0IGdkYl9pbnRlcnByZXRlciAqaW50ZXJwKTsNCmV4dGVybiBzdHJ1Y3Qg Z2RiX2ludGVycHJldGVyICpnZGJfbG9va3VwX2ludGVycHJldGVyIChjaGFy ICpuYW1lKTsNCmV4dGVybiBzdHJ1Y3QgZ2RiX2ludGVycHJldGVyICpnZGJf Y3VycmVudF9pbnRlcnByZXRlciAoKTsNCmV4dGVybiBzdHJ1Y3QgdWlfb3V0 ICpnZGJfaW50ZXJwcmV0ZXJfdWlfb3V0IChzdHJ1Y3QgZ2RiX2ludGVycHJl dGVyICppbnRlcnApOw0KZXh0ZXJuIGludCBnZGJfY3VycmVudF9pbnRlcnBy ZXRlcl9pc19uYW1lZCAoY2hhciAqaW50ZXJwX25hbWUpOw0KZXh0ZXJuIGlu dCBnZGJfaW50ZXJwcmV0ZXJfZXhlYyAoY2hhciAqY29tbWFuZF9zdHIpOw0K ZXh0ZXJuIGludCBnZGJfaW50ZXJwcmV0ZXJfZGlzcGxheV9wcm9tcHQgKGNo YXIgKm5ld19wcm9tcHQpOw0KZXh0ZXJuIGludCBnZGJfaW50ZXJwcmV0ZXJf c2V0X3F1aWV0IChzdHJ1Y3QgZ2RiX2ludGVycHJldGVyICppbnRlcnAsDQoJ CQkJICAgICAgaW50IHF1aWV0KTsNCmV4dGVybiBpbnQgZ2RiX2ludGVycHJl dGVyX2lzX3F1aWV0IChzdHJ1Y3QgZ2RiX2ludGVycHJldGVyICppbnRlcnAp Ow0KZXh0ZXJuIHN0cnVjdCBnZGJfaW50ZXJwcmV0ZXJfcHJvY3MgKmdkYl9p bnRlcnByZXRlcl9nZXRfcHJvY3MgKHN0cnVjdA0KCQkJCQkJCQlnZGJfaW50 ZXJwcmV0ZXINCgkJCQkJCQkJKmludGVycCk7DQpleHRlcm4gdm9pZCAqZ2Ri X2ludGVycHJldGVyX2dldF9kYXRhIChzdHJ1Y3QgZ2RiX2ludGVycHJldGVy ICppbnRlcnApOw0KZXh0ZXJuIGludCBpbnRlcnByZXRlcl9kb19vbmVfZXZl bnQgKCk7DQoNCnZvaWQgY2xlYXJfaW50ZXJwcmV0ZXJfaG9va3MgKCk7DQoN Ci8qIHdlbGwta25vd24gaW50ZXJwcmV0ZXJzICovDQojZGVmaW5lIEdEQl9J TlRFUlBSRVRFUl9DT05TT0xFCQkiY29uc29sZSINCiNkZWZpbmUgR0RCX0lO VEVSUFJFVEVSX01JMAkJIm1pMCINCiNkZWZpbmUgR0RCX0lOVEVSUFJFVEVS X01JMSAgICAgICAgICAgICAibWkxIg0KI2RlZmluZSBHREJfSU5URVJQUkVU RVJfTUkJCSJtaSINCiNlbmRpZiAvKiBHREJfSU5URVJQUkVURVJfSCAqLw0K --26610376-1587295155-1029270166=:1395 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; NAME="interps.c" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: ATTACHMENT; FILENAME="interps.c" Content-length: 25100 LyogTWFuYWdlcyBpbnRlcnByZXRlcnMgZm9yIGdkYi4NCiAgIENvcHlyaWdo dCAyMDAwLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLg0K ICAgV3JpdHRlbiBieSBKaW0gSW5naGFtIDxqaW5naGFtQGFwcGxlLmNvbT4g b2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4NCg0KICAgVGhpcyBmaWxlIGlzIHBh cnQgb2YgR0RCLg0KDQogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KICAg aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkNCiAgIHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us IG9yDQogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0K DQogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCiAgIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m DQogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlDQogICBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KDQogICBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZQ0KICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwg d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCiAgIEZvdW5kYXRpb24sIElu Yy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwNCiAgIEJvc3Rvbiwg TUEgMDIxMTEtMTMwNywgVVNBLiAqLw0KDQovKiBUaGlzIGlzIGp1c3QgYSBm aXJzdCBjdXQgYXQgc2VwYXJhdGluZyBvdXQgdGhlICJpbnRlcnByZXRlciIg ZnVuY3Rpb25zDQogICBvZiBnZGIgaW50byBzZWxmLWNvbnRhaW5lZCBtb2R1 bGVzLiAgVGhlcmUgYXJlIGEgY291cGxlIG9mIG9wZW4gYXJlYXMgdGhhdA0K ICAgbmVlZCB0byBiZSBzb3J0ZWQgb3V0Og0KDQogICAxKSBUaGUgaW50ZXJw cmV0ZXIgZXhwbGljaXRseSBjb250YWlucyBhIFVJX09VVCwgYW5kIGNhbiBp bnNlcnQgaXRzZWxmDQogICBpbnRvIHRoZSBldmVudCBsb29wLCBidXQgaXQg ZG9lc24ndCBleHBsaWNpdGx5IGNvbnRhaW4gaG9va3MgZm9yIHJlYWRsaW5l Lg0KICAgSSBkaWQgdGhpcyBiZWNhdXNlIGl0IHNlZW1zIHRvIG1lIG1hbnkg aW50ZXJwcmV0ZXJzIHdvbid0IHdhbnQgdG8gdXNlDQogICB0aGUgcmVhZGxp bmUgY29tbWFuZCBpbnRlcmZhY2UsIGFuZCBpdCBpcyBwcm9iYWJseSBzaW1w bGVyIHRvIGp1c3QgbGV0DQogICB0aGVtIHRha2Ugb3ZlciB0aGUgaW5wdXQg aW4gdGhlaXIgcmVzdW1lIHByb2MuICANCg0KICAgMikgVGhlIGV2ZW50IGxv b3AgaW5zZXJ0aW9uIGlzIHByb2JhYmx5IHdyb25nLiAgSSBqdXN0IGluc2Vy dGVkIGEgDQogICBkb19vbmVfZXZlbnQgYWxvbmdzaWRlIGdkYidzIGRvX29u ZV9ldmVudC4gIFRoaXMgcHJvYmFibHkgd2lsbCBsZWFkDQogICB0byBvbmUg b3IgdGhlIG90aGVyIGV2ZW50IGxvb3AgZ2V0dGluZyBzdGFydmVkLiAgSXQg d291bGQgYmUgYmV0dGVyDQogICB0byBwcm92aWRlIGNvbnZlcnNpb24gZnVu Y3Rpb25zIGZvciB0aGUgZ2RiIGZpbGUgaGFuZGxlcnMsIGFuZCB3aGVuDQog ICBhbiBpbnRlcnByZXRlciBzdGFydHMgdXAsIGl0IGdyYWJzIGFsbCB0aGUg Z2RiIGNyZWF0ZWQgZmlsZSBoYW5kbGVycw0KICAgYW5kIGluc2VydHMgdGhl bSBpbnRvIGl0cyBzZWxlY3QuICBUaGlzIGlzIG1vcmUgY29tcGxpY2F0ZWQs IGhvd2V2ZXIsDQogICBhbmQgSSBoYXZlIHJ1biBvdXQgb2YgdGltZSBmb3Ig bm93Lg0KKi8NCg0KI2luY2x1ZGUgImRlZnMuaCINCiNpbmNsdWRlICJnZGJj bWQuaCINCiNpbmNsdWRlICJ1aS1vdXQuaCINCiNpbmNsdWRlICJldmVudC1s b29wLmgiDQojaW5jbHVkZSAiZXZlbnQtdG9wLmgiDQojaW5jbHVkZSAiaW50 ZXJwcy5oIg0KI2luY2x1ZGUgImNvbXBsZXRlci5oIg0KI2luY2x1ZGUgImdk Yl9zdHJpbmcuaCINCiNpbmNsdWRlICJnZGItZXZlbnRzLmgiDQoNCnN0cnVj dCBnZGJfaW50ZXJwcmV0ZXINCnsNCiAgY2hhciAqbmFtZTsJCQkvKiBUaGlz IGlzIHRoZSBuYW1lIGluICItaT0iIGFuZCBzZXQgaW50ZXJwcmV0ZXIuICov DQogIHN0cnVjdCBnZGJfaW50ZXJwcmV0ZXIgKm5leHQ7CS8qIEludGVycHJl dGVycyBhcmUgc3RvcmVkIGluIGEgbGlua2VkIGxpc3QsIA0KCQkJCSAgIHRo aXMgaXMgdGhlIG5leHQgb25lLi4uICovDQogIHZvaWQgKmRhdGE7CQkJLyog VGhpcyBpcyBhIGNvb2tpZSB0aGF0IHRoZSBpbnN0YW5jZSBvZiB0aGUgDQoJ CQkJICAgaW50ZXJwcmV0ZXIgY2FuIHVzZSwgZm9yIGluc3RhbmNlIHRvIGNh bGwgDQoJCQkJICAgaXRzZWxmIGluIGhvb2sgZnVuY3Rpb25zICovDQogIGlu dCBpbml0ZWQ7CQkJLyogSGFzIHRoZSBpbml0X3Byb2MgYmVlbiBydW4/ICov DQogIHN0cnVjdCB1aV9vdXQgKmludGVycHJldGVyX291dDsJLyogVGhpcyBp cyB0aGUgdWlfb3V0IHVzZWQgdG8gY29sbGVjdCANCgkJCQkJICAgcmVzdWx0 cyBmb3IgdGhpcyBpbnRlcnByZXRlci4gIEl0IGNhbiANCgkJCQkJICAgYmUg YSBmb3JtYXR0ZXIgZm9yIHN0ZG91dCwgYXMgaXMgdGhlIA0KCQkJCQkgICBj YXNlIGZvciB0aGUgY29uc29sZSAmIG1pIG91dHB1dHMsIG9yIGl0IA0KCQkJ CQkgICBtaWdodCBiZSBhIHJlc3VsdCBmb3JtYXR0ZXIuICovDQogIHN0cnVj dCBnZGJfaW50ZXJwcmV0ZXJfcHJvY3MgcHJvY3M7DQogIGludCBxdWlldF9w Ow0KfTsNCg0KLyogRnVuY3Rpb25zIGxvY2FsIHRvIHRoaXMgZmlsZS4gKi8N CnN0YXRpYyB2b2lkIGluaXRpYWxpemVfaW50ZXJwcyAodm9pZCk7DQoNCnN0 YXRpYyB2b2lkIHNldF9pbnRlcnByZXRlcl9jbWQgKGNoYXIgKmFyZ3MsIGlu dCBmcm9tX3R0eSwNCgkJCQkgc3RydWN0IGNtZF9saXN0X2VsZW1lbnQgKmMp Ow0Kc3RhdGljIHZvaWQgbGlzdF9pbnRlcnByZXRlcl9jbWQgKGNoYXIgKmFy Z3MsIGludCBmcm9tX3R0eSk7DQpzdGF0aWMgdm9pZCBkb19zZXRfaW50ZXJw cmV0ZXIgKGludCBub3RfYW5fZmQpOw0Kc3RhdGljIGNoYXIgKippbnRlcnBy ZXRlcl9jb21wbGV0ZXIgKGNoYXIgKnRleHQsIGNoYXIgKndvcmQpOw0KDQov KiBUaGUgbWFnaWMgaW5pdGlhbGl6YXRpb24gcm91dGluZSBmb3IgdGhpcyBt b2R1bGUuICovDQoNCnZvaWQgX2luaXRpYWxpemVfaW50ZXJwcmV0ZXIgKHZv aWQpOw0KDQovKiBWYXJpYWJsZXMgbG9jYWwgdG8gdGhpcyBmaWxlOiAqLw0K DQpzdGF0aWMgc3RydWN0IGdkYl9pbnRlcnByZXRlciAqaW50ZXJwX2xpc3Qg PSBOVUxMOw0Kc3RhdGljIHN0cnVjdCBnZGJfaW50ZXJwcmV0ZXIgKmN1cnJl bnRfaW50ZXJwcmV0ZXIgPSBOVUxMOw0KDQpzdGF0aWMgaW50IGludGVycHJl dGVyX2luaXRpYWxpemVkID0gMDsNCg0KLyogZ2RiX25ld19pbnRlcnByZXRl ciAtIFRoaXMgYWxsb2NhdGVzIHNwYWNlIGZvciBhIG5ldyBpbnRlcnByZXRl ciwNCiAgIGZpbGxzIHRoZSBmaWVsZHMgZnJvbSB0aGUgaW5wdXRzLCBhbmQg cmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlDQogICBpbnRlcnByZXRlci4gKi8N Cg0Kc3RydWN0IGdkYl9pbnRlcnByZXRlciAqDQpnZGJfbmV3X2ludGVycHJl dGVyIChjaGFyICpuYW1lLA0KCQkgICAgIHZvaWQgKmRhdGEsDQoJCSAgICAg c3RydWN0IHVpX291dCAqdWlvdXQsDQoJCSAgICAgc3RydWN0IGdkYl9pbnRl cnByZXRlcl9wcm9jcyAqcHJvY3MpDQp7DQogIHN0cnVjdCBnZGJfaW50ZXJw cmV0ZXIgKm5ld19pbnRlcnA7DQoNCiAgbmV3X2ludGVycCA9DQogICAgKHN0 cnVjdCBnZGJfaW50ZXJwcmV0ZXIgKikgeG1hbGxvYyAoc2l6ZW9mIChzdHJ1 Y3QgZ2RiX2ludGVycHJldGVyKSk7DQoNCiAgbmV3X2ludGVycC0+bmFtZSA9 IHhzdHJkdXAgKG5hbWUpOw0KICBuZXdfaW50ZXJwLT5kYXRhID0gZGF0YTsN CiAgbmV3X2ludGVycC0+aW50ZXJwcmV0ZXJfb3V0ID0gdWlvdXQ7DQogIG5l d19pbnRlcnAtPnF1aWV0X3AgPSAwOw0KICBuZXdfaW50ZXJwLT5wcm9jcy5p bml0X3Byb2MgPSBwcm9jcy0+aW5pdF9wcm9jOw0KICBuZXdfaW50ZXJwLT5w cm9jcy5yZXN1bWVfcHJvYyA9IHByb2NzLT5yZXN1bWVfcHJvYzsNCiAgbmV3 X2ludGVycC0+cHJvY3MuZG9fb25lX2V2ZW50X3Byb2MgPSBwcm9jcy0+ZG9f b25lX2V2ZW50X3Byb2M7DQogIG5ld19pbnRlcnAtPnByb2NzLnN1c3BlbmRf cHJvYyA9IHByb2NzLT5zdXNwZW5kX3Byb2M7DQogIG5ld19pbnRlcnAtPnBy b2NzLmRlbGV0ZV9wcm9jID0gcHJvY3MtPmRlbGV0ZV9wcm9jOw0KICBuZXdf aW50ZXJwLT5wcm9jcy5leGVjX3Byb2MgPSBwcm9jcy0+ZXhlY19wcm9jOw0K ICBuZXdfaW50ZXJwLT5wcm9jcy5wcm9tcHRfcHJvYyA9IHByb2NzLT5wcm9t cHRfcHJvYzsNCiAgbmV3X2ludGVycC0+aW5pdGVkID0gMDsNCg0KICByZXR1 cm4gbmV3X2ludGVycDsNCn0NCg0KLyogQWRkIGludGVycHJldGVyIElOVEVS UCB0byB0aGUgZ2RiIGludGVycHJldGVyIGxpc3QuICBJZiBhbg0KICAgaW50 ZXJwcmV0ZXIgb2YgdGhlIHNhbWUgbmFtZSBpcyBhbHJlYWR5IG9uIHRoZSBs aXN0LCB0aGVuDQogICB0aGUgbmV3IG9uZSBpcyBOT1QgYWRkZWQsIGFuZCB0 aGUgZnVuY3Rpb24gcmV0dXJucyAwLiAgT3RoZXJ3aXNlDQogICBpdCByZXR1 cm5zIDEuICovDQoNCmludA0KZ2RiX2FkZF9pbnRlcnByZXRlciAoc3RydWN0 IGdkYl9pbnRlcnByZXRlciAqaW50ZXJwKQ0Kew0KICBpZiAoIWludGVycHJl dGVyX2luaXRpYWxpemVkKQ0KICAgIGluaXRpYWxpemVfaW50ZXJwcyAoKTsN Cg0KICBpZiAoZ2RiX2xvb2t1cF9pbnRlcnByZXRlciAoaW50ZXJwLT5uYW1l KSAhPSBOVUxMKQ0KICAgIHJldHVybiAwOw0KDQogIGludGVycC0+bmV4dCA9 IGludGVycF9saXN0Ow0KICBpbnRlcnBfbGlzdCA9IGludGVycDsNCg0KICBy ZXR1cm4gMTsNCn0NCg0KLyogTG9va3MgZm9yIHRoZSBpbnRlcnByZXRlciBJ TlRFUlAgaW4gdGhlIGludGVycHJldGVyIGxpc3QuICBJZiBpdCBleGlzdHMs DQogICBydW5zIHRoZSBkZWxldGVfcHJvYywgYW5kIGlmIHRoaXMgaXMgc3Vj Y2Vzc2Z1bCwgdGhlIElOVEVSUCBpcyBkZWxldGVkIGZyb20NCiAgIHRoZSBp bnRlcnByZXRlciBsaXN0IGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyAxLiAg SWYgdGhlIGRlbGV0ZV9wcm9jIGZhaWxzLCB0aGUNCiAgIGZ1bmN0aW9uIHJl dHVybnMgLTEgYW5kIHRoZSBpbnRlcnByZXRlciBpcyBOT1QgcmVtb3ZlZCBm cm9tIHRoZSBsaXN0LiAgSWYgdGhlDQogICBpbnRlcnAgaXMgbm90IGZvdW5k LCAwIGlzIHJldHVybmVkLiAqLw0KDQppbnQNCmdkYl9kZWxldGVfaW50ZXJw cmV0ZXIgKHN0cnVjdCBnZGJfaW50ZXJwcmV0ZXIgKmludGVycCkNCnsNCiAg c3RydWN0IGdkYl9pbnRlcnByZXRlciAqY3VyX3B0ciwgKnByZXZfcHRyOw0K DQogIGlmICghaW50ZXJwcmV0ZXJfaW5pdGlhbGl6ZWQpDQogICAgew0KICAg ICAgdWlfb3V0X21lc3NhZ2UgKHVpb3V0LCAwLA0KCQkgICAgICAiWW91IGNh bid0IGRlbGV0ZSBhbiBpbnRlcnAgYmVmb3JlIHlvdSBoYXZlIGFkZGVkIG9u ZSEiKTsNCiAgICAgIHJldHVybiAtMTsNCiAgICB9DQoNCiAgaWYgKGludGVy cF9saXN0ID09IE5VTEwpDQogICAgew0KICAgICAgdWlfb3V0X21lc3NhZ2Ug KHVpb3V0LCAwLCAiTm8gaW50ZXJwcmV0ZXJzIHRvIGRlbGV0ZS4iKTsNCiAg ICAgIHJldHVybiAtMTsNCiAgICB9DQoNCiAgaWYgKGludGVycF9saXN0LT5u ZXh0ID09IE5VTEwpDQogICAgew0KICAgICAgdWlfb3V0X21lc3NhZ2UgKHVp b3V0LCAwLCAiWW91IGNhbid0IGRlbGV0ZSBnZGIncyBvbmx5IGludGVwcmV0 ZXIuIik7DQogICAgICByZXR1cm4gLTE7DQogICAgfQ0KDQogIGZvciAoY3Vy X3B0ciA9IGludGVycF9saXN0LCBwcmV2X3B0ciA9IE5VTEw7DQogICAgICAg Y3VyX3B0ciAhPSBOVUxMOyBwcmV2X3B0ciA9IGN1cl9wdHIsIGN1cl9wdHIg PSBjdXJfcHRyLT5uZXh0KQ0KICAgIHsNCiAgICAgIGlmIChjdXJfcHRyID09 IGludGVycCkNCgl7DQoJICAvKiBDYW4ndCBjdXJyZW50bHkgZGVsZXRlIHRo ZSBjb25zb2xlIGludGVycHJldGVyLi4uICovDQoJICBpZiAoc3RyY21wIChp bnRlcnAtPm5hbWUsICJjb25zb2xlIikgPT0gMCkNCgkgICAgew0KCSAgICAg IHVpX291dF9tZXNzYWdlICh1aW91dCwgMCwNCgkJCSAgICAgICJZb3UgY2Fu J3QgZGVsZXRlIHRoZSBjb25zb2xlIGludGVycHJldGVyLiIpOw0KCSAgICAg IHJldHVybiAtMTsNCgkgICAgfQ0KDQoJICAvKiBJZiB0aGUgaW50ZXJwcmV0 ZXIgaXMgdGhlIGN1cnJlbnQgaW50ZXJwcmV0ZXIsIHN3aXRjaA0KCSAgICAg YmFjayB0byB0aGUgY29uc29sZSBpbnRlcnByZXRlciAqLw0KDQoJICBpZiAo aW50ZXJwID09IGN1cnJlbnRfaW50ZXJwcmV0ZXIpDQoJICAgIHsNCgkgICAg ICBnZGJfc2V0X2ludGVycHJldGVyIChnZGJfbG9va3VwX2ludGVycHJldGVy ICgiY29uc29sZSIpKTsNCgkgICAgfQ0KDQoJICAvKiBEb24ndCBkZWxldGUg dGhlIGludGVycHJldGVyIGlmIGl0cyBkZWxldGUgcHJvYyBmYWlscyAqLw0K DQoJICBpZiAoKGludGVycC0+cHJvY3MuZGVsZXRlX3Byb2MgIT0gTlVMTCkN CgkgICAgICAmJiAoIWludGVycC0+cHJvY3MuZGVsZXRlX3Byb2MgKGludGVy cC0+ZGF0YSkpKQ0KCSAgICByZXR1cm4gLTE7DQoNCgkgIGlmIChjdXJfcHRy ID09IGludGVycF9saXN0KQ0KCSAgICBpbnRlcnBfbGlzdCA9IGN1cl9wdHIt Pm5leHQ7DQoJICBlbHNlDQoJICAgIHByZXZfcHRyLT5uZXh0ID0gY3VyX3B0 ci0+bmV4dDsNCg0KCSAgYnJlYWs7DQoJfQ0KICAgIH0NCg0KICBpZiAoY3Vy X3B0ciA9PSBOVUxMKQ0KICAgIHJldHVybiAwOw0KICBlbHNlDQogICAgcmV0 dXJuIDE7DQp9DQoNCi8qIFRoaXMgc2V0cyB0aGUgY3VycmVudCBpbnRlcnBy ZXRlciB0byBiZSBJTlRFUlAuICBJZiBJTlRFUlAgaGFzIG5vdA0KICAgYmVl biBpbml0aWFsaXplZCwgdGhlbiB0aGlzIHdpbGwgYWxzbyBydW4gdGhlIGlu aXQgcHJvYy4gIElmIHRoZQ0KICAgaW5pdCBwcm9jIGlzIHN1Y2Nlc3NmdWws IHJldHVybiAxLCBpZiBpdCBmYWlscywgc2V0IHRoZSBvbGQNCiAgIGludGVy cHJldGVyIGJhY2sgaW4gcGxhY2UgYW5kIHJldHVybiAwLiAgSWYgd2UgY2Fu J3QgcmVzdG9yZSB0aGUNCiAgIG9sZCBpbnRlcnByZXRlciwgdGhlbiByYWlz ZSBhbiBpbnRlcm5hbCBlcnJvciwgc2luY2Ugd2UgYXJlIGluDQogICBwcmV0 dHkgYmFkIHNoYXBlIGF0IHRoaXMgcG9pbnQuICovDQoNCmludA0KZ2RiX3Nl dF9pbnRlcnByZXRlciAoc3RydWN0IGdkYl9pbnRlcnByZXRlciAqaW50ZXJw KQ0Kew0KICBzdHJ1Y3QgZ2RiX2ludGVycHJldGVyICpvbGRfaW50ZXJwID0g Y3VycmVudF9pbnRlcnByZXRlcjsNCiAgaW50IGZpcnN0X3RpbWUgPSAwOw0K DQoNCiAgY2hhciBidWZmZXJbNjRdOw0KDQogIGlmIChjdXJyZW50X2ludGVy cHJldGVyICE9IE5VTEwpDQogICAgew0KICAgICAgZG9fYWxsX2NvbnRpbnVh dGlvbnMgKCk7DQogICAgICB1aV9vdXRfZmx1c2ggKHVpb3V0KTsNCiAgICAg IGlmIChjdXJyZW50X2ludGVycHJldGVyLT5wcm9jcy5zdXNwZW5kX3Byb2MN CgkgICYmICFjdXJyZW50X2ludGVycHJldGVyLT5wcm9jcy5zdXNwZW5kX3By b2MgKGN1cnJlbnRfaW50ZXJwcmV0ZXItPg0KCQkJCQkJICAgICAgIGRhdGEp KQ0KCXsNCgkgIGVycm9yICgiQ291bGQgbm90IHN1c3BlbmQgaW50ZXJwcmV0 ZXIgXCIlc1wiXG4iLA0KCQkgY3VycmVudF9pbnRlcnByZXRlci0+bmFtZSk7 DQoJfQ0KICAgIH0NCiAgZWxzZQ0KICAgIHsNCiAgICAgIGZpcnN0X3RpbWUg PSAxOw0KICAgIH0NCg0KICBjdXJyZW50X2ludGVycHJldGVyID0gaW50ZXJw Ow0KDQogIC8qIFdlIHVzZSBpbnRlcnByZXRlcl9wIGZvciB0aGUgInNldCBp bnRlcnByZXRlciIgdmFyaWFibGUsIHNvIHdlIG5lZWQNCiAgICAgdG8gbWFr ZSBzdXJlIHdlIGhhdmUgYSBtYWxsb2MnZWQgY29weSBmb3IgdGhlIHNldCBj b21tYW5kIHRvIGZyZWUuICovDQogIGlmIChpbnRlcnByZXRlcl9wICE9IE5V TEwNCiAgICAgICYmIHN0cmNtcCAoY3VycmVudF9pbnRlcnByZXRlci0+bmFt ZSwgaW50ZXJwcmV0ZXJfcCkgIT0gMCkNCiAgICB7DQogICAgICB4ZnJlZSAo aW50ZXJwcmV0ZXJfcCk7DQoNCiAgICAgIGludGVycHJldGVyX3AgPSB4c3Ry ZHVwIChjdXJyZW50X2ludGVycHJldGVyLT5uYW1lKTsNCiAgICB9DQoNCiAg dWlvdXQgPSBpbnRlcnAtPmludGVycHJldGVyX291dDsNCg0KICAvKiBSdW4g dGhlIGluaXQgcHJvYy4gIElmIGl0IGZhaWxzLCB0cnkgdG8gcmVzdG9yZSB0 aGUgb2xkIGludGVycC4gKi8NCg0KICBpZiAoIWludGVycC0+aW5pdGVkKQ0K ICAgIHsNCiAgICAgIGlmIChpbnRlcnAtPnByb2NzLmluaXRfcHJvYyAhPSBO VUxMKQ0KCXsNCgkgIGlmICghaW50ZXJwLT5wcm9jcy5pbml0X3Byb2MgKGlu dGVycC0+ZGF0YSkpDQoJICAgIHsNCgkgICAgICBpZiAoIWdkYl9zZXRfaW50 ZXJwcmV0ZXIgKG9sZF9pbnRlcnApKQ0KCQlpbnRlcm5hbF9lcnJvciAoX19G SUxFX18sIF9fTElORV9fLA0KCQkJCSJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBu ZXcgaW50ZXJwIFwiJXNcIiAlcyIsDQoJCQkJaW50ZXJwLT5uYW1lLA0KCQkJ CSJhbmQgY291bGQgbm90IHJlc3RvcmUgb2xkIGludGVycCFcbiIpOw0KCSAg ICAgIHJldHVybiAwOw0KCSAgICB9DQoJICBlbHNlDQoJICAgIHsNCgkgICAg ICBpbnRlcnAtPmluaXRlZCA9IDE7DQoJICAgIH0NCgl9DQogICAgICBlbHNl DQoJew0KCSAgaW50ZXJwLT5pbml0ZWQgPSAxOw0KCX0NCiAgICB9DQoNCiAg LyogQ2xlYXIgb3V0IGFueSBpbnN0YWxsZWQgaW50ZXJwcmV0ZXIgaG9va3Mv ZXZlbnQgaGFuZGxlcnMuICovDQogIGNsZWFyX2ludGVycHJldGVyX2hvb2tz ICgpOw0KDQogIGlmIChpbnRlcnAtPnByb2NzLnJlc3VtZV9wcm9jICE9IE5V TEwNCiAgICAgICYmICghaW50ZXJwLT5wcm9jcy5yZXN1bWVfcHJvYyAoaW50 ZXJwLT5kYXRhKSkpDQogICAgew0KICAgICAgaWYgKCFnZGJfc2V0X2ludGVy cHJldGVyIChvbGRfaW50ZXJwKSkNCglpbnRlcm5hbF9lcnJvciAoX19GSUxF X18sIF9fTElORV9fLA0KCQkJIkZhaWxlZCB0byBpbml0aWFsaXplIG5ldyBp bnRlcnAgXCIlc1wiICVzIiwNCgkJCWludGVycC0+bmFtZSwgImFuZCBjb3Vs ZCBub3QgcmVzdG9yZSBvbGQgaW50ZXJwIVxuIik7DQogICAgICByZXR1cm4g MDsNCiAgICB9DQoNCiAgLyogRmluYWxseSwgcHV0IHVwIHRoZSBuZXcgcHJv bXB0IHRvIHNob3cgdGhhdCB3ZSBhcmUgaW5kZWVkIGhlcmUuIA0KICAgICBB bHNvLCBkaXNwbGF5X2dkYl9wcm9tcHQgZm9yIHRoZSBjb25zb2xlIGRvZXMg c29tZSByZWFkbGluZSBtYWdpYw0KICAgICB3aGljaCBpcyBuZWVkZWQgZm9y IHRoZSBjb25zb2xlIGludGVycHJldGVyLCBhdCBsZWFzdC4uLiAqLw0KDQog IGlmICghZmlyc3RfdGltZSkNCiAgICB7DQogICAgICBpZiAoIWdkYl9pbnRl cnByZXRlcl9pc19xdWlldCAoaW50ZXJwKSkNCgl7DQoJICBzcHJpbnRmIChi dWZmZXIsICJTd2l0Y2hpbmcgdG8gaW50ZXJwcmV0ZXIgXCIlLjI0c1wiLlxu IiwNCgkJICAgaW50ZXJwLT5uYW1lKTsNCgkgIHVpX291dF90ZXh0ICh1aW91 dCwgYnVmZmVyKTsNCgl9DQogICAgICBkaXNwbGF5X2dkYl9wcm9tcHQgKE5V TEwpOw0KICAgIH0NCg0KICByZXR1cm4gMTsNCn0NCg0KLyoNCiAqIGdkYl9s b29rdXBfaW50ZXJwcmV0ZXIgLSBMb29rcyB1cCB0aGUgaW50ZXJwcmV0ZXIg Zm9yIE5BTUUuICBJZg0KICogbm8gc3VjaCBpbnRlcnByZXRlciBleGlzdHMs IHJldHVybiBOVUxMLCBvdGhlcndpc2UgcmV0dXJuIGEgcG9pbnRlcg0KICog dG8gdGhlIGludGVycHJldGVyLiANCiAqLw0KDQpzdHJ1Y3QgZ2RiX2ludGVy cHJldGVyICoNCmdkYl9sb29rdXBfaW50ZXJwcmV0ZXIgKGNoYXIgKm5hbWUp DQp7DQogIHN0cnVjdCBnZGJfaW50ZXJwcmV0ZXIgKmludGVycDsNCg0KICBp ZiAobmFtZSA9PSBOVUxMIHx8IHN0cmxlbiAobmFtZSkgPT0gMCkNCiAgICBy ZXR1cm4gTlVMTDsNCg0KICBmb3IgKGludGVycCA9IGludGVycF9saXN0OyBp bnRlcnAgIT0gTlVMTDsgaW50ZXJwID0gaW50ZXJwLT5uZXh0KQ0KICAgIHsN CiAgICAgIGlmIChzdHJjbXAgKGludGVycC0+bmFtZSwgbmFtZSkgPT0gMCkN CglyZXR1cm4gaW50ZXJwOw0KICAgIH0NCg0KICByZXR1cm4gTlVMTDsNCn0N Cg0KLyogUmV0dXJucyB0aGUgY3VycmVudCBpbnRlcnByZXRlci4gKi8NCg0K c3RydWN0IGdkYl9pbnRlcnByZXRlciAqDQpnZGJfY3VycmVudF9pbnRlcnBy ZXRlciAoKQ0Kew0KICByZXR1cm4gY3VycmVudF9pbnRlcnByZXRlcjsNCn0N Cg0Kc3RydWN0IHVpX291dCAqDQpnZGJfaW50ZXJwcmV0ZXJfdWlfb3V0IChz dHJ1Y3QgZ2RiX2ludGVycHJldGVyICppbnRlcnApDQp7DQogIGlmIChpbnRl cnAgIT0gTlVMTCkNCiAgICByZXR1cm4gaW50ZXJwLT5pbnRlcnByZXRlcl9v dXQ7DQoNCiAgcmV0dXJuIGN1cnJlbnRfaW50ZXJwcmV0ZXItPmludGVycHJl dGVyX291dDsNCn0NCg0KLyogUmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50 IGludGVycCBpcyB0aGUgcGFzc2VkIGluIG5hbWUuICovDQppbnQNCmdkYl9j dXJyZW50X2ludGVycHJldGVyX2lzX25hbWVkIChjaGFyICppbnRlcnBfbmFt ZSkNCnsNCiAgc3RydWN0IGdkYl9pbnRlcnByZXRlciAqY3VycmVudF9pbnRl cnAgPSBnZGJfY3VycmVudF9pbnRlcnByZXRlciAoKTsNCg0KICBpZiAoY3Vy cmVudF9pbnRlcnApDQogICAgcmV0dXJuIChzdHJjbXAgKGN1cnJlbnRfaW50 ZXJwLT5uYW1lLCBpbnRlcnBfbmFtZSkgPT0gMCk7DQoNCiAgcmV0dXJuIDA7 DQp9DQoNCi8qIFRoaXMgaXMgY2FsbGVkIGluIGRpc3BsYXlfZ2RiX3Byb21w dC4NCiAgIElmIHRoZSBjdXJyZW50IGludGVycHJldGVyIGRlZmluZXMgYSBw cm9tcHRfcHJvYywgdGhlbiB0aGF0IHByb2MgaXMgDQogICBydW4uICBJZiB0 aGUgcHJvYyByZXR1cm5zIGEgbm9uLXplcm8gdmFsdWUsIGRpc3BsYXlfZ2Ri X3Byb21wdCB3aWxsDQogICByZXR1cm4gd2l0aG91dCBpdHNlbGYgZGlzcGxh eWluZyB0aGUgcHJvbXB0LiAqLw0KDQppbnQNCmdkYl9pbnRlcnByZXRlcl9k aXNwbGF5X3Byb21wdCAoY2hhciAqbmV3X3Byb21wdCkNCnsNCiAgaWYgKGN1 cnJlbnRfaW50ZXJwcmV0ZXItPnByb2NzLnByb21wdF9wcm9jID09IE5VTEwp DQogICAgcmV0dXJuIDA7DQogIGVsc2UNCiAgICByZXR1cm4gY3VycmVudF9p bnRlcnByZXRlci0+cHJvY3MucHJvbXB0X3Byb2MgKGN1cnJlbnRfaW50ZXJw cmV0ZXItPmRhdGEsDQoJCQkJCQkgICBuZXdfcHJvbXB0KTsNCn0NCg0KaW50 DQpnZGJfaW50ZXJwcmV0ZXJfaXNfcXVpZXQgKHN0cnVjdCBnZGJfaW50ZXJw cmV0ZXIgKmludGVycCkNCnsNCiAgaWYgKGludGVycCAhPSBOVUxMKQ0KICAg IHJldHVybiBpbnRlcnAtPnF1aWV0X3A7DQogIGVsc2UNCiAgICByZXR1cm4g Y3VycmVudF9pbnRlcnByZXRlci0+cXVpZXRfcDsNCn0NCg0KaW50DQpnZGJf aW50ZXJwcmV0ZXJfc2V0X3F1aWV0IChzdHJ1Y3QgZ2RiX2ludGVycHJldGVy ICppbnRlcnAsIGludCBxdWlldCkNCnsNCiAgaW50IG9sZF92YWwgPSBpbnRl cnAtPnF1aWV0X3A7DQogIGludGVycC0+cXVpZXRfcCA9IHF1aWV0Ow0KICBy ZXR1cm4gb2xkX3ZhbDsNCn0NCg0KLyogZ2RiX2ludGVycHJldGVyX2V4ZWMg LSBUaGlzIGV4ZWN1dGVzIENPTU1BTkRfU1RSIGluIHRoZSBjdXJyZW50IA0K ICAgaW50ZXJwcmV0ZXIuICovDQoNCmludA0KZ2RiX2ludGVycHJldGVyX2V4 ZWMgKGNoYXIgKmNvbW1hbmRfc3RyKQ0Kew0KICBpZiAoY3VycmVudF9pbnRl cnByZXRlci0+cHJvY3MuZXhlY19wcm9jICE9IE5VTEwpDQogICAgew0KICAg ICAgcmV0dXJuIGN1cnJlbnRfaW50ZXJwcmV0ZXItPnByb2NzLmV4ZWNfcHJv YyAoY3VycmVudF9pbnRlcnByZXRlci0+ZGF0YSwNCgkJCQkJCSAgIGNvbW1h bmRfc3RyKTsNCiAgICB9DQoNCiAgcmV0dXJuIDA7DQp9DQoNCnN0cnVjdCBn ZGJfaW50ZXJwcmV0ZXJfcHJvY3MgKg0KZ2RiX2ludGVycHJldGVyX2dldF9w cm9jcyAoc3RydWN0IGdkYl9pbnRlcnByZXRlciAqaW50ZXJwKQ0Kew0KICBp ZiAoaW50ZXJwICE9IE5VTEwpDQogICAgcmV0dXJuICZpbnRlcnAtPnByb2Nz Ow0KDQogIHJldHVybiAmY3VycmVudF9pbnRlcnByZXRlci0+cHJvY3M7DQp9 DQoNCnZvaWQgKg0KZ2RiX2ludGVycHJldGVyX2dldF9kYXRhIChzdHJ1Y3Qg Z2RiX2ludGVycHJldGVyICppbnRlcnApDQp7DQogIGlmIChpbnRlcnAgIT0g TlVMTCkNCiAgICByZXR1cm4gaW50ZXJwLT5kYXRhOw0KDQogIHJldHVybiBj dXJyZW50X2ludGVycHJldGVyLT5kYXRhOw0KfQ0KDQppbnQNCmludGVycHJl dGVyX2RvX29uZV9ldmVudCAoKQ0Kew0KICBpZiAoY3VycmVudF9pbnRlcnBy ZXRlci0+cHJvY3MuZG9fb25lX2V2ZW50X3Byb2MgPT0gTlVMTCkNCiAgICBy ZXR1cm4gMDsNCg0KICByZXR1cm4gY3VycmVudF9pbnRlcnByZXRlci0+cHJv Y3MuZG9fb25lX2V2ZW50X3Byb2MgKGN1cnJlbnRfaW50ZXJwcmV0ZXItPg0K CQkJCQkJICAgICAgIGRhdGEpOw0KfQ0KDQovKiBBIGNvbnZlbmllbmNlIHJv dXRpbmUgdGhhdCBudWxscyBvdXQgYWxsIHRoZQ0KICAgY29tbW9uIGNvbW1h bmQgaG9va3MuICBVc2UgaXQgd2hlbiByZW1vdmluZyB5b3VyIGludGVycHJl dGVyIGluIGl0cyANCiAgIHN1c3BlbmQgcHJvYy4gKi8NCg0Kdm9pZA0KY2xl YXJfaW50ZXJwcmV0ZXJfaG9va3MgKCkNCnsNCiAgaW5pdF91aV9ob29rID0g MDsNCiAgcHJpbnRfZnJhbWVfaW5mb19saXN0aW5nX2hvb2sgPSAwOw0KICAv KnByaW50X2ZyYW1lX21vcmVfaW5mb19ob29rID0gMDsgKi8NCiAgcXVlcnlf aG9vayA9IDA7DQogIHdhcm5pbmdfaG9vayA9IDA7DQogIGNyZWF0ZV9icmVh a3BvaW50X2hvb2sgPSAwOw0KICBkZWxldGVfYnJlYWtwb2ludF9ob29rID0g MDsNCiAgbW9kaWZ5X2JyZWFrcG9pbnRfaG9vayA9IDA7DQogIGludGVyYWN0 aXZlX2hvb2sgPSAwOw0KICByZWdpc3RlcnNfY2hhbmdlZF9ob29rID0gMDsN CiAgcmVhZGxpbmVfYmVnaW5faG9vayA9IDA7DQogIHJlYWRsaW5lX2hvb2sg PSAwOw0KICByZWFkbGluZV9lbmRfaG9vayA9IDA7DQogIHJlZ2lzdGVyX2No YW5nZWRfaG9vayA9IDA7DQogIG1lbW9yeV9jaGFuZ2VkX2hvb2sgPSAwOw0K ICBjb250ZXh0X2hvb2sgPSAwOw0KICB0YXJnZXRfd2FpdF9ob29rID0gMDsN CiAgY2FsbF9jb21tYW5kX2hvb2sgPSAwOw0KICBlcnJvcl9ob29rID0gMDsN CiAgZXJyb3JfYmVnaW5faG9vayA9IDA7DQogIGNvbW1hbmRfbG9vcF9ob29r ID0gMDsNCiAgY2xlYXJfZ2RiX2V2ZW50X2hvb2tzICgpOw0KfQ0KDQovKiBU aGlzIGlzIGEgbGF6eSBpbml0IHJvdXRpbmUsIGNhbGxlZCB0aGUgZmlyc3Qg dGltZQ0KICAgdGhlIGludGVycHJldGVyIG1vZHVsZSBpcyB1c2VkLiAgSSBw dXQgaXQgaGVyZSBqdXN0IGluIGNhc2UsIGJ1dCBJIGhhdmVuJ3QNCiAgIHRo b3VnaHQgb2YgYSB1c2UgZm9yIGl0IHlldC4gIEkgd2lsbCBwcm9iYWJseSBi YWcgaXQgc29vbiwgc2luY2UgSSBkb24ndA0KICAgdGhpbmsgaXQgd2lsbCBi ZSBuZWNlc3NhcnkuICovDQoNCnN0YXRpYyB2b2lkDQppbml0aWFsaXplX2lu dGVycHMgKHZvaWQpDQp7DQogIGludGVycHJldGVyX2luaXRpYWxpemVkID0g MTsNCiAgLyogRG9uJ3Qga25vdyBpZiBhbnl0aGluZyBuZWVkcyB0byBiZSBk b25lIGhlcmUuLi4gKi8NCn0NCg0KLyogc2V0X2ludGVycHJldGVyX2NtZCAt IFRoaXMgaW1wbGVtZW50cyAic2V0IGludGVycHJldGVyIGZvbyIuICovDQoN CnN0YXRpYyB2b2lkDQpzZXRfaW50ZXJwcmV0ZXJfY21kIChjaGFyICphcmdz LCBpbnQgZnJvbV90dHksIHN0cnVjdCBjbWRfbGlzdF9lbGVtZW50ICpjKQ0K ew0KICBzdHJ1Y3QgZ2RiX2ludGVycHJldGVyICppbnRlcnBfcHRyOw0KDQog IGRvbnRfcmVwZWF0ICgpOw0KDQogIGlmIChjbWRfdHlwZSAoYykgIT0gc2V0 X2NtZCkNCiAgICByZXR1cm47DQoNCiAgaW50ZXJwX3B0ciA9IGdkYl9sb29r dXBfaW50ZXJwcmV0ZXIgKGludGVycHJldGVyX3ApOw0KICBpZiAoaW50ZXJw X3B0ciAhPSBOVUxMKQ0KICAgIHsNCiAgICAgIGlmICghZ2RiX3NldF9pbnRl cnByZXRlciAoaW50ZXJwX3B0cikpDQoJZXJyb3IgKCJcbkNvdWxkIG5vdCBz d2l0Y2ggdG8gaW50ZXJwcmV0ZXIgXCIlc1wiLCAlcyVzXCIuXG4iLA0KCSAg ICAgICBpbnRlcnBfcHRyLT5uYW1lLCAicmV2ZXJ0aW5nIHRvIGludGVycHJl dGVyIFwiIiwNCgkgICAgICAgY3VycmVudF9pbnRlcnByZXRlci0+bmFtZSk7 DQogICAgfQ0KICBlbHNlDQogICAgew0KICAgICAgY2hhciAqYmFkX25hbWUg PSBpbnRlcnByZXRlcl9wOw0KICAgICAgaW50ZXJwcmV0ZXJfcCA9IHhzdHJk dXAgKGN1cnJlbnRfaW50ZXJwcmV0ZXItPm5hbWUpOw0KICAgICAgZXJyb3Ig KCJDb3VsZCBub3QgZmluZCBpbnRlcnByZXRlciBcIiVzXCIuIiwgYmFkX25h bWUpOw0KICAgIH0NCn0NCg0KLyogbGlzdF9pbnRlcnByZXRlcl9jbWQgLSBU aGlzIGltcGxlbWVudHMgImluZm8gaW50ZXJwcmV0ZXJzIi4gKi8NCg0Kdm9p ZA0KbGlzdF9pbnRlcnByZXRlcl9jbWQgKGNoYXIgKmFyZ3MsIGludCBmcm9t X3R0eSkNCnsNCiAgc3RydWN0IGdkYl9pbnRlcnByZXRlciAqaW50ZXJwX3B0 cjsNCg0KICB1aV9vdXRfbGlzdF9iZWdpbiAodWlvdXQsICJpbnRlcnByZXRl cnMiKTsNCiAgZm9yIChpbnRlcnBfcHRyID0gaW50ZXJwX2xpc3Q7IGludGVy cF9wdHIgIT0gTlVMTDsNCiAgICAgICBpbnRlcnBfcHRyID0gaW50ZXJwX3B0 ci0+bmV4dCkNCiAgICB7DQogICAgICB1aV9vdXRfdGV4dCAodWlvdXQsICIg ICogIik7DQogICAgICB1aV9vdXRfZmllbGRfc3RyaW5nICh1aW91dCwgImlu dGVycHJldGVyIiwgaW50ZXJwX3B0ci0+bmFtZSk7DQogICAgICB1aV9vdXRf dGV4dCAodWlvdXQsICJcbiIpOw0KICAgIH0NCiAgdWlfb3V0X2xpc3RfZW5k ICh1aW91dCk7DQp9DQoNCnZvaWQNCmludGVycHJldGVyX2V4ZWNfY21kIChj aGFyICphcmdzLCBpbnQgZnJvbV90dHkpDQp7DQogIHN0cnVjdCBnZGJfaW50 ZXJwcmV0ZXIgKm9sZF9pbnRlcnAsICppbnRlcnBfdG9fdXNlOw0KICBjaGFy ICoqcHJ1bGVzID0gTlVMTDsNCiAgY2hhciAqKnRydWxlID0gTlVMTDsNCiAg dW5zaWduZWQgaW50IG5ydWxlczsNCiAgdW5zaWduZWQgaW50IGk7DQogIGlu dCBvbGRfcXVpZXQ7DQoNCiAgcHJ1bGVzID0gYnVpbGRhcmd2IChhcmdzKTsN CiAgaWYgKHBydWxlcyA9PSBOVUxMKQ0KICAgIHsNCiAgICAgIGVycm9yICgi dW5hYmxlIHRvIHBhcnNlIGFyZ3VtZW50cyIpOw0KICAgIH0NCg0KICBucnVs ZXMgPSAwOw0KICBpZiAocHJ1bGVzICE9IE5VTEwpDQogICAgew0KICAgICAg Zm9yICh0cnVsZSA9IHBydWxlczsgKnRydWxlICE9IE5VTEw7IHRydWxlKysp DQoJew0KCSAgbnJ1bGVzKys7DQoJfQ0KICAgIH0NCg0KICBpZiAobnJ1bGVz IDwgMikNCiAgICBlcnJvciAoInVzYWdlOiBpbnRlcnByZXRlci1leGVjIDxp bnRlcnByZXRlcj4gWyA8Y29tbWFuZD4gLi4uIF0iKTsNCg0KICBvbGRfaW50 ZXJwID0gZ2RiX2N1cnJlbnRfaW50ZXJwcmV0ZXIgKCk7DQoNCiAgaW50ZXJw X3RvX3VzZSA9IGdkYl9sb29rdXBfaW50ZXJwcmV0ZXIgKHBydWxlc1swXSk7 DQogIGlmIChpbnRlcnBfdG9fdXNlID09IE5VTEwpDQogICAgZXJyb3IgKCJD b3VsZCBub3QgZmluZCBpbnRlcnByZXRlciBcIiVzXCIuIiwgcHJ1bGVzWzBd KTsNCg0KICBvbGRfcXVpZXQgPSBnZGJfaW50ZXJwcmV0ZXJfc2V0X3F1aWV0 IChpbnRlcnBfdG9fdXNlLCAxKTsNCg0KICBpZiAoIWdkYl9zZXRfaW50ZXJw cmV0ZXIgKGludGVycF90b191c2UpKQ0KICAgIGVycm9yICgiQ291bGQgbm90 IHN3aXRjaCB0byBpbnRlcnByZXRlciBcIiVzXCIuIiwgcHJ1bGVzWzBdKTsN Cg0KICBmb3IgKGkgPSAxOyBpIDwgbnJ1bGVzOyBpKyspDQogICAgew0KICAg ICAgaWYgKCFnZGJfaW50ZXJwcmV0ZXJfZXhlYyAocHJ1bGVzW2ldKSkNCgl7 DQoJICBnZGJfc2V0X2ludGVycHJldGVyIChvbGRfaW50ZXJwKTsNCgkgIGdk Yl9pbnRlcnByZXRlcl9zZXRfcXVpZXQgKGludGVycF90b191c2UsIG9sZF9x dWlldCk7DQoJICBlcnJvcg0KCSAgICAoImludGVycHJldGVyLWV4ZWM6IG1p X2ludGVycHJldGVyX2V4ZWN1dGU6IGVycm9yIGluIGNvbW1hbmQ6IFwiJXNc Ii4iLA0KCSAgICAgcHJ1bGVzW2ldKTsNCgkgIGJyZWFrOw0KCX0NCiAgICB9 DQoNCiAgZ2RiX3NldF9pbnRlcnByZXRlciAob2xkX2ludGVycCk7DQogIGdk Yl9pbnRlcnByZXRlcl9zZXRfcXVpZXQgKGludGVycF90b191c2UsIG9sZF9x dWlldCk7DQp9DQoNCi8qIExpc3QgdGhlIHBvc3NpYmxlIGludGVycHJldGVy cyB3aGljaCBjb3VsZCBjb21wbGV0ZSB0aGUgZ2l2ZW4gdGV4dC4gKi8NCg0K c3RhdGljIGNoYXIgKioNCmludGVycHJldGVyX2NvbXBsZXRlciAoY2hhciAq dGV4dCwgY2hhciAqd29yZCkNCnsNCiAgaW50IGFsbG9jZWQsIHRleHRsZW47 DQogIGludCBudW1fbWF0Y2hlczsNCiAgY2hhciAqKm1hdGNoZXM7DQogIHN0 cnVjdCBnZGJfaW50ZXJwcmV0ZXIgKmludGVycDsNCg0KICAvKiBXZSBleHBl Y3Qgb25seSBhIHZlcnkgbGltaXRlZCBudW1iZXIgb2YgaW50ZXJwcmV0ZXJz LCBzbyBqdXN0DQogICAgIGFsbG9jYXRlIHJvb20gZm9yIGFsbCBvZiB0aGVt LiAqLw0KICBmb3IgKGludGVycCA9IGludGVycF9saXN0OyBpbnRlcnAgIT0g TlVMTDsgaW50ZXJwID0gaW50ZXJwLT5uZXh0KQ0KICAgICsrYWxsb2NlZDsN CiAgbWF0Y2hlcyA9IChjaGFyICoqKSB4bWFsbG9jIChhbGxvY2VkICogc2l6 ZW9mIChjaGFyICopKTsNCg0KICBudW1fbWF0Y2hlcyA9IDA7DQogIHRleHRs ZW4gPSBzdHJsZW4gKHRleHQpOw0KICBmb3IgKGludGVycCA9IGludGVycF9s aXN0OyBpbnRlcnAgIT0gTlVMTDsgaW50ZXJwID0gaW50ZXJwLT5uZXh0KQ0K ICAgIHsNCiAgICAgIGlmIChzdHJuY21wIChpbnRlcnAtPm5hbWUsIHRleHQs IHRleHRsZW4pID09IDApDQoJew0KCSAgbWF0Y2hlc1tudW1fbWF0Y2hlc10g PQ0KCSAgICAoY2hhciAqKSB4bWFsbG9jIChzdHJsZW4gKHdvcmQpICsgc3Ry bGVuIChpbnRlcnAtPm5hbWUpICsgMSk7DQoJICBpZiAod29yZCA9PSB0ZXh0 KQ0KCSAgICBzdHJjcHkgKG1hdGNoZXNbbnVtX21hdGNoZXNdLCBpbnRlcnAt Pm5hbWUpOw0KCSAgZWxzZSBpZiAod29yZCA+IHRleHQpDQoJICAgIHsNCgkg ICAgICAvKiBSZXR1cm4gc29tZSBwb3J0aW9uIG9mIGludGVycC0+bmFtZSAq Lw0KCSAgICAgIHN0cmNweSAobWF0Y2hlc1tudW1fbWF0Y2hlc10sIGludGVy cC0+bmFtZSArICh3b3JkIC0gdGV4dCkpOw0KCSAgICB9DQoJICBlbHNlDQoJ ICAgIHsNCgkgICAgICAvKiBSZXR1cm4gc29tZSBvZiB0ZXh0IHBsdXMgaW50 ZXJwLT5uYW1lICovDQoJICAgICAgc3RybmNweSAobWF0Y2hlc1tudW1fbWF0 Y2hlc10sIHdvcmQsIHRleHQgLSB3b3JkKTsNCgkgICAgICBtYXRjaGVzW251 bV9tYXRjaGVzXVt0ZXh0IC0gd29yZF0gPSAnXDAnOw0KCSAgICAgIHN0cmNh dCAobWF0Y2hlc1tudW1fbWF0Y2hlc10sIGludGVycC0+bmFtZSk7DQoJICAg IH0NCgkgICsrbnVtX21hdGNoZXM7DQoJfQ0KICAgIH0NCg0KICBpZiAobnVt X21hdGNoZXMgPT0gMCkNCiAgICB7DQogICAgICB4ZnJlZSAobWF0Y2hlcyk7 DQogICAgICBtYXRjaGVzID0gTlVMTDsNCiAgICB9DQogIGVsc2UgaWYgKG51 bV9tYXRjaGVzIDwgYWxsb2NlZCkNCiAgICB7DQogICAgICBtYXRjaGVzID0g KGNoYXIgKiopIHhyZWFsbG9jICgoY2hhciAqKSBtYXRjaGVzLCAoKG51bV9t YXRjaGVzICsgMSkNCgkJCQkJCSAgICAgICAqIHNpemVvZiAoY2hhciAqKSkp Ow0KICAgICAgbWF0Y2hlc1tudW1fbWF0Y2hlc10gPSBOVUxMOw0KICAgIH0N Cg0KICByZXR1cm4gbWF0Y2hlczsNCn0NCg0KLyogVGhpcyBqdXN0IGFkZHMg dGhlICJzZXQgaW50ZXJwcmV0ZXIiIGFuZCAiaW5mbyBpbnRlcnByZXRlcnMi IGNvbW1hbmRzLiAqLw0KDQp2b2lkDQpfaW5pdGlhbGl6ZV9pbnRlcnByZXRl ciAodm9pZCkNCnsNCiAgc3RydWN0IGNtZF9saXN0X2VsZW1lbnQgKmM7DQoN CiAgYyA9IGFkZF9jbWQgKCJpbnRlcnByZXRlci1leGVjIiwgY2xhc3Nfc3Vw cG9ydCwNCgkgICAgICAgaW50ZXJwcmV0ZXJfZXhlY19jbWQsDQoJICAgICAg ICJFeGVjdXRlIGEgY29tbWFuZCBpbiBhbiBpbnRlcnByZXRlci4gIEl0IHRh a2VzIHR3byBhcmd1bWVudHM6XG5cDQpUaGUgZmlyc3QgYXJndW1lbnQgaXMg dGhlIG5hbWUgb2YgdGhlIGludGVycHJldGVyIHRvIHVzZS5cblwNClRoZSBz ZWNvbmQgYXJndW1lbnQgaXMgdGhlIGNvbW1hbmQgdG8gZXhlY3V0ZS5cbiIs ICZjbWRsaXN0KTsNCiAgc2V0X2NtZF9jb21wbGV0ZXIgKGMsIGludGVycHJl dGVyX2NvbXBsZXRlcik7DQp9DQo= --26610376-1587295155-1029270166=:1395--