From owner-freebsd-hackers Sun Nov 3 13:11:53 1996 Return-Path: owner-hackers Received: (from root@localhost) by freefall.freebsd.org (8.7.5/8.7.3) id NAA25332 for hackers-outgoing; Sun, 3 Nov 1996 13:11:53 -0800 (PST) Received: from rah.star-gate.com (rah.star-gate.com [204.188.121.18]) by freefall.freebsd.org (8.7.5/8.7.3) with ESMTP id NAA25305 for ; Sun, 3 Nov 1996 13:11:33 -0800 (PST) Received: from rah.star-gate.com (localhost.star-gate.com [127.0.0.1]) by rah.star-gate.com (8.7.6/8.7.3) with ESMTP id NAA10511 for ; Sun, 3 Nov 1996 13:11:20 -0800 (PST) Message-Id: <199611032111.NAA10511@rah.star-gate.com> X-Mailer: exmh version 1.6.9 8/22/96 To: hackers@freebsd.org Subject: Geomview, Mbone and FreeBSD... Mime-Version: 1.0 Content-Type: multipart/mixed ; boundary="===_0_Sun_Nov__3_13:11:14_PST_1996" Date: Sun, 03 Nov 1996 13:11:20 -0800 From: Amancio Hasty Sender: owner-hackers@freebsd.org X-Loop: FreeBSD.org Precedence: bulk This is a multipart MIME message. --===_0_Sun_Nov__3_13:11:14_PST_1996 Content-Type: text/plain; charset=us-ascii Are there any stdio experts which can lend a hand in porting Geomview? Bill and a couple of people have develop a cool interface to track mbone traffic using a 3d map of the world showing off the tunnels as ballistic trajectories. At any rate, the file giving us a problem is futil.c . It likes to manipulate the stdio data structures and does seeks on stdio. Here is the file and if requested I can give out a pointer to the Geomview tar file: --===_0_Sun_Nov__3_13:11:14_PST_1996 Content-Type: application/octet-stream Content-Description: futil.c Content-Transfer-Encoding: base64 LyogQ29weXJpZ2h0IChjKSAxOTkyIFRoZSBHZW9tZXRyeSBDZW50ZXI7IFVuaXZlcnNpdHkg b2YgTWlubmVzb3RhCiAgIDEzMDAgU291dGggU2Vjb25kIFN0cmVldDsgIE1pbm5lYXBvbGlz LCBNTiAgNTU0NTQsIFVTQTsKICAgClRoaXMgZmlsZSBpcyBwYXJ0IG9mIGdlb212aWV3L09P R0wuIGdlb212aWV3L09PR0wgaXMgZnJlZSBzb2Z0d2FyZTsKeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeSBpdCBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBnaXZlbiBpbgp0 aGUgZmlsZSBDT1BZSU5HLCB3aGljaCB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYWxvbmcg d2l0aCB0aGlzIGZpbGUuClRoaXMgYW5kIG90aGVyIHJlbGF0ZWQgc29mdHdhcmUgbWF5IGJl IG9idGFpbmVkIHZpYSBhbm9ueW1vdXMgZnRwIGZyb20KZ2VvbS51bW4uZWR1OyBlbWFpbDog c29mdHdhcmVAZ2VvbS51bW4uZWR1LiAqLwpzdGF0aWMgY2hhciAqY29weXJpZ2h0ID0gIkNv cHlyaWdodCAoQykgMTk5MiBUaGUgR2VvbWV0cnkgQ2VudGVyIjsKCi8qIEF1dGhvcnM6IENo YXJsaWUgR3VubiwgU3R1YXJ0IExldnksIFRhbWFyYSBNdW56bmVyLCBNYXJrIFBoaWxsaXBz ICovCgovKiAkSGVhZGVyOiAvdS9nY2cvbmdyYXAvc3JjL2xpYi9vb2dsL3V0aWwvUkNTL2Z1 dGlsLmMsdiAxLjMyIDE5OTQvMDgvMjYgMDQ6MTE6Mjcgc2xldnkgRXhwICQgKi8KCi8qCiAq IEdlb21ldHJ5IG9iamVjdCByb3V0aW5lcwogKgogKiBVdGlsaXR5IHJvdXRpbmVzLCB1c2Vm dWwgZm9yIG1hbnkgb2JqZWN0cwogKgogKiBpbnQKICogZmdldG5mKGZpbGUsIG5mbG9hdHMs IGZsb2F0cCwgYmluYXJ5KQogKglSZWFkIGFuIGFycmF5IG9mIGZsb2F0cyBmcm9tIGEgZmls ZSBpbiAiYXNjaWkiIG9yICJiaW5hcnkiIGZvcm1hdC4KICoJUmV0dXJucyBudW1iZXIgb2Yg ZmxvYXRzIHN1Y2Nlc3NmdWxseSByZWFkLCBzaG91bGQgPSBuZmxvYXRzLgogKgkiQmluYXJ5 IiBtZWFucyAiSUVFRSAzMi1iaXQgZmxvYXRpbmctcG9pbnQiIGZvcm1hdC4KICoKICogaW50 CiAqIGZnZXRuaShGSUxFICpmaWxlLCBpbnQgbmludHMsIGludCAqaW50c3AsIGludCBiaW5h cnkpCiAqCVJlYWQgYW4gYXJyYXkgb2YgaW50cyBmcm9tIGEgZmlsZSBpbiAiYXNjaWkiIG9y ICJiaW5hcnkiIGZvcm1hdC4KICoJUmV0dXJucyBudW1iZXIgb2YgaW50cyBzdWNjZXNzZnVs bHkgcmVhZCwgc2hvdWxkID0gbmludHMuCiAqCSJCaW5hcnkiIG1lYW5zICIzMi1iaXQgYmln LWVuZGlhbiIgaW50ZWdlciBmb3JtYXQuCiAqCiAqIGludAogKiBmZ2V0bnMoRklMRSAqZmls ZSwgaW50IG5zaG9ydHMsIHNob3J0ICppbnRzcCwgaW50IGJpbmFyeSkKICoJUmVhZCBhbiBh cnJheSBvZiBzaG9ydHMgZnJvbSBhIGZpbGUgaW4gImFzY2lpIiBvciAiYmluYXJ5IiBmb3Jt YXQuCiAqCVJldHVybnMgbnVtYmVyIG9mIHNob3J0cyBzdWNjZXNzZnVsbHkgcmVhZCwgc2hv dWxkID0gbmludHMuCiAqCSJCaW5hcnkiIG1lYW5zICIxNi1iaXQgYmlnLWVuZGlhbiIgaW50 ZWdlciBmb3JtYXQuCiAqCiAqIGludAogKiBmZXhwZWN0c3RyKEZJTEUgKmZpbGUsIGNoYXIg KnN0cmluZykKICoJRXhwZWN0IHRoZSBnaXZlbiBzdHJpbmcgdG8gYXBwZWFyIGltbWVkaWF0 ZWx5IG9uIGZpbGUuCiAqCVJldHVybiAwIGlmIHRoZSBjb21wbGV0ZSBzdHJpbmcgaXMgZm91 bmQsCiAqCWVsc2UgdGhlIG9mZnNldCsxIG9mIHRoZSBsYXN0IG1hdGNoZWQgY2hhciB3aXRo aW4gc3RyaW5nLgogKglUaGUgZmlyc3QgdW5tYXRjaGVkIGNoYXIgaXMgdW5nZXRjJ2QuCiAq CiAqIGludAogKiBmZXhwZWN0dG9rZW4oRklMRSAqZmlsZSwgY2hhciAqc3RyaW5nKQogKglF eHBlY3QgdGhlIGdpdmVuIHN0cmluZyB0byBhcHBlYXIgb24gdGhlIGZpbGUsIHBvc3NpYmx5 IGFmdGVyCiAqCXNraXBwaW5nIHNvbWUgd2hpdGUgc3BhY2UgYW5kIGNvbW1lbnRzLgogKglS ZXR1cm4gMCBpZiBmb3VuZCwgZWxzZSB0aGUgb2Zmc2V0KzEgb2YgbGFzdCBtYXRjaGVkIGNo YXIgaW4gc3RyaW5nLgogKglUaGUgZmlyc3QgdW5tYXRjaGVkIGNoYXIgaXMgdW5nZXRjJ2Qu CiAqCiAqIGludCBmbmV4dGMoRklMRSAqZiwgaW50IGZsYWdzKQogKglBZHZhbmNlcyBmIHRv IHRoZSBuZXh0ICJpbnRlcmVzdGluZyIgY2hhcmFjdGVyIGFuZAogKglyZXR1cm5zIGl0LiAg VGhlIHJldHVybmVkIGNoYXIgaXMgdW5nZXRjJ2VkIHNvIHRoZSBuZXh0IGdldGMoKQogKgl3 aWxsIHlpZWxkIHRoZSBzYW1lIHZhbHVlLgogKglJbnRlcmVzdGluZyBkZXBlbmRzIG9uIGZs YWdzOgogKgkgIDAgOiBTa2lwIGJsYW5rcywgdGFicywgbmV3bGluZXMsIGFuZCBjb21tZW50 cyAoIy4uLlxuKS4KICoJICAxIDogU2tpcCBibGFua3MsIHRhYnMsIGFuZCBjb21tZW50cywg YnV0IG5ld2xpbmVzIGFyZSBpbnRlcmVzdGluZwogKgkJKGluY2x1ZGluZyB0aGUgXG4gdGhh dCB0ZXJtaW5hdGVzIGEgY29tbWVudCkuCiAqCSAgMiA6IFNraXAgYmxhbmtzLCB0YWJzLCBh bmQgbmV3bGluZXMsIGJ1dCBzdG9wIGF0ICMuCiAqCSAgMyA6IFNraXAgYmxhbmtzIGFuZCB0 YWJzIGJ1dCBzdG9wIGF0ICMgb3IgXG4uCiAqCiAqIGludCBhc3luY19mbmV4dGMoRklMRSAq ZiwgaW50IGZsYWdzKQogKglMaWtlIGZuZXh0YygpIGFib3ZlLCBidXQgZ3VhcmFudGVlcyBu b3QgdG8gYmxvY2sgaWYgbm8gZGF0YSBpcwogKglpbW1lZGlhdGVseSBhdmFpbGFibGUuICBJ dCByZXR1cm5zIGVpdGhlciBhbiBpbnRlcmVzdGluZyBjaGFyYWN0ZXIsCiAqCUVPRiwgb3Ig dGhlIHNwZWNpYWwgY29kZSBOT0RBVEEgKD09IC0yKS4KICoKICogaW50IGFzeW5jX2dldGMo RklMRSAqZikKICoJTGlrZSBnZXRjKCksIGJ1dCBndWFyYW50ZWVzIG5vdCB0byBibG9jay4g IFJldHVybnMgTk9EQVRBIGlmCiAqCW5vdGhpbmcgaXMgaW1tZWRpYXRlbHkgYXZhaWxhYmxl LgogKgogKiBjaGFyICpmdG9rZW4oRklMRSAqZiwgaW50IGZsYWdzKQogKglTa2lwcyB1bmlu dGVyZXN0aW5nIGNoYXJhY3RlcnMgd2l0aCBmbmV4dGMoZiwgZmxhZ3MpLAogKgl0aGVuIHJl dHVybnMgYSAidG9rZW4iIC0gc3RyaW5nIG9mIGNvbnNlY3V0aXZlIGludGVyZXN0aW5nIGNo YXJhY3RlcnMuCiAqCVJldHVybnMgTlVMTCBpZiBFT0YgaXMgcmVhY2hlZCB3aXRoIG5vIHRv a2VuLCBvciBpZgogKglmbGFncyBzcGVjaWZpZXMgc3RvcHBpbmcgYXQgZW5kLW9mLWxpbmUg YW5kIHRoaXMgaXMgZW5jb3VudGVyZWQgd2l0aAogKglubyB0b2tlbiBmb3VuZC4KICoJVGhl IHRva2VuIGlzIGVmZmVjdGl2ZWx5IHN0YXRpY2FsbHkgYWxsb2NhdGVkIGFuZCB3aWxsIGJl CiAqCW92ZXJ3cml0dGVuIGJ5IHRoZSBuZXh0IGZ0b2tlbigpIGNhbGwuCiAqCiAqIGNoYXIg KmZkZWxpbXRvayhjaGFyICpkZWxpbXMsIEZJTEUgKmYsIGludCBmbGFncykKICoJTGlrZSBm dG9rZW4oKSwgYnV0IHNwZWNpYWxseSBoYW5kbGVzIHRoZSBjaGFyYWN0ZXJzIGluIGRlbGlt c1tdLgogKglJZiBvbmUgYXBwZWFycyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0b2tlbiwg aXQncyByZXR1cm5lZCBhcyAKICoJYSBzaW5nbGUtY2hhcmFjdGVyIHRva2VuLgogKglJZiBh IG1lbWJlciBvZiBkZWxpbXNbXSBhcHBlYXJzIGFmdGVyIG90aGVyIGNoYXJhY3RlcnMgaGF2 ZSBiZWVuCiAqCWFjY3VtdWxhdGVkLCBpdCdzIGNvbnNpZGVyZWQgdG8gdGVybWluYXRlIHRo ZSB0b2tlbi4KICoJU28gc3VjY2Vzc2l2ZSBjYWxscyB0byBmZGVsaW10b2soIigpIiwgZiwg MCkKICoJb24gYSBmaWxlIGNvbnRhaW5pbmcgIChmcmVkIHNtaXRoKQogKgl3b3VsZCByZXR1 cm4gIigiLCAiZnJlZCIsICJzbWl0aCIsIGFuZCAiKSIuCiAqCUJlaGF2aW9yIGlzIHVuZGVm aW5lZCBpZiBvbmUgb2YgdGhlIHByZWRlZmluZWQgZGVsaW1pdGVycwogKgkod2hpdGUgc3Bh Y2Ugb3IgIykgYXBwZWFycyBpbiBkZWxpbXNbXS4gIEV4cGxpY2l0IHF1b3RpbmcKICoJKHdp dGggIiwgJyBvciBcKSBvdmVycmlkZXMgZGV0ZWN0aW9uIG9mIGRlbGltaXRlcnMuCiAqCiAq IGludCBmZ2V0dHJhbnNmb3JtKEZJTEUgKmYsIGludCBudHJhbnNmb3JtcywgZmxvYXQgKnRy YW5zZm9ybXMsIGludCBiaW5hcnkpCiAqCVJlYWRzIDR4NCBtYXRyaWNlcyBmcm9tIEZJTEUu ICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgbWF0cmljZXMgZm91bmQsCiAqCXVwIHRvIG50cmFu c2Zvcm1zLiAgUmV0dXJucyAwIGlmIG5vIG51bWJlcnMgYXJlIGZvdW5kLgogKglPbiBmaW5k aW5nIGluY29tcGxldGUgbWF0cmljZXMgKG5vdCBhIG11bHRpcGxlIG9mIDE2IGZsb2F0cykK ICoJcmV0dXJucyAtMSwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGFueSB3aG9sZSBtYXRyaWNl cyB3ZXJlIGZvdW5kLgogKglNYXRyaWNlcyBhcmUgZXhwZWN0ZWQgaW4gdGhlIGZvcm0gdXNl ZCB0byB0cmFuc2Zvcm0gYSByb3cgdmVjdG9yCiAqCW11bHRpcGxpZWQgb24gdGhlIGxlZnQs IGkuZS4gIHAgKiBUIC0+IHAnOyB0aHVzIEV1Y2xpZGVhbiB0cmFuc2xhdGlvbnMKICoJYXBw ZWFyIGluIHRoZSBsYXN0IHJvdy4KICoKICogaW50IGZwdXR0cmFuc2Zvcm0oRklMRSAqZiwg aW50IG50cmFuc2Zvcm1zLCBmbG9hdCAqdHJhbnNmb3JtcywgaW50IGJpbmFyeSkKICoJV3Jp dGVzIDR4NCBtYXRyaWNlcyB0byBGSUxFLiAgUmV0dXJucyB0aGUgbnVtYmVyIHdyaXR0ZW4s IGkuZS4KICoJbnRyYW5zZm9ybXMgdW5sZXNzIGFuIGVycm9yIG9jY3Vycy4KICoKICogaW50 IGZwdXRuZihGSUxFICpmLCBpbnQgbmZsb2F0cywgZmxvYXQgKmZ2LCBpbnQgYmluYXJ5KQog KglXcml0ZXMgJ25mbG9hdHMnIGZsb2F0cyB0byB0aGUgZ2l2ZW4gZmlsZS4gIEFTQ0lJIGlz IGluICVnIGZvcm1hdCwKICoJc2VwYXJhdGVkIGJ5IGJsYW5rcy4KICoKICogRklMRSAqZnN0 cm9wZW4oc3RyLCBsZW4sIG1vZGUpCiAqCU9wZW5zIGEgc3RyaW5nIChidWZmZXIpIGFzIGEg ImZpbGUiLgogKglNb2RlIGlzICJyIiBvciAidyIgYXMgdXN1YWwuCiAqCVJlYWRzIHNob3Vs ZCByZXR1cm4gRU9GIG9uIGVuY291bnRlcmluZyBlbmQtb2Ytc3RyaW5nLAogKgl3cml0ZXMg cGFzdCBlbmQtb2Ytc3RyaW5nIHNob3VsZCBhbHNvIHlpZWxkIGFuIGVycm9yIHJldHVybi4K ICoJZmNsb3NlKCkgc2hvdWxkIGJlIHVzZWQgdG8gZnJlZSB0aGUgRklMRSBhZnRlciB1c2Uu CiAqLwoKCiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiNpbmNs dWRlIDxzeXMvdGltZS5oPgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDxzdHJpbmcu aD4KI2lmbmRlZiBOZVhUCiNpbmNsdWRlIDx1bmlzdGQuaD4KI2VuZGlmCiNpZmRlZiBBSVgK I2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KI2VuZGlmCiNpbmNsdWRlIDxjdHlwZS5oPgojaW5j bHVkZSAib29nbHV0aWwuaCIKCiAgIC8qIFNwZWVkeSBiaW5hcnkgSS9PIGlmIHRoZSBtYWNo aW5lIGlzIGtub3duIHRvIGJlIGJpZy1lbmRpYW4gKi8KI2lmIG02OGsgfHwgbWM2ODAwMCB8 fCBtaXBzIHx8IHNwYXJjIHx8IGhwdXggfHwgQUlYCiMgZGVmaW5lIEJJR19FTkRJQU4gMQoj ZW5kaWYKCiNpZm5kZWYgQklHX0VORElBTgojIGluY2x1ZGUgPG5ldGluZXQvaW4uaD4JLyog Zm9yIG50b2hsKCksIGV0Yy4gKi8KI2VuZGlmCgojaWZkZWYgaHB1eAkvKiBIYWNrIG5hbWVz IG9mIHN0ZGlvIGJ1ZmZlciBmaWVsZHMgKi8KI2RlZmluZSBfY250IF9fY250CiNkZWZpbmUg X2Jhc2UgX19iYXNlCiNkZWZpbmUgX3B0ciBfX3B0cgojZW5kaWYgCgojaWZkZWYgX19GcmVl QlNEX18JLyogWFhYIHdjZiBhY3R1YWxseSA0LjQgQlNELCB0aGlzIGlzIGp1c3QgYSBndWVz cyAqLwojZGVmaW5lIF9jbnQJX2JmLl9zaXplCiNkZWZpbmUgX2Jhc2UJX2JmLl9iYXNlCiNk ZWZpbmUJX3B0cglfcAojZGVmaW5lIF9mbGFnCV9mbGFncwojZGVmaW5lIF9JT01ZQlVGCTAK I2RlZmluZSBfSU9FT0YJX19TRU9GCiNkZWZpbmUgX0lPRVJSCV9fU0VSUgojZW5kaWYKCiNp ZiBkZWZpbmVkKF9fbGludXhfXykgJiYgIWRlZmluZWQoX0lPX1NURElPX0gpCgkvKiBIYW5k bGUgb2xkZXIgKHByZS0xLjApIExpbnV4IHN0ZGlvIGZpZWxkcywKCSAqIG1ha2luZyB0aGVt IGxvb2sgbGlrZSBsYXRlciBvbmVzLgoJICovCiNkZWZpbmUJIF9JT19yZWFkX2Jhc2UJX2Jh c2UKI2RlZmluZSAgX0lPX3JlYWRfcHRyCV9ncHRyCiNkZWZpbmUJIF9JT19yZWFkX2VuZAlf ZWdwdHIKI2VuZGlmCgoJLyogUGVlciBpbnRvIGEgc3RkaW8gYnVmZmVyLCBjaGVjayB3aGV0 aGVyIGl0IGhhcyBkYXRhIGF2YWlsYWJsZQoJICogZm9yIHJlYWRpbmcuICBBbG1vc3QgcG9y dGFibGUgZ2l2ZW4gdGhlIGNvbW1vbiBzdGRpbyBhbmNlc3RyeS4KCSAqLwojaWZkZWYgX19s aW51eF9fCiNkZWZpbmUgRl9IQVNEQVRBKGYpICAoKGYpLT5fSU9fcmVhZF9wdHIgPCAoZikt Pl9JT19yZWFkX2VuZCkKI2Vsc2UKI2RlZmluZSBGX0hBU0RBVEEoZikgICgoZiktPl9jbnQg PiAwKQojZW5kaWYKCgppbnQKZm5leHRjKEZJTEUgKmYsIGludCBmbGFncykKewoJcmVnaXN0 ZXIgaW50IGM7CgoJYyA9IGdldGMoZik7Cglmb3IoOzspIHsKCSAgICBzd2l0Y2goYykgewoJ ICAgIGNhc2UgRU9GOgoJCXJldHVybihFT0YpOwoKCSAgICBjYXNlICcgJzoKCSAgICBjYXNl ICdcdCc6CgkJYnJlYWs7CQkJLyogQWx3YXlzIHNraXAgYmxhbmtzIGFuZCB0YWJzICovCgoJ ICAgIGNhc2UgJyMnOgoJCWlmKGZsYWdzICYgMikJCS8qIDI6IHN0b3Agb24gY29tbWVudHMs IGVsc2Ugc2tpcCAqLwoJCSAgICBnb3RvIGZpbTsKCgkJd2hpbGUoKGMgPSBnZXRjKGYpKSAh PSAnXG4nICYmIGMgIT0gRU9GKQoJCSAgICA7CgkJY29udGludWU7CQkvKiBSZXNjYW4gdGhp cyBjICovCgoJICAgIGNhc2UgJ1xuJzoKCQlpZighKGZsYWdzICYgMSkpCS8qIDE6IHN0b3Ag b24gXG4ncywgZWxzZSBza2lwIHRoZW0gKi8KCQkgICAgYnJlYWs7CgkJCQkJLyogZmxhZ3Mm MSA9PiBmYWxsIGludG8gZGVmYXVsdCAqLwoKCSAgICBkZWZhdWx0OgoJICAgICBmaW06CgkJ dW5nZXRjKGMsIGYpOwoJCXJldHVybihjKTsKCSAgICB9CgoJICAgIGMgPSBnZXRjKGYpOwoJ fQp9CgoKZmxvYXQgZl9wb3cxMFsxMV0gPSB7IDFlMCwgMWUxLCAxZTIsIDFlMywgMWU0LCAx ZTUsIDFlNiwgMWU3LCAxZTgsIDFlOSwgMWUxMCB9OwoKI2RlZmluZSBmUG93MTAobikgICgo dW5zaWduZWQpKG4pID4gMTAgPyBmcG93MTAobikgOiBmX3BvdzEwW25dKQoKZmxvYXQKZnBv dzEwKGludCBuKQp7CglyZWdpc3RlciBpbnQgazsKCXJlZ2lzdGVyIGZsb2F0IHY7CgoJaWYo KGsgPSBuKSA8IDApCgkJayA9IC1rOwoJdiA9IGZfcG93MTBbayAmIDddOwoJaWYoayA+PSA4 KSB7CgkJZmxvYXQgdW5pdCA9IDFlODsKCgkJayA+Pj0gMzsKCQlmb3IoOzspIHsKCQkJaWYo ayAmIDEpCgkJCQl2ICo9IHVuaXQ7CgkJCWlmKChrID4+PSAxKSA9PSAwKQoJCQkJYnJlYWs7 CgkJCXVuaXQgKj0gdW5pdDsKCQl9Cgl9CglyZXR1cm4obiA8IDAgPyAxLjAvdiA6IHYpOwp9 CgovKgogKiBSZWFkIGFuIGFycmF5IG9mIHdoaXRlLXNwYWNlLXNlcGFyYXRlZCBmbG9hdHMg ZnJvbSBmaWxlICdmJyBpbiBBU0NJSSwgZmFzdC4KICogUmV0dXJucyB0aGUgbnVtYmVyIHN1 Y2Nlc3NmdWxseSByZWFkLgogKi8KaW50CmZnZXRuZihyZWdpc3RlciBGSUxFICpmLCBpbnQg bWF4ZiwgZmxvYXQgKmZ2LCBpbnQgYmluYXJ5KQp7CglpbnQgbmdvdDsKCWZsb2F0IHY7Cgly ZWdpc3RlciBpbnQgYyA9IEVPRjsKCXJlZ2lzdGVyIGxvbmcgbjsKCWxvbmcgdzsKCWludCBz LCBlcywgbmQsIGFueTsKCglpZihiaW5hcnkpIHsKI2lmIEJJR19FTkRJQU4KCQkvKiBFYXN5 IC0tIG91ciBuYXRpdmUgZmxvYXRpbmcgcG9pbnQgPT0gYmlnLWVuZGlhbiBJRUVFICovCgkJ cmV0dXJuIGZyZWFkKChjaGFyICopZnYsIHNpemVvZihmbG9hdCksIG1heGYsIGYpOwojZWxz ZSAvKiBub3QgbmF0aXZlIGJpZy1lbmRpYW4gSUVFRSAqLwoJCWZvcihuPTA7IG48bWF4ZiAm JiBmcmVhZCgoY2hhciAqKSZ3LHNpemVvZihsb25nKSwxLGYpID4gMDsgbisrKQoJCSAgICAq KGxvbmcgKikmZnZbbl0gPSBudG9obCh3KTsKCQlyZXR1cm4gbjsKI2VuZGlmIC8qIG5vdCBu YXRpdmUgYmlnLWVuZGlhbiBJRUVFICovCgl9CgoJLyogUmVhZCBBU0NJSSBmb3JtYXQgZmxv YXRzICovCglmb3IobmdvdCA9IDA7IG5nb3QgPCBtYXhmOyBuZ290KyspIHsKCQlpZihmbmV4 dGMoZiwgMCkgPT0gRU9GKQoJCQlyZXR1cm4obmdvdCk7CgkJbiA9IDA7CgkJcyA9IDA7CgkJ bmQgPSAwOwoJCWFueSA9IDA7CgkJaWYoKGMgPSBnZXRjKGYpKSA9PSAnLScpIHsKCQkJcyA9 IDE7CgkJCWMgPSBnZXRjKGYpOwoJCX0KCQl3aGlsZShjID49ICcwJyAmJiBjIDw9ICc5Jykg ewoJCQluID0gbioxMCArIGMgLSAnMCc7CgkJCW5kKys7CgkJCWlmKG4gPj0gMjE0NzQ4MzY0 KSB7CS8qIDJeMzEgLyAxMCAqLwoJCQkJdiA9IGFueSA/IHYqZlBvdzEwKG5kKSArIChmbG9h dCluIDogKGZsb2F0KW47CgkJCQluZCA9IG4gPSAwOwoJCQkJYW55ID0gMTsKCQkJfQoJCQlj ID0gZ2V0YyhmKTsKCQl9CgkJdiA9IGFueSA/IHYqZlBvdzEwKG5kKSArIChmbG9hdCluIDog KGZsb2F0KW47CgkJYW55ICs9IG5kOwoJCWlmKGMgPT0gJy4nKSB7CgkJCW5kID0gbiA9IDA7 CgkJCXdoaWxlKChjID0gZ2V0YyhmKSkgPj0gJzAnICYmIGMgPD0gJzknKSB7CgkJCQluID0g bioxMCArIGMgLSAnMCc7CgkJCQluZCsrOwoJCQkJaWYobiA+PSAyMTQ3NDgzNjQpIHsKCQkJ CQl2ICs9IChmbG9hdCluIC8gZlBvdzEwKG5kKTsKCQkJCQluID0gMDsKCQkJCX0KCQkJfQoJ CQl2ICs9IChmbG9hdCluIC8gZlBvdzEwKG5kKTsKCQl9CgkJaWYoYW55ID09IDAgJiYgbmQg PT0gMCkKCQkJYnJlYWs7CgkJaWYoYyA9PSAnZScgfHwgYyA9PSAnRScpIHsKCQkJZXMgPSBu ZCA9IDA7CgkJCXN3aXRjaChjID0gZ2V0YyhmKSkgewoJCQljYXNlICctJzoKCQkJCWVzID0g MTsJLyogQW5kIGZhbGwgdGhyb3VnaCAqLwoJCQljYXNlICcrJzoKCQkJCWMgPSBnZXRjKGYp OwoJCQl9CgkJCW4gPSAwOwoJCQl3aGlsZShjID49ICcwJyAmJiBjIDw9ICc5JykgewoJCQkJ biA9IG4qMTAgKyBjIC0gJzAnOwoJCQkJbmQrKzsKCQkJCWMgPSBnZXRjKGYpOwoJCQl9CgkJ CWlmKG5kID09IDApCgkJCQlicmVhazsKCQkJaWYoZXMpIHYgLz0gZlBvdzEwKG4pOwoJCQll bHNlIHYgKj0gZlBvdzEwKG4pOwoJCX0KCQlmdltuZ290XSA9IHMgPyAtdiA6IHY7Cgl9Cglp ZihjIT1FT0YpIHVuZ2V0YyhjLCBmKTsKCXJldHVybihuZ290KTsKfQoKCmludApmZ2V0bmko cmVnaXN0ZXIgRklMRSAqZiwgaW50IG1heGksIGludCAqaXYsIGludCBiaW5hcnkpCnsKCWlu dCBuZ290OwoJcmVnaXN0ZXIgaW50IGMgPSBFT0Y7CglyZWdpc3RlciBsb25nIG47Cglsb25n IHc7CglpbnQgcywgYW55OwoKCWlmKGJpbmFyeSkgewojaWYgQklHX0VORElBTgoJCS8qIEVh c3kgLS0gb3VyIG5hdGl2ZSBmbG9hdGluZyBwb2ludCA9PSBiaWctZW5kaWFuIElFRUUgKi8K CQlyZXR1cm4gZnJlYWQoKGNoYXIgKilpdiwgc2l6ZW9mKGludCksIG1heGksIGYpOwojZWxz ZSAvKiBub3QgbmF0aXZlIGJpZy1lbmRpYW4gaW50J3MgKi8KCQlmb3IobiA9IDA7IG4gPCBt YXhpICYmIGZyZWFkKCZ3LDQsMSxmKSA+IDA7IG4rKykKCQkgICAgaXZbbl0gPSBudG9obCh3 KTsKCQlyZXR1cm4gbjsKI2VuZGlmIC8qIG5vdCBuYXRpdmUgYmlnLWVuZGlhbiBpbnQncyAq LwoJfQoKCS8qIFJlYWQgQVNDSUkgZm9ybWF0IGZsb2F0cyAqLwoJZm9yKG5nb3QgPSAwOyBu Z290IDwgbWF4aTsgbmdvdCsrKSB7CgkJaWYoZm5leHRjKGYsIDApID09IEVPRikKCQkJcmV0 dXJuKG5nb3QpOwoJCW4gPSAwOwoJCXMgPSAwOwoJCWFueSA9IDA7CgkJaWYoKGMgPSBnZXRj KGYpKSA9PSAnLScpIHsKCQkJcyA9IDE7CgkJCWMgPSBnZXRjKGYpOwoJCX0KCQl3aGlsZShj ID49ICcwJyAmJiBjIDw9ICc5JykgewoJCQluID0gbioxMCArIGMgLSAnMCc7CgkJCWFueSA9 IDE7CgkJCWMgPSBnZXRjKGYpOwoJCX0KCQlpZighYW55KQoJCQlicmVhazsKCQlpdltuZ290 XSA9IHMgPyAtbiA6IG47Cgl9CglpZihjIT1FT0YpIHVuZ2V0YyhjLCBmKTsKCXJldHVybihu Z290KTsKfQoKaW50CmZnZXRucyhyZWdpc3RlciBGSUxFICpmLCBpbnQgbWF4cywgc2hvcnQg KnN2LCBpbnQgYmluYXJ5KQp7CglpbnQgbmdvdDsKCXJlZ2lzdGVyIGludCBjID0gRU9GOwoJ cmVnaXN0ZXIgbG9uZyBuOwoJc2hvcnQgdzsKCWludCBzLCBhbnk7CgoJaWYoYmluYXJ5KSB7 CiNpZiBCSUdfRU5ESUFOCgkJLyogRWFzeSAtLSBvdXIgbmF0aXZlIGZsb2F0aW5nIHBvaW50 ID09IGJpZy1lbmRpYW4gSUVFRSAqLwoJCXJldHVybiBmcmVhZCgoY2hhciAqKXN2LCBzaXpl b2Yoc2hvcnQpLCBtYXhzLCBmKTsKI2Vsc2UgLyogbm90IG5hdGl2ZSBiaWctZW5kaWFuIGlu dCdzICovCgkJZm9yKG4gPSAwOyBuIDwgbWF4cyAmJiBmcmVhZCgmdywyLDEsZikgPiAwOyBu KyspCgkJICAgIHN2W25dID0gbnRvaHModyk7CgkJcmV0dXJuIG47CiNlbmRpZiAvKiBub3Qg bmF0aXZlIGJpZy1lbmRpYW4gaW50J3MgKi8KCX0KCgkvKiBSZWFkIEFTQ0lJIGZvcm1hdCBm bG9hdHMgKi8KCWZvcihuZ290ID0gMDsgbmdvdCA8IG1heHM7IG5nb3QrKykgewoJCWlmKGZu ZXh0YyhmLCAwKSA9PSBFT0YpCgkJCXJldHVybihuZ290KTsKCQluID0gcyA9IGFueSA9IDA7 CgkJaWYoKGMgPSBnZXRjKGYpKSA9PSAnLScpIHsKCQkJcyA9IDE7CgkJCWMgPSBnZXRjKGYp OwoJCX0KCQl3aGlsZShjID49ICcwJyAmJiBjIDw9ICc5JykgewoJCQluID0gbioxMCArIGMg LSAnMCc7CgkJCWFueSA9IDE7CgkJCWMgPSBnZXRjKGYpOwoJCX0KCQlpZighYW55KQoJCQli cmVhazsKCQlzdltuZ290XSA9IHMgPyAtbiA6IG47Cgl9CglpZihjIT1FT0YpIHVuZ2V0Yyhj LCBmKTsKCXJldHVybihuZ290KTsKfQoKLyoKICogQ2hlY2sgZm9yIGEgc3RyaW5nIG9uIGEg ZmlsZS4KICogSWYgZm91bmQsIHJldHVybiAwLgogKiBJZiBub3QsIHJldHVybiB0aGUgb2Zm c2V0IG9mIHRoZSBsYXN0IG1hdGNoZWQgY2hhciArMQogKiBhbmQgdW5nZXRjIHRoZSBmYWls ZWQgY2hhciBzbyB0aGUgY2FsbGVyIGNhbiBzZWUgaXQuCiAqLwppbnQKZmV4cGVjdHN0cihy ZWdpc3RlciBGSUxFICpmaWxlLCBjaGFyICpzdHIpCnsKCXJlZ2lzdGVyIGNoYXIgKnAgPSBz dHI7CglyZWdpc3RlciBpbnQgYzsKCgl3aGlsZSgqcCAhPSAnXDAnKSB7CgkgICAgaWYoKGMg PSBnZXRjKGZpbGUpKSAhPSAqcCsrKSB7CgkJaWYoYyAhPSBFT0YpCgkJICAgIHVuZ2V0Yyhj LCBmaWxlKTsKCQlyZXR1cm4ocCAtIHN0cik7CgkgICAgfQoJfQoJcmV0dXJuIDA7Cn0KCi8q CiAqIENoZWNrIGZvciBhIHN0cmluZyBvbiBhIGZpbGUsIHNraXBwaW5nIGxlYWRpbmcgYmxh bmtzLgogKi8KaW50CmZleHBlY3R0b2tlbihyZWdpc3RlciBGSUxFICpmaWxlLCBjaGFyICpz dHIpCnsKCSh2b2lkKSBmbmV4dGMoZmlsZSwgMCk7CglyZXR1cm4gZmV4cGVjdHN0cihmaWxl LCBzdHIpOwp9CgppbnQgZmVzY2FwZShGSUxFICpmKQp7CiAgICBpbnQgbiwgaywgYyA9IGZn ZXRjKGYpOwoKICAgIHN3aXRjaChjKSB7CgljYXNlICduJzogcmV0dXJuICdcbic7CgljYXNl ICdiJzogcmV0dXJuICdcYic7CgljYXNlICd0JzogcmV0dXJuICdcdCc7CgljYXNlICdyJzog cmV0dXJuICdccic7CiAgICB9CiAgICBpZihjIDwgJzAnIHx8IGMgPiAnNycpCglyZXR1cm4g YzsKICAgIAogICAgbiA9IGMtJzAnOyAgayA9IDI7CiAgICB3aGlsZSgoYyA9IGZnZXRjKGYp KSA+PSAnMCcgJiYgYyA8PSAnNycpIHsKCW4gPSBuKjggfCBjLScwJzsKCWlmKC0tayA8PSAw KQoJICAgIHJldHVybiBuOwogICAgfQogICAgaWYoYyAhPSBFT0YpIHVuZ2V0YyhjLCBmKTsK ICAgIHJldHVybiBuOwp9CgovKgogKiBHZXQgYSB0b2tlbiwgcmV0dXJuIGEgc3RyaW5nIG9y IE5VTEwuCiAqIFRva2VucyBtYXkgYmUgInF1b3RlZCIgb3IgJ3F1b3RlZCc7IGJhY2tzbGFz aGVzIGFjY2VwdGVkLgogKiBUaGUgc3RyaW5nIGlzIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGFu ZCBzaG91bGQgYmUgY29waWVkIGlmCiAqIG5lZWRlZCBiZWZvcmUgdGhlIG5leHQgY2FsbCB0 byBmdG9rZW4oKS4KICovCmNoYXIgKgpmdG9rZW4oRklMRSAqZmlsZSwgaW50IGZsYWdzKQp7 CglzdGF0aWMgY2hhciAqdG9rZW4gPSBOVUxMOwoJc3RhdGljIGludCB0cm9vbSA9IDA7Cgly ZWdpc3RlciBpbnQgYzsKCXJlZ2lzdGVyIGNoYXIgKnA7CglyZWdpc3RlciBpbnQgdGVybTsK CglpZigodGVybSA9IGZuZXh0YyhmaWxlLCBmbGFncykpID09IEVPRikKCSAgICByZXR1cm4g TlVMTDsKCglpZih0b2tlbiA9PSBOVUxMKSB7CgkgICAgdHJvb20gPSA1MDsKCSAgICB0b2tl biA9IG1hbGxvYyh0cm9vbSAqIHNpemVvZihjaGFyKSk7CgkgICAgaWYodG9rZW4gPT0gTlVM TCkKCQlyZXR1cm4gTlVMTDsKCX0KCglwID0gdG9rZW47Cglzd2l0Y2godGVybSkgewoJY2Fz ZSAnIic6CgljYXNlICdcJyc6CgkgICAgKHZvaWQpIGZnZXRjKGZpbGUpOwoJICAgIGZvcig7 OykgeyAKCQlpZigoYyA9IGdldGMoZmlsZSkpID09IEVPRiB8fCBjID09IHRlcm0pCgkJICAg IGJyZWFrOwoJCWVsc2UgaWYoYyA9PSAnXFwnKQoJCSAgICBjID0gZmVzY2FwZShmaWxlKTsK CQkqcCsrID0gYzsKCQlpZihwID09ICZ0b2tlblt0cm9vbV0pIHsKCQkgICAgdG9rZW4gPSBy ZWFsbG9jKHRva2VuLCB0cm9vbSAqIDIpOwoJCSAgICBpZih0b2tlbiA9PSBOVUxMKQoJCQly ZXR1cm4gTlVMTDsKCQkgICAgcCA9ICZ0b2tlblt0cm9vbV07CgkJICAgIHRyb29tICo9IDI7 CgkJfQoJICAgIH0KCSAgICBicmVhazsKCglkZWZhdWx0OgoJICAgIGlmKGlzc3BhY2UodGVy bSkpCgkJcmV0dXJuIE5VTEw7CgkgICAgd2hpbGUoKGMgPSBnZXRjKGZpbGUpKSAhPSBFT0Yg JiYgIWlzc3BhY2UoYykpIHsKCQlpZihjID09ICdcXCcpCgkJICAgIGMgPSBmZXNjYXBlKGZp bGUpOwoJCSpwKysgPSBjOwoJCWlmKHAgPT0gJnRva2VuW3Ryb29tXSkgewoJCSAgICB0b2tl biA9IHJlYWxsb2ModG9rZW4sIHRyb29tICogMik7CgkJICAgIGlmKHRva2VuID09IE5VTEwp CgkJCXJldHVybiBOVUxMOwoJCSAgICBwID0gJnRva2VuW3Ryb29tXTsKCQkgICAgdHJvb20g Kj0gMjsKCQl9CgkgICAgfQoJICAgIGJyZWFrOwoJfQoJKnAgPSAnXDAnOwoJcmV0dXJuIHRv a2VuOwp9CgoKLyoKICogR2V0IGEgdG9rZW4sIHJldHVybiBhIHN0cmluZyBvciBOVUxMLgog KiBUb2tlbnMgbWF5IGJlICJxdW90ZWQiIG9yICdxdW90ZWQnOyBiYWNrc2xhc2hlcyBhY2Nl cHRlZC4KICogVGhlIHN0cmluZyBpcyBzdGF0aWNhbGx5IGFsbG9jYXRlZCBhbmQgc2hvdWxk IGJlIGNvcGllZCBpZgogKiBuZWVkZWQgYmVmb3JlIHRoZSBuZXh0IGNhbGwgdG8gZnRva2Vu KCkuCiAqLwpjaGFyICoKZmRlbGltdG9rKGNoYXIgKmRlbGltcywgRklMRSAqZmlsZSwgaW50 IGZsYWdzKQp7CglzdGF0aWMgY2hhciAqdG9rZW4gPSBOVUxMOwoJc3RhdGljIGludCB0cm9v bSA9IDA7CglyZWdpc3RlciBpbnQgYzsKCXJlZ2lzdGVyIGNoYXIgKnA7CglyZWdpc3RlciBj aGFyICpxOwoJcmVnaXN0ZXIgaW50IHRlcm07CgoJaWYoKHRlcm0gPSBmbmV4dGMoZmlsZSwg ZmxhZ3MpKSA9PSBFT0YpCgkgICAgcmV0dXJuIE5VTEw7CgoJaWYodG9rZW4gPT0gTlVMTCkg ewoJICAgIHRyb29tID0gNTA7CgkgICAgdG9rZW4gPSBtYWxsb2ModHJvb20gKiBzaXplb2Yo Y2hhcikpOwoJICAgIGlmKHRva2VuID09IE5VTEwpCgkJcmV0dXJuIE5VTEw7Cgl9CgoJcCA9 IHRva2VuOwoJc3dpdGNoKHRlcm0pIHsKCWNhc2UgJyInOgoJY2FzZSAnXCcnOgoJICAgICh2 b2lkKSBmZ2V0YyhmaWxlKTsKCSAgICBmb3IoOzspIHsgCgkJaWYoKGMgPSBnZXRjKGZpbGUp KSA9PSBFT0YgfHwgYyA9PSB0ZXJtKQoJCSAgICBicmVhazsKCQllbHNlIGlmKGMgPT0gJ1xc JykKCQkgICAgYyA9IGZlc2NhcGUoZmlsZSk7CgkJKnArKyA9IGM7CgkJaWYocCA9PSAmdG9r ZW5bdHJvb21dKSB7CgkJICAgIHRva2VuID0gcmVhbGxvYyh0b2tlbiwgdHJvb20gKiAyKTsK CQkgICAgaWYodG9rZW4gPT0gTlVMTCkKCQkJcmV0dXJuIE5VTEw7CgkJICAgIHAgPSAmdG9r ZW5bdHJvb21dOwoJCSAgICB0cm9vbSAqPSAyOwoJCX0KCSAgICB9CgkgICAgYnJlYWs7CgoJ ZGVmYXVsdDoKCSAgICBpZihpc3NwYWNlKHRlcm0pKQoJCXJldHVybiBOVUxMOwoJICAgIHdo aWxlKChjID0gZ2V0YyhmaWxlKSkgIT0gRU9GICYmICFpc3NwYWNlKGMpKSB7CgkJaWYoYyA9 PSAnXFwnKQoJCSAgICBjID0gZmVzY2FwZShmaWxlKTsKCQkqcCA9IGM7CgkJaWYoKytwID09 ICZ0b2tlblt0cm9vbV0pIHsKCQkgICAgdG9rZW4gPSByZWFsbG9jKHRva2VuLCB0cm9vbSAq IDIpOwoJCSAgICBpZih0b2tlbiA9PSBOVUxMKQoJCQlyZXR1cm4gTlVMTDsKCQkgICAgcCA9 ICZ0b2tlblt0cm9vbV07CgkJICAgIHRyb29tICo9IDI7CgkJfQoJCWZvcihxID0gZGVsaW1z OyAqcSAmJiBjICE9ICpxOyBxKyspCgkJICAgIDsKCQlpZigqcSkgewoJCSAgICBpZihwID4g dG9rZW4rMSkgewoJCQlwLS07CgkJCXVuZ2V0YyhjLCBmaWxlKTsKCQkgICAgfQoJCSAgICBi cmVhazsKCQl9CgkgICAgfQoJICAgIGJyZWFrOwoJfQoJKnAgPSAnXDAnOwoJcmV0dXJuIHRv a2VuOwp9CgoKLyoKICogTG9hZCBvbmUgb3IgbW9yZSBUcmFuc2Zvcm1zIGZyb20gYSBmaWxl LgogKiBSZXR1cm4gMSBvbiBzdWNjZXNzLCAwIG9uIGZhaWx1cmUuCiAqLwppbnQKZmdldHRy YW5zZm9ybShGSUxFICpmaWxlLCBpbnQgbnRyYW5zLCBmbG9hdCAqdHJhbnMgLyogZmxvYXQg dHJhbnNbbnRyYW5zXVs0XVs0XSAqLywgaW50IGJpbmFyeSkKewoJcmVnaXN0ZXIgZmxvYXQg KlQ7CglpbnQgbnQ7CgoJZm9yKG50ID0gMDsgbnQgPCBudHJhbnM7IG50KyspIHsKCSAgICBU ID0gdHJhbnMgKyAxNipudDsKCSAgICBzd2l0Y2goZmdldG5mKGZpbGUsIDE2LCBULCBiaW5h cnkpKSB7CgkgICAgY2FzZSAxNjoKCQlicmVhazsKCgkgICAgY2FzZSAwOgoJCXJldHVybiBu dDsKCgkgICAgZGVmYXVsdDoKCQlyZXR1cm4gLTE7CgkgICAgfQoJfQoJcmV0dXJuIG50cmFu czsKfQoKaW50CmZwdXRuZihGSUxFICpmaWxlLCBpbnQgY291bnQsIGZsb2F0ICp2LCBpbnQg YmluYXJ5KQp7CglyZWdpc3RlciBpbnQgaTsKCWxvbmcgdzsKCWlmKGJpbmFyeSkgewojaWYg QklHX0VORElBTgoJICByZXR1cm4gZndyaXRlKHYsIHNpemVvZihmbG9hdCksIGNvdW50LCBm aWxlKTsKI2Vsc2UKCSAgZm9yKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewoJICAgIHcgPSBo dG9ubCgqKGxvbmcgKikmdltpXSk7CgkgICAgZndyaXRlKCZ3LCBzaXplb2YoZmxvYXQpLCAx LCBmaWxlKTsKCSAgfQoJICByZXR1cm4gY291bnQ7CiNlbmRpZgoJfQoKCWZwcmludGYoZmls ZSwgIiVnIiwgdlswXSk7Cglmb3IoaSA9IDE7IGkgPCBjb3VudDsgaSsrKQoJICAgIGZwcmlu dGYoZmlsZSwgIiAlZyIsIHZbaV0pOwoJcmV0dXJuIGNvdW50Owp9CgppbnQKZnB1dHRyYW5z Zm9ybShGSUxFICpmaWxlLCBpbnQgbnRyYW5zLCBmbG9hdCAqdHJhbnMsIGludCBiaW5hcnkp CnsKCXJlZ2lzdGVyIGludCBpLCBuOwoJcmVnaXN0ZXIgZmxvYXQgKnA7CgoJaWYoYmluYXJ5 KSB7CiNpZiBCSUdfRU5ESUFOCgkgICAgcmV0dXJuIGZ3cml0ZSh0cmFucywgNCo0KnNpemVv ZihmbG9hdCksIG50cmFucywgZmlsZSk7CiNlbHNlCglPT0dMRXJyb3IoMSwgImZwdXR0cmFu c2Zvcm06IG5lZWQgY29kZSB0byBoYW5kbGUgYmluYXJ5IHdyaXRlcyBmb3IgdGhpcyBhcmNo aXRlY3R1cmUuIik7CglyZXR1cm4gMDsKI2VuZGlmCgl9CgoJLyogQVNDSUkuICovCgoJZm9y KG4gPSAwOyBuIDwgbnRyYW5zOyBuKyspIHsKCSAgICBwID0gdHJhbnMgKyBuKjE2OwoJICAg IGZvcihpID0gMDsgaSA8IDQ7IGkrKywgcCArPSA0KSB7CgkJZnByaW50ZihmaWxlLCAiICAl MTIuOGcgICUxMi44ZyAgJTEyLjhnICAlMTIuOGdcbiIsCgkJICAgIHBbMF0sIHBbMV0sIHBb Ml0sIHBbM10pOwoJICAgIH0KCSAgICBpZihmZXJyb3IoZmlsZSkpCgkJcmV0dXJuIG47Cgkg ICAgZnByaW50ZihmaWxlLCAiXG4iKTsKCX0KCXJldHVybiBudHJhbnM7Cn0KCi8qCiAqIEdp dmVuIGEgZmlsZSBwb2ludGVyLCByZXR1cm4gYSBzdHJpbmcgYXR0ZW1wdGluZyB0byBzaG93 IHRoZSBjb250ZXh0CiAqIG9mIGl0cyBjdXJyZW50IHBvc2l0aW9uLiAgSWYgbm8gZGF0YSBp cyBhdmFpbGFibGUsIHJldHVybnMgdGhlIGVtcHR5IHN0cmluZy4KICovCmNoYXIgKgpmY29u dGV4dChyZWdpc3RlciBGSUxFICpmKQp7CiAgICBzdGF0aWMgY2hhciAqY29udCA9IE5VTEw7 CiAgICBzdGF0aWMgY2hhciBkZmx0W10gPSAiIjsKICAgIGNoYXIgYnVmWzEwMjRdOwogICAg aW50IG5wcmUsIG5wb3N0LCBubHByZSwgbmxwb3N0LCB0YWIsIGxlbjsKICAgIGludCBwcmVk b3RzID0gNCwgcG9zdGRvdHMgPSA0OwogICAgcmVnaXN0ZXIgY2hhciAqcCwgKnE7CiAgICBj aGFyICpsYXN0bGluZSwgKmxhc3Rub25ibGFuazsKICAgIGNoYXIgKmJhc2UsICpwdHI7CiAg ICBpbnQgY250OwoKICAgIGlmKGYgPT0gTlVMTCkKCXJldHVybiBkZmx0OwogICAgaWYoZmVv ZihmKSkKCXJldHVybiAiPiBFTkQgT0YgRklMRVxuIjsKI2lmIDAJLyogWFhYIHdjZiAqLwoj aWZkZWYgX19saW51eF9fCiAgICBiYXNlID0gKGNoYXIgKilmLT5fSU9fcmVhZF9iYXNlOwog ICAgcHRyID0gKGNoYXIgKilmLT5fSU9fcmVhZF9wdHI7CiAgICBjbnQgPSBwdHIgLSBiYXNl OwojZWxzZQogICAgYmFzZSA9IChjaGFyICopZi0+X2Jhc2U7CiAgICBwdHIgPSAoY2hhciAq KWYtPl9wdHI7CiAgICBjbnQgPSBmLT5fY250OwojZW5kaWYKICAgIGlmKGNudCA8PSAwIHx8 IGJhc2UgPT0gTlVMTCB8fCBwdHIgPT0gTlVMTCkKCXJldHVybiBkZmx0OwoKICAgIHAgPSBw dHI7CiAgICBmb3IobnByZSA9IG5scHJlID0gMDsgLS1wID49IGJhc2UgJiYgbnByZSA8IDEy ODsgbnByZSsrKSB7CglpZigqcCA9PSAnXG4nKSB7CgkgICAgaWYoKytubHByZSA+IDIgfHwg bnByZSA+IDYwKSB7CgkJcHJlZG90cyA9IDA7CgkJYnJlYWs7CgkgICAgfQoJfSBlbHNlIGlm KCpwICYgMHg4MCB8fCAqcCA9PSAwKQkJLyogYmluYXJ5IGRhdGE/ICovCgkgICAgYnJlYWs7 CiAgICB9CiAgICBzdHJjcHkoYnVmLCAiPiAuLi4gIik7CiAgICBxID0gYnVmICsgMiArIHBy ZWRvdHM7CiAgICB0YWIgPSAyICsgcHJlZG90czsKICAgIGZvcihwID0gcHRyIC0gbnByZTsg cCA8IHB0cjsgKSB7Cglzd2l0Y2goKnErKyA9ICpwKyspIHsKCWNhc2UgJ1xuJzogY2FzZSAn XHInOgkqcSsrID0gJz4nOyAqcSsrID0gJyAnOyB0YWIgPSAyOyBicmVhazsKCWNhc2UgJ1x0 JzoJCXRhYiArPSA4LSh0YWImNyk7IGJyZWFrOwoJZGVmYXVsdDoJCXRhYisrOwoJfQogICAg fQogICAgbGVuID0gbnByZTsKICAgIG5wb3N0ID0gbmxwb3N0ID0gMDsKICAgIGxhc3RsaW5l ID0gbGFzdG5vbmJsYW5rID0gcTsKICAgIGZvcihwID0gcHRyOyAgcCA8IHB0ciArIGNudCAm JiBsZW4gPCAxMjg7ICBsZW4rKywgcSsrKSB7CgkqcSA9ICpwKys7CglpZigqcSA9PSAnXG4n KSB7CgkgICAgaWYobmxwb3N0ID09IDApIHsKCQl3aGlsZSgtLXRhYiA+IDApICorK3EgPSAn LSc7CS8qIFBvaW50IC0tLV4gdG8gZXJyb3IgKi8KCQkqKytxID0gJ14nOyAqKytxID0gJ1xu JzsKCSAgICB9CgkgICAgaWYoKCsrbmxwb3N0ID49IDIgfHwgbGVuID4gODApICYmIGxlbiA+ IDMyKSB7CgkJcG9zdGRvdHMgPSAwOwoJCWJyZWFrOwoJICAgIH0KCSAgICBsYXN0bGluZSA9 IHE7CgkgICAgKisrcSA9ICc+JzsgKisrcSA9ICcgJzsKCX0gZWxzZSBpZigqcSAmIDB4ODAg fHwgKnEgPT0gMCkJCS8qIEJpbmFyeSBkYXRhICovCgkgICAgYnJlYWs7CgllbHNlIGlmKGlz cHJpbnQoKnEpKQoJICAgIGxhc3Rub25ibGFuayA9IHE7CiAgICB9CiAgICBpZihwb3N0ZG90 cyAmJiBsYXN0bm9uYmxhbmsgPCBsYXN0bGluZSkgewoJcSA9IGxhc3RsaW5lOwkJLyogU3Vw cHJlc3MgdHJhaWxpbmcgd2hpdGUgc3BhY2UgKi8KCXBvc3Rkb3RzID0gMDsJCS8qIHRvIGF2 b2lkIGZpbmFsIGBgPiAuLi4nJyAqLwogICAgfQogICAgc3RyY3B5KHEsICIgLi4uXG4iICsg NC1wb3N0ZG90cyk7CiAgICBpZihubHBvc3QgPT0gMCkgewoJcSArPSBzdHJsZW4ocSk7Cgl3 aGlsZSgtLXRhYiA+IDApICpxKysgPSAnLSc7CglzdHJjcHkocSwgIl5cbiIpOwogICAgfQog ICAgaWYoY29udCkgZnJlZShjb250KTsKICAgIHJldHVybiAoY29udCA9IHN0cmR1cChidWYp KTsKI2Vsc2UKICAgIHJldHVybiBkZmx0OwojZW5kaWYKfQoKCiNpZmRlZiBfX2xpbnV4X18K CmV4dGVybiBGSUxFCQkgKkNDX2ZtZW1vcGVuX19GUGNpKGNoYXIgKm1lbSwgaW50IGxlbik7 CmV4dGVybiBzdHJ1Y3Qgc3RkaW9fbWFyayAqQ0Nfc3RkaW9fc2V0bWFya19fRlAxMHN0ZGlv X21hcmtQOHN0ZGlvYnVmKHN0cnVjdCBzdGRpb19tYXJrICptLCBGSUxFICpmKTsKZXh0ZXJu IGludAkJICBDQ19zdGRpb19zZWVrbWFya19fRlAxMHN0ZGlvX21hcmsoc3RydWN0IHN0ZGlv X21hcmsgKm1hcmspOwpleHRlcm4gdm9pZCAgCQkgIENDX3N0ZGlvX2ZyZWVtYXJrX19GUDEw c3RkaW9fbWFyayhzdHJ1Y3Qgc3RkaW9fbWFyayAqbWFyayk7IAoKRklMRSAqZnN0cm9wZW4o Y2hhciAqbWVtLCBpbnQgbGVuLCBjaGFyICptb2RlKQp7IHJldHVybiBDQ19mbWVtb3Blbl9f RlBjaShtZW0sIGxlbik7IH0KCnN0cnVjdCBzdGRpb19tYXJrICpzdGRpb19zZXRtYXJrKHN0 cnVjdCBzdGRpb19tYXJrICptLCBGSUxFICpmKQp7IHJldHVybiBDQ19zdGRpb19zZXRtYXJr X19GUDEwc3RkaW9fbWFya1A4c3RkaW9idWYobSwgZik7IH0KCmludCBzdGRpb19zZWVrbWFy ayhzdHJ1Y3Qgc3RkaW9fbWFyayAqbWFyaykKeyByZXR1cm4gQ0Nfc3RkaW9fc2Vla21hcmtf X0ZQMTBzdGRpb19tYXJrKG1hcmspICE9IEVPRjsgfQoKdm9pZCBzdGRpb19mcmVlbWFyayhz dHJ1Y3Qgc3RkaW9fbWFyayAqbWFyaykKeyBDQ19zdGRpb19mcmVlbWFya19fRlAxMHN0ZGlv X21hcmsobWFyayk7IH0KCgoJLyogRW5kIExpbnV4IChHTlUgbGliYywgbW9yZSBvciBsZXNz KSAqLwoKI2Vsc2UgICAvKiBSb3VnaGx5IHZhbmlsbGEgc3RkaW8gKi8KCiNpZiBkZWZpbmVk KEFJWCkgfHwgZGVmaW5lZChfX29zZl9fKSB8fCAxIC8qIFhYWCB3Y2YgKi8KCi8qIFRoZSBz dGRpby1idWYtaGFja2luZyBjb2RlIGJlbG93IGRvZXNuJ3Qgd29yayBvbiBzb21lIHN5c3Rl bXMsIHNvCiAqIGp1c3Qgc2hpcCB0aGUgZGF0YSB0aHJvdWdoIGEgcGlwZS4gIFNtYWxsICg4 Sz8pIHNpemUgbGltaXQuCiAqLwpGSUxFICpmc3Ryb3BlbihjaGFyICpzdHIsIGludCBsZW4s IGNoYXIgKm1vZGUpCnsKICAgaW50IHBmZFsyXTsKICAgaWYocGlwZShwZmQpIDwgMCkKICAg IHJldHVybiBOVUxMOwogICB3cml0ZShwZmRbMV0sIHN0ciwgbGVuKTsKICAgY2xvc2UocGZk WzFdKTsKICAgcmV0dXJuIGZkb3BlbihwZmRbMF0sICJyIik7Cn0KCiNlbHNlIC8qIEV2ZW4g bW9yZSBuZWFybHkgdmFuaWxsYSBzdGRpbyAqLwoKLyoKICogVGhpcyBvbmUgaXMgc3RkaW8g ZGVwZW5kZW50LCBidXQgc2VlbXMgdG8gd29yayBvbiBhIGZhaXIgdmFyaWV0eSBvZgogKiBp bXBsZW1lbnRhdGlvbnMuCiAqLwpGSUxFICoKZnN0cm9wZW4oY2hhciAqc3RyLCBpbnQgbGVu LCBjaGFyICptb2RlKQp7CglGSUxFICpmOwoKCWYgPSBmb3BlbigiL2Rldi9udWxsIiwgbW9k ZSk7CS8qIEhvdyBlbHNlIGRvIEkgZ2V0IGEgRklMRSAqPyAqLwoJaWYoZiA9PSBOVUxMKQoJ ICAgIHJldHVybiBOVUxMOwoJc2V0YnVmKGYsIE5VTEwpOwoJY2xvc2UoZmlsZW5vKGYpKTsK CiNpZmRlZiBocHV4CglmLT5fX2ZpbGVMID0gZi0+X19maWxlSCA9IC0xOwojZWxzZQoJZi0+ X2ZpbGUgPSAtMTsKI2VuZGlmCglmLT5fY250ID0gbGVuOwoJZi0+X3B0ciA9IGYtPl9iYXNl ID0gKHVuc2lnbmVkIGNoYXIgKikgc3RyOwoJZi0+X2ZsYWcgJj0gfihfSU9OQkZ8X0lPTVlC VUZ8X0lPRU9GfF9JT0VSUik7CglyZXR1cm4gZjsKfQojZW5kaWYgLyogbm9uLUFJWCwgbm9u LU9TRiBzdGRpbyAqLwoKCgoJLyogTW9yZSB3aXRoIHZhbmlsbGEgc3RkaW86CgkgKiBhdHRl bXB0IHRvIHNlZWsgYmFja3dhcmRzIChiYWNrdHJhY2spIG9uIGEgc3RyZWFtLgoJICogVXNl IHRydWUgc2Vla2luZyB3aGVyZSBwb3NzaWJsZSwgb3RoZXJ3aXNlIGF0dGVtcHQgdG8KCSAq IGZpZGRsZSB3aXRoIHRoZSBidWZmZXIgcG9pbnRlcnMgYW5kIHByYXkgaXQncyBzdGlsbCBp biB0aGUgYnVmZmVyCgkgKiAoc2lnaCkuICAgW0dOVSBsaWJjIGhhcyByZWFsIGZhY2lsaXRp ZXMgZm9yIGRvaW5nIHRoaXMhXQoJICovCnN0cnVjdCBzdGRpb19tYXJrIHsKCUZJTEUgKmY7 Cglsb25nIGZwb3M7CglGSUxFIGZjb3B5OwoJY2hhciBmY2hhcnNbOF07Cn07CgpzdHJ1Y3Qg c3RkaW9fbWFyayAqCnN0ZGlvX3NldG1hcmsocmVnaXN0ZXIgc3RydWN0IHN0ZGlvX21hcmsg Km1hcmssIHJlZ2lzdGVyIEZJTEUgKnN0cmVhbSkKewogICAgaWYobWFyayA9PSBOVUxMKQoJ bWFyayA9IE9PR0xOZXdFKHN0cnVjdCBzdGRpb19tYXJrLCAic3RkaW9fc2V0bWFyayBtYXJr Iik7CiAgICBtYXJrLT5mID0gc3RyZWFtOwoKICAgIG1hcmstPmZwb3MgPSBpc2F0dHkoZmls ZW5vKHN0cmVhbSkpID8gLTEgOiBmdGVsbChzdHJlYW0pOwogICAgbWFyay0+ZmNvcHkgPSAq c3RyZWFtOwojaWYgMAkvKiBYWFggd2NmICovCiAgICBtZW1jcHkobWFyay0+ZmNoYXJzLCBt YXJrLT5mLT5fYmFzZSwgc2l6ZW9mKG1hcmstPmZjaGFycykpOwojZW5kaWYKICAgIHJldHVy biBtYXJrOwp9CgppbnQKc3RkaW9fc2Vla21hcmsocmVnaXN0ZXIgc3RydWN0IHN0ZGlvX21h cmsgKm1hcmspCnsKICAgIGlmKG1hcmstPmZwb3MgPT0gLTEgfHwgZnNlZWsobWFyay0+Ziwg bWFyay0+ZnBvcywgMCkgPT0gLTEpIHsKI2lmIDAJLyogWFhYIHdjZiAqLwoJLyogTWF5YmUg aXQncyBhIHBpcGUgb3Igc29ja2V0LCBzbyBzZWVrcyBmYWlsLgoJICogVHJ5IHJlcG9zaXRp b25pbmcgaW5zaWRlIHRoZSBzdGRpbyBidWZmZXIuCgkgKiBUaGlzIGlzIGEgc3RkaW8tZGVw ZW5kZW50IGtsdWRnZSwgYnV0IG1pZ2h0IHdvcmsuCgkgKi8KCWlmKG1hcmstPmYtPl9iYXNl ID09IG1hcmstPmZjb3B5Ll9iYXNlICYmCgkgICBtZW1jbXAobWFyay0+ZmNoYXJzLCBtYXJr LT5mLT5fYmFzZSwgc2l6ZW9mKG1hcmstPmZjaGFycykpID09IDApIHsKCQkgICAgLyogQnVm ZmVyIGxvb2tzIHVuY2hhbmdlZC4gIFJlc2V0IHBvaW50ZXJzLiAqLwoJICAgICoobWFyay0+ ZikgPSBtYXJrLT5mY29weTsKCX0gZWxzZSB7CgkgICAgcmV0dXJuIDA7CS8qIEZhaWxlZCAq LwoJfQojZWxzZQoJcmV0dXJuIDA7CiNlbmRpZgogICAgfQogICAgcmV0dXJuIDE7CQkvKiBT dWNjZWVkZWQgKi8KfQoKdm9pZApzdGRpb19mcmVlbWFyayhzdHJ1Y3Qgc3RkaW9fbWFyayAq bWFyaykKewogICAgT09HTEZyZWUobWFyayk7Cn0KCiNlbmRpZiAgLyogdmFuaWxsYSBzdGRp byAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCmludApmaGFzZGF0YShGSUxFICpmKQp7 CiAgICByZXR1cm4gRl9IQVNEQVRBKGYpOwp9CgppbnQKYXN5bmNfZ2V0YyhyZWdpc3RlciBG SUxFICpmKQp7CgogICAgZmRfc2V0IGZkczsKICAgIHN0YXRpYyBzdHJ1Y3QgdGltZXZhbCBu b3RpbWUgPSB7IDAsIDAgfTsKCiAgICBpZihGX0hBU0RBVEEoZikpCglyZXR1cm4gZ2V0Yyhm KTsKICAgIEZEX1pFUk8oJmZkcyk7CiAgICBGRF9TRVQoZmlsZW5vKGYpLCAmZmRzKTsKICAg IGlmKHNlbGVjdChmaWxlbm8oZikrMSwgJmZkcywgTlVMTCwgTlVMTCwgJm5vdGltZSkgPT0g MSkKCXJldHVybiBmZ2V0YyhmKTsKICAgIHJldHVybiBOT0RBVEE7Cn0KCmludAphc3luY19m bmV4dGMocmVnaXN0ZXIgRklMRSAqZiwgcmVnaXN0ZXIgaW50IGZsYWdzKQp7CiAgICByZWdp c3RlciBpbnQgYzsKCiAgICBjID0gYXN5bmNfZ2V0YyhmKTsKICAgIGZvcig7OykgewoJc3dp dGNoKGMpIHsKCWNhc2UgRU9GOgoJY2FzZSBOT0RBVEE6CgkgICAgcmV0dXJuKGMpOwoKCWNh c2UgJyAnOgoJY2FzZSAnXHQnOgoJICAgIGJyZWFrOwkJCS8qIEFsd2F5cyBza2lwIGJsYW5r cyBhbmQgdGFicyAqLwoKCWNhc2UgJyMnOgoJICAgIGlmKGZsYWdzICYgMikJCS8qIDI6IHN0 b3Agb24gY29tbWVudHMsIGVsc2Ugc2tpcCAqLwoJCWdvdG8gZmltOwoKCSAgICB3aGlsZSgo YyA9IGdldGMoZikpICE9ICdcbicgJiYgYyAhPSBFT0YpCgkJOwoJICAgIGNvbnRpbnVlOwkJ CS8qIFJlc2NhbiB0aGlzIGMgKi8KCgljYXNlICdcbic6CgkgICAgaWYoIShmbGFncyAmIDEp KQkJLyogMTogc3RvcCBvbiBcbidzLCBlbHNlIHNraXAgdGhlbSAqLwoJCWJyZWFrOwoJCQkJ ICAgIAkvKiBmbGFncyYxID0+IGZhbGwgaW50byBkZWZhdWx0ICovCgoJZGVmYXVsdDoKCSBm aW06CgkgICAgdW5nZXRjKGMsIGYpOwoJICAgIHJldHVybihjKTsKCX0KCgljID0gYXN5bmNf Z2V0YyhmKTsKICAgIH0KfQo= --===_0_Sun_Nov__3_13:11:14_PST_1996--