From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail202.messagelabs.com (mail202.messagelabs.com [216.82.254.227]) by kanga.kvack.org (Postfix) with ESMTP id 246476B01F0 for ; Mon, 30 Aug 2010 19:10:47 -0400 (EDT) Received: from hpaq2.eem.corp.google.com (hpaq2.eem.corp.google.com [172.25.149.2]) by smtp-out.google.com with ESMTP id o7UNAg39006453 for ; Mon, 30 Aug 2010 16:10:42 -0700 Received: from qyk4 (qyk4.prod.google.com [10.241.83.132]) by hpaq2.eem.corp.google.com with ESMTP id o7UNAeDi015613 for ; Mon, 30 Aug 2010 16:10:41 -0700 Received: by qyk4 with SMTP id 4so6441873qyk.20 for ; Mon, 30 Aug 2010 16:10:39 -0700 (PDT) MIME-Version: 1.0 Date: Mon, 30 Aug 2010 16:10:05 -0700 Message-ID: Subject: Question of backporting the trace-vmscan-postprocess.pl From: Ying Han Content-Type: multipart/mixed; boundary=00163630f6b79cf990048f129002 Sender: owner-linux-mm@kvack.org To: Mel Gorman Cc: linux-mm@kvack.org, Rik van Riel , Wu Fengguang List-ID: --00163630f6b79cf990048f129002 Content-Type: text/plain; charset=ISO-8859-1 Hi Mel: I've been looking into the vmscan:tracing you added for 2.6.36_rc1. I also backported into 2.6.34 which is the kernel we are currently working on. However, I seems can not get it fully functional. Are you aware of any changes on the kernel tracing ABI which could cause that ? Here is how I reproduce it and I also attached the postprocess/trace-vmscan-postprocess.pl I patched. # mount -t debugfs nodev /sys/kernel/debug/ # for i in `find /sys/kernel/debug/tracing/events -name "enable" | grep mm_`; do echo 1 > $i; done run a process with pid==30196 # echo 'common_pid == 30196' > /sys/kernel/debug/tracing/events/vmscan/filter # cat /sys/kernel/debug/tracing/events/vmscan/filter common_pid == 30196 # ./trace-vmscan-postprocess.pl < /sys/kernel/debug/tracing/trace_pipe WARNING: Event vmscan/mm_vmscan_lru_shrink_inactive format string not found WARNING: Event vmscan/mm_vmscan_lru_shrink_active format string not found ^CSIGINT received, report pending. Hit ctrl-c again to exit Reclaim latencies expressed as order-latency_in_ms Process Direct Wokeup Pages Pages Pages Time details Rclms Kswapd Scanned Sync-IO ASync-IO Stalled Kswapd Kswapd Order Pages Pages Pages Instance Wakeups Re-wakeup Scanned Sync-IO ASync-IO Summary Direct reclaims: Direct reclaim pages scanned: Direct reclaim write file sync I/O: Direct reclaim write anon sync I/O: Direct reclaim write file async I/O: Direct reclaim write anon async I/O: Wake kswapd requests: Time stalled direct reclaim: 0.00 seconds Kswapd wakeups: Kswapd pages scanned: Kswapd reclaim write file sync I/O: Kswapd reclaim write anon sync I/O: Kswapd reclaim write file async I/O: Kswapd reclaim write anon async I/O: Time kswapd awake: 0.00 seconds So it didn't give me any output. However, if I turn off the filter for vmscan, it did give me some data but with random processes on the system. The same set of tests works for trace-pagealloc-postprocess.pl though # cat /sys/kernel/debug/tracing/events/kmem/filter common_pid == 30196 # ./trace-pagealloc-postprocess.pl < /sys/kernel/debug/tracing/trace_pipe Process Pages Pages Pages Pages PCPU PCPU PCPU Fragment Fragment MigType Fragment Fragment Unknown details allocd allocd freed freed pages drains refills Fallback Causing Changed Severe Moderate under lock direct pagevec drain -30196 2871 2917 0 0 0 0 439 32 32 0 32 0 0 ddtest-30196 4560 4328 0 0 0 0 639 26 26 1 25 1 0 Thanks --Ying --00163630f6b79cf990048f129002 Content-Type: text/x-patch; charset=US-ASCII; name="0001-vmscan-trace.patch" Content-Disposition: attachment; filename="0001-vmscan-trace.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gdhxwp030 RnJvbSA5NGVlMWJjOTU4ZDU5MjhjNjU5OTBhN2ZiOTJhODI4N2Q3MGY2ZDNlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBZaW5nIEhhbiA8eWluZ2hhbkBnb29nbGUuY29tPgpEYXRlOiBN b24sIDMwIEF1ZyAyMDEwIDAxOjA5OjU5IC0wNzAwClN1YmplY3Q6IFtQQVRDSF0gdm1zY2FuLXRy YWNlCgpDaGFuZ2UtSWQ6IEk3OGY2NzNmY2NlMWRhMDE1YTgzNjFmYzA4NWVhYmY1ZmQyNDVkMTZk Ci0tLQogLi4uL3RyYWNlL3Bvc3Rwcm9jZXNzL3RyYWNlLXZtc2Nhbi1wb3N0cHJvY2Vzcy5wbCAg fCAgNjg2ICsrKysrKysrKysrKysrKysrKysrCiAxIGZpbGVzIGNoYW5nZWQsIDY4NiBpbnNlcnRp b25zKCspLCAwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IERvY3VtZW50YXRpb24v dHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsCgpkaWZmIC0tZ2l0 IGEvRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nl c3MucGwgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL3Bvc3Rwcm9jZXNzL3RyYWNlLXZtc2Nhbi1wb3N0 cHJvY2Vzcy5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjU1MTQ2Ci0t LSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12 bXNjYW4tcG9zdHByb2Nlc3MucGwKQEAgLTAsMCArMSw2ODYgQEAKKyMhL3Vzci9iaW4vcGVybAor IyBUaGlzIGlzIGEgUE9DIGZvciByZWFkaW5nIHRoZSB0ZXh0IHJlcHJlc2VudGF0aW9uIG9mIHRy YWNlIG91dHB1dCByZWxhdGVkIHRvCisjIHBhZ2UgcmVjbGFpbS4gSXQgbWFrZXMgYW4gYXR0ZW1w dCB0byBleHRyYWN0IHNvbWUgaGlnaC1sZXZlbCBpbmZvcm1hdGlvbiBvbgorIyB3aGF0IGlzIGdv aW5nIG9uLiBUaGUgYWNjdXJhY3kgb2YgdGhlIHBhcnNlciBtYXkgdmFyeQorIworIyBFeGFtcGxl IHVzYWdlOiB0cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGwgPCAvc3lzL2tlcm5lbC9kZWJ1Zy90 cmFjaW5nL3RyYWNlX3BpcGUKKyMgb3RoZXIgb3B0aW9ucworIyAgIC0tcmVhZC1wcm9jc3RhdAlJ ZiB0aGUgdHJhY2UgbGFja3MgcHJvY2VzcyBpbmZvLCBnZXQgaXQgZnJvbSAvcHJvYworIyAgIC0t aWdub3JlLXBpZAlBZ2dyZWdhdGUgcHJvY2Vzc2VzIG9mIHRoZSBzYW1lIG5hbWUgdG9nZXRoZXIK KyMKKyMgQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24gMjAwOQorIyBBdXRob3I6IE1lbCBH b3JtYW4gPG1lbEBjc24udWwuaWU+Cit1c2Ugc3RyaWN0OwordXNlIEdldG9wdDo6TG9uZzsKKwor IyBUcmFjZXBvaW50IGV2ZW50cwordXNlIGNvbnN0YW50IE1NX1ZNU0NBTl9ESVJFQ1RfUkVDTEFJ TV9CRUdJTgk9PiAxOwordXNlIGNvbnN0YW50IE1NX1ZNU0NBTl9ESVJFQ1RfUkVDTEFJTV9FTkQJ PT4gMjsKK3VzZSBjb25zdGFudCBNTV9WTVNDQU5fS1NXQVBEX1dBS0UJCT0+IDM7Cit1c2UgY29u c3RhbnQgTU1fVk1TQ0FOX0tTV0FQRF9TTEVFUAkJPT4gNDsKK3VzZSBjb25zdGFudCBNTV9WTVND QU5fTFJVX1NIUklOS19BQ1RJVkUJPT4gNTsKK3VzZSBjb25zdGFudCBNTV9WTVNDQU5fTFJVX1NI UklOS19JTkFDVElWRQk9PiA2OwordXNlIGNvbnN0YW50IE1NX1ZNU0NBTl9MUlVfSVNPTEFURQkJ PT4gNzsKK3VzZSBjb25zdGFudCBNTV9WTVNDQU5fV1JJVEVQQUdFX0ZJTEVfU1lOQwk9PiA4Owor dXNlIGNvbnN0YW50IE1NX1ZNU0NBTl9XUklURVBBR0VfQU5PTl9TWU5DCT0+IDk7Cit1c2UgY29u c3RhbnQgTU1fVk1TQ0FOX1dSSVRFUEFHRV9GSUxFX0FTWU5DCT0+IDEwOwordXNlIGNvbnN0YW50 IE1NX1ZNU0NBTl9XUklURVBBR0VfQU5PTl9BU1lOQwk9PiAxMTsKK3VzZSBjb25zdGFudCBNTV9W TVNDQU5fV1JJVEVQQUdFX0FTWU5DCQk9PiAxMjsKK3VzZSBjb25zdGFudCBFVkVOVF9VTktOT1dO CQkJPT4gMTM7CisKKyMgUGVyLW9yZGVyIGV2ZW50cwordXNlIGNvbnN0YW50IE1NX1ZNU0NBTl9E SVJFQ1RfUkVDTEFJTV9CRUdJTl9QRVJPUkRFUiA9PiAxMTsKK3VzZSBjb25zdGFudCBNTV9WTVND QU5fV0FLRVVQX0tTV0FQRF9QRVJPUkRFUiAJPT4gMTI7Cit1c2UgY29uc3RhbnQgTU1fVk1TQ0FO X0tTV0FQRF9XQUtFX1BFUk9SREVSCT0+IDEzOwordXNlIGNvbnN0YW50IEhJR0hfS1NXQVBEX1JF V0FLRVVQX1BFUk9SREVSCT0+IDE0OworCisjIENvbnN0YW50cyB1c2VkIHRvIHRyYWNrIHN0YXRl Cit1c2UgY29uc3RhbnQgU1RBVEVfRElSRUNUX0JFR0lOIAkJPT4gMTU7Cit1c2UgY29uc3RhbnQg U1RBVEVfRElSRUNUX09SREVSIAkJPT4gMTY7Cit1c2UgY29uc3RhbnQgU1RBVEVfS1NXQVBEX0JF R0lOCQkJPT4gMTc7Cit1c2UgY29uc3RhbnQgU1RBVEVfS1NXQVBEX09SREVSCQkJPT4gMTg7CisK KyMgSGlnaC1sZXZlbCBldmVudHMgZXh0cmFwb2xhdGVkIGZyb20gdHJhY2Vwb2ludHMKK3VzZSBj b25zdGFudCBISUdIX0RJUkVDVF9SRUNMQUlNX0xBVEVOQ1kJPT4gMTk7Cit1c2UgY29uc3RhbnQg SElHSF9LU1dBUERfTEFURU5DWQkJPT4gMjA7Cit1c2UgY29uc3RhbnQgSElHSF9LU1dBUERfUkVX QUtFVVAJCT0+IDIxOwordXNlIGNvbnN0YW50IEhJR0hfTlJfU0NBTk5FRAkJCT0+IDIyOwordXNl IGNvbnN0YW50IEhJR0hfTlJfVEFLRU4JCQk9PiAyMzsKK3VzZSBjb25zdGFudCBISUdIX05SX1JF Q0xBSU0JCQk9PiAyNDsKK3VzZSBjb25zdGFudCBISUdIX05SX0NPTlRJR19ESVJUWQkJPT4gMjU7 CisKK215ICVwZXJwcm9jZXNzcGlkOworbXkgJXBlcnByb2Nlc3M7CitteSAlbGFzdF9wcm9jbWFw OworbXkgJG9wdF9pZ25vcmVwaWQ7CitteSAkb3B0X3JlYWRfcHJvY3N0YXQ7CisKK215ICR0b3Rh bF93YWtldXBfa3N3YXBkOworbXkgKCR0b3RhbF9kaXJlY3RfcmVjbGFpbSwgJHRvdGFsX2RpcmVj dF9ucl9zY2FubmVkKTsKK215ICgkdG90YWxfZGlyZWN0X2xhdGVuY3ksICR0b3RhbF9rc3dhcGRf bGF0ZW5jeSk7CitteSAoJHRvdGFsX2RpcmVjdF93cml0ZXBhZ2VfZmlsZV9zeW5jLCAkdG90YWxf ZGlyZWN0X3dyaXRlcGFnZV9maWxlX2FzeW5jKTsKK215ICgkdG90YWxfZGlyZWN0X3dyaXRlcGFn ZV9hbm9uX3N5bmMsICR0b3RhbF9kaXJlY3Rfd3JpdGVwYWdlX2Fub25fYXN5bmMpOworbXkgKCR0 b3RhbF9rc3dhcGRfbnJfc2Nhbm5lZCwgJHRvdGFsX2tzd2FwZF93YWtlKTsKK215ICgkdG90YWxf a3N3YXBkX3dyaXRlcGFnZV9maWxlX3N5bmMsICR0b3RhbF9rc3dhcGRfd3JpdGVwYWdlX2ZpbGVf YXN5bmMpOworbXkgKCR0b3RhbF9rc3dhcGRfd3JpdGVwYWdlX2Fub25fc3luYywgJHRvdGFsX2tz d2FwZF93cml0ZXBhZ2VfYW5vbl9hc3luYyk7CisKKyMgQ2F0Y2ggc2lnaW50IGFuZCBleGl0IG9u IHJlcXVlc3QKK215ICRzaWdpbnRfcmVwb3J0ID0gMDsKK215ICRzaWdpbnRfZXhpdCA9IDA7Citt eSAkc2lnaW50X3BlbmRpbmcgPSAwOworbXkgJHNpZ2ludF9yZWNlaXZlZCA9IDA7CitzdWIgc2ln aW50X2hhbmRsZXIgeworCW15ICRjdXJyZW50X3RpbWUgPSB0aW1lOworCWlmICgkY3VycmVudF90 aW1lIC0gMiA+ICRzaWdpbnRfcmVjZWl2ZWQpIHsKKwkJcHJpbnQgIlNJR0lOVCByZWNlaXZlZCwg cmVwb3J0IHBlbmRpbmcuIEhpdCBjdHJsLWMgYWdhaW4gdG8gZXhpdFxuIjsKKwkJJHNpZ2ludF9y ZXBvcnQgPSAxOworCX0gZWxzZSB7CisJCWlmICghJHNpZ2ludF9leGl0KSB7CisJCQlwcmludCAi U2Vjb25kIFNJR0lOVCByZWNlaXZlZCBxdWlja2x5LCBleGl0aW5nXG4iOworCQl9CisJCSRzaWdp bnRfZXhpdCsrOworCX0KKworCWlmICgkc2lnaW50X2V4aXQgPiAzKSB7CisJCXByaW50ICJNYW55 IFNJR0lOVHMgcmVjZWl2ZWQsIGV4aXRpbmcgbm93IHdpdGhvdXQgcmVwb3J0XG4iOworCQlleGl0 OworCX0KKworCSRzaWdpbnRfcmVjZWl2ZWQgPSAkY3VycmVudF90aW1lOworCSRzaWdpbnRfcGVu ZGluZyA9IDE7Cit9CiskU0lHe0lOVH0gPSAic2lnaW50X2hhbmRsZXIiOworCisjIFBhcnNlIGNv bW1hbmQgbGluZSBvcHRpb25zCitHZXRPcHRpb25zKAorCSdpZ25vcmUtcGlkJwkgPT4JXCRvcHRf aWdub3JlcGlkLAorCSdyZWFkLXByb2NzdGF0JwkgPT4JXCRvcHRfcmVhZF9wcm9jc3RhdCwKKyk7 CisKKyMgRGVmYXVsdHMgZm9yIGR5bmFtaWNhbGx5IGRpc2NvdmVyZWQgcmVnZXgncworbXkgJHJl Z2V4X2RpcmVjdF9iZWdpbl9kZWZhdWx0ID0gJ29yZGVyPShbMC05XSopIG1heV93cml0ZXBhZ2U9 KFswLTldKikgZ2ZwX2ZsYWdzPShbQS1aX3xdKiknOworbXkgJHJlZ2V4X2RpcmVjdF9lbmRfZGVm YXVsdCA9ICducl9yZWNsYWltZWQ9KFswLTldKiknOworbXkgJHJlZ2V4X2tzd2FwZF93YWtlX2Rl ZmF1bHQgPSAnbmlkPShbMC05XSopIG9yZGVyPShbMC05XSopJzsKK215ICRyZWdleF9rc3dhcGRf c2xlZXBfZGVmYXVsdCA9ICduaWQ9KFswLTldKiknOworbXkgJHJlZ2V4X3dha2V1cF9rc3dhcGRf ZGVmYXVsdCA9ICduaWQ9KFswLTldKikgemlkPShbMC05XSopIG9yZGVyPShbMC05XSopJzsKK215 ICRyZWdleF9scnVfaXNvbGF0ZV9kZWZhdWx0ID0gJ2lzb2xhdGVfbW9kZT0oWzAtOV0qKSBvcmRl cj0oWzAtOV0qKSBucl9yZXF1ZXN0ZWQ9KFswLTldKikgbnJfc2Nhbm5lZD0oWzAtOV0qKSBucl90 YWtlbj0oWzAtOV0qKSBjb250aWdfdGFrZW49KFswLTldKikgY29udGlnX2RpcnR5PShbMC05XSop IGNvbnRpZ19mYWlsZWQ9KFswLTldKiknOworbXkgJHJlZ2V4X2xydV9zaHJpbmtfaW5hY3RpdmVf ZGVmYXVsdCA9ICdscnU9KFtBLVpfXSopIG5yX3NjYW5uZWQ9KFswLTldKikgbnJfcmVjbGFpbWVk PShbMC05XSopIHByaW9yaXR5PShbMC05XSopJzsKK215ICRyZWdleF9scnVfc2hyaW5rX2FjdGl2 ZV9kZWZhdWx0ID0gJ2xydT0oW0EtWl9dKikgbnJfc2Nhbm5lZD0oWzAtOV0qKSBucl9yb3RhdGVk PShbMC05XSopIHByaW9yaXR5PShbMC05XSopJzsKK215ICRyZWdleF93cml0ZXBhZ2VfZGVmYXVs dCA9ICdwYWdlPShbMC05YS1mXSopIHBmbj0oWzAtOV0qKSBmbGFncz0oW0EtWl98XSopJzsKKwor IyBEeWFuaWNhbGx5IGRpc2NvdmVyZWQgcmVnZXgKK215ICRyZWdleF9kaXJlY3RfYmVnaW47Citt eSAkcmVnZXhfZGlyZWN0X2VuZDsKK215ICRyZWdleF9rc3dhcGRfd2FrZTsKK215ICRyZWdleF9r c3dhcGRfc2xlZXA7CitteSAkcmVnZXhfd2FrZXVwX2tzd2FwZDsKK215ICRyZWdleF9scnVfaXNv bGF0ZTsKK215ICRyZWdleF9scnVfc2hyaW5rX2luYWN0aXZlOworbXkgJHJlZ2V4X2xydV9zaHJp bmtfYWN0aXZlOworbXkgJHJlZ2V4X3dyaXRlcGFnZTsKKworIyBTdGF0aWMgcmVnZXggdXNlZC4g U3BlY2lmaWVkIGxpa2UgdGhpcyBmb3IgcmVhZGFiaWxpdHkgYW5kIGZvciB1c2Ugd2l0aCAvbwor IyAgICAgICAgICAgICAgICAgICAgICAocHJvY2Vzc19waWQpICAgICAoY3B1cyAgICAgICkgICAo IHRpbWUgICkgICAodHBvaW50ICAgICkgKGRldGFpbHMpCitteSAkcmVnZXhfdHJhY2VldmVudCA9 ICdccyooW2EtekEtWjAtOS1dKilccyooXFtbMC05XSpcXSlccyooWzAtOS5dKik6XHMqKFthLXpB LVpfXSopOlxzKiguKiknOworbXkgJHJlZ2V4X3N0YXRuYW1lID0gJ1stMC05XSpcc1woKC4qKVwp LionOworbXkgJHJlZ2V4X3N0YXRwcGlkID0gJ1stMC05XSpcc1woLipcKVxzW0EtWmEtel1ccyhb MC05XSopLionOworCitzdWIgZ2VuZXJhdGVfdHJhY2VldmVudF9yZWdleCB7CisJbXkgJGV2ZW50 ID0gc2hpZnQ7CisJbXkgJGRlZmF1bHQgPSBzaGlmdDsKKwlteSAkcmVnZXg7CisKKwkjIFJlYWQg dGhlIGV2ZW50IGZvcm1hdCBvciB1c2UgdGhlIGRlZmF1bHQKKwlpZiAoIW9wZW4gKEZPUk1BVCwg Ii9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzLyRldmVudC9mb3JtYXQiKSkgeworCQlw cmludCgiV0FSTklORzogRXZlbnQgJGV2ZW50IGZvcm1hdCBzdHJpbmcgbm90IGZvdW5kXG4iKTsK KwkJcmV0dXJuICRkZWZhdWx0OworCX0gZWxzZSB7CisJCW15ICRsaW5lOworCQl3aGlsZSAoIWVv ZihGT1JNQVQpKSB7CisJCQkkbGluZSA9IDxGT1JNQVQ+OworCQkJJGxpbmUgPX4gcy8sIFJFQy0+ LiovLzsKKwkJCWlmICgkbGluZSA9fiAvXnByaW50IGZtdDpccyIoLiopIi4qLykgeworCQkJCSRy ZWdleCA9ICQxOworCQkJCSRyZWdleCA9fiBzLyVzL1woWzAtOWEtekEtWnxfXSpcKS9nOworCQkJ CSRyZWdleCA9fiBzLyVwL1woWzAtOWEtZl0qXCkvZzsKKwkJCQkkcmVnZXggPX4gcy8lZC9cKFst MC05XSpcKS9nOworCQkJCSRyZWdleCA9fiBzLyVsZC9cKFstMC05XSpcKS9nOworCQkJCSRyZWdl eCA9fiBzLyVsdS9cKFswLTldKlwpL2c7CisJCQl9CisJCX0KKwl9CisKKwkjIENhbid0IGhhbmRs ZSB0aGUgcHJpbnRfZmxhZ3Mgc3R1ZmYgYnV0IGluIHRoZSBjb250ZXh0IG9mIHRoaXMKKwkjIHNj cmlwdCwgaXQgcmVhbGx5IGRvZXNuJ3QgbWF0dGVyCisJJHJlZ2V4ID1+IHMvXChSRUMuKlwpIFw/ IF9fcHJpbnRfZmxhZ3MuKi8vOworCisJIyBWZXJpZnkgZmllbGRzIGFyZSBpbiB0aGUgcmlnaHQg b3JkZXIKKwlteSAkdHVwbGU7CisJZm9yZWFjaCAkdHVwbGUgKHNwbGl0IC9ccy8sICRyZWdleCkg eworCQlteSAoJGtleSwgJHZhbHVlKSA9IHNwbGl0KC89LywgJHR1cGxlKTsKKwkJbXkgJGV4cGVj dGVkID0gc2hpZnQ7CisJCWlmICgka2V5IG5lICRleHBlY3RlZCkgeworCQkJcHJpbnQoIldBUk5J Tkc6IEZvcm1hdCBub3QgYXMgZXhwZWN0ZWQgZm9yIGV2ZW50ICRldmVudCAnJGtleScgIT0gJyRl eHBlY3RlZCdcbiIpOworCQkJJHJlZ2V4ID1+IHMvJGtleT1cKCguKilcKS8ka2V5PSQxLzsKKwkJ fQorCX0KKworCWlmIChkZWZpbmVkIHNoaWZ0KSB7CisJCWRpZSgiRmV3ZXIgZmllbGRzIHRoYW4g ZXhwZWN0ZWQgaW4gZm9ybWF0Iik7CisJfQorCisJcmV0dXJuICRyZWdleDsKK30KKworJHJlZ2V4 X2RpcmVjdF9iZWdpbiA9IGdlbmVyYXRlX3RyYWNlZXZlbnRfcmVnZXgoCisJCQkidm1zY2FuL21t X3Ztc2Nhbl9kaXJlY3RfcmVjbGFpbV9iZWdpbiIsCisJCQkkcmVnZXhfZGlyZWN0X2JlZ2luX2Rl ZmF1bHQsCisJCQkib3JkZXIiLCAibWF5X3dyaXRlcGFnZSIsCisJCQkiZ2ZwX2ZsYWdzIik7Cisk cmVnZXhfZGlyZWN0X2VuZCA9IGdlbmVyYXRlX3RyYWNlZXZlbnRfcmVnZXgoCisJCQkidm1zY2Fu L21tX3Ztc2Nhbl9kaXJlY3RfcmVjbGFpbV9lbmQiLAorCQkJJHJlZ2V4X2RpcmVjdF9lbmRfZGVm YXVsdCwKKwkJCSJucl9yZWNsYWltZWQiKTsKKyRyZWdleF9rc3dhcGRfd2FrZSA9IGdlbmVyYXRl X3RyYWNlZXZlbnRfcmVnZXgoCisJCQkidm1zY2FuL21tX3Ztc2Nhbl9rc3dhcGRfd2FrZSIsCisJ CQkkcmVnZXhfa3N3YXBkX3dha2VfZGVmYXVsdCwKKwkJCSJuaWQiLCAib3JkZXIiKTsKKyRyZWdl eF9rc3dhcGRfc2xlZXAgPSBnZW5lcmF0ZV90cmFjZWV2ZW50X3JlZ2V4KAorCQkJInZtc2Nhbi9t bV92bXNjYW5fa3N3YXBkX3NsZWVwIiwKKwkJCSRyZWdleF9rc3dhcGRfc2xlZXBfZGVmYXVsdCwK KwkJCSJuaWQiKTsKKyRyZWdleF93YWtldXBfa3N3YXBkID0gZ2VuZXJhdGVfdHJhY2VldmVudF9y ZWdleCgKKwkJCSJ2bXNjYW4vbW1fdm1zY2FuX3dha2V1cF9rc3dhcGQiLAorCQkJJHJlZ2V4X3dh a2V1cF9rc3dhcGRfZGVmYXVsdCwKKwkJCSJuaWQiLCAiemlkIiwgIm9yZGVyIik7CiskcmVnZXhf bHJ1X2lzb2xhdGUgPSBnZW5lcmF0ZV90cmFjZWV2ZW50X3JlZ2V4KAorCQkJInZtc2Nhbi9tbV92 bXNjYW5fbHJ1X2lzb2xhdGUiLAorCQkJJHJlZ2V4X2xydV9pc29sYXRlX2RlZmF1bHQsCisJCQki aXNvbGF0ZV9tb2RlIiwgIm9yZGVyIiwKKwkJCSJucl9yZXF1ZXN0ZWQiLCAibnJfc2Nhbm5lZCIs ICJucl90YWtlbiIsCisJCQkiY29udGlnX3Rha2VuIiwgImNvbnRpZ19kaXJ0eSIsICJjb250aWdf ZmFpbGVkIik7CiskcmVnZXhfbHJ1X3Nocmlua19pbmFjdGl2ZSA9IGdlbmVyYXRlX3RyYWNlZXZl bnRfcmVnZXgoCisJCQkidm1zY2FuL21tX3Ztc2Nhbl9scnVfc2hyaW5rX2luYWN0aXZlIiwKKwkJ CSRyZWdleF9scnVfc2hyaW5rX2luYWN0aXZlX2RlZmF1bHQsCisJCQkibmlkIiwgInppZCIsCisJ CQkibHJ1IiwKKwkJCSJucl9zY2FubmVkIiwgIm5yX3JlY2xhaW1lZCIsICJwcmlvcml0eSIpOwor JHJlZ2V4X2xydV9zaHJpbmtfYWN0aXZlID0gZ2VuZXJhdGVfdHJhY2VldmVudF9yZWdleCgKKwkJ CSJ2bXNjYW4vbW1fdm1zY2FuX2xydV9zaHJpbmtfYWN0aXZlIiwKKwkJCSRyZWdleF9scnVfc2hy aW5rX2FjdGl2ZV9kZWZhdWx0LAorCQkJIm5pZCIsICJ6aWQiLAorCQkJImxydSIsCisJCQkibnJf c2Nhbm5lZCIsICJucl9yb3RhdGVkIiwgInByaW9yaXR5Iik7CiskcmVnZXhfd3JpdGVwYWdlID0g Z2VuZXJhdGVfdHJhY2VldmVudF9yZWdleCgKKwkJCSJ2bXNjYW4vbW1fdm1zY2FuX3dyaXRlcGFn ZSIsCisJCQkkcmVnZXhfd3JpdGVwYWdlX2RlZmF1bHQsCisJCQkicGFnZSIsICJwZm4iLCAiZmxh Z3MiKTsKKworc3ViIHJlYWRfc3RhdGxpbmUoJCkgeworCW15ICRwaWQgPSAkX1swXTsKKwlteSAk c3RhdGxpbmU7CisKKwlpZiAob3BlbihTVEFULCAiL3Byb2MvJHBpZC9zdGF0IikpIHsKKwkJJHN0 YXRsaW5lID0gPFNUQVQ+OworCQljbG9zZShTVEFUKTsKKwl9CisKKwlpZiAoJHN0YXRsaW5lIGVx ICcnKSB7CisJCSRzdGF0bGluZSA9ICItMSAoVU5LTk9XTl9QUk9DRVNTX05BTUUpIFIgMCI7CisJ fQorCisJcmV0dXJuICRzdGF0bGluZTsKK30KKworc3ViIGd1ZXNzX3Byb2Nlc3NfcGlkKCQkKSB7 CisJbXkgJHBpZCA9ICRfWzBdOworCW15ICRzdGF0bGluZSA9ICRfWzFdOworCisJaWYgKCRwaWQg PT0gMCkgeworCQlyZXR1cm4gInN3YXBwZXItMCI7CisJfQorCisJaWYgKCRzdGF0bGluZSAhfiAv JHJlZ2V4X3N0YXRuYW1lL28pIHsKKwkJZGllKCJGYWlsZWQgdG8gbWF0aCBzdGF0IGxpbmUgZm9y IHByb2Nlc3MgbmFtZSA6OiAkc3RhdGxpbmUiKTsKKwl9CisJcmV0dXJuICIkMS0kcGlkIjsKK30K KworIyBDb252ZXJ0IHNlYy51c2VjIHRpbWVzdGFtcCBmb3JtYXQKK3N1YiB0aW1lc3RhbXBfdG9f bXMoJCkgeworCW15ICR0aW1lc3RhbXAgPSAkX1swXTsKKworCW15ICgkc2VjLCAkdXNlYykgPSBz cGxpdCAoL1wuLywgJHRpbWVzdGFtcCk7CisJcmV0dXJuICgkc2VjICogMTAwMCkgKyAoJHVzZWMg LyAxMDAwKTsKK30KKworc3ViIHByb2Nlc3NfZXZlbnRzIHsKKwlteSAkdHJhY2VldmVudDsKKwlt eSAkcHJvY2Vzc19waWQ7CisJbXkgJGNwdXM7CisJbXkgJHRpbWVzdGFtcDsKKwlteSAkdHJhY2Vw b2ludDsKKwlteSAkZGV0YWlsczsKKwlteSAkc3RhdGxpbmU7CisKKwkjIFJlYWQgZWFjaCBsaW5l IG9mIHRoZSBldmVudCBsb2cKK0VWRU5UX1BST0NFU1M6CisJd2hpbGUgKCR0cmFjZWV2ZW50ID0g PFNURElOPikgeworCQlpZiAoJHRyYWNlZXZlbnQgPX4gLyRyZWdleF90cmFjZWV2ZW50L28pIHsK KwkJCSRwcm9jZXNzX3BpZCA9ICQxOworCQkJJHRpbWVzdGFtcCA9ICQzOworCQkJJHRyYWNlcG9p bnQgPSAkNDsKKworCQkJJHByb2Nlc3NfcGlkID1+IC8oLiopLShbMC05XSopJC87CisJCQlteSAk cHJvY2VzcyA9ICQxOworCQkJbXkgJHBpZCA9ICQyOworCisJCQlpZiAoJHByb2Nlc3MgZXEgIiIp IHsKKwkJCQkkcHJvY2VzcyA9ICRsYXN0X3Byb2NtYXB7JHBpZH07CisJCQkJJHByb2Nlc3NfcGlk ID0gIiRwcm9jZXNzLSRwaWQiOworCQkJfQorCQkJJGxhc3RfcHJvY21hcHskcGlkfSA9ICRwcm9j ZXNzOworCisJCQlpZiAoJG9wdF9yZWFkX3Byb2NzdGF0KSB7CisJCQkJJHN0YXRsaW5lID0gcmVh ZF9zdGF0bGluZSgkcGlkKTsKKwkJCQlpZiAoJG9wdF9yZWFkX3Byb2NzdGF0ICYmICRwcm9jZXNz IGVxICcnKSB7CisJCQkJCSRwcm9jZXNzX3BpZCA9IGd1ZXNzX3Byb2Nlc3NfcGlkKCRwaWQsICRz dGF0bGluZSk7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJbmV4dDsKKwkJfQorCisJCSMg UGVybCBTd2l0Y2goKSBzdWNrcyBtYWpvcmx5CisJCWlmICgkdHJhY2Vwb2ludCBlcSAibW1fdm1z Y2FuX2RpcmVjdF9yZWNsYWltX2JlZ2luIikgeworCQkJJHRpbWVzdGFtcCA9IHRpbWVzdGFtcF90 b19tcygkdGltZXN0YW1wKTsKKwkJCSRwZXJwcm9jZXNzcGlkeyRwcm9jZXNzX3BpZH0tPntNTV9W TVNDQU5fRElSRUNUX1JFQ0xBSU1fQkVHSU59Kys7CisJCQkkcGVycHJvY2Vzc3BpZHskcHJvY2Vz c19waWR9LT57U1RBVEVfRElSRUNUX0JFR0lOfSA9ICR0aW1lc3RhbXA7CisKKwkJCSRkZXRhaWxz ID0gJDU7CisJCQlpZiAoJGRldGFpbHMgIX4gLyRyZWdleF9kaXJlY3RfYmVnaW4vbykgeworCQkJ CXByaW50ICJXQVJOSU5HOiBGYWlsZWQgdG8gcGFyc2UgbW1fdm1zY2FuX2RpcmVjdF9yZWNsYWlt X2JlZ2luIGFzIGV4cGVjdGVkXG4iOworCQkJCXByaW50ICIgICAgICAgICAkZGV0YWlsc1xuIjsK KwkJCQlwcmludCAiICAgICAgICAgJHJlZ2V4X2RpcmVjdF9iZWdpblxuIjsKKwkJCQluZXh0Owor CQkJfQorCQkJbXkgJG9yZGVyID0gJDE7CisJCQkkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9 LT57TU1fVk1TQ0FOX0RJUkVDVF9SRUNMQUlNX0JFR0lOX1BFUk9SREVSfVskb3JkZXJdKys7CisJ CQkkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57U1RBVEVfRElSRUNUX09SREVSfSA9ICRv cmRlcjsKKwkJfSBlbHNpZiAoJHRyYWNlcG9pbnQgZXEgIm1tX3Ztc2Nhbl9kaXJlY3RfcmVjbGFp bV9lbmQiKSB7CisJCQkjIENvdW50IHRoZSBldmVudCBpdHNlbGYKKwkJCW15ICRpbmRleCA9ICRw ZXJwcm9jZXNzcGlkeyRwcm9jZXNzX3BpZH0tPntNTV9WTVNDQU5fRElSRUNUX1JFQ0xBSU1fRU5E fTsKKwkJCSRwZXJwcm9jZXNzcGlkeyRwcm9jZXNzX3BpZH0tPntNTV9WTVNDQU5fRElSRUNUX1JF Q0xBSU1fRU5EfSsrOworCisJCQkjIFJlY29yZCBob3cgbG9uZyBkaXJlY3QgcmVjbGFpbSB0b29r IHRoaXMgdGltZQorCQkJaWYgKGRlZmluZWQgJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+ e1NUQVRFX0RJUkVDVF9CRUdJTn0pIHsKKwkJCQkkdGltZXN0YW1wID0gdGltZXN0YW1wX3RvX21z KCR0aW1lc3RhbXApOworCQkJCW15ICRvcmRlciA9ICRwZXJwcm9jZXNzcGlkeyRwcm9jZXNzX3Bp ZH0tPntTVEFURV9ESVJFQ1RfT1JERVJ9OworCQkJCW15ICRsYXRlbmN5ID0gKCR0aW1lc3RhbXAg LSAkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57U1RBVEVfRElSRUNUX0JFR0lOfSk7CisJ CQkJJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e0hJR0hfRElSRUNUX1JFQ0xBSU1fTEFU RU5DWX1bJGluZGV4XSA9ICIkb3JkZXItJGxhdGVuY3kiOworCQkJfQorCQl9IGVsc2lmICgkdHJh Y2Vwb2ludCBlcSAibW1fdm1zY2FuX2tzd2FwZF93YWtlIikgeworCQkJJGRldGFpbHMgPSAkNTsK KwkJCWlmICgkZGV0YWlscyAhfiAvJHJlZ2V4X2tzd2FwZF93YWtlL28pIHsKKwkJCQlwcmludCAi V0FSTklORzogRmFpbGVkIHRvIHBhcnNlIG1tX3Ztc2Nhbl9rc3dhcGRfd2FrZSBhcyBleHBlY3Rl ZFxuIjsKKwkJCQlwcmludCAiICAgICAgICAgJGRldGFpbHNcbiI7CisJCQkJcHJpbnQgIiAgICAg ICAgICRyZWdleF9rc3dhcGRfd2FrZVxuIjsKKwkJCQluZXh0OworCQkJfQorCisJCQlteSAkb3Jk ZXIgPSAkMjsKKwkJCSRwZXJwcm9jZXNzcGlkeyRwcm9jZXNzX3BpZH0tPntTVEFURV9LU1dBUERf T1JERVJ9ID0gJG9yZGVyOworCQkJaWYgKCEkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57 U1RBVEVfS1NXQVBEX0JFR0lOfSkgeworCQkJCSR0aW1lc3RhbXAgPSB0aW1lc3RhbXBfdG9fbXMo JHRpbWVzdGFtcCk7CisJCQkJJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e01NX1ZNU0NB Tl9LU1dBUERfV0FLRX0rKzsKKwkJCQkkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57U1RB VEVfS1NXQVBEX0JFR0lOfSA9ICR0aW1lc3RhbXA7CisJCQkJJHBlcnByb2Nlc3NwaWR7JHByb2Nl c3NfcGlkfS0+e01NX1ZNU0NBTl9LU1dBUERfV0FLRV9QRVJPUkRFUn1bJG9yZGVyXSsrOworCQkJ fSBlbHNlIHsKKwkJCQkkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57SElHSF9LU1dBUERf UkVXQUtFVVB9Kys7CisJCQkJJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e0hJR0hfS1NX QVBEX1JFV0FLRVVQX1BFUk9SREVSfVskb3JkZXJdKys7CisJCQl9CisJCX0gZWxzaWYgKCR0cmFj ZXBvaW50IGVxICJtbV92bXNjYW5fa3N3YXBkX3NsZWVwIikgeworCisJCQkjIENvdW50IHRoZSBl dmVudCBpdHNlbGYKKwkJCW15ICRpbmRleCA9ICRwZXJwcm9jZXNzcGlkeyRwcm9jZXNzX3BpZH0t PntNTV9WTVNDQU5fS1NXQVBEX1NMRUVQfTsKKwkJCSRwZXJwcm9jZXNzcGlkeyRwcm9jZXNzX3Bp ZH0tPntNTV9WTVNDQU5fS1NXQVBEX1NMRUVQfSsrOworCisJCQkjIFJlY29yZCBob3cgbG9uZyBr c3dhcGQgd2FzIGF3YWtlCisJCQkkdGltZXN0YW1wID0gdGltZXN0YW1wX3RvX21zKCR0aW1lc3Rh bXApOworCQkJbXkgJG9yZGVyID0gJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e1NUQVRF X0tTV0FQRF9PUkRFUn07CisJCQlteSAkbGF0ZW5jeSA9ICgkdGltZXN0YW1wIC0gJHBlcnByb2Nl c3NwaWR7JHByb2Nlc3NfcGlkfS0+e1NUQVRFX0tTV0FQRF9CRUdJTn0pOworCQkJJHBlcnByb2Nl c3NwaWR7JHByb2Nlc3NfcGlkfS0+e0hJR0hfS1NXQVBEX0xBVEVOQ1l9WyRpbmRleF0gPSAiJG9y ZGVyLSRsYXRlbmN5IjsKKwkJCSRwZXJwcm9jZXNzcGlkeyRwcm9jZXNzX3BpZH0tPntTVEFURV9L U1dBUERfQkVHSU59ID0gMDsKKwkJfSBlbHNpZiAoJHRyYWNlcG9pbnQgZXEgIm1tX3Ztc2Nhbl93 YWtldXBfa3N3YXBkIikgeworCQkJJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e01NX1ZN U0NBTl9XQUtFVVBfS1NXQVBEfSsrOworCisJCQkkZGV0YWlscyA9ICQ1OworCQkJaWYgKCRkZXRh aWxzICF+IC8kcmVnZXhfd2FrZXVwX2tzd2FwZC9vKSB7CisJCQkJcHJpbnQgIldBUk5JTkc6IEZh aWxlZCB0byBwYXJzZSBtbV92bXNjYW5fd2FrZXVwX2tzd2FwZCBhcyBleHBlY3RlZFxuIjsKKwkJ CQlwcmludCAiICAgICAgICAgJGRldGFpbHNcbiI7CisJCQkJcHJpbnQgIiAgICAgICAgICRyZWdl eF93YWtldXBfa3N3YXBkXG4iOworCQkJCW5leHQ7CisJCQl9CisJCQlteSAkb3JkZXIgPSAkMzsK KwkJCSRwZXJwcm9jZXNzcGlkeyRwcm9jZXNzX3BpZH0tPntNTV9WTVNDQU5fV0FLRVVQX0tTV0FQ RF9QRVJPUkRFUn1bJG9yZGVyXSsrOworCQl9IGVsc2lmICgkdHJhY2Vwb2ludCBlcSAibW1fdm1z Y2FuX2xydV9pc29sYXRlIikgeworCQkJJGRldGFpbHMgPSAkNTsKKwkJCWlmICgkZGV0YWlscyAh fiAvJHJlZ2V4X2xydV9pc29sYXRlL28pIHsKKwkJCQlwcmludCAiV0FSTklORzogRmFpbGVkIHRv IHBhcnNlIG1tX3Ztc2Nhbl9scnVfaXNvbGF0ZSBhcyBleHBlY3RlZFxuIjsKKwkJCQlwcmludCAi ICAgICAgICAgJGRldGFpbHNcbiI7CisJCQkJcHJpbnQgIiAgICAgICAgICRyZWdleF9scnVfaXNv bGF0ZS9vXG4iOworCQkJCW5leHQ7CisJCQl9CisJCQlteSAkbnJfc2Nhbm5lZCA9ICQ0OworCQkJ bXkgJG5yX2NvbnRpZ19kaXJ0eSA9ICQ3OworCQkJJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlk fS0+e0hJR0hfTlJfU0NBTk5FRH0gKz0gJG5yX3NjYW5uZWQ7CisJCQkkcGVycHJvY2Vzc3BpZHsk cHJvY2Vzc19waWR9LT57SElHSF9OUl9DT05USUdfRElSVFl9ICs9ICRucl9jb250aWdfZGlydHk7 CisJCX0gZWxzaWYgKCR0cmFjZXBvaW50IGVxICJtbV92bXNjYW5fd3JpdGVwYWdlIikgeworCQkJ JGRldGFpbHMgPSAkNTsKKwkJCWlmICgkZGV0YWlscyAhfiAvJHJlZ2V4X3dyaXRlcGFnZS9vKSB7 CisJCQkJcHJpbnQgIldBUk5JTkc6IEZhaWxlZCB0byBwYXJzZSBtbV92bXNjYW5fd3JpdGVwYWdl IGFzIGV4cGVjdGVkXG4iOworCQkJCXByaW50ICIgICAgICAgICAkZGV0YWlsc1xuIjsKKwkJCQlw cmludCAiICAgICAgICAgJHJlZ2V4X3dyaXRlcGFnZVxuIjsKKwkJCQluZXh0OworCQkJfQorCisJ CQlteSAkZmxhZ3MgPSAkMzsKKwkJCW15ICRmaWxlID0gMDsKKwkJCW15ICRzeW5jX2lvID0gMDsK KwkJCWlmICgkZmxhZ3MgPX4gL1JFQ0xBSU1fV0JfRklMRS8pIHsKKwkJCQkkZmlsZSA9IDE7CisJ CQl9CisJCQlpZiAoJGZsYWdzID1+IC9SRUNMQUlNX1dCX1NZTkMvKSB7CisJCQkJJHN5bmNfaW8g PSAxOworCQkJfQorCQkJaWYgKCRzeW5jX2lvKSB7CisJCQkJaWYgKCRmaWxlKSB7CisJCQkJCSRw ZXJwcm9jZXNzcGlkeyRwcm9jZXNzX3BpZH0tPntNTV9WTVNDQU5fV1JJVEVQQUdFX0ZJTEVfU1lO Q30rKzsKKwkJCQl9IGVsc2UgeworCQkJCQkkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57 TU1fVk1TQ0FOX1dSSVRFUEFHRV9BTk9OX1NZTkN9Kys7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJ CQlpZiAoJGZpbGUpIHsKKwkJCQkJJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e01NX1ZN U0NBTl9XUklURVBBR0VfRklMRV9BU1lOQ30rKzsKKwkJCQl9IGVsc2UgeworCQkJCQkkcGVycHJv Y2Vzc3BpZHskcHJvY2Vzc19waWR9LT57TU1fVk1TQ0FOX1dSSVRFUEFHRV9BTk9OX0FTWU5DfSsr OworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCSRwZXJwcm9jZXNzcGlkeyRwcm9jZXNzX3Bp ZH0tPntFVkVOVF9VTktOT1dOfSsrOworCQl9CisKKwkJaWYgKCRzaWdpbnRfcGVuZGluZykgewor CQkJbGFzdCBFVkVOVF9QUk9DRVNTOworCQl9CisJfQorfQorCitzdWIgZHVtcF9zdGF0cyB7CisJ bXkgJGhhc2hyZWYgPSBzaGlmdDsKKwlteSAlc3RhdHMgPSAlJGhhc2hyZWY7CisKKwkjIER1bXAg cGVyLXByb2Nlc3Mgc3RhdHMKKwlteSAkcHJvY2Vzc19waWQ7CisJbXkgJG1heF9zdHJsZW4gPSAw OworCisJIyBHZXQgdGhlIG1heGltdW0gcHJvY2VzcyBuYW1lCisJZm9yZWFjaCAkcHJvY2Vzc19w aWQgKGtleXMgJXBlcnByb2Nlc3NwaWQpIHsKKwkJbXkgJGxlbiA9IGxlbmd0aCgkcHJvY2Vzc19w aWQpOworCQlpZiAoJGxlbiA+ICRtYXhfc3RybGVuKSB7CisJCQkkbWF4X3N0cmxlbiA9ICRsZW47 CisJCX0KKwl9CisJJG1heF9zdHJsZW4gKz0gMjsKKworCSMgV29yayBvdXQgbGF0ZW5jaWVzCisJ cHJpbnRmKCJcbiIpIGlmICEkb3B0X2lnbm9yZXBpZDsKKwlwcmludGYoIlJlY2xhaW0gbGF0ZW5j aWVzIGV4cHJlc3NlZCBhcyBvcmRlci1sYXRlbmN5X2luX21zXG4iKSBpZiAhJG9wdF9pZ25vcmVw aWQ7CisJZm9yZWFjaCAkcHJvY2Vzc19waWQgKGtleXMgJXN0YXRzKSB7CisKKwkJaWYgKCEkc3Rh dHN7JHByb2Nlc3NfcGlkfS0+e0hJR0hfRElSRUNUX1JFQ0xBSU1fTEFURU5DWX1bMF0gJiYKKwkJ CQkhJHN0YXRzeyRwcm9jZXNzX3BpZH0tPntISUdIX0tTV0FQRF9MQVRFTkNZfVswXSkgeworCQkJ bmV4dDsKKwkJfQorCisJCXByaW50ZiAiJS0iIC4gJG1heF9zdHJsZW4gLiAicyAiLCAkcHJvY2Vz c19waWQgaWYgISRvcHRfaWdub3JlcGlkOworCQlteSAkaW5kZXggPSAwOworCQl3aGlsZSAoZGVm aW5lZCAkc3RhdHN7JHByb2Nlc3NfcGlkfS0+e0hJR0hfRElSRUNUX1JFQ0xBSU1fTEFURU5DWX1b JGluZGV4XSB8fAorCQkJZGVmaW5lZCAkc3RhdHN7JHByb2Nlc3NfcGlkfS0+e0hJR0hfS1NXQVBE X0xBVEVOQ1l9WyRpbmRleF0pIHsKKworCQkJaWYgKCRzdGF0c3skcHJvY2Vzc19waWR9LT57SElH SF9ESVJFQ1RfUkVDTEFJTV9MQVRFTkNZfVskaW5kZXhdKSB7CisJCQkJcHJpbnRmKCIlcyAiLCAk c3RhdHN7JHByb2Nlc3NfcGlkfS0+e0hJR0hfRElSRUNUX1JFQ0xBSU1fTEFURU5DWX1bJGluZGV4 XSkgaWYgISRvcHRfaWdub3JlcGlkOworCQkJCW15ICgkZHVtbXksICRsYXRlbmN5KSA9IHNwbGl0 KC8tLywgJHN0YXRzeyRwcm9jZXNzX3BpZH0tPntISUdIX0RJUkVDVF9SRUNMQUlNX0xBVEVOQ1l9 WyRpbmRleF0pOworCQkJCSR0b3RhbF9kaXJlY3RfbGF0ZW5jeSArPSAkbGF0ZW5jeTsKKwkJCX0g ZWxzZSB7CisJCQkJcHJpbnRmKCIlcyAiLCAkc3RhdHN7JHByb2Nlc3NfcGlkfS0+e0hJR0hfS1NX QVBEX0xBVEVOQ1l9WyRpbmRleF0pIGlmICEkb3B0X2lnbm9yZXBpZDsKKwkJCQlteSAoJGR1bW15 LCAkbGF0ZW5jeSkgPSBzcGxpdCgvLS8sICRzdGF0c3skcHJvY2Vzc19waWR9LT57SElHSF9LU1dB UERfTEFURU5DWX1bJGluZGV4XSk7CisJCQkJJHRvdGFsX2tzd2FwZF9sYXRlbmN5ICs9ICRsYXRl bmN5OworCQkJfQorCQkJJGluZGV4Kys7CisJCX0KKwkJcHJpbnQgIlxuIiBpZiAhJG9wdF9pZ25v cmVwaWQ7CisJfQorCisJIyBQcmludCBvdXQgcHJvY2VzcyBhY3Rpdml0eQorCXByaW50ZigiXG4i KTsKKwlwcmludGYoIiUtIiAuICRtYXhfc3RybGVuIC4gInMgJThzICUxMHMgICAlOHMgICAlOHMg JThzICU4cyAlOHNcbiIsICJQcm9jZXNzIiwgIkRpcmVjdCIsICAiV29rZXVwIiwgIlBhZ2VzIiwg ICAiUGFnZXMiLCAgICJQYWdlcyIsICAgICAiVGltZSIpOworCXByaW50ZigiJS0iIC4gJG1heF9z dHJsZW4gLiAicyAlOHMgJTEwcyAgICU4cyAgICU4cyAlOHMgJThzICU4c1xuIiwgImRldGFpbHMi LCAiUmNsbXMiLCAgICJLc3dhcGQiLCAiU2Nhbm5lZCIsICJTeW5jLUlPIiwgIkFTeW5jLUlPIiwg ICJTdGFsbGVkIik7CisJZm9yZWFjaCAkcHJvY2Vzc19waWQgKGtleXMgJXN0YXRzKSB7CisKKwkJ aWYgKCEkc3RhdHN7JHByb2Nlc3NfcGlkfS0+e01NX1ZNU0NBTl9ESVJFQ1RfUkVDTEFJTV9CRUdJ Tn0pIHsKKwkJCW5leHQ7CisJCX0KKworCQkkdG90YWxfZGlyZWN0X3JlY2xhaW0gKz0gJHN0YXRz eyRwcm9jZXNzX3BpZH0tPntNTV9WTVNDQU5fRElSRUNUX1JFQ0xBSU1fQkVHSU59OworCQkkdG90 YWxfd2FrZXVwX2tzd2FwZCArPSAkc3RhdHN7JHByb2Nlc3NfcGlkfS0+e01NX1ZNU0NBTl9XQUtF VVBfS1NXQVBEfTsKKwkJJHRvdGFsX2RpcmVjdF9ucl9zY2FubmVkICs9ICRzdGF0c3skcHJvY2Vz c19waWR9LT57SElHSF9OUl9TQ0FOTkVEfTsKKwkJJHRvdGFsX2RpcmVjdF93cml0ZXBhZ2VfZmls ZV9zeW5jICs9ICRzdGF0c3skcHJvY2Vzc19waWR9LT57TU1fVk1TQ0FOX1dSSVRFUEFHRV9GSUxF X1NZTkN9OworCQkkdG90YWxfZGlyZWN0X3dyaXRlcGFnZV9hbm9uX3N5bmMgKz0gJHN0YXRzeyRw cm9jZXNzX3BpZH0tPntNTV9WTVNDQU5fV1JJVEVQQUdFX0FOT05fU1lOQ307CisJCSR0b3RhbF9k aXJlY3Rfd3JpdGVwYWdlX2ZpbGVfYXN5bmMgKz0gJHN0YXRzeyRwcm9jZXNzX3BpZH0tPntNTV9W TVNDQU5fV1JJVEVQQUdFX0ZJTEVfQVNZTkN9OworCisJCSR0b3RhbF9kaXJlY3Rfd3JpdGVwYWdl X2Fub25fYXN5bmMgKz0gJHN0YXRzeyRwcm9jZXNzX3BpZH0tPntNTV9WTVNDQU5fV1JJVEVQQUdF X0FOT05fQVNZTkN9OworCisJCW15ICRpbmRleCA9IDA7CisJCW15ICR0aGlzX3JlY2xhaW1fZGVs YXkgPSAwOworCQl3aGlsZSAoZGVmaW5lZCAkc3RhdHN7JHByb2Nlc3NfcGlkfS0+e0hJR0hfRElS RUNUX1JFQ0xBSU1fTEFURU5DWX1bJGluZGV4XSkgeworCQkJIG15ICgkZHVtbXksICRsYXRlbmN5 KSA9IHNwbGl0KC8tLywgJHN0YXRzeyRwcm9jZXNzX3BpZH0tPntISUdIX0RJUkVDVF9SRUNMQUlN X0xBVEVOQ1l9WyRpbmRleF0pOworCQkJJHRoaXNfcmVjbGFpbV9kZWxheSArPSAkbGF0ZW5jeTsK KwkJCSRpbmRleCsrOworCQl9CisKKwkJcHJpbnRmKCIlLSIgLiAkbWF4X3N0cmxlbiAuICJzICU4 ZCAlMTBkICAgJTh1ICAgJTh1ICU4dSAlOC4zZiIsCisJCQkkcHJvY2Vzc19waWQsCisJCQkkc3Rh dHN7JHByb2Nlc3NfcGlkfS0+e01NX1ZNU0NBTl9ESVJFQ1RfUkVDTEFJTV9CRUdJTn0sCisJCQkk c3RhdHN7JHByb2Nlc3NfcGlkfS0+e01NX1ZNU0NBTl9XQUtFVVBfS1NXQVBEfSwKKwkJCSRzdGF0 c3skcHJvY2Vzc19waWR9LT57SElHSF9OUl9TQ0FOTkVEfSwKKwkJCSRzdGF0c3skcHJvY2Vzc19w aWR9LT57TU1fVk1TQ0FOX1dSSVRFUEFHRV9GSUxFX1NZTkN9ICsgJHN0YXRzeyRwcm9jZXNzX3Bp ZH0tPntNTV9WTVNDQU5fV1JJVEVQQUdFX0FOT05fU1lOQ30sCisJCQkkc3RhdHN7JHByb2Nlc3Nf cGlkfS0+e01NX1ZNU0NBTl9XUklURVBBR0VfRklMRV9BU1lOQ30gKyAkc3RhdHN7JHByb2Nlc3Nf cGlkfS0+e01NX1ZNU0NBTl9XUklURVBBR0VfQU5PTl9BU1lOQ30sCisJCQkkdGhpc19yZWNsYWlt X2RlbGF5IC8gMTAwMCk7CisKKwkJaWYgKCRzdGF0c3skcHJvY2Vzc19waWR9LT57TU1fVk1TQ0FO X0RJUkVDVF9SRUNMQUlNX0JFR0lOfSkgeworCQkJcHJpbnQgIiAgICAgICI7CisJCQlmb3IgKG15 ICRvcmRlciA9IDA7ICRvcmRlciA8IDIwOyAkb3JkZXIrKykgeworCQkJCW15ICRjb3VudCA9ICRz dGF0c3skcHJvY2Vzc19waWR9LT57TU1fVk1TQ0FOX0RJUkVDVF9SRUNMQUlNX0JFR0lOX1BFUk9S REVSfVskb3JkZXJdOworCQkJCWlmICgkY291bnQgIT0gMCkgeworCQkJCQlwcmludCAiZGlyZWN0 LSRvcmRlcj0kY291bnQgIjsKKwkJCQl9CisJCQl9CisJCX0KKwkJaWYgKCRzdGF0c3skcHJvY2Vz c19waWR9LT57TU1fVk1TQ0FOX1dBS0VVUF9LU1dBUER9KSB7CisJCQlwcmludCAiICAgICAgIjsK KwkJCWZvciAobXkgJG9yZGVyID0gMDsgJG9yZGVyIDwgMjA7ICRvcmRlcisrKSB7CisJCQkJbXkg JGNvdW50ID0gJHN0YXRzeyRwcm9jZXNzX3BpZH0tPntNTV9WTVNDQU5fV0FLRVVQX0tTV0FQRF9Q RVJPUkRFUn1bJG9yZGVyXTsKKwkJCQlpZiAoJGNvdW50ICE9IDApIHsKKwkJCQkJcHJpbnQgIndh a2V1cC0kb3JkZXI9JGNvdW50ICI7CisJCQkJfQorCQkJfQorCQl9CisJCWlmICgkc3RhdHN7JHBy b2Nlc3NfcGlkfS0+e0hJR0hfTlJfQ09OVElHX0RJUlRZfSkgeworCQkJcHJpbnQgIiAgICAgICI7 CisJCQlteSAkY291bnQgPSAkc3RhdHN7JHByb2Nlc3NfcGlkfS0+e0hJR0hfTlJfQ09OVElHX0RJ UlRZfTsKKwkJCWlmICgkY291bnQgIT0gMCkgeworCQkJCXByaW50ICJjb250aWctZGlydHk9JGNv dW50ICI7CisJCQl9CisJCX0KKworCQlwcmludCAiXG4iOworCX0KKworCSMgUHJpbnQgb3V0IGtz d2FwZCBhY3Rpdml0eQorCXByaW50ZigiXG4iKTsKKwlwcmludGYoIiUtIiAuICRtYXhfc3RybGVu IC4gInMgJThzICUxMHMgICAlOHMgICAlOHMgJThzICU4c1xuIiwgIktzd2FwZCIsICAgIktzd2Fw ZCIsICAiT3JkZXIiLCAgICAgIlBhZ2VzIiwgICAiUGFnZXMiLCAgIlBhZ2VzIik7CisJcHJpbnRm KCIlLSIgLiAkbWF4X3N0cmxlbiAuICJzICU4cyAlMTBzICAgJThzICAgJThzICU4cyAlOHNcbiIs ICJJbnN0YW5jZSIsICJXYWtldXBzIiwgIlJlLXdha2V1cCIsICJTY2FubmVkIiwgIlN5bmMtSU8i LCAiQVN5bmMtSU8iKTsKKwlmb3JlYWNoICRwcm9jZXNzX3BpZCAoa2V5cyAlc3RhdHMpIHsKKwor CQlpZiAoISRzdGF0c3skcHJvY2Vzc19waWR9LT57TU1fVk1TQ0FOX0tTV0FQRF9XQUtFfSkgewor CQkJbmV4dDsKKwkJfQorCisJCSR0b3RhbF9rc3dhcGRfd2FrZSArPSAkc3RhdHN7JHByb2Nlc3Nf cGlkfS0+e01NX1ZNU0NBTl9LU1dBUERfV0FLRX07CisJCSR0b3RhbF9rc3dhcGRfbnJfc2Nhbm5l ZCArPSAkc3RhdHN7JHByb2Nlc3NfcGlkfS0+e0hJR0hfTlJfU0NBTk5FRH07CisJCSR0b3RhbF9r c3dhcGRfd3JpdGVwYWdlX2ZpbGVfc3luYyArPSAkc3RhdHN7JHByb2Nlc3NfcGlkfS0+e01NX1ZN U0NBTl9XUklURVBBR0VfRklMRV9TWU5DfTsKKwkJJHRvdGFsX2tzd2FwZF93cml0ZXBhZ2VfYW5v bl9zeW5jICs9ICRzdGF0c3skcHJvY2Vzc19waWR9LT57TU1fVk1TQ0FOX1dSSVRFUEFHRV9BTk9O X1NZTkN9OworCQkkdG90YWxfa3N3YXBkX3dyaXRlcGFnZV9maWxlX2FzeW5jICs9ICRzdGF0c3sk cHJvY2Vzc19waWR9LT57TU1fVk1TQ0FOX1dSSVRFUEFHRV9GSUxFX0FTWU5DfTsKKwkJJHRvdGFs X2tzd2FwZF93cml0ZXBhZ2VfYW5vbl9hc3luYyArPSAkc3RhdHN7JHByb2Nlc3NfcGlkfS0+e01N X1ZNU0NBTl9XUklURVBBR0VfQU5PTl9BU1lOQ307CisKKwkJcHJpbnRmKCIlLSIgLiAkbWF4X3N0 cmxlbiAuICJzICU4ZCAlMTBkICAgJTh1ICAgJThpICU4dSIsCisJCQkkcHJvY2Vzc19waWQsCisJ CQkkc3RhdHN7JHByb2Nlc3NfcGlkfS0+e01NX1ZNU0NBTl9LU1dBUERfV0FLRX0sCisJCQkkc3Rh dHN7JHByb2Nlc3NfcGlkfS0+e0hJR0hfS1NXQVBEX1JFV0FLRVVQfSwKKwkJCSRzdGF0c3skcHJv Y2Vzc19waWR9LT57SElHSF9OUl9TQ0FOTkVEfSwKKwkJCSRzdGF0c3skcHJvY2Vzc19waWR9LT57 TU1fVk1TQ0FOX1dSSVRFUEFHRV9GSUxFX1NZTkN9ICsgJHN0YXRzeyRwcm9jZXNzX3BpZH0tPntN TV9WTVNDQU5fV1JJVEVQQUdFX0FOT05fU1lOQ30sCisJCQkkc3RhdHN7JHByb2Nlc3NfcGlkfS0+ e01NX1ZNU0NBTl9XUklURVBBR0VfRklMRV9BU1lOQ30gKyAkc3RhdHN7JHByb2Nlc3NfcGlkfS0+ e01NX1ZNU0NBTl9XUklURVBBR0VfQU5PTl9BU1lOQ30pOworCisJCWlmICgkc3RhdHN7JHByb2Nl c3NfcGlkfS0+e01NX1ZNU0NBTl9LU1dBUERfV0FLRX0pIHsKKwkJCXByaW50ICIgICAgICAiOwor CQkJZm9yIChteSAkb3JkZXIgPSAwOyAkb3JkZXIgPCAyMDsgJG9yZGVyKyspIHsKKwkJCQlteSAk Y291bnQgPSAkc3RhdHN7JHByb2Nlc3NfcGlkfS0+e01NX1ZNU0NBTl9LU1dBUERfV0FLRV9QRVJP UkRFUn1bJG9yZGVyXTsKKwkJCQlpZiAoJGNvdW50ICE9IDApIHsKKwkJCQkJcHJpbnQgIndha2Ut JG9yZGVyPSRjb3VudCAiOworCQkJCX0KKwkJCX0KKwkJfQorCQlpZiAoJHN0YXRzeyRwcm9jZXNz X3BpZH0tPntISUdIX0tTV0FQRF9SRVdBS0VVUH0pIHsKKwkJCXByaW50ICIgICAgICAiOworCQkJ Zm9yIChteSAkb3JkZXIgPSAwOyAkb3JkZXIgPCAyMDsgJG9yZGVyKyspIHsKKwkJCQlteSAkY291 bnQgPSAkc3RhdHN7JHByb2Nlc3NfcGlkfS0+e0hJR0hfS1NXQVBEX1JFV0FLRVVQX1BFUk9SREVS fVskb3JkZXJdOworCQkJCWlmICgkY291bnQgIT0gMCkgeworCQkJCQlwcmludCAicmV3YWtlLSRv cmRlcj0kY291bnQgIjsKKwkJCQl9CisJCQl9CisJCX0KKwkJcHJpbnRmKCJcbiIpOworCX0KKwor CSMgUHJpbnQgb3V0IHN1bW1hcmllcworCSR0b3RhbF9kaXJlY3RfbGF0ZW5jeSAvPSAxMDAwOwor CSR0b3RhbF9rc3dhcGRfbGF0ZW5jeSAvPSAxMDAwOworCXByaW50ICJcblN1bW1hcnlcbiI7CisJ cHJpbnQgIkRpcmVjdCByZWNsYWltczogICAgIAkJCSR0b3RhbF9kaXJlY3RfcmVjbGFpbVxuIjsK KwlwcmludCAiRGlyZWN0IHJlY2xhaW0gcGFnZXMgc2Nhbm5lZDoJCSR0b3RhbF9kaXJlY3RfbnJf c2Nhbm5lZFxuIjsKKwlwcmludCAiRGlyZWN0IHJlY2xhaW0gd3JpdGUgZmlsZSBzeW5jIEkvTzoJ JHRvdGFsX2RpcmVjdF93cml0ZXBhZ2VfZmlsZV9zeW5jXG4iOworCXByaW50ICJEaXJlY3QgcmVj bGFpbSB3cml0ZSBhbm9uIHN5bmMgSS9POgkkdG90YWxfZGlyZWN0X3dyaXRlcGFnZV9hbm9uX3N5 bmNcbiI7CisJcHJpbnQgIkRpcmVjdCByZWNsYWltIHdyaXRlIGZpbGUgYXN5bmMgSS9POgkkdG90 YWxfZGlyZWN0X3dyaXRlcGFnZV9maWxlX2FzeW5jXG4iOworCXByaW50ICJEaXJlY3QgcmVjbGFp bSB3cml0ZSBhbm9uIGFzeW5jIEkvTzoJJHRvdGFsX2RpcmVjdF93cml0ZXBhZ2VfYW5vbl9hc3lu Y1xuIjsKKwlwcmludCAiV2FrZSBrc3dhcGQgcmVxdWVzdHM6CQkJJHRvdGFsX3dha2V1cF9rc3dh cGRcbiI7CisJcHJpbnRmICJUaW1lIHN0YWxsZWQgZGlyZWN0IHJlY2xhaW06IAkJJS0xLjJmIHNl Y29uZHNcbiIsICR0b3RhbF9kaXJlY3RfbGF0ZW5jeTsKKwlwcmludCAiXG4iOworCXByaW50ICJL c3dhcGQgd2FrZXVwczoJCQkJJHRvdGFsX2tzd2FwZF93YWtlXG4iOworCXByaW50ICJLc3dhcGQg cGFnZXMgc2Nhbm5lZDoJCQkkdG90YWxfa3N3YXBkX25yX3NjYW5uZWRcbiI7CisJcHJpbnQgIktz d2FwZCByZWNsYWltIHdyaXRlIGZpbGUgc3luYyBJL086CSR0b3RhbF9rc3dhcGRfd3JpdGVwYWdl X2ZpbGVfc3luY1xuIjsKKwlwcmludCAiS3N3YXBkIHJlY2xhaW0gd3JpdGUgYW5vbiBzeW5jIEkv TzoJJHRvdGFsX2tzd2FwZF93cml0ZXBhZ2VfYW5vbl9zeW5jXG4iOworCXByaW50ICJLc3dhcGQg cmVjbGFpbSB3cml0ZSBmaWxlIGFzeW5jIEkvTzoJJHRvdGFsX2tzd2FwZF93cml0ZXBhZ2VfZmls ZV9hc3luY1xuIjsKKwlwcmludCAiS3N3YXBkIHJlY2xhaW0gd3JpdGUgYW5vbiBhc3luYyBJL086 CSR0b3RhbF9rc3dhcGRfd3JpdGVwYWdlX2Fub25fYXN5bmNcbiI7CisJcHJpbnRmICJUaW1lIGtz d2FwZCBhd2FrZToJCQklLTEuMmYgc2Vjb25kc1xuIiwgJHRvdGFsX2tzd2FwZF9sYXRlbmN5Owor fQorCitzdWIgYWdncmVnYXRlX3BlcnByb2Nlc3NwaWQoKSB7CisJbXkgJHByb2Nlc3NfcGlkOwor CW15ICRwcm9jZXNzOworCXVuZGVmICVwZXJwcm9jZXNzOworCisJZm9yZWFjaCAkcHJvY2Vzc19w aWQgKGtleXMgJXBlcnByb2Nlc3NwaWQpIHsKKwkJJHByb2Nlc3MgPSAkcHJvY2Vzc19waWQ7CisJ CSRwcm9jZXNzID1+IHMvLShbMC05XSkqJC8vOworCQlpZiAoJHByb2Nlc3MgZXEgJycpIHsKKwkJ CSRwcm9jZXNzID0gIk5PX1BST0NFU1NfTkFNRSI7CisJCX0KKworCQkkcGVycHJvY2Vzc3skcHJv Y2Vzc30tPntNTV9WTVNDQU5fRElSRUNUX1JFQ0xBSU1fQkVHSU59ICs9ICRwZXJwcm9jZXNzcGlk eyRwcm9jZXNzX3BpZH0tPntNTV9WTVNDQU5fRElSRUNUX1JFQ0xBSU1fQkVHSU59OworCQkkcGVy cHJvY2Vzc3skcHJvY2Vzc30tPntNTV9WTVNDQU5fS1NXQVBEX1dBS0V9ICs9ICRwZXJwcm9jZXNz cGlkeyRwcm9jZXNzX3BpZH0tPntNTV9WTVNDQU5fS1NXQVBEX1dBS0V9OworCQkkcGVycHJvY2Vz c3skcHJvY2Vzc30tPntNTV9WTVNDQU5fV0FLRVVQX0tTV0FQRH0gKz0gJHBlcnByb2Nlc3NwaWR7 JHByb2Nlc3NfcGlkfS0+e01NX1ZNU0NBTl9XQUtFVVBfS1NXQVBEfTsKKwkJJHBlcnByb2Nlc3N7 JHByb2Nlc3N9LT57SElHSF9LU1dBUERfUkVXQUtFVVB9ICs9ICRwZXJwcm9jZXNzcGlkeyRwcm9j ZXNzX3BpZH0tPntISUdIX0tTV0FQRF9SRVdBS0VVUH07CisJCSRwZXJwcm9jZXNzeyRwcm9jZXNz fS0+e0hJR0hfTlJfU0NBTk5FRH0gKz0gJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e0hJ R0hfTlJfU0NBTk5FRH07CisJCSRwZXJwcm9jZXNzeyRwcm9jZXNzfS0+e01NX1ZNU0NBTl9XUklU RVBBR0VfRklMRV9TWU5DfSArPSAkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57TU1fVk1T Q0FOX1dSSVRFUEFHRV9GSUxFX1NZTkN9OworCQkkcGVycHJvY2Vzc3skcHJvY2Vzc30tPntNTV9W TVNDQU5fV1JJVEVQQUdFX0FOT05fU1lOQ30gKz0gJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlk fS0+e01NX1ZNU0NBTl9XUklURVBBR0VfQU5PTl9TWU5DfTsKKwkJJHBlcnByb2Nlc3N7JHByb2Nl c3N9LT57TU1fVk1TQ0FOX1dSSVRFUEFHRV9GSUxFX0FTWU5DfSArPSAkcGVycHJvY2Vzc3BpZHsk cHJvY2Vzc19waWR9LT57TU1fVk1TQ0FOX1dSSVRFUEFHRV9GSUxFX0FTWU5DfTsKKwkJJHBlcnBy b2Nlc3N7JHByb2Nlc3N9LT57TU1fVk1TQ0FOX1dSSVRFUEFHRV9BTk9OX0FTWU5DfSArPSAkcGVy cHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57TU1fVk1TQ0FOX1dSSVRFUEFHRV9BTk9OX0FTWU5D fTsKKworCQlmb3IgKG15ICRvcmRlciA9IDA7ICRvcmRlciA8IDIwOyAkb3JkZXIrKykgeworCQkJ JHBlcnByb2Nlc3N7JHByb2Nlc3N9LT57TU1fVk1TQ0FOX0RJUkVDVF9SRUNMQUlNX0JFR0lOX1BF Uk9SREVSfVskb3JkZXJdICs9ICRwZXJwcm9jZXNzcGlkeyRwcm9jZXNzX3BpZH0tPntNTV9WTVND QU5fRElSRUNUX1JFQ0xBSU1fQkVHSU5fUEVST1JERVJ9WyRvcmRlcl07CisJCQkkcGVycHJvY2Vz c3skcHJvY2Vzc30tPntNTV9WTVNDQU5fV0FLRVVQX0tTV0FQRF9QRVJPUkRFUn1bJG9yZGVyXSAr PSAkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57TU1fVk1TQ0FOX1dBS0VVUF9LU1dBUERf UEVST1JERVJ9WyRvcmRlcl07CisJCQkkcGVycHJvY2Vzc3skcHJvY2Vzc30tPntNTV9WTVNDQU5f S1NXQVBEX1dBS0VfUEVST1JERVJ9WyRvcmRlcl0gKz0gJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3Nf cGlkfS0+e01NX1ZNU0NBTl9LU1dBUERfV0FLRV9QRVJPUkRFUn1bJG9yZGVyXTsKKworCQl9CisK KwkJIyBBZ2dyZWdhdGUgZGlyZWN0IHJlY2xhaW0gbGF0ZW5jaWVzCisJCW15ICR3cl9pbmRleCA9 ICRwZXJwcm9jZXNzeyRwcm9jZXNzfS0+e01NX1ZNU0NBTl9ESVJFQ1RfUkVDTEFJTV9FTkR9Owor CQlteSAkcmRfaW5kZXggPSAwOworCQl3aGlsZSAoZGVmaW5lZCAkcGVycHJvY2Vzc3BpZHskcHJv Y2Vzc19waWR9LT57SElHSF9ESVJFQ1RfUkVDTEFJTV9MQVRFTkNZfVskcmRfaW5kZXhdKSB7CisJ CQkkcGVycHJvY2Vzc3skcHJvY2Vzc30tPntISUdIX0RJUkVDVF9SRUNMQUlNX0xBVEVOQ1l9WyR3 cl9pbmRleF0gPSAkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57SElHSF9ESVJFQ1RfUkVD TEFJTV9MQVRFTkNZfVskcmRfaW5kZXhdOworCQkJJHJkX2luZGV4Kys7CisJCQkkd3JfaW5kZXgr KzsKKwkJfQorCQkkcGVycHJvY2Vzc3skcHJvY2Vzc30tPntNTV9WTVNDQU5fRElSRUNUX1JFQ0xB SU1fRU5EfSA9ICR3cl9pbmRleDsKKworCQkjIEFnZ3JlZ2F0ZSBrc3dhcGQgbGF0ZW5jaWVzCisJ CW15ICR3cl9pbmRleCA9ICRwZXJwcm9jZXNzeyRwcm9jZXNzfS0+e01NX1ZNU0NBTl9LU1dBUERf U0xFRVB9OworCQlteSAkcmRfaW5kZXggPSAwOworCQl3aGlsZSAoZGVmaW5lZCAkcGVycHJvY2Vz c3BpZHskcHJvY2Vzc19waWR9LT57SElHSF9LU1dBUERfTEFURU5DWX1bJHJkX2luZGV4XSkgewor CQkJJHBlcnByb2Nlc3N7JHByb2Nlc3N9LT57SElHSF9LU1dBUERfTEFURU5DWX1bJHdyX2luZGV4 XSA9ICRwZXJwcm9jZXNzcGlkeyRwcm9jZXNzX3BpZH0tPntISUdIX0tTV0FQRF9MQVRFTkNZfVsk cmRfaW5kZXhdOworCQkJJHJkX2luZGV4Kys7CisJCQkkd3JfaW5kZXgrKzsKKwkJfQorCQkkcGVy cHJvY2Vzc3skcHJvY2Vzc30tPntNTV9WTVNDQU5fRElSRUNUX1JFQ0xBSU1fRU5EfSA9ICR3cl9p bmRleDsKKwl9Cit9CisKK3N1YiByZXBvcnQoKSB7CisJaWYgKCEkb3B0X2lnbm9yZXBpZCkgewor CQlkdW1wX3N0YXRzKFwlcGVycHJvY2Vzc3BpZCk7CisJfSBlbHNlIHsKKwkJYWdncmVnYXRlX3Bl cnByb2Nlc3NwaWQoKTsKKwkJZHVtcF9zdGF0cyhcJXBlcnByb2Nlc3MpOworCX0KK30KKworIyBQ cm9jZXNzIGV2ZW50cyBvciBzaWduYWxzIHVudGlsIG5laXRoZXIgaXMgYXZhaWxhYmxlCitzdWIg c2lnbmFsX2xvb3AoKSB7CisJbXkgJHNpZ2ludF9wcm9jZXNzZWQ7CisJZG8geworCQkkc2lnaW50 X3Byb2Nlc3NlZCA9IDA7CisJCXByb2Nlc3NfZXZlbnRzKCk7CisKKwkJIyBIYW5kbGUgcGVuZGlu ZyBzaWduYWxzIGlmIGFueQorCQlpZiAoJHNpZ2ludF9wZW5kaW5nKSB7CisJCQlteSAkY3VycmVu dF90aW1lID0gdGltZTsKKworCQkJaWYgKCRzaWdpbnRfZXhpdCkgeworCQkJCXByaW50ICJSZWNl aXZlZCBleGl0IHNpZ25hbFxuIjsKKwkJCQkkc2lnaW50X3BlbmRpbmcgPSAwOworCQkJfQorCQkJ aWYgKCRzaWdpbnRfcmVwb3J0KSB7CisJCQkJaWYgKCRjdXJyZW50X3RpbWUgPj0gJHNpZ2ludF9y ZWNlaXZlZCArIDIpIHsKKwkJCQkJcmVwb3J0KCk7CisJCQkJCSRzaWdpbnRfcmVwb3J0ID0gMDsK KwkJCQkJJHNpZ2ludF9wZW5kaW5nID0gMDsKKwkJCQkJJHNpZ2ludF9wcm9jZXNzZWQgPSAxOwor CQkJCX0KKwkJCX0KKwkJfQorCX0gd2hpbGUgKCRzaWdpbnRfcGVuZGluZyB8fCAkc2lnaW50X3By b2Nlc3NlZCk7Cit9CisKK3NpZ25hbF9sb29wKCk7CityZXBvcnQoKTsKLS0gCjEuNy4xCgo= --00163630f6b79cf990048f129002-- -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org