{"success":true,"data":{"ext":"xlm","name":"XLM","description":"Microsoft Excel Macro (XLM) is a legacy worksheet format created and maintained by Microsoft for Excel 5.0 and later compatibility. It was used to store macro sheets and automate spreadsheet tasks, particularly in older Microsoft Excel workbooks and add-ins. The format is obsolete and can contain executable macro code, so files from untrusted sources should be opened with caution in environments that disable legacy automation features.","mime":["application/vnd.ms-excel"],"risk_level":"Safe","signatures":[{"hex":"4D 69 63 72 6F 73 6F 66 74 20 45 78 63 65 6C 20 35 2E 30 20 57 6F 72 6B 73 68 65 65 74","offset":2080,"sources":[{"name":"Apache Tika","url":"https://raw.githubusercontent.com/apache/tika/main/tika-core/src/main/resources/org/apache/tika/mime/tika-mimetypes.xml"}]},{"hex":"46 6F 67 6C 69 6F 20 64 69 20 6C 61 76 6F 72 6F 20 4D 69 63 72 6F 73 6F 66 74 20 45 78 63 65","offset":2080,"sources":[{"name":"Apache Tika","url":"https://raw.githubusercontent.com/apache/tika/main/tika-core/src/main/resources/org/apache/tika/mime/tika-mimetypes.xml"}]},{"hex":"42 69 66 66 35","offset":2114,"sources":[{"name":"Apache Tika","url":"https://raw.githubusercontent.com/apache/tika/main/tika-core/src/main/resources/org/apache/tika/mime/tika-mimetypes.xml"}]},{"hex":"42 69 66 66 35","offset":2121,"sources":[{"name":"Apache Tika","url":"https://raw.githubusercontent.com/apache/tika/main/tika-core/src/main/resources/org/apache/tika/mime/tika-mimetypes.xml"}]},{"hex":"D0 CF 11 E0 A1 B1 1A E1","offset":0,"sources":[{"name":"Apache Tika","url":"https://raw.githubusercontent.com/apache/tika/main/tika-core/src/main/resources/org/apache/tika/mime/tika-mimetypes.xml"}]}],"related":["xlc","xld","xll","xlt","xlw","xla"],"usage":{"python":"def is_xlm(file_path: str) -> bool:\n    \"\"\"Check if file is a valid XLM by magic bytes at offset 2080.\"\"\"\n    signature = bytes([0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x45, 0x78, 0x63, 0x65, 0x6C, 0x20, 0x35, 0x2E, 0x30, 0x20, 0x57, 0x6F, 0x72, 0x6B, 0x73, 0x68, 0x65, 0x65, 0x74])\n    with open(file_path, \"rb\") as f:\n        f.seek(2080)\n        return f.read(29) == signature","node":"function isXLM(buffer: Buffer): boolean {\n  const signature = Buffer.from([0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x45, 0x78, 0x63, 0x65, 0x6C, 0x20, 0x35, 0x2E, 0x30, 0x20, 0x57, 0x6F, 0x72, 0x6B, 0x73, 0x68, 0x65, 0x65, 0x74]);\n  if (buffer.length < 2109) return false;\n  return buffer.subarray(2080, 2109).equals(signature);\n}","go":"func IsXLM(data []byte) bool {\n    signature := []byte{0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x45, 0x78, 0x63, 0x65, 0x6C, 0x20, 0x35, 0x2E, 0x30, 0x20, 0x57, 0x6F, 0x72, 0x6B, 0x73, 0x68, 0x65, 0x65, 0x74}\n    if len(data) < 2109 {\n        return false\n    }\n    return bytes.Equal(data[2080:2109], signature)\n}"}}}