From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jani Nikula Subject: =?utf-8?q?=5BRFC_PATCH=5D_drm/i915=3A_move_limits=2C_?= =?utf-8?q?pll_find_functions_to_a_new_file?= Date: Fri, 24 May 2013 17:19:34 +0300 Message-ID: <1369405174-17554-1-git-send-email-jani.nikula@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTP id 98B03E5D16 for ; Fri, 24 May 2013 07:19:26 -0700 (PDT) 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: jani.nikula@intel.com List-Id: intel-gfx@lists.freedesktop.org VGhpcyB3YXMgYSBxdWljayBwYXRjaCB0byBzZWUgaWYgaXQgd291bGQgYmUgZWFzeSB0byBleHRy YWN0IHRoZSBsaW1pdAphbmQgcGxsIHN0dWZmIGZyb20gaW50ZWxfZGlzcGxheS5jIHRvIGEgc2Vw YXJhdGUgZmlsZS4gVHVybnMgb3V0IGl0J3MKdHJpdmlhbCwgYW5kIHJlZHVjZXMgdGhlIHNpemUg b2Ygb3ZlcmJsb2F0ZWQgaW50ZWxfZGlzcGxheS5jIG5pY2VseToKCiBkcml2ZXJzL2dwdS9kcm0v aTkxNS9NYWtlZmlsZSAgICAgICAgfCAgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2Rpc3BsYXkuYyB8ICA2NDUgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCAgICAgfCAgICA3ICsKIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2xpbWl0cy5jICB8ICA2NDggKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCA2NzAgaW5zZXJ0aW9ucygrKSwgNjMxIGRlbGV0aW9u cygtKQoKT3BpbmlvbnMsIGJpa2VzaGVkcz8KClNpZ25lZC1vZmYtYnk6IEphbmkgTmlrdWxhIDxq YW5pLm5pa3VsYUBpbnRlbC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUg ICAgICAgIHwgICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgfCAg NjQ1ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfZHJ2LmggICAgIHwgICAgNyArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9s aW1pdHMuYyAgfCAgNjQ4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDQgZmls ZXMgY2hhbmdlZCwgNjcwIGluc2VydGlvbnMoKyksIDYzMSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9saW1pdHMuYwoKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv TWFrZWZpbGUKaW5kZXggNDAwMzRlYy4uYjlkNzQyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKQEAg LTIxLDYgKzIxLDcgQEAgaTkxNS15IDo9IGk5MTVfZHJ2Lm8gaTkxNV9kbWEubyBpOTE1X2lycS5v IFwKIAkgIGludGVsX2NydC5vIFwKIAkgIGludGVsX2x2ZHMubyBcCiAJICBpbnRlbF9iaW9zLm8g XAorCSAgaW50ZWxfbGltaXRzLm8gXAogCSAgaW50ZWxfZGRpLm8gXAogCSAgaW50ZWxfZHAubyBc CiAJICBpbnRlbF9oZG1pLm8gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCmluZGV4 IGQ2M2JiM2YuLjcyMWQ0NjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKQEAg LTQ1LDQwICs0NSw2IEBAIGJvb2wgaW50ZWxfcGlwZV9oYXNfdHlwZShzdHJ1Y3QgZHJtX2NydGMg KmNydGMsIGludCB0eXBlKTsKIHN0YXRpYyB2b2lkIGludGVsX2luY3JlYXNlX3BsbGNsb2NrKHN0 cnVjdCBkcm1fY3J0YyAqY3J0Yyk7CiBzdGF0aWMgdm9pZCBpbnRlbF9jcnRjX3VwZGF0ZV9jdXJz b3Ioc3RydWN0IGRybV9jcnRjICpjcnRjLCBib29sIG9uKTsKIAotdHlwZWRlZiBzdHJ1Y3Qgewot CWludAltaW4sIG1heDsKLX0gaW50ZWxfcmFuZ2VfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgewotCWlu dAlkb3RfbGltaXQ7Ci0JaW50CXAyX3Nsb3csIHAyX2Zhc3Q7Ci19IGludGVsX3AyX3Q7Ci0KLSNk ZWZpbmUgSU5URUxfUDJfTlVNCQkgICAgICAyCi10eXBlZGVmIHN0cnVjdCBpbnRlbF9saW1pdCBp bnRlbF9saW1pdF90Owotc3RydWN0IGludGVsX2xpbWl0IHsKLQlpbnRlbF9yYW5nZV90ICAgZG90 LCB2Y28sIG4sIG0sIG0xLCBtMiwgcCwgcDE7Ci0JaW50ZWxfcDJfdAkgICAgcDI7Ci0JLyoqCi0J ICogZmluZF9wbGwoKSAtIEZpbmQgdGhlIGJlc3QgdmFsdWVzIGZvciB0aGUgUExMCi0JICogQGxp bWl0OiBsaW1pdHMgZm9yIHRoZSBQTEwKLQkgKiBAY3J0YzogY3VycmVudCBDUlRDCi0JICogQHRh cmdldDogdGFyZ2V0IGZyZXF1ZW5jeSBpbiBrSHoKLQkgKiBAcmVmY2xrOiByZWZlcmVuY2UgY2xv Y2sgZnJlcXVlbmN5IGluIGtIegotCSAqIEBtYXRjaF9jbG9jazogaWYgcHJvdmlkZWQsIEBiZXN0 X2Nsb2NrIFAgZGl2aWRlciBtdXN0Ci0JICogICAgICAgICAgICAgICBtYXRjaCB0aGUgUCBkaXZp ZGVyIGZyb20gQG1hdGNoX2Nsb2NrCi0JICogICAgICAgICAgICAgICB1c2VkIGZvciBMVkRTIGRv d25jbG9ja2luZwotCSAqIEBiZXN0X2Nsb2NrOiBiZXN0IFBMTCB2YWx1ZXMgZm91bmQKLQkgKgot CSAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvbiBmYWlsdXJlLgotCSAqLwotCWJv b2wgKCpmaW5kX3BsbCkoY29uc3QgaW50ZWxfbGltaXRfdCAqbGltaXQsCi0JCQkgc3RydWN0IGRy bV9jcnRjICpjcnRjLAotCQkJIGludCB0YXJnZXQsIGludCByZWZjbGssCi0JCQkgaW50ZWxfY2xv Y2tfdCAqbWF0Y2hfY2xvY2ssCi0JCQkgaW50ZWxfY2xvY2tfdCAqYmVzdF9jbG9jayk7Ci19Owot CiAvKiBGREkgKi8KICNkZWZpbmUgSVJPTkxBS0VfRkRJX0ZSRVEJCTI3MDAwMDAgLyogaW4ga0h6 IGZvciBtb2RlLT5jbG9jayAqLwogCkBAIC05MiwyMCArNTgsNiBAQCBpbnRlbF9wY2hfcmF3Y2xr KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiAJcmV0dXJuIEk5MTVfUkVBRChQQ0hfUkFXQ0xLX0ZS RVEpICYgUkFXQ0xLX0ZSRVFfTUFTSzsKIH0KIAotc3RhdGljIGJvb2wKLWludGVsX2ZpbmRfYmVz dF9QTEwoY29uc3QgaW50ZWxfbGltaXRfdCAqbGltaXQsIHN0cnVjdCBkcm1fY3J0YyAqY3J0YywK LQkJICAgIGludCB0YXJnZXQsIGludCByZWZjbGssIGludGVsX2Nsb2NrX3QgKm1hdGNoX2Nsb2Nr LAotCQkgICAgaW50ZWxfY2xvY2tfdCAqYmVzdF9jbG9jayk7Ci1zdGF0aWMgYm9vbAotaW50ZWxf ZzR4X2ZpbmRfYmVzdF9QTEwoY29uc3QgaW50ZWxfbGltaXRfdCAqbGltaXQsIHN0cnVjdCBkcm1f Y3J0YyAqY3J0YywKLQkJCWludCB0YXJnZXQsIGludCByZWZjbGssIGludGVsX2Nsb2NrX3QgKm1h dGNoX2Nsb2NrLAotCQkJaW50ZWxfY2xvY2tfdCAqYmVzdF9jbG9jayk7Ci0KLXN0YXRpYyBib29s Ci1pbnRlbF92bHZfZmluZF9iZXN0X3BsbChjb25zdCBpbnRlbF9saW1pdF90ICpsaW1pdCwgc3Ry dWN0IGRybV9jcnRjICpjcnRjLAotCQkJaW50IHRhcmdldCwgaW50IHJlZmNsaywgaW50ZWxfY2xv Y2tfdCAqbWF0Y2hfY2xvY2ssCi0JCQlpbnRlbF9jbG9ja190ICpiZXN0X2Nsb2NrKTsKLQogc3Rh dGljIGlubGluZSB1MzIgLyogdW5pdHMgb2YgMTAwTUh6ICovCiBpbnRlbF9mZGlfbGlua19mcmVx KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CkBAIC0xMTYsMzUxICs2OCw2IEBAIGludGVsX2Zk aV9saW5rX2ZyZXEoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIAkJcmV0dXJuIDI3OwogfQogCi1z dGF0aWMgY29uc3QgaW50ZWxfbGltaXRfdCBpbnRlbF9saW1pdHNfaTh4eF9kdm8gPSB7Ci0JLmRv dCA9IHsgLm1pbiA9IDI1MDAwLCAubWF4ID0gMzUwMDAwIH0sCi0JLnZjbyA9IHsgLm1pbiA9IDkz MDAwMCwgLm1heCA9IDE0MDAwMDAgfSwKLQkubiA9IHsgLm1pbiA9IDMsIC5tYXggPSAxNiB9LAot CS5tID0geyAubWluID0gOTYsIC5tYXggPSAxNDAgfSwKLQkubTEgPSB7IC5taW4gPSAxOCwgLm1h eCA9IDI2IH0sCi0JLm0yID0geyAubWluID0gNiwgLm1heCA9IDE2IH0sCi0JLnAgPSB7IC5taW4g PSA0LCAubWF4ID0gMTI4IH0sCi0JLnAxID0geyAubWluID0gMiwgLm1heCA9IDMzIH0sCi0JLnAy ID0geyAuZG90X2xpbWl0ID0gMTY1MDAwLAotCQkucDJfc2xvdyA9IDQsIC5wMl9mYXN0ID0gMiB9 LAotCS5maW5kX3BsbCA9IGludGVsX2ZpbmRfYmVzdF9QTEwsCi19OwotCi1zdGF0aWMgY29uc3Qg aW50ZWxfbGltaXRfdCBpbnRlbF9saW1pdHNfaTh4eF9sdmRzID0gewotCS5kb3QgPSB7IC5taW4g PSAyNTAwMCwgLm1heCA9IDM1MDAwMCB9LAotCS52Y28gPSB7IC5taW4gPSA5MzAwMDAsIC5tYXgg PSAxNDAwMDAwIH0sCi0JLm4gPSB7IC5taW4gPSAzLCAubWF4ID0gMTYgfSwKLQkubSA9IHsgLm1p biA9IDk2LCAubWF4ID0gMTQwIH0sCi0JLm0xID0geyAubWluID0gMTgsIC5tYXggPSAyNiB9LAot CS5tMiA9IHsgLm1pbiA9IDYsIC5tYXggPSAxNiB9LAotCS5wID0geyAubWluID0gNCwgLm1heCA9 IDEyOCB9LAotCS5wMSA9IHsgLm1pbiA9IDEsIC5tYXggPSA2IH0sCi0JLnAyID0geyAuZG90X2xp bWl0ID0gMTY1MDAwLAotCQkucDJfc2xvdyA9IDE0LCAucDJfZmFzdCA9IDcgfSwKLQkuZmluZF9w bGwgPSBpbnRlbF9maW5kX2Jlc3RfUExMLAotfTsKLQotc3RhdGljIGNvbnN0IGludGVsX2xpbWl0 X3QgaW50ZWxfbGltaXRzX2k5eHhfc2R2byA9IHsKLQkuZG90ID0geyAubWluID0gMjAwMDAsIC5t YXggPSA0MDAwMDAgfSwKLQkudmNvID0geyAubWluID0gMTQwMDAwMCwgLm1heCA9IDI4MDAwMDAg fSwKLQkubiA9IHsgLm1pbiA9IDEsIC5tYXggPSA2IH0sCi0JLm0gPSB7IC5taW4gPSA3MCwgLm1h eCA9IDEyMCB9LAotCS5tMSA9IHsgLm1pbiA9IDgsIC5tYXggPSAxOCB9LAotCS5tMiA9IHsgLm1p biA9IDMsIC5tYXggPSA3IH0sCi0JLnAgPSB7IC5taW4gPSA1LCAubWF4ID0gODAgfSwKLQkucDEg PSB7IC5taW4gPSAxLCAubWF4ID0gOCB9LAotCS5wMiA9IHsgLmRvdF9saW1pdCA9IDIwMDAwMCwK LQkJLnAyX3Nsb3cgPSAxMCwgLnAyX2Zhc3QgPSA1IH0sCi0JLmZpbmRfcGxsID0gaW50ZWxfZmlu ZF9iZXN0X1BMTCwKLX07Ci0KLXN0YXRpYyBjb25zdCBpbnRlbF9saW1pdF90IGludGVsX2xpbWl0 c19pOXh4X2x2ZHMgPSB7Ci0JLmRvdCA9IHsgLm1pbiA9IDIwMDAwLCAubWF4ID0gNDAwMDAwIH0s Ci0JLnZjbyA9IHsgLm1pbiA9IDE0MDAwMDAsIC5tYXggPSAyODAwMDAwIH0sCi0JLm4gPSB7IC5t aW4gPSAxLCAubWF4ID0gNiB9LAotCS5tID0geyAubWluID0gNzAsIC5tYXggPSAxMjAgfSwKLQku bTEgPSB7IC5taW4gPSA4LCAubWF4ID0gMTggfSwKLQkubTIgPSB7IC5taW4gPSAzLCAubWF4ID0g NyB9LAotCS5wID0geyAubWluID0gNywgLm1heCA9IDk4IH0sCi0JLnAxID0geyAubWluID0gMSwg Lm1heCA9IDggfSwKLQkucDIgPSB7IC5kb3RfbGltaXQgPSAxMTIwMDAsCi0JCS5wMl9zbG93ID0g MTQsIC5wMl9mYXN0ID0gNyB9LAotCS5maW5kX3BsbCA9IGludGVsX2ZpbmRfYmVzdF9QTEwsCi19 OwotCi0KLXN0YXRpYyBjb25zdCBpbnRlbF9saW1pdF90IGludGVsX2xpbWl0c19nNHhfc2R2byA9 IHsKLQkuZG90ID0geyAubWluID0gMjUwMDAsIC5tYXggPSAyNzAwMDAgfSwKLQkudmNvID0geyAu bWluID0gMTc1MDAwMCwgLm1heCA9IDM1MDAwMDB9LAotCS5uID0geyAubWluID0gMSwgLm1heCA9 IDQgfSwKLQkubSA9IHsgLm1pbiA9IDEwNCwgLm1heCA9IDEzOCB9LAotCS5tMSA9IHsgLm1pbiA9 IDE3LCAubWF4ID0gMjMgfSwKLQkubTIgPSB7IC5taW4gPSA1LCAubWF4ID0gMTEgfSwKLQkucCA9 IHsgLm1pbiA9IDEwLCAubWF4ID0gMzAgfSwKLQkucDEgPSB7IC5taW4gPSAxLCAubWF4ID0gM30s Ci0JLnAyID0geyAuZG90X2xpbWl0ID0gMjcwMDAwLAotCQkucDJfc2xvdyA9IDEwLAotCQkucDJf ZmFzdCA9IDEwCi0JfSwKLQkuZmluZF9wbGwgPSBpbnRlbF9nNHhfZmluZF9iZXN0X1BMTCwKLX07 Ci0KLXN0YXRpYyBjb25zdCBpbnRlbF9saW1pdF90IGludGVsX2xpbWl0c19nNHhfaGRtaSA9IHsK LQkuZG90ID0geyAubWluID0gMjIwMDAsIC5tYXggPSA0MDAwMDAgfSwKLQkudmNvID0geyAubWlu ID0gMTc1MDAwMCwgLm1heCA9IDM1MDAwMDB9LAotCS5uID0geyAubWluID0gMSwgLm1heCA9IDQg fSwKLQkubSA9IHsgLm1pbiA9IDEwNCwgLm1heCA9IDEzOCB9LAotCS5tMSA9IHsgLm1pbiA9IDE2 LCAubWF4ID0gMjMgfSwKLQkubTIgPSB7IC5taW4gPSA1LCAubWF4ID0gMTEgfSwKLQkucCA9IHsg Lm1pbiA9IDUsIC5tYXggPSA4MCB9LAotCS5wMSA9IHsgLm1pbiA9IDEsIC5tYXggPSA4fSwKLQku cDIgPSB7IC5kb3RfbGltaXQgPSAxNjUwMDAsCi0JCS5wMl9zbG93ID0gMTAsIC5wMl9mYXN0ID0g NSB9LAotCS5maW5kX3BsbCA9IGludGVsX2c0eF9maW5kX2Jlc3RfUExMLAotfTsKLQotc3RhdGlj IGNvbnN0IGludGVsX2xpbWl0X3QgaW50ZWxfbGltaXRzX2c0eF9zaW5nbGVfY2hhbm5lbF9sdmRz ID0gewotCS5kb3QgPSB7IC5taW4gPSAyMDAwMCwgLm1heCA9IDExNTAwMCB9LAotCS52Y28gPSB7 IC5taW4gPSAxNzUwMDAwLCAubWF4ID0gMzUwMDAwMCB9LAotCS5uID0geyAubWluID0gMSwgLm1h eCA9IDMgfSwKLQkubSA9IHsgLm1pbiA9IDEwNCwgLm1heCA9IDEzOCB9LAotCS5tMSA9IHsgLm1p biA9IDE3LCAubWF4ID0gMjMgfSwKLQkubTIgPSB7IC5taW4gPSA1LCAubWF4ID0gMTEgfSwKLQku cCA9IHsgLm1pbiA9IDI4LCAubWF4ID0gMTEyIH0sCi0JLnAxID0geyAubWluID0gMiwgLm1heCA9 IDggfSwKLQkucDIgPSB7IC5kb3RfbGltaXQgPSAwLAotCQkucDJfc2xvdyA9IDE0LCAucDJfZmFz dCA9IDE0Ci0JfSwKLQkuZmluZF9wbGwgPSBpbnRlbF9nNHhfZmluZF9iZXN0X1BMTCwKLX07Ci0K LXN0YXRpYyBjb25zdCBpbnRlbF9saW1pdF90IGludGVsX2xpbWl0c19nNHhfZHVhbF9jaGFubmVs X2x2ZHMgPSB7Ci0JLmRvdCA9IHsgLm1pbiA9IDgwMDAwLCAubWF4ID0gMjI0MDAwIH0sCi0JLnZj byA9IHsgLm1pbiA9IDE3NTAwMDAsIC5tYXggPSAzNTAwMDAwIH0sCi0JLm4gPSB7IC5taW4gPSAx LCAubWF4ID0gMyB9LAotCS5tID0geyAubWluID0gMTA0LCAubWF4ID0gMTM4IH0sCi0JLm0xID0g eyAubWluID0gMTcsIC5tYXggPSAyMyB9LAotCS5tMiA9IHsgLm1pbiA9IDUsIC5tYXggPSAxMSB9 LAotCS5wID0geyAubWluID0gMTQsIC5tYXggPSA0MiB9LAotCS5wMSA9IHsgLm1pbiA9IDIsIC5t YXggPSA2IH0sCi0JLnAyID0geyAuZG90X2xpbWl0ID0gMCwKLQkJLnAyX3Nsb3cgPSA3LCAucDJf ZmFzdCA9IDcKLQl9LAotCS5maW5kX3BsbCA9IGludGVsX2c0eF9maW5kX2Jlc3RfUExMLAotfTsK LQotc3RhdGljIGNvbnN0IGludGVsX2xpbWl0X3QgaW50ZWxfbGltaXRzX3BpbmV2aWV3X3Nkdm8g PSB7Ci0JLmRvdCA9IHsgLm1pbiA9IDIwMDAwLCAubWF4ID0gNDAwMDAwfSwKLQkudmNvID0geyAu bWluID0gMTcwMDAwMCwgLm1heCA9IDM1MDAwMDAgfSwKLQkvKiBQaW5ldmlldydzIE5jb3VudGVy IGlzIGEgcmluZyBjb3VudGVyICovCi0JLm4gPSB7IC5taW4gPSAzLCAubWF4ID0gNiB9LAotCS5t ID0geyAubWluID0gMiwgLm1heCA9IDI1NiB9LAotCS8qIFBpbmV2aWV3IG9ubHkgaGFzIG9uZSBj b21iaW5lZCBtIGRpdmlkZXIsIHdoaWNoIHdlIHRyZWF0IGFzIG0yLiAqLwotCS5tMSA9IHsgLm1p biA9IDAsIC5tYXggPSAwIH0sCi0JLm0yID0geyAubWluID0gMCwgLm1heCA9IDI1NCB9LAotCS5w ID0geyAubWluID0gNSwgLm1heCA9IDgwIH0sCi0JLnAxID0geyAubWluID0gMSwgLm1heCA9IDgg fSwKLQkucDIgPSB7IC5kb3RfbGltaXQgPSAyMDAwMDAsCi0JCS5wMl9zbG93ID0gMTAsIC5wMl9m YXN0ID0gNSB9LAotCS5maW5kX3BsbCA9IGludGVsX2ZpbmRfYmVzdF9QTEwsCi19OwotCi1zdGF0 aWMgY29uc3QgaW50ZWxfbGltaXRfdCBpbnRlbF9saW1pdHNfcGluZXZpZXdfbHZkcyA9IHsKLQku ZG90ID0geyAubWluID0gMjAwMDAsIC5tYXggPSA0MDAwMDAgfSwKLQkudmNvID0geyAubWluID0g MTcwMDAwMCwgLm1heCA9IDM1MDAwMDAgfSwKLQkubiA9IHsgLm1pbiA9IDMsIC5tYXggPSA2IH0s Ci0JLm0gPSB7IC5taW4gPSAyLCAubWF4ID0gMjU2IH0sCi0JLm0xID0geyAubWluID0gMCwgLm1h eCA9IDAgfSwKLQkubTIgPSB7IC5taW4gPSAwLCAubWF4ID0gMjU0IH0sCi0JLnAgPSB7IC5taW4g PSA3LCAubWF4ID0gMTEyIH0sCi0JLnAxID0geyAubWluID0gMSwgLm1heCA9IDggfSwKLQkucDIg PSB7IC5kb3RfbGltaXQgPSAxMTIwMDAsCi0JCS5wMl9zbG93ID0gMTQsIC5wMl9mYXN0ID0gMTQg fSwKLQkuZmluZF9wbGwgPSBpbnRlbF9maW5kX2Jlc3RfUExMLAotfTsKLQotLyogSXJvbmxha2Ug LyBTYW5keWJyaWRnZQotICoKLSAqIFdlIGNhbGN1bGF0ZSBjbG9jayB1c2luZyAocmVnaXN0ZXJf dmFsdWUgKyAyKSBmb3IgTi9NMS9NMiwgc28gaGVyZQotICogdGhlIHJhbmdlIHZhbHVlIGZvciB0 aGVtIGlzIChhY3R1YWxfdmFsdWUgLSAyKS4KLSAqLwotc3RhdGljIGNvbnN0IGludGVsX2xpbWl0 X3QgaW50ZWxfbGltaXRzX2lyb25sYWtlX2RhYyA9IHsKLQkuZG90ID0geyAubWluID0gMjUwMDAs IC5tYXggPSAzNTAwMDAgfSwKLQkudmNvID0geyAubWluID0gMTc2MDAwMCwgLm1heCA9IDM1MTAw MDAgfSwKLQkubiA9IHsgLm1pbiA9IDEsIC5tYXggPSA1IH0sCi0JLm0gPSB7IC5taW4gPSA3OSwg Lm1heCA9IDEyNyB9LAotCS5tMSA9IHsgLm1pbiA9IDEyLCAubWF4ID0gMjIgfSwKLQkubTIgPSB7 IC5taW4gPSA1LCAubWF4ID0gOSB9LAotCS5wID0geyAubWluID0gNSwgLm1heCA9IDgwIH0sCi0J LnAxID0geyAubWluID0gMSwgLm1heCA9IDggfSwKLQkucDIgPSB7IC5kb3RfbGltaXQgPSAyMjUw MDAsCi0JCS5wMl9zbG93ID0gMTAsIC5wMl9mYXN0ID0gNSB9LAotCS5maW5kX3BsbCA9IGludGVs X2c0eF9maW5kX2Jlc3RfUExMLAotfTsKLQotc3RhdGljIGNvbnN0IGludGVsX2xpbWl0X3QgaW50 ZWxfbGltaXRzX2lyb25sYWtlX3NpbmdsZV9sdmRzID0gewotCS5kb3QgPSB7IC5taW4gPSAyNTAw MCwgLm1heCA9IDM1MDAwMCB9LAotCS52Y28gPSB7IC5taW4gPSAxNzYwMDAwLCAubWF4ID0gMzUx MDAwMCB9LAotCS5uID0geyAubWluID0gMSwgLm1heCA9IDMgfSwKLQkubSA9IHsgLm1pbiA9IDc5 LCAubWF4ID0gMTE4IH0sCi0JLm0xID0geyAubWluID0gMTIsIC5tYXggPSAyMiB9LAotCS5tMiA9 IHsgLm1pbiA9IDUsIC5tYXggPSA5IH0sCi0JLnAgPSB7IC5taW4gPSAyOCwgLm1heCA9IDExMiB9 LAotCS5wMSA9IHsgLm1pbiA9IDIsIC5tYXggPSA4IH0sCi0JLnAyID0geyAuZG90X2xpbWl0ID0g MjI1MDAwLAotCQkucDJfc2xvdyA9IDE0LCAucDJfZmFzdCA9IDE0IH0sCi0JLmZpbmRfcGxsID0g aW50ZWxfZzR4X2ZpbmRfYmVzdF9QTEwsCi19OwotCi1zdGF0aWMgY29uc3QgaW50ZWxfbGltaXRf dCBpbnRlbF9saW1pdHNfaXJvbmxha2VfZHVhbF9sdmRzID0gewotCS5kb3QgPSB7IC5taW4gPSAy NTAwMCwgLm1heCA9IDM1MDAwMCB9LAotCS52Y28gPSB7IC5taW4gPSAxNzYwMDAwLCAubWF4ID0g MzUxMDAwMCB9LAotCS5uID0geyAubWluID0gMSwgLm1heCA9IDMgfSwKLQkubSA9IHsgLm1pbiA9 IDc5LCAubWF4ID0gMTI3IH0sCi0JLm0xID0geyAubWluID0gMTIsIC5tYXggPSAyMiB9LAotCS5t MiA9IHsgLm1pbiA9IDUsIC5tYXggPSA5IH0sCi0JLnAgPSB7IC5taW4gPSAxNCwgLm1heCA9IDU2 IH0sCi0JLnAxID0geyAubWluID0gMiwgLm1heCA9IDggfSwKLQkucDIgPSB7IC5kb3RfbGltaXQg PSAyMjUwMDAsCi0JCS5wMl9zbG93ID0gNywgLnAyX2Zhc3QgPSA3IH0sCi0JLmZpbmRfcGxsID0g aW50ZWxfZzR4X2ZpbmRfYmVzdF9QTEwsCi19OwotCi0vKiBMVkRTIDEwMG1oeiByZWZjbGsgbGlt aXRzLiAqLwotc3RhdGljIGNvbnN0IGludGVsX2xpbWl0X3QgaW50ZWxfbGltaXRzX2lyb25sYWtl X3NpbmdsZV9sdmRzXzEwMG0gPSB7Ci0JLmRvdCA9IHsgLm1pbiA9IDI1MDAwLCAubWF4ID0gMzUw MDAwIH0sCi0JLnZjbyA9IHsgLm1pbiA9IDE3NjAwMDAsIC5tYXggPSAzNTEwMDAwIH0sCi0JLm4g PSB7IC5taW4gPSAxLCAubWF4ID0gMiB9LAotCS5tID0geyAubWluID0gNzksIC5tYXggPSAxMjYg fSwKLQkubTEgPSB7IC5taW4gPSAxMiwgLm1heCA9IDIyIH0sCi0JLm0yID0geyAubWluID0gNSwg Lm1heCA9IDkgfSwKLQkucCA9IHsgLm1pbiA9IDI4LCAubWF4ID0gMTEyIH0sCi0JLnAxID0geyAu bWluID0gMiwgLm1heCA9IDggfSwKLQkucDIgPSB7IC5kb3RfbGltaXQgPSAyMjUwMDAsCi0JCS5w Ml9zbG93ID0gMTQsIC5wMl9mYXN0ID0gMTQgfSwKLQkuZmluZF9wbGwgPSBpbnRlbF9nNHhfZmlu ZF9iZXN0X1BMTCwKLX07Ci0KLXN0YXRpYyBjb25zdCBpbnRlbF9saW1pdF90IGludGVsX2xpbWl0 c19pcm9ubGFrZV9kdWFsX2x2ZHNfMTAwbSA9IHsKLQkuZG90ID0geyAubWluID0gMjUwMDAsIC5t YXggPSAzNTAwMDAgfSwKLQkudmNvID0geyAubWluID0gMTc2MDAwMCwgLm1heCA9IDM1MTAwMDAg fSwKLQkubiA9IHsgLm1pbiA9IDEsIC5tYXggPSAzIH0sCi0JLm0gPSB7IC5taW4gPSA3OSwgLm1h eCA9IDEyNiB9LAotCS5tMSA9IHsgLm1pbiA9IDEyLCAubWF4ID0gMjIgfSwKLQkubTIgPSB7IC5t aW4gPSA1LCAubWF4ID0gOSB9LAotCS5wID0geyAubWluID0gMTQsIC5tYXggPSA0MiB9LAotCS5w MSA9IHsgLm1pbiA9IDIsIC5tYXggPSA2IH0sCi0JLnAyID0geyAuZG90X2xpbWl0ID0gMjI1MDAw LAotCQkucDJfc2xvdyA9IDcsIC5wMl9mYXN0ID0gNyB9LAotCS5maW5kX3BsbCA9IGludGVsX2c0 eF9maW5kX2Jlc3RfUExMLAotfTsKLQotc3RhdGljIGNvbnN0IGludGVsX2xpbWl0X3QgaW50ZWxf bGltaXRzX3Zsdl9kYWMgPSB7Ci0JLmRvdCA9IHsgLm1pbiA9IDI1MDAwLCAubWF4ID0gMjcwMDAw IH0sCi0JLnZjbyA9IHsgLm1pbiA9IDQwMDAwMDAsIC5tYXggPSA2MDAwMDAwIH0sCi0JLm4gPSB7 IC5taW4gPSAxLCAubWF4ID0gNyB9LAotCS5tID0geyAubWluID0gMjIsIC5tYXggPSA0NTAgfSwg LyogZ3Vlc3MgKi8KLQkubTEgPSB7IC5taW4gPSAyLCAubWF4ID0gMyB9LAotCS5tMiA9IHsgLm1p biA9IDExLCAubWF4ID0gMTU2IH0sCi0JLnAgPSB7IC5taW4gPSAxMCwgLm1heCA9IDMwIH0sCi0J LnAxID0geyAubWluID0gMSwgLm1heCA9IDMgfSwKLQkucDIgPSB7IC5kb3RfbGltaXQgPSAyNzAw MDAsCi0JCS5wMl9zbG93ID0gMiwgLnAyX2Zhc3QgPSAyMCB9LAotCS5maW5kX3BsbCA9IGludGVs X3Zsdl9maW5kX2Jlc3RfcGxsLAotfTsKLQotc3RhdGljIGNvbnN0IGludGVsX2xpbWl0X3QgaW50 ZWxfbGltaXRzX3Zsdl9oZG1pID0gewotCS5kb3QgPSB7IC5taW4gPSAyNTAwMCwgLm1heCA9IDI3 MDAwMCB9LAotCS52Y28gPSB7IC5taW4gPSA0MDAwMDAwLCAubWF4ID0gNjAwMDAwMCB9LAotCS5u ID0geyAubWluID0gMSwgLm1heCA9IDcgfSwKLQkubSA9IHsgLm1pbiA9IDYwLCAubWF4ID0gMzAw IH0sIC8qIGd1ZXNzICovCi0JLm0xID0geyAubWluID0gMiwgLm1heCA9IDMgfSwKLQkubTIgPSB7 IC5taW4gPSAxMSwgLm1heCA9IDE1NiB9LAotCS5wID0geyAubWluID0gMTAsIC5tYXggPSAzMCB9 LAotCS5wMSA9IHsgLm1pbiA9IDIsIC5tYXggPSAzIH0sCi0JLnAyID0geyAuZG90X2xpbWl0ID0g MjcwMDAwLAotCQkucDJfc2xvdyA9IDIsIC5wMl9mYXN0ID0gMjAgfSwKLQkuZmluZF9wbGwgPSBp bnRlbF92bHZfZmluZF9iZXN0X3BsbCwKLX07Ci0KLXN0YXRpYyBjb25zdCBpbnRlbF9saW1pdF90 IGludGVsX2xpbWl0c192bHZfZHAgPSB7Ci0JLmRvdCA9IHsgLm1pbiA9IDI1MDAwLCAubWF4ID0g MjcwMDAwIH0sCi0JLnZjbyA9IHsgLm1pbiA9IDQwMDAwMDAsIC5tYXggPSA2MDAwMDAwIH0sCi0J Lm4gPSB7IC5taW4gPSAxLCAubWF4ID0gNyB9LAotCS5tID0geyAubWluID0gMjIsIC5tYXggPSA0 NTAgfSwKLQkubTEgPSB7IC5taW4gPSAyLCAubWF4ID0gMyB9LAotCS5tMiA9IHsgLm1pbiA9IDEx LCAubWF4ID0gMTU2IH0sCi0JLnAgPSB7IC5taW4gPSAxMCwgLm1heCA9IDMwIH0sCi0JLnAxID0g eyAubWluID0gMSwgLm1heCA9IDMgfSwKLQkucDIgPSB7IC5kb3RfbGltaXQgPSAyNzAwMDAsCi0J CS5wMl9zbG93ID0gMiwgLnAyX2Zhc3QgPSAyMCB9LAotCS5maW5kX3BsbCA9IGludGVsX3Zsdl9m aW5kX2Jlc3RfcGxsLAotfTsKLQotc3RhdGljIGNvbnN0IGludGVsX2xpbWl0X3QgKmludGVsX2ly b25sYWtlX2xpbWl0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKLQkJCQkJCWludCByZWZjbGspCi17 Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKLQljb25zdCBpbnRlbF9saW1p dF90ICpsaW1pdDsKLQotCWlmIChpbnRlbF9waXBlX2hhc190eXBlKGNydGMsIElOVEVMX09VVFBV VF9MVkRTKSkgewotCQlpZiAoaW50ZWxfaXNfZHVhbF9saW5rX2x2ZHMoZGV2KSkgewotCQkJaWYg KHJlZmNsayA9PSAxMDAwMDApCi0JCQkJbGltaXQgPSAmaW50ZWxfbGltaXRzX2lyb25sYWtlX2R1 YWxfbHZkc18xMDBtOwotCQkJZWxzZQotCQkJCWxpbWl0ID0gJmludGVsX2xpbWl0c19pcm9ubGFr ZV9kdWFsX2x2ZHM7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAocmVmY2xrID09IDEwMDAwMCkKLQkJCQls aW1pdCA9ICZpbnRlbF9saW1pdHNfaXJvbmxha2Vfc2luZ2xlX2x2ZHNfMTAwbTsKLQkJCWVsc2UK LQkJCQlsaW1pdCA9ICZpbnRlbF9saW1pdHNfaXJvbmxha2Vfc2luZ2xlX2x2ZHM7Ci0JCX0KLQl9 IGVsc2UKLQkJbGltaXQgPSAmaW50ZWxfbGltaXRzX2lyb25sYWtlX2RhYzsKLQotCXJldHVybiBs aW1pdDsKLX0KLQotc3RhdGljIGNvbnN0IGludGVsX2xpbWl0X3QgKmludGVsX2c0eF9saW1pdChz dHJ1Y3QgZHJtX2NydGMgKmNydGMpCi17Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMt PmRldjsKLQljb25zdCBpbnRlbF9saW1pdF90ICpsaW1pdDsKLQotCWlmIChpbnRlbF9waXBlX2hh c190eXBlKGNydGMsIElOVEVMX09VVFBVVF9MVkRTKSkgewotCQlpZiAoaW50ZWxfaXNfZHVhbF9s aW5rX2x2ZHMoZGV2KSkKLQkJCWxpbWl0ID0gJmludGVsX2xpbWl0c19nNHhfZHVhbF9jaGFubmVs X2x2ZHM7Ci0JCWVsc2UKLQkJCWxpbWl0ID0gJmludGVsX2xpbWl0c19nNHhfc2luZ2xlX2NoYW5u ZWxfbHZkczsKLQl9IGVsc2UgaWYgKGludGVsX3BpcGVfaGFzX3R5cGUoY3J0YywgSU5URUxfT1VU UFVUX0hETUkpIHx8Ci0JCSAgIGludGVsX3BpcGVfaGFzX3R5cGUoY3J0YywgSU5URUxfT1VUUFVU X0FOQUxPRykpIHsKLQkJbGltaXQgPSAmaW50ZWxfbGltaXRzX2c0eF9oZG1pOwotCX0gZWxzZSBp ZiAoaW50ZWxfcGlwZV9oYXNfdHlwZShjcnRjLCBJTlRFTF9PVVRQVVRfU0RWTykpIHsKLQkJbGlt aXQgPSAmaW50ZWxfbGltaXRzX2c0eF9zZHZvOwotCX0gZWxzZSAvKiBUaGUgb3B0aW9uIGlzIGZv ciBvdGhlciBvdXRwdXRzICovCi0JCWxpbWl0ID0gJmludGVsX2xpbWl0c19pOXh4X3Nkdm87Ci0K LQlyZXR1cm4gbGltaXQ7Ci19Ci0KLXN0YXRpYyBjb25zdCBpbnRlbF9saW1pdF90ICppbnRlbF9s aW1pdChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIGludCByZWZjbGspCi17Ci0Jc3RydWN0IGRybV9k ZXZpY2UgKmRldiA9IGNydGMtPmRldjsKLQljb25zdCBpbnRlbF9saW1pdF90ICpsaW1pdDsKLQot CWlmIChIQVNfUENIX1NQTElUKGRldikpCi0JCWxpbWl0ID0gaW50ZWxfaXJvbmxha2VfbGltaXQo Y3J0YywgcmVmY2xrKTsKLQllbHNlIGlmIChJU19HNFgoZGV2KSkgewotCQlsaW1pdCA9IGludGVs X2c0eF9saW1pdChjcnRjKTsKLQl9IGVsc2UgaWYgKElTX1BJTkVWSUVXKGRldikpIHsKLQkJaWYg KGludGVsX3BpcGVfaGFzX3R5cGUoY3J0YywgSU5URUxfT1VUUFVUX0xWRFMpKQotCQkJbGltaXQg PSAmaW50ZWxfbGltaXRzX3BpbmV2aWV3X2x2ZHM7Ci0JCWVsc2UKLQkJCWxpbWl0ID0gJmludGVs X2xpbWl0c19waW5ldmlld19zZHZvOwotCX0gZWxzZSBpZiAoSVNfVkFMTEVZVklFVyhkZXYpKSB7 Ci0JCWlmIChpbnRlbF9waXBlX2hhc190eXBlKGNydGMsIElOVEVMX09VVFBVVF9BTkFMT0cpKQot CQkJbGltaXQgPSAmaW50ZWxfbGltaXRzX3Zsdl9kYWM7Ci0JCWVsc2UgaWYgKGludGVsX3BpcGVf aGFzX3R5cGUoY3J0YywgSU5URUxfT1VUUFVUX0hETUkpKQotCQkJbGltaXQgPSAmaW50ZWxfbGlt aXRzX3Zsdl9oZG1pOwotCQllbHNlCi0JCQlsaW1pdCA9ICZpbnRlbF9saW1pdHNfdmx2X2RwOwot CX0gZWxzZSBpZiAoIUlTX0dFTjIoZGV2KSkgewotCQlpZiAoaW50ZWxfcGlwZV9oYXNfdHlwZShj cnRjLCBJTlRFTF9PVVRQVVRfTFZEUykpCi0JCQlsaW1pdCA9ICZpbnRlbF9saW1pdHNfaTl4eF9s dmRzOwotCQllbHNlCi0JCQlsaW1pdCA9ICZpbnRlbF9saW1pdHNfaTl4eF9zZHZvOwotCX0gZWxz ZSB7Ci0JCWlmIChpbnRlbF9waXBlX2hhc190eXBlKGNydGMsIElOVEVMX09VVFBVVF9MVkRTKSkK LQkJCWxpbWl0ID0gJmludGVsX2xpbWl0c19pOHh4X2x2ZHM7Ci0JCWVsc2UKLQkJCWxpbWl0ID0g JmludGVsX2xpbWl0c19pOHh4X2R2bzsKLQl9Ci0JcmV0dXJuIGxpbWl0OwotfQotCiAvKiBtMSBp cyByZXNlcnZlZCBhcyAwIGluIFBpbmV2aWV3LCBuIGlzIGEgcmluZyBjb3VudGVyICovCiBzdGF0 aWMgdm9pZCBwaW5ldmlld19jbG9jayhpbnQgcmVmY2xrLCBpbnRlbF9jbG9ja190ICpjbG9jaykK IHsKQEAgLTQ3NSw3ICs4Miw3IEBAIHN0YXRpYyB1aW50MzJfdCBpOXh4X2RwbGxfY29tcHV0ZV9t KHN0cnVjdCBkcGxsICpkcGxsKQogCXJldHVybiA1ICogKGRwbGwtPm0xICsgMikgKyAoZHBsbC0+ bTIgKyAyKTsKIH0KIAotc3RhdGljIHZvaWQgaW50ZWxfY2xvY2soc3RydWN0IGRybV9kZXZpY2Ug KmRldiwgaW50IHJlZmNsaywgaW50ZWxfY2xvY2tfdCAqY2xvY2spCit2b2lkIGludGVsX2Nsb2Nr KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCByZWZjbGssIGludGVsX2Nsb2NrX3QgKmNsb2Nr KQogewogCWlmIChJU19QSU5FVklFVyhkZXYpKSB7CiAJCXBpbmV2aWV3X2Nsb2NrKHJlZmNsaywg Y2xvY2spOwpAQCAtNTAyLDIzMCArMTA5LDYgQEAgYm9vbCBpbnRlbF9waXBlX2hhc190eXBlKHN0 cnVjdCBkcm1fY3J0YyAqY3J0YywgaW50IHR5cGUpCiAJcmV0dXJuIGZhbHNlOwogfQogCi0jZGVm aW5lIElOVEVMUGxsSW52YWxpZChzKSAgIGRvIHsgLyogRFJNX0RFQlVHKHMpOyAqLyByZXR1cm4g ZmFsc2U7IH0gd2hpbGUgKDApCi0vKioKLSAqIFJldHVybnMgd2hldGhlciB0aGUgZ2l2ZW4gc2V0 IG9mIGRpdmlzb3JzIGFyZSB2YWxpZCBmb3IgYSBnaXZlbiByZWZjbGsgd2l0aAotICogdGhlIGdp dmVuIGNvbm5lY3RvcnMuCi0gKi8KLQotc3RhdGljIGJvb2wgaW50ZWxfUExMX2lzX3ZhbGlkKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkgICAgICAgY29uc3QgaW50ZWxfbGltaXRfdCAqbGlt aXQsCi0JCQkgICAgICAgY29uc3QgaW50ZWxfY2xvY2tfdCAqY2xvY2spCi17Ci0JaWYgKGNsb2Nr LT5wMSAgPCBsaW1pdC0+cDEubWluICB8fCBsaW1pdC0+cDEubWF4ICA8IGNsb2NrLT5wMSkKLQkJ SU5URUxQbGxJbnZhbGlkKCJwMSBvdXQgb2YgcmFuZ2VcbiIpOwotCWlmIChjbG9jay0+cCAgIDwg bGltaXQtPnAubWluICAgfHwgbGltaXQtPnAubWF4ICAgPCBjbG9jay0+cCkKLQkJSU5URUxQbGxJ bnZhbGlkKCJwIG91dCBvZiByYW5nZVxuIik7Ci0JaWYgKGNsb2NrLT5tMiAgPCBsaW1pdC0+bTIu bWluICB8fCBsaW1pdC0+bTIubWF4ICA8IGNsb2NrLT5tMikKLQkJSU5URUxQbGxJbnZhbGlkKCJt MiBvdXQgb2YgcmFuZ2VcbiIpOwotCWlmIChjbG9jay0+bTEgIDwgbGltaXQtPm0xLm1pbiAgfHwg bGltaXQtPm0xLm1heCAgPCBjbG9jay0+bTEpCi0JCUlOVEVMUGxsSW52YWxpZCgibTEgb3V0IG9m IHJhbmdlXG4iKTsKLQlpZiAoY2xvY2stPm0xIDw9IGNsb2NrLT5tMiAmJiAhSVNfUElORVZJRVco ZGV2KSkKLQkJSU5URUxQbGxJbnZhbGlkKCJtMSA8PSBtMlxuIik7Ci0JaWYgKGNsb2NrLT5tICAg PCBsaW1pdC0+bS5taW4gICB8fCBsaW1pdC0+bS5tYXggICA8IGNsb2NrLT5tKQotCQlJTlRFTFBs bEludmFsaWQoIm0gb3V0IG9mIHJhbmdlXG4iKTsKLQlpZiAoY2xvY2stPm4gICA8IGxpbWl0LT5u Lm1pbiAgIHx8IGxpbWl0LT5uLm1heCAgIDwgY2xvY2stPm4pCi0JCUlOVEVMUGxsSW52YWxpZCgi biBvdXQgb2YgcmFuZ2VcbiIpOwotCWlmIChjbG9jay0+dmNvIDwgbGltaXQtPnZjby5taW4gfHwg bGltaXQtPnZjby5tYXggPCBjbG9jay0+dmNvKQotCQlJTlRFTFBsbEludmFsaWQoInZjbyBvdXQg b2YgcmFuZ2VcbiIpOwotCS8qIFhYWDogV2UgbWF5IG5lZWQgdG8gYmUgY2hlY2tpbmcgIkRvdCBj bG9jayIgZGVwZW5kaW5nIG9uIHRoZSBtdWx0aXBsaWVyLAotCSAqIGNvbm5lY3RvciwgZXRjLiwg cmF0aGVyIHRoYW4ganVzdCBhIHNpbmdsZSByYW5nZS4KLQkgKi8KLQlpZiAoY2xvY2stPmRvdCA8 IGxpbWl0LT5kb3QubWluIHx8IGxpbWl0LT5kb3QubWF4IDwgY2xvY2stPmRvdCkKLQkJSU5URUxQ bGxJbnZhbGlkKCJkb3Qgb3V0IG9mIHJhbmdlXG4iKTsKLQotCXJldHVybiB0cnVlOwotfQotCi1z dGF0aWMgYm9vbAotaW50ZWxfZmluZF9iZXN0X1BMTChjb25zdCBpbnRlbF9saW1pdF90ICpsaW1p dCwgc3RydWN0IGRybV9jcnRjICpjcnRjLAotCQkgICAgaW50IHRhcmdldCwgaW50IHJlZmNsaywg aW50ZWxfY2xvY2tfdCAqbWF0Y2hfY2xvY2ssCi0JCSAgICBpbnRlbF9jbG9ja190ICpiZXN0X2Ns b2NrKQotCi17Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKLQlpbnRlbF9j bG9ja190IGNsb2NrOwotCWludCBlcnIgPSB0YXJnZXQ7Ci0KLQlpZiAoaW50ZWxfcGlwZV9oYXNf dHlwZShjcnRjLCBJTlRFTF9PVVRQVVRfTFZEUykpIHsKLQkJLyoKLQkJICogRm9yIExWRFMganVz dCByZWx5IG9uIGl0cyBjdXJyZW50IHNldHRpbmdzIGZvciBkdWFsLWNoYW5uZWwuCi0JCSAqIFdl IGhhdmVuJ3QgZmlndXJlZCBvdXQgaG93IHRvIHJlbGlhYmx5IHNldCB1cCBkaWZmZXJlbnQKLQkJ ICogc2luZ2xlL2R1YWwgY2hhbm5lbCBzdGF0ZSwgaWYgd2UgZXZlbiBjYW4uCi0JCSAqLwotCQlp ZiAoaW50ZWxfaXNfZHVhbF9saW5rX2x2ZHMoZGV2KSkKLQkJCWNsb2NrLnAyID0gbGltaXQtPnAy LnAyX2Zhc3Q7Ci0JCWVsc2UKLQkJCWNsb2NrLnAyID0gbGltaXQtPnAyLnAyX3Nsb3c7Ci0JfSBl bHNlIHsKLQkJaWYgKHRhcmdldCA8IGxpbWl0LT5wMi5kb3RfbGltaXQpCi0JCQljbG9jay5wMiA9 IGxpbWl0LT5wMi5wMl9zbG93OwotCQllbHNlCi0JCQljbG9jay5wMiA9IGxpbWl0LT5wMi5wMl9m YXN0OwotCX0KLQotCW1lbXNldChiZXN0X2Nsb2NrLCAwLCBzaXplb2YoKmJlc3RfY2xvY2spKTsK LQotCWZvciAoY2xvY2subTEgPSBsaW1pdC0+bTEubWluOyBjbG9jay5tMSA8PSBsaW1pdC0+bTEu bWF4OwotCSAgICAgY2xvY2subTErKykgewotCQlmb3IgKGNsb2NrLm0yID0gbGltaXQtPm0yLm1p bjsKLQkJICAgICBjbG9jay5tMiA8PSBsaW1pdC0+bTIubWF4OyBjbG9jay5tMisrKSB7Ci0JCQkv KiBtMSBpcyBhbHdheXMgMCBpbiBQaW5ldmlldyAqLwotCQkJaWYgKGNsb2NrLm0yID49IGNsb2Nr Lm0xICYmICFJU19QSU5FVklFVyhkZXYpKQotCQkJCWJyZWFrOwotCQkJZm9yIChjbG9jay5uID0g bGltaXQtPm4ubWluOwotCQkJICAgICBjbG9jay5uIDw9IGxpbWl0LT5uLm1heDsgY2xvY2subisr KSB7Ci0JCQkJZm9yIChjbG9jay5wMSA9IGxpbWl0LT5wMS5taW47Ci0JCQkJCWNsb2NrLnAxIDw9 IGxpbWl0LT5wMS5tYXg7IGNsb2NrLnAxKyspIHsKLQkJCQkJaW50IHRoaXNfZXJyOwotCi0JCQkJ CWludGVsX2Nsb2NrKGRldiwgcmVmY2xrLCAmY2xvY2spOwotCQkJCQlpZiAoIWludGVsX1BMTF9p c192YWxpZChkZXYsIGxpbWl0LAotCQkJCQkJCQkmY2xvY2spKQotCQkJCQkJY29udGludWU7Ci0J CQkJCWlmIChtYXRjaF9jbG9jayAmJgotCQkJCQkgICAgY2xvY2sucCAhPSBtYXRjaF9jbG9jay0+ cCkKLQkJCQkJCWNvbnRpbnVlOwotCi0JCQkJCXRoaXNfZXJyID0gYWJzKGNsb2NrLmRvdCAtIHRh cmdldCk7Ci0JCQkJCWlmICh0aGlzX2VyciA8IGVycikgewotCQkJCQkJKmJlc3RfY2xvY2sgPSBj bG9jazsKLQkJCQkJCWVyciA9IHRoaXNfZXJyOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0J fQotCi0JcmV0dXJuIChlcnIgIT0gdGFyZ2V0KTsKLX0KLQotc3RhdGljIGJvb2wKLWludGVsX2c0 eF9maW5kX2Jlc3RfUExMKGNvbnN0IGludGVsX2xpbWl0X3QgKmxpbWl0LCBzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMsCi0JCQlpbnQgdGFyZ2V0LCBpbnQgcmVmY2xrLCBpbnRlbF9jbG9ja190ICptYXRj aF9jbG9jaywKLQkJCWludGVsX2Nsb2NrX3QgKmJlc3RfY2xvY2spCi17Ci0Jc3RydWN0IGRybV9k ZXZpY2UgKmRldiA9IGNydGMtPmRldjsKLQlpbnRlbF9jbG9ja190IGNsb2NrOwotCWludCBtYXhf bjsKLQlib29sIGZvdW5kOwotCS8qIGFwcHJveGltYXRlbHkgZXF1YWxzIHRhcmdldCAqIDAuMDA1 ODUgKi8KLQlpbnQgZXJyX21vc3QgPSAodGFyZ2V0ID4+IDgpICsgKHRhcmdldCA+PiA5KTsKLQlm b3VuZCA9IGZhbHNlOwotCi0JaWYgKGludGVsX3BpcGVfaGFzX3R5cGUoY3J0YywgSU5URUxfT1VU UFVUX0xWRFMpKSB7Ci0JCWlmIChpbnRlbF9pc19kdWFsX2xpbmtfbHZkcyhkZXYpKQotCQkJY2xv Y2sucDIgPSBsaW1pdC0+cDIucDJfZmFzdDsKLQkJZWxzZQotCQkJY2xvY2sucDIgPSBsaW1pdC0+ cDIucDJfc2xvdzsKLQl9IGVsc2UgewotCQlpZiAodGFyZ2V0IDwgbGltaXQtPnAyLmRvdF9saW1p dCkKLQkJCWNsb2NrLnAyID0gbGltaXQtPnAyLnAyX3Nsb3c7Ci0JCWVsc2UKLQkJCWNsb2NrLnAy ID0gbGltaXQtPnAyLnAyX2Zhc3Q7Ci0JfQotCi0JbWVtc2V0KGJlc3RfY2xvY2ssIDAsIHNpemVv ZigqYmVzdF9jbG9jaykpOwotCW1heF9uID0gbGltaXQtPm4ubWF4OwotCS8qIGJhc2VkIG9uIGhh cmR3YXJlIHJlcXVpcmVtZW50LCBwcmVmZXIgc21hbGxlciBuIHRvIHByZWNpc2lvbiAqLwotCWZv ciAoY2xvY2subiA9IGxpbWl0LT5uLm1pbjsgY2xvY2subiA8PSBtYXhfbjsgY2xvY2subisrKSB7 Ci0JCS8qIGJhc2VkIG9uIGhhcmR3YXJlIHJlcXVpcmVtZW50LCBwcmVmZXJlIGxhcmdlciBtMSxt MiAqLwotCQlmb3IgKGNsb2NrLm0xID0gbGltaXQtPm0xLm1heDsKLQkJICAgICBjbG9jay5tMSA+ PSBsaW1pdC0+bTEubWluOyBjbG9jay5tMS0tKSB7Ci0JCQlmb3IgKGNsb2NrLm0yID0gbGltaXQt Pm0yLm1heDsKLQkJCSAgICAgY2xvY2subTIgPj0gbGltaXQtPm0yLm1pbjsgY2xvY2subTItLSkg ewotCQkJCWZvciAoY2xvY2sucDEgPSBsaW1pdC0+cDEubWF4OwotCQkJCSAgICAgY2xvY2sucDEg Pj0gbGltaXQtPnAxLm1pbjsgY2xvY2sucDEtLSkgewotCQkJCQlpbnQgdGhpc19lcnI7Ci0KLQkJ CQkJaW50ZWxfY2xvY2soZGV2LCByZWZjbGssICZjbG9jayk7Ci0JCQkJCWlmICghaW50ZWxfUExM X2lzX3ZhbGlkKGRldiwgbGltaXQsCi0JCQkJCQkJCSZjbG9jaykpCi0JCQkJCQljb250aW51ZTsK LQotCQkJCQl0aGlzX2VyciA9IGFicyhjbG9jay5kb3QgLSB0YXJnZXQpOwotCQkJCQlpZiAodGhp c19lcnIgPCBlcnJfbW9zdCkgewotCQkJCQkJKmJlc3RfY2xvY2sgPSBjbG9jazsKLQkJCQkJCWVy cl9tb3N0ID0gdGhpc19lcnI7Ci0JCQkJCQltYXhfbiA9IGNsb2NrLm47Ci0JCQkJCQlmb3VuZCA9 IHRydWU7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0JcmV0dXJuIGZvdW5kOwotfQot Ci1zdGF0aWMgYm9vbAotaW50ZWxfdmx2X2ZpbmRfYmVzdF9wbGwoY29uc3QgaW50ZWxfbGltaXRf dCAqbGltaXQsIHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKLQkJCWludCB0YXJnZXQsIGludCByZWZj bGssIGludGVsX2Nsb2NrX3QgKm1hdGNoX2Nsb2NrLAotCQkJaW50ZWxfY2xvY2tfdCAqYmVzdF9j bG9jaykKLXsKLQl1MzIgcDEsIHAyLCBtMSwgbTIsIHZjbywgYmVzdG4sIGJlc3RtMSwgYmVzdG0y LCBiZXN0cDEsIGJlc3RwMjsKLQl1MzIgbSwgbiwgZmFzdGNsazsKLQl1MzIgdXBkcmF0ZSwgbWlu dXBkYXRlLCBmcmFjYml0cywgcDsKLQl1bnNpZ25lZCBsb25nIGJlc3RwcG0sIHBwbSwgYWJzcHBt OwotCWludCBkb3RjbGssIGZsYWc7Ci0KLQlmbGFnID0gMDsKLQlkb3RjbGsgPSB0YXJnZXQgKiAx MDAwOwotCWJlc3RwcG0gPSAxMDAwMDAwOwotCXBwbSA9IGFic3BwbSA9IDA7Ci0JZmFzdGNsayA9 IGRvdGNsayAvICgyKjEwMCk7Ci0JdXBkcmF0ZSA9IDA7Ci0JbWludXBkYXRlID0gMTkyMDA7Ci0J ZnJhY2JpdHMgPSAxOwotCW4gPSBwID0gcDEgPSBwMiA9IG0gPSBtMSA9IG0yID0gdmNvID0gYmVz dG4gPSAwOwotCWJlc3RtMSA9IGJlc3RtMiA9IGJlc3RwMSA9IGJlc3RwMiA9IDA7Ci0KLQkvKiBi YXNlZCBvbiBoYXJkd2FyZSByZXF1aXJlbWVudCwgcHJlZmVyIHNtYWxsZXIgbiB0byBwcmVjaXNp b24gKi8KLQlmb3IgKG4gPSBsaW1pdC0+bi5taW47IG4gPD0gKChyZWZjbGspIC8gbWludXBkYXRl KTsgbisrKSB7Ci0JCXVwZHJhdGUgPSByZWZjbGsgLyBuOwotCQlmb3IgKHAxID0gbGltaXQtPnAx Lm1heDsgcDEgPiBsaW1pdC0+cDEubWluOyBwMS0tKSB7Ci0JCQlmb3IgKHAyID0gbGltaXQtPnAy LnAyX2Zhc3QrMTsgcDIgPiAwOyBwMi0tKSB7Ci0JCQkJaWYgKHAyID4gMTApCi0JCQkJCXAyID0g cDIgLSAxOwotCQkJCXAgPSBwMSAqIHAyOwotCQkJCS8qIGJhc2VkIG9uIGhhcmR3YXJlIHJlcXVp cmVtZW50LCBwcmVmZXIgYmlnZ2VyIG0xLG0yIHZhbHVlcyAqLwotCQkJCWZvciAobTEgPSBsaW1p dC0+bTEubWluOyBtMSA8PSBsaW1pdC0+bTEubWF4OyBtMSsrKSB7Ci0JCQkJCW0yID0gKCgoMioo ZmFzdGNsayAqIHAgKiBuIC8gbTEgKSkgKwotCQkJCQkgICAgICAgcmVmY2xrKSAvICgyKnJlZmNs aykpOwotCQkJCQltID0gbTEgKiBtMjsKLQkJCQkJdmNvID0gdXBkcmF0ZSAqIG07Ci0JCQkJCWlm ICh2Y28gPj0gbGltaXQtPnZjby5taW4gJiYgdmNvIDwgbGltaXQtPnZjby5tYXgpIHsKLQkJCQkJ CXBwbSA9IDEwMDAwMDAgKiAoKHZjbyAvIHApIC0gZmFzdGNsaykgLyBmYXN0Y2xrOwotCQkJCQkJ YWJzcHBtID0gKHBwbSA+IDApID8gcHBtIDogKC1wcG0pOwotCQkJCQkJaWYgKGFic3BwbSA8IDEw MCAmJiAoKHAxICogcDIpID4gKGJlc3RwMSAqIGJlc3RwMikpKSB7Ci0JCQkJCQkJYmVzdHBwbSA9 IDA7Ci0JCQkJCQkJZmxhZyA9IDE7Ci0JCQkJCQl9Ci0JCQkJCQlpZiAoYWJzcHBtIDwgYmVzdHBw bSAtIDEwKSB7Ci0JCQkJCQkJYmVzdHBwbSA9IGFic3BwbTsKLQkJCQkJCQlmbGFnID0gMTsKLQkJ CQkJCX0KLQkJCQkJCWlmIChmbGFnKSB7Ci0JCQkJCQkJYmVzdG4gPSBuOwotCQkJCQkJCWJlc3Rt MSA9IG0xOwotCQkJCQkJCWJlc3RtMiA9IG0yOwotCQkJCQkJCWJlc3RwMSA9IHAxOwotCQkJCQkJ CWJlc3RwMiA9IHAyOwotCQkJCQkJCWZsYWcgPSAwOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQot CQkJfQotCQl9Ci0JfQotCWJlc3RfY2xvY2stPm4gPSBiZXN0bjsKLQliZXN0X2Nsb2NrLT5tMSA9 IGJlc3RtMTsKLQliZXN0X2Nsb2NrLT5tMiA9IGJlc3RtMjsKLQliZXN0X2Nsb2NrLT5wMSA9IGJl c3RwMTsKLQliZXN0X2Nsb2NrLT5wMiA9IGJlc3RwMjsKLQotCXJldHVybiB0cnVlOwotfQotCiBl bnVtIHRyYW5zY29kZXIgaW50ZWxfcGlwZV90b19jcHVfdHJhbnNjb2RlcihzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCQkJCSAgICAgZW51bSBwaXBlIHBpcGUpCiB7CkBAIC00 ODE1LDcgKzQxOTgsNyBAQCBzdGF0aWMgaW50IGk5eHhfY3J0Y19tb2RlX3NldChzdHJ1Y3QgZHJt X2NydGMgKmNydGMsCiAJICogcmVmbGNrICogKDUgKiAobTEgKyAyKSArIChtMiArIDIpKSAvIChu ICsgMikgLyBwMSAvIHAyLgogCSAqLwogCWxpbWl0ID0gaW50ZWxfbGltaXQoY3J0YywgcmVmY2xr KTsKLQlvayA9IGxpbWl0LT5maW5kX3BsbChsaW1pdCwgY3J0YywgYWRqdXN0ZWRfbW9kZS0+Y2xv Y2ssIHJlZmNsaywgTlVMTCwKKwlvayA9IGludGVsX2ZpbmRfcGxsKGxpbWl0LCBjcnRjLCBhZGp1 c3RlZF9tb2RlLT5jbG9jaywgcmVmY2xrLCBOVUxMLAogCQkJICAgICAmY2xvY2spOwogCWlmICgh b2spIHsKIAkJRFJNX0VSUk9SKCJDb3VsZG4ndCBmaW5kIFBMTCBzZXR0aW5ncyBmb3IgbW9kZSFc biIpOwpAQCAtNDgzMiwxMSArNDIxNSwxMSBAQCBzdGF0aWMgaW50IGk5eHhfY3J0Y19tb2RlX3Nl dChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJCSAqIGJ5IHVzaW5nIHRoZSBGUDAvRlAxLiBJbiBz dWNoIGNhc2Ugd2Ugd2lsbCBkaXNhYmxlIHRoZSBMVkRTCiAJCSAqIGRvd25jbG9jayBmZWF0dXJl LgogCQkqLwotCQloYXNfcmVkdWNlZF9jbG9jayA9IGxpbWl0LT5maW5kX3BsbChsaW1pdCwgY3J0 YywKLQkJCQkJCSAgICBkZXZfcHJpdi0+bHZkc19kb3duY2xvY2ssCi0JCQkJCQkgICAgcmVmY2xr LAotCQkJCQkJICAgICZjbG9jaywKLQkJCQkJCSAgICAmcmVkdWNlZF9jbG9jayk7CisJCWhhc19y ZWR1Y2VkX2Nsb2NrID0gaW50ZWxfZmluZF9wbGwobGltaXQsIGNydGMsCisJCQkJCQkgICBkZXZf cHJpdi0+bHZkc19kb3duY2xvY2ssCisJCQkJCQkgICByZWZjbGssCisJCQkJCQkgICAmY2xvY2ss CisJCQkJCQkgICAmcmVkdWNlZF9jbG9jayk7CiAJfQogCS8qIENvbXBhdC1jb2RlIGZvciB0cmFu c2l0aW9uLCB3aWxsIGRpc2FwcGVhci4gKi8KIAlpZiAoIWludGVsX2NydGMtPmNvbmZpZy5jbG9j a19zZXQpIHsKQEAgLTU0NTIsOCArNDgzNSw4IEBAIHN0YXRpYyBib29sIGlyb25sYWtlX2NvbXB1 dGVfY2xvY2tzKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkgKiByZWZsY2sgKiAoNSAqIChtMSAr IDIpICsgKG0yICsgMikpIC8gKG4gKyAyKSAvIHAxIC8gcDIuCiAJICovCiAJbGltaXQgPSBpbnRl bF9saW1pdChjcnRjLCByZWZjbGspOwotCXJldCA9IGxpbWl0LT5maW5kX3BsbChsaW1pdCwgY3J0 YywgYWRqdXN0ZWRfbW9kZS0+Y2xvY2ssIHJlZmNsaywgTlVMTCwKLQkJCSAgICAgIGNsb2NrKTsK KwlyZXQgPSBpbnRlbF9maW5kX3BsbChsaW1pdCwgY3J0YywgYWRqdXN0ZWRfbW9kZS0+Y2xvY2ss IHJlZmNsaywgTlVMTCwKKwkJCSAgICAgY2xvY2spOwogCWlmICghcmV0KQogCQlyZXR1cm4gZmFs c2U7CiAKQEAgLTU0NjQsMTEgKzQ4NDcsMTEgQEAgc3RhdGljIGJvb2wgaXJvbmxha2VfY29tcHV0 ZV9jbG9ja3Moc3RydWN0IGRybV9jcnRjICpjcnRjLAogCQkgKiBieSB1c2luZyB0aGUgRlAwL0ZQ MS4gSW4gc3VjaCBjYXNlIHdlIHdpbGwgZGlzYWJsZSB0aGUgTFZEUwogCQkgKiBkb3duY2xvY2sg ZmVhdHVyZS4KIAkJKi8KLQkJKmhhc19yZWR1Y2VkX2Nsb2NrID0gbGltaXQtPmZpbmRfcGxsKGxp bWl0LCBjcnRjLAotCQkJCQkJICAgICBkZXZfcHJpdi0+bHZkc19kb3duY2xvY2ssCi0JCQkJCQkg ICAgIHJlZmNsaywKLQkJCQkJCSAgICAgY2xvY2ssCi0JCQkJCQkgICAgIHJlZHVjZWRfY2xvY2sp OworCQkqaGFzX3JlZHVjZWRfY2xvY2sgPSBpbnRlbF9maW5kX3BsbChsaW1pdCwgY3J0YywKKwkJ CQkJCSAgICBkZXZfcHJpdi0+bHZkc19kb3duY2xvY2ssCisJCQkJCQkgICAgcmVmY2xrLAorCQkJ CQkJICAgIGNsb2NrLAorCQkJCQkJICAgIHJlZHVjZWRfY2xvY2spOwogCX0KIAogCXJldHVybiB0 cnVlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAppbmRleCA4M2I0ZmU0Li5mY2Q0NTcwIDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAorKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9kcnYuaApAQCAtMTkxLDYgKzE5MSwxMyBAQCB0eXBlZGVmIHN0cnVj dCBkcGxsIHsKIAlpbnQJbTsKIAlpbnQJcDsKIH0gaW50ZWxfY2xvY2tfdDsKK3ZvaWQgaW50ZWxf Y2xvY2soc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHJlZmNsaywgaW50ZWxfY2xvY2tfdCAq Y2xvY2spOworCit0eXBlZGVmIHN0cnVjdCBpbnRlbF9saW1pdCBpbnRlbF9saW1pdF90OworY29u c3QgaW50ZWxfbGltaXRfdCAqaW50ZWxfbGltaXQoc3RydWN0IGRybV9jcnRjICpjcnRjLCBpbnQg cmVmY2xrKTsKK2Jvb2wgaW50ZWxfZmluZF9wbGwoY29uc3QgaW50ZWxfbGltaXRfdCAqbGltaXQs IHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJICAgIGludCB0YXJnZXQsIGludCByZWZjbGssIGlu dGVsX2Nsb2NrX3QgKm1hdGNoX2Nsb2NrLAorCQkgICAgaW50ZWxfY2xvY2tfdCAqYmVzdF9jbG9j ayk7CiAKIHN0cnVjdCBpbnRlbF9jcnRjX2NvbmZpZyB7CiAJc3RydWN0IGRybV9kaXNwbGF5X21v ZGUgcmVxdWVzdGVkX21vZGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9saW1pdHMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xpbWl0cy5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NjViNzBmCi0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbGltaXRzLmMKQEAgLTAsMCArMSw2NDggQEAKKy8q CisgKiBDb3B5cmlnaHQgwqkgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Np b24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFp bmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRh dGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUg d2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhl IHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUs IHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQg dG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0 byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhl IGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1 ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29w aWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICog VEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5Z IEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQg VE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxM CisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBD TEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElP TiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBP RiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIK KyAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4 L2RtaS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0 Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cisj aW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZnYWFyYi5oPgorI2luY2x1 ZGUgPGRybS9kcm1fZWRpZC5oPgorI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSAiaW50 ZWxfZHJ2LmgiCisjaW5jbHVkZSA8ZHJtL2k5MTVfZHJtLmg+CisjaW5jbHVkZSAiaTkxNV9kcnYu aCIKKyNpbmNsdWRlICJpOTE1X3RyYWNlLmgiCisjaW5jbHVkZSA8ZHJtL2RybV9kcF9oZWxwZXIu aD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CisjaW5jbHVkZSA8bGludXgvZG1h X3JlbWFwcGluZy5oPgorCit0eXBlZGVmIHN0cnVjdCB7CisJaW50CW1pbiwgbWF4OworfSBpbnRl bF9yYW5nZV90OworCit0eXBlZGVmIHN0cnVjdCB7CisJaW50CWRvdF9saW1pdDsKKwlpbnQJcDJf c2xvdywgcDJfZmFzdDsKK30gaW50ZWxfcDJfdDsKKworc3RydWN0IGludGVsX2xpbWl0IHsKKwlp bnRlbF9yYW5nZV90ICAgZG90LCB2Y28sIG4sIG0sIG0xLCBtMiwgcCwgcDE7CisJaW50ZWxfcDJf dAkgICAgcDI7CisJLyoqCisJICogZmluZF9wbGwoKSAtIEZpbmQgdGhlIGJlc3QgdmFsdWVzIGZv ciB0aGUgUExMCisJICogQGxpbWl0OiBsaW1pdHMgZm9yIHRoZSBQTEwKKwkgKiBAY3J0YzogY3Vy cmVudCBDUlRDCisJICogQHRhcmdldDogdGFyZ2V0IGZyZXF1ZW5jeSBpbiBrSHoKKwkgKiBAcmVm Y2xrOiByZWZlcmVuY2UgY2xvY2sgZnJlcXVlbmN5IGluIGtIegorCSAqIEBtYXRjaF9jbG9jazog aWYgcHJvdmlkZWQsIEBiZXN0X2Nsb2NrIFAgZGl2aWRlciBtdXN0CisJICogICAgICAgICAgICAg ICBtYXRjaCB0aGUgUCBkaXZpZGVyIGZyb20gQG1hdGNoX2Nsb2NrCisJICogICAgICAgICAgICAg ICB1c2VkIGZvciBMVkRTIGRvd25jbG9ja2luZworCSAqIEBiZXN0X2Nsb2NrOiBiZXN0IFBMTCB2 YWx1ZXMgZm91bmQKKwkgKgorCSAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvbiBm YWlsdXJlLgorCSAqLworCWJvb2wgKCpmaW5kX3BsbCkoY29uc3Qgc3RydWN0IGludGVsX2xpbWl0 ICpsaW1pdCwKKwkJCSBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkgaW50IHRhcmdldCwgaW50 IHJlZmNsaywKKwkJCSBpbnRlbF9jbG9ja190ICptYXRjaF9jbG9jaywKKwkJCSBpbnRlbF9jbG9j a190ICpiZXN0X2Nsb2NrKTsKK307CisKKyNkZWZpbmUgSU5URUxQbGxJbnZhbGlkKHMpICAgZG8g eyAvKiBEUk1fREVCVUcocyk7ICovIHJldHVybiBmYWxzZTsgfSB3aGlsZSAoMCkKKy8qKgorICog UmV0dXJucyB3aGV0aGVyIHRoZSBnaXZlbiBzZXQgb2YgZGl2aXNvcnMgYXJlIHZhbGlkIGZvciBh IGdpdmVuIHJlZmNsayB3aXRoCisgKiB0aGUgZ2l2ZW4gY29ubmVjdG9ycy4KKyAqLworCitzdGF0 aWMgYm9vbCBpbnRlbF9QTExfaXNfdmFsaWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAg ICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgKmxpbWl0LAorCQkJICAgICAgIGNvbnN0IGlu dGVsX2Nsb2NrX3QgKmNsb2NrKQoreworCWlmIChjbG9jay0+cDEgIDwgbGltaXQtPnAxLm1pbiAg fHwgbGltaXQtPnAxLm1heCAgPCBjbG9jay0+cDEpCisJCUlOVEVMUGxsSW52YWxpZCgicDEgb3V0 IG9mIHJhbmdlXG4iKTsKKwlpZiAoY2xvY2stPnAgICA8IGxpbWl0LT5wLm1pbiAgIHx8IGxpbWl0 LT5wLm1heCAgIDwgY2xvY2stPnApCisJCUlOVEVMUGxsSW52YWxpZCgicCBvdXQgb2YgcmFuZ2Vc biIpOworCWlmIChjbG9jay0+bTIgIDwgbGltaXQtPm0yLm1pbiAgfHwgbGltaXQtPm0yLm1heCAg PCBjbG9jay0+bTIpCisJCUlOVEVMUGxsSW52YWxpZCgibTIgb3V0IG9mIHJhbmdlXG4iKTsKKwlp ZiAoY2xvY2stPm0xICA8IGxpbWl0LT5tMS5taW4gIHx8IGxpbWl0LT5tMS5tYXggIDwgY2xvY2st Pm0xKQorCQlJTlRFTFBsbEludmFsaWQoIm0xIG91dCBvZiByYW5nZVxuIik7CisJaWYgKGNsb2Nr LT5tMSA8PSBjbG9jay0+bTIgJiYgIUlTX1BJTkVWSUVXKGRldikpCisJCUlOVEVMUGxsSW52YWxp ZCgibTEgPD0gbTJcbiIpOworCWlmIChjbG9jay0+bSAgIDwgbGltaXQtPm0ubWluICAgfHwgbGlt aXQtPm0ubWF4ICAgPCBjbG9jay0+bSkKKwkJSU5URUxQbGxJbnZhbGlkKCJtIG91dCBvZiByYW5n ZVxuIik7CisJaWYgKGNsb2NrLT5uICAgPCBsaW1pdC0+bi5taW4gICB8fCBsaW1pdC0+bi5tYXgg ICA8IGNsb2NrLT5uKQorCQlJTlRFTFBsbEludmFsaWQoIm4gb3V0IG9mIHJhbmdlXG4iKTsKKwlp ZiAoY2xvY2stPnZjbyA8IGxpbWl0LT52Y28ubWluIHx8IGxpbWl0LT52Y28ubWF4IDwgY2xvY2st PnZjbykKKwkJSU5URUxQbGxJbnZhbGlkKCJ2Y28gb3V0IG9mIHJhbmdlXG4iKTsKKwkvKiBYWFg6 IFdlIG1heSBuZWVkIHRvIGJlIGNoZWNraW5nICJEb3QgY2xvY2siIGRlcGVuZGluZyBvbiB0aGUg bXVsdGlwbGllciwKKwkgKiBjb25uZWN0b3IsIGV0Yy4sIHJhdGhlciB0aGFuIGp1c3QgYSBzaW5n bGUgcmFuZ2UuCisJICovCisJaWYgKGNsb2NrLT5kb3QgPCBsaW1pdC0+ZG90Lm1pbiB8fCBsaW1p dC0+ZG90Lm1heCA8IGNsb2NrLT5kb3QpCisJCUlOVEVMUGxsSW52YWxpZCgiZG90IG91dCBvZiBy YW5nZVxuIik7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wKK2ludGVsX2ZpbmRf YmVzdF9QTEwoY29uc3Qgc3RydWN0IGludGVsX2xpbWl0ICpsaW1pdCwgc3RydWN0IGRybV9jcnRj ICpjcnRjLAorCQkgICAgaW50IHRhcmdldCwgaW50IHJlZmNsaywgaW50ZWxfY2xvY2tfdCAqbWF0 Y2hfY2xvY2ssCisJCSAgICBpbnRlbF9jbG9ja190ICpiZXN0X2Nsb2NrKQorCit7CisJc3RydWN0 IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlpbnRlbF9jbG9ja190IGNsb2NrOworCWlu dCBlcnIgPSB0YXJnZXQ7CisKKwlpZiAoaW50ZWxfcGlwZV9oYXNfdHlwZShjcnRjLCBJTlRFTF9P VVRQVVRfTFZEUykpIHsKKwkJLyoKKwkJICogRm9yIExWRFMganVzdCByZWx5IG9uIGl0cyBjdXJy ZW50IHNldHRpbmdzIGZvciBkdWFsLWNoYW5uZWwuCisJCSAqIFdlIGhhdmVuJ3QgZmlndXJlZCBv dXQgaG93IHRvIHJlbGlhYmx5IHNldCB1cCBkaWZmZXJlbnQKKwkJICogc2luZ2xlL2R1YWwgY2hh bm5lbCBzdGF0ZSwgaWYgd2UgZXZlbiBjYW4uCisJCSAqLworCQlpZiAoaW50ZWxfaXNfZHVhbF9s aW5rX2x2ZHMoZGV2KSkKKwkJCWNsb2NrLnAyID0gbGltaXQtPnAyLnAyX2Zhc3Q7CisJCWVsc2UK KwkJCWNsb2NrLnAyID0gbGltaXQtPnAyLnAyX3Nsb3c7CisJfSBlbHNlIHsKKwkJaWYgKHRhcmdl dCA8IGxpbWl0LT5wMi5kb3RfbGltaXQpCisJCQljbG9jay5wMiA9IGxpbWl0LT5wMi5wMl9zbG93 OworCQllbHNlCisJCQljbG9jay5wMiA9IGxpbWl0LT5wMi5wMl9mYXN0OworCX0KKworCW1lbXNl dChiZXN0X2Nsb2NrLCAwLCBzaXplb2YoKmJlc3RfY2xvY2spKTsKKworCWZvciAoY2xvY2subTEg PSBsaW1pdC0+bTEubWluOyBjbG9jay5tMSA8PSBsaW1pdC0+bTEubWF4OworCSAgICAgY2xvY2su bTErKykgeworCQlmb3IgKGNsb2NrLm0yID0gbGltaXQtPm0yLm1pbjsKKwkJICAgICBjbG9jay5t MiA8PSBsaW1pdC0+bTIubWF4OyBjbG9jay5tMisrKSB7CisJCQkvKiBtMSBpcyBhbHdheXMgMCBp biBQaW5ldmlldyAqLworCQkJaWYgKGNsb2NrLm0yID49IGNsb2NrLm0xICYmICFJU19QSU5FVklF VyhkZXYpKQorCQkJCWJyZWFrOworCQkJZm9yIChjbG9jay5uID0gbGltaXQtPm4ubWluOworCQkJ ICAgICBjbG9jay5uIDw9IGxpbWl0LT5uLm1heDsgY2xvY2subisrKSB7CisJCQkJZm9yIChjbG9j ay5wMSA9IGxpbWl0LT5wMS5taW47CisJCQkJCWNsb2NrLnAxIDw9IGxpbWl0LT5wMS5tYXg7IGNs b2NrLnAxKyspIHsKKwkJCQkJaW50IHRoaXNfZXJyOworCisJCQkJCWludGVsX2Nsb2NrKGRldiwg cmVmY2xrLCAmY2xvY2spOworCQkJCQlpZiAoIWludGVsX1BMTF9pc192YWxpZChkZXYsIGxpbWl0 LAorCQkJCQkJCQkmY2xvY2spKQorCQkJCQkJY29udGludWU7CisJCQkJCWlmIChtYXRjaF9jbG9j ayAmJgorCQkJCQkgICAgY2xvY2sucCAhPSBtYXRjaF9jbG9jay0+cCkKKwkJCQkJCWNvbnRpbnVl OworCisJCQkJCXRoaXNfZXJyID0gYWJzKGNsb2NrLmRvdCAtIHRhcmdldCk7CisJCQkJCWlmICh0 aGlzX2VyciA8IGVycikgeworCQkJCQkJKmJlc3RfY2xvY2sgPSBjbG9jazsKKwkJCQkJCWVyciA9 IHRoaXNfZXJyOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJcmV0dXJuIChlcnIg IT0gdGFyZ2V0KTsKK30KKworc3RhdGljIGJvb2wKK2ludGVsX2c0eF9maW5kX2Jlc3RfUExMKGNv bnN0IHN0cnVjdCBpbnRlbF9saW1pdCAqbGltaXQsIHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJ CWludCB0YXJnZXQsIGludCByZWZjbGssIGludGVsX2Nsb2NrX3QgKm1hdGNoX2Nsb2NrLAorCQkJ aW50ZWxfY2xvY2tfdCAqYmVzdF9jbG9jaykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0g Y3J0Yy0+ZGV2OworCWludGVsX2Nsb2NrX3QgY2xvY2s7CisJaW50IG1heF9uOworCWJvb2wgZm91 bmQ7CisJLyogYXBwcm94aW1hdGVseSBlcXVhbHMgdGFyZ2V0ICogMC4wMDU4NSAqLworCWludCBl cnJfbW9zdCA9ICh0YXJnZXQgPj4gOCkgKyAodGFyZ2V0ID4+IDkpOworCWZvdW5kID0gZmFsc2U7 CisKKwlpZiAoaW50ZWxfcGlwZV9oYXNfdHlwZShjcnRjLCBJTlRFTF9PVVRQVVRfTFZEUykpIHsK KwkJaWYgKGludGVsX2lzX2R1YWxfbGlua19sdmRzKGRldikpCisJCQljbG9jay5wMiA9IGxpbWl0 LT5wMi5wMl9mYXN0OworCQllbHNlCisJCQljbG9jay5wMiA9IGxpbWl0LT5wMi5wMl9zbG93Owor CX0gZWxzZSB7CisJCWlmICh0YXJnZXQgPCBsaW1pdC0+cDIuZG90X2xpbWl0KQorCQkJY2xvY2su cDIgPSBsaW1pdC0+cDIucDJfc2xvdzsKKwkJZWxzZQorCQkJY2xvY2sucDIgPSBsaW1pdC0+cDIu cDJfZmFzdDsKKwl9CisKKwltZW1zZXQoYmVzdF9jbG9jaywgMCwgc2l6ZW9mKCpiZXN0X2Nsb2Nr KSk7CisJbWF4X24gPSBsaW1pdC0+bi5tYXg7CisJLyogYmFzZWQgb24gaGFyZHdhcmUgcmVxdWly ZW1lbnQsIHByZWZlciBzbWFsbGVyIG4gdG8gcHJlY2lzaW9uICovCisJZm9yIChjbG9jay5uID0g bGltaXQtPm4ubWluOyBjbG9jay5uIDw9IG1heF9uOyBjbG9jay5uKyspIHsKKwkJLyogYmFzZWQg b24gaGFyZHdhcmUgcmVxdWlyZW1lbnQsIHByZWZlcmUgbGFyZ2VyIG0xLG0yICovCisJCWZvciAo Y2xvY2subTEgPSBsaW1pdC0+bTEubWF4OworCQkgICAgIGNsb2NrLm0xID49IGxpbWl0LT5tMS5t aW47IGNsb2NrLm0xLS0pIHsKKwkJCWZvciAoY2xvY2subTIgPSBsaW1pdC0+bTIubWF4OworCQkJ ICAgICBjbG9jay5tMiA+PSBsaW1pdC0+bTIubWluOyBjbG9jay5tMi0tKSB7CisJCQkJZm9yIChj bG9jay5wMSA9IGxpbWl0LT5wMS5tYXg7CisJCQkJICAgICBjbG9jay5wMSA+PSBsaW1pdC0+cDEu bWluOyBjbG9jay5wMS0tKSB7CisJCQkJCWludCB0aGlzX2VycjsKKworCQkJCQlpbnRlbF9jbG9j ayhkZXYsIHJlZmNsaywgJmNsb2NrKTsKKwkJCQkJaWYgKCFpbnRlbF9QTExfaXNfdmFsaWQoZGV2 LCBsaW1pdCwKKwkJCQkJCQkJJmNsb2NrKSkKKwkJCQkJCWNvbnRpbnVlOworCisJCQkJCXRoaXNf ZXJyID0gYWJzKGNsb2NrLmRvdCAtIHRhcmdldCk7CisJCQkJCWlmICh0aGlzX2VyciA8IGVycl9t b3N0KSB7CisJCQkJCQkqYmVzdF9jbG9jayA9IGNsb2NrOworCQkJCQkJZXJyX21vc3QgPSB0aGlz X2VycjsKKwkJCQkJCW1heF9uID0gY2xvY2subjsKKwkJCQkJCWZvdW5kID0gdHJ1ZTsKKwkJCQkJ fQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gZm91bmQ7Cit9CisKK3N0YXRpYyBib29s CitpbnRlbF92bHZfZmluZF9iZXN0X3BsbChjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgKmxpbWl0 LCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQlpbnQgdGFyZ2V0LCBpbnQgcmVmY2xrLCBpbnRl bF9jbG9ja190ICptYXRjaF9jbG9jaywKKwkJCWludGVsX2Nsb2NrX3QgKmJlc3RfY2xvY2spCit7 CisJdTMyIHAxLCBwMiwgbTEsIG0yLCB2Y28sIGJlc3RuLCBiZXN0bTEsIGJlc3RtMiwgYmVzdHAx LCBiZXN0cDI7CisJdTMyIG0sIG4sIGZhc3RjbGs7CisJdTMyIHVwZHJhdGUsIG1pbnVwZGF0ZSwg ZnJhY2JpdHMsIHA7CisJdW5zaWduZWQgbG9uZyBiZXN0cHBtLCBwcG0sIGFic3BwbTsKKwlpbnQg ZG90Y2xrLCBmbGFnOworCisJZmxhZyA9IDA7CisJZG90Y2xrID0gdGFyZ2V0ICogMTAwMDsKKwli ZXN0cHBtID0gMTAwMDAwMDsKKwlwcG0gPSBhYnNwcG0gPSAwOworCWZhc3RjbGsgPSBkb3RjbGsg LyAoMioxMDApOworCXVwZHJhdGUgPSAwOworCW1pbnVwZGF0ZSA9IDE5MjAwOworCWZyYWNiaXRz ID0gMTsKKwluID0gcCA9IHAxID0gcDIgPSBtID0gbTEgPSBtMiA9IHZjbyA9IGJlc3RuID0gMDsK KwliZXN0bTEgPSBiZXN0bTIgPSBiZXN0cDEgPSBiZXN0cDIgPSAwOworCisJLyogYmFzZWQgb24g aGFyZHdhcmUgcmVxdWlyZW1lbnQsIHByZWZlciBzbWFsbGVyIG4gdG8gcHJlY2lzaW9uICovCisJ Zm9yIChuID0gbGltaXQtPm4ubWluOyBuIDw9ICgocmVmY2xrKSAvIG1pbnVwZGF0ZSk7IG4rKykg eworCQl1cGRyYXRlID0gcmVmY2xrIC8gbjsKKwkJZm9yIChwMSA9IGxpbWl0LT5wMS5tYXg7IHAx ID4gbGltaXQtPnAxLm1pbjsgcDEtLSkgeworCQkJZm9yIChwMiA9IGxpbWl0LT5wMi5wMl9mYXN0 KzE7IHAyID4gMDsgcDItLSkgeworCQkJCWlmIChwMiA+IDEwKQorCQkJCQlwMiA9IHAyIC0gMTsK KwkJCQlwID0gcDEgKiBwMjsKKwkJCQkvKiBiYXNlZCBvbiBoYXJkd2FyZSByZXF1aXJlbWVudCwg cHJlZmVyIGJpZ2dlciBtMSxtMiB2YWx1ZXMgKi8KKwkJCQlmb3IgKG0xID0gbGltaXQtPm0xLm1p bjsgbTEgPD0gbGltaXQtPm0xLm1heDsgbTErKykgeworCQkJCQltMiA9ICgoKDIqKGZhc3RjbGsg KiBwICogbiAvIG0xICkpICsKKwkJCQkJICAgICAgIHJlZmNsaykgLyAoMipyZWZjbGspKTsKKwkJ CQkJbSA9IG0xICogbTI7CisJCQkJCXZjbyA9IHVwZHJhdGUgKiBtOworCQkJCQlpZiAodmNvID49 IGxpbWl0LT52Y28ubWluICYmIHZjbyA8IGxpbWl0LT52Y28ubWF4KSB7CisJCQkJCQlwcG0gPSAx MDAwMDAwICogKCh2Y28gLyBwKSAtIGZhc3RjbGspIC8gZmFzdGNsazsKKwkJCQkJCWFic3BwbSA9 IChwcG0gPiAwKSA/IHBwbSA6ICgtcHBtKTsKKwkJCQkJCWlmIChhYnNwcG0gPCAxMDAgJiYgKChw MSAqIHAyKSA+IChiZXN0cDEgKiBiZXN0cDIpKSkgeworCQkJCQkJCWJlc3RwcG0gPSAwOworCQkJ CQkJCWZsYWcgPSAxOworCQkJCQkJfQorCQkJCQkJaWYgKGFic3BwbSA8IGJlc3RwcG0gLSAxMCkg eworCQkJCQkJCWJlc3RwcG0gPSBhYnNwcG07CisJCQkJCQkJZmxhZyA9IDE7CisJCQkJCQl9CisJ CQkJCQlpZiAoZmxhZykgeworCQkJCQkJCWJlc3RuID0gbjsKKwkJCQkJCQliZXN0bTEgPSBtMTsK KwkJCQkJCQliZXN0bTIgPSBtMjsKKwkJCQkJCQliZXN0cDEgPSBwMTsKKwkJCQkJCQliZXN0cDIg PSBwMjsKKwkJCQkJCQlmbGFnID0gMDsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJ fQorCX0KKwliZXN0X2Nsb2NrLT5uID0gYmVzdG47CisJYmVzdF9jbG9jay0+bTEgPSBiZXN0bTE7 CisJYmVzdF9jbG9jay0+bTIgPSBiZXN0bTI7CisJYmVzdF9jbG9jay0+cDEgPSBiZXN0cDE7CisJ YmVzdF9jbG9jay0+cDIgPSBiZXN0cDI7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGNv bnN0IHN0cnVjdCBpbnRlbF9saW1pdCBpbnRlbF9saW1pdHNfaTh4eF9kdm8gPSB7CisJLmRvdCA9 IHsgLm1pbiA9IDI1MDAwLCAubWF4ID0gMzUwMDAwIH0sCisJLnZjbyA9IHsgLm1pbiA9IDkzMDAw MCwgLm1heCA9IDE0MDAwMDAgfSwKKwkubiA9IHsgLm1pbiA9IDMsIC5tYXggPSAxNiB9LAorCS5t ID0geyAubWluID0gOTYsIC5tYXggPSAxNDAgfSwKKwkubTEgPSB7IC5taW4gPSAxOCwgLm1heCA9 IDI2IH0sCisJLm0yID0geyAubWluID0gNiwgLm1heCA9IDE2IH0sCisJLnAgPSB7IC5taW4gPSA0 LCAubWF4ID0gMTI4IH0sCisJLnAxID0geyAubWluID0gMiwgLm1heCA9IDMzIH0sCisJLnAyID0g eyAuZG90X2xpbWl0ID0gMTY1MDAwLAorCQkucDJfc2xvdyA9IDQsIC5wMl9mYXN0ID0gMiB9LAor CS5maW5kX3BsbCA9IGludGVsX2ZpbmRfYmVzdF9QTEwsCit9OworCitzdGF0aWMgY29uc3Qgc3Ry dWN0IGludGVsX2xpbWl0IGludGVsX2xpbWl0c19pOHh4X2x2ZHMgPSB7CisJLmRvdCA9IHsgLm1p biA9IDI1MDAwLCAubWF4ID0gMzUwMDAwIH0sCisJLnZjbyA9IHsgLm1pbiA9IDkzMDAwMCwgLm1h eCA9IDE0MDAwMDAgfSwKKwkubiA9IHsgLm1pbiA9IDMsIC5tYXggPSAxNiB9LAorCS5tID0geyAu bWluID0gOTYsIC5tYXggPSAxNDAgfSwKKwkubTEgPSB7IC5taW4gPSAxOCwgLm1heCA9IDI2IH0s CisJLm0yID0geyAubWluID0gNiwgLm1heCA9IDE2IH0sCisJLnAgPSB7IC5taW4gPSA0LCAubWF4 ID0gMTI4IH0sCisJLnAxID0geyAubWluID0gMSwgLm1heCA9IDYgfSwKKwkucDIgPSB7IC5kb3Rf bGltaXQgPSAxNjUwMDAsCisJCS5wMl9zbG93ID0gMTQsIC5wMl9mYXN0ID0gNyB9LAorCS5maW5k X3BsbCA9IGludGVsX2ZpbmRfYmVzdF9QTEwsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGlu dGVsX2xpbWl0IGludGVsX2xpbWl0c19pOXh4X3Nkdm8gPSB7CisJLmRvdCA9IHsgLm1pbiA9IDIw MDAwLCAubWF4ID0gNDAwMDAwIH0sCisJLnZjbyA9IHsgLm1pbiA9IDE0MDAwMDAsIC5tYXggPSAy ODAwMDAwIH0sCisJLm4gPSB7IC5taW4gPSAxLCAubWF4ID0gNiB9LAorCS5tID0geyAubWluID0g NzAsIC5tYXggPSAxMjAgfSwKKwkubTEgPSB7IC5taW4gPSA4LCAubWF4ID0gMTggfSwKKwkubTIg PSB7IC5taW4gPSAzLCAubWF4ID0gNyB9LAorCS5wID0geyAubWluID0gNSwgLm1heCA9IDgwIH0s CisJLnAxID0geyAubWluID0gMSwgLm1heCA9IDggfSwKKwkucDIgPSB7IC5kb3RfbGltaXQgPSAy MDAwMDAsCisJCS5wMl9zbG93ID0gMTAsIC5wMl9mYXN0ID0gNSB9LAorCS5maW5kX3BsbCA9IGlu dGVsX2ZpbmRfYmVzdF9QTEwsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2xpbWl0 IGludGVsX2xpbWl0c19pOXh4X2x2ZHMgPSB7CisJLmRvdCA9IHsgLm1pbiA9IDIwMDAwLCAubWF4 ID0gNDAwMDAwIH0sCisJLnZjbyA9IHsgLm1pbiA9IDE0MDAwMDAsIC5tYXggPSAyODAwMDAwIH0s CisJLm4gPSB7IC5taW4gPSAxLCAubWF4ID0gNiB9LAorCS5tID0geyAubWluID0gNzAsIC5tYXgg PSAxMjAgfSwKKwkubTEgPSB7IC5taW4gPSA4LCAubWF4ID0gMTggfSwKKwkubTIgPSB7IC5taW4g PSAzLCAubWF4ID0gNyB9LAorCS5wID0geyAubWluID0gNywgLm1heCA9IDk4IH0sCisJLnAxID0g eyAubWluID0gMSwgLm1heCA9IDggfSwKKwkucDIgPSB7IC5kb3RfbGltaXQgPSAxMTIwMDAsCisJ CS5wMl9zbG93ID0gMTQsIC5wMl9mYXN0ID0gNyB9LAorCS5maW5kX3BsbCA9IGludGVsX2ZpbmRf YmVzdF9QTEwsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2xpbWl0IGludGVsX2xp bWl0c19nNHhfc2R2byA9IHsKKwkuZG90ID0geyAubWluID0gMjUwMDAsIC5tYXggPSAyNzAwMDAg fSwKKwkudmNvID0geyAubWluID0gMTc1MDAwMCwgLm1heCA9IDM1MDAwMDB9LAorCS5uID0geyAu bWluID0gMSwgLm1heCA9IDQgfSwKKwkubSA9IHsgLm1pbiA9IDEwNCwgLm1heCA9IDEzOCB9LAor CS5tMSA9IHsgLm1pbiA9IDE3LCAubWF4ID0gMjMgfSwKKwkubTIgPSB7IC5taW4gPSA1LCAubWF4 ID0gMTEgfSwKKwkucCA9IHsgLm1pbiA9IDEwLCAubWF4ID0gMzAgfSwKKwkucDEgPSB7IC5taW4g PSAxLCAubWF4ID0gM30sCisJLnAyID0geyAuZG90X2xpbWl0ID0gMjcwMDAwLAorCQkucDJfc2xv dyA9IDEwLAorCQkucDJfZmFzdCA9IDEwCisJfSwKKwkuZmluZF9wbGwgPSBpbnRlbF9nNHhfZmlu ZF9iZXN0X1BMTCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgaW50ZWxf bGltaXRzX2c0eF9oZG1pID0geworCS5kb3QgPSB7IC5taW4gPSAyMjAwMCwgLm1heCA9IDQwMDAw MCB9LAorCS52Y28gPSB7IC5taW4gPSAxNzUwMDAwLCAubWF4ID0gMzUwMDAwMH0sCisJLm4gPSB7 IC5taW4gPSAxLCAubWF4ID0gNCB9LAorCS5tID0geyAubWluID0gMTA0LCAubWF4ID0gMTM4IH0s CisJLm0xID0geyAubWluID0gMTYsIC5tYXggPSAyMyB9LAorCS5tMiA9IHsgLm1pbiA9IDUsIC5t YXggPSAxMSB9LAorCS5wID0geyAubWluID0gNSwgLm1heCA9IDgwIH0sCisJLnAxID0geyAubWlu ID0gMSwgLm1heCA9IDh9LAorCS5wMiA9IHsgLmRvdF9saW1pdCA9IDE2NTAwMCwKKwkJLnAyX3Ns b3cgPSAxMCwgLnAyX2Zhc3QgPSA1IH0sCisJLmZpbmRfcGxsID0gaW50ZWxfZzR4X2ZpbmRfYmVz dF9QTEwsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2xpbWl0IGludGVsX2xpbWl0 c19nNHhfc2luZ2xlX2NoYW5uZWxfbHZkcyA9IHsKKwkuZG90ID0geyAubWluID0gMjAwMDAsIC5t YXggPSAxMTUwMDAgfSwKKwkudmNvID0geyAubWluID0gMTc1MDAwMCwgLm1heCA9IDM1MDAwMDAg fSwKKwkubiA9IHsgLm1pbiA9IDEsIC5tYXggPSAzIH0sCisJLm0gPSB7IC5taW4gPSAxMDQsIC5t YXggPSAxMzggfSwKKwkubTEgPSB7IC5taW4gPSAxNywgLm1heCA9IDIzIH0sCisJLm0yID0geyAu bWluID0gNSwgLm1heCA9IDExIH0sCisJLnAgPSB7IC5taW4gPSAyOCwgLm1heCA9IDExMiB9LAor CS5wMSA9IHsgLm1pbiA9IDIsIC5tYXggPSA4IH0sCisJLnAyID0geyAuZG90X2xpbWl0ID0gMCwK KwkJLnAyX3Nsb3cgPSAxNCwgLnAyX2Zhc3QgPSAxNAorCX0sCisJLmZpbmRfcGxsID0gaW50ZWxf ZzR4X2ZpbmRfYmVzdF9QTEwsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2xpbWl0 IGludGVsX2xpbWl0c19nNHhfZHVhbF9jaGFubmVsX2x2ZHMgPSB7CisJLmRvdCA9IHsgLm1pbiA9 IDgwMDAwLCAubWF4ID0gMjI0MDAwIH0sCisJLnZjbyA9IHsgLm1pbiA9IDE3NTAwMDAsIC5tYXgg PSAzNTAwMDAwIH0sCisJLm4gPSB7IC5taW4gPSAxLCAubWF4ID0gMyB9LAorCS5tID0geyAubWlu ID0gMTA0LCAubWF4ID0gMTM4IH0sCisJLm0xID0geyAubWluID0gMTcsIC5tYXggPSAyMyB9LAor CS5tMiA9IHsgLm1pbiA9IDUsIC5tYXggPSAxMSB9LAorCS5wID0geyAubWluID0gMTQsIC5tYXgg PSA0MiB9LAorCS5wMSA9IHsgLm1pbiA9IDIsIC5tYXggPSA2IH0sCisJLnAyID0geyAuZG90X2xp bWl0ID0gMCwKKwkJLnAyX3Nsb3cgPSA3LCAucDJfZmFzdCA9IDcKKwl9LAorCS5maW5kX3BsbCA9 IGludGVsX2c0eF9maW5kX2Jlc3RfUExMLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRl bF9saW1pdCBpbnRlbF9saW1pdHNfcGluZXZpZXdfc2R2byA9IHsKKwkuZG90ID0geyAubWluID0g MjAwMDAsIC5tYXggPSA0MDAwMDB9LAorCS52Y28gPSB7IC5taW4gPSAxNzAwMDAwLCAubWF4ID0g MzUwMDAwMCB9LAorCS8qIFBpbmV2aWV3J3MgTmNvdW50ZXIgaXMgYSByaW5nIGNvdW50ZXIgKi8K KwkubiA9IHsgLm1pbiA9IDMsIC5tYXggPSA2IH0sCisJLm0gPSB7IC5taW4gPSAyLCAubWF4ID0g MjU2IH0sCisJLyogUGluZXZpZXcgb25seSBoYXMgb25lIGNvbWJpbmVkIG0gZGl2aWRlciwgd2hp Y2ggd2UgdHJlYXQgYXMgbTIuICovCisJLm0xID0geyAubWluID0gMCwgLm1heCA9IDAgfSwKKwku bTIgPSB7IC5taW4gPSAwLCAubWF4ID0gMjU0IH0sCisJLnAgPSB7IC5taW4gPSA1LCAubWF4ID0g ODAgfSwKKwkucDEgPSB7IC5taW4gPSAxLCAubWF4ID0gOCB9LAorCS5wMiA9IHsgLmRvdF9saW1p dCA9IDIwMDAwMCwKKwkJLnAyX3Nsb3cgPSAxMCwgLnAyX2Zhc3QgPSA1IH0sCisJLmZpbmRfcGxs ID0gaW50ZWxfZmluZF9iZXN0X1BMTCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxf bGltaXQgaW50ZWxfbGltaXRzX3BpbmV2aWV3X2x2ZHMgPSB7CisJLmRvdCA9IHsgLm1pbiA9IDIw MDAwLCAubWF4ID0gNDAwMDAwIH0sCisJLnZjbyA9IHsgLm1pbiA9IDE3MDAwMDAsIC5tYXggPSAz NTAwMDAwIH0sCisJLm4gPSB7IC5taW4gPSAzLCAubWF4ID0gNiB9LAorCS5tID0geyAubWluID0g MiwgLm1heCA9IDI1NiB9LAorCS5tMSA9IHsgLm1pbiA9IDAsIC5tYXggPSAwIH0sCisJLm0yID0g eyAubWluID0gMCwgLm1heCA9IDI1NCB9LAorCS5wID0geyAubWluID0gNywgLm1heCA9IDExMiB9 LAorCS5wMSA9IHsgLm1pbiA9IDEsIC5tYXggPSA4IH0sCisJLnAyID0geyAuZG90X2xpbWl0ID0g MTEyMDAwLAorCQkucDJfc2xvdyA9IDE0LCAucDJfZmFzdCA9IDE0IH0sCisJLmZpbmRfcGxsID0g aW50ZWxfZmluZF9iZXN0X1BMTCwKK307CisKKy8qIElyb25sYWtlIC8gU2FuZHlicmlkZ2UKKyAq CisgKiBXZSBjYWxjdWxhdGUgY2xvY2sgdXNpbmcgKHJlZ2lzdGVyX3ZhbHVlICsgMikgZm9yIE4v TTEvTTIsIHNvIGhlcmUKKyAqIHRoZSByYW5nZSB2YWx1ZSBmb3IgdGhlbSBpcyAoYWN0dWFsX3Zh bHVlIC0gMikuCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgaW50ZWxfbGlt aXRzX2lyb25sYWtlX2RhYyA9IHsKKwkuZG90ID0geyAubWluID0gMjUwMDAsIC5tYXggPSAzNTAw MDAgfSwKKwkudmNvID0geyAubWluID0gMTc2MDAwMCwgLm1heCA9IDM1MTAwMDAgfSwKKwkubiA9 IHsgLm1pbiA9IDEsIC5tYXggPSA1IH0sCisJLm0gPSB7IC5taW4gPSA3OSwgLm1heCA9IDEyNyB9 LAorCS5tMSA9IHsgLm1pbiA9IDEyLCAubWF4ID0gMjIgfSwKKwkubTIgPSB7IC5taW4gPSA1LCAu bWF4ID0gOSB9LAorCS5wID0geyAubWluID0gNSwgLm1heCA9IDgwIH0sCisJLnAxID0geyAubWlu ID0gMSwgLm1heCA9IDggfSwKKwkucDIgPSB7IC5kb3RfbGltaXQgPSAyMjUwMDAsCisJCS5wMl9z bG93ID0gMTAsIC5wMl9mYXN0ID0gNSB9LAorCS5maW5kX3BsbCA9IGludGVsX2c0eF9maW5kX2Jl c3RfUExMLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCBpbnRlbF9saW1p dHNfaXJvbmxha2Vfc2luZ2xlX2x2ZHMgPSB7CisJLmRvdCA9IHsgLm1pbiA9IDI1MDAwLCAubWF4 ID0gMzUwMDAwIH0sCisJLnZjbyA9IHsgLm1pbiA9IDE3NjAwMDAsIC5tYXggPSAzNTEwMDAwIH0s CisJLm4gPSB7IC5taW4gPSAxLCAubWF4ID0gMyB9LAorCS5tID0geyAubWluID0gNzksIC5tYXgg PSAxMTggfSwKKwkubTEgPSB7IC5taW4gPSAxMiwgLm1heCA9IDIyIH0sCisJLm0yID0geyAubWlu ID0gNSwgLm1heCA9IDkgfSwKKwkucCA9IHsgLm1pbiA9IDI4LCAubWF4ID0gMTEyIH0sCisJLnAx ID0geyAubWluID0gMiwgLm1heCA9IDggfSwKKwkucDIgPSB7IC5kb3RfbGltaXQgPSAyMjUwMDAs CisJCS5wMl9zbG93ID0gMTQsIC5wMl9mYXN0ID0gMTQgfSwKKwkuZmluZF9wbGwgPSBpbnRlbF9n NHhfZmluZF9iZXN0X1BMTCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQg aW50ZWxfbGltaXRzX2lyb25sYWtlX2R1YWxfbHZkcyA9IHsKKwkuZG90ID0geyAubWluID0gMjUw MDAsIC5tYXggPSAzNTAwMDAgfSwKKwkudmNvID0geyAubWluID0gMTc2MDAwMCwgLm1heCA9IDM1 MTAwMDAgfSwKKwkubiA9IHsgLm1pbiA9IDEsIC5tYXggPSAzIH0sCisJLm0gPSB7IC5taW4gPSA3 OSwgLm1heCA9IDEyNyB9LAorCS5tMSA9IHsgLm1pbiA9IDEyLCAubWF4ID0gMjIgfSwKKwkubTIg PSB7IC5taW4gPSA1LCAubWF4ID0gOSB9LAorCS5wID0geyAubWluID0gMTQsIC5tYXggPSA1NiB9 LAorCS5wMSA9IHsgLm1pbiA9IDIsIC5tYXggPSA4IH0sCisJLnAyID0geyAuZG90X2xpbWl0ID0g MjI1MDAwLAorCQkucDJfc2xvdyA9IDcsIC5wMl9mYXN0ID0gNyB9LAorCS5maW5kX3BsbCA9IGlu dGVsX2c0eF9maW5kX2Jlc3RfUExMLAorfTsKKworLyogTFZEUyAxMDBtaHogcmVmY2xrIGxpbWl0 cy4gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgaW50ZWxfbGltaXRzX2lyb25s YWtlX3NpbmdsZV9sdmRzXzEwMG0gPSB7CisJLmRvdCA9IHsgLm1pbiA9IDI1MDAwLCAubWF4ID0g MzUwMDAwIH0sCisJLnZjbyA9IHsgLm1pbiA9IDE3NjAwMDAsIC5tYXggPSAzNTEwMDAwIH0sCisJ Lm4gPSB7IC5taW4gPSAxLCAubWF4ID0gMiB9LAorCS5tID0geyAubWluID0gNzksIC5tYXggPSAx MjYgfSwKKwkubTEgPSB7IC5taW4gPSAxMiwgLm1heCA9IDIyIH0sCisJLm0yID0geyAubWluID0g NSwgLm1heCA9IDkgfSwKKwkucCA9IHsgLm1pbiA9IDI4LCAubWF4ID0gMTEyIH0sCisJLnAxID0g eyAubWluID0gMiwgLm1heCA9IDggfSwKKwkucDIgPSB7IC5kb3RfbGltaXQgPSAyMjUwMDAsCisJ CS5wMl9zbG93ID0gMTQsIC5wMl9mYXN0ID0gMTQgfSwKKwkuZmluZF9wbGwgPSBpbnRlbF9nNHhf ZmluZF9iZXN0X1BMTCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgaW50 ZWxfbGltaXRzX2lyb25sYWtlX2R1YWxfbHZkc18xMDBtID0geworCS5kb3QgPSB7IC5taW4gPSAy NTAwMCwgLm1heCA9IDM1MDAwMCB9LAorCS52Y28gPSB7IC5taW4gPSAxNzYwMDAwLCAubWF4ID0g MzUxMDAwMCB9LAorCS5uID0geyAubWluID0gMSwgLm1heCA9IDMgfSwKKwkubSA9IHsgLm1pbiA9 IDc5LCAubWF4ID0gMTI2IH0sCisJLm0xID0geyAubWluID0gMTIsIC5tYXggPSAyMiB9LAorCS5t MiA9IHsgLm1pbiA9IDUsIC5tYXggPSA5IH0sCisJLnAgPSB7IC5taW4gPSAxNCwgLm1heCA9IDQy IH0sCisJLnAxID0geyAubWluID0gMiwgLm1heCA9IDYgfSwKKwkucDIgPSB7IC5kb3RfbGltaXQg PSAyMjUwMDAsCisJCS5wMl9zbG93ID0gNywgLnAyX2Zhc3QgPSA3IH0sCisJLmZpbmRfcGxsID0g aW50ZWxfZzR4X2ZpbmRfYmVzdF9QTEwsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGludGVs X2xpbWl0IGludGVsX2xpbWl0c192bHZfZGFjID0geworCS5kb3QgPSB7IC5taW4gPSAyNTAwMCwg Lm1heCA9IDI3MDAwMCB9LAorCS52Y28gPSB7IC5taW4gPSA0MDAwMDAwLCAubWF4ID0gNjAwMDAw MCB9LAorCS5uID0geyAubWluID0gMSwgLm1heCA9IDcgfSwKKwkubSA9IHsgLm1pbiA9IDIyLCAu bWF4ID0gNDUwIH0sIC8qIGd1ZXNzICovCisJLm0xID0geyAubWluID0gMiwgLm1heCA9IDMgfSwK KwkubTIgPSB7IC5taW4gPSAxMSwgLm1heCA9IDE1NiB9LAorCS5wID0geyAubWluID0gMTAsIC5t YXggPSAzMCB9LAorCS5wMSA9IHsgLm1pbiA9IDEsIC5tYXggPSAzIH0sCisJLnAyID0geyAuZG90 X2xpbWl0ID0gMjcwMDAwLAorCQkucDJfc2xvdyA9IDIsIC5wMl9mYXN0ID0gMjAgfSwKKwkuZmlu ZF9wbGwgPSBpbnRlbF92bHZfZmluZF9iZXN0X3BsbCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgaW50ZWxfbGltaXQgaW50ZWxfbGltaXRzX3Zsdl9oZG1pID0geworCS5kb3QgPSB7IC5taW4g PSAyNTAwMCwgLm1heCA9IDI3MDAwMCB9LAorCS52Y28gPSB7IC5taW4gPSA0MDAwMDAwLCAubWF4 ID0gNjAwMDAwMCB9LAorCS5uID0geyAubWluID0gMSwgLm1heCA9IDcgfSwKKwkubSA9IHsgLm1p biA9IDYwLCAubWF4ID0gMzAwIH0sIC8qIGd1ZXNzICovCisJLm0xID0geyAubWluID0gMiwgLm1h eCA9IDMgfSwKKwkubTIgPSB7IC5taW4gPSAxMSwgLm1heCA9IDE1NiB9LAorCS5wID0geyAubWlu ID0gMTAsIC5tYXggPSAzMCB9LAorCS5wMSA9IHsgLm1pbiA9IDIsIC5tYXggPSAzIH0sCisJLnAy ID0geyAuZG90X2xpbWl0ID0gMjcwMDAwLAorCQkucDJfc2xvdyA9IDIsIC5wMl9mYXN0ID0gMjAg fSwKKwkuZmluZF9wbGwgPSBpbnRlbF92bHZfZmluZF9iZXN0X3BsbCwKK307CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgaW50ZWxfbGltaXRzX3Zsdl9kcCA9IHsKKwkuZG90ID0g eyAubWluID0gMjUwMDAsIC5tYXggPSAyNzAwMDAgfSwKKwkudmNvID0geyAubWluID0gNDAwMDAw MCwgLm1heCA9IDYwMDAwMDAgfSwKKwkubiA9IHsgLm1pbiA9IDEsIC5tYXggPSA3IH0sCisJLm0g PSB7IC5taW4gPSAyMiwgLm1heCA9IDQ1MCB9LAorCS5tMSA9IHsgLm1pbiA9IDIsIC5tYXggPSAz IH0sCisJLm0yID0geyAubWluID0gMTEsIC5tYXggPSAxNTYgfSwKKwkucCA9IHsgLm1pbiA9IDEw LCAubWF4ID0gMzAgfSwKKwkucDEgPSB7IC5taW4gPSAxLCAubWF4ID0gMyB9LAorCS5wMiA9IHsg LmRvdF9saW1pdCA9IDI3MDAwMCwKKwkJLnAyX3Nsb3cgPSAyLCAucDJfZmFzdCA9IDIwIH0sCisJ LmZpbmRfcGxsID0gaW50ZWxfdmx2X2ZpbmRfYmVzdF9wbGwsCit9OworCitzdGF0aWMgY29uc3Qg c3RydWN0IGludGVsX2xpbWl0ICppbnRlbF9pcm9ubGFrZV9saW1pdChzdHJ1Y3QgZHJtX2NydGMg KmNydGMsCisJCQkJCQlpbnQgcmVmY2xrKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBj cnRjLT5kZXY7CisJY29uc3Qgc3RydWN0IGludGVsX2xpbWl0ICpsaW1pdDsKKworCWlmIChpbnRl bF9waXBlX2hhc190eXBlKGNydGMsIElOVEVMX09VVFBVVF9MVkRTKSkgeworCQlpZiAoaW50ZWxf aXNfZHVhbF9saW5rX2x2ZHMoZGV2KSkgeworCQkJaWYgKHJlZmNsayA9PSAxMDAwMDApCisJCQkJ bGltaXQgPSAmaW50ZWxfbGltaXRzX2lyb25sYWtlX2R1YWxfbHZkc18xMDBtOworCQkJZWxzZQor CQkJCWxpbWl0ID0gJmludGVsX2xpbWl0c19pcm9ubGFrZV9kdWFsX2x2ZHM7CisJCX0gZWxzZSB7 CisJCQlpZiAocmVmY2xrID09IDEwMDAwMCkKKwkJCQlsaW1pdCA9ICZpbnRlbF9saW1pdHNfaXJv bmxha2Vfc2luZ2xlX2x2ZHNfMTAwbTsKKwkJCWVsc2UKKwkJCQlsaW1pdCA9ICZpbnRlbF9saW1p dHNfaXJvbmxha2Vfc2luZ2xlX2x2ZHM7CisJCX0KKwl9IGVsc2UKKwkJbGltaXQgPSAmaW50ZWxf bGltaXRzX2lyb25sYWtlX2RhYzsKKworCXJldHVybiBsaW1pdDsKK30KKworc3RhdGljIGNvbnN0 IHN0cnVjdCBpbnRlbF9saW1pdCAqaW50ZWxfZzR4X2xpbWl0KHN0cnVjdCBkcm1fY3J0YyAqY3J0 YykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OworCWNvbnN0IHN0cnVj dCBpbnRlbF9saW1pdCAqbGltaXQ7CisKKwlpZiAoaW50ZWxfcGlwZV9oYXNfdHlwZShjcnRjLCBJ TlRFTF9PVVRQVVRfTFZEUykpIHsKKwkJaWYgKGludGVsX2lzX2R1YWxfbGlua19sdmRzKGRldikp CisJCQlsaW1pdCA9ICZpbnRlbF9saW1pdHNfZzR4X2R1YWxfY2hhbm5lbF9sdmRzOworCQllbHNl CisJCQlsaW1pdCA9ICZpbnRlbF9saW1pdHNfZzR4X3NpbmdsZV9jaGFubmVsX2x2ZHM7CisJfSBl bHNlIGlmIChpbnRlbF9waXBlX2hhc190eXBlKGNydGMsIElOVEVMX09VVFBVVF9IRE1JKSB8fAor CQkgICBpbnRlbF9waXBlX2hhc190eXBlKGNydGMsIElOVEVMX09VVFBVVF9BTkFMT0cpKSB7CisJ CWxpbWl0ID0gJmludGVsX2xpbWl0c19nNHhfaGRtaTsKKwl9IGVsc2UgaWYgKGludGVsX3BpcGVf aGFzX3R5cGUoY3J0YywgSU5URUxfT1VUUFVUX1NEVk8pKSB7CisJCWxpbWl0ID0gJmludGVsX2xp bWl0c19nNHhfc2R2bzsKKwl9IGVsc2UgLyogVGhlIG9wdGlvbiBpcyBmb3Igb3RoZXIgb3V0cHV0 cyAqLworCQlsaW1pdCA9ICZpbnRlbF9saW1pdHNfaTl4eF9zZHZvOworCisJcmV0dXJuIGxpbWl0 OworfQorCitjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgKmludGVsX2xpbWl0KHN0cnVjdCBkcm1f Y3J0YyAqY3J0YywgaW50IHJlZmNsaykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0 Yy0+ZGV2OworCWNvbnN0IHN0cnVjdCBpbnRlbF9saW1pdCAqbGltaXQ7CisKKwlpZiAoSEFTX1BD SF9TUExJVChkZXYpKQorCQlsaW1pdCA9IGludGVsX2lyb25sYWtlX2xpbWl0KGNydGMsIHJlZmNs ayk7CisJZWxzZSBpZiAoSVNfRzRYKGRldikpIHsKKwkJbGltaXQgPSBpbnRlbF9nNHhfbGltaXQo Y3J0Yyk7CisJfSBlbHNlIGlmIChJU19QSU5FVklFVyhkZXYpKSB7CisJCWlmIChpbnRlbF9waXBl X2hhc190eXBlKGNydGMsIElOVEVMX09VVFBVVF9MVkRTKSkKKwkJCWxpbWl0ID0gJmludGVsX2xp bWl0c19waW5ldmlld19sdmRzOworCQllbHNlCisJCQlsaW1pdCA9ICZpbnRlbF9saW1pdHNfcGlu ZXZpZXdfc2R2bzsKKwl9IGVsc2UgaWYgKElTX1ZBTExFWVZJRVcoZGV2KSkgeworCQlpZiAoaW50 ZWxfcGlwZV9oYXNfdHlwZShjcnRjLCBJTlRFTF9PVVRQVVRfQU5BTE9HKSkKKwkJCWxpbWl0ID0g JmludGVsX2xpbWl0c192bHZfZGFjOworCQllbHNlIGlmIChpbnRlbF9waXBlX2hhc190eXBlKGNy dGMsIElOVEVMX09VVFBVVF9IRE1JKSkKKwkJCWxpbWl0ID0gJmludGVsX2xpbWl0c192bHZfaGRt aTsKKwkJZWxzZQorCQkJbGltaXQgPSAmaW50ZWxfbGltaXRzX3Zsdl9kcDsKKwl9IGVsc2UgaWYg KCFJU19HRU4yKGRldikpIHsKKwkJaWYgKGludGVsX3BpcGVfaGFzX3R5cGUoY3J0YywgSU5URUxf T1VUUFVUX0xWRFMpKQorCQkJbGltaXQgPSAmaW50ZWxfbGltaXRzX2k5eHhfbHZkczsKKwkJZWxz ZQorCQkJbGltaXQgPSAmaW50ZWxfbGltaXRzX2k5eHhfc2R2bzsKKwl9IGVsc2UgeworCQlpZiAo aW50ZWxfcGlwZV9oYXNfdHlwZShjcnRjLCBJTlRFTF9PVVRQVVRfTFZEUykpCisJCQlsaW1pdCA9 ICZpbnRlbF9saW1pdHNfaTh4eF9sdmRzOworCQllbHNlCisJCQlsaW1pdCA9ICZpbnRlbF9saW1p dHNfaTh4eF9kdm87CisJfQorCXJldHVybiBsaW1pdDsKK30KKworYm9vbCBpbnRlbF9maW5kX3Bs bChjb25zdCBzdHJ1Y3QgaW50ZWxfbGltaXQgKmxpbWl0LCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMs CisJCSAgICBpbnQgdGFyZ2V0LCBpbnQgcmVmY2xrLCBpbnRlbF9jbG9ja190ICptYXRjaF9jbG9j aywKKwkJICAgIGludGVsX2Nsb2NrX3QgKmJlc3RfY2xvY2spCit7CisJcmV0dXJuIGxpbWl0LT5m aW5kX3BsbChsaW1pdCwgY3J0YywgdGFyZ2V0LCByZWZjbGssCisJCQkgICAgICAgbWF0Y2hfY2xv Y2ssIGJlc3RfY2xvY2spOworfQotLSAKMS43LjkuNQoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9pbnRlbC1nZngK