From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with archive (Exim 4.43) id 1KRqP6-0007eM-Hh for mharc-grub-devel@gnu.org; Sat, 09 Aug 2008 11:30:52 -0400 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KRqP5-0007e9-Nw for grub-devel@gnu.org; Sat, 09 Aug 2008 11:30:51 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KRqP1-0007di-B9 for grub-devel@gnu.org; Sat, 09 Aug 2008 11:30:50 -0400 Received: from [199.232.76.173] (port=54591 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KRqP1-0007df-5J for grub-devel@gnu.org; Sat, 09 Aug 2008 11:30:47 -0400 Received: from ik-out-1112.google.com ([66.249.90.176]:33888) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1KRqP0-00089c-9N for grub-devel@gnu.org; Sat, 09 Aug 2008 11:30:46 -0400 Received: by ik-out-1112.google.com with SMTP id c21so1495062ika.2 for ; Sat, 09 Aug 2008 08:30:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:subject:from:to:in-reply-to :references:content-type:date:message-id:mime-version:x-mailer; bh=NUEO2Y+leAMO30ZWFtHQv05D+9Nd+RqNtiuRveXGmtU=; b=n10w1Rao5T2GTyZgVDGx2EsHI47vocv/Pd3OtYbF5h5lyBc/yXOqg8uwbPXenGqAsq ZLfpOOW0v4jf0OsU2+FGgm4rBIwQH3KAB2Gnr1DXj8dSJO3aZPAO9/pmaEuzU74Po3i5 SW83yZ3Y2RbtYO9olQ77zyaDxMarnaQcs1Mug= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=subject:from:to:in-reply-to:references:content-type:date:message-id :mime-version:x-mailer; b=TkPMCoS0lF+dTcjqwKM9OmgD/riBxIjCSi2Qf/Y8PP5IncGDzdlsYHg+Bp/l2CdvKW nJScYMHtVwMvOB3UU5mq0ZVYOxwtfWn0ekV88Q/1LotQXNtOs414N3sDm0oSP5ujhS0h BUu2VudJq5I2tDFAIcSg5G6oFWzMSpWbkYe/s= Received: by 10.210.49.7 with SMTP id w7mr415022ebw.77.1218295844405; Sat, 09 Aug 2008 08:30:44 -0700 (PDT) Received: from ?192.168.1.100? ( [213.37.137.93]) by mx.google.com with ESMTPS id b36sm2932547ika.5.2008.08.09.08.30.35 (version=SSLv3 cipher=RC4-MD5); Sat, 09 Aug 2008 08:30:40 -0700 (PDT) From: Javier =?ISO-8859-1?Q?Mart=EDn?= To: The development of GRUB 2 In-Reply-To: <1217954381.14674.31.camel@localhost> References: <1215137528.26019.58.camel@localhost> <87bq0sibu0.fsf@xs4all.nl> <1216601741.8334.122.camel@localhost> <877ib1khe9.fsf@xs4all.nl> <1217806150.9634.24.camel@localhost> <87iqug33m9.fsf@xs4all.nl> <1217891426.15145.38.camel@localhost> <87vdyfem5k.fsf@xs4all.nl> <1217954381.14674.31.camel@localhost> Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="=-jOux2lUg6qBVgM1vTUfs" Date: Sat, 09 Aug 2008 17:33:49 +0200 Message-Id: <1218296029.20937.10.camel@localhost> Mime-Version: 1.0 X-Mailer: Evolution 2.22.3.1 X-detected-kernel: by monty-python.gnu.org: Linux 2.6 (newer, 2) Subject: Re: [PATCH] Drivemap module X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: The development of GRUB 2 List-Id: The development of GRUB 2 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 09 Aug 2008 15:30:52 -0000 --=-jOux2lUg6qBVgM1vTUfs Content-Type: multipart/mixed; boundary="=-Bak+yYNECC5Ji1bhs1IX" --=-Bak+yYNECC5Ji1bhs1IX Content-Type: text/plain Content-Transfer-Encoding: quoted-printable In this reply-to-myself hoping to keep the thread continuity, I put forth the new "version 7" of the patch with the following changes: - A new switch -s/--swap has been implemented, so that running "drivemap -s hd0 hd1" is equivalent to issuing the command twice with the arguments normal, then reversed. There is one exception: if the first mapping fails or the second drive does not exist, no mapping is performed, whereas hand-performing the swap would have successfully assigned BIOS disk #1 to hd0, then failed to assign bd#0 to non-existent hd1. - Raw BIOS disk number parsing has been removed: the syntax "drivemap hd1 0x80" is no longer legal. However, one can still map non-existent BIOS disk numbers with "drivemap hd0 hd42" for example and (more controversially, maybe I'll add a check eventually) assign a floppy to an HD and back. The only file changed from the last patch ("version 6") is drivemap.c: the rest of it should be the same, so if anyone was reviewing it you can seamlessly "jump" to version 7. In particular, the functional changes are localized in the drivemap_cmd function proper, and there are cosmetic changes elsewhere (spurious tabs removed, etc.). -Habbit --=-Bak+yYNECC5Ji1bhs1IX Content-Disposition: attachment; filename=drivemap.patch.7 Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name=drivemap.patch.7; charset=UTF-8 SW5kZXg6IGNvbW1hbmRzL2kzODYvcGMvZHJpdmVtYXAuYw0KPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGNvbW1h bmRzL2kzODYvcGMvZHJpdmVtYXAuYwkocmV2aXNpw7NuOiAwKQ0KKysrIGNvbW1hbmRzL2kzODYv cGMvZHJpdmVtYXAuYwkocmV2aXNpw7NuOiAwKQ0KQEAgLTAsMCArMSw0MzMgQEANCisvKiBkcml2 ZW1hcC5jIC0gY29tbWFuZCB0byBtYW5hZ2UgdGhlIEJJT1MgZHJpdmUgbWFwcGluZ3MuICAqLw0K Ky8qDQorICogIEdSVUIgIC0tICBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXINCisgKiAgQ29weXJp Z2h0IChDKSAyMDA4ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4NCisgKg0KKyAqICBH UlVCIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkNCisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkNCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg ZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3INCisgKiAgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4NCisgKg0KKyAqICBHUlVCIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQorICogIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCisg KiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCisgKg0KKyAq ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZQ0KKyAqICBhbG9uZyB3aXRoIEdSVUIuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3 dy5nbnUub3JnL2xpY2Vuc2VzLz4uDQorICovDQorDQorI2luY2x1ZGUgPGdydWIvbWFjaGluZS9k cml2ZW1hcC5oPg0KKyNpbmNsdWRlIDxncnViL25vcm1hbC5oPg0KKyNpbmNsdWRlIDxncnViL2Rs Lmg+DQorI2luY2x1ZGUgPGdydWIvbW0uaD4NCisjaW5jbHVkZSA8Z3J1Yi9taXNjLmg+DQorI2lu Y2x1ZGUgPGdydWIvZGlzay5oPg0KKyNpbmNsdWRlIDxncnViL2xvYWRlci5oPg0KKyNpbmNsdWRl IDxncnViL21hY2hpbmUvbG9hZGVyLmg+DQorI2luY2x1ZGUgPGdydWIvbWFjaGluZS9iaW9zZGlz ay5oPg0KKw0KKyNkZWZpbmUgTU9ETkFNRSAiZHJpdmVtYXAiDQorDQorc3RhdGljIGNvbnN0IHN0 cnVjdCBncnViX2FyZ19vcHRpb24gb3B0aW9uc1tdID0gew0KKyAgeyJsaXN0IiwgJ2wnLCAwLCAi c2hvdyB0aGUgY3VycmVudCBtYXBwaW5ncyIsIDAsIDB9LA0KKyAgeyJyZXNldCIsICdyJywgMCwg InJlc2V0IGFsbCBtYXBwaW5ncyB0byB0aGUgZGVmYXVsdCB2YWx1ZXMiLCAwLCAwfSwNCisgIHsi c3dhcCIsICdzJywgMCwgInBlcmZvcm0gYm90aCBkaXJlY3QgYW5kIHJldmVyc2UgbWFwcGluZ3Mi LCAwLCAwfSwNCisgIHswLCAwLCAwLCAwLCAwLCAwfQ0KK307DQorDQorZW51bSBvcHRfaWR4cyB7 DQorICBPUFRJRFhfTElTVCA9IDAsDQorICBPUFRJRFhfUkVTRVQsDQorICBPUFRJRFhfU1dBUCwN Cit9Ow0KKw0KK3R5cGVkZWYgc3RydWN0IGRyaXZlbWFwX25vZGUNCit7DQorICBncnViX3VpbnQ4 X3QgbmV3ZHJpdmU7DQorICBncnViX3VpbnQ4X3QgcmVkaXJ0bzsNCisgIHN0cnVjdCBkcml2ZW1h cF9ub2RlICpuZXh0Ow0KK30gZHJpdmVtYXBfbm9kZV90Ow0KKw0KK3N0YXRpYyBkcml2ZW1hcF9u b2RlX3QgKmRyaXZlbWFwOw0KK3N0YXRpYyBncnViX3ByZWJvb3RfaG9va2lkIGluc3RoYW5kbGVy X2hvb2s7DQorc3RhdGljIGdydWJfZXJyX3QgaW5zdGFsbF9pbnQxM19oYW5kbGVyICh2b2lkKTsN CisNCisvKiBQdXRzIHRoZSBzcGVjaWZpZWQgbWFwcGluZyBpbnRvIHRoZSB0YWJsZSwgcmVwbGFj aW5nIGFuIGV4aXN0aW5nIG1hcHBpbmcNCisgICBmb3IgbmV3ZHJpdmUgb3IgYWRkaW5nIGEgbmV3 IG9uZSBpZiByZXF1aXJlZC4gICovDQorc3RhdGljIGdydWJfZXJyX3QNCitkcml2ZW1hcF9zZXQg KGdydWJfdWludDhfdCBuZXdkcml2ZSwgZ3J1Yl91aW50OF90IHJlZGlydG8pDQorew0KKyAgZHJp dmVtYXBfbm9kZV90ICptYXBwaW5nID0gMDsNCisgIGRyaXZlbWFwX25vZGVfdCAqc2VhcmNoID0g ZHJpdmVtYXA7DQorICB3aGlsZSAoc2VhcmNoKQ0KKyAgICB7DQorICAgICAgaWYgKHNlYXJjaC0+ bmV3ZHJpdmUgPT0gbmV3ZHJpdmUpDQorICAgICAgICB7DQorICAgICAgICAgIG1hcHBpbmcgPSBz ZWFyY2g7DQorICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgfQ0KKyAgICAgIHNlYXJjaCA9IHNl YXJjaC0+bmV4dDsNCisgICAgfQ0KKw0KKyAgDQorICAvKiBDaGVjayBmb3IgcHJlLWV4aXN0aW5n IG1hcHBpbmdzIHRvIG1vZGlmeSBiZWZvcmUgY3JlYXRpbmcgYSBuZXcgb25lLiAgKi8NCisgIGlm IChtYXBwaW5nKQ0KKyAgICBtYXBwaW5nLT5yZWRpcnRvID0gcmVkaXJ0bzsNCisgIGVsc2UgDQor ICAgIHsNCisgICAgICBtYXBwaW5nID0gZ3J1Yl9tYWxsb2MgKHNpemVvZiAoZHJpdmVtYXBfbm9k ZV90KSk7DQorICAgICAgaWYgKCFtYXBwaW5nKQ0KKyAgICAgICAgcmV0dXJuIGdydWJfZXJyb3Ig KEdSVUJfRVJSX09VVF9PRl9NRU1PUlksDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgImNh bm5vdCBhbGxvY2F0ZSBtYXAgZW50cnksIG5vdCBlbm91Z2ggbWVtb3J5Iik7DQorICAgICAgbWFw cGluZy0+bmV3ZHJpdmUgPSBuZXdkcml2ZTsNCisgICAgICBtYXBwaW5nLT5yZWRpcnRvID0gcmVk aXJ0bzsNCisgICAgICBtYXBwaW5nLT5uZXh0ID0gZHJpdmVtYXA7DQorICAgICAgZHJpdmVtYXAg PSBtYXBwaW5nOw0KKyAgICB9DQorICByZXR1cm4gR1JVQl9FUlJfTk9ORTsNCit9DQorDQorLyog UmVtb3ZlcyB0aGUgbWFwcGluZyBmb3IgbmV3ZHJpdmUgZnJvbSB0aGUgdGFibGUuICBJZiB0aGVy ZSBpcyBubyBtYXBwaW5nLA0KKyAgIHRoZW4gdGhpcyBmdW5jdGlvbiBiZWhhdmVzIGxpa2UgYSBu by1vcCBvbiB0aGUgbWFwLiAgKi8NCitzdGF0aWMgdm9pZA0KK2RyaXZlbWFwX3JlbW92ZSAoZ3J1 Yl91aW50OF90IG5ld2RyaXZlKQ0KK3sNCisgIGRyaXZlbWFwX25vZGVfdCAqbWFwcGluZyA9IDA7 DQorICBkcml2ZW1hcF9ub2RlX3QgKnNlYXJjaCA9IGRyaXZlbWFwOw0KKyAgZHJpdmVtYXBfbm9k ZV90ICpwcmV2aW91cyA9IDA7DQorDQorICB3aGlsZSAoc2VhcmNoKQ0KKyAgICB7DQorICAgICAg aWYgKHNlYXJjaC0+bmV3ZHJpdmUgPT0gbmV3ZHJpdmUpDQorICAgICAgICB7DQorICAgICAgICAg IG1hcHBpbmcgPSBzZWFyY2g7DQorICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgfQ0KKyAgICAg IHByZXZpb3VzID0gc2VhcmNoOw0KKyAgICAgIHNlYXJjaCA9IHNlYXJjaC0+bmV4dDsNCisgICAg fQ0KKw0KKyAgaWYgKG1hcHBpbmcpDQorICAgIHsNCisgICAgICBpZiAocHJldmlvdXMpDQorICAg ICAgICBwcmV2aW91cy0+bmV4dCA9IG1hcHBpbmctPm5leHQ7DQorICAgICAgZWxzZSAvKiBFbnRy eSB3YXMgaGVhZCBvZiBsaXN0LiAgKi8NCisgICAgICAgIGRyaXZlbWFwID0gbWFwcGluZy0+bmV4 dDsNCisgICAgICBncnViX2ZyZWUgKG1hcHBpbmcpOw0KKyAgICB9DQorfQ0KKw0KKy8qIEdpdmVu IGEgZGV2aWNlIG5hbWUsIHJlc29sdmVzIGl0cyBCSU9TIGRpc2sgbnVtYmVyIGFuZCBzdG9yZXMg aXQgaW4gdGhlDQorICAgcGFzc2VkIGxvY2F0aW9uLCB3aGljaCBzaG91bGQgb25seSBiZSB0cnVz dGVkIGlmIEVSUl9OT05FIGlzIHJldHVybmVkLiAgKi8NCitzdGF0aWMgZ3J1Yl9lcnJfdA0KK3Bh cnNlX2Jpb3NkaXNrIChjb25zdCBjaGFyICpuYW1lLCBncnViX3VpbnQ4X3QgKmRpc2tudW0pDQor ew0KKyAgZ3J1Yl9kaXNrX3QgZGlzazsNCisgIGlmICghbmFtZSB8fCAqbmFtZSA9PSAwKQ0KKyAg ICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0FSR1VNRU5ULCAiZGV2aWNlIG5hbWUg ZW1wdHkiKTsNCisgIC8qIFNraXAgdGhlIGZpcnN0ICggaW4gKGhkMCkgLSBkaXNrX29wZW4gd2Fu dHMganVzdCB0aGUgbmFtZS4gICovDQorICBpZiAoKm5hbWUgPT0gJygnKQ0KKyAgICBuYW1lKys7 DQorICANCisgIGRpc2sgPSBncnViX2Rpc2tfb3BlbiAobmFtZSk7DQorICBpZiAoIWRpc2spDQor ICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9VTktOT1dOX0RFVklDRSwgInVua25vd24g ZGV2aWNlIFwiJXNcIiIsIG5hbWUpOw0KKyAgZWxzZQ0KKyAgICB7DQorICAgICAgY29uc3QgZW51 bSBncnViX2Rpc2tfZGV2X2lkIGlkID0gZGlzay0+ZGV2LT5pZDsNCisgICAgICAvKiBUaGUgZm9s bG93aW5nIGFzc2lnbm1lbnQgaXMgb25seSBzb3VuZCBpZiB0aGUgZGV2aWNlIGlzIGluZGVlZCBh DQorICAgICAgICAgYmlvc2Rpc2suICBUaGUgY2FsbGVyIG11c3QgY2hlY2sgdGhlIHJldHVybiB2 YWx1ZS4gICovDQorICAgICAgaWYgKGRpc2tudW0pDQorICAgICAgICAqZGlza251bSA9IGRpc2st PmlkOw0KKyAgICAgIGdydWJfZGlza19jbG9zZSAoZGlzayk7DQorICAgICAgaWYgKGlkID09IEdS VUJfRElTS19ERVZJQ0VfQklPU0RJU0tfSUQpDQorICAgICAgICByZXR1cm4gR1JVQl9FUlJfTk9O RTsNCisgICAgICBlbHNlIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfREVWSUNFLCAi JXMgaXMgbm90IGEgQklPUyBkaXNrIiwgbmFtZSk7DQorICAgIH0NCit9DQorDQorLyogR2l2ZW4g YSBCSU9TIGRpc2sgbnVtYmVyLCByZXR1cm5zIGl0cyBHUlVCIGRldmljZSBuYW1lIGlmIGl0IGV4 aXN0cy4NCisgICBGb3Igbm9uZXhpc3RpbmcgQklPUyBkaXNrIG51bWJlcnMsIHRoaXMgZnVuY3Rp b24gcmV0dXJucw0KKyAgIEdSVUJfRVJSX1VOS05PV05fREVWSUNFLiAgKi8NCitzdGF0aWMgZ3J1 Yl9lcnJfdA0KK3JldnBhcnNlX2Jpb3NkaXNrKGNvbnN0IGdydWJfdWludDhfdCBkbnVtLCBjb25z dCBjaGFyICoqb3V0cHV0KQ0KK3sNCisgIGludCBmb3VuZCA9IDA7DQorICBhdXRvIGludCBmaW5k IChjb25zdCBjaGFyICpuYW1lKTsNCisgIGludCBmaW5kIChjb25zdCBjaGFyICpuYW1lKQ0KKyAg ew0KKyAgICBjb25zdCBncnViX2Rpc2tfdCBkaXNrID0gZ3J1Yl9kaXNrX29wZW4gKG5hbWUpOw0K KyAgICBpZiAoIWRpc2spDQorICAgICAgcmV0dXJuIDA7DQorICAgIGVsc2UNCisgICAgICB7DQor ICAgICAgICBpZiAoZGlzay0+aWQgPT0gZG51bSAmJiBkaXNrLT5kZXYtPmlkID09IEdSVUJfRElT S19ERVZJQ0VfQklPU0RJU0tfSUQpDQorICAgICAgICAgIHsNCisgICAgICAgICAgICBmb3VuZCA9 IDE7DQorICAgICAgICAgICAgaWYgKG91dHB1dCkNCisgICAgICAgICAgICAgICpvdXRwdXQgPSBu YW1lOw0KKyAgICAgICAgICB9DQorICAgICAgICBncnViX2Rpc2tfY2xvc2UgKGRpc2spOw0KKyAg ICAgICAgcmV0dXJuIGZvdW5kOw0KKyAgICAgIH0NCisgIH0NCisNCisgIGdydWJfZGlza19kZXZf aXRlcmF0ZSAoZmluZCk7DQorICBpZiAoZm91bmQpDQorICAgIHJldHVybiBHUlVCX0VSUl9OT05F Ow0KKyAgZWxzZQ0KKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfVU5LTk9XTl9ERVZJ Q0UsICJCSU9TIGRpc2sgJTAyeCBub3QgZm91bmQiLCBkbnVtKTsNCit9DQorDQorLyogR2l2ZW4g YSBHUlVCLWxpa2UgZGV2aWNlIG5hbWUgYW5kIGEgY29udmVuaWVudCBsb2NhdGlvbiwgc3RvcmVz IHRoZSByZWxhdGVkDQorICAgQklPUyBkaXNrIG51bWJlci4gIEFjY2VwdHMgZGV2aWNlcyBsaWtl IFwoKGZ8aClkTlwpLCB3aXRoIDAgPD0gTiA8IDEyOC4gICovDQorc3RhdGljIGdydWJfZXJyX3QN Cit0cnlwYXJzZV9kaXNrc3RyaW5nIChjb25zdCBjaGFyICpzdHIsIGdydWJfdWludDhfdCAqb3V0 cHV0KQ0KK3sNCisgIGlmICghc3RyIHx8ICpzdHIgPT0gMCkNCisgICAgZ290byBmYWlsOw0KKyAg LyogU2tpcCBvcGVuaW5nIHBhcmVuIGluIG9yZGVyIHRvIGFsbG93IGJvdGggKGhkMCkgYW5kIGhk MC4gICovDQorICBpZiAoKnN0ciA9PSAnKCcpDQorICAgIHN0cisrOw0KKyAgaWYgKChzdHJbMF0g PT0gJ2YnIHx8IHN0clswXSA9PSAnaCcpICYmIHN0clsxXSA9PSAnZCcpDQorICAgIHsNCisgICAg ICBncnViX3VpbnQ4X3QgYmlvc19udW0gPSAoc3RyWzBdID09ICdoJyk/IDB4ODAgOiAweDAwOw0K KyAgICAgIGdydWJfZXJybm8gPSBHUlVCX0VSUl9OT05FOw0KKyAgICAgIHVuc2lnbmVkIGxvbmcg ZHJpdmVudW0gPSBncnViX3N0cnRvdWwgKHN0ciArIDIsIDAsIDApOw0KKyAgICAgIGlmIChncnVi X2Vycm5vICE9IEdSVUJfRVJSX05PTkUgfHwgZHJpdmVudW0gPiAxMjcpDQorICAgICAgICB7DQor ICAgICAgICAgIC8qIE4gbm90IGEgbnVtYmVyIG9yIG91dCBvZiByYW5nZS4gICovDQorICAgICAg ICAgIGdvdG8gZmFpbDsNCisgICAgICAgIH0NCisgICAgICBlbHNlDQorICAgICAgICB7DQorICAg ICAgICAgIGJpb3NfbnVtIHw9IGRyaXZlbnVtOw0KKyAgICAgICAgICBpZiAob3V0cHV0KQ0KKyAg ICAgICAgICAgICpvdXRwdXQgPSBiaW9zX251bTsNCisgICAgICAgICAgcmV0dXJuIEdSVUJfRVJS X05PTkU7DQorICAgICAgICB9DQorICAgIH0NCisgIGVsc2UNCisgICAgZ290byBmYWlsOw0KKw0K K2ZhaWw6DQorICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0FSR1VNRU5ULCAiZGV2 aWNlIGZvcm1hdCBcIiVzXCIgaW52YWxpZDogbXVzdCINCisgICAgICAgICAgICAgICAgICAgICAi YmUgKGZ8aClkTiwgd2l0aCAwIDw9IE4gPCAxMjgiLCBzdHIpOw0KK30NCisNCitzdGF0aWMgZ3J1 Yl9lcnJfdA0KK2dydWJfY21kX2RyaXZlbWFwIChzdHJ1Y3QgZ3J1Yl9hcmdfbGlzdCAqc3RhdGUs IGludCBhcmdjLCBjaGFyICoqYXJncykNCit7DQorICBpZiAoc3RhdGVbT1BUSURYX0xJU1RdLnNl dCkNCisgICAgew0KKyAgICAgIC8qIFNob3c6IGxpc3QgbWFwcGluZ3MuICAqLw0KKyAgICAgIGlm ICghZHJpdmVtYXApDQorICAgICAgICBncnViX3ByaW50ZiAoIk5vIGRyaXZlcyBoYXZlIGJlZW4g cmVtYXBwZWQiKTsNCisgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgIGdydWJfcHJp bnRmICgiU2hvd2luZyBvbmx5IHJlbWFwcGVkIGRyaXZlcy5cbiIpOw0KKyAgICAgICAgICBncnVi X3ByaW50ZiAoIkJJT1MgZGlzayAjbnVtIC0tLS0+IEdSVUIgZGV2aWNlXG4iKTsNCisgICAgICAg ICAgZHJpdmVtYXBfbm9kZV90ICpjdXJub2RlID0gZHJpdmVtYXA7DQorICAgICAgICAgIHdoaWxl IChjdXJub2RlKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRu YW1lID0gMDsNCisgICAgICAgICAgICAgIGdydWJfZXJyX3QgZXJyID0gcmV2cGFyc2VfYmlvc2Rp c2sgKGN1cm5vZGUtPnJlZGlydG8sICZkbmFtZSk7DQorICAgICAgICAgICAgICBpZiAoZXJyICE9 IEdSVUJfRVJSX05PTkUpDQorICAgICAgICAgICAgICAgIHJldHVybiBncnViX2Vycm9yIChlcnIs ICJpbnZhbGlkIG1hcHBpbmc6IG5vbi1leGlzdGVudCBkaXNrIg0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAib3Igbm90IG1hbmFnZWQgYnkgdGhlIEJJT1MiKTsNCisg ICAgICAgICAgICAgIGdydWJfcHJpbnRmKCIlY0QgIyUtM3UgKDB4JTAyeCkgICAgICAgJXNcbiIs DQorICAgICAgICAgICAgICAgICAgICAgICAgICAoY3Vybm9kZS0+bmV3ZHJpdmUgJiAweDgwKSA/ ICdIJyA6ICdGJywNCisgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cm5vZGUtPm5ld2RyaXZl ICYgMHg3RiwgY3Vybm9kZS0+bmV3ZHJpdmUsIGRuYW1lKTsNCisgICAgICAgICAgICAgIGN1cm5v ZGUgPSBjdXJub2RlLT5uZXh0Ow0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgfQ0K KyAgZWxzZSBpZiAoc3RhdGVbT1BUSURYX1JFU0VUXS5zZXQpDQorICAgIHsNCisgICAgICAvKiBS ZXNldDoganVzdCBkZWxldGUgYWxsIG1hcHBpbmdzLCBmcmVlaW5nIHRoZWlyIG1lbW9yeS4gICov DQorICAgICAgZHJpdmVtYXBfbm9kZV90ICpjdXJub2RlID0gZHJpdmVtYXA7DQorICAgICAgZHJp dmVtYXBfbm9kZV90ICpwcmV2bm9kZSA9IDA7DQorICAgICAgd2hpbGUgKGN1cm5vZGUpDQorICAg ICAgICB7DQorICAgICAgICAgIHByZXZub2RlID0gY3Vybm9kZTsNCisgICAgICAgICAgY3Vybm9k ZSA9IGN1cm5vZGUtPm5leHQ7DQorICAgICAgICAgIGdydWJfZnJlZSAocHJldm5vZGUpOw0KKyAg ICAgICAgfQ0KKyAgICAgIGRyaXZlbWFwID0gMDsNCisgICAgfQ0KKyAgZWxzZQ0KKyAgICB7DQor ICAgICAgLyogTmVpdGhlciBmbGFnOiBwdXQgbWFwcGluZy4gICovDQorICAgICAgZ3J1Yl91aW50 OF90IG1hcGZyb20gPSAwOw0KKyAgICAgIGdydWJfdWludDhfdCBtYXB0byA9IDB4RkY7DQorICAg ICAgZ3J1Yl9lcnJfdCBlcnI7DQorICAgICAgDQorICAgICAgaWYgKGFyZ2MgIT0gMikNCisgICAg ICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfQVJHVU1FTlQsICJ0d28gYXJndW1l bnRzIHJlcXVpcmVkIik7DQorDQorICAgICAgZXJyID0gcGFyc2VfYmlvc2Rpc2sgKGFyZ3NbMF0s ICZtYXBmcm9tKTsNCisgICAgICBpZiAoZXJyICE9IEdSVUJfRVJSX05PTkUpDQorICAgICAgICBy ZXR1cm4gZXJyOw0KKyAgICAgIA0KKyAgICAgIC8qIFdoZW4gc3dhcHBpbmcgd2UgcmVxdWlyZSBi b3RoIGRldmljZXMgdG8gYmUgQklPUyBkaXNrcywgYnV0IHdoZW4NCisgICAgICAgICBwZXJmb3Jt aW5nIGRpcmVjdCBtYXBwaW5ncyB3ZSBvbmx5IHJlcXVpcmUgdGhlIDJuZCBhcmd1bWVudCB0byBs b29rDQorICAgICAgICAgbGlrZSBhIEJJT1MgZGlzayBpbiBvcmRlciB0byByZXNvbHZlIGl0IGlu dG8gYSBCSU9TIGRpc2sgbnVtYmVyLiAgKi8NCisgICAgICBpZiAoc3RhdGVbT1BUSURYX1NXQVBd LnNldCkNCisgICAgICAgIGVyciA9IHBhcnNlX2Jpb3NkaXNrIChhcmdzWzFdLCAmbWFwdG8pOw0K KyAgICAgIGVsc2UNCisgICAgICAgIGVyciA9IHRyeXBhcnNlX2Rpc2tzdHJpbmcgKGFyZ3NbMV0s ICZtYXB0byk7DQorICAgICAgaWYgKGVyciAhPSBHUlVCX0VSUl9OT05FKQ0KKyAgICAgICAgcmV0 dXJuIGVycjsNCisgICAgICANCisgICAgICBpZiAobWFwdG8gPT0gbWFwZnJvbSkNCisgICAgICAg IHsNCisgICAgICAgICAgLyogUmVzZXQgdG8gZGVmYXVsdC4gICovDQorICAgICAgICAgIGdydWJf ZHByaW50ZiAoTU9ETkFNRSwgIlJlbW92aW5nIHRoZSBtYXBwaW5nIGZvciAlcyAoJTAyeCkiLCBh cmdzWzBdLCBtYXBmcm9tKTsNCisgICAgICAgICAgZHJpdmVtYXBfcmVtb3ZlIChtYXBmcm9tKTsN CisgICAgICAgIH0NCisgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgIC8qIFNldCB0 aGUgbWFwcGluZyBmb3IgdGhlIGRpc2sgKG92ZXJ3cml0ZXMgYW55IGV4aXN0aW5nIG1hcHBpbmcp LiAgKi8NCisgICAgICAgICAgZ3J1Yl9kcHJpbnRmIChNT0ROQU1FLCAiJXMgJXMgKCUwMngpID0g JXMgKCUwMngpXG4iLA0KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlW09QVElEWF9TV0FQ XS5zZXQgPyAiU3dhcHBpbmciIDogIk1hcHBpbmciLA0KKyAgICAgICAgICAgICAgICAgICAgICAg IGFyZ3NbMV0sIG1hcHRvLCBhcmdzWzBdLCBtYXBmcm9tKTsNCisgICAgICAgICAgZXJyID0gZHJp dmVtYXBfc2V0IChtYXB0bywgbWFwZnJvbSk7DQorICAgICAgICAgIC8qIElmIC1zLCBwZXJmb3Jt IHRoZSByZXZlcnNlIG1hcHBpbmcgdG9vIChvbmx5IGlmIHRoZSBmaXJzdCB3YXMgT0spLiAgKi8N CisgICAgICAgICAgaWYgKHN0YXRlW09QVElEWF9TV0FQXS5zZXQgJiYgZXJyID09IEdSVUJfRVJS X05PTkUpDQorICAgICAgICAgICAgZXJyID0gZHJpdmVtYXBfc2V0IChtYXBmcm9tLCBtYXB0byk7 DQorICAgICAgICAgIHJldHVybiBlcnI7DQorICAgICAgICB9DQorICAgIH0NCisNCisgIHJldHVy biBHUlVCX0VSUl9OT05FOw0KK30NCisNCit0eXBlZGVmIHN0cnVjdCBfX2F0dHJpYnV0ZV9fICgo cGFja2VkKSkgaW50MTNtYXBfbm9kZQ0KK3sNCisgIGdydWJfdWludDhfdCBkaXNrbnVtOw0KKyAg Z3J1Yl91aW50OF90IG1hcHRvOw0KK30gaW50MTNtYXBfbm9kZV90Ow0KKw0KKy8qIFRoZSBtaW4g YW1vdW50IG9mIG1lbSB0aGF0IG11c3QgcmVtYWluIGZyZWUgYWZ0ZXIgaW5zdGFsbGluZyB0aGUg aGFuZGxlci4NCisgICAzMiBLaUIgaXMganVzdCBhYm92ZSAweDdDMDAtMHg3RTAwLCB3aGVyZSB0 aGUgYm9vdHNlY3RvciBpcyBsb2FkZWQuICAqLw0KKyNkZWZpbmUgTUlOX0ZSRUVfTUVNX0tCIDMy DQorI2RlZmluZSBJTlQxM0hfT0ZGU0VUKHgpICggKChncnViX3VpbnQ4X3QqKSh4KSkgLSAoKGdy dWJfdWludDhfdCopJmdydWJfZHJpdmVtYXBfaW50MTNfaGFuZGxlcl9iYXNlKSApDQorI2RlZmlu ZSBJTlQxM0hfUkVCQVNFKHgpICggKHZvaWQqKSAoKChncnViX3VpbnQ4X3QqKWhhbmRsZXJfYmFz ZSkgKyAoeCkpICkNCisjZGVmaW5lIElOVDEzSF9UT05FV0FERFIoeCkgSU5UMTNIX1JFQkFTRSgg SU5UMTNIX09GRlNFVCggeCApICkNCisNCisvKiBJbnQxM2ggaGFuZGxlciBpbnN0YWxsZXIgLSBy ZXNlcnZlcyBjb252ZW50aW9uYWwgbWVtb3J5IGZvciB0aGUgaGFuZGxlciwNCisgICBjb3BpZXMg aXQgb3ZlciBhbmQgc2V0cyB0aGUgSVZUIGVudHJ5IGZvciBpbnQxM2guICANCisgICBUaGlzIGNv ZGUgcmVzdHMgb24gdGhlIGFzc3VtcHRpb24gdGhhdCBHUlVCIGRvZXMgbm90IGFjdGl2YXRlIGFu eSBraW5kIG9mDQorICAgbWVtb3J5IG1hcHBpbmcgYXBhcnQgZnJvbSBpZGVudGl0eSBwYWdpbmcs IHNpbmNlIGl0IGFjY2Vzc2VzIHJlYWxtb2RlDQorICAgc3RydWN0dXJlcyBieSB0aGVpciBhYnNv bHV0ZSBhZGRyZXNzZXMsIGxpa2UgdGhlIElWVCBhdCAwIG9yIHRoZSBCREEgYXQNCisgICAweDQw MDsgYW5kIHRyYW5zZm9ybXMgYSBwbW9kZSBwb2ludGVyIGludG8gYSBybW9kZSBzZWc6b2ZmIGZh ciBwdHIuICAqLw0KK3N0YXRpYyBncnViX2Vycl90DQoraW5zdGFsbF9pbnQxM19oYW5kbGVyICh2 b2lkKQ0KK3sNCisgIGdydWJfc2l6ZV90IGVudHJpZXMgPSAwOw0KKyAgZHJpdmVtYXBfbm9kZV90 ICpjdXJlbnRyeSA9IGRyaXZlbWFwOw0KKyAgLyogQ291bnQgZW50cmllcyB0byBwcmVwYXJlIGEg Y29udGlndW91cyBtYXAgYmxvY2suICAqLw0KKyAgd2hpbGUgKGN1cmVudHJ5KQ0KKyAgICB7DQor ICAgICAgZW50cmllcysrOw0KKyAgICAgIGN1cmVudHJ5ID0gY3VyZW50cnktPm5leHQ7DQorICAg IH0NCisgIGlmIChlbnRyaWVzID09IDApDQorICAgIHsNCisgICAgICAvKiBObyBuZWVkIHRvIGlu c3RhbGwgdGhlIGludDEzaCBoYW5kbGVyLiAgKi8NCisgICAgICBncnViX2RwcmludGYgKE1PRE5B TUUsICJObyBkcml2ZXMgbWFya2VkIGFzIHJlbWFwcGVkLCBpbnN0YWxsYXRpb24gb2YiDQorICAg ICAgICAgICAgICAgICAgICAiYW4gaW50MTNoIGhhbmRsZXIgaXMgbm90IHJlcXVpcmVkLiIpOw0K KyAgICAgIHJldHVybiBHUlVCX0VSUl9OT05FOw0KKyAgICB9DQorICBlbHNlDQorICAgIHsNCisg ICAgICAvKiBSZWFsIG1vZGUgSVZUIHNsb3QgKHNlZzpvZmYgZmFyIHBvaW50ZXIpIGZvciBpbnRl cnJ1cHQgMHgxMy4gICovDQorICAgICAgZ3J1Yl91aW50MzJfdCAqaXZ0c2xvdCA9IChncnViX3Vp bnQzMl90KikweDAwMDAwMDRjOw0KKyAgICAgIC8qIEJEQSBvZmZzZXQgMHgxMyBjb250YWlucyB0 aGUgdG9wIG9mIGNvbnZlbnRpb25hbCBtZW1vcnksIGluIGtpQi4gICovDQorICAgICAgZ3J1Yl91 aW50MTZfdCAqYnBhX2ZyZWVrYiA9IChncnViX3VpbnQxNl90KikweDAwMDAwNDEzOw0KKyAgICAg IC8qIFNpemUgb2YgdGhlIGZ1bGwgaW50MTMgaGFuZGxlciAiYnVuZGxlIiwgaW5jbHVkaW5nIGNv ZGUgYW5kIG1hcC4gICovDQorICAgICAgZ3J1Yl9zaXplX3QgdG90YWxfc2l6ZTsNCisgICAgICAv KiBUaGUgZm9ybWVyLCBjZWlsLXJvdW5kZWQgdG8gS2lCLiAgKi8NCisgICAgICBncnViX3VpbnQx Nl90IHBheWxvYWRfc2l6ZWtiOw0KKyAgICAgIC8qIEJhc2UgYWRkcmVzcyBvZiB0aGUgc3BhY2Ug cmVzZXJ2ZWQgZm9yIHRoZSBoYW5kbGVyIGJ1bmRsZS4gICovDQorICAgICAgZ3J1Yl91aW50OF90 ICpoYW5kbGVyX2Jhc2U7DQorICAgICAgLyogQWRkcmVzcyBvZiB0aGUgbWFwIHdpdGhpbiB0aGUg ZGVwbG95ZWQgYnVuZGxlLiAgKi8NCisgICAgICBpbnQxM21hcF9ub2RlX3QgKmhhbmRsZXJfbWFw Ow0KKyAgICAgIC8qIFJlYWwgbW9kZSBJVlQgZW50cnkgKHNlZzpvZmYgZmFyIHBvaW50ZXIpIGZv ciB0aGUgbmV3IGhhbmRsZXIuICAqLw0KKyAgICAgIGdydWJfdWludDMyX3QgaXZ0ZW50cnk7DQor DQorICAgICAgZ3J1Yl9kcHJpbnRmIChNT0ROQU1FLCAiSW5zdGFsbGluZyBpbnQxM2ggaGFuZGxl ci4uLlxuIik7DQorICAgICAgDQorICAgICAgLyogU2F2ZSB0aGUgcG9pbnRlciB0byB0aGUgb2xk IGhhbmRsZXIuICAqLw0KKyAgICAgIGdydWJfZHJpdmVtYXBfaW50MTNfb2xkaGFuZGxlciA9ICpp dnRzbG90Ow0KKyAgICAgIGdydWJfZHByaW50ZiAoTU9ETkFNRSwgIk9sZCBpbnQxMyBoYW5kbGVy IGF0ICUwNHg6JTA0eFxuIiwNCisgICAgICAgICAgICAgICAgICAgIChncnViX2RyaXZlbWFwX2lu dDEzX29sZGhhbmRsZXIgPj4gMTYpICYgMHgwZmZmZiwNCisgICAgICAgICAgICAgICAgICAgIGdy dWJfZHJpdmVtYXBfaW50MTNfb2xkaGFuZGxlciAmIDB4MGZmZmYpOw0KKw0KKyAgICAgIC8qIFJl c2VydmUgYSBzZWN0aW9uIG9mIGNvbnZlbnRpb25hbCBtZW1vcnkgYXMgIkJJT1MgbWVtb3J5IiBm b3IgaGFuZGxlci4gICovDQorICAgICAgZ3J1Yl9kcHJpbnRmIChNT0ROQU1FLCAiVG9wIG9mIGNv bnZlbnRpb25hbCBtZW1vcnk6ICV1IEtpQlxuIiwgKmJwYV9mcmVla2IpOw0KKyAgICAgIHRvdGFs X3NpemUgPSBncnViX2RyaXZlbWFwX2ludDEzX3NpemUNCisgICAgICAgICAgICAgICAgICAgKyAo ZW50cmllcyArIDEpICogc2l6ZW9mKGludDEzbWFwX25vZGVfdCk7DQorICAgICAgcGF5bG9hZF9z aXpla2IgPSAodG90YWxfc2l6ZSA+PiAxMCkgKw0KKyAgICAgICAgICAgICAgICAgICAgICAgKCgo dG90YWxfc2l6ZSAlIDEwMjQpID09IDApID8gMCA6IDEpOw0KKyAgICAgIGlmICgoKmJwYV9mcmVl a2IgLSBwYXlsb2FkX3NpemVrYikgPCBNSU5fRlJFRV9NRU1fS0IpDQorICAgICAgICByZXR1cm4g Z3J1Yl9lcnJvciAoR1JVQl9FUlJfT1VUX09GX01FTU9SWSwgInJlZnVzaW5nIHRvIGluc3RhbGwi DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgImludDEzIGhhbmRsZXIsIG5vdCBlbm91Z2gg ZnJlZSBtZW1vcnkgYWZ0ZXIiKTsNCisgICAgICBncnViX2RwcmludGYgKE1PRE5BTUUsICJQYXls b2FkIGlzICV1IGIgbG9uZywgcmVzZXJ2aW5nICV1IEtiXG4iLA0KKyAgICAgICAgICAgICAgICAg ICAgdG90YWxfc2l6ZSwgcGF5bG9hZF9zaXpla2IpOw0KKyAgICAgICpicGFfZnJlZWtiIC09IHBh eWxvYWRfc2l6ZWtiOw0KKw0KKyAgICAgIC8qIENvcHkgaW50MTNoIGhhbmRsZXIgYnVuZGxlIHRv IHJlc2VydmVkIGFyZWEuICAqLw0KKyAgICAgIGhhbmRsZXJfYmFzZSA9IChncnViX3VpbnQ4X3Qq KSgqYnBhX2ZyZWVrYiA8PCAxMCk7DQorICAgICAgZ3J1Yl9kcHJpbnRmIChNT0ROQU1FLCAiQ29w eWluZyBpbnQxMyBoYW5kbGVyIHRvOiAlcFxuIiwgaGFuZGxlcl9iYXNlKTsNCisgICAgICBncnVi X21lbWNweSAoaGFuZGxlcl9iYXNlLCAmZ3J1Yl9kcml2ZW1hcF9pbnQxM19oYW5kbGVyX2Jhc2Us DQorICAgICAgICAgICAgICAgICAgIGdydWJfZHJpdmVtYXBfaW50MTNfc2l6ZSk7DQorDQorICAg ICAgLyogQ29weSB0aGUgbWFwcGluZ3MgdG8gdGhlIHJlc2VydmVkIGFyZWEuICAqLw0KKyAgICAg IGN1cmVudHJ5ID0gZHJpdmVtYXA7DQorICAgICAgZ3J1Yl9zaXplX3QgaTsNCisgICAgICBoYW5k bGVyX21hcCA9IChpbnQxM21hcF9ub2RlX3QqKQ0KKyAgICAgICAgICAgICAgICAgICAgSU5UMTNI X1RPTkVXQUREUiAoJmdydWJfZHJpdmVtYXBfaW50MTNfbWFwc3RhcnQpOw0KKyAgICAgIGdydWJf ZHByaW50ZiAoTU9ETkFNRSwgIlRhcmdldCBtYXAgYXQgJXAsIGNvcHlpbmcgbWFwcGluZ3MuLi5c biIsIGhhbmRsZXJfbWFwKTsNCisgICAgICBmb3IgKGkgPSAwOyBpIDwgZW50cmllcyAmJiBjdXJl bnRyeTsgaSsrLCBjdXJlbnRyeSA9IGN1cmVudHJ5LT5uZXh0KQ0KKyAgICAgICAgew0KKyAgICAg ICAgICBoYW5kbGVyX21hcFtpXS5kaXNrbnVtID0gY3VyZW50cnktPm5ld2RyaXZlOw0KKyAgICAg ICAgICBoYW5kbGVyX21hcFtpXS5tYXB0byA9IGN1cmVudHJ5LT5yZWRpcnRvOw0KKyAgICAgICAg ICBncnViX2RwcmludGYgKE1PRE5BTUUsICJcdCMlZDogMHglMDJ4IDwtIDB4JTAyeFxuIiwgaSwN CisgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyX21hcFtpXS5kaXNrbnVtLCBoYW5kbGVy X21hcFtpXS5tYXB0byk7DQorICAgICAgICB9DQorICAgICAgLyogU2lnbmFsIGVuZC1vZi1tYXAu ICAqLw0KKyAgICAgIGhhbmRsZXJfbWFwW2ldLmRpc2tudW0gPSAwOw0KKyAgICAgIGhhbmRsZXJf bWFwW2ldLm1hcHRvID0gMDsNCisgICAgICBncnViX2RwcmludGYgKE1PRE5BTUUsICJcdCMlZDog MHglMDJ4IDwtIDB4JTAyeCAoZW5kKVxuIiwgaSwNCisgICAgICAgICAgICAgICAgICAgIGhhbmRs ZXJfbWFwW2ldLmRpc2tudW0sIGhhbmRsZXJfbWFwW2ldLm1hcHRvKTsNCisNCisgICAgICAvKiBJ bnN0YWxsIG91ciBmdW5jdGlvbiBhcyB0aGUgaW50MTNoIGhhbmRsZXIgaW4gdGhlIElWVC4gICov DQorICAgICAgaXZ0ZW50cnkgPSAoKGdydWJfdWludDMyX3QpaGFuZGxlcl9iYXNlKSA8PCAxMjsg LyogU2VnbWVudCBhZGRyZXNzLiAgKi8NCisgICAgICBpdnRlbnRyeSB8PSAoZ3J1Yl91aW50MTZf dCkgSU5UMTNIX09GRlNFVCgmZ3J1Yl9kcml2ZW1hcF9pbnQxM19oYW5kbGVyKTsNCisgICAgICBn cnViX2RwcmludGYgKE1PRE5BTUUsICJOZXcgaW50MTMgaGFuZGxlciBJVlQgcG9pbnRlcjogJTA0 eDolMDR4XG4iLA0KKyAgICAgICAgICAgICAgICAgICAgKGl2dGVudHJ5ID4+IDE2KSAmIDB4MGZm ZmYsIGl2dGVudHJ5ICYgMHgwZmZmZik7DQorICAgICAgKml2dHNsb3QgPSBpdnRlbnRyeTsNCisg ICAgICANCisgICAgICByZXR1cm4gR1JVQl9FUlJfTk9ORTsNCisgICAgfQ0KK30NCisNCitHUlVC X01PRF9JTklUIChkcml2ZW1hcCkNCit7DQorICAodm9pZCkgbW9kOwkJCS8qIFN0b3Agd2Fybmlu Zy4gICovDQorICBncnViX3JlZ2lzdGVyX2NvbW1hbmQgKE1PRE5BTUUsIGdydWJfY21kX2RyaXZl bWFwLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICBHUlVCX0NPTU1BTkRfRkxBR19CT1RILA0K KyAgICAgICAgICAgICAgICAgICAgICAgICBNT0ROQU1FICIgLWwgfCAtciB8IFstc10gZ3J1YmRl diBiaW9zZGlzayIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICJNYW5hZ2UgdGhlIEJJT1Mg ZHJpdmUgbWFwcGluZ3MiLCBvcHRpb25zKTsNCisgIGluc3RoYW5kbGVyX2hvb2sgPSBncnViX2xv YWRlcl9yZWdpc3Rlcl9wcmVib290ICgmaW5zdGFsbF9pbnQxM19oYW5kbGVyLCAxKTsNCit9DQor DQorR1JVQl9NT0RfRklOSSAoZHJpdmVtYXApDQorew0KKyAgZ3J1Yl9sb2FkZXJfdW5yZWdpc3Rl cl9wcmVib290IChpbnN0aGFuZGxlcl9ob29rKTsNCisgIGluc3RoYW5kbGVyX2hvb2sgPSAwOw0K KyAgZ3J1Yl91bnJlZ2lzdGVyX2NvbW1hbmQgKE1PRE5BTUUpOw0KK30NCisNCkluZGV4OiBjb21t YW5kcy9pMzg2L3BjL2RyaXZlbWFwX2ludDEzaC5TDQo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gY29tbWFuZHMv aTM4Ni9wYy9kcml2ZW1hcF9pbnQxM2guUwkocmV2aXNpw7NuOiAwKQ0KKysrIGNvbW1hbmRzL2kz ODYvcGMvZHJpdmVtYXBfaW50MTNoLlMJKHJldmlzacOzbjogMCkNCkBAIC0wLDAgKzEsMTIxIEBA DQorLyoNCisgKiAgR1JVQiAgLS0gIEdSYW5kIFVuaWZpZWQgQm9vdGxvYWRlcg0KKyAqICBDb3B5 cmlnaHQgKEMpIDE5OTksMjAwMCwyMDAxLDIwMDIsMjAwMywyMDA1LDIwMDYsMjAwNywyMDA4IEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLg0KKyAqDQorICogIEdSVUIgaXMgZnJlZSBzb2Z0 d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KKyAqICBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hl ZCBieQ0KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAz IG9mIHRoZSBMaWNlbnNlLCBvcg0KKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz aW9uLg0KKyAqDQorICogIEdSVUIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwNCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KKyAqICBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KKyAqDQorICogIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQorICog IGFsb25nIHdpdGggR1JVQi4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5z ZXMvPi4NCisgKi8NCisNCisNCisvKg0KKyAqIE5vdGU6IFRoZXNlIGZ1bmN0aW9ucyBkZWZpbmVk IGluIHRoaXMgZmlsZSBtYXkgYmUgY2FsbGVkIGZyb20gQy4NCisgKiAgICAgICBCZSBjYXJlZnVs IG9mIHRoYXQgeW91IG11c3Qgbm90IG1vZGlmeSBzb21lIHJlZ2lzdGVycy4gUXVvdGUNCisgKiAg ICAgICBmcm9tIGdjYy0yLjk1LjIvZ2NjL2NvbmZpZy9pMzg2L2kzODYuaDoNCisNCisgICAxIGZv ciByZWdpc3RlcnMgbm90IGF2YWlsYWJsZSBhY3Jvc3MgZnVuY3Rpb24gY2FsbHMuDQorICAgVGhl c2UgbXVzdCBpbmNsdWRlIHRoZSBGSVhFRF9SRUdJU1RFUlMgYW5kIGFsc28gYW55DQorICAgcmVn aXN0ZXJzIHRoYXQgY2FuIGJlIHVzZWQgd2l0aG91dCBiZWluZyBzYXZlZC4NCisgICBUaGUgbGF0 dGVyIG11c3QgaW5jbHVkZSB0aGUgcmVnaXN0ZXJzIHdoZXJlIHZhbHVlcyBhcmUgcmV0dXJuZWQN CisgICBhbmQgdGhlIHJlZ2lzdGVyIHdoZXJlIHN0cnVjdHVyZS12YWx1ZSBhZGRyZXNzZXMgYXJl IHBhc3NlZC4NCisgICBBc2lkZSBmcm9tIHRoYXQsIHlvdSBjYW4gaW5jbHVkZSBhcyBtYW55IG90 aGVyIHJlZ2lzdGVycyBhcyB5b3UgbGlrZS4NCisNCisgIGF4LGR4LGN4LGJ4LHNpLGRpLGJwLHNw LHN0LHN0MSxzdDIsc3QzLHN0NCxzdDUsc3Q2LHN0NyxhcmcNCit7ICAxLCAxLCAxLCAwLCAwLCAw LCAwLCAxLCAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEgfQ0KKyAqLw0KKw0KKy8q DQorICogTm90ZTogR1JVQiBpcyBjb21waWxlZCB3aXRoIHRoZSBvcHRpb25zIC1tcnRkIGFuZCAt bXJlZ3Bhcm09My4NCisgKiAgICAgICBTbyB0aGUgZmlyc3QgdGhyZWUgYXJndW1lbnRzIGFyZSBw YXNzZWQgaW4gJWVheCwgJWVkeCwgYW5kICVlY3gsDQorICogICAgICAgcmVzcGVjdGl2ZWx5LCBh bmQgaWYgYSBmdW5jdGlvbiBoYXMgYSBmaXhlZCBudW1iZXIgb2YgYXJndW1lbnRzDQorICogICAg ICAgYW5kIHRoZSBudW1iZXIgaWYgZ3JlYXRlciB0aGFuIHRocmVlLCB0aGUgZnVuY3Rpb24gbXVz dCByZXR1cm4NCisgKiAgICAgICB3aXRoICJyZXQgJE4iIHdoZXJlIE4gaXMgKCh0aGUgbnVtYmVy IG9mIGFyZ3VtZW50cykgLSAzKSAqIDQuDQorICovDQorDQorI2luY2x1ZGUgPGdydWIvc3ltYm9s Lmg+DQorDQorI2RlZmluZSBHUlVCX0RSSVZFTUFQX0lOVDEzSF9PRkZTRVQoeCkgKCh4KSAtIGdy dWJfZHJpdmVtYXBfaW50MTNfaGFuZGxlcl9iYXNlKQ0KKw0KKy8qIENvcHkgc3RhcnRzIGhlcmUu ICBXaGVuIGRlcGxveWVkLCB0aGlzIGxhYmVsIG11c3QgYmUgc2VnbWVudC1hbGlnbmVkLiAgKi8N CitWQVJJQUJMRShncnViX2RyaXZlbWFwX2ludDEzX2hhbmRsZXJfYmFzZSkNCisNCisvKiBGYXIg cG9pbnRlciB0byB0aGUgb2xkIGhhbmRsZXIuICBTdG9yZWQgYXMgYSBDUzpJUCBpbiB0aGUgc3R5 bGUgb2YgcmVhbC1tb2RlDQorICAgSVZUIGVudHJpZXMgKHRodXMgUEk6U0MgaW4gbWVtKS4gICov DQorVkFSSUFCTEUoZ3J1Yl9kcml2ZW1hcF9pbnQxM19vbGRoYW5kbGVyKQ0KKyAgLndvcmQgMHhk ZWFkLCAweGJlZWYNCisNCisvKiBEcml2ZW1hcCBtb2R1bGUgYnVuZGxlIC0gSU5UIDEzaCBoYW5k bGVyIC0gQklPUyBIRCBtYXAgKi8NCisvKiBXZSBuZWVkIHRvIHVzZSByZWxhdGl2ZSBhZGRyZXNz aW5nLCBhbmQgd2l0aCBDUyB0byB0b3AgaXQgYWxsLCBzaW5jZSB3ZQ0KKyAgIG11c3QgbWFrZSBh cyBmZXcgY2hhbmdlcyB0byB0aGUgcmVnaXN0ZXJzIGFzIHBvc3NpYmxlLiAgSVAtcmVsYXRpdmUN CisgICBhZGRyZXNzaW5nIGxpa2Ugb24gYW1kNjQgd291bGQgbWFrZSBsaWZlIHdheSBlYXNpZXIg aGVyZS4gKi8NCisuY29kZTE2DQorRlVOQ1RJT04oZ3J1Yl9kcml2ZW1hcF9pbnQxM19oYW5kbGVy KQ0KKyAgcHVzaCAlYnANCisgIG1vdiAlc3AsICVicA0KKyAgcHVzaCAlYXggIC8qIFdlJ2xsIG5l ZWQgaXQgbGF0ZXIgdG8gZGV0ZXJtaW5lIHRoZSB1c2VkIEJJT1MgZnVuY3Rpb24uICAqLw0KKw0K KyAgLyogTWFwIHRoZSBkcml2ZSBudW1iZXIgKGFsd2F5cyBpbiBETD8pLiAgKi8NCisgIHB1c2gg JWF4DQorICBwdXNoICVieA0KKyAgcHVzaCAlc2kNCisgIG1vdiAkR1JVQl9EUklWRU1BUF9JTlQx M0hfT0ZGU0VUKGdydWJfZHJpdmVtYXBfaW50MTNfbWFwc3RhcnQpLCAlYngNCisgIHhvciAlc2ks ICVzaQ0KKzE6bW92dyAlY3M6KCVieCwlc2kpLCAlYXgNCisgIGNtcCAlYWgsICVhbA0KKyAganog M2YgLyogRFJWPURTVCA9PiBtYXAgZW5kIC0gZHJpdmUgbm90IHJlbWFwcGVkLCBsZWF2ZSBETCBh cy1pcy4gICovDQorICBjbXAgJWRsLCAlYWwNCisgIGp6IDJmIC8qIEZvdW5kIC0gZHJpdmUgcmVt YXBwZWQsIG1vZGlmeSBETC4gICovDQorICBhZGQgJDIsICVzaQ0KKyAgam1wIDFiIC8qIE5vdCBm b3VuZCwgYnV0IG1vcmUgcmVtYWluaW5nLCBsb29wLiAgKi8NCisyOm1vdiAlYWgsICVkbA0KKzM6 cG9wICVzaQ0KKyAgcG9wICVieA0KKyAgeGNoZ3cgJWF4LCAtNCglYnApIC8qIFJlY292ZXIgdGhl IG9sZCBBWCBhbmQgc2F2ZSB0aGUgbWFwIGVudHJ5IGZvciBsYXRlci4gICovDQorICANCisgIHB1 c2ggJWJwDQorICAvKiBTaW11bGF0ZSBpbnRlcnJ1cHQgY2FsbDogcHVzaCBmbGFncyBhbmQgZG8g YSBmYXIgY2FsbCBpbiBvcmRlciB0byBzZXQNCisgICAgIHRoZSBzdGFjayB0aGUgd2F5IHRoZSBv bGQgaGFuZGxlciBleHBlY3RzIGl0IHNvIHRoYXQgaXRzIGlyZXQgd29ya3MuICAqLw0KKyAgcHVz aCA2KCVicCkNCisgIG1vdncgKCVicCksICVicCAgLyogUmVzdG9yZSB0aGUgY2FsbGVyIEJQIChp cyB0aGlzIG5lZWRlZCBhbmQvb3Igc2Vuc2libGU/KS4gICovDQorICBsY2FsbCAqJWNzOkdSVUJf RFJJVkVNQVBfSU5UMTNIX09GRlNFVChncnViX2RyaXZlbWFwX2ludDEzX29sZGhhbmRsZXIpDQor ICBwb3AgJWJwIC8qIFRoZSBwdXNoZWQgZmxhZ3Mgd2VyZSByZW1vdmVkIGJ5IGlyZXQuICAqLw0K KyAgLyogU2V0IHRoZSBzYXZlZCBmbGFncyB0byB3aGF0IHRoZSBpbnQxM2ggaGFuZGxlciByZXR1 cm5lZC4gICovDQorICBwdXNoICVheA0KKyAgcHVzaGYNCisgIHBvcCAlYXgNCisgIG1vdncgJWF4 LCA2KCVicCkNCisgIHBvcCAlYXgNCisNCisgIC8qIFJldmVyc2UgbWFwIGFueSByZXR1cm5lZCBk cml2ZSBudW1iZXIgaWYgdGhlIGRhdGEgcmV0dXJuZWQgaW5jbHVkZXMgaXQuICANCisgICAgIFRo ZSBvbmx5IGZ1bmMgdGhhdCBkb2VzIHRoaXMgc2VlbXMgdG8gYmUgb3JpZ0FIID0gMHgwOCwgYnV0 IG1hbnkgQklPUw0KKyAgICAgcmVmcyBzYXkgcmV0REwgPSAjIG9mIGRyaXZlcyBjb25uZWN0ZWQu ICBIb3dldmVyLCB0aGUgR1JVQiBMZWdhY3kgY29kZQ0KKyAgICAgdHJlYXRzIHRoaXMgYXMgdGhl IF9kcml2ZSBudW1iZXJfIGFuZCAidW5kb2VzIiB0aGUgcmVtYXBwaW5nLiAgVGh1cywNCisgICAg IHRoaXMgc2VjdGlvbiBoYXMgYmVlbiBkaXNhYmxlZCBmb3IgdGVzdGluZyBpZiBpdCdzIHJlcXVp cmVkLiAgKi8NCisjICBjbXBiICQweDA4LCAtMSglYnApIC8qIENhbGxlcidzIEFILiAgKi8NCisj ICBqbmUgNGYNCisjICB4Y2hndyAlYXgsIC00KCVicCkgLyogTWFwIGVudHJ5IHVzZWQuICAqLw0K KyMgIGNtcCAlYWgsICVhbCAgLyogRFJWPURTVCA9PiBkcml2ZSBub3QgcmVtYXBwZWQuICAqLw0K KyMgIGplIDRmDQorIyAgbW92ICVhaCwgJWRsICAvKiBVbmRvIHJlbWFwLiAgKi8NCisNCis0Om1v diAlYnAsICVzcA0KKyAgcG9wICVicA0KKyAgaXJldA0KKy8qIFRoaXMgbGFiZWwgTVVTVCBiZSBh dCB0aGUgZW5kIG9mIHRoZSBjb3BpZWQgYmxvY2ssIHNpbmNlIHRoZSBpbnN0YWxsZXIgY29kZQ0K KyAgIHJlc2VydmVzIGFkZGl0aW9uYWwgc3BhY2UgZm9yIG1hcHBpbmdzIGF0IHJ1bnRpbWUgYW5k IGNvcGllcyB0aGVtIG92ZXIgaXQuICAqLw0KKy5hbGlnbiAyDQorVkFSSUFCTEUoZ3J1Yl9kcml2 ZW1hcF9pbnQxM19tYXBzdGFydCkNCisvKiBDb3B5IHN0b3BzIGhlcmUuICAqLw0KKy5jb2RlMzIN CitWQVJJQUJMRShncnViX2RyaXZlbWFwX2ludDEzX3NpemUpDQorICAud29yZCBHUlVCX0RSSVZF TUFQX0lOVDEzSF9PRkZTRVQoZ3J1Yl9kcml2ZW1hcF9pbnQxM19zaXplKQ0KKw0KSW5kZXg6IGNv bmYvaTM4Ni1wYy5ybWsNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBjb25mL2kzODYtcGMucm1rCShyZXZpc2nD s246IDE3OTgpDQorKysgY29uZi9pMzg2LXBjLnJtawkoY29waWEgZGUgdHJhYmFqbykNCkBAIC0x NjMsNyArMTYzLDcgQEANCiAJdmJlLm1vZCB2YmV0ZXN0Lm1vZCB2YmVpbmZvLm1vZCB2aWRlby5t b2QgZ2Z4dGVybS5tb2QgXA0KIAl2aWRlb3Rlc3QubW9kIHBsYXkubW9kIGJpdG1hcC5tb2QgdGdh Lm1vZCBjcHVpZC5tb2Qgc2VyaWFsLm1vZAlcDQogCWF0YS5tb2QgdmdhLm1vZCBtZW1kaXNrLm1v ZCBqcGVnLm1vZCBwbmcubW9kIHBjaS5tb2QgbHNwY2kubW9kIFwNCi0JYW91dC5tb2QgX2JzZC5t b2QgYnNkLm1vZCBweGUubW9kIHB4ZWNtZC5tb2QNCisJYW91dC5tb2QgX2JzZC5tb2QgYnNkLm1v ZCBweGUubW9kIHB4ZWNtZC5tb2QgZHJpdmVtYXAubW9kDQogDQogIyBGb3IgYmlvc2Rpc2subW9k Lg0KIGJpb3NkaXNrX21vZF9TT1VSQ0VTID0gZGlzay9pMzg2L3BjL2Jpb3NkaXNrLmMNCkBAIC0z NDAsNCArMzQwLDEyIEBADQogcHhlY21kX21vZF9DRkxBR1MgPSAkKENPTU1PTl9DRkxBR1MpDQog cHhlY21kX21vZF9MREZMQUdTID0gJChDT01NT05fTERGTEFHUykNCiANCisjIEZvciBkcml2ZW1h cC5tb2QuDQorZHJpdmVtYXBfbW9kX0hFQURFUlMgPSBtYWNoaW5lL2RyaXZlbWFwLmgNCitkcml2 ZW1hcF9tb2RfU09VUkNFUyA9IGNvbW1hbmRzL2kzODYvcGMvZHJpdmVtYXAuYyBcDQorICAgICAg ICAgICAgICAgICAgICAgICBjb21tYW5kcy9pMzg2L3BjL2RyaXZlbWFwX2ludDEzaC5TDQorZHJp dmVtYXBfbW9kX0FTRkxBR1MgPSAkKENPTU1PTl9BU0ZMQUdTKQ0KK2RyaXZlbWFwX21vZF9DRkxB R1MgPSAkKENPTU1PTl9DRkxBR1MpDQorZHJpdmVtYXBfbW9kX0xERkxBR1MgPSAkKENPTU1PTl9M REZMQUdTKQ0KKw0KIGluY2x1ZGUgJChzcmNkaXIpL2NvbmYvY29tbW9uLm1rDQpJbmRleDogaW5j bHVkZS9ncnViL2xvYWRlci5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gaW5jbHVkZS9ncnViL2xvYWRlci5o CShyZXZpc2nDs246IDE3OTgpDQorKysgaW5jbHVkZS9ncnViL2xvYWRlci5oCShjb3BpYSBkZSB0 cmFiYWpvKQ0KQEAgLTM3LDcgKzM3LDIzIEBADQogLyogVW5zZXQgY3VycmVudCBsb2FkZXIsIGlm IGFueS4gICovDQogdm9pZCBFWFBPUlRfRlVOQyhncnViX2xvYWRlcl91bnNldCkgKHZvaWQpOw0K IA0KLS8qIENhbGwgdGhlIGJvb3QgaG9vayBpbiBjdXJyZW50IGxvYWRlci4gVGhpcyBtYXkgb3Ig bWF5IG5vdCByZXR1cm4sDQordHlwZWRlZiBzdHJ1Y3QgaG9va2xpc3Rfbm9kZSAqZ3J1Yl9wcmVi b290X2hvb2tpZDsNCisNCisvKiBSZWdpc3RlciBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBiZWZv cmUgdGhlIGxvYWRlciAiYm9vdCIgZnVuY3Rpb24uICBSZXR1cm5zDQorICAgYW4gaWQgdGhhdCBj YW4gYmUgbGF0ZXIgdXNlZCB0byB1bnJlZ2lzdGVyIHRoZSBwcmVib290IChpLmUuIG9uIG1vZHVs ZQ0KKyAgIHVubG9hZCkuICBJZiBBQk9SVF9PTl9FUlJPUiBpcyBzZXQsIHRoZSBib290IHNlcXVl bmNlIHdpbGwgYWJvcnQgaWYgYW55IG9mDQorICAgdGhlIHJlZ2lzdGVyZWQgZnVuY3Rpb25zIHJl dHVybiBhbnl0aGluZyBlbHNlIHRoYW4gR1JVQl9FUlJfTk9ORS4NCisgICBPbiBlcnJvciwgdGhl IHJldHVybiB2YWx1ZSB3aWxsIGNvbXBhcmUgZXF1YWwgdG8gMCBhbmQgdGhlIGVycm9yIGluZm9y bWF0aW9uDQorICAgd2lsbCBiZSBhdmFpbGFibGUgaW4gZ3J1Yl9lcnJuby4gIEhvd2V2ZXIsIGlm IHRoZSBjYWxsIGlzIHN1Y2Nlc3NmdWwgdGhhdA0KKyAgIHZhcmlhYmxlIGlzIF9ub3RfIG1vZGlm aWVkLiAqLw0KK2dydWJfcHJlYm9vdF9ob29raWQgRVhQT1JUX0ZVTkMoZ3J1Yl9sb2FkZXJfcmVn aXN0ZXJfcHJlYm9vdCkNCisgICAgICAgICAgIChncnViX2Vycl90ICgqaG9vaykgKHZvaWQpLCBp bnQgYWJvcnRfb25fZXJyb3IpOw0KKw0KKy8qIFVucmVnaXN0ZXIgYSBwcmVib290IGhvb2sgYnkg dGhlIGlkIHJldHVybmVkIGJ5IGxvYWRlcl9yZWdpc3Rlcl9wcmVib290LiAgDQorICAgVGhpcyBm dW5jdGlvbnMgYmVjb21lcyBhIG5vLW9wIGlmIG5vIHN1Y2ggZnVuY3Rpb24gaXMgcmVnaXN0ZXJl ZCAqLw0KK3ZvaWQgRVhQT1JUX0ZVTkMoZ3J1Yl9sb2FkZXJfdW5yZWdpc3Rlcl9wcmVib290KSAo Z3J1Yl9wcmVib290X2hvb2tpZCBpZCk7DQorDQorLyogQ2FsbCB0aGUgYm9vdCBob29rIGluIGN1 cnJlbnQgbG9hZGVyLiAgVGhpcyBtYXkgb3IgbWF5IG5vdCByZXR1cm4sDQogICAgZGVwZW5kaW5n IG9uIHRoZSBzZXR0aW5nIGJ5IGdydWJfbG9hZGVyX3NldC4gICovDQogZ3J1Yl9lcnJfdCBFWFBP UlRfRlVOQyhncnViX2xvYWRlcl9ib290KSAodm9pZCk7DQogDQpJbmRleDogaW5jbHVkZS9ncnVi L2kzODYvcGMvZHJpdmVtYXAuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGluY2x1ZGUvZ3J1Yi9pMzg2L3Bj L2RyaXZlbWFwLmgJKHJldmlzacOzbjogMCkNCisrKyBpbmNsdWRlL2dydWIvaTM4Ni9wYy9kcml2 ZW1hcC5oCShyZXZpc2nDs246IDApDQpAQCAtMCwwICsxLDM3IEBADQorLyogZHJpdmVtYXAuaCAt IGNvbW1hbmQgdG8gbWFuYWdlIHRoZSBCSU9TIGRyaXZlIG1hcHBpbmdzLiAgKi8NCisvKg0KKyAq ICBHUlVCICAtLSAgR1JhbmQgVW5pZmllZCBCb290bG9hZGVyDQorICogIENvcHlyaWdodCAoQykg MjAwOCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuDQorICoNCisgKiAgR1JVQiBpcyBm cmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQorICog IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5DQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2 ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yDQorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxh dGVyIHZlcnNpb24uDQorICoNCisgKiAgR1JVQiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KKyAqICBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQorICogIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQorICoNCisgKiAgWW91IHNo b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UNCisgKiAgYWxvbmcgd2l0aCBHUlVCLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9y Zy9saWNlbnNlcy8+Lg0KKyAqLw0KKw0KKyNpbmNsdWRlIDxncnViL3R5cGVzLmg+DQorDQorLyog UmVhbG1vZGUgZmFyIHB0ciAoMiAqIDE2YikgdG8gdGhlIHByZXZpb3VzIElOVDEzaCBoYW5kbGVy LiAgKi8NCitleHRlcm4gZ3J1Yl91aW50MzJfdCBncnViX2RyaXZlbWFwX2ludDEzX29sZGhhbmRs ZXI7DQorLyogU2l6ZSBvZiB0aGUgSU5UMTNoIGhhbmRsZXIgYnVuZGxlIChjb2RlK2RhdGEpIHRv IGJlIGRlcGxveWVkLiAgKi8NCitleHRlcm4gZ3J1Yl91aW50MTZfdCBncnViX2RyaXZlbWFwX2lu dDEzX3NpemU7DQorDQorLyogVGhpcyB0eXBlIGlzIHVzZWQgZm9yIGltcG9ydGVkIGFzc2VtYmx5 IGxhYmVscywgdGFrZXMgbm8gc3RvcmFnZSBhbmQgaXMgb25seQ0KKyAgIHVzZWQgdG8gdGFrZSB0 aGUgc3ltYm9sIGFkZHJlc3Mgd2l0aCAmbGFiZWwuICBEbyBOT1QgcHV0IHZvaWQqIGhlcmUuICAq Lw0KK3R5cGVkZWYgdm9pZCBncnViX3N5bWJvbF90Ow0KKw0KKy8qIFN0YXJ0IG9mIHRoZSBoYW5k bGVyIGJ1bmRsZS4gICovDQorZXh0ZXJuIGdydWJfc3ltYm9sX3QgZ3J1Yl9kcml2ZW1hcF9pbnQx M19oYW5kbGVyX2Jhc2U7DQorLyogU3RhcnQgb2YgdGhlIGRyaXZlIG1hcHBpbmdzIGFyZWEgKHNw YWNlIHJlc2VydmVkIGF0IHJ1bnRpbWUpLiAgKi8NCitleHRlcm4gZ3J1Yl9zeW1ib2xfdCBncnVi X2RyaXZlbWFwX2ludDEzX21hcHN0YXJ0Ow0KKy8qIFRoZSBhc3NlbWJseSBmdW5jdGlvbiB0byBy ZXBsYWNlIHRoZSBvbGQgSU5UMTNoIGhhbmRsZXIuIEl0IHNob3VsZCBub3QgYmUNCisgICBjYWxs ZWQgYmVjYXVzZSBpdCBkb2VzIG5vdCBmb2xsb3cgYW55IEMgY2FsbHNwZWNzIGFuZCByZXR1cm5z IHdpdGggSVJFVC4gICovDQorZXh0ZXJuIGdydWJfc3ltYm9sX3QgZ3J1Yl9kcml2ZW1hcF9pbnQx M19oYW5kbGVyOw0KSW5kZXg6IGtlcm4vbG9hZGVyLmMNCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBrZXJuL2xv YWRlci5jCShyZXZpc2nDs246IDE3OTgpDQorKysga2Vybi9sb2FkZXIuYwkoY29waWEgZGUgdHJh YmFqbykNCkBAIC02MSwxMSArNjEsODUgQEANCiAgIGdydWJfbG9hZGVyX2xvYWRlZCA9IDA7DQog fQ0KIA0KK3N0cnVjdCBob29rbGlzdF9ub2RlDQorew0KKyAgZ3J1Yl9lcnJfdCAoKmhvb2spICh2 b2lkKTsNCisgIGludCBhYm9ydF9vbl9lcnJvcjsNCisgIHN0cnVjdCBob29rbGlzdF9ub2RlICpu ZXh0Ow0KK307DQorDQorc3RhdGljIHN0cnVjdCBob29rbGlzdF9ub2RlICpwcmVib290X2hvb2tz ID0gMDsNCisNCitncnViX3ByZWJvb3RfaG9va2lkDQorZ3J1Yl9sb2FkZXJfcmVnaXN0ZXJfcHJl Ym9vdCAoZ3J1Yl9lcnJfdCAoKmhvb2spICh2b2lkKSwgaW50IGFib3J0X29uX2Vycm9yKQ0KK3sN CisgIGdydWJfcHJlYm9vdF9ob29raWQgbmV3ZW50cnk7DQorICBpZiAoIWhvb2spDQorICAgIHsN CisgICAgICBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfQVJHVU1FTlQsICJwcmVib290IGhvb2sg bXVzdCBub3QgYmUgTlVMTCIpOw0KKyAgICAgIHJldHVybiAwOw0KKyAgICB9DQorICBuZXdlbnRy eSA9IGdydWJfbWFsbG9jIChzaXplb2YgKHN0cnVjdCBob29rbGlzdF9ub2RlKSk7DQorICBpZiAo IW5ld2VudHJ5KQ0KKyAgICB7DQorICAgICAgZ3J1Yl9lcnJvciAoR1JVQl9FUlJfT1VUX09GX01F TU9SWSwgImNhbm5vdCBhbGxvYyBhIGhvb2tpbmZvIHN0cnVjdHVyZSIpOw0KKyAgICAgIHJldHVy biAwOw0KKyAgICB9DQorICBlbHNlDQorICAgIHsNCisgICAgICBuZXdlbnRyeS0+aG9vayA9IGhv b2s7DQorICAgICAgbmV3ZW50cnktPmFib3J0X29uX2Vycm9yID0gYWJvcnRfb25fZXJyb3I7DQor ICAgICAgbmV3ZW50cnktPm5leHQgPSBwcmVib290X2hvb2tzOw0KKyAgICAgIHByZWJvb3RfaG9v a3MgPSBuZXdlbnRyeTsNCisgICAgICByZXR1cm4gbmV3ZW50cnk7DQorICAgIH0NCit9DQorDQor dm9pZA0KK2dydWJfbG9hZGVyX3VucmVnaXN0ZXJfcHJlYm9vdCAoZ3J1Yl9wcmVib290X2hvb2tp ZCBpZCkNCit7DQorICBncnViX3ByZWJvb3RfaG9va2lkIGVudHJ5ID0gMDsNCisgIGdydWJfcHJl Ym9vdF9ob29raWQgc2VhcmNoID0gcHJlYm9vdF9ob29rczsNCisgIGdydWJfcHJlYm9vdF9ob29r aWQgcHJldmlvdXMgPSAwOw0KKw0KKyAgaWYgKGlkID09IDApDQorICAgIHJldHVybjsNCisNCisg IHdoaWxlIChzZWFyY2gpDQorICAgIHsNCisgICAgICBpZiAoc2VhcmNoID09IGlkKQ0KKyAgICAg ICAgew0KKyAgICAgICAgICBlbnRyeSA9IHNlYXJjaDsNCisgICAgICAgICAgYnJlYWs7DQorICAg ICAgICB9DQorICAgICAgcHJldmlvdXMgPSBzZWFyY2g7DQorICAgICAgc2VhcmNoID0gc2VhcmNo LT5uZXh0Ow0KKyAgICB9DQorDQorICBpZiAoZW50cnkpDQorICAgIHsNCisgICAgICBpZiAocHJl dmlvdXMpDQorICAgICAgICBwcmV2aW91cy0+bmV4dCA9IGVudHJ5LT5uZXh0Ow0KKyAgICAgIGVs c2UgcHJlYm9vdF9ob29rcyA9IGVudHJ5LT5uZXh0OyAvKiBFbnRyeSB3YXMgaGVhZCBvZiBsaXN0 ICovDQorICAgICAgZ3J1Yl9mcmVlIChlbnRyeSk7DQorICAgIH0NCit9DQorDQogZ3J1Yl9lcnJf dA0KIGdydWJfbG9hZGVyX2Jvb3QgKHZvaWQpDQogew0KKyAgZ3J1Yl9wcmVib290X2hvb2tpZCBl bnRyeSA9IHByZWJvb3RfaG9va3M7DQorDQogICBpZiAoISBncnViX2xvYWRlcl9sb2FkZWQpDQog ICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9OT19LRVJORUwsICJubyBsb2FkZWQga2Vy bmVsIik7DQorICANCisgIHdoaWxlIChlbnRyeSkNCisgICAgew0KKyAgICAgIGdydWJfZXJyX3Qg cG9zc2libGVfZXJyb3IgPSBlbnRyeS0+aG9vaygpOw0KKyAgICAgIGlmIChwb3NzaWJsZV9lcnJv ciAhPSBHUlVCX0VSUl9OT05FICYmIGVudHJ5LT5hYm9ydF9vbl9lcnJvcikNCisgICAgICAgIHJl dHVybiBwb3NzaWJsZV9lcnJvcjsNCisgICAgICBlbnRyeSA9IGVudHJ5LT5uZXh0Ow0KKyAgICB9 DQogDQogICBpZiAoZ3J1Yl9sb2FkZXJfbm9yZXR1cm4pDQogICAgIGdydWJfbWFjaGluZV9maW5p ICgpOw0K --=-Bak+yYNECC5Ji1bhs1IX-- --=-jOux2lUg6qBVgM1vTUfs Content-Type: application/pgp-signature; name=signature.asc Content-Description: Esta parte del mensaje =?ISO-8859-1?Q?est=E1?= firmada digitalmente -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) iQIVAwUASJ243aSl+Fbdeo72AQKhzhAAtwHrg1swmWl/A/eFeVy2FC+JAmhm+g27 dTSzFDNlCtLd9W9KUUq6YEfa0+5q+YqVdIEWYLOGFUDq6q7XwgzWDQrwKMCuhZ11 0XYKMAvOyKAgrkuhqLHQo/WOtQkHfEe3uyQtYNrKpIO2p9gMiOFw+SQYG4sowRHq Sj0KZbzj0r+5VJNG1nvQwvNBXzmgncoq7x1XuQdNKFk14G7mXfnw4DqK1h2/3H8K +olpflWi0j4+SlDIFKU4s6MDgFIgxEBNuzyNE192vFPFWq29BrvuEq1fa3YU7s3m kj52kgHAJGWsAXPWz4ucbPcqnL0yN4UgMZsfNUrGM0VAckwBXLEFWs4I/bIjsUy9 0J8K39xfpid1+hN3eUaDNa3iEr/5lhpIDcfhtHeT3QOlVmwx1B1Rd8bPCKm2Hapw rOYBkTCMWMV0CUQF+AVtHzIC/a3kXOG27KD6PhYJOBcr2tkU0qmz46p/D5G6RBNL xQtHBTLF8dEfv7MBOaz9FlcmmerQC2qMwgcedesIfdhqrsb9mxLb+pxGhsHqtSUC jebmmNHZrxLq1+2nGkFNAJlp/tlqQTp+DfirVTDDgslQcWduag8nlYmdZdSSoi+Y Rl7GRb5W815fQM1wiDm9Ls7cSWoFoqDIAxfMaAJQWPijYN51MfB1YY/jM+FjbJYf npEVrzqUKo4= =LfEc -----END PGP SIGNATURE----- --=-jOux2lUg6qBVgM1vTUfs--