Date: Sun, 25 Mar 2007 18:52:39 +0530 From: "Sam Arun Raj Seeniraj" <samarunraj@gmail.com> To: current@freebsd.org Subject: Resurrecting old FreeBSD size with a rewrite using libelf Message-ID: <4fd6fc030703250622g36ddd5f9r833fb4440958a249@mail.gmail.com>
next in thread | raw e-mail | index | archive | help
------=_Part_169866_31505932.1174828959441 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline Hello there, This patch is to resurrect the old FreeBSD size with a rewrite using libelf. Currently supports elf objects, ar(1) archives and core dumps in elf. Can handle ELF of various architectures using libelf but doesn't support any other object file formats unlike the GNU size. The cmdline parameters as similar to the GNU size minus the long formats. The output will be also be similar save for difference in indentation. This is my first patch to FreeBSD & new to the code style, recent convert from Windows :). Looking for a public review. Tested by doing, - make universe - Comparing output of GNU size versus this against a vast number of elf objects from different architectures. - core dumps from i386,amd64 and sparc64 - These were the only ones I could lay my hands on. (NOTE: Will disable GNU size) Apply against, /usr in -current as "patch -p0 < size.diff" Cheers, -Sam Arun Raj samarunraj@gmail.com ------=_Part_169866_31505932.1174828959441 Content-Type: text/x-diff; name=size.diff; charset=ANSI_X3.4-1968 Content-Transfer-Encoding: base64 X-Attachment-Id: f_ezpit4so Content-Disposition: attachment; filename="size.diff" ZGlmZiAtTmF1ciBzcmMvZ251L3Vzci5iaW4vYmludXRpbHMvTWFrZWZpbGUgc3JjMS9nbnUvdXNy LmJpbi9iaW51dGlscy9NYWtlZmlsZQotLS0gc3JjL2dudS91c3IuYmluL2JpbnV0aWxzL01ha2Vm aWxlCUZyaSBKdW4gMjUgMTM6MDQ6NTYgMjAwNAorKysgc3JjMS9nbnUvdXNyLmJpbi9iaW51dGls cy9NYWtlZmlsZQlTdW4gSmFuIDE0IDA1OjQ5OjQwIDIwMDcKQEAgLTIsNiArMiw2IEBACiAKIFNV QkRJUj0JCWxpYmliZXJ0eSBsaWJiZmQgbGlib3Bjb2RlcyBsaWJiaW51dGlscyBcCiAJCWFkZHIy bGluZSBhciBhcyBsZCBubSBvYmpjb3B5IG9iamR1bXAgcmFubGliIHJlYWRlbGYgXAotCQlzaXpl IHN0cmluZ3Mgc3RyaXAgZG9jCisJCXN0cmluZ3Mgc3RyaXAgZG9jCiAKIC5pbmNsdWRlIDxic2Qu c3ViZGlyLm1rPgpkaWZmIC1OYXVyIHNyYy91c3IuYmluL01ha2VmaWxlIHNyYzEvdXNyLmJpbi9N YWtlZmlsZQotLS0gc3JjL3Vzci5iaW4vTWFrZWZpbGUJU3VuIEphbiAxNCAwNTozNzowNyAyMDA3 CisrKyBzcmMxL3Vzci5iaW4vTWFrZWZpbGUJU3VuIEphbiAxNCAwNTo1MDowMSAyMDA3CkBAIC0x NjgsNiArMTY4LDcgQEAKIAlzZWQgXAogCXNoYXIgXAogCXNob3dtb3VudCBcCisJc2l6ZSBcCiAJ JHtfc21idXRpbH0gXAogCXNvY2tzdGF0IFwKIAlzcGxpdCBcCmRpZmYgLU5hdXIgc3JjL3Vzci5i aW4vc2l6ZS9NYWtlZmlsZSBzcmMxL3Vzci5iaW4vc2l6ZS9NYWtlZmlsZQotLS0gc3JjL3Vzci5i aW4vc2l6ZS9NYWtlZmlsZQlUaHUgSmFuICAxIDA1OjMwOjAwIDE5NzAKKysrIHNyYzEvdXNyLmJp bi9zaXplL01ha2VmaWxlCVN1biBKYW4gMTQgMDU6NTA6MTIgMjAwNwpAQCAtMCwwICsxLDggQEAK KyMgJEZyZWVCU0Q6IC9yZXBvbWFuL3IvbmN2cy9zcmMvdXNyLmJpbi9zaXplL01ha2VmaWxlLHYg MS4wIDIwMDcvMDQvMjUgMDE6NTk6MjcgU2FtIEV4cCAkCisKK1BST0c9ICAgc2l6ZQorV0FSTlM/ PSA2CitMREFERD0gIC1sZWxmCisKKy5pbmNsdWRlIDxic2QucHJvZy5taz4KKwpkaWZmIC1OYXVy IHNyYy91c3IuYmluL3NpemUvc2l6ZS4xIHNyYzEvdXNyLmJpbi9zaXplL3NpemUuMQotLS0gc3Jj L3Vzci5iaW4vc2l6ZS9zaXplLjEJVGh1IEphbiAgMSAwNTozMDowMCAxOTcwCisrKyBzcmMxL3Vz ci5iaW4vc2l6ZS9zaXplLjEJU3VuIEphbiAxNCAwNTo1MDoxMCAyMDA3CkBAIC0wLDAgKzEsMTMy IEBACisuXCIgQ29weXJpZ2h0IChjKSAyMDA3IFMuU2FtIEFydW4gUmFqCisuXCIgQWxsIHJpZ2h0 cyByZXNlcnZlZC4KKy5cIgorLlwiIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLlwiIG1vZGlmaWNhdGlvbiwgYXJlIHBl cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworLlwiIGFyZSBt ZXQ6CisuXCIgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo ZSBhYm92ZSBjb3B5cmlnaHQKKy5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisuXCIgMi4gUmVkaXN0cmlidXRpb25zIGlu IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy5cIiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIgaW4gdGhlCisuXCIgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy5cIgorLlwiIFRISVMgU09GVFdBUkUgSVMg UFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKy5c IiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM SU1JVEVEIFRPLCBUSEUKKy5cIiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorLlwiIEFSRSBESVNDTEFJTUVE LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF CisuXCIgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN UExBUlksIE9SIENPTlNFUVVFTlRJQUwKKy5cIiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworLlwiIE9SIFNFUlZJ Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU SU9OKQorLlwiIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisuXCIgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorLlwiIE9V VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T U0lCSUxJVFkgT0YKKy5cIiBTVUNIIERBTUFHRS4KKy5cIgorLlwiICRGcmVlQlNEOiAvcmVwb21h bi9yL25jdnMvc3JjL3Vzci5iaW4vc2l6ZS9zaXplLjEsdiAxLjAgMjAwNy8wNC8yNSAxNzo1ODoy MiBTYW0gRXhwICQKKy5cIgorLkRkIE1hcmNoIDI1LCAyMDA3CisuRHQgU0laRSAxCisuT3MKKy5T aCBOQU1FCisuTm0gc2l6ZQorLk5kICJkaXNwbGF5IHNlY3Rpb24gc2l6ZXMgYW5kIHRvdGFsIHNp emUgaW4iCisuVG4gRUxGCitmaWxlcy4KKy5TaCBTWU5PUFNJUworLk5tCisuT3AgRmwgQWRob3R4 CisuT3AgQXIKKy5TaCBERVNDUklQVElPTgorVGhlCisuTm0KK3V0aWxpdHkKK2xpc3RzIHRoZSBz aXplIG9mIHZhcmlvdXMgc2VjdGlvbnMgYW5kIHRvdGFsIHNpemUgKGlmIGNob29zZW4pIGZvciBl YWNoIGlucHV0CisuQXIgZmlsZS4KK1RoZQorLk5tCit1dGlsaXR5IGNhbiBvcGVyYXRlIG9uIEVM RiBvYmplY3QsCisuWHIgYXIgMQorYXJjaGl2ZXMsIGFuZCBjb3JlIGR1bXBzLgorLlBwCitJZiBu byBmaWxlIG5hbWUgaXMgc3BlY2lmaWVkIGluIHRoZSBpbnB1dCwgImEub3V0IiBpcyBhc3N1bWVk LgorLlBwCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZToKKy5CbCAtdGFnIC13 aWR0aCBpbmRlbnQKKy5JdCBGbCBBCitUaGUgb3V0cHV0IG9mCisuTm0KK3dpbGwgcmVzZW1ibGUg b3V0cHV0IGZyb20gU3lzdGVtIFYKKy5ObSAuCitCeSBkZWZhdWx0LCBvbmUgbGluZSBvZiBvdXRw dXQgaXMgZ2VuZXJhdGVkIGZvciBlYWNoIEVMRiBvYmplY3Qgb3IgZWFjaCBtb2R1bGUKK2luIGFu IGFyY2hpdmUsIGlmIHRoaXMgb3B0aW9uIGlzIG5vdCBjaG9vc2VuLgorLkl0IEZsIHQKK1Nob3dz IGN1bXVsYXRpdmUgdG90YWxzIG9mIHNlY3Rpb24gc2l6ZXMgZnJvbSBhbGwgb2JqZWN0cy4gTm90 IGF2YWlsYWJsZSB3aGVuCitTeXN0ZW0gViBvdXRwdXQgZm9ybWF0CisuRmwgQQoraXMgY2hvb3Nl bi4KKy5JdCBGbCBkIHwgRmwgbyB8IEZsIHgKK1RoZSBzZWN0aW9uIHNpemVzIGNhbiBiZSBkaXNw bGF5ZWQgZWl0aGVyIGluIGRlY2ltYWwsIG9jdGFsIG9yIGhleGFkZWNpbWFsIGJ5CitjaG9vc2lu ZyBvbmUgb2YgdGhlc2Ugb3B0aW9ucy4gVG90YWxzCisuRmwgdAorYXJlIGFsd2F5cyBkaXNwbGF5 ZWQgaW4gdHdvIHJhZGl4ZXM7IGRlY2ltYWwgYW5kIGhleGFkZWNpbWFsIGZvcgorLkZsIGQKK29y CisuRmwgeAorb3V0cHV0LCBvciBvY3RhbCBhbmQgaGV4YWRlY2ltYWwgaWYKKy5GbCBvCitpcyBj aG9vc2VuLgorLkl0IEZsIGgKK1RoaXMgcHJpbnRzIGEgdXNhZ2Ugc3VtbWFyeSBhbmQgZXhpdHMu CisuRWwKKy5TaCBFWElUIFNUQVRVUworLkV4IC1zdGQKKy5TaCBFWEFNUExFUworVGhlIGZvbGxv d2luZyBhcmUgZXhhbXBsZXMgb2YgdHlwaWNhbCB1c2FnZQorb2YgdGhlCisuTm0KK2NvbW1hbmQ6 CisuUHAKKy5EbCAiJCBzaXplIC9iaW4vbHMiCisuRGwgInRleHQgICAgICAgZGF0YSAgICAgICBi c3MgICAgICAgIGRlYyAgICAgICAgaGV4ICAgICAgICBmaWxlbmFtZSIKKy5EbCAiMjA5NzUgICAg ICA1NDAgICAgICAgIDM5MiAgICAgICAgMjE5MDcgICAgICA1NTkzICAgICAgICAvYmluL2xzIgor LlBwCisuRGwgIiQgc2l6ZSAtdHggL2Jpbi9scyAvYmluL2RkIgorLkRsICJ0ZXh0ICAgICAgIGRh dGEgICAgICAgYnNzICAgICAgICBkZWMgICAgICAgIGhleCAgICAgICAgZmlsZW5hbWUiCisuRGwg IjB4NTFlZiAgICAgMHgyMWMgICAgICAweDE4OCAgICAgIDIxOTA3ICAgICAgNTU5MyAgICAgICAg L2Jpbi9scyIKKy5EbCAiMHgzZGY1ICAgICAweDE3MCAgICAgIDB4MjAwICAgICAgMTY3NDEgICAg ICA0MTY1ICAgICAgICAvYmluL2RkIgorLkRsICIweDhmZTQgICAgIDB4MzhjICAgICAgMHgzODgg ICAgICAzODY0OCAgICAgIDk2ZjggICAgICAgKFRPVEFMUykiCisuU2ggU0VFIEFMU08KKy5YciBh ciAxICwKKy5YciBvYmpkdW1wIDEgLAorLlhyIHJlYWRlbGYgMQorLlJzCisuJUEgIkFUJlQgVW5p eCBTeXN0ZW1zIExhYnMiCisuJVQgIlN5c3RlbSBWIEFwcGxpY2F0aW9uIEJpbmFyeSBJbnRlcmZh Y2UiCisuJU8gaHR0cDovL3d3dy5zY28uY29tL2RldmVsb3BlcnMvZ2FiaS8KKy5SZQorLlNoIEhJ U1RPUlkKK1RoZQorLk5tCit1dGlsaXR5IGZpcnN0IGFwcGVhcmVkIGluCisuQXQgdjYuCitUaGUg bGFzdCBGcmVlQlNEIAorLk5tCit3YXMgZGlzY29udGludWVkIGluIAorLkZ4IHY1ICwKK3doZW4g aTM4Ni1vbmx5IGEub3V0IGZvcm1hdCB3YXMgZHJvcHBlZCBpbiBmYXZvciBvZiBFTEYuCisuU2gg QVVUSE9SUworLkFuIC1ub3NwbGl0CitUaGUKKy5ObQordXRpbGl0eSB3YXMgcmUtd3JpdHRlbiBi eQorLkFuIFMuU2FtIEFydW4gUmFqIEFxIHNhbWFydW5yYWpAZ21haWwuY29tCitUaGlzIG1hbnVh bCBwYWdlIHdhcyB3cml0dGVuIGJ5CisuQW4gUy5TYW0gQXJ1biBSYWogQXEgc2FtYXJ1bnJhakBn bWFpbC5jb20KKy5TaCBMSU1JVEFUSU9OUworVW5saWtlIHRoZSBHTlUKKy5ObQordGhpcyBkb2Vz bid0IHN1cHBvcnQgbXVsdGlwbGUgb2JqZWN0IGZpbGUgZm9ybWF0cywgb25seSBFTEYgdXNpbmcg dGhlCisuWHIgZWxmIDMKK2FuZAorLlhyIGdlbGYgMworQVBJJ3MuCmRpZmYgLU5hdXIgc3JjL3Vz ci5iaW4vc2l6ZS9zaXplLmMgc3JjMS91c3IuYmluL3NpemUvc2l6ZS5jCi0tLSBzcmMvdXNyLmJp bi9zaXplL3NpemUuYwlUaHUgSmFuICAxIDA1OjMwOjAwIDE5NzAKKysrIHNyYzEvdXNyLmJpbi9z aXplL3NpemUuYwlTdW4gSmFuIDE0IDA2OjAxOjE4IDIwMDcKQEAgLTAsMCArMSw4MTYgQEAKKy8q LQorICogQ29weXJpZ2h0IChjKSAyMDA3IFMuU2FtIEFydW4gUmFqCisgKiBBbGwgcmlnaHRzIHJl c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0 aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF IEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9S IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB TEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVD VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO VElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVT RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT VFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFN QUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRDog c3JjL3Vzci5iaW4vc2l6ZS9zaXplLmMsdiAxLjAgMjAwNy8wNC8yNCAxNzo1ODoyMiBTYW0gRXhw ICQiKTsKKworI2luY2x1ZGUgPGVyci5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8 Z2V0b3B0Lmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNs dWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXNleGl0cy5o PgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSA8bGliZWxmLmg+CisjaW5jbHVkZSA8 Z2VsZi5oPgorCisjZGVmaW5lIEJVRl9TSVpFCTQwCisjZGVmaW5lIEVMRl9BTElHTih2YWwseCkg XAorCSgoKHZhbCkgKyAoeCkgLSAxKSA+ICh2YWwpID8gKCgodmFsKSsoeCktMSkgJiB+KCh4KS0x KSkgOiB+MCkKKworI2lmbmRlZiBOVF9BVVhWCisjZGVmaW5lIE5UX0FVWFYgNgorI2VuZGlmCisj aWZuZGVmIE5UX0xXUFNUQVRVUworI2RlZmluZSBOVF9MV1BTVEFUVVMgMTYKKyNlbmRpZgorI2lm bmRlZiBOVF9QUkZQUkVHCisjZGVmaW5lIE5UX1BSRlBSRUcgMgorI2VuZGlmCisjaWZuZGVmIE5U X1BTVEFUVVMKKyNkZWZpbmUgTlRfUFNUQVRVUyAxMAorI2VuZGlmCisjaWZuZGVmIE5UX1BTSU5G TworI2RlZmluZSBOVF9QU0lORk8gMTMKKyNlbmRpZgorI2lmbmRlZiBOVF9QUlhGUFJFRworI2Rl ZmluZSBOVF9QUlhGUFJFRyAweDQ2ZTYyYjdmCisjZW5kaWYKKyNpZm5kZWYgUFRfR05VX0VIX0ZS QU1FCisjZGVmaW5lIFBUX0dOVV9FSF9GUkFNRQkoUFRfTE9PUyArIDB4NDc0ZTU1MCkKKyNlbmRp ZgorI2lmbmRlZiBQVF9HTlVfU1RBQ0sKKyNkZWZpbmUgUFRfR05VX1NUQUNLIChQVF9MT09TICsg MHg0NzRlNTUxKQorI2VuZGlmCisKK2VudW0gb3V0cHV0X3N0eWxlIHsKKwlTVFlMRV9CRVJLRUxF WSwKKwlTVFlMRV9TWVNWCit9OworCitlbnVtIHJhZGl4X3N0eWxlIHsKKwlSQURJWF9PQ1RBTCwK KwlSQURJWF9ERUNJTUFMLAorCVJBRElYX0hFWCAKK307CisKK3NpemVfdCBzZWNfbmFtZV9sZW47 Cit1aW50MzJfdCBic3Nfc2l6ZV90b3RhbCwgZGF0YV9zaXplX3RvdGFsLCB0ZXh0X3NpemVfdG90 YWw7Cit1aW50MzJfdCBic3Nfc2l6ZSwgZGF0YV9zaXplLCB0ZXh0X3NpemUsIHRvdGFsX3NpemU7 CitpbnQgc2hvd190b3RhbHM7CitlbnVtIHJhZGl4X3N0eWxlIHJhZGl4OworZW51bSBvdXRwdXRf c3R5bGUgc3R5bGU7Citjb25zdCBjaGFyIGRlZmF1bHRfbmFtZVtdID0gImEub3V0IjsKKworaW50 CWhhbmRsZV9lbGYoY2hhciBjb25zdCAqKTsKK2ludAloYW5kbGVfY29yZShjaGFyIGNvbnN0ICos IEVsZiAqZWxmLCBHRWxmX0VoZHIgKik7Cit2b2lkCWhhbmRsZV9jb3JlX25vdGUoRWxmICosIEdF bGZfRWhkciAqLCBHRWxmX1BoZHIgKiwgcGlkX3QpOwordm9pZAlnZXRfY29yZV9jbWRsaW5lX3Bp ZChFbGYgKiwgR0VsZl9FaGRyICosIEdFbGZfUGhkciAqLAorCSAgICBjaGFyICoqLCBwaWRfdCAq KTsKK3ZvaWQJaGFuZGxlX3BoZHIoRWxmICosIEdFbGZfRWhkciAqLCBHRWxmX1BoZHIgKiwgdWlu dDMyX3QsCisgICAgCSAgICBjb25zdCBjaGFyICopOwordm9pZAl1c2FnZSh2b2lkKTsKK3ZvaWQJ cHJpbnRfbnVtYmVyKGludCwgdWludDMyX3QsIGVudW0gcmFkaXhfc3R5bGUsIGNoYXIpOwordm9p ZAliZXJrZWxleV9oZWFkZXIodm9pZCk7Cit2b2lkCWJlcmtlbGV5X2Zvb3Rlcihjb25zdCBjaGFy ICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK3ZvaWQJYmVya2VsZXlfY2FsYyhHRWxm X1NoZHIgKik7Cit2b2lkCWJlcmtlbGV5X3RvdGFscyh2b2lkKTsKK3ZvaWQJc3lzdl9oZWFkZXIo Y29uc3QgY2hhciAqLCBFbGZfQXJoZHIgKik7Cit2b2lkCXN5c3ZfZm9vdGVyKHZvaWQpOwordm9p ZAlzeXN2X2NhbGMoRWxmICosIEdFbGZfRWhkciAqLCBHRWxmX1NoZHIgKiwgaW50KTsKKworLyoK KyAqIHNpemUgdXRpbGl0eSB1c2luZyBlbGYoMykgYW5kIGdlbGYoMykgQVBJIHRvIGxpc3Qgc2Vj dGlvbiBzaXplcyBhbmQKKyAqIHRvdGFsIGluIGVsZiBmaWxlcy4gU3VwcG9ydHMgb25seSBlbGYg ZmlsZXMgKGNvcmUgZHVtcHMgaW4gZWxmCisgKiBpbmNsdWRlZCkgdGhhdCBjYW4gYmUgb3BlbmVk IGJ5IGxpYmVsZiwgb3RoZXIgZm9ybWF0cyBhcmUgbm90IHN1cHBvcnRlZC4KKyAqLworaW50Citt YWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJaW50IGNoLCBleGl0X2NvZGU7CisKKwlz ZWNfbmFtZV9sZW4gPSAxOTsKKwlleGl0X2NvZGUgPSBFWF9PSzsKKwlzdHlsZSA9IFNUWUxFX0JF UktFTEVZOworCXJhZGl4ID0gUkFESVhfREVDSU1BTDsKKwlpZiAoZWxmX3ZlcnNpb24oRVZfQ1VS UkVOVCkgPT0gRVZfTk9ORSkKKwkJZXJyeChFWF9TT0ZUV0FSRSwgIkVMRiBsaWJyYXJ5IGluaXRp YWxpemF0aW9uIGZhaWxlZDogJXMiLAorCQkgICAgZWxmX2Vycm1zZygtMSkpOworCisJd2hpbGUg KChjaCA9IGdldG9wdChhcmdjLCBhcmd2LCAiQWRob3R4IikpICE9IC0xKQorCQlzd2l0Y2goKGNo YXIpY2gpIHsKKwkJY2FzZSAnQSc6CisJCQlzdHlsZSA9IFNUWUxFX1NZU1Y7CisJCQlicmVhazsK KwkJY2FzZSAnZCc6CisJCQlyYWRpeCA9IFJBRElYX0RFQ0lNQUw7CisJCQlicmVhazsKKwkJY2Fz ZSAndCc6CisJCQlzaG93X3RvdGFscyA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAnbyc6CisJCQly YWRpeCA9IFJBRElYX09DVEFMOworCQkJYnJlYWs7CisJCWNhc2UgJ3gnOgorCQkJcmFkaXggPSBS QURJWF9IRVg7CisJCQlicmVhazsKKwkJY2FzZSAnaCc6CisJCWNhc2UgJz8nOgorCQlkZWZhdWx0 OgorCQkJdXNhZ2UoKTsKKwkJCS8qIE5PVFJFQUNIRUQgKi8KKwkJfQorCWFyZ2MgLT0gb3B0aW5k OworCWFyZ3YgKz0gb3B0aW5kOworCisJaWYgKCEqYXJndikgeworCQlleGl0X2NvZGUgPSBoYW5k bGVfZWxmKGRlZmF1bHRfbmFtZSk7CisJCWlmIChleGl0X2NvZGUgPT0gRVhfU09GVFdBUkUgfHwg ZXhpdF9jb2RlID09IEVYX0RBVEFFUlIpIAorCQkJd2FybngoIiVzOiBGaWxlIGZvcm1hdCBub3Qg cmVjb2duaXplZCIsIGRlZmF1bHRfbmFtZSk7CisJCWlmIChleGl0X2NvZGUgPT0gRVhfTk9JTlBV VCkKKwkJCXdhcm54KCInJXMnOiBObyBzdWNoIGZpbGUiLCBkZWZhdWx0X25hbWUpOworCX0KKwll bHNlIHdoaWxlICgqYXJndikgeworCQlleGl0X2NvZGUgPSBoYW5kbGVfZWxmKCphcmd2KTsKKwkJ aWYgKGV4aXRfY29kZSA9PSBFWF9TT0ZUV0FSRSB8fCBleGl0X2NvZGUgPT0gRVhfREFUQUVSUikK KwkJCXdhcm54KCIlczogRmlsZSBmb3JtYXQgbm90IHJlY29nbml6ZWQiLCAqYXJndik7CisJCWlm IChleGl0X2NvZGUgPT0gRVhfTk9JTlBVVCkKKwkJCXdhcm54KCInJXMnOiBObyBzdWNoIGZpbGUi LCAqYXJndik7CisJCWFyZ3YrKzsKKwl9CisJaWYgKHN0eWxlID09IFNUWUxFX0JFUktFTEVZKQor CQliZXJrZWxleV90b3RhbHMoKTsKKyAgICAgICAgcmV0dXJuIChleGl0X2NvZGUpOworfQorCitz dGF0aWMgRWxmX0RhdGEgKgoreGxhdGV0b20oRWxmICplbGYsIEdFbGZfRWhkciAqZWxmaGRyLCB2 b2lkICpfc3JjLCB2b2lkICpfZHN0LAorICAgIEVsZl9UeXBlIHR5cGUsIHNpemVfdCBzaXplKQor eworCUVsZl9EYXRhIHNyYywgZHN0OworCisJc3JjLmRfYnVmID0gX3NyYzsKKwlzcmMuZF90eXBl ID0gdHlwZTsKKwlzcmMuZF92ZXJzaW9uID0gZWxmaGRyLT5lX3ZlcnNpb247CisJc3JjLmRfc2l6 ZSA9IHNpemU7CisJZHN0LmRfYnVmID0gX2RzdDsKKwlkc3QuZF92ZXJzaW9uID0gZWxmaGRyLT5l X3ZlcnNpb247CisJZHN0LmRfc2l6ZSA9IHNpemU7CisJcmV0dXJuIGdlbGZfeGxhdGV0b20oZWxm LCAmZHN0LCAmc3JjLCBlbGZoZHItPmVfaWRlbnRbRUlfREFUQV0pOworfQorCisjZGVmaW5lIE5P VEVfT0ZGU0VUXzMyKG5oZHIsIG5hbWVzeiwgb2Zmc2V0KSAJCQlcCisJKChjaGFyICopbmhkciAr IHNpemVvZihFbGYzMl9OaGRyKSArCQkJXAorCSAgICBFTEZfQUxJR04oKGludDMyX3QpbmFtZXN6 LCA0KSArIG9mZnNldCkKKworI2RlZmluZSBOT1RFX09GRlNFVF82NChuaGRyLCBuYW1lc3osIG9m ZnNldCkgCQkJXAorCSgoY2hhciAqKW5oZHIgKyBzaXplb2YoRWxmMzJfTmhkcikgKwkJCVwKKwkg ICAgRUxGX0FMSUdOKChpbnQzMl90KW5hbWVzeiwgOCkgKyBvZmZzZXQpCisKKyNkZWZpbmUgUElE MzIobmhkciwgbmFtZXN6LCBvZmZzZXQpIAkJCQlcCisJKHBpZF90KSooKGludCAqKSgodWludHB0 cl90KU5PVEVfT0ZGU0VUXzMyKG5oZHIsCVwKKwkgICAgbmFtZXN6LCBvZmZzZXQpKSk7CisKKyNk ZWZpbmUgUElENjQobmhkciwgbmFtZXN6LCBvZmZzZXQpIAkJCQlcCisJKHBpZF90KSooKGludCAq KSgodWludHB0cl90KU5PVEVfT0ZGU0VUXzY0KG5oZHIsCVwKKwkgICAgbmFtZXN6LCBvZmZzZXQp KSk7CisKKyNkZWZpbmUgTkVYVF9OT1RFKGVsZmhkciwgZGVzY3N6LCBuYW1lc3osIG9mZnNldCkg ZG8gewkJXAorCWlmIChlbGZoZHItPmVfaWRlbnRbRUlfQ0xBU1NdID09IEVMRkNMQVNTMzIpIHsg CQlcCisJCW9mZnNldCArPSBFTEZfQUxJR04oKGludDMyX3QpZGVzY3N6LCA0KSArIAlcCisJCSAg ICBzaXplb2YoRWxmMzJfTmhkcikgKyAJCQlcCisJCSAgICAgICAgRUxGX0FMSUdOKChpbnQzMl90 KW5hbWVzeiwgNCk7IAkJXAorCX0gZWxzZSB7CQkJCQkJXAorCQlvZmZzZXQgKz0gRUxGX0FMSUdO KChpbnQzMl90KWRlc2NzeiwgOCkgKyAJXAorCQkgICAgc2l6ZW9mKEVsZjMyX05oZHIpICsgCQkJ XAorCQkgICAgICAgIEVMRl9BTElHTigoaW50MzJfdCluYW1lc3osIDgpOyAJCVwKKwl9CQkJCQkJ CVwKK30gd2hpbGUgKDApCisKKy8qCisgKiBSZXRyaWV2ZXMgdGhlIGNvbW1hbmQgbGluZSBhbmQg cGlkIGZyb20gdGhlIGNvcmUgZmlsZS4KKyAqLwordm9pZAorZ2V0X2NvcmVfY21kbGluZV9waWQo RWxmICplbGYsIEdFbGZfRWhkciAqZWxmaGRyLCBHRWxmX1BoZHIgKnBoZHIsCisgICAgY2hhciAq KmNtZF9saW5lLCBwaWRfdCAqcGlkKQoreworCUdFbGZfT2ZmIG9mZnNldDsJCisJc2l6ZV90IG1h eF9zaXplOworCXBpZF90IHA7CisJRWxmMzJfTmhkciAqbmhkciwgbmhkcl9sOworCXVpbnRwdHJf dCBhZGRyOwkKKwlpbnQgdmVyOwkKKwljaGFyICpkYXRhLCAqbmFtZTsKKwl1aW50OF90IGNsYXNz OwkKKworCWlmIChlbGYgPT0gTlVMTCB8fCBlbGZoZHIgPT0gTlVMTCB8fCBwaGRyID09IE5VTEwg fHwKKwkgICAgcGlkID09IE5VTEwgfHwgY21kX2xpbmUgPT0gTlVMTCkKKwkJcmV0dXJuOworCQor CWRhdGEgPSBlbGZfcmF3ZmlsZShlbGYsICZtYXhfc2l6ZSk7CisJb2Zmc2V0ID0gcGhkci0+cF9v ZmZzZXQ7CisJd2hpbGUgKGRhdGEgIT0gTlVMTCAmJiBvZmZzZXQgPCBwaGRyLT5wX29mZnNldCAr IHBoZHItPnBfZmlsZXN6KSB7CisJCW5oZHIgPSAoRWxmMzJfTmhkciAqKSh1aW50cHRyX3QpKChj aGFyKilkYXRhICsgb2Zmc2V0KTsKKwkJbWVtc2V0KCZuaGRyX2wsIDAsIHNpemVvZihFbGYzMl9O aGRyKSk7CisJCWlmICgheGxhdGV0b20oZWxmLCBlbGZoZHIsICZuaGRyLT5uX3R5cGUsICZuaGRy X2wubl90eXBlLAorCQkJRUxGX1RfV09SRCwgc2l6ZW9mKEVsZjMyX1dvcmQpKSB8fAorCQkgICAg IXhsYXRldG9tKGVsZiwgZWxmaGRyLCAmbmhkci0+bl9kZXNjc3osICZuaGRyX2wubl9kZXNjc3os CisJCQlFTEZfVF9XT1JELCBzaXplb2YoRWxmMzJfV29yZCkpIHx8CisJCSAgICAheGxhdGV0b20o ZWxmLCBlbGZoZHIsICZuaGRyLT5uX25hbWVzeiwgJm5oZHJfbC5uX25hbWVzeiwKKwkJCUVMRl9U X1dPUkQsIHNpemVvZihFbGYzMl9Xb3JkKSkpCisJCQlicmVhazsKKworCQluYW1lID0gKGNoYXIg KikoKGNoYXIgKiluaGRyICsgc2l6ZW9mKEVsZjMyX05oZHIpKTsKKwkJY2xhc3MgPSBlbGZoZHIt PmVfaWRlbnRbRUlfQ0xBU1NdOworCQlzd2l0Y2ggKG5oZHJfbC5uX3R5cGUpIHsKKwkJY2FzZSBO VF9QUlNUQVRVUzogeworCQkJcCA9IDA7CisJCQlpZiAoZWxmaGRyLT5lX2lkZW50W0VJX09TQUJJ XSA9PSBFTEZPU0FCSV9GUkVFQlNEICYmCisJCQkgICAgbmhkcl9sLm5fbmFtZXN6ID09IDB4OCAm JgorCQkJICAgICFzdHJjbXAobmFtZSwiRnJlZUJTRCIpKSB7CisJCQkJaWYgKGNsYXNzID09IEVM RkNMQVNTMzIpIHsKKwkJCQkJYWRkciA9ICh1aW50cHRyX3QpTk9URV9PRkZTRVRfMzIobmhkciwK KwkJCQkJICAgIG5oZHJfbC5uX25hbWVzeiwwKTsKKwkJCQkJdmVyID0gKigoaW50ICopYWRkcik7 CisJCQkJfSBlbHNlIHsKKwkJCQkJYWRkciA9ICh1aW50cHRyX3QpTk9URV9PRkZTRVRfNjQobmhk ciwKKwkJCQkJICAgIG5oZHJfbC5uX25hbWVzeiwwKTsKKwkJCQkJdmVyID0gKigoaW50ICopYWRk cik7CisJCQkJfQorCQkJCWlmICgheGxhdGV0b20oZWxmLCBlbGZoZHIsICZ2ZXIsCisJCQkJICAg ICZ2ZXIsIEVMRl9UX1dPUkQsIHNpemVvZihpbnQpKSkgeworCQkJCQlORVhUX05PVEUoZWxmaGRy LCBuaGRyX2wubl9kZXNjc3osCisJCQkJCSAgICBuaGRyX2wubl9uYW1lc3osIG9mZnNldCk7CisJ CQkJCWNvbnRpbnVlOworCQkJCX0JCisJCQkJaWYgKHZlciA9PSAxICYmIGNsYXNzID09IEVMRkNM QVNTMzIpCisJCQkJCXAgPSBQSUQzMihuaGRyLCBuaGRyX2wubl9uYW1lc3osIDI0KTsKKwkJCQlp ZiAodmVyID09IDEgJiYgY2xhc3MgPT0gRUxGQ0xBU1M2NCkKKwkJCQkJcCA9IFBJRDY0KG5oZHIs IG5oZHJfbC5uX25hbWVzeiwgNDApOworCQkJfQorCQkJaWYgKHhsYXRldG9tKGVsZiwgZWxmaGRy LCAmcCwgJnAsIEVMRl9UX1dPUkQsCisJCQkgICAgc2l6ZW9mKHBpZF90KSkpCisJCQkJKnBpZCA9 IHA7CisJCX0KKwkJYnJlYWs7CisJCWNhc2UgTlRfUFNJTkZPOgorCQljYXNlIE5UX1BSUFNJTkZP OiB7CisJCQkvKiBGcmVlQlNEIDY0LWJpdCAqLworCQkJaWYgKG5oZHJfbC5uX2Rlc2NzeiA9PSAw eDc4ICYmCisJCQkJIXN0cmNtcChuYW1lLCJGcmVlQlNEIikpIHsKKwkJCQkqY21kX2xpbmUgPSBz dHJkdXAoTk9URV9PRkZTRVRfNjQobmhkciwKKwkJCQkgICAgbmhkcl9sLm5fbmFtZXN6LCAzMykp OworCQkJLyogRnJlZUJTRCAzMi1iaXQgKi8KKwkJCX0gZWxzZSBpZiAobmhkcl9sLm5fZGVzY3N6 ID09IDB4NmMgJiYKKwkJCQkhc3RyY21wKG5hbWUsIkZyZWVCU0QiKSkgeworCQkJCSpjbWRfbGlu ZSA9IHN0cmR1cChOT1RFX09GRlNFVF8zMihuaGRyLAorCQkJCSAgICBuaGRyX2wubl9uYW1lc3os IDI1KSk7CisJCQl9CisJCQkvKiBTdHJpcCBhbnkgdHJhaWxpbmcgc3BhY2VzICovCisJCQlpZiAo KmNtZF9saW5lICE9IE5VTEwpIHsKKwkJCQljaGFyICpzOworCisJCQkJcyA9ICpjbWRfbGluZSAr IHN0cmxlbigqY21kX2xpbmUpOworCQkJCXdoaWxlIChzID4gKmNtZF9saW5lKSB7CisJCQkJCWlm ICgqKHMtMSkgIT0gMHgyMCkgYnJlYWs7CisJCQkJCXMtLTsKKwkJCQl9CisJCQkJKnMgPSAwOwor CQkJfQorCQkJYnJlYWs7CisJCX0KKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJCU5FWFRf Tk9URShlbGZoZHIsIG5oZHJfbC5uX2Rlc2Nzeiwgbmhkcl9sLm5fbmFtZXN6LCBvZmZzZXQpOwor CX0KK30KKworLyoKKyAqIFBhcnNlIGluZGl2aWR1YWwgbm90ZSBlbnRyaWVzIGluc2lkZSBhIFBU X05PVEUgc2VnbWVudC4KKyAqLwordm9pZAoraGFuZGxlX2NvcmVfbm90ZShFbGYgKmVsZiwgR0Vs Zl9FaGRyICplbGZoZHIsIEdFbGZfUGhkciAqcGhkciwgcGlkX3QgcGlkKQoreworCXNpemVfdCBt YXhfc2l6ZTsKKwl1aW50NjRfdCByYXdfc2l6ZTsKKwlHRWxmX09mZiBvZmZzZXQ7CisJRWxmMzJf TmhkciAqbmhkciwgbmhkcl9sOworCWNoYXIgYnVmW0JVRl9TSVpFXSwgKmRhdGEsICpuYW1lOwor CisJaWYgKGVsZiA9PSBOVUxMIHx8IGVsZmhkciA9PSBOVUxMIHx8IHBoZHIgPT0gTlVMTCkKKwkJ cmV0dXJuOworCQorCWRhdGEgPSBlbGZfcmF3ZmlsZShlbGYsICZtYXhfc2l6ZSk7CisJb2Zmc2V0 ID0gcGhkci0+cF9vZmZzZXQ7CisJcmF3X3NpemUgPSAwOworCXdoaWxlIChkYXRhICE9IE5VTEwg JiYgb2Zmc2V0IDwgcGhkci0+cF9vZmZzZXQgKyBwaGRyLT5wX2ZpbGVzeikgeworCQluaGRyID0g KEVsZjMyX05oZHIgKikodWludHB0cl90KSgoY2hhciopZGF0YSArIG9mZnNldCk7CisJCW1lbXNl dCgmbmhkcl9sLCAwLCBzaXplb2YoRWxmMzJfTmhkcikpOworCQlpZiAoIXhsYXRldG9tKGVsZiwg ZWxmaGRyLCAmbmhkci0+bl90eXBlLCAmbmhkcl9sLm5fdHlwZSwKKwkJCUVMRl9UX1dPUkQsIHNp emVvZihFbGYzMl9Xb3JkKSkgfHwKKwkJICAgICF4bGF0ZXRvbShlbGYsZWxmaGRyLCAmbmhkci0+ bl9kZXNjc3osICZuaGRyX2wubl9kZXNjc3osCisJCQlFTEZfVF9XT1JELCBzaXplb2YoRWxmMzJf V29yZCkpIHx8CisJCSAgICAheGxhdGV0b20oZWxmLGVsZmhkciwgJm5oZHItPm5fbmFtZXN6LCAm bmhkcl9sLm5fbmFtZXN6LAorCQkJRUxGX1RfV09SRCwgc2l6ZW9mKEVsZjMyX1dvcmQpKSkKKwkJ CWJyZWFrOworCisJCW5hbWUgPSAoY2hhciAqKSgoY2hhciAqKW5oZHIgKyBzaXplb2YoRWxmMzJf TmhkcikpOworCQlzd2l0Y2ggKG5oZHJfbC5uX3R5cGUpIHsKKwkJY2FzZSBOVF9QUlNUQVRVUzog eworCQkJaWYgKGVsZmhkci0+ZV9pZGVudFtFSV9PU0FCSV0gPT0gRUxGT1NBQklfRlJFRUJTRCAm JgorCQkJICAgIG5oZHJfbC5uX25hbWVzeiA9PSAweDggJiYKKwkJCSAgICAhc3RyY21wKG5hbWUs IkZyZWVCU0QiKSkgeworCQkJCWlmIChlbGZoZHItPmVfaWRlbnRbRUlfQ0xBU1NdID09IEVMRkNM QVNTMzIpIHsKKwkJCQkJcmF3X3NpemUgPSAodWludDY0X3QpKigodWludDMyX3QgKikKKwkJCQkJ ICAgICh1aW50cHRyX3QpKG5hbWUgKyAKKwkJCQkJCUVMRl9BTElHTigoaW50MzJfdCkKKwkJCQkJ CW5oZHJfbC5uX25hbWVzeiwgNCkgKyA4KSk7CisJCQkJCXhsYXRldG9tKGVsZiwgZWxmaGRyLCAm cmF3X3NpemUsCisJCQkJCSAgICAmcmF3X3NpemUsIEVMRl9UX1dPUkQsCisJCQkJCSAgICBzaXpl b2YodWludDY0X3QpKTsKKwkJCQl9IGVsc2UgeworCQkJCQlyYXdfc2l6ZSA9ICooKHVpbnQ2NF90 ICopKHVpbnRwdHJfdCkKKwkJCQkJICAgIChuYW1lICsgRUxGX0FMSUdOKChpbnQzMl90KQorCQkJ CQkJbmhkcl9sLm5fbmFtZXN6LCA4KSArIDE2KSk7CisJCQkJCXhsYXRldG9tKGVsZiwgZWxmaGRy LCAmcmF3X3NpemUsCisJCQkJCSAgICAmcmF3X3NpemUsIEVMRl9UX1hXT1JELAorCQkJCQkgICAg c2l6ZW9mKHVpbnQ2NF90KSk7CisJCQkJfQorCQkJfQorCQkJaWYgKHJhd19zaXplICE9IDAgJiYg c3R5bGUgPT0gU1RZTEVfU1lTVikgeworCQkJCSh2b2lkKSBzbnByaW50ZihidWYsIEJVRl9TSVpF LCAiJXMvJWQiLAorCQkJCSAgICAiLnJlZyIsIHBpZCk7CisJCQkJKHZvaWQpIHByaW50ZigiJS0x OHMgIiwgYnVmKTsKKwkJCQlwcmludF9udW1iZXIoMTAsICh1aW50MzJfdClyYXdfc2l6ZSwKKwkJ CQkgICAgcmFkaXgsICcgJyk7CisJCQkJcHJpbnRfbnVtYmVyKDEwLCAodWludDMyX3QpMCwKKwkJ CQkgICAgcmFkaXgsICdcbicpOworCQkJCSh2b2lkKSBwcmludGYoIiUtMThzICIsICIucmVnIik7 CisJCQkJcHJpbnRfbnVtYmVyKDEwLCAodWludDMyX3QpcmF3X3NpemUsCisJCQkJICAgIHJhZGl4 LCAnICcpOworCQkJCXByaW50X251bWJlcigxMCwgKHVpbnQzMl90KTAsIHJhZGl4LCAnXG4nKTsK KwkJCQl0ZXh0X3NpemVfdG90YWwgKz0gcmF3X3NpemUgKiAyOworCQkJfQorCQl9CQorCQlicmVh azsKKwkJY2FzZSBOVF9QUkZQUkVHOiAvKiBzYW1lIGFzIE5UX0ZQUkVHU0VUICovCisJCQlpZiAo c3R5bGUgPT0gU1RZTEVfU1lTVikgeworCQkJCSh2b2lkKSBzbnByaW50ZihidWYsIEJVRl9TSVpF LAorCQkJCSAgICAiJXMvJWQiLCAiLnJlZzIiLCBwaWQpOworCQkJCSh2b2lkKSBwcmludGYoIiUt MThzICIsIGJ1Zik7CisJCQkJcHJpbnRfbnVtYmVyKDEwLCAodWludDMyX3Qpbmhkcl9sLm5fZGVz Y3N6LAorCQkJCSAgICByYWRpeCwgJyAnKTsKKwkJCQlwcmludF9udW1iZXIoMTAsICh1aW50MzJf dCkwLCByYWRpeCwgJ1xuJyk7CisJCQkJKHZvaWQpIHByaW50ZigiJS0xOHMgIiwgIi5yZWcyIik7 CisJCQkJcHJpbnRfbnVtYmVyKDEwLCAodWludDMyX3Qpbmhkcl9sLm5fZGVzY3N6LAorCQkJCSAg ICByYWRpeCwgJyAnKTsKKwkJCQlwcmludF9udW1iZXIoMTAsICh1aW50MzJfdCkwLCByYWRpeCwg J1xuJyk7CisJCQkJdGV4dF9zaXplX3RvdGFsICs9IG5oZHJfbC5uX2Rlc2NzeiAqIDI7CisJCQl9 CisJCQlicmVhazsKKwkJY2FzZSBOVF9BVVhWOgorCQkJaWYgKHN0eWxlID09IFNUWUxFX1NZU1Yp IHsKKwkJCQkodm9pZCkgcHJpbnRmKCIlLTE4cyAiLCAiLmF1eHYiKTsKKwkJCQlwcmludF9udW1i ZXIoMTAsICh1aW50MzJfdCluaGRyX2wubl9kZXNjc3osCisJCQkJICAgIHJhZGl4LCAnICcpOwor CQkJCXByaW50X251bWJlcigxMCwgKHVpbnQzMl90KTAsIHJhZGl4LCAnXG4nKTsKKwkJCQl0ZXh0 X3NpemVfdG90YWwgKz0gbmhkcl9sLm5fZGVzY3N6OworCQkJfQorCQkJYnJlYWs7CisJCWNhc2Ug TlRfUFJYRlBSRUc6CisJCQlpZiAoc3R5bGUgPT0gU1RZTEVfU1lTVikgeworCQkJCSh2b2lkKSBz bnByaW50ZihidWYsIEJVRl9TSVpFLAorCQkJCSAgICAiJXMvJWQiLCAiLnJlZy14ZnAiLCBwaWQp OworCQkJCSh2b2lkKSBwcmludGYoIiUtMThzICIsIGJ1Zik7CisJCQkJcHJpbnRfbnVtYmVyKDEw LCAodWludDMyX3Qpbmhkcl9sLm5fZGVzY3N6LAorCQkJCSAgICByYWRpeCwgJyAnKTsKKwkJCQlw cmludF9udW1iZXIoMTAsICh1aW50MzJfdCkwLCByYWRpeCwgJ1xuJyk7CisJCQkJKHZvaWQpIHBy aW50ZigiJS0xOHMgIiwgIi5yZWcteGZwIik7CisJCQkJcHJpbnRfbnVtYmVyKDEwLCAodWludDMy X3Qpbmhkcl9sLm5fZGVzY3N6LAorCQkJCSAgICByYWRpeCwgJyAnKTsKKwkJCQlwcmludF9udW1i ZXIoMTAsICh1aW50MzJfdCkwLCByYWRpeCwgJ1xuJyk7CisJCQkJdGV4dF9zaXplX3RvdGFsICs9 IG5oZHJfbC5uX2Rlc2NzeiAqIDI7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBOVF9QU1RBVFVT OgorCQljYXNlIE5UX0xXUFNUQVRVUzoKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJCU5F WFRfTk9URShlbGZoZHIsIG5oZHJfbC5uX2Rlc2Nzeiwgbmhkcl9sLm5fbmFtZXN6LCBvZmZzZXQp OworCX0KK30KKworLyoKKyAqIEhhbmRsZXMgcHJvZ3JhbSBoZWFkZXJzIGV4Y2VwdCBmb3IgUFRf Tk9URSwgd2hlbiBzeXN2IG91dHB1dCBzdGx5ZSBpcyAKKyAqIGNob29zZW4sIHByaW50cyBvdXQg dGhlIHNlZ21lbnQgbmFtZSBhbmQgbGVuZ3RoLiBGb3IgYmVya2VseSBvdXRwdXQgCisgKiBzdHls ZSBvbmx5IFBUX0xPQUQgc2VnbWVudHMgYXJlIGhhbmRsZWQsIGFuZCB0ZXh0LAorICogZGF0YSwg YnNzIHNpemUgaXMgY2FsY3VsYXRlZCBmb3IgdGhlbS4KKyAqLwordm9pZAoraGFuZGxlX3BoZHIo RWxmICplbGYsIEdFbGZfRWhkciAqZWxmaGRyLCBHRWxmX1BoZHIgKnBoZHIsCisgICAgdWludDMy X3QgaWR4LCBjb25zdCBjaGFyICpuYW1lKQorewkKKwl1aW50MzJfdCBhZGRyLCBzaXplOworCWlu dCBzcGxpdDsKKwljaGFyIGJ1ZltCVUZfU0laRV07CQorCisJaWYgKGVsZiA9PSBOVUxMIHx8IGVs ZmhkciA9PSBOVUxMIHx8IHBoZHIgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJc2l6ZSA9IGFkZHIg PSAwOworCXNwbGl0ID0gKHBoZHItPnBfbWVtc3ogPiAwKSAmJiAJKHBoZHItPnBfZmlsZXN6ID4g MCkgJiYgCisJICAgIChwaGRyLT5wX21lbXN6ID4gcGhkci0+cF9maWxlc3opOworCisJaWYgKHN0 eWxlID09IFNUWUxFX1NZU1YpIHsKKwkJKHZvaWQpIHNucHJpbnRmKGJ1ZiwgQlVGX1NJWkUsCisJ CSAgICAiJXMlZCVzIiwgbmFtZSwgaWR4LCAoc3BsaXQgPyAiYSIgOiAiIikpOworCQkodm9pZCkg cHJpbnRmKCIlLTE4cyAiLCBidWYpOworCQlwcmludF9udW1iZXIoMTAsICh1aW50MzJfdClwaGRy LT5wX2ZpbGVzeiwgcmFkaXgsICcgJyk7CisJCXByaW50X251bWJlcigxMCwgKHVpbnQzMl90KXBo ZHItPnBfdmFkZHIsIHJhZGl4LCAnXG4nKTsKKwkJdGV4dF9zaXplX3RvdGFsICs9IHBoZHItPnBf ZmlsZXN6OworCQlpZiAoc3BsaXQpIHsKKwkJCXNpemUgPSAodWludDMyX3QpKHBoZHItPnBfbWVt c3ogLSBwaGRyLT5wX2ZpbGVzeik7CisJCQlhZGRyID0gKHVpbnQzMl90KShwaGRyLT5wX3ZhZGRy ICsgcGhkci0+cF9maWxlc3opOworCQkJKHZvaWQpIHNucHJpbnRmKGJ1ZiwgQlVGX1NJWkUsICIl cyVkJXMiLCBuYW1lLAorCQkJICAgIGlkeCwgImIiKTsKKwkJCXRleHRfc2l6ZV90b3RhbCArPSBw aGRyLT5wX21lbXN6IC0gcGhkci0+cF9maWxlc3o7CisJCQkodm9pZCkgcHJpbnRmKCIlLTE4cyAi LCBidWYpOworCQkJcHJpbnRfbnVtYmVyKDEwLCBzaXplLCByYWRpeCwgJyAnKTsKKwkJCXByaW50 X251bWJlcigxMCwgYWRkciwgcmFkaXgsICdcbicpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKHBo ZHItPnBfdHlwZSAhPSBQVF9MT0FEKQorCQkJcmV0dXJuOworCQlpZiAoKHBoZHItPnBfZmxhZ3Mg JiBQRl9SKSAmJiAoKHBoZHItPnBfZmxhZ3MgJiBQRl9YKSB8fAorCQkgICAgISgocGhkci0+cF9m bGFncyAmIFBGX1cpKSkgJiYgKHBoZHItPnBfZmlsZXN6ICE9IDApKSB7CisJCQl0ZXh0X3NpemUg Kz0gcGhkci0+cF9maWxlc3o7CisJCQlpZiAoc3BsaXQpCisJCQkJdGV4dF9zaXplICs9IHBoZHIt PnBfbWVtc3ogLSBwaGRyLT5wX2ZpbGVzejsKKwkJfSBlbHNlIGlmICgocGhkci0+cF9mbGFncyAm IFBGX1IpICYmCisJCSAgICAocGhkci0+cF9mbGFncyAmIFBGX1cpICYmIChwaGRyLT5wX2ZpbGVz eiAhPSAwKSkgeworCQkJZGF0YV9zaXplICs9IHBoZHItPnBfZmlsZXN6OworCQkJaWYgKHNwbGl0 KQorCQkJCWRhdGFfc2l6ZSArPSBwaGRyLT5wX21lbXN6IC0gcGhkci0+cF9maWxlc3o7CisJCX0g ZWxzZSB7CisJCQlic3Nfc2l6ZSArPSBwaGRyLT5wX2ZpbGVzejsKKwkJCWlmIChzcGxpdCkKKwkJ CQlic3Nfc2l6ZSArPSBwaGRyLT5wX21lbXN6IC0gcGhkci0+cF9maWxlc3o7CisJCX0KKwl9Cit9 CisKKy8qCisgKiBHaXZlbiBhIGNvcmUgZHVtcCBmaWxlLCB0aGlzIGZ1bmN0aW9uIG1hcHMgcHJv Z3JhbSBoZWFkZXJzIHRvIHNlZ21lbnRzLgorICovCitpbnQKK2hhbmRsZV9jb3JlKGNoYXIgY29u c3QgKm5hbWUsIEVsZiAqZWxmLCBHRWxmX0VoZHIgKmVsZmhkcikKK3sKKwlHRWxmX1BoZHIgcGhk cjsKKwl1aW50MzJfdCBpOwkKKwlwaWRfdCBwaWQ7CisJY2hhciAqY29yZV9jbWRsaW5lOworCWNv bnN0IGNoYXIgKnNlZ19uYW1lOworCisJaWYgKG5hbWUgPT0gTlVMTCB8fCBlbGYgPT0gTlVMTCB8 fCBlbGZoZHIgPT0gTlVMTCkKKwkJcmV0dXJuIChFWF9EQVRBRVJSKTsKKwlpZiAgKGVsZmhkci0+ ZV9zaG51bSAhPSAwIHx8IGVsZmhkci0+ZV90eXBlICE9IEVUX0NPUkUpCisJCXJldHVybiAoRVhf REFUQUVSUik7CisJCisJc2VnX25hbWUgPSBjb3JlX2NtZGxpbmUgPSBOVUxMOworCXBpZCA9IDA7 CisJaWYgKHN0eWxlID09IFNUWUxFX1NZU1YpCisJCXN5c3ZfaGVhZGVyKG5hbWUsIE5VTEwpOwor CWVsc2UKKwkJYmVya2VsZXlfaGVhZGVyKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZWxmaGRyLT5l X3BobnVtOyBpKyspIHsKKwkJaWYgKGdlbGZfZ2V0cGhkcihlbGYsIGksICZwaGRyKSAhPSBOVUxM KSB7CisJCQlpZiAocGhkci5wX3R5cGUgPT0gUFRfTk9URSkgeworCQkJCWhhbmRsZV9waGRyKGVs ZiwgZWxmaGRyLCAmcGhkciwgaSwgIm5vdGUiKTsKKwkJCQlnZXRfY29yZV9jbWRsaW5lX3BpZChl bGYsIGVsZmhkciwgJnBoZHIsCisJCQkJICAgICZjb3JlX2NtZGxpbmUsICZwaWQpOworCQkJCWhh bmRsZV9jb3JlX25vdGUoZWxmLCBlbGZoZHIsICZwaGRyLCBwaWQpOworCQkJfSBlbHNlIHsKKwkJ CQlzd2l0Y2gocGhkci5wX3R5cGUpIHsKKwkJCQljYXNlIFBUX05VTEw6CisJCQkJCXNlZ19uYW1l ID0gIm51bGwiOworCQkJCQlicmVhazsKKwkJCQljYXNlIFBUX0xPQUQ6CisJCQkJCXNlZ19uYW1l ID0gImxvYWQiOworCQkJCQlicmVhazsKKwkJCQljYXNlIFBUX0RZTkFNSUM6CisJCQkJCXNlZ19u YW1lID0gImR5bmFtaWMiOworCQkJCQlicmVhazsKKwkJCQljYXNlIFBUX0lOVEVSUDoKKwkJCQkJ c2VnX25hbWUgPSAiaW50ZXJwIjsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBQVF9TSExJQjoKKwkJ CQkJc2VnX25hbWUgPSAic2hsaWIiOworCQkJCQlicmVhazsKKwkJCQljYXNlIFBUX1BIRFI6CisJ CQkJCXNlZ19uYW1lID0gInBoZHIiOworCQkJCQlicmVhazsKKwkJCQljYXNlIFBUX0dOVV9FSF9G UkFNRToKKwkJCQkJc2VnX25hbWUgPSAiZWhfZnJhbWVfaGRyIjsKKwkJCQkJYnJlYWs7CisJCQkJ Y2FzZSBQVF9HTlVfU1RBQ0s6CisJCQkJCXNlZ19uYW1lID0gInN0YWNrIjsKKwkJCQkJYnJlYWs7 CisJCQkJZGVmYXVsdDoKKwkJCQkJc2VnX25hbWUgPSAic2VnbWVudCI7CisJCQkJfQorCQkJCWhh bmRsZV9waGRyKGVsZiwgZWxmaGRyLCAmcGhkciwgaSwgc2VnX25hbWUpOworCQkJfQorCQl9CisJ fQorCisJaWYgKHN0eWxlID09IFNUWUxFX0JFUktFTEVZKSB7CisJCWlmIChjb3JlX2NtZGxpbmUg IT0gTlVMTCkgeworCQkJYmVya2VsZXlfZm9vdGVyKGNvcmVfY21kbGluZSwgbmFtZSwKKwkJCSAg ICAiY29yZSBmaWxlIGludm9rZWQgYXMiKTsKKwkJfSBlbHNlIHsKKwkJCWJlcmtlbGV5X2Zvb3Rl cihjb3JlX2NtZGxpbmUsIG5hbWUsICJjb3JlIGZpbGUiKTsKKwkJfQorCX0gZWxzZSB7CisJCXN5 c3ZfZm9vdGVyKCk7CisJCWlmIChjb3JlX2NtZGxpbmUgIT0gTlVMTCkgeworCQkJKHZvaWQpIHBy aW50ZigiIChjb3JlIGZpbGUgaW52b2tlZCBhcyAlcylcblxuIiwKKwkJCSAgICBjb3JlX2NtZGxp bmUpOworCQl9IGVsc2UgeworCQkJKHZvaWQpIHByaW50ZigiIChjb3JlIGZpbGUpXG5cbiIpOwor CQl9CisJfQorCWZyZWUoY29yZV9jbWRsaW5lKTsKKwlyZXR1cm4gKEVYX09LKTsKK30KKworLyoK KyAqIEdpdmVuIGFuIGVsZiBvYmplY3QsYXIoMSkgZmlsZW5hbWUsIGFuZCBiYXNlZCBvbiB0aGUg b3V0cHV0IHN0eWxlIAorICogYW5kIHJhZGl4IGZvcm1hdCB0aGUgdmFyaW91cyBzZWN0aW9ucyBh bmQgdGhlaXIgbGVuZ3RoIHdpbGwgYmUgcHJpbnRlZAorICogb3IgdGhlIHNpemUgb2YgdGhlIHRl eHQsIGRhdGEsIGJzcyBzZWN0aW9ucyB3aWxsIGJlIHByaW50ZWQgb3V0LgorICovCitpbnQKK2hh bmRsZV9lbGYoY2hhciBjb25zdCAqbmFtZSkKK3sKKwlHRWxmX0VoZHIgZWxmaGRyOworCUdFbGZf U2hkciBzaGRyOworCUVsZiAqZWxmLCAqZWxmMTsKKwlFbGZfQXJoZHIgKmFyaGRyOworCUVsZl9T Y24gKnNjbjsKKwlFbGZfQ21kIGVsZl9jbWQ7CisJaW50IGV4aXRfY29kZSwgZmQ7CisKKwlpZiAo bmFtZSA9PSBOVUxMKQorCQlyZXR1cm4gKEVYX05PSU5QVVQpOworCisJaWYgKChmZCA9IG9wZW4o bmFtZSwgT19SRE9OTFksIDApKSA8IDApCisJCXJldHVybiAoRVhfTk9JTlBVVCk7CisKKwllbGZf Y21kID0gRUxGX0NfUkVBRDsKKwllbGYxID0gZWxmX2JlZ2luKGZkLCBlbGZfY21kLCBOVUxMKTsK Kwl3aGlsZSAoKGVsZiA9IGVsZl9iZWdpbihmZCwgZWxmX2NtZCwgZWxmMSkpICE9IE5VTEwpIHsK KwkJYXJoZHIgPSBlbGZfZ2V0YXJoZHIoZWxmKTsKKwkJaWYgKGVsZl9raW5kKGVsZikgPT0gRUxG X0tfTk9ORSAmJiBhcmhkciA9PSBOVUxMKSB7CisJCQkodm9pZCkgZWxmX2VuZChlbGYpOworCQkJ KHZvaWQpIGVsZl9lbmQoZWxmMSk7CisJCQkodm9pZCkgY2xvc2UoZmQpOworCQkJcmV0dXJuIChF WF9EQVRBRVJSKTsKKwkJfQorCQlpZiAoZWxmX2tpbmQoZWxmKSAhPSBFTEZfS19FTEYgfHwKKwkJ CShnZWxmX2dldGVoZHIoZWxmLCAmZWxmaGRyKSA9PSBOVUxMKSkgeworCQkJZWxmX2NtZCA9IGVs Zl9uZXh0KGVsZik7CisJCQkodm9pZCkgZWxmX2VuZChlbGYpOworCQkJd2FybngoIiVzOiBGaWxl IGZvcm1hdCBub3QgcmVjb2duaXplZCIsCisJCQkgICAgYXJoZHItPmFyX25hbWUpOworCQkJY29u dGludWU7CisJCX0KKwkJLyogQ29yZSBkdW1wcyBhcmUgaGFuZGxlZCBzZXBlcmF0ZWx5ICovCisJ CWlmIChlbGZoZHIuZV9zaG51bSA9PSAwICYmIGVsZmhkci5lX3R5cGUgPT0gRVRfQ09SRSkgewor CQkJZXhpdF9jb2RlID0gaGFuZGxlX2NvcmUobmFtZSwgZWxmLCAmZWxmaGRyKTsKKwkJCSh2b2lk KSBlbGZfZW5kKGVsZik7CisJCQkodm9pZCkgZWxmX2VuZChlbGYxKTsKKwkJCSh2b2lkKSBjbG9z ZShmZCk7CisJCQlyZXR1cm4gKGV4aXRfY29kZSk7CisJCX0gZWxzZSB7CisJCQlzY24gPSBOVUxM OworCQkJaWYgKHN0eWxlID09IFNUWUxFX0JFUktFTEVZKSB7CisJCQkJYmVya2VsZXlfaGVhZGVy KCk7CisJCQkJd2hpbGUgKChzY24gPSBlbGZfbmV4dHNjbihlbGYsIHNjbikpICE9IE5VTEwpIHsK KwkJCQkJaWYgKGdlbGZfZ2V0c2hkcihzY24sICZzaGRyKSAhPSBOVUxMKQorCQkJCQkJYmVya2Vs ZXlfY2FsYygmc2hkcik7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKgorCQkJCSAqIFBlcmZv cm0gYSBkcnkgcnVuIHRvIGZpbmQgdGhlIGxlbmd0aCBvZgorCQkJCSAqIHRoZSBsYXJnZXN0IHNl Z21lbnQgbmFtZS4KKwkJCQkgKi8KKwkJCQl3aGlsZSAoKHNjbiA9IGVsZl9uZXh0c2NuKGVsZiwg c2NuKSkgIT0gTlVMTCkgeworCQkJCQlpZiAoZ2VsZl9nZXRzaGRyKHNjbiwgJnNoZHIpICE9CU5V TEwpIHsKKwkJCQkJCXN5c3ZfY2FsYyhlbGYsICZlbGZoZHIsCisJCQkJCQkgICAgJnNoZHIsIDEp OworCQkJCQl9CisJCQkJfQorCQkJCXN5c3ZfaGVhZGVyKG5hbWUsIGFyaGRyKTsKKwkJCQlzY24g PSBOVUxMOworCQkJCXdoaWxlICgoc2NuID0gZWxmX25leHRzY24oZWxmLCBzY24pKSAhPSBOVUxM KSB7CisJCQkJCWlmIChnZWxmX2dldHNoZHIoc2NuLCAmc2hkcikgIT0JTlVMTCkKKwkJCQkJCXN5 c3ZfY2FsYyhlbGYsICZlbGZoZHIsCisJCQkJCQkgICAgJnNoZHIsIDApOworCQkJCX0KKwkJCX0K KwkJCWlmIChzdHlsZSA9PSBTVFlMRV9CRVJLRUxFWSkgeworCQkJCWlmIChhcmhkciAhPSBOVUxM KSB7CisJCQkJCWJlcmtlbGV5X2Zvb3RlcihuYW1lLCBhcmhkci0+YXJfbmFtZSwKKwkJCQkJICAg ICJleCIpOworCQkJCX0gZWxzZSB7CisJCQkJCWJlcmtlbGV5X2Zvb3RlcihuYW1lLCBOVUxMLCAi ZXgiKTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCXN5c3ZfZm9vdGVyKCk7CisJCQl9CisJCX0K KwkJZWxmX2NtZCA9IGVsZl9uZXh0KGVsZik7CisJCSh2b2lkKSBlbGZfZW5kKGVsZik7CisJfQor CSh2b2lkKSBlbGZfZW5kKGVsZjEpOworCSh2b2lkKSBjbG9zZShmZCk7CisJcmV0dXJuIChFWF9P Syk7Cit9CisKK3ZvaWQKK3ByaW50X251bWJlcihpbnQgd2lkdGgsIHVpbnQzMl90IG51bSwgZW51 bSByYWRpeF9zdHlsZSByYWQsIGNoYXIgYykKK3sKKwljaGFyIGJ1ZmZlcltCVUZfU0laRV07CisK Kwkodm9pZCkgc25wcmludGYoYnVmZmVyLCBCVUZfU0laRSwgKHJhZCA9PSBSQURJWF9ERUNJTUFM ID8gIiVsdSIgOgorCSAgICAoKHJhZCA9PSBSQURJWF9PQ1RBTCkgPyAiMCVsbyIgOiAiMHglbHgi KSksCisJICAgICh1bnNpZ25lZCBsb25nIGludCludW0pOworCSh2b2lkKSBwcmludGYoIiUtKnMl YyIsIHdpZHRoLCBidWZmZXIsIGMpOworfQorCisvKgorICogU3lzdiBmb3JtYXR0aW5nIGhlbHBl ciBmdW5jdGlvbnMuCisgKi8KK3ZvaWQKK3N5c3ZfaGVhZGVyKGNvbnN0IGNoYXIgKm5hbWUsIEVs Zl9BcmhkciAqYXJoZHIpCit7CisJdGV4dF9zaXplX3RvdGFsID0gMDsKKwlpZiAoYXJoZHIgIT0g TlVMTCkgeworCQkodm9pZCkgcHJpbnRmKCIlcyAgIChleCAlcyk6XG4lLSpzJS0xMHMgJS0xMHNc biIsCisJCSAgICBhcmhkci0+YXJfbmFtZSwgbmFtZSwgKGludClzZWNfbmFtZV9sZW4sCisJCSAg ICAic2VjdGlvbiIsInNpemUiLCJhZGRyIik7CisJfSBlbHNlIHsKKwkJKHZvaWQpIHByaW50Zigi JXMgIDpcbiUtKnMlLTEwcyAlLTEwc1xuIiwKKwkJICAgIG5hbWUsIChpbnQpc2VjX25hbWVfbGVu LCAic2VjdGlvbiIsCisJCSAgICAic2l6ZSIsICJhZGRyIik7CisJfQorfQorCit2b2lkCitzeXN2 X2NhbGMoRWxmICplbGYsIEdFbGZfRWhkciAqZWxmaGRyLCBHRWxmX1NoZHIgKnNoZHIsIGludCBk cnlfcnVuKQoreworCWNoYXIgKnNlY3Rpb25fbmFtZTsKKworCXNlY3Rpb25fbmFtZSA9IGVsZl9z dHJwdHIoZWxmLCBlbGZoZHItPmVfc2hzdHJuZHgsCisJCQkJCShzaXplX3Qpc2hkci0+c2hfbmFt ZSk7CisJaWYgKCFkcnlfcnVuKSB7CisJCWlmICgoc2hkci0+c2hfdHlwZSA9PSBTSFRfU1lNVEFC IHx8CisJCSAgICBzaGRyLT5zaF90eXBlID09IFNIVF9TVFJUQUIgfHwgc2hkci0+c2hfdHlwZSA9 PSBTSFRfUkVMQSB8fAorCQkgICAgc2hkci0+c2hfdHlwZSA9PSBTSFRfUkVMKSAmJiBzaGRyLT5z aF9hZGRyID09IDApIAorCQkJcmV0dXJuOworCQkodm9pZCkgcHJpbnRmKCIlLSpzIiwgKGludClz ZWNfbmFtZV9sZW4sIHNlY3Rpb25fbmFtZSk7CisJCXByaW50X251bWJlcigxMCwgKHVpbnQzMl90 KXNoZHItPnNoX3NpemUsIHJhZGl4LCAnICcpOworCQlwcmludF9udW1iZXIoMTAsICh1aW50MzJf dClzaGRyLT5zaF9hZGRyLCByYWRpeCwgJ1xuJyk7CisJCXRleHRfc2l6ZV90b3RhbCArPSBzaGRy LT5zaF9zaXplOworCX0gZWxzZSB7CisJCWlmIChzZWNfbmFtZV9sZW4gPCBzdHJsZW4oc2VjdGlv bl9uYW1lKSkKKwkJCXNlY19uYW1lX2xlbiA9IHN0cmxlbihzZWN0aW9uX25hbWUpICsgMzsKKwl9 IAorfQorCit2b2lkCitzeXN2X2Zvb3RlcigpCit7CisJKHZvaWQpIHByaW50ZigiJS0qcyIsIChp bnQpc2VjX25hbWVfbGVuLCAiVG90YWwiKTsKKwlwcmludF9udW1iZXIoMTAsIHRleHRfc2l6ZV90 b3RhbCwgcmFkaXgsICdcbicpOworCSh2b2lkKSBwcmludGYoIlxuIik7Cit9CisKKy8qCisgKiBi ZXJrZWxleSBzdHlsZSBvdXRwdXQgZm9ybWF0dGluZyBoZWxwZXIgZnVuY3Rpb25zLgorICovCit2 b2lkCitiZXJrZWxleV9oZWFkZXIoKQoreworCXRleHRfc2l6ZSA9IGRhdGFfc2l6ZSA9IGJzc19z aXplID0gMDsKK30KKwordm9pZAorYmVya2VsZXlfY2FsYyhHRWxmX1NoZHIgKnNoZHIpCit7CisJ aWYgKHNoZHIgIT0gTlVMTCkgeworCQlpZiAoIShzaGRyLT5zaF9mbGFncyAmIFNIRl9BTExPQykp IAorCQkJcmV0dXJuOworCQlpZiAoKHNoZHItPnNoX2ZsYWdzICYgU0hGX0FMTE9DKSAmJiAKKwkJ ICAgICgoc2hkci0+c2hfZmxhZ3MgJiBTSEZfRVhFQ0lOU1RSKSB8fAorCQkgICAgIShzaGRyLT5z aF9mbGFncyAmIFNIRl9XUklURSkpKQorCQkJdGV4dF9zaXplICs9IHNoZHItPnNoX3NpemU7CisJ CWVsc2UgaWYgKChzaGRyLT5zaF9mbGFncyAmIFNIRl9BTExPQykgJiYgCisJCSAgICAoc2hkci0+ c2hfZmxhZ3MgJiBTSEZfV1JJVEUpICYmCisJCSAgICAoc2hkci0+c2hfdHlwZSAhPSBTSFRfTk9C SVRTKSkKKwkJCWRhdGFfc2l6ZSArPSBzaGRyLT5zaF9zaXplOworCQllbHNlCisJCQlic3Nfc2l6 ZSArPSBzaGRyLT5zaF9zaXplOworCX0KK30KKwordm9pZAorYmVya2VsZXlfdG90YWxzKHZvaWQp Cit7CisJbG9uZyB1bnNpZ25lZCBpbnQgZ3JhbmRfdG90YWw7CisKKwlpZiAoc2hvd190b3RhbHMp IHsKKwkJZ3JhbmRfdG90YWwgPSB0ZXh0X3NpemVfdG90YWwgKyBkYXRhX3NpemVfdG90YWwgKwor CQkgICAgYnNzX3NpemVfdG90YWw7CisJCXByaW50X251bWJlcigxMCwgdGV4dF9zaXplX3RvdGFs LCByYWRpeCwgJyAnKTsKKwkJcHJpbnRfbnVtYmVyKDEwLCBkYXRhX3NpemVfdG90YWwsIHJhZGl4 LCAnICcpOworCQlwcmludF9udW1iZXIoMTAsIGJzc19zaXplX3RvdGFsLCByYWRpeCwgJyAnKTsK KwkJaWYgKHJhZGl4ID09IFJBRElYX09DVEFMKQorCQkJcHJpbnRfbnVtYmVyKDEwLCBncmFuZF90 b3RhbCwgUkFESVhfT0NUQUwsICcgJyk7CisJCWVsc2UKKwkJCXByaW50X251bWJlcigxMCwgZ3Jh bmRfdG90YWwsIFJBRElYX0RFQ0lNQUwsICcgJyk7CisJCSh2b2lkKSBwcmludGYoIiUtMTBseCAo VE9UQUxTKVxuIiwgZ3JhbmRfdG90YWwpOworCX0KK30KKwordm9pZAorYmVya2VsZXlfZm9vdGVy KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmFyX25hbWUsIGNvbnN0IGNoYXIgKm1zZykK K3sKKwlzdGF0aWMgaW50IGhlYWRlcl9wcmludGVkOworCWNvbnN0IGNoYXIgKmNvbF9uYW1lOwor CisJaWYgKCFoZWFkZXJfcHJpbnRlZCkgeworCQkocmFkaXggPT0gUkFESVhfT0NUQUwpID8gKGNv bF9uYW1lID0gIm9jdCIpIDoKKwkJICAgIChjb2xfbmFtZSA9ICJkZWMiKTsKKwkJKHZvaWQpIHBy aW50ZigiJS0xMHMgJS0xMHMgJS0xMHMgJS0xMHMgJS0xMHMgZmlsZW5hbWVcbiIsCisJCSAgICAi dGV4dCIsImRhdGEiLCJic3MiLGNvbF9uYW1lLCJoZXgiKTsKKwkJaGVhZGVyX3ByaW50ZWQgPSAx OworCX0KKworCXRvdGFsX3NpemUgPSB0ZXh0X3NpemUgKyBkYXRhX3NpemUgKyBic3Nfc2l6ZTsK KwlpZiAoc2hvd190b3RhbHMpIHsKKwkJdGV4dF9zaXplX3RvdGFsICs9IHRleHRfc2l6ZTsKKwkJ YnNzX3NpemVfdG90YWwgKz0gYnNzX3NpemU7CisJCWRhdGFfc2l6ZV90b3RhbCArPSBkYXRhX3Np emU7CisJfQorCisJcHJpbnRfbnVtYmVyKDEwLCB0ZXh0X3NpemUsIHJhZGl4LCAnICcpOworCXBy aW50X251bWJlcigxMCwgZGF0YV9zaXplLCByYWRpeCwgJyAnKTsKKwlwcmludF9udW1iZXIoMTAs IGJzc19zaXplLCByYWRpeCwgJyAnKTsKKwlpZiAocmFkaXggPT0gUkFESVhfT0NUQUwpCisJCXBy aW50X251bWJlcigxMCwgdG90YWxfc2l6ZSwgUkFESVhfT0NUQUwsICcgJyk7CisJZWxzZQorCQlw cmludF9udW1iZXIoMTAsIHRvdGFsX3NpemUsIFJBRElYX0RFQ0lNQUwsICcgJyk7CisJKHZvaWQp IHByaW50ZigiJS0xMGx4XHQiLCAobG9uZyB1bnNpZ25lZCBpbnQpdG90YWxfc2l6ZSk7CisJaWYg KGFyX25hbWUgIT0gTlVMTCAmJiBuYW1lICE9IE5VTEwpCisJCSh2b2lkKSBwcmludGYoIiVzICgl cyAlcylcbiIsIGFyX25hbWUsIG1zZywgbmFtZSk7CisJZWxzZSBpZiAoYXJfbmFtZSAhPSBOVUxM ICYmIG5hbWUgPT0gTlVMTCkKKwkJKHZvaWQpIHByaW50ZigiJXMgKCVzKVxuIiwgYXJfbmFtZSwg bXNnKTsKKwllbHNlCisJCSh2b2lkKSBwcmludGYoIiVzXG4iLCBuYW1lKTsKK30KKwordm9pZAor dXNhZ2UoKQoreworCSh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgInVzYWdlOiBzaXplIFstQWRob3R4 XSBmaWxlIC4uLlxuIik7CisJZXhpdChFWF9VU0FHRSk7Cit9Cg== ------=_Part_169866_31505932.1174828959441--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4fd6fc030703250622g36ddd5f9r833fb4440958a249>