From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Jiang, Yunhong" Subject: RE: [PATCH] Support swap a page from user space tools -- Was RE: [RFC][PATCH] Basic support for page offline Date: Thu, 19 Mar 2009 21:01:18 +0800 Message-ID: References: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="_005_E2263E4A5B2284449EEBD0AAB751098401C7EC06F6PDSMSX501ccrc_" Return-path: In-Reply-To: Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Keir Fraser , Tim Deegan Cc: "xen-devel@lists.xensource.com" List-Id: xen-devel@lists.xenproject.org --_005_E2263E4A5B2284449EEBD0AAB751098401C7EC06F6PDSMSX501ccrc_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Keir Fraser wrote: > On 19/03/2009 09:57, "Jiang, Yunhong" wrote: >=20 >>> Thirdly, perhaps this makes more sense as a MMU_* op hanging off >>> mmu_update()? That call takes pairs of u64 values, which could give you >>> the space you require. Then you can add a nice comment explaining how >>> your new command differs from MMU_NORMAL_PT_UPDATE. >>=20 >> I turn to the mmu_ext_op because it has only 1 entry left. So do you mea= n >> it is ok to be there? >=20 > Yes, I think it makes most sense there. It's close in behaviour to > MMU_NORMAL_PT_UPDATE, except for the 'foreigness'. >=20 > -- Keir This is updated version. Instead of add a new mmu_*op, I try to change the MMU_NORMAL_PT_UPDATE to = support update foreign page table. There will be some restirction for it, i= ncluding the pagetable and the new mfn pointed should be owned by same doma= in, and the domain should be suspeneded already. The update_foregin_pt.patc= h is for this. I'm not sure if this method is feasible. The exchange_page.patch is to replace a mfn with a new one. Although there = is already a memory_exchange hypercall, but that hypercall will not accept = new page, add that support will break current ABI. Also it does not support= foreign domain. This function add those support The other two have not much changes. The only change is the user space tool= s need two hypercall, one is to update the page table, while the second is = to exchange the pages. Please have a look on it. Thanks Yunhong Jiang --_005_E2263E4A5B2284449EEBD0AAB751098401C7EC06F6PDSMSX501ccrc_ Content-Type: application/octet-stream; name="writable_p2m.patch" Content-Description: writable_p2m.patch Content-Disposition: attachment; filename="writable_p2m.patch"; size=2895; creation-date="Thu, 19 Mar 2009 20:34:28 GMT"; modification-date="Thu, 19 Mar 2009 20:34:28 GMT" Content-Transfer-Encoding: base64 VXBkYXRlIHRoZSBwMm0gbWFwcGluZyB0YWJsZSB0byBiZSB3cml0YWJsZQoKZGlmZiAtciBkZjVj MGIwNzhkOGQgdG9vbHMvbGlieGMveGNfY29yZS5oCi0tLSBhL3Rvb2xzL2xpYnhjL3hjX2NvcmUu aAlXZWQgTWFyIDE4IDIwOjE0OjQxIDIwMDkgKzA4MDAKKysrIGIvdG9vbHMvbGlieGMveGNfY29y ZS5oCVdlZCBNYXIgMTggMjE6Mzg6NDEgMjAwOSArMDgwMApAQCAtMTQzLDYgKzE0MywxMSBAQCBp bnQgeGNfY29yZV9hcmNoX21hcF9wMm0oaW50IHhjX2hhbmRsZSwgCiAgICAgICAgICAgICAgICAg ICAgICAgICAgeGNfZG9taW5mb190ICppbmZvLCBzaGFyZWRfaW5mb19hbnlfdCAqbGl2ZV9zaGlu Zm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgeGVuX3Bmbl90ICoqbGl2ZV9wMm0sIHVuc2ln bmVkIGxvbmcgKnBmbnApOwogCitpbnQgeGNfY29yZV9hcmNoX21hcF9wMm1fd3JpdGFibGUoaW50 IHhjX2hhbmRsZSwgdW5zaWduZWQgaW50IGd1ZXN0X3dpZHRoLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHhjX2RvbWluZm9fdCAqaW5mbywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaGFyZWRfaW5mb19hbnlfdCAqbGl2ZV9zaGluZm8sCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgeGVuX3Bmbl90ICoqbGl2ZV9wMm0sIHVuc2lnbmVkIGxv bmcgKnBmbnApOworCiAKICNpZiBkZWZpbmVkIChfX2kzODZfXykgfHwgZGVmaW5lZCAoX194ODZf NjRfXykKICMgaW5jbHVkZSAieGNfY29yZV94ODYuaCIKZGlmZiAtciBkZjVjMGIwNzhkOGQgdG9v bHMvbGlieGMveGNfY29yZV94ODYuYwotLS0gYS90b29scy9saWJ4Yy94Y19jb3JlX3g4Ni5jCVdl ZCBNYXIgMTggMjA6MTQ6NDEgMjAwOSArMDgwMAorKysgYi90b29scy9saWJ4Yy94Y19jb3JlX3g4 Ni5jCVdlZCBNYXIgMTggMjE6Mzk6MTQgMjAwOSArMDgwMApAQCAtNzUsMTAgKzc1LDEwIEBAIHhj X2NvcmVfYXJjaF9tZW1vcnlfbWFwX2dldChpbnQgeGNfaGFuZGwKICAgICByZXR1cm4gMDsKIH0K IAotaW50Ci14Y19jb3JlX2FyY2hfbWFwX3AybShpbnQgeGNfaGFuZGxlLCB1bnNpZ25lZCBpbnQg Z3Vlc3Rfd2lkdGgsIHhjX2RvbWluZm9fdCAqaW5mbywKLSAgICAgICAgICAgICAgICAgICAgIHNo YXJlZF9pbmZvX2FueV90ICpsaXZlX3NoaW5mbywgeGVuX3Bmbl90ICoqbGl2ZV9wMm0sCi0gICAg ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpwZm5wKQorc3RhdGljIGludAoreGNfY29y ZV9hcmNoX21hcF9wMm1fcncoaW50IHhjX2hhbmRsZSwgdW5zaWduZWQgaW50IGd1ZXN0X3dpZHRo LCB4Y19kb21pbmZvX3QgKmluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWRfaW5m b19hbnlfdCAqbGl2ZV9zaGluZm8sIHhlbl9wZm5fdCAqKmxpdmVfcDJtLAorICAgICAgICAgICAg ICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqcGZucCwgaW50IHJ3KQogewogICAgIC8qIERvdWJs ZSBhbmQgc2luZ2xlIGluZGlyZWN0IHJlZmVyZW5jZXMgdG8gdGhlIGxpdmUgUDJNIHRhYmxlICov CiAgICAgeGVuX3Bmbl90ICpsaXZlX3AybV9mcmFtZV9saXN0X2xpc3QgPSBOVUxMOwpAQCAtMTU2 LDcgKzE1Niw4IEBAIHhjX2NvcmVfYXJjaF9tYXBfcDJtKGludCB4Y19oYW5kbGUsIHVuc2kKICAg ICAgICAgZm9yICggaSA9IFAyTV9GTF9FTlRSSUVTIC0gMTsgaSA+PSAwOyBpLS0gKQogICAgICAg ICAgICAgcDJtX2ZyYW1lX2xpc3RbaV0gPSAoKHVpbnQzMl90ICopcDJtX2ZyYW1lX2xpc3QpW2ld OwogCi0gICAgKmxpdmVfcDJtID0geGNfbWFwX2ZvcmVpZ25fcGFnZXMoeGNfaGFuZGxlLCBkb20s IFBST1RfUkVBRCwKKyAgICAqbGl2ZV9wMm0gPSB4Y19tYXBfZm9yZWlnbl9wYWdlcyh4Y19oYW5k bGUsIGRvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ3ID8gKFBST1Rf UkVBRCB8IFBST1RfV1JJVEUpIDogUFJPVF9SRUFELAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcDJtX2ZyYW1lX2xpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQMk1fRkxfRU5UUklFUyk7CiAKQEAgLTE4OSw2ICsxOTAsMjMgQEAgb3V0OgogICAg IHJldHVybiByZXQ7CiB9CiAKK2ludAoreGNfY29yZV9hcmNoX21hcF9wMm0oaW50IHhjX2hhbmRs ZSwgdW5zaWduZWQgaW50IGd1ZXN0X3dpZHRoLCB4Y19kb21pbmZvX3QgKmluZm8sCisgICAgICAg ICAgICAgICAgICAgICAgICBzaGFyZWRfaW5mb19hbnlfdCAqbGl2ZV9zaGluZm8sIHhlbl9wZm5f dCAqKmxpdmVfcDJtLAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqcGZu cCkKK3sKKyAgICByZXR1cm4geGNfY29yZV9hcmNoX21hcF9wMm1fcncoeGNfaGFuZGxlLCBndWVz dF93aWR0aCwgaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZV9z aGluZm8sIGxpdmVfcDJtLCBwZm5wLCAwKTsKK30KKworaW50Cit4Y19jb3JlX2FyY2hfbWFwX3Ay bV93cml0YWJsZShpbnQgeGNfaGFuZGxlLCB1bnNpZ25lZCBpbnQgZ3Vlc3Rfd2lkdGgsIHhjX2Rv bWluZm9fdCAqaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZF9pbmZv X2FueV90ICpsaXZlX3NoaW5mbywgeGVuX3Bmbl90ICoqbGl2ZV9wMm0sCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpwZm5wKQoreworICAgIHJldHVybiB4Y19j b3JlX2FyY2hfbWFwX3AybV9ydyh4Y19oYW5kbGUsIGd1ZXN0X3dpZHRoLCBpbmZvLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXZlX3NoaW5mbywgbGl2ZV9wMm0sIHBmbnAs IDEpOworfQogLyoKICAqIExvY2FsIHZhcmlhYmxlczoKICAqIG1vZGU6IEMK --_005_E2263E4A5B2284449EEBD0AAB751098401C7EC06F6PDSMSX501ccrc_ Content-Type: application/octet-stream; name="update_foriegn_pt.patch" Content-Description: update_foriegn_pt.patch Content-Disposition: attachment; filename="update_foriegn_pt.patch"; size=4710; creation-date="Thu, 19 Mar 2009 20:42:26 GMT"; modification-date="Thu, 19 Mar 2009 20:42:26 GMT" Content-Transfer-Encoding: base64 RW5oYW5jZSB1cGRhdGVfcHQgdG8gc3VwcG9ydCB1cGRhdGUgZm9yZWlnbiBkb21haW4ncyBwYWdl IHRhYmxlLgoKVGhpcyBpcyBtYWlubHkgZm9yIHBhZ2Ugb2ZmbGluZSwgc28gd2Ugd2FudCB0aGUg ZG9tYWluIGlzIHN1c3BlbmRlZCB3aGVuIHdlIHRyeSB0byB1cGRhdGUgdGhlIHBhZ2UgdGFibGUu CgpTaWduZWQtb2ZmLWJ5OiBKaWFuZywgWXVuaG9uZyA8eXVuaG9uZy5qaWFuZ0BpbnRlbC5jb20+ CgpkaWZmIC1yIDIwMzllODI3MTA1MSB4ZW4vYXJjaC94ODYvbW0uYwotLS0gYS94ZW4vYXJjaC94 ODYvbW0uYwlXZWQgTWFyIDE4IDE3OjMwOjEzIDIwMDkgKzAwMDAKKysrIGIveGVuL2FyY2gveDg2 L21tLmMJVGh1IE1hciAxOSAwNzowMDoyMyAyMDA5ICswODAwCkBAIC0xMTAsNiArMTEwLDcgQEAK ICNpbmNsdWRlIDxhc20vaHlwZXJjYWxsLmg+CiAjaW5jbHVkZSA8YXNtL3NoYXJlZC5oPgogI2lu Y2x1ZGUgPHB1YmxpYy9tZW1vcnkuaD4KKyNpbmNsdWRlIDxwdWJsaWMvc2NoZWQuaD4KICNpbmNs dWRlIDx4c20veHNtLmg+CiAjaW5jbHVkZSA8eGVuL3RyYWNlLmg+CiAKQEAgLTI5NzcsNyArMjk3 OCw4IEBAIGludCBkb19tbXVfdXBkYXRlKAogICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2U7CiAg ICAgaW50IHJjID0gMCwgb2theSA9IDEsIGkgPSAwOwogICAgIHVuc2lnbmVkIGludCBjbWQsIGRv bmUgPSAwOwotICAgIHN0cnVjdCBkb21haW4gKmQgPSBjdXJyZW50LT5kb21haW47CisgICAgc3Ry dWN0IGRvbWFpbiAqZCA9IGN1cnJlbnQtPmRvbWFpbiwgKnB0X293bmVyID0gTlVMTDsKKyAgICBz dHJ1Y3QgdmNwdSAqdiA9IGN1cnJlbnQ7CiAgICAgc3RydWN0IGRvbWFpbl9tbWFwX2NhY2hlIG1h cGNhY2hlOwogCiAgICAgaWYgKCB1bmxpa2VseShjb3VudCAmIE1NVV9VUERBVEVfUFJFRU1QVEVE KSApCkBAIC0zMDIwLDYgKzMwMjIsNyBAQCBpbnQgZG9fbW11X3VwZGF0ZSgKIAogICAgICAgICBj bWQgPSByZXEucHRyICYgKHNpemVvZihsMV9wZ2VudHJ5X3QpLTEpOwogICAgICAgICBva2F5ID0g MDsKKwogCiAgICAgICAgIHN3aXRjaCAoIGNtZCApCiAgICAgICAgIHsKQEAgLTMwMzgsMTAgKzMw NDEsMzAgQEAgaW50IGRvX21tdV91cGRhdGUoCiAgICAgICAgICAgICBnbWZuID0gcmVxLnB0ciA+ PiBQQUdFX1NISUZUOwogICAgICAgICAgICAgbWZuID0gZ21mbl90b19tZm4oZCwgZ21mbik7CiAK LSAgICAgICAgICAgIGlmICggdW5saWtlbHkoIWdldF9wYWdlX2Zyb21fcGFnZW5yKG1mbiwgZCkp ICkKKyAgICAgICAgICAgIGlmICggbWZuID09IElOVkFMSURfTUZOICkKKyAgICAgICAgICAgICAg ICBtZm4gPSBnbWZuX3RvX21mbihGT1JFSUdORE9NLCBnbWZuKTsKKworICAgICAgICAgICAgaWYg KCAhbWZuX3ZhbGlkKG1mbikgKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg cHRfb3duZXIgPSBwYWdlX2dldF9vd25lcl9hbmRfcmVmZXJlbmNlKG1mbl90b19wYWdlKG1mbikp OworCisgICAgICAgICAgICBpZiAoIHB0X293bmVyICE9IGQgKQogICAgICAgICAgICAgewotICAg ICAgICAgICAgICAgIE1FTV9MT0coIkNvdWxkIG5vdCBnZXQgcGFnZSBmb3Igbm9ybWFsIHVwZGF0 ZSIpOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGlmICggcHRfb3du ZXIgPT0gRk9SRUlHTkRPTSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg ICBpZiAoICFJU19QUklWKGQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgIUZPUkVJR05E T00tPmlzX3NodXRfZG93biB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAoRk9SRUlHTkRP TS0+c2h1dGRvd25fY29kZSAhPSBTSFVURE9XTl9zdXNwZW5kKSApCisgICAgICAgICAgICAgICAg ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gLUVQRVJNOworICAgICAgICAgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICAgICAgdiA9IEZPUkVJR05ET00tPnZjcHVbMF07CisgICAgICAgICAgICAgICAgfWVsc2UKKyAg ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJjID0gLUVQRVJNOworICAgICAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAK ICAgICAgICAgICAgIHZhID0gbWFwX2RvbWFpbl9wYWdlX3dpdGhfY2FjaGUobWZuLCAmbWFwY2Fj aGUpOwpAQCAtMzA1NywyNCArMzA4MCwyMSBAQCBpbnQgZG9fbW11X3VwZGF0ZSgKICAgICAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGwxX3BnZW50cnlfdCBsMWUgPSBsMWVfZnJv bV9pbnRwdGUocmVxLnZhbCk7CiAgICAgICAgICAgICAgICAgICAgIG9rYXkgPSBtb2RfbDFfZW50 cnkodmEsIGwxZSwgbWZuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNtZCA9PSBNTVVfUFRfVVBEQVRFX1BSRVNFUlZFX0FELAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGN1cnJlbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNtZCA9PSBNTVVfUFRfVVBEQVRFX1BSRVNFUlZFX0FELCB2KTsKICAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2Fz ZSBQR1RfbDJfcGFnZV90YWJsZToKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg ICAgIGwyX3BnZW50cnlfdCBsMmUgPSBsMmVfZnJvbV9pbnRwdGUocmVxLnZhbCk7CiAgICAgICAg ICAgICAgICAgICAgIG9rYXkgPSBtb2RfbDJfZW50cnkodmEsIGwyZSwgbWZuLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZCA9PSBNTVVfUFRfVVBEQVRFX1BSRVNF UlZFX0FELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQp OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZCA9PSBNTVVfUFRf VVBEQVRFX1BSRVNFUlZFX0FELCB2KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBQR1RfbDNfcGFnZV90YWJsZToKICAgICAg ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGwzX3BnZW50cnlfdCBsM2UgPSBsM2Vf ZnJvbV9pbnRwdGUocmVxLnZhbCk7CiAgICAgICAgICAgICAgICAgICAgIHJjID0gbW9kX2wzX2Vu dHJ5KHZhLCBsM2UsIG1mbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y21kID09IE1NVV9QVF9VUERBVEVfUFJFU0VSVkVfQUQsIDEsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGN1cnJlbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjbWQgPT0gTU1VX1BUX1VQREFURV9QUkVTRVJWRV9BRCwgMSwgdik7CiAgICAg ICAgICAgICAgICAgICAgIG9rYXkgPSAhcmM7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg ICAgICAgIGJyZWFrOwpAQCAtMzA4Myw4ICszMTAzLDcgQEAgaW50IGRvX21tdV91cGRhdGUoCiAg ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBsNF9wZ2VudHJ5X3QgbDRlID0g bDRlX2Zyb21faW50cHRlKHJlcS52YWwpOwogICAgICAgICAgICAgICAgICAgICByYyA9IG1vZF9s NF9lbnRyeSh2YSwgbDRlLCBtZm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNtZCA9PSBNTVVfUFRfVVBEQVRFX1BSRVNFUlZFX0FELCAxLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY21kID09IE1NVV9QVF9VUERBVEVfUFJFU0VSVkVfQUQsIDEsIHYpOwog ICAgICAgICAgICAgICAgICAgICBva2F5ID0gIXJjOwogICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgICAgICBicmVhazsKQEAgLTMwOTIsNyArMzExMSw3IEBAIGludCBkb19tbXVfdXBkYXRl KAogICAgICAgICAgICAgICAgIGNhc2UgUEdUX3dyaXRhYmxlX3BhZ2U6CiAgICAgICAgICAgICAg ICAgICAgIHBlcmZjX2luY3Iod3JpdGFibGVfbW11X3VwZGF0ZXMpOwogICAgICAgICAgICAgICAg ICAgICBva2F5ID0gcGFnaW5nX3dyaXRlX2d1ZXN0X2VudHJ5KAotICAgICAgICAgICAgICAgICAg ICAgICAgY3VycmVudCwgdmEsIHJlcS52YWwsIF9tZm4obWZuKSk7CisgICAgICAgICAgICAgICAg ICAgICAgICB2LCB2YSwgcmVxLnZhbCwgX21mbihtZm4pKTsKICAgICAgICAgICAgICAgICAgICAg YnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHBhZ2VfdW5sb2NrKHBh Z2UpOwpAQCAtMzEwMyw3ICszMTIyLDcgQEAgaW50IGRvX21tdV91cGRhdGUoCiAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICAgcGVyZmNfaW5jcih3cml0YWJsZV9tbXVfdXBkYXRlcyk7CiAg ICAgICAgICAgICAgICAgb2theSA9IHBhZ2luZ193cml0ZV9ndWVzdF9lbnRyeSgKLSAgICAgICAg ICAgICAgICAgICAgY3VycmVudCwgdmEsIHJlcS52YWwsIF9tZm4obWZuKSk7CisgICAgICAgICAg ICAgICAgICAgIHYsIHZhLCByZXEudmFsLCBfbWZuKG1mbikpOwogICAgICAgICAgICAgICAgIHB1 dF9wYWdlX3R5cGUocGFnZSk7CiAgICAgICAgICAgICB9CiAK --_005_E2263E4A5B2284449EEBD0AAB751098401C7EC06F6PDSMSX501ccrc_ Content-Type: application/octet-stream; name="free_page.patch" Content-Description: free_page.patch Content-Disposition: attachment; filename="free_page.patch"; size=26290; creation-date="Thu, 19 Mar 2009 20:40:20 GMT"; modification-date="Thu, 19 Mar 2009 20:40:20 GMT" Content-Transfer-Encoding: base64 QWRkIGEgaHlwZXJjYWxsIHRvIGZyZWUgb25lIHBhZ2UKCmRpZmYgLXIgNTQ3YmViMmY0ZmQwIHRv b2xzL2xpYnhjL01ha2VmaWxlCi0tLSBhL3Rvb2xzL2xpYnhjL01ha2VmaWxlCVRodSBNYXIgMTkg MDY6MTY6MjIgMjAwOSArMDgwMAorKysgYi90b29scy9saWJ4Yy9NYWtlZmlsZQlUaHUgTWFyIDE5 IDA2OjE3OjA3IDIwMDkgKzA4MDAKQEAgLTMxLDYgKzMxLDcgQEAgR1VFU1RfU1JDUy15IDo9CiBH VUVTVF9TUkNTLXkgOj0KIEdVRVNUX1NSQ1MteSArPSB4Z19wcml2YXRlLmMKIEdVRVNUX1NSQ1Mt JChDT05GSUdfTUlHUkFURSkgKz0geGNfZG9tYWluX3Jlc3RvcmUuYyB4Y19kb21haW5fc2F2ZS5j CitHVUVTVF9TUkNTLXkgKz0geGNfb2ZmbGluZV9wYWdlLmMKIEdVRVNUX1NSQ1MtJChDT05GSUdf SFZNKSArPSB4Y19odm1fYnVpbGQuYwogCiB2cGF0aCAlLmMgLi4vLi4veGVuL2NvbW1vbi9saWJl bGYKZGlmZiAtciA1NDdiZWIyZjRmZDAgdG9vbHMvbGlieGMveGNfZG9tYWluX3NhdmUuYwotLS0g YS90b29scy9saWJ4Yy94Y19kb21haW5fc2F2ZS5jCVRodSBNYXIgMTkgMDY6MTY6MjIgMjAwOSAr MDgwMAorKysgYi90b29scy9saWJ4Yy94Y19kb21haW5fc2F2ZS5jCVRodSBNYXIgMTkgMDY6MTc6 MDcgMjAwOSArMDgwMApAQCAtNTEwLDkgKzUxMCwxMCBAQCBzdGF0aWMgaW50IGNhbm9uaWNhbGl6 ZV9wYWdldGFibGUodW5zaWduCiAgICAgcmV0dXJuIHJhY2U7CiB9CiAKLXN0YXRpYyB4ZW5fcGZu X3QgKnhjX21hcF9tMnAoaW50IHhjX2hhbmRsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVuc2lnbmVkIGxvbmcgbWF4X21mbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCBwcm90KQoreGVuX3Bmbl90ICp4Y19tYXBfbTJwKGludCB4Y19oYW5kbGUsCisg ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBtYXhfbWZuLAorICAgICAgICAgICAg ICAgICAgICAgIGludCBwcm90LAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcg Km1mbjApCiB7CiAgICAgc3RydWN0IHhlbl9tYWNocGh5c19tZm5fbGlzdCB4bW1sOwogICAgIHBy aXZjbWRfbW1hcF9lbnRyeV90ICplbnRyaWVzOwpAQCAtNTYxLDcgKzU2Miw4IEBAIHN0YXRpYyB4 ZW5fcGZuX3QgKnhjX21hcF9tMnAoaW50IHhjX2hhbmQKICAgICAgICAgZ290byBlcnIyOwogICAg IH0KIAotICAgIG0ycF9tZm4wID0gZW50cmllc1swXS5tZm47CisgICAgaWYgKG1mbjApCisgICAg ICAgICptZm4wID0gZW50cmllc1swXS5tZm47CiAKIGVycjI6CiAgICAgZnJlZShlbnRyaWVzKTsK QEAgLTEwNTgsNyArMTA2MCw3IEBAIGludCB4Y19kb21haW5fc2F2ZShpbnQgeGNfaGFuZGxlLCBp bnQgaW8KICAgICB9CiAKICAgICAvKiBTZXR1cCB0aGUgbWZuX3RvX3BmbiB0YWJsZSBtYXBwaW5n ICovCi0gICAgaWYgKCAhKGxpdmVfbTJwID0geGNfbWFwX20ycCh4Y19oYW5kbGUsIG1heF9tZm4s IFBST1RfUkVBRCkpICkKKyAgICBpZiAoICEobGl2ZV9tMnAgPSB4Y19tYXBfbTJwKHhjX2hhbmRs ZSwgbWF4X21mbiwgUFJPVF9SRUFELCAmbTJwX21mbjApKSApCiAgICAgewogICAgICAgICBFUlJP UigiRmFpbGVkIHRvIG1hcCBsaXZlIE0yUCB0YWJsZSIpOwogICAgICAgICBnb3RvIG91dDsKZGlm ZiAtciA1NDdiZWIyZjRmZDAgdG9vbHMvbGlieGMveGNfb2ZmbGluZV9wYWdlLmMKLS0tIC9kZXYv bnVsbAlUaHUgSmFuIDAxIDAwOjAwOjAwIDE5NzAgKzAwMDAKKysrIGIvdG9vbHMvbGlieGMveGNf b2ZmbGluZV9wYWdlLmMJVGh1IE1hciAxOSAwNjo1NjozNyAyMDA5ICswODAwCkBAIC0wLDAgKzEs NDAyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiB4Y19vZmZsaW5lX3BhZ2UuYworICoK KyAqIEhlbHBlciBmdW5jdGlvbnMgdG8gcmVwbGFjZSBhIG9mZmxpbmluZyBwYWdlCisgKgorICog Q29weXJpZ2h0IChjKSAyMDAzLCBLIEEgRnJhc2VyLgorICogQ29weXJpZ2h0IChjKSAyMDA5LCBJ bnRlbCBDb3Jwb3JhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNpbmNsdWRl IDx0aW1lLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5j bHVkZSA8c3lzL3RpbWUuaD4KKworI2luY2x1ZGUgInhjX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJ4 Y19kb20uaCIKKyNpbmNsdWRlICJ4Z19wcml2YXRlLmgiCisjaW5jbHVkZSAieGdfc2F2ZV9yZXN0 b3JlLmgiCisKKyN1bmRlZiBERUJVRworI2RlZmluZSBERUJVRyhfZiwgX2EuLi4pIGZwcmludGYo c3RkZXJyLCBfZiAsICMjIF9hKQorCitpbnQgeGNfbWFya19wYWdlX29ubGluZShpbnQgeGMsIHVu c2lnbmVkIGxvbmcgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25n IGVuZCwgdWludDMyX3QgKnN0YXR1cykKK3sKKyAgICBERUNMQVJFX1NZU0NUTDsKKyAgICBpbnQg cmV0ID0gLTE7CisKKyAgICBpZiAoICFzdGF0dXMgfHwgKGVuZCA8IHN0YXJ0KSApCisgICAgICAg IHJldHVybiAtRUlOVkFMOworCisgICAgaWYgKGxvY2tfcGFnZXMoc3RhdHVzLCBzaXplb2YodWlu dDMyX3QpKihlbmQgLSBzdGFydCArIDEpKSkKKyAgICB7CisgICAgICAgIGZwcmludGYoc3RkZXJy LCAiQ291bGQgbm90IGxvY2sgbWVtb3J5IGZvciBYZW4gaHlwZXJjYWxsIik7CisgICAgICAgIHJl dHVybiAtRUlOVkFMOworICAgIH0KKworICAgIHN5c2N0bC5jbWQgPSBYRU5fU1lTQ1RMX3BhZ2Vf b2ZmbGluZV9vcDsKKyAgICBzeXNjdGwudS5wYWdlX29mZmxpbmUuc3RhcnQgPSBzdGFydDsKKyAg ICBzeXNjdGwudS5wYWdlX29mZmxpbmUuY21kID0gc3lzY3RsX3BhZ2Vfb25saW5lOworICAgIHN5 c2N0bC51LnBhZ2Vfb2ZmbGluZS5lbmQgPSBlbmQ7CisgICAgc2V0X3hlbl9ndWVzdF9oYW5kbGUo c3lzY3RsLnUucGFnZV9vZmZsaW5lLnN0YXR1cywgc3RhdHVzKTsKKyAgICByZXQgPSB4Y19zeXNj dGwoeGMsICZzeXNjdGwpOworCisgICAgdW5sb2NrX3BhZ2VzKHN0YXR1cywgc2l6ZW9mKHVpbnQz Ml90KSooZW5kIC0gc3RhcnQgKyAxKSk7CisKKyAgICByZXR1cm4gcmV0OworfQorCitpbnQgeGNf bWFya19wYWdlX29mZmxpbmUoaW50IHhjLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAorICAgICAgICAg ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGVuZCwgdWludDMyX3QgKnN0YXR1cykKK3sK KyAgICBERUNMQVJFX1NZU0NUTDsKKyAgICBpbnQgcmV0ID0gLTE7CisKKyAgICBpZiAoICFzdGF0 dXMgfHwgKGVuZCA8IHN0YXJ0KSApCisgICAgICAgIHJldHVybiAtRUlOVkFMOworCisgICAgaWYg KGxvY2tfcGFnZXMoc3RhdHVzLCBzaXplb2YodWludDMyX3QpKihlbmQgLSBzdGFydCArIDEpKSkK KyAgICB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IGxvY2sgbWVtb3J5IGZv ciBYZW4gaHlwZXJjYWxsIik7CisgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgIH0KKworICAg IHN5c2N0bC5jbWQgPSBYRU5fU1lTQ1RMX3BhZ2Vfb2ZmbGluZV9vcDsKKyAgICBzeXNjdGwudS5w YWdlX29mZmxpbmUuc3RhcnQgPSBzdGFydDsKKyAgICBzeXNjdGwudS5wYWdlX29mZmxpbmUuY21k ID0gc3lzY3RsX3BhZ2Vfb2ZmbGluZTsKKyAgICBzeXNjdGwudS5wYWdlX29mZmxpbmUuZW5kID0g ZW5kOworICAgIHNldF94ZW5fZ3Vlc3RfaGFuZGxlKHN5c2N0bC51LnBhZ2Vfb2ZmbGluZS5zdGF0 dXMsIHN0YXR1cyk7CisgICAgcmV0ID0geGNfc3lzY3RsKHhjLCAmc3lzY3RsKTsKKworICAgIHVu bG9ja19wYWdlcyhzdGF0dXMsIHNpemVvZih1aW50MzJfdCkqKGVuZCAtIHN0YXJ0ICsgMSkpOwor CisgICAgcmV0dXJuIHJldDsKK30KKworaW50IHhjX3F1ZXJ5X3BhZ2Vfb2ZmbGluZV9zdGF0dXMo aW50IHhjLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIHVpbnQzMl90ICpzdGF0dXMpCit7CisgICAgREVDTEFS RV9TWVNDVEw7CisgICAgaW50IHJldCA9IC0xOworCisgICAgaWYgKCAhc3RhdHVzIHx8IChlbmQg PCBzdGFydCkgKQorICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgIGlmIChsb2NrX3BhZ2Vz KHN0YXR1cywgc2l6ZW9mKHVpbnQzMl90KSooZW5kIC0gc3RhcnQgKyAxKSkpCisgICAgeworICAg ICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBsb2NrIG1lbW9yeSBmb3IgWGVuIGh5cGVy Y2FsbCIpOworICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICB9CisKKyAgICBzeXNjdGwuY21k ID0gWEVOX1NZU0NUTF9wYWdlX29mZmxpbmVfb3A7CisgICAgc3lzY3RsLnUucGFnZV9vZmZsaW5l LnN0YXJ0ID0gc3RhcnQ7CisgICAgc3lzY3RsLnUucGFnZV9vZmZsaW5lLmNtZCA9IHN5c2N0bF9x dWVyeV9wYWdlX29mZmxpbmU7CisgICAgc3lzY3RsLnUucGFnZV9vZmZsaW5lLmVuZCA9IGVuZDsK KyAgICBzZXRfeGVuX2d1ZXN0X2hhbmRsZShzeXNjdGwudS5wYWdlX29mZmxpbmUuc3RhdHVzLCBz dGF0dXMpOworICAgIHJldCA9IHhjX3N5c2N0bCh4YywgJnN5c2N0bCk7CisKKyAgICB1bmxvY2tf cGFnZXMoc3RhdHVzLCBzaXplb2YodWludDMyX3QpKihlbmQgLSBzdGFydCArIDEpKTsKKworICAg IHJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgTUFYX09GRkxJTkVfQkFUQ0ggMTAyNAorCitzdGF0 aWMgeGVuX3Bmbl90IHBmbl90b19tZm4oeGVuX3Bmbl90IHBmbiwgeGVuX3Bmbl90ICpwMm0sIGlu dCBndWVzdF93aWR0aCkKK3sKKyAgcmV0dXJuICgoeGVuX3Bmbl90KSAoKGd1ZXN0X3dpZHRoPT04 KT8KKyAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDY0X3QgKilwMm0pWyhwZm4pXSk6Cisg ICAgICAgICAgICAgICAgICAgICAgICgoKCh1aW50MzJfdCAqKXAybSlbKHBmbildKSA9PSAweGZm ZmZmZmZmVSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0xVUwpIDoKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCAqKXAybSlbKHBmbildKSkpKTsKK30KKwor c3RhdGljIGludCBleGNoYW5nZV9wYWdlKGludCB4Y19oYW5kbGUsIHhlbl9wZm5fdCBtZm4sCisg ICAgICAgICAgICAgICAgICAgICB4ZW5fcGZuX3QgbmV3X21mbiwgaW50IGRvbWlkKQoreworICAg IHN0cnVjdCBtbXVleHRfb3Agb3A7CisKKyAgICBvcC5jbWQgPSBNTVVFWFRfRVhDSEFOR0VfUEFH RTsKKyAgICBvcC5hcmcxLm1mbiA9IG5ld19tZm47CisgICAgb3AuYXJnMi5zcmNfbWZuID0gbWZu OworCisgICAgcmV0dXJuIHhjX21tdWV4dF9vcCh4Y19oYW5kbGUsICZvcCwgMSwgZG9taWQpOwor fQorCitzdGF0aWMgaW50IHVwZGF0ZV9wdGUoaW50IHhjX2hhbmRsZSwgeGVuX3Bmbl90IG1mbiwg eGVuX3Bmbl90IG5ld19tZm4sCisgICAgICAgICAgICAgICAgICAgIGludCBkb21pZCwgeGVuX3Bm bl90ICpwMm0sIHVuc2lnbmVkIGxvbmcgKnBmbl90eXBlLAorICAgICAgICAgICAgICAgICAgICBp bnQgcDJtX3NpemUsIGludCBwdF9sZXZlbHMsIGludCBndWVzdF93aWR0aCkKK3sKKyAgICBpbnQg cHRlX251bTsKKyAgICB1aW50NjRfdCBpOworICAgIHZvaWQgKmNvbnRlbnQgPSBOVUxMOworICAg IHN0cnVjdCB4Y19tbXUgKm1tdSA9IE5VTEw7CisKKyAgICBtbXUgPSB4Y19hbGxvY19tbXVfdXBk YXRlcyh4Y19oYW5kbGUsIGRvbWlkKTsKKyAgICBpZiAoIG1tdSA9PSBOVUxMICkKKyAgICB7Cisg ICAgICAgIHhjX2RvbV9wcmludGYoIiVzOiBmYWlsZWQgYXQgJWRcbiIsIF9fRlVOQ1RJT05fXywg X19MSU5FX18pOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcHRlX251bSA9IFBB R0VfU0laRSAvICgocHRfbGV2ZWxzID09IDIpID8gNCA6IDgpOworCisgICAgZm9yIChpID0gMDsg aSA8IHAybV9zaXplOyBpKyspCisgICAgeworICAgICAgICB4ZW5fcGZuX3QgdGFibGVfbWZuID0g cGZuX3RvX21mbihpLCBwMm0sIGd1ZXN0X3dpZHRoKTsKKyAgICAgICAgdWludDY0X3QgcHRlLCBu ZXdfcHRlOworICAgICAgICBpbnQgajsKKworICAgICAgICBpZiAoIHRhYmxlX21mbiA9PSBJTlZB TElEX1AyTV9FTlRSWSApCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoIHBm bl90eXBlW2ldICYgWEVOX0RPTUNUTF9QRklORk9fTFRBQlRZUEVfTUFTSyApCisgICAgICAgIHsK KyAgICAgICAgICAgIGNvbnRlbnQgPSB4Y19tYXBfZm9yZWlnbl9yYW5nZSh4Y19oYW5kbGUsIGRv bWlkLCBQQUdFX1NJWkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFBST1RfUkVBRCwgdGFibGVfbWZuKTsKKyAgICAgICAgICAgIGlmICghY29udGVudCkKKyAg ICAgICAgICAgICAgICBnb3RvIG91dDsKKworICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHB0 ZV9udW07IGorKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIHB0X2xldmVs cyA9PSAyICkKKyAgICAgICAgICAgICAgICAgICAgcHRlID0gKChjb25zdCB1aW50MzJfdCopY29u dGVudClbal07CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBwdGUg PSAoKGNvbnN0IHVpbnQ2NF90Kiljb250ZW50KVtqXTsKKworICAgICAgICAgICAgICAgIGlmICgh KHB0ZSAmIF9QQUdFX1BSRVNFTlQpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKwor ICAgICAgICAgICAgICAgIC8qIEhpdCBvbmUgZW50cnkgKi8KKyAgICAgICAgICAgICAgICBpZiAo ICgocHRlID4+IFBBR0VfU0hJRlQpICYgTUZOX01BU0tfWDg2KSA9PSBtZm4gKQorICAgICAgICAg ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbmV3X3B0ZSA9IChwdGUgJiB+TUFERFJfTUFT S19YODYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV3X21mbiA8PCBQQUdF X1NISUZUX1g4Nik7CisgICAgICAgICAgICAgICAgICAgIGlmICggeGNfYWRkX21tdV91cGRhdGUo eGNfaGFuZGxlLCBtbXUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9tZm4gPDwg UEFHRV9TSElGVCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICBqICogKCAocHRfbGV2ZWxz ID09IDIpID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHVpbnQz Ml90KTogc2l6ZW9mKHVpbnQ2NF90KSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTU1V X1BUX1VQREFURV9QUkVTRVJWRV9BRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19w dGUpICkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICggeGNfZmx1c2hfbW11X3VwZGF0ZXMo eGNfaGFuZGxlLCBtbXUpICkKKyAgICAgICAgICAgICAgICBnb3RvIG91dDsKKworICAgICAgICAg ICAgbXVubWFwKGNvbnRlbnQsIFBBR0VfU0laRSk7CisgICAgICAgICAgICBjb250ZW50ID0gTlVM TDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK291dDoKKyAgICAvKiBYWFggU2hh bGwgd2UgdGFrZSBhY3Rpb24gaWYgd2UgaGF2ZSBmYWlsIHRvIHVwZGF0ZT8gKi8KKyAgICBpZiAo Y29udGVudCkKKyAgICAgICAgbXVubWFwKGNvbnRlbnQsIFBBR0VfU0laRSk7CisgICAgZnJlZSht bXUpOworCisgICAgcmV0dXJuIC0xOworfQorCitpbnQgeGNfcmVwbGFjZV9wYWdlKGludCB4Y19o YW5kbGUsIHhlbl9wZm5fdCBwZm4sIGludCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgeGVu X3Bmbl90ICpwMm0sIHVuc2lnbmVkIGxvbmcgKnBmbl90eXBlLAorICAgICAgICAgICAgICAgICAg ICBpbnQgcDJtX3NpemUsIGludCBwdF9sZXZlbHMsIGludCBndWVzdF93aWR0aCkKK3sKKyAgICB1 aW50MzJfdCBzdGF0dXM7CisgICAgeGNfZG9taW5mb190IGluZm87CisgICAgeGVuX3Bmbl90IG1m biwgbmV3X21mbjsKKyAgICBzdHJ1Y3QgbW11ZXh0X29wIHVucGluOworICAgIGludCByYywgbWF4 X3BhZ2VzLCBicm9rZW4gPSAwOworICAgIHZvaWQgKm9sZF9wLCAqdG1wX3AgPSBOVUxMLCAqbmV3 X3AgPSBOVUxMOworCisgICAgaWYgKCFwMm0gfHwgIXBmbl90eXBlKQorICAgICAgICByZXR1cm4g LUVJTlZBTDsKKworICAgIG1mbiA9IHBmbl90b19tZm4ocGZuLCBwMm0sIGd1ZXN0X3dpZHRoKTsK KworICAgIC8qIFRoaXMgcGFnZSBoYXMgbm8gbWZuIGVzdGFibGlzaGVkPz8gKi8KKyAgICBpZiAo bWZuID09IElOVkFMSURfUDJNX0VOVFJZKQorICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAg IC8qIFRhcmdldCBkb21haW4gc2hvdWxkIGJlIHN1c3BlbmRlZCBhbHJlYWR5ICovCisgICAgaWYg KCAoeGNfZG9tYWluX2dldGluZm8oeGNfaGFuZGxlLCBkb21pZCwgMSwgJmluZm8pICE9IDEpIHx8 CisgICAgICAgICAhaW5mby5zaHV0ZG93biB8fCAoaW5mby5zaHV0ZG93bl9yZWFzb24gIT0gU0hV VERPV05fc3VzcGVuZCkgKQorICAgIHsKKyAgICAgICAgRVJST1IoIkRvbWFpbiBub3QgaW4gc3Vz cGVuZGVkIHN0YXRlIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiBDaGVj ayBpZiBwYWdlcyBhcmUgb2ZmbGluZSBwZW5kaW5nIG9yIG5vdCAqLworICAgIHJjID0geGNfcXVl cnlfcGFnZV9vZmZsaW5lX3N0YXR1cyh4Y19oYW5kbGUsIG1mbiwgbWZuLCAmc3RhdHVzKTsKKwor ICAgIGlmIChyYykKKyAgICAgICAgcmV0dXJuIHJjOworCisgICAgaWYgKCAhKHN0YXR1cyAmIFBH X09GRkxJTkVfU1RBVFVTX09GRkxJTkVfUEVORElORykgKQorICAgIHsKKyAgICAgICAgRVJST1Io IlBhZ2UgJWx4KG1mbiAlbHgpIGlzIG5vdCBvZmZsaW5lIHBlbmRpbmcgJXhcbiIsCisgICAgICAg ICAgICAgICBwZm4sIG1mbiwgc3RhdHVzKTsKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAg fQorCisgICAgLyogVW5waW4gdGhlIHBhZ2UgaWYgaXQgaXMgcGluZWQgKi8KKyAgICBpZiAocGZu X3R5cGVbcGZuXSAmIFhFTl9ET01DVExfUEZJTkZPX0xQSU5UQUIpCisgICAgeworICAgICAgICB1 bnBpbi5jbWQgPSBNTVVFWFRfVU5QSU5fVEFCTEU7CisgICAgICAgIHVucGluLmFyZzEubWZuID0g bWZuOworCisgICAgICAgIGlmICggeGNfbW11ZXh0X29wKHhjX2hhbmRsZSwgJnVucGluLCAxLCBk b21pZCkgPCAwICkKKyAgICAgICAgeworICAgICAgICAgICAgRVJST1IoIkZhaWxlZCB0byB1bnBp biBwYWdlICVseCIsIHBmbik7CisgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAg fQorICAgIH0KKworICAgIC8qIFdlIGluY3JlYXNlIHRoZSBwYWdlIGxpbWl0YXRpb24gdGVtcCAq LworICAgIG1heF9wYWdlcyA9IHhjX21lbW9yeV9vcCh4Y19oYW5kbGUsIFhFTk1FTV9tYXhpbXVt X3Jlc2VydmF0aW9uICwgJmRvbWlkKTsKKyAgICBpZiAobWF4X3BhZ2VzIDwgMCkKKyAgICB7Cisg ICAgICAgIEVSUk9SKCJGYWlsZWQgdG8gZ2V0IG1heCBtZm5cbiIpOworICAgICAgICBnb3RvIHVu ZG9fdW5waW47CisgICAgfQorCisgICAgbWF4X3BhZ2VzICsrOworICAgIHhjX2RvbWFpbl9zZXRt YXhtZW0oeGNfaGFuZGxlLCBkb21pZCwgbWF4X3BhZ2VzIDw8IDIpOworCisgICAgaWYgKGxvY2tf cGFnZXMoJm5ld19tZm4sIHNpemVvZih4ZW5fcGZuX3QpKSkKKyAgICB7CisgICAgICAgIEVSUk9S KCJDb3VsZCBub3QgbG9jayBuZXdfbWZuXG4iKTsKKyAgICAgICAgZ290byB1bmRvX21heG1lbTsK KyAgICB9CisgICAgcmMgPSB4Y19kb21haW5fbWVtb3J5X2luY3JlYXNlX3Jlc2VydmF0aW9uKHhj X2hhbmRsZSwgZG9taWQsIDEsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMHgwLCAmbmV3X21mbik7CisKKyAgICBpZiAocmMgPCAwKQorICAgIHsKKyAgICAgICAgRVJS T1IoIkZhaWxlZCB0byBpbmNyZWFzZSByZXNlcnZhdGlvbiBcbiIpOworICAgICAgICBnb3RvIHVu ZG9fbWF4bWVtOworICAgIH0KKworICAgIHVubG9ja19wYWdlcygmbmV3X21mbiwgc2l6ZW9mKHhl bl9wZm5fdCkpOworCisgICAgLyogQ29weSBjb250ZW50IGZyb20gb2xkIHBhZ2UgdG8gbmV3IG9u ZSAqLworICAgIG9sZF9wID0geGNfbWFwX2ZvcmVpZ25fcmFuZ2UoeGNfaGFuZGxlLCBkb21pZCwg UEFHRV9TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9UX1JFQUQsIG1m bik7CisgICAgdG1wX3AgPSBtYWxsb2MoUEFHRV9TSVpFKTsKKworICAgIGlmICggIW9sZF9wIHx8 ICF0bXBfcCApCisgICAgICAgIGdvdG8gdW5kb19pbmNyZWFzZTsKKworICAgIG1lbWNweSh0bXBf cCwgb2xkX3AsIFBBR0VfU0laRSk7CisgICAgbXVubWFwKG9sZF9wLCBQQUdFX1NJWkUpOworCisg ICAgcmMgPSB1cGRhdGVfcHRlKHhjX2hhbmRsZSwgbWZuLCBuZXdfbWZuLCBkb21pZCwKKyAgICAg ICAgICAgICAgICAgICAgcDJtLCBwZm5fdHlwZSwgcDJtX3NpemUsIHB0X2xldmVscywgZ3Vlc3Rf d2lkdGgpOworCisgICAgaWYgKHJjKQorICAgIHsKKyAgICAgICAgRVJST1IoInVwZGF0ZSBmYWls ZWRcbiIpOworICAgICAgICAvKiBObyByZWNvdmVyIGFjdGlvbiBub3cgZm9yIHVwZGF0ZSBmYWls ICovCisgICAgICAgIGJyb2tlbiA9IDE7CisgICAgICAgIGdvdG8gdW5tYXBfdG1wX3A7CisgICAg fQorCisgICAgcmMgPSBleGNoYW5nZV9wYWdlKHhjX2hhbmRsZSwgbWZuLCBuZXdfbWZuLCBkb21p ZCk7CisKKyAgICBpZiAocmMpCisgICAgeworICAgICAgICBFUlJPUigiRXhjaGFuZ2UgdGhlIHBh Z2UgZmFpbGVkXG4iKTsKKyAgICAgICAgLyogV2Ugd2lsbCB0cnkgdG8gdGFrZSBhY3Rpb24gaGVy ZSAqLworICAgICAgICBnb3RvIG9mZmxpbmVfZXJyb3I7CisgICAgfQorCisgICAgLyogQ2hlY2sg aWYgcGFnZXMgYXJlIG9mZmxpbmVkIGFscmVhZHkgKi8KKyAgICByYyA9IHhjX3F1ZXJ5X3BhZ2Vf b2ZmbGluZV9zdGF0dXMoeGNfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBm bl90b19tZm4ocGZuLCBwMm0sIGd1ZXN0X3dpZHRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwZm5fdG9fbWZuKHBmbiwgcDJtLCBndWVzdF93aWR0aCksCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJnN0YXR1cyk7CisKKyAgICBpZiAocmMpCisgICAgeworICAgICAgICBFUlJP UigiRmFpbCB0byBxdWVyeSBvZmZsaW5lIHN0YXR1c1xuIik7CisgICAgICAgIGdvdG8gdW5tYXBf dG1wX3A7CisgICAgfQorCisgICAgaWYgKCAhKHN0YXR1cyAmIFBHX09GRkxJTkVfU1RBVFVTX09G RkxJTkVEKSApCisgICAgeworICAgICAgICAvKiBTaG91bGQgc2hvdWxkIG5vdCBjb21lcyBoZXJl ICovCisgICAgICAgIGdvdG8gb2ZmbGluZV9lcnJvcjsKKyAgICB9CisgICAgZWxzZQorICAgIHsK KyAgICAgICAgREVCVUcoIk5vdyBwYWdlIGlzIG9mZmxpbmVkICVseFxuIiwgcGZuKTsKKyAgICAg ICAgLyogVXBkYXRlIHRoZSBwMm0gdGFibGUgKi8KKyAgICAgICAgcDJtW3Bmbl0gPSBuZXdfbWZu OworCisgICAgICAgIG5ld19wID0geGNfbWFwX2ZvcmVpZ25fcmFuZ2UoeGNfaGFuZGxlLCBkb21p ZCwgUEFHRV9TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1Rf UkVBRHxQUk9UX1dSSVRFLCBuZXdfbWZuKTsKKyAgICAgICAgbWVtY3B5KG5ld19wLCB0bXBfcCwg UEFHRV9TSVpFKTsKKyAgICAgICAgbXVubWFwKG5ld19wLCBQQUdFX1NJWkUpOworICAgICAgICB4 Y19kb21haW5fc2V0bWF4bWVtKHhjX2hhbmRsZSwgZG9taWQsIChtYXhfcGFnZXMgLSAxICkgPDwg Mik7CisgICAgfQorCisgICAgcmV0dXJuIDA7CisKK29mZmxpbmVfZXJyb3I6CisgICAgaWYgKHVw ZGF0ZV9wdGUoeGNfaGFuZGxlLCBuZXdfbWZuLCBtZm4sIGRvbWlkLAorICAgICAgICAgICAgICAg ICAgcDJtLCBwZm5fdHlwZSwgcDJtX3NpemUsIHB0X2xldmVscywgZ3Vlc3Rfd2lkdGgpIDwgMCkK KyAgICAgICAgZ290byBicm9rZW47CisKK3VubWFwX3RtcF9wOgorICAgIGZyZWUodG1wX3ApOwor ICAgIG11bm1hcChuZXdfcCwgUEFHRV9TSVpFKTsKKworCit1bmRvX2luY3JlYXNlOgorICAgIGlm ICh4Y19kb21haW5fbWVtb3J5X2RlY3JlYXNlX3Jlc2VydmF0aW9uKHhjX2hhbmRsZSwgZG9taWQs IDEsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5l d19tZm4pKQorICAgICAgICBnb3RvIGJyb2tlbjsKKwordW5kb19tYXhtZW06CisgICAgeGNfZG9t YWluX3NldG1heG1lbSh4Y19oYW5kbGUsIGRvbWlkLCAobWF4X3BhZ2VzIC0gMSApIDw8IDIpOwor Cit1bmRvX3VucGluOgorICAgIGlmIChwZm5fdHlwZVtwZm5dICYgWEVOX0RPTUNUTF9QRklORk9f TFBJTlRBQikKKyAgICB7CisgICAgICAgIHN3aXRjaCAoIHBmbl90eXBlW3Bmbl0gJiBYRU5fRE9N Q1RMX1BGSU5GT19MVEFCVFlQRV9NQVNLICkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBY RU5fRE9NQ1RMX1BGSU5GT19MMVRBQjoKKyAgICAgICAgICAgICAgICB1bnBpbi5jbWQgPSBNTVVF WFRfUElOX0wxX1RBQkxFOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBj YXNlIFhFTl9ET01DVExfUEZJTkZPX0wyVEFCOgorICAgICAgICAgICAgICAgIHVucGluLmNtZCA9 IE1NVUVYVF9QSU5fTDJfVEFCTEU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg ICAgIGNhc2UgWEVOX0RPTUNUTF9QRklORk9fTDNUQUI6CisgICAgICAgICAgICAgICAgdW5waW4u Y21kID0gTU1VRVhUX1BJTl9MM19UQUJMRTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAg ICAgICAgICAgY2FzZSBYRU5fRE9NQ1RMX1BGSU5GT19MNFRBQjoKKyAgICAgICAgICAgICAgICB1 bnBpbi5jbWQgPSBNTVVFWFRfUElOX0w0X1RBQkxFOworICAgICAgICAgICAgICAgIGJyZWFrOwor CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEVSUk9SKCJVbnBpbmVkIGZv ciBub24gcGF0ZSB0YWJsZSBwYWdlXG4iKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgfQorICAgICAgICB1bnBpbi5hcmcxLm1mbiA9IG1mbjsKKworICAgICAgICBpZiAoIHhjX21t dWV4dF9vcCh4Y19oYW5kbGUsICZ1bnBpbiwgMSwgZG9taWQpIDwgMCApCisgICAgICAgIHsKKyAg ICAgICAgICAgIEVSUk9SKCJmYWlsZWQgdG8gcGluIHRoZSBtZm4gYWdhaW5cbiIpOworICAgICAg ICAgICAgZ290byBicm9rZW47CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFicm9rZW4pCisg ICAgICAgIHJldHVybiAtMTsKK2Jyb2tlbjoKKyAgICByZXR1cm4gLTI7Cit9CmRpZmYgLXIgNTQ3 YmViMmY0ZmQwIHRvb2xzL2xpYnhjL3hlbmd1ZXN0LmgKLS0tIGEvdG9vbHMvbGlieGMveGVuZ3Vl c3QuaAlUaHUgTWFyIDE5IDA2OjE2OjIyIDIwMDkgKzA4MDAKKysrIGIvdG9vbHMvbGlieGMveGVu Z3Vlc3QuaAlUaHUgTWFyIDE5IDA2OjE3OjA3IDIwMDkgKzA4MDAKQEAgLTI5LDYgKzI5LDMxIEBA IGludCB4Y19kb21haW5fc2F2ZShpbnQgeGNfaGFuZGxlLCBpbnQgaW8KICAgICAgICAgICAgICAg ICAgICB2b2lkICooKmluaXRfcWVtdV9tYXBzKShpbnQsIHVuc2lnbmVkKSwgIC8qIEhWTSBvbmx5 ICovCiAgICAgICAgICAgICAgICAgICAgdm9pZCAoKnFlbXVfZmxpcF9idWZmZXIpKGludCwgaW50 KSk7ICAgICAvKiBIVk0gb25seSAqLwogCitpbnQgeGNfcmVwbGFjZV9wYWdlKGludCB4YywgeGVu X3Bmbl90IHBmbiwgaW50IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICB4ZW5fcGZuX3QgKnAy bSwgdW5zaWduZWQgbG9uZyAqcGZuX3R5cGUsCisgICAgICAgICAgICAgICAgICAgIGludCBwMm1f c2l6ZSwgaW50IHB0X2xldmVscywgaW50IGd1ZXN0X3dpZHRoKTsKKworaW50IHhjX21hcmtfcGFn ZV9vbmxpbmUoaW50IHhjLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAorICAgICAgICAgICAgICAgICAg ICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIHVpbnQzMl90ICpzdGF0dXMpOworCitpbnQgeGNfbWFy a19wYWdlX29mZmxpbmUoaW50IHhjLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAorICAgICAgICAgICAg ICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGVuZCwgdWludDMyX3QgKnN0YXR1cyk7CisKK2lu dCB4Y19xdWVyeV9wYWdlX29mZmxpbmVfc3RhdHVzKGludCB4YywgdW5zaWduZWQgbG9uZyBzdGFy dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCB1 aW50MzJfdCAqc3RhdHVzKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIG1hcCBtc3AgdGFibGUK KyAqIEBwYXJtIHhjX2hhbmRsZSBhIGhhbmRsZSB0byBhbiBvcGVuIGh5cGVydmlzb3IgaW50ZXJm YWNlCisgKiBAcGFybSBtYXhfbWZuIHRoZSBtYXggcGZuCisgKiBAcGFybSBwcm90IHRoZSBmbGFn cyB0byBtYXAsIHN1Y2ggYXMgcmVhZC93cml0ZSBldGMKKyAqIEBwYXJtIG1mbjAgcmV0dXJuIHRo ZSBmaXJzdCBtZm4sIGNhbiBiZSBOVUxMCisgKiBAcmV0dXJuIG1hcHBlZCBtMnAgdGFibGUgb24g c3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlCisgKi8KK3hlbl9wZm5fdCAqeGNfbWFwX20ycChpbnQg eGNfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbWF4X21mbiwK KyAgICAgICAgICAgICAgICAgICAgICBpbnQgcHJvdCwKKyAgICAgICAgICAgICAgICAgICAgICB1 bnNpZ25lZCBsb25nICptZm4wKTsKIAogLyoqCiAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVzdG9y ZSBhIHNhdmVkIGRvbWFpbi4KZGlmZiAtciA1NDdiZWIyZjRmZDAgdG9vbHMveGN1dGlscy9NYWtl ZmlsZQotLS0gYS90b29scy94Y3V0aWxzL01ha2VmaWxlCVRodSBNYXIgMTkgMDY6MTY6MjIgMjAw OSArMDgwMAorKysgYi90b29scy94Y3V0aWxzL01ha2VmaWxlCVRodSBNYXIgMTkgMDY6MTc6MDcg MjAwOSArMDgwMApAQCAtMTQsNyArMTQsNyBAQCBDRkxBR1MgKz0gLVdlcnJvcgogQ0ZMQUdTICs9 IC1XZXJyb3IKIENGTEFHUyArPSAkKENGTEFHU19saWJ4ZW5jdHJsKSAkKENGTEFHU19saWJ4ZW5n dWVzdCkgJChDRkxBR1NfbGlieGVuc3RvcmUpCiAKLVBST0dSQU1TID0geGNfcmVzdG9yZSB4Y19z YXZlIHJlYWRub3RlcyBsc2V2dGNobgorUFJPR1JBTVMgPSB4Y19yZXN0b3JlIHhjX3NhdmUgcmVh ZG5vdGVzIGxzZXZ0Y2huIHhjX29mZmxpbmUKIAogTERMSUJTICAgPSAkKExERkxBR1NfbGlieGVu Y3RybCkgJChMREZMQUdTX2xpYnhlbmd1ZXN0KSAkKExERkxBR1NfbGlieGVuc3RvcmUpCiAKZGlm ZiAtciA1NDdiZWIyZjRmZDAgdG9vbHMveGN1dGlscy94Y19vZmZsaW5lLmMKLS0tIC9kZXYvbnVs bAlUaHUgSmFuIDAxIDAwOjAwOjAwIDE5NzAgKzAwMDAKKysrIGIvdG9vbHMveGN1dGlscy94Y19v ZmZsaW5lLmMJVGh1IE1hciAxOSAwNjoxNzowNyAyMDA5ICswODAwCkBAIC0wLDAgKzEsMzI3IEBA CisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25z IG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNP UFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZgorICogdGhpcyBhcmNoaXZlIGZvciBtb3Jl IGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IGJ5IENocmlzdGlhbiBMaW1wYWNo CisgKgorICovCisKKyNpbmNsdWRlIDxlcnIuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNs dWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgor I2luY2x1ZGUgPHN5cy9pcGMuaD4KKyNpbmNsdWRlIDxzeXMvc2htLmg+CisjaW5jbHVkZSA8c3lz L3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2lu Y2x1ZGUgPGVyci5oPgorCisjaW5jbHVkZSA8eHMuaD4KKyNpbmNsdWRlIDx4ZW5jdHJsLmg+Cisj aW5jbHVkZSA8eGVuZ3Vlc3QuaD4KKyNpbmNsdWRlIDx4Y19wcml2YXRlLmg+CisjaW5jbHVkZSA8 eGNfY29yZS5oPgorCisjdW5kZWYgRVJST1IKKyN1bmRlZiBERUJVRworI2RlZmluZSBFUlJPUihm bXIsIGFyZ3MuLi4pIGRvIHsgZnByaW50ZihzdGRlcnIsICJFUlJPUjogIiBmbXIgLCAjI2FyZ3Mp OyB9IHdoaWxlICgwKQorI2RlZmluZSBERUJVRyhmbXIsIGFyZ3MuLi4pIGRvIHsgZnByaW50Zihz dGRlcnIsICJERUJVRzogIiBmbXIgLCAjI2FyZ3MpOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIEZQ UCAgICAgICAgICAgICAoUEFHRV9TSVpFLyhndWVzdF93aWR0aCkpCisKKy8qIE51bWJlciBvZiBl bnRyaWVzIGluIHRoZSBwZm5fdG9fbWZuX2ZyYW1lX2xpc3RfbGlzdCAqLworI2RlZmluZSBQMk1f RkxMX0VOVFJJRVMgKCgocDJtX3NpemUpKyhGUFAqRlBQKS0xKS8oRlBQKkZQUCkpCisKK3N0YXRp YyB4ZW5fcGZuX3QgcGZuX3RvX21mbih4ZW5fcGZuX3QgcGZuLCB4ZW5fcGZuX3QgKnAybSwgaW50 IGd1ZXN0X3dpZHRoKQoreworICByZXR1cm4gKCh4ZW5fcGZuX3QpICgoZ3Vlc3Rfd2lkdGg9PTgp PworICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50NjRfdCAqKXAybSlbKHBmbildKToKKyAg ICAgICAgICAgICAgICAgICAgICAgKCgoKHVpbnQzMl90ICopcDJtKVsocGZuKV0pID09IDB4ZmZm ZmZmZmZVID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTFVTCkgOgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90ICopcDJtKVsocGZuKV0pKSkpOworfQorCitz dGF0aWMgaW50IGdldF9wdF9sZXZlbChpbnQgeGNfaGFuZGxlLCB1aW50MzJfdCBkb21pZCwKKyAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqcHRfbGV2ZWwsCisgICAgICAgICAg ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmd1ZXN0X3dpZHRoKQoreworICAgIERFQ0xBUkVf RE9NQ1RMOworICAgIHhlbl9jYXBhYmlsaXRpZXNfaW5mb190IHhlbl9jYXBzID0gIiI7CisKKyAg ICBpZiAoeGNfdmVyc2lvbih4Y19oYW5kbGUsIFhFTlZFUl9jYXBhYmlsaXRpZXMsICZ4ZW5fY2Fw cykgIT0gMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgbWVtc2V0KCZkb21jdGwsIDAsIHNp emVvZihkb21jdGwpKTsKKyAgICBkb21jdGwuZG9tYWluID0gZG9taWQ7CisgICAgZG9tY3RsLmNt ZCA9IFhFTl9ET01DVExfZ2V0X2FkZHJlc3Nfc2l6ZTsKKworICAgIGlmICggZG9fZG9tY3RsKHhj X2hhbmRsZSwgJmRvbWN0bCkgIT0gMCApCisgICAgICAgIHJldHVybiAtMTsKKworICAgICpndWVz dF93aWR0aCA9IGRvbWN0bC51LmFkZHJlc3Nfc2l6ZS5zaXplIC8gODsKKworICAgIGlmIChzdHJz dHIoeGVuX2NhcHMsICJ4ZW4tMy4wLXg4Nl82NCIpKQorICAgICAgICAvKiBEZXBlbmRzIG9uIHdo ZXRoZXIgaXQncyBhIGNvbXBhdCAzMi1vbi02NCBndWVzdCAqLworICAgICAgICAqcHRfbGV2ZWwg PSAoICgqZ3Vlc3Rfd2lkdGggPT0gOCkgPyA0IDogMyApOworICAgIGVsc2UgaWYgKHN0cnN0cih4 ZW5fY2FwcywgInhlbi0zLjAteDg2XzMycCIpKQorICAgICAgICAqcHRfbGV2ZWwgPSAzOworICAg IGVsc2UgaWYgKHN0cnN0cih4ZW5fY2FwcywgInhlbi0zLjAteDg2XzMyIikpCisgICAgICAgICpw dF9sZXZlbCA9IDI7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICByZXR1cm4g MDsKK30KKworI2RlZmluZSBQR19PRkZMSU5FX1NUQVRVU19IQU5ETEVEICgxVUwgPDwgMTQpCitp bnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIHVuc2lnbmVkIGxvbmcgc3Rh cnQsIGVuZDsKKyAgICBpbnQgeGNfaGFuZGxlID0gMCwgaSwgbnVtLCByYzsKKyAgICB1aW50MzJf dCAqc3RhdHVzID0gTlVMTDsKKworICAgIGlmIChhcmdjICE9IDMpCisgICAgICAgIGZwcmludGYo c3RkZXJyLCAidXNhZ2U6ICVzIHN0YXJ0IGVuZCIsIGFyZ3ZbMF0pOworCisgICAgc3RhcnQgPSBz dHJ0b3VsKGFyZ3ZbMV0sIE5VTEwsIDApOworICAgIGVuZCA9IHN0cnRvdWwoYXJndlsyXSwgTlVM TCwgMCk7CisKKyAgICB4Y19oYW5kbGUgPSB4Y19pbnRlcmZhY2Vfb3BlbigpOworCisgICAgaWYg KCF4Y19oYW5kbGUpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIG51bSA9IGVuZCAtIHN0YXJ0 ICsgMTsKKworICAgIHJjID0gLUVOT01FTTsKKyAgICBzdGF0dXMgID0gbWFsbG9jKG51bSAqIHNp emVvZih1aW50MzJfdCkpOworICAgIGlmICghc3RhdHVzKQorICAgICAgICByZXR1cm4gLUVJTlZB TDsKKyAgICBtZW1zZXQoc3RhdHVzLCAwLCBzaXplb2YodWludDMyX3QpKm51bSk7CisKKyAgICBy YyA9IHhjX21hcmtfcGFnZV9vZmZsaW5lKHhjX2hhbmRsZSwgc3RhcnQsIGVuZCwgc3RhdHVzKTsK KworICAgIGlmIChyYykKKyAgICB7CisgICAgICAgIEVSUk9SKCJmYWlsIHRvIG1hcmsgcGFnZXMg b2ZmbGluZSAleFxuIiwgcmMpOworICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICB9CisKKyAg ICBmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspCisgICAgeworICAgICAgICBERUJVRygicGZuICVs eCBzdGF0dXMgJXhcbiIsIHN0YXJ0ICsgaSwgc3RhdHVzW2ldKTsKKworICAgICAgICBpZiAoc3Rh dHVzW2ldICYgUEdfT0ZGTElORV9TVEFUVVNfSEFORExFRCkKKyAgICAgICAgICAgIGNvbnRpbnVl OworCisgICAgICAgIHN3aXRjaCAoc3RhdHVzW2ldICYgUEdfT0ZGTElORV9TVEFUVVNfTUFTSykK KyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBQR19PRkZMSU5FX09GRkxJTkVEOgorICAgICAg ICAgICAgICAgIERFQlVHKCJvZmZsaW5lZCBwYWdlICVseFxuIiwgc3RhcnQgKyBpKTsKKyAgICAg ICAgICAgICAgICBzdGF0dXNbaV0gfD0gUEdfT0ZGTElORV9TVEFUVVNfSEFORExFRDsKKyAgICAg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNl IFBHX09GRkxJTkVfUEVORElORzoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1aW50 MzJfdCBkb21pZCwgajsKKyAgICAgICAgICAgICAgICBpbnQgcG9ydCwgeGNlID0gLTEsIHJjOwor ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcDJtX3NpemU7CisgICAgICAgICAgICAgICAg eGVuX3Bmbl90ICpwMm1fdGFibGUgPSBOVUxMOworICAgICAgICAgICAgICAgIHhlbl9wZm5fdCAq bTJwX3RhYmxlID0gTlVMTDsKKyAgICAgICAgICAgICAgICB4Y19kb21pbmZvX3QgaW5mbzsKKyAg ICAgICAgICAgICAgICB1aW50NjRfYWxpZ25lZF90IHNoYXJlZF9pbmZvX2ZyYW1lOworICAgICAg ICAgICAgICAgIHNoYXJlZF9pbmZvX2FueV90ICpsaXZlX3NoaW5mbyA9IE5VTEw7CisgICAgICAg ICAgICAgICAgdWludDMyX3QgKnBmbl90eXBlID0gTlVMTDsKKyAgICAgICAgICAgICAgICB1bnNp Z25lZCBsb25nICpwZm5fcmVhbCA9IE5VTEwsIG1heF9tZm47CisgICAgICAgICAgICAgICAgaW50 IHN1c3BlbmRfZXZ0Y2huID0gLTEsIHN1c3BlbmRlZCA9IDA7CisgICAgICAgICAgICAgICAgdWlu dDMyX3QgcHRfbGV2ZWwgPSAwLCBndWVzdF93aWR0aCA9IDA7CisKKyAgICAgICAgICAgICAgICBk b21pZCA9IHN0YXR1c1tpXSA+PiBQR19PRkZMSU5FX09XTkVSX1NISUZUOworCisgICAgICAgICAg ICAgICAgaWYgKCAhZG9taWQgfHwgKGRvbWlkID4gRE9NSURfRklSU1RfUkVTRVJWRUQpICkKKyAg ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIERFQlVHKCJEb20wJ3MgcGFnZSBj YW4ndCBiZSBMTSIpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAg ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIGdldF9wdF9sZXZlbCh4Y19oYW5kbGUs IGRvbWlkLCAmcHRfbGV2ZWwsICZndWVzdF93aWR0aCkgKQorICAgICAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgICAgICAgRVJST1IoIlVuYWJsZSB0byBnZXQgUFQgbGV2ZWwgaW5mby4iKTsK KyAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgICAgICAgICAgfQorCisg ICAgICAgICAgICAgICAgaWYgKCB4Y19kb21haW5fZ2V0aW5mbyh4Y19oYW5kbGUsIGRvbWlkLCAx LCAmaW5mbykgIT0gMSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBF UlJPUigiQ291bGQgbm90IGdldCBkb21haW4gaW5mbyIpOworICAgICAgICAgICAgICAgICAgICBn b3RvIGZhaWxlZDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoaW5m by5odm0pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBERUJVRygicGxl YXNlIExpdmUgbWlncmF0ZSBkb20gJXhcbiIsIGRvbWlkKTsKKyAgICAgICAgICAgICAgICAgICAg Z290byBmYWlsZWQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLyogTWFw IHRoZSBwMm0gdGFibGUgYW5kIE0yUCB0YWJsZSAqLworICAgICAgICAgICAgICAgIHNoYXJlZF9p bmZvX2ZyYW1lID0gaW5mby5zaGFyZWRfaW5mb19mcmFtZTsKKworICAgICAgICAgICAgICAgIGxp dmVfc2hpbmZvID0geGNfbWFwX2ZvcmVpZ25fcmFuZ2UoeGNfaGFuZGxlLCBkb21pZCwKKyAgICAg ICAgICAgICAgICAgIFBBR0VfU0laRSwgUFJPVF9SRUFELCBzaGFyZWRfaW5mb19mcmFtZSk7Cisg ICAgICAgICAgICAgICAgaWYgKCAhbGl2ZV9zaGluZm8gKQorICAgICAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgICAgICAgRVJST1IoIkNvdWxkbid0IG1hcCBsaXZlX3NoaW5mbyIpOworICAg ICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg ICAgICAgICAgICBpZiAoIChyYyA9IHhjX2NvcmVfYXJjaF9tYXBfcDJtX3dyaXRhYmxlKHhjX2hh bmRsZSwgZ3Vlc3Rfd2lkdGgsICZpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZV9zaGluZm8sICZwMm1fdGFibGUsICAmcDJt X3NpemUpKSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBFUlJPUigi Q291bGRuJ3QgbWFwIHAybSB0YWJsZSAleFxuIiwgcmMpOworICAgICAgICAgICAgICAgICAgICBn b3RvIGZhaWxlZDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBtYXhfbWZu ID0geGNfbWVtb3J5X29wKHhjX2hhbmRsZSwgWEVOTUVNX21heGltdW1fcmFtX3BhZ2UsIE5VTEwp OworICAgICAgICAgICAgICAgIGlmICggIShtMnBfdGFibGUgPSB4Y19tYXBfbTJwKHhjX2hhbmRs ZSwgbWF4X21mbiwgUFJPVF9SRUFELCBOVUxMKSkgKQorICAgICAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgICAgICAgRVJST1IoIkZhaWxlZCB0byBtYXAgbGl2ZSBNMlAgdGFibGUiKTsKKyAg ICAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgICAgICAgICAgfQorCisgICAg ICAgICAgICAgICAgLyogU3VzcGVuZCB0aGUgZ3Vlc3QgKi8KKyAgICAgICAgICAgICAgICBwb3J0 ID0geHNfc3VzcGVuZF9ldnRjaG5fcG9ydChkb21pZCk7CisgICAgICAgICAgICAgICAgaWYgKHBv cnQgPCAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgRVJST1IoIkRv bSAleDogTm8gc3VzcHNlbmQgcG9ydCwgdHJ5IGxpdmUgbWlncmF0aW9uXG4iLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRvbWlkKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBmYWls ZWQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgeGNlID0geGNfZXZ0Y2hu X29wZW4oKTsKKyAgICAgICAgICAgICAgICBpZiAoeGNlIDwgMCkKKyAgICAgICAgICAgICAgICB7 CisgICAgICAgICAgICAgICAgICAgIEVSUk9SKCJEb20gJXg6IGZhaWwgdG8gb3BlbiBldnRjaG5c biIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9taWQpOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg ICAgICAgIHN1c3BlbmRfZXZ0Y2huID0KKyAgICAgICAgICAgICAgICAgIHhjX3N1c3BlbmRfZXZ0 Y2huX2luaXQoeGNfaGFuZGxlLCB4Y2UsIGRvbWlkLCBwb3J0KTsKKyAgICAgICAgICAgICAgICBp ZiAoc3VzcGVuZF9ldnRjaG4gPCAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg ICAgICAgRVJST1IoInN1c3BlbmQgZXZlbnQgY2hhbm5lbCBpbml0aWFsaXphdGlvbiBmYWlsZWRc biIpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgICAgICB9 CisKKyAgICAgICAgICAgICAgICByYyA9IHhjX2V2dGNobl9ub3RpZnkoeGNlLCBzdXNwZW5kX2V2 dGNobik7CisgICAgICAgICAgICAgICAgaWYgKHJjIDwgMCkgeworICAgICAgICAgICAgICAgICAg ICBFUlJPUigiZmFpbGVkIHRvIG5vdGlmeSBzdXNwZW5kIGNoYW5uZWw6ICVkIiwgcmMpOworICAg ICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgaWYgKHhjX2F3YWl0X3N1c3BlbmQoeGNlLCBzdXNwZW5kX2V2dGNobikgPCAwKSB7 CisgICAgICAgICAgICAgICAgICAgIEVSUk9SKCJzdXNwZW5kIGZhaWxlZCIpO1wKKyAgICAgICAg ICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgIHN1c3BlbmRlZCA9IDE7CisKKyAgICAgICAgICAgICAgICAvKiBHZXQgcGZuIHR5cGUgKi8K KyAgICAgICAgICAgICAgICBwZm5fdHlwZSA9IG1hbGxvYyhzaXplb2YodWludDMyX3QpICogcDJt X3NpemUpOworICAgICAgICAgICAgICAgIGlmICghcGZuX3R5cGUpCisgICAgICAgICAgICAgICAg eworICAgICAgICAgICAgICAgICAgICBFUlJPUigiRmFpbGVkIHRvIG1hbGxvYyBwZm5fdHlwZVxu Iik7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICBtZW1zZXQocGZuX3R5cGUsIDAsIHNpemVvZih1aW50MzJfdCkgKiBw Mm1fc2l6ZSk7CisKKyAgICAgICAgICAgICAgICBwZm5fcmVhbCA9IG1hbGxvYyhzaXplb2YodW5z aWduZWQgbG9uZykgKiBwMm1fc2l6ZSk7CisgICAgICAgICAgICAgICAgaWYgKCFwZm5fcmVhbCkK KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEVSUk9SKCJGYWlsZWQgdG8g bWFsbG9jIHBmbl9yZWFsXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1lbXNldChwZm5fcmVhbCwgMCwgc2l6 ZW9mKHVuc2lnbmVkIGxvbmcpICogcDJtX3NpemUpOworCisgICAgICAgICAgICAgICAgZm9yIChq ID0gMDsgaiA8IHAybV9zaXplOyBqKyspCisgICAgICAgICAgICAgICAgICAgIHBmbl90eXBlW2pd ID0gcGZuX3RvX21mbihqLCBwMm1fdGFibGUsIGd1ZXN0X3dpZHRoKTsKKworICAgICAgICAgICAg ICAgIGlmICggbG9ja19wYWdlcyhwZm5fdHlwZSwgcDJtX3NpemUgKiBzaXplb2YoKnBmbl90eXBl KSkgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgRVJST1IoIlVuYWJs ZSB0byBsb2NrIHBmbl90eXBlIGFycmF5Iik7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFp bGVkOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIGxvY2tfcGFnZXMo cGZuX3JlYWwsIHAybV9zaXplICogc2l6ZW9mKCpwZm5fcmVhbCkpICkKKyAgICAgICAgICAgICAg ICB7CisgICAgICAgICAgICAgICAgICAgIEVSUk9SKCJVbmFibGUgdG8gbG9jayBwZm5fcmVhbCBh cnJheSIpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgICAg ICB9CisKKyAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcDJtX3NpemUgOyBqKz0xMDI0 KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50ID0gKChw Mm1fc2l6ZSAtIGogKSA+IDEwMjQgKSA/IDEwMjQ6IChwMm1fc2l6ZSAtIGopOworICAgICAgICAg ICAgICAgICAgICBpZiAoICggcmMgPSB4Y19nZXRfcGZuX3R5cGVfYmF0Y2goeGNfaGFuZGxlLCBk b21pZCwgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZm5fdHlwZSArIGop KSApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEVSUk9S KCJGYWlsZWQgdG8gZ2V0IHBmbl90eXBlICV4XG4iLCByYyk7CisgICAgICAgICAgICAgICAgICAg ICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICB9CisKKyAgICAgICAgICAgICAgICAvKiBOb3cgcmVwbGFjZSB0aGUgcGFnZSAqLworICAgICAg ICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwMm1fc2l6ZTsgaisrKQorICAgICAgICAgICAgICAg ICAgICBwZm5fcmVhbFtqXSA9IHBmbl90eXBlW2pdOworCisgICAgICAgICAgICAgICAgZm9yIChq ID0gaSA7IGogPCBudW07IGorKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg ICAgIGlmICggKChzdGF0dXNbal0mIFBHX09GRkxJTkVfU1RBVFVTX01BU0spID09IFBHX09GRkxJ TkVfUEVORElORykgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAoKHN0YXR1c1tqXSA+PiBQ R19PRkZMSU5FX09XTkVSX1NISUZUKSA9PSBkb21pZCkgKQorICAgICAgICAgICAgICAgICAgICB7 CisjZGVmaW5lIG1mbl90b19wZm4oX21mbikgIChtMnBfdGFibGVbKF9tZm4pXSkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmMgPSB4Y19yZXBsYWNlX3BhZ2UoeGNfaGFuZGxlLCBtZm5f dG9fcGZuKHN0YXJ0ICsgaiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9taWQs IHAybV90YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZm5fcmVhbCwgcDJt X3NpemUsIHB0X2xldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1ZXN0X3dp ZHRoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJjKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFUlJP UigiRmFpbGVkIHRvIHJlcGxhY2UgcGFnZSAleFxuIiwgaik7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c1tqXSB8PSBQR19PRkZMSU5F X1NUQVRVU19IQU5ETEVEOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg fQorCitmYWlsZWQ6CisgICAgICAgICAgICAgICAgc3RhdHVzW2ldIHw9IFBHX09GRkxJTkVfU1RB VFVTX0hBTkRMRUQ7CisKKyAgICAgICAgICAgICAgICBpZiAocDJtX3RhYmxlKQorICAgICAgICAg ICAgICAgICAgICBtdW5tYXAocDJtX3RhYmxlLCBQMk1fRkxMX0VOVFJJRVMgKiBQQUdFX1NJWkUp OworICAgICAgICAgICAgICAgIGlmIChwZm5fdHlwZSkKKyAgICAgICAgICAgICAgICAgICAgZnJl ZShwZm5fdHlwZSk7CisgICAgICAgICAgICAgICAgaWYgKGxpdmVfc2hpbmZvKQorICAgICAgICAg ICAgICAgICAgICBtdW5tYXAobGl2ZV9zaGluZm8sIFBBR0VfU0laRSk7CisgICAgICAgICAgICAg ICAgaWYgKHN1c3BlbmRfZXZ0Y2huID4gMCkKKyAgICAgICAgICAgICAgICAgICAgeGNfc3VzcGVu ZF9ldnRjaG5fcmVsZWFzZSh4Y19oYW5kbGUsIHN1c3BlbmRfZXZ0Y2huKTsKKyAgICAgICAgICAg ICAgICBpZiAoc3VzcGVuZGVkKQorICAgICAgICAgICAgICAgICAgICB4Y19kb21haW5fcmVzdW1l KHhjX2hhbmRsZSwgZG9taWQsIDEpOworICAgICAgICAgICAgICAgIGlmICh4Y2UgPiAwKQorICAg ICAgICAgICAgICAgICAgICB4Y19ldnRjaG5fY2xvc2UoeGNlKTsKKyAgICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICB7 CisgICAgICAgICAgICAgICAgRVJST1IoIkVycm9yIHN0YXR1cyByZXN1bHQgJXhcbiIsIHN0YXR1 c1tpXSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0K KworICAgIH0KKyAgICBpZiAoeGNfaGFuZGxlKQorICAgICAgICB4Y19pbnRlcmZhY2VfY2xvc2Uo eGNfaGFuZGxlKTsKKyAgICBpZiAoc3RhdHVzKQorICAgICAgICBmcmVlKHN0YXR1cyk7CisgICAg cmV0dXJuIDA7Cit9Cg== --_005_E2263E4A5B2284449EEBD0AAB751098401C7EC06F6PDSMSX501ccrc_ Content-Type: application/octet-stream; name="exchange_page.patch" Content-Description: exchange_page.patch Content-Disposition: attachment; filename="exchange_page.patch"; size=3048; creation-date="Thu, 19 Mar 2009 20:39:16 GMT"; modification-date="Thu, 19 Mar 2009 20:39:16 GMT" Content-Transfer-Encoding: base64 VGhpcyBwYXRjaCBhZGQgYSBmdW5jdGlvbiB0byBleGNoYW5nZSBhIGZvcmVpZ24gZG9tYWluJ3Mg b25lIHBhZ2UgdG8gYW5vdGhlci4KCkFsdGhvdWdoIHRoZXJlIGlzIGFscmVhZHkgaGFzIGEgbWVt b3J5X2V4Y2hhbmdlIGh5cGVyY2FsbCwgYnV0IHRoYXQgaHlwZXJjYWxsIHdpbGwgbm90IGFjY2Vw dCBuZXcgcGFnZSwgYWRkIHRoYXQgc3VwcG9ydCB3aWxsIGJyZWFrIGN1cnJlbnQgQUJJLiBBbHNv IGl0IGRvZXMgbm90IHN1cHBvcnQgZm9yZWlnbiBkb21haW4uIFRoaXMgZnVuY3Rpb24gYWRkIHRo b3NlIHN1cHBvcnQuCgpTaWduZWQtb2ZmLWJ5OiBKaWFuZywgWXVuaG9uZyA8eXVuaG9uZy5qaWFu Z0BpbnRlbC5jb20+CgpkaWZmIC1yIDVhM2JjMmViYmM2NCB4ZW4vYXJjaC94ODYvbW0uYwotLS0g YS94ZW4vYXJjaC94ODYvbW0uYwlUaHUgTWFyIDE5IDA2OjE0OjE1IDIwMDkgKzA4MDAKKysrIGIv eGVuL2FyY2gveDg2L21tLmMJVGh1IE1hciAxOSAwNjo1ODoyMCAyMDA5ICswODAwCkBAIC0yOTI5 LDYgKzI5MjksNTcgQEAgaW50IGRvX21tdWV4dF9vcCgKICAgICAgICAgICAgIHB1dF9wYWdlKG1m bl90b19wYWdlKHNyY19tZm4pKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAg ICAgIGNhc2UgTU1VRVhUX0VYQ0hBTkdFX1BBR0U6CisgICAgICAgIHsKKyAgICAgICAgICAgIHVu c2lnbmVkIGxvbmcgb2xkX21mbiwgbmV3X21mbjsKKyAgICAgICAgICAgIHhlbl9wZm5fdCBvbGRf cGZuOworCisgICAgICAgICAgICBvbGRfbWZuID0gb3AuYXJnMi5zcmNfbWZuOworICAgICAgICAg ICAgbmV3X21mbiA9IG9wLmFyZzEubWZuOworCisgICAgICAgICAgICBpZiAoICFnZXRfcGFnZV9m cm9tX3BhZ2VucihuZXdfbWZuLCBGT1JFSUdORE9NKSApCisgICAgICAgICAgICB7CisgICAgICAg ICAgICAgICAgb2theSA9IDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9 CisKKyAgICAgICAgICAgIGlmICggIUZPUkVJR05ET00tPmlzX3NodXRfZG93biB8fAorICAgICAg ICAgICAgICAgIChGT1JFSUdORE9NLT5zaHV0ZG93bl9jb2RlICE9IFNIVVRET1dOX3N1c3BlbmQp ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBva2F5ID0gMDsKKyAgICAgICAgICAg ICAgICBnb3RvIGV4Y2hhbmdlX2ZhaWw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8q IE5vIHJlZmVyZWNlIHRvIHRoaXMgcGFnZSBmcm9tIHBhZ2UgdGFibGUgYW55bW9yZSAqLworCisg ICAgICAgICAgICBvbGRfcGZuID0gbWZuX3RvX2dtZm4oRk9SRUlHTkRPTSwgb2xkX21mbik7CisK KyAgICAgICAgICAgIC8qIHJlbGVhc2Ugb3JpZ2luYWwgb25lICovCisgICAgICAgICAgICBpZiAo IHVubGlrZWx5KHN0ZWFsX3BhZ2UoRk9SRUlHTkRPTSwgbWZuX3RvX3BhZ2Uob2xkX21mbiksIDAp KSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb2theSA9IDA7CisgICAgICAgICAg ICAgICAgZ290byBleGNoYW5nZV9mYWlsOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp ZiAoICF0ZXN0X2FuZF9jbGVhcl9iaXQoX1BHQ19hbGxvY2F0ZWQsCisgICAgICAgICAgICAgICAg ICAmKG1mbl90b19wYWdlKG9sZF9tZm4pLT5jb3VudF9pbmZvKSkgKQorICAgICAgICAgICAgICAg IEJVRygpOworCisgICAgICAgICAgICBndWVzdF9waHlzbWFwX3JlbW92ZV9wYWdlKEZPUkVJR05E T00sIG9sZF9wZm4sIG9sZF9tZm4sIDApOworCisgICAgICAgICAgICBwdXRfcGFnZShtZm5fdG9f cGFnZShvbGRfbWZuKSk7CisKKyAgICAgICAgICAgIC8qIFNldHVwIHRoZSBuZXcgcGFnZSAqLwor ICAgICAgICAgICAgZ3Vlc3RfcGh5c21hcF9hZGRfcGFnZShGT1JFSUdORE9NLCBvbGRfcGZuLCBu ZXdfbWZuLCAwKTsKKworICAgICAgICAgICAgaWYgKCAhcGFnaW5nX21vZGVfdHJhbnNsYXRlKEZP UkVJR05ET00pICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzZXRfZ3Bmbl9mcm9t X21mbihuZXdfbWZuLCBvbGRfcGZuKTsKKyAgICAgICAgICAgIH0KK2V4Y2hhbmdlX2ZhaWw6Cisg ICAgICAgICAgICBwdXRfcGFnZShtZm5fdG9fcGFnZShuZXdfbWZuKSk7CisgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICB9CiAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIE1FTV9M T0coIkludmFsaWQgZXh0ZW5kZWQgcHQgY29tbWFuZCAweCV4Iiwgb3AuY21kKTsKZGlmZiAtciA1 YTNiYzJlYmJjNjQgeGVuL2luY2x1ZGUvcHVibGljL3hlbi5oCi0tLSBhL3hlbi9pbmNsdWRlL3B1 YmxpYy94ZW4uaAlUaHUgTWFyIDE5IDA2OjE0OjE1IDIwMDkgKzA4MDAKKysrIGIveGVuL2luY2x1 ZGUvcHVibGljL3hlbi5oCVRodSBNYXIgMTkgMDY6MTY6MjIgMjAwOSArMDgwMApAQCAtMjM4LDYg KzIzOCwxMCBAQCBERUZJTkVfWEVOX0dVRVNUX0hBTkRMRSh4ZW5fcGZuX3QpOwogICogY21kOiBN TVVFWFRfQ09QWV9QQUdFCiAgKiBtZm46IE1hY2hpbmUgZnJhbWUgbnVtYmVyIG9mIHRoZSBkZXN0 aW5hdGlvbiBwYWdlLgogICogc3JjX21mbjogTWFjaGluZSBmcmFtZSBudW1iZXIgb2YgdGhlIHNv dXJjZSBwYWdlLgorICoKKyAqIGNtZDogTU1VRVhUX0VYQ0hBTkdFX1BBR0UKKyAqIHNyY19tZm46 IE1hY2hpbmUgZnJhbWUgbnVtYmVyIG9mIHRoZSBwYWdlIHRoYXQgd2lsbCBiZSByZXBsYWNlZCBi eSBuZXdfbWZuCisgKiBtZm46IHRoZSBtZm4gb2YgdGhlIG5ldyBwYWdlLgogICovCiAjZGVmaW5l IE1NVUVYVF9QSU5fTDFfVEFCTEUgICAgICAwCiAjZGVmaW5lIE1NVUVYVF9QSU5fTDJfVEFCTEUg ICAgICAxCkBAIC0yNTYsNiArMjYwLDcgQEAgREVGSU5FX1hFTl9HVUVTVF9IQU5ETEUoeGVuX3Bm bl90KTsKICNkZWZpbmUgTU1VRVhUX05FV19VU0VSX0JBU0VQVFIgMTUKICNkZWZpbmUgTU1VRVhU X0NMRUFSX1BBR0UgICAgICAgMTYKICNkZWZpbmUgTU1VRVhUX0NPUFlfUEFHRSAgICAgICAgMTcK KyNkZWZpbmUgTU1VRVhUX0VYQ0hBTkdFX1BBR0UgICAgICAgIDE4CiAKICNpZm5kZWYgX19BU1NF TUJMWV9fCiBzdHJ1Y3QgbW11ZXh0X29wIHsK --_005_E2263E4A5B2284449EEBD0AAB751098401C7EC06F6PDSMSX501ccrc_ Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --_005_E2263E4A5B2284449EEBD0AAB751098401C7EC06F6PDSMSX501ccrc_--