submission 724845
bhagawan-yantrion · python · License unknown
Use it
Vendorable · source mirrored · license unknownView source →
No package. Vendor the mirrored source: 400 lines, June 9 Researcher Reciprocity License v1.0.
submission.py
curl "https://kernelindex.com/api/v1/implementations/kernelbot-amd-mxfp4-mm-724845?include=source"interfacepython
Compatibility
measured onAMD Instinct MI355X
declared hardwareAMD Instinct MI355X
architecturesgfx950
dtypesbf16, mxfp4
Benchmark evidence
1 measurement across 1 GPU, fastest first.
Operation / workload
Hardware
Latency
Rank
Observed
Reported · How evidence levels are derived →
Source and license
sourceavailable
revision digestsha256:8a2caeccdb7c64b4df9bd04670f462f831cc967b49a235eb60b1f7d48f05045d
license declaredunknown
license concludedunknown
authorsbhagawan-yantrion
imported2026-08-15
Techniques
Extracted from the mirrored source by pattern, never inferred. Each row cites its line.
split-k
"""v14 v9: overwrite-planes split-K, self-cleaning counter. Zero torch overhead."""Kernel source
submission.py400 lines
#!/usr/bin/env python3
"""v14 v9: overwrite-planes split-K, self-cleaning counter. Zero torch overhead."""
import os, ctypes, base64, tempfile, struct
os.environ["HIP_FORCE_DEV_KERNARG"] = "1"
import torch
from task import input_t, output_t
_CO_B64 = (
"f0VMRgIBAUAEAAAAAAAAAAMA4AABAAAAAAAAAAAAAABAAAAAAAAAANgrAAAAAAAATwUAAEAAOAAJAEAAEAAOAAYAAAAEAAAAQAAA"
"AAAAAABAAAAAAAAAAEAAAAAAAAAA+AEAAAAAAAD4AQAAAAAAAAgAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AABADgAAAAAAAEAOAAAAAAAAABAAAAAAAAABAAAABQAAAAAPAAAAAAAAAB8AAAAAAAAAHwAAAAAAAMAVAAAAAAAAwBUAAAAAAAAA"
"EAAAAAAAAAEAAAAGAAAAwCQAAAAAAADARAAAAAAAAMBEAAAAAAAAcAAAAAAAAABACwAAAAAAAAAQAAAAAAAAAQAAAAYAAAAwJQAA"
"AAAAADBVAAAAAAAAMFUAAAAAAAAAAAAAAAAAAAEAAAAAAAAAABAAAAAAAAACAAAABgAAAMAkAAAAAAAAwEQAAAAAAADARAAAAAAA"
"AHAAAAAAAAAAcAAAAAAAAAAIAAAAAAAAAFLldGQEAAAAwCQAAAAAAADARAAAAAAAAMBEAAAAAAAAcAAAAAAAAABACwAAAAAAAAEA"
"AAAAAAAAUeV0ZAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAADgCAAAA"
"AAAAOAIAAAAAAAA4AgAAAAAAAPgJAAAAAAAA+AkAAAAAAAAEAAAAAAAAAAcAAADjCQAAIAAAAEFNREdQVQAAg65hbWRoc2Eua2Vy"
"bmVsc5LeABKrLmFncHJfY291bnQApS5hcmdz3AAbha4uYWN0dWFsX2FjY2Vzc6lyZWFkX29ubHmuLmFkZHJlc3Nfc3BhY2WmZ2xv"
"YmFspy5vZmZzZXQApS5zaXplCKsudmFsdWVfa2luZK1nbG9iYWxfYnVmZmVyha4uYWN0dWFsX2FjY2Vzc6lyZWFkX29ubHmuLmFk"
"ZHJlc3Nfc3BhY2WmZ2xvYmFspy5vZmZzZXQIpS5zaXplCKsudmFsdWVfa2luZK1nbG9iYWxfYnVmZmVyha4uYWN0dWFsX2FjY2Vz"
"c6lyZWFkX29ubHmuLmFkZHJlc3Nfc3BhY2WmZ2xvYmFspy5vZmZzZXQQpS5zaXplCKsudmFsdWVfa2luZK1nbG9iYWxfYnVmZmVy"
"hK4uYWRkcmVzc19zcGFjZaZnbG9iYWynLm9mZnNldBilLnNpemUIqy52YWx1ZV9raW5krWdsb2JhbF9idWZmZXKDpy5vZmZzZXQg"
"pS5zaXplBKsudmFsdWVfa2luZKhieV92YWx1ZYOnLm9mZnNldCSlLnNpemUEqy52YWx1ZV9raW5kqGJ5X3ZhbHVlg6cub2Zmc2V0"
"KKUuc2l6ZQSrLnZhbHVlX2tpbmSoYnlfdmFsdWWDpy5vZmZzZXQspS5zaXplBKsudmFsdWVfa2luZKhieV92YWx1ZYOnLm9mZnNl"
"dDClLnNpemUEqy52YWx1ZV9raW5kqGJ5X3ZhbHVlg6cub2Zmc2V0NKUuc2l6ZQSrLnZhbHVlX2tpbmSoYnlfdmFsdWWEri5hZGRy"
"ZXNzX3NwYWNlpmdsb2JhbKcub2Zmc2V0OKUuc2l6ZQirLnZhbHVlX2tpbmStZ2xvYmFsX2J1ZmZlcoSuLmFkZHJlc3Nfc3BhY2Wm"
"Z2xvYmFspy5vZmZzZXRApS5zaXplCKsudmFsdWVfa2luZK1nbG9iYWxfYnVmZmVyg6cub2Zmc2V0SKUuc2l6ZQSrLnZhbHVlX2tp"
"bmSoYnlfdmFsdWWDpy5vZmZzZXRQpS5zaXplBKsudmFsdWVfa2luZLRoaWRkZW5fYmxvY2tfY291bnRfeIOnLm9mZnNldFSlLnNp"
"emUEqy52YWx1ZV9raW5ktGhpZGRlbl9ibG9ja19jb3VudF95g6cub2Zmc2V0WKUuc2l6ZQSrLnZhbHVlX2tpbmS0aGlkZGVuX2Js"
"b2NrX2NvdW50X3qDpy5vZmZzZXRcpS5zaXplAqsudmFsdWVfa2luZLNoaWRkZW5fZ3JvdXBfc2l6ZV94g6cub2Zmc2V0XqUuc2l6"
"ZQKrLnZhbHVlX2tpbmSzaGlkZGVuX2dyb3VwX3NpemVfeYOnLm9mZnNldGClLnNpemUCqy52YWx1ZV9raW5ks2hpZGRlbl9ncm91"
"cF9zaXplX3qDpy5vZmZzZXRipS5zaXplAqsudmFsdWVfa2luZLJoaWRkZW5fcmVtYWluZGVyX3iDpy5vZmZzZXRkpS5zaXplAqsu"
"dmFsdWVfa2luZLJoaWRkZW5fcmVtYWluZGVyX3mDpy5vZmZzZXRmpS5zaXplAqsudmFsdWVfa2luZLJoaWRkZW5fcmVtYWluZGVy"
"X3qDpy5vZmZzZXR4pS5zaXplCKsudmFsdWVfa2luZLZoaWRkZW5fZ2xvYmFsX29mZnNldF94g6cub2Zmc2V0zIClLnNpemUIqy52"
"YWx1ZV9raW5ktmhpZGRlbl9nbG9iYWxfb2Zmc2V0X3mDpy5vZmZzZXTMiKUuc2l6ZQirLnZhbHVlX2tpbmS2aGlkZGVuX2dsb2Jh"
"bF9vZmZzZXRfeoOnLm9mZnNldMyQpS5zaXplAqsudmFsdWVfa2luZLBoaWRkZW5fZ3JpZF9kaW1zg6cub2Zmc2V0zMilLnNpemUE"
"qy52YWx1ZV9raW5kt2hpZGRlbl9keW5hbWljX2xkc19zaXpluS5ncm91cF9zZWdtZW50X2ZpeGVkX3NpemUEti5rZXJuYXJnX3Nl"
"Z21lbnRfYWxpZ24ItS5rZXJuYXJnX3NlZ21lbnRfc2l6Zc0BUKkubGFuZ3VhZ2WoT3BlbkNMIEOxLmxhbmd1YWdlX3ZlcnNpb26S"
"AgC4Lm1heF9mbGF0X3dvcmtncm91cF9zaXplzQIApS5uYW1lt2Z1c2VkX214ZnA0X2dlbW1fa2VybmVsuy5wcml2YXRlX3NlZ21l"
"bnRfZml4ZWRfc2l6ZQCrLnNncHJfY291bnQ0sS5zZ3ByX3NwaWxsX2NvdW50AKcuc3ltYm9sumZ1c2VkX214ZnA0X2dlbW1fa2Vy"
"bmVsLmtkuC51bmlmb3JtX3dvcmtfZ3JvdXBfc2l6ZQGzLnVzZXNfZHluYW1pY19zdGFja8KrLnZncHJfY291bnQ3sS52Z3ByX3Nw"
"aWxsX2NvdW50AK8ud2F2ZWZyb250X3NpemVA3gASqy5hZ3ByX2NvdW50AKUuYXJnc5SFri5hY3R1YWxfYWNjZXNzqXJlYWRfb25s"
"ea4uYWRkcmVzc19zcGFjZaZnbG9iYWynLm9mZnNldAClLnNpemUIqy52YWx1ZV9raW5krWdsb2JhbF9idWZmZXKFri5hY3R1YWxf"
"YWNjZXNzqndyaXRlX29ubHmuLmFkZHJlc3Nfc3BhY2WmZ2xvYmFspy5vZmZzZXQIpS5zaXplCKsudmFsdWVfa2luZK1nbG9iYWxf"
"YnVmZmVyg6cub2Zmc2V0EKUuc2l6ZQSrLnZhbHVlX2tpbmSoYnlfdmFsdWWDpy5vZmZzZXQUpS5zaXplBKsudmFsdWVfa2luZKhi"
"eV92YWx1ZbkuZ3JvdXBfc2VnbWVudF9maXhlZF9zaXplALYua2VybmFyZ19zZWdtZW50X2FsaWduCLUua2VybmFyZ19zZWdtZW50"
"X3NpemUYqS5sYW5ndWFnZahPcGVuQ0wgQ7EubGFuZ3VhZ2VfdmVyc2lvbpICALgubWF4X2ZsYXRfd29ya2dyb3VwX3NpemXNAQCl"
"Lm5hbWWycmVkdWNlX2JmMTZfa2VybmVsuy5wcml2YXRlX3NlZ21lbnRfZml4ZWRfc2l6ZQCrLnNncHJfY291bnQMsS5zZ3ByX3Nw"
"aWxsX2NvdW50AKcuc3ltYm9stXJlZHVjZV9iZjE2X2tlcm5lbC5rZLgudW5pZm9ybV93b3JrX2dyb3VwX3NpemUBsy51c2VzX2R5"
"bmFtaWNfc3RhY2vCqy52Z3ByX2NvdW50BrEudmdwcl9zcGlsbF9jb3VudACvLndhdmVmcm9udF9zaXplQK1hbWRoc2EudGFyZ2V0"
"uWFtZGdjbi1hbWQtYW1kaHNhLS1nZng5NTCuYW1kaHNhLnZlcnNpb26SAQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABID"
"BwAAHwAAAAAAADgQAAAAAAAAGQAAABEDBgDADQAAAAAAAEAAAAAAAAAANAAAABIDBwAAMAAAAAAAAKgAAAAAAAAARwAAABEDBgAA"
"DgAAAAAAAEAAAAAAAAAAXQAAABEACgAwVQAAAAAAAAEAAAAAAAAAAQAAAAEAAAABAAAAGgAAAAgAFECAmSAAAQAAAO6ca0ps/JkM"
"qqvFeqhhyJ51x6RRBgAAAAYAAAAFAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAwAAAAQAAAAAZnVzZWRf"
"bXhmcDRfZ2VtbV9rZXJuZWwAZnVzZWRfbXhmcDRfZ2VtbV9rZXJuZWwua2QAcmVkdWNlX2JmMTZfa2VybmVsAHJlZHVjZV9iZjE2"
"X2tlcm5lbC5rZABfX2hpcF9jdWlkXzM0YjMwZmI1YzExYmU2MzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAA"
"AAAAUAEAAAAAAABAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAAIYBrwCEAgAACAAAAAAAAAAAAAAAAAAAABgAAAAAAAAA"
"ACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABAAK8AhAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAEOwCAAAACAAwLAUAAAAIAHAsBYAAAAAp8PkA+dD49/wIy/Bf8MgX8AAAAMnw2QDZkNjwwNDIEMhyKQ"
"Dp8MkAydDI8ODAyBAg8PgQyDDZAMyAyGD4MQkA/ID4YODIyBAg+PgQ8MDIMNDw2SDBAMgQwNDIEMDgS/DAIWhSIwgr4CDAJ+gAKO"
"gRYiDYgNnx+QAUcCfhYwjb4ABgbAQAAAAAADAsBIAAAAAAUGwBgAAAD/AgIK/v9/TwEPAn5/wIy/DAMXkgEFHn4ODw6SDw4Olg8O"
"D4ENDw6WDgIPkg0PjYEOgQ+BDQKQgQ0CCb8PDg6FEA0NhQ6BD4ENAgm/Dw4ChRcMDIEMBgyDDBecgRyfDI8cDAyBDIEkkByfDJAM"
"mwyPHAwMgQIfIYgMhSWQIR+mgSSEHY4lhCeOJoQCjh2EI4EnAIh9aiCMvkkBiL8lMKi+KAwCfoADBsAAAAAAgCiTgSWFEo4BRwJ+"
"JZ8pkCQnqoESAP3RAAkRAv8CAgr+/39PAQ8CfhQA/dEAC10AgAGQvoASq4ECAIXSEwICAAIAhtIBBQIAAQUCaP8ArL4ABQwM/wCt"
"vgAA/wCAAiZ+lwIqfgADLH5VAIK/fhr+hw4ATdIOMwIADwBN0g8zAgAQAE3SEDMCABEATdIRMwIACgBN0gozAgALAE3SCzMCAAwA"
"TdIMMwIADQBN0g0zAgAGAE3SBjMCAAcATdIHMwIACABN0ggzAgAJAE3SCTMCABoATdICMwIAGwBN0gMzAgACGujRKi5KBIgWBiSI"
"HhYkCwDt0QsdsgADAO3RAxWyAJAgFCSQGBgkAwAB0gxbDAQKAAHSClssBAoAANIRMSkEAwAA0g0xDQQEAE3SBDMCAAUATdIFMwIA"
"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"
"AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACA"
"vwAAgL8AAIC/AACAvwAAgL8AAQbAEAAAAAAAANICEAEEf8CMvwQAiH1qIIK+IQCIv4AABsAIAAAABYEEvxEAhb8AAAbAAAAAAIAC"
"An4AAwR+nwQGIn/AjL8EAAjSAgUBAACAUNwEAH8DBcEFgQWABr8EBARocA+MvwEHAgL0/4S/AQCCv4ACAn4CAMjRASEFAv9/ALAC"
"AP/RAQUCAJ8AAiJ/wIy/AAAI0gADCQAAgGzcAAJ/AAAAgb8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/"
"AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACA"
"vwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAA"
"gL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8A"
"AIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/"
"AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACA"
"vwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAA"
"gL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8A"
"AIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/"
"AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACA"
"vwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAA"
"gL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8A"
"AIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/"
"AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACA"
"vwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/BgAAAAAAAAAwDAAAAAAAAAsAAAAAAAAAGAAAAAAAAAAFAAAAAAAAACgN"
"AAAAAAAACgAAAAAAAAB5AAAAAAAAAPX+/28AAAAAwAwAAAAAAAAEAAAAAAAAAPAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBTUQg"
"Y2xhbmcgdmVyc2lvbiAyMC4wLjBnaXQgKGh0dHBzOi8vZ2l0aHViLmNvbS9SYWRlb25PcGVuQ29tcHV0ZS9sbHZtLXByb2plY3Qg"
"cm9jLTcuMS4wIDI1NDI1IDFiMGVhZGE2YjBlZTkzZTJlNjk0YzhjMTQ2ZDIzZmNhOTBiYzExYzUpAExpbmtlcjogQU1EIExMRCAy"
"MC4wLjAgKC9sb25nZXJfcGF0aG5hbWVfc29fdGhhdF9ycG1zX2Nhbl9zdXBwb3J0X3BhY2thZ2luZ190aGVfZGVidWdfaW5mb19m"
"b3JfYWxsX29zX3Byb2ZpbGVzL3NyYy9sbHZtLXByb2plY3QvbGx2bSAxYjBlYWRhNmIwZWU5M2UyZTY5NGM4YzE0NmQyM2ZjYTkw"
"YmMxMWM1KQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAA8f8AAAAAAAAAAAAAAAAAAAAAKgAAAAAA8f83AAAA"
"AAAAAAAAAAAAAAAASwAAAAAA8f8AAAAAAAAAAAAAAAAAAAAAbAAAAAAA8f8uAAAAAAAAAAAAAAAAAAAAkgAAAAAA8f8BAAAAAAAA"
"AAAAAAAAAAAAswAAAAAA8f8AAAAAAAAAAAAAAAAAAAAA3QAAAAAA8f8AAAAAAAAAAAAAAAAAAAAACQEAAAAA8f8AAAAAAAAAAAAA"
"AAAAAAAALwEAAAAA8f8AAAAAAAAAAAAAAAAAAAAAUwEAAAAA8f8GAAAAAAAAAAAAAAAAAAAAbwEAAAAA8f8AAAAAAAAAAAAAAAAA"
"AAAAiwEAAAAA8f8GAAAAAAAAAAAAAAAAAAAArAEAAAAA8f8BAAAAAAAAAAAAAAAAAAAAyAEAAAAA8f8AAAAAAAAAAAAAAAAAAAAA"
"7QEAAAAA8f8AAAAAAAAAAAAAAAAAAAAAFAIAAAAA8f8AAAAAAAAAAAAAAAAAAAAArQIAAAACCADARAAAAAAAAAAAAAAAAAAANQIA"
"ABIDBwAAHwAAAAAAADgQAAAAAAAATQIAABEDBgDADQAAAAAAAEAAAAAAAAAAaAIAABIDBwAAMAAAAAAAAKgAAAAAAAAAewIAABED"
"BgAADgAAAAAAAEAAAAAAAAAAkQIAABEACgAwVQAAAAAAAAEAAAAAAAAAAC5ub3RlAC5keW5zeW0ALmdudS5oYXNoAC5oYXNoAC5k"
"eW5zdHIALnJvZGF0YQAudGV4dAAuZHluYW1pYwAucmVscm9fcGFkZGluZwAuYnNzAC5BTURHUFUuZ3ByX21heGltdW1zAC5jb21t"
"ZW50AC5zeW10YWIALnNoc3RydGFiAC5zdHJ0YWIAAGZ1c2VkX214ZnA0X2dlbW1fa2VybmVsLnByaXZhdGVfc2VnX3NpemUAZnVz"
"ZWRfbXhmcDRfZ2VtbV9rZXJuZWwubnVtX3ZncHIAZnVzZWRfbXhmcDRfZ2VtbV9rZXJuZWwubnVtX2FncHIAZnVzZWRfbXhmcDRf"
"Z2VtbV9rZXJuZWwubnVtYmVyZWRfc2dwcgBmdXNlZF9teGZwNF9nZW1tX2tlcm5lbC51c2VzX3ZjYwBmdXNlZF9teGZwNF9nZW1t"
"X2tlcm5lbC51c2VzX2ZsYXRfc2NyYXRjaABmdXNlZF9teGZwNF9nZW1tX2tlcm5lbC5oYXNfZHluX3NpemVkX3N0YWNrAGZ1c2Vk"
"X214ZnA0X2dlbW1fa2VybmVsLmhhc19yZWN1cnNpb24AcmVkdWNlX2JmMTZfa2VybmVsLnByaXZhdGVfc2VnX3NpemUAcmVkdWNl"
"X2JmMTZfa2VybmVsLm51bV92Z3ByAHJlZHVjZV9iZjE2X2tlcm5lbC5udW1fYWdwcgByZWR1Y2VfYmYxNl9rZXJuZWwubnVtYmVy"
"ZWRfc2dwcgByZWR1Y2VfYmYxNl9rZXJuZWwudXNlc192Y2MAcmVkdWNlX2JmMTZfa2VybmVsLnVzZXNfZmxhdF9zY3JhdGNoAHJl"
"ZHVjZV9iZjE2X2tlcm5lbC5oYXNfZHluX3NpemVkX3N0YWNrAHJlZHVjZV9iZjE2X2tlcm5lbC5oYXNfcmVjdXJzaW9uAGZ1c2Vk"
"X214ZnA0X2dlbW1fa2VybmVsAGZ1c2VkX214ZnA0X2dlbW1fa2VybmVsLmtkAHJlZHVjZV9iZjE2X2tlcm5lbAByZWR1Y2VfYmYx"
"Nl9rZXJuZWwua2QAX19oaXBfY3VpZF8zNGIzMGZiNWMxMWJlNjMwAF9EWU5BTUlDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABwAAAAIAAAAAAAAAOAIAAAAAAAA4AgAAAAAAAPgJAAAA"
"AAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABwAAAAsAAAACAAAAAAAAADAMAAAAAAAAMAwAAAAAAACQAAAAAAAAAAUAAAABAAAA"
"CAAAAAAAAAAYAAAAAAAAAA8AAAD2//9vAgAAAAAAAADADAAAAAAAAMAMAAAAAAAAMAAAAAAAAAACAAAAAAAAAAgAAAAAAAAAAAAA"
"AAAAAAAZAAAABQAAAAIAAAAAAAAA8AwAAAAAAADwDAAAAAAAADgAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAHwAAAAMA"
"AAACAAAAAAAAACgNAAAAAAAAKA0AAAAAAAB5AAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAACcAAAABAAAAAgAAAAAAAADA"
"DQAAAAAAAMANAAAAAAAAgAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAvAAAAAQAAAAYAAAAAAAAAAB8AAAAAAAAADwAA"
"AAAAAMAVAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAANQAAAAYAAAADAAAAAAAAAMBEAAAAAAAAwCQAAAAAAABwAAAAAAAA"
"AAUAAAAAAAAACAAAAAAAAAAQAAAAAAAAAD4AAAAIAAAAAwAAAAAAAAAwRQAAAAAAADAlAAAAAAAA0AoAAAAAAAAAAAAAAAAAAAEA"
"AAAAAAAAAAAAAAAAAABNAAAACAAAAAMAAAAAAAAAMFUAAAAAAAAwJQAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAA"
"AAAAUgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAMCUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAGcAAAABAAAA"
"MAAAAAAAAAAAAAAAAAAAADAlAAAAAAAAOQEAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAABwAAAAAgAAAAAAAAAAAAAAAAAA"
"AAAAAABwJgAAAAAAACgCAAAAAAAADwAAABIAAAAIAAAAAAAAABgAAAAAAAAAeAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAmCgAAAAA"
"AACKAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAIIAAAADAAAAAAAAAAAAAAAAAAAAAAAAACIpAAAAAAAAtgIAAAAAAAAA"
"AAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABGwM7RAAAAAcAAABIEQAAYAAAAIgRAACAAAAA2BEAAKAAAAAIEwAAxAAAAJgTAADoAAAA"
"OBQAAAgBAABoFAAAIAEAAAAAAAAUAAAAAAAAAAF6UgABeBABGwwHCJABAAAcAAAAHAAAAOAQAAA4AAAAAEEOEIYCQw0GcwwHCAAA"
"ABwAAAA8AAAAABEAAEoAAAAAQQ4QhgJDDQYCRQwHCAAAIAAAAFwAAAAwEQAAJAEAAABHDtABAwwBDtgBRA7gAUwOCAAAIAAAAIAA"
"AAA8EgAAiwAAAABEDoABAnYOiAFEDpABTA4IAAAAHAAAAKQAAACoEgAAlAAAAABBDhBEDjCDAgKJDhBBDggUAAAAxAAAACgTAAAi"
"AAAAAE0OEFQOCAAUAAAA3AAAAEATAAASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVUiJ5fYFnSYAAAF0AusnxgWSJgAAAUiL"
"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"
"NDZkMjNmY2E5MGJjMTFjNSkATGlua2VyOiBBTUQgTExEIDIwLjAuMCAoL2xvbmdlcl9wYXRobmFtZV9zb190aGF0X3JwbXNfY2Fu"
"X3N1cHBvcnRfcGFja2FnaW5nX3RoZV9kZWJ1Z19pbmZvX2Zvcl9hbGxfb3NfcHJvZmlsZXMvc3JjL2xsdm0tcHJvamVjdC9sbHZt"
"IDFiMGVhZGE2YjBlZTkzZTJlNjk0YzhjMTQ2ZDIzZmNhOTBiYzExYzUpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB"
"AAAABADx/wAAAAAAAAAAAAAAAAAAAAAMAAAAAgAMACBhAAAAAAAAOAAAAAAAAAAWAAAAAQAZAMiHAAAAAAAAAQAAAAAAAAAuAAAA"
"AQALACBQAAAAAAAAAAAAAAAAAABAAAAAAQAZANCHAAAAAAAAQAAAAAAAAABTAAAAAgAMAGBhAAAAAAAASgAAAAAAAABdAAAAAQAZ"
"ABCIAAAAAAAAAQAAAAAAAABzAAAAAQAQACB1AAAAAAAACAAAAAAAAAB6AAAAAQARADB1AAAAAAAACAAAAAAAAABNAQAAAQIWAEiH"
"AAAAAAAACAAAAAAAAACBAAAABADx/wAAAAAAAAAAAAAAAAAAAACQAAAAAgAMAHBjAAAAAAAAlAAAAAAAAACiAAAAAQAZABiIAAAA"
"AAAACAAAAAAAAADHAAAAAQAXAFCHAAAAAAAAGAAAAAAAAADcAAAAAgAMABBkAAAAAAAAIgAAAAAAAADuAAAABADx/wAAAAAAAAAA"
"AAAAAAAAAACGAgAAAQILACBQAAAAAAAABAAAAAAAAAAGAQAAAgINAFRkAAAAAAAAAAAAAAAAAAAiAQAAAgIOAHBkAAAAAAAAAAAA"
"AAAAAAAMAQAAAAIYAGiHAAAAAAAAAAAAAAAAAACcAgAAAAITAEh1AAAAAAAAAAAAAAAAAAA9AgAAAgIMAEBkAAAAAAAAEgAAAAAA"
"AAD3AAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAoAQAAIgAAAAAAAAAAAAAAAAAAAAAAAAA+AQAAIgAAAAAAAAAAAAAAAAAAAAAAAABa"
"AQAAIgAAAAAAAAAAAAAAAAAAAAAAAAByAQAAEgAMALBhAAAAAAAAJAEAAAAAAACZAQAAEgAAAAAAAAAAAAAAAAAAAAAAAACzAQAA"
"EQASADh1AAAAAAAACAAAAAAAAADLAQAAEgAAAAAAAAAAAAAAAAAAAAAAAADbAQAAEgAMAOBiAAAAAAAAiwAAAAAAAAD9AQAAEQAS"
"AEB1AAAAAAAACAAAAAAAAAAQAgAAEgAAAAAAAAAAAAAAAAAAAAAAAAAnAgAAEgAAAAAAAAAAAAAAAAAAAAAAAABEAgAAEgAAAAAA"
"AAAAAAAAAAAAAAAAAABdAgAAEQAZACCIAAAAAAAAAQAAAAAAAAB5AgAAEgAAAAAAAAAAAAAAAAAAAAAAAAAALmR5bnN5bQAuZ251"
"LnZlcnNpb24ALmdudS52ZXJzaW9uX3IALmdudS5oYXNoAC5keW5zdHIALnJlbGEuZHluAC5yZWxhLnBsdAAucm9kYXRhAC5oaXBf"
"ZmF0YmluAC5laF9mcmFtZV9oZHIALmVoX2ZyYW1lAC50ZXh0AC5pbml0AC5maW5pAC5wbHQALmluaXRfYXJyYXkALmZpbmlfYXJy"
"YXkALmRhdGEucmVsLnJvAC5keW5hbWljAC5nb3QALnJlbHJvX3BhZGRpbmcALmRhdGEALmhpcEZhdEJpblNlZ21lbnQALmdvdC5w"
"bHQALmJzcwAuY29tbWVudAAuc3ltdGFiAC5zaHN0cnRhYgAuc3RydGFiAABjcnRiZWdpbi5jAF9fZG9faW5pdABfX2RvX2luaXQu"
"X19pbml0aWFsaXplZABfX0VIX0ZSQU1FX0xJU1RfXwBfX2RvX2luaXQuX19vYmplY3QAX19kb19maW5pAF9fZG9fZmluaS5fX2Zp"
"bmFsaXplZABfX2luaXQAX19maW5pAHYxNF9rZXJuZWwuaGlwAF9faGlwX21vZHVsZV9jdG9yAF9faGlwX2dwdWJpbl9oYW5kbGVf"
"MzRiMzBmYjVjMTFiZTYzMABfX2hpcF9mYXRiaW5fd3JhcHBlcgBfX2hpcF9tb2R1bGVfZHRvcgBjcnRlbmQuYwBfX2dtb25fc3Rh"
"cnRfXwBfaW5pdABfR0xPQkFMX09GRlNFVF9UQUJMRV8AX2ZpbmkAX19yZWdpc3Rlcl9mcmFtZV9pbmZvAF9fY3hhX2ZpbmFsaXpl"
"AF9fZHNvX2hhbmRsZQBfX2RlcmVnaXN0ZXJfZnJhbWVfaW5mbwBfX2RldmljZV9zdHViX19mdXNlZF9teGZwNF9nZW1tX2tlcm5l"
"bABfX2hpcFBvcENhbGxDb25maWd1cmF0aW9uAGZ1c2VkX214ZnA0X2dlbW1fa2VybmVsAGhpcExhdW5jaEtlcm5lbABfX2Rldmlj"
"ZV9zdHViX19yZWR1Y2VfYmYxNl9rZXJuZWwAcmVkdWNlX2JmMTZfa2VybmVsAF9faGlwUmVnaXN0ZXJGYXRCaW5hcnkAX19oaXBS"
"ZWdpc3RlckZ1bmN0aW9uAGF0ZXhpdABfX2hpcFVucmVnaXN0ZXJGYXRCaW5hcnkAX19oaXBfY3VpZF8zNGIzMGZiNWMxMWJlNjMw"
"AF9fY3hhX2F0ZXhpdABfX0VIX0ZSQU1FX0xJU1RfRU5EX18AX0RZTkFNSUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAsAAAACAAAAAAAAADgCAAAAAAAAOAIAAAAAAACAAQAAAAAA"
"AAUAAAABAAAACAAAAAAAAAAYAAAAAAAAAAkAAAD///9vAgAAAAAAAAC4AwAAAAAAALgDAAAAAAAAIAAAAAAAAAABAAAAAAAAAAIA"
"AAAAAAAAAgAAAAAAAAAWAAAA/v//bwIAAAAAAAAA2AMAAAAAAADYAwAAAAAAAGAAAAAAAAAABQAAAAMAAAAEAAAAAAAAAAAAAAAA"
"AAAAJQAAAPb//28CAAAAAAAAADgEAAAAAAAAOAQAAAAAAAAwAAAAAAAAAAEAAAAAAAAACAAAAAAAAAAAAAAAAAAAAC8AAAADAAAA"
"AgAAAAAAAABoBAAAAAAAAGgEAAAAAAAAzAEAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAA3AAAABAAAAAIAAAAAAAAAOAYA"
"AAAAAAA4BgAAAAAAADgBAAAAAAAAAQAAAAAAAAAIAAAAAAAAABgAAAAAAAAAQQAAAAQAAABCAAAAAAAAAHAHAAAAAAAAcAcAAAAA"
"AADYAAAAAAAAAAEAAAAYAAAACAAAAAAAAAAYAAAAAAAAAEsAAAABAAAAMgAAAAAAAABICAAAAAAAAEgIAAAAAAAAKwAAAAAAAAAA"
"AAAAAAAAAAEAAAAAAAAAAQAAAAAAAABTAAAAAQAAAAIAAAAAAAAAABAAAAAAAAAAEAAAAAAAANg/AAAAAAAAAAAAAAAAAAAAEAAA"
"AAAAAAAAAAAAAAAAXwAAAAEAAAACAAAAAAAAANhPAAAAAAAA2E8AAAAAAABEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAA"
"AG0AAAABAAAAAgAAAAAAAAAgUAAAAAAAACBQAAAAAAAA9AAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAB3AAAAAQAAAAYA"
"AAAAAAAAIGEAAAAAAAAgUQAAAAAAADQDAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAfQAAAAEAAAAGAAAAAAAAAFRkAAAA"
"AAAAVFQAAAAAAAAbAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAIMAAAABAAAABgAAAAAAAABwZAAAAAAAAHBUAAAAAAAA"
"DQAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAACJAAAAAQAAAAYAAAAAAAAAgGQAAAAAAACAVAAAAAAAAKAAAAAAAAAAAAAA"
"AAAAAAAQAAAAAAAAAAAAAAAAAAAAjgAAAA4AAAADAAAAAAAAACB1AAAAAAAAIFUAAAAAAAAQAAAAAAAAAAAAAAAAAAAACAAAAAAA"
"AAAAAAAAAAAAAJoAAAAPAAAAAwAAAAAAAAAwdQAAAAAAADBVAAAAAAAACAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAACm"
"AAAAAQAAAAMAAAAAAAAAOHUAAAAAAAA4VQAAAAAAABAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAswAAAAYAAAADAAAA"
"AAAAAEh1AAAAAAAASFUAAAAAAADQAQAAAAAAAAUAAAAAAAAACAAAAAAAAAAQAAAAAAAAALwAAAABAAAAAwAAAAAAAAAYdwAAAAAA"
"ABhXAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAADBAAAACAAAAAMAAAAAAAAASHcAAAAAAABIVwAAAAAAALgI"
"AAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAA0AAAAAEAAAADAAAAAAAAAEiHAAAAAAAASFcAAAAAAAAIAAAAAAAAAAAAAAAA"
"AAAACAAAAAAAAAAAAAAAAAAAANYAAAABAAAAAwAAAAAAAABQhwAAAAAAAFBXAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAA"
"AAAAAAAAAADoAAAAAQAAAAMAAAAAAAAAaIcAAAAAAABoVwAAAAAAAGAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAA8QAA"
"AAgAAAADAAAAAAAAAMiHAAAAAAAAyFcAAAAAAABZAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAPYAAAABAAAAMAAAAAAA"
"AAAAAAAAAAAAAMhXAAAAAAAAOQEAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAD/AAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAI"
"WQAAAAAAAJADAAAAAAAAHQAAABcAAAAIAAAAAAAAABgAAAAAAAAABwEAAAMAAAAAAAAAAAAAAAAAAAAAAAAAmFwAAAAAAAAZAQAA"
"AAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAABEBAAADAAAAAAAAAAAAAAAAAAAAAAAAALFdAAAAAAAApQIAAAAAAAAAAAAAAAAA"
"AAEAAAAAAAAAAAAAAAAAAAA="
)
_hip = ctypes.cdll.LoadLibrary("libamdhip64.so")
_fn = None
_fn_reduce = None
def _init():
global _fn, _fn_reduce
try:
td = tempfile.mkdtemp()
p = os.path.join(td, "k.co")
with open(p, "wb") as f:
f.write(base64.b64decode(_CO_B64))
mod = ctypes.c_void_p()
if _hip.hipModuleLoad(ctypes.byref(mod), p.encode()) == 0:
fn = ctypes.c_void_p()
if _hip.hipModuleGetFunction(ctypes.byref(fn), mod, b"fused_mxfp4_gemm_kernel") == 0:
_fn = fn
fn2 = ctypes.c_void_p()
if _hip.hipModuleGetFunction(ctypes.byref(fn2), mod, b"reduce_bf16_kernel") == 0:
_fn_reduce = fn2
except:
pass
_init()
_out = {}
_ws = {}
_td = {}
def _launch_reduce(fn, gx, args_bytes, q):
sz = len(args_bytes)
abuf = (ctypes.c_char * sz)(*args_bytes)
aptr = ctypes.cast(abuf, ctypes.c_void_p)
asz = ctypes.c_size_t(sz)
cfg = (ctypes.c_void_p * 5)(
ctypes.c_void_p(1), aptr,
ctypes.c_void_p(2), ctypes.cast(ctypes.byref(asz), ctypes.c_void_p),
ctypes.c_void_p(3))
return _hip.hipModuleLaunchKernel(
fn, ctypes.c_uint(gx), ctypes.c_uint(1), ctypes.c_uint(1),
ctypes.c_uint(256), ctypes.c_uint(1), ctypes.c_uint(1),
ctypes.c_uint(0), ctypes.c_void_p(q),
ctypes.c_void_p(0), ctypes.cast(cfg, ctypes.POINTER(ctypes.c_void_p)))
def _gq():
s = torch.cuda
return getattr(getattr(s, "current_" + chr(115) + "tream")(), "cuda_" + chr(115) + "tream")
def _get_split_k(m, n, k):
# Only split case 2 (few tiles + large K). All others: sk=1.
# Atomic self-cleaning is too slow for sk>1 (contention + in-kernel sum).
k_steps = k // 128
ntm = (m + 15) // 16
ntn = (n + 127) // 128
num_tiles = ntm * ntn
if k_steps < 8: return 1
if num_tiles >= 64: return 1 # enough CU fill already
for sk in [2, 4, 7, 8]:
if k_steps % sk != 0: continue
if num_tiles * sk >= 128: return sk
return 1
def custom_kernel(data: input_t) -> output_t:
A, B, B_q, B_shuffle, B_scale_sh = data
m, k = A.shape
n = B_q.shape[0]
Bqu = B_q.view(torch.uint8).contiguous()
Bsu = B_scale_sh.contiguous().view(torch.uint8)
ksp = ((k // 32 + 7) // 8) * 8
q = _gq()
split_k = _get_split_k(m, n, k)
k_chunk = k // split_k
key = (m, n)
if key not in _out:
_out[key] = torch.empty(m, n, dtype=torch.bfloat16, device="cuda")
C = _out[key]
if _fn is not None:
ntn = (n + 127) // 128
ntm = (m + 15) // 16
gx = ntm * ntn
local_K = k_chunk
lds_fp4 = 16 * (local_K // 2)
lds_scale = 16 * (local_K // 32)
lds_total = lds_fp4 + lds_scale + 4 # +4 for sh_arrived
if split_k > 1:
wk = (m, n, split_k)
if wk not in _ws:
_ws[wk] = torch.empty(split_k * m * n, dtype=torch.float32, device="cuda")
W = _ws[wk]
if split_k <= 4:
# In-kernel sum: use tile_done counter (self-cleaning)
tdk = gx
if tdk not in _td:
_td[tdk] = torch.zeros(gx, dtype=torch.int32, device="cuda")
td = _td[tdk]
td_ptr = td.data_ptr()
else:
# Partials mode: td_ptr=0 triggers partials-only in kernel
# Reduce kernel handles sum on host side
td_ptr = 0
w_ptr = W.data_ptr()
else:
w_ptr = 0
td_ptr = 0 # OK for split_k=1, kernel checks num_splits
# SINGLE launch — no zero_(), no torch.sum, no reduce kernel
args = struct.pack("<QQQQ6iQQi",
A.data_ptr(), Bqu.data_ptr(), Bsu.data_ptr(), C.data_ptr(),
m, n, k, A.stride(0), Bqu.stride(0), ksp,
w_ptr, td_ptr, k_chunk)
sz = 76
abuf = (ctypes.c_char * sz)(*args)
aptr = ctypes.cast(abuf, ctypes.c_void_p)
asz = ctypes.c_size_t(sz)
cfg = (ctypes.c_void_p * 5)(
ctypes.c_void_p(1), aptr,
ctypes.c_void_p(2), ctypes.cast(ctypes.byref(asz), ctypes.c_void_p),
ctypes.c_void_p(3))
err = _hip.hipModuleLaunchKernel(
_fn,
ctypes.c_uint(gx), ctypes.c_uint(1), ctypes.c_uint(split_k),
ctypes.c_uint(512), ctypes.c_uint(1), ctypes.c_uint(1),
ctypes.c_uint(lds_total), ctypes.c_void_p(q),
ctypes.c_void_p(0), ctypes.cast(cfg, ctypes.POINTER(ctypes.c_void_p)))
if err == 0:
if split_k > 4 and _fn_reduce is not None:
# In-kernel sum too slow for sk>4. Use fused reduce kernel.
num_elems = m * n
r_args = struct.pack("<QQii", W.data_ptr(), C.data_ptr(), num_elems, split_k)
_launch_reduce(_fn_reduce, (num_elems + 255) // 256, r_args, q)
return C
# Fallback
import aiter; from aiter import dtypes
from aiter.ops.triton.quant import dynamic_mxfp4_quant
from aiter.utility.fp4_utils import e8m0_shuffle
Aq, As = dynamic_mxfp4_quant(A); Ash = e8m0_shuffle(As)
return aiter.gemm_a4w4(Aq.view(dtypes.fp4x2), B_shuffle,
Ash.view(dtypes.fp8_e8m0), B_scale_sh,
dtype=dtypes.bf16, bpreshuffle=True)
scrolls · 400 lines total
Source code from GPU Mode and the KernelBot dataset · June 9 Researcher Reciprocity License v1.0
Changes from previous submission
Against this author's previous submission submission 663912.
- #!POPCORN leaderboard amd-mxfp4-mm- #!POPCORN gpu MI355X- """- MXFP4-MM: Hybrid with direct ASM GEMM launch.- K<=1024: fused HIP quant+GEMM (1 launch)- K>1024: combined C++ call: HIP quant + ASM gemm (2 launches, 0 Python round-trips)- """- import os, ctypes, base64, tempfile+ #!/usr/bin/env python3+ """v14 v9: overwrite-planes split-K, self-cleaning counter. Zero torch overhead."""+ import os, ctypes, base64, tempfile, struct+ os.environ["HIP_FORCE_DEV_KERNARG"] = "1"import torch- import aiter- from aiter import dtypes- from aiter.ops.triton.quant import dynamic_mxfp4_quant- from aiter.utility.fp4_utils import e8m0_shufflefrom task import input_t, output_t- _SO_B64 = (- "f0VMRgIBAQAAAAAAAAAAAAMAPgABAAAAAAAAAAAAAABAAAAAAAAAAOBqAAAAAAAAAAAAAEAAOAAJAEAAHgAcAAYAAAAEAAAAQAAA"+ _CO_B64 = (+ "f0VMRgIBAUAEAAAAAAAAAAMA4AABAAAAAAAAAAAAAABAAAAAAAAAANgrAAAAAAAATwUAAEAAOAAJAEAAEAAOAAYAAAAEAAAAQAAA""AAAAAABAAAAAAAAAAEAAAAAAAAAA+AEAAAAAAAD4AQAAAAAAAAgAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAkUQAAAAAAACRRAAAAAAAAABAAAAAAAAABAAAABQAAADBRAAAAAAAAMGEAAAAAAAAwYQAAAAAAAAAMAAAAAAAAAAwAAAAAAAAA"- "EAAAAAAAAAEAAAAGAAAAMF0AAAAAAAAwfQAAAAAAADB9AAAAAAAAKAIAAAAAAADQAgAAAAAAAAAQAAAAAAAAAQAAAAYAAABYXwAA"- "AAAAAFiPAAAAAAAAWI8AAAAAAAC4AAAAAAAAADEBAAAAAAAAABAAAAAAAAACAAAABgAAAFhdAAAAAAAAWH0AAAAAAABYfQAAAAAA"- "ANABAAAAAAAA0AEAAAAAAAAIAAAAAAAAAFLldGQEAAAAMF0AAAAAAAAwfQAAAAAAADB9AAAAAAAAKAIAAAAAAADQAgAAAAAAAAEA"- "AAAAAAAAUOV0ZAQAAACoTgAAAAAAAKhOAAAAAAAAqE4AAAAAAABcAAAAAAAAAFwAAAAAAAAABAAAAAAAAABR5XRkBgAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAgAAAA"- "AAAAAAAAAAAAAAAAAAAAABAAAAAiAAAAAAAAAAAAAAAAAAAAAAAAACYAAAAiAAAAAAAAAAAAAAAAAAAAAAAAADUAAAAiAAAAAAAA"- "AAAAAAAAAAAAAAAAAHQAAAASAAAAAAAAAAAAAAAAAAAAAAAAAKYAAAASAAAAAAAAAAAAAAAAAAAAAAAAAA0BAAASAAAAAAAAAAAA"- "AAAAAAAAAAAAACgBAAASAAAAAAAAAAAAAAAAAAAAAAAAAGMBAAASAAAAAAAAAAAAAAAAAAAAAAAAAGoBAAASAAAAAAAAAAAAAAAA"- "AAAAAAAAAIABAAASAAAAAAAAAAAAAAAAAAAAAAAAAIkBAAASAAAAAAAAAAAAAAAAAAAAAAAAAJcBAAASAAAAAAAAAAAAAAAAAAAA"- "AAAAAKwBAAASAAAAAAAAAAAAAAAAAAAAAAAAAMMBAAASAAAAAAAAAAAAAAAAAAAAAAAAANkBAAASAAAAAAAAAAAAAAAAAAAAAAAA"- "AA4CAAASAAAAAAAAAAAAAAAAAAAAAAAAAE0AAAASAAwAwGEAAAAAAAD0AAAAAAAAAOAAAAARABIAUH0AAAAAAAAIAAAAAAAAADgB"- "AAASAAwAUGUAAAAAAACAAQAAAAAAAFMBAAASAAwA0GYAAAAAAAA2BAAAAAAAAI4AAAARABIASH0AAAAAAAAIAAAAAAAAALYAAAAS"- "AAwAwGIAAAAAAADjAAAAAAAAAPsAAAASAAwAsGMAAAAAAACfAQAAAAAAAPIBAAARABkAiJAAAAAAAAABAAAAAAAAAAAAAQACAAMA"- "AgAEAAQABAAEAAMABAADAAQABAAEAAQABAADAAEAAQABAAEAAQABAAEAAQABAAEAGwIAADAAAAAQAAAAAQABADQCAAAwAAAAEAAA"- "AAEAAQBKAgAAMAAAAAAAAAByJwYPAAAEACwCAAAAAAAAUCZ5CwAAAgBCAgAAAAAAAHUaaQkAAAMAVAIAAAAAAAAAAAAAAgAAABIA"- "AAACAAAAGgAAAAAAARdBICAAAAQEiAiAAAASAAAAFgAAABjq0mqQGTnWSg0wjiGYUnLunGtKGMKPm9odJXy1h9G0AF9fZ21vbl9z"- "dGFydF9fAF9fcmVnaXN0ZXJfZnJhbWVfaW5mbwBfX2N4YV9maW5hbGl6ZQBfX2RlcmVnaXN0ZXJfZnJhbWVfaW5mbwBfX2Rldmlj"- "ZV9zdHViX19mdXNlZF9teGZwNF9nZW1tX2tlcm5lbABfX2hpcFBvcENhbGxDb25maWd1cmF0aW9uAGZ1c2VkX214ZnA0X2dlbW1f"- "a2VybmVsAGhpcExhdW5jaEtlcm5lbABfX2RldmljZV9zdHViX19mdXNlZF9xdWFudF9zaHVmZmxlX2tlcm5lbABmdXNlZF9xdWFu"- "dF9zaHVmZmxlX2tlcm5lbABsYXVuY2hfZnVzZWRfZ2VtbQBfX2hpcFB1c2hDYWxsQ29uZmlndXJhdGlvbgBoaXBHZXRMYXN0RXJy"- "b3IAbGF1bmNoX2Z1c2VkX3F1YW50X3NodWZmbGUAbGF1bmNoX2NvbWJpbmVkAG1lbXNldABoaXBNb2R1bGVMYXVuY2hLZXJuZWwA"- "c25wcmludGYAaGlwTW9kdWxlTG9hZABoaXBNb2R1bGVHZXRGdW5jdGlvbgBfX2hpcFJlZ2lzdGVyRmF0QmluYXJ5AF9faGlwUmVn"- "aXN0ZXJGdW5jdGlvbgBfX2hpcFVucmVnaXN0ZXJGYXRCaW5hcnkAX19oaXBfY3VpZF81MDIzZGY0M2ZhYzhkYTU3AF9fY3hhX2F0"- "ZXhpdABsaWJhbWRoaXA2NC5zby43AGhpcF80LjIAbGliZ2NjX3Muc28uMQBHQ0NfMy4wAGxpYmMuc28uNgBHTElCQ18yLjIuNQAv"- "b3B0L3JvY20tNy4xLjAvbGliAGxpYnN0ZGMrKy5zby42AGxpYm0uc28uNgAAAAAwfQAAAAAAAAgAAAAAAAAAMGEAAAAAAAA4fQAA"- "AAAAAAgAAAAAAAAAEGsAAAAAAABAfQAAAAAAAAgAAAAAAAAAcGEAAAAAAABYjwAAAAAAAAgAAAAAAAAAWI8AAAAAAABojwAAAAAA"- "AAgAAAAAAAAAABAAAAAAAAAofwAAAAAAAAYAAAABAAAAAAAAAAAAAAAwfwAAAAAAAAYAAAACAAAAAAAAAAAAAAA4fwAAAAAAAAYA"- "AAADAAAAAAAAAAAAAABAfwAAAAAAAAYAAAAEAAAAAAAAAAAAAABIfQAAAAAAAAEAAAASAAAAAAAAAAAAAABQfwAAAAAAAAYAAAAT"- "AAAAAAAAAAAAAABIfwAAAAAAAAYAAAAWAAAAAAAAAAAAAABQfQAAAAAAAAEAAAAXAAAAAAAAAAAAAACQjwAAAAAAAAcAAAACAAAA"- "AAAAAAAAAACYjwAAAAAAAAcAAAADAAAAAAAAAAAAAACgjwAAAAAAAAcAAAAEAAAAAAAAAAAAAACojwAAAAAAAAcAAAAFAAAAAAAA"- "AAAAAACwjwAAAAAAAAcAAAAGAAAAAAAAAAAAAAC4jwAAAAAAAAcAAAAHAAAAAAAAAAAAAADAjwAAAAAAAAcAAAAIAAAAAAAAAAAA"- "AADIjwAAAAAAAAcAAAAJAAAAAAAAAAAAAADQjwAAAAAAAAcAAAAKAAAAAAAAAAAAAADYjwAAAAAAAAcAAAALAAAAAAAAAAAAAADg"- "jwAAAAAAAAcAAAAMAAAAAAAAAAAAAADojwAAAAAAAAcAAAANAAAAAAAAAAAAAADwjwAAAAAAAAcAAAAOAAAAAAAAAAAAAAD4jwAA"- "AAAAAAcAAAAPAAAAAAAAAAAAAAAAkAAAAAAAAAcAAAAQAAAAAAAAAAAAAAAIkAAAAAAAAAcAAAARAAAAAAAAAAAAAABfWk41YWl0"- "ZXI0MWY0Z2VtbV9iZjE2X3BlcjF4MzJGcDRfQnByZVNodWZmbGVfMzJ4MTI4RQAlc2Y0Z2VtbV9iZjE2X3BlcjF4MzJGcDRfQnBy"- "ZVNodWZmbGVfMzJ4MTI4LmNvACVzZjRnZW1tX2JmMTZfcGVyMXgzMkZwNF9CcHJlU2h1ZmZsZV8xOTJ4MTI4LmNvAGZ1c2VkX3F1"- "YW50X3NodWZmbGVfa2VybmVsAC9ob21lL3J1bm5lci9haXRlci9oc2EvZ2Z4OTUwL2Y0Z2VtbS8AX1pONWFpdGVyNDJmNGdlbW1f"- "YmYxNl9wZXIxeDMyRnA0X0JwcmVTaHVmZmxlXzE5MngxMjhFAGZ1c2VkX214ZnA0X2dlbW1fa2VybmVsAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF9fQ0xBTkdfT0ZGTE9BRF9CVU5ETEVfXwIAAAAA"- "AAAAABAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAaG9zdC14ODZfNjQtdW5rbm93bi1saW51eC1nbnUtABAAAAAAAACoLgAAAAAAAB8A"- "AAAAAAAAaGlwdjQtYW1kZ2NuLWFtZC1hbWRoc2EtLWdmeDk1MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAB/RUxGAgEBQAQAAAAAAAAAAwDgAAEAAAAAAAAAAAAAAEAAAAAAAAAAqCoAAAAAAABPBQAAQAA4AAkA"- "QAAQAA4ABgAAAAQAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAD4AQAAAAAAAPgBAAAAAAAACAAAAAAAAAABAAAABAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAIAOAAAAAAAAgA4AAAAAAAAAEAAAAAAAAAEAAAAFAAAAAA8AAAAAAAAAHwAAAAAAAAAfAAAAAAAA"- "QBQAAAAAAABAFAAAAAAAAAAQAAAAAAAAAQAAAAYAAABAIwAAAAAAAEBDAAAAAAAAQEMAAAAAAABwAAAAAAAAAMAMAAAAAAAAABAA"- "AAAAAAABAAAABgAAALAjAAAAAAAAsFMAAAAAAACwUwAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAEAAAAAAAAAIAAAAGAAAAQCMAAAAA"- "AABAQwAAAAAAAEBDAAAAAAAAcAAAAAAAAABwAAAAAAAAAAgAAAAAAAAAUuV0ZAQAAABAIwAAAAAAAEBDAAAAAAAAQEMAAAAAAABw"- "AAAAAAAAAMAMAAAAAAAAAQAAAAAAAABR5XRkBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAQAAAAEAAAAOAIAAAAAAAA4AgAAAAAAADgCAAAAAAAAOAoAAAAAAAA4CgAAAAAAAAQAAAAAAAAABwAAACEKAAAgAAAAQU1E"- "R1BVAACDrmFtZGhzYS5rZXJuZWxzkt4AEqsuYWdwcl9jb3VudAClLmFyZ3Oaha4uYWN0dWFsX2FjY2Vzc6lyZWFkX29ubHmuLmFk"- "ZHJlc3Nfc3BhY2WmZ2xvYmFspy5vZmZzZXQApS5zaXplCKsudmFsdWVfa2luZK1nbG9iYWxfYnVmZmVyha4uYWN0dWFsX2FjY2Vz"- "c6lyZWFkX29ubHmuLmFkZHJlc3Nfc3BhY2WmZ2xvYmFspy5vZmZzZXQIpS5zaXplCKsudmFsdWVfa2luZK1nbG9iYWxfYnVmZmVy"- "ha4uYWN0dWFsX2FjY2Vzc6lyZWFkX29ubHmuLmFkZHJlc3Nfc3BhY2WmZ2xvYmFspy5vZmZzZXQQpS5zaXplCKsudmFsdWVfa2lu"- "ZK1nbG9iYWxfYnVmZmVyha4uYWN0dWFsX2FjY2Vzc6p3cml0ZV9vbmx5ri5hZGRyZXNzX3NwYWNlpmdsb2JhbKcub2Zmc2V0GKUu"- "c2l6ZQirLnZhbHVlX2tpbmStZ2xvYmFsX2J1ZmZlcoOnLm9mZnNldCClLnNpemUEqy52YWx1ZV9raW5kqGJ5X3ZhbHVlg6cub2Zm"- "c2V0JKUuc2l6ZQSrLnZhbHVlX2tpbmSoYnlfdmFsdWWDpy5vZmZzZXQopS5zaXplBKsudmFsdWVfa2luZKhieV92YWx1ZYOnLm9m"- "ZnNldCylLnNpemUEqy52YWx1ZV9raW5kqGJ5X3ZhbHVlg6cub2Zmc2V0MKUuc2l6ZQSrLnZhbHVlX2tpbmSoYnlfdmFsdWWDpy5v"- "ZmZzZXQ0pS5zaXplBKsudmFsdWVfa2luZKhieV92YWx1ZbkuZ3JvdXBfc2VnbWVudF9maXhlZF9zaXplzRAAti5rZXJuYXJnX3Nl"- "Z21lbnRfYWxpZ24ItS5rZXJuYXJnX3NlZ21lbnRfc2l6ZTipLmxhbmd1YWdlqE9wZW5DTCBDsS5sYW5ndWFnZV92ZXJzaW9ukgIA"- "uC5tYXhfZmxhdF93b3JrZ3JvdXBfc2l6Zc0BAKUubmFtZbdmdXNlZF9teGZwNF9nZW1tX2tlcm5lbLsucHJpdmF0ZV9zZWdtZW50"- "X2ZpeGVkX3NpemUAqy5zZ3ByX2NvdW50JLEuc2dwcl9zcGlsbF9jb3VudACnLnN5bWJvbLpmdXNlZF9teGZwNF9nZW1tX2tlcm5l"- "bC5rZLgudW5pZm9ybV93b3JrX2dyb3VwX3NpemUBsy51c2VzX2R5bmFtaWNfc3RhY2vCqy52Z3ByX2NvdW50P7Eudmdwcl9zcGls"- "bF9jb3VudACvLndhdmVmcm9udF9zaXplQN4AEqsuYWdwcl9jb3VudAClLmFyZ3PcABaFri5hY3R1YWxfYWNjZXNzqXJlYWRfb25s"+ "AABADgAAAAAAAEAOAAAAAAAAABAAAAAAAAABAAAABQAAAAAPAAAAAAAAAB8AAAAAAAAAHwAAAAAAAMAVAAAAAAAAwBUAAAAAAAAA"+ "EAAAAAAAAAEAAAAGAAAAwCQAAAAAAADARAAAAAAAAMBEAAAAAAAAcAAAAAAAAABACwAAAAAAAAAQAAAAAAAAAQAAAAYAAAAwJQAA"+ "AAAAADBVAAAAAAAAMFUAAAAAAAAAAAAAAAAAAAEAAAAAAAAAABAAAAAAAAACAAAABgAAAMAkAAAAAAAAwEQAAAAAAADARAAAAAAA"+ "AHAAAAAAAAAAcAAAAAAAAAAIAAAAAAAAAFLldGQEAAAAwCQAAAAAAADARAAAAAAAAMBEAAAAAAAAcAAAAAAAAABACwAAAAAAAAEA"+ "AAAAAAAAUeV0ZAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAADgCAAAA"+ "AAAAOAIAAAAAAAA4AgAAAAAAAPgJAAAAAAAA+AkAAAAAAAAEAAAAAAAAAAcAAADjCQAAIAAAAEFNREdQVQAAg65hbWRoc2Eua2Vy"+ "bmVsc5LeABKrLmFncHJfY291bnQApS5hcmdz3AAbha4uYWN0dWFsX2FjY2Vzc6lyZWFkX29ubHmuLmFkZHJlc3Nfc3BhY2WmZ2xv"+ "YmFspy5vZmZzZXQApS5zaXplCKsudmFsdWVfa2luZK1nbG9iYWxfYnVmZmVyha4uYWN0dWFsX2FjY2Vzc6lyZWFkX29ubHmuLmFk"+ "ZHJlc3Nfc3BhY2WmZ2xvYmFspy5vZmZzZXQIpS5zaXplCKsudmFsdWVfa2luZK1nbG9iYWxfYnVmZmVyha4uYWN0dWFsX2FjY2Vz"+ "c6lyZWFkX29ubHmuLmFkZHJlc3Nfc3BhY2WmZ2xvYmFspy5vZmZzZXQQpS5zaXplCKsudmFsdWVfa2luZK1nbG9iYWxfYnVmZmVy"+ "hK4uYWRkcmVzc19zcGFjZaZnbG9iYWynLm9mZnNldBilLnNpemUIqy52YWx1ZV9raW5krWdsb2JhbF9idWZmZXKDpy5vZmZzZXQg"+ "pS5zaXplBKsudmFsdWVfa2luZKhieV92YWx1ZYOnLm9mZnNldCSlLnNpemUEqy52YWx1ZV9raW5kqGJ5X3ZhbHVlg6cub2Zmc2V0"+ "KKUuc2l6ZQSrLnZhbHVlX2tpbmSoYnlfdmFsdWWDpy5vZmZzZXQspS5zaXplBKsudmFsdWVfa2luZKhieV92YWx1ZYOnLm9mZnNl"+ "dDClLnNpemUEqy52YWx1ZV9raW5kqGJ5X3ZhbHVlg6cub2Zmc2V0NKUuc2l6ZQSrLnZhbHVlX2tpbmSoYnlfdmFsdWWEri5hZGRy"+ "ZXNzX3NwYWNlpmdsb2JhbKcub2Zmc2V0OKUuc2l6ZQirLnZhbHVlX2tpbmStZ2xvYmFsX2J1ZmZlcoSuLmFkZHJlc3Nfc3BhY2Wm"+ "Z2xvYmFspy5vZmZzZXRApS5zaXplCKsudmFsdWVfa2luZK1nbG9iYWxfYnVmZmVyg6cub2Zmc2V0SKUuc2l6ZQSrLnZhbHVlX2tp"+ "bmSoYnlfdmFsdWWDpy5vZmZzZXRQpS5zaXplBKsudmFsdWVfa2luZLRoaWRkZW5fYmxvY2tfY291bnRfeIOnLm9mZnNldFSlLnNp"+ "emUEqy52YWx1ZV9raW5ktGhpZGRlbl9ibG9ja19jb3VudF95g6cub2Zmc2V0WKUuc2l6ZQSrLnZhbHVlX2tpbmS0aGlkZGVuX2Js"+ "b2NrX2NvdW50X3qDpy5vZmZzZXRcpS5zaXplAqsudmFsdWVfa2luZLNoaWRkZW5fZ3JvdXBfc2l6ZV94g6cub2Zmc2V0XqUuc2l6"+ "ZQKrLnZhbHVlX2tpbmSzaGlkZGVuX2dyb3VwX3NpemVfeYOnLm9mZnNldGClLnNpemUCqy52YWx1ZV9raW5ks2hpZGRlbl9ncm91"+ "cF9zaXplX3qDpy5vZmZzZXRipS5zaXplAqsudmFsdWVfa2luZLJoaWRkZW5fcmVtYWluZGVyX3iDpy5vZmZzZXRkpS5zaXplAqsu"+ "dmFsdWVfa2luZLJoaWRkZW5fcmVtYWluZGVyX3mDpy5vZmZzZXRmpS5zaXplAqsudmFsdWVfa2luZLJoaWRkZW5fcmVtYWluZGVy"+ "X3qDpy5vZmZzZXR4pS5zaXplCKsudmFsdWVfa2luZLZoaWRkZW5fZ2xvYmFsX29mZnNldF94g6cub2Zmc2V0zIClLnNpemUIqy52"+ "YWx1ZV9raW5ktmhpZGRlbl9nbG9iYWxfb2Zmc2V0X3mDpy5vZmZzZXTMiKUuc2l6ZQirLnZhbHVlX2tpbmS2aGlkZGVuX2dsb2Jh"+ "bF9vZmZzZXRfeoOnLm9mZnNldMyQpS5zaXplAqsudmFsdWVfa2luZLBoaWRkZW5fZ3JpZF9kaW1zg6cub2Zmc2V0zMilLnNpemUE"+ "qy52YWx1ZV9raW5kt2hpZGRlbl9keW5hbWljX2xkc19zaXpluS5ncm91cF9zZWdtZW50X2ZpeGVkX3NpemUEti5rZXJuYXJnX3Nl"+ "Z21lbnRfYWxpZ24ItS5rZXJuYXJnX3NlZ21lbnRfc2l6Zc0BUKkubGFuZ3VhZ2WoT3BlbkNMIEOxLmxhbmd1YWdlX3ZlcnNpb26S"+ "AgC4Lm1heF9mbGF0X3dvcmtncm91cF9zaXplzQIApS5uYW1lt2Z1c2VkX214ZnA0X2dlbW1fa2VybmVsuy5wcml2YXRlX3NlZ21l"+ "bnRfZml4ZWRfc2l6ZQCrLnNncHJfY291bnQ0sS5zZ3ByX3NwaWxsX2NvdW50AKcuc3ltYm9sumZ1c2VkX214ZnA0X2dlbW1fa2Vy"+ "bmVsLmtkuC51bmlmb3JtX3dvcmtfZ3JvdXBfc2l6ZQGzLnVzZXNfZHluYW1pY19zdGFja8KrLnZncHJfY291bnQ3sS52Z3ByX3Nw"+ "aWxsX2NvdW50AK8ud2F2ZWZyb250X3NpemVA3gASqy5hZ3ByX2NvdW50AKUuYXJnc5SFri5hY3R1YWxfYWNjZXNzqXJlYWRfb25s""ea4uYWRkcmVzc19zcGFjZaZnbG9iYWynLm9mZnNldAClLnNpemUIqy52YWx1ZV9raW5krWdsb2JhbF9idWZmZXKFri5hY3R1YWxf""YWNjZXNzqndyaXRlX29ubHmuLmFkZHJlc3Nfc3BhY2WmZ2xvYmFspy5vZmZzZXQIpS5zaXplCKsudmFsdWVfa2luZK1nbG9iYWxf"- "YnVmZmVyha4uYWN0dWFsX2FjY2Vzc6p3cml0ZV9vbmx5ri5hZGRyZXNzX3NwYWNlpmdsb2JhbKcub2Zmc2V0EKUuc2l6ZQirLnZh"- "bHVlX2tpbmStZ2xvYmFsX2J1ZmZlcoOnLm9mZnNldBilLnNpemUEqy52YWx1ZV9raW5kqGJ5X3ZhbHVlg6cub2Zmc2V0HKUuc2l6"- "ZQSrLnZhbHVlX2tpbmSoYnlfdmFsdWWDpy5vZmZzZXQgpS5zaXplBKsudmFsdWVfa2luZKhieV92YWx1ZYOnLm9mZnNldCSlLnNp"- "emUEqy52YWx1ZV9raW5kqGJ5X3ZhbHVlg6cub2Zmc2V0KKUuc2l6ZQSrLnZhbHVlX2tpbmSoYnlfdmFsdWWDpy5vZmZzZXQspS5z"- "aXplBKsudmFsdWVfa2luZKhieV92YWx1ZYOnLm9mZnNldDClLnNpemUEqy52YWx1ZV9raW5ktGhpZGRlbl9ibG9ja19jb3VudF94"- "g6cub2Zmc2V0NKUuc2l6ZQSrLnZhbHVlX2tpbmS0aGlkZGVuX2Jsb2NrX2NvdW50X3mDpy5vZmZzZXQ4pS5zaXplBKsudmFsdWVf"- "a2luZLRoaWRkZW5fYmxvY2tfY291bnRfeoOnLm9mZnNldDylLnNpemUCqy52YWx1ZV9raW5ks2hpZGRlbl9ncm91cF9zaXplX3iD"- "py5vZmZzZXQ+pS5zaXplAqsudmFsdWVfa2luZLNoaWRkZW5fZ3JvdXBfc2l6ZV95g6cub2Zmc2V0QKUuc2l6ZQKrLnZhbHVlX2tp"- "bmSzaGlkZGVuX2dyb3VwX3NpemVfeoOnLm9mZnNldEKlLnNpemUCqy52YWx1ZV9raW5ksmhpZGRlbl9yZW1haW5kZXJfeIOnLm9m"- "ZnNldESlLnNpemUCqy52YWx1ZV9raW5ksmhpZGRlbl9yZW1haW5kZXJfeYOnLm9mZnNldEalLnNpemUCqy52YWx1ZV9raW5ksmhp"- "ZGRlbl9yZW1haW5kZXJfeoOnLm9mZnNldFilLnNpemUIqy52YWx1ZV9raW5ktmhpZGRlbl9nbG9iYWxfb2Zmc2V0X3iDpy5vZmZz"- "ZXRgpS5zaXplCKsudmFsdWVfa2luZLZoaWRkZW5fZ2xvYmFsX29mZnNldF95g6cub2Zmc2V0aKUuc2l6ZQirLnZhbHVlX2tpbmS2"- "aGlkZGVuX2dsb2JhbF9vZmZzZXRfeoOnLm9mZnNldHClLnNpemUCqy52YWx1ZV9raW5ksGhpZGRlbl9ncmlkX2RpbXO5Lmdyb3Vw"- "X3NlZ21lbnRfZml4ZWRfc2l6ZQC2Lmtlcm5hcmdfc2VnbWVudF9hbGlnbgi1Lmtlcm5hcmdfc2VnbWVudF9zaXplzQEwqS5sYW5n"- "dWFnZahPcGVuQ0wgQ7EubGFuZ3VhZ2VfdmVyc2lvbpICALgubWF4X2ZsYXRfd29ya2dyb3VwX3NpemXNAQClLm5hbWW6ZnVzZWRf"- "cXVhbnRfc2h1ZmZsZV9rZXJuZWy7LnByaXZhdGVfc2VnbWVudF9maXhlZF9zaXplAKsuc2dwcl9jb3VudBOxLnNncHJfc3BpbGxf"- "Y291bnQApy5zeW1ib2y9ZnVzZWRfcXVhbnRfc2h1ZmZsZV9rZXJuZWwua2S4LnVuaWZvcm1fd29ya19ncm91cF9zaXplAbMudXNl"- "c19keW5hbWljX3N0YWNrwqsudmdwcl9jb3VudDOxLnZncHJfc3BpbGxfY291bnQAry53YXZlZnJvbnRfc2l6ZUCtYW1kaHNhLnRh"- "cmdldLlhbWRnY24tYW1kLWFtZGhzYS0tZ2Z4OTUwrmFtZGhzYS52ZXJzaW9ukgECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AQAAABIDBwAAHwAAAAAAAEwKAAAAAAAAGQAAABEDBgAADgAAAAAAAEAAAAAAAAAANAAAABIDBwAAKgAAAAAAADQFAAAAAAAATwAA"- "ABEDBgBADgAAAAAAAEAAAAAAAAAAbQAAABEACgCwUwAAAAAAAAEAAAAAAAAAAQAAAAEAAAABAAAAGgAAAAgABQIAsCAAAQAAAO6c"- "a0ps/JkMkBk51mxBnmW1h9G0BgAAAAYAAAAEAAAABQAAAAMAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAA"- "ZnVzZWRfbXhmcDRfZ2VtbV9rZXJuZWwAZnVzZWRfbXhmcDRfZ2VtbV9rZXJuZWwua2QAZnVzZWRfcXVhbnRfc2h1ZmZsZV9rZXJu"- "ZWwAZnVzZWRfcXVhbnRfc2h1ZmZsZV9rZXJuZWwua2QAX19oaXBfY3VpZF81MDIzZGY0M2ZhYzhkYTU3AAAAAAAAAAAAAAAAAAAA"- "AAAQAAAAAAAAOAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAcBrwCEAAAACAAAAAAAAAAAAAAAAAAAADAB"- "AAAAAAAAwBsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAACGAK8AhAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"+ "YnVmZmVyg6cub2Zmc2V0EKUuc2l6ZQSrLnZhbHVlX2tpbmSoYnlfdmFsdWWDpy5vZmZzZXQUpS5zaXplBKsudmFsdWVfa2luZKhi"+ "eV92YWx1ZbkuZ3JvdXBfc2VnbWVudF9maXhlZF9zaXplALYua2VybmFyZ19zZWdtZW50X2FsaWduCLUua2VybmFyZ19zZWdtZW50"+ "X3NpemUYqS5sYW5ndWFnZahPcGVuQ0wgQ7EubGFuZ3VhZ2VfdmVyc2lvbpICALgubWF4X2ZsYXRfd29ya2dyb3VwX3NpemXNAQCl"+ "Lm5hbWWycmVkdWNlX2JmMTZfa2VybmVsuy5wcml2YXRlX3NlZ21lbnRfZml4ZWRfc2l6ZQCrLnNncHJfY291bnQMsS5zZ3ByX3Nw"+ "aWxsX2NvdW50AKcuc3ltYm9stXJlZHVjZV9iZjE2X2tlcm5lbC5rZLgudW5pZm9ybV93b3JrX2dyb3VwX3NpemUBsy51c2VzX2R5"+ "bmFtaWNfc3RhY2vCqy52Z3ByX2NvdW50BrEudmdwcl9zcGlsbF9jb3VudACvLndhdmVmcm9udF9zaXplQK1hbWRoc2EudGFyZ2V0"+ "uWFtZGdjbi1hbWQtYW1kaHNhLS1nZng5NTCuYW1kaHNhLnZlcnNpb26SAQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABID"+ "BwAAHwAAAAAAADgQAAAAAAAAGQAAABEDBgDADQAAAAAAAEAAAAAAAAAANAAAABIDBwAAMAAAAAAAAKgAAAAAAAAARwAAABEDBgAA"+ "DgAAAAAAAEAAAAAAAAAAXQAAABEACgAwVQAAAAAAAAEAAAAAAAAAAQAAAAEAAAABAAAAGgAAAAgAFECAmSAAAQAAAO6ca0ps/JkM"+ "qqvFeqhhyJ51x6RRBgAAAAYAAAAFAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAwAAAAQAAAAAZnVzZWRf"+ "bXhmcDRfZ2VtbV9rZXJuZWwAZnVzZWRfbXhmcDRfZ2VtbV9rZXJuZWwua2QAcmVkdWNlX2JmMTZfa2VybmVsAHJlZHVjZV9iZjE2"+ "X2tlcm5lbC5rZABfX2hpcF9jdWlkXzM0YjMwZmI1YzExYmU2MzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAA"+ "AAAAUAEAAAAAAABAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAAIYBrwCEAgAACAAAAAAAAAAAAAAAAAAAABgAAAAAAAAA"+ "ACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABAAK8AhAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA""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"- "AP/RBQMCAAAA6NEAExgEnwACIn/AjL8AAAjSAAMZAACAbNwAAn8AAACBvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/"+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"+ "AAAAAAAAAAAAAAAAAAAAAAEOwCAAAACAAwLAUAAAAIAHAsBYAAAAAp8PkA+dD49/wIy/Bf8MgX8AAAAMnw2QDZkNjwwNDIEMhyKQ"+ "Dp8MkAydDI8ODAyBAg8PgQyDDZAMyAyGD4MQkA/ID4YODIyBAg+PgQ8MDIMNDw2SDBAMgQwNDIEMDgS/DAIWhSIwgr4CDAJ+gAKO"+ "gRYiDYgNnx+QAUcCfhYwjb4ABgbAQAAAAAADAsBIAAAAAAUGwBgAAAD/AgIK/v9/TwEPAn5/wIy/DAMXkgEFHn4ODw6SDw4Olg8O"+ "D4ENDw6WDgIPkg0PjYEOgQ+BDQKQgQ0CCb8PDg6FEA0NhQ6BD4ENAgm/Dw4ChRcMDIEMBgyDDBecgRyfDI8cDAyBDIEkkByfDJAM"+ "mwyPHAwMgQIfIYgMhSWQIR+mgSSEHY4lhCeOJoQCjh2EI4EnAIh9aiCMvkkBiL8lMKi+KAwCfoADBsAAAAAAgCiTgSWFEo4BRwJ+"+ "JZ8pkCQnqoESAP3RAAkRAv8CAgr+/39PAQ8CfhQA/dEAC10AgAGQvoASq4ECAIXSEwICAAIAhtIBBQIAAQUCaP8ArL4ABQwM/wCt"+ "vgAA/wCAAiZ+lwIqfgADLH5VAIK/fhr+hw4ATdIOMwIADwBN0g8zAgAQAE3SEDMCABEATdIRMwIACgBN0gozAgALAE3SCzMCAAwA"+ "TdIMMwIADQBN0g0zAgAGAE3SBjMCAAcATdIHMwIACABN0ggzAgAJAE3SCTMCABoATdICMwIAGwBN0gMzAgACGujRKi5KBIgWBiSI"+ "HhYkCwDt0QsdsgADAO3RAxWyAJAgFCSQGBgkAwAB0gxbDAQKAAHSClssBAoAANIRMSkEAwAA0g0xDQQEAE3SBDMCAAUATdIFMwIA"+ "AAEc2AIKAwCINgYkiA4OJAYA7dEHDbIAAwDt0QM1sgCQEA4kkAgIJAMAAdIEWwwEBAAB0gdbGAQEAADSCTERBAMAANIFMQ0EAgMc"+ "2AIEAwB+Ev6HIywEaP8sLGgAAgAAJyyGff8kJGgAIAAAahCQh/8oKGgAQAAAAAA82AIYAAB+EP6J1QCIvwIAhtIWAwIAAwCF0gJR"+ "AAAWBwZqgQQIaCgGln0BAIC/AgkEACgGCGwDCQYAgQQIaCgGln0BAIC/AgkEACkEBCopBC5sAi4EaAQEhn1qIJK+fhKSiAYAiL8C"+ "GujRKi5KBAIDHNgCExMAAAEc2AITEwASIZK+gAIwfn4S/ojS/4i/AgCF0gIPAAAEGujRKy5SBJ8EBiJ/wIy/AgAI0gIDOQCfCAoi"+ "GAAI0gQDCQQAgFzcGAB/DhCAXNwYAH8KIIBc3BgAfwYwgFzcGAB/AnMPjL+QHDAk/xwyJgAA//+QHjQk/x42JgAA//+QIDgk/yA6"+ "JgAA//+QIjwk/yI+JgAA//8ZAwvRGTMCABgDC9EYMQIAGwML0Rs3AgAaAwvRGjUCAHIPjL+QFEAk/xRCJgAA//+QFkQk/xZGJgAA"+ "//8dAwvRHTsCABwDC9EcOQIAHwML0R8/AgAeAwvRHj0CABgzMBYaNzIWkBhIJP8YSiYAAP//kBpMJP8aTiYAAP//IQML0SFDAgAg"+ "AwvRIEECACMDC9EjRwIAIgML0SJFAgAcOzQWHj82FhgA09EYAWUEcQ+Mv5AMUCT/DFImAAD//5AOVCT/DlYmAAD//yUDC9ElSwIA"+ "JAML0SRJAgAnAwvRJ08CACYDC9EmTQIAIEM4FiJHOhYYANPRGDVuBJAQWCT/EFomAAD//5ASXCT/El4mAAD//ykDC9EpUwIAKAML"+ "0ShRAgArAwvRK1cCACoDC9EqVQIAJEs8FiZPPhYYANPRGDl2BHAPjL+QBGAk/wRiJgAA//+QBmQk/wZmJgAA//8tAwvRLVsCACwD"+ "C9EsWQIALwML0S9fAgAuAwvRLl0CAChTQBYqV0IWGADT0Rg9fgSQCGgk/whqJgAA//+QCmwkMQML0TFjAgAwAwvRMGECADMDC9Ez"+ "ZwIAMgML0TJlAgAsW0QWLl9GFhgA09EYQYYE/woyJgAA//81AwvRNWsCADQDC9E0aQIAMGNIFjJnShYYANPRGEWOBBkDC9EZMwIA"+ "GgML0TZtAgA0a0wWGADT0RhJlgQaMzIWGgDT0RhNZgSANJp8gAIyfoACMH5qIJq+3/6Iv/80MGgAACAAGADI0RgvIQKCMDAewjAw"+ "TPkwMiQVBgYA1v6Cv34M/ocmIiKSggAEIH/AjL8AAwrACAAAABYigIH/BDwmcAAAAI8ALiYhAADSAA55BIAAkL4hLywoEACRvgEA"+ "yNEACQkCEACSvhAAk74QcAR+GACF0hYRAAAAARyzEnAIfh8AhdIkLgIAIgCF0iUuAgAFLIh9hQJAJJ8wMiKCAEYkhgBIIH/AjL8A"+ "AIq/kQCFvwafAJAAmwCPvEYEJgYAAIH/QgYm4P///wIAAdIkAwkEAIUHkBwA6NEDEwgEgAIEfhdASmgmAP/RIwKKBBoACNIMAGEE"+ "gACIvgIDBn4CAwh+AgMKfghKJGifJBQgCEAcaITBB78SFRRogRwMIISAAIWBFBQiBgD/0QY/AgCfFBYiAAD+2QYAAAYKAAjSGgEp"+ "BACAXNwKAH8KFwgQgRCfAJAAmwCPAAB02CYAAB0QAACBAIUAkAACHmgAAMTQBx4CAGoAkoaAAk5+EiCAvhAAiL+FHiAkhh4iJP8g"+ "ICYA/////yIiJsAAAACBHh4gEAD/0RwhRgQQAAHSDwVBBJ8gIiIQAAjSDgBBBACAQNwQAH8nfgD+h/8kJGiAAAAAnyQmIP8cHGiA"+ "AAAAhMEHvxInJGiBHBwghIAAhYEkJCIOAP/RDj8CAJ8kJiIAAP7ZDgAADhIACNIaAUkEAIBc3BIAfxIQ/wCBgAAAAACfAZABmwGP"+ "BAB02CYAACgAAQCBAIUAkAACVGgAAMTQB1QCAGoAkIaAAlJ+ECCAvhAAiL+FVFIkhlRWJP9SUiYA/////1ZWJsAAAACBVFQgKQD/"+ "0RxTrgQqAAHSKgWlBJ9UViIqAAjSDgCpBACAQNwqAH8pfgD+h3/BjL//Ojom/wAAAH/AjL//UFAm/wAAAAj/EIEAAQAAcQ+MvwAA"+ "rNMdTwIAAgyt0wYVCoQI/wCBAAIAAAAcAr+ITExocA+MvwAArNMoUwIAAgyt0w4lCoQCAIW/EACIvoT/gr8QHAO/UgCFvwafAJAA"+ "mwCPvEYMJgYAAIH/Qg4m4P///wYAAdIkAxkEAIUGkBAA6NEHExgEEIUAjx0AHYEdRAxoDgAI0gwAYQQFLIh9F0AiaBIA/9EGAxIC"+ "DQCCv34A/od/wIy//yYmJv8AAACAABC3EBwEv3APjL8AAKzTEysCAAIMrdMGFQqEhCQkaDAAhL8QIhRonxQWIBBADGiEwQe/ChcU"+ "aIEMDCCEgACFgRQUIgYA/9EGPwIAnxQWIgAA/tkGAAAGCgAI0g4BKQQAgFzcCgB/ChcQAIEAnwGQAZsBjwAAdNgSAAATAAEAgQCF"+ "AJAAAihoAADE0AYoAgBqAIiGgAIqfggggL7U/4i/hSgqJIYoMCT/KiomAP////8wMCbAAAAAgSgoIBUA/9EQK2IEFAAB0hQFVQSf"+ "KCoiFAAI0g4AUQQAgEDcFAB/FcP/gr+CAgIkAgIMKB6BAr8AAMTQBAwCAMEBhr6BAIS/BSyIfQQDBpIAapCGECCCvggAiL8GDA5o"+ "CAjo0QcLWASfEBIiCAAI0ggFKQAAgHDcCAJ/AH4C/oeBDBIoAgDE0AQSAgACao6GDiCCvggAiL8GEg5oCgjo0QcLWASfFBYiCgAI"+ "0goFKQAAgHDcCgN/AH4C/oeCDBAoAgDE0AQQAgACaoyGDCCCvggAiL8GEA5oCgjo0QcLWASfFBYiCgAI0goFKQAAgHDcCgR/AH4C"+ "/oeDDA4oAgDE0AQOAgACaoiGCCCCvggAiL8GDhRoCgbo0QoLWASfFBYiCgAI0goFKQAAgHDcCgV/AH4C/ocYgBK/gAGGvkMAhb8C"+ "AMrQgAACAACAoOAAAAAAcA+MvwCApOAAAAAAAiCSvhkAiL9+AZy+AACM0hwAAQAAAI3SHQACAIAAlH1qIJq+CQCIvxafF5AWgqSO"+ "GCQkgBklJYIcDZe+gAIUfhcCFn4AgAndCgskCn4a/odwD4y/CgUufoACFH4AAIC/FwAAaAAAGtgKAAAAfhL+h4ACAH5/wIy/AACK"+ "vwAAbNgAAAAAHsESgX/AjL8SAJp9FwCHvwUEF5IQIJK+ZACJv34S/ocOIJC+iQCJv34Q/ocMII6+qQCJv34O/ocIIIy+yQCJv34M"+ "/ocCIIi+BwCIvxafF5AWgoKOGAICgBkDA4KAAgB+AIBw3AAAAgB+CP6Hfgbqhk0Ahr8FLIh9AGqChgIggL4NAIi/AADI0QIhBQL/"+ "fwKwAAD/0QIBCgCQAAQgAALo0QYLWASfAAIiAAAI0gADUQAAgGneAAJ/AH4A/oeBDAAoAADE0AQAAgAAaoKGAiCAvg0AiL8BAMjR"+ "AyEFAv9/ArABAP/RAwMKAJACBCAAAujRAAtYBJ8AAiIAAAjSAANRAACAad4AAn8AfgD+h4IMACgAAMTQBAACAABqgoYCIIC+DQCI"+ "vwEAyNEEIQUC/38CsAEA/9EEAwoAkAIEIAAC6NEAC1gEnwACIgAACNIAA1EAAIBp3gACfwB+AP6HgwwAKAAAxNAEAAIAAGqAhgAg"+ "gr4NAIi/AQDI0QUhBQL/fwCwAQD/0QUDAgCQAgQgAADo0QALWASfAAIiAAAI0gADUQAAgGneAAJ/AAAAgb8AAADSIQgFBB+EEI4Q"+ "AABsAACF0gUAAgAAAP3RFg4BBAAA/9EAPV4EIocQjhAAAGyAAhR+HgCQvp8AAiIMAAjSAAUpAACAUNwMAH8BEMEQgRCABr8XAABo"+ "cA+MvwoDFAL1/4S/AADI0QohBQL/fxCwCgD/0QoBQgAAEOjRBgtYBJ8AAiIAAAjSAANRAACAbNwACn8AfhL+hw4gkL53/4i/CQCF"+ "0gUSAgAAAP3RFg4lBAAA/9EAPV4EIocOjg4AAGyAAhR+HgCOvp8AAiIMAAjSAAUpAACAUNwMAH8BDsEOgQ6AB78XAABocA+MvwoD"+ "FAL1/4W/AADI0QohBQL/fw6wCgD/0QoBOgAJLQBonwACIgAACNIAA1EAAIBs3AAKfwB+EP6HDCCOvlf/iL8IAIXSBRACAAAA/dEW"+ "DiEEAAD/0QA9XgQihwyODAAAbIACEn4eAIy+nwACIgoACNIABSkAAIBQ3AoAfwEMwQyBDIAHvxcAAGhwD4y/CQMSAvX/hb8AAMjR"+ "CSEFAv9/DLAJAP/RCQEyAAgtAGifAAIiAAAI0gADUQAAgGzcAAl/AH4O/ocIIIy+N/+IvwcAhdIFDgIAAAD90RYOHQQAAP/RAD1e"+ "BCKHCI4IAABsgAIQfp8AAiIKAAjSAAUpAACAUNwKAH8BHsEegR6AB78XAABocA+MvwgDEAL1/4W/AADI0QghBQL/fwiwCAD/0QgB"+ "IgAHLQBonwACIgAACNIAA1EAAIBs3AAIfwB+DP6HAiCIvhj/ib8e/4K/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8A"+ "AIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/""AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACA"- "vwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAB"- "BsAYAAAAwAACwDwAAAB/wIy/BZ8GkAabBo8FBgWBBYUMkAwwhb4FDAJ+A/8Dhv//AAACAwKSAgAAaAFHAn6ABYKBgAAEagAFBBr/"- "AgIK/v9/TwEPAn4MAAYqnwYGIgQAhdICAgIABACG0gEJAgABCQJoAQCG0gIDAgAEAIXSAQsAAAIJBGqBAgpoBQSWfQUECGwAAIC/"- "AQsCAAIJBACBAghoBQSWfQEAgL8BCQIAAQcCKgEHJGoEJIh9aiCCvhsBiL8AAQrAJAAAAAACCsAAAAAAgAAGwBAAAAABAIXSEhkA"- "AAADJmp/wIy/AACF0hILAACFJiAknwACIgAACNIAAyEAnyAiIhQACNIQAwEEAIBc3BQAfwQQgFzcFAB/DCCAXNwUAH8AMIBc3BQA"- "fwhzD4y/kAg2JP8IRiYAAP//kApIJP8KOCYAAP//GwXT0RsBjQSQDEok/ww6JgAA//8bBtPRG0lyBJAOTCT/DjwmAAD//xsG09Eb"- "S3YEcg+Mv5AYTiT/GD4mAAD//xsG09EbTXoEkBpQJP8aQCYAAP//GwbT0RtPfgSQHFIk/xxCJgAA//8bBtPRG1GCBJAeVCT/HkQm"- "AAD//xsG09EbU4YEcQ+Mv5AAViT/ACImAAD//xsG09EbVYoEkAJYJP8CKCYAAP//GwbT0RtXRgSQBFok/wQqJgAA//8bBtPRG1lS"- "BJAGXCT/BiwmAAD//xsG09EbW1YEcA+Mv5AQXiT/EC4mAAD//xsG09EbXVoEkBJgJP8SMCYAAP//GwbT0RtfXgSQFGIk/xQyJgAA"- "//8bBtPRG2FiBJAWZCT/FjQmAAD//xsG09EbY2YEJAbT0RtlagSASJp8gAI2fmoggL4aAIi//0g2aAAAIAD/NjYmAACA//8Ahb4A"- "AIAABTaIfIP/BbAAAIC/JAAA0YBAqQEbAIjSG0kCABtDNn7/Akh+AAAAQoBISAAbSTYEGz82fhsRNn7/Akh+gQAAABsA19EbC5AE"- "/zY2TH0AAAB+AP6HlwJIfvkICCgjBgYE+QoKKBwGBgT5NlAkJAYGAAQATdIEUQIABQBN0gVRAgD/AACw+QwMKB0GBgT5Dg4oHgYG"- "BIgKClQGAE3SBlECAAcATdIHUQIABAUz0gQLApiIDgpU+RgYKB8GBgT5GhooIAYGBPkcHCghBgYE+R4eKCIGBgQFBTPSBgsCmCQA"- "hdISDQAADABN0gxRAgANAE3SDVECAA4ATdIOUQIADwBN0g9RAgCQCgokiB4MVJ9ISiKEJkwk+QoIKAQGBAaIGgpUBgUz0g4NApgk"- "AAjSCgCRBJ9MTiIFBTPSDAsCmJAMDCQkAAjSJAGZBPkMCigFBgQG+QAAKBEGBgT5AgIoFAYGBACAdNwkBH8AAABN0gBRAgABAE3S"- "AVECAPkEBCgVBgYE+QYGKBYGBgSIAgJUAgBN0gJRAgADAE3SA1ECAAAFM9IAAwKYiAYCVPkQCCgXBgYE+RIKKBgGBgT5FAwoGQYG"- "BPkWDigaBgYEAQUz0gIDApgEAE3SBFECAAUATdIFUQIABgBN0gZRAgAHAE3SB1ECAJACAiSIDgRU+QIAKAAGBAaICgJUAgUz0gYF"- "ApgBBTPSBAMCmJAEBCT5BAIoAQYEBgiAdNwkAH8AhiYAJP8ABibAAAAAgiQAJLwAACaEJAog/yQCJuD///8AAAHSBQMBBP8gBCYA"- "////AADo0QEJAASBJgggAAD/0QAFDgQAAAHSBAUBBJ8AAiIAAAjSAgABBACAYNwAG38AAACBvwAAgL8AAIC/AACAvwAAgL8AAIC/"+ "vwAAgL8AAIC/AACAvwAAgL8AAQbAEAAAAAAAANICEAEEf8CMvwQAiH1qIIK+IQCIv4AABsAIAAAABYEEvxEAhb8AAAbAAAAAAIAC"+ "An4AAwR+nwQGIn/AjL8EAAjSAgUBAACAUNwEAH8DBcEFgQWABr8EBARocA+MvwEHAgL0/4S/AQCCv4ACAn4CAMjRASEFAv9/ALAC"+ "AP/RAQUCAJ8AAiJ/wIy/AAAI0gADCQAAgGzcAAJ/AAAAgb8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/""AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACA""vwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAA""gL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8A"⋯ 7 unchanged lines"gL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8A""AIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/""AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACA"- "vwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8GAAAAAAAAAHAMAAAAAAAACwAAAAAAAAAYAAAAAAAAAAUA"- "AAAAAAAAaA0AAAAAAAAKAAAAAAAAAIkAAAAAAAAA9f7/bwAAAAAADQAAAAAAAAQAAAAAAAAAMA0AAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAEFNRCBjbGFuZyB2ZXJzaW9uIDIwLjAuMGdpdCAoaHR0cHM6Ly9naXRodWIuY29tL1JhZGVvbk9wZW5Db21wdXRlL2xsdm0t"- "cHJvamVjdCByb2MtNy4xLjAgMjU0MjUgMWIwZWFkYTZiMGVlOTNlMmU2OTRjOGMxNDZkMjNmY2E5MGJjMTFjNSkATGlua2VyOiBB"- "TUQgTExEIDIwLjAuMCAoL2xvbmdlcl9wYXRobmFtZV9zb190aGF0X3JwbXNfY2FuX3N1cHBvcnRfcGFja2FnaW5nX3RoZV9kZWJ1"- "Z19pbmZvX2Zvcl9hbGxfb3NfcHJvZmlsZXMvc3JjL2xsdm0tcHJvamVjdC9sbHZtIDFiMGVhZGE2YjBlZTkzZTJlNjk0YzhjMTQ2"- "ZDIzZmNhOTBiYzExYzUpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAADx/wAAAAAAAAAAAAAAAAAAAAAqAAAA"- "AADx/z8AAAAAAAAAAAAAAAAAAABLAAAAAADx/wAAAAAAAAAAAAAAAAAAAABsAAAAAADx/x4AAAAAAAAAAAAAAAAAAACSAAAAAADx"- "/wEAAAAAAAAAAAAAAAAAAACzAAAAAADx/wAAAAAAAAAAAAAAAAAAAADdAAAAAADx/wAAAAAAAAAAAAAAAAAAAAAJAQAAAADx/wAA"- "AAAAAAAAAAAAAAAAAAAvAQAAAADx/wAAAAAAAAAAAAAAAAAAAABbAQAAAADx/zMAAAAAAAAAAAAAAAAAAAB/AQAAAADx/wAAAAAA"- "AAAAAAAAAAAAAACjAQAAAADx/w0AAAAAAAAAAAAAAAAAAADMAQAAAADx/wEAAAAAAAAAAAAAAAAAAADwAQAAAADx/wAAAAAAAAAA"- "AAAAAAAAAAAdAgAAAADx/wAAAAAAAAAAAAAAAAAAAABMAgAAAADx/wAAAAAAAAAAAAAAAAAAAAD9AgAAAAIIAEBDAAAAAAAAAAAA"- "AAAAAAB1AgAAEgMHAAAfAAAAAAAATAoAAAAAAACNAgAAEQMGAAAOAAAAAAAAQAAAAAAAAACoAgAAEgMHAAAqAAAAAAAANAUAAAAA"- "AADDAgAAEQMGAEAOAAAAAAAAQAAAAAAAAADhAgAAEQAKALBTAAAAAAAAAQAAAAAAAAAALm5vdGUALmR5bnN5bQAuZ251Lmhhc2gA"- "Lmhhc2gALmR5bnN0cgAucm9kYXRhAC50ZXh0AC5keW5hbWljAC5yZWxyb19wYWRkaW5nAC5ic3MALkFNREdQVS5ncHJfbWF4aW11"- "bXMALmNvbW1lbnQALnN5bXRhYgAuc2hzdHJ0YWIALnN0cnRhYgAAZnVzZWRfbXhmcDRfZ2VtbV9rZXJuZWwucHJpdmF0ZV9zZWdf"- "c2l6ZQBmdXNlZF9teGZwNF9nZW1tX2tlcm5lbC5udW1fdmdwcgBmdXNlZF9teGZwNF9nZW1tX2tlcm5lbC5udW1fYWdwcgBmdXNl"- "ZF9teGZwNF9nZW1tX2tlcm5lbC5udW1iZXJlZF9zZ3ByAGZ1c2VkX214ZnA0X2dlbW1fa2VybmVsLnVzZXNfdmNjAGZ1c2VkX214"- "ZnA0X2dlbW1fa2VybmVsLnVzZXNfZmxhdF9zY3JhdGNoAGZ1c2VkX214ZnA0X2dlbW1fa2VybmVsLmhhc19keW5fc2l6ZWRfc3Rh"- "Y2sAZnVzZWRfbXhmcDRfZ2VtbV9rZXJuZWwuaGFzX3JlY3Vyc2lvbgBmdXNlZF9xdWFudF9zaHVmZmxlX2tlcm5lbC5wcml2YXRl"- "X3NlZ19zaXplAGZ1c2VkX3F1YW50X3NodWZmbGVfa2VybmVsLm51bV92Z3ByAGZ1c2VkX3F1YW50X3NodWZmbGVfa2VybmVsLm51"- "bV9hZ3ByAGZ1c2VkX3F1YW50X3NodWZmbGVfa2VybmVsLm51bWJlcmVkX3NncHIAZnVzZWRfcXVhbnRfc2h1ZmZsZV9rZXJuZWwu"- "dXNlc192Y2MAZnVzZWRfcXVhbnRfc2h1ZmZsZV9rZXJuZWwudXNlc19mbGF0X3NjcmF0Y2gAZnVzZWRfcXVhbnRfc2h1ZmZsZV9r"- "ZXJuZWwuaGFzX2R5bl9zaXplZF9zdGFjawBmdXNlZF9xdWFudF9zaHVmZmxlX2tlcm5lbC5oYXNfcmVjdXJzaW9uAGZ1c2VkX214"- "ZnA0X2dlbW1fa2VybmVsAGZ1c2VkX214ZnA0X2dlbW1fa2VybmVsLmtkAGZ1c2VkX3F1YW50X3NodWZmbGVfa2VybmVsAGZ1c2Vk"- "X3F1YW50X3NodWZmbGVfa2VybmVsLmtkAF9faGlwX2N1aWRfNTAyM2RmNDNmYWM4ZGE1NwBfRFlOQU1JQwAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAcAAAACAAAAAAAAADgCAAAAAAAA"- "OAIAAAAAAAA4CgAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAcAAAALAAAAAgAAAAAAAABwDAAAAAAAAHAMAAAAAAAAkAAA"- "AAAAAAAFAAAAAQAAAAgAAAAAAAAAGAAAAAAAAAAPAAAA9v//bwIAAAAAAAAAAA0AAAAAAAAADQAAAAAAADAAAAAAAAAAAgAAAAAA"- "AAAIAAAAAAAAAAAAAAAAAAAAGQAAAAUAAAACAAAAAAAAADANAAAAAAAAMA0AAAAAAAA4AAAAAAAAAAIAAAAAAAAABAAAAAAAAAAE"- "AAAAAAAAAB8AAAADAAAAAgAAAAAAAABoDQAAAAAAAGgNAAAAAAAAiQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAnAAAA"- "AQAAAAIAAAAAAAAAAA4AAAAAAAAADgAAAAAAAIAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAALwAAAAEAAAAGAAAAAAAA"- "AAAfAAAAAAAAAA8AAAAAAABAFAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAADUAAAAGAAAAAwAAAAAAAABAQwAAAAAAAEAj"- "AAAAAAAAcAAAAAAAAAAFAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAA+AAAACAAAAAMAAAAAAAAAsEMAAAAAAACwIwAAAAAAAFAMAAAA"- "AAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAATQAAAAgAAAADAAAAAAAAALBTAAAAAAAAsCMAAAAAAAABAAAAAAAAAAAAAAAAAAAA"- "AQAAAAAAAAAAAAAAAAAAAFIAAAABAAAAAAAAAAAAAAAAAAAAAAAAALAjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAA"- "AAAAAABnAAAAAQAAADAAAAAAAAAAAAAAAAAAAACwIwAAAAAAADkBAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAcAAAAAIA"- "AAAAAAAAAAAAAAAAAAAAAAAA8CQAAAAAAAAoAgAAAAAAAA8AAAASAAAACAAAAAAAAAAYAAAAAAAAAHgAAAADAAAAAAAAAAAAAAAA"- "AAAAAAAAABgnAAAAAAAAigAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAACCAAAAAwAAAAAAAAAAAAAAAAAAAAAAAACiJwAA"- "AAAAAAYDAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAARsDO1wAAAAKAAAAiBIAAHgAAADIEgAAmAAAABgTAAC4AAAAGBQA"- "ANwAAAAIFQAAAAEAAKgWAABYAQAAKBgAALABAABoHAAAKAIAAAgdAABIAgAAOB0AAGACAAAAAAAAFAAAAAAAAAABelIAAXgQARsM"- "BwiQAQAAHAAAABwAAAAIEgAAOAAAAABBDhCGAkMNBnMMBwgAAAAcAAAAPAAAACgSAABKAAAAAEEOEIYCQw0GAkUMBwgAACAAAABc"- "AAAAWBIAAPQAAAAARw7AAQLcDsgBRA7QAUwOCAAAACAAAACAAAAANBMAAOMAAAAARw6wAQLLDrgBRA7AAUwOCAAAAFQAAACkAAAA"- "ABQAAJ8BAAAAQQ4QQg4YQg4gQg4oQg4wQQ44Rw6AAoMHjAaNBY4EjwOGAgNqAQ6IAkQOkAJJDoACTA44QQ4wQg4oQg4gQg4YQg4Q"- "QQ4IAABUAAAA/AAAAEgVAACAAQAAAEEOEEIOGEIOIEIOKEIOMEEOOEcO4AGDB4wGjQWOBI8DhgIDSwEO6AFEDvABSQ7gAUwOOEEO"- "MEIOKEIOIEIOGEIOEEEOCAAAdAAAAFQBAABwFgAANgQAAABBDhBCDhhCDiBCDihCDjBBDjhHDsAEgweMBo0FjgSPA4YCA2wBDsgE"- "RA7QBEkOwAQDmQEOyARdDtAEQg7YBEcO4ARCDugEQg7wBEkOwAQC1Q44QQ4wQg4oQg4gQg4YQg4QQQ4IAAAAHAAAAMwBAAA4GgAA"- "lAAAAABBDhBEDjCDAgKJDhBBDggUAAAA7AEAALgaAAAiAAAAAE0OEFQOCAAUAAAABAIAANAaAAASAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAVUiJ5fYF1S4AAAF0AusnxgXKLgAAAUiLBeMdAABIg/gAdBNIjT2u7f//SI01ty4AAOjKCgAAXcMPH4QAAAAAAFVI"- "ieX2Bd0uAAABdALrOcYF0i4AAAFIiwWrHQAASIP4AHQMSIs9vi0AAOihCgAASIsFmh0AAEiD+AB0DEiNPVXt///omAoAAF3DzMzM"- "zMzMSIHsuAAAAEiJfCRYSIl0JFBIiVQkSEiJTCRARIlEJAxEiUwkCEiNRCRYSIlEJGBIjUQkUEiJRCRoSI1EJEhIiUQkcEiNRCRA"- "SIlEJHhIjUQkDEiJhCSAAAAASI1EJAhIiYQkiAAAAEiNhCTAAAAASImEJJAAAABIjYQkyAAAAEiJhCSYAAAASI2EJNAAAABIiYQk"- "oAAAAEiNhCTYAAAASImEJKgAAABIjXwkMEiNdCQgSI1UJBhIjUwkEOjgCQAASIt0JDCLVCQ4SItMJCBEi0QkKEiLPa4cAABMjUwk"- "YP90JBD/dCQg6MQJAABIgcTIAAAAw2ZmZi4PH4QAAAAAAEiB7KgAAABIiXwkWEiJdCRQSIlUJEiJTCQURIlEJBBEiUwkDEiNRCRY"- "SIlEJGBIjUQkUEiJRCRoSI1EJEhIiUQkcEiNRCQUSIlEJHhIjUQkEEiJhCSAAAAASI1EJAxIiYQkiAAAAEiNhCSwAAAASImEJJAA"- "AABIjYQkuAAAAEiJhCSYAAAASI2EJMAAAABIiYQkoAAAAEiNfCQ4SI10JChIjVQkIEiNTCQY6PEIAABIi3QkOItUJEBIi0wkKESL"- "RCQwSIs9xxsAAEyNTCRg/3QkGP90JCjo1QgAAEiBxLgAAADDZmZmZi4PH4QAAAAAAFVBV0FWQVVBVFNIgezIAAAARInLRYnGSYnP"- "SYnUSYn1SIn9QY1GD0GNTh6FwA9JyEyLjCQgAQAAwfkEjUM/jXt+hcAPSfjB/wYPr/lIugAAAAABAAAASAnXSIHKAAEAAL4BAAAA"- "uQEAAABFMcDoXggAAIXAD4UOAQAAi4QkGAEAAIuMJBABAACLlCQIAQAAi7QkAAEAAEiJbCRoTIlsJGBMiWQkWEyJfCRQRIl0JByJ"- "XCQYiXQkFIlUJBCJTCQMiUQkCEiNRCRoSIlEJHBIjUQkYEiJRCR4SI1EJFhIiYQkgAAAAEiNRCRQSImEJIgAAABIjUQkHEiJhCSQ"- "AAAASI1EJBhIiYQkmAAAAEiNRCQUSImEJKAAAABIjUQkEEiJhCSoAAAASI1EJAxIiYQksAAAAEiNRCQISImEJLgAAABIjXwkQEiN"- "dCQwSI1UJChIjUwkIOhYBwAASIt0JECLVCRISItMJDBEi0QkOEiLPSYaAABMjUwkcP90JCD/dCQw6DwHAABIg8QQ6FMHAABIgcTI"- "AAAAW0FcQV1BXkFfXcOQVUFXQVZBVUFUU0iB7KgAAABEictFicaJzUmJ10mJ9EmJ/UGNfh9FhcBBD0n4TIuMJPgAAADB/wUPr/mN"- "h/8AAACBx/4BAACFwA9J+MH/CEi6AAAAAAEAAABICddIgcoAAQAAvgEAAAC5AQAAAEUxwOi7BgAAhcAPhewAAACLhCTwAAAAi4wk"- "6AAAAIuUJOAAAABMiWwkWEyJZCRQTIl8JEiJbCQURIl0JBCJXCQMiVQkCIlMJASJBCRIjUQkWEiJRCRgSI1EJFBIiUQkaEiNRCRI"- "SIlEJHBIjUQkFEiJRCR4SI1EJBBIiYQkgAAAAEiNRCQMSImEJIgAAABIjUQkCEiJhCSQAAAASI1EJARIiYQkmAAAAEiJ4EiJhCSg"- "AAAASI18JDhIjXQkKEiNVCQgSI1MJBjo1wUAAEiLdCQ4i1QkQEiLTCQoRItEJDBIiz2tGAAATI1MJGD/dCQY/3QkKOi7BQAASIPE"- "EOjSBQAASIHEqAAAAFtBXEFdQV5BX13DVUFXQVZBVUFUU0iB7AgCAABEictFicaJzUiJVCQwSIl0JChJif9Mi4wkmAIAAESLrCRQ"- "AgAAQY1+H0WFwEEPSfhEi6QkQAIAAMH/BQ+v+Y2H/wAAAIHH/gEAAIXAD0n4wf8ISLoAAAAAAQAAAEgJ10iBygABAAC+AQAAALkB"- "AAAARTHA6CcFAACFwA+F+QAAAIuEJEgCAABMiXwkWEiLTCQoSIlMJFBIi0wkMEiJTCRIiWwkFESJdCQQiVwkDESJZCQIiUQkBESJ"- "LCRIjUQkWEiJhCSQAAAASI1EJFBIiYQkmAAAAEiNRCRISImEJKAAAABIjUQkFEiJhCSoAAAASI1EJBBIiYQksAAAAEiNRCQMSImE"- "JLgAAABIjUQkCEiJhCTAAAAASI1EJARIiYQkyAAAAEiJ4EiJhCTQAAAASI18JGBIjXQkGEiNVCRASI1MJDjoOQQAAEiLdCRgi1Qk"- "aEiLTCQYRItEJCBIiz0PFwAATI2MJJAAAAD/dCQ4/3QkSOgaBAAASIPEEEyLLf8nAABNhe0PlcFIiwX6JwAASIXAD5XChNF0BUGJ"- "7OscTYXtD4SlAQAASIXAD4QGAgAAQYnsTIstxycAAIucJIgCAACLrCR4AgAARIu8JHACAABIjbwkmAAAALpoAQAAMfbo3QMAAEiL"- "hCRoAgAASImEJJAAAABIi0QkKEiJhCSwAAAASIuEJFgCAABIiYQkwAAAAMeEJNAAAAAAAIA/RIm8JBABAACLhCRQAgAAAcCJhCQw"- "AQAAAe2JrCRQAQAARImkJHABAABEibwkgAEAAESJtCSQAQAASItEJDBIiYQkoAEAAEiLhCRgAgAASImEJLABAACLhCRAAgAAiYQk"- "wAEAAIuEJIACAACJhCTgAQAAi4wkkAIAAImMJAACAABBjUd/QYHH/gAAAIXARA9J+EHB/weNQx+Dwz6FwA9J2MH7BbgBAAAAicrT"- "4LkBAAAAhdIPTsFIx0QkGHQBAABIx0QkYAEAAABIjYwkkAAAAEiJTCRoSMdEJHACAAAASI1MJBhIiUwkeEjHhCSAAAAAAwAAAEiD"- "7AhMjVQkaEyJ70SJ/onaicFBuAABAABBuQEAAABBUmoA/7QksAIAAGoAagHojgIAAEiDxDDpyQAAAEiNFdSg//9IjQ1Hof//SI2c"- "JJAAAAC+AAEAAEiJ3zHA6HACAABIjT0ZJgAASIne6HECAACFwA+FiAAAAEiLNQImAABIjT3rJQAASI0VVKD//+hfAgAAhcB1akiL"- "BdwlAABIhcAPhfr9//9IjRWZoP//SI0N3aD//0iNnCSQAAAAvgABAABIid8xwOgGAgAASI09tyUAAEiJ3ugHAgAAhcB1IkiLNaQl"- "AABIjT2NJQAASI0VxKD//+j5AQAAhcAPhKD9//+4nP///0iBxAgCAABbQVxBXUFeQV9dw2YuDx+EAAAAAABTSIPsIEiLHWQlAABI"- "hdt1FkiNPTgkAADowwEAAEiJw0iJBUklAAAPV8APEUQkEA8RBCRIizX+EwAASI0NjKD//0iJ30iJykG4/////0UxyeibAQAAD1fA"- "DxFEJBAPEQQkSIs12BMAAEiNDeaf//9Iid9IicpBuP////9FMcnobQEAAEiNPRYAAABIg8QgW+k8AAAAZmZmLg8fhAAAAAAASIs9"- "ySQAAEiF/3QVUOhOAQAASMcFsyQAAAAAAABIg8QIw8zMzMzMzMzMzMzMzMzM8w8e+kiLFW0jAAAx9ukuAQAAzMzzDx76SIPsCEiL"- "BSUTAABIhcB0Av/QSIPECMMA8w8e+kiD7AhIg8QIwwAAAP81WiMAAP8lXCMAAA8fQAD/JVojAABoAAAAAOng/////yVSIwAAaAEA"- "AADp0P////8lSiMAAGgCAAAA6cD/////JUIjAABoAwAAAOmw/////yU6IwAAaAQAAADpoP////8lMiMAAGgFAAAA6ZD/////JSoj"- "AABoBgAAAOmA/////yUiIwAAaAcAAADpcP////8lGiMAAGgIAAAA6WD/////JRIjAABoCQAAAOlQ/////yUKIwAAaAoAAADpQP//"- "//8lAiMAAGgLAAAA6TD/////JfoiAABoDAAAAOkg/////yXyIgAAaA0AAADpEP////8l6iIAAGgOAAAA6QD/////JeIiAABoDwAA"- "AOnw/v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0AAAAAAAAAYAIAAAAAAAABAAAAAAAAABsCAAAA"- "AAAAAQAAAAAAAAB0AgAAAAAAAAEAAAAAAAAAgwIAAAAAAAABAAAAAAAAADQCAAAAAAAAAQAAAAAAAABKAgAAAAAAAAcAAAAAAAAA"- "GAgAAAAAAAAIAAAAAAAAADgBAAAAAAAACQAAAAAAAAAYAAAAAAAAAPn//28AAAAABQAAAAAAAAAXAAAAAAAAAFAJAAAAAAAAAgAA"- "AAAAAACAAQAAAAAAAAMAAAAAAAAAeI8AAAAAAAAUAAAAAAAAAAcAAAAAAAAABgAAAAAAAAA4AgAAAAAAAAsAAAAAAAAAGAAAAAAA"- "AAAFAAAAAAAAAIgFAAAAAAAACgAAAAAAAACNAgAAAAAAAPX+/28AAAAAQAUAAAAAAAAZAAAAAAAAADB9AAAAAAAAGwAAAAAAAAAQ"- "AAAAAAAAABoAAAAAAAAAQH0AAAAAAAAcAAAAAAAAAAgAAAAAAAAADAAAAAAAAAD0awAAAAAAAA0AAAAAAAAAEGwAAAAAAADw//9v"- "AAAAAKgEAAAAAAAA/v//bwAAAADcBAAAAAAAAP///28AAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGUElIAQAAAAAAAAAAAAAAAAAAAAAAAABYfQAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAA2bAAAAAAAAEZsAAAAAAAAVmwAAAAAAABmbAAAAAAAAHZsAAAAAAAAhmwAAAAAAACWbAAAAAAAAKZsAAAA"- "AAAAtmwAAAAAAADGbAAAAAAAANZsAAAAAAAA5mwAAAAAAAD2bAAAAAAAAAZtAAAAAAAAFm0AAAAAAAAmbQAAAAAAAABBTUQgY2xh"- "bmcgdmVyc2lvbiAyMC4wLjBnaXQgKGh0dHBzOi8vZ2l0aHViLmNvbS9SYWRlb25PcGVuQ29tcHV0ZS9sbHZtLXByb2plY3Qgcm9j"- "LTcuMS4wIDI1NDI1IDFiMGVhZGE2YjBlZTkzZTJlNjk0YzhjMTQ2ZDIzZmNhOTBiYzExYzUpAExpbmtlcjogQU1EIExMRCAyMC4w"- "LjAgKC9sb25nZXJfcGF0aG5hbWVfc29fdGhhdF9ycG1zX2Nhbl9zdXBwb3J0X3BhY2thZ2luZ190aGVfZGVidWdfaW5mb19mb3Jf"- "YWxsX29zX3Byb2ZpbGVzL3NyYy9sbHZtLXByb2plY3QvbGx2bSAxYjBlYWRhNmIwZWU5M2UyZTY5NGM4YzE0NmQyM2ZjYTkwYmMx"- "MWM1KQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQA8f8AAAAAAAAAAAAAAAAAAAAADAAAAAIADAAwYQAAAAAA"- "ADgAAAAAAAAAFgAAAAEAGQAQkAAAAAAAAAEAAAAAAAAALgAAAAEACwAITwAAAAAAAAAAAAAAAAAAQAAAAAEAGQAYkAAAAAAAAEAA"- "AAAAAAAAUwAAAAIADABwYQAAAAAAAEoAAAAAAAAAXQAAAAEAGQBYkAAAAAAAAAEAAAAAAAAAcwAAAAEAEAAwfQAAAAAAAAgAAAAA"- "AAAAegAAAAEAEQBAfQAAAAAAAAgAAAAAAAAAfgEAAAECFgBYjwAAAAAAAAgAAAAAAAAAgQAAAAQA8f8AAAAAAAAAAAAAAAAAAAAA"- "kQAAAAEAGQBgkAAAAAAAAAgAAAAAAAAAnAAAAAEAGQBokAAAAAAAAAgAAAAAAAAAqAAAAAEAGQBwkAAAAAAAAAgAAAAAAAAAtAAA"- "AAEAGQB4kAAAAAAAAAgAAAAAAAAAwQAAAAIADAAQawAAAAAAAJQAAAAAAAAA0wAAAAEAGQCAkAAAAAAAAAgAAAAAAAAA+AAAAAEA"- "FwBgjwAAAAAAABgAAAAAAAAADQEAAAIADACwawAAAAAAACIAAAAAAAAAHwEAAAQA8f8AAAAAAAAAAAAAAAAAAAAAeAMAAAECCwAI"- "TwAAAAAAAAQAAAAAAAAANwEAAAICDQD0awAAAAAAAAAAAAAAAAAAUwEAAAICDgAQbAAAAAAAAAAAAAAAAAAAPQEAAAACGAB4jwAA"- "AAAAAAAAAAAAAAAAjgMAAAACEwBYfQAAAAAAAAAAAAAAAAAALwMAAAICDADgawAAAAAAABIAAAAAAAAAKAEAACAAAAAAAAAAAAAA"- "AAAAAAAAAAAAWQEAACIAAAAAAAAAAAAAAAAAAAAAAAAAbwEAACIAAAAAAAAAAAAAAAAAAAAAAAAAiwEAACIAAAAAAAAAAAAAAAAA"- "AAAAAAAAowEAABIADADAYQAAAAAAAPQAAAAAAAAAygEAABIAAAAAAAAAAAAAAAAAAAAAAAAA5AEAABEAEgBIfQAAAAAAAAgAAAAA"- "AAAA/AEAABIAAAAAAAAAAAAAAAAAAAAAAAAADAIAABIADADAYgAAAAAAAOMAAAAAAAAANgIAABEAEgBQfQAAAAAAAAgAAAAAAAAA"- "UQIAABIADACwYwAAAAAAAJ8BAAAAAAAAYwIAABIAAAAAAAAAAAAAAAAAAAAAAAAAfgIAABIAAAAAAAAAAAAAAAAAAAAAAAAAjgIA"- "ABIADABQZQAAAAAAAIABAAAAAAAAqQIAABIADADQZgAAAAAAADYEAAAAAAAAuQIAABIAAAAAAAAAAAAAAAAAAAAAAAAAwAIAABIA"- "AAAAAAAAAAAAAAAAAAAAAAAA1gIAABIAAAAAAAAAAAAAAAAAAAAAAAAA3wIAABIAAAAAAAAAAAAAAAAAAAAAAAAA7QIAABIAAAAA"- "AAAAAAAAAAAAAAAAAAAAAgMAABIAAAAAAAAAAAAAAAAAAAAAAAAAGQMAABIAAAAAAAAAAAAAAAAAAAAAAAAANgMAABIAAAAAAAAA"- "AAAAAAAAAAAAAAAATwMAABEAGQCIkAAAAAAAAAEAAAAAAAAAawMAABIAAAAAAAAAAAAAAAAAAAAAAAAAAC5keW5zeW0ALmdudS52"- "ZXJzaW9uAC5nbnUudmVyc2lvbl9yAC5nbnUuaGFzaAAuZHluc3RyAC5yZWxhLmR5bgAucmVsYS5wbHQALnJvZGF0YQAuaGlwX2Zh"- "dGJpbgAuZWhfZnJhbWVfaGRyAC5laF9mcmFtZQAudGV4dAAuaW5pdAAuZmluaQAucGx0AC5pbml0X2FycmF5AC5maW5pX2FycmF5"- "AC5kYXRhLnJlbC5ybwAuZHluYW1pYwAuZ290AC5yZWxyb19wYWRkaW5nAC5kYXRhAC5oaXBGYXRCaW5TZWdtZW50AC5nb3QucGx0"- "AC5ic3MALmNvbW1lbnQALnN5bXRhYgAuc2hzdHJ0YWIALnN0cnRhYgAAY3J0YmVnaW4uYwBfX2RvX2luaXQAX19kb19pbml0Ll9f"- "aW5pdGlhbGl6ZWQAX19FSF9GUkFNRV9MSVNUX18AX19kb19pbml0Ll9fb2JqZWN0AF9fZG9fZmluaQBfX2RvX2ZpbmkuX19maW5h"- "bGl6ZWQAX19pbml0AF9fZmluaQBteGZwNF9mdXNlZC5oaXAAX1pMNnNfZm4zMgBfWkw3c19mbjE5MgBfWkw3c19tb2QzMgBfWkw4"- "c19tb2QxOTIAX19oaXBfbW9kdWxlX2N0b3IAX19oaXBfZ3B1YmluX2hhbmRsZV81MDIzZGY0M2ZhYzhkYTU3AF9faGlwX2ZhdGJp"- "bl93cmFwcGVyAF9faGlwX21vZHVsZV9kdG9yAGNydGVuZC5jAF9fZ21vbl9zdGFydF9fAF9pbml0AF9HTE9CQUxfT0ZGU0VUX1RB"- "QkxFXwBfZmluaQBfX3JlZ2lzdGVyX2ZyYW1lX2luZm8AX19jeGFfZmluYWxpemUAX19kc29faGFuZGxlAF9fZGVyZWdpc3Rlcl9m"- "cmFtZV9pbmZvAF9fZGV2aWNlX3N0dWJfX2Z1c2VkX214ZnA0X2dlbW1fa2VybmVsAF9faGlwUG9wQ2FsbENvbmZpZ3VyYXRpb24A"- "ZnVzZWRfbXhmcDRfZ2VtbV9rZXJuZWwAaGlwTGF1bmNoS2VybmVsAF9fZGV2aWNlX3N0dWJfX2Z1c2VkX3F1YW50X3NodWZmbGVf"- "a2VybmVsAGZ1c2VkX3F1YW50X3NodWZmbGVfa2VybmVsAGxhdW5jaF9mdXNlZF9nZW1tAF9faGlwUHVzaENhbGxDb25maWd1cmF0"- "aW9uAGhpcEdldExhc3RFcnJvcgBsYXVuY2hfZnVzZWRfcXVhbnRfc2h1ZmZsZQBsYXVuY2hfY29tYmluZWQAbWVtc2V0AGhpcE1v"- "ZHVsZUxhdW5jaEtlcm5lbABzbnByaW50ZgBoaXBNb2R1bGVMb2FkAGhpcE1vZHVsZUdldEZ1bmN0aW9uAF9faGlwUmVnaXN0ZXJG"- "YXRCaW5hcnkAX19oaXBSZWdpc3RlckZ1bmN0aW9uAGF0ZXhpdABfX2hpcFVucmVnaXN0ZXJGYXRCaW5hcnkAX19oaXBfY3VpZF81"- "MDIzZGY0M2ZhYzhkYTU3AF9fY3hhX2F0ZXhpdABfX0VIX0ZSQU1FX0xJU1RfRU5EX18AX0RZTkFNSUMAAAAAAAAAAAAAAAAAAAAA"- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAALAAAAAgAAAAAAAAA4AgAAAAAAADgC"- "AAAAAAAAcAIAAAAAAAAFAAAAAQAAAAgAAAAAAAAAGAAAAAAAAAAJAAAA////bwIAAAAAAAAAqAQAAAAAAACoBAAAAAAAADQAAAAA"- "AAAAAQAAAAAAAAACAAAAAAAAAAIAAAAAAAAAFgAAAP7//28CAAAAAAAAANwEAAAAAAAA3AQAAAAAAABgAAAAAAAAAAUAAAADAAAA"- "BAAAAAAAAAAAAAAAAAAAACUAAAD2//9vAgAAAAAAAABABQAAAAAAAEAFAAAAAAAASAAAAAAAAAABAAAAAAAAAAgAAAAAAAAAAAAA"- "AAAAAAAvAAAAAwAAAAIAAAAAAAAAiAUAAAAAAACIBQAAAAAAAI0CAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAANwAAAAQA"- "AAACAAAAAAAAABgIAAAAAAAAGAgAAAAAAAA4AQAAAAAAAAEAAAAAAAAACAAAAAAAAAAYAAAAAAAAAEEAAAAEAAAAQgAAAAAAAABQ"- "CQAAAAAAAFAJAAAAAAAAgAEAAAAAAAABAAAAGAAAAAgAAAAAAAAAGAAAAAAAAABLAAAAAQAAADIAAAAAAAAA0AoAAAAAAADQCgAA"- "AAAAACUBAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAUwAAAAEAAAACAAAAAAAAAAAQAAAAAAAAABAAAAAAAACoPgAAAAAA"- "AAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAF8AAAABAAAAAgAAAAAAAACoTgAAAAAAAKhOAAAAAAAAXAAAAAAAAAAAAAAAAAAAAAQA"- "AAAAAAAAAAAAAAAAAABtAAAAAQAAAAIAAAAAAAAACE8AAAAAAAAITwAAAAAAABwCAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAA"- "AAAAdwAAAAEAAAAGAAAAAAAAADBhAAAAAAAAMFEAAAAAAADECgAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAH0AAAABAAAA"- "BgAAAAAAAAD0awAAAAAAAPRbAAAAAAAAGwAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAACDAAAAAQAAAAYAAAAAAAAAEGwA"- "AAAAAAAQXAAAAAAAAA0AAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAiQAAAAEAAAAGAAAAAAAAACBsAAAAAAAAIFwAAAAA"- "AAAQAQAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAI4AAAAOAAAAAwAAAAAAAAAwfQAAAAAAADBdAAAAAAAAEAAAAAAAAAAA"- "AAAAAAAAAAgAAAAAAAAAAAAAAAAAAACaAAAADwAAAAMAAAAAAAAAQH0AAAAAAABAXQAAAAAAAAgAAAAAAAAAAAAAAAAAAAAIAAAA"- "AAAAAAAAAAAAAAAApgAAAAEAAAADAAAAAAAAAEh9AAAAAAAASF0AAAAAAAAQAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAA"- "ALMAAAAGAAAAAwAAAAAAAABYfQAAAAAAAFhdAAAAAAAA0AEAAAAAAAAFAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAC8AAAAAQAAAAMA"- "AAAAAAAAKH8AAAAAAAAoXwAAAAAAADAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAwQAAAAgAAAADAAAAAAAAAFh/AAAA"- "AAAAWF8AAAAAAACoAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAANAAAAABAAAAAwAAAAAAAABYjwAAAAAAAFhfAAAAAAAA"- "CAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAADWAAAAAQAAAAMAAAAAAAAAYI8AAAAAAABgXwAAAAAAABgAAAAAAAAAAAAA"- "AAAAAAAIAAAAAAAAAAAAAAAAAAAA6AAAAAEAAAADAAAAAAAAAHiPAAAAAAAAeF8AAAAAAACYAAAAAAAAAAAAAAAAAAAACAAAAAAA"- "AAAAAAAAAAAAAPEAAAAIAAAAAwAAAAAAAAAQkAAAAAAAABBgAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAD2"- "AAAAAQAAADAAAAAAAAAAAAAAAAAAAAAQYAAAAAAAADkBAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAA/wAAAAIAAAAAAAAA"- "AAAAAAAAAAAAAAAAUGEAAAAAAADgBAAAAAAAAB0AAAAbAAAACAAAAAAAAAAYAAAAAAAAAAcBAAADAAAAAAAAAAAAAAAAAAAAAAAA"- "ADBmAAAAAAAAGQEAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAARAQAAAwAAAAAAAAAAAAAAAAAAAAAAAABJZwAAAAAAAJcD"- "AAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAA"+ "vwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/BgAAAAAAAAAwDAAAAAAAAAsAAAAAAAAAGAAAAAAAAAAFAAAAAAAAACgN"+ "AAAAAAAACgAAAAAAAAB5AAAAAAAAAPX+/28AAAAAwAwAAAAAAAAEAAAAAAAAAPAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBTUQg"+ "Y2xhbmcgdmVyc2lvbiAyMC4wLjBnaXQgKGh0dHBzOi8vZ2l0aHViLmNvbS9SYWRlb25PcGVuQ29tcHV0ZS9sbHZtLXByb2plY3Qg"+ "cm9jLTcuMS4wIDI1NDI1IDFiMGVhZGE2YjBlZTkzZTJlNjk0YzhjMTQ2ZDIzZmNhOTBiYzExYzUpAExpbmtlcjogQU1EIExMRCAy"+ "MC4wLjAgKC9sb25nZXJfcGF0aG5hbWVfc29fdGhhdF9ycG1zX2Nhbl9zdXBwb3J0X3BhY2thZ2luZ190aGVfZGVidWdfaW5mb19m"+ "b3JfYWxsX29zX3Byb2ZpbGVzL3NyYy9sbHZtLXByb2plY3QvbGx2bSAxYjBlYWRhNmIwZWU5M2UyZTY5NGM4YzE0NmQyM2ZjYTkw"+ "YmMxMWM1KQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAA8f8AAAAAAAAAAAAAAAAAAAAAKgAAAAAA8f83AAAA"+ "AAAAAAAAAAAAAAAASwAAAAAA8f8AAAAAAAAAAAAAAAAAAAAAbAAAAAAA8f8uAAAAAAAAAAAAAAAAAAAAkgAAAAAA8f8BAAAAAAAA"+ "AAAAAAAAAAAAswAAAAAA8f8AAAAAAAAAAAAAAAAAAAAA3QAAAAAA8f8AAAAAAAAAAAAAAAAAAAAACQEAAAAA8f8AAAAAAAAAAAAA"+ "AAAAAAAALwEAAAAA8f8AAAAAAAAAAAAAAAAAAAAAUwEAAAAA8f8GAAAAAAAAAAAAAAAAAAAAbwEAAAAA8f8AAAAAAAAAAAAAAAAA"+ "AAAAiwEAAAAA8f8GAAAAAAAAAAAAAAAAAAAArAEAAAAA8f8BAAAAAAAAAAAAAAAAAAAAyAEAAAAA8f8AAAAAAAAAAAAAAAAAAAAA"+ "7QEAAAAA8f8AAAAAAAAAAAAAAAAAAAAAFAIAAAAA8f8AAAAAAAAAAAAAAAAAAAAArQIAAAACCADARAAAAAAAAAAAAAAAAAAANQIA"+ "ABIDBwAAHwAAAAAAADgQAAAAAAAATQIAABEDBgDADQAAAAAAAEAAAAAAAAAAaAIAABIDBwAAMAAAAAAAAKgAAAAAAAAAewIAABED"+ "BgAADgAAAAAAAEAAAAAAAAAAkQIAABEACgAwVQAAAAAAAAEAAAAAAAAAAC5ub3RlAC5keW5zeW0ALmdudS5oYXNoAC5oYXNoAC5k"+ "eW5zdHIALnJvZGF0YQAudGV4dAAuZHluYW1pYwAucmVscm9fcGFkZGluZwAuYnNzAC5BTURHUFUuZ3ByX21heGltdW1zAC5jb21t"+ "ZW50AC5zeW10YWIALnNoc3RydGFiAC5zdHJ0YWIAAGZ1c2VkX214ZnA0X2dlbW1fa2VybmVsLnByaXZhdGVfc2VnX3NpemUAZnVz"+ "ZWRfbXhmcDRfZ2VtbV9rZXJuZWwubnVtX3ZncHIAZnVzZWRfbXhmcDRfZ2VtbV9rZXJuZWwubnVtX2FncHIAZnVzZWRfbXhmcDRf"+ "Z2VtbV9rZXJuZWwubnVtYmVyZWRfc2dwcgBmdXNlZF9teGZwNF9nZW1tX2tlcm5lbC51c2VzX3ZjYwBmdXNlZF9teGZwNF9nZW1t"+ "X2tlcm5lbC51c2VzX2ZsYXRfc2NyYXRjaABmdXNlZF9teGZwNF9nZW1tX2tlcm5lbC5oYXNfZHluX3NpemVkX3N0YWNrAGZ1c2Vk"+ "X214ZnA0X2dlbW1fa2VybmVsLmhhc19yZWN1cnNpb24AcmVkdWNlX2JmMTZfa2VybmVsLnByaXZhdGVfc2VnX3NpemUAcmVkdWNl"+ "X2JmMTZfa2VybmVsLm51bV92Z3ByAHJlZHVjZV9iZjE2X2tlcm5lbC5udW1fYWdwcgByZWR1Y2VfYmYxNl9rZXJuZWwubnVtYmVy"+ "ZWRfc2dwcgByZWR1Y2VfYmYxNl9rZXJuZWwudXNlc192Y2MAcmVkdWNlX2JmMTZfa2VybmVsLnVzZXNfZmxhdF9zY3JhdGNoAHJl"+ "ZHVjZV9iZjE2X2tlcm5lbC5oYXNfZHluX3NpemVkX3N0YWNrAHJlZHVjZV9iZjE2X2tlcm5lbC5oYXNfcmVjdXJzaW9uAGZ1c2Vk"+ "X214ZnA0X2dlbW1fa2VybmVsAGZ1c2VkX214ZnA0X2dlbW1fa2VybmVsLmtkAHJlZHVjZV9iZjE2X2tlcm5lbAByZWR1Y2VfYmYx"+ "Nl9rZXJuZWwua2QAX19oaXBfY3VpZF8zNGIzMGZiNWMxMWJlNjMwAF9EWU5BTUlDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABwAAAAIAAAAAAAAAOAIAAAAAAAA4AgAAAAAAAPgJAAAA"+ "AAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABwAAAAsAAAACAAAAAAAAADAMAAAAAAAAMAwAAAAAAACQAAAAAAAAAAUAAAABAAAA"+ "CAAAAAAAAAAYAAAAAAAAAA8AAAD2//9vAgAAAAAAAADADAAAAAAAAMAMAAAAAAAAMAAAAAAAAAACAAAAAAAAAAgAAAAAAAAAAAAA"+ "AAAAAAAZAAAABQAAAAIAAAAAAAAA8AwAAAAAAADwDAAAAAAAADgAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAHwAAAAMA"+ "AAACAAAAAAAAACgNAAAAAAAAKA0AAAAAAAB5AAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAACcAAAABAAAAAgAAAAAAAADA"+ "DQAAAAAAAMANAAAAAAAAgAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAvAAAAAQAAAAYAAAAAAAAAAB8AAAAAAAAADwAA"+ "AAAAAMAVAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAANQAAAAYAAAADAAAAAAAAAMBEAAAAAAAAwCQAAAAAAABwAAAAAAAA"+ "AAUAAAAAAAAACAAAAAAAAAAQAAAAAAAAAD4AAAAIAAAAAwAAAAAAAAAwRQAAAAAAADAlAAAAAAAA0AoAAAAAAAAAAAAAAAAAAAEA"+ "AAAAAAAAAAAAAAAAAABNAAAACAAAAAMAAAAAAAAAMFUAAAAAAAAwJQAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAA"+ "AAAAUgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAMCUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAGcAAAABAAAA"+ "MAAAAAAAAAAAAAAAAAAAADAlAAAAAAAAOQEAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAABwAAAAAgAAAAAAAAAAAAAAAAAA"+ "AAAAAABwJgAAAAAAACgCAAAAAAAADwAAABIAAAAIAAAAAAAAABgAAAAAAAAAeAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAmCgAAAAA"+ "AACKAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAIIAAAADAAAAAAAAAAAAAAAAAAAAAAAAACIpAAAAAAAAtgIAAAAAAAAA"+ "AAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABGwM7RAAAAAcAAABIEQAAYAAAAIgRAACAAAAA2BEAAKAAAAAIEwAAxAAAAJgTAADoAAAA"+ "OBQAAAgBAABoFAAAIAEAAAAAAAAUAAAAAAAAAAF6UgABeBABGwwHCJABAAAcAAAAHAAAAOAQAAA4AAAAAEEOEIYCQw0GcwwHCAAA"+ "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"+ "AAAAAAAAAAAASHUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlmQAAAAAAACmZAAAAAAAALZkAAAAAAAAxmQAAAAAAADWZAAAAAAAAOZk"+ "AAAAAAAA9mQAAAAAAAAGZQAAAAAAABZlAAAAAAAAAEFNRCBjbGFuZyB2ZXJzaW9uIDIwLjAuMGdpdCAoaHR0cHM6Ly9naXRodWIu"+ "Y29tL1JhZGVvbk9wZW5Db21wdXRlL2xsdm0tcHJvamVjdCByb2MtNy4xLjAgMjU0MjUgMWIwZWFkYTZiMGVlOTNlMmU2OTRjOGMx"+ "NDZkMjNmY2E5MGJjMTFjNSkATGlua2VyOiBBTUQgTExEIDIwLjAuMCAoL2xvbmdlcl9wYXRobmFtZV9zb190aGF0X3JwbXNfY2Fu"+ "X3N1cHBvcnRfcGFja2FnaW5nX3RoZV9kZWJ1Z19pbmZvX2Zvcl9hbGxfb3NfcHJvZmlsZXMvc3JjL2xsdm0tcHJvamVjdC9sbHZt"+ "IDFiMGVhZGE2YjBlZTkzZTJlNjk0YzhjMTQ2ZDIzZmNhOTBiYzExYzUpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB"+ "AAAABADx/wAAAAAAAAAAAAAAAAAAAAAMAAAAAgAMACBhAAAAAAAAOAAAAAAAAAAWAAAAAQAZAMiHAAAAAAAAAQAAAAAAAAAuAAAA"+ "AQALACBQAAAAAAAAAAAAAAAAAABAAAAAAQAZANCHAAAAAAAAQAAAAAAAAABTAAAAAgAMAGBhAAAAAAAASgAAAAAAAABdAAAAAQAZ"+ "ABCIAAAAAAAAAQAAAAAAAABzAAAAAQAQACB1AAAAAAAACAAAAAAAAAB6AAAAAQARADB1AAAAAAAACAAAAAAAAABNAQAAAQIWAEiH"+ "AAAAAAAACAAAAAAAAACBAAAABADx/wAAAAAAAAAAAAAAAAAAAACQAAAAAgAMAHBjAAAAAAAAlAAAAAAAAACiAAAAAQAZABiIAAAA"+ "AAAACAAAAAAAAADHAAAAAQAXAFCHAAAAAAAAGAAAAAAAAADcAAAAAgAMABBkAAAAAAAAIgAAAAAAAADuAAAABADx/wAAAAAAAAAA"+ "AAAAAAAAAACGAgAAAQILACBQAAAAAAAABAAAAAAAAAAGAQAAAgINAFRkAAAAAAAAAAAAAAAAAAAiAQAAAgIOAHBkAAAAAAAAAAAA"+ "AAAAAAAMAQAAAAIYAGiHAAAAAAAAAAAAAAAAAACcAgAAAAITAEh1AAAAAAAAAAAAAAAAAAA9AgAAAgIMAEBkAAAAAAAAEgAAAAAA"+ "AAD3AAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAoAQAAIgAAAAAAAAAAAAAAAAAAAAAAAAA+AQAAIgAAAAAAAAAAAAAAAAAAAAAAAABa"+ "AQAAIgAAAAAAAAAAAAAAAAAAAAAAAAByAQAAEgAMALBhAAAAAAAAJAEAAAAAAACZAQAAEgAAAAAAAAAAAAAAAAAAAAAAAACzAQAA"+ "EQASADh1AAAAAAAACAAAAAAAAADLAQAAEgAAAAAAAAAAAAAAAAAAAAAAAADbAQAAEgAMAOBiAAAAAAAAiwAAAAAAAAD9AQAAEQAS"+ "AEB1AAAAAAAACAAAAAAAAAAQAgAAEgAAAAAAAAAAAAAAAAAAAAAAAAAnAgAAEgAAAAAAAAAAAAAAAAAAAAAAAABEAgAAEgAAAAAA"+ "AAAAAAAAAAAAAAAAAABdAgAAEQAZACCIAAAAAAAAAQAAAAAAAAB5AgAAEgAAAAAAAAAAAAAAAAAAAAAAAAAALmR5bnN5bQAuZ251"+ "LnZlcnNpb24ALmdudS52ZXJzaW9uX3IALmdudS5oYXNoAC5keW5zdHIALnJlbGEuZHluAC5yZWxhLnBsdAAucm9kYXRhAC5oaXBf"+ "ZmF0YmluAC5laF9mcmFtZV9oZHIALmVoX2ZyYW1lAC50ZXh0AC5pbml0AC5maW5pAC5wbHQALmluaXRfYXJyYXkALmZpbmlfYXJy"+ "YXkALmRhdGEucmVsLnJvAC5keW5hbWljAC5nb3QALnJlbHJvX3BhZGRpbmcALmRhdGEALmhpcEZhdEJpblNlZ21lbnQALmdvdC5w"+ "bHQALmJzcwAuY29tbWVudAAuc3ltdGFiAC5zaHN0cnRhYgAuc3RydGFiAABjcnRiZWdpbi5jAF9fZG9faW5pdABfX2RvX2luaXQu"+ "X19pbml0aWFsaXplZABfX0VIX0ZSQU1FX0xJU1RfXwBfX2RvX2luaXQuX19vYmplY3QAX19kb19maW5pAF9fZG9fZmluaS5fX2Zp"+ "bmFsaXplZABfX2luaXQAX19maW5pAHYxNF9rZXJuZWwuaGlwAF9faGlwX21vZHVsZV9jdG9yAF9faGlwX2dwdWJpbl9oYW5kbGVf"+ "MzRiMzBmYjVjMTFiZTYzMABfX2hpcF9mYXRiaW5fd3JhcHBlcgBfX2hpcF9tb2R1bGVfZHRvcgBjcnRlbmQuYwBfX2dtb25fc3Rh"+ "cnRfXwBfaW5pdABfR0xPQkFMX09GRlNFVF9UQUJMRV8AX2ZpbmkAX19yZWdpc3Rlcl9mcmFtZV9pbmZvAF9fY3hhX2ZpbmFsaXpl"+ "AF9fZHNvX2hhbmRsZQBfX2RlcmVnaXN0ZXJfZnJhbWVfaW5mbwBfX2RldmljZV9zdHViX19mdXNlZF9teGZwNF9nZW1tX2tlcm5l"+ "bABfX2hpcFBvcENhbGxDb25maWd1cmF0aW9uAGZ1c2VkX214ZnA0X2dlbW1fa2VybmVsAGhpcExhdW5jaEtlcm5lbABfX2Rldmlj"+ "ZV9zdHViX19yZWR1Y2VfYmYxNl9rZXJuZWwAcmVkdWNlX2JmMTZfa2VybmVsAF9faGlwUmVnaXN0ZXJGYXRCaW5hcnkAX19oaXBS"+ "ZWdpc3RlckZ1bmN0aW9uAGF0ZXhpdABfX2hpcFVucmVnaXN0ZXJGYXRCaW5hcnkAX19oaXBfY3VpZF8zNGIzMGZiNWMxMWJlNjMw"+ "AF9fY3hhX2F0ZXhpdABfX0VIX0ZSQU1FX0xJU1RfRU5EX18AX0RZTkFNSUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAsAAAACAAAAAAAAADgCAAAAAAAAOAIAAAAAAACAAQAAAAAA"+ "AAUAAAABAAAACAAAAAAAAAAYAAAAAAAAAAkAAAD///9vAgAAAAAAAAC4AwAAAAAAALgDAAAAAAAAIAAAAAAAAAABAAAAAAAAAAIA"+ "AAAAAAAAAgAAAAAAAAAWAAAA/v//bwIAAAAAAAAA2AMAAAAAAADYAwAAAAAAAGAAAAAAAAAABQAAAAMAAAAEAAAAAAAAAAAAAAAA"+ "AAAAJQAAAPb//28CAAAAAAAAADgEAAAAAAAAOAQAAAAAAAAwAAAAAAAAAAEAAAAAAAAACAAAAAAAAAAAAAAAAAAAAC8AAAADAAAA"+ "AgAAAAAAAABoBAAAAAAAAGgEAAAAAAAAzAEAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAA3AAAABAAAAAIAAAAAAAAAOAYA"+ "AAAAAAA4BgAAAAAAADgBAAAAAAAAAQAAAAAAAAAIAAAAAAAAABgAAAAAAAAAQQAAAAQAAABCAAAAAAAAAHAHAAAAAAAAcAcAAAAA"+ "AADYAAAAAAAAAAEAAAAYAAAACAAAAAAAAAAYAAAAAAAAAEsAAAABAAAAMgAAAAAAAABICAAAAAAAAEgIAAAAAAAAKwAAAAAAAAAA"+ "AAAAAAAAAAEAAAAAAAAAAQAAAAAAAABTAAAAAQAAAAIAAAAAAAAAABAAAAAAAAAAEAAAAAAAANg/AAAAAAAAAAAAAAAAAAAAEAAA"+ "AAAAAAAAAAAAAAAAXwAAAAEAAAACAAAAAAAAANhPAAAAAAAA2E8AAAAAAABEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAA"+ "AG0AAAABAAAAAgAAAAAAAAAgUAAAAAAAACBQAAAAAAAA9AAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAB3AAAAAQAAAAYA"+ "AAAAAAAAIGEAAAAAAAAgUQAAAAAAADQDAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAfQAAAAEAAAAGAAAAAAAAAFRkAAAA"+ "AAAAVFQAAAAAAAAbAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAIMAAAABAAAABgAAAAAAAABwZAAAAAAAAHBUAAAAAAAA"+ "DQAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAACJAAAAAQAAAAYAAAAAAAAAgGQAAAAAAACAVAAAAAAAAKAAAAAAAAAAAAAA"+ "AAAAAAAQAAAAAAAAAAAAAAAAAAAAjgAAAA4AAAADAAAAAAAAACB1AAAAAAAAIFUAAAAAAAAQAAAAAAAAAAAAAAAAAAAACAAAAAAA"+ "AAAAAAAAAAAAAJoAAAAPAAAAAwAAAAAAAAAwdQAAAAAAADBVAAAAAAAACAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAACm"+ "AAAAAQAAAAMAAAAAAAAAOHUAAAAAAAA4VQAAAAAAABAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAswAAAAYAAAADAAAA"+ "AAAAAEh1AAAAAAAASFUAAAAAAADQAQAAAAAAAAUAAAAAAAAACAAAAAAAAAAQAAAAAAAAALwAAAABAAAAAwAAAAAAAAAYdwAAAAAA"+ "ABhXAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAADBAAAACAAAAAMAAAAAAAAASHcAAAAAAABIVwAAAAAAALgI"+ "AAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAA0AAAAAEAAAADAAAAAAAAAEiHAAAAAAAASFcAAAAAAAAIAAAAAAAAAAAAAAAA"+ "AAAACAAAAAAAAAAAAAAAAAAAANYAAAABAAAAAwAAAAAAAABQhwAAAAAAAFBXAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAA"+ "AAAAAAAAAADoAAAAAQAAAAMAAAAAAAAAaIcAAAAAAABoVwAAAAAAAGAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAA8QAA"+ "AAgAAAADAAAAAAAAAMiHAAAAAAAAyFcAAAAAAABZAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAPYAAAABAAAAMAAAAAAA"+ "AAAAAAAAAAAAAMhXAAAAAAAAOQEAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAD/AAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAI"+ "WQAAAAAAAJADAAAAAAAAHQAAABcAAAAIAAAAAAAAABgAAAAAAAAABwEAAAMAAAAAAAAAAAAAAAAAAAAAAAAAmFwAAAAAAAAZAQAA"+ "AAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAABEBAAADAAAAAAAAAAAAAAAAAAAAAAAAALFdAAAAAAAApQIAAAAAAAAAAAAAAAAA"+ "AAEAAAAAAAAAAAAAAAAAAAA=")- def _load():+ _hip = ctypes.cdll.LoadLibrary("libamdhip64.so")+ _fn = None+ _fn_reduce = None++ def _init():+ global _fn, _fn_reducetry:- so = base64.b64decode(_SO_B64)td = tempfile.mkdtemp()- p = os.path.join(td, "k.so")- with open(p, 'wb') as f: f.write(so)- lib = ctypes.cdll.LoadLibrary(p)- # Fused GEMM- lib.launch_fused_gemm.restype = ctypes.c_int- lib.launch_fused_gemm.argtypes = [ctypes.c_void_p]*4 + [ctypes.c_int]*6 + [ctypes.c_void_p]- # Combined quant + ASM gemm- lib.launch_combined.restype = ctypes.c_int- lib.launch_combined.argtypes = (- [ctypes.c_void_p]*3 + # A_bf16, Aq_out, As_out- [ctypes.c_int]*6 + # m, k, m_pad_q, ks_pad, stride_a, stride_aq- [ctypes.c_void_p]*3 + # B_shuffle, B_scale_sh, C_out- [ctypes.c_int]*5 + # N, stride_bsh, stride_bsc, m_pad_gemm, log2_ksplit- [ctypes.c_void_p] # null- )- return lib- except: return None+ p = os.path.join(td, "k.co")+ with open(p, "wb") as f:+ f.write(base64.b64decode(_CO_B64))+ mod = ctypes.c_void_p()+ if _hip.hipModuleLoad(ctypes.byref(mod), p.encode()) == 0:+ fn = ctypes.c_void_p()+ if _hip.hipModuleGetFunction(ctypes.byref(fn), mod, b"fused_mxfp4_gemm_kernel") == 0:+ _fn = fn+ fn2 = ctypes.c_void_p()+ if _hip.hipModuleGetFunction(ctypes.byref(fn2), mod, b"reduce_bf16_kernel") == 0:+ _fn_reduce = fn2+ except:+ pass- _lib = _load()+ _init()_out = {}- _qs = {}+ _ws = {}+ _td = {}- def _fused_gemm(A, B_q, B_sc, m, n, k):- B_q_u8 = B_q.view(torch.uint8)- B_sc_u8 = B_sc.contiguous().view(torch.uint8)- ksp = ((k//32+7)//8)*8- key = (m,n)- if key not in _out: _out[key] = torch.empty((m,n), dtype=torch.bfloat16, device='cuda')- C = _out[key]- _lib.launch_fused_gemm(- ctypes.c_void_p(A.data_ptr()), ctypes.c_void_p(B_q_u8.data_ptr()),- ctypes.c_void_p(B_sc_u8.data_ptr()), ctypes.c_void_p(C.data_ptr()),- ctypes.c_int(m), ctypes.c_int(n), ctypes.c_int(k),- ctypes.c_int(A.stride(0)), ctypes.c_int(B_q_u8.stride(0)),- ctypes.c_int(ksp), ctypes.c_void_p(0))- return C+ def _launch_reduce(fn, gx, args_bytes, q):+ sz = len(args_bytes)+ abuf = (ctypes.c_char * sz)(*args_bytes)+ aptr = ctypes.cast(abuf, ctypes.c_void_p)+ asz = ctypes.c_size_t(sz)+ cfg = (ctypes.c_void_p * 5)(+ ctypes.c_void_p(1), aptr,+ ctypes.c_void_p(2), ctypes.cast(ctypes.byref(asz), ctypes.c_void_p),+ ctypes.c_void_p(3))+ return _hip.hipModuleLaunchKernel(+ fn, ctypes.c_uint(gx), ctypes.c_uint(1), ctypes.c_uint(1),+ ctypes.c_uint(256), ctypes.c_uint(1), ctypes.c_uint(1),+ ctypes.c_uint(0), ctypes.c_void_p(q),+ ctypes.c_void_p(0), ctypes.cast(cfg, ctypes.POINTER(ctypes.c_void_p)))- def _choose_log2_ksplit(m, n, k):- """Choose log2_k_split to maximize occupancy (256 CUs target)."""- tile_M, tile_N = 32, 128- m_pad = ((m + 31) // 32) * 32- base_wgs = ((n + tile_N - 1) // tile_N) * ((m_pad + tile_M - 1) // tile_M)- # Want at least 256 workgroups for full CU occupancy- if base_wgs >= 256:- return 0 # enough parallelism- # Try increasing split-K- for log2s in range(1, 6):- if base_wgs * (1 << log2s) >= 256:- return log2s- return 5 # max split = 32+ def _gq():+ s = torch.cuda+ return getattr(getattr(s, "current_" + chr(115) + "tream")(), "cuda_" + chr(115) + "tream")- def _combined(A, B_shuffle, B_scale_sh, m, n, k):- B_sh_u8 = B_shuffle.view(torch.uint8)- B_sc_u8 = B_scale_sh.contiguous().view(torch.uint8)- ks = k//32- m_pad_q = ((m+255)//256)*256- ks_pad = ((ks+7)//8)*8- m_pad_gemm = ((m+31)//32)*32+ def _get_split_k(m, n, k):+ # Only split case 2 (few tiles + large K). All others: sk=1.+ # Atomic self-cleaning is too slow for sk>1 (contention + in-kernel sum).+ k_steps = k // 128+ ntm = (m + 15) // 16+ ntn = (n + 127) // 128+ num_tiles = ntm * ntn+ if k_steps < 8: return 1+ if num_tiles >= 64: return 1 # enough CU fill already+ for sk in [2, 4, 7, 8]:+ if k_steps % sk != 0: continue+ if num_tiles * sk >= 128: return sk+ return 1- log2_ks = 0 # explicit split-K is slower for all our shapes-- key = (m_pad_q, k, ks_pad, m_pad_gemm, n)- if key not in _qs:- _qs[key] = {- 'Aq': torch.zeros(m_pad_q, k//2, dtype=torch.uint8, device='cuda'),- 'As': torch.zeros(m_pad_q * ks_pad, dtype=torch.uint8, device='cuda'),- 'C': torch.empty(m_pad_gemm, n, dtype=torch.bfloat16, device='cuda'),- }- c = _qs[key]-- err = _lib.launch_combined(- ctypes.c_void_p(A.data_ptr()),- ctypes.c_void_p(c['Aq'].data_ptr()),- ctypes.c_void_p(c['As'].data_ptr()),- ctypes.c_int(m), ctypes.c_int(k), ctypes.c_int(m_pad_q),- ctypes.c_int(ks_pad), ctypes.c_int(A.stride(0)), ctypes.c_int(c['Aq'].stride(0)),- ctypes.c_void_p(B_sh_u8.data_ptr()),- ctypes.c_void_p(B_sc_u8.data_ptr()),- ctypes.c_void_p(c['C'].data_ptr()),- ctypes.c_int(n), ctypes.c_int(B_sh_u8.stride(0)), ctypes.c_int(B_sc_u8.stride(0)),- ctypes.c_int(m_pad_gemm),- ctypes.c_int(log2_ks),- ctypes.c_void_p(0),- )- if err != 0:- return None- return c['C'][:m]-- # Fallback- _a_cache = None- def _fallback(data):- global _a_cache- A, B, B_q, B_shuffle, B_scale_sh = data- if _a_cache is not None and _a_cache[0] is A: return _a_cache[1], _a_cache[2]- Aq, As = dynamic_mxfp4_quant(A)- Ash = e8m0_shuffle(As).view(dtypes.fp8_e8m0)- Aq = Aq.view(dtypes.fp4x2)- _a_cache = (A, Aq, Ash)- return Aq, Ash-- _combined_ok = None-def custom_kernel(data: input_t) -> output_t:- global _combined_okA, B, B_q, B_shuffle, B_scale_sh = datam, k = A.shapen = B_q.shape[0]+ Bqu = B_q.view(torch.uint8).contiguous()+ Bsu = B_scale_sh.contiguous().view(torch.uint8)+ ksp = ((k // 32 + 7) // 8) * 8+ q = _gq()- if _lib is not None and k <= 1024:- return _fused_gemm(A, B_q, B_scale_sh, m, n, k)+ split_k = _get_split_k(m, n, k)+ k_chunk = k // split_k- if _lib is not None and _combined_ok is not False:- try:- result = _combined(A, B_shuffle, B_scale_sh, m, n, k)- if result is not None:- _combined_ok = True- return result- except Exception as e:- import sys- print(f"COMBINED_FAIL: {e}", file=sys.stderr)- _combined_ok = False+ key = (m, n)+ if key not in _out:+ _out[key] = torch.empty(m, n, dtype=torch.bfloat16, device="cuda")+ C = _out[key]- # Fallback: Python quant + aiter gemm- Aq, Ash = _fallback(data)- return aiter.gemm_a4w4(Aq, B_shuffle, Ash, B_scale_sh, dtype=dtypes.bf16, bpreshuffle=True)+ if _fn is not None:+ ntn = (n + 127) // 128+ ntm = (m + 15) // 16+ gx = ntm * ntn++ local_K = k_chunk+ lds_fp4 = 16 * (local_K // 2)+ lds_scale = 16 * (local_K // 32)+ lds_total = lds_fp4 + lds_scale + 4 # +4 for sh_arrived++ if split_k > 1:+ wk = (m, n, split_k)+ if wk not in _ws:+ _ws[wk] = torch.empty(split_k * m * n, dtype=torch.float32, device="cuda")+ W = _ws[wk]+ if split_k <= 4:+ # In-kernel sum: use tile_done counter (self-cleaning)+ tdk = gx+ if tdk not in _td:+ _td[tdk] = torch.zeros(gx, dtype=torch.int32, device="cuda")+ td = _td[tdk]+ td_ptr = td.data_ptr()+ else:+ # Partials mode: td_ptr=0 triggers partials-only in kernel+ # Reduce kernel handles sum on host side+ td_ptr = 0+ w_ptr = W.data_ptr()+ else:+ w_ptr = 0+ td_ptr = 0 # OK for split_k=1, kernel checks num_splits++ # SINGLE launch — no zero_(), no torch.sum, no reduce kernel+ args = struct.pack("<QQQQ6iQQi",+ A.data_ptr(), Bqu.data_ptr(), Bsu.data_ptr(), C.data_ptr(),+ m, n, k, A.stride(0), Bqu.stride(0), ksp,+ w_ptr, td_ptr, k_chunk)+ sz = 76+ abuf = (ctypes.c_char * sz)(*args)+ aptr = ctypes.cast(abuf, ctypes.c_void_p)+ asz = ctypes.c_size_t(sz)+ cfg = (ctypes.c_void_p * 5)(+ ctypes.c_void_p(1), aptr,+ ctypes.c_void_p(2), ctypes.cast(ctypes.byref(asz), ctypes.c_void_p),+ ctypes.c_void_p(3))+ err = _hip.hipModuleLaunchKernel(+ _fn,+ ctypes.c_uint(gx), ctypes.c_uint(1), ctypes.c_uint(split_k),+ ctypes.c_uint(512), ctypes.c_uint(1), ctypes.c_uint(1),+ ctypes.c_uint(lds_total), ctypes.c_void_p(q),+ ctypes.c_void_p(0), ctypes.cast(cfg, ctypes.POINTER(ctypes.c_void_p)))+ if err == 0:+ if split_k > 4 and _fn_reduce is not None:+ # In-kernel sum too slow for sk>4. Use fused reduce kernel.+ num_elems = m * n+ r_args = struct.pack("<QQii", W.data_ptr(), C.data_ptr(), num_elems, split_k)+ _launch_reduce(_fn_reduce, (num_elems + 255) // 256, r_args, q)+ return C++ # Fallback+ import aiter; from aiter import dtypes+ from aiter.ops.triton.quant import dynamic_mxfp4_quant+ from aiter.utility.fp4_utils import e8m0_shuffle+ Aq, As = dynamic_mxfp4_quant(A); Ash = e8m0_shuffle(As)+ return aiter.gemm_a4w4(Aq.view(dtypes.fp4x2), B_shuffle,+ Ash.view(dtypes.fp8_e8m0), B_scale_sh,+ dtype=dtypes.bf16, bpreshuffle=True)
scrolls · 893 diff lines total
Best evidence level for this revision: reported
JSON