From mboxrd@z Thu Jan 1 00:00:00 1970 From: przanoni@gmail.com Subject: =?utf-8?q?=5BPATCH=5D_Add_tools/intel=5Finfoframes?= Date: Mon, 9 Jan 2012 12:03:19 -0200 Message-ID: <1326117799-32391-1-git-send-email-przanoni@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-gy0-f177.google.com (mail-gy0-f177.google.com [209.85.160.177]) by gabe.freedesktop.org (Postfix) with ESMTP id 48F909E7BB for ; Mon, 9 Jan 2012 06:03:50 -0800 (PST) Received: by ghrr15 with SMTP id r15so1555257ghr.36 for ; Mon, 09 Jan 2012 06:03:49 -0800 (PST) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: intel-gfx-bounces+gcfxdi-intel-gfx=m.gmane.org@lists.freedesktop.org Errors-To: intel-gfx-bounces+gcfxdi-intel-gfx=m.gmane.org@lists.freedesktop.org To: intel-gfx@lists.freedesktop.org Cc: Paulo Zanoni List-Id: intel-gfx@lists.freedesktop.org RnJvbTogUGF1bG8gWmFub25pIDxwYXVsby5yLnphbm9uaUBpbnRlbC5jb20+CgpUaGlzIGlzIGEg Y29tbWFuZC1saW5lIHRvb2wgdGhhdCBhbGxvd3MgdXMgdG8gZGlzcGxheSBhbmQgbW9kaWZ5IHRo ZQpJbmZvRnJhbWVzIHdlIHNlbmQuCgpTaWduZWQtb2ZmLWJ5OiBQYXVsbyBaYW5vbmkgPHBhdWxv LnIuemFub25pQGludGVsLmNvbT4KLS0tCgpIaQoKQmVmb3JlIHdlIGFkZCBLZXJuZWwgaW50ZXJm YWNlcyB0byBkZWFsIHdpdGggdGhlIGluZm9mcmFtZXMsIEkgZGVjaWRlZAp0byB3cml0ZSB0aGlz IHRvb2wuIEl0IGFsbG93cyB1cyB0byBxdWlja2x5IHRlc3QgZXZlcnl0aGluZyB3aXRob3V0CnJl cXVpcmluZyBhIHBhdGNoZWQgS2VybmVsLCBzbyBpcyB2ZXJ5IGNvbnZlbmllbnQgZm9yIHBlb3Bs ZSB3aG8gd2FudCB0bwpjaGFuZ2UgdGhlaXIgSW5mb0ZyYW1lcyBxdWlja2x5LgoKVGhlIGNvb2xl c3QgZmVhdHVyZSBiZWhpbmQgdGhpcyB0b29sIGlzIHRoZSBhYmlsaXR5IHRvIGNoYW5nZSBiZXR3 ZWVuCm92ZXJzY2FuIGFuZCB1bmRlcnNjYW4sIHNvIG5vdyB5b3UgY2FuIGNvbm5lY3QgeW91ciBj b21wdXRlciB0byB5b3VyIFRWCmFuZCwgbWF5YmUsIGJlIGFibGUgdG8gc2VlIHlvdXIgd2hvbGUg ZGVza3RvcCAoZXZlbiB0aGUgY29ybmVycyEpLiBJCnRlc3RlZCB0aGlzIHdpdGggMyBUVnMsIGJ1 dCBvbmx5IG9uZSBvZiB0aGVtIHJlc3BlY3RlZCB0aGUKb3ZlcnNjYW4vdW5kZXJzY2FuIHNldHRp bmdzLiBJIHN0aWxsIG5lZWQgdG8gaW52ZXN0aWdhdGUgbW9yZSB0aGUKcmVhc29ucyB3aHkgdGhl IHNldHRpbmdzIHdlcmUgaWdub3JlZCBvbiB0d28gVFZzIChJIGRpZG4ndCBsb29rIGF0IHRoZQpF RElEIHN0dWZmKS4KClNvLCB0byBjaGFuZ2UgYmV0d2VlbiBvdmVyc2NhbiBhbmQgdW5kZXJzY2Fu OgogJCBzdWRvIC4vaW50ZWxfaW5mb2ZyYW1lcwoKWW91J2xsIHNlZSB0aGUgbWFpbiBtZW51LiBU eXBlICIxIiBhbmQgdGhlbiBwcmVzcyBlbnRlciB0byBzZWUgd2hhdCdzCmhhcHBlbmluZyBvbiB5 b3VyIG1hY2hpbmUuIFlvdSdsbCBzZWUgd2hpY2ggdHJhbnNjb2RlciBpcyBhc3NvY2lhdGVkIHRv CndoaWNoIEhETUkgcG9ydC4gSWYgYW55IG9mIHRoZSB0cmFuc2NvZGVycyBpcyBlbmFibGVkLCB5 b3UnbGwgYWxzbyBzZWUKdGhlIEluZm9GcmFtZXMgdGhleSdyZSBzZW5kaW5nLiBOb3RlIHRoYXQg dG8gcmVhbGx5IHVuZGVyc3RhbmQgZWFjaApJbmZvRnJhbWUgZmllbGQgeW91J2xsIGhhdmUgdG8g bG9vayBhdCB0aGUgSERNSSBvciBDRUEtODYxCnNwZWNpZmljYXRpb25zLgoKVGhlbiwgc2VsZWN0 IG9wdGlvbiAyIHRvIGNoYW5nZSBhbiBJbmZvRnJhbWUuIFlvdSdsbCBuZWVkIHRvIHNlbGVjdCBh CnRyYW5zY29kZXI6IHNjcm9sbCB1cCBhbmQgcmVhZCB0aGUgb3V0cHV0IG9mIHRoZSBwcmV2aW91 cyBjb21tYW5kLiBUaGVuLApzZWxlY3QgdGhlIEFWSSBpbmZvZnJhbWUgKG9wdGlvbiAxKS4gT24g dGhlIG5leHQgbWVudSwgc2VsZWN0IG9wdGlvbiAxCmFnYWluLiBUaGUgb3B0aW9uIHRoYXQgZGVh bHMgd2l0aCBvdmVyc2Nhbi91ZGVyc2NhbiBpcyBTLiBWYWx1ZSAiMCIgaXMKZGVmYXVsdCwgdmFs dWUgIjEiIGlzIG92ZXJzY2FuIGFuZCB2YWx1ZSAiMiIgaXMgdW5kZXJzY2FuLiBXcml0ZSAiUyAy IgphbmQgdGhlbiBwcmVzcyBlbnRlci4gVGhlbiwgd3JpdGUgImRvbmUiIGFuZCBwcmVzcyBlbnRl ci4gSWYgeW91ciBUVgpyZXBlY3RzIHRoZSB1bmRlcnNjYW4gc2V0dGluZ3Mgb2YgdGhlIEFWSSBp bmZvZnJhbWVzLCB5b3UnbGwgbm93IGhhdmUKdW5kZXJzY2FuLgoKTmV4dCBmZWF0dXJlczoKIC0g U3VwcG9ydCBmb3IgSXJvbiBMYWtlIChJIG9ubHkgdGVzdGVkIHdpdGggU2FuZHkgQnJpZGdlKQog LSBPdGhlciBJbmZvRnJhbWVzIChJIG9ubHkgYWRkZWQgc3VwcG9ydCBmb3IgQVZJIGFuZCBTUEQp CiAtIENvZGUgdGhhdCB0cmllcyB0byBjaGVjayB3aGljaCBJbmZvRnJhbWVzIHlvdXIgVFYgaXMg c3VwcG9zZWQgdG8KICAgcmVzcGVjdC4KCkZlZWRiYWNrL3Rlc3Rpbmcgd291bGQgYmUgYXBwcmVj aWF0ZWQuCgpDaGVlcnMsClBhdWxvCgogbWFuL01ha2VmaWxlLmFtICAgICAgICAgIHwgICAgMSAr CiBtYW4vaW50ZWxfaW5mb2ZyYW1lcy5tYW4gfCAgIDIwICsKIHRvb2xzLy5naXRpZ25vcmUgICAg ICAgICB8ICAgIDEgKwogdG9vbHMvTWFrZWZpbGUuYW0gICAgICAgIHwgICAgMSArCiB0b29scy9p bnRlbF9pbmZvZnJhbWVzLmMgfCAgOTkzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysKIDUgZmlsZXMgY2hhbmdlZCwgMTAxNiBpbnNlcnRpb25zKCspLCAwIGRl bGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IG1hbi9pbnRlbF9pbmZvZnJhbWVzLm1hbgog Y3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL2ludGVsX2luZm9mcmFtZXMuYwoKZGlmZiAtLWdpdCBh L21hbi9NYWtlZmlsZS5hbSBiL21hbi9NYWtlZmlsZS5hbQppbmRleCAyYjU0MTk1Li43YzE0YTgx IDEwMDY0NAotLS0gYS9tYW4vTWFrZWZpbGUuYW0KKysrIGIvbWFuL01ha2VmaWxlLmFtCkBAIC02 LDYgKzYsNyBAQCBhcHBtYW5fUFJFID0gCQkJCVwKIAlpbnRlbF9lcnJvcl9kZWNvZGUubWFuCQlc CiAJaW50ZWxfZ3B1X3RvcC5tYW4JCVwKIAlpbnRlbF9ndHQubWFuCQkJXAorCWludGVsX2luZm9m cmFtZXMubWFuCQlcCiAJaW50ZWxfbGlkLm1hbgkJCVwKIAlpbnRlbF9yZWdfZHVtcGVyLm1hbgkJ XAogCWludGVsX3JlZ19yZWFkLm1hbgkJXApkaWZmIC0tZ2l0IGEvbWFuL2ludGVsX2luZm9mcmFt ZXMubWFuIGIvbWFuL2ludGVsX2luZm9mcmFtZXMubWFuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjFjYWY5MWIKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vaW50ZWxfaW5mb2Zy YW1lcy5tYW4KQEAgLTAsMCArMSwyMCBAQAorLlwiIHNob3J0aGFuZCBmb3IgZG91YmxlIHF1b3Rl IHRoYXQgd29ya3MgZXZlcnl3aGVyZS4KKy5kcyBxIFxOJzM0JworLlRIIGludGVsX2luZm9mcmFt ZXMgX19hcHBtYW5zdWZmaXhfXyBfX3hvcmd2ZXJzaW9uX18KKy5TSCBOQU1FCitpbnRlbF9pbmZv ZnJhbWVzIFwtIFZpZXcgYW5kIGNoYW5nZSBIRE1JIEluZm9GcmFtZXMKKy5TSCBTWU5PUFNJUwor LkIgaW50ZWxfaW5mb2ZyYW1lcworLlNIIERFU0NSSVBUSU9OCisuQiBpbnRlbF9pbmZvZnJhbWVz CitpcyBhIHRvb2wgdG8gdmlldyBhbmQgY2hhbmdlIHRoZSBIRE1JIEluZm9GcmFtZXMgc2VudCBi eSB0aGUgR1BVLiBJdHMgbWFpbgorcHVycG9zZSBpcyB0byBiZSB1c2VkIGFzIGEgZGVidWdnaW5n IHRvb2wuIEluIHNvbWUgY2FzZXMgKGUuZy4sIHdoZW4KK2NoYW5naW5nIG1vZGVzKSB0aGUgS2Vy bmVsIHdpbGwgdW5kbyB0aGUgY2hhbmdlcyBtYWRlIGJ5IHRoaXMgdG9vbC4KKworRGVzY3JpcHRp b25zIG9mIHRoZSBJbmZvRnJhbWUgZmllbGRzIGNhbiBiZSBmb3VuZCBvbiB0aGUgSERNSSBhbmQg Q0VBLTg2MQorc3BlY2lmaWNhdGlvbnMuCisuU0ggTElNSVRBVElPTlMKK05vdCBhbGwgSERNSSBt b25pdG9ycyByZXNwZWN0IHRoZSBJbmZvRnJhbWVzIHNlbnQgdG8gdGhlbS4gT25seSBTYW5keSBC cmlkZ2UKK29yIG5ld2VyIGhhcmR3YXJlIGlzIHN1cHBvcnRlZCB5ZXQuCisuU0ggU0VFIEFMU08K K0hETUkgc3BlY2lmaWNhdGlvbiwgQ0VBLTg2MSBzcGVjaWZpY2F0aW9uLgpkaWZmIC0tZ2l0IGEv dG9vbHMvLmdpdGlnbm9yZSBiL3Rvb2xzLy5naXRpZ25vcmUKaW5kZXggMGJiZGRlMS4uY2U3MGUz MCAxMDA2NDQKLS0tIGEvdG9vbHMvLmdpdGlnbm9yZQorKysgYi90b29scy8uZ2l0aWdub3JlCkBA IC0xMCw2ICsxMCw3IEBAIGludGVsX2dwdV9kdW1wCiBpbnRlbF9ncHVfdGltZQogaW50ZWxfZ3B1 X3RvcAogaW50ZWxfZ3R0CitpbnRlbF9pbmZvZnJhbWVzCiBpbnRlbF9saWQKIGludGVsX3JlZ19j aGVja2VyCiBpbnRlbF9yZWdfZHVtcGVyCmRpZmYgLS1naXQgYS90b29scy9NYWtlZmlsZS5hbSBi L3Rvb2xzL01ha2VmaWxlLmFtCmluZGV4IDQ5NjlhMTEuLjEyODcyMjAgMTAwNjQ0Ci0tLSBhL3Rv b2xzL01ha2VmaWxlLmFtCisrKyBiL3Rvb2xzL01ha2VmaWxlLmFtCkBAIC04LDYgKzgsNyBAQCBi aW5fUFJPR1JBTVMgPSBcCiAJaW50ZWxfZ3B1X3RvcCBcCiAJaW50ZWxfZ3B1X3RpbWUgXAogCWlu dGVsX2d0dCBcCisJaW50ZWxfaW5mb2ZyYW1lcyBcCiAJaW50ZWxfc3RlcHBpbmcgXAogCWludGVs X3JlZ19jaGVja2VyIFwKIAlpbnRlbF9yZWdfZHVtcGVyIFwKZGlmZiAtLWdpdCBhL3Rvb2xzL2lu dGVsX2luZm9mcmFtZXMuYyBiL3Rvb2xzL2ludGVsX2luZm9mcmFtZXMuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGJmZDY3Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMv aW50ZWxfaW5mb2ZyYW1lcy5jCkBAIC0wLDAgKzEsOTkzIEBACisvKgorICogQ29weXJpZ2h0IMKp IDIwMTIgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFu dGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBv ZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAi U29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rp b24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBj b3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICog YW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25z IHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3Qg dG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQg bm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAq IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlh bCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9S CisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF IEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMg T1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1Ig T1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRP UlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElP TiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgKiBERUFMSU5HUyBJTiBU SEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqICAgICAgUGF1bG8gWmFub25pIDxwYXVs by5yLnphbm9uaUBpbnRlbC5jb20+CisgKgorICovCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNp bmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgImludGVsX2dw dV90b29scy5oIgorCit0eXBlZGVmIGVudW0geworCVRSQU5TQ19BID0gMCwKKwlUUkFOU0NfQiA9 IDEsCisJVFJBTlNDX0MgPSAyLAorCVRSQU5TQ19JTlZBTElECit9IFRyYW5zY29kZXI7CisKK3R5 cGVkZWYgZW51bSB7CisJUkVHX0hETUlCICAgICAgPSAweGUxMTQwLAorCVJFR19IRE1JQyAgICAg ID0gMHhlMTE1MCwKKwlSRUdfSERNSUQgICAgICA9IDB4ZTExNjAsCisJUkVHX0RJUF9DVExfQSAg PSAweGUwMjAwLAorCVJFR19ESVBfQ1RMX0IgID0gMHhlMTIwMCwKKwlSRUdfRElQX0NUTF9DICA9 IDB4ZTIyMDAsCisJUkVHX0RJUF9EQVRBX0EgPSAweGUwMjA4LAorCVJFR19ESVBfREFUQV9CID0g MHhlMTIwOCwKKwlSRUdfRElQX0RBVEFfQyA9IDB4ZTIyMDgsCit9IFJlZ2lzdGVyOworCit0eXBl ZGVmIGVudW0geworCURJUF9BVkkgICAgPSAwLAorCURJUF9WRU5ET1IgPSAxLAorCURJUF9HQU1V VCAgPSAyLAorCURJUF9TUEQgICAgPSAzLAorCURJUF9JTlZBTElELAorfSBEaXBUeXBlOworCit0 eXBlZGVmIGVudW0geworCURJUF9GUkVRX09OQ0UgICAgICAgICAgICAgID0gMCwKKwlESVBfRlJF UV9FVkVSWV9WU1lOQyAgICAgICA9IDEsCisJRElQX0ZSRVFfRVZFUllfT1RIRVJfVlNZTkMgPSAy LAorCURJUF9GUkVRX1JFU0VSVkVEICAgICAgICAgID0gMywKK30gRGlwRnJlcXVlbmN5OworCit0 eXBlZGVmIGVudW0geworCVNPVVJDRV9ERVZJQ0VfVU5LTk9XTiAgICAgICAgICAgPSAweDAwLAor CVNPVVJDRV9ERVZJQ0VfRElHSVRBTF9TVEIgICAgICAgPSAweDAxLAorCVNPVVJDRV9ERVZJQ0Vf RFZEX1BMQVlFUiAgICAgICAgPSAweDAyLAorCVNPVVJDRV9ERVZJQ0VfRF9WSFMgICAgICAgICAg ICAgPSAweDAzLAorCVNPVVJDRV9ERVZJQ0VfSEREX1ZJREVPUkVDT1JERVIgPSAweDA0LAorCVNP VVJDRV9ERVZJQ0VfRFZDICAgICAgICAgICAgICAgPSAweDA1LAorCVNPVVJDRV9ERVZJQ0VfRFND ICAgICAgICAgICAgICAgPSAweDA2LAorCVNPVVJDRV9ERVZJQ0VfVklERU9fQ0QgICAgICAgICAg PSAweDA3LAorCVNPVVJDRV9ERVZJQ0VfR0FNRSAgICAgICAgICAgICAgPSAweDA4LAorCVNPVVJD RV9ERVZJQ0VfUENfR0VORVJBTCAgICAgICAgPSAweDA5LAorCVNPVVJDRV9ERVZJQ0VfQkxVX1JB WV9ESVNLICAgICAgPSAweDBhLAorCVNPVVJDRV9ERVZJQ0VfU1VQRVJfQVVESU9fQ0QgICAgPSAw eDBiLAorCVNPVVJDRV9ERVZJQ0VfUkVTRVJWRUQgICAgICAgICAgPSAweDBjCit9IFNvdXJjZURl dmljZTsKKworI2RlZmluZSBIRE1JX1BPUlRfRU5BQkxFICAgICAgICAgKDEgPDwgMzEpCisjZGVm aW5lIEhETUlfUE9SVF9UUkFOU0NPREVSX0lCWCAoMSA8PCAzMCkKKyNkZWZpbmUgSERNSV9QT1JU X1RSQU5TQ09ERVJfQ1BUICgzIDw8IDI5KQorI2RlZmluZSBIRE1JX1BPUlRfRU5DT0RJTkcgICAg ICAgKDMgPDwgMTApCisjZGVmaW5lIEhETUlfUE9SVF9NT0RFICAgICAgICAgICAoMSA8PCA5KQor I2RlZmluZSBIRE1JX1BPUlRfQVVESU8gICAgICAgICAgKDEgPDwgNikKKyNkZWZpbmUgSERNSV9Q T1JUX0RFVEVDVEVEICAgICAgICgxIDw8IDIpCisKKyNkZWZpbmUgRElQX0NUTF9FTkFCTEUgICAg ICAgICAgICgxIDw8IDMxKQorI2RlZmluZSBESVBfQ1RMX0dDUF9FTkFCTEUgICAgICAgKDEgPDwg MjUpCisjZGVmaW5lIERJUF9DVExfU1BEX0VOQUJMRSAgICAgICAoMSA8PCAyNCkKKyNkZWZpbmUg RElQX0NUTF9HQU1VVF9FTkFCTEUgICAgICgxIDw8IDIzKQorI2RlZmluZSBESVBfQ1RMX1ZFTkRP Ul9FTkFCTEUgICAgKDEgPDwgMjIpCisjZGVmaW5lIERJUF9DVExfQVZJX0VOQUJMRSAgICAgICAo MSA8PCAyMSkKKyNkZWZpbmUgRElQX0NUTF9CVUZGRVJfSU5ERVggICAgICgzIDw8IDE5KQorI2Rl ZmluZSBESVBfQ1RMX0JVRkZFUl9BVkkgICAgICAgKDAgPDwgMTkpCisjZGVmaW5lIERJUF9DVExf QlVGRkVSX1ZFTkRPUiAgICAoMSA8PCAxOSkKKyNkZWZpbmUgRElQX0NUTF9CVUZGRVJfR0FNVVQg ICAgICgyIDw8IDE5KQorI2RlZmluZSBESVBfQ1RMX0JVRkZFUl9TUEQgICAgICAgKDMgPDwgMTkp CisjZGVmaW5lIERJUF9DVExfRlJFUVVFTkNZICAgICAgICAoMyA8PCAxNikKKyNkZWZpbmUgRElQ X0NUTF9GUkVRX09OQ0UgICAgICAgICgwIDw8IDE2KQorI2RlZmluZSBESVBfQ1RMX0ZSRVFfRVZF UlkgICAgICAgKDEgPDwgMTYpCisjZGVmaW5lIERJUF9DVExfRlJFUV9FVkVSWV9PVEhFUiAoMiA8 PCAxNikKKyNkZWZpbmUgRElQX0NUTF9CVUZGRVJfU0laRSAgICAgICgxNSA8PCA4KQorI2RlZmlu ZSBESVBfQ1RMX0FDQ0VTU19BRERSICAgICAgKDE1IDw8IDApCisKKyNkZWZpbmUgQVZJX0lORk9G UkFNRV9UWVBFICAgIDB4ODIKKyNkZWZpbmUgQVZJX0lORk9GUkFNRV9WRVJTSU9OIDB4MDEKKyNk ZWZpbmUgQVZJX0lORk9GUkFNRV9MRU5HVEggIDB4MGQKKyNkZWZpbmUgU1BEX0lORk9GUkFNRV9U WVBFICAgIDB4ODMKKyNkZWZpbmUgU1BEX0lORk9GUkFNRV9WRVJTSU9OIDB4MDEKKyNkZWZpbmUg U1BEX0lORk9GUkFNRV9MRU5HVEggIDB4MTkKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVpbnQ4X3Qg dHlwZTsKKwl1aW50OF90IHZlcnNpb247CisJdWludDhfdCBsZW5ndGg7CisJdWludDhfdCBlY2M7 Cit9IERpcEluZm9GcmFtZUhlYWRlcjsKKwordHlwZWRlZiB1bmlvbiB7CisJc3RydWN0IHsKKwkJ RGlwSW5mb0ZyYW1lSGVhZGVyIGhlYWRlcjsKKwkJdWludDhfdCBjaGVja3N1bTsKKworCQl1aW50 OF90IFMgICAgIDoyOworCQl1aW50OF90IEIgICAgIDoyOworCQl1aW50OF90IEEgICAgIDoxOwor CQl1aW50OF90IFkgICAgIDoyOworCQl1aW50OF90IFJzdmQwIDoxOworCisJCXVpbnQ4X3QgUiA6 NDsKKwkJdWludDhfdCBNIDoyOworCQl1aW50OF90IEMgOjI7CisKKwkJdWludDhfdCBTQyAgOjI7 CisJCXVpbnQ4X3QgUSAgIDoyOworCQl1aW50OF90IEVDICA6MzsKKwkJdWludDhfdCBJVEMgOjE7 CisKKwkJdWludDhfdCBWSUMgICA6NzsKKwkJdWludDhfdCBSc3ZkMSA6MTsKKwkJCisJCXVpbnQ4 X3QgUFIgICAgOjQ7CisJCXVpbnQ4X3QgUnN2ZDIgOjQ7CisKKwkJdWludDE2X3QgdG9wOworCQl1 aW50MTZfdCBib3R0b207CisJCXVpbnQxNl90IGxlZnQ7CisJCXVpbnQxNl90IHJpZ2h0OworCisJ CXVpbnQxNl90IFJzdmQzOworCQl1aW50MzJfdCBSc3ZkNFszXTsKKwl9IGF2aTsKKwlzdHJ1Y3Qg eworCQlEaXBJbmZvRnJhbWVIZWFkZXIgaGVhZGVyOworCQl1aW50OF90IGNoZWNrc3VtOworCQl1 aW50OF90IHZlbmRvcls4XTsKKwkJdWludDhfdCBkZXNjcmlwdGlvblsxNl07CisJCXVpbnQ4X3Qg c291cmNlOworCX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgc3BkOworCXN0cnVjdCB7CisJCURp cEluZm9GcmFtZUhlYWRlciBoZWFkZXI7CisJCXVpbnQ4X3QgYm9keVsyN107CisJfSBnZW5lcmlj OworCXVpbnQ4X3QgZGF0YThbMTI4XTsKKwl1aW50MzJfdCBkYXRhMzJbMTZdOworfSBEaXBJbmZv RnJhbWU7CisKK1JlZ2lzdGVyIGhkbWlfcG9ydHNbXSA9IHsKKwlSRUdfSERNSUIsCisJUkVHX0hE TUlDLAorCVJFR19IRE1JRAorfTsKK1JlZ2lzdGVyIGRpcF9jdGxfcmVnc1tdID0geworCVJFR19E SVBfQ1RMX0EsCisJUkVHX0RJUF9DVExfQiwKKwlSRUdfRElQX0NUTF9DCit9OworUmVnaXN0ZXIg ZGlwX2RhdGFfcmVnc1tdID0geworCVJFR19ESVBfREFUQV9BLAorCVJFR19ESVBfREFUQV9CLAor CVJFR19ESVBfREFUQV9DCit9OworY29uc3QgY2hhciAqaGRtaV9wb3J0X25hbWVzW10gPSB7CisJ IkhETUlCIiwKKwkiSERNSUMiLAorCSJIRE1JRCIKK307Citjb25zdCBjaGFyICp0cmFuc2NvZGVy X25hbWVzW10gPSB7CisJIkEiLAorCSJCIiwKKwkiQyIKK307Citjb25zdCBjaGFyICpkaXBfZnJl cXVlbmN5X25hbWVzW10gPSB7CisJIm9uY2UiLAorCSJldmVyeSB2c3luYyIsCisJImV2ZXJ5IG90 aGVyIHZzeW5jIiwKKwkicmVzZXJ2ZWQgKGludmFsaWQpIgorfTsKKworc3RhdGljIGNvbnN0IGNo YXIgKnNwZF9zb3VyY2VfdG9fc3RyaW5nKFNvdXJjZURldmljZSBzb3VyY2UpCit7CisJc3dpdGNo IChzb3VyY2UpIHsKKwljYXNlIFNPVVJDRV9ERVZJQ0VfVU5LTk9XTjoKKwkJcmV0dXJuICJ1bmtu b3duIjsKKwljYXNlIFNPVVJDRV9ERVZJQ0VfRElHSVRBTF9TVEI6CisJCXJldHVybiAiZGlnaXRh bCBzdGIiOworCWNhc2UgU09VUkNFX0RFVklDRV9EVkRfUExBWUVSOgorCQlyZXR1cm4gImR2ZCBw bGF5ZXIiOworCWNhc2UgU09VUkNFX0RFVklDRV9EX1ZIUzoKKwkJcmV0dXJuICJkIHZocyI7CisJ Y2FzZSBTT1VSQ0VfREVWSUNFX0hERF9WSURFT1JFQ09SREVSOgorCQlyZXR1cm4gImhkZCB2aWRl b3JlY29yZGVyIjsKKwljYXNlIFNPVVJDRV9ERVZJQ0VfRFZDOgorCQlyZXR1cm4gImR2YyI7CisJ Y2FzZSBTT1VSQ0VfREVWSUNFX0RTQzoKKwkJcmV0dXJuICJkc2MiOworCWNhc2UgU09VUkNFX0RF VklDRV9WSURFT19DRDoKKwkJcmV0dXJuICJ2aWRlbyBjZCI7CisJY2FzZSBTT1VSQ0VfREVWSUNF X0dBTUU6CisJCXJldHVybiAiZ2FtZSI7CisJY2FzZSBTT1VSQ0VfREVWSUNFX1BDX0dFTkVSQUw6 CisJCXJldHVybiAicGMgZ2VuZXJhbCI7CisJY2FzZSBTT1VSQ0VfREVWSUNFX0JMVV9SQVlfRElT SzoKKwkJcmV0dXJuICJibHUtcmF5IGRpc2siOworCWNhc2UgU09VUkNFX0RFVklDRV9TVVBFUl9B VURJT19DRDoKKwkJcmV0dXJuICJzdXBlciBhdWRpbyBjZCI7CisJZGVmYXVsdDoKKwkJcmV0dXJu ICJyZXNlcnZlZCI7CisJfQorfQorCitzdGF0aWMgdm9pZCBsb2FkX2luZm9mcmFtZShUcmFuc2Nv ZGVyIHRyYW5zY29kZXIsIERpcEluZm9GcmFtZSAqZnJhbWUsCisJCQkgICBEaXBUeXBlIHR5cGUp Cit7CisJUmVnaXN0ZXIgY3RsX3JlZyA9IGRpcF9jdGxfcmVnc1t0cmFuc2NvZGVyXTsKKwlSZWdp c3RlciBkYXRhX3JlZyA9IGRpcF9kYXRhX3JlZ3NbdHJhbnNjb2Rlcl07CisJdWludDMyX3QgY3Rs X3ZhbDsKKwl1aW50MzJfdCBpOworCisJY3RsX3ZhbCA9IElOUkVHKGN0bF9yZWcpOworCisJY3Rs X3ZhbCAmPSB+RElQX0NUTF9CVUZGRVJfSU5ERVg7CisJY3RsX3ZhbCB8PSB0eXBlIDw8IDE5Owor CU9VVFJFRyhjdGxfcmVnLCBjdGxfdmFsKTsKKwljdGxfdmFsID0gSU5SRUcoY3RsX3JlZyk7CisK KwljdGxfdmFsICY9IH5ESVBfQ1RMX0FDQ0VTU19BRERSOworCU9VVFJFRyhjdGxfcmVnLCBjdGxf dmFsKTsKKworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCWN0bF92YWwgPSBJTlJFRyhj dGxfcmVnKTsKKwkJYXNzZXJ0KChjdGxfdmFsICYgRElQX0NUTF9BQ0NFU1NfQUREUikgPT0gaSk7 CisJCWZyYW1lLT5kYXRhMzJbaV0gPSBJTlJFRyhkYXRhX3JlZyk7CisJfQorfQorCitzdGF0aWMg aW50IGluZm9mcmFtZV92YWxpZF9jaGVja3N1bShEaXBJbmZvRnJhbWUgKmZyYW1lKQoreworCWlu dCBpOworCWludCBsZW5ndGggPSBmcmFtZS0+Z2VuZXJpYy5oZWFkZXIubGVuZ3RoOworCXVpbnQ4 X3QgY3N1bTsKKworCWNzdW0gPSBmcmFtZS0+Z2VuZXJpYy5oZWFkZXIudHlwZSArIGZyYW1lLT5n ZW5lcmljLmhlYWRlci52ZXJzaW9uICsKKwkgICAgICAgZnJhbWUtPmdlbmVyaWMuaGVhZGVyLmxl bmd0aDsgLyogbm8gZWNjICovCisJZm9yIChpID0gMDsgaSA8IGxlbmd0aCArIDE7IGkrKykKKwkJ Y3N1bSArPSBmcmFtZS0+Z2VuZXJpYy5ib2R5W2ldOworCisJcmV0dXJuIChjc3VtID09IDApOwor fQorCitzdGF0aWMgdm9pZCBpbmZvZnJhbWVfZml4X2NoZWNrc3VtKERpcEluZm9GcmFtZSAqZnJh bWUpCit7CisJaW50IGk7CisJaW50IGxlbmd0aCA9IGZyYW1lLT5nZW5lcmljLmhlYWRlci5sZW5n dGg7CisJdWludDhfdCBjc3VtOworCisJY3N1bSA9IGZyYW1lLT5nZW5lcmljLmhlYWRlci50eXBl ICsgZnJhbWUtPmdlbmVyaWMuaGVhZGVyLnZlcnNpb24gKworCSAgICAgICBmcmFtZS0+Z2VuZXJp Yy5oZWFkZXIubGVuZ3RoOyAvKiBubyBlY2MgKi8KKwkvKiBMZW5ndGggZG9lcyBub3QgaW5jbHVk ZSB0aGUgaGVhZGVyIGZpZWxkIG5vciB0aGUgY2hlY2tzdW0gKi8KKwlmb3IgKGkgPSAxOyBpIDwg bGVuZ3RoICsgMTsgaSsrKQorCQljc3VtICs9IGZyYW1lLT5nZW5lcmljLmJvZHlbaV07CisJZnJh bWUtPmdlbmVyaWMuYm9keVswXSA9IDB4MTAwIC0gY3N1bTsKK30KKworc3RhdGljIHZvaWQgZHVt cF9wb3J0X2luZm8oaW50IGhkbWlfcG9ydF9pbmRleCkKK3sKKwlSZWdpc3RlciBwb3J0ID0gaGRt aV9wb3J0c1toZG1pX3BvcnRfaW5kZXhdOworCXVpbnQzMl90IHZhbCA9IElOUkVHKHBvcnQpOwor CVRyYW5zY29kZXIgdHJhbnNjb2RlcjsKKworCXByaW50ZigiXG5Qb3J0ICVzOlxuIiwgaGRtaV9w b3J0X25hbWVzW2hkbWlfcG9ydF9pbmRleF0pOworCXByaW50ZigiLSAlc2RldGVjdGVkXG4iLCB2 YWwgJiBIRE1JX1BPUlRfREVURUNURUQgPyAiIiA6ICJub3QgICIpOworCXByaW50ZigiLSAlc1xu IiwgdmFsICYgSERNSV9QT1JUX0VOQUJMRSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOworCisJ aWYgKCEodmFsICYgSERNSV9QT1JUX0VOQUJMRSkpCisJCXJldHVybjsKKworCWlmIChwY2ggPj0g UENIX0NQVCkKKwkJdHJhbnNjb2RlciA9ICh2YWwgJiBIRE1JX1BPUlRfVFJBTlNDT0RFUl9DUFQp ID4+IDI5OworCWVsc2UKKwkJdHJhbnNjb2RlciA9ICh2YWwgJiBIRE1JX1BPUlRfVFJBTlNDT0RF Ul9DUFQpID4+IDMwOworCXByaW50ZigiLSB0cmFuc2NvZGVyOiAlc1xuIiwgdHJhbnNjb2Rlcl9u YW1lc1t0cmFuc2NvZGVyXSk7CisKKwlzd2l0Y2ggKCh2YWwgJiBIRE1JX1BPUlRfRU5DT0RJTkcp ID4+IDEwKSB7CisJY2FzZSAwOgorCQlwcmludGYoIi0gbW9kZTogU0RWT1xuIik7CisJCWJyZWFr OworCWNhc2UgMjoKKwkJcHJpbnRmKCItIG1vZGU6IFRNRFNcbiIpOworCQlicmVhazsKKwlkZWZh dWx0OgorCQlwcmludGYoIi0gbW9kZTogSU5WQUxJRCFcbiIpOworCX0KKworCXByaW50ZigiLSBt b2RlOiAlc1xuIiwgdmFsICYgSERNSV9QT1JUX01PREUgPyAiSERNSSIgOiAiRFZJIik7CisJcHJp bnRmKCItIGF1ZGlvOiAlc1xuIiwgdmFsICYgSERNSV9QT1JUX0FVRElPID8gImVuYWJsZWQiIDog ImRpc2FibGVkIik7Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBfcmF3X2luZm9mcmFtZShEaXBJbmZv RnJhbWUgKmZyYW1lKQoreworCXVuc2lnbmVkIGludCBpOworCXByaW50ZigiLSByYXc6Iik7CisJ Zm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKwkJaWYgKGkgJSA0ID09IDApCisJCQlwcmludGYo IlxuICIpOworCQlwcmludGYoIiAlMDh4IiwgZnJhbWUtPmRhdGEzMltpXSk7CisJfQorCXByaW50 ZigiXG4iKTsKK30KKworc3RhdGljIHZvaWQgZHVtcF9hdmlfaW5mbyhUcmFuc2NvZGVyIHRyYW5z Y29kZXIpCit7CisJUmVnaXN0ZXIgcmVnID0gZGlwX2N0bF9yZWdzW3RyYW5zY29kZXJdOworCXVp bnQzMl90IHZhbCA9IElOUkVHKHJlZyk7CisJRGlwRnJlcXVlbmN5IGZyZXE7CisJRGlwSW5mb0Zy YW1lIGZyYW1lOworCisJbG9hZF9pbmZvZnJhbWUodHJhbnNjb2RlciwgJmZyYW1lLCBESVBfQVZJ KTsKKwl2YWwgPSBJTlJFRyhyZWcpOworCisJcHJpbnRmKCJBVkkgSW5mb0ZyYW1lOlxuIik7CisK KwlmcmVxID0gKHZhbCAmIERJUF9DVExfRlJFUVVFTkNZKSA+PiAxNjsKKwlwcmludGYoIi0gZnJl cXVlbmN5OiAlc1xuIiwgZGlwX2ZyZXF1ZW5jeV9uYW1lc1tmcmVxXSk7CisKKwlkdW1wX3Jhd19p bmZvZnJhbWUoJmZyYW1lKTsKKworCXByaW50ZigiLSB0eXBlOiAleCwgdmVyc2lvbjogJXgsIGxl bmd0aDogJXgsIGVjYzogJXgsIGNoZWNrc3VtOiAleFxuIiwKKwkgICAgICAgZnJhbWUuYXZpLmhl YWRlci50eXBlLCBmcmFtZS5hdmkuaGVhZGVyLnZlcnNpb24sCisJICAgICAgIGZyYW1lLmF2aS5o ZWFkZXIubGVuZ3RoLCBmcmFtZS5hdmkuaGVhZGVyLmVjYywKKwkgICAgICAgZnJhbWUuYXZpLmNo ZWNrc3VtKTsKKwlwcmludGYoIi0gUzogJXgsIEI6ICV4LCBBOiAleCwgWTogJXgsIFJzdmQwOiAl eFxuIiwKKwkgICAgICAgZnJhbWUuYXZpLlMsIGZyYW1lLmF2aS5CLCBmcmFtZS5hdmkuQSwgZnJh bWUuYXZpLlksCisJICAgICAgIGZyYW1lLmF2aS5Sc3ZkMCk7CisJcHJpbnRmKCItIFI6ICV4LCBN OiAleCwgQzogJXhcbiIsCisJICAgICAgIGZyYW1lLmF2aS5SLCBmcmFtZS5hdmkuTSwgZnJhbWUu YXZpLkMpOworCXByaW50ZigiLSBTQzogJXgsIFE6ICV4LCBFQzogJXgsIElUQzogJXhcbiIsCisJ ICAgICAgIGZyYW1lLmF2aS5TQywgZnJhbWUuYXZpLlEsIGZyYW1lLmF2aS5FQywgZnJhbWUuYXZp LklUQyk7CisJcHJpbnRmKCItIFZJQzogJXgsIFJzdmQxOiAleFxuIiwgZnJhbWUuYXZpLlZJQywg ZnJhbWUuYXZpLlJzdmQxKTsKKwlwcmludGYoIi0gUFI6ICV4LCBSc3ZkMjogJXhcbiIsIGZyYW1l LmF2aS5QUiwgZnJhbWUuYXZpLlJzdmQyKTsKKwlwcmludGYoIi0gdG9wOiAleCwgYm90dG9tOiAl eCwgbGVmdDogJXgsIHJpZ2h0OiAleFxuIiwKKwkgICAgICAgZnJhbWUuYXZpLnRvcCwgZnJhbWUu YXZpLmJvdHRvbSwgZnJhbWUuYXZpLmxlZnQsCisJICAgICAgIGZyYW1lLmF2aS5yaWdodCk7CisJ cHJpbnRmKCItIFJzdmQzOiAleCwgUnN2ZDRbMF06ICV4LCBSc3ZkNFsxXTogJXgsIFJzdmQ0WzJd OiAleFxuIiwKKwkgICAgICAgZnJhbWUuYXZpLlJzdmQzLCBmcmFtZS5hdmkuUnN2ZDRbMF0sIGZy YW1lLmF2aS5Sc3ZkNFsxXSwKKwkgICAgICAgZnJhbWUuYXZpLlJzdmQ0WzJdKTsKKworCWlmICgh aW5mb2ZyYW1lX3ZhbGlkX2NoZWNrc3VtKCZmcmFtZSkpCisJCXByaW50ZigiSW52YWxpZCBJbmZv RnJhbWUgY2hlY2tzdW0hXG4iKTsKK30KKworI2lmIDAKK3N0YXRpYyB2b2lkIGR1bXBfdmVuZG9y X2luZm8oVHJhbnNjb2RlciB0cmFuc2NvZGVyKQoreworCXByaW50ZigiTm90IGltcGxlbWVudGVk IHlldCFcbiIpOworfQorCitzdGF0aWMgdm9pZCBkdW1wX2dhbXV0X2luZm8oVHJhbnNjb2RlciB0 cmFuc2NvZGVyKQoreworCXByaW50ZigiTm90IGltcGxlbWVudGVkIHlldCFcbiIpOworfQorI2Vu ZGlmCisKK3N0YXRpYyB2b2lkIGR1bXBfc3BkX2luZm8oVHJhbnNjb2RlciB0cmFuc2NvZGVyKQor eworCVJlZ2lzdGVyIHJlZyA9IGRpcF9jdGxfcmVnc1t0cmFuc2NvZGVyXTsKKwl1aW50MzJfdCB2 YWwgPSBJTlJFRyhyZWcpOworCURpcEZyZXF1ZW5jeSBmcmVxOworCURpcEluZm9GcmFtZSBmcmFt ZTsKKwljaGFyIHZlbmRvcls5XTsKKwljaGFyIGRlc2NyaXB0aW9uWzE3XTsKKworCWxvYWRfaW5m b2ZyYW1lKHRyYW5zY29kZXIsICZmcmFtZSwgRElQX1NQRCk7CisJdmFsID0gSU5SRUcocmVnKTsK KworCXByaW50ZigiU1BEIEluZm9GcmFtZTpcbiIpOworCisJZnJlcSA9ICh2YWwgJiBESVBfQ1RM X0ZSRVFVRU5DWSkgPj4gMTY7CisJcHJpbnRmKCItIGZyZXF1ZW5jeTogJXNcbiIsIGRpcF9mcmVx dWVuY3lfbmFtZXNbZnJlcV0pOworCisJZHVtcF9yYXdfaW5mb2ZyYW1lKCZmcmFtZSk7CisKKwlw cmludGYoIi0gdHlwZTogJXgsIHZlcnNpb246ICV4LCBsZW5ndGg6ICV4LCBlY2M6ICV4LCBjaGVj a3N1bTogJXhcbiIsCisJICAgICAgIGZyYW1lLnNwZC5oZWFkZXIudHlwZSwgZnJhbWUuc3BkLmhl YWRlci52ZXJzaW9uLAorCSAgICAgICBmcmFtZS5zcGQuaGVhZGVyLmxlbmd0aCwgZnJhbWUuc3Bk LmhlYWRlci5lY2MsCisJICAgICAgIGZyYW1lLnNwZC5jaGVja3N1bSk7CisKKwltZW1jcHkodmVu ZG9yLCBmcmFtZS5zcGQudmVuZG9yLCA4KTsKKwl2ZW5kb3JbOF0gPSAnXDAnOworCW1lbWNweShk ZXNjcmlwdGlvbiwgZnJhbWUuc3BkLmRlc2NyaXB0aW9uLCAxNik7CisJZGVzY3JpcHRpb25bMTZd ID0gJ1wwJzsKKworCXByaW50ZigiLSB2ZW5kb3I6ICVzXG4iLCB2ZW5kb3IpOworCXByaW50Zigi LSBkZXNjcmlwdGlvbjogJXNcbiIsIGRlc2NyaXB0aW9uKTsKKwlwcmludGYoIi0gc291cmNlOiAl c1xuIiwgc3BkX3NvdXJjZV90b19zdHJpbmcoZnJhbWUuc3BkLnNvdXJjZSkpOworCisJaWYgKCFp bmZvZnJhbWVfdmFsaWRfY2hlY2tzdW0oJmZyYW1lKSkKKwkJcHJpbnRmKCJJbnZhbGlkIEluZm9G cmFtZSBjaGVja3N1bSFcbiIpOworfQorCitzdGF0aWMgdm9pZCBkdW1wX3RyYW5zY29kZXJfaW5m byhUcmFuc2NvZGVyIHRyYW5zY29kZXIpCit7CisJUmVnaXN0ZXIgcmVnID0gZGlwX2N0bF9yZWdz W3RyYW5zY29kZXJdOworCXVpbnQzMl90IHZhbCA9IElOUkVHKHJlZyk7CisKKwlwcmludGYoIlxu VHJhbnNjb2RlciAlczpcbiIsIHRyYW5zY29kZXJfbmFtZXNbdHJhbnNjb2Rlcl0pOworCXByaW50 ZigiLSAlc1xuIiwgdmFsICYgRElQX0NUTF9FTkFCTEUgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQi KTsKKwlpZiAoISh2YWwgJiBESVBfQ1RMX0VOQUJMRSkpCisJCXJldHVybjsKKworCXByaW50Zigi LSBHQ1A6ICVzXG4iLCB2YWwgJiBESVBfQ1RMX0dDUF9FTkFCTEUgPworCSAgICAgICAiZW5hYmxl ZCIgOiAiZGlzYWJsZWQiKTsKKworCWlmICh2YWwgJiBESVBfQ1RMX0FWSV9FTkFCTEUpCisJCWR1 bXBfYXZpX2luZm8odHJhbnNjb2Rlcik7CisjaWYgMAorCWlmICh2YWwgJiBESVBfQ1RMX1ZFTkRP Ul9FTkFCTEUpCisJCWR1bXBfdmVuZG9yX2luZm8odHJhbnNjb2Rlcik7CisJaWYgKHZhbCAmIERJ UF9DVExfR0FNVVRfRU5BQkxFKQorCQlkdW1wX2dhbXV0X2luZm8odHJhbnNjb2Rlcik7CisjZW5k aWYKKwlpZiAodmFsICYgRElQX0NUTF9TUERfRU5BQkxFKQorCQlkdW1wX3NwZF9pbmZvKHRyYW5z Y29kZXIpOworfQorCitzdGF0aWMgdm9pZCBkdW1wX2FsbF9pbmZvKHZvaWQpCit7CisJdW5zaWdu ZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShoZG1pX3BvcnRzKTsgaSsr KQorCQlkdW1wX3BvcnRfaW5mbyhpKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkaXBf Y3RsX3JlZ3MpOyBpKyspCisJCWR1bXBfdHJhbnNjb2Rlcl9pbmZvKGkpOworfQorCitzdGF0aWMg VHJhbnNjb2RlciBzZWxlY3RfdHJhbnNjb2Rlcl9tZW51KHZvaWQpCit7CisJaW50IG9wdGlvbjsK KwlwcmludGYoIlNlbGVjdCB0cmFuc2NvZGVyOlxuIik7CisJcHJpbnRmKCIxIC0gQVxuIik7CisJ cHJpbnRmKCIyIC0gQlxuIik7CisJaWYgKHBjaCA+PSBQQ0hfQ1BUKQorCQlwcmludGYoIjMgLSBD XG4iKTsKKwlpZiAoc2NhbmYoIiVkIiwgJm9wdGlvbikgIT0gMSkgeworCQlwcmludGYoIkludmFs aWQgbnVtYmVyLlxuIik7CisJCXJldHVybiBUUkFOU0NfSU5WQUxJRDsKKwl9CisJc3dpdGNoIChv cHRpb24pIHsKKwljYXNlIDE6CisJCXJldHVybiBUUkFOU0NfQTsKKwljYXNlIDI6CisJCXJldHVy biBUUkFOU0NfQjsKKwljYXNlIDM6CisJCWlmIChwY2ggPj0gUENIX0NQVCkgeworCQkJcmV0dXJu IFRSQU5TQ19DOworCQl9IGVsc2UgeworCQkJcHJpbnRmKCJJbnZhbGlkIG9wdGlvbi5cbiIpOwor CQkJcmV0dXJuIFRSQU5TQ19JTlZBTElEOworCQl9CisJZGVmYXVsdDoKKwkJcHJpbnRmKCJJbnZh bGlkIG9wdGlvbi5cbiIpOworCQlyZXR1cm4gVFJBTlNDX0lOVkFMSUQ7CisJfQorfQorCitzdGF0 aWMgdm9pZCB3cml0ZV9pbmZvZnJhbWUoVHJhbnNjb2RlciB0cmFuc2NvZGVyLCBEaXBUeXBlIHR5 cGUsCisJCQkgICAgRGlwSW5mb0ZyYW1lICpmcmFtZSkKK3sKKwlSZWdpc3RlciBjdGxfcmVnID0g ZGlwX2N0bF9yZWdzW3RyYW5zY29kZXJdOworCVJlZ2lzdGVyIGRhdGFfcmVnID0gZGlwX2RhdGFf cmVnc1t0cmFuc2NvZGVyXTsKKwl1aW50MzJfdCBjdGxfdmFsOworCXVuc2lnbmVkIGludCBpOwor CisJY3RsX3ZhbCA9IElOUkVHKGN0bF9yZWcpOworCWN0bF92YWwgJj0gfkRJUF9DVExfQlVGRkVS X0lOREVYOworCWN0bF92YWwgfD0gKHR5cGUgPDwgMTkpOworCWN0bF92YWwgJj0gfkRJUF9DVExf QUNDRVNTX0FERFI7CisJT1VUUkVHKGN0bF9yZWcsIGN0bF92YWwpOworCisJZm9yIChpID0gMDsg aSA8IDg7IGkrKykgeworCQljdGxfdmFsID0gSU5SRUcoY3RsX3JlZyk7CisJCWFzc2VydCgoY3Rs X3ZhbCAmIERJUF9DVExfQUNDRVNTX0FERFIpID09IGkpOworCQlPVVRSRUcoZGF0YV9yZWcsIGZy YW1lLT5kYXRhMzJbaV0pOworCX0KK30KKworc3RhdGljIHZvaWQgZGlzYWJsZV9pbmZvZnJhbWUo VHJhbnNjb2RlciB0cmFuc2NvZGVyLCBEaXBUeXBlIHR5cGUpCit7CisJUmVnaXN0ZXIgcmVnID0g ZGlwX2N0bF9yZWdzW3RyYW5zY29kZXJdOworCXVpbnQzMl90IHZhbCA9IElOUkVHKHJlZyk7CisJ aWYgKHR5cGUgPT0gRElQX0FWSSkKKwkJdmFsICY9IH5ESVBfQ1RMX0VOQUJMRTsKKwl2YWwgJj0g figxIDw8ICgyMSArIHR5cGUpKTsKKwlPVVRSRUcocmVnLCB2YWwpOworfQorCitzdGF0aWMgdm9p ZCBlbmFibGVfaW5mb2ZyYW1lKFRyYW5zY29kZXIgdHJhbnNjb2RlciwgRGlwVHlwZSB0eXBlKQor eworCVJlZ2lzdGVyIHJlZyA9IGRpcF9jdGxfcmVnc1t0cmFuc2NvZGVyXTsKKwl1aW50MzJfdCB2 YWwgPSBJTlJFRyhyZWcpOworCWlmICh0eXBlID09IERJUF9BVkkpCisJCXZhbCB8PSBESVBfQ1RM X0VOQUJMRTsKKwl2YWwgfD0gKDEgPDwgKDIxICsgdHlwZSkpOworCU9VVFJFRyhyZWcsIHZhbCk7 Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfaW5mb2ZyYW1lX29wdGlvbl91KGNvbnN0IGNoYXIgKm5h bWUsIGNvbnN0IGNoYXIgKnMsCisJCQkJICAgIHVpbnQzMl90IG1pbiwgdWludDMyX3QgbWF4LAor CQkJCSAgICB1aW50MzJfdCAqdmFsdWUpCit7CisJaWYgKCFzdHJjbXAobmFtZSwgcykpIHsKKwkJ aWYgKHNjYW5mKCIleCIsIHZhbHVlKSAhPSAxKSB7CisJCQlwcmludGYoIkludmFsaWQgdmFsdWUu XG4iKTsKKwkJCXJldHVybiAwOworCQl9CisJCWlmICgqdmFsdWUgPCBtaW4gfHwgKnZhbHVlID4g bWF4KSB7CisJCQlwcmludGYoIlZhbHVlIG91dHNpZGUgYWxsb3dlZCByYW5nZS5cbiIpOworCQkJ cmV0dXJuIDA7CisJCX0KKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMg aW50IHBhcnNlX2luZm9mcmFtZV9vcHRpb25fcyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFy ICpzLAorCQkJCSAgICBpbnQgbWluX3NpemUsIGludCBtYXhfc2l6ZSwKKwkJCQkgICAgY2hhciAq dmFsdWUpCit7CisJaW50IHNpemU7CisJaWYgKCFzdHJjbXAobmFtZSwgcykpIHsKKwkJaWYgKHNj YW5mKCIlMzFzIiwgdmFsdWUpICE9IDEpIHsKKwkJCXByaW50ZigiSW52YWxpZCB2YWx1ZS5cbiIp OworCQkJcmV0dXJuIDA7CisJCX0KKwkJc2l6ZSA9IHN0cmxlbih2YWx1ZSk7CisJCWlmIChzaXpl IDwgbWluX3NpemUgfHwgc2l6ZSA+IG1heF9zaXplKSB7CisJCQlwcmludGYoIlN0cmluZyBlaXRo ZXIgdG9vIGJpZyBvciB0b28gc21hbGwuXG4iKTsKKwkJCXJldHVybiAwOworCQl9CisJCXJldHVy biAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY2hhbmdlX2F2aV9pbmZvZnJh bWUoVHJhbnNjb2RlciB0cmFuc2NvZGVyKQoreworCVJlZ2lzdGVyIHJlZyA9IGRpcF9jdGxfcmVn c1t0cmFuc2NvZGVyXTsKKwl1aW50MzJfdCB2YWwgPSBJTlJFRyhyZWcpOworCURpcEluZm9GcmFt ZSBmcmFtZTsKKwljaGFyIG9wdGlvblsxNl07CisJdWludDMyX3Qgb3B0aW9uX3ZhbDsKKworCWxv YWRfaW5mb2ZyYW1lKHRyYW5zY29kZXIsICZmcmFtZSwgRElQX0FWSSk7CisJdmFsID0gSU5SRUco cmVnKTsKKworCXdoaWxlICgxKSB7CisJCXByaW50ZigiQ3VycmVudCBpbmZvZnJhbWU6XG4iKTsK KwkJcHJpbnRmKCItIFM9JXggQj0leCBBPSV4IFk9JXggUj0leCBNPSV4IEM9JXggU0M9JXggUT0l eFxuIgorCQkgICAgICAgIi0gRUM9JXggSVRDPSV4IFZJQz0leCBQUj0leCB0b3A9JXggYm90dG9t PSV4IGxlZnQ9JXggIgorCQkgICAgICAgInJpZ2h0PSV4XG4iLCBmcmFtZS5hdmkuUywgZnJhbWUu YXZpLkIsIGZyYW1lLmF2aS5BLAorCQkgICAgICAgZnJhbWUuYXZpLlksIGZyYW1lLmF2aS5SLCBm cmFtZS5hdmkuTSwgZnJhbWUuYXZpLkMsCisJCSAgICAgICBmcmFtZS5hdmkuU0MsIGZyYW1lLmF2 aS5RLCBmcmFtZS5hdmkuRUMsIGZyYW1lLmF2aS5JVEMsCisJCSAgICAgICBmcmFtZS5hdmkuVklD LCBmcmFtZS5hdmkuUFIsIGZyYW1lLmF2aS50b3AsCisJCSAgICAgICBmcmFtZS5hdmkuYm90dG9t LCBmcmFtZS5hdmkubGVmdCwgZnJhbWUuYXZpLnJpZ2h0KTsKKwkJcHJpbnRmKCJUeXBlIHRoZSBu YW1lIG9mIHRoZSBmaWVsZCB5b3Ugd2FudCB0byBjaGFuZ2UsIGFcbiIKKwkJICAgICAgICJzcGFj ZSBhbmQgdGhlIHZhbHVlIGluICpoZXgqLlxuIgorCQkgICAgICAgIldoZW4geW91J3JlIGRvbmUs IHR5cGUgJ2RvbmUnLlxuIik7CisJCWlmIChzY2FuZigiJTE1cyIsIG9wdGlvbikgIT0gMSkgewor CQkJcHJpbnRmKCJJbnZhbGlkIG9wdGlvbi5cbiIpOworCQkJY29udGludWU7CisJCX0KKworCQlp ZiAoIXN0cmNtcChvcHRpb24sICJkb25lIikpCisJCQlicmVhazsKKwkJaWYgKHBhcnNlX2luZm9m cmFtZV9vcHRpb25fdSgiUyIsIG9wdGlvbiwgMCwgMiwgJm9wdGlvbl92YWwpKQorCQkJZnJhbWUu YXZpLlMgPSBvcHRpb25fdmFsOworCQlpZiAocGFyc2VfaW5mb2ZyYW1lX29wdGlvbl91KCJCIiwg b3B0aW9uLCAwLCAzLCAmb3B0aW9uX3ZhbCkpCisJCQlmcmFtZS5hdmkuQiA9IG9wdGlvbl92YWw7 CisJCWlmIChwYXJzZV9pbmZvZnJhbWVfb3B0aW9uX3UoIkEiLCBvcHRpb24sIDAsIDEsICZvcHRp b25fdmFsKSkKKwkJCWZyYW1lLmF2aS5BID0gb3B0aW9uX3ZhbDsKKwkJaWYgKHBhcnNlX2luZm9m cmFtZV9vcHRpb25fdSgiWSIsIG9wdGlvbiwgMCwgMiwgJm9wdGlvbl92YWwpKQorCQkJZnJhbWUu YXZpLlkgPSBvcHRpb25fdmFsOworCQlpZiAocGFyc2VfaW5mb2ZyYW1lX29wdGlvbl91KCJSIiwg b3B0aW9uLCAwLCAxNSwgJm9wdGlvbl92YWwpKQorCQkJZnJhbWUuYXZpLlIgPSBvcHRpb25fdmFs OworCQlpZiAocGFyc2VfaW5mb2ZyYW1lX29wdGlvbl91KCJNIiwgb3B0aW9uLCAwLCAyLCAmb3B0 aW9uX3ZhbCkpCisJCQlmcmFtZS5hdmkuTSA9IG9wdGlvbl92YWw7CisJCWlmIChwYXJzZV9pbmZv ZnJhbWVfb3B0aW9uX3UoIkMiLCBvcHRpb24sIDAsIDMsICZvcHRpb25fdmFsKSkKKwkJCWZyYW1l LmF2aS5DID0gb3B0aW9uX3ZhbDsKKwkJaWYgKHBhcnNlX2luZm9mcmFtZV9vcHRpb25fdSgiU0Mi LCBvcHRpb24sIDAsIDMsICZvcHRpb25fdmFsKSkKKwkJCWZyYW1lLmF2aS5TQyA9IG9wdGlvbl92 YWw7CisJCWlmIChwYXJzZV9pbmZvZnJhbWVfb3B0aW9uX3UoIlEiLCBvcHRpb24sIDAsIDIsICZv cHRpb25fdmFsKSkKKwkJCWZyYW1lLmF2aS5RID0gb3B0aW9uX3ZhbDsKKwkJaWYgKHBhcnNlX2lu Zm9mcmFtZV9vcHRpb25fdSgiRUMiLCBvcHRpb24sIDAsIDEsICZvcHRpb25fdmFsKSkKKwkJCWZy YW1lLmF2aS5FQyA9IG9wdGlvbl92YWw7CisJCWlmIChwYXJzZV9pbmZvZnJhbWVfb3B0aW9uX3Uo IklUQyIsIG9wdGlvbiwgMCwgMSwgJm9wdGlvbl92YWwpKQorCQkJZnJhbWUuYXZpLklUQyA9IG9w dGlvbl92YWw7CisJCWlmIChwYXJzZV9pbmZvZnJhbWVfb3B0aW9uX3UoIlZJQyIsIG9wdGlvbiwg MCwgMTI3LAorCQkJCQkgICAgICZvcHRpb25fdmFsKSkKKwkJCWZyYW1lLmF2aS5WSUMgPSBvcHRp b25fdmFsOworCQlpZiAocGFyc2VfaW5mb2ZyYW1lX29wdGlvbl91KCJQUiIsIG9wdGlvbiwgMCwg MTUsICZvcHRpb25fdmFsKSkKKwkJCWZyYW1lLmF2aS5QUiA9IG9wdGlvbl92YWw7CisJCWlmIChw YXJzZV9pbmZvZnJhbWVfb3B0aW9uX3UoInRvcCIsIG9wdGlvbiwgMCwgNjU1MzUsCisJCQkJCSAg ICAgJm9wdGlvbl92YWwpKQorCQkJZnJhbWUuYXZpLnRvcCA9IG9wdGlvbl92YWw7CisJCWlmIChw YXJzZV9pbmZvZnJhbWVfb3B0aW9uX3UoImJvdHRvbSIsIG9wdGlvbiwgMCwgNjU1MzUsCisJCQkJ CSAgICAgJm9wdGlvbl92YWwpKQorCQkJZnJhbWUuYXZpLmJvdHRvbSA9IG9wdGlvbl92YWw7CisJ CWlmIChwYXJzZV9pbmZvZnJhbWVfb3B0aW9uX3UoImxlZnQiLCBvcHRpb24sIDAsIDY1NTM1LAor CQkJCQkgICAgICZvcHRpb25fdmFsKSkKKwkJCWZyYW1lLmF2aS5sZWZ0ID0gb3B0aW9uX3ZhbDsK KwkJaWYgKHBhcnNlX2luZm9mcmFtZV9vcHRpb25fdSgicmlnaHQiLCBvcHRpb24sIDAsIDY1NTM1 LAorCQkJCQkgICAgICZvcHRpb25fdmFsKSkKKwkJCWZyYW1lLmF2aS5yaWdodCA9IG9wdGlvbl92 YWw7CisJfQorCisJdmFsICY9IH5ESVBfQ1RMX0ZSRVFVRU5DWTsKKwl2YWwgfD0gRElQX0NUTF9G UkVRX0VWRVJZOworCU9VVFJFRyhyZWcsIHZhbCk7CisKKwlmcmFtZS5hdmkuaGVhZGVyLnR5cGUg PSBBVklfSU5GT0ZSQU1FX1RZUEU7CisJZnJhbWUuYXZpLmhlYWRlci52ZXJzaW9uID0gQVZJX0lO Rk9GUkFNRV9WRVJTSU9OOworCWZyYW1lLmF2aS5oZWFkZXIubGVuZ3RoID0gQVZJX0lORk9GUkFN RV9MRU5HVEg7CisJZnJhbWUuYXZpLlJzdmQwID0gMDsKKwlmcmFtZS5hdmkuUnN2ZDEgPSAwOwor CWZyYW1lLmF2aS5Sc3ZkMiA9IDA7CisJZnJhbWUuYXZpLlJzdmQzID0gMDsKKwlmcmFtZS5hdmku UnN2ZDRbMF0gPSAwOworCWZyYW1lLmF2aS5Sc3ZkNFsxXSA9IDA7CisJZnJhbWUuYXZpLlJzdmQ0 WzJdID0gMDsKKworCWluZm9mcmFtZV9maXhfY2hlY2tzdW0oJmZyYW1lKTsKKworCWRpc2FibGVf aW5mb2ZyYW1lKHRyYW5zY29kZXIsIERJUF9BVkkpOworCXdyaXRlX2luZm9mcmFtZSh0cmFuc2Nv ZGVyLCBESVBfQVZJLCAmZnJhbWUpOworCWVuYWJsZV9pbmZvZnJhbWUodHJhbnNjb2RlciwgRElQ X0FWSSk7Cit9CisKK3N0YXRpYyB2b2lkIGNoYW5nZV9zcGRfaW5mb2ZyYW1lKFRyYW5zY29kZXIg dHJhbnNjb2RlcikKK3sKKwlSZWdpc3RlciByZWcgPSBkaXBfY3RsX3JlZ3NbdHJhbnNjb2Rlcl07 CisJdWludDMyX3QgdmFsID0gSU5SRUcocmVnKTsKKwlEaXBJbmZvRnJhbWUgZnJhbWU7CisJY2hh ciBvcHRpb25bMTZdOworCWNoYXIgb3B0aW9uX3ZhbF9zWzMyXTsKKwl1aW50MzJfdCBvcHRpb25f dmFsX2k7CisKKwlsb2FkX2luZm9mcmFtZSh0cmFuc2NvZGVyLCAmZnJhbWUsIERJUF9TUEQpOwor CXZhbCA9IElOUkVHKHJlZyk7CisKKwl3aGlsZSAoMSkgeworCQlwcmludGYoIkN1cnJlbnQgaW5m b2ZyYW1lOlxuIik7CisJCXByaW50ZigiLSB2ZW5kb3I9XCIlc1wiIGRlc2NyaXB0aW9uPVwiJXNc Iiwgc291cmNlPSVzXG4iLAorCQkgICAgICAgZnJhbWUuc3BkLnZlbmRvciwgZnJhbWUuc3BkLmRl c2NyaXB0aW9uLAorCQkgICAgICAgc3BkX3NvdXJjZV90b19zdHJpbmcoZnJhbWUuc3BkLnNvdXJj ZSkpOworCQlwcmludGYoIlR5cGUgdGhlIG5hbWUgb2YgdGhlIGZpZWxkIHlvdSB3YW50IHRvIGNo YW5nZSwgYVxuIgorCQkgICAgICAgInNwYWNlIGFuZCB0aGUgdmFsdWUgaW4gKmhleCouXG4iCisJ CSAgICAgICAiV2hlbiB5b3UncmUgZG9uZSwgdHlwZSAnZG9uZScuXG4iKTsKKwkJaWYgKHNjYW5m KCIlMTZzIiwgb3B0aW9uKSAhPSAxKSB7CisJCQlwcmludGYoIkludmFsaWQgb3B0aW9uLlxuIik7 CisJCQljb250aW51ZTsKKwkJfQorCQltZW1zZXQob3B0aW9uX3ZhbF9zLCAwLCAzMik7CisKKwkJ aWYgKCFzdHJjbXAob3B0aW9uLCAiZG9uZSIpKQorCQkJYnJlYWs7CisJCWlmIChwYXJzZV9pbmZv ZnJhbWVfb3B0aW9uX3MoInZlbmRvciIsIG9wdGlvbiwgMCwgOCwKKwkJCQkJICAgICBvcHRpb25f dmFsX3MpKQorCQkJbWVtY3B5KGZyYW1lLnNwZC52ZW5kb3IsIG9wdGlvbl92YWxfcywgOCk7CisJ CWlmIChwYXJzZV9pbmZvZnJhbWVfb3B0aW9uX3MoImRlc2NyaXB0aW9uIiwgb3B0aW9uLCAwLCAx NiwKKwkJCQkJICAgICBvcHRpb25fdmFsX3MpKQorCQkJbWVtY3B5KGZyYW1lLnNwZC5kZXNjcmlw dGlvbiwgb3B0aW9uX3ZhbF9zLCAxNik7CisJCWlmIChwYXJzZV9pbmZvZnJhbWVfb3B0aW9uX3Uo InNvdXJjZSIsIG9wdGlvbiwgMCwgMHgwYywKKwkJCQkJICAgICAmb3B0aW9uX3ZhbF9pKSkKKwkJ CWZyYW1lLnNwZC5zb3VyY2UgPSBvcHRpb25fdmFsX2k7CisJfQorCisJdmFsICY9IH5ESVBfQ1RM X0ZSRVFVRU5DWTsKKwl2YWwgfD0gRElQX0NUTF9GUkVRX0VWRVJZX09USEVSOworCU9VVFJFRyhy ZWcsIHZhbCk7CisKKwlmcmFtZS5zcGQuaGVhZGVyLnR5cGUgPSBTUERfSU5GT0ZSQU1FX1RZUEU7 CisJZnJhbWUuc3BkLmhlYWRlci52ZXJzaW9uID0gU1BEX0lORk9GUkFNRV9WRVJTSU9OOworCWZy YW1lLnNwZC5oZWFkZXIubGVuZ3RoID0gU1BEX0lORk9GUkFNRV9MRU5HVEg7CisKKwlpbmZvZnJh bWVfZml4X2NoZWNrc3VtKCZmcmFtZSk7CisKKwlkaXNhYmxlX2luZm9mcmFtZSh0cmFuc2NvZGVy LCBESVBfU1BEKTsKKwl3cml0ZV9pbmZvZnJhbWUodHJhbnNjb2RlciwgRElQX1NQRCwgJmZyYW1l KTsKKwllbmFibGVfaW5mb2ZyYW1lKHRyYW5zY29kZXIsIERJUF9TUEQpOworfQorCitzdGF0aWMg dm9pZCBjaGFuZ2VfaW5mb2ZyYW1lX2NoZWNrc3VtKFRyYW5zY29kZXIgdHJhbnNjb2RlciwgRGlw VHlwZSB0eXBlKQoreworCURpcEluZm9GcmFtZSBmcmFtZTsKKwl1aW50MzJfdCBzZWxlY3RlZF9j c3VtOworCisJbG9hZF9pbmZvZnJhbWUodHJhbnNjb2RlciwgJmZyYW1lLCB0eXBlKTsKKworCXBy aW50ZigiVHlwZSB0aGUgY2hlY2tzdW0gdmFsdWUgKGluIGhleCk6XG4iKTsKKwlpZiAoc2NhbmYo IiV4IiwgJnNlbGVjdGVkX2NzdW0pICE9IDEpIHsKKwkJcHJpbnRmKCJJbnZhbGlkIG51bWJlci5c biIpOworCQlyZXR1cm47CisJfQorCisJZnJhbWUuZ2VuZXJpYy5ib2R5WzBdID0gc2VsZWN0ZWRf Y3N1bTsKKworCWRpc2FibGVfaW5mb2ZyYW1lKHRyYW5zY29kZXIsIHR5cGUpOworCXdyaXRlX2lu Zm9mcmFtZSh0cmFuc2NvZGVyLCB0eXBlLCAmZnJhbWUpOworCWVuYWJsZV9pbmZvZnJhbWUodHJh bnNjb2RlciwgdHlwZSk7Cit9CisKK3N0YXRpYyB2b2lkIGNoYW5nZV9pbmZvZnJhbWVfZnJlcXVl bmN5KFRyYW5zY29kZXIgdHJhbnNjb2RlciwgRGlwVHlwZSB0eXBlLAorCQkJCSAgICAgICBEaXBG cmVxdWVuY3kgZnJlcXVlbmN5KQoreworCVJlZ2lzdGVyIHJlZyA9IGRpcF9jdGxfcmVnc1t0cmFu c2NvZGVyXTsKKwl1aW50MzJfdCB2YWwgPSBJTlJFRyhyZWcpOworCisJaWYgKHR5cGUgPT0gRElQ X0FWSSAmJiBmcmVxdWVuY3kgIT0gRElQX0ZSRVFfRVZFUllfVlNZTkMpIHsKKwkJcHJpbnRmKCJF cnJvcjogQVZJIGluZm9mcmFtZSBtdXN0IGJlIHNlbnQgZXZlcnkgVlN5bmMhXG4iKTsKKwkJZnJl cXVlbmN5ID0gRElQX0ZSRVFfRVZFUllfVlNZTkM7CisJfQorCisJdmFsICY9IH5ESVBfQ1RMX0ZS RVFVRU5DWTsKKwl2YWwgfD0gKGZyZXF1ZW5jeSA8PCAxNik7CisJT1VUUkVHKHJlZywgdmFsKTsK K30KKworc3RhdGljIHZvaWQgZGlzYWJsZV9kaXAoVHJhbnNjb2RlciB0cmFuc2NvZGVyKQorewor CVJlZ2lzdGVyIHJlZyA9IGRpcF9jdGxfcmVnc1t0cmFuc2NvZGVyXTsKKwl1aW50MzJfdCB2YWwg PSBJTlJFRyhyZWcpOworCXZhbCAmPSB+RElQX0NUTF9FTkFCTEU7CisJT1VUUkVHKHJlZywgdmFs KTsKK30KKworc3RhdGljIHZvaWQgZW5hYmxlX2RpcChUcmFuc2NvZGVyIHRyYW5zY29kZXIpCit7 CisJUmVnaXN0ZXIgcmVnID0gZGlwX2N0bF9yZWdzW3RyYW5zY29kZXJdOworCXVpbnQzMl90IHZh bCA9IElOUkVHKHJlZyk7CisJdmFsIHw9IERJUF9DVExfRU5BQkxFOworCU9VVFJFRyhyZWcsIHZh bCk7Cit9CisKK3N0YXRpYyB2b2lkIGRpc2FibGVfaGRtaV9wb3J0KFJlZ2lzdGVyIHJlZykKK3sK Kwl1aW50MzJfdCB2YWwgPSBJTlJFRyhyZWcpOworCXZhbCAmPSB+SERNSV9QT1JUX0VOQUJMRTsK KwlPVVRSRUcocmVnLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBlbmFibGVfaGRtaV9wb3J0KFJl Z2lzdGVyIHJlZykKK3sKKwl1aW50MzJfdCB2YWwgPSBJTlJFRyhyZWcpOworCXZhbCB8PSBIRE1J X1BPUlRfRU5BQkxFOworCU9VVFJFRyhyZWcsIHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgc2VsZWN0 X2ZyZXF1ZW5jeV9tZW51KERpcEZyZXF1ZW5jeSAqZnJlcXVlbmN5KQoreworCWludCBvcHRpb247 CisJcHJpbnRmKCJTZWxlY3QgZnJlcXVlbmN5OlxuIik7CisJcHJpbnRmKCIxIC0gT25jZVxuIik7 CisJcHJpbnRmKCIyIC0gRXZlcnkgVlN5bmNcbiIpOworCXByaW50ZigiMyAtIEV2ZXJ5IG90aGVy IFZTeW5jXG4iKTsKKwlpZiAoc2NhbmYoIiVkIiwgJm9wdGlvbikgIT0gMSkgeworCQlwcmludGYo IkludmFsaWQgbnVtYmVyLlxuIik7CisJCXJldHVybiAwOworCX0KKwkKKwlzd2l0Y2ggKG9wdGlv bikgeworCWNhc2UgMToKKwkJKmZyZXF1ZW5jeSA9IERJUF9GUkVRX09OQ0U7CisJCXJldHVybiAx OworCWNhc2UgMjoKKwkJKmZyZXF1ZW5jeSA9IERJUF9GUkVRX0VWRVJZX1ZTWU5DOworCQlyZXR1 cm4gMTsKKwljYXNlIDM6CisJCSpmcmVxdWVuY3kgPSBESVBfRlJFUV9FVkVSWV9PVEhFUl9WU1lO QzsKKwkJcmV0dXJuIDE7CisJZGVmYXVsdDoKKwkJcHJpbnRmKCJJbnZhbGlkIG9wdGlvbi5cbiIp OworCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNoYW5nZV9pbmZvZnJhbWVfbWVu dShUcmFuc2NvZGVyIHRyYW5zY29kZXIsIERpcFR5cGUgdHlwZSkKK3sKKwlpbnQgb3B0aW9uOwor CURpcEZyZXF1ZW5jeSBmcmVxdWVuY3k7CisKKwlwcmludGYoIlNlbGVjdCBvcHRpb246XG4iKTsK KwlwcmludGYoIjEgLSBDaGFuZ2UgaW5mb2ZyYW1lIGZpZWxkc1xuIik7CisJcHJpbnRmKCIyIC0g Q2hhbmdlIGluZm9mcmFtZSBjaGVja3N1bVxuIik7CisJcHJpbnRmKCIzIC0gQ2hhbmdlIGluZm9m cmFtZSBmcmVxdWVuY3lcbiIpOworCXByaW50ZigiNCAtIERpc2FibGUgaW5mb2ZyYW1lXG4iKTsK KwlwcmludGYoIjUgLSBFbmFibGUgaW5mb2ZyYW1lXG4iKTsKKwlpZiAoc2NhbmYoIiVkIiwgJm9w dGlvbikgIT0gMSkgeworCQlwcmludGYoIkludmFsaWQgbnVtYmVyLlxuIik7CisJCXJldHVybjsK Kwl9CisKKwlzd2l0Y2ggKG9wdGlvbikgeworCWNhc2UgMToKKwkJc3dpdGNoICh0eXBlKSB7CisJ CWNhc2UgRElQX0FWSToKKwkJCWNoYW5nZV9hdmlfaW5mb2ZyYW1lKHRyYW5zY29kZXIpOworCQkJ YnJlYWs7CisJCWNhc2UgRElQX1ZFTkRPUjoKKwkJCXByaW50ZigiTm90IGltcGxlbWVudGVkIHll dCFcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgRElQX0dBTVVUOgorCQkJcHJpbnRmKCJOb3QgaW1w bGVtZW50ZWQgeWV0IVxuIik7CisJCQlicmVhazsKKwkJY2FzZSBESVBfU1BEOgorCQkJY2hhbmdl X3NwZF9pbmZvZnJhbWUodHJhbnNjb2Rlcik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWFz c2VydCgwKTsKKwkJfQorCQlicmVhazsKKwljYXNlIDI6CisJCWNoYW5nZV9pbmZvZnJhbWVfY2hl Y2tzdW0odHJhbnNjb2RlciwgdHlwZSk7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJaWYgKHNlbGVj dF9mcmVxdWVuY3lfbWVudSgmZnJlcXVlbmN5KSkKKwkJCWNoYW5nZV9pbmZvZnJhbWVfZnJlcXVl bmN5KHRyYW5zY29kZXIsIHR5cGUsIGZyZXF1ZW5jeSk7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJ ZGlzYWJsZV9pbmZvZnJhbWUodHJhbnNjb2RlciwgdHlwZSk7CisJCWJyZWFrOworCWNhc2UgNToK KwkJZW5hYmxlX2luZm9mcmFtZSh0cmFuc2NvZGVyLCB0eXBlKTsKKwkJYnJlYWs7CisJZGVmYXVs dDoKKwkJcHJpbnRmKCJJbnZhbGlkIG9wdGlvbi5cbiIpOworCQlyZXR1cm47CisJfQorfQorCitz dGF0aWMgRGlwVHlwZSBzZWxlY3RfaW5mb2ZyYW1lX21lbnUodm9pZCkKK3sKKwlpbnQgb3B0aW9u OworCXByaW50ZigiU2VsZWN0IGluZm9mcmFtZTpcbiIpOworCXByaW50ZigiMSAtIEFWSVxuIik7 CisJcHJpbnRmKCIyIC0gVmVuZG9yXG4iKTsKKwlwcmludGYoIjMgLSBHYW11dFxuIik7CisJcHJp bnRmKCI0IC0gU1BEXG4iKTsKKwlpZiAoc2NhbmYoIiVkIiwgJm9wdGlvbikgIT0gMSkgeworCQlw cmludGYoIkludmFsaWQgbnVtYmVyLlxuIik7CisJCXJldHVybiBESVBfSU5WQUxJRDsKKwl9CisJ c3dpdGNoIChvcHRpb24pIHsKKwljYXNlIDE6CisJCXJldHVybiBESVBfQVZJOworCWNhc2UgMjoK KwkJcmV0dXJuIERJUF9WRU5ET1I7CisJY2FzZSAzOgorCQlyZXR1cm4gRElQX0dBTVVUOworCWNh c2UgNDoKKwkJcmV0dXJuIERJUF9TUEQ7CisJZGVmYXVsdDoKKwkJcmV0dXJuIERJUF9JTlZBTElE OworCX0KK30KKworc3RhdGljIFJlZ2lzdGVyIHNlbGVjdF9oZG1pX3BvcnRfbWVudSh2b2lkKQor eworCWludCBvcHRpb247CisJcHJpbnRmKCJTZWxlY3QgSERNSSBwb3J0OlxuIik7CisJcHJpbnRm KCIxIC0gSERNSUJcbiIpOworCXByaW50ZigiMiAtIEhETUlDXG4iKTsKKwlwcmludGYoIjMgLSBI RE1JRFxuIik7CisJaWYgKHNjYW5mKCIlZCIsICZvcHRpb24pICE9IDEpIHsKKwkJcHJpbnRmKCJJ bnZhbGlkIG51bWJlci5cbiIpOworCQlyZXR1cm4gMDsKKwl9CisJc3dpdGNoIChvcHRpb24pIHsK KwljYXNlIDE6CisJCXJldHVybiBSRUdfSERNSUI7CisJY2FzZSAyOgorCQlyZXR1cm4gUkVHX0hE TUlDOworCWNhc2UgMzoKKwkJcmV0dXJuIFJFR19IRE1JRDsKKwlkZWZhdWx0OgorCQlwcmludGYo IkludmFsaWQgb3B0aW9uLlxuIik7CisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIHZvaWQg bWFpbl9tZW51KHZvaWQpCit7CisJaW50IG9wdGlvbjsKKwlUcmFuc2NvZGVyIHRyYW5zY29kZXI7 CisJRGlwVHlwZSBpbmZvZnJhbWU7CisJUmVnaXN0ZXIgcG9ydDsKKworCXdoaWxlICgxKSB7CisJ CXByaW50ZigiXG5NYWluIG1lbnU6XG4iKTsKKwkJcHJpbnRmKCIxIC0gRHVtcCBjdXJyZW50IGlu Zm9mcmFtZSBpbmZvcm1hdGlvblxuIik7CisJCXByaW50ZigiMiAtIENoYW5nZSBpbmZvZnJhbWUg ZnJvbSBzZWxlY3RlZCB0cmFuc2NvZGVyXG4iKTsKKwkJcHJpbnRmKCIzIC0gRGlzYWJsZSBESVAg ZnJvbSBzZWxlY3RlZCB0cmFuc2NvZGVyXG4iKTsKKwkJcHJpbnRmKCI0IC0gRW5hYmxlIERJUCBm cm9tIHNlbGVjdGVkIHRyYW5zY29kZXJcbiIpOworCQlwcmludGYoIjUgLSBEaXNhYmxlIEhETUkg cG9ydFxuIik7CisJCXByaW50ZigiNiAtIEVuYWJsZSBIRE1JIHBvcnRcbiIpOworCQlwcmludGYo IjcgLSBRdWl0XG4iKTsKKwkJaWYgKHNjYW5mKCIlZCIsICZvcHRpb24pICE9IDEpIHsKKwkJCXBy aW50ZigiSW52YWxpZCBudW1iZXIuXG4iKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXN3aXRjaCAo b3B0aW9uKSB7CisJCWNhc2UgMToKKwkJCWR1bXBfYWxsX2luZm8oKTsKKwkJCWJyZWFrOworCQlj YXNlIDI6CisJCQl0cmFuc2NvZGVyID0gc2VsZWN0X3RyYW5zY29kZXJfbWVudSgpOworCQkJaWYg KHRyYW5zY29kZXIgPT0gVFJBTlNDX0lOVkFMSUQpCisJCQkJYnJlYWs7CisJCQlpbmZvZnJhbWUg PSBzZWxlY3RfaW5mb2ZyYW1lX21lbnUoKTsKKwkJCWlmIChpbmZvZnJhbWUgPT0gRElQX0lOVkFM SUQpCisJCQkJYnJlYWs7CisJCQljaGFuZ2VfaW5mb2ZyYW1lX21lbnUodHJhbnNjb2RlciwgaW5m b2ZyYW1lKTsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQl0cmFuc2NvZGVyID0gc2VsZWN0X3Ry YW5zY29kZXJfbWVudSgpOworCQkJaWYgKHRyYW5zY29kZXIgPT0gVFJBTlNDX0lOVkFMSUQpCisJ CQkJYnJlYWs7CisJCQlkaXNhYmxlX2RpcCh0cmFuc2NvZGVyKTsKKwkJCWJyZWFrOworCQljYXNl IDQ6CisJCQl0cmFuc2NvZGVyID0gc2VsZWN0X3RyYW5zY29kZXJfbWVudSgpOworCQkJaWYgKHRy YW5zY29kZXIgPT0gVFJBTlNDX0lOVkFMSUQpCisJCQkJYnJlYWs7CisJCQllbmFibGVfZGlwKHRy YW5zY29kZXIpOworCQkJYnJlYWs7CisJCWNhc2UgNToKKwkJCXBvcnQgPSBzZWxlY3RfaGRtaV9w b3J0X21lbnUoKTsKKwkJCWlmIChwb3J0KQorCQkJCWRpc2FibGVfaGRtaV9wb3J0KHBvcnQpOwor CQkJYnJlYWs7CisJCWNhc2UgNjoKKwkJCXBvcnQgPSBzZWxlY3RfaGRtaV9wb3J0X21lbnUoKTsK KwkJCWlmIChwb3J0KQorCQkJCWVuYWJsZV9oZG1pX3BvcnQocG9ydCk7CisJCQlicmVhazsKKwkJ Y2FzZSA3OgorCQkJcmV0dXJuOworCQlkZWZhdWx0OgorCQkJcHJpbnRmKCJJbnZhbGlkIG9wdGlv bi5cbiIpOworCQl9CisJfQorfQorCitpbnQgbWFpbih2b2lkKQoreworCWludGVsX2dldF9tbWlv KGludGVsX2dldF9wY2lfZGV2aWNlKCkpOworCWludGVsX2NoZWNrX3BjaCgpOworCisJaWYgKHBj aCA8IFBDSF9DUFQpIHsKKwkJcHJpbnRmKCJUaGlzIHByb2dyYW0gc3RpbGwgb25seSBzdXBwb3J0 cyBTTkIgb3IgbmV3ZXIuXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCisJcHJpbnRmKCJXQVJOSU5H OiBUaGlzIGlzIGp1c3QgYSBkZWJ1Z2dpbmcgdG9vbCEgRG9uJ3QgZXhwZWN0IGl0IHRvIHdvcmsi CisJICAgICAgICIgcGVyZmVjdGx5OiB0aGUgS2VybmVsIG1pZ2h0IHVuZG8gb3VyIGNoYW5nZXMu XG5cbiIpOworCXByaW50ZigiVGhlIGNvbW1hbmRzIHlvdSBzaG91bGQgaW5wdXQgYXJlIGp1c3Qg dGhlIG51bWJlcnMuXG4iKTsKKworCW1haW5fbWVudSgpOworCXJldHVybiAwOworfQotLSAKMS43 LjcuMwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50 ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK