https://blog.xjtag.com/2023/04/variants-part-1-overview/