From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from hotmail.com (bay102-f9.bay102.hotmail.com [64.4.61.19]) by ozlabs.org (Postfix) with ESMTP id CAD656895F for ; Wed, 4 Jan 2006 22:09:06 +1100 (EST) Message-ID: From: "dabby bentam" To: linuxppc-dev@ozlabs.org Date: Wed, 04 Jan 2006 10:51:58 +0000 Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_651c_834_79d3" Subject: [AGPGART] Attempting to create a agpgart driver for ArticiaS, help appreciated! List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , This is a multi-part message in MIME format. ------=_NextPart_000_651c_834_79d3 Content-Type: text/plain; format=flowed This is a long shot. Between me and geri pircher we are trying to get the agpgart driver working for the pegasos 1 and amigaone boards (using the ArticiaS northbridge http://www.mai.com). Find the attached source file (articias-agp.c), You might need to remove the debug code. So far, the aperture size works and is detected as 204m, but the gatt table cannot allocate any memory - complains that ioremap is using memory from RAM. The ArticiaS masks its bridge memory (i'm sure the uninorth does the same?). Is there anyway to find out the mask memory, or is the code completly wrong? This source code should work on 2.6 kernel. Thanks for any help or guidence in advance. PegXlin Developer Pegxmac, Pegxlin Versatile LIVE CD's for Pegasos Mainboards http://pegxmac.zftp.com http://www.pegasosppc.com ------=_NextPart_000_651c_834_79d3 Content-Type: application/octet-stream; name="articias-agp.c" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="articias-agp.c" LyoNCiAqIEFydGljaWFTIEFHUEdBUlQgcm91dGluZXMuDQogKi8NCg0KI2lu Y2x1ZGUgPGxpbnV4L3R5cGVzLmg+DQojaW5jbHVkZSA8bGludXgvbW9kdWxl Lmg+DQojaW5jbHVkZSA8bGludXgvcGNpLmg+DQojaW5jbHVkZSA8bGludXgv aW5pdC5oPg0KI2luY2x1ZGUgPGxpbnV4L2FncF9iYWNrZW5kLmg+DQojaW5j bHVkZSAiYWdwLmgiDQoNCnN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBh Z3BfYXJ0aWNpYXNfcGNpX3RhYmxlW107DQoNCiNkZWZpbmUgQVJUSUNJQVNf REVCVUcNCg0KI2RlZmluZSBBUlRJQ0lBU19BR1BfRU4JCTB4NDkJLyogYml0 IDAgLT4gQUdQIGVuYWJsZSAqLw0KI2RlZmluZSBBUlRJQ0lBU19HQVJUX0VO CTB4NTgJLyogYml0IDYgLT4gR0FSVCBlbmFibGUgKi8NCiNkZWZpbmUgQVJU SUNJQVNfQVBTSVpFCQkweDU5CS8qIGJpdHMgMjowIHNldCBzaXplICovDQoj ZGVmaW5lIEFSVElDSUFTX0FQQkFTRQkJMHg1OQkvKiBUTEIgYWRkcmVzcyBC YXNlIFszMToxMl0qLw0KI2RlZmluZSBBUlRJQ0lBU19HQVRUQkFTRQkweDEw CS8qIEdBUlQgYmFzZSBhZGRyZXNzIHJlZ2lzdGVyICovDQojZGVmaW5lIEFS VElDSUFTX1RMQl9CQVNFCTB4NUEJLyogYml0cyAxNjozMSBvZiBUTEIgYmFz ZSBhZGRyZXNzICovDQojZGVmaW5lIEFSVElDSUFTX0dBVFRfTUFTSwkweEZG RkZGMDAwCS8qIEdlcmk6IG5ldyBtYXNrLiAqLw0KI2RlZmluZSBBUlRJQ0lB U19TSVpFX01BU0sJMHgwNwkvKiBNYXNrIGFwZXJ0dXJlIHNpemUgYml0cy4g Ki8NCiNkZWZpbmUgQVJUSUNJQVBfU0laRV9NQVNLCTB4MEYJLyogbm90IHll dCB1c2VkIC0gdmFwb3J3YXJlIElDLiAqLw0KDQovKiBPcmlnaW5hbCBjb2Rl IGZyb20gTUFJLiAqLw0KLy8gI2RlZmluZSBBUlRJQ0lBU19HQVRUQkFTRQkw eDEyCS8qIEdBUlQgYmFzZSBhZGRyZXNzIHJlZ2lzdGVyICovDQovLyAjZGVm aW5lIEFSVElDSUFTX0dBVFRfTUFTSwkweEYwMDAwMDAwCS8qIE1BSSBzYXlz IGZpeCBtZSEgKi8NCg0Kc3RhdGljIGludCBhcnRpY2lhc19mZXRjaF9zaXpl KHZvaWQpDQp7DQoJaW50IGk7DQoJdTggdGVtcDsNCglzdHJ1Y3QgYXBlcl9z aXplX2luZm9fOCAqdmFsdWVzOw0KDQoJdmFsdWVzID0gQV9TSVpFXzgoYWdw X2JyaWRnZS0+ZHJpdmVyLT5hcGVydHVyZV9zaXplcyk7DQoJcGNpX3JlYWRf Y29uZmlnX2J5dGUoYWdwX2JyaWRnZS0+ZGV2LCBBUlRJQ0lBU19BUFNJWkUs ICZ0ZW1wKTsNCg0KI2lmZGVmIEFSVElDSUFTX0RFQlVHCQ0KCXByaW50ayhL RVJOX0lORk8gUEZYICJbQVJUSUNJQVNdIGFydGljaWFzX2ZldGNoX3NpemUo KVxuIik7DQoJcHJpbnRrKEtFUk5fSU5GTyBQRlggIltBUlRJQ0lBU10gKiBu b24gbWFza2VkIHRlbXAgPSAweCV4XG4iLCB0ZW1wKTsNCiNlbmRpZg0KDQoJ LyogTWFzayB0aGUgR0FSVC9BcGVydHVyZSBzaXplIHNlbGVjdGlvbiBiaXRz LiAqLw0KCXRlbXAgPSB0ZW1wICYgQVJUSUNJQVNfU0laRV9NQVNLOw0KDQoJ Zm9yIChpID0gMDsgaSA8IGFncF9icmlkZ2UtPmRyaXZlci0+bnVtX2FwZXJ0 dXJlX3NpemVzOyBpKyspIHsNCg0KI2lmZGVmIEFSVElDSUFTX0RFQlVHDQoJ dm9pZCAqdGVtcDI7DQoNCglwcmludGsoS0VSTl9JTkZPIFBGWCAiW0FSVElD SUFTXSAqIGFwZXJhdHVyZSBzaXplIGxvb3AgaW5kZXggIyVkXG4iLCBpKTsN CglwcmludGsoS0VSTl9JTkZPIFBGWCAiW0FSVElDSUFTXSAqIHZhbHVlc1sl ZF0uc2l6ZV92YWx1ZSA9ICV4XG4iLCBpLCAodTMyKSB2YWx1ZXNbaV0uc2l6 ZV92YWx1ZSk7DQojZW5kaWYNCgkJaWYgKHRlbXAgPT0gdmFsdWVzW2ldLnNp emVfdmFsdWUpIHsNCgkJCWFncF9icmlkZ2UtPnByZXZpb3VzX3NpemUgPQ0K CQkJICAgIGFncF9icmlkZ2UtPmN1cnJlbnRfc2l6ZSA9ICh2b2lkICopICh2 YWx1ZXMgKyBpKTsNCgkJCS8qIEdlcmk6IFdhcyA8KHZvaWQgKikgKHZhbHVl cyk+IGJlZm9yZSwgYnV0IHRoYXQNCgkJCSAqIGRpZG4ndCBtYWtlIHNlbnNl IHRvIG1lIT8gT3RoZXJ3aXNlIGl0IHdvdWxkIGFsd2F5cw0KCQkJICogcG9p bnQgdG8gdGhlIHNhbWUgdmFsdWUhDQoJCQkgKi8NCgkJCWFncF9icmlkZ2Ut PmFwZXJ0dXJlX3NpemVfaWR4ID0gaTsNCg0KI2lmZGVmIEFSVElDSUFTX0RF QlVHDQoJCQl0ZW1wMiA9IGFncF9icmlkZ2UtPmN1cnJlbnRfc2l6ZTsNCg0K CQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIltBUlRJQ0lBU10gKiBtYXNrZWQg dGVtcCA9IDB4JXhcbiIsIHRlbXApOw0KCQkJcHJpbnRrKEtFUk5fSU5GTyBQ RlggIltBUlRJQ0lBU10gKiB2YWx1ZXNbJWRdLnNpemUgPSAlZFxuIiwgaSwg dmFsdWVzW2ldLnNpemUpOw0KCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIltB UlRJQ0lBU10gKiBjdXJyZW50X3NpemUtPnNpemUgPSAlZFxuIiwgQV9TSVpF XzgodGVtcDIpLT5zaXplKTsNCgkJCXByaW50ayhLRVJOX0lORk8gUEZYICJb QVJUSUNJQVNdICogY3VycmVudF9zaXplLT5wYWdlX29yZGVyID0gJWRcbiIs IEFfU0laRV84KHRlbXAyKS0+cGFnZV9vcmRlcik7DQoJCQlwcmludGsoS0VS Tl9JTkZPIFBGWCAiW0FSVElDSUFTXSAqIGN1cnJlbnRfc2l6ZS0+bnVtX2Vu dHJpZXMgPSAlZFxuIiwgQV9TSVpFXzgodGVtcDIpLT5udW1fZW50cmllcyk7 DQoJCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiW0FSVElDSUFTXSAqIGN1cnJl bnRfc2l6ZS0+c2l6ZV92YWx1ZSA9ICVkXG4iLCBBX1NJWkVfOCh0ZW1wMikt PnNpemVfdmFsdWUpOw0KI2VuZGlmDQoJCQlyZXR1cm4gdmFsdWVzW2ldLnNp emU7DQoJCX0NCgl9DQoJcHJpbnRrKEtFUk5fRVJSIFBGWCAiVW5rbm93biBh cGVydHVyZSBzaXplIGZyb20gQUdQIGJyaWRnZSAoMHgleClcbiIsIHRlbXAp Ow0KCXJldHVybiAwOw0KfQ0KDQpzdGF0aWMgaW50IGFydGljaWFzX2NvbmZp Z3VyZSh2b2lkKQ0Kew0KCXUzMiB0ZW1wID0gMDsNCgl1MTYgc2hpZnQgPSAw Ow0KCXN0cnVjdCBhcGVyX3NpemVfaW5mb184ICpjdXJyZW50X3NpemU7DQoN CiNpZmRlZiBBUlRJQ0lBU19ERUJVRw0KCXByaW50ayhLRVJOX0lORk8gUEZY ICJbQVJUSUNJQVNdIGFydGljaWFzX2NvbmZpZ3VyZSgpXG4iKTsNCiNlbmRp Zg0KDQoJLyogR2V0IGN1cnJlbnQgYXBlcnR1cmUgc2l6ZSAqLw0KCWN1cnJl bnRfc2l6ZSA9IEFfU0laRV84KGFncF9icmlkZ2UtPmN1cnJlbnRfc2l6ZSk7 DQoJdGVtcCA9ICh1MzIpIGFncF9icmlkZ2UtPmdhdHRfdGFibGVfcmVhbDsN CgkvKiBHZXQgdXBwZXIgd29yZCBmcm9tIGR3b3JkLiBOb3RlIHRoYXQgdGhl IEFydGljaWFTIHNob3VsZCBoYXZlIDIwDQoJICogYml0cyBmb3IgdGhlIFRM QiBiYXNlIGFkZHJlc3MuIE90aGVyd2lzZSB0aGUgUENJIHdyaXRlIGNvbmZp ZyBjb2RlDQoJICogZm9yIHRoZSBhcGVydHVyZSBzaXplIGJlbG93IGRvZXNu J3QgbWFrZSBzZW5zZSE/DQoJICovDQoJc2hpZnQgPSAodTE2KSAodGVtcD4+ MTYpOw0KDQojaWZkZWYgQVJUSUNJQVNfREVCVUcNCglwcmludGsoS0VSTl9J TkZPIFBGWCAiW0FSVElDSUFTXSAqIHRlbXAgPSAweCV4LCBzaGlmdCA9IDB4 JXhcbiIsIHRlbXAsIHNoaWZ0KTsNCiNlbmRpZg0KDQoJcGNpX3dyaXRlX2Nv bmZpZ193b3JkKGFncF9icmlkZ2UtPmRldiwgQVJUSUNJQVNfVExCX0JBU0Us IHNoaWZ0KTsNCgkvKiBPcmlnaW5hbCBjb2RlIGZyb20gTUFJLiAqLw0KLyoN CglwY2lfd3JpdGVfY29uZmlnX3dvcmQoYWdwX2JyaWRnZS0+ZGV2LCBBUlRJ Q0lBU19BUFNJWkUsIChzaGlmdCAmIGN1cnJlbnRfc2l6ZS0+c2l6ZV92YWx1 ZSkpOw0KICovDQoJLyogR2VyaTogSSBjYW4ndCBmaWd1cmUgb3V0IGhvdyB0 aGV5IHdhbnQgdG8gY29uZmlndXJlIHRoZSByZXN0IG9mIHRoZQ0KCSAqIDIw IGJpdHMgVExCIGJhc2UgYWRkcmVzcyBpbiB0aGUgY29uZmlnIHJlZ2lzdGVy IGZvciB0aGUgYXBlcnR1cmUNCgkgKiBzaXplLCBzbyBoZXJlIGlzIG15IGNv ZGUuDQoJICovDQoJLyogR2V0IHRoZSBieXRlIDEgZnJvbSBkd29yZCBhbmQg bWFzayBpdCBvdXQgd2l0aCB0aGUgYXBlcnR1cmUgc2l6ZS4gKi8NCglzaGlm dCA9ICh1MTYpICh0ZW1wPj44KTsNCglzaGlmdCAmPSB+KEFSVElDSUFTX1NJ WkVfTUFTSyk7DQoJc2hpZnQgfD0gY3VycmVudF9zaXplLT5zaXplX3ZhbHVl Ow0KCXBjaV93cml0ZV9jb25maWdfYnl0ZShhZ3BfYnJpZGdlLT5kZXYsIEFS VElDSUFTX0FQQkFTRSwgKHU4KSBzaGlmdCk7DQoNCgkvKiBPcmlnaW5hbCBj b2RlIGZyb20gTUFJLiBHZXQgYWRkcmVzcyB0byBtYXAgdG9vICovDQovKg0K CXBjaV9yZWFkX2NvbmZpZ193b3JkKGFncF9icmlkZ2UtPmRldiwgQVJUSUNJ QVNfR0FUVEJBU0UsICh2b2lkICopJnRlbXApOw0KCXRlbXAgPSB0ZW1wICYg QVJUSUNJQVNfR0FUVF9NQVNLOw0KICovDQoNCgkvKiBHZXQgYWRkcmVzcyB0 byBtYXAgdG9vICovDQoJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGFncF9icmlk Z2UtPmRldiwgQVJUSUNJQVNfR0FUVEJBU0UsICh2b2lkICopJnRlbXApOw0K CXRlbXAgPSB0ZW1wICYgQVJUSUNJQVNfR0FUVF9NQVNLOw0KDQoJYWdwX2Jy aWRnZS0+Z2FydF9idXNfYWRkciA9IHRlbXA7DQoNCgkvKiBHQVJUIGNvbnRy b2wgcmVnaXN0ZXIgKi8NCgkvKiBFbmFibGUgR0FSVCBhbmQgYnVzIGNvbmN1 cnJlbmN5ICovDQoJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGFncF9icmlkZ2Ut PmRldiwgQVJUSUNJQVNfR0FSVF9FTiwgMHg0MSk7DQoJLyogRW5hYmxlIEFH UCBvcGVyYXRpb24gKi8NCglwY2lfd3JpdGVfY29uZmlnX2J5dGUoYWdwX2Jy aWRnZS0+ZGV2LCBBUlRJQ0lBU19BR1BfRU4sIDB4MDEpOw0KDQoJcmV0dXJu IDA7DQp9DQoNCnN0YXRpYyB2b2lkIGFydGljaWFzX2NsZWFudXAodm9pZCkN CnsNCglzdHJ1Y3QgYXBlcl9zaXplX2luZm9fOCAqcHJldmlvdXNfc2l6ZTsN Cg0KI2lmZGVmIEFSVElDSUFTX0RFQlVHDQoJcHJpbnRrKEtFUk5fSU5GTyBQ RlggIltBUlRJQ0lBU10gYXJ0aWNpYXNfY2xlYW51cCgpXG4iKTsNCiNlbmRp Zg0KDQoJcHJldmlvdXNfc2l6ZSA9IEFfU0laRV84KGFncF9icmlkZ2UtPnBy ZXZpb3VzX3NpemUpOw0KCXBjaV93cml0ZV9jb25maWdfYnl0ZShhZ3BfYnJp ZGdlLT5kZXYsIEFSVElDSUFTX0FQU0laRSwNCgkJCSAgICAgIHByZXZpb3Vz X3NpemUtPnNpemVfdmFsdWUpOw0KfQ0KDQpzdGF0aWMgdm9pZCBhcnRpY2lh c190bGJmbHVzaChzdHJ1Y3QgYWdwX21lbW9yeSAqbWVtKQ0Kew0KLyoJcGNp X3dyaXRlX2NvbmZpZ19kd29yZChhZ3BfYnJpZGdlLT5kZXYsIEFSVElDSUFT X0dBUlRDVFJMLCAweDAwMDAwMDhmKTsNCglwY2lfd3JpdGVfY29uZmlnX2R3 b3JkKGFncF9icmlkZ2UtPmRldiwgQVJUSUNJQVNfR0FSVENUUkwsIDB4MDAw MDAwMGYpOw0KICovDQoJLyogR2VyaTogV2UgbmVlZCB0byBkbyBzb21ldGhp bmcgaGVyZS4gVGhlcmUgaXMgYSBBR1AgVExCIHRyYW5zbGF0aW9uDQoJICog Y29udHJvbCBiaXQgKDB4NTg6Nykgc3BlY2lmaWVkIGluIHRoZSBBcnRpY2lh UCBkYXRhc2hlZXQgd2hpY2ggbWF5DQoJICogY29udHJvbCBUTEIgZmx1c2hl cy4gV2UgaGF2ZSB0byBjaGVjaywgaWYgaXQgZXhpc3RzIGFsc28gaW4gdGhl DQoJICogQXJ0aWNpYVMuDQoJICovDQoNCiNpZmRlZiBBUlRJQ0lBU19ERUJV Rw0KCXByaW50ayhLRVJOX0lORk8gUEZYICJbQVJUSUNJQVNdIGFncF90bGJm bHVzaCgpXG4iKTsNCiNlbmRpZg0KCXJldHVybjsNCn0NCg0Kc3RhdGljIHN0 cnVjdCBhcGVyX3NpemVfaW5mb184IGFydGljaWFzX2dlbmVyaWNfc2l6ZXNb N10gPQ0Kew0KCS8qIHNpemUsIG51bV9lbnRyaWVzLCBwYWdlX29yZGVyLCBz aXplX3ZhbHVlICovDQoNCgkvKiBHZXJpOiBhZGRlZCAyNTZNQiBhcGVydHVy ZSBzaXplIHZhbHVlLiBJIHRoaW5rIHRoZXNlIGFyZSBNQiB2YWx1ZXMsDQoJ ICogYmVjYXVzZSB0aGUgQXJ0aWNpYVAgc3VwcG9ydHMgYXBlcnR1cmUgc2l6 ZXMgZnJvbSA0a0IgdG8gMjU2TUIsIGJ1dA0KCSAqIHRoZSBkZWZhdWx0IHZh bHVlIGlzIHNldCB0byA0TUIuIExldCdzIGhvcGUgdGhhdCB0aGUgQXJ0aWNp YVMNCgkgKiBzdXBwb3J0cyBhcGVydHVyZSBzaXplcyBmcm9tIDRNQiB0byAy NTZNQi4NCgkgKi8NCgl7NCwgMTAyNCwgMSwgMX0sDQoJezgsIDIwNDgsIDEs IDJ9LA0KCXsxNiwgNDA5NiwgMiwgM30sDQoJezMyLCA4MTkyLCAzLCA0fSwN Cgl7NjQsIDE2Mzg0LCA0LCA1fSwNCgl7MTI4LCAzMjc2OCwgNSwgNn0sDQoJ ezI1NiwgNjU1MzYsIDYsIDd9LA0KDQoJLyogT3JpZ2luYWwgY29kZSBmcm9t IE1BSS4gKi8NCi8qDQoJezQsIDEwMjQsIDEsIDF9LA0KCXs4LCAyMDQ4LCAx LCAyfSwNCgl7MTYsIDQwOTYsIDIsIDN9LA0KCXszMiwgODE5MiwgMywgNH0s DQoJezY0LCAxNjM4NCwgNCwgNX0sDQoJezEyOCwgMzI3NjgsIDUsIDZ9DQog Ki8NCn07DQoNCnN0YXRpYyB1bnNpZ25lZCBsb25nIGFydGljaWFzX21hc2tf bWVtb3J5KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IHR5cGUpDQp7DQoJLyog TWVtb3J5IHR5cGUgaXMgaWdub3JlZCAqLw0KI2lmZGVmIEFSVElDSUFTX0RF QlVHDQoJcHJpbnRrKEtFUk5fSU5GTyBQRlggIltBUlRJQ0lBU10gYXJ0aWNp YXNfbWFza19tZW1vcnkoKVxuIik7DQojZW5kaWYNCglyZXR1cm4gYWRkciB8 IGFncF9icmlkZ2UtPmRyaXZlci0+bWFza3NbMF0ubWFzazsNCn0NCg0Kc3Rh dGljIHN0cnVjdCBnYXR0X21hc2sgYXJ0aWNpYXNfZ2VuZXJpY19tYXNrc1td ID0NCnsNCgkvKiBPcmlnaW5hbCBjb2RlIGZyb20gTUFJLiAqLw0KCXsweDAw MDAwMDAwLCAwfQ0KfTsNCg0Kc3RhdGljIHN0cnVjdCBhZ3BfYnJpZGdlX2Ry aXZlciBhcnRpY2lhc19kcml2ZXIgPSB7DQoJLm93bmVyCQkJPSBUSElTX01P RFVMRSwNCgkuYXBlcnR1cmVfc2l6ZXMJCT0gYXJ0aWNpYXNfZ2VuZXJpY19z aXplcywNCgkuc2l6ZV90eXBlCQk9IFU4X0FQRVJfU0laRSwNCgkvKiBHZXJp OiBXYXMgNiBiZWZvcmUuIEFkZGVkIDI1NmsgZW50cnkgZm9yIGFwZXJ0dXJl IHNpemUuICovDQoJLm51bV9hcGVydHVyZV9zaXplcwk9IDcsDQoJLmNvbmZp Z3VyZQkJPSBhcnRpY2lhc19jb25maWd1cmUsDQoJLmZldGNoX3NpemUJCT0g YXJ0aWNpYXNfZmV0Y2hfc2l6ZSwNCgkuY2xlYW51cAkJPSBhcnRpY2lhc19j bGVhbnVwLA0KCS50bGJfZmx1c2gJCT0gYXJ0aWNpYXNfdGxiZmx1c2gsDQoJ Lm1hc2tfbWVtb3J5CQk9IGFydGljaWFzX21hc2tfbWVtb3J5LA0KCS5tYXNr cwkJCT0gYXJ0aWNpYXNfZ2VuZXJpY19tYXNrcywNCgkuYWdwX2VuYWJsZQkJ PSBhZ3BfZ2VuZXJpY19lbmFibGUsDQoJLmNhY2hlX2ZsdXNoCQk9IGdsb2Jh bF9jYWNoZV9mbHVzaCwNCgkuY3JlYXRlX2dhdHRfdGFibGUJPSBhZ3BfZ2Vu ZXJpY19jcmVhdGVfZ2F0dF90YWJsZSwNCgkuZnJlZV9nYXR0X3RhYmxlCT0g YWdwX2dlbmVyaWNfZnJlZV9nYXR0X3RhYmxlLA0KCS5pbnNlcnRfbWVtb3J5 CQk9IGFncF9nZW5lcmljX2luc2VydF9tZW1vcnksDQoJLnJlbW92ZV9tZW1v cnkJCT0gYWdwX2dlbmVyaWNfcmVtb3ZlX21lbW9yeSwNCgkuYWxsb2NfYnlf dHlwZQkJPSBhZ3BfZ2VuZXJpY19hbGxvY19ieV90eXBlLA0KCS5mcmVlX2J5 X3R5cGUJCT0gYWdwX2dlbmVyaWNfZnJlZV9ieV90eXBlLA0KCS5hZ3BfYWxs b2NfcGFnZQkJPSBhZ3BfZ2VuZXJpY19hbGxvY19wYWdlLA0KCS5hZ3BfZGVz dHJveV9wYWdlCT0gYWdwX2dlbmVyaWNfZGVzdHJveV9wYWdlLA0KfTsNCg0K c3RhdGljIHN0cnVjdCBhZ3BfZGV2aWNlX2lkcyBhcnRpY2lhc19hZ3BfZGV2 aWNlX2lkc1tdIF9fZGV2aW5pdGRhdGEgPQ0Kew0KCXsNCgkJLmRldmljZV9p ZAk9IFBDSV9ERVZJQ0VfSURfTUFJX0FSVElDSUFTLA0KCQkuY2hpcHNldF9u YW1lCT0gIkFydGljaWFTIiwNCgl9LA0KDQoJeyB9LCAvKiBkdW1teSBmaW5h bCBlbnRyeSwgYWx3YXlzIHByZXNlbnQgKi8NCn07DQoNCnN0YXRpYyBpbnQg X19kZXZpbml0IGFncF9hcnRpY2lhc19wcm9iZShzdHJ1Y3QgcGNpX2RldiAq cGRldiwNCgkJCQkgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50 KQ0Kew0KCXN0cnVjdCBhZ3BfZGV2aWNlX2lkcyAqZGV2cyA9IGFydGljaWFz X2FncF9kZXZpY2VfaWRzOw0KCXN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgKmJy aWRnZTsNCglpbnQgaiA9IDA7DQoJdTggY2FwX3B0cjsNCg0KCWNhcF9wdHIg PSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfQUdQKTsN CglpZiAoIWNhcF9wdHIpDQoJCXJldHVybiAtRU5PREVWOw0KDQoJaiA9IGVu dCAtIGFncF9hcnRpY2lhc19wY2lfdGFibGU7DQoJcHJpbnRrIChLRVJOX0lO Rk8gUEZYICJEZXRlY3RlZCAlcyBjaGlwc2V0XG4iLCBkZXZzW2pdLmNoaXBz ZXRfbmFtZSk7DQoNCglicmlkZ2UgPSBhZ3BfYWxsb2NfYnJpZGdlKCk7DQoJ aWYgKCFicmlkZ2UpDQoJCXJldHVybiAtRU5PTUVNOw0KDQojaWZkZWYgIEFS VElDSUFTX0RFQlVHDQoJLyogR2VyaTogUHJpbnQgYWxsIEFHUCByZWxldmFu dCByZWdpc3RlcnMgb2YgdGhlIEFydGljaWFTLiAqLw0KCXByaW50ayhLRVJO X0lORk8gUEZYICJbQVJUSUNJQVNdIGFydGljaWFzX3ByaW50X2FncF9yZWdp c3RlcigpXG4iKTsNCiNlbmRpZg0KDQoJYnJpZGdlLT5kZXYgPSBwZGV2Ow0K CWJyaWRnZS0+Y2FwbmR4ID0gY2FwX3B0cjsNCglicmlkZ2UtPmRyaXZlciA9 ICZhcnRpY2lhc19kcml2ZXI7DQoNCglyZXR1cm4gYWdwX2FkZF9icmlkZ2Uo YnJpZGdlKTsNCn0NCg0Kc3RhdGljIHZvaWQgX19kZXZleGl0IGFncF9hcnRp Y2lhc19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpDQp7DQoJc3RydWN0 IGFncF9icmlkZ2VfZGF0YSAqYnJpZGdlID0gcGNpX2dldF9kcnZkYXRhKHBk ZXYpOw0KDQoJYWdwX3JlbW92ZV9icmlkZ2UoYnJpZGdlKTsNCglhZ3BfcHV0 X2JyaWRnZShicmlkZ2UpOw0KfQ0KDQojaWZkZWYgQ09ORklHX1BNDQoNCnN0 YXRpYyBpbnQgYWdwX2FydGljaWFzX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYg KnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkNCnsNCglwY2lfc2F2ZV9zdGF0 ZSAocGRldik7DQoJcGNpX3NldF9wb3dlcl9zdGF0ZSAocGRldiwgUENJX0Qz aG90KTsNCg0KCXJldHVybiAwOw0KfQ0KDQpzdGF0aWMgaW50IGFncF9hcnRp Y2lhc19yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpDQp7DQoJc3RydWN0 IGFncF9icmlkZ2VfZGF0YSAqYnJpZGdlID0gcGNpX2dldF9kcnZkYXRhKHBk ZXYpOw0KDQoJcGNpX3NldF9wb3dlcl9zdGF0ZSAocGRldiwgUENJX0QwKTsN CglwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsNCg0KCWlmIChicmlkZ2UtPmRy aXZlciA9PSAmYXJ0aWNpYXNfZHJpdmVyKQ0KCQlyZXR1cm4gYXJ0aWNpYXNf Y29uZmlndXJlKCk7DQoNCglyZXR1cm4gMDsNCn0NCg0KI2VuZGlmIC8qIENP TkZJR19QTSAqLw0KDQovKiBtdXN0IGJlIHRoZSBzYW1lIG9yZGVyIGFzIG5h bWUgdGFibGUgYWJvdmUgKi8NCnN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9p ZCBhZ3BfYXJ0aWNpYXNfcGNpX3RhYmxlW10gPSB7DQojZGVmaW5lIElEKHgp IFwNCgl7CQkJCQkJXA0KCS5jbGFzcwkJPSAoUENJX0NMQVNTX0JSSURHRV9I T1NUIDw8IDgpLAlcDQoJLmNsYXNzX21hc2sJPSB+MCwJCQkJXA0KCS52ZW5k b3IJCT0gUENJX1ZFTkRPUl9JRF9NQUksCQlcDQoJLmRldmljZQkJPSB4LAkJ CQlcDQoJLnN1YnZlbmRvcgk9IFBDSV9BTllfSUQsCQkJXA0KCS5zdWJkZXZp Y2UJPSBQQ0lfQU5ZX0lELAkJCVwNCgl9DQoJSUQoUENJX0RFVklDRV9JRF9N QUlfQVJUSUNJQVMpLA0KCXsgfQ0KfTsNCg0KTU9EVUxFX0RFVklDRV9UQUJM RShwY2ksIGFncF9hcnRpY2lhc19wY2lfdGFibGUpOw0KDQpzdGF0aWMgc3Ry dWN0IHBjaV9kcml2ZXIgYWdwX2FydGljaWFzX3BjaV9kcml2ZXIgPSB7DQoJ Lm5hbWUJCT0gImFncGdhcnQtYXJ0aWNpYXMiLA0KCS5pZF90YWJsZQk9IGFn cF9hcnRpY2lhc19wY2lfdGFibGUsDQoJLnByb2JlCQk9IGFncF9hcnRpY2lh c19wcm9iZSwNCgkucmVtb3ZlCQk9IGFncF9hcnRpY2lhc19yZW1vdmUsDQoj aWZkZWYgQ09ORklHX1BNDQoJLnN1c3BlbmQJPSBhZ3BfYXJ0aWNpYXNfc3Vz cGVuZCwNCgkucmVzdW1lCQk9IGFncF9hcnRpY2lhc19yZXN1bWUsDQojZW5k aWYNCn07DQoNCnN0YXRpYyBpbnQgX19pbml0IGFncF9hcnRpY2lhc19pbml0 KHZvaWQpDQp7DQoJaWYgKGFncF9vZmYpDQoJew0KI2lmZGVmIEFSVElDSUFT X0RFQlVHDQoJcHJpbnRrKEtFUk5fSU5GTyBQRlggIltBUlRJQ0lBU10gYWdw X2FydGljaWFzX2luaXQgcmV0dXJuIEVJTlZBTC5cbiIpOw0KI2VuZGlmDQoJ CXJldHVybiAtRUlOVkFMOw0KCX0NCg0KI2lmZGVmIEFSVElDSUFTX0RFQlVH DQoJcHJpbnRrKEtFUk5fSU5GTyBQRlggIltBUlRJQ0lBU10gYWdwX2FydGlj aWFzX2luaXQgcmV0dXJuIHBjaSBkcml2ZXIgc3RydWN0LlxuIik7DQojZW5k aWYNCglyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmYWdwX2FydGljaWFz X3BjaV9kcml2ZXIpOw0KfQ0KDQpzdGF0aWMgdm9pZCBfX2V4aXQgYWdwX2Fy dGljaWFzX2NsZWFudXAodm9pZCkNCnsNCglwY2lfdW5yZWdpc3Rlcl9kcml2 ZXIoJmFncF9hcnRpY2lhc19wY2lfZHJpdmVyKTsNCn0NCg0KLyogRGVidWcg ZnVuY3Rpb24gdG8gY2hlY2sgQXJ0aWNpYVMncyBBR1AgcmVnaXN0ZXIgY29u ZmlndXJhdGlvbi4gQ2FsbCBiZWZvcmUNCiAqIGFueSBBR1AgZnVuY3Rpb25h bGl0eSBpcyBlbmFibGVkISBPdGhlcndpc2UgaXQgd2lsbCBkZXN0cm95IHRo ZSBwcmV2aW91cw0KICogY29uZmlndXJhdGlvbiENCiAqLw0KDQpzdGF0aWMg dm9pZCBhcnRpY2lhc190ZXN0X2FncF9yZWdpc3RlcihzdHJ1Y3QgcGNpX2Rl diAqcGRldikNCnsNCglwcmludGsoS0VSTl9JTkZPIFBGWCAiW0FSVElDSUFT XSBhcnRpY2lhc190ZXN0X2FncF9yZWdpc3RlcigpLlxuIik7DQoJcHJpbnRr KEtFUk5fSU5GTyBQRlggIltBUlRJQ0lBU10gUlcgIEFkZHIgIFJlZ2lzdGVy ICAgICAgIFZhbHVlXG4iKTsNCiAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyBQ RlggIltBUlRJQ0lBU10gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS1cbik7DQoNCgkvKiBSICA9IFJlYWQNCgkgKiBXICA9IFdy aXRlDQoJICogUk8gPSBSZWFkIG9ubHkgLSBubyB3cml0ZSB0ZXN0DQoJICog UlQgPSBSZWFkIHRlc3QgdmFsdWUNCgkgKi8gDQoNCgkvKiBUZXN0IHJlZ2lz dGVyIGFkZHJlc3Mgc3BhY2UgMHgxMC4uMHgxMy4gKi8NCg0KCXUzMiBhZ3Bf Z2FydF9iYXNlX2R3b3JkX2luaXQgPSAwOw0KICAgICAgICB1MzIgYWdwX2dh cnRfYmFzZV9kd29yZF90ZXN0ID0gMDsNCg0KCS8qIFJlYWQgb3V0IGluaXRp YWwgQUdQIEdBUlQgYmFzZSByZWdpc3RlciBjb25maWd1cmF0aW9uLiAqLw0K CXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCAweDEwLCAodm9pZCAqKSZh Z3BfZ2FydF9iYXNlX2R3b3JkX2luaXQpOw0KCXByaW50ayhLRVJOX0lORk8g UEZYICJbQVJUSUNJQVNdIFIgICAweDEwICBhZ3BfZ2FydF9iYXNlICAweCV4 XG4iLCAodTMyKWFncF9nYXJ0X2Jhc2VfZHdvcmRfaW5pdCk7DQogICAgICAg IHByaW50ayhLRVJOX0lORk8gUEZYICJbQVJUSUNJQVNdICogRGVjb2Rpbmc6 XG4iKTsNCglwcmludGsoS0VSTl9JTkZPIFBGWCAiW0FSVElDSUFTXSAqIEJp dCAwICAgICBHQVJUIG1lbW9yeSBzcGFjZVxuIik7DQoJcHJpbnRrKEtFUk5f SU5GTyBQRlggIltBUlRJQ0lBU10gKiBCaXQgMjoxICAgR0FSVCBhZGRlc3Mg dHlwZVxuIik7DQoJcHJpbnRrKEtFUk5fSU5GTyBQRlggIltBUlRJQ0lBU10g KiBCaXQgMyAgICAgTWVtb3J5IHByZWZldGNoXG4iKTsNCglwcmludGsoS0VS Tl9JTkZPIFBGWCAiW0FSVElDSUFTXSAqIEJpdCAxMTo0ICBSZXNlcnZlZFxu Iik7DQogICAgICAgIHByaW50ayhLRVJOX0lORk8gUEZYICJbQVJUSUNJQVNd ICogQml0IDMxOjEyIEdBUlQgYmFzZSBhZGRyZXNzXG4iKTsNCg0KCS8qIFdy aXRlIHJlZ2lzdGVyIHRvIGZpbmQgb3V0IGJpdCBhc3NpZ25tZW50cyBpbiB0 aGUgcmVnaXN0ZXIuICovDQogICAgICAgIC8qIE1hc2sgcmVnaXN0ZXIgaW5p dCB2YWx1ZSB3aXRoIG5ldyBzZXR0aW5ncy4gKi8NCglhZ3BfZ2FydF9iYXNl X2R3b3JkX3Rlc3QgPSBhZ3BfZ2FydF9iYXNlX2R3b3JkX2luaXQgfCAweEZG RkZGMDAwOw0KICAgICAgICBwcmludGsoS0VSTl9JTkZPIFBGWCAiW0FSVElD SUFTXSBXICAgMHgxMCAgYWdwX2dhcnRfYmFzZSAgMHgleFxuIiwgKHUzMilh Z3BfZ2FydF9iYXNlX2R3b3JkX3Rlc3QpOw0KICAgICAgICBwcmludGsoS0VS Tl9JTkZPIFBGWCAiW0FSVElDSUFTXSAqIERlY29kaW5nOlxuIik7DQoJcHJp bnRrKEtFUk5fSU5GTyBQRlggIltBUlRJQ0lBU10gKiBCaXQgMCAgICAgR0FS VCBtZW1vcnkgc3BhY2UgIGRlZlxuIik7DQoJcHJpbnRrKEtFUk5fSU5GTyBQ RlggIltBUlRJQ0lBU10gKiBCaXQgMjoxICAgR0FSVCBhZGRlc3MgdHlwZSAg IGRlZlxuIik7DQoJcHJpbnRrKEtFUk5fSU5GTyBQRlggIltBUlRJQ0lBU10g KiBCaXQgMyAgICAgTWVtb3J5IHByZWZldGNoICAgIGRlZlxuIik7DQoJcHJp bnRrKEtFUk5fSU5GTyBQRlggIltBUlRJQ0lBU10gKiBCaXQgMTE6NCAgUmVz ZXJ2ZWQgICAgICAgICAgIGRlZlxuIik7DQogICAgICAgIHByaW50ayhLRVJO X0lORk8gUEZYICJbQVJUSUNJQVNdICogQml0IDMxOjEyIEdBUlQgYmFzZSBh ZGRyZXNzICAweEZGRkZGXG4iKTsNCglwY2lfd3JpdGVfY29uZmlnX2R3b3Jk KHBkZXYsIDB4MTAsIGFncF9nYXJ0X2Jhc2VfZHdvcmRfdGVzdCk7DQoNCiAg ICAgICAgYWdwX2dhcnRfYmFzZV9kd29yZF90ZXN0ID0gMDsNCg0KCS8qIFJl YWQgYmFjayB0aGUgcmVnaXN0ZXIgdGVzdCBjb25maWd1cmF0aW9uLiAqLw0K CXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCAweDEwLCAodm9pZCAqKSZh Z3BfZ2FydF9iYXNlX2R3b3JkX3Rlc3QpOw0KCXByaW50ayhLRVJOX0lORk8g UEZYICJbQVJUSUNJQVNdIFJUICAweDEwICBhZ3BfZ2FydF9iYXNlICAweCV4 XG4iLCAodTMyKWFncF9nYXJ0X2Jhc2VfZHdvcmRfdGVzdCk7DQogICAgICAg IHByaW50ayhLRVJOX0lORk8gUEZYICJbQVJUSUNJQVNdICogRGVjb2Rpbmc6 XG4iKTsNCglwcmludGsoS0VSTl9JTkZPIFBGWCAiW0FSVElDSUFTXSAqIEJp dCAwICAgICBHQVJUIG1lbW9yeSBzcGFjZSAgZGVmXG4iKTsNCglwcmludGso S0VSTl9JTkZPIFBGWCAiW0FSVElDSUFTXSAqIEJpdCAyOjEgICBHQVJUIGFk ZGVzcyB0eXBlICAgZGVmXG4iKTsNCglwcmludGsoS0VSTl9JTkZPIFBGWCAi W0FSVElDSUFTXSAqIEJpdCAzICAgICBNZW1vcnkgcHJlZmV0Y2ggICAgZGVm XG4iKTsNCglwcmludGsoS0VSTl9JTkZPIFBGWCAiW0FSVElDSUFTXSAqIEJp dCAxMTo0ICBSZXNlcnZlZCAgICAgICAgICAgZGVmXG4iKTsNCiAgICAgICAg cHJpbnRrKEtFUk5fSU5GTyBQRlggIltBUlRJQ0lBU10gKiBCaXQgMzE6MTIg R0FSVCBiYXNlIGFkZHJlc3MgIDB4RkZGRkZcbiIpOw0KDQogICAgICAgIGFn cF9nYXJ0X2Jhc2VfZHdvcmRfdGVzdCA9IDA7DQoNCgkvKiBSZXN0b3JlIGlu aXRpYWwgcmVnaXN0ZXIgY29udGVudC4gKi8NCglwY2lfd3JpdGVfY29uZmln X2R3b3JkKHBkZXYsIDB4MTAsIGFncF9nYXJ0X2Jhc2VfZHdvcmRfaW5pdCk7 DQoJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIDB4MTAsICh2b2lkICop JmFncF9nYXJ0X2Jhc2VfZHdvcmRfdGVzdCk7DQoJaWYoYWdwX2dhcnRfYmFz ZV9kd29yZF90ZXN0ICE9IGFncF9nYXJ0X2R3b3JkX2luaXQpDQoJew0KCQlw cmludGsoS0VSTl9JTkZPIFBGWCAiW0FSVElDSUFTXSBFUlJPUjogQ291bGQg bm90IHJlc3RvcmUgaW5pdGlhbCByZWdpc3RlciBzZXR0aW5nIVxuIik7DQoJ fQ0KDQoJLyogT3V0cHV0IGNhcGFiaWxpdHkgcG9pbnRlciByZWdpc3Rlci4g Ki8NCg0KCXU4IGJ5dGVfcmVnaXN0ZXJzID0gMDsNCglwY2lfcmVhZF9jb25m aWdfYnl0ZShwZGV2LCAweDM0LCAodm9pZCAqKSZieXRlX3JlZ2lzdGVycyk7 DQoJcHJpbnRrKEtFUk5fSU5GTyBQRlggIltBUlRJQ0lBU10gUk8gIDB4MzQg IGNhcF9wb2ludGVyICAgIDB4JXhcbiIsICh1OClieXRlX3JlZ2lzdGVycyk7 DQoNCgkvKiBPdXRwdXQgY2FwYWJpbGl0eSBpZGVudGlmaWVyIHJlZ2lzdGVy LiAqLw0KDQoJYnl0ZV9yZWdpc3RlcnMgPSAwOw0KCXBjaV9yZWFkX2NvbmZp Z19ieXRlKHBkZXYsIDB4NDAsICh2b2lkICopJmJ5dGVfcmVnaXN0ZXJzKTsN CglwcmludGsoS0VSTl9JTkZPIFBGWCAiW0FSVElDSUFTXSBSTyAgMHg0MCAg Y2FwX2lkZW50aWZpZXIgMHgleFxuIiwgKHU4KWJ5dGVfcmVnaXN0ZXJzKTsN Cg0KCS8qIE91dHB1dCBBR1AgaW50ZXJmYWNlIHNwZWNpZmljYXRpb24gcmV2 aXNpb24gbnVtYmVyLiAqLw0KDQoJYnl0ZV9yZWdpc3RlcnMgPSAwOw0KCXBj aV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIDB4NDIsICh2b2lkICopJmJ5dGVf cmVnaXN0ZXJzKTsNCglwcmludGsoS0VSTl9JTkZPIFBGWCAiW0FSVElDSUFT XSBSTyAgMHg0MiAgYWdwX2ludF9yZXYgICAgMHgleFxuIiwgKHU4KWJ5dGVf cmVnaXN0ZXJzKTsNCiAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyBQRlggIltB UlRJQ0lBU10gKiBEZWNvZGluZzpcbiIpOw0KCXByaW50ayhLRVJOX0lORk8g UEZYICJbQVJUSUNJQVNdICogQml0IDM6MCAgIEFHUCBpbnRlcmZhY2Ugc3Bl YyBtaW5vciByZXZcbiIpOw0KCXByaW50ayhLRVJOX0lORk8gUEZYICJbQVJU SUNJQVNdICogQml0IDc6NCAgIEFHUCBpbnRlcmZhY2Ugc3BlYyBtYWpvciBy ZXZcbiIpOw0KDQoJLyogT3V0cHV0IEFHUCBvcGVyYXRpb24gc3RhdHVzIDAv MSByZWdpc3Rlci4gKi8NCg0KCXUxNiB3b3JkX3JlZ2lzdGVycyA9IDA7DQoJ cGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgMHg0NCwgKHZvaWQgKikmd29y ZF9yZWdpc3RlcnMpOw0KCXByaW50ayhLRVJOX0lORk8gUEZYICJbQVJUSUNJ QVNdIFJPICAweDQ0ICBhZ3Bfb3Bfc3RhdDAxICAweCV4XG4iLCAodTE2KXdv cmRfcmVnaXN0ZXJzKTsNCiAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyBQRlgg IltBUlRJQ0lBU10gKiBEZWNvZGluZzpcbiIpOw0KCXByaW50ayhLRVJOX0lO Rk8gUEZYICJbQVJUSUNJQVNdICogQml0IDAgICAgIEFHUCAxWCB0cmFuc2Zl ciByYXRlIHN1cHBvcnRcbiIpOw0KCXByaW50ayhLRVJOX0lORk8gUEZYICJb QVJUSUNJQVNdICogQml0IDEgICAgIEFHUCAyWCB0cmFuc2ZlciByYXRlIHN1 cHBvcnRcbiIpOw0KCXByaW50ayhLRVJOX0lORk8gUEZYICJbQVJUSUNJQVNd ICogQml0IDIgICAgIEFHUCA0WCB0cmFuc2ZlciByYXRlIHN1cHBvcnRcbiIp Ow0KCXByaW50ayhLRVJOX0lORk8gUEZYICJbQVJUSUNJQVNdICogQml0IDg6 MyAgIFJlc2VydmVkXG4iKTsNCiAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyBQ RlggIltBUlRJQ0lBU10gKiBCaXQgOSAgICAgQUdQIFNpZGViYW5kIEFkZHJl c3Npbmcgc3VwcG9ydFxuIik7DQoJcHJpbnRrKEtFUk5fSU5GTyBQRlggIltB UlRJQ0lBU10gKiBCaXQgMTU6MTAgUmVzZXJ2ZWRcbiIpOw0KDQoJLyogT3V0 cHV0IEFHUCBvcGVyYXRpb24gc3RhdHVzIDIgcmVnaXN0ZXIuICovDQoNCgli eXRlX3JlZ2lzdGVycyA9IDA7DQoJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRl diwgMHg0NywgKHZvaWQgKikmYnl0ZV9yZWdpc3RlcnMpOw0KCXByaW50ayhL RVJOX0lORk8gUEZYICJbQVJUSUNJQVNdIFJPICAweDQ3ICBhZ3Bfb3Bfc3Rh dDIgICAweCV4XG4iLCAodTgpYnl0ZV9yZWdpc3RlcnMpOw0KICAgICAgICBw cmludGsoS0VSTl9JTkZPIFBGWCAiW0FSVElDSUFTXSAqIERlY29kaW5nOlxu Iik7DQoJcHJpbnRrKEtFUk5fSU5GTyBQRlggIltBUlRJQ0lBU10gKiBCaXQg NzowICAgQUdQIG1heGltdW0gbnVtYmVyIG9mIGNvbW1hbmRzXG4iKTsNCg0K CS8qIFRlc3QgQUdQIGNvbW1hbmQgcmVnaXN0ZXIuICovDQoNCgl1MTYgYWdw X2NtZF93b3JkX2luaXQgPSAwOw0KCXUxNiBhZ3BfY21kX3dvcmRfdGVzdCA9 IDA7DQoNCgkvKiBSZWFkIG91dCBpbml0aWFsIEFHUCBjb21tYW5kIHJlZ2lz dGVyIGNvbmZpZ3VyYXRpb24uICovDQoJcGNpX3JlYWRfY29uZmlnX3dvcmQo cGRldiwgMHg0OCwgKHZvaWQgKikmYWdwX2NtZF93b3JkX2luaXQpOw0KCXBy aW50ayhLRVJOX0lORk8gUEZYICJbQVJUSUNJQVNdIFIgICAweDQ4ICBhZ3Bf Y21kICAgICAgICAweCV4XG4iLCAodTE2KWFncF9jbWRfd29yZF9pbml0KTsN CiAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyBQRlggIltBUlRJQ0lBU10gKiBE ZWNvZGluZzpcbiIpOw0KCXByaW50ayhLRVJOX0lORk8gUEZYICJbQVJUSUNJ QVNdICogQml0IDI6MCAgIEFHUCAxeC8yeC80eFxuIik7DQoJcHJpbnRrKEtF Uk5fSU5GTyBQRlggIltBUlRJQ0lBU10gKiBCaXQgNzozICAgUmVzZXJ2ZWRc biIpOw0KCXByaW50ayhLRVJOX0lORk8gUEZYICJbQVJUSUNJQVNdICogQml0 IDggICAgIEFHUCBvcGVyYXRpb25cbiIpOw0KCXByaW50ayhLRVJOX0lORk8g UEZYICJbQVJUSUNJQVNdICogQml0IDkgICAgIFNCQWRkcmVzc2luZ1xuIik7 DQogICAgICAgIHByaW50ayhLRVJOX0lORk8gUEZYICJbQVJUSUNJQVNdICog Qml0IDE1OjEwIFJlc2VydmVkXG4iKTsNCg0KCS8qIFdyaXRlIHJlZ2lzdGVy IHRvIGZpbmQgb3V0IGJpdCBhc3NpZ25tZW50cyBpbiB0aGUgcmVnaXN0ZXIu ICovDQogICAgICAgIC8qIE1hc2sgcmVnaXN0ZXIgaW5pdCB2YWx1ZSB3aXRo IG5ldyBzZXR0aW5ncy4gV2UgbGVhdmUgdGhlIEFHUA0KICAgICAgICAgKiB0 cmFuc2ZlciByYXRlIGFzIGl0IGlzLCBiZWNhdXNlIHdlIGtub3cgdGhhdCB0 aGUgQXJ0aWNpYVMgb25seQ0KICAgICAgICAgKiBzdXBwb3J0cyAxeCBhbmQg MnggdHJhbnNmZXIgcmF0ZXMuIEFsc28gd2UgZG9uJ3Qgc2V0IHRoZSBBR1AN CiAgICAgICAgICogb3BlcmF0aW9uIGVuYWJsZSBiaXQsIGJlY2F1c2UgQUdQ IG1vZGUgaXMgbm90IHNldHVwIHlldCENCiAgICAgICAgICovDQoJYWdwX2Nt ZF93b3JkX3Rlc3QgPSBhZ3BfY21kX3dvcmRfaW5pdCB8IDB4RkVGODsNCiAg ICAgICAgcHJpbnRrKEtFUk5fSU5GTyBQRlggIltBUlRJQ0lBU10gVyAgIDB4 NDggIGFncF9jbWQgICAgICAgIDB4JXhcbiIsICh1MTYpYWdwX2NtZF93b3Jk X3Rlc3QpOw0KICAgICAgICBwcmludGsoS0VSTl9JTkZPIFBGWCAiW0FSVElD SUFTXSAqIERlY29kaW5nOlxuIik7DQoJcHJpbnRrKEtFUk5fSU5GTyBQRlgg IltBUlRJQ0lBU10gKiBCaXQgMjowICAgQUdQIDF4LzJ4LzR4ICAgICAgIGRl ZlxuIik7DQoJcHJpbnRrKEtFUk5fSU5GTyBQRlggIltBUlRJQ0lBU10gKiBC aXQgNzozICAgUmVzZXJ2ZWQgICAgICAgICAgIDB4RkZcbiIpOw0KCXByaW50 ayhLRVJOX0lORk8gUEZYICJbQVJUSUNJQVNdICogQml0IDggICAgIEFHUCBv cGVyYXRpb24gICAgICBkZWZcbiIpOw0KCXByaW50ayhLRVJOX0lORk8gUEZY ICJbQVJUSUNJQVNdICogQml0IDkgICAgIFNCQWRkcmVzc2luZyAgICAgICAw eDFcbiIpOw0KICAgICAgICBwcmludGsoS0VSTl9JTkZPIFBGWCAiW0FSVElD SUFTXSAqIEJpdCAxNToxMCBSZXNlcnZlZCAgICAgICAgICAgMHhGRlxuIik7 DQoJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBkZXYsIDB4NDgsIGFncF9jbWRf d29yZF90ZXN0KTsNCg0KCWFncF9jbWRfd29yZF90ZXN0ID0gMDsNCg0KCS8q IFJlYWQgYmFjayB0aGUgcmVnaXN0ZXIgdGVzdCBjb25maWd1cmF0aW9uLiAq Lw0KCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIDB4NDgsICh2b2lkICop JmFncF9jbWRfd29yZF90ZXN0KTsNCglwcmludGsoS0VSTl9JTkZPIFBGWCAi W0FSVElDSUFTXSBSVCAgMHg0OCAgYWdwX2NtZCAgICAgICAgMHgleFxuIiwg KHUxNilhZ3BfY21kX3dvcmRfdGVzdCk7DQogICAgICAgIHByaW50ayhLRVJO X0lORk8gUEZYICJbQVJUSUNJQVNdICogRGVjb2Rpbmc6XG4iKTsNCglwcmlu dGsoS0VSTl9JTkZPIFBGWCAiW0FSVElDSUFTXSAqIEJpdCAyOjAgICBBR1Ag MXgvMngvNHggICAgICAgMHgyXG4iKTsNCglwcmludGsoS0VSTl9JTkZPIFBG WCAiW0FSVElDSUFTXSAqIEJpdCA3OjMgICBSZXNlcnZlZCAgICAgICAgICAg MHgwMFxuIik7DQoJcHJpbnRrKEtFUk5fSU5GTyBQRlggIltBUlRJQ0lBU10g KiBCaXQgOCAgICAgQUdQIG9wZXJhdGlvbiAgICAgIDB4MFxuIik7DQoJcHJp bnRrKEtFUk5fSU5GTyBQRlggIltBUlRJQ0lBU10gKiBCaXQgOSAgICAgU0JB ZGRyZXNzaW5nICAgICAgIDB4MVxuIik7DQogICAgICAgIHByaW50ayhLRVJO X0lORk8gUEZYICJbQVJUSUNJQVNdICogQml0IDE1OjEwIFJlc2VydmVkICAg ICAgICAgICAweDAwXG4iKTsNCg0KCWFncF9jbWRfd29yZF90ZXN0ID0gMDsN Cg0KCS8qIFJlc3RvcmUgaW5pdGlhbCByZWdpc3RlciBjb250ZW50LiAqLw0K CXBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCAweDQ4LCBhZ3BfY21kX3dv cmRfaW5pdCk7DQoJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgMHg0OCwg KHZvaWQgKikmYWdwX2NtZF93b3JkX3Rlc3QpOw0KCWlmKGFncF9jbWRfd29y ZF90ZXN0ICE9IGFncF9jbWRfd29yZF9pbml0KQ0KCXsNCgkJcHJpbnRrKEtF Uk5fSU5GTyBQRlggIltBUlRJQ0lBU10gRVJST1I6IENvdWxkIG5vdCByZXN0 b3JlIGluaXRpYWwgcmVnaXN0ZXIgc2V0dGluZyFcbiIpOw0KCX0NCg0KCS8q IFRlc3QgYnVzIDEgYWNjZXNzIGNvbnRyb2wgcmVnaXN0ZXIgKDB4NTgtMHg1 QikuICovDQoNCgl1MzIgYWdwX2J1czFfZHdvcmRfaW5pdCA9IDA7DQoJdTMy IGFncF9idXMxX2R3b3JkX3Rlc3QgPSAwOw0KDQoJLyogUmVhZCBvdXQgaW5p dGlhbCBidXMgMSBhY2Nlc3MgY29udHJvbCByZWdpc3RlciBjb25maWd1cmF0 aW9uLiAqLw0KCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCAweDU4LCAo dm9pZCAqKSZhZ3BfYnVzMV9kd29yZF9pbml0KTsNCglwcmludGsoS0VSTl9J TkZPIFBGWCAiW0FSVElDSUFTXSBSICAgMHg1OCAgYWdwX2J1czEgICAgICAg MHgleFxuIiwgKHUzMilhZ3BfYnVzMV9kd29yZF9pbml0KTsNCiAgICAgICAg cHJpbnRrKEtFUk5fSU5GTyBQRlggIltBUlRJQ0lBU10gKiBEZWNvZGluZzpc biIpOw0KCXByaW50ayhLRVJOX0lORk8gUEZYICJbQVJUSUNJQVNdICogQml0 IDAgICAgIEJ5dGUgZW5hYmxlIGNoZWNrXG4iKTsNCglwcmludGsoS0VSTl9J TkZPIFBGWCAiW0FSVElDSUFTXSAqIEJpdCAxICAgICBBR1AgZXh0ZW5zaW9u IG1vZGVcbiIpOw0KCXByaW50ayhLRVJOX0lORk8gUEZYICJbQVJUSUNJQVNd ICogQml0IDIgICAgIEdyYXBoaWMgZGV2aWNlIEFHUC9QQ0lcbiIpOw0KCXBy aW50ayhLRVJOX0lORk8gUEZYICJbQVJUSUNJQVNdICogQml0IDU6MyAgIFJl c2VydmVkXG4iKTsNCiAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyBQRlggIltB UlRJQ0lBU10gKiBCaXQgNiAgICAgR0FSVCB0cmFuc2ZlciBjb250cm9sXG4i KTsNCglwcmludGsoS0VSTl9JTkZPIFBGWCAiW0FSVElDSUFTXSAqIEJpdCA3 ICAgICBBR1AgVExCIHRyYW5zbGF0aW9uIGNvbnRyb2xcbiIpOw0KCXByaW50 ayhLRVJOX0lORk8gUEZYICJbQVJUSUNJQVNdICogQml0IDExOjggIEdBUlQg c2l6ZSBzZWxlY3Rpb24gKFxuIik7DQoJcHJpbnRrKEtFUk5fSU5GTyBQRlgg IltBUlRJQ0lBU10gKiA+Pj4gMTA6OCAgZm9yIEFydGljaWFTKFxuIik7DQoJ cHJpbnRrKEtFUk5fSU5GTyBQRlggIltBUlRJQ0lBU10gKiBCaXQgMzE6MTIg QUdQIFRMQiBiYXNlIGFkZHJlc3NcbiIpOw0KCXByaW50ayhLRVJOX0lORk8g UEZYICJbQVJUSUNJQVNdICogPj4+IDMxOjE2IGZvciBBcnRpY2lhUz9cbiIp Ow0KDQoJLyogV3JpdGUgcmVnaXN0ZXIgdG8gZmluZCBvdXQgYml0IGFzc2ln bm1lbnRzIGluIHRoZSByZWdpc3Rlci4gKi8NCiAgICAgICAgLyogTWFzayBy ZWdpc3RlciBpbml0IHZhbHVlIHdpdGggbmV3IHNldHRpbmdzLiBXZSBzZXQg dGhlIEFHUCBUTEIgYmFzZQ0KCSAqIGFkZHJlc3MgKHRvIGNoZWNrIHRoZSBz aXplIG9mIHRoZSBmaWVsZCksIHRoZSBBR1AgVExCIHRyYW5zbGF0aW9uDQoJ ICogY29udHJvbCBiaXQgKGJlY2F1c2UgaXRzIG5vdCBjbGVhciBpZiB0aGUg QXJ0aWNpYVMgc3VwcG9ydHMgaXQpIGFuZA0KCSAqIHRoZSBHQVJUIHNpemUg c2VsZWN0aW9uIGJpdHMuDQogICAgICAgICAqLw0KCWFncF9idXMxX2R3b3Jk X3Rlc3QgPSBhZ3BfYnVzMV9kd29yZF9pbml0IHwgMHhGRkZGRkZCODsNCiAg ICAgICAgcHJpbnRrKEtFUk5fSU5GTyBQRlggIltBUlRJQ0lBU10gVyAgIDB4 NTggIGFncF9idXMxICAgICAgIDB4JXhcbiIsICh1MzIpYWdwX2J1czFfZHdv cmRfdGVzdCk7DQogICAgICAgIHByaW50ayhLRVJOX0lORk8gUEZYICJbQVJU SUNJQVNdICogRGVjb2Rpbmc6XG4iKTsNCglwcmludGsoS0VSTl9JTkZPIFBG WCAiW0FSVElDSUFTXSAqIEJpdCAwICAgICBCeXRlIGVuYWJsZSBjaGVjayAg ZGVmXG4iKTsNCglwcmludGsoS0VSTl9JTkZPIFBGWCAiW0FSVElDSUFTXSAq IEJpdCAxICAgICBBR1AgZXh0ZW5zaW9uIG1vZGUgZGVmXG4iKTsNCglwcmlu dGsoS0VSTl9JTkZPIFBGWCAiW0FSVElDSUFTXSAqIEJpdCAyICAgICBHcmFw aGljIGRldmljZSAgICAgZGVmXG4iKTsNCglwcmludGsoS0VSTl9JTkZPIFBG WCAiW0FSVElDSUFTXSAqIEJpdCA1OjMgICBSZXNlcnZlZCAgICAgICAgICAg MHgzXG4iKTsNCiAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyBQRlggIltBUlRJ Q0lBU10gKiBCaXQgNiAgICAgR0FSVCB0cmFuc2ZlciAgICAgIGRlZlxuIik7 DQoJcHJpbnRrKEtFUk5fSU5GTyBQRlggIltBUlRJQ0lBU10gKiBCaXQgNyAg ICAgQUdQIFRMQiB0cmFuc2wuICAgIDB4MVxuIik7DQoJcHJpbnRrKEtFUk5f SU5GTyBQRlggIltBUlRJQ0lBU10gKiBCaXQgMTE6OCAgR0FSVCBzaXplICAg ICAgICAgIDB4RlxuIik7DQoJcHJpbnRrKEtFUk5fSU5GTyBQRlggIltBUlRJ Q0lBU10gKiA+Pj4gMTA6OCAgZm9yIEFydGljaWFTKFxuIik7DQoJcHJpbnRr KEtFUk5fSU5GTyBQRlggIltBUlRJQ0lBU10gKiBCaXQgMzE6MTIgQUdQIFRM QiBiYXNlICAgICAgIDBGRkZGRlxuIik7DQoJcHJpbnRrKEtFUk5fSU5GTyBQ RlggIltBUlRJQ0lBU10gKiA+Pj4gMzE6MTYgZm9yIEFydGljaWFTP1xuIik7 DQoJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCAweDU4LCBhZ3BfYnVz MV9kd29yZF90ZXN0KTsNCg0KCWFncF9idXMxX2R3b3JkX3Rlc3QgPSAwOw0K DQoJLyogUmVhZCBiYWNrIHRoZSByZWdpc3RlciB0ZXN0IGNvbmZpZ3VyYXRp b24uICovDQoJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIDB4NTgsICh2 b2lkICopJmFncF9idXMxX2R3b3JkX3Rlc3QpOw0KCXByaW50ayhLRVJOX0lO Rk8gUEZYICJbQVJUSUNJQVNdIFJUICAweDU4ICBhZ3BfYnVzMSAgICAgICAw eCV4XG4iLCAodTMyKWFncF9idXMxX2R3b3JkX3Rlc3QpOw0KICAgICAgICBw cmludGsoS0VSTl9JTkZPIFBGWCAiW0FSVElDSUFTXSAqIERlY29kaW5nOlxu Iik7DQoJcHJpbnRrKEtFUk5fSU5GTyBQRlggIltBUlRJQ0lBU10gKiBCaXQg MCAgICAgQnl0ZSBlbmFibGUgY2hlY2sgIGRlZlxuIik7DQoJcHJpbnRrKEtF Uk5fSU5GTyBQRlggIltBUlRJQ0lBU10gKiBCaXQgMSAgICAgQUdQIGV4dGVu c2lvbiBtb2RlIGRlZlxuIik7DQoJcHJpbnRrKEtFUk5fSU5GTyBQRlggIltB UlRJQ0lBU10gKiBCaXQgMiAgICAgR3JhcGhpYyBkZXZpY2UgICAgIGRlZlxu Iik7DQoJcHJpbnRrKEtFUk5fSU5GTyBQRlggIltBUlRJQ0lBU10gKiBCaXQg NTozICAgUmVzZXJ2ZWQgICAgICAgICAgIDB4MFxuIik7DQogICAgICAgIHBy aW50ayhLRVJOX0lORk8gUEZYICJbQVJUSUNJQVNdICogQml0IDYgICAgIEdB UlQgdHJhbnNmZXIgICAgICBkZWZcbiIpOw0KCXByaW50ayhLRVJOX0lORk8g UEZYICJbQVJUSUNJQVNdICogQml0IDcgICAgIEFHUCBUTEIgdHJhbnNsLiAg ICAweDFcbiIpOw0KCXByaW50ayhLRVJOX0lORk8gUEZYICJbQVJUSUNJQVNd ICogQml0IDExOjggIEdBUlQgc2l6ZSAgICAgICAgICAweDdcbiIpOw0KCXBy aW50ayhLRVJOX0lORk8gUEZYICJbQVJUSUNJQVNdICogPj4+IDEwOjggIGZv ciBBcnRpY2lhUyhcbiIpOw0KCXByaW50ayhLRVJOX0lORk8gUEZYICJbQVJU SUNJQVNdICogQml0IDMxOjEyIEFHUCBUTEIgYmFzZSAgICAgICAwRkZGRjBc biIpOw0KCXByaW50ayhLRVJOX0lORk8gUEZYICJbQVJUSUNJQVNdICogPj4+ IDMxOjE2IGZvciBBcnRpY2lhUz9cbiIpOzsNCg0KCWFncF9idXMxX2R3b3Jk X3Rlc3QgPSAwOw0KDQoJLyogUmVzdG9yZSBpbml0aWFsIHJlZ2lzdGVyIGNv bnRlbnQuICovDQoJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCAweDU4 LCBhZ3BfYnVzMV9kd29yZF9pbml0KTsNCglwY2lfcmVhZF9jb25maWdfZHdv cmQocGRldiwgMHg1OCwgKHZvaWQgKikmYWdwX2J1czFfZHdvcmRfdGVzdCk7 DQoJaWYoYWdwX2J1czFfZHdvcmRfdGVzdCAhPSBhZ3BfYnVzMV9kd29yZF9p bml0KQ0KCXsNCgkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIltBUlRJQ0lBU10g RVJST1I6IENvdWxkIG5vdCByZXN0b3JlIGluaXRpYWwgcmVnaXN0ZXIgc2V0 dGluZyFcbiIpOw0KCX0NCg0KCXByaW50ayhLRVJOX0lORk8gUEZYICJbQVJU SUNJQVNdIEVuZCBvZiBhcnRpY2lhc190ZXN0X2FncF9yZWdpc3RlcigpLlxu Iik7DQp9DQoNCnN0YXRpYyB2b2lkIGFydGljaWFzX3ByaW50X2FncF9yZWdp c3RlcihzdHJ1Y3QgcGNpX2RldiAqcGRldikNCnsNCglwcmludGsoS0VSTl9J TkZPIFBGWCAiW0FSVElDSUFTXSBhcnRpY2lhc19wcmludF9hZ3BfcmVnaXN0 ZXIoKS5cbiIpOw0KCXByaW50ayhLRVJOX0lORk8gUEZYICJbQVJUSUNJQVNd IFJXICBBZGRyICBSZWdpc3RlciAgICAgICBWYWx1ZVxuIik7DQogICAgICAg IHByaW50ayhLRVJOX0lORk8gUEZYICJbQVJUSUNJQVNdIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4pOw0KDQoJLyogUiAg PSBSZWFkICovDQoNCgkvKiBPdXRwdXQgR0FSVCBiYXNlIGFkZHJlc3MgcmVn aXN0ZXIgKDB4MTAuLjB4MTMpLiAqLw0KDQoJdTMyIGR3b3JkX3JlZ2lzdGVy ID0gMDsNCglwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgMHgxMCwgKHZv aWQgKikmZHdvcmRfcmVnaXN0ZXIpOw0KCXByaW50ayhLRVJOX0lORk8gUEZY ICJbQVJUSUNJQVNdIFIgICAweDEwICBhZ3BfZ2FydF9iYXNlICAweCV4XG4i LCAodTMyKWR3b3JkX3JlZ2lzdGVyKTsNCiAgICAgICAgcHJpbnRrKEtFUk5f SU5GTyBQRlggIltBUlRJQ0lBU10gKiBEZWNvZGluZzpcbiIpOw0KCXByaW50 ayhLRVJOX0lORk8gUEZYICJbQVJUSUNJQVNdICogQml0IDAgICAgIEdBUlQg bWVtb3J5IHNwYWNlXG4iKTsNCglwcmludGsoS0VSTl9JTkZPIFBGWCAiW0FS VElDSUFTXSAqIEJpdCAyOjEgICBHQVJUIGFkZGVzcyB0eXBlXG4iKTsNCglw cmludGsoS0VSTl9JTkZPIFBGWCAiW0FSVElDSUFTXSAqIEJpdCAzICAgICBN ZW1vcnkgcHJlZmV0Y2hcbiIpOw0KCXByaW50ayhLRVJOX0lORk8gUEZYICJb QVJUSUNJQVNdICogQml0IDExOjQgIFJlc2VydmVkXG4iKTsNCiAgICAgICAg cHJpbnRrKEtFUk5fSU5GTyBQRlggIltBUlRJQ0lBU10gKiBCaXQgMzE6MTIg R0FSVCBiYXNlIGFkZHJlc3NcbiIpOw0KDQoJLyogT3V0cHV0IGNhcGFiaWxp dHkgcG9pbnRlciByZWdpc3Rlci4gKi8NCg0KCXU4IGJ5dGVfcmVnaXN0ZXJz ID0gMDsNCglwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCAweDM0LCAodm9p ZCAqKSZieXRlX3JlZ2lzdGVycyk7DQoJcHJpbnRrKEtFUk5fSU5GTyBQRlgg IltBUlRJQ0lBU10gUk8gIDB4MzQgIGNhcF9wb2ludGVyICAgIDB4JXhcbiIs ICh1OClieXRlX3JlZ2lzdGVycyk7DQoNCgkvKiBPdXRwdXQgY2FwYWJpbGl0 eSBpZGVudGlmaWVyIHJlZ2lzdGVyLiAqLw0KDQoJYnl0ZV9yZWdpc3RlcnMg PSAwOw0KCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIDB4NDAsICh2b2lk ICopJmJ5dGVfcmVnaXN0ZXJzKTsNCglwcmludGsoS0VSTl9JTkZPIFBGWCAi W0FSVElDSUFTXSBSTyAgMHg0MCAgY2FwX2lkZW50aWZpZXIgMHgleFxuIiwg KHU4KWJ5dGVfcmVnaXN0ZXJzKTsNCg0KCS8qIE91dHB1dCBBR1AgaW50ZXJm YWNlIHNwZWNpZmljYXRpb24gcmV2aXNpb24gbnVtYmVyLiAqLw0KDQoJYnl0 ZV9yZWdpc3RlcnMgPSAwOw0KCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYs IDB4NDIsICh2b2lkICopJmJ5dGVfcmVnaXN0ZXJzKTsNCglwcmludGsoS0VS Tl9JTkZPIFBGWCAiW0FSVElDSUFTXSBSTyAgMHg0MiAgYWdwX2ludF9yZXYg ICAgMHgleFxuIiwgKHU4KWJ5dGVfcmVnaXN0ZXJzKTsNCiAgICAgICAgcHJp bnRrKEtFUk5fSU5GTyBQRlggIltBUlRJQ0lBU10gKiBEZWNvZGluZzpcbiIp Ow0KCXByaW50ayhLRVJOX0lORk8gUEZYICJbQVJUSUNJQVNdICogQml0IDM6 MCAgIEFHUCBpbnRlcmZhY2Ugc3BlYyBtaW5vciByZXZcbiIpOw0KCXByaW50 ayhLRVJOX0lORk8gUEZYICJbQVJUSUNJQVNdICogQml0IDc6NCAgIEFHUCBp bnRlcmZhY2Ugc3BlYyBtYWpvciByZXZcbiIpOw0KDQoJLyogT3V0cHV0IEFH UCBvcGVyYXRpb24gc3RhdHVzIDAvMSByZWdpc3Rlci4gKi8NCg0KCXUxNiB3 b3JkX3JlZ2lzdGVycyA9IDA7DQoJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRl diwgMHg0NCwgKHZvaWQgKikmd29yZF9yZWdpc3RlcnMpOw0KCXByaW50ayhL RVJOX0lORk8gUEZYICJbQVJUSUNJQVNdIFJPICAweDQ0ICBhZ3Bfb3Bfc3Rh dDAxICAweCV4XG4iLCAodTE2KXdvcmRfcmVnaXN0ZXJzKTsNCiAgICAgICAg cHJpbnRrKEtFUk5fSU5GTyBQRlggIltBUlRJQ0lBU10gKiBEZWNvZGluZzpc biIpOw0KCXByaW50ayhLRVJOX0lORk8gUEZYICJbQVJUSUNJQVNdICogQml0 IDAgICAgIEFHUCAxWCB0cmFuc2ZlciByYXRlIHN1cHBvcnRcbiIpOw0KCXBy aW50ayhLRVJOX0lORk8gUEZYICJbQVJUSUNJQVNdICogQml0IDEgICAgIEFH UCAyWCB0cmFuc2ZlciByYXRlIHN1cHBvcnRcbiIpOw0KCXByaW50ayhLRVJO X0lORk8gUEZYICJbQVJUSUNJQVNdICogQml0IDIgICAgIEFHUCA0WCB0cmFu c2ZlciByYXRlIHN1cHBvcnRcbiIpOw0KCXByaW50ayhLRVJOX0lORk8gUEZY ICJbQVJUSUNJQVNdICogQml0IDg6MyAgIFJlc2VydmVkXG4iKTsNCiAgICAg ICAgcHJpbnRrKEtFUk5fSU5GTyBQRlggIltBUlRJQ0lBU10gKiBCaXQgOSAg ICAgQUdQIFNpZGViYW5kIEFkZHJlc3Npbmcgc3VwcG9ydFxuIik7DQoJcHJp bnRrKEtFUk5fSU5GTyBQRlggIltBUlRJQ0lBU10gKiBCaXQgMTU6MTAgUmVz ZXJ2ZWRcbiIpOw0KDQoJLyogT3V0cHV0IEFHUCBvcGVyYXRpb24gc3RhdHVz IDIgcmVnaXN0ZXIuICovDQoNCglieXRlX3JlZ2lzdGVycyA9IDA7DQoJcGNp X3JlYWRfY29uZmlnX2J5dGUocGRldiwgMHg0NywgKHZvaWQgKikmYnl0ZV9y ZWdpc3RlcnMpOw0KCXByaW50ayhLRVJOX0lORk8gUEZYICJbQVJUSUNJQVNd IFJPICAweDQ3ICBhZ3Bfb3Bfc3RhdDIgICAweCV4XG4iLCAodTgpYnl0ZV9y ZWdpc3RlcnMpOw0KICAgICAgICBwcmludGsoS0VSTl9JTkZPIFBGWCAiW0FS VElDSUFTXSAqIERlY29kaW5nOlxuIik7DQoJcHJpbnRrKEtFUk5fSU5GTyBQ RlggIltBUlRJQ0lBU10gKiBCaXQgNzowICAgQUdQIG1heGltdW0gbnVtYmVy IG9mIGNvbW1hbmRzXG4iKTsNCg0KCS8qIE91dHB1dCBBR1AgY29tbWFuZCBy ZWdpc3Rlci4gKi8NCg0KCXdvcmRfcmVnaXN0ZXJzID0gMDsNCglwY2lfcmVh ZF9jb25maWdfd29yZChwZGV2LCAweDQ4LCAodm9pZCAqKSZ3b3JkX3JlZ2lz dGVycyk7DQoJcHJpbnRrKEtFUk5fSU5GTyBQRlggIltBUlRJQ0lBU10gUiAg IDB4NDggIGFncF9jbWQgICAgICAgIDB4JXhcbiIsICh1MTYpd29yZF9yZWdp c3RlcnMpOw0KICAgICAgICBwcmludGsoS0VSTl9JTkZPIFBGWCAiW0FSVElD SUFTXSAqIERlY29kaW5nOlxuIik7DQoJcHJpbnRrKEtFUk5fSU5GTyBQRlgg IltBUlRJQ0lBU10gKiBCaXQgMjowICAgQUdQIDF4LzJ4LzR4XG4iKTsNCglw cmludGsoS0VSTl9JTkZPIFBGWCAiW0FSVElDSUFTXSAqIEJpdCA3OjMgICBS ZXNlcnZlZFxuIik7DQoJcHJpbnRrKEtFUk5fSU5GTyBQRlggIltBUlRJQ0lB U10gKiBCaXQgOCAgICAgQUdQIG9wZXJhdGlvblxuIik7DQoJcHJpbnRrKEtF Uk5fSU5GTyBQRlggIltBUlRJQ0lBU10gKiBCaXQgOSAgICAgU0JBZGRyZXNz aW5nXG4iKTsNCiAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyBQRlggIltBUlRJ Q0lBU10gKiBCaXQgMTU6MTAgUmVzZXJ2ZWRcbiIpOw0KDQoJLyogT3V0cHV0 IGJ1cyAxIGFjY2VzcyBjb250cm9sIHJlZ2lzdGVyICgweDU4LTB4NUIpLiAq Lw0KDQoJZHdvcmRfcmVnaXN0ZXJzID0gMDsNCglwY2lfcmVhZF9jb25maWdf ZHdvcmQocGRldiwgMHg1OCwgKHZvaWQgKikmZHdvcmRfcmVnaXN0ZXJzKTsN CglwcmludGsoS0VSTl9JTkZPIFBGWCAiW0FSVElDSUFTXSBSICAgMHg1OCAg YWdwX2J1czEgICAgICAgMHgleFxuIiwgKHUzMilkd29yZF9yZWdpc3RlcnMp Ow0KICAgICAgICBwcmludGsoS0VSTl9JTkZPIFBGWCAiW0FSVElDSUFTXSAq IERlY29kaW5nOlxuIik7DQoJcHJpbnRrKEtFUk5fSU5GTyBQRlggIltBUlRJ Q0lBU10gKiBCaXQgMCAgICAgQnl0ZSBlbmFibGUgY2hlY2tcbiIpOw0KCXBy aW50ayhLRVJOX0lORk8gUEZYICJbQVJUSUNJQVNdICogQml0IDEgICAgIEFH UCBleHRlbnNpb24gbW9kZVxuIik7DQoJcHJpbnRrKEtFUk5fSU5GTyBQRlgg IltBUlRJQ0lBU10gKiBCaXQgMiAgICAgR3JhcGhpYyBkZXZpY2UgQUdQL1BD SVxuIik7DQoJcHJpbnRrKEtFUk5fSU5GTyBQRlggIltBUlRJQ0lBU10gKiBC aXQgNTozICAgUmVzZXJ2ZWRcbiIpOw0KICAgICAgICBwcmludGsoS0VSTl9J TkZPIFBGWCAiW0FSVElDSUFTXSAqIEJpdCA2ICAgICBHQVJUIHRyYW5zZmVy IGNvbnRyb2xcbiIpOw0KCXByaW50ayhLRVJOX0lORk8gUEZYICJbQVJUSUNJ QVNdICogQml0IDcgICAgIEFHUCBUTEIgdHJhbnNsYXRpb24gY29udHJvbFxu Iik7DQoJcHJpbnRrKEtFUk5fSU5GTyBQRlggIltBUlRJQ0lBU10gKiBCaXQg MTE6OCAgR0FSVCBzaXplIHNlbGVjdGlvbiAoXG4iKTsNCglwcmludGsoS0VS Tl9JTkZPIFBGWCAiW0FSVElDSUFTXSAqID4+PiAxMDo4ICBmb3IgQXJ0aWNp YVMoXG4iKTsNCglwcmludGsoS0VSTl9JTkZPIFBGWCAiW0FSVElDSUFTXSAq IEJpdCAzMToxMiBBR1AgVExCIGJhc2UgYWRkcmVzc1xuIik7DQoJcHJpbnRr KEtFUk5fSU5GTyBQRlggIltBUlRJQ0lBU10gKiA+Pj4gMzE6MTYgZm9yIEFy dGljaWFTP1xuIik7DQoNCn0NCg0KbW9kdWxlX2luaXQoYWdwX2FydGljaWFz X2luaXQpOw0KbW9kdWxlX2V4aXQoYWdwX2FydGljaWFzX2NsZWFudXApOw0K DQpNT0RVTEVfTElDRU5TRSgiR1BMIik7DQpNT0RVTEVfQVVUSE9SKCJEYXZl IEpvbmVzIDxkYXZlakBjb2RlbW9ua2V5Lm9yZy51az4iKTsNCg== ------=_NextPart_000_651c_834_79d3--