{"id":1322,"date":"2024-09-21T21:16:38","date_gmt":"2024-09-21T13:16:38","guid":{"rendered":"https:\/\/www.madbull.site\/?p=1322"},"modified":"2024-12-07T16:13:44","modified_gmt":"2024-12-07T08:13:44","slug":"%e5%ad%97%e7%ac%a6%e4%b8%b2%e5%93%88%e5%b8%8c%e8%ae%a1%e7%ae%97-cityhash","status":"publish","type":"post","link":"https:\/\/www.madbull.site\/?p=1322","title":{"rendered":"cityhash&#8211;\u5bf9\u5b57\u7b26\u4e32\u7684\u54c8\u5e0c\u7b97\u6cd5"},"content":{"rendered":"\n<p>\u5206\u4eab\u4e00\u4e2a\u7ed9\u5b57\u7b26\u4e32\u8ba1\u7b97hash\u7684\u5f00\u6e90\u5e93\uff0c\u8c37\u6b4c\u51fa\u54c1\u3002<\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>\u6e90\u4ee3\u7801\u5728\uff1a<a href=\"https:\/\/github.com\/google\/cityhash\">https:\/\/github.com\/google\/cityhash<\/a><\/p>\n\n\n\n<p>\u53ef\u4ee5\u81ea\u5df1\u4e0b\u8f7d\uff1agit clone <a href=\"https:\/\/github.com\/google\/cityhash.git\">https:\/\/github.com\/google\/cityhash.git<\/a><\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>\u4f46\u662f<strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-accent-3-color\">\u4ee3\u7801\u662fC++\u7684\uff0c\u7f16\u8bd1\u51fa\u6765\u7684\u52a8\u6001\u5e93\u4e0d\u80fd\u5728C\u8bed\u8a00\u4e2d\u8c03\u7528\uff0c\u9700\u8981\u7a0d\u505a\u4fee\u6539\u540e\uff0c\u624d\u80fd\u7f16\u8bd1\u51fa\u6765C\u8bed\u8a00\u7684\u52a8\u6001\u94fe\u63a5\u5e93<\/mark><\/strong>\u3002<\/p>\n\n\n\n<p>\u53ef\u4ee5\u6309\u7167\u4e0b\u8fb9 1.1\u8282 \u7684\u65b9\u5f0f\u4fee\u6539\uff0c\u4e5f\u53ef\u4ee5\u76f4\u63a5\u4e0b\u8f7d\u4fee\u6539\u5b8c\u7684\u4ee3\u7801\u5305\u3002<\/p>\n\n\n\n<div class=\"wp-block-file\"><a id=\"wp-block-file--media-8382d5ab-9fd5-48dc-882a-ffa24b9e56a0\" href=\"https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/09\/cityhash.tar.gz\">cityhash.tar<\/a><a href=\"https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/09\/cityhash.tar.gz\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-8382d5ab-9fd5-48dc-882a-ffa24b9e56a0\">\u4e0b\u8f7d<\/a><\/div>\n\n\n\n<p>\u7528 <code>tar -zxvf cityhash.tar.gz<\/code> \u7684\u65b9\u5f0f\u89e3\u538b\uff0c\u7136\u540e\u4ece 1.2\u8282 \u5f00\u59cb\u64cd\u4f5c\u5c31\u53ef\u4ee5\u3002<\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-x-large-font-size\"><strong>\u7f16\u8bd1\u5b89\u88c5<\/strong><\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-large-font-size\"><strong>1.1 \u4fee\u6539\uff0c\u4f7f\u652f\u6301C\u8bed\u8a00\u8c03\u7528<\/strong><\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-medium-font-size\">\u53ea\u9700\u8981\u4fee\u6539 src\/city.h \u6587\u4ef6\u5373\u53ef\u3002\u627e\u5230\u9700\u8981\u5728C\u8bed\u8a00\u8c03\u7528\u7684\u51fd\u6570\uff0c\u5728\u5176\u524d\u540e\u589e\u52a0 extern &#8220;C&#8221; { &#8230;. }\u3002\u4fee\u6539\u540e\u7684\u6587\u4ef6\u5982\u4e0b\uff1a<\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>#ifndef CITY_HASH_H_\n#define CITY_HASH_H_\n\n#include &lt;stdlib.h&gt;  \/\/ for size_t.\n#include &lt;stdint.h&gt;\n#include &lt;utility&gt;\n\ntypedef uint8_t uint8;\ntypedef uint32_t uint32;\ntypedef uint64_t uint64;\ntypedef std::pair&lt;uint64, uint64&gt; uint128;\n\ninline uint64 Uint128Low64(const uint128&amp; x) { return x.first; }\ninline uint64 Uint128High64(const uint128&amp; x) { return x.second; }\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\/\/ Hash function for a byte array.\nuint64 CityHash64(const char *buf, size_t len);\n\n\/\/ Hash function for a byte array.  For convenience, a 64-bit seed is also\n\/\/ hashed into the result.\nuint64 CityHash64WithSeed(const char *buf, size_t len, uint64 seed);\n\n\/\/ Hash function for a byte array.  For convenience, two seeds are also\n\/\/ hashed into the result.\nuint64 CityHash64WithSeeds(const char *buf, size_t len,\n                           uint64 seed0, uint64 seed1);\n\n\/\/ Hash function for a byte array.\nuint128 CityHash128(const char *s, size_t len);\n\n\/\/ Hash function for a byte array.  For convenience, a 128-bit seed is also\n\/\/ hashed into the result.\nuint128 CityHash128WithSeed(const char *s, size_t len, uint128 seed);\n\n\/\/ Hash function for a byte array.  Most useful in 32-bit binaries.\nuint32 CityHash32(const char *buf, size_t len);\n\n#ifdef __cplusplus\n}    \/\/ extern \"C\"\n#endif\n\n\/\/ Hash 128 input bits down to 64 bits of output.\n\/\/ This is intended to be a reasonably good hash function.\ninline uint64 Hash128to64(const uint128&amp; x) {\n  \/\/ Murmur-inspired hashing.\n  const uint64 kMul = 0x9ddfea08eb382d69ULL;\n  uint64 a = (Uint128Low64(x) ^ Uint128High64(x)) * kMul;\n  a ^= (a &gt;&gt; 47);\n  uint64 b = (Uint128High64(x) ^ a) * kMul;\n  b ^= (b &gt;&gt; 47);\n  b *= kMul;\n  return b;\n}\n\n#endif  \/\/ CITY_HASH_H_<\/code><\/pre>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-large-font-size\"><strong>1.2 \u7f16\u8bd1\u548c\u5b89\u88c5<\/strong><\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>\u67e5\u770bCPU\u662f\u5426\u652f\u6301 sse4_2 \u6307\u4ee4<\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"958\" height=\"167\" src=\"https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/09\/\u56fe\u7247-63.png\" alt=\"\" class=\"wp-image-1482\" srcset=\"https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/09\/\u56fe\u7247-63.png 958w, https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/09\/\u56fe\u7247-63-300x52.png 300w, https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/09\/\u56fe\u7247-63-768x134.png 768w\" sizes=\"auto, (max-width: 958px) 100vw, 958px\" \/><\/figure>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>\u751f\u6210 Makefile \u6587\u4ef6\uff0c\u547d\u4ee4\uff1a<code>.\/configure --enable-sse4.2<\/code> \u3002<\/p>\n\n\n\n<p>\u5982\u679ccpu\u4e0d\u652f\u6301 sse4_2 \u6307\u4ee4\uff0c\u53ef\u4ee5\u4e0d\u52a0\u53c2\u6570 <code>--enable-sse4.2<\/code> \u3002<\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"521\" height=\"210\" src=\"https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/09\/\u56fe\u7247-36.png\" alt=\"\" class=\"wp-image-1323\" srcset=\"https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/09\/\u56fe\u7247-36.png 521w, https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/09\/\u56fe\u7247-36-300x121.png 300w\" sizes=\"auto, (max-width: 521px) 100vw, 521px\" \/><\/figure>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>\u7f16\u8bd1\uff0c\u547d\u4ee4\uff1a<code>make all check CXXFLAGS=\"-g -O3 -msse4.2\"<\/code> \u3002<\/p>\n\n\n\n<p>\u5982\u679ccpu\u4e0d\u652f\u6301 sse4_2 \u6307\u4ee4\uff0c\u53ef\u4ee5\u4e0d\u52a0\u53c2\u6570 <code>-msse4.2<\/code><\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"776\" height=\"260\" src=\"https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/09\/\u56fe\u7247-37.png\" alt=\"\" class=\"wp-image-1324\" srcset=\"https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/09\/\u56fe\u7247-37.png 776w, https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/09\/\u56fe\u7247-37-300x101.png 300w, https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/09\/\u56fe\u7247-37-768x257.png 768w\" sizes=\"auto, (max-width: 776px) 100vw, 776px\" \/><\/figure>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>\u5b89\u88c5\uff0c\u547d\u4ee4\uff1a<code>make install<\/code> \u52a8\u6001\u5e93\u4f1a\u5b89\u88c5\u5728 \/usr\/local\/lib\/ \u76ee\u5f55\uff0c\u5934\u6587\u4ef6\u5728 \/usr\/local\/include\/ \u76ee\u5f55\u3002<\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"623\" height=\"160\" src=\"https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/09\/\u56fe\u7247-38.png\" alt=\"\" class=\"wp-image-1325\" srcset=\"https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/09\/\u56fe\u7247-38.png 623w, https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/09\/\u56fe\u7247-38-300x77.png 300w\" sizes=\"auto, (max-width: 623px) 100vw, 623px\" \/><\/figure>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-large-font-size\"><strong>1.3 \u589e\u52a0C\u8bed\u8a00\u53ef\u5f15\u5165\u7684\u5934\u6587\u4ef6<\/strong><\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>\u5728 \/usr\/local\/include\/ \u76ee\u5f55\u4e0b\u521b\u5efa cityhash.h \u6587\u4ef6\u3002\u5185\u5bb9\u5982\u4e0b\uff1a<\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>#ifndef __CITY_HASH_C_H_\n#define __CITY_HASH_C_H_\n\n\n#include &lt;stdint.h&gt;\n\ntypedef uint8_t uint8;\ntypedef uint32_t uint32;\ntypedef uint64_t uint64;\ntypedef struct { uint64_t val&#91;2] ; } uint128;\n\n\/\/ Hash function for a byte array.\nuint64 CityHash64(const char *buf, size_t len);\n\n\/\/ Hash function for a byte array.  For convenience, a 64-bit seed is also\n\/\/ hashed into the result.\nuint64 CityHash64WithSeed(const char *buf, size_t len, uint64 seed);\n\n\/\/ Hash function for a byte array.  For convenience, two seeds are also\n\/\/ hashed into the result.\nuint64 CityHash64WithSeeds(const char *buf, size_t len,\n                           uint64 seed0, uint64 seed1);\n\n\/\/ Hash function for a byte array.\nuint128 CityHash128(const char *s, size_t len);\n\n\/\/ Hash function for a byte array.  For convenience, a 128-bit seed is also\n\/\/ hashed into the result.\nuint128 CityHash128WithSeed(const char *s, size_t len, uint128 seed);\n\n\/\/ Hash function for a byte array.  Most useful in 32-bit binaries.\nuint32 CityHash32(const char *buf, size_t len);\n\n\n#endif  \/\/__CITY_HASH_C_H_ \n<\/code><\/pre>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-x-large-font-size\"><strong>\u6d4b\u8bd5<\/strong><\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-large-font-size\"><strong>2.1 \u521b\u5efa\u6d4b\u8bd5\u6587\u4ef6 testch.c<\/strong><\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;stdio.h&gt;\n#include &lt;stdlib.h&gt;\n#include &lt;string.h&gt;\n\n#include \"cityhash.h\"\n\nint test(char * data) ;\n\n\nint main(int argc, char * argv&#91;]){\n\n        char * data = \"aaaaaaaaaaaaaaabbbbbbbbbbbbccccccccccccdddddddddddddeeeeeeeeeeeffffffffffgggggggghhhhhhh\" ;\n\n        test(data) ;\n\n        char * data2 = \"aaaaaaaaaaaaaaabbbbbbbbbbbbccccccccccccdddddddddddddeeeeeeeeeeeffffffffffgggggggghhhhhhh3333\" ;\n\n        test(data2) ;\n\n        return 0 ;\n}\n\n\nint test(char * data) {\n        uint32 key32 = CityHash32(data, strlen(data) ) ;\n        printf(\"key32 &#91;%u]\\n\", key32) ;\n\n        uint64 key64 = CityHash64(data, strlen(data) ) ;\n        printf(\"key64 &#91;%lu]\\n\", key64) ;\n\n        key64 = CityHash64WithSeed(data, strlen(data), 123123123 ) ;\n        printf(\"key64 &#91;%lu]\\n\", key64) ;\n\n        key64 = CityHash64WithSeeds(data, strlen(data), 123123123, 321321321212121) ;\n        printf(\"key64 &#91;%lu]\\n\", key64) ;\n\n        uint128 key128 = CityHash128(data, strlen(data) ) ;\n        printf(\"key128 &#91;%lu] &#91;%lu]\\n\", key128.val&#91;0], key128.val&#91;1]) ;\n\n        uint128 seed ;\n        seed.val&#91;0] = 123123123123 ;\n        seed.val&#91;1] = 33344455556666 ;\n        key128 = CityHash128WithSeed(data, strlen(data),  seed) ;\n        printf(\"key128 &#91;%lu] &#91;%lu]\\n\", key128.val&#91;0], key128.val&#91;1]) ;\n\n        return 0 ;\n}<\/code><\/pre>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-large-font-size\"><strong>2.2 \u7f16\u8bd1\u5e76\u8fd0\u884c\u6d4b\u8bd5\u7a0b\u5e8f<\/strong><\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"570\" height=\"537\" src=\"https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/09\/\u56fe\u7247-39.png\" alt=\"\" class=\"wp-image-1326\" srcset=\"https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/09\/\u56fe\u7247-39.png 570w, https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/09\/\u56fe\u7247-39-300x283.png 300w\" sizes=\"auto, (max-width: 570px) 100vw, 570px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>\u5206\u4eab\u4e00\u4e2a\u7ed9\u5b57\u7b26\u4e32\u8ba1\u7b97hash\u7684\u5f00\u6e90\u5e93\uff0c\u8c37\u6b4c\u51fa\u54c1\u3002<br \/>\n\u6e90\u4ee3\u7801\u5728\uff1ahttps:\/\/github.com\/google\/cityhash<br \/>\n\u53ef\u4ee5\u81ea\u5df1\u4e0b\u8f7d\uff1agit clone https:\/\/github.com\/google\/cityhash.git<br \/>\n\u4f46\u662f\u4ee3\u7801\u662fC++\u7684\uff0c\u7f16\u8bd1\u51fa\u6765\u7684\u52a8\u6001\u5e93\u4e0d\u80fd\u5728C\u8bed\u8a00\u4e2d\u8c03\u7528\uff0c\u9700\u8981\u7a0d\u505a\u4fee\u6539\u540e\uff0c\u624d\u80fd\u7f16\u8bd1\u51fa\u6765C\u8bed\u8a00\u7684\u52a8\u6001\u94fe\u63a5\u5e93\u3002<\/p>\n","protected":false},"author":1,"featured_media":559,"comment_status":"open","ping_status":"open","sticky":false,"template":"single-with-sidebar","format":"standard","meta":{"footnotes":""},"categories":[156,135,154],"tags":[472,473,98,97,105],"class_list":["post-1322","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-c-c","category-linux","category-154","tag-cityhash","tag-extern","tag-hash","tag-97","tag-105"],"_links":{"self":[{"href":"https:\/\/www.madbull.site\/index.php?rest_route=\/wp\/v2\/posts\/1322","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.madbull.site\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.madbull.site\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.madbull.site\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.madbull.site\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1322"}],"version-history":[{"count":11,"href":"https:\/\/www.madbull.site\/index.php?rest_route=\/wp\/v2\/posts\/1322\/revisions"}],"predecessor-version":[{"id":1852,"href":"https:\/\/www.madbull.site\/index.php?rest_route=\/wp\/v2\/posts\/1322\/revisions\/1852"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.madbull.site\/index.php?rest_route=\/wp\/v2\/media\/559"}],"wp:attachment":[{"href":"https:\/\/www.madbull.site\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1322"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.madbull.site\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1322"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.madbull.site\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1322"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}