From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI autolearn=ham autolearn_force=no version=3.4.4 Received: from cgl.ntg.nl (Cgl.ntg.nl [5.39.185.202]) by inbox.vuxu.org (Postfix) with ESMTP id 273662EBF6 for ; Wed, 16 Oct 2024 23:50:49 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by cgl.ntg.nl (Postfix) with ESMTP id 5A572484E52 for ; Wed, 16 Oct 2024 23:50:04 +0200 (CEST) Authentication-Results: cgl.ntg.nl (amavisd-new); dkim=pass (1024-bit key) reason="pass (just generated, assumed good)" header.d=ntg.nl DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ntg.nl; h= content-transfer-encoding:content-type:content-type :list-unsubscribe:list-subscribe:list-post:list-owner:list-help :list-archive:archived-at:list-id:subject:subject:reply-to :precedence:content-language:in-reply-to:mime-version:user-agent :date:date:message-id:from:from:references:received:received :received:received:received:received:received; s=cgl; t= 1729115403; x=1731707404; bh=Y9DGEh6FdYQROnaiYoheoO2FOfD4mK5/QqG 55ytXWSk=; b=LhEoeE5mw8z3X5Ai7RsgCIwi3WIlv6FeDgeOxn5/LwHNEq9UTYs vkqkO3IXMiOKYf1QbmP1iQxLu14xPwv+QjJJpcfcT7gZWtD1nQJosmIuu9RxDwOK xNfTtg5nvXEM5iEwwwh/S2iDevA5ZHHhWSEVr2Zil2N8ur3x8x7F5LUk= X-Virus-Scanned: Debian amavisd-new at cgl.ntg.nl Authentication-Results: cgl.ntg.nl (amavisd-new); dkim=fail (2048-bit key) reason="fail (message has been altered)" header.d=gmail.com Received: from cgl.ntg.nl ([127.0.0.1]) by localhost (cgl.ntg.nl [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id v5BMt_w-din6 for ; Wed, 16 Oct 2024 23:50:03 +0200 (CEST) Received: from cgl.ntg.nl (localhost [127.0.0.1]) by cgl.ntg.nl (Postfix) with ESMTP id A9CAE484E57 for ; Wed, 16 Oct 2024 23:49:20 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by cgl.ntg.nl (Postfix) with ESMTP id 6EE0B484CC1 for ; Wed, 16 Oct 2024 23:49:00 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at cgl.ntg.nl Received: from cgl.ntg.nl ([127.0.0.1]) by localhost (cgl.ntg.nl [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id exHF7Qmt6LC8 for ; Wed, 16 Oct 2024 23:48:59 +0200 (CEST) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=209.85.167.48; helo=mail-lf1-f48.google.com; envelope-from=wolfgang.schuster.lists@gmail.com; receiver= Received: from mail-lf1-f48.google.com (mail-lf1-f48.google.com [209.85.167.48]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by cgl.ntg.nl (Postfix) with ESMTPS id EC7B6484CA4 for ; Wed, 16 Oct 2024 23:48:59 +0200 (CEST) Received: by mail-lf1-f48.google.com with SMTP id 2adb3069b0e04-539fe76e802so381816e87.1 for ; Wed, 16 Oct 2024 14:48:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1729115339; x=1729720139; darn=ntg.nl; h=content-transfer-encoding:content-language:in-reply-to:mime-version :user-agent:date:message-id:from:references:to:subject:from:to:cc :subject:date:message-id:reply-to; bh=jNBc45/8z1A/qMA5zMgqMAXdhfYBXT538be4etPmy24=; b=np8YM+9iwj8XYViwIKAcDk4H+fOBqX1cEYQrepMA5joaKeWciLzV7SOCpMZDOjno+P YlLkVK33e8hB+RFS+IPhqWKzp/H/1XR6iKSNBn8C78cSLTzLxPtd2voKfM1w8PZhZXTi 7Uz+ThFOCFQPr+3AqZUalwixDga0cmhCch+mgNmZgMbtpVaa3s3xaq2tkyBwBYvDBsnt 5WaHsttULFMcfEdH7+HdCDBf6dM8J5mBlZrTfsOxZ9n4yiaexjpsZAFj3f1xpNT27UKr MaynodTWk3KVeXQ0suS2/DcYcNq+ri8JzuoDC0lztg83O79Vlv+WszAotaMhaJj2+Ddo G6TQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1729115339; x=1729720139; h=content-transfer-encoding:content-language:in-reply-to:mime-version :user-agent:date:message-id:from:references:to:subject :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=jNBc45/8z1A/qMA5zMgqMAXdhfYBXT538be4etPmy24=; b=Cz0WNfpSWJ9vnZ8daPN2FNvtugYT4Mu1/daCwy0Yirlqbwj9PmZ7h3YdCYSqup1qrZ mptSAuKvRwkfv/Lf4M3QOUoRDsligKcNkO8hnnEfZNNtYCs7Ajqh+jFYO5mEef78kKjJ k+ZdAIxnvhDwXfTs8EjcePouxuaOfrtXZbUrUOWWqy2ayQx/Hh2+p1m61bG/Q5sOqfwD jUljJsrLdN48Y/Ythv0l2T/CvTY0tyI7YaFQ4vBZY7zeYUCLA8ehWCgclzJRTsuwk17/ bbYvpVcFhm50YO1GNSqel4HX+X7+sKkXWJNTSRTATRVHi39voicUnHpBEnew1LUFz1XY Ni0w== X-Gm-Message-State: AOJu0Yx6jzSK6WuyMVTp5KYjPEhUyWp78T55ChlDf4mjorUOkR74ueFA SMuuDvwrnxbfWubC6yaqKdyYSEY5Cn+IqZHvkyTqE00wR39hXc1JHz/9ag== X-Google-Smtp-Source: AGHT+IEkfgx8XAFyjKvBuFc/hX9+7AVCrH2NpcgtlABKsvZdki+OCIb3XjLNwPXKYJVRW007SezRsQ== X-Received: by 2002:a05:6512:280c:b0:52e:7448:e137 with SMTP id 2adb3069b0e04-539e54d77a1mr8981236e87.6.1729115338627; Wed, 16 Oct 2024 14:48:58 -0700 (PDT) Received: from ?IPv6:2a02:810d:a8bf:e1a8::4b99? ([2a02:810d:a8bf:e1a8::4b99]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-a9a29850806sm220140266b.185.2024.10.16.14.48.57 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 16 Oct 2024 14:48:58 -0700 (PDT) To: mailing list for ConTeXt users , Rik Kabel References: <8b8380f8-fcaa-483b-bfd8-dfc4cf554d6e@rik.users.panix.com> From: Wolfgang Schuster Message-ID: <95601b3f-d481-a307-ec4f-5226eebcebf4@gmail.com> Date: Wed, 16 Oct 2024 23:48:58 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 PostboxApp/7.0.64 MIME-Version: 1.0 In-Reply-To: <8b8380f8-fcaa-483b-bfd8-dfc4cf554d6e@rik.users.panix.com> Content-Language: en-US Message-ID-Hash: 4DHWLUGOTULM5VTYPHJWY55YNJRF4SE2 X-Message-ID-Hash: 4DHWLUGOTULM5VTYPHJWY55YNJRF4SE2 X-MailFrom: wolfgang.schuster.lists@gmail.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.9 Precedence: list Reply-To: mailing list for ConTeXt users Subject: [NTG-context] Re: Low-level macro help needed List-Id: mailing list for ConTeXt users Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: Content-Type: text/plain; charset="utf-8"; format="flowed" Content-Transfer-Encoding: base64 UmlrIEthYmVsIHNjaHJpZWIgYW0gMTYuMTAuMjAyNCB1bSAyMzoxODoNCj4gSGVsbG8gSGFucyBh bmQgZGV2ZWxvcGVycywNCj4gDQo+IEkgaGF2ZSBiZWVuIHRyeWluZyB0byBjb252ZXJ0IHNvbWUg dHdvLSBhbmQgdGhyZWUtc3RlcCBtYWNyb3MgKGFzIHNob3duIA0KPiBiZWxvdykgdG8gc2luZ2xl LXN0ZXAgbWFjcm9zIHVzaW5nIHRoZSBMTVRYIHN5bnRheCBnaXZlbiBpbiB0aGUgDQo+IGxvdy1s ZXZlbCBtYWNyb3MgbWFudWFsLiBJIGhhdmUgc3VjY2VlZGVkIGluIG1hbnkgY2FzZXMsIGJ1dCBm YWlsZWQgd2hlbiANCj4gdGhlIG1hY3JvIGZvbGxvd3Mgb25lIHBhcnRpY3VsYXIgZ3JvdXAgb2Yg cGF0dGVybnMuDQo+IA0KPiBUaGUgZ3JvdXAgb2YgcGF0dGVybnMgaXMgc2ltaWxhciB0byB0aGlz IG1hY3JvIHRvIHByb2Nlc3MNCj4gDQo+ICAgICBcTXlNYWNyb1tvcHRpb25hbF17UmVxdWlyZWR9 e1JlcXVpcmVkfXtPcHRpb25hbH0NCj4gDQo+IEluIHRoaXMgdGhlIG51bWJlciBvZiBhcmd1bWVu dHMgY2FuIGJlIDIsIDMsIG9yIDQuDQo+IA0KPiBBIHRocmVlLXN0ZXAgc29sdXRpb24gbWlnaHQg YmUgYXMgZm9sbG93cywgd2hpY2ggSSB1c2UgZm9yIGEgbGlzdCBvZiANCj4gcGVyc29uczoNCj4g DQo+ICAgICBcZGVmaW5lcmVnaXN0ZXJbQmluZGV4XQ0KPiAgICAgXHNldHVwcmVnaXN0ZXIgW0Jp bmRleF1bbj0xLA0KPiAgICAgIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgYmFsYW5jZT1ubywNCj4gICAgICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIG1ldGhvZD1kZWZhdWx0LCAlIG9yIE5ldyBmb2xsb3dzIE5ld3Rv biENCj4gICAgICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGNvbXByZXNzPW5vLCAlIHllcyBpZiBub3Qgbm90ZSBudW1iZXIrcQ0KPiAgICAgIMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZXhwYW5zaW9uPXllcywNCj4g ICAgICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBhZ2Vj b21tYW5kPVxnb2JibGVvbmVhcmd1bWVudA0KPiAgICAgIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIF0NCj4gDQo+ICAgICBcc3RhcnR0ZXhkZWZpbml0aW9uIHVu ZXhwYW5kZWQgQmkNCj4gICAgICDCoCBcZG9zaW5nbGVlbXB0eVxkb0JpbmRleA0KPiAgICAgXHN0 b3B0ZXhkZWZpbml0aW9uDQo+IA0KPiAgICAgXHN0YXJ0dGV4ZGVmaW5pdGlvbiB1bmV4cGFuZGVk IGRvQmluZGV4IFsjU09SVEFTXSNJTkRFWEVEDQo+ICAgICAgwqAgXGRlZlxTb3J0QXN7I1NPUlRB U30lDQo+ICAgICAgwqAgXGRlZlxJbmRleGVkeyNJTkRFWEVEfSUNCj4gICAgICDCoCBcZG9kb3Vi bGVncm91cGVtcHR5XGRvQmluZGV4RnVsbA0KPiAgICAgXHN0b3B0ZXhkZWZpbml0aW9uDQo+IA0K PiAgICAgXHN0YXJ0dGV4ZGVmaW5pdGlvbiBkb0JpbmRleEZ1bGwgI0JEI01PUkUNCj4gICAgICDC oCBcZG9pZmVtcHR5ZWxzZXsjTU9SRX0NCj4gICAgICDCoMKgwqAge1xCaW5kZXhbXFNvcnRBc117 XEluZGV4ZWRcICNCRH19DQo+ICAgICAgwqDCoMKgIHtcQmluZGV4W1xTb3J0QXNde1xJbmRleGVk XCAjQkRcXCAjTU9SRX19DQo+ICAgICBcc3RvcHRleGRlZmluaXRpb24NCj4gDQo+IHdpdGggaW5w dXQgbGlrZToNCj4gDQo+ICAgICBcQml7UnVtYmxlLCBXYWxrZXJ9ezE5Mzh84oCTfH0lDQo+ICAg ICBcQml7UnVuaWEsIERhdmlkIFRoZXVuaXN9ezE5NTF84oCTfH17Q2xhc3NpY2lzdH0lDQo+ICAg ICBcQml7UnV0aGVyZm9yZCwgRXJuZXN0IChCYXJvbiBSdXRoZXJmb3JkIG9mDQo+ICAgICBOZWxz b24pfXsxODcxfOKAk3wxOTM3fXtQaHlzaWNpc3R9JQ0KPiAgICAgXEJpe1NhZW5nZXIsIFBhdWx9 ezE5NDV84oCTfH0lDQo+ICAgICBcQml7U2FsZGFyaW5pLCBBbnRob255IEoufXsxOTQxfOKAk3wy MDAxfSUNCj4gICAgIFxCaXtTYWx0ZXIsIFdpbGxpYW0gTS59ezE4NTN84oCTfDE5MzF9JQ0KPiAg ICAgXEJpW1NhaW50LUV4dXBlcnlde2RlIFNhaW50LUV4dXDDqXJ5LCBBbnRvaW5lfXsxOTAwfOKA k3wxOTQ0fSUNCj4gICAgIFxCaXtTYW50YXlhbmEsIEdlb3JnZX17MTg2M3zigJN8MTk1Mn0lDQo+ ICAgICBcQml7U2FwaXIsIEVkd2FyZH17MTg4NHzigJN8MTkzOX17TGluZ3Vpc3R9JQ0KPiAgICAg XEJpW1NjaHJvZGluZ2VyXXtTY2hyw7ZkaW5nZXIsIEVyd2lufXsxODg3fOKAk3wxOTYxfXtQaHlz aWNpc3R9JQ0KPiAgICAgXEJpW1NwaW5vemFde2RlIFNwaW5vemEsIEJhcnVjaCAoQmVuZWRpY3Qg ZGUgU3Bpbm96YSwgQmVudG8gZGUNCj4gICAgIEVzcGlub3NhKX17MTYzMnzigJN8MTY3N30lDQo+ IA0KPiBUaGUgYmVzdCBJIGNhbiBnZXQgd2l0aCB0aGUgbmV3ZXIgc3ludGF4IGlzIGEgdHdvLXN0 ZXA6DQo+IA0KPiANCj4gICAgIFxzdGFydHRleGRlZmluaXRpb24gdW5leHBhbmRlZCBCaQ0KPiAg ICAgIMKgIFxkb3NpbmdsZWVtcHR5XGRvQmluZGV4DQo+ICAgICBcc3RvcHRleGRlZmluaXRpb24N Cj4gICAgIFx0b2xlcmFudFxkZWZcZG9CaW5kZXggWyMxXSM9Iz0jPSUNCj4gICAgICDCoCB7XGRv aWZlbXB0eWVsc2V7IzR9DQo+ICAgICAgwqDCoMKgIHtcQmluZGV4WyMxXXsjMlwgIzN9fSUNCj4g ICAgICDCoMKgwqAge1xCaW5kZXhbIzFdeyMyXCAjM1xcICM0fX0lDQo+ICAgICAgwqAgfQ0KPiAN Cj4gSW4gdGhlIGxvdy1sZXZlbCBtYWNyb3MgbWFudWFsLCBuZWFyIHRoZSBlbmQgb2YgY2hhcHRl ciAyLCBpdCBzYXlzIHRoYXQgDQo+IHNvbWUgZGF5IHRoZXJlIG1heSBiZSBhIHVzZSBmb3IgIz8s ICMhLCAjPCwgb3IgIz4uIElmIEkgYW0gbm90IG1pc3NpbmcgDQo+IHNvbWV0aGluZyBpbiB0aGUg bWFudWFsIGFib3V0IGhvdyB0byBwcm92aWRlIHRoYXQgZmlyc3Qgb3B0aW9uYWwgDQo+IGFyZ3Vt ZW50IGFzIGFuIGVtcHR5IHZhbHVlLCBJIHRoaW5rIEkgaGF2ZSBvbmUuIENvdWxkIFsjP10gYWx3 YXlzIHJldHVybiANCj4gYSB2YWx1ZSAocGVyaGFwcyBlbXB0eSk/IFRoYXQgd291bGQgYWxsb3cg c29tZXRoaW5nIGxpa2U6DQo+IA0KPiAgICAgXHRvbGVyYW50XGRlZlxkb0JpbmRleCBbIz9dIz0j PSM9JQ0KPiAgICAgIMKgIHtcZG9pZmVtcHR5ZWxzZXsjNH0NCj4gICAgICDCoMKgwqAge1xCaW5k ZXhbIzFdeyMyXCAjM319JQ0KPiAgICAgIMKgwqDCoCB7XEJpbmRleFsjMV17IzJcICMzXFwgIzR9 fSUNCj4gICAgICDCoCB9DQoNCg0KV2hlbiB5b3UgaGF2ZSBhcmd1bWVudCBhZnRlciBzcXVhcmUg YnJhY2tldHMgeW91IGhhdmUgdG8gdXNlICM6IHRvIA0KY29udGludWVzIHNjYW5uaW5nIGZvciBh cmd1bWVudHMgb2YgdGhlIGNvbW1hbmQuIEZvciB0aGUgbWFuZGF0b3J5IA0KYXJndW1lbnQgeW91 IHNob3VsZCBqdXN0IHVzZSAjMiBhbmQga2VlcCAjPSBmb3IgdGhlIG9wdGlvbmFsIGFyZ3VtZW50 cyANCndoaWNoIGFyZSBvbmx5IHVzZWQgd2hlbiB0ZXh0IGVuY2xvc2VkIGluIGN1cmx5IGJyYWNl cyBhcHBlYXJzLiBUaGUgIyogDQpiZXR3ZWVuIHRoZSB0aGlyZCBhbmQgZm91cnRoIGFyZ3VtZW50 IGFsbG93cyBzcGFjZXMgYmV0d2VlbiB0aGVtLg0KDQolJSUlIGJlZ2luIGV4YW1wbGUNClx0b2xl cmFudFxwcm90ZWN0ZWRcZGVmXEJpWyMxXSM6IzIjKiM9IyojPSUNCiAgIHsoMT0jMSklDQogICAg KDI9IzIpJQ0KICAgICgzPSMzKSUNCiAgICAoND0jNCl9DQoNClxzdGFydHRleHQNCg0KW1xCaVtv bmVde3R3b317dGhyZWV9e2ZvdXJ9XQ0KDQpbXEJpIFtvbmVdIHt0d299IHt0aHJlZX0ge2ZvdXJ9 XQ0KDQpbXEJpIFtvbmVdIHt0d299IHt0aHJlZX1dDQoNCltcQmkgW29uZV0ge3R3b31dDQoNCltc Qmkge3R3b31dDQoNCltcQmkgW29uZV0ge3R3b31dDQoNClxzdG9wdGV4dA0KJSUlJSBlbmQgZXhh bXBsZQ0KDQpUbyBjaGVjayB3aGV0aGVyIGEgYXJndW1lbnQgaXMgZW1wdHkgb3Igbm90IHlvdSBj YW4gdXNlIHRoZSBcaWZwYXJhbWV0ZXIgDQpjb21tYW5kIHdpdGggdGhlIHBhcmFtZXRlciB0byBj aGVjayAoaS5lLiAjMSkgYXMgYXJndW1lbnQgKGRvbid0IGZvcmdldCANCnRoZSBcb3IpIGJ1dCBc ZG9pZmVtcHR5IGV0Yy4gd29yayBhcyB3ZWxsLg0KDQolJSUlIGJlZ2luIGV4YW1wbGUNClx0b2xl cmFudFxwcm90ZWN0ZWRcZGVmXEJpWyMxXSM6IzIjKiM9IyojPSUNCiAgIHtcaWZwYXJhbWV0ZXIj MVxvcg0KICAgICAgRmlyc3QgYXJndW1lbnQgaXMgdXNlZC4NCiAgICBcZWxzZQ0KICAgICAgRmly c3QgYXJndW1lbnQgaXMgbWlzc2luZyBvciBlbXB0eS4NCiAgICBcZml9DQoNClxzdGFydHRleHQN Cg0KXEJpIHtiYXJ9DQoNClxCaSBbXSB7YmFyfQ0KDQpcQmkgW2Zvb10ge2Jhcn0NCg0KXHN0b3B0 ZXh0DQolJSUlIGVuZCBleGFtcGxlDQoNCldvbGZnYW5nDQpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpJZiB5b3VyIHF1ZXN0aW9uIGlzIG9mIGludGVyZXN0IHRvIG90aGVycyBhcyB3ZWxsLCBw bGVhc2UgYWRkIGFuIGVudHJ5IHRvIHRoZSBXaWtpIQoKbWFpbGxpc3QgOiBudGctY29udGV4dEBu dGcubmwgLyBodHRwczovL21haWxtYW4ubnRnLm5sL21haWxtYW4zL2xpc3RzL250Zy1jb250ZXh0 Lm50Zy5ubAp3ZWJwYWdlICA6IGh0dHBzOi8vd3d3LnByYWdtYS1hZGUubmwgLyBodHRwczovL2Nv bnRleHQuYWFuaGV0Lm5ldCAobWlycm9yKQphcmNoaXZlICA6IGh0dHBzOi8vZ2l0aHViLmNvbS9j b250ZXh0Z2FyZGVuL2NvbnRleHQKd2lraSAgICAgOiBodHRwczovL3dpa2kuY29udGV4dGdhcmRl bi5uZXQKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K