From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=0.2 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED autolearn=no autolearn_force=no version=3.4.4 Received: (qmail 4108 invoked from network); 23 Sep 2023 14:31:16 -0000 Received: from 9front.inri.net (168.235.81.73) by inbox.vuxu.org with ESMTPUTF8; 23 Sep 2023 14:31:16 -0000 Received: from cc-smtpout2.netcologne.de ([89.1.8.212]) by 9front; Sat Sep 23 10:27:00 -0400 2023 Received: from cc-app2.netcologne.de (cc-app2.netcologne.de [89.1.9.191]) by cc-smtpout2.netcologne.de (Postfix) with ESMTP id C72F712518 for <9front@9front.org>; Sat, 23 Sep 2023 16:26:56 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=netcologne.de; s=nc1116a; t=1695479216; bh=TVZZx3HMFIhUnDB2tn2vM80JM0cUikOhAmioceVy3CA=; h=Date:From:To:Message-ID:Subject:From; b=MrX41JusolktseQJmU7U+HVuNqjXOCIsihClkA/WgaBNX/Fuy/1Br7s8FMSRuqKBq 9T95TCSaHlKxO3KCO3qL2rkH93Tqmu9Lu7RgVK/PSpdsZLNBb0lajp/VeyGD84qZv7 EOyAW3CWlsJQohmIGbJpdj4LQNqc6IOOz5QNOG5K6dLsigMOoeS72GEX3sOGVLTLho YQP8qDj65VIl1NOJQDE3vfZzRfIBuZwFWjYwpuByw3JjOvu/LUb4acPp54sxE7kTko GOrXiqqcLu/xa7w6Sq+KBuNmCh5a3X48JtN5igQNy+KsUgpx2xFUBJ98mqDkdpKu6e /dnFIs8mS/1fQ== Received: from cc-app2.netcologne.de (localhost [127.0.0.1]) by cc-app2.netcologne.de (Postfix) with ESMTPA id 8F93D11DC4 for <9front@9front.org>; Sat, 23 Sep 2023 16:26:56 +0200 (CEST) Date: Sat, 23 Sep 2023 16:26:56 +0200 (CEST) From: Arne Meyer To: "9front@9front.org" <9front@9front.org> Message-ID: <2127530086.565304.1695479216477@comcenter.netcologne.de> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_565303_2063917545.1695479216477" X-Priority: 3 Importance: Normal X-Mailer: Open-Xchange Mailer v7.10.6-Rev50 X-Originating-IP: 2a0a:a540:5a6d:0:b409:193b:6eb1:1db0 X-Originating-Client: open-xchange-appsuite X-NetCologne-Spam: L X-Rspamd-Queue-Id: 8F93D11DC4 X-Rspamd-Pre-Result: action=add header; module=force_actions; unknown reason X-Rspamd-Action: add header X-Spamd-Bar: +++ List-ID: <9front.9front.org> List-Help: X-Glyph: ➈ X-Bullshit: SSL app hypervisor map/reduce wrapper Subject: [9front] ethernet over gre Reply-To: 9front@9front.org Precedence: bulk ------=_Part_565303_2063917545.1695479216477 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hello, i finally found the time to polish up my implementation of ethernet over gre for 9front. This is based on nusb/ether. It uses gre from the ip stack. I tested it with OpenBSD egre. For now only ipv4 is supported for the outside of the tunnel. 9front: ip address is 192.168.178.21 egre 192.168.178.20 ip/ipconfig -m 1400 ether /net/etherG0 10.0.0.1 255.255.255.0 OpenBSD: ifconfig egre0 create ifconfig egre0 tunnel 192.168.178.20 192.168.178.21 ifconfig egre0 10.0.0.2/24 mtu 1400 ifconfig egre0 up Greetings, Arne ------=_Part_565303_2063917545.1695479216477 X-Part-Id: 8dc7a018e82c48808e3990e36fd0481e Content-Type: multipart/mixed; boundary="upas-lnrispncgypqyrqvsshctosgnn" Content-Disposition: inline This is a multi-part message in MIME format. --upas-lnrispncgypqyrqvsshctosgnn Content-Disposition: inline Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit from postmaster@9front: The following attachment had content that we can't prove to be harmless. To avoid possible automatic execution, we changed the content headers. The original header was: Content-Type: text/x-c; charset=UTF-8; name=egre.c Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=egre.c --upas-lnrispncgypqyrqvsshctosgnn Content-Type: application/octet-stream Content-Disposition: attachment; filename="egre.c.suspect" Content-Transfer-Encoding: base64 I2luY2x1ZGUgPHUuaD4KI2luY2x1ZGUgPGxpYmMuaD4KI2luY2x1ZGUgPHRocmVhZC5oPgojaW5j bHVkZSA8bGlic2VjLmg+CgovLyNpbmNsdWRlICJ1c2IuaCIKI2luY2x1ZGUgImRhdC5oIgoKI2lu Y2x1ZGUgPGZjYWxsLmg+CiNpbmNsdWRlIDw5cC5oPgojaW5jbHVkZSA8aXAuaD4KCnR5cGVkZWYg c3RydWN0IFRhYiBUYWI7CnR5cGVkZWYgc3RydWN0IERxIERxOwp0eXBlZGVmIHN0cnVjdCBDb25u IENvbm47CnR5cGVkZWYgc3RydWN0IFN0YXRzIFN0YXRzOwoKZW51bQp7CglRcm9vdCwKCVFpZmFj ZSwKCVFjbG9uZSwKCVFzdGF0cywKCVFhZGRyLAoJUW5kaXIsCglRY3RsLAoJUWRhdGEsCglRdHlw ZSwKCVFtYXgsCn07CgpzdHJ1Y3QgVGFiCnsKCWNoYXIgKm5hbWU7Cgl1bG9uZyBtb2RlOwp9OwoK VGFiIHRhYltdID0KewoJIi8iLAkJRE1ESVJ8MDU1NSwKCSJldGhlckciLAlETURJUnwwNTU1LAkv KiBjYWxsaW5nIGl0ICpldGhlciogbWFrZXMgc25vb3B5KDgpIGhhcHB5ICovCgkiY2xvbmUiLAkw NjY2LAoJInN0YXRzIiwJMDY2NiwKCSJhZGRyIiwJMDQ0NCwKCSIldWQiLAlETURJUnwwNTU1LAoJ ImN0bCIsCQkwNjY2LAoJImRhdGEiLAkwNjY2LAoJInR5cGUiLAkwNDQ0LAp9OwoKc3RydWN0IERx CnsKCVFMb2NrOwoKCURxCQkqbmV4dDsKCVJlcQkJKnI7CglSZXEJCSoqcnQ7CglCbG9jawkJKnE7 CglCbG9jawkJKipxdDsKCglpbnQJCXNpemU7Cn07CgpzdHJ1Y3QgQ29ubgp7CglRTG9jazsKCglp bnQJCXVzZWQ7CglpbnQJCXR5cGU7CglpbnQJCXByb207CglpbnQJCWJyaWRnZTsKCWludAkJaGVh ZGVyc29ubHk7CgoJRHEJCSpkcTsKfTsKCnN0cnVjdCBTdGF0cwp7CglpbnQJCWluOwoJaW50CQlv dXQ7CglpbnQJCWJvZ3VzOwp9OwoKdWNoYXIgYmNhc3RbRWFkZHJsZW5dID0gezB4RkYsIDB4RkYs IDB4RkYsIDB4RkYsIDB4RkYsIDB4RkZ9OwoKU3RhdHMgc3RhdHM7CkNvbm4gY29ublszMl07Cmlu dCBuY29ubiA9IDA7CgppbnQgbnByb20gPSAwOwppbnQgbm11bHRpID0gMDsKCi8vRGV2ICplcGN0 bDsKLy9EZXYgKmVwaW47Ci8vRGV2ICplcG91dDsKCnVsb25nIHRpbWUwOwpzdGF0aWMgY2hhciAq dW5hbWU7CgojZGVmaW5lIFBBVEgodHlwZSwgbikJCSgodHlwZSl8KChuKTw8OCkpCiNkZWZpbmUg VFlQRShwYXRoKQkJCSgoKHVpbnQpKHBhdGgpICYgMHgwMDAwMDBGRik+PjApCiNkZWZpbmUgTlVN KHBhdGgpCQkJKCgodWludCkocGF0aCkgJiAweEZGRkZGRjAwKT4+OCkKI2RlZmluZSBOVU1DT05O KGMpCQkoKCh1aW50cHRyKShjKS0odWludHB0cikmY29ublswXSkvc2l6ZW9mKGNvbm5bMF0pKQoK c3RhdGljIHZvaWQKZmlsbHN0YXQoRGlyICpkLCB1dmxvbmcgcGF0aCkKewoJVGFiICp0OwoKCW1l bXNldChkLCAwLCBzaXplb2YoKmQpKTsKCWQtPnVpZCA9IGVzdHJkdXA5cCh1bmFtZSk7CglkLT5n aWQgPSBlc3RyZHVwOXAodW5hbWUpOwoJZC0+cWlkLnBhdGggPSBwYXRoOwoJZC0+YXRpbWUgPSBk LT5tdGltZSA9IHRpbWUwOwoJdCA9ICZ0YWJbVFlQRShwYXRoKV07CglkLT5uYW1lID0gc21wcmlu dCh0LT5uYW1lLCBOVU0ocGF0aCkpOwoJZC0+cWlkLnR5cGUgPSB0LT5tb2RlPj4yNDsKCWQtPm1v ZGUgPSB0LT5tb2RlOwp9CgpzdGF0aWMgdm9pZApmc2F0dGFjaChSZXEgKnIpCnsKCWlmKHItPmlm Y2FsbC5hbmFtZSAmJiByLT5pZmNhbGwuYW5hbWVbMF0pewoJCXJlc3BvbmQociwgImludmFsaWQg YXR0YWNoIHNwZWNpZmllciIpOwoJCXJldHVybjsKCX0KCWlmKHVuYW1lID09IG5pbCkKCQl1bmFt ZSA9IGVzdHJkdXA5cChyLT5pZmNhbGwudW5hbWUpOwoJci0+ZmlkLT5xaWQucGF0aCA9IFBBVEgo UXJvb3QsIDApOwoJci0+ZmlkLT5xaWQudHlwZSA9IFFURElSOwoJci0+ZmlkLT5xaWQudmVycyA9 IDA7CglyLT5vZmNhbGwucWlkID0gci0+ZmlkLT5xaWQ7CglyZXNwb25kKHIsIG5pbCk7Cn0KCnN0 YXRpYyB2b2lkCmZzc3RhdChSZXEgKnIpCnsKCWZpbGxzdGF0KCZyLT5kLCByLT5maWQtPnFpZC5w YXRoKTsKCXJlc3BvbmQociwgbmlsKTsKfQoKc3RhdGljIGludApyb290Z2VuKGludCBpLCBEaXIg KmQsIHZvaWQqKQp7CglpICs9IFFyb290KzE7CglpZihpID09IFFpZmFjZSl7CgkJZmlsbHN0YXQo ZCwgaSk7CgkJcmV0dXJuIDA7Cgl9CglyZXR1cm4gLTE7Cn0KCnN0YXRpYyBpbnQKaWZhY2VnZW4o aW50IGksIERpciAqZCwgdm9pZCopCnsKCWkgKz0gUWlmYWNlKzE7CglpZihpIDwgUW5kaXIpewoJ CWZpbGxzdGF0KGQsIGkpOwoJCXJldHVybiAwOwoJfQoJaSAtPSBRbmRpcjsKCWlmKGkgPCBuY29u bil7CgkJZmlsbHN0YXQoZCwgUEFUSChRbmRpciwgaSkpOwoJCXJldHVybiAwOwoJfQoJcmV0dXJu IC0xOwp9CgpzdGF0aWMgaW50Cm5kaXJnZW4oaW50IGksIERpciAqZCwgdm9pZCAqYXV4KQp7Cglp ICs9IFFuZGlyKzE7CglpZihpIDwgUW1heCl7CgkJZmlsbHN0YXQoZCwgUEFUSChpLCBOVU1DT05O KGF1eCkpKTsKCQlyZXR1cm4gMDsKCX0KCXJldHVybiAtMTsKfQoKc3RhdGljIGNoYXIqCmZzd2Fs azEoRmlkICpmaWQsIGNoYXIgKm5hbWUsIFFpZCAqcWlkKQp7CglpbnQgaSwgbjsKCWNoYXIgYnVm WzMyXTsKCXVsb25nIHBhdGg7CgoJcGF0aCA9IGZpZC0+cWlkLnBhdGg7CglpZighKGZpZC0+cWlk LnR5cGUmUVRESVIpKQoJCXJldHVybiAid2FsayBpbiBub24tZGlyZWN0b3J5IjsKCglpZihzdHJj bXAobmFtZSwgIi4uIikgPT0gMCl7CgkJc3dpdGNoKFRZUEUocGF0aCkpewoJCWNhc2UgUXJvb3Q6 CgkJCXJldHVybiBuaWw7CgkJY2FzZSBRaWZhY2U6CgkJCXFpZC0+cGF0aCA9IFBBVEgoUXJvb3Qs IDApOwoJCQlxaWQtPnR5cGUgPSB0YWJbUXJvb3RdLm1vZGU+PjI0OwoJCQlyZXR1cm4gbmlsOwoJ CWNhc2UgUW5kaXI6CgkJCXFpZC0+cGF0aCA9IFBBVEgoUWlmYWNlLCAwKTsKCQkJcWlkLT50eXBl ID0gdGFiW1FpZmFjZV0ubW9kZT4+MjQ7CgkJCXJldHVybiBuaWw7CgkJZGVmYXVsdDoKCQkJcmV0 dXJuICJidWcgaW4gZnN3YWxrMSI7CgkJfQoJfQoKCWZvcihpID0gVFlQRShwYXRoKSsxOyBpPG5l bGVtKHRhYik7IGkrKyl7CgkJaWYoaT09UW5kaXIpewoJCQluID0gYXRvaShuYW1lKTsKCQkJc25w cmludChidWYsIHNpemVvZiBidWYsICIlZCIsIG4pOwoJCQlpZihuIDwgbmNvbm4gJiYgc3RyY21w KGJ1ZiwgbmFtZSkgPT0gMCl7CgkJCQlxaWQtPnBhdGggPSBQQVRIKGksIG4pOwoJCQkJcWlkLT50 eXBlID0gdGFiW2ldLm1vZGU+PjI0OwoJCQkJcmV0dXJuIG5pbDsKCQkJfQoJCQlicmVhazsKCQl9 CgkJaWYoc3RyY21wKG5hbWUsIHRhYltpXS5uYW1lKSA9PSAwKXsKCQkJcWlkLT5wYXRoID0gUEFU SChpLCBOVU0ocGF0aCkpOwoJCQlxaWQtPnR5cGUgPSB0YWJbaV0ubW9kZT4+MjQ7CgkJCXJldHVy biBuaWw7CgkJfQoJCWlmKHRhYltpXS5tb2RlJkRNRElSKQoJCQlicmVhazsKCX0KCXJldHVybiAi ZGlyZWN0b3J5IGVudHJ5IG5vdCBmb3VuZCI7Cn0KCnN0YXRpYyB2b2lkCm1hdGNocnEoRHEgKmQp CnsKCVJlcSAqcjsKCUJsb2NrICpiOwoKCXdoaWxlKHIgPSBkLT5yKXsKCQlpbnQgbjsKCgkJaWYo KGIgPSBkLT5xKSA9PSBuaWwpCgkJCWJyZWFrOwoKCQlkLT5zaXplIC09IEJMRU4oYik7CgkJaWYo KGQtPnEgPSBiLT5uZXh0KSA9PSBuaWwpCgkJCWQtPnF0ID0gJmQtPnE7CgkJaWYoKGQtPnIgPSAo UmVxKilyLT5hdXgpID09IG5pbCkKCQkJZC0+cnQgPSAmZC0+cjsKCgkJbiA9IHItPmlmY2FsbC5j b3VudDsKCQlpZihuID4gQkxFTihiKSkKCQkJbiA9IEJMRU4oYik7CgkJbWVtbW92ZShyLT5vZmNh bGwuZGF0YSwgYi0+cnAsIG4pOwoJCXItPm9mY2FsbC5jb3VudCA9IG47CgkJZnJlZWIoYik7CgoJ CXJlc3BvbmQociwgbmlsKTsKCX0KfQoKc3RhdGljIHZvaWQKcmVhZGNvbm5kYXRhKFJlcSAqcikK ewoJRHEgKmQ7CgoJZCA9IHItPmZpZC0+YXV4OwoJcWxvY2soZCk7CglyLT5hdXggPSBuaWw7Cgkq ZC0+cnQgPSByOwoJZC0+cnQgPSAoUmVxKiopJnItPmF1eDsKCW1hdGNocnEoZCk7CglxdW5sb2Nr KGQpOwp9CgpzdGF0aWMgdm9pZApldGhlcm9xKEJsb2NrKiwgQ29ubiopOwoKc3RhdGljIHZvaWQK d3JpdGVjb25uZGF0YShSZXEgKnIpCnsKCXZvaWQgKnA7CglpbnQgbjsKCUJsb2NrICpiOwoKCXAg PSByLT5pZmNhbGwuZGF0YTsKCW4gPSByLT5pZmNhbGwuY291bnQ7CgoJLyogbWluaW11bSBmcmFt ZSBsZW5ndGggZm9yIHJ0bDgxNTAgKi8KCWlmKG4gPCA2MCkKCQluID0gNjA7CgoJLyogc2xhY2sg c3BhY2UgZm9yIGhlYWRlciBhbmQgdHJhaWxlcnMgKi8KCW4gKz0gNDQrMTY7CgoJYiA9IGFsbG9j YihuKTsKCgkvKiBoZWFkZXIgc3BhY2UgKi8KCWItPndwICs9IDQ0OwoJYi0+cnAgPSBiLT53cDsK CgkvKiBjb3B5IGluIHRoZSBldGhlcm5ldCBwYWNrZXQgKi8KCW1lbW1vdmUoYi0+d3AsIHAsIHIt PmlmY2FsbC5jb3VudCk7CgliLT53cCArPSByLT5pZmNhbGwuY291bnQ7CgoJZXRoZXJvcShiLCAm Y29ubltOVU0oci0+ZmlkLT5xaWQucGF0aCldKTsKCglyLT5vZmNhbGwuY291bnQgPSByLT5pZmNh bGwuY291bnQ7CglyZXNwb25kKHIsIG5pbCk7Cn0KCnN0YXRpYyB2b2lkCmZzcmVhZChSZXEgKnIp CnsKCWNoYXIgYnVmWzIwMF07CgljaGFyIGVbRVJSTUFYXTsKCXVsb25nIHBhdGg7CgoJcGF0aCA9 IHItPmZpZC0+cWlkLnBhdGg7CgoJc3dpdGNoKFRZUEUocGF0aCkpewoJZGVmYXVsdDoKCQlzbnBy aW50KGUsIHNpemVvZiBlLCAiYnVnIGluIGZzcmVhZCBwYXRoPSVsdXgiLCBwYXRoKTsKCQlyZXNw b25kKHIsIGUpOwoJCWJyZWFrOwoKCWNhc2UgUXJvb3Q6CgkJZGlycmVhZDlwKHIsIHJvb3RnZW4s IG5pbCk7CgkJcmVzcG9uZChyLCBuaWwpOwoJCWJyZWFrOwoKCWNhc2UgUWlmYWNlOgoJCWRpcnJl YWQ5cChyLCBpZmFjZWdlbiwgbmlsKTsKCQlyZXNwb25kKHIsIG5pbCk7CgkJYnJlYWs7CgoJY2Fz ZSBRc3RhdHM6CgkJc25wcmludChidWYsIHNpemVvZihidWYpLAoJCQkiaW46ICVkXG4iCgkJCSJv dXQ6ICVkXG4iCgkJCSJib2d1czogJWRcbiIKCQkJIm1icHM6ICVkXG4iCgkJCSJhZGRyOiAlRVxu IiwKCQkJc3RhdHMuaW4sIHN0YXRzLm91dCwgc3RhdHMuYm9ndXMsIDEwLCBtYWNhZGRyKTsKCQly ZWFkc3RyKHIsIGJ1Zik7CgkJcmVzcG9uZChyLCBuaWwpOwoJCWJyZWFrOwoKCWNhc2UgUWFkZHI6 CgkJc25wcmludChidWYsIHNpemVvZihidWYpLCAiJUUiLCBtYWNhZGRyKTsKCQlyZWFkc3RyKHIs IGJ1Zik7CgkJcmVzcG9uZChyLCBuaWwpOwoJCWJyZWFrOwoKCWNhc2UgUW5kaXI6CgkJZGlycmVh ZDlwKHIsIG5kaXJnZW4sICZjb25uW05VTShwYXRoKV0pOwoJCXJlc3BvbmQociwgbmlsKTsKCQli cmVhazsKCgljYXNlIFFjdGw6CgkJc25wcmludChidWYsIHNpemVvZihidWYpLCAiJTExZCAiLCBO VU0ocGF0aCkpOwoJCXJlYWRzdHIociwgYnVmKTsKCQlyZXNwb25kKHIsIG5pbCk7CgkJYnJlYWs7 CgoJY2FzZSBRdHlwZToKCQlzbnByaW50KGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlMTFkICIsIGNvbm5b TlVNKHBhdGgpXS50eXBlKTsKCQlyZWFkc3RyKHIsIGJ1Zik7CgkJcmVzcG9uZChyLCBuaWwpOwoJ CWJyZWFrOwoKCWNhc2UgUWRhdGE6CgkJcmVhZGNvbm5kYXRhKHIpOwoJCWJyZWFrOwoJfQp9Cgpz dGF0aWMgaW50CmFjdGl2ZW11bHRpKHVjaGFyICplYSkKewoJaW50IGk7CgoJZm9yKGk9MDsgaTxu bXVsdGk7IGkrKykKCQlpZihtZW1jbXAoZWEsIG11bHRpYWRkcltpXSwgRWFkZHJsZW4pID09IDAp CgkJCXJldHVybiBpOwoJcmV0dXJuIC0xOwp9CgpzdGF0aWMgdm9pZApmc3dyaXRlKFJlcSAqcikK ewoJY2hhciBlW0VSUk1BWF07Cgl1bG9uZyBwYXRoOwoJY2hhciAqcDsKCWludCBuOwoKCXBhdGgg PSByLT5maWQtPnFpZC5wYXRoOwoJc3dpdGNoKFRZUEUocGF0aCkpewoJY2FzZSBRY3RsOgoJCW4g PSByLT5pZmNhbGwuY291bnQ7CgkJcCA9IChjaGFyKilyLT5pZmNhbGwuZGF0YTsKCQlpZihuID49 IDYgJiYgbWVtY21wKHAsICJicmlkZ2UiLCA2KT09MCl7CgkJCWNvbm5bTlVNKHBhdGgpXS5icmlk Z2UgPSAxOwoJCX0gZWxzZSBpZihuID49IDExICYmIG1lbWNtcChwLCAiaGVhZGVyc29ubHkiLCAx MSk9PTApewoJCQljb25uW05VTShwYXRoKV0uaGVhZGVyc29ubHkgPSAxOwoJCX0gZWxzZSBpZihu ID49IDExICYmIG1lbWNtcChwLCAicHJvbWlzY3VvdXMiLCAxMSk9PTApewoJCQlpZihjb25uW05V TShwYXRoKV0ucHJvbSA9PSAwKXsKCQkJCWNvbm5bTlVNKHBhdGgpXS5wcm9tID0gMTsKCQkJCS8v aWYobnByb20rKyA9PSAwICYmIGVwcHJvbWlzY3VvdXMgIT0gbmlsKQoJCQkJCS8vKCplcHByb21p c2N1b3VzKShlcGN0bCwgMSk7CgkJCX0KCQl9IGVsc2UgaWYobiA+PSA5KzEyICYmIChtZW1jbXAo cCwgImFkZG11bHRpICIsIDkpPT0wIHx8IG1lbWNtcChwLCAicmVtbXVsdGkgIiwgOSk9PTApKXsK CQkJdWNoYXIgZWFbRWFkZHJsZW5dOwoJCQlpbnQgaTsKCgkJCWlmKHBhcnNlZXRoZXIoZWEsIHAr OSkgPCAwKXsKCQkJCXJlc3BvbmQociwgImJhZCBldGhlciBhZGRyZXNzIik7CgkJCQlyZXR1cm47 CgkJCX0KCQkJaSA9IGFjdGl2ZW11bHRpKGVhKTsKCQkJaWYoaSA+PSAwKXsKCQkJCWlmKCpwID09 ICdyJyl7CgkJCQkJbWVtbW92ZShtdWx0aWFkZHJbaV0sIG11bHRpYWRkclstLW5tdWx0aV0sIEVh ZGRybGVuKTsKCQkJCQkvL2lmKGVwbXVsdGljYXN0ICE9IG5pbCkKCQkJCQkvLwkoKmVwbXVsdGlj YXN0KShlcGN0bCwgZWEsIDApOwoJCQkJfQoJCQl9IGVsc2UgaWYobm11bHRpIDwgbmVsZW0obXVs dGlhZGRyKSl7CgkJCQlpZigqcCA9PSAnYScpewoJCQkJCW1lbW1vdmUobXVsdGlhZGRyW25tdWx0 aSsrXSwgZWEsIEVhZGRybGVuKTsKCQkJCQkvL2lmKGVwbXVsdGljYXN0ICE9IG5pbCkKCQkJCQkv LwkoKmVwbXVsdGljYXN0KShlcGN0bCwgZWEsIDEpOwoJCQkJfQoJCQl9CgkJfSBlbHNlIGlmKG4g PiA4ICYmIG1lbWNtcChwLCAiY29ubmVjdCAiLCA4KT09MCl7CgkJCWNoYXIgeFsxMl07CgoJCQlp ZihuIC0gOCA+PSBzaXplb2YoeCkpewoJCQkJcmVzcG9uZChyLCAiaW52YWxpZCBjb250cm9sIG1z ZyIpOwoJCQkJcmV0dXJuOwoJCQl9CgoJCQlwICs9IDg7CgkJCW1lbWNweSh4LCBwLCBuLTgpOwoJ CQl4W24tOF0gPSAwOwoKCQkJY29ubltOVU0ocGF0aCldLnR5cGUgPSBzdHJ0b3VsKHgsIG5pbCwg MCk7CgkJfQoJCXItPm9mY2FsbC5jb3VudCA9IG47CgkJcmVzcG9uZChyLCBuaWwpOwoJCWJyZWFr OwoJY2FzZSBRZGF0YToKCQl3cml0ZWNvbm5kYXRhKHIpOwoJCWJyZWFrOwoJZGVmYXVsdDoKCQlz bnByaW50KGUsIHNpemVvZiBlLCAiYnVnIGluIGZzd3JpdGUgcGF0aD0lbHV4IiwgcGF0aCk7CgkJ cmVzcG9uZChyLCBlKTsKCX0KfQoKc3RhdGljIHZvaWQKZnNvcGVuKFJlcSAqcikKewoJc3RhdGlj IGludCBuZWVkWzRdID0geyA0LCAyLCA2LCAxIH07Cgl1bG9uZyBwYXRoOwoJaW50IGksIG47CglU YWIgKnQ7CglEcSAqZDsKCUNvbm4gKmM7CgoJLyoKCSAqIGxpYjlwIGFscmVhZHkgaGFuZGxlcyB0 aGUgYmxhdGFudGx5IG9idmlvdXMuCgkgKiB3ZSBqdXN0IGhhdmUgdG8gZW5mb3JjZSB0aGUgcGVy bWlzc2lvbnMgd2UgaGF2ZSBzZXQuCgkgKi8KCXBhdGggPSByLT5maWQtPnFpZC5wYXRoOwoJdCA9 ICZ0YWJbVFlQRShwYXRoKV07CgluID0gbmVlZFtyLT5pZmNhbGwubW9kZSYzXTsKCWlmKChuJnQt Pm1vZGUpICE9IG4pewoJCXJlc3BvbmQociwgInBlcm1pc3Npb24gZGVuaWVkIik7CgkJcmV0dXJu OwoJfQoKCWQgPSBuaWw7CglyLT5maWQtPmF1eCA9IG5pbDsKCglzd2l0Y2goVFlQRShwYXRoKSl7 CgljYXNlIFFjbG9uZToKCQlmb3IoaT0wOyBpPG5lbGVtKGNvbm4pOyBpKyspewoJCQlpZihjb25u W2ldLnVzZWQpCgkJCQljb250aW51ZTsKCQkJaWYoaSA+PSBuY29ubikKCQkJCW5jb25uID0gaSsx OwoJCQlwYXRoID0gUEFUSChRY3RsLCBpKTsKCQkJZ290byBDYXNlQ29ubjsKCQl9CgkJcmVzcG9u ZChyLCAib3V0IG9mIGNvbm5lY3Rpb25zIik7CgkJcmV0dXJuOwoJY2FzZSBRZGF0YToKCQlkID0g ZW1hbGxvYzlwKHNpemVvZigqZCkpOwoJCW1lbXNldChkLCAwLCBzaXplb2YoKmQpKTsKCQlkLT5x dCA9ICZkLT5xOwoJCWQtPnJ0ID0gJmQtPnI7CgkJci0+ZmlkLT5hdXggPSBkOwoJY2FzZSBRbmRp cjoKCWNhc2UgUWN0bDoKCWNhc2UgUXR5cGU6CglDYXNlQ29ubjoKCQljID0gJmNvbm5bTlVNKHBh dGgpXTsKCQlxbG9jayhjKTsKCQlpZihjLT51c2VkKysgPT0gMCl7CgkJCWMtPnR5cGUgPSAwOwoJ CQljLT5wcm9tID0gMDsKCQkJYy0+YnJpZGdlID0gMDsKCQkJYy0+aGVhZGVyc29ubHkgPSAwOwoJ CX0KCQlpZihkICE9IG5pbCl7CgkJCWQtPm5leHQgPSBjLT5kcTsKCQkJYy0+ZHEgPSBkOwoJCX0K CQlxdW5sb2NrKGMpOwoJCWJyZWFrOwoJfQoKCXItPmZpZC0+cWlkLnBhdGggPSBwYXRoOwoJci0+ b2ZjYWxsLnFpZC5wYXRoID0gcGF0aDsKCXJlc3BvbmQociwgbmlsKTsKfQoKc3RhdGljIHZvaWQK ZnNmbHVzaChSZXEgKnIpCnsKCVJlcSAqbywgKipwOwoJRmlkICpmOwoJRHEgKmQ7CgoJbyA9IHIt Pm9sZHJlcTsKCWYgPSBvLT5maWQ7CglpZihUWVBFKGYtPnFpZC5wYXRoKSA9PSBRZGF0YSl7CgkJ ZCA9IGYtPmF1eDsKCQlxbG9jayhkKTsKCQlmb3IocD0mZC0+cjsgKnA7IHA9KFJlcSoqKSYoKCpw KS0+YXV4KSl7CgkJCWlmKCpwID09IG8pewoJCQkJaWYoKCpwID0gKFJlcSopby0+YXV4KSA9PSBu aWwpCgkJCQkJZC0+cnQgPSBwOwoJCQkJci0+b2xkcmVxID0gbmlsOwoJCQkJcmVzcG9uZChvLCAi aW50ZXJydXB0ZWQiKTsKCQkJCWJyZWFrOwoJCQl9CgkJfQoJCXF1bmxvY2soZCk7Cgl9CglyZXNw b25kKHIsIG5pbCk7Cn0KCgpzdGF0aWMgdm9pZApmc2Rlc3Ryb3lmaWQoRmlkICpmaWQpCnsKCUNv bm4gKmM7CglEcSAqKngsICpkOwoJQmxvY2sgKmI7CgoJaWYoVFlQRShmaWQtPnFpZC5wYXRoKSA+ PSBRbmRpcil7CgkJYyA9ICZjb25uW05VTShmaWQtPnFpZC5wYXRoKV07CgkJcWxvY2soYyk7CgkJ aWYoZCA9IGZpZC0+YXV4KXsKCQkJZmlkLT5hdXggPSBuaWw7CgkJCWZvcih4PSZjLT5kcTsgKng7 IHg9JigoKngpLT5uZXh0KSl7CgkJCQlpZigqeCA9PSBkKXsKCQkJCQkqeCA9IGQtPm5leHQ7CgkJ CQkJYnJlYWs7CgkJCQl9CgkJCX0KCQkJd2hpbGUoYiA9IGQtPnEpewoJCQkJZC0+cSA9IGItPm5l eHQ7CgkJCQlmcmVlYihiKTsKCQkJfQoJCQlmcmVlKGQpOwoJCX0KCQlpZihUWVBFKGZpZC0+cWlk LnBhdGgpID09IFFjdGwpewoJCQlpZihjLT5wcm9tKXsKCQkJCWMtPnByb20gPSAwOwoJCQkJLy9p ZigtLW5wcm9tID09IDAgJiYgZXBwcm9taXNjdW91cyAhPSBuaWwpCgkJCQkvLwkoKmVwcHJvbWlz Y3VvdXMpKGVwY3RsLCAwKTsKCQkJfQoJCX0KCQlpZihUWVBFKGZpZC0+cWlkLnBhdGgpID09IFFk YXRhICYmIGMtPmJyaWRnZSkKCQkJbWVtc2V0KG1hY3RhYiwgMCwgc2l6ZW9mKG1hY3RhYikpOwoJ CWMtPnVzZWQtLTsKCQlxdW5sb2NrKGMpOwoJfQp9CgpzdGF0aWMgaW50Cmlub3RlKHZvaWQgKiwg Y2hhciAqbXNnKQp7CglpZihzdHJzdHIobXNnLCAiaW50ZXJydXB0IikpCgkJcmV0dXJuIDE7Cgly ZXR1cm4gMDsKfQoKc3RhdGljIHZvaWQKY3Bhc3MoQ29ubiAqYywgQmxvY2sgKmJwKQp7CglEcSAq ZDsKCglxbG9jayhjKTsKCWZvcihkID0gYy0+ZHE7IGQgIT0gbmlsOyBkID0gZC0+bmV4dCl7CgkJ cWxvY2soZCk7CgkJaWYoZC0+c2l6ZSA8IDEwMDAwMCl7CgkJCUJsb2NrICpxOwoKCQkJaWYoZC0+ bmV4dCA9PSBuaWwpIHsKCQkJCXEgPSBicDsKCQkJCWJwID0gbmlsOwoJCQl9IGVsc2UKCQkJCXEg PSBjb3B5YmxvY2soYnAsIEJMRU4oYnApKTsKCQkJcS0+bmV4dCA9IG5pbDsKCQkJKmQtPnF0ID0g cTsKCQkJZC0+cXQgPSAmcS0+bmV4dDsKCQkJZC0+c2l6ZSArPSBCTEVOKHEpOwoJCQltYXRjaHJx KGQpOwoJCX0KCQlxdW5sb2NrKGQpOwoJfQoJcXVubG9jayhjKTsKCglpZihicCAhPSBuaWwpCgkJ ZnJlZWIoYnApOwp9CgpzdGF0aWMgdm9pZApldGhlcnJ0cmFjZShDb25uICpjLCBFdGhlcnBrdCAq cGt0LCBpbnQgbGVuKQp7CglCbG9jayAqYnA7CgoJYnAgPSBhbGxvY2IoNjQpOwoJbWVtbW92ZShi cC0+d3AsIHBrdCwgbGVuIDwgNjQgPyBsZW4gOiA2NCk7CglpZihjLT50eXBlICE9IC0yKXsKCQl1 MzJpbnQgbXMgPSBuc2VjKCkvMTAwMDAwMExMOwoJCWJwLT53cFs1OF0gPSBsZW4+Pjg7CgkJYnAt PndwWzU5XSA9IGxlbjsKCQlicC0+d3BbNjBdID0gbXM+PjI0OwoJCWJwLT53cFs2MV0gPSBtcz4+ MTY7CgkJYnAtPndwWzYyXSA9IG1zPj44OwoJCWJwLT53cFs2M10gPSBtczsKCX0KCWJwLT53cCAr PSA2NDsKCWNwYXNzKGMsIGJwKTsKfQoKc3RhdGljIE1hY2VudCoKbWFjZW50KHVjaGFyICplYSkK ewoJdTMyaW50IGggPSAoZWFbMF0gfCBlYVsxXTw8OCB8IGVhWzJdPDwxNiB8IGVhWzNdPDwyNCkg XiAoZWFbNF0gfCBlYVs1XTw8OCk7CglyZXR1cm4gJm1hY3RhYltoICUgbmVsZW0obWFjdGFiKV07 Cn0KCnN0YXRpYyBCbG9jayoKZXRoZXJtdXgoQmxvY2sgKmJwLCBDb25uICpmcm9tKQp7CglFdGhl cnBrdCAqcGt0OwoJQ29ubiAqYywgKng7CglpbnQgbGVuLCBtdWx0aSwgdG9tZSwgcG9ydCwgdHlw ZSwgZGlzcG9zZTsKCglsZW4gPSBCTEVOKGJwKTsKCWlmKGxlbiA8IEVUSEVSSERSU0laRSkKCQln b3RvIERyb3A7Cglwa3QgPSAoRXRoZXJwa3QqKWJwLT5ycDsKCWlmKCEobXVsdGkgPSBwa3QtPmRb MF0gJiAxKSl7CgkJdG9tZSA9IG1lbWNtcChwa3QtPmQsIG1hY2FkZHIsIEVhZGRybGVuKSA9PSAw OwoJCWlmKCF0b21lICYmIGZyb20gIT0gbmlsICYmIG5wcm9tID09IDApCgkJCXJldHVybiBicDsK CX0gZWxzZSB7CgkJdG9tZSA9IDA7CgkJaWYoZnJvbSA9PSBuaWwgJiYgbnByb20gPT0gMAoJCSYm IG1lbWNtcChwa3QtPmQsIGJjYXN0LCBFYWRkcmxlbikgIT0gMAoJCSYmIGFjdGl2ZW11bHRpKHBr dC0+ZCkgPCAwKQoJCQlnb3RvIERyb3A7Cgl9CgoJcG9ydCA9IC0xOwoJaWYobnByb20pewoJCWlm KChmcm9tID09IG5pbCB8fCBmcm9tLT5icmlkZ2UpICYmIChwa3QtPnNbMF0gJiAxKSA9PSAwKXsK CQkJTWFjZW50ICp0ID0gbWFjZW50KHBrdC0+cyk7CgkJCXQtPnBvcnQgPSBmcm9tID09IG5pbCA/ IDAgOiAxKyhmcm9tIC0gY29ubik7CgkJCW1lbW1vdmUodC0+ZWEsIHBrdC0+cywgRWFkZHJsZW4p OwoJCX0KCQlpZighdG9tZSAmJiAhbXVsdGkpewoJCQlNYWNlbnQgKnQgPSBtYWNlbnQocGt0LT5k KTsKCQkJaWYobWVtY21wKHQtPmVhLCBwa3QtPmQsIEVhZGRybGVuKSA9PSAwKQoJCQkJcG9ydCA9 IHQtPnBvcnQ7CgkJfQoJfQoKCXggPSBuaWw7Cgl0eXBlID0gKHBrdC0+dHlwZVswXTw8OCl8cGt0 LT50eXBlWzFdOwoJZGlzcG9zZSA9IHRvbWUgfHwgZnJvbSA9PSBuaWwgfHwgcG9ydCA+IDA7CgoJ Zm9yKGMgPSBjb25uOyBjIDwgJmNvbm5bbmNvbm5dOyBjKyspewoJCWlmKCFjLT51c2VkKQoJCQlj b250aW51ZTsKCQlpZihjLT50eXBlICE9IHR5cGUgJiYgYy0+dHlwZSA+PSAwKQoJCQljb250aW51 ZTsKCQlpZighdG9tZSAmJiAhbXVsdGkgJiYgIWMtPnByb20pCgkJCWNvbnRpbnVlOwoJCWlmKGMt PmJyaWRnZSl7CgkJCWlmKHRvbWUgfHwgYyA9PSBmcm9tKQoJCQkJY29udGludWU7CgkJCWlmKHBv cnQgPj0gMCAmJiBwb3J0ICE9IDErKGMgLSBjb25uKSkKCQkJCWNvbnRpbnVlOwoJCX0KCQlpZihj LT5oZWFkZXJzb25seSB8fCBjLT50eXBlID09IC0yKXsKCQkJZXRoZXJydHJhY2UoYywgcGt0LCBs ZW4pOwoJCQljb250aW51ZTsKCQl9CgkJaWYoZGlzcG9zZSAmJiB4ID09IG5pbCkKCQkJeCA9IGM7 CgkJZWxzZQoJCQljcGFzcyhjLCBjb3B5YmxvY2soYnAsIGxlbikpOwoJfQoJaWYoeCAhPSBuaWwp ewoJCWNwYXNzKHgsIGJwKTsKCQlyZXR1cm4gbmlsOwoJfQoKCWlmKGRpc3Bvc2UpewpEcm9wOgkJ ZnJlZWIoYnApOwoJCXJldHVybiBuaWw7Cgl9CglyZXR1cm4gYnA7Cn0KCnZvaWQKZXRoZXJpcShC bG9jayAqYnApCnsKCXN0YXRzLmluKys7CglldGhlcm11eChicCwgbmlsKTsKfQoKc3RhdGljIHZv aWQKZXRoZXJvcShCbG9jayAqYnAsIENvbm4gKmZyb20pCnsKCWlmKCFmcm9tLT5icmlkZ2UpCgkJ bWVtbW92ZSgoKEV0aGVycGt0KilicC0+cnApLT5zLCBtYWNhZGRyLCBFYWRkcmxlbik7CglicCA9 IGV0aGVybXV4KGJwLCBmcm9tKTsKCWlmKGJwID09IG5pbCkKCQlyZXR1cm47CglzdGF0cy5vdXQr KzsKCS8qIHRyYW5zbWl0IGZyZWVzIGJ1ZmZlciAqLwoJYnAtPnJwLT0xMjsKCW1lbXNldChicC0+ cnAsIDAsIDEyKTsKCXdyaXRlKGdyZWNvbiwgYnAtPnJwLCBCTEVOKGJwKSk7CglmcmVlYihicCk7 Cn0KCnN0YXRpYyB2b2lkCmdyZXJlYWRwcm9jKHZvaWQgKikKewoJY2hhciBlcnJbRVJSTUFYXTsK CXVjaGFyIGJ1ZlsxNjAwXTsKCWludCBuZXJyOwoJaW50IGxlbjsKCUJsb2NrICpiOwoJdXNob3J0 IGZsYWdzOwoKCWF0bm90aWZ5KGlub3RlLCAxKTsKCgl0aHJlYWRzZXRuYW1lKCJncmVyZWFkcHJv YyIpOwoKCW5lcnIgPSAwOwoJZm9yKDs7KXsKCQkvKiByZWNlaXZlIGFsbG9jYXRlcyBidWZmZXIg YW5kIGNhbGxzIGV0aGVyaXEoYiwgMSk7ICovCgkJaWYoKGxlbiA9IHJlYWQoZ3JlY29uLCBidWYs IDE2MDApKSA8IDApewoJCQlmcHJpbnQoMiwgImdvdCBwYWNrZXQhXG4iKTsKCQkJcmVycnN0cihl cnIsIHNpemVvZihlcnIpKTsKCQkJaWYoc3Ryc3RyKGVyciwgImludGVycnVwdGVkIikgfHwgc3Ry c3RyKGVyciwgInRpbWVkIG91dCIpKQoJCQkJY29udGludWU7CgkJCWZwcmludCgyLCAiZ3JlcmVh ZHByb2M6ICVzXG4iLCBlcnIpOwoJCQlpZigrK25lcnIgPCAzKQoJCQkJY29udGludWU7CgkJCXRo cmVhZGV4aXRzYWxsKGVycik7CgkJfQoJCW5lcnIgPSAwOwoKCQlmbGFncyA9IG5oZ2V0cyhidWYr OCk7CgkJaWYoZmxhZ3MpewoJCQlzdGF0cy5ib2d1cysrOwoJCQljb250aW51ZTsKCQl9CgoJCWIg PSBhbGxvY2IoMTYwMCk7CgkJbWVtY3B5KGItPndwLCBidWYrMTIsIGxlbi0xMik7CgkJYi0+d3Ar PShsZW4tMTIpOwoJCWV0aGVyaXEoYik7Cgl9Cn0KClNydiBmcyA9IAp7Ci5hdHRhY2g9CWZzYXR0 YWNoLAouZGVzdHJveWZpZD0JZnNkZXN0cm95ZmlkLAoud2FsazE9CQlmc3dhbGsxLAoub3Blbj0J CWZzb3BlbiwKLnJlYWQ9CQlmc3JlYWQsCi53cml0ZT0JCWZzd3JpdGUsCi5zdGF0PQkJZnNzdGF0 LAouZmx1c2g9CQlmc2ZsdXNoLAp9OwoKc3RhdGljIHZvaWQKdXNhZ2Uodm9pZCkKewoJZnByaW50 KDIsICJ1c2FnZTogJXMgWy1kRF0gWy1pIGluZGV4XSBbLWEgYWRkcl0gcmVtb3RlXG4iLCBhcmd2 MCk7CglleGl0cygidXNhZ2UiKTsKfQoKdm9pZAp0aHJlYWRtYWluKGludCBhcmdjLCBjaGFyICoq YXJndikKewoJY2hhciBzWzY0XSwgKnQsICpkOwoJaW50IGlkeCA9IDA7CgoJZm10aW5zdGFsbCgn RScsIGVpcGZtdCk7CgkKCglBUkdCRUdJTiB7CgljYXNlICdkJzoKCQlkZWJ1ZyA9IDE7CgkJYnJl YWs7CgljYXNlICdEJzoKCQljaGF0dHk5cCsrOwoJCWJyZWFrOwoJY2FzZSAnaSc6CgkJaWR4ID0g YXRvaShFQVJHRih1c2FnZSgpKSk7CgljYXNlICdhJzoKCQlzZXRtYWMgPSAxOwoJCWlmKHBhcnNl ZXRoZXIobWFjYWRkciwgRUFSR0YodXNhZ2UoKSkpICE9IDApCgkJCXVzYWdlKCk7CgkJYnJlYWs7 CglkZWZhdWx0OgoJCXVzYWdlKCk7Cgl9IEFSR0VORDsKCglpZihhcmdjICE9IDEpCgkJdXNhZ2Uo KTsKCglpZighc2V0bWFjKXsKCQlnZW5yYW5kb20obWFjYWRkciwgRWFkZHJsZW4pOwoJCW1hY2Fk ZHJbMF0gJj0gMHhmZTsKCX0KCglkID0gc21wcmludCgiZ3JlISVzITI1OTQ0IiwgYXJndlswXSk7 CglncmVjb24gPSBkaWFsKGQsIG5pbCwgbmlsLCBuaWwpOwoKCWlmKGdyZWNvbiA9PSAtMSkKCQlz eXNmYXRhbCgiJXIiKTsKCgl3ZXJyc3RyKCIiKTsKCglwcm9jY3JlYXRlKGdyZXJlYWRwcm9jLCBu aWwsIDgqMTAyNCk7CgoJYXRub3RpZnkoaW5vdGUsIDEpOwoJdGltZTAgPSB0aW1lKDApOwoKCXRh YltRaWZhY2VdLm5hbWUgPSBzbXByaW50KCJldGhlckclZCIsIGlkeCk7CglzbnByaW50KHMsIHNp emVvZihzKSwgIiVkLnVncmUiLCBpZHgpOwoJdGhyZWFkcG9zdG1vdW50c3J2KCZmcywgcywgIi9u ZXQvIiwgTUFGVEVSKTsKCgl0aHJlYWRleGl0cygwKTsKfQoKQmxvY2sqCmFsbG9jYihpbnQgc2l6 ZSkKewoJQmxvY2sgKmI7CgoJYiA9IGVtYWxsb2M5cChzaXplb2YoKmIpICsgc2l6ZSk7CgliLT5s aW0gPSBiLT5iYXNlICsgc2l6ZTsKCWItPnJwID0gYi0+YmFzZTsKCWItPndwID0gYi0+YmFzZTsK CWItPm5leHQgPSBuaWw7CglyZXR1cm4gYjsKfQoKQmxvY2sqCmNvcHlibG9jayhCbG9jayAqYiwg aW50IGNvdW50KQp7CglCbG9jayAqbmI7CgoJaWYoY291bnQgPiBCTEVOKGIpKQoJCWNvdW50ID0g QkxFTihiKTsKCW5iID0gYWxsb2NiKGNvdW50KTsKCW1lbW1vdmUobmItPndwLCBiLT5ycCwgY291 bnQpOwoJbmItPndwICs9IGNvdW50OwoJcmV0dXJuIG5iOwp9Cg== --upas-lnrispncgypqyrqvsshctosgnn-- ------=_Part_565303_2063917545.1695479216477--