Return-Path: Delivered-To: apmail-apr-dev-archive@www.apache.org Received: (qmail 46165 invoked from network); 9 Dec 2004 12:34:17 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur-2.apache.org with SMTP; 9 Dec 2004 12:34:17 -0000 Received: (qmail 32771 invoked by uid 500); 9 Dec 2004 12:34:12 -0000 Delivered-To: apmail-apr-dev-archive@apr.apache.org Received: (qmail 32729 invoked by uid 500); 9 Dec 2004 12:34:11 -0000 Mailing-List: contact dev-help@apr.apache.org; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: Delivered-To: mailing list dev@apr.apache.org Received: (qmail 32701 invoked by uid 99); 9 Dec 2004 12:34:10 -0000 X-ASF-Spam-Status: No, hits=0.0 required=10.0 tests=FORGED_RCVD_HELO X-Spam-Check-By: apache.org Received-SPF: neutral (hermes.apache.org: local policy) Date: Thu, 9 Dec 2004 12:34:00 +0000 (GMT) From: Nick Kew To: dev@apr.apache.org Subject: Re: apr_dbd: a generic SQL wrapper In-Reply-To: Message-ID: References: MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="-1463810294-1892063039-1102595640=:6831" X-Virus-Checked: Checked X-Spam-Rating: minotaur-2.apache.org 1.6.2 0/1000/N 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. ---1463810294-1892063039-1102595640=:6831 Content-Type: TEXT/PLAIN; charset=US-ASCII On Mon, 6 Dec 2004, Nick Kew wrote: > Currently I have code for a proposed apr_dbd that compiles and loads > cleanly, comprising apr_dbd.[c|h], a MySQL driver apr_dbd_mysql, I've now added a test program, and the drivers for MySQL and PostgreSQL work for me. Time to post here for preliminary review. I attach the current candidate APR software: apr_dbd.h - specifies the API apr_dbd.c - implements (skeleton) framework apr_dbd_mysql.c - driver for MySQL apr_dbd_pgsql.c - driver for PostgreSQL apr_dbd_test.c - test program There's a package containing this together with some related stuff at http://www.apache.org/~niq/apache-dbd.tar.bz2 If it is accepted as a startingpoint for an apr-util module, I'll donate it to ASF and license it all under ASF terms. If not, all rights reserved. The Prepared Statement stuff is ugly: do any of the Perl folks know how Perl DBI deals with different syntaxes and backends, and is there anything we can usefully steal? -- Nick Kew ---1463810294-1892063039-1102595640=:6831 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="apr_dbd.h" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="apr_dbd.h" LyogICAgICAgIENvcHlyaWdodCAoYykgMjAwNCwgTmljayBLZXcuICBBbGwg cmlnaHRzIHJlc2VydmVkLg0KDQogICAgICAgIElmIHRoaXMgaXMgYWNjZXB0 ZWQgYnkgQVNGIGZvciBpbmNsdXNpb24gaW4gQVBSLVVUSUwsDQogICAgICAg IEkgd2lsbCBhc3NpZ24gY29weXJpZ2h0IHRvIEFTRiBhbmQgbGljZW5zZSB1 bmRlciBBU0YgdGVybXMuDQoNCiAgICAgICAgT3RoZXJ3aXNlIEkgd2lsbCBy ZXRhaW4gY29weXJpZ2h0IGFuZCBsaWNlbnNlIHVuZGVyDQogICAgICAgIHRl cm1zIG9mIG15IGNob2ljZS4NCiovDQoNCiNpZm5kZWYgQVBSX0RCRF9IDQoj ZGVmaW5lIEFQUl9EQkRfSA0KDQojaWZkZWYgX19jcGx1c3BsdXMNCmV4dGVy biAiQyIgew0KI2VuZGlmDQoNCi8qKiBQYXRjaCByZXF1aXJlZCB0byBidWls ZCBhZ2FpbnN0IEFQUi8wLjkgYW5kIEhUVFBELzIuMA0KICogIEludmFsaWRh dGUgYSByZXNvdXJjZSBpbiB0aGUgcG9vbCAtIGUuZy4gYSBkYXRhYmFzZSBj b25uZWN0aW9uDQogKiAgdGhhdCByZXR1cm5zIGEgImxvc3QgY29ubmVjdGlv biIgZXJyb3IgYW5kIGNhbid0IGJlIHJlc3RvcmVkLg0KICogIFVzZSB0aGlz IGluc3RlYWQgb2YgYXByX3Jlc2xpc3RfcmVsZWFzZSBpZiB0aGUgcmVzb3Vy Y2UgaXMgYmFkLg0KICovDQojaWYgQVBSX0hBU19USFJFQURTDQojaW5jbHVk ZSAiYXByX3Jlc2xpc3QuaCINCkFQVV9ERUNMQVJFKGFwcl9zdGF0dXNfdCkg YXByX3Jlc2xpc3RfaW52YWxpZGF0ZShhcHJfcmVzbGlzdF90ICpyZXNsaXN0 LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHZvaWQgKnJlc291cmNlKTsNCiNlbmRpZg0KDQovKiBUaGVzZSBh cmUgb3BhcXVlIHN0cnVjdHMuICBJbnN0YW50aWF0aW9uIGlzIHVwIHRvIGVh Y2ggYmFja2VuZCAqLw0KI2lmbmRlZiBBUFJfREJEX0lOVEVSTkFMDQp0eXBl ZGVmIHN0cnVjdCBhcHJfZGJkX3QgYXByX2RiZF90Ow0KdHlwZWRlZiBzdHJ1 Y3QgYXByX2RiZF90cmFuc2FjdGlvbiBhcHJfZGJkX3RyYW5zYWN0aW9uOw0K dHlwZWRlZiBzdHJ1Y3QgYXByX2RiZF9yZXN1bHRzIGFwcl9kYmRfcmVzdWx0 czsNCnR5cGVkZWYgc3RydWN0IGFwcl9kYmRfcm93IGFwcl9kYmRfcm93Ow0K dHlwZWRlZiBzdHJ1Y3QgYXByX2RiZF9wcmVwYXJlZCBhcHJfZGJkX3ByZXBh cmVkOw0KI2VuZGlmDQoNCnR5cGVkZWYgc3RydWN0IGFwcl9kYmRfZHJpdmVy X3Qgew0KICAgIC8qKiBuYW1lICovDQogICAgY29uc3QgY2hhciogbmFtZTsN Cg0KICAgIC8qKiBuYXRpdmVfaGFuZGxlOiByZXR1cm4gdGhlIG5hdGl2ZSBk YXRhYmFzZSBoYW5kbGUgb2YgdGhlIHVuZGVybHlpbmcgZGINCiAgICAgKg0K ICAgICAqIEBwYXJhbSBoYW5kbGUgLSBhcHJfZGJkIGhhbmRsZQ0KICAgICAq IEByZXR1cm4gLSBuYXRpdmUgaGFuZGxlDQogICAgICovDQogICAgdm9pZCAq KCpuYXRpdmVfaGFuZGxlKShhcHJfZGJkX3QgKmhhbmRsZSk7DQoNCiAgICAv Kiogb3Blbjogb2J0YWluIGEgZGF0YWJhc2UgY29ubmVjdGlvbiBmcm9tIHRo ZSBzZXJ2ZXIgcmVjLg0KICAgICAqICBNdXN0IGJlIGV4cGxpY2l0bHkgY2xv c2VkIHdoZW4geW91J3JlIGZpbmlzaGVkIHdpdGggaXQuDQogICAgICogIFdB Uk5JTkc6IG9ubHkgdXNlIHRoaXMgd2hlbiB5b3UgbmVlZCBhIGNvbm5lY3Rp b24gd2l0aA0KICAgICAqICBhIGxpZmV0aW1lIG90aGVyIHRoYW4gYSByZXF1 ZXN0DQogICAgICoNCiAgICAgKiAgQHBhcmFtIHBvb2wgLSBhIHBvb2wgdG8g dXNlIGZvciBlcnJvciBtZXNzYWdlcyAoaWYgYW55KS4NCiAgICAgKiAgQHBh cmFtIHMgLSBzZXJ2ZXIgcmVjIG1hbmFnaW5nIHRoZSB1bmRlcmx5aW5nIGNv bm5lY3Rpb24vcG9vbC4NCiAgICAgKiAgQHJldHVybiBkYXRhYmFzZSBoYW5k bGUsIG9yIE5VTEwgb24gZXJyb3IuDQogICAgICovDQogICAgYXByX2RiZF90 ICooKm9wZW4pKGFwcl9wb29sX3QgKnBvb2wsIGNvbnN0IGNoYXIgKnBhcmFt cyk7DQoNCiAgICAvKiogY2hlY2tfY29ubjogY2hlY2sgc3RhdHVzIG9mIGEg ZGF0YWJhc2UgY29ubmVjdGlvbg0KICAgICAqDQogICAgICogIEBwYXJhbSBw b29sIC0gYSBwb29sIHRvIHVzZSBmb3IgZXJyb3IgbWVzc2FnZXMgKGlmIGFu eSkuDQogICAgICogIEBwYXJhbSBoYW5kbGUgLSB0aGUgY29ubmVjdGlvbiB0 byBjaGVjaw0KICAgICAqICBAcmV0dXJuIEFQUl9TVUNDRVNTIG9yIGVycm9y DQogICAgICovDQogICAgYXByX3N0YXR1c190ICgqY2hlY2tfY29ubikoYXBy X3Bvb2xfdCAqcG9vbCwgYXByX2RiZF90ICpoYW5kbGUpOw0KDQogICAgLyoq IGNsb3NlOiBjbG9zZS9yZWxlYXNlIGEgY29ubmVjdGlvbiBvYnRhaW5lZCBm cm9tIG9wZW4oKQ0KICAgICAqDQogICAgICogIEBwYXJhbSBoYW5kbGUgLSB0 aGUgY29ubmVjdGlvbiB0byByZWxlYXNlDQogICAgICogIEByZXR1cm4gQVBS X1NVQ0NFU1Mgb3IgZXJyb3INCiAgICAgKi8NCiAgICBhcHJfc3RhdHVzX3Qg KCpjbG9zZSkodm9pZCAqaGFuZGxlKTsNCg0KICAgIC8qKiBzZXRfZGJuYW1l OiBzZWxlY3QgZGF0YWJhc2UgbmFtZS4gIE1heSBiZSBhIG5vLW9wIGlmIG5v dCBzdXBwb3J0ZWQuDQogICAgICoNCiAgICAgKiAgQHBhcmFtIHBvb2wgLSB3 b3JraW5nIHBvb2wNCiAgICAgKiAgQHBhcmFtIGhhbmRsZSAtIHRoZSBjb25u ZWN0aW9uDQogICAgICogIEBwYXJhbSBuYW1lIC0gdGhlIGRhdGFiYXNlIHRv IHNlbGVjdA0KICAgICAqICBAcmV0dXJuIDAgZm9yIHN1Y2Nlc3Mgb3IgZXJy b3IgY29kZQ0KICAgICAqLw0KICAgIGludCAoKnNldF9kYm5hbWUpKGFwcl9w b29sX3QqIHBvb2wsIGFwcl9kYmRfdCAqaGFuZGxlLCBjb25zdCBjaGFyICpu YW1lKTsNCg0KICAgIC8qKiB0cmFuc2FjdGlvbjogc3RhcnQgYSB0cmFuc2Fj dGlvbi4gIE1heSBiZSBhIG5vLW9wLg0KICAgICAqDQogICAgICogIEBwYXJh bSBwb29sIC0gYSBwb29sIHRvIHVzZSBmb3IgZXJyb3IgbWVzc2FnZXMgKGlm IGFueSkuDQogICAgICogIEBwYXJhbSBoYW5kbGUgLSB0aGUgY29ubmVjdGlv biB0byBjaGVjaw0KICAgICAqICBAcGFyYW0gdHJhbnNhY3Rpb24gLSBwdHIg dG8gYSB0cmFuc2FjdGlvbi4gIE1heSBiZSBudWxsIG9uIGVudHJ5DQogICAg ICogIEByZXR1cm4gMCBmb3Igc3VjY2VzcyBvciBlcnJvciBjb2RlDQogICAg ICovDQogICAgaW50ICgqdHJhbnNhY3Rpb24pKGFwcl9wb29sX3QgKnBvb2ws IGFwcl9kYmRfdCAqaGFuZGxlLA0KICAgICAgICAgICAgICAgICAgICAgICBh cHJfZGJkX3RyYW5zYWN0aW9uICoqdHJhbnMpOw0KDQogICAgLyoqIGVuZF90 cmFuc2FjdGlvbjogZW5kIGEgdHJhbnNhY3Rpb24NCiAgICAgKiAgKGNvbW1p dCBvbiBzdWNjZXNzLCByb2xsYmFjayBvbiBlcnJvcikuDQogICAgICogIE1h eSBiZSBhIG5vLW9wLg0KICAgICAqDQogICAgICogIEBwYXJhbSBoYW5kbGUg LSB0aGUgY29ubmVjdGlvbiB0byBjaGVjaw0KICAgICAqICBAcGFyYW0gdHJh bnNhY3Rpb24gLSB0aGUgdHJhbnNhY3Rpb24uDQogICAgICogIEByZXR1cm4g MCBmb3Igc3VjY2VzcyBvciBlcnJvciBjb2RlDQogICAgICovDQogICAgaW50 ICgqZW5kX3RyYW5zYWN0aW9uKShhcHJfZGJkX3QgKmhhbmRsZSwgYXByX2Ri ZF90cmFuc2FjdGlvbiAqdHJhbnMpOw0KDQogICAgLyoqIHF1ZXJ5OiBleGVj dXRlIGFuIFNRTCBxdWVyeSB0aGF0IGRvZXNuJ3QgcmV0dXJuIGEgcmVzdWx0 IHNldA0KICAgICAqDQogICAgICogIEBwYXJhbSBoYW5kbGUgLSB0aGUgY29u bmVjdGlvbg0KICAgICAqICBAcGFyYW0gdHJhbnNhY3Rpb24gLSBjdXJyZW50 IHRyYW5zYWN0aW9uLiAgTWF5IGJlIG51bGwuDQogICAgICogIEBwYXJhbSBu cm93cyAtIG51bWJlciBvZiByb3dzIGFmZmVjdGVkLg0KICAgICAqICBAcGFy YW0gc3RhdGVtZW50IC0gdGhlIFNRTCBzdGF0ZW1lbnQgdG8gZXhlY3V0ZQ0K ICAgICAqICBAcmV0dXJuIDAgZm9yIHN1Y2Nlc3Mgb3IgZXJyb3IgY29kZQ0K ICAgICAqLw0KICAgIGludCAoKnF1ZXJ5KShhcHJfZGJkX3QgKmhhbmRsZSwg YXByX2RiZF90cmFuc2FjdGlvbiAqdHJhbnMsDQogICAgICAgICAgICAgICAg IGludCAqbnJvd3MsIGNvbnN0IGNoYXIgKnN0YXRlbWVudCk7DQoNCiAgICAv Kiogc2VsZWN0OiBleGVjdXRlIGFuIFNRTCBxdWVyeSB0aGF0IHJldHVybnMg YSByZXN1bHQgc2V0DQogICAgICoNCiAgICAgKiAgQHBhcmFtIHBvb2wgLSBw b29sIHRvIGFsbG9jYXRlIHRoZSByZXN1bHQgc2V0DQogICAgICogIEBwYXJh bSBoYW5kbGUgLSB0aGUgY29ubmVjdGlvbg0KICAgICAqICBAcGFyYW0gdHJh bnNhY3Rpb24gLSBjdXJyZW50IHRyYW5zYWN0aW9uLiAgTWF5IGJlIG51bGwu DQogICAgICogIEBwYXJhbSByZXMgLSBwb2ludGVyIHRvIHJlc3VsdCBzZXQg cG9pbnRlci4gIE1heSBwb2ludCB0byBOVUxMIG9uIGVudHJ5DQogICAgICog IEBwYXJhbSBzdGF0ZW1lbnQgLSB0aGUgU1FMIHN0YXRlbWVudCB0byBleGVj dXRlDQogICAgICogIEBwYXJhbSByYW5kb20gLSAxIHRvIHN1cHBvcnQgcmFu ZG9tIGFjY2VzcyB0byByZXN1bHRzIChzZWVrIGFueSByb3cpOw0KICAgICAq ICAgICAgICAgICAgICAgICAgMCB0byBzdXBwb3J0IG9ubHkgbG9vcGluZyB0 aHJvdWdoIHJlc3VsdHMgaW4gb3JkZXINCiAgICAgKiAgICAgICAgICAgICAg ICAgICAgKGFzeW5jIGFjY2VzcyAtIGZhc3RlcikNCiAgICAgKiAgQHJldHVy biAwIGZvciBzdWNjZXNzIG9yIGVycm9yIGNvZGUNCiAgICAgKi8NCiAgICBp bnQgKCpzZWxlY3QpKGFwcl9wb29sX3QgKnBvb2wsIGFwcl9kYmRfdCAqaGFu ZGxlLA0KICAgICAgICAgICAgICAgICAgYXByX2RiZF90cmFuc2FjdGlvbiAq dHJhbnMsIGFwcl9kYmRfcmVzdWx0cyAqKnJlcywNCiAgICAgICAgICAgICAg ICAgIGNvbnN0IGNoYXIgKnN0YXRlbWVudCwgaW50IHJhbmRvbSk7DQoNCiAg ICAvKiogbnVtX2NvbHM6IGdldCB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgaW4g YSByZXN1bHRzIHNldA0KICAgICAqDQogICAgICogIEBwYXJhbSByZXMgLSBy ZXN1bHQgc2V0Lg0KICAgICAqICBAcmV0dXJuIG51bWJlciBvZiBjb2x1bW5z DQogICAgICovDQogICAgaW50ICgqbnVtX2NvbHMpKGFwcl9kYmRfcmVzdWx0 cyAqcmVzKTsNCg0KICAgIC8qKiBudW1fdHVwbGVzOiBnZXQgdGhlIG51bWJl ciBvZiByb3dzIGluIGEgcmVzdWx0cyBzZXQNCiAgICAgKiAgb2YgYSBzeW5j aHJvbm91cyBzZWxlY3QNCiAgICAgKg0KICAgICAqICBAcGFyYW0gcmVzIC0g cmVzdWx0IHNldC4NCiAgICAgKiAgQHJldHVybiBudW1iZXIgb2Ygcm93cywg b3IgLTEgaWYgdGhlIHJlc3VsdHMgYXJlIGFzeW5jaHJvbm91cw0KICAgICAq Lw0KICAgIGludCAoKm51bV90dXBsZXMpKGFwcl9kYmRfcmVzdWx0cyAqcmVz KTsNCg0KICAgIC8qKiBnZXRfcm93OiBnZXQgYSByb3cgZnJvbSBhIHJlc3Vs dCBzZXQNCiAgICAgKg0KICAgICAqICBAcGFyYW0gcG9vbCAtIHBvb2wgdG8g YWxsb2NhdGUgdGhlIHJvdw0KICAgICAqICBAcGFyYW0gcmVzIC0gcmVzdWx0 IHNldCBwb2ludGVyDQogICAgICogIEBwYXJhbSByb3cgLSBwb2ludGVyIHRv IHJvdyBwb2ludGVyLiAgTWF5IHBvaW50IHRvIE5VTEwgb24gZW50cnkNCiAg ICAgKiAgQHBhcmFtIHJvd251bSAtIHJvdyBudW1iZXIsIG9yIC0xIGZvciAi bmV4dCByb3ciLiAgSWdub3JlZCBpZiByYW5kb20NCiAgICAgKiAgICAgICAg ICAgICAgICAgIGFjY2VzcyBpcyBub3Qgc3VwcG9ydGVkLg0KICAgICAqICBA cmV0dXJuIDAgZm9yIHN1Y2Nlc3MsIC0xIGZvciByb3dudW0gb3V0IG9mIHJh bmdlIG9yIGRhdGEgZmluaXNoZWQNCiAgICAgKi8NCiAgICBpbnQgKCpnZXRf cm93KShhcHJfcG9vbF90ICpwb29sLCBhcHJfZGJkX3Jlc3VsdHMgKnJlcywN CiAgICAgICAgICAgICAgICAgICBhcHJfZGJkX3JvdyAqKnJvdywgaW50IHJv d251bSk7DQogIA0KICAgIC8qKiBnZXRfZW50cnk6IGdldCBhbiBlbnRyeSBm cm9tIGEgcm93DQogICAgICoNCiAgICAgKiAgQHBhcmFtIHJvdyAtIHJvdyBw b2ludGVyDQogICAgICogIEBwYXJhbSBjb2wgLSBlbnRyeSBudW1iZXINCiAg ICAgKiAgQHJldHVybiB2YWx1ZSBmcm9tIHRoZSByb3csIG9yIE5VTEwgaWYg Y29sIGlzIG91dCBvZiBib3VuZHMuDQogICAgICovDQogICAgY29uc3QgY2hh ciAqKCpnZXRfZW50cnkpKGNvbnN0IGFwcl9kYmRfcm93ICpyb3csIGludCBj b2wpOw0KICANCiAgICAvKiogZXJyb3I6IGdldCBjdXJyZW50IGVycm9yIG1l c3NhZ2UgKGlmIGFueSkNCiAgICAgKg0KICAgICAqICBAcGFyYW0gaGFuZGxl IC0gdGhlIGNvbm5lY3Rpb24NCiAgICAgKiAgQHBhcmFtIGVycm51bSAtIGVy cm9yIGNvZGUgZnJvbSBvcGVyYXRpb24gdGhhdCByZXR1cm5lZCBhbiBlcnJv cg0KICAgICAqICBAcmV0dXJuIHRoZSBkYXRhYmFzZSBjdXJyZW50IGVycm9y IG1lc3NhZ2UsIG9yIG1lc3NhZ2UgZm9yIGVycm51bQ0KICAgICAqICAgICAg ICAgIChpbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQgd2hldGhlciBlcnJudW0g aXMgaWdub3JlZCkNCiAgICAgKi8NCiAgICBjb25zdCBjaGFyICooKmVycm9y KShhcHJfZGJkX3QgKmhhbmRsZSwgaW50IGVycm51bSk7DQogIA0KICAgIC8q KiBlc2NhcGU6IGVzY2FwZSBhIHN0cmluZyBzbyBpdCBpcyBzYWZlIGZvciB1 c2UgaW4gcXVlcnkvc2VsZWN0DQogICAgICoNCiAgICAgKiAgQHBhcmFtIHBv b2wgLSBwb29sIHRvIGFsbG9jIHRoZSByZXN1bHQgZnJvbQ0KICAgICAqICBA cGFyYW0gc3RyaW5nIC0gdGhlIHN0cmluZyB0byBlc2NhcGUNCiAgICAgKiAg QHBhcmFtIGhhbmRsZSAtIHRoZSBjb25uZWN0aW9uDQogICAgICogIEByZXR1 cm4gdGhlIGVzY2FwZWQsIHNhZmUgc3RyaW5nDQogICAgICovDQogICAgY29u c3QgY2hhciAqKCplc2NhcGUpKGFwcl9wb29sX3QgKnBvb2wsIGNvbnN0IGNo YXIgKnN0cmluZywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX2Ri ZF90ICpoYW5kbGUpOw0KICANCiAgICAvKiogcHJlcGFyZTogcHJlcGFyZSBh IHN0YXRlbWVudA0KICAgICAqDQogICAgICogIEBwYXJhbSBwb29sIC0gcG9v bCB0byBhbGxvYyB0aGUgcmVzdWx0IGZyb20NCiAgICAgKiAgQHBhcmFtIGhh bmRsZSAtIHRoZSBjb25uZWN0aW9uDQogICAgICogIEBwYXJhbSBxdWVyeSAt IHRoZSBTUUwgcXVlcnkNCiAgICAgKiAgQHBhcmFtIGxhYmVsIC0gQSBsYWJl bCBmb3IgdGhlIHByZXBhcmVkIHN0YXRlbWVudC4NCiAgICAgKiAgICAgICAg ICAgICAgICAgdXNlIE5VTEwgZm9yIHRlbXBvcmFyeSBwcmVwYXJlZCBzdGF0 ZW1lbnRzDQogICAgICogICAgICAgICAgICAgICAgIChlZyB3aXRoaW4gYSBS ZXF1ZXN0IGluIGh0dHBkKQ0KICAgICAqICBAcGFyYW0gc3RhdGVtZW50IC0g c3RhdGVtZW50IHRvIHByZXBhcmUuICBNYXkgcG9pbnQgdG8gbnVsbCBvbiBl bnRyeS4NCiAgICAgKiAgQHJldHVybiAwIGZvciBzdWNjZXNzIG9yIGVycm9y IGNvZGUNCiAgICAgKi8NCiAgICBpbnQgKCpwcmVwYXJlKShhcHJfcG9vbF90 ICpwb29sLCBhcHJfZGJkX3QgKmhhbmRsZSwgY29uc3QgY2hhciAqcXVlcnks DQogICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbGFiZWwsIGFwcl9k YmRfcHJlcGFyZWQgKipzdGF0ZW1lbnQpOw0KDQogICAgLyoqIHBxdWVyeTog cXVlcnkgdXNpbmcgYSBwcmVwYXJlZCBzdGF0ZW1lbnQgKyBhcmdzDQogICAg ICoNCiAgICAgKiAgQHBhcmFtIHBvb2wgLSB3b3JraW5nIHBvb2wNCiAgICAg KiAgQHBhcmFtIGhhbmRsZSAtIHRoZSBjb25uZWN0aW9uDQogICAgICogIEBw YXJhbSB0cmFucyAtIGN1cnJlbnQgdHJhbnNhY3Rpb24uICBNYXkgYmUgbnVs bC4NCiAgICAgKiAgQHBhcmFtIG5yb3dzIC0gbnVtYmVyIG9mIHJvd3MgYWZm ZWN0ZWQuDQogICAgICogIEBwYXJhbSBzdGF0ZW1lbnQgLSB0aGUgcHJlcGFy ZWQgc3RhdGVtZW50IHRvIGV4ZWN1dGUNCiAgICAgKiAgQHBhcmFtIC4uLiAt IGFyZ3MgdG8gcHJlcGFyZWQgc3RhdGVtZW50DQogICAgICogIEByZXR1cm4g MCBmb3Igc3VjY2VzcyBvciBlcnJvciBjb2RlDQogICAgICovDQogICAgaW50 ICgqcHF1ZXJ5KShhcHJfcG9vbF90ICpwb29sLCBhcHJfZGJkX3QgKmhhbmRs ZSwNCiAgICAgICAgICAgICAgICAgIGFwcl9kYmRfdHJhbnNhY3Rpb24gKnRy YW5zLCBpbnQgKm5yb3dzLA0KICAgICAgICAgICAgICAgICAgYXByX2RiZF9w cmVwYXJlZCAqc3RhdGVtZW50LCAuLi4pOw0KDQogICAgLyoqIHBzZWxlY3Q6 IHNlbGVjdCB1c2luZyBhIHByZXBhcmVkIHN0YXRlbWVudCArIGFyZ3MNCiAg ICAgKg0KICAgICAqICBAcGFyYW0gcG9vbCAtIHdvcmtpbmcgcG9vbA0KICAg ICAqICBAcGFyYW0gaGFuZGxlIC0gdGhlIGNvbm5lY3Rpb24NCiAgICAgKiAg QHBhcmFtIHRyYW5zIC0gY3VycmVudCB0cmFuc2FjdGlvbi4gIE1heSBiZSBu dWxsLg0KICAgICAqICBAcGFyYW0gcmVzIC0gcG9pbnRlciB0byBxdWVyeSBy ZXN1bHRzLiAgTWF5IHBvaW50IHRvIE5VTEwgb24gZW50cnkNCiAgICAgKiAg QHBhcmFtIHN0YXRlbWVudCAtIHRoZSBwcmVwYXJlZCBzdGF0ZW1lbnQgdG8g ZXhlY3V0ZQ0KICAgICAqICBAcGFyYW0gcmFuZG9tIC0gV2hldGhlciB0byBz dXBwb3J0IHJhbmRvbS1hY2Nlc3MgdG8gcmVzdWx0cw0KICAgICAqICBAcGFy YW0gLi4uIC0gYXJncyB0byBwcmVwYXJlZCBzdGF0ZW1lbnQNCiAgICAgKiAg QHJldHVybiAwIGZvciBzdWNjZXNzIG9yIGVycm9yIGNvZGUNCiAgICAgKi8N CiAgICBpbnQgKCpwc2VsZWN0KShhcHJfcG9vbF90ICpwb29sLCBhcHJfZGJk X3QgKmhhbmRsZSwNCiAgICAgICAgICAgICAgICAgICBhcHJfZGJkX3RyYW5z YWN0aW9uICp0cmFucywgYXByX2RiZF9yZXN1bHRzICoqcmVzLA0KICAgICAg ICAgICAgICAgICAgIGFwcl9kYmRfcHJlcGFyZWQgKnN0YXRlbWVudCwgaW50 IHJhbmRvbSwgLi4uKTsNCg0KfSBhcHJfZGJkX2RyaXZlcl90Ow0KDQovKiog YXByX2RiZF9nZXRfZHJpdmVyOiBnZXQgdGhlIGRyaXZlciBzdHJ1Y3QgZm9y IGEgbmFtZQ0KICoNCiAqICBAcGFyYW0gbmFtZSAtIGRyaXZlciBuYW1lDQog KiAgQHJldHVybiBkcml2ZXIgc3RydWN0IGZvciBuYW1lLCBvciBOVUxMIGlm IG5vdCBpbXBsZW1lbnRlZA0KICovDQpBUFVfREVDTEFSRShhcHJfZGJkX2Ry aXZlcl90KikgYXByX2RiZF9nZXRfZHJpdmVyKGNvbnN0IGNoYXIgKm5hbWUp Ow0KDQovKiogYXByX2RiZF9vcGVuOiBvcGVuIGEgY29ubmVjdGlvbiB0byBh IGJhY2tlbmQNCiAqDQogKiAgQHBhcmFtIHBvb2wgLSBwb29sIHRvIHJlZ2lz dGVyIGEgY2xlYW51cCBvbi4gIE1heSBiZSBOVUxMLg0KICogIEBwYXJhbSBw dG1wIC0gd29ya2luZyBwb29sDQogKiAgQHBhcmFtIG5hbWUgLSBkcml2ZXIg bmFtZS4gIElnbm9yZWQgaWYgZHJpdmVyIGRvZXNuJ3QgcG9pbnQgdG8gTlVM TA0KICogIEBwYXJhbSBwYXJhbXMgLSBhcmd1bWVudHMgdG8gZHJpdmVyIChp bXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQpDQogKiAgQHBhcmFtIGhhbmRsZSAt IHBvaW50ZXIgdG8gaGFuZGxlIHRvIHJldHVybg0KICogIEBwYXJhbSBkcml2 ZXIgLSBwb2ludGVyIHRvIGRyaXZlciBzdHJ1Y3QuICBNYXkgcG9pbnQgdG8g TlVMTA0KICogICAgICAgICAgICAgICAgICBpbiB3aGljaCBjYXNlIG5hbWUg aXMgdXNlZCB0byBsb29rdXAgJiByZXR1cm4gaXQNCiAqICBAcmV0dXJuIEFQ Ul9TVUNDRVNTIGZvciBzdWNjZXNzDQogKiAgQHJldHVybiBBUFJfRU5PVElN UEwgZm9yIG5vIGRyaXZlcg0KICogIEByZXR1cm4gQVBSX0VHRU5FUkFMIGlm IGRyaXZlciBleGlzdHMgYnV0IGNvbm5lY3Rpb24gZmFpbGVkDQogKi8NCkFQ VV9ERUNMQVJFKGFwcl9zdGF0dXNfdCkgYXByX2RiZF9vcGVuKGFwcl9wb29s X3QgKnBvb2wsIGFwcl9wb29sX3QgKnB0bXAsDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lLCBjb25z dCBjaGFyICpwYXJhbXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBhcHJfZGJkX3QgKipoYW5kbGUsDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfZGJkX2RyaXZlcl90ICoq ZHJpdmVyKTsNCg0KDQovKiogYXByX2RiZF9jbG9zZTogY2xvc2UgYSBjb25u ZWN0aW9uIHRvIGEgYmFja2VuZC4NCiAqICBPbmx5IHJlcXVpcmVkIGZvciBl eHBsaWNpdCBjbG9zZSBvcg0KICogIGlmIGZpcnN0IHBvb2wgYXJnIHRvIGFw cl9kYmRfb3BlbiB3YXMgTlVMTA0KICoNCiAqICBAcGFyYW0gcG9vbCAtIE11 c3QgYmUgc2FtZSBwb29sIGFzIChmaXJzdCkgcG9vbCBhcmcgdG8gYXByX2Ri ZF9vcGVuDQogKiAgQHBhcmFtIGhhbmRsZSAtIGhhbmRsZSB0byBjbG9zZQ0K ICogIEBwYXJhbSBkcml2ZXIgLSBkcml2ZXIgc3RydWN0Lg0KICogIEByZXR1 cm4gQVBSX1NVQ0NFU1MgZm9yIHN1Y2Nlc3Mgb3IgZXJyb3Igc3RhdHVzDQog Ki8NCkFQVV9ERUNMQVJFKGFwcl9zdGF0dXNfdCkgYXByX2RiZF9jbG9zZShh cHJfcG9vbF90ICpwb29sLCBhcHJfZGJkX3QgKmhhbmRsZSwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfZGJkX2RyaXZl cl90ICpkcml2ZXIpOw0KDQoNCi8qIGFwci1mdW5jdGlvbi1zaGFwZWQgdmVy c2lvbnMgb2YgdGhpbmdzICovDQoNCi8qKiBhcHJfZGJkX25hbWU6IGdldCB0 aGUgbmFtZSBvZiB0aGUgZHJpdmVyDQogKg0KICogIEBwYXJhbSBkcml2ZXIg LSB0aGUgZHJpdmVyDQogKiAgQHJldHVybiAtIG5hbWUNCiAqLw0KI2RlZmlu ZSBhcHJfZGJkX25hbWUoZHJpdmVyKSBcDQogICAgICAgIChkcml2ZXIpLT5u YW1lDQoNCi8qKiBhcHJfZGJkX25hdGl2ZV9oYW5kbGU6IGdldCBuYXRpdmUg ZGF0YWJhc2UgaGFuZGxlIG9mIHRoZSB1bmRlcmx5aW5nIGRiDQogKg0KICog IEBwYXJhbSBkcml2ZXIgLSB0aGUgZHJpdmVyDQogKiAgQHBhcmFtIGhhbmRs ZSAtIGFwcl9kYmQgaGFuZGxlDQogKiAgQHJldHVybiAtIG5hdGl2ZSBoYW5k bGUNCiAqLw0KI2RlZmluZSBhcHJfZGJkX25hdGl2ZV9oYW5kbGUoZHJpdmVy LGhhbmRsZXIpIFwNCiAgICAgICAgKGRyaXZlciktPm5hdGl2ZV9oYW5kbGUo aGFuZGxlcikNCg0KLyoqIGNoZWNrX2Nvbm46IGNoZWNrIHN0YXR1cyBvZiBh IGRhdGFiYXNlIGNvbm5lY3Rpb24NCiAqDQogKiAgQHBhcmFtIGRyaXZlciAt IHRoZSBkcml2ZXINCiAqICBAcGFyYW0gcG9vbCAtIHdvcmtpbmcgcG9vbA0K ICogIEBwYXJhbSBoYW5kbGUgLSB0aGUgY29ubmVjdGlvbiB0byBjaGVjaw0K ICogIEByZXR1cm4gQVBSX1NVQ0NFU1Mgb3IgZXJyb3INCiAqLw0KI2RlZmlu ZSBhcHJfZGJkX2NoZWNrX2Nvbm4oZHJpdmVyLHBvb2wsaGFuZGxlKSBcDQog ICAgICAgIChkcml2ZXIpLT5jaGVja19jb25uKChwb29sKSwoaGFuZGxlKSkN Cg0KLyoqIGFwcl9kYmRfc2V0X2RibmFtZTogc2VsZWN0IGRhdGFiYXNlIG5h bWUuICBNYXkgYmUgYSBuby1vcCBpZiBub3Qgc3VwcG9ydGVkLg0KICoNCiAq ICBAcGFyYW0gZHJpdmVyIC0gdGhlIGRyaXZlcg0KICogIEBwYXJhbSBwb29s IC0gd29ya2luZyBwb29sDQogKiAgQHBhcmFtIGhhbmRsZSAtIHRoZSBjb25u ZWN0aW9uDQogKiAgQHBhcmFtIG5hbWUgLSB0aGUgZGF0YWJhc2UgdG8gc2Vs ZWN0DQogKiAgQHJldHVybiAwIGZvciBzdWNjZXNzIG9yIGVycm9yIGNvZGUN CiAqLw0KI2RlZmluZSBhcHJfZGJkX3NldF9kYm5hbWUoZHJpdmVyLHBvb2ws aGFuZGxlLG5hbWUpIFwNCiAgICAgICAgKGRyaXZlciktPnNldF9kYm5hbWUo KHBvb2wpLChoYW5kbGUpLChuYW1lKSkNCg0KLyoqIGFwcl9kYmRfdHJhbnNh Y3Rpb25fc3RhcnQ6IHN0YXJ0IGEgdHJhbnNhY3Rpb24uICBNYXkgYmUgYSBu by1vcC4NCiAqDQogKiAgQHBhcmFtIGRyaXZlciAtIHRoZSBkcml2ZXINCiAq ICBAcGFyYW0gcG9vbCAtIGEgcG9vbCB0byB1c2UgZm9yIGVycm9yIG1lc3Nh Z2VzIChpZiBhbnkpLg0KICogIEBwYXJhbSBoYW5kbGUgLSB0aGUgY29ubmVj dGlvbiB0byBjaGVjaw0KICogIEBwYXJhbSB0cmFuc2FjdGlvbiAtIHB0ciB0 byBhIHRyYW5zYWN0aW9uLiAgTWF5IGJlIG51bGwgb24gZW50cnkNCiAqICBA cmV0dXJuIDAgZm9yIHN1Y2Nlc3Mgb3IgZXJyb3IgY29kZQ0KICovDQojZGVm aW5lIGFwcl9kYmRfdHJhbnNhY3Rpb25fc3RhcnQoZHJpdmVyLHBvb2wsaGFu ZGxlLHRyYW5zKSBcDQogICAgICAgIChkcml2ZXIpLT50cmFuc2FjdGlvbigo cG9vbCksKGhhbmRsZSksKHRyYW5zKSkNCg0KLyoqIGFwcl9kYmRfdHJhbnNh Y3Rpb25fZW5kOiBlbmQgYSB0cmFuc2FjdGlvbg0KICogIChjb21taXQgb24g c3VjY2Vzcywgcm9sbGJhY2sgb24gZXJyb3IpLg0KICogIE1heSBiZSBhIG5v LW9wLg0KICoNCiAqICBAcGFyYW0gZHJpdmVyIC0gdGhlIGRyaXZlcg0KICog IEBwYXJhbSBoYW5kbGUgLSB0aGUgY29ubmVjdGlvbiB0byBjaGVjaw0KICog IEBwYXJhbSB0cmFuc2FjdGlvbiAtIHRoZSB0cmFuc2FjdGlvbi4NCiAqICBA cmV0dXJuIDAgZm9yIHN1Y2Nlc3Mgb3IgZXJyb3IgY29kZQ0KICovDQojZGVm aW5lIGFwcl9kYmRfdHJhbnNhY3Rpb25fZW5kKGRyaXZlcixoYW5kbGUsdHJh bnMpIFwNCiAgICAgICAgKGRyaXZlciktPmVuZF90cmFuc2FjdGlvbigoaGFu ZGxlKSwodHJhbnMpKQ0KDQovKiogYXByX2RiZF9xdWVyeTogZXhlY3V0ZSBh biBTUUwgcXVlcnkgdGhhdCBkb2Vzbid0IHJldHVybiBhIHJlc3VsdCBzZXQN CiAqDQogKiAgQHBhcmFtIGRyaXZlciAtIHRoZSBkcml2ZXINCiAqICBAcGFy YW0gaGFuZGxlIC0gdGhlIGNvbm5lY3Rpb24NCiAqICBAcGFyYW0gdHJhbnNh Y3Rpb24gLSBjdXJyZW50IHRyYW5zYWN0aW9uLiAgTWF5IGJlIG51bGwuDQog KiAgQHBhcmFtIG5yb3dzIC0gbnVtYmVyIG9mIHJvd3MgYWZmZWN0ZWQuDQog KiAgQHBhcmFtIHN0YXRlbWVudCAtIHRoZSBTUUwgc3RhdGVtZW50IHRvIGV4 ZWN1dGUNCiAqICBAcmV0dXJuIDAgZm9yIHN1Y2Nlc3Mgb3IgZXJyb3IgY29k ZQ0KICovDQojZGVmaW5lIGFwcl9kYmRfcXVlcnkoZHJpdmVyLGhhbmRsZSx0 cmFucyxucm93cyxzdGF0ZW1lbnQpIFwNCiAgICAgICAgKGRyaXZlciktPnF1 ZXJ5KChoYW5kbGUpLCh0cmFucyksKG5yb3dzKSwoc3RhdGVtZW50KSkNCg0K LyoqIGFwcl9kYmRfc2VsZWN0OiBleGVjdXRlIGFuIFNRTCBxdWVyeSB0aGF0 IHJldHVybnMgYSByZXN1bHQgc2V0DQogKg0KICogIEBwYXJhbSBkcml2ZXIg LSB0aGUgZHJpdmVyDQogKiAgQHBhcmFtIHBvb2wgLSBwb29sIHRvIGFsbG9j YXRlIHRoZSByZXN1bHQgc2V0DQogKiAgQHBhcmFtIGhhbmRsZSAtIHRoZSBj b25uZWN0aW9uDQogKiAgQHBhcmFtIHRyYW5zYWN0aW9uIC0gY3VycmVudCB0 cmFuc2FjdGlvbi4gIE1heSBiZSBudWxsLg0KICogIEBwYXJhbSByZXMgLSBw b2ludGVyIHRvIHJlc3VsdCBzZXQgcG9pbnRlci4gIE1heSBwb2ludCB0byBO VUxMIG9uIGVudHJ5DQogKiAgQHBhcmFtIHN0YXRlbWVudCAtIHRoZSBTUUwg c3RhdGVtZW50IHRvIGV4ZWN1dGUNCiAqICBAcGFyYW0gcmFuZG9tIC0gMSB0 byBzdXBwb3J0IHJhbmRvbSBhY2Nlc3MgdG8gcmVzdWx0cyAoc2VlayBhbnkg cm93KTsNCiAqICAgICAgICAgICAgICAgICAgMCB0byBzdXBwb3J0IG9ubHkg bG9vcGluZyB0aHJvdWdoIHJlc3VsdHMgaW4gb3JkZXINCiAqICAgICAgICAg ICAgICAgICAgICAoYXN5bmMgYWNjZXNzIC0gZmFzdGVyKQ0KICogIEByZXR1 cm4gMCBmb3Igc3VjY2VzcyBvciBlcnJvciBjb2RlDQogKi8NCiNkZWZpbmUg YXByX2RiZF9zZWxlY3QoZHJpdmVyLHBvb2wsaGFuZGxlLHRyYW5zLHJlcyxz dGF0ZW1lbnQscmFuZG9tKSBcDQogICAgICAgIChkcml2ZXIpLT5zZWxlY3Qo KHBvb2wpLChoYW5kbGUpLCh0cmFucyksKHJlcyksKHN0YXRlbWVudCksKHJh bmRvbSkpDQoNCi8qKiBhcHJfZGJkX251bV9jb2xzOiBnZXQgdGhlIG51bWJl ciBvZiBjb2x1bW5zIGluIGEgcmVzdWx0cyBzZXQNCiAqDQogKiAgQHBhcmFt IGRyaXZlciAtIHRoZSBkcml2ZXINCiAqICBAcGFyYW0gcmVzIC0gcmVzdWx0 IHNldC4NCiAqICBAcmV0dXJuIG51bWJlciBvZiBjb2x1bW5zDQogKi8NCiNk ZWZpbmUgYXByX2RiZF9udW1fY29scyhkcml2ZXIscmVzKSBcDQogICAgICAg IChkcml2ZXIpLT5udW1fY29scygocmVzKSkNCg0KLyoqIGFwcl9kYmRfbnVt X3R1cGxlczogZ2V0IHRoZSBudW1iZXIgb2Ygcm93cyBpbiBhIHJlc3VsdHMg c2V0DQogKiAgb2YgYSBzeW5jaHJvbm91cyBzZWxlY3QNCiAqDQogKiAgQHBh cmFtIGRyaXZlciAtIHRoZSBkcml2ZXINCiAqICBAcGFyYW0gcmVzIC0gcmVz dWx0IHNldC4NCiAqICBAcmV0dXJuIG51bWJlciBvZiByb3dzLCBvciAtMSBp ZiB0aGUgcmVzdWx0cyBhcmUgYXN5bmNocm9ub3VzDQogKi8NCiNkZWZpbmUg YXByX2RiZF9udW1fdHVwbGVzKGRyaXZlcixyZXMpIFwNCiAgICAgICAgKGRy aXZlciktPm51bV90dXBsZXMoKHJlcykpDQoNCi8qKiBhcHJfZGJkX2dldF9y b3c6IGdldCBhIHJvdyBmcm9tIGEgcmVzdWx0IHNldA0KICoNCiAqICBAcGFy YW0gZHJpdmVyIC0gdGhlIGRyaXZlcg0KICogIEBwYXJhbSBwb29sIC0gcG9v bCB0byBhbGxvY2F0ZSB0aGUgcm93DQogKiAgQHBhcmFtIHJlcyAtIHJlc3Vs dCBzZXQgcG9pbnRlcg0KICogIEBwYXJhbSByb3cgLSBwb2ludGVyIHRvIHJv dyBwb2ludGVyLiAgTWF5IHBvaW50IHRvIE5VTEwgb24gZW50cnkNCiAqICBA cGFyYW0gcm93bnVtIC0gcm93IG51bWJlciwgb3IgLTEgZm9yICJuZXh0IHJv dyIuICBJZ25vcmVkIGlmIHJhbmRvbQ0KICogICAgICAgICAgICAgICAgICBh Y2Nlc3MgaXMgbm90IHN1cHBvcnRlZC4NCiAqICBAcmV0dXJuIDAgZm9yIHN1 Y2Nlc3MsIC0xIGZvciByb3dudW0gb3V0IG9mIHJhbmdlIG9yIGRhdGEgZmlu aXNoZWQNCiAqLw0KI2RlZmluZSBhcHJfZGJkX2dldF9yb3coZHJpdmVyLHBv b2wscmVzLHJvdyxyb3dudW0pIFwNCiAgICAgICAgKGRyaXZlciktPmdldF9y b3coKHBvb2wpLChyZXMpLChyb3cpLChyb3dudW0pKQ0KDQovKiogYXByX2Ri ZF9nZXRfZW50cnk6IGdldCBhbiBlbnRyeSBmcm9tIGEgcm93DQogKg0KICog IEBwYXJhbSBkcml2ZXIgLSB0aGUgZHJpdmVyDQogKiAgQHBhcmFtIHJvdyAt IHJvdyBwb2ludGVyDQogKiAgQHBhcmFtIGNvbCAtIGVudHJ5IG51bWJlcg0K ICogIEByZXR1cm4gdmFsdWUgZnJvbSB0aGUgcm93LCBvciBOVUxMIGlmIGNv bCBpcyBvdXQgb2YgYm91bmRzLg0KICovDQojZGVmaW5lIGFwcl9kYmRfZ2V0 X2VudHJ5KGRyaXZlcixyb3csY29sKSBcDQogICAgICAgIChkcml2ZXIpLT5n ZXRfZW50cnkoKHJvdyksKGNvbCkpDQoNCi8qKiBhcHJfZGJkX2Vycm9yOiBn ZXQgY3VycmVudCBlcnJvciBtZXNzYWdlIChpZiBhbnkpDQogKg0KICogIEBw YXJhbSBkcml2ZXIgLSB0aGUgZHJpdmVyDQogKiAgQHBhcmFtIGhhbmRsZSAt IHRoZSBjb25uZWN0aW9uDQogKiAgQHBhcmFtIGVycm51bSAtIGVycm9yIGNv ZGUgZnJvbSBvcGVyYXRpb24gdGhhdCByZXR1cm5lZCBhbiBlcnJvcg0KICog IEByZXR1cm4gdGhlIGRhdGFiYXNlIGN1cnJlbnQgZXJyb3IgbWVzc2FnZSwg b3IgbWVzc2FnZSBmb3IgZXJybnVtDQogKiAgICAgICAgICAoaW1wbGVtZW50 YXRpb24tZGVwZW5kZW50IHdoZXRoZXIgZXJybnVtIGlzIGlnbm9yZWQpDQog Ki8NCiNkZWZpbmUgYXByX2RiZF9lcnJvcihkcml2ZXIsaGFuZGxlLGVycm51 bSkgXA0KICAgICAgICAoZHJpdmVyKS0+ZXJyb3IoKGhhbmRsZSksKGVycm51 bSkpDQoNCi8qKiBhcHJfZGJkX2VzY2FwZTogZXNjYXBlIGEgc3RyaW5nIHNv IGl0IGlzIHNhZmUgZm9yIHVzZSBpbiBxdWVyeS9zZWxlY3QNCiAqDQogKiAg QHBhcmFtIGRyaXZlciAtIHRoZSBkcml2ZXINCiAqICBAcGFyYW0gcG9vbCAt IHBvb2wgdG8gYWxsb2MgdGhlIHJlc3VsdCBmcm9tDQogKiAgQHBhcmFtIHN0 cmluZyAtIHRoZSBzdHJpbmcgdG8gZXNjYXBlDQogKiAgQHBhcmFtIGhhbmRs ZSAtIHRoZSBjb25uZWN0aW9uDQogKiAgQHJldHVybiB0aGUgZXNjYXBlZCwg c2FmZSBzdHJpbmcNCiAqLw0KI2RlZmluZSBhcHJfZGJkX2VzY2FwZShkcml2 ZXIscG9vbCxzdHJpbmcsaGFuZGxlKSBcDQogICAgICAgIChkcml2ZXIpLT5l c2NhcGUoKHBvb2wpLChzdHJpbmcpLChoYW5kbGUpKQ0KDQovKiogYXByX2Ri ZF9wcmVwYXJlOiBwcmVwYXJlIGEgc3RhdGVtZW50DQogKg0KICogIEBwYXJh bSBkcml2ZXIgLSB0aGUgZHJpdmVyDQogKiAgQHBhcmFtIHBvb2wgLSBwb29s IHRvIGFsbG9jIHRoZSByZXN1bHQgZnJvbQ0KICogIEBwYXJhbSBoYW5kbGUg LSB0aGUgY29ubmVjdGlvbg0KICogIEBwYXJhbSBxdWVyeSAtIHRoZSBTUUwg cXVlcnkNCiAqICBAcGFyYW0gbGFiZWwgLSBBIGxhYmVsIGZvciB0aGUgcHJl cGFyZWQgc3RhdGVtZW50Lg0KICogICAgICAgICAgICAgICAgIHVzZSBOVUxM IGZvciB0ZW1wb3JhcnkgcHJlcGFyZWQgc3RhdGVtZW50cw0KICogICAgICAg ICAgICAgICAgIChlZyB3aXRoaW4gYSBSZXF1ZXN0IGluIGh0dHBkKQ0KICog IEBwYXJhbSBzdGF0ZW1lbnQgLSBzdGF0ZW1lbnQgdG8gcHJlcGFyZS4gIE1h eSBwb2ludCB0byBudWxsIG9uIGVudHJ5Lg0KICogIEByZXR1cm4gMCBmb3Ig c3VjY2VzcyBvciBlcnJvciBjb2RlDQogKi8NCiNkZWZpbmUgYXByX2RiZF9w cmVwYXJlKGRyaXZlcixwb29sLGhhbmRsZSxxdWVyeSxsYWJlbCxzdGF0ZW1l bnQpIFwNCiAgICAgICAgKGRyaXZlciktPnByZXBhcmUoKHBvb2wpLChoYW5k bGUpLChxdWVyeSksKGxhYmVsKSwoc3RhdGVtZW50KSkNCg0KLyogbmVlZCBt YWNyb3MgdGhhdCBkbyB2YXJhcmdzIHRvIGRlYWwgd2l0aCBwcXVlcnkgYW5k IHBzZWxlY3QgOi0pICovDQoNCg0KI2lmZGVmIF9fY3BsdXNwbHVzDQp9DQoj ZW5kaWYNCg0KI2VuZGlmDQo= ---1463810294-1892063039-1102595640=:6831 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="apr_dbd.c" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="apr_dbd.c" LyogICAgICAgIENvcHlyaWdodCAoYykgMjAwNCwgTmljayBLZXcuICBBbGwg cmlnaHRzIHJlc2VydmVkLg0KDQogICAgICAgIElmIHRoaXMgaXMgYWNjZXB0 ZWQgYnkgQVNGIGZvciBpbmNsdXNpb24gaW4gQVBSLVVUSUwsDQogICAgICAg IEkgd2lsbCBhc3NpZ24gY29weXJpZ2h0IHRvIEFTRiBhbmQgbGljZW5zZSB1 bmRlciBBU0YgdGVybXMuDQoNCiAgICAgICAgT3RoZXJ3aXNlIEkgd2lsbCBy ZXRhaW4gY29weXJpZ2h0IGFuZCBsaWNlbnNlIHVuZGVyDQogICAgICAgIHRl cm1zIG9mIG15IGNob2ljZS4NCiovDQoNCiNpbmNsdWRlICJhcHUuaCINCiNp bmNsdWRlICJhcHJfcG9vbHMuaCINCiNpbmNsdWRlICJhcHJfZGJkLmgiDQoN Cg0KLyoqIEZJWE1FDQogKiAgSSd2ZSBpbXBsZW1lbnRlZCBNeVNRTCBhbmQg UG9zdGdyZVNRTC4NCiAqICBPdGhlcnMgYXJlIHBsYWNlaG9sZGVycyBmb3Ig d2hlbiBzb21lb25lIGdldHMgYXJvdW5kIHRvIGl0Lg0KICogIEkga25vdyB0 aGVyZSBhcmUgbWFueSBjYW5kaWRhdGVzIEkndmUgb3Zlcmxvb2tlZCAtIGFk ZCB0aGVtIGF0IHdpbGwuDQogKi8NCiNpZiBBUFVfSEFWRV9NWVNRTA0KICAg IGV4dGVybiBhcHJfZGJkX2RyaXZlcl90IGFwcl9kYmRfbXlzcWxfZHJpdmVy Ow0KI2VuZGlmDQojaWYgQVBVX0hBVkVfUEdTUUwNCiAgICBleHRlcm4gYXBy X2RiZF9kcml2ZXJfdCBhcHJfZGJkX3Bnc3FsX2RyaXZlcjsNCiNlbmRpZg0K I2lmIEFQVV9IQVZFX0ZJUkVCSVJEDQogICAgZXh0ZXJuIGFwcl9kYmRfZHJp dmVyX3QgYXByX2RiZF9maXJlYmlyZF9kcml2ZXI7DQojZW5kaWYNCiNpZiBB UFVfSEFWRV9NU1FMDQogICAgZXh0ZXJuIGFwcl9kYmRfZHJpdmVyX3QgYXBy X2RiZF9tc3FsX2RyaXZlcjsNCiNlbmRpZg0KI2lmIEFQVV9IQVZFX09EQkMN CiAgICBleHRlcm4gYXByX2RiZF9kcml2ZXJfdCBhcHJfZGJkX29kYmNfZHJp dmVyOw0KI2VuZGlmDQojaWYgQVBVX0hBVkVfTVNTUUwNCiAgICBleHRlcm4g YXByX2RiZF9kcml2ZXJfdCBhcHJfZGJkX21zc3FsX2RyaXZlcjsNCiNlbmRp Zg0KI2lmIEFQVV9IQVZFX09SQUNMRQ0KICAgIGV4dGVybiBhcHJfZGJkX2Ry aXZlcl90IGFwcl9kYmRfb3JhY2xlX2RyaXZlcjsNCiNlbmRpZg0KDQpzdGF0 aWMgc3RydWN0IHsNCiAgICBjb25zdCBjaGFyICpuYW1lOw0KICAgIGFwcl9k YmRfZHJpdmVyX3QgKmRyaXZlcjsNCn0gYXByX2RiZF9kcml2ZXJzW10gPSB7 DQojaWYgQVBVX0hBVkVfTVlTUUwNCiAgICB7ICJteXNxbCIsICZhcHJfZGJk X215c3FsX2RyaXZlciB9ICwNCiNlbmRpZg0KI2lmIEFQVV9IQVZFX1BHU1FM DQogICAgeyAicGdzcWwiLCAmYXByX2RiZF9wZ3NxbF9kcml2ZXIgfSAsDQoj ZW5kaWYNCiNpZiBBUFVfSEFWRV9GSVJFQklSRA0KICAgIHsgImZpcmViaXJk IiwgJmFwcl9kYmRfZmlyZWJpcmRfZHJpdmVyIH0gLA0KI2VuZGlmDQojaWYg QVBVX0hBVkVfTVNRTA0KICAgIHsgIm1zcWwiLCAmYXByX2RiZF9tc3FsX2Ry aXZlciB9ICwNCiNlbmRpZg0KI2lmIEFQVV9IQVZFX09EQkMNCiAgICB7ICJv ZGJjIiwgJmFwcl9kYmRfb2RiY19kcml2ZXIgfSAsDQojZW5kaWYNCiNpZiBB UFVfSEFWRV9PUkFDTEUNCiAgICB7ICJvcmFjbGUiLCAmYXByX2RiZF9vcmFj bGVfZHJpdmVyIH0gLA0KI2VuZGlmDQojaWYgQVBVX0hBVkVfTVNTUUwNCiAg ICB7ICJtc3NxbCIsICZhcHJfZGJkX21zc3FsX2RyaXZlciB9ICwNCiNlbmRp Zg0KICAgIHsgTlVMTCAsIE5VTEwgfQ0KfTsNCg0KQVBVX0RFQ0xBUkUoYXBy X2RiZF9kcml2ZXJfdCopIGFwcl9kYmRfZ2V0X2RyaXZlcihjb25zdCBjaGFy ICpuYW1lKQ0Kew0KICAgIGludCBpOw0KICAgIGZvciAoaSA9IDA7IGFwcl9k YmRfZHJpdmVyc1tpXS5uYW1lICE9IE5VTEw7ICsraSkgew0KICAgICAgICBp ZiAoIXN0cmNhc2VjbXAoYXByX2RiZF9kcml2ZXJzW2ldLm5hbWUsIG5hbWUp KSB7DQogICAgICAgICAgICByZXR1cm4gYXByX2RiZF9kcml2ZXJzW2ldLmRy aXZlcjsNCiAgICAgICAgfQ0KICAgIH0NCiAgICByZXR1cm4gTlVMTDsNCn0N CkFQVV9ERUNMQVJFKGFwcl9zdGF0dXNfdCkgYXByX2RiZF9vcGVuKGFwcl9w b29sX3QgKnBvb2wsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBhcHJfcG9vbF90ICpwdG1wLA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSwNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg KnBhcmFtcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGFwcl9kYmRfdCAqKmhhbmRsZSwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGFwcl9kYmRfZHJpdmVyX3QgKipkcml2ZXIp DQp7DQogICAgYXByX3N0YXR1c190IHJ2ID0gQVBSX1NVQ0NFU1M7DQogICAg aWYgKCpkcml2ZXIgPT0gTlVMTCkgew0KICAgICAgICAqZHJpdmVyID0gYXBy X2RiZF9nZXRfZHJpdmVyKG5hbWUpOw0KICAgICAgICBpZiAoKmRyaXZlciA9 PSBOVUxMKSB7DQogICAgICAgICAgICByZXR1cm4gQVBSX0VOT1RJTVBMOw0K ICAgICAgICB9DQogICAgfQ0KICAgICpoYW5kbGUgPSAoKmRyaXZlciktPm9w ZW4ocHRtcCwgcGFyYW1zKTsNCiAgICBpZiAoKmhhbmRsZSA9PSBOVUxMKSB7 DQogICAgICAgIHJldHVybiBBUFJfRUdFTkVSQUw7DQogICAgfQ0KICAgIHJ2 ID0gYXByX2RiZF9jaGVja19jb25uKCpkcml2ZXIsIHB0bXAsICpoYW5kbGUp Ow0KICAgIGlmIChydiA9PSAwKSB7DQogICAgICAgIGlmIChwb29sICE9IE5V TEwpIHsNCiAgICAgICAgICAgIGFwcl9wb29sX2NsZWFudXBfcmVnaXN0ZXIo cG9vbCwgKmhhbmRsZSwgKCpkcml2ZXIpLT5jbG9zZSwNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfY2xlYW51cF9u dWxsKTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgICAg KCpkcml2ZXIpLT5jbG9zZSgqaGFuZGxlKTsNCiAgICAgICAgcnYgPSBBUFJf RUdFTkVSQUw7DQogICAgfQ0KICAgIHJldHVybiBydjsNCn0NCkFQVV9ERUNM QVJFKGFwcl9zdGF0dXNfdCkgYXByX2RiZF9jbG9zZShhcHJfcG9vbF90ICpw b29sLCBhcHJfZGJkX3QgKmhhbmRsZSwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBhcHJfZGJkX2RyaXZlcl90ICpkcml2ZXIp DQp7DQogICAgaWYgKHBvb2wgIT0gTlVMTCkgew0KICAgICAgICBhcHJfcG9v bF9jbGVhbnVwX2tpbGwocG9vbCwgaGFuZGxlLCBkcml2ZXItPmNsb3NlKTsN CiAgICB9DQogICAgcmV0dXJuIGRyaXZlci0+Y2xvc2UoaGFuZGxlKTsNCn0N Cg== ---1463810294-1892063039-1102595640=:6831 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="apr_dbd_mysql.c" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="apr_dbd_mysql.c" LyoNCiAgICAgICAgIENvcHlyaWdodCAoYykgMjAwMy00LCBXZWJUaGluZyBM dGQNCiAgICAgICAgIEF1dGhvcjogTmljayBLZXcgPG5pY2tAd2VidGhpbmcu Y29tPg0KIA0KVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCml0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5DQp0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl aXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcg0KKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCiANClRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLA0KYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YNCk1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCkdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQog DQpZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KYWxvbmcgd2l0aCB0aGlzIHByb2dy YW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCkZvdW5k YXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9z dG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuDQogDQoqLw0KDQovKg0KICAgICAg ICBJZiB0aGlzIGlzIGFjY2VwdGVkIGJ5IEFTRiBmb3IgaW5jbHVzaW9uIGlu IEFQUi1VVElMLA0KICAgICAgICBJIHdpbGwgYXNzaWduIGNvcHlyaWdodCB0 byBBU0YgYW5kIGxpY2Vuc2UgdW5kZXIgQVNGIHRlcm1zLg0KDQogICAgICAg IFRoZSBjdXJyZW50IEdQTCBzYXRpc2ZpZXMgTXlTUUwgbGljZW5zaW5nIHRl cm1zIHdpdGhvdXQNCiAgICAgICAgaW52b2tpbmcgYW55IGV4Y2VwdGlvbnMu DQoNCiAgICAgICAgVGhpcyBjb2RlIGlzIHVudGVzdGVkLCBhbmQgcHJvYmFi bHkgbW9zdGx5IHdvbid0IHdvcmsuDQogICAgICAgIEl0J3MgYSBkZW1vIG9m IGNvbmNlcHQuDQoqLw0KDQoNCiNpZiBBUFVfSEFWRV9NWVNRTA0KDQojaW5j bHVkZSA8Y3R5cGUuaD4NCiNpbmNsdWRlIDxzdGRsaWIuaD4NCg0KI2luY2x1 ZGUgPG15c3FsL215c3FsLmg+DQojaW5jbHVkZSA8bXlzcWwvZXJybXNnLmg+ DQoNCiNpbmNsdWRlICJhcHJfc3RyaW5ncy5oIg0KDQp0eXBlZGVmIE1ZU1FM IGFwcl9kYmRfdDsNCnR5cGVkZWYgTVlTUUxfU1RNVCBhcHJfZGJkX3ByZXBh cmVkOw0KdHlwZWRlZiBzdHJ1Y3Qgew0KICAgIGludCBlcnJudW07DQp9IGFw cl9kYmRfdHJhbnNhY3Rpb247DQoNCnR5cGVkZWYgc3RydWN0IHsNCiAgICBp bnQgcmFuZG9tOw0KICAgIE1ZU1FMX1JFUyAqcmVzOw0KICAgIE1ZU1FMX1NU TVQgKnN0YXRlbWVudDsNCiAgICBNWVNRTF9CSU5EICpiaW5kOw0KfSBhcHJf ZGJkX3Jlc3VsdHM7DQp0eXBlZGVmIHN0cnVjdCB7DQogICAgTVlTUUxfUk9X IHJvdzsNCiAgICBhcHJfZGJkX3Jlc3VsdHMgKnJlczsNCn0gYXByX2RiZF9y b3c7DQoNCiNkZWZpbmUgQVBSX0RCRF9JTlRFUk5BTA0KI2luY2x1ZGUgImFw cl9kYmQuaCINCg0Kc3RhdGljIGludCBkYmRfbXlzcWxfc2VsZWN0KGFwcl9w b29sX3QgKnBvb2wsIGFwcl9kYmRfdCAqc3FsLA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGFwcl9kYmRfdHJhbnNhY3Rpb24gKnRyYW5zLA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9kYmRfcmVzdWx0cyAqKnJl c3VsdHMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh ciAqcXVlcnksIGludCBzZWVrKQ0Kew0KICAgIGludCBzejsNCiAgICBpbnQg cmV0Ow0KICAgIGlmICh0cmFucyAmJiB0cmFucy0+ZXJybnVtKSB7DQogICAg ICAgIHJldHVybiB0cmFucy0+ZXJybnVtOw0KICAgIH0NCiAgICByZXQgPSBt eXNxbF9xdWVyeShzcWwsIHF1ZXJ5KTsNCiAgICBpZiAoIXJldCkgew0KICAg ICAgICBpZiAoc3ogPSBteXNxbF9maWVsZF9jb3VudChzcWwpLCBzeiA+IDAp IHsNCiAgICAgICAgICAgIGlmICghKnJlc3VsdHMpIHsNCiAgICAgICAgICAg ICAgICAqcmVzdWx0cyA9IGFwcl9wYWxsb2MocG9vbCwgc2l6ZW9mKGFwcl9k YmRfcmVzdWx0cykpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgKCpy ZXN1bHRzKS0+cmFuZG9tID0gc2VlazsNCiAgICAgICAgICAgICgqcmVzdWx0 cyktPnN0YXRlbWVudCA9IE5VTEw7DQogICAgICAgICAgICBpZiAoc2Vlaykg ew0KICAgICAgICAgICAgICAgICgqcmVzdWx0cyktPnJlcyA9IG15c3FsX3N0 b3JlX3Jlc3VsdChzcWwpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAg ZWxzZSB7DQogICAgICAgICAgICAgICAgKCpyZXN1bHRzKS0+cmVzID0gbXlz cWxfdXNlX3Jlc3VsdChzcWwpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAg ICAgYXByX3Bvb2xfY2xlYW51cF9yZWdpc3Rlcihwb29sLCAoKnJlc3VsdHMp LT5yZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICh2b2lkKilteXNxbF9mcmVlX3Jlc3VsdCwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfY2xlYW51cF9udWxsKTsN CiAgICAgICAgfQ0KICAgIH0NCiAgICBpZiAodHJhbnMpIHsNCiAgICAgICAg dHJhbnMtPmVycm51bSA9IHJldDsNCiAgICB9DQogICAgcmV0dXJuIHJldDsN Cn0NCnN0YXRpYyBpbnQgZGJkX215c3FsX2dldF9yb3coYXByX3Bvb2xfdCAq cG9vbCwgYXByX2RiZF9yZXN1bHRzICpyZXMsDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGFwcl9kYmRfcm93ICoqcm93LCBpbnQgcm93bnVtKQ0K ew0KICAgIE1ZU1FMX1JPVyByOw0KICAgIGludCByZXQgPSAwOw0KDQogICAg aWYgKHJlcy0+c3RhdGVtZW50KSB7DQogICAgICAgIGlmIChyZXMtPnJhbmRv bSkgew0KICAgICAgICAgICAgaWYgKHJvd251bSA+PSAwKSB7DQogICAgICAg ICAgICAgICAgbXlzcWxfc3RtdF9kYXRhX3NlZWsocmVzLT5zdGF0ZW1lbnQs IChteV91bG9uZ2xvbmcpcm93bnVtKTsNCiAgICAgICAgICAgIH0NCiAgICAg ICAgfQ0KICAgICAgICByZXQgPSBteXNxbF9zdG10X2ZldGNoKHJlcy0+c3Rh dGVtZW50KTsNCiAgICB9DQogICAgZWxzZSB7DQogICAgICAgIGlmIChyZXMt PnJhbmRvbSkgew0KICAgICAgICAgICAgaWYgKHJvd251bSA+PSAwKSB7DQog ICAgICAgICAgICAgICAgbXlzcWxfZGF0YV9zZWVrKHJlcy0+cmVzLCAobXlf dWxvbmdsb25nKSByb3dudW0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9 DQogICAgICAgIHIgPSBteXNxbF9mZXRjaF9yb3cocmVzLT5yZXMpOw0KICAg ICAgICBpZiAociA9PSBOVUxMKSB7DQogICAgICAgICAgICByZXQgPSAxOw0K ICAgICAgICB9DQogICAgfQ0KICAgIGlmICghcmV0KSB7DQogICAgICAgIGlm ICghKnJvdykgew0KICAgICAgICAgICAgKnJvdyA9IGFwcl9wYWxsb2MocG9v bCwgc2l6ZW9mKGFwcl9kYmRfcm93KSk7DQogICAgICAgIH0NCiAgICAgICAg KCpyb3cpLT5yb3cgPSByOw0KICAgICAgICAoKnJvdyktPnJlcyA9IHJlczsN CiAgICB9DQogICAgcmV0dXJuIChyZXQgPT0gMCkgPyAwIDogLTE7DQp9DQpz dGF0aWMgY29uc3QgY2hhciAqZGJkX215c3FsX2dldF9lbnRyeShjb25zdCBh cHJfZGJkX3JvdyAqcm93LCBpbnQgbikNCnsNCiAgICBNWVNRTF9CSU5EICpi aW5kOw0KICAgIGlmIChyb3ctPnJlcy0+c3RhdGVtZW50KSB7DQogICAgICAg IGJpbmQgPSAmcm93LT5yZXMtPmJpbmRbbl07DQogICAgICAgIGlmICggbXlz cWxfc3RtdF9mZXRjaF9jb2x1bW4ocm93LT5yZXMtPnN0YXRlbWVudCwgYmlu ZCwgbiwgMCkgIT0gMCApIHsNCiAgICAgICAgICAgIHJldHVybiBOVUxMOw0K ICAgICAgICB9DQogICAgICAgIGlmICggKmJpbmQtPmlzX251bGwgKSB7DQog ICAgICAgICAgICByZXR1cm4gTlVMTDsNCiAgICAgICAgfQ0KICAgICAgICBl bHNlIHsNCiAgICAgICAgICAgIHJldHVybiBiaW5kLT5idWZmZXI7DQogICAg ICAgIH0NCiAgICB9DQogICAgZWxzZSB7DQogICAgICAgIHJldHVybiByb3ct PnJvd1tuXTsNCiAgICB9DQp9DQpzdGF0aWMgY29uc3QgY2hhciAqZGJkX215 c3FsX2Vycm9yKGFwcl9kYmRfdCAqc3FsLCBpbnQgbikNCnsNCiAgICByZXR1 cm4gbXlzcWxfZXJyb3Ioc3FsKTsNCn0NCnN0YXRpYyBpbnQgZGJkX215c3Fs X3F1ZXJ5KGFwcl9kYmRfdCAqc3FsLCBhcHJfZGJkX3RyYW5zYWN0aW9uICp0 cmFucywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqbnJvd3Ms IGNvbnN0IGNoYXIgKnF1ZXJ5KQ0Kew0KICAgIGludCByZXQ7DQogICAgaWYg KHRyYW5zICYmIHRyYW5zLT5lcnJudW0pIHsNCiAgICAgICAgcmV0dXJuIHRy YW5zLT5lcnJudW07DQogICAgfQ0KICAgIHJldCA9IG15c3FsX3F1ZXJ5KHNx bCwgcXVlcnkpOw0KICAgICpucm93cyA9IG15c3FsX2FmZmVjdGVkX3Jvd3Mo c3FsKTsNCiAgICBpZiAodHJhbnMpIHsNCiAgICAgICAgdHJhbnMtPmVycm51 bSA9IHJldDsNCiAgICB9DQogICAgcmV0dXJuIHJldDsNCn0NCnN0YXRpYyBj b25zdCBjaGFyICpkYmRfbXlzcWxfZXNjYXBlKGFwcl9wb29sX3QgKnBvb2ws IGNvbnN0IGNoYXIgKmFyZywNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGFwcl9kYmRfdCAqc3FsKQ0Kew0KICAgIHVuc2lnbmVkIGxv bmcgbGVuID0gc3RybGVuKGFyZyk7DQogICAgY2hhciAqcmV0ID0gYXByX3Bh bGxvYyhwb29sLCAyKmxlbiArIDEpOw0KICAgIG15c3FsX3JlYWxfZXNjYXBl X3N0cmluZyhzcWwsIHJldCwgYXJnLCBsZW4pOw0KICAgIHJldHVybiByZXQ7 DQp9DQpzdGF0aWMgaW50IGRiZF9teXNxbF9wcmVwYXJlKGFwcl9wb29sX3Qg KnBvb2wsIGFwcl9kYmRfdCAqc3FsLA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBjaGFyICpxdWVyeSwgY29uc3QgY2hhciAqbGFiZWws DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9kYmRfcHJlcGFy ZWQgKipzdGF0ZW1lbnQpDQp7DQogICAgKnN0YXRlbWVudCA9IG15c3FsX3N0 bXRfaW5pdChzcWwpOw0KICAgIGFwcl9wb29sX2NsZWFudXBfcmVnaXN0ZXIo cG9vbCwgKnN0YXRlbWVudCwgKHZvaWQqKW15c3FsX3N0bXRfY2xvc2UsDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF9jbGVhbnVw X251bGwpOw0KICAgIHJldHVybiBteXNxbF9zdG10X3ByZXBhcmUoKnN0YXRl bWVudCwgcXVlcnksIHN0cmxlbihxdWVyeSkpOw0KfQ0Kc3RhdGljIGludCBk YmRfbXlzcWxfcHF1ZXJ5KGFwcl9wb29sX3QgKnBvb2wsIGFwcl9kYmRfdCAq c3FsLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9kYmRfdHJh bnNhY3Rpb24gKnRyYW5zLCBpbnQgKm5yb3dzLA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGFwcl9kYmRfcHJlcGFyZWQgKnN0YXRlbWVudCwgLi4u KQ0Kew0KICAgIE1ZU1FMX0JJTkQgKmJpbmQ7DQogICAgY2hhciAqYXJnOw0K ICAgIGludCByZXQ7DQogICAgaW50IG5hcmdzID0gMDsNCiAgICBpbnQgaTsN CiAgICB2YV9saXN0IGFyZ3M7DQogICAgbXlfYm9vbCBpc19udWxsID0gRkFM U0U7DQoNCiAgICBpZiAodHJhbnMgJiYgdHJhbnMtPmVycm51bSkgew0KICAg ICAgICByZXR1cm4gdHJhbnMtPmVycm51bTsNCiAgICB9DQogICAgbmFyZ3Mg PSBteXNxbF9zdG10X3BhcmFtX2NvdW50KHN0YXRlbWVudCk7DQoNCiAgICBi aW5kID0gYXByX3BhbGxvYyhwb29sLCBuYXJncypzaXplb2YoTVlTUUxfQklO RCkpOw0KICAgIHZhX3N0YXJ0KGFyZ3MsIHN0YXRlbWVudCk7DQogICAgZm9y IChpPTA7IGkgPCBuYXJnczsgKytpKSB7DQogICAgICAgIGFyZyA9IHZhX2Fy ZyhhcmdzLCBjaGFyKik7DQogICAgICAgIGJpbmRbaV0uYnVmZmVyX3R5cGUg PSBNWVNRTF9UWVBFX1NUUklORzsNCiAgICAgICAgYmluZFtpXS5idWZmZXIg PSBhcmc7DQogICAgICAgIGJpbmRbaV0uYnVmZmVyX2xlbmd0aCA9IHN0cmxl bihhcmcpOw0KICAgICAgICBiaW5kW2ldLmxlbmd0aCA9ICZiaW5kW2ldLmJ1 ZmZlcl9sZW5ndGg7DQogICAgICAgIGJpbmRbaV0uaXNfbnVsbCA9ICZpc19u dWxsOw0KICAgICAgICBiaW5kW2ldLmlzX3Vuc2lnbmVkID0gMDsNCiAgICB9 DQogICAgdmFfZW5kKGFyZ3MpOw0KDQogICAgcmV0ID0gbXlzcWxfc3RtdF9i aW5kX3BhcmFtKHN0YXRlbWVudCwgYmluZCk7DQogICAgaWYgKHJldCAhPSAw KSB7DQogICAgICAgICpucm93cyA9IDA7DQogICAgfQ0KICAgIGVsc2Ugew0K ICAgICAgICByZXQgPSBteXNxbF9zdG10X2V4ZWN1dGUoc3RhdGVtZW50KTsN CiAgICAgICAgKm5yb3dzID0gbXlzcWxfc3RtdF9hZmZlY3RlZF9yb3dzKHN0 YXRlbWVudCk7DQogICAgfQ0KICAgIGlmICh0cmFucykgew0KICAgICAgICB0 cmFucy0+ZXJybnVtID0gcmV0Ow0KICAgIH0NCiAgICByZXR1cm4gcmV0Ow0K fQ0Kc3RhdGljIGludCBkYmRfbXlzcWxfcHNlbGVjdChhcHJfcG9vbF90ICpw b29sLCBhcHJfZGJkX3QgKnNxbCwNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYXByX2RiZF90cmFuc2FjdGlvbiAqdHJhbnMsIGFwcl9kYmRfcmVz dWx0cyAqKnJlcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBy X2RiZF9wcmVwYXJlZCAqc3RhdGVtZW50LCBpbnQgcmFuZG9tLCAuLi4pDQp7 DQogICAgaW50IGk7DQogICAgaW50IG5maWVsZHM7DQogICAgY2hhciAqYXJn Ow0KICAgIG15X2Jvb2wgaXNfbnVsbCA9IEZBTFNFOw0KICAgIG15X2Jvb2wg KmlzX251bGxyOw0KICAgIGludCByZXQ7DQogICAgY29uc3QgaW50IEZJRUxE U0laRSA9IDI1NTsNCiAgICB2YV9saXN0IGFyZ3M7DQogICAgdWxvbmcgKmxl bmd0aDsNCiAgICBjaGFyICoqZGF0YTsNCiAgICBpbnQgbmFyZ3M7DQogICAg TVlTUUxfQklORCAqYmluZDsNCg0KICAgIGlmICh0cmFucyAmJiB0cmFucy0+ ZXJybnVtKSB7DQogICAgICAgIHJldHVybiB0cmFucy0+ZXJybnVtOw0KICAg IH0NCg0KICAgIG5hcmdzID0gbXlzcWxfc3RtdF9wYXJhbV9jb3VudChzdGF0 ZW1lbnQpOw0KICAgIGJpbmQgPSBhcHJfcGFsbG9jKHBvb2wsIG5hcmdzKnNp emVvZihNWVNRTF9CSU5EKSk7DQoNCiAgICB2YV9zdGFydChhcmdzLCByYW5k b20pOw0KICAgIGZvciAoaT0wOyBpIDwgbmFyZ3M7ICsraSkgew0KICAgICAg ICBhcmcgPSB2YV9hcmcoYXJncywgY2hhciopOw0KICAgICAgICBiaW5kW2ld LmJ1ZmZlcl90eXBlID0gTVlTUUxfVFlQRV9TVFJJTkc7DQogICAgICAgIGJp bmRbaV0uYnVmZmVyID0gYXJnOw0KICAgICAgICBiaW5kW2ldLmJ1ZmZlcl9s ZW5ndGggPSBzdHJsZW4oYXJnKTsNCiAgICAgICAgYmluZFtpXS5sZW5ndGgg PSAmYmluZFtpXS5idWZmZXJfbGVuZ3RoOw0KICAgICAgICBiaW5kW2ldLmlz X251bGwgPSAmaXNfbnVsbDsNCiAgICAgICAgYmluZFtpXS5pc191bnNpZ25l ZCA9IDA7DQogICAgfQ0KICAgIHZhX2VuZChhcmdzKTsNCg0KICAgIHJldCA9 IG15c3FsX3N0bXRfYmluZF9wYXJhbShzdGF0ZW1lbnQsIGJpbmQpOw0KICAg IGlmIChyZXQgPT0gMCkgew0KICAgICAgICByZXQgPSBteXNxbF9zdG10X2V4 ZWN1dGUoc3RhdGVtZW50KTsNCiAgICAgICAgaWYgKCFyZXQpIHsNCiAgICAg ICAgICAgIGlmICghKnJlcykgew0KICAgICAgICAgICAgICAgICpyZXMgPSBh cHJfcGNhbGxvYyhwb29sLCBzaXplb2YoYXByX2RiZF9yZXN1bHRzKSk7DQog ICAgICAgICAgICB9DQogICAgICAgICAgICAoKnJlcyktPnJhbmRvbSA9IHJh bmRvbTsNCiAgICAgICAgICAgICgqcmVzKS0+c3RhdGVtZW50ID0gc3RhdGVt ZW50Ow0KICAgICAgICAgICAgKCpyZXMpLT5yZXMgPSBteXNxbF9zdG10X3Jl c3VsdF9tZXRhZGF0YShzdGF0ZW1lbnQpOw0KICAgICAgICAgICAgaWYgKCEq cmVzKSB7DQogICAgICAgICAgICAgICAgd2hpbGUgKCFteXNxbF9zdG10X2Zl dGNoKHN0YXRlbWVudCkpOw0KICAgICAgICAgICAgICAgIHJldHVybiAtMTsN CiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGFwcl9wb29sX2NsZWFudXBf cmVnaXN0ZXIocG9vbCwgKCpyZXMpLT5yZXMsDQogICAgICAgICAgICAgICAg KHZvaWQqKW15c3FsX2ZyZWVfcmVzdWx0LCBhcHJfcG9vbF9jbGVhbnVwX251 bGwpOw0KICAgICAgICAgICAgbmZpZWxkcyA9IG15c3FsX251bV9maWVsZHMo KCpyZXMpLT5yZXMpOw0KICAgICAgICAgICAgaWYgKCEoKnJlcyktPmJpbmQp IHsNCiAgICAgICAgICAgICAgICAoKnJlcyktPmJpbmQgPSBhcHJfcGFsbG9j KHBvb2wsIG5maWVsZHMqc2l6ZW9mKE1ZU1FMX0JJTkQpKTsNCiAgICAgICAg ICAgICAgICBsZW5ndGggPSBhcHJfcGNhbGxvYyhwb29sLCBuZmllbGRzKnNp emVvZih1bG9uZykpOw0KICAgICAgICAgICAgICAgIGRhdGEgPSBhcHJfcGFs bG9jKHBvb2wsIG5maWVsZHMqc2l6ZW9mKGNoYXIqKSk7DQogICAgICAgICAg ICAgICAgaXNfbnVsbHIgPSBhcHJfcGNhbGxvYyhwb29sLCBuZmllbGRzKnNp emVvZihteV9ib29sKSk7DQogICAgICAgICAgICAgICAgbGVuZ3RoID0gYXBy X3BjYWxsb2MocG9vbCwgbmZpZWxkcyk7DQogICAgICAgICAgICAgICAgZm9y ICggaSA9IDA7IGkgPCBuZmllbGRzOyArK2kgKSB7DQogICAgICAgICAgICAg ICAgICAgICgqcmVzKS0+YmluZFtpXS5idWZmZXJfdHlwZSA9IE1ZU1FMX1RZ UEVfU1RSSU5HOw0KICAgICAgICAgICAgICAgICAgICAoKnJlcyktPmJpbmRb aV0uYnVmZmVyX2xlbmd0aCA9IEZJRUxEU0laRTsNCiAgICAgICAgICAgICAg ICAgICAgKCpyZXMpLT5iaW5kW2ldLmxlbmd0aCA9ICZsZW5ndGhbaV07DQog ICAgICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBhcHJfcGFsbG9jKHBvb2ws IEZJRUxEU0laRSpzaXplb2YoY2hhcikpOw0KICAgICAgICAgICAgICAgICAg ICAoKnJlcyktPmJpbmRbaV0uYnVmZmVyID0gZGF0YVtpXTsNCiAgICAgICAg ICAgICAgICAgICAgKCpyZXMpLT5iaW5kW2ldLmlzX251bGwgPSBpc19udWxs citpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAg ICAgICAgIHJldCA9IG15c3FsX3N0bXRfYmluZF9yZXN1bHQoc3RhdGVtZW50 LCAoKnJlcyktPmJpbmQpOw0KICAgICAgICAgICAgaWYgKCFyZXQpIHsNCiAg ICAgICAgICAgICAgICByZXQgPSBteXNxbF9zdG10X3N0b3JlX3Jlc3VsdChz dGF0ZW1lbnQpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0K ICAgIGlmICh0cmFucykgew0KICAgICAgICB0cmFucy0+ZXJybnVtID0gcmV0 Ow0KICAgIH0NCiAgICByZXR1cm4gcmV0Ow0KfQ0KLyogVHJhbnNhY3Rpb25z IGRvbid0IHdvcmsgaGVyZSAocm9sbGJhY2sgc3RhdGVtZW50IHJlcG9ydHMg c3VjY2Vzcw0KICogYnV0IHJvbGxiYWNrIGRvZXNuJ3QgaGFwcGVuKS4gIFRy aWVkIHNldmVyYWwgdmFyaWFudHMgIGJhc2VkIG9uDQogKiBTUUwgc3RhdGVt ZW50cyB0b28uICBJIGV4cGVjdCBpdCdzIGRvd24gdG8gbXlzcWwgaW50ZXJu YWxzLg0KICovDQpzdGF0aWMgaW50IGRiZF9teXNxbF90cmFuc2FjdGlvbihh cHJfcG9vbF90ICpwb29sLCBhcHJfZGJkX3QgKmhhbmRsZSwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9kYmRfdHJhbnNhY3Rpb24g Kip0cmFucykNCnsNCiAgICBpZiAoISp0cmFucykgew0KICAgICAgICAqdHJh bnMgPSBhcHJfcGNhbGxvYyhwb29sLCBzaXplb2YoYXByX2RiZF90cmFuc2Fj dGlvbikpOw0KICAgIH0NCiAgICAoKnRyYW5zKS0+ZXJybnVtID0gbXlzcWxf YXV0b2NvbW1pdChoYW5kbGUsIDApOw0KICAgIHJldHVybiAoKnRyYW5zKS0+ ZXJybnVtOw0KfQ0Kc3RhdGljIGludCBkYmRfbXlzcWxfZW5kX3RyYW5zYWN0 aW9uKGFwcl9kYmRfdCAqaGFuZGxlLA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGFwcl9kYmRfdHJhbnNhY3Rpb24gKnRyYW5zKQ0K ew0KICAgIGludCByZXQgPSAtMTsNCiAgICBpZiAodHJhbnMpIHsNCiAgICAg ICAgaWYgKHRyYW5zLT5lcnJudW0pIHsNCiAgICAgICAgICAgIHRyYW5zLT5l cnJudW0gPSAwOw0KICAgICAgICAgICAgcmV0ID0gbXlzcWxfcm9sbGJhY2so aGFuZGxlKTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIHsNCiAgICAgICAg ICAgIHJldCA9IG15c3FsX2NvbW1pdChoYW5kbGUpOw0KICAgICAgICB9DQog ICAgfQ0KICAgIHJldCB8PSBteXNxbF9hdXRvY29tbWl0KGhhbmRsZSwgMSk7 DQogICAgcmV0dXJuIHJldDsNCn0NCnN0YXRpYyBhcHJfZGJkX3QgKmRiZF9t eXNxbF9vcGVuKGFwcl9wb29sX3QgKnBvb2wsIGNvbnN0IGNoYXIgKnBhcmFt cykNCnsNCiAgICBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgZGVsaW1zID0g IiBcclxuXHQ7fCwiOw0KICAgIGNvbnN0IGNoYXIgKnB0cjsNCiAgICBpbnQg aTsNCiAgICBjb25zdCBjaGFyICprZXk7DQogICAgc2l6ZV90IGtsZW47DQog ICAgY29uc3QgY2hhciAqdmFsdWU7DQogICAgc2l6ZV90IHZsZW47DQogICAg c3RydWN0IHsNCiAgICAgICAgY29uc3QgY2hhciAqZmllbGQ7DQogICAgICAg IGNvbnN0IGNoYXIgKnZhbHVlOw0KICAgIH0gZmllbGRzW10gPSB7DQogICAg ICAgIHsiaG9zdCIsIE5VTEx9LA0KICAgICAgICB7InVzZXIiLCBOVUxMfSwN CiAgICAgICAgeyJwYXNzIiwgTlVMTH0sDQogICAgICAgIHsiZGJuYW1lIiwg TlVMTH0sDQogICAgICAgIHsicG9ydCIsIE5VTEx9LA0KICAgICAgICB7InNv Y2siLCBOVUxMfSwNCiAgICAgICAge05VTEwsIE5VTEx9DQogICAgfTsNCiAg ICB1bnNpZ25lZCBpbnQgcG9ydCA9IDA7DQogICAgTVlTUUwgKnNxbCA9IE5V TEw7DQogICAgc3FsID0gbXlzcWxfaW5pdChzcWwpOw0KICAgIGlmICggc3Fs ID09IE5VTEwgKSB7DQogICAgICAgIHJldHVybiBOVUxMOw0KICAgIH0NCiAg ICBmb3IgKHB0ciA9IHN0cmNocihwYXJhbXMsICc9Jyk7IHB0cjsgcHRyID0g c3RyY2hyKHB0ciwgJz0nKSkgew0KICAgICAgICBmb3IgKGtleSA9IHB0ci0x OyBpc3NwYWNlKCprZXkpOyAtLWtleSk7DQogICAgICAgIGtsZW4gPSAwOw0K ICAgICAgICB3aGlsZSAoaXNhbHBoYSgqa2V5KSkgew0KICAgICAgICAgICAg LS1rZXk7DQogICAgICAgICAgICArK2tsZW47DQogICAgICAgIH0NCiAgICAg ICAgKytrZXk7DQogICAgICAgIGZvciAodmFsdWUgPSBwdHIrMTsgaXNzcGFj ZSgqdmFsdWUpOyArK3ZhbHVlKTsNCiAgICAgICAgdmxlbiA9IHN0cmNzcG4o dmFsdWUsIGRlbGltcyk7DQogICAgICAgIGZvciAoaT0wOyBmaWVsZHNbaV0u ZmllbGQgIT0gTlVMTDsgKytpKSB7DQogICAgICAgICAgICBpZiAoIXN0cm5j YXNlY21wKGZpZWxkc1tpXS5maWVsZCwga2V5LCBrbGVuKSkgew0KICAgICAg ICAgICAgICAgIGZpZWxkc1tpXS52YWx1ZSA9IGFwcl9wc3RybmR1cChwb29s LCB2YWx1ZSwgdmxlbik7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAg ICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcHRyID0gdmFsdWUrdmxl bjsNCiAgICB9DQogICAgaWYgKGZpZWxkc1s0XS52YWx1ZSAhPSBOVUxMKSB7 DQogICAgICAgIHBvcnQgPSBhdG9pKGZpZWxkc1s0XS52YWx1ZSk7DQogICAg fQ0KICAgIHNxbCA9IG15c3FsX3JlYWxfY29ubmVjdChzcWwsIGZpZWxkc1sw XS52YWx1ZSwgZmllbGRzWzFdLnZhbHVlLA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBmaWVsZHNbMl0udmFsdWUsIGZpZWxkc1szXS52YWx1ZSwN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydCwgZmllbGRzWzVd LnZhbHVlLCAwKTsNCiAgICByZXR1cm4gc3FsOw0KfQ0Kc3RhdGljIGFwcl9z dGF0dXNfdCBkYmRfbXlzcWxfY2xvc2Uodm9pZCAqaGFuZGxlKQ0Kew0KICAg IG15c3FsX2Nsb3NlKGhhbmRsZSk7DQogICAgcmV0dXJuIEFQUl9TVUNDRVNT Ow0KfQ0Kc3RhdGljIGFwcl9zdGF0dXNfdCBkYmRfbXlzcWxfY2hlY2tfY29u bihhcHJfcG9vbF90ICpwb29sLA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBhcHJfZGJkX3QgKmhhbmRsZSkNCnsNCiAgICBy ZXR1cm4gbXlzcWxfcGluZyhoYW5kbGUpID8gQVBSX0VHRU5FUkFMIDogQVBS X1NVQ0NFU1M7DQp9DQpzdGF0aWMgaW50IGRiZF9teXNxbF9zZWxlY3RfZGIo YXByX3Bvb2xfdCAqcG9vbCwgYXByX2RiZF90KiBoYW5kbGUsDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZSkNCnsN CiAgICByZXR1cm4gbXlzcWxfc2VsZWN0X2RiKGhhbmRsZSwgbmFtZSk7DQp9 DQpzdGF0aWMgdm9pZCAqZGJkX215c3FsX25hdGl2ZShhcHJfZGJkX3QgKmhh bmRsZSkNCnsNCiAgICByZXR1cm4gaGFuZGxlOw0KfQ0Kc3RhdGljIGludCBk YmRfbXlzcWxfbnVtX2NvbHMoYXByX2RiZF9yZXN1bHRzICpyZXMpDQp7DQog ICAgaWYgKHJlcy0+c3RhdGVtZW50KSB7DQogICAgICAgIHJldHVybiBteXNx bF9zdG10X2ZpZWxkX2NvdW50KHJlcy0+c3RhdGVtZW50KTsNCiAgICB9DQog ICAgZWxzZSB7DQogICAgICAgIHJldHVybiBteXNxbF9udW1fZmllbGRzKHJl cy0+cmVzKTsNCiAgICB9DQp9DQpzdGF0aWMgaW50IGRiZF9teXNxbF9udW1f dHVwbGVzKGFwcl9kYmRfcmVzdWx0cyAqcmVzKQ0Kew0KICAgIGlmIChyZXMt PnJhbmRvbSkgew0KICAgICAgICBpZiAocmVzLT5zdGF0ZW1lbnQpIHsNCiAg ICAgICAgICAgIHJldHVybiAoaW50KSBteXNxbF9zdG10X251bV9yb3dzKHJl cy0+c3RhdGVtZW50KTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIHsNCiAg ICAgICAgICAgIHJldHVybiAoaW50KSBteXNxbF9udW1fcm93cyhyZXMtPnJl cyk7DQogICAgICAgIH0NCiAgICB9DQogICAgZWxzZSB7DQogICAgICAgIHJl dHVybiAtMTsNCiAgICB9DQp9DQpBUFVfREVDTEFSRV9EQVRBIGNvbnN0IGFw cl9kYmRfZHJpdmVyX3QgYXByX2RiZF9teXNxbF9kcml2ZXIgPSB7DQogICAg Im15c3FsIiwNCiAgICBkYmRfbXlzcWxfbmF0aXZlLA0KICAgIGRiZF9teXNx bF9vcGVuLA0KICAgIGRiZF9teXNxbF9jaGVja19jb25uLA0KICAgIGRiZF9t eXNxbF9jbG9zZSwNCiAgICBkYmRfbXlzcWxfc2VsZWN0X2RiLA0KICAgIGRi ZF9teXNxbF90cmFuc2FjdGlvbiwNCiAgICBkYmRfbXlzcWxfZW5kX3RyYW5z YWN0aW9uLA0KICAgIGRiZF9teXNxbF9xdWVyeSwNCiAgICBkYmRfbXlzcWxf c2VsZWN0LA0KICAgIGRiZF9teXNxbF9udW1fY29scywNCiAgICBkYmRfbXlz cWxfbnVtX3R1cGxlcywNCiAgICBkYmRfbXlzcWxfZ2V0X3JvdywNCiAgICBk YmRfbXlzcWxfZ2V0X2VudHJ5LA0KICAgIGRiZF9teXNxbF9lcnJvciwNCiAg ICBkYmRfbXlzcWxfZXNjYXBlLA0KICAgIGRiZF9teXNxbF9wcmVwYXJlLA0K ICAgIGRiZF9teXNxbF9wcXVlcnksDQogICAgZGJkX215c3FsX3BzZWxlY3Qs DQp9Ow0KDQojZW5kaWYNCg== ---1463810294-1892063039-1102595640=:6831 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="apr_dbd_pgsql.c" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="apr_dbd_pgsql.c" LyogICAgICBDb3B5cmlnaHQgKGMpIDIwMDQsIE5pY2sgS2V3LiAgQWxsIHJp Z2h0cyByZXNlcnZlZC4NCg0KICAgICAgICBJZiB0aGlzIGlzIGFjY2VwdGVk IGJ5IEFTRiBmb3IgaW5jbHVzaW9uIGluIEFQUi1VVElMLA0KICAgICAgICBJ IHdpbGwgYXNzaWduIGNvcHlyaWdodCB0byBBU0YgYW5kIGxpY2Vuc2UgdW5k ZXIgQVNGIHRlcm1zLg0KDQogICAgICAgIE90aGVyd2lzZSBJIHdpbGwgcmV0 YWluIGNvcHlyaWdodCBhbmQgbGljZW5zZSB1bmRlcg0KICAgICAgICB0ZXJt cyBvZiBteSBjaG9pY2UuDQoqLw0KDQojaWYgQVBVX0hBVkVfUEdTUUwNCg0K I2luY2x1ZGUgPGN0eXBlLmg+DQojaW5jbHVkZSA8c3RkbGliLmg+DQoNCiNp bmNsdWRlIDxsaWJwcS1mZS5oPg0KDQojaW5jbHVkZSAiYXByX3N0cmluZ3Mu aCINCg0KI2RlZmluZSBRVUVSWV9NQVhfQVJHUyA0MA0KDQp0eXBlZGVmIFBH Y29ubiBhcHJfZGJkX3Q7DQp0eXBlZGVmIHN0cnVjdCB7DQogICAgaW50IGVy cm51bTsNCn0gYXByX2RiZF90cmFuc2FjdGlvbjsNCg0KdHlwZWRlZiBzdHJ1 Y3Qgew0KICAgIGludCByYW5kb207DQogICAgUEdjb25uICpoYW5kbGU7DQog ICAgUEdyZXN1bHQgKnJlczsNCiAgICBzaXplX3QgbnR1cGxlczsNCiAgICBz aXplX3Qgc3o7DQogICAgc2l6ZV90IGluZGV4Ow0KfSBhcHJfZGJkX3Jlc3Vs dHM7DQp0eXBlZGVmIHN0cnVjdCB7DQogICAgaW50IG47DQogICAgYXByX2Ri ZF9yZXN1bHRzICpyZXM7DQp9IGFwcl9kYmRfcm93Ow0KdHlwZWRlZiBzdHJ1 Y3QgYXByX2RiZF9wcmVwYXJlZCB7DQogICAgY29uc3QgY2hhciAqbmFtZTsN CiAgICBpbnQgcHJlcGFyZWQ7DQp9IGFwcl9kYmRfcHJlcGFyZWQ7DQoNCiNk ZWZpbmUgZGJkX3Bnc3FsX2lzX3N1Y2Nlc3MoeCkgKCgoeCk9PVBHUkVTX0VN UFRZX1FVRVJZKXx8KCh4KT09UEdSRVNfQ09NTUFORF9PSyl8fCgoeCk9PVBH UkVTX1RVUExFU19PSykpDQoNCiNkZWZpbmUgQVBSX0RCRF9JTlRFUk5BTA0K I2luY2x1ZGUgImFwcl9kYmQuaCINCg0Kc3RhdGljIGludCBkYmRfcGdzcWxf c2VsZWN0KGFwcl9wb29sX3QgKnBvb2wsIGFwcl9kYmRfdCAqc3FsLA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9kYmRfdHJhbnNhY3Rpb24g KnRyYW5zLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9kYmRf cmVzdWx0cyAqKnJlc3VsdHMsDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgY2hhciAqcXVlcnksIGludCBzZWVrKSB7DQogICAgUEdyZXN1 bHQgKnJlczsNCiAgICBpbnQgcmV0Ow0KICAgIGlmICggdHJhbnMgJiYgdHJh bnMtPmVycm51bSApIHsNCiAgICAgICAgcmV0dXJuIHRyYW5zLT5lcnJudW07 DQogICAgfQ0KICAgIGlmIChzZWVrKSB7IC8qIHN5bmNocm9ub3VzIHF1ZXJ5 ICovDQogICAgICAgIHJlcyA9IFBRZXhlYyhzcWwsIHF1ZXJ5KTsNCiAgICAg ICAgaWYgKHJlcykgew0KICAgICAgICAgICAgcmV0ID0gUFFyZXN1bHRTdGF0 dXMocmVzKTsNCiAgICAgICAgICAgIGlmIChkYmRfcGdzcWxfaXNfc3VjY2Vz cyhyZXQpKSB7DQogICAgICAgICAgICAgICAgcmV0ID0gMDsNCiAgICAgICAg ICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgUFFjbGVhcihyZXMpOw0K ICAgICAgICAgICAgfQ0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAg cmV0ID0gUEdSRVNfRkFUQUxfRVJST1I7DQogICAgICAgIH0NCiAgICAgICAg aWYgKHJldCAhPSAwKSB7DQogICAgICAgICAgICBpZiAodHJhbnMpIHsNCiAg ICAgICAgICAgICAgICB0cmFucy0+ZXJybnVtID0gcmV0Ow0KICAgICAgICAg ICAgfQ0KICAgICAgICAgICAgcmV0dXJuIHJldDsNCiAgICAgICAgfQ0KICAg ICAgICBpZiAoISpyZXN1bHRzKSB7DQogICAgICAgICAgICAqcmVzdWx0cyA9 IGFwcl9wY2FsbG9jKHBvb2wsIHNpemVvZihhcHJfZGJkX3Jlc3VsdHMpKTsN CiAgICAgICAgfQ0KICAgICAgICAoKnJlc3VsdHMpLT5yZXMgPSByZXM7DQog ICAgICAgICgqcmVzdWx0cyktPm50dXBsZXMgPSBQUW50dXBsZXMocmVzKTsN CiAgICAgICAgKCpyZXN1bHRzKS0+c3ogPSBQUW5maWVsZHMocmVzKTsNCiAg ICAgICAgKCpyZXN1bHRzKS0+cmFuZG9tID0gc2VlazsNCiAgICAgICAgYXBy X3Bvb2xfY2xlYW51cF9yZWdpc3Rlcihwb29sLCByZXMsICh2b2lkKilQUWNs ZWFyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9w b29sX2NsZWFudXBfbnVsbCk7DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAg ICBpZiAoUFFzZW5kUXVlcnkoc3FsLCBxdWVyeSkgPT0gMCkgew0KICAgICAg ICAgICAgaWYgKHRyYW5zKSB7DQogICAgICAgICAgICAgICAgdHJhbnMtPmVy cm51bSA9IDE7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4g MTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoICEqcmVzdWx0cyApIHsNCiAg ICAgICAgICAgICpyZXN1bHRzID0gYXByX3BjYWxsb2MocG9vbCwgc2l6ZW9m KGFwcl9kYmRfcmVzdWx0cykpOw0KICAgICAgICB9DQogICAgICAgICgqcmVz dWx0cyktPnJhbmRvbSA9IHNlZWs7DQogICAgICAgICgqcmVzdWx0cyktPmhh bmRsZSA9IHNxbDsNCiAgICB9DQogICAgcmV0dXJuIDA7DQp9DQpzdGF0aWMg aW50IGRiZF9wZ3NxbF9nZXRfcm93KGFwcl9wb29sX3QgKnBvb2wsIGFwcl9k YmRfcmVzdWx0cyAqcmVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBhcHJfZGJkX3JvdyAqKnJvd3AsIGludCByb3dudW0pDQp7DQogICAgYXBy X2RiZF9yb3cgKnJvdyA9ICpyb3dwOw0KICAgIGludCBzZXF1ZW50aWFsID0g KChyb3dudW0gPj0gMCkgJiYgcmVzLT5yYW5kb20pID8gMCA6IDE7DQoNCiAg ICBpZiAoICFyb3cgKSB7DQogICAgICAgIHJvdyA9IGFwcl9wYWxsb2MocG9v bCwgc2l6ZW9mKGFwcl9kYmRfcm93KSk7DQogICAgICAgICpyb3dwID0gcm93 Ow0KICAgICAgICByb3ctPnJlcyA9IHJlczsNCiAgICAgICAgcm93LT5uID0g c2VxdWVudGlhbCA/IDAgOiByb3dudW07DQogICAgfQ0KICAgIGVsc2Ugew0K ICAgICAgICBpZiAoIHNlcXVlbnRpYWwgKSB7DQogICAgICAgICAgICArK3Jv dy0+bjsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICAg IHJvdy0+biA9IHJvd251bTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIGlm ICggcmVzLT5yYW5kb20gKSB7DQogICAgICAgIGlmICggcm93LT5uID49IHJl cy0+bnR1cGxlcyApIHsNCiAgICAgICAgICAgICpyb3dwID0gTlVMTDsNCiAg ICAgICAgICAgIGFwcl9wb29sX2NsZWFudXBfa2lsbChwb29sLCByZXMtPnJl cywgKHZvaWQqKVBRY2xlYXIpOw0KICAgICAgICAgICAgUFFjbGVhcihyZXMt PnJlcyk7DQogICAgICAgICAgICByZXMtPnJlcyA9IE5VTEw7DQogICAgICAg ICAgICByZXR1cm4gLTE7DQogICAgICAgIH0NCiAgICB9DQogICAgZWxzZSB7 DQogICAgICAgIGlmIChyb3ctPm4gPj0gcmVzLT5udHVwbGVzKSB7DQogICAg ICAgICAgICAvKiBubyBkYXRhOyB3ZSBoYXZlIHRvIGZldGNoIHNvbWUgKi8N CiAgICAgICAgICAgIHJvdy0+biAtPSByZXMtPm50dXBsZXM7DQogICAgICAg ICAgICBpZiAocmVzLT5yZXMgIT0gTlVMTCkgew0KICAgICAgICAgICAgICAg IFBRY2xlYXIocmVzLT5yZXMpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAg ICAgcmVzLT5yZXMgPSBQUWdldFJlc3VsdChyZXMtPmhhbmRsZSk7DQogICAg ICAgICAgICBpZiAocmVzLT5yZXMpIHsNCiAgICAgICAgICAgICAgICByZXMt Pm50dXBsZXMgPSBQUW50dXBsZXMocmVzLT5yZXMpOw0KICAgICAgICAgICAg ICAgIHdoaWxlIChyZXMtPm50dXBsZXMgPT0gMCkgew0KICAgICAgICAgICAg ICAgICAgLyogaWYgd2UgZ290IGFuIGVtcHR5IHJlc3VsdCwgY2xlYXIgaXQs IHdhaXQgYSBtbywgdHJ5IGFnYWluICovDQogICAgICAgICAgICAgICAgICAg IFBRY2xlYXIocmVzLT5yZXMpOw0KICAgICAgICAgICAgICAgICAgICBhcHJf c2xlZXAoMTAwMDAwKTsgICAgICAgIC8qIDAuMSBzZWNzICovDQogICAgICAg ICAgICAgICAgICAgIHJlcy0+cmVzID0gUFFnZXRSZXN1bHQocmVzLT5oYW5k bGUpOw0KICAgICAgICAgICAgICAgICAgICBpZiAocmVzLT5yZXMpIHsNCiAg ICAgICAgICAgICAgICAgICAgICAgIHJlcy0+bnR1cGxlcyA9IFBRbnR1cGxl cyhyZXMtPnJlcyk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg ICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gLTE7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg ICAgICB9DQogICAgICAgICAgICAgICAgaWYgKHJlcy0+c3ogPT0gMCkgew0K ICAgICAgICAgICAgICAgICAgICByZXMtPnN6ID0gUFFuZmllbGRzKHJlcy0+ cmVzKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAg ICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQog ICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQogICAgcmV0dXJuIDA7 DQp9DQpzdGF0aWMgY29uc3QgY2hhciAqZGJkX3Bnc3FsX2dldF9lbnRyeShj b25zdCBhcHJfZGJkX3JvdyAqcm93LCBpbnQgbikNCnsNCiAgICByZXR1cm4g UFFnZXR2YWx1ZShyb3ctPnJlcy0+cmVzLCByb3ctPm4sIG4pOw0KfQ0Kc3Rh dGljIGNvbnN0IGNoYXIgKmRiZF9wZ3NxbF9lcnJvcihhcHJfZGJkX3QgKnNx bCwgaW50IG4pDQp7DQogICAgcmV0dXJuIFBRZXJyb3JNZXNzYWdlKHNxbCk7 DQp9DQpzdGF0aWMgaW50IGRiZF9wZ3NxbF9xdWVyeShhcHJfZGJkX3QgKnNx bCwgYXByX2RiZF90cmFuc2FjdGlvbiAqdHJhbnMsDQogICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgKm5yb3dzLCBjb25zdCBjaGFyICpxdWVyeSkN CnsNCiAgICBQR3Jlc3VsdCAqcmVzOw0KICAgIGludCByZXQ7DQogICAgaWYg KHRyYW5zICYmIHRyYW5zLT5lcnJudW0pIHsNCiAgICAgICAgcmV0dXJuIHRy YW5zLT5lcnJudW07DQogICAgfQ0KICAgIHJlcyA9IFBRZXhlYyhzcWwsIHF1 ZXJ5KTsNCiAgICBpZiAocmVzKSB7DQogICAgICAgIHJldCA9IFBRcmVzdWx0 U3RhdHVzKHJlcyk7DQogICAgICAgIGlmIChkYmRfcGdzcWxfaXNfc3VjY2Vz cyhyZXQpKSB7DQogICAgICAgICAgICAvKiB1Z2gsIG1ha2luZyAwIHJldHVy bi1zdWNjZXNzIGRvZXNuJ3QgZml0ICovDQogICAgICAgICAgICByZXQgPSAw Ow0KICAgICAgICB9DQogICAgICAgICpucm93cyA9IGF0b2koUFFjbWRUdXBs ZXMocmVzKSk7DQogICAgICAgIFBRY2xlYXIocmVzKTsNCiAgICB9DQogICAg ZWxzZSB7DQogICAgICAgIHJldCA9IFBHUkVTX0ZBVEFMX0VSUk9SOw0KICAg IH0NCiAgICBpZiAodHJhbnMpIHsNCiAgICAgICAgdHJhbnMtPmVycm51bSA9 IHJldDsNCiAgICB9DQogICAgcmV0dXJuIHJldDsNCn0NCnN0YXRpYyBjb25z dCBjaGFyICpkYmRfcGdzcWxfZXNjYXBlKGFwcl9wb29sX3QgKnBvb2wsIGNv bnN0IGNoYXIgKmFyZywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGFwcl9kYmRfdCAqc3FsKQ0Kew0KICAgIHNpemVfdCBsZW4gPSBz dHJsZW4oYXJnKTsNCiAgICBjaGFyICpyZXQgPSBhcHJfcGFsbG9jKHBvb2ws IGxlbiArIDEpOw0KICAgIFBRZXNjYXBlU3RyaW5nKHJldCwgYXJnLCBsZW4p Ow0KICAgIHJldHVybiByZXQ7DQp9DQpzdGF0aWMgaW50IGRiZF9wZ3NxbF9w cmVwYXJlKGFwcl9wb29sX3QgKnBvb2wsIGFwcl9kYmRfdCAqc3FsLA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpxdWVyeSwg Y29uc3QgY2hhciAqbGFiZWwsDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGFwcl9kYmRfcHJlcGFyZWQgKipzdGF0ZW1lbnQpDQp7DQogICAgY2hh ciAqc3FsY21kOw0KICAgIGNoYXIgKnNxbHB0cjsNCiAgICBzaXplX3QgbGVu Z3RoOw0KICAgIHNpemVfdCBpOw0KICAgIGNvbnN0IGNoYXIgKmFyZ3NbUVVF UllfTUFYX0FSR1NdOw0KICAgIHNpemVfdCBhbGVuW1FVRVJZX01BWF9BUkdT XTsNCiAgICBjb25zdCBjaGFyICplOw0KICAgIGNvbnN0IGNoYXIgKnE7DQog ICAgaW50IG5hcmdzID0gMDsNCiAgICBpbnQgcmV0Ow0KICAgIFBHcmVzdWx0 ICpyZXM7DQogICAgaWYgKCEqc3RhdGVtZW50KSB7DQogICAgICAgICpzdGF0 ZW1lbnQgPSBhcHJfcGFsbG9jKHBvb2wsIHNpemVvZihhcHJfZGJkX3ByZXBh cmVkKSk7DQogICAgfQ0KICAgIGlmICghbGFiZWwpIHsNCiAgICAgICAgLyog ZG9uJ3QgcmVhbGx5IHByZXBhcmU7IHVzZSBpbiBleGVjUGFyYW1zIGluc3Rl YWQgKi8NCiAgICAgICAgKCpzdGF0ZW1lbnQpLT5wcmVwYXJlZCA9IDA7DQog ICAgICAgICgqc3RhdGVtZW50KS0+bmFtZSA9IGFwcl9wc3RyZHVwKHBvb2ws IHF1ZXJ5KTsNCiAgICAgICAgcmV0dXJuIDA7DQogICAgfQ0KICAgICgqc3Rh dGVtZW50KS0+bmFtZSA9IGFwcl9wc3RyZHVwKHBvb2wsIGxhYmVsKTsNCg0K ICAgIGZvciAoIHEgPSBzdHJjaHIocXVlcnksICckJyk7IHE7IHEgPSBzdHJj aHIoZSwgJyQnKSApIHsNCiAgICAgICAgaWYgKChxICE9IHF1ZXJ5KSAmJiAo cVstMV0gPT0gJ1xcJykpIHsNCiAgICAgICAgICAgIGUgPSBxICsgMTsNCiAg ICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICB9DQogICAgICAgIGUgPSBz dHJjaHIocSwgJzsnKTsNCiAgICAgICAgaWYgKCFlKSB7DQogICAgICAgICAg ICBicmVhazsNCiAgICAgICAgfQ0KICAgICAgICBpZiAobmFyZ3MgPj0gUVVF UllfTUFYX0FSR1MpIHsNCiAgICAgICAgICAgIHJldHVybiAtMTsNCiAgICAg ICAgfQ0KICAgICAgICBhcmdzW25hcmdzXSA9IHEgKyAxOw0KICAgICAgICBh bGVuW25hcmdzXSA9IGUgLSAocSsxKTsNCiAgICAgICAgKytuYXJnczsNCiAg ICB9DQogICAgbGVuZ3RoID0gOCArIHN0cmxlbihsYWJlbCkgKyAxICsgMiAr ICgyKm5hcmdzKSArIDQgKyBzdHJsZW4ocXVlcnkpICsgMTsNCiAgICBzcWxj bWQgPSBhcHJfcGFsbG9jKHBvb2wsIGxlbmd0aCk7DQogICAgc3FscHRyID0g c3FsY21kOw0KICAgIG1lbWNweShzcWxwdHIsICJQUkVQQVJFICIsIDgpOw0K ICAgIHNxbHB0ciArPSA4Ow0KICAgIGxlbmd0aCA9IHN0cmxlbihsYWJlbCk7 DQogICAgbWVtY3B5KHNxbHB0ciwgbGFiZWwsIGxlbmd0aCk7DQogICAgc3Fs cHRyICs9IGxlbmd0aDsNCiAgICBpZiAobmFyZ3MgPiAwKSB7DQogICAgICAg IG1lbWNweShzcWxwdHIsICIgKCIsMik7DQogICAgICAgIHNxbHB0ciArPSAy Ow0KICAgICAgICBmb3IgKGk9MDsgaTxuYXJnczsgKytpKSB7DQogICAgICAg ICAgICBtZW1jcHkoc3FscHRyLCBhcmdzW2ldLCBhbGVuW2ldKTsNCiAgICAg ICAgICAgIHNxbHB0ciArPSBhbGVuW2ldOw0KICAgICAgICAgICAgKnNxbHB0 cisrID0gJywnOw0KICAgICAgICB9DQogICAgICAgIHNxbHB0clstMV0gPSAg JyknOw0KICAgIH0NCiAgICBtZW1jcHkoc3FscHRyLCAiIEFTICIsIDQpOw0K ICAgIHNxbHB0ciArPSA0Ow0KICAgIGkgPSAwOw0KICAgIGZvciAocSA9IHF1 ZXJ5OyAqcTsgKytxKSB7DQogICAgICAgIHN3aXRjaCAoKnEpIHsNCiAgICAg ICAgY2FzZSAnXFwnOg0KICAgICAgICAgICAgKnNxbHB0cisrID0gKisrcTsN CiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlICckJzoNCiAgICAg ICAgICAgICpzcWxwdHIrKyA9ICpxKys7DQogICAgICAgICAgICB3aGlsZSAo KnEgIT0gJzsnKSB7DQogICAgICAgICAgICAgICAgKytxOw0KICAgICAgICAg ICAgfQ0KICAgICAgICAgICAgc3FscHRyICs9IHNwcmludGYoc3FscHRyLCAi JWQiLCArK2kpOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIGRlZmF1 bHQ6DQogICAgICAgICAgICAqc3FscHRyKysgPSAqcTsNCiAgICAgICAgICAg IGJyZWFrOw0KICAgICAgICB9DQogICAgfQ0KICAgICpzcWxwdHIgPSAwOw0K DQogICAgcmVzID0gUFFleGVjKHNxbCwgc3FsY21kKTsNCiAgICBpZiAoIHJl cyApIHsNCiAgICAgICAgcmV0ID0gUFFyZXN1bHRTdGF0dXMocmVzKTsNCiAg ICAgICAgaWYgKGRiZF9wZ3NxbF9pc19zdWNjZXNzKHJldCkpIHsNCiAgICAg ICAgICAgIHJldCA9IDA7DQogICAgICAgIH0NCiAgICAgICAgLyogSG1tbSwg ZG8gd2UgZG8gdGhpcyBoZXJlIG9yIHJlZ2lzdGVyIGl0IG9uIHRoZSBwb29s PyAqLw0KICAgICAgICBQUWNsZWFyKHJlcyk7DQogICAgfQ0KICAgIGVsc2Ug ew0KICAgICAgICByZXQgPSBQR1JFU19GQVRBTF9FUlJPUjsNCiAgICB9DQog ICAgKCpzdGF0ZW1lbnQpLT5wcmVwYXJlZCA9IDE7DQoNCiAgICByZXR1cm4g cmV0Ow0KfQ0Kc3RhdGljIGludCBkYmRfcGdzcWxfcHF1ZXJ5KGFwcl9wb29s X3QgKnBvb2wsIGFwcl9kYmRfdCAqc3FsLA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGFwcl9kYmRfdHJhbnNhY3Rpb24gKnRyYW5zLCBpbnQgKm5y b3dzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9kYmRfcHJl cGFyZWQgKnN0YXRlbWVudCwgLi4uKQ0Kew0KICAgIGNoYXIgKmFyZzsNCiAg ICBQR3Jlc3VsdCAqcmVzOw0KICAgIGludCByZXQ7DQogICAgaW50IG5hcmdz ID0gMDsNCiAgICB2YV9saXN0IGFyZ3M7DQogICAgY29uc3QgY2hhciAqdmFs dWVzW1FVRVJZX01BWF9BUkdTXTsNCg0KICAgIGlmICh0cmFucyAmJiB0cmFu cy0+ZXJybnVtKSB7DQogICAgICAgIHJldHVybiB0cmFucy0+ZXJybnVtOw0K ICAgIH0NCiAgICB2YV9zdGFydChhcmdzLCBzdGF0ZW1lbnQpOw0KICAgIHdo aWxlICggYXJnID0gdmFfYXJnKGFyZ3MsIGNoYXIqKSwgYXJnICkgew0KICAg ICAgICBpZiAoIG5hcmdzID49IFFVRVJZX01BWF9BUkdTKSB7DQogICAgICAg ICAgICB2YV9lbmQoYXJncyk7DQogICAgICAgICAgICByZXR1cm4gLTE7DQog ICAgICAgIH0NCiAgICAgICAgdmFsdWVzW25hcmdzKytdID0gYXByX3BzdHJk dXAocG9vbCwgYXJnKSA7DQogICAgfQ0KICAgIHZhX2VuZChhcmdzKTsNCg0K ICAgIGlmIChzdGF0ZW1lbnQtPnByZXBhcmVkKSB7DQogICAgICAgIHJlcyA9 IFBRZXhlY1ByZXBhcmVkKHNxbCwgc3RhdGVtZW50LT5uYW1lLCBuYXJncywg dmFsdWVzLCAwLCAwLCAwKTsNCiAgICB9DQogICAgZWxzZSB7DQogICAgICAg IHJlcyA9IFBRZXhlY1BhcmFtcyhzcWwsIHN0YXRlbWVudC0+bmFtZSwgbmFy Z3MsIDAsIHZhbHVlcywgMCwgMCwgMCk7DQogICAgfQ0KICAgIGlmIChyZXMp IHsNCiAgICAgICAgcmV0ID0gUFFyZXN1bHRTdGF0dXMocmVzKTsNCiAgICAg ICAgaWYgKGRiZF9wZ3NxbF9pc19zdWNjZXNzKHJldCkpIHsNCiAgICAgICAg ICAgIHJldCA9IDA7DQogICAgICAgIH0NCiAgICAgICAgUFFjbGVhcihyZXMp Ow0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgICAgcmV0ID0gUEdSRVNfRkFU QUxfRVJST1I7DQogICAgfQ0KDQogICAgaWYgKHRyYW5zKSB7DQogICAgICAg IHRyYW5zLT5lcnJudW0gPSByZXQ7DQogICAgfQ0KICAgIHJldHVybiByZXQ7 DQp9DQpzdGF0aWMgaW50IGRiZF9wZ3NxbF9wc2VsZWN0KGFwcl9wb29sX3Qg KnBvb2wsIGFwcl9kYmRfdCAqc3FsLA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBhcHJfZGJkX3RyYW5zYWN0aW9uICp0cmFucywNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYXByX2RiZF9yZXN1bHRzICoqcmVzdWx0 cywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX2RiZF9wcmVw YXJlZCAqc3RhdGVtZW50LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgc2VlaywgLi4uKQ0Kew0KICAgIGNvbnN0IGNoYXIgKmFyZzsNCiAg ICBQR3Jlc3VsdCAqcmVzOw0KICAgIGludCBydjsNCiAgICBpbnQgcmV0ID0g MDsNCiAgICBpbnQgbmFyZ3MgPSAwOw0KICAgIHZhX2xpc3QgYXJnczsNCiAg ICBjb25zdCBjaGFyICp2YWx1ZXNbUVVFUllfTUFYX0FSR1NdOw0KDQogICAg aWYgKHRyYW5zICYmIHRyYW5zLT5lcnJudW0pIHsNCiAgICAgICAgcmV0dXJu IHRyYW5zLT5lcnJudW07DQogICAgfQ0KDQogICAgdmFfc3RhcnQoYXJncywg c2Vlayk7DQogICAgd2hpbGUgKGFyZyA9IHZhX2FyZyhhcmdzLCBjb25zdCBj aGFyKiksIGFyZykgew0KICAgICAgICBpZiAoIG5hcmdzID49IFFVRVJZX01B WF9BUkdTKSB7DQogICAgICAgICAgICB2YV9lbmQoYXJncyk7DQogICAgICAg ICAgICByZXR1cm4gLTE7DQogICAgICAgIH0NCiAgICAgICAgdmFsdWVzW25h cmdzKytdID0gYXByX3BzdHJkdXAocG9vbCwgYXJnKSA7DQogICAgfQ0KICAg IHZhX2VuZChhcmdzKTsNCg0KICAgIGlmIChzZWVrKSB7IC8qIHN5bmNocm9u b3VzIHF1ZXJ5ICovDQogICAgICAgIGlmIChzdGF0ZW1lbnQtPnByZXBhcmVk KSB7DQogICAgICAgICAgICByZXMgPSBQUWV4ZWNQcmVwYXJlZChzcWwsIHN0 YXRlbWVudC0+bmFtZSwgbmFyZ3MsIHZhbHVlcywgMCwgMCwgMCk7DQogICAg ICAgIH0NCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgICByZXMgPSBQUWV4 ZWNQYXJhbXMoc3FsLCBzdGF0ZW1lbnQtPm5hbWUsIG5hcmdzLCAwLCB2YWx1 ZXMsIDAsIDAsIDApOw0KICAgICAgICB9DQogICAgICAgIGlmIChyZXMpIHsN CiAgICAgICAgICAgIHJldCA9IFBRcmVzdWx0U3RhdHVzKHJlcyk7DQogICAg ICAgICAgICBpZiAoZGJkX3Bnc3FsX2lzX3N1Y2Nlc3MocmV0KSkgew0KICAg ICAgICAgICAgICAgIHJldCA9IDA7DQogICAgICAgICAgICB9DQogICAgICAg ICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICBQUWNsZWFyKHJlcyk7DQog ICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgZWxzZSB7DQogICAg ICAgICAgICByZXQgPSBQR1JFU19GQVRBTF9FUlJPUjsNCiAgICAgICAgfQ0K ICAgICAgICBpZiAocmV0ICE9IDApIHsNCiAgICAgICAgICAgIGlmICh0cmFu cykgew0KICAgICAgICAgICAgICAgIHRyYW5zLT5lcnJudW0gPSByZXQ7DQog ICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gcmV0Ow0KICAgICAg ICB9DQogICAgICAgIGlmICghKnJlc3VsdHMpIHsNCiAgICAgICAgICAgICpy ZXN1bHRzID0gYXByX3BjYWxsb2MocG9vbCwgc2l6ZW9mKGFwcl9kYmRfcmVz dWx0cykpOw0KICAgICAgICB9DQogICAgICAgICgqcmVzdWx0cyktPnJlcyA9 IHJlczsNCiAgICAgICAgKCpyZXN1bHRzKS0+bnR1cGxlcyA9IFBRbnR1cGxl cyhyZXMpOw0KICAgICAgICAoKnJlc3VsdHMpLT5zeiA9IFBRbmZpZWxkcyhy ZXMpOw0KICAgICAgICAoKnJlc3VsdHMpLT5yYW5kb20gPSBzZWVrOw0KICAg ICAgICBhcHJfcG9vbF9jbGVhbnVwX3JlZ2lzdGVyKHBvb2wsIHJlcywgKHZv aWQqKVBRY2xlYXIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYXByX3Bvb2xfY2xlYW51cF9udWxsKTsNCiAgICB9DQogICAgZWxzZSB7 DQogICAgICAgIGlmIChzdGF0ZW1lbnQtPnByZXBhcmVkKSB7DQogICAgICAg ICAgICBydiA9IFBRc2VuZFF1ZXJ5UHJlcGFyZWQoc3FsLCBzdGF0ZW1lbnQt Pm5hbWUsIG5hcmdzLCB2YWx1ZXMsMCwwLDApOw0KICAgICAgICB9DQogICAg ICAgIGVsc2Ugew0KICAgICAgICAgICAgcnYgPSBQUXNlbmRRdWVyeVBhcmFt cyhzcWwsIHN0YXRlbWVudC0+bmFtZSwgbmFyZ3MsIDAsIHZhbHVlcywwLDAs MCk7DQogICAgICAgIH0NCiAgICAgICAgaWYgKHJ2ID09IDApIHsNCiAgICAg ICAgICAgIGlmICh0cmFucykgew0KICAgICAgICAgICAgICAgIHRyYW5zLT5l cnJudW0gPSAxOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJu IDE7DQogICAgICAgIH0NCiAgICAgICAgaWYgKCEqcmVzdWx0cykgew0KICAg ICAgICAgICAgKnJlc3VsdHMgPSBhcHJfcGNhbGxvYyhwb29sLCBzaXplb2Yo YXByX2RiZF9yZXN1bHRzKSk7DQogICAgICAgIH0NCiAgICAgICAgKCpyZXN1 bHRzKS0+cmFuZG9tID0gc2VlazsNCiAgICAgICAgKCpyZXN1bHRzKS0+aGFu ZGxlID0gc3FsOw0KICAgIH0NCg0KICAgIGlmICh0cmFucykgew0KICAgICAg ICB0cmFucy0+ZXJybnVtID0gcmV0Ow0KICAgIH0NCiAgICByZXR1cm4gcmV0 Ow0KfQ0Kc3RhdGljIGludCBkYmRfcGdzcWxfdHJhbnNhY3Rpb24oYXByX3Bv b2xfdCAqcG9vbCwgYXByX2RiZF90ICpoYW5kbGUsDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBhcHJfZGJkX3RyYW5zYWN0aW9uICoqdHJh bnMpDQp7DQogICAgaW50IHJldCA9IDA7DQogICAgUEdyZXN1bHQgKnJlcyA9 IFBRZXhlYyhoYW5kbGUsICJCRUdJTiBUUkFOU0FDVElPTiIpOw0KICAgIGlm IChyZXMpIHsNCiAgICAgICAgcmV0ID0gUFFyZXN1bHRTdGF0dXMocmVzKTsN CiAgICAgICAgaWYgKGRiZF9wZ3NxbF9pc19zdWNjZXNzKHJldCkpIHsNCiAg ICAgICAgICAgIHJldCA9IDA7DQogICAgICAgICAgICBpZiAoISp0cmFucykg ew0KICAgICAgICAgICAgICAgICp0cmFucyA9IGFwcl9wY2FsbG9jKHBvb2ws IHNpemVvZihhcHJfZGJkX3RyYW5zYWN0aW9uKSk7DQogICAgICAgICAgICB9 DQogICAgICAgIH0NCiAgICAgICAgUFFjbGVhcihyZXMpOw0KICAgIH0NCiAg ICBlbHNlIHsNCiAgICAgICAgcmV0ID0gUEdSRVNfRkFUQUxfRVJST1I7DQog ICAgfQ0KICAgIHJldHVybiByZXQ7DQp9DQpzdGF0aWMgaW50IGRiZF9wZ3Nx bF9lbmRfdHJhbnNhY3Rpb24oYXByX2RiZF90ICpoYW5kbGUsDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX2RiZF90cmFuc2Fj dGlvbiAqdHJhbnMpDQp7DQogICAgUEdyZXN1bHQgKnJlczsNCiAgICBpbnQg cmV0ID0gLTE7ICAgICAgICAgICAgICAgIC8qIG5vIHRyYW5zYWN0aW9uIGlz IGFuIGVycm9yIGNvbmQgKi8NCiAgICBpZiAodHJhbnMpIHsNCiAgICAgICAg aWYgKHRyYW5zLT5lcnJudW0pIHsNCiAgICAgICAgICAgIHRyYW5zLT5lcnJu dW0gPSAwOw0KICAgICAgICAgICAgcmVzID0gUFFleGVjKGhhbmRsZSwgIlJP TExCQUNLIik7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSB7DQogICAgICAg ICAgICByZXMgPSBQUWV4ZWMoaGFuZGxlLCAiQ09NTUlUIik7DQogICAgICAg IH0NCiAgICAgICAgcmV0ID0gUFFyZXN1bHRTdGF0dXMocmVzKTsNCiAgICAg ICAgaWYgKGRiZF9wZ3NxbF9pc19zdWNjZXNzKHJldCkpIHsNCiAgICAgICAg ICAgIHJldCA9IDA7DQogICAgICAgIH0NCiAgICAgICAgUFFjbGVhcihyZXMp Ow0KICAgIH0NCiAgICByZXR1cm4gcmV0Ow0KfQ0Kc3RhdGljIGFwcl9kYmRf dCAqZGJkX3Bnc3FsX29wZW4oYXByX3Bvb2xfdCAqcG9vbCwgY29uc3QgY2hh ciAqcGFyYW1zKQ0Kew0KICAgIHJldHVybiBQUWNvbm5lY3RkYihwYXJhbXMp Ow0KfQ0Kc3RhdGljIGFwcl9zdGF0dXNfdCBkYmRfcGdzcWxfY2xvc2Uodm9p ZCAqaGFuZGxlKQ0Kew0KICAgIFBRZmluaXNoKGhhbmRsZSk7DQogICAgcmV0 dXJuIEFQUl9TVUNDRVNTOw0KfQ0Kc3RhdGljIGFwcl9zdGF0dXNfdCBkYmRf cGdzcWxfY2hlY2tfY29ubihhcHJfcG9vbF90ICpwb29sLA0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfZGJkX3QgKmhh bmRsZSkNCnsNCiAgICBpZiAoUFFzdGF0dXMoaGFuZGxlKSAhPSBDT05ORUNU SU9OX09LKSB7DQogICAgICAgIFBRcmVzZXQoaGFuZGxlKTsNCiAgICAgICAg aWYgKFBRc3RhdHVzKGhhbmRsZSkgIT0gQ09OTkVDVElPTl9PSykgew0KICAg ICAgICAgICAgcmV0dXJuIEFQUl9FR0VORVJBTDsNCiAgICAgICAgfQ0KICAg IH0NCiAgICByZXR1cm4gQVBSX1NVQ0NFU1M7DQp9DQpzdGF0aWMgaW50IGRi ZF9wZ3NxbF9zZWxlY3RfZGIoYXByX3Bvb2xfdCAqcG9vbCwgYXByX2RiZF90 ICpoYW5kbGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgY2hhciAqbmFtZSkNCnsNCiAgICByZXR1cm4gQVBSX0VOT1RJTVBMOw0K fQ0Kc3RhdGljIHZvaWQgKmRiZF9wZ3NxbF9uYXRpdmUoYXByX2RiZF90ICpo YW5kbGUpDQp7DQogICAgcmV0dXJuIGhhbmRsZTsNCn0NCnN0YXRpYyBpbnQg ZGJkX3Bnc3FsX251bV9jb2xzKGFwcl9kYmRfcmVzdWx0cyogcmVzKQ0Kew0K ICAgIHJldHVybiByZXMtPnN6Ow0KfQ0Kc3RhdGljIGludCBkYmRfcGdzcWxf bnVtX3R1cGxlcyhhcHJfZGJkX3Jlc3VsdHMqIHJlcykNCnsNCiAgICBpZiAo cmVzLT5yYW5kb20pIHsNCiAgICAgICAgcmV0dXJuIHJlcy0+bnR1cGxlczsN CiAgICB9DQogICAgZWxzZSB7DQogICAgICAgIHJldHVybiAtMTsNCiAgICB9 DQp9DQpBUFVfREVDTEFSRV9EQVRBIGNvbnN0IGFwcl9kYmRfZHJpdmVyX3Qg YXByX2RiZF9wZ3NxbF9kcml2ZXIgPSB7DQogICAgInBnc3FsIiwNCiAgICBk YmRfcGdzcWxfbmF0aXZlLA0KICAgIGRiZF9wZ3NxbF9vcGVuLA0KICAgIGRi ZF9wZ3NxbF9jaGVja19jb25uLA0KICAgIGRiZF9wZ3NxbF9jbG9zZSwNCiAg ICBkYmRfcGdzcWxfc2VsZWN0X2RiLA0KICAgIGRiZF9wZ3NxbF90cmFuc2Fj dGlvbiwNCiAgICBkYmRfcGdzcWxfZW5kX3RyYW5zYWN0aW9uLA0KICAgIGRi ZF9wZ3NxbF9xdWVyeSwNCiAgICBkYmRfcGdzcWxfc2VsZWN0LA0KICAgIGRi ZF9wZ3NxbF9udW1fY29scywNCiAgICBkYmRfcGdzcWxfbnVtX3R1cGxlcywN CiAgICBkYmRfcGdzcWxfZ2V0X3JvdywNCiAgICBkYmRfcGdzcWxfZ2V0X2Vu dHJ5LA0KICAgIGRiZF9wZ3NxbF9lcnJvciwNCiAgICBkYmRfcGdzcWxfZXNj YXBlLA0KICAgIGRiZF9wZ3NxbF9wcmVwYXJlLA0KICAgIGRiZF9wZ3NxbF9w cXVlcnksDQogICAgZGJkX3Bnc3FsX3BzZWxlY3QsDQp9Ow0KI2VuZGlmDQo= ---1463810294-1892063039-1102595640=:6831 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="apr_dbd_test.c" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="apr_dbd_test.c" LyogICAgICBDb3B5cmlnaHQgKGMpIDIwMDQsIE5pY2sgS2V3LiAgQWxsIHJp Z2h0cyByZXNlcnZlZC4NCg0KICAgICAgICBJZiB0aGlzIGlzIGFjY2VwdGVk IGJ5IEFTRiBmb3IgaW5jbHVzaW9uIGluIEFQUi1VVElMLA0KICAgICAgICBJ IHdpbGwgYXNzaWduIGNvcHlyaWdodCB0byBBU0YgYW5kIGxpY2Vuc2UgdW5k ZXIgQVNGIHRlcm1zLg0KDQogICAgICAgIE90aGVyd2lzZSBJIHdpbGwgcmV0 YWluIGNvcHlyaWdodCBhbmQgbGljZW5zZSB1bmRlcg0KICAgICAgICB0ZXJt cyBvZiBteSBjaG9pY2UuDQoqLw0KI2luY2x1ZGUgImFwdS5oIg0KI2luY2x1 ZGUgImFwcl9wb29scy5oIg0KI2luY2x1ZGUgImFwcl9kYmQuaCINCg0KI2lu Y2x1ZGUgPHN0ZGlvLmg+DQoNCiNkZWZpbmUgVEVTVChtc2csZnVuYykJCQkJ CVwNCiAgICBwcmludGYoIj09PT09PT09ICVzID09PT09PT09XG4iLCBtc2cp OwkJXA0KICAgIHJ2ID0gZnVuYyhwb29sLCBzcWwsIGRyaXZlcik7CQkJXA0K ICAgIGlmIChydiAhPSAwKSB7CQkJCQlcDQogICAgICAgIHByaW50ZigiRXJy b3IgaW4gJXM6IHJjPSVkXG5cbiIsIG1zZywgcnYpOwlcDQogICAgfQkJCQkJ CQlcDQogICAgZWxzZSB7CQkJCQkJXA0KICAgICAgICBwcmludGYoIiVzIHRl c3Qgc3VjY2Vzc2Z1bFxuXG4iLCBtc2cpOwkJXA0KICAgIH0JCQkJCQkJXA0K ICAgIGZmbHVzaChzdGRvdXQpOw0KDQpzdGF0aWMgaW50IGNyZWF0ZV90YWJs ZShhcHJfcG9vbF90KiBwb29sLCBhcHJfZGJkX3QqIGhhbmRsZSwNCiAgICAg ICAgICAgICAgICAgICAgICAgIGFwcl9kYmRfZHJpdmVyX3QqIGRyaXZlcikN CnsNCiAgICBpbnQgcnYgPSAwOw0KICAgIGludCBucm93czsNCiAgICBjb25z dCBjaGFyICpzdGF0ZW1lbnQgPSAiQ1JFQVRFIFRBQkxFIGFwcl9kYmRfdGVz dCAoIg0KICAgICAgICAiY29sMSB2YXJjaGFyKDQwKSBub3QgbnVsbCwiDQog ICAgICAgICJjb2wyIHZhcmNoYXIoNDApLCINCiAgICAgICAgImNvbDMgaW50 ZWdlcikiIDsNCiAgICBydiA9IGFwcl9kYmRfcXVlcnkoZHJpdmVyLCBoYW5k bGUsIE5VTEwsICZucm93cywgc3RhdGVtZW50KTsNCiAgICByZXR1cm4gcnY7 DQp9DQpzdGF0aWMgaW50IGRyb3BfdGFibGUoYXByX3Bvb2xfdCogcG9vbCwg YXByX2RiZF90KiBoYW5kbGUsDQogICAgICAgICAgICAgICAgICAgICAgYXBy X2RiZF9kcml2ZXJfdCogZHJpdmVyKQ0Kew0KICAgIGludCBydiA9IDA7DQog ICAgaW50IG5yb3dzOw0KICAgIGNvbnN0IGNoYXIgKnN0YXRlbWVudCA9ICJE Uk9QIFRBQkxFIGFwcl9kYmRfdGVzdCIgOw0KICAgIHJ2ID0gYXByX2RiZF9x dWVyeShkcml2ZXIsIGhhbmRsZSwgTlVMTCwgJm5yb3dzLCBzdGF0ZW1lbnQp Ow0KICAgIHJldHVybiBydjsNCn0NCnN0YXRpYyBpbnQgaW5zZXJ0X3Jvd3Mo YXByX3Bvb2xfdCogcG9vbCwgYXByX2RiZF90KiBoYW5kbGUsDQogICAgICAg ICAgICAgICAgICAgICAgIGFwcl9kYmRfZHJpdmVyX3QqIGRyaXZlcikNCnsN CiAgICBpbnQgaTsNCiAgICBpbnQgcnYgPSAwOw0KICAgIGludCBucm93czsN CiAgICBpbnQgbmVycm9ycyA9IDA7DQogICAgY29uc3QgY2hhciAqc3RhdGVt ZW50ID0NCiAgICAgICAgIklOU0VSVCBpbnRvIGFwcl9kYmRfdGVzdCAoY29s MSkgdmFsdWVzICgnZm9vJyk7Ig0KICAgICAgICAiSU5TRVJUIGludG8gYXBy X2RiZF90ZXN0IHZhbHVlcyAoJ3dpYmJsZScsICdvdGhlcicsIDUpOyINCiAg ICAgICAgIklOU0VSVCBpbnRvIGFwcl9kYmRfdGVzdCB2YWx1ZXMgKCd3aWJi bGUnLCAnbm90aGluZycsIDUpOyINCiAgICAgICAgIklOU0VSVCBpbnRvIGFw cl9kYmRfdGVzdCB2YWx1ZXMgKCdxd2VydHknLCAnZm9vJywgMCk7Ig0KICAg ICAgICAiSU5TRVJUIGludG8gYXByX2RiZF90ZXN0IHZhbHVlcyAoJ2FzZGZn aCcsICdiYXInLCAxKTsiDQogICAgOw0KICAgIHJ2ID0gYXByX2RiZF9xdWVy eShkcml2ZXIsIGhhbmRsZSwgTlVMTCwgJm5yb3dzLCBzdGF0ZW1lbnQpOw0K ICAgIGlmIChydikgew0KICAgICAgICBjb25zdCBjaGFyKiBzdG10W10gPSB7 DQogICAgICAgICAgICAiSU5TRVJUIGludG8gYXByX2RiZF90ZXN0IChjb2wx KSB2YWx1ZXMgKCdmb28nKTsiLA0KICAgICAgICAgICAgIklOU0VSVCBpbnRv IGFwcl9kYmRfdGVzdCB2YWx1ZXMgKCd3aWJibGUnLCAnb3RoZXInLCA1KTsi LA0KICAgICAgICAgICAgIklOU0VSVCBpbnRvIGFwcl9kYmRfdGVzdCB2YWx1 ZXMgKCd3aWJibGUnLCAnbm90aGluZycsIDUpOyIsDQogICAgICAgICAgICAi SU5TRVJUIGludG8gYXByX2RiZF90ZXN0IHZhbHVlcyAoJ3F3ZXJ0eScsICdm b28nLCAwKTsiLA0KICAgICAgICAgICAgIklOU0VSVCBpbnRvIGFwcl9kYmRf dGVzdCB2YWx1ZXMgKCdhc2RmZ2gnLCAnYmFyJywgMSk7IiwNCiAgICAgICAg ICAgIE5VTEwNCiAgICAgICAgfTsNCiAgICAgICAgcHJpbnRmKCJDb21wb3Vu ZCBpbnNlcnQgZmFpbGVkOyB0cnlpbmcgc3RhdGVtZW50cyBvbmUtYnktb25l XG4iKSA7DQogICAgICAgIGZvciAoaT0wOyBzdG10W2ldICE9IE5VTEw7ICsr aSkgew0KICAgICAgICAgICAgc3RhdGVtZW50ID0gc3RtdFtpXTsNCiAgICAg ICAgICAgIHJ2ID0gYXByX2RiZF9xdWVyeShkcml2ZXIsIGhhbmRsZSwgTlVM TCwgJm5yb3dzLCBzdGF0ZW1lbnQpOw0KICAgICAgICAgICAgaWYgKHJ2KSB7 DQogICAgICAgICAgICAgICAgbmVycm9ycysrOw0KICAgICAgICAgICAgfQ0K ICAgICAgICB9DQogICAgICAgIGlmIChuZXJyb3JzKSB7DQogICAgICAgICAg ICBwcmludGYoIiVkIHNpbmdsZSBpbnNlcnRzIGZhaWxlZCB0b28uXG4iLCBu ZXJyb3JzKSA7DQogICAgICAgIH0NCiAgICB9DQogICAgcmV0dXJuIHJ2Ow0K fQ0Kc3RhdGljIGludCBpbnZhbGlkX29wKGFwcl9wb29sX3QqIHBvb2wsIGFw cl9kYmRfdCogaGFuZGxlLA0KICAgICAgICAgICAgICAgICAgICAgIGFwcl9k YmRfZHJpdmVyX3QqIGRyaXZlcikNCnsNCiAgICBpbnQgcnYgPSAwOw0KICAg IGludCBucm93czsNCiAgICBjb25zdCBjaGFyICpzdGF0ZW1lbnQgPSAiSU5T RVJUIGludG8gYXByX2RiZF90ZXN0MSAoY29sMikgdmFsdWVzICgnZm9vJyki IDsNCiAgICBydiA9IGFwcl9kYmRfcXVlcnkoZHJpdmVyLCBoYW5kbGUsIE5V TEwsICZucm93cywgc3RhdGVtZW50KTsNCiAgICBwcmludGYoImludmFsaWQg b3AgcmV0dXJuZWQgJWQgKHNob3VsZCBiZSBub256ZXJvKS4gIEVycm9yIG1z ZyBmb2xsb3dzXG4iLCBydik7DQogICAgcHJpbnRmKCInJXMnXG4iLCBhcHJf ZGJkX2Vycm9yKGRyaXZlciwgaGFuZGxlLCBydikpOw0KICAgIHN0YXRlbWVu dCA9ICJJTlNFUlQgaW50byBhcHJfZGJkX3Rlc3QgKGNvbDEsIGNvbDIpIHZh bHVlcyAoJ2JhcicsICdmb28nKSIgOw0KICAgIHJ2ID0gYXByX2RiZF9xdWVy eShkcml2ZXIsIGhhbmRsZSwgTlVMTCwgJm5yb3dzLCBzdGF0ZW1lbnQpOw0K ICAgIHByaW50ZigidmFsaWQgb3AgcmV0dXJuZWQgJWQgKHNob3VsZCBiZSB6 ZXJvOyBlcnJvciBzaG91bGRuJ3QgYWZmZWN0IHN1YnNlcXVlbnQgb3BzKVxu IiwgcnYpOw0KICAgIHJldHVybiBydjsNCn0NCnN0YXRpYyBpbnQgc2VsZWN0 X3NlcXVlbnRpYWwoYXByX3Bvb2xfdCogcG9vbCwgYXByX2RiZF90KiBoYW5k bGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9kYmRfZHJp dmVyX3QqIGRyaXZlcikNCnsNCiAgICBpbnQgcnYgPSAwOw0KICAgIGludCBp ID0gMDsNCiAgICBpbnQgbjsNCiAgICBjb25zdCBjaGFyKiBlbnRyeTsNCiAg ICBjb25zdCBjaGFyKiBzdGF0ZW1lbnQgPSAiU0VMRUNUICogRlJPTSBhcHJf ZGJkX3Rlc3QgT1JERVIgQlkgY29sMSwgY29sMiI7DQogICAgYXByX2RiZF9y ZXN1bHRzICpyZXMgPSBOVUxMOw0KICAgIGFwcl9kYmRfcm93ICpyb3cgPSBO VUxMOw0KICAgIHJ2ID0gYXByX2RiZF9zZWxlY3QoZHJpdmVyLHBvb2wsaGFu ZGxlLE5VTEwsJnJlcyxzdGF0ZW1lbnQsMCk7DQogICAgaWYgKHJ2KSB7DQog ICAgICAgIHByaW50ZigiU2VsZWN0IGZhaWxlZDogJXMiLCBhcHJfZGJkX2Vy cm9yKGRyaXZlciwgaGFuZGxlLCBydikpOw0KICAgICAgICByZXR1cm4gcnY7 DQogICAgfQ0KICAgIGZvciAocnYgPSBhcHJfZGJkX2dldF9yb3coZHJpdmVy LCBwb29sLCByZXMsICZyb3csIC0xKTsNCiAgICAgICAgIHJ2ID09IDA7DQog ICAgICAgICBydiA9IGFwcl9kYmRfZ2V0X3Jvdyhkcml2ZXIsIHBvb2wsIHJl cywgJnJvdywgLTEpKSB7DQogICAgICAgIHByaW50ZigiUk9XICVkOgkiLCBp KyspIDsNCiAgICAgICAgZm9yIChuID0gMDsgbiA8IGFwcl9kYmRfbnVtX2Nv bHMoZHJpdmVyLCByZXMpOyArK24pIHsNCiAgICAgICAgICAgIGVudHJ5ID0g YXByX2RiZF9nZXRfZW50cnkoZHJpdmVyLCByb3csIG4pOw0KICAgICAgICAg ICAgaWYgKGVudHJ5ID09IE5VTEwpIHsNCiAgICAgICAgICAgICAgICBwcmlu dGYoIihudWxsKQkiKSA7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBl bHNlIHsNCiAgICAgICAgICAgICAgICBwcmludGYoIiVzCSIsIGVudHJ5KTsN CiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KCWZwdXRzKCJcbiIsIHN0ZG91 dCk7DQogICAgfQ0KICAgIHJldHVybiAocnYgPT0gLTEpID8gMCA6IDE7DQp9 DQpzdGF0aWMgaW50IHNlbGVjdF9yYW5kb20oYXByX3Bvb2xfdCogcG9vbCwg YXByX2RiZF90KiBoYW5kbGUsDQogICAgICAgICAgICAgICAgICAgICAgICAg YXByX2RiZF9kcml2ZXJfdCogZHJpdmVyKQ0Kew0KICAgIGludCBydiA9IDA7 DQogICAgaW50IG47DQogICAgY29uc3QgY2hhciogZW50cnk7DQogICAgY29u c3QgY2hhciogc3RhdGVtZW50ID0gIlNFTEVDVCAqIEZST00gYXByX2RiZF90 ZXN0IE9SREVSIEJZIGNvbDEsIGNvbDIiOw0KICAgIGFwcl9kYmRfcmVzdWx0 cyAqcmVzID0gTlVMTDsNCiAgICBhcHJfZGJkX3JvdyAqcm93ID0gTlVMTDsN CiAgICBydiA9IGFwcl9kYmRfc2VsZWN0KGRyaXZlcixwb29sLGhhbmRsZSxO VUxMLCZyZXMsc3RhdGVtZW50LDEpOw0KICAgIGlmIChydikgew0KICAgICAg ICBwcmludGYoIlNlbGVjdCBmYWlsZWQ6ICVzIiwgYXByX2RiZF9lcnJvcihk cml2ZXIsIGhhbmRsZSwgcnYpKTsNCiAgICAgICAgcmV0dXJuIHJ2Ow0KICAg IH0NCiAgICBydiA9IGFwcl9kYmRfZ2V0X3Jvdyhkcml2ZXIsIHBvb2wsIHJl cywgJnJvdywgNSkgOw0KICAgIGlmIChydikgew0KICAgICAgICBwcmludGYo ImdldF9yb3cgZmFpbGVkOiAlcyIsIGFwcl9kYmRfZXJyb3IoZHJpdmVyLCBo YW5kbGUsIHJ2KSk7DQogICAgICAgIHJldHVybiBydjsNCiAgICB9DQogICAg cHJpbnRmKCJST1cgNToJIik7DQogICAgZm9yIChuID0gMDsgbiA8IGFwcl9k YmRfbnVtX2NvbHMoZHJpdmVyLCByZXMpOyArK24pIHsNCiAgICAgICAgZW50 cnkgPSBhcHJfZGJkX2dldF9lbnRyeShkcml2ZXIsIHJvdywgbik7DQogICAg ICAgIGlmIChlbnRyeSA9PSBOVUxMKSB7DQogICAgICAgICAgICBwcmludGYo IihudWxsKQkiKSA7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSB7DQogICAg ICAgICAgICBwcmludGYoIiVzCSIsIGVudHJ5KTsNCiAgICAgICAgfQ0KICAg IH0NCiAgICBmcHV0cygiXG4iLCBzdGRvdXQpOw0KICAgIHJ2ID0gYXByX2Ri ZF9nZXRfcm93KGRyaXZlciwgcG9vbCwgcmVzLCAmcm93LCAxKSA7DQogICAg aWYgKHJ2KSB7DQogICAgICAgIHByaW50ZigiZ2V0X3JvdyBmYWlsZWQ6ICVz IiwgYXByX2RiZF9lcnJvcihkcml2ZXIsIGhhbmRsZSwgcnYpKTsNCiAgICAg ICAgcmV0dXJuIHJ2Ow0KICAgIH0NCiAgICBwcmludGYoIlJPVyAxOgkiKTsN CiAgICBmb3IgKG4gPSAwOyBuIDwgYXByX2RiZF9udW1fY29scyhkcml2ZXIs IHJlcyk7ICsrbikgew0KICAgICAgICBlbnRyeSA9IGFwcl9kYmRfZ2V0X2Vu dHJ5KGRyaXZlciwgcm93LCBuKTsNCiAgICAgICAgaWYgKGVudHJ5ID09IE5V TEwpIHsNCiAgICAgICAgICAgIHByaW50ZigiKG51bGwpCSIpIDsNCiAgICAg ICAgfQ0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgIHByaW50ZigiJXMJ IiwgZW50cnkpOw0KICAgICAgICB9DQogICAgfQ0KICAgIGZwdXRzKCJcbiIs IHN0ZG91dCk7DQogICAgcnYgPSBhcHJfZGJkX2dldF9yb3coZHJpdmVyLCBw b29sLCByZXMsICZyb3csIDExKSA7DQogICAgaWYgKHJ2ICE9IC0xKSB7DQog ICAgICAgIHByaW50ZigiT29wcyEgIGdldF9yb3cgb3V0IG9mIHJhbmdlIGJ1 dCB0aGlua3MgaXQgc3VjY2VlZGVkIVxuJXNcbiIsDQogICAgICAgICAgICAg ICAgYXByX2RiZF9lcnJvcihkcml2ZXIsIGhhbmRsZSwgcnYpKTsNCiAgICAg ICAgcmV0dXJuIC0xOw0KICAgIH0NCiAgICBydiA9IDA7DQoNCiAgICByZXR1 cm4gcnY7DQp9DQpzdGF0aWMgaW50IHRlc3RfdHJhbnNhY3Rpb25zKGFwcl9w b29sX3QqIHBvb2wsIGFwcl9kYmRfdCogaGFuZGxlLA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBhcHJfZGJkX2RyaXZlcl90KiBkcml2ZXIpDQp7 DQogICAgaW50IHJ2ID0gMDsNCiAgICBpbnQgbnJvd3M7DQogICAgYXByX2Ri ZF90cmFuc2FjdGlvbiogdHJhbnMgPSBOVUxMOw0KICAgIGNvbnN0IGNoYXIq IHN0YXRlbWVudDsNCg0KICAgIC8qIHRyYW5zIDEgLSBlcnJvciBvdXQgZWFy bHkgKi8NCiAgICBwcmludGYoIlRyYW5zYWN0aW9uIDFcbiIpOw0KICAgIHJ2 ID0gYXByX2RiZF90cmFuc2FjdGlvbl9zdGFydChkcml2ZXIsIHBvb2wsIGhh bmRsZSwgJnRyYW5zKTsNCiAgICBpZiAocnYpIHsNCiAgICAgICAgcHJpbnRm KCJTdGFydCB0cmFuc2FjdGlvbiBmYWlsZWQhXG4lc1xuIiwNCiAgICAgICAg ICAgICAgIGFwcl9kYmRfZXJyb3IoZHJpdmVyLCBoYW5kbGUsIHJ2KSk7DQog ICAgICAgIHJldHVybiBydjsNCiAgICB9DQogICAgc3RhdGVtZW50ID0gIlVQ REFURSBhcHJfZGJkX3Rlc3QgU0VUIGNvbDIgPSAnZmFpbGVkJyI7DQogICAg cnYgPSBhcHJfZGJkX3F1ZXJ5KGRyaXZlciwgaGFuZGxlLCB0cmFucywgJm5y b3dzLCBzdGF0ZW1lbnQpOw0KICAgIGlmIChydikgew0KICAgICAgICBwcmlu dGYoIlVwZGF0ZSBmYWlsZWQ6ICclcydcbiIsIGFwcl9kYmRfZXJyb3IoZHJp dmVyLCBoYW5kbGUsIHJ2KSk7DQogICAgICAgIGFwcl9kYmRfdHJhbnNhY3Rp b25fZW5kKGRyaXZlciwgaGFuZGxlLCB0cmFucyk7DQogICAgICAgIHJldHVy biBydjsNCiAgICB9DQogICAgcHJpbnRmKCIlZCByb3dzIHVwZGF0ZWRcbiIs IG5yb3dzKTsNCg0KICAgIHN0YXRlbWVudCA9ICJJTlNFUlQgSU5UTyBhcHJf ZGJkX3Rlc3QxIChjb2wzKSB2YWx1ZXMgKDMpIjsNCiAgICBydiA9IGFwcl9k YmRfcXVlcnkoZHJpdmVyLCBoYW5kbGUsIHRyYW5zLCAmbnJvd3MsIHN0YXRl bWVudCk7DQogICAgaWYgKCFydikgew0KICAgICAgICBwcmludGYoIk9vcHMs IGludmFsaWQgb3Agc3VjY2VlZGVkIGJ1dCBzaG91bGRuJ3QhXG4iKTsNCiAg ICB9DQogICAgc3RhdGVtZW50ID0gIklOU0VSVCBJTlRPIGFwcl9kYmRfdGVz dCB2YWx1ZXMgKCd6enonLCAnYWFhJywgMykiOw0KICAgIHJ2ID0gYXByX2Ri ZF9xdWVyeShkcml2ZXIsIGhhbmRsZSwgdHJhbnMsICZucm93cywgc3RhdGVt ZW50KTsNCiAgICBwcmludGYoIlZhbGlkIGluc2VydCByZXR1cm5lZCAlZC4g IFNob3VsZCBiZSBub256ZXJvIChmYWlsKSBiZWNhdXNlIHRyYW5zYWN0aW9u IGlzIGJhZFxuIiwgcnYpIDsNCg0KICAgIHJ2ID0gYXByX2RiZF90cmFuc2Fj dGlvbl9lbmQoZHJpdmVyLCBoYW5kbGUsIHRyYW5zKTsNCiAgICBpZiAocnYp IHsNCiAgICAgICAgcHJpbnRmKCJFbmQgdHJhbnNhY3Rpb24gZmFpbGVkIVxu JXNcbiIsDQogICAgICAgICAgICAgICBhcHJfZGJkX2Vycm9yKGRyaXZlciwg aGFuZGxlLCBydikpOw0KICAgICAgICByZXR1cm4gcnY7DQogICAgfQ0KICAg IHByaW50ZigiVHJhbnNhY3Rpb24gZW5kZWQgKHNob3VsZCBiZSByb2xsYmFj aykgLSB2aWV3aW5nIHRhYmxlXG4iDQogICAgICAgICAgICJBIGNvbHVtbiBv ZiBcImZhaWxlZFwiIGluZGljYXRlcyB0cmFuc2FjdGlvbiBmYWlsZWQgKG5v IHJvbGxiYWNrKVxuIik7DQogICAgc2VsZWN0X3NlcXVlbnRpYWwocG9vbCwg aGFuZGxlLCBkcml2ZXIpOw0KDQogICAgLyogdHJhbnMgMiAtIGNvbXBsZXRl IHN1Y2Nlc3NmdWxseSAqLw0KICAgIHByaW50ZigiVHJhbnNhY3Rpb24gMlxu Iik7DQogICAgcnYgPSBhcHJfZGJkX3RyYW5zYWN0aW9uX3N0YXJ0KGRyaXZl ciwgcG9vbCwgaGFuZGxlLCAmdHJhbnMpOw0KICAgIGlmIChydikgew0KICAg ICAgICBwcmludGYoIlN0YXJ0IHRyYW5zYWN0aW9uIGZhaWxlZCFcbiVzXG4i LA0KICAgICAgICAgICAgICAgYXByX2RiZF9lcnJvcihkcml2ZXIsIGhhbmRs ZSwgcnYpKTsNCiAgICAgICAgcmV0dXJuIHJ2Ow0KICAgIH0NCiAgICBzdGF0 ZW1lbnQgPSAiVVBEQVRFIGFwcl9kYmRfdGVzdCBTRVQgY29sMiA9ICdzdWNj ZXNzJyI7DQogICAgcnYgPSBhcHJfZGJkX3F1ZXJ5KGRyaXZlciwgaGFuZGxl LCB0cmFucywgJm5yb3dzLCBzdGF0ZW1lbnQpOw0KICAgIGlmIChydikgew0K ICAgICAgICBwcmludGYoIlVwZGF0ZSBmYWlsZWQ6ICclcydcbiIsIGFwcl9k YmRfZXJyb3IoZHJpdmVyLCBoYW5kbGUsIHJ2KSk7DQogICAgICAgIGFwcl9k YmRfdHJhbnNhY3Rpb25fZW5kKGRyaXZlciwgaGFuZGxlLCB0cmFucyk7DQog ICAgICAgIHJldHVybiBydjsNCiAgICB9DQogICAgcHJpbnRmKCIlZCByb3dz IHVwZGF0ZWRcbiIsIG5yb3dzKTsNCiAgICBzdGF0ZW1lbnQgPSAiSU5TRVJU IElOVE8gYXByX2RiZF90ZXN0IHZhbHVlcyAoJ2FhYScsICd6enonLCAzKSI7 DQogICAgcnYgPSBhcHJfZGJkX3F1ZXJ5KGRyaXZlciwgaGFuZGxlLCB0cmFu cywgJm5yb3dzLCBzdGF0ZW1lbnQpOw0KICAgIHByaW50ZigiVmFsaWQgaW5z ZXJ0IHJldHVybmVkICVkLiAgU2hvdWxkIGJlIHplcm8gKE9LKVxuIiwgcnYp IDsNCiAgICBydiA9IGFwcl9kYmRfdHJhbnNhY3Rpb25fZW5kKGRyaXZlciwg aGFuZGxlLCB0cmFucyk7DQogICAgaWYgKHJ2KSB7DQogICAgICAgIHByaW50 ZigiRW5kIHRyYW5zYWN0aW9uIGZhaWxlZCFcbiVzXG4iLA0KICAgICAgICAg ICAgICAgYXByX2RiZF9lcnJvcihkcml2ZXIsIGhhbmRsZSwgcnYpKTsNCiAg ICAgICAgcmV0dXJuIHJ2Ow0KICAgIH0NCiAgICBwcmludGYoIlRyYW5zYWN0 aW9uIGVuZGVkIChzaG91bGQgYmUgY29tbWl0KSAtIHZpZXdpbmcgdGFibGVc biIpOw0KICAgIHNlbGVjdF9zZXF1ZW50aWFsKHBvb2wsIGhhbmRsZSwgZHJp dmVyKTsNCiAgICByZXR1cm4gcnY7DQp9DQpzdGF0aWMgaW50IHRlc3RfcHNl bGVjdChhcHJfcG9vbF90KiBwb29sLCBhcHJfZGJkX3QqIGhhbmRsZSwNCiAg ICAgICAgICAgICAgICAgICAgICAgIGFwcl9kYmRfZHJpdmVyX3QqIGRyaXZl cikNCnsNCiAgICBpbnQgcnYgPSAwOw0KICAgIGludCBpLCBuOw0KICAgIGNv bnN0IGNoYXIgKnF1ZXJ5ID0gTlVMTDsNCiAgICBjb25zdCBjaGFyICpsYWJl bCA9ICJsb3d2YWx1ZXMiOw0KICAgIGFwcl9kYmRfcHJlcGFyZWQqIHN0YXRl bWVudCA9IE5VTEw7DQogICAgYXByX2RiZF9yZXN1bHRzKiByZXMgPSBOVUxM Ow0KICAgIGFwcl9kYmRfcm93KiByb3cgPSBOVUxMOw0KICAgIGNvbnN0IGNo YXIgKmVudHJ5ID0gTlVMTDsNCiAgICBzdHJ1Y3Qgew0KICAgICAgICBjb25z dCBjaGFyKiBuYW1lOw0KICAgICAgICBjb25zdCBjaGFyKiBxdWVyeTsNCiAg ICB9IHF1ZXJpZXNbXSA9IHsNCiAgICAgICAgeyAibXlzcWwiLCAiU0VMRUNU ICogRlJPTSBhcHJfZGJkX3Rlc3QgV0hFUkUgY29sMyA8PSA/IG9yIGNvbDEg PSAnYmFyJyIgfSAsDQogICAgICAgIHsgInBnc3FsIiwgIlNFTEVDVCAqIEZS T00gYXByX2RiZF90ZXN0IFdIRVJFIGNvbDMgPD0gJGludGVnZXI7IG9yIGNv bDEgPSAnYmFyJyIgfSAsDQogICAgICAgIHsgTlVMTCwgTlVMTCB9DQogICAg fTsNCiAgICBmb3IgKGkgPSAwOyBxdWVyaWVzW2ldLm5hbWUgIT0gTlVMTDsg KytpKSB7DQogICAgICAgIGlmICggIXN0cmNtcChxdWVyaWVzW2ldLm5hbWUs IGFwcl9kYmRfbmFtZShkcml2ZXIpKSkgew0KICAgICAgICAgICAgcXVlcnkg PSBxdWVyaWVzW2ldLnF1ZXJ5Ow0KICAgICAgICAgICAgYnJlYWs7DQogICAg ICAgIH0NCiAgICB9DQogICAgaWYgKCFxdWVyeSkgew0KICAgICAgICByZXR1 cm4gLTE7DQogICAgfQ0KDQogICAgcnYgPSBhcHJfZGJkX3ByZXBhcmUoZHJp dmVyLCBwb29sLCBoYW5kbGUsIHF1ZXJ5LCBsYWJlbCwgJnN0YXRlbWVudCk7 DQogICAgaWYgKHJ2KSB7DQogICAgICAgIHByaW50ZigiUHJlcGFyZSBzdGF0 ZW1lbnQgZmFpbGVkIVxuJXNcbiIsDQogICAgICAgICAgICAgICBhcHJfZGJk X2Vycm9yKGRyaXZlciwgaGFuZGxlLCBydikpOw0KICAgICAgICByZXR1cm4g cnY7DQogICAgfQ0KICAgIHJ2ID0gZHJpdmVyLT5wc2VsZWN0KHBvb2wsIGhh bmRsZSwgTlVMTCwgJnJlcywgc3RhdGVtZW50LCAxLCAiMyIsIE5VTEwpOw0K ICAgIGlmIChydikgew0KICAgICAgICBwcmludGYoIkV4ZWMgb2YgcHJlcGFy ZWQgc3RhdGVtZW50IGZhaWxlZCFcbiVzXG4iLA0KICAgICAgICAgICAgICAg YXByX2RiZF9lcnJvcihkcml2ZXIsIGhhbmRsZSwgcnYpKTsNCiAgICAgICAg cmV0dXJuIHJ2Ow0KICAgIH0NCiAgICBpID0gMDsNCiAgICBwcmludGYoIlNl bGVjdGluZyByb3dzIHdoZXJlIGNvbDMgPD0gMyBhbmQgYmFyIHJvdyB3aGVy ZSBpdCdzIHVuc2V0LlxuU2hvdWxkIHNob3cgZm91ciByb3dzLlxuIik7DQog ICAgZm9yIChydiA9IGFwcl9kYmRfZ2V0X3Jvdyhkcml2ZXIsIHBvb2wsIHJl cywgJnJvdywgLTEpOw0KICAgICAgICAgcnYgPT0gMDsNCiAgICAgICAgIHJ2 ID0gYXByX2RiZF9nZXRfcm93KGRyaXZlciwgcG9vbCwgcmVzLCAmcm93LCAt MSkpIHsNCiAgICAgICAgcHJpbnRmKCJST1cgJWQ6CSIsIGkrKykgOw0KICAg ICAgICBmb3IgKG4gPSAwOyBuIDwgYXByX2RiZF9udW1fY29scyhkcml2ZXIs IHJlcyk7ICsrbikgew0KICAgICAgICAgICAgZW50cnkgPSBhcHJfZGJkX2dl dF9lbnRyeShkcml2ZXIsIHJvdywgbik7DQogICAgICAgICAgICBpZiAoZW50 cnkgPT0gTlVMTCkgew0KICAgICAgICAgICAgICAgIHByaW50ZigiKG51bGwp CSIpIDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2Ugew0KICAg ICAgICAgICAgICAgIHByaW50ZigiJXMJIiwgZW50cnkpOw0KICAgICAgICAg ICAgfQ0KICAgICAgICB9DQoJZnB1dHMoIlxuIiwgc3Rkb3V0KTsNCiAgICB9 DQogICAgcmV0dXJuIChydiA9PSAtMSkgPyAwIDogMTsNCn0NCnN0YXRpYyBp bnQgdGVzdF9wcXVlcnkoYXByX3Bvb2xfdCogcG9vbCwgYXByX2RiZF90KiBo YW5kbGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgYXByX2RiZF9kcml2 ZXJfdCogZHJpdmVyKQ0Kew0KICAgIGludCBpOw0KICAgIGludCBydiA9IDA7 DQogICAgY29uc3QgY2hhciAqcXVlcnk7DQogICAgYXByX2RiZF9wcmVwYXJl ZCAqc3RhdGVtZW50Ow0KICAgIGNvbnN0IGNoYXIgKmxhYmVsID0gInBxdWVy eSI7DQogICAgaW50IG5yb3dzOw0KICAgIHN0cnVjdCB7DQogICAgICAgIGNv bnN0IGNoYXIqIG5hbWU7DQogICAgICAgIGNvbnN0IGNoYXIqIHF1ZXJ5Ow0K ICAgIH0gcXVlcmllc1tdID0gew0KICAgICAgICB7ICJteXNxbCIsICJJTlNF UlQgSU5UTyBhcHJfZGJkX3Rlc3QgVkFMVUVTICg/ICwgPyAsID8pIiB9ICwN CiAgICAgICAgeyAicGdzcWwiLCAiSU5TRVJUIElOVE8gYXByX2RiZF90ZXN0 IFZBTFVFUyAoJHZhcmNoYXI7LCAkdmFyY2hhcjssICRpbnRlZ2VyOykiIH0g LA0KICAgICAgICB7IE5VTEwsIE5VTEwgfQ0KICAgIH07DQogICAgZm9yIChp ID0gMDsgcXVlcmllc1tpXS5uYW1lICE9IE5VTEw7ICsraSkgew0KICAgICAg ICBpZiAoICFzdHJjbXAocXVlcmllc1tpXS5uYW1lLCBhcHJfZGJkX25hbWUo ZHJpdmVyKSkpIHsNCiAgICAgICAgICAgIHF1ZXJ5ID0gcXVlcmllc1tpXS5x dWVyeTsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICB9DQogICAgfQ0K ICAgIGlmICghcXVlcnkpIHsNCiAgICAgICAgcmV0dXJuIC0xOw0KICAgIH0N Cg0KICAgIHJ2ID0gYXByX2RiZF9wcmVwYXJlKGRyaXZlciwgcG9vbCwgaGFu ZGxlLCBxdWVyeSwgbGFiZWwsICZzdGF0ZW1lbnQpOw0KICAgIGlmIChydikg ew0KICAgICAgICBwcmludGYoIlByZXBhcmUgc3RhdGVtZW50IGZhaWxlZCFc biVzXG4iLA0KICAgICAgICAgICAgICAgYXByX2RiZF9lcnJvcihkcml2ZXIs IGhhbmRsZSwgcnYpKTsNCiAgICAgICAgcmV0dXJuIHJ2Ow0KICAgIH0NCiAg ICBydiA9IGRyaXZlci0+cHF1ZXJ5KHBvb2wsIGhhbmRsZSwgTlVMTCwgJm5y b3dzLCBzdGF0ZW1lbnQsDQogICAgICAgICAgICAgICAgICAgICAgICAicHJl cGFyZWQiLCAiaW5zZXJ0IiwgIjIiLCBOVUxMKTsNCiAgICBpZiAocnYpIHsN CiAgICAgICAgcHJpbnRmKCJFeGVjIG9mIHByZXBhcmVkIHN0YXRlbWVudCBm YWlsZWQhXG4lc1xuIiwNCiAgICAgICAgICAgICAgIGFwcl9kYmRfZXJyb3Io ZHJpdmVyLCBoYW5kbGUsIHJ2KSk7DQogICAgICAgIHJldHVybiBydjsNCiAg ICB9DQogICAgcHJpbnRmKCJTaG93aW5nIHRhYmxlIChzaG91bGQgbm93IGNv bnRhaW4gcm93IFwicHJlcGFyZWQgaW5zZXJ0IDJcIilcbiIpOw0KICAgIHNl bGVjdF9zZXF1ZW50aWFsKHBvb2wsIGhhbmRsZSwgZHJpdmVyKTsNCiAgICBy ZXR1cm4gcnY7DQp9DQppbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3Yp DQp7DQogICAgYXByX3Bvb2xfdCAqcG9vbDsNCiAgICBjb25zdCBjaGFyICpu YW1lOw0KICAgIGNvbnN0IGNoYXIgKnBhcmFtczsNCiAgICBhcHJfZGJkX3Qg KnNxbCA9IE5VTEw7DQogICAgYXByX2RiZF9kcml2ZXJfdCAqZHJpdmVyID0g TlVMTDsNCiAgICBpbnQgcnY7DQoNCiAgICBhcHJfaW5pdGlhbGl6ZSgpOw0K ICAgIGFwcl9wb29sX2NyZWF0ZSgmcG9vbCwgTlVMTCk7DQoNCiAgICBpZiAo YXJnYyA+PSAyICYmIGFyZ2MgPD0gMykgew0KICAgICAgICBuYW1lID0gYXJn dlsxXTsNCiAgICAgICAgcGFyYW1zID0gKCBhcmdjID09IDMgKSA/IGFyZ3Zb Ml0gOiAiIjsNCiAgICAgICAgcnYgPSBhcHJfZGJkX29wZW4ocG9vbCwgcG9v bCwgbmFtZSwgcGFyYW1zLCAmc3FsLCAmZHJpdmVyKTsNCiAgICAgICAgc3dp dGNoIChydikgew0KICAgICAgICBjYXNlIEFQUl9TVUNDRVNTOg0KICAgICAg ICAgICBwcmludGYoIk9wZW5lZCAlc1slc10gT0tcbiIsIG5hbWUsIHBhcmFt cyk7DQogICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlIEFQUl9FR0VO RVJBTDoNCiAgICAgICAgICAgcHJpbnRmKCJGYWlsZWQgdG8gb3BlbiAlc1sl c11cbiIsIG5hbWUsIHBhcmFtcyk7DQogICAgICAgICAgIGJyZWFrOw0KICAg ICAgICBjYXNlIEFQUl9FTk9USU1QTDoNCiAgICAgICAgICAgcHJpbnRmKCJO byBkcml2ZXIgZm9yICVzIGF2YWlsYWJsZVxuIiwgbmFtZSk7DQogICAgICAg ICAgIGJyZWFrOw0KICAgICAgICBkZWZhdWx0OiAgICAgICAgLyogaXQncyBh IGJ1ZyBpZiBub25lIG9mIHRoZSBhYm92ZSBoYXBwZW4gKi8NCiAgICAgICAg ICAgcHJpbnRmKCJJbnRlcm5hbCBlcnJvciBvcGVuaW5nICVzWyVzXVxuIiwg bmFtZSwgcGFyYW1zKTsNCiAgICAgICAgICAgYnJlYWs7DQogICAgICAgIH0N CiAgICAgICAgaWYgKHJ2ID09IEFQUl9TVUNDRVNTKSB7DQogICAgICAgICAg ICBURVNUKCJjcmVhdGUgdGFibGUiLCBjcmVhdGVfdGFibGUpOw0KICAgICAg ICAgICAgVEVTVCgiaW5zZXJ0IHJvd3MiLCBpbnNlcnRfcm93cyk7DQogICAg ICAgICAgICBURVNUKCJpbnZhbGlkIG9wIiwgaW52YWxpZF9vcCk7DQogICAg ICAgICAgICBURVNUKCJzZWxlY3Qgc2VxdWVudGlhbCIsIHNlbGVjdF9zZXF1 ZW50aWFsKTsNCiAgICAgICAgICAgIFRFU1QoInNlbGVjdCByYW5kb20iLCBz ZWxlY3RfcmFuZG9tKTsNCiAgICAgICAgICAgIFRFU1QoInRyYW5zYWN0aW9u cyIsIHRlc3RfdHJhbnNhY3Rpb25zKTsNCiAgICAgICAgICAgIFRFU1QoInBy ZXBhcmVkIHNlbGVjdCIsIHRlc3RfcHNlbGVjdCk7DQogICAgICAgICAgICBU RVNUKCJwcmVwYXJlZCBxdWVyeSIsIHRlc3RfcHF1ZXJ5KTsNCiAgICAgICAg ICAgIFRFU1QoImRyb3AgdGFibGUiLCBkcm9wX3RhYmxlKTsNCiAgICAgICAg fQ0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgICAgZnByaW50ZihzdGRlcnIs ICJVc2FnZTogJXMgZHJpdmVyLW5hbWUgW3BhcmFtc11cbiIsIGFyZ3ZbMF0p Ow0KICAgIH0NCg0KICAgIGFwcl9wb29sX2Rlc3Ryb3kocG9vbCk7DQogICAg YXByX3Rlcm1pbmF0ZSgpOw0KICAgIHJldHVybiAwOw0KfQ0K ---1463810294-1892063039-1102595640=:6831--