From mboxrd@z Thu Jan 1 00:00:00 1970 From: Harry Wentland Subject: [PATCH 11/34] drm/amd/display: Remove unused DCE80 compressor Date: Mon, 12 Feb 2018 12:16:02 -0500 Message-ID: <20180212171625.14325-12-harry.wentland@amd.com> References: <20180212171625.14325-1-harry.wentland@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180212171625.14325-1-harry.wentland-5C7GfCeVMHo@public.gmane.org> List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: Harry Wentland Q2hhbmdlLUlkOiBJYTY1YWJjOWMwNTE2YjhiNjRhZGIzNjA2MTA4N2M1YjM1ZDNlYjEwYQpTaWdu ZWQtb2ZmLWJ5OiBIYXJyeSBXZW50bGFuZCA8aGFycnkud2VudGxhbmRAYW1kLmNvbT4KUmV2aWV3 ZWQtYnk6IFRvbnkgQ2hlbmcgPFRvbnkuQ2hlbmdAYW1kLmNvbT4KQWNrZWQtYnk6IEhhcnJ5IFdl bnRsYW5kIDxoYXJyeS53ZW50bGFuZEBhbWQuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9hbWQv ZGlzcGxheS9kYy9kY2U4MC9NYWtlZmlsZSAgICAgIHwgICAyICstCiAuLi4vZHJtL2FtZC9kaXNw bGF5L2RjL2RjZTgwL2RjZTgwX2NvbXByZXNzb3IuYyAgICB8IDgzNCAtLS0tLS0tLS0tLS0tLS0t LS0tLS0KIC4uLi9kcm0vYW1kL2Rpc3BsYXkvZGMvZGNlODAvZGNlODBfY29tcHJlc3Nvci5oICAg IHwgIDc4IC0tCiAzIGZpbGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCA5MTMgZGVsZXRpb25z KC0pCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2Rj ZTgwL2RjZTgwX2NvbXByZXNzb3IuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9hbWQvZGlzcGxheS9kYy9kY2U4MC9kY2U4MF9jb21wcmVzc29yLmgKCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZGNlODAvTWFrZWZpbGUgYi9kcml2ZXJzL2dw dS9kcm0vYW1kL2Rpc3BsYXkvZGMvZGNlODAvTWFrZWZpbGUKaW5kZXggYmMzODhhYTRiMmY1Li42 NjZmY2IyYmRiYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9k Y2U4MC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZGNlODAv TWFrZWZpbGUKQEAgLTIzLDcgKzIzLDcgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSAnY29udHJvbGxl cicgc3ViLWNvbXBvbmVudCBvZiBEQUwuCiAjIEl0IHByb3ZpZGVzIHRoZSBjb250cm9sIGFuZCBz dGF0dXMgb2YgSFcgQ1JUQyBibG9jay4KIAotRENFODAgPSBkY2U4MF90aW1pbmdfZ2VuZXJhdG9y Lm8gZGNlODBfY29tcHJlc3Nvci5vIGRjZTgwX2h3X3NlcXVlbmNlci5vIFwKK0RDRTgwID0gZGNl ODBfdGltaW5nX2dlbmVyYXRvci5vIGRjZTgwX2h3X3NlcXVlbmNlci5vIFwKIAlkY2U4MF9yZXNv dXJjZS5vCiAKIEFNRF9EQUxfRENFODAgPSAkKGFkZHByZWZpeCAkKEFNRERBTFBBVEgpL2RjL2Rj ZTgwLywkKERDRTgwKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9k Yy9kY2U4MC9kY2U4MF9jb21wcmVzc29yLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkv ZGMvZGNlODAvZGNlODBfY29tcHJlc3Nvci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCA5NTFmMmNhYmE5YjMuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rp c3BsYXkvZGMvZGNlODAvZGNlODBfY29tcHJlc3Nvci5jCisrKyAvZGV2L251bGwKQEAgLTEsODM0 ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxMi0xNSBBZHZhbmNlZCBNaWNybyBEZXZpY2Vz LCBJbmMuCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFy Z2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBh bmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCi0gKiB0 byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0 aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJn ZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKLSAqIGFuZC9vciBzZWxsIGNvcGll cyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQotICog U29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBw ZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgotICogYWxsIGNvcGllcyBvciBz dWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJF IElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJF U1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCi0gKiBUSEUgQ09Q WVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERB TUFHRVMgT1IKLSAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09O VFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAotICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4g Q09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCi0gKiBPVEhFUiBERUFM SU5HUyBJTiBUSEUgU09GVFdBUkUuCi0gKgotICogQXV0aG9yczogQU1ECi0gKgotICovCi0KLSNp bmNsdWRlICJkbV9zZXJ2aWNlcy5oIgotCi0jaW5jbHVkZSAiZGNlL2RjZV84XzBfZC5oIgotI2lu Y2x1ZGUgImRjZS9kY2VfOF8wX3NoX21hc2suaCIKLSNpbmNsdWRlICJnbWMvZ21jXzdfMV9zaF9t YXNrLmgiCi0jaW5jbHVkZSAiZ21jL2dtY183XzFfZC5oIgotCi0jaW5jbHVkZSAiaW5jbHVkZS9s b2dnZXJfaW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAiZGNlODBfY29tcHJlc3Nvci5oIgotCi0jZGVm aW5lIERDUF9SRUcocmVnKVwKLQkocmVnICsgY3A4MC0+b2Zmc2V0cy5kY3Bfb2Zmc2V0KQotI2Rl ZmluZSBETUlGX1JFRyhyZWcpXAotCShyZWcgKyBjcDgwLT5vZmZzZXRzLmRtaWZfb2Zmc2V0KQot Ci1zdGF0aWMgY29uc3Qgc3RydWN0IGRjZTgwX2NvbXByZXNzb3JfcmVnX29mZnNldHMgcmVnX29m ZnNldHNbXSA9IHsKLXsKLQkuZGNwX29mZnNldCA9IChtbURDUDBfR1JQSF9DT05UUk9MIC0gbW1E Q1AwX0dSUEhfQ09OVFJPTCksCi0JLmRtaWZfb2Zmc2V0ID0gKG1tRE1JRl9QRzBfRFBHX1BJUEVf RFBNX0NPTlRST0wKLQkJCQkJLSBtbURNSUZfUEcwX0RQR19QSVBFX0RQTV9DT05UUk9MKSwKLX0s Ci17Ci0JLmRjcF9vZmZzZXQgPSAobW1EQ1AxX0dSUEhfQ09OVFJPTCAtIG1tRENQMF9HUlBIX0NP TlRST0wpLAotCS5kbWlmX29mZnNldCA9IChtbURNSUZfUEcxX0RQR19QSVBFX0RQTV9DT05UUk9M Ci0JCQkJCS0gbW1ETUlGX1BHMF9EUEdfUElQRV9EUE1fQ09OVFJPTCksCi19LAotewotCS5kY3Bf b2Zmc2V0ID0gKG1tRENQMl9HUlBIX0NPTlRST0wgLSBtbURDUDBfR1JQSF9DT05UUk9MKSwKLQku ZG1pZl9vZmZzZXQgPSAobW1ETUlGX1BHMl9EUEdfUElQRV9EUE1fQ09OVFJPTAotCQkJCQktIG1t RE1JRl9QRzBfRFBHX1BJUEVfRFBNX0NPTlRST0wpLAotfSwKLXsKLQkuZGNwX29mZnNldCA9ICht bURDUDNfR1JQSF9DT05UUk9MIC0gbW1EQ1AwX0dSUEhfQ09OVFJPTCksCi0JLmRtaWZfb2Zmc2V0 ID0gKG1tRE1JRl9QRzNfRFBHX1BJUEVfRFBNX0NPTlRST0wKLQkJCQkJLSBtbURNSUZfUEcwX0RQ R19QSVBFX0RQTV9DT05UUk9MKSwKLX0sCi17Ci0JLmRjcF9vZmZzZXQgPSAobW1EQ1A0X0dSUEhf Q09OVFJPTCAtIG1tRENQMF9HUlBIX0NPTlRST0wpLAotCS5kbWlmX29mZnNldCA9IChtbURNSUZf UEc0X0RQR19QSVBFX0RQTV9DT05UUk9MCi0JCQkJCS0gbW1ETUlGX1BHMF9EUEdfUElQRV9EUE1f Q09OVFJPTCksCi19LAotewotCS5kY3Bfb2Zmc2V0ID0gKG1tRENQNV9HUlBIX0NPTlRST0wgLSBt bURDUDBfR1JQSF9DT05UUk9MKSwKLQkuZG1pZl9vZmZzZXQgPSAobW1ETUlGX1BHNV9EUEdfUElQ RV9EUE1fQ09OVFJPTAotCQkJCQktIG1tRE1JRl9QRzBfRFBHX1BJUEVfRFBNX0NPTlRST0wpLAot fQotfTsKLQotc3RhdGljIGNvbnN0IHVpbnQzMl90IGRjZThfb25lX2xwdF9jaGFubmVsX21heF9y ZXNvbHV0aW9uID0gMjA0OCAqIDEyMDA7Ci0KLWVudW0gZmJjX2lkbGVfZm9yY2UgewotCS8qIEJp dCAwIC0gRGlzcGxheSByZWdpc3RlcnMgdXBkYXRlZCAqLwotCUZCQ19JRExFX0ZPUkNFX0RJU1BM QVlfUkVHSVNURVJfVVBEQVRFID0gMHgwMDAwMDAwMSwKLQotCS8qIEJpdCAyIC0gRkJDX0dSUEhf Q09NUF9FTiByZWdpc3RlciB1cGRhdGVkICovCi0JRkJDX0lETEVfRk9SQ0VfR1JQSF9DT01QX0VO ID0gMHgwMDAwMDAwMiwKLQkvKiBCaXQgMyAtIEZCQ19TUkNfU0VMIHJlZ2lzdGVyIHVwZGF0ZWQg Ki8KLQlGQkNfSURMRV9GT1JDRV9TUkNfU0VMX0NIQU5HRSA9IDB4MDAwMDAwMDQsCi0JLyogQml0 IDQgLSBGQkNfTUlOX0NPTVBSRVNTSU9OIHJlZ2lzdGVyIHVwZGF0ZWQgKi8KLQlGQkNfSURMRV9G T1JDRV9NSU5fQ09NUFJFU1NJT05fQ0hBTkdFID0gMHgwMDAwMDAwOCwKLQkvKiBCaXQgNSAtIEZC Q19BTFBIQV9DT01QX0VOIHJlZ2lzdGVyIHVwZGF0ZWQgKi8KLQlGQkNfSURMRV9GT1JDRV9BTFBI QV9DT01QX0VOID0gMHgwMDAwMDAxMCwKLQkvKiBCaXQgNiAtIEZCQ19aRVJPX0FMUEhBX0NIVU5L X1NLSVBfRU4gcmVnaXN0ZXIgdXBkYXRlZCAqLwotCUZCQ19JRExFX0ZPUkNFX1pFUk9fQUxQSEFf Q0hVTktfU0tJUF9FTiA9IDB4MDAwMDAwMjAsCi0JLyogQml0IDcgLSBGQkNfRk9SQ0VfQ09QWV9U T19DT01QX0JVRiByZWdpc3RlciB1cGRhdGVkICovCi0JRkJDX0lETEVfRk9SQ0VfRk9SQ0VfQ09Q WV9UT19DT01QX0JVRiA9IDB4MDAwMDAwNDAsCi0KLQkvKiBCaXQgMjQgLSBNZW1vcnkgd3JpdGUg dG8gcmVnaW9uIDAgZGVmaW5lZCBieSBNQyByZWdpc3RlcnMuICovCi0JRkJDX0lETEVfRk9SQ0Vf TUVNT1JZX1dSSVRFX1RPX1JFR0lPTjAgPSAweDAxMDAwMDAwLAotCS8qIEJpdCAyNSAtIE1lbW9y eSB3cml0ZSB0byByZWdpb24gMSBkZWZpbmVkIGJ5IE1DIHJlZ2lzdGVycyAqLwotCUZCQ19JRExF X0ZPUkNFX01FTU9SWV9XUklURV9UT19SRUdJT04xID0gMHgwMjAwMDAwMCwKLQkvKiBCaXQgMjYg LSBNZW1vcnkgd3JpdGUgdG8gcmVnaW9uIDIgZGVmaW5lZCBieSBNQyByZWdpc3RlcnMgKi8KLQlG QkNfSURMRV9GT1JDRV9NRU1PUllfV1JJVEVfVE9fUkVHSU9OMiA9IDB4MDQwMDAwMDAsCi0JLyog Qml0IDI3IC0gTWVtb3J5IHdyaXRlIHRvIHJlZ2lvbiAzIGRlZmluZWQgYnkgTUMgcmVnaXN0ZXJz LiAqLwotCUZCQ19JRExFX0ZPUkNFX01FTU9SWV9XUklURV9UT19SRUdJT04zID0gMHgwODAwMDAw MCwKLQotCS8qIEJpdCAyOCAtIE1lbW9yeSB3cml0ZSBmcm9tIGFueSBjbGllbnQgb3RoZXIgdGhh biBNQ0lGICovCi0JRkJDX0lETEVfRk9SQ0VfTUVNT1JZX1dSSVRFX09USEVSX1RIQU5fTUNJRiA9 IDB4MTAwMDAwMDAsCi0JLyogQml0IDI5IC0gQ0cgc3RhdGljcyBzY3JlZW4gc2lnbmFsIGlzIGlu YWN0aXZlICovCi0JRkJDX0lETEVfRk9SQ0VfQ0dfU1RBVElDX1NDUkVFTl9JU19JTkFDVElWRSA9 IDB4MjAwMDAwMDAsCi19OwotCi1zdGF0aWMgdWludDMyX3QgbHB0X3NpemVfYWxpZ25tZW50KHN0 cnVjdCBkY2U4MF9jb21wcmVzc29yICpjcDgwKQotewotCS8qTFBUX0FMSUdOTUVOVCAoaW4gYnl0 ZXMpID0gUk9XX1NJWkUgKiAjQkFOS1MgKiAjIERSQU0gQ0hBTk5FTFMuICovCi0JcmV0dXJuIGNw ODAtPmJhc2UucmF3X3NpemUgKiBjcDgwLT5iYXNlLmJhbmtzX251bSAqCi0JCWNwODAtPmJhc2Uu ZHJhbV9jaGFubmVsc19udW07Ci19Ci0KLXN0YXRpYyB1aW50MzJfdCBscHRfbWVtb3J5X2NvbnRy b2xfY29uZmlnKHN0cnVjdCBkY2U4MF9jb21wcmVzc29yICpjcDgwLAotCXVpbnQzMl90IGxwdF9j b250cm9sKQotewotCS8qTFBUIE1DIENvbmZpZyAqLwotCWlmIChjcDgwLT5iYXNlLm9wdGlvbnMu Yml0cy5MUFRfTUNfQ09ORklHID09IDEpIHsKLQkJLyogUE9TU0lCTEUgVkFMVUVTIGZvciBMUFQg TlVNX1BJUEVTIChEUkFNIENIQU5ORUxTKToKLQkJICogMDAgLSAxIENIQU5ORUwKLQkJICogMDEg LSAyIENIQU5ORUxTCi0JCSAqIDAyIC0gNCBPUiA2IENIQU5ORUxTCi0JCSAqIChPbmx5IGZvciBk aXNjcmV0ZSBHUFUsIE4vQSBmb3IgQ1opCi0JCSAqIDAzIC0gOCBPUiAxMiBDSEFOTkVMUwotCQkg KiAoT25seSBmb3IgZGlzY3JldGUgR1BVLCBOL0EgZm9yIENaKSAqLwotCQlzd2l0Y2ggKGNwODAt PmJhc2UuZHJhbV9jaGFubmVsc19udW0pIHsKLQkJY2FzZSAyOgotCQkJc2V0X3JlZ19maWVsZF92 YWx1ZSgKLQkJCQlscHRfY29udHJvbCwKLQkJCQkxLAotCQkJCUxPV19QT1dFUl9USUxJTkdfQ09O VFJPTCwKLQkJCQlMT1dfUE9XRVJfVElMSU5HX05VTV9QSVBFUyk7Ci0JCQlicmVhazsKLQkJY2Fz ZSAxOgotCQkJc2V0X3JlZ19maWVsZF92YWx1ZSgKLQkJCQlscHRfY29udHJvbCwKLQkJCQkwLAot CQkJCUxPV19QT1dFUl9USUxJTkdfQ09OVFJPTCwKLQkJCQlMT1dfUE9XRVJfVElMSU5HX05VTV9Q SVBFUyk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWRtX2xvZ2dlcl93cml0ZSgKLQkJCQlj cDgwLT5iYXNlLmN0eC0+bG9nZ2VyLCBMT0dfV0FSTklORywKLQkJCQkiJXM6IEludmFsaWQgTFBU IE5VTV9QSVBFUyEhISIsCi0JCQkJX19mdW5jX18pOwotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKiBU aGUgbWFwcGluZyBmb3IgTFBUIE5VTV9CQU5LUyBpcyBpbgotCQkgKiBHUlBIX0NPTlRST0wuR1JQ SF9OVU1fQkFOS1MgcmVnaXN0ZXIgZmllbGQKLQkJICogU3BlY2lmaWVzIHRoZSBudW1iZXIgb2Yg bWVtb3J5IGJhbmtzIGZvciB0aWxpbmcKLQkJICogcHVycG9zZXMuIE9ubHkgYXBwbGllcyB0byAy RCBhbmQgM0QgdGlsaW5nIG1vZGVzLgotCQkgKiBQT1NTSUJMRSBWQUxVRVM6Ci0JCSAqIDAwIC0g RENQX0dSUEhfTlVNX0JBTktTXzJCQU5LOiBBRERSX1NVUkZfMl9CQU5LCi0JCSAqIDAxIC0gRENQ X0dSUEhfTlVNX0JBTktTXzRCQU5LOiBBRERSX1NVUkZfNF9CQU5LCi0JCSAqIDAyIC0gRENQX0dS UEhfTlVNX0JBTktTXzhCQU5LOiBBRERSX1NVUkZfOF9CQU5LCi0JCSAqIDAzIC0gRENQX0dSUEhf TlVNX0JBTktTXzE2QkFOSzogQUREUl9TVVJGXzE2X0JBTksgKi8KLQkJc3dpdGNoIChjcDgwLT5i YXNlLmJhbmtzX251bSkgewotCQljYXNlIDE2OgotCQkJc2V0X3JlZ19maWVsZF92YWx1ZSgKLQkJ CQlscHRfY29udHJvbCwKLQkJCQkzLAotCQkJCUxPV19QT1dFUl9USUxJTkdfQ09OVFJPTCwKLQkJ CQlMT1dfUE9XRVJfVElMSU5HX05VTV9CQU5LUyk7Ci0JCQlicmVhazsKLQkJY2FzZSA4OgotCQkJ c2V0X3JlZ19maWVsZF92YWx1ZSgKLQkJCQlscHRfY29udHJvbCwKLQkJCQkyLAotCQkJCUxPV19Q T1dFUl9USUxJTkdfQ09OVFJPTCwKLQkJCQlMT1dfUE9XRVJfVElMSU5HX05VTV9CQU5LUyk7Ci0J CQlicmVhazsKLQkJY2FzZSA0OgotCQkJc2V0X3JlZ19maWVsZF92YWx1ZSgKLQkJCQlscHRfY29u dHJvbCwKLQkJCQkxLAotCQkJCUxPV19QT1dFUl9USUxJTkdfQ09OVFJPTCwKLQkJCQlMT1dfUE9X RVJfVElMSU5HX05VTV9CQU5LUyk7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJc2V0X3JlZ19m aWVsZF92YWx1ZSgKLQkJCQlscHRfY29udHJvbCwKLQkJCQkwLAotCQkJCUxPV19QT1dFUl9USUxJ TkdfQ09OVFJPTCwKLQkJCQlMT1dfUE9XRVJfVElMSU5HX05VTV9CQU5LUyk7Ci0JCQlicmVhazsK LQkJZGVmYXVsdDoKLQkJCWRtX2xvZ2dlcl93cml0ZSgKLQkJCQljcDgwLT5iYXNlLmN0eC0+bG9n Z2VyLCBMT0dfV0FSTklORywKLQkJCQkiJXM6IEludmFsaWQgTFBUIE5VTV9CQU5LUyEhISIsCi0J CQkJX19mdW5jX18pOwotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKiBUaGUgbWFwcGluZyBpcyBpbiBE TUlGX0FERFJfQ0FMQy4KLQkJICogQUREUl9DT05GSUdfUElQRV9JTlRFUkxFQVZFX1NJWkUgcmVn aXN0ZXIgZmllbGQgZm9yCi0JCSAqIENhcnJpem8gc3BlY2lmaWVzIHRoZSBtZW1vcnkgaW50ZXJs ZWF2ZSBwZXIgcGlwZS4KLQkJICogSXQgZWZmZWN0aXZlbHkgc3BlY2lmaWVzIHRoZSBsb2NhdGlv biBvZiBwaXBlIGJpdHMgaW4KLQkJICogdGhlIG1lbW9yeSBhZGRyZXNzLgotCQkgKiBQT1NTSUJM RSBWQUxVRVM6Ci0JCSAqIDAwIC0gQUREUl9DT05GSUdfUElQRV9JTlRFUkxFQVZFXzI1NkI6IDI1 NiBieXRlCi0JCSAqIGludGVybGVhdmUKLQkJICogMDEgLSBBRERSX0NPTkZJR19QSVBFX0lOVEVS TEVBVkVfNTEyQjogNTEyIGJ5dGUKLQkJICogaW50ZXJsZWF2ZQotCQkgKi8KLQkJc3dpdGNoIChj cDgwLT5iYXNlLmNoYW5uZWxfaW50ZXJsZWF2ZV9zaXplKSB7Ci0JCWNhc2UgMjU2OiAvKjI1NkIg Ki8KLQkJCXNldF9yZWdfZmllbGRfdmFsdWUoCi0JCQkJbHB0X2NvbnRyb2wsCi0JCQkJMCwKLQkJ CQlMT1dfUE9XRVJfVElMSU5HX0NPTlRST0wsCi0JCQkJTE9XX1BPV0VSX1RJTElOR19QSVBFX0lO VEVSTEVBVkVfU0laRSk7Ci0JCQlicmVhazsKLQkJY2FzZSA1MTI6IC8qNTEyQiAqLwotCQkJc2V0 X3JlZ19maWVsZF92YWx1ZSgKLQkJCQlscHRfY29udHJvbCwKLQkJCQkxLAotCQkJCUxPV19QT1dF Ul9USUxJTkdfQ09OVFJPTCwKLQkJCQlMT1dfUE9XRVJfVElMSU5HX1BJUEVfSU5URVJMRUFWRV9T SVpFKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJZG1fbG9nZ2VyX3dyaXRlKAotCQkJCWNw ODAtPmJhc2UuY3R4LT5sb2dnZXIsIExPR19XQVJOSU5HLAotCQkJCSIlczogSW52YWxpZCBMUFQg SU5URVJMRUFWRV9TSVpFISEhIiwKLQkJCQlfX2Z1bmNfXyk7Ci0JCQlicmVhazsKLQkJfQotCi0J CS8qIFRoZSBtYXBwaW5nIGZvciBMT1dfUE9XRVJfVElMSU5HX1JPV19TSVpFIGlzIGluCi0JCSAq IERNSUZfQUREUl9DQUxDLkFERFJfQ09ORklHX1JPV19TSVpFIHJlZ2lzdGVyIGZpZWxkCi0JCSAq IGZvciBDYXJyaXpvLiBTcGVjaWZpZXMgdGhlIHNpemUgb2YgZHJhbSByb3cgaW4gYnl0ZXMuCi0J CSAqIFRoaXMgc2hvdWxkIG1hdGNoIHVwIHdpdGggTk9PRkNPTFMgZmllbGQgaW4KLQkJICogTUNf QVJCX1JBTUNGRyAoUk9XX1NJWkUgPSA0ICogMiBeXiBjb2x1bW5zKS4KLQkJICogVGhpcyByZWdp c3RlciBETUlGX0FERFJfQ0FMQyBpcyBub3QgdXNlZCBieSB0aGUKLQkJICogaGFyZHdhcmUgYXMg aXQgaXMgb25seSB1c2VkIGZvciBhZGRybGliIGFzc2VydGlvbnMuCi0JCSAqIFBPU1NJQkxFIFZB TFVFUzoKLQkJICogMDAgLSBBRERSX0NPTkZJR18xS0JfUk9XOiBUcmVhdCAxS0IgYXMgRFJBTSBy b3cKLQkJICogYm91bmRhcnkKLQkJICogMDEgLSBBRERSX0NPTkZJR18yS0JfUk9XOiBUcmVhdCAy S0IgYXMgRFJBTSByb3cKLQkJICogYm91bmRhcnkKLQkJICogMDIgLSBBRERSX0NPTkZJR180S0Jf Uk9XOiBUcmVhdCA0S0IgYXMgRFJBTSByb3cKLQkJICogYm91bmRhcnkgKi8KLQkJc3dpdGNoIChj cDgwLT5iYXNlLnJhd19zaXplKSB7Ci0JCWNhc2UgNDA5NjogLyo0IEtCICovCi0JCQlzZXRfcmVn X2ZpZWxkX3ZhbHVlKAotCQkJCWxwdF9jb250cm9sLAotCQkJCTIsCi0JCQkJTE9XX1BPV0VSX1RJ TElOR19DT05UUk9MLAotCQkJCUxPV19QT1dFUl9USUxJTkdfUk9XX1NJWkUpOwotCQkJYnJlYWs7 Ci0JCWNhc2UgMjA0ODoKLQkJCXNldF9yZWdfZmllbGRfdmFsdWUoCi0JCQkJbHB0X2NvbnRyb2ws Ci0JCQkJMSwKLQkJCQlMT1dfUE9XRVJfVElMSU5HX0NPTlRST0wsCi0JCQkJTE9XX1BPV0VSX1RJ TElOR19ST1dfU0laRSk7Ci0JCQlicmVhazsKLQkJY2FzZSAxMDI0OgotCQkJc2V0X3JlZ19maWVs ZF92YWx1ZSgKLQkJCQlscHRfY29udHJvbCwKLQkJCQkwLAotCQkJCUxPV19QT1dFUl9USUxJTkdf Q09OVFJPTCwKLQkJCQlMT1dfUE9XRVJfVElMSU5HX1JPV19TSVpFKTsKLQkJCWJyZWFrOwotCQlk ZWZhdWx0OgotCQkJZG1fbG9nZ2VyX3dyaXRlKAotCQkJCWNwODAtPmJhc2UuY3R4LT5sb2dnZXIs IExPR19XQVJOSU5HLAotCQkJCSIlczogSW52YWxpZCBMUFQgUk9XX1NJWkUhISEiLAotCQkJCV9f ZnVuY19fKTsKLQkJCWJyZWFrOwotCQl9Ci0JfSBlbHNlIHsKLQkJZG1fbG9nZ2VyX3dyaXRlKAot CQkJY3A4MC0+YmFzZS5jdHgtPmxvZ2dlciwgTE9HX1dBUk5JTkcsCi0JCQkiJXM6IExQVCBNQyBD b25maWd1cmF0aW9uIGlzIG5vdCBwcm92aWRlZCIsCi0JCQlfX2Z1bmNfXyk7Ci0JfQotCi0JcmV0 dXJuIGxwdF9jb250cm9sOwotfQotCi1zdGF0aWMgYm9vbCBpc19zb3VyY2VfYmlnZ2VyX3RoYW5f ZXBhbmVsX3NpemUoCi0Jc3RydWN0IGRjZTgwX2NvbXByZXNzb3IgKmNwODAsCi0JdWludDMyX3Qg c291cmNlX3ZpZXdfd2lkdGgsCi0JdWludDMyX3Qgc291cmNlX3ZpZXdfaGVpZ2h0KQotewotCWlm IChjcDgwLT5iYXNlLmVtYmVkZGVkX3BhbmVsX2hfc2l6ZSAhPSAwICYmCi0JCWNwODAtPmJhc2Uu ZW1iZWRkZWRfcGFuZWxfdl9zaXplICE9IDAgJiYKLQkJKChzb3VyY2Vfdmlld193aWR0aCAqIHNv dXJjZV92aWV3X2hlaWdodCkgPgotCQkoY3A4MC0+YmFzZS5lbWJlZGRlZF9wYW5lbF9oX3NpemUg KgotCQkJY3A4MC0+YmFzZS5lbWJlZGRlZF9wYW5lbF92X3NpemUpKSkKLQkJcmV0dXJuIHRydWU7 Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyB1aW50MzJfdCBhbGlnbl90b19jaHVua3Nf bnVtYmVyX3Blcl9saW5lKAotCXN0cnVjdCBkY2U4MF9jb21wcmVzc29yICpjcDgwLAotCXVpbnQz Ml90IHBpeGVscykKLXsKLQlyZXR1cm4gMjU2ICogKChwaXhlbHMgKyAyNTUpIC8gMjU2KTsKLX0K LQotc3RhdGljIHZvaWQgd2FpdF9mb3JfZmJjX3N0YXRlX2NoYW5nZWQoCi0Jc3RydWN0IGRjZTgw X2NvbXByZXNzb3IgKmNwODAsCi0JYm9vbCBlbmFibGVkKQotewotCXVpbnQ4X3QgY291bnRlciA9 IDA7Ci0JdWludDMyX3QgYWRkciA9IG1tRkJDX1NUQVRVUzsKLQl1aW50MzJfdCB2YWx1ZTsKLQot CXdoaWxlIChjb3VudGVyIDwgMTApIHsKLQkJdmFsdWUgPSBkbV9yZWFkX3JlZyhjcDgwLT5iYXNl LmN0eCwgYWRkcik7Ci0JCWlmIChnZXRfcmVnX2ZpZWxkX3ZhbHVlKAotCQkJdmFsdWUsCi0JCQlG QkNfU1RBVFVTLAotCQkJRkJDX0VOQUJMRV9TVEFUVVMpID09IGVuYWJsZWQpCi0JCQlicmVhazsK LQkJdWRlbGF5KDEwKTsKLQkJY291bnRlcisrOwotCX0KLQotCWlmIChjb3VudGVyID09IDEwKSB7 Ci0JCWRtX2xvZ2dlcl93cml0ZSgKLQkJCWNwODAtPmJhc2UuY3R4LT5sb2dnZXIsIExPR19XQVJO SU5HLAotCQkJIiVzOiB3YWl0IGNvdW50ZXIgZXhjZWVkZWQsIGNoYW5nZXMgdG8gSFcgbm90IGFw cGxpZWQiLAotCQkJX19mdW5jX18pOwotCX0KLX0KLQotdm9pZCBkY2U4MF9jb21wcmVzc29yX3Bv d2VyX3VwX2ZiYyhzdHJ1Y3QgY29tcHJlc3NvciAqY29tcHJlc3NvcikKLXsKLQl1aW50MzJfdCB2 YWx1ZTsKLQl1aW50MzJfdCBhZGRyOwotCi0JYWRkciA9IG1tRkJDX0NOVEw7Ci0JdmFsdWUgPSBk bV9yZWFkX3JlZyhjb21wcmVzc29yLT5jdHgsIGFkZHIpOwotCXNldF9yZWdfZmllbGRfdmFsdWUo dmFsdWUsIDAsIEZCQ19DTlRMLCBGQkNfR1JQSF9DT01QX0VOKTsKLQlzZXRfcmVnX2ZpZWxkX3Zh bHVlKHZhbHVlLCAxLCBGQkNfQ05UTCwgRkJDX0VOKTsKLQlzZXRfcmVnX2ZpZWxkX3ZhbHVlKHZh bHVlLCAyLCBGQkNfQ05UTCwgRkJDX0NPSEVSRU5DWV9NT0RFKTsKLQlkbV93cml0ZV9yZWcoY29t cHJlc3Nvci0+Y3R4LCBhZGRyLCB2YWx1ZSk7Ci0KLQlhZGRyID0gbW1GQkNfQ09NUF9NT0RFOwot CXZhbHVlID0gZG1fcmVhZF9yZWcoY29tcHJlc3Nvci0+Y3R4LCBhZGRyKTsKLQlzZXRfcmVnX2Zp ZWxkX3ZhbHVlKHZhbHVlLCAxLCBGQkNfQ09NUF9NT0RFLCBGQkNfUkxFX0VOKTsKLQlzZXRfcmVn X2ZpZWxkX3ZhbHVlKHZhbHVlLCAxLCBGQkNfQ09NUF9NT0RFLCBGQkNfRFBDTTRfUkdCX0VOKTsK LQlzZXRfcmVnX2ZpZWxkX3ZhbHVlKHZhbHVlLCAxLCBGQkNfQ09NUF9NT0RFLCBGQkNfSU5EX0VO KTsKLQlkbV93cml0ZV9yZWcoY29tcHJlc3Nvci0+Y3R4LCBhZGRyLCB2YWx1ZSk7Ci0KLQlhZGRy ID0gbW1GQkNfQ09NUF9DTlRMOwotCXZhbHVlID0gZG1fcmVhZF9yZWcoY29tcHJlc3Nvci0+Y3R4 LCBhZGRyKTsKLQlzZXRfcmVnX2ZpZWxkX3ZhbHVlKHZhbHVlLCAxLCBGQkNfQ09NUF9DTlRMLCBG QkNfREVQVEhfUkdCMDhfRU4pOwotCWRtX3dyaXRlX3JlZyhjb21wcmVzc29yLT5jdHgsIGFkZHIs IHZhbHVlKTsKLQkvKkZCQ19NSU5fQ09NUFJFU1NJT04gMCA9PT4gMjoxICovCi0JLyogICAgICAg ICAgICAgICAgICAgIDEgPT0+IDQ6MSAqLwotCS8qICAgICAgICAgICAgICAgICAgICAyID09PiA4 OjEgKi8KLQkvKiAgICAgICAgICAgICAgICAgIDB4RiA9PT4gMToxICovCi0Jc2V0X3JlZ19maWVs ZF92YWx1ZSh2YWx1ZSwgMHhGLCBGQkNfQ09NUF9DTlRMLCBGQkNfTUlOX0NPTVBSRVNTSU9OKTsK LQlkbV93cml0ZV9yZWcoY29tcHJlc3Nvci0+Y3R4LCBhZGRyLCB2YWx1ZSk7Ci0JY29tcHJlc3Nv ci0+bWluX2NvbXByZXNzX3JhdGlvID0gRkJDX0NPTVBSRVNTX1JBVElPXzFUTzE7Ci0KLQl2YWx1 ZSA9IDA7Ci0JZG1fd3JpdGVfcmVnKGNvbXByZXNzb3ItPmN0eCwgbW1GQkNfSU5EX0xVVDAsIHZh bHVlKTsKLQotCXZhbHVlID0gMHhGRkZGRkY7Ci0JZG1fd3JpdGVfcmVnKGNvbXByZXNzb3ItPmN0 eCwgbW1GQkNfSU5EX0xVVDEsIHZhbHVlKTsKLX0KLQotdm9pZCBkY2U4MF9jb21wcmVzc29yX2Vu YWJsZV9mYmMoCi0Jc3RydWN0IGNvbXByZXNzb3IgKmNvbXByZXNzb3IsCi0JdWludDMyX3QgcGF0 aHNfbnVtLAotCXN0cnVjdCBjb21wcl9hZGRyX2FuZF9waXRjaF9wYXJhbXMgKnBhcmFtcykKLXsK LQlzdHJ1Y3QgZGNlODBfY29tcHJlc3NvciAqY3A4MCA9IFRPX0RDRTgwX0NPTVBSRVNTT1IoY29t cHJlc3Nvcik7Ci0KLQlpZiAoY29tcHJlc3Nvci0+b3B0aW9ucy5iaXRzLkZCQ19TVVBQT1JUICYm Ci0JCShjb21wcmVzc29yLT5vcHRpb25zLmJpdHMuRFVNTVlfQkFDS0VORCA9PSAwKSAmJgotCQko IWRjZTgwX2NvbXByZXNzb3JfaXNfZmJjX2VuYWJsZWRfaW5faHcoY29tcHJlc3NvciwgTlVMTCkp ICYmCi0JCSghaXNfc291cmNlX2JpZ2dlcl90aGFuX2VwYW5lbF9zaXplKAotCQkJY3A4MCwKLQkJ CXBhcmFtcy0+c291cmNlX3ZpZXdfd2lkdGgsCi0JCQlwYXJhbXMtPnNvdXJjZV92aWV3X2hlaWdo dCkpKSB7Ci0KLQkJdWludDMyX3QgYWRkcjsKLQkJdWludDMyX3QgdmFsdWU7Ci0KLQkJLyogQmVm b3JlIGVuYWJsaW5nIEZCQyBmaXJzdCBuZWVkIHRvIGVuYWJsZSBMUFQgaWYgYXBwbGljYWJsZQot CQkgKiBMUFQgc3RhdGUgc2hvdWxkIGFsd2F5cyBiZSBjaGFuZ2VkIChlbmFibGUvZGlzYWJsZSkg d2hpbGUgRkJDCi0JCSAqIGlzIGRpc2FibGVkICovCi0JCWlmIChjb21wcmVzc29yLT5vcHRpb25z LmJpdHMuTFBUX1NVUFBPUlQgJiYgKHBhdGhzX251bSA8IDIpICYmCi0JCQkocGFyYW1zLT5zb3Vy Y2Vfdmlld193aWR0aCAqCi0JCQkJcGFyYW1zLT5zb3VyY2Vfdmlld19oZWlnaHQgPD0KLQkJCQlk Y2U4X29uZV9scHRfY2hhbm5lbF9tYXhfcmVzb2x1dGlvbikpIHsKLQkJCWRjZTgwX2NvbXByZXNz b3JfZW5hYmxlX2xwdChjb21wcmVzc29yKTsKLQkJfQotCi0JCWFkZHIgPSBtbUZCQ19DTlRMOwot CQl2YWx1ZSA9IGRtX3JlYWRfcmVnKGNvbXByZXNzb3ItPmN0eCwgYWRkcik7Ci0JCXNldF9yZWdf ZmllbGRfdmFsdWUodmFsdWUsIDEsIEZCQ19DTlRMLCBGQkNfR1JQSF9DT01QX0VOKTsKLQkJc2V0 X3JlZ19maWVsZF92YWx1ZSgKLQkJCXZhbHVlLAotCQkJcGFyYW1zLT5pbnN0LAotCQkJRkJDX0NO VEwsIEZCQ19TUkNfU0VMKTsKLQkJZG1fd3JpdGVfcmVnKGNvbXByZXNzb3ItPmN0eCwgYWRkciwg dmFsdWUpOwotCi0JCS8qIEtlZXAgdHJhY2sgb2YgZW51bSBjb250cm9sbGVyX2lkIEZCQyBpcyBh dHRhY2hlZCB0byAqLwotCQljb21wcmVzc29yLT5pc19lbmFibGVkID0gdHJ1ZTsKLQkJY29tcHJl c3Nvci0+YXR0YWNoZWRfaW5zdCA9IHBhcmFtcy0+aW5zdDsKLQkJY3A4MC0+b2Zmc2V0cyA9IHJl Z19vZmZzZXRzW3BhcmFtcy0+aW5zdF07Ci0KLQkJLypUb2dnbGUgaXQgYXMgdGhlcmUgaXMgYnVn IGluIEhXICovCi0JCXNldF9yZWdfZmllbGRfdmFsdWUodmFsdWUsIDAsIEZCQ19DTlRMLCBGQkNf R1JQSF9DT01QX0VOKTsKLQkJZG1fd3JpdGVfcmVnKGNvbXByZXNzb3ItPmN0eCwgYWRkciwgdmFs dWUpOwotCQlzZXRfcmVnX2ZpZWxkX3ZhbHVlKHZhbHVlLCAxLCBGQkNfQ05UTCwgRkJDX0dSUEhf Q09NUF9FTik7Ci0JCWRtX3dyaXRlX3JlZyhjb21wcmVzc29yLT5jdHgsIGFkZHIsIHZhbHVlKTsK LQotCQl3YWl0X2Zvcl9mYmNfc3RhdGVfY2hhbmdlZChjcDgwLCB0cnVlKTsKLQl9Ci19Ci0KLXZv aWQgZGNlODBfY29tcHJlc3Nvcl9kaXNhYmxlX2ZiYyhzdHJ1Y3QgY29tcHJlc3NvciAqY29tcHJl c3NvcikKLXsKLQlzdHJ1Y3QgZGNlODBfY29tcHJlc3NvciAqY3A4MCA9IFRPX0RDRTgwX0NPTVBS RVNTT1IoY29tcHJlc3Nvcik7Ci0KLQlpZiAoY29tcHJlc3Nvci0+b3B0aW9ucy5iaXRzLkZCQ19T VVBQT1JUICYmCi0JCWRjZTgwX2NvbXByZXNzb3JfaXNfZmJjX2VuYWJsZWRfaW5faHcoY29tcHJl c3NvciwgTlVMTCkpIHsKLQkJdWludDMyX3QgcmVnX2RhdGE7Ci0JCS8qIFR1cm4gb2ZmIGNvbXBy ZXNzaW9uICovCi0JCXJlZ19kYXRhID0gZG1fcmVhZF9yZWcoY29tcHJlc3Nvci0+Y3R4LCBtbUZC Q19DTlRMKTsKLQkJc2V0X3JlZ19maWVsZF92YWx1ZShyZWdfZGF0YSwgMCwgRkJDX0NOVEwsIEZC Q19HUlBIX0NPTVBfRU4pOwotCQlkbV93cml0ZV9yZWcoY29tcHJlc3Nvci0+Y3R4LCBtbUZCQ19D TlRMLCByZWdfZGF0YSk7Ci0KLQkJLyogUmVzZXQgZW51bSBjb250cm9sbGVyX2lkIHRvIHVuZGVm aW5lZCAqLwotCQljb21wcmVzc29yLT5hdHRhY2hlZF9pbnN0ID0gMDsKLQkJY29tcHJlc3Nvci0+ aXNfZW5hYmxlZCA9IGZhbHNlOwotCi0JCS8qIFdoZW5ldmVyIGRpc2FibGluZyBGQkMgbWFrZSBz dXJlIExQVCBpcyBkaXNhYmxlZCBpZiBMUFQKLQkJICogc3VwcG9ydGVkICovCi0JCWlmIChjb21w cmVzc29yLT5vcHRpb25zLmJpdHMuTFBUX1NVUFBPUlQpCi0JCQlkY2U4MF9jb21wcmVzc29yX2Rp c2FibGVfbHB0KGNvbXByZXNzb3IpOwotCi0JCXdhaXRfZm9yX2ZiY19zdGF0ZV9jaGFuZ2VkKGNw ODAsIGZhbHNlKTsKLQl9Ci19Ci0KLWJvb2wgZGNlODBfY29tcHJlc3Nvcl9pc19mYmNfZW5hYmxl ZF9pbl9odygKLQlzdHJ1Y3QgY29tcHJlc3NvciAqY29tcHJlc3NvciwKLQl1aW50MzJfdCAqaW5z dCkKLXsKLQkvKiBDaGVjayB0aGUgaGFyZHdhcmUgcmVnaXN0ZXIgKi8KLQl1aW50MzJfdCB2YWx1 ZTsKLQotCXZhbHVlID0gZG1fcmVhZF9yZWcoY29tcHJlc3Nvci0+Y3R4LCBtbUZCQ19TVEFUVVMp OwotCWlmIChnZXRfcmVnX2ZpZWxkX3ZhbHVlKHZhbHVlLCBGQkNfU1RBVFVTLCBGQkNfRU5BQkxF X1NUQVRVUykpIHsKLQkJaWYgKGluc3QgIT0gTlVMTCkKLQkJCSppbnN0ID0gY29tcHJlc3Nvci0+ YXR0YWNoZWRfaW5zdDsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JdmFsdWUgPSBkbV9yZWFkX3Jl Zyhjb21wcmVzc29yLT5jdHgsIG1tRkJDX0NOVEwpOwotCWlmIChnZXRfcmVnX2ZpZWxkX3ZhbHVl KHZhbHVlLCBGQkNfQ05UTCwgRkJDX0dSUEhfQ09NUF9FTikpIHsKLQkJaWYgKGluc3QgIT0gTlVM TCkKLQkJCSppbnN0ID0JY29tcHJlc3Nvci0+YXR0YWNoZWRfaW5zdDsKLQkJcmV0dXJuIHRydWU7 Ci0JfQotCi0JcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIGRjZTgwX2NvbXByZXNzb3JfaXNfbHB0 X2VuYWJsZWRfaW5faHcoc3RydWN0IGNvbXByZXNzb3IgKmNvbXByZXNzb3IpCi17Ci0JLyogQ2hl Y2sgdGhlIGhhcmR3YXJlIHJlZ2lzdGVyICovCi0JdWludDMyX3QgdmFsdWUgPSBkbV9yZWFkX3Jl Zyhjb21wcmVzc29yLT5jdHgsCi0JCW1tTE9XX1BPV0VSX1RJTElOR19DT05UUk9MKTsKLQotCXJl dHVybiBnZXRfcmVnX2ZpZWxkX3ZhbHVlKAotCQl2YWx1ZSwKLQkJTE9XX1BPV0VSX1RJTElOR19D T05UUk9MLAotCQlMT1dfUE9XRVJfVElMSU5HX0VOQUJMRSk7Ci19Ci0KLXZvaWQgZGNlODBfY29t cHJlc3Nvcl9wcm9ncmFtX2NvbXByZXNzZWRfc3VyZmFjZV9hZGRyZXNzX2FuZF9waXRjaCgKLQlz dHJ1Y3QgY29tcHJlc3NvciAqY29tcHJlc3NvciwKLQlzdHJ1Y3QgY29tcHJfYWRkcl9hbmRfcGl0 Y2hfcGFyYW1zICpwYXJhbXMpCi17Ci0Jc3RydWN0IGRjZTgwX2NvbXByZXNzb3IgKmNwODAgPSBU T19EQ0U4MF9DT01QUkVTU09SKGNvbXByZXNzb3IpOwotCXVpbnQzMl90IHZhbHVlID0gMDsKLQl1 aW50MzJfdCBmYmNfcGl0Y2ggPSAwOwotCXVpbnQzMl90IGNvbXByZXNzZWRfc3VyZl9hZGRyZXNz X2xvd19wYXJ0ID0KLQkJY29tcHJlc3Nvci0+Y29tcHJfc3VyZmFjZV9hZGRyZXNzLmFkZHIubG93 X3BhcnQ7Ci0KLQkvKiBDbGVhciBjb250ZW50IGZpcnN0LiAqLwotCWRtX3dyaXRlX3JlZygKLQkJ Y29tcHJlc3Nvci0+Y3R4LAotCQlEQ1BfUkVHKG1tR1JQSF9DT01QUkVTU19TVVJGQUNFX0FERFJF U1NfSElHSCksCi0JCTApOwotCWRtX3dyaXRlX3JlZyhjb21wcmVzc29yLT5jdHgsCi0JCURDUF9S RUcobW1HUlBIX0NPTVBSRVNTX1NVUkZBQ0VfQUREUkVTUyksIDApOwotCi0JaWYgKGNvbXByZXNz b3ItPm9wdGlvbnMuYml0cy5MUFRfU1VQUE9SVCkgewotCQl1aW50MzJfdCBscHRfYWxpZ25tZW50 ID0gbHB0X3NpemVfYWxpZ25tZW50KGNwODApOwotCi0JCWlmIChscHRfYWxpZ25tZW50ICE9IDAp IHsKLQkJCWNvbXByZXNzZWRfc3VyZl9hZGRyZXNzX2xvd19wYXJ0ID0KLQkJCQkoKGNvbXByZXNz ZWRfc3VyZl9hZGRyZXNzX2xvd19wYXJ0Ci0JCQkJCSsgKGxwdF9hbGlnbm1lbnQgLSAxKSkgLyBs cHRfYWxpZ25tZW50KQotCQkJCQkqIGxwdF9hbGlnbm1lbnQ7Ci0JCX0KLQl9Ci0KLQkvKiBXcml0 ZSBhZGRyZXNzLCBISUdIIGhhcyB0byBiZSBmaXJzdC4gKi8KLQlkbV93cml0ZV9yZWcoY29tcHJl c3Nvci0+Y3R4LAotCQlEQ1BfUkVHKG1tR1JQSF9DT01QUkVTU19TVVJGQUNFX0FERFJFU1NfSElH SCksCi0JCWNvbXByZXNzb3ItPmNvbXByX3N1cmZhY2VfYWRkcmVzcy5hZGRyLmhpZ2hfcGFydCk7 Ci0JZG1fd3JpdGVfcmVnKGNvbXByZXNzb3ItPmN0eCwKLQkJRENQX1JFRyhtbUdSUEhfQ09NUFJF U1NfU1VSRkFDRV9BRERSRVNTKSwKLQkJY29tcHJlc3NlZF9zdXJmX2FkZHJlc3NfbG93X3BhcnQp OwotCi0JZmJjX3BpdGNoID0gYWxpZ25fdG9fY2h1bmtzX251bWJlcl9wZXJfbGluZSgKLQkJY3A4 MCwKLQkJcGFyYW1zLT5zb3VyY2Vfdmlld193aWR0aCk7Ci0KLQlpZiAoY29tcHJlc3Nvci0+bWlu X2NvbXByZXNzX3JhdGlvID09IEZCQ19DT01QUkVTU19SQVRJT18xVE8xKQotCQlmYmNfcGl0Y2gg PSBmYmNfcGl0Y2ggLyA4OwotCWVsc2UKLQkJZG1fbG9nZ2VyX3dyaXRlKAotCQkJY29tcHJlc3Nv ci0+Y3R4LT5sb2dnZXIsIExPR19XQVJOSU5HLAotCQkJIiVzOiBVbmV4cGVjdGVkIERDRTggY29t cHJlc3Npb24gcmF0aW8iLAotCQkJX19mdW5jX18pOwotCi0JLyogQ2xlYXIgY29udGVudCBmaXJz dC4gKi8KLQlkbV93cml0ZV9yZWcoY29tcHJlc3Nvci0+Y3R4LCBEQ1BfUkVHKG1tR1JQSF9DT01Q UkVTU19QSVRDSCksIDApOwotCi0JLyogV3JpdGUgRkJDIFBpdGNoLiAqLwotCXNldF9yZWdfZmll bGRfdmFsdWUoCi0JCXZhbHVlLAotCQlmYmNfcGl0Y2gsCi0JCUdSUEhfQ09NUFJFU1NfUElUQ0gs Ci0JCUdSUEhfQ09NUFJFU1NfUElUQ0gpOwotCWRtX3dyaXRlX3JlZyhjb21wcmVzc29yLT5jdHgs IERDUF9SRUcobW1HUlBIX0NPTVBSRVNTX1BJVENIKSwgdmFsdWUpOwotCi19Ci0KLXZvaWQgZGNl ODBfY29tcHJlc3Nvcl9kaXNhYmxlX2xwdChzdHJ1Y3QgY29tcHJlc3NvciAqY29tcHJlc3NvcikK LXsKLQlzdHJ1Y3QgZGNlODBfY29tcHJlc3NvciAqY3A4MCA9IFRPX0RDRTgwX0NPTVBSRVNTT1Io Y29tcHJlc3Nvcik7Ci0JdWludDMyX3QgdmFsdWU7Ci0JdWludDMyX3QgYWRkcjsKLQl1aW50MzJf dCBpbng7Ci0KLQkvKiBEaXNhYmxlIGFsbCBwaXBlcyBMUFQgU3R1dHRlciAqLwotCWZvciAoaW54 ID0gMDsgaW54IDwgMzsgaW54KyspIHsKLQkJdmFsdWUgPQotCQkJZG1fcmVhZF9yZWcoCi0JCQkJ Y29tcHJlc3Nvci0+Y3R4LAotCQkJCURNSUZfUkVHKG1tRFBHX1BJUEVfU1RVVFRFUl9DT05UUk9M X05PTkxQVENIKSk7Ci0JCXNldF9yZWdfZmllbGRfdmFsdWUoCi0JCQl2YWx1ZSwKLQkJCTAsCi0J CQlEUEdfUElQRV9TVFVUVEVSX0NPTlRST0xfTk9OTFBUQ0gsCi0JCQlTVFVUVEVSX0VOQUJMRV9O T05MUFRDSCk7Ci0JCWRtX3dyaXRlX3JlZygKLQkJCWNvbXByZXNzb3ItPmN0eCwKLQkJCURNSUZf UkVHKG1tRFBHX1BJUEVfU1RVVFRFUl9DT05UUk9MX05PTkxQVENIKSwKLQkJCXZhbHVlKTsKLQl9 Ci0KLQkvKiBEaXNhYmxlIExQVCAqLwotCWFkZHIgPSBtbUxPV19QT1dFUl9USUxJTkdfQ09OVFJP TDsKLQl2YWx1ZSA9IGRtX3JlYWRfcmVnKGNvbXByZXNzb3ItPmN0eCwgYWRkcik7Ci0Jc2V0X3Jl Z19maWVsZF92YWx1ZSgKLQkJdmFsdWUsCi0JCTAsCi0JCUxPV19QT1dFUl9USUxJTkdfQ09OVFJP TCwKLQkJTE9XX1BPV0VSX1RJTElOR19FTkFCTEUpOwotCWRtX3dyaXRlX3JlZyhjb21wcmVzc29y LT5jdHgsIGFkZHIsIHZhbHVlKTsKLQotCS8qIENsZWFyIHNlbGVjdGlvbiBvZiBDaGFubmVsKHMp IGNvbnRhaW5pbmcgQ29tcHJlc3NlZCBTdXJmYWNlICovCi0JYWRkciA9IG1tR01DT05fTFBUX1RB UkdFVDsKLQl2YWx1ZSA9IGRtX3JlYWRfcmVnKGNvbXByZXNzb3ItPmN0eCwgYWRkcik7Ci0Jc2V0 X3JlZ19maWVsZF92YWx1ZSgKLQkJdmFsdWUsCi0JCTB4RkZGRkZGRkYsCi0JCUdNQ09OX0xQVF9U QVJHRVQsCi0JCVNUQ1RSTF9MUFRfVEFSR0VUKTsKLQlkbV93cml0ZV9yZWcoY29tcHJlc3Nvci0+ Y3R4LCBtbUdNQ09OX0xQVF9UQVJHRVQsIHZhbHVlKTsKLX0KLQotdm9pZCBkY2U4MF9jb21wcmVz c29yX2VuYWJsZV9scHQoc3RydWN0IGNvbXByZXNzb3IgKmNvbXByZXNzb3IpCi17Ci0Jc3RydWN0 IGRjZTgwX2NvbXByZXNzb3IgKmNwODAgPSBUT19EQ0U4MF9DT01QUkVTU09SKGNvbXByZXNzb3Ip OwotCXVpbnQzMl90IHZhbHVlOwotCXVpbnQzMl90IGFkZHI7Ci0JdWludDMyX3QgdmFsdWVfY29u dHJvbDsKLQl1aW50MzJfdCBjaGFubmVsczsKLQotCS8qIEVuYWJsZSBMUFQgU3R1dHRlciBmcm9t IERpc3BsYXkgcGlwZSAqLwotCXZhbHVlID0gZG1fcmVhZF9yZWcoY29tcHJlc3Nvci0+Y3R4LAot CQlETUlGX1JFRyhtbURQR19QSVBFX1NUVVRURVJfQ09OVFJPTF9OT05MUFRDSCkpOwotCXNldF9y ZWdfZmllbGRfdmFsdWUoCi0JCXZhbHVlLAotCQkxLAotCQlEUEdfUElQRV9TVFVUVEVSX0NPTlRS T0xfTk9OTFBUQ0gsCi0JCVNUVVRURVJfRU5BQkxFX05PTkxQVENIKTsKLQlkbV93cml0ZV9yZWco Y29tcHJlc3Nvci0+Y3R4LAotCQlETUlGX1JFRyhtbURQR19QSVBFX1NUVVRURVJfQ09OVFJPTF9O T05MUFRDSCksIHZhbHVlKTsKLQotCS8qIFNlbGVjdGlvbiBvZiBDaGFubmVsKHMpIGNvbnRhaW5p bmcgQ29tcHJlc3NlZCBTdXJmYWNlOiAweGZmZmZmZmYKLQkgKiB3aWxsIGRpc2FibGUgTFBULgot CSAqIFNUQ1RSTF9MUFRfVEFSR0VUbiBjb3JyZXNwb25kcyB0byBjaGFubmVsIG4uICovCi0JYWRk ciA9IG1tTE9XX1BPV0VSX1RJTElOR19DT05UUk9MOwotCXZhbHVlX2NvbnRyb2wgPSBkbV9yZWFk X3JlZyhjb21wcmVzc29yLT5jdHgsIGFkZHIpOwotCWNoYW5uZWxzID0gZ2V0X3JlZ19maWVsZF92 YWx1ZSh2YWx1ZV9jb250cm9sLAotCQkJTE9XX1BPV0VSX1RJTElOR19DT05UUk9MLAotCQkJTE9X X1BPV0VSX1RJTElOR19NT0RFKTsKLQotCWFkZHIgPSBtbUdNQ09OX0xQVF9UQVJHRVQ7Ci0JdmFs dWUgPSBkbV9yZWFkX3JlZyhjb21wcmVzc29yLT5jdHgsIGFkZHIpOwotCXNldF9yZWdfZmllbGRf dmFsdWUoCi0JCXZhbHVlLAotCQljaGFubmVscyArIDEsIC8qIG5vdCBtZW50aW9uZWQgaW4gcHJv Z3JhbW1pbmcgZ3VpZGUsCi0JCQkJYnV0IGZvbGxvdyBEQ0U4LjEgKi8KLQkJR01DT05fTFBUX1RB UkdFVCwKLQkJU1RDVFJMX0xQVF9UQVJHRVQpOwotCWRtX3dyaXRlX3JlZyhjb21wcmVzc29yLT5j dHgsIGFkZHIsIHZhbHVlKTsKLQotCS8qIEVuYWJsZSBMUFQgKi8KLQlhZGRyID0gbW1MT1dfUE9X RVJfVElMSU5HX0NPTlRST0w7Ci0JdmFsdWUgPSBkbV9yZWFkX3JlZyhjb21wcmVzc29yLT5jdHgs IGFkZHIpOwotCXNldF9yZWdfZmllbGRfdmFsdWUoCi0JCXZhbHVlLAotCQkxLAotCQlMT1dfUE9X RVJfVElMSU5HX0NPTlRST0wsCi0JCUxPV19QT1dFUl9USUxJTkdfRU5BQkxFKTsKLQlkbV93cml0 ZV9yZWcoY29tcHJlc3Nvci0+Y3R4LCBhZGRyLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgZGNlODBfY29t cHJlc3Nvcl9wcm9ncmFtX2xwdF9jb250cm9sKAotCXN0cnVjdCBjb21wcmVzc29yICpjb21wcmVz c29yLAotCXN0cnVjdCBjb21wcl9hZGRyX2FuZF9waXRjaF9wYXJhbXMgKnBhcmFtcykKLXsKLQlz dHJ1Y3QgZGNlODBfY29tcHJlc3NvciAqY3A4MCA9IFRPX0RDRTgwX0NPTVBSRVNTT1IoY29tcHJl c3Nvcik7Ci0JdWludDMyX3Qgcm93c19wZXJfY2hhbm5lbDsKLQl1aW50MzJfdCBscHRfYWxpZ25t ZW50OwotCXVpbnQzMl90IHNvdXJjZV92aWV3X3dpZHRoOwotCXVpbnQzMl90IHNvdXJjZV92aWV3 X2hlaWdodDsKLQl1aW50MzJfdCBscHRfY29udHJvbCA9IDA7Ci0KLQlpZiAoIWNvbXByZXNzb3It Pm9wdGlvbnMuYml0cy5MUFRfU1VQUE9SVCkKLQkJcmV0dXJuOwotCi0JbHB0X2NvbnRyb2wgPSBk bV9yZWFkX3JlZyhjb21wcmVzc29yLT5jdHgsCi0JCW1tTE9XX1BPV0VSX1RJTElOR19DT05UUk9M KTsKLQotCS8qIFBPU1NJQkxFIFZBTFVFUyBmb3IgTG93IFBvd2VyIFRpbGluZyBNb2RlOgotCSAq IDAwIC0gVXNlIGNoYW5uZWwgMAotCSAqIDAxIC0gVXNlIENoYW5uZWwgMCBhbmQgMQotCSAqIDAy IC0gVXNlIENoYW5uZWwgMCwxLDIsMwotCSAqIDAzIC0gcmVzZXJ2ZWQgKi8KLQlzd2l0Y2ggKGNv bXByZXNzb3ItPmxwdF9jaGFubmVsc19udW0pIHsKLQkvKiBjYXNlIDI6Ci0JICogVXNlIENoYW5u ZWwgMCAmIDEgLyBOb3QgdXNlZCBmb3IgRENFIDExICovCi0JY2FzZSAxOgotCQkvKlVzZSBDaGFu bmVsIDAgZm9yIExQVCBmb3IgRENFIDExICovCi0JCXNldF9yZWdfZmllbGRfdmFsdWUoCi0JCQls cHRfY29udHJvbCwKLQkJCTAsCi0JCQlMT1dfUE9XRVJfVElMSU5HX0NPTlRST0wsCi0JCQlMT1df UE9XRVJfVElMSU5HX01PREUpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlkbV9sb2dnZXJfd3Jp dGUoCi0JCQljb21wcmVzc29yLT5jdHgtPmxvZ2dlciwgTE9HX1dBUk5JTkcsCi0JCQkiJXM6IElu dmFsaWQgc2VsZWN0ZWQgRFJBTSBjaGFubmVscyBmb3IgTFBUISEhIiwKLQkJCV9fZnVuY19fKTsK LQkJYnJlYWs7Ci0JfQotCi0JbHB0X2NvbnRyb2wgPSBscHRfbWVtb3J5X2NvbnRyb2xfY29uZmln KGNwODAsIGxwdF9jb250cm9sKTsKLQotCS8qIFByb2dyYW0gTE9XX1BPV0VSX1RJTElOR19ST1dT X1BFUl9DSEFOIGZpZWxkIHdoaWNoIGRlcGVuZHMgb24KLQkgKiBGQkMgY29tcHJlc3NlZCBzdXJm YWNlIHBpdGNoLgotCSAqIExPV19QT1dFUl9USUxJTkdfUk9XU19QRVJfQ0hBTiA9IFJvdW5kdXAg KChTdXJmYWNlIEhlaWdodCAqCi0JICogU3VyZmFjZSBQaXRjaCkgLyAoUm93IFNpemUgKiBOdW1i ZXIgb2YgQ2hhbm5lbHMgKgotCSAqIE51bWJlciBvZiBCYW5rcykpLiAqLwotCXJvd3NfcGVyX2No YW5uZWwgPSAwOwotCWxwdF9hbGlnbm1lbnQgPSBscHRfc2l6ZV9hbGlnbm1lbnQoY3A4MCk7Ci0J c291cmNlX3ZpZXdfd2lkdGggPQotCQlhbGlnbl90b19jaHVua3NfbnVtYmVyX3Blcl9saW5lKAot CQkJY3A4MCwKLQkJCXBhcmFtcy0+c291cmNlX3ZpZXdfd2lkdGgpOwotCXNvdXJjZV92aWV3X2hl aWdodCA9IChwYXJhbXMtPnNvdXJjZV92aWV3X2hlaWdodCArIDEpICYgKH4weDEpOwotCi0JaWYg KGxwdF9hbGlnbm1lbnQgIT0gMCkgewotCQlyb3dzX3Blcl9jaGFubmVsID0gc291cmNlX3ZpZXdf d2lkdGggKiBzb3VyY2Vfdmlld19oZWlnaHQgKiA0OwotCQlyb3dzX3Blcl9jaGFubmVsID0KLQkJ CShyb3dzX3Blcl9jaGFubmVsICUgbHB0X2FsaWdubWVudCkgPwotCQkJCShyb3dzX3Blcl9jaGFu bmVsIC8gbHB0X2FsaWdubWVudCArIDEpIDoKLQkJCQlyb3dzX3Blcl9jaGFubmVsIC8gbHB0X2Fs aWdubWVudDsKLQl9Ci0KLQlzZXRfcmVnX2ZpZWxkX3ZhbHVlKAotCQlscHRfY29udHJvbCwKLQkJ cm93c19wZXJfY2hhbm5lbCwKLQkJTE9XX1BPV0VSX1RJTElOR19DT05UUk9MLAotCQlMT1dfUE9X RVJfVElMSU5HX1JPV1NfUEVSX0NIQU4pOwotCi0JZG1fd3JpdGVfcmVnKGNvbXByZXNzb3ItPmN0 eCwKLQkJbW1MT1dfUE9XRVJfVElMSU5HX0NPTlRST0wsIGxwdF9jb250cm9sKTsKLX0KLQotLyoK LSAqIERDRSAxMSBGcmFtZSBCdWZmZXIgQ29tcHJlc3Npb24gSW1wbGVtZW50YXRpb24KLSAqLwot Ci12b2lkIGRjZTgwX2NvbXByZXNzb3Jfc2V0X2ZiY19pbnZhbGlkYXRpb25fdHJpZ2dlcnMoCi0J c3RydWN0IGNvbXByZXNzb3IgKmNvbXByZXNzb3IsCi0JdWludDMyX3QgZmJjX3RyaWdnZXIpCi17 Ci0JLyogRGlzYWJsZSByZWdpb24gaGl0IGV2ZW50LCBGQkNfTUVNT1JZX1JFR0lPTl9NQVNLID0g MCAoYml0cyAxNi0xOSkKLQkgKiBmb3IgRENFIDExIHJlZ2lvbnMgY2Fubm90IGJlIHVzZWQgLSBk b2VzIG5vdCB3b3JrIHdpdGggUy9HCi0JICovCi0JdWludDMyX3QgYWRkciA9IG1tRkJDX0NMSUVO VF9SRUdJT05fTUFTSzsKLQl1aW50MzJfdCB2YWx1ZSA9IGRtX3JlYWRfcmVnKGNvbXByZXNzb3It PmN0eCwgYWRkcik7Ci0KLQlzZXRfcmVnX2ZpZWxkX3ZhbHVlKAotCQl2YWx1ZSwKLQkJMCwKLQkJ RkJDX0NMSUVOVF9SRUdJT05fTUFTSywKLQkJRkJDX01FTU9SWV9SRUdJT05fTUFTSyk7Ci0JZG1f d3JpdGVfcmVnKGNvbXByZXNzb3ItPmN0eCwgYWRkciwgdmFsdWUpOwotCi0JLyogU2V0dXAgZXZl bnRzIHdoZW4gdG8gY2xlYXIgYWxsIENTTSBlbnRyaWVzIChlZmZlY3RpdmVseSBtYXJraW5nCi0J ICogY3VycmVudCBjb21wcmVzc2VkIGRhdGEgaW52YWxpZCkKLQkgKiBGb3IgRENFIDExIENTTSBt ZXRhZGF0YSAxMTExMSBtZWFucyAtICJOb3QgQ29tcHJlc3NlZCIKLQkgKiBVc2VkIGFzIHRoZSBp bml0aWFsIHZhbHVlIG9mIHRoZSBtZXRhZGF0YSBzZW50IHRvIHRoZSBjb21wcmVzc29yCi0JICog YWZ0ZXIgaW52YWxpZGF0aW9uLCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBjb21wcmVzc29yIHNob3Vs ZCBhdHRlbXB0Ci0JICogdG8gY29tcHJlc3MgYWxsIGNodW5rcyBvbiB0aGUgY3VycmVudCBwYXNz LiAgQWxzbyB1c2VkIHdoZW4gdGhlIGNodW5rCi0JICogaXMgbm90IHN1Y2Nlc3NmdWxseSB3cml0 dGVuIHRvIG1lbW9yeS4KLQkgKiBXaGVuIHRoaXMgQ1NNIHZhbHVlIGlzIGRldGVjdGVkLCBGQkMg cmVhZHMgZnJvbSB0aGUgdW5jb21wcmVzc2VkCi0JICogYnVmZmVyLiBTZXQgZXZlbnRzIGFjY29y ZGluZyB0byBwYXNzZWQgaW4gdmFsdWUsIHRoZXNlIGV2ZW50cyBhcmUKLQkgKiB2YWxpZCBmb3Ig RENFODoKLQkgKiAgICAgLSBiaXQgIDAgLSBkaXNwbGF5IHJlZ2lzdGVyIHVwZGF0ZWQKLQkgKiAg ICAgLSBiaXQgMjggLSBtZW1vcnkgd3JpdGUgZnJvbSBhbnkgY2xpZW50IGV4Y2VwdCBmcm9tIE1D SUYKLQkgKiAgICAgLSBiaXQgMjkgLSBDRyBzdGF0aWMgc2NyZWVuIHNpZ25hbCBpcyBpbmFjdGl2 ZQotCSAqIEluIGFkZGl0aW9uLCBEQ0U4LjEgYWxzbyBuZWVkcyB0byBzZXQgbmV3IERDRTguMSBz cGVjaWZpYyBldmVudHMKLQkgKiB0aGF0IGFyZSB1c2VkIHRvIHRyaWdnZXIgaW52YWxpZGF0aW9u IG9uIGNlcnRhaW4gcmVnaXN0ZXIgY2hhbmdlcywKLQkgKiBmb3IgZXhhbXBsZSBlbmFibGluZyBv ZiBBbHBoYSBDb21wcmVzc2lvbiBtYXkgdHJpZ2dlciBpbnZhbGlkYXRpb24gb2YKLQkgKiBGQkMg b25jZSBiaXQgaXMgc2V0LiBUaGVzZSBldmVudHMgYXJlIGFzIGZvbGxvd3M6Ci0JICogICAgICAt IEJpdCAyIC0gRkJDX0dSUEhfQ09NUF9FTiByZWdpc3RlciB1cGRhdGVkCi0JICogICAgICAtIEJp dCAzIC0gRkJDX1NSQ19TRUwgcmVnaXN0ZXIgdXBkYXRlZAotCSAqICAgICAgLSBCaXQgNCAtIEZC Q19NSU5fQ09NUFJFU1NJT04gcmVnaXN0ZXIgdXBkYXRlZAotCSAqICAgICAgLSBCaXQgNSAtIEZC Q19BTFBIQV9DT01QX0VOIHJlZ2lzdGVyIHVwZGF0ZWQKLQkgKiAgICAgIC0gQml0IDYgLSBGQkNf WkVST19BTFBIQV9DSFVOS19TS0lQX0VOIHJlZ2lzdGVyIHVwZGF0ZWQKLQkgKiAgICAgIC0gQml0 IDcgLSBGQkNfRk9SQ0VfQ09QWV9UT19DT01QX0JVRiByZWdpc3RlciB1cGRhdGVkCi0JICovCi0J YWRkciA9IG1tRkJDX0lETEVfRk9SQ0VfQ0xFQVJfTUFTSzsKLQl2YWx1ZSA9IGRtX3JlYWRfcmVn KGNvbXByZXNzb3ItPmN0eCwgYWRkcik7Ci0Jc2V0X3JlZ19maWVsZF92YWx1ZSgKLQkJdmFsdWUs Ci0JCWZiY190cmlnZ2VyIHwKLQkJRkJDX0lETEVfRk9SQ0VfR1JQSF9DT01QX0VOIHwKLQkJRkJD X0lETEVfRk9SQ0VfU1JDX1NFTF9DSEFOR0UgfAotCQlGQkNfSURMRV9GT1JDRV9NSU5fQ09NUFJF U1NJT05fQ0hBTkdFIHwKLQkJRkJDX0lETEVfRk9SQ0VfQUxQSEFfQ09NUF9FTiB8Ci0JCUZCQ19J RExFX0ZPUkNFX1pFUk9fQUxQSEFfQ0hVTktfU0tJUF9FTiB8Ci0JCUZCQ19JRExFX0ZPUkNFX0ZP UkNFX0NPUFlfVE9fQ09NUF9CVUYsCi0JCUZCQ19JRExFX0ZPUkNFX0NMRUFSX01BU0ssCi0JCUZC Q19JRExFX0ZPUkNFX0NMRUFSX01BU0spOwotCWRtX3dyaXRlX3JlZyhjb21wcmVzc29yLT5jdHgs IGFkZHIsIHZhbHVlKTsKLX0KLQotdm9pZCBkY2U4MF9jb21wcmVzc29yX2NvbnN0cnVjdChzdHJ1 Y3QgZGNlODBfY29tcHJlc3NvciAqY29tcHJlc3NvciwKLQlzdHJ1Y3QgZGNfY29udGV4dCAqY3R4 KQotewotCXN0cnVjdCBkY19iaW9zICpicCA9IGN0eC0+ZGNfYmlvczsKLQlzdHJ1Y3QgZW1iZWRk ZWRfcGFuZWxfaW5mbyBwYW5lbF9pbmZvOwotCi0JY29tcHJlc3Nvci0+YmFzZS5vcHRpb25zLnJh dyA9IDA7Ci0JY29tcHJlc3Nvci0+YmFzZS5vcHRpb25zLmJpdHMuRkJDX1NVUFBPUlQgPSB0cnVl OwotCWNvbXByZXNzb3ItPmJhc2Uub3B0aW9ucy5iaXRzLkxQVF9TVVBQT1JUID0gdHJ1ZTsKLQkg LyogRm9yIERDRSAxMSBhbHdheXMgdXNlIG9uZSBEUkFNIGNoYW5uZWwgZm9yIExQVCAqLwotCWNv bXByZXNzb3ItPmJhc2UubHB0X2NoYW5uZWxzX251bSA9IDE7Ci0JY29tcHJlc3Nvci0+YmFzZS5v cHRpb25zLmJpdHMuRFVNTVlfQkFDS0VORCA9IGZhbHNlOwotCi0JLyogQ2hlY2sgaWYgdGhpcyBz eXN0ZW0gaGFzIG1vcmUgdGhhbiAxIERSQU0gY2hhbm5lbDsgaWYgb25seSAxIHRoZW4gTFBUCi0J ICogc2hvdWxkIG5vdCBiZSBzdXBwb3J0ZWQgKi8KLQlpZiAoY29tcHJlc3Nvci0+YmFzZS5tZW1v cnlfYnVzX3dpZHRoID09IDY0KQotCQljb21wcmVzc29yLT5iYXNlLm9wdGlvbnMuYml0cy5MUFRf U1VQUE9SVCA9IGZhbHNlOwotCi0JY29tcHJlc3Nvci0+YmFzZS5vcHRpb25zLmJpdHMuQ0xLX0dB VElOR19ESVNBQkxFRCA9IGZhbHNlOwotCi0JY29tcHJlc3Nvci0+YmFzZS5jdHggPSBjdHg7Ci0J Y29tcHJlc3Nvci0+YmFzZS5lbWJlZGRlZF9wYW5lbF9oX3NpemUgPSAwOwotCWNvbXByZXNzb3It PmJhc2UuZW1iZWRkZWRfcGFuZWxfdl9zaXplID0gMDsKLQljb21wcmVzc29yLT5iYXNlLm1lbW9y eV9idXNfd2lkdGggPSBjdHgtPmFzaWNfaWQudnJhbV93aWR0aDsKLQljb21wcmVzc29yLT5iYXNl LmFsbG9jYXRlZF9zaXplID0gMDsKLQljb21wcmVzc29yLT5iYXNlLnByZWZlcnJlZF9yZXF1ZXN0 ZWRfc2l6ZSA9IDA7Ci0JY29tcHJlc3Nvci0+YmFzZS5taW5fY29tcHJlc3NfcmF0aW8gPSBGQkNf Q09NUFJFU1NfUkFUSU9fSU5WQUxJRDsKLQljb21wcmVzc29yLT5iYXNlLmJhbmtzX251bSA9IDA7 Ci0JY29tcHJlc3Nvci0+YmFzZS5yYXdfc2l6ZSA9IDA7Ci0JY29tcHJlc3Nvci0+YmFzZS5jaGFu bmVsX2ludGVybGVhdmVfc2l6ZSA9IDA7Ci0JY29tcHJlc3Nvci0+YmFzZS5kcmFtX2NoYW5uZWxz X251bSA9IDA7Ci0JY29tcHJlc3Nvci0+YmFzZS5scHRfY2hhbm5lbHNfbnVtID0gMDsKLQljb21w cmVzc29yLT5iYXNlLmF0dGFjaGVkX2luc3QgPSAwOwotCWNvbXByZXNzb3ItPmJhc2UuaXNfZW5h YmxlZCA9IGZhbHNlOwotCi0JaWYgKEJQX1JFU1VMVF9PSyA9PQotCQkJYnAtPmZ1bmNzLT5nZXRf ZW1iZWRkZWRfcGFuZWxfaW5mbyhicCwgJnBhbmVsX2luZm8pKSB7Ci0JCWNvbXByZXNzb3ItPmJh c2UuZW1iZWRkZWRfcGFuZWxfaF9zaXplID0KLQkJCXBhbmVsX2luZm8ubGNkX3RpbWluZy5ob3Jp em9udGFsX2FkZHJlc3NhYmxlOwotCQljb21wcmVzc29yLT5iYXNlLmVtYmVkZGVkX3BhbmVsX3Zf c2l6ZSA9Ci0JCQlwYW5lbF9pbmZvLmxjZF90aW1pbmcudmVydGljYWxfYWRkcmVzc2FibGU7Ci0J fQotfQotCi1zdHJ1Y3QgY29tcHJlc3NvciAqZGNlODBfY29tcHJlc3Nvcl9jcmVhdGUoc3RydWN0 IGRjX2NvbnRleHQgKmN0eCkKLXsKLQlzdHJ1Y3QgZGNlODBfY29tcHJlc3NvciAqY3A4MCA9Ci0J CWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkY2U4MF9jb21wcmVzc29yKSwgR0ZQX0tFUk5FTCk7Ci0K LQlpZiAoIWNwODApCi0JCXJldHVybiBOVUxMOwotCi0JZGNlODBfY29tcHJlc3Nvcl9jb25zdHJ1 Y3QoY3A4MCwgY3R4KTsKLQlyZXR1cm4gJmNwODAtPmJhc2U7Ci19Ci0KLXZvaWQgZGNlODBfY29t cHJlc3Nvcl9kZXN0cm95KHN0cnVjdCBjb21wcmVzc29yICoqY29tcHJlc3NvcikKLXsKLQlrZnJl ZShUT19EQ0U4MF9DT01QUkVTU09SKCpjb21wcmVzc29yKSk7Ci0JKmNvbXByZXNzb3IgPSBOVUxM OwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RjZTgwL2Rj ZTgwX2NvbXByZXNzb3IuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kY2U4MC9k Y2U4MF9jb21wcmVzc29yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjYTU4YjA0 NDQwMi4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9k Y2U4MC9kY2U4MF9jb21wcmVzc29yLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0v KiBDb3B5cmlnaHQgMjAxMi0xNSBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCi0gKgotICog UGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJz b24gb2J0YWluaW5nIGEKLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBk b2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBT b2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9u Ci0gKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlz dHJpYnV0ZSwgc3VibGljZW5zZSwKLSAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdh cmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVy bmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAq Ci0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGlj ZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgotICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0 aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJB UyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJ RUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklO RlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCi0gKiBUSEUgQ09QWVJJR0hUIEhPTERFUihT KSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKLSAqIE9U SEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Ig T1RIRVJXSVNFLAotICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRI IFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCi0gKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09G VFdBUkUuCi0gKgotICogQXV0aG9yczogQU1ECi0gKgotICovCi0KLSNpZm5kZWYgX19EQ19DT01Q UkVTU09SX0RDRTgwX0hfXwotI2RlZmluZSBfX0RDX0NPTVBSRVNTT1JfRENFODBfSF9fCi0KLSNp bmNsdWRlICIuLi9pbmMvY29tcHJlc3Nvci5oIgotCi0jZGVmaW5lIFRPX0RDRTgwX0NPTVBSRVNT T1IoY29tcHJlc3NvcilcCi0JY29udGFpbmVyX29mKGNvbXByZXNzb3IsIHN0cnVjdCBkY2U4MF9j b21wcmVzc29yLCBiYXNlKQotCi1zdHJ1Y3QgZGNlODBfY29tcHJlc3Nvcl9yZWdfb2Zmc2V0cyB7 Ci0JdWludDMyX3QgZGNwX29mZnNldDsKLQl1aW50MzJfdCBkbWlmX29mZnNldDsKLX07Ci0KLXN0 cnVjdCBkY2U4MF9jb21wcmVzc29yIHsKLQlzdHJ1Y3QgY29tcHJlc3NvciBiYXNlOwotCXN0cnVj dCBkY2U4MF9jb21wcmVzc29yX3JlZ19vZmZzZXRzIG9mZnNldHM7Ci19OwotCi1zdHJ1Y3QgY29t cHJlc3NvciAqZGNlODBfY29tcHJlc3Nvcl9jcmVhdGUoc3RydWN0IGRjX2NvbnRleHQgKmN0eCk7 Ci0KLXZvaWQgZGNlODBfY29tcHJlc3Nvcl9jb25zdHJ1Y3Qoc3RydWN0IGRjZTgwX2NvbXByZXNz b3IgKmNwODAsCi0JCXN0cnVjdCBkY19jb250ZXh0ICpjdHgpOwotCi12b2lkIGRjZTgwX2NvbXBy ZXNzb3JfZGVzdHJveShzdHJ1Y3QgY29tcHJlc3NvciAqKmNwKTsKLQotLyogRkJDIFJFTEFURUQg Ki8KLXZvaWQgZGNlODBfY29tcHJlc3Nvcl9wb3dlcl91cF9mYmMoc3RydWN0IGNvbXByZXNzb3Ig KmNwKTsKLQotdm9pZCBkY2U4MF9jb21wcmVzc29yX2VuYWJsZV9mYmMoc3RydWN0IGNvbXByZXNz b3IgKmNwLCB1aW50MzJfdCBwYXRoc19udW0sCi0Jc3RydWN0IGNvbXByX2FkZHJfYW5kX3BpdGNo X3BhcmFtcyAqcGFyYW1zKTsKLQotdm9pZCBkY2U4MF9jb21wcmVzc29yX2Rpc2FibGVfZmJjKHN0 cnVjdCBjb21wcmVzc29yICpjcCk7Ci0KLXZvaWQgZGNlODBfY29tcHJlc3Nvcl9zZXRfZmJjX2lu dmFsaWRhdGlvbl90cmlnZ2VycyhzdHJ1Y3QgY29tcHJlc3NvciAqY3AsCi0JdWludDMyX3QgZmJj X3RyaWdnZXIpOwotCi12b2lkIGRjZTgwX2NvbXByZXNzb3JfcHJvZ3JhbV9jb21wcmVzc2VkX3N1 cmZhY2VfYWRkcmVzc19hbmRfcGl0Y2goCi0Jc3RydWN0IGNvbXByZXNzb3IgKmNwLAotCXN0cnVj dCBjb21wcl9hZGRyX2FuZF9waXRjaF9wYXJhbXMgKnBhcmFtcyk7Ci0KLWJvb2wgZGNlODBfY29t cHJlc3Nvcl9pc19mYmNfZW5hYmxlZF9pbl9odyhzdHJ1Y3QgY29tcHJlc3NvciAqY3AsCi0JdWlu dDMyX3QgKmZiY19tYXBwZWRfY3J0Y19pZCk7Ci0KLS8qIExQVCBSRUxBVEVEICovCi12b2lkIGRj ZTgwX2NvbXByZXNzb3JfZW5hYmxlX2xwdChzdHJ1Y3QgY29tcHJlc3NvciAqY3ApOwotCi12b2lk IGRjZTgwX2NvbXByZXNzb3JfZGlzYWJsZV9scHQoc3RydWN0IGNvbXByZXNzb3IgKmNwKTsKLQot dm9pZCBkY2U4MF9jb21wcmVzc29yX3Byb2dyYW1fbHB0X2NvbnRyb2woc3RydWN0IGNvbXByZXNz b3IgKmNwLAotCXN0cnVjdCBjb21wcl9hZGRyX2FuZF9waXRjaF9wYXJhbXMgKnBhcmFtcyk7Ci0K LWJvb2wgZGNlODBfY29tcHJlc3Nvcl9pc19scHRfZW5hYmxlZF9pbl9odyhzdHJ1Y3QgY29tcHJl c3NvciAqY3ApOwotCi0jZW5kaWYKLS0gCjIuMTQuMQoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KYW1kLWdmeCBtYWlsaW5nIGxpc3QKYW1kLWdmeEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9hbWQtZ2Z4Cg==