From owner-freebsd-questions@FreeBSD.ORG Fri Dec 17 11:50:44 2004 Return-Path: Delivered-To: freebsd-questions@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 9F7E816A4CE for ; Fri, 17 Dec 2004 11:50:44 +0000 (GMT) Received: from intranet.ru (intranet.ru [212.164.71.24]) by mx1.FreeBSD.org (Postfix) with ESMTP id EBF2243D58 for ; Fri, 17 Dec 2004 11:50:34 +0000 (GMT) (envelope-from musikcom@ngs.ru) Received: from [172.16.1.1] (HELO mx1.intranet.ru) by intranet.ru (CommuniGate Pro SMTP 4.2.4) with ESMTP id 168526683 for freebsd-questions@freebsd.org; Fri, 17 Dec 2004 17:50:30 +0600 Received: from [194.226.86.5] (account musikcom@ngs.ru) by mx1.intranet.ru (CommuniGate Pro WebUser 4.2.4) with HTTP id 8514806 for freebsd-questions@freebsd.org; Fri, 17 Dec 2004 17:50:21 +0600 From: "musikcom" To: freebsd-questions@freebsd.org X-Mailer: CommuniGate Pro WebUser Interface v.4.2.4 Date: Fri, 17 Dec 2004 17:50:21 +0600 Message-ID: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="_===8514806====mx1.intranet.ru===_" Subject: Trouble with ULE scheduler X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 17 Dec 2004 11:50:44 -0000 This is a multi-part MIME message --_===8514806====mx1.intranet.ru===_ Content-Type: text/plain; charset="KOI8-R"; format="flowed" Content-Transfer-Encoding: 8bit Hello! I have some trouble with ULE scheduler. I have installed FreeBSD 5.3 When I try to use ULE scheduler (by editing GENERIC file), the message "The SCHED_ULE scheduler is broken. Please use SCHED_4BSD" message appear. I do these steps: cd /sys/i386/conf OK edit GENERIC OK config GENERIC OK cd ../compile/GENERIC OK make depend FAILURE I send copy of GENERIC, sched_ule.c files in attachment and also file out.txt Please, help!!! --------------------------------------------------------- http://mobile.ngs.ru/games - Java-игры для мобильников и не только... http://love.ngs.ru - Знакомства в Новосибирске --_===8514806====mx1.intranet.ru===_ Content-Type: text/plain Content-Disposition: attachment; filename="Generic" Content-Transfer-Encoding: base64 IwojIEdFTkVSSUMgLS0gR2VuZXJpYyBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlIGZvciBG cmVlQlNEL2kzODYKIwojIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgZmlsZSwgcGxl YXNlIHJlYWQgdGhlIGhhbmRib29rIHNlY3Rpb24gb24KIyBLZXJuZWwgQ29uZmlndXJhdGlv biBGaWxlczoKIwojICAgIGh0dHA6Ly93d3cuRnJlZUJTRC5vcmcvZG9jL2VuX1VTLklTTzg4 NTktMS9ib29rcy9oYW5kYm9vay9rZXJuZWxjb25maWctY29uZmlnLmh0bWwKIwojIFRoZSBo YW5kYm9vayBpcyBhbHNvIGF2YWlsYWJsZSBsb2NhbGx5IGluIC91c3Ivc2hhcmUvZG9jL2hh bmRib29rCiMgaWYgeW91J3ZlIGluc3RhbGxlZCB0aGUgZG9jIGRpc3RyaWJ1dGlvbiwgb3Ro ZXJ3aXNlIGFsd2F5cyBzZWUgdGhlCiMgRnJlZUJTRCBXb3JsZCBXaWRlIFdlYiBzZXJ2ZXIg KGh0dHA6Ly93d3cuRnJlZUJTRC5vcmcvKSBmb3IgdGhlCiMgbGF0ZXN0IGluZm9ybWF0aW9u LgojCiMgQW4gZXhoYXVzdGl2ZSBsaXN0IG9mIG9wdGlvbnMgYW5kIG1vcmUgZGV0YWlsZWQg ZXhwbGFuYXRpb25zIG9mIHRoZQojIGRldmljZSBsaW5lcyBpcyBhbHNvIHByZXNlbnQgaW4g dGhlIC4uLy4uL2NvbmYvTk9URVMgYW5kIE5PVEVTIGZpbGVzLgojIElmIHlvdSBhcmUgaW4g ZG91YnQgYXMgdG8gdGhlIHB1cnBvc2Ugb3IgbmVjZXNzaXR5IG9mIGEgbGluZSwgY2hlY2sg Zmlyc3QKIyBpbiBOT1RFUy4KIwojICRGcmVlQlNEOiBzcmMvc3lzL2kzODYvY29uZi9HRU5F UklDLHYgMS40MTMuMi42LjIuMiAyMDA0LzEwLzI0IDE4OjAyOjUyIHNjb3R0bCBFeHAgJAoK bWFjaGluZQkJaTM4NgpjcHUJCUk0ODZfQ1BVCmNwdQkJSTU4Nl9DUFUKY3B1CQlJNjg2X0NQ VQppZGVudAkJR0VORVJJQwoKIyBUbyBzdGF0aWNhbGx5IGNvbXBpbGUgaW4gZGV2aWNlIHdp cmluZyBpbnN0ZWFkIG9mIC9ib290L2RldmljZS5oaW50cwojaGludHMJCSJHRU5FUklDLmhp bnRzIgkJIyBEZWZhdWx0IHBsYWNlcyB0byBsb29rIGZvciBkZXZpY2VzLgoKb3B0aW9ucyAJ U0NIRURfVUxFCQkjIDRCU0Qgc2NoZWR1bGVyCm9wdGlvbnMgCUlORVQJCQkjIEludGVyTkVU d29ya2luZwpvcHRpb25zIAlJTkVUNgkJCSMgSVB2NiBjb21tdW5pY2F0aW9ucyBwcm90b2Nv bHMKb3B0aW9ucyAJRkZTCQkJIyBCZXJrZWxleSBGYXN0IEZpbGVzeXN0ZW0Kb3B0aW9ucyAJ U09GVFVQREFURVMJCSMgRW5hYmxlIEZGUyBzb2Z0IHVwZGF0ZXMgc3VwcG9ydApvcHRpb25z IAlVRlNfQUNMCQkJIyBTdXBwb3J0IGZvciBhY2Nlc3MgY29udHJvbCBsaXN0cwpvcHRpb25z IAlVRlNfRElSSEFTSAkJIyBJbXByb3ZlIHBlcmZvcm1hbmNlIG9uIGJpZyBkaXJlY3Rvcmll cwpvcHRpb25zIAlNRF9ST09UCQkJIyBNRCBpcyBhIHBvdGVudGlhbCByb290IGRldmljZQpv cHRpb25zIAlORlNDTElFTlQJCSMgTmV0d29yayBGaWxlc3lzdGVtIENsaWVudApvcHRpb25z IAlORlNTRVJWRVIJCSMgTmV0d29yayBGaWxlc3lzdGVtIFNlcnZlcgpvcHRpb25zIAlORlNf Uk9PVAkJIyBORlMgdXNhYmxlIGFzIC8sIHJlcXVpcmVzIE5GU0NMSUVOVApvcHRpb25zIAlN U0RPU0ZTCQkJIyBNU0RPUyBGaWxlc3lzdGVtCm9wdGlvbnMgCUNEOTY2MAkJCSMgSVNPIDk2 NjAgRmlsZXN5c3RlbQpvcHRpb25zIAlQUk9DRlMJCQkjIFByb2Nlc3MgZmlsZXN5c3RlbSAo cmVxdWlyZXMgUFNFVURPRlMpCm9wdGlvbnMgCVBTRVVET0ZTCQkjIFBzZXVkby1maWxlc3lz dGVtIGZyYW1ld29yawpvcHRpb25zIAlHRU9NX0dQVAkJIyBHVUlEIFBhcnRpdGlvbiBUYWJs ZXMuCm9wdGlvbnMgCUNPTVBBVF80MwkJIyBDb21wYXRpYmxlIHdpdGggQlNEIDQuMyBbS0VF UCBUSElTIV0Kb3B0aW9ucyAJQ09NUEFUX0ZSRUVCU0Q0CQkjIENvbXBhdGlibGUgd2l0aCBG cmVlQlNENApvcHRpb25zIAlTQ1NJX0RFTEFZPTE1MDAwCSMgRGVsYXkgKGluIG1zKSBiZWZv cmUgcHJvYmluZyBTQ1NJCm9wdGlvbnMgCUtUUkFDRQkJCSMga3RyYWNlKDEpIHN1cHBvcnQK b3B0aW9ucyAJU1lTVlNITQkJCSMgU1lTVi1zdHlsZSBzaGFyZWQgbWVtb3J5Cm9wdGlvbnMg CVNZU1ZNU0cJCQkjIFNZU1Ytc3R5bGUgbWVzc2FnZSBxdWV1ZXMKb3B0aW9ucyAJU1lTVlNF TQkJCSMgU1lTVi1zdHlsZSBzZW1hcGhvcmVzCm9wdGlvbnMgCV9LUE9TSVhfUFJJT1JJVFlf U0NIRURVTElORyAjIFBPU0lYIFAxMDAzXzFCIHJlYWwtdGltZSBleHRlbnNpb25zCm9wdGlv bnMgCUtCRF9JTlNUQUxMX0NERVYJIyBpbnN0YWxsIGEgQ0RFViBlbnRyeSBpbiAvZGV2Cm9w dGlvbnMgCUFIQ19SRUdfUFJFVFRZX1BSSU5UCSMgUHJpbnQgcmVnaXN0ZXIgYml0ZmllbGRz IGluIGRlYnVnCgkJCQkJIyBvdXRwdXQuICBBZGRzIH4xMjhrIHRvIGRyaXZlci4Kb3B0aW9u cyAJQUhEX1JFR19QUkVUVFlfUFJJTlQJIyBQcmludCByZWdpc3RlciBiaXRmaWVsZHMgaW4g ZGVidWcKCQkJCQkjIG91dHB1dC4gIEFkZHMgfjIxNWsgdG8gZHJpdmVyLgpvcHRpb25zIAlB REFQVElWRV9HSUFOVAkJIyBHaWFudCBtdXRleCBpcyBhZGFwdGl2ZS4KCmRldmljZQkJYXBp YwkJIyBJL08gQVBJQwoKIyBCdXMgc3VwcG9ydC4gIERvIG5vdCByZW1vdmUgaXNhLCBldmVu IGlmIHlvdSBoYXZlIG5vIGlzYSBzbG90cwpkZXZpY2UJCWlzYQpkZXZpY2UJCWVpc2EKZGV2 aWNlCQlwY2kKCiMgRmxvcHB5IGRyaXZlcwpkZXZpY2UJCWZkYwoKIyBBVEEgYW5kIEFUQVBJ IGRldmljZXMKZGV2aWNlCQlhdGEKZGV2aWNlCQlhdGFkaXNrCQkjIEFUQSBkaXNrIGRyaXZl cwpkZXZpY2UJCWF0YXJhaWQJCSMgQVRBIFJBSUQgZHJpdmVzCmRldmljZQkJYXRhcGljZAkJ IyBBVEFQSSBDRFJPTSBkcml2ZXMKZGV2aWNlCQlhdGFwaWZkCQkjIEFUQVBJIGZsb3BweSBk cml2ZXMKZGV2aWNlCQlhdGFwaXN0CQkjIEFUQVBJIHRhcGUgZHJpdmVzCm9wdGlvbnMgCUFU QV9TVEFUSUNfSUQJIyBTdGF0aWMgZGV2aWNlIG51bWJlcmluZwoKIyBTQ1NJIENvbnRyb2xs ZXJzCmRldmljZQkJYWhiCQkjIEVJU0EgQUhBMTc0MiBmYW1pbHkKZGV2aWNlCQlhaGMJCSMg QUhBMjk0MCBhbmQgb25ib2FyZCBBSUM3eHh4IGRldmljZXMKZGV2aWNlCQlhaGQJCSMgQUhB MzkzMjAvMjkzMjAgYW5kIG9uYm9hcmQgQUlDNzl4eCBkZXZpY2VzCmRldmljZQkJYW1kCQkj IEFNRCA1M0M5NzQgKFRla3JhbSBEQy0zOTAoVCkpCmRldmljZQkJaXNwCQkjIFFsb2dpYyBm YW1pbHkKZGV2aWNlCQltcHQJCSMgTFNJLUxvZ2ljIE1QVC1GdXNpb24KI2RldmljZQkJbmNy CQkjIE5DUi9TeW1iaW9zIExvZ2ljCmRldmljZQkJc3ltCQkjIE5DUi9TeW1iaW9zIExvZ2lj IChuZXdlciBjaGlwc2V0cyArIHRob3NlIG9mIGBuY3InKQpkZXZpY2UJCXRybQkJIyBUZWty YW0gREMzOTVVL1VXL0YgREMzMTVVIGFkYXB0ZXJzCgpkZXZpY2UJCWFkdgkJIyBBZHZhbnN5 cyBTQ1NJIGFkYXB0ZXJzCmRldmljZQkJYWR3CQkjIEFkdmFuc3lzIHdpZGUgU0NTSSBhZGFw dGVycwpkZXZpY2UJCWFoYQkJIyBBZGFwdGVjIDE1NHggU0NTSSBhZGFwdGVycwpkZXZpY2UJ CWFpYwkJIyBBZGFwdGVjIDE1WzAxMl14IFNDU0kgYWRhcHRlcnMsIEFJQy02WzIzXTYwLgpk ZXZpY2UJCWJ0CQkjIEJ1c2xvZ2ljL015bGV4IE11bHRpTWFzdGVyIFNDU0kgYWRhcHRlcnMK CmRldmljZQkJbmN2CQkjIE5DUiA1M0M1MDAKZGV2aWNlCQluc3AJCSMgV29ya2JpdCBOaW5q YSBTQ1NJLTMKZGV2aWNlCQlzdGcJCSMgVE1DIDE4QzMwLzE4QzUwCgojIFNDU0kgcGVyaXBo ZXJhbHMKZGV2aWNlCQlzY2J1cwkJIyBTQ1NJIGJ1cyAocmVxdWlyZWQgZm9yIFNDU0kpCmRl dmljZQkJY2gJCSMgU0NTSSBtZWRpYSBjaGFuZ2VycwpkZXZpY2UJCWRhCQkjIERpcmVjdCBB Y2Nlc3MgKGRpc2tzKQpkZXZpY2UJCXNhCQkjIFNlcXVlbnRpYWwgQWNjZXNzICh0YXBlIGV0 YykKZGV2aWNlCQljZAkJIyBDRApkZXZpY2UJCXBhc3MJCSMgUGFzc3Rocm91Z2ggZGV2aWNl IChkaXJlY3QgU0NTSSBhY2Nlc3MpCmRldmljZQkJc2VzCQkjIFNDU0kgRW52aXJvbm1lbnRh bCBTZXJ2aWNlcyAoYW5kIFNBRi1URSkKCiMgUkFJRCBjb250cm9sbGVycyBpbnRlcmZhY2Vk IHRvIHRoZSBTQ1NJIHN1YnN5c3RlbQpkZXZpY2UJCWFtcgkJIyBBTUkgTWVnYVJBSUQKZGV2 aWNlCQlhc3IJCSMgRFBUIFNtYXJ0UkFJRCBWLCBWSSBhbmQgQWRhcHRlYyBTQ1NJIFJBSUQK ZGV2aWNlCQljaXNzCQkjIENvbXBhcSBTbWFydCBSQUlEIDUqCmRldmljZQkJZHB0CQkjIERQ VCBTbWFydGNhY2hlIElJSSwgSVYgLSBTZWUgTk9URVMgZm9yIG9wdGlvbnMKZGV2aWNlCQlo cHRtdgkJIyBIaWdocG9pbnQgUm9ja2V0UkFJRCAxODJ4CmRldmljZQkJaWlyCQkjIEludGVs IEludGVncmF0ZWQgUkFJRApkZXZpY2UJCWlwcwkJIyBJQk0gKEFkYXB0ZWMpIFNlcnZlUkFJ RApkZXZpY2UJCW1seQkJIyBNeWxleCBBY2NlbGVSQUlEL2VYdHJlbWVSQUlECmRldmljZQkJ dHdhCQkjIDN3YXJlIDkwMDAgc2VyaWVzIFBBVEEvU0FUQSBSQUlECgojIFJBSUQgY29udHJv bGxlcnMKZGV2aWNlCQlhYWMJCSMgQWRhcHRlYyBGU0EgUkFJRApkZXZpY2UJCWFhY3AJCSMg U0NTSSBwYXNzdGhyb3VnaCBmb3IgYWFjIChyZXF1aXJlcyBDQU0pCmRldmljZQkJaWRhCQkj IENvbXBhcSBTbWFydCBSQUlECmRldmljZQkJbWx4CQkjIE15bGV4IERBQzk2MCBmYW1pbHkK ZGV2aWNlCQlwc3QJCSMgUHJvbWlzZSBTdXBlcnRyYWsgU1g2MDAwCmRldmljZQkJdHdlCQkj IDN3YXJlIEFUQSBSQUlECgojIGF0a2JkYzAgY29udHJvbHMgYm90aCB0aGUga2V5Ym9hcmQg YW5kIHRoZSBQUy8yIG1vdXNlCmRldmljZQkJYXRrYmRjCQkjIEFUIGtleWJvYXJkIGNvbnRy b2xsZXIKZGV2aWNlCQlhdGtiZAkJIyBBVCBrZXlib2FyZApkZXZpY2UJCXBzbQkJIyBQUy8y IG1vdXNlCgpkZXZpY2UJCXZnYQkJIyBWR0EgdmlkZW8gY2FyZCBkcml2ZXIKCmRldmljZQkJ c3BsYXNoCQkjIFNwbGFzaCBzY3JlZW4gYW5kIHNjcmVlbiBzYXZlciBzdXBwb3J0CgojIHN5 c2NvbnMgaXMgdGhlIGRlZmF1bHQgY29uc29sZSBkcml2ZXIsIHJlc2VtYmxpbmcgYW4gU0NP IGNvbnNvbGUKZGV2aWNlCQlzYwoKIyBFbmFibGUgdGhpcyBmb3IgdGhlIHBjdnQgKFZUMjIw IGNvbXBhdGlibGUpIGNvbnNvbGUgZHJpdmVyCiNkZXZpY2UJCXZ0CiNvcHRpb25zIAlYU0VS VkVSCQkjIHN1cHBvcnQgZm9yIFggc2VydmVyIG9uIGEgdnQgY29uc29sZQojb3B0aW9ucyAJ RkFUX0NVUlNPUgkjIHN0YXJ0IHdpdGggYmxvY2sgY3Vyc29yCgpkZXZpY2UJCWFncAkJIyBz dXBwb3J0IHNldmVyYWwgQUdQIGNoaXBzZXRzCgojIEZsb2F0aW5nIHBvaW50IHN1cHBvcnQg LSBkbyBub3QgZGlzYWJsZS4KZGV2aWNlCQlucHgKCiMgUG93ZXIgbWFuYWdlbWVudCBzdXBw b3J0IChzZWUgTk9URVMgZm9yIG1vcmUgb3B0aW9ucykKI2RldmljZQkJYXBtCiMgQWRkIHN1 c3BlbmQvcmVzdW1lIHN1cHBvcnQgZm9yIHRoZSBpODI1NC4KZGV2aWNlCQlwbXRpbWVyCgoj IFBDQ0FSRCAoUENNQ0lBKSBzdXBwb3J0CiMgUENNQ0lBIGFuZCBjYXJkYnVzIGJyaWRnZSBz dXBwb3J0CmRldmljZQkJY2JiCQkjIGNhcmRidXMgKHllbnRhKSBicmlkZ2UKZGV2aWNlCQlw Y2NhcmQJCSMgUEMgQ2FyZCAoMTYtYml0KSBidXMKZGV2aWNlCQljYXJkYnVzCQkjIENhcmRC dXMgKDMyLWJpdCkgYnVzCgojIFNlcmlhbCAoQ09NKSBwb3J0cwpkZXZpY2UJCXNpbwkJIyA4 MjUwLCAxNls0NV01MCBiYXNlZCBzZXJpYWwgcG9ydHMKCiMgUGFyYWxsZWwgcG9ydApkZXZp Y2UJCXBwYwpkZXZpY2UJCXBwYnVzCQkjIFBhcmFsbGVsIHBvcnQgYnVzIChyZXF1aXJlZCkK ZGV2aWNlCQlscHQJCSMgUHJpbnRlcgpkZXZpY2UJCXBsaXAJCSMgVENQL0lQIG92ZXIgcGFy YWxsZWwKZGV2aWNlCQlwcGkJCSMgUGFyYWxsZWwgcG9ydCBpbnRlcmZhY2UgZGV2aWNlCiNk ZXZpY2UJCXZwbwkJIyBSZXF1aXJlcyBzY2J1cyBhbmQgZGEKCiMgSWYgeW91J3ZlIGdvdCBh ICJkdW1iIiBzZXJpYWwgb3IgcGFyYWxsZWwgUENJIGNhcmQgdGhhdCBpcwojIHN1cHBvcnRl ZCBieSB0aGUgcHVjKDQpIGdsdWUgZHJpdmVyLCB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZwoj IGxpbmUgdG8gZW5hYmxlIGl0IChjb25uZWN0cyB0byB0aGUgc2lvIGFuZC9vciBwcGMgZHJp dmVycyk6CiNkZXZpY2UgICAgICAgICBwdWMKCiMgUENJIEV0aGVybmV0IE5JQ3MuCmRldmlj ZQkJZGUJCSMgREVDL0ludGVsIERDMjF4NHggKGBgVHVsaXAnJykKZGV2aWNlCQllbQkJIyBJ bnRlbCBQUk8vMTAwMCBhZGFwdGVyIEdpZ2FiaXQgRXRoZXJuZXQgQ2FyZApkZXZpY2UJCWl4 Z2IJCSMgSW50ZWwgUFJPLzEwR2JFIEV0aGVybmV0IENhcmQKZGV2aWNlCQl0eHAJCSMgM0Nv bSAzY1I5OTAgKGBgVHlwaG9vbicnKQpkZXZpY2UJCXZ4CQkjIDNDb20gM2M1OTAsIDNjNTk1 IChgYFZvcnRleCcnKQoKIyBQQ0kgRXRoZXJuZXQgTklDcyB0aGF0IHVzZSB0aGUgY29tbW9u IE1JSSBidXMgY29udHJvbGxlciBjb2RlLgojIE5PVEU6IEJlIHN1cmUgdG8ga2VlcCB0aGUg J2RldmljZSBtaWlidXMnIGxpbmUgaW4gb3JkZXIgdG8gdXNlIHRoZXNlIE5JQ3MhCmRldmlj ZQkJbWlpYnVzCQkjIE1JSSBidXMgc3VwcG9ydApkZXZpY2UJCWJmZQkJIyBCcm9hZGNvbSBC Q000NDB4IDEwLzEwMCBFdGhlcm5ldApkZXZpY2UJCWJnZQkJIyBCcm9hZGNvbSBCQ001NzB4 eCBHaWdhYml0IEV0aGVybmV0CmRldmljZQkJZGMJCSMgREVDL0ludGVsIDIxMTQzIGFuZCB2 YXJpb3VzIHdvcmthbGlrZXMKZGV2aWNlCQlmeHAJCSMgSW50ZWwgRXRoZXJFeHByZXNzIFBS Ty8xMDBCICg4MjU1NywgODI1NTgpCmRldmljZQkJbGdlCQkjIExldmVsIDEgTFhUMTAwMSBn aWdhYml0IGV0aGVybmV0CmRldmljZQkJbmdlCQkjIE5hdFNlbWkgRFA4MzgyMCBnaWdhYml0 IGV0aGVybmV0CmRldmljZQkJcGNuCQkjIEFNRCBBbTc5Qzk3eCBQQ0kgMTAvMTAwIChwcmVj ZWRlbmNlIG92ZXIgJ2xuYycpCmRldmljZQkJcmUJCSMgUmVhbFRlayA4MTM5QysvODE2OS84 MTY5Uy84MTEwUwpkZXZpY2UJCXJsCQkjIFJlYWxUZWsgODEyOS84MTM5CmRldmljZQkJc2YJ CSMgQWRhcHRlYyBBSUMtNjkxNSAoYGBTdGFyZmlyZScnKQpkZXZpY2UJCXNpcwkJIyBTaWxp Y29uIEludGVncmF0ZWQgU3lzdGVtcyBTaVMgOTAwL1NpUyA3MDE2CmRldmljZQkJc2sJCSMg U3lzS29ubmVjdCBTSy05ODR4ICYgU0stOTgyeCBnaWdhYml0IEV0aGVybmV0CmRldmljZQkJ c3RlCQkjIFN1bmRhbmNlIFNUMjAxIChELUxpbmsgREZFLTU1MFRYKQpkZXZpY2UJCXRpCQkj IEFsdGVvbiBOZXR3b3JrcyBUaWdvbiBJL0lJIGdpZ2FiaXQgRXRoZXJuZXQKZGV2aWNlCQl0 bAkJIyBUZXhhcyBJbnN0cnVtZW50cyBUaHVuZGVyTEFOCmRldmljZQkJdHgJCSMgU01DIEV0 aGVyUG93ZXIgSUkgKDgzYzE3MCBgYEVQSUMnJykKZGV2aWNlCQl2Z2UJCSMgVklBIFZUNjEy eCBnaWdhYml0IGV0aGVybmV0CmRldmljZQkJdnIJCSMgVklBIFJoaW5lLCBSaGluZSBJSQpk ZXZpY2UJCXdiCQkjIFdpbmJvbmQgVzg5Qzg0MEYKZGV2aWNlCQl4bAkJIyAzQ29tIDNjOTB4 IChgYEJvb21lcmFuZycnLCBgYEN5Y2xvbmUnJykKCiMgSVNBIEV0aGVybmV0IE5JQ3MuICBw Y2NhcmQgTklDcyBpbmNsdWRlZC4KZGV2aWNlCQljcwkJIyBDcnlzdGFsIFNlbWljb25kdWN0 b3IgQ1M4OXgwIE5JQwojICdkZXZpY2UgZWQnIHJlcXVpcmVzICdkZXZpY2UgbWlpYnVzJwpk ZXZpY2UJCWVkCQkjIE5FWzEyXTAwMCwgU01DIFVsdHJhLCAzYzUwMywgRFM4MzkwIGNhcmRz CmRldmljZQkJZXgJCSMgSW50ZWwgRXRoZXJFeHByZXNzIFByby8xMCBhbmQgUHJvLzEwKwpk ZXZpY2UJCWVwCQkjIEV0aGVybGluayBJSUkgYmFzZWQgY2FyZHMKZGV2aWNlCQlmZQkJIyBG dWppdHN1IE1CODY5NnggYmFzZWQgY2FyZHMKZGV2aWNlCQlpZQkJIyBFdGhlckV4cHJlc3Mg OC8xNiwgM0M1MDcsIFN0YXJMQU4gMTAgZXRjLgpkZXZpY2UJCWxuYwkJIyBORTIxMDAsIE5F MzItVkwgTGFuY2UgRXRoZXJuZXQgY2FyZHMKZGV2aWNlCQlzbgkJIyBTTUMncyA5MDAwIHNl cmllcyBvZiBFdGhlcm5ldCBjaGlwcwpkZXZpY2UJCXhlCQkjIFhpcmNvbSBwY2NhcmQgRXRo ZXJuZXQKCiMgSVNBIGRldmljZXMgdGhhdCB1c2UgdGhlIG9sZCBJU0Egc2hpbXMKI2Rldmlj ZQkJbGUKCiMgV2lyZWxlc3MgTklDIGNhcmRzCmRldmljZQkJd2xhbgkJIyA4MDIuMTEgc3Vw cG9ydApkZXZpY2UJCWFuCQkjIEFpcm9uZXQgNDUwMC80ODAwIDgwMi4xMSB3aXJlbGVzcyBO SUNzLgpkZXZpY2UJCWF3aQkJIyBCYXlTdGFjayA2NjAgYW5kIG90aGVycwpkZXZpY2UJCXdp CQkjIFdhdmVMQU4vSW50ZXJzaWwvU3ltYm9sIDgwMi4xMSB3aXJlbGVzcyBOSUNzLgojZGV2 aWNlCQl3bAkJIyBPbGRlciBub24gODAyLjExIFdhdmVsYW4gd2lyZWxlc3MgTklDLgoKIyBQ c2V1ZG8gZGV2aWNlcy4KZGV2aWNlCQlsb29wCQkjIE5ldHdvcmsgbG9vcGJhY2sKZGV2aWNl CQltZW0JCSMgTWVtb3J5IGFuZCBrZXJuZWwgbWVtb3J5IGRldmljZXMKZGV2aWNlCQlpbwkJ IyBJL08gZGV2aWNlCmRldmljZQkJcmFuZG9tCQkjIEVudHJvcHkgZGV2aWNlCmRldmljZQkJ ZXRoZXIJCSMgRXRoZXJuZXQgc3VwcG9ydApkZXZpY2UJCXNsCQkjIEtlcm5lbCBTTElQCmRl dmljZQkJcHBwCQkjIEtlcm5lbCBQUFAKZGV2aWNlCQl0dW4JCSMgUGFja2V0IHR1bm5lbC4K ZGV2aWNlCQlwdHkJCSMgUHNldWRvLXR0eXMgKHRlbG5ldCBldGMpCmRldmljZQkJbWQJCSMg TWVtb3J5ICJkaXNrcyIKZGV2aWNlCQlnaWYJCSMgSVB2NiBhbmQgSVB2NCB0dW5uZWxpbmcK ZGV2aWNlCQlmYWl0aAkJIyBJUHY2LXRvLUlQdjQgcmVsYXlpbmcgKHRyYW5zbGF0aW9uKQoK IyBUaGUgYGJwZicgZGV2aWNlIGVuYWJsZXMgdGhlIEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIu CiMgQmUgYXdhcmUgb2YgdGhlIGFkbWluaXN0cmF0aXZlIGNvbnNlcXVlbmNlcyBvZiBlbmFi bGluZyB0aGlzIQpkZXZpY2UJCWJwZgkJIyBCZXJrZWxleSBwYWNrZXQgZmlsdGVyCgojIFVT QiBzdXBwb3J0CmRldmljZQkJdWhjaQkJIyBVSENJIFBDSS0+VVNCIGludGVyZmFjZQpkZXZp Y2UJCW9oY2kJCSMgT0hDSSBQQ0ktPlVTQiBpbnRlcmZhY2UKZGV2aWNlCQl1c2IJCSMgVVNC IEJ1cyAocmVxdWlyZWQpCiNkZXZpY2UJCXVkYnAJCSMgVVNCIERvdWJsZSBCdWxrIFBpcGUg ZGV2aWNlcwpkZXZpY2UJCXVnZW4JCSMgR2VuZXJpYwpkZXZpY2UJCXVoaWQJCSMgIkh1bWFu IEludGVyZmFjZSBEZXZpY2VzIgpkZXZpY2UJCXVrYmQJCSMgS2V5Ym9hcmQKZGV2aWNlCQl1 bHB0CQkjIFByaW50ZXIKZGV2aWNlCQl1bWFzcwkJIyBEaXNrcy9NYXNzIHN0b3JhZ2UgLSBS ZXF1aXJlcyBzY2J1cyBhbmQgZGEKZGV2aWNlCQl1bXMJCSMgTW91c2UKZGV2aWNlCQl1cmlv CQkjIERpYW1vbmQgUmlvIDUwMCBNUDMgcGxheWVyCmRldmljZQkJdXNjYW5uZXIJIyBTY2Fu bmVycwojIFVTQiBFdGhlcm5ldCwgcmVxdWlyZXMgbWlpCmRldmljZQkJYXVlCQkjIEFETXRl ayBVU0IgRXRoZXJuZXQKZGV2aWNlCQlheGUJCSMgQVNJWCBFbGVjdHJvbmljcyBVU0IgRXRo ZXJuZXQKZGV2aWNlCQljdWUJCSMgQ0FUQyBVU0IgRXRoZXJuZXQKZGV2aWNlCQlrdWUJCSMg S2F3YXNha2kgTFNJIFVTQiBFdGhlcm5ldApkZXZpY2UJCXJ1ZQkJIyBSZWFsVGVrIFJUTDgx NTAgVVNCIEV0aGVybmV0CgojIEZpcmVXaXJlIHN1cHBvcnQKZGV2aWNlCQlmaXJld2lyZQkj IEZpcmVXaXJlIGJ1cyBjb2RlCmRldmljZQkJc2JwCQkjIFNDU0kgb3ZlciBGaXJlV2lyZSAo UmVxdWlyZXMgc2NidXMgYW5kIGRhKQpkZXZpY2UJCWZ3ZQkJIyBFdGhlcm5ldCBvdmVyIEZp cmVXaXJlIChub24tc3RhbmRhcmQhKQo= --_===8514806====mx1.intranet.ru===_ Content-Type: text/plain Content-Disposition: attachment; filename="sched_ule.c" Content-Transfer-Encoding: base64 LyotDQogKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwMywgSmVmZnJleSBSb2JlcnNvbiA8amVm ZkBmcmVlYnNkLm9yZz4NCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQogKg0KICogUmVkaXN0 cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3 aXRob3V0DQogKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMNCiAqIGFyZSBtZXQ6DQogKiAxLiBSZWRpc3RyaWJ1 dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodA0K ICogICAgbm90aWNlIHVubW9kaWZpZWQsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQg dGhlIGZvbGxvd2luZw0KICogICAgZGlzY2xhaW1lci4NCiAqIDIuIFJlZGlzdHJpYnV0aW9u cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0DQog KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIgaW4gdGhlDQogKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KICoNCiAqIFRISVMg U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBF WFBSRVNTIE9SDQogKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTDQogKiBPRiBNRVJDSEFOVEFCSUxJ VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE Lg0KICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBE SVJFQ1QsIElORElSRUNULA0KICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUDQogKiBOT1QgTElNSVRF RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T UyBPRiBVU0UsDQogKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkNCiAqIFRIRU9SWSBPRiBMSUFCSUxJVFks IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCiAqIChJ TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP VVQgT0YgVEhFIFVTRSBPRg0KICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCiAqLw0KDQojaW5jbHVkZSA8c3lz L2NkZWZzLmg+DQpfX0ZCU0RJRCgiJEZyZWVCU0Q6IHNyYy9zeXMva2Vybi9zY2hlZF91bGUu Yyx2IDEuMTIxLjIuMTAuMi4xIDIwMDQvMTAvMjYgMDI6MjI6NTQgc2NvdHRsIEV4cCAkIik7 DQoNCiNpbmNsdWRlIDxvcHRfc2NoZWQuaD4NCg0KI2RlZmluZSBrc2UgdGRfc2NoZWQNCg0K I2luY2x1ZGUgPHN5cy9wYXJhbS5oPg0KI2luY2x1ZGUgPHN5cy9zeXN0bS5oPg0KI2luY2x1 ZGUgPHN5cy9rZGIuaD4NCiNpbmNsdWRlIDxzeXMva2VybmVsLmg+DQojaW5jbHVkZSA8c3lz L2t0ci5oPg0KI2luY2x1ZGUgPHN5cy9sb2NrLmg+DQojaW5jbHVkZSA8c3lzL211dGV4Lmg+ DQojaW5jbHVkZSA8c3lzL3Byb2MuaD4NCiNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4NCiNp bmNsdWRlIDxzeXMvcmVzb3VyY2V2YXIuaD4NCiNpbmNsdWRlIDxzeXMvc2NoZWQuaD4NCiNp bmNsdWRlIDxzeXMvc21wLmg+DQojaW5jbHVkZSA8c3lzL3N4Lmg+DQojaW5jbHVkZSA8c3lz L3N5c2N0bC5oPg0KI2luY2x1ZGUgPHN5cy9zeXNwcm90by5oPg0KI2luY2x1ZGUgPHN5cy92 bW1ldGVyLmg+DQojaWZkZWYgS1RSQUNFDQojaW5jbHVkZSA8c3lzL3Vpby5oPg0KI2luY2x1 ZGUgPHN5cy9rdHJhY2UuaD4NCiNlbmRpZg0KDQojaW5jbHVkZSA8bWFjaGluZS9jcHUuaD4N CiNpbmNsdWRlIDxtYWNoaW5lL3NtcC5oPg0KDQojZGVmaW5lIEtUUl9VTEUJS1RSX05GUw0K DQojZXJyb3IgIlRoZSBTQ0hFRF9VTEUgc2NoZWR1bGVyIGlzIGJyb2tlbi4gIFBsZWFzZSB1 c2UgU0NIRURfNEJTRCINCg0KLyogZGVjYXkgOTUlIG9mIGBwX3BjdGNwdScgaW4gNjAgc2Vj b25kczsgc2VlIENDUFVfU0hJRlQgYmVmb3JlIGNoYW5naW5nICovDQovKiBYWFggVGhpcyBp cyBib2d1cyBjb21wYXRhYmlsaXR5IGNyYXAgZm9yIHBzICovDQpzdGF0aWMgZml4cHRfdCAg Y2NwdSA9IDAuOTUxMjI5NDI0NTAwNzE0MDA5MDkgKiBGU0NBTEU7IC8qIGV4cCgtMS8yMCkg Ki8NClNZU0NUTF9JTlQoX2tlcm4sIE9JRF9BVVRPLCBjY3B1LCBDVExGTEFHX1JELCAmY2Nw dSwgMCwgIiIpOw0KDQpzdGF0aWMgdm9pZCBzY2hlZF9zZXR1cCh2b2lkICpkdW1teSk7DQpT WVNJTklUKHNjaGVkX3NldHVwLCBTSV9TVUJfUlVOX1FVRVVFLCBTSV9PUkRFUl9GSVJTVCwg c2NoZWRfc2V0dXAsIE5VTEwpDQoNCnN0YXRpYyBTWVNDVExfTk9ERShfa2VybiwgT0lEX0FV VE8sIHNjaGVkLCBDVExGTEFHX1JXLCAwLCAiU2NoZWR1bGVyIik7DQoNClNZU0NUTF9TVFJJ TkcoX2tlcm5fc2NoZWQsIE9JRF9BVVRPLCBuYW1lLCBDVExGTEFHX1JELCAidWxlIiwgMCwN CiAgICAiU2NoZWR1bGVyIG5hbWUiKTsNCg0Kc3RhdGljIGludCBzbGljZV9taW4gPSAxOw0K U1lTQ1RMX0lOVChfa2Vybl9zY2hlZCwgT0lEX0FVVE8sIHNsaWNlX21pbiwgQ1RMRkxBR19S VywgJnNsaWNlX21pbiwgMCwgIiIpOw0KDQpzdGF0aWMgaW50IHNsaWNlX21heCA9IDEwOw0K U1lTQ1RMX0lOVChfa2Vybl9zY2hlZCwgT0lEX0FVVE8sIHNsaWNlX21heCwgQ1RMRkxBR19S VywgJnNsaWNlX21heCwgMCwgIiIpOw0KDQppbnQgcmVhbHN0YXRoejsNCmludCB0aWNraW5j ciA9IDE7DQoNCiNpZmRlZiBQUkVFTVBUSU9ODQpzdGF0aWMgdm9pZA0KcHJpbnRmX2NhZGRy X3Qodm9pZCAqZGF0YSkNCnsNCglwcmludGYoIiVzIiwgKGNoYXIgKilkYXRhKTsNCn0NCnN0 YXRpYyBjaGFyIHByZWVtcHRfd2FybmluZ1tdID0NCiAgICAiV0FSTklORzogS2VybmVsIFBS RUVNUFRJT04gaXMgdW5zdGFibGUgdW5kZXIgU0NIRURfVUxFLlxuIjsgDQpTWVNJTklUKHBy ZWVtcHRfd2FybmluZywgU0lfU1VCX0NPUFlSSUdIVCwgU0lfT1JERVJfQU5ZLCBwcmludGZf Y2FkZHJfdCwNCiAgICBwcmVlbXB0X3dhcm5pbmcpDQojZW5kaWYNCg0KLyoNCiAqIFRoZSBz Y2hlZHVsYWJsZSBlbnRpdHkgdGhhdCBjYW4gYmUgZ2l2ZW4gYSBjb250ZXh0IHRvIHJ1bi4N CiAqIEEgcHJvY2VzcyBtYXkgaGF2ZSBzZXZlcmFsIG9mIHRoZXNlLiBQcm9iYWJseSBvbmUg cGVyIHByb2Nlc3Nvcg0KICogYnV0IHBvc2libHkgYSBmZXcgbW9yZS4gSW4gdGhpcyB1bml2 ZXJzZSB0aGV5IGFyZSBncm91cGVkDQogKiB3aXRoIGEgS1NFRyB0aGF0IGNvbnRhaW5zIHRo ZSBwcmlvcml0eSBhbmQgbmljZW5lc3MNCiAqIGZvciB0aGUgZ3JvdXAuDQogKi8NCnN0cnVj dCBrc2Ugew0KCVRBSUxRX0VOVFJZKGtzZSkga2Vfa2dsaXN0OwkvKiAoKikgUXVldWUgb2Yg dGhyZWFkcyBpbiBrZV9rc2VncnAuICovDQoJVEFJTFFfRU5UUlkoa3NlKSBrZV9rZ3JsaXN0 OwkvKiAoKikgUXVldWUgb2YgdGhyZWFkcyBpbiB0aGlzIHN0YXRlLiovDQoJVEFJTFFfRU5U Ulkoa3NlKSBrZV9wcm9jcTsJLyogKGoveikgUnVuIHF1ZXVlLiAqLw0KCWludAkJa2VfZmxh Z3M7CS8qIChqKSBLRUZfKiBmbGFncy4gKi8NCglzdHJ1Y3QgdGhyZWFkCSprZV90aHJlYWQ7 CS8qICgqKSBBY3RpdmUgYXNzb2NpYXRlZCB0aHJlYWQuICovDQoJZml4cHRfdAkJa2VfcGN0 Y3B1OwkvKiAoaikgJWNwdSBkdXJpbmcgcF9zd3RpbWUuICovDQoJdV9jaGFyCQlrZV9vbmNw dTsJLyogKGopIFdoaWNoIGNwdSB3ZSBhcmUgb24uICovDQoJY2hhcgkJa2VfcnFpbmRleDsJ LyogKGopIFJ1biBxdWV1ZSBpbmRleC4gKi8NCgllbnVtIHsNCgkJS0VTX1RIUkVBRCA9IDB4 MCwJLyogc2xhdmVkIHRvIHRocmVhZCBzdGF0ZSAqLw0KCQlLRVNfT05SVU5RDQoJfSBrZV9z dGF0ZTsJCQkvKiAoaikgdGhyZWFkIHNjaGVkIHNwZWNpZmljIHN0YXR1cy4gKi8NCglpbnQJ CWtlX3NscHRpbWU7DQoJaW50CQlrZV9zbGljZTsNCglzdHJ1Y3QgcnVucQkqa2VfcnVucTsN Cgl1X2NoYXIJCWtlX2NwdTsJCS8qIENQVSB0aGF0IHdlIGhhdmUgYWZmaW5pdHkgZm9yLiAq Lw0KCS8qIFRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGFyZSBvbmx5IHVzZWQgZm9yIHBjdGNw dSBjYWxjdWxhdGlvbiAqLw0KCWludAkJa2VfbHRpY2s7CS8qIExhc3QgdGljayB0aGF0IHdl IHdlcmUgcnVubmluZyBvbiAqLw0KCWludAkJa2VfZnRpY2s7CS8qIEZpcnN0IHRpY2sgdGhh dCB3ZSB3ZXJlIHJ1bm5pbmcgb24gKi8NCglpbnQJCWtlX3RpY2tzOwkvKiBUaWNrIGNvdW50 ICovDQoNCn07DQoNCg0KI2RlZmluZSB0ZF9rc2UgdGRfc2NoZWQNCiNkZWZpbmUJdGRfc2xw dGltZQkJdGRfa3NlLT5rZV9zbHB0aW1lDQojZGVmaW5lIGtlX3Byb2MJCQlrZV90aHJlYWQt PnRkX3Byb2MNCiNkZWZpbmUga2Vfa3NlZ3JwCQlrZV90aHJlYWQtPnRkX2tzZWdycA0KDQov KiBmbGFncyBrZXB0IGluIGtlX2ZsYWdzICovDQojZGVmaW5lCUtFRl9TQ0hFRDAJMHgwMDAw MQkvKiBGb3Igc2NoZWR1bGVyLXNwZWNpZmljIHVzZS4gKi8NCiNkZWZpbmUJS0VGX1NDSEVE MQkweDAwMDAyCS8qIEZvciBzY2hlZHVsZXItc3BlY2lmaWMgdXNlLiAqLw0KI2RlZmluZQlL RUZfU0NIRUQyCTB4MDAwMDQJLyogRm9yIHNjaGVkdWxlci1zcGVjaWZpYyB1c2UuICovDQoj ZGVmaW5lCUtFRl9TQ0hFRDMJMHgwMDAwOAkvKiBGb3Igc2NoZWR1bGVyLXNwZWNpZmljIHVz ZS4gKi8NCiNkZWZpbmUJS0VGX0RJRFJVTgkweDAyMDAwCS8qIFRocmVhZCBhY3R1YWxseSBy YW4uICovDQojZGVmaW5lCUtFRl9FWElUCTB4MDQwMDAJLyogVGhyZWFkIGlzIGJlaW5nIGtp bGxlZC4gKi8NCg0KLyoNCiAqIFRoZXNlIGRhdGFzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQg d2l0aGluIHRoZWlyIHBhcmVudCBkYXRhc3RydWN0dXJlIGJ1dA0KICogYXJlIHNjaGVkdWxl ciBzcGVjaWZpYy4NCiAqLw0KDQojZGVmaW5lCWtlX2Fzc2lnbglrZV9wcm9jcS50cWVfbmV4 dA0KDQojZGVmaW5lCUtFRl9BU1NJR05FRAlLRUZfU0NIRUQwCS8qIFRocmVhZCBpcyBiZWlu ZyBtaWdyYXRlZC4gKi8NCiNkZWZpbmUJS0VGX0JPVU5ECUtFRl9TQ0hFRDEJLyogVGhyZWFk IGNhbiBub3QgbWlncmF0ZS4gKi8NCiNkZWZpbmUJS0VGX1hGRVJBQkxFCUtFRl9TQ0hFRDIJ LyogVGhyZWFkIHdhcyBhZGRlZCBhcyB0cmFuc2ZlcmFibGUuICovDQojZGVmaW5lCUtFRl9I T0xECUtFRl9TQ0hFRDMJLyogVGhyZWFkIGlzIHRlbXBvcmFyaWx5IGJvdW5kLiAqLw0KDQpz dHJ1Y3Qga2dfc2NoZWQgew0KCXN0cnVjdCB0aHJlYWQJKnNrZ19sYXN0X2Fzc2lnbmVkOyAv KiAoaikgTGFzdCB0aHJlYWQgYXNzaWduZWQgdG8gKi8NCgkJCQkJICAgLyogdGhlIHN5c3Rl bSBzY2hlZHVsZXIgKi8NCglpbnQJc2tnX3NscHRpbWU7CQkvKiBOdW1iZXIgb2YgdGlja3Mg d2Ugdm9sLiBzbGVwdCAqLw0KCWludAlza2dfcnVudGltZTsJCS8qIE51bWJlciBvZiB0aWNr cyB3ZSB3ZXJlIHJ1bm5pbmcgKi8NCglpbnQJc2tnX2F2YWlsX29wZW5uaW5nczsJLyogKGop IE51bSB1bmZpbGxlZCBzbG90cyBpbiBncm91cC4qLw0KCWludAlza2dfY29uY3VycmVuY3k7 CS8qIChqKSBOdW0gdGhyZWFkcyByZXF1ZXN0ZWQgaW4gZ3JvdXAuKi8NCglpbnQJc2tnX3J1 bnFfdGhyZWFkczsJLyogKGopIE51bSBLU0VzIG9uIHJ1bnEuICovDQp9Ow0KI2RlZmluZSBr Z19sYXN0X2Fzc2lnbmVkCWtnX3NjaGVkLT5za2dfbGFzdF9hc3NpZ25lZA0KI2RlZmluZSBr Z19hdmFpbF9vcGVubmluZ3MJa2dfc2NoZWQtPnNrZ19hdmFpbF9vcGVubmluZ3MNCiNkZWZp bmUga2dfY29uY3VycmVuY3kJCWtnX3NjaGVkLT5za2dfY29uY3VycmVuY3kNCiNkZWZpbmUg a2dfcnVucV90aHJlYWRzCQlrZ19zY2hlZC0+c2tnX3J1bnFfdGhyZWFkcw0KI2RlZmluZSBr Z19ydW50aW1lCQlrZ19zY2hlZC0+c2tnX3J1bnRpbWUNCiNkZWZpbmUga2dfc2xwdGltZQkJ a2dfc2NoZWQtPnNrZ19zbHB0aW1lDQoNCiNkZWZpbmUgU0xPVF9SRUxFQVNFKGtnKQkJCQkJ CVwNCmRvIHsJCQkJCQkJCQlcDQoJa2ctPmtnX2F2YWlsX29wZW5uaW5ncysrOyAJCQkJCVwN CglDVFIzKEtUUl9SVU5RLCAia2cgJXAoJWQpIFNsb3QgcmVsZWFzZWQgKC0+JWQpIiwJCVwN CglrZywJCQkJCQkJCVwNCglrZy0+a2dfY29uY3VycmVuY3ksCQkJCQkJXA0KCSBrZy0+a2df YXZhaWxfb3Blbm5pbmdzKTsJCQkJCVwNCgkvKktBU1NFUlQoKGtnLT5rZ19hdmFpbF9vcGVu bmluZ3MgPD0ga2ctPmtnX2NvbmN1cnJlbmN5KSwJXA0KCSAgICAoInNsb3RzIG91dCBvZiB3 aGFjayIpKTsgKi8JCQkJCVwNCn0gd2hpbGUgKDApDQoNCiNkZWZpbmUgU0xPVF9VU0Uoa2cp CQkJCQkJCVwNCmRvIHsJCQkJCQkJCQlcDQoJa2ctPmtnX2F2YWlsX29wZW5uaW5ncy0tOyAJ CQkJCVwNCglDVFIzKEtUUl9SVU5RLCAia2cgJXAoJWQpIFNsb3QgdXNlZCAoLT4lZCkiLAkJ CVwNCglrZywJCQkJCQkJCVwNCglrZy0+a2dfY29uY3VycmVuY3ksCQkJCQkJXA0KCSBrZy0+ a2dfYXZhaWxfb3Blbm5pbmdzKTsJCQkJCVwNCgkvKktBU1NFUlQoKGtnLT5rZ19hdmFpbF9v cGVubmluZ3MgPj0gMCksCQkJXA0KCSAgICAoInNsb3RzIG91dCBvZiB3aGFjayIpKTsqLyAJ CQkJCVwNCn0gd2hpbGUgKDApDQoNCnN0YXRpYyBzdHJ1Y3Qga3NlIGtzZTA7DQpzdGF0aWMg c3RydWN0IGtnX3NjaGVkIGtnX3NjaGVkMDsNCg0KLyoNCiAqIFRoZSBwcmlvcml0eSBpcyBw cmltYXJpbHkgZGV0ZXJtaW5lZCBieSB0aGUgaW50ZXJhY3Rpdml0eSBzY29yZS4gIFRodXMs IHdlDQogKiBnaXZlIGxvd2VyKGJldHRlcikgcHJpb3JpdGllcyB0byBrc2UgZ3JvdXBzIHRo YXQgdXNlIGxlc3MgQ1BVLiAgVGhlIG5pY2UNCiAqIHZhbHVlIGlzIHRoZW4gZGlyZWN0bHkg YWRkZWQgdG8gdGhpcyB0byBhbGxvdyBuaWNlIHRvIGhhdmUgc29tZSBlZmZlY3QNCiAqIG9u IGxhdGVuY3kuDQogKg0KICogUFJJX1JBTkdFOglUb3RhbCBwcmlvcml0eSByYW5nZSBmb3Ig dGltZXNoYXJlIHRocmVhZHMuDQogKiBQUklfTlJFU1Y6CU51bWJlciBvZiBuaWNlIHZhbHVl cy4NCiAqIFBSSV9CQVNFOglUaGUgc3RhcnQgb2YgdGhlIGR5bmFtaWMgcmFuZ2UuDQogKi8N CiNkZWZpbmUJU0NIRURfUFJJX1JBTkdFCQkoUFJJX01BWF9USU1FU0hBUkUgLSBQUklfTUlO X1RJTUVTSEFSRSArIDEpDQojZGVmaW5lCVNDSEVEX1BSSV9OUkVTVgkJKChQUklPX01BWCAt IFBSSU9fTUlOKSArIDEpDQojZGVmaW5lCVNDSEVEX1BSSV9OSEFMRgkJKFNDSEVEX1BSSV9O UkVTViAvIDIpDQojZGVmaW5lCVNDSEVEX1BSSV9CQVNFCQkoUFJJX01JTl9USU1FU0hBUkUp DQojZGVmaW5lCVNDSEVEX1BSSV9JTlRFUkFDVChzY29yZSkJCQkJCVwNCiAgICAoKHNjb3Jl KSAqIFNDSEVEX1BSSV9SQU5HRSAvIFNDSEVEX0lOVEVSQUNUX01BWCkNCg0KLyoNCiAqIFRo ZXNlIGRldGVybWluZSB0aGUgaW50ZXJhY3Rpdml0eSBvZiBhIHByb2Nlc3MuDQogKg0KICog U0xQX1JVTl9NQVg6CU1heGltdW0gYW1vdW50IG9mIHNsZWVwIHRpbWUgKyBydW4gdGltZSB3 ZSdsbCBhY2N1bXVsYXRlDQogKgkJYmVmb3JlIHRocm90dGxpbmcgYmFjay4NCiAqIFNMUF9S VU5fRk9SSzoJTWF4aW11bSBzbHArcnVuIHRpbWUgdG8gaW5oZXJpdCBhdCBmb3JrIHRpbWUu DQogKiBJTlRFUkFDVF9NQVg6CU1heGltdW0gaW50ZXJhY3Rpdml0eSB2YWx1ZS4gIFNtYWxs ZXIgaXMgYmV0dGVyLg0KICogSU5URVJBQ1RfVEhSRVNIOglUaHJlc2hob2xkIGZvciBwbGFj ZW1lbnQgb24gdGhlIGN1cnJlbnQgcnVucS4NCiAqLw0KI2RlZmluZQlTQ0hFRF9TTFBfUlVO X01BWAkoKGh6ICogNSkgPDwgMTApDQojZGVmaW5lCVNDSEVEX1NMUF9SVU5fRk9SSwkoKGh6 IC8gMikgPDwgMTApDQojZGVmaW5lCVNDSEVEX0lOVEVSQUNUX01BWAkoMTAwKQ0KI2RlZmlu ZQlTQ0hFRF9JTlRFUkFDVF9IQUxGCShTQ0hFRF9JTlRFUkFDVF9NQVggLyAyKQ0KI2RlZmlu ZQlTQ0hFRF9JTlRFUkFDVF9USFJFU0gJKDMwKQ0KDQovKg0KICogVGhlc2UgcGFyYW1ldGVy cyBhbmQgbWFjcm9zIGRldGVybWluZSB0aGUgc2l6ZSBvZiB0aGUgdGltZSBzbGljZSB0aGF0 IGlzDQogKiBncmFudGVkIHRvIGVhY2ggdGhyZWFkLg0KICoNCiAqIFNMSUNFX01JTjoJTWlu aW11bSB0aW1lIHNsaWNlIGdyYW50ZWQsIGluIHVuaXRzIG9mIHRpY2tzLg0KICogU0xJQ0Vf TUFYOglNYXhpbXVtIHRpbWUgc2xpY2UgZ3JhbnRlZC4NCiAqIFNMSUNFX1JBTkdFOglSYW5n ZSBvZiBhdmFpbGFibGUgdGltZSBzbGljZXMgc2NhbGVkIGJ5IGh6Lg0KICogU0xJQ0VfU0NB TEU6CVRoZSBudW1iZXIgc2xpY2VzIGdyYW50ZWQgcGVyIHZhbCBpbiB0aGUgcmFuZ2Ugb2Yg WzAsIG1heF0uDQogKiBTTElDRV9OSUNFOiAgRGV0ZXJtaW5lIHRoZSBhbW91bnQgb2Ygc2xp Y2UgZ3JhbnRlZCB0byBhIHNjYWxlZCBuaWNlLg0KICogU0xJQ0VfTlRIUkVTSDoJVGhlIG5p Y2UgY3V0b2ZmIHBvaW50IGZvciBzbGljZSBhc3NpZ25tZW50Lg0KICovDQojZGVmaW5lCVND SEVEX1NMSUNFX01JTgkJCShzbGljZV9taW4pDQojZGVmaW5lCVNDSEVEX1NMSUNFX01BWAkJ CShzbGljZV9tYXgpDQojZGVmaW5lCVNDSEVEX1NMSUNFX0lOVEVSQUNUSVZFCQkoc2xpY2Vf bWF4KQ0KI2RlZmluZQlTQ0hFRF9TTElDRV9OVEhSRVNICShTQ0hFRF9QUklfTkhBTEYgLSAx KQ0KI2RlZmluZQlTQ0hFRF9TTElDRV9SQU5HRQkJKFNDSEVEX1NMSUNFX01BWCAtIFNDSEVE X1NMSUNFX01JTiArIDEpDQojZGVmaW5lCVNDSEVEX1NMSUNFX1NDQUxFKHZhbCwgbWF4KQko KCh2YWwpICogU0NIRURfU0xJQ0VfUkFOR0UpIC8gKG1heCkpDQojZGVmaW5lCVNDSEVEX1NM SUNFX05JQ0UobmljZSkJCQkJCQlcDQogICAgKFNDSEVEX1NMSUNFX01BWCAtIFNDSEVEX1NM SUNFX1NDQUxFKChuaWNlKSwgU0NIRURfU0xJQ0VfTlRIUkVTSCkpDQoNCi8qDQogKiBUaGlz IG1hY3JvIGRldGVybWluZXMgd2hldGhlciBvciBub3QgdGhlIHRocmVhZCBiZWxvbmdzIG9u IHRoZSBjdXJyZW50IG9yDQogKiBuZXh0IHJ1biBxdWV1ZS4NCiAqLw0KI2RlZmluZQlTQ0hF RF9JTlRFUkFDVElWRShrZykJCQkJCQlcDQogICAgKHNjaGVkX2ludGVyYWN0X3Njb3JlKGtn KSA8IFNDSEVEX0lOVEVSQUNUX1RIUkVTSCkNCiNkZWZpbmUJU0NIRURfQ1VSUihrZywga2Up CQkJCQkJXA0KICAgIChrZS0+a2VfdGhyZWFkLT50ZF9wcmlvcml0eSA8IGtnLT5rZ191c2Vy X3ByaSB8fAkJCVwNCiAgICBTQ0hFRF9JTlRFUkFDVElWRShrZykpDQoNCi8qDQogKiBDcHUg cGVyY2VudGFnZSBjb21wdXRhdGlvbiBtYWNyb3MgYW5kIGRlZmluZXMuDQogKg0KICogU0NI RURfQ1BVX1RJTUU6CU51bWJlciBvZiBzZWNvbmRzIHRvIGF2ZXJhZ2UgdGhlIGNwdSB1c2Fn ZSBhY3Jvc3MuDQogKiBTQ0hFRF9DUFVfVElDS1M6CU51bWJlciBvZiBoeiB0aWNrcyB0byBh dmVyYWdlIHRoZSBjcHUgdXNhZ2UgYWNyb3NzLg0KICovDQoNCiNkZWZpbmUJU0NIRURfQ1BV X1RJTUUJMTANCiNkZWZpbmUJU0NIRURfQ1BVX1RJQ0tTCShoeiAqIFNDSEVEX0NQVV9USU1F KQ0KDQovKg0KICoga3NlcSAtIHBlciBwcm9jZXNzb3IgcnVucXMgYW5kIHN0YXRpc3RpY3Mu DQogKi8NCnN0cnVjdCBrc2VxIHsNCglzdHJ1Y3QgcnVucQlrc3FfaWRsZTsJCS8qIFF1ZXVl IG9mIElETEUgdGhyZWFkcy4gKi8NCglzdHJ1Y3QgcnVucQlrc3FfdGltZXNoYXJlWzJdOwkv KiBSdW4gcXVldWVzIGZvciAhSURMRS4gKi8NCglzdHJ1Y3QgcnVucQkqa3NxX25leHQ7CQkv KiBOZXh0IHRpbWVzaGFyZSBxdWV1ZS4gKi8NCglzdHJ1Y3QgcnVucQkqa3NxX2N1cnI7CQkv KiBDdXJyZW50IHF1ZXVlLiAqLw0KCWludAkJa3NxX2xvYWRfdGltZXNoYXJlOwkvKiBMb2Fk IGZvciB0aW1lc2hhcmUuICovDQoJaW50CQlrc3FfbG9hZDsJCS8qIEFnZ3JlZ2F0ZSBsb2Fk LiAqLw0KCXNob3J0CQlrc3FfbmljZVtTQ0hFRF9QUklfTlJFU1ZdOyAvKiBLU0VzIGluIGVh Y2ggbmljZSBiaW4uICovDQoJc2hvcnQJCWtzcV9uaWNlbWluOwkJLyogTGVhc3QgbmljZS4g Ki8NCiNpZmRlZiBTTVANCglpbnQJCQlrc3FfdHJhbnNmZXJhYmxlOw0KCUxJU1RfRU5UUlko a3NlcSkJa3NxX3NpYmxpbmdzOwkvKiBOZXh0IGluIGtzZXEgZ3JvdXAuICovDQoJc3RydWN0 IGtzZXFfZ3JvdXAJKmtzcV9ncm91cDsJLyogT3VyIHByb2Nlc3NvciBncm91cC4gKi8NCgl2 b2xhdGlsZSBzdHJ1Y3Qga3NlCSprc3FfYXNzaWduZWQ7CS8qIGFzc2lnbmVkIGJ5IGFub3Ro ZXIgQ1BVLiAqLw0KI2Vsc2UNCglpbnQJCWtzcV9zeXNsb2FkOwkJLyogRm9yIGxvYWRhdmcs ICFJVEhEIGxvYWQuICovDQojZW5kaWYNCn07DQoNCiNpZmRlZiBTTVANCi8qDQogKiBrc2Vx IGdyb3VwcyBhcmUgZ3JvdXBzIG9mIHByb2Nlc3NvcnMgd2hpY2ggY2FuIGNoZWFwbHkgc2hh cmUgdGhyZWFkcy4gIFdoZW4NCiAqIG9uZSBwcm9jZXNzb3IgaW4gdGhlIGdyb3VwIGdvZXMg aWRsZSBpdCB3aWxsIGNoZWNrIHRoZSBydW5xcyBvZiB0aGUgb3RoZXINCiAqIHByb2Nlc3Nv cnMgaW4gaXRzIGdyb3VwIHByaW9yIHRvIGhhbHRpbmcgYW5kIHdhaXRpbmcgZm9yIGFuIGlu dGVycnVwdC4NCiAqIFRoZXNlIGdyb3VwcyBhcmUgc3VpdGFibGUgZm9yIFNNVCAoU3ltZXRy aWMgTXVsdGktVGhyZWFkaW5nKSBhbmQgbm90IE5VTUEuDQogKiBJbiBhIG51bWEgZW52aXJv bm1lbnQgd2UnZCB3YW50IGFuIGlkbGUgYml0bWFwIHBlciBncm91cCBhbmQgYSB0d28gdGll cmVkDQogKiBsb2FkIGJhbGFuY2VyLg0KICovDQpzdHJ1Y3Qga3NlcV9ncm91cCB7DQoJaW50 CWtzZ19jcHVzOwkJLyogQ291bnQgb2YgQ1BVcyBpbiB0aGlzIGtzZXEgZ3JvdXAuICovDQoJ Y3B1bWFza190IGtzZ19jcHVtYXNrOwkJLyogTWFzayBvZiBjcHVzIGluIHRoaXMgZ3JvdXAu ICovDQoJY3B1bWFza190IGtzZ19pZGxlbWFzazsJCS8qIElkbGUgY3B1cyBpbiB0aGlzIGdy b3VwLiAqLw0KCWNwdW1hc2tfdCBrc2dfbWFzazsJCS8qIEJpdCBtYXNrIGZvciBmaXJzdCBj cHUuICovDQoJaW50CWtzZ19sb2FkOwkJLyogVG90YWwgbG9hZCBvZiB0aGlzIGdyb3VwLiAq Lw0KCWludAlrc2dfdHJhbnNmZXJhYmxlOwkvKiBUcmFuc2ZlcmFibGUgbG9hZCBvZiB0aGlz IGdyb3VwLiAqLw0KCUxJU1RfSEVBRCgsIGtzZXEpCWtzZ19tZW1iZXJzOyAvKiBMaW5rZWQg bGlzdCBvZiBhbGwgbWVtYmVycy4gKi8NCn07DQojZW5kaWYNCg0KLyoNCiAqIE9uZSBrc2Ug cXVldWUgcGVyIHByb2Nlc3Nvci4NCiAqLw0KI2lmZGVmIFNNUA0Kc3RhdGljIGNwdW1hc2tf dCBrc2VxX2lkbGU7DQpzdGF0aWMgaW50IGtzZ19tYXhpZDsNCnN0YXRpYyBzdHJ1Y3Qga3Nl cQlrc2VxX2NwdVtNQVhDUFVdOw0Kc3RhdGljIHN0cnVjdCBrc2VxX2dyb3VwIGtzZXFfZ3Jv dXBzW01BWENQVV07DQpzdGF0aWMgaW50IGJhbF90aWNrOw0Kc3RhdGljIGludCBnYmFsX3Rp Y2s7DQoNCiNkZWZpbmUJS1NFUV9TRUxGKCkJKCZrc2VxX2NwdVtQQ1BVX0dFVChjcHVpZCld KQ0KI2RlZmluZQlLU0VRX0NQVSh4KQkoJmtzZXFfY3B1Wyh4KV0pDQojZGVmaW5lCUtTRVFf SUQoeCkJKCh4KSAtIGtzZXFfY3B1KQ0KI2RlZmluZQlLU0VRX0dST1VQKHgpCSgma3NlcV9n cm91cHNbKHgpXSkNCiNlbHNlCS8qICFTTVAgKi8NCnN0YXRpYyBzdHJ1Y3Qga3NlcQlrc2Vx X2NwdTsNCg0KI2RlZmluZQlLU0VRX1NFTEYoKQkoJmtzZXFfY3B1KQ0KI2RlZmluZQlLU0VR X0NQVSh4KQkoJmtzZXFfY3B1KQ0KI2VuZGlmDQoNCnN0YXRpYyB2b2lkCXNsb3RfZmlsbChz dHJ1Y3Qga3NlZ3JwICprZyk7DQpzdGF0aWMgc3RydWN0IGtzZSAqc2NoZWRfY2hvb3NlKHZv aWQpOwkJLyogWFhYIFNob3VsZCBiZSB0aHJlYWQgKiAqLw0Kc3RhdGljIHZvaWQgc2NoZWRf YWRkX2ludGVybmFsKHN0cnVjdCB0aHJlYWQgKnRkLCBpbnQgcHJlZW1wdGl2ZSk7DQpzdGF0 aWMgdm9pZCBzY2hlZF9zbGljZShzdHJ1Y3Qga3NlICprZSk7DQpzdGF0aWMgdm9pZCBzY2hl ZF9wcmlvcml0eShzdHJ1Y3Qga3NlZ3JwICprZyk7DQpzdGF0aWMgaW50IHNjaGVkX2ludGVy YWN0X3Njb3JlKHN0cnVjdCBrc2VncnAgKmtnKTsNCnN0YXRpYyB2b2lkIHNjaGVkX2ludGVy YWN0X3VwZGF0ZShzdHJ1Y3Qga3NlZ3JwICprZyk7DQpzdGF0aWMgdm9pZCBzY2hlZF9pbnRl cmFjdF9mb3JrKHN0cnVjdCBrc2VncnAgKmtnKTsNCnN0YXRpYyB2b2lkIHNjaGVkX3BjdGNw dV91cGRhdGUoc3RydWN0IGtzZSAqa2UpOw0KDQovKiBPcGVyYXRpb25zIG9uIHBlciBwcm9j ZXNzb3IgcXVldWVzICovDQpzdGF0aWMgc3RydWN0IGtzZSAqIGtzZXFfY2hvb3NlKHN0cnVj dCBrc2VxICprc2VxKTsNCnN0YXRpYyB2b2lkIGtzZXFfc2V0dXAoc3RydWN0IGtzZXEgKmtz ZXEpOw0Kc3RhdGljIHZvaWQga3NlcV9sb2FkX2FkZChzdHJ1Y3Qga3NlcSAqa3NlcSwgc3Ry dWN0IGtzZSAqa2UpOw0Kc3RhdGljIHZvaWQga3NlcV9sb2FkX3JlbShzdHJ1Y3Qga3NlcSAq a3NlcSwgc3RydWN0IGtzZSAqa2UpOw0Kc3RhdGljIF9faW5saW5lIHZvaWQga3NlcV9ydW5x X2FkZChzdHJ1Y3Qga3NlcSAqa3NlcSwgc3RydWN0IGtzZSAqa2UpOw0Kc3RhdGljIF9faW5s aW5lIHZvaWQga3NlcV9ydW5xX3JlbShzdHJ1Y3Qga3NlcSAqa3NlcSwgc3RydWN0IGtzZSAq a2UpOw0Kc3RhdGljIHZvaWQga3NlcV9uaWNlX2FkZChzdHJ1Y3Qga3NlcSAqa3NlcSwgaW50 IG5pY2UpOw0Kc3RhdGljIHZvaWQga3NlcV9uaWNlX3JlbShzdHJ1Y3Qga3NlcSAqa3NlcSwg aW50IG5pY2UpOw0Kdm9pZCBrc2VxX3ByaW50KGludCBjcHUpOw0KI2lmZGVmIFNNUA0Kc3Rh dGljIGludCBrc2VxX3RyYW5zZmVyKHN0cnVjdCBrc2VxICprc3EsIHN0cnVjdCBrc2UgKmtl LCBpbnQgY2xhc3MpOw0Kc3RhdGljIHN0cnVjdCBrc2UgKnJ1bnFfc3RlYWwoc3RydWN0IHJ1 bnEgKnJxKTsNCnN0YXRpYyB2b2lkIHNjaGVkX2JhbGFuY2Uodm9pZCk7DQpzdGF0aWMgdm9p ZCBzY2hlZF9iYWxhbmNlX2dyb3Vwcyh2b2lkKTsNCnN0YXRpYyB2b2lkIHNjaGVkX2JhbGFu Y2VfZ3JvdXAoc3RydWN0IGtzZXFfZ3JvdXAgKmtzZyk7DQpzdGF0aWMgdm9pZCBzY2hlZF9i YWxhbmNlX3BhaXIoc3RydWN0IGtzZXEgKmhpZ2gsIHN0cnVjdCBrc2VxICpsb3cpOw0Kc3Rh dGljIHZvaWQga3NlcV9tb3ZlKHN0cnVjdCBrc2VxICpmcm9tLCBpbnQgY3B1KTsNCnN0YXRp YyBpbnQga3NlcV9pZGxlZChzdHJ1Y3Qga3NlcSAqa3NlcSk7DQpzdGF0aWMgdm9pZCBrc2Vx X25vdGlmeShzdHJ1Y3Qga3NlICprZSwgaW50IGNwdSk7DQpzdGF0aWMgdm9pZCBrc2VxX2Fz c2lnbihzdHJ1Y3Qga3NlcSAqKTsNCnN0YXRpYyBzdHJ1Y3Qga3NlICprc2VxX3N0ZWFsKHN0 cnVjdCBrc2VxICprc2VxLCBpbnQgc3RlYWxpZGxlKTsNCi8qDQogKiBPbiBQNCBYZW9ucyB0 aGUgcm91bmQtcm9iaW4gaW50ZXJydXB0IGRlbGl2ZXJ5IGlzIGJyb2tlbi4gIEFzIGEgcmVz dWx0IG9mDQogKiB0aGlzLCB3ZSBjYW4ndCBwaW4gaW50ZXJydXB0cyB0byB0aGUgY3B1IHRo YXQgdGhleSB3ZXJlIGRlbGl2ZXJlZCB0bywgDQogKiBvdGhlcndpc2UgYWxsIGl0aHJlYWRz IG9ubHkgcnVuIG9uIENQVSAwLg0KICovDQojaWZkZWYgX19pMzg2X18NCiNkZWZpbmUJS1NF X0NBTl9NSUdSQVRFKGtlLCBjbGFzcykJCQkJCVwNCiAgICAoKGtlKS0+a2VfdGhyZWFkLT50 ZF9waW5uZWQgPT0gMCAmJiAoKGtlKS0+a2VfZmxhZ3MgJiBLRUZfQk9VTkQpID09IDApDQoj ZWxzZSAvKiAhX19pMzg2X18gKi8NCiNkZWZpbmUJS1NFX0NBTl9NSUdSQVRFKGtlLCBjbGFz cykJCQkJCVwNCiAgICAoKGNsYXNzKSAhPSBQUklfSVRIRCAmJiAoa2UpLT5rZV90aHJlYWQt PnRkX3Bpbm5lZCA9PSAwICYmCQlcDQogICAgKChrZSktPmtlX2ZsYWdzICYgS0VGX0JPVU5E KSA9PSAwKQ0KI2VuZGlmIC8qICFfX2kzODZfXyAqLw0KI2VuZGlmDQoNCnZvaWQNCmtzZXFf cHJpbnQoaW50IGNwdSkNCnsNCglzdHJ1Y3Qga3NlcSAqa3NlcTsNCglpbnQgaTsNCg0KCWtz ZXEgPSBLU0VRX0NQVShjcHUpOw0KDQoJcHJpbnRmKCJrc2VxOlxuIik7DQoJcHJpbnRmKCJc dGxvYWQ6ICAgICAgICAgICAlZFxuIiwga3NlcS0+a3NxX2xvYWQpOw0KCXByaW50ZigiXHRs b2FkIFRJTUVTSEFSRTogJWRcbiIsIGtzZXEtPmtzcV9sb2FkX3RpbWVzaGFyZSk7DQojaWZk ZWYgU01QDQoJcHJpbnRmKCJcdGxvYWQgdHJhbnNmZXJhYmxlOiAlZFxuIiwga3NlcS0+a3Nx X3RyYW5zZmVyYWJsZSk7DQojZW5kaWYNCglwcmludGYoIlx0bmljZW1pbjpcdCVkXG4iLCBr c2VxLT5rc3FfbmljZW1pbik7DQoJcHJpbnRmKCJcdG5pY2UgY291bnRzOlxuIik7DQoJZm9y IChpID0gMDsgaSA8IFNDSEVEX1BSSV9OUkVTVjsgaSsrKQ0KCQlpZiAoa3NlcS0+a3NxX25p Y2VbaV0pDQoJCQlwcmludGYoIlx0XHQlZCA9ICVkXG4iLA0KCQkJICAgIGkgLSBTQ0hFRF9Q UklfTkhBTEYsIGtzZXEtPmtzcV9uaWNlW2ldKTsNCn0NCg0Kc3RhdGljIF9faW5saW5lIHZv aWQNCmtzZXFfcnVucV9hZGQoc3RydWN0IGtzZXEgKmtzZXEsIHN0cnVjdCBrc2UgKmtlKQ0K ew0KI2lmZGVmIFNNUA0KCWlmIChLU0VfQ0FOX01JR1JBVEUoa2UsIFBSSV9CQVNFKGtlLT5r ZV9rc2VncnAtPmtnX3ByaV9jbGFzcykpKSB7DQoJCWtzZXEtPmtzcV90cmFuc2ZlcmFibGUr KzsNCgkJa3NlcS0+a3NxX2dyb3VwLT5rc2dfdHJhbnNmZXJhYmxlKys7DQoJCWtlLT5rZV9m bGFncyB8PSBLRUZfWEZFUkFCTEU7DQoJfQ0KI2VuZGlmDQoJcnVucV9hZGQoa2UtPmtlX3J1 bnEsIGtlLCAwKTsNCn0NCg0Kc3RhdGljIF9faW5saW5lIHZvaWQNCmtzZXFfcnVucV9yZW0o c3RydWN0IGtzZXEgKmtzZXEsIHN0cnVjdCBrc2UgKmtlKQ0Kew0KI2lmZGVmIFNNUA0KCWlm IChrZS0+a2VfZmxhZ3MgJiBLRUZfWEZFUkFCTEUpIHsNCgkJa3NlcS0+a3NxX3RyYW5zZmVy YWJsZS0tOw0KCQlrc2VxLT5rc3FfZ3JvdXAtPmtzZ190cmFuc2ZlcmFibGUtLTsNCgkJa2Ut PmtlX2ZsYWdzICY9IH5LRUZfWEZFUkFCTEU7DQoJfQ0KI2VuZGlmDQoJcnVucV9yZW1vdmUo a2UtPmtlX3J1bnEsIGtlKTsNCn0NCg0Kc3RhdGljIHZvaWQNCmtzZXFfbG9hZF9hZGQoc3Ry dWN0IGtzZXEgKmtzZXEsIHN0cnVjdCBrc2UgKmtlKQ0Kew0KCWludCBjbGFzczsNCgltdHhf YXNzZXJ0KCZzY2hlZF9sb2NrLCBNQV9PV05FRCk7DQoJY2xhc3MgPSBQUklfQkFTRShrZS0+ a2Vfa3NlZ3JwLT5rZ19wcmlfY2xhc3MpOw0KCWlmIChjbGFzcyA9PSBQUklfVElNRVNIQVJF KQ0KCQlrc2VxLT5rc3FfbG9hZF90aW1lc2hhcmUrKzsNCglrc2VxLT5rc3FfbG9hZCsrOw0K CWlmIChjbGFzcyAhPSBQUklfSVRIRCAmJiAoa2UtPmtlX3Byb2MtPnBfZmxhZyAmIFBfTk9M T0FEKSA9PSAwKQ0KI2lmZGVmIFNNUA0KCQlrc2VxLT5rc3FfZ3JvdXAtPmtzZ19sb2FkKys7 DQojZWxzZQ0KCQlrc2VxLT5rc3Ffc3lzbG9hZCsrOw0KI2VuZGlmDQoJaWYgKGtlLT5rZV9r c2VncnAtPmtnX3ByaV9jbGFzcyA9PSBQUklfVElNRVNIQVJFKQ0KCQlDVFI2KEtUUl9VTEUs DQoJCSAgICAiQWRkIGtzZSAlcCB0byAlcCAoc2xpY2U6ICVkLCBwcmk6ICVkLCBuaWNlOiAl ZCglZCkpIiwNCgkJICAgIGtlLCBrZS0+a2VfcnVucSwga2UtPmtlX3NsaWNlLCBrZS0+a2Vf dGhyZWFkLT50ZF9wcmlvcml0eSwNCgkJICAgIGtlLT5rZV9wcm9jLT5wX25pY2UsIGtzZXEt PmtzcV9uaWNlbWluKTsNCglpZiAoa2UtPmtlX2tzZWdycC0+a2dfcHJpX2NsYXNzID09IFBS SV9USU1FU0hBUkUpDQoJCWtzZXFfbmljZV9hZGQoa3NlcSwga2UtPmtlX3Byb2MtPnBfbmlj ZSk7DQp9DQoNCnN0YXRpYyB2b2lkDQprc2VxX2xvYWRfcmVtKHN0cnVjdCBrc2VxICprc2Vx LCBzdHJ1Y3Qga3NlICprZSkNCnsNCglpbnQgY2xhc3M7DQoJbXR4X2Fzc2VydCgmc2NoZWRf bG9jaywgTUFfT1dORUQpOw0KCWNsYXNzID0gUFJJX0JBU0Uoa2UtPmtlX2tzZWdycC0+a2df cHJpX2NsYXNzKTsNCglpZiAoY2xhc3MgPT0gUFJJX1RJTUVTSEFSRSkNCgkJa3NlcS0+a3Nx X2xvYWRfdGltZXNoYXJlLS07DQoJaWYgKGNsYXNzICE9IFBSSV9JVEhEICAmJiAoa2UtPmtl X3Byb2MtPnBfZmxhZyAmIFBfTk9MT0FEKSA9PSAwKQ0KI2lmZGVmIFNNUA0KCQlrc2VxLT5r c3FfZ3JvdXAtPmtzZ19sb2FkLS07DQojZWxzZQ0KCQlrc2VxLT5rc3Ffc3lzbG9hZC0tOw0K I2VuZGlmDQoJa3NlcS0+a3NxX2xvYWQtLTsNCglrZS0+a2VfcnVucSA9IE5VTEw7DQoJaWYg KGtlLT5rZV9rc2VncnAtPmtnX3ByaV9jbGFzcyA9PSBQUklfVElNRVNIQVJFKQ0KCQlrc2Vx X25pY2VfcmVtKGtzZXEsIGtlLT5rZV9wcm9jLT5wX25pY2UpOw0KfQ0KDQpzdGF0aWMgdm9p ZA0Ka3NlcV9uaWNlX2FkZChzdHJ1Y3Qga3NlcSAqa3NlcSwgaW50IG5pY2UpDQp7DQoJbXR4 X2Fzc2VydCgmc2NoZWRfbG9jaywgTUFfT1dORUQpOw0KCS8qIE5vcm1hbGl6ZSB0byB6ZXJv LiAqLw0KCWtzZXEtPmtzcV9uaWNlW25pY2UgKyBTQ0hFRF9QUklfTkhBTEZdKys7DQoJaWYg KG5pY2UgPCBrc2VxLT5rc3FfbmljZW1pbiB8fCBrc2VxLT5rc3FfbG9hZF90aW1lc2hhcmUg PT0gMSkNCgkJa3NlcS0+a3NxX25pY2VtaW4gPSBuaWNlOw0KfQ0KDQpzdGF0aWMgdm9pZA0K a3NlcV9uaWNlX3JlbShzdHJ1Y3Qga3NlcSAqa3NlcSwgaW50IG5pY2UpIA0Kew0KCWludCBu Ow0KDQoJbXR4X2Fzc2VydCgmc2NoZWRfbG9jaywgTUFfT1dORUQpOw0KCS8qIE5vcm1hbGl6 ZSB0byB6ZXJvLiAqLw0KCW4gPSBuaWNlICsgU0NIRURfUFJJX05IQUxGOw0KCWtzZXEtPmtz cV9uaWNlW25dLS07DQoJS0FTU0VSVChrc2VxLT5rc3FfbmljZVtuXSA+PSAwLCAoIk5lZ2F0 aXZlIG5pY2UgY291bnQuIikpOw0KDQoJLyoNCgkgKiBJZiB0aGlzIHdhc24ndCB0aGUgc21h bGxlc3QgbmljZSB2YWx1ZSBvciB0aGVyZSBhcmUgbW9yZSBpbg0KCSAqIHRoaXMgYnVja2V0 IHdlIGNhbiBqdXN0IHJldHVybi4gIE90aGVyd2lzZSB3ZSBoYXZlIHRvIHJlY2FsY3VsYXRl DQoJICogdGhlIHNtYWxsZXN0IG5pY2UuDQoJICovDQoJaWYgKG5pY2UgIT0ga3NlcS0+a3Nx X25pY2VtaW4gfHwNCgkgICAga3NlcS0+a3NxX25pY2Vbbl0gIT0gMCB8fA0KCSAgICBrc2Vx LT5rc3FfbG9hZF90aW1lc2hhcmUgPT0gMCkNCgkJcmV0dXJuOw0KDQoJZm9yICg7IG4gPCBT Q0hFRF9QUklfTlJFU1Y7IG4rKykNCgkJaWYgKGtzZXEtPmtzcV9uaWNlW25dKSB7DQoJCQlr c2VxLT5rc3FfbmljZW1pbiA9IG4gLSBTQ0hFRF9QUklfTkhBTEY7DQoJCQlyZXR1cm47DQoJ CX0NCn0NCg0KI2lmZGVmIFNNUA0KLyoNCiAqIHNjaGVkX2JhbGFuY2UgaXMgYSBzaW1wbGUg Q1BVIGxvYWQgYmFsYW5jaW5nIGFsZ29yaXRobS4gIEl0IG9wZXJhdGVzIGJ5DQogKiBmaW5k aW5nIHRoZSBsZWFzdCBsb2FkZWQgYW5kIG1vc3QgbG9hZGVkIGNwdSBhbmQgZXF1YWxpemlu ZyB0aGVpciBsb2FkDQogKiBieSBtaWdyYXRpbmcgc29tZSBwcm9jZXNzZXMuDQogKg0KICog RGVhbGluZyBvbmx5IHdpdGggdHdvIENQVXMgYXQgYSB0aW1lIGhhcyB0d28gYWR2YW50YWdl cy4gIEZpcnN0bHksIG1vc3QNCiAqIGluc3RhbGxhdGlvbnMgd2lsbCBvbmx5IGhhdmUgMiBj cHVzLiAgU2Vjb25kbHksIGxvYWQgYmFsYW5jaW5nIHRvbyBtdWNoIGF0DQogKiBvbmNlIGNh biBoYXZlIGFuIHVucGxlYXNhbnQgZWZmZWN0IG9uIHRoZSBzeXN0ZW0uICBUaGUgc2NoZWR1 bGVyIHJhcmVseSBoYXMNCiAqIGVub3VnaCBpbmZvcm1hdGlvbiB0byBtYWtlIHBlcmZlY3Qg ZGVjaXNpb25zLiAgU28gdGhpcyBhbGdvcml0aG0gY2hvb3Nlcw0KICogYWxnb3JpdGhtIHNp bXBsaWNpdHkgYW5kIG1vcmUgZ3JhZHVhbCBlZmZlY3RzIG9uIGxvYWQgaW4gbGFyZ2VyIHN5 c3RlbXMuDQogKg0KICogSXQgY291bGQgYmUgaW1wcm92ZWQgYnkgY29uc2lkZXJpbmcgdGhl IHByaW9yaXRpZXMgYW5kIHNsaWNlcyBhc3NpZ25lZCB0bw0KICogZWFjaCB0YXNrIHByaW9y IHRvIGJhbGFuY2luZyB0aGVtLiAgVGhlcmUgYXJlIG1hbnkgcGF0aG9sb2dpY2FsIGNhc2Vz IHdpdGgNCiAqIGFueSBhcHByb2FjaCBhbmQgc28gdGhlIHNlbWkgcmFuZG9tIGFsZ29yaXRo bSBiZWxvdyBtYXkgd29yayBhcyB3ZWxsIGFzIGFueS4NCiAqDQogKi8NCnN0YXRpYyB2b2lk DQpzY2hlZF9iYWxhbmNlKHZvaWQpDQp7DQoJc3RydWN0IGtzZXFfZ3JvdXAgKmhpZ2g7DQoJ c3RydWN0IGtzZXFfZ3JvdXAgKmxvdzsNCglzdHJ1Y3Qga3NlcV9ncm91cCAqa3NnOw0KCWlu dCBjbnQ7DQoJaW50IGk7DQoNCglpZiAoc21wX3N0YXJ0ZWQgPT0gMCkNCgkJZ290byBvdXQ7 DQoJbG93ID0gaGlnaCA9IE5VTEw7DQoJaSA9IHJhbmRvbSgpICUgKGtzZ19tYXhpZCArIDEp Ow0KCWZvciAoY250ID0gMDsgY250IDw9IGtzZ19tYXhpZDsgY250KyspIHsNCgkJa3NnID0g S1NFUV9HUk9VUChpKTsNCgkJLyoNCgkJICogRmluZCB0aGUgQ1BVIHdpdGggdGhlIGhpZ2hl c3QgbG9hZCB0aGF0IGhhcyBzb21lDQoJCSAqIHRocmVhZHMgdG8gdHJhbnNmZXIuDQoJCSAq Lw0KCQlpZiAoKGhpZ2ggPT0gTlVMTCB8fCBrc2ctPmtzZ19sb2FkID4gaGlnaC0+a3NnX2xv YWQpDQoJCSAgICAmJiBrc2ctPmtzZ190cmFuc2ZlcmFibGUpDQoJCQloaWdoID0ga3NnOw0K CQlpZiAobG93ID09IE5VTEwgfHwga3NnLT5rc2dfbG9hZCA8IGxvdy0+a3NnX2xvYWQpDQoJ CQlsb3cgPSBrc2c7DQoJCWlmICgrK2kgPiBrc2dfbWF4aWQpDQoJCQlpID0gMDsNCgl9DQoJ aWYgKGxvdyAhPSBOVUxMICYmIGhpZ2ggIT0gTlVMTCAmJiBoaWdoICE9IGxvdykNCgkJc2No ZWRfYmFsYW5jZV9wYWlyKExJU1RfRklSU1QoJmhpZ2gtPmtzZ19tZW1iZXJzKSwNCgkJICAg IExJU1RfRklSU1QoJmxvdy0+a3NnX21lbWJlcnMpKTsNCm91dDoNCgliYWxfdGljayA9IHRp Y2tzICsgKHJhbmRvbSgpICUgKGh6ICogMikpOw0KfQ0KDQpzdGF0aWMgdm9pZA0Kc2NoZWRf YmFsYW5jZV9ncm91cHModm9pZCkNCnsNCglpbnQgaTsNCg0KCW10eF9hc3NlcnQoJnNjaGVk X2xvY2ssIE1BX09XTkVEKTsNCglpZiAoc21wX3N0YXJ0ZWQpDQoJCWZvciAoaSA9IDA7IGkg PD0ga3NnX21heGlkOyBpKyspDQoJCQlzY2hlZF9iYWxhbmNlX2dyb3VwKEtTRVFfR1JPVVAo aSkpOw0KCWdiYWxfdGljayA9IHRpY2tzICsgKHJhbmRvbSgpICUgKGh6ICogMikpOw0KfQ0K DQpzdGF0aWMgdm9pZA0Kc2NoZWRfYmFsYW5jZV9ncm91cChzdHJ1Y3Qga3NlcV9ncm91cCAq a3NnKQ0Kew0KCXN0cnVjdCBrc2VxICprc2VxOw0KCXN0cnVjdCBrc2VxICpoaWdoOw0KCXN0 cnVjdCBrc2VxICpsb3c7DQoJaW50IGxvYWQ7DQoNCglpZiAoa3NnLT5rc2dfdHJhbnNmZXJh YmxlID09IDApDQoJCXJldHVybjsNCglsb3cgPSBOVUxMOw0KCWhpZ2ggPSBOVUxMOw0KCUxJ U1RfRk9SRUFDSChrc2VxLCAma3NnLT5rc2dfbWVtYmVycywga3NxX3NpYmxpbmdzKSB7DQoJ CWxvYWQgPSBrc2VxLT5rc3FfbG9hZDsNCgkJaWYgKGhpZ2ggPT0gTlVMTCB8fCBsb2FkID4g aGlnaC0+a3NxX2xvYWQpDQoJCQloaWdoID0ga3NlcTsNCgkJaWYgKGxvdyA9PSBOVUxMIHx8 IGxvYWQgPCBsb3ctPmtzcV9sb2FkKQ0KCQkJbG93ID0ga3NlcTsNCgl9DQoJaWYgKGhpZ2gg IT0gTlVMTCAmJiBsb3cgIT0gTlVMTCAmJiBoaWdoICE9IGxvdykNCgkJc2NoZWRfYmFsYW5j ZV9wYWlyKGhpZ2gsIGxvdyk7DQp9DQoNCnN0YXRpYyB2b2lkDQpzY2hlZF9iYWxhbmNlX3Bh aXIoc3RydWN0IGtzZXEgKmhpZ2gsIHN0cnVjdCBrc2VxICpsb3cpDQp7DQoJaW50IHRyYW5z ZmVyYWJsZTsNCglpbnQgaGlnaF9sb2FkOw0KCWludCBsb3dfbG9hZDsNCglpbnQgbW92ZTsN CglpbnQgZGlmZjsNCglpbnQgaTsNCg0KCS8qDQoJICogSWYgd2UncmUgdHJhbnNmZXJpbmcg d2l0aGluIGEgZ3JvdXAgd2UgaGF2ZSB0byB1c2UgdGhpcyBzcGVjaWZpYw0KCSAqIGtzZXEn cyB0cmFuc2ZlcmFibGUgY291bnQsIG90aGVyd2lzZSB3ZSBjYW4gc3RlYWwgZnJvbSBvdGhl ciBtZW1iZXJzDQoJICogb2YgdGhlIGdyb3VwLg0KCSAqLw0KCWlmIChoaWdoLT5rc3FfZ3Jv dXAgPT0gbG93LT5rc3FfZ3JvdXApIHsNCgkJdHJhbnNmZXJhYmxlID0gaGlnaC0+a3NxX3Ry YW5zZmVyYWJsZTsNCgkJaGlnaF9sb2FkID0gaGlnaC0+a3NxX2xvYWQ7DQoJCWxvd19sb2Fk ID0gbG93LT5rc3FfbG9hZDsNCgl9IGVsc2Ugew0KCQl0cmFuc2ZlcmFibGUgPSBoaWdoLT5r c3FfZ3JvdXAtPmtzZ190cmFuc2ZlcmFibGU7DQoJCWhpZ2hfbG9hZCA9IGhpZ2gtPmtzcV9n cm91cC0+a3NnX2xvYWQ7DQoJCWxvd19sb2FkID0gbG93LT5rc3FfZ3JvdXAtPmtzZ19sb2Fk Ow0KCX0NCglpZiAodHJhbnNmZXJhYmxlID09IDApDQoJCXJldHVybjsNCgkvKg0KCSAqIERl dGVybWluZSB3aGF0IHRoZSBpbWJhbGFuY2UgaXMgYW5kIHRoZW4gYWRqdXN0IHRoYXQgdG8g aG93IG1hbnkNCgkgKiBrc2VzIHdlIGFjdHVhbGx5IGhhdmUgdG8gZ2l2ZSB1cCAodHJhbnNm ZXJhYmxlKS4NCgkgKi8NCglkaWZmID0gaGlnaF9sb2FkIC0gbG93X2xvYWQ7DQoJbW92ZSA9 IGRpZmYgLyAyOw0KCWlmIChkaWZmICYgMHgxKQ0KCQltb3ZlKys7DQoJbW92ZSA9IG1pbiht b3ZlLCB0cmFuc2ZlcmFibGUpOw0KCWZvciAoaSA9IDA7IGkgPCBtb3ZlOyBpKyspDQoJCWtz ZXFfbW92ZShoaWdoLCBLU0VRX0lEKGxvdykpOw0KCXJldHVybjsNCn0NCg0Kc3RhdGljIHZv aWQNCmtzZXFfbW92ZShzdHJ1Y3Qga3NlcSAqZnJvbSwgaW50IGNwdSkNCnsNCglzdHJ1Y3Qg a3NlcSAqa3NlcTsNCglzdHJ1Y3Qga3NlcSAqdG87DQoJc3RydWN0IGtzZSAqa2U7DQoNCglr c2VxID0gZnJvbTsNCgl0byA9IEtTRVFfQ1BVKGNwdSk7DQoJa2UgPSBrc2VxX3N0ZWFsKGtz ZXEsIDEpOw0KCWlmIChrZSA9PSBOVUxMKSB7DQoJCXN0cnVjdCBrc2VxX2dyb3VwICprc2c7 DQoNCgkJa3NnID0ga3NlcS0+a3NxX2dyb3VwOw0KCQlMSVNUX0ZPUkVBQ0goa3NlcSwgJmtz Zy0+a3NnX21lbWJlcnMsIGtzcV9zaWJsaW5ncykgew0KCQkJaWYgKGtzZXEgPT0gZnJvbSB8 fCBrc2VxLT5rc3FfdHJhbnNmZXJhYmxlID09IDApDQoJCQkJY29udGludWU7DQoJCQlrZSA9 IGtzZXFfc3RlYWwoa3NlcSwgMSk7DQoJCQlicmVhazsNCgkJfQ0KCQlpZiAoa2UgPT0gTlVM TCkNCgkJCXBhbmljKCJrc2VxX21vdmU6IE5vIEtTRXMgYXZhaWxhYmxlIHdpdGggYSAiDQoJ CQkgICAgInRyYW5zZmVyYWJsZSBjb3VudCBvZiAlZFxuIiwgDQoJCQkgICAga3NnLT5rc2df dHJhbnNmZXJhYmxlKTsNCgl9DQoJaWYgKGtzZXEgPT0gdG8pDQoJCXJldHVybjsNCglrZS0+ a2Vfc3RhdGUgPSBLRVNfVEhSRUFEOw0KCWtzZXFfcnVucV9yZW0oa3NlcSwga2UpOw0KCWtz ZXFfbG9hZF9yZW0oa3NlcSwga2UpOw0KCWtzZXFfbm90aWZ5KGtlLCBjcHUpOw0KfQ0KDQpz dGF0aWMgaW50DQprc2VxX2lkbGVkKHN0cnVjdCBrc2VxICprc2VxKQ0Kew0KCXN0cnVjdCBr c2VxX2dyb3VwICprc2c7DQoJc3RydWN0IGtzZXEgKnN0ZWFsOw0KCXN0cnVjdCBrc2UgKmtl Ow0KDQoJa3NnID0ga3NlcS0+a3NxX2dyb3VwOw0KCS8qDQoJICogSWYgd2UncmUgaW4gYSBj cHUgZ3JvdXAsIHRyeSBhbmQgc3RlYWwga3NlcyBmcm9tIGFub3RoZXIgY3B1IGluDQoJICog dGhlIGdyb3VwIGJlZm9yZSBpZGxpbmcuDQoJICovDQoJaWYgKGtzZy0+a3NnX2NwdXMgPiAx ICYmIGtzZy0+a3NnX3RyYW5zZmVyYWJsZSkgew0KCQlMSVNUX0ZPUkVBQ0goc3RlYWwsICZr c2ctPmtzZ19tZW1iZXJzLCBrc3Ffc2libGluZ3MpIHsNCgkJCWlmIChzdGVhbCA9PSBrc2Vx IHx8IHN0ZWFsLT5rc3FfdHJhbnNmZXJhYmxlID09IDApDQoJCQkJY29udGludWU7DQoJCQlr ZSA9IGtzZXFfc3RlYWwoc3RlYWwsIDApOw0KCQkJaWYgKGtlID09IE5VTEwpDQoJCQkJY29u dGludWU7DQoJCQlrZS0+a2Vfc3RhdGUgPSBLRVNfVEhSRUFEOw0KCQkJa3NlcV9ydW5xX3Jl bShzdGVhbCwga2UpOw0KCQkJa3NlcV9sb2FkX3JlbShzdGVhbCwga2UpOw0KCQkJa2UtPmtl X2NwdSA9IFBDUFVfR0VUKGNwdWlkKTsNCgkJCXNjaGVkX2FkZF9pbnRlcm5hbChrZS0+a2Vf dGhyZWFkLCAwKTsNCgkJCXJldHVybiAoMCk7DQoJCX0NCgl9DQoJLyoNCgkgKiBXZSBvbmx5 IHNldCB0aGUgaWRsZWQgYml0IHdoZW4gYWxsIG9mIHRoZSBjcHVzIGluIHRoZSBncm91cCBh cmUNCgkgKiBpZGxlLiAgT3RoZXJ3aXNlIHdlIGNvdWxkIGdldCBpbnRvIGEgc2l0dWF0aW9u IHdoZXJlIGEgS1NFIGJvdW5jZXMNCgkgKiBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuIHR3byBp ZGxlIGNvcmVzIG9uIHNlcGVyYXRlIHBoeXNpY2FsIENQVXMuDQoJICovDQoJa3NnLT5rc2df aWRsZW1hc2sgfD0gUENQVV9HRVQoY3B1bWFzayk7DQoJaWYgKGtzZy0+a3NnX2lkbGVtYXNr ICE9IGtzZy0+a3NnX2NwdW1hc2spDQoJCXJldHVybiAoMSk7DQoJYXRvbWljX3NldF9pbnQo JmtzZXFfaWRsZSwga3NnLT5rc2dfbWFzayk7DQoJcmV0dXJuICgxKTsNCn0NCg0Kc3RhdGlj IHZvaWQNCmtzZXFfYXNzaWduKHN0cnVjdCBrc2VxICprc2VxKQ0Kew0KCXN0cnVjdCBrc2Ug Km5rZTsNCglzdHJ1Y3Qga3NlICprZTsNCg0KCWRvIHsNCgkJKih2b2xhdGlsZSBzdHJ1Y3Qg a3NlICoqKSZrZSA9IGtzZXEtPmtzcV9hc3NpZ25lZDsNCgl9IHdoaWxlKCFhdG9taWNfY21w c2V0X3B0cigma3NlcS0+a3NxX2Fzc2lnbmVkLCBrZSwgTlVMTCkpOw0KCWZvciAoOyBrZSAh PSBOVUxMOyBrZSA9IG5rZSkgew0KCQlua2UgPSBrZS0+a2VfYXNzaWduOw0KCQlrZS0+a2Vf ZmxhZ3MgJj0gfktFRl9BU1NJR05FRDsNCgkJc2NoZWRfYWRkX2ludGVybmFsKGtlLT5rZV90 aHJlYWQsIDApOw0KCX0NCn0NCg0Kc3RhdGljIHZvaWQNCmtzZXFfbm90aWZ5KHN0cnVjdCBr c2UgKmtlLCBpbnQgY3B1KQ0Kew0KCXN0cnVjdCBrc2VxICprc2VxOw0KCXN0cnVjdCB0aHJl YWQgKnRkOw0KCXN0cnVjdCBwY3B1ICpwY3B1Ow0KCWludCBwcmlvOw0KDQoJa2UtPmtlX2Nw dSA9IGNwdTsNCglrZS0+a2VfZmxhZ3MgfD0gS0VGX0FTU0lHTkVEOw0KCXByaW8gPSBrZS0+ a2VfdGhyZWFkLT50ZF9wcmlvcml0eTsNCg0KCWtzZXEgPSBLU0VRX0NQVShjcHUpOw0KDQoJ LyoNCgkgKiBQbGFjZSBhIEtTRSBvbiBhbm90aGVyIGNwdSdzIHF1ZXVlIGFuZCBmb3JjZSBh IHJlc2NoZWQuDQoJICovDQoJZG8gew0KCQkqKHZvbGF0aWxlIHN0cnVjdCBrc2UgKiopJmtl LT5rZV9hc3NpZ24gPSBrc2VxLT5rc3FfYXNzaWduZWQ7DQoJfSB3aGlsZSghYXRvbWljX2Nt cHNldF9wdHIoJmtzZXEtPmtzcV9hc3NpZ25lZCwga2UtPmtlX2Fzc2lnbiwga2UpKTsNCgkv Kg0KCSAqIFdpdGhvdXQgc2NoZWRfbG9jayB3ZSBjb3VsZCBsb3NlIGEgcmFjZSB3aGVyZSB3 ZSBzZXQgTkVFRFJFU0NIRUQNCgkgKiBvbiBhIHRocmVhZCB0aGF0IGlzIHN3aXRjaGVkIG91 dCBiZWZvcmUgdGhlIElQSSBpcyBkZWxpdmVyZWQuICBUaGlzDQoJICogd291bGQgbGVhZCB1 cyB0byBtaXNzIHRoZSByZXNjaGVkLiAgVGhpcyB3aWxsIGJlIGEgcHJvYmxlbSBvbmNlDQoJ ICogc2NoZWRfbG9jayBpcyBwdXNoZWQgZG93bi4NCgkgKi8NCglwY3B1ID0gcGNwdV9maW5k KGNwdSk7DQoJdGQgPSBwY3B1LT5wY19jdXJ0aHJlYWQ7DQoJaWYgKGtlLT5rZV90aHJlYWQt PnRkX3ByaW9yaXR5IDwgdGQtPnRkX3ByaW9yaXR5IHx8DQoJICAgIHRkID09IHBjcHUtPnBj X2lkbGV0aHJlYWQpIHsNCgkJdGQtPnRkX2ZsYWdzIHw9IFRERl9ORUVEUkVTQ0hFRDsNCgkJ aXBpX3NlbGVjdGVkKDEgPDwgY3B1LCBJUElfQVNUKTsNCgl9DQp9DQoNCnN0YXRpYyBzdHJ1 Y3Qga3NlICoNCnJ1bnFfc3RlYWwoc3RydWN0IHJ1bnEgKnJxKQ0Kew0KCXN0cnVjdCBycWhl YWQgKnJxaDsNCglzdHJ1Y3QgcnFiaXRzICpycWI7DQoJc3RydWN0IGtzZSAqa2U7DQoJaW50 IHdvcmQ7DQoJaW50IGJpdDsNCg0KCW10eF9hc3NlcnQoJnNjaGVkX2xvY2ssIE1BX09XTkVE KTsNCglycWIgPSAmcnEtPnJxX3N0YXR1czsNCglmb3IgKHdvcmQgPSAwOyB3b3JkIDwgUlFC X0xFTjsgd29yZCsrKSB7DQoJCWlmIChycWItPnJxYl9iaXRzW3dvcmRdID09IDApDQoJCQlj b250aW51ZTsNCgkJZm9yIChiaXQgPSAwOyBiaXQgPCBSUUJfQlBXOyBiaXQrKykgew0KCQkJ aWYgKChycWItPnJxYl9iaXRzW3dvcmRdICYgKDF1bCA8PCBiaXQpKSA9PSAwKQ0KCQkJCWNv bnRpbnVlOw0KCQkJcnFoID0gJnJxLT5ycV9xdWV1ZXNbYml0ICsgKHdvcmQgPDwgUlFCX0wy QlBXKV07DQoJCQlUQUlMUV9GT1JFQUNIKGtlLCBycWgsIGtlX3Byb2NxKSB7DQoJCQkJaWYg KEtTRV9DQU5fTUlHUkFURShrZSwNCgkJCQkgICAgUFJJX0JBU0Uoa2UtPmtlX2tzZWdycC0+ a2dfcHJpX2NsYXNzKSkpDQoJCQkJCXJldHVybiAoa2UpOw0KCQkJfQ0KCQl9DQoJfQ0KCXJl dHVybiAoTlVMTCk7DQp9DQoNCnN0YXRpYyBzdHJ1Y3Qga3NlICoNCmtzZXFfc3RlYWwoc3Ry dWN0IGtzZXEgKmtzZXEsIGludCBzdGVhbGlkbGUpDQp7DQoJc3RydWN0IGtzZSAqa2U7DQoN CgkvKg0KCSAqIFN0ZWFsIGZyb20gbmV4dCBmaXJzdCB0byB0cnkgdG8gZ2V0IGEgbm9uLWlu dGVyYWN0aXZlIHRhc2sgdGhhdA0KCSAqIG1heSBub3QgaGF2ZSBydW4gZm9yIGEgd2hpbGUu DQoJICovDQoJaWYgKChrZSA9IHJ1bnFfc3RlYWwoa3NlcS0+a3NxX25leHQpKSAhPSBOVUxM KQ0KCQlyZXR1cm4gKGtlKTsNCglpZiAoKGtlID0gcnVucV9zdGVhbChrc2VxLT5rc3FfY3Vy cikpICE9IE5VTEwpDQoJCXJldHVybiAoa2UpOw0KCWlmIChzdGVhbGlkbGUpDQoJCXJldHVy biAocnVucV9zdGVhbCgma3NlcS0+a3NxX2lkbGUpKTsNCglyZXR1cm4gKE5VTEwpOw0KfQ0K DQppbnQNCmtzZXFfdHJhbnNmZXIoc3RydWN0IGtzZXEgKmtzZXEsIHN0cnVjdCBrc2UgKmtl LCBpbnQgY2xhc3MpDQp7DQoJc3RydWN0IGtzZXFfZ3JvdXAgKmtzZzsNCglpbnQgY3B1Ow0K DQoJaWYgKHNtcF9zdGFydGVkID09IDApDQoJCXJldHVybiAoMCk7DQoJY3B1ID0gMDsNCgkv Kg0KCSAqIElmIG91ciBsb2FkIGV4Y2VlZHMgYSBjZXJ0YWluIHRocmVzaG9sZCB3ZSBzaG91 bGQgYXR0ZW1wdCB0bw0KCSAqIHJlYXNzaWduIHRoaXMgdGhyZWFkLiAgVGhlIGZpcnN0IGNh bmRpZGF0ZSBpcyB0aGUgY3B1IHRoYXQNCgkgKiBvcmlnaW5hbGx5IHJhbiB0aGUgdGhyZWFk LiAgSWYgaXQgaXMgaWRsZSwgYXNzaWduIGl0IHRoZXJlLCANCgkgKiBvdGhlcndpc2UsIHBp Y2sgYW4gaWRsZSBjcHUuDQoJICoNCgkgKiBUaGUgdGhyZXNob2xkIGF0IHdoaWNoIHdlIHN0 YXJ0IHRvIHJlYXNzaWduIGtzZXMgaGFzIGEgbGFyZ2UgaW1wYWN0DQoJICogb24gdGhlIG92 ZXJhbGwgcGVyZm9ybWFuY2Ugb2YgdGhlIHN5c3RlbS4gIFR1bmVkIHRvbyBoaWdoIGFuZA0K CSAqIHNvbWUgQ1BVcyBtYXkgaWRsZS4gIFRvbyBsb3cgYW5kIHRoZXJlIHdpbGwgYmUgZXhj ZXNzIG1pZ3JhdGlvbg0KCSAqIGFuZCBjb250ZXh0IHN3aXRjaGVzLg0KCSAqLw0KCWtzZyA9 IGtzZXEtPmtzcV9ncm91cDsNCglpZiAoa3NnLT5rc2dfbG9hZCA+IGtzZy0+a3NnX2NwdXMg JiYga3NlcV9pZGxlKSB7DQoJCWtzZyA9IEtTRVFfQ1BVKGtlLT5rZV9jcHUpLT5rc3FfZ3Jv dXA7DQoJCWlmIChrc2VxX2lkbGUgJiBrc2ctPmtzZ19tYXNrKSB7DQoJCQljcHUgPSBmZnMo a3NnLT5rc2dfaWRsZW1hc2spOw0KCQkJaWYgKGNwdSkNCgkJCQlnb3RvIG1pZ3JhdGU7DQoJ CX0NCgkJLyoNCgkJICogTXVsdGlwbGUgY3B1cyBjb3VsZCBmaW5kIHRoaXMgYml0IHNpbXVs dGFuZW91c2x5DQoJCSAqIGJ1dCB0aGUgcmFjZSBzaG91bGRuJ3QgYmUgdGVycmlibGUuDQoJ CSAqLw0KCQljcHUgPSBmZnMoa3NlcV9pZGxlKTsNCgkJaWYgKGNwdSkNCgkJCWdvdG8gbWln cmF0ZTsNCgl9DQoJLyoNCgkgKiBJZiBhbm90aGVyIGNwdSBpbiB0aGlzIGdyb3VwIGhhcyBp ZGxlZCwgYXNzaWduIGEgdGhyZWFkIG92ZXINCgkgKiB0byB0aGVtIGFmdGVyIGNoZWNraW5n IHRvIHNlZSBpZiB0aGVyZSBhcmUgaWRsZWQgZ3JvdXBzLg0KCSAqLw0KCWtzZyA9IGtzZXEt PmtzcV9ncm91cDsNCglpZiAoa3NnLT5rc2dfaWRsZW1hc2spIHsNCgkJY3B1ID0gZmZzKGtz Zy0+a3NnX2lkbGVtYXNrKTsNCgkJaWYgKGNwdSkNCgkJCWdvdG8gbWlncmF0ZTsNCgl9DQoJ LyoNCgkgKiBObyBuZXcgQ1BVIHdhcyBmb3VuZC4NCgkgKi8NCglyZXR1cm4gKDApOw0KbWln cmF0ZToNCgkvKg0KCSAqIE5vdyB0aGF0IHdlJ3ZlIGZvdW5kIGFuIGlkbGUgQ1BVLCBtaWdy YXRlIHRoZSB0aHJlYWQuDQoJICovDQoJY3B1LS07DQoJa2UtPmtlX3J1bnEgPSBOVUxMOw0K CWtzZXFfbm90aWZ5KGtlLCBjcHUpOw0KDQoJcmV0dXJuICgxKTsNCn0NCg0KI2VuZGlmCS8q IFNNUCAqLw0KDQovKg0KICogUGljayB0aGUgaGlnaGVzdCBwcmlvcml0eSB0YXNrIHdlIGhh dmUgYW5kIHJldHVybiBpdC4NCiAqLw0KDQpzdGF0aWMgc3RydWN0IGtzZSAqDQprc2VxX2No b29zZShzdHJ1Y3Qga3NlcSAqa3NlcSkNCnsNCglzdHJ1Y3Qga3NlICprZTsNCglzdHJ1Y3Qg cnVucSAqc3dhcDsNCg0KCW10eF9hc3NlcnQoJnNjaGVkX2xvY2ssIE1BX09XTkVEKTsNCglz d2FwID0gTlVMTDsNCg0KCWZvciAoOzspIHsNCgkJa2UgPSBydW5xX2Nob29zZShrc2VxLT5r c3FfY3Vycik7DQoJCWlmIChrZSA9PSBOVUxMKSB7DQoJCQkvKg0KCQkJICogV2UgYWxyZWFk eSBzd2FwcGVkIG9uY2UgYW5kIGRpZG4ndCBnZXQgYW55d2hlcmUuDQoJCQkgKi8NCgkJCWlm IChzd2FwKQ0KCQkJCWJyZWFrOw0KCQkJc3dhcCA9IGtzZXEtPmtzcV9jdXJyOw0KCQkJa3Nl cS0+a3NxX2N1cnIgPSBrc2VxLT5rc3FfbmV4dDsNCgkJCWtzZXEtPmtzcV9uZXh0ID0gc3dh cDsNCgkJCWNvbnRpbnVlOw0KCQl9DQoJCS8qDQoJCSAqIElmIHdlIGVuY291bnRlciBhIHNs aWNlIG9mIDAgdGhlIGtzZSBpcyBpbiBhDQoJCSAqIFRJTUVTSEFSRSBrc2UgZ3JvdXAgYW5k IGl0cyBuaWNlIHdhcyB0b28gZmFyIG91dA0KCQkgKiBvZiB0aGUgcmFuZ2UgdGhhdCByZWNl aXZlcyBzbGljZXMuIA0KCQkgKi8NCgkJaWYgKGtlLT5rZV9zbGljZSA9PSAwKSB7DQoJCQly dW5xX3JlbW92ZShrZS0+a2VfcnVucSwga2UpOw0KCQkJc2NoZWRfc2xpY2Uoa2UpOw0KCQkJ a2UtPmtlX3J1bnEgPSBrc2VxLT5rc3FfbmV4dDsNCgkJCXJ1bnFfYWRkKGtlLT5rZV9ydW5x LCBrZSwgMCk7DQoJCQljb250aW51ZTsNCgkJfQ0KCQlyZXR1cm4gKGtlKTsNCgl9DQoNCgly ZXR1cm4gKHJ1bnFfY2hvb3NlKCZrc2VxLT5rc3FfaWRsZSkpOw0KfQ0KDQpzdGF0aWMgdm9p ZA0Ka3NlcV9zZXR1cChzdHJ1Y3Qga3NlcSAqa3NlcSkNCnsNCglydW5xX2luaXQoJmtzZXEt PmtzcV90aW1lc2hhcmVbMF0pOw0KCXJ1bnFfaW5pdCgma3NlcS0+a3NxX3RpbWVzaGFyZVsx XSk7DQoJcnVucV9pbml0KCZrc2VxLT5rc3FfaWRsZSk7DQoJa3NlcS0+a3NxX2N1cnIgPSAm a3NlcS0+a3NxX3RpbWVzaGFyZVswXTsNCglrc2VxLT5rc3FfbmV4dCA9ICZrc2VxLT5rc3Ff dGltZXNoYXJlWzFdOw0KCWtzZXEtPmtzcV9sb2FkID0gMDsNCglrc2VxLT5rc3FfbG9hZF90 aW1lc2hhcmUgPSAwOw0KfQ0KDQpzdGF0aWMgdm9pZA0Kc2NoZWRfc2V0dXAodm9pZCAqZHVt bXkpDQp7DQojaWZkZWYgU01QDQoJaW50IGJhbGFuY2VfZ3JvdXBzOw0KCWludCBpOw0KI2Vu ZGlmDQoNCglzbGljZV9taW4gPSAoaHovMTAwKTsJLyogMTBtcyAqLw0KCXNsaWNlX21heCA9 IChoei83KTsJLyogfjE0MG1zICovDQoNCiNpZmRlZiBTTVANCgliYWxhbmNlX2dyb3VwcyA9 IDA7DQoJLyoNCgkgKiBJbml0aWFsaXplIHRoZSBrc2Vxcy4NCgkgKi8NCglmb3IgKGkgPSAw OyBpIDwgTUFYQ1BVOyBpKyspIHsNCgkJc3RydWN0IGtzZXEgKmtzcTsNCg0KCQlrc3EgPSAm a3NlcV9jcHVbaV07DQoJCWtzcS0+a3NxX2Fzc2lnbmVkID0gTlVMTDsNCgkJa3NlcV9zZXR1 cCgma3NlcV9jcHVbaV0pOw0KCX0NCglpZiAoc21wX3RvcG9sb2d5ID09IE5VTEwpIHsNCgkJ c3RydWN0IGtzZXFfZ3JvdXAgKmtzZzsNCgkJc3RydWN0IGtzZXEgKmtzcTsNCg0KCQlmb3Ig KGkgPSAwOyBpIDwgTUFYQ1BVOyBpKyspIHsNCgkJCWtzcSA9ICZrc2VxX2NwdVtpXTsNCgkJ CWtzZyA9ICZrc2VxX2dyb3Vwc1tpXTsNCgkJCS8qDQoJCQkgKiBTZXR1cCBhIGtzZXEgZ3Jv dXAgd2l0aCBvbmUgbWVtYmVyLg0KCQkJICovDQoJCQlrc3EtPmtzcV90cmFuc2ZlcmFibGUg PSAwOw0KCQkJa3NxLT5rc3FfZ3JvdXAgPSBrc2c7DQoJCQlrc2ctPmtzZ19jcHVzID0gMTsN CgkJCWtzZy0+a3NnX2lkbGVtYXNrID0gMDsNCgkJCWtzZy0+a3NnX2NwdW1hc2sgPSBrc2ct PmtzZ19tYXNrID0gMSA8PCBpOw0KCQkJa3NnLT5rc2dfbG9hZCA9IDA7DQoJCQlrc2ctPmtz Z190cmFuc2ZlcmFibGUgPSAwOw0KCQkJTElTVF9JTklUKCZrc2ctPmtzZ19tZW1iZXJzKTsN CgkJCUxJU1RfSU5TRVJUX0hFQUQoJmtzZy0+a3NnX21lbWJlcnMsIGtzcSwga3NxX3NpYmxp bmdzKTsNCgkJfQ0KCX0gZWxzZSB7DQoJCXN0cnVjdCBrc2VxX2dyb3VwICprc2c7DQoJCXN0 cnVjdCBjcHVfZ3JvdXAgKmNnOw0KCQlpbnQgajsNCg0KCQlmb3IgKGkgPSAwOyBpIDwgc21w X3RvcG9sb2d5LT5jdF9jb3VudDsgaSsrKSB7DQoJCQljZyA9ICZzbXBfdG9wb2xvZ3ktPmN0 X2dyb3VwW2ldOw0KCQkJa3NnID0gJmtzZXFfZ3JvdXBzW2ldOw0KCQkJLyoNCgkJCSAqIElu aXRpYWxpemUgdGhlIGdyb3VwLg0KCQkJICovDQoJCQlrc2ctPmtzZ19pZGxlbWFzayA9IDA7 DQoJCQlrc2ctPmtzZ19sb2FkID0gMDsNCgkJCWtzZy0+a3NnX3RyYW5zZmVyYWJsZSA9IDA7 DQoJCQlrc2ctPmtzZ19jcHVzID0gY2ctPmNnX2NvdW50Ow0KCQkJa3NnLT5rc2dfY3B1bWFz ayA9IGNnLT5jZ19tYXNrOw0KCQkJTElTVF9JTklUKCZrc2ctPmtzZ19tZW1iZXJzKTsNCgkJ CS8qDQoJCQkgKiBGaW5kIGFsbCBvZiB0aGUgZ3JvdXAgbWVtYmVycyBhbmQgYWRkIHRoZW0u DQoJCQkgKi8NCgkJCWZvciAoaiA9IDA7IGogPCBNQVhDUFU7IGorKykgew0KCQkJCWlmICgo Y2ctPmNnX21hc2sgJiAoMSA8PCBqKSkgIT0gMCkgew0KCQkJCQlpZiAoa3NnLT5rc2dfbWFz ayA9PSAwKQ0KCQkJCQkJa3NnLT5rc2dfbWFzayA9IDEgPDwgajsNCgkJCQkJa3NlcV9jcHVb al0ua3NxX3RyYW5zZmVyYWJsZSA9IDA7DQoJCQkJCWtzZXFfY3B1W2pdLmtzcV9ncm91cCA9 IGtzZzsNCgkJCQkJTElTVF9JTlNFUlRfSEVBRCgma3NnLT5rc2dfbWVtYmVycywNCgkJCQkJ ICAgICZrc2VxX2NwdVtqXSwga3NxX3NpYmxpbmdzKTsNCgkJCQl9DQoJCQl9DQoJCQlpZiAo a3NnLT5rc2dfY3B1cyA+IDEpDQoJCQkJYmFsYW5jZV9ncm91cHMgPSAxOw0KCQl9DQoJCWtz Z19tYXhpZCA9IHNtcF90b3BvbG9neS0+Y3RfY291bnQgLSAxOw0KCX0NCgkvKg0KCSAqIFN0 YWdnZXIgdGhlIGdyb3VwIGFuZCBnbG9iYWwgbG9hZCBiYWxhbmNlciBzbyB0aGV5IGRvIG5v dA0KCSAqIGludGVyZmVyZSB3aXRoIGVhY2ggb3RoZXIuDQoJICovDQoJYmFsX3RpY2sgPSB0 aWNrcyArIGh6Ow0KCWlmIChiYWxhbmNlX2dyb3VwcykNCgkJZ2JhbF90aWNrID0gdGlja3Mg KyAoaHogLyAyKTsNCiNlbHNlDQoJa3NlcV9zZXR1cChLU0VRX1NFTEYoKSk7DQojZW5kaWYN CgltdHhfbG9ja19zcGluKCZzY2hlZF9sb2NrKTsNCglrc2VxX2xvYWRfYWRkKEtTRVFfU0VM RigpLCAma3NlMCk7DQoJbXR4X3VubG9ja19zcGluKCZzY2hlZF9sb2NrKTsNCn0NCg0KLyoN CiAqIFNjYWxlIHRoZSBzY2hlZHVsaW5nIHByaW9yaXR5IGFjY29yZGluZyB0byB0aGUgImlu dGVyYWN0aXZpdHkiIG9mIHRoaXMNCiAqIHByb2Nlc3MuDQogKi8NCnN0YXRpYyB2b2lkDQpz Y2hlZF9wcmlvcml0eShzdHJ1Y3Qga3NlZ3JwICprZykNCnsNCglpbnQgcHJpOw0KDQoJaWYg KGtnLT5rZ19wcmlfY2xhc3MgIT0gUFJJX1RJTUVTSEFSRSkNCgkJcmV0dXJuOw0KDQoJcHJp ID0gU0NIRURfUFJJX0lOVEVSQUNUKHNjaGVkX2ludGVyYWN0X3Njb3JlKGtnKSk7DQoJcHJp ICs9IFNDSEVEX1BSSV9CQVNFOw0KCXByaSArPSBrZy0+a2dfcHJvYy0+cF9uaWNlOw0KDQoJ aWYgKHByaSA+IFBSSV9NQVhfVElNRVNIQVJFKQ0KCQlwcmkgPSBQUklfTUFYX1RJTUVTSEFS RTsNCgllbHNlIGlmIChwcmkgPCBQUklfTUlOX1RJTUVTSEFSRSkNCgkJcHJpID0gUFJJX01J Tl9USU1FU0hBUkU7DQoNCglrZy0+a2dfdXNlcl9wcmkgPSBwcmk7DQoNCglyZXR1cm47DQp9 DQoNCi8qDQogKiBDYWxjdWxhdGUgYSB0aW1lIHNsaWNlIGJhc2VkIG9uIHRoZSBwcm9wZXJ0 aWVzIG9mIHRoZSBrc2VnIGFuZCB0aGUgcnVucQ0KICogdGhhdCB3ZSdyZSBvbi4gIFRoaXMg aXMgb25seSBmb3IgUFJJX1RJTUVTSEFSRSBrc2VncnBzLg0KICovDQpzdGF0aWMgdm9pZA0K c2NoZWRfc2xpY2Uoc3RydWN0IGtzZSAqa2UpDQp7DQoJc3RydWN0IGtzZXEgKmtzZXE7DQoJ c3RydWN0IGtzZWdycCAqa2c7DQoNCglrZyA9IGtlLT5rZV9rc2VncnA7DQoJa3NlcSA9IEtT RVFfQ1BVKGtlLT5rZV9jcHUpOw0KDQoJLyoNCgkgKiBSYXRpb25hbGU6DQoJICogS1NFcyBp biBpbnRlcmFjdGl2ZSBrc2VncyBnZXQgYSBtaW5pbWFsIHNsaWNlIHNvIHRoYXQgd2UNCgkg KiBxdWlja2x5IG5vdGljZSBpZiBpdCBhYnVzZXMgaXRzIGFkdmFudGFnZS4NCgkgKg0KCSAq IEtTRXMgaW4gbm9uLWludGVyYWN0aXZlIGtzZWdzIGFyZSBhc3NpZ25lZCBhIHNsaWNlIHRo YXQgaXMNCgkgKiBiYXNlZCBvbiB0aGUga3NlZ3MgbmljZSB2YWx1ZSByZWxhdGl2ZSB0byB0 aGUgbGVhc3QgbmljZSBrc2VnDQoJICogb24gdGhlIHJ1biBxdWV1ZSBmb3IgdGhpcyBjcHUu DQoJICoNCgkgKiBJZiB0aGUgS1NFIGlzIGxlc3MgbmljZSB0aGFuIGFsbCBvdGhlcnMgaXQg Z2V0cyB0aGUgbWF4aW11bQ0KCSAqIHNsaWNlIGFuZCBvdGhlciBLU0VzIHdpbGwgYWRqdXN0 IHRoZWlyIHNsaWNlIHJlbGF0aXZlIHRvDQoJICogdGhpcyB3aGVuIHRoZXkgZmlyc3QgZXhw aXJlLg0KCSAqDQoJICogVGhlcmUgaXMgMjAgcG9pbnQgd2luZG93IHRoYXQgc3RhcnRzIHJl bGF0aXZlIHRvIHRoZSBsZWFzdA0KCSAqIG5pY2Uga3NlIG9uIHRoZSBydW4gcXVldWUuICBT bGljZSBzaXplIGlzIGRldGVybWluZWQgYnkNCgkgKiB0aGUga3NlIGRpc3RhbmNlIGZyb20g dGhlIGxhc3QgbmljZSBrc2VncnAuDQoJICoNCgkgKiBJZiB0aGUga3NlIGlzIG91dHNpZGUg b2YgdGhlIHdpbmRvdyBpdCB3aWxsIGdldCBubyBzbGljZQ0KCSAqIGFuZCB3aWxsIGJlIHJl ZXZhbHVhdGVkIGVhY2ggdGltZSBpdCBpcyBzZWxlY3RlZCBvbiB0aGUNCgkgKiBydW4gcXVl dWUuICBUaGUgZXhjZXB0aW9uIHRvIHRoaXMgaXMgbmljZSAwIGtzZWdzIHdoZW4NCgkgKiBh IG5pY2UgLTIwIGlzIHJ1bm5pbmcuICBUaGV5IGFyZSBhbHdheXMgZ3JhbnRlZCBhIG1pbmlt dW0NCgkgKiBzbGljZS4NCgkgKi8NCglpZiAoIVNDSEVEX0lOVEVSQUNUSVZFKGtnKSkgew0K CQlpbnQgbmljZTsNCg0KCQluaWNlID0ga2ctPmtnX3Byb2MtPnBfbmljZSArICgwIC0ga3Nl cS0+a3NxX25pY2VtaW4pOw0KCQlpZiAoa3NlcS0+a3NxX2xvYWRfdGltZXNoYXJlID09IDAg fHwNCgkJICAgIGtnLT5rZ19wcm9jLT5wX25pY2UgPCBrc2VxLT5rc3FfbmljZW1pbikNCgkJ CWtlLT5rZV9zbGljZSA9IFNDSEVEX1NMSUNFX01BWDsNCgkJZWxzZSBpZiAobmljZSA8PSBT Q0hFRF9TTElDRV9OVEhSRVNIKQ0KCQkJa2UtPmtlX3NsaWNlID0gU0NIRURfU0xJQ0VfTklD RShuaWNlKTsNCgkJZWxzZSBpZiAoa2ctPmtnX3Byb2MtPnBfbmljZSA9PSAwKQ0KCQkJa2Ut PmtlX3NsaWNlID0gU0NIRURfU0xJQ0VfTUlOOw0KCQllbHNlDQoJCQlrZS0+a2Vfc2xpY2Ug PSAwOw0KCX0gZWxzZQ0KCQlrZS0+a2Vfc2xpY2UgPSBTQ0hFRF9TTElDRV9JTlRFUkFDVElW RTsNCg0KCUNUUjYoS1RSX1VMRSwNCgkgICAgIlNsaWNlZCAlcCglZCkgKG5pY2U6ICVkLCBu aWNlbWluOiAlZCwgbG9hZDogJWQsIGludGVyYWN0aXZlOiAlZCkiLA0KCSAgICBrZSwga2Ut PmtlX3NsaWNlLCBrZy0+a2dfcHJvYy0+cF9uaWNlLCBrc2VxLT5rc3FfbmljZW1pbiwNCgkg ICAga3NlcS0+a3NxX2xvYWRfdGltZXNoYXJlLCBTQ0hFRF9JTlRFUkFDVElWRShrZykpOw0K DQoJcmV0dXJuOw0KfQ0KDQovKg0KICogVGhpcyByb3V0aW5lIGVuZm9yY2VzIGEgbWF4aW11 bSBsaW1pdCBvbiB0aGUgYW1vdW50IG9mIHNjaGVkdWxpbmcgaGlzdG9yeQ0KICoga2VwdC4g IEl0IGlzIGNhbGxlZCBhZnRlciBlaXRoZXIgdGhlIHNscHRpbWUgb3IgcnVudGltZSBpcyBh ZGp1c3RlZC4NCiAqIFRoaXMgcm91dGluZSB3aWxsIG5vdCBvcGVyYXRlIGNvcnJlY3RseSB3 aGVuIHNscCBvciBydW4gdGltZXMgaGF2ZSBiZWVuDQogKiBhZGp1c3RlZCB0byBtb3JlIHRo YW4gZG91YmxlIHRoZWlyIG1heGltdW0uDQogKi8NCnN0YXRpYyB2b2lkDQpzY2hlZF9pbnRl cmFjdF91cGRhdGUoc3RydWN0IGtzZWdycCAqa2cpDQp7DQoJaW50IHN1bTsNCg0KCXN1bSA9 IGtnLT5rZ19ydW50aW1lICsga2ctPmtnX3NscHRpbWU7DQoJaWYgKHN1bSA8IFNDSEVEX1NM UF9SVU5fTUFYKQ0KCQlyZXR1cm47DQoJLyoNCgkgKiBJZiB3ZSBoYXZlIGV4Y2VlZGVkIGJ5 IG1vcmUgdGhhbiAxLzV0aCB0aGVuIHRoZSBhbGdvcml0aG0gYmVsb3cNCgkgKiB3aWxsIG5v dCBicmluZyB1cyBiYWNrIGludG8gcmFuZ2UuICBEaXZpZGluZyBieSB0d28gaGVyZSBmb3Jj ZXMNCgkgKiB1cyBpbnRvIHRoZSByYW5nZSBvZiBbNC81ICogU0NIRURfSU5URVJBQ1RfTUFY LCBTQ0hFRF9JTlRFUkFDVF9NQVhdDQoJICovDQoJaWYgKHN1bSA+IChTQ0hFRF9TTFBfUlVO X01BWCAvIDUpICogNikgew0KCQlrZy0+a2dfcnVudGltZSAvPSAyOw0KCQlrZy0+a2dfc2xw dGltZSAvPSAyOw0KCQlyZXR1cm47DQoJfQ0KCWtnLT5rZ19ydW50aW1lID0gKGtnLT5rZ19y dW50aW1lIC8gNSkgKiA0Ow0KCWtnLT5rZ19zbHB0aW1lID0gKGtnLT5rZ19zbHB0aW1lIC8g NSkgKiA0Ow0KfQ0KDQpzdGF0aWMgdm9pZA0Kc2NoZWRfaW50ZXJhY3RfZm9yayhzdHJ1Y3Qg a3NlZ3JwICprZykNCnsNCglpbnQgcmF0aW87DQoJaW50IHN1bTsNCg0KCXN1bSA9IGtnLT5r Z19ydW50aW1lICsga2ctPmtnX3NscHRpbWU7DQoJaWYgKHN1bSA+IFNDSEVEX1NMUF9SVU5f Rk9SSykgew0KCQlyYXRpbyA9IHN1bSAvIFNDSEVEX1NMUF9SVU5fRk9SSzsNCgkJa2ctPmtn X3J1bnRpbWUgLz0gcmF0aW87DQoJCWtnLT5rZ19zbHB0aW1lIC89IHJhdGlvOw0KCX0NCn0N Cg0Kc3RhdGljIGludA0Kc2NoZWRfaW50ZXJhY3Rfc2NvcmUoc3RydWN0IGtzZWdycCAqa2cp DQp7DQoJaW50IGRpdjsNCg0KCWlmIChrZy0+a2dfcnVudGltZSA+IGtnLT5rZ19zbHB0aW1l KSB7DQoJCWRpdiA9IG1heCgxLCBrZy0+a2dfcnVudGltZSAvIFNDSEVEX0lOVEVSQUNUX0hB TEYpOw0KCQlyZXR1cm4gKFNDSEVEX0lOVEVSQUNUX0hBTEYgKw0KCQkgICAgKFNDSEVEX0lO VEVSQUNUX0hBTEYgLSAoa2ctPmtnX3NscHRpbWUgLyBkaXYpKSk7DQoJfSBpZiAoa2ctPmtn X3NscHRpbWUgPiBrZy0+a2dfcnVudGltZSkgew0KCQlkaXYgPSBtYXgoMSwga2ctPmtnX3Ns cHRpbWUgLyBTQ0hFRF9JTlRFUkFDVF9IQUxGKTsNCgkJcmV0dXJuIChrZy0+a2dfcnVudGlt ZSAvIGRpdik7DQoJfQ0KDQoJLyoNCgkgKiBUaGlzIGNhbiBoYXBwZW4gaWYgc2xwdGltZSBh bmQgcnVudGltZSBhcmUgMC4NCgkgKi8NCglyZXR1cm4gKDApOw0KDQp9DQoNCi8qDQogKiBW ZXJ5IGVhcmx5IGluIHRoZSBib290IHNvbWUgc2V0dXAgb2Ygc2NoZWR1bGVyLXNwZWNpZmlj DQogKiBwYXJ0cyBvZiBwcm9jMCBhbmQgb2Ygc29lbSBzY2hlZHVsZXIgcmVzb3VyY2VzIG5l ZWRzIHRvIGJlIGRvbmUuDQogKiBDYWxsZWQgZnJvbToNCiAqICBwcm9jMF9pbml0KCkNCiAq Lw0Kdm9pZA0Kc2NoZWRpbml0KHZvaWQpDQp7DQoJLyoNCgkgKiBTZXQgdXAgdGhlIHNjaGVk dWxlciBzcGVjaWZpYyBwYXJ0cyBvZiBwcm9jMC4NCgkgKi8NCglwcm9jMC5wX3NjaGVkID0g TlVMTDsgLyogWFhYICovDQoJa3NlZ3JwMC5rZ19zY2hlZCA9ICZrZ19zY2hlZDA7DQoJdGhy ZWFkMC50ZF9zY2hlZCA9ICZrc2UwOw0KCWtzZTAua2VfdGhyZWFkID0gJnRocmVhZDA7DQoJ a3NlMC5rZV9vbmNwdSA9IE5PQ1BVOyAvKiB3cm9uZy4uIGNhbiB3ZSB1c2UgUENQVShjcHVp ZCkgeWV0PyAqLw0KCWtzZTAua2Vfc3RhdGUgPSBLRVNfVEhSRUFEOw0KCWtnX3NjaGVkMC5z a2dfY29uY3VycmVuY3kgPSAxOw0KCWtnX3NjaGVkMC5za2dfYXZhaWxfb3Blbm5pbmdzID0g MDsgLyogd2UgYXJlIGFscmVhZHkgcnVubmluZyAqLw0KfQ0KDQovKg0KICogVGhpcyBpcyBv bmx5IHNvbWV3aGF0IGFjY3VyYXRlIHNpbmNlIGdpdmVuIG1hbnkgcHJvY2Vzc2VzIG9mIHRo ZSBzYW1lDQogKiBwcmlvcml0eSB0aGV5IHdpbGwgc3dpdGNoIHdoZW4gdGhlaXIgc2xpY2Vz IHJ1biBvdXQsIHdoaWNoIHdpbGwgYmUNCiAqIGF0IG1vc3QgU0NIRURfU0xJQ0VfTUFYLg0K ICovDQppbnQNCnNjaGVkX3JyX2ludGVydmFsKHZvaWQpDQp7DQoJcmV0dXJuIChTQ0hFRF9T TElDRV9NQVgpOw0KfQ0KDQpzdGF0aWMgdm9pZA0Kc2NoZWRfcGN0Y3B1X3VwZGF0ZShzdHJ1 Y3Qga3NlICprZSkNCnsNCgkvKg0KCSAqIEFkanVzdCBjb3VudGVycyBhbmQgd2F0ZXJtYXJr IGZvciBwY3RjcHUgY2FsYy4NCgkgKi8NCglpZiAoa2UtPmtlX2x0aWNrID4gdGlja3MgLSBT Q0hFRF9DUFVfVElDS1MpIHsNCgkJLyoNCgkJICogU2hpZnQgdGhlIHRpY2sgY291bnQgb3V0 IHNvIHRoYXQgdGhlIGRpdmlkZSBkb2Vzbid0DQoJCSAqIHJvdW5kIGF3YXkgb3VyIHJlc3Vs dHMuDQoJCSAqLw0KCQlrZS0+a2VfdGlja3MgPDw9IDEwOw0KCQlrZS0+a2VfdGlja3MgPSAo a2UtPmtlX3RpY2tzIC8gKHRpY2tzIC0ga2UtPmtlX2Z0aWNrKSkgKg0KCQkJICAgIFNDSEVE X0NQVV9USUNLUzsNCgkJa2UtPmtlX3RpY2tzID4+PSAxMDsNCgl9IGVsc2UNCgkJa2UtPmtl X3RpY2tzID0gMDsNCglrZS0+a2VfbHRpY2sgPSB0aWNrczsNCglrZS0+a2VfZnRpY2sgPSBr ZS0+a2VfbHRpY2sgLSBTQ0hFRF9DUFVfVElDS1M7DQp9DQoNCnZvaWQNCnNjaGVkX3ByaW8o c3RydWN0IHRocmVhZCAqdGQsIHVfY2hhciBwcmlvKQ0Kew0KCXN0cnVjdCBrc2UgKmtlOw0K DQoJa2UgPSB0ZC0+dGRfa3NlOw0KCW10eF9hc3NlcnQoJnNjaGVkX2xvY2ssIE1BX09XTkVE KTsNCglpZiAoVERfT05fUlVOUSh0ZCkpIHsNCgkJLyoNCgkJICogSWYgdGhlIHByaW9yaXR5 IGhhcyBiZWVuIGVsZXZhdGVkIGR1ZSB0byBwcmlvcml0eQ0KCQkgKiBwcm9wYWdhdGlvbiwg d2UgbWF5IGhhdmUgdG8gbW92ZSBvdXJzZWx2ZXMgdG8gYSBuZXcNCgkJICogcXVldWUuICBX ZSBzdGlsbCBjYWxsIGFkanVzdHJ1bnF1ZXVlIGJlbG93IGluIGNhc2Uga3NlDQoJCSAqIG5l ZWRzIHRvIGZpeCB0aGluZ3MgdXAuDQoJCSAqLw0KCQlpZiAocHJpbyA8IHRkLT50ZF9wcmlv cml0eSAmJiBrZSAmJg0KCQkgICAgKGtlLT5rZV9mbGFncyAmIEtFRl9BU1NJR05FRCkgPT0g MCAmJg0KCQkgICAga2UtPmtlX3J1bnEgIT0gS1NFUV9DUFUoa2UtPmtlX2NwdSktPmtzcV9j dXJyKSB7DQoJCQlydW5xX3JlbW92ZShrZS0+a2VfcnVucSwga2UpOw0KCQkJa2UtPmtlX3J1 bnEgPSBLU0VRX0NQVShrZS0+a2VfY3B1KS0+a3NxX2N1cnI7DQoJCQlydW5xX2FkZChrZS0+ a2VfcnVucSwga2UsIDApOw0KCQl9DQoJCS8qDQoJCSAqIEhvbGQgdGhpcyBrc2Ugb24gdGhp cyBjcHUgc28gdGhhdCBzY2hlZF9wcmlvKCkgZG9lc24ndA0KCQkgKiBjYXVzZSBleGNlc3Np dmUgbWlncmF0aW9uLiAgV2Ugb25seSB3YW50IG1pZ3JhdGlvbiB0bw0KCQkgKiBoYXBwZW4g YXMgdGhlIHJlc3VsdCBvZiBhIHdha2V1cC4NCgkJICovDQoJCWtlLT5rZV9mbGFncyB8PSBL RUZfSE9MRDsNCgkJYWRqdXN0cnVucXVldWUodGQsIHByaW8pOw0KCX0gZWxzZQ0KCQl0ZC0+ dGRfcHJpb3JpdHkgPSBwcmlvOw0KfQ0KDQp2b2lkDQpzY2hlZF9zd2l0Y2goc3RydWN0IHRo cmVhZCAqdGQsIHN0cnVjdCB0aHJlYWQgKm5ld3RkLCBpbnQgZmxhZ3MpDQp7DQoJc3RydWN0 IGtzZSAqa2U7DQoNCgltdHhfYXNzZXJ0KCZzY2hlZF9sb2NrLCBNQV9PV05FRCk7DQoNCglr ZSA9IHRkLT50ZF9rc2U7DQoNCgl0ZC0+dGRfbGFzdGNwdSA9IHRkLT50ZF9vbmNwdTsNCgl0 ZC0+dGRfb25jcHUgPSBOT0NQVTsNCgl0ZC0+dGRfZmxhZ3MgJj0gflRERl9ORUVEUkVTQ0hF RDsNCgl0ZC0+dGRfcGZsYWdzICY9IH5URFBfT1dFUFJFRU1QVDsNCg0KCS8qDQoJICogSWYg dGhlIEtTRSBoYXMgYmVlbiBhc3NpZ25lZCBpdCBtYXkgYmUgaW4gdGhlIHByb2Nlc3Mgb2Yg c3dpdGNoaW5nDQoJICogdG8gdGhlIG5ldyBjcHUuICBUaGlzIGlzIHRoZSBjYXNlIGluIHNj aGVkX2JpbmQoKS4NCgkgKi8NCglpZiAoKGtlLT5rZV9mbGFncyAmIEtFRl9BU1NJR05FRCkg PT0gMCkgew0KCQlpZiAodGQgPT0gUENQVV9HRVQoaWRsZXRocmVhZCkpIHsNCgkJCVREX1NF VF9DQU5fUlVOKHRkKTsNCgkJfSBlbHNlIHsNCgkJCS8qIFdlIGFyZSBlbmRpbmcgb3VyIHJ1 biBzbyBtYWtlIG91ciBzbG90IGF2YWlsYWJsZSBhZ2FpbiAqLw0KCQkJU0xPVF9SRUxFQVNF KHRkLT50ZF9rc2VncnApOw0KCQkJaWYgKFREX0lTX1JVTk5JTkcodGQpKSB7DQoJCQkJa3Nl cV9sb2FkX3JlbShLU0VRX0NQVShrZS0+a2VfY3B1KSwga2UpOw0KCQkJCS8qDQoJCQkJICog RG9uJ3QgYWxsb3cgdGhlIHRocmVhZCB0byBtaWdyYXRlDQoJCQkJICogZnJvbSBhIHByZWVt cHRpb24uDQoJCQkJICovDQoJCQkJa2UtPmtlX2ZsYWdzIHw9IEtFRl9IT0xEOw0KCQkJCXNl dHJ1bnF1ZXVlKHRkLCBTUlFfT1VSU0VMRnxTUlFfWUlFTERJTkcpOw0KCQkJfSBlbHNlIHsN CgkJCQlpZiAoa2UtPmtlX3J1bnEpIHsNCgkJCQkJa3NlcV9sb2FkX3JlbShLU0VRX0NQVShr ZS0+a2VfY3B1KSwga2UpOw0KCQkJCX0gZWxzZSBpZiAoKHRkLT50ZF9mbGFncyAmIFRERl9J RExFVEQpID09IDApDQoJCQkJCWtkYl9iYWNrdHJhY2UoKTsNCgkJCQkvKg0KCQkJCSAqIFdl IHdpbGwgbm90IGJlIG9uIHRoZSBydW4gcXVldWUuDQoJCQkJICogU28gd2UgbXVzdCBiZSBz bGVlcGluZyBvciBzaW1pbGFyLg0KCQkJCSAqIERvbid0IHVzZSB0aGUgc2xvdCBpZiB3ZSB3 aWxsIG5lZWQgaXQgDQoJCQkJICogZm9yIG5ld3RkLg0KCQkJCSAqLw0KCQkJCWlmICgodGQt PnRkX3Byb2MtPnBfZmxhZyAmIFBfSEFEVEhSRUFEUykgJiYNCgkJCQkgICAgKG5ld3RkID09 IE5VTEwgfHwNCgkJCQkgICAgbmV3dGQtPnRkX2tzZWdycCAhPSB0ZC0+dGRfa3NlZ3JwKSkN CgkJCQkJc2xvdF9maWxsKHRkLT50ZF9rc2VncnApOw0KCQkJfQ0KCQl9DQoJfQ0KCWlmIChu ZXd0ZCAhPSBOVUxMKSB7DQoJCS8qDQoJCSAqIElmIHdlIGJyaW5nIGluIGEgdGhyZWFkLCAN CgkJICogdGhlbiBhY2NvdW50IGZvciBpdCBhcyBpZiBpdCBoYWQgYmVlbiBhZGRlZCB0byB0 aGUNCgkJICogcnVuIHF1ZXVlIGFuZCB0aGVuIGNob3Nlbi4NCgkJICovDQoJCW5ld3RkLT50 ZF9rc2UtPmtlX2ZsYWdzIHw9IEtFRl9ESURSVU47DQoJCVNMT1RfVVNFKG5ld3RkLT50ZF9r c2VncnApOw0KCQlURF9TRVRfUlVOTklORyhuZXd0ZCk7DQoJCWtzZXFfbG9hZF9hZGQoS1NF UV9TRUxGKCksIG5ld3RkLT50ZF9rc2UpOw0KCX0gZWxzZQ0KCQluZXd0ZCA9IGNob29zZXRo cmVhZCgpOw0KCWlmICh0ZCAhPSBuZXd0ZCkNCgkJY3B1X3N3aXRjaCh0ZCwgbmV3dGQpOw0K CXNjaGVkX2xvY2subXR4X2xvY2sgPSAodWludHB0cl90KXRkOw0KDQoJdGQtPnRkX29uY3B1 ID0gUENQVV9HRVQoY3B1aWQpOw0KfQ0KDQp2b2lkDQpzY2hlZF9uaWNlKHN0cnVjdCBwcm9j ICpwLCBpbnQgbmljZSkNCnsNCglzdHJ1Y3Qga3NlZ3JwICprZzsNCglzdHJ1Y3Qga3NlICpr ZTsNCglzdHJ1Y3QgdGhyZWFkICp0ZDsNCglzdHJ1Y3Qga3NlcSAqa3NlcTsNCg0KCVBST0Nf TE9DS19BU1NFUlQocCwgTUFfT1dORUQpOw0KCW10eF9hc3NlcnQoJnNjaGVkX2xvY2ssIE1B X09XTkVEKTsNCgkvKg0KCSAqIFdlIG5lZWQgdG8gYWRqdXN0IHRoZSBuaWNlIGNvdW50cyBm b3IgcnVubmluZyBLU0VzLg0KCSAqLw0KCUZPUkVBQ0hfS1NFR1JQX0lOX1BST0MocCwga2cp IHsNCgkJaWYgKGtnLT5rZ19wcmlfY2xhc3MgPT0gUFJJX1RJTUVTSEFSRSkgew0KCQkJRk9S RUFDSF9USFJFQURfSU5fR1JPVVAoa2csIHRkKSB7DQoJCQkJa2UgPSB0ZC0+dGRfa3NlOw0K CQkJCWlmIChrZS0+a2VfcnVucSA9PSBOVUxMKQ0KCQkJCQljb250aW51ZTsNCgkJCQlrc2Vx ID0gS1NFUV9DUFUoa2UtPmtlX2NwdSk7DQoJCQkJa3NlcV9uaWNlX3JlbShrc2VxLCBwLT5w X25pY2UpOw0KCQkJCWtzZXFfbmljZV9hZGQoa3NlcSwgbmljZSk7DQoJCQl9DQoJCX0NCgl9 DQoJcC0+cF9uaWNlID0gbmljZTsNCglGT1JFQUNIX0tTRUdSUF9JTl9QUk9DKHAsIGtnKSB7 DQoJCXNjaGVkX3ByaW9yaXR5KGtnKTsNCgkJRk9SRUFDSF9USFJFQURfSU5fR1JPVVAoa2cs IHRkKQ0KCQkJdGQtPnRkX2ZsYWdzIHw9IFRERl9ORUVEUkVTQ0hFRDsNCgl9DQp9DQoNCnZv aWQNCnNjaGVkX3NsZWVwKHN0cnVjdCB0aHJlYWQgKnRkKQ0Kew0KCW10eF9hc3NlcnQoJnNj aGVkX2xvY2ssIE1BX09XTkVEKTsNCg0KCXRkLT50ZF9zbHB0aW1lID0gdGlja3M7DQoJdGQt PnRkX2Jhc2VfcHJpID0gdGQtPnRkX3ByaW9yaXR5Ow0KDQoJQ1RSMihLVFJfVUxFLCAic2xl ZXAgdGhyZWFkICVwICh0aWNrOiAlZCkiLA0KCSAgICB0ZCwgdGQtPnRkX3NscHRpbWUpOw0K fQ0KDQp2b2lkDQpzY2hlZF93YWtldXAoc3RydWN0IHRocmVhZCAqdGQpDQp7DQoJbXR4X2Fz c2VydCgmc2NoZWRfbG9jaywgTUFfT1dORUQpOw0KDQoJLyoNCgkgKiBMZXQgdGhlIGtzZWcg a25vdyBob3cgbG9uZyB3ZSBzbGVwdCBmb3IuICBUaGlzIGlzIGJlY2F1c2UgcHJvY2Vzcw0K CSAqIGludGVyYWN0aXZpdHkgYmVoYXZpb3IgaXMgbW9kZWxlZCBpbiB0aGUga3NlZy4NCgkg Ki8NCglpZiAodGQtPnRkX3NscHRpbWUpIHsNCgkJc3RydWN0IGtzZWdycCAqa2c7DQoJCWlu dCBoenRpY2tzOw0KDQoJCWtnID0gdGQtPnRkX2tzZWdycDsNCgkJaHp0aWNrcyA9ICh0aWNr cyAtIHRkLT50ZF9zbHB0aW1lKSA8PCAxMDsNCgkJaWYgKGh6dGlja3MgPj0gU0NIRURfU0xQ X1JVTl9NQVgpIHsNCgkJCWtnLT5rZ19zbHB0aW1lID0gU0NIRURfU0xQX1JVTl9NQVg7DQoJ CQlrZy0+a2dfcnVudGltZSA9IDE7DQoJCX0gZWxzZSB7DQoJCQlrZy0+a2dfc2xwdGltZSAr PSBoenRpY2tzOw0KCQkJc2NoZWRfaW50ZXJhY3RfdXBkYXRlKGtnKTsNCgkJfQ0KCQlzY2hl ZF9wcmlvcml0eShrZyk7DQoJCXNjaGVkX3NsaWNlKHRkLT50ZF9rc2UpOw0KCQlDVFIyKEtU Ul9VTEUsICJ3YWtldXAgdGhyZWFkICVwICglZCB0aWNrcykiLCB0ZCwgaHp0aWNrcyk7DQoJ CXRkLT50ZF9zbHB0aW1lID0gMDsNCgl9DQoJc2V0cnVucXVldWUodGQsIFNSUV9CT1JJTkcp Ow0KfQ0KDQovKg0KICogUGVuYWxpemUgdGhlIHBhcmVudCBmb3IgY3JlYXRpbmcgYSBuZXcg Y2hpbGQgYW5kIGluaXRpYWxpemUgdGhlIGNoaWxkJ3MNCiAqIHByaW9yaXR5Lg0KICovDQp2 b2lkDQpzY2hlZF9mb3JrKHN0cnVjdCB0aHJlYWQgKnRkLCBzdHJ1Y3QgdGhyZWFkICpjaGls ZHRkKQ0Kew0KDQoJbXR4X2Fzc2VydCgmc2NoZWRfbG9jaywgTUFfT1dORUQpOw0KDQoJc2No ZWRfZm9ya19rc2VncnAodGQsIGNoaWxkdGQtPnRkX2tzZWdycCk7DQoJc2NoZWRfZm9ya190 aHJlYWQodGQsIGNoaWxkdGQpOw0KfQ0KDQp2b2lkDQpzY2hlZF9mb3JrX2tzZWdycChzdHJ1 Y3QgdGhyZWFkICp0ZCwgc3RydWN0IGtzZWdycCAqY2hpbGQpDQp7DQoJc3RydWN0IGtzZWdy cCAqa2cgPSB0ZC0+dGRfa3NlZ3JwOw0KCW10eF9hc3NlcnQoJnNjaGVkX2xvY2ssIE1BX09X TkVEKTsNCg0KCWNoaWxkLT5rZ19zbHB0aW1lID0ga2ctPmtnX3NscHRpbWU7DQoJY2hpbGQt PmtnX3J1bnRpbWUgPSBrZy0+a2dfcnVudGltZTsNCgljaGlsZC0+a2dfdXNlcl9wcmkgPSBr Zy0+a2dfdXNlcl9wcmk7DQoJc2NoZWRfaW50ZXJhY3RfZm9yayhjaGlsZCk7DQoJa2ctPmtn X3J1bnRpbWUgKz0gdGlja2luY3IgPDwgMTA7DQoJc2NoZWRfaW50ZXJhY3RfdXBkYXRlKGtn KTsNCg0KCUNUUjYoS1RSX1VMRSwgInNjaGVkX2Zvcmtfa3NlZ3JwOiAlZCglZCwgJWQpIC0g JWQoJWQsICVkKSIsDQoJICAgIGtnLT5rZ19wcm9jLT5wX3BpZCwga2ctPmtnX3NscHRpbWUs IGtnLT5rZ19ydW50aW1lLCANCgkgICAgY2hpbGQtPmtnX3Byb2MtPnBfcGlkLCBjaGlsZC0+ a2dfc2xwdGltZSwgY2hpbGQtPmtnX3J1bnRpbWUpOw0KfQ0KDQp2b2lkDQpzY2hlZF9mb3Jr X3RocmVhZChzdHJ1Y3QgdGhyZWFkICp0ZCwgc3RydWN0IHRocmVhZCAqY2hpbGQpDQp7DQoJ c3RydWN0IGtzZSAqa2U7DQoJc3RydWN0IGtzZSAqa2UyOw0KDQoJc2NoZWRfbmV3dGhyZWFk KGNoaWxkKTsNCglrZSA9IHRkLT50ZF9rc2U7DQoJa2UyID0gY2hpbGQtPnRkX2tzZTsNCglr ZTItPmtlX3NsaWNlID0gMTsJLyogQXR0ZW1wdCB0byBxdWlja2x5IGxlYXJuIGludGVyYWN0 aXZpdHkuICovDQoJa2UyLT5rZV9jcHUgPSBrZS0+a2VfY3B1Ow0KCWtlMi0+a2VfcnVucSA9 IE5VTEw7DQoNCgkvKiBHcmFiIG91ciBwYXJlbnRzIGNwdSBlc3RpbWF0aW9uIGluZm9ybWF0 aW9uLiAqLw0KCWtlMi0+a2VfdGlja3MgPSBrZS0+a2VfdGlja3M7DQoJa2UyLT5rZV9sdGlj ayA9IGtlLT5rZV9sdGljazsNCglrZTItPmtlX2Z0aWNrID0ga2UtPmtlX2Z0aWNrOw0KfQ0K DQp2b2lkDQpzY2hlZF9jbGFzcyhzdHJ1Y3Qga3NlZ3JwICprZywgaW50IGNsYXNzKQ0Kew0K CXN0cnVjdCBrc2VxICprc2VxOw0KCXN0cnVjdCBrc2UgKmtlOw0KCXN0cnVjdCB0aHJlYWQg KnRkOw0KCWludCBuY2xhc3M7DQoJaW50IG9jbGFzczsNCg0KCW10eF9hc3NlcnQoJnNjaGVk X2xvY2ssIE1BX09XTkVEKTsNCglpZiAoa2ctPmtnX3ByaV9jbGFzcyA9PSBjbGFzcykNCgkJ cmV0dXJuOw0KDQoJbmNsYXNzID0gUFJJX0JBU0UoY2xhc3MpOw0KCW9jbGFzcyA9IFBSSV9C QVNFKGtnLT5rZ19wcmlfY2xhc3MpOw0KCUZPUkVBQ0hfVEhSRUFEX0lOX0dST1VQKGtnLCB0 ZCkgew0KCQlrZSA9IHRkLT50ZF9rc2U7DQoJCWlmIChrZS0+a2Vfc3RhdGUgIT0gS0VTX09O UlVOUSAmJg0KCQkgICAga2UtPmtlX3N0YXRlICE9IEtFU19USFJFQUQpDQoJCQljb250aW51 ZTsNCgkJa3NlcSA9IEtTRVFfQ1BVKGtlLT5rZV9jcHUpOw0KDQojaWZkZWYgU01QDQoJCS8q DQoJCSAqIE9uIFNNUCBpZiB3ZSdyZSBvbiB0aGUgUlVOUSB3ZSBtdXN0IGFkanVzdCB0aGUg dHJhbnNmZXJhYmxlDQoJCSAqIGNvdW50IGJlY2F1c2UgY291bGQgYmUgY2hhbmdpbmcgdG8g b3IgZnJvbSBhbiBpbnRlcnJ1cHQNCgkJICogY2xhc3MuDQoJCSAqLw0KCQlpZiAoa2UtPmtl X3N0YXRlID09IEtFU19PTlJVTlEpIHsNCgkJCWlmIChLU0VfQ0FOX01JR1JBVEUoa2UsIG9j bGFzcykpIHsNCgkJCQlrc2VxLT5rc3FfdHJhbnNmZXJhYmxlLS07DQoJCQkJa3NlcS0+a3Nx X2dyb3VwLT5rc2dfdHJhbnNmZXJhYmxlLS07DQoJCQl9DQoJCQlpZiAoS1NFX0NBTl9NSUdS QVRFKGtlLCBuY2xhc3MpKSB7DQoJCQkJa3NlcS0+a3NxX3RyYW5zZmVyYWJsZSsrOw0KCQkJ CWtzZXEtPmtzcV9ncm91cC0+a3NnX3RyYW5zZmVyYWJsZSsrOw0KCQkJfQ0KCQl9DQojZW5k aWYNCgkJaWYgKG9jbGFzcyA9PSBQUklfVElNRVNIQVJFKSB7DQoJCQlrc2VxLT5rc3FfbG9h ZF90aW1lc2hhcmUtLTsNCgkJCWtzZXFfbmljZV9yZW0oa3NlcSwga2ctPmtnX3Byb2MtPnBf bmljZSk7DQoJCX0NCgkJaWYgKG5jbGFzcyA9PSBQUklfVElNRVNIQVJFKSB7DQoJCQlrc2Vx LT5rc3FfbG9hZF90aW1lc2hhcmUrKzsNCgkJCWtzZXFfbmljZV9hZGQoa3NlcSwga2ctPmtn X3Byb2MtPnBfbmljZSk7DQoJCX0NCgl9DQoNCglrZy0+a2dfcHJpX2NsYXNzID0gY2xhc3M7 DQp9DQoNCi8qDQogKiBSZXR1cm4gc29tZSBvZiB0aGUgY2hpbGQncyBwcmlvcml0eSBhbmQg aW50ZXJhY3Rpdml0eSB0byB0aGUgcGFyZW50Lg0KICogQXZvaWQgdXNpbmcgc2NoZWRfZXhp dF90aHJlYWQgdG8gYXZvaWQgaGF2aW5nIHRvIGRlY2lkZSB3aGljaA0KICogdGhyZWFkIGlu IHRoZSBwYXJlbnQgZ2V0cyB0aGUgaG9ub3VyIHNpbmNlIGl0IGlzbid0IHVzZWQuDQogKi8N CnZvaWQNCnNjaGVkX2V4aXQoc3RydWN0IHByb2MgKnAsIHN0cnVjdCB0aHJlYWQgKmNoaWxk dGQpDQp7DQoJbXR4X2Fzc2VydCgmc2NoZWRfbG9jaywgTUFfT1dORUQpOw0KCXNjaGVkX2V4 aXRfa3NlZ3JwKEZJUlNUX0tTRUdSUF9JTl9QUk9DKHApLCBjaGlsZHRkKTsNCglrc2VxX2xv YWRfcmVtKEtTRVFfQ1BVKGNoaWxkdGQtPnRkX2tzZS0+a2VfY3B1KSwgY2hpbGR0ZC0+dGRf a3NlKTsNCn0NCg0Kdm9pZA0Kc2NoZWRfZXhpdF9rc2VncnAoc3RydWN0IGtzZWdycCAqa2cs IHN0cnVjdCB0aHJlYWQgKnRkKQ0Kew0KCS8qIGtnLT5rZ19zbHB0aW1lICs9IHRkLT50ZF9r c2VncnAtPmtnX3NscHRpbWU7ICovDQoJa2ctPmtnX3J1bnRpbWUgKz0gdGQtPnRkX2tzZWdy cC0+a2dfcnVudGltZTsNCglzY2hlZF9pbnRlcmFjdF91cGRhdGUoa2cpOw0KfQ0KDQp2b2lk DQpzY2hlZF9leGl0X3RocmVhZChzdHJ1Y3QgdGhyZWFkICp0ZCwgc3RydWN0IHRocmVhZCAq Y2hpbGR0ZCkNCnsNCglrc2VxX2xvYWRfcmVtKEtTRVFfQ1BVKGNoaWxkdGQtPnRkX2tzZS0+ a2VfY3B1KSwgY2hpbGR0ZC0+dGRfa3NlKTsNCn0NCg0Kdm9pZA0Kc2NoZWRfY2xvY2soc3Ry dWN0IHRocmVhZCAqdGQpDQp7DQoJc3RydWN0IGtzZXEgKmtzZXE7DQoJc3RydWN0IGtzZWdy cCAqa2c7DQoJc3RydWN0IGtzZSAqa2U7DQoNCgltdHhfYXNzZXJ0KCZzY2hlZF9sb2NrLCBN QV9PV05FRCk7DQoJa3NlcSA9IEtTRVFfU0VMRigpOw0KI2lmZGVmIFNNUA0KCWlmICh0aWNr cyA9PSBiYWxfdGljaykNCgkJc2NoZWRfYmFsYW5jZSgpOw0KCWlmICh0aWNrcyA9PSBnYmFs X3RpY2spDQoJCXNjaGVkX2JhbGFuY2VfZ3JvdXBzKCk7DQoJLyoNCgkgKiBXZSBjb3VsZCBo YXZlIGJlZW4gYXNzaWduZWQgYSBub24gcmVhbC10aW1lIHRocmVhZCB3aXRob3V0IGFuDQoJ ICogSVBJLg0KCSAqLw0KCWlmIChrc2VxLT5rc3FfYXNzaWduZWQpDQoJCWtzZXFfYXNzaWdu KGtzZXEpOwkvKiBQb3RlbnRpYWxseSBzZXRzIE5FRURSRVNDSEVEICovDQojZW5kaWYNCgkv Kg0KCSAqIHNjaGVkX3NldHVwKCkgYXBwYXJlbnRseSBoYXBwZW5zIHByaW9yIHRvIHN0YXRo eiBiZWluZyBzZXQuICBXZQ0KCSAqIG5lZWQgdG8gcmVzb2x2ZSB0aGUgdGltZXJzIGVhcmxp ZXIgaW4gdGhlIGJvb3Qgc28gd2UgY2FuIGF2b2lkDQoJICogY2FsY3VsYXRpbmcgdGhpcyBo ZXJlLg0KCSAqLw0KCWlmIChyZWFsc3RhdGh6ID09IDApIHsNCgkJcmVhbHN0YXRoeiA9IHN0 YXRoeiA/IHN0YXRoeiA6IGh6Ow0KCQl0aWNraW5jciA9IGh6IC8gcmVhbHN0YXRoejsNCgkJ LyoNCgkJICogWFhYIFRoaXMgZG9lcyBub3Qgd29yayBmb3IgdmFsdWVzIG9mIHN0YXRoeiB0 aGF0IGFyZSBtdWNoDQoJCSAqIGxhcmdlciB0aGFuIGh6Lg0KCQkgKi8NCgkJaWYgKHRpY2tp bmNyID09IDApDQoJCQl0aWNraW5jciA9IDE7DQoJfQ0KDQoJa2UgPSB0ZC0+dGRfa3NlOw0K CWtnID0ga2UtPmtlX2tzZWdycDsNCg0KCS8qIEFkanVzdCB0aWNrcyBmb3IgcGN0Y3B1ICov DQoJa2UtPmtlX3RpY2tzKys7DQoJa2UtPmtlX2x0aWNrID0gdGlja3M7DQoNCgkvKiBHbyB1 cCB0byBvbmUgc2Vjb25kIGJleW9uZCBvdXIgbWF4IGFuZCB0aGVuIHRyaW0gYmFjayBkb3du ICovDQoJaWYgKGtlLT5rZV9mdGljayArIFNDSEVEX0NQVV9USUNLUyArIGh6IDwga2UtPmtl X2x0aWNrKQ0KCQlzY2hlZF9wY3RjcHVfdXBkYXRlKGtlKTsNCg0KCWlmICh0ZC0+dGRfZmxh Z3MgJiBUREZfSURMRVREKQ0KCQlyZXR1cm47DQoNCglDVFI0KEtUUl9VTEUsICJUaWNrIHRo cmVhZCAlcCAoc2xpY2U6ICVkLCBzbHB0aW1lOiAlZCwgcnVudGltZTogJWQpIiwNCgkgICAg dGQsIGtlLT5rZV9zbGljZSwga2ctPmtnX3NscHRpbWUgPj4gMTAsIGtnLT5rZ19ydW50aW1l ID4+IDEwKTsNCgkvKg0KCSAqIFdlIG9ubHkgZG8gc2xpY2luZyBjb2RlIGZvciBUSU1FU0hB UkUga3NlZ3Jwcy4NCgkgKi8NCglpZiAoa2ctPmtnX3ByaV9jbGFzcyAhPSBQUklfVElNRVNI QVJFKQ0KCQlyZXR1cm47DQoJLyoNCgkgKiBXZSB1c2VkIGEgdGljayBjaGFyZ2UgaXQgdG8g dGhlIGtzZWdycCBzbyB0aGF0IHdlIGNhbiBjb21wdXRlIG91cg0KCSAqIGludGVyYWN0aXZp dHkuDQoJICovDQoJa2ctPmtnX3J1bnRpbWUgKz0gdGlja2luY3IgPDwgMTA7DQoJc2NoZWRf aW50ZXJhY3RfdXBkYXRlKGtnKTsNCg0KCS8qDQoJICogV2UgdXNlZCB1cCBvbmUgdGltZSBz bGljZS4NCgkgKi8NCglpZiAoLS1rZS0+a2Vfc2xpY2UgPiAwKQ0KCQlyZXR1cm47DQoJLyoN CgkgKiBXZSdyZSBvdXQgb2YgdGltZSwgcmVjb21wdXRlIHByaW9yaXRpZXMgYW5kIHJlcXVl dWUuDQoJICovDQoJa3NlcV9sb2FkX3JlbShrc2VxLCBrZSk7DQoJc2NoZWRfcHJpb3JpdHko a2cpOw0KCXNjaGVkX3NsaWNlKGtlKTsNCglpZiAoU0NIRURfQ1VSUihrZywga2UpKQ0KCQlr ZS0+a2VfcnVucSA9IGtzZXEtPmtzcV9jdXJyOw0KCWVsc2UNCgkJa2UtPmtlX3J1bnEgPSBr c2VxLT5rc3FfbmV4dDsNCglrc2VxX2xvYWRfYWRkKGtzZXEsIGtlKTsNCgl0ZC0+dGRfZmxh Z3MgfD0gVERGX05FRURSRVNDSEVEOw0KfQ0KDQppbnQNCnNjaGVkX3J1bm5hYmxlKHZvaWQp DQp7DQoJc3RydWN0IGtzZXEgKmtzZXE7DQoJaW50IGxvYWQ7DQoNCglsb2FkID0gMTsNCg0K CWtzZXEgPSBLU0VRX1NFTEYoKTsNCiNpZmRlZiBTTVANCglpZiAoa3NlcS0+a3NxX2Fzc2ln bmVkKSB7DQoJCW10eF9sb2NrX3NwaW4oJnNjaGVkX2xvY2spOw0KCQlrc2VxX2Fzc2lnbihr c2VxKTsNCgkJbXR4X3VubG9ja19zcGluKCZzY2hlZF9sb2NrKTsNCgl9DQojZW5kaWYNCglp ZiAoKGN1cnRocmVhZC0+dGRfZmxhZ3MgJiBUREZfSURMRVREKSAhPSAwKSB7DQoJCWlmIChr c2VxLT5rc3FfbG9hZCA+IDApDQoJCQlnb3RvIG91dDsNCgl9IGVsc2UNCgkJaWYgKGtzZXEt PmtzcV9sb2FkIC0gMSA+IDApDQoJCQlnb3RvIG91dDsNCglsb2FkID0gMDsNCm91dDoNCgly ZXR1cm4gKGxvYWQpOw0KfQ0KDQp2b2lkDQpzY2hlZF91c2VycmV0KHN0cnVjdCB0aHJlYWQg KnRkKQ0Kew0KCXN0cnVjdCBrc2VncnAgKmtnOw0KDQoJa2cgPSB0ZC0+dGRfa3NlZ3JwOw0K CQ0KCWlmICh0ZC0+dGRfcHJpb3JpdHkgIT0ga2ctPmtnX3VzZXJfcHJpKSB7DQoJCW10eF9s b2NrX3NwaW4oJnNjaGVkX2xvY2spOw0KCQl0ZC0+dGRfcHJpb3JpdHkgPSBrZy0+a2dfdXNl cl9wcmk7DQoJCW10eF91bmxvY2tfc3Bpbigmc2NoZWRfbG9jayk7DQoJfQ0KfQ0KDQpzdHJ1 Y3Qga3NlICoNCnNjaGVkX2Nob29zZSh2b2lkKQ0Kew0KCXN0cnVjdCBrc2VxICprc2VxOw0K CXN0cnVjdCBrc2UgKmtlOw0KDQoJbXR4X2Fzc2VydCgmc2NoZWRfbG9jaywgTUFfT1dORUQp Ow0KCWtzZXEgPSBLU0VRX1NFTEYoKTsNCiNpZmRlZiBTTVANCnJlc3RhcnQ6DQoJaWYgKGtz ZXEtPmtzcV9hc3NpZ25lZCkNCgkJa3NlcV9hc3NpZ24oa3NlcSk7DQojZW5kaWYNCglrZSA9 IGtzZXFfY2hvb3NlKGtzZXEpOw0KCWlmIChrZSkgew0KI2lmZGVmIFNNUA0KCQlpZiAoa2Ut PmtlX2tzZWdycC0+a2dfcHJpX2NsYXNzID09IFBSSV9JRExFKQ0KCQkJaWYgKGtzZXFfaWRs ZWQoa3NlcSkgPT0gMCkNCgkJCQlnb3RvIHJlc3RhcnQ7DQojZW5kaWYNCgkJa3NlcV9ydW5x X3JlbShrc2VxLCBrZSk7DQoJCWtlLT5rZV9zdGF0ZSA9IEtFU19USFJFQUQ7DQoNCgkJaWYg KGtlLT5rZV9rc2VncnAtPmtnX3ByaV9jbGFzcyA9PSBQUklfVElNRVNIQVJFKSB7DQoJCQlD VFI0KEtUUl9VTEUsICJSdW4gdGhyZWFkICVwIGZyb20gJXAgKHNsaWNlOiAlZCwgcHJpOiAl ZCkiLA0KCQkJICAgIGtlLT5rZV90aHJlYWQsIGtlLT5rZV9ydW5xLCBrZS0+a2Vfc2xpY2Us DQoJCQkgICAga2UtPmtlX3RocmVhZC0+dGRfcHJpb3JpdHkpOw0KCQl9DQoJCXJldHVybiAo a2UpOw0KCX0NCiNpZmRlZiBTTVANCglpZiAoa3NlcV9pZGxlZChrc2VxKSA9PSAwKQ0KCQln b3RvIHJlc3RhcnQ7DQojZW5kaWYNCglyZXR1cm4gKE5VTEwpOw0KfQ0KDQp2b2lkDQpzY2hl ZF9hZGQoc3RydWN0IHRocmVhZCAqdGQsIGludCBmbGFncykNCnsNCg0KCS8qIGxldCBqZWZm IHdvcmsgb3V0IGhvdyB0byBtYXAgdGhlIGZsYWdzIGJldHRlciAqLw0KCS8qIEknbSBvcGVu IHRvIHN1Z2dlc3Rpb25zICovDQoJaWYgKGZsYWdzICYgU1JRX1lJRUxESU5HKQ0KCQkvKg0K CQkgKiBQcmVlbXB0aW5nIGR1cmluZyBzd2l0Y2hpbmcgY2FuIGJlIGJhZCBKVUpVDQoJCSAq IGVzcGVjaWFsbHkgZm9yIEtTRSBwcm9jZXNzZXMNCgkJICovDQoJCXNjaGVkX2FkZF9pbnRl cm5hbCh0ZCwgMCk7DQoJZWxzZQ0KCQlzY2hlZF9hZGRfaW50ZXJuYWwodGQsIDEpOw0KfQ0K DQpzdGF0aWMgdm9pZA0Kc2NoZWRfYWRkX2ludGVybmFsKHN0cnVjdCB0aHJlYWQgKnRkLCBp bnQgcHJlZW1wdGl2ZSkNCnsNCglzdHJ1Y3Qga3NlcSAqa3NlcTsNCglzdHJ1Y3Qga3NlZ3Jw ICprZzsNCglzdHJ1Y3Qga3NlICprZTsNCiNpZmRlZiBTTVANCglpbnQgY2FubWlncmF0ZTsN CiNlbmRpZg0KCWludCBjbGFzczsNCg0KCW10eF9hc3NlcnQoJnNjaGVkX2xvY2ssIE1BX09X TkVEKTsNCglrZSA9IHRkLT50ZF9rc2U7DQoJa2cgPSB0ZC0+dGRfa3NlZ3JwOw0KCWlmIChr ZS0+a2VfZmxhZ3MgJiBLRUZfQVNTSUdORUQpDQoJCXJldHVybjsNCglrc2VxID0gS1NFUV9T RUxGKCk7DQoJS0FTU0VSVChrZS0+a2Vfc3RhdGUgIT0gS0VTX09OUlVOUSwNCgkgICAgKCJz Y2hlZF9hZGQ6IGtzZSAlcCAoJXMpIGFscmVhZHkgaW4gcnVuIHF1ZXVlIiwga2UsDQoJICAg IGtlLT5rZV9wcm9jLT5wX2NvbW0pKTsNCglLQVNTRVJUKGtlLT5rZV9wcm9jLT5wX3NmbGFn ICYgUFNfSU5NRU0sDQoJICAgICgic2NoZWRfYWRkOiBwcm9jZXNzIHN3YXBwZWQgb3V0Iikp Ow0KCUtBU1NFUlQoa2UtPmtlX3J1bnEgPT0gTlVMTCwNCgkgICAgKCJzY2hlZF9hZGQ6IEtT RSAlcCBpcyBzdGlsbCBhc3NpZ25lZCB0byBhIHJ1biBxdWV1ZSIsIGtlKSk7DQoNCgljbGFz cyA9IFBSSV9CQVNFKGtnLT5rZ19wcmlfY2xhc3MpOw0KCXN3aXRjaCAoY2xhc3MpIHsNCglj YXNlIFBSSV9JVEhEOg0KCWNhc2UgUFJJX1JFQUxUSU1FOg0KCQlrZS0+a2VfcnVucSA9IGtz ZXEtPmtzcV9jdXJyOw0KCQlrZS0+a2Vfc2xpY2UgPSBTQ0hFRF9TTElDRV9NQVg7DQoJCWtl LT5rZV9jcHUgPSBQQ1BVX0dFVChjcHVpZCk7DQoJCWJyZWFrOw0KCWNhc2UgUFJJX1RJTUVT SEFSRToNCgkJaWYgKFNDSEVEX0NVUlIoa2csIGtlKSkNCgkJCWtlLT5rZV9ydW5xID0ga3Nl cS0+a3NxX2N1cnI7DQoJCWVsc2UNCgkJCWtlLT5rZV9ydW5xID0ga3NlcS0+a3NxX25leHQ7 DQoJCWJyZWFrOw0KCWNhc2UgUFJJX0lETEU6DQoJCS8qDQoJCSAqIFRoaXMgaXMgZm9yIHBy aW9yaXR5IHByb3AuDQoJCSAqLw0KCQlpZiAoa2UtPmtlX3RocmVhZC0+dGRfcHJpb3JpdHkg PCBQUklfTUlOX0lETEUpDQoJCQlrZS0+a2VfcnVucSA9IGtzZXEtPmtzcV9jdXJyOw0KCQll bHNlDQoJCQlrZS0+a2VfcnVucSA9ICZrc2VxLT5rc3FfaWRsZTsNCgkJa2UtPmtlX3NsaWNl ID0gU0NIRURfU0xJQ0VfTUlOOw0KCQlicmVhazsNCglkZWZhdWx0Og0KCQlwYW5pYygiVW5r bm93biBwcmkgY2xhc3MuIik7DQoJCWJyZWFrOw0KCX0NCiNpZmRlZiBTTVANCgkvKg0KCSAq IERvbid0IG1pZ3JhdGUgcnVubmluZyB0aHJlYWRzIGhlcmUuICBGb3JjZSB0aGUgbG9uZyB0 ZXJtIGJhbGFuY2VyDQoJICogdG8gZG8gaXQuDQoJICovDQoJY2FubWlncmF0ZSA9IEtTRV9D QU5fTUlHUkFURShrZSwgY2xhc3MpOw0KCWlmIChrZS0+a2VfZmxhZ3MgJiBLRUZfSE9MRCkg ew0KCQlrZS0+a2VfZmxhZ3MgJj0gfktFRl9IT0xEOw0KCQljYW5taWdyYXRlID0gMDsNCgl9 DQoJLyoNCgkgKiBJZiB0aGlzIHRocmVhZCBpcyBwaW5uZWQgb3IgYm91bmQsIG5vdGlmeSB0 aGUgdGFyZ2V0IGNwdS4NCgkgKi8NCglpZiAoIWNhbm1pZ3JhdGUgJiYga2UtPmtlX2NwdSAh PSBQQ1BVX0dFVChjcHVpZCkgKSB7DQoJCWtlLT5rZV9ydW5xID0gTlVMTDsNCgkJa3NlcV9u b3RpZnkoa2UsIGtlLT5rZV9jcHUpOw0KCQlyZXR1cm47DQoJfQ0KCS8qDQoJICogSWYgd2Ug aGFkIGJlZW4gaWRsZSwgY2xlYXIgb3VyIGJpdCBpbiB0aGUgZ3JvdXAgYW5kIHBvdGVudGlh bGx5DQoJICogdGhlIGdsb2JhbCBiaXRtYXAuICBJZiBub3QsIHNlZSBpZiB3ZSBzaG91bGQg dHJhbnNmZXIgdGhpcyB0aHJlYWQuDQoJICovDQoJaWYgKChjbGFzcyA9PSBQUklfVElNRVNI QVJFIHx8IGNsYXNzID09IFBSSV9SRUFMVElNRSkgJiYNCgkgICAgKGtzZXEtPmtzcV9ncm91 cC0+a3NnX2lkbGVtYXNrICYgUENQVV9HRVQoY3B1bWFzaykpICE9IDApIHsNCgkJLyoNCgkJ ICogQ2hlY2sgdG8gc2VlIGlmIG91ciBncm91cCBpcyB1bmlkbGluZywgYW5kIGlmIHNvLCBy ZW1vdmUgaXQNCgkJICogZnJvbSB0aGUgZ2xvYmFsIGlkbGUgbWFzay4NCgkJICovDQoJCWlm IChrc2VxLT5rc3FfZ3JvdXAtPmtzZ19pZGxlbWFzayA9PQ0KCQkgICAga3NlcS0+a3NxX2dy b3VwLT5rc2dfY3B1bWFzaykNCgkJCWF0b21pY19jbGVhcl9pbnQoJmtzZXFfaWRsZSwga3Nl cS0+a3NxX2dyb3VwLT5rc2dfbWFzayk7DQoJCS8qDQoJCSAqIE5vdyByZW1vdmUgb3Vyc2Vs dmVzIGZyb20gdGhlIGdyb3VwIHNwZWNpZmljIGlkbGUgbWFzay4NCgkJICovDQoJCWtzZXEt PmtzcV9ncm91cC0+a3NnX2lkbGVtYXNrICY9IH5QQ1BVX0dFVChjcHVtYXNrKTsNCgl9IGVs c2UgaWYgKGtzZXEtPmtzcV9sb2FkID4gMSAmJiBjYW5taWdyYXRlKQ0KCQlpZiAoa3NlcV90 cmFuc2Zlcihrc2VxLCBrZSwgY2xhc3MpKQ0KCQkJcmV0dXJuOw0KCWtlLT5rZV9jcHUgPSBQ Q1BVX0dFVChjcHVpZCk7DQojZW5kaWYNCgkvKg0KCSAqIFhYWCBXaXRoIHByZWVtcHRpb24g dGhpcyBpcyBub3QgbmVjZXNzYXJ5Lg0KCSAqLw0KCWlmICh0ZC0+dGRfcHJpb3JpdHkgPCBj dXJ0aHJlYWQtPnRkX3ByaW9yaXR5ICYmDQoJICAgIGtlLT5rZV9ydW5xID09IGtzZXEtPmtz cV9jdXJyKQ0KCQljdXJ0aHJlYWQtPnRkX2ZsYWdzIHw9IFRERl9ORUVEUkVTQ0hFRDsNCglp ZiAocHJlZW1wdGl2ZSAmJiBtYXliZV9wcmVlbXB0KHRkKSkNCgkJcmV0dXJuOw0KCVNMT1Rf VVNFKHRkLT50ZF9rc2VncnApOw0KCWtlLT5rZV9rc2VncnAtPmtnX3J1bnFfdGhyZWFkcysr Ow0KCWtlLT5rZV9zdGF0ZSA9IEtFU19PTlJVTlE7DQoNCglrc2VxX3J1bnFfYWRkKGtzZXEs IGtlKTsNCglrc2VxX2xvYWRfYWRkKGtzZXEsIGtlKTsNCn0NCg0Kdm9pZA0Kc2NoZWRfcmVt KHN0cnVjdCB0aHJlYWQgKnRkKQ0Kew0KCXN0cnVjdCBrc2VxICprc2VxOw0KCXN0cnVjdCBr c2UgKmtlOw0KDQoJa2UgPSB0ZC0+dGRfa3NlOw0KCS8qDQoJICogSXQgaXMgc2FmZSB0byBq dXN0IHJldHVybiBoZXJlIGJlY2F1c2Ugc2NoZWRfcmVtKCkgaXMgb25seSBldmVyDQoJICog dXNlZCBpbiBwbGFjZXMgd2hlcmUgd2UncmUgaW1tZWRpYXRlbHkgZ29pbmcgdG8gYWRkIHRo ZQ0KCSAqIGtzZSBiYWNrIG9uIGFnYWluLiAgSW4gdGhhdCBjYXNlIGl0J2xsIGJlIGFkZGVk IHdpdGggdGhlIGNvcnJlY3QNCgkgKiB0aHJlYWQgYW5kIHByaW9yaXR5IHdoZW4gdGhlIGNh bGxlciBkcm9wcyB0aGUgc2NoZWRfbG9jay4NCgkgKi8NCglpZiAoa2UtPmtlX2ZsYWdzICYg S0VGX0FTU0lHTkVEKQ0KCQlyZXR1cm47DQoJbXR4X2Fzc2VydCgmc2NoZWRfbG9jaywgTUFf T1dORUQpOw0KCUtBU1NFUlQoKGtlLT5rZV9zdGF0ZSA9PSBLRVNfT05SVU5RKSwNCgkgICAg KCJzY2hlZF9yZW06IEtTRSBub3Qgb24gcnVuIHF1ZXVlIikpOw0KDQoJa2UtPmtlX3N0YXRl ID0gS0VTX1RIUkVBRDsNCglTTE9UX1JFTEVBU0UodGQtPnRkX2tzZWdycCk7DQoJa2UtPmtl X2tzZWdycC0+a2dfcnVucV90aHJlYWRzLS07DQoJa3NlcSA9IEtTRVFfQ1BVKGtlLT5rZV9j cHUpOw0KCWtzZXFfcnVucV9yZW0oa3NlcSwga2UpOw0KCWtzZXFfbG9hZF9yZW0oa3NlcSwg a2UpOw0KfQ0KDQpmaXhwdF90DQpzY2hlZF9wY3RjcHUoc3RydWN0IHRocmVhZCAqdGQpDQp7 DQoJZml4cHRfdCBwY3RjcHU7DQoJc3RydWN0IGtzZSAqa2U7DQoNCglwY3RjcHUgPSAwOw0K CWtlID0gdGQtPnRkX2tzZTsNCglpZiAoa2UgPT0gTlVMTCkNCgkJcmV0dXJuICgwKTsNCg0K CW10eF9sb2NrX3NwaW4oJnNjaGVkX2xvY2spOw0KCWlmIChrZS0+a2VfdGlja3MpIHsNCgkJ aW50IHJ0aWNrOw0KDQoJCS8qDQoJCSAqIERvbid0IHVwZGF0ZSBtb3JlIGZyZXF1ZW50bHkg dGhhbiB0d2ljZSBhIHNlY29uZC4gIEFsbG93aW5nDQoJCSAqIHRoaXMgY2F1c2VzIHRoZSBj cHUgdXNhZ2UgdG8gZGVjYXkgYXdheSB0b28gcXVpY2tseSBkdWUgdG8NCgkJICogcm91bmRp bmcgZXJyb3JzLg0KCQkgKi8NCgkJaWYgKGtlLT5rZV9mdGljayArIFNDSEVEX0NQVV9USUNL UyA8IGtlLT5rZV9sdGljayB8fA0KCQkgICAga2UtPmtlX2x0aWNrIDwgKHRpY2tzIC0gKGh6 IC8gMikpKQ0KCQkJc2NoZWRfcGN0Y3B1X3VwZGF0ZShrZSk7DQoJCS8qIEhvdyBtYW55IHJ0 aWNrIHBlciBzZWNvbmQgPyAqLw0KCQlydGljayA9IG1pbihrZS0+a2VfdGlja3MgLyBTQ0hF RF9DUFVfVElNRSwgU0NIRURfQ1BVX1RJQ0tTKTsNCgkJcGN0Y3B1ID0gKEZTQ0FMRSAqICgo RlNDQUxFICogcnRpY2spL3JlYWxzdGF0aHopKSA+PiBGU0hJRlQ7DQoJfQ0KDQoJa2UtPmtl X3Byb2MtPnBfc3d0aW1lID0ga2UtPmtlX2x0aWNrIC0ga2UtPmtlX2Z0aWNrOw0KCW10eF91 bmxvY2tfc3Bpbigmc2NoZWRfbG9jayk7DQoNCglyZXR1cm4gKHBjdGNwdSk7DQp9DQoNCnZv aWQNCnNjaGVkX2JpbmQoc3RydWN0IHRocmVhZCAqdGQsIGludCBjcHUpDQp7DQoJc3RydWN0 IGtzZSAqa2U7DQoNCgltdHhfYXNzZXJ0KCZzY2hlZF9sb2NrLCBNQV9PV05FRCk7DQoJa2Ug PSB0ZC0+dGRfa3NlOw0KCWtlLT5rZV9mbGFncyB8PSBLRUZfQk9VTkQ7DQojaWZkZWYgU01Q DQoJaWYgKFBDUFVfR0VUKGNwdWlkKSA9PSBjcHUpDQoJCXJldHVybjsNCgkvKiBzY2hlZF9y ZW0gd2l0aG91dCB0aGUgcnVucV9yZW1vdmUgKi8NCglrZS0+a2Vfc3RhdGUgPSBLRVNfVEhS RUFEOw0KCWtlLT5rZV9rc2VncnAtPmtnX3J1bnFfdGhyZWFkcy0tOw0KCWtzZXFfbG9hZF9y ZW0oS1NFUV9DUFUoa2UtPmtlX2NwdSksIGtlKTsNCglrc2VxX25vdGlmeShrZSwgY3B1KTsN CgkvKiBXaGVuIHdlIHJldHVybiBmcm9tIG1pX3N3aXRjaCB3ZSdsbCBiZSBvbiB0aGUgY29y cmVjdCBjcHUuICovDQoJbWlfc3dpdGNoKFNXX1ZPTCwgTlVMTCk7DQojZW5kaWYNCn0NCg0K dm9pZA0Kc2NoZWRfdW5iaW5kKHN0cnVjdCB0aHJlYWQgKnRkKQ0Kew0KCW10eF9hc3NlcnQo JnNjaGVkX2xvY2ssIE1BX09XTkVEKTsNCgl0ZC0+dGRfa3NlLT5rZV9mbGFncyAmPSB+S0VG X0JPVU5EOw0KfQ0KDQppbnQNCnNjaGVkX2xvYWQodm9pZCkNCnsNCiNpZmRlZiBTTVANCglp bnQgdG90YWw7DQoJaW50IGk7DQoNCgl0b3RhbCA9IDA7DQoJZm9yIChpID0gMDsgaSA8PSBr c2dfbWF4aWQ7IGkrKykNCgkJdG90YWwgKz0gS1NFUV9HUk9VUChpKS0+a3NnX2xvYWQ7DQoJ cmV0dXJuICh0b3RhbCk7DQojZWxzZQ0KCXJldHVybiAoS1NFUV9TRUxGKCktPmtzcV9zeXNs b2FkKTsNCiNlbmRpZg0KfQ0KDQppbnQNCnNjaGVkX3NpemVvZl9rc2VncnAodm9pZCkNCnsN CglyZXR1cm4gKHNpemVvZihzdHJ1Y3Qga3NlZ3JwKSArIHNpemVvZihzdHJ1Y3Qga2dfc2No ZWQpKTsNCn0NCg0KaW50DQpzY2hlZF9zaXplb2ZfcHJvYyh2b2lkKQ0Kew0KCXJldHVybiAo c2l6ZW9mKHN0cnVjdCBwcm9jKSk7DQp9DQoNCmludA0Kc2NoZWRfc2l6ZW9mX3RocmVhZCh2 b2lkKQ0Kew0KCXJldHVybiAoc2l6ZW9mKHN0cnVjdCB0aHJlYWQpICsgc2l6ZW9mKHN0cnVj dCB0ZF9zY2hlZCkpOw0KfQ0KI2RlZmluZSBLRVJOX1NXSVRDSF9JTkNMVURFIDENCiNpbmNs dWRlICJrZXJuL2tlcm5fc3dpdGNoLmMiDQo= --_===8514806====mx1.intranet.ru===_ Content-Type: text/plain Content-Disposition: attachment; filename="out.txt" Content-Transfer-Encoding: base64 cm0gLWYgLm9sZGRlcA0KaWYgWyAtZiAuZGVwZW5kIF07IHRoZW4gbXYgLmRlcGVuZCAub2xk ZGVwOyBmaQ0KbWFrZSBfa2VybmVsLWRlcGVuZA0KaWYgWyAtZiAub2xkZGVwIF07IHRoZW4g bXYgLm9sZGRlcCAuZGVwZW5kOyBmaQ0Kcm0gLWYgLm5ld2RlcA0KbWFrZSAtViBDRklMRVMg LVYgU1lTVEVNX0NGSUxFUyAtViBHRU5fQ0ZJTEVTIHwgIE1LREVQX0NQUD0iY2MgLUUiIEND PSJjYyIgeGFyZ3MgbWtkZXAgLWEgLWYgLm5ld2RlcCAtTyAtcGlwZSAgLVdhbGwgLVdyZWR1 bmRhbnQtZGVjbHMgLVduZXN0ZWQtZXh0ZXJucyAtV3N0cmljdC1wcm90b3R5cGVzICAtV21p c3NpbmctcHJvdG90eXBlcyAtV3BvaW50ZXItYXJpdGggLVdpbmxpbmUgLVdjYXN0LXF1YWwg IC1mZm9ybWF0LWV4dGVuc2lvbnMgLXN0ZD1jOTkgIC1ub3N0ZGluYyAtSS0gIC1JLiAtSS4u Ly4uLy4uIC1JLi4vLi4vLi4vY29udHJpYi9kZXYvYWNwaWNhIC1JLi4vLi4vLi4vY29udHJp Yi9hbHRxIC1JLi4vLi4vLi4vY29udHJpYi9pcGZpbHRlciAtSS4uLy4uLy4uL2NvbnRyaWIv cGYgLUkuLi8uLi8uLi9jb250cmliL2Rldi9hdGggLUkuLi8uLi8uLi9jb250cmliL2Rldi9h dGgvZnJlZWJzZCAtSS4uLy4uLy4uL2NvbnRyaWIvbmdhdG0gLURfS0VSTkVMIC1pbmNsdWRl IG9wdF9nbG9iYWwuaCAtZm5vLWNvbW1vbiAtZmlubGluZS1saW1pdD04MDAwIC0tcGFyYW0g aW5saW5lLXVuaXQtZ3Jvd3RoPTEwMCAtLXBhcmFtIGxhcmdlLWZ1bmN0aW9uLWdyb3d0aD0x MDAwICAtbW5vLWFsaWduLWxvbmctc3RyaW5ncyAtbXByZWZlcnJlZC1zdGFjay1ib3VuZGFy eT0yIC1mZnJlZXN0YW5kaW5nDQouLi8uLi8uLi9rZXJuL3NjaGVkX3VsZS5jOjYwOjI6ICNl cnJvciAiVGhlIFNDSEVEX1VMRSBzY2hlZHVsZXIgaXMgYnJva2VuLiBQbGVhc2UgdXNlIFND SEVEXzRCU0QiDQpta2RlcDogY29tcGlsZSBmYWlsZWQNCioqKiBFcnJvciBjb2RlIDENCg0K U3RvcCBpbiAvdXNyL3NyYy9zeXMvaTM4Ni9jb21waWxlL0dFTkVSSUMuDQoqKiogRXJyb3Ig Y29kZSAxDQoNClN0b3AgaW4gL3Vzci9zcmMvc3lzL2kzODYvY29tcGlsZS9HRU5FUklDLg0K --_===8514806====mx1.intranet.ru===_--