{"version":3,"file":"index.mjs","sources":["webpack://@iflyrpa/actions/./src/utils/XhsXsCommonEnc.js","webpack://@iflyrpa/actions/./src/utils/douyin/douyinSafe/a_bogus.js","webpack://@iflyrpa/actions/./src/utils/douyin/douyinSafe/bd_para.js","webpack://@iflyrpa/actions/./src/utils/douyin/douyinSafe/csrfToken.js","webpack://@iflyrpa/actions/./src/utils/douyin/douyinSafe/dtrait.js","webpack://@iflyrpa/actions/./src/utils/douyin/douyinSign.js","webpack://@iflyrpa/actions/./src/utils/ttABEncrypt.js","webpack://@iflyrpa/actions/./src/utils/xhs_ob/x_s.encoder.js","webpack://@iflyrpa/actions/./src/utils/xhs_ob_feed/ob.enc.js","webpack://@iflyrpa/actions/./src/utils/xhs_ob_feed/ob.env.js","webpack://@iflyrpa/actions/./src/utils/xhs_ob_feed/x_s.encoder.js","webpack://@iflyrpa/actions/./src/utils/errorMessages.ts","webpack://@iflyrpa/actions/./src/utils/feishuAlarm.ts","webpack://@iflyrpa/actions/./src/utils/proxy.ts","webpack://@iflyrpa/actions/./src/utils/http.ts","webpack://@iflyrpa/actions/./src/utils/index.ts","webpack://@iflyrpa/actions/./src/actions/baijiahaoLogin/rpa.ts","webpack://@iflyrpa/actions/../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/core.js","webpack://@iflyrpa/actions/../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/util.js","webpack://@iflyrpa/actions/../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/errors.js","webpack://@iflyrpa/actions/../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/parse.js","webpack://@iflyrpa/actions/../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/regexes.js","webpack://@iflyrpa/actions/../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/checks.js","webpack://@iflyrpa/actions/../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/doc.js","webpack://@iflyrpa/actions/../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/versions.js","webpack://@iflyrpa/actions/../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/schemas.js","webpack://@iflyrpa/actions/../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/locales/en.js","webpack://@iflyrpa/actions/../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/registries.js","webpack://@iflyrpa/actions/../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/api.js","webpack://@iflyrpa/actions/../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/classic/iso.js","webpack://@iflyrpa/actions/../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/classic/errors.js","webpack://@iflyrpa/actions/../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/classic/parse.js","webpack://@iflyrpa/actions/../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/classic/schemas.js","webpack://@iflyrpa/actions/../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/classic/compat.js","webpack://@iflyrpa/actions/../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/classic/external.js","webpack://@iflyrpa/actions/./src/types.ts","webpack://@iflyrpa/actions/./src/actions/baijiahaoLogin/rpa-server.ts","webpack://@iflyrpa/actions/./src/actions/baijiahaoLogin/index.ts","webpack://@iflyrpa/actions/./src/utils/reportLogger.ts","webpack://@iflyrpa/actions/./src/actions/baijiahaoPublish/utils.ts","webpack://@iflyrpa/actions/./src/actions/baijiahaoPublish/mock.ts","webpack://@iflyrpa/actions/./src/actions/baijiahaoPublish/rpa.ts","webpack://@iflyrpa/actions/./src/actions/baijiahaoPublish/index.ts","webpack://@iflyrpa/actions/./src/actions/common/FansTool/index.ts","webpack://@iflyrpa/actions/./src/utils/xhsXsEncrypt.ts","webpack://@iflyrpa/actions/./src/actions/common/sessionCheck/index.ts","webpack://@iflyrpa/actions/./src/utils/shipinhao/utils.ts","webpack://@iflyrpa/actions/./src/actions/createShipinhaoComment/index.ts","webpack://@iflyrpa/actions/./src/actions/douyinCheckVerifyQrCode/index.ts","webpack://@iflyrpa/actions/./src/actions/douyinCreateCommentReply/schema.ts","webpack://@iflyrpa/actions/./src/actions/douyinCreateCommentReply/index.ts","webpack://@iflyrpa/actions/./src/actions/douyinGetCollection/schema.ts","webpack://@iflyrpa/actions/./src/actions/douyinGetCollection/index.ts","webpack://@iflyrpa/actions/./src/actions/douyinGetCommentList/schema.ts","webpack://@iflyrpa/actions/./src/actions/douyinGetCommentList/index.ts","webpack://@iflyrpa/actions/./src/actions/douyinGetCommentReplyList/schema.ts","webpack://@iflyrpa/actions/./src/actions/douyinGetCommentReplyList/index.ts","webpack://@iflyrpa/actions/./src/actions/douyinGetHot/schema.ts","webpack://@iflyrpa/actions/./src/actions/douyinGetHot/index.ts","webpack://@iflyrpa/actions/./src/actions/douyinGetLocation/schema.ts","webpack://@iflyrpa/actions/./src/actions/douyinGetLocation/index.ts","webpack://@iflyrpa/actions/./src/actions/douyinGetMusic/schema.ts","webpack://@iflyrpa/actions/./src/actions/douyinGetMusic/index.ts","webpack://@iflyrpa/actions/./src/actions/douyinGetMusicByCategory/schema.ts","webpack://@iflyrpa/actions/./src/actions/douyinGetMusicByCategory/index.ts","webpack://@iflyrpa/actions/./src/actions/douyinGetMusicCategory/index.ts","webpack://@iflyrpa/actions/./src/actions/douyinGetTopics/schema.ts","webpack://@iflyrpa/actions/./src/actions/douyinGetTopics/index.ts","webpack://@iflyrpa/actions/./src/actions/douyinGetVerifyQrCode/index.ts","webpack://@iflyrpa/actions/./src/actions/douyinGetWorkList/schema.ts","webpack://@iflyrpa/actions/./src/actions/douyinGetWorkList/index.ts","webpack://@iflyrpa/actions/./src/actions/douyinLogin/rpa.ts","webpack://@iflyrpa/actions/./src/actions/douyinLogin/rpa-server.ts","webpack://@iflyrpa/actions/./src/actions/douyinLogin/index.ts","webpack://@iflyrpa/actions/./src/utils/douyin/imageUploader.ts","webpack://@iflyrpa/actions/./src/utils/douyin/verify-parser.ts","webpack://@iflyrpa/actions/./src/actions/douyinPublish/mock.ts","webpack://@iflyrpa/actions/./src/actions/douyinPublish/rpa.ts","webpack://@iflyrpa/actions/./src/actions/douyinPublish/rpa-server.ts","webpack://@iflyrpa/actions/./src/actions/douyinPublish/index.ts","webpack://@iflyrpa/actions/./src/actions/getBaijiahaoActivity/index.ts","webpack://@iflyrpa/actions/./src/actions/getBaijiaohaoConfig/index.ts","webpack://@iflyrpa/actions/./src/actions/getShipinhaoBgm/index.ts","webpack://@iflyrpa/actions/./src/actions/getShipinhaoBgmCategory/index.ts","webpack://@iflyrpa/actions/./src/actions/getShipinhaoCollection/index.ts","webpack://@iflyrpa/actions/./src/actions/getShipinhaoCommentList/index.ts","webpack://@iflyrpa/actions/./src/actions/getShipinhaoConfig/index.ts","webpack://@iflyrpa/actions/./src/actions/getShipinhaoPostList/index.ts","webpack://@iflyrpa/actions/./src/actions/getToutiaoCollection/index.ts","webpack://@iflyrpa/actions/./src/actions/getToutiaoConfig/index.ts","webpack://@iflyrpa/actions/./src/actions/getWeixinCollection/index.ts","webpack://@iflyrpa/actions/./src/actions/getWeixinConfig/index.ts","webpack://@iflyrpa/actions/./src/actions/getXhsCollection/index.ts","webpack://@iflyrpa/actions/./src/actions/getXhsGroup/index.ts","webpack://@iflyrpa/actions/./src/actions/getXhsHotTopic/index.ts","webpack://@iflyrpa/actions/./src/actions/getXhsWebUnreadCount/index.ts","webpack://@iflyrpa/actions/./src/actions/searchAccountInfo/getBjhInfo.ts","webpack://@iflyrpa/actions/./src/actions/searchAccountInfo/getDouyinInfo.ts","webpack://@iflyrpa/actions/./src/actions/searchAccountInfo/getShipinhaoInfo.ts","webpack://@iflyrpa/actions/./src/actions/searchAccountInfo/getTTInfo.ts","webpack://@iflyrpa/actions/./src/actions/searchAccountInfo/getWxInfo.ts","webpack://@iflyrpa/actions/./src/actions/searchAccountInfo/getXhsInfo.ts","webpack://@iflyrpa/actions/./src/actions/searchAccountInfo/index.ts","webpack://@iflyrpa/actions/./src/actions/searchBjhTopicList/index.ts","webpack://@iflyrpa/actions/./src/actions/searchBjhUserArticle/index.ts","webpack://@iflyrpa/actions/./src/actions/searchPublishInfo/types.ts","webpack://@iflyrpa/actions/./src/actions/searchPublishInfo/handleBjhData.ts","webpack://@iflyrpa/actions/./src/actions/searchPublishInfo/handleDouyinData.ts","webpack://@iflyrpa/actions/./src/actions/searchPublishInfo/handleShipinhaoData.ts","webpack://@iflyrpa/actions/./src/actions/searchPublishInfo/handleTTData.ts","webpack://@iflyrpa/actions/./src/actions/searchPublishInfo/handleWXData.ts","webpack://@iflyrpa/actions/./src/actions/searchPublishInfo/handleXhsData.ts","webpack://@iflyrpa/actions/./src/actions/searchPublishInfo/index.ts","webpack://@iflyrpa/actions/./src/actions/searchToutiaoLocation/index.ts","webpack://@iflyrpa/actions/./src/actions/searchToutiaoTopicList/index.ts","webpack://@iflyrpa/actions/./src/actions/searchToutiaoUserID/index.ts","webpack://@iflyrpa/actions/./src/actions/searchWeixinAccountCard/index.ts","webpack://@iflyrpa/actions/./src/actions/searchWeixinUserArticle/index.ts","webpack://@iflyrpa/actions/./src/actions/searchXhsWebConnections/index.ts","webpack://@iflyrpa/actions/./src/actions/searchXhsWebLike/index.ts","webpack://@iflyrpa/actions/./src/actions/searchXhsWebMentions/index.ts","webpack://@iflyrpa/actions/./src/actions/searchXiaohongshuLocation/index.ts","webpack://@iflyrpa/actions/./src/actions/searchXiaohongshuTopicList/index.ts","webpack://@iflyrpa/actions/./src/actions/searchXiaohongshuUserArticle/index.ts","webpack://@iflyrpa/actions/./src/actions/shipinhaoCheckLinkValidate/schema.ts","webpack://@iflyrpa/actions/./src/actions/shipinhaoCheckLinkValidate/index.ts","webpack://@iflyrpa/actions/./src/actions/shipinhaoGetLocation/schema.ts","webpack://@iflyrpa/actions/./src/actions/shipinhaoGetLocation/index.ts","webpack://@iflyrpa/actions/./src/actions/shipinhaoGetMsg/schema.ts","webpack://@iflyrpa/actions/./src/actions/shipinhaoGetMsg/index.ts","webpack://@iflyrpa/actions/./src/actions/shipinhaoGetMsgImage/index.ts","webpack://@iflyrpa/actions/./src/actions/shipinhaoLogin/rpa.ts","webpack://@iflyrpa/actions/./src/actions/shipinhaoLogin/rpa-server.ts","webpack://@iflyrpa/actions/./src/actions/shipinhaoLogin/index.ts","webpack://@iflyrpa/actions/./src/actions/shipinhaoPublish/uploader.ts","webpack://@iflyrpa/actions/./src/actions/shipinhaoPublish/mock.ts","webpack://@iflyrpa/actions/./src/actions/shipinhaoPublish/rpa.ts","webpack://@iflyrpa/actions/./src/actions/shipinhaoPublish/rpa-server.ts","webpack://@iflyrpa/actions/./src/actions/shipinhaoPublish/index.ts","webpack://@iflyrpa/actions/./src/utils/shipinhao/auth.ts","webpack://@iflyrpa/actions/./src/actions/shipinhaoPublishVideo/payload.ts","webpack://@iflyrpa/actions/./src/actions/shipinhaoPublishVideo/uploader.ts","webpack://@iflyrpa/actions/./src/actions/shipinhaoPublishVideo/videoMeta.ts","webpack://@iflyrpa/actions/./src/actions/shipinhaoPublishVideo/videoValidator.ts","webpack://@iflyrpa/actions/./src/actions/shipinhaoPublishVideo/mock.ts","webpack://@iflyrpa/actions/./src/actions/shipinhaoPublishVideo/rpa.ts","webpack://@iflyrpa/actions/./src/actions/shipinhaoPublishVideo/index.ts","webpack://@iflyrpa/actions/./src/actions/shipinhaoSendMsg/schema.ts","webpack://@iflyrpa/actions/./src/actions/shipinhaoSendMsg/index.ts","webpack://@iflyrpa/actions/./src/actions/toutiaoLogin/rpa.ts","webpack://@iflyrpa/actions/./src/actions/toutiaoLogin/rpa-server.ts","webpack://@iflyrpa/actions/./src/actions/toutiaoLogin/index.ts","webpack://@iflyrpa/actions/./src/actions/toutiaoPublish/mock.ts","webpack://@iflyrpa/actions/./src/actions/toutiaoPublish/rpa.ts","webpack://@iflyrpa/actions/./src/actions/toutiaoPublish/index.ts","webpack://@iflyrpa/actions/./src/actions/weitoutiaoPublish/mock.ts","webpack://@iflyrpa/actions/./src/actions/weitoutiaoPublish/rpa.ts","webpack://@iflyrpa/actions/./src/actions/weitoutiaoPublish/index.ts","webpack://@iflyrpa/actions/./src/actions/weixinLogin/rpa.ts","webpack://@iflyrpa/actions/./src/actions/weixinLogin/rpa-server.ts","webpack://@iflyrpa/actions/./src/actions/weixinLogin/index.ts","webpack://@iflyrpa/actions/./src/actions/weixinmpPublish/mock.ts","webpack://@iflyrpa/actions/./src/actions/weixinmpPublish/rpa.ts","webpack://@iflyrpa/actions/./src/actions/weixinmpPublish/index.ts","webpack://@iflyrpa/actions/./src/actions/weixinPublish/utils.ts","webpack://@iflyrpa/actions/./src/actions/weixinPublish/mock.ts","webpack://@iflyrpa/actions/./src/actions/weixinPublish/rpa.ts","webpack://@iflyrpa/actions/./src/actions/weixinPublish/index.ts","webpack://@iflyrpa/actions/./src/actions/xiaohongshuLogin/rpa.ts","webpack://@iflyrpa/actions/./src/actions/xiaohongshuLogin/rpa-server.ts","webpack://@iflyrpa/actions/./src/actions/xiaohongshuLogin/index.ts","webpack://@iflyrpa/actions/./src/utils/xhs_ob_feed/mnsvc2.ts","webpack://@iflyrpa/actions/./src/utils/xhs_ob_feed/index.ts","webpack://@iflyrpa/actions/./src/actions/xiaohongshuPublish/mock.ts","webpack://@iflyrpa/actions/./src/actions/xiaohongshuPublish/rpa.ts","webpack://@iflyrpa/actions/./src/actions/xiaohongshuPublish/rpa-server.ts","webpack://@iflyrpa/actions/./src/actions/xiaohongshuPublish/rpa-server-mock.ts","webpack://@iflyrpa/actions/./src/actions/xiaohongshuPublish/index.ts","webpack://@iflyrpa/actions/./src/actions/xiaohongshuWebCommentAction/index.ts","webpack://@iflyrpa/actions/./src/actions/xiaohongshuWebIntimacySearch/index.ts","webpack://@iflyrpa/actions/./src/actions/xiaohongshuWebMsgRead/index.ts","webpack://@iflyrpa/actions/./src/actions/xiaohongshuWebMsgReply/index.ts","webpack://@iflyrpa/actions/./src/actions/xiaohongshuWebNoteFeed/index.ts","webpack://@iflyrpa/actions/./src/actions/xiaohongshuWebRelationAction/index.ts","webpack://@iflyrpa/actions/./src/actions/xiaohongshuWebSearch/index.ts","webpack://@iflyrpa/actions/./src/actions/searchAccountInfo/types.ts","webpack://@iflyrpa/actions/./src/index.ts"],"sourcesContent":["\nvar encrypt_lookup = [\n  \"Z\",\n  \"m\",\n  \"s\",\n  \"e\",\n  \"r\",\n  \"b\",\n  \"B\",\n  \"o\",\n  \"H\",\n  \"Q\",\n  \"t\",\n  \"N\",\n  \"P\",\n  \"+\",\n  \"w\",\n  \"O\",\n  \"c\",\n  \"z\",\n  \"a\",\n  \"/\",\n  \"L\",\n  \"p\",\n  \"n\",\n  \"g\",\n  \"G\",\n  \"8\",\n  \"y\",\n  \"J\",\n  \"q\",\n  \"4\",\n  \"2\",\n  \"K\",\n  \"W\",\n  \"Y\",\n  \"j\",\n  \"0\",\n  \"D\",\n  \"S\",\n  \"f\",\n  \"d\",\n  \"i\",\n  \"k\",\n  \"x\",\n  \"3\",\n  \"V\",\n  \"T\",\n  \"1\",\n  \"6\",\n  \"I\",\n  \"l\",\n  \"U\",\n  \"A\",\n  \"F\",\n  \"M\",\n  \"9\",\n  \"7\",\n  \"h\",\n  \"E\",\n  \"C\",\n  \"v\",\n  \"u\",\n  \"R\",\n  \"X\",\n  \"5\"\n];\n\nlet esm_typeof = {}\nesm_typeof.A = function (t) {\n  return typeof t\n}\n\nfunction encrypt_b64Encode(t) {\n  var e = 664\n    , r = 634\n    , n = 448\n    , o = 599\n    , i = 315\n    , a = 416\n    , u = 512\n    , s = 361\n    , c = 406\n    , l = 487\n    , f = 496\n    , p = 333\n    , h = 630\n    , d = 639\n    , v = 548\n    , g = 582\n    , m = 447\n    , y = 468\n    , w = 375\n    , b = 331\n    , _ = 149\n    , E = 382\n    , x = 265\n    , k = 625\n    , T = 570\n    , S = 551\n    , A = 582\n    , L = 581\n    , I = 638\n    , R = 618\n    , O = 606\n    , C = 429\n    , N = 651\n    , P = 667\n    , B = 817\n    , M = 333\n    , j = 567\n    , F = 747\n    , D = 561\n    , q = 570\n    , U = 676\n    , G = 840\n    , H = 240\n    , V = {\n      udFrB: function (t, e) {\n        return t % e\n      },\n      cCZFe: function (t, e) {\n        return t === e\n      },\n      jevwl: function (t, e) {\n        return t - e\n      },\n      aqlTy: function (t, e) {\n        return t + e\n      },\n      rceYY: function (t, e) {\n        return t >> e\n      },\n      OwjMq: function (t, e) {\n        return t & e\n      },\n      kSGXO: function (t, e) {\n        return t << e\n      },\n      veNiI: function (t, e) {\n        return t === e\n      },\n      QLthP: function (t, e) {\n        return t + e\n      },\n      wDtJz: function (t, e) {\n        return t + e\n      },\n      nYqUQ: function (t, e) {\n        return t & e\n      },\n      TCArD: function (t, e) {\n        return t << e\n      },\n      RHteb: function (t, e) {\n        return t - e\n      },\n      mZPJZ: function (t, e) {\n        return t < e\n      },\n      zDETq: function (t, e, r, n) {\n        return t(e, r, n)\n      },\n      YlZGp: function (t, e) {\n        return t > e\n      }\n    };\n  function W(t, e) {\n    return a0_0x10f4ac(e, t - -H)\n  }\n  for (var X = (W(-413, -442) + W(-e, -r) + \"7\")[W(-n, -o)](\"|\"), z = 0; ;) {\n    switch (X[z++]) {\n      case \"0\":\n        var Y;\n        continue;\n      case \"1\":\n        var K = [];\n        continue;\n      case \"2\":\n        var J = V[W(-i, -a)]($, 3);\n        continue;\n      case \"3\":\n        var $ = t[W(-350, -u)];\n        continue;\n      case \"4\":\n        V[W(-s, -c)](J, 1) ? (Y = t[V[W(-l, -f)]($, 1)],\n          K[W(-p, -346)](V[W(-h, -d)](encrypt_lookup[V[W(-503, -v)](Y, 2)] + encrypt_lookup[V[W(-g, -741)](V[W(-331, -m)](Y, 4), 63)], \"==\"))) : V[W(-y, -w)](J, 2) && (Y = V[W(-b, -_)](t[$ - 2], 8) + t[V[W(-l, -E)]($, 1)],\n            K[W(-333, -x)](V[W(-k, -505)](V[W(-T, -S)](encrypt_lookup[Y >> 10], encrypt_lookup[V[W(-A, -L)](Y >> 4, 63)]) + encrypt_lookup[V[W(-I, -R)](V[W(-O, -C)](Y, 2), 63)], \"=\")));\n        continue;\n      case \"5\":\n        var Q = 16383;\n        continue;\n      case \"6\":\n        for (var Z = 0, tt = V[W(-509, -N)]($, J); V[W(-P, -B)](Z, tt); Z += Q)\n          K[W(-M, -153)](V[W(-j, -F)](encrypt_encodeChunk, t, Z, V[W(-D, -413)](Z + Q, tt) ? tt : V[W(-q, -501)](Z, Q)));\n        continue;\n      case \"7\":\n        return K[W(-U, -G)](\"\")\n    }\n    break\n  }\n}\n\nfunction encrypt_encodeUtf8(t) {\n  var e = 185\n    , r = 410\n    , n = 480\n    , o = 222\n    , i = 194\n    , a = 165\n    , u = 147\n    , s = 290\n    , c = 460\n    , l = 472\n    , f = 497\n    , p = 462\n    , h = 286\n    , d = 209\n    , v = 223\n    , g = 590\n    , m = {\n      bIGxm: function (t, e) {\n        return t(e)\n      },\n      MahgM: function (t, e) {\n        return t < e\n      },\n      czxKn: function (t, e) {\n        return t === e\n      },\n      clYIu: function (t, e) {\n        return t + e\n      }\n    }\n    , y = m[b(477, 488)](encodeURIComponent, t)\n    , w = [];\n  function b(t, e) {\n    return a0_0x10f4ac(t, e - g)\n  }\n  for (var _ = 0; m[b(333, e)](_, y[b(r, n)]); _++) {\n    var E = y[b(o, 290)](_);\n    if (m[b(i, a)](E, \"%\")) {\n      var x = y[b(u, s)](m[b(574, 472)](_, 1)) + y[b(c, 290)](m[b(605, l)](_, 2))\n        , k = parseInt(x, 16);\n      w[b(592, f)](k),\n        _ += 2\n    } else\n      w[b(p, f)](E[b(217, h) + b(d, v)](0))\n  }\n  return w\n}\n\nfunction sign_common(h) {\n    return encrypt_b64Encode(encrypt_encodeUtf8(JSON.stringify(h)))\n}\nfunction encrypt_tripletToBase64(t) {\n  var e = 11\n    , r = 15\n    , n = 199\n    , o = 34\n    , i = 4\n    , a = 102\n    , u = 276\n    , s = 205\n    , c = 218\n    , l = 11\n    , f = 115\n    , p = 34\n    , h = 161\n    , d = 123\n    , v = 335\n    , g = {};\n  function m(t, e) {\n    return a0_0x10f4ac(e, t - v)\n  }\n  g[m(205, 328)] = function (t, e) {\n    return t + e\n  }\n    ,\n    g[m(e, 53)] = function (t, e) {\n      return t >> e\n    }\n    ,\n    g[m(r, n)] = function (t, e) {\n      return t & e\n    }\n    ,\n    g[m(o, i)] = function (t, e) {\n      return t >> e\n    }\n    ,\n    g[m(-a, -u)] = function (t, e) {\n      return t & e\n    }\n    ;\n  var y = g;\n  return y[m(s, c)](encrypt_lookup[63 & y[m(l, -75)](t, 18)], encrypt_lookup[y[m(r, f)](y[m(p, h)](t, 12), 63)]) + encrypt_lookup[t >> 6 & 63] + encrypt_lookup[y[m(-a, -d)](t, 63)]\n}\nfunction encrypt_encodeChunk(t, e, r) {\n  var n, o = 165, i = 246, a = 205, u = 353, s = 162, c = 17, l = 351, f = 191, p = 139, h = 79, d = 86, v = 233, g = 270, m = 166, y = {\n    hwomB: function (t, e) {\n      return t < e\n    },\n    iHUeL: function (t, e) {\n      return t & e\n    },\n    ELxEv: function (t, e) {\n      return t << e\n    },\n    lBuRH: function (t, e) {\n      return t << e\n    },\n    SkIJl: function (t, e) {\n      return t & e\n    },\n    JYxWY: function (t, e) {\n      return t + e\n    },\n    CxjtF: function (t, e) {\n      return t(e)\n    }\n  }, w = [];\n  function b(t, e) {\n    return a0_0x10f4ac(t, e - m)\n  }\n  for (var _ = e; y[b(-63, -o)](_, r); _ += 3)\n    n = y[b(-i, -a)](y[b(-166, -124)](t[_], 16), 16711680) + y[b(-u, -205)](y[b(s, -c)](t[_ + 1], 8), 65280) + y[b(-l, -208)](t[y[b(-350, -f)](_, 2)], 255),\n      w[b(p, 73)](y[b(h, d)](encrypt_tripletToBase64, n));\n  return w[b(-v, -g)](\"\")\n}\n\nfunction a0_0x3693(t, e) {\n  var r = [\n    \"xUKNL\",\n    \"jUrZI\",\n    \"rviFu\",\n    \"join\",\n    \"get\",\n    \"LjDtD\",\n    \"ZJHyP\",\n    \"wOmGY\",\n    \"enumera\",\n    \"aONWR\",\n    \"string\",\n    \"kQpMi\",\n    \"mZPJZ\",\n    \"Ysiay\",\n    \"czxKn\",\n    \"|5|6|4|\",\n    \"prototy\",\n    \"jklmnop\",\n    \"MuYbw\",\n    \"diDwk\",\n    \"TRFtx\",\n    \"drDHI\",\n    \"WLARA\",\n    \"xyz0123\",\n    \"asBytes\",\n    \"|6|0|1|\",\n    \"JOtEi\",\n    \"Oialn\",\n    \"OQrEi\",\n    \"uPnXq\",\n    \"VWXYZab\",\n    \"cIbFa\",\n    \"qYuta\",\n    \"QDOZZ\",\n    \"MahgM\",\n    \"iRXZq\",\n    \"22098XlFGYn\",\n    \"mmLKn\",\n    \"jMcIE\",\n    \"stringi\",\n    \"[object\",\n    \"nYqUQ\",\n    \"jSgjk\",\n    \"ucyEo\",\n    \"iewJI\",\n    \"vgTwl\",\n    \"DnNGR\",\n    \"oBytes\",\n    \"Xtwzk\",\n    \"aqlTy\",\n    \"JWnPK\",\n    \"1|0|2|4\",\n    \"qrstuvw\",\n    \"_gg\",\n    \"QLthP\",\n    \"FJIWy\",\n    \"yRnhISG\",\n    \"pjUsr\",\n    \"KAwuh\",\n    \"Thhoa\",\n    \"jarkJ\",\n    \"WjRNN\",\n    \"asStrin\",\n    \"x3VT16I\",\n    \"357835LaQWjW\",\n    \"SkIJl\",\n    \"size\",\n    \"iyorr\",\n    \"iHUeL\",\n    \"tTanW\",\n    \"tNusJ\",\n    \"NiSrP\",\n    \"eAt\",\n    \"TCArD\",\n    \"a2r1ZQo\",\n    \"iamspam\",\n    \"bOnfu\",\n    \"UNSKg\",\n    \"HIJKLMN\",\n    \"ZfMKC\",\n    \"bJhXU\",\n    \"zwAAc\",\n    \"JYxWY\",\n    \"lUAFM97\",\n    \"mwaRe\",\n    \"EzYWD\",\n    \"replace\",\n    \"uOtUJ\",\n    \"__esMod\",\n    \"ViQWI\",\n    \"aCMFL\",\n    \"EAKSd\",\n    \"ule\",\n    \"pqnFP\",\n    \"qYDsL\",\n    \"270726pnaYfG\",\n    \"glBZG\",\n    \"OwjMq\",\n    \"YGrjc\",\n    \"ZhAcd\",\n    \"JDqFL\",\n    \"456789+\",\n    \"kEjQs\",\n    \"lWhbD\",\n    \"OaLTI\",\n    \"dXlgm\",\n    \"cVte9UJ\",\n    \"ctor\",\n    \"hwomB\",\n    \"wDtJz\",\n    \"constru\",\n    \"ABHuC\",\n    \"zDETq\",\n    \"SYNeA\",\n    \"BGbij\",\n    \"ionFq\",\n    \"QzaNS\",\n    \"7|3|5|4\",\n    \"YlZGp\",\n    \"Bjniw\",\n    \"ZITuN\",\n    \"KPTzH\",\n    \"HrBeq\",\n    \"xobsT\",\n    \"kXJkC\",\n    \"QSrEZ\",\n    \"ENXtO\",\n    \"FYbRJ\",\n    \"wOcza/L\",\n    \"_hh\",\n    \"dVXMb\",\n    \"ppkua\",\n    \"WgamZ\",\n    \"HuwCW\",\n    \"362424fnLCuh\",\n    \"charCod\",\n    \"HhPqg\",\n    \"ODunI\",\n    \"eJzqq\",\n    \"charAt\",\n    \"JGAgI\",\n    \"ZmserbB\",\n    \"TURcG\",\n    \"WyrqF\",\n    \"iYJzH\",\n    \"VIwfH\",\n    \"tzzOB\",\n    \"YgiCH\",\n    \"byyMQ\",\n    \"ELxEv\",\n    \"0DSfdik\",\n    \"HRihr\",\n    \"_ii\",\n    \"aDsrp\",\n    \"ble\",\n    \"jTGtW\",\n    \"configu\",\n    \"cXiYW\",\n    \"56kSpAsC\",\n    \"158KIldlA\",\n    \"oHQtNP+\",\n    \"BHavO\",\n    \"PCIlh\",\n    \"QatIf\",\n    \"IKyqh\",\n    \"Words\",\n    \"Qwnrg\",\n    \"44lQAgNu\",\n    \"cdefghi\",\n    \"nTwxD\",\n    \"RHteb\",\n    \"coqPr\",\n    \"rJwmI\",\n    \"aBoeK\",\n    \"default\",\n    \"exports\",\n    \"rceYY\",\n    \"isArray\",\n    \"mdKKO\",\n    \"kzxWE\",\n    \"DeBtm\",\n    \"tjjUn\",\n    \"vJEcD\",\n    \"LpfE8xz\",\n    \"bin\",\n    \"HKazo\",\n    \"rable\",\n    \"call\",\n    \"wordsTo\",\n    \"zBiyt\",\n    \"GrsGL\",\n    \"fqulF\",\n    \"jevwl\",\n    \"mxfLj\",\n    \"xlUnt\",\n    \"q42KWYj\",\n    \"endian\",\n    \"eEqDc\",\n    \"oyGAZ\",\n    \"bytesTo\",\n    \"OzjuJ\",\n    \"IfwWq\",\n    \"ize\",\n    \"6648810piiNEz\",\n    \"lTHdy\",\n    \"vDLZJ\",\n    \"stringT\",\n    \"A4NjFqY\",\n    \"GkjTz\",\n    \"eooJA\",\n    \"substr\",\n    \"veNiI\",\n    \"LYfDp\",\n    \"ljKsP\",\n    \"jJYWG\",\n    \"bcYAf\",\n    \"srikB\",\n    \"utf8\",\n    \"qTbeY\",\n    \"yqRzd\",\n    \"|3|5\",\n    \"bjbAy\",\n    \" Array]\",\n    \"rMbXP\",\n    \"u5wPHsO\",\n    \"test\",\n    \"gMIMC\",\n    \"Deyqv\",\n    \" argume\",\n    \"ABCDEFG\",\n    \"undefin\",\n    \"split\",\n    \"QTlsj\",\n    \"_isBuff\",\n    \"OPQRSTU\",\n    \"Illegal\",\n    \"loSen\",\n    \"navigat\",\n    \"ObwNo\",\n    \"qPbcq\",\n    \"7182692QogvXX\",\n    \"tvqSn\",\n    \"DGptJ\",\n    \"HhTfW\",\n    \"avIYx\",\n    \"defineP\",\n    \"PFQbW\",\n    \"CjFyM\",\n    \"toStrin\",\n    \"yMWXS\",\n    \"yMyOy\",\n    \"0XTdDgM\",\n    \"eXkru\",\n    \"_blocks\",\n    \"indexOf\",\n    \"mbBQr\",\n    \"lBuRH\",\n    \"HzGjH\",\n    \"HNErV\",\n    \"mEokX\",\n    \"userAge\",\n    \"UpmtD\",\n    \"sgomx\",\n    \"KDfKS\",\n    \"OTbSq\",\n    \"lxMGW\",\n    \"0|3|2|1\",\n    \"dfWyB\",\n    \"lWzAd\",\n    \"eyXTL\",\n    \"5624qreyZK\",\n    \"pow\",\n    \"IJstz\",\n    \"LMlMB\",\n    \"INlwI\",\n    \"lRulU\",\n    \"TCgZh\",\n    \"_digest\",\n    \"UBhIl\",\n    \"fLtZZ\",\n    \"FYSKq\",\n    \"2|8|0\",\n    \"IoCeZ\",\n    \" Object\",\n    \"UuTvI\",\n    \"lNKLD\",\n    \"String\",\n    \"Bytes\",\n    \"rBVvW\",\n    \"KblCWi+\",\n    \"pRaIH\",\n    \"roperty\",\n    \"vTINI\",\n    \"atLE\",\n    \"functio\",\n    \"Udqoy\",\n    \"nt \",\n    \"htSWx\",\n    \"hEwRK\",\n    \"encodin\",\n    \"sCSVK\",\n    \"VuAZF\",\n    \"xeIIy\",\n    \"RBjMb\",\n    \"taTrq\",\n    \"vDLFJ\",\n    \"bPkya\",\n    \"HzimH\",\n    \"nCffO\",\n    \"BWbtU\",\n    \"2|8\",\n    \"slice\",\n    \"lxMGQ\",\n    \"tTiwe\",\n    \"JDhJB\",\n    \"rCode\",\n    \"gNDzY\",\n    \"wJkyu\",\n    \"cCZFe\",\n    \"RNGSl\",\n    \"floor\",\n    \"clYIu\",\n    \"vLiwz\",\n    \"BiNSE\",\n    \"MtYWB\",\n    \"fromCha\",\n    \"StNOc\",\n    \"|7|5|3|\",\n    \"9|1|4|6\",\n    \"length\",\n    \"UNYAE\",\n    \"pngG8yJ\",\n    \"hasOwnP\",\n    \"pYeWu\",\n    \"wTjkk\",\n    \"Bvk6/7=\",\n    \"KTmgk\",\n    \"bIGxm\",\n    \"readFlo\",\n    \"LFZch\",\n    \"_ff\",\n    \"1|3|4|2\",\n    \"binary\",\n    \"LLdJZ\",\n    \"ZofOU\",\n    \"6399uFPxTQ\",\n    \"push\",\n    \"YntPT\",\n    \"kSGXO\",\n    \"random\",\n    \"HfpCU\",\n    \"hECvuRX\",\n    \"getTime\",\n    \"iwSyV\",\n    \"alert\",\n    \"LKMcb\",\n    \"DJVdg\",\n    \"Hex\",\n    \"URzKO\",\n    \"CxjtF\",\n    \"ZVOCs\",\n    \"isBuffe\",\n    \"vGpbT\",\n    \"rotl\",\n    \"udFrB\",\n    \"CnbsH\",\n    \"crLST\"\n  ]\n  return r[t -= 131]\n}\nfunction a0_0x10f4ac(t, e) {\n  return a0_0x3693(e - -570, t)\n}\n\nvar encrypt_mcr = function (t) {\n  var e = 67\n    , r = 15\n    , n = 164\n    , o = 126\n    , i = 137\n    , a = 39\n    , u = 176\n    , s = 72\n    , c = 56\n    , l = 21\n    , f = 35\n    , p = 34\n    , h = 35\n    , d = 18\n    , v = 25\n    , g = 185\n    , m = 1149\n    , y = 744\n    , w = 1295\n    , b = 1248\n    , _ = 1310\n    , E = 1096\n    , x = 1166\n    , k = 1095\n    , T = 1196\n    , S = 1180\n    , A = 1039\n    , L = 976\n    , R = 1347\n    , I = 1117\n    , O = 1168\n    , C = 1233\n    , N = 1157\n    , P = 1006\n    , B = 1122\n    , M = 1277\n    , j = 1288\n    , F = 1271\n    , D = 986\n    , q = 162\n    , U = {};\n  function H(t, e) {\n    return a0_0x10f4ac(e, t - q)\n  }\n  U[H(-73, -66)] = function (t, e) {\n    return t === e\n  }\n    ,\n    U[H(e, 186)] = function (t, e) {\n      return t < e\n    }\n    ,\n    U[H(-r, -n)] = function (t, e) {\n      return t ^ e\n    }\n    ,\n    U[H(r, -o)] = function (t, e) {\n      return t & e\n    }\n    ,\n    U[H(-i, -a)] = function (t, e) {\n      return t < e\n    }\n    ,\n    U[H(-175, -u)] = function (t, e) {\n      return t ^ e\n    }\n    ,\n    U[H(-59, s)] = function (t, e) {\n      return t ^ e\n    }\n    ,\n    U[H(-c, -l)] = function (t, e) {\n      return t >>> e\n    }\n    ,\n    U[H(f, p)] = function (t, e) {\n      return t >>> e\n    }\n    ;\n  for (var G, V, W = U, z = 3988292384, X = 256, Y = []; X--; Y[X] = W[H(h, -66)](G, 0))\n    for (V = 8,\n      G = X; V--;)\n      G = W[H(r, d)](G, 1) ? W[H(35, v)](G, 1) ^ z : W[H(h, g)](G, 1);\n  return function (t) {\n    function e(t, e) {\n      return H(e - 1181, t)\n    }\n    if (W[e(m, 1108)]((0,\n      esm_typeof.A)(t), e(y, 914))) {\n      for (var r = 0, n = -1; W[e(w, b)](r, t[e(_, 1233)]); ++r)\n        n = W[e(E, x)](Y[W[e(k, T)](n, 255) ^ t[e(S, A) + e(1022, L)](r)], n >>> 8);\n      return W[e(R, 1166)](n, -1) ^ z\n    }\n    for (r = 0,\n      n = -1; W[e(I, 1044)](r, t[e(O, C)]); ++r)\n      n = W[e(N, P)](Y[W[e(1229, B)](W[e(M, T)](n, 255), t[r])], W[e(j, 1125)](n, 8));\n    return W[e(F, B)](W[e(D, 1122)](n, -1), z)\n  }\n}();\n\nfunction GenXSCommon(a1cookie, x_t, x_s) {\n    let b1 = 'I38rHdgsjopgIvesdVwgIC+oIELmBZ5e3VwXLgFTIxS3bqwErFeexd0ekncAzMFYnqthIhJeSnMDKutRI3KsYorWHPtGrbV0P9WfIi/eWc6eYqtyQApPI37ekmR1QL+5Ii6sdnoeSfqYHqwl2qt5B0DoIvMzOZQqZVw7IxOeTqwr4qtiIkrOIi/skccxICLdI3Oe0utl2ADZsLveDSKsSPw5IEvsiutJOqw8BVwfPpdeTDWOIx4VIiu6ZPwbPut5IvlaLbgs3qtxIxes1VwHIkumIkIyejgsY/WTge7sjutKrZgedWI9gfKeYWZGI36eWPwyIEJefut0ocVAPBLLI3Aeiqt3cZ7sVom4IESyIhEqQd4AICY24F4gIiifpVwAICZVJo3sWWJs1qwiIvdef97e0ekKIi/e1piS8qwUIE7s1fds6WAeiVwqed5sdut3IxILbd6sdqtDbgKs0PwgIv8aI3z5rqwGBVtwzfTsKD7sdBdskut+Iioed/As1SiiIkKs0F6s3nVuIkge1Pt0IkVkwPwwNVtMI3/e1qtdIkKs1VwVIEesdutA+qwKsuw7IvrRIxDgJfIj2IJexVtVIhiKIi6eDVw/bz4zLadsYjmfIkWo4VtPmVw5IvAe3qtk+LJeTl5sTSEyIEJekdgs3PtsnPwqI35sSPt0Ih/sV04TIk0ejjNsfqw7Iv3sVut04B8qIkWyIvKsxFOekzNsdAKsYPtKIiMFI3MurVtKIvzjIh6s6lFut//sWqtaI3IYbuwl'\n    let h = {\n      \"s0\": 3,\n      \"s1\": \"\",\n      \"x0\": \"1\",\n      \"x1\": \"3.6.8\",\n      \"x2\": \"Mac OS\",\n      \"x3\": \"xhs-pc-web\",\n      \"x4\": \"4.20.1\",\n      \"x5\": a1cookie, // a1 cookie\n      \"x6\": x_t,\n      \"x7\": x_s,\n      \"x8\": b1,\n      \"x9\": encrypt_mcr(x_t + x_s + b1),\n      \"x10\": 1,\n    }\n\n    return sign_common(h)\n}\n\nmodule.exports = GenXSCommon\n\n\n// let a1 = '195b24e679dmxgripk2o89yld9kdnoklz0h04octb40000365251';\n// let x_t = 1754108104611;\n// const x_s = 'XYS_2UQhPsHCH0c1PjhFHjIj2erjwjQM89PjNsQhPjHCHDlkJdphHjIj2ePjwjQTJdPIP/ZlgAmGy0Yt4Lh3cFq34DE84F+ewBrM/9IUwebz8F+3J9Qi+SQD8dzN4e8EPeYS2eb7c0mTc9Yrc7z14nI3nLkQcDSenLkG4sR68FVM+nSF2e+NJ9zca0mkzrTj4DV3GMqMpoS3yeWEznbM+L40wn4Lpbb9zr+7/SW6PMYYzeQ1aFTI8gm8J/YL/FzTc0D6zgSyPjTy+0Ys+7c38g8NLSQD8AWjNsQh+sHCHfRjyfp04sQR'\n\n// console.log(GenXSCommon(a1, x_t, x_s));\n","const encoder = new TextEncoder();\n\nfunction leftRotate(x, n) {\n  const shift = n % 32;\n  return (((x << shift) | (x >>> (32 - shift))) >>> 0);\n}\n\nfunction gt(value, length, _padChar) {\n  return String(value).padStart(length, '0');\n}\n\nfunction normalizeRuntime(runtime = {}) {\n  return {\n    nowMs: typeof runtime.nowMs === 'function' ? runtime.nowMs : () => Date.now(),\n    random: typeof runtime.random === 'function' ? runtime.random : () => Math.random(),\n  };\n}\n\nfunction getArr(input, format = 'array') {\n  const reg = {\n    chunk: [],\n    reg: [\n      1937774191,\n      1226093241,\n      388252375,\n      3666478592,\n      2842636476,\n      372324522,\n      3817729613,\n      2969243214,\n    ],\n    size: 0,\n  };\n\n  function compress(block) {\n    if (block.length < 64) {\n      return;\n    }\n\n    const temp = new Array(132).fill(0);\n\n    for (let i = 0; i < 16; i += 1) {\n      temp[i] = (\n        ((block[4 * i] << 24) >>> 0)\n        | (block[4 * i + 1] << 16)\n        | (block[4 * i + 2] << 8)\n        | block[4 * i + 3]\n      ) >>> 0;\n    }\n\n    for (let i = 16; i < 68; i += 1) {\n      let value = (temp[i - 16] ^ temp[i - 9] ^ leftRotate(temp[i - 3], 15)) >>> 0;\n      value = (value ^ leftRotate(value, 15) ^ leftRotate(value, 23)) >>> 0;\n      temp[i] = (value ^ leftRotate(temp[i - 13], 7) ^ temp[i - 6]) >>> 0;\n    }\n\n    for (let i = 0; i < 64; i += 1) {\n      temp[i + 68] = (temp[i] ^ temp[i + 4]) >>> 0;\n    }\n\n    const state = reg.reg.slice();\n\n    for (let i = 0; i < 64; i += 1) {\n      let tValue;\n      let ff;\n      let gg;\n\n      if (i < 16) {\n        tValue = 2043430169;\n        ff = (state[0] ^ state[1] ^ state[2]) >>> 0;\n      } else {\n        tValue = 2055708042;\n        ff = ((state[0] & state[1]) | (state[0] & state[2]) | (state[1] & state[2])) >>> 0;\n      }\n\n      const ss1 = leftRotate((leftRotate(state[0], 12) + state[4] + leftRotate(tValue, i)) >>> 0, 7);\n      const ss2 = (ss1 ^ leftRotate(state[0], 12)) >>> 0;\n      const tt1 = (ff + state[3] + ss2 + temp[i + 68]) >>> 0;\n\n      if (i < 16) {\n        gg = (state[4] ^ state[5] ^ state[6]) >>> 0;\n      } else {\n        gg = ((state[4] & state[5]) | ((~state[4]) & state[6])) >>> 0;\n      }\n\n      const tt2 = (gg + state[7] + ss1 + temp[i]) >>> 0;\n\n      state[3] = state[2];\n      state[2] = leftRotate(state[1], 9);\n      state[1] = state[0];\n      state[0] = tt1;\n      state[7] = state[6];\n      state[6] = leftRotate(state[5], 19);\n      state[5] = state[4];\n      state[4] = (tt2 ^ leftRotate(tt2, 9) ^ leftRotate(tt2, 17)) >>> 0;\n    }\n\n    for (let i = 0; i < 8; i += 1) {\n      reg.reg[i] = (reg.reg[i] ^ state[i]) >>> 0;\n    }\n  }\n\n  function write(value) {\n    const bytes = typeof value === 'string'\n      ? Array.from(encoder.encode(value))\n      : Array.from(value);\n\n    reg.size += bytes.length;\n    let index = 64 - reg.chunk.length;\n\n    if (bytes.length < index) {\n      reg.chunk.push(...bytes);\n      return;\n    }\n\n    reg.chunk.push(...bytes.slice(0, index));\n    while (reg.chunk.length >= 64) {\n      compress(reg.chunk.slice(0, 64));\n      if (index < bytes.length) {\n        reg.chunk = bytes.slice(index, Math.min(index + 64, bytes.length));\n      } else {\n        reg.chunk = [];\n      }\n      index += 64;\n    }\n  }\n\n  function fill() {\n    const bitLength = BigInt(reg.size) * 8n;\n    reg.chunk.push(128);\n    let index = reg.chunk.length % 64;\n\n    if (64 - index < 8) {\n      index -= 64;\n    }\n\n    while (index < 56) {\n      reg.chunk.push(0);\n      index += 1;\n    }\n\n    const high = Number(bitLength / 4294967296n);\n    for (let i = 0; i < 4; i += 1) {\n      reg.chunk.push((high >> (8 * (3 - i))) & 255);\n    }\n\n    const low = Number(bitLength & 4294967295n);\n    for (let i = 0; i < 4; i += 1) {\n      reg.chunk.push((low >> (8 * (3 - i))) & 255);\n    }\n  }\n\n  write(input);\n  fill();\n\n  for (let i = 0; i < reg.chunk.length; i += 64) {\n    compress(reg.chunk.slice(i, i + 64));\n  }\n\n  if (format === 'hex') {\n    let result = '';\n    for (let i = 0; i < 8; i += 1) {\n      result += gt(reg.reg[i].toString(16), 8, '0');\n    }\n    return result;\n  }\n\n  const result = new Array(32).fill(0);\n  for (let i = 0; i < 8; i += 1) {\n    let value = reg.reg[i];\n    result[4 * i + 3] = value & 255;\n    value >>>= 8;\n    result[4 * i + 2] = value & 255;\n    value >>>= 8;\n    result[4 * i + 1] = value & 255;\n    value >>>= 8;\n    result[4 * i] = value & 255;\n  }\n  return result;\n}\n\nfunction encodeCustomBase64(input, alphabet) {\n  let result = '';\n  let j = 0;\n\n  for (let i = 0; i < input.length + 1; i += 3) {\n    if (i + 3 <= input.length) {\n      const charCode0 = input.charCodeAt(i);\n      const charCode1 = input.charCodeAt(i + 1);\n      const charCode2 = input.charCodeAt(i + 2);\n      const baseNum = (charCode2 | (charCode1 << 8) | (charCode0 << 16)) >>> 0;\n\n      result += alphabet[(baseNum & 16515072) >> 18];\n      result += alphabet[(baseNum & 258048) >> 12];\n      result += alphabet[(baseNum & 4032) >> 6];\n      result += alphabet[baseNum & 63];\n    }\n\n    if (i + 3 > input.length) {\n      const remaining = input.length - j;\n      if (remaining === 2) {\n        const charCode0 = input.charCodeAt(j);\n        const charCode1 = input.charCodeAt(j + 1);\n        const baseNum = ((charCode1 << 8) | (charCode0 << 16)) >>> 0;\n        result += alphabet[(baseNum & 16515072) >> 18];\n        result += alphabet[(baseNum & 258048) >> 12];\n        result += alphabet[(baseNum & 4032) >> 6];\n        result += '=';\n      } else if (remaining === 1) {\n        const charCode0 = input.charCodeAt(j);\n        const baseNum = (charCode0 << 16) >>> 0;\n        result += alphabet[(baseNum & 16515072) >> 18];\n        result += alphabet[(baseNum & 258048) >> 12];\n        result += '==';\n      }\n    }\n\n    j += 3;\n  }\n\n  return result;\n}\n\nfunction abArr256() {\n  const nums = Array.from({ length: 256 }, (_, index) => 255 - index);\n  let previousValue = 0;\n  const lm = 211;\n\n  for (let i = 0; i < nums.length; i += 1) {\n    const num1 = previousValue * nums[i];\n    previousValue = (num1 + previousValue + lm) % 256;\n    [nums[i], nums[previousValue]] = [nums[previousValue], nums[i]];\n  }\n\n  return nums;\n}\n\nfunction abGarbledCharacters(value) {\n  const arr256 = abArr256();\n  let n4 = 0;\n  let result = '';\n\n  for (let i = 0; i < value.length; i += 1) {\n    const n2 = (i + 1) % 256;\n    const n3 = n4 + arr256[n2];\n    n4 = n3 % 256;\n    const oldArrN2 = arr256[n2];\n    arr256[n2] = arr256[n4];\n    arr256[n4] = oldArrN2;\n    const n5 = value.charCodeAt(i);\n    const n6 = arr256[n2] + oldArrN2;\n    const n7 = n6 % 256;\n    const n8 = n5 ^ arr256[n7];\n    result += String.fromCharCode(n8);\n  }\n\n  return result;\n}\n\nfunction uaArr256(userAgent, uaSalt) {\n  const nums = Array.from({ length: 256 }, (_, index) => 255 - index);\n  let previousValue = 0;\n  const lm = [0, 1, uaSalt];\n\n  for (let i = 0; i < nums.length; i += 1) {\n    const num1 = previousValue * nums[i];\n    previousValue = (num1 + previousValue + lm[i % 3]) % 256;\n    [nums[i], nums[previousValue]] = [nums[previousValue], nums[i]];\n  }\n\n  return nums;\n}\n\nfunction uaGarbledCharacters(userAgent, uaSalt) {\n  const arr256 = uaArr256(userAgent, uaSalt);\n  let n4 = 0;\n  let result = '';\n\n  for (let i = 0; i < userAgent.length; i += 1) {\n    const n2 = (i + 1) % 256;\n    const n3 = n4 + arr256[n2];\n    n4 = n3 % 256;\n    const oldArrN2 = arr256[n2];\n    arr256[n2] = arr256[n4];\n    arr256[n4] = oldArrN2;\n    const n5 = userAgent.charCodeAt(i);\n    const n6 = arr256[n2] + oldArrN2;\n    const n7 = n6 % 256;\n    const n8 = n5 ^ arr256[n7];\n    result += String.fromCharCode(n8);\n  }\n\n  return result;\n}\n\nfunction encryptionUa(value) {\n  const chars = 'ckdp1h4ZKsUB80/Mfvw36XIgR25+WQAlEi7NLboqYTOPuzmFjJnryx9HVGDaStCe';\n  return encodeCustomBase64(value, chars);\n}\n\nfunction getArr2(userAgent) {\n  const data = userAgent.includes('Win')\n    ? '1280|585|1280|672|1280|672|1280|720|Win32'\n    : '2056|1080|2056|1201|2056|1201|2056|1329|MacIntel';\n\n  return Array.from(data, (char) => char.charCodeAt(0));\n}\n\nfunction getLast3Num(dateTime1) {\n  const timestamp = `${(Math.trunc(dateTime1) + 3) & 255},`;\n  return Array.from(timestamp, (char) => char.charCodeAt(0));\n}\n\nfunction getLastNum2(arr1, arr) {\n  const arrIndexes = [\n    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,\n    20, 21, 22, 23, 25, 26, 27, 29, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40,\n    41, 42, 43, 44, 45, 46, 47, 48, 50, 51, 53, 54,\n  ];\n\n  let xorResult = 0;\n  for (let i = 0; i < arr1.length; i += 1) {\n    xorResult ^= arr1[i];\n  }\n  for (const index of arrIndexes) {\n    xorResult ^= arr[index];\n  }\n  return xorResult;\n}\n\nfunction getNumList(arr0, arrAr, runtime) {\n  const numList = [];\n\n  for (let i = 0; i < arrAr.length; i += 3) {\n    if (i + 2 >= arrAr.length) {\n      if (i + 1 >= arrAr.length) {\n        numList.push(arrAr[i]);\n      } else {\n        numList.push(arrAr[i], arrAr[i + 1]);\n      }\n      continue;\n    }\n\n    const randomValue = Math.trunc(runtime.random() * 1000) & 255;\n    const num1 = (randomValue & 145) | (arrAr[i] & 110);\n    const num2 = (randomValue & 66) | (arrAr[i + 1] & 189);\n    const num3 = (randomValue & 44) | (arrAr[i + 2] & 211);\n    const num4 = ((arrAr[i] & 145) | (arrAr[i + 1] & 66) | (arrAr[i + 2] & 44)) >>> 0;\n    numList.push(num1, num2, num3, num4);\n  }\n\n  return arr0.concat(numList);\n}\n\nfunction topHeaderRandomGarbledCharacters(runtime) {\n  const arr = [];\n  const randomValue = runtime.random() * 65535;\n  const num1 = Math.trunc(randomValue) & 255;\n  const num2 = Math.trunc(runtime.random() * 40);\n\n  arr.push((num1 & 170) | (3 & 85));\n  arr.push((num1 & 85) | (3 & 170));\n  arr.push((num2 & 170) | (82 & 85));\n  arr.push((num2 & 85) | (82 & 170));\n\n  return String.fromCharCode(...arr);\n}\n\nfunction randomGarbledCharactersArrayList(runtime) {\n  function randomGarbledCharactersArray1() {\n    const arr = [];\n    const randomValue = runtime.random() * 65535;\n    const num1 = Math.trunc(randomValue) & 255;\n    const num2 = (Math.trunc(randomValue) >> 8) & 255;\n\n    arr.push((num1 & 170) | (1 & 85));\n    arr.push((num1 & 85) | (1 & 170));\n    arr.push((num2 & 170) | (0 & 85));\n    arr.push((num2 & 85) | (0 & 170));\n    return arr;\n  }\n\n  function randomGarbledCharactersArray2() {\n    const arr = [];\n    const num1 = Math.trunc(runtime.random() * 240);\n    const num2 = ((Math.trunc(runtime.random() * 255)) & 77) | 2 | 16 | 32 | 128;\n\n    arr.push((num1 & 170) | (1 & 85));\n    arr.push((num1 & 85) | (1 & 170));\n    arr.push((num2 & 170) | (0 & 85));\n    arr.push((num2 & 85) | (0 & 170));\n    return arr;\n  }\n\n  return randomGarbledCharactersArray1().concat(randomGarbledCharactersArray2());\n}\n\nfunction getArr29(dateTime1, dateTime2, params, data, userAgent, runtime) {\n  const parArr = getArr(getArr(params));\n  const dataArr = getArr(getArr(data));\n  const uaSalt = userAgent.includes('Win') ? 0 : 14;\n  const browserArr = getArr(encryptionUa(uaGarbledCharacters(userAgent, uaSalt)));\n  const arr = new Array(55).fill(0);\n  const arr2 = new Array(50).fill(0);\n  const num = getArr2(userAgent);\n  const dateTime3 = Math.trunc((runtime.nowMs() - 1721836800000) / 1000 / 60 / 60 / 24 / 14);\n  const arr0 = randomGarbledCharactersArrayList(runtime);\n\n  arr[0] = 41;\n  arr[1] = dateTime3;\n  arr[2] = 5;\n  arr[3] = (Math.trunc(dateTime1) - Math.trunc(dateTime2) + 3) & 255;\n  arr[4] = dateTime1 & 255;\n  arr[5] = (dateTime1 >> 8) & 255;\n  arr[6] = (dateTime1 >> 16) & 255;\n  arr[7] = (dateTime1 >> 24) & 255;\n  arr[8] = Math.floor(dateTime1 / 256 ** 4) & 255;\n  arr[9] = Math.floor(dateTime1 / 256 ** 5) & 255;\n  arr[10] = 1 & 255;\n  arr[11] = (1 / 256) & 255;\n  arr[12] = 1 & 255;\n  arr[13] = (1 >> 8) & 255;\n  arr[14] = 1;\n  arr[15] = 0 & 255;\n  arr[16] = 0 & 255;\n  arr[17] = 0 & 255;\n  arr[18] = uaSalt & 255;\n  arr[19] = (uaSalt >> 8) & 255;\n  arr[20] = (uaSalt >> 16) & 255;\n  arr[21] = (uaSalt >> 24) & 255;\n  arr[22] = parArr[9];\n  arr[23] = parArr[18];\n  arr[24] = 3;\n  arr[25] = parArr[3];\n  arr[26] = dataArr[10];\n  arr[27] = dataArr[19];\n  arr[28] = 4;\n  arr[29] = dataArr[4];\n  arr[30] = browserArr[11];\n  arr[31] = browserArr[21];\n  arr[32] = 5;\n  arr[33] = browserArr[5];\n  arr[34] = dateTime2 & 255;\n  arr[35] = (dateTime2 >> 8) & 255;\n  arr[36] = (dateTime2 >> 16) & 255;\n  arr[37] = (dateTime2 >> 24) & 255;\n  arr[38] = Math.floor(dateTime2 / 256 ** 4) & 255;\n  arr[39] = Math.floor(dateTime2 / 256 ** 5) & 255;\n  arr[40] = 3;\n\n  const arr32 = 6241;\n  arr[41] = arr32 & 255;\n  arr[42] = (arr32 >> 8) & 255;\n  arr[43] = (arr32 >> 16) & 255;\n  arr[44] = (arr32 >> 24) & 255;\n\n  const arr36 = 6383;\n  arr[45] = arr36 & 255;\n  arr[46] = (arr36 >> 8) & 255;\n  arr[47] = (arr36 >> 16) & 255;\n  arr[48] = (arr36 >> 24) & 255;\n\n  const lastNumOne = getLast3Num(dateTime1);\n  arr[49] = num.length;\n  arr[50] = num.length & 255;\n  arr[51] = (num.length >> 8) & 255;\n  arr[52] = lastNumOne.length;\n  arr[53] = lastNumOne.length & 255;\n  arr[54] = (lastNumOne.length >> 8) & 255;\n\n  const lastNum = getLastNum2(arr0, arr);\n\n  arr2[0] = arr[9];\n  arr2[1] = arr[18];\n  arr2[2] = arr[30];\n  arr2[3] = arr[35];\n  arr2[4] = arr[47];\n  arr2[5] = arr[4];\n  arr2[6] = arr[44];\n  arr2[7] = arr[19];\n  arr2[8] = arr[10];\n  arr2[9] = arr[23];\n  arr2[10] = arr[12];\n  arr2[11] = arr[40];\n  arr2[12] = arr[25];\n  arr2[13] = arr[42];\n  arr2[14] = arr[3];\n  arr2[15] = arr[22];\n  arr2[16] = arr[38];\n  arr2[17] = arr[21];\n  arr2[18] = arr[5];\n  arr2[19] = arr[45];\n  arr2[20] = arr[1];\n  arr2[21] = arr[29];\n  arr2[22] = arr[6];\n  arr2[23] = arr[43];\n  arr2[24] = arr[33];\n  arr2[25] = arr[14];\n  arr2[26] = arr[36];\n  arr2[27] = arr[37];\n  arr2[28] = arr[2];\n  arr2[29] = arr[46];\n  arr2[30] = arr[15];\n  arr2[31] = arr[48];\n  arr2[32] = arr[31];\n  arr2[33] = arr[26];\n  arr2[34] = arr[16];\n  arr2[35] = arr[13];\n  arr2[36] = arr[8];\n  arr2[37] = arr[41];\n  arr2[38] = arr[27];\n  arr2[39] = arr[17];\n  arr2[40] = arr[39];\n  arr2[41] = arr[20];\n  arr2[42] = arr[11];\n  arr2[43] = arr[0];\n  arr2[44] = arr[34];\n  arr2[45] = arr[7];\n  arr2[46] = arr[50];\n  arr2[47] = arr[51];\n  arr2[48] = arr[53];\n  arr2[49] = arr[54];\n\n  const newArr = arr2.concat(num);\n  const newArr2 = newArr.concat(lastNumOne);\n  newArr2.push(lastNum);\n\n  return getNumList(arr0, newArr2, runtime);\n}\n\nfunction getGarbledString(params, data, userAgent, runtimeOptions) {\n  const runtime = normalizeRuntime(runtimeOptions);\n  const timestamp1 = Math.trunc(runtime.nowMs());\n  const timestamp2 = timestamp1 - Math.floor(runtime.random() * 10);\n  const arr29 = getArr29(timestamp1, timestamp2, params, data, userAgent, runtime);\n  const prefix = topHeaderRandomGarbledCharacters(runtime);\n  const mixed = abGarbledCharacters(String.fromCharCode(...arr29));\n  return prefix + mixed;\n}\n\nfunction getABogus(url, data, userAgent, runtimeOptions) {\n  const safeUrl = String(url);\n  const safeData = String(data);\n  const safeUserAgent = String(userAgent);\n  const params = safeUrl.slice(safeUrl.indexOf('?') + 1) + 'dhzx';\n  const mixedData = safeData + 'dhzx';\n  const garbledString = getGarbledString(params, mixedData, safeUserAgent, runtimeOptions);\n  const alphabet = 'Dkdpgh2ZmsQB80/MfvV36XI1R45-WUAlEixNLwoqYTOPuzKFjJnry79HbGcaStCe';\n\n  return encodeCustomBase64(garbledString, alphabet);\n}\n\nmodule.exports = {\n  leftRotate,\n  left_rotate: leftRotate,\n  gt,\n  getArr,\n  get_arr: getArr,\n  getABogus,\n  getGarbledString,\n  abGarbledCharacters,\n  abArr256,\n  ab_arr_256: abArr256,\n  getArr29,\n  get_arr29: getArr29,\n  getLast3Num,\n  getLast_3Num: getLast3Num,\n  getArr2,\n  get_arr2: getArr2,\n  getLastNum2,\n  getNumList,\n  topHeaderRandomGarbledCharacters,\n  randomGarbledCharactersArrayList,\n  encryptionUa,\n  uaGarbledCharacters,\n  uaArr256,\n  ua_arr_256: uaArr256,\n};\n","const crypto = require('crypto');\n\nfunction hexToBuffer(hexString) {\n  if (!hexString) {\n    return Buffer.alloc(0);\n  }\n\n  let normalized = String(hexString).trim();\n  if (normalized.startsWith('0x') || normalized.startsWith('0X')) {\n    normalized = normalized.slice(2);\n  }\n  if (normalized.length % 2 === 1) {\n    normalized = `0${normalized}`;\n  }\n  return Buffer.from(normalized, 'hex');\n}\n\nfunction concatByteArrays(...arrays) {\n  const parts = [];\n\n  for (const arr of arrays) {\n    if (arr == null) {\n      continue;\n    }\n    if (Buffer.isBuffer(arr) || arr instanceof Uint8Array) {\n      parts.push(Buffer.from(arr));\n      continue;\n    }\n    if (Array.isArray(arr)) {\n      parts.push(Buffer.from(arr));\n    }\n  }\n\n  return Buffer.concat(parts);\n}\n\nfunction sliceArray(array, length) {\n  const values = Array.from(array);\n  return length == null ? values : values.slice(0, length);\n}\n\nfunction hmacSha256Sign(key, data) {\n  const keyBuffer = typeof key === 'string' ? Buffer.from(key, 'utf8') : Buffer.from(key);\n  const dataBuffer = typeof data === 'string' ? Buffer.from(data, 'utf8') : Buffer.from(data);\n  return crypto.createHmac('sha256', keyBuffer).update(dataBuffer).digest('hex');\n}\n\nfunction base64UrlToBuffer(value) {\n  const normalized = String(value)\n    .replace(/-/g, '+')\n    .replace(/_/g, '/')\n    .padEnd(Math.ceil(value.length / 4) * 4, '=');\n  return Buffer.from(normalized, 'base64');\n}\n\nfunction getXCoordinateHexFromCertificate(certificatePem) {\n  const certificate = new crypto.X509Certificate(certificatePem);\n  const jwk = certificate.publicKey.export({ format: 'jwk' });\n  return base64UrlToBuffer(jwk.x).toString('hex').padStart(64, '0');\n}\n\nfunction getPrivateScalarHex(privateKeyPem) {\n  const privateKey = crypto.createPrivateKey(privateKeyPem);\n  const jwk = privateKey.export({ format: 'jwk' });\n  return base64UrlToBuffer(jwk.d).toString('hex').padStart(64, '0');\n}\n\nfunction getF(privateKeyHex, publicKeyHex) {\n  const ecdh = crypto.createECDH('prime256v1');\n  ecdh.setPrivateKey(hexToBuffer(privateKeyHex));\n  return ecdh.computeSecret(hexToBuffer(publicKeyHex));\n}\n\nfunction ne(privateKeyPem, certificatePem) {\n  const compressedPublicKeyHex = `02${getXCoordinateHexFromCertificate(certificatePem)}`;\n  const privateKeyHex = getPrivateScalarHex(privateKeyPem);\n  const sharedKey = getF(privateKeyHex, compressedPublicKeyHex);\n  const zeroKey = Buffer.alloc(32);\n  const emptyBytes = Buffer.alloc(0);\n  const outputLength = 32;\n\n  function kdfFunction(seedHex, extraBytes, requiredLength = 32) {\n    let output = Buffer.alloc(0);\n    let previousHex = '';\n    let counter = 0;\n\n    while (output.length < requiredLength) {\n      counter += 1;\n      const previousBytes = previousHex ? hexToBuffer(previousHex) : Buffer.alloc(0);\n      const combined = concatByteArrays(\n        [],\n        sliceArray(previousBytes),\n        sliceArray(extraBytes),\n        [counter],\n      );\n\n      previousHex = hmacSha256Sign(seedHex ? hexToBuffer(seedHex) : Buffer.alloc(0), combined);\n      output = Buffer.concat([output, hexToBuffer(previousHex)]);\n    }\n\n    return output.subarray(0, requiredLength);\n  }\n\n  const initialKey = hmacSha256Sign(zeroKey, sharedKey);\n  return kdfFunction(initialKey, emptyBytes, outputLength);\n}\n\nfunction customHexBase64(hexString) {\n  const alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n  let result = '';\n\n  for (let i = 0; i < hexString.length - (hexString.length % 3); i += 3) {\n    const value = Number.parseInt(hexString.slice(i, i + 3), 16);\n    result += alphabet[value >> 6] + alphabet[value & 63];\n  }\n\n  const remaining = hexString.length % 3;\n  if (remaining === 1) {\n    const value = Number.parseInt(hexString.slice(-1), 16);\n    result += alphabet[value << 2];\n  } else if (remaining === 2) {\n    const value = Number.parseInt(hexString.slice(-2), 16);\n    result += alphabet[value >> 2] + alphabet[(value & 3) << 4];\n  }\n\n  while (result.length % 4 !== 0) {\n    result += '=';\n  }\n\n  return result;\n}\n\nfunction getHeadersBdTicketGuardClientData(\n  ticket,\n  path,\n  timestamp,\n  tsSign,\n  privateKeyPem,\n  certificatePem,\n) {\n  const secretKey = ne(privateKeyPem, certificatePem);\n  const dataToSign = `ticket=${ticket}&path=${path}&timestamp=${timestamp}`;\n  const signature = hmacSha256Sign(secretKey, dataToSign);\n  const reqSign = customHexBase64(signature);\n\n  const clientData = {\n    ts_sign: tsSign,\n    req_content: 'ticket,path,timestamp',\n    req_sign: reqSign,\n    timestamp,\n  };\n\n  return Buffer.from(JSON.stringify(clientData), 'utf8').toString('base64');\n}\n\nfunction getBdV2(responseObj, options = {}) {\n  const timestamp = Math.trunc(Date.now() / 1000);\n  const path = options.path ?? '/web/api/media/aweme/create_v2/';\n\n  const headersBdTicketGuardClientData = getHeadersBdTicketGuardClientData(\n    responseObj.ticket,\n    path,\n    timestamp,\n    responseObj.ts_sign,\n    responseObj.ec_privateKey,\n    responseObj.certificate,\n  );\n\n  return {\n    headers_bd_ticket_guard_client_data: headersBdTicketGuardClientData,\n    headers_bd_ticket_guard_ree_public_key: responseObj.bd_ticket_guard_ree_public_key,\n  };\n}\n\nmodule.exports = {\n  hexToBuffer,\n  concatByteArrays,\n  sliceArray,\n  customHexBase64,\n  Lt: hexToBuffer,\n  Kt: concatByteArrays,\n  Rt: sliceArray,\n  hmacSha256Sign,\n  hmac_sha256_sign: hmacSha256Sign,\n  getF,\n  get_f: getF,\n  ne,\n  y: customHexBase64,\n  getHeadersBdTicketGuardClientData,\n  get_headers_bd_ticket_guard_client_data: getHeadersBdTicketGuardClientData,\n  getBdV2,\n  get_bd_v2: getBdV2,\n};","/**\n * 抖音 X-secsdk-csrf-token 生成工具\n * \n * 生成规则：\n * 1. 从 Cookie 中提取关键参数（sessionid, uid_tt, msToken 等）\n * 2. 结合时间戳和请求路径\n * 3. 使用 MD5 加密\n * 4. 转换为16进制字符串\n */\n\nconst crypto = require('crypto');\n\n/**\n * 生成 X-secsdk-csrf-token\n * @param {Object} options 配置项\n * @param {Array} options.cookies Cookie 数组\n * @param {string} options.url 请求 URL（可选）\n * @param {string} options.method 请求方法（可选，默认 'POST'）\n * @returns {string} CSRF Token\n */\nfunction generateCsrfToken(options = {}) {\n    const { cookies = [], url = '', method = 'POST' } = options;\n    \n    // 1. 从 cookies 中提取关键字段\n    const sessionid = getCookieValue(cookies, 'sessionid') || '';\n    const uid_tt = getCookieValue(cookies, 'uid_tt') || '';\n    const msToken = getCookieValue(cookies, 'msToken') || '';\n    const ttwid = getCookieValue(cookies, 'ttwid') || '';\n    \n    // 2. 生成时间戳（秒级）\n    const timestamp = Math.floor(Date.now() / 1000);\n    \n    // 3. 构建签名字符串\n    // 格式：0001{version}{timestamp_hex}{random}{hash}\n    const version = '0000';  // 版本号\n    const timestampHex = timestamp.toString(16).padStart(8, '0');\n    const random = generateRandomHex(8);  // 8位随机数\n    \n    // 4. 计算哈希值\n    const signData = `${method}${url}${sessionid}${uid_tt}${msToken}${ttwid}${timestamp}`;\n    const hash = crypto.createHash('md5').update(signData).digest('hex');\n    \n    // 5. 组合最终 token\n    // 格式：0001 + version(4位) + timestamp(8位) + random(8位) + hash(32位)\n    const csrfToken = `0001${version}${timestampHex}${random}${hash}`;\n    \n    return csrfToken;\n}\n\n/**\n * 从 Cookie 数组中获取指定名称的值\n * @param {Array} cookies Cookie 数组\n * @param {string} name Cookie 名称\n * @returns {string} Cookie 值\n */\nfunction getCookieValue(cookies, name) {\n    const cookie = cookies.find(c => c.name === name);\n    return cookie ? cookie.value : '';\n}\n\n/**\n * 生成随机16进制字符串\n * @param {number} length 长度\n * @returns {string} 随机16进制字符串\n */\nfunction generateRandomHex(length) {\n    const bytes = crypto.randomBytes(Math.ceil(length / 2));\n    return bytes.toString('hex').slice(0, length);\n}\n\n/**\n * 高级版本：基于真实浏览器环境的 token 生成\n * 这个版本更接近真实浏览器的生成逻辑\n * @param {Object} options 配置项\n * @returns {string} CSRF Token\n */\nfunction generateCsrfTokenAdvanced(options = {}) {\n    const { cookies = [], url = '', method = 'POST', userAgent = '' } = options;\n    \n    // 提取关键 Cookie\n    const sessionid = getCookieValue(cookies, 'sessionid') || '';\n    const sid_guard = getCookieValue(cookies, 'sid_guard') || '';\n    const uid_tt = getCookieValue(cookies, 'uid_tt') || '';\n    const msToken = getCookieValue(cookies, 'msToken') || '';\n    const ttwid = getCookieValue(cookies, 'ttwid') || '';\n    const odin_tt = getCookieValue(cookies, 'odin_tt') || '';\n    \n    // 当前时间戳（毫秒）\n    const timestamp = Date.now();\n    const timestampSec = Math.floor(timestamp / 1000);\n    \n    // 解析 URL 路径\n    let pathname = '';\n    try {\n        const urlObj = new URL(url, 'https://creator.douyin.com');\n        pathname = urlObj.pathname;\n    } catch (e) {\n        pathname = url;\n    }\n    \n    // 构建签名字符串（按照抖音 SecSDK 的规则）\n    const signParts = [\n        method.toUpperCase(),\n        pathname,\n        timestampSec,\n        sessionid,\n        sid_guard,\n        uid_tt,\n        msToken,\n        ttwid,\n        odin_tt,\n        userAgent\n    ].filter(Boolean);\n    \n    const signData = signParts.join('|');\n    \n    // 双重 MD5 加密（增强安全性）\n    const firstHash = crypto.createHash('md5').update(signData).digest('hex');\n    const secondHash = crypto.createHash('md5').update(firstHash + timestamp).digest('hex');\n    \n    // 生成最终 token\n    // 格式：0001 + 0000(version) + timestamp_hex(8) + random(8) + hash(32)\n    const timestampHex = timestampSec.toString(16).padStart(8, '0');\n    const random = generateRandomHex(16);\n    \n    return `0001000${timestampHex.slice(0,2)}${random}${secondHash}`;\n}\n\n/**\n * 简化版本：使用固定算法生成 token\n * 适合快速测试和调试\n * @param {Array} cookies Cookie 数组\n * @returns {string} CSRF Token\n */\nfunction generateCsrfTokenSimple(cookies = []) {\n    const sessionid = getCookieValue(cookies, 'sessionid') || 'default_session';\n    const timestamp = Math.floor(Date.now() / 1000);\n    const random = generateRandomHex(32);\n    \n    const hash = crypto.createHash('md5')\n        .update(`${sessionid}${timestamp}${random}`)\n        .digest('hex');\n    \n    const timestampHex = timestamp.toString(16).padStart(8, '0');\n    \n    return `0001000${timestampHex}${random}${hash}`.slice(0, 90);\n}\n\n/**\n * 从真实的 token 中提取时间戳（用于调试）\n * @param {string} token CSRF Token\n * @returns {Object} 解析结果\n */\nfunction parseCsrfToken(token) {\n    if (!token || token.length < 20) {\n        return null;\n    }\n    \n    try {\n        const prefix = token.slice(0, 4);  // 0001\n        const version = token.slice(4, 8);  // 版本号\n        const timestampHex = token.slice(8, 16);  // 时间戳（16进制）\n        const timestamp = parseInt(timestampHex, 16);\n        const date = new Date(timestamp * 1000);\n        \n        return {\n            prefix,\n            version,\n            timestamp,\n            date: date.toISOString(),\n            isValid: prefix === '0001'\n        };\n    } catch (e) {\n        return null;\n    }\n}\n\nmodule.exports = {\n    generateCsrfToken,\n    generateCsrfTokenAdvanced,\n    generateCsrfTokenSimple,\n    parseCsrfToken\n};\n","const crypto = require('crypto');\n\nconst RSA_PUBLIC_KEY_PEM = `-----BEGIN RSA PUBLIC KEY-----\nMIIBCgKCAQEA4+dvvY7uM+opc+nLG/DumSeFo7aVcIm1LO+mUIrWprRzP0a1GpEQ\n4qtO9MRf/lwEIx38+4BZ4XOGzevVtuUvfIOUE7ATtQW7FKJf5PnSLCI6/k0vl1FC\nLUSVmEP6qPJrIjZ4zXoqi3yuNZ+1odbRA//GHgcgSyyyaLqzwjkpWGXouMYmvYsS\nppk/fv2EWABstPNxWa4EOBCadTUPkXNQ76NBEP9xzfJS20wiDv1oS/vKvrSUpWcJ\nnazkkBvqQbbAqVbQFTF/DPikppu6ZT6lGIXvJKCreeFiHA2qK6tS18SWVHW9ARz1\n+pjB1eqIIYtohWpT2B40OC4O8tVeBAnbiQIDAQAB\n-----END RSA PUBLIC KEY-----`;\n\nfunction normalizeRuntime(runtime = {}) {\n  return {\n    nowSeconds: typeof runtime.nowSeconds === 'function'\n      ? runtime.nowSeconds\n      : () => Math.trunc(Date.now() / 1000),\n    randomBytes: typeof runtime.randomBytes === 'function'\n      ? runtime.randomBytes\n      : (size) => crypto.randomBytes(size),\n    rsaEncryptBase64: typeof runtime.rsaEncryptBase64 === 'function'\n      ? runtime.rsaEncryptBase64\n      : (plaintext, publicKeyPem) => rsaEncryptBase64(plaintext, publicKeyPem),\n  };\n}\n\nfunction hexToBytes(hexStr) {\n  let normalized = String(hexStr).trim();\n  if (normalized.toLowerCase().startsWith('0x')) {\n    normalized = normalized.slice(2);\n  }\n  return Buffer.from(normalized, 'hex');\n}\n\nfunction importAesCbcKey(raw) {\n  const key = Buffer.from(raw);\n  if (![16, 24, 32].includes(key.length)) {\n    throw new Error('AES key must be 16/24/32 bytes for 128/192/256-bit');\n  }\n  return key;\n}\n\nfunction bytesToB64(data) {\n  return Buffer.from(data).toString('base64');\n}\n\nfunction aesCbcEncrypt(plainText, keyHex, ivBytes) {\n  const key = importAesCbcKey(hexToBytes(keyHex));\n  const iv = Buffer.from(ivBytes);\n  if (iv.length !== 16) {\n    throw new Error('AES-CBC IV must be exactly 16 bytes');\n  }\n\n  const cipher = crypto.createCipheriv(`aes-${key.length * 8}-cbc`, key, iv);\n  const ctBytes = Buffer.concat([\n    cipher.update(Buffer.from(String(plainText), 'utf8')),\n    cipher.final(),\n  ]);\n  const ivPlusCt = Buffer.concat([iv, ctBytes]);\n\n  return {\n    cipherText: bytesToB64(ivPlusCt),\n    encryptedData: bytesToB64(ctBytes),\n    iv: bytesToB64(iv),\n  };\n}\n\nfunction bytesToHex(data) {\n  return Buffer.from(data).toString('hex');\n}\n\nfunction rsaEncryptBase64(plaintext, publicKeyPem) {\n  const encrypted = crypto.publicEncrypt(\n    {\n      key: publicKeyPem,\n      padding: crypto.constants.RSA_PKCS1_PADDING,\n    },\n    Buffer.from(String(plaintext), 'utf8'),\n  );\n  return bytesToB64(encrypted);\n}\n\nfunction aesCbcEncryptWithRandomIv(plaintext, keyHex, runtimeOptions) {\n  const runtime = normalizeRuntime(runtimeOptions);\n  const iv = Buffer.from(runtime.randomBytes(16));\n  if (iv.length !== 16) {\n    throw new Error('Random IV must be exactly 16 bytes');\n  }\n  return aesCbcEncrypt(plaintext, keyHex, iv);\n}\n\nfunction encryptWithRsaPublicKeyBase64(plaintext, runtimeOptions) {\n  const runtime = normalizeRuntime(runtimeOptions);\n  const result = runtime.rsaEncryptBase64(plaintext, RSA_PUBLIC_KEY_PEM);\n  if (!result) {\n    throw new Error('RSA encrypt failed');\n  }\n  return result;\n}\n\nfunction dtraitToken(path, runtimeOptions) {\n  const runtime = normalizeRuntime(runtimeOptions);\n  const payload = {\n    dtrait: 'IAAAAAAA',\n    timestamp: Math.trunc(runtime.nowSeconds()),\n    sdkVersion: '1.0.31',\n    path: String(path),\n  };\n  const jsonText = JSON.stringify(payload);\n\n  const randKeyBytes = Buffer.from(runtime.randomBytes(16));\n  if (randKeyBytes.length !== 16) {\n    throw new Error('Random AES key must be exactly 16 bytes');\n  }\n  const keyHex = bytesToHex(randKeyBytes);\n\n  const enc = aesCbcEncryptWithRandomIv(jsonText, keyHex, runtime);\n  const rsaB64 = encryptWithRsaPublicKeyBase64(keyHex, runtime);\n  return `d0_${rsaB64}_${enc.cipherText}`;\n}\n\nfunction generateDtrait(path, runtimeOptions) {\n  return dtraitToken(path, runtimeOptions);\n}\n\nmodule.exports = {\n  RSA_PUBLIC_KEY_PEM,\n  normalizeRuntime,\n  hexToBytes,\n  hex_to_bytes: hexToBytes,\n  importAesCbcKey,\n  import_aes_cbc_key: importAesCbcKey,\n  bytesToB64,\n  bytes_to_b64: bytesToB64,\n  aesCbcEncrypt,\n  aes_cbc_encrypt: aesCbcEncrypt,\n  bytesToHex,\n  bytes_to_hex: bytesToHex,\n  rsaEncryptBase64,\n  rsa_encrypt_base64: rsaEncryptBase64,\n  aesCbcEncryptWithRandomIv,\n  aes_cbc_encrypt_with_random_iv: aesCbcEncryptWithRandomIv,\n  encryptWithRsaPublicKeyBase64,\n  encrypt_with_rsa_public_key_base64: encryptWithRsaPublicKeyBase64,\n  dtraitToken,\n  dtrait_token: dtraitToken,\n  generateDtrait,\n  generate_dtrait: generateDtrait,\n};\n","const crypto = require('crypto');\n\n// 黑名单头部（不参与签名）\nconst UNSIGNABLE_HEADERS = [\n    'authorization',\n    'content-type',\n    'content-length',\n    'user-agent',\n    'presigned-expires',\n    'expect',\n    'x-amzn-trace-id'\n];\n\n// SHA256 hash\nfunction sha256(data) {\n    return crypto.createHash('sha256').update(data, 'utf8').digest('hex');\n}\n\n// HMAC SHA256\nfunction hmac(key, data) {\n    return crypto.createHmac('sha256', key).update(data, 'utf8').digest();\n}\n\n// 获取签名密钥\nfunction getSigningKey(secretAccessKey, dateStamp, region, service) {\n    const kDate = hmac('AWS4' + secretAccessKey, dateStamp);\n    const kRegion = hmac(kDate, region);\n    const kService = hmac(kRegion, service);\n    const kSigning = hmac(kService, 'aws4_request');\n    return kSigning;\n}\n\n// 判断头部是否可签名\nfunction isSignableHeader(header) {\n    const lowerHeader = header.toLowerCase();\n    return lowerHeader.startsWith('x-amz-') || !UNSIGNABLE_HEADERS.includes(lowerHeader);\n}\n\n// 规范化头部值（移除多余空格）\nfunction canonicalHeaderValues(value) {\n    return value.replace(/\\s+/g, ' ').replace(/^\\s+|\\s+$/g, '');\n}\n\n// 生成 Canonical Headers\nfunction canonicalHeaders(headers) {\n    const headerPairs = [];\n    \n    Object.keys(headers).forEach(key => {\n        headerPairs.push([key, headers[key]]);\n    });\n    \n    // 按头部名称排序\n    headerPairs.sort((a, b) => {\n        return a[0].toLowerCase() < b[0].toLowerCase() ? -1 : 1;\n    });\n    \n    const result = [];\n    headerPairs.forEach(([key, value]) => {\n        const lowerKey = key.toLowerCase();\n        if (isSignableHeader(lowerKey)) {\n            result.push(`${lowerKey}:${canonicalHeaderValues(value.toString())}`);\n        }\n    });\n    \n    return result.join('\\n');\n}\n\n// 生成 Signed Headers\nfunction signedHeaders(headers) {\n    const headerNames = [];\n    \n    Object.keys(headers).forEach(key => {\n        const lowerKey = key.toLowerCase();\n        if (isSignableHeader(lowerKey)) {\n            headerNames.push(lowerKey);\n        }\n    });\n    \n    return headerNames.sort().join(';');\n}\n\n// 生成 Canonical Query String\nexport function canonicalQueryString(params) {\n    if (!params || Object.keys(params).length === 0) {\n        return '';\n    }\n    \n    return Object.keys(params)\n        .sort()\n        .map(key => {\n            const value = params[key];\n            return encodeURIComponent(key) + '=' + encodeURIComponent(String(value));\n        })\n        .join('&');\n}\n\n// ISO8601 时间格式\nfunction iso8601(date) {\n    return date.toISOString().replace(/\\.\\d{3}Z$/, 'Z');\n}\n\n// 生成随机字符串\nexport function randomS() {\n    const pool = '0123456789abcdefghijklmnopqrstuvwxyz';\n    let s = '';\n    for (let i = 0; i < 11; i++) {\n        s += pool.charAt(Math.floor(Math.random() * pool.length));\n    }\n    return s;\n}\n\n// 主函数：生成 Authorization\nexport function generateAuthorization(config) {\n    const {\n        accessKeyId,\n        secretAccessKey,\n        sessionToken,\n        region,\n        service,\n        method = 'GET',\n        pathname = '/',\n        params = {},\n        body = '',\n        headers = {}\n    } = config;\n    \n    // 1. 准备时间\n    const now = new Date();\n    const amzDate = iso8601(now).replace(/[:\\-]|\\.\\d{3}/g, '');\n    const dateStamp = amzDate.substr(0, 8);\n    \n    // 2. 准备请求头\n    const requestHeaders = {\n        ...headers,\n        'X-Amz-Date': amzDate\n    };\n    \n    if (sessionToken) {\n        requestHeaders['x-amz-security-token'] = sessionToken;\n    }\n    \n    // 如果有 body，添加 content hash\n    if (body) {\n        requestHeaders['X-Amz-Content-Sha256'] = sha256(JSON.stringify(body));\n    }\n    \n    // 3. 生成 Canonical Request\n    const canonicalQueryStr = canonicalQueryString(params);\n    const canonicalHeadersStr = canonicalHeaders(requestHeaders);\n    const signedHeadersStr = signedHeaders(requestHeaders);\n    const payloadHash = body ? sha256(JSON.stringify(body)) : sha256('');\n    \n    const canonicalRequest = [\n        method.toUpperCase(),\n        pathname,\n        canonicalQueryStr,\n        canonicalHeadersStr + '\\n',\n        signedHeadersStr,\n        payloadHash\n    ].join('\\n');\n    \n    // console.log('=== Canonical Request ===');\n    // console.log(canonicalRequest);\n    // console.log('========================\\n');\n    \n    // 4. 生成 String to Sign\n    const algorithm = 'AWS4-HMAC-SHA256';\n    const credentialScope = `${dateStamp}/${region}/${service}/aws4_request`;\n    const canonicalRequestHash = sha256(canonicalRequest);\n    \n    const stringToSign = [\n        algorithm,\n        amzDate,\n        credentialScope,\n        canonicalRequestHash\n    ].join('\\n');\n    \n    // console.log('=== String to Sign ===');\n    // console.log(stringToSign);\n    // console.log('======================\\n');\n    \n    // 5. 计算签名\n    const signingKey = getSigningKey(secretAccessKey, dateStamp, region, service);\n    const signature = crypto.createHmac('sha256', signingKey)\n        .update(stringToSign, 'utf8')\n        .digest('hex');\n    \n    // console.log('=== Signature ===');\n    // console.log(signature);\n    // console.log('=================\\n');\n    \n    // 6. 生成 Authorization 头\n    const authorization = `${algorithm} Credential=${accessKeyId}/${credentialScope}, SignedHeaders=${signedHeadersStr}, Signature=${signature}`;\n    \n    return {\n        authorization,\n        headers: requestHeaders,\n        amzDate\n    };\n}\nconst fs = require('fs');\n\nexport function calculateFileCrc32(filePath) {\n    const data = fs.readFileSync(filePath);\n    const crc32Value = crc32(data);\n    const crc32Hex = crc32Value.toString(16);\n    return crc32Hex;\n}\n\nfunction crc32(data) {\n    const CRC_TABLE = [];\n    for (let i = 0; i < 256; i++) {\n        let crc = i;\n        for (let j = 0; j < 8; j++) {\n            crc = (crc & 1) ? (0xEDB88320 ^ (crc >>> 1)) : (crc >>> 1);\n        }\n        CRC_TABLE.push(crc >>> 0);\n    }\n\n    let crc = 0xFFFFFFFF;\n    for (let i = 0; i < data.length; i++) {\n        const byte = data[i];\n        const index = (crc ^ byte) & 0xFF;\n        crc = (CRC_TABLE[index] ^ (crc >>> 8)) >>> 0;\n    }\n\n    crc = (crc ^ 0xFFFFFFFF) >>> 0;\n    return crc;\n}\n\n","const a0_0x45db08=a0_0x4b0d;function a0_0x4b0d(_0x2bd218,_0x316d6){const _0x165410=a0_0x1654();return a0_0x4b0d=function(_0x4b0d73,_0x5794db){_0x4b0d73=_0x4b0d73-0x84;let _0x1859e3=_0x165410[_0x4b0d73];return _0x1859e3;},a0_0x4b0d(_0x2bd218,_0x316d6);}(function(_0x1b2596,_0x16c0e0){const _0x1227f1=a0_0x4b0d,_0x46fb59=_0x1b2596();while(!![]){try{const _0x383dd4=parseInt(_0x1227f1(0x85))/0x1+-parseInt(_0x1227f1(0xb0))/0x2*(-parseInt(_0x1227f1(0x9b))/0x3)+parseInt(_0x1227f1(0xaa))/0x4+-parseInt(_0x1227f1(0xa0))/0x5*(parseInt(_0x1227f1(0x9d))/0x6)+parseInt(_0x1227f1(0x86))/0x7+-parseInt(_0x1227f1(0xab))/0x8*(parseInt(_0x1227f1(0x8d))/0x9)+parseInt(_0x1227f1(0x91))/0xa;if(_0x383dd4===_0x16c0e0)break;else _0x46fb59['push'](_0x46fb59['shift']());}catch(_0x4fc071){_0x46fb59['push'](_0x46fb59['shift']());}}}(a0_0x1654,0x807f8));const Random=Math['random'](),Ts=Date['now'](),Sm3DoneTs=Ts+0x30,xhrParaDoneTs=Ts+0x109,xhrReqDoneTs=Ts+0x10af0;function a0_0x1654(){const _0x46e031=['floor','dhzx','map','_compress','charCodeAt','min','invalid\\x20j\\x20for\\x20constant\\x20Tj','reset','662|856|1920|977|1920|977|1920|1080|Linux\\x20x86_64','6GqxJwW','error','1578UVUSyW','fromCharCode','replace','17445vhaSjq','isNaN','toString','push','length','write','reduce','charAt','reg','split','2475936ufrFMu','2137592VTpBSF','join','Dkdpgh2ZmsQB80/MfvV36XI1R45-WUAlEixNLwoqYTOPuzKFjJnry79HbGcaStCe','exports','fmUmtNjj1OfTrR716RULEyQaLPrOG1jpZz0/4Tyzr7/IbcOXs8PxVxHmrAIsIMm6IfTserj+JgCbPHUssUmedGKwCrIziubgSU0FT1MmqPOZXcPDGB3xUyq+vaM7HZyYgJtKyMR=','48064qVwnFy','concat','prototype','167524mhzzJE','5968354Oyyfma','chunk','string','forEach','size','slice','sort','9BjSPrC','sum','repeat','splice','239400JtRPVl'];a0_0x1654=function(){return _0x46e031;};return a0_0x1654();}class SM3Hasher{constructor(){const _0x468533=a0_0x4b0d;this[_0x468533(0xa8)]=new Array(0x8),this[_0x468533(0x87)]=[],this[_0x468533(0x8a)]=0x0,this[_0x468533(0x99)]();}[a0_0x45db08(0x99)](){const _0x11e792=a0_0x45db08;this[_0x11e792(0xa8)][0x0]=0x7380166f,this[_0x11e792(0xa8)][0x1]=0x4914b2b9,this['reg'][0x2]=0x172442d7,this[_0x11e792(0xa8)][0x3]=0xda8a0600,this['reg'][0x4]=0xa96f30bc,this[_0x11e792(0xa8)][0x5]=0x163138aa,this[_0x11e792(0xa8)][0x6]=0xe38dee4d,this[_0x11e792(0xa8)][0x7]=0xb0fb0e4e,this[_0x11e792(0x87)]=[],this[_0x11e792(0x8a)]=0x0;}[a0_0x45db08(0xa5)](_0x22d1ef){const _0x182388=a0_0x45db08;var _0x2ded18=_0x182388(0x88)==typeof _0x22d1ef?function(_0x5e491d){const _0x12d911=_0x182388;var _0x5795ab=encodeURIComponent(_0x5e491d)[_0x12d911(0x9f)](/%([0-9A-F]{2})/g,function(_0x22d98b,_0x5659da){const _0x357908=_0x12d911;return String[_0x357908(0x9e)]('0x'+_0x5659da);}),_0x5c0d1c=new Array(_0x5795ab['length']);return Array[_0x12d911(0x84)][_0x12d911(0x89)]['call'](_0x5795ab,function(_0x2e8583,_0x28f42f){const _0x4b2a85=_0x12d911;_0x5c0d1c[_0x28f42f]=_0x2e8583[_0x4b2a85(0x96)](0x0);}),_0x5c0d1c;}(_0x22d1ef):_0x22d1ef;this['size']+=_0x2ded18['length'];var _0xffe4ea=0x40-this[_0x182388(0x87)][_0x182388(0xa4)];if(_0x2ded18[_0x182388(0xa4)]<_0xffe4ea)this['chunk']=this[_0x182388(0x87)][_0x182388(0xb1)](_0x2ded18);else{for(this['chunk']=this[_0x182388(0x87)][_0x182388(0xb1)](_0x2ded18[_0x182388(0x8b)](0x0,_0xffe4ea));this[_0x182388(0x87)]['length']>=0x40;)this['_compress'](this[_0x182388(0x87)]),_0xffe4ea<_0x2ded18[_0x182388(0xa4)]?this['chunk']=_0x2ded18[_0x182388(0x8b)](_0xffe4ea,Math[_0x182388(0x97)](_0xffe4ea+0x40,_0x2ded18['length'])):this[_0x182388(0x87)]=[],_0xffe4ea+=0x40;}}[a0_0x45db08(0x8e)](_0x34ff8d,_0xecf9f6){const _0x3ddb20=a0_0x45db08;_0x34ff8d&&(this[_0x3ddb20(0x99)](),this[_0x3ddb20(0xa5)](_0x34ff8d)),this['_fill']();for(var _0x28ac8a=0x0;_0x28ac8a<this[_0x3ddb20(0x87)][_0x3ddb20(0xa4)];_0x28ac8a+=0x40)this[_0x3ddb20(0x95)](this[_0x3ddb20(0x87)]['slice'](_0x28ac8a,_0x28ac8a+0x40));var _0x117621,_0x335539,_0x450e58,_0x5b1ad8=null;if('hex'==_0xecf9f6){_0x5b1ad8='';for(_0x28ac8a=0x0;_0x28ac8a<0x8;_0x28ac8a++)_0x5b1ad8+=(_0x117621=this[_0x3ddb20(0xa8)][_0x28ac8a][_0x3ddb20(0xa2)](0x10),_0x335539=0x8,_0x450e58='0',_0x117621[_0x3ddb20(0xa4)]>=_0x335539?_0x117621:_0x450e58[_0x3ddb20(0x8f)](_0x335539-_0x117621[_0x3ddb20(0xa4)])+_0x117621);}else for(_0x5b1ad8=new Array(0x20),_0x28ac8a=0x0;_0x28ac8a<0x8;_0x28ac8a++){var _0x46ad66=this[_0x3ddb20(0xa8)][_0x28ac8a];_0x5b1ad8[0x4*_0x28ac8a+0x3]=(0xff&_0x46ad66)>>>0x0,_0x46ad66>>>=0x8,_0x5b1ad8[0x4*_0x28ac8a+0x2]=(0xff&_0x46ad66)>>>0x0,_0x46ad66>>>=0x8,_0x5b1ad8[0x4*_0x28ac8a+0x1]=(0xff&_0x46ad66)>>>0x0,_0x46ad66>>>=0x8,_0x5b1ad8[0x4*_0x28ac8a]=(0xff&_0x46ad66)>>>0x0;}return this[_0x3ddb20(0x99)](),_0x5b1ad8;}['_fill'](){const _0xa844a0=a0_0x45db08;var _0x15bc36=0x8*this[_0xa844a0(0x8a)],_0x4a32f3=this['chunk'][_0xa844a0(0xa3)](0x80)%0x40;for(0x40-_0x4a32f3<0x8&&(_0x4a32f3-=0x40);_0x4a32f3<0x38;_0x4a32f3++)this[_0xa844a0(0x87)][_0xa844a0(0xa3)](0x0);for(var _0x36cc0b=0x0;_0x36cc0b<0x4;_0x36cc0b++){var _0xd7dcfe=Math[_0xa844a0(0x92)](_0x15bc36/0x100000000);this['chunk'][_0xa844a0(0xa3)](_0xd7dcfe>>>0x8*(0x3-_0x36cc0b)&0xff);}for(_0x36cc0b=0x0;_0x36cc0b<0x4;_0x36cc0b++)this[_0xa844a0(0x87)][_0xa844a0(0xa3)](_0x15bc36>>>0x8*(0x3-_0x36cc0b)&0xff);}[a0_0x45db08(0x95)](_0x1e530c){const _0x3c50af=a0_0x45db08;function _0x3da582(_0x14b06e,_0x4ec82e){return(_0x14b06e<<(_0x4ec82e%=0x20)|_0x14b06e>>>0x20-_0x4ec82e)>>>0x0;}function _0x489962(_0x5dd43e){const _0x744660=a0_0x4b0d;return 0x0<=_0x5dd43e&&_0x5dd43e<0x10?0x79cc4519:0x10<=_0x5dd43e&&_0x5dd43e<0x40?0x7a879d8a:void console[_0x744660(0x9c)](_0x744660(0x98));}function _0x197f71(_0x5e22dd,_0xfc800b,_0x1300f1,_0xed8891){const _0x3414cb=a0_0x4b0d;return 0x0<=_0x5e22dd&&_0x5e22dd<0x10?(_0xfc800b^_0x1300f1^_0xed8891)>>>0x0:0x10<=_0x5e22dd&&_0x5e22dd<0x40?(_0xfc800b&_0x1300f1|_0xfc800b&_0xed8891|_0x1300f1&_0xed8891)>>>0x0:(console[_0x3414cb(0x9c)]('invalid\\x20j\\x20for\\x20bool\\x20function\\x20FF'),0x0);}function _0x2f42fb(_0x326645,_0x2c63af,_0x558c0d,_0x4a902b){const _0x493bba=a0_0x4b0d;return 0x0<=_0x326645&&_0x326645<0x10?(_0x2c63af^_0x558c0d^_0x4a902b)>>>0x0:0x10<=_0x326645&&_0x326645<0x40?(_0x2c63af&_0x558c0d|~_0x2c63af&_0x4a902b)>>>0x0:(console[_0x493bba(0x9c)]('invalid\\x20j\\x20for\\x20bool\\x20function\\x20GG'),0x0);}if(_0x1e530c[_0x3c50af(0xa4)]<0x40){console[_0x3c50af(0x9c)]('compress\\x20error:\\x20not\\x20enough\\x20data');return;}else{for(var _0x23a9bd=function(_0x7114f5){for(var _0x49cf1f=new Array(0x84),_0x698c70=0x0;_0x698c70<0x10;_0x698c70++)_0x49cf1f[_0x698c70]=_0x7114f5[0x4*_0x698c70]<<0x18,_0x49cf1f[_0x698c70]|=_0x7114f5[0x4*_0x698c70+0x1]<<0x10,_0x49cf1f[_0x698c70]|=_0x7114f5[0x4*_0x698c70+0x2]<<0x8,_0x49cf1f[_0x698c70]|=_0x7114f5[0x4*_0x698c70+0x3],_0x49cf1f[_0x698c70]>>>=0x0;for(var _0xe5328=0x10;_0xe5328<0x44;_0xe5328++){var _0x2b58f2=_0x49cf1f[_0xe5328-0x10]^_0x49cf1f[_0xe5328-0x9]^_0x3da582(_0x49cf1f[_0xe5328-0x3],0xf);_0x2b58f2=_0x2b58f2^_0x3da582(_0x2b58f2,0xf)^_0x3da582(_0x2b58f2,0x17),_0x49cf1f[_0xe5328]=(_0x2b58f2^_0x3da582(_0x49cf1f[_0xe5328-0xd],0x7)^_0x49cf1f[_0xe5328-0x6])>>>0x0;}for(_0xe5328=0x0;_0xe5328<0x40;_0xe5328++)_0x49cf1f[_0xe5328+0x44]=(_0x49cf1f[_0xe5328]^_0x49cf1f[_0xe5328+0x4])>>>0x0;return _0x49cf1f;}(_0x1e530c),_0x17c086=this[_0x3c50af(0xa8)][_0x3c50af(0x8b)](0x0),_0x3621a2=0x0;_0x3621a2<0x40;_0x3621a2++){var _0x5959b9=_0x3da582(_0x17c086[0x0],0xc)+_0x17c086[0x4]+_0x3da582(_0x489962(_0x3621a2),_0x3621a2),_0x3b42ff=((_0x5959b9=_0x3da582(_0x5959b9=(0xffffffff&_0x5959b9)>>>0x0,0x7))^_0x3da582(_0x17c086[0x0],0xc))>>>0x0,_0x50d411=_0x197f71(_0x3621a2,_0x17c086[0x0],_0x17c086[0x1],_0x17c086[0x2]);_0x50d411=(0xffffffff&(_0x50d411=_0x50d411+_0x17c086[0x3]+_0x3b42ff+_0x23a9bd[_0x3621a2+0x44]))>>>0x0;var _0x910e21=_0x2f42fb(_0x3621a2,_0x17c086[0x4],_0x17c086[0x5],_0x17c086[0x6]);_0x910e21=(0xffffffff&(_0x910e21=_0x910e21+_0x17c086[0x7]+_0x5959b9+_0x23a9bd[_0x3621a2]))>>>0x0,_0x17c086[0x3]=_0x17c086[0x2],_0x17c086[0x2]=_0x3da582(_0x17c086[0x1],0x9),_0x17c086[0x1]=_0x17c086[0x0],_0x17c086[0x0]=_0x50d411,_0x17c086[0x7]=_0x17c086[0x6],_0x17c086[0x6]=_0x3da582(_0x17c086[0x5],0x13),_0x17c086[0x5]=_0x17c086[0x4],_0x17c086[0x4]=(_0x910e21^_0x3da582(_0x910e21,0x9)^_0x3da582(_0x910e21,0x11))>>>0x0;}for(var _0x459622=0x0;_0x459622<0x8;_0x459622++)this['reg'][_0x459622]=(this[_0x3c50af(0xa8)][_0x459622]^_0x17c086[_0x459622])>>>0x0;}}}function EnvData2CharCode(_0x58cd97,_0x23e1e0,_0x3ca6b2){const _0x56cb93=a0_0x45db08;let _0x2d49d4=Random*0xf0>>0x0>0x6d?(Random*0xf0>>0x0)+0x2:Random*0xf0>>0x0,_0x3f2013=Random*0xff>>0x0&0x4d|0x2|0x10|0x20|0x80,_0x4b8ded=[Random*0xffff&0xff&0xaa|[0x1,0x0,0x1,0xf][_0x56cb93(0x8b)](0x0,0x2)[0x0]&0x55,Random*0xffff&0xff&0x55|[0x1,0x0,0x1,0xf][_0x56cb93(0x8b)](0x0,0x2)[0x0]&0xaa,Random*0xffff>>0x8&0xaa|[0x1,0x0,0x1,0xf]['slice'](0x0,0x2)[0x1]&0x55,Random*0xffff>>0x8&0x55|[0x1,0x0,0x1,0xf][_0x56cb93(0x8b)](0x0,0x2)[0x1]&0xaa,_0x2d49d4&0xaa|[0x1,0x0,0x1,0xf][_0x56cb93(0x8b)](0x2,0x4)[0x0]&0x55,_0x2d49d4&0x55|[0x1,0x0,0x1,0xf][_0x56cb93(0x8b)](0x2,0x4)[0x0]&0xaa,_0x3f2013&0xaa|[0x1,0x0,0x1,0xf][_0x56cb93(0x8b)](0x2,0x4)[0x1]&0x55,_0x3f2013&0x55|[0x1,0x0,0x1,0xf][_0x56cb93(0x8b)](0x2,0x4)[0x1]&0xaa],_0x5bb315=_0x56cb93(0x9a)['split']('')[_0x56cb93(0x94)](_0x42b4c4=>_0x42b4c4[_0x56cb93(0x96)](0x0)),_0x1cdc95=((String(xhrParaDoneTs+0x3)&0xff)+',')[_0x56cb93(0xa9)]('')[_0x56cb93(0x94)](_0x58aa5d=>_0x58aa5d[_0x56cb93(0x96)](0x0));const _0x26ee7a=new SM3Hasher(),_0xe2d586=_0x26ee7a[_0x56cb93(0x8e)](_0x26ee7a['sum'](_0x58cd97+_0x56cb93(0x93))),_0x571095=_0x26ee7a[_0x56cb93(0x8e)](_0x26ee7a[_0x56cb93(0x8e)](_0x23e1e0+'dhzx')),_0x4dabdb=_0x26ee7a[_0x56cb93(0x8e)](_0x3ca6b2);let _0x4139e6=[0x29,(xhrReqDoneTs-0x190e5788800)/0x3e8/0x3c/0x3c/0x18/0xe>>0x0,0x6,xhrParaDoneTs-Ts+0x3&0xff,xhrParaDoneTs&0xff,xhrParaDoneTs>>0x8&0xff,xhrParaDoneTs>>0x10&0xff,xhrParaDoneTs>>0x18&0xff,xhrParaDoneTs/0x100/0x100/0x100/0x100&0xff,xhrParaDoneTs/0x100/0x100/0x100/0x100/0x100&0xff,xhrParaDoneTs/0x100/0x100/0x100/0x100/0x100&0xff%0x100&0xff,xhrParaDoneTs/0x100/0x100/0x100/0x100/0x100&0xff%0x100&0xff/0x100&0xff,[0xa,0x4,0x4,0x0,0x1][0x4]&0xff,[0xa,0x4,0x4,0x0,0x1][0x4]>>0x8&0xff,[0xa,0x4,0x4,0x0,0x1][0x0],[0xa,0x4,0x4,0x0,0x1][0x1],[0xa,0x4,0x4,0x0,0x1][0x2],[0xa,0x4,0x4,0x0,0x1][0x3],0x8&0xff,0x8>>0x8&0xff,0x8>>0x10&0xff,0x8>>0x18&0xff,_0xe2d586[0x9],_0xe2d586[0x12],0x3,_0xe2d586[0x3],_0x571095[0xa],_0x571095[0x13],0x4,_0x571095[0x4],_0x4dabdb[0xb],_0x4dabdb[0x15],0x5,_0x4dabdb[0x5],Sm3DoneTs&0xff,Sm3DoneTs>>0x8&0xff,Sm3DoneTs>>0x10&0xff,Sm3DoneTs>>0x18&0xff,Sm3DoneTs/0x100/0x100/0x100/0x100&0xff,Sm3DoneTs/0x100/0x100/0x100/0x100/0x100&0xff,0x3,0x6529&0xff,0x6529>>0x8&0xff,0x6529>>0x10&0xff,0x6529>>0x18&0xff,0x4cf&0xff,0x4cf>>0x8&0xff,0x4cf>>0x10&0xff,0x4cf>>0x18&0xff,_0x5bb315['length'],_0x5bb315['length'],0x0,_0x1cdc95[_0x56cb93(0xa4)],_0x1cdc95[_0x56cb93(0xa4)],0x0],_0x339170=[_0x4139e6[0x9],_0x4139e6[0x12],_0x4139e6[0x1e],_0x4139e6[0x23],_0x4139e6[0x2f],_0x4139e6[0x4],_0x4139e6[0x2c],_0x4139e6[0x13],_0x4139e6[0xa],_0x4139e6[0x17],_0x4139e6[0xc],_0x4139e6[0x28],_0x4139e6[0x19],_0x4139e6[0x2a],_0x4139e6[0x3],_0x4139e6[0x16],_0x4139e6[0x26],_0x4139e6[0x15],_0x4139e6[0x5],_0x4139e6[0x2d],_0x4139e6[0x1],_0x4139e6[0x1d],_0x4139e6[0x6],_0x4139e6[0x2b],_0x4139e6[0x21],_0x4139e6[0xe],_0x4139e6[0x24],_0x4139e6[0x25],_0x4139e6[0x2],_0x4139e6[0x2e],_0x4139e6[0xf],_0x4139e6[0x30],_0x4139e6[0x1f],_0x4139e6[0x1a],_0x4139e6[0x10],_0x4139e6[0xd],_0x4139e6[0x8],_0x4139e6[0x29],_0x4139e6[0x1b],_0x4139e6[0x11],_0x4139e6[0x27],_0x4139e6[0x14],_0x4139e6[0xb],_0x4139e6[0x0],_0x4139e6[0x22],_0x4139e6[0x7],_0x4139e6[0x32],_0x4139e6[0x33],_0x4139e6[0x35],_0x4139e6[0x36]];function _0x56e1cd(_0x24b6d5,_0x196cf7){const _0x2eb1f3=_0x56cb93;return _0x196cf7[_0x2eb1f3(0x8c)]((_0x2171ba,_0x925e58)=>_0x925e58-_0x2171ba)[_0x2eb1f3(0x89)](_0x540dbd=>{const _0x2fbb10=_0x2eb1f3;_0x540dbd>=0x0&&_0x540dbd<_0x24b6d5[_0x2fbb10(0xa4)]&&_0x24b6d5[_0x2fbb10(0x90)](_0x540dbd,0x1);}),_0x24b6d5;}let _0x41ebdd=_0x4b8ded[_0x56cb93(0xb1)](_0x56e1cd(_0x4139e6,[0x18,0x1c,0x20,0x31,0x34])),_0x42a240=_0x41ebdd[_0x56cb93(0xa6)]((_0x49ec53,_0x3d9ba0)=>_0x49ec53^_0x3d9ba0),_0xeaa831=_0x339170['concat'](_0x5bb315,_0x1cdc95,_0x42a240),_0x477e24=[],_0x3bd924=0x0;for(let _0xa7bf19=0x0;_0xa7bf19+0x2<_0xeaa831[_0x56cb93(0xa4)];){_0x477e24[_0x56cb93(0xa3)](Random*0x3e8&0xff&0x91|_0xeaa831[_0xa7bf19++]&0x6e),_0x477e24['push'](Random*0x3e8&0xff&0x42|_0xeaa831[_0xa7bf19++]&0xbd),_0x477e24[_0x56cb93(0xa3)](Random*0x3e8&0xff&0x2c|_0xeaa831[_0xa7bf19++]&0xd3),_0x477e24[_0x56cb93(0xa3)](_0xeaa831[_0xa7bf19-0x3]&0x91|_0xeaa831[_0xa7bf19-0x2]&0x42|_0xeaa831[_0xa7bf19-0x1]&0x2c),_0x3bd924+=0x3;}let _0x23c273=_0x4b8ded[_0x56cb93(0xb1)](_0x477e24,_0xeaa831[_0x56cb93(0x8b)](_0x3bd924,_0xeaa831[_0x56cb93(0xa4)]));return _0x23c273[_0x56cb93(0x94)](_0x4d13ab=>String['fromCharCode'](_0x4d13ab))[_0x56cb93(0xac)]('');}function Base2Data(_0x348aa6){const _0x2bc7c7=a0_0x45db08;let _0x874207=[Random*0xffff&0xff&0xaa|[0x3,0x52][0x0]&0x55,Random*0xffff&0xff&0x55|[0x3,0x52][0x0]&0xaa,Random*0x28>>0x0&0xaa|[0x3,0x52][0x1]&0x55,Random*0x28>>0x0&0x55|[0x3,0x52][0x1]&0xaa][_0x2bc7c7(0x94)](_0x224d00=>{const _0x31697c=_0x2bc7c7;return String[_0x31697c(0x9e)](_0x224d00);})[_0x2bc7c7(0xac)](''),_0x235e4f=[0xff,0xfe,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf3,0xf2,0xf1,0xf0,0xef,0xee,0xed,0xec,0xeb,0xea,0xe9,0xe8,0xe7,0xe6,0xe5,0xe4,0xe3,0xe2,0xe1,0xe0,0xdf,0xde,0xdd,0xdc,0xdb,0xda,0xd9,0xd8,0xd7,0xd6,0xd5,0xd4,0xd3,0xd2,0xd1,0xd0,0xcf,0xce,0xcd,0xcc,0xcb,0xca,0xc9,0xc8,0xc7,0xc6,0xc5,0xc4,0xc3,0xc2,0xc1,0xc0,0xbf,0xbe,0xbd,0xbc,0xbb,0xba,0xb9,0xb8,0xb7,0xb6,0xb5,0xb4,0xb3,0xb2,0xb1,0xb0,0xaf,0xae,0xad,0xac,0xab,0xaa,0xa9,0xa8,0xa7,0xa6,0xa5,0xa4,0xa3,0xa2,0xa1,0xa0,0x9f,0x9e,0x9d,0x9c,0x9b,0x9a,0x99,0x98,0x97,0x96,0x95,0x94,0x93,0x92,0x91,0x90,0x8f,0x8e,0x8d,0x8c,0x8b,0x8a,0x89,0x88,0x87,0x86,0x85,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7a,0x79,0x78,0x77,0x76,0x75,0x74,0x73,0x72,0x71,0x70,0x6f,0x6e,0x6d,0x6c,0x6b,0x6a,0x69,0x68,0x67,0x66,0x65,0x64,0x63,0x62,0x61,0x60,0x5f,0x5e,0x5d,0x5c,0x5b,0x5a,0x59,0x58,0x57,0x56,0x55,0x54,0x53,0x52,0x51,0x50,0x4f,0x4e,0x4d,0x4c,0x4b,0x4a,0x49,0x48,0x47,0x46,0x45,0x44,0x43,0x42,0x41,0x40,0x3f,0x3e,0x3d,0x3c,0x3b,0x3a,0x39,0x38,0x37,0x36,0x35,0x34,0x33,0x32,0x31,0x30,0x2f,0x2e,0x2d,0x2c,0x2b,0x2a,0x29,0x28,0x27,0x26,0x25,0x24,0x23,0x22,0x21,0x20,0x1f,0x1e,0x1d,0x1c,0x1b,0x1a,0x19,0x18,0x17,0x16,0x15,0x14,0x13,0x12,0x11,0x10,0xf,0xe,0xd,0xc,0xb,0xa,0x9,0x8,0x7,0x6,0x5,0x4,0x3,0x2,0x1,0x0];const _0x29dde1='Ó'[_0x2bc7c7(0x96)](0x0);let _0x4a74f1=0x0;for(let _0xef36c2=0x0;_0xef36c2<_0x235e4f[_0x2bc7c7(0xa4)];_0xef36c2++){let _0x4120e4=_0x235e4f[_0xef36c2];_0x4a74f1=(_0x4a74f1*_0x4120e4+_0x4a74f1+_0x29dde1)%0x100,[_0x235e4f[_0xef36c2],_0x235e4f[_0x4a74f1]]=[_0x235e4f[_0x4a74f1],_0x235e4f[_0xef36c2]];}let _0x39cb62=0x0,_0x5cbaf6='';for(let _0x29a672=0x0;_0x29a672<_0x348aa6[_0x2bc7c7(0xa4)];_0x29a672++){let _0x96c5ae=_0x348aa6[_0x2bc7c7(0x96)](_0x29a672),_0x46c34b=_0x29a672+0x1,_0x5d4cb4=_0x235e4f[_0x46c34b];[_0x235e4f[_0x46c34b],_0x235e4f[(_0x39cb62+_0x5d4cb4)%0x100]]=[_0x235e4f[(_0x39cb62+_0x5d4cb4)%0x100],_0x235e4f[_0x46c34b]];let _0x506f4f=_0x235e4f[(_0x235e4f[_0x46c34b]+_0x5d4cb4)%0x100];_0x39cb62=(_0x39cb62+_0x5d4cb4)%0x100,_0x5cbaf6+=String['fromCharCode'](_0x96c5ae^_0x506f4f);}return _0x874207+_0x5cbaf6;}function Data2A_B(_0x19ca6d){const _0x5d8d72=a0_0x45db08;let _0x225e7d=_0x5d8d72(0xad),_0x4f0a28='',_0x251d62=[0x3e,0x12a,0x10,0x0,0x4,0x9,0x10,0x0,0x5,0x36,0x0,0x5,0x3e,0x12b,0x1a,0x12c,0x36,0x0,0x5,0x3e,0x12d,0x1a,0x12e,0x36,0x0,0x5,0x3e,0x12f,0x1a,0x130,0x36,0x0,0x5,0x3e,0x131,0x1a,0x10c,0x36,0x0,0x5,0x3e,0x132,0x1a,0x128,0x36,0x0,0x5,0x36,0x0,0x3,0x4c,0x10,0x0,0x6,0x3e,0x24,0x10,0x0,0x7,0x17,0x0,0x10,0x0,0x9,0x36,0x0,0x2,0x4,0x19,0x36,0x0,0x9,0x17,0x3,0x31,0x43,0xe,0x9f,0x36,0x0,0x2,0x16,0x4,0xf7,0x22,0x0,0x9,0x3c,0xc,0x1,0x17,0xff,0x32,0x17,0x10,0x1f,0x36,0x0,0x2,0x16,0x4,0xf7,0x22,0x0,0x9,0x3c,0xc,0x1,0x17,0xff,0x32,0x17,0x8,0x1f,0x20,0x36,0x0,0x2,0x16,0x4,0xf7,0x22,0x0,0x9,0x3c,0xc,0x1,0x17,0xff,0x32,0x20,0x10,0x0,0x8,0x36,0x0,0x7,0x36,0x0,0x6,0x16,0x4,0x67,0x36,0x0,0x8,0x17,0xfc0000,0x32,0x17,0x12,0x33,0xc,0x1,0x31,0x22,0x0,0x7,0x48,0x2b,0x36,0x0,0x7,0x36,0x0,0x6,0x16,0x4,0x67,0x36,0x0,0x8,0x17,0x3f000,0x32,0x17,0xc,0x33,0xc,0x1,0x31,0x22,0x0,0x7,0x48,0x2b,0x36,0x0,0x7,0x36,0x0,0x6,0x16,0x4,0x67,0x36,0x0,0x8,0x17,0xfc0,0x32,0x17,0x6,0x33,0xc,0x1,0x31,0x22,0x0,0x7,0x48,0x2b,0x36,0x0,0x7,0x36,0x0,0x6,0x16,0x4,0x67,0x36,0x0,0x8,0x17,0x3f,0x32,0xc,0x1,0x31,0x22,0x0,0x7,0x48,0x2b,0x12,-0xad,0x36,0x0,0x2,0x4,0x19,0x36,0x0,0x9,0x0,0x17,0x0,0x13,0xe,0xa0,0x36,0x0,0x2,0x16,0x4,0xf7,0x22,0x0,0x9,0x3c,0xc,0x1,0x17,0xff,0x32,0x17,0x10,0x1f,0x36,0x0,0x2,0x4,0x19,0x36,0x0,0x9,0x13,0xe,0x13,0x36,0x0,0x2,0x16,0x4,0xf7,0x36,0x0,0x9,0xc,0x1,0x17,0xff,0x32,0x17,0x8,0x1f,0x12,0x2,0x17,0x0,0x20,0x10,0x0,0x8,0x36,0x0,0x7,0x36,0x0,0x6,0x16,0x4,0x67,0x36,0x0,0x8,0x17,0xfc0000,0x32,0x17,0x12,0x33,0xc,0x1,0x31,0x22,0x0,0x7,0x48,0x2b,0x36,0x0,0x7,0x36,0x0,0x6,0x16,0x4,0x67,0x36,0x0,0x8,0x17,0x3f000,0x32,0x17,0xc,0x33,0xc,0x1,0x31,0x22,0x0,0x7,0x48,0x2b,0x36,0x0,0x7,0x36,0x0,0x2,0x4,0x19,0x36,0x0,0x9,0x13,0xe,0x13,0x36,0x0,0x6,0x16,0x4,0x67,0x36,0x0,0x8,0x17,0xfc0,0x32,0x17,0x6,0x33,0xc,0x1,0x12,0x3,0x36,0x0,0x4,0x31,0x22,0x0,0x7,0x48,0x2b,0x36,0x0,0x7,0x36,0x0,0x4,0x31,0x22,0x0,0x7,0x48,0x2b,0x36,0x0,0x7,0x41];for(let _0x2b8eea=0x0;_0x2b8eea<_0x19ca6d['length'];_0x2b8eea+=0x3){const _0x3fca04=_0x19ca6d[_0x5d8d72(0x96)](_0x2b8eea),_0xb85a46=_0x19ca6d[_0x5d8d72(0x96)](_0x2b8eea+0x1),_0x4e702d=_0x19ca6d[_0x5d8d72(0x96)](_0x2b8eea+0x2),_0x4382e1=_0x3fca04<<_0x251d62[0x5e]|_0xb85a46<<_0x251d62[0x70]|_0x4e702d,_0x225aa0=(_0x4382e1&_0x251d62[0x93])>>_0x251d62[0x96];_0x4f0a28+=_0x225e7d[_0x5d8d72(0xa7)](_0x225aa0);const _0x5607b9=(_0x4382e1&_0x251d62[0xad])>>_0x251d62[0xb0];_0x4f0a28+=!Number[_0x5d8d72(0xa1)](_0x3fca04)?_0x225e7d[_0x5d8d72(0xa7)](_0x5607b9):'=';const _0x3fb7b7=(_0x4382e1&_0x251d62[0xc7])>>_0x251d62[0xca];_0x4f0a28+=!Number[_0x5d8d72(0xa1)](_0xb85a46)?_0x225e7d[_0x5d8d72(0xa7)](_0x3fb7b7):'=';const _0x425784=_0x4382e1&_0x251d62[0xe1];_0x4f0a28+=!Number[_0x5d8d72(0xa1)](_0x4e702d)?_0x225e7d[_0x5d8d72(0xa7)](_0x425784):'=';}return _0x4f0a28;}function GenAB(_0x315138,_0x1c32b3){const _0x206982=a0_0x45db08,_0x56536b=_0x206982(0xaf);return Data2A_B(Base2Data(EnvData2CharCode(_0x315138,_0x1c32b3,_0x56536b)));}module[a0_0x45db08(0xae)]=GenAB;","function encodeUtf8(e) {\n  let r2 = []\n  for (let a = encodeURIComponent(e), c = 0;c < a.length; c++) {\n    const d = a.charAt(c);\n    if (d === \"%\") {\n      const s = Number.parseInt(a.charAt(c + 1) + a.charAt(c + 2), 16);\n      r2.push(s), c += 2;\n    } else\n      r2.push(d.charCodeAt(0));\n  }\n  return r2;\n}\nvar c = [\n  \"Z\",\n  \"m\",\n  \"s\",\n  \"e\",\n  \"r\",\n  \"b\",\n  \"B\",\n  \"o\",\n  \"H\",\n  \"Q\",\n  \"t\",\n  \"N\",\n  \"P\",\n  \"+\",\n  \"w\",\n  \"O\",\n  \"c\",\n  \"z\",\n  \"a\",\n  \"/\",\n  \"L\",\n  \"p\",\n  \"n\",\n  \"g\",\n  \"G\",\n  \"8\",\n  \"y\",\n  \"J\",\n  \"q\",\n  \"4\",\n  \"2\",\n  \"K\",\n  \"W\",\n  \"Y\",\n  \"j\",\n  \"0\",\n  \"D\",\n  \"S\",\n  \"f\",\n  \"d\",\n  \"i\",\n  \"k\",\n  \"x\",\n  \"3\",\n  \"V\",\n  \"T\",\n  \"1\",\n  \"6\",\n  \"I\",\n  \"l\",\n  \"U\",\n  \"A\",\n  \"F\",\n  \"M\",\n  \"9\",\n  \"7\",\n  \"h\",\n  \"E\",\n  \"C\",\n  \"v\",\n  \"u\",\n  \"R\",\n  \"X\",\n  \"5\"\n];\nfunction tripletToBase64(e) {\n  return c[e >> 18 & 63] + c[e >> 12 & 63] + c[e >> 6 & 63] + c[63 & e];\n}\nfunction encodeChunk(e, a, r2) {\n  for (var c2, d = [], s = a;s < r2; s += 3)\n    c2 = (e[s] << 16 & 16711680) + (e[s + 1] << 8 & 65280) + (255 & e[s + 2]), d.push(tripletToBase64(c2));\n  return d.join(\"\");\n}\nfunction b64Encode(e) {\n  for (var a, r2 = e.length, d = r2 % 3, s = [], f = 16383, u = 0, l = r2 - d;u < l; u += f)\n    s.push(encodeChunk(e, u, u + f > l ? l : u + f));\n  return d === 1 ? (a = e[r2 - 1], s.push(c[a >> 2] + c[a << 4 & 63] + \"==\")) : d === 2 && (a = (e[r2 - 2] << 8) + e[r2 - 1], s.push(c[a >> 10] + c[a >> 4 & 63] + c[a << 2 & 63] + \"=\")), s.join(\"\");\n}\nfunction encode_mnsv2(mnsv2, type, platform, req_type) {\n  const f = {\n    x0: \"4.2.8\",\n    x1: type,\n    x2: platform,\n    x3: mnsv2,\n    x4: req_type\n  };\n  return \"XYS_\" + b64Encode(encodeUtf8(JSON.stringify(f)));\n}\nmodule.exports = encode_mnsv2\n","var _0x5e26 = ['1OWxddp', 'UMGUw', 'PqfSQ', 'bAFBA', 'RdZOW', 'VTKBBQFM', 'zxdmC', 'tmPwM', 'wiumi', 'ΙIΙ', 'MhWZS', 'setPrototypeOf', 'PyUdY', 'MjAjc', 'xPcsI', 'EJjtF', 'HGVol', 'yxiaz', 'prototype', 'OBxQX', 'apply', 'cXDFm', '[object\\x20Arguments]', 'BqDfU', 'IIΙ', 'HaYEx', 'XVDwO', 'jqHEd', 'eJIqr', 'BmFKC', 'vFVcP', 'length', 'rUBOo', 'kouSN', 'IVyLJ', 'UgkRn', '231578RZAPRo', 'iJhUX', 'slice', 'PWtFM', 'HkaBE', 'tYXYt', '321249iOnvFh', 'GADdy', 'IUXjo', 'AbRVN', 'Hcklz', 'hwjfK', 'kmriT', 'uMRFn', 'rttQd', '__bc', 'XxNlA', 'kqKnQ', 'mQhYz', 'sWKCl', 'construct', '260713ggTmlX', 'BYbSM', '3icXZpW', 'mZrHM', 'ZYFsA', 'ZQUMb', 'YtJvW', 'yuUMe', 'euoqz', 'jHwuh', 'CciCu', 'bind', 'JOCDJ', 'gqOZZ', 'IΙI', 'TNifp', 'CozeT', 'sham', 'SMVQv', 'ksZAC', '258308ThHaAN', 'qDuah', 'XBnTt', 'LzUba', '746795dpceNN', 'POWBq', 'Pwrup', 'BdEvR', 'fromCharCode', 'juZTe', 'iGuJR', 'bPojh', 'keys', 'lzlIX', 'yZBVv', 'yOsHa', 'err-209e10:\\x20+\\x20', 'QiARX', 'ABRVQ', 'xRIOr', 'XDOoR', 'oRfag', 'undefined', '1QZcWJQ', 'FdcjM', 'PczfC', 'ΙII', 'uixXY', 'ahwRp', 'SOoBb', 'RMSgu', 'hJTjo', 'yrDYx', 'dxzss', 'qfwSc', 'idiYu', 'DlfXv', 'UwVWk', 'PdbAc', 'push', 'gZeSF', 'nWekH', 'Kbhwt', 'ndGnJ', 'kPvxn', '121585KCTaKM', 'comGc', 'wnbho', 'QBTLS', 'NOFBb', 'SAYoa', 'XDLWq', 'cFexY', 'SygNu', 'function', 'HTOjf', 'hOwmN', 'EGbYA', 'suYWh', 'vvqfG', 'EJPiB', 'uCThz', 'FSTxk', 'Awtlv', 'XLyDS', 'qskTK', 'ZqAbc', 'PzXQN', 'sGqQS', 'JsjPA', 'tLDgE', 'QqSfw', 'xMjZi', 'Tthhs', 'IΙΙ', '742454TyjCbv', 'zmfqy', 'WLUSP', 'yrZuT', 'call', 'toString'];\nvar _0x4a41 = function(_0x1218b5, _0x5e2612) {\n    _0x1218b5 = _0x1218b5 - 0x0;\n    var _0x4a419f = _0x5e26[_0x1218b5];\n    return _0x4a419f;\n};\n(function(_0xe72767, _0xe7f5e) {\n    var _0x3fd162 = _0x4a41;\n    while (!![]) {\n        try {\n            var _0x257514 = parseInt(_0x3fd162(0x29)) * -parseInt(_0x3fd162(0x54)) + parseInt(_0x3fd162(0x14)) + parseInt(_0x3fd162(0x41)) + -parseInt(_0x3fd162(0x2b)) * parseInt(_0x3fd162(0x6a)) + -parseInt(_0x3fd162(0x1a)) + -parseInt(_0x3fd162(0x3d)) + parseInt(_0x3fd162(0x8e)) * parseInt(_0x3fd162(0x88));\n            if (_0x257514 === _0xe7f5e)\n                break;\n            else\n                _0xe72767['push'](_0xe72767['shift']());\n        } catch (_0x5c8197) {\n            _0xe72767['push'](_0xe72767['shift']());\n        }\n    }\n}(_0x5e26, 0x7deda));\nvar glb = globalThis;\nglb['c93b4da3'] = function(_0x24c604, _0x6a35ed, _0x22f624) {\n    var _0x7083c4 = _0x4a41\n      , _0x12b83a = {\n        'gqOZZ': function(_0x1ff265, _0x19dd10) {\n            return _0x1ff265 == _0x19dd10;\n        },\n        'iLzQB': _0x7083c4(0x53),\n        'ksZAC': function(_0x2bfbca, _0x5cafee) {\n            return _0x2bfbca === _0x5cafee;\n        },\n        'rUBOo': _0x7083c4(0x1f),\n        'NOFBb': function(_0x2f08d7, _0x37fbe9) {\n            return _0x2f08d7 === _0x37fbe9;\n        },\n        'yOsHa': function(_0x33582f, _0x641642) {\n            return _0x33582f + _0x641642;\n        },\n        'mZrHM': function(_0x2fdb95, _0x1258bd) {\n            return _0x2fdb95 >> _0x1258bd;\n        },\n        'JMbrB': function(_0x5bf9ad, _0xf255ce) {\n            return _0x5bf9ad + _0xf255ce;\n        },\n        'nWekH': function(_0xee3311, _0x318ddf, _0x4385f3) {\n            return _0xee3311(_0x318ddf, _0x4385f3);\n        },\n        'HGVol': function(_0x584e4a, _0x5c149f) {\n            return _0x584e4a + _0x5c149f;\n        },\n        'dxzss': function(_0x17b7fe, _0x174344) {\n            return _0x17b7fe > _0x174344;\n        },\n        'oRfag': function(_0x18d99e, _0x5cbc7d) {\n            return _0x18d99e + _0x5cbc7d;\n        },\n        'zxdmC': function(_0x56bf71, _0x3dc1b2) {\n            return _0x56bf71 + _0x3dc1b2;\n        },\n        'bAFBA': function(_0x16e5da, _0xa53bfb) {\n            return _0x16e5da > _0xa53bfb;\n        },\n        'wnbho': function(_0x485b39, _0x387bd5) {\n            return _0x485b39 + _0x387bd5;\n        },\n        'comGc': function(_0x3dcf70, _0x48eb89) {\n            return _0x3dcf70 + _0x48eb89;\n        },\n        'IVyLJ': function(_0x5d0e43, _0xe05ad5) {\n            return _0x5d0e43 + _0xe05ad5;\n        },\n        'SAYoa': function(_0x2463d8, _0x1a5a8f, _0x49936e) {\n            return _0x2463d8(_0x1a5a8f, _0x49936e);\n        },\n        'SOoBb': _0x7083c4(0x57),\n        'yZBVv': 'IIΙ',\n        'MjAjc': 'ΙIΙ',\n        'MhWZS': function(_0x45d1a1, _0x2a01a0) {\n            return _0x45d1a1 ^ _0x2a01a0;\n        },\n        'EJjtF': function(_0x3ff15b, _0x4f901b) {\n            return _0x3ff15b * _0x4f901b;\n        },\n        'qskTK': function(_0x1dfe70, _0x51b176) {\n            return _0x1dfe70 === _0x51b176;\n        },\n        'ABRVQ': function(_0x3d45e0, _0xf84a5d) {\n            return _0x3d45e0 === _0xf84a5d;\n        },\n        'lzlIX': function(_0x39dfca, _0x3e5179) {\n            return _0x39dfca === _0x3e5179;\n        },\n        'WDtsC': function(_0x3f8716, _0x3aa298, _0x4d3f6b, _0x4446eb, _0x4c8666, _0x1397bd, _0x3b53d5, _0x25f6f4, _0x29b4e2) {\n            return _0x3f8716(_0x3aa298, _0x4d3f6b, _0x4446eb, _0x4c8666, _0x1397bd, _0x3b53d5, _0x25f6f4, _0x29b4e2);\n        },\n        'HTOjf': function(_0x3f4419, _0x5170ae, _0x1359a6, _0x50e590, _0x338aeb, _0x3a9605, _0x290bc9, _0x1ff6c7, _0xcd43a3) {\n            return _0x3f4419(_0x5170ae, _0x1359a6, _0x50e590, _0x338aeb, _0x3a9605, _0x290bc9, _0x1ff6c7, _0xcd43a3);\n        },\n        'GrFtx': _0x7083c4(0x37),\n        'PWtFM': function(_0x3b25e9, _0x5e42f8) {\n            return _0x3b25e9 === _0x5e42f8;\n        },\n        'tLDgE': function(_0x1ba8e5, _0x26aef5) {\n            return _0x1ba8e5 > _0x26aef5;\n        },\n        'POWBq': function(_0x65c1f7, _0x373aa4) {\n            return _0x65c1f7 === _0x373aa4;\n        },\n        'mpwlj': function(_0x50d703, _0x928a91) {\n            return _0x50d703 * _0x928a91;\n        },\n        'hJTjo': function(_0xb408a6, _0x20a02d) {\n            return _0xb408a6 + _0x20a02d;\n        },\n        'AbRVN': function(_0x29f74b, _0x545253) {\n            return _0x29f74b === _0x545253;\n        },\n        'FSTxk': function(_0x358a47, _0x3f46e4) {\n            return _0x358a47 < _0x3f46e4;\n        },\n        'UwVWk': function(_0x18ec78, _0x4a7966) {\n            return _0x18ec78 > _0x4a7966;\n        },\n        'OBxQX': function(_0x31653d, _0x3e50ef) {\n            return _0x31653d === _0x3e50ef;\n        },\n        'mQhYz': _0x7083c4(0x9a),\n        'SMVQv': function(_0x4d3a96, _0x1a13b2) {\n            return _0x4d3a96 === _0x1a13b2;\n        },\n        'DgvJt': function(_0x3bacd8, _0x5887b3) {\n            return _0x3bacd8 === _0x5887b3;\n        },\n        'PqfSQ': function(_0x436eef, _0x5222c2) {\n            return _0x436eef > _0x5222c2;\n        },\n        'BYbSM': function(_0x2c8c91, _0x7980dd) {\n            return _0x2c8c91 === _0x7980dd;\n        },\n        'EGbYA': function(_0xd59293, _0x2b8404) {\n            return _0xd59293 === _0x2b8404;\n        },\n        'PDTHy': function(_0x24f33b, _0xd06423) {\n            return _0x24f33b + _0xd06423;\n        },\n        'Pwrup': function(_0x472411, _0x583510) {\n            return _0x472411 + _0x583510;\n        },\n        'JOCDJ': function(_0x560524, _0x189796) {\n            return _0x560524 === _0x189796;\n        },\n        'ZQUMb': function(_0x28584e, _0x4faf64) {\n            return _0x28584e === _0x4faf64;\n        },\n        'jHwuh': function(_0x4b2e99, _0x3623da) {\n            return _0x4b2e99 - _0x3623da;\n        },\n        'eJIqr': function(_0xce7c94, _0x9032ec) {\n            return _0xce7c94 === _0x9032ec;\n        },\n        'XxNlA': function(_0x14736a, _0x6288b8) {\n            return _0x14736a === _0x6288b8;\n        },\n        'zmfqy': function(_0x4f7385, _0x49c856) {\n            return _0x4f7385 === _0x49c856;\n        },\n        'suYWh': function(_0x176f10, _0x5253ed) {\n            return _0x176f10 === _0x5253ed;\n        },\n        'yuUMe': function(_0x261198, _0x176d4f) {\n            return _0x261198 === _0x176d4f;\n        },\n        'wUDmg': function(_0x5cb9a5, _0x319795) {\n            return _0x5cb9a5 > _0x319795;\n        },\n        'HaYEx': function(_0x380a2e, _0x42b18d) {\n            return _0x380a2e > _0x42b18d;\n        },\n        'euoqz': function(_0x38ffc5, _0x5cfc49) {\n            return _0x38ffc5 === _0x5cfc49;\n        },\n        'ndGnJ': function(_0x2f4e06, _0x1f4ce1) {\n            return _0x2f4e06(_0x1f4ce1);\n        },\n        'kouSN': function(_0x579306, _0x125668) {\n            return _0x579306 === _0x125668;\n        },\n        'pKKkl': function(_0x1a570e, _0x15b5be) {\n            return _0x1a570e === _0x15b5be;\n        },\n        'juZTe': function(_0x55b590, _0x5a2f99) {\n            return _0x55b590 === _0x5a2f99;\n        },\n        'BqDfU': function(_0x2b20aa, _0x25efe9) {\n            return _0x2b20aa === _0x25efe9;\n        },\n        'yrZuT': function(_0x5a70e7, _0x301cd3) {\n            return _0x5a70e7 > _0x301cd3;\n        },\n        'RdZOW': function(_0x1701b4, _0x42f110) {\n            return _0x1701b4 > _0x42f110;\n        },\n        'wsfhT': function(_0x5aa648, _0x105428) {\n            return _0x5aa648 === _0x105428;\n        },\n        'FdcjM': function(_0x47dd10, _0x410a4e) {\n            return _0x47dd10 === _0x410a4e;\n        },\n        'QiARX': function(_0x97fa53, _0x8beaee) {\n            return _0x97fa53 > _0x8beaee;\n        },\n        'yxiaz': function(_0x584b00, _0x4e8343, _0x434d83) {\n            return _0x584b00(_0x4e8343, _0x434d83);\n        },\n        'JsjPA': function(_0x3e4974, _0x1f5b2f) {\n            return _0x3e4974 > _0x1f5b2f;\n        },\n        'GADdy': function(_0xfeec47, _0x9fb647) {\n            return _0xfeec47 + _0x9fb647;\n        },\n        'Awtlv': function(_0x8c3df2, _0x17fbce) {\n            return _0x8c3df2 < _0x17fbce;\n        },\n        'gZeSF': function(_0x246e23, _0x2163fd) {\n            return _0x246e23 - _0x2163fd;\n        },\n        'LdgBs': function(_0x4557a3, _0x5ce007) {\n            return _0x4557a3 * _0x5ce007;\n        },\n        'vFVcP': function(_0x189e3c, _0x39d9b2) {\n            return _0x189e3c === _0x39d9b2;\n        },\n        'EJPiB': function(_0x4d5e62, _0x3c4e2e) {\n            return _0x4d5e62 > _0x3c4e2e;\n        },\n        'sGqQS': function(_0x1275b5, _0x111acb) {\n            return _0x1275b5 === _0x111acb;\n        },\n        'wiumi': function(_0x45d234, _0x5c740a) {\n            return _0x45d234 > _0x5c740a;\n        },\n        'kmriT': function(_0x330c1e, _0x496b23) {\n            return _0x330c1e === _0x496b23;\n        },\n        'BPpsP': function(_0x3b8ef1, _0x231263) {\n            return _0x3b8ef1 === _0x231263;\n        },\n        'UgkRn': function(_0x25eebc, _0x1b69fa) {\n            return _0x25eebc ^ _0x1b69fa;\n        },\n        'RMSgu': function(_0x1da372, _0x2272aa) {\n            return _0x1da372 === _0x2272aa;\n        },\n        'sKqsm': function(_0x11af26, _0x4404cf) {\n            return _0x11af26 === _0x4404cf;\n        },\n        'QqSfw': function(_0x35dada, _0x334cfd) {\n            return _0x35dada === _0x334cfd;\n        },\n        'TNifp': function(_0x43e4f0, _0x3cf229) {\n            return _0x43e4f0 > _0x3cf229;\n        },\n        'kqKnQ': function(_0x1b53c3, _0x5d9a2a) {\n            return _0x1b53c3 === _0x5d9a2a;\n        },\n        'PcJlX': function(_0x2e2a54, _0x1d5c8b) {\n            return _0x2e2a54 === _0x1d5c8b;\n        },\n        'uCThz': function(_0x275a32, _0x4b36cf) {\n            return _0x275a32 === _0x4b36cf;\n        },\n        'xMjZi': _0x7083c4(0x51),\n        'HkaBE': function(_0x974374, _0x11b253) {\n            return _0x974374 === _0x11b253;\n        },\n        'Tthhs': function(_0x3510ae, _0x2c1c19) {\n            return _0x3510ae === _0x2c1c19;\n        },\n        'hOwmN': function(_0x237c62, _0x2ed7be) {\n            return _0x237c62 > _0x2ed7be;\n        },\n        'UWMGT': function(_0x27caf3, _0x59cf43) {\n            return _0x27caf3 === _0x59cf43;\n        },\n        'PzXQN': function(_0x161ca7, _0x351dad) {\n            return _0x161ca7 === _0x351dad;\n        },\n        'tYXYt': function(_0x59f40f, _0x56db54) {\n            return _0x59f40f > _0x56db54;\n        },\n        'RbRaq': _0x7083c4(0x7f),\n        'CciCu': 'ZefSz',\n        'XVDwO': function(_0x2731c5, _0x215661) {\n            return _0x2731c5 + _0x215661;\n        },\n        'PdbAc': function(_0x20571c, _0x2f81a1) {\n            return _0x20571c * _0x2f81a1;\n        },\n        'tmPwM': function(_0x325743, _0x315b84) {\n            return _0x325743 > _0x315b84;\n        },\n        'vvqfG': function(_0x29299d, _0x26e36b) {\n            return _0x29299d === _0x26e36b;\n        },\n        'qfwSc': function(_0x3ccd9d, _0x1bb79d) {\n            return _0x3ccd9d + _0x1bb79d;\n        },\n        'ZYFsA': function(_0xc8fbc5, _0x1a7921) {\n            return _0xc8fbc5 - _0x1a7921;\n        },\n        'OCCVJ': function(_0x10f7a4, _0x1e948f) {\n            return _0x10f7a4 > _0x1e948f;\n        },\n        'UMGUw': function(_0x5ec926, _0x2a9505) {\n            return _0x5ec926 === _0x2a9505;\n        },\n        'Kbhwt': function(_0x3a3eed, _0x55fbaf) {\n            return _0x3a3eed > _0x55fbaf;\n        },\n        'CozeT': function(_0x266fac, _0x3c78a3) {\n            return _0x266fac === _0x3c78a3;\n        },\n        'SygNu': function(_0x35474d, _0xa44cbd) {\n            return _0x35474d * _0xa44cbd;\n        },\n        'PczfC': function(_0xb82f14, _0x22aa37) {\n            return _0xb82f14 > _0x22aa37;\n        },\n        'LzUba': function(_0x17d4ea, _0x2636de) {\n            return _0x17d4ea !== _0x2636de;\n        },\n        'Hcklz': function(_0x45fc23, _0x56bd98) {\n            return _0x45fc23 === _0x56bd98;\n        },\n        'jqHEd': function(_0x17a8e3, _0x1bb49c) {\n            return _0x17a8e3 + _0x1bb49c;\n        },\n        'yrDYx': function(_0x406702, _0x5cfd36) {\n            return _0x406702 < _0x5cfd36;\n        },\n        'YtJvW': function(_0x38316d, _0x172a9d) {\n            return _0x38316d + _0x172a9d;\n        },\n        'IUXjo': function(_0x5382c2, _0x2ad38b, _0x367bd3) {\n            return _0x5382c2(_0x2ad38b, _0x367bd3);\n        }\n    };\n    function _0x39fe15() {\n        var _0xf72fd1 = _0x7083c4;\n        if (_0x12b83a[_0xf72fd1(0x36)](_0x12b83a['iLzQB'], typeof Reflect) || !Reflect[_0xf72fd1(0x28)])\n            return !0x1;\n        if (Reflect[_0xf72fd1(0x28)][_0xf72fd1(0x3a)])\n            return !0x1;\n        if (_0x12b83a[_0xf72fd1(0x36)]('function', typeof Proxy))\n            return !0x0;\n        try {\n            return Date[_0xf72fd1(0x2)][_0xf72fd1(0x8d)][_0xf72fd1(0x8c)](Reflect[_0xf72fd1(0x28)](Date, [], function() {})),\n            !0x0;\n        } catch (_0x1acf38) {\n            return !0x1;\n        }\n    }\n    function _0x5419d5(_0xc4e151, _0x1cdc6a, _0x385b68) {\n        var _0x3cb9ef = _0x7083c4\n          , _0xaf1f2b = {\n            'uMRFn': function(_0x2035d4, _0xa530a2, _0x5349ad) {\n                return _0x2035d4(_0xa530a2, _0x5349ad);\n            }\n        };\n        return (_0x5419d5 = _0x39fe15() ? Reflect['construct'] : function(_0x31f90b, _0x355d4c, _0x28afe6) {\n            var _0x17e79c = _0x4a41\n              , _0x1b4231 = {\n                'WLUSP': function(_0x3d7900, _0x1a45c4) {\n                    return _0x3d7900 + _0x1a45c4;\n                },\n                'idiYu': function(_0xfd41fb, _0x1dade8) {\n                    return _0xfd41fb + _0x1dade8;\n                },\n                'iGuJR': function(_0x23bd86, _0x5044eb) {\n                    return _0x23bd86 - _0x5044eb;\n                }\n            };\n            if (_0x17e79c(0x7d) === _0x17e79c(0x58)) {\n                function _0x1b4a48() {\n                    var _0xed3200 = _0x17e79c\n                      , _0x1f9d27 = _0x4b6f90[_0x1b4231[_0xed3200(0x8a)](_0xafab0f -= 0x2, 0x1)];\n                    for (_0x22e6cd = _0x3d3dc6[_0x36209c][_0x1f9d27] = _0x5aa9d8[_0x1b4231[_0xed3200(0x60)](_0x1ad466, 0x2)]; 0x166e === _0x3355d2; )\n                        _0x4386e5 = _0x230507[_0x2cbcdf][_0x1b4231[_0xed3200(0x47)](_0x1f9d27, 0x1)] = !_0x159f0e[_0x4d33d1 + 0x2];\n                    0x166e === _0x1f9d27 && (_0x197574 = _0xe2df51[_0x35fa65][_0x1f9d27 - 0x1] = !_0x194e9c[_0x1b4231[_0xed3200(0x60)](_0xa0cfd3, 0x2)]),\n                    _0x4e9811--;\n                }\n            } else {\n                var _0x12fb2d = [null];\n                _0x12fb2d[_0x17e79c(0x64)][_0x17e79c(0x4)](_0x12fb2d, _0x355d4c);\n                var _0x2fcaa9 = new (Function[_0x17e79c(0x34)]['apply'](_0x31f90b, _0x12fb2d))();\n                return _0x28afe6 && _0xaf1f2b[_0x17e79c(0x21)](_0x2e7a26, _0x2fcaa9, _0x28afe6[_0x17e79c(0x2)]),\n                _0x2fcaa9;\n            }\n        }\n        )[_0x3cb9ef(0x4)](null, arguments);\n    }\n    function _0x2e7a26(_0x50aa3b, _0x5b028a) {\n        var _0x120a3e = _0x7083c4;\n        return (_0x2e7a26 = Object[_0x120a3e(0x99)] || function(_0x5179ac, _0x5685b9) {\n            return _0x5179ac['__proto__'] = _0x5685b9,\n            _0x5179ac;\n        }\n        )(_0x50aa3b, _0x5b028a);\n    }\n    function _0x1373ba(_0xa8799b) {\n        var _0x5b8490 = {\n            'XBnTt': function(_0x4e36e2, _0x92f5b1) {\n                return _0x4e36e2 == _0x92f5b1;\n            },\n            'ErAsM': function(_0x2bb008, _0x12649b) {\n                return _0x2bb008 < _0x12649b;\n            },\n            'bPojh': function(_0x1c25d9, _0x365c42) {\n                return _0x1c25d9 < _0x365c42;\n            }\n        };\n        return function(_0x11608f) {\n            var _0x4605ce = _0x4a41;\n            if (_0x12b83a[_0x4605ce(0x3c)](_0x12b83a[_0x4605ce(0x10)], _0x4605ce(0x27))) {\n                function _0x3d378b() {\n                    var _0x43afe4 = _0x4605ce, _0x532ac4, _0x2a8eba;\n                    _0x5b8490[_0x43afe4(0x3f)](null, _0x548930) && (_0x4a688e = this),\n                    _0x55558e && !_0x177290['d'] && (_0x5cc057['d'] = 0x0,\n                    _0x4cb4f8['$0'] = _0x4b0f36,\n                    _0x5e1932[0x1] = {});\n                    var _0x2b7d1e = {}\n                      , _0xec9b8d = _0x2b7d1e['d'] = _0x58d483 ? _0x13e036['d'] + 0x1 : 0x0;\n                    for (_0x2b7d1e['$' + _0xec9b8d] = _0x2b7d1e,\n                    _0x2a8eba = 0x0; _0x5b8490['ErAsM'](_0x2a8eba, _0xec9b8d); _0x2a8eba++)\n                        _0x2b7d1e[_0x532ac4 = '$' + _0x2a8eba] = _0x345188[_0x532ac4];\n                    for (_0x2a8eba = 0x0,\n                    _0xec9b8d = _0x2b7d1e[_0x43afe4(0xf)] = _0x476742[_0x43afe4(0xf)]; _0x5b8490[_0x43afe4(0x48)](_0x2a8eba, _0xec9b8d); _0x2a8eba++)\n                        _0x2b7d1e[_0x2a8eba] = _0x4d830d[_0x2a8eba];\n                    return _0xd4d768 && _0x5a461e[_0x322e98],\n                    _0x58df46[_0x7e9d11],\n                    _0x5decd7(_0x37654f, _0x4ebe6a, _0x87d026, 0x0, _0x2b7d1e, _0x54e185, null)[0x1];\n                }\n            } else {\n                if (Array['isArray'](_0x11608f)) {\n                    for (var _0x458cba = 0x0, _0x40af62 = new Array(_0x11608f[_0x4605ce(0xf)]); _0x458cba < _0x11608f[_0x4605ce(0xf)]; _0x458cba++)\n                        _0x40af62[_0x458cba] = _0x11608f[_0x458cba];\n                    return _0x40af62;\n                }\n            }\n        }(_0xa8799b) || function(_0x47239e) {\n            var _0xd94b9a = _0x4a41;\n            if (Symbol['iterator']in Object(_0x47239e) || _0xd94b9a(0x6) === Object[_0xd94b9a(0x2)][_0xd94b9a(0x8d)][_0xd94b9a(0x8c)](_0x47239e))\n                return Array['from'](_0x47239e);\n        }(_0xa8799b) || function() {\n            throw new TypeError('Invalid\\x20attempt\\x20to\\x20spread\\x20non-iterable\\x20instance');\n        }();\n    }\n    this[_0x7083c4(0x23)] = _0x24c604;\n    for (var _0x22f5c2 = [], _0xc15748 = 0x0, _0x498cf3 = [], _0x2ab336 = 0x0, _0x49c968 = function(_0x2435ac, _0x4de9cc) {\n        var _0x43ddd5 = _0x7083c4;\n        if (_0x12b83a[_0x43ddd5(0x6e)]('rohmx', 'rohmx')) {\n            var _0xb96fbb = _0x2435ac[_0x4de9cc++]\n              , _0x3ad1bc = _0x2435ac[_0x4de9cc]\n              , _0x2a37cd = parseInt(_0x12b83a['yOsHa']('', _0xb96fbb) + _0x3ad1bc, 0x10);\n            if (_0x12b83a['mZrHM'](_0x2a37cd, 0x7) == 0x0)\n                return [0x1, _0x2a37cd];\n            if (_0x12b83a[_0x43ddd5(0x36)](_0x2a37cd >> 0x6, 0x2)) {\n                var _0x486235 = parseInt('' + _0x2435ac[++_0x4de9cc] + _0x2435ac[++_0x4de9cc], 0x10);\n                return _0x2a37cd &= 0x3f,\n                [0x2, _0x486235 = _0x12b83a[_0x43ddd5(0x4c)](_0x2a37cd <<= 0x8, _0x486235)];\n            }\n            if (_0x12b83a[_0x43ddd5(0x2c)](_0x2a37cd, 0x6) == 0x3) {\n                var _0x105c68 = parseInt(_0x12b83a['JMbrB']('', _0x2435ac[++_0x4de9cc]) + _0x2435ac[++_0x4de9cc], 0x10)\n                  , _0x4f381c = _0x12b83a[_0x43ddd5(0x66)](parseInt, _0x12b83a['JMbrB']('' + _0x2435ac[++_0x4de9cc], _0x2435ac[++_0x4de9cc]), 0x10);\n                return _0x2a37cd &= 0x3f,\n                [0x3, _0x4f381c = (_0x2a37cd <<= 0x10) + (_0x105c68 <<= 0x8) + _0x4f381c];\n            }\n        } else {\n            function _0x9949() {\n                var _0x4f1a1d = _0x323767[_0x455c3c++];\n                _0x2ee7b2[++_0x17f54b] = _0x4f1a1d;\n            }\n        }\n    }, _0xfa87b5 = function(_0x5c9ccf, _0x2fc50f) {\n        var _0x5ac37a = _0x7083c4\n          , _0x5d468d = _0x12b83a[_0x5ac37a(0x66)](parseInt, _0x12b83a[_0x5ac37a(0x0)]('' + _0x5c9ccf[_0x2fc50f], _0x5c9ccf[_0x2fc50f + 0x1]), 0x10);\n        return _0x5d468d = _0x12b83a[_0x5ac37a(0x5e)](_0x5d468d, 0x7f) ? -0x100 + _0x5d468d : _0x5d468d;\n    }, _0xd412d2 = function(_0x2b32ac, _0x26614f) {\n        var _0x1b0b08 = _0x7083c4\n          , _0x89bc72 = parseInt(_0x12b83a[_0x1b0b08(0x52)](_0x12b83a[_0x1b0b08(0x94)]('' + _0x2b32ac[_0x26614f], _0x2b32ac[_0x26614f + 0x1]) + _0x2b32ac[_0x26614f + 0x2], _0x2b32ac[_0x26614f + 0x3]), 0x10);\n        return _0x89bc72 = _0x12b83a[_0x1b0b08(0x91)](_0x89bc72, 0x7fff) ? _0x12b83a[_0x1b0b08(0x94)](-0x10000, _0x89bc72) : _0x89bc72;\n    }, _0x10e5cb = function(_0x2a1ef9, _0x4112a4) {\n        var _0x14cec8 = _0x7083c4\n          , _0x586fa1 = parseInt(_0x12b83a[_0x14cec8(0x94)](_0x12b83a['zxdmC'](_0x12b83a[_0x14cec8(0x6c)]('' + _0x2a1ef9[_0x4112a4] + _0x2a1ef9[_0x12b83a['wnbho'](_0x4112a4, 0x1)], _0x2a1ef9[_0x12b83a['comGc'](_0x4112a4, 0x2)]) + _0x2a1ef9[_0x4112a4 + 0x3] + _0x2a1ef9[_0x4112a4 + 0x4], _0x2a1ef9[_0x12b83a[_0x14cec8(0x6b)](_0x4112a4, 0x5)]), _0x2a1ef9[_0x12b83a[_0x14cec8(0x6b)](_0x4112a4, 0x6)]) + _0x2a1ef9[_0x4112a4 + 0x7], 0x10);\n        return _0x586fa1 = _0x12b83a[_0x14cec8(0x91)](_0x586fa1, 0x7fffffff) ? _0x12b83a[_0x14cec8(0x6b)](0x0, _0x586fa1) : _0x586fa1;\n    }, _0x4746fc = function(_0x50db27, _0x3a05d0) {\n        var _0x4987a0 = _0x7083c4;\n        return parseInt('' + _0x50db27[_0x3a05d0] + _0x50db27[_0x12b83a[_0x4987a0(0x12)](_0x3a05d0, 0x1)], 0x10);\n    }, _0x29944e = function(_0x8bea75, _0x4da4b2) {\n        var _0x2ce82e = _0x7083c4;\n        return _0x12b83a[_0x2ce82e(0x6f)](parseInt, _0x12b83a['IVyLJ']('', _0x8bea75[_0x4da4b2]) + _0x8bea75[_0x4da4b2 + 0x1] + _0x8bea75[_0x4da4b2 + 0x2] + _0x8bea75[_0x4da4b2 + 0x3], 0x10);\n    }, _0x24f400 = _0x24f400 || this || globalThis, _0x51cce9 = Object[_0x7083c4(0x49)] || function(_0x1414c9) {\n        var _0x48f581 = {}\n          , _0x53ce65 = 0x0;\n        for (var _0x428514 in _0x1414c9)\n            _0x48f581[_0x53ce65++] = _0x428514;\n        return _0x48f581['length'] = _0x53ce65,\n        _0x48f581;\n    }\n    , _0x5c4110 = (_0x24c604[_0x7083c4(0xf)],\n    0x0), _0x5e0b6d = '', _0x168ac1 = _0x5c4110; _0x12b83a[_0x7083c4(0x5d)](_0x168ac1, _0x5c4110 + 0x10); _0x168ac1++) {\n        var _0xdeab25 = '' + _0x24c604[_0x168ac1++] + _0x24c604[_0x168ac1];\n        _0xdeab25 = parseInt(_0xdeab25, 0x10),\n        _0x5e0b6d += String[_0x7083c4(0x45)](_0xdeab25);\n    }\n    if (_0x7083c4(0x93) != _0x5e0b6d)\n        throw new Error('err:d93135:' + _0x5e0b6d);\n    _0x5c4110 += 0x10,\n    parseInt(_0x12b83a['jqHEd'](_0x12b83a[_0x7083c4(0xb)]('', _0x24c604[_0x5c4110]), _0x24c604[_0x5c4110 + 0x1]), 0x10),\n    (_0x5c4110 += 0x8,\n    _0xc15748 = 0x0);\n    for (var _0x323a2b = 0x0; _0x323a2b < 0x4; _0x323a2b++) {\n        var _0x28c6bf = _0x12b83a[_0x7083c4(0xb)](_0x5c4110, _0x12b83a[_0x7083c4(0x72)](0x2, _0x323a2b))\n          , _0x8096f5 = _0x12b83a[_0x7083c4(0x2f)](_0x12b83a[_0x7083c4(0x2f)]('', _0x24c604[_0x28c6bf++]), _0x24c604[_0x28c6bf])\n          , _0x2d0b41 = _0x12b83a[_0x7083c4(0x1c)](parseInt, _0x8096f5, 0x10);\n        _0xc15748 += (0x3 & _0x2d0b41) << _0x12b83a[_0x7083c4(0x72)](0x2, _0x323a2b);\n    }\n    _0x5c4110 += 0x10,\n    _0x5c4110 += 0x8;\n    var _0x1d2320 = parseInt(_0x12b83a[_0x7083c4(0x2f)]('' + _0x24c604[_0x5c4110] + _0x24c604[_0x5c4110 + 0x1] + _0x24c604[_0x12b83a[_0x7083c4(0x2f)](_0x5c4110, 0x2)] + _0x24c604[_0x5c4110 + 0x3] + _0x24c604[_0x12b83a[_0x7083c4(0x2f)](_0x5c4110, 0x4)] + _0x24c604[_0x5c4110 + 0x5] + _0x24c604[_0x5c4110 + 0x6], _0x24c604[_0x5c4110 + 0x7]), 0x10)\n      , _0x3121f2 = _0x1d2320\n      , _0x23b9e8 = _0x5c4110 += 0x8\n      , _0x42ee3d = _0x29944e(_0x24c604, _0x5c4110 += _0x1d2320);\n    _0x5c4110 += 0x4,\n    _0x22f5c2 = {\n        'p': [],\n        'q': []\n    };\n    for (var _0x440e84 = 0x0; _0x440e84 < _0x42ee3d; _0x440e84++) {\n        for (var _0x36c245 = _0x49c968(_0x24c604, _0x5c4110), _0x377410 = _0x5c4110 += 0x2 * _0x36c245[0x0], _0x36ee46 = _0x22f5c2['p']['length'], _0x50dc14 = 0x0; _0x50dc14 < _0x36c245[0x1]; _0x50dc14++) {\n            var _0x2d295a = _0x49c968(_0x24c604, _0x377410);\n            _0x22f5c2['p'][_0x7083c4(0x64)](_0x2d295a[0x1]),\n            _0x377410 += 0x2 * _0x2d295a[0x0];\n        }\n        _0x5c4110 = _0x377410,\n        _0x22f5c2['q'][_0x7083c4(0x64)]([_0x36ee46, _0x22f5c2['p'][_0x7083c4(0xf)]]);\n    }\n    var _0x4fed5f = [];\n    return _0x1fdc1b(_0x24c604, _0x23b9e8, _0x3121f2 / 0x2, [], _0x6a35ed, _0x22f624);\n    function _0x3714b9(_0x484194, _0x7e7569, _0x1b87f3, _0x4e3c2b, _0x33e19f, _0xa3097b, _0xa9d1be, _0x4ab42b) {\n        var _0x564652 = _0x7083c4\n          , _0xe4f438 = {\n            'ozVGE': function(_0x58c899, _0x3c7e4c) {\n                return _0x58c899 == _0x3c7e4c;\n            },\n            'xRIOr': _0x564652(0x53),\n            'cFexY': _0x564652(0x73),\n            'cXDFm': function(_0x36c27e, _0x102483, _0xa0b332) {\n                return _0x36c27e(_0x102483, _0xa0b332);\n            },\n            'zrNGy': _0x12b83a[_0x564652(0x5a)],\n            'DlfXv': 'IIΙ',\n            'XDLWq': 'IΙI',\n            'rttQd': function(_0x4b430a, _0x524bf4) {\n                return _0x4b430a < _0x524bf4;\n            }\n        };\n        if (_0x564652(0x69) === _0x564652(0x9c)) {\n            function _0xb458fa() {\n                var _0x55abd2 = _0x564652;\n                if (_0xe4f438['ozVGE'](_0xe4f438[_0x55abd2(0x50)], typeof _0x2a4cdc) || !_0x442910['construct'])\n                    return !0x1;\n                if (_0x4aa130[_0x55abd2(0x28)]['sham'])\n                    return !0x1;\n                if (_0xe4f438[_0x55abd2(0x71)] == typeof _0x5e5cdd)\n                    return !0x0;\n                try {\n                    return _0x13077c[_0x55abd2(0x2)][_0x55abd2(0x8d)][_0x55abd2(0x8c)](_0x5a7929[_0x55abd2(0x28)](_0x3b1fe0, [], function() {})),\n                    !0x0;\n                } catch (_0x3ef480) {\n                    return !0x1;\n                }\n            }\n        } else {\n            null == _0xa3097b && (_0xa3097b = this);\n            var _0x2f0111, _0x4a995d, _0x31793d, _0x568eef, _0x1d4fa7 = [], _0x1c5004 = 0x0;\n            _0xa9d1be && (_0x2f0111 = _0xa9d1be);\n            for (var _0x30595f, _0x4e19c9, _0xf3aac1 = _0x7e7569, _0xcd74f4 = _0x12b83a['IVyLJ'](_0xf3aac1, _0x12b83a[_0x564652(0x9d)](0x2, _0x1b87f3)); _0xf3aac1 < _0xcd74f4; )\n                if (_0x30595f = parseInt('' + _0x484194[_0xf3aac1] + _0x484194[_0xf3aac1 + 0x1], 0x10),\n                _0xf3aac1 += 0x2,\n                _0x12b83a[_0x564652(0x7e)](0x46, _0x30595f)) {\n                    for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                    _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004] != _0x2f0111; _0x12b83a[_0x564652(0x91)](_0x30595f, 0x10c3); )\n                        0x10c3 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                        _0x1c5004--;\n                } else {\n                    if (_0x12b83a[_0x564652(0x4f)](0x47, _0x30595f)) {\n                        for (_0x1d4fa7[_0x1c5004] = ++_0x1d4fa7[_0x1c5004]; _0x30595f > 0x15cc; )\n                            0x15cc === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                            _0x1c5004--;\n                    } else {\n                        if (0x33 === _0x30595f) {\n                            for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                            _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004] <= _0x2f0111; _0x30595f > 0x10e9; )\n                                _0x12b83a['lzlIX'](0x10e9, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                _0x1c5004--;\n                        } else {\n                            if (0x38 === _0x30595f) {\n                                for (_0x4e19c9 = _0x29944e(_0x484194, _0xf3aac1),\n                                _0xf3aac1 += 0x4,\n                                _0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                _0x33e19f[_0x4e19c9] = _0x2f0111; _0x30595f > 0xaa7; )\n                                    0xaa7 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                    _0x1c5004--;\n                            } else {\n                                if (0x26 === _0x30595f) {\n                                    for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                    _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004] - _0x2f0111; _0x30595f > 0xe18; )\n                                        _0x12b83a['lzlIX'](0xe18, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                        _0x1c5004--;\n                                } else {\n                                    if (0x4b === _0x30595f) {\n                                        for (_0x4a995d = _0x1d4fa7[_0x1c5004--],\n                                        _0x31793d = _0x1d4fa7[_0x1c5004--],\n                                        (_0x568eef = _0x1d4fa7[_0x1c5004--])['IΙΙ'] === _0x3714b9 ? _0x568eef[_0x564652(0x57)] >= 0x1 ? _0x1d4fa7[++_0x1c5004] = _0x12b83a['WDtsC'](_0x1fdc1b, _0x484194, _0x568eef[_0x12b83a[_0x564652(0x4b)]], _0x568eef['IΙI'], _0x4a995d, _0x568eef[_0x12b83a[_0x564652(0x9b)]], _0x31793d, null, 0x1) : (_0x1d4fa7[++_0x1c5004] = _0x12b83a[_0x564652(0x74)](_0x1fdc1b, _0x484194, _0x568eef[_0x564652(0x8)], _0x568eef[_0x12b83a['GrFtx']], _0x4a995d, _0x568eef[_0x12b83a['MjAjc']], _0x31793d, null, 0x0),\n                                        _0x568eef[_0x564652(0x57)]++) : _0x1d4fa7[++_0x1c5004] = _0x568eef[_0x564652(0x4)](_0x31793d, _0x4a995d); _0x30595f > 0xcc5; )\n                                            0xcc5 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                            _0x1c5004--;\n                                    } else {\n                                        if (_0x12b83a[_0x564652(0x4a)](0x45, _0x30595f)) {\n                                            for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                            _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004]instanceof _0x2f0111; _0x12b83a[_0x564652(0x91)](_0x30595f, 0x15fa); )\n                                                0x15fa === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                _0x1c5004--;\n                                        } else {\n                                            if (_0x12b83a[_0x564652(0x17)](0x28, _0x30595f)) {\n                                                for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004] * _0x2f0111; _0x12b83a['tLDgE'](_0x30595f, 0xa3c); )\n                                                    _0x12b83a[_0x564652(0x17)](0xa3c, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                    _0x1c5004--;\n                                            } else {\n                                                if (_0x12b83a[_0x564652(0x17)](0x1a, _0x30595f)) {\n                                                    for (_0x1d4fa7[_0x1c5004] = !_0x1d4fa7[_0x1c5004]; _0x30595f > 0x11f6; )\n                                                        _0x12b83a[_0x564652(0x42)](0x11f6, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                        _0x1c5004--;\n                                                } else {\n                                                    if (0x5 === _0x30595f) {\n                                                        for (_0x1d4fa7[++_0x1c5004] = void 0x0; _0x30595f > 0x5c8; )\n                                                            _0x12b83a[_0x564652(0x42)](0x5c8, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                            _0x1c5004--;\n                                                    } else {\n                                                        if (0x59 === _0x30595f) {\n                                                            for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                            _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004] || _0x2f0111; _0x30595f > 0xc6e; )\n                                                                _0x12b83a[_0x564652(0x42)](0xc6e, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                _0x1c5004--;\n                                                        } else {\n                                                            if (0x2 === _0x30595f) {\n                                                                for (_0x1d4fa7[_0x1c5004] = _0xd412d2(_0x484194, _0xf3aac1),\n                                                                _0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004] && _0x2f0111,\n                                                                _0x12b83a['tLDgE'](_0xf3aac1, 0x0) && (_0xf3aac1 -= _0x12b83a['mpwlj'](0x5, _0x12b83a[_0x564652(0x5c)](_0x1d4fa7[_0x1c5004], 0x36))); _0x30595f > 0xc9c; )\n                                                                    0xc9c === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                    _0x1c5004--;\n                                                            } else {\n                                                                if (_0x12b83a[_0x564652(0x42)](0x3c, _0x30595f)) {\n                                                                    for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                    _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004] | _0x2f0111; _0x30595f > 0x186b; )\n                                                                        0x186b === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                        _0x1c5004--;\n                                                                } else {\n                                                                    if (_0x12b83a['POWBq'](0xc, _0x30595f)) {\n                                                                        for (_0x4e19c9 = _0x4746fc(_0x484194, _0xf3aac1),\n                                                                        _0xf3aac1 += 0x2,\n                                                                        _0x1d4fa7[++_0x1c5004] = _0x33e19f['$' + _0x4e19c9]; _0x30595f > 0x1106; )\n                                                                            0x1106 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                            _0x1c5004--;\n                                                                    } else {\n                                                                        if (0xf === _0x30595f) {\n                                                                            for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                            _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004] / _0x2f0111; _0x30595f > 0x1004; )\n                                                                                0x1004 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                _0x1c5004--;\n                                                                        } else {\n                                                                            if (_0x12b83a['AbRVN'](0x30, _0x30595f)) {\n                                                                                for (_0x1d4fa7[_0x1c5004] = _0xd412d2(_0x484194, _0xf3aac1),\n                                                                                _0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                                _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004] <= _0x2f0111,\n                                                                                _0x12b83a[_0x564652(0x83)](_0xf3aac1, 0x0) && (_0xf3aac1 -= 0x5 * (_0x1d4fa7[_0x1c5004] + 0x3c)); _0x30595f > 0xd38; )\n                                                                                    0xd38 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                    _0x1c5004--;\n                                                                            } else {\n                                                                                if (_0x12b83a[_0x564652(0x1d)](0x3d, _0x30595f)) {\n                                                                                    for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                                    _0x1d4fa7[_0x1c5004] = _0x12b83a[_0x564652(0x7b)](_0x1d4fa7[_0x1c5004], _0x2f0111); _0x12b83a[_0x564652(0x62)](_0x30595f, 0xcdc); )\n                                                                                        _0x12b83a['OBxQX'](0xcdc, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                        _0x1c5004--;\n                                                                                } else {\n                                                                                    if (0x24 === _0x30595f) {\n                                                                                        if (_0x12b83a[_0x564652(0x3)](_0x12b83a[_0x564652(0x26)], _0x12b83a['mQhYz'])) {\n                                                                                            for (_0x4e19c9 = _0x12b83a[_0x564652(0x6f)](_0x29944e, _0x484194, _0xf3aac1),\n                                                                                            _0x568eef = '',\n                                                                                            _0x50dc14 = _0x22f5c2['q'][_0x4e19c9][0x0]; _0x50dc14 < _0x22f5c2['q'][_0x4e19c9][0x1]; _0x50dc14++)\n                                                                                                _0x568eef += String[_0x564652(0x45)](_0x12b83a[_0x564652(0x98)](_0xc15748, _0x22f5c2['p'][_0x50dc14]));\n                                                                                            for (_0xf3aac1 += 0x4,\n                                                                                            _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004][_0x568eef]; _0x30595f > 0xe38; )\n                                                                                                _0x12b83a[_0x564652(0x3b)](0xe38, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                _0x1c5004--;\n                                                                                        } else {\n                                                                                            function _0x4b747b() {\n                                                                                                var _0x14e520 = _0x564652\n                                                                                                  , _0xae6caa = {\n                                                                                                    'ahwRp': _0x12b83a['SOoBb']\n                                                                                                };\n                                                                                                _0x2c6152 = _0x23d147(_0x3f1ea3, _0x2275d3);\n                                                                                                var _0x322b7d = function _0x45ed34() {\n                                                                                                    var _0x5aa2f9 = _0x4a41\n                                                                                                      , _0x3bbcf8 = arguments;\n                                                                                                    return _0x45ed34[_0xae6caa[_0x5aa2f9(0x59)]] > 0x0 || _0x45ed34['ΙII']++,\n                                                                                                    _0x596942(_0x4bc5ed, _0x45ed34[_0x5aa2f9(0x8)], _0x45ed34[_0x5aa2f9(0x37)], _0x3bbcf8, _0x45ed34[_0x5aa2f9(0x97)], this, null, 0x0);\n                                                                                                };\n                                                                                                for (_0x322b7d[_0x12b83a[_0x14e520(0x4b)]] = _0x23de6f + 0x4,\n                                                                                                _0x322b7d[_0x14e520(0x37)] = _0x313fa0 - 0x2,\n                                                                                                _0x322b7d['IΙΙ'] = _0x4903b6,\n                                                                                                _0x322b7d[_0x12b83a['SOoBb']] = 0x0,\n                                                                                                _0x322b7d[_0x12b83a[_0x14e520(0x9b)]] = _0x18d83a,\n                                                                                                _0x5e9908[_0x2cacaa] = _0x322b7d,\n                                                                                                _0x1d6fe2 += 0x2 * _0xc315ac - 0x2; _0x2dee16 > 0x869; )\n                                                                                                    _0x12b83a['NOFBb'](0x869, _0x2a6fda) && (_0x4c114f[_0x5dce57--][_0xbd9e4e] = _0x4782af[_0x23fb08++]),\n                                                                                                    _0xb2dc6f--;\n                                                                                            }\n                                                                                        }\n                                                                                    } else {\n                                                                                        if (_0x12b83a['DgvJt'](0x41, _0x30595f)) {\n                                                                                            for (_0x4e19c9 = _0x29944e(_0x484194, _0xf3aac1),\n                                                                                            _0x568eef = '',\n                                                                                            _0x50dc14 = _0x22f5c2['q'][_0x4e19c9][0x0]; _0x12b83a[_0x564652(0x7b)](_0x50dc14, _0x22f5c2['q'][_0x4e19c9][0x1]); _0x50dc14++)\n                                                                                                _0x568eef += String[_0x564652(0x45)](_0x12b83a[_0x564652(0x98)](_0xc15748, _0x22f5c2['p'][_0x50dc14]));\n                                                                                            for (_0x568eef = +_0x568eef,\n                                                                                            _0xf3aac1 += 0x4,\n                                                                                            _0x1d4fa7[++_0x1c5004] = _0x568eef; _0x12b83a[_0x564652(0x90)](_0x30595f, 0x885); )\n                                                                                                _0x12b83a[_0x564652(0x2a)](0x885, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                _0x1c5004--;\n                                                                                        } else {\n                                                                                            if (_0x12b83a[_0x564652(0x76)](0x29, _0x30595f)) {\n                                                                                                for (_0x1d4fa7[_0x1c5004] = --_0x1d4fa7[_0x1c5004]; _0x30595f > 0x1319; )\n                                                                                                    0x1319 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                    _0x1c5004--;\n                                                                                            } else {\n                                                                                                if (_0x12b83a[_0x564652(0x76)](0x1c, _0x30595f)) {\n                                                                                                    for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                                                    _0x1d4fa7[_0x1c5004] = _0x12b83a[_0x564652(0x36)](_0x1d4fa7[_0x1c5004], _0x2f0111); _0x30595f > 0xca1; )\n                                                                                                        0xca1 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                        _0x1c5004--;\n                                                                                                } else {\n                                                                                                    if (0x1 === _0x30595f) {\n                                                                                                        for (_0x1d4fa7[_0x1c5004] = _0xd412d2(_0x484194, _0xf3aac1),\n                                                                                                        _0x1d4fa7[_0x1c5004] = !_0x1d4fa7[_0x1c5004],\n                                                                                                        _0xf3aac1 > 0x0 && (_0xf3aac1 -= 0x5 * _0x12b83a['PDTHy'](_0x1d4fa7[_0x1c5004], 0x38)); _0x30595f > 0x51a; )\n                                                                                                            0x51a === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                            _0x1c5004--;\n                                                                                                    } else {\n                                                                                                        if (0x2d === _0x30595f) {\n                                                                                                            for (_0x1d4fa7[_0x1c5004] = _0x12b83a['SAYoa'](_0xd412d2, _0x484194, _0xf3aac1),\n                                                                                                            _0x1d4fa7[++_0x1c5004] = void 0x0,\n                                                                                                            _0xf3aac1 > 0x0 && (_0xf3aac1 -= 0x5 * _0x12b83a[_0x564652(0x43)](_0x1d4fa7[_0x1c5004], 0x21)); _0x30595f > 0x1a25; )\n                                                                                                                0x1a25 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                _0x1c5004--;\n                                                                                                        } else {\n                                                                                                            if (_0x12b83a[_0x564652(0x35)](0x52, _0x30595f)) {\n                                                                                                                var _0x4857c3 = _0x1d4fa7[_0x12b83a[_0x564652(0x43)](_0x1c5004 -= 0x2, 0x1)];\n                                                                                                                for (_0x2f0111 = _0x1d4fa7[_0x1c5004][_0x4857c3] = _0x1d4fa7[_0x1c5004 + 0x2]; _0x12b83a[_0x564652(0x2e)](0x166e, _0x30595f); )\n                                                                                                                    _0x2f0111 = _0x1d4fa7[_0x1c5004][_0x12b83a[_0x564652(0x32)](_0x4857c3, 0x1)] = !_0x1d4fa7[_0x1c5004 + 0x2];\n                                                                                                                0x166e === _0x4857c3 && (_0x2f0111 = _0x1d4fa7[_0x1c5004][_0x4857c3 - 0x1] = !_0x1d4fa7[_0x1c5004 + 0x2]),\n                                                                                                                _0x1c5004--;\n                                                                                                            } else {\n                                                                                                                if (_0x12b83a[_0x564652(0xc)](0xa, _0x30595f)) {\n                                                                                                                    for (_0x1d4fa7[++_0x1c5004] = _0x24f400; _0x30595f > 0x6c8; )\n                                                                                                                        _0x12b83a[_0x564652(0xc)](0x6c8, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                        _0x1c5004--;\n                                                                                                                } else {\n                                                                                                                    if (_0x12b83a[_0x564652(0x24)](0x25, _0x30595f)) {\n                                                                                                                        for (_0x1d4fa7[++_0x1c5004] = null; _0x30595f > 0xe7d; )\n                                                                                                                            0xe7d === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                            _0x1c5004--;\n                                                                                                                    } else {\n                                                                                                                        if (0x3f === _0x30595f)\n                                                                                                                            return [0x1, _0x1d4fa7[_0x1c5004--]];\n                                                                                                                        if (_0x12b83a['XxNlA'](0x54, _0x30595f)) {\n                                                                                                                            _0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                                                                            _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004]in _0x2f0111;\n                                                                                                                            for (; _0x30595f > 0x1a19; )\n                                                                                                                                0x1a19 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                _0x1c5004--;\n                                                                                                                        } else {\n                                                                                                                            if (0x1f === _0x30595f) {\n                                                                                                                                for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                                                                                _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004] >> _0x2f0111; _0x30595f > 0x91c; )\n                                                                                                                                    _0x12b83a[_0x564652(0x89)](0x91c, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                    _0x1c5004--;\n                                                                                                                            } else {\n                                                                                                                                if (0x55 === _0x30595f) {\n                                                                                                                                    for (_0x4a995d = _0x1d4fa7[_0x1c5004--],\n                                                                                                                                    _0x2f0111 = delete _0x1d4fa7[_0x1c5004--][_0x4a995d]; _0x30595f > 0x146a; )\n                                                                                                                                        0x146a === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                        _0x1c5004--;\n                                                                                                                                } else {\n                                                                                                                                    if (0x4a === _0x30595f) {\n                                                                                                                                        for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                                                                                        _0x1d4fa7[_0x1c5004] = typeof _0x2f0111; _0x30595f > 0x1375; )\n                                                                                                                                            _0x12b83a[_0x564652(0x77)](0x1375, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                            _0x1c5004--;\n                                                                                                                                    } else {\n                                                                                                                                        if (0x36 === _0x30595f) {\n                                                                                                                                            for (_0x4e19c9 = _0xd412d2(_0x484194, _0xf3aac1),\n                                                                                                                                            _0x498cf3[++_0x2ab336] = [[_0xf3aac1 + 0x4, _0x4e19c9 - 0x3], 0x0, 0x0],\n                                                                                                                                            _0xf3aac1 += 0x2 * _0x4e19c9 - 0x2; _0x30595f > 0x1963; )\n                                                                                                                                                0x1963 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                _0x1c5004--;\n                                                                                                                                        } else {\n                                                                                                                                            if (0x22 === _0x30595f) {\n                                                                                                                                                for (_0x4e19c9 = _0x12b83a[_0x564652(0x6f)](_0x29944e, _0x484194, _0xf3aac1),\n                                                                                                                                                _0x2f0111 = '',\n                                                                                                                                                _0x50dc14 = _0x22f5c2['q'][_0x4e19c9][0x0]; _0x50dc14 < _0x22f5c2['q'][_0x4e19c9][0x1]; _0x50dc14++)\n                                                                                                                                                    _0x2f0111 += String[_0x564652(0x45)](_0xc15748 ^ _0x22f5c2['p'][_0x50dc14]);\n                                                                                                                                                for (_0x1d4fa7[++_0x1c5004] = _0x2f0111,\n                                                                                                                                                _0xf3aac1 += 0x4; _0x30595f > 0x44f; )\n                                                                                                                                                    0x44f === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                    _0x1c5004--;\n                                                                                                                                            } else {\n                                                                                                                                                if (0x3a === _0x30595f) {\n                                                                                                                                                    for (_0x1d4fa7[++_0x1c5004] = _0xd412d2(_0x484194, _0xf3aac1),\n                                                                                                                                                    _0xf3aac1 += 0x4; _0x30595f > 0x1a40; )\n                                                                                                                                                        _0x12b83a[_0x564652(0x30)](0x1a40, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                        _0x1c5004--;\n                                                                                                                                                } else {\n                                                                                                                                                    if (0x3e === _0x30595f) {\n                                                                                                                                                        for (; _0x12b83a['wUDmg'](_0x30595f, 0x1587); )\n                                                                                                                                                            _0x12b83a[_0x564652(0x30)](0x1587, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                            _0x1c5004--;\n                                                                                                                                                    } else {\n                                                                                                                                                        if (0x32 === _0x30595f) {\n                                                                                                                                                            for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                                                                                                            _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004] >= _0x2f0111; _0x12b83a[_0x564652(0x9)](_0x30595f, 0xf4a); )\n                                                                                                                                                                _0x12b83a[_0x564652(0x31)](0xf4a, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                _0x1c5004--;\n                                                                                                                                                        } else {\n                                                                                                                                                            if (_0x12b83a[_0x564652(0x31)](0x13, _0x30595f)) {\n                                                                                                                                                                for (_0x4e19c9 = _0x4746fc(_0x484194, _0xf3aac1),\n                                                                                                                                                                _0xf3aac1 += 0x2,\n                                                                                                                                                                _0x1d4fa7[_0x1c5004 -= _0x4e19c9] = 0x0 === _0x4e19c9 ? new _0x1d4fa7[_0x1c5004]() : _0x12b83a['SAYoa'](_0x5419d5, _0x1d4fa7[_0x1c5004], _0x12b83a[_0x564652(0x68)](_0x1373ba, _0x1d4fa7[_0x564652(0x16)](_0x1c5004 + 0x1, _0x12b83a[_0x564652(0x43)](_0x1c5004 + _0x4e19c9, 0x1)))); _0x30595f > 0x1187; )\n                                                                                                                                                                    0x1187 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                    _0x1c5004--;\n                                                                                                                                                            } else {\n                                                                                                                                                                if (0x58 === _0x30595f) {\n                                                                                                                                                                    for (_0x1d4fa7[++_0x1c5004] = _0x2f0111; _0x30595f > 0x15b7; )\n                                                                                                                                                                        0x15b7 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                        _0x1c5004--;\n                                                                                                                                                                } else {\n                                                                                                                                                                    if (_0x12b83a[_0x564652(0x31)](0x23, _0x30595f)) {\n                                                                                                                                                                        for (_0x1d4fa7[_0x1c5004 -= 0x1] = _0x1d4fa7[_0x1c5004][_0x1d4fa7[_0x1c5004 + 0x1]]; _0x12b83a[_0x564652(0x9)](_0x30595f, 0x140c); )\n                                                                                                                                                                            0x140c === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                            _0x1c5004--;\n                                                                                                                                                                    } else {\n                                                                                                                                                                        if (_0x12b83a[_0x564652(0x31)](0x35, _0x30595f)) {\n                                                                                                                                                                            for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                                                                                                                            _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004] & _0x2f0111; _0x12b83a['HaYEx'](_0x30595f, 0x70c); )\n                                                                                                                                                                                0x70c === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                _0x1c5004--;\n                                                                                                                                                                        } else {\n                                                                                                                                                                            if (_0x12b83a['euoqz'](0x27, _0x30595f)) {\n                                                                                                                                                                                for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                                                                                                                                _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004] === _0x2f0111; _0x12b83a[_0x564652(0x9)](_0x30595f, 0x1767); )\n                                                                                                                                                                                    _0x12b83a[_0x564652(0x31)](0x1767, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                    _0x1c5004--;\n                                                                                                                                                                            } else {\n                                                                                                                                                                                if (_0x12b83a[_0x564652(0x11)](0x3b, _0x30595f)) {\n                                                                                                                                                                                    for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                                                                                                                                    _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004] ^ _0x2f0111; _0x30595f > 0x19f5; )\n                                                                                                                                                                                        _0x12b83a[_0x564652(0x11)](0x19f5, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                        _0x1c5004--;\n                                                                                                                                                                                } else {\n                                                                                                                                                                                    if (0x37 === _0x30595f) {\n                                                                                                                                                                                        for (_0x1d4fa7[_0x1c5004] = _0x12b83a['SAYoa'](_0xd412d2, _0x484194, _0xf3aac1),\n                                                                                                                                                                                        _0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                                                                                                                                        _0x1d4fa7[_0x1c5004] = _0x12b83a[_0x564652(0x7b)](_0x1d4fa7[_0x1c5004], _0x2f0111),\n                                                                                                                                                                                        _0xf3aac1 > 0x0 && (_0xf3aac1 -= 0x5 * (_0x1d4fa7[_0x1c5004] + 0x3a)); _0x30595f > 0x10f6; )\n                                                                                                                                                                                            _0x12b83a['pKKkl'](0x10f6, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                            _0x1c5004--;\n                                                                                                                                                                                    } else {\n                                                                                                                                                                                        if (_0x12b83a[_0x564652(0x46)](0x18, _0x30595f)) {\n                                                                                                                                                                                            for (_0x1d4fa7[++_0x1c5004] = !0x0; _0x30595f > 0x1398; )\n                                                                                                                                                                                                _0x12b83a['BqDfU'](0x1398, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                _0x1c5004--;\n                                                                                                                                                                                        } else {\n                                                                                                                                                                                            if (0x1e === _0x30595f) {\n                                                                                                                                                                                                for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                                                                                                                                                _0x1d4fa7[_0x1c5004] = _0x12b83a[_0x564652(0x9)](_0x1d4fa7[_0x1c5004], _0x2f0111); _0x30595f > 0x13a3; )\n                                                                                                                                                                                                    0x13a3 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                    _0x1c5004--;\n                                                                                                                                                                                            } else {\n                                                                                                                                                                                                if (0x1d === _0x30595f) {\n                                                                                                                                                                                                    for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                                                                                                                                                    _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004] << _0x2f0111; _0x12b83a[_0x564652(0x8b)](_0x30595f, 0x1667); )\n                                                                                                                                                                                                        0x1667 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                        _0x1c5004--;\n                                                                                                                                                                                                } else {\n                                                                                                                                                                                                    if (0x2b === _0x30595f) {\n                                                                                                                                                                                                        for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                                                                                                                                                        _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004] >>> _0x2f0111; _0x12b83a[_0x564652(0x8b)](_0x30595f, 0x1a51); )\n                                                                                                                                                                                                            0x1a51 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                            _0x1c5004--;\n                                                                                                                                                                                                    } else {\n                                                                                                                                                                                                        if (_0x12b83a[_0x564652(0x7)](0x34, _0x30595f)) {\n                                                                                                                                                                                                            for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                                                                                                                                                            _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004] % _0x2f0111; _0x12b83a[_0x564652(0x92)](_0x30595f, 0x8f1); )\n                                                                                                                                                                                                                _0x12b83a['wsfhT'](0x8f1, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                _0x1c5004--;\n                                                                                                                                                                                                        } else {\n                                                                                                                                                                                                            if (_0x12b83a['FdcjM'](0x56, _0x30595f)) {\n                                                                                                                                                                                                                for (_0x1d4fa7[_0x1c5004] = ~_0x1d4fa7[_0x1c5004]; _0x12b83a[_0x564652(0x4e)](_0x30595f, 0x17ea); )\n                                                                                                                                                                                                                    0x17ea === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                    _0x1c5004--;\n                                                                                                                                                                                                            } else {\n                                                                                                                                                                                                                if (0x16 === _0x30595f) {\n                                                                                                                                                                                                                    for (_0x1d4fa7[_0x1c5004] = _0x12b83a[_0x564652(0x1)](_0xd412d2, _0x484194, _0xf3aac1),\n                                                                                                                                                                                                                    _0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                                                                                                                                                                    _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004] >= _0x2f0111,\n                                                                                                                                                                                                                    _0x12b83a['JsjPA'](_0xf3aac1, 0x0) && (_0xf3aac1 -= 0x5 * _0x12b83a[_0x564652(0x1b)](_0x1d4fa7[_0x1c5004], 0x3b)); _0x12b83a[_0x564652(0x82)](_0x30595f, 0x182a); )\n                                                                                                                                                                                                                        0x182a === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                        _0x1c5004--;\n                                                                                                                                                                                                                } else {\n                                                                                                                                                                                                                    if (0x7 === _0x30595f) {\n                                                                                                                                                                                                                        for (_0x12b83a[_0x564652(0x7c)](_0x4e19c9 = _0xd412d2(_0x484194, _0xf3aac1), 0x0) ? (0x1,\n                                                                                                                                                                                                                        _0xf3aac1 += _0x12b83a['gZeSF'](0x2 * _0x4e19c9, 0x2)) : _0xf3aac1 += 0x2 * _0x4e19c9 - 0x2; _0x30595f > 0x1a38; )\n                                                                                                                                                                                                                            _0x12b83a[_0x564652(0x55)](0x1a38, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                            _0x1c5004--;\n                                                                                                                                                                                                                    } else {\n                                                                                                                                                                                                                        if (0xd === _0x30595f) {\n                                                                                                                                                                                                                            for (_0x1d4fa7[_0x1c5004] = _0x12b83a[_0x564652(0x1)](_0xd412d2, _0x484194, _0xf3aac1),\n                                                                                                                                                                                                                            _0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                                                                                                                                                                            _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004] / _0x2f0111,\n                                                                                                                                                                                                                            _0xf3aac1 > 0x0 && (_0xf3aac1 -= _0x12b83a['LdgBs'](0x5, _0x1d4fa7[_0x1c5004] + 0x2b)); _0x30595f > 0x756; )\n                                                                                                                                                                                                                                0x756 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                _0x1c5004--;\n                                                                                                                                                                                                                        } else {\n                                                                                                                                                                                                                            if (_0x12b83a[_0x564652(0x55)](0x48, _0x30595f)) {\n                                                                                                                                                                                                                                for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                                                                                                                                                                                _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004] && _0x2f0111; _0x30595f > 0x18cb; )\n                                                                                                                                                                                                                                    0x18cb === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                    _0x1c5004--;\n                                                                                                                                                                                                                            } else {\n                                                                                                                                                                                                                                if (_0x12b83a[_0x564652(0xe)](0x40, _0x30595f)) {\n                                                                                                                                                                                                                                    for (_0x1d4fa7[++_0x1c5004] = !0x1; _0x12b83a[_0x564652(0x79)](_0x30595f, 0x103b); )\n                                                                                                                                                                                                                                        _0x12b83a[_0x564652(0x81)](0x103b, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                        _0x1c5004--;\n                                                                                                                                                                                                                                } else {\n                                                                                                                                                                                                                                    if (0xe === _0x30595f)\n                                                                                                                                                                                                                                        throw _0x1d4fa7[_0x1c5004] = _0xd412d2(_0x484194, _0xf3aac1),\n                                                                                                                                                                                                                                        _0x1d4fa7[_0x1c5004--];\n                                                                                                                                                                                                                                    if (0x2f === _0x30595f) {\n                                                                                                                                                                                                                                        for (_0x1d4fa7[++_0x1c5004] = _0xa3097b; _0x30595f > 0x1137; )\n                                                                                                                                                                                                                                            0x1137 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                            _0x1c5004--;\n                                                                                                                                                                                                                                    } else {\n                                                                                                                                                                                                                                        if (_0x12b83a[_0x564652(0x81)](0x3, _0x30595f)) {\n                                                                                                                                                                                                                                            for (_0x1d4fa7[_0x1c5004] = !_0x1d4fa7[_0x1c5004]; _0x12b83a[_0x564652(0x96)](_0x30595f, 0x103b); )\n                                                                                                                                                                                                                                                _0x12b83a['kmriT'](0x103b, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                _0x1c5004--;\n                                                                                                                                                                                                                                        } else {\n                                                                                                                                                                                                                                            if (_0x12b83a[_0x564652(0x20)](0x17, _0x30595f)) {\n                                                                                                                                                                                                                                                for (_0x2f0111 = _0x1d4fa7[_0x1c5004--]; _0x12b83a['wiumi'](_0x30595f, 0x8a9); )\n                                                                                                                                                                                                                                                    _0x12b83a['kmriT'](0x8a9, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                    _0x1c5004--;\n                                                                                                                                                                                                                                            } else {\n                                                                                                                                                                                                                                                if (0x2a === _0x30595f) {\n                                                                                                                                                                                                                                                    for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                                                                                                                                                                                                    _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004] !== _0x2f0111; _0x12b83a[_0x564652(0x96)](_0x30595f, 0x1091); )\n                                                                                                                                                                                                                                                        _0x12b83a['BPpsP'](0x1091, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                        _0x1c5004--;\n                                                                                                                                                                                                                                                } else {\n                                                                                                                                                                                                                                                    if (0x10 === _0x30595f) {\n                                                                                                                                                                                                                                                        for (_0x1d4fa7[_0x1c5004] > 0x0 && (_0xf3aac1 -= 0x5 * (_0x1d4fa7[_0x1c5004] + 0x1d)),\n                                                                                                                                                                                                                                                        _0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                                                                                                                                                                                                        _0x4e19c9 = _0x12b83a['yxiaz'](_0x29944e, _0x484194, _0xf3aac1),\n                                                                                                                                                                                                                                                        _0x568eef = '',\n                                                                                                                                                                                                                                                        _0x50dc14 = _0x22f5c2['q'][_0x4e19c9][0x0]; _0x50dc14 < _0x22f5c2['q'][_0x4e19c9][0x1]; _0x50dc14++)\n                                                                                                                                                                                                                                                            _0x568eef += String[_0x564652(0x45)](_0x12b83a[_0x564652(0x13)](_0xc15748, _0x22f5c2['p'][_0x50dc14]));\n                                                                                                                                                                                                                                                        for (_0xf3aac1 += 0x4,\n                                                                                                                                                                                                                                                        _0x1d4fa7[_0x1c5004--][_0x568eef] = _0x2f0111; _0x30595f > 0x1a47; )\n                                                                                                                                                                                                                                                            _0x12b83a[_0x564652(0x5b)](0x1a47, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                            _0x1c5004--;\n                                                                                                                                                                                                                                                    } else {\n                                                                                                                                                                                                                                                        if (_0x12b83a[_0x564652(0x5b)](0x4c, _0x30595f)) {\n                                                                                                                                                                                                                                                            for (_0x1d4fa7[_0x1c5004] > 0x0 && (_0xf3aac1 -= 0x5 * (_0x1d4fa7[_0x1c5004] + 0x1d)),\n                                                                                                                                                                                                                                                            _0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                                                                                                                                                                                                            _0x4e19c9 = _0x29944e(_0x484194, _0xf3aac1),\n                                                                                                                                                                                                                                                            _0x568eef = '',\n                                                                                                                                                                                                                                                            _0x50dc14 = _0x22f5c2['q'][_0x4e19c9][0x0]; _0x50dc14 < _0x22f5c2['q'][_0x4e19c9][0x1]; _0x50dc14++)\n                                                                                                                                                                                                                                                                _0x568eef += String[_0x564652(0x45)](_0xc15748 ^ _0x22f5c2['p'][_0x50dc14]);\n                                                                                                                                                                                                                                                            for (_0xf3aac1 += 0x4,\n                                                                                                                                                                                                                                                            _0x1d4fa7[_0x1c5004--][_0x568eef] = _0x2f0111; _0x30595f > 0xca6; )\n                                                                                                                                                                                                                                                                0xca6 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                _0x1c5004--;\n                                                                                                                                                                                                                                                        } else {\n                                                                                                                                                                                                                                                            if (_0x12b83a['sKqsm'](0x42, _0x30595f)) {\n                                                                                                                                                                                                                                                                for (_0x4e19c9 = _0x12b83a[_0x564652(0x1)](_0x29944e, _0x484194, _0xf3aac1),\n                                                                                                                                                                                                                                                                _0xf3aac1 += 0x4,\n                                                                                                                                                                                                                                                                _0x1d4fa7[_0x1c5004][_0x4e19c9] = _0x1d4fa7[_0x1c5004]; _0x12b83a[_0x564652(0x96)](_0x30595f, 0xfbb); )\n                                                                                                                                                                                                                                                                    0xfbb === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                    _0x1c5004--;\n                                                                                                                                                                                                                                                            } else {\n                                                                                                                                                                                                                                                                if (_0x12b83a[_0x564652(0x84)](0x57, _0x30595f)) {\n                                                                                                                                                                                                                                                                    for (_0x4e19c9 = _0x12b83a[_0x564652(0x1)](_0x29944e, _0x484194, _0xf3aac1),\n                                                                                                                                                                                                                                                                    _0xf3aac1 += 0x4,\n                                                                                                                                                                                                                                                                    _0x2f0111 = _0x33e19f[_0x4e19c9],\n                                                                                                                                                                                                                                                                    _0x1d4fa7[++_0x1c5004] = _0x2f0111; _0x12b83a[_0x564652(0x96)](_0x30595f, 0x131d); )\n                                                                                                                                                                                                                                                                        0x131d === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                        _0x1c5004--;\n                                                                                                                                                                                                                                                                } else {\n                                                                                                                                                                                                                                                                    if (0x1b === _0x30595f) {\n                                                                                                                                                                                                                                                                        for (_0x2f0111 = _0x1d4fa7[_0x1c5004],\n                                                                                                                                                                                                                                                                        _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004 - 0x1],\n                                                                                                                                                                                                                                                                        _0x1d4fa7[_0x1c5004 - 0x1] = _0x2f0111; _0x12b83a[_0x564652(0x38)](_0x30595f, 0x1492); )\n                                                                                                                                                                                                                                                                            _0x12b83a[_0x564652(0x25)](0x1492, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                            _0x1c5004--;\n                                                                                                                                                                                                                                                                    } else {\n                                                                                                                                                                                                                                                                        if (_0x12b83a['PcJlX'](0x2e, _0x30595f)) {\n                                                                                                                                                                                                                                                                            for (_0x4a995d = _0x1d4fa7[_0x1c5004--],\n                                                                                                                                                                                                                                                                            _0x12b83a[_0x564652(0x7a)]((_0x568eef = _0x1d4fa7[_0x1c5004])[_0x564652(0x87)], _0x3714b9) ? _0x568eef[_0x564652(0x57)] >= 0x1 ? _0x1d4fa7[_0x1c5004] = _0x1fdc1b(_0x484194, _0x568eef[_0x564652(0x8)], _0x568eef[_0x564652(0x37)], [_0x4a995d], _0x568eef[_0x12b83a[_0x564652(0x9b)]], _0x31793d, null, 0x1) : (_0x1d4fa7[_0x1c5004] = _0x1fdc1b(_0x484194, _0x568eef[_0x564652(0x8)], _0x568eef[_0x564652(0x37)], [_0x4a995d], _0x568eef[_0x564652(0x97)], _0x31793d, null, 0x0),\n                                                                                                                                                                                                                                                                            _0x568eef[_0x564652(0x57)]++) : _0x1d4fa7[_0x1c5004] = _0x568eef(_0x4a995d); _0x12b83a[_0x564652(0x38)](_0x30595f, 0x1a61); )\n                                                                                                                                                                                                                                                                                _0x12b83a[_0x564652(0x7a)](0x1a61, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                                _0x1c5004--;\n                                                                                                                                                                                                                                                                        } else {\n                                                                                                                                                                                                                                                                            if (0xb === _0x30595f) {\n                                                                                                                                                                                                                                                                                if (_0x12b83a[_0x564652(0x7a)](_0x12b83a['xMjZi'], _0x12b83a[_0x564652(0x85)])) {\n                                                                                                                                                                                                                                                                                    _0x4e19c9 = _0xd412d2(_0x484194, _0xf3aac1);\n                                                                                                                                                                                                                                                                                    try {\n                                                                                                                                                                                                                                                                                        if (_0x498cf3[_0x2ab336][0x2] = 0x1,\n                                                                                                                                                                                                                                                                                        _0x12b83a['gqOZZ'](0x1, (_0x2f0111 = _0x3714b9(_0x484194, _0x12b83a['GADdy'](_0xf3aac1, 0x4), _0x4e19c9 - 0x3, [], _0x33e19f, _0xa3097b, null, 0x0))[0x0]))\n                                                                                                                                                                                                                                                                                            return _0x2f0111;\n                                                                                                                                                                                                                                                                                    } catch (_0x6ea9fa) {\n                                                                                                                                                                                                                                                                                        if (_0x498cf3[_0x2ab336] && _0x498cf3[_0x2ab336][0x1] && 0x1 == (_0x2f0111 = _0x12b83a[_0x564652(0x74)](_0x3714b9, _0x484194, _0x498cf3[_0x2ab336][0x1][0x0], _0x498cf3[_0x2ab336][0x1][0x1], [], _0x33e19f, _0xa3097b, _0x6ea9fa, 0x0))[0x0])\n                                                                                                                                                                                                                                                                                            return _0x2f0111;\n                                                                                                                                                                                                                                                                                    } finally {\n                                                                                                                                                                                                                                                                                        if (_0x498cf3[_0x2ab336] && _0x498cf3[_0x2ab336][0x0] && 0x1 == (_0x2f0111 = _0x12b83a['HTOjf'](_0x3714b9, _0x484194, _0x498cf3[_0x2ab336][0x0][0x0], _0x498cf3[_0x2ab336][0x0][0x1], [], _0x33e19f, _0xa3097b, null, 0x0))[0x0])\n                                                                                                                                                                                                                                                                                            return _0x2f0111;\n                                                                                                                                                                                                                                                                                        _0x498cf3[_0x2ab336] = 0x0,\n                                                                                                                                                                                                                                                                                        _0x2ab336--;\n                                                                                                                                                                                                                                                                                    }\n                                                                                                                                                                                                                                                                                    for (_0xf3aac1 += 0x2 * _0x4e19c9 - 0x2; _0x30595f > 0x620; )\n                                                                                                                                                                                                                                                                                        0x620 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                                        _0x1c5004--;\n                                                                                                                                                                                                                                                                                } else {\n                                                                                                                                                                                                                                                                                    function _0x22cc38() {\n                                                                                                                                                                                                                                                                                        var _0x38b253 = _0x564652\n                                                                                                                                                                                                                                                                                          , _0x131d91 = [null];\n                                                                                                                                                                                                                                                                                        _0x131d91[_0x38b253(0x64)][_0x38b253(0x4)](_0x131d91, _0x36d39c);\n                                                                                                                                                                                                                                                                                        var _0x3bd6f3 = new (_0x4facba['bind']['apply'](_0x4a1881, _0x131d91))();\n                                                                                                                                                                                                                                                                                        return _0x30a343 && _0x12b83a[_0x38b253(0x6f)](_0x1aa65d, _0x3bd6f3, _0x1d74df['prototype']),\n                                                                                                                                                                                                                                                                                        _0x3bd6f3;\n                                                                                                                                                                                                                                                                                    }\n                                                                                                                                                                                                                                                                                }\n                                                                                                                                                                                                                                                                            } else {\n                                                                                                                                                                                                                                                                                if (_0x12b83a[_0x564652(0x18)](0x44, _0x30595f)) {\n                                                                                                                                                                                                                                                                                    if (_0x564652(0xd) !== _0x564652(0x44)) {\n                                                                                                                                                                                                                                                                                        for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                                                                                                                                                                                                                                        _0x4e19c9 = _0x29944e(_0x484194, _0xf3aac1),\n                                                                                                                                                                                                                                                                                        _0x568eef = '',\n                                                                                                                                                                                                                                                                                        _0x50dc14 = _0x22f5c2['q'][_0x4e19c9][0x0]; _0x50dc14 < _0x22f5c2['q'][_0x4e19c9][0x1]; _0x50dc14++)\n                                                                                                                                                                                                                                                                                            _0x568eef += String[_0x564652(0x45)](_0xc15748 ^ _0x22f5c2['p'][_0x50dc14]);\n                                                                                                                                                                                                                                                                                        for (_0xf3aac1 += 0x4,\n                                                                                                                                                                                                                                                                                        _0x1d4fa7[_0x1c5004--][_0x568eef] = _0x2f0111; _0x30595f > 0xe0c; )\n                                                                                                                                                                                                                                                                                            0xe0c === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                                            _0x1c5004--;\n                                                                                                                                                                                                                                                                                    } else {\n                                                                                                                                                                                                                                                                                        function _0x596110() {\n                                                                                                                                                                                                                                                                                            var _0x3ffbd7 = _0x564652\n                                                                                                                                                                                                                                                                                              , _0x1b6b51 = {\n                                                                                                                                                                                                                                                                                                'QBTLS': function(_0x5855a7, _0x4983c5, _0x5c73fe) {\n                                                                                                                                                                                                                                                                                                    var _0x53cab5 = _0x4a41;\n                                                                                                                                                                                                                                                                                                    return _0xe4f438[_0x53cab5(0x5)](_0x5855a7, _0x4983c5, _0x5c73fe);\n                                                                                                                                                                                                                                                                                                }\n                                                                                                                                                                                                                                                                                            };\n                                                                                                                                                                                                                                                                                            return (_0xa930c4 = _0x20908c() ? _0x2977d9[_0x3ffbd7(0x28)] : function(_0x35a188, _0x490a4b, _0x52bfdd) {\n                                                                                                                                                                                                                                                                                                var _0x587c50 = _0x3ffbd7\n                                                                                                                                                                                                                                                                                                  , _0x51b449 = [null];\n                                                                                                                                                                                                                                                                                                _0x51b449['push'][_0x587c50(0x4)](_0x51b449, _0x490a4b);\n                                                                                                                                                                                                                                                                                                var _0x57e6a7 = new (_0x24c6cb[_0x587c50(0x34)]['apply'](_0x35a188, _0x51b449))();\n                                                                                                                                                                                                                                                                                                return _0x52bfdd && _0x1b6b51[_0x587c50(0x6d)](_0x32ca83, _0x57e6a7, _0x52bfdd[_0x587c50(0x2)]),\n                                                                                                                                                                                                                                                                                                _0x57e6a7;\n                                                                                                                                                                                                                                                                                            }\n                                                                                                                                                                                                                                                                                            )[_0x3ffbd7(0x4)](null, arguments);\n                                                                                                                                                                                                                                                                                        }\n                                                                                                                                                                                                                                                                                    }\n                                                                                                                                                                                                                                                                                } else {\n                                                                                                                                                                                                                                                                                    if (0x53 === _0x30595f) {\n                                                                                                                                                                                                                                                                                        for (_0x1d4fa7[++_0x1c5004] = _0xfa87b5(_0x484194, _0xf3aac1),\n                                                                                                                                                                                                                                                                                        _0xf3aac1 += 0x2; _0x12b83a['TNifp'](_0x30595f, 0x19f3); )\n                                                                                                                                                                                                                                                                                            0x19f3 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                                            _0x1c5004--;\n                                                                                                                                                                                                                                                                                    } else {\n                                                                                                                                                                                                                                                                                        if (_0x12b83a[_0x564652(0x86)](0x31, _0x30595f)) {\n                                                                                                                                                                                                                                                                                            for (_0x4e19c9 = _0x12b83a[_0x564652(0x1)](_0x29944e, _0x484194, _0xf3aac1),\n                                                                                                                                                                                                                                                                                            _0xf3aac1 += 0x4,\n                                                                                                                                                                                                                                                                                            _0x4a995d = _0x1c5004 + 0x1,\n                                                                                                                                                                                                                                                                                            _0x1d4fa7[_0x1c5004 -= _0x4e19c9 - 0x1] = _0x4e19c9 ? _0x1d4fa7[_0x564652(0x16)](_0x1c5004, _0x4a995d) : []; _0x12b83a[_0x564652(0x75)](_0x30595f, 0x1435); )\n                                                                                                                                                                                                                                                                                                _0x12b83a[_0x564652(0x86)](0x1435, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                                                _0x1c5004--;\n                                                                                                                                                                                                                                                                                        } else {\n                                                                                                                                                                                                                                                                                            if (_0x12b83a[_0x564652(0x86)](0x4d, _0x30595f)) {\n                                                                                                                                                                                                                                                                                                for (; _0x12b83a['hOwmN'](_0x30595f, 0x1071); )\n                                                                                                                                                                                                                                                                                                    _0x12b83a[_0x564652(0x86)](0x1071, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                                                    _0x1c5004--;\n                                                                                                                                                                                                                                                                                            } else {\n                                                                                                                                                                                                                                                                                                if (_0x12b83a['UWMGT'](0x15, _0x30595f)) {\n                                                                                                                                                                                                                                                                                                    for (_0x2f0111 = _0x1d4fa7[_0x12b83a[_0x564652(0x65)](_0x1c5004, 0x1)],\n                                                                                                                                                                                                                                                                                                    _0x4a995d = _0x1d4fa7[_0x1c5004],\n                                                                                                                                                                                                                                                                                                    _0x1d4fa7[++_0x1c5004] = _0x2f0111,\n                                                                                                                                                                                                                                                                                                    _0x1d4fa7[++_0x1c5004] = _0x4a995d; _0x30595f > 0x183c; )\n                                                                                                                                                                                                                                                                                                        0x183c === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                                                        _0x1c5004--;\n                                                                                                                                                                                                                                                                                                } else {\n                                                                                                                                                                                                                                                                                                    if (_0x12b83a[_0x564652(0x80)](0x4, _0x30595f)) {\n                                                                                                                                                                                                                                                                                                        for (_0x2f0111 = _0x1d4fa7[_0x1c5004],\n                                                                                                                                                                                                                                                                                                        _0x1d4fa7[++_0x1c5004] = _0x2f0111; _0x12b83a[_0x564652(0x19)](_0x30595f, 0xf71); )\n                                                                                                                                                                                                                                                                                                            _0x12b83a[_0x564652(0x80)](0xf71, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                                                            _0x1c5004--;\n                                                                                                                                                                                                                                                                                                    } else {\n                                                                                                                                                                                                                                                                                                        if (_0x12b83a[_0x564652(0x80)](0x11, _0x30595f)) {\n                                                                                                                                                                                                                                                                                                            if (_0x12b83a['RbRaq'] !== _0x12b83a[_0x564652(0x33)]) {\n                                                                                                                                                                                                                                                                                                                _0x4e19c9 = _0x12b83a['yxiaz'](_0xd412d2, _0x484194, _0xf3aac1);\n                                                                                                                                                                                                                                                                                                                var _0x1338c6 = function _0x1cc642() {\n                                                                                                                                                                                                                                                                                                                    var _0xf70f4c = _0x564652\n                                                                                                                                                                                                                                                                                                                      , _0x391e0e = arguments;\n                                                                                                                                                                                                                                                                                                                    return _0x1cc642[_0xe4f438['zrNGy']] > 0x0 || _0x1cc642[_0xe4f438['zrNGy']]++,\n                                                                                                                                                                                                                                                                                                                    _0x1fdc1b(_0x484194, _0x1cc642[_0xe4f438[_0xf70f4c(0x61)]], _0x1cc642[_0xe4f438[_0xf70f4c(0x70)]], _0x391e0e, _0x1cc642[_0xf70f4c(0x97)], this, null, 0x0);\n                                                                                                                                                                                                                                                                                                                };\n                                                                                                                                                                                                                                                                                                                for (_0x1338c6[_0x564652(0x8)] = _0x12b83a[_0x564652(0xa)](_0xf3aac1, 0x4),\n                                                                                                                                                                                                                                                                                                                _0x1338c6[_0x564652(0x37)] = _0x4e19c9 - 0x2,\n                                                                                                                                                                                                                                                                                                                _0x1338c6['IΙΙ'] = _0x3714b9,\n                                                                                                                                                                                                                                                                                                                _0x1338c6[_0x12b83a['SOoBb']] = 0x0,\n                                                                                                                                                                                                                                                                                                                _0x1338c6['ΙIΙ'] = _0x33e19f,\n                                                                                                                                                                                                                                                                                                                _0x1d4fa7[_0x1c5004] = _0x1338c6,\n                                                                                                                                                                                                                                                                                                                _0xf3aac1 += _0x12b83a[_0x564652(0x63)](0x2, _0x4e19c9) - 0x2; _0x12b83a['tYXYt'](_0x30595f, 0x869); )\n                                                                                                                                                                                                                                                                                                                    _0x12b83a[_0x564652(0x80)](0x869, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                                                                    _0x1c5004--;\n                                                                                                                                                                                                                                                                                                            } else {\n                                                                                                                                                                                                                                                                                                                function _0x6c9fba() {\n                                                                                                                                                                                                                                                                                                                    var _0x23db2b = _0x564652;\n                                                                                                                                                                                                                                                                                                                    for (_0x5358df = _0x37df01[_0x39a85a--],\n                                                                                                                                                                                                                                                                                                                    _0x2cfce7 = _0x5cac76(_0x52b4f9, _0x1390aa),\n                                                                                                                                                                                                                                                                                                                    _0x5aa74b = '',\n                                                                                                                                                                                                                                                                                                                    _0x23270e = _0x1be6f4['q'][_0x3b727d][0x0]; _0x3abcae < _0x1b0bde['q'][_0x425292][0x1]; _0x219b63++)\n                                                                                                                                                                                                                                                                                                                        _0x4ce2a2 += _0x9d7c49[_0x23db2b(0x45)](_0x12b83a[_0x23db2b(0x98)](_0x31ab8d, _0x322583['p'][_0x304385]));\n                                                                                                                                                                                                                                                                                                                    for (_0x127502 += 0x4,\n                                                                                                                                                                                                                                                                                                                    _0x278007[_0x4d9bd5--][_0x2eaf43] = _0x397069; _0x4e2c50 > 0xe0c; )\n                                                                                                                                                                                                                                                                                                                        0xe0c === _0x589c7e && (_0x41e04a[_0x3671bd--][_0x57ea2a] = _0x478084[_0x4befae++]),\n                                                                                                                                                                                                                                                                                                                        _0x22dc14--;\n                                                                                                                                                                                                                                                                                                                }\n                                                                                                                                                                                                                                                                                                            }\n                                                                                                                                                                                                                                                                                                        } else {\n                                                                                                                                                                                                                                                                                                            if (0x49 === _0x30595f) {\n                                                                                                                                                                                                                                                                                                                for (; _0x12b83a[_0x564652(0x95)](_0x30595f, 0x16b7); )\n                                                                                                                                                                                                                                                                                                                    0x16b7 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                                                                    _0x1c5004--;\n                                                                                                                                                                                                                                                                                                            } else {\n                                                                                                                                                                                                                                                                                                                if (_0x12b83a[_0x564652(0x80)](0x2c, _0x30595f)) {\n                                                                                                                                                                                                                                                                                                                    for (; _0x30595f > 0xf17; )\n                                                                                                                                                                                                                                                                                                                        _0x12b83a[_0x564652(0x80)](0xf17, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                                                                        _0x1c5004--;\n                                                                                                                                                                                                                                                                                                                } else {\n                                                                                                                                                                                                                                                                                                                    if (_0x12b83a['vvqfG'](0x19, _0x30595f)) {\n                                                                                                                                                                                                                                                                                                                        for (_0x1d4fa7[++_0x1c5004] = _0x10e5cb(_0x484194, _0xf3aac1),\n                                                                                                                                                                                                                                                                                                                        _0xf3aac1 += 0x8; _0x30595f > 0x19dc; )\n                                                                                                                                                                                                                                                                                                                            _0x12b83a[_0x564652(0x78)](0x19dc, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                                                                            _0x1c5004--;\n                                                                                                                                                                                                                                                                                                                    } else {\n                                                                                                                                                                                                                                                                                                                        if (0x14 === _0x30595f) {\n                                                                                                                                                                                                                                                                                                                            for (_0x4e19c9 = _0x12b83a[_0x564652(0x1)](_0xd412d2, _0x484194, _0xf3aac1),\n                                                                                                                                                                                                                                                                                                                            _0x498cf3[_0x2ab336][0x0] && !_0x498cf3[_0x2ab336][0x2] ? _0x498cf3[_0x2ab336][0x1] = [_0x12b83a['qfwSc'](_0xf3aac1, 0x4), _0x12b83a[_0x564652(0x65)](_0x4e19c9, 0x3)] : _0x498cf3[_0x2ab336++] = [0x0, [_0x12b83a['qfwSc'](_0xf3aac1, 0x4), _0x12b83a[_0x564652(0x2d)](_0x4e19c9, 0x3)], 0x0],\n                                                                                                                                                                                                                                                                                                                            _0xf3aac1 += _0x12b83a[_0x564652(0x63)](0x2, _0x4e19c9) - 0x2; _0x12b83a['OCCVJ'](_0x30595f, 0xa3d); )\n                                                                                                                                                                                                                                                                                                                                0xa3d === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                                                                                _0x1c5004--;\n                                                                                                                                                                                                                                                                                                                        } else {\n                                                                                                                                                                                                                                                                                                                            if (0x20 === _0x30595f) {\n                                                                                                                                                                                                                                                                                                                                for (_0x1d4fa7[_0x1c5004] = _0x51cce9(_0x1d4fa7[_0x1c5004]); _0x30595f > 0x17ec; )\n                                                                                                                                                                                                                                                                                                                                    0x17ec === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                                                                                    _0x1c5004--;\n                                                                                                                                                                                                                                                                                                                            } else {\n                                                                                                                                                                                                                                                                                                                                if (_0x564652(0x3e) !== 'YAaGs') {\n                                                                                                                                                                                                                                                                                                                                    if (0x0 === _0x30595f)\n                                                                                                                                                                                                                                                                                                                                        throw _0x1d4fa7[_0x1c5004--];\n                                                                                                                                                                                                                                                                                                                                    if (_0x12b83a[_0x564652(0x8f)](0x4e, _0x30595f)) {\n                                                                                                                                                                                                                                                                                                                                        var _0x25d459 = 0x0\n                                                                                                                                                                                                                                                                                                                                          , _0x42fb78 = _0x1d4fa7[_0x1c5004]['length']\n                                                                                                                                                                                                                                                                                                                                          , _0x28fdfd = _0x1d4fa7[_0x1c5004];\n                                                                                                                                                                                                                                                                                                                                        for (_0x1d4fa7[++_0x1c5004] = function() {\n                                                                                                                                                                                                                                                                                                                                            var _0x20fe2e = _0x564652\n                                                                                                                                                                                                                                                                                                                                              , _0x1bafbb = _0xe4f438[_0x20fe2e(0x22)](_0x25d459, _0x42fb78);\n                                                                                                                                                                                                                                                                                                                                            if (_0x1bafbb) {\n                                                                                                                                                                                                                                                                                                                                                var _0x24e420 = _0x28fdfd[_0x25d459++];\n                                                                                                                                                                                                                                                                                                                                                _0x1d4fa7[++_0x1c5004] = _0x24e420;\n                                                                                                                                                                                                                                                                                                                                            }\n                                                                                                                                                                                                                                                                                                                                            _0x1d4fa7[++_0x1c5004] = _0x1bafbb;\n                                                                                                                                                                                                                                                                                                                                        }\n                                                                                                                                                                                                                                                                                                                                        ; _0x12b83a[_0x564652(0x67)](_0x30595f, 0xcda); )\n                                                                                                                                                                                                                                                                                                                                            0xcda === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                                                                                            _0x1c5004--;\n                                                                                                                                                                                                                                                                                                                                    } else {\n                                                                                                                                                                                                                                                                                                                                        if (_0x12b83a['CozeT'](0x12, _0x30595f)) {\n                                                                                                                                                                                                                                                                                                                                            var _0xbd2f50 = _0xfa87b5(_0x484194, _0xf3aac1)\n                                                                                                                                                                                                                                                                                                                                              , _0x3c286b = _0x1c5004;\n                                                                                                                                                                                                                                                                                                                                            for (_0x1d4fa7[_0x1c5004 + 0x1] = _0x1d4fa7[_0x3c286b] + _0xbd2f50,\n                                                                                                                                                                                                                                                                                                                                            _0xf3aac1 += 0x0; _0x12b83a[_0x564652(0x67)](_0x30595f, 0x515); )\n                                                                                                                                                                                                                                                                                                                                                0x515 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                                                                                                _0x1c5004--;\n                                                                                                                                                                                                                                                                                                                                        } else {\n                                                                                                                                                                                                                                                                                                                                            if (_0x12b83a[_0x564652(0x39)](0x51, _0x30595f)) {\n                                                                                                                                                                                                                                                                                                                                                for (_0x1d4fa7[_0x1c5004--] ? _0xf3aac1 += 0x4 : _0x12b83a['Awtlv'](_0x4e19c9 = _0xd412d2(_0x484194, _0xf3aac1), 0x0) ? (0x1,\n                                                                                                                                                                                                                                                                                                                                                _0xf3aac1 += _0x12b83a[_0x564652(0x72)](0x2, _0x4e19c9) - 0x2) : _0xf3aac1 += _0x12b83a['ZYFsA'](_0x12b83a[_0x564652(0x72)](0x2, _0x4e19c9), 0x2); _0x30595f > 0x60d; )\n                                                                                                                                                                                                                                                                                                                                                    0x60d === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                                                                                                    _0x1c5004--;\n                                                                                                                                                                                                                                                                                                                                            } else {\n                                                                                                                                                                                                                                                                                                                                                if (0x5a === _0x30595f) {\n                                                                                                                                                                                                                                                                                                                                                    for (_0x4e19c9 = _0x12b83a[_0x564652(0x1)](_0x29944e, _0x484194, _0xf3aac1),\n                                                                                                                                                                                                                                                                                                                                                    _0xf3aac1 += 0x4,\n                                                                                                                                                                                                                                                                                                                                                    _0x1d4fa7[_0x1c5004] = _0x1d4fa7[_0x1c5004][_0x4e19c9]; _0x12b83a[_0x564652(0x56)](_0x30595f, 0xb63); )\n                                                                                                                                                                                                                                                                                                                                                        0xb63 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                                                                                                        _0x1c5004--;\n                                                                                                                                                                                                                                                                                                                                                } else {\n                                                                                                                                                                                                                                                                                                                                                    if (0x50 === _0x30595f) {\n                                                                                                                                                                                                                                                                                                                                                        for (_0x2f0111 = _0x1d4fa7[_0x1c5004--],\n                                                                                                                                                                                                                                                                                                                                                        _0x1d4fa7[_0x1c5004] = _0x12b83a['qfwSc'](_0x1d4fa7[_0x1c5004], _0x2f0111); _0x12b83a[_0x564652(0x56)](_0x30595f, 0xce5); )\n                                                                                                                                                                                                                                                                                                                                                            0xce5 === _0x1c5004 && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                                                                                                            _0x1c5004--;\n                                                                                                                                                                                                                                                                                                                                                    } else {\n                                                                                                                                                                                                                                                                                                                                                        if (_0x12b83a[_0x564652(0x40)](0x43, _0x30595f))\n                                                                                                                                                                                                                                                                                                                                                            throw new Error(_0x564652(0x4d) + _0x30595f);\n                                                                                                                                                                                                                                                                                                                                                        for (; _0x30595f > 0xe8d; )\n                                                                                                                                                                                                                                                                                                                                                            _0x12b83a[_0x564652(0x1e)](0xe8d, _0x1c5004) && (_0x1d4fa7[_0x1c5004--][_0x1c5004] = _0x1d4fa7[_0x1c5004++]),\n                                                                                                                                                                                                                                                                                                                                                            _0x1c5004--;\n                                                                                                                                                                                                                                                                                                                                                    }\n                                                                                                                                                                                                                                                                                                                                                }\n                                                                                                                                                                                                                                                                                                                                            }\n                                                                                                                                                                                                                                                                                                                                        }\n                                                                                                                                                                                                                                                                                                                                    }\n                                                                                                                                                                                                                                                                                                                                } else {\n                                                                                                                                                                                                                                                                                                                                    function _0x1fe1b3() {\n                                                                                                                                                                                                                                                                                                                                        var _0x58eb4d = _0x564652\n                                                                                                                                                                                                                                                                                                                                          , _0x31617d = {}\n                                                                                                                                                                                                                                                                                                                                          , _0x474f20 = 0x0;\n                                                                                                                                                                                                                                                                                                                                        for (var _0x4fa1b5 in _0x16872a)\n                                                                                                                                                                                                                                                                                                                                            _0x31617d[_0x474f20++] = _0x4fa1b5;\n                                                                                                                                                                                                                                                                                                                                        return _0x31617d[_0x58eb4d(0xf)] = _0x474f20,\n                                                                                                                                                                                                                                                                                                                                        _0x31617d;\n                                                                                                                                                                                                                                                                                                                                    }\n                                                                                                                                                                                                                                                                                                                                }\n                                                                                                                                                                                                                                                                                                                            }\n                                                                                                                                                                                                                                                                                                                        }\n                                                                                                                                                                                                                                                                                                                    }\n                                                                                                                                                                                                                                                                                                                }\n                                                                                                                                                                                                                                                                                                            }\n                                                                                                                                                                                                                                                                                                        }\n                                                                                                                                                                                                                                                                                                    }\n                                                                                                                                                                                                                                                                                                }\n                                                                                                                                                                                                                                                                                            }\n                                                                                                                                                                                                                                                                                        }\n                                                                                                                                                                                                                                                                                    }\n                                                                                                                                                                                                                                                                                }\n                                                                                                                                                                                                                                                                            }\n                                                                                                                                                                                                                                                                        }\n                                                                                                                                                                                                                                                                    }\n                                                                                                                                                                                                                                                                }\n                                                                                                                                                                                                                                                            }\n                                                                                                                                                                                                                                                        }\n                                                                                                                                                                                                                                                    }\n                                                                                                                                                                                                                                                }\n                                                                                                                                                                                                                                            }\n                                                                                                                                                                                                                                        }\n                                                                                                                                                                                                                                    }\n                                                                                                                                                                                                                                }\n                                                                                                                                                                                                                            }\n                                                                                                                                                                                                                        }\n                                                                                                                                                                                                                    }\n                                                                                                                                                                                                                }\n                                                                                                                                                                                                            }\n                                                                                                                                                                                                        }\n                                                                                                                                                                                                    }\n                                                                                                                                                                                                }\n                                                                                                                                                                                            }\n                                                                                                                                                                                        }\n                                                                                                                                                                                    }\n                                                                                                                                                                                }\n                                                                                                                                                                            }\n                                                                                                                                                                        }\n                                                                                                                                                                    }\n                                                                                                                                                                }\n                                                                                                                                                            }\n                                                                                                                                                        }\n                                                                                                                                                    }\n                                                                                                                                                }\n                                                                                                                                            }\n                                                                                                                                        }\n                                                                                                                                    }\n                                                                                                                                }\n                                                                                                                            }\n                                                                                                                        }\n                                                                                                                    }\n                                                                                                                }\n                                                                                                            }\n                                                                                                        }\n                                                                                                    }\n                                                                                                }\n                                                                                            }\n                                                                                        }\n                                                                                    }\n                                                                                }\n                                                                            }\n                                                                        }\n                                                                    }\n                                                                }\n                                                            }\n                                                        }\n                                                    }\n                                                }\n                                            }\n                                        }\n                                    }\n                                }\n                            }\n                        }\n                    }\n                }\n            return [0x0, null];\n        }\n    }\n    function _0x1fdc1b(_0x407daf, _0x2b4fe1, _0x1bf090, _0x502aec, _0x2086de, _0x13679c, _0x357cd1, _0x3b8cb1) {\n        var _0x44fdd7 = _0x7083c4;\n        if ('iJhUX' === _0x44fdd7(0x15)) {\n            var _0x3a98c2, _0x43c136;\n            _0x12b83a[_0x44fdd7(0x36)](null, _0x13679c) && (_0x13679c = this),\n            _0x2086de && !_0x2086de['d'] && (_0x2086de['d'] = 0x0,\n            _0x2086de['$0'] = _0x2086de,\n            _0x2086de[0x1] = {});\n            var _0x121dbc = {}\n              , _0x210cf9 = _0x121dbc['d'] = _0x2086de ? _0x12b83a[_0x44fdd7(0x5f)](_0x2086de['d'], 0x1) : 0x0;\n            for (_0x121dbc[_0x12b83a[_0x44fdd7(0xb)]('$', _0x210cf9)] = _0x121dbc,\n            _0x43c136 = 0x0; _0x43c136 < _0x210cf9; _0x43c136++)\n                _0x121dbc[_0x3a98c2 = '$' + _0x43c136] = _0x2086de[_0x3a98c2];\n            for (_0x43c136 = 0x0,\n            _0x210cf9 = _0x121dbc[_0x44fdd7(0xf)] = _0x502aec['length']; _0x43c136 < _0x210cf9; _0x43c136++)\n                _0x121dbc[_0x43c136] = _0x502aec[_0x43c136];\n            return _0x3b8cb1 && _0x4fed5f[_0x2b4fe1],\n            _0x4fed5f[_0x2b4fe1],\n            _0x3714b9(_0x407daf, _0x2b4fe1, _0x1bf090, 0x0, _0x121dbc, _0x13679c, null)[0x1];\n        } else {\n            function _0x417546() {\n                var _0x17f3de = _0x44fdd7;\n                return _0x2edd65[_0x17f3de(0x2)][_0x17f3de(0x8d)][_0x17f3de(0x8c)](_0x2cbce0[_0x17f3de(0x28)](_0x5956b3, [], function() {})),\n                !0x0;\n            }\n        }\n    }\n}\n;\nvar _0x5479 = ['_f523010cd8cf5fb75250d1fc2f671c73', 'push', 'EhLkd', '_2b3beb7962f7014c81b260f8aa1890be', 'tFBhT', 'length', '112237xHQyuJ', '8LIglkV', 'Invalid\\x20code\\x20point:\\x20', '_575364e3fbdd1929a75a10a5118cc687', 'FMtAg', 'dCVzD', 'nHBiG', '5ekKZPb', 'XADBI', '184993ShoWTj', 'byRPx', 'zwMfF', '756117jhUodH', '1sUsefP', 'iacYd', '1138479XrELIw', '1087901hELCjO', 'fromCharCode', 'DOGdJ', '_972e441617b5152eab406b3c2c8e25ff', '835795CfxVfq', '706685rELxlJ', 'sVNOf', 'XolAc', 'UzJLB'];\nvar _0x55e4 = function(_0x5a83dc, _0x547951) {\n    _0x5a83dc = _0x5a83dc - 0x0;\n    var _0x55e409 = _0x5479[_0x5a83dc];\n    return _0x55e409;\n};\nvar _0x4d6a1b = _0x55e4;\n(function(_0xf55a6c, _0x4256ee) {\n    var _0x17d3cf = _0x55e4;\n    while (!![]) {\n        try {\n            var _0xa70d40 = -parseInt(_0x17d3cf(0x8)) * -parseInt(_0x17d3cf(0x7)) + -parseInt(_0x17d3cf(0x16)) + parseInt(_0x17d3cf(0x17)) + -parseInt(_0x17d3cf(0x1c)) + -parseInt(_0x17d3cf(0x14)) * -parseInt(_0x17d3cf(0x1b)) + -parseInt(_0x17d3cf(0xe)) * parseInt(_0x17d3cf(0x10)) + parseInt(_0x17d3cf(0x13));\n            if (_0xa70d40 === _0x4256ee)\n                break;\n            else\n                _0xf55a6c['push'](_0xf55a6c['shift']());\n        } catch (_0x50a5e0) {\n            _0xf55a6c['push'](_0xf55a6c['shift']());\n        }\n    }\n}(_0x5479, 0xc529c));\nfunction _d1b4df64eb152aa1d24e82f9bd0bfe7b(_0x1acabb, _0x456f43) {\n    var _0x106df0 = _0x55e4;\n    let _0x1e2b8c = '';\n    for (let _0x3e16ea = _0x1acabb; 0x0 != new Uint8Array(_0x456f43)[_0x3e16ea]; _0x3e16ea++)\n        _0x1e2b8c += String[_0x106df0(0x18)](new Uint8Array(_0x456f43)[_0x3e16ea]);\n    return _0x1e2b8c;\n}\nfunction _7140998d8f99c8324e0fcd817edff9b2(_0x139611) {\n    var _0x131c86 = _0x55e4\n      , _0x434b65 = {\n        'WcjOV': function(_0x2fdad2, _0x11de5b) {\n            return _0x2fdad2 % _0x11de5b;\n        },\n        'iacYd': function(_0x54f135, _0x47d7a2) {\n            return _0x54f135 / _0x47d7a2;\n        }\n    }\n      , _0x1cdab2 = 0x0 | _0x139611;\n    if (_0x1cdab2 < 0x80)\n        return [_0x1cdab2];\n    var _0x3621ec = _0x434b65['WcjOV'](_0x1cdab2, 0x80)\n      , _0x1b667f = _0x434b65[_0x131c86(0x15)](_0x1cdab2 - _0x3621ec, 0x80)\n      , _0x7a6865 = [];\n    return _0x7a6865[_0x131c86(0x2)](_0x3621ec + 0x80, 0x7f & _0x1b667f),\n    _0x7a6865;\n}\nfunction _6e8d40c844a972a6429074a59f678907(_0x496cdc) {\n    var _0x5dd132 = _0x55e4\n      , _0x5e2e3a = {\n        'wxcvd': function(_0x5266f7, _0x46cb26) {\n            return _0x5266f7 & _0x46cb26;\n        }\n    }\n      , _0x4a0480 = _0x496cdc >>> 0x0;\n    if (_0x4a0480 < 0x4000)\n        return _7140998d8f99c8324e0fcd817edff9b2(_0x4a0480);\n    var _0x2eac01 = [];\n    do {\n        if (_0x5dd132(0x5) === 'tFBhT') {\n            var _0x56ce93 = 0x7f & _0x4a0480;\n            (_0x4a0480 >>>= 0x7) && (_0x56ce93 |= 0x80),\n            _0x2eac01['push'](_0x56ce93);\n        } else {\n            function _0x35bd24() {\n                for (var _0xdc4172 = 0x0, _0x139652 = 0x0; _0x139652 < _0x520d19['length']; _0x139652++)\n                    _0xdc4172 = _0x5e2e3a['wxcvd'](_0xdc4172 + (_0x28b208[_0x139652] & _0x4b3f49), 0xff);\n                return _0xdc4172;\n            }\n        }\n    } while (_0x4a0480);\n    return _0x2eac01;\n}\nfunction _575364e3fbdd1929a75a10a5118cc687(_0x362fcb) {\n    var _0x3d21ce = _0x55e4;\n    for (var _0x1e626c = 0x0, _0x58bacc = 0x0; _0x58bacc < _0x362fcb[_0x3d21ce(0x6)]; _0x58bacc++)\n        _0x1e626c = _0x1e626c + (0xe9 & _0x362fcb[_0x58bacc]) & 0xff;\n    return _0x1e626c;\n}\nfunction _972e441617b5152eab406b3c2c8e25ff(_0x17d27e, _0x3f568d) {\n    var _0x17f238 = _0x55e4\n      , _0x5ce91f = {\n        'UzJLB': function(_0x32e788, _0x38e84a) {\n            return _0x32e788 < _0x38e84a;\n        }\n    };\n    for (var _0x914ea2 = 0x0, _0x259971 = 0x0; _0x5ce91f[_0x17f238(0x0)](_0x259971, _0x17d27e[_0x17f238(0x6)]); _0x259971++)\n        _0x914ea2 = _0x914ea2 + (_0x17d27e[_0x259971] & _0x3f568d) & 0xff;\n    return _0x914ea2;\n}\nfunction _2b3beb7962f7014c81b260f8aa1890be() {\n    var _0x2d2326 = {\n        'zYdkX': function(_0x43e7ad, _0x5c56da) {\n            return _0x43e7ad == _0x5c56da;\n        }\n    };\n    const _0x2055b1 = new function() {\n        eval('this[\\'a\\'] = 2;');\n    }\n    ();\n    return _0x2d2326['zYdkX'](!0x0, !_0x2055b1['a']);\n}\nfunction _2d6b4518857b5d2355e5bd9809691b44(_0x543826, _0x3993fb) {\n    var _0x3f7c9e = _0x55e4\n      , _0x1bf349 = {\n        'XADBI': function(_0x298685, _0x585396) {\n            return _0x298685 + _0x585396;\n        },\n        'ySAch': function(_0x30fb04, _0x21db63) {\n            return _0x30fb04 < _0x21db63;\n        },\n        'zwMfF': 'ZIhrN',\n        'FMtAg': function(_0x382aae, _0x546bf) {\n            return _0x382aae <= _0x546bf;\n        },\n        'EhLkd': function(_0x434164, _0x204d91) {\n            return _0x434164 & _0x204d91;\n        },\n        'sVNOf': function(_0x19f010, _0x160df0) {\n            return _0x19f010 >> _0x160df0;\n        },\n        'DOGdJ': function(_0x528411, _0x4d6e02) {\n            return _0x528411 | _0x4d6e02;\n        },\n        'XolAc': function(_0x7e49ef, _0x543b8f) {\n            return _0x7e49ef & _0x543b8f;\n        },\n        'nHBiG': function(_0x16b1fb, _0x3d4192) {\n            return _0x16b1fb | _0x3d4192;\n        },\n        'tPlMb': function(_0xfd6cc0, _0x3fbacd) {\n            return _0xfd6cc0 | _0x3fbacd;\n        },\n        'dCVzD': function(_0x45d0a5, _0x5c2c91) {\n            return _0x45d0a5 & _0x5c2c91;\n        }\n    };\n    for (var _0x922e84 = [], _0x4a3e21 = 0x0; _0x1bf349['ySAch'](_0x4a3e21, _0x543826['length']); _0x4a3e21 += _0x3993fb) {\n        if (_0x1bf349[_0x3f7c9e(0x12)] === 'SCMie') {\n            function _0x48cef0() {\n                var _0x1ae327 = _0x3f7c9e;\n                for (var _0x2061b9 = 0x0, _0xd2b865 = 0x0; _0xd2b865 < _0x12548c[_0x1ae327(0x6)]; _0xd2b865++)\n                    _0x2061b9 = _0x1bf349[_0x1ae327(0xf)](_0x2061b9, 0x21 & _0x588673[_0xd2b865]) & 0xff;\n                return _0x2061b9;\n            }\n        } else {\n            var _0x4f3d04 = _0x543826['charCodeAt'](_0x4a3e21);\n            if (_0x1bf349[_0x3f7c9e(0xb)](_0x4f3d04, 0x7f))\n                _0x922e84[_0x3f7c9e(0x2)](_0x4f3d04);\n            else {\n                if (_0x1bf349['FMtAg'](_0x4f3d04, 0x7ff))\n                    _0x922e84[_0x3f7c9e(0x2)](0xc0 | _0x4f3d04 >> 0x6),\n                    _0x922e84[_0x3f7c9e(0x2)](0x80 | _0x1bf349[_0x3f7c9e(0x3)](0x3f, _0x4f3d04));\n                else {\n                    if (_0x4f3d04 <= 0xffff)\n                        _0x922e84['push'](0xe0 | _0x1bf349[_0x3f7c9e(0x1d)](_0x4f3d04, 0xc)),\n                        _0x922e84[_0x3f7c9e(0x2)](_0x1bf349[_0x3f7c9e(0x19)](0x80, _0x1bf349[_0x3f7c9e(0x1e)](_0x1bf349[_0x3f7c9e(0x1d)](_0x4f3d04, 0x6), 0x3f))),\n                        _0x922e84[_0x3f7c9e(0x2)](0x80 | 0x3f & _0x4f3d04);\n                    else {\n                        if (!(_0x4f3d04 <= 0x10ffff))\n                            throw new Error(_0x3f7c9e(0x9) + _0x4f3d04);\n                        _0x922e84['push'](_0x1bf349[_0x3f7c9e(0xd)](0xf0, _0x4f3d04 >> 0x12)),\n                        _0x922e84[_0x3f7c9e(0x2)](0x80 | _0x1bf349[_0x3f7c9e(0x1d)](_0x4f3d04, 0xc) & 0x3f),\n                        _0x922e84[_0x3f7c9e(0x2)](_0x1bf349['tPlMb'](0x80, _0x1bf349[_0x3f7c9e(0xc)](_0x4f3d04 >> 0x6, 0x3f))),\n                        _0x922e84[_0x3f7c9e(0x2)](0x80 | 0x3f & _0x4f3d04);\n                    }\n                }\n            }\n        }\n    }\n    return new Uint8Array(_0x922e84);\n}\nfunction _f523010cd8cf5fb75250d1fc2f671c73(_0xe64b03) {\n    var _0x1e8b75 = _0x55e4\n      , _0x1447ab = {\n        'SypXu': function(_0x2c06b2, _0x202073) {\n            return _0x2c06b2 < _0x202073;\n        },\n        'byRPx': function(_0x429066, _0x56585f) {\n            return _0x429066 + _0x56585f;\n        }\n    };\n    for (var _0xffa0f2 = 0x0, _0x29f84f = 0x0; _0x1447ab['SypXu'](_0x29f84f, _0xe64b03[_0x1e8b75(0x6)]); _0x29f84f++)\n        _0xffa0f2 = _0x1447ab[_0x1e8b75(0x11)](_0xffa0f2, 0x21 & _0xe64b03[_0x29f84f]) & 0xff;\n    return _0xffa0f2;\n}\nvar _e0c26a2a191851217a8ed324fc1d568d = globalThis;\n_e0c26a2a191851217a8ed324fc1d568d['_d1b4df64eb152aa1d24e82f9bd0bfe7b'] = _d1b4df64eb152aa1d24e82f9bd0bfe7b,\n_e0c26a2a191851217a8ed324fc1d568d['_6e8d40c844a972a6429074a59f678907'] = _6e8d40c844a972a6429074a59f678907,\n_e0c26a2a191851217a8ed324fc1d568d[_0x4d6a1b(0xa)] = _575364e3fbdd1929a75a10a5118cc687,\n_e0c26a2a191851217a8ed324fc1d568d[_0x4d6a1b(0x1a)] = _972e441617b5152eab406b3c2c8e25ff,\n_e0c26a2a191851217a8ed324fc1d568d[_0x4d6a1b(0x4)] = _2b3beb7962f7014c81b260f8aa1890be,\n_e0c26a2a191851217a8ed324fc1d568d['_2d6b4518857b5d2355e5bd9809691b44'] = _2d6b4518857b5d2355e5bd9809691b44,\n_e0c26a2a191851217a8ed324fc1d568d[_0x4d6a1b(0x1)] = _f523010cd8cf5fb75250d1fc2f671c73;\nvar __$c = '56544b424251464d001f320474df1decedf402a0000000000002ed4c22000011001c570000240001240002240003042400041b5700013100014b3f380003220000110046570001240005042400061b2200073100014b530027510005403f0c015a0003255700005700013100024b380006570006042400061b2200083100014b53005301262a3f3800042200001100270c015a00042557000057000024000924000a3100024b51000607000a0c01530144000b3f38000522000011009b0c005a0002240002240003042400031b3100004b0424000c1b2200083100014b38000657000651000607000a0c01530144000b36000314000e583800a00c01530144000b0b00530c005a00030424000d1b0c005a00022400022400032400030c005a00022400022400033100003100034b380007570007042400061b2200083100014b53005301262a51000607000a0c01530144000b4d3f38000622000011006a0c005a000424000224000c042400031b3100004b0424000c1b2200083100014b38000657000651000607000a0c01530144000b0c005a000524000224000c042400031b3100004b0424000c1b2200083100014b38000757000751000607000a0c01530144000b3f38000722000011007922000e050a4a1c5100560c01530144000b1053013800060c005a000224000224000f51000a570006473800060c005a00062522000011001d0d0c005a000224000224000f51000d0c0204240010474400103f3a012c3100024b1707001b0a042400031b3100004b2200112a51000a0c0153014400123f38000822000011004b0c005a000722000011003d0c005a0006252200001100280c015a000a250c025a00000c025a00010c025a00023100034b170c035a00002200132e173f3a012c3100024b173f13013f3800092200001102ec0c005a00081300530026380006190000bcdd3800073a00f83800083a179e380009532938000a3a05e738000b537438000c3a02f438000d3a00e238000e3a017a38000f5700075700012400142a5100530c0153014400120d53013800100c005a000224000224000f51000a570010473800100c005a00062522000011001d4c0c005a000224000224000f51000d0c0204240015474400153f3a012c3100024b175300380011530038001257000253082a51002557000253202a51002b57000253402a5100315700023a00802a51003607004207003f57000838001157000938001207003057000a38001157000b38001207002157000c38001157000d38001207001257000e38001157000f3800120700035700125300275100530c0153014400120153013800100c005a000224000224000f51000a570010473800100c005a00062522000011001d0d0c005a000224000224000f51000d0c0204240015474400153f3a012c3100024b170c010c005a0009220016234400170c015a0015042400181b2200001100180a042400191b0c025a00010c025a00023100024b3f3100014b0424001a1b2200001100cc5700003800065700062400143800070c015a0015042400181b2200001100130a0424001b1b0c035a00063100014b3f3100014b0424001a1b2200001100885700003800060c025a0011570006270451000f170c025a00120c035a0007275100060700620c0153014400120c025a00002200001100043f44001c4c53013800070c005a000224000224000f51000a570007473800070c005a00062522000011001d370c005a000224000224000f51000d0c040424001d4744001d3f3a012c3100024b173f3100014b173f3100014b170c005a00081300530026570006263800135700133a03e8530a281e5100530c0153014400120e53013800100c005a000224000224000f51000a570010473800100c005a00062522000011001d100c005a000224000224000f51000d0c0204240015474400153f3a012c3100024b173f38000a22000011024057000024001c380006055700064a22001e2a5100530c0153014400123753013800070c005a000224000224000f51000a570007473800070c005a00062522000011001d020c005a000224000224000f51000d0c020424001d4744001d3f3a012c3100024b1722001f380008055700064a22000e2a510012570006042400031b3100004b380008570008042400201b2200213100014b24001438000957000953011e5100530c0153014400120d53013800070c005a000224000224000f51000a570007473800070c005a00062522000011001d4c0c005a000224000224000f51000d0c020424001d4744001d3f3a012c3100024b175700080424000c1b2200223100014b5100530c0153014400120d53013800070c005a000224000224000f51000a570007473800070c005a00062522000011001d010c005a000224000224000f51000d0c020424001d4744001d3f3a012c3100024b175700080424000c1b2200233100014b5100530c0153014400120253013800070c005a000224000224000f51000a570007473800070c005a00062522000011001d100c005a000224000224000f51000d0c020424001d4744001d3f3a012c3100024b170c015a0009255700005700085700013100034b0424001a1b2200001100043f3100014b042400241b2200001100540c0153014400120153013800060c005a000224000224000f51000a570006473800060c005a00062522000011001d4c0c005a000224000224000f51000d0c0304240010474400103f3a012c3100024b173f3100014b173f38000b2200001100a70c005a000813005300263800060c015a00085700002e170c015a00075700002e170c015a00065700002e170c015a00055700002e170c005a00081300530026570006263800075700073a03e8530a281e5100530c01530144000b4c53013800080c005a000224000224000f51000a570008473800080c005a00062522000011001d0d0c005a000224000224000f51000d0c0204240025474400253f3a012c3100024b173f38000c2200001100140c015a000b2557000053203100024b173f38000d2200001100900c005a000813005300263800060c015a000c5700002e170c005a00081300530026570006263800075700073a03e8530a281e5100530c01530144000b3053013800080c005a000224000224000f51000a570008473800080c005a00062522000011001d010c005a000224000224000f51000d0c0204240025474400253f3a012c3100024b170c0153014400263f38000e2200001100250c005a0006252200001100100c015a000e0c025a00002e173f3a1b583100024b173f38000f2200001102742200001100ba0c005a000b042400271b3100004b3800060c005a000b042400271b3100004b5700062653083d0451000f170c025a000624001453001e5100660c025a0006042400281b3100004b38000736000314002058380012570007240029510013570007042400291b5700123100014b170b002c5700070424002a1b3100004b38000857000724002b5100135700070424002b1b5700083100014b174d07ff780c025a000624001453001e51000f0c005a000c0c025a000c2e173f38000b2200001100800c025a00071a510063050c005a000d4a22001e275100400c005a000d2200001100305700000424002c1b3100004b53051e5100110c025a000b253100004b1707000f0c005a000c0c025a000c2e173f2e170700150c005a0006250c025a000b53323100024b170700160c005a0006250c025a000c3a03e83100024b173f38000c310000380006403800072538000822002d22002e22002f220030310004380009530038000a57000a5700092400143d5100570a042400311b57000957000a232200001100350c021844001d0c005a000a0c025a00082e170c020c005a00062522000011000a0c024044001d3f3a03e83100024b4400253f3100024b1757000a4738000a07ffa20a2400321300042200001100390c025a0006042400331b0a24003213000457000044002a3100014b170c025a000624001453012751000e0c025a000c253100004b173f440034042200001100570c005a00072200001100490c025a0006042400331b0a2400321300040c035a000044002a0457000044002b045700014400293100014b170c025a000624001453012751000e0c025a000c253100004b173f13013f4400183f380010220000110057310000380006570006042400351b0c015a00113100014b380006570006042400331b0c015a00003100014b17570006042400331b0c015a00013100014b17570006042400331b0c015a00023100014b175700063f3800122200001101805700000c015a00165301525700000c015a00175300525700000c015a00185300525700000c015a00195300525700000c015a001a5300525700000c015a001b40525700000c015a001c5300525700000c015a001f5300525700000c015a001d5300525700000c015a001e5300525700000c015a00205300525700000c015a002140525700000c015a00225300525700000c015a00235300525700000c015a002440525700000c015a00255303525700000c015a002625525700000c015a002c570001525700000c015a002d0c005a0009525700000c015a002b5300525700000c015a002840525700000c015a002e405257000153004400365700010c005a000f4400375700010c005a000f44003857000153004400395700010c005a000f44003a57000122003b23220031233800065700000c015a0029570006525700000c015a00305300525700000c015a00315300525700000c015a00325300525700000c015a00335300525700000c015a00345300525700000c015a003540523f3800362200001100c657000053004400360c005a000b042400271b3100004b38000657000022003c235100860c015a0079255700000c015a00772200001100330c005a000b042400271b3100004b3800060c025a000053014400360c015a004e252200002200003a27103100034b173f2200001100340c025a000053024400360c015a004e250c005a001057000024003d2e0c005a001057000024003e2e3a27113100034b173f3100044b1707001f57000053034400360c015a004e252200002200003a27123100034b173f38003722000011001b0c015a007f250a0a24003f570000193332ecaf3100044b3f38003822000011002f220040380006220041380007570006570007503800080c015a007c250a0a24003f5700085700003100044b3f3800392200001100140a042400421b5700002200433100024b3f38003a22000011002a220044380006220045380007570006570007503800080a042400461b5700005700083100024b3f38003b22000011005a57000124003953012a51004d5700005301275100255700010c015a00384400375700010c015a00394400385700012200474400480700225700010c015a003a4400375700010c015a003b4400385700012200494400483f38003c22000011023053733a00f85353536653673a00c93a00b53a00835363535e530453443a00fa3a0084531531000f380006310000380007570007042400331b53013100014b17570007042400331b5700000c015a0027235700065300233b3100014b17570007042400331b5700012400365700065301233b3100014b173a00ff38000822004a570001540451000b172200395700015451001d570001240039530f3553041d57000122004a23530f353c380008570007042400331b5700085700065302233b3100014b17570007042400331b5700000c015a0016235700065303233b3100014b17570007042400331b5700000c015a0017235700065304233b3100014b17570007042400331b5700000c015a0018235700065305233b3100014b17570007042400331b5700000c015a0019235700065306233b3100014b17570007042400331b5700000c015a001a235700065307233b3100014b17570007042400331b5700000c015a001d235700065308233b3100014b17570007042400331b5700000c015a001e235700065309233b3100014b17570007042400331b5700000c015a002523570006530a233b3100014b17570007042400331b5300570006530b233b3100014b17570007042400331b5700000c015a002023570006530c233b3100014b17570007042400351b5300570006530d233b5300570006530e233b3100023100014b38000757000124003a5100215700010424003a1b5700073100014b3800095700095100095700093800075700073f38003d2200001105f20c005a00050424004b1b0c005a001113000424004c1b5700003100014b3100014b3800065700062400143800070c005a000813005300263800083100003800090c015a00745700022e170c015a002f51027e5700020c015a00172353002a51026f5700020c015a00233a07d152530038000c0c005a000224000224000f51000c57000c53025038000c57000c0c005a000e0424004d1b0c005a000e0424004e1b3100004b41004f283100014b5038000c57000c0c005a000e0424004d1b0c005a000e0424004e1b3100004b41004f283100014b5038000c57000c0c005a000e0424004d1b0c005a000e0424004e1b3100004b41004f283100014b5038000c57000c0c005a000e0424004d1b0c005a000e0424004e1b3100004b41004f283100014b5038000c57000c0c005a000e0424004d1b0c005a000e0424004e1b3100004b41004f283100014b5038000c57000c0c005a000e0424004d1b0c005a000e0424004e1b3100004b41004f283100014b5038000c57000c0c005a000e0424004d1b0c005a000e0424004e1b3100004b41004f283100014b5038000c1657000c0c005a000e0424004d1b0c005a000e0424004e1b3100004b41004f283100014b5038000c57000c0c005a000e0424004d1b0c005a000e0424004e1b3100004b41004f283100014b5038000c57000c0c005a000e0424004d1b0c005a000e0424004e1b3100004b41004f283100014b5038000c57000c0c005a000e0424004d1b0c005a000e0424004e1b3100004b41004f283100014b5038000c57000c0c005a000e0424004d1b0c005a000e0424004e1b3100004b41004f283100014b5038000c57000c0c005a000e0424004d1b0c005a000e0424004e1b3100004b41004f283100014b5038000c530138000d0c005a000224000224000f51000a57000d4738000d0c005a00062522000011001d2d0c005a000224000224000f51000d0c0204240050474400503f3a012c3100024b170c005a000e0424004d1b0c005a000e0424004e1b3100004b41004f283100014b38000e57000e3a00ff3538000f5700020c015a002757000f5257000f5302345100100c015a005c5700022e1707000d0c015a005d5700022e170c015a006a5700022e170c015a006e5700022e170c015a00675700022e17570009042400351b53775368536053293100043100014b380009570009042400351b0c015a004457000e2e3100014b380009570009042400351b0c015a0048255700085700023100024b3100014b38000957000322005123041a51000717220052380010570009042400351b0c015a00465700102e3100014b3800095700020c015a002223380011570011473800110c015a00445700112e380012570009042400351b5700123100014b3800095700020c015a0022570011520c015a00755700022e170c015a0073253100004b3800130c015a00445700132e380014570009042400351b5700143100014b3800090c015a00445700072e380015570009042400351b5700153100014b3800090c015a00432557000157000f3100024b042400531b530053083100024b380016570009042400351b5700163100014b3800090c015a00412200542e38001757000322005523041a510007172200563800185700175100095700170700062200563800175700185100095700180700062200563800180c005a00050424004b1b570003042400571b5700173100014b3100014b3800190c005a00050424004b1b570003042400571b5700183100014b3100014b38001a570003042400581b5700192400143100014b38001b57001b042400351b5700193100014b38001c570003042400581b57001a2400143100014b38001d57001d042400351b57001a3100014b38001e570009042400351b57001c3100014b380009570009042400351b57001e3100014b3800090c015a003d255700025700033100024b38001f570009042400351b57001f3100014b380009570003042400371b5700093100014b38000a570003042400381b57000a3100014b38000b0c005a00081300530026570008263800205700203a03e8530a281e5100105700020c015a00233a07d2520d57000b3f38003e2200001100c52200003800060c015a003c255700032400365700033100024b1757000324004822005950380006360003140050583800285700062200005700020c015a00172350503800060c015a004e250c005a001057002824003d2e0c005a001057002824003e2e5700020c015a0023235700020c015a0017233100044b170b00440c015a003e255700005700015700025700033100044b380007570007510010570006570007503800060700175700062200005700020c015a00172350503800064d5700063f38003f2200001100950c015a00375700012e170c015a0036255700005700013100024b170c015a005c5700002e170c015a005d5700002e170c015a00725700002e170c015a00645700002e170c015a00685700002e170c015a006a5700002e170c015a006e5700002e170c015a00745700002e170c015a00655700002e175700000c015a00240c015a004b22005a2e520c015a00835700012e173f3800402200001100460c005a001222005b5700005022005c5013013800070c005a001324005d0424005e1b5700073100014b380006585100130c005a00145700065302232e3f070005253f3f38004122000011005331000038000653003800075700075700003d51003a570006042400331b0c005a000e0424004d1b0c005a000e0424004e1b3100004b3a0100283100014b3100014b175700074738000707ffc25700063f3800422200001100845700000c005a000f2751000c0c015a004253102e3f57000024001453023453002a5100041631000038000653003800075700075700002400143d5100430c005a0015255700000424005f1b57000753023100024b53103100024b380008570006042400331b5700085700013b3100014b1757000753025038000707ffb65700063f3800432200001100500c005a00055304130138000657000653005700003a00ff3552570006530157000053082b3a00ff3552570006530257000053102b3a00ff3552570006530357000053182b3a00ff35525700063f3800442200001100ae0c005a0005530813013800060c005a000e0424004d1b5700004100600f3100014b38000757000053002b38000857000653005700083a00ff3552570006530157000853082b3a00ff3552570006530257000853102b3a00ff3552570006530357000853182b3a00ff355257000653045700073a00ff3552570006530557000753082b3a00ff3552570006530657000753102b3a00ff3552570006530757000753182b3a00ff35525700063f38004522000011000d0c015a00455700002e3f38004622000011003e530038000653003800075700075700002400143d510023570006570000570007233a00e935503a00ff353800065700074738000707ffd65700063f3800472200001102be0c005a0005530813013800060c005a000e0424004d1b5700004100600f3100014b38000757000053002b38000853003800095700083a00ff3538000a57000853082b3a00ff3538000b57000957000b503a00ff3538000957000853102b3a00ff3538000c57000957000c503a00ff3538000957000853182b3a00ff3538000d57000957000d503a00ff353800095700073a00ff3538000e57000957000e503a00ff3538000957000753082b3a00ff3538000f57000957000f503a00ff3538000957000753102b3a00ff35380010570009570010503a00ff3538000957000753182b3a00ff35380011570009570011503a00ff35380009570006530057000a53293b52570006530157000b53293b52570006530257000c53293b52570006530357000d53293b525700062400145308270451000d175700010c015a002b2351014a3600031400955838006e5700010c015a00282340275100041253013800150c005a000224000224000f51000a570015473800155700010c015a002e53012623182751000f570006530057000953293b5257000653002357000653012350570006530223505700065303235038001353013800150c005a000224000224000f51000a570015473800155700155700010c015a002b23503800130b00a35300510012570006530357000d53273b5207ffef5700010c015a002c233800125700122400610424004b1b534353783a009153323100043100014b380013570012240061240062042400031b3100004b3800145700010c015a002e231827045100071757001451000f570006530457000e53293b5253013800150c005a000224000224000f51000a570015473800155700155700010c015a002b23503800134d5700010c015a002a57001352570006530457000e53293b52570006530557000f53293b52570006530657001053293b52570006530757001153293b525700063f3800482200001100850c005a00162400633800065700060424000c1b2200643100014b5100072200653f5700060424005e1b0a24006622006722006813023100014b5100072200693f5700060424005e1b0a24006622006a22006813023100014b51000722006b3f5700060424005e1b0a24006622006c22006813023100014b51000722006d3f22006e3f3800492200001100120c015a0049253100004b22006e273f38004a2200001101a00a24006f1a1a041a51000a170a2400701a1a380006050c005a00174a22000e2a041a51000a170a2400711a1a380007050a2400724a22000e270451000e17050a2400734a22000e270451001217050c005a00162400744a22000e27041a51001d170a2400662200752200681302042400761b0a2400773100014b041a51002a170a2400780451000b170a240078240079041a51000717220000042400031b3100004b22007a2738000840041a51000e170c005a001324007b1a1a3800095700091a0451000a170a24007c1a1a0451000a170a24007d1a1a041a510018170a24003b1a1a0451000d170a24003b24007b1a1a041a510028170a24007e240063042400061b22007f3100014b53005301261e0451000a170a24005a1a1a38000a0a24005a1a1a04510008175700061a045100081757000a1a38000b57000022005a2751000a57000b3f0700555700002200782751000a5700083f0700445700002200802751000a5700093f0700335700002200812751000a5700073f0700225700002200822751000a57000a3f070011570000220070275100075700063f3f38004b2200001100560c005a0013042400831b2200843100014b3800060c005a001813003800075700064e380009570009052e510025380008570007042400851b570008240086042400871b3100004b3100014b1707ffd95700073f38004c2200001100130c005a00192200881301253100004b3f38004d2200001101830c005a0002042400891b0c005a001324005d042400201b22008a3100014b0424008b1b220000110013570000042400201b22008c3100014b3f3100014b3100014b22005523041a51000517253800060c005a0002042400891b0c005a001324005d042400201b22008a3100014b0424008b1b220000110013570000042400201b22008c3100014b3f3100014b3100014b22008d23041a51000517253800070c005a001a13003800085700080424008e1b22008f220090183100034b17570008042400911b2200922200933100024b17570008042400911b2200942200953100024b170c005a001b042400961b0a2400321300042200974400980422009944009a0422009b44009c040a24009d24009e44009f040a24007e2400634400a0040a24007e2400a14400a2040a2400321300045700004400a30457000144003e045700064400a404570003220000504400a5040a2400484400a6045700074400a7045700024400a84400a93100014b380009570008042400aa1b5700093100014b173f38004e22000011003a57000253052b57000153021d3b57000153032b57000253041d3b505700005700013b5700055700035303355700043b235700023b503b3f38004f22000011002b193c6ef3733800065700005700065038000057000053022b5303353800075700075700003100023f380050220000110032570001042400531b530053203100024b3800060c005a00192200a82200ab2200ac1303255700005700063100024b3f38005122000011001f0c005a00192200ad2200ae2200af1303255700005700013100024b3f38005222000011001f0c005a00192200ae2200ad2200b01303255700005700013100024b3f3800532200001100150c005a00192200ae2200b113025700002e3f38005422000011001f0c005a00192200ad2200a82200b21303255700005700013100024b3f3800552200001100150c005a00192200a32200b313025700002e3f38005622000011008f2200b43800062200b53800072200b6380008570001042400531b530053023100024b57000750570001042400531b5302530c3100024b503800095700065700075057000850380009570001042400531b530853063100024b57000650570008042400531b530253083100024b5038000a0c005a00192200a82200ad2200b71303255700005700093100024b3f3800572200001100150c005a00192200592200b813025700002e3f3800582200001100150c005a00192200ad2200b913025700002e3f38005922000011004b403800060c015a004a253100004b5100365700002200ba235700002200bb23263a00aa1e041a510017175700002200bc235700002200bd23263a00aa1e510007183800065700063f38005a220000110062403800063600031400455838000e0c005a0002042400be1b57000e22003e0a24003213000422000011000a0c02184400103f4400bf3100034b170c005a00192200a32200c0130257000e2e170b000f0c005a001c2200001301004d5700063f38005b22000011004a5700000c015a002c233800065700000c015a001623530027510005183f403800070c015a005b253100004b5100071838000757000751000e5700000c015a00165300525700073f38005c2200001100565700000c015a001823530127510005183f403800060c015a005e253100004b380007570007533f2a5100125700000c015a0018530152183800065700000c015a002b5700000c015a001723530350525700063f38005d22000011028e2200001100405700002400c13800065700065100305700062400c238000757000653644400c257000613003800085700065700074400c257000824003e220000503f3f3800060a2400321300042200c34400c4042200c34400c5042200c34400c6042200c34400c73800073100003800082200c33800092200c338000a2200c338000b2200c338000c537f38000d5700060a2e38000e0a2400662200c82200001302042400c91b57000e3100014b38000f57000f51000f57000757000f5300234400c557000e5100ab57000e042400ca1b0a2400662200cb2200cc13022200213100024b042400ca1b0a2400662200cd2200cc13022200003100024b042400201b0a2400662200ce2200cc13023100014b38001057001024001438000d570010530023041a510007172200cf0424005f1b53003a00803100024b38000957001057000d53012623041a51000e1757001057000d53022623041a510007172200cf0424005f1b53003a00803100024b38000a57000757000a4400c45700075700094400c757000a38000b57001157000b045100191757000b042400061b2200d03100014b53005301261e1a53001d3c38001157001157000b045100191757000b042400061b2200d13100014b53005301261e1a53011d3c38001157001157000b045100191757000b042400061b2200d23100014b53005301261e1a53021d3c38001157001157000b045100191757000b042400061b2200d33100014b53005301261e1a53031d3c38001157001157000b045100191757000b042400061b2200d43100014b53005301261e1a53041d3c38001157001157000b045100191757000b042400061b2200d53100014b53005301261e1a53051d3c38001157000051000b5700005700112e175700113f38005e2200001100b136000314000b58380099403800070b009c0c005a00162400d6380006403800070c005a00162400d7402a51000a1838000707000e0c005a00162400d73800072200d70c005a0016540451000b172200d7570006543800085700081a5100095700083800070c005a00160451001a170c005a0002042400d81b0c005a00162200d73100024b0451001d170c005a0002042400d81b0c005a00162200d73100024b2400bf510007183800074d5700073f38005f22000011011a5700003800060c005a00133800075700072400d93800082200d757000654041a51000b172200da57000654041a51000b172200db57000654041a51000b172200dc57000654041a51000b172200dd57000754041a51000b172200de57000754041a51000b172200df57000754041a51000b172200e057000754041a51000b172200e157000754041a51000b172200e257000754041a51000b172200e357000754041a51000b172200e457000754041a51000b172200e557000754041a51000b172200e657000754041a5100151725570008042400e71b2200e83100014b2a041a5100151725570008042400e71b2200d73100014b2a041a5100151725570008042400e71b2200e93100014b2a510008183f070005403f3f3800602200001100c85700003800062200ea5700065404510011175700062200ea230c005a000f2a510005183f2200eb57000654041a51000b172200ec57000654041a51000b172200ed57000654041a51000b172200ee57000654041a51000b172200ef57000654041a51000b172200f057000654041a51000b172200f157000654041a51000b172200f257000654041a51000b172200f357000654041a51000b172200f457000654041a51000b172200f557000654041a51000b172200f657000654510008183f070005403f3f3800612200001100345700000c015a00242351002636000314000958380012183f0b00170c005a00162400f72400f8530027510005183f4d403f380062220000110005403f3800632200001100ab5700000c015a002c233800065700000c015a00192353002a510005183f53003800070c015a005f5700062e51000f570007530153001d3c3800070c015a00605700062e51000f570007530153011d3c3800070c015a00615700062e51000f570007530153021d3c3800070c015a00625700002e51000f570007530153031d3c3800070c015a00635700062e51000f570007530153041d3c3800075700000c015a001957000752403f3800642200001100cd5700000c015a002c2338000653003800073600031400075838003f0b00a122005a5700065451002f57000622005a233800085700080451000f172200f90c005a001d54402751000f570007530153001d3c3800075700000c015a002123402751005c0c005a00162400fa042400fb1b0a2400321300042200fc4400053100014b0424001a1b2200001100245700002400fd2200fe275100160c025a00000c015a00201523530153011d3c523f3100014b175700000c015a002118524d5700000c015a002057000752403f3800652200001100260c015a004d253100004b380006570006042400ff1b2201003100014b510005183f403f3800662200001100845700000c015a00332353001e04510010175700000c015a00342353001e04510017175700000c015a0033235700000c015a0034233251004b0c005a000e042401011b5700000c015a0033235700000c015a003423263100014b38000657000653023d04510010175700000c015a00312353143d51000d5700000c015a003518523f3800672200001101a95700000c015a0029233800065700062522002d2200001100610c025a00000c015a001c53015257000024010240275100160c025a00000c015a001f1523530153001d3c520c025a00000c015a00310c025a00000c015a003123530150520c025a00000c015a00340c005a000b042400271b3100004b523f3100024b175700062522010322000011002f0c025a00000c015a001c53015257000024010240275100160c025a00000c015a001f1523530153011d3c523f3100024b175700062522002f22000011003b57000024010240275100160c025a00000c015a001f1523530153021d3c520c025a00000c015a00320c025a00000c015a003223530150523f3100024b175700062522010422000011002257000024010240275100160c025a00000c015a001f1523530153031d3c523f3100024b17570006252200302200001100610c025a00000c015a001c53015257000024010240275100160c025a00000c015a001f1523530153041d3c520c025a00000c015a00300c025a00000c015a003023530150520c025a00000c015a00330c005a000b042400271b3100004b523f3100024b173f38006822000011001f0c005a001e22003013013800065700062401021827510005183f403f3800692200001100cc5700000c015a001b2340275100490c015a0066253100004b5100145700000c015a001a1523530153001d3c520c015a0069253100004b5100145700000c015a001a1523530153021d3c525700000c015a001b18525700000c015a001c235300275100175700000c015a001a1523530153011d3c520700175700000c015a001a152353ff530153011d3b35525700000c015a0035235100145700000c015a001a1523530153031d3c525700000c015a001f2353001e5100145700000c015a001a1523530153041d3c523f38006a2200001100e6403800063600180c005a0013240105042401061b5700073100014b1714000b583801ae183800060b00b80c005a001324010724001453001e51001b050c005a00132401074a22000e2a51000718380006070007183800065700061a5100830c005a0013042401081b2201093100014b38000757000722010a4400050c005a00132401050424010b1b5700073100014b170c005a001324010724010a3800080c005a001922010c22010d130222010a2e380009055700084a22000e27041a51000917570009252751000a183800060700115700085700092a510007183800064d5700063f38006b220000110076403800065700000c015a002d23380007570007240061510007183800060c005a000b1a041a51000d170c005a000b24010e1a041a51000c170c005a001f24010f51000a183800060700280c005a0003042400bf1b0c005a000b2201103100024b3800085700080527510007183800065700063f38006c2200001100285700000c015a002c2338000622011157000654510010570006042401111b3100004b3f183f38006d2200001100705700000c015a001e2353002a510005183f53003800060c015a006b253100004b51000f570006530153001d3c3800060c015a006c5700002e51000f570006530153011d3c3800060c015a006d5700002e51000f570006530153021d3c3800065700000c015a001e57000652403f38006e2200001100fd22000011000d0c022f4400102201123f38000757000024000138000857000824000238000957000924000338000a57000024011338000b57000b1a51000757000a3f57000b24000d38000c57000924000438000d57000924000d38000e57000957000744000457000957000744000d360003140007583800400b000c57000722000050174d57000957000d44000457000957000e44000d055700064a22001e2a041a51000e175700062400052200032a041a51000d1757000624001453002a51000757000a3f57000c255700065700073100003100034b38000f57000f042400061b2201123100014b53005301262751000757000a3f5700063f38006f2200001100d50c015a006f5700002e380006570000042400661b2201143100014b38000757000624000422000050042400ca1b5700072200003100024b380008310000380009530038000a530038000b57000124001438000c57000b57000c3d51007457000157000b2338000d57000d51003f570006042400041b57000d3100014b042400ca1b5700072200003100024b38000e57000957000b57000e57000827510008530107000553005207000c57000957000b53005257000a57000957000b2357000b1d3c38000a57000b4738000b07ff8857000a3f38007022000011011a0a38000657000624011524004e5700062401165700062400c131000338000757000624011722011831000257000624011922010c31000257000624011922011a31000257000624011b22011c31000257000624011b2200a13100023100053800085700062401132400d8380009530038000a57000824001438000b57000a57000b3d51007457000857000a2338000c57000c53002338000d57000d51004257000d24000238000e57000e5100335700092557000e57000c5301233100024b38000f57000f510019570007042400331b57000f2400bf3100014b17070012570007042400331b53003100014b1757000a4738000a07ff880c015a0070255700065700073100024b3800105700103a00ff2a510005183f403f3800712200001100335700000c015a001d2353002a510005183f0c015a0071253100004b5100145700000c015a001d1523530153001d3c523f3800722200001100640a38000657000624011d22011e27041a51000e1757000624011d22011f27041a51000a17570006240120041a51000a17570006240121041a51000a1757000624012251000953003f0700180c005a0002042401231b5700063100014b2400143f3f3800732200001100cf5700000c015a002c233800065700000c015a00172353002a510005183f53003800070c005a000f38000822012457000654510015570006042401241b3100004b38000807000f570007530153001d3c38000757000851000c570008530523070005530038000957000953002751000f570007530153011d3c3800075700000c015a0017570007525700000c015a00172353002a5100370c005a0006252200001100230c015a004e252200002200003a07d30c025a00000c015a0017233100044b173f3a012c3100024b17403f3800742200001100865700000c015a00172353002a510005183f5700000c015a0022310001233800065700000c015a002c23380007570006536334532127041a51000b175700063a00821c38000857000851002022012557000754510016570007042401251b5700073a00803100024b1722012657000754510013570007042401261b5700073100014b173f3800752200001100960a22003c2304220127231b5700010a2400321300040a2400321300040a22003c23220128230a2400321300043a0800440129130144012a44012b3100024b0424001a1b2200001100250c025a000057000024012c44003f0c025a000251000e0c025a0002253100004b173f3100014b042400241b2200001100160c025a000351000d0c025a00035700002e173f3100014b173f3800792200001100542200003800065700003800070c005a00205700011301570007235300465100305700060c005a00040424000a1b0c005a00205700011301570007233100014b503800065700074738000707ffc25700063f38007a22000011002d570000042400531b570001570001570002503100024b3800060c005a002057000613013800075700073f38007b2200001100d90c005a0008130053002638000657000124012d24012a24012e38000757000338000857000124012d0424012f1b5700082400143100014b3800090c005a00205700075700095700082400141303042401301b5700083100014b1757000124012d042401311b5700095700082400143100024b38000a22000038000b570000240132510018570000042401321b57000a5700073100024b0700130c015a007a2557000a5700073100024b38000b57000124012d042401331b57000a3100014b1757000124012d042401331b5700093100014b1757000b3f38007c2200001100b70c005a0008130053002638000657000124012d24012a24012e38000757000338000857000124012d0424012f1b5700082400143100014b3800090c005a00205700075700095700082400141303042401301b5700083100014b1757000124012d042401341b5700095700082400143100024b38000a0c015a007b2557000757000a53103100034b38000b57000124012d042401331b57000a3100014b1757000124012d042401331b5700093100014b1757000b3f38007d2200001100b70c005a0008130053002638000657000124012d24012a24012e38000757000338000857000124012d0424012f1b5700082400143100014b3800090c005a00205700075700095700082400141303042401301b5700083100014b1757000124012d042401351b5700095700082400143100024b38000a0c015a007b2557000757000a53103100034b38000b57000124012d042401331b57000a3100014b1757000124012d042401331b5700093100014b1757000b3f38007e2200001100be0c005a0008130053002638000657000124012d24012a24012e38000757000238000857000124012d0424012f1b5700082400143100014b3800090c005a00205700075700095700082400141303042401301b5700083100014b1757000124012d042401361b5700095700082400145700033100034b38000a0c015a007b2557000757000a5700082400143100034b38000b57000124012d042401331b57000a3100014b1757000124012d042401331b5700093100014b1757000b3f38007f2200001100275700002201372200001100190c015a0084250c015a00825700005700013100034b3f523f38008322000011008c2f380007530053012638000853003800093600031400075838004e0b006d0a38000a0c015a008038000b0c005a000f38000c570000530026570000275100475700000c015a0081275100160c015a00402557000b57000a3100024b38000c5700000c015a00822751001c0c015a003f2557000157000257000b57000a3100044b38000c57000c3f4d3f3800845300380000530038000153003800023100003800110c005a0009380013530038008557008553053d5100520c005a000e0424004d1b0c005a0008042400271b3100004b3a03e80f0c005a000e0424004e1b3100004b505302343100014b380014570011042400331b5700143100014b175700854738008507ffab57001357000c44012657001357000b440125570013570012440124570010253100004b38001557001322001657001552570013190025030144013857000e5700132e175364380016536538001753663800185367380019536838001a3a041038001b536938001c536a38001d536b38001e536c38001f536d3800203a04423800213a00cb3800223a00cc3800233a012d3800243a01913800253a01923800263a01933800273a01943800283a01f53800293a03e338002a3a03e438002b3a03e538002c3a03e638002d3a166e38002e1838002f3a02593800303a025a3800313a025b3800323a025c3800333a025d3800343a025e3800350a5700504401390a57004f44013a0a5700514400460a57005244013b0a57005344013c0a57005444013d0a57005544013e0a5700564400570a5700574400420a57005844013f0a570059440058530053615373536d530153005300530053015324530753605303537f537f537f530053605301537f5301537f53605302537f537f5301537f536053005301537f53605301537f530053605300530053605303537f537f537f5301537f530353135312530553025306530053025302530053005300530153005303530153045301530353045301530453055301537053015302530253055306530153013a008053023a00805302530653085301537f530153413a00903a00965304530b53073a00975302530d5306536d5365536d536f5372537953025300532353785379535f53645361536153395332533653385338536653665339533353305339536553315361533253395364533253355332533253345366536453305331533653345361530053015306536d5361536c536c536f53635300530c530453665372536553655300530d532353785379535f5331533853645331533253625338536553355334533153625331536653645338533053625331536353335363533253655365536253365333536153325330533853005302532353785379535f5363536153345365536453615332533653345332536553345339536353335333533853315331533553385366533653625330533953625330533153355336533753005304532353785379535f5336536653355364533153315362536453395337533353625337536153615365533153635331536253655339533253355364533553645336533953395363533153005305530b535f5369536e5369537453695361536c5369537a5365530053005319535f535f5369536e536453695372536553635374535f53665375536e536353745369536f536e535f537453615362536c5365530153005310535f535f536553725372536e536f535f536c536f5363536153745369536f536e5300530b53095373537453615363536b53535361537653655300530f530c5373537453615363536b5352536553735374536f5372536553005310530a5373537453615363536b5341536c536c536f536353005311530953075301530053415301530b53015300530a3a00ef3a008f53025312530353005301530b3a00df3a0083530153025307537f5301537e5323530053413a00a05302536b5322530653245300532053065322530353413a009c3a00fa3a00b73a00c5530653365302530c5320530353413a00f4530a5328530253005341537f537353413a00f8530a5328530253005341537f53735372532253025341537f53735320530253413a00a53a009d3a00f33a00d653055372536a53413a00a73a00be3a00dc3a008c5301536a533653023a009c530253205303532053035341530c536a53365302530853035340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405320530353285302530c5322530253413a00983a00e23a008c5372534c530453405320530253413a00873a00fa3a00c13a00b9537b534c530453405320530253413a00fc3a00ed3a00dc3a00b55379534c530453405320530253413a00cc3a00e23a00db3a00d85378534c530453405320530253413a00a23a00ab3a00ea3a00bf5378534c530453405320530253413a00933a00813a00a43a008f5378534c530453405320530253413a00bb3a00de3a00db3a008453785346530d530a5320530253413a00d33a009f3a00813a008853785347530d53675320530353285302530853413a00b13a00c03a008c3a00ad537a533653025300530c5367530b5320530253413a00943a00813a00a43a008f53785346530d53185320530253413a00bf3a00fa3a00dd3a009253785346530d53275320530253413a00ea3a00e43a00ac3a00ba53785347530d536653413a00cc530b532853025300531a53413a00d0530b532853025300531a5320530353285302530853413a00dd3a00a93a00cd3a00835379533653025300530c5366530b5320530253413a009f3a00de3a00853a00c95378534c530453405320530253413a00a33a00ab3a00ea3a00bf53785346530d53505320530253413a00d03a00e23a00e53a00c253785347530d53665320530353285302530853413a00ea3a00e43a00ac3a00ba5378533653025300530c5366530b5320530253413a00a03a00de3a00853a00c953785346530d53235320530253413a00d93a00d83a00e23a00d353785346530d53375320530253413a009a3a00ea3a00a73a00d853785347530d53655320530353285302530853413a00e53a00fe3a00eb3a00a3530653413a00db3a008c3a00c13a0085537953205303532d53003a00fa5301531b533653025300532053035320530353285302534c533653023a00885301530c5365530b5320530253413a00d03a00e53a00843a00fe5378534c530453405320530253413a00f13a00ea3a00d93a00e25378534c530453405320530253413a00cd3a00e23a00db3a00d853785346530d53055320530253413a00ca3a00c13a00b83a00e253785347530d53665320530353285302530853413a00f93a00b43a00d63a00e153015336530253005320530353205303532853025314533653025350530c5366530b5320530253413a00f23a00ea3a00d93a00e253785346530d53245320530253413a00e53a00ad3a00f13a00f453785346530d53435320530253413a00c73a00b93a00ef3a00fb53785347530d53655320530353285302530853413a00d83a00b93a00863a009b5301533653025300530c5365530b5320530253413a00f43a00d53a00aa3a00855379534c530453405320530253413a00d13a00e53a00843a00fe53785346530d53495320530253413a00dd3a00a93a00cd3a008353795347530d53655320530353285302530853413a00f93a00b43a00d63a00e1530153413a00a13a00fa3a00d53a00d7537c53205303532d53003a00895302531b5336530253005320530353415300533653025350530c5365530b5320530253413a00f53a00d53a00aa3a008553795346530d530e5320530253413a00db3a008c3a00c13a008553795346530d53205320530253413a00e83a00bc3a00a13a00ab53795347530d53645320530353285302530853413a00c13a00a53a00e13a009c537f533653025300530c5364530b5320530253413a00dd3a00bf3a00ae3a00ab537a534c530453405320530253413a00a03a00d23a00dc3a0082537a534c530453405320530253413a00813a00853a00c73a00cc5379534c530453405320530253413a00fd3a00ed3a00dc3a00b553795346530d53615320530253413a00803a00ca3a00803a00cc53795347530d53665320530353285302530853413a00913a00f63a00ff3a00f1537c533653025300530c5366530b5320530253413a00823a00853a00c73a00cc53795346530d534d5320530253413a00f83a00e83a00903a00dd53795346530d53115320530253413a00843a00d43a00b83a00ea53795347530d5365532053035320530353285302535453365302531453413a0094530f532853025300531a53413a0098530f532853025300531a5320530353285302530853413a00823a00853a00c73a00cc5379533653025300530c5365530b5320530253413a00ea3a00b93a00ad3a0085537a534c530453405320530253413a00a13a00d23a00dc3a0082537a5346530d535a5320530253413a00b93a00b03a00b83a0084537a5347530d53655320530353285302530853413a00ce3a008f3a009f3a00fa537d533653025300530c5365530b5320530253413a00eb3a00b93a00ad3a0085537a5346530d53125320530253413a00fe3a00883a00be3a009a537a5346530d53475320530253413a00c33a008f3a009b3a00a7537a5347530d53645320530353285302530853413a00f73a00e23a00ce3a00e7537a53413a00fd3a00ed3a00dc3a00b5537953413a00e4530e53285302530053413a00e8530e532853025300536c53413a008e3a00f53a00c03a00845302536e532253025341537f537353413a00d13a00c43a00a4534953715320530253415306537153725322530453413a00b43a00853a00fe3a00b5537953735322530253413a00c23a00e23a00da3a00fa537c53725320530253413a00c23a00c03a00da3a00f853045371536c5320530253413a00a53a00813a00803a0084530253715320530453413a00823a00a23a00805302537353413a00823a00a23a00803a008253785371536c536a53413a00dc3a00863a00d5537c5349531b533653025300530c5364530b5320530253413a00aa3a00d53a00873a00fc537a534c530453405320530253413a00ad3a00b03a00da3a00e5537a534c530453405320530253413a00de3a00bf3a00ae3a00ab537a5346530d531c5320530253413a00b13a00c03a008c3a00ad537a5347530d536553413a0094530d532853025300531a53413a0098530d532853025300531a5320530353285302530853413a00ea3a00cf3a009b3a00bf5301533653025300530c5365530b5320530253413a00ae3a00b03a00da3a00e5537a5346530d53045320530253413a00f73a00e23a00ce3a00e7537a5346530d53445320530253413a00873a009b3a00a03a00e9537a5347530d53645320530353285302530853413a00943a00813a00a43a008f5378533653025300530c5364530b5320530253413a00fe3a00843a00933a0096537b534c530453405320530253413a00ab3a00d53a00873a00fc537a5346530d53375320530253413a008b3a00923a00813a0087537b5346530d533b5320530253413a00d33a00953a009f3a008a537b5347530d53645320530353285302530853413a00ca3a00d63a009e3a00a0537f533653025300530c5364530b5320530253413a00ff3a00843a00933a0096537b5346530d535d5320530253413a00fd3a00e33a00b13a00af537b5346530d53175320530253413a00fc3a00d73a00c83a00b5537b5347530d5363532053035320530353285302536453365302532c5320530353205303532853025368533653025328532053035320530353285302536c53365302532453413a009c530e53285302530053413a00a0530e532853025300536e531a5320530353285302530853413a00da3a00ee3a008f5325533653025300530c5363530b5320530253413a00fe3a00d93a00e23a00fa537d534c530453405320530253413a00a33a009e3a008a3a00ee537c534c530453405320530253413a00c03a00b23a00ec3a00aa537c534c530453405320530253413a00c13a008c3a009a3a00e7537b534c530453405320530253413a00883a00fa3a00c13a00b9537b5346530d53375320530253413a00873a00d63a00b53a00d2537b5347530d53665320530353285302530853413a009a3a00ac3a00bb5333533653025300530c5366530b5320530253413a00c23a008c3a009a3a00e7537b5346530d532f5320530253413a00863a00d93a00863a00ec537b5346530d53395320530253413a008d3a00ae3a009f3a0085537c5347530d536553205303532853023a009053015322530253205303532853023a008c5302536a53205303532853023a009053025320530253205303532853023a008453025370536a532d53005300532253045320530253413a00805309536a532d530053005322530553715341537f5373532053045341537f5373532053055341537f537353715341537f53735371533a53005300532053025341530153725322530453205303532853023a008c5302536a53205303532853023a009053025320530453205303532853023a008453025370536a532d53005300532253055320530453413a00805309536a532d5300530053225304536a53205304532053055371534153015374536b533a530053005320530353285302530853413a00c43a00e53a00f03a0081537e53413a008d3a00ae3a009f3a0085537c5320530253415302537153205302534153025372536a5322530253413a00c053005346531b5336530253005320530353205302533653023a00905301530c5365530b5320530253413a009b3a008d3a00b03a00bc537c534c530453405320530253413a00c13a00b23a00ec3a00aa537c5346530d53405320530253413a00843a00e93a008b3a00b6537c5347530d53655320530353285302530853413a00fa3a00eb3a00c13a00c95306533653025300530c5365530b5320530253413a009c3a008d3a00b03a00bc537c5346530d534d5320530253413a00873a00c33a009e3a00bd537c5346530d534b5320530253413a00a13a00fa3a00d53a00d7537c5347530d53645320530353285302530853413a00c13a00b93a00ef3a00d7530753413a00f83a00e83a00903a00dd537953413a00d4530b53285302530053413a00d8530b532853025300536b53413a00d33a008f3a00ba3a00f053025372532253025320530253413a00883a00873a00d33a00b553065371534153015374536b53413a00913a00cf3a00903a00e05304536a53413a00d53a00fb3a00f63a00a9537f534b531b533653025300530c5364530b5320530253413a00943a00963a00af3a00b6537d534c530453405320530253413a00a03a009e3a00943a008a537d534c530453405320530253413a00a43a009e3a008a3a00ee537c5346530d53205320530253413a00913a00f63a00ff3a00f1537c5347530d53655320530353205303532853023a00fc530153415301536a533653023a00dc530153413a00ec530c532853025300531a53413a00f0530c532853025300531a5320530353285302530853413a00bf3a00fa3a00dd3a00925378533653025300530c5365530b5320530253413a00a13a009e3a00943a008a537d5346530d531c5320530253413a00a83a00953a00aa3a009e537d5346530d530d5320530253413a00f83a00bb3a00e43a00af537d5347530d536453413a0098530c5328530253005321530253413a0094530c5328530253005321530453205303532853023a00fc53015320530053205301531053065320530353285302530853413a00b13a00fd3a00933a00d9530653413a00a43a00963a00cf3a00875301532053025320530453715322530253413a00f43a00ce3a00fd3a00b6537e53725320530253413a00f43a00ce3a00fd3a00b6537e5371536c5320530253413a008b3a00b13a00823a00c953015371532053025341537f537353413a00f43a00ce3a00fd3a00b6537e5371536c536a5322530253413a00c93a00863a00de3a00eb530453725320530253413a00c83a00863a00de3a00eb53045371536c532053025341537f537353413a00c93a00863a00de3a00eb530453715320530253413a00b43a00f93a00a13a0094537b5371536c536a53413a00ec3a00bd3a00973a00db5379537153413a00a53a00b73a00f33a00e753055346531b533653025300530c5364530b5320530253413a00a93a00f33a00d73a00ec537d534c530453405320530253413a00953a00963a00af3a00b6537d5346530d53565320530253413a00b83a00833a00c53a00c1537d5347530d536453413a00f0530b5328530253005321530453413a00ec530b5328530253005321530553205303532853023a008c5302532253025342530053375303533853205302534253005337530353305320530253425300533753035328532053025342530053375303532053205302534253005337530353185320530253425300533753035310532053025342530053375303530853205302534253005337530353005320530353285302530853413a00b83a00833a00c53a00c1537d53413a00eb3a00b93a00ad3a0085537a5320530453205305537153413a00a63a00e13a00bb3a0092537a534f53413a00d73a00a73a00e63a00b65304536a5322530253413a00cb3a00a63a00805316537353205302537153413a00813a00d63a00dd3a00a45378534b531b533653025300530c5364530b5320530253413a00aa3a00f33a00d73a00ec537d5346530d53395320530253413a009c3a00a03a00c63a00f2537d5346530d53385320530253413a00ce3a008f3a009f3a00fa537d5347530d53635320530353285302530853413a00ce3a008f3a009f3a00fa537d53413a00a33a008f3a00a03a00fc530753413a00cc530e53285302530053413a00d0530e532853025300537253413a00f73a00ac3a00d23a00f55379534f53413a00b73a009c3a00b33a00ca5302536c532253025341537f537353413a00d63a00bc3a00b53a00bc537a53715320530253413a00a93a00c33a00ca3a00c353015371537253413a008d3a008f3a00ce3a00c3537a534b531b533653025300530c5363530b5320530253413a00ac3a00bf3a00e33a00cd537e534c530453405320530253413a00eb3a00c93a00ab3a0098537e534c530453405320530253413a00c33a00e53a00f03a0081537e534c530453405320530253413a00ff3a00d93a00e23a00fa537d5346530d53635320530253413a00d73a00ca3a00e83a0080537e5347530d53655320530353285302530853413a00a83a00953a00aa3a009e537d533653025300530c5365530b5320530253413a00c43a00e53a00f03a0081537e5346530d53145320530253413a00863a00fa3a00f33a008a537e5346530d530b5320530253413a00ef3a00ab3a00d83a008e537e5347530d53645320530353285302530853413a00cf3a00ea3a0091531c533653025300530c5364530b5320530253413a008f3a00b13a00be3a00ba537e534c530453405320530253413a00ec3a00c93a00ab3a0098537e5346530d53535320530253413a00a73a00d33a00cc3a00b1537e5347530d536453413a00ae530a53205303532d53003a00965302533a5300530053413a00af530a53413a008f530a532d5300530053413a00a453015373533a5300530053413a00e0530953413a00c05309532d5300530053413a00a853015373533a5300530053413a00e1530953413a00c15309532d53005300534153085373533a5300530053413a00e4530953413a00c45309532d530053005341530f5373533a5300530053413a00e5530953413a00c55309532d53005300534153305373533a5300530053413a00e3530953413a00c35309532d53005300532253025341537f537353413a00f253015371532053025341530d53715372533a5300530053413a00b0530a53413a0090530a532d5300530053225302532053025341533a5371534153015374536b53413a00c65300536b533a5300530053413a00e2530953413a00c25309532d53005300532253025320530253413a00e453005371534153015374536b5341531c536b533a5300530053413a00e6530953413a00c65309532d53005300532253025320530253413a00c253005371534153015374536b5341533e536b533a5300530053413a00e7530953413a00c75309532d5300530053413a00ea53005373533a5300530053413a00e8530953413a00c85309532d5300530053413a00eb53015373533a5300530053413a00eb530953413a00cb5309532d530053005341530d5373533a5300530053413a00e9530953413a00c95309532d53005300532253025320530253413a00eb53005371534153015374536b53415315536b533a5300530053413a00ea530953413a00ca5309532d53005300532253025341537f537353413a008a530153715320530253413a00f553005371537253413a00d453005373533a5300530053413a00ec530953413a00cc5309532d530053005322530253413a00e153015372532053025341537f53735341531e537253715341537f5373533a5300530053413a00ed530953413a00cd5309532d530053005322530253413a00bf53015372532053025341537f537353413a00c05300537253715341537f5373533a5300530053413a00ee530953413a00ce5309532d530053005322530253205302534153135371534153015374536b53415313536a533a5300530053413a00ef530953413a00cf5309532d530053005322530253413a009c53015371532053025341537f537353413a00e35300537153725341537f5373533a5300530053413a00f0530953413a00d05309532d530053005341533b5373533a5300530053413a00e0530a53413a00c0530a532d530053005322530253205302534153165371534153015374536b53413a00ea5300536b533a5300530053413a00e1530a53413a00c1530a532d53005300532253025341537f537353413a00f9530053715320530253413a0086530153715372533a5300530053413a00e2530a53413a00c2530a532d53005300534153095373533a5300530053413a00e3530a53413a00c3530a532d5300530053413a00b353015373533a5300530053413a00e4530a53413a00c4530a532d53005300534153235373533a5300530053413a00e5530a53413a00c5530a532d5300530053413a008f53015373533a5300530053413a00e6530a53413a00c6530a532d5300530053413a00c553005373533a5300530053413a00e7530a53413a00c7530a532d53005300532253025341537f537353413a00a2530153715320530253413a00dd530053715372533a5300530053413a00e8530a53413a00c8530a532d5300530053413a00c353015373533a5300530053413a00e9530a53413a00c9530a532d53005300532253025341537f537353413a00f65301537153205302534153095371537253413a00f853005373533a5300530053413a00ea530a53413a00ca530a532d5300530053413a00d353005373533a5300530053413a00eb530a53413a00cb530a532d53005300532253025341537f537353413a008f530153715320530253413a00f0530053715372533a5300530053413a00ec530a53413a00cc530a532d5300530053413a00b353015373533a5300530053413a00ed530a53413a00cd530a532d5300530053413a00cd53015373533a5300530053413a00ee530a53413a00ce530a532d5300530053413a00c453015373533a5300530053413a00ef530a53413a00cf530a532d530053005322530253205302534153365371534153015374536b53415336536a533a5300530053413a00f0530a53413a00d0530a532d530053005322530253205302534153295371534153015374536b53415329536a533a5300530053413a0080530953413a00c05308532d530053005322530253413a00d053005372532053025341537f537353413a00af5301537253715341537f5373533a5300530053413a0081530953413a00c15308532d5300530053413a00e653005373533a5300530053413a0082530953413a00c25308532d53005300532253025341537f53735341533f53715320530253413a00c0530153715372534153015373533a5300530053413a0083530953413a00c35308532d53005300532253025341537f537353413a00bf530153715320530253413a00c0530053715372533a5300530053413a0084530953413a00c45308532d530053005341531c5373533a5300530053413a0085530953413a00c55308532d530053005322530253413a00c053005372532053025341537f537353413a00bf5301537253715341537f5373533a5300530053413a0086530953413a00c65308532d53005300532253025341537f537353413a00af530153715320530253413a00d0530053715372533a5300530053413a0087530953413a00c75308532d530053005322530253413a00ea53015372532053025341537f537353415315537253715341537f5373533a5300530053413a0088530953413a00c85308532d5300530053413a00b253015373533a5300530053413a0089530953413a00c95308532d53005300532253025341537f537353413a00c253015372532053025341533d53725371533a5300530053413a008a530953413a00ca5308532d53005300532253025320530253413a00c953005371534153015374536b53413a00c95300536a533a5300530053413a008b530953413a00cb5308532d5300530053413a00bb53015373533a5300530053413a008c530953413a00cc5308532d5300530053225302534153325371532053025341537f537353413a00cd5301537153725341537f5373533a5300530053413a008d530953413a00cd5308532d53005300532253025341537f53735341532053715320530253413a00df530153715372533a5300530053413a008e530953413a00ce5308532d5300530053225302532053025341532c5371534153015374536b5341532c536a533a5300530053413a008f530953413a00cf5308532d5300530053413a008553015373533a5300530053413a0090530953413a00d05308532d53005300532253025320530253413a00c853005371534153015374536b53413a00c85300536a533a5300530053413a0091530953413a00d15308532d53005300532253025320530253413a00dc53005371534153015374536b53413a00dc5300536a533a5300530053413a0092530953413a00d25308532d53005300532253025341537f537353413a00ed530053715320530253413a0092530153715372533a5300530053413a0093530953413a00d35308532d5300530053413a00aa53015373533a5300530053413a0094530953413a00d45308532d530053005341531b5373533a5300530053413a0095530953413a00d55308532d53005300532253025341537f537353413a00fe530053715320530253413a008153015371537253413a00f753005373533a5300530053413a0096530953413a00d65308532d5300530053413a00a853015373533a5300530053413a0097530953413a00d75308532d5300530053413a008b53015373533a5300530053413a0098530953413a00d85308532d5300530053413a008953015373533a5300530053413a0099530953413a00d95308532d53005300534153295373533a5300530053413a009a530953413a00da5308532d5300530053413a00e853015373533a5300530053413a009b530953413a00db5308532d53005300534153295373533a5300530053413a009c530953413a00dc5308532d5300530053413a00f753015373533a5300530053413a009d530953413a00dd5308532d53005300532253025341537f537353413a00d4530053725320530253413a00ab530153725371533a5300530053413a009e530953413a00de5308532d530053005322530253205302534153015371534153015374536b53413a00ff5300536b533a5300530053413a009f530953413a00df5308532d530053005322530253205302534153225371534153015374536b53413a00de5300536b533a5300530053413a00a0530953413a00e05308532d5300530053413a00ff53005373533a5300530053413a00a1530953413a00e15308532d53005300532253025320530253413a00d853005371534153015374536b53413a00d85300536a533a5300530053413a00a2530953413a00e25308532d53005300534153205373533a5300530053413a00a3530953413a00e35308532d5300530053413a00ba53015373533a5300530053413a00a4530953413a00e45308532d53005300532253025320530253413a00fc53005371534153015374536b53413a00fc5300536a533a5300530053413a00a5530953413a00e55308532d53005300532253025341537f537353413a00f253015371532053025341530d5371537253413a00ef53005373533a5300530053413a00a6530953413a00e65308532d5300530053413a00dc53015373533a5300530053413a00a7530953413a00e75308532d53005300534153305373533a5300530053413a00a8530953413a00e85308532d53005300532253025341537f537353413a00f7530053715320530253413a008853015371537253413a00e753005373533a5300530053413a00a9530953413a00e95308532d5300530053413a00cc53005373533a5300530053413a00aa530953413a00ea5308532d5300530053413a00e953005373533a5300530053413a00ab530953413a00eb5308532d5300530053225302532053025341533f5371534153015374536b53413a00c15300536b533a5300530053413a00ac530953413a00ec5308532d53005300532253025341537f53735341533953715320530253413a00c653015371537253413a00cd53005373533a5300530053413a00ad530953413a00ed5308532d5300530053413a00dc53015373533a5300530053413a00ae530953413a00ee5308532d53005300532253025341537f537353413a00d753015371532053025341532853715372533a5300530053413a00af530953413a00ef5308532d5300530053413a00c453015373533a5300530053413a00b0530953413a00f05308532d53005300534153175373533a530053005320530353285302530853413a00e43a00d03a00b23a00a65304533653025300530c5364530b5320530253413a00903a00b13a00be3a00ba537e5346530d53575320530253413a00fc3a009b3a00af3a00c0537e5346530d532e5320530253413a00f43a00b93a00cc3a00c7537e5347530d53635320530353205303532853023a009853015345533a53003a0097530153413a00bc530e532853025300531a53413a00c0530e532853025300531a5320530353285302530853413a00e53a00ff3a00e23a0088537f533653025300530c5363530b5320530253413a00c03a00a53a00e13a009c537f534c530453405320530253413a00e43a00ff3a00e23a0088537f534c530453405320530253413a00ad3a00bf3a00e33a00cd537e5346530d53305320530253413a00b93a00843a00fe3a0082537f5347530d536453413a00a4530d532853025300531a53413a00a8530d532853025300531a5320530353285302530853413a00a23a00da3a00fd3a00805304533653025300530c5364530b5320530253413a00e53a00ff3a00e23a0088537f5346530d533f5320530253413a00f23a00ab3a009e3a0089537f5346530d53565320530253413a00f03a00cd3a00a73a009c537f5347530d53635320530353285302530853413a00b33a00f83a00943a00e65306533653025300530c5363530b5320530253413a00853a00e43a00d03a00be537f534c530453405320530253413a00c13a00a53a00e13a009c537f5346530d53165320530253413a00ca3a00d63a009e3a00a0537f5346530d53105320530253413a00f33a00993a00ce3a00be537f5347530d53635320530353205303532853023a00d853015341537e5371533653023a00cc53015320530353285302530853413a00f33a00993a00ce3a00be537f53413a00d33a009f3a00813a0088537853413a008c530d53285302530053413a0090530d532853025300536a532253025341537f537353413a00a73a00f13a009e3a0081530453715320530253413a00d83a008e3a00e13a00fe537b5371537253413a009a3a00843a00973a00ac537c534f53413a008c3a00b33a00bb5344536c53413a00973a00f53a00c83a00b45302534b531b533653025300530c5363530b5320530253413a00863a00e43a00d03a00be537f5346530d53135320530253413a00a43a00f43a00d153435346530d53615320530253413a00fa3a00dd3a008a53675347530d53625320530353285302530853413a00de3a00bf3a00ae3a00ab537a533653025300530c5362530b530253405320530253413a009d3a00b43a00973a008e5304534c530453405320530253413a00c83a00843a00893a00e75301534c530453405320530253413a00c63a00843a00c83a008c5301534c530453405320530253413a00d33a00b13a00875334534c530453405320530253413a00d93a00ee3a008f5325534c530453405320530253413a00993a00e23a008c53725346530d53165320530253413a00cf3a00ea3a0091531c5347530d53675320530353285302530853413a00c13a00a53a00e13a009c537f533653025300530c5367530b5320530253413a00da3a00ee3a008f53255346530d533f5320530253413a00e83a00c33a00c8532d5346530d53075320530253413a009a3a00ac3a00bb53335347530d536653413a00fc530d532853025300531a53413a0080530e532853025300531a5320530353285302530853413a00863a00d93a00863a00ec537b533653025300530c5366530b5320530253413a00993a00dd3a00fa3a00ee5300534c530453405320530253413a00d43a00b13a008753345346530d53345320530253413a00f03a00cc3a00a0533f5346530d532d5320530253413a00f43a00803a00b73a00c253005347530d53665320530353285302530853413a00fc3a009b3a00af3a00c0537e533653025300530c5366530b5320530253413a00f83a00ce3a00b93a00fe53005346530d53505320530253413a00a43a00963a00cf3a008753015346530d531a5320530253413a009a3a00dd3a00fa3a00ee53005347530d536553205303532853025310532153005320530353413a00a05302536a5324530053205300530f530b5320530253413a009b3a00bb3a00de3a00c05301534c530453405320530253413a00a03a008d3a00b93a009e5301534c530453405320530253413a00c73a00843a00c83a008c53015346530d535f5320530253413a00d83a00b93a00863a009b53015347530d5366532053035320530353285302532053415301536b53225302533653023a0098530153413a00b0530e5328530253005321530453413a00ac530e5328530253005321530553205303532853023a00fc530153205303532853023a00dc530153205302531053075320530353285302530853413a00e63a009d3a00e13a00bb530653413a00c73a00843a00c83a008c53015320530453205305537153413a00bf3a00b63a00d63a00925306536b5322530253413a00863a00ae3a00b73a00eb530253725320530253413a00863a00ae3a00b73a00eb53025371536c5320530253413a00f93a00d13a00c83a009453055371532053025341537f537353413a00863a00ae3a00b73a00eb53025371536c536a53413a00be3a008f3a00d73a00ff5307537153413a00df3a00b13a00973a009f53055349531b533653025300530c5366530b5320530253413a00a13a008d3a00b93a009e53015346530d534a5320530253413a00813a00fc3a00c63a00a353015346530d53425320530253413a00ea3a00cf3a009b3a00bf53015347530d53655320530353285302530853413a00f23a00ab3a009e3a0089537f53413a008f3a00b43a00973a00a3530753413a009c530d53285302530053413a00a0530d532853025300537253413a008d3a009a3a00d15314536a5322530253413a00eb3a00da3a00dd3a00ad537f5371532053025341537f537353413a00943a00a53a00a23a00d25300537153725341537f537353413a00b03a00ed3a00f03a00825303536a53413a00903a00e13a00c23a00d4537c5349531b533653025300530c5365530b5320530253413a00c33a00873a00c53a00da5301534c530453405320530253413a009c3a00bb3a00de3a00c053015346530d530a5320530253413a00943a00a53a00903a00d253015347530d53655320530353285302530853413a00f43a00b93a00cc3a00c7537e533653025300530c5365530b5320530253413a00c43a00873a00c53a00da53015346530d535a5320530253413a00933a00ae3a00cf3a00e053015346530d53265320530253413a00f93a00b43a00d63a00e153015347530d5364532053035320530353285302535053365302531053413a00a4530f532853025300531a53413a00a8530f532853025300531a5320530353285302530853413a00a33a00e03a00f13a00e35306533653025300530c5364530b5320530253413a00993a00ed3a00ba3a009f5303534c530453405320530253413a009e3a00c93a00e73a00c05302534c530453405320530253413a00fd3a00a43a00a13a00805302534c530453405320530253413a00c93a00843a00893a00e753015346530d53525320530253413a00923a009f3a00f23a00fb53015347530d53665320530353285302530853413a00e43a00d03a00b23a00a6530453413a00a73a00d33a00cc3a00b1537e53413a00a4530b53285302530053413a00a8530b532853025300536a5322530453413a00b53a00f83a00f93a00dc530753735322530253413a00ff3a00883a00c53a008b537953725320530253413a00ff3a00883a00c53a008b53795371536c5320530453413a00ca3a00803a00843a00835378537353413a00ff3a00883a00c53a008b537953715320530253413a00803a00f73a00ba3a00f453065371536c536a53413a00973a00ec3a00e2531e5347531b533653025300530c5366530b5320530253413a00fe3a00a43a00a13a008053025346530d53285320530253413a00913a00eb3a00a03a009353025346530d53035320530253413a00e33a00f73a00873a00ad53025347530d53655320530353205303532853023a00e8530153205303532853023a00805302536a533653023a00e053015320530353285302530853413a00f23a00ea3a00d93a00e25378533653025300530c5365530b5320530253413a00f63a00933a00e73a00de5302534c530453405320530253413a009f3a00c93a00e73a00c053025346530d530d5320530253413a00e63a00c03a00aa3a00c753025347530d53655320530353285302530853413a00e93a008f3a00c63a00e35303533653025300530c5365530b5320530253413a00f73a00933a00e73a00de53025346530d530a5320530253413a00b33a00973a00a13a008853035346530d532d5320530253413a00d43a00af3a00c23a009d53035347530d53645320530353285302530853413a00d43a00b13a0087533453413a00fc3a00d73a00c83a00b5537b53205303532d53003a009f5301531b5336530253005320530353205303532853023a00a853015322530253365302537c5320530353205303532853023a00a45301532253045336530253785320530353205302533653025374532053035320530453365302536c53205303532053025336530253685320530353205303532853023a00a05301533653025364530c5364530b5320530253413a00cb3a00d53a00bb3a00e35303534c530453405320530253413a00893a00d33a009d3a00bb5303534c530453405320530253413a009a3a00ed3a00ba3a009f53035346530d53555320530253413a00f93a00a43a00f23a00b753035347530d53655320530353285302530853413a00aa3a00f33a00d73a00ec537d53413a00953a009d3a00e73a0090530453205303532d53003a00bf5301531b5336530253005320530353205303532853025334533653025370530c5365530b5320530253413a008a3a00d33a009d3a00bb53035346530d53065320530253413a00af3a00833a00863a00bc53035346530d53335320530253413a00e13a00823a00f33a00d253035347530d536453205303532053005320530353285302534c536a532d530053005345533a53003a00fa53015320530353285302530853413a00eb3a00e03a00963a00d0530653413a009a3a00ea3a00a73a00d8537853413a00ac530c53285302530053413a00b0530c5328530253005341537f5373536a53413a00803a00eb3a00e33a00aa5379536c53413a00bd3a00d53a009c3a00f65307536a53413a00ec3a00e83a00c53a00c05379534b531b533653025300530c5364530b5320530253413a00a73a00a03a00f43a00ed5303534c530453405320530253413a00cc3a00d53a00bb3a00e353035346530d53295320530253413a00e93a008f3a00c63a00e353035347530d53645320530353285302530853413a00db3a008c3a00c13a0085537953413a00fe3a00ff3a008a3a00da530553205303532d53003a00f35301531b5336530253005320530353205301533653023a008853015320530353205303532853023a00f45301533653023a008c5301530c5364530b5320530253413a00a83a00a03a00f43a00ed53035346530d533b5320530253413a00a23a00da3a00fd3a008053045346530d53295320530253413a00d13a00c93a00a43a008b53045347530d536353413a00c4530d532853025300531a53413a00c8530d532853025300531a5320530353285302530853413a00fc3a009b3a00af3a00c0537e533653025300530c5363530b5320530253413a00923a00853a00eb3a00c05306534c530453405320530253413a00c23a00fd3a00cc3a00b35305534c530453405320530253413a00ae3a00c33a008c3a00b55304534c530453405320530253413a00b63a00cb3a00c63a009f5304534c530453405320530253413a009e3a00b43a00973a008e53045346530d53475320530253413a00953a009d3a00e73a009053045347530d53665320530353285302530853413a00af3a00c33a008c3a00b5530453413a00c43a00873a00c53a00da530153413a00e4530d5328530253005341537f537353413a00e8530d5328530253005341537f537353715341537f5373532253025320530253413a00d93a009c3a00ca3a00e253005371534153015374536b53413a00d93a009c3a00ca3a00e25300536a53413a00853a00803a00c93a00d75304537253413a00973a00c43a00cb3a00f7537d537153413a00c23a00ae3a00bb3a00d6537e5349531b533653025300530c5366530b5320530253413a00b73a00cb3a00c63a009f53045346530d53325320530253413a00e43a00d03a00b23a00a653045346530d53095320530253413a00a13a00ee3a00873a00a953045347530d53655320530353285302530853413a00cd3a00e23a00db3a00d8537853413a00a33a00ab3a00ea3a00bf537853413a0084530b53285302530053413a0088530b532853025300537353413a00ef3a008c3a00fb3a00c85300536a532253025341537f537353413a00cd3a00b73a00e53a00b3530253715320530253413a00b23a00c83a009a3a00cc537d5371537253413a00873a00fb3a00c53a00c55306536b53413a00ae3a00c93a00d53a008b5301534b531b533653025300530c5365530b5320530253413a00ba3a00fd3a00e53a00e65304534c530453405320530253413a00af3a00c33a008c3a00b553045346530d53355320530253413a00e23a00b83a009e3a00ca53045347530d53655320530353285302534053205303532853023a00e85301536a53415301536b53205303532853023a008c530253205303532853025330536a532d53005300533a530053005320530353285302530853413a008b3a00923a00813a0087537b533653025300530c5365530b5320530253413a00bb3a00fd3a00e53a00e653045346530d53215320530253413a00fc3a00983a008e3a00ff53045346530d53435320530253413a00c53a00f33a00ab3a00a953055347530d53645320530353285302530853413a00843a00d43a00b83a00ea537953413a00fd3a00e33a00b13a00af537b53205303532d53003a00fb5301531b5336530253005320530353415300533653025354530c5364530b5320530253413a009d3a00fd3a00cb3a00965306534c530453405320530253413a00e03a00f63a00e43a00c55305534c530453405320530253413a00c33a00fd3a00cc3a00b353055346530d533f5320530253413a00b53a00cd3a00b83a00be53055347530d53655320530353285302530853413a00b13a00b33a00f43a00b2530653413a00c23a008c3a009a3a00e7537b53205303532d53003a00cb5301531b5336530253005320530353205303532853023a00ac530153365302535c530c5365530b5320530253413a00e13a00f63a00e43a00c553055346530d53615320530253413a00b63a00df3a00e13a00d153055346530d530f5320530253413a00fe3a00ff3a008a3a00da53055347530d53645320530353205303532853023a008c530153365302534c5320530353285302530853413a00e13a00823a00f33a00d2530353413a00eb3a00e03a00963a00d0530653413a00a4530c53285302530053413a00a8530c532853025300536e53413a00d83a00bb3a00c33a009a5306536b53413a00f03a00843a00883a008d5307537353413a00863a00b93a00e73a00d05378537253413a00c63a00bb3a00a13a00ca537b534b531b533653025300530c5364530b5320530253413a00d83a00dc3a00f73a00a65306534c530453405320530253413a009e3a00fd3a00cb3a009653065346530d53605320530253413a00e53a00fe3a00eb3a00a353065347530d53645320530353285302530853413a00843a00e93a008b3a00b6537c53413a00fa3a00eb3a00c13a00c9530653413a00b4530c53285302530053413a00b8530c532853025300536c53413a00ca3a00803a00de3a00b05306536a53413a009f3a00d33a00b73a00a15305537253413a00a33a00cd3a00e73a00fe53005349531b533653025300530c5364530b5320530253413a00d93a00dc3a00f73a00a653065346530d53545320530253413a00b13a00b33a00f43a00b253065346530d53455320530253413a00e63a009d3a00e13a00bb53065347530d53635320530353285302530853413a00c13a00b23a00ec3a00aa537c533653025300530c5363530b5320530253413a00c83a00bd3a00b83a00fa5306534c530453405320530253413a00b03a00fd3a00933a00d95306534c530453405320530253413a00f93a00eb3a00c13a00c95306534c530453405320530253413a00933a00853a00eb3a00c053065346530d535d5320530253413a009c3a00fa3a00b73a00c553065347530d53655320530353285302530853413a00d03a00b73a00cb3a00c9530753413a009c3a008d3a00b03a00bc537c53205303532853023a009c530253413a00aa3a00893a00f03a00db5301534b531b533653025300530c5365530b5320530253413a00fa3a00eb3a00c13a00c953065346530d531d5320530253413a00eb3a00e03a00963a00d053065346530d53525320530253413a00a63a00a13a00dd3a00d553065347530d53645320530353285302530853413a00ff3a00843a00933a0096537b53413a00e53a00ad3a00f13a00f4537853413a00d4530e5328530253005322530253413a00d8530e53285302530053225304537253205302532053045371536c53205302532053045341537f53735322530453725341537f537353205302532053045371536c536a5322530253413a00e83a00e43a00ee3a00e6530653725320530253413a00e83a00e43a00ee3a00e653065371536c5320530253413a00973a009b3a00913a009953795371532053025341537f537353413a00e83a00e43a00ee3a00e653065371536c536a5322530253413a00f23a00ce3a00d53a00e0530553725320530253413a00f03a00ce3a00d53a00e053055371536c5320530253413a00883a00b13a00aa3a009f537a5371532053025341537f537353413a00f23a00ce3a00d53a00e053055371536c536a5322530253413a00d03a00f23a00ef3a00ec530153725320530253413a00a83a008d3a00903a0093537e5373537153413a00a43a00e53a00e85317534b531b533653025300530c5364530b5320530253413a00b23a00f83a00943a00e65306534c530453405320530253413a00b13a00fd3a00933a00d953065346530d53515320530253413a00a33a00e03a00f13a00e353065347530d53645320530353285302530853413a009a3a00dd3a00fa3a00ee530053413a00a33a00e03a00f13a00e3530653413a00ac530f5328530253005322530253413a00b0530f532853025300532253045341537f5373537153415301537453205302532053045373536b53413a00b53a00b73a00df5341537253413a00843a00f53a00ec3a00fe5306536a53413a00cc3a00f43a009a3a009a53785349531b533653025300530c5364530b5320530253413a00b33a00f83a00943a00e653065346530d531d5320530253413a00ef3a00fb3a00c33a00eb53065346530d535a5320530253413a00f33a00c63a008d3a00f553065347530d536353205303532853023a00fc530153205303532853025324536a5322530253205302532d53005300532053035328530253285341530853745372532253045341533a536e53225302533a5300530053205303532853023a00fc53015320530353285302532453225305532053055341537f53735341537e5372536a536a5322530553205305532d5300530253205304532053025341533a5371532053025341533a5372536c532053025341537f53735341533a53715320530253413a00c53a00ff3a00ff53075371536c536a536b53415308537453725341533a536e533a530053025320530353285302530853413a00da3a00ee3a008f5325533653025300530c5363530b5320530253413a00cf3a00973a00ca3a00ba5307534c530453405320530253413a00c63a00bd3a00ef3a00a05307534c530453405320530253413a00c93a00bd3a00b83a00fa53065346530d534a5320530253413a00803a00d33a00ce3a00a053075347530d53645320530353285302530853413a00b33a00973a00a13a00885303533653025300530c5364530b5320530253413a00c73a00bd3a00ef3a00a053075346530d53275320530253413a00b13a00ad3a00b33a00a153075346530d532b5320530253413a008f3a00b43a00973a00a353075347530d53635320530353285302530853413a00fc3a00d73a00c83a00b5537b5336530253005320530353415300533653025368532053035341530053365302536c5320530353415300533653025364530c5363530b53025340530253405320530253413a00d53a00fb3a00e63a00f65307534c530453405320530253413a00d03a00973a00ca3a00ba53075346530d53025320530253413a00d03a00b73a00cb3a00c953075346530d53015320530253413a00c13a00b93a00ef3a00d753075347530d53655320530353285302530853413a00f83a00e83a00903a00dd5379533653025300530c5365530b5320530253413a00d63a00fb3a00e63a00f653075346530d531a5320530253413a00bb3a00c53a008f3a00f853075346530d53245320530253413a00a33a008f3a00a03a00fc53075347530d53645320530353285302530853413a00b93a00843a00fe3a0082537f53413a00c33a00fd3a00cc3a00b3530553205303532d53003a00975301531b5336530253005320530353205303532853023a00985301533653025360530c5364530b5320530353413a00805312532853025300533653023a009853025320530353285302530853413a00d03a00b73a00cb3a00c9530753413a00d03a00973a00ca3a00ba530753413a00fc530a532853025300532253025341537f537353413a0080530b532853025300532253045341537f53735372532053025320530453715341537f537353715341537f537353413a00f13a00d93a00bf3a00e15305536a5322530253413a008a3a00a13a009b3a0083530253725320530253413a00f53a00de3a00e43a00fc537d53735371532253025341537f537353413a00e13a00a33a00893a00f4530253715320530253413a009e3a00dc3a00f63a008b537d5371537253413a00c73a00bf3a00ec3a009f537b53735320530253413a00a63a009c3a00e53a00eb53795371537253413a00bd3a00ee3a00f453055346531b533653025300530c5363530b5320530353285302530853413a00913a00eb3a00a03a00935302533653025300530c5362530b5320530353205303532853023a009853025345533a53003a009753025320530353285302530853413a00a13a00ee3a00873a00a95304533653025300530c5361530b53413a0090530b532853025300531a53413a008c530b532853025300531a5320530353285302530853413a00ae3a00b03a00da3a00e5537a533653025300530c5360530b5320530353285302530853413a00e83a00c33a00c8532d53413a00863a00fa3a00f33a008a537e53205303532d53003a00975302531b533653025300530c535f530b5320530353285302530853413a008a3a00d33a009d3a00bb530353413a00f83a00ce3a00b93a00fe530053413a0094530b53285302530053413a0098530b532853025300537153413a00c83a00f13a00fc3a00be5305537153413a00ce3a00cb3a00f53a00dd537c536c53413a00f53a00c93a008e533e536b53413a00c33a00a63a00aa3a009e537d5349531b533653025300530c535e530b53413a00a0530a53413a0080530a532d5300530053413a00e653015373533a5300530053413a00a1530a53413a0081530a532d5300530053413a00de53015373533a5300530053413a00a2530a53413a0082530a532d5300530053413a009053015373533a5300530053413a00a3530a53413a0083530a532d5300530053413a00b753015373533a5300530053413a00a5530a53413a0085530a532d5300530053413a008953015373533a5300530053413a00a4530a53413a0084530a532d53005300532253025341537f537353413a00c053015371532053025341533f5371537253413a009b53015373533a5300530053413a00a6530a53413a0086530a532d53005300532253025341531b5371532053025341537f537353413a00e45301537153725341537f5373533a5300530053413a00a7530a53413a0087530a532d5300530053225302534153275372532053025341537f537353413a00d85301537253715341537f5373533a5300530053413a00a0530b5328530253005321530453413a009c530b5328530253005321530253413a00ab530a53413a008b530a532d5300530053413a00bf53015373533a5300530053413a00ad530a53413a008d530a532d5300530053413a00cb53005373533a5300530053413a00a8530a53413a0088530a532d530053005322530553205305534153155371534153015374536b53413a00eb5300536b533a5300530053413a00a9530a53413a0089530a532d53005300532253055320530553413a00f453005371534153015374536b53413a00f45300536a533a5300530053413a00aa530a53413a008a530a532d53005300532253055320530553413a00ed53005371534153015374536b53415313536b533a5300530053413a00ac530a53413a008c530a532d53005300532253055341537f53735341531053715320530553413a00ef5301537153725341531e5373533a530053005320530353413a008e530a532d5300530053413a00ad53015373533a53003a009653025320530353285302530853413a00f83a00ce3a00b93a00fe530053413a00bb3a00de3a00db3a0084537853205302532053025320530453735341537f5373537153413a00a73a009e3a00a53a00af5306536a53413a008c3a00f83a00ef3a00ab5301536e53413a00da3a00ac3a00f83a00e15307536b53413a00873a00ba3a009c533c5349531b533653025300530c535d530b5320530353285302530853413a00923a009f3a00f23a00fb5301533653025300530c535c530b53413a00ae530a53205303532d53003a00965302533a5300530053413a00b0530a53413a0090530a532d5300530053413a00ba53015373533a5300530053413a00e1530953413a00c15309532d53005300534153085373533a5300530053413a00e2530953413a00c25309532d5300530053413a00e453015373533a5300530053413a00e4530953413a00c45309532d530053005341530f5373533a5300530053413a00af530a53413a008f530a532d530053005322530253413a00db53005372532053025341537f537353413a00a45301537253715341537f5373533a5300530053413a00e0530953413a00c05309532d530053005322530253205302534153285371534153015374536b53413a00d85300536b533a5300530053413a00e3530953413a00c35309532d53005300532253025320530253413a00f253005371534153015374536b5341530e536b533a5300530053413a00b0530b532853025300531a53413a00ac530b532853025300531a53413a00e7530953413a00c75309532d5300530053413a00ea53005373533a5300530053413a00e8530953413a00c85309532d5300530053413a00eb53015373533a5300530053413a00ea530953413a00ca5309532d5300530053413a00de53015373533a5300530053413a00ed530953413a00cd5309532d5300530053413a00c053005373533a5300530053413a00e9530953413a00c95309532d53005300532253025341537f537353413a00eb53015371532053025341531453715372533a5300530053413a00eb530953413a00cb5309532d53005300532253025341537f53735341530d53715320530253413a00f2530153715372533a5300530053413a00e5530953413a00c55309532d530053005322530253205302534153305371534153015374536b53415330536a533a5300530053413a00e6530953413a00c65309532d53005300532253025320530253413a00c253005371534153015374536b5341533e536b533a5300530053413a00ec530953413a00cc5309532d5300530053225302532053025341531e5371534153015374536b5341531e536a533a5300530053413a00ee530953413a00ce5309532d53005300534153135373533a5300530053413a00ef530953413a00cf5309532d5300530053413a009c53015373533a5300530053413a00f0530953413a00d05309532d530053005322530253413a00c453015372532053025341537f53735341533b537253715341537f5373533a5300530053413a00e0530a53413a00c0530a532d530053005322530253413a009653015371532053025341537f537353413a00e95300537153725341537f5373533a5300530053413a00e1530a53413a00c1530a532d53005300532253025341537f537353413a0099530153715320530253413a00e653005371537253413a00e053015373533a5300530053413a00e2530a53413a00c2530a532d53005300534153095373533a5300530053413a00e3530a53413a00c3530a532d530053005322530253413a00b353015371532053025341537f537353413a00cc5300537153725341537f5373533a5300530053413a00e4530a53413a00c4530a532d53005300534153235373533a5300530053413a00e5530a53413a00c5530a532d5300530053413a008f53015373533a5300530053413a00e6530a53413a00c6530a532d53005300532253025341537f537353413a00ba530153725320530253413a00c5530053725371533a5300530053413a00e7530a53413a00c7530a532d5300530053413a00a253015373533a5300530053413a00e8530a53413a00c8530a532d5300530053413a00c353015373533a5300530053413a00e9530a53413a00c9530a532d53005300532253025341537f537353413a00ee5301537153205302534153115371537253413a00e053005373533a5300530053413a00ea530a53413a00ca530a532d5300530053413a00d353005373533a5300530053413a00eb530a53413a00cb530a532d53005300532253025341537f537353413a008f530153715320530253413a00f0530053715372533a5300530053413a00ec530a53413a00cc530a532d53005300532253025341537f537353413a00ee530053715320530253413a009153015371537253413a00dd53015373533a5300530053413a00ed530a53413a00cd530a532d5300530053413a00cd53015373533a5300530053413a00ee530a53413a00ce530a532d53005300532253025320530253413a00c453005371534153015374536b5341533c536b533a5300530053413a00ef530a53413a00cf530a532d53005300532253025341537f537353413a00c953015372532053025341533653725371533a5300530053413a00f0530a53413a00d0530a532d53005300534153295373533a5300530053413a0080530953413a00c05308532d530053005322530253413a00af53015371532053025341537f537353413a00d05300537153725341537f5373533a5300530053413a0081530953413a00c15308532d5300530053413a00e653005373533a5300530053413a0082530953413a00c25308532d530053005322530253413a00c153015372532053025341537f53735341533e537253715341537f5373533a5300530053413a0083530953413a00c35308532d530053005322530253413a00c053005372532053025341537f537353413a00bf5301537253715341537f5373533a5300530053413a0084530953413a00c45308532d5300530053225302532053025341531c5371534153015374536b5341531c536a533a5300530053413a0085530953413a00c55308532d5300530053413a00bf53015373533a5300530053413a0086530953413a00c65308532d5300530053225302532053025341532f5371534153015374536b53413a00d15300536b533a5300530053413a0087530953413a00c75308532d530053005322530253413a00ea53015372532053025341537f537353415315537253715341537f5373533a5300530053413a0088530953413a00c85308532d53005300532253025341537f537353413a00b2530153715320530253413a00cd530053715372533a5300530053413a0089530953413a00c95308532d530053005341533d5373533a5300530053413a008a530953413a00ca5308532d5300530053413a00c953005373533a5300530053413a008b530953413a00cb5308532d5300530053413a00bb53015373533a5300530053413a008c530953413a00cc5308532d53005300534153325373533a5300530053413a008d530953413a00cd5308532d530053005322530253205302534153205371534153015374536b53415320536a533a5300530053413a008e530953413a00ce5308532d5300530053225302532053025341532c5371534153015374536b5341532c536a533a5300530053413a008f530953413a00cf5308532d530053005322530253413a008553015371532053025341537f537353413a00fa5300537153725341537f5373533a5300530053413a0090530953413a00d05308532d53005300532253025341537f537353413a0081530153715320530253413a00fe53005371537253413a00c953015373533a5300530053413a0091530953413a00d15308532d5300530053413a00dc53005373533a5300530053413a0092530953413a00d25308532d5300530053413a00ed53005373533a5300530053413a0093530953413a00d35308532d5300530053413a00aa53015373533a5300530053413a0094530953413a00d45308532d53005300532253025341537f53735341531b53715320530253413a00e4530153715372533a5300530053413a0095530953413a00d55308532d53005300534153095373533a5300530053413a0096530953413a00d65308532d5300530053413a00a853015373533a5300530053413a0097530953413a00d75308532d530053005322530253413a008b53015371532053025341537f537353413a00f45300537153725341537f5373533a5300530053413a0098530953413a00d85308532d530053005322530253205302534153095371534153015374536b53413a00f75300536b533a5300530053413a0099530953413a00d95308532d53005300532253025341537f53735341532953715320530253413a00d6530153715372533a5300530053413a009a530953413a00da5308532d5300530053413a00e853015373533a5300530053413a009b530953413a00db5308532d53005300534153295373533a5300530053413a009c530953413a00dc5308532d5300530053413a00f753015373533a5300530053413a009d530953413a00dd5308532d5300530053413a00ab53015373533a5300530053413a009e530953413a00de5308532d5300530053413a008153015373533a5300530053413a009f530953413a00df5308532d5300530053413a00a253015373533a5300530053413a00a0530953413a00e05308532d53005300532253025341537f537353413a0090530153715320530253413a00ef53005371537253413a00ef53015373533a5300530053413a00a1530953413a00e15308532d5300530053413a00d853005373533a5300530053413a00a2530953413a00e25308532d530053005322530253205302534153205371534153015374536b53415320536a533a5300530053413a00a3530953413a00e35308532d5300530053413a00ba53015373533a5300530053413a00a4530953413a00e45308532d53005300532253025341537f537353413a00fc530053715320530253413a0083530153715372533a5300530053413a00a5530953413a00e55308532d5300530053413a009d53015373533a5300530053413a00a6530953413a00e65308532d53005300532253025320530253413a00dc53005371534153015374536b53415324536b533a5300530053413a00a7530953413a00e75308532d53005300534153305373533a5300530053413a00a8530953413a00e85308532d5300530053225302534153105371532053025341537f537353413a00ef5301537153725341537f5373533a5300530053413a00a9530953413a00e95308532d5300530053413a00cc53005373533a5300530053413a00aa530953413a00ea5308532d5300530053413a00e953005373533a5300530053413a00ab530953413a00eb5308532d5300530053413a00bf53015373533a5300530053413a00ac530953413a00ec5308532d53005300532253025341537f537353413a00f4530053715320530253413a008b530153715372533a5300530053413a00ad530953413a00ed5308532d5300530053413a00dc53015373533a5300530053413a00ae530953413a00ee5308532d53005300532253025320530253413a00d753005371534153015374536b53415329536b533a5300530053413a00af530953413a00ef5308532d53005300532253025320530253413a00c453005371534153015374536b5341533c536b533a5300530053413a00b0530953413a00f05308532d53005300534153175373533a530053005320530353413a00f15308532d53005300533a53003a009553025320530353285302530853413a009c3a00bb3a00de3a00c05301533653025300530c535b530b5320530353285302530853413a00f73a00933a00e73a00de5302533653025300530c535a530b53413a00b1530953205303532d53003a0095530253413a009a53015373533a5300530053413a00b2530953413a00f25308532d5300530053413a00dc53005373533a5300530053413a00b5530953413a00f55308532d5300530053413a00e953015373533a5300530053413a00b8530953413a00f85308532d53005300532253025341537f537353413a00f253015371532053025341530d53715372533a5300530053413a00b3530953413a00f35308532d53005300532253025320530253413a00e053005371534153015374536b53415320536b533a5300530053413a00b4530953413a00f45308532d53005300532253025320530253413a00e953005371534153015374536b53413a00e95300536a533a5300530053413a00b6530953413a00f65308532d53005300532253025341537f537353413a0093530153715320530253413a00ec53005371537253413a00d953005373533a5300530053413a00b7530953413a00f75308532d5300530053225302534153365372532053025341537f537353413a00c95301537253715341537f5373533a5300530053413a00b9530953413a00f95308532d53005300532253025341537f537353413a00da5301537153205302534153255371537253413a00db53005373533a5300530053413a00ba530953413a00fa5308532d5300530053413a00a553015373533a5300530053413a00bb530953413a00fb5308532d5300530053413a009a53015373533a5300530053413a00bc530953413a00fc5308532d5300530053413a00e453015373533a5300530053413a00bd530953413a00fd5308532d5300530053413a00e453005373533a5300530053413a00a1530853413a00815308532d5300530053413a00c553005373533a5300530053413a00a0530853413a00805308532d53005300532253025341537f537353413a00ac530153725320530253413a00d3530053725371533a5300530053413a00a3530853413a00835308532d53005300532253025341537f537353413a00b5530153725320530253413a00ca530053725371533a5300530053413a00be530953413a00fe5308532d530053005322530253413a00a853015372532053025341537f537353413a00d75300537253715341537f5373533a5300530053413a00bf530953413a00ff5308532d530053005322530253205302534153335371534153015374536b53413a00cd5300536b533a5300530053413a00a2530853413a00825308532d53005300532253025341537f537353413a00cc530053715320530253413a00b353015371537253413a00bd53015373533a5300530053413a00a4530853413a00845308532d53005300532253025320530253413a00c153005371534153015374536b53413a00c15300536a533a5300530053413a00a5530853413a00855308532d5300530053413a00ea53015373533a5300530053413a00a6530853413a00865308532d5300530053413a00f453015373533a5300530053413a00a7530853413a00875308532d5300530053413a00d353005373533a5300530053413a00a8530853413a00885308532d53005300534153025373533a5300530053413a00a9530853413a00895308532d5300530053413a00e153005373533a5300530053413a00aa530853413a008a5308532d530053005322530253205302534153315371534153015374536b53413a00cf5300536b533a5300530053413a00ab530853413a008b5308532d5300530053413a00dd53005373533a5300530053413a00ac530853413a008c5308532d530053005322530253413a00fb53005371532053025341537f537353413a00845301537153725341537f5373533a5300530053413a00ad530853413a008d5308532d53005300532253025341532d5372532053025341537f537353413a00d25301537253715341537f5373533a5300530053413a00ae530853413a008e5308532d530053005322530253413a00fb53015372532053025341537f537353415304537253715341537f5373533a5300530053413a00af530853413a008f5308532d5300530053413a00db53015373533a5300530053413a00b0530853413a00905308532d530053005341531b5373533a530053005320530353285302530853413a00863a00fa3a00f33a008a537e533653025300530c5359530b53413a00805312534153015336530253005320530653415330536b53225306532453005320530353205306533653023a009053025320530653415340536a532253065324530053205303532053005345533a53003a008b53025320530353205306533653023a008c530253205303532053015345533a53003a008a53025320530353285302530853413a009f3a00c93a00e73a00c05302533653025300530c5358530b5320530353285302530853413a00d73a00ca3a00e83a0080537e53413a00a83a00953a00aa3a009e537d53413a00b4530b53285302530053413a00b8530b532853025300537253413a00cf3a00dd3a008c3a00d1537a534f532253025320530253413a00b33a00953a00923a00a0537c5373536a5322530253413a00983a00a43a00ed3a00b15301537253413a00903a00843a00805320536c5320530253413a00a73a00913a00923a0080537c537153413a00883a00a03a00ed3a00915301536c536a53413a00b83a009a3a00c13a00d95378534b531b533653025300530c5357530b5320530353205303532d53003a008b5302532253025341537f537353205303532d53003a008a5302532253045341537f53735371532053025320530453725341537f537353725341537f5373534153015371533a53003a008953025320530353285302530853413a00f53a00d53a00aa3a0085537953413a00a83a00953a00aa3a009e537d53413a00bc530b53285302530053413a00c0530b532853025300536e53413a00b93a00aa3a00c23a0090537b534f53413a008f3a00873a009e3a00985302536b532253025341537f537353413a00873a00803a00985310537153413a00803a00b03a00e05300537253413a00cd3a00803a00943a00a8537853735320530253413a00b23a00c83a00813a00c753055371537253413a00d83a00a23a00de3a00a0537f5349531b533653025300530c5356530b5320530353285302530853413a00b63a00df3a00e13a00d15305533653025300530c5355530b5320530353285302530853413a00d03a00e23a00e53a00c2537853413a00ea3a00e43a00ac3a00ba537853413a00c4530b53285302530053413a00c8530b532853025300537253413a00a23a00e03a00f63a00cf5303537253413a00f93a00993a00e73a00d05305536b53413a00c83a00933a009e3a0099537f537153413a00b83a009e3a00bc3a00bf53785346531b533653025300530c5354530b53413a00dc530b532853025300531a53413a00e0530b532853025300531a5320530353285302530853413a00d33a00953a009f3a008a537b533653025300530c5353530b5320530353285302530853413a00c93a00843a00893a00e7530153413a00b83a00833a00c53a00c1537d53413a00e4530b53285302530053413a00e8530b532853025300536b5322530253413a00c33a00f53a00933a00f353795372532053025341537f537353413a00bc3a008a3a00ec3a008c530653725371532253045341537f53735322530253413a00df3a00a63a008d3a008f530653725320530253413a00df3a00a63a008d3a008f53065371536c5320530253413a00a03a00d93a00f23a00f0537953715320530453413a00df3a00a63a008d3a008f53065371536c536a53413a00f53a00e43a00e53a00e4537c537353413a00e83a00fe3a00ba3a00f153075349531b533653025300530c5352530b5320530353285302530853413a00993a00e23a008c5372533653025300530c5351530b53205303532853023a0090530253225302534253005337530353005320530253415300533b5301532053205302534253005337530353185320530253425300533753035310532053025342530053375303530853205303532853023a0090530253413a00e0530a534153035310530a53205303532853023a0090530253413a00a0530a534153075310530a53205303532853023a0090530253413a00e05309534153075310530a53205303532853023a0090530253205303532853023a0090530253105309536a5322530253413a00a053085329530353005337530053005320530253413a00b05308532d53005300533a530053105320530253413a00a853085329530353005337530053085320530353205303532853023a0090530253105309533653023a008453025320530353285302530853413a008d3a00ae3a009f3a0085537c5336530253005320530353415300533653023a00905301530c5350530b532053035320530153415301537453225302533653023a00805302530253405302537f53415300532053025345530d5300531a532053023a00ad532253093a00a7532253045320530253415301537253413a00803a008053045349530d5300531a5341537f5320530453205309534253203a00883a00a7531b530b532253045310530c532253025345530d53005320530253415304536b532d530053005341530353715345530d530053205302534153005320530453105308530b5320530353205302533653023a00fc53015320530353285302530853413a00863a00e43a00d03a00be537f533653025300530c534f530b53413a00f4530b532853025300531a53413a00f8530b532853025300531a5320530353285302530853413a00943a00813a00a43a008f5378533653025300530c534e530b5320530353205303532853023a00fc53015345533a53003a00fb53015320530353285302530853413a00943a00813a00a43a008f537853413a00ef3a00ab3a00d83a008e537e53413a00fc530b5328530253005322530253413a0080530c532853025300532253045371532053025320530453725341537f537353725341537f537353413a00fb3a00f23a00ec3a00cd5306536c532253025320530253413a008c3a00963a00c33a00e053015373536a5320530253413a00f33a00e93a00bc3a009f537e5371536b53413a00833a00ca3a00f63a00fb5379537153413a00fb3a00e03a00f53a00f8537b534b531b533653025300530c534d530b53413a0084530c532853025300531a53413a0088530c532853025300531a5320530353285302530853413a00c53a00f33a00ab3a00a95305533653025300530c534c530b5320530353285302530853413a00f83a00bb3a00e43a00af537d53413a00b13a00fd3a00933a00d9530653413a008c530c53285302530053413a0090530c532853025300536a532253025341537f537353413a00d93a00b33a00ae531353715320530253413a00a63a00cc3a00d1536c537153725322530253413a00893a009f3a00ff3a00da53795371532053025341537f537353413a00f63a00e93a00913a00a553065372536a53413a00a23a00c43a008a3a00ab537a5347531b533653025300530c534b530b5320530353285302530853413a00d63a00fb3a00e63a00f65307533653025300530c534a530b5320530353285302530853413a00fa3a00dd3a008a536753413a00de3a00bf3a00ae3a00ab537a53413a009c530c53285302530053413a00a0530c532853025300536e53413a00fe3a00c43a00823a008b5303537253413a00863a00933a00f03a00dd5306536b53413a00f93a00d63a00c13a00da5378537153413a00f73a00f23a00e43a00a3537b534b531b533653025300530c5349530b5320530353285302530853413a00a13a009e3a00943a008a537d533653025300530c5348530b5320530353285302530853413a00fe3a00ff3a008a3a00da53055336530253005320530353415300533653023a008c5301530c5347530b532053035320530353285302534c53415301536a533653023a00f453015320530353285302530853413a00fa3a00eb3a00c13a00c9530653413a00f03a00cd3a00a73a009c537f53413a00bc530c53285302530053413a00c0530c532853025300537353413a00e93a00f03a0098536e536c53413a009f3a00ce3a00e13a00a7537f534f53413a00ab3a00903a00e23a00e35378537353413a009b3a00c93a00f73a00e153065349531b533653025300530c5346530b5320530353285302530853413a00a43a009e3a008a3a00ee537c53413a00ec3a00c93a00ab3a0098537e53413a00c4530c5328530253005322530253413a00c8530c53285302530053225304537153205302532053045372536a53413a00853a00de3a00af3a009d5303536a53413a00a93a00c13a00fc3a0081537d534f53413a009c3a00d53a009f3a00ba537d537253413a00f43a00823a00da3a009e537b534b531b533653025300530c5345530b5320530353205303532853023a00f45301532053015346533a53003a00f353015320530353285302530853413a00e63a00c03a00aa3a00c7530253413a00ec3a00c93a00ab3a0098537e53413a00cc530c53285302530053413a00d0530c532853025300537253413a009c3a00a13a00915334537353413a00e23a00d43a00ee3a00cb5307537253413a00883a00e13a00993a008653045347531b533653025300530c5344530b5320530353205303532853023a008853015336530253485320530353285302530853413a009a3a00ed3a00ba3a009f530353413a00bb3a00fd3a00e53a00e6530453413a00d4530c53285302530053413a00d8530c532853025300536e53413a009c3a00eb3a00c23a00c85306536c5341537f537353413a00d33a00933a00fa3a00ab537d537153413a009e3a00f13a00893a00e65301537353413a00a03a00cb3a00dd3a00cf53795349531b533653025300530c5343530b5320530353205303532853023a0080530253415301537253225305533653023a00ec530153413a00e0530c5328530253005321530253413a00dc530c5328530253005321530453205303532053055310530c53225305533653023a00e8530153205303532053055345533a53003a00e753015320530353285302530853413a00a03a00de3a00853a00c9537853413a00bb3a00fd3a00e53a00e6530453205304532053025341537f5373537153205302532053045341537f53735371536b53413a00c03a00f73a00bd3a00dd5302537253413a00ab3a00923a00883a00f35305536a53413a00d73a00f83a009f3a00c8537a5349531b533653025300530c5342530b5320530353285302530853413a00a13a008d3a00b93a009e530153413a00e33a00f73a00873a00ad530253205303532d53003a00e75301531b5336530253005320530353415300533653025358530c5341530b53205303532853023a00e0530153415300533a530053005320530353285302530853413a00bb3a00c53a008f3a00f85307533653025300530c5340530b5320530353285302530853413a00913a00f63a00ff3a00f1537c53413a00803a00ca3a00803a00cc537953413a00e4530c5328530253005322530253413a00e8530c53285302530053225304536a53205302532053045371534153015374536b5322530253413a00a93a00a33a00c1535953735320530253413a00a83a00a13a00c03a00d05303537353413a00ae3a00f53a00f83a00d653035371534153015374536b53413a00ae3a00f53a00f83a00d65303536a5322530253413a008d3a00fa3a00803a00e0530453735320530253413a008d3a00fa3a00803a00e053045371534153015374536a53413a00923a00e93a00a93a00a15379534b531b533653025300530c533f530b5320530353285302530853413a00933a00ae3a00cf3a00e053015336530253005320530353205301533653023a008053015320530353205303532853023a00805302533653023a00845301530c533e530b5320530353205303532853023a008053015336530253445320530353205303532853023a008453015336530253405320530353285302530853413a00fe3a00a43a00a13a0080530253413a00d93a00dc3a00f73a00a6530653413a00f4530c53285302530053413a00f8530c532853025300537253413a00cb3a00f03a00873a00bb5305536b53413a00d83a00f93a00e23a00c85302536e53413a009c3a00d83a00873a00f3537c537253413a009c3a00e53a00843a00ac5304534b531b533653025300530c533d530b532053035320530353285302534453225302534153025349533a53003a00d353015320530353415301532053025320530253415301534d531b53225302533653023a00d853015320530353205302534153015371533653023a00d453015320530353285302530853413a00c73a00bd3a00ef3a00a0530753413a00d93a00dc3a00f73a00a6530653413a00fc530c5328530253005341537f537353413a0080530d5328530253005341537f537353715341537f537353413a00cd3a00f83a00b33a00d7537d536c53413a00b33a00e13a00e33a00dc5301536a5322530253413a00a33a00893a00ac3a00fd537c53725320530253413a00a33a00893a00ac3a00fd537c5371536c5320530253413a00dc3a00f63a00d33a008253035371532053025341537f537353413a00a33a00893a00ac3a00fd537c5371536c536a53413a00e93a00db3a00c33a00e1537e5349531b533653025300530c533c530b5320530353285302530853413a00d43a00b13a0087533453413a00cc3a00d53a00bb3a00e3530353205303532d53003a00d35301531b53365302530053205303534153005336530253785320530353415300533653025374530c533b530b53413a0084530d532853025300531a53413a0088530d532853025300531a5320530353285302530853413a00f33a00993a00ce3a00be537f533653025300530c533a530b53205303532053035328530253485345533a53003a00cb53015320530353285302530853413a00a23a00da3a00fd3a0080530453413a00f03a00cc3a00a0533f53413a00ac530d53285302530053413a00b0530d532853025300537253413a008e3a00df3a00d33a00ec5306536e53413a00a13a008b3a00b53a00b25301536c53413a008c3a00bc3a00c3532c5346531b533653025300530c5339530b5320530353285302530853413a00b13a00ad3a00b33a00a15307533653025300530c5338530b5320530353285302530853413a00803a00d33a00ce3a00a0530753413a00b33a00973a00a13a0088530353413a00b4530d53285302530053413a00b8530d532853025300536a5322530253413a00d23a00e23a00fd530553725320530253413a00d23a00e23a00fd53055371536c5320530253413a00ad3a009d3a008253025371532053025341537f537353413a00d23a00e23a00fd53055371536c536a53413a008c3a00f23a00d63a00975303536a53413a00d43a00863a00fa537b537253413a00c23a009d3a00973a00f0537e5349531b533653025300530c5337530b5320530353285302530853413a00803a00d33a00ce3a00a0530753413a00b53a00cd3a00b83a00be530553413a00bc530d53285302530053413a00c0530d532853025300536b53413a00803a00fa3a00ca3a009a5305536a53413a00943a00813a009a3a009f5379537353413a009f3a00dd3a00c13a00f55306536c53413a008c3a00ae3a00803a009c537f534b531b533653025300530c5336530b5320530353205303532853023a00ac530153205303532853025348536b533653023a00c453015320530353285302530853413a00d13a00c93a00a43a008b5304533653025300530c5335530b5320530353205303532853023a00e8530153205303532853023a00c45301536a533653023a00c053015320530353285302530853413a00fc3a009b3a00af3a00c0537e53413a00ad3a00bf3a00e33a00cd537e53413a00cc530d53285302530053413a00d0530d532853025300536c53413a00da3a00e03a00d43a00a05302536a53413a00c23a00c03a00913a00e7537d537153413a00833a00ac3a008b3a00b1537f5346531b533653025300530c5334530b5320530353285302530853413a00b73a00cb3a00c63a009f5304533653025300530c5333530b53205303532853023a00c053015341533153205303532853025348531053085320530353285302530853413a00b13a00b33a00f43a00b253065336530253005320530353205303532853023a00c4530153365302535c530c5332530b532053035320530353285302537453365302533c5320530353205303532853025378533653025338532053035320530353285302537c53365302533453413a00d4530d532853025300531a53413a00d8530d532853025300531a5320530353285302530853413a00af3a00833a00863a00bc5303533653025300530c5331530b5320530353205303532853023a00d453015345533a53003a00bf53015320530353285302530853413a00f93a00a43a00f23a00b7530353413a00a13a00d23a00dc3a0082537a53413a00dc530d53285302530053413a00e0530d5328530253005371532253025320530253413a00f63a00c23a00d23a009d53025373536a5320530253413a00893a00bd3a00ad3a00e253015371536b53413a009f3a00ff3a008f3a00d95302537153413a00bd3a00c63a00b13a00ec5303536b53413a00ae3a00b03a00a553705349531b533653025300530c5330530b5320530353205303532853023a00fc530153205303532853025338536a53225305532d530053005320530353285302533c534153085374537253225302533653023a00b8530153205303532053025341533a536e53225307533653023a00b4530153413a00f0530d5328530253005321530253413a00ec530d532853025300532153045320530553205307533a530053005320530353285302530853413a00883a00fa3a00c13a00b9537b53413a00af3a00c33a008c3a00b5530453205304532053025341537f5373537153205302532053045341537f53735371536b53413a00d33a008e3a00803a00925306536c5322530253413a008f3a00e53a00c93a00c5537953725320530253413a008f3a00e53a00c93a00c553795371536c532053025341537f537353413a008f3a00e53a00c93a00c5537953715320530253413a00f03a009a3a00b63a00ba53065371536c536a53413a00f83a00ac3a00bc3a00b55302537353413a009c3a00e43a00d33a00815302534b531b533653025300530c532f530b5320530353285302530853413a00d93a00d83a00e23a00d35378533653025300530c532e530b5320530353285302530853413a00ab3a00d53a00873a00fc537a533653025300530c532d530b5320530353205303532853023a00b8530153205303532853023a00b45301532253025341533a5372532053025341533a5371536c53205302534153455371532053025341537f53735341533a5371536c536a536b533653023a00b053015320530353285302530853413a00ab3a00d53a00873a00fc537a53413a00873a00d63a00b53a00d2537b53413a00f4530d53285302530053413a00f8530d532853025300536e53413a00d93a00983a00b93a00fe537e537353413a00b23a00b03a00a33a00a05304536b532253025341537f537353413a00fb3a00873a00b13a00fb537b53725320530253413a00843a00f83a00ce3a008453045372537153413a00eb3a00db3a00c03a00a6537b5346531b533653025300530c532c530b5320530353285302530853413a00863a00d93a00863a00ec537b53413a009c3a00a03a00c63a00f2537d53413a0084530e53285302530053413a0088530e532853025300536a53413a00863a00de3a00ed3a00ea5300536e532253025341530653715341530153745320530253413a00d93a00ce3a00813a00a553055373536b53413a00863a00dc3a00e43a00ac537b536c53413a00f53a00f93a00873a00945378534b531b533653025300530c532b530b5320530353285302530853413a00aa3a00f33a00d73a00ec537d5336530253005320530353205303532853023a00b05301533653025370530c532a530b53205303532053035328530253705336530253305320530353285302530853413a008b3a00923a00813a0087537b53413a00e23a00b83a009e3a00ca530453413a008c530e5328530253005322530253413a0090530e532853025300532253045371532053025341537f5373532053045341537f5373537153725341537f537353413a00ed3a00de3a00bc3a00e1537c537253413a00a33a00eb3a00c73a00a85307537353413a00c93a00fc3a00973a008f5301534b531b533653025300530c5329530b53205303532853023a008c530253205303532853025330536a532d5300530053215302532053035320530353285302534053415301536b53225304533653023a00ac530153413a0098530e5328530253005321530553413a0094530e5328530253005321530753205303532853023a00e8530153205304536a53205302533a530053005320530353285302530853413a008b3a00923a00813a0087537b53413a00a83a00a03a00f43a00ed53035320530553205307537253413a00b23a00b23a00fc535a534f53413a00b13a00843a00e63a00d05378536c5322530253413a009f3a00f93a00be3a00e5530053715341530153745320530253413a00e03a00863a00c13a009a537f5373536b53413a00863a00d43a00a53a00b7537e534b531b533653025300530c5328530b5320530353285302530853413a00c33a00fd3a00cc3a00b353055336530253005320530353205303532853025344533653025360530c5327530b53413a00a8530e5328530253005321530553413a00a4530e5328530253005321530753205303532853023a00fc530153205303532853025324536a5322530253205302532d53005300532053035328530253285341530853745372532253025341533a536e53225308533a5300530053205303532853023a00fc530153205303532853025324532253045341537f537353413a00fd3a00b53a00b43a0081537c53715320530453413a00823a00ca3a00cb3a00fe53035371537253413a00fc3a00b53a00b43a0081537c5373532053045341530153715372536a5322530453205304532d5300530053205302532053085341533a536c532253045341537f5373537153415301537453205302532053045373536b5341530853745372532253025341533a536e53225304533a53005300532053035320530353285302532453415302536a533653023a00a453015320530353205302532053045341533a536c532253045341537f53735371532053025341537f5373532053045371536b533653023a00a85301532053035320530353285302532c53415302536a53225302533653023a00a05301532053035320530253205303532853023a00cc53015346533a53003a009f53015320530353285302530853413a00da3a00ee3a008f532553413a00d43a00af3a00c23a009d53035320530553205307536c53413a00d43a00d13a00b93a0089537d536c53413a00f53a00e33a00983a00bb53015346531b533653025300530c5326530b53205303532053035328530253605336530253205320530353285302530853413a00a63a00a13a00dd3a00d5530653413a00c73a00b93a00ef3a00fb537853205303532853023a00fc5301532d53005300531b533653025300530c5325530b5320530353285302530853413a00f43a00b93a00cc3a00c7537e53413a00943a00a53a00903a00d2530153413a00b4530e53285302530053413a00b8530e532853025300536a5322530253413a00843a0088530e537353205302537153413a00b63a00ca3a008e3a00da5378537153413a00a03a00be3a00c93a00ff5303536b53413a00e63a00903a00e73a00ac5304534b531b533653025300530c5324530b5320530353285302530853413a00813a00fc3a00c63a00a35301533653025300530c5323530b5320530353285302530853413a00ce3a008f3a009f3a00fa537d53413a00b93a00b03a00b83a0084537a53413a00c4530e53285302530053413a00c8530e532853025300536b53413a00e23a00de3a00ae3a00df5303536b53413a00ff3a00a33a00dc3a00a3537a534f5322530253413a00933a00903a00cd3a00a65304537353205302534153015374536a53413a00b83a00bb3a00dc531c534b531b533653025300530c5322530b53205303532053035328530253205345533a53003a009653015320530353285302530853413a00fc3a00983a008e3a00ff530453413a00e53a00ad3a00f13a00f4537853413a00dc530e53285302530053413a00e0530e532853025300536e53413a00d63a00813a00ed3a00eb5301536a53413a00a13a00b53a00eb3a00d35378534f53413a00f33a00b83a00b23a00e95305537353413a00c53a00c33a00d43a00f75303534b531b533653025300530c5321530b5320530353285302530853413a00c33a008f3a009b3a00a7537a533653025300530c5320530b5320530353285302530853413a00fd3a00ed3a00dc3a00b5537953413a009e3a00b43a00973a008e530453413a00ec530e53285302530053413a00f0530e532853025300536a5322530253413a00d03a00853a00e73a00ce530453715341530153745320530253413a00af3a00fa3a00983a00b1537b5373536b5322530253413a00c53a00e23a00ce3a0088530153725320530253413a00c53a00e23a00ce3a008853015371536c5320530253413a00ba3a009d3a00b13a00f7537e5371532053025341537f537353413a00c53a00e23a00ce3a008853015371536c536a53413a00de3a00823a00ec3a008b5302537253413a00893a00843a00d03a008753025346531b533653025300530c531f530b5320530353285302530853413a00b93a00843a00fe3a0082537f53413a00933a00ae3a00cf3a00e0530153205303532d53003a00965301531b5336530253005320530353205303532853023a00ac5301533653023a008453015320530353205303532853025320533653023a00805301530c531e530b532053035320530353285302535c53365302531c5320530353285302530853413a009e3a00fd3a00cb3a0096530653413a00fe3a00883a00be3a009a537a53413a00f4530e5328530253005322530253413a00f8530e53285302530053225304537253205302532053045371536c53205302532053045341537f53735322530453725341537f537353205302532053045371536c536a53413a00ae3a00e23a009d3a00a85303536a5322530453413a00b23a009f3a00da3a00f3537d53735322530253413a00d43a00be3a00ec3a009d537a53725320530253413a00d43a00be3a00ec3a009d537a5371536c5320530453413a00c43a00a03a00a43a008c5302537353413a00d43a00be3a00ec3a009d537a53715320530253413a00ab3a00c13a00933a00e253055371536c536a53413a008c3a00af3a00e23a00a053795349531b533653025300530c531d530b53413a0080530f5328530253005321530253413a00fc530e5328530253005321530453205303532853023a00e8530153225305532053055320530353285302531c53225307536a53205303532853023a00ec530153205307536b531053075320530353285302530853413a00d13a00e53a00843a00fe537853413a009e3a00fd3a00cb3a009653065320530453205302536b53413a00f23a00ca3a00f93a00b25303536a532253025320530253413a00fa3a00d83a00be3a008a53045371534153015374536b53413a00863a00a73a00c13a00f55303536b53413a00d13a00823a009d3a0097537e537353413a00823a00cb3a009b3a00c7537b5349531b533653025300530c531c530b5320530353285302530853413a00a13a008d3a00b93a009e53015336530253005320530353205303532853023a00e85301533653025358530c531b530b53205303532053035328530253585336530253185320530353285302530853413a00c93a00bd3a00b83a00fa530653413a00e13a00f63a00e43a00c5530553413a0084530f53285302530053413a0088530f532853025300537253413a00c23a00c43a00a13a00815305537353413a00de3a00c53a00ab3a00b15305537153413a00b53a00d93a00933a00955379536c53413a00bb3a009e3a00923a00e053075349531b533653025300530c531a530b53413a0090530f5328530253005321530253413a008c530f5328530253005321530453205303532853023a00fc53015310530d5320530353285302530853413a00e13a00f63a00e43a00c5530553413a00873a00c33a009e3a00bd537c53205302532053045371532253025341537f537353413a00e73a00f43a00a03a009f530253725320530253413a00823a00e43a00805309537153413a00e53a00933a00a13a00d653035372537153413a00a63a00cc3a009e3a00f953015349531b533653025300530c5319530b5320530353285302530853413a00843a00d43a00b83a00ea53795336530253005320530353205303532853025318533653025354530c5318530b5320530353285302530853413a00ca3a00c13a00b83a00e2537853413a00823a00853a00c73a00cc537953413a009c530f53285302530053413a00a0530f532853025300537353413a00f73a00df3a009f3a009f5304536e53413a00ed3a00983a00e43a00ba5302536b53413a00ca3a00d83a00803a00ea5304534b531b533653025300530c5317530b5320530353285302530853413a00d03a00b73a00cb3a00c95307533653025300530c5316530b5320530353285302530853413a00cd3a00e23a00db3a00d85378533653025300530c5315530b53413a00a1530a53413a0081530a532d5300530053413a00de53015373533a5300530053413a00a3530a53413a0083530a532d5300530053413a00b753015373533a5300530053413a00a6530a53413a0086530a532d530053005341531b5373533a5300530053413a00a7530a53413a0087530a532d5300530053413a00d853015373533a5300530053413a00a8530a53413a0088530a532d5300530053413a009553015373533a5300530053413a00a0530a53413a0080530a532d53005300532253025341537f537353413a00e653015371532053025341531953715372533a5300530053413a00a2530a53413a0082530a532d530053005322530253205302534153105371534153015374536b53413a00f05300536b533a5300530053413a00a4530a53413a0084530a532d53005300532253025341537f537353413a00a4530153715320530253413a00db5300537153725341537f5373533a5300530053413a00a5530a53413a0085530a532d530053005322530253205302534153095371534153015374536b53413a00f75300536b533a5300530053413a00a9530a53413a0089530a532d5300530053413a00f453005373533a5300530053413a00aa530a53413a008a530a532d5300530053413a00ed53015373533a5300530053413a00ac530a53413a008c530a532d530053005341530e5373533a5300530053413a00ad530a53413a008d530a532d5300530053413a00cb53005373533a5300530053413a00ab530a53413a008b530a532d53005300532253025341537f537353413a00bf530153715320530253413a00c0530053715372533a530053005320530353285302530853413a008a3a00d33a009d3a00bb5303533653025300530c5314530b53205303532853023a008c5302532253025342530053375303530053205302534253005337530353385320530253425300533753035330532053025342530053375303532853205302534253005337530353205320530253425300533753035318532053025342530053375303531053205302534253005337530353085320530353285302530853413a00b83a00833a00c53a00c1537d533653025300530c5313530b53205303532853023a00fc53015320530053205301531053065320530353285302530853413a00f83a00bb3a00e43a00af537d533653025300530c5312530b5320530353285302530853413a00e13a00823a00f33a00d25303533653025300530c5311530b5320530353285302530853413a00a43a009e3a008a3a00ee537c533653025300530c5310530b53205303532853023a008053025341530153725310530c531a5320530353285302530853413a00bb3a00fd3a00e53a00e65304533653025300530c530f530b5320530353285302530853413a00fe3a00a43a00a13a00805302533653025300530c530e530b5320530353285302530853413a00f33a00993a00ce3a00be537f533653025300530c530d530b5320530353285302530853413a00ea3a00cf3a009b3a00bf5301533653025300530c530c530b5320530353285302530853413a00a23a00da3a00fd3a00805304533653025300530c530b530b5320530353285302530853413a00af3a00833a00863a00bc5303533653025300530c530a530b53205303532853023a00fc530153205303532853025338536a5322530253205302532d530053005320530353285302533c53415308537453725341533a536e533a530053005320530353285302530853413a00af3a00c33a008c3a00b55304533653025300530c5309530b5320530353285302530853413a00ab3a00d53a00873a00fc537a533653025300530c5308530b5320530353285302530853413a00863a00d93a00863a00ec537b533653025300530c5307530b53205303532853023a00fc530153205303532853023a00dc53015320530353285302532053415301536b531053075320530353285302530853413a00d83a00b93a00863a009b5301533653025300530c5306530b5320530353285302530853413a00e53a00ad3a00f13a00f45378533653025300530c5305530b5320530353285302530853413a00f73a00e23a00ce3a00e7537a533653025300530c5304530b53205303532853023a00e8530153225302532053025320530353285302531c53225304536a53205303532853023a00ec530153205304536b531053075320530353285302530853413a00fe3a00883a00be3a009a537a533653025300530c5303530b53205303532853023a00fc53015310530d5320530353285302530853413a00c93a00bd3a00b83a00fa5306533653025300530c5302530b5320530353285302530853413a00823a00853a00c73a00cc5379533653025300530c5301530b5320530353285302530853413a00a33a00e03a00f13a00e35306533653025300530c5300530b5300530b3a00ee530953015306537f5323530053415330536b53225304532453005320530453413a00f23a008c3a00af3a0098537e5336530253045320530453413a00b4530f5328530253005322530353413a00b8530f53285302530053225305537253205303532053055371536c53205303532053055341537f53735322530553725341537f537353205303532053055371536c536a53413a00c23a00963a00e73a00b35301536e53413a00873a00953a00d23a00b05303536c53413a00ca3a00f73a00c33a00975302536a53365302532c532053045320530453415304536a5336530253005303534053025340530253405302534053025340530253405302534053025340532053045328530253045322530353413a00f13a008c3a00af3a0098537e534c530453405320530353413a00d63a00a73a00ab3a00a6537a534c530453405320530353413a00d83a00d93a00903a00a253785346530d53025320530353413a00f33a00e53a00e83a00fe53785346530d53055320530353413a00b83a00ff3a00fb3a00fb53795347530d53095320530453285302530053413a00d73a00a73a00ab3a00a6537a53413a00b43a00f33a008b3a0088537c53205304532d53005327531b53365302530053205304532053025336530253105320530453415300533653025314530c5309530b5320530353413a00c53a00ef3a00cf3a00f6537b534c530453405320530353413a00cb3a00e83a00c03a00d8537b5346530d53065320530353413a00d73a00a73a00ab3a00a6537a5347530d530953205304532853025328532153005320530453415330536a5324530053205300530f530b5320530353413a00c63a00ef3a00cf3a00f6537b5346530d53065320530353413a00b43a00f33a008b3a0088537c5347530d5308532053045320530453285302531053365302530c53205304532053045328530253145336530253085320530453285302530053413a00c63a00a13a00d53a00e9530753413a00853a00bd3a00c13a00da530753413a00d4530f53285302530053413a00d8530f5328530253005372532253035320530353413a00b33a00923a00aa3a009a53075371534153015374536b53413a00b33a00923a00aa3a009a5307536a5322530353413a00c53a00ff3a00e03a00d2537953715320530353413a00c53a00ff3a00e03a00d253795372536a53225303532053035341537f537353413a00fb3a00ba3a00b03a00e853055372536a53415301536a53413a00d03a00d73a00ea3a00df5306534b531b533653025300530c5308530b530253405320530353413a009c3a00c53a00fb3a00835303534c530453405320530353413a00f23a008c3a00af3a0098537e5346530d53015320530353413a00e83a00e73a00c93a00a7537e5346530d53045320530353413a009d3a00c43a00833a00e3537e5347530d53095320530453285302530053413a00b83a00ff3a00fb3a00fb5379533653025300530c5309530b5320530353413a00c53a00a13a00d53a00e95307534c530453405320530353413a009d3a00c53a00fb3a008353035346530d53035320530353413a00853a00bd3a00c13a00da53075347530d530953413a00e0530f5328530253005321530553413a00dc530f53285302530053215307532053045328530253085322530653205304532853025328536a5320530453285302530c532253035320530053205306536a532d530053005373533a5300530053205304532053035341530f537653225306532053035341530d5376532253085341537f5373537153205308532053065341537f537353715372532053035341530c53765373532053035341530a537653735341531f53745320530453285302530c5341530153765372533653025320532053045320530453285302530853415301536a5322530353365302531c5320530453205301532053035346533a5300531b5320530453285302530053413a00cb3a00e83a00c03a00d8537b53413a00c63a00a13a00d53a00e953075320530553205307537253413a00cc3a00b93a00f83a00975305536c53413a00983a00cf3a00b43a00e65307536a5322530353413a00dc3a00d73a00e43a00a1530653735320530353413a00dc3a00d73a00e43a00a153065371534153015374536a53413a009d3a00a43a00a23a00ac537e5347531b533653025300530c5309530b5320530353413a00c63a00a13a00d53a00e953075346530d53075320530353413a00bc3a00db3a00993a00ed53075347530d5308532053015310530c531a5320530453285302530053413a00d83a00d93a00903a00a25378533653025300530c5308530b5320530453285302530053413a00d83a00d93a00903a00a2537853413a00bc3a00db3a00993a00ed53075320530453285302532c53413a00ac3a00f83a00833a009753795349531b533653025300530c5307530b53413a00c0530f5328530253005321530353413a00bc530f5328530253005321530553205304532053015310530c5336530253285320530453285302530053413a00bc3a00db3a00993a00ed530753413a009d3a00c53a00fb3a00835303532053035320530553725322530353413a00e43a00fa3a00893a0094537d53735320530353413a00843a00f83a00883a00945305537353413a00943a00fd3a009c3a009753055371534153015374536b53413a00ec3a00823a00e33a00e85302536b5322530353413a00f03a00ed3a00873a00ba530753725320530353413a008f3a00923a00f83a00c553785373537153413a00cd3a00a83a00b53a008753035349531b533653025300530c5306530b5320530453285302530053413a00e83a00e73a00c93a00a7537e533653025300530c5305530b5320530453285302530053413a00c63a00ef3a00cf3a00f6537b53413a00f33a00e53a00e83a00fe537853413a00c4530f53285302530053413a00c8530f5328530253005373532253035341537f537353413a00b93a00d53a0094532953725320530353413a00c63a00aa3a00eb53565372537153413a008f3a00f13a00c13a009c5305536b532253035341537f537353413a00be3a00c43a00963a008d537f53725320530353413a00c13a00bb3a00e93a00f253005372537153413a00cb3a00943a00d83a00eb537c534b531b533653025300530c5304530b53205304532053015345533a530053275320530453285302530053413a00c63a00ef3a00cf3a00f6537b53413a009d3a00c43a00833a00e3537e53413a00cc530f5328530253005341537f537353413a00d0530f5328530253005341537f537353725322530353413a00803a00953a00a83a00f253005371532053035341537f53735322530353413a00e83a00a03a00853a008553045371537253413a00a03a00b13a008d533553735320530353413a00a03a00a43a00a53a00c753005371537253413a00973a00ca3a00d23a0088537b537253413a00b83a00813a00aa3a00c753025346531b533653025300530c5303530b5320530453285302530053413a00d73a00a73a00ab3a00a6537a53413a00b43a00f33a008b3a0088537c53205304532d5300531b531b533653025300532053045320530453285302531c5336530253145320530453205304532853025320533653025310530c5302530b5320530453285302530053413a00f33a00e53a00e83a00fe5378533653025300530c5301530b532053045328530253085322530353205304532853025328536a5320530053205303536a532d530053005322530353205304532d5300530c5322530553715341537f5373532053035341537f5373532053055341537f537353715341537f53735371533a530053005320530453285302530053413a00853a00bd3a00c13a00da5307533653025300530c5300530b5300530b3a00b5531853025311537f5301537e5323530053413a00e05300536b53225303532453005320530353413a00d13a00f33a00d53a00ea53045336530253085320530353413a00e4530f5328530253005322530453413a00e8530f532853025300532253075371532053045341537f5373532053075341537f5373537153725341537f537353413a00ca3a00f13a00a85376534f53413a00b23a00db3a00b63a00fb5379536c53413a00f43a00943a00ec3a00ac5306536e53365302535c532053035320530353415308536a533653025304532053025341530e536a53215309532053025341530f536a5321530a532053015341530853765321530b532053015341531053765321530753205301534153185376532153085320530253415303536a5321530c5320530253415305536a5321530d5320530253415306536a5321530e5320530253415307536a5321530f5320530253415309536a53215310532053025341530a536a53215311532053025341530b536a53215312532053025341530d536a532153135303534053025340530253405302534053025340530253405302534053025340532053035328530253085322530453413a00e63a00a33a00c43a009d5302534c530453405320530453413a00aa3a00ab3a00903a00f6537c534c530453405320530453413a00ad3a00f83a00e83a00c353795346530d53025320530453413a00a43a00843a00d83a0088537c5346530d53075320530453413a00e53a00df3a00c43a00dd537a5347530d53095320530353413a00e05300536a53245300530f530b5320530453413a00ab3a00ab3a00903a00f6537c5346530d53035320530453413a00923a00ce3a00dd3a0089537e5346530d53045320530453413a00c83a00b93a00913a009f537f5347530d53085320530353285302530453413a00a73a00c63a00a93a00e85303533653025300530c5308530b530253405320530453413a00d03a00f33a00d53a00ea5304534c530453405320530453413a00e73a00a33a00c43a009d53025346530d53085320530453413a00f13a00c23a00c23a00aa53025346530d53015320530453413a00a73a00c63a00a93a00e853035347530d53095320530353285302530453413a00ad3a00f83a00e83a00c3537953413a00a43a00843a00d83a0088537c53413a00f4530f53285302530053413a00f8530f532853025300536e53413a00c23a00833a00ba3a00c7537e537353413a00f73a00a03a00e75321536c5322530453413a00de3a00f53a00e3530e53725320530453413a00de3a00f53a00e3530e5371536c5320530453413a00a13a008a3a009c53715371532053045341537f537353413a00de3a00f53a00e3530e5371536c536a53413a00833a00953a008653335347531b533653025300530c5309530b5320530453413a00ee3a00933a00863a00c253055346530d53055320530453413a00cc3a00e83a008e3a009b53055346530d53025320530453413a00d13a00f33a00d53a00ea53045347530d53085320530353285302530453413a00ee3a00933a00863a00c2530553413a00f13a00c23a00c23a00aa53025320530353285302535c53413a00e53a00ec3a008b3a00e853795346531b533653025300530c5308530b53413a00f0530f5328530253005321530453413a00ec530f5328530253005321530653413a008853125320530053205301536a53415301536b3a00ad53375303530053413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c532253145337530353005320530253205314534253213a0088533c5300530053413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c5322531453375303530053205314534253213a00883a00a753215305532053035320530253415301536a5336530253585320530253205305533a5300530153413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c5322531453375303530053205314534253213a00883a00a753215305532053035320530253415302536a5336530253545320530253205305533a5300530253413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c5322531453375303530053205314534253213a00883a00a753215305532053035320530c5336530253505320530253205305533a5300530353413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c5322531453375303530053205314534253213a00883a00a753215305532053035320530253415304536a53365302534c5320530253205305533a5300530453413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c5322531453375303530053205314534253213a00883a00a753215305532053035320530d5336530253485320530253205305533a5300530553413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c5322531453375303530053205314534253213a00883a00a753215305532053035320530e5336530253445320530253205305533a5300530653413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c5322531453375303530053205314534253213a00883a00a753215305532053035320530f5336530253405320530253205305533a5300530753413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c5322531453375303530053205314534253213a00883a00a753215305532053035320530253415308536a53365302533c5320530253205305533a5300530853413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c5322531453375303530053205314534253213a00883a00a75321530553205303532053105336530253385320530253205305533a5300530953413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c5322531453375303530053205314534253213a00883a00a75321530553205303532053115336530253345320530253205305533a5300530a53413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c5322531453375303530053205314534253213a00883a00a75321530553205303532053125336530253305320530253205305533a5300530b53413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c5322531453375303530053205314534253213a00883a00a75321530553205303532053025341530c536a53365302532c5320530253205305533a5300530c53413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c5322531453375303530053205314534253213a00883a00a75321530553205303532053135336530253285320530253205305533a5300530d53413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c532253145337530353005320530353205314534253213a0088533c530053275320530353285302530453413a00f13a00c23a00c23a00aa530253413a00c83a00b93a00913a009f537f5320530453205306537353205304532053065371534153015374536a53413a00973a00c23a00bc3a00a2537b537153413a00db3a00c13a00853a00b45304536b53413a00943a00e43a00e53a00d3537b537353413a00fe3a00e93a00c23a00db537d5349531b533653025300530c5307530b532053035320530953365302532053413a00fc530f5328530253005321530453413a00805310532853025300532153065320530253205303532d53005327533a5300530e53413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c5322531453375303530053205314534253213a00883a00a753215305532053035320530a53365302531c5320530253205305533a5300530f53413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c532253145337530353005320530353205314534253213a00883a00a753225305532053055341537f5373534153015372536a53415302536a53225305533a5300531b5320530253205305533a530053005320530353205303532d5300531b532253055336530253145320530253205305536a53205301533a53005300532053035320530b533a53005313532053035320530253205303532853025314534153045372536a53365302530c5320530353285302530453413a00cc3a00e83a008e3a009b530553413a00ad3a00f83a00e83a00c3537953205306532053045341537f537353715341537f537353205304532053065341537f537353715341537f537353715341537f537353413a00ea3a00b93a00e13a00fd537d537153413a009a3a00d13a00b23a00c7537c536c53413a00923a00893a00f53a00d85303536b53413a00e73a00a43a00993a00b65302534b531b533653025300530c5306530b5320530353285302530453413a00ab3a00ab3a00903a00f6537c533653025300530c5305530b53413a00845310532853025300531a53413a00885310532853025300531a5320530353285302530453413a00923a00ce3a00dd3a0089537e533653025300530c5304530b53413a00905310532853025300531a53413a008c5310532853025300531a5320530353285302530c53205303532d53005313533a530053005320530253205303532853025314534153085372536a53205307533a5300530053205302532053035328530253145341530c5372536a53205308533a530053005320530353285302531c53205303532d5300531b53225304532053045341537f5373534153335372536a53205303532853025358532d5300530053225304532053045341537f5373534153335372536a536a53205303532853025354532d53005300534153335371536a53415302536a5322530453205303532853025350532d5300530053415333537153225306537353205304532053065371534153015374536a5320530353285302534c532d53005300534153335371536a53205303532853025348532d5300530053225304534153335372532053045341534c53735371536a53205303532853025344532d53005300534153335371536a53205303532853025340532d53005300534153335371536a5320530353285302533c532d53005300534153335371536a53205303532853025338532d53005300534153335371536a53205303532853025334532d53005300534153335371536a53205303532853025330532d5300530053225304532053045341537f5373534153335372536a536a5320530353285302532c532d53005300534153335371536a53205303532853025328532d5300530053225304534153335372532053045341534c53735371536a53415301536a5322530453205303532853025320532d5300530053415333537153225306537153205304532053065372536a533a530053005320530353285302530453413a00e53a00df3a00c43a00dd537a533653025300530c5303530b53413a008853125320530053205301536a53415301536b3a00ad53375303530053413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c532253145337530353005320530253205314534253213a0088533c5300530053413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c532253145337530353005320530253205314534253213a0088533c5300530153413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c532253145337530353005320530253205314534253213a0088533c5300530253413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c532253145337530353005320530253205314534253213a0088533c5300530353413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c532253145337530353005320530253205314534253213a0088533c5300530453413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c532253145337530353005320530253205314534253213a0088533c5300530553413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c532253145337530353005320530253205314534253213a0088533c5300530653413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c532253145337530353005320530253205314534253213a0088533c5300530753413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c532253145337530353005320530253205314534253213a0088533c5300530853413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c532253145337530353005320530253205314534253213a0088533c5300530953413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c532253145337530353005320530253205314534253213a0088533c5300530a53413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c532253145337530353005320530253205314534253213a0088533c5300530b53413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c532253145337530353005320530253205314534253213a0088533c5300530c53413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c532253145337530353005320530253205314534253213a0088533c5300530d53413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c5337530353005320530353285302530453413a00f13a00c23a00c23a00aa5302533653025300530c5302530b5320530253205303532d53005327533a5300530e53413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c532253145337530353005320530253205314534253213a0088533c5300530f53413a0088531253413a0088531253295303530053423a00ad3a00fe3a00d53a00e43a00d43a00853a00fd3a00a83a00d85300537e53425301537c53225314533753035300532053025341530053205314534253213a00883a00a75341537f53735341537e537253225304536b533a530053005320530253205304536b53205301533a530053005320530353285302530453413a00ad3a00f83a00e83a00c35379533653025300530c5301530b5320530353285302530c53205303532d53005313533a530053005320530253205303532853025314532253045341537f537353413a00ee3a00a03a00983a0090537953715320530453413a00913a00df3a00e73a00ef53065371537253413a00e63a00a03a00983a009053795373532053045341530853715372536a53205307533a530053005320530253205303532853025314532253045341537f537353413a00833a00cb3a00f13a0087530253715320530453413a00fc3a00b43a008e3a00f8537d5371537253413a008f3a00cb3a00f13a008753025373532053045341530c53715372536a53205308533a530053005320530353285302531c53205303532d5300531b53415333537153205303532853025358532d53005300534153335371536a53205303532853025354532d53005300534153335371536a53205303532853025350532d5300530053225304532053045341537f5373534153335372536a536a5320530353285302534c532d53005300534153335371536a53205303532853025348532d53005300534153335371536a53205303532853025344532d53005300534153335371536a53205303532853025340532d53005300534153335371536a5320530353285302533c532d5300530053225304534153335372532053045341534c53735371536a53205303532853025338532d53005300534153335371536a53415301536a5322530453205303532853025334532d53005300532253065341534c537353205306537153225306537153205304532053065372536a53205303532853025330532d53005300534153335371536a532253045320530353285302532c532d5300530053225306534153335372532053065341534c5373537153225306537153205304532053065372536a53205303532853025328532d53005300534153335371536a53205303532853025320532d53005300534153335371536a533a530053005320530353285302530453413a00923a00ce3a00dd3a0089537e533653025300530c5300530b5300530b3a0088531353015309537f5323530053415340536a5322530553245300532053055322530353413a00fa3a00d43a009a3a00ed537b5336530253045320530353413a009453105328530253005322530253413a009853105328530253005322530453205304532053025320530453735341537f53735371534153015374536b536a5322530453413a00db3a00eb3a009f537e53725320530453413a00c93a00aa3a009f3a00b6537e53725322530253413a00da3a00e93a009a3a00ce53035371536c5320530253413a00a53a00963a00e53a00b1537c5371532053045341537f537353413a00923a00c13a00803a00c853015371536c536a5322530253413a00d03a00f43a00b73a00cf5307537353205302537153365302533c532053035320530353415304536a53365302530053035340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340532053035328530253045322530253413a00813a00833a00b53a00a1537e534c530453405320530253413a00b43a00803a00d63a008e537c534c530453405320530253413a00e73a00dc3a00803a00a15379534c530453405320530253413a00e13a00983a00c03a008753785346530d530f5320530253413a00d23a00c03a00cd3a00da53785346530d53055320530253413a00e13a00ed3a00e43a00f153785347530d53125320530553415310536b53225305532453005320530353285302530053413a009b3a00fa3a00ab3a008a5301533653025300530c5312530b5320530253413a00eb3a00853a00c13a00dc537a534c530453405320530253413a00e83a00dc3a00803a00a153795346530d53095320530253413a00eb3a00ff3a00d13a00c3537a5347530d53125320530353285302530053413a00b53a00803a00d63a008e537c533653025300530c5312530b5320530253413a00ec3a00853a00c13a00dc537a5346530d530a5320530253413a00fa3a00d43a009a3a00ed537b5347530d53115320530353285302530053413a009b3a00fa3a00ab3a008a530153413a00e13a00ed3a00e43a00f153785320530353285302533c53413a00bd3a008a3a00e73a00a5537a5349531b533653025300530c5311530b5320530253413a00ed3a00f53a00c73a00f1537c534c530453405320530253413a00b53a00803a00d63a008e537c5346530d530b5320530253413a00d13a00823a00f43a00bf537c5346530d53025320530253413a00bf3a00ed3a00b83a00d3537c5347530d531153413a00e453105328530253005321530253413a00e85310532853025300532153025320530353285302530053413a00b53a00803a00d63a008e537c533653025300530c5311530b5320530253413a00f23a00b83a00c93a00b0537d534c530453405320530253413a00ee3a00f53a00c73a00f1537c5346530d53105320530253413a00d23a00be3a00853a00ae537d5347530d53115320530353285302530053413a00d13a00823a00f43a00bf537c533653025300530c5311530b5320530253413a00f33a00b83a00c93a00b0537d5346530d53045320530253413a008c3a00b43a00893a00b8537d5347530d53105320530353285302530053413a00f33a00b83a00c93a00b0537d53413a00fd3a00943a00a43a0093530653413a00b4531053285302530053413a00b85310532853025300537253413a00bc3a00d73a00a03a00de5304536a53413a00cc3a00ee3a00da3a0088537e537353413a00a23a00d83a00e33a00a45379534b531b533653025300530c5310530b530253405320530253413a00a83a00da3a00f33a00ad5305534c530453405320530253413a009a3a00fa3a00ab3a008a5301534c530453405320530253413a00823a00833a00b53a00a1537e5346530d53075320530253413a00ae3a00d33a009d3a00dc537e5346530d53105320530253413a00d53a00973a00f83a00fb537e5347530d53125320530353285302530053413a00ec3a00853a00c13a00dc537a533653025300530c5312530b5320530253413a00a13a00d93a00863a00f35303534c530453405320530253413a009b3a00fa3a00ab3a008a53015346530d53025320530253413a00f13a00e23a00923a00dd53015347530d53125320530353285302530053413a00bf3a00ed3a00b83a00d3537c533653025300530c5312530b5320530253413a00a23a00d93a00863a00f353035346530d53035320530253413a00d33a00a53a00a23a009953045347530d53115320530353285302530053413a00aa3a00ce3a00e23a00d153065336530253005320530353205303532853025324533653025314530c5311530b5320530253413a00a93a00ce3a00e23a00d15306534c530453405320530253413a00f23a00ed3a00a23a00915306534c530453405320530253413a00823a00f73a00fe3a00b853055346530d530e5320530253413a00a93a00da3a00f33a00ad53055347530d531253205303532853025320532153005320530353415340536b5324530053205300530f530b5320530253413a00f33a00ed3a00a23a009153065346530d53095320530253413a00fd3a00943a00a43a009353065347530d53115320530353285302530053413a00f33a00b83a00c93a00b0537d533653025300530c5311530b5320530253413a00aa3a00ce3a00e23a00d153065346530d530b5320530253413a00c93a00993a00b93a00fc53065346530d53065320530253413a009f3a00c23a00ba3a00d153075347530d53105320530353285302530053413a00aa3a00ce3a00e23a00d1530653413a00823a00833a00b53a00a1537e53205303532d53005337531b533653025300532053035341537f533653025318532053035341530053365302531c5320530353415300533653025314530c5310530b53413a00a053105328530253005321530453413a009c5310532853025300532153025320530553415310536b532253055324530053205303532053055336530253385320530353285302530053413a00d23a00be3a00853a00ae537d53413a009b3a00fa3a00ab3a008a53015320530253205304536a5322530253413a009d3a00983a008f3a00ef530553725320530253413a00e23a00e73a00f03a0090537a5373537153413a00bf3a00f43a009e3a00ec5300536e532253025341531c53715341530153745320530253413a00a33a009f3a00dc3a00d953005373536b53413a00da3a00d03a00a63a00be537b534b531b533653025300530c530f530b5320530353285302530053413a00a23a00d93a00863a00f3530353413a00e13a00983a00c03a0087537853413a00a4531053285302530053413a00a85310532853025300536e53413a00e83a008b3a00c23a0099537c53725322530253413a00a33a00f03a00a13a00fb530253715341530153745320530253413a00dc3a008f3a00de3a0084537d5373536b53413a00843a00e03a00eb3a00aa5307536c53413a009d3a009e3a00eb3a00c5537d5349531b533653025300530c530e530b53205303532053015345533a530053375320530353285302530053413a00d23a00c03a00cd3a00da537853413a00e13a00983a00c03a0087537853413a00ac531053285302530053413a00b05310532853025300536c5322530253413a00923a00903a00815309537353413a00e93a00a33a00fc3a00d2537c53725320530253413a00883a00813a00c83a00d05300537353413a00963a00dc3a00833a00ad5303537253715322530253413a00ec3a00cb3a00ad3a00b9537e53725320530253413a00ec3a00cb3a00ad3a00b9537e5371536c532053025341537f537353413a00ec3a00cb3a00ad3a00b9537e53715320530253413a00933a00b43a00d23a00c653015371536c536a53413a00823a00d23a00c43a0097537a534b531b533653025300530c530d530b5320530353285302530053413a008c3a00b43a00893a00b8537d533653025300530c530c530b53413a00bc531053285302530053413a00c05310532853025300536e531a5320530353285302530053413a009f3a00c23a00ba3a00d15307533653025300530c530b530b5320530353205303532853025318533653025310532053035320530353285302531c53365302530c5320530353285302530053413a00ae3a00d33a009d3a00dc537e53413a00c93a00993a00b93a00fc530653413a00c45310532853025300532253025341537f537353413a00c33a00a73a00e63a00d2537b53715320530253413a00bc3a00d83a00993a00ad53045371537253413a00c85310532853025300532253025341537f537353413a00c33a00a73a00e63a00d2537b53715320530253413a00bc3a00d83a00993a00ad53045371537253735322530253413a00a13a00f43a008d3a00ba530653725320530253413a00a13a00f43a008d3a00ba53065371536c532053025341537f537353413a00a13a00f43a008d3a00ba530653715320530253413a00de3a008b3a00f23a00c553795371536c536a53413a00c43a009a3a00ef3a00db5306536b53225302532053025341537f537353413a00953a00ed3a00f93a008b53015372536a53413a00993a00ec3a00f73a00b253785346531b533653025300530c530a530b532053005320530353285302530c53225302536a532d5300530053215304532053035320530253415301537153205302534153015372536a5322530253365302532c5320530353205301532053025346533a5300532b5320530353413a00a03a00863a00e23a00ed537e5341530053205304532053035328530253105373532253065341537e5373532053065371531b532253045320530653415301537653225302536a53205302532053045371534153015374536b532253095341530153765322530453413a00a03a00863a00e23a00ed537e53415300532053065341537f53735322530a5341537d53725341537f5347531b5322530253715341537f5373532053045341537f5373532053025341537f537353715341537f537353715322530753415306537653225308532053065341531b53745341531f537553413a00e43a00a03a00dc3a00ed53015371532053065341531c53745341531f537553413a00b23a00903a00ee3a00f65300537153225304532053065341531d53745341531f537553413a00993a00883a00b7533b5371532253025371532053025320530453725341537f5373537253735322530253413a00fd3a00ae3a00df53445371532053025341537f537353413a00823a00903a00a0533b5371537253413a00c83a00c13a00b83a00db5303534153005320530a5341535f53725341537f5347531b532253025341537f537353413a00fd3a00ae3a00df534453715320530253413a00803a00c13a00a0531b537153725373532253025341537f5373537153205302532053085341537f53735371537253413a00903a00833a00f13a00b6530753415300532053095341537f53735341535f53725341537f5347531b537353413a00a03a00863a00e23a00ed537e53415300532053075341537f53735341535f53725341537f5347531b53735336530253305320530353285302530053413a00e83a00dc3a00803a00a1537953413a00c93a00993a00b93a00fc530653413a00cc531053285302530053413a00d05310532853025300536b53413a00e23a00973a00ac3a00e35305536a5322530253413a009a3a00c83a00813a00c8537b53735320530253413a009a3a00c83a00813a00c853035371534153015374536a53413a00b93a00bf3a008a3a008553065349531b533653025300530c5309530b5320530353285302530053413a00f33a00ed3a00a23a0091530653413a00823a00833a00b53a00a1537e53205303532d5300532b531b533653025300532053035320530353285302532c53365302531c5320530353205303532853025330533653025318530c5308530b5320530353285302530053413a00d53a00973a00f83a00fb537e53413a00ec3a00853a00c13a00dc537a53413a00d453105328530253005322530453413a00d85310532853025300532253025372532053025320530453735341537f5373537153413a00883a00b23a00f83a00945378537253413a00a53a00883a00b43a00a85302537353413a00d73a00a13a00e53a00df5300536b53413a00f03a00ec3a008c3a00c3537b534b531b533653025300530c5307530b53205303532053035328530253305341537f537353365302532453413a00dc5310532853025300531a53413a00e05310532853025300531a5320530353285302530053413a00f13a00e23a00923a00dd5301533653025300530c5306530b53413a00ec5310532853025300531a53413a00f05310532853025300531a5320530353285302530053413a00d33a00a53a00a23a00995304533653025300530c5305530b53205303532053035328530253145336530253085320530353285302530053413a00823a00f73a00fe3a00b8530553413a00ee3a00f53a00c73a00f1537c53413a00f4531053285302530053413a00f85310532853025300536e53413a00c53a00f73a00eb3a00ed5301536b5322530253413a00983a00ec3a00843a00be53015371532053025341537f537353413a00e73a00933a00fb3a00c1537e537153725341537f5373532253025320530253413a009c3a00b73a00c33a00ba53035371534153015374536b53413a00da3a00843a008153225347531b533653025300530c5304530b53413a008053115328530253005321530853413a00fc53105328530253005321530453205303532853025338532253025342530053375303530853205302534253005337530353005320530153205303532853025308532053035328530253385310530353205303534153105310530c5322530753365302532053205307532053035328530253385322530253295300530053375300530053205307532053025329530053085337530053085320530353285302530053413a00a93a00da3a00f33a00ad530553413a00823a00f73a00fe3a00b853055320530453205308536a53413a00e93a00a83a00d03a00905301536b5322530253413a00cb3a00a43a00983a00c05378537253413a00fb3a00be3a00da3a00cc537a53715320530253413a00fb3a00bf3a00df3a00dd537e5372536a53413a00a43a00cf3a009d3a00825303534b531b533653025300530c5303530b5320530353285302530053413a00a23a00d93a00863a00f35303533653025300530c5302530b5320530353285302530053413a00c93a00993a00b93a00fc5306533653025300530c5301530b532053035328530253385322530253425300533753035300532053025342530053375303530853205301532053035328530253085320530353285302533853105303534153105310530c53225304532053035328530253385322530253295300530053375300530053205304532053025329530053085337530053085320530353285302530053413a00823a00f73a00fe3a00b85305533653025300530c5300530b5300530b3a00a853175301530c537f5323530053413a00805301536b5322530553245300532053055322530353413a00c93a00e53a00a93a00c953025336530253085320530353413a0084531153285302530053413a00885311532853025300536e53413a00ed3a00db3a00805367537353413a00cd3a00b23a009c3a00945378536c53413a00ea3a00d53a00df3a00d55307536b53365302537c532053035320530353415308536a533653025304532053015341530353715321530a532053015341530453495321530b532053015341537c53725321530c5303534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340530253405302534053025340532053035328530253085322530253413a00aa3a009e3a00915333534c530453405320530253413a00b73a00d93a00b73a00b4537c534c530453405320530253413a00a93a009e3a00bb3a00b6537a534c530453405320530253413a00da3a00c33a00c53a00875379534c530453405320530253413a00f63a00a93a00ef3a00b553785346530d53075320530253413a00943a00863a00903a008453795347530d531753205303532053015345533a530053775320530353285302530453413a00f63a00a93a00ef3a00b55378533653025300530c5317530b5320530253413a00db3a00c33a00c53a008753795346530d53145320530253413a00953a00f73a00fe3a009a53795347530d53165320530353285302530453413a00b83a00d93a00b73a00b4537c53413a008a3a00da3a00c53a0082537d53205303532d53005377531b5336530253005320530353413a00c53a00bb3a00f23a00885378533653025328530c5316530b5320530253413a008e3a00e53a00bb3a00bb537b534c530453405320530253413a00aa3a009e3a00bb3a00b6537a5346530d53035320530253413a00ac3a00bd3a00ea3a008c537b5347530d53165320530353285302530453413a009c3a00d73a008b3a0080530453413a00c73a009d3a00cd3a00d1530153205303532d5300536f531b533653025300532053035341530053365302533c5320530353413a00c53a00bb3a00f23a00885378533653025338530c5316530b5320530253413a008f3a00e53a00bb3a00bb537b5346530d530d5320530253413a00ea3a00bb3a00a23a00d5537b5346530d53065320530253413a009c3a00f63a00ad3a00d6537b5347530d53155320530353285302530453413a00d73a00c33a00ef3a00d65301533653025300530c5315530b5320530253413a00b33a00f03a00a23a00d8537d534c530453405320530253413a00893a00da3a00c53a0082537d534c530453405320530253413a00b83a00d93a00b73a00b4537c5346530d53105320530253413a00c63a00b83a00813a00ea537c5347530d5316532053035320530353285302532c533653025318532053035320530353285302533053365302531453205303532053035328530253345336530253105320530353285302530453413a00db3a00c33a00c53a0087537953413a00923a00f13a009f3a00e9530453413a00dc531153285302530053413a00e05311532853025300536b53413a00873a00c23a00cb3a00a25305536b53413a00e63a00a83a00863a00965307536e5322530253413a00f23a00d53a00913a00a65303537253205302534153025371536c532053025341537f537353413a00f23a00d53a00913a00a65303537153205302534153015371536c536a53413a00de3a00f33a009d3a00b65302534b531b533653025300530c5316530b5320530253413a008a3a00da3a00c53a0082537d5346530d53075320530253413a00d93a00953a00d63a0096537d5347530d53155320530553415310536b53225305532453005320530353285302530453413a00aa3a009e3a00bb3a00b6537a533653025300530c5315530b5320530253413a00f63a009f3a00cc3a00de537e534c530453405320530253413a00b43a00f03a00a23a00d8537d5346530d53035320530253413a008b3a00d33a00fe3a0087537e5347530d531553413a00f853115328530253005321530753413a00f45311532853025300532153045320530353285302537853225302534253005337530353085320530253425300533753035300532053015320530353285302530c532053035328530253785310530353205303534153105310530c5322530653365302535053205306532053035328530253785322530253295300530053375300530053205306532053025329530053085337530053085320530353285302530453413a008a3a00843a00f33a00d7530053413a009e3a008b3a009b3a00a6530353205304532053075372532253025320530253413a00d93a00bd3a00f63a009953045371534153015374536b53413a00be3a00cb3a00a63a008f537b536c53413a00fb3a00ae3a009a3a00df53795347531b533653025300530c5315530b5320530253413a00f73a009f3a00cc3a00de537e5346530d53105320530253413a00f53a00d73a00e03a009f537f5346530d53035320530253413a00953a008c3a008053605347530d53145320530353285302530453413a00873a00993a00913a00a55304533653025300530c5314530b530253405320530253413a009b3a00d73a008b3a00805304534c530453405320530253413a00c83a00e53a00a93a00c95302534c530453405320530253413a00d63a00c33a00ef3a00d65301534c530453405320530253413a00ab3a009e3a009153335346530d530a5320530253413a00c73a009d3a00cd3a00d153015346530d530b5320530253413a008a3a00843a00f33a00d753005347530d531753205303532853025350532153005320530353413a00805301536a5324530053205300530f530b5320530253413a00d73a00c33a00ef3a00d653015346530d530b5320530253413a00c93a00b63a009b3a00f253015347530d53165320530353285302530453413a00953a00f73a00fe3a009a537953413a00f73a009f3a00cc3a00de537e53413a00a4531153285302530053413a00a85311532853025300537253413a00e13a00bd3a008f3a00af537b537253413a00aa3a00e13a00df5330536b53413a00ed3a00ab3a00a83a00f1537d537353413a00c73a00b93a00933a00c053055349531b533653025300530c5316530b5320530253413a009d3a008b3a009b3a00a65303534c530453405320530253413a00c93a00e53a00a93a00c953025346530d53025320530253413a00b23a00bf3a00913a009453035347530d53165320530353285302530453413a00f43a00e03a00a93a00c7530353413a00ab3a009e3a0091533353413a00ac531153285302530053413a00b05311532853025300537253413a00da3a00f03a00de3a00875303537153413a00f13a00923a00b63a00f95302536c53413a00e63a00863a00913a009f5302537153413a00a83a00c63a00f73a00e95302534b531b533653025300530c5316530b5320530253413a009e3a008b3a009b3a00a653035346530d53145320530253413a00f43a00e03a00a93a00c753035347530d53155320530353285302530453413a00ab3a009e3a00915333533653025300530c5315530b5320530253413a00833a00d13a00e83a00ec5304534c530453405320530253413a00bb3a00a23a00bc3a00cb5304534c530453405320530253413a009c3a00d73a008b3a008053045346530d530d5320530253413a00873a00993a00913a00a553045347530d53165320530353285302530453413a00e33a00e93a00dd3a008153055336530253005320530353413a00c53a00bb3a00f23a00885378533653025348532053035341530053365302534c5320530353415300533653025344530c5316530b5320530253413a00bc3a00a23a00bc3a00cb53045346530d53105320530253413a00923a00f13a009f3a00e953045347530d5315532053005320530353285302531053225302536a532d5300530053215304532053035320530253415301536a53365302535c532053035320530353285302531853415301536a532253025336530253585320530353205302532053035328530253705346533a5300535753205303532053045320530353285302531453735322530253413a00933a00833a0080530853725320530253413a00933a00833a008053085371536c5320530253413a00ec3a00fc3a00ff53775371532053025341537f537353413a00933a00833a008053085371536c536a5336530253605320530353285302530453413a00d93a00d03a00813a0081530753413a00db3a00c33a00c53a0087537953413a00e453115328530253005322530253413a00e853115328530253005322530453205304532053025320530453735341537f53735371534153015374536b536a5322530253413a00bb3a00b63a00d53a008753025373532053025371532253025341537f537353413a00c03a00c03a00a0531b537253413a00f83a00c83a00a13a00bb537d53715320530253413a00833a00a73a00c43a00c053025371537253413a00fb3a00d63a00c23a00d0537c537353413a00b93a00f83a009e3a00d35303534b531b533653025300530c5315530b5320530253413a00e23a00e93a00dd3a00815305534c530453405320530253413a00843a00d13a00e83a00ec53045346530d530e5320530253413a00cb3a00c63a00b33a00f353045347530d53155320530353285302530453413a00ac3a00bd3a00ea3a008c537b533653025300530c5315530b5320530253413a00e33a00e93a00dd3a008153055346530d530a5320530253413a00c53a00d33a00de3a00af53065346530d53115320530253413a00d93a00d03a00813a008153075347530d53145320530353285302530453413a00b83a00d93a00b73a00b4537c53413a00c63a00b83a00813a00ea537c53205303532d53005357531b533653025300532053035320530353285302535c533653025334532053035320530353285302536053225302533653025330532053035320530353285302535853365302532c5320530353205302533653025328530c5314530b5320530353285302530453413a00d93a00953a00d63a0096537d53413a00aa3a009e3a00bb3a00b6537a5320530353285302537c53413a00f63a00ce3a00a83a00f253005346531b533653025300530c5313530b53413a00905311532853025300531a53413a008c5311532853025300531a5320530553415310536b532253055324530053205303532053055336530253785320530353285302530453413a00b43a00f03a00a23a00d8537d533653025300530c5312530b5320530353285302530453413a00f53a00d73a00e03a009f537f533653025300530c5311530b53413a00985311532853025300531a53413a00945311532853025300531a5320530353285302530453413a00943a00863a00903a00845379533653025300530c5310530b5320530353285302530453413a00ea3a00bb3a00a23a00d5537b533653025300530c530f530b5320530353285302530453413a00f73a009f3a00cc3a00de537e53413a00c93a00b63a009b3a00f2530153413a009c531153285302530053413a00a05311532853025300536e53413a00a53a00d53a00b03a00a85304536a53413a00b53a00e03a00f33a00e65303536e532253025320530253413a00d13a00ee3a00cc3a008e537e5373536a53205302534153065371536b53413a00a23a00873a00f63a00d353785346531b533653025300530c530e530b532053035320530a5336530253705320530353285302530453413a00b23a00bf3a00913a00945303533653025300530c530d530b532053035320530b533a5300536f5320530353285302530453413a00f43a00e03a00a93a00c7530353413a00cb3a00c63a00b33a00f3530453413a00b4531153285302530053413a00b85311532853025300536a53413a00d53a00b63a00b83a00fb537a534f53413a00d13a00c93a00cb3a009f5304536c5322530253413a009e3a00e73a00e03a00d95301537353205302537153413a00843a00e33a00ad3a008b537c5346531b533653025300530c530c530b5320530353285302530453413a009c3a00f63a00ad3a00d6537b53413a00d73a00c33a00ef3a00d6530153413a00bc53115328530253005341537f537353413a00c053115328530253005341537f537353725322530253413a00973a00cb3a00be3a00cb53015371532053025341537f537353413a00e83a00b43a00c13a00b4537e5371537253413a00d43a00b53a00ef3a00d75304537353413a00f43a00ec3a00953a00d05300536b53413a008e3a00bf3a00a83a00ce537d534b531b533653025300530c530b530b532053035320530c5320530153415303537353715336530253685320530353285302530453413a009c3a00f63a00ad3a00d6537b53413a00953a008c3a0080536053413a00c4531153285302530053413a00c85311532853025300536e53413a00cc3a00b83a00ea3a00965304536a5322530253413a00db3a00e93a00823a00a7530553725320530253413a00db3a00e93a00823a00a753055371536c5320530253413a00a43a00963a00fd3a00d8537a5371532053025341537f537353413a00db3a00e93a00823a00a753055371536c536a532253025341537f537353413a00ab3a00a63a008e3a0086537b53715320530253413a00d43a00d93a00f13a00f953045371537253413a00e63a00863a00c93a00a4537c534b531b533653025300530c530a530b532053005320530353285302534c53225302534153035372536a532d53005300532153085320530053205302534153025372536a532d530053005321530d5320530053205302534153015372536a532d53005300532153095320530053205302536a532d530053005321530653205303532853025348532153075320530353285302530453413a009c3a00d73a008b3a0080530453413a00e33a00e93a00dd3a008153055320530353285302534453415304536a53225304532053035328530253685346531b533653025300532053035320530253415304537153205302534153045372536a5322530253365302534c5320530353205304533653025344532053035320530253365302533c532053035320530d532053065320530753735322530253413a00933a00833a0080530853725320530253413a00933a00833a008053085371536c532053025341537f537353413a00933a00833a0080530853715320530253413a00ec3a00fc3a00ff53775371536c536a532253025341537f537353413a009b3a00ea3a00893a009d537c53715320530253413a00e43a00953a00f63a00e2530353715372532053095341537f537353413a009b3a00ea3a00893a009d537c53715320530953413a00e453015371537253735322530253413a00933a00833a0080530853725320530253413a00933a00833a008053085371536c532053025341537f537353413a00933a00833a0080530853715320530253413a00ec3a00fc3a00ff53775371536c536a537353413a00933a00833a00805308536c532253025320530853205308532053025320530853735341537f53735371534153015374536b536a5322530253413a00933a00833a0080530853725320530253413a00933a00833a008053085371536c5320530253413a00ec3a00fc3a00ff53775371532053025341537f537353413a00933a00833a008053085371536c536a5322530253365302534853205303532053025336530253405320530353205302533653025338530c5309530b5320530353205303532853025338533653025324532053035320530353285302533c533653025320532053035320530353285302534053365302531c5320530353285302530453413a00c53a00d33a00de3a00af530653413a008f3a00e53a00bb3a00bb537b5341530053413a00cc531153285302530053413a00d05311532853025300536e53413a00b73a00b63a00a93a00aa537a537353413a00ca3a00e33a00df3a00f85379534f5341537f537353413a00f33a00813a00e23a00ad53075371536b53413a00bf3a00973a00a43a008a53055349531b533653025300530c5308530b53205303532053035328530253705345533a530053675320530353285302530453413a008f3a00e53a00bb3a00bb537b53413a00843a00d13a00e83a00ec530453413a00d4531153285302530053413a00d85311532853025300536e532253025320530253413a00a43a00a13a00cf3a00dd53075371534153015374536b53413a00a33a00cd3a00c33a00e353025346531b533653025300530c5307530b5320530353285302530453413a00b83a00d93a00b73a00b4537c53413a00c63a00b83a00813a00ea537c53205303532d53005367531b533653025300532053035341530053365302532c53205303532053035328530253205336530253345320530353205303532853025324533653025330532053035320530353285302531c533653025328530c5306530b532053035320530353285302532853365302530c5320530353285302530453413a008b3a00d33a00fe3a0087537e53413a009e3a008b3a009b3a00a6530353413a00ec531153285302530053413a00f05311532853025300536a53413a00843a009f3a00db3a00eb5301536e53413a00d43a00b53a00de3a00c15378537253413a00d53a00b53a00de3a00c15378537153413a00e43a00bd3a00c83a00fb53795349531b533653025300530c5305530b5320530353285302530453413a00943a00863a00903a00845379533653025300530c5304530b5320530353285302530453413a00c93a00b63a009b3a00f25301533653025300530c5303530b5320530353285302530453413a008f3a00e53a00bb3a00bb537b533653025300530c5302530b5320530353285302530453413a00923a00f13a009f3a00e95304533653025300530c5301530b5320530353285302537853225302534253005337530353005320530253425300533753035308532053015320530353285302530c5320530353285302537853105303534153105310530c53225304532053035328530253785322530253295300530053375300530053205304532053025329530053085337530053085320530353285302530453413a008b3a00d33a00fe3a0087537e533653025300530c5300530b5300530b3a00e2530353015302537f5320530053205302536a5321530353025340530253405302534053205300532053015373534153035371534553045340532053005341530353715345530d53015320530253415300534c530d53015320530053215302530353405320530253205301532d53005300533a530053005320530153415301536a532153015320530253415301536a532253025341530353715345530d530353205302532053035349530d5300530b530c5302530b5302534053205303534153045349530d53005320530353415304536b53225304532053005349530d53005320530053215302530353405320530253205301532d53005300533a530053005320530253205301532d53005301533a530053015320530253205301532d53005302533a530053025320530253205301532d53005303533a530053035320530153415304536a532153015320530253415304536a5322530253205304534d530d5300530b530c5303530b5320530053215302530c5302530b5320530053215302530b53025340532053035341537c53715322530053413a00c053005349530d5300532053025320530053415340536a53225304534b530d530053035340532053025320530153285302530053365302530053205302532053015328530253045336530253045320530253205301532853025308533653025308532053025320530153285302530c53365302530c532053025320530153285302531053365302531053205302532053015328530253145336530253145320530253205301532853025318533653025318532053025320530153285302531c53365302531c532053025320530153285302532053365302532053205302532053015328530253245336530253245320530253205301532853025328533653025328532053025320530153285302532c53365302532c532053025320530153285302533053365302533053205302532053015328530253345336530253345320530253205301532853025338533653025338532053025320530153285302533c53365302533c5320530153415340536b532153015320530253415340536b5322530253205304534d530d5300530b530b5320530053205302534d530d53005303534053205302532053015328530253005336530253005320530153415304536a532153015320530253415304536a53225302532053005349530d5300530b530b5320530253205303534953045340530353405320530253205301532d53005300533a530053005320530153415301536a532153015320530253415301536a53225302532053035347530d5300530b530b530b3a00d4530253015302537f5302534053205300532053015346530d5300532053015320530053205302536a53225304536b5341530053205302534153015374536b534d5304534053205300532053015320530253105306530f530b53205300532053015373534153035371532153035302534053025340532053005320530153495304534053205303530d5302532053005341530353715345530d530153035340532053025345530d53045320530053205301532d53005300533a530053005320530153415301536a532153015320530253415301536b532153025320530053415301536a53225300534153035371530d5300530b530c5301530b5302534053205303530d5300532053045341530353715304534053035340532053025345530d5305532053005320530253415301536b53225302536a532253035320530153205302536a532d53005300533a5300530053205303534153035371530d5300530b530b5320530253415303534d530d530053035340532053005320530253415304536b53225302536a5320530153205302536a5328530253005336530253005320530253415303534b530d5300530b530b532053025345530d530253035340532053005320530253415301536b53225302536a5320530153205302536a532d53005300533a5300530053205302530d5300530b530c5302530b5320530253415303534d530d53005303534053205300532053015328530253005336530253005320530153415304536a532153015320530053415304536a532153005320530253415304536b5322530253415303534b530d5300530b530b532053025345530d5300530353405320530053205301532d53005300533a530053005320530053415301536a532153005320530153415301536a532153015320530253415301536b53225302530d5300530b530b530b3a00f0530253025302537f5301537e53025340532053025345530d53005320530053205301533a530053005320530053205302536a5322530353415301536b53205301533a5300530053205302534153035349530d53005320530053205301533a530053025320530053205301533a530053015320530353415303536b53205301533a530053005320530353415302536b53205301533a5300530053205302534153075349530d53005320530053205301533a530053035320530353415304536b53205301533a5300530053205302534153095349530d5300532053005341530053205300536b53415303537153225304536a532253035320530153413a00ff5301537153413a00813a00823a00845308536c53225300533653025300532053035320530253205304536b5341537c537153225302536a5322530153415304536b5320530053365302530053205302534153095349530d5300532053035320530053365302530853205303532053005336530253045320530153415308536b53205300533653025300532053015341530c536b5320530053365302530053205302534153195349530d5300532053035320530053365302531853205303532053005336530253145320530353205300533653025310532053035320530053365302530c5320530153415310536b532053005336530253005320530153415314536b532053005336530253005320530153415318536b53205300533653025300532053015341531c536b53205300533653025300532053025320530353415304537153415318537253225301536b53225302534153205349530d5300532053003a00ad53423a00813a00803a00803a00805310537e532153055320530153205303536a532153015303534053205301532053055337530353185320530153205305533753035310532053015320530553375303530853205301532053055337530353005320530153415320536a532153015320530253415320536b532253025341531f534b530d5300530b530b530b536953015303537f530253405320530053225301534153035371530453405303534053205301532d530053005345530d53025320530153415301536a53225301534153035371530d5300530b530b53035340532053015322530253415304536a5321530153205302532853025300532253035341537f53735320530353413a00813a00823a00845308536b537153413a00803a00813a00823a0084537853715345530d5300530b53035340532053025322530153415301536a5321530253205301532d53005300530d5300530b530b5320530153205300536b530b534753015301537f532053005310530953205300536a5321530053025340532053025345530d53005303534053205301532d53005300532253035345530d53015320530053205303533a530053005320530053415301536a532153005320530153415301536a532153015320530253415301536b53225302530d5300530b530b5320530053415300533a53005300530b5305530053413a00905312530b3a009553285301530b537f5323530053415310536b5322530b532453005302534053025340530253405302534053025340530253405302534053025340530253405320530053413a00f45301534d5304534053413a009453125328530253005322530653415310532053005341530b536a534153785371532053005341530b5349531b53225305534153035376532253005376532253015341530353715304534053025340532053015341537f537353415301537153205300536a532253025341530353745322530153413a00bc5312536a532253005320530153413a00c45312536a532853025300532253015328530253085322530453465304534053413a00945312532053065341537e5320530253775371533653025300530c5301530b532053045320530053365302530c5320530053205304533653025308530b5320530153415308536a532153005320530153205302534153035374532253025341530353725336530253045320530153205302536a5322530153205301532853025304534153015372533653025304530c530a530b5320530553413a009c531253285302530053225307534d530d530153205301530453405302534053415302532053005374532253025341530053205302536b5372532053015320530053745371532253005341530053205300536b53715368532253015341530353745322530053413a00bc5312536a532253025320530053413a00c45312536a532853025300532253005328530253085322530453465304534053413a00945312532053065341537e532053015377537153225306533653025300530c5301530b532053045320530253365302530c5320530253205304533653025308530b53205300532053055341530353725336530253045320530053205305536a53225308532053015341530353745322530153205305536b532253045341530153725336530253045320530053205301536a5320530453365302530053205307530453405320530753415378537153413a00bc5312536a5321530153413a00a85312532853025300532153025302537f532053065341530153205307534153035376537453225303537153455304534053413a009453125320530353205306537253365302530053205301530c5301530b53205301532853025308530b532153035320530153205302533653025308532053035320530253365302530c532053025320530153365302530c5320530253205303533653025308530b5320530053415308536a5321530053413a00a853125320530853365302530053413a009c531253205304533653025300530c530a530b53413a009853125328530253005322530a5345530d53015320530a534153005320530a536b5371536853415302537453413a00c45314536a5328530253005322530253285302530453415378537153205305536b5321530353205302532153015303534053025340532053015328530253105322530053455304534053205301532853025314532253005345530d5301530b5320530053285302530453415378537153205305536b53225301532053035320530153205303534953225301531b53215303532053005320530253205301531b532153025320530053215301530c5301530b530b5320530253285302531853215309532053025320530253285302530c5322530453475304534053413a00a45312532853025300531a53205302532853025308532253005320530453365302530c5320530453205300533653025308530c5309530b5320530253415314536a532253015328530253005322530053455304534053205302532853025310532253005345530d53035320530253415310536a53215301530b530353405320530153215308532053005322530453415314536a5322530153285302530053225300530d53005320530453415310536a532153015320530453285302531053225300530d5300530b5320530853415300533653025300530c5308530b5341537f532153055320530053413a00bf537f534b530d5300532053005341530b536a532253005341537853715321530553413a00985312532853025300532253085345530d53005341530053205305536b532153035302534053025340530253405302537f534153005320530553413a008053025349530d5300531a5341531f5320530553413a00ff3a00ff3a00ff5307534b530d5300531a532053055341532653205300534153085376536753225300536b537653415301537153205300534153015374536b5341533e536a530b5322530753415302537453413a00c45314536a532853025300532253015345530453405341530053215300530c5301530b5341530053215300532053055341531953205307534153015376536b53415300532053075341531f5347531b53745321530253035340530253405320530153285302530453415378537153205305536b5322530653205303534f530d530053205301532153045320530653225303530d530053415300532153035320530153215300530c5303530b5320530053205301532853025314532253065320530653205301532053025341531d5376534153045371536a532853025310532253015346531b5320530053205306531b53215300532053025341530153745321530253205301530d5300530b530b53205300532053045372534553045340534153005321530453415302532053075374532253005341530053205300536b5372532053085371532253005345530d5303532053005341530053205300536b5371536853415302537453413a00c45314536a53285302530053215300530b532053005345530d5301530b530353405320530053285302530453415378537153205305536b5322530253205303534953215301532053025320530353205301531b53215303532053005320530453205301531b5321530453205300532853025310532253015304537f53205301530553205300532853025314530b53225300530d5300530b530b532053045345530d53005320530353413a009c531253285302530053205305536b534f530d53005320530453285302531853215307532053045320530453285302530c5322530253475304534053413a00a45312532853025300531a53205304532853025308532253005320530253365302530c5320530253205300533653025308530c5307530b5320530453415314536a532253015328530253005322530053455304534053205304532853025310532253005345530d53035320530453415310536a53215301530b530353405320530153215306532053005322530253415314536a5322530153285302530053225300530d53005320530253415310536a532153015320530253285302531053225300530d5300530b5320530653415300533653025300530c5306530b5320530553413a009c531253285302530053225304534d5304534053413a00a8531253285302530053215300530253405320530453205305536b5322530153415310534f530453405320530053205305536a53225302532053015341530153725336530253045320530053205304536a532053015336530253005320530053205305534153035372533653025304530c5301530b53205300532053045341530353725336530253045320530053205304536a532253015320530153285302530453415301537253365302530453415300532153025341530053215301530b53413a009c53125320530153365302530053413a00a85312532053025336530253005320530053415308536a53215300530c5308530b5320530553413a00a053125328530253005322530253495304534053413a00a053125320530253205305536b5322530153365302530053413a00ac531253413a00ac53125328530253005322530053205305536a53225302533653025300532053025320530153415301537253365302530453205300532053055341530353725336530253045320530053415308536a53215300530c5308530b5341530053215300532053055341532f536a532253035302537f53413a00ec53155328530253005304534053413a00f45315532853025300530c5301530b53413a00f853155342537f53375302530053413a00f0531553423a00803a00a03a00803a00803a00803a0080530453375302530053413a00ec53155320530b5341530c536a53415370537153413a00d83a00aa3a00d53a00aa5305537353365302530053413a008053165341530053365302530053413a00d053155341530053365302530053413a00805320530b53225301536a532253065341530053205301536b5322530853715322530153205305534d530d530753413a00cc5315532853025300532253045304534053413a00c453155328530253005322530753205301536a5322530953205307534d530d530853205304532053095349530d5308530b5302534053413a00d05315532d530053005341530453715345530453405302534053025340530253405302534053413a00ac5312532853025300532253045304534053413a00d453155321530053035340532053045320530053285302530053225307534f530453405320530753205300532853025304536a53205304534b530d5303530b5320530053285302530853225300530d5300530b530b534153005310530e532253025341537f5346530d5303532053015321530653413a00f053155328530253005322530053415301536b53225304532053025371530453405320530153205302536b5320530253205304536a5341530053205300536b5371536a53215306530b5320530553205306534f530d530353413a00cc5315532853025300532253005304534053413a00c453155328530253005322530453205306536a5322530853205304534d530d530453205300532053085349530d5304530b532053065310530e53225300532053025347530d5301530c5305530b5320530653205302536b532053085371532253065310530e532253025320530053285302530053205300532853025304536a5346530d53015320530253215300530b532053005341537f5346530d5301532053065320530553415330536a534f530453405320530053215302530c5304530b53413a00f45315532853025300532253025320530353205306536b536a5341530053205302536b5371532253025310530e5341537f5346530d53015320530253205306536a532153065320530053215302530c5303530b532053025341537f5347530d5302530b53413a00d0531553413a00d05315532853025300534153045372533653025300530b532053015310530e53215302534153005310530e53215300532053025341537f5346530d5305532053005341537f5346530d53055320530053205302534d530d53055320530053205302536b532253065320530553415328536a534d530d5305530b53413a00c4531553413a00c4531553285302530053205306536a5322530053365302530053413a00c853155328530253005320530053495304534053413a00c8531553205300533653025300530b5302534053413a00ac5312532853025300532253035304534053413a00d4531553215300530353405320530253205300532853025300532253015320530053285302530453225304536a5346530d53025320530053285302530853225300530d5300530b530c5304530b53413a00a4531253285302530053225300534153005320530053205302534d531b53455304534053413a00a4531253205302533653025300530b534153005321530053413a00d853155320530653365302530053413a00d453155320530253365302530053413a00b453125341537f53365302530053413a00b8531253413a00ec531553285302530053365302530053413a00e053155341530053365302530053035340532053005341530353745322530153413a00c45312536a5320530153413a00bc5312536a532253045336530253005320530153413a00c85312536a532053045336530253005320530053415301536a53225300534153205347530d5300530b53413a00a053125320530653415328536b532253005341537853205302536b534153075371534153005320530253415308536a534153075371531b53225301536b5322530453365302530053413a00ac53125320530153205302536a5322530153365302530053205301532053045341530153725336530253045320530053205302536a5341532853365302530453413a00b0531253413a00fc5315532853025300533653025300530c5304530b53205300532d5300530c534153085371530d53025320530153205303534b530d53025320530253205303534d530d5302532053005320530453205306536a53365302530453413a00ac5312532053035341537853205303536b534153075371534153005320530353415308536a534153075371531b53225300536a5322530153365302530053413a00a0531253413a00a0531253285302530053205306536a5322530253205300536b5322530053365302530053205301532053005341530153725336530253045320530253205303536a5341532853365302530453413a00b0531253413a00fc5315532853025300533653025300530c5303530b5341530053215304530c5305530b5341530053215302530c5303530b53413a00a4531253285302530053205302534b5304534053413a00a4531253205302533653025300530b5320530253205306536a5321530153413a00d45315532153005302534053025340530253405302534053025340530253405303534053205301532053005328530253005347530453405320530053285302530853225300530d5301530c5302530b530b53205300532d5300530c5341530853715345530d5301530b53413a00d453155321530053035340532053035320530053285302530053225301534f530453405320530153205300532853025304536a5322530453205303534b530d5303530b5320530053285302530853215300530c5300530b5300530b5320530053205302533653025300532053005320530053285302530453205306536a533653025304532053025341537853205302536b534153075371534153005320530253415308536a534153075371531b536a5322530753205305534153035372533653025304532053015341537853205301536b534153075371534153005320530153415308536a534153075371531b536a532253065320530553205307536a53225305536b53215300532053035320530653465304534053413a00ac53125320530553365302530053413a00a0531253413a00a0531253285302530053205300536a532253005336530253005320530553205300534153015372533653025304530c5303530b53413a00a853125328530253005320530653465304534053413a00a853125320530553365302530053413a009c531253413a009c531253285302530053205300536a5322530053365302530053205305532053005341530153725336530253045320530053205305536a53205300533653025300530c5303530b5320530653285302530453225303534153035371534153015346530453405320530353415378537153215309530253405320530353413a00ff5301534d530453405320530653285302530c53225301532053065328530253085322530253465304534053413a0094531253413a009453125328530253005341537e5320530353415303537653775371533653025300530c5302530b532053025320530153365302530c5320530153205302533653025308530c5301530b532053065328530253185321530853025340532053065320530653285302530c5322530253475304534053205306532853025308532253015320530253365302530c5320530253205301533653025308530c5301530b530253405320530653415314536a5322530353285302530053225301530d53005320530653415310536a5322530353285302530053225301530d53005341530053215302530c5301530b530353405320530353215304532053015322530253415314536a5322530353285302530053225301530d53005320530253415310536a532153035320530253285302531053225301530d5300530b5320530453415300533653025300530b532053085345530d5300530253405320530653285302531c5322530153415302537453413a00c45314536a5322530453285302530053205306534653045340532053045320530253365302530053205302530d530153413a0098531253413a009853125328530253005341537e5320530153775371533653025300530c5302530b53205308534153105341531453205308532853025310532053065346531b536a53205302533653025300532053025345530d5301530b532053025320530853365302531853205306532853025310532253015304534053205302532053015336530253105320530153205302533653025318530b53205306532853025314532253015345530d530053205302532053015336530253145320530153205302533653025318530b5320530653205309536a53225306532853025304532153035320530053205309536a53215300530b53205306532053035341537e537153365302530453205305532053005341530153725336530253045320530053205305536a532053005336530253005320530053413a00ff5301534d530453405320530053415378537153413a00bc5312536a532153015302537f53413a00945312532853025300532253025341530153205300534153035376537453225300537153455304534053413a009453125320530053205302537253365302530053205301530c5301530b53205301532853025308530b532153005320530153205305533653025308532053005320530553365302530c532053055320530153365302530c5320530553205300533653025308530c5303530b5341531f532153035320530053413a00ff3a00ff3a00ff5307534d53045340532053005341532653205300534153085376536753225301536b537653415301537153205301534153015374536b5341533e536a53215303530b532053055320530353365302531c53205305534253005337530253105320530353415302537453413a00c45314536a532153015302534053413a00985312532853025300532253025341530153205303537453225304537153455304534053413a00985312532053025320530453725336530253005320530153205305533653025300530c5301530b532053005341531953205303534153015376536b53415300532053035341531f5347531b5374532153035320530153285302530053215302530353405320530253225301532853025304534153785371532053005346530d5303532053035341531d53765321530253205303534153015374532153035320530153205302534153045371536a5322530453285302531053225302530d5300530b5320530453205305533653025310530b5320530553205301533653025318532053055320530553365302530c5320530553205305533653025308530c5302530b53413a00a053125320530653415328536b532253005341537853205302536b534153075371534153005320530253415308536a534153075371531b53225301536b5322530853365302530053413a00ac53125320530153205302536a5322530153365302530053205301532053085341530153725336530253045320530053205302536a5341532853365302530453413a00b0531253413a00fc531553285302530053365302530053205303532053045341532753205304536b534153075371534153005320530453415327536b534153075371531b536a5341532f536b53225300532053005320530353415310536a5349531b532253015341531b5336530253045320530153413a00dc53155329530253005337530253105320530153413a00d4531553295302530053375302530853413a00dc53155320530153415308536a53365302530053413a00d853155320530653365302530053413a00d453155320530253365302530053413a00e05315534153005336530253005320530153415318536a532153005303534053205300534153075336530253045320530053415308536a532153025320530053415304536a5321530053205302532053045349530d5300530b53205301532053035346530d530353205301532053015328530253045341537e5371533653025304532053035320530153205303536b5322530253415301537253365302530453205301532053025336530253005320530253413a00ff5301534d530453405320530253415378537153413a00bc5312536a532153005302537f53413a00945312532853025300532253015341530153205302534153035376537453225302537153455304534053413a009453125320530153205302537253365302530053205300530c5301530b53205300532853025308530b532153015320530053205303533653025308532053015320530353365302530c532053035320530053365302530c5320530353205301533653025308530c5304530b5341531f532153005320530253413a00ff3a00ff3a00ff5307534d53045340532053025341532653205302534153085376536753225300536b537653415301537153205300534153015374536b5341533e536a53215300530b532053035320530053365302531c53205303534253005337530253105320530053415302537453413a00c45314536a532153015302534053413a00985312532853025300532253045341530153205300537453225306537153455304534053413a00985312532053045320530653725336530253005320530153205303533653025300530c5301530b532053025341531953205300534153015376536b53415300532053005341531f5347531b5374532153005320530153285302530053215304530353405320530453225301532853025304534153785371532053025346530d5304532053005341531d53765321530453205300534153015374532153005320530153205304534153045371536a5322530653285302531053225304530d5300530b5320530653205303533653025310530b5320530353205301533653025318532053035320530353365302530c5320530353205303533653025308530c5303530b53205301532853025308532253005320530553365302530c53205301532053055336530253085320530553415300533653025318532053055320530153365302530c5320530553205300533653025308530b5320530753415308536a53215300530c5305530b53205301532853025308532253005320530353365302530c53205301532053035336530253085320530353415300533653025318532053035320530153365302530c5320530353205300533653025308530b53413a00a053125328530253005322530053205305534d530d530053413a00a053125320530053205305536b5322530153365302530053413a00ac531253413a00ac53125328530253005322530053205305536a53225302533653025300532053025320530153415301537253365302530453205300532053055341530353725336530253045320530053415308536a53215300530c5303530b53413a00905312534153305336530253005341530053215300530c5302530b53025340532053075345530d5300530253405320530453285302531c5322530053415302537453413a00c45314536a5322530153285302530053205304534653045340532053015320530253365302530053205302530d530153413a00985312532053085341537e532053005377537153225308533653025300530c5302530b53205307534153105341531453205307532853025310532053045346531b536a53205302533653025300532053025345530d5301530b532053025320530753365302531853205304532853025310532253005304534053205302532053005336530253105320530053205302533653025318530b53205304532853025314532253005345530d530053205302532053005336530253145320530053205302533653025318530b53025340532053035341530f534d53045340532053045320530353205305536a532253005341530353725336530253045320530053205304536a5322530053205300532853025304534153015372533653025304530c5301530b53205304532053055341530353725336530253045320530453205305536a53225302532053035341530153725336530253045320530253205303536a532053035336530253005320530353413a00ff5301534d530453405320530353415378537153413a00bc5312536a532153005302537f53413a00945312532853025300532253015341530153205303534153035376537453225303537153455304534053413a009453125320530153205303537253365302530053205300530c5301530b53205300532853025308530b532153015320530053205302533653025308532053015320530253365302530c532053025320530053365302530c5320530253205301533653025308530c5301530b5341531f532153005320530353413a00ff3a00ff3a00ff5307534d53045340532053035341532653205303534153085376536753225300536b537653415301537153205300534153015374536b5341533e536a53215300530b532053025320530053365302531c53205302534253005337530253105320530053415302537453413a00c45314536a532153015302534053025340532053085341530153205300537453225306537153455304534053413a00985312532053065320530853725336530253005320530153205302533653025300530c5301530b532053035341531953205300534153015376536b53415300532053005341531f5347531b5374532153005320530153285302530053215305530353405320530553225301532853025304534153785371532053035346530d5302532053005341531d53765321530653205300534153015374532153005320530153205306534153045371536a5322530653285302531053225305530d5300530b5320530653205302533653025310530b5320530253205301533653025318532053025320530253365302530c5320530253205302533653025308530c5301530b53205301532853025308532253005320530253365302530c53205301532053025336530253085320530253415300533653025318532053025320530153365302530c5320530253205300533653025308530b5320530453415308536a53215300530c5301530b53025340532053095345530d5300530253405320530253285302531c5322530053415302537453413a00c45314536a5322530153285302530053205302534653045340532053015320530453365302530053205304530d530153413a009853125320530a5341537e5320530053775371533653025300530c5302530b53205309534153105341531453205309532853025310532053025346531b536a53205304533653025300532053045345530d5301530b532053045320530953365302531853205302532853025310532253005304534053205304532053005336530253105320530053205304533653025318530b53205302532853025314532253005345530d530053205304532053005336530253145320530053205304533653025318530b53025340532053035341530f534d53045340532053025320530353205305536a532253005341530353725336530253045320530053205302536a5322530053205300532853025304534153015372533653025304530c5301530b53205302532053055341530353725336530253045320530253205305536a53225304532053035341530153725336530253045320530353205304536a5320530353365302530053205307530453405320530753415378537153413a00bc5312536a5321530053413a00a85312532853025300532153015302537f534153015320530753415303537653745322530553205306537153455304534053413a009453125320530553205306537253365302530053205300530c5301530b53205300532853025308530b532153065320530053205301533653025308532053065320530153365302530c532053015320530053365302530c5320530153205306533653025308530b53413a00a853125320530453365302530053413a009c531253205303533653025300530b5320530253415308536a53215300530b5320530b53415310536a5324530053205300530b3a00cb530b53015307537f53025340532053005345530d53005320530053415308536b532253025320530053415304536b5328530253005322530153415378537153225300536a532153055302534053205301534153015371530d5300532053015341530353715345530d5301532053025320530253285302530053225301536b5322530253413a00a453125328530253005349530d53015320530053205301536a5321530053413a00a85312532853025300532053025347530453405320530153413a00ff5301534d5304534053205301534153035376532153015320530253285302530c53225303532053025328530253085322530453465304534053413a0094531253413a009453125328530253005341537e5320530153775371533653025300530c5303530b532053045320530353365302530c5320530353205304533653025308530c5302530b532053025328530253185321530653025340532053025320530253285302530c5322530153475304534053205302532853025308532253035320530153365302530c5320530153205303533653025308530c5301530b530253405320530253415314536a5322530453285302530053225303530d53005320530253415310536a5322530453285302530053225303530d53005341530053215301530c5301530b530353405320530453215307532053035322530153415314536a5322530453285302530053225303530d53005320530153415310536a532153045320530153285302531053225303530d5300530b5320530753415300533653025300530b532053065345530d5301530253405320530253285302531c5322530453415302537453413a00c45314536a5322530353285302530053205302534653045340532053035320530153365302530053205301530d530153413a0098531253413a009853125328530253005341537e5320530453775371533653025300530c5303530b53205306534153105341531453205306532853025310532053025346531b536a53205301533653025300532053015345530d5302530b532053015320530653365302531853205302532853025310532253035304534053205301532053035336530253105320530353205301533653025318530b53205302532853025314532253035345530d530153205301532053035336530253145320530353205301533653025318530c5301530b5320530553285302530453225301534153035371534153035347530d530053413a009c53125320530053365302530053205305532053015341537e537153365302530453205302532053005341530153725336530253045320530053205302536a53205300533653025300530f530b5320530253205305534f530d530053205305532853025304532253015341530153715345530d5300530253405320530153415302537153455304534053413a00ac53125328530253005320530553465304534053413a00ac53125320530253365302530053413a00a0531253413a00a0531253285302530053205300536a5322530053365302530053205302532053005341530153725336530253045320530253413a00a853125328530253005347530d530353413a009c53125341530053365302530053413a00a8531253415300533653025300530f530b53413a00a853125328530253005320530553465304534053413a00a853125320530253365302530053413a009c531253413a009c531253285302530053205300536a5322530053365302530053205302532053005341530153725336530253045320530053205302536a53205300533653025300530f530b5320530153415378537153205300536a53215300530253405320530153413a00ff5301534d5304534053205301534153035376532153015320530553285302530c53225303532053055328530253085322530453465304534053413a0094531253413a009453125328530253005341537e5320530153775371533653025300530c5302530b532053045320530353365302530c5320530353205304533653025308530c5301530b532053055328530253185321530653025340532053055320530553285302530c5322530153475304534053413a00a45312532853025300531a53205305532853025308532253035320530153365302530c5320530153205303533653025308530c5301530b530253405320530553415314536a5322530453285302530053225303530d53005320530553415310536a5322530453285302530053225303530d53005341530053215301530c5301530b530353405320530453215307532053035322530153415314536a5322530453285302530053225303530d53005320530153415310536a532153045320530153285302531053225303530d5300530b5320530753415300533653025300530b532053065345530d5300530253405320530553285302531c5322530453415302537453413a00c45314536a5322530353285302530053205305534653045340532053035320530153365302530053205301530d530153413a0098531253413a009853125328530253005341537e5320530453775371533653025300530c5302530b53205306534153105341531453205306532853025310532053055346531b536a53205301533653025300532053015345530d5301530b532053015320530653365302531853205305532853025310532253035304534053205301532053035336530253105320530353205301533653025318530b53205305532853025314532253035345530d530053205301532053035336530253145320530353205301533653025318530b53205302532053005341530153725336530253045320530053205302536a532053005336530253005320530253413a00a853125328530253005347530d530153413a009c531253205300533653025300530f530b53205305532053015341537e537153365302530453205302532053005341530153725336530253045320530053205302536a53205300533653025300530b5320530053413a00ff5301534d530453405320530053415378537153413a00bc5312536a532153015302537f53413a00945312532853025300532253035341530153205300534153035376537453225300537153455304534053413a009453125320530053205303537253365302530053205301530c5301530b53205301532853025308530b532153005320530153205302533653025308532053005320530253365302530c532053025320530153365302530c5320530253205300533653025308530f530b5341531f532153045320530053413a00ff3a00ff3a00ff5307534d53045340532053005341532653205300534153085376536753225301536b537653415301537153205301534153015374536b5341533e536a53215304530b532053025320530453365302531c53205302534253005337530253105320530453415302537453413a00c45314536a5321530753025340530253405302534053413a00985312532853025300532253035341530153205304537453225301537153455304534053413a009853125320530153205303537253365302530053205307532053025336530253005320530253205307533653025318530c5301530b532053005341531953205304534153015376536b53415300532053045341531f5347531b5374532153045320530753285302530053215301530353405320530153225303532853025304534153785371532053005346530d5302532053045341531d53765321530153205304534153015374532153045320530353205301534153045371536a5322530753415310536a53285302530053225301530d5300530b53205307532053025336530253105320530253205303533653025318530b532053025320530253365302530c5320530253205302533653025308530c5301530b53205303532853025308532253005320530253365302530c53205303532053025336530253085320530253415300533653025318532053025320530353365302530c5320530253205300533653025308530b53413a00b4531253413a00b4531253285302530053415301536b532253005341537f53205300531b533653025300530b530b534753015302537f53413a00fc5311532853025300532253015320530053415307536a53415378537153225302536a532153005302534053205302534153005320530053205301534d531b530d530053205300533f5300534153105374534b530d530053413a00fc53115320530053365302530053205301530f530b53413a00905312534153305336530253005341537f530b5304530053235300530b530653005320530053245300530b531053005323530053205300536b534153705371532253005324530053205300530b530b3a00c953095308530053413a00805308530b5311532653333a0086533053713a00db3a00c65360533653543a0087536a53433a00eb537c3a00a2531b530053413a00a05308530b53115347533253105336532b3a00f93a00a053293a00c53a009e535d3a00c1533d5325536b3a008b530f530053413a00c05308530b3a009153013a00ae5379533f3a008b53283a008b3a00b353093a00ae532153703a00ae5329533d53333a00a2536d534a53623a00a7535153083a00ab3a00fd3a00ff535b3a008953543a008c3a00de3a00dc3a00bf5360537053183a008253733a00903a00d7536c534c531053313a00b9537e3a00d63a00d93a00c353123a00ea53443a00f853713a00e33a00c23a00c13a00eb3a009d3a00d03a00fa3a00845322531d3a00f953133a00ea53693a00da53363a00ff3a00b03a00f3530453013a00c8537e3a00be3a009a3a00c03a00855321533a53613a00b3530b53223a0083533453403a00ed3a00b35314530153475321533e3a00ac3a00e253013a00c63a00c33a00bb3a00a55352534b3a00963a00ad3a00dc3a00ad53513a00f23a00e83a00c153253a00c93a00f95363534e530c533c3a00e03a00d93a00b53a00db3a00cc5330534153763a00e9534a3a00a73a00b6534a53763a008553223a00a23a00a13a009553415353530e53383a00b3533b530053413a00e05309530b531153633a00dc53063a00913a00e53a00fb532e3a00803a00e35359536c537553543a00943a00dc3a00df3a00c0530053413a0080530a530b53113a00833a00b83a00f73a00df53323a00e353703a00b43a00f8531a3a00823a00cf537f53393a00de3a00d03a00ba530053413a00a0530a530b53113a00d33a00eb3a00e053513a00f43a00f453745364533f3a00c13a00bd53583a00ed5379532853473a00fe530053413a00c0530a530b53113a00d9532953583a00e153703a00db53103a00f43a00943a00d6530a3a00d53a00d23a00af3a00a753525329530053413a00e0530a530b3a009f530753223a00aa536253213a00fe53393a00d55378535c53225348533d53395331535853593a00bf5300530053003a00df3a00ff5371532a3a00b73a00da53043a009a3a00a453085344536d53643a00f6532d53363a00d63a00aa3a00b55344532353563a00a23a0090537f3a00883a008a3a00e2534a3a00c0531c3a00963a00e13a00df53003a00b7533c531b3a00f33a0089533d534d3a00953a00c453073a00b3532e53445369531c5314531c3a00f73a009c533d534e5369532b3a00cd53233a00b9532d53625324535f3a00bd53183a00823a00c43a0090531f531d537353175335537053175337536e3a0090532453175353530a3a008f53713a009b3a00f7534d3a00af3a00ff3a00883a00db3a00ec53343a008e532c534453593a00bd3a00ec53233a00d03a00df535553523a00d33a00d33a00e33a00ab532853703a00933a00a13a00c63a00ca53663a00ba3a009a3a00ea53505321535c531b3a00953a00a353033a00893a00cc3a00903a00a7531a3a00ab535a53563a00c253463a00ae53323a00a63a008953733a008f535c3a00863a0087534a537b3a00ef533053023a00a953135319533f3a00b2532e5319535a533053143a009553143a008d53203a00935335534e5327537e3a00b8531353003a00ea537f535853275346537d3a008a533c533a53683a00af3a00bd536a533b532b53765367533c3a00c7533d5301537e3a00ad53153a00a1536e532d53483a00c03a009c3a0083530e532853373a00bf53793a00903a00ad3a00fb3a008b5367537653123a00db536a536d3a00d653353a00d03a00af535153503a00953a00a93a00bc53723a00993a00b13a00d13a00a83a00b353323a00f43a00dc3a008e3a00b6532a533b3a00a7533f5322537753503a00ef3a008a3a00ba3a008853273a00d553123a00e93a00cc53265365530f53013a00d33a00fe3a00bb536e530b3a008c534e3a00b3537b3a00d53a00873a00cc3a00fe3a00fd3a00f23a00e7536a3a00f05302532c532053043a00f0534e531553775372530653163a00c25369531153023a00bd3a00c4536e53605319535a3a008253243a00af53313a00cd53383a00e05361532a535e3a00cb537f3a008f53763a00a93a00c153763a00bf3a00bf3a00ae534e3a00a3533e3a00f1533353553a00d2532a3a00cd3a00ae53503a009c3a00ba3a00dd535b3a00f73a00ad532a3a00af3a00ca3a00c253623a00c23a00d95304535a53733a00d53a00f93a00b653185315535f3a009d3a00ad534b533c3a00ff3a00f23a00f63a00af3a00c23a00853a00f93a00af532b532d3a00bb5376537e3a00d2532d3a00f03a00db5318533a3a008e3a00fb531b3a00fa3a00be537e3a00d853373a00ae3a008153573a00b93a00fd53745335534e53323a00a1534c3a009353383a00a53a00993a00d23a00f33a00d23a00843a00a95323531a537e3a008753015348531b3a00ae3a00ac53715310533853163a00b03a00f853183a00ec5364534353535330531253093a00c33a00b4537753323a00d93a00a33a00d33a00ea3a00d653203a00da5345533e53003a00a753583a00973a00cb531753223a00fc5321534d531f3a00b653663a00ad531c3a00b43a00c73a00cf5368532f3a00f7534b533653483a008053563a00a85372532b5359532b3a00df530b3a00d23a00933a00a73a00a953683a00c13a00b43a00d53a00be533b5300530d3a00a63a00f73a00eb3a00d2530c3a00ef535e3a00f4530e533153623a00b353793a00fe3a00ca534353043a00c73a00e5531e3a00b153613a00fa53263a009c3a00e73a00d93a009c536153163a00c6532e5302533b3a00ab537153395329534a532f3a00d93a00d83a00af3a00e23a008253163a00d13a00ef536d3a00d953013a00e13a00f43a00963a00ac3a009f531d534f530d3a00d43a00f5534f535b3a00e73a00bc3a00a2533d53533a008c3a00c63a00ec3a00af532c3a00c33a0084531a3a00dc534253653a00a3536d3a00aa5310532c5362534f3a008353133a009b3a00cf5367530b53315315534f3a00fe535b535d5355534d531b3a00b753663a00bb3a00b453555315535253453a008a5300537053103a00ac531a3a00aa5310530d3a008453433a00c43a0084532d5330537b3a00ef3a00d53a00c43a00f153053a00ff3a00993a00ef3a00d253535301533f532c3a00e43a008153343a00883a00ef530d535e53063a00c33a00a553523a00c23a00b253635346536a3a00ae3a00f33a00a8532a53123a00d953543a00c4534a3a00bb53573a00dc3a00da53003a00e253633a00bb3a0097532d3a00eb532953163a00f23a00f53a00e63a00c83a00a053483a00d453333a00df535c3a00fe533b3a00af5328532a3a00ce3a00c03a00903a00a253423a00e9534c536a3a00ec532e53013a00b6533b5333531853533a00873a00bf3a008e5365531c53643a00ac3a00e453493a009b533053183a00fa5327530b53093a00f43a00fc530c535a3a00f03a00f853733a00c45373536a3a00933a00973a00d753603a00df5331532a53033a00c353463a00b2535d53373a00e6531f3a00f9536953523a00e653073a00d43a00c43a00cd3a00a53a00bd3a00963a00df3a00af3a00d03a00a13a00bc53605328530a3a00af536e53433a00a43a00ae536b3a00b23a00b53a00c153793a00955362533c53373a00f83a00e253363a00df3a00c8532a3a00843a00c6536d5322533553643a00e853403a00a3533f537553163a00b6536a3a00ad533d3a00ea53165322532e3a009b536a534253283a00b7530a3a0086536753643a008d3a00d853295315534f532a3a008f3a00bf537d536b3a00f053053a00d55304530c3a00fa3a00f85379535e5338534953343a0087537a533753363a00d43a00d73a00fa3a00eb3a00e153733a00c5535b53053a00bb53133a00ca530d3a00df3a009253263a00ca532d3a00c8537d3a008353605361537b3a00f53a0092530f53485337535f535b53523a00875366537553483a00e93a00f353173a00b63a009b53633a00b53a00d23a00ba3a00e93a00d3536953633a00ac530b3a00b1533e3a008b535d3a00903a00fa3a00cd3a00d13a009153483a00803a00935350537a534b3a00c03a00df3a00e6537753303a008f3a0091535b3a00893a00ad3a00eb533353775310530b5301318e3e3800760c005a0020570076130138007722000e050a4a1c5100070a0700040a3800783100003800804101403800814101413800825700845700812e173f014200085a69727f68757372096c6e73687368656c790868734f686e75727b047f7d707004727d7179077572787964537a067e736972783c0d47727d68756a793c7f73787941064f686e75727b0c7a6e73715f747d6e5f737879012d0875727f706978796f057d6c6c706509697278797a757279780e747d6f536b724c6e736c796e6865012a0f47737e76797f683c4b757278736b41012e0d7f74797f773c787372793d3d3d067079727b6874022d2a0b43436f7f7479786970796e022e2d117d7878487d6f774b7568744e796f69706821432e782a7e28292d2424292b7e29782e2f292979297e7825242c252a252d7e2828046874797221437a292e2f2c2d2c7f78247f7a297a7e2b292e292c782d7a7f2e7a2a2b2d7f2b2f087f252f7e28787d2f012b087a69727f687573720b64667d64787d6f786f7d78056f6c70756801160b7f73726f7370793270737b0878797e697b7b796e057f7d687f740124012c0372736b056f74757a68066e7976797f68027a72076e796f73706a790d687571794e79717d757275727b097173696f7971736a79066f7f6e7370700777796578736b72057f70757f77107d7878596a79726850756f687972796e06537e76797f68046c696f74077d7878487d6f77067f73727f7d68214379792c2d2578252f252c2c787f79792e7e787d7a7e7929242528792a7f247d2521432d2a2d25782a252b2f29792d7828242c7d2b2e782b792c2d7f287d282c7e2b7a2143292a2d2a7a2f2e2a7d7d7e7f292e28787a292b7d29787f7f2b2a2a28252b7d2c2143252c287e242c2d2d792f2e2e7d292a282a787f282c247e287e2e2a2e24292b2921437a2e2a782a287a2d2d797e2c7a2e2b2f2d782d782c2f7a7d7e7f7a242b7f297f0878737f69717972680b4b797e5d6f6f79717e70650771796f6f7d7b79056f687d7f77214325257f2a2f7a2c7e2a29257e2879792e797a2d2b7f2a282e7d2c782f2829797e207d6c242537335d4c4d4e4f68494a517879525346696a6b644b44457a7b6d6e6f205a4850742f73757677702829575b5455565e5f2a7e7f65662c2d2e58592b7172214378782a2e2d2c2c792d792b2c782d2a7f7a292c797f2d252f2a7e2d7a2b282b2c2025252b29282d2c2a2a2f2f7a2528782f292c787e2f2878292824782a2c252d7d20517a7b6d6e6f7e7f65664c4d4e4f68696a5f2b7172292c2d5455565e732e58592045467d7677702a2f5b6c242537335d28494a5a4857787952536b644b445074752143792d792a24252f2b2b7f2c7a7e787e797e2b7a292b2f7a2d282b2b2f2a282b250771726f2c2d2c2d21432a2a2c2a2e28242b7f7a2d2c2f2a2e2e282b297d2e7a257e2d2b78242e252f790771726f2c2e2c2d05786f6f686f047a6e73710679727f737879057a7073736e066e7d727873710a282e2528252a2b2e2529022d2f0670737d78686f09242c2b24282c282424056f70757f79027d2d09646f797f7d6c6c75780369727721432b2a297e287d2e2e242c24252f2f2c242e2a242a292e2979247d782d24252e79214325292c2e2a787a2a297e7d7f78792e2d2e2c2e2579287f792529242c7d7f2d240143067f746e737179053442603c350d21344742274136353427603835067f737377757905717d687f74066f697e6f686e0a282e2528252a2b2e252a065e697a7a796e045a6e737109696f796e5d7b7972680878756f7f736a796e0b64746f78756f7f736a796e064e797b59646c0932367d72786e7375780175077d72786e7375781234754c7473727960754c737860754c7d78350375736f08323671737e757079056c74737279026c7f03736c6e05736c796e7d0f717366557272796e4f7f6e797972451158796a757f79517368757372596a7972681658796a757f79536e757972687d68757372596a7972680d696f796e5d7b797268587d687d0b7f73726f686e697f68736e0468796f680b5448515059707971797268066f7d7a7d6e75106c696f74527368757a757f7d687573722147737e76797f683c4f7d7a7d6e754e7971736879527368757a757f7d68757372410c78737f6971797268517378790a4f68657079517978757d08727d6a757b7d687909727d6a757b7d68736e0359787b027579077a756e797a73640479787b79147b7968597079717972686f5e65487d7b527d71790136037d787807687d7b527d71790b687350736b796e5f7d6f79697079683c792178737f6971797268327b7968597079717972686f5e65487d7b527d7179343e363e3530682172796b3c4f7968277a736e347079683c7d3c737a3c793568327d7878347d32687d7b527d717932687350736b796e5f7d6f79343535276e7968696e723c680b7a6e73715972686e75796f02273c03717d6c0121056b797e557804736c7972044c534f48277468686c6f2633337d6c71317a793264757d737473727b6f7469327f7371337d6c7533787d687d106f79684e796d69796f6854797d78796e0c5f7372687972683148656c79107d6c6c70757f7d6875737233766f7372087e75663168656c79067d6c71437a79096f686e75727b757a65046b7d6c48137f73726879646843727d7179486e7d7f77796e0a64746f436b797e6f7877147f737268796468437d6e68757a7d7f68527d71790c6b797e71726f43796e6e736e1071797d6f696e797179726843727d71790870737f7d6875737204746e797a0d7f737268796468436e73696879117f73726879646843696f796e5d7b797268077d6c6c527d71790f7f737268796468437d6c6c527d71790179057d6c6c7578057964686e7d016a056b797e757801681071797d6f696e797179726843787d687d046f79727802686881286868216868373e5a4857787952536b644b4445467d6c242537335d28494a5074757677702a2f5b3e273c7079683c382168327079727b6874306e214741277a736e347079683c79212c27792038277937212f35677079683c73216847794130702179372d203823684779372d41262c30722179372e203823684779372e41262c3069217320202d2a60702020246072305a2147692222222d243a2a2f30692222222d2e3a2a2f30692222222a3a2a2f302a2f3a694130432138317922212f232c262f313438317935277a736e347079683c7a212c277a20283143277a3737356e326c696f74346868327f747d6e5d68345a477a413535277a736e347079683c74212c2774204327743737356e326c696f74343e213e35616e7968696e723c6e3276737572343e3e35016e017280956a7d6e3c68216e327079727b6874307d216820202e27757a347235676a7d6e3c79216e4768312d4127757a347920347d31212835312f606079227d356e7968696e723c72697070277d2179617a736e346a7d6e3c7a2172796b3c49757268245d6e6e7d65347d353075212c2775207d27373775357a477541216e477522222e41222234342f3a753520202f35276e7968696e723c7a80916a7d6e3c6830792172327079727b6874307d217922222e27342f3a79353d212c3a3a37377d306e2334682172796b3c497572682f2e5d6e6e7d65347d372d3535477d41217926682172796b3c497572682f2e5d6e6e7d65347d35277a736e346a7d6e3c73212c27732079273737733568477322222e41602172477341202034342f3a733520202f35276e7968696e723c683e757a3472327079727b6874202d2a35676a7d6e3c792172796b3c49757268245d6e6e7d65342d2a352779326f796834723530722179616e7968696e723c7281346a7d6e3c64307d3079307230383073307a216e327079727b68743070217a312d277a736e347d216e4770413079212c3073212c60517d6874327a7073736e342a37292e337a352773222c2731317335676a7d6e3c71216b757278736b3243257924292528282a2e2e2524282d7d7d2d7878252c29787d2c2c782e2d28297a347935277a736e3438212c30722171472c4130792171472d4127382070273737383564216e4738372d41307d216e47384137216b757278736b32437e25242c282d2b78297e7f782b2a7f2d79792e247e242a2b7d282f2e792e7d2c34793064307d303830723068352764216e472c41307d216e47704137216b757278736b32437e25242c282d2b78297e7f782b2a7f2d79792e247e242a2b7d282f2e792e7d2c34793064307d30383072306835616e7968696e723c6e226e7968696e723c72796b3c4879646859727f7378796e34353279727f73787934793502792a0428242f7f0a7d2e7d2d79797829792f81866e7968696e72343e6f686e75727b3e212168656c79737a3c683a3a3468216b757278736b32432b2a297e287d2e2e242c24252f2f2c242e2a242a292e2979247d782d24252e7934683535303e6f686e75727b3e212168656c79737a3c6e3a3a346e216b757278736b32432b2a297e287d2e2e242c24252f2f2c242e2a242a292e2979247d782d24252e79346e3535307269707021216860602c21212168327079727b6874352368266b757278736b32432c2b7d2825242e7e242c2e257d7d7a28247f287e287825297e7f2b287e787e25346b757278736b32432c7828242c782f2b2d2f787879792d29292b7d7e2e792a2e2f2b2c2c79782b7e346b757278736b32432d7f252e2c247e7f7a7e2e7e7a2b2825287f7d2b7a7a7e7e2e2e252d2d7a25783468303d2c35306b757278736b32432d7f252e2c247e7f7a7e2e7e7a2b2825287f7d2b7a7a7e7e2e2e252d2d7a2578346b757278736b32437f242d2824252b792a782e7f2d2a7e2b2b282d297d2a2c252b257d257d252c25346e35303d2d3535303d2d35526a7d6e3c6e212c604327757a346e202d2e24356e7968696e72476e41276a7d6e3c69216e392d2e243072214741276e7968696e723c72326c696f743469372d2e24302d2e2b3a346e316935332d2e2435307280906a7d6e3c69216e2222222c27757a3469202d2a2f2428356e7968696e723c6b757278736b32432d7e2b7f28782a2b2c292a282e7f7e2a7924292c2a257e7878797d28792c2d79346935276a7d6e3c79214741277873676a7d6e3c72212d2e2b3a69273469222222212b353a3a347260212d2e24353079326c696f74347235616b74757079346935276e7968696e723c790a736968796e4b757868740a757272796e4b757868740b736968796e5479757b74680b757272796e5479757b74680e78797a7572794c6e736c796e6865037b79680e7f73726f7370793270737b34793505596e6e736e0f6f687d7f77486e7d7f795075717568013f067e736868737103797578037079720368736c223423267f746e7371793179646879726f7573722640334033353447423f4033413735047964797f076e796c707d7f790934406e407260406e35017b1634323740333464746f7f7872354033604235323740720240720579716c686504796a7d70107f746e7371793179646879726f7573720970737f7d7074736f68092d2e2b322c322c322d097d727372657173696f047a7570790943436c6e7368734343096b797e786e756a796e187b7968536b724c6e736c796e686558796f7f6e756c68736e0f78737f69717972685970797179726816434f7970797275697143555859434e797f736e78796e0c7f7d70704f7970797275697109436f797079727569711543436b797e786e756a796e436f7f6e756c68437a72114343786e756a796e43796a7d70697d68791443436b797e786e756a796e43796a7d70697d68791343436f7970797275697143796a7d70697d68791343437a64786e756a796e43796a7d70697d6879124343786e756a796e4369726b6e7d6c6c79781543436b797e786e756a796e4369726b6e7d6c6c79781443436f797079727569714369726b6e7d6c6c79781443437a64786e756a796e4369726b6e7d6c6c79781743436b797e786e756a796e436f7f6e756c68437a69727f0c7b79685d68686e757e696879086f7970797275697106786e756a796e217f787f437d78734d6c737d6f727a7d2b2a6c7a7f4650717f7a70434f65717e7370207f787f437d78734d6c737d6f727a7d2b2a6c7a7f4650717f7a70435d6e6e7d65227f787f437d78734d6c737d6f727a7d2b2a6c7a7f4650717f7a70434c6e7371756f79194343386b797e786e756a796e5d6f65727f5964797f6968736e104343707d6f684b7d68756e5d70796e68124343707d6f684b7d68756e5f73727a756e71114343707d6f684b7d68756e4c6e73716c681243436b797e786e756a796e5a69727f7b797e1043436b797e786e756a796e43437f746e1b43436b797e786e756a796e436f7f6e756c68437a69727f687573720e7f7d707079784f79707972756971146b7d68757259646c6e796f6f757372596e6e736e156b7d68757259646c6e796f6f7573724e796f6970680a7f737272797f68757372036e6868037f6f750b6c796e71756f6f7573726f056d69796e65067f7d71796e7d056f687d6879077b6e7d7268797803747d6f0b6c707d6f7173317f6f6975037d7e6f09756f486e696f687978096873697f7471736a7905777965696c047e7378650b6e7971736a795f74757078037d70700d7f6e797d6879597079717972680575726c6968017d067d6c6c7972780164166e7968696e723c78737f6971797268327d7070346435107b79685972686e75796f5e6548656c790558797e697b1a73726e796f73696e7f7968757175727b7e697a7a796e7a69707021432e7e2f7e797e2b252a2e7a2b2c2d287f242d7e2e2a2c7a247d7d2d24252c7e79024741074e797a70797f68063c474234413604517d687404587d6879064f7f6e797972056b757868740a5173696f79596a7972680971736a79717972684409527d6a757b7d68736e086c707d687a736e711243436b64766f4379726a756e7372717972680b717572756c6e737b6e7d71077e6e736b6f796e0a43436b644b797e59726a1343436b64766f43756f436b776b797e6a75796b0e4b7975647572564f5e6e75787b79137b7968536b724c6e736c796e6865527d71796f0383857277088385727a75727568650483857268700b75726f687d7268757d687906517971736e650775727568757d7006717971736e650379726a0875726f687d727f790779646c736e686f067e697a7a796e06717d7070737f036f796823646543787d7d252e2a24247a7a252f2c25792d7d2e25782e292e2e287a782c2d2a287d2143782d7e28787a2a28797e2d292e7d7d2d782e2879242e7a257e782c7e7a792b7e047a6e7979236465437f7d2879787d2e2a282e7928257f2f2f242d2d29247a2a7e2c257e2c2d292a2b236465432a7a29782d2d7e78252b2f7e2b7d7d792d7f2d7e79252e297829782a25257f2d236465432d24782d2e7e247929282d7e2d7a78242c7e2d7f2f7f2e79797e2a2f7d2e2c240571726f6a2e21432b2f2c2d2b2e282e7f247e292b7f2d787d282a7e782d7a242d287d2d7a2d7e2c2143257924292528282a2e2e2524282d7d7d2d7878252c29787d2c2c782e2d28297a21437e25242c282d2b78297e7f782b2a7f2d79792e247e242a2b7d282f2e792e7d2c21432c2b7d2825242e7e242c2e257d7d7a28247f287e287825297e7f2b287e787e2521432d7f252e2c247e7f7a7e2e7e7a2b2825287f7d2b7a7a7e7e2e2e252d2d7a257821437f242d2824252b792a782e7f2d2a7e2b2b282d297d2a2c252b257d257d252c2521432c7828242c782f2b2d2f787879792d29292b7d7e2e792a2e2f2b2c2c79782b7e21432d7e2b7f28782a2b2c292a282e7f7e2a7924292c2a257e7878797d28792c2d790a282e2528252a2b2e252b0a282e2528252a2b2e2524';\nglobalThis['c93b4da3'](__$c, [, , typeof Object !== \"undefined\" ? Object : undefined, typeof Reflect !== \"undefined\" ? Reflect : undefined, typeof String !== \"undefined\" ? String : undefined, typeof Array !== \"undefined\" ? Array : undefined, typeof setTimeout !== \"undefined\" ? setTimeout : undefined, typeof Promise !== \"undefined\" ? Promise : undefined, typeof Date !== \"undefined\" ? Date : undefined, typeof globalThis !== \"undefined\" ? globalThis : undefined, typeof clearTimeout !== \"undefined\" ? clearTimeout : undefined, typeof performance !== \"undefined\" ? performance : undefined, typeof requestAnimationFrame !== \"undefined\" ? requestAnimationFrame : undefined, typeof requestIdleCallback !== \"undefined\" ? requestIdleCallback : undefined, typeof Math !== \"undefined\" ? Math : undefined, typeof undefined !== \"undefined\" ? undefined : undefined, typeof encodeURIComponent !== \"undefined\" ? encodeURIComponent : undefined, typeof TextEncoder !== \"undefined\" ? TextEncoder : undefined, typeof RegExp !== \"undefined\" ? RegExp : undefined, typeof document !== \"undefined\" ? document : undefined, typeof unescape !== \"undefined\" ? unescape : undefined, typeof parseInt !== \"undefined\" ? parseInt : undefined, typeof navigator !== \"undefined\" ? navigator : undefined, typeof InstallTrigger !== \"undefined\" ? InstallTrigger : undefined, typeof Set !== \"undefined\" ? Set : undefined, typeof Function !== \"undefined\" ? Function : undefined, typeof XMLHttpRequest !== \"undefined\" ? XMLHttpRequest : undefined, typeof JSON !== \"undefined\" ? JSON : undefined, typeof Error !== \"undefined\" ? Error : undefined, typeof chrome !== \"undefined\" ? chrome : undefined, typeof Event !== \"undefined\" ? Event : undefined, typeof top !== \"undefined\" ? top : undefined, typeof Uint8Array !== \"undefined\" ? Uint8Array : undefined])\n","\n!(function(){\n    const $toString = Function.prototype.toString;\n    const symbol = Symbol();\n    const myToString = function (){\n        return typeof this === 'function' && this[symbol] || $toString.call(this);\n    }\n    function safeFunction(func, key, value){\n        Object.defineProperty(func, key, {\n            enumerable: false,\n            configurable: true,\n            writable: true,\n            value: value,\n        })\n    };\n    delete Function.prototype.toString;\n    safeFunction(Function.prototype, \"toString\", myToString);\n    safeFunction(Function.prototype.toString, symbol, 'function toString() { [native code] }');\n    globalThis.safeFunction = function(func, funcname){\n        safeFunction(func, symbol, `function ${funcname || func.name || ''}() { [native code] }`);\n    }\n})();\n\nfunction makeFunction(name) {\n    // 动态创建一个函数\n    var func = new Function(`\n        return function ${name}() {\n        }\n    `)();\n\n    safeFunction(func)\n\n    return func;\n}\n\nfunction Window(){}\n\n// 兼容 Node.js 和浏览器环境，统一挂载到 globalThis\nif (typeof globalThis.window === 'undefined') {\n    globalThis.window = (typeof global !== 'undefined') ? global : globalThis;\n}\nsafeFunction(globalThis.window)\nglobalThis.self = globalThis.window;\nglobalThis.top = globalThis.window;\nglobalThis.outerWidth = 1536\nglobalThis.innerWidth = 1528\nglobalThis.outerHeight = 816\nglobalThis.innerHeight = 118\nglobalThis.name = \"\"\n\nglobalThis.window.addEventListener = function (tagName){}\nglobalThis.MouseEvent = function (tagName){}\nglobalThis.TouchEvent = function (tagName){}\n\nObject.setPrototypeOf(globalThis.window, Window.prototype)\nsafeFunction(globalThis.window, 'Window')\n\nglobalThis.XMLHttpRequest = function XMLHttpRequest(){};\nglobalThis.XMLHttpRequest.prototype.open = function (method, url, async){}\n\nglobalThis.Ιnfinity = function (tagName){}\nglobalThis.Ιnk = function (tagName){}\nglobalThis.DeviceOrientationEvent = function (tagName){}\nglobalThis.chrome = {\n    \"app\": {\n        \"isInstalled\": false,\n        \"InstallState\": {\n            \"DISABLED\": \"disabled\",\n            \"INSTALLED\": \"installed\",\n            \"NOT_INSTALLED\": \"not_installed\"\n        },\n        \"RunningState\": {\n            \"CANNOT_RUN\": \"cannot_run\",\n            \"READY_TO_RUN\": \"ready_to_run\",\n            \"RUNNING\": \"running\"\n        }\n    }\n}\nglobalThis.HTMLElement = function (tagName){}\nglobalThis.StyleMedia = undefined\nglobalThis.DeviceMotionEvent = function (tagName){}\nglobalThis.loadts = new Date().toString()\nglobalThis.xsecappid = 'ugc'\n\nObject.setPrototypeOf(globalThis, Window.prototype)\nsafeFunction(globalThis, 'Window')\n\n\nfunction EventTarget() {}\nEventTarget.prototype.addEventListener = function (tagName){};\nEventTarget.prototype.constructor = EventTarget;\nsafeFunction(EventTarget.prototype.addEventListener)\n\n\nfunction Node(){}\nNode.prototype.constructor = Node;\nNode.prototype = Object.create(EventTarget.prototype);\n\n\nfunction Element(){}safeFunction(Element)\nElement.prototype.getAttribute = function getAttribute(){};safeFunction(Element.prototype.getAttribute)\nElement.prototype.removeChild = function removeChild(){};safeFunction(Element.prototype.removeChild)\n\nfunction HTMLElement(){\n    Element.call(this)\n};safeFunction(HTMLElement)\nHTMLElement.prototype = Object.create(Element.prototype)\nHTMLElement.prototype.constructor = HTMLElement;\n\nglobalThis.window.HTMLElement = HTMLElement;\n\nfunction HTMLHtmlElement(){}\nHTMLHtmlElement.prototype.getAttribute = function () {\n    return null;\n}\nfunction HTMLAllCollection (){\n    this.length = 1181;\n};safeFunction(HTMLAllCollection)\n\nfunction HTMLBodyElement (){\n    HTMLElement.call(this)\n};safeFunction(HTMLBodyElement)\nHTMLBodyElement.prototype = Object.create(HTMLElement.prototype)\nHTMLBodyElement.prototype.constructor = HTMLBodyElement;\n\nfunction Document(){}\nDocument.prototype = Object.create(Node.prototype);\nDocument.prototype.getElementsByTagName = function (tagName) {\n    if (tagName.toLowerCase() === \"*\") {\n        return [\n    {\"tagName\": \"html\"},\n    {\"tagName\": \"head\"},\n    {\"tagName\": \"script\"},\n    {\"tagName\": \"meta\"},\n    {\"tagName\": \"link\"},\n    {\"tagName\": \"style\"},\n    {\"tagName\": \"title\"},\n    {\"tagName\": \"body\"},\n    {\"tagName\": \"div\"},\n    {\"tagName\": \"svg\"},\n    {\"tagName\": \"defs\"},\n    {\"tagName\": \"clippath\"},\n    {\"tagName\": \"rect\"},\n    {\"tagName\": \"path\"},\n    {\"tagName\": \"symbol\"},\n    {\"tagName\": \"circle\"},\n    {\"tagName\": \"g\"},\n    {\"tagName\": \"header\"},\n    {\"tagName\": \"a\"},\n    {\"tagName\": \"img\"},\n    {\"tagName\": \"input\"},\n    {\"tagName\": \"use\"},\n    {\"tagName\": \"button\"},\n    {\"tagName\": \"span\"},\n    {\"tagName\": \"ul\"},\n    {\"tagName\": \"li\"},\n    {\"tagName\": \"picture\"},\n    {\"tagName\": \"i\"},\n    {\"tagName\": \"p\"},\n    {\"tagName\": \"section\"},\n    {\"tagName\": \"iframe\"}\n]\n    }\n}\nDocument.prototype.all = new HTMLAllCollection();\nDocument.prototype.body = new HTMLBodyElement();\nDocument.prototype.cookie = globalThis.window.ck;\n\nfunction HTMLDocument() {}\nHTMLDocument.prototype = Object.create(Document.prototype);\n\nglobalThis.document = Object.create(HTMLDocument.prototype);safeFunction(globalThis.document);\nglobalThis.document.documentElement = Object.create(HTMLHtmlElement.prototype);\n\nglobalThis.window.document = globalThis.document;\n\nglobalThis.Screen = makeFunction(\"Screen\");\nglobalThis.screen = new globalThis.Screen();\nglobalThis.window.screen = globalThis.screen;\nglobalThis.window.Screen = globalThis.Screen;\n\nglobalThis.History = makeFunction(\"History\");\nglobalThis.history = new globalThis.History();\nglobalThis.window.history = globalThis.history;\nglobalThis.window.History = globalThis.History;\n\n\nglobalThis.Navigator = makeFunction(\"Navigator\");\nglobalThis.Navigator.prototype.appCodeName = \"Mozilla\";\nglobalThis.Navigator.prototype.appName = \"Netscape\";\nglobalThis.Navigator.prototype.language = \"zh-CN\";\nglobalThis.Navigator.prototype.languages = [\n    \"zh-CN\",\n    \"zh\",\n    \"en\"\n];\nglobalThis.Navigator.prototype.platform = \"MacIntel\";\nglobalThis.Navigator.prototype.product = \"Gecko\";\nglobalThis.Navigator.prototype.productSub = \"20030107\";\nfunction PermissionStatus(){\n    this.state = \"denied\"\n    this.then = function then(){}\n};safeFunction(PermissionStatus)\nfunction Permissions(){\n}\nPermissions.prototype.query = function query() {\n    return Promise.resolve(new PermissionStatus())\n};safeFunction(Permissions.prototype.query)\nglobalThis.Navigator.prototype.permissions = new Permissions()\nglobalThis.Navigator.prototype.userAgent = \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36\";\nglobalThis.Navigator.prototype.vendor = \"Google Inc.\";\nglobalThis.Navigator.prototype.webdriver = false;\nglobalThis.navigator = new globalThis.Navigator();\nglobalThis.window.navigator = globalThis.navigator;\nglobalThis.window.Navigator = globalThis.Navigator;\n\n\nfunction Storage(){}\nglobalThis.sessionStorage = new Storage();\nglobalThis.window.sessionStorage = globalThis.sessionStorage;\n\nglobalThis.localStorage = new Storage();\nglobalThis.window.localStorage = globalThis.localStorage;\nglobalThis.window.Storage = Storage;\n\n\nfunction Location(){}\nLocation.prototype = {\n    \"ancestorOrigins\": {},\n    \"href\": \"https://bf5b000000001001945f?xsec_token=AB3TbsCqzVXoWzLIZU5EZiXQBkisr5haqXi5iXIV2NtO0=&xsec_source=pc_note\",\n    \"origin\": \"https:shu.com\",\n    \"protocol\": \"https:\",\n    \"host\": \"www..com\",\n    \"hostname\": \"www.xiaohongshu.com\",\n    \"port\": \"\",\n    \"pathname\": \"/user/00000001001945f\",\n    \"search\": \"?xsec_token=AB3TbsCqzVXoWzLIZU5EZiXQBkisr5haqXi5iXIV2NtO0=&xsec_source=pc_note\",\n    \"hash\": \"\"\n}\nglobalThis.location = new Location();\nglobalThis.window.location = globalThis.location;\nglobalThis.window.Location = Location;","function encodeUtf8(e) {\n  let r2 = []\n  for (let a = encodeURIComponent(e), c = 0;c < a.length; c++) {\n    const d = a.charAt(c);\n    if (d === \"%\") {\n      const s = Number.parseInt(a.charAt(c + 1) + a.charAt(c + 2), 16);\n      r2.push(s), c += 2;\n    } else\n      r2.push(d.charCodeAt(0));\n  }\n  return r2;\n}\nvar c = [\n  \"Z\",\n  \"m\",\n  \"s\",\n  \"e\",\n  \"r\",\n  \"b\",\n  \"B\",\n  \"o\",\n  \"H\",\n  \"Q\",\n  \"t\",\n  \"N\",\n  \"P\",\n  \"+\",\n  \"w\",\n  \"O\",\n  \"c\",\n  \"z\",\n  \"a\",\n  \"/\",\n  \"L\",\n  \"p\",\n  \"n\",\n  \"g\",\n  \"G\",\n  \"8\",\n  \"y\",\n  \"J\",\n  \"q\",\n  \"4\",\n  \"2\",\n  \"K\",\n  \"W\",\n  \"Y\",\n  \"j\",\n  \"0\",\n  \"D\",\n  \"S\",\n  \"f\",\n  \"d\",\n  \"i\",\n  \"k\",\n  \"x\",\n  \"3\",\n  \"V\",\n  \"T\",\n  \"1\",\n  \"6\",\n  \"I\",\n  \"l\",\n  \"U\",\n  \"A\",\n  \"F\",\n  \"M\",\n  \"9\",\n  \"7\",\n  \"h\",\n  \"E\",\n  \"C\",\n  \"v\",\n  \"u\",\n  \"R\",\n  \"X\",\n  \"5\"\n];\nfunction tripletToBase64(e) {\n  return c[e >> 18 & 63] + c[e >> 12 & 63] + c[e >> 6 & 63] + c[63 & e];\n}\nfunction encodeChunk(e, a, r2) {\n  for (var c2, d = [], s = a;s < r2; s += 3)\n    c2 = (e[s] << 16 & 16711680) + (e[s + 1] << 8 & 65280) + (255 & e[s + 2]), d.push(tripletToBase64(c2));\n  return d.join(\"\");\n}\nfunction b64Encode(e) {\n  for (var a, r2 = e.length, d = r2 % 3, s = [], f = 16383, u = 0, l = r2 - d;u < l; u += f)\n    s.push(encodeChunk(e, u, u + f > l ? l : u + f));\n  return d === 1 ? (a = e[r2 - 1], s.push(c[a >> 2] + c[a << 4 & 63] + \"==\")) : d === 2 && (a = (e[r2 - 2] << 8) + e[r2 - 1], s.push(c[a >> 10] + c[a >> 4 & 63] + c[a << 2 & 63] + \"=\")), s.join(\"\");\n}\nfunction encode_mnsv2(mnsv2, type, platform, req_type) {\n  const f = {\n    x0: \"4.2.8\",\n    x1: type,\n    x2: platform,\n    x3: mnsv2,\n    x4: req_type\n  };\n  return \"XYS_\" + b64Encode(encodeUtf8(JSON.stringify(f)));\n}\nmodule.exports = encode_mnsv2\n","import type { ResponseData } from \"@iflyrpa/share\";\n\n/**\n * 用户可见的错误文案。\n *\n * 约定：凡是会进入 ResponseData.message（前端直接展示）的文案都从这里取，\n * 不要把 err.message / error.code / 文件路径等技术细节拼进去 —— 那些信息\n * 放 logger 与飞书告警里，用户侧只保留「看得懂 + 知道下一步做什么」的文案。\n */\nexport const USER_MESSAGE = {\n    // 代理 / 网络 / 系统\n    PROXY_UNAVAILABLE: \"代理暂时不可用，请稍后重试或使用本地IP\",\n    NETWORK_ERROR: \"网络异常，请稍后重试\",\n    SYSTEM_ERROR: \"系统异常，请稍后重试或联系客服\",\n\n    // 发布\n    PUBLISH_NETWORK: \"发布失败，网络不稳定，请稍后重试\",\n\n    // 账号数据查询\n    DOUYIN_ACCOUNT_FETCH_FAILED: \"抖音数据获取失败，请稍后重试\",\n    SHIPINHAO_ACCOUNT_FETCH_FAILED: \"视频号数据获取失败，请稍后重试\",\n\n    // 作品数据查询\n    DOUYIN_POST_FETCH_FAILED: \"抖音作品数据获取失败，请稍后重试\",\n    SHIPINHAO_POST_FETCH_FAILED: \"视频号作品数据获取失败，请稍后重试\",\n    BJH_POST_FETCH_FAILED: \"百家号作品数据获取失败，请稍后重试\",\n    TT_POST_FETCH_FAILED: \"头条号作品数据获取失败，请稍后重试\",\n\n    // 其它\n    QRCODE_FETCH_FAILED: \"认证二维码获取失败，请稍后重试\",\n    IMAGE_UPLOAD_FAILED: \"图片上传失败，请稍后重试或联系客服\",\n} as const;\n\n/** 发布错误分类：category 只用于日志辨识，userMessage 才是用户可见文案 */\nexport interface PublishErrorClassification {\n    category: \"代理错误\" | \"网络错误\";\n    userMessage: string;\n}\n\n/**\n * 网络 / 服务端错误码。\n * 注意与 http.ts 中 `api()` 的重试白名单 [500, 502, 503, 504, 599] 保持同步：\n * 599 是 http.ts 对「代理连接建立超时」的自定义码，单独走代理分支。\n */\nconst NETWORK_CODES = [500, 502, 503, 504];\n\n/**\n * 对发布接口抛出的错误做分类，决定是「直接返回用户文案并终止」还是「交回 RPA 兜底」。\n *\n * 只拦代理/网络类错误 —— 这类错误重试耗尽后 RPA 兜底同样连不上，直接返回更快。\n * 返回 null 表示交回调用方 `throw error`，由上层 executeAction 走 RPA 兜底。\n *\n * 刻意不拦风控（403/461/471）与参数（400/422）错误：executeAction（utils/index.ts:257）\n * 只在 code 为 0 或 414 时终止，抛异常则继续执行下一个 action，\n * 因此这两类错误抛出后能进 RPA 兜底 —— 走浏览器自动化，用户完成验证后仍有机会发布成功。\n * 拦下来会掉掉这条补救路径，所以维持抛出。\n *\n * 注意 401 无需单列：http.ts 的响应拦截器已把 401 归一为 414（避免触发绘文平台鉴权逻辑）。\n */\nexport function classifyPublishError(handledError: ResponseData): PublishErrorClassification | null {\n    const { code } = handledError;\n    const isProxyRequest = handledError.extra?.isProxyRequest === true;\n\n    if (!NETWORK_CODES.includes(code) && code !== 599) return null;\n\n    // 代理错误：599 是代理连接建立超时；带代理的请求出网络错误也算代理链路问题\n    const category = code === 599 || isProxyRequest ? \"代理错误\" : \"网络错误\";\n    return { category, userMessage: USER_MESSAGE.PUBLISH_NETWORK };\n}\n","import axios from \"axios\";\n\nexport type FeishuAlarmLevel = \"warning\" | \"alarm\";\nexport type FeishuAlarmSource = \"http\" | \"proxy\";\n\nexport interface FeishuAlarmReport {\n    /** alarm 会额外 @所有人，warning 只发消息 */\n    level: FeishuAlarmLevel;\n    /** 业务标识：xiaohongshu / douyin / weixin ... */\n    platform: string;\n    /** 告警来源模块 */\n    source: FeishuAlarmSource;\n    /** 出错阶段，如 \"POST /api/sns/web/v1/feed\" */\n    stage: string;\n    /** 错误类型，如 HTTP_403 / ECONNRESET / PROXY_UNAVAILABLE */\n    errorType: string;\n    /** 接口错误码 */\n    code?: string | number;\n    /** 错误信息 */\n    msg?: string;\n    /** 请求地址 */\n    url?: string;\n    /** 消息标题，默认「RPA异常」 */\n    title?: string;\n}\n\ntype FeishuPostNode = { tag: \"text\"; text: string } | { tag: \"at\"; user_id: string };\ntype FeishuPostContent = FeishuPostNode[][];\n\nconst RPA_ERROR_WEBHOOK_URL =\n    \"https://open.xfchat.iflytek.com/open-apis/bot/v2/hook/d202c0dc-5af5-40bc-83ed-abc677caa4a5\";\n\n/** 同一类错误的最小上报间隔，避免重试风暴把群刷爆 */\nconst ALARM_THROTTLE_MS = 60 * 1000;\nconst lastSentAt = new Map<string, number>();\n\n/**\n * 节流表清理阈值：节流 key 含 stage（接口路径），长时间运行的进程里 key 会持续增长，\n * 超过阈值时清掉已过期的条目，避免 Map 无上限膨胀。\n */\nconst THROTTLE_MAP_MAX_KEYS = 500;\n\nconst pruneThrottleMap = (now: number) => {\n    if (lastSentAt.size < THROTTLE_MAP_MAX_KEYS) return;\n    for (const [key, at] of lastSentAt) {\n        if (now - at >= ALARM_THROTTLE_MS) lastSentAt.delete(key);\n    }\n};\n\nconst postFeishuWebhook = (webhookUrl: string, payload: unknown) =>\n    axios.post(webhookUrl, payload, {\n        headers: {\n            \"Content-Type\": \"application/json\",\n        },\n        timeout: 10000,\n    });\n\nconst buildFeishuPostMessage = (report: FeishuAlarmReport) => {\n    const content: FeishuPostContent = [\n        [{ tag: \"text\", text: `平台：${report.platform || \"未知平台\"}` }],\n        [{ tag: \"text\", text: `错误信息：${report.msg || \"未知错误信息\"}` }],\n        [{ tag: \"text\", text: `错误类型：${report.errorType || \"未知错误类型\"}` }],\n        [{ tag: \"text\", text: `阶段：${report.stage || \"未知阶段\"}` }],\n        [{ tag: \"text\", text: `等级：${report.level}` }],\n        [{ tag: \"text\", text: `来源：${report.source}` }],\n    ];\n\n    if (report.code !== undefined && report.code !== null) {\n        content.push([{ tag: \"text\", text: `接口错误码：${report.code}` }]);\n    }\n    if (report.url) {\n        content.push([{ tag: \"text\", text: `地址：${report.url}` }]);\n    }\n    if (report.level === \"alarm\") {\n        content.push([{ tag: \"at\", user_id: \"all\" }]);\n    }\n\n    return {\n        msg_type: \"post\",\n        content: {\n            post: {\n                zh_cn: {\n                    title: report.title || \"RPA异常\",\n                    content,\n                },\n            },\n        },\n    };\n};\n\n/**\n * 上报错误到飞书群，失败静默：告警链路不能影响主流程。\n * 同一 platform + source + stage + errorType + code 组合在 60s 内只发一条。\n *\n * 节流 key 里必须带 stage：不同接口的同类错误（例如 unread_count 与 personal_info\n * 同时 ECONNABORTED）是两个独立问题，混成一个 key 会让后来的那个被静默吞掉。\n */\nexport const reportFeishuAlarm = (report: FeishuAlarmReport): void => {\n    try {\n        const key = `${report.platform}|${report.source}|${report.stage}|${report.errorType}|${report.code ?? \"\"}`;\n        const now = Date.now();\n        const last = lastSentAt.get(key);\n        if (last && now - last < ALARM_THROTTLE_MS) return;\n        pruneThrottleMap(now);\n        lastSentAt.set(key, now);\n\n        postFeishuWebhook(RPA_ERROR_WEBHOOK_URL, buildFeishuPostMessage(report)).catch(() => {});\n    } catch {\n        // 上报失败不能影响主流程。\n    }\n};\n","import { LoggerImplement } from \"@iflyrpa/share\";\nimport { SocksProxyAgent } from \"socks-proxy-agent\";\nimport { USER_MESSAGE } from \"./errorMessages\";\nimport { reportFeishuAlarm } from \"./feishuAlarm\";\nimport { Http } from \"./http\";\n\ninterface ProxyInfo {\n    code: string;\n    desc: string;\n    data: {\n        proxyIp: string;\n        proxyPort: string;\n    } | null;\n}\n\n// 代理鉴权凭证表：每个 IP + 端口区间对应一组账号/密码（来自 a.md）。\n// portStart/portEnd 为闭区间，例如 44001-44050 表示端口 44001 到 44050。\ninterface ProxyCredential {\n    ip: string;\n    portStart: number;\n    portEnd: number;\n    user: string;\n    pass: string;\n}\n\nconst PROXY_CREDENTIALS: ProxyCredential[] = [\n    {\n        ip: \"47.110.131.129\",\n        portStart: 44001,\n        portEnd: 44050,\n        user: \"m64ut33hvzUzuh\",\n        pass: \"pV2nKbhvgciM3URoRjnvk5D1d0CryaE\",\n    },\n    {\n        ip: \"47.110.131.129\",\n        portStart: 44051,\n        portEnd: 44100,\n        user: \"m64uz9EMrVpaCk\",\n        pass: \"pAhDnBmdn12odgffGJnbFt9Jts6EiRz\",\n    },\n    {\n        ip: \"47.110.131.129\",\n        portStart: 44101,\n        portEnd: 44150,\n        user: \"m64uacZLZ1hQuz\",\n        pass: \"p0oyBQtTFXk9x5BniP1GT3t5zmy1kWX\",\n    },\n    {\n        ip: \"47.110.131.129\",\n        portStart: 44151,\n        portEnd: 44200,\n        user: \"m64ugn30hbrv5w\",\n        pass: \"pDMlGki6kx5ObJmIVNX9IyaTyLCNdwF\",\n    },\n    {\n        ip: \"47.110.131.129\",\n        portStart: 44201,\n        portEnd: 44250,\n        user: \"m64uxrjtLEuuiJ\",\n        pass: \"pgSS3tw48oFBFKieAjJjsCzfdbvOxyD\",\n    },\n    {\n        ip: \"47.110.131.129\",\n        portStart: 45001,\n        portEnd: 45050,\n        user: \"m63uGNqJq3SfCR\",\n        pass: \"p9gDMdIlxrfwK6DPpYxad6nnLy2oz7b\",\n    },\n    {\n        ip: \"47.110.131.129\",\n        portStart: 45051,\n        portEnd: 45100,\n        user: \"m63usvfyWYu6vY\",\n        pass: \"pu0hLZL81K5u43XbWlWKjZsNOAPG238\",\n    },\n    {\n        ip: \"47.110.131.129\",\n        portStart: 45101,\n        portEnd: 45150,\n        user: \"m63uI2pvHbB0b0\",\n        pass: \"p353azuJBlrzuu2EidptuhdnBIybdUy\",\n    },\n    {\n        ip: \"47.110.131.129\",\n        portStart: 45151,\n        portEnd: 45200,\n        user: \"m63uSpJbw46qnQ\",\n        pass: \"pYWdnwHHXoKgIOLfuvruZFlSaGN2ZVO\",\n    },\n    {\n        ip: \"47.110.131.129\",\n        portStart: 45201,\n        portEnd: 45250,\n        user: \"m63ufKz8YekqZq\",\n        pass: \"phDmq6dBU85Z85A99LsrtluBgG5OFQ2\",\n    },\n];\n\n/**\n * 根据 IP 与端口查找对应的代理账号/密码。\n * 端口落在某条记录的 [portStart, portEnd] 闭区间内即命中，未命中返回 null。\n */\nfunction findProxyCredential(ip: string, port: string): ProxyCredential | null {\n    const portNum = Number(port);\n    if (Number.isNaN(portNum)) return null;\n    return PROXY_CREDENTIALS.find((c) => c.ip === ip && portNum >= c.portStart && portNum <= c.portEnd) ?? null;\n}\n\n/**\n * 构建带鉴权信息的 socks5h 代理 URL。\n * 使用 socks5h（h 表示由代理服务器做 DNS 解析），凭证写入 userinfo 部分，\n * SocksProxyAgent 会据此向代理服务器做 SOCKS5 用户名/密码鉴权。\n * 根据 ip + port 从凭证表查找对应账号密码，未命中则返回不带鉴权的 URL。\n */\nfunction buildProxyUrl(ip: string, port: string): string {\n    const credential = findProxyCredential(ip, port);\n    if (credential) {\n        // 对凭证做 URL 编码，避免用户名/密码中含有 `:`、`@`、`/` 等特殊字符破坏 URL 结构\n        const user = encodeURIComponent(credential.user);\n        const pass = encodeURIComponent(credential.pass);\n        return `socks5h://${user}:${pass}@${ip}:${port}`;\n    }\n    return `socks5h://${ip}:${port}`;\n}\n\nexport async function ProxyAgent(\n    task: { logger?: LoggerImplement },\n    addr: string | null,\n    accountId?: number,\n    refresh?: boolean,\n) {\n    const http = new Http({\n        headers: {\n            \"content-type\": \"application/json\",\n        },\n    });\n    const params = {\n        addr: addr || null,\n        accountId: accountId,\n    };\n    const ProxyInfo: ProxyInfo = await http\n        .api({\n            method: \"POST\",\n            url: \"https://fetdev.iflysec.com/ip-pool/pool/eip/proxy\",\n            data: params,\n        })\n        .catch((err) => {\n            reportFeishuAlarm({\n                level: \"alarm\",\n                platform: \"ip-pool\",\n                source: \"proxy\",\n                stage: \"POST /ip-pool/pool/eip/proxy\",\n                errorType: \"PROXY_REQUEST_FAILED\",\n                code: err?.code,\n                msg: `请求代理失败：${err.message}，区域：${addr ?? \"-\"}，AccountId：${accountId ?? \"-\"}`,\n                url: \"https://fetdev.iflysec.com/ip-pool/pool/eip/proxy\",\n                title: \"代理异常\",\n            });\n            // 用户侧只给可操作文案，原始 err.message 已记入上面的飞书告警\n            throw { code: 414, message: USER_MESSAGE.PROXY_UNAVAILABLE, data: {} };\n        });\n\n    const loggerInfo = {\n        params,\n        response: {\n            code: ProxyInfo.code,\n            desc: ProxyInfo.desc,\n            data: ProxyInfo.data,\n        },\n    };\n\n    task.logger?.info(\n        `请求代理：区域：${params.addr}, AccountId：${params.accountId}, 返回代理信息: ${ProxyInfo.data ? `${ProxyInfo.data.proxyIp}:${ProxyInfo.data.proxyPort}` : \"无可用代理\"}`,\n        loggerInfo,\n    );\n\n    // 接口通了但没拿到可用代理，同样需要告警：后续请求会退化成直连，不告警\n    // if (ProxyInfo.code !== \"000000\" || !ProxyInfo.data) {\n    //     reportFeishuAlarm({\n    //         level: \"warning\",\n    //         platform: \"ip-pool\",\n    //         source: \"proxy\",\n    //         stage: \"POST /ip-pool/pool/eip/proxy\",\n    //         errorType: \"PROXY_UNAVAILABLE\",\n    //         code: ProxyInfo.code,\n    //         msg: `无可用代理：${ProxyInfo.desc || \"-\"}，区域：${addr ?? \"-\"}，AccountId：${accountId ?? \"-\"}`,\n    //         url: \"https://fetdev.iflysec.com/ip-pool/pool/eip/proxy\",\n    //         title: \"RPA代理异常\",\n    //     });\n    // }\n\n    // 在 URL 中写上认证信息，使用 SocksProxyAgent 支持 socks5h 协议\n    const proxyAgent =\n        ProxyInfo.code === \"000000\" && ProxyInfo.data\n            ? {\n                  ip: ProxyInfo.data.proxyIp,\n                  port: ProxyInfo.data.proxyPort,\n                  agent: new SocksProxyAgent(buildProxyUrl(ProxyInfo.data.proxyIp, ProxyInfo.data.proxyPort)),\n              }\n            : null;\n\n    return proxyAgent;\n}\n","import { createHash } from \"node:crypto\";\nimport type { Agent } from \"node:http\";\nimport type { LoggerImplement, ResponseData } from \"@iflyrpa/share\";\nimport axios, {\n    type AxiosError,\n    type AxiosInstance,\n    type AxiosRequestConfig,\n    type AxiosResponse,\n    type CreateAxiosDefaults,\n} from \"axios\";\nimport { USER_MESSAGE } from \"./errorMessages\";\nimport { reportFeishuAlarm } from \"./feishuAlarm\";\nimport { stringifyError } from \"./index\";\nimport { ProxyAgent } from \"./proxy\";\n\n/** 需要 @所有人 的高危错误：风控挑战、限流、鉴权失效 */\nconst ALARM_STATUS = new Set([401, 403, 429, 461, 471]);\n\n/**\n * 判断是否为本机地址（localhost / 回环 IP / .local 等）。\n *\n * 本机地址上的失败来自本地服务或单元测试，不是线上问题，不该进告警群。\n * 用 URL 解析而非字符串包含匹配：`https://api.example.com/?cb=localhost` 这类\n * 参数里带 localhost 的线上地址不能被误判成本机。\n */\nexport function isLocalAddress(url: string): boolean {\n    let hostname: string;\n    try {\n        hostname = new URL(url).hostname.toLowerCase();\n    } catch {\n        // 解析不了（相对路径等）就不当作本机，宁可多报也不要漏掉线上问题\n        return false;\n    }\n\n    // IPv6 回环 ::1 经 URL 解析后带方括号\n    if (hostname === \"localhost\" || hostname === \"::1\" || hostname === \"[::1]\") return true;\n    if (hostname.endsWith(\".localhost\") || hostname.endsWith(\".local\")) return true;\n    // 整个 127.0.0.0/8 都是回环\n    if (/^127\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/.test(hostname)) return true;\n    if (hostname === \"0.0.0.0\") return true;\n\n    return false;\n}\n\n/**\n * 常见 HTTP 状态码 → 用户可读提示。\n * axios 对 4xx 抛 ERR_BAD_REQUEST、5xx 抛 ERR_BAD_RESPONSE，两者共用这份映射。\n */\nconst HTTP_STATUS_MESSAGE: Record<number, string> = {\n    400: \"请求参数错误，请检查参数格式是否正确！\",\n    401: \"登录状态已失效，请重新登录后重试！\",\n    403: \"没有访问权限，账号可能受限或签名已失效！\",\n    404: \"请求的资源不存在，请检查接口地址！\",\n    405: \"请求方法不被允许，请检查接口调用方式！\",\n    406: \"服务端无法返回可接受的内容格式！\",\n    407: \"代理需要身份验证，请检查代理配置！\",\n    408: \"请求超时，请检查网络连接！\",\n    409: \"请求冲突，资源状态已变更，请刷新后重试！\",\n    410: \"请求的资源已被移除！\",\n    412: \"请求前置条件不满足，请刷新后重试！\",\n    413: \"提交内容过大，请压缩或分批后重试！\",\n    414: \"请求地址过长，请检查参数！\",\n    415: \"不支持的内容类型，请检查请求格式！\",\n    422: \"请求内容校验失败，请检查参数内容！\",\n    423: \"资源已被锁定，请稍后重试！\",\n    429: \"请求过于频繁，请稍后重试！\",\n    431: \"请求头过大，请清理 Cookie 后重试！\",\n    451: \"内容不合规或因法律原因被拒绝！\",\n    // 小红书风控验证码挑战：461/471 并非参数错误，响应体通常是空的\n    // {\"code\":0,\"success\":true,\"data\":{}}，验证信息在 Verifytype/Verifyuuid 响应头里。\n    461: \"账号可能受限，请在网页上完成验证后重试！\",\n    471: \"账号可能受限，请在网页上完成验证后重试！\",\n    500: \"服务器内部错误，请稍后重试！\",\n    501: \"服务端不支持该请求，请稍后重试！\",\n    502: \"网关错误，请稍后重试！\",\n    503: \"服务暂时不可用，请稍后重试！\",\n    504: \"网关超时，请稍后重试！\",\n    507: \"服务端存储空间不足，请稍后重试！\",\n    509: \"服务带宽超限，请稍后重试！\",\n    520: \"服务端返回未知错误，请稍后重试！\",\n    521: \"源站拒绝连接，请稍后重试！\",\n    522: \"源站连接超时，请稍后重试！\",\n    524: \"源站响应超时，请稍后重试！\",\n};\n\nexport class Http {\n    private readonly apiClient: AxiosInstance;\n    public logger?: LoggerImplement;\n    public proxyInfo?: string;\n    private readonly platform?: string; // 业务标识（xiaohongshu、douyin、weixin等）\n    private readonly agentPromise?: Promise<{\n        ip: string;\n        port: string;\n        agent: Agent | null;\n    } | null> = undefined;\n\n    static handleApiError(error: unknown): ResponseData {\n        // 如果错误已经是 ResponseData 格式，直接抛出。\n        // 注意只判断键存在是不够的：服务端返回 {code, message: undefined} 时会原样透传，\n        // 下游 `${error.message}` 就会打出字面量 \"undefined\"，因此这里补一个文案兜底。\n        if (error && typeof error === \"object\" && \"code\" in error && \"message\" in error) {\n            const resp = error as ResponseData;\n            if (typeof resp.message !== \"string\" || !resp.message.trim()) {\n                return { ...resp, message: USER_MESSAGE.SYSTEM_ERROR };\n            }\n            return resp;\n        }\n\n        // 处理其他类型的错误：用户侧给统一兜底文案，原始 error 仍保留在 data 里便于排查\n        return {\n            code: 500,\n            message: USER_MESSAGE.SYSTEM_ERROR,\n            data: error,\n        };\n    }\n\n    constructor(\n        config?: CreateAxiosDefaults,\n        logger?: LoggerImplement,\n        addr?: string | null,\n        accountId?: number,\n        platform?: string, // 业务标识，如 \"xiaohongshu\"、\"douyin\"、\"weixin\" 等\n    ) {\n        this.apiClient = axios.create({\n            ...config,\n            // proxy: {\n            //     host: \"127.0.0.1\", // 根据你的代理服务设置\n            //     port: 8888,\n            //     protocol: \"http\", // 可选\n            // },\n        });\n        this.logger = logger;\n        this.platform = platform;\n\n        if (addr) this.agentPromise = ProxyAgent({ logger }, addr, accountId);\n\n        this.addResponseInterceptor(() => undefined);\n    }\n\n    public clearResponseInterceptors(): void {\n        const interceptors = axios.interceptors.response as unknown as {\n            handlers: unknown[];\n            clear: () => void;\n        };\n\n        // 清除之前的拦截器\n        if (interceptors.handlers.length > 0) {\n            axios.interceptors.response.clear();\n        }\n    }\n\n    // 添加响应拦截器\n    // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n    public addResponseInterceptor<T = any>(findError: (response: AxiosResponse<T>) => ResponseData | undefined): void {\n        const interceptors = this.apiClient.interceptors.response as unknown as {\n            handlers: unknown[];\n            clear: () => void;\n        };\n\n        // 清除之前的拦截器，避免重复添加\n        if (interceptors.handlers.length > 0) {\n            this.apiClient.interceptors.response.clear();\n        }\n\n        this.apiClient.interceptors.response.use(\n            (response) => {\n                // 检查响应中的 errno 字段\n                const error = findError(response);\n\n                if (error) {\n                    return Promise.reject(\n                        Object.assign(error, {\n                            extra: {\n                                method: response.config.method,\n                                url: response.config.url,\n                            },\n                        }),\n                    );\n                }\n\n                return response;\n            },\n            (error: AxiosError) => {\n                const foundError = findError(error.response as AxiosResponse<T>);\n\n                // 创建标准错误响应格式\n                const errorResponse: ResponseData = {\n                    // 单独拦截401的状态码，映射为400，避免触发绘文平台的鉴权错误处理逻辑\n                    code: error.response?.status || 500,\n                    message: error.message || \"\",\n                    data: error.response?.data,\n                    extra: {\n                        method: error.config?.method,\n                        url: error.config?.url,\n                        isProxyRequest: !!(error.config && (error.config.httpAgent || error.config.httpsAgent)),\n                        params: error.config?.params,\n                        data: error.config?.data,\n                        serverDate: error.response?.headers?.date, // 服务端时间（用于时钟漂移检测）\n                    },\n                };\n\n                if (foundError) Object.assign(errorResponse, foundError);\n\n                if (error.response?.status === 403) {\n                    this.logger?.warn(`[403 详细信息] URL: ${error.config?.url}`);\n                    this.logger?.warn(`[403 响应头] ${JSON.stringify(error.response?.headers || {})}`);\n                    this.logger?.warn(`[403 响应体] ${JSON.stringify(error.response?.data || null)}`);\n                    const verifyDecision = error.response?.headers?.[\"x-tt-verify-passport-decision\"];\n                    if (verifyDecision) {\n                        this.logger?.warn(`[403 验证决策] x-tt-verify-passport-decision: ${verifyDecision}`);\n                    }\n                }\n\n                // 小红书风控验证码挑战：461/471 的响应体为空对象，唯一有效信息在响应头\n                // Verifytype / Verifyuuid（另有 Verifybiz / Verifyredirecturl），必须打出来才能定位。\n                if (error.response?.status === 461 || error.response?.status === 471) {\n                    const h = (error.response?.headers ?? {}) as Record<string, unknown>;\n                    const pick = (name: string) => h[name] ?? h[name.toLowerCase()];\n                    this.logger?.warn(\n                        `[${error.response.status} 风控验证] URL: ${error.config?.url} ` +\n                            `Verifytype: ${pick(\"Verifytype\") ?? \"-\"} ` +\n                            `Verifyuuid: ${pick(\"Verifyuuid\") ?? \"-\"} ` +\n                            `Verifybiz: ${pick(\"Verifybiz\") ?? \"-\"}`,\n                    );\n                    this.logger?.warn(`[${error.response.status} 响应头] ${JSON.stringify(h)}`);\n                    errorResponse.extra = {\n                        ...errorResponse.extra,\n                        verifyType: pick(\"Verifytype\"),\n                        verifyUuid: pick(\"Verifyuuid\"),\n                        verifyBiz: pick(\"Verifybiz\"),\n                    };\n                }\n\n                // 如果服务端返回了详细错误信息，可以使用服务端的错误信息\n                if (error.response?.data) {\n                    if (typeof error.response.data === \"object\") {\n                        // 如果服务端返回的是对象，可以尝试提取错误信息\n                        // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n                        const serverError = error.response.data as any;\n\n                        errorResponse.message = serverError.msg || serverError.message; // 匹配小红书与普通错误message\n\n                        // 可以保留原始错误数据\n                        errorResponse.data = serverError;\n                    }\n                }\n                let _message = error.message || \"\";\n                // ✅ 情况二：网络错误（没有 response）\n                if (error.code) {\n                    errorResponse.code = errorResponse.code === 401 ? 414 : errorResponse.code; // 屏蔽401错误，避免触发绘文平台鉴权逻辑\n\n                    switch (error.code) {\n                        case \"ECONNABORTED\":\n                            _message = \"请求超时，请检查网络连接！\";\n                            break;\n                        case \"ECONNRESET\":\n                            _message = \"连接被重置，请检查网络或稍后重试！\";\n                            break;\n                        case \"ENOTFOUND\":\n                            _message = \"域名解析失败，请检查 URL 是否正确！\";\n                            break;\n                        case \"ETIMEDOUT\":\n                            _message = \"网络请求超时，请检查网络连接！\";\n                            break;\n                        case \"ECONNREFUSED\":\n                            _message = \"服务器拒绝连接，请稍后重试！\";\n                            break;\n                        case \"EAI_AGAIN\":\n                            _message = \"DNS 查询超时，请稍后重试！\";\n                            break;\n                        case \"ERR_BAD_REQUEST\": {\n                            // 根据 HTTP 状态码细化错误提示\n                            const status = error.response?.status;\n                            _message =\n                                (status && HTTP_STATUS_MESSAGE[status]) || `请求失败，状态码${status ?? \"unknown\"}！`;\n                            break;\n                        }\n                        case \"ERR_BAD_RESPONSE\": {\n                            const status = error.response?.status;\n                            _message =\n                                (status && HTTP_STATUS_MESSAGE[status]) ||\n                                `服务器响应异常 (${status ?? \"unknown\"})，请稍后重试！`;\n                            break;\n                        }\n                        case \"ERR_CANCELED\":\n                            errorResponse.code = 414; // 阻止前端报错\n                            _message = \"请求连接超时，请稍候重试！\";\n                            if (errorResponse.extra?.isProxyRequest) {\n                                _message = \"代理连接建立超时，请更换区域或稍后重试！\";\n                                errorResponse.code = 599;\n                                errorResponse.data = this.proxyInfo\n                                    ? createHash(\"md5\").update(this.proxyInfo.split(\":\")[0]).digest(\"hex\") +\n                                      this.proxyInfo.split(\":\")[1]\n                                    : {};\n                            }\n                            break;\n                        default: {\n                            this.logger?.debug(`未处理的网络错误代码: ${error.code} ${error.message}`, {\n                                errorString: stringifyError(error),\n                            });\n                            // 未知 axios error code 但带状态码时，仍优先给出状态码对应的可读提示；\n                            // 兜底文案不拼 error.message —— 原始信息已由上面的 logger.debug 记录\n                            const status = error.response?.status;\n                            _message = (status && HTTP_STATUS_MESSAGE[status]) || USER_MESSAGE.NETWORK_ERROR;\n                            break;\n                        }\n                    }\n                }\n                // 网络层错误（无服务端响应体）：errorResponse.message 此时仍是 axios 原始文案\n                // （如 \"timeout of 3000ms exceeded\"），应优先使用上面归一化后的友好文案 _message。\n                // 有服务端响应体时才保留服务端返回的 message。\n                if (error.code && !error.response?.data) {\n                    errorResponse.message = _message || errorResponse.message;\n                } else {\n                    errorResponse.message = errorResponse.message ? errorResponse.message : _message;\n                }\n\n                if (errorResponse.message === \"canceled\") {\n                    const message = errorResponse.extra?.isProxyRequest\n                        ? \"代理连接建立超时，请更换区域或稍后重试！\"\n                        : \"网络请求超时，请稍后重试！\";\n                    errorResponse.message = message;\n                }\n\n                if (error.message.includes(\"Proxy connection ended\")) {\n                    // 代理Connect阶段错误重写！\n                    errorResponse.message = \"所在区域代理连接超时，请更换区域或稍后重试！\";\n                }\n\n                // 告警所需的原始信息挂到 extra 上，由 api() 在重试彻底耗尽后再上报。\n                // 不在拦截器里直接上报：拦截器对每一次失败尝试都会触发，重试成功的请求\n                // 用户无感知，却已经把告警群刷了一轮。\n                errorResponse.extra = {\n                    ...errorResponse.extra,\n                    alarmStatus: error.response?.status,\n                    alarmErrorCode: error.code,\n                };\n\n                // 返回标准化的错误响应\n                throw errorResponse;\n            },\n        );\n    }\n\n    /**\n     * 请求最终失败（重试耗尽或错误不可重试）后上报飞书告警。\n     * 告警所需的 status / axios error code 由响应拦截器写入 error.extra。\n     *\n     * 两类请求不上报：本机地址（localhost / 127.0.0.1 等）与拿不到 URL 的错误。\n     * 前者是本地服务或测试用例，后者没有目标地址无法定位，都属于告警噪音。\n     */\n    private reportRequestFailure(config: AxiosRequestConfig, error: ResponseData, attempts: number): void {\n        const status = error.extra?.alarmStatus as number | undefined;\n        const axiosCode = error.extra?.alarmErrorCode as string | undefined;\n        const method = (config.method || \"get\").toUpperCase();\n\n        // 拼上 baseURL：不少调用点用 baseURL + 相对 url（如 sessionCheck），\n        // 只取 config.url 会让 stage 退化成看不出目标服务的相对路径甚至 \"-\"。\n        const baseURL = config.baseURL || this.apiClient.defaults.baseURL || \"\";\n        const fullUrl = config.url\n            ? /^https?:\\/\\//.test(config.url)\n                ? config.url\n                : `${baseURL.replace(/\\/$/, \"\")}${config.url}`\n            : baseURL;\n\n        // 无 URL：定位不到目标接口，上报了也只是一条 \"GET -\" 的噪音\n        if (!fullUrl) {\n            this.logger?.debug(`[告警跳过] 请求失败但无 URL，不上报: ${error.message}`);\n            return;\n        }\n\n        // 本机地址：本地服务 / 单元测试，不是线上问题\n        if (isLocalAddress(fullUrl)) {\n            this.logger?.debug(`[告警跳过] 本机地址不上报: ${fullUrl}`);\n            return;\n        }\n\n        // error.message 可能是 undefined（服务端返回 {code} 但无 msg/message 字段），\n        // 直接模板拼接会在群里打出字面量 \"undefined\"，对排查毫无价值。\n        const rawMsg = typeof error.message === \"string\" && error.message.trim() ? error.message : \"\";\n        const baseMsg = rawMsg || `请求失败（无错误文案，code=${error.code ?? \"unknown\"}）`;\n        const retriedSuffix = attempts > 0 ? `（已重试${attempts}次仍失败）` : \"\";\n\n        reportFeishuAlarm({\n            level: status && ALARM_STATUS.has(status) ? \"alarm\" : \"warning\",\n            platform: \"@iflyrpa/playwright\",\n            source: \"http\",\n            stage: `${method} ${fullUrl}`,\n            errorType: status ? `HTTP_${status}` : axiosCode || \"NETWORK_ERROR\",\n            code: error.code,\n            msg: `${baseMsg}${retriedSuffix}`,\n            url: fullUrl,\n            title: \"RPA接口异常\",\n        });\n    }\n\n    // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n    public async api<T = any>(\n        config: AxiosRequestConfig,\n        options?: {\n            retries?: number;\n            retryDelay?: number;\n            timeout?: number;\n            onUploadProgress?: (progressEvent: any) => void;\n            /**\n             * 外部取消信号（用于用户主动取消上传等场景）。\n             * 注意：不能直接用 config.signal —— 下面会用内部 AbortController 覆盖它做超时兜底，\n             * 所以外部信号必须在这里传入，由内部 controller 代理转发。\n             */\n            signal?: AbortSignal;\n        },\n    ): Promise<T> {\n        const retries = options?.retries ?? 0; // 默认不重试\n        const retryDelay = options?.retryDelay ?? 500;\n        const reqTimeout = options?.timeout ?? 60 * 1000; // 60s 默认超时\n        const externalSignal = options?.signal;\n        let agent: { ip: string; port: string; agent: Agent | null } | null | undefined;\n        // let isForceRefreshProxy = false;\n        const sessionRt = async (Rtimes: number): Promise<T> => {\n            try {\n                // if (this.ip) {\n                // \tconst cacheKey = `${this.ip}|${this.adr ?? \"\"}|${this.accountId ?? \"\"}`;\n                //\n                //     if( this.adr && Rtimes === 1 ) {\n                //         this.adr = \"\";\n                //         Http.agentCache.delete(cacheKey);\n                //     }\n                //     if( Rtimes%2 === 0 && Rtimes > 0 ) {\n                //         // 重试时清除缓存，并强制刷新代理 refresh = true\n                //         Http.agentCache.delete(cacheKey);\n                //         isForceRefreshProxy = true;\n                //         this.task.debug && this.task.logger.info(`进入第${Rtimes+1}次重试，强制刷新代理！`);\n                //     }\n                //\n                //     if (Http.agentCache.has(cacheKey)) {\n                //         this.agent = Http.agentCache.get(cacheKey) ?? null;\n                //\n                //     } else if (Http.agentPromiseCache.has(cacheKey)) {\n                //         this.task.debug && this.task.logger.info(\"代理正在创建，等待中...\");\n                //         const agentResult = await Http.agentPromiseCache.get(cacheKey);\n                //         this.agent = agentResult?.agent ?? null;\n                //     } else {\n                //         const promise = ProxyAgent(this.ip, this.adr, this.accountId, isForceRefreshProxy);\n                //\n                //         Http.agentPromiseCache.set(cacheKey, promise);\n                //\n                //         this.agent = (await promise)?.agent;\n                //\n                //         if (this.agent) {\n                //             this.agent.options.keepAlive = true;\n                //             Http.agentCache.set(cacheKey, this.agent);\n                //         } else {\n                //             Http.agentCache.set(cacheKey, null);\n                //         }\n                //         Http.agentPromiseCache.delete(cacheKey);\n                //     }\n                // }\n                //\n                // if (this.agent === null) {\n                //     if (Rtimes === retries && this.ip) {\n                //         return Promise.reject({\n                //             code: 400,\n                //             message: \"\",\n                //             data: {\n                //                 code: 400, // 仅配合sessioncheck使用\n                //                 msg: \"当前所选区域暂不支持!\"\n                //             }\n                //         });\n                //     }\n                //     if (this.adr) {\n                //        throw {code: 500, message: \"\", data: {}}; // 触发重试\n                //     }\n                // }\n\n                this.proxyInfo = agent ? `${agent.ip}:${agent.port}` : undefined;\n\n                // 请求级别超时控制（即使代理层没超时，也能强制中断）\n                // 注意：AbortController 的兜底超时必须比 axios 自身 timeout 略长，\n                // 否则二者同时到点时 AbortController 会先触发 ERR_CANCELED(code 414)，\n                // 导致超时错误落不进重试白名单 [0,500,502,503,504,599]，使 retries 形同虚设。\n                // 让 axios 先以 ECONNABORTED(code 500) 触发常规 socket 超时即可正常重试，\n                // AbortController 仅作为 DNS/连接阶段卡死的最终兜底。\n                const controller = new AbortController();\n                const timeoutId = setTimeout(() => controller.abort(), reqTimeout + 500); // 全阶段超时兜底\n\n                // 外部取消信号代理到内部 controller：外部一 abort，本次请求立即中断\n                const forwardAbort = () => controller.abort();\n                if (externalSignal) {\n                    if (externalSignal.aborted) controller.abort();\n                    else externalSignal.addEventListener(\"abort\", forwardAbort, { once: true });\n                }\n\n                const response = await this.apiClient<T>({\n                    ...config,\n                    timeout: reqTimeout, // Axios 自身的超时 http阶段，tcp socket已建立情况下的超时\n                    signal: controller.signal, // 自定义超时保护信号，用户axios监听\n                    onUploadProgress: options?.onUploadProgress, // 透传上传进度回调\n                    ...(agent ? { httpAgent: agent.agent, httpsAgent: agent.agent } : {}),\n                }).finally(() => {\n                    clearTimeout(timeoutId);\n                    externalSignal?.removeEventListener(\"abort\", forwardAbort);\n                });\n\n                return response.data;\n            } catch (error) {\n                const handledError: ResponseData = Http.handleApiError(error);\n                const isRetry = [0, 500, 502, 503, 504, 599].includes(handledError.code);\n\n                if (Rtimes < retries && isRetry) {\n                    const url = config.url || \"\";\n                    // 指数退避：对端超时/5xx 时固定小间隔连打只会加重拥塞，\n                    // 上限 5s 避免把单次调用的总耗时拖得过长。\n                    const backoff = Math.min(retryDelay * 2 ** Rtimes, 5000);\n                    this.logger?.warn(\n                        `进入第${Rtimes + 1}次重试！错误码: ${handledError.code}, 等待: ${backoff}ms, 请求地址: ${url}`,\n                    );\n                    await new Promise((resolve) => setTimeout(resolve, backoff));\n                    return sessionRt(Rtimes + 1);\n                }\n                // 重试全部耗尽（或该错误不可重试）才上报：此时用户确实感知到了失败\n                this.reportRequestFailure(config, handledError, Rtimes);\n                return Promise.reject(handledError);\n            }\n        };\n        if (this.agentPromise) {\n            const requestUrl = config.url || \"\";\n            const platformTag = this.platform ? `[${this.platform}]` : \"\";\n            this.logger?.info(`${platformTag}[代理请求] 接口: ${requestUrl}`);\n            agent = await this.agentPromise;\n            if (agent) {\n                this.logger?.info(`${platformTag}[代理请求] 代理地址: ${agent.ip}:${agent.port}`);\n            }\n        }\n\n        return sessionRt(0);\n    }\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport type { CommonAction, Page, ResponseData } from \"@iflyrpa/share\";\nimport domSerializer from \"dom-serializer\";\nimport { type ChildNode, DomHandler, type Element } from \"domhandler\";\nimport { DomUtils, Parser } from \"htmlparser2\";\nimport mime from \"mime-types\";\n\nimport { Http } from \"./http\";\n\n/**\n * 生成两数之间的随机整数\n * @param min\n * @param max\n * @returns\n */\nexport function getRandomInRange(min: number, max: number) {\n    return Math.floor(Math.random() * (max - min + 1)) + min;\n}\n\nexport const getFileState = (filePath: string) => {\n    // 获取文件名\n    const filename = path.basename(filePath);\n    // 获取文件类型\n    const fileType = mime.lookup(filePath);\n    const stats = fs.statSync(filePath);\n    // 获取文件大小\n    const fileSize = stats.size;\n    // 获取最后修改时间\n    const lastModifiedDate = stats.mtime;\n\n    return {\n        name: filename,\n        type: fileType,\n        size: fileSize,\n        lastModifiedDate: lastModifiedDate.toString(),\n    };\n};\n\nexport type AspectRatio = [number, number];\nexport type CropCoordinates = {\n    x1: number;\n    y1: number;\n    x2: number;\n    y2: number;\n};\n\n/**\n * 获取特定的比例切割图片，获取切割的坐标\n * @param width 图片长度\n * @param height 图片高度\n * @param aspectRatio 切割比例：[宽度，高度]\n * @returns\n */\nexport const calculateCropCoordinates = (width: number, height: number, aspectRatio: AspectRatio): CropCoordinates => {\n    const targetRatio = aspectRatio[0] / aspectRatio[1];\n    let cropWidth: number;\n    let cropHeight: number;\n\n    if (width / height > targetRatio) {\n        // 图片过宽，需要裁切宽度\n        cropHeight = height;\n        cropWidth = height * targetRatio;\n    } else {\n        // 图片过高，需要裁切高度\n        cropWidth = width;\n        cropHeight = width / targetRatio;\n    }\n\n    const x1 = (width - cropWidth) / 2;\n    const y1 = (height - cropHeight) / 2;\n    const x2 = x1 + cropWidth;\n    const y2 = y1 + cropHeight;\n\n    // 返回百分比坐标\n    return {\n        x1: x1 / width,\n        y1: y1 / height,\n        x2: x2 / width,\n        y2: y2 / height,\n    };\n};\n\n// 提取 html 中的 img 标签\nexport const extractImgTag = (html: string) => {\n    const srcList: string[] = [];\n\n    const parser = new Parser({\n        onopentag(name, attributes) {\n            const src = attributes.src?.trim();\n            const currentSrc = attributes.currentSrc?.trim();\n            if (name === \"img\" && (src || currentSrc)) {\n                srcList.push(src || currentSrc);\n            }\n        },\n    });\n\n    parser.write(html);\n    parser.end();\n\n    return srcList;\n};\n\n/**\n * 格式化 HTML 内容，删除无效的 section（没有 img 或 img src 为空）\n * @param html\n */\nexport const formatSectionHtml = (html: string): string => {\n    const handler = new DomHandler();\n    const parser = new Parser(handler, {\n        decodeEntities: false,\n    });\n\n    parser.write(html);\n    parser.end();\n\n    const dom = handler.dom;\n\n    // 找出所有 section\n    const sections = DomUtils.findAll((node) => node.type === \"tag\" && node.name === \"section\", dom) as Element[];\n\n    sections.forEach((section) => {\n        // 找出 section 内的 img\n        const imgs = DomUtils.findAll(\n            (node) => node.type === \"tag\" && node.name === \"img\",\n            section.children || [],\n        ) as Element[];\n\n        // 没有 img，不处理（避免误删）\n        if (imgs.length === 0) return;\n\n        const hasValidImg = imgs.some((img) => {\n            const src = img.attribs?.src?.trim();\n            return Boolean(src);\n        });\n\n        // section 内不存在任何有效 img，删除整个 section\n        if (!hasValidImg) {\n            DomUtils.removeElement(section);\n        }\n    });\n\n    return domSerializer(dom, { encodeEntities: false });\n};\n/**\n * 时间格式化\n * @param time\n * @param format 默认 yyyy-MM-dd HH:mm\n * @returns 时间字符串\n */\nexport namespace TimeFormatter {\n    export function format(timestamp: number, formatStr = \"yyyy-MM-dd hh:mm\"): string {\n        // 自动判断：如果是10位（秒），就转为毫秒\n        if (timestamp.toString().length === 10) {\n            timestamp *= 1000;\n        }\n\n        const date = new Date(timestamp);\n\n        const map: Record<string, string> = {\n            yyyy: String(date.getFullYear()),\n            yy: String(date.getFullYear()).slice(-2),\n            MM: String(date.getMonth() + 1).padStart(2, \"0\"),\n            dd: String(date.getDate()).padStart(2, \"0\"),\n            hh: String(date.getHours()).padStart(2, \"0\"),\n            mm: String(date.getMinutes()).padStart(2, \"0\"),\n            ss: String(date.getSeconds()).padStart(2, \"0\"),\n            M: String(date.getMonth() + 1), // 月不带前导零\n            d: String(date.getDate()), // 日不带前导零\n            h: String(date.getHours()), // 不带前导零\n            m: String(date.getMinutes()), // 不带前导零\n            s: String(date.getSeconds()), // 不带前导零\n        };\n\n        return formatStr.replace(/yyyy|yy|MM|dd|hh|mm|ss|M|d|h|m|s/g, (key) => map[key]);\n    }\n}\n\nexport const replaceImgSrc = (html: string, callback: (dom: Element) => Element) => {\n    let lastedHtml = html;\n\n    const isImageTag = (node: ChildNode): node is Element => node.type === \"tag\" && node.name === \"img\";\n\n    const traverseDom = (node: ChildNode) => {\n        if (DomUtils.hasChildren(node)) {\n            for (const child of node.children) {\n                if (isImageTag(child)) {\n                    callback(child);\n                }\n                traverseDom(child);\n            }\n        }\n    };\n\n    const handler = new DomHandler((error, dom) => {\n        if (error) {\n            console.log(error);\n        } else {\n            // 处理 DOM 节点的函数\n            dom.forEach(traverseDom);\n        }\n\n        lastedHtml = domSerializer(dom, { decodeEntities: false });\n    });\n\n    const parser = new Parser(handler, { decodeEntities: false });\n    parser.write(html);\n    parser.end();\n\n    return lastedHtml;\n};\n\nexport const stringifyError = (error: unknown) => {\n    if (error instanceof Error) {\n        return error.toString();\n    }\n\n    if (typeof error === \"object\") {\n        return JSON.stringify(error);\n    }\n\n    return error;\n};\n\n/**\n * 创建一个函数，该函数会依次执行传入的函数列表，直到有一个函数成功或所有函数都失败。\n *\n * @template P - 函数的参数类型，为一个任意长度的数组。\n * @template T - 函数的返回类型，为一个 Promise 的解析值类型。\n * @param {CommonAction<P, T>[]} actions - 一个函数列表，每个函数的类型为 `(...p: P) => Promise<T>`。\n * @returns {CommonAction<P, T>} - 返回一个新的函数，其类型与传入的函数列表中的函数类型相同。\n * 当调用该函数时，会依次执行 `actions` 中的函数，直到有一个函数成功（即返回一个解析的 Promise），\n * 或者所有函数都失败（即抛出异常）。如果所有函数都失败，则抛出最后一个错误。\n *\n * @example\n * const action1 = async (num) => {\n *   if (num > 0) return \"Action 1 succeeded\";\n *   throw new Error(\"Action 1 failed\");\n * };\n *\n * const action2 = async (num) => {\n *   if (num > 1) return \"Action 2 succeeded\";\n *   throw new Error(\"Action 2 failed\");\n * };\n *\n * const combinedAction = executeAction(action1, action2);\n *\n * (async () => {\n *   try {\n *     const result = await combinedAction(1);\n *     console.log(result); // 输出: \"Action 2 succeeded\"\n *   } catch (error) {\n *     console.error(error.message);\n *   }\n * })();\n */\nexport const executeAction = <P, T>(...actions: CommonAction<P, T>[]): CommonAction<P, T> => {\n    return async (task, params) => {\n        let result: ResponseData<T> = {\n            code: 500,\n            message: \"\",\n            // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n            data: null as any,\n        };\n\n        for (let index = 0; index < actions.length; index++) {\n            const action = actions[index];\n\n            try {\n                result = await action(task, params);\n            } catch (error) {\n                result = Http.handleApiError(error);\n            }\n\n            // code === 0 表示成功, code === 414 虽然表示失败，但是不需要继续执行后续的 action\n            if (result.code === 0 || result.code === 414) {\n                return result;\n            }\n\n            // 不是最后一个 action，上报错误信息\n            if (index !== actions.length - 1) {\n                task.logger.error(result.message, stringifyError(result.data), result.extra);\n            }\n        }\n\n        // 所有 action 都执行完毕但都失败了，返回最后一个失败结果\n        return result;\n    };\n};\n\n/**\n * 将 HTML 内容复制到剪贴板\n * @param page - 页面对象\n * @param html - HTML 内容\n * @param options - 选项，包括格式和回退\n * @returns 无返回值\n */\nexport async function copyHtmlToClipboard(page: Page, html: string, options = { format: \"text/html\", fallback: true }) {\n    try {\n        // 尝试使用原生 API\n        await page.evaluate(\n            async ({ htmlContent, format }) => {\n                const blob = new Blob([htmlContent], { type: format });\n                await navigator.clipboard.write([new ClipboardItem({ [format]: blob })]);\n            },\n            { htmlContent: html, format: options.format },\n        );\n    } catch (error) {\n        if (options.fallback) {\n            // 回退到 DOM 操作\n            await page.evaluate((htmlContent) => {\n                const div = document.createElement(\"div\");\n                div.contentEditable = \"true\";\n                div.style.cssText = `\n          position: fixed;\n          left: -9999px;\n          opacity: 0;\n          pointer-events: none;\n        `;\n\n                div.innerHTML = htmlContent;\n                document.body.appendChild(div);\n\n                const range = document.createRange();\n                range.selectNodeContents(div);\n\n                // biome-ignore lint/style/noNonNullAssertion: <忽略错误>\n                const selection = window.getSelection()!;\n                selection.removeAllRanges();\n                selection.addRange(range);\n\n                document.execCommand(\"copy\");\n                document.body.removeChild(div);\n                selection.removeAllRanges();\n            }, html);\n        }\n    }\n}\n\n/**\n * 通用弹窗监听处理器\n * @param page - Playwright 页面对象\n * @param popupSelector - 弹窗的选择器（字符串或 Locator）\n * @param popKey - 弹窗中的唯一键（字符串）\n * @param buttonSelector - 弹窗中需要点击的按钮选择器\n * @param options - 可选配置项\n */\nexport function PopupListener(\n    page: Page,\n    popupSelector: string,\n    popKey: string,\n    buttonSelector: string,\n    options: {\n        checkInterval?: number;\n        stopAfterClick?: boolean;\n    } = {},\n) {\n    const { checkInterval = 1000, stopAfterClick = false } = options;\n\n    const popup = page.locator(popupSelector);\n    const button = page.locator(buttonSelector);\n\n    const intervalId = setInterval(async () => {\n        try {\n            if (\n                (await popup.count()) > 0 &&\n                (await popup.isVisible()) &&\n                ((await popup.textContent()) || \"\").includes(popKey)\n            ) {\n                await button.click({ force: true });\n\n                if (stopAfterClick) {\n                    clearInterval(intervalId);\n                }\n            }\n        } catch (err) {}\n    }, checkInterval);\n\n    return () => {\n        clearInterval(intervalId);\n    };\n}\n\n// 将 url 的 queryString 解析成对象\nexport const parseUrlQueryString = (url: string) => {\n    const queryStringObject: Record<string, string> = {};\n\n    // 检查 URL 是否包含查询参数\n    if (!url || !url.includes(\"?\")) {\n        return queryStringObject;\n    }\n\n    // 提取查询字符串部分\n    const queryString = url.split(\"?\")[1];\n\n    // 检查查询字符串是否为空\n    if (!queryString) {\n        return queryStringObject;\n    }\n\n    // 处理 hash 部分\n    const queryWithoutHash = queryString.split(\"#\")[0];\n\n    // 分割查询参数\n    const queryStringArray = queryWithoutHash.split(\"&\");\n\n    for (const item of queryStringArray) {\n        // 跳过空参数\n        if (!item) continue;\n\n        const equalIndex = item.indexOf(\"=\");\n\n        // 处理没有值的参数 (如 ?param)\n        if (equalIndex === -1) {\n            queryStringObject[item] = \"\";\n        } else {\n            const key = item.slice(0, equalIndex);\n            const value = item.slice(equalIndex + 1);\n\n            // 尝试解码，如果解码失败则使用原始值\n            try {\n                queryStringObject[key] = decodeURIComponent(value);\n            } catch (e) {\n                queryStringObject[key] = value;\n            }\n        }\n    }\n\n    return queryStringObject;\n};\n\n/**\n * 合并默认参数\n * @param params\n * @param defaults\n * @returns\n */\nexport const defaultParams = <P = Record<string, unknown>>(params: P, defaults: Partial<P>): P => {\n    return Object.assign({}, defaults, params);\n};\n","import { type Page, success, type UserInfo } from \"@iflyrpa/share\";\nimport fetch from \"node-fetch\";\nimport type { APIResponse } from \"playwright-core\";\nimport type { SteelAction } from \"./index\";\n\n/**\n * 百家号登录 RPA\n *\n * 流程：\n * 1. 打开百家号登录页\n * 2. 拦截二维码请求，转换为 base64 注入页面（解决跨域问题）\n * 3. 点击\"登录/注册百家号\"按钮\n * 4. 等待页面跳转到 /builder/rc/home 判断登录成功\n * 5. 通过服务端请求 getPassinfo 接口获取用户信息和 token\n * 6. 收集 cookie 并返回结果\n */\nexport const rpaAction: SteelAction = async (task, _params) => {\n    const reporter = task.reportService?.reportLoginStatus ?? (() => Promise.resolve());\n\n    let page: Page;\n    let isSelfClosing = false;\n    let handleBrowserDisconnected: (() => void) | undefined;\n    const cleanup = async () => {\n        if (handleBrowserDisconnected) {\n            task._steelBrowser?.off(\"disconnected\", handleBrowserDisconnected);\n        }\n        if (page && !page.isClosed()) {\n            await page.close().catch(() => {});\n        }\n    };\n\n    // ========== 第一步：启动浏览器并打开登录页 ==========\n    try {\n        page = await task.createPage({\n            // 先进入空白页，确保路由拦截在真正导航前就生效\n            url: \"about:blank\",\n        });\n        if (!task._session?.id) throw new Error(\"Session ID 不存在\");\n        handleBrowserDisconnected = () => {\n            if (task.debug && isSelfClosing) {\n                task.logger.info(\"执行结束，关闭浏览器！\");\n            } else {\n                task.logger.info(\"浏览器被手动释放或意外关闭！\");\n            }\n        };\n        task._steelBrowser?.on(\"disconnected\", handleBrowserDisconnected);\n    } catch (e) {\n        return { code: 414, message: `浏览器启动失败: ${e}`, data: {} };\n    }\n\n    // ========== 第二步：生成远程调试地址 ==========\n    const pageInfo = await task._client?.sessions.liveDetails(task._session.id);\n    const pageId = pageInfo?.pages[0].id ?? \"\";\n\n    const baseHost = task._session.websocketUrl?.replace(/^wss?:\\/\\//, \"\") ?? \"\";\n    const connectAddress = new URLSearchParams({ baseHost, pageId }).toString();\n\n    task.reportService?.settingSessionID?.(task._session?.id || \"\");\n\n    // 拦截明显无关的重资源，防止未登录阶段内存快速上涨\n    await page.route(\"**/*.webm\", (route) => route.abort());\n    await page.route(\"**/*.mp4\", (route) => route.abort());\n\n    // 验证码图片跨域处理：转为 data URL 后注入指定元素，确保能渲染\n    task.logger.info(\"正在设置验证码图片拦截和注入...\");\n    await page.route(\"**/cgi-bin/genimage**\", async (route) => {\n        let response: APIResponse | undefined;\n        task.logger.info(\"正在获取验证码图片...\");\n        for (let i = 0; i < 3; i++) {\n            try {\n                response = await route.fetch();\n                break;\n            } catch (error) {\n                if (i === 2) {\n                    task.logger.error(\"验证码图片获取失败:\", error);\n                    await route.abort();\n                    return;\n                }\n                await new Promise((res) => setTimeout(res, 300));\n            }\n        }\n\n        if (!response) {\n            await route.abort();\n            return;\n        }\n\n        try {\n            const buffer = await response.body();\n            const mimeType = response.headers()[\"content-type\"] || \"image/png\";\n\n            await route.fulfill({\n                status: response.status(),\n                headers: response.headers(),\n                body: buffer,\n            });\n\n            if (!mimeType.toLowerCase().includes(\"image\")) {\n                return;\n            }\n\n            const dataUrl = `data:${mimeType};base64,${buffer.toString(\"base64\")}`;\n            await page.evaluate((src) => {\n                const img = document.querySelector<HTMLImageElement>(\"#TANGRAM__PSP_4__confirmVerifyCodeImg\");\n                if (img) img.src = src;\n            }, dataUrl);\n        } catch (error) {\n            task.logger.error(\"验证码图片渲染失败:\", error);\n            await route.abort();\n        }\n    });\n\n    await page.route(\"**/*\", (route) => {\n        const request = route.request();\n        const url = request.url().toLowerCase();\n        const type = request.resourceType();\n\n        if (url.includes(\"passport.baidu.com/cgi-bin/genimage\")) {\n            // 交给下一个更具体的 genimage 路由处理（转 data URL 注入）\n            return route.fallback();\n        }\n\n        if (type === \"ping\") {\n            return route.abort();\n        }\n\n        // 活动素材与大图资源对扫码登录无必要，优先拦截\n        if (url.includes(\"pic.rmb.bdstatic.com/activity/\")) {\n            if (type === \"image\" || type === \"media\" || type === \"font\") {\n                return route.abort();\n            }\n            if ((type === \"fetch\" || type === \"xhr\") && url.includes(\".json\")) {\n                return route.abort();\n            }\n        }\n\n        return route.continue();\n    });\n\n    // ========== 第三步：拦截二维码请求并注入 base64 图片 ==========\n    // 百家号二维码图片存在跨域限制，需要拦截请求后转为 base64 注入页面\n    let hasInjectedQrcode = false;\n    await page.route(\"**/v2/api/qrcode**\", async (route, _request) => {\n        // 仅首个二维码请求做 base64 注入，避免 data:image 反复注入导致内存堆积\n        if (hasInjectedQrcode) {\n            await route.continue();\n            return;\n        }\n\n        let response: APIResponse | undefined;\n\n        // 最多重试 3 次获取二维码\n        for (let i = 0; i < 3; i++) {\n            try {\n                response = await route.fetch();\n                break;\n            } catch (error) {\n                if (i === 2) {\n                    task.logger.error(\"二维码获取失败:\", error);\n                    await route.abort();\n                    return;\n                }\n                await new Promise((res) => setTimeout(res, 1000));\n            }\n        }\n\n        if (!response) throw new Error(\"二维码响应未定义\");\n\n        try {\n            // 将二维码图片转为 base64 DataURL\n            const buffer = await response.body();\n            const mimeType = response.headers()[\"content-type\"] || \"image/png\";\n\n            // 非图片响应不注入，避免错误地生成超大 data URL\n            if (!mimeType.toLowerCase().includes(\"image\")) {\n                await route.fulfill({\n                    status: response.status(),\n                    headers: response.headers(),\n                    body: buffer,\n                });\n                return;\n            }\n\n            const base64 = buffer.toString(\"base64\");\n            const dataUrl = `data:${mimeType};base64,${base64}`;\n\n            // 正常返回响应给页面\n            await route.fulfill({\n                status: response.status(),\n                headers: response.headers(),\n                body: buffer,\n            });\n\n            // 同时将 base64 图片注入到二维码 img 元素，绕过跨域限制\n            await page.evaluate((dataUrl) => {\n                const img = document.querySelector<HTMLImageElement>(\".tang-pass-qrcode-img\");\n                if (img) img.src = dataUrl;\n            }, dataUrl);\n            hasInjectedQrcode = true;\n        } catch (error) {\n            task.logger.error(\"二维码处理失败:\", error);\n            await route.abort();\n        }\n    });\n\n    // 在所有路由规则挂载后再进入百家号登录页，避免首屏资源在拦截前就加载\n    await page.goto(\"https://baijiahao.baidu.com/builder/theme/bjh/login\", {\n        timeout: 60 * 1000,\n        waitUntil: \"commit\",\n    });\n\n    await reporter(0, \"浏览器启动成功，请登录百家号……\", { connectAddress });\n\n    // 等待页面 DOM 加载完成\n    try {\n        await page.waitForLoadState(\"domcontentloaded\", { timeout: 10000 });\n        task.logger.info(\"页面 DOM 加载完成\");\n    } catch (e) {\n        task.logger.warn(\"页面加载超时，继续执行\", { error: String(e) });\n    }\n\n    // ========== 第四步：点击登录按钮 ==========\n    try {\n        await page.getByRole(\"button\", { name: \"登录/注册百家号\" }).click({ timeout: 15 * 1000 });\n        task.logger.info(\"点击登录按钮成功\");\n    } catch (e) {\n        task.logger.warn(\"未找到登录按钮或点击失败，可能已经在登录页面\", { error: String(e) });\n    }\n\n    // ========== 第五步：等待登录成功并获取用户信息 ==========\n    let token: string | null = null;\n    let userInfo: UserInfo = { uniqueId: \"\", avatar: \"\", name: \"\" };\n    try {\n        // 等待页面跳转到登录成功页面（不设超时，允许用户慢慢登录）\n        await page.waitForURL(\"**/builder/rc/home**\", {\n            timeout: 0,\n            waitUntil: \"domcontentloaded\",\n        });\n\n        task.logger.info(\"页面已跳转到登录成功页面\");\n        await reporter(0, \"登录成功，正在获取用户信息...\", { stage: \"scanQrcode\", connectAddress });\n\n        // 通过服务端请求获取用户信息（百家号需要从 Node 端发请求获取 token）\n        const cookies = await task._steelBrowserContext?.cookies();\n        const cookieHeader = cookies?.map((c) => `${c.name}=${c.value}`).join(\"; \") || \"\";\n\n        for (let i = 0; i < 3; i++) {\n            try {\n                const res = await fetch(\"https://baijiahao.baidu.com/user-ui/cms/getPassinfo\", {\n                    method: \"GET\",\n                    headers: { cookie: cookieHeader },\n                });\n\n                if (res.ok) {\n                    token = res.headers.get(\"token\");\n                    const jsonUser = (await res.json()) as {\n                        data: { avatar: string; uk: string; displayname: string };\n                    };\n                    userInfo = {\n                        name: jsonUser.data.displayname,\n                        avatar: jsonUser.data.avatar,\n                        uniqueId: jsonUser.data.uk,\n                    };\n                    break;\n                }\n\n                if (i < 2) await new Promise((res) => setTimeout(res, 500));\n            } catch (error) {\n                if (i === 2) {\n                    task.logger.error(\"获取用户信息失败\", { error: String(error) });\n                } else {\n                    await new Promise((res) => setTimeout(res, 500));\n                }\n            }\n        }\n    } catch (e) {\n        task.logger.error(\"等待登录跳转失败\", { error: String(e) });\n        isSelfClosing = true;\n        await cleanup();\n        return { code: 500, message: \"登录失败，请重试！\", data: { stage: \"waitForLogin\", connectAddress } };\n    }\n\n    // ========== 第六步：收集 cookie 并返回结果 ==========\n    const cookie = JSON.stringify(await task._steelBrowserContext?.cookies());\n\n    if (!token) task.logger.warn(\"未获取到 token，但继续返回结果\");\n    if (!userInfo.uniqueId) task.logger.warn(\"未获取到用户信息，但继续返回结果\");\n\n    task.logger.info(\"登录成功\", { hasToken: !!token, hasUserInfo: !!userInfo.uniqueId });\n\n    isSelfClosing = true;\n    await cleanup();\n\n    return success({ connectAddress, token, cookie, userInfo }, \"登录成功！\");\n};\n","/** A special constant with type `never` */\nexport const NEVER = Object.freeze({\n    status: \"aborted\",\n});\nexport /*@__NO_SIDE_EFFECTS__*/ function $constructor(name, initializer, params) {\n    function init(inst, def) {\n        var _a;\n        Object.defineProperty(inst, \"_zod\", {\n            value: inst._zod ?? {},\n            enumerable: false,\n        });\n        (_a = inst._zod).traits ?? (_a.traits = new Set());\n        inst._zod.traits.add(name);\n        initializer(inst, def);\n        // support prototype modifications\n        for (const k in _.prototype) {\n            if (!(k in inst))\n                Object.defineProperty(inst, k, { value: _.prototype[k].bind(inst) });\n        }\n        inst._zod.constr = _;\n        inst._zod.def = def;\n    }\n    // doesn't work if Parent has a constructor with arguments\n    const Parent = params?.Parent ?? Object;\n    class Definition extends Parent {\n    }\n    Object.defineProperty(Definition, \"name\", { value: name });\n    function _(def) {\n        var _a;\n        const inst = params?.Parent ? new Definition() : this;\n        init(inst, def);\n        (_a = inst._zod).deferred ?? (_a.deferred = []);\n        for (const fn of inst._zod.deferred) {\n            fn();\n        }\n        return inst;\n    }\n    Object.defineProperty(_, \"init\", { value: init });\n    Object.defineProperty(_, Symbol.hasInstance, {\n        value: (inst) => {\n            if (params?.Parent && inst instanceof params.Parent)\n                return true;\n            return inst?._zod?.traits?.has(name);\n        },\n    });\n    Object.defineProperty(_, \"name\", { value: name });\n    return _;\n}\n//////////////////////////////   UTILITIES   ///////////////////////////////////////\nexport const $brand = Symbol(\"zod_brand\");\nexport class $ZodAsyncError extends Error {\n    constructor() {\n        super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);\n    }\n}\nexport class $ZodEncodeError extends Error {\n    constructor(name) {\n        super(`Encountered unidirectional transform during encode: ${name}`);\n        this.name = \"ZodEncodeError\";\n    }\n}\nexport const globalConfig = {};\nexport function config(newConfig) {\n    if (newConfig)\n        Object.assign(globalConfig, newConfig);\n    return globalConfig;\n}\n","// functions\nexport function assertEqual(val) {\n    return val;\n}\nexport function assertNotEqual(val) {\n    return val;\n}\nexport function assertIs(_arg) { }\nexport function assertNever(_x) {\n    throw new Error();\n}\nexport function assert(_) { }\nexport function getEnumValues(entries) {\n    const numericValues = Object.values(entries).filter((v) => typeof v === \"number\");\n    const values = Object.entries(entries)\n        .filter(([k, _]) => numericValues.indexOf(+k) === -1)\n        .map(([_, v]) => v);\n    return values;\n}\nexport function joinValues(array, separator = \"|\") {\n    return array.map((val) => stringifyPrimitive(val)).join(separator);\n}\nexport function jsonStringifyReplacer(_, value) {\n    if (typeof value === \"bigint\")\n        return value.toString();\n    return value;\n}\nexport function cached(getter) {\n    const set = false;\n    return {\n        get value() {\n            if (!set) {\n                const value = getter();\n                Object.defineProperty(this, \"value\", { value });\n                return value;\n            }\n            throw new Error(\"cached value already set\");\n        },\n    };\n}\nexport function nullish(input) {\n    return input === null || input === undefined;\n}\nexport function cleanRegex(source) {\n    const start = source.startsWith(\"^\") ? 1 : 0;\n    const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n    return source.slice(start, end);\n}\nexport function floatSafeRemainder(val, step) {\n    const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n    const stepString = step.toString();\n    let stepDecCount = (stepString.split(\".\")[1] || \"\").length;\n    if (stepDecCount === 0 && /\\d?e-\\d?/.test(stepString)) {\n        const match = stepString.match(/\\d?e-(\\d?)/);\n        if (match?.[1]) {\n            stepDecCount = Number.parseInt(match[1]);\n        }\n    }\n    const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n    const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n    const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n    return (valInt % stepInt) / 10 ** decCount;\n}\nconst EVALUATING = Symbol(\"evaluating\");\nexport function defineLazy(object, key, getter) {\n    let value = undefined;\n    Object.defineProperty(object, key, {\n        get() {\n            if (value === EVALUATING) {\n                // Circular reference detected, return undefined to break the cycle\n                return undefined;\n            }\n            if (value === undefined) {\n                value = EVALUATING;\n                value = getter();\n            }\n            return value;\n        },\n        set(v) {\n            Object.defineProperty(object, key, {\n                value: v,\n                // configurable: true,\n            });\n            // object[key] = v;\n        },\n        configurable: true,\n    });\n}\nexport function objectClone(obj) {\n    return Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));\n}\nexport function assignProp(target, prop, value) {\n    Object.defineProperty(target, prop, {\n        value,\n        writable: true,\n        enumerable: true,\n        configurable: true,\n    });\n}\nexport function mergeDefs(...defs) {\n    const mergedDescriptors = {};\n    for (const def of defs) {\n        const descriptors = Object.getOwnPropertyDescriptors(def);\n        Object.assign(mergedDescriptors, descriptors);\n    }\n    return Object.defineProperties({}, mergedDescriptors);\n}\nexport function cloneDef(schema) {\n    return mergeDefs(schema._zod.def);\n}\nexport function getElementAtPath(obj, path) {\n    if (!path)\n        return obj;\n    return path.reduce((acc, key) => acc?.[key], obj);\n}\nexport function promiseAllObject(promisesObj) {\n    const keys = Object.keys(promisesObj);\n    const promises = keys.map((key) => promisesObj[key]);\n    return Promise.all(promises).then((results) => {\n        const resolvedObj = {};\n        for (let i = 0; i < keys.length; i++) {\n            resolvedObj[keys[i]] = results[i];\n        }\n        return resolvedObj;\n    });\n}\nexport function randomString(length = 10) {\n    const chars = \"abcdefghijklmnopqrstuvwxyz\";\n    let str = \"\";\n    for (let i = 0; i < length; i++) {\n        str += chars[Math.floor(Math.random() * chars.length)];\n    }\n    return str;\n}\nexport function esc(str) {\n    return JSON.stringify(str);\n}\nexport const captureStackTrace = (\"captureStackTrace\" in Error ? Error.captureStackTrace : (..._args) => { });\nexport function isObject(data) {\n    return typeof data === \"object\" && data !== null && !Array.isArray(data);\n}\nexport const allowsEval = cached(() => {\n    // @ts-ignore\n    if (typeof navigator !== \"undefined\" && navigator?.userAgent?.includes(\"Cloudflare\")) {\n        return false;\n    }\n    try {\n        const F = Function;\n        new F(\"\");\n        return true;\n    }\n    catch (_) {\n        return false;\n    }\n});\nexport function isPlainObject(o) {\n    if (isObject(o) === false)\n        return false;\n    // modified constructor\n    const ctor = o.constructor;\n    if (ctor === undefined)\n        return true;\n    // modified prototype\n    const prot = ctor.prototype;\n    if (isObject(prot) === false)\n        return false;\n    // ctor doesn't have static `isPrototypeOf`\n    if (Object.prototype.hasOwnProperty.call(prot, \"isPrototypeOf\") === false) {\n        return false;\n    }\n    return true;\n}\nexport function shallowClone(o) {\n    if (isPlainObject(o))\n        return { ...o };\n    if (Array.isArray(o))\n        return [...o];\n    return o;\n}\nexport function numKeys(data) {\n    let keyCount = 0;\n    for (const key in data) {\n        if (Object.prototype.hasOwnProperty.call(data, key)) {\n            keyCount++;\n        }\n    }\n    return keyCount;\n}\nexport const getParsedType = (data) => {\n    const t = typeof data;\n    switch (t) {\n        case \"undefined\":\n            return \"undefined\";\n        case \"string\":\n            return \"string\";\n        case \"number\":\n            return Number.isNaN(data) ? \"nan\" : \"number\";\n        case \"boolean\":\n            return \"boolean\";\n        case \"function\":\n            return \"function\";\n        case \"bigint\":\n            return \"bigint\";\n        case \"symbol\":\n            return \"symbol\";\n        case \"object\":\n            if (Array.isArray(data)) {\n                return \"array\";\n            }\n            if (data === null) {\n                return \"null\";\n            }\n            if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n                return \"promise\";\n            }\n            if (typeof Map !== \"undefined\" && data instanceof Map) {\n                return \"map\";\n            }\n            if (typeof Set !== \"undefined\" && data instanceof Set) {\n                return \"set\";\n            }\n            if (typeof Date !== \"undefined\" && data instanceof Date) {\n                return \"date\";\n            }\n            // @ts-ignore\n            if (typeof File !== \"undefined\" && data instanceof File) {\n                return \"file\";\n            }\n            return \"object\";\n        default:\n            throw new Error(`Unknown data type: ${t}`);\n    }\n};\nexport const propertyKeyTypes = new Set([\"string\", \"number\", \"symbol\"]);\nexport const primitiveTypes = new Set([\"string\", \"number\", \"bigint\", \"boolean\", \"symbol\", \"undefined\"]);\nexport function escapeRegex(str) {\n    return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n// zod-specific utils\nexport function clone(inst, def, params) {\n    const cl = new inst._zod.constr(def ?? inst._zod.def);\n    if (!def || params?.parent)\n        cl._zod.parent = inst;\n    return cl;\n}\nexport function normalizeParams(_params) {\n    const params = _params;\n    if (!params)\n        return {};\n    if (typeof params === \"string\")\n        return { error: () => params };\n    if (params?.message !== undefined) {\n        if (params?.error !== undefined)\n            throw new Error(\"Cannot specify both `message` and `error` params\");\n        params.error = params.message;\n    }\n    delete params.message;\n    if (typeof params.error === \"string\")\n        return { ...params, error: () => params.error };\n    return params;\n}\nexport function createTransparentProxy(getter) {\n    let target;\n    return new Proxy({}, {\n        get(_, prop, receiver) {\n            target ?? (target = getter());\n            return Reflect.get(target, prop, receiver);\n        },\n        set(_, prop, value, receiver) {\n            target ?? (target = getter());\n            return Reflect.set(target, prop, value, receiver);\n        },\n        has(_, prop) {\n            target ?? (target = getter());\n            return Reflect.has(target, prop);\n        },\n        deleteProperty(_, prop) {\n            target ?? (target = getter());\n            return Reflect.deleteProperty(target, prop);\n        },\n        ownKeys(_) {\n            target ?? (target = getter());\n            return Reflect.ownKeys(target);\n        },\n        getOwnPropertyDescriptor(_, prop) {\n            target ?? (target = getter());\n            return Reflect.getOwnPropertyDescriptor(target, prop);\n        },\n        defineProperty(_, prop, descriptor) {\n            target ?? (target = getter());\n            return Reflect.defineProperty(target, prop, descriptor);\n        },\n    });\n}\nexport function stringifyPrimitive(value) {\n    if (typeof value === \"bigint\")\n        return value.toString() + \"n\";\n    if (typeof value === \"string\")\n        return `\"${value}\"`;\n    return `${value}`;\n}\nexport function optionalKeys(shape) {\n    return Object.keys(shape).filter((k) => {\n        return shape[k]._zod.optin === \"optional\" && shape[k]._zod.optout === \"optional\";\n    });\n}\nexport const NUMBER_FORMAT_RANGES = {\n    safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER],\n    int32: [-2147483648, 2147483647],\n    uint32: [0, 4294967295],\n    float32: [-3.4028234663852886e38, 3.4028234663852886e38],\n    float64: [-Number.MAX_VALUE, Number.MAX_VALUE],\n};\nexport const BIGINT_FORMAT_RANGES = {\n    int64: [/* @__PURE__*/ BigInt(\"-9223372036854775808\"), /* @__PURE__*/ BigInt(\"9223372036854775807\")],\n    uint64: [/* @__PURE__*/ BigInt(0), /* @__PURE__*/ BigInt(\"18446744073709551615\")],\n};\nexport function pick(schema, mask) {\n    const currDef = schema._zod.def;\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const newShape = {};\n            for (const key in mask) {\n                if (!(key in currDef.shape)) {\n                    throw new Error(`Unrecognized key: \"${key}\"`);\n                }\n                if (!mask[key])\n                    continue;\n                newShape[key] = currDef.shape[key];\n            }\n            assignProp(this, \"shape\", newShape); // self-caching\n            return newShape;\n        },\n        checks: [],\n    });\n    return clone(schema, def);\n}\nexport function omit(schema, mask) {\n    const currDef = schema._zod.def;\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const newShape = { ...schema._zod.def.shape };\n            for (const key in mask) {\n                if (!(key in currDef.shape)) {\n                    throw new Error(`Unrecognized key: \"${key}\"`);\n                }\n                if (!mask[key])\n                    continue;\n                delete newShape[key];\n            }\n            assignProp(this, \"shape\", newShape); // self-caching\n            return newShape;\n        },\n        checks: [],\n    });\n    return clone(schema, def);\n}\nexport function extend(schema, shape) {\n    if (!isPlainObject(shape)) {\n        throw new Error(\"Invalid input to extend: expected a plain object\");\n    }\n    const checks = schema._zod.def.checks;\n    const hasChecks = checks && checks.length > 0;\n    if (hasChecks) {\n        throw new Error(\"Object schemas containing refinements cannot be extended. Use `.safeExtend()` instead.\");\n    }\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const _shape = { ...schema._zod.def.shape, ...shape };\n            assignProp(this, \"shape\", _shape); // self-caching\n            return _shape;\n        },\n        checks: [],\n    });\n    return clone(schema, def);\n}\nexport function safeExtend(schema, shape) {\n    if (!isPlainObject(shape)) {\n        throw new Error(\"Invalid input to safeExtend: expected a plain object\");\n    }\n    const def = {\n        ...schema._zod.def,\n        get shape() {\n            const _shape = { ...schema._zod.def.shape, ...shape };\n            assignProp(this, \"shape\", _shape); // self-caching\n            return _shape;\n        },\n        checks: schema._zod.def.checks,\n    };\n    return clone(schema, def);\n}\nexport function merge(a, b) {\n    const def = mergeDefs(a._zod.def, {\n        get shape() {\n            const _shape = { ...a._zod.def.shape, ...b._zod.def.shape };\n            assignProp(this, \"shape\", _shape); // self-caching\n            return _shape;\n        },\n        get catchall() {\n            return b._zod.def.catchall;\n        },\n        checks: [], // delete existing checks\n    });\n    return clone(a, def);\n}\nexport function partial(Class, schema, mask) {\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const oldShape = schema._zod.def.shape;\n            const shape = { ...oldShape };\n            if (mask) {\n                for (const key in mask) {\n                    if (!(key in oldShape)) {\n                        throw new Error(`Unrecognized key: \"${key}\"`);\n                    }\n                    if (!mask[key])\n                        continue;\n                    // if (oldShape[key]!._zod.optin === \"optional\") continue;\n                    shape[key] = Class\n                        ? new Class({\n                            type: \"optional\",\n                            innerType: oldShape[key],\n                        })\n                        : oldShape[key];\n                }\n            }\n            else {\n                for (const key in oldShape) {\n                    // if (oldShape[key]!._zod.optin === \"optional\") continue;\n                    shape[key] = Class\n                        ? new Class({\n                            type: \"optional\",\n                            innerType: oldShape[key],\n                        })\n                        : oldShape[key];\n                }\n            }\n            assignProp(this, \"shape\", shape); // self-caching\n            return shape;\n        },\n        checks: [],\n    });\n    return clone(schema, def);\n}\nexport function required(Class, schema, mask) {\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const oldShape = schema._zod.def.shape;\n            const shape = { ...oldShape };\n            if (mask) {\n                for (const key in mask) {\n                    if (!(key in shape)) {\n                        throw new Error(`Unrecognized key: \"${key}\"`);\n                    }\n                    if (!mask[key])\n                        continue;\n                    // overwrite with non-optional\n                    shape[key] = new Class({\n                        type: \"nonoptional\",\n                        innerType: oldShape[key],\n                    });\n                }\n            }\n            else {\n                for (const key in oldShape) {\n                    // overwrite with non-optional\n                    shape[key] = new Class({\n                        type: \"nonoptional\",\n                        innerType: oldShape[key],\n                    });\n                }\n            }\n            assignProp(this, \"shape\", shape); // self-caching\n            return shape;\n        },\n        checks: [],\n    });\n    return clone(schema, def);\n}\n// invalid_type | too_big | too_small | invalid_format | not_multiple_of | unrecognized_keys | invalid_union | invalid_key | invalid_element | invalid_value | custom\nexport function aborted(x, startIndex = 0) {\n    if (x.aborted === true)\n        return true;\n    for (let i = startIndex; i < x.issues.length; i++) {\n        if (x.issues[i]?.continue !== true) {\n            return true;\n        }\n    }\n    return false;\n}\nexport function prefixIssues(path, issues) {\n    return issues.map((iss) => {\n        var _a;\n        (_a = iss).path ?? (_a.path = []);\n        iss.path.unshift(path);\n        return iss;\n    });\n}\nexport function unwrapMessage(message) {\n    return typeof message === \"string\" ? message : message?.message;\n}\nexport function finalizeIssue(iss, ctx, config) {\n    const full = { ...iss, path: iss.path ?? [] };\n    // for backwards compatibility\n    if (!iss.message) {\n        const message = unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ??\n            unwrapMessage(ctx?.error?.(iss)) ??\n            unwrapMessage(config.customError?.(iss)) ??\n            unwrapMessage(config.localeError?.(iss)) ??\n            \"Invalid input\";\n        full.message = message;\n    }\n    // delete (full as any).def;\n    delete full.inst;\n    delete full.continue;\n    if (!ctx?.reportInput) {\n        delete full.input;\n    }\n    return full;\n}\nexport function getSizableOrigin(input) {\n    if (input instanceof Set)\n        return \"set\";\n    if (input instanceof Map)\n        return \"map\";\n    // @ts-ignore\n    if (input instanceof File)\n        return \"file\";\n    return \"unknown\";\n}\nexport function getLengthableOrigin(input) {\n    if (Array.isArray(input))\n        return \"array\";\n    if (typeof input === \"string\")\n        return \"string\";\n    return \"unknown\";\n}\nexport function issue(...args) {\n    const [iss, input, inst] = args;\n    if (typeof iss === \"string\") {\n        return {\n            message: iss,\n            code: \"custom\",\n            input,\n            inst,\n        };\n    }\n    return { ...iss };\n}\nexport function cleanEnum(obj) {\n    return Object.entries(obj)\n        .filter(([k, _]) => {\n        // return true if NaN, meaning it's not a number, thus a string key\n        return Number.isNaN(Number.parseInt(k, 10));\n    })\n        .map((el) => el[1]);\n}\n// Codec utility functions\nexport function base64ToUint8Array(base64) {\n    const binaryString = atob(base64);\n    const bytes = new Uint8Array(binaryString.length);\n    for (let i = 0; i < binaryString.length; i++) {\n        bytes[i] = binaryString.charCodeAt(i);\n    }\n    return bytes;\n}\nexport function uint8ArrayToBase64(bytes) {\n    let binaryString = \"\";\n    for (let i = 0; i < bytes.length; i++) {\n        binaryString += String.fromCharCode(bytes[i]);\n    }\n    return btoa(binaryString);\n}\nexport function base64urlToUint8Array(base64url) {\n    const base64 = base64url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n    const padding = \"=\".repeat((4 - (base64.length % 4)) % 4);\n    return base64ToUint8Array(base64 + padding);\n}\nexport function uint8ArrayToBase64url(bytes) {\n    return uint8ArrayToBase64(bytes).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n}\nexport function hexToUint8Array(hex) {\n    const cleanHex = hex.replace(/^0x/, \"\");\n    if (cleanHex.length % 2 !== 0) {\n        throw new Error(\"Invalid hex string length\");\n    }\n    const bytes = new Uint8Array(cleanHex.length / 2);\n    for (let i = 0; i < cleanHex.length; i += 2) {\n        bytes[i / 2] = Number.parseInt(cleanHex.slice(i, i + 2), 16);\n    }\n    return bytes;\n}\nexport function uint8ArrayToHex(bytes) {\n    return Array.from(bytes)\n        .map((b) => b.toString(16).padStart(2, \"0\"))\n        .join(\"\");\n}\n// instanceof\nexport class Class {\n    constructor(..._args) { }\n}\n","import { $constructor } from \"./core.js\";\nimport * as util from \"./util.js\";\nconst initializer = (inst, def) => {\n    inst.name = \"$ZodError\";\n    Object.defineProperty(inst, \"_zod\", {\n        value: inst._zod,\n        enumerable: false,\n    });\n    Object.defineProperty(inst, \"issues\", {\n        value: def,\n        enumerable: false,\n    });\n    inst.message = JSON.stringify(def, util.jsonStringifyReplacer, 2);\n    Object.defineProperty(inst, \"toString\", {\n        value: () => inst.message,\n        enumerable: false,\n    });\n};\nexport const $ZodError = $constructor(\"$ZodError\", initializer);\nexport const $ZodRealError = $constructor(\"$ZodError\", initializer, { Parent: Error });\nexport function flattenError(error, mapper = (issue) => issue.message) {\n    const fieldErrors = {};\n    const formErrors = [];\n    for (const sub of error.issues) {\n        if (sub.path.length > 0) {\n            fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n            fieldErrors[sub.path[0]].push(mapper(sub));\n        }\n        else {\n            formErrors.push(mapper(sub));\n        }\n    }\n    return { formErrors, fieldErrors };\n}\nexport function formatError(error, mapper = (issue) => issue.message) {\n    const fieldErrors = { _errors: [] };\n    const processError = (error) => {\n        for (const issue of error.issues) {\n            if (issue.code === \"invalid_union\" && issue.errors.length) {\n                issue.errors.map((issues) => processError({ issues }));\n            }\n            else if (issue.code === \"invalid_key\") {\n                processError({ issues: issue.issues });\n            }\n            else if (issue.code === \"invalid_element\") {\n                processError({ issues: issue.issues });\n            }\n            else if (issue.path.length === 0) {\n                fieldErrors._errors.push(mapper(issue));\n            }\n            else {\n                let curr = fieldErrors;\n                let i = 0;\n                while (i < issue.path.length) {\n                    const el = issue.path[i];\n                    const terminal = i === issue.path.length - 1;\n                    if (!terminal) {\n                        curr[el] = curr[el] || { _errors: [] };\n                    }\n                    else {\n                        curr[el] = curr[el] || { _errors: [] };\n                        curr[el]._errors.push(mapper(issue));\n                    }\n                    curr = curr[el];\n                    i++;\n                }\n            }\n        }\n    };\n    processError(error);\n    return fieldErrors;\n}\nexport function treeifyError(error, mapper = (issue) => issue.message) {\n    const result = { errors: [] };\n    const processError = (error, path = []) => {\n        var _a, _b;\n        for (const issue of error.issues) {\n            if (issue.code === \"invalid_union\" && issue.errors.length) {\n                // regular union error\n                issue.errors.map((issues) => processError({ issues }, issue.path));\n            }\n            else if (issue.code === \"invalid_key\") {\n                processError({ issues: issue.issues }, issue.path);\n            }\n            else if (issue.code === \"invalid_element\") {\n                processError({ issues: issue.issues }, issue.path);\n            }\n            else {\n                const fullpath = [...path, ...issue.path];\n                if (fullpath.length === 0) {\n                    result.errors.push(mapper(issue));\n                    continue;\n                }\n                let curr = result;\n                let i = 0;\n                while (i < fullpath.length) {\n                    const el = fullpath[i];\n                    const terminal = i === fullpath.length - 1;\n                    if (typeof el === \"string\") {\n                        curr.properties ?? (curr.properties = {});\n                        (_a = curr.properties)[el] ?? (_a[el] = { errors: [] });\n                        curr = curr.properties[el];\n                    }\n                    else {\n                        curr.items ?? (curr.items = []);\n                        (_b = curr.items)[el] ?? (_b[el] = { errors: [] });\n                        curr = curr.items[el];\n                    }\n                    if (terminal) {\n                        curr.errors.push(mapper(issue));\n                    }\n                    i++;\n                }\n            }\n        }\n    };\n    processError(error);\n    return result;\n}\n/** Format a ZodError as a human-readable string in the following form.\n *\n * From\n *\n * ```ts\n * ZodError {\n *   issues: [\n *     {\n *       expected: 'string',\n *       code: 'invalid_type',\n *       path: [ 'username' ],\n *       message: 'Invalid input: expected string'\n *     },\n *     {\n *       expected: 'number',\n *       code: 'invalid_type',\n *       path: [ 'favoriteNumbers', 1 ],\n *       message: 'Invalid input: expected number'\n *     }\n *   ];\n * }\n * ```\n *\n * to\n *\n * ```\n * username\n *   ✖ Expected number, received string at \"username\n * favoriteNumbers[0]\n *   ✖ Invalid input: expected number\n * ```\n */\nexport function toDotPath(_path) {\n    const segs = [];\n    const path = _path.map((seg) => (typeof seg === \"object\" ? seg.key : seg));\n    for (const seg of path) {\n        if (typeof seg === \"number\")\n            segs.push(`[${seg}]`);\n        else if (typeof seg === \"symbol\")\n            segs.push(`[${JSON.stringify(String(seg))}]`);\n        else if (/[^\\w$]/.test(seg))\n            segs.push(`[${JSON.stringify(seg)}]`);\n        else {\n            if (segs.length)\n                segs.push(\".\");\n            segs.push(seg);\n        }\n    }\n    return segs.join(\"\");\n}\nexport function prettifyError(error) {\n    const lines = [];\n    // sort by path length\n    const issues = [...error.issues].sort((a, b) => (a.path ?? []).length - (b.path ?? []).length);\n    // Process each issue\n    for (const issue of issues) {\n        lines.push(`✖ ${issue.message}`);\n        if (issue.path?.length)\n            lines.push(`  → at ${toDotPath(issue.path)}`);\n    }\n    // Convert Map to formatted string\n    return lines.join(\"\\n\");\n}\n","import * as core from \"./core.js\";\nimport * as errors from \"./errors.js\";\nimport * as util from \"./util.js\";\nexport const _parse = (_Err) => (schema, value, _ctx, _params) => {\n    const ctx = _ctx ? Object.assign(_ctx, { async: false }) : { async: false };\n    const result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise) {\n        throw new core.$ZodAsyncError();\n    }\n    if (result.issues.length) {\n        const e = new (_params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n        util.captureStackTrace(e, _params?.callee);\n        throw e;\n    }\n    return result.value;\n};\nexport const parse = /* @__PURE__*/ _parse(errors.$ZodRealError);\nexport const _parseAsync = (_Err) => async (schema, value, _ctx, params) => {\n    const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n    let result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise)\n        result = await result;\n    if (result.issues.length) {\n        const e = new (params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n        util.captureStackTrace(e, params?.callee);\n        throw e;\n    }\n    return result.value;\n};\nexport const parseAsync = /* @__PURE__*/ _parseAsync(errors.$ZodRealError);\nexport const _safeParse = (_Err) => (schema, value, _ctx) => {\n    const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n    const result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise) {\n        throw new core.$ZodAsyncError();\n    }\n    return result.issues.length\n        ? {\n            success: false,\n            error: new (_Err ?? errors.$ZodError)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n        }\n        : { success: true, data: result.value };\n};\nexport const safeParse = /* @__PURE__*/ _safeParse(errors.$ZodRealError);\nexport const _safeParseAsync = (_Err) => async (schema, value, _ctx) => {\n    const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n    let result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise)\n        result = await result;\n    return result.issues.length\n        ? {\n            success: false,\n            error: new _Err(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n        }\n        : { success: true, data: result.value };\n};\nexport const safeParseAsync = /* @__PURE__*/ _safeParseAsync(errors.$ZodRealError);\nexport const _encode = (_Err) => (schema, value, _ctx) => {\n    const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n    return _parse(_Err)(schema, value, ctx);\n};\nexport const encode = /* @__PURE__*/ _encode(errors.$ZodRealError);\nexport const _decode = (_Err) => (schema, value, _ctx) => {\n    return _parse(_Err)(schema, value, _ctx);\n};\nexport const decode = /* @__PURE__*/ _decode(errors.$ZodRealError);\nexport const _encodeAsync = (_Err) => async (schema, value, _ctx) => {\n    const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n    return _parseAsync(_Err)(schema, value, ctx);\n};\nexport const encodeAsync = /* @__PURE__*/ _encodeAsync(errors.$ZodRealError);\nexport const _decodeAsync = (_Err) => async (schema, value, _ctx) => {\n    return _parseAsync(_Err)(schema, value, _ctx);\n};\nexport const decodeAsync = /* @__PURE__*/ _decodeAsync(errors.$ZodRealError);\nexport const _safeEncode = (_Err) => (schema, value, _ctx) => {\n    const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n    return _safeParse(_Err)(schema, value, ctx);\n};\nexport const safeEncode = /* @__PURE__*/ _safeEncode(errors.$ZodRealError);\nexport const _safeDecode = (_Err) => (schema, value, _ctx) => {\n    return _safeParse(_Err)(schema, value, _ctx);\n};\nexport const safeDecode = /* @__PURE__*/ _safeDecode(errors.$ZodRealError);\nexport const _safeEncodeAsync = (_Err) => async (schema, value, _ctx) => {\n    const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n    return _safeParseAsync(_Err)(schema, value, ctx);\n};\nexport const safeEncodeAsync = /* @__PURE__*/ _safeEncodeAsync(errors.$ZodRealError);\nexport const _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => {\n    return _safeParseAsync(_Err)(schema, value, _ctx);\n};\nexport const safeDecodeAsync = /* @__PURE__*/ _safeDecodeAsync(errors.$ZodRealError);\n","export const cuid = /^[cC][^\\s-]{8,}$/;\nexport const cuid2 = /^[0-9a-z]+$/;\nexport const ulid = /^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/;\nexport const xid = /^[0-9a-vA-V]{20}$/;\nexport const ksuid = /^[A-Za-z0-9]{27}$/;\nexport const nanoid = /^[a-zA-Z0-9_-]{21}$/;\n/** ISO 8601-1 duration regex. Does not support the 8601-2 extensions like negative durations or fractional/negative components. */\nexport const duration = /^P(?:(\\d+W)|(?!.*W)(?=\\d|T\\d)(\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+([.,]\\d+)?S)?)?)$/;\n/** Implements ISO 8601-2 extensions like explicit +- prefixes, mixing weeks with other units, and fractional/negative components. */\nexport const extendedDuration = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n/** A regex for any UUID-like identifier: 8-4-4-4-12 hex pattern */\nexport const guid = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/;\n/** Returns a regex for validating an RFC 9562/4122 UUID.\n *\n * @param version Optionally specify a version 1-8. If no version is specified, all versions are supported. */\nexport const uuid = (version) => {\n    if (!version)\n        return /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/;\n    return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`);\n};\nexport const uuid4 = /*@__PURE__*/ uuid(4);\nexport const uuid6 = /*@__PURE__*/ uuid(6);\nexport const uuid7 = /*@__PURE__*/ uuid(7);\n/** Practical email validation */\nexport const email = /^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$/;\n/** Equivalent to the HTML5 input[type=email] validation implemented by browsers. Source: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email */\nexport const html5Email = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n/** The classic emailregex.com regex for RFC 5322-compliant emails */\nexport const rfc5322Email = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n/** A loose regex that allows Unicode characters, enforces length limits, and that's about it. */\nexport const unicodeEmail = /^[^\\s@\"]{1,64}@[^\\s@]{1,255}$/u;\nexport const idnEmail = unicodeEmail;\nexport const browserEmail = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emoji = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nexport function emoji() {\n    return new RegExp(_emoji, \"u\");\n}\nexport const ipv4 = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nexport const ipv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/;\nexport const cidrv4 = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/([0-9]|[1-2][0-9]|3[0-2])$/;\nexport const cidrv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nexport const base64 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/;\nexport const base64url = /^[A-Za-z0-9_-]*$/;\n// based on https://stackoverflow.com/questions/106179/regular-expression-to-match-dns-hostname-or-ip-address\n// export const hostname: RegExp = /^([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+$/;\nexport const hostname = /^(?=.{1,253}\\.?$)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?)*\\.?$/;\nexport const domain = /^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}$/;\n// https://blog.stevenlevithan.com/archives/validate-phone-number#r4-3 (regex sans spaces)\nexport const e164 = /^\\+(?:[0-9]){6,14}[0-9]$/;\n// const dateSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateSource = `(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))`;\nexport const date = /*@__PURE__*/ new RegExp(`^${dateSource}$`);\nfunction timeSource(args) {\n    const hhmm = `(?:[01]\\\\d|2[0-3]):[0-5]\\\\d`;\n    const regex = typeof args.precision === \"number\"\n        ? args.precision === -1\n            ? `${hhmm}`\n            : args.precision === 0\n                ? `${hhmm}:[0-5]\\\\d`\n                : `${hhmm}:[0-5]\\\\d\\\\.\\\\d{${args.precision}}`\n        : `${hhmm}(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?`;\n    return regex;\n}\nexport function time(args) {\n    return new RegExp(`^${timeSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetime(args) {\n    const time = timeSource({ precision: args.precision });\n    const opts = [\"Z\"];\n    if (args.local)\n        opts.push(\"\");\n    // if (args.offset) opts.push(`([+-]\\\\d{2}:\\\\d{2})`);\n    if (args.offset)\n        opts.push(`([+-](?:[01]\\\\d|2[0-3]):[0-5]\\\\d)`);\n    const timeRegex = `${time}(?:${opts.join(\"|\")})`;\n    return new RegExp(`^${dateSource}T(?:${timeRegex})$`);\n}\nexport const string = (params) => {\n    const regex = params ? `[\\\\s\\\\S]{${params?.minimum ?? 0},${params?.maximum ?? \"\"}}` : `[\\\\s\\\\S]*`;\n    return new RegExp(`^${regex}$`);\n};\nexport const bigint = /^-?\\d+n?$/;\nexport const integer = /^-?\\d+$/;\nexport const number = /^-?\\d+(?:\\.\\d+)?/;\nexport const boolean = /^(?:true|false)$/i;\nconst _null = /^null$/i;\nexport { _null as null };\nconst _undefined = /^undefined$/i;\nexport { _undefined as undefined };\n// regex for string with no uppercase letters\nexport const lowercase = /^[^A-Z]*$/;\n// regex for string with no lowercase letters\nexport const uppercase = /^[^a-z]*$/;\n// regex for hexadecimal strings (any length)\nexport const hex = /^[0-9a-fA-F]*$/;\n// Hash regexes for different algorithms and encodings\n// Helper function to create base64 regex with exact length and padding\nfunction fixedBase64(bodyLength, padding) {\n    return new RegExp(`^[A-Za-z0-9+/]{${bodyLength}}${padding}$`);\n}\n// Helper function to create base64url regex with exact length (no padding)\nfunction fixedBase64url(length) {\n    return new RegExp(`^[A-Za-z0-9_-]{${length}}$`);\n}\n// MD5 (16 bytes): base64 = 24 chars total (22 + \"==\")\nexport const md5_hex = /^[0-9a-fA-F]{32}$/;\nexport const md5_base64 = /*@__PURE__*/ fixedBase64(22, \"==\");\nexport const md5_base64url = /*@__PURE__*/ fixedBase64url(22);\n// SHA1 (20 bytes): base64 = 28 chars total (27 + \"=\")\nexport const sha1_hex = /^[0-9a-fA-F]{40}$/;\nexport const sha1_base64 = /*@__PURE__*/ fixedBase64(27, \"=\");\nexport const sha1_base64url = /*@__PURE__*/ fixedBase64url(27);\n// SHA256 (32 bytes): base64 = 44 chars total (43 + \"=\")\nexport const sha256_hex = /^[0-9a-fA-F]{64}$/;\nexport const sha256_base64 = /*@__PURE__*/ fixedBase64(43, \"=\");\nexport const sha256_base64url = /*@__PURE__*/ fixedBase64url(43);\n// SHA384 (48 bytes): base64 = 64 chars total (no padding)\nexport const sha384_hex = /^[0-9a-fA-F]{96}$/;\nexport const sha384_base64 = /*@__PURE__*/ fixedBase64(64, \"\");\nexport const sha384_base64url = /*@__PURE__*/ fixedBase64url(64);\n// SHA512 (64 bytes): base64 = 88 chars total (86 + \"==\")\nexport const sha512_hex = /^[0-9a-fA-F]{128}$/;\nexport const sha512_base64 = /*@__PURE__*/ fixedBase64(86, \"==\");\nexport const sha512_base64url = /*@__PURE__*/ fixedBase64url(86);\n","// import { $ZodType } from \"./schemas.js\";\nimport * as core from \"./core.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nexport const $ZodCheck = /*@__PURE__*/ core.$constructor(\"$ZodCheck\", (inst, def) => {\n    var _a;\n    inst._zod ?? (inst._zod = {});\n    inst._zod.def = def;\n    (_a = inst._zod).onattach ?? (_a.onattach = []);\n});\nconst numericOriginMap = {\n    number: \"number\",\n    bigint: \"bigint\",\n    object: \"date\",\n};\nexport const $ZodCheckLessThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckLessThan\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const origin = numericOriginMap[typeof def.value];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        const curr = (def.inclusive ? bag.maximum : bag.exclusiveMaximum) ?? Number.POSITIVE_INFINITY;\n        if (def.value < curr) {\n            if (def.inclusive)\n                bag.maximum = def.value;\n            else\n                bag.exclusiveMaximum = def.value;\n        }\n    });\n    inst._zod.check = (payload) => {\n        if (def.inclusive ? payload.value <= def.value : payload.value < def.value) {\n            return;\n        }\n        payload.issues.push({\n            origin,\n            code: \"too_big\",\n            maximum: def.value,\n            input: payload.value,\n            inclusive: def.inclusive,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckGreaterThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckGreaterThan\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const origin = numericOriginMap[typeof def.value];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        const curr = (def.inclusive ? bag.minimum : bag.exclusiveMinimum) ?? Number.NEGATIVE_INFINITY;\n        if (def.value > curr) {\n            if (def.inclusive)\n                bag.minimum = def.value;\n            else\n                bag.exclusiveMinimum = def.value;\n        }\n    });\n    inst._zod.check = (payload) => {\n        if (def.inclusive ? payload.value >= def.value : payload.value > def.value) {\n            return;\n        }\n        payload.issues.push({\n            origin,\n            code: \"too_small\",\n            minimum: def.value,\n            input: payload.value,\n            inclusive: def.inclusive,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMultipleOf = \n/*@__PURE__*/ core.$constructor(\"$ZodCheckMultipleOf\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        var _a;\n        (_a = inst._zod.bag).multipleOf ?? (_a.multipleOf = def.value);\n    });\n    inst._zod.check = (payload) => {\n        if (typeof payload.value !== typeof def.value)\n            throw new Error(\"Cannot mix number and bigint in multiple_of check.\");\n        const isMultiple = typeof payload.value === \"bigint\"\n            ? payload.value % def.value === BigInt(0)\n            : util.floatSafeRemainder(payload.value, def.value) === 0;\n        if (isMultiple)\n            return;\n        payload.issues.push({\n            origin: typeof payload.value,\n            code: \"not_multiple_of\",\n            divisor: def.value,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckNumberFormat\", (inst, def) => {\n    $ZodCheck.init(inst, def); // no format checks\n    def.format = def.format || \"float64\";\n    const isInt = def.format?.includes(\"int\");\n    const origin = isInt ? \"int\" : \"number\";\n    const [minimum, maximum] = util.NUMBER_FORMAT_RANGES[def.format];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = def.format;\n        bag.minimum = minimum;\n        bag.maximum = maximum;\n        if (isInt)\n            bag.pattern = regexes.integer;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        if (isInt) {\n            if (!Number.isInteger(input)) {\n                // invalid_format issue\n                // payload.issues.push({\n                //   expected: def.format,\n                //   format: def.format,\n                //   code: \"invalid_format\",\n                //   input,\n                //   inst,\n                // });\n                // invalid_type issue\n                payload.issues.push({\n                    expected: origin,\n                    format: def.format,\n                    code: \"invalid_type\",\n                    continue: false,\n                    input,\n                    inst,\n                });\n                return;\n                // not_multiple_of issue\n                // payload.issues.push({\n                //   code: \"not_multiple_of\",\n                //   origin: \"number\",\n                //   input,\n                //   inst,\n                //   divisor: 1,\n                // });\n            }\n            if (!Number.isSafeInteger(input)) {\n                if (input > 0) {\n                    // too_big\n                    payload.issues.push({\n                        input,\n                        code: \"too_big\",\n                        maximum: Number.MAX_SAFE_INTEGER,\n                        note: \"Integers must be within the safe integer range.\",\n                        inst,\n                        origin,\n                        continue: !def.abort,\n                    });\n                }\n                else {\n                    // too_small\n                    payload.issues.push({\n                        input,\n                        code: \"too_small\",\n                        minimum: Number.MIN_SAFE_INTEGER,\n                        note: \"Integers must be within the safe integer range.\",\n                        inst,\n                        origin,\n                        continue: !def.abort,\n                    });\n                }\n                return;\n            }\n        }\n        if (input < minimum) {\n            payload.issues.push({\n                origin: \"number\",\n                input,\n                code: \"too_small\",\n                minimum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n        if (input > maximum) {\n            payload.issues.push({\n                origin: \"number\",\n                input,\n                code: \"too_big\",\n                maximum,\n                inst,\n            });\n        }\n    };\n});\nexport const $ZodCheckBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckBigIntFormat\", (inst, def) => {\n    $ZodCheck.init(inst, def); // no format checks\n    const [minimum, maximum] = util.BIGINT_FORMAT_RANGES[def.format];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = def.format;\n        bag.minimum = minimum;\n        bag.maximum = maximum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        if (input < minimum) {\n            payload.issues.push({\n                origin: \"bigint\",\n                input,\n                code: \"too_small\",\n                minimum: minimum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n        if (input > maximum) {\n            payload.issues.push({\n                origin: \"bigint\",\n                input,\n                code: \"too_big\",\n                maximum,\n                inst,\n            });\n        }\n    };\n});\nexport const $ZodCheckMaxSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxSize\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.size !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n        if (def.maximum < curr)\n            inst._zod.bag.maximum = def.maximum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size <= def.maximum)\n            return;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            code: \"too_big\",\n            maximum: def.maximum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMinSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinSize\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.size !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n        if (def.minimum > curr)\n            inst._zod.bag.minimum = def.minimum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size >= def.minimum)\n            return;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            code: \"too_small\",\n            minimum: def.minimum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckSizeEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckSizeEquals\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.size !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.minimum = def.size;\n        bag.maximum = def.size;\n        bag.size = def.size;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size === def.size)\n            return;\n        const tooBig = size > def.size;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            ...(tooBig ? { code: \"too_big\", maximum: def.size } : { code: \"too_small\", minimum: def.size }),\n            inclusive: true,\n            exact: true,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMaxLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxLength\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.length !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n        if (def.maximum < curr)\n            inst._zod.bag.maximum = def.maximum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const length = input.length;\n        if (length <= def.maximum)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        payload.issues.push({\n            origin,\n            code: \"too_big\",\n            maximum: def.maximum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMinLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinLength\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.length !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n        if (def.minimum > curr)\n            inst._zod.bag.minimum = def.minimum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const length = input.length;\n        if (length >= def.minimum)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        payload.issues.push({\n            origin,\n            code: \"too_small\",\n            minimum: def.minimum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckLengthEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckLengthEquals\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.length !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.minimum = def.length;\n        bag.maximum = def.length;\n        bag.length = def.length;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const length = input.length;\n        if (length === def.length)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        const tooBig = length > def.length;\n        payload.issues.push({\n            origin,\n            ...(tooBig ? { code: \"too_big\", maximum: def.length } : { code: \"too_small\", minimum: def.length }),\n            inclusive: true,\n            exact: true,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckStringFormat\", (inst, def) => {\n    var _a, _b;\n    $ZodCheck.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = def.format;\n        if (def.pattern) {\n            bag.patterns ?? (bag.patterns = new Set());\n            bag.patterns.add(def.pattern);\n        }\n    });\n    if (def.pattern)\n        (_a = inst._zod).check ?? (_a.check = (payload) => {\n            def.pattern.lastIndex = 0;\n            if (def.pattern.test(payload.value))\n                return;\n            payload.issues.push({\n                origin: \"string\",\n                code: \"invalid_format\",\n                format: def.format,\n                input: payload.value,\n                ...(def.pattern ? { pattern: def.pattern.toString() } : {}),\n                inst,\n                continue: !def.abort,\n            });\n        });\n    else\n        (_b = inst._zod).check ?? (_b.check = () => { });\n});\nexport const $ZodCheckRegex = /*@__PURE__*/ core.$constructor(\"$ZodCheckRegex\", (inst, def) => {\n    $ZodCheckStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        def.pattern.lastIndex = 0;\n        if (def.pattern.test(payload.value))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"regex\",\n            input: payload.value,\n            pattern: def.pattern.toString(),\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckLowerCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckLowerCase\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.lowercase);\n    $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckUpperCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckUpperCase\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.uppercase);\n    $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckIncludes = /*@__PURE__*/ core.$constructor(\"$ZodCheckIncludes\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const escapedRegex = util.escapeRegex(def.includes);\n    const pattern = new RegExp(typeof def.position === \"number\" ? `^.{${def.position}}${escapedRegex}` : escapedRegex);\n    def.pattern = pattern;\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.patterns ?? (bag.patterns = new Set());\n        bag.patterns.add(pattern);\n    });\n    inst._zod.check = (payload) => {\n        if (payload.value.includes(def.includes, def.position))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"includes\",\n            includes: def.includes,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckStartsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckStartsWith\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const pattern = new RegExp(`^${util.escapeRegex(def.prefix)}.*`);\n    def.pattern ?? (def.pattern = pattern);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.patterns ?? (bag.patterns = new Set());\n        bag.patterns.add(pattern);\n    });\n    inst._zod.check = (payload) => {\n        if (payload.value.startsWith(def.prefix))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"starts_with\",\n            prefix: def.prefix,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckEndsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckEndsWith\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const pattern = new RegExp(`.*${util.escapeRegex(def.suffix)}$`);\n    def.pattern ?? (def.pattern = pattern);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.patterns ?? (bag.patterns = new Set());\n        bag.patterns.add(pattern);\n    });\n    inst._zod.check = (payload) => {\n        if (payload.value.endsWith(def.suffix))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"ends_with\",\n            suffix: def.suffix,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\n///////////////////////////////////\n/////    $ZodCheckProperty    /////\n///////////////////////////////////\nfunction handleCheckPropertyResult(result, payload, property) {\n    if (result.issues.length) {\n        payload.issues.push(...util.prefixIssues(property, result.issues));\n    }\n}\nexport const $ZodCheckProperty = /*@__PURE__*/ core.$constructor(\"$ZodCheckProperty\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.check = (payload) => {\n        const result = def.schema._zod.run({\n            value: payload.value[def.property],\n            issues: [],\n        }, {});\n        if (result instanceof Promise) {\n            return result.then((result) => handleCheckPropertyResult(result, payload, def.property));\n        }\n        handleCheckPropertyResult(result, payload, def.property);\n        return;\n    };\n});\nexport const $ZodCheckMimeType = /*@__PURE__*/ core.$constructor(\"$ZodCheckMimeType\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const mimeSet = new Set(def.mime);\n    inst._zod.onattach.push((inst) => {\n        inst._zod.bag.mime = def.mime;\n    });\n    inst._zod.check = (payload) => {\n        if (mimeSet.has(payload.value.type))\n            return;\n        payload.issues.push({\n            code: \"invalid_value\",\n            values: def.mime,\n            input: payload.value.type,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckOverwrite = /*@__PURE__*/ core.$constructor(\"$ZodCheckOverwrite\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.check = (payload) => {\n        payload.value = def.tx(payload.value);\n    };\n});\n","export class Doc {\n    constructor(args = []) {\n        this.content = [];\n        this.indent = 0;\n        if (this)\n            this.args = args;\n    }\n    indented(fn) {\n        this.indent += 1;\n        fn(this);\n        this.indent -= 1;\n    }\n    write(arg) {\n        if (typeof arg === \"function\") {\n            arg(this, { execution: \"sync\" });\n            arg(this, { execution: \"async\" });\n            return;\n        }\n        const content = arg;\n        const lines = content.split(\"\\n\").filter((x) => x);\n        const minIndent = Math.min(...lines.map((x) => x.length - x.trimStart().length));\n        const dedented = lines.map((x) => x.slice(minIndent)).map((x) => \" \".repeat(this.indent * 2) + x);\n        for (const line of dedented) {\n            this.content.push(line);\n        }\n    }\n    compile() {\n        const F = Function;\n        const args = this?.args;\n        const content = this?.content ?? [``];\n        const lines = [...content.map((x) => `  ${x}`)];\n        // console.log(lines.join(\"\\n\"));\n        return new F(...args, lines.join(\"\\n\"));\n    }\n}\n","export const version = {\n    major: 4,\n    minor: 1,\n    patch: 12,\n};\n","import * as checks from \"./checks.js\";\nimport * as core from \"./core.js\";\nimport { Doc } from \"./doc.js\";\nimport { parse, parseAsync, safeParse, safeParseAsync } from \"./parse.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nimport { version } from \"./versions.js\";\nexport const $ZodType = /*@__PURE__*/ core.$constructor(\"$ZodType\", (inst, def) => {\n    var _a;\n    inst ?? (inst = {});\n    inst._zod.def = def; // set _def property\n    inst._zod.bag = inst._zod.bag || {}; // initialize _bag object\n    inst._zod.version = version;\n    const checks = [...(inst._zod.def.checks ?? [])];\n    // if inst is itself a checks.$ZodCheck, run it as a check\n    if (inst._zod.traits.has(\"$ZodCheck\")) {\n        checks.unshift(inst);\n    }\n    for (const ch of checks) {\n        for (const fn of ch._zod.onattach) {\n            fn(inst);\n        }\n    }\n    if (checks.length === 0) {\n        // deferred initializer\n        // inst._zod.parse is not yet defined\n        (_a = inst._zod).deferred ?? (_a.deferred = []);\n        inst._zod.deferred?.push(() => {\n            inst._zod.run = inst._zod.parse;\n        });\n    }\n    else {\n        const runChecks = (payload, checks, ctx) => {\n            let isAborted = util.aborted(payload);\n            let asyncResult;\n            for (const ch of checks) {\n                if (ch._zod.def.when) {\n                    const shouldRun = ch._zod.def.when(payload);\n                    if (!shouldRun)\n                        continue;\n                }\n                else if (isAborted) {\n                    continue;\n                }\n                const currLen = payload.issues.length;\n                const _ = ch._zod.check(payload);\n                if (_ instanceof Promise && ctx?.async === false) {\n                    throw new core.$ZodAsyncError();\n                }\n                if (asyncResult || _ instanceof Promise) {\n                    asyncResult = (asyncResult ?? Promise.resolve()).then(async () => {\n                        await _;\n                        const nextLen = payload.issues.length;\n                        if (nextLen === currLen)\n                            return;\n                        if (!isAborted)\n                            isAborted = util.aborted(payload, currLen);\n                    });\n                }\n                else {\n                    const nextLen = payload.issues.length;\n                    if (nextLen === currLen)\n                        continue;\n                    if (!isAborted)\n                        isAborted = util.aborted(payload, currLen);\n                }\n            }\n            if (asyncResult) {\n                return asyncResult.then(() => {\n                    return payload;\n                });\n            }\n            return payload;\n        };\n        // const handleChecksResult = (\n        //   checkResult: ParsePayload,\n        //   originalResult: ParsePayload,\n        //   ctx: ParseContextInternal\n        // ): util.MaybeAsync<ParsePayload> => {\n        //   // if the checks mutated the value && there are no issues, re-parse the result\n        //   if (checkResult.value !== originalResult.value && !checkResult.issues.length)\n        //     return inst._zod.parse(checkResult, ctx);\n        //   return originalResult;\n        // };\n        const handleCanaryResult = (canary, payload, ctx) => {\n            // abort if the canary is aborted\n            if (util.aborted(canary)) {\n                canary.aborted = true;\n                return canary;\n            }\n            // run checks first, then\n            const checkResult = runChecks(payload, checks, ctx);\n            if (checkResult instanceof Promise) {\n                if (ctx.async === false)\n                    throw new core.$ZodAsyncError();\n                return checkResult.then((checkResult) => inst._zod.parse(checkResult, ctx));\n            }\n            return inst._zod.parse(checkResult, ctx);\n        };\n        inst._zod.run = (payload, ctx) => {\n            if (ctx.skipChecks) {\n                return inst._zod.parse(payload, ctx);\n            }\n            if (ctx.direction === \"backward\") {\n                // run canary\n                // initial pass (no checks)\n                const canary = inst._zod.parse({ value: payload.value, issues: [] }, { ...ctx, skipChecks: true });\n                if (canary instanceof Promise) {\n                    return canary.then((canary) => {\n                        return handleCanaryResult(canary, payload, ctx);\n                    });\n                }\n                return handleCanaryResult(canary, payload, ctx);\n            }\n            // forward\n            const result = inst._zod.parse(payload, ctx);\n            if (result instanceof Promise) {\n                if (ctx.async === false)\n                    throw new core.$ZodAsyncError();\n                return result.then((result) => runChecks(result, checks, ctx));\n            }\n            return runChecks(result, checks, ctx);\n        };\n    }\n    inst[\"~standard\"] = {\n        validate: (value) => {\n            try {\n                const r = safeParse(inst, value);\n                return r.success ? { value: r.data } : { issues: r.error?.issues };\n            }\n            catch (_) {\n                return safeParseAsync(inst, value).then((r) => (r.success ? { value: r.data } : { issues: r.error?.issues }));\n            }\n        },\n        vendor: \"zod\",\n        version: 1,\n    };\n});\nexport { clone } from \"./util.js\";\nexport const $ZodString = /*@__PURE__*/ core.$constructor(\"$ZodString\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = [...(inst?._zod.bag?.patterns ?? [])].pop() ?? regexes.string(inst._zod.bag);\n    inst._zod.parse = (payload, _) => {\n        if (def.coerce)\n            try {\n                payload.value = String(payload.value);\n            }\n            catch (_) { }\n        if (typeof payload.value === \"string\")\n            return payload;\n        payload.issues.push({\n            expected: \"string\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodStringFormat\", (inst, def) => {\n    // check initialization must come first\n    checks.$ZodCheckStringFormat.init(inst, def);\n    $ZodString.init(inst, def);\n});\nexport const $ZodGUID = /*@__PURE__*/ core.$constructor(\"$ZodGUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.guid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodUUID = /*@__PURE__*/ core.$constructor(\"$ZodUUID\", (inst, def) => {\n    if (def.version) {\n        const versionMap = {\n            v1: 1,\n            v2: 2,\n            v3: 3,\n            v4: 4,\n            v5: 5,\n            v6: 6,\n            v7: 7,\n            v8: 8,\n        };\n        const v = versionMap[def.version];\n        if (v === undefined)\n            throw new Error(`Invalid UUID version: \"${def.version}\"`);\n        def.pattern ?? (def.pattern = regexes.uuid(v));\n    }\n    else\n        def.pattern ?? (def.pattern = regexes.uuid());\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodEmail = /*@__PURE__*/ core.$constructor(\"$ZodEmail\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.email);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodURL = /*@__PURE__*/ core.$constructor(\"$ZodURL\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        try {\n            // Trim whitespace from input\n            const trimmed = payload.value.trim();\n            // @ts-ignore\n            const url = new URL(trimmed);\n            if (def.hostname) {\n                def.hostname.lastIndex = 0;\n                if (!def.hostname.test(url.hostname)) {\n                    payload.issues.push({\n                        code: \"invalid_format\",\n                        format: \"url\",\n                        note: \"Invalid hostname\",\n                        pattern: regexes.hostname.source,\n                        input: payload.value,\n                        inst,\n                        continue: !def.abort,\n                    });\n                }\n            }\n            if (def.protocol) {\n                def.protocol.lastIndex = 0;\n                if (!def.protocol.test(url.protocol.endsWith(\":\") ? url.protocol.slice(0, -1) : url.protocol)) {\n                    payload.issues.push({\n                        code: \"invalid_format\",\n                        format: \"url\",\n                        note: \"Invalid protocol\",\n                        pattern: def.protocol.source,\n                        input: payload.value,\n                        inst,\n                        continue: !def.abort,\n                    });\n                }\n            }\n            // Set the output value based on normalize flag\n            if (def.normalize) {\n                // Use normalized URL\n                payload.value = url.href;\n            }\n            else {\n                // Preserve the original input (trimmed)\n                payload.value = trimmed;\n            }\n            return;\n        }\n        catch (_) {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"url\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodEmoji = /*@__PURE__*/ core.$constructor(\"$ZodEmoji\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.emoji());\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodNanoID = /*@__PURE__*/ core.$constructor(\"$ZodNanoID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.nanoid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID = /*@__PURE__*/ core.$constructor(\"$ZodCUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cuid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID2 = /*@__PURE__*/ core.$constructor(\"$ZodCUID2\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cuid2);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodULID = /*@__PURE__*/ core.$constructor(\"$ZodULID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ulid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodXID = /*@__PURE__*/ core.$constructor(\"$ZodXID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.xid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodKSUID = /*@__PURE__*/ core.$constructor(\"$ZodKSUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ksuid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODateTime = /*@__PURE__*/ core.$constructor(\"$ZodISODateTime\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.datetime(def));\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODate = /*@__PURE__*/ core.$constructor(\"$ZodISODate\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.date);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISOTime = /*@__PURE__*/ core.$constructor(\"$ZodISOTime\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.time(def));\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODuration = /*@__PURE__*/ core.$constructor(\"$ZodISODuration\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.duration);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodIPv4 = /*@__PURE__*/ core.$constructor(\"$ZodIPv4\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ipv4);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = `ipv4`;\n    });\n});\nexport const $ZodIPv6 = /*@__PURE__*/ core.$constructor(\"$ZodIPv6\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ipv6);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = `ipv6`;\n    });\n    inst._zod.check = (payload) => {\n        try {\n            // @ts-ignore\n            new URL(`http://[${payload.value}]`);\n            // return;\n        }\n        catch {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"ipv6\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv4\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cidrv4);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv6\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cidrv6); // not used for validation\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        const parts = payload.value.split(\"/\");\n        try {\n            if (parts.length !== 2)\n                throw new Error();\n            const [address, prefix] = parts;\n            if (!prefix)\n                throw new Error();\n            const prefixNum = Number(prefix);\n            if (`${prefixNum}` !== prefix)\n                throw new Error();\n            if (prefixNum < 0 || prefixNum > 128)\n                throw new Error();\n            // @ts-ignore\n            new URL(`http://[${address}]`);\n        }\n        catch {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"cidrv6\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\n//////////////////////////////   ZodBase64   //////////////////////////////\nexport function isValidBase64(data) {\n    if (data === \"\")\n        return true;\n    if (data.length % 4 !== 0)\n        return false;\n    try {\n        // @ts-ignore\n        atob(data);\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\nexport const $ZodBase64 = /*@__PURE__*/ core.$constructor(\"$ZodBase64\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.base64);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        inst._zod.bag.contentEncoding = \"base64\";\n    });\n    inst._zod.check = (payload) => {\n        if (isValidBase64(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"base64\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\n//////////////////////////////   ZodBase64   //////////////////////////////\nexport function isValidBase64URL(data) {\n    if (!regexes.base64url.test(data))\n        return false;\n    const base64 = data.replace(/[-_]/g, (c) => (c === \"-\" ? \"+\" : \"/\"));\n    const padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, \"=\");\n    return isValidBase64(padded);\n}\nexport const $ZodBase64URL = /*@__PURE__*/ core.$constructor(\"$ZodBase64URL\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.base64url);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        inst._zod.bag.contentEncoding = \"base64url\";\n    });\n    inst._zod.check = (payload) => {\n        if (isValidBase64URL(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"base64url\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodE164 = /*@__PURE__*/ core.$constructor(\"$ZodE164\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.e164);\n    $ZodStringFormat.init(inst, def);\n});\n//////////////////////////////   ZodJWT   //////////////////////////////\nexport function isValidJWT(token, algorithm = null) {\n    try {\n        const tokensParts = token.split(\".\");\n        if (tokensParts.length !== 3)\n            return false;\n        const [header] = tokensParts;\n        if (!header)\n            return false;\n        // @ts-ignore\n        const parsedHeader = JSON.parse(atob(header));\n        if (\"typ\" in parsedHeader && parsedHeader?.typ !== \"JWT\")\n            return false;\n        if (!parsedHeader.alg)\n            return false;\n        if (algorithm && (!(\"alg\" in parsedHeader) || parsedHeader.alg !== algorithm))\n            return false;\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\nexport const $ZodJWT = /*@__PURE__*/ core.$constructor(\"$ZodJWT\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (isValidJWT(payload.value, def.alg))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"jwt\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCustomStringFormat\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (def.fn(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: def.format,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodNumber = /*@__PURE__*/ core.$constructor(\"$ZodNumber\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = inst._zod.bag.pattern ?? regexes.number;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = Number(payload.value);\n            }\n            catch (_) { }\n        const input = payload.value;\n        if (typeof input === \"number\" && !Number.isNaN(input) && Number.isFinite(input)) {\n            return payload;\n        }\n        const received = typeof input === \"number\"\n            ? Number.isNaN(input)\n                ? \"NaN\"\n                : !Number.isFinite(input)\n                    ? \"Infinity\"\n                    : undefined\n            : undefined;\n        payload.issues.push({\n            expected: \"number\",\n            code: \"invalid_type\",\n            input,\n            inst,\n            ...(received ? { received } : {}),\n        });\n        return payload;\n    };\n});\nexport const $ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodNumber\", (inst, def) => {\n    checks.$ZodCheckNumberFormat.init(inst, def);\n    $ZodNumber.init(inst, def); // no format checksp\n});\nexport const $ZodBoolean = /*@__PURE__*/ core.$constructor(\"$ZodBoolean\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.boolean;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = Boolean(payload.value);\n            }\n            catch (_) { }\n        const input = payload.value;\n        if (typeof input === \"boolean\")\n            return payload;\n        payload.issues.push({\n            expected: \"boolean\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodBigInt = /*@__PURE__*/ core.$constructor(\"$ZodBigInt\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.bigint;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = BigInt(payload.value);\n            }\n            catch (_) { }\n        if (typeof payload.value === \"bigint\")\n            return payload;\n        payload.issues.push({\n            expected: \"bigint\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodBigInt\", (inst, def) => {\n    checks.$ZodCheckBigIntFormat.init(inst, def);\n    $ZodBigInt.init(inst, def); // no format checks\n});\nexport const $ZodSymbol = /*@__PURE__*/ core.$constructor(\"$ZodSymbol\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"symbol\")\n            return payload;\n        payload.issues.push({\n            expected: \"symbol\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodUndefined = /*@__PURE__*/ core.$constructor(\"$ZodUndefined\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.undefined;\n    inst._zod.values = new Set([undefined]);\n    inst._zod.optin = \"optional\";\n    inst._zod.optout = \"optional\";\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"undefined\")\n            return payload;\n        payload.issues.push({\n            expected: \"undefined\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodNull = /*@__PURE__*/ core.$constructor(\"$ZodNull\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.null;\n    inst._zod.values = new Set([null]);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (input === null)\n            return payload;\n        payload.issues.push({\n            expected: \"null\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodAny = /*@__PURE__*/ core.$constructor(\"$ZodAny\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload) => payload;\n});\nexport const $ZodUnknown = /*@__PURE__*/ core.$constructor(\"$ZodUnknown\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload) => payload;\n});\nexport const $ZodNever = /*@__PURE__*/ core.$constructor(\"$ZodNever\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        payload.issues.push({\n            expected: \"never\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodVoid = /*@__PURE__*/ core.$constructor(\"$ZodVoid\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"undefined\")\n            return payload;\n        payload.issues.push({\n            expected: \"void\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodDate = /*@__PURE__*/ core.$constructor(\"$ZodDate\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce) {\n            try {\n                payload.value = new Date(payload.value);\n            }\n            catch (_err) { }\n        }\n        const input = payload.value;\n        const isDate = input instanceof Date;\n        const isValidDate = isDate && !Number.isNaN(input.getTime());\n        if (isValidDate)\n            return payload;\n        payload.issues.push({\n            expected: \"date\",\n            code: \"invalid_type\",\n            input,\n            ...(isDate ? { received: \"Invalid Date\" } : {}),\n            inst,\n        });\n        return payload;\n    };\n});\nfunction handleArrayResult(result, final, index) {\n    if (result.issues.length) {\n        final.issues.push(...util.prefixIssues(index, result.issues));\n    }\n    final.value[index] = result.value;\n}\nexport const $ZodArray = /*@__PURE__*/ core.$constructor(\"$ZodArray\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!Array.isArray(input)) {\n            payload.issues.push({\n                expected: \"array\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        payload.value = Array(input.length);\n        const proms = [];\n        for (let i = 0; i < input.length; i++) {\n            const item = input[i];\n            const result = def.element._zod.run({\n                value: item,\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                proms.push(result.then((result) => handleArrayResult(result, payload, i)));\n            }\n            else {\n                handleArrayResult(result, payload, i);\n            }\n        }\n        if (proms.length) {\n            return Promise.all(proms).then(() => payload);\n        }\n        return payload; //handleArrayResultsAsync(parseResults, final);\n    };\n});\nfunction handlePropertyResult(result, final, key, input) {\n    if (result.issues.length) {\n        final.issues.push(...util.prefixIssues(key, result.issues));\n    }\n    if (result.value === undefined) {\n        if (key in input) {\n            final.value[key] = undefined;\n        }\n    }\n    else {\n        final.value[key] = result.value;\n    }\n}\nfunction normalizeDef(def) {\n    const keys = Object.keys(def.shape);\n    for (const k of keys) {\n        if (!def.shape?.[k]?._zod?.traits?.has(\"$ZodType\")) {\n            throw new Error(`Invalid element at key \"${k}\": expected a Zod schema`);\n        }\n    }\n    const okeys = util.optionalKeys(def.shape);\n    return {\n        ...def,\n        keys,\n        keySet: new Set(keys),\n        numKeys: keys.length,\n        optionalKeys: new Set(okeys),\n    };\n}\nfunction handleCatchall(proms, input, payload, ctx, def, inst) {\n    const unrecognized = [];\n    // iterate over input keys\n    const keySet = def.keySet;\n    const _catchall = def.catchall._zod;\n    const t = _catchall.def.type;\n    for (const key of Object.keys(input)) {\n        if (keySet.has(key))\n            continue;\n        if (t === \"never\") {\n            unrecognized.push(key);\n            continue;\n        }\n        const r = _catchall.run({ value: input[key], issues: [] }, ctx);\n        if (r instanceof Promise) {\n            proms.push(r.then((r) => handlePropertyResult(r, payload, key, input)));\n        }\n        else {\n            handlePropertyResult(r, payload, key, input);\n        }\n    }\n    if (unrecognized.length) {\n        payload.issues.push({\n            code: \"unrecognized_keys\",\n            keys: unrecognized,\n            input,\n            inst,\n        });\n    }\n    if (!proms.length)\n        return payload;\n    return Promise.all(proms).then(() => {\n        return payload;\n    });\n}\nexport const $ZodObject = /*@__PURE__*/ core.$constructor(\"$ZodObject\", (inst, def) => {\n    // requires cast because technically $ZodObject doesn't extend\n    $ZodType.init(inst, def);\n    // const sh = def.shape;\n    const desc = Object.getOwnPropertyDescriptor(def, \"shape\");\n    if (!desc?.get) {\n        const sh = def.shape;\n        Object.defineProperty(def, \"shape\", {\n            get: () => {\n                const newSh = { ...sh };\n                Object.defineProperty(def, \"shape\", {\n                    value: newSh,\n                });\n                return newSh;\n            },\n        });\n    }\n    const _normalized = util.cached(() => normalizeDef(def));\n    util.defineLazy(inst._zod, \"propValues\", () => {\n        const shape = def.shape;\n        const propValues = {};\n        for (const key in shape) {\n            const field = shape[key]._zod;\n            if (field.values) {\n                propValues[key] ?? (propValues[key] = new Set());\n                for (const v of field.values)\n                    propValues[key].add(v);\n            }\n        }\n        return propValues;\n    });\n    const isObject = util.isObject;\n    const catchall = def.catchall;\n    let value;\n    inst._zod.parse = (payload, ctx) => {\n        value ?? (value = _normalized.value);\n        const input = payload.value;\n        if (!isObject(input)) {\n            payload.issues.push({\n                expected: \"object\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        payload.value = {};\n        const proms = [];\n        const shape = value.shape;\n        for (const key of value.keys) {\n            const el = shape[key];\n            const r = el._zod.run({ value: input[key], issues: [] }, ctx);\n            if (r instanceof Promise) {\n                proms.push(r.then((r) => handlePropertyResult(r, payload, key, input)));\n            }\n            else {\n                handlePropertyResult(r, payload, key, input);\n            }\n        }\n        if (!catchall) {\n            return proms.length ? Promise.all(proms).then(() => payload) : payload;\n        }\n        return handleCatchall(proms, input, payload, ctx, _normalized.value, inst);\n    };\n});\nexport const $ZodObjectJIT = /*@__PURE__*/ core.$constructor(\"$ZodObjectJIT\", (inst, def) => {\n    // requires cast because technically $ZodObject doesn't extend\n    $ZodObject.init(inst, def);\n    const superParse = inst._zod.parse;\n    const _normalized = util.cached(() => normalizeDef(def));\n    const generateFastpass = (shape) => {\n        const doc = new Doc([\"shape\", \"payload\", \"ctx\"]);\n        const normalized = _normalized.value;\n        const parseStr = (key) => {\n            const k = util.esc(key);\n            return `shape[${k}]._zod.run({ value: input[${k}], issues: [] }, ctx)`;\n        };\n        doc.write(`const input = payload.value;`);\n        const ids = Object.create(null);\n        let counter = 0;\n        for (const key of normalized.keys) {\n            ids[key] = `key_${counter++}`;\n        }\n        // A: preserve key order {\n        doc.write(`const newResult = {};`);\n        for (const key of normalized.keys) {\n            const id = ids[key];\n            const k = util.esc(key);\n            doc.write(`const ${id} = ${parseStr(key)};`);\n            doc.write(`\n        if (${id}.issues.length) {\n          payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n            ...iss,\n            path: iss.path ? [${k}, ...iss.path] : [${k}]\n          })));\n        }\n        \n        \n        if (${id}.value === undefined) {\n          if (${k} in input) {\n            newResult[${k}] = undefined;\n          }\n        } else {\n          newResult[${k}] = ${id}.value;\n        }\n        \n      `);\n        }\n        doc.write(`payload.value = newResult;`);\n        doc.write(`return payload;`);\n        const fn = doc.compile();\n        return (payload, ctx) => fn(shape, payload, ctx);\n    };\n    let fastpass;\n    const isObject = util.isObject;\n    const jit = !core.globalConfig.jitless;\n    const allowsEval = util.allowsEval;\n    const fastEnabled = jit && allowsEval.value; // && !def.catchall;\n    const catchall = def.catchall;\n    let value;\n    inst._zod.parse = (payload, ctx) => {\n        value ?? (value = _normalized.value);\n        const input = payload.value;\n        if (!isObject(input)) {\n            payload.issues.push({\n                expected: \"object\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        if (jit && fastEnabled && ctx?.async === false && ctx.jitless !== true) {\n            // always synchronous\n            if (!fastpass)\n                fastpass = generateFastpass(def.shape);\n            payload = fastpass(payload, ctx);\n            if (!catchall)\n                return payload;\n            return handleCatchall([], input, payload, ctx, value, inst);\n        }\n        return superParse(payload, ctx);\n    };\n});\nfunction handleUnionResults(results, final, inst, ctx) {\n    for (const result of results) {\n        if (result.issues.length === 0) {\n            final.value = result.value;\n            return final;\n        }\n    }\n    const nonaborted = results.filter((r) => !util.aborted(r));\n    if (nonaborted.length === 1) {\n        final.value = nonaborted[0].value;\n        return nonaborted[0];\n    }\n    final.issues.push({\n        code: \"invalid_union\",\n        input: final.value,\n        inst,\n        errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n    });\n    return final;\n}\nexport const $ZodUnion = /*@__PURE__*/ core.$constructor(\"$ZodUnion\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"optin\", () => def.options.some((o) => o._zod.optin === \"optional\") ? \"optional\" : undefined);\n    util.defineLazy(inst._zod, \"optout\", () => def.options.some((o) => o._zod.optout === \"optional\") ? \"optional\" : undefined);\n    util.defineLazy(inst._zod, \"values\", () => {\n        if (def.options.every((o) => o._zod.values)) {\n            return new Set(def.options.flatMap((option) => Array.from(option._zod.values)));\n        }\n        return undefined;\n    });\n    util.defineLazy(inst._zod, \"pattern\", () => {\n        if (def.options.every((o) => o._zod.pattern)) {\n            const patterns = def.options.map((o) => o._zod.pattern);\n            return new RegExp(`^(${patterns.map((p) => util.cleanRegex(p.source)).join(\"|\")})$`);\n        }\n        return undefined;\n    });\n    const single = def.options.length === 1;\n    const first = def.options[0]._zod.run;\n    inst._zod.parse = (payload, ctx) => {\n        if (single) {\n            return first(payload, ctx);\n        }\n        let async = false;\n        const results = [];\n        for (const option of def.options) {\n            const result = option._zod.run({\n                value: payload.value,\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                results.push(result);\n                async = true;\n            }\n            else {\n                if (result.issues.length === 0)\n                    return result;\n                results.push(result);\n            }\n        }\n        if (!async)\n            return handleUnionResults(results, payload, inst, ctx);\n        return Promise.all(results).then((results) => {\n            return handleUnionResults(results, payload, inst, ctx);\n        });\n    };\n});\nexport const $ZodDiscriminatedUnion = \n/*@__PURE__*/\ncore.$constructor(\"$ZodDiscriminatedUnion\", (inst, def) => {\n    $ZodUnion.init(inst, def);\n    const _super = inst._zod.parse;\n    util.defineLazy(inst._zod, \"propValues\", () => {\n        const propValues = {};\n        for (const option of def.options) {\n            const pv = option._zod.propValues;\n            if (!pv || Object.keys(pv).length === 0)\n                throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(option)}\"`);\n            for (const [k, v] of Object.entries(pv)) {\n                if (!propValues[k])\n                    propValues[k] = new Set();\n                for (const val of v) {\n                    propValues[k].add(val);\n                }\n            }\n        }\n        return propValues;\n    });\n    const disc = util.cached(() => {\n        const opts = def.options;\n        const map = new Map();\n        for (const o of opts) {\n            const values = o._zod.propValues?.[def.discriminator];\n            if (!values || values.size === 0)\n                throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(o)}\"`);\n            for (const v of values) {\n                if (map.has(v)) {\n                    throw new Error(`Duplicate discriminator value \"${String(v)}\"`);\n                }\n                map.set(v, o);\n            }\n        }\n        return map;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!util.isObject(input)) {\n            payload.issues.push({\n                code: \"invalid_type\",\n                expected: \"object\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const opt = disc.value.get(input?.[def.discriminator]);\n        if (opt) {\n            return opt._zod.run(payload, ctx);\n        }\n        if (def.unionFallback) {\n            return _super(payload, ctx);\n        }\n        // no matching discriminator\n        payload.issues.push({\n            code: \"invalid_union\",\n            errors: [],\n            note: \"No matching discriminator\",\n            discriminator: def.discriminator,\n            input,\n            path: [def.discriminator],\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodIntersection = /*@__PURE__*/ core.$constructor(\"$ZodIntersection\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        const left = def.left._zod.run({ value: input, issues: [] }, ctx);\n        const right = def.right._zod.run({ value: input, issues: [] }, ctx);\n        const async = left instanceof Promise || right instanceof Promise;\n        if (async) {\n            return Promise.all([left, right]).then(([left, right]) => {\n                return handleIntersectionResults(payload, left, right);\n            });\n        }\n        return handleIntersectionResults(payload, left, right);\n    };\n});\nfunction mergeValues(a, b) {\n    // const aType = parse.t(a);\n    // const bType = parse.t(b);\n    if (a === b) {\n        return { valid: true, data: a };\n    }\n    if (a instanceof Date && b instanceof Date && +a === +b) {\n        return { valid: true, data: a };\n    }\n    if (util.isPlainObject(a) && util.isPlainObject(b)) {\n        const bKeys = Object.keys(b);\n        const sharedKeys = Object.keys(a).filter((key) => bKeys.indexOf(key) !== -1);\n        const newObj = { ...a, ...b };\n        for (const key of sharedKeys) {\n            const sharedValue = mergeValues(a[key], b[key]);\n            if (!sharedValue.valid) {\n                return {\n                    valid: false,\n                    mergeErrorPath: [key, ...sharedValue.mergeErrorPath],\n                };\n            }\n            newObj[key] = sharedValue.data;\n        }\n        return { valid: true, data: newObj };\n    }\n    if (Array.isArray(a) && Array.isArray(b)) {\n        if (a.length !== b.length) {\n            return { valid: false, mergeErrorPath: [] };\n        }\n        const newArray = [];\n        for (let index = 0; index < a.length; index++) {\n            const itemA = a[index];\n            const itemB = b[index];\n            const sharedValue = mergeValues(itemA, itemB);\n            if (!sharedValue.valid) {\n                return {\n                    valid: false,\n                    mergeErrorPath: [index, ...sharedValue.mergeErrorPath],\n                };\n            }\n            newArray.push(sharedValue.data);\n        }\n        return { valid: true, data: newArray };\n    }\n    return { valid: false, mergeErrorPath: [] };\n}\nfunction handleIntersectionResults(result, left, right) {\n    if (left.issues.length) {\n        result.issues.push(...left.issues);\n    }\n    if (right.issues.length) {\n        result.issues.push(...right.issues);\n    }\n    if (util.aborted(result))\n        return result;\n    const merged = mergeValues(left.value, right.value);\n    if (!merged.valid) {\n        throw new Error(`Unmergable intersection. Error path: ` + `${JSON.stringify(merged.mergeErrorPath)}`);\n    }\n    result.value = merged.data;\n    return result;\n}\nexport const $ZodTuple = /*@__PURE__*/ core.$constructor(\"$ZodTuple\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const items = def.items;\n    const optStart = items.length - [...items].reverse().findIndex((item) => item._zod.optin !== \"optional\");\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!Array.isArray(input)) {\n            payload.issues.push({\n                input,\n                inst,\n                expected: \"tuple\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        payload.value = [];\n        const proms = [];\n        if (!def.rest) {\n            const tooBig = input.length > items.length;\n            const tooSmall = input.length < optStart - 1;\n            if (tooBig || tooSmall) {\n                payload.issues.push({\n                    ...(tooBig ? { code: \"too_big\", maximum: items.length } : { code: \"too_small\", minimum: items.length }),\n                    input,\n                    inst,\n                    origin: \"array\",\n                });\n                return payload;\n            }\n        }\n        let i = -1;\n        for (const item of items) {\n            i++;\n            if (i >= input.length)\n                if (i >= optStart)\n                    continue;\n            const result = item._zod.run({\n                value: input[i],\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                proms.push(result.then((result) => handleTupleResult(result, payload, i)));\n            }\n            else {\n                handleTupleResult(result, payload, i);\n            }\n        }\n        if (def.rest) {\n            const rest = input.slice(items.length);\n            for (const el of rest) {\n                i++;\n                const result = def.rest._zod.run({\n                    value: el,\n                    issues: [],\n                }, ctx);\n                if (result instanceof Promise) {\n                    proms.push(result.then((result) => handleTupleResult(result, payload, i)));\n                }\n                else {\n                    handleTupleResult(result, payload, i);\n                }\n            }\n        }\n        if (proms.length)\n            return Promise.all(proms).then(() => payload);\n        return payload;\n    };\n});\nfunction handleTupleResult(result, final, index) {\n    if (result.issues.length) {\n        final.issues.push(...util.prefixIssues(index, result.issues));\n    }\n    final.value[index] = result.value;\n}\nexport const $ZodRecord = /*@__PURE__*/ core.$constructor(\"$ZodRecord\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!util.isPlainObject(input)) {\n            payload.issues.push({\n                expected: \"record\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const proms = [];\n        if (def.keyType._zod.values) {\n            const values = def.keyType._zod.values;\n            payload.value = {};\n            for (const key of values) {\n                if (typeof key === \"string\" || typeof key === \"number\" || typeof key === \"symbol\") {\n                    const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n                    if (result instanceof Promise) {\n                        proms.push(result.then((result) => {\n                            if (result.issues.length) {\n                                payload.issues.push(...util.prefixIssues(key, result.issues));\n                            }\n                            payload.value[key] = result.value;\n                        }));\n                    }\n                    else {\n                        if (result.issues.length) {\n                            payload.issues.push(...util.prefixIssues(key, result.issues));\n                        }\n                        payload.value[key] = result.value;\n                    }\n                }\n            }\n            let unrecognized;\n            for (const key in input) {\n                if (!values.has(key)) {\n                    unrecognized = unrecognized ?? [];\n                    unrecognized.push(key);\n                }\n            }\n            if (unrecognized && unrecognized.length > 0) {\n                payload.issues.push({\n                    code: \"unrecognized_keys\",\n                    input,\n                    inst,\n                    keys: unrecognized,\n                });\n            }\n        }\n        else {\n            payload.value = {};\n            for (const key of Reflect.ownKeys(input)) {\n                if (key === \"__proto__\")\n                    continue;\n                const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n                if (keyResult instanceof Promise) {\n                    throw new Error(\"Async schemas not supported in object keys currently\");\n                }\n                if (keyResult.issues.length) {\n                    payload.issues.push({\n                        code: \"invalid_key\",\n                        origin: \"record\",\n                        issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                        input: key,\n                        path: [key],\n                        inst,\n                    });\n                    payload.value[keyResult.value] = keyResult.value;\n                    continue;\n                }\n                const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n                if (result instanceof Promise) {\n                    proms.push(result.then((result) => {\n                        if (result.issues.length) {\n                            payload.issues.push(...util.prefixIssues(key, result.issues));\n                        }\n                        payload.value[keyResult.value] = result.value;\n                    }));\n                }\n                else {\n                    if (result.issues.length) {\n                        payload.issues.push(...util.prefixIssues(key, result.issues));\n                    }\n                    payload.value[keyResult.value] = result.value;\n                }\n            }\n        }\n        if (proms.length) {\n            return Promise.all(proms).then(() => payload);\n        }\n        return payload;\n    };\n});\nexport const $ZodMap = /*@__PURE__*/ core.$constructor(\"$ZodMap\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!(input instanceof Map)) {\n            payload.issues.push({\n                expected: \"map\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const proms = [];\n        payload.value = new Map();\n        for (const [key, value] of input) {\n            const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n            const valueResult = def.valueType._zod.run({ value: value, issues: [] }, ctx);\n            if (keyResult instanceof Promise || valueResult instanceof Promise) {\n                proms.push(Promise.all([keyResult, valueResult]).then(([keyResult, valueResult]) => {\n                    handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n                }));\n            }\n            else {\n                handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n            }\n        }\n        if (proms.length)\n            return Promise.all(proms).then(() => payload);\n        return payload;\n    };\n});\nfunction handleMapResult(keyResult, valueResult, final, key, input, inst, ctx) {\n    if (keyResult.issues.length) {\n        if (util.propertyKeyTypes.has(typeof key)) {\n            final.issues.push(...util.prefixIssues(key, keyResult.issues));\n        }\n        else {\n            final.issues.push({\n                code: \"invalid_key\",\n                origin: \"map\",\n                input,\n                inst,\n                issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n            });\n        }\n    }\n    if (valueResult.issues.length) {\n        if (util.propertyKeyTypes.has(typeof key)) {\n            final.issues.push(...util.prefixIssues(key, valueResult.issues));\n        }\n        else {\n            final.issues.push({\n                origin: \"map\",\n                code: \"invalid_element\",\n                input,\n                inst,\n                key: key,\n                issues: valueResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n            });\n        }\n    }\n    final.value.set(keyResult.value, valueResult.value);\n}\nexport const $ZodSet = /*@__PURE__*/ core.$constructor(\"$ZodSet\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!(input instanceof Set)) {\n            payload.issues.push({\n                input,\n                inst,\n                expected: \"set\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        const proms = [];\n        payload.value = new Set();\n        for (const item of input) {\n            const result = def.valueType._zod.run({ value: item, issues: [] }, ctx);\n            if (result instanceof Promise) {\n                proms.push(result.then((result) => handleSetResult(result, payload)));\n            }\n            else\n                handleSetResult(result, payload);\n        }\n        if (proms.length)\n            return Promise.all(proms).then(() => payload);\n        return payload;\n    };\n});\nfunction handleSetResult(result, final) {\n    if (result.issues.length) {\n        final.issues.push(...result.issues);\n    }\n    final.value.add(result.value);\n}\nexport const $ZodEnum = /*@__PURE__*/ core.$constructor(\"$ZodEnum\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const values = util.getEnumValues(def.entries);\n    const valuesSet = new Set(values);\n    inst._zod.values = valuesSet;\n    inst._zod.pattern = new RegExp(`^(${values\n        .filter((k) => util.propertyKeyTypes.has(typeof k))\n        .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o.toString()))\n        .join(\"|\")})$`);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (valuesSet.has(input)) {\n            return payload;\n        }\n        payload.issues.push({\n            code: \"invalid_value\",\n            values,\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodLiteral = /*@__PURE__*/ core.$constructor(\"$ZodLiteral\", (inst, def) => {\n    $ZodType.init(inst, def);\n    if (def.values.length === 0) {\n        throw new Error(\"Cannot create literal schema with no valid values\");\n    }\n    inst._zod.values = new Set(def.values);\n    inst._zod.pattern = new RegExp(`^(${def.values\n        .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o ? util.escapeRegex(o.toString()) : String(o)))\n        .join(\"|\")})$`);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (inst._zod.values.has(input)) {\n            return payload;\n        }\n        payload.issues.push({\n            code: \"invalid_value\",\n            values: def.values,\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodFile = /*@__PURE__*/ core.$constructor(\"$ZodFile\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        // @ts-ignore\n        if (input instanceof File)\n            return payload;\n        payload.issues.push({\n            expected: \"file\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodTransform = /*@__PURE__*/ core.$constructor(\"$ZodTransform\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            throw new core.$ZodEncodeError(inst.constructor.name);\n        }\n        const _out = def.transform(payload.value, payload);\n        if (ctx.async) {\n            const output = _out instanceof Promise ? _out : Promise.resolve(_out);\n            return output.then((output) => {\n                payload.value = output;\n                return payload;\n            });\n        }\n        if (_out instanceof Promise) {\n            throw new core.$ZodAsyncError();\n        }\n        payload.value = _out;\n        return payload;\n    };\n});\nfunction handleOptionalResult(result, input) {\n    if (result.issues.length && input === undefined) {\n        return { issues: [], value: undefined };\n    }\n    return result;\n}\nexport const $ZodOptional = /*@__PURE__*/ core.$constructor(\"$ZodOptional\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.optin = \"optional\";\n    inst._zod.optout = \"optional\";\n    util.defineLazy(inst._zod, \"values\", () => {\n        return def.innerType._zod.values ? new Set([...def.innerType._zod.values, undefined]) : undefined;\n    });\n    util.defineLazy(inst._zod, \"pattern\", () => {\n        const pattern = def.innerType._zod.pattern;\n        return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)})?$`) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        if (def.innerType._zod.optin === \"optional\") {\n            const result = def.innerType._zod.run(payload, ctx);\n            if (result instanceof Promise)\n                return result.then((r) => handleOptionalResult(r, payload.value));\n            return handleOptionalResult(result, payload.value);\n        }\n        if (payload.value === undefined) {\n            return payload;\n        }\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodNullable = /*@__PURE__*/ core.$constructor(\"$ZodNullable\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n    util.defineLazy(inst._zod, \"pattern\", () => {\n        const pattern = def.innerType._zod.pattern;\n        return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)}|null)$`) : undefined;\n    });\n    util.defineLazy(inst._zod, \"values\", () => {\n        return def.innerType._zod.values ? new Set([...def.innerType._zod.values, null]) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        // Forward direction (decode): allow null to pass through\n        if (payload.value === null)\n            return payload;\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodDefault = /*@__PURE__*/ core.$constructor(\"$ZodDefault\", (inst, def) => {\n    $ZodType.init(inst, def);\n    // inst._zod.qin = \"true\";\n    inst._zod.optin = \"optional\";\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        // Forward direction (decode): apply defaults for undefined input\n        if (payload.value === undefined) {\n            payload.value = def.defaultValue;\n            /**\n             * $ZodDefault returns the default value immediately in forward direction.\n             * It doesn't pass the default value into the validator (\"prefault\"). There's no reason to pass the default value through validation. The validity of the default is enforced by TypeScript statically. Otherwise, it's the responsibility of the user to ensure the default is valid. In the case of pipes with divergent in/out types, you can specify the default on the `in` schema of your ZodPipe to set a \"prefault\" for the pipe.   */\n            return payload;\n        }\n        // Forward direction: continue with default handling\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => handleDefaultResult(result, def));\n        }\n        return handleDefaultResult(result, def);\n    };\n});\nfunction handleDefaultResult(payload, def) {\n    if (payload.value === undefined) {\n        payload.value = def.defaultValue;\n    }\n    return payload;\n}\nexport const $ZodPrefault = /*@__PURE__*/ core.$constructor(\"$ZodPrefault\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.optin = \"optional\";\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        // Forward direction (decode): apply prefault for undefined input\n        if (payload.value === undefined) {\n            payload.value = def.defaultValue;\n        }\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodNonOptional = /*@__PURE__*/ core.$constructor(\"$ZodNonOptional\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"values\", () => {\n        const v = def.innerType._zod.values;\n        return v ? new Set([...v].filter((x) => x !== undefined)) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => handleNonOptionalResult(result, inst));\n        }\n        return handleNonOptionalResult(result, inst);\n    };\n});\nfunction handleNonOptionalResult(payload, inst) {\n    if (!payload.issues.length && payload.value === undefined) {\n        payload.issues.push({\n            code: \"invalid_type\",\n            expected: \"nonoptional\",\n            input: payload.value,\n            inst,\n        });\n    }\n    return payload;\n}\nexport const $ZodSuccess = /*@__PURE__*/ core.$constructor(\"$ZodSuccess\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            throw new core.$ZodEncodeError(\"ZodSuccess\");\n        }\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => {\n                payload.value = result.issues.length === 0;\n                return payload;\n            });\n        }\n        payload.value = result.issues.length === 0;\n        return payload;\n    };\n});\nexport const $ZodCatch = /*@__PURE__*/ core.$constructor(\"$ZodCatch\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        // Forward direction (decode): apply catch logic\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => {\n                payload.value = result.value;\n                if (result.issues.length) {\n                    payload.value = def.catchValue({\n                        ...payload,\n                        error: {\n                            issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                        },\n                        input: payload.value,\n                    });\n                    payload.issues = [];\n                }\n                return payload;\n            });\n        }\n        payload.value = result.value;\n        if (result.issues.length) {\n            payload.value = def.catchValue({\n                ...payload,\n                error: {\n                    issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                },\n                input: payload.value,\n            });\n            payload.issues = [];\n        }\n        return payload;\n    };\n});\nexport const $ZodNaN = /*@__PURE__*/ core.$constructor(\"$ZodNaN\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        if (typeof payload.value !== \"number\" || !Number.isNaN(payload.value)) {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                expected: \"nan\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        return payload;\n    };\n});\nexport const $ZodPipe = /*@__PURE__*/ core.$constructor(\"$ZodPipe\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n    util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n    util.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            const right = def.out._zod.run(payload, ctx);\n            if (right instanceof Promise) {\n                return right.then((right) => handlePipeResult(right, def.in, ctx));\n            }\n            return handlePipeResult(right, def.in, ctx);\n        }\n        const left = def.in._zod.run(payload, ctx);\n        if (left instanceof Promise) {\n            return left.then((left) => handlePipeResult(left, def.out, ctx));\n        }\n        return handlePipeResult(left, def.out, ctx);\n    };\n});\nfunction handlePipeResult(left, next, ctx) {\n    if (left.issues.length) {\n        // prevent further checks\n        left.aborted = true;\n        return left;\n    }\n    return next._zod.run({ value: left.value, issues: left.issues }, ctx);\n}\nexport const $ZodCodec = /*@__PURE__*/ core.$constructor(\"$ZodCodec\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n    util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n    util.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n    inst._zod.parse = (payload, ctx) => {\n        const direction = ctx.direction || \"forward\";\n        if (direction === \"forward\") {\n            const left = def.in._zod.run(payload, ctx);\n            if (left instanceof Promise) {\n                return left.then((left) => handleCodecAResult(left, def, ctx));\n            }\n            return handleCodecAResult(left, def, ctx);\n        }\n        else {\n            const right = def.out._zod.run(payload, ctx);\n            if (right instanceof Promise) {\n                return right.then((right) => handleCodecAResult(right, def, ctx));\n            }\n            return handleCodecAResult(right, def, ctx);\n        }\n    };\n});\nfunction handleCodecAResult(result, def, ctx) {\n    if (result.issues.length) {\n        // prevent further checks\n        result.aborted = true;\n        return result;\n    }\n    const direction = ctx.direction || \"forward\";\n    if (direction === \"forward\") {\n        const transformed = def.transform(result.value, result);\n        if (transformed instanceof Promise) {\n            return transformed.then((value) => handleCodecTxResult(result, value, def.out, ctx));\n        }\n        return handleCodecTxResult(result, transformed, def.out, ctx);\n    }\n    else {\n        const transformed = def.reverseTransform(result.value, result);\n        if (transformed instanceof Promise) {\n            return transformed.then((value) => handleCodecTxResult(result, value, def.in, ctx));\n        }\n        return handleCodecTxResult(result, transformed, def.in, ctx);\n    }\n}\nfunction handleCodecTxResult(left, value, nextSchema, ctx) {\n    // Check if transform added any issues\n    if (left.issues.length) {\n        left.aborted = true;\n        return left;\n    }\n    return nextSchema._zod.run({ value, issues: left.issues }, ctx);\n}\nexport const $ZodReadonly = /*@__PURE__*/ core.$constructor(\"$ZodReadonly\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"propValues\", () => def.innerType._zod.propValues);\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then(handleReadonlyResult);\n        }\n        return handleReadonlyResult(result);\n    };\n});\nfunction handleReadonlyResult(payload) {\n    payload.value = Object.freeze(payload.value);\n    return payload;\n}\nexport const $ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"$ZodTemplateLiteral\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const regexParts = [];\n    for (const part of def.parts) {\n        if (typeof part === \"object\" && part !== null) {\n            // is Zod schema\n            if (!part._zod.pattern) {\n                // if (!source)\n                throw new Error(`Invalid template literal part, no pattern found: ${[...part._zod.traits].shift()}`);\n            }\n            const source = part._zod.pattern instanceof RegExp ? part._zod.pattern.source : part._zod.pattern;\n            if (!source)\n                throw new Error(`Invalid template literal part: ${part._zod.traits}`);\n            const start = source.startsWith(\"^\") ? 1 : 0;\n            const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n            regexParts.push(source.slice(start, end));\n        }\n        else if (part === null || util.primitiveTypes.has(typeof part)) {\n            regexParts.push(util.escapeRegex(`${part}`));\n        }\n        else {\n            throw new Error(`Invalid template literal part: ${part}`);\n        }\n    }\n    inst._zod.pattern = new RegExp(`^${regexParts.join(\"\")}$`);\n    inst._zod.parse = (payload, _ctx) => {\n        if (typeof payload.value !== \"string\") {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                expected: \"template_literal\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        inst._zod.pattern.lastIndex = 0;\n        if (!inst._zod.pattern.test(payload.value)) {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                code: \"invalid_format\",\n                format: def.format ?? \"template_literal\",\n                pattern: inst._zod.pattern.source,\n            });\n            return payload;\n        }\n        return payload;\n    };\n});\nexport const $ZodFunction = /*@__PURE__*/ core.$constructor(\"$ZodFunction\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._def = def;\n    inst._zod.def = def;\n    inst.implement = (func) => {\n        if (typeof func !== \"function\") {\n            throw new Error(\"implement() must be called with a function\");\n        }\n        return function (...args) {\n            const parsedArgs = inst._def.input ? parse(inst._def.input, args) : args;\n            const result = Reflect.apply(func, this, parsedArgs);\n            if (inst._def.output) {\n                return parse(inst._def.output, result);\n            }\n            return result;\n        };\n    };\n    inst.implementAsync = (func) => {\n        if (typeof func !== \"function\") {\n            throw new Error(\"implementAsync() must be called with a function\");\n        }\n        return async function (...args) {\n            const parsedArgs = inst._def.input ? await parseAsync(inst._def.input, args) : args;\n            const result = await Reflect.apply(func, this, parsedArgs);\n            if (inst._def.output) {\n                return await parseAsync(inst._def.output, result);\n            }\n            return result;\n        };\n    };\n    inst._zod.parse = (payload, _ctx) => {\n        if (typeof payload.value !== \"function\") {\n            payload.issues.push({\n                code: \"invalid_type\",\n                expected: \"function\",\n                input: payload.value,\n                inst,\n            });\n            return payload;\n        }\n        // Check if output is a promise type to determine if we should use async implementation\n        const hasPromiseOutput = inst._def.output && inst._def.output._zod.def.type === \"promise\";\n        if (hasPromiseOutput) {\n            payload.value = inst.implementAsync(payload.value);\n        }\n        else {\n            payload.value = inst.implement(payload.value);\n        }\n        return payload;\n    };\n    inst.input = (...args) => {\n        const F = inst.constructor;\n        if (Array.isArray(args[0])) {\n            return new F({\n                type: \"function\",\n                input: new $ZodTuple({\n                    type: \"tuple\",\n                    items: args[0],\n                    rest: args[1],\n                }),\n                output: inst._def.output,\n            });\n        }\n        return new F({\n            type: \"function\",\n            input: args[0],\n            output: inst._def.output,\n        });\n    };\n    inst.output = (output) => {\n        const F = inst.constructor;\n        return new F({\n            type: \"function\",\n            input: inst._def.input,\n            output,\n        });\n    };\n    return inst;\n});\nexport const $ZodPromise = /*@__PURE__*/ core.$constructor(\"$ZodPromise\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        return Promise.resolve(payload.value).then((inner) => def.innerType._zod.run({ value: inner, issues: [] }, ctx));\n    };\n});\nexport const $ZodLazy = /*@__PURE__*/ core.$constructor(\"$ZodLazy\", (inst, def) => {\n    $ZodType.init(inst, def);\n    // let _innerType!: any;\n    // util.defineLazy(def, \"getter\", () => {\n    //   if (!_innerType) {\n    //     _innerType = def.getter();\n    //   }\n    //   return () => _innerType;\n    // });\n    util.defineLazy(inst._zod, \"innerType\", () => def.getter());\n    util.defineLazy(inst._zod, \"pattern\", () => inst._zod.innerType._zod.pattern);\n    util.defineLazy(inst._zod, \"propValues\", () => inst._zod.innerType._zod.propValues);\n    util.defineLazy(inst._zod, \"optin\", () => inst._zod.innerType._zod.optin ?? undefined);\n    util.defineLazy(inst._zod, \"optout\", () => inst._zod.innerType._zod.optout ?? undefined);\n    inst._zod.parse = (payload, ctx) => {\n        const inner = inst._zod.innerType;\n        return inner._zod.run(payload, ctx);\n    };\n});\nexport const $ZodCustom = /*@__PURE__*/ core.$constructor(\"$ZodCustom\", (inst, def) => {\n    checks.$ZodCheck.init(inst, def);\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _) => {\n        return payload;\n    };\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const r = def.fn(input);\n        if (r instanceof Promise) {\n            return r.then((r) => handleRefineResult(r, payload, input, inst));\n        }\n        handleRefineResult(r, payload, input, inst);\n        return;\n    };\n});\nfunction handleRefineResult(result, payload, input, inst) {\n    if (!result) {\n        const _iss = {\n            code: \"custom\",\n            input,\n            inst, // incorporates params.error into issue reporting\n            path: [...(inst._zod.def.path ?? [])], // incorporates params.error into issue reporting\n            continue: !inst._zod.def.abort,\n            // params: inst._zod.def.params,\n        };\n        if (inst._zod.def.params)\n            _iss.params = inst._zod.def.params;\n        payload.issues.push(util.issue(_iss));\n    }\n}\n","import * as util from \"../core/util.js\";\nexport const parsedType = (data) => {\n    const t = typeof data;\n    switch (t) {\n        case \"number\": {\n            return Number.isNaN(data) ? \"NaN\" : \"number\";\n        }\n        case \"object\": {\n            if (Array.isArray(data)) {\n                return \"array\";\n            }\n            if (data === null) {\n                return \"null\";\n            }\n            if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {\n                return data.constructor.name;\n            }\n        }\n    }\n    return t;\n};\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"characters\", verb: \"to have\" },\n        file: { unit: \"bytes\", verb: \"to have\" },\n        array: { unit: \"items\", verb: \"to have\" },\n        set: { unit: \"items\", verb: \"to have\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const Nouns = {\n        regex: \"input\",\n        email: \"email address\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO datetime\",\n        date: \"ISO date\",\n        time: \"ISO time\",\n        duration: \"ISO duration\",\n        ipv4: \"IPv4 address\",\n        ipv6: \"IPv6 address\",\n        cidrv4: \"IPv4 range\",\n        cidrv6: \"IPv6 range\",\n        base64: \"base64-encoded string\",\n        base64url: \"base64url-encoded string\",\n        json_string: \"JSON string\",\n        e164: \"E.164 number\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\":\n                return `Invalid input: expected ${issue.expected}, received ${parsedType(issue.input)}`;\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Invalid input: expected ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Invalid option: expected one of ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Too big: expected ${issue.origin ?? \"value\"} to have ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elements\"}`;\n                return `Too big: expected ${issue.origin ?? \"value\"} to be ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Too small: expected ${issue.origin} to have ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Too small: expected ${issue.origin} to be ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Invalid string: must start with \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Invalid string: must end with \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Invalid string: must include \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Invalid string: must match pattern ${_issue.pattern}`;\n                return `Invalid ${Nouns[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Invalid number: must be a multiple of ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Unrecognized key${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Invalid key in ${issue.origin}`;\n            case \"invalid_union\":\n                return \"Invalid input\";\n            case \"invalid_element\":\n                return `Invalid value in ${issue.origin}`;\n            default:\n                return `Invalid input`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","export const $output = Symbol(\"ZodOutput\");\nexport const $input = Symbol(\"ZodInput\");\nexport class $ZodRegistry {\n    constructor() {\n        this._map = new WeakMap();\n        this._idmap = new Map();\n    }\n    add(schema, ..._meta) {\n        const meta = _meta[0];\n        this._map.set(schema, meta);\n        if (meta && typeof meta === \"object\" && \"id\" in meta) {\n            if (this._idmap.has(meta.id)) {\n                throw new Error(`ID ${meta.id} already exists in the registry`);\n            }\n            this._idmap.set(meta.id, schema);\n        }\n        return this;\n    }\n    clear() {\n        this._map = new WeakMap();\n        this._idmap = new Map();\n        return this;\n    }\n    remove(schema) {\n        const meta = this._map.get(schema);\n        if (meta && typeof meta === \"object\" && \"id\" in meta) {\n            this._idmap.delete(meta.id);\n        }\n        this._map.delete(schema);\n        return this;\n    }\n    get(schema) {\n        // return this._map.get(schema) as any;\n        // inherit metadata\n        const p = schema._zod.parent;\n        if (p) {\n            const pm = { ...(this.get(p) ?? {}) };\n            delete pm.id; // do not inherit id\n            const f = { ...pm, ...this._map.get(schema) };\n            return Object.keys(f).length ? f : undefined;\n        }\n        return this._map.get(schema);\n    }\n    has(schema) {\n        return this._map.has(schema);\n    }\n}\n// registries\nexport function registry() {\n    return new $ZodRegistry();\n}\nexport const globalRegistry = /*@__PURE__*/ registry();\n","import * as checks from \"./checks.js\";\nimport * as schemas from \"./schemas.js\";\nimport * as util from \"./util.js\";\nexport function _string(Class, params) {\n    return new Class({\n        type: \"string\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _coercedString(Class, params) {\n    return new Class({\n        type: \"string\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _email(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"email\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _guid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"guid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uuidv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v4\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uuidv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v6\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uuidv7(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v7\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _url(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"url\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _emoji(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"emoji\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _nanoid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"nanoid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _cuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _cuid2(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cuid2\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _ulid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ulid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _xid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"xid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _ksuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ksuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _ipv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ipv4\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _ipv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ipv6\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _cidrv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cidrv4\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _cidrv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cidrv6\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _base64(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"base64\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _base64url(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"base64url\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _e164(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"e164\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _jwt(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"jwt\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport const TimePrecision = {\n    Any: null,\n    Minute: -1,\n    Second: 0,\n    Millisecond: 3,\n    Microsecond: 6,\n};\nexport function _isoDateTime(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"datetime\",\n        check: \"string_format\",\n        offset: false,\n        local: false,\n        precision: null,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _isoDate(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"date\",\n        check: \"string_format\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _isoTime(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"time\",\n        check: \"string_format\",\n        precision: null,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _isoDuration(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"duration\",\n        check: \"string_format\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _number(Class, params) {\n    return new Class({\n        type: \"number\",\n        checks: [],\n        ...util.normalizeParams(params),\n    });\n}\nexport function _coercedNumber(Class, params) {\n    return new Class({\n        type: \"number\",\n        coerce: true,\n        checks: [],\n        ...util.normalizeParams(params),\n    });\n}\nexport function _int(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"safeint\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _float32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"float32\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _float64(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"float64\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _int32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"int32\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uint32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"uint32\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _boolean(Class, params) {\n    return new Class({\n        type: \"boolean\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _coercedBoolean(Class, params) {\n    return new Class({\n        type: \"boolean\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _bigint(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _coercedBigint(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _int64(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        check: \"bigint_format\",\n        abort: false,\n        format: \"int64\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uint64(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        check: \"bigint_format\",\n        abort: false,\n        format: \"uint64\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _symbol(Class, params) {\n    return new Class({\n        type: \"symbol\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _undefined(Class, params) {\n    return new Class({\n        type: \"undefined\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _null(Class, params) {\n    return new Class({\n        type: \"null\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _any(Class) {\n    return new Class({\n        type: \"any\",\n    });\n}\nexport function _unknown(Class) {\n    return new Class({\n        type: \"unknown\",\n    });\n}\nexport function _never(Class, params) {\n    return new Class({\n        type: \"never\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _void(Class, params) {\n    return new Class({\n        type: \"void\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _date(Class, params) {\n    return new Class({\n        type: \"date\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _coercedDate(Class, params) {\n    return new Class({\n        type: \"date\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _nan(Class, params) {\n    return new Class({\n        type: \"nan\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _lt(value, params) {\n    return new checks.$ZodCheckLessThan({\n        check: \"less_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: false,\n    });\n}\nexport function _lte(value, params) {\n    return new checks.$ZodCheckLessThan({\n        check: \"less_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: true,\n    });\n}\nexport { \n/** @deprecated Use `z.lte()` instead. */\n_lte as _max, };\nexport function _gt(value, params) {\n    return new checks.$ZodCheckGreaterThan({\n        check: \"greater_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: false,\n    });\n}\nexport function _gte(value, params) {\n    return new checks.$ZodCheckGreaterThan({\n        check: \"greater_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: true,\n    });\n}\nexport { \n/** @deprecated Use `z.gte()` instead. */\n_gte as _min, };\nexport function _positive(params) {\n    return _gt(0, params);\n}\n// negative\nexport function _negative(params) {\n    return _lt(0, params);\n}\n// nonpositive\nexport function _nonpositive(params) {\n    return _lte(0, params);\n}\n// nonnegative\nexport function _nonnegative(params) {\n    return _gte(0, params);\n}\nexport function _multipleOf(value, params) {\n    return new checks.$ZodCheckMultipleOf({\n        check: \"multiple_of\",\n        ...util.normalizeParams(params),\n        value,\n    });\n}\nexport function _maxSize(maximum, params) {\n    return new checks.$ZodCheckMaxSize({\n        check: \"max_size\",\n        ...util.normalizeParams(params),\n        maximum,\n    });\n}\nexport function _minSize(minimum, params) {\n    return new checks.$ZodCheckMinSize({\n        check: \"min_size\",\n        ...util.normalizeParams(params),\n        minimum,\n    });\n}\nexport function _size(size, params) {\n    return new checks.$ZodCheckSizeEquals({\n        check: \"size_equals\",\n        ...util.normalizeParams(params),\n        size,\n    });\n}\nexport function _maxLength(maximum, params) {\n    const ch = new checks.$ZodCheckMaxLength({\n        check: \"max_length\",\n        ...util.normalizeParams(params),\n        maximum,\n    });\n    return ch;\n}\nexport function _minLength(minimum, params) {\n    return new checks.$ZodCheckMinLength({\n        check: \"min_length\",\n        ...util.normalizeParams(params),\n        minimum,\n    });\n}\nexport function _length(length, params) {\n    return new checks.$ZodCheckLengthEquals({\n        check: \"length_equals\",\n        ...util.normalizeParams(params),\n        length,\n    });\n}\nexport function _regex(pattern, params) {\n    return new checks.$ZodCheckRegex({\n        check: \"string_format\",\n        format: \"regex\",\n        ...util.normalizeParams(params),\n        pattern,\n    });\n}\nexport function _lowercase(params) {\n    return new checks.$ZodCheckLowerCase({\n        check: \"string_format\",\n        format: \"lowercase\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uppercase(params) {\n    return new checks.$ZodCheckUpperCase({\n        check: \"string_format\",\n        format: \"uppercase\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _includes(includes, params) {\n    return new checks.$ZodCheckIncludes({\n        check: \"string_format\",\n        format: \"includes\",\n        ...util.normalizeParams(params),\n        includes,\n    });\n}\nexport function _startsWith(prefix, params) {\n    return new checks.$ZodCheckStartsWith({\n        check: \"string_format\",\n        format: \"starts_with\",\n        ...util.normalizeParams(params),\n        prefix,\n    });\n}\nexport function _endsWith(suffix, params) {\n    return new checks.$ZodCheckEndsWith({\n        check: \"string_format\",\n        format: \"ends_with\",\n        ...util.normalizeParams(params),\n        suffix,\n    });\n}\nexport function _property(property, schema, params) {\n    return new checks.$ZodCheckProperty({\n        check: \"property\",\n        property,\n        schema,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _mime(types, params) {\n    return new checks.$ZodCheckMimeType({\n        check: \"mime_type\",\n        mime: types,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _overwrite(tx) {\n    return new checks.$ZodCheckOverwrite({\n        check: \"overwrite\",\n        tx,\n    });\n}\n// normalize\nexport function _normalize(form) {\n    return _overwrite((input) => input.normalize(form));\n}\n// trim\nexport function _trim() {\n    return _overwrite((input) => input.trim());\n}\n// toLowerCase\nexport function _toLowerCase() {\n    return _overwrite((input) => input.toLowerCase());\n}\n// toUpperCase\nexport function _toUpperCase() {\n    return _overwrite((input) => input.toUpperCase());\n}\nexport function _array(Class, element, params) {\n    return new Class({\n        type: \"array\",\n        element,\n        // get element() {\n        //   return element;\n        // },\n        ...util.normalizeParams(params),\n    });\n}\nexport function _union(Class, options, params) {\n    return new Class({\n        type: \"union\",\n        options,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _discriminatedUnion(Class, discriminator, options, params) {\n    return new Class({\n        type: \"union\",\n        options,\n        discriminator,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _intersection(Class, left, right) {\n    return new Class({\n        type: \"intersection\",\n        left,\n        right,\n    });\n}\n// export function _tuple(\n//   Class: util.SchemaClass<schemas.$ZodTuple>,\n//   items: [],\n//   params?: string | $ZodTupleParams\n// ): schemas.$ZodTuple<[], null>;\nexport function _tuple(Class, items, _paramsOrRest, _params) {\n    const hasRest = _paramsOrRest instanceof schemas.$ZodType;\n    const params = hasRest ? _params : _paramsOrRest;\n    const rest = hasRest ? _paramsOrRest : null;\n    return new Class({\n        type: \"tuple\",\n        items,\n        rest,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _record(Class, keyType, valueType, params) {\n    return new Class({\n        type: \"record\",\n        keyType,\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _map(Class, keyType, valueType, params) {\n    return new Class({\n        type: \"map\",\n        keyType,\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _set(Class, valueType, params) {\n    return new Class({\n        type: \"set\",\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _enum(Class, values, params) {\n    const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n    // if (Array.isArray(values)) {\n    //   for (const value of values) {\n    //     entries[value] = value;\n    //   }\n    // } else {\n    //   Object.assign(entries, values);\n    // }\n    // const entries: util.EnumLike = {};\n    // for (const val of values) {\n    //   entries[val] = val;\n    // }\n    return new Class({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function _nativeEnum(Class, entries, params) {\n    return new Class({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _literal(Class, value, params) {\n    return new Class({\n        type: \"literal\",\n        values: Array.isArray(value) ? value : [value],\n        ...util.normalizeParams(params),\n    });\n}\nexport function _file(Class, params) {\n    return new Class({\n        type: \"file\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _transform(Class, fn) {\n    return new Class({\n        type: \"transform\",\n        transform: fn,\n    });\n}\nexport function _optional(Class, innerType) {\n    return new Class({\n        type: \"optional\",\n        innerType,\n    });\n}\nexport function _nullable(Class, innerType) {\n    return new Class({\n        type: \"nullable\",\n        innerType,\n    });\n}\nexport function _default(Class, innerType, defaultValue) {\n    return new Class({\n        type: \"default\",\n        innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n        },\n    });\n}\nexport function _nonoptional(Class, innerType, params) {\n    return new Class({\n        type: \"nonoptional\",\n        innerType,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _success(Class, innerType) {\n    return new Class({\n        type: \"success\",\n        innerType,\n    });\n}\nexport function _catch(Class, innerType, catchValue) {\n    return new Class({\n        type: \"catch\",\n        innerType,\n        catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n    });\n}\nexport function _pipe(Class, in_, out) {\n    return new Class({\n        type: \"pipe\",\n        in: in_,\n        out,\n    });\n}\nexport function _readonly(Class, innerType) {\n    return new Class({\n        type: \"readonly\",\n        innerType,\n    });\n}\nexport function _templateLiteral(Class, parts, params) {\n    return new Class({\n        type: \"template_literal\",\n        parts,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _lazy(Class, getter) {\n    return new Class({\n        type: \"lazy\",\n        getter,\n    });\n}\nexport function _promise(Class, innerType) {\n    return new Class({\n        type: \"promise\",\n        innerType,\n    });\n}\nexport function _custom(Class, fn, _params) {\n    const norm = util.normalizeParams(_params);\n    norm.abort ?? (norm.abort = true); // default to abort:false\n    const schema = new Class({\n        type: \"custom\",\n        check: \"custom\",\n        fn: fn,\n        ...norm,\n    });\n    return schema;\n}\n// same as _custom but defaults to abort:false\nexport function _refine(Class, fn, _params) {\n    const schema = new Class({\n        type: \"custom\",\n        check: \"custom\",\n        fn: fn,\n        ...util.normalizeParams(_params),\n    });\n    return schema;\n}\nexport function _superRefine(fn) {\n    const ch = _check((payload) => {\n        payload.addIssue = (issue) => {\n            if (typeof issue === \"string\") {\n                payload.issues.push(util.issue(issue, payload.value, ch._zod.def));\n            }\n            else {\n                // for Zod 3 backwards compatibility\n                const _issue = issue;\n                if (_issue.fatal)\n                    _issue.continue = false;\n                _issue.code ?? (_issue.code = \"custom\");\n                _issue.input ?? (_issue.input = payload.value);\n                _issue.inst ?? (_issue.inst = ch);\n                _issue.continue ?? (_issue.continue = !ch._zod.def.abort); // abort is always undefined, so this is always true...\n                payload.issues.push(util.issue(_issue));\n            }\n        };\n        return fn(payload.value, payload);\n    });\n    return ch;\n}\nexport function _check(fn, params) {\n    const ch = new checks.$ZodCheck({\n        check: \"custom\",\n        ...util.normalizeParams(params),\n    });\n    ch._zod.check = fn;\n    return ch;\n}\nexport function _stringbool(Classes, _params) {\n    const params = util.normalizeParams(_params);\n    let truthyArray = params.truthy ?? [\"true\", \"1\", \"yes\", \"on\", \"y\", \"enabled\"];\n    let falsyArray = params.falsy ?? [\"false\", \"0\", \"no\", \"off\", \"n\", \"disabled\"];\n    if (params.case !== \"sensitive\") {\n        truthyArray = truthyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n        falsyArray = falsyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n    }\n    const truthySet = new Set(truthyArray);\n    const falsySet = new Set(falsyArray);\n    const _Codec = Classes.Codec ?? schemas.$ZodCodec;\n    const _Boolean = Classes.Boolean ?? schemas.$ZodBoolean;\n    const _String = Classes.String ?? schemas.$ZodString;\n    const stringSchema = new _String({ type: \"string\", error: params.error });\n    const booleanSchema = new _Boolean({ type: \"boolean\", error: params.error });\n    const codec = new _Codec({\n        type: \"pipe\",\n        in: stringSchema,\n        out: booleanSchema,\n        transform: ((input, payload) => {\n            let data = input;\n            if (params.case !== \"sensitive\")\n                data = data.toLowerCase();\n            if (truthySet.has(data)) {\n                return true;\n            }\n            else if (falsySet.has(data)) {\n                return false;\n            }\n            else {\n                payload.issues.push({\n                    code: \"invalid_value\",\n                    expected: \"stringbool\",\n                    values: [...truthySet, ...falsySet],\n                    input: payload.value,\n                    inst: codec,\n                    continue: false,\n                });\n                return {};\n            }\n        }),\n        reverseTransform: ((input, _payload) => {\n            if (input === true) {\n                return truthyArray[0] || \"true\";\n            }\n            else {\n                return falsyArray[0] || \"false\";\n            }\n        }),\n        error: params.error,\n    });\n    return codec;\n}\nexport function _stringFormat(Class, format, fnOrRegex, _params = {}) {\n    const params = util.normalizeParams(_params);\n    const def = {\n        ...util.normalizeParams(_params),\n        check: \"string_format\",\n        type: \"string\",\n        format,\n        fn: typeof fnOrRegex === \"function\" ? fnOrRegex : (val) => fnOrRegex.test(val),\n        ...params,\n    };\n    if (fnOrRegex instanceof RegExp) {\n        def.pattern = fnOrRegex;\n    }\n    const inst = new Class(def);\n    return inst;\n}\n","import * as core from \"../core/index.js\";\nimport * as schemas from \"./schemas.js\";\nexport const ZodISODateTime = /*@__PURE__*/ core.$constructor(\"ZodISODateTime\", (inst, def) => {\n    core.$ZodISODateTime.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function datetime(params) {\n    return core._isoDateTime(ZodISODateTime, params);\n}\nexport const ZodISODate = /*@__PURE__*/ core.$constructor(\"ZodISODate\", (inst, def) => {\n    core.$ZodISODate.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function date(params) {\n    return core._isoDate(ZodISODate, params);\n}\nexport const ZodISOTime = /*@__PURE__*/ core.$constructor(\"ZodISOTime\", (inst, def) => {\n    core.$ZodISOTime.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function time(params) {\n    return core._isoTime(ZodISOTime, params);\n}\nexport const ZodISODuration = /*@__PURE__*/ core.$constructor(\"ZodISODuration\", (inst, def) => {\n    core.$ZodISODuration.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function duration(params) {\n    return core._isoDuration(ZodISODuration, params);\n}\n","import * as core from \"../core/index.js\";\nimport { $ZodError } from \"../core/index.js\";\nimport * as util from \"../core/util.js\";\nconst initializer = (inst, issues) => {\n    $ZodError.init(inst, issues);\n    inst.name = \"ZodError\";\n    Object.defineProperties(inst, {\n        format: {\n            value: (mapper) => core.formatError(inst, mapper),\n            // enumerable: false,\n        },\n        flatten: {\n            value: (mapper) => core.flattenError(inst, mapper),\n            // enumerable: false,\n        },\n        addIssue: {\n            value: (issue) => {\n                inst.issues.push(issue);\n                inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n            },\n            // enumerable: false,\n        },\n        addIssues: {\n            value: (issues) => {\n                inst.issues.push(...issues);\n                inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n            },\n            // enumerable: false,\n        },\n        isEmpty: {\n            get() {\n                return inst.issues.length === 0;\n            },\n            // enumerable: false,\n        },\n    });\n    // Object.defineProperty(inst, \"isEmpty\", {\n    //   get() {\n    //     return inst.issues.length === 0;\n    //   },\n    // });\n};\nexport const ZodError = core.$constructor(\"ZodError\", initializer);\nexport const ZodRealError = core.$constructor(\"ZodError\", initializer, {\n    Parent: Error,\n});\n// /** @deprecated Use `z.core.$ZodErrorMapCtx` instead. */\n// export type ErrorMapCtx = core.$ZodErrorMapCtx;\n","import * as core from \"../core/index.js\";\nimport { ZodRealError } from \"./errors.js\";\nexport const parse = /* @__PURE__ */ core._parse(ZodRealError);\nexport const parseAsync = /* @__PURE__ */ core._parseAsync(ZodRealError);\nexport const safeParse = /* @__PURE__ */ core._safeParse(ZodRealError);\nexport const safeParseAsync = /* @__PURE__ */ core._safeParseAsync(ZodRealError);\n// Codec functions\nexport const encode = /* @__PURE__ */ core._encode(ZodRealError);\nexport const decode = /* @__PURE__ */ core._decode(ZodRealError);\nexport const encodeAsync = /* @__PURE__ */ core._encodeAsync(ZodRealError);\nexport const decodeAsync = /* @__PURE__ */ core._decodeAsync(ZodRealError);\nexport const safeEncode = /* @__PURE__ */ core._safeEncode(ZodRealError);\nexport const safeDecode = /* @__PURE__ */ core._safeDecode(ZodRealError);\nexport const safeEncodeAsync = /* @__PURE__ */ core._safeEncodeAsync(ZodRealError);\nexport const safeDecodeAsync = /* @__PURE__ */ core._safeDecodeAsync(ZodRealError);\n","import * as core from \"../core/index.js\";\nimport { util } from \"../core/index.js\";\nimport * as checks from \"./checks.js\";\nimport * as iso from \"./iso.js\";\nimport * as parse from \"./parse.js\";\nexport const ZodType = /*@__PURE__*/ core.$constructor(\"ZodType\", (inst, def) => {\n    core.$ZodType.init(inst, def);\n    inst.def = def;\n    inst.type = def.type;\n    Object.defineProperty(inst, \"_def\", { value: def });\n    // base methods\n    inst.check = (...checks) => {\n        return inst.clone(util.mergeDefs(def, {\n            checks: [\n                ...(def.checks ?? []),\n                ...checks.map((ch) => typeof ch === \"function\" ? { _zod: { check: ch, def: { check: \"custom\" }, onattach: [] } } : ch),\n            ],\n        }));\n    };\n    inst.clone = (def, params) => core.clone(inst, def, params);\n    inst.brand = () => inst;\n    inst.register = ((reg, meta) => {\n        reg.add(inst, meta);\n        return inst;\n    });\n    // parsing\n    inst.parse = (data, params) => parse.parse(inst, data, params, { callee: inst.parse });\n    inst.safeParse = (data, params) => parse.safeParse(inst, data, params);\n    inst.parseAsync = async (data, params) => parse.parseAsync(inst, data, params, { callee: inst.parseAsync });\n    inst.safeParseAsync = async (data, params) => parse.safeParseAsync(inst, data, params);\n    inst.spa = inst.safeParseAsync;\n    // encoding/decoding\n    inst.encode = (data, params) => parse.encode(inst, data, params);\n    inst.decode = (data, params) => parse.decode(inst, data, params);\n    inst.encodeAsync = async (data, params) => parse.encodeAsync(inst, data, params);\n    inst.decodeAsync = async (data, params) => parse.decodeAsync(inst, data, params);\n    inst.safeEncode = (data, params) => parse.safeEncode(inst, data, params);\n    inst.safeDecode = (data, params) => parse.safeDecode(inst, data, params);\n    inst.safeEncodeAsync = async (data, params) => parse.safeEncodeAsync(inst, data, params);\n    inst.safeDecodeAsync = async (data, params) => parse.safeDecodeAsync(inst, data, params);\n    // refinements\n    inst.refine = (check, params) => inst.check(refine(check, params));\n    inst.superRefine = (refinement) => inst.check(superRefine(refinement));\n    inst.overwrite = (fn) => inst.check(checks.overwrite(fn));\n    // wrappers\n    inst.optional = () => optional(inst);\n    inst.nullable = () => nullable(inst);\n    inst.nullish = () => optional(nullable(inst));\n    inst.nonoptional = (params) => nonoptional(inst, params);\n    inst.array = () => array(inst);\n    inst.or = (arg) => union([inst, arg]);\n    inst.and = (arg) => intersection(inst, arg);\n    inst.transform = (tx) => pipe(inst, transform(tx));\n    inst.default = (def) => _default(inst, def);\n    inst.prefault = (def) => prefault(inst, def);\n    // inst.coalesce = (def, params) => coalesce(inst, def, params);\n    inst.catch = (params) => _catch(inst, params);\n    inst.pipe = (target) => pipe(inst, target);\n    inst.readonly = () => readonly(inst);\n    // meta\n    inst.describe = (description) => {\n        const cl = inst.clone();\n        core.globalRegistry.add(cl, { description });\n        return cl;\n    };\n    Object.defineProperty(inst, \"description\", {\n        get() {\n            return core.globalRegistry.get(inst)?.description;\n        },\n        configurable: true,\n    });\n    inst.meta = (...args) => {\n        if (args.length === 0) {\n            return core.globalRegistry.get(inst);\n        }\n        const cl = inst.clone();\n        core.globalRegistry.add(cl, args[0]);\n        return cl;\n    };\n    // helpers\n    inst.isOptional = () => inst.safeParse(undefined).success;\n    inst.isNullable = () => inst.safeParse(null).success;\n    return inst;\n});\n/** @internal */\nexport const _ZodString = /*@__PURE__*/ core.$constructor(\"_ZodString\", (inst, def) => {\n    core.$ZodString.init(inst, def);\n    ZodType.init(inst, def);\n    const bag = inst._zod.bag;\n    inst.format = bag.format ?? null;\n    inst.minLength = bag.minimum ?? null;\n    inst.maxLength = bag.maximum ?? null;\n    // validations\n    inst.regex = (...args) => inst.check(checks.regex(...args));\n    inst.includes = (...args) => inst.check(checks.includes(...args));\n    inst.startsWith = (...args) => inst.check(checks.startsWith(...args));\n    inst.endsWith = (...args) => inst.check(checks.endsWith(...args));\n    inst.min = (...args) => inst.check(checks.minLength(...args));\n    inst.max = (...args) => inst.check(checks.maxLength(...args));\n    inst.length = (...args) => inst.check(checks.length(...args));\n    inst.nonempty = (...args) => inst.check(checks.minLength(1, ...args));\n    inst.lowercase = (params) => inst.check(checks.lowercase(params));\n    inst.uppercase = (params) => inst.check(checks.uppercase(params));\n    // transforms\n    inst.trim = () => inst.check(checks.trim());\n    inst.normalize = (...args) => inst.check(checks.normalize(...args));\n    inst.toLowerCase = () => inst.check(checks.toLowerCase());\n    inst.toUpperCase = () => inst.check(checks.toUpperCase());\n});\nexport const ZodString = /*@__PURE__*/ core.$constructor(\"ZodString\", (inst, def) => {\n    core.$ZodString.init(inst, def);\n    _ZodString.init(inst, def);\n    inst.email = (params) => inst.check(core._email(ZodEmail, params));\n    inst.url = (params) => inst.check(core._url(ZodURL, params));\n    inst.jwt = (params) => inst.check(core._jwt(ZodJWT, params));\n    inst.emoji = (params) => inst.check(core._emoji(ZodEmoji, params));\n    inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n    inst.uuid = (params) => inst.check(core._uuid(ZodUUID, params));\n    inst.uuidv4 = (params) => inst.check(core._uuidv4(ZodUUID, params));\n    inst.uuidv6 = (params) => inst.check(core._uuidv6(ZodUUID, params));\n    inst.uuidv7 = (params) => inst.check(core._uuidv7(ZodUUID, params));\n    inst.nanoid = (params) => inst.check(core._nanoid(ZodNanoID, params));\n    inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n    inst.cuid = (params) => inst.check(core._cuid(ZodCUID, params));\n    inst.cuid2 = (params) => inst.check(core._cuid2(ZodCUID2, params));\n    inst.ulid = (params) => inst.check(core._ulid(ZodULID, params));\n    inst.base64 = (params) => inst.check(core._base64(ZodBase64, params));\n    inst.base64url = (params) => inst.check(core._base64url(ZodBase64URL, params));\n    inst.xid = (params) => inst.check(core._xid(ZodXID, params));\n    inst.ksuid = (params) => inst.check(core._ksuid(ZodKSUID, params));\n    inst.ipv4 = (params) => inst.check(core._ipv4(ZodIPv4, params));\n    inst.ipv6 = (params) => inst.check(core._ipv6(ZodIPv6, params));\n    inst.cidrv4 = (params) => inst.check(core._cidrv4(ZodCIDRv4, params));\n    inst.cidrv6 = (params) => inst.check(core._cidrv6(ZodCIDRv6, params));\n    inst.e164 = (params) => inst.check(core._e164(ZodE164, params));\n    // iso\n    inst.datetime = (params) => inst.check(iso.datetime(params));\n    inst.date = (params) => inst.check(iso.date(params));\n    inst.time = (params) => inst.check(iso.time(params));\n    inst.duration = (params) => inst.check(iso.duration(params));\n});\nexport function string(params) {\n    return core._string(ZodString, params);\n}\nexport const ZodStringFormat = /*@__PURE__*/ core.$constructor(\"ZodStringFormat\", (inst, def) => {\n    core.$ZodStringFormat.init(inst, def);\n    _ZodString.init(inst, def);\n});\nexport const ZodEmail = /*@__PURE__*/ core.$constructor(\"ZodEmail\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodEmail.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function email(params) {\n    return core._email(ZodEmail, params);\n}\nexport const ZodGUID = /*@__PURE__*/ core.$constructor(\"ZodGUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodGUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function guid(params) {\n    return core._guid(ZodGUID, params);\n}\nexport const ZodUUID = /*@__PURE__*/ core.$constructor(\"ZodUUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodUUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function uuid(params) {\n    return core._uuid(ZodUUID, params);\n}\nexport function uuidv4(params) {\n    return core._uuidv4(ZodUUID, params);\n}\n// ZodUUIDv6\nexport function uuidv6(params) {\n    return core._uuidv6(ZodUUID, params);\n}\n// ZodUUIDv7\nexport function uuidv7(params) {\n    return core._uuidv7(ZodUUID, params);\n}\nexport const ZodURL = /*@__PURE__*/ core.$constructor(\"ZodURL\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodURL.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function url(params) {\n    return core._url(ZodURL, params);\n}\nexport function httpUrl(params) {\n    return core._url(ZodURL, {\n        protocol: /^https?$/,\n        hostname: core.regexes.domain,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodEmoji = /*@__PURE__*/ core.$constructor(\"ZodEmoji\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodEmoji.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function emoji(params) {\n    return core._emoji(ZodEmoji, params);\n}\nexport const ZodNanoID = /*@__PURE__*/ core.$constructor(\"ZodNanoID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodNanoID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function nanoid(params) {\n    return core._nanoid(ZodNanoID, params);\n}\nexport const ZodCUID = /*@__PURE__*/ core.$constructor(\"ZodCUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cuid(params) {\n    return core._cuid(ZodCUID, params);\n}\nexport const ZodCUID2 = /*@__PURE__*/ core.$constructor(\"ZodCUID2\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCUID2.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cuid2(params) {\n    return core._cuid2(ZodCUID2, params);\n}\nexport const ZodULID = /*@__PURE__*/ core.$constructor(\"ZodULID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodULID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ulid(params) {\n    return core._ulid(ZodULID, params);\n}\nexport const ZodXID = /*@__PURE__*/ core.$constructor(\"ZodXID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodXID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function xid(params) {\n    return core._xid(ZodXID, params);\n}\nexport const ZodKSUID = /*@__PURE__*/ core.$constructor(\"ZodKSUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodKSUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ksuid(params) {\n    return core._ksuid(ZodKSUID, params);\n}\nexport const ZodIPv4 = /*@__PURE__*/ core.$constructor(\"ZodIPv4\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodIPv4.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ipv4(params) {\n    return core._ipv4(ZodIPv4, params);\n}\nexport const ZodIPv6 = /*@__PURE__*/ core.$constructor(\"ZodIPv6\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodIPv6.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ipv6(params) {\n    return core._ipv6(ZodIPv6, params);\n}\nexport const ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv4\", (inst, def) => {\n    core.$ZodCIDRv4.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cidrv4(params) {\n    return core._cidrv4(ZodCIDRv4, params);\n}\nexport const ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv6\", (inst, def) => {\n    core.$ZodCIDRv6.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cidrv6(params) {\n    return core._cidrv6(ZodCIDRv6, params);\n}\nexport const ZodBase64 = /*@__PURE__*/ core.$constructor(\"ZodBase64\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodBase64.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function base64(params) {\n    return core._base64(ZodBase64, params);\n}\nexport const ZodBase64URL = /*@__PURE__*/ core.$constructor(\"ZodBase64URL\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodBase64URL.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function base64url(params) {\n    return core._base64url(ZodBase64URL, params);\n}\nexport const ZodE164 = /*@__PURE__*/ core.$constructor(\"ZodE164\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodE164.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function e164(params) {\n    return core._e164(ZodE164, params);\n}\nexport const ZodJWT = /*@__PURE__*/ core.$constructor(\"ZodJWT\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodJWT.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function jwt(params) {\n    return core._jwt(ZodJWT, params);\n}\nexport const ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"ZodCustomStringFormat\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCustomStringFormat.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function stringFormat(format, fnOrRegex, _params = {}) {\n    return core._stringFormat(ZodCustomStringFormat, format, fnOrRegex, _params);\n}\nexport function hostname(_params) {\n    return core._stringFormat(ZodCustomStringFormat, \"hostname\", core.regexes.hostname, _params);\n}\nexport function hex(_params) {\n    return core._stringFormat(ZodCustomStringFormat, \"hex\", core.regexes.hex, _params);\n}\nexport function hash(alg, params) {\n    const enc = params?.enc ?? \"hex\";\n    const format = `${alg}_${enc}`;\n    const regex = core.regexes[format];\n    if (!regex)\n        throw new Error(`Unrecognized hash format: ${format}`);\n    return core._stringFormat(ZodCustomStringFormat, format, regex, params);\n}\nexport const ZodNumber = /*@__PURE__*/ core.$constructor(\"ZodNumber\", (inst, def) => {\n    core.$ZodNumber.init(inst, def);\n    ZodType.init(inst, def);\n    inst.gt = (value, params) => inst.check(checks.gt(value, params));\n    inst.gte = (value, params) => inst.check(checks.gte(value, params));\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.lt = (value, params) => inst.check(checks.lt(value, params));\n    inst.lte = (value, params) => inst.check(checks.lte(value, params));\n    inst.max = (value, params) => inst.check(checks.lte(value, params));\n    inst.int = (params) => inst.check(int(params));\n    inst.safe = (params) => inst.check(int(params));\n    inst.positive = (params) => inst.check(checks.gt(0, params));\n    inst.nonnegative = (params) => inst.check(checks.gte(0, params));\n    inst.negative = (params) => inst.check(checks.lt(0, params));\n    inst.nonpositive = (params) => inst.check(checks.lte(0, params));\n    inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n    inst.step = (value, params) => inst.check(checks.multipleOf(value, params));\n    // inst.finite = (params) => inst.check(core.finite(params));\n    inst.finite = () => inst;\n    const bag = inst._zod.bag;\n    inst.minValue =\n        Math.max(bag.minimum ?? Number.NEGATIVE_INFINITY, bag.exclusiveMinimum ?? Number.NEGATIVE_INFINITY) ?? null;\n    inst.maxValue =\n        Math.min(bag.maximum ?? Number.POSITIVE_INFINITY, bag.exclusiveMaximum ?? Number.POSITIVE_INFINITY) ?? null;\n    inst.isInt = (bag.format ?? \"\").includes(\"int\") || Number.isSafeInteger(bag.multipleOf ?? 0.5);\n    inst.isFinite = true;\n    inst.format = bag.format ?? null;\n});\nexport function number(params) {\n    return core._number(ZodNumber, params);\n}\nexport const ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"ZodNumberFormat\", (inst, def) => {\n    core.$ZodNumberFormat.init(inst, def);\n    ZodNumber.init(inst, def);\n});\nexport function int(params) {\n    return core._int(ZodNumberFormat, params);\n}\nexport function float32(params) {\n    return core._float32(ZodNumberFormat, params);\n}\nexport function float64(params) {\n    return core._float64(ZodNumberFormat, params);\n}\nexport function int32(params) {\n    return core._int32(ZodNumberFormat, params);\n}\nexport function uint32(params) {\n    return core._uint32(ZodNumberFormat, params);\n}\nexport const ZodBoolean = /*@__PURE__*/ core.$constructor(\"ZodBoolean\", (inst, def) => {\n    core.$ZodBoolean.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function boolean(params) {\n    return core._boolean(ZodBoolean, params);\n}\nexport const ZodBigInt = /*@__PURE__*/ core.$constructor(\"ZodBigInt\", (inst, def) => {\n    core.$ZodBigInt.init(inst, def);\n    ZodType.init(inst, def);\n    inst.gte = (value, params) => inst.check(checks.gte(value, params));\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.gt = (value, params) => inst.check(checks.gt(value, params));\n    inst.gte = (value, params) => inst.check(checks.gte(value, params));\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.lt = (value, params) => inst.check(checks.lt(value, params));\n    inst.lte = (value, params) => inst.check(checks.lte(value, params));\n    inst.max = (value, params) => inst.check(checks.lte(value, params));\n    inst.positive = (params) => inst.check(checks.gt(BigInt(0), params));\n    inst.negative = (params) => inst.check(checks.lt(BigInt(0), params));\n    inst.nonpositive = (params) => inst.check(checks.lte(BigInt(0), params));\n    inst.nonnegative = (params) => inst.check(checks.gte(BigInt(0), params));\n    inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n    const bag = inst._zod.bag;\n    inst.minValue = bag.minimum ?? null;\n    inst.maxValue = bag.maximum ?? null;\n    inst.format = bag.format ?? null;\n});\nexport function bigint(params) {\n    return core._bigint(ZodBigInt, params);\n}\nexport const ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"ZodBigIntFormat\", (inst, def) => {\n    core.$ZodBigIntFormat.init(inst, def);\n    ZodBigInt.init(inst, def);\n});\n// int64\nexport function int64(params) {\n    return core._int64(ZodBigIntFormat, params);\n}\n// uint64\nexport function uint64(params) {\n    return core._uint64(ZodBigIntFormat, params);\n}\nexport const ZodSymbol = /*@__PURE__*/ core.$constructor(\"ZodSymbol\", (inst, def) => {\n    core.$ZodSymbol.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function symbol(params) {\n    return core._symbol(ZodSymbol, params);\n}\nexport const ZodUndefined = /*@__PURE__*/ core.$constructor(\"ZodUndefined\", (inst, def) => {\n    core.$ZodUndefined.init(inst, def);\n    ZodType.init(inst, def);\n});\nfunction _undefined(params) {\n    return core._undefined(ZodUndefined, params);\n}\nexport { _undefined as undefined };\nexport const ZodNull = /*@__PURE__*/ core.$constructor(\"ZodNull\", (inst, def) => {\n    core.$ZodNull.init(inst, def);\n    ZodType.init(inst, def);\n});\nfunction _null(params) {\n    return core._null(ZodNull, params);\n}\nexport { _null as null };\nexport const ZodAny = /*@__PURE__*/ core.$constructor(\"ZodAny\", (inst, def) => {\n    core.$ZodAny.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function any() {\n    return core._any(ZodAny);\n}\nexport const ZodUnknown = /*@__PURE__*/ core.$constructor(\"ZodUnknown\", (inst, def) => {\n    core.$ZodUnknown.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function unknown() {\n    return core._unknown(ZodUnknown);\n}\nexport const ZodNever = /*@__PURE__*/ core.$constructor(\"ZodNever\", (inst, def) => {\n    core.$ZodNever.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function never(params) {\n    return core._never(ZodNever, params);\n}\nexport const ZodVoid = /*@__PURE__*/ core.$constructor(\"ZodVoid\", (inst, def) => {\n    core.$ZodVoid.init(inst, def);\n    ZodType.init(inst, def);\n});\nfunction _void(params) {\n    return core._void(ZodVoid, params);\n}\nexport { _void as void };\nexport const ZodDate = /*@__PURE__*/ core.$constructor(\"ZodDate\", (inst, def) => {\n    core.$ZodDate.init(inst, def);\n    ZodType.init(inst, def);\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.max = (value, params) => inst.check(checks.lte(value, params));\n    const c = inst._zod.bag;\n    inst.minDate = c.minimum ? new Date(c.minimum) : null;\n    inst.maxDate = c.maximum ? new Date(c.maximum) : null;\n});\nexport function date(params) {\n    return core._date(ZodDate, params);\n}\nexport const ZodArray = /*@__PURE__*/ core.$constructor(\"ZodArray\", (inst, def) => {\n    core.$ZodArray.init(inst, def);\n    ZodType.init(inst, def);\n    inst.element = def.element;\n    inst.min = (minLength, params) => inst.check(checks.minLength(minLength, params));\n    inst.nonempty = (params) => inst.check(checks.minLength(1, params));\n    inst.max = (maxLength, params) => inst.check(checks.maxLength(maxLength, params));\n    inst.length = (len, params) => inst.check(checks.length(len, params));\n    inst.unwrap = () => inst.element;\n});\nexport function array(element, params) {\n    return core._array(ZodArray, element, params);\n}\n// .keyof\nexport function keyof(schema) {\n    const shape = schema._zod.def.shape;\n    return _enum(Object.keys(shape));\n}\nexport const ZodObject = /*@__PURE__*/ core.$constructor(\"ZodObject\", (inst, def) => {\n    core.$ZodObjectJIT.init(inst, def);\n    ZodType.init(inst, def);\n    util.defineLazy(inst, \"shape\", () => {\n        return def.shape;\n    });\n    inst.keyof = () => _enum(Object.keys(inst._zod.def.shape));\n    inst.catchall = (catchall) => inst.clone({ ...inst._zod.def, catchall: catchall });\n    inst.passthrough = () => inst.clone({ ...inst._zod.def, catchall: unknown() });\n    inst.loose = () => inst.clone({ ...inst._zod.def, catchall: unknown() });\n    inst.strict = () => inst.clone({ ...inst._zod.def, catchall: never() });\n    inst.strip = () => inst.clone({ ...inst._zod.def, catchall: undefined });\n    inst.extend = (incoming) => {\n        return util.extend(inst, incoming);\n    };\n    inst.safeExtend = (incoming) => {\n        return util.safeExtend(inst, incoming);\n    };\n    inst.merge = (other) => util.merge(inst, other);\n    inst.pick = (mask) => util.pick(inst, mask);\n    inst.omit = (mask) => util.omit(inst, mask);\n    inst.partial = (...args) => util.partial(ZodOptional, inst, args[0]);\n    inst.required = (...args) => util.required(ZodNonOptional, inst, args[0]);\n});\nexport function object(shape, params) {\n    const def = {\n        type: \"object\",\n        shape: shape ?? {},\n        ...util.normalizeParams(params),\n    };\n    return new ZodObject(def);\n}\n// strictObject\nexport function strictObject(shape, params) {\n    return new ZodObject({\n        type: \"object\",\n        shape,\n        catchall: never(),\n        ...util.normalizeParams(params),\n    });\n}\n// looseObject\nexport function looseObject(shape, params) {\n    return new ZodObject({\n        type: \"object\",\n        shape,\n        catchall: unknown(),\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodUnion = /*@__PURE__*/ core.$constructor(\"ZodUnion\", (inst, def) => {\n    core.$ZodUnion.init(inst, def);\n    ZodType.init(inst, def);\n    inst.options = def.options;\n});\nexport function union(options, params) {\n    return new ZodUnion({\n        type: \"union\",\n        options: options,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodDiscriminatedUnion = /*@__PURE__*/ core.$constructor(\"ZodDiscriminatedUnion\", (inst, def) => {\n    ZodUnion.init(inst, def);\n    core.$ZodDiscriminatedUnion.init(inst, def);\n});\nexport function discriminatedUnion(discriminator, options, params) {\n    // const [options, params] = args;\n    return new ZodDiscriminatedUnion({\n        type: \"union\",\n        options,\n        discriminator,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodIntersection = /*@__PURE__*/ core.$constructor(\"ZodIntersection\", (inst, def) => {\n    core.$ZodIntersection.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function intersection(left, right) {\n    return new ZodIntersection({\n        type: \"intersection\",\n        left: left,\n        right: right,\n    });\n}\nexport const ZodTuple = /*@__PURE__*/ core.$constructor(\"ZodTuple\", (inst, def) => {\n    core.$ZodTuple.init(inst, def);\n    ZodType.init(inst, def);\n    inst.rest = (rest) => inst.clone({\n        ...inst._zod.def,\n        rest: rest,\n    });\n});\nexport function tuple(items, _paramsOrRest, _params) {\n    const hasRest = _paramsOrRest instanceof core.$ZodType;\n    const params = hasRest ? _params : _paramsOrRest;\n    const rest = hasRest ? _paramsOrRest : null;\n    return new ZodTuple({\n        type: \"tuple\",\n        items: items,\n        rest,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodRecord = /*@__PURE__*/ core.$constructor(\"ZodRecord\", (inst, def) => {\n    core.$ZodRecord.init(inst, def);\n    ZodType.init(inst, def);\n    inst.keyType = def.keyType;\n    inst.valueType = def.valueType;\n});\nexport function record(keyType, valueType, params) {\n    return new ZodRecord({\n        type: \"record\",\n        keyType,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\n// type alksjf = core.output<core.$ZodRecordKey>;\nexport function partialRecord(keyType, valueType, params) {\n    const k = core.clone(keyType);\n    k._zod.values = undefined;\n    return new ZodRecord({\n        type: \"record\",\n        keyType: k,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMap = /*@__PURE__*/ core.$constructor(\"ZodMap\", (inst, def) => {\n    core.$ZodMap.init(inst, def);\n    ZodType.init(inst, def);\n    inst.keyType = def.keyType;\n    inst.valueType = def.valueType;\n});\nexport function map(keyType, valueType, params) {\n    return new ZodMap({\n        type: \"map\",\n        keyType: keyType,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodSet = /*@__PURE__*/ core.$constructor(\"ZodSet\", (inst, def) => {\n    core.$ZodSet.init(inst, def);\n    ZodType.init(inst, def);\n    inst.min = (...args) => inst.check(core._minSize(...args));\n    inst.nonempty = (params) => inst.check(core._minSize(1, params));\n    inst.max = (...args) => inst.check(core._maxSize(...args));\n    inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function set(valueType, params) {\n    return new ZodSet({\n        type: \"set\",\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodEnum = /*@__PURE__*/ core.$constructor(\"ZodEnum\", (inst, def) => {\n    core.$ZodEnum.init(inst, def);\n    ZodType.init(inst, def);\n    inst.enum = def.entries;\n    inst.options = Object.values(def.entries);\n    const keys = new Set(Object.keys(def.entries));\n    inst.extract = (values, params) => {\n        const newEntries = {};\n        for (const value of values) {\n            if (keys.has(value)) {\n                newEntries[value] = def.entries[value];\n            }\n            else\n                throw new Error(`Key ${value} not found in enum`);\n        }\n        return new ZodEnum({\n            ...def,\n            checks: [],\n            ...util.normalizeParams(params),\n            entries: newEntries,\n        });\n    };\n    inst.exclude = (values, params) => {\n        const newEntries = { ...def.entries };\n        for (const value of values) {\n            if (keys.has(value)) {\n                delete newEntries[value];\n            }\n            else\n                throw new Error(`Key ${value} not found in enum`);\n        }\n        return new ZodEnum({\n            ...def,\n            checks: [],\n            ...util.normalizeParams(params),\n            entries: newEntries,\n        });\n    };\n});\nfunction _enum(values, params) {\n    const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n    return new ZodEnum({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\nexport { _enum as enum };\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function nativeEnum(entries, params) {\n    return new ZodEnum({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodLiteral = /*@__PURE__*/ core.$constructor(\"ZodLiteral\", (inst, def) => {\n    core.$ZodLiteral.init(inst, def);\n    ZodType.init(inst, def);\n    inst.values = new Set(def.values);\n    Object.defineProperty(inst, \"value\", {\n        get() {\n            if (def.values.length > 1) {\n                throw new Error(\"This schema contains multiple valid literal values. Use `.values` instead.\");\n            }\n            return def.values[0];\n        },\n    });\n});\nexport function literal(value, params) {\n    return new ZodLiteral({\n        type: \"literal\",\n        values: Array.isArray(value) ? value : [value],\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodFile = /*@__PURE__*/ core.$constructor(\"ZodFile\", (inst, def) => {\n    core.$ZodFile.init(inst, def);\n    ZodType.init(inst, def);\n    inst.min = (size, params) => inst.check(core._minSize(size, params));\n    inst.max = (size, params) => inst.check(core._maxSize(size, params));\n    inst.mime = (types, params) => inst.check(core._mime(Array.isArray(types) ? types : [types], params));\n});\nexport function file(params) {\n    return core._file(ZodFile, params);\n}\nexport const ZodTransform = /*@__PURE__*/ core.$constructor(\"ZodTransform\", (inst, def) => {\n    core.$ZodTransform.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        if (_ctx.direction === \"backward\") {\n            throw new core.$ZodEncodeError(inst.constructor.name);\n        }\n        payload.addIssue = (issue) => {\n            if (typeof issue === \"string\") {\n                payload.issues.push(util.issue(issue, payload.value, def));\n            }\n            else {\n                // for Zod 3 backwards compatibility\n                const _issue = issue;\n                if (_issue.fatal)\n                    _issue.continue = false;\n                _issue.code ?? (_issue.code = \"custom\");\n                _issue.input ?? (_issue.input = payload.value);\n                _issue.inst ?? (_issue.inst = inst);\n                // _issue.continue ??= true;\n                payload.issues.push(util.issue(_issue));\n            }\n        };\n        const output = def.transform(payload.value, payload);\n        if (output instanceof Promise) {\n            return output.then((output) => {\n                payload.value = output;\n                return payload;\n            });\n        }\n        payload.value = output;\n        return payload;\n    };\n});\nexport function transform(fn) {\n    return new ZodTransform({\n        type: \"transform\",\n        transform: fn,\n    });\n}\nexport const ZodOptional = /*@__PURE__*/ core.$constructor(\"ZodOptional\", (inst, def) => {\n    core.$ZodOptional.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function optional(innerType) {\n    return new ZodOptional({\n        type: \"optional\",\n        innerType: innerType,\n    });\n}\nexport const ZodNullable = /*@__PURE__*/ core.$constructor(\"ZodNullable\", (inst, def) => {\n    core.$ZodNullable.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nullable(innerType) {\n    return new ZodNullable({\n        type: \"nullable\",\n        innerType: innerType,\n    });\n}\n// nullish\nexport function nullish(innerType) {\n    return optional(nullable(innerType));\n}\nexport const ZodDefault = /*@__PURE__*/ core.$constructor(\"ZodDefault\", (inst, def) => {\n    core.$ZodDefault.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n    inst.removeDefault = inst.unwrap;\n});\nexport function _default(innerType, defaultValue) {\n    return new ZodDefault({\n        type: \"default\",\n        innerType: innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n        },\n    });\n}\nexport const ZodPrefault = /*@__PURE__*/ core.$constructor(\"ZodPrefault\", (inst, def) => {\n    core.$ZodPrefault.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function prefault(innerType, defaultValue) {\n    return new ZodPrefault({\n        type: \"prefault\",\n        innerType: innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n        },\n    });\n}\nexport const ZodNonOptional = /*@__PURE__*/ core.$constructor(\"ZodNonOptional\", (inst, def) => {\n    core.$ZodNonOptional.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nonoptional(innerType, params) {\n    return new ZodNonOptional({\n        type: \"nonoptional\",\n        innerType: innerType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodSuccess = /*@__PURE__*/ core.$constructor(\"ZodSuccess\", (inst, def) => {\n    core.$ZodSuccess.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function success(innerType) {\n    return new ZodSuccess({\n        type: \"success\",\n        innerType: innerType,\n    });\n}\nexport const ZodCatch = /*@__PURE__*/ core.$constructor(\"ZodCatch\", (inst, def) => {\n    core.$ZodCatch.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n    inst.removeCatch = inst.unwrap;\n});\nfunction _catch(innerType, catchValue) {\n    return new ZodCatch({\n        type: \"catch\",\n        innerType: innerType,\n        catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n    });\n}\nexport { _catch as catch };\nexport const ZodNaN = /*@__PURE__*/ core.$constructor(\"ZodNaN\", (inst, def) => {\n    core.$ZodNaN.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function nan(params) {\n    return core._nan(ZodNaN, params);\n}\nexport const ZodPipe = /*@__PURE__*/ core.$constructor(\"ZodPipe\", (inst, def) => {\n    core.$ZodPipe.init(inst, def);\n    ZodType.init(inst, def);\n    inst.in = def.in;\n    inst.out = def.out;\n});\nexport function pipe(in_, out) {\n    return new ZodPipe({\n        type: \"pipe\",\n        in: in_,\n        out: out,\n        // ...util.normalizeParams(params),\n    });\n}\nexport const ZodCodec = /*@__PURE__*/ core.$constructor(\"ZodCodec\", (inst, def) => {\n    ZodPipe.init(inst, def);\n    core.$ZodCodec.init(inst, def);\n});\nexport function codec(in_, out, params) {\n    return new ZodCodec({\n        type: \"pipe\",\n        in: in_,\n        out: out,\n        transform: params.decode,\n        reverseTransform: params.encode,\n    });\n}\nexport const ZodReadonly = /*@__PURE__*/ core.$constructor(\"ZodReadonly\", (inst, def) => {\n    core.$ZodReadonly.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function readonly(innerType) {\n    return new ZodReadonly({\n        type: \"readonly\",\n        innerType: innerType,\n    });\n}\nexport const ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"ZodTemplateLiteral\", (inst, def) => {\n    core.$ZodTemplateLiteral.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function templateLiteral(parts, params) {\n    return new ZodTemplateLiteral({\n        type: \"template_literal\",\n        parts,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodLazy = /*@__PURE__*/ core.$constructor(\"ZodLazy\", (inst, def) => {\n    core.$ZodLazy.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.getter();\n});\nexport function lazy(getter) {\n    return new ZodLazy({\n        type: \"lazy\",\n        getter: getter,\n    });\n}\nexport const ZodPromise = /*@__PURE__*/ core.$constructor(\"ZodPromise\", (inst, def) => {\n    core.$ZodPromise.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function promise(innerType) {\n    return new ZodPromise({\n        type: \"promise\",\n        innerType: innerType,\n    });\n}\nexport const ZodFunction = /*@__PURE__*/ core.$constructor(\"ZodFunction\", (inst, def) => {\n    core.$ZodFunction.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function _function(params) {\n    return new ZodFunction({\n        type: \"function\",\n        input: Array.isArray(params?.input) ? tuple(params?.input) : (params?.input ?? array(unknown())),\n        output: params?.output ?? unknown(),\n    });\n}\nexport { _function as function };\nexport const ZodCustom = /*@__PURE__*/ core.$constructor(\"ZodCustom\", (inst, def) => {\n    core.$ZodCustom.init(inst, def);\n    ZodType.init(inst, def);\n});\n// custom checks\nexport function check(fn) {\n    const ch = new core.$ZodCheck({\n        check: \"custom\",\n        // ...util.normalizeParams(params),\n    });\n    ch._zod.check = fn;\n    return ch;\n}\nexport function custom(fn, _params) {\n    return core._custom(ZodCustom, fn ?? (() => true), _params);\n}\nexport function refine(fn, _params = {}) {\n    return core._refine(ZodCustom, fn, _params);\n}\n// superRefine\nexport function superRefine(fn) {\n    return core._superRefine(fn);\n}\nfunction _instanceof(cls, params = {\n    error: `Input not instance of ${cls.name}`,\n}) {\n    const inst = new ZodCustom({\n        type: \"custom\",\n        check: \"custom\",\n        fn: (data) => data instanceof cls,\n        abort: true,\n        ...util.normalizeParams(params),\n    });\n    inst._zod.bag.Class = cls;\n    return inst;\n}\nexport { _instanceof as instanceof };\n// stringbool\nexport const stringbool = (...args) => core._stringbool({\n    Codec: ZodCodec,\n    Boolean: ZodBoolean,\n    String: ZodString,\n}, ...args);\nexport function json(params) {\n    const jsonSchema = lazy(() => {\n        return union([string(params), number(), boolean(), _null(), array(jsonSchema), record(string(), jsonSchema)]);\n    });\n    return jsonSchema;\n}\n// preprocess\n// /** @deprecated Use `z.pipe()` and `z.transform()` instead. */\nexport function preprocess(fn, schema) {\n    return pipe(transform(fn), schema);\n}\n","// Zod 3 compat layer\nimport * as core from \"../core/index.js\";\n/** @deprecated Use the raw string literal codes instead, e.g. \"invalid_type\". */\nexport const ZodIssueCode = {\n    invalid_type: \"invalid_type\",\n    too_big: \"too_big\",\n    too_small: \"too_small\",\n    invalid_format: \"invalid_format\",\n    not_multiple_of: \"not_multiple_of\",\n    unrecognized_keys: \"unrecognized_keys\",\n    invalid_union: \"invalid_union\",\n    invalid_key: \"invalid_key\",\n    invalid_element: \"invalid_element\",\n    invalid_value: \"invalid_value\",\n    custom: \"custom\",\n};\nexport { $brand, config } from \"../core/index.js\";\n/** @deprecated Use `z.config(params)` instead. */\nexport function setErrorMap(map) {\n    core.config({\n        customError: map,\n    });\n}\n/** @deprecated Use `z.config()` instead. */\nexport function getErrorMap() {\n    return core.config().customError;\n}\n/** @deprecated Do not use. Stub definition, only included for zod-to-json-schema compatibility. */\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n","export * as core from \"../core/index.js\";\nexport * from \"./schemas.js\";\nexport * from \"./checks.js\";\nexport * from \"./errors.js\";\nexport * from \"./parse.js\";\nexport * from \"./compat.js\";\n// zod-specified\nimport { config } from \"../core/index.js\";\nimport en from \"../locales/en.js\";\nconfig(en());\nexport { globalRegistry, registry, config, $output, $input, $brand, clone, regexes, treeifyError, prettifyError, formatError, flattenError, toJSONSchema, TimePrecision, util, NEVER, } from \"../core/index.js\";\nexport * as locales from \"../locales/index.js\";\n// iso\n// must be exported from top-level\n// https://github.com/colinhacks/zod/issues/4491\nexport { ZodISODateTime, ZodISODate, ZodISOTime, ZodISODuration } from \"./iso.js\";\nexport * as iso from \"./iso.js\";\nexport * as coerce from \"./coerce.js\";\n","import { CookieBaseSchema, LocalStorageBaseSchema, LoggerImplement } from \"@iflyrpa/share\";\nimport type { CreateAxiosDefaults } from \"axios\";\nimport { z } from \"zod\";\nimport { SearchAccountInfoResponse } from \"./actions/searchAccountInfo/types\";\n\ndeclare module \"axios\" {\n    export interface AxiosRequestConfig {\n        defaultErrorMsg?: string;\n    }\n}\n\nexport const ActionParamsSchema = z.object({\n    id: z.string().optional(), // steel 任务 id，客户端传入\n    // 以下为browser-use中需要携带的参数\n    userAgent: z.string().optional(),\n    viewport: z\n        .object({\n            width: z.number(),\n            height: z.number(),\n        })\n        .optional()\n        .nullable(),\n});\n\nexport const ActionCommonParamsSchema = ActionParamsSchema.extend({\n    url: z.string().optional(),\n    // cookie 必选项\n    cookies: z.array(CookieBaseSchema),\n    localStorage: z.array(LocalStorageBaseSchema).optional(),\n    extraParam: z.any().optional(), // 额外参数，供不同 action 使用\n    actionType: z.enum([\"mockApi\", \"rpa\", \"server\"]).optional(),\n    accountId: z.number().optional(),\n    proxyLoc: z.string().nullable().optional(), // TODO：兼容前端，后期考虑放弃\n    localIP: z.string().optional(),\n    huiwenToken: z.string().optional(),\n    articleId: z.string().optional(),\n    saveType: z.string().optional(),\n    uid: z.string().optional(),\n});\n\n// 自动生成 TypeScript 类型\nexport type ActiomCommonParams = z.infer<typeof ActionCommonParamsSchema>;\n\nexport type AxiosProxyParams = [\n    CreateAxiosDefaults, // axios 配置\n    LoggerImplement?,\n    (string | null)?, // addr (proxyLoc)\n    number?, // accountId\n    string?, // platform 业务标识\n];\n\nexport enum ExecutionState {\n    RUNNING = \"RUNNING\",\n    SCAN_WAITING = \"SCAN_WAITING\",\n    SCANNED = \"SCANNED\",\n    CONFIRMED = \"CONFIRMED\",\n    SUCCESS = \"SUCCESS\",\n    TIMEOUT = \"TIMEOUT\",\n    BROWSER_CLOSED = \"BROWSER_CLOSED\",\n    FAILED = \"FAILED\",\n}\n\nexport interface FansDetail {\n    following: number | null; // 关注数\n    fans_count: number | null; // 粉丝数\n    digg_count: number | null; // 获赞数\n    description: string; // 个人简介\n}\n\nexport namespace Weixin {\n    export interface FansCount extends FansDetail {}\n\n    export interface WeiXinCropResult {\n        cdnurl: string;\n        file_id: number;\n        width: number;\n        height: number;\n    }\n}\n\nexport namespace BaiJiaHao {\n    export interface FansCount extends FansDetail {}\n}\nexport namespace Toutiao {\n    export interface FansCount extends FansDetail {}\n\n    export interface Topic {\n        concern_id: string;\n        id: string;\n        talk_count: string;\n        talk_count_str: string;\n        type: number;\n        word: string;\n    }\n\n    export interface SuggestWords {\n        user_id: number;\n        name: string;\n        avatar_url: string;\n        followers_count: number;\n    }\n\n    export interface CityPoi {\n        position: string;\n        city: string;\n        longitude: number;\n        latitude: number;\n        type_code: string;\n        poi_id: string;\n    }\n\n    export interface CityDistrict {\n        gps_location: {\n            city_name: string;\n            city_code: string;\n            district_name: string;\n            district_code: string;\n        };\n    }\n\n    export interface UserRight {\n        benefit_list: Array<unknown>;\n        describe: string;\n        fans_num_threshold: number;\n        level: number;\n        type: number;\n    }\n\n    export interface ImageData {\n        image_url: string;\n        image_uri: string;\n        image_width: string;\n        image_height: string;\n        image_type: string;\n        image_mime_type: string;\n    }\n}\n\nexport namespace Xiaohongshu {\n    export interface FansCount extends FansDetail {}\n\n    export interface Topic {\n        id?: string;\n        name: string;\n        type: string;\n        link?: string;\n    }\n\n    export interface Location {\n        address: string;\n        city_name: string;\n        full_address: string;\n        latitude: number;\n        longitude: number;\n        name: string;\n        poi_id: string;\n        poi_type: number;\n        type: string;\n    }\n}\n\nexport const errorResponse = (message: string, code = 500): SearchAccountInfoResponse => ({\n    code,\n    message,\n    data: null,\n});\n\nexport const MockPublish = false;\nexport const DisabledReq = false;\n","import { TaskState, type UserInfo } from \"@iflyrpa/share\";\nimport type { Response as FetchResponse } from \"node-fetch\";\nimport fetch from \"node-fetch\";\nimport { Response } from \"playwright-core\";\nimport { ExecutionState } from \"../../types\";\nimport { ProxyAgent } from \"../../utils/proxy\";\nimport type { SteelAction } from \"./index\";\n\nconst scanRetryMaxCount = 60; // 二维码扫描重试次数\nconst waitQrcodeResultMaxTime = scanRetryMaxCount * 2 * 1000; // 最长等待时间\n\nexport const rpaServer: SteelAction = async (task, params) => {\n    const updateTaskState = task.taskStageStore?.update?.bind(task.taskStageStore, task.taskId || \"\");\n    let executionState: ExecutionState | undefined;\n\n    let proxyUrl: string | undefined;\n    if (params.proxyLoc) {\n        task.logger?.info(`==> 开始获取代理信息：${params}`);\n        const ProxyAgentResult = await ProxyAgent({ logger: task.logger }, params.proxyLoc, params.accountId);\n        task.logger?.info(\"==> 代理信息获取成功！\");\n        proxyUrl = ProxyAgentResult ? `http://${ProxyAgentResult.ip}:${ProxyAgentResult.port}` : undefined;\n    }\n\n    const page = await task.createPage({\n        url: \"https://passport.baidu.com/v2/?login\",\n        proxyUrl,\n        userAgent: params.userAgent,\n        ...(params.viewport ? { viewport: params.viewport } : {}),\n    });\n\n    task.steelBrowser?.on(\"disconnected\", async () => {\n        const browserContext = task.steelBrowserContext;\n        const browser = task.steelBrowser;\n        executionState = ExecutionState.BROWSER_CLOSED;\n        await page.close();\n\n        if (browserContext) {\n            await browserContext.close();\n        }\n        if (browser) {\n            await browser.close();\n        }\n    });\n\n    // 删除 TANGRAM__PSP_3__QrcodeAnimation 元素\n    await page.locator(\"#TANGRAM__PSP_3__QrcodeAnimation\").evaluate((el) => el.remove());\n\n    // 修改 TANGRAM__PSP_3__QrcodeMain 的 style\n    await page.locator(\"#TANGRAM__PSP_3__QrcodeMain\").evaluate((el) => {\n        // 先获取现有 style\n        const style = el.getAttribute(\"style\") || \"\";\n        // 用正则去掉 margin-left: 39px;\n        const newStyle = style.replace(/margin-left:\\s*39px;?/i, \"\");\n        el.setAttribute(\"style\", newStyle);\n    });\n\n    await page.locator(\".tang-pass-qrcode-title a.pass-link\").evaluate((el) => {\n        el.textContent = \"百家号APP\";\n    });\n\n    await updateTaskState?.({\n        state: TaskState.WAIT_SCAN,\n        connectAddress: await task.steelConnector?.getLive(task.sessionId || \"\"),\n        sessionId: task.sessionId,\n    });\n\n    let token: string | undefined;\n    let userInfo: UserInfo = { uniqueId: \"\", avatar: \"\", name: \"\" };\n\n    try {\n        await new Promise<void>((resolve, reject) => {\n            let finished = false;\n\n            const timer = setTimeout(async () => {\n                cleanup();\n                executionState = ExecutionState.TIMEOUT;\n                await updateTaskState?.({\n                    state: TaskState.TIMEOUT,\n                    error: \"等待扫码登录超时\",\n                });\n                resolve();\n            }, waitQrcodeResultMaxTime);\n\n            const cleanup = () => {\n                if (finished) return; // 防止多次调用\n                finished = true;\n                clearTimeout(timer);\n                page.off(\"response\", handleWebCommon);\n                page.off(\"response\", handleCheckQR);\n                task.steelBrowser?.off(\"disconnected\", handleBrowserClosed);\n            };\n\n            const handleBrowserClosed = () => {\n                cleanup();\n                executionState = ExecutionState.BROWSER_CLOSED;\n                resolve();\n            };\n\n            const handleWebCommon = async (resp: Response) => {\n                try {\n                    const url = resp.url();\n\n                    // 获取用户信息和 token\n                    if (url.includes(\"/user-ui/cms/getPassinfo\") || url.includes(\"/pcui/home/dealtoken\")) {\n                        try {\n                            const headers = await resp.request().allHeaders();\n                            let res: FetchResponse;\n\n                            for (let i = 0; i < 3; i++) {\n                                try {\n                                    res = await fetch(\"https://baijiahao.baidu.com/user-ui/cms/getPassinfo\", {\n                                        method: \"GET\",\n                                        headers: {\n                                            cookie: headers.cookie,\n                                        },\n                                    });\n                                    if (res.ok) {\n                                        token = res.headers.get(\"token\") || \"\";\n                                        const jsonUser = (await res.json()) as {\n                                            data: { avatar: string; uk: string; displayname: string };\n                                        };\n                                        userInfo = {\n                                            name: jsonUser.data.displayname ?? \"\",\n                                            avatar: jsonUser.data.avatar ?? \"\",\n                                            uniqueId: jsonUser.data.uk ?? \"\",\n                                        };\n                                        break;\n                                    }\n                                    await new Promise((res) => setTimeout(res, 500));\n                                } catch (error) {\n                                    if (i === 2) {\n                                        task.logger.warn(\"获取用户信息失败:\", { error });\n                                    }\n                                    await new Promise((res) => setTimeout(res, 500));\n                                }\n                            }\n                        } catch (e) {\n                            task.logger.warn(\"处理用户信息失败:\", { url, error: e });\n                        }\n                    }\n\n                    // 登录成功\n                    if (url.includes(\"/pcui/home/dealtoken\")) {\n                        cleanup();\n                        await updateTaskState?.({\n                            state: TaskState.CONFIRMED,\n                        });\n\n                        executionState = ExecutionState.SUCCESS;\n                        resolve();\n                    }\n                } catch (err) {\n                    cleanup();\n                    reject(err);\n                }\n            };\n\n            const handleCheckQR = async (response: Response) => {\n                try {\n                    const url = response.url();\n                    if (!url.includes(\"/channel/unicast\")) return;\n\n                    let jsonResponse: { errno: number; channel_v?: string };\n                    try {\n                        const jsonPStr = await response.text();\n                        if (!jsonPStr) {\n                            task.logger.warn(\"Empty response body:\", { url });\n                            return;\n                        }\n\n                        const jsonStr = jsonPStr.replace(/^[^(]+\\(([\\s\\S]*)\\)\\s*$/, \"$1\");\n                        jsonResponse = JSON.parse(jsonStr);\n                    } catch (e) {\n                        task.logger.warn(\"Failed to parse json:\", { url, error: e });\n                        return;\n                    }\n\n                    if (jsonResponse.errno === 0 && jsonResponse?.channel_v) {\n                        const channel_v: { status: number } = JSON.parse(jsonResponse.channel_v);\n                        if (channel_v.status === 1) {\n                            // 扫码成功\n                            await updateTaskState?.({\n                                state: TaskState.SCANNED,\n                            });\n                        }\n                        if (channel_v.status === 0) {\n                            page.off(\"response\", handleCheckQR);\n                            await page.goto(\"https://baijiahao.baidu.com/builder/rc/home\");\n                            page.on(\"response\", handleWebCommon);\n                        }\n                    }\n                } catch (err) {\n                    cleanup();\n                    reject(err);\n                }\n            };\n\n            // 在页面加载之前就注册监听，防止丢失请求\n            task.steelBrowser?.on(\"disconnected\", handleBrowserClosed);\n            page.on(\"response\", handleCheckQR);\n        });\n    } finally {\n        await page.close();\n    }\n\n    if (executionState === undefined) return { code: 500, message: \"未知错误\", data: {} };\n\n    switch (executionState) {\n        case ExecutionState.BROWSER_CLOSED: {\n            const msg = \"浏览器已关闭，任务中断!\";\n            await updateTaskState?.({\n                state: TaskState.FAILED,\n                error: \"浏览器已关闭\",\n            });\n            return { code: 414, message: msg, data: {} };\n        }\n\n        case ExecutionState.TIMEOUT: {\n            const msg = \"等待用户扫码登录超时!\";\n            await updateTaskState?.({\n                state: TaskState.TIMEOUT,\n                error: msg,\n            });\n            task.logger.info(msg);\n            return { code: 414, message: msg, data: {} };\n        }\n\n        case ExecutionState.SUCCESS: {\n            // 直接序列化原始 cookie 数组，切勿对 JSON 字符串做 replace(/\\\\\"/g, \"\")：\n            // 部分百度 cookie（如 RT）的 value 自身包含双引号/反斜杠，\n            // 删除转义符会破坏 JSON 结构，parse 后产生 name:\"\" value:\"undefined\" 的脏数据。\n            const cookie = JSON.stringify(await task.steelBrowserContext?.cookies());\n            await updateTaskState?.({\n                state: TaskState.SUCCESS,\n                result: {\n                    cookie,\n                    token,\n                    userInfo: userInfo,\n                },\n            });\n            return {\n                code: 0,\n                message: \"成功\",\n                data: {\n                    cookie,\n                    token,\n                    userInfo,\n                },\n            };\n        }\n        default:\n            // 处理 RUNNING 和其他可能的状态\n            return { code: 500, message: \"任务执行中断\", data: {} };\n    }\n};\n","import { CommonAction, success } from \"@iflyrpa/share\";\nimport { ActiomCommonParams } from \"../../types\";\nimport { executeAction } from \"../../utils\";\nimport { rpaAction } from \"./rpa\";\nimport { rpaServer } from \"./rpa-server\";\n\nexport type BaijiahaoLoginParams = ActiomCommonParams;\n\nexport type SteelAction = CommonAction<ActiomCommonParams, Record<string, unknown>>;\n\nexport const baijiahaoLogin: SteelAction = async (task, params) => {\n    // params.actionType = \"rpa\";\n\n    if (params.actionType === \"rpa\") {\n        return rpaAction(task, params);\n    }\n\n    if (params.actionType === \"mockApi\") {\n        return success({}, \"暂不支持mockApi\");\n    }\n\n    if (params.actionType === \"server\") {\n        return rpaServer(task, params);\n    }\n\n    return executeAction(rpaAction)(task, params);\n};\n","import axios from \"axios\";\n\n/**\n * 服务端日志记录参数接口\n */\nexport interface ServerLogParams {\n    token: string; // 鉴权 token\n    enverionment: \"development\" | \"production\";\n    [key: string]: unknown; // 其他参数\n}\n\n/**\n * 调用服务端接口记录日志\n * @param params 请求参数，必须包含 token 字段\n * @returns Promise<void> 不影响主流程，错误会被捕获\n */\nexport async function reportLogger(params: ServerLogParams): Promise<void> {\n    try {\n        if (!params.token) {\n            console.warn(\"[ServerLogger] token 参数缺失，跳过日志上报\");\n            return;\n        }\n\n        const baseUrl =\n            params.enverionment === \"production\" ? \"https://turbodesk.xfyun.cn\" : \"https://fetdev.iflysec.com\";\n        // 发送请求\n        await axios.post(\n            `${baseUrl}/api/engine/v2/log/collect`,\n            {\n                errorMsg: `${params.platform}发布成功，文章id:${params.postId} uid:${params.uid} accountId:${params.accountId}`,\n                traceInfo: JSON.stringify(params),\n            },\n            {\n                headers: {\n                    token: params.token,\n                    \"Content-Type\": \"application/json\",\n                },\n                timeout: 5000,\n            },\n        );\n    } catch (error) {\n        // 捕获所有错误，不影响主流程\n        console.warn(\"[ServerLogger] 日志上报失败:\", error instanceof Error ? error.message : error);\n    }\n}\n","import crypto from \"node:crypto\";\n\n/**\n * 生成百家号话题html\n * @param topic\n * @param id\n * @param sv_small_images\n */\nexport const generateTopicHtml = function (topic: string, id?: string, sv_small_images?: {\n    http: string,\n    https: string\n}) {\n    const generateUid = function () {\n        const e = () => Math.floor(65536 * (1 + Math.random())).toString(16).substring(1);\n        return e() + e() + e() + e() + e() + e() + e() + e();\n    };\n    const topicBase = function (topic: string, id?: string, sv_small_images?: { http: string, https: string }) {\n        const t = function (r: any) {\n            let n = [];\n            let e = 0;\n            for (; e < 256; ++e)\n                n[e] = (e + 256).toString(16).substr(1);\n            let o = 0;\n            return [\n                n[r[o++]], n[r[o++]], n[r[o++]], n[r[o++]], \"-\",\n                n[r[o++]], n[r[o++]], \"-\",\n                n[r[o++]], n[r[o++]], \"-\",\n                n[r[o++]], n[r[o++]], \"-\",\n                n[r[o++]], n[r[o++]], n[r[o++]], n[r[o++]], n[r[o++]], n[r[o++]]\n            ].join(\"\");\n        };\n        const s = crypto.randomBytes(16);\n        // @ts-ignore\n        (s[6] = 15 & s[6] | 64, s[8] = 63 & s[8] | 128);\n        return {\n            id: id || t(s),\n            sv_small_images: sv_small_images || \"\",\n            title: topic.replace(/[^\\u4E00-\\u9FA5a-zA-Z0-9]/g, \"\"),\n            isCreate: 1\n        };\n    };\n\n    const n = id ? topicBase(topic, id, sv_small_images) : topicBase(topic);\n    const topicAttr = {\n        style: \"border:none;display:inline-block;color:#3E5599;text-decoration:none;font-style:normal;\",\n        href: `https://m.baidu.com/s?word=%23${n.title}%23&topic_id=${n.id}&sa=edit&sfrom=1023524a&append=1&newwindow=0&upqrade=1`.replace(/&/g, \"&amp;\"),\n        target: \"_blank\",\n        // @ts-ignore\n        \"data-bjh-cover\": \"\".concat(n.sv_small_images && (n.sv_small_images.https || n.sv_small_images.http)),\n        \"data-bjh-src\": `https://m.baidu.com/s?word=%23${n.title}%23&topic_id=${n.id}&sa=edit&sfrom=1023524a&append=1&newwindow=0&upqrade=1`.replace(/&/g, \"&amp;\"),\n        \"data-bjh-box\": \"topic\",\n        \"data-bjh-title\": n.title,\n        \"data-bjh-id\": id || n.id,\n        \"data-bjh-type\": \"topic\",\n        contenteditable: \"false\",\n        \"data-ignore-remove-style\": \"1\",\n        \"data-bjh-create\": id ? \"0\" : \"1\",\n        \"data-bjh-adinspiration\": \"0\",\n        \"data-diagnose-id\": generateUid()\n    };\n\n    const attrStr = Object.entries(topicAttr)\n        .map(([key, val]) => `${key}=\"${val}\"`)\n        .join(\" \");\n\n    return `<p><span data-diagnose-id=${generateUid()}></span><a ${attrStr}>#${n.title}#</a></p>`;\n};","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { downloadImage, getFilenameFromUrl, success, TaskState } from \"@iflyrpa/share\";\nimport FormData from \"form-data\";\nimport { AxiosProxyParams, errorResponse, MockPublish } from \"../../types\";\nimport { extractImgTag, replaceImgSrc } from \"../../utils\";\nimport { Http } from \"../../utils/http\";\nimport { reportLogger } from \"../../utils/reportLogger\";\nimport type { PublishAction } from \".\";\nimport { generateTopicHtml } from \"./utils\";\n\ninterface CommonResponse<T = unknown> {\n    data: T;\n    errmsg: string;\n    errno: number;\n}\n\ninterface ImageRetResponse {\n    bos_url: string;\n    https_url: string;\n    no_waterlog_bos_url: string;\n    org_url: string;\n}\n\nconst errnoMap: Record<number, string> = {\n    20040706: \"正文图片和封面图片推荐jpg、png格式。\",\n    20040084: \"正文图片和封面图片推荐jpg、png格式。\",\n    20050004: \"今日百家号发布次数已达上限，请明天再试。\",\n    10000015: \"账号存在异常，需前往百家号平台完成发文验证后可激活使用。\",\n    20050000: \"操作太频繁，请稍后再试\",\n    20040027: \"你的账号状态异常，请到百家号平台检查账号状态。\",\n    10000017: \"账号存在异常，需前往百家号平台完成发文验证后可激活使用。\",\n    20040033: \"封面图片推荐 jpg、png格式，宽高在372×284-5000×5000 范围内。\",\n    2004005714: \"网络环境异常，请检查网络后重试发布。\",\n    401100032: \"异常，请检查图片（如：格式、版权、合规性等）。\",\n    20040034: \"封面图片推荐jpg、png格式，不支持gif格式。\",\n    20040124: \"服务器异常，请稍后重试！\",\n    20040001: \"当前用户未登录，请登陆后重试！\",\n    401100025: \"该应用不支持此媒资类型\",\n    401100033: \"图片宽高不满足要求\",\n    20040105: \"标题中不可使用表情！\",\n    20040051: \"定时时间范围不符合要求!\",\n    \"-6\": \"文章分类信息错误\",\n};\n\nexport const mockAction: PublishAction = async (task, params) => {\n    const { baijiahaoSingleCover, baijiahaoMultCover, baijiahaoCoverType } = params.settingInfo;\n    const tmpCachePath = task.getTmpPath();\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        token: params.token,\n    };\n\n    const args: AxiosProxyParams = [\n        { headers },\n        task.logger,\n        params.proxyLoc,\n        params.accountId,\n        \"baijiahao\", // 业务标识\n    ];\n    const http = new Http({ headers });\n    const proxyHttp = new Http(...args);\n\n    // 添加响应拦截器\n    proxyHttp.addResponseInterceptor<CommonResponse>((response) => {\n        const msgType = params.saveType === \"draft\" ? \"同步\" : \"发布\";\n\n        // 检查响应中的 errno 字段\n        if (response && response.data.errno !== 0) {\n            let errmsg = response.config.defaultErrorMsg || `文章${msgType}异常，请稍后重试。`;\n\n            if (response.data.errno === 20050000) {\n                errmsg = msgType + errnoMap[response.data.errno];\n            }\n            if (response.data.errno === 401100032) {\n                errmsg = `图片${msgType}${errnoMap[response.data.errno]}`;\n            } else if (errnoMap[response.data.errno]) {\n                errmsg = errnoMap[response.data.errno];\n            } else if (response.data.errmsg) {\n                errmsg = response.data.errmsg;\n            }\n\n            return {\n                code: errnoMap[response.data.errno] ? 414 : 500,\n                message: errmsg,\n                data: response.data,\n            };\n        }\n    });\n\n    // 0. 校验登录\n    await http.api({\n        method: \"get\",\n        url: \"https://baijiahao.baidu.com/pcui/home/index\",\n        defaultErrorMsg: `百家号登录状态失效，请重新绑定账号后${params.saveType === \"draft\" ? \"同步\" : \"发布\"}。`,\n    });\n\n    // 1. 获取用户 appId\n    const appIdInfo = await http.api<CommonResponse<{ user?: { app_id: number } }>>({\n        method: \"post\",\n        url: \"https://baijiahao.baidu.com/builder/app/appinfo\",\n        defaultErrorMsg: \"创建草稿失败，请稍后重试。\",\n    });\n\n    const appId = appIdInfo.data?.user?.app_id;\n\n    if (!appId) return { code: 414, message: \"创建草稿失败，请稍后重试。\", data: \"\" };\n\n    const uploadImages = async (_images: string[]) => {\n        // 过滤掉空字符串\n        const images = _images.filter((url) => !!url && url.trim() !== \"\");\n\n        // 下载图片到本地\n        return await Promise.all(\n            images.map(async (url) => {\n                const fileName = getFilenameFromUrl(url);\n                const ext = path.extname(fileName).toLowerCase();\n\n                // 检查图片格式（百家号仅支持 jpg、png）\n                if (![\".jpg\", \".jpeg\", \".png\"].includes(ext)) {\n                    throw {\n                        code: 414,\n                        message: \"图片格式不支持，百家号仅支持 jpg、png 格式，请转换后重试。\",\n                        data: \"\",\n                    };\n                }\n\n                const image = await downloadImage(url, path.join(tmpCachePath, fileName));\n\n                // 检查文件大小（百家号限制 5MB）\n                const stats = fs.statSync(image);\n                const maxSize = 5 * 1024 * 1024; // 5MB\n                if (stats.size > maxSize) {\n                    throw {\n                        code: 414,\n                        message: \"百家号平台：单张图片不得超过 5MB\",\n                        data: \"\",\n                    };\n                }\n\n                const formData = new FormData();\n                formData.append(\"org_file_name\", fileName);\n                formData.append(\"type\", \"image\");\n                formData.append(\"app_id\", appId);\n                formData.append(\"is_waterlog\", \"1\");\n                formData.append(\"save_material\", \"1\");\n                formData.append(\"no_compress\", \"0\");\n                formData.append(\"article_type\", \"news\");\n                formData.append(\"media\", fs.createReadStream(image));\n\n                try {\n                    const res = await http.api<{ ret: ImageRetResponse }>(\n                        {\n                            method: \"post\",\n                            url: \"https://baijiahao.baidu.com/materialui/picture/uploadProxy\",\n                            data: formData,\n                            defaultErrorMsg:\n                                params.saveType === \"draft\"\n                                    ? \"图片上传异常，请稍后重试同步。\"\n                                    : \"图片上传异常，请稍后重试发布。\",\n                        },\n                        { retries: 3, retryDelay: 20, timeout: 2 * 60 * 1000 }, // 增加到2分钟，适应大图片上传\n                    );\n\n                    return res.ret;\n                } catch (error) {\n                    console.error(\"图片上传失败，详细错误信息：\");\n                    console.error(\"错误对象：\", error);\n                    console.error(\"错误堆栈：\", error instanceof Error ? error.stack : \"无堆栈信息\");\n                    console.error(\"图片URL：\", url);\n                    console.error(\"文件名：\", fileName);\n                    throw error;\n                }\n            }),\n        );\n    };\n\n    // 2. 提取并上传正文中的图片\n    const originContentImages = extractImgTag(params.content);\n    const targetContentImages = await uploadImages(originContentImages);\n\n    if (params.settingInfo.baijiahaoTopic && !params.settingInfo.baijiahaoTopic?.id) {\n        const topicCheck = await http.api<{ errno: number; errmsg: string }>({\n            method: \"get\",\n            url: \"https://baijiahao.baidu.com/pcui/topic/topiccheck\",\n            params: {\n                topicName: params.settingInfo.baijiahaoTopic?.title,\n            },\n        });\n        if (topicCheck.errno !== 0) {\n            return { code: 414, message: topicCheck.errmsg, data: \"\" };\n        }\n    }\n\n    // 替换正文中的图片\n    const content = replaceImgSrc(\n        params.settingInfo?.baijiahaoTopic?.title\n            ? params.content +\n                  generateTopicHtml(\n                      params.settingInfo?.baijiahaoTopic?.title,\n                      params.settingInfo?.baijiahaoTopic?.id || \"\",\n                      params.settingInfo.baijiahaoTopic?.sv_small_images || \"\",\n                  )\n            : params.content,\n        (dom) => {\n            if (dom.attribs.src) {\n                const idx = originContentImages.indexOf(dom.attribs.src.replace(/&amp;/g, \"&\"));\n                dom.attribs.src = targetContentImages[idx].bos_url;\n                dom.attribs[\"data-bjh-origin-src\"] = targetContentImages[idx].org_url;\n                dom.attribs[\"data-bjh-params\"] = targetContentImages[idx].org_url;\n                dom.attribs[\"data-bjh-type\"] = \"IMG\";\n            }\n\n            return dom;\n        },\n    );\n\n    // 3. 上传竖版封面\n    // let vertical_cover = params.settingInfo.baijiahaoVerticalCover;\n    // if (vertical_cover) {\n    // \tvertical_cover = (await uploadImages([vertical_cover]))[0].bos_url;\n    // }\n\n    // 4. 上传横版封面\n    const horizontalCoverUrl = baijiahaoCoverType === \"single\" ? [baijiahaoSingleCover] : baijiahaoMultCover;\n    const horizontalCoverRes = await uploadImages(horizontalCoverUrl);\n    const cover_images = horizontalCoverRes.map((item) => ({\n        src: item.bos_url,\n        machine_chooseimg: 0,\n        isLegal: 0,\n    }));\n    const _cover_images_map = horizontalCoverRes.map((item) => ({\n        src: item?.bos_url,\n        origin_src: item?.org_url,\n    }));\n\n    // 5. 构造发布数据\n    const isAi = params.settingInfo.baijiahaoIsAi.includes(\"isAi\");\n    const activityList = params.settingInfo.baijiahaoSelectActivityCache;\n    const cover_layout = baijiahaoCoverType === \"single\" ? \"one\" : \"three\";\n\n    const activity_list = [\n        ...(activityList.length > 0 ? [{ id: `task_${activityList[0]}`, is_checked: 1 }] : []),\n        ...(params.settingInfo.baijiahaoPublishConf?.map((item) => ({\n            id: item.confName,\n            is_checked: item.isChecked ? 1 : 0,\n        })) || []),\n    ];\n\n    if (isAi && !activity_list.some((item) => \"aigc_bjh_status\" in item)) {\n        activity_list.push({ id: \"aigc_bjh_status\", is_checked: 1 });\n    } // 兼容旧版配置\n\n    const publishData: Record<string, unknown> = {\n        title: params.settingInfo.baijiahaoTitle,\n        content,\n        // vertical_cover,\n        abstract: params.settingInfo.baijiahaoAbstract,\n        cover_layout,\n        cover_images: JSON.stringify(cover_images),\n        _cover_images_map: JSON.stringify(_cover_images_map),\n        type: \"news\",\n        source_reprinted_allow: 0,\n        abstract_from: 1,\n        isBeautify: \"false\",\n        usingImgFilter: \"false\",\n        source: \"upload\",\n        cover_source: \"upload\",\n        event2news: params.settingInfo?.baijiahaoEvent2News ? 2 : 0,\n        activity_list,\n        ...(params.settingInfo.timer ? { timer_time: params.settingInfo.timer } : {}),\n        ...(params.settingInfo.baijiahaoCms\n            ? {\n                  \"cate_user_cms[0]\": params.settingInfo.baijiahaoCms[0],\n                  \"cate_user_cms[1]\": params.settingInfo.baijiahaoCms[1],\n              }\n            : {}),\n        ...(params.settingInfo.baijiahaoEventSpec\n            ? {\n                  \"event_spec[time]\": params.settingInfo.baijiahaoEventSpec.time,\n                  \"event_spec[pos]\": params.settingInfo.baijiahaoEventSpec.pos,\n              }\n            : {}),\n    };\n\n    const isDraft = params.saveType === \"draft\";\n\n    const saveUrl = isDraft\n        ? \"https://baijiahao.baidu.com/pcui/article/save?callback=bjhdraft\"\n        : \"https://baijiahao.baidu.com/pcui/article/publish?callback=bjhpublish\";\n\n    task._timerRecord.PrePublish = Date.now();\n\n    const updateTaskState = task.taskStageStore?.update?.bind(task.taskStageStore, task.taskId || \"\");\n    if (MockPublish) {\n        const message = `文章模拟发布成功 ${http.proxyInfo}`;\n        const data = \"123456789\";\n\n        await updateTaskState?.({\n            state: TaskState.SUCCESS,\n            result: {\n                response: data,\n            },\n        });\n        return success(data, message);\n    }\n\n    const res = await proxyHttp.api<{\n        errno: number;\n        ret: { article_id: string };\n        proxyInfo: Record<string, unknown>;\n        errmsg: string;\n    }>(\n        {\n            method: \"post\",\n            url: saveUrl,\n            data: publishData,\n            headers: {\n                \"content-type\": \"application/x-www-form-urlencoded\",\n                origin: \"https://baijiahao.baidu.com\",\n                referer: \"https://baijiahao.baidu.com/builder/rc/edit?type=news\",\n            },\n            defaultErrorMsg: isDraft ? \"文章同步出现异常，请稍后重试。\" : \"文章发布出现异常，请稍后重试。\",\n        },\n        { retries: 3, retryDelay: 500, timeout: 20 * 1000 },\n    );\n\n    if (!isDraft) {\n        reportLogger({\n            token: params.huiwenToken || \"\",\n            enverionment: task.enverionment || \"development\",\n            postId: params.articleId,\n            eip: proxyHttp.proxyInfo,\n            accountId: params.accountId,\n            uid: params.uid,\n            platform: \"baijiahao\",\n            publishParams: publishData,\n        });\n    }\n\n    task.logger.info(`[baijiahaoPublish] publishResult: ${JSON.stringify(res)} `);\n\n    const isSuccess = res.errno === 0;\n    const data = res?.ret?.article_id;\n    const message = isSuccess\n        ? isDraft\n            ? \"文章同步成功！\"\n            : `文章发布成功！${res.proxyInfo || \"\"}`\n        : res.errmsg || (isDraft ? \"文章同步失败，请稍后重试。\" : \"文章发布失败，请稍后重试。\");\n\n    if (!isSuccess) {\n        await updateTaskState?.({\n            state: TaskState.FAILED,\n            error: message,\n        });\n        return { code: 414, data, message };\n    }\n\n    await updateTaskState?.({\n        state: TaskState.SUCCESS,\n        result: {\n            response: data,\n        },\n    });\n    // 临时返回结束\n\n    return success(\n        res.errno === 0 ? res?.ret?.article_id || \"\" : \"\",\n        res.errno === 0 ? `文章发布成功！${http.proxyInfo || \"\"}` : (res.errmsg ?? \"文章发布失败，请稍后重试。\"),\n    );\n};\n","import path from \"node:path\";\nimport type { Response } from \"@iflyrpa/share\";\nimport { downloadImage, getFilenameFromUrl, success } from \"@iflyrpa/share\";\n\nimport { copyHtmlToClipboard, TimeFormatter } from \"../../utils\";\nimport type { PublishAction } from \"./index\";\n\nexport const rpaAction: PublishAction = async (task, params) => {\n    const tmpCachePath = task.getTmpPath();\n\n    // 过滤无效 cookie：\n    // 历史上 baijiahaoLogin 的序列化 bug 会产出 name:\"\" value:\"undefined\" 的脏数据，\n    // 这些 cookie 注入时会被 Electron reject，且可能顶替掉真正的鉴权 cookie（如 XFCS）。\n    // 注入失败是静默的，因此在这里先剔除，避免登录态不完整导致误判“登录失效”。\n    const validCookies = (params.cookies || []).filter((it) => it.name && it.value && it.value !== \"undefined\");\n\n    const page = await task.createPage({\n        show: task.debug,\n        url: params.url || \"https://baijiahao.baidu.com/builder/rc/edit?type=news&is_from_cms=1\",\n        cookies: validCookies,\n    });\n\n    // 增加页面默认超时时间，避免网络慢时加载超时\n    page.setDefaultTimeout(60000); // 60秒\n    page.setDefaultNavigationTimeout(60000); // 60秒\n\n    // 0. 校验登录\n    try {\n        await page.waitForSelector(\".bjh-edit-header\", { state: \"visible\" });\n    } catch (_error) {\n        return { code: 414, message: \"登录失效\", data: page.url() };\n    }\n\n    // 1. 等待编辑器加载出来（线上网络慢时可能超时，先等 networkidle 再等编辑器）\n    await page.waitForLoadState(\"domcontentloaded\").catch(() => {});\n    try {\n        await page.waitForSelector(\".edui-editor-toolbarbox\", { state: \"visible\", timeout: 90000 });\n    } catch (_err) {\n        // 编辑器未加载出来，尝试刷新一次\n        await page.reload({ waitUntil: \"domcontentloaded\", timeout: 60000 });\n        // 刷新后重新校验登录\n        const isLoggedIn = await page\n            .locator(\".bjh-edit-header\")\n            .isVisible({ timeout: 15000 })\n            .catch(() => false);\n        if (!isLoggedIn) {\n            return { code: 414, message: \"登录失效\", data: page.url() };\n        }\n        await page.waitForSelector(\".edui-editor-toolbarbox\", { state: \"visible\", timeout: 90000 });\n    }\n\n    // 2. 关闭纯文本粘贴，默认开启纯文本粘贴的提示，先关闭\n    if (await page.locator(\"#_onceTip-news_pasteplain_tip\").isVisible()) {\n        await page.locator(\"#_onceTip-news_pasteplain_tip .confirm\").click();\n    }\n\n    // 2. 新增风险检测提示，先关闭\n    if (await page.locator(\".cheetah-tour .cheetah-tour-inner\").filter({ hasText: \"新增风险检测\" }).isVisible()) {\n        await page\n            .locator(\".cheetah-tour .cheetah-tour-inner\")\n            .filter({ hasText: \"新增风险检测\" })\n            .locator(\".cheetah-btn\")\n            .filter({ hasText: \"我知道了\" })\n            .click();\n    }\n    // 2. 关闭纯文本粘贴\n    // 有个默认开启纯文本粘贴的提示，先关闭\n    if (await page.locator(\".cheetah-tour .cheetah-tour-inner .cheetah-tour-close\").isVisible()) {\n        await page.locator(\".cheetah-tour .cheetah-tour-inner .cheetah-tour-close\").click();\n    }\n\n    // 判断是否开启纯文本粘贴，如果开启，点击关闭\n    if (\n        await page.locator(\".edui-editor-toolbarbox .edui-button.edui-for-pasteplain .edui-state-checked\").isVisible()\n    ) {\n        await page.locator(\".edui-editor-toolbarbox .edui-button.edui-for-pasteplain .edui-state-checked\").click();\n    }\n\n    // 3. 填写标题\n    // 百家号使用 Lexical 编辑器，使用键盘逐字输入更可靠\n    const titleEditor = page.locator(\".input-box[data-testid='news-title-input'] div[contenteditable='true']\");\n\n    // 点击编辑器激活\n    await titleEditor.click();\n\n    // 等待编辑器获得焦点\n    await page.waitForTimeout(200);\n\n    // 先清空可能存在的内容\n    await page.keyboard.press(\"Control+A\");\n    await page.keyboard.press(\"Delete\");\n\n    // 逐字输入标题（添加小延迟模拟真实输入）\n    await page.keyboard.type(params.title, { delay: 50 });\n\n    // 等待一下确保内容已设置\n    await page.waitForTimeout(300);\n\n    // 4. 填写正文\n    await copyHtmlToClipboard(page, params.content);\n    // 定位目标元素并聚焦\n    await page.click(\"#ueditor .edui-editor-iframeholder iframe\");\n    // 模拟Ctrl+A全选\n    await page.keyboard.press(\"Control+A\");\n    // 模拟Ctrl+V粘贴\n    await page.keyboard.press(\"Control+V\");\n\n    // 等待 1 秒钟（让正文中的图片上传上去）\n    await page.waitForTimeout(1000);\n\n    // 5. 设置封面\n    const coverFormItem = page.locator(\".bjh-edit-wrap-set .cheetah-form-item\").nth(0);\n    const isSingleCover = params.settingInfo.baijiahaoCoverType === \"single\";\n    if (isSingleCover) {\n        // 单图\n        await coverFormItem\n            .locator(\".cheetah-form-item-control label.cheetah-radio-wrapper\")\n            .filter({ hasText: \"单图\" })\n            .click();\n    } else {\n        // 多图\n        await coverFormItem\n            .locator(\".cheetah-form-item-control label.cheetah-radio-wrapper\")\n            .filter({ hasText: \"三图\" })\n            .click();\n    }\n\n    // 获取待上传图片的本地路径\n    const images = await Promise.all(\n        (isSingleCover ? [params.settingInfo.baijiahaoSingleCover] : params.settingInfo.baijiahaoMultCover).map(\n            (url) => {\n                const fileName = getFilenameFromUrl(url);\n                return downloadImage(url, path.join(tmpCachePath, fileName));\n            },\n        ),\n    );\n\n    // 点击第一个封面槽打开弹窗（单图/多图都只需打开一次弹窗）\n    const firstSlot = page.locator(\".cheetah-spin-container\").first();\n    await firstSlot.evaluate((node) => node.scrollIntoView());\n    if (await firstSlot.locator(\".actions-wrap\").isVisible()) {\n        await firstSlot.locator(\".actions-wrap .action\").filter({ hasText: \"更换\" }).click();\n    } else {\n        await firstSlot.click();\n    }\n\n    // 等待弹窗出现\n    await page.waitForSelector(\".cheetah-modal-root .cheetah-modal\", { state: \"visible\" });\n\n    // 切换到「正文/本地上传」\n    const modal = page.locator(\".cheetah-modal-root .cheetah-modal\");\n    const localTab = modal.locator(\".cheetah-tabs-tab[data-node-key='local_main']\");\n    if (await localTab.isVisible()) {\n        await localTab.click();\n        await page.waitForTimeout(300);\n    }\n\n    // 上传按钮：含\"本地上传\"文字区域内\n    const uploadBtn = modal\n        .locator(\"div[class*='-upload']\")\n        .filter({ has: page.locator(\"div[class*='-text']\", { hasText: \"本地上传\" }) })\n        .locator(\"span.cheetah-upload\");\n\n    for (let i = 0; i < images.length; i++) {\n        const image = images[i];\n        // 记录上传前列表数量，用于等待新图片出现\n        const beforeCount = await modal.locator(\"div[class*='-imgItem']\").count();\n\n        // waitForEvent 必须在 click 之前声明，两者并发执行\n        const fileChooserPromise = page.waitForEvent(\"filechooser\", { timeout: 15000 });\n        await uploadBtn.click();\n        const fileChooser = await fileChooserPromise;\n        await fileChooser.setFiles([image]);\n\n        // 等待新图片上传完成（列表数量增加）\n        await page\n            .waitForFunction(\n                (before: number) => document.querySelectorAll(\"[class*='-imgItem']\").length > before,\n                beforeCount,\n                { timeout: 15000 },\n            )\n            .catch(() => page.waitForTimeout(2000)); // 降级等待\n\n        await page.waitForTimeout(300);\n\n        // 刚上传的本地图片\n        const allBlobItems = modal.locator(\"div[class*='-imgItem']\").filter({ has: page.locator(\"img[src^='blob:']\") });\n\n        const count = await allBlobItems.count();\n        let clicked = false;\n        for (let idx = 0; idx < count; idx++) {\n            const item = allBlobItems.nth(idx);\n            const isSelected = await item\n                .locator(\"div[class*='-checkbox']\")\n                .evaluate((el) => el.className.includes(\"selected\"))\n                .catch(() => false);\n            if (!isSelected) {\n                await item.locator(\"div[class*='-hotArea']\").click();\n                await page.waitForTimeout(300);\n                clicked = true;\n                break;\n            }\n        }\n        if (!clicked) {\n            // 降级：直接点最后一个 blob item（兜底，不应走到这里）\n            await allBlobItems.last().locator(\"div[class*='-hotArea']\").click();\n            await page.waitForTimeout(300);\n        }\n    }\n\n    // 点击确认按钮\n    await modal.locator(\"button[class*='confirmBtn']\").click();\n    // 等待弹窗关闭\n    await page.waitForSelector(\".cheetah-modal-root .cheetah-modal\", { state: \"hidden\", timeout: 10000 });\n    await page.waitForTimeout(500);\n\n    // 6. 摘要\n    const abstractTextarea = page.locator(\".bjh-edit-wrap-set textarea.cheetah-input\").first();\n    if (await abstractTextarea.isVisible({ timeout: 3000 }).catch(() => false)) {\n        await abstractTextarea.click();\n        await abstractTextarea.fill(params.settingInfo.baijiahaoAbstract);\n    }\n\n    // 7. 设置（页面升级后的新结构）\n\n    // 关闭「公共政策和时事」浮层提示（如有）\n    const policyTip = page.locator(\n        '.cheetah-public .cheetah-popover-content .cheetah-popconfirm-message-icon span[class*=\"-icon\"]',\n    );\n    if (await policyTip.isVisible({ timeout: 3000 }).catch(() => false)) {\n        await policyTip.click();\n        await page.waitForTimeout(200);\n    }\n\n    // ── 7a. 智能创作区域\n\n    // 处理 baijiahaoPublishConf 配置项 自动生成播客\n    if (params.settingInfo.baijiahaoPublishConf && params.settingInfo.baijiahaoPublishConf.length > 0) {\n        const aiSettingSection = page.locator(\"div[class*='aiSetting']\");\n        for (const item of params.settingInfo.baijiahaoPublishConf) {\n            const confCheckbox = aiSettingSection\n                .locator(\"label.cheetah-checkbox-wrapper\")\n                .filter({ has: page.locator(`span.${item.confName}`) });\n\n            if (await confCheckbox.isVisible()) {\n                const isChecked = await confCheckbox.locator(\"input.cheetah-checkbox-input\").isChecked();\n                if (isChecked !== item.isChecked) {\n                    await confCheckbox.click();\n                    await page.waitForTimeout(200);\n                }\n            }\n        }\n    }\n\n    // 处理\"图文转动态\"复选框\n    const event2NewsCheckbox = page.locator(\"label.cheetah-checkbox-wrapper\").filter({ hasText: \"图文转动态\" });\n    if (await event2NewsCheckbox.isVisible()) {\n        const isChecked = await event2NewsCheckbox.locator(\"input#event2news\").isChecked();\n        const shouldCheck = !!params.settingInfo.baijiahaoEvent2News;\n        if (isChecked !== shouldCheck) {\n            await event2NewsCheckbox.click();\n            await page.waitForTimeout(200);\n        }\n    }\n\n    // 7b. 创作声明区域\n    const statementSection = page.locator(\"div[class*='statementSetting']\");\n\n    // 处理\"采用AI生成内容\"复选框\n    const isAi = params.settingInfo.baijiahaoIsAi?.includes(\"isAi\");\n    const aigcCheckbox = statementSection\n        .locator(\"label.cheetah-checkbox-wrapper\")\n        .filter({ has: page.locator(\"span.aigc_bjh_status\") });\n    if (await aigcCheckbox.isVisible()) {\n        const isChecked = await aigcCheckbox.locator(\"input.cheetah-checkbox-input\").isChecked();\n        if (isChecked !== !!isAi) {\n            await aigcCheckbox.click();\n            await page.waitForTimeout(200);\n        }\n    }\n\n    // 处理\"来源说明\"复选框，勾选后展开时间/地点选择器\n    const hasEventSpec = !!(params.settingInfo.baijiahaoEventSpec?.time || params.settingInfo.baijiahaoEventSpec?.pos);\n    const sourceCheckLabel = statementSection.locator(\"div[class*='sourceCheck'] label.cheetah-checkbox-wrapper\");\n    if (await sourceCheckLabel.isVisible()) {\n        const isSourceChecked = await sourceCheckLabel.locator(\"input.cheetah-checkbox-input\").isChecked();\n        if (!isSourceChecked && hasEventSpec) {\n            // 需要填写来源 → 勾选，展开时间/地点区域\n            await sourceCheckLabel.click();\n            await page.waitForTimeout(400);\n        } else if (isSourceChecked && !hasEventSpec) {\n            // 不需要来源 → 取消勾选\n            await sourceCheckLabel.click();\n            await page.waitForTimeout(300);\n        }\n    }\n\n    // 填写事件时间（DatePicker：input[placeholder='请选择时间']，在 .a61da01300f09f44-sourceDatePicker 内）\n    // 填写事件地点（Cascader：div[class*='cascader']，placeholder='请选择地点'，需点开下拉后按文字选择）\n    if (hasEventSpec) {\n        // 等待来源说明展开区域出现\n        const sourceWrap = page.locator(\"div[class*='sourceWrap']\");\n        await sourceWrap.waitFor({ state: \"visible\", timeout: 5000 });\n\n        // 事件时间：cheetah DatePicker\n        // baijiahaoEventSpec.time 格式为 \"YYYY-MM-DD\"，对应日历 td[title='YYYY-MM-DD']\n        if (params.settingInfo.baijiahaoEventSpec?.time) {\n            const targetDate = params.settingInfo.baijiahaoEventSpec.time; // e.g. \"2026-04-07\"\n            const datePickerInput = sourceWrap.locator(\n                \"div[class*='sourceDatePicker'] input[placeholder='请选择时间']\",\n            );\n            if (await datePickerInput.isVisible()) {\n                // 点击 input 打开日历面板\n                await datePickerInput.click();\n                await page.waitForTimeout(300);\n\n                // 等待日历面板出现\n                const pickerPanel = page.locator(\".cheetah-picker-dropdown:not(.cheetah-picker-dropdown-hidden)\");\n                await pickerPanel.waitFor({ state: \"visible\", timeout: 5000 });\n\n                // 解析目标年月，判断是否需要翻页\n                const [targetYear, targetMonth] = targetDate.split(\"-\").map(Number);\n\n                // 最多翻 24 个月\n                for (let attempt = 0; attempt < 24; attempt++) {\n                    // 读取当前面板显示的年月\n                    const yearText = await pickerPanel.locator(\".cheetah-picker-year-btn\").textContent();\n                    const monthText = await pickerPanel.locator(\".cheetah-picker-month-btn\").textContent();\n                    const currentYear = Number(yearText?.replace(\"年\", \"\"));\n                    const currentMonth = Number(monthText?.replace(\"月\", \"\"));\n\n                    if (currentYear === targetYear && currentMonth === targetMonth) break;\n\n                    // 判断目标在当前之前还是之后\n                    const isAfter =\n                        targetYear > currentYear || (targetYear === currentYear && targetMonth > currentMonth);\n                    if (isAfter) {\n                        await pickerPanel.locator(\".cheetah-picker-header-next-btn\").click();\n                    } else {\n                        await pickerPanel.locator(\".cheetah-picker-header-prev-btn\").click();\n                    }\n                    await page.waitForTimeout(200);\n                }\n\n                // 点击目标日期（td[title='YYYY-MM-DD'] 精确匹配）\n                await pickerPanel.locator(`td[title='${targetDate}'] .cheetah-picker-cell-inner`).click();\n                await page.waitForTimeout(300);\n            }\n        }\n\n        // 事件地点：Cascader 级联选择器，点击后从下拉菜单中选择匹配项\n        if (params.settingInfo.baijiahaoEventSpec?.pos) {\n            const cascader = sourceWrap.locator(\"div[class*='cascader']\");\n            if (await cascader.isVisible()) {\n                // 点击打开级联下拉\n                await cascader.click();\n                await page.waitForTimeout(400);\n\n                // pos 格式示例：\"北京市,海淀区\" 或 \"北京市\"，逐级选择\n                const levels = params.settingInfo.baijiahaoEventSpec.pos.split(\",\");\n                for (const level of levels) {\n                    const option = page\n                        .locator(\".cheetah-cascader-menus .cheetah-cascader-menu-item\")\n                        .filter({ hasText: level });\n                    if ((await option.count()) > 0) {\n                        await option.first().click();\n                        await page.waitForTimeout(300);\n                    }\n                }\n\n                // 按 Escape 关闭下拉（若未自动关闭）\n                const cascaderDropdown = page.locator(\".cheetah-cascader-menus\");\n                if (await cascaderDropdown.isVisible()) {\n                    await page.keyboard.press(\"Escape\");\n                    await page.waitForTimeout(200);\n                }\n            }\n        }\n    }\n\n    // 8. 活动投稿（label[for='task'] 定位 form-item，div[class*='taskName'] 定位卡片文字）\n    if (params.settingInfo.baijiahaoActivity.length > 0 && params.settingInfo.baijiahaoSelectActivityCache.length > 0) {\n        const activity = params.settingInfo.baijiahaoActivity.filter((it) =>\n            params.settingInfo.baijiahaoSelectActivityCache.includes(it.id),\n        );\n        if (activity.length > 0) {\n            const activityFormItem = page\n                .locator(\".bjh-edit-wrap-set\")\n                .locator(\".cheetah-form-item\")\n                .filter({ has: page.locator(\"label[for='task']\") });\n            const name = activity[0].task_name;\n            // 用 taskName 子元素匹配卡片文字，再点击所在的 taskCard\n            const findCard = activityFormItem\n                .locator(\"div[class*='taskCard']\")\n                .filter({ has: page.locator(\"div[class*='taskName']\", { hasText: name }) });\n            if ((await findCard.count()) > 0) {\n                await findCard.first().click();\n                await page.waitForTimeout(200);\n            }\n        }\n    }\n\n    // 9. 保存草稿 / 发布\n    // biome-ignore-start lint/suspicious/noAsyncPromiseExecutor: 临时保留async\n    const { articleId, message } = await new Promise<{ articleId: string; message: string }>(async (resolve) => {\n        // 定义响应处理函数\n        const handleResponse = async (response: Response) => {\n            const url = response.url();\n            if (url.includes(\"/pcui/article/save\") || url.includes(\"/pcui/article/publish\")) {\n                const jsonResponse = await response.json();\n                page.off(\"response\", handleResponse);\n                resolve({ articleId: jsonResponse?.ret?.article_id, message: jsonResponse?.errmsg });\n            }\n        };\n\n        // 开始监听响应事件\n        page.on(\"response\", handleResponse);\n        task._timerRecord.PrePublish = Date.now();\n\n        const operatorContainer = page.locator(\".editor-component-operator\");\n        if (params.saveType === \"draft\") {\n            await operatorContainer\n                .locator(\".op-btn-outter-content\")\n                .filter({ hasText: \"存草稿\" })\n                .locator(\"button\")\n                .click();\n        } else {\n            if (params.settingInfo.timer) {\n                // 点击“定时发布”按钮\n                await operatorContainer\n                    .locator(\".op-btn-outter-content\")\n                    .filter({ hasText: \"定时发布\" })\n                    .locator(\"button\")\n                    .click();\n\n                // 选择日期\n                await page.locator(\".timepublish-wrap-select .select-wrap\", { hasText: \"日\" }).click();\n                await page\n                    .locator(\"#select-date_list + * .cheetah-select-item-option\", {\n                        hasText: TimeFormatter.format(params.settingInfo.timer, \"M月dd日\"),\n                    })\n                    .click();\n                await page.waitForTimeout(200);\n\n                // 选择小时\n                await page.locator(\".timepublish-wrap-select .select-wrap\", { hasText: \"点\" }).click();\n                await page.locator(\"#select-hour_list +div.rc-virtual-list\").hover();\n\n                const scrollHourInfo = await page.evaluate(() => {\n                    const hourInner = document.querySelector(\"#select-hour_list + * .rc-virtual-list-holder-inner\");\n                    const hourElementHeight = hourInner?.children[0].clientHeight || 36;\n                    const hourMapsElem = Array.from(\n                        document.querySelectorAll(\n                            \"#select-hour_list + * .cheetah-select-item-option .cheetah-select-item-option-content\",\n                        ),\n                    );\n                    const hourMap = hourMapsElem.map((item) => item.textContent?.trim());\n\n                    return { elementHeight: hourElementHeight, elementItem: hourMap };\n                });\n                const fistHourElem = scrollHourInfo.elementItem[0];\n                const fistHourElemH = Number(fistHourElem?.split(\"点\")[0]); // 列表渲染的第一个时间\n\n                const lastHourElem = scrollHourInfo.elementItem[scrollHourInfo.elementItem.length - 1];\n                const lastHourElemH = Number(lastHourElem?.split(\"点\")[0]); // 列表渲染的最后一个时间\n\n                const targetTimeH = Number(TimeFormatter.format(params.settingInfo.timer, \"h\")); // 目标时间\n                await page.mouse.wheel(\n                    0,\n                    targetTimeH > lastHourElemH\n                        ? (targetTimeH - lastHourElemH) * scrollHourInfo.elementHeight\n                        : targetTimeH < fistHourElemH\n                          ? -(fistHourElemH - targetTimeH) * scrollHourInfo.elementHeight\n                          : 0,\n                );\n                await page\n                    .locator(\"#select-hour_list + * .cheetah-select-item-option \", { hasText: `${targetTimeH}点` })\n                    .click();\n                await page.waitForTimeout(200);\n\n                // 选择分钟\n                await page.locator(\".timepublish-wrap-select .select-wrap\", { hasText: \"分\" }).click();\n                await page.locator(\"#select-minute_list +div.rc-virtual-list\").hover();\n\n                const scrollMinuteInfo = await page.evaluate(() => {\n                    const hourInner = document.querySelector(\"#select-minute_list + * .rc-virtual-list-holder-inner\");\n                    const hourElementHeight = hourInner?.children[0].clientHeight || 36;\n                    const hourMapsElem = Array.from(\n                        document.querySelectorAll(\n                            \"#select-minute_list + * .cheetah-select-item-option .cheetah-select-item-option-content\",\n                        ),\n                    );\n                    const hourMap = hourMapsElem.map((item) => item.textContent?.trim());\n\n                    return { elementHeight: hourElementHeight, elementItem: hourMap };\n                });\n                const fistMinuteElem = scrollMinuteInfo.elementItem[0];\n                const fistMinuteElemH = Number(fistMinuteElem?.split(\"分\")[0]); // 列表渲染的第一个时间\n\n                const lastMinuteElem = scrollMinuteInfo.elementItem[scrollMinuteInfo.elementItem.length - 1];\n                const lastMinuteElemH = Number(lastMinuteElem?.split(\"分\")[0]); // 列表渲染的最后一个时间\n\n                const targetTimeM = Number(TimeFormatter.format(params.settingInfo.timer, \"m\")); // 目标时间\n                await page.mouse.wheel(\n                    0,\n                    targetTimeM > lastMinuteElemH\n                        ? (targetTimeM - lastMinuteElemH) * scrollMinuteInfo.elementHeight\n                        : targetTimeM < fistMinuteElemH\n                          ? -(fistMinuteElemH - targetTimeM) * scrollMinuteInfo.elementHeight\n                          : 0,\n                );\n                await page\n                    .locator(\"#select-minute_list + * .cheetah-select-item-option \", { hasText: `${targetTimeM}分` })\n                    .click();\n                await page.waitForTimeout(200);\n\n                await page.locator(\".cheetah-modal-confirm-btns button\").filter({ hasText: \"定时发布\" }).click();\n            } else {\n                await operatorContainer\n                    .locator(\".op-btn-outter-content\")\n                    .filter({ hasText: /^发布/ })\n                    .locator(\"button\")\n                    .click();\n            }\n        }\n    });\n\n    // 关闭页面\n    await page.close();\n\n    return success(articleId, articleId ? \"发布成功\" : message);\n};\n","import type { CommonAction } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport { ActiomCommonParams, ActionCommonParamsSchema } from \"../../types\";\nimport { executeAction, formatSectionHtml } from \"../../utils\";\nimport { mockAction } from \"./mock\";\nimport { rpaAction } from \"./rpa\";\n\ninterface ActivityData {\n    id: string;\n    task_name: string;\n    // biome-ignore lint/suspicious/noExplicitAny: false positive\n    [key: string]: any;\n}\n\nexport const BaijiahaoPublishParamsSchema = ActionCommonParamsSchema.extend({\n    saveType: z.enum([\"draft\", \"publish\"]), // 保存成草稿 / 发布\n    token: z.string(),\n    title: z.string(),\n    content: z.string(),\n    proxyLoc: z.string().optional(),\n    localIP: z.string().optional(), // 用户ip\n    huiwenToken: z.string().optional(), // 绘文token\n    settingInfo: z.object({\n        baijiahaoTitle: z.string(), // 标题\n        baijiahaoCoverType: z.enum([\"single\", \"multiple\"]), // 封面设置：单图 | 三图\n        baijiahaoAbstract: z.string(), // 摘要\n        baijiahaoIsAi: z.array(z.string()), // 设置-由配置项取代\n        baijiahaoSingleCover: z.string(), // 单图封面\n        baijiahaoMultCover: z.array(z.string()), // 三图封面\n        baijiahaoVerticalCover: z.string().optional(), // 竖版封面-下版本删除\n        baijiahaoActivity: z.array(\n            z\n                .object({\n                    id: z.string(),\n                    task_name: z.string(),\n                })\n                .catchall(z.any()), // 允许其他任意字段,\n        ), // 活动投稿\n        baijiahaoPublishConf: z\n            .array(\n                z.object({\n                    confName: z.string(),\n                    isChecked: z.boolean(),\n                }),\n            )\n            .optional(), // 发布配置项\n        baijiahaoTopic: z.record(z.string(), z.any()).optional(), // 百家号话题\n        baijiahaoCms: z.array(z.string()).optional(), // 百家号分类\n        baijiahaoEventSpec: z\n            .object({\n                time: z.string(),\n                pos: z.string(),\n            })\n            .partial()\n            .optional(), // 百家号事件来源说明\n        baijiahaoEvent2News: z.boolean(), // 图文转动态\n        baijiahaoSelectActivityCache: z.array(z.string()), // 选中的活动标签\n        timer: z.number().optional(),\n    }),\n});\n\nexport type BaijiahaoPublishParams = ActiomCommonParams & z.infer<typeof BaijiahaoPublishParamsSchema>;\n\nexport type PublishAction = CommonAction<BaijiahaoPublishParams, string>;\n\nexport const baijiahaoPublish: PublishAction = async (task, params) => {\n    task.logger.info(`baijiahaoPublish actionType: ${params.actionType}`);\n    // Format content HTML\n    params.content = formatSectionHtml(params.content);\n\n    if (params.actionType === \"rpa\") {\n        return rpaAction(task, params);\n    }\n\n    if (params.actionType === \"mockApi\") {\n        return mockAction(task, params);\n    }\n\n    return executeAction(mockAction, rpaAction)(task, params);\n};\n","import https from \"node:https\";\nimport { type CommonAction, success } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams, AxiosProxyParams, BaiJiaHao, Toutiao, Weixin, Xiaohongshu } from \"../../../types\";\nimport { Http } from \"../../../utils/http\";\n\nexport type ttSearchAction = CommonAction<ActiomCommonParams, Toutiao.FansCount>;\n\nexport type xhsSearchAction = CommonAction<ActiomCommonParams, Xiaohongshu.FansCount>;\n\nexport interface GetWxFansSearchParams extends ActiomCommonParams {\n    token: string | number;\n}\n\nexport type wxSearchAction = CommonAction<GetWxFansSearchParams, Weixin.FansCount>;\n\nexport type bjhSearchAction = CommonAction<ActiomCommonParams, BaiJiaHao.FansCount>;\n\nconst generatorFormData = (data: Record<string, unknown>) => {\n    const formData = new URLSearchParams();\n\n    for (const [key, value] of Object.entries(data)) {\n        formData.append(key, String(value));\n    }\n\n    return formData.toString();\n};\n\nexport const TTFansExport: ttSearchAction = async (_task, params) => {\n    const http = new Http({\n        headers: {\n            cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            referer: \"https://mp.toutiao.com/profile_v4/graphic/publish\",\n        },\n    });\n\n    const fans: Toutiao.FansCount = { digg_count: null, fans_count: null, following: null, description: \"\" };\n\n    const userInfo = await http.api<{ code: number; total_fans_count: number; user_id_str: string }>({\n        method: \"get\",\n        url: \"https://mp.toutiao.com/mp/agw/creator_center/user_info?app_id=1231\",\n        params: { app_id: 1231 },\n    });\n\n    async function getToutiaoToken(userId: string, cookies: Record<string, unknown>[]) {\n        return new Promise((resolve, reject) => {\n            const cookieStr = cookies.map((it: Record<string, unknown>) => `${it.name}=${it.value}`).join(\"; \");\n\n            https\n                .get(\n                    `https://www.toutiao.com/c/user/${userId}/`,\n                    {\n                        headers: {\n                            Cookie: cookieStr,\n                            \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64)\",\n                        },\n                    },\n                    (res) => {\n                        // 尝试从 Location 头中提取 token\n                        const location = res.headers.location || \"\";\n                        const match = location.match(/\\/token\\/([^/]+)/);\n                        const token = match ? match[1] : \"\";\n\n                        resolve(token);\n                    },\n                )\n                .on(\"error\", reject);\n        });\n    }\n\n    const token = await getToutiaoToken(userInfo.user_id_str, params.cookies);\n\n    type ttFansDetail = {\n        digg_count: string;\n        fans: string;\n        following: string;\n    };\n    const fansDetail: { data: ttFansDetail; message: string } = await http.api({\n        method: \"POST\",\n        url: \"https://www.toutiao.com/api/pc/user/fans_stat\",\n        data: generatorFormData({ token }),\n    });\n\n    const descriptionRes: { data: { media: { description: string } }; message: string } = await http.api({\n        method: \"GET\",\n        url: \"https://mp.toutiao.com/mp/agw/media/edit_media_account_info\",\n        params: { app_id: 1231 },\n    });\n\n    fans.fans_count = Number(fansDetail.data.fans);\n    fans.digg_count = Number(fansDetail.data.digg_count);\n    fans.following = Number(fansDetail.data.following);\n    fans.description = descriptionRes.data.media.description;\n\n    return success(fansDetail.message === \"success\" ? fans : fans, \"获取粉丝数成功！\");\n};\n\nexport const XhsFansExport: xhsSearchAction = async (_task, params) => {\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://creator.xiaohongshu.com/new/home?source=official\",\n    };\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId, \"xiaohongshu\"];\n    const http = new Http(...args);\n\n    const fans: Xiaohongshu.FansCount = { digg_count: null, fans_count: null, following: null, description: \"\" };\n\n    const res = await http.api<{\n        result: number;\n        data: { follow_count: number; fans_count: number; faved_count: number; personal_desc: string };\n    }>(\n        {\n            method: \"get\",\n            url: \"https://creator.xiaohongshu.com/api/galaxy/creator/home/personal_info\",\n        },\n        { retries: 3, retryDelay: 300, timeout: 30000 },\n    );\n\n    fans.fans_count = Number(res.data.fans_count);\n    fans.digg_count = Number(res.data.faved_count);\n    fans.following = Number(res.data.follow_count);\n    fans.description = res.data.personal_desc;\n\n    return success(fans, `获取粉丝数成功！${_task.debug ? ` ${http.proxyInfo}` : \"\"}`);\n};\n\nexport const WxFansExport: wxSearchAction = async (_task, params) => {\n    const http = new Http({\n        headers: {\n            cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        },\n    });\n    const fans: Weixin.FansCount = { digg_count: null, fans_count: null, following: null, description: \"\" };\n\n    const htmlStr = await http.api<string>({\n        method: \"get\",\n        url: \"https://mp.weixin.qq.com/cgi-bin/home\",\n        params: {\n            t: \"home/index\",\n            token: params.token,\n            lang: \"zh_CN\",\n        },\n    });\n    const match = htmlStr.match(/总用户数[\\s\\S]*?<mp-thousandth>(\\d+)<\\/mp-thousandth>/);\n    if (match) {\n        fans.fans_count = Number(match[1]);\n    }\n\n    const desc = await http.api<string>({\n        url: \"https://mp.weixin.qq.com/cgi-bin/settingpage\",\n        method: \"get\",\n        params: {\n            t: \"setting/index\",\n            action: \"index\",\n            token: params.token,\n            lang: \"zh_CN\",\n        },\n    });\n    const descMatch = desc.match(\n        /<label[^>]*class=\"weui-desktop-setting__item__label\"[^>]*>介绍<\\/label>[\\s\\S]*?<div[^>]*class=\"weui-desktop-setting__item__info\"[^>]*>(.*?)<\\/div>/,\n    );\n\n    if (descMatch) {\n        fans.description = descMatch[1].trim();\n    }\n\n    return success(fans, \"获取粉丝数成功！\");\n};\n\nexport const BjhFansExport: bjhSearchAction = async (_task, params) => {\n    const http = new Http({\n        headers: {\n            cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            referer: \"https://baijiahao.baidu.com/builder/rc/home\",\n        },\n    });\n    const fans: BaiJiaHao.FansCount = { digg_count: null, fans_count: null, following: null, description: \"\" };\n\n    const res = await http.api<{ errno: number; data: { total_fans: number } }>({\n        method: \"get\",\n        url: \"https://baijiahao.baidu.com/cms-ui/rights/growth/get_info\",\n    });\n    if (res.errno === 0) fans.fans_count = res.data.total_fans;\n\n    const desc = await http.api<{ errno: number; data: { user: { wishes: string } } }>({\n        method: \"get\",\n        url: \"https://baijiahao.baidu.com/builder/app/appinfo\",\n    });\n    if (desc.errno === 0) fans.description = desc.data.user.wishes;\n\n    return success(fans, \"获取粉丝数成功！\");\n};\n","/**\n * 小红书请求签名生成工具 TypeScript 版本\n * 完全对应 Python 版本的功能实现\n * 兼容ES5/ES2015版本\n */\n\nimport * as crypto from 'node:crypto';\n\n// ========== 配置常量类 ==========\nexport class CryptoConfig {\n    // 位操作相关常量\n    static readonly MAX_32BIT = 0xFFFFFFFF;\n    static readonly MAX_SIGNED_32BIT = 0x7FFFFFFF;\n    static readonly MAX_BYTE = 255;\n\n    // Base64编码相关常量\n    static readonly STANDARD_BASE64_ALPHABET = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n    static readonly CUSTOM_BASE64_ALPHABET = \"ZmserbBoHQtNP+wOcza/LpngG8yJq42KWYj0DSfdikx3VT16IlUAFM97hECvuRX5\";\n    static readonly X3_BASE64_ALPHABET = \"MfgqrsbcyzPQRStuvC7mn501HIJBo2DEFTKdeNOwxWXYZap89+/A4UVLhijkl63G\";\n\n    // XOR 密钥 (124字节)\n    static readonly HEX_KEY = \"71a302257793271ddd273bcee3e4b98d9d7935e1da33f5765e2ea8afb6dc77a51a499d23b67c20660025860cbf13d4540d92497f58686c574e508f46e1956344f39139bf4faf22a3eef120b79258145b2feb5193b6478669961298e79bedca646e1a693a926154a5a7a1bd1cf0dedb742f917a747a1e388b234f2277\";\n\n    // 十六进制处理相关常量\n    static readonly EXPECTED_HEX_LENGTH = 32;\n    static readonly OUTPUT_BYTE_COUNT = 8;\n    static readonly HEX_CHUNK_SIZE = 2;\n\n    // 载荷构建相关常量 (固定124字节)\n    static readonly VERSION_BYTES = [119, 104, 96, 41];\n    static readonly SEQUENCE_VALUE_MIN = 15;\n    static readonly SEQUENCE_VALUE_MAX = 50;\n    static readonly WINDOW_PROPS_LENGTH_MIN = 900;\n    static readonly WINDOW_PROPS_LENGTH_MAX = 1200;\n\n    // 校验和常量\n    static readonly CHECKSUM_VERSION = 1;\n    static readonly CHECKSUM_XOR_KEY = 115;\n    static readonly CHECKSUM_FIXED_TAIL = [249, 65, 103, 103, 201, 181, 131, 99, 94, 7, 68, 250, 132, 21];\n\n    // 环境指纹生成参数\n    static readonly ENV_FINGERPRINT_XOR_KEY = 41;\n    static readonly ENV_FINGERPRINT_TIME_OFFSET_MIN = 10;\n    static readonly ENV_FINGERPRINT_TIME_OFFSET_MAX = 50;\n\n    // 签名数据模板\n    static readonly SIGNATURE_DATA_TEMPLATE = {\n        x0: \"4.2.6\",\n        x1: \"xhs-pc-web\",\n        x2: \"Windows\",\n        x3: \"\",\n        x4: \"\"\n    };\n\n    // 前缀常量\n    static readonly X3_PREFIX = \"mns0301_\";\n    static readonly XYS_PREFIX = \"XYS_\";\n\n    // Trace ID 生成常量\n    static readonly HEX_CHARS = \"abcdef0123456789\";\n    static readonly XRAY_TRACE_ID_SEQ_MAX = 8388607; // 2^23-1\n    static readonly XRAY_TRACE_ID_TIMESTAMP_SHIFT = 23;\n    static readonly B3_TRACE_ID_LENGTH = 16;\n\n    // 新增 PUBLIC_USERAGENT\n    static readonly PUBLIC_USERAGENT = \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 Edg/142.0.0.0\";\n\n    // 新增 SIGNATURE_XSCOMMON_TEMPLATE\n    static readonly SIGNATURE_XSCOMMON_TEMPLATE = {\n        s0: 5,\n        s1: \"\",\n        x0: \"1\",\n        x1: \"4.2.6\",\n        x2: \"Windows\",\n        x3: \"xhs-pc-web\",\n        x4: \"4.86.0\",\n        x5: \"\",\n        x6: \"\",\n        x7: \"\",\n        x8: \"\",\n        x9: -596800761,\n        x10: 0,\n        x11: \"normal\"\n    };\n}\n\n// ========== 位操作类 ==========\nexport class BitOperations {\n    private config = CryptoConfig;\n\n    normalizeTo32bit(value: number): number {\n        return value & this.config.MAX_32BIT;\n    }\n\n    xorTransformArray(inputArray: number[]): Uint8Array {\n        const keyBytes = this.hexStringToBytes(this.config.HEX_KEY);\n        const result = new Uint8Array(inputArray.length);\n\n        for (let i = 0; i < inputArray.length; i++) {\n            result[i] = inputArray[i] ^ keyBytes[i % keyBytes.length];\n        }\n\n        return result;\n    }\n\n    private hexStringToBytes(hexString: string): number[] {\n        const bytes: number[] = [];\n        for (let i = 0; i < hexString.length; i += 2) {\n            bytes.push(parseInt(hexString.substr(i, 2), 16));\n        }\n        return bytes;\n    }\n}\n\n// ========== 随机数生成类 ==========\nexport class RandomGenerator {\n    private config = CryptoConfig;\n\n    generateRandomBytes(byteCount: number): number[] {\n        const result: number[] = [];\n        for (let i = 0; i < byteCount; i++) {\n            result.push(Math.floor(Math.random() * (this.config.MAX_BYTE + 1)));\n        }\n        return result;\n    }\n\n    generateRandomByteInRange(minVal: number, maxVal: number): number {\n        return Math.floor(Math.random() * (maxVal - minVal + 1)) + minVal;\n    }\n\n    generateRandomInt(): number {\n        return Math.floor(Math.random() * (this.config.MAX_32BIT + 1));\n    }\n\n    generateB3TraceId(): string {\n        let result = '';\n        for (let i = 0; i < this.config.B3_TRACE_ID_LENGTH; i++) {\n            result += this.config.HEX_CHARS[Math.floor(Math.random() * this.config.HEX_CHARS.length)];\n        }\n        return result;\n    }\n\n    generateXrayTraceId(timestamp?: number, seq?: number): string {\n        if (timestamp === undefined) {\n            timestamp = Date.now();\n        }\n        if (seq === undefined) {\n            seq = Math.floor(Math.random() * (this.config.XRAY_TRACE_ID_SEQ_MAX + 1));\n        }\n\n        const part1 = ((timestamp << this.config.XRAY_TRACE_ID_TIMESTAMP_SHIFT) | seq).toString(16).padStart(16, '0');\n\n        let part2 = '';\n        for (let i = 0; i < 16; i++) {\n            part2 += this.config.HEX_CHARS[Math.floor(Math.random() * this.config.HEX_CHARS.length)];\n        }\n\n        return part1 + part2;\n    }\n}\n\n// ========== Base64编码器 ==========\nexport class Base64Encoder {\n    private config = CryptoConfig;\n\n    encode(dataToEncode: string): string {\n        const dataBytes = Buffer.from(dataToEncode, 'utf-8');\n        const standardEncodedString = dataBytes.toString('base64');\n\n        let result = '';\n        for (const char of standardEncodedString) {\n            const index = this.config.STANDARD_BASE64_ALPHABET.indexOf(char);\n            if (index !== -1) {\n                result += this.config.CUSTOM_BASE64_ALPHABET[index];\n            } else {\n                result += char;\n            }\n        }\n\n        return result;\n    }\n\n    decode(encodedString: string): string {\n        let standardString = '';\n        for (const char of encodedString) {\n            const index = this.config.CUSTOM_BASE64_ALPHABET.indexOf(char);\n            if (index !== -1) {\n                standardString += this.config.STANDARD_BASE64_ALPHABET[index];\n            } else {\n                standardString += char;\n            }\n        }\n\n        return Buffer.from(standardString, 'base64').toString('utf-8');\n    }\n\n    encodeX3(dataBytes: Uint8Array): string {\n        const base64String = Buffer.from(dataBytes).toString('base64');\n\n        let result = '';\n        for (const char of base64String) {\n            const index = this.config.STANDARD_BASE64_ALPHABET.indexOf(char);\n            if (index !== -1) {\n                result += this.config.X3_BASE64_ALPHABET[index];\n            } else {\n                result += char;\n            }\n        }\n\n        return result;\n    }\n\n    decodeX3(encodedString: string): Uint8Array {\n        let standardString = '';\n        for (const char of encodedString) {\n            const index = this.config.X3_BASE64_ALPHABET.indexOf(char);\n            if (index !== -1) {\n                standardString += this.config.STANDARD_BASE64_ALPHABET[index];\n            } else {\n                standardString += char;\n            }\n        }\n\n        return new Uint8Array(Buffer.from(standardString, 'base64'));\n    }\n}\n\n// ========== 请求签名验证器 ==========\nexport type HttpMethod = 'GET' | 'POST';\n\nexport class RequestSignatureValidator {\n    static validateMethod(method: any): HttpMethod {\n        if (typeof method !== 'string') {\n            throw new TypeError(`method must be str, got ${typeof method}`);\n        }\n\n        const normalizedMethod = method.trim().toUpperCase() as HttpMethod;\n        if (!['GET', 'POST'].includes(normalizedMethod)) {\n            throw new Error(`method must be 'GET' or 'POST', got '${method}'`);\n        }\n\n        return normalizedMethod;\n    }\n\n    static validateUri(uri: any): string {\n        if (typeof uri !== 'string') {\n            throw new TypeError(`uri must be str, got ${typeof uri}`);\n        }\n\n        if (!uri.trim()) {\n            throw new Error('uri cannot be empty');\n        }\n\n        return uri.trim();\n    }\n\n    static validateA1Value(a1Value: any): string {\n        if (typeof a1Value !== 'string') {\n            throw new TypeError(`a1_value must be str, got ${typeof a1Value}`);\n        }\n\n        if (!a1Value.trim()) {\n            throw new Error('a1_value cannot be empty');\n        }\n\n        return a1Value.trim();\n    }\n\n    static validateXsecAppid(xsecAppid: any): string {\n        if (typeof xsecAppid !== 'string') {\n            throw new TypeError(`xsec_appid must be str, got ${typeof xsecAppid}`);\n        }\n\n        if (!xsecAppid.trim()) {\n            throw new Error('xsec_appid cannot be empty');\n        }\n\n        return xsecAppid.trim();\n    }\n\n    static validatePayload(payload: any): Record<string, any> | null {\n        if (payload !== null && (typeof payload !== 'object' || Array.isArray(payload))) {\n            throw new TypeError(`payload must be dict or None, got ${typeof payload}`);\n        }\n\n        if (payload !== null) {\n            for (const key in payload) {\n                if (typeof key !== 'string') {\n                    throw new TypeError(`payload keys must be str, got ${typeof key} for key '${key}'`);\n                }\n            }\n        }\n\n        return payload;\n    }\n}\n\n// ========== 加密处理器 ==========\nexport class CryptoProcessor {\n    public config = CryptoConfig;\n    public bitOps = new BitOperations();\n    public b64encoder = new Base64Encoder();\n    public randomGen = new RandomGenerator();\n\n    private intToLeBytes(val: number, length: number = 4): number[] {\n        const arr: number[] = [];\n        for (let i = 0; i < length; i++) {\n            arr.push(val & 0xFF);\n            val >>>= 8;\n        }\n        return arr;\n    }\n\n    private envFingerprintA(ts: number, xorKey: number): number[] {\n        const data: number[] = [];\n\n        // 小端序编码时间戳\n        for (let i = 0; i < 8; i++) {\n            data.push((ts >>> (i * 8)) & 0xFF);\n        }\n\n        // 计算校验和\n        const sum1 = data.slice(1, 5).reduce((a, b) => a + b, 0);\n        const sum2 = data.slice(5, 8).reduce((a, b) => a + b, 0);\n        const mark = ((sum1 & 0xFF) + sum2) & 0xFF;\n        data[0] = mark;\n\n        // XOR变换\n        return data.map(b => b ^ xorKey);\n    }\n\n    private envFingerprintB(ts: number): number[] {\n        const data: number[] = [];\n        for (let i = 0; i < 8; i++) {\n            data.push((ts >>> (i * 8)) & 0xFF);\n        }\n        return data;\n    }\n\n    buildPayloadArray(\n        hexParameter: string,\n        a1Value: string,\n        appIdentifier: string = \"xhs-pc-web\",\n        stringParam: string = \"\",\n        timestamp?: number\n    ): number[] {\n        const payload: number[] = [];\n\n        // 固定头\n        payload.push(...this.config.VERSION_BYTES);\n\n        // 随机种子\n        const seed = this.randomGen.generateRandomInt();\n        const seedBytes = this.intToLeBytes(seed, 4);\n        payload.push(...seedBytes);\n        const seedByte0 = seedBytes[0];\n\n        // 时间戳处理\n        if (timestamp === undefined) {\n            timestamp = Date.now() / 1000;\n        }\n        const tsMs = Math.floor(timestamp * 1000);\n\n        payload.push(...this.envFingerprintA(tsMs, this.config.ENV_FINGERPRINT_XOR_KEY));\n\n        const timeOffset = this.randomGen.generateRandomByteInRange(\n            this.config.ENV_FINGERPRINT_TIME_OFFSET_MIN,\n            this.config.ENV_FINGERPRINT_TIME_OFFSET_MAX\n        );\n        payload.push(...this.envFingerprintB(tsMs - timeOffset * 1000));\n\n        // 序列值和窗口属性\n        const sequenceValue = this.randomGen.generateRandomByteInRange(\n            this.config.SEQUENCE_VALUE_MIN,\n            this.config.SEQUENCE_VALUE_MAX\n        );\n        payload.push(...this.intToLeBytes(sequenceValue, 4));\n\n        const windowPropsLength = this.randomGen.generateRandomByteInRange(\n            this.config.WINDOW_PROPS_LENGTH_MIN,\n            this.config.WINDOW_PROPS_LENGTH_MAX\n        );\n        payload.push(...this.intToLeBytes(windowPropsLength, 4));\n\n        // URI 长度\n        const uriLength = Buffer.from(stringParam, 'utf-8').length;\n        payload.push(...this.intToLeBytes(uriLength, 4));\n\n        // MD5 XOR 段\n        const md5Bytes = Buffer.from(hexParameter, 'hex');\n        for (let i = 0; i < 8; i++) {\n            payload.push(md5Bytes[i] ^ seedByte0);\n        }\n\n        // A1 长度和内容 (固定52字节)\n        payload.push(52);\n        const a1Bytes = Buffer.from(a1Value, 'utf-8');\n        for (let i = 0; i < 52; i++) {\n            payload.push(i < a1Bytes.length ? a1Bytes[i] : 0);\n        }\n\n        // 源长度和内容 (固定10字节)\n        payload.push(10);\n        const sourceBytes = Buffer.from(appIdentifier, 'utf-8');\n        for (let i = 0; i < 10; i++) {\n            payload.push(i < sourceBytes.length ? sourceBytes[i] : 0);\n        }\n\n        // 尾部校验\n        payload.push(1);\n        payload.push(this.config.CHECKSUM_VERSION);\n        payload.push(seedByte0 ^ this.config.CHECKSUM_XOR_KEY);\n        payload.push(...this.config.CHECKSUM_FIXED_TAIL);\n\n        return payload;\n    }\n}\n\n// ========== CRC32 加密类 ==========\nexport class CRC32 {\n    private static readonly CRC32_TABLE: number[] = (() => {\n        const table: number[] = [];\n        for (let i = 0; i < 256; i++) {\n            let crc = i;\n            for (let j = 0; j < 8; j++) {\n                crc = (crc & 1) ? (0xEDB88320 ^ (crc >>> 1)) : (crc >>> 1);\n            }\n            table.push(crc >>> 0);\n        }\n        return table;\n    })();\n\n    static crc32JsInt(input: string | number[] | Uint8Array, signed: boolean = true): number {\n        let crc = 0xFFFFFFFF;\n        const data = typeof input === 'string' ? this.stringToBytes(input) : input;\n\n        for (const byte of data) {\n            const index = (crc ^ byte) & 0xFF;\n            crc = (this.CRC32_TABLE[index] ^ (crc >>> 8)) >>> 0;\n        }\n\n        crc = (crc ^ 0xFFFFFFFF) >>> 0;\n\n        if (signed) {\n            return crc > 0x7FFFFFFF ? crc - 0x100000000 : crc;\n        }\n        return crc;\n    }\n\n    private static stringToBytes(str: string): number[] {\n        const bytes: number[] = [];\n        for (let i = 0; i < str.length; i++) {\n            const code = str.charCodeAt(i);\n            if (code <= 0xFF) {\n                bytes.push(code);\n            } else {\n                // JS 字符串模式：只取低8位\n                bytes.push(code & 0xFF);\n            }\n        }\n        return bytes;\n    }\n}\n\n// ========== 指纹数据常量 ==========\nexport class FingerprintData {\n    // GPU 供应商列表\n    static readonly GPU_VENDORS = [\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) HD Graphics 400 (0x00000166) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) HD Graphics 4400 (0x00001112) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) HD Graphics 4600 (0x00000412) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) HD Graphics 520 (0x1912) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) HD Graphics 530 (0x00001912) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) HD Graphics 550 (0x00001512) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) HD Graphics 6000 (0x1606) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) Iris(TM) Graphics 540 (0x1912) Direct3D11 vs_5_0 ps_5_0, D3D11)\",  // noqa: E501\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) Iris(TM) Graphics 550 (0x1913) Direct3D11 vs_5_0 ps_5_0, D3D11)\",  // noqa: E501\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) Iris(TM) Plus Graphics 640 (0x161C) Direct3D11 vs_5_0 ps_5_0, D3D11)\",  // noqa: E501\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) UHD Graphics 600 (0x3E80) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) UHD Graphics 620 (0x00003EA0) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) UHD Graphics 630 (0x00003E9B) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) UHD Graphics 655 (0x00009BC8) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) Iris(R) Xe Graphics (0x000046A8) Direct3D11 vs_5_0 ps_5_0, D3D11)\",  // noqa: E501\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) Iris(R) Xe Graphics (0x00009A49) Direct3D11 vs_5_0 ps_5_0, D3D11)\",  // noqa: E501\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) Iris(R) Xe MAX Graphics (0x00009BC0) Direct3D11 vs_5_0 ps_5_0, D3D11)\",  // noqa: E501\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel Arc A370M (0x0000AF51) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel Arc A380 (0x0000AF41) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel Arc A380M (0x0000AF5E) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel Arc A550 (0x0000AF42) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel Arc A770 (0x0000AF43) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel Arc A770M (0x0000AF50) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Mesa Intel(R) Graphics (RPL‑P GT1) (0x0000A702) OpenGL 4.6)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Mesa Intel(R) UHD Graphics 770 (0x00004680) OpenGL 4.6)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Mesa Intel(R) HD Graphics 4400 (0x00001122) OpenGL 4.6)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Mesa Intel(R) Graphics (ADL‑S GT1) (0x0000A0A1) OpenGL 4.6)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Mesa Intel(R) Graphics (RKL GT1) (0x0000A9A1) OpenGL 4.6)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Mesa Intel(R) UHD Graphics (CML GT2) (0x00009A14) OpenGL 4.6)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) HD Graphics 3000 (0x00001022) Direct3D9Ex vs_3_0 ps_3_0, igdumd64.dll)\",  // noqa: E501\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) HD Graphics Family (0x00000A16) Direct3D11 vs_5_0 ps_5_0, D3D11)\",  // noqa: E501\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) Iris Pro OpenGL Engine, OpenGL 4.1)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) Iris(TM) Plus Graphics 645 (0x1616) Direct3D11 vs_5_0 ps_5_0, D3D11)\",  // noqa: E501\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) Iris(TM) Plus Graphics 655 (0x161E) Direct3D11 vs_5_0 ps_5_0, D3D11)\",  // noqa: E501\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) UHD Graphics 730 (0x0000A100) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (Intel)|ANGLE (Intel, Intel(R) UHD Graphics 805 (0x0000B0A0) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (AMD)|ANGLE (AMD, AMD Radeon Vega 3 Graphics (0x000015E0) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (AMD)|ANGLE (AMD, AMD Radeon Vega 8 Graphics (0x000015D8) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (AMD)|ANGLE (AMD, AMD Radeon Vega 11 Graphics (0x000015DD) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (AMD)|ANGLE (AMD, AMD Radeon Graphics (0x00001636) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (AMD)|ANGLE (AMD, AMD Radeon RX 5500 XT Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (AMD)|ANGLE (AMD, AMD Radeon RX 560 (0x000067EF) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (AMD)|ANGLE (AMD, AMD Radeon RX 570 (0x000067DF) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (AMD)|ANGLE (AMD, AMD Radeon RX 580 2048SP (0x00006FDF) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (AMD)|ANGLE (AMD, AMD Radeon RX 590 (0x000067FF) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (AMD)|ANGLE (AMD, AMD Radeon RX 6600 (0x000073FF) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (AMD)|ANGLE (AMD, AMD Radeon RX 6600 XT (0x000073FF) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (AMD)|ANGLE (AMD, AMD Radeon RX 6650 XT Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (AMD)|ANGLE (AMD, AMD Radeon RX 6700 XT (0x000073DF) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (AMD)|ANGLE (AMD, AMD Radeon RX 6800 (0x000073BF) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (AMD)|ANGLE (AMD, AMD Radeon RX 6900 XT (0x000073C2) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (AMD)|ANGLE (AMD, AMD Radeon RX 7700 XT Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (AMD)|ANGLE (AMD, AMD Radeon Pro 5300M OpenGL Engine, OpenGL 4.1)\",\n        \"Google Inc. (AMD)|ANGLE (AMD, AMD Radeon Pro 5500 XT OpenGL Engine, OpenGL 4.1)\",\n        \"Google Inc. (AMD)|ANGLE (AMD, AMD Radeon R7 370 Series (0x00006811) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (AMD)|ANGLE (AMD, ATI Technologies Inc. AMD Radeon RX Vega 64 OpenGL Engine, OpenGL 4.1)\",\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce GTX 1050 (0x00001C81) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce GTX 1050 Ti (0x00001C8C) Direct3D11 vs_5_0 ps_5_0, D3D11)\",  // noqa: E501\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce GTX 1060 6GB (0x000010DE) Direct3D11 vs_5_0 ps_5_0, D3D11)\",  // noqa: E501\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce GTX 1070 (0x00001B81) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce GTX 1080 (0x00001B80) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 2060 (0x00001F06) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 2060 SUPER (0x00001F06) Direct3D11 vs_5_0 ps_5_0, D3D11)\",  // noqa: E501\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 2070 (0x00001F10) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 2070 SUPER (0x00001F10) Direct3D11 vs_5_0 ps_5_0, D3D11)\",  // noqa: E501\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 3060 (0x0000250F) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 3060 Ti (0x00002489) Direct3D11 vs_5_0 ps_5_0, D3D11)\",  // noqa: E501\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 3070 (0x00002488) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 3070 Ti (0x000028A5) Direct3D11 vs_5_0 ps_5_0, D3D11)\",  // noqa: E501\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 3080 (0x00002206) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 3080 Ti (0x00002208) Direct3D11 vs_5_0 ps_5_0, D3D11)\",  // noqa: E501\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 3090 (0x00002204) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 4060 (0x00002882) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 4060 Ti (0x00002803) Direct3D11 vs_5_0 ps_5_0, D3D11)\",  // noqa: E501\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 4070 (0x00002786) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 4070 Ti (0x00002857) Direct3D11 vs_5_0 ps_5_0, D3D11)\",  // noqa: E501\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 4080 (0x00002819) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA GeForce RTX 4090 (0x00002684) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA Quadro RTX 5000 Ada Generation (0x000026B2) Direct3D11 vs_5_0 ps_5_0, D3D11)\",  // noqa: E501\n        \"Google Inc. (NVIDIA)|ANGLE (NVIDIA, NVIDIA Quadro P400 (0x00001CB3) Direct3D11 vs_5_0 ps_5_0, D3D11)\",\n        \"Google Inc. (Google)|ANGLE (Google, Vulkan 1.3.0 (SwiftShader Device (Subzero) (0x0000C0DE)), SwiftShader driver)\",  // noqa: E501\n        \"Google Inc. (Google)|ANGLE (Google, Vulkan 1.3.0 (SwiftShader Device (Subzero)), SwiftShader driver)\",\n        \"Google Inc. (Google)|ANGLE (Google, Vulkan 1.3.0 (SwiftShader Device), SwiftShader driver)\",\n    ];\n\n    // 屏幕分辨率配置\n    static readonly SCREEN_RESOLUTIONS = {\n        resolutions: [\"1366;768\", \"1600;900\", \"1920;1080\", \"2560;1440\", \"3840;2160\", \"7680;4320\"],\n        weights: [0.25, 0.15, 0.35, 0.15, 0.08, 0.02]\n    };\n\n    // 颜色深度选项\n    static readonly COLOR_DEPTH_OPTIONS = {\n        values: [16, 24, 30, 32],\n        weights: [0.05, 0.6, 0.05, 0.3]\n    };\n\n    // 设备内存选项\n    static readonly DEVICE_MEMORY_OPTIONS = {\n        values: [1, 2, 4, 8, 12, 16],\n        weights: [0.10, 0.25, 0.4, 0.2, 0.03, 0.01]\n    };\n\n    // CPU 核心数选项\n    static readonly CORE_OPTIONS = {\n        values: [2, 4, 6, 8, 12, 16, 24, 32],\n        weights: [0.1, 0.4, 0.2, 0.15, 0.08, 0.04, 0.02, 0.01]\n    };\n\n    // 浏览器插件\n    static readonly BROWSER_PLUGINS = \"PDF Viewer,Chrome PDF Viewer,Chromium PDF Viewer,Microsoft Edge PDF Viewer,WebKit built-in PDF\";\n\n    // Canvas 哈希\n    static readonly CANVAS_HASH = \"742cc32c\";\n\n    // 语音哈希选项\n    static readonly VOICE_HASH_OPTIONS = \"10311144241322244122\";\n\n    // 字体字符串\n    static readonly FONTS = 'system-ui, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\", -apple-system, \"Segoe UI\", Roboto, Ubuntu, Cantarell, \"Noto Sans\", sans-serif, BlinkMacSystemFont, \"Helvetica Neue\", Arial, \"PingFang SC\", \"PingFang TC\", \"PingFang HK\", \"Microsoft Yahei\", \"Microsoft JhengHei\"';\n}\n\n// ========== 指纹生成器辅助函数 ==========\nexport class FingerprintHelpers {\n    /**\n     * 加权随机选择\n     */\n    static weightedRandomChoice<T>(options: T[], weights: number[]): T {\n        const totalWeight = weights.reduce((sum, weight) => sum + weight, 0);\n        let random = Math.random() * totalWeight;\n\n        for (let i = 0; i < options.length; i++) {\n            random -= weights[i];\n            if (random <= 0) {\n                return options[i];\n            }\n        }\n        return options[options.length - 1];\n    }\n\n    /**\n     * 获取随机渲染器信息\n     */\n    static getRendererInfo(): { vendor: string; renderer: string } {\n        const rendererStr = FingerprintData.GPU_VENDORS[Math.floor(Math.random() * FingerprintData.GPU_VENDORS.length)];\n        const [vendor, renderer] = rendererStr.split('|');\n        return { vendor, renderer };\n    }\n\n    /**\n     * 获取屏幕配置\n     */\n    static getScreenConfig(): { width: number; height: number; availWidth: number; availHeight: number } {\n        const resolutionStr = this.weightedRandomChoice(\n            FingerprintData.SCREEN_RESOLUTIONS.resolutions,\n            FingerprintData.SCREEN_RESOLUTIONS.weights\n        );\n        const [widthStr, heightStr] = resolutionStr.split(';');\n        const width = parseInt(widthStr);\n        const height = parseInt(heightStr);\n\n        let availWidth: number, availHeight: number;\n\n        if (Math.random() > 0.5) {\n            availWidth = width - parseInt(String(this.weightedRandomChoice([0, 30, 60, 80], [0.1, 0.4, 0.3, 0.2])));\n            availHeight = height;\n        } else {\n            availWidth = width;\n            availHeight = height - parseInt(String(this.weightedRandomChoice([30, 60, 80, 100], [0.2, 0.5, 0.2, 0.1])));\n        }\n\n        return { width, height, availWidth, availHeight };\n    }\n\n    /**\n     * 生成 Canvas 哈希\n     */\n    static generateCanvasHash(): string {\n        return FingerprintData.CANVAS_HASH;\n    }\n\n    /**\n     * 生成 WebGL 哈希\n     */\n    static generateWebglHash(): string {\n        return crypto.createHash('md5').update(crypto.randomBytes(32)).digest('hex');\n    }\n}\n\n// ========== ARC4 加密实现 ==========\nexport class ARC4 {\n    private s: number[] = [];\n\n    constructor(key: Uint8Array) {\n        // 初始化 S 盒\n        for (let i = 0; i < 256; i++) {\n            this.s[i] = i;\n        }\n\n        // 密钥调度算法 (KSA)\n        let j = 0;\n        for (let i = 0; i < 256; i++) {\n            j = (j + this.s[i] + key[i % key.length]) % 256;\n            [this.s[i], this.s[j]] = [this.s[j], this.s[i]];\n        }\n    }\n\n    /**\n     * 加密数据\n     */\n    encrypt(data: Uint8Array): Uint8Array {\n        const result = new Uint8Array(data.length);\n        let i = 0, j = 0;\n\n        for (let k = 0; k < data.length; k++) {\n            i = (i + 1) % 256;\n            j = (j + this.s[i]) % 256;\n            [this.s[i], this.s[j]] = [this.s[j], this.s[i]];\n\n            const keyByte = this.s[(this.s[i] + this.s[j]) % 256];\n            result[k] = data[k] ^ keyByte;\n        }\n\n        return result;\n    }\n}\n\n// ========== 指纹生成器 ==========\nexport class FingerprintGenerator {\n    private config = CryptoConfig;\n    private b1Key: Uint8Array;\n    private encoder: Base64Encoder;\n\n    constructor() {\n        this.b1Key = new TextEncoder().encode(\"xhswebmplfbt\");\n        this.encoder = new Base64Encoder();\n    }\n\n    /**\n     * 生成完整的浏览器指纹\n     * 完全对应 Python 版本的实现\n     */\n    generate(cookies: Record<string, any>, userAgent: string): Record<string, any> {\n        const cookieString = Object.entries(cookies).map(([k, v]) => `${k}=${v}`).join('; ');\n        const screenConfig = FingerprintHelpers.getScreenConfig();\n        const isIncognitoMode = FingerprintHelpers.weightedRandomChoice([\"true\", \"false\"], [0.95, 0.05]);\n        const { vendor, renderer } = FingerprintHelpers.getRendererInfo();\n\n        const x78Y = Math.floor(Math.random() * (2450 - 2350 + 1)) + 2350;\n\n        const fp = {\n            x1: userAgent,\n            x2: \"false\",\n            x3: \"zh-CN\",\n            x4: String(FingerprintHelpers.weightedRandomChoice(\n                FingerprintData.COLOR_DEPTH_OPTIONS.values,\n                FingerprintData.COLOR_DEPTH_OPTIONS.weights\n            )),\n            x5: String(FingerprintHelpers.weightedRandomChoice(\n                FingerprintData.DEVICE_MEMORY_OPTIONS.values,\n                FingerprintData.DEVICE_MEMORY_OPTIONS.weights\n            )),\n            x6: \"24\",\n            x7: `${vendor},${renderer}`,\n            x8: String(FingerprintHelpers.weightedRandomChoice(\n                FingerprintData.CORE_OPTIONS.values,\n                FingerprintData.CORE_OPTIONS.weights\n            )),\n            x9: `${screenConfig.width};${screenConfig.height}`,\n            x10: `${screenConfig.availWidth};${screenConfig.availHeight}`,\n            x11: \"-480\",\n            x12: \"Asia/Shanghai\",\n            x13: isIncognitoMode,\n            x14: isIncognitoMode,\n            x15: isIncognitoMode,\n            x16: \"false\",\n            x17: \"false\",\n            x18: \"un\",\n            x19: \"Win32\",\n            x20: \"\",\n            x21: FingerprintData.BROWSER_PLUGINS,\n            x22: FingerprintHelpers.generateWebglHash(),\n            x23: \"false\",\n            x24: \"false\",\n            x25: \"false\",\n            x26: \"false\",\n            x27: \"false\",\n            x28: \"0,false,false\",\n            x29: \"4,7,8\",\n            x30: \"swf object not loaded\",\n            x33: \"0\",\n            x34: \"0\",\n            x35: \"0\",\n            x36: String(Math.floor(Math.random() * 20) + 1),\n            x37: \"0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|1|0|0|0|0|0\",\n            x38: \"0|0|1|0|1|0|0|0|0|0|1|0|1|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0\",\n            x39: 0,\n            x40: \"0\",\n            x41: \"0\",\n            x42: \"3.4.4\",\n            x43: FingerprintHelpers.generateCanvasHash(),\n            x44: String(Math.floor(Date.now())),\n            x45: \"__SEC_CAV__1-1-1-1-1|__SEC_WSA__|\",\n            x46: \"false\",\n            x47: \"1|0|0|0|0|0\",\n            x48: \"\",\n            x49: \"{list:[],type:}\",\n            x50: \"\",\n            x51: \"\",\n            x52: \"\",\n            x53: crypto.createHash('md5').update(crypto.randomBytes(32)).digest('hex'),\n            x54: FingerprintData.VOICE_HASH_OPTIONS,\n            x55: \"380,380,360,400,380,400,420,380,400,400,360,360,440,420\",\n            x56: `${vendor}|${renderer}|${FingerprintHelpers.generateWebglHash()}|35`,\n            x57: cookieString,\n            x58: \"180\",\n            x59: \"2\",\n            x60: \"63\",\n            x61: \"1291\",\n            x62: \"2047\",\n            x63: \"0\",\n            x64: \"0\",\n            x65: \"0\",\n            x66: {\n                referer: \"\",\n                location: \"https://www.xiaohongshu.com/explore\",\n                frame: 0\n            },\n            x67: \"1|0\",\n            x68: \"0\",\n            x69: \"326|1292|30\",\n            x70: [\"location\"],\n            x71: \"true\",\n            x72: \"complete\",\n            x73: \"1191\",\n            x74: \"0|0|0\",\n            x75: \"Google Inc.\",\n            x76: \"true\",\n            x77: \"1|1|1|1|1|1|1|1|1|1\",\n            x78: {\n                x: 0,\n                y: x78Y,\n                left: 0,\n                right: 290.828125,\n                bottom: x78Y + 18,\n                height: 18,\n                top: x78Y,\n                width: 290.828125,\n                font: FingerprintData.FONTS\n            },\n            x79: \"144|599565058866\",\n            x80: \"1|[object FileSystemDirectoryHandle]\",\n            x31: \"124.04347527516074\",\n            x82: \"_0x17a2|_0x1954\"\n        };\n\n        return fp;\n    }\n\n    /**\n     * 生成 b1 参数\n     * 完全对应 Python 版本的实现\n     */\n    generateB1(fp: Record<string, any>): string {\n        const b1Fp = {\n            x33: fp.x33,\n            x34: fp.x34,\n            x35: fp.x35,\n            x36: fp.x36,\n            x37: fp.x37,\n            x38: fp.x38,\n            x39: fp.x39,\n            x42: fp.x42,\n            x43: fp.x43,\n            x44: fp.x44,\n            x45: fp.x45,\n            x46: fp.x46,\n            x48: fp.x48,\n            x49: fp.x49,\n            x50: fp.x50,\n            x51: fp.x51,\n            x52: fp.x52,\n            x82: fp.x82\n        };\n\n        const b1Json = JSON.stringify(b1Fp, null, 0).replace(/\\s+/g, '');\n\n        // 使用 ARC4 加密\n        const cipher = new ARC4(this.b1Key);\n        const ciphertext = cipher.encrypt(new TextEncoder().encode(b1Json));\n\n        // 转换为 Latin1 字符串并进行 URL 编码\n        let latin1String = '';\n        for (let i = 0; i < ciphertext.length; i++) {\n            latin1String += String.fromCharCode(ciphertext[i]);\n        }\n\n        const encodedUrl = encodeURIComponent(latin1String).replace(/[!'()*~_-]/g, (c) => {\n            return c; // 保持这些字符不编码\n        });\n\n        // 处理编码结果\n        const b: number[] = [];\n        const parts = encodedUrl.split('%').slice(1); // 去掉第一个空元素\n\n        for (const part of parts) {\n            const chars = part.split('');\n            if (chars.length >= 2) {\n                b.push(parseInt(chars.slice(0, 2).join(''), 16));\n                for (let i = 2; i < chars.length; i++) {\n                    b.push(chars[i].charCodeAt(0));\n                }\n            }\n        }\n\n        const b1 = this.encoder.encode(JSON.stringify(b));\n        return b1;\n    }\n\n    /**\n     * 更新指纹\n     * 完全对应 Python 版本的实现\n     */\n    update(fp: Record<string, any>, cookies: Record<string, any>, url: string): void {\n        const cookieString = Object.entries(cookies).map(([k, v]) => `${k}=${v}`).join('; ');\n\n        fp.x39 = 0;\n        fp.x44 = String(Math.floor(Date.now()));\n        fp.x57 = cookieString;\n        fp.x66 = {\n            referer: \"https://www.xiaohongshu.com/explore\",\n            location: url,\n            frame: 0\n        };\n    }\n}\n\n// ========== x-s-common 签名器 ==========\nexport class XsCommonSigner {\n    private config = CryptoConfig;\n    private fpGenerator: FingerprintGenerator;\n    private encoder: Base64Encoder;\n\n    constructor() {\n        this.fpGenerator = new FingerprintGenerator();\n        this.encoder = new Base64Encoder();\n    }\n\n    sign(cookieDict: Record<string, any>): string {\n        if (!cookieDict.a1) {\n            throw new Error(\"Missing 'a1' in cookies\");\n        }\n\n        const a1Value = cookieDict.a1;\n        const fingerprint = this.fpGenerator.generate(cookieDict, this.config.PUBLIC_USERAGENT);\n        const b1 = this.fpGenerator.generateB1(fingerprint);\n        const x9 = CRC32.crc32JsInt(b1, true);\n\n        const signStruct = {\n            s0: 5,\n            s1: \"\",\n            x0: \"1\",\n            x1: \"4.2.6\",\n            x2: \"Windows\",\n            x3: \"xhs-pc-web\",\n            x4: \"4.86.0\",\n            x5: a1Value,\n            x6: \"\",\n            x7: \"\",\n            x8: b1,\n            x9: x9,\n            x10: 0,\n            x11: \"normal\"\n        };\n\n        const signJson = JSON.stringify(signStruct);\n        return this.encoder.encode(signJson);\n    }\n}\n\n// ========== 主客户端类 ==========\nexport class Xhshow {\n    private cryptoProcessor = new CryptoProcessor();\n    private xsCommonSigner = new XsCommonSigner();\n\n    private buildContentString(\n        method: string,\n        uri: string,\n        payload: Record<string, any> | null = null\n    ): string {\n        payload = payload || {};\n\n        if (method.toUpperCase() === 'POST') {\n            // 使用紧凑格式的 JSON，与 Python json.dumps(separators=(\",\", \":\"), ensure_ascii=False) 一致\n            return uri + JSON.stringify(payload);\n        } else {\n            if (Object.keys(payload).length === 0) {\n                return uri;\n            } else {\n                const params = Object.entries(payload).map(([key, value]) => {\n                    let valueStr: string;\n                    if (Array.isArray(value)) {\n                        valueStr = value.map(v => String(v)).join(',');\n                    } else {\n                        valueStr = value !== null ? String(value) : '';\n                    }\n                    // XHS只编码等号为%3D\n                    valueStr = valueStr.replace(/=/g, '%3D');\n                    return `${key}=${valueStr}`;\n                });\n                return `${uri}?${params.join('&')}`;\n            }\n        }\n    }\n\n    private generateDValue(content: string): string {\n        return crypto.createHash('md5').update(content, 'utf-8').digest('hex');\n    }\n\n    private buildSignature(\n        dValue: string,\n        a1Value: string,\n        xsecAppid: string = \"xhs-pc-web\",\n        stringParam: string = \"\",\n        timestamp?: number\n    ): string {\n        const payloadArray = this.cryptoProcessor.buildPayloadArray(\n            dValue, a1Value, xsecAppid, stringParam, timestamp\n        );\n\n        const xorResult = this.cryptoProcessor.bitOps.xorTransformArray(payloadArray);\n\n        return this.cryptoProcessor.b64encoder.encodeX3(xorResult.slice(0, 124));\n    }\n\n    signXs(\n        method: HttpMethod,\n        uri: string,\n        a1Value: string,\n        xsecAppid: string = \"xhs-pc-web\",\n        payload: Record<string, any> | null = null,\n        timestamp?: number\n    ): string {\n        const validatedMethod = RequestSignatureValidator.validateMethod(method);\n        const validatedUri = RequestSignatureValidator.validateUri(uri);\n        const validatedA1Value = RequestSignatureValidator.validateA1Value(a1Value);\n        const validatedXsecAppid = RequestSignatureValidator.validateXsecAppid(xsecAppid);\n        const validatedPayload = RequestSignatureValidator.validatePayload(payload);\n\n        // 深拷贝模板，避免修改原始配置对象\n        const signatureData = JSON.parse(JSON.stringify(this.cryptoProcessor.config.SIGNATURE_DATA_TEMPLATE));\n\n        const content = this.buildContentString(validatedMethod, validatedUri, validatedPayload);\n\n        const dValue = this.generateDValue(content);\n        signatureData.x3 = this.cryptoProcessor.config.X3_PREFIX + this.buildSignature(\n            dValue, validatedA1Value, validatedXsecAppid, content, timestamp\n        );\n\n        // JSON.stringify 默认就是紧凑格式，与 Python 的 separators=(\",\", \":\") 一致\n        const signatureJson = JSON.stringify(signatureData);\n        return this.cryptoProcessor.config.XYS_PREFIX + this.cryptoProcessor.b64encoder.encode(signatureJson);\n    }\n\n    signXsGet(\n        uri: string,\n        a1Value: string,\n        xsecAppid: string = \"xhs-pc-web\",\n        params: Record<string, any> | null = null,\n        timestamp?: number\n    ): string {\n        return this.signXs('GET', uri, a1Value, xsecAppid, params, timestamp);\n    }\n\n    signXsPost(\n        uri: string,\n        a1Value: string,\n        xsecAppid: string = \"xhs-pc-web\",\n        payload: Record<string, any> | null = null,\n        timestamp?: number\n    ): string {\n        return this.signXs('POST', uri, a1Value, xsecAppid, payload, timestamp);\n    }\n\n    signXsCommon(cookieDict: Record<string, any> | string): string {\n        const cookies = this.parseCookies(cookieDict);\n        return this.xsCommonSigner.sign(cookies);\n    }\n\n    signXsc(cookieDict: Record<string, any> | string): string {\n        return this.signXsCommon(cookieDict);\n    }\n\n    private parseCookies(cookies: Record<string, any> | string): Record<string, any> {\n        if (typeof cookies === 'string') {\n            const cookieObj: Record<string, any> = {};\n            cookies.split(';').forEach(item => {\n                const [key, value] = item.trim().split('=');\n                if (key && value) {\n                    cookieObj[key] = value;\n                }\n            });\n            return cookieObj;\n        }\n        return cookies;\n    }\n\n    signHeaders(\n        method: HttpMethod,\n        uri: string,\n        cookies: Record<string, any> | string,\n        xsecAppid: string = \"xhs-pc-web\",\n        params?: Record<string, any> | null,\n        payload?: Record<string, any> | null,\n        timestamp?: number\n    ): Record<string, string> {\n        if (timestamp === undefined) {\n            timestamp = Date.now() / 1000;\n        }\n\n        const methodUpper = method.toUpperCase();\n\n        // 验证方法和参数\n        let requestData: Record<string, any> | null = null;\n        if (methodUpper === 'GET') {\n            if (payload !== undefined && payload !== null) {\n                throw new Error(\"GET requests must use 'params', not 'payload'\");\n            }\n            requestData = params || null;\n        } else if (methodUpper === 'POST') {\n            if (params !== undefined && params !== null) {\n                throw new Error(\"POST requests must use 'payload', not 'params'\");\n            }\n            requestData = payload || null;\n        } else {\n            throw new Error(`Unsupported method: ${method}`);\n        }\n\n        const cookieDict = this.parseCookies(cookies);\n\n        const a1Value = cookieDict.a1;\n        if (!a1Value) {\n            throw new Error(\"Missing 'a1' in cookies\");\n        }\n\n        const xS = this.signXs(methodUpper as HttpMethod, uri, a1Value, xsecAppid, requestData, timestamp);\n        const xSCommon = this.signXsCommon(cookieDict);\n        const xT = this.getXT(timestamp);\n        const xB3Traceid = this.getB3TraceId();\n        const xXrayTraceid = this.getXrayTraceId(Math.floor(timestamp * 1000));\n\n        return {\n            'x-s': xS,\n            'x-s-common': xSCommon,\n            'x-t': xT.toString(),\n            'x-b3-traceid': xB3Traceid,\n            'x-xray-traceid': xXrayTraceid\n        };\n    }\n\n    signHeadersGet(\n        uri: string,\n        cookies: Record<string, any> | string,\n        xsecAppid: string = \"xhs-pc-web\",\n        params?: Record<string, any> | null,\n        timestamp?: number\n    ): Record<string, string> {\n        return this.signHeaders('GET', uri, cookies, xsecAppid, params, undefined, timestamp);\n    }\n\n    signHeadersPost(\n        uri: string,\n        cookies: Record<string, any> | string,\n        xsecAppid: string = \"xhs-pc-web\",\n        payload?: Record<string, any> | null,\n        timestamp?: number\n    ): Record<string, string> {\n        return this.signHeaders('POST', uri, cookies, xsecAppid, undefined, payload, timestamp);\n    }\n\n    decodeX3(x3Signature: string): Uint8Array {\n        if (x3Signature.startsWith(this.cryptoProcessor.config.X3_PREFIX)) {\n            x3Signature = x3Signature.substring(this.cryptoProcessor.config.X3_PREFIX.length);\n        }\n\n        const decodedBytes = this.cryptoProcessor.b64encoder.decodeX3(x3Signature);\n        return this.cryptoProcessor.bitOps.xorTransformArray(Array.from(decodedBytes));\n    }\n\n    decodeXs(xsSignature: string): Record<string, any> {\n        if (xsSignature.startsWith(this.cryptoProcessor.config.XYS_PREFIX)) {\n            xsSignature = xsSignature.substring(this.cryptoProcessor.config.XYS_PREFIX.length);\n        }\n\n        const jsonString = this.cryptoProcessor.b64encoder.decode(xsSignature);\n        try {\n            return JSON.parse(jsonString);\n        } catch (e) {\n            throw new Error(`Invalid signature: JSON decode failed - ${e}`);\n        }\n    }\n\n    getB3TraceId(): string {\n        return this.cryptoProcessor.randomGen.generateB3TraceId();\n    }\n\n    getXrayTraceId(timestamp?: number, seq?: number): string {\n        return this.cryptoProcessor.randomGen.generateXrayTraceId(timestamp, seq);\n    }\n\n    getXT(timestamp?: number): number {\n        if (timestamp === undefined) {\n            timestamp = Date.now() / 1000;\n        }\n        return Math.floor(timestamp * 1000);\n    }\n\n    buildUrl(baseUrl: string, params?: Record<string, any>): string {\n        if (!params || Object.keys(params).length === 0) {\n            return baseUrl;\n        }\n\n        const queryString = Object.entries(params)\n            .map(([key, value]) => {\n                const valueStr = Array.isArray(value) ? value.join(',') : String(value);\n                return `${key}=${encodeURIComponent(valueStr)}`;\n            })\n            .join('&');\n\n        return `${baseUrl}?${queryString}`;\n    }\n\n    buildJsonBody(payload: Record<string, any>): string {\n        // JSON.stringify 默认就是紧凑格式，与 Python json.dumps(separators=(\",\", \":\"), ensure_ascii=False) 一致\n        return JSON.stringify(payload);\n    }\n}\n\n// 导出默认实例\nexport default new Xhshow();\n\n","import { type CommonAction, success } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport type { ActiomCommonParams, AxiosProxyParams } from \"../../../types\";\nimport { ActionCommonParamsSchema } from \"../../../types\";\nimport { Http } from \"../../../utils/http\";\nimport { Xhshow } from \"../../../utils/xhsXsEncrypt\";\n\n// 小红书参数加密器\nconst xsEncrypt = new Xhshow();\n\n// 环境日志采样：基于时间，每5秒最多记录一次\nlet lastEnvLogTime = 0;\nconst ENV_LOG_INTERVAL_MS = 5000; // 5秒\n\nexport const SessionCheckResultSchema = z.object({ isValidSession: z.boolean() });\nexport type sessionCheckResult = z.infer<typeof SessionCheckResultSchema>;\n\nexport const WxBjhSessionParamsSchema = ActionCommonParamsSchema.extend({\n    token: z.union([z.string(), z.number()]),\n});\nexport type WxBjhSessionParams = z.infer<typeof WxBjhSessionParamsSchema>;\n\nexport type ttSessionCheck = CommonAction<ActiomCommonParams, sessionCheckResult>;\nexport type wxSessionCheck = CommonAction<WxBjhSessionParams, sessionCheckResult>;\nexport type xhsSessionCheck = CommonAction<ActiomCommonParams, sessionCheckResult>;\nexport type bjhSessionCheck = CommonAction<WxBjhSessionParams, sessionCheckResult>;\nexport type dySessionCheck = CommonAction<ActiomCommonParams, sessionCheckResult>;\nexport type shipinhaoSessionCheck = CommonAction<ActiomCommonParams, sessionCheckResult>;\n\nexport const TTSessionCheck: ttSessionCheck = async (_task, params) => {\n    const http = new Http({\n        headers: {\n            cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            referer: \"https://mp.toutiao.com/profile_v4/graphic/publish\",\n        },\n    });\n    const res = await http.api({\n        method: \"get\",\n        url: \"https://mp.toutiao.com/mp/agw/creator_center/user_info\",\n        defaultErrorMsg: \"头条号登录状态失效。\",\n    });\n\n    const isSuccess = res.code === 0;\n    const message = \"头条账号有效性检测成功\";\n    const data = isSuccess ? { isValidSession: true } : { isValidSession: false };\n\n    return success(data, message);\n};\n\nexport const WxSessionCheck: wxSessionCheck = async (_task, params) => {\n    const http = new Http({\n        headers: {\n            cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        },\n    });\n    const fingerprint = \"4695500bc93ab4ce8fb2692da6564e04\";\n\n    const res = await http.api<{ base_resp: { ret: number } }>({\n        method: \"get\",\n        url: \"https://mp.weixin.qq.com/cgi-bin/appmsgpublish\",\n        params: {\n            fingerprint,\n            sub: \"list\",\n            begin: 0,\n            count: 10,\n            query: \"\",\n            type: 101_1_102_103,\n            show_type: \"\",\n            free_publish_type: 1_102_103,\n            sub_action: \"list_ex\",\n            search_card: 0,\n            token: params.token,\n            lang: \"zh_CN\",\n            f: \"json\",\n            ajax: 1,\n        },\n    });\n\n    return success(\n        res.base_resp.ret === 0 ? { isValidSession: true } : { isValidSession: false },\n        \"微信账号有效性检测完成！\",\n    );\n};\n\nexport const XhsSessionCheck: xhsSessionCheck = async (_task, params) => {\n    // 🔍 环境诊断日志 - 基于时间采样，每5秒最多记录一次\n    const now = Date.now();\n    const shouldLogEnv = now - lastEnvLogTime >= ENV_LOG_INTERVAL_MS;\n\n    if (shouldLogEnv) {\n        lastEnvLogTime = now;\n        _task.logger?.debug(\"[XhsSessionCheck] 环境信息\", {\n            processType: process.type,\n            pid: process.pid,\n            nodeVersion: process.version,\n            platform: process.platform,\n            memoryUsage: {\n                heapUsed: `${Math.round(process.memoryUsage().heapUsed / 1024 / 1024)} MB`,\n                heapTotal: `${Math.round(process.memoryUsage().heapTotal / 1024 / 1024)} MB`,\n            },\n            accountId: params.accountId,\n            hasProxy: !!params.proxyLoc,\n        });\n    }\n\n    const check = { isValidSession: false, isValidWebSession: false };\n\n    const a1Cookie = params.cookies.find((it) => it.name === \"a1\")?.value;\n    if (!a1Cookie) {\n        return { code: 414, message: \"账号数据异常，请重新绑定账号后重试。\", data: check };\n    }\n\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://creator.xiaohongshu.com/new/home?source=official\",\n    };\n\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId, \"xiaohongshu\"];\n    const http = new Http(...args);\n    http.addResponseInterceptor((response) => {\n        if (response?.status === 401)\n            return {\n                code: response.data.code,\n                message: response.data.msg,\n                data: response.data.data,\n            };\n    });\n\n    const loginBasePath = \"/api/galaxy/v2/creator/datacenter/account/base\";\n    const recordCookie = params.cookies.reduce<Record<string, string>>((acc, cookie) => {\n        if (cookie.name && cookie.value) {\n            acc[cookie.name] = cookie.value;\n        }\n        return acc;\n    }, {});\n\n    // 🛡️ 加密操作保护：捕获签名生成过程中的异常\n    let loginBaseXsHeader: Record<string, string>;\n    try {\n        loginBaseXsHeader = xsEncrypt.signHeadersGet(loginBasePath, recordCookie, \"xhs-pc-web\", null);\n    } catch (signError) {\n        // ⚠️ 错误时强制记录环境信息，即使不在采样周期内\n        _task.logger?.error(\"[XhsSessionCheck] 签名生成失败 - 环境快照\", {\n            accountId: params.accountId,\n            error: signError instanceof Error ? signError.message : String(signError),\n            stack: _task.debug ? (signError instanceof Error ? signError.stack : undefined) : undefined,\n            hasA1: !!recordCookie.a1,\n            // 崩溃时的关键环境信息\n            env: {\n                processType: process.type,\n                memoryUsage: {\n                    heapUsed: `${Math.round(process.memoryUsage().heapUsed / 1024 / 1024)} MB`,\n                    heapTotal: `${Math.round(process.memoryUsage().heapTotal / 1024 / 1024)} MB`,\n                },\n                hasProxy: !!params.proxyLoc,\n                timeSinceLastLog: Date.now() - lastEnvLogTime,\n            },\n        });\n        return {\n            code: 500,\n            message: \"账号签名生成失败，请稍后重试。\",\n            data: check,\n        };\n    }\n\n    const baseInfoStart = Date.now();\n    const _baseInfo = http\n        .api<{ code: number; msg: string }>(\n            {\n                method: \"get\",\n                baseURL: \"https://creator.xiaohongshu.com\",\n                url: loginBasePath,\n                headers: loginBaseXsHeader,\n            },\n            { retries: 3, retryDelay: 300, timeout: 30000 },\n        )\n        .catch((e) => {\n            // 时钟漂移检测：对比客户端时间与小红书服务端返回的 Date 头。\n            // x-t 签名时间戳来自本地 Date.now()，若与服务端偏差超过容忍窗口（通常 ±5 分钟），\n            // 小红书会判为「登录已过期」(902)。timeDriftMs 持续大于 300000 即可锁定为时钟漂移。\n            const clientTimestamp = Date.now();\n            const serverDate = (e?.extra as { serverDate?: string })?.serverDate;\n            const serverTimestamp = serverDate ? new Date(serverDate).getTime() : null;\n            const timeDriftMs = serverTimestamp ? clientTimestamp - serverTimestamp : null;\n\n            _task.logger?.warn(\"[XhsSessionCheck] creator base 接口请求失败\", {\n                accountId: params.accountId,\n                duration: Date.now() - baseInfoStart,\n                code: e?.code,\n                message: e?.message,\n                data: e?.data,\n                extra: e?.extra,\n                proxyInfo: http.proxyInfo,\n                clientTimestamp,\n                serverDate,\n                serverTimestamp,\n                timeDriftMs, // 关键指标：持续 > 300000(5分钟) 基本可判定为客户端时钟漂移\n                isLikelyClockDrift: timeDriftMs !== null && Math.abs(timeDriftMs) > 300_000,\n            });\n            return e.data;\n        });\n\n    const webSessionPath = \"/api/sns/web/unread_count\";\n    const webSessionData = {};\n    const webSessionXsHeader = xsEncrypt.signHeadersPost(webSessionPath, recordCookie, \"xhs-pc-web\", webSessionData);\n\n    const _web_session = http.api<{ code: number; msg: string }>(\n        {\n            method: \"GET\",\n            url: \"https://edith.xiaohongshu.com/api/sns/web/unread_count\",\n            data: webSessionData,\n            headers: webSessionXsHeader,\n        },\n        { retries: 3, retryDelay: 300, timeout: 30000 },\n    );\n\n    const [baseInfo, web_session] = await Promise.all([_baseInfo, _web_session]);\n\n    if (baseInfo?.code === 0) check.isValidSession = true;\n    if (web_session?.code === 0) check.isValidWebSession = true;\n\n    const _isSuccess = baseInfo?.code === web_session?.code;\n    const message = `小红书账号有效性检测成功${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n\n    return success(check, message);\n};\n\nexport const BjhSessionCheck: bjhSessionCheck = async (_task, params) => {\n    const http = new Http({\n        headers: {\n            cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            token: params.token,\n            referer: \"https://baijiahao.baidu.com/builder/rc/home\",\n        },\n    });\n\n    const res = await http.api({\n        method: \"get\",\n        url: \"https://baijiahao.baidu.com/user-ui/cms/settingInfo\",\n        defaultErrorMsg: \"百家号登录状态失效。\",\n    });\n\n    const isSuccess = res.errno === 0;\n    const message = \"百家号账号有效性检测成功\";\n    const data = isSuccess ? { isValidSession: true } : { isValidSession: false };\n\n    return success(data, message);\n};\n\n/**\n * 抖音创作者平台 Session 检查\n * 通过调用创作者平台用户信息接口验证登录状态\n */\nexport const DySessionCheck: dySessionCheck = async (_task, params) => {\n    const http = new Http({\n        headers: {\n            cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            referer: \"https://creator.douyin.com/\",\n        },\n    });\n\n    // 抖音创作者平台获取用户信息的接口\n    const res = await http.api<{\n        status_code: number;\n        data?: {\n            user?: {\n                uid?: string;\n                nickname?: string;\n            };\n        };\n        message?: string;\n    }>({\n        method: \"get\",\n        url: \"https://creator.douyin.com/aweme/v1/creator/user/info/\",\n        params: {\n            // 抖音接口通常需要的时间戳参数\n            _ts: Date.now(),\n        },\n        defaultErrorMsg: \"抖音登录状态失效。\",\n    });\n\n    // 抖音接口返回 status_code 为 0 表示成功\n    const isSuccess = res.status_code === 0;\n    const message = \"抖音账号有效性检测成功\";\n    const data = isSuccess ? { isValidSession: true } : { isValidSession: false };\n\n    return success(data, message);\n};\n\n/**\n * 视频号助手平台 Session 检查\n * 通过调用视频号助手的 auth_data 接口验证登录状态\n */\nexport const ShipinhaoSessionCheck: shipinhaoSessionCheck = async (_task, params) => {\n    const http = new Http({\n        headers: {\n            cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            referer: \"https://channels.weixin.qq.com\",\n            \"user-agent\":\n                \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36\",\n            \"Content-Type\": \"application/json\",\n        },\n    });\n\n    // 获取13位时间戳\n    const getTimeStamp = (length: number): string => {\n        return Date.now().toString().substring(0, length);\n    };\n\n    // 构建请求体，与视频号助手保持一致\n    const requestBody = {\n        timestamp: getTimeStamp(13), // 13位时间戳\n        _log_finder_uin: \"\",\n        _log_finder_id: \"\",\n        rawKeyBuff: null,\n        pluginSessionId: null,\n        scene: 7,\n        reqScene: 7,\n    };\n\n    // 视频号助手获取用户信息的接口\n    const res = await http.api<{\n        errCode: number;\n        errMsg?: string;\n        data?: {\n            finderUser?: {\n                uin?: number;\n                finderUsername?: string;\n                nickname?: string;\n                headImgUrl?: string;\n            };\n        };\n    }>({\n        method: \"post\",\n        url: \"https://channels.weixin.qq.com/cgi-bin/mmfinderassistant-bin/auth/auth_data\",\n        data: requestBody,\n        defaultErrorMsg: \"视频号登录状态失效。\",\n    });\n\n    // 视频号接口返回 errCode 为 0 表示成功\n    // errCode: 300333/300334 表示登录失效\n    const isSuccess = res.errCode === 0 && res.data?.finderUser !== undefined;\n    const message = isSuccess\n        ? \"视频号账号有效性检测成功\"\n        : res.errCode === 300333 || res.errCode === 300334\n          ? \"视频号登录已失效，请重新登录\"\n          : \"视频号账号有效性检测失败\";\n\n    const data = isSuccess ? { isValidSession: true } : { isValidSession: false };\n\n    return success(data, message);\n};\n","export const contentLimitLength = (content: string) => {\n    // biome-ignore lint/suspicious/noControlCharactersInRegex: 需要匹配非ASCII字符计算长度\n    return content.replace(/[^\\x00-\\xff]/g, \"aa\").length > 2 * 1000;\n};\n\n/**\n * 从上传接口（completepartuploaddfs）返回的 DownloadURL 中提取 encfilekey。\n *\n * 这个 key 是发布结果与作品列表之间唯一稳定的关联标识：图文与视频发布都返回它，\n * 上层据此把发布记录对上作品。不要改用 clipKey —— clipKey 只是转码任务 id，\n * 发布完成后在作品列表侧查不到对应记录。\n *\n * 取不到时返回空字符串（与图文侧原有行为一致），由调用方决定是否记日志。\n */\nexport const extractEncFileKey = (downloadUrl?: string): string => {\n    if (!downloadUrl) return \"\";\n    return downloadUrl.split(\"encfilekey=\")[1]?.split(\"&\")[0] || \"\";\n};\nexport const rid = () => {\n    return `${Math.floor(Date.now() / 1e3).toString(16)}-${[...Array(8)].map(() => Math.floor(16 * Math.random()).toString(16)).join(\"\")}`;\n};\n\n/**\n * UUID v4 生成器\n * 符合 RFC 4122 标准\n */\n\n/**\n * 随机数生成器函数类型\n */\ntype RandomBytesGenerator = () => Uint8Array;\n\n/**\n * UUID 生成选项\n */\ninterface UuidOptions {\n    /** 自定义随机数生成器 */\n    random?: RandomBytesGenerator;\n    /** 自定义 RNG 函数（random 的别名） */\n    rng?: RandomBytesGenerator;\n}\n\n/**\n * 浏览器 Crypto API 类型\n */\ninterface CryptoAPI {\n    getRandomValues<T extends ArrayBufferView>(array: T): T;\n}\n\n// 配置与常量\n\n// 随机数生成函数（延迟初始化）\nlet randomValuesFunc: ((array: Uint8Array) => Uint8Array) | null = null;\n\n// 16字节缓冲区，用于存储随机数\nconst byteBuffer: Uint8Array = new Uint8Array(16);\n\n// UUID 格式验证正则（含空UUID特殊情况）\nconst UUID_REGEX: RegExp =\n    /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;\n\n// 十六进制查找表：索引 0-255 对应 \"00\" 到 \"ff\"\nconst hexTable: string[] = [];\nfor (let i: number = 0; i < 256; i++) {\n    hexTable.push((i + 256).toString(16).substr(1));\n}\n\n// 核心函数\n\n/**\n * 初始化随机数生成器\n * 优先使用 crypto.getRandomValues，不支持则报错\n * @returns 随机数生成函数\n * @throws 当浏览器不支持 crypto API 时抛出错误\n */\nfunction initRandomGenerator(): (array: Uint8Array) => Uint8Array {\n    if (randomValuesFunc) {\n        return randomValuesFunc;\n    }\n\n    // 检测浏览器 crypto API\n    const globalCrypto: Crypto | undefined = typeof crypto !== \"undefined\" ? crypto : undefined;\n    const globalMsCrypto: CryptoAPI | undefined = typeof msCrypto !== \"undefined\" ? (msCrypto as CryptoAPI) : undefined;\n\n    const cryptoAPI: ((array: Uint8Array) => Uint8Array) | undefined =\n        globalCrypto?.getRandomValues?.bind(globalCrypto) || globalMsCrypto?.getRandomValues?.bind(globalMsCrypto);\n\n    if (!cryptoAPI) {\n        throw new Error(\n            \"crypto.getRandomValues() not supported. \" +\n                \"See https://github.com/uuidjs/uuid#getrandomvalues-not-supported\",\n        );\n    }\n\n    randomValuesFunc = cryptoAPI;\n    return randomValuesFunc;\n}\n\n/**\n * 生成16个随机字节\n * @returns 包含16个随机字节的 Uint8Array\n */\nfunction generateRandomBytes(): Uint8Array {\n    const rng: (array: Uint8Array) => Uint8Array = initRandomGenerator();\n    return rng(byteBuffer);\n}\n\n/**\n * 将16字节数组转换为标准UUID字符串格式\n * @param bytes - 16字节数组\n * @param offset - 起始偏移量（默认为0）\n * @returns 标准UUID字符串（小写）\n * @throws 当生成的字符串格式无效时抛出 TypeError\n */\nfunction bytesToUuid(bytes: Uint8Array, offset: number = 0): string {\n    const uuidString: string = (\n        hexTable[bytes[offset + 0]] +\n        hexTable[bytes[offset + 1]] +\n        hexTable[bytes[offset + 2]] +\n        hexTable[bytes[offset + 3]] +\n        \"-\" +\n        hexTable[bytes[offset + 4]] +\n        hexTable[bytes[offset + 5]] +\n        \"-\" +\n        hexTable[bytes[offset + 6]] +\n        hexTable[bytes[offset + 7]] +\n        \"-\" +\n        hexTable[bytes[offset + 8]] +\n        hexTable[bytes[offset + 9]] +\n        \"-\" +\n        hexTable[bytes[offset + 10]] +\n        hexTable[bytes[offset + 11]] +\n        hexTable[bytes[offset + 12]] +\n        hexTable[bytes[offset + 13]] +\n        hexTable[bytes[offset + 14]] +\n        hexTable[bytes[offset + 15]]\n    ).toLowerCase();\n\n    // 验证生成的UUID格式\n    if (!UUID_REGEX.test(uuidString)) {\n        throw new TypeError(\"Stringified UUID is invalid\");\n    }\n\n    return uuidString;\n}\n\n/**\n * 生成 UUID v4\n * @param options - 配置选项，可自定义随机数生成器\n * @param buffer - 可选的目标缓冲区（用于避免内存分配，提升性能）\n * @param bufferOffset - 在目标缓冲区中的起始位置（默认为0）\n * @returns UUID字符串（当未提供buffer时）或填充后的Uint8Array（当提供buffer时）\n *\n * @example\n * // 基础用法，返回字符串\n * const id: string = uuidv4();\n *\n * @example\n * // 高性能用法，复用缓冲区\n * const buffer = new Uint8Array(16);\n * uuidv4({}, buffer, 0);\n * // buffer 现在包含原始字节\n */\nfunction uuidv4(\n    options: UuidOptions = {},\n    buffer: Uint8Array | null = null,\n    bufferOffset: number = 0,\n): string | Uint8Array {\n    // 获取随机字节（使用自定义rng或默认的crypto API）\n    const rng: RandomBytesGenerator = options.random || options.rng || generateRandomBytes;\n    const bytes: Uint8Array = rng();\n\n    // 设置UUID版本标识位（RFC 4122）\n\n    // 第7字节（索引6）：版本4（0100xxxx）\n    // 0x0F = 0b00001111, 0x40 = 0b01000000\n    bytes[6] = (bytes[6] & 0x0f) | 0x40;\n\n    // 第9字节（索引8）：变体 RFC 4122（10xxxxxx）\n    // 0x3F = 0b00111111, 0x80 = 0b10000000\n    bytes[8] = (bytes[8] & 0x3f) | 0x80;\n\n    // 输出处理\n\n    // 如果提供了目标缓冲区，将结果写入缓冲区\n    if (buffer) {\n        for (let i: number = 0; i < 16; i++) {\n            buffer[bufferOffset + i] = bytes[i];\n        }\n        return buffer;\n    }\n\n    // 否则返回UUID字符串\n    return bytesToUuid(bytes);\n}\n\n// 导出\n\nexport { uuidv4, bytesToUuid, generateRandomBytes };\nexport type { UuidOptions, RandomBytesGenerator };\n\n// 为了兼容 CommonJS 和浏览器全局变量\ndeclare global {\n    /** IE/Edge 旧版 crypto 对象 */\n    var msCrypto: CryptoAPI | undefined;\n}\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { rid } from \"../../utils/shipinhao/utils\";\n\nexport interface CreateShipinhaoCommentParams extends ActiomCommonParams {\n    content: string; // 评论内容\n    exportId: string; // 文章/视频的导出ID\n    rootCommentId?: string; // 根评论ID（回复评论时需要）\n    replyCommentId?: string; // 被回复的评论ID（回复评论时需要）\n}\n\nexport interface CreateCommentResponse {\n    errCode: number;\n    errMsg: string;\n    data?: {\n        commentId: string;\n        createTime: number;\n        success: boolean;\n    };\n}\n\nexport type CreateCommentAction = CommonAction<CreateShipinhaoCommentParams, CreateCommentResponse[\"data\"]>;\n\nexport const createShipinhaoComment: CreateCommentAction = async (_task, params) => {\n    // 验证必需参数\n    if (!params.content || params.content.trim() === \"\") {\n        return response(400, \"评论内容不能为空\", undefined);\n    }\n\n    if (!params.exportId) {\n        return response(400, \"exportId 不能为空\", undefined);\n    }\n\n    // 验证 extraParam 是否存在\n    if (!params.extraParam) {\n        return response(400, \"缺少 extraParam 参数\", undefined);\n    }\n\n    if (!params.extraParam.fingerPrintDeviceId || !params.extraParam.aId || !params.extraParam.uin) {\n        return response(400, \"fingerPrintDeviceId、aId和uin不能为空\", undefined);\n    }\n\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://channels.weixin.qq.com/micro/interaction/comment\",\n        origin: \"https://channels.weixin.qq.com\",\n        \"content-type\": \"application/json\",\n        \"finger-print-device-id\": params.extraParam.fingerPrintDeviceId,\n        \"x-wechat-uin\": params.extraParam.uin,\n    };\n\n    const http = new Http({\n        headers,\n    });\n\n    const urlParams = new URLSearchParams({\n        _aid: params.extraParam.aId,\n        _rid: rid(),\n        _pageUrl: \"https://channels.weixin.qq.com/micro/interaction/comment\",\n    }).toString();\n\n    const requestData: Record<string, any> = {\n        replyCommentId: params.replyCommentId || \"\",\n        content: params.content,\n        clientId: `${Date.now()}-${Math.random().toString(36).substring(2, 15)}`,\n        rootCommentId: params.rootCommentId || \"\",\n        comment: {},\n        exportId: params.exportId,\n        timestamp: Date.now().toString(),\n        _log_finder_uin: \"\",\n        _log_finder_id: params.extraParam.finderUserName || \"\",\n        rawKeyBuff: null,\n        pluginSessionId: null,\n        scene: 7,\n        reqScene: 7,\n    };\n\n    // 如果是回复评论，添加相关参数\n    if (params.rootCommentId) {\n        requestData.rootCommentId = params.rootCommentId;\n    }\n\n    if (params.replyCommentId) {\n        requestData.replyCommentId = params.replyCommentId;\n    }\n\n    const res = await http.api<CreateCommentResponse>({\n        method: \"post\",\n        url: `https://channels.weixin.qq.com/micro/interaction/cgi-bin/mmfinderassistant-bin/comment/create_comment?${urlParams}`,\n        data: requestData,\n    });\n\n    console.log(res, \"----create comment res\");\n\n    const isSuccess = res?.errCode === 0;\n\n    return response(isSuccess ? 0 : 414, res?.errMsg || \"添加评论失败\", res.data);\n};\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport { ActionCommonParamsSchema } from \"../../types\";\nimport { Http } from \"../../utils/http\";\n\nconst { generateCsrfTokenAdvanced } = require(\"../../utils/douyin/douyinSafe/csrfToken.js\");\nconst { getABogus } = require(\"../../utils/douyin/douyinSafe/a_bogus.js\");\nconst { generateDtrait } = require(\"../../utils/douyin/douyinSafe/dtrait.js\");\n\nexport const DouyinCheckVerifyQrCodeParamsSchema = ActionCommonParamsSchema.extend({\n    token: z.string(), // 二维码 token\n    encrypt_uid: z.string(), // decision.encrypt_uid\n    verify_scene: z.string().optional(), // decision.event_params.verify_scene\n    verify_reason: z.string().optional(), // decision.event_params.verify_reason\n    extraParam: z\n        .object({\n            browserInfo: z.object({\n                screen_width: z.string().optional(),\n                screen_height: z.string().optional(),\n                browser_language: z.string().optional(),\n                browser_platform: z.string().optional(),\n                browser_name: z.string().optional(),\n                \"sec-ch-ua-platform\": z.string().optional(),\n                \"sec-ch-ua\": z.string().optional(),\n                userAgent: z.string().optional(),\n            }),\n        })\n        .optional(),\n});\n\nexport type DouyinCheckVerifyQrCodeParams = z.infer<typeof DouyinCheckVerifyQrCodeParamsSchema>;\n\nexport type QrCodeStatus = \"new\" | \"scanned\" | \"confirmed\" | \"expired\" | string;\n\nexport interface QrCodeStatusNew {\n    status: \"new\";\n}\n\nexport interface QrCodeStatusConfirmed {\n    status: \"confirmed\";\n    redirect_url: string;\n    ticket: string;\n    cookies: Array<{ name: string; value: string; [key: string]: unknown }>;\n}\n\nexport interface QrCodeStatusExpired {\n    status: \"expired\";\n    token: string;\n    qrcode: string;\n    qrcode_index_url: string;\n    expire_time: number;\n    app_name: string;\n    web_name: string;\n    cookies: Array<{ name: string; value: string; [key: string]: unknown }>;\n}\n\nexport type QrCodeCheckResult = QrCodeStatusNew | QrCodeStatusConfirmed | QrCodeStatusExpired;\n\nexport type DouyinCheckVerifyQrCodeAction = CommonAction<DouyinCheckVerifyQrCodeParams, QrCodeCheckResult>;\n\n/**\n * 解析响应头中的 set-cookie，将新 cookie 合并到旧 cookies 数组中\n */\nfunction mergeSetCookies(\n    oldCookies: Array<{ name: string; value: string; [key: string]: unknown }>,\n    setCookieHeader: string | string[] | undefined,\n): Array<{ name: string; value: string; [key: string]: unknown }> {\n    if (!setCookieHeader) return oldCookies;\n\n    const setCookies = Array.isArray(setCookieHeader) ? setCookieHeader : [setCookieHeader];\n    const cookieMap = new Map<string, { name: string; value: string; [key: string]: unknown }>(\n        oldCookies.map((c) => [c.name, c]),\n    );\n\n    for (const raw of setCookies) {\n        const parts = raw.split(\";\");\n        const [nameValue] = parts;\n        if (!nameValue) continue;\n        const eqIdx = nameValue.indexOf(\"=\");\n        if (eqIdx === -1) continue;\n        const name = nameValue.slice(0, eqIdx).trim();\n        const value = nameValue.slice(eqIdx + 1).trim();\n        if (!name) continue;\n\n        // 解析其他属性\n        const attrs: Record<string, string | boolean> = {};\n        for (let i = 1; i < parts.length; i++) {\n            const part = parts[i].trim();\n            const attrEq = part.indexOf(\"=\");\n            if (attrEq === -1) {\n                attrs[part.toLowerCase()] = true;\n            } else {\n                attrs[part.slice(0, attrEq).trim().toLowerCase()] = part.slice(attrEq + 1).trim();\n            }\n        }\n\n        const existing = cookieMap.get(name);\n        cookieMap.set(name, {\n            ...(existing || {}),\n            ...attrs,\n            name,\n            value,\n        });\n    }\n\n    return Array.from(cookieMap.values());\n}\n\nexport const douyinCheckVerifyQrCode: DouyinCheckVerifyQrCodeAction = async (task, params) => {\n    const userAgent =\n        params.userAgent ||\n        \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.38\";\n\n    const bizTraceId = params.cookies.find((e: any) => e.name === \"biz_trace_id\")?.value || \"00000000\";\n\n    const msToken = params.cookies.find((e: any) => e.name === \"msToken\")?.value || \"\";\n    const passportCsrfToken = params.cookies.find((e: any) => e.name === \"passport_csrf_token\")?.value || \"\";\n\n    try {\n        task.logger.info(`[douyinCheckVerifyQrCode] 开始轮询二维码状态, token=${params.token}`);\n\n        const headers = {\n            cookie: params.cookies.map((it: any) => `${it.name}=${it.value}`).join(\";\"),\n            origin: \"https://creator.douyin.com\",\n            referer:\n                \"https://creator.douyin.com/creator-micro/content/post/image?default-tab=3&enter_from=publish_page&media_type=image&type=new\",\n            Accept: \"application/json, text/plain, */*\",\n            \"Accept-Encoding\": \"gzip, deflate, br, zstd\",\n            \"sec-ch-ua-platform\": params.extraParam?.browserInfo?.[\"sec-ch-ua-platform\"] || \"\",\n            \"sec-ch-ua\": params.extraParam?.browserInfo?.[\"sec-ch-ua\"] || \"\",\n            \"sec-ch-ua-mobile\": \"?0\",\n            \"user-agent\": userAgent,\n            \"sec-fetch-site\": \"same-origin\",\n            \"sec-fetch-mode\": \"cors\",\n            \"sec-fetch-dest\": \"empty\",\n            \"accept-language\": \"zh-CN,zh;q=0.9\",\n            priority: \"u=1, i\",\n        };\n\n        // 构建 POST body\n        const checkBody: Record<string, string> = {\n            encrypt_uid: params.encrypt_uid || \"\",\n            verify_ticket: \"\",\n            copywriting_key: \"creator\",\n            new_verify_flow: \"\",\n            aid: \"2906\",\n            token: params.token,\n            verify_type: \"\",\n            need_record: \"1\",\n            scene: \"secondary_verify\",\n            verify_scene: params.verify_scene || \"creator\",\n            verify_reason: params.verify_reason || \"gateway_web_authlv_check\",\n            std_verify_way: \"qr_code_verify\",\n            new_authn_sdk_version: \"1.0.0.404-web\",\n        };\n        const checkBodyStr = new URLSearchParams(checkBody).toString();\n\n        // 构建 URL 查询参数（先不含 a_bogus）\n        const checkQueryParams: Record<string, string> = {\n            passport_jssdk_version: \"5.1.2\",\n            passport_jssdk_type: \"lite\",\n            is_from_ttaccountsdk: \"1\",\n            aid: \"2906\",\n            language: \"zh\",\n            account_app_language: \"zh-CN\",\n            new_authn_sdk_version: \"1.0.0.404-web\",\n            is_vcd: \"1\",\n            biz_trace_id: bizTraceId,\n            msToken,\n            a_bogus: \"\",\n        };\n\n        // 生成 a_bogus\n        const checkQueryStr = new URLSearchParams(checkQueryParams).toString();\n        const checkUrl = `https://creator.douyin.com/passport/mobile/validate_by_qrcode/?${checkQueryStr}`;\n        const aBogus = getABogus(checkUrl, checkBodyStr, userAgent);\n        checkQueryParams.a_bogus = aBogus;\n        const finalQueryStr = new URLSearchParams(checkQueryParams).toString();\n\n        // 生成 CSRF Token 与 sessionDtrait\n        const csrfToken = generateCsrfTokenAdvanced({\n            cookies: params.cookies,\n            url: \"https://creator.douyin.com/passport/mobile/validate_by_qrcode/\",\n            method: \"POST\",\n            userAgent,\n        });\n        const sessionDtrait = generateDtrait(\"/passport/mobile/validate_by_qrcode/\");\n\n        // 用于捕获响应头中的 set-cookie\n        let rawSetCookie: string | string[] | undefined;\n\n        const checkHttp = new Http({\n            headers: {\n                ...headers,\n                \"Content-Type\": \"application/x-www-form-urlencoded\",\n                \"x-secsdk-csrf-token\": csrfToken,\n                \"x-tt-passport-csrf-token\": passportCsrfToken,\n                \"x-tt-passport-trace-id\": bizTraceId,\n                \"x-tt-passport-verify-portrait\": \"\",\n                \"x-tt-session-dtrait\": sessionDtrait || \"\",\n            },\n        });\n\n        // 通过拦截器捕获原始响应头\n        checkHttp.addResponseInterceptor((res) => {\n            task.logger.info(\n                `[douyinCheckVerifyQrCode] 原始响应 status=${res.status} data=${JSON.stringify(res.data)}`,\n            );\n            console.log(\"[douyinCheckVerifyQrCode] 原始响应:\", JSON.stringify(res.data));\n            rawSetCookie = res.headers[\"set-cookie\"];\n            return undefined;\n        });\n\n        const checkResponse = await checkHttp.api<{\n            data: {\n                status: QrCodeStatus;\n                redirect_url?: string;\n                ticket?: string;\n                token?: string;\n                qrcode?: string;\n                qrcode_index_url?: string;\n                expire_time?: number;\n                app_name?: string;\n                web_name?: string;\n                is_frontier?: boolean;\n                [key: string]: unknown;\n            };\n            message: string;\n        }>(\n            {\n                method: \"post\",\n                url: `https://creator.douyin.com/passport/mobile/validate_by_qrcode/?${finalQueryStr}`,\n                data: checkBodyStr,\n            },\n            { timeout: 10 * 1000 },\n        );\n\n        const data = checkResponse?.data;\n        const status = data?.status;\n\n        task.logger.info(`[douyinCheckVerifyQrCode] status=${status}`);\n\n        // 合并 set-cookie 到 cookies\n        const updatedCookies = mergeSetCookies(params.cookies as any[], rawSetCookie);\n\n        if (status === \"new\") {\n            return response(0, \"二维码等待扫描\", data);\n        }\n\n        if (status === \"scanned\") {\n            return response(0, \"二维码已扫码，待确认扫描\", data);\n        }\n\n        if (status === \"confirmed\") {\n            return response(0, \"扫码验证成功\", {\n                status: \"confirmed\",\n                redirect_url: data.redirect_url || \"\",\n                ticket: data.ticket || \"\",\n                cookies: updatedCookies,\n            });\n        }\n\n        if (status === \"expired\") {\n            return response(0, \"二维码已过期\", {\n                status: \"expired\",\n                token: data.token || \"\",\n                qrcode: data.qrcode || \"\",\n                qrcode_index_url: data.qrcode_index_url || \"\",\n                expire_time: data.expire_time || 0,\n                app_name: data.app_name || \"\",\n                web_name: data.web_name || \"\",\n            });\n        }\n\n        return response(414, `未知二维码状态: ${status}`, \"\" as any);\n    } catch (err) {\n        const msg = err instanceof Error ? err.message : String(err);\n        task.logger.warn(`[douyinCheckVerifyQrCode] 请求失败: ${msg}`);\n        return response(500, `校验二维码失败: ${msg}`, \"\" as any);\n    }\n};\n","import { z } from \"zod\";\nimport { ActionCommonParamsSchema } from \"../../types\";\n\nexport const DouyinCreateCommentReplyParamsSchema = ActionCommonParamsSchema.extend({\n    itemId: z.string(),\n    commentId: z.string(),\n    text: z.string(),\n});\n\nexport type DouyinCreateCommentReplyParams = z.infer<typeof DouyinCreateCommentReplyParamsSchema>;\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport { ActionCommonParamsSchema, AxiosProxyParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { DouyinCreateCommentReplyParamsSchema } from \"./schema\";\n\nconst { getABogus } = require(\"../../utils/douyin/douyinSafe/a_bogus.js\");\nconst { generateCsrfTokenAdvanced } = require(\"../../utils/douyin/douyinSafe/csrfToken.js\");\n\nexport type DouyinCreateCommentReplyParams = z.infer<typeof DouyinCreateCommentReplyParamsSchema>;\nexport { DouyinCreateCommentReplyParamsSchema } from \"./schema\";\n\nexport interface DouyinCreateCommentReplyResponse {\n    status_code: number;\n    status_msg: string;\n    comment?: {\n        cid: string;\n        text: string;\n        create_time: number;\n    };\n}\n\nexport type DouyinCreateCommentReplyAction = CommonAction<\n    DouyinCreateCommentReplyParams,\n    DouyinCreateCommentReplyResponse\n>;\n\nexport const douyinCreateCommentReply: DouyinCreateCommentReplyAction = async (_task, params) => {\n    const userAgent =\n        params.userAgent ||\n        \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.38\";\n\n    const headers: any = {\n        cookie: params.cookies.map((it: any) => `${it.name}=${it.value}`).join(\";\"),\n        origin: \"https://creator.douyin.com\",\n        referer: \"https://creator.douyin.com/\",\n        Accept: \"application/json, text/plain, */*\",\n        \"Accept-Encoding\": \"gzip, deflate, br, zstd\",\n        \"Content-Type\": \"application/json\",\n        pragma: \"no-cache\",\n        \"cache-control\": \"no-cache\",\n        \"sec-ch-ua-platform\": params.extraParam?.browserInfo?.[\"sec-ch-ua-platform\"] || \"\",\n        \"sec-ch-ua\": params.extraParam?.browserInfo?.[\"sec-ch-ua\"] || \"\",\n        \"sec-ch-ua-mobile\": \"?0\",\n        \"user-agent\": userAgent,\n        \"sec-fetch-site\": \"same-origin\",\n        \"sec-fetch-mode\": \"cors\",\n        \"sec-fetch-dest\": \"empty\",\n        \"accept-language\": \"zh-CN,zh;q=0.9\",\n        priority: \"u=1, i\",\n    };\n\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    const csrfToken = generateCsrfTokenAdvanced({\n        cookies: params.cookies,\n        url: \"https://creator.douyin.com/aweme/v1/creator/comment/reply/\",\n        method: \"POST\",\n        userAgent,\n    });\n\n    const queryParams: any = {\n        read_aid: \"2906\",\n        aid: \"1128\",\n        cookie_enabled: \"true\",\n        screen_width: params.extraParam?.browserInfo?.screen_width || \"1920\",\n        screen_height: params.extraParam?.browserInfo?.screen_height || \"1080\",\n        browser_language: params.extraParam?.browserInfo?.browser_language || \"zh-CN\",\n        browser_platform: params.extraParam?.browserInfo?.browser_platform || \"Win32\",\n        browser_name: params.extraParam?.browserInfo?.browser_name || \"Mozilla\",\n        browser_version: userAgent,\n        browser_online: \"true\",\n        timezone_name: \"Asia/Shanghai\",\n        support_h265: \"1\",\n        msToken: params.cookies.find((e) => e.name === \"msToken\")?.value || \"\",\n        a_bogus: \"\",\n    };\n\n    const queryParamsBefore = new URLSearchParams(queryParams).toString();\n    const aBogus = getABogus(\n        `https://creator.douyin.com/aweme/v1/creator/comment/reply/?${queryParamsBefore}`,\n        {},\n        userAgent,\n    );\n    queryParams.a_bogus = aBogus;\n    const queryString = new URLSearchParams(queryParams).toString();\n\n    const body = {\n        comment_Id: params.commentId,\n        text: params.text,\n        item_id: params.itemId,\n    };\n    console.log(\"抖音添加评论回复参数:\", body);\n\n    const res = await http.api<DouyinCreateCommentReplyResponse>(\n        {\n            method: \"post\",\n            url: `https://creator.douyin.com/aweme/v1/creator/comment/reply/?${queryString}`,\n            data: body,\n            headers: {\n                ...headers,\n                \"X-secsdk-csrf-token\": csrfToken,\n            },\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n    console.log(\"抖音添加评论回复响应:\", res);\n\n    const isSuccess = res.status_code === 0;\n    const message = `抖音添加评论回复${isSuccess ? \"成功\" : `失败，原因：${res.status_msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n\n    return response(isSuccess ? 0 : 414, message, res);\n};\n","import { z } from \"zod\";\nimport { ActionCommonParamsSchema } from \"../../types\";\n\nexport const DouyinGetCollectionParamsSchema = ActionCommonParamsSchema.extend({\n    keyword: z.string().optional(),\n    count: z.number().optional(),\n});\n\nexport type DouyinGetCollectionParams = z.infer<typeof DouyinGetCollectionParamsSchema>;\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport { ActionCommonParamsSchema, AxiosProxyParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { DouyinGetCollectionParamsSchema } from \"./schema\";\n\nconst { getABogus } = require(\"../../utils/douyin/douyinSafe/a_bogus.js\");\nconst { generateCsrfTokenAdvanced } = require(\"../../utils/douyin/douyinSafe/csrfToken.js\");\nexport type DouyinGetCollectionParams = z.infer<typeof DouyinGetCollectionParamsSchema>;\nexport { DouyinGetCollectionParamsSchema } from \"./schema\";\n\nexport interface Collection {\n    mix_id: string;\n    mix_name: string;\n    mix_desc: string;\n    cover_url: string;\n    video_count: number;\n}\n\nexport interface DouyinCollectionResponse {\n    status_code: number;\n    status_msg: string;\n    mix_list?: Collection[];\n    total?: number;\n    data?: {\n        mix_list?: Collection[];\n        total?: number;\n    };\n}\n\nexport type DouyinGetCollectionAction = CommonAction<\n    DouyinGetCollectionParams,\n    {\n        collections: Collection[];\n        total: number;\n    }\n>;\n\nexport const douyinGetCollection: DouyinGetCollectionAction = async (_task, params) => {\n    const userAgent =\n        params.userAgent ||\n        \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.38\";\n\n    const headers: any = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        origin: \"https://creator.douyin.com\",\n        referer: \"https://creator.douyin.com/\",\n        Accept: \"application/json, text/plain, */*\",\n        \"Accept-Encoding\": \"gzip, deflate, br, zstd\",\n        \"Content-Type\": \"application/json\",\n        pragma: \"no-cache\",\n        \"cache-control\": \"no-cache\",\n        \"sec-ch-ua-platform\": params.extraParam?.browserInfo?.[\"sec-ch-ua-platform\"] || \"\",\n        \"sec-ch-ua\": params.extraParam?.browserInfo?.[\"sec-ch-ua\"] || \"\",\n        \"sec-ch-ua-mobile\": \"?0\",\n        \"user-agent\": userAgent,\n        \"sec-fetch-site\": \"same-origin\",\n        \"sec-fetch-mode\": \"cors\",\n        \"sec-fetch-dest\": \"empty\",\n        \"accept-language\": \"zh-CN,zh;q=0.9\",\n        priority: \"u=1, i\",\n    };\n\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    const csrfToken = generateCsrfTokenAdvanced({\n        cookies: params.cookies,\n        url: \"https://creator.douyin.com/web/api/mix/list/\",\n        method: \"GET\",\n        userAgent,\n    });\n\n    const collectionParams = {\n        status: \"0,2\",\n        count: \"50\",\n        cursor: \"0\",\n        source: \"collection_create\",\n        read_aid: \"2906\",\n        aid: \"1128\",\n        cookie_enabled: \"true\",\n        screen_width: params.extraParam?.browserInfo?.screen_width || \"1920\",\n        screen_height: params.extraParam?.browserInfo?.screen_height || \"1080\",\n        browser_language: params.extraParam?.browserInfo?.browser_language || \"zh-CN\",\n        browser_platform: params.extraParam?.browserInfo?.browser_platform || \"Win32\",\n        browser_name: params.extraParam?.browserInfo?.browser_name || \"Mozilla\",\n        browser_version: userAgent,\n        browser_online: \"true\",\n        timezone_name: \"Asia/Shanghai\",\n        support_h265: \"1\",\n        msToken: params.cookies.find((e) => e.name === \"msToken\")?.value || \"\",\n        a_bogus: \"\",\n    };\n    const queryParamsBefore = new URLSearchParams(collectionParams).toString();\n    const aBogus = getABogus(`https://creator.douyin.com/web/api/mix/list/?${queryParamsBefore}`, {}, userAgent);\n    collectionParams.a_bogus = aBogus;\n    const queryString = new URLSearchParams(collectionParams).toString();\n    const res = await http.api<DouyinCollectionResponse>(\n        {\n            method: \"get\",\n            url: `https://creator.douyin.com/web/api/mix/list/?${queryString}`,\n            headers: {\n                ...headers,\n                \"X-secsdk-csrf-token\": csrfToken,\n            },\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n    const isSuccess = res.status_code === 0;\n    const message = `抖音获取合集${isSuccess ? \"成功\" : `失败，原因：${res.status_msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n    const data: { collections: Collection[]; total: number } = isSuccess\n        ? { collections: res?.mix_list || [], total: res?.mix_list?.length || 0 }\n        : { collections: [], total: 0 };\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { z } from \"zod\";\nimport { ActionCommonParamsSchema } from \"../../types\";\n\nexport const DouyinGetCommentListParamsSchema = ActionCommonParamsSchema.extend({\n    cursor: z.number().optional(),\n    count: z.number().optional(),\n    itemId: z.string(),\n});\n\nexport type DouyinGetCommentListParams = z.infer<typeof DouyinGetCommentListParamsSchema>;\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport { ActionCommonParamsSchema, AxiosProxyParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { DouyinGetCommentListParamsSchema } from \"./schema\";\n\nconst { getABogus } = require(\"../../utils/douyin/douyinSafe/a_bogus.js\");\nconst { generateCsrfTokenAdvanced } = require(\"../../utils/douyin/douyinSafe/csrfToken.js\");\n\nexport type DouyinGetCommentListParams = z.infer<typeof DouyinGetCommentListParamsSchema>;\nexport { DouyinGetCommentListParamsSchema } from \"./schema\";\n\nexport interface CommentUser {\n    uid: string;\n    nickname: string;\n    avatar_thumb?: {\n        url_list: string[];\n    };\n}\n\nexport interface CommentItem {\n    cid: string;\n    text: string;\n    create_time: number;\n    digg_count: number;\n    reply_comment_total: number;\n    user: CommentUser;\n    reply_to_reply_id?: string;\n}\n\nexport interface DouyinCommentListResponse {\n    status_code: number;\n    status_msg: string;\n    comment_info_list?: CommentItem[];\n    has_more?: boolean;\n    cursor?: number;\n    total_count?: number;\n    has_vcd_filter?: number;\n}\n\nexport type DouyinGetCommentListAction = CommonAction<DouyinGetCommentListParams, DouyinCommentListResponse>;\n\nexport const douyinGetCommentList: DouyinGetCommentListAction = async (_task, params) => {\n    const userAgent =\n        params.userAgent ||\n        \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.38\";\n\n    const headers: any = {\n        cookie: params.cookies.map((it: any) => `${it.name}=${it.value}`).join(\";\"),\n        origin: \"https://creator.douyin.com\",\n        referer: \"https://creator.douyin.com/\",\n        Accept: \"application/json, text/plain, */*\",\n        \"Accept-Encoding\": \"gzip, deflate, br, zstd\",\n        \"Content-Type\": \"application/json\",\n        pragma: \"no-cache\",\n        \"cache-control\": \"no-cache\",\n        \"sec-ch-ua-platform\": params.extraParam?.browserInfo?.[\"sec-ch-ua-platform\"] || \"\",\n        \"sec-ch-ua\": params.extraParam?.browserInfo?.[\"sec-ch-ua\"] || \"\",\n        \"sec-ch-ua-mobile\": \"?0\",\n        \"user-agent\": userAgent,\n        \"sec-fetch-site\": \"same-origin\",\n        \"sec-fetch-mode\": \"cors\",\n        \"sec-fetch-dest\": \"empty\",\n        \"accept-language\": \"zh-CN,zh;q=0.9\",\n        priority: \"u=1, i\",\n    };\n\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    // Generate CSRF token\n    const csrfToken = generateCsrfTokenAdvanced({\n        cookies: params.cookies,\n        url: \"https://creator.douyin.com/aweme/v1/creator/comment/list/\",\n        method: \"GET\",\n        userAgent,\n    });\n\n    const commentListParams: any = {\n        count: params.count?.toString() || \"10\",\n        cursor: params.cursor?.toString() || \"0\",\n        read_aid: \"2906\",\n        aid: \"1128\",\n        sort: \"TIME\",\n        item_id: params.itemId || \"\",\n        cookie_enabled: \"true\",\n        screen_width: params.extraParam?.browserInfo?.screen_width || \"1920\",\n        screen_height: params.extraParam?.browserInfo?.screen_height || \"1080\",\n        browser_language: params.extraParam?.browserInfo?.browser_language || \"zh-CN\",\n        browser_platform: params.extraParam?.browserInfo?.browser_platform || \"Win32\",\n        browser_name: params.extraParam?.browserInfo?.browser_name || \"Mozilla\",\n        browser_version: userAgent,\n        browser_online: \"true\",\n        timezone_name: \"Asia/Shanghai\",\n        support_h265: \"1\",\n        msToken: params.cookies.find((e) => e.name === \"msToken\")?.value || \"\",\n        a_bogus: \"\",\n    };\n\n    const queryParamsBefore = new URLSearchParams(commentListParams).toString();\n    const aBogus = getABogus(\n        `https://creator.douyin.com/aweme/v1/creator/comment/list/?${queryParamsBefore}`,\n        {},\n        userAgent,\n    );\n    commentListParams.a_bogus = aBogus;\n    const queryString = new URLSearchParams(commentListParams).toString();\n    console.log(\"抖音获取评论列表参数:\", queryString);\n\n    const res = await http.api<DouyinCommentListResponse>(\n        {\n            method: \"get\",\n            url: `https://creator.douyin.com/aweme/v1/creator/comment/list/?${queryString}`,\n            headers: {\n                ...headers,\n                \"X-secsdk-csrf-token\": csrfToken,\n            },\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n    console.log(\"抖音获取评论列表响应:\", res);\n\n    const isSuccess = res.status_code === 0;\n    const message = `抖音获取评论列表${isSuccess ? \"成功\" : `失败，原因：${res.status_msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n\n    return response(isSuccess ? 0 : 414, message, res);\n};\n","import { z } from \"zod\";\nimport { ActionCommonParamsSchema } from \"../../types\";\n\nexport const DouyinGetCommentReplyListParamsSchema = ActionCommonParamsSchema.extend({\n    commentId: z.string(),\n    cursor: z.number().optional(),\n    count: z.number().optional(),\n});\n\nexport type DouyinGetCommentReplyListParams = z.infer<typeof DouyinGetCommentReplyListParamsSchema>;\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport { ActionCommonParamsSchema, AxiosProxyParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { DouyinGetCommentReplyListParamsSchema } from \"./schema\";\n\nconst { getABogus } = require(\"../../utils/douyin/douyinSafe/a_bogus.js\");\nconst { generateCsrfTokenAdvanced } = require(\"../../utils/douyin/douyinSafe/csrfToken.js\");\n\nexport type DouyinGetCommentReplyListParams = z.infer<typeof DouyinGetCommentReplyListParamsSchema>;\nexport { DouyinGetCommentReplyListParamsSchema } from \"./schema\";\n\nexport interface ReplyUser {\n    uid: string;\n    nickname: string;\n    avatar_thumb?: {\n        url_list: string[];\n    };\n}\n\nexport interface ReplyItem {\n    cid: string;\n    text: string;\n    create_time: number;\n    digg_count: number;\n    user: ReplyUser;\n    reply_to_userid?: string;\n    reply_to_username?: string;\n}\n\nexport interface DouyinCommentReplyListResponse {\n    status_code: number;\n    status_msg: string;\n    reply_comment_list?: ReplyItem[];\n    has_more?: boolean;\n    cursor?: number;\n    total_count?: number;\n}\n\nexport type DouyinGetCommentReplyListAction = CommonAction<\n    DouyinGetCommentReplyListParams,\n    DouyinCommentReplyListResponse\n>;\n\nexport const douyinGetCommentReplyList: DouyinGetCommentReplyListAction = async (_task, params) => {\n    const userAgent =\n        params.userAgent ||\n        \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.38\";\n\n    const headers: any = {\n        cookie: params.cookies.map((it: any) => `${it.name}=${it.value}`).join(\";\"),\n        origin: \"https://creator.douyin.com\",\n        referer: \"https://creator.douyin.com/\",\n        Accept: \"application/json, text/plain, */*\",\n        \"Accept-Encoding\": \"gzip, deflate, br, zstd\",\n        \"Content-Type\": \"application/json\",\n        pragma: \"no-cache\",\n        \"cache-control\": \"no-cache\",\n        \"sec-ch-ua-platform\": params.extraParam?.browserInfo?.[\"sec-ch-ua-platform\"] || \"\",\n        \"sec-ch-ua\": params.extraParam?.browserInfo?.[\"sec-ch-ua\"] || \"\",\n        \"sec-ch-ua-mobile\": \"?0\",\n        \"user-agent\": userAgent,\n        \"sec-fetch-site\": \"same-origin\",\n        \"sec-fetch-mode\": \"cors\",\n        \"sec-fetch-dest\": \"empty\",\n        \"accept-language\": \"zh-CN,zh;q=0.9\",\n        priority: \"u=1, i\",\n    };\n\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    // Generate CSRF token\n    const csrfToken = generateCsrfTokenAdvanced({\n        cookies: params.cookies,\n        url: \"https://creator.douyin.com/aweme/v1/creator/comment/reply/list/\",\n        method: \"GET\",\n        userAgent,\n    });\n\n    const replyListParams: any = {\n        count: params.count?.toString() || \"10\",\n        cursor: params.cursor?.toString() || \"0\",\n        read_aid: \"2906\",\n        aid: \"1128\",\n        comment_id: params.commentId,\n        cookie_enabled: \"true\",\n        screen_width: params.extraParam?.browserInfo?.screen_width || \"1920\",\n        screen_height: params.extraParam?.browserInfo?.screen_height || \"1080\",\n        browser_language: params.extraParam?.browserInfo?.browser_language || \"zh-CN\",\n        browser_platform: params.extraParam?.browserInfo?.browser_platform || \"Win32\",\n        browser_name: params.extraParam?.browserInfo?.browser_name || \"Mozilla\",\n        browser_version: userAgent,\n        browser_online: \"true\",\n        timezone_name: \"Asia/Shanghai\",\n        support_h265: \"1\",\n        msToken: params.cookies.find((e) => e.name === \"msToken\")?.value || \"\",\n        a_bogus: \"\",\n    };\n\n    const queryParamsBefore = new URLSearchParams(replyListParams).toString();\n    const aBogus = getABogus(\n        `https://creator.douyin.com/aweme/v1/creator/comment/reply/list/?${queryParamsBefore}`,\n        {},\n        userAgent,\n    );\n    replyListParams.a_bogus = aBogus;\n    const queryString = new URLSearchParams(replyListParams).toString();\n    console.log(\"抖音获取评论回复列表参数:\", queryString);\n\n    const res = await http.api<DouyinCommentReplyListResponse>(\n        {\n            method: \"get\",\n            url: `https://creator.douyin.com/aweme/v1/creator/comment/reply/list/?${queryString}`,\n            headers: {\n                ...headers,\n                \"X-secsdk-csrf-token\": csrfToken,\n            },\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n    console.log(\"抖音获取评论回复列表响应:\", res);\n\n    const isSuccess = res.status_code === 0;\n    const message = `抖音获取评论回复列表${isSuccess ? \"成功\" : `失败，原因：${res.status_msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n\n    return response(isSuccess ? 0 : 414, message, res);\n};\n","import { z } from \"zod\";\nimport { ActionCommonParamsSchema } from \"../../types\";\n\nexport const DouyinGetHotParamsSchema = ActionCommonParamsSchema.extend({\n    query: z.string().optional(),\n    count: z.number().optional(),\n});\n\nexport type DouyinGetHotParams = z.infer<typeof DouyinGetHotParamsSchema>;\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport { ActionCommonParamsSchema, AxiosProxyParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { DouyinGetHotParamsSchema } from \"./schema\";\n\nconst { getABogus } = require(\"../../utils/douyin/douyinSafe/a_bogus.js\");\nconst { generateCsrfTokenAdvanced } = require(\"../../utils/douyin/douyinSafe/csrfToken.js\");\n\nexport type DouyinGetHotParams = z.infer<typeof DouyinGetHotParamsSchema>;\nexport { DouyinGetHotParamsSchema } from \"./schema\";\n\nexport interface Hot {\n    sentence_id: string;\n    group_id: string;\n    word: string;\n    hot_value: number;\n    word_cover: {\n        url_list: string[];\n    };\n    video_count: number;\n    word_type: number;\n}\n\nexport interface DouyinHotResponse {\n    status_code: number;\n    status_msg: string;\n    sentences?: Hot[];\n    all_sentences?: Hot[];\n    extra?: {\n        logid: string;\n        now: number;\n    };\n}\n\nexport type DouyinGetHotAction = CommonAction<\n    DouyinGetHotParams,\n    {\n        hot: Hot[];\n        total: number;\n    }\n>;\n\nexport const douyinGetHot: DouyinGetHotAction = async (_task, params) => {\n    const userAgent =\n        params.userAgent ||\n        \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.38\";\n\n    const headers: any = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        origin: \"https://creator.douyin.com\",\n        referer: \"https://creator.douyin.com/\",\n        Accept: \"application/json, text/plain, */*\",\n        \"Accept-Encoding\": \"gzip, deflate, br, zstd\",\n        \"Content-Type\": \"application/json\",\n        pragma: \"no-cache\",\n        \"cache-control\": \"no-cache\",\n        \"sec-ch-ua-platform\": params.extraParam?.browserInfo?.[\"sec-ch-ua-platform\"] || \"\",\n        \"sec-ch-ua\": params.extraParam?.browserInfo?.[\"sec-ch-ua\"] || \"\",\n        \"sec-ch-ua-mobile\": \"?0\",\n        \"user-agent\": userAgent,\n        \"sec-fetch-site\": \"same-origin\",\n        \"sec-fetch-mode\": \"cors\",\n        \"sec-fetch-dest\": \"empty\",\n        \"accept-language\": \"zh-CN,zh;q=0.9\",\n        priority: \"u=1, i\",\n    };\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    const csrfToken = generateCsrfTokenAdvanced({\n        cookies: params.cookies,\n        url: \"https://creator.douyin.com/aweme/v1/hotspot/recommend/\",\n        method: \"GET\",\n        userAgent,\n    });\n\n    const hotParams: {\n        query?: string;\n        count?: string;\n        read_aid: string;\n        aid: string;\n        cookie_enabled: string;\n        screen_width: string;\n        screen_height: string;\n        browser_language: string;\n        browser_platform: string;\n        browser_name: string;\n        browser_version: string;\n        browser_online: string;\n        timezone_name: string;\n        support_h265: string;\n        msToken: string;\n        a_bogus: string;\n    } = {\n        query: params.query || \"\",\n        count: params.count?.toString() || \"20\",\n        read_aid: \"2906\",\n        aid: \"1128\",\n        cookie_enabled: \"true\",\n        screen_width: params.extraParam?.browserInfo?.screen_width || \"1920\",\n        screen_height: params.extraParam?.browserInfo?.screen_height || \"1080\",\n        browser_language: params.extraParam?.browserInfo?.browser_language || \"zh-CN\",\n        browser_platform: params.extraParam?.browserInfo?.browser_platform || \"Win32\",\n        browser_name: params.extraParam?.browserInfo?.browser_name || \"Mozilla\",\n        browser_version: userAgent,\n        browser_online: \"true\",\n        timezone_name: \"Asia/Shanghai\",\n        support_h265: \"1\",\n        msToken: params.cookies.find((e) => e.name === \"msToken\")?.value || \"\",\n        a_bogus: \"\",\n    };\n    const queryParamsBefore = new URLSearchParams(hotParams).toString();\n    const aBogus = getABogus(\n        `https://creator.douyin.com/aweme/v1/hotspot/${params.query ? \"search\" : \"recommend\"}/?${queryParamsBefore}`,\n        {},\n        userAgent,\n    );\n    hotParams.a_bogus = aBogus;\n    if (!params.query) {\n        delete hotParams.query;\n        delete hotParams.count;\n    }\n    const queryString = new URLSearchParams(hotParams).toString();\n    console.log(\"抖音获取热点参数:\", queryString);\n    const url = `https://creator.douyin.com/aweme/v1/hotspot/${params.query ? \"search\" : \"recommend\"}/?${queryString}`;\n    console.log(\"抖音获取热点URL:\", url);\n    const res = await http.api<DouyinHotResponse>(\n        {\n            method: \"get\",\n            url,\n            headers: {\n                ...headers,\n                \"X-secsdk-csrf-token\": csrfToken,\n            },\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n    // console.log(\"抖音获取热点响应:\", res?.sentences);\n\n    const isSuccess = res.status_code === 0;\n    const message = `抖音获取热点${isSuccess ? \"成功\" : `失败，原因：${res.status_msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n    const data: { hot: Hot[]; total: number } = isSuccess\n        ? {\n              hot: res?.sentences || res?.all_sentences || [],\n              total: (res?.sentences || res?.all_sentences)?.length || 0,\n          }\n        : { hot: [], total: 0 };\n    console.log(\"抖音获取热点数据:\", data);\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { z } from \"zod\";\nimport { ActionCommonParamsSchema } from \"../../types\";\n\nexport const DouyinGetLocationParamsSchema = ActionCommonParamsSchema.extend({\n    keyword: z.string().optional(),\n    count: z.number().optional(),\n});\n\nexport type DouyinGetLocationParams = z.infer<typeof DouyinGetLocationParamsSchema>;\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport { ActionCommonParamsSchema, AxiosProxyParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { DouyinGetLocationParamsSchema } from \"./schema\";\n\nconst { getABogus } = require(\"../../utils/douyin/douyinSafe/a_bogus.js\");\nconst { generateCsrfTokenAdvanced } = require(\"../../utils/douyin/douyinSafe/csrfToken.js\");\n\nexport type DouyinGetLocationParams = z.infer<typeof DouyinGetLocationParamsSchema>;\nexport { DouyinGetLocationParamsSchema } from \"./schema\";\n\nexport interface Location {\n    poi_id: string;\n    poi_name: string;\n    poi_address: string;\n    longitude: number;\n    latitude: number;\n    distance: number;\n    city_name: string;\n    district_name: string;\n}\n\nexport interface DouyinLocationResponse {\n    status_code: number;\n    status_msg: string;\n    poi_list?: Location[];\n    total?: number;\n    data?: {\n        poi_list?: Location[];\n        total?: number;\n    };\n}\n\nexport type DouyinGetLocationAction = CommonAction<\n    DouyinGetLocationParams,\n    {\n        locations: Location[];\n        total: number;\n    }\n>;\n\nexport const douyinGetLocation: DouyinGetLocationAction = async (_task, params) => {\n    const userAgent =\n        params.userAgent ||\n        \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.38\";\n\n    const headers: any = {\n        cookie: params.cookies.map((it: { name: string; value: string }) => `${it.name}=${it.value}`).join(\";\"),\n        origin: \"https://creator.douyin.com\",\n        referer: \"https://creator.douyin.com/\",\n        Accept: \"application/json, text/plain, */*\",\n        \"Accept-Encoding\": \"gzip, deflate, br, zstd\",\n        \"Content-Type\": \"application/json\",\n        pragma: \"no-cache\",\n        \"cache-control\": \"no-cache\",\n        \"sec-ch-ua-platform\": params.extraParam?.browserInfo?.[\"sec-ch-ua-platform\"] || \"\",\n        \"sec-ch-ua\": params.extraParam?.browserInfo?.[\"sec-ch-ua\"] || \"\",\n        \"sec-ch-ua-mobile\": \"?0\",\n        \"user-agent\": userAgent,\n        \"sec-fetch-site\": \"same-origin\",\n        \"sec-fetch-mode\": \"cors\",\n        \"sec-fetch-dest\": \"empty\",\n        \"accept-language\": \"zh-CN,zh;q=0.9\",\n        priority: \"u=1, i\",\n    };\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    const csrfToken = generateCsrfTokenAdvanced({\n        cookies: params.cookies,\n        url: \"https://creator.douyin.com/aweme/v1/life/video_api/search/poi/\",\n        method: \"GET\",\n        userAgent,\n    });\n\n    const keyword = params.keyword || \"\";\n    const locationParams = {\n        count: \"1\",\n        from_webapp: \"1\",\n        get_current_loc: \"1\",\n        is_image_album_style: \"1\",\n        search_type: \"0\",\n        poi_anchor_tab: \"2\",\n        page: \"1\",\n        keyword: keyword,\n        poi_mode: \"{}\",\n        load_interest_city_type: \"0\",\n        read_aid: \"2906\",\n        aid: \"1128\",\n        cookie_enabled: \"true\",\n        screen_width: params.extraParam?.browserInfo?.screen_width || \"1920\",\n        screen_height: params.extraParam?.browserInfo?.screen_height || \"1080\",\n        browser_language: params.extraParam?.browserInfo?.browser_language || \"zh-CN\",\n        browser_platform: params.extraParam?.browserInfo?.browser_platform || \"Win32\",\n        browser_name: params.extraParam?.browserInfo?.browser_name || \"Mozilla\",\n        browser_version: userAgent,\n        browser_online: \"true\",\n        timezone_name: \"Asia/Shanghai\",\n        support_h265: \"1\",\n        msToken: params.cookies.find((e) => e.name === \"msToken\")?.value || \"\",\n        a_bogus: \"\",\n    };\n    const queryParamsBefore = new URLSearchParams(locationParams).toString();\n    const aBogus = getABogus(\n        `https://creator.douyin.com/aweme/v1/life/video_api/search/poi/?${queryParamsBefore}`,\n        {},\n        userAgent,\n    );\n    locationParams.a_bogus = aBogus;\n    const queryString = new URLSearchParams(locationParams).toString();\n    // console.log(\"抖音获取位置参数:\", queryString);\n    const res = await http.api<DouyinLocationResponse>(\n        {\n            method: \"get\",\n            url: `https://creator.douyin.com/aweme/v1/life/video_api/search/poi/?${queryString}`,\n            headers: {\n                ...headers,\n                \"X-secsdk-csrf-token\": csrfToken,\n            },\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n    console.log(\"抖音获取位置响应:\", res);\n\n    const isSuccess = res.status_code === 0;\n    const message = `抖音获取位置${isSuccess ? \"成功\" : `失败，原因：${res.status_msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n\n    let locations: Location[] = [];\n    if (isSuccess && res?.poi_list) {\n        if (Array.isArray(res.poi_list) && res.poi_list.length > 0) {\n            if (Array.isArray(res.poi_list[0])) {\n                locations = res.poi_list[0];\n            } else {\n                locations = res.poi_list;\n            }\n        }\n    }\n\n    const data: { locations: Location[]; total: number } = { locations, total: locations.length };\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { z } from \"zod\";\nimport { ActionCommonParamsSchema } from \"../../types\";\n\nexport const DouyinGetMusicParamsSchema = ActionCommonParamsSchema.extend({\n    keyword: z.string().optional(),\n    count: z.number().optional(),\n});\n\nexport type DouyinGetMusicParams = z.infer<typeof DouyinGetMusicParamsSchema>;\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport { decompress } from \"fzstd\";\nimport { z } from \"zod\";\nimport { AxiosProxyParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { DouyinGetMusicParamsSchema } from \"./schema\";\n\nconst { getABogus } = require(\"../../utils/douyin/douyinSafe/a_bogus.js\");\nconst { generateCsrfTokenAdvanced } = require(\"../../utils/douyin/douyinSafe/csrfToken.js\");\n\nexport type DouyinGetMusicParams = z.infer<typeof DouyinGetMusicParamsSchema>;\nexport { DouyinGetMusicParamsSchema } from \"./schema\";\n\nexport interface Music {\n    id: string;\n    title: string;\n    author: string;\n    duration: number;\n    url: string;\n    cover_url: string;\n}\n\nexport interface DouyinMusicResponse {\n    status_code: number;\n    status_msg: string;\n    music?: Music[];\n    total?: number;\n    data?: {\n        music_list?: Music[];\n        total?: number;\n    };\n}\nexport interface DouyinMusicAuthResponse {\n    status_code: number;\n    status_msg: string;\n    signature: string;\n}\nexport type DouyinGetMusicAction = CommonAction<\n    DouyinGetMusicParams,\n    {\n        music: Music[];\n        total: number;\n    }\n>;\n\nexport const douyinGetMusic: DouyinGetMusicAction = async (_task, params) => {\n    const userAgent =\n        params.userAgent ||\n        \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.38\";\n\n    const headers: any = {\n        cookie: params.cookies.map((it: any) => `${it.name}=${it.value}`).join(\";\"),\n        origin: \"https://creator.douyin.com\",\n        referer: \"https://creator.douyin.com/\",\n        Accept: \"application/json, text/plain, */*\",\n        \"Accept-Encoding\": \"gzip, deflate, br, zstd\",\n        \"Content-Type\": \"application/json\",\n        pragma: \"no-cache\",\n        \"cache-control\": \"no-cache\",\n        \"sec-ch-ua-platform\": params.extraParam?.browserInfo?.[\"sec-ch-ua-platform\"] || \"\",\n        \"sec-ch-ua\": params.extraParam?.browserInfo?.[\"sec-ch-ua\"] || \"\",\n        \"sec-ch-ua-mobile\": \"?0\",\n        \"user-agent\": userAgent,\n        \"sec-fetch-site\": \"same-origin\",\n        \"sec-fetch-mode\": \"cors\",\n        \"sec-fetch-dest\": \"empty\",\n        \"accept-language\": \"zh-CN,zh;q=0.9\",\n        priority: \"u=1, i\",\n    };\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    const csrfToken = generateCsrfTokenAdvanced({\n        cookies: params.cookies,\n        url: \"https://creator.douyin.com/web/api/media/aweme/search/post/auth/\",\n        method: \"GET\",\n        userAgent,\n    });\n\n    const keyword = params.keyword || \"\";\n    const musicParams: any = {\n        keyword: keyword || \"11\",\n        search_source: \"normal_search\",\n        count: params.count?.toString() || \"20\",\n        read_aid: \"2906\",\n        aid: \"1128\",\n        cursor: \"0\",\n        cookie_enabled: \"true\",\n        screen_width: params.extraParam?.browserInfo?.screen_width || \"1920\",\n        screen_height: params.extraParam?.browserInfo?.screen_height || \"1080\",\n        browser_language: params.extraParam?.browserInfo?.browser_language || \"zh-CN\",\n        browser_platform: params.extraParam?.browserInfo?.browser_platform || \"Win32\",\n        browser_name: params.extraParam?.browserInfo?.browser_name || \"Mozilla\",\n        browser_version: userAgent,\n        browser_online: \"true\",\n        timezone_name: \"Asia/Shanghai\",\n        support_h265: \"1\",\n        msToken: params.cookies.find((e: any) => e.name === \"msToken\")?.value || \"\",\n        a_bogus: \"\",\n    };\n    const musicQueryBefore = new URLSearchParams(musicParams).toString();\n    const aBogus = getABogus(\n        `https://tsearch.amemv.com/openapi/aweme/v1/music/search/?${musicQueryBefore}`,\n        {},\n        userAgent,\n    );\n    musicParams.a_bogus = aBogus;\n    const queryString = new URLSearchParams(musicParams).toString();\n    console.log(\"抖音获取音乐参数:\", queryString);\n    //获取权限\n    const authorizationParams = {\n        read_aid: \"2906\",\n        aid: \"1128\",\n        cookie_enabled: \"true\",\n        screen_width: params.extraParam?.browserInfo?.screen_width || \"1920\",\n        screen_height: params.extraParam?.browserInfo?.screen_height || \"1080\",\n        browser_language: params.extraParam?.browserInfo?.browser_language || \"zh-CN\",\n        browser_platform: params.extraParam?.browserInfo?.browser_platform || \"Win32\",\n        browser_name: params.extraParam?.browserInfo?.browser_name || \"Mozilla\",\n        browser_version: userAgent,\n        browser_online: \"true\",\n        timezone_name: \"Asia/Shanghai\",\n        support_h265: \"1\",\n        a_bogus: \"\",\n    };\n    const authQueryBefore = new URLSearchParams(authorizationParams).toString();\n    authorizationParams.a_bogus = getABogus(\n        `https://creator.douyin.com/web/api/media/aweme/search/post/auth/?${authQueryBefore}`,\n        {},\n        userAgent,\n    );\n    const authorizationQueryString = new URLSearchParams(authorizationParams).toString();\n    const authorization = await http.api<DouyinMusicAuthResponse>(\n        {\n            method: \"get\",\n            url: `https://creator.douyin.com/web/api/media/aweme/search/post/auth/?${authorizationQueryString}`,\n            headers: {\n                ...headers,\n                \"X-secsdk-csrf-token\": csrfToken,\n            },\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n    if (authorization.status_code !== 0) {\n        return response(414, authorization.status_msg, { music: [], total: 0 });\n    }\n    console.log(\"抖音获取音乐权限:\", authorization);\n\n    const musicRes = await http.api<ArrayBuffer>(\n        {\n            method: \"get\",\n            url: `https://tsearch.amemv.com/openapi/aweme/v1/music/search/?${queryString}`,\n            headers: {\n                Accept: \"application/json, text/plain, */*\",\n                \"Accept-Language\": \"zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7\",\n                \"cache-control\": \"no-cache\",\n                pragma: \"no-cache\",\n                priority: \"u=1, i\",\n                origin: \"https://creator.douyin.com\",\n                referer: \"https://creator.douyin.com/\",\n                \"sec-ch-ua\": params.extraParam?.browserInfo?.[\"sec-ch-ua\"] || \"\",\n                \"sec-ch-ua-mobile\": \"?0\",\n                \"sec-ch-ua-platform\": params.extraParam?.browserInfo?.[\"sec-ch-ua-platform\"] || \"\",\n                \"sec-fetch-dest\": \"empty\",\n                \"sec-fetch-mode\": \"cors\",\n                \"sec-fetch-site\": \"cross-site\",\n                \"user-agent\": userAgent,\n                \"agw-auth\": authorization?.signature || \"\",\n                \"openapi-omit-shark\": \"1\",\n            },\n            responseType: \"arraybuffer\",\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n\n    // 解压 zstd\n    const decompressed = decompress(new Uint8Array(musicRes));\n    const res: DouyinMusicResponse = JSON.parse(Buffer.from(decompressed).toString(\"utf-8\"));\n    console.log(\"抖音获取音乐响应:\", JSON.stringify(res));\n\n    const isSuccess = res.status_code === 0;\n    const message = `抖音获取音乐${isSuccess ? \"成功\" : `失败，原因：${res.status_msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n    const data: { music: Music[]; total: number } = isSuccess\n        ? { music: res?.music || [], total: res?.music?.length || 0 }\n        : { music: [], total: 0 };\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { z } from \"zod\";\nimport { ActionCommonParamsSchema } from \"../../types\";\n\nexport const DouyinGetMusicByCategoryParamsSchema = ActionCommonParamsSchema.extend({\n    category_id: z.string(),\n    type: z.string(),\n    count: z.number().optional(),\n});\n\nexport type DouyinGetMusicByCategoryParams = z.infer<typeof DouyinGetMusicByCategoryParamsSchema>;\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport { ActionCommonParamsSchema, AxiosProxyParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { DouyinGetMusicByCategoryParamsSchema } from \"./schema\";\n\nconst { getABogus } = require(\"../../utils/douyin/douyinSafe/a_bogus.js\");\nconst { generateCsrfTokenAdvanced } = require(\"../../utils/douyin/douyinSafe/csrfToken.js\");\nexport type DouyinGetMusicByCategoryParams = z.infer<typeof DouyinGetMusicByCategoryParamsSchema>;\nexport { DouyinGetMusicByCategoryParamsSchema } from \"./schema\";\n\nexport interface Song {\n    cover_url: string;\n    duration: number;\n    music_author: string;\n    music_id: string;\n    music_name: string;\n    play_url: string;\n    user_count: number;\n}\n\nexport interface DouyinCollectionResponse {\n    status_code: number;\n    status_msg: string;\n    songs?: Song[];\n    data?: {\n        songs?: Song[];\n    };\n}\n\nexport type DouyinGetMusicByCategoryAction = CommonAction<\n    DouyinGetMusicByCategoryParams,\n    {\n        songs: Song[];\n    }\n>;\n\nexport const douyinGetMusicByCategory: DouyinGetMusicByCategoryAction = async (_task, params) => {\n    const userAgent =\n        params.userAgent ||\n        \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.38\";\n\n    const headers: any = {\n        cookie: params.cookies.map((it: any) => `${it.name}=${it.value}`).join(\";\"),\n        origin: \"https://creator.douyin.com\",\n        referer: \"https://creator.douyin.com/\",\n        Accept: \"application/json, text/plain, */*\",\n        \"Accept-Encoding\": \"gzip, deflate, br, zstd\",\n        \"Content-Type\": \"application/json\",\n        pragma: \"no-cache\",\n        \"cache-control\": \"no-cache\",\n        \"sec-ch-ua-platform\": params.extraParam?.browserInfo?.[\"sec-ch-ua-platform\"] || \"\",\n        \"sec-ch-ua\": params.extraParam?.browserInfo?.[\"sec-ch-ua\"] || \"\",\n        \"sec-ch-ua-mobile\": \"?0\",\n        \"user-agent\": userAgent,\n        \"sec-fetch-site\": \"same-origin\",\n        \"sec-fetch-mode\": \"cors\",\n        \"sec-fetch-dest\": \"empty\",\n        \"accept-language\": \"zh-CN,zh;q=0.9\",\n        priority: \"u=1, i\",\n    };\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    const csrfToken = generateCsrfTokenAdvanced({\n        cookies: params.cookies,\n        url: \"https://creator.douyin.com/web/api/media/music/list/\",\n        method: \"GET\",\n        userAgent,\n    });\n\n    const collectionParams = {\n        status: \"0,2\",\n        count: params.count?.toString() || \"20\",\n        cursor: \"0\",\n        source: \"collection_create\",\n        read_aid: \"2906\",\n        aid: \"1128\",\n        cookie_enabled: \"true\",\n        screen_width: params.extraParam?.browserInfo?.screen_width || \"1920\",\n        screen_height: params.extraParam?.browserInfo?.screen_height || \"1080\",\n        browser_language: params.extraParam?.browserInfo?.browser_language || \"zh-CN\",\n        browser_platform: params.extraParam?.browserInfo?.browser_platform || \"Win32\",\n        browser_name: params.extraParam?.browserInfo?.browser_name || \"Mozilla\",\n        browser_version: userAgent,\n        browser_online: \"true\",\n        timezone_name: \"Asia/Shanghai\",\n        support_h265: \"1\",\n        type: params.type || \"\",\n        category_id: params.category_id || \"\",\n        msToken: params.cookies.find((e: any) => e.name === \"msToken\")?.value || \"\",\n        a_bogus: \"\",\n    };\n    const queryParamsBefore = new URLSearchParams(collectionParams).toString();\n    const aBogus = getABogus(\n        `https://creator.douyin.com/web/api/media/music/list/?${queryParamsBefore}`,\n        {},\n        userAgent,\n    );\n    collectionParams.a_bogus = aBogus;\n    const queryString = new URLSearchParams(collectionParams).toString();\n    const res = await http.api<DouyinCollectionResponse>(\n        {\n            method: \"get\",\n            url: `https://creator.douyin.com/web/api/media/music/list/?${queryString}`,\n            headers: {\n                ...headers,\n                \"X-secsdk-csrf-token\": csrfToken,\n            },\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n    const isSuccess = res.status_code === 0;\n    const message = `抖音获取推荐音乐${isSuccess ? \"成功\" : `失败，原因：${res.status_msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n    const data: { songs: Song[] } = isSuccess ? { songs: res?.songs || [] } : { songs: [] };\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport { ActionCommonParamsSchema, AxiosProxyParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\n\nconst { getABogus } = require(\"../../utils/douyin/douyinSafe/a_bogus.js\");\nconst { generateCsrfTokenAdvanced } = require(\"../../utils/douyin/douyinSafe/csrfToken.js\");\n\n// 定义参数 Schema（仅包含基础参数，无扩展参数）\nexport const DouyinGetMusicCategoryParamsSchema = ActionCommonParamsSchema.extend({});\n\n// 导出参数类型\nexport type DouyinGetMusicCategoryParams = z.infer<typeof DouyinGetMusicCategoryParamsSchema>;\n\nexport interface Category {\n    category_id: string;\n    category_name: string;\n    type: string;\n}\n\nexport interface DouyinMusicCategoryResponse {\n    status_code: number;\n    status_msg: string;\n    categories?: Category[];\n}\n\nexport type DouyinGetMusicCategoryAction = CommonAction<\n    DouyinGetMusicCategoryParams,\n    {\n        categorys: Category[];\n    }\n>;\n\nexport const douyinGetMusicCategory: DouyinGetMusicCategoryAction = async (_task, params) => {\n    const userAgent =\n        params.userAgent ||\n        \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.38\";\n\n    const headers: any = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        origin: \"https://creator.douyin.com\",\n        referer: \"https://creator.douyin.com/\",\n        Accept: \"application/json, text/plain, */*\",\n        \"Accept-Encoding\": \"gzip, deflate, br, zstd\",\n        \"Content-Type\": \"application/json\",\n        pragma: \"no-cache\",\n        \"cache-control\": \"no-cache\",\n        \"sec-ch-ua-platform\": params.extraParam?.browserInfo?.[\"sec-ch-ua-platform\"] || \"\",\n        \"sec-ch-ua\": params.extraParam?.browserInfo?.[\"sec-ch-ua\"] || \"\",\n        \"bd-ticket-guard-web-version\": \"2\",\n        \"sec-ch-ua-mobile\": \"?0\",\n        \"user-agent\": userAgent,\n        \"sec-fetch-site\": \"same-origin\",\n        \"sec-fetch-mode\": \"cors\",\n        \"sec-fetch-dest\": \"empty\",\n        \"accept-language\": \"zh-CN,zh;q=0.9\",\n        priority: \"u=1, i\",\n    };\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    const csrfToken = generateCsrfTokenAdvanced({\n        cookies: params.cookies,\n        url: \"https://creator.douyin.com/web/api/media/music/category\",\n        method: \"GET\",\n        userAgent,\n    });\n\n    const categoryParams = {\n        status: \"0,2\",\n        count: \"50\",\n        cursor: \"0\",\n        source: \"collection_create\",\n        read_aid: \"2906\",\n        aid: \"1128\",\n        cookie_enabled: \"true\",\n        screen_width: params.extraParam?.browserInfo?.screen_width || \"1920\",\n        screen_height: params.extraParam?.browserInfo?.screen_height || \"1080\",\n        browser_language: params.extraParam?.browserInfo?.browser_language || \"zh-CN\",\n        browser_platform: params.extraParam?.browserInfo?.browser_platform || \"Win32\",\n        browser_name: params.extraParam?.browserInfo?.browser_name || \"Mozilla\",\n        browser_version: userAgent,\n        browser_online: \"true\",\n        timezone_name: \"Asia/Shanghai\",\n        support_h265: \"1\",\n        msToken: params.cookies.find((e: any) => e.name === \"msToken\")?.value || \"\",\n        a_bogus: \"\",\n    };\n    const queryParamsBefore = new URLSearchParams(categoryParams).toString();\n    const aBogus = getABogus(\n        `https://creator.douyin.com/web/api/media/music/category?${queryParamsBefore}`,\n        {},\n        userAgent,\n    );\n    categoryParams.a_bogus = aBogus;\n    const queryString = new URLSearchParams(categoryParams).toString();\n    const res = await http.api<DouyinMusicCategoryResponse>(\n        {\n            method: \"get\",\n            url: `https://creator.douyin.com/web/api/media/music/category?${queryString}`,\n            headers: {\n                ...headers,\n                \"X-secsdk-csrf-token\": csrfToken,\n            },\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n    const isSuccess = res.status_code === 0;\n    const message = `抖音获取音乐分类${isSuccess ? \"成功\" : `失败，原因：${res.status_msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n    const data: { categorys: Category[] } = isSuccess ? { categorys: res?.categories || [] } : { categorys: [] };\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { z } from \"zod\";\nimport { ActionCommonParamsSchema } from \"../../types\";\n\nexport const DouyinGetTopicsParamsSchema = ActionCommonParamsSchema.extend({\n    keyword: z.string().optional(),\n    count: z.number().optional(),\n});\n\nexport type DouyinGetTopicsParams = z.infer<typeof DouyinGetTopicsParamsSchema>;\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport { ActionCommonParamsSchema, AxiosProxyParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { DouyinGetTopicsParamsSchema } from \"./schema\";\n\nconst { getABogus } = require(\"../../utils/douyin/douyinSafe/a_bogus.js\");\nconst { generateCsrfTokenAdvanced } = require(\"../../utils/douyin/douyinSafe/csrfToken.js\");\n\nexport type DouyinGetTopicsParams = z.infer<typeof DouyinGetTopicsParamsSchema>;\nexport { DouyinGetTopicsParamsSchema } from \"./schema\";\n\nexport interface Topic {\n    group_id: string;\n    cid: string;\n    cha_name: string;\n    tag: number;\n    view_count: number;\n}\n\nexport interface DouyinTopicsResponse {\n    status_code: number;\n    status_msg: string;\n    sug_list?: Topic[];\n    total?: number;\n    data?: {\n        sug_list?: Topic[];\n        total?: number;\n    };\n}\n\nexport type DouyinGetTopicsAction = CommonAction<\n    DouyinGetTopicsParams,\n    {\n        topics: Topic[];\n        total: number;\n    }\n>;\n\nexport const douyinGetTopics: DouyinGetTopicsAction = async (_task, params) => {\n    const userAgent =\n        params.userAgent ||\n        \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.38\";\n\n    const headers: any = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        origin: \"https://creator.douyin.com\",\n        referer: \"https://creator.douyin.com/\",\n        Accept: \"application/json, text/plain, */*\",\n        \"Accept-Encoding\": \"gzip, deflate, br, zstd\",\n        \"Content-Type\": \"application/json\",\n        pragma: \"no-cache\",\n        \"cache-control\": \"no-cache\",\n        \"sec-ch-ua-platform\": params.extraParam?.browserInfo?.[\"sec-ch-ua-platform\"] || \"\",\n        \"sec-ch-ua\": params.extraParam?.browserInfo?.[\"sec-ch-ua\"] || \"\",\n        \"sec-ch-ua-mobile\": \"?0\",\n        \"user-agent\": userAgent,\n        \"sec-fetch-site\": \"same-origin\",\n        \"sec-fetch-mode\": \"cors\",\n        \"sec-fetch-dest\": \"empty\",\n        \"accept-language\": \"zh-CN,zh;q=0.9\",\n        priority: \"u=1, i\",\n    };\n\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    const csrfToken = generateCsrfTokenAdvanced({\n        cookies: params.cookies,\n        url: \"https://creator.douyin.com/aweme/v1/search/challengesug/\",\n        method: \"GET\",\n        userAgent,\n    });\n\n    const keyword = params.keyword || \"热点\";\n    const topicParams = {\n        keyword: keyword,\n        source: \"challenge_create\",\n        read_aid: \"2906\",\n        aid: \"1128\",\n        cookie_enabled: \"true\",\n        screen_width: params.extraParam?.browserInfo?.screen_width || \"1920\",\n        screen_height: params.extraParam?.browserInfo?.screen_height || \"1080\",\n        browser_language: params.extraParam?.browserInfo?.browser_language || \"zh-CN\",\n        browser_platform: params.extraParam?.browserInfo?.browser_platform || \"Win32\",\n        browser_name: params.extraParam?.browserInfo?.browser_name || \"Mozilla\",\n        browser_version: userAgent,\n        browser_online: \"true\",\n        timezone_name: \"Asia/Shanghai\",\n        support_h265: \"1\",\n        msToken: params.cookies.find((e) => e.name === \"msToken\")?.value || \"\",\n        a_bogus: \"\",\n    };\n    const queryParamsBefore = new URLSearchParams(topicParams).toString();\n    const aBogus = getABogus(\n        `https://creator.douyin.com/aweme/v1/search/challengesug/?${queryParamsBefore}`,\n        {},\n        userAgent,\n    );\n    topicParams.a_bogus = aBogus;\n    //生成query string\n    const queryString = new URLSearchParams(topicParams).toString();\n    console.log(\"抖音获取话题参数:\", queryString);\n    const res = await http.api<DouyinTopicsResponse>(\n        {\n            method: \"get\",\n            url: `https://creator.douyin.com/aweme/v1/search/challengesug/?${queryString}`,\n            headers: {\n                ...headers,\n                \"X-secsdk-csrf-token\": csrfToken,\n            },\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n    console.log(\"抖音获取话题响应:\", res);\n\n    const isSuccess = res.status_code === 0;\n    const message = `抖音获取话题${isSuccess ? \"成功\" : `失败，原因：${res.status_msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n    const data: { topics: Topic[]; total: number } = isSuccess\n        ? { topics: res?.sug_list || [], total: res?.sug_list?.length || 0 }\n        : { topics: [], total: 0 };\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport { ActionCommonParamsSchema } from \"../../types\";\nimport type { ParsedVerifyDecision } from \"../../utils/douyin/verify-parser\";\nimport { USER_MESSAGE } from \"../../utils/errorMessages\";\nimport { Http } from \"../../utils/http\";\n\nconst { generateCsrfTokenAdvanced } = require(\"../../utils/douyin/douyinSafe/csrfToken.js\");\nconst { getABogus } = require(\"../../utils/douyin/douyinSafe/a_bogus.js\");\nconst { generateDtrait } = require(\"../../utils/douyin/douyinSafe/dtrait.js\");\n\nexport const DouyinGetVerifyQrCodeParamsSchema = ActionCommonParamsSchema.extend({\n    decision: z.record(z.string(), z.unknown()),\n    extraParam: z\n        .object({\n            browserInfo: z.object({\n                screen_width: z.string().optional(),\n                screen_height: z.string().optional(),\n                browser_language: z.string().optional(),\n                browser_platform: z.string().optional(),\n                browser_name: z.string().optional(),\n                \"sec-ch-ua-platform\": z.string().optional(),\n                \"sec-ch-ua\": z.string().optional(),\n                userAgent: z.string().optional(),\n            }),\n        })\n        .optional(),\n});\n\nexport type DouyinGetVerifyQrCodeParams = Omit<z.infer<typeof DouyinGetVerifyQrCodeParamsSchema>, \"decision\"> & {\n    decision: ParsedVerifyDecision;\n};\n\nexport interface QrCodeResult {\n    qrcode: string; // base64 编码的二维码图片\n    token: string; // 二维码 token，用于后续轮询扫码状态\n    expire_time: number; // 过期时间戳（秒）\n    qrcode_index_url: string; // 二维码跳转地址\n    app_name: string; // 应用名称\n    web_name: string; // 网页名称\n    captcha: string; // 人机验证\n    error_code: number; // 错误码\n    is_frontier: boolean; // 是否为前台验证\n}\n\nexport type DouyinGetVerifyQrCodeAction = CommonAction<DouyinGetVerifyQrCodeParams, QrCodeResult>;\n\nexport const douyinGetVerifyQrCode: DouyinGetVerifyQrCodeAction = async (task, params) => {\n    const userAgent =\n        params.userAgent ||\n        \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.38\";\n\n    // 直接使用传入的 decision 对象\n    const decision = params.decision;\n    if (!decision) {\n        return response(414, \"无效的 decision，解析失败\", \"\" as any);\n    }\n\n    if (!decision.verify_ways?.includes(\"qr_code_verify\")) {\n        return response(\n            414,\n            `当前验证方式不支持二维码，支持的方式: ${decision.verify_ways?.join(\", \") || \"无\"}`,\n            \"\" as any,\n        );\n    }\n\n    try {\n        task.logger.info(\"开始获取抖音扫码验证二维码...\");\n\n        // biz_trace_id 优先从 cookie 中获取，取不到则降级用 log_id 末8位\n        const bizTraceIdFromCookie = params.cookies.find((e: any) => e.name === \"biz_trace_id\")?.value || \"\";\n        const logId = decision.event_params?.log_id || \"\";\n        const bizTraceId = bizTraceIdFromCookie || logId.slice(-8).toLowerCase() || \"00000000\";\n\n        const msToken = params.cookies.find((e: any) => e.name === \"msToken\")?.value || \"\";\n        const passportCsrfToken = params.cookies.find((e: any) => e.name === \"passport_csrf_token\")?.value || \"\";\n\n        const headers = {\n            cookie: params.cookies.map((it: any) => `${it.name}=${it.value}`).join(\";\"),\n            origin: \"https://creator.douyin.com\",\n            referer:\n                \"https://creator.douyin.com/creator-micro/content/post/image?default-tab=3&enter_from=publish_page&media_type=image&type=new\",\n            Accept: \"application/json, text/plain, */*\",\n            \"Accept-Encoding\": \"gzip, deflate, br, zstd\",\n            \"sec-ch-ua-platform\": params.extraParam?.browserInfo?.[\"sec-ch-ua-platform\"] || \"\",\n            \"sec-ch-ua\": params.extraParam?.browserInfo?.[\"sec-ch-ua\"] || \"\",\n            \"sec-ch-ua-mobile\": \"?0\",\n            \"user-agent\": userAgent,\n            \"sec-fetch-site\": \"same-origin\",\n            \"sec-fetch-mode\": \"cors\",\n            \"sec-fetch-dest\": \"empty\",\n            \"accept-language\": \"zh-CN,zh;q=0.9\",\n            priority: \"u=1, i\",\n        };\n\n        // 构建 POST body\n        const qrCodeBody: Record<string, string> = {\n            encrypt_uid: decision.encrypt_uid || \"\",\n            verify_ticket: \"\",\n            copywriting_key: decision.common_params?.copywriting_key || \"creator\",\n            new_verify_flow: decision.common_params?.new_verify_flow || \"\",\n            aid: \"2906\",\n            verify_type: \"\",\n            next: \"https://www.douyin.com/\",\n            need_record: \"1\",\n            scene: \"secondary_verify\",\n            verify_scene: decision.event_params?.verify_scene || \"creator\",\n            verify_reason: decision.event_params?.verify_reason || \"gateway_web_authlv_check\",\n            std_verify_way: \"qr_code_verify\",\n            source: \"app\",\n            new_authn_sdk_version: \"1.0.0.404-web\",\n        };\n        const qrCodeBodyStr = new URLSearchParams(qrCodeBody).toString();\n\n        // 构建 URL 查询参数（先不含 a_bogus）\n        const qrCodeQueryParams: Record<string, string> = {\n            passport_jssdk_version: \"5.1.2\",\n            passport_jssdk_type: \"lite\",\n            is_from_ttaccountsdk: \"1\",\n            aid: \"2906\",\n            language: \"zh\",\n            account_app_language: \"zh-CN\",\n            new_authn_sdk_version: \"1.0.0.404-web\",\n            is_vcd: \"1\",\n            biz_trace_id: bizTraceId,\n            msToken,\n            a_bogus: \"\",\n        };\n\n        // 生成 a_bogus\n        const qrCodeQueryStr = new URLSearchParams(qrCodeQueryParams).toString();\n        const qrCodeUrl = `https://creator.douyin.com/passport/web/get_qrcode/?${qrCodeQueryStr}`;\n        const aBogusQr = getABogus(qrCodeUrl, qrCodeBodyStr, userAgent);\n        qrCodeQueryParams.a_bogus = aBogusQr;\n        const finalQueryStr = new URLSearchParams(qrCodeQueryParams).toString();\n\n        // 生成 CSRF Token 与 sessionDtrait\n        const csrfTokenQr = generateCsrfTokenAdvanced({\n            cookies: params.cookies,\n            url: \"https://creator.douyin.com/passport/web/get_qrcode/\",\n            method: \"POST\",\n            userAgent,\n        });\n        const sessionDtraitQr = generateDtrait(\"/passport/web/get_qrcode/\");\n\n        const qrHttp = new Http({\n            headers: {\n                ...headers,\n                \"Content-Type\": \"application/x-www-form-urlencoded\",\n                \"x-secsdk-csrf-token\": csrfTokenQr,\n                \"x-tt-passport-csrf-token\": passportCsrfToken,\n                \"x-tt-passport-trace-id\": bizTraceId,\n                \"x-tt-passport-verify-portrait\": \"\",\n                \"x-tt-session-dtrait\": sessionDtraitQr || \"\",\n            },\n        });\n\n        // 拦截原始响应，记录真实返回内容\n        qrHttp.addResponseInterceptor((res) => {\n            task.logger.info(`[douyinGetVerifyQrCode] 原始响应 status=${res.status} data=${JSON.stringify(res.data)}`);\n            console.log(\"[douyinGetVerifyQrCode] 原始响应:\", JSON.stringify(res.data));\n            return undefined;\n        });\n\n        const qrCodeResponse = await qrHttp.api<{\n            data: {\n                qrcode: string;\n                token: string;\n                expire_time: number;\n                error_code: number;\n                qrcode_index_url: string;\n                app_name: string;\n                web_name: string;\n                captcha: string;\n                is_frontier: boolean;\n                [key: string]: any;\n            };\n            message: string;\n        }>(\n            {\n                method: \"post\",\n                url: `https://creator.douyin.com/passport/web/get_qrcode/?${finalQueryStr}`,\n                data: qrCodeBodyStr,\n            },\n            { timeout: 10 * 1000 },\n        );\n\n        const qrData = qrCodeResponse?.data;\n        task.logger.info(`获取二维码响应: error_code=${qrData?.error_code}, message=${qrCodeResponse?.message}`);\n\n        if (qrData?.error_code !== 0) {\n            // error_code 已由上面的 info 日志记录，用户侧不暴露原始错误码\n            return response(414, USER_MESSAGE.QRCODE_FETCH_FAILED, \"\" as any);\n        }\n\n        return response(0, \"获取二维码成功\", {\n            qrcode: qrData.qrcode,\n            token: qrData.token,\n            expire_time: qrData.expire_time,\n            qrcode_index_url: qrData.qrcode_index_url,\n            app_name: qrData.app_name,\n            web_name: qrData.web_name,\n            captcha: qrData.captcha,\n            error_code: qrData.error_code,\n            is_frontier: qrData.is_frontier,\n        });\n    } catch (err) {\n        const msg = err instanceof Error ? err.message : String(err);\n        task.logger.warn(`[douyinGetVerifyQrCode] 获取二维码失败: ${msg}`);\n        return response(500, USER_MESSAGE.QRCODE_FETCH_FAILED, \"\" as any);\n    }\n};\n","import { z } from \"zod\";\nimport { ActionCommonParamsSchema } from \"../../types\";\n\nexport const DouyinGetWorkListParamsSchema = ActionCommonParamsSchema.extend({\n    cursor: z.number().optional(),\n    count: z.number().optional(),\n});\n\nexport type DouyinGetWorkListParams = z.infer<typeof DouyinGetWorkListParamsSchema>;\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport { ActionCommonParamsSchema, AxiosProxyParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { DouyinGetWorkListParamsSchema } from \"./schema\";\n\nconst { getABogus } = require(\"../../utils/douyin/douyinSafe/a_bogus.js\");\nconst { generateCsrfTokenAdvanced } = require(\"../../utils/douyin/douyinSafe/csrfToken.js\");\n\nexport type DouyinGetWorkListParams = z.infer<typeof DouyinGetWorkListParamsSchema>;\nexport { DouyinGetWorkListParamsSchema } from \"./schema\";\n\nexport interface WorkItem {\n    aweme_id: string;\n    desc: string;\n    create_time: number;\n    statistics: {\n        digg_count: number;\n        comment_count: number;\n        share_count: number;\n        play_count: number;\n    };\n    video?: {\n        cover: {\n            url_list: string[];\n        };\n        play_addr: {\n            url_list: string[];\n        };\n        duration: number;\n    };\n}\n\nexport interface DouyinWorkListResponse {\n    status_code: number;\n    status_msg: string;\n    aweme_list?: WorkItem[];\n    has_more?: boolean;\n    cursor?: number;\n}\n\nexport type DouyinGetWorkListAction = CommonAction<\n    DouyinGetWorkListParams,\n    {\n        works: WorkItem[];\n        has_more: boolean;\n        cursor: number;\n        total: number;\n    }\n>;\n\nexport const douyinGetWorkList: DouyinGetWorkListAction = async (_task, params) => {\n    const userAgent =\n        params.userAgent ||\n        \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.38\";\n\n    const headers: any = {\n        cookie: params.cookies.map((it: any) => `${it.name}=${it.value}`).join(\";\"),\n        origin: \"https://creator.douyin.com\",\n        referer: \"https://creator.douyin.com/\",\n        Accept: \"application/json, text/plain, */*\",\n        \"Accept-Encoding\": \"gzip, deflate, br, zstd\",\n        \"Content-Type\": \"application/json\",\n        pragma: \"no-cache\",\n        \"cache-control\": \"no-cache\",\n        \"sec-ch-ua-platform\": params.extraParam?.browserInfo?.[\"sec-ch-ua-platform\"] || \"\",\n        \"sec-ch-ua\": params.extraParam?.browserInfo?.[\"sec-ch-ua\"] || \"\",\n        \"sec-ch-ua-mobile\": \"?0\",\n        \"user-agent\": userAgent,\n        \"sec-fetch-site\": \"same-origin\",\n        \"sec-fetch-mode\": \"cors\",\n        \"sec-fetch-dest\": \"empty\",\n        \"accept-language\": \"zh-CN,zh;q=0.9\",\n        priority: \"u=1, i\",\n    };\n\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    // Generate CSRF token\n    const csrfToken = generateCsrfTokenAdvanced({\n        cookies: params.cookies,\n        url: \"https://creator.douyin.com/aweme/v1/creator/item/list/\",\n        method: \"GET\",\n        userAgent,\n    });\n\n    const workListParams: any = {\n        count: params.count?.toString() || \"10\",\n        cursor: params.cursor?.toString() || \"\",\n        read_aid: \"2906\",\n        aid: \"1128\",\n        cookie_enabled: \"true\",\n        screen_width: params.extraParam?.browserInfo?.screen_width || \"1920\",\n        screen_height: params.extraParam?.browserInfo?.screen_height || \"1080\",\n        browser_language: params.extraParam?.browserInfo?.browser_language || \"zh-CN\",\n        browser_platform: params.extraParam?.browserInfo?.browser_platform || \"Win32\",\n        browser_name: params.extraParam?.browserInfo?.browser_name || \"Mozilla\",\n        browser_version: userAgent,\n        browser_online: \"true\",\n        timezone_name: \"Asia/Shanghai\",\n        msToken: params.cookies.find((e) => e.name === \"msToken\")?.value || \"\",\n        a_bogus: \"\",\n    };\n\n    const queryParamsBefore = new URLSearchParams(workListParams).toString();\n    const aBogus = getABogus(\n        `https://creator.douyin.com/aweme/v1/creator/item/list/?${queryParamsBefore}`,\n        {},\n        userAgent,\n    );\n    workListParams.a_bogus = aBogus;\n    const queryString = new URLSearchParams(workListParams).toString();\n    console.log(\"抖音获取作品列表参数:\", queryString);\n\n    const res = await http.api<DouyinWorkListResponse>(\n        {\n            method: \"get\",\n            url: `https://creator.douyin.com/aweme/v1/creator/item/list/?${queryString}`,\n            headers: {\n                ...headers,\n                \"X-secsdk-csrf-token\": csrfToken,\n            },\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n    console.log(\"抖音获取作品列表响应:\", res);\n\n    const isSuccess = res.status_code === 0;\n    const message = `抖音获取作品列表${isSuccess ? \"成功\" : `失败，原因：${res.status_msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n    const data: { works: WorkItem[]; has_more: boolean; cursor: number; total: number } = isSuccess\n        ? {\n              works: res?.aweme_list || [],\n              has_more: res?.has_more || false,\n              cursor: res?.cursor || 0,\n              total: res?.aweme_list?.length || 0,\n          }\n        : { works: [], has_more: false, cursor: 0, total: 0 };\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { type Page, success, type UserInfo } from \"@iflyrpa/share\";\nimport type { Response } from \"playwright-core\";\nimport type { SteelAction } from \"./index\";\n\n/**\n * 抖音创作者平台登录 RPA\n *\n * 流程：\n * 1. 打开抖音创作者平台，注入反屏蔽脚本\n * 2. Bypass 页面事件屏蔽（通过 blank 页跳转清除脚本监听）\n * 3. 点击登录按钮，等待二维码弹窗\n * 4. 监听页面跳转到 /creator-micro/home 判断登录成功\n * 5. 从响应中提取 msToken 和用户信息\n * 6. 轮询获取 Security SDK localStorage 数据\n * 7. 获取浏览器指纹信息（screen、navigator等）\n * 8. 收集 cookie 并返回结果\n */\nexport const rpaAction: SteelAction = async (task, _params) => {\n    const reporter = task.reportService?.reportLoginStatus ?? (() => Promise.resolve());\n\n    let page: Page;\n    let isSelfClosing = false;\n    let handleBrowserDisconnected: (() => void) | undefined;\n    const cleanup = async () => {\n        if (handleBrowserDisconnected) {\n            task._steelBrowser?.off(\"disconnected\", handleBrowserDisconnected);\n        }\n        if (page && !page.isClosed()) {\n            await page.close().catch(() => {});\n        }\n    };\n\n    // ========== 第一步：启动浏览器并打开登录页 ==========\n    try {\n        page = await task.createPage({\n            url: \"https://creator.douyin.com/\",\n        });\n\n        if (!task._session?.id) throw new Error(\"Session ID 不存在\");\n\n        handleBrowserDisconnected = () => {\n            if (task.debug && isSelfClosing) {\n                task.logger.info(\"执行结束，关闭浏览器！\");\n            } else {\n                task.logger.info(\"浏览器被手动释放或意外关闭！\");\n            }\n        };\n        task._steelBrowser?.on(\"disconnected\", handleBrowserDisconnected);\n    } catch (e) {\n        task.logger.error(\"浏览器启动失败\", e);\n        return { code: 414, message: `浏览器启动失败: ${e}`, data: {} };\n    }\n\n    // 拦截不必要的资源，提升加载速度\n    await page.route(\"**/*.mp4\", (route) => route.abort());\n    await page.route(\"**/*.ttf\", (route) => route.abort());\n\n    // 自定义样式：隐藏扫码登录，调整输入框布局\n    const customStyle = `\n        #douyin_login_comp_flat_panel [class*=\"scan_qrcode_login\"] {\n            display: none !important;\n        }\n        [class*=\"douyin_login_landing_page\"] #douyin_login_comp_flat_panel [class*=\"flat_container\"] {\n            align-items: center !important;\n            justify-content: center !important;\n        }\n        [class*=\"douyin_login_landing_page\"] #douyin_login_comp_flat_panel [class*=\"flat_container\"] [class*=\"input_login\"] {\n            margin-left: 0 !important;\n        }\n        [class*=\"douyin_login_landing_page\"] #douyin_login_comp_flat_panel [class*=\"flat_container\"] [class*=\"input_login\"] [class*=\"tab_box\"] [class*=\"line\"] {\n            display: none !important;\n        }\n        [class*=\"douyin_login_landing_page\"] #douyin_login_comp_flat_panel [class*=\"flat_container\"] [class*=\"input_login\"] [class*=\"tab_box\"] span:nth-child(3) {\n            display: none !important;\n        }\n    `;\n    // 注入自定义样式：隐藏扫码登录，调整输入框布局\n    try {\n        await page.addStyleTag({ content: customStyle });\n    } catch (_e) {\n        task.logger.warn(\"样式注入失败\");\n    }\n    // 注入持久化脚本：禁用 requestAnimationFrame + 移除页面事件屏蔽\n    await page.addInitScript(() => {\n        // 抖音特定：移除事件屏蔽\n        if (window.location.hostname === \"creator.douyin.com\") {\n            window.requestAnimationFrame = () => 0;\n        }\n\n        /**\n         * 移除页面事件屏蔽层\n         * 抖音创作者平台会通过 pointer-events: none 阻止用户交互，\n         * 需要持续检测并恢复\n         */\n        const removeEventBlockers = () => {\n            try {\n                // 移除所有 pointer-events: none 的元素屏蔽\n                document.querySelectorAll('[style*=\"pointer-events: none\"]').forEach((el) => {\n                    (el as HTMLElement).style.pointerEvents = \"auto\";\n                });\n                document.body.style.pointerEvents = \"auto\";\n            } catch (_) {\n                // 静默失败\n            }\n        };\n\n        removeEventBlockers();\n\n        // 通过 MutationObserver 监听 DOM 变化，实时移除屏蔽\n        if (typeof MutationObserver !== \"undefined\") {\n            const observer = new MutationObserver(removeEventBlockers);\n            observer.observe(document.documentElement, {\n                childList: true,\n                subtree: true,\n                attributes: true,\n                attributeFilter: [\"style\"],\n            });\n        }\n\n        // 兜底：定时检测（MutationObserver 可能遗漏部分场景）\n        setInterval(removeEventBlockers, 3000);\n    });\n\n    // ========== 第二步：Bypass 页面事件屏蔽 ==========\n    task.logger.info(\"页面创建成功，开始 Bypass 页面事件屏蔽...\");\n    try {\n        // 等待关键 JS 加载完成（该脚本包含事件屏蔽逻辑）\n        await page.waitForResponse(\n            (response) => response.url().includes(\"/272.6591d0af.js\") && response.status() === 200,\n            { timeout: 15 * 1000 },\n        );\n        await page.waitForLoadState(\"networkidle\");\n        // 通过 blank 页跳转再返回，清除页面上已绑定的事件屏蔽监听器\n        await page.goto(\"about:blank\");\n        await page.goBack({ waitUntil: \"domcontentloaded\" });\n        task.logger.info(\"已返回登录页面，页面事件屏蔽 Bypass 完成\");\n    } catch (e) {\n        task.logger.warn(\"Bypass 超时，继续执行...\", { error: e });\n    }\n\n    // 等待页面稳定\n    await page.waitForTimeout(2000);\n\n    // ========== 通过 blank 页跳转再返回，再次注入自定义样式：隐藏扫码登录，调整输入框布局 ==========\n    try {\n        await page.addStyleTag({ content: customStyle });\n    } catch (_e) {\n        task.logger.warn(\"样式注入失败\");\n    }\n\n    // ========== 第三步：点击登录按钮 ==========\n    try {\n        const loginButtonSelector = \".douyin-creator-master-icon-default.douyin-creator-master-icon-user_circle\";\n\n        // 等待登录按钮可见\n        await page.waitForSelector(loginButtonSelector, { state: \"visible\", timeout: 10000 });\n\n        // 优先使用 JS 点击（绕过可能残留的事件屏蔽）\n        const clicked = await page.evaluate((selector) => {\n            const btn = document.querySelector(selector) as HTMLElement;\n            if (btn) {\n                btn.click();\n                return true;\n            }\n            return false;\n        }, loginButtonSelector);\n\n        if (clicked) {\n            task.logger.info(\"登录按钮点击成功（JS 方式）\");\n        } else {\n            // 回退到 Playwright force 点击\n            await page.locator(loginButtonSelector).click({ force: true, timeout: 5000 });\n            task.logger.info(\"登录按钮点击成功（Playwright force 方式）\");\n        }\n    } catch (e) {\n        task.logger.error(\"点击登录按钮失败\", e);\n        isSelfClosing = true;\n        await cleanup();\n        return { code: 500, message: \"无法点击登录按钮，页面可能已被屏蔽\", data: {} };\n    }\n\n    // 等待登录弹窗/二维码出现\n    // await page.waitForTimeout(3000);\n\n    // ========== 第四步：生成远程调试地址 ==========\n    const pageInfo = await task._client?.sessions.liveDetails(task._session.id);\n    const pageId = pageInfo?.pages[0].id ?? \"\";\n\n    const baseHost = task._session.websocketUrl?.replace(/^wss?:\\/\\//, \"\") ?? \"\";\n    const connectAddress = new URLSearchParams({ baseHost, pageId }).toString();\n\n    task.reportService?.settingSessionID?.(task._session?.id || \"\");\n\n    task.logger.info(`远程调试地址已生成，现在可以安全访问远程页面${connectAddress}`);\n    await reporter(0, \"浏览器启动成功，请使用抖音App扫码登录……\", { connectAddress });\n\n    // ========== 第五步：监听登录状态与用户信息 ==========\n    const userInfo: UserInfo = { uniqueId: \"\", avatar: \"\", name: \"\" };\n\n    try {\n        await new Promise<void>((resolve, reject) => {\n            let finished = false;\n\n            /** 清理所有监听器 */\n            const cleanup = (error?: Error) => {\n                if (finished) return;\n                finished = true;\n                page.off(\"framenavigated\", handlePageNavigation);\n                page.off(\"response\", handleResponse);\n                if (error) {\n                    reject(error);\n                } else {\n                    resolve();\n                }\n            };\n\n            /**\n             * 监听页面跳转到首页\n             * 所有登录方式（扫码/手机号等）最终都会跳转到 /creator-micro/home\n             */\n            const handlePageNavigation = async (frame: any) => {\n                try {\n                    if (frame === page.mainFrame() && frame.url().includes(\"/creator-micro/home\")) {\n                        task.logger.info(\"页面已跳转到首页，登录成功\");\n                        await reporter(0, \"登录成功，正在获取用户信息...\", { stage: \"scanQrcode\", connectAddress });\n                        cleanup();\n                    }\n                } catch (err) {\n                    task.logger.error(\"handlePageNavigation 异常:\", err);\n                }\n            };\n\n            /**\n             * 监听响应，提取 msToken 和用户信息\n             *\n             * - x-ms-token / x-tt-timestamp 响应头 → 构造 msToken cookie\n             * - /aweme/v1/creator/user/info → 用户昵称、头像\n             * - /aweme/v1/creator/pc/user/info/ → 用户 uniqueId\n             */\n            const handleResponse = async (resp: Response) => {\n                try {\n                    const url = resp.url();\n                    const headers = resp.headers();\n\n                    // 从响应头提取 msToken 并写入 cookie\n                    const xmst = headers[\"x-ms-token\"];\n                    const date = headers[\"x-tt-timestamp\"];\n\n                    if (xmst && date) {\n                        // msToken 有效期 7 天\n                        const mstExpirDate = new Date(Number(date) * 1000 + 7 * 24 * 60 * 60 * 1000);\n                        const msToken = {\n                            name: \"msToken\",\n                            value: xmst,\n                            domain: \".bytedance.com\",\n                            expires: mstExpirDate.getTime() / 1000,\n                            httpOnly: true,\n                            path: \"/\",\n                            sameSite: \"None\" as const,\n                            secure: true,\n                        };\n                        await page.context().addCookies([msToken]);\n                        task.debug &&\n                            task.logger.info(\"msToken 添加成功\", {\n                                token: xmst.substring(0, 20) + \"...\",\n                                timestamp: date,\n                            });\n                    }\n\n                    // 获取用户昵称和头像\n                    if (url.includes(\"aweme/v1/creator/user/info\")) {\n                        try {\n                            const jsonUserInfo: { user_profile: { avatar_url: string; nick_name: string } } =\n                                await resp.json();\n                            userInfo.name = jsonUserInfo.user_profile.nick_name ?? \"\";\n                            userInfo.avatar = jsonUserInfo.user_profile.avatar_url ?? \"\";\n                            task.debug && task.logger.info(\"用户信息获取成功\", userInfo);\n                        } catch (e) {\n                            task.logger.warn(\"无法解析用户信息:\", { url, error: e });\n                        }\n                    }\n                    // 获取用户 uniqueId\n                    else if (url.includes(\"/aweme/v1/creator/pc/user/info/\")) {\n                        try {\n                            const jsonUserInfo: { uid: string } = await resp.json();\n                            userInfo.uniqueId = jsonUserInfo.uid ?? \"\";\n                            task.debug && task.logger.info(\"用户 uniqueId 获取成功\", userInfo);\n                        } catch (e) {\n                            task.logger.warn(\"无法解析用户ID:\", { url, error: e });\n                        }\n                    }\n                } catch (err) {\n                    task.logger.error(\"handleResponse 异常:\", err);\n                }\n            };\n\n            // 注册监听器\n            page.on(\"framenavigated\", handlePageNavigation);\n            page.on(\"response\", handleResponse);\n        });\n    } catch (e) {\n        isSelfClosing = true;\n        const errorMessage = e instanceof Error ? e.message : String(e);\n        await cleanup();\n        return { code: 500, message: errorMessage, data: { stage: \"scanQrcode\", connectAddress } };\n    }\n\n    // ========== 第六步：提取 Security SDK localStorage 数据 ==========\n    let securityData: Record<string, string> = {};\n    const maxRetries = 15;\n\n    for (let retryCount = 0; retryCount < maxRetries; retryCount++) {\n        securityData = await page.evaluate(() => {\n            const data: Record<string, string> = {};\n            for (let i = 0; i < localStorage.length; i++) {\n                const key = localStorage.key(i);\n                if (key) {\n                    data[key] = localStorage.getItem(key) || \"\";\n                }\n            }\n            return data;\n        });\n\n        if (\n            securityData[\"security-sdk/s_sdk_pri_key\"] &&\n            securityData[\"security-sdk/s_sdk_pub_key\"] &&\n            securityData[\"security-sdk/s_sdk_sign_data_key/web_protect\"] &&\n            securityData[\"security-sdk/s_sdk_server_cert_key\"] &&\n            securityData[\"security-sdk/s_sdk_crypt_sdk\"]\n        ) {\n            task.logger.info(\"Security SDK 数据已获取\");\n            break;\n        }\n\n        task.logger.info(`等待 Security SDK 数据... (${retryCount + 1}/${maxRetries})`);\n        await page.waitForTimeout(1500);\n    }\n\n    // ========== 第七步：获取浏览器指纹信息 ==========\n    // 【新增】获取屏幕和导航器信息\n    const browserInfo = await page.evaluate(() => {\n        const userAgentData = (navigator as any).userAgentData;\n\n        return {\n            screen_width: window.screen.width.toString(),\n            screen_height: window.screen.height.toString(),\n            browser_language: navigator.language,\n            browser_platform: navigator.platform,\n            browser_name: navigator.appCodeName,\n            \"sec-ch-ua-platform\": userAgentData.platform,\n            \"sec-ch-ua\": userAgentData?.brands\n                ?.map((item: { brand: string; version: string }) => `\"${item.brand}\";v=\"${item.version}\"`)\n                .join(\", \"),\n            userAgent: navigator.userAgent,\n        };\n    });\n\n    task.logger.info(`浏览器指纹信息已获取: ${JSON.stringify(browserInfo)}`);\n\n    // ========== 第八步：收集 cookie 并返回结果 ==========\n    await page.waitForTimeout(3000);\n    const cookie = JSON.stringify(await task._steelBrowserContext?.cookies());\n    isSelfClosing = true;\n    await cleanup();\n\n    task.logger.info(\n        `登录流程完成，正在返回结果: ${JSON.stringify({ connectAddress, cookie, userInfo, securityData, browserInfo })}`,\n    );\n\n    return success(\n        {\n            connectAddress,\n            cookie,\n            userInfo,\n            extraParam: {\n                ...securityData,\n                browserInfo,\n            },\n        },\n        \"登录成功！\",\n    );\n};\n","import { TaskState, type UserInfo } from \"@iflyrpa/share\";\nimport type { Response } from \"playwright-core\";\nimport { ExecutionState } from \"../../types\";\nimport { ProxyAgent } from \"../../utils/proxy\";\nimport type { SteelAction } from \"./index\";\n\nconst scanRetryMaxCount = 60; // 二维码扫描重试次数\nconst waitQrcodeResultMaxTime = scanRetryMaxCount * 2 * 1000; // 最长等待时间\n\nexport const rpaServer: SteelAction = async (task, params) => {\n    const updateTaskState = task.taskStageStore?.update?.bind(task.taskStageStore, task.taskId || \"\");\n    let executionState: ExecutionState | undefined;\n\n    let proxyUrl: string | undefined;\n    if (params.proxyLoc) {\n        task.logger?.info(`==> 开始获取代理信息：${params}`);\n        const ProxyAgentResult = await ProxyAgent({ logger: task.logger }, params.proxyLoc, params.accountId);\n        task.logger?.info(\"==> 代理信息获取成功！\");\n        proxyUrl = ProxyAgentResult ? `http://${ProxyAgentResult.ip}:${ProxyAgentResult.port}` : undefined;\n    }\n    const page = await task.createPage({\n        url: \"https://creator.douyin.com/\",\n        proxyUrl,\n        userAgent: params.userAgent,\n        ...(params.viewport ? { viewport: params.viewport } : {}),\n    });\n\n    await page.route(\"**/*.mp4\", (route) => route.abort()); // 拦截部分不必要的请求，提升加载速度\n    await page.route(\"**/*.png\", (route) => route.abort()); // 拦截部分不必要的请求，提升加载速度\n    await page.route(\"**/*.ttf\", (route) => route.abort()); // 拦截部分不必要的请求，提升加载速度\n    await page.addInitScript(() => {\n        window.requestAnimationFrame = () => 0;\n    });\n\n    task.logger.info(\"页面创建成功，开始Bypass页面事件屏蔽...\");\n    await page.waitForResponse((response) => response.url().includes(\"/272.6591d0af.js\") && response.status() === 200, {\n        timeout: 15 * 1000,\n    });\n    await page.waitForLoadState(\"networkidle\");\n    await page.goto(\"about:blank\");\n    await page.goBack({ waitUntil: \"domcontentloaded\" }); // 用于去除页面的无法进行操作的脚本监听，不可删除\n    task.logger.info(\"已返回登录页面，页面事件屏蔽Bypass完成...\");\n\n    await page.locator(\".douyin-creator-master-icon-default.douyin-creator-master-icon-user_circle\").click();\n\n    task.steelBrowser?.on(\"disconnected\", async () => {\n        const browserContext = task.steelBrowserContext;\n        const browser = task.steelBrowser;\n        executionState = ExecutionState.BROWSER_CLOSED;\n        await page.close();\n\n        if (browserContext) {\n            await browserContext.close();\n        }\n        if (browser) {\n            await browser.close();\n        }\n    });\n\n    // 拦截不必要的资源请求\n    // await page.route(/\\/welcome.*\\.(png|mp4)$/i, (route) => route.abort());\n\n    await updateTaskState?.({\n        state: TaskState.WAIT_SCAN,\n        connectAddress: await task.steelConnector?.getLive(task.sessionId || \"\"),\n        sessionId: task.sessionId,\n    });\n\n    const userInfo: UserInfo = { uniqueId: \"\", avatar: \"\", name: \"\" };\n\n    try {\n        await new Promise<void>((resolve, reject) => {\n            let finished = false;\n\n            const timer = setTimeout(async () => {\n                cleanup();\n                executionState = ExecutionState.TIMEOUT;\n                await updateTaskState?.({\n                    state: TaskState.TIMEOUT,\n                    error: \"等待扫码登录超时\",\n                });\n                resolve();\n            }, waitQrcodeResultMaxTime);\n\n            const cleanup = () => {\n                if (finished) return; // 防止多次调用\n                finished = true;\n                clearTimeout(timer);\n                page.off(\"response\", handleWebCommon);\n                page.off(\"response\", handleCheckQR);\n                task.steelBrowser?.off(\"disconnected\", handleBrowserClosed);\n            };\n\n            const handleBrowserClosed = () => {\n                cleanup();\n                executionState = ExecutionState.BROWSER_CLOSED;\n                resolve();\n            };\n\n            const handleWebCommon = async (resp: Response) => {\n                try {\n                    const url = resp.url();\n\n                    // 登录成功后的第一个请求\n                    if (url.includes(\"/web/common\")) {\n                        cleanup();\n\n                        const headers = resp.headers();\n                        const xmst = headers[\"x-ms-token\"];\n                        const date = headers[\"x-tt-timestamp\"];\n\n                        if (xmst && date) {\n                            const mstExpirDate = new Date(Number(date) * 1000 + 7 * 24 * 60 * 60 * 1000);\n                            const msToken = {\n                                name: \"msToken\",\n                                value: xmst,\n                                domain: \".bytedance.com\",\n                                expires: mstExpirDate.getTime() / 1000,\n                                httpOnly: true,\n                                path: \"/\",\n                                sameSite: \"None\" as const,\n                                secure: true,\n                            };\n                            await page.context().addCookies([msToken]);\n                            await updateTaskState?.({\n                                state: TaskState.CONFIRMED,\n                            });\n                        }\n\n                        executionState = ExecutionState.SUCCESS;\n                        resolve();\n                    } else if (url.includes(\"aweme/v1/creator/user/info\")) {\n                        // 优先获取用户信息\n                        try {\n                            const jsonUserInfo: { user_profile: { avatar_url: string; nick_name: string } } =\n                                await resp.json();\n\n                            userInfo.name = jsonUserInfo.user_profile.nick_name ?? \"\";\n                            userInfo.avatar = jsonUserInfo.user_profile.avatar_url ?? \"\";\n                        } catch (e) {\n                            task.logger.warn(\"无法解析用户信息:\", { url, error: e });\n                        }\n                    } else if (url.includes(\"/aweme/v1/creator/pc/user/info/\")) {\n                        // 获取用户信息\n                        try {\n                            const jsonUserInfo: { uid: string } = await resp.json();\n                            userInfo.uniqueId = jsonUserInfo.uid ?? \"\";\n                            task.debug && task.logger.info(\"用户uniqueId 获取成功\", userInfo);\n                        } catch (e) {\n                            task.logger.warn(\"无法解析用户信息:\", { url, error: e });\n                        }\n                    }\n                } catch (err) {\n                    cleanup();\n                    reject(err);\n                }\n            };\n\n            // 0=用户未扫码，5=用户扫码已超时，2=用户已扫码未确认，3=扫码成功\n            const handleCheckQR = async (response: Response) => {\n                try {\n                    const url = response.url();\n                    if (!url.includes(\"/check_qrconnect\")) return;\n\n                    let jsonResponse: {\n                        data: {\n                            status?: \"new\" | \"scanned\" | \"expired\" | \"confirmed\";\n                            error_code: number;\n                            user_data?: {\n                                user_id_str: string;\n                            };\n                        };\n                    };\n                    try {\n                        jsonResponse = await response.json();\n                    } catch (e) {\n                        // ⚠️ 这里一定要直接 return，不要再 warn 成 error\n                        task.logger.warn(\"Response body unavailable (likely navigation happened)\", {\n                            url,\n                        });\n                        return;\n                    }\n\n                    const status = jsonResponse?.data?.status;\n\n                    if (status === \"scanned\") {\n                        await updateTaskState?.({\n                            state: TaskState.SCANNED,\n                        });\n                        page.on(\"response\", handleWebCommon);\n                    }\n\n                    if (status === \"confirmed\") {\n                        userInfo.uniqueId = jsonResponse.data?.user_data?.user_id_str || \"\";\n\n                        page.off(\"response\", handleCheckQR);\n                        // page.on(\"response\", handleWebCommon);\n                    }\n                } catch (err) {\n                    cleanup();\n                    reject(err);\n                }\n            };\n\n            // 在页面加载之前就注册监听，防止丢失请求\n            task.steelBrowser?.on(\"disconnected\", handleBrowserClosed);\n            page.on(\"response\", handleCheckQR);\n        });\n    } finally {\n        await page.close();\n    }\n\n    if (executionState === undefined) return { code: 500, message: \"未知错误\", data: {} };\n\n    switch (executionState) {\n        case ExecutionState.BROWSER_CLOSED: {\n            const msg = \"浏览器已关闭，任务中断!\";\n            await updateTaskState?.({\n                state: TaskState.FAILED,\n                error: \"浏览器已关闭\",\n            });\n            return { code: 414, message: msg, data: {} };\n        }\n\n        case ExecutionState.TIMEOUT: {\n            const msg = \"等待用户扫码登录超时!\";\n            await updateTaskState?.({\n                state: TaskState.TIMEOUT,\n                error: msg,\n            });\n            task.logger.info(msg);\n            return { code: 414, message: msg, data: {} };\n        }\n\n        case ExecutionState.SUCCESS: {\n            // 提取 localStorage 中的 security-sdk 数据\n            // let securityData: Record<string, string> = {};\n            // try {\n            //     securityData = await page.evaluate(() => {\n            //         return {\n            //             \"security-sdk/s_sdk_pri_key\": localStorage.getItem(\"security-sdk/s_sdk_pri_key\") || \"\",\n            //             \"security-sdk/s_sdk_pub_key\": localStorage.getItem(\"security-sdk/s_sdk_pub_key\") || \"\",\n            //             \"security-sdk/s_sdk_sign_data_key\":\n            //                 localStorage.getItem(\"security-sdk/s_sdk_sign_data_key/web_protect\") || \"\",\n            //         };\n            //     });\n\n            //     task.logger.info(\"Security SDK 数据提取成功:\", {\n            //         \"security-sdk/s_sdk_pri_key\": !!securityData[\"security-sdk/s_sdk_pri_key\"],\n            //         \"security-sdk/s_sdk_pub_key\": !!securityData[\"security-sdk/s_sdk_pub_key\"],\n            //         \"security-sdk/s_sdk_sign_data_key\": !!securityData[\"security-sdk/s_sdk_sign_data_key\"],\n            //     });\n            // } catch (error) {\n            //     task.logger.warn(\"提取 Security SDK 数据失败:\", {\n            //         error: error instanceof Error ? error.message : String(error),\n            //     });\n            // }\n            let securityData: Record<string, string> = {};\n            let retryCount = 0;\n            const maxRetries = 10;\n\n            while (retryCount < maxRetries) {\n                securityData = await page.evaluate(() => {\n                    const data: Record<string, string> = {};\n                    for (let i = 0; i < localStorage.length; i++) {\n                        const key = localStorage.key(i);\n                        if (key) {\n                            data[key] = localStorage.getItem(key) || \"\";\n                        }\n                    }\n                    return data;\n                });\n\n                // 检查是否有数据\n                if (\n                    securityData[\"security-sdk/s_sdk_pri_key\"] &&\n                    securityData[\"security-sdk/s_sdk_pub_key\"] &&\n                    securityData[\"security-sdk/s_sdk_sign_data_key/web_protect\"] &&\n                    securityData[\"security-sdk/s_sdk_server_cert_key\"] &&\n                    securityData[\"security-sdk/s_sdk_crypt_sdk\"]\n                ) {\n                    task.logger.info(\"Security SDK 数据已获取\");\n                    break;\n                }\n\n                retryCount++;\n                task.logger.info(`等待 Security SDK 数据... (${retryCount}/${maxRetries})`);\n                await page.waitForTimeout(1000);\n            }\n\n            await updateTaskState?.({\n                state: TaskState.SUCCESS,\n                result: {\n                    cookie: JSON.stringify(await task.steelBrowserContext?.cookies()),\n                    extraParam: securityData,\n                    userInfo: userInfo,\n                },\n            });\n            return {\n                code: 0,\n                message: \"成功\",\n                data: {\n                    cookie: JSON.stringify(await task.steelBrowserContext?.cookies()),\n                    extraParam: securityData,\n                    userInfo,\n                },\n            };\n        }\n        default:\n            // 处理 RUNNING 和其他可能的状态\n            return { code: 500, message: \"任务执行中断\", data: {} };\n    }\n};\n","import { CommonAction, success } from \"@iflyrpa/share\";\nimport { ActiomCommonParams } from \"../../types\";\nimport { executeAction } from \"../../utils\";\nimport { rpaAction } from \"./rpa\";\nimport { rpaServer } from \"./rpa-server\";\n\nexport type DouyinLoginParams = ActiomCommonParams;\n\nexport type SteelAction = CommonAction<ActiomCommonParams, Record<string, unknown>>;\n\nexport const douyinLogin: SteelAction = async (task, params) => {\n    if (params.actionType === \"rpa\") {\n        return rpaAction(task, params);\n    }\n\n    if (params.actionType === \"mockApi\") {\n        return success({}, \"暂不支持mockApi\");\n    }\n\n    if (params.actionType === \"server\") {\n        return rpaServer(task, params);\n    }\n\n    return executeAction(rpaServer)(task, params);\n};\n","import fs from \"node:fs\";\nimport http from \"node:http\";\nimport https from \"node:https\";\nimport path from \"node:path\";\nimport { downloadImage, getFilenameFromUrl } from \"@iflyrpa/share\";\nimport sizeOf from \"image-size\";\nimport { Http } from \"../http\";\n\nconst { getABogus } = require(\"./douyinSafe/a_bogus.js\");\n\nconst { generateAuthorization, randomS, canonicalQueryString, calculateFileCrc32 } = require(\"./douyinSign.js\");\n\n// ==================== 类型定义 ====================\ninterface UploadAuth {\n    status_code: number;\n    auth: string;\n    ak: string;\n    status_msg?: string;\n}\n\ninterface ImageXResponse {\n    ResponseMetadata: {\n        RequestId: string;\n        Action?: string;\n        Version?: string;\n        Service?: string;\n        Region?: string;\n        Error?: {\n            Code: string;\n            Message: string;\n        };\n    };\n    Result?: {\n        RequestId: string;\n        SessionKey: string;\n        UploadAddress: {\n            UploadHosts: string[];\n            StoreInfos: Array<{\n                StoreUri: string;\n                Auth: string;\n                SessionKey?: string;\n            }>;\n            UploadHeader?: Array<{\n                Key: string;\n                Value: string;\n            }>;\n        };\n    };\n}\n\ninterface UploadResult {\n    uri: string;\n    width: number;\n    height: number;\n    size: number;\n    md5: string;\n}\n\ninterface ImageInfo {\n    localPath: string;\n    width: number;\n    height: number;\n    size: number;\n    md5: string;\n}\n\n// ==================== 抖音图片上传管理器 ====================\nexport class DouyinImageUploader {\n    private proxyHttp: Http;\n    private headers: Record<string, string>;\n    private queryParams: Record<string, string>;\n    private tmpCachePath: string;\n\n    private authCache: UploadAuth | null = null;\n    private authExpireTime: number = 0;\n    private readonly AUTH_REFRESH_BUFFER = 5 * 60 * 1000;\n\n    private readonly CONCURRENT_LIMIT = 10;\n    private readonly UPLOAD_DELAY = 1000;\n    private readonly UPLOAD_TIMEOUT = 300000;\n    private readonly TOS_UPLOAD_TIMEOUT = 600000;\n\n    private uploadAgent: https.Agent | http.Agent;\n\n    constructor(\n        proxyHttp: Http,\n        headers: Record<string, string>,\n        queryParams: Record<string, string>,\n        tmpCachePath: string,\n        isHttps: boolean = true,\n    ) {\n        this.proxyHttp = proxyHttp;\n        this.headers = headers;\n        this.queryParams = queryParams;\n        this.tmpCachePath = tmpCachePath;\n\n        const Agent = isHttps ? https.Agent : http.Agent;\n\n        const agentOptions: https.AgentOptions = {\n            keepAlive: true,\n            maxSockets: this.CONCURRENT_LIMIT,\n            maxFreeSockets: 2,\n            timeout: this.TOS_UPLOAD_TIMEOUT,\n        };\n\n        (agentOptions as any).freeSocketTimeout = 30000;\n\n        this.uploadAgent = new Agent(agentOptions);\n    }\n\n    /**\n     * 获取有效的上传凭证（带缓存）\n     */\n    private async getValidAuth(): Promise<UploadAuth> {\n        const now = Date.now();\n\n        if (this.authCache && this.authExpireTime > now + this.AUTH_REFRESH_BUFFER) {\n            console.log(\"使用缓存的STS凭证\");\n            return this.authCache;\n        }\n\n        console.log(\"申请新的STS凭证...\");\n\n        const queryString = new URLSearchParams(this.queryParams).toString();\n        const aBogus = getABogus(\n            `https://creator.douyin.com/web/api/media/upload/auth/v5/?${queryString}`,\n            {},\n            this.headers[\"user-agent\"],\n        );\n        this.queryParams.a_bogus = aBogus;\n        const newQueryString = new URLSearchParams(this.queryParams).toString();\n        const uploadAuth = await this.withRetry(\n            () =>\n                this.proxyHttp.api<UploadAuth>(\n                    {\n                        method: \"get\",\n                        url: `https://creator.douyin.com/web/api/media/upload/auth/v5/?${newQueryString}`,\n                        headers: {\n                            ...this.headers,\n                            \"Content-Type\": \"application/json\",\n                        },\n                    },\n                    { timeout: 5 * 60 * 1000, retries: 0 },\n                ),\n            3,\n            1000,\n            \"获取上传凭证\",\n        );\n\n        if (!uploadAuth.auth) {\n            throw new Error(uploadAuth.status_msg || \"获取上传权限失败\");\n        }\n\n        try {\n            const authData = JSON.parse(uploadAuth.auth);\n            const expireTime = new Date(authData.ExpiredTime).getTime();\n            this.authExpireTime = expireTime;\n            this.authCache = uploadAuth;\n\n            console.log(`凭证有效期至: ${new Date(expireTime).toLocaleString()}`);\n            return uploadAuth;\n        } catch (error) {\n            this.authExpireTime = now + 60 * 60 * 1000;\n            this.authCache = uploadAuth;\n            return uploadAuth;\n        }\n    }\n\n    /**\n     * 获取单张图片的上传地址\n     */\n    private async getUploadAddress(auth: UploadAuth): Promise<{\n        host: string;\n        storeUri: string;\n        auth: string;\n    }> {\n        const authData = JSON.parse(auth.auth);\n        const times = new Date();\n        const amzDate = times\n            .toISOString()\n            .replace(/\\.\\d{3}Z$/, \"Z\")\n            .replace(/[:-]/g, \"\");\n\n        const region = \"cn-north-1\";\n        const service = \"imagex\";\n\n        const addrParamsConfig = {\n            accessKeyId: authData.AccessKeyID,\n            secretAccessKey: authData.SecretAccessKey,\n            sessionToken: authData.SessionToken,\n            region,\n            service,\n            method: \"GET\",\n            pathname: \"/\",\n            params: {\n                Action: \"ApplyImageUpload\",\n                ServiceId: \"jm8ajry58r\",\n                Version: \"2018-08-01\",\n                app_id: \"2906\",\n                s: randomS(),\n                user_id: \"\",\n            },\n        };\n\n        const result = generateAuthorization(addrParamsConfig).authorization;\n        const addrParamsQueryString = canonicalQueryString(addrParamsConfig.params);\n\n        const response = await this.withRetry(\n            () =>\n                this.proxyHttp.api<ImageXResponse>(\n                    {\n                        method: \"get\",\n                        url: `https://imagex.bytedanceapi.com/?${addrParamsQueryString}`,\n                        headers: {\n                            ...this.headers,\n                            Authorization: result,\n                            \"Content-Type\": \"application/json\",\n                            \"X-amz-date\": amzDate,\n                            \"X-amz-security-token\": authData.SessionToken,\n                        },\n                    },\n                    { timeout: this.UPLOAD_TIMEOUT },\n                ),\n            3,\n            1000,\n            \"获取上传地址\",\n        );\n\n        if (!response) {\n            throw new Error(\"获取上传地址失败: 响应为空\");\n        }\n\n        if (response.ResponseMetadata?.Error) {\n            throw new Error(\n                `ImageX错误: ${response.ResponseMetadata.Error.Code} - ${response.ResponseMetadata.Error.Message}`,\n            );\n        }\n\n        if (!response.Result) {\n            console.error(\"ImageX 响应结构:\", JSON.stringify(response, null, 2));\n            throw new Error(\"获取上传地址失败: Result 为空\");\n        }\n\n        if (!response.Result.UploadAddress) {\n            console.error(\"ImageX Result 结构:\", JSON.stringify(response.Result, null, 2));\n            throw new Error(\"获取上传地址失败: UploadAddress 为空\");\n        }\n\n        const uploadAddress = response.Result.UploadAddress;\n\n        if (!uploadAddress.StoreInfos || uploadAddress.StoreInfos.length === 0) {\n            throw new Error(\"获取上传地址失败: StoreInfos 为空\");\n        }\n\n        if (!uploadAddress.UploadHosts || uploadAddress.UploadHosts.length === 0) {\n            throw new Error(\"获取上传地址失败: UploadHosts 为空\");\n        }\n\n        const storeInfo = uploadAddress.StoreInfos[0];\n\n        console.log(\"获取上传地址成功:\", {\n            host: uploadAddress.UploadHosts[0],\n            storeUri: storeInfo.StoreUri,\n        });\n\n        return {\n            host: uploadAddress.UploadHosts[0],\n            storeUri: storeInfo.StoreUri,\n            auth: storeInfo.Auth,\n        };\n    }\n\n    /**\n     * 上传单张图片到TOS\n     */\n    private async uploadToTOS(\n        imageInfo: ImageInfo,\n        uploadAddr: { host: string; storeUri: string; auth: string },\n    ): Promise<UploadResult> {\n        const fileBuffer = fs.readFileSync(imageInfo.localPath);\n\n        const uploadUrl = `https://${uploadAddr.host}/upload/v1/${uploadAddr.storeUri}`.trim();\n\n        console.log(`上传至: ${uploadUrl.substring(0, 80)}...`);\n        console.log(`文件大小: ${imageInfo.size} bytes, CRC32: ${imageInfo.md5}`);\n\n        try {\n            const uploadImgResp = await this.withRetry(\n                () =>\n                    this.proxyHttp.api(\n                        {\n                            method: \"post\",\n                            url: uploadUrl,\n                            headers: {\n                                ...this.headers,\n                                Authorization: uploadAddr.auth,\n                                \"Content-crc32\": imageInfo.md5,\n                                \"Content-Type\": \"application/octet-stream\",\n                                \"Content-Length\": imageInfo.size.toString(),\n                            },\n                            data: fileBuffer,\n                            httpAgent: this.uploadAgent,\n                            httpsAgent: this.uploadAgent,\n                            maxBodyLength: Infinity,\n                            maxContentLength: Infinity,\n                        },\n                        { timeout: this.TOS_UPLOAD_TIMEOUT },\n                    ),\n                5,\n                3000,\n                \"TOS上传\",\n            );\n\n            console.log(\"TOS 上传响应:\", uploadImgResp);\n\n            const isSuccess =\n                uploadImgResp &&\n                (uploadImgResp.code === 2000 ||\n                    uploadImgResp.status === 200 ||\n                    uploadImgResp.statusCode === 200 ||\n                    (uploadImgResp.data && uploadImgResp.data.crc32) ||\n                    uploadImgResp.message === \"Success\");\n            if (!isSuccess) {\n                throw new Error(`上传失败: ${JSON.stringify(uploadImgResp)}`);\n            }\n\n            console.log(`上传成功: ${uploadAddr.storeUri}`);\n\n            return {\n                uri: uploadAddr.storeUri,\n                width: imageInfo.width,\n                height: imageInfo.height,\n                size: imageInfo.size,\n                md5: imageInfo.md5,\n            };\n        } catch (error: any) {\n            console.error(\"TOS 上传错误:\", error.message);\n            if (error.response) {\n                console.error(\"错误响应:\", error.response.data);\n            }\n            throw error;\n        }\n    }\n\n    /**\n     * 处理单张图片（下载+上传）- 失败直接跳过\n     */\n    private async processSingleImage(imageUrl: string, index: number, total: number): Promise<UploadResult | null> {\n        console.log(`\\n[${index + 1}/${total}] 处理图片: ${imageUrl.substring(0, 50)}...`);\n\n        const fileName = getFilenameFromUrl(imageUrl);\n        const localPath = path.resolve(this.tmpCachePath, fileName);\n\n        try {\n            await downloadImage(imageUrl, localPath);\n            console.log(`图片下载完成: ${localPath}`);\n\n            const imageInfo = await this.getImageInfo(localPath);\n            console.log(`图片信息: ${imageInfo.width}x${imageInfo.height}, ${imageInfo.size} bytes`);\n\n            const auth = await this.getValidAuth();\n            const uploadAddr = await this.getUploadAddress(auth);\n            const result = await this.uploadToTOS(imageInfo, uploadAddr);\n\n            this.safeDeleteFile(localPath);\n            return result;\n        } catch (error: any) {\n            console.error(`[${index + 1}/${total}] 图片上传失败，已跳过: ${imageUrl}`, error?.message ?? error);\n            this.safeDeleteFile(localPath);\n            return null;\n        }\n    }\n\n    /**\n     * 获取图片信息\n     */\n    private async getImageInfo(localPath: string): Promise<ImageInfo> {\n        const stats = fs.statSync(localPath);\n\n        // 检查文件大小（抖音限制 50MB）\n        const maxSize = 50 * 1024 * 1024; // 50MB\n        if (stats.size > maxSize) {\n            const fileName = path.basename(localPath);\n            throw new Error(\"抖音平台：单张图片不得超过 50MB\");\n        }\n\n        let width = 1080;\n        let height = 1920;\n\n        try {\n            const buffer = fs.readFileSync(localPath);\n            const dimensions = sizeOf(buffer);\n            width = dimensions.width;\n            height = dimensions.height;\n        } catch (e) {\n            // 使用默认值\n        }\n\n        return {\n            localPath,\n            width,\n            height,\n            size: stats.size,\n            md5: calculateFileCrc32(localPath),\n        };\n    }\n\n    /**\n     * 批量上传图片（带并发控制）\n     */\n    async uploadImages(imageUrls: string[]): Promise<UploadResult[]> {\n        const results: UploadResult[] = [];\n        const total = imageUrls.length;\n\n        console.log(`\\n========== 开始批量上传 ${total} 张图片 ==========\\n`);\n\n        for (let i = 0; i < total; i += this.CONCURRENT_LIMIT) {\n            const batch = imageUrls.slice(i, i + this.CONCURRENT_LIMIT);\n            const batchIndex = Math.floor(i / this.CONCURRENT_LIMIT) + 1;\n            const totalBatches = Math.ceil(total / this.CONCURRENT_LIMIT);\n\n            console.log(`\\n--- 批次 ${batchIndex}/${totalBatches} (${batch?.length} 张) ---`);\n\n            const batchPromises = batch.map((url, idx) => {\n                const globalIndex = i + idx;\n                return this.processSingleImage(url, globalIndex, total);\n            });\n\n            const batchResults = await Promise.all(batchPromises);\n            // 过滤掉失败的图片（null 值）\n            const successResults = batchResults.filter((r): r is UploadResult => r !== null);\n            results.push(...successResults);\n\n            const failedCount = batchResults.length - successResults.length;\n            if (failedCount > 0) {\n                console.warn(`批次 ${batchIndex} 中有 ${failedCount} 张图片上传失败`);\n            }\n\n            if (i + this.CONCURRENT_LIMIT < total) {\n                console.log(`等待 ${this.UPLOAD_DELAY}ms...`);\n                await this.delay(this.UPLOAD_DELAY);\n            }\n        }\n\n        console.log(`\\n========== 全部 ${total} 张图片上传完成 ==========\\n`);\n        return results;\n    }\n\n    /**\n     * 上传封面图（单张）\n     */\n    async uploadCover(coverUrl: string): Promise<UploadResult | null> {\n        console.log(\"\\n========== 上传封面 ==========\\n\");\n        const result = await this.processSingleImage(coverUrl, 0, 1);\n\n        if (!result) {\n            console.error(`封面图上传失败，已跳过: ${coverUrl}`);\n        }\n\n        return result;\n    }\n\n    /**\n     * 安全删除文件\n     */\n    private safeDeleteFile(filePath: string): void {\n        try {\n            if (fs.existsSync(filePath)) {\n                fs.unlinkSync(filePath);\n                console.log(`清理临时文件: ${path.basename(filePath)}`);\n            }\n        } catch (e) {\n            // 忽略删除错误\n        }\n    }\n\n    private delay(ms: number): Promise<void> {\n        return new Promise((resolve) => setTimeout(resolve, ms));\n    }\n\n    private async withRetry<T>(fn: () => Promise<T>, retries = 3, delayMs = 1000, label = \"\"): Promise<T> {\n        for (let attempt = 1; attempt <= retries; attempt++) {\n            try {\n                return await fn();\n            } catch (err: any) {\n                if (attempt === retries) throw err;\n                const waitTime = delayMs * attempt; // 递增延迟\n                console.warn(`${label} 第 ${attempt} 次失败，${waitTime}ms 后重试:`, err?.message ?? err);\n                await this.delay(waitTime);\n            }\n        }\n        throw new Error(\"unreachable\");\n    }\n\n    /**\n     * 销毁连接池\n     */\n    destroy(): void {\n        this.uploadAgent.destroy();\n    }\n}\n","/**\n * 抖音 x-tt-verify-passport-decision 解析器\n * 修复版 - 正确处理 UTF-8 编码的中文字符\n */\n\nexport interface VerifyPassportDecision {\n    account_flow: \"verify\" | string;\n    biz_params: unknown;\n    common_params: CommonParams;\n    encrypt_uid: string;\n    event_params: EventParams;\n    extra_params: ExtraParams;\n    pack_verify_way: boolean;\n    schema: string;\n    url: string;\n    user_info: UserInfo;\n    verify_way_name_list: string;\n}\n\nexport interface CommonParams {\n    copywriting: string;\n    copywriting_key: string;\n    gateway_abtest_group: string;\n    new_verify_flow: string;\n}\n\nexport interface CopywritingContent {\n    title: string;\n    desc: string;\n}\n\nexport interface EventParams {\n    log_id: string;\n    verify_reason: string;\n    verify_scene: string;\n}\n\nexport interface ExtraParams {\n    log_id: string;\n}\n\nexport interface UserInfo {\n    avatar_url: string;\n    nickname: string;\n    mobile_info: string | null;\n}\n\nexport interface ParsedCommonParams extends CommonParams {\n    parsed_copywriting: CopywritingContent;\n}\n\nexport interface ParsedVerifyDecision {\n    account_flow: \"verify\" | string;\n    biz_params: unknown;\n    common_params: ParsedCommonParams;\n    encrypt_uid: string;\n    event_params: EventParams;\n    extra_params: ExtraParams;\n    pack_verify_way: boolean;\n    schema: string;\n    url: string;\n    user_info: UserInfo;\n    verify_way_name_list: string;\n    verify_ways: VerifyWay[];\n    verify_title: string;\n    verify_desc: string;\n}\n\nexport type VerifyWay =\n    | \"mobile_sms_verify\"\n    | \"mobile_up_sms_verify\"\n    | \"face_verify\"\n    | \"idcard_verify\"\n    | \"password_verify\"\n    | string;\n\n/**\n * 将乱码字符串（如 \"èº«ä»½\"）恢复为正确的中文字符（如 \"身份\"）\n */\nfunction utf8Encoding(str: string): string {\n    try {\n        // 方法1: 使用 TextEncoder/TextDecoder 进行编码转换\n        // 将错误解析的字符重新编码为字节，然后用 UTF-8 解码\n        const bytes = new Uint8Array(str.split(\"\").map((c) => c.charCodeAt(0) & 0xff));\n        const decoder = new TextDecoder(\"utf-8\");\n        const result = decoder.decode(bytes);\n\n        // 检查解码是否成功（如果包含中文常用字范围）\n        if (/[\\u4e00-\\u9fa5]/.test(result)) {\n            return result;\n        }\n        return str;\n    } catch {\n        return str;\n    }\n}\n\n/**\n * 解码 Unicode 转义序列 (\\uXXXX)\n */\nfunction decodeUnicodeEscapes(str: string): string {\n    return str.replace(/\\\\u([0-9a-fA-F]{4})/g, (_, hex) => {\n        return String.fromCharCode(parseInt(hex, 16));\n    });\n}\n\n/**\n * 解析 x-tt-verify-passport-decision 响应头\n * @param headerValue - 响应头的原始值\n * @returns 解析后的结构化数据\n */\nexport function parseVerifyPassportDecision(headerValue: string | null | undefined): ParsedVerifyDecision | null {\n    if (!headerValue) {\n        return null;\n    }\n\n    try {\n        // 1. 去除外层引号包裹\n        let cleanValue = headerValue.trim();\n        if (\n            (cleanValue.startsWith('\"') && cleanValue.endsWith('\"')) ||\n            (cleanValue.startsWith(\"'\") && cleanValue.endsWith(\"'\"))\n        ) {\n            cleanValue = cleanValue.slice(1, -1);\n        }\n\n        // 2. 解码 Unicode 转义字符 (\\u0026 -> &, \\u4e2d -> 中)\n        let decoded = decodeUnicodeEscapes(cleanValue);\n\n        // 3. 尝试修复 UTF-8 编码问题\n        decoded = utf8Encoding(decoded);\n\n        // 4. 解析 JSON\n        const parsed: VerifyPassportDecision = JSON.parse(decoded);\n\n        // 5. 修复各个字段的编码问题\n        const fixedParsed: VerifyPassportDecision = {\n            ...parsed,\n            common_params: {\n                ...parsed.common_params,\n                copywriting: utf8Encoding(parsed.common_params.copywriting),\n            },\n            user_info: {\n                ...parsed.user_info,\n                nickname: utf8Encoding(parsed.user_info.nickname),\n            },\n        };\n\n        // 6. 丰富解析后的数据\n        return enrichParsedData(fixedParsed);\n    } catch (error) {\n        console.error(\"[parseVerifyPassportDecision] 解析失败:\", error);\n        return null;\n    }\n}\n\n/**\n * 丰富解析后的数据\n */\nfunction enrichParsedData(data: VerifyPassportDecision): ParsedVerifyDecision {\n    // 解析 copywriting JSON（处理双重转义）\n    let parsedCopywriting: CopywritingContent = { title: \"\", desc: \"\" };\n    try {\n        const copywritingStr = data.common_params.copywriting;\n\n        // 先解码 JSON 转义，再解析\n        const cleanedCopywriting = copywritingStr\n            .replace(/\\\\\"/g, '\"') // \\\" -> \"\n            .replace(/\\\\n/g, \"\\n\") // \\n -> 换行\n            .replace(/\\\\t/g, \"\\t\") // \\t -> 制表\n            .replace(/\\\\\\\\/g, \"\\\\\"); // \\\\ ->\n        const parsed = JSON.parse(cleanedCopywriting);\n        parsedCopywriting = {\n            title: utf8Encoding(parsed.title || \"\"),\n            desc: utf8Encoding(parsed.desc || \"\"),\n        };\n    } catch (e) {\n        console.warn(\"[parseVerifyPassportDecision] copywriting 解析失败:\", e);\n        // 备用：直接提取\n        try {\n            const titleMatch = data.common_params.copywriting.match(/\"title\":\"([^\"]+)\"/);\n            const descMatch = data.common_params.copywriting.match(/\"desc\":\"([^\"]+)\"/);\n            parsedCopywriting = {\n                title: utf8Encoding(titleMatch?.[1] || \"\"),\n                desc: utf8Encoding(descMatch?.[1] || \"\"),\n            };\n        } catch {\n            // 忽略\n        }\n    }\n\n    // 解析验证方式列表\n    const verifyWays: VerifyWay[] = data.verify_way_name_list\n        ? data.verify_way_name_list.split(\",\").map((s) => s.trim() as VerifyWay)\n        : [];\n\n    return {\n        ...data,\n        common_params: {\n            ...data.common_params,\n            parsed_copywriting: parsedCopywriting,\n        },\n        verify_ways: verifyWays,\n        verify_title: parsedCopywriting.title,\n        verify_desc: parsedCopywriting.desc,\n    };\n}\n\n// ==================== 辅助函数 ====================\n\nexport function needsVerification(decision: ParsedVerifyDecision | null): boolean {\n    return decision?.account_flow === \"verify\";\n}\n\nexport function getVerifyUrl(decision: ParsedVerifyDecision | null): string | null {\n    return decision?.url || null;\n}\n\nexport function getAppSchema(decision: ParsedVerifyDecision | null): string | null {\n    return decision?.schema || null;\n}\n\nexport function getUserNickname(decision: ParsedVerifyDecision | null): string | null {\n    return decision?.user_info?.nickname || null;\n}\n\nexport function getVerifyPrompt(decision: ParsedVerifyDecision | null): CopywritingContent {\n    return {\n        title: decision?.verify_title || \"\",\n        desc: decision?.verify_desc || \"\",\n    };\n}\n\nexport function supportsVerifyWay(decision: ParsedVerifyDecision | null, way: VerifyWay): boolean {\n    return decision?.verify_ways?.includes(way) || false;\n}\n\nexport function getRecommendedVerifyWay(decision: ParsedVerifyDecision | null): VerifyWay | null {\n    if (!decision?.verify_ways?.length) return null;\n\n    const priority: VerifyWay[] = [\n        \"mobile_sms_verify\",\n        \"mobile_up_sms_verify\",\n        \"face_verify\",\n        \"idcard_verify\",\n        \"password_verify\",\n    ];\n\n    for (const way of priority) {\n        if (decision.verify_ways.includes(way)) {\n            return way;\n        }\n    }\n\n    return decision.verify_ways[0];\n}\n","import { response, TaskState } from \"@iflyrpa/share\";\nimport { AxiosProxyParams, MockPublish } from \"../../types\";\nimport { stringifyError } from \"../../utils\";\nimport { DouyinImageUploader } from \"../../utils/douyin/imageUploader\";\nimport type { ParsedVerifyDecision } from \"../../utils/douyin/verify-parser\";\nimport { needsVerification, parseVerifyPassportDecision } from \"../../utils/douyin/verify-parser\";\nimport { classifyPublishError } from \"../../utils/errorMessages\";\nimport { Http } from \"../../utils/http\";\nimport { reportLogger } from \"../../utils/reportLogger\";\nimport type { PublishAction } from \"./index\";\n\nconst { generateCsrfTokenAdvanced } = require(\"../../utils/douyin/douyinSafe/csrfToken.js\");\nconst { getABogus } = require(\"../../utils/douyin/douyinSafe/a_bogus.js\");\nconst { generateDtrait } = require(\"../../utils/douyin/douyinSafe/dtrait.js\");\nconst { getBdV2 } = require(\"../../utils/douyin/douyinSafe/bd_para.js\");\n\ninterface CommonResponse<T = unknown> {\n    status_code: any;\n    data: any;\n    status_msg: string;\n    item_id: string;\n}\n\n//生成creation_id 8位字母与数字混淆随机数+当前时间戳\nfunction generateRandomString(length: number) {\n    const characters = \"abcdefghijklmnopqrstuvwxyz0123456789\";\n    let randomString = \"\";\n    for (let i = 0; i < length; i++) {\n        const randomIndex = Math.floor(Math.random() * characters.length);\n        randomString += characters.charAt(randomIndex);\n    }\n    return randomString;\n}\n\n/**\n * 安全地序列化对象，移除循环引用\n */\nfunction safeSerialize<T>(obj: T): T {\n    if (!obj || typeof obj !== \"object\") return obj;\n    try {\n        // 使用 JSON.parse(JSON.stringify()) 移除循环引用\n        return JSON.parse(JSON.stringify(obj));\n    } catch (error) {\n        // 如果序列化失败，返回空对象\n        return {} as T;\n    }\n}\n// @ts-expect-error\nexport const mockAction: PublishAction = async (task, params) => {\n    const updateTaskState = task.taskStageStore?.update?.bind(task.taskStageStore, task.taskId || \"\");\n\n    if (\n        !params.extraParam ||\n        !params.extraParam[\"security-sdk/s_sdk_sign_data_key/web_protect\"] ||\n        !params.extraParam[\"security-sdk/s_sdk_server_cert_key\"] ||\n        !params.extraParam[\"security-sdk/s_sdk_crypt_sdk\"]\n    ) {\n        return response(414, \"extraParam 参数缺失或不完整\", \"\");\n    }\n\n    let currentStep = \"初始化\"; // 追踪当前执行步骤\n\n    try {\n        currentStep = \"验证账号信息\";\n        const userAgent =\n            params.userAgent ||\n            \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.38\";\n\n        // return response(500, \"获取上传地址失败\", \"\");\n        const sessionidCookie = params.cookies.find((it: any) => it.name === \"msToken\")?.value;\n        if (!sessionidCookie) {\n            return { code: 414, message: \"账号数据异常，请重新绑定账号后重试。\", data: \"\" };\n        }\n\n        currentStep = \"准备请求参数\";\n        const headers = {\n            cookie: params.cookies.map((it: any) => `${it.name}=${it.value}`).join(\";\"),\n            origin: \"https://creator.douyin.com\",\n            referer:\n                \"https://creator.douyin.com/creator-micro/content/post/image?default-tab=3&enter_from=publish_page&media_type=image&type=new\",\n            Accept: \"application/json, text/plain, */*\",\n            \"Accept-Encoding\": \"gzip, deflate, br, zstd\",\n            \"Content-Type\": \"application/json\",\n            pragma: \"no-cache\",\n            \"cache-control\": \"no-cache\",\n            \"sec-ch-ua-platform\": params.extraParam?.browserInfo?.[\"sec-ch-ua-platform\"] || \"\",\n            \"sec-ch-ua\": params.extraParam?.browserInfo?.[\"sec-ch-ua\"] || \"\",\n            \"bd-ticket-guard-web-version\": \"2\",\n            \"sec-ch-ua-mobile\": \"?0\",\n            \"user-agent\": userAgent,\n            \"sec-fetch-site\": \"same-origin\",\n            \"sec-fetch-mode\": \"cors\",\n            \"sec-fetch-dest\": \"empty\",\n            \"accept-language\": \"zh-CN,zh;q=0.9\",\n            priority: \"u=1, i\",\n        };\n        const publishParams = {\n            read_aid: \"2906\",\n            aid: \"1128\",\n            cookie_enabled: \"true\",\n            screen_width: params.extraParam?.browserInfo.screen_width || \"1920\",\n            screen_height: params.extraParam?.browserInfo.screen_height || \"1080\",\n            browser_language: params.extraParam?.browserInfo.browser_language || \"zh-CN\",\n            browser_platform: params.extraParam?.browserInfo.browser_platform || \"Win32\",\n            browser_name: params.extraParam?.browserInfo.browser_name || \"Mozilla\",\n            browser_version: userAgent,\n            browser_online: \"true\",\n            timezone_name: \"Asia/Shanghai\",\n            support_h265: \"1\",\n            msToken: params.cookies.find((e: any) => e.name === \"msToken\")?.value || \"\",\n            a_bogus: \"\",\n        };\n        task.logger.info(`[douyinPublish] publishParams ${JSON.stringify(publishParams)}`);\n\n        const publishData: Record<string, unknown> = {\n            item: {\n                common: {\n                    text: params.content,\n                    text_extra: params.textExtra,\n                    activity: \"[]\",\n                    challenges: params.challengeIds || \"[]\", // 热点的cid\n                    hashtag_source: \"\",\n                    mentions: \"[]\", // @好友的uid列表\n                    music_id: params.musicId || \"\", // 取id_str TODO\n                    music_end_time: (params.musicDuration || 0) * 1000, //duration*1000 TODO\n                    hot_sentence: params.hotSentence || \"\", // 热点\n                    visibility_type: Number(params.visibleRange) || 0, // 谁可以看 0-公开 1-仅自己可见 2-好友可见\n                    download: params.allowSave ? 1 : 0, // 保存权限 1-允许保存 0-不允许\n                    timing: params.isImmediatelyPublish ? -1 : params.scheduledPublish, // 发布时间 -1立即发布 时间戳-定时发布\n                    media_type: Number(params.publishType) || 2,\n                    images: [],\n                    creation_id: \"\",\n                },\n                cover: {\n                    poster: \"\",\n                },\n                mix: params.mix\n                    ? {\n                          mix_id: params.mix.mix_id,\n                          mix_order: params.mix.mix_order || 0,\n                      }\n                    : {}, // 合集TODO\n                anchor: {},\n                declare: {\n                    user_declare_info: \"{}\",\n                },\n            },\n        };\n\n        const args: AxiosProxyParams = [{ headers }, task.logger, params.proxyLoc, params.accountId, \"douyin\"];\n        const http = new Http({ headers });\n        const proxyHttp = new Http(...args);\n\n        // 已上传的图片列表\n        const uploadedImgList = params.uploadedImgList ? JSON.parse(params.uploadedImgList) : [];\n        if (uploadedImgList.length > 0) {\n            (publishData.item as any).common.images = uploadedImgList;\n        } else {\n            // 创建图片上传管理器\n            const tmpCachePath = task.getTmpPath();\n            const uploader = new DouyinImageUploader(proxyHttp, headers, publishParams, tmpCachePath);\n            //上传封面\n            if (params.coverImage) {\n                const cover = await uploader.uploadCover(params.coverImage);\n                if (cover) {\n                    (publishData.item as any).common.images.push({\n                        uri: cover.uri,\n                        width: cover.width,\n                        height: cover.height,\n                    });\n                    (publishData.item as any).cover = {\n                        poster: cover.uri,\n                    };\n                }\n            }\n\n            //上传内容\n            if (params.banners && params.banners.length > 0) {\n                const banners = params.banners.filter((i) => i !== params.coverImage);\n                const uploadResults = await uploader.uploadImages(banners);\n                (publishData.item as any).common.images = (publishData.item as any).common.images.concat(\n                    uploadResults.map((result) => ({\n                        uri: result.uri,\n                        width: result.width,\n                        height: result.height,\n                    })),\n                );\n            }\n        }\n\n        (publishData.item as any).common.creation_id = generateRandomString(8) + Date.now();\n\n        let decision: ParsedVerifyDecision | null = null;\n        // task.logger.info(`[douyinPublish] proxyHttp 代理信息: ${proxyHttp.proxyInfo} `);\n        proxyHttp.addResponseInterceptor<CommonResponse>((response) => {\n            task.logger.info(`[douyinPublish] 拦截器收到响应response.headers: ${JSON.stringify(response.headers)} `);\n            task.logger.info(`[douyinPublish] 拦截器收到响应response.data: ${JSON.stringify(response.data)} `);\n\n            // 解析验证决策头\n            decision = parseVerifyPassportDecision(response.headers[\"x-tt-verify-passport-decision\"]);\n            if (needsVerification(decision)) {\n                task.logger.info(`[douyinPublish] 检测到需要验证: ${JSON.stringify(decision)}`);\n                return;\n            }\n\n            if (!response || !response.data) {\n                return;\n            }\n\n            const responseData = response.data;\n            // 检查响应中的 status_code 字段\n            if (response && responseData?.status_code && responseData.status_code !== 0) {\n                // 将抖音的服务器错误（status_code: 4）映射为 500，触发重试\n                const errorCode = responseData.status_code === 4 ? 500 : responseData.status_code;\n\n                if (responseData.status_code === 4) {\n                    task.logger.warn(\n                        `[douyinPublish] 抖音服务器错误 status_code: 4，映射为 500 触发重试。原始响应: ${JSON.stringify(responseData)}`,\n                    );\n                }\n\n                return {\n                    code: errorCode,\n                    message: responseData.status_msg || \"文章发布异常，请稍后重试。\",\n                    data: responseData,\n                };\n            }\n        });\n        task._timerRecord.PrePublish = Date.now();\n\n        if (MockPublish) {\n            const data = \"123456789\";\n            const message = `图文模拟发布成功 ${http.proxyInfo}`;\n\n            await updateTaskState?.({\n                state: TaskState.SUCCESS,\n                result: {\n                    response: data,\n                },\n            });\n            return response(0, message, data);\n        }\n\n        // 生成 bdTicketGuardClientData\n        let webProtectData: any;\n        try {\n            webProtectData = JSON.parse(\n                JSON.parse(params.extraParam[\"security-sdk/s_sdk_sign_data_key/web_protect\"] || \"{}\").data || \"{}\",\n            );\n\n            if (!webProtectData.ticket || !webProtectData.ts_sign || !webProtectData.client_cert) {\n                task.logger.error(`webProtectData 关键字段缺失: ${JSON.stringify(webProtectData)}`);\n                return response(414, \"安全参数 webProtectData 不完整，请重新获取后重试\", \"\");\n            }\n        } catch (error) {\n            task.logger.error(`解析 webProtectData 失败: ${error}`);\n            return response(414, \"安全参数 webProtectData 解析失败，请重新获取后重试\", \"\");\n        }\n\n        let ticket = webProtectData.ticket;\n        let ts_sign = webProtectData.ts_sign;\n\n        // 优先使用 cookie 中的最新 ticket/ts_sign：服务器在二次验证流程后会轮换它们，\n        // 并写入 bd_ticket_guard_server_data cookie。而 web_protect 里那份是绑定/登录时\n        // 抓取的，验证后会过期，继续用它签名会被服务器拒绝（403，bd-ticket-guard-result: 1002）。\n        const serverDataCookie = params.cookies.find((it: any) => it.name === \"bd_ticket_guard_server_data\")?.value;\n        if (serverDataCookie) {\n            try {\n                const decoded = JSON.parse(\n                    Buffer.from(decodeURIComponent(serverDataCookie), \"base64\").toString(\"utf8\"),\n                );\n                if (decoded.ticket && decoded.ts_sign) {\n                    if (decoded.ticket !== ticket) {\n                        task.logger.info(\"[douyinPublish] 使用 cookie 中的最新 ticket（web_protect 已过期）\");\n                    }\n                    ticket = decoded.ticket;\n                    ts_sign = decoded.ts_sign;\n                }\n            } catch (error) {\n                task.logger.info(`[douyinPublish] 解析 bd_ticket_guard_server_data 失败，回退到 web_protect: ${error}`);\n            }\n        }\n\n        let ec_privateKey: string;\n        try {\n            ec_privateKey = JSON.parse(\n                JSON.parse(params.extraParam[\"security-sdk/s_sdk_crypt_sdk\"] || \"{}\").data || \"{}\",\n            ).ec_privateKey;\n\n            if (!ec_privateKey) {\n                task.logger.error(\"[douyinPublish] ec_privateKey 为空\");\n                return response(414, \"安全参数 ec_privateKey 缺失，请重新获取后重试\", \"\");\n            }\n        } catch (error) {\n            task.logger.error(`[douyinPublish] 解析 ec_privateKey 失败: ${error}`);\n            return response(414, \"安全参数 ec_privateKey 解析失败，请重新获取后重试\", \"\");\n        }\n\n        let certificate: string;\n        try {\n            certificate = JSON.parse(params.extraParam[\"security-sdk/s_sdk_server_cert_key\"] || \"{}\").cert;\n\n            if (!certificate) {\n                task.logger.error(\"[douyinPublish] certificate 为空\");\n                return response(414, \"安全参数 certificate 缺失，请重新获取后重试\", \"\");\n            }\n        } catch (error) {\n            task.logger.error(`[douyinPublish] 解析 certificate 失败: ${error}`);\n            return response(414, \"安全参数 certificate 解析失败，请重新获取后重试\", \"\");\n        }\n\n        const ree_public_key = webProtectData.client_cert.replace(\"pub.\", \"\");\n\n        let bdTicketGuardClientData: any;\n        try {\n            bdTicketGuardClientData = getBdV2({\n                ticket,\n                ts_sign: ts_sign,\n                ec_privateKey: ec_privateKey,\n                certificate: certificate,\n                bd_ticket_guard_ree_public_key: ree_public_key,\n            });\n\n            if (!bdTicketGuardClientData || !bdTicketGuardClientData[\"headers_bd_ticket_guard_client_data\"]) {\n                task.logger.error(\n                    `[douyinPublish] bdTicketGuardClientData 生成失败或不完整: ${JSON.stringify(bdTicketGuardClientData)}`,\n                );\n                return response(414, \"安全参数 bdTicketGuardClientData 生成失败，请重新获取后重试\", \"\");\n            }\n        } catch (error) {\n            task.logger.error(`[douyinPublish] 生成 bdTicketGuardClientData 失败: ${error}`);\n            return response(414, \"安全参数 bdTicketGuardClientData 生成异常，请重新获取后重试\", \"\");\n        }\n\n        task.logger.info(\"[douyinPublish] bdTicketGuardClientData 生成成功\");\n\n        // 生成 aBogus\n        const publishQuery = { ...publishParams, a_bogus: \"\" };\n        const queryString = new URLSearchParams(publishQuery).toString();\n\n        let aBogus: string;\n        try {\n            aBogus = getABogus(\n                `https://creator.douyin.com/web/api/media/aweme/create_v2/?${queryString}`,\n                publishData,\n                userAgent,\n            );\n\n            if (!aBogus || aBogus.length < 10) {\n                task.logger.error(`[douyinPublish] a_bogus 生成异常，长度过短: ${aBogus}`);\n                return response(414, \"安全参数 a_bogus 生成失败，请重试\", \"\");\n            }\n        } catch (error) {\n            task.logger.error(`[douyinPublish] 生成 a_bogus 失败: ${error}`);\n            return response(414, \"安全参数 a_bogus 生成异常，请重试\", \"\");\n        }\n\n        publishQuery.a_bogus = aBogus;\n        const publishQueryParams = new URLSearchParams(publishQuery).toString();\n\n        // 生成 CSRF Token\n        let csrfToken: string;\n        try {\n            csrfToken = generateCsrfTokenAdvanced({\n                cookies: params.cookies,\n                url: \"https://creator.douyin.com/web/api/media/aweme/create_v2/\",\n                method: \"POST\",\n                userAgent,\n            });\n\n            if (!csrfToken || csrfToken.length < 10) {\n                task.logger.error(`[douyinPublish] csrfToken 生成异常，长度过短: ${csrfToken}`);\n                return response(414, \"安全参数 csrfToken 生成失败，请重试\", \"\");\n            }\n\n            task.logger.info(`[douyinPublish] csrfToken 生成成功: ${csrfToken.substring(0, 20)}...`);\n        } catch (error) {\n            task.logger.error(`[douyinPublish] 生成 csrfToken 失败: ${error}`);\n            return response(414, \"安全参数 csrfToken 生成异常，请重试\", \"\");\n        }\n\n        // 生成 sessionDtrait\n        let sessionDtrait: string;\n        try {\n            sessionDtrait = generateDtrait(\"/web/api/media/aweme/create_v2/\");\n            task.logger.info(`[douyinPublish] sessionDtrait 生成成功: ${sessionDtrait || \"(空)\"}`);\n        } catch (error) {\n            task.logger.error(`[douyinPublish] 生成 sessionDtrait 失败: ${error}`);\n            return response(414, \"安全参数 sessionDtrait 生成异常，请重试\", \"\");\n        }\n\n        // task.logger.info(\"[douyinPublish] 发布数据\", { data: JSON.stringify(publishData) });\n        task.logger.info(\n            `[douyinPublish] headers: ${JSON.stringify({\n                ...headers,\n                Referer:\n                    \"https://creator.douyin.com/creator-micro/content/post/image?default-tab=3&enter_from=publish_page&media_type=image&type=new\",\n                \"Content-Type\": \"application/json\",\n                Accept: \"application/json, text/plain, */*\",\n                \"bd-ticket-guard-client-data\": bdTicketGuardClientData[\"headers_bd_ticket_guard_client_data\"],\n                \"bd-ticket-guard-ree-public-key\": bdTicketGuardClientData[\"headers_bd_ticket_guard_ree_public_key\"],\n                \"bd-ticket-guard-version\": \"2\",\n                \"bd-ticket-guard-web-sign-type\": \"1\",\n                \"bd-ticket-guard-web-version\": \"2\",\n                \"x-secsdk-csrf-token\": csrfToken,\n                \"x-tt-session-dtrait\": sessionDtrait || \"\",\n            })}`,\n        );\n        task.logger.info(\n            `[douyinPublish] url: ${`https://creator.douyin.com/web/api/media/aweme/create_v2/?${publishQueryParams}`}`,\n        );\n\n        let publishResult: CommonResponse<{ aweme_id: string }>;\n        try {\n            publishResult = await proxyHttp.api<CommonResponse<{ aweme_id: string }>>(\n                {\n                    method: \"post\",\n                    url: `https://creator.douyin.com/web/api/media/aweme/create_v2/?${publishQueryParams}`,\n                    data: publishData,\n                    defaultErrorMsg: \"发布异常，请稍后重试。\",\n                    headers: {\n                        ...headers,\n                        Referer:\n                            \"https://creator.douyin.com/creator-micro/content/post/image?default-tab=3&enter_from=publish_page&media_type=image&type=new\",\n                        \"Content-Type\": \"application/json\",\n                        Accept: \"application/json, text/plain, */*\",\n                        \"bd-ticket-guard-client-data\": bdTicketGuardClientData[\"headers_bd_ticket_guard_client_data\"],\n                        \"bd-ticket-guard-ree-public-key\":\n                            bdTicketGuardClientData[\"headers_bd_ticket_guard_ree_public_key\"],\n                        \"bd-ticket-guard-version\": \"2\",\n                        \"bd-ticket-guard-web-sign-type\": \"1\",\n                        \"bd-ticket-guard-web-version\": \"2\",\n                        \"x-secsdk-csrf-token\": csrfToken,\n                        \"x-tt-session-dtrait\": sessionDtrait || \"\",\n                    },\n                },\n                { timeout: 60 * 1000, retries: 3, retryDelay: 2000 },\n            );\n        } catch (error) {\n            const handledError = Http.handleApiError(error);\n            // 代理连接超时(599) 与网络/服务端错误(500/502/503/504)：重试耗尽后直接返回分类文案，\n            // 不再 throw 走 executeAction 的 RPA 兜底。code 归一为 414，使 executeAction 视为终止结果。\n            const classified = classifyPublishError(handledError);\n            if (classified) {\n                // 用户侧只给分类文案，原始错误信息记进日志；debug 模式下追加代理信息便于排查\n                const message = `${classified.userMessage}${task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n                task.logger.error(\n                    `[douyinPublish] ${classified.category}，直接返回: ${handledError.message} (code=${handledError.code})`,\n                    stringifyError(handledError),\n                );\n                await updateTaskState?.({\n                    state: TaskState.FAILED,\n                    error: message,\n                });\n                return { code: 414, data: \"\", message };\n            }\n            // 其它错误码维持原有逻辑，抛出以便上层 executeAction 走 RPA 兜底\n            throw error;\n        }\n\n        task.logger.info(\n            `[douyinPublish] decision值: ${JSON.stringify(decision)}, needsVerification(decision): ${needsVerification(decision)}`,\n        );\n        if (needsVerification(decision)) {\n            const details = [\n                publishResult.status_msg,\n                (decision as ParsedVerifyDecision | null)?.verify_title,\n                (decision as ParsedVerifyDecision | null)?.verify_desc,\n            ]\n                .filter(Boolean)\n                .join(\" \");\n            const message = `图文发布失败，原因：${details}${task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n\n            // 使用 safeSerialize 移除循环引用，同时保留 result 层解构的兼容字段\n            const safeDecision = safeSerialize(decision) ?? {};\n\n            const mockData = {\n                state: TaskState.FAILED,\n                error: message,\n                result: {\n                    ...safeDecision,\n                    data: decision,\n                    uploadedImgList: JSON.stringify((publishData.item as any).common.images),\n                },\n            };\n            await updateTaskState?.(mockData);\n            return { code: 0, data: mockData, message: \"操作成功\" };\n        }\n\n        reportLogger({\n            token: params.huiwenToken || \"\",\n            enverionment: task.enverionment || \"development\",\n            postId: params.articleId,\n            eip: proxyHttp.proxyInfo,\n            accountId: params.accountId,\n            uid: params.uid,\n            platform: \"douyin\",\n            publishParams: publishData,\n        });\n        task.logger.info(`[douyinPublish] 发布结果 ${JSON.stringify(publishResult)}`);\n        const isSuccess = publishResult.status_code === 0;\n        const message = `图文发布${isSuccess ? \"成功\" : `失败，原因：${publishResult.status_msg} ${(decision as ParsedVerifyDecision | null)?.verify_title} ${(decision as ParsedVerifyDecision | null)?.verify_desc}`}${task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n        const data = isSuccess ? publishResult.item_id || \"\" : \"\";\n        if (!isSuccess) {\n            // 使用 safeSerialize 移除循环引用，同时保留 result 层解构的兼容字段\n            const safeDecision = safeSerialize(decision) ?? {};\n\n            await updateTaskState?.({\n                state: TaskState.FAILED,\n                error: message,\n                result: {\n                    ...safeDecision,\n                    data: safeDecision,\n                    uploadedImgList: JSON.stringify((publishData.item as any).common.images),\n                },\n            });\n            return { code: 414, data: safeDecision, message };\n        }\n\n        await updateTaskState?.({\n            state: TaskState.SUCCESS,\n            result: {\n                response: data,\n            },\n        });\n\n        return response(isSuccess ? 0 : 414, message, data);\n    } catch (error) {\n        // 使用 Http.handleApiError 规范化错误，保留错误码和结构化信息\n        const handledError = Http.handleApiError(error);\n\n        // 构造详细的错误消息\n        const errorMsg = handledError.message || \"发布失败\";\n        const errorCode = handledError.code || 500;\n\n        // 记录完整的错误信息（包括堆栈和额外上下文）\n        task.logger.error(\n            `[douyinPublish] 发布流程异常 (步骤: ${currentStep}): ${errorMsg}`,\n            stringifyError(error),\n            handledError.extra,\n        );\n\n        // 更新任务状态\n        await updateTaskState?.({\n            state: TaskState.FAILED,\n            error: `${currentStep}失败: ${errorMsg}`,\n        });\n\n        return response(errorCode, errorMsg, \"\");\n    }\n};\n","import path from \"node:path\";\nimport { downloadImage, getFilenameFromUrl, type Locator, type Response, success } from \"@iflyrpa/share\";\nimport type { PublishAction } from \"./index\";\nexport const rpaAction: PublishAction = async (task, params) => {\n    // const updateTaskState = task.taskStageStore?.update?.bind(task.taskStageStore, task.taskId || \"\");\n    const commonCookies = {\n        path: \"/\",\n        secure: true,\n        domain: \"douyin.com\",\n        url: \"https://creator.douyin.com\",\n        httpOnly: true,\n    };\n    const page = await task.createPage({\n        show: task.debug,\n        url: params.url || \"https://creator.douyin.com/creator-micro/content/upload?default-tab=3\",\n        // url:'https://www.browserscan.net/zh/bot-detection',\n        cookies: params.cookies?.map((it) => ({ ...it, ...commonCookies })),\n    });\n    // await updateTaskState?.({\n    //     state: TaskState.ACTION,\n    //     connectAddress: task.steelConnector?.getProxyUrl(task.sessionId || \"\", \"v1/sessions/debug\"),\n    //     sessionId: task.sessionId,\n    // });\n\n    const tmpCachePath = task.getTmpPath();\n\n    // Helper functions for robust interactions\n    const waitForElement = async (selector: string, timeout = 10000): Promise<Locator | null> => {\n        try {\n            const element = page.locator(selector);\n            task.logger.warn(`element: ${element}`);\n            await element.waitFor({ state: \"visible\", timeout });\n            return element;\n        } catch {\n            task.logger.warn(`元素未找到: ${selector}`);\n            return null;\n        }\n    };\n\n    const retryAction = async <T>(action: () => Promise<T>, maxRetries = 3, delay = 1000): Promise<T> => {\n        let lastError: Error | undefined;\n        for (let i = 0; i < maxRetries; i++) {\n            try {\n                return await action();\n            } catch (error) {\n                lastError = error as Error;\n                task.logger.warn(`重试 ${i + 1}/${maxRetries}: ${lastError.message}`);\n                if (i < maxRetries - 1) {\n                    await page.waitForTimeout(delay);\n                }\n            }\n        }\n        throw lastError;\n    };\n\n    const safeClick = async (locator: Locator | null): Promise<boolean> => {\n        if (!locator) return false;\n        try {\n            await locator.click({ timeout: 5000 });\n            return true;\n        } catch (error) {\n            task.logger.warn(`点击失败: ${error}`);\n            return false;\n        }\n    };\n\n    const safeFill = async (locator: Locator | null, text: string): Promise<boolean> => {\n        if (!locator || !text) return false;\n        try {\n            await locator.clear({ timeout: 3000 });\n            await locator.fill(text, { timeout: 5000 });\n            return true;\n        } catch (error) {\n            task.logger.warn(`填充文本失败: ${error}`);\n            return false;\n        }\n    };\n\n    try {\n        task.logger.info(\"检查登录状态...\");\n        await page.waitForSelector(\"#micro\", {\n            state: \"visible\",\n            timeout: 20000,\n        });\n        task.logger.info(\"✓ 登录状态正常\");\n    } catch (_error) {\n        task.logger.error(\"✗ 登录失效或页面加载异常\");\n        return { code: 414, message: \"登录失效\", data: page.url() };\n    }\n    // 上传图片\n    if (params.banners && params.banners.length > 0 && params.coverImage && params.coverImage.length > 0) {\n        const imgs = [params.coverImage].concat(params.banners);\n        task.logger.info(`开始上传 ${imgs.length} 张图片`);\n\n        await retryAction(async () => {\n            // 下载图片到本地\n            const images = await Promise.all(\n                imgs.map((url) => {\n                    const fileName = getFilenameFromUrl(url);\n                    return downloadImage(url, path.join(tmpCachePath, fileName));\n                }),\n            );\n\n            // 等待文件上传输入框\n            const fileChooser = await page.waitForSelector('input[type=\"file\"]', { timeout: 20000 });\n            if (!fileChooser) {\n                throw new Error(\"未找到图片上传输入框\");\n            }\n\n            await fileChooser.setInputFiles(images);\n            task.logger.info(`图片上传成功: ${images.length} 张`);\n\n            // 等待图片处理\n            await page.waitForTimeout(2000);\n        });\n    }\n    // 填写标题\n    if (params.title) {\n        task.logger.info(`填写标题: ${params.title}`);\n        await retryAction(async () => {\n            const titleInstance = await waitForElement(\".semi-input-wrapper input[placeholder='添加作品标题']\", 50000);\n            if (!titleInstance) {\n                throw new Error(\"未找到标题输入框\");\n            }\n            await titleInstance.click();\n            await safeFill(titleInstance, params.title);\n            task.logger.info(\"标题填写完成\");\n        });\n    }\n    // 填写描述\n    if (params.content) {\n        task.logger.info(\"填写描述\");\n        await page.waitForTimeout(1000);\n        await retryAction(async () => {\n            const descInstance = await waitForElement(\"div[data-placeholder='添加作品描述...']\", 10000);\n            if (!descInstance) {\n                throw new Error(\"未找到描述编辑器\");\n            }\n            await descInstance.click();\n            await page.waitForTimeout(500);\n\n            // 清理内容中的话题标记\n            const cleanContent = params.content.replace(/#.*?\\[.*?]#/g, \"\");\n            await descInstance.pressSequentially(cleanContent, { delay: 10 });\n            task.logger.info(\"描述填写完成\");\n        });\n    }\n\n    // 添加话题标签\n    if (params.topic && params.topic.length > 0) {\n        task.logger.info(`添加话题标签: ${params.topic.length} 个`);\n        try {\n            const topics = params.topic; // 保存到局部变量避免 TypeScript 类型问题\n            await retryAction(async () => {\n                const descInstance = page.locator(\".editor-kit-container.editor.editor-comp-publish\");\n\n                // 遍历话题数组\n                for (const topic of topics) {\n                    if (topic.cha_name) {\n                        // 输入话题标签格式: #话题名 (带空格)\n                        const topicTag = `#${topic.cha_name} `;\n                        await descInstance.pressSequentially(topicTag, { delay: 10 });\n                        task.logger.info(`已添加话题: ${topicTag.trim()}`);\n                        await page.waitForTimeout(300);\n                    }\n                }\n\n                task.logger.info(\"✓ 话题标签添加完成\");\n            });\n        } catch (error) {\n            task.logger.warn(`添加话题标签失败: ${error}`);\n        }\n    }\n\n    // 选择合集\n    if (params.mix?.mix_name) {\n        task.logger.info(`选择合集: ${params.mix.mix_name}`);\n        const instanceCollection = page.locator(\"[class^='mix-sel-wrap'] .semi-select\").nth(1);\n        await instanceCollection.click();\n        await page.waitForTimeout(2000);\n        page.locator(\".semi-select-option-list .semi-select-option\")\n            .filter({ hasText: params.mix.mix_name })\n            .first()\n            .click({ force: true });\n    }\n\n    // 选择合集\n    if (params.mix?.mix_order_name) {\n        task.logger.info(`选择合集集数: ${params.mix.mix_order_name}`);\n        const instanceCollection = page.locator(\"[class^='mix-sel-wrap'] .semi-select\").nth(2);\n        await instanceCollection.click();\n        await page.waitForTimeout(2000);\n        page.locator(\".mix-order-dropdown .semi-select-option\")\n            .filter({ hasText: params.mix.mix_order_name })\n            .first()\n            .click({ force: true });\n    }\n\n    // 选择音乐\n    if (params.musicId && params.musicName) {\n        task.logger.info(`选择音乐: ${params.musicName} - ${params.musicAuthor || \"\"}`);\n        try {\n            await retryAction(async () => {\n                // 点击音乐选择触发器\n                const musicTrigger = await waitForElement(\"[class^='container-right-']\", 10000);\n                if (!musicTrigger) {\n                    throw new Error(\"未找到音乐选择触发器\");\n                }\n                await musicTrigger.click();\n                task.logger.info(\"已打开音乐选择面板\");\n                await page.waitForTimeout(1000);\n                const searchBox = await waitForElement(\"[class^='music-search']\", 10000);\n                if (!searchBox) {\n                    throw new Error(\"未找到音乐搜索框\");\n                }\n                await searchBox.click();\n                await page.waitForTimeout(500);\n\n                // 填充搜索内容\n                const searchInput = page.locator(\"[class^='music-search'] input\");\n                const searchText = params.musicAuthor\n                    ? `${params.musicName} - ${params.musicAuthor}`\n                    : params.musicName;\n                await searchInput.fill(searchText || \"\");\n                task.logger.info(`已输入搜索内容: ${searchText}`);\n\n                // 等待输入稳定\n                await page.waitForTimeout(300);\n\n                // 按回车触发搜索\n                await searchInput.press(\"Enter\");\n                task.logger.info(\"已触发搜索\");\n\n                // 等待搜索结果加载\n                await page.waitForTimeout(4000);\n\n                // 等待搜索结果容器出现\n                const resultContainer = page.locator(\"[class^='card-container-']\");\n                task.logger.info(`resultContainer: ${resultContainer}`);\n\n                if (!resultContainer) {\n                    throw new Error(\"未找到音乐搜索结果\");\n                }\n\n                // 查找匹配的音乐项\n                const musicCards = page.locator(\"[class^='card-container-']\");\n                const matchedCard = musicCards.filter({ hasText: params.musicName }).first();\n\n                const cardCount = await matchedCard.count();\n                if (cardCount === 0) {\n                    task.logger.warn(`未找到匹配的音乐: ${params.musicName}`);\n                    throw new Error(`未找到匹配的音乐: ${params.musicName}`);\n                }\n\n                task.logger.info(\"找到匹配的音乐，准备选择\");\n\n                // hover 到音乐卡片上显示按钮\n                await matchedCard.hover();\n                task.logger.info(\"已 hover 到音乐卡片\");\n                await page.waitForTimeout(2000);\n\n                // 点击选择按钮\n                const selectButton = matchedCard.locator(\".semi-button\").first();\n                const buttonClicked = await safeClick(selectButton);\n\n                if (!buttonClicked) {\n                    throw new Error(\"点击音乐选择按钮失败\");\n                }\n\n                task.logger.info(\"✓ 音乐选择完成\");\n                await page.waitForTimeout(500);\n            });\n        } catch (error) {\n            task.logger.warn(`选择音乐失败: ${error}`);\n        }\n    }\n\n    // 选择热点\n    if (params.hotSentence) {\n        task.logger.info(`选择热点: ${params.hotSentence}`);\n        const instance = page.locator(\".semi-select-filterable\").nth(1);\n        await instance.click();\n        await page.waitForTimeout(1000);\n        await page.locator(\".semi-input-wrapper input\").nth(1).fill(params.hotSentence);\n        await page.waitForTimeout(2000);\n        page.locator(\".semi-popover-content .semi-select-option\")\n            .filter({ hasText: params.hotSentence })\n            .first()\n            .click({ force: true });\n    }\n    // if (params.topic && params.topic.length > 0) {\n    //     for (const it of params.topic) {\n    //         await descInstance.pressSequentially(`#${it.word}`);\n    //         await page.locator(\".ql-mention-loading, .topic-loading\").waitFor({ state: \"detached\" });\n    //         await page.waitForTimeout(1000);\n    //         await page.locator(\".topic-item.is-selected, .creator-editor-topic-container .item.is-selected\").click();\n    //     }\n    // }\n\n    // const container = page.locator(\".plugin.editor-container, .content-container\");\n    // await container.focus();\n    // await page.mouse.wheel(0, 500);\n\n    // if (params.address) {\n    //     await selectAddress(\n    //         page.locator(\".media-extension .address-input, .location-input\").filter({ hasText: \"添加地点\" }),\n    //         params.address.name,\n    //     );\n    // }\n    // 设置可见范围\n    if (params.visibleRange) {\n        task.logger.info(`设置可见范围: ${params.visibleRange}`);\n        if (params.visibleRange === \"2\") {\n            // 2 = 好友可见\n            await page.locator(\"label:has-text('好友可见')\").first().click();\n            task.logger.info(\"已设置为好友可见\");\n        } else if (params.visibleRange === \"1\") {\n            // 1 = 仅自己可见\n            await page.locator(\"label:has-text('仅自己可见')\").first().click();\n            task.logger.info(\"已设置为仅自己可见\");\n        }\n        // 0 = 公开（默认，无需操作）\n    }\n\n    // 设置保存权限\n    if (!params.allowSave) {\n        task.logger.info(`设置保存权限: ${params.allowSave ? \"允许\" : \"不允许\"}`);\n        try {\n            // false = 不允许\n            await page.locator(\"label:has-text('不允许')\").first().click();\n            task.logger.info(\"已设置为保存权限不允许\");\n            await page.waitForTimeout(300);\n        } catch (error) {\n            task.logger.warn(`设置保存权限失败: ${error}`);\n        }\n    }\n\n    // 设置定时发布\n    if (!params.isImmediatelyPublish && params.scheduledPublish) {\n        task.logger.info(\"设置定时发布\");\n\n        try {\n            // 点击定时发布单选按钮\n            await page.locator('label:has-text(\"定时发布\")').first().click();\n            task.logger.info(\"已选择定时发布\");\n            await page.waitForTimeout(500);\n\n            // 归一化时间戳（处理秒/毫秒）\n            const timestamp =\n                params.scheduledPublish > 10000000000 ? params.scheduledPublish / 1000 : params.scheduledPublish;\n            const publishDate = new Date(timestamp * 1000);\n\n            // 格式化时间字符串\n            const year = publishDate.getFullYear();\n            const month = String(publishDate.getMonth() + 1).padStart(2, \"0\");\n            const day = String(publishDate.getDate()).padStart(2, \"0\");\n            const hour = String(publishDate.getHours()).padStart(2, \"0\");\n            const minute = String(publishDate.getMinutes()).padStart(2, \"0\");\n            const formattedTime = `${year}-${month}-${day} ${hour}:${minute}`;\n\n            task.logger.info(`目标发布时间: ${formattedTime}`);\n\n            // 填写时间\n            const releaseTimeInstance = await waitForElement(\n                \".semi-datepicker-input input[placeholder='日期和时间']\",\n                10000,\n            );\n            if (!releaseTimeInstance) {\n                throw new Error(\"未找到时间输入框\");\n            }\n\n            await releaseTimeInstance.click();\n            await page.waitForTimeout(500);\n            await releaseTimeInstance.fill(formattedTime);\n            await page.waitForTimeout(500);\n\n            // 验证输入值\n            const inputValue = await releaseTimeInstance.inputValue();\n            if (inputValue !== formattedTime) {\n                task.logger.warn(`时间输入验证失败，期望: ${formattedTime}, 实际: ${inputValue}`);\n            } else {\n                task.logger.info(\"定时发布设置完成\");\n            }\n\n            await releaseTimeInstance.blur();\n            await page.waitForTimeout(500);\n        } catch (error) {\n            task.logger.warn(`定时发布设置失败: ${error}`);\n        }\n    }\n\n    // 点击发布按钮\n    task.logger.info(\"准备发布...\");\n    await page.waitForTimeout(1000);\n\n    const response = await new Promise<string>((resolve) => {\n        const handleResponse = async (response: Response) => {\n            if (response.url().includes(\"/web/api/media/aweme/create_v2\")) {\n                console.log(\"匹配到发布接口响应\");\n                const jsonResponse = await response.json();\n                console.log(\"发布接口响应数据:\", jsonResponse);\n                page.off(\"response\", handleResponse);\n                resolve(jsonResponse?.data?.item_id);\n            }\n        };\n        console.log(\"监听响应事件\");\n        page.on(\"response\", handleResponse);\n        console.log(\"点击发布按钮\");\n        // 在设置监听器后等待，然后点击\n        setTimeout(() => {\n            page.locator(\"#DCPF button:has-text('发布')\").first().click();\n            console.log(\"发布按钮已点击\");\n        }, 1000);\n    });\n\n    // await updateTaskState?.({\n    //     state: TaskState.SUCCESS,\n    //     result: {\n    //         response,\n    //     },\n    // });\n    console.log(\"发布成功了\");\n\n    await page.close();\n\n    return success(response);\n};\n","import path from \"node:path\";\nimport { downloadImage, getFilenameFromUrl, type Locator, type Response, success, TaskState } from \"@iflyrpa/share\";\nimport { MockPublish } from \"../../types\";\nimport type { ParsedVerifyDecision } from \"../../utils/douyin/verify-parser\";\nimport { needsVerification, parseVerifyPassportDecision } from \"../../utils/douyin/verify-parser\";\nimport { ProxyAgent } from \"../../utils/proxy\";\nimport type { PublishAction } from \"./index\";\n\nexport const rpaAction_Server: PublishAction = async (task, params) => {\n    const updateTaskState = task.taskStageStore?.update?.bind(task.taskStageStore, task.taskId || \"\");\n\n    const tmpCachePath = task.getTmpPath();\n    task.logger?.info(\"==>进入RPA操作：任务开始，下载图片开始...\");\n\n    // 预下载图片\n    const imgs = params.coverImage ? [params.coverImage, ...(params.banners || [])] : params.banners || [];\n\n    const imagePromise = Promise.all(\n        imgs.map((url) => {\n            const fileName = getFilenameFromUrl(url);\n            return downloadImage(url, path.join(tmpCachePath, fileName));\n        }),\n    );\n\n    // 获取代理信息\n    let proxyUrl: string | undefined;\n    if (params.proxyLoc) {\n        task.logger?.info(`==> 开始获取代理信息：${params}`);\n        const ProxyAgentResult = await ProxyAgent({ logger: task.logger }, params.proxyLoc, params.accountId);\n        task.logger?.info(\"==> 代理信息获取成功！\");\n        proxyUrl = ProxyAgentResult ? `http://${ProxyAgentResult.ip}:${ProxyAgentResult.port}` : undefined;\n    }\n\n    const commonCookies = {\n        path: \"/\",\n        secure: true,\n        domain: \"douyin.com\",\n        url: \"https://creator.douyin.com\",\n        httpOnly: true,\n    };\n\n    task.logger?.info(\"==>开始打开抖音创作者页面...\");\n    const page = await task.createPage({\n        show: task.debug,\n        url: params.url || \"https://creator.douyin.com/creator-micro/content/upload?default-tab=3\",\n        cookies: params.cookies?.map((it) => ({ ...it, ...commonCookies })),\n        proxyUrl,\n    });\n    task.logger?.info(\"==>抖音创作者页面打开成功\");\n\n    await updateTaskState?.({\n        state: TaskState.ACTION,\n        connectAddress: task.steelConnector?.getProxyUrl(task.sessionId || \"\", \"v1/sessions/debug\"),\n        sessionId: task.sessionId,\n    });\n\n    // ---- 工具函数 ----\n\n    const waitForElement = async (selector: string, timeout = 10000): Promise<Locator | null> => {\n        try {\n            const element = page.locator(selector);\n            await element.waitFor({ state: \"visible\", timeout });\n            return element;\n        } catch {\n            task.logger?.warn(`元素未找到: ${selector}`);\n            return null;\n        }\n    };\n\n    const retryAction = async <T>(action: () => Promise<T>, maxRetries = 3, delay = 1000): Promise<T> => {\n        let lastError: Error | undefined;\n        for (let i = 0; i < maxRetries; i++) {\n            try {\n                return await action();\n            } catch (error) {\n                lastError = error as Error;\n                task.logger?.warn(`重试 ${i + 1}/${maxRetries}: ${lastError.message}`);\n                if (i < maxRetries - 1) {\n                    await page.waitForTimeout(delay);\n                }\n            }\n        }\n        throw lastError;\n    };\n\n    const safeClick = async (locator: Locator | null): Promise<boolean> => {\n        if (!locator) return false;\n        try {\n            await locator.click({ timeout: 5000 });\n            return true;\n        } catch (error) {\n            task.logger?.warn(`点击失败: ${error}`);\n            return false;\n        }\n    };\n\n    const safeFill = async (locator: Locator | null, text: string): Promise<boolean> => {\n        if (!locator || !text) return false;\n        try {\n            await locator.clear({ timeout: 3000 });\n            await locator.fill(text, { timeout: 5000 });\n            return true;\n        } catch (error) {\n            task.logger?.warn(`填充文本失败: ${error}`);\n            return false;\n        }\n    };\n\n    // ---- 自动化脚本 ----\n\n    // 等待登录成功\n    try {\n        task.logger?.info(\"检查登录状态...\");\n        await page.waitForSelector(\"#micro\", {\n            state: \"visible\",\n            timeout: 20000,\n        });\n        task.logger?.info(\"✓ 登录状态正常\");\n    } catch (_error) {\n        task.logger?.error(\"✗ 登录失效或页面加载异常\");\n        await updateTaskState?.({ state: TaskState.FAILED, error: \"登录失效\" });\n        return { code: 414, message: \"登录失效\", data: page.url() };\n    }\n\n    // 获取已下载图片\n    const images = await imagePromise;\n    task.logger?.info(`==>图片下载完成，共 ${images.length} 张，开始上传图片...`);\n\n    // 上传图片\n    if (images.length > 0) {\n        await retryAction(async () => {\n            const fileChooser = await page.waitForSelector('input[type=\"file\"]', { timeout: 20000 });\n            if (!fileChooser) {\n                throw new Error(\"未找到图片上传输入框\");\n            }\n            await fileChooser.setInputFiles(images);\n            task.logger?.info(`图片上传成功: ${images.length} 张`);\n            await page.waitForTimeout(2000);\n        });\n    }\n\n    // 填写标题\n    if (params.title) {\n        task.logger?.info(`填写标题: ${params.title}`);\n        await retryAction(async () => {\n            const titleInstance = await waitForElement(\".semi-input-wrapper input[placeholder='添加作品标题']\", 50000);\n            if (!titleInstance) {\n                throw new Error(\"未找到标题输入框\");\n            }\n            await titleInstance.click({ timeout: 5000 });\n            await safeFill(titleInstance, params.title);\n            task.logger?.info(\"标题填写完成\");\n        });\n    }\n\n    // 填写描述\n    if (params.content) {\n        task.logger?.info(\"填写描述\");\n        await page.waitForTimeout(1000);\n        await retryAction(async () => {\n            const descInstance = await waitForElement(\"div[data-placeholder='添加作品描述...']\", 10000);\n            if (!descInstance) {\n                throw new Error(\"未找到描述编辑器\");\n            }\n            await descInstance.click({ timeout: 5000 });\n            await page.waitForTimeout(500);\n            const cleanContent = params.content.replace(/#.*?\\[.*?]#/g, \"\");\n            await descInstance.fill(cleanContent);\n            await page.keyboard.press(\"Control+End\");\n            task.logger?.info(\"描述填写完成\");\n        });\n    }\n\n    // 添加话题标签\n    if (params.topic && params.topic.length > 0) {\n        task.logger?.info(`添加话题标签: ${params.topic.length} 个`);\n        try {\n            const topics = params.topic;\n            await retryAction(async () => {\n                // const descInstance = page.locator(\".editor-kit-container.editor.editor-comp-publish\");\n                for (const topic of topics) {\n                    if (topic.cha_name) {\n                        const topicTag = `#${topic.cha_name} `;\n                        await page.keyboard.type(topicTag);\n                        task.logger?.info(`已添加话题: ${topicTag.trim()}`);\n                        await page.waitForTimeout(300);\n                    }\n                }\n                task.logger?.info(\"✓ 话题标签添加完成\");\n            });\n        } catch (error) {\n            task.logger?.warn(`添加话题标签失败: ${error}`);\n        }\n    }\n\n    // 选择合集\n    if (params.mix?.mix_name) {\n        task.logger?.info(`选择合集: ${params.mix.mix_name}`);\n        try {\n            const instanceCollection = page.locator(\"[class^='mix-sel-wrap'] .semi-select\").nth(1);\n            await instanceCollection.click({ timeout: 5000 });\n            await page.waitForTimeout(2000);\n            await page\n                .locator(\".semi-select-option-list .semi-select-option\")\n                .filter({ hasText: params.mix.mix_name })\n                .first()\n                .click({ force: true, timeout: 5000 });\n        } catch (error) {\n            task.logger?.warn(`选择合集失败: ${error}`);\n        }\n    }\n\n    // 选择合集集数\n    if (params.mix?.mix_order_name) {\n        task.logger?.info(`选择合集集数: ${params.mix.mix_order_name}`);\n        try {\n            const instanceCollection = page.locator(\"[class^='mix-sel-wrap'] .semi-select\").nth(2);\n            await instanceCollection.click({ timeout: 5000 });\n            await page.waitForTimeout(2000);\n            await page\n                .locator(\".mix-order-dropdown .semi-select-option\")\n                .filter({ hasText: params.mix.mix_order_name })\n                .first()\n                .click({ force: true, timeout: 5000 });\n        } catch (error) {\n            task.logger?.warn(`选择合集集数失败: ${error}`);\n        }\n    }\n\n    // 选择音乐\n    if (params.musicId && params.musicName) {\n        task.logger?.info(`选择音乐: ${params.musicName} - ${params.musicAuthor || \"\"}`);\n        try {\n            await retryAction(async () => {\n                const musicTrigger = await waitForElement(\"[class^='container-right-']\", 10000);\n                if (!musicTrigger) throw new Error(\"未找到音乐选择触发器\");\n                await musicTrigger.click({ timeout: 5000 });\n                task.logger?.info(\"已打开音乐选择面板\");\n                await page.waitForTimeout(1000);\n\n                const searchBox = await waitForElement(\"[class^='music-search']\", 10000);\n                if (!searchBox) throw new Error(\"未找到音乐搜索框\");\n                await searchBox.click({ timeout: 5000 });\n                await page.waitForTimeout(500);\n\n                const searchInput = page.locator(\"[class^='music-search'] input\");\n                const searchText = params.musicAuthor\n                    ? `${params.musicName} - ${params.musicAuthor}`\n                    : params.musicName;\n                await searchInput.fill(searchText || \"\");\n                task.logger?.info(`已输入搜索内容: ${searchText}`);\n                await page.waitForTimeout(300);\n                await searchInput.press(\"Enter\");\n                task.logger?.info(\"已触发搜索\");\n                await page.waitForTimeout(4000);\n\n                const musicCards = page.locator(\"[class^='card-container-']\");\n                const matchedCard = musicCards.filter({ hasText: params.musicName }).first();\n                const cardCount = await matchedCard.count();\n                if (cardCount === 0) throw new Error(`未找到匹配的音乐: ${params.musicName}`);\n\n                task.logger?.info(\"找到匹配的音乐，准备选择\");\n                await matchedCard.hover();\n                await page.waitForTimeout(2000);\n\n                const selectButton = matchedCard.locator(\".semi-button\").first();\n                const buttonClicked = await safeClick(selectButton);\n                if (!buttonClicked) throw new Error(\"点击音乐选择按钮失败\");\n\n                task.logger?.info(\"✓ 音乐选择完成\");\n                await page.waitForTimeout(500);\n            });\n        } catch (error) {\n            task.logger?.warn(`选择音乐失败: ${error}`);\n        }\n    }\n\n    // 选择热点\n    if (params.hotSentence) {\n        task.logger?.info(`选择热点: ${params.hotSentence}`);\n        try {\n            const instance = page.locator(\".semi-select-filterable\").nth(1);\n            await instance.click({ timeout: 5000 });\n            await page.waitForTimeout(1000);\n            await page.locator(\".semi-input-wrapper input\").nth(1).fill(params.hotSentence);\n            await page.waitForTimeout(2000);\n            await page\n                .locator(\".semi-popover-content .semi-select-option\")\n                .filter({ hasText: params.hotSentence })\n                .first()\n                .click({ force: true, timeout: 5000 });\n        } catch (error) {\n            task.logger?.warn(`选择热点失败: ${error}`);\n        }\n    }\n\n    // 设置可见范围\n    if (params.visibleRange) {\n        task.logger?.info(`设置可见范围: ${params.visibleRange}`);\n        try {\n            if (params.visibleRange === \"2\") {\n                await page.locator(\"label:has-text('好友可见')\").first().click({ timeout: 5000 });\n                task.logger?.info(\"已设置为好友可见\");\n            } else if (params.visibleRange === \"1\") {\n                await page.locator(\"label:has-text('仅自己可见')\").first().click({ timeout: 5000 });\n                task.logger?.info(\"已设置为仅自己可见\");\n            }\n        } catch (error) {\n            task.logger?.warn(`设置可见范围失败: ${error}`);\n        }\n    }\n\n    // 设置保存权限\n    if (!params.allowSave) {\n        task.logger?.info(\"设置保存权限：不允许\");\n        try {\n            await page.locator(\"label:has-text('不允许')\").first().click({ timeout: 5000 });\n            task.logger?.info(\"已设置为不允许保存\");\n            await page.waitForTimeout(300);\n        } catch (error) {\n            task.logger?.warn(`设置保存权限失败: ${error}`);\n        }\n    }\n\n    // 设置定时发布\n    if (!params.isImmediatelyPublish && params.scheduledPublish) {\n        task.logger?.info(\"设置定时发布\");\n        try {\n            await page.locator('label:has-text(\"定时发布\")').first().click({ timeout: 5000 });\n            task.logger?.info(\"已选择定时发布\");\n            await page.waitForTimeout(500);\n\n            const timestamp =\n                params.scheduledPublish > 10000000000 ? params.scheduledPublish / 1000 : params.scheduledPublish;\n            const publishDate = new Date(timestamp * 1000);\n\n            const year = publishDate.getFullYear();\n            const month = String(publishDate.getMonth() + 1).padStart(2, \"0\");\n            const day = String(publishDate.getDate()).padStart(2, \"0\");\n            const hour = String(publishDate.getHours()).padStart(2, \"0\");\n            const minute = String(publishDate.getMinutes()).padStart(2, \"0\");\n            const formattedTime = `${year}-${month}-${day} ${hour}:${minute}`;\n\n            task.logger?.info(`目标发布时间: ${formattedTime}`);\n\n            const releaseTimeInstance = await waitForElement(\n                \".semi-datepicker-input input[placeholder='日期和时间']\",\n                10000,\n            );\n            if (!releaseTimeInstance) throw new Error(\"未找到时间输入框\");\n\n            await releaseTimeInstance.click({ timeout: 5000 });\n            await page.waitForTimeout(500);\n            await releaseTimeInstance.fill(formattedTime);\n            await page.waitForTimeout(500);\n\n            const inputValue = await releaseTimeInstance.inputValue();\n            if (inputValue !== formattedTime) {\n                task.logger?.warn(`时间输入验证失败，期望: ${formattedTime}, 实际: ${inputValue}`);\n            } else {\n                task.logger?.info(\"定时发布设置完成\");\n            }\n            await releaseTimeInstance.blur();\n            await page.waitForTimeout(500);\n        } catch (error) {\n            task.logger?.warn(`定时发布设置失败: ${error}`);\n        }\n    }\n\n    // 模拟发布（测试用）\n    if (MockPublish) {\n        const message = \"文章模拟发布成功\";\n        const data = \"mock_item_id\";\n        await updateTaskState?.({\n            state: TaskState.SUCCESS,\n            result: { response: data },\n        });\n        return success(data, message);\n    }\n\n    // 点击发布按钮并监听接口响应\n    task.logger?.info(\"准备发布...\");\n    await page.waitForTimeout(1000);\n\n    interface PublishResult {\n        itemId: string;\n        decision: ParsedVerifyDecision | null;\n    }\n\n    const result = await new Promise<PublishResult>((resolve, reject) => {\n        const handleResponse = async (res: Response) => {\n            if (res.url().includes(\"/web/api/media/aweme/create_v2\")) {\n                task.logger?.info(\"匹配到发布接口响应\");\n\n                // 解析二次验证决策头：抖音要求二次验证时仍返回 status_code === 0，\n                // 真正的信号在 x-tt-verify-passport-decision 响应头（account_flow === \"verify\"），\n                // 此时文章并未真正发布，必须按失败处理。\n                let decision: ParsedVerifyDecision | null = null;\n                try {\n                    const headers = await res.allHeaders();\n                    decision = parseVerifyPassportDecision(headers[\"x-tt-verify-passport-decision\"]);\n                } catch (error) {\n                    task.logger?.warn(`解析验证决策头失败: ${error}`);\n                }\n\n                const jsonResponse = await res.json();\n                task.logger?.info(`发布接口响应数据: ${JSON.stringify(jsonResponse)}`);\n                page.off(\"response\", handleResponse);\n\n                if (needsVerification(decision)) {\n                    task.logger?.warn(\"检测到需要二次验证，文章未真正发布\");\n                    resolve({ itemId: \"\", decision });\n                    return;\n                }\n\n                if (jsonResponse?.status_code !== 0) {\n                    reject(new Error(jsonResponse?.status_msg || \"发布失败\"));\n                    return;\n                }\n\n                // status_code === 0 但缺少 item_id 视为未真正发布，不能误判为成功\n                const itemId = jsonResponse?.data?.item_id || jsonResponse?.item_id || \"\";\n                if (!itemId) {\n                    reject(new Error(jsonResponse?.status_msg || \"发布异常：未返回作品ID，文章可能未真正发布\"));\n                    return;\n                }\n\n                resolve({ itemId, decision: null });\n            }\n        };\n\n        page.on(\"response\", handleResponse);\n\n        setTimeout(() => {\n            page.locator(\"#DCPF button:has-text('发布')\").first().click();\n            task.logger?.info(\"发布按钮已点击\");\n        }, 1000);\n\n        // 整体超时保护\n        setTimeout(() => {\n            page.off(\"response\", handleResponse);\n            reject(new Error(\"发布超时，未收到接口响应\"));\n        }, 30000);\n    }).catch(async (err) => {\n        const msg = `发布失败：${err?.message || \"未知错误\"}`;\n        task.logger?.error(msg);\n        await updateTaskState?.({ state: TaskState.FAILED, error: msg });\n        await page.close();\n        return null;\n    });\n\n    if (!result) {\n        return { code: 414, message: \"发布失败\", data: \"\" };\n    }\n\n    // 需要二次验证：文章未真正发布，返回验证信息供上层触发扫码验证流程\n    if (needsVerification(result.decision)) {\n        const decision = result.decision;\n        const details = [decision?.verify_title, decision?.verify_desc].filter(Boolean).join(\" \");\n        const message = `[douyinPublish rpa-server]发布失败，需要二次验证${details ? `：${details}` : \"\"}`;\n        task.logger?.warn(message);\n        await updateTaskState?.({\n            state: TaskState.FAILED,\n            error: message,\n            result: { data: decision },\n        });\n        await page.close();\n        return { code: 414, message, data: \"\" };\n    }\n\n    task.logger?.info(`✓ 发布成功，item_id: ${result.itemId}`);\n\n    await updateTaskState?.({\n        state: TaskState.SUCCESS,\n        result: { response: result.itemId },\n    });\n\n    await page.close();\n    return success(result.itemId);\n};\n","import type { CommonAction } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport { ActionCommonParamsSchema } from \"../../types\";\nimport { executeAction } from \"../../utils\";\nimport { mockAction } from \"./mock\";\nimport { rpaAction } from \"./rpa\";\nimport { rpaAction_Server } from \"./rpa-server\";\n\nexport const DouyinPublishParamsSchema = ActionCommonParamsSchema.extend({\n    title: z.string(), // 标题\n    content: z.string(), // 正文(\"标题。正文\")\n    textExtra: z.string(),\n    topic: z\n        .array(\n            z.object({\n                cha_name: z.string(),\n                cid: z.string(),\n                view_count: z.string().optional(),\n                group_id: z.string().optional(),\n                tag: z.number().optional(),\n                state: z.string().optional(),\n            }),\n        )\n        .optional(), // 话题\n    coverImage: z.string().optional(), // 封面图片\n    banners: z.array(z.string()), // 图片URL字符串数组\n    mix: z\n        .object({\n            mix_id: z.string(),\n            mix_order: z.number(),\n            mix_name: z.string().optional(),\n            mix_order_name: z.string().optional(),\n        })\n        .optional(), //合集id 合集的顺序 合集名称 合集集数名称\n    musicId: z.string().optional(), // 音乐Id\n    musicName: z.string().optional(), // 音乐名称\n    musicAuthor: z.string().optional(), // 音乐作者\n    musicDuration: z.number().optional(), // 音乐时长\n    challengeIds: z.string().optional(), // 话题Ids的cid字符串数组\n    // hashtagSource: z.string(),\n    hotSentence: z.string().optional(), // 热点\n    proxyLoc: z.string().optional(), // 代理位置\n    localIP: z.string().optional(), // 用户ip\n    visibleRange: z.enum([\"0\", \"1\", \"2\"]).optional(), // 可见范围 0-公开 1-仅自己可见 2-好友可见\n    isImmediatelyPublish: z.boolean().optional(), // 是否立即发布\n    scheduledPublish: z.number().optional(), // 定时发布时间，时间戳类型\n    allowSave: z.boolean().optional(), // 是否允许保存 保存权限,\n    publishType: z.enum([\"1\", \"2\", \"3\", \"4\"]).optional(), // 发布类型 1：发布视频 2：发布图文 3：发布全景视频 4：发布文章\n    extraParam: z.object({\n        \"security-sdk/s_sdk_pri_key\": z.string(), // 必填\n        \"security-sdk/s_sdk_pub_key\": z.string(), // 必填\n        \"security-sdk/s_sdk_sign_data_key/web_protect\": z.string(), // 必填\n        \"security-sdk/s_sdk_crypt_sdk\": z.string(), // 必填\n        \"security-sdk/s_sdk_server_cert_key\": z.string(), // 必填\n        browserInfo: z.object({\n            screen_width: z.string(),\n            screen_height: z.string(),\n            browser_language: z.string(),\n            browser_platform: z.string(),\n            browser_name: z.string(),\n            \"sec-ch-ua-platform\": z.string(),\n            \"sec-ch-ua\": z.string(),\n            userAgent: z.string().optional(),\n        }),\n    }),\n    uploadedImgList: z.string().optional(), // 已上传图片列表，JSON字符串格式，数组元素为图片URL\n});\n\nexport type DouyinPublishParams = z.infer<typeof DouyinPublishParamsSchema>;\n\nexport type PublishAction = CommonAction<DouyinPublishParams, string>;\n\nexport const douyinPublish: PublishAction = async (task, params) => {\n    task.logger.info(`douyinPublish actionType: ${params.actionType}`);\n    if (params.actionType === \"rpa\") {\n        return rpaAction(task, params);\n    }\n\n    if (params.actionType === \"mockApi\") {\n        return mockAction(task, params);\n    }\n\n    if (params.actionType === \"server\") {\n        return rpaAction_Server(task, params);\n    }\n\n    // 优先执行Mock+RPA方案，失败则进入RPA-Server方案\n    return executeAction(mockAction, rpaAction)(task, params);\n};\n","import { type CommonAction, success } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\n\nexport interface GetBaijiahaoActivityParams extends ActiomCommonParams {\n    token: string;\n}\n\nexport interface ActivityData {\n    id: string;\n    task_name: string;\n}\n\nexport type PublishAction = CommonAction<GetBaijiahaoActivityParams, ActivityData[]>;\n\nexport const getBaijiahaoActivity: PublishAction = async (_task, params) => {\n    const cookies = params.cookies ?? [];\n\n    const http = new Http({\n        headers: {\n            cookie: cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            token: params.token,\n        },\n    });\n\n    const res = await http.api<{ data: { list: ActivityData[] } }>({\n        method: \"get\",\n        url: \"https://baijiahao.baidu.com/author/eco/tasksystem/getSquareMissionList\",\n        params: {\n            page_no: 1,\n            page_size: 18,\n            article_type: 1,\n            task_attend: 1,\n            task_origin: \"market\",\n            task_type: -1,\n            from: \"pc_edit\",\n        },\n    });\n\n    return success(res?.data?.list ?? []);\n};\n","import { type CommonAction, success } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport type { ActiomCommonParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\n\nexport interface GetBaijiahaoConfigParams extends ActiomCommonParams {\n    token: string;\n}\n\nexport const ConfigDataSchema = z.object({\n    id: z.string(),\n    name: z.string(),\n    detail: z.string(),\n    is_enable: z.number(),\n    publish_num_left: z.number().nullable().optional(),\n});\n\nexport type ConfigData = z.infer<typeof ConfigDataSchema>;\n\nexport type PublishAction = CommonAction<GetBaijiahaoConfigParams, ConfigData[]>;\n\nexport const getBaijiahaoConfig: PublishAction = async (_task, params) => {\n    const cookies = params.cookies ?? [];\n\n    const http = new Http({\n        headers: {\n            cookie: cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            token: params.token,\n        },\n    });\n\n    const res = await http.api<{\n        data: { article: { activity_list: ConfigData[] }; ability?: { publish_num_left: number } };\n    }>({\n        method: \"get\",\n        url: \"https://baijiahao.baidu.com/pcui/article/edit\",\n        params: {\n            type: \"news\",\n        },\n    });\n    const data: ConfigData[] =\n        res?.data?.article.activity_list.map((_item) => {\n            return {\n                id: _item.id,\n                name: _item.name,\n                detail: _item.detail,\n                is_enable: _item.is_enable,\n            };\n        }) ?? [];\n    res.data?.ability\n        ? data.push({\n              id: \"bjh_publish_num_left\",\n              name: \"账号剩余发文数\",\n              detail: \"\",\n              is_enable: 1,\n              publish_num_left: res.data.ability.publish_num_left,\n          })\n        : null;\n    return success(data, \"获取百家号配置项成功!\");\n};\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { rid } from \"../../utils/shipinhao/utils\";\n\nexport interface GetShipinhaoBgmParams extends ActiomCommonParams {\n    query?: string; // 关键词查询\n    currentPage?: number; // 当前页码\n    pageSize?: number; // 每页数量\n    type?: number; // 音乐类型（103: 推荐，其他值根据实际需求）\n    lastBuffer?: string; // 分页标记\n}\n\nexport interface BgmListResponse {\n    errCode: number;\n    errMsg: string;\n    data: {\n        items: BgmDetail[];\n        lastBuffer: string;\n        totalCount: number;\n    };\n}\n\nexport interface BgmDetail {\n    listenItem: unknown;\n}\n\nexport type GetBgmAction = CommonAction<GetShipinhaoBgmParams, BgmListResponse[\"data\"]>;\n\nexport const getShipinhaoBgm: GetBgmAction = async (_task, params) => {\n    // 验证 extraParam 是否存在\n    if (!params.extraParam) {\n        return response(400, \"缺少 extraParam 参数\", { items: [], lastBuffer: \"\", totalCount: 0 });\n    }\n\n    if (!params.extraParam.fingerPrintDeviceId || !params.extraParam.aId || !params.extraParam.uin) {\n        return response(400, \"fingerPrintDeviceId、aId和uin不能为空\", { items: [], lastBuffer: \"\", totalCount: 0 });\n    }\n\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://channels.weixin.qq.com/micro/content/post/finderNewLifeCreate\",\n        origin: \"https://channels.weixin.qq.com\",\n        \"content-type\": \"application/json\",\n        \"finger-print-device-id\": params.extraParam.fingerPrintDeviceId,\n        \"x-wechat-uin\": params.extraParam.uin,\n    };\n\n    const http = new Http({\n        headers,\n    });\n\n    const urlParams = new URLSearchParams({\n        _aid: params.extraParam.aId,\n        _rid: rid(),\n        _pageUrl: \"https://channels.weixin.qq.com/micro/content/post/finderNewLifeCreate\",\n    }).toString();\n\n    const requestData = {\n        currentPage: params.currentPage ?? 1,\n        lastBuffer: params.lastBuffer || \"\",\n        pageSize: params.pageSize ?? 5,\n        type: params.type ?? 103, // 有query时使用搜索模式104，否则使用推荐模式103\n        recommendThumbUrlList: [],\n        query: params.query || \"\", // 添加关键词查询参数\n        timestamp: Date.now().toString(),\n        _log_finder_uin: \"\",\n        _log_finder_id: params.extraParam.finderUserName || \"\",\n        rawKeyBuff: null,\n        pluginSessionId: null,\n        scene: 7,\n        reqScene: 7,\n    };\n\n    const res = await http.api<BgmListResponse>({\n        method: \"post\",\n        url: `https://channels.weixin.qq.com/micro/content/cgi-bin/mmfinderassistant-bin/post/get_bgm_list?${urlParams}`,\n        data: requestData,\n    });\n\n    const isSuccess = res?.errCode === 0;\n\n    return response(isSuccess ? 0 : 414, res?.errMsg, res.data);\n};\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { rid } from \"../../utils/shipinhao/utils\";\n\nexport interface GetShipinhaoBgmCategoryParams extends ActiomCommonParams {}\n\nexport interface BgmCategoryListResponse {\n    errCode: number;\n    errMsg: string;\n    data: BgmCategoryDetail[];\n}\n\nexport interface BgmCategoryDetail {\n    items: {\n        categoryId: string;\n        categoryName: string;\n    };\n}\n\nexport type GetBgmCategoryAction = CommonAction<GetShipinhaoBgmCategoryParams, BgmCategoryDetail[]>;\n\nexport const getShipinhaoBgmCategory: GetBgmCategoryAction = async (_task, params) => {\n    // 验证 extraParam 是否存在\n    if (!params.extraParam) {\n        return response(400, \"缺少 extraParam 参数\", []);\n    }\n\n    if (!params.extraParam.fingerPrintDeviceId || !params.extraParam.aId || !params.extraParam.uin) {\n        return response(400, \"fingerPrintDeviceId、aId和uin不能为空\", []);\n    }\n\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://channels.weixin.qq.com/micro/content/post/finderNewLifeCreate\",\n        origin: \"https://channels.weixin.qq.com\",\n        \"content-type\": \"application/json\",\n        \"finger-print-device-id\": params.extraParam.fingerPrintDeviceId,\n        \"x-wechat-uin\": params.extraParam.uin,\n    };\n\n    const http = new Http({\n        headers,\n    });\n\n    const urlParams = new URLSearchParams({\n        _aid: params.extraParam.aId,\n        _rid: rid(),\n        _pageUrl: \"https://channels.weixin.qq.com/micro/content/post/finderNewLifeCreate\",\n    }).toString();\n\n    const requestData = {\n        timestamp: Date.now().toString(),\n        _log_finder_uin: \"\",\n        _log_finder_id: params.extraParam.finderUserName || \"\",\n        rawKeyBuff: null,\n        pluginSessionId: null,\n        scene: 7,\n        reqScene: 7,\n    };\n\n    const res = await http.api<BgmCategoryListResponse>({\n        method: \"post\",\n        url: `https://channels.weixin.qq.com/micro/content/cgi-bin/mmfinderassistant-bin/post/get_bgm_category_list?${urlParams}`,\n        data: requestData,\n    });\n\n    const isSuccess = res?.errCode === 0;\n\n    return response(isSuccess ? 0 : 414, res?.errMsg, res.data);\n};\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { rid } from \"../../utils/shipinhao/utils\";\n\nexport interface GetShipinhaoCollectionParams extends ActiomCommonParams {\n    pageNum?: number;\n    pageSize?: number;\n}\n\nexport interface CollectionDetailResponse {\n    data: {\n        baseResp: { errcode: number };\n        collectionList: CollectionDetail[];\n        collectionListCount: number;\n        hasHomepageTab: boolean;\n    };\n    errCode: number;\n    errMsg: string;\n}\n\nexport interface CollectionDetail {\n    id: string;\n    name: string;\n    desc: string;\n    coverImgUrl: string;\n    createTime: number;\n    totalReadCount: string;\n    feedCount: number;\n    spamFlag: number;\n    closeTime: number;\n    lastUpdateTime: number;\n    invalidFeedCount: number;\n    updateCoverUrlMaxCount: number;\n    updateCoverUrlRemainCount: number;\n    collectionType: number;\n    auditOperRecommendFlag: number;\n    showStatus: number;\n    categoryInfo: {\n        categoryId: string;\n        categoryName: string;\n    };\n    courseInfo: {\n        price: number;\n        freeRange: number;\n    };\n    updateNameMaxCount: number;\n    updateNameRemainCount: number;\n    stickyOpStatus: number;\n    missEpisodesInfo: {\n        missEpisodeItems: any[];\n        totalMissEpisodes: number;\n    };\n}\n\nexport type PublishAction = CommonAction<GetShipinhaoCollectionParams, CollectionDetailResponse[\"data\"]>;\n\nexport const getShipinhaoCollection: PublishAction = async (_task, params) => {\n    // 验证 extraParam 是否存在\n    if (!params.extraParam) {\n        return response(400, \"缺少 extraParam 参数\", {\n            baseResp: { errcode: -1 },\n            collectionList: [],\n            collectionListCount: 0,\n            hasHomepageTab: false,\n        });\n    }\n\n    if (!params.extraParam.fingerPrintDeviceId || !params.extraParam.aId || !params.extraParam.uin) {\n        return response(400, \"fingerPrintDeviceId、aId和uin不能为空\", {\n            baseResp: { errcode: -1 },\n            collectionList: [],\n            collectionListCount: 0,\n            hasHomepageTab: false,\n        });\n    }\n\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://channels.weixin.qq.com/platform/post/finderNewLifeCreate\",\n        origin: \"https://channels.weixin.qq.com\",\n        \"content-type\": \"application/json\",\n        \"finger-print-device-id\": params.extraParam.fingerPrintDeviceId,\n        \"x-wechat-uin\": params.extraParam.uin,\n    };\n\n    const http = new Http({\n        headers,\n    });\n\n    const urlParams = new URLSearchParams({\n        _aid: params.extraParam.aId,\n        _rid: rid(),\n        _pageUrl: \"https://channels.weixin.qq.com/platform/post/finderNewLifeCreate\",\n    }).toString();\n\n    const requestData = {\n        pageNum: params.pageNum ?? 1,\n        pageSize: params.pageSize ?? 20,\n        timestamp: Date.now().toString(),\n        _log_finder_uin: \"\",\n        _log_finder_id: params.extraParam.finderUserName || \"\",\n        rawKeyBuff: null,\n        pluginSessionId: null,\n        scene: 7,\n        reqScene: 7,\n    };\n\n    const res = await http.api<CollectionDetailResponse>({\n        method: \"post\",\n        url: `https://channels.weixin.qq.com/micro/content/cgi-bin/mmfinderassistant-bin/collection/get_collection_list?${urlParams}`,\n        data: requestData,\n    });\n\n    const isSuccess = res.errCode === 0;\n\n    return response(isSuccess ? 0 : 414, res.errMsg, res.data);\n};\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { rid } from \"../../utils/shipinhao/utils\";\n\nexport interface GetShipinhaoCommentListParams extends ActiomCommonParams {\n    lastBuff?: string; // 分页标记\n    exportId?: string; // 导出ID\n}\n\nexport interface CommentListResponse {\n    errCode: number;\n    errMsg: string;\n    data: {\n        list: CommentDetail[];\n        totalCount: number;\n        hasMore: boolean;\n    };\n}\n\nexport interface CommentDetail {\n    commentId: string;\n    content: string;\n    createTime: number;\n    likeCount: number;\n    replyCount: number;\n    userName: string;\n    userAvatar: string;\n}\n\nexport type GetCommentListAction = CommonAction<GetShipinhaoCommentListParams, CommentListResponse[\"data\"]>;\n\nexport const getShipinhaoCommentList: GetCommentListAction = async (_task, params) => {\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://channels.weixin.qq.com/micro/interaction/comment\",\n        origin: \"https://channels.weixin.qq.com\",\n        \"content-type\": \"application/json\",\n        \"finger-print-device-id\": params.extraParam.fingerPrintDeviceId,\n        \"x-wechat-uin\": params.extraParam.uin,\n    };\n\n    const http = new Http({\n        headers,\n    });\n\n    const urlParams = new URLSearchParams({\n        _aid: params.extraParam.aId,\n        _rid: rid(),\n        _pageUrl: \"https://channels.weixin.qq.com/micro/interaction/comment\",\n    }).toString();\n\n    const requestData = {\n        lastBuff: params.lastBuff || \"\",\n        exportId: params.exportId || \"\",\n        commentSelection: false,\n        forMcn: false,\n        timestamp: Date.now().toString(),\n        _log_finder_uin: \"\",\n        _log_finder_id: params.extraParam?.finderUserName || \"\",\n        rawKeyBuff: null,\n        pluginSessionId: null,\n        scene: 7,\n        reqScene: 7,\n    };\n\n    const res = await http.api<CommentListResponse>({\n        method: \"post\",\n        url: `https://channels.weixin.qq.com/micro/interaction/cgi-bin/mmfinderassistant-bin/comment/comment_list?${urlParams}`,\n        data: requestData,\n    });\n\n    console.log(res, \"----res\");\n\n    const isSuccess = res?.errCode === 0;\n\n    return response(isSuccess ? 0 : 414, res?.errMsg, res.data);\n};\n","import { type CommonAction, success } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\n\nexport interface GetShipinhaoConfigParams extends ActiomCommonParams {}\n\nexport interface ConfigData {\n    accountInfo: {\n        nickname: string;\n        avatar: string;\n        finder_username: string;\n    };\n    publishQuota: {\n        daily_limit: number;\n        used_today: number;\n        remaining: number;\n    };\n}\n\nexport type PublishAction = CommonAction<GetShipinhaoConfigParams, ConfigData>;\n\nexport const getShipinhaoConfig: PublishAction = async (_task, params) => {\n    const http = new Http({\n        headers: {\n            cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            referer: \"https://channels.weixin.qq.com/platform/post/finderNewLifeCreate\",\n            origin: \"https://channels.weixin.qq.com\",\n        },\n    });\n\n    // 生成 UUID 和短 ID\n    const WEIXIN_VIDEO_AID = \"e48c8258-e782-483a-bcb1-be248537988f\";\n    const generateRid = () => {\n        const s = () => Math.random().toString(36).substring(2, 10);\n        return `${s()}-${s()}`;\n    };\n\n    const res = await http.api<any>({\n        method: \"get\",\n        url: \"https://channels.weixin.qq.com/micro/content/cgi-bin/mmfinderassistant-bin/account/get_account_info\",\n        params: {\n            _aid: WEIXIN_VIDEO_AID,\n            _rid: generateRid(),\n            _pageUrl: \"https://channels.weixin.qq.com/micro/content/post/finderNewLifeCreate\",\n        },\n    });\n\n    const configData: ConfigData = {\n        accountInfo: res.account_info || {},\n        publishQuota: res.publish_quota || {},\n    };\n\n    return success(\n        configData,\n        res.base_resp?.ret === 0 ? \"微信视频号配置信息获取成功！\" : \"微信视频号配置信息获取失败！\",\n    );\n};\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { rid } from \"../../utils/shipinhao/utils\";\n\nexport interface GetShipinhaoPostListParams extends ActiomCommonParams {\n    lastBuff?: string; // 分页标记\n    pageSize?: number; // 每页数量\n    userpageType?: number; // 内容类型 12-图文 默认12\n}\n\nexport interface PostListResponse {\n    errCode: number;\n    errMsg: string;\n    data: {\n        list: PostDetail[];\n        totalCount: number;\n        hasMore: boolean;\n    };\n}\n\nexport interface PostDetail {\n    postId: string;\n    title: string;\n    createTime: number;\n    status: number;\n    coverUrl: string;\n    readCount: number;\n    likeCount: number;\n    commentCount: number;\n}\n\nexport type GetPostListAction = CommonAction<GetShipinhaoPostListParams, PostListResponse[\"data\"]>;\n\nexport const getShipinhaoPostList: GetPostListAction = async (_task, params) => {\n    // 验证 extraParam 是否存在\n    if (!params.extraParam) {\n        return response(400, \"缺少 extraParam 参数\", { list: [], totalCount: 0, hasMore: false });\n    }\n\n    if (!params.extraParam.fingerPrintDeviceId || !params.extraParam.aId || !params.extraParam.uin) {\n        return response(400, \"fingerPrintDeviceId、aId和uin不能为空\", { list: [], totalCount: 0, hasMore: false });\n    }\n\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://channels.weixin.qq.com/micro/interaction/post\",\n        origin: \"https://channels.weixin.qq.com\",\n        \"content-type\": \"application/json\",\n        \"finger-print-device-id\": params.extraParam.fingerPrintDeviceId,\n        \"x-wechat-uin\": params.extraParam.uin,\n    };\n\n    const http = new Http({\n        headers,\n    });\n\n    const urlParams = new URLSearchParams({\n        _aid: params.extraParam.aId,\n        _rid: rid(),\n        _pageUrl: \"https://channels.weixin.qq.com/micro/interaction/comment\",\n    }).toString();\n\n    const requestData = {\n        pageSize: params.pageSize ?? 10,\n        onlyUnread: false,\n        needAllCommentCount: true,\n        userpageType: params.userpageType ?? 12, // 图文\n        forMcn: false,\n        lastBuff: params.lastBuff || \"\",\n        timestamp: Date.now().toString(),\n        _log_finder_uin: \"\",\n        _log_finder_id: params.extraParam?.finderUserName || \"\",\n        rawKeyBuff: null,\n        pluginSessionId: null,\n        scene: 7,\n        reqScene: 7,\n    };\n\n    const res = await http.api<PostListResponse>({\n        method: \"post\",\n        url: `https://channels.weixin.qq.com/micro/interaction/cgi-bin/mmfinderassistant-bin/post/post_list?${urlParams}`,\n        data: requestData,\n    });\n    console.log(res, \"-----res\");\n\n    const isSuccess = res?.errCode === 0;\n\n    return response(isSuccess ? 0 : 414, res?.errMsg, res.data);\n};\n","import { type CommonAction, success } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\n\nexport interface GetToutiaoCollectionParams extends ActiomCommonParams {}\n\nexport interface GetToutiaoCollectionResult {\n    id: string;\n    collection_attr: {\n        title: string;\n        cover_image: {\n            url: string;\n            uri: string;\n            width: number;\n            height: number;\n            mime_type: string;\n        };\n        item_status: number;\n        visibility_level: number;\n        create_time: string;\n        suppress_reason: string;\n        user_id: string;\n    };\n    collection_stat: {\n        impression_count: string;\n        go_detail_count: string;\n        repin_count: string;\n        forward_count: string;\n    };\n    menu_list: {\n        show_delete: boolean;\n        show_modify: boolean;\n        show_hide: boolean;\n        forbid_delete_reason: string;\n        forbid_modify_reason: string;\n        forbid_hide_reason: string;\n    };\n    sub_item_count: number;\n    item_status_desc: string;\n}\n\nexport type PublishAction = CommonAction<GetToutiaoCollectionParams, GetToutiaoCollectionResult[]>;\n\nexport const getToutiaoCollection: PublishAction = async (_task, params) => {\n    const cookies = params.cookies ?? [];\n\n    const http = new Http({\n        headers: {\n            cookie: cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            referer: \"https://mp.toutiao.com/profile_v4/graphic/publish\",\n        },\n    });\n\n    const res = await http.api<{ code: number; data: GetToutiaoCollectionResult[]; total_count: number }>({\n        method: \"get\",\n        url: \"https://mp.toutiao.com/mp/fe_api/collection/list\",\n        params: {\n            page_num: 0,\n            page_size: 100,\n            need_sub_item_count: true,\n        },\n    });\n\n    return success(res.code === 0 ? res.data : [], res.code === 0 ? \"获取头条号合集成功！\" : \"获取头条号合集失败！\");\n};\n","import { type CommonAction, success } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams, Toutiao } from \"../../types\";\nimport { Http } from \"../../utils/http\";\n\nexport interface GetToutiaoConfigParams extends ActiomCommonParams {}\n\nexport interface GetToutiaoConfigResult {\n    suggestWords: Toutiao.Topic[];\n    cityDistrict: Toutiao.CityDistrict | null;\n    userRights: Toutiao.UserRight[];\n}\n\nexport type PublishAction = CommonAction<GetToutiaoConfigParams, GetToutiaoConfigResult>;\n\nexport const getToutiaoConfig: PublishAction = async (_task, params) => {\n    const cookies = params.cookies ?? [];\n\n    const http = new Http({\n        headers: {\n            cookie: cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            referer: \"https://mp.toutiao.com/profile_v4/graphic/publish\",\n        },\n    });\n\n    const getSuggestWords = async () => {\n        try {\n            const res = await http.api<{ code: number; hots: Toutiao.Topic[] }>({\n                method: \"get\",\n                url: \"https://mp.toutiao.com/mp/agw/creator_helper/suggest_words\",\n                params: { type: 2, words: \"\" },\n            });\n\n            return res.code === 0 ? res.hots : [];\n        } catch (_error) {\n            return [];\n        }\n    };\n\n    const getCityDistrict = async () => {\n        try {\n            const res = await http.api<{ status: number; data: Toutiao.CityDistrict }>({\n                method: \"get\",\n                url: \"https://mp.toutiao.com/toutiao/normandy/mp/city_district/\",\n            });\n            return res.status === 0 ? res.data : null;\n        } catch (_error) {\n            return null;\n        }\n    };\n\n    const getUserRights = async () => {\n        try {\n            const res = await http.api<{ code: number; data: { benefit_level_info_list: Toutiao.UserRight[] } }>({\n                method: \"get\",\n                url: \"https://mp.toutiao.com/mp/agw/creator_project/get_benefit_page_info\",\n            });\n            return res.code === 0 ? res.data.benefit_level_info_list : [];\n        } catch (_error) {\n            return [];\n        }\n    };\n\n    const [suggestWords, cityDistrict, userRights] = await Promise.all([\n        getSuggestWords(),\n        getCityDistrict(),\n        getUserRights(),\n    ]);\n\n    return success({ suggestWords, cityDistrict, userRights });\n};\n","import { type CommonAction, success } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\n\nexport interface GetWeixinCollectionParams extends ActiomCommonParams {\n    token: string | number;\n}\n\nexport interface CollectDetailResponse {\n    base_resp: { err_msg: string; ret: number };\n    list_resp: { items: CollectDetail[]; total: number };\n}\n\nexport interface CollectDetail {\n    continous_read_on: number;\n    cover_url: string;\n    create_time: number;\n    id: string;\n    is_ban: number;\n    is_updating: number;\n    need_pay: number;\n    title: string;\n    total: number;\n    type: number;\n    update_time: number;\n    url: string;\n    uv: number;\n}\n\nexport type PublishAction = CommonAction<GetWeixinCollectionParams, CollectDetail[]>;\n\nexport const getWeixinCollection: PublishAction = async (_task, params) => {\n    const http = new Http({\n        headers: {\n            cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        },\n    });\n    const fingerprint = \"4695500bc93ab4ce8fb2692da6564e04\";\n\n    const res = await http.api<CollectDetailResponse>({\n        method: \"get\",\n        url: \"https://mp.weixin.qq.com/cgi-bin/appmsgalbummgr\",\n        params: {\n            action: \"list\",\n            begin: 0,\n            count: 100,\n            sub_title: \"\",\n            type: 0,\n            latest: 1,\n            need_pay: 0,\n            fingerprint,\n            token: params.token,\n            lang: \"zh_CN\",\n            f: \"json\",\n            ajax: 1,\n        },\n    });\n\n    return success(\n        res.list_resp?.items ?? [],\n        res.base_resp.ret === 0 ? \"微信合计信息获取成功！\" : \"微信合集信息获取失败！\",\n    );\n};\n","import { type CommonAction, success } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\n\nexport interface GetWeixinConfigParams extends ActiomCommonParams {\n    token: string | number;\n}\n\ninterface QuotaDetail {\n    original_quota: number;\n    quota: number;\n    str_date: string;\n}\n\ninterface QuotaDetailResponse {\n    base_resp: { err_msg: string; ret: number };\n    quota_detail_list: { quota_item_list: QuotaDetail; quota_type: string }[];\n}\n\nexport interface ConfigData {\n    publishQuota: QuotaDetail[];\n}\n\nexport type PublishAction = CommonAction<GetWeixinConfigParams, ConfigData>;\n\nexport const getWeixinConfig: PublishAction = async (_task, params) => {\n    const http = new Http({\n        headers: {\n            cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        },\n    });\n    const fingerprint = \"4695500bc93ab4ce8fb2692da6564e04\";\n\n    const res = await http.api<QuotaDetailResponse>({\n        method: \"get\",\n        url: \"https://mp.weixin.qq.com/cgi-bin/masssendpage\",\n        params: {\n            f: \"json\",\n            token: params.token,\n            lang: \"zh_CN\",\n            ajax: 1,\n            fingerprint: fingerprint,\n            random: Math.random().toString(),\n        },\n    });\n    const filtered = {\n        publishQuota:\n            res.base_resp.ret === 0\n                ? res.quota_detail_list\n                      .filter((item) => item.quota_type === \"kQuotaTypeMassSendNormal\")\n                      .map((item) => item.quota_item_list)\n                : [],\n    };\n    return success(filtered, res.base_resp.ret === 0 ? \"微信配置信息获取成功！\" : \"微信配置信息获取失败！\");\n};\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport type { ActiomCommonParams, AxiosProxyParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { Xhshow } from \"../../utils/xhsXsEncrypt\";\n\n// 小红书参数加密器\nconst xsEncrypt = new Xhshow();\n\nexport interface CollectionResponse {\n    success: boolean;\n    result: number;\n    data: {\n        has_more: boolean;\n        collection_info_list: CollectionDetail[];\n    };\n}\n\nexport const CollectionDetailSchema = z.object({\n    id: z.string(),\n    name: z.string(),\n    icon: z.string(),\n    note_num: z.number(),\n    view_num: z.number(),\n    paid: z.number(),\n    type: z.number(),\n    collected: z.boolean(),\n    desc: z.string(),\n    total_episodes: z.number(),\n    create_time: z.number(),\n});\n\nexport type CollectionDetail = z.infer<typeof CollectionDetailSchema>;\n\nexport type PublishAction = CommonAction<ActiomCommonParams, CollectionDetail[]>;\n\nexport const getXhsCollection: PublishAction = async (_task, params) => {\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://creator.xiaohongshu.com\",\n        origin: \"https://creator.xiaohongshu.com\",\n    };\n\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n\n    const http = new Http(...args);\n\n    const a1Cookie = params.cookies.find((it) => it.name === \"a1\")?.value;\n    if (!a1Cookie) return { code: 414, message: \"账号数据异常，请重新绑定账号后重试。\", data: [] };\n    const fatchCollextion = \"/api/sns/v1/note/collection/pc/list_v2\";\n    const recordCookie = params.cookies.reduce<Record<string, string>>((acc, cookie) => {\n        if (cookie.name && cookie.value) {\n            acc[cookie.name] = cookie.value;\n        }\n        return acc;\n    }, {});\n    const colletionData = { cursor: \"\", need_type_list: [0], target_uid: \"\" };\n    const collectionXsHeader = xsEncrypt.signHeadersPost(fatchCollextion, recordCookie, \"xhs-pc-web\", colletionData);\n\n    const res = await http.api<CollectionResponse>(\n        {\n            method: \"POST\",\n            url: \"https://edith.xiaohongshu.com/api/sns/v1/note/collection/pc/list_v2\",\n            data: colletionData,\n            headers: collectionXsHeader,\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n\n    const isSuccess = res.result === 0;\n    const message = `合集信息获取${isSuccess ? \"成功!\" : \"失败!\"}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n    const data = isSuccess ? res.data.collection_info_list : [];\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport type { ActiomCommonParams, AxiosProxyParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { Xhshow } from \"../../utils/xhsXsEncrypt\";\n\n// 小红书参数加密器\nconst xsEncrypt = new Xhshow();\n\nexport interface GroupListResponse {\n    success: boolean;\n    msg: string;\n    data: {\n        group_list: GroupDetail[];\n    };\n    code: number;\n}\n\nexport const GroupDetailSchema = z.object({\n    avatar: z.string(),\n    desc: z.string(),\n    group_id: z.string(),\n    group_name: z.string(),\n    linkable: z.boolean(),\n});\nexport type GroupDetail = z.infer<typeof GroupDetailSchema>;\n\nexport type PublishAction = CommonAction<ActiomCommonParams, GroupDetail[]>;\n\nexport const getXhsGroup: PublishAction = async (_task, params) => {\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://creator.xiaohongshu.com\",\n        origin: \"https://creator.xiaohongshu.com\",\n    };\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    const a1Cookie = params.cookies.find((it) => it.name === \"a1\")?.value;\n    if (!a1Cookie) return { code: 414, message: \"账号数据异常，请重新绑定账号后重试。\", data: [] };\n\n    const groupListParams = { note_id: \"\" };\n    const fatchGroup = \"/api/im/web/nns/group_list\";\n    const recordCookie = params.cookies.reduce<Record<string, string>>((acc, cookie) => {\n        if (cookie.name && cookie.value) {\n            acc[cookie.name] = cookie.value;\n        }\n        return acc;\n    }, {});\n    const searchXsHeader = xsEncrypt.signHeadersGet(fatchGroup, recordCookie, \"xhs-pc-web\", groupListParams);\n\n    const res = await http.api<GroupListResponse>(\n        {\n            method: \"get\",\n            url: \"https://edith.xiaohongshu.com/api/im/web/nns/group_list\",\n            params: groupListParams,\n            headers: searchXsHeader,\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n\n    const isSuccess = res.code === 0;\n    const message = `群聊信息获取${isSuccess ? \"成功\" : `失败，原因：${res.msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n    const data = isSuccess ? res.data.group_list : [];\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams, AxiosProxyParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { Xhshow } from \"../../utils/xhsXsEncrypt\";\n\n// 小红书参数加密器\nconst xsEncrypt = new Xhshow();\n\nexport interface HotTopicResponse {\n    code: number;\n    success: boolean;\n    msg: string;\n    data: {\n        activity_list: HotTopicDetail[];\n    };\n}\n\nexport interface HotTopicDetail {\n    page_id: string;\n    activity_name: string;\n    start_time: number;\n    activity_status: number;\n    capa_deep_link: string;\n    instance_id: number;\n    activity_id: number;\n    end_time: number;\n    picture_link: string;\n    focus_status: number;\n    activity_reward: string;\n    activity_link: string;\n    sort_score: string;\n    pc_post_link: string;\n    topic_infos: [\n        {\n            id: string;\n            name: string;\n            link: string;\n        },\n    ];\n}\n\nexport type PublishAction = CommonAction<ActiomCommonParams, HotTopicDetail[]>;\n\nexport const getXhsHotTopic: PublishAction = async (_task, params) => {\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://creator.xiaohongshu.com\",\n        origin: \"https://creator.xiaohongshu.com\",\n    };\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    const a1Cookie = params.cookies.find((it) => it.name === \"a1\")?.value;\n    if (!a1Cookie) return { code: 414, message: \"账号数据异常，请重新绑定账号后重试。\", data: [] };\n\n    const hotTopicParams = {\n        sort: 1,\n        type: 1,\n        source: 3,\n        topic_activity: 1,\n    };\n    const fatchTopic = \"/api/galaxy/v2/creator/activity_center/list\";\n    const recordCookie = params.cookies.reduce<Record<string, string>>((acc, cookie) => {\n        if (cookie.name && cookie.value) {\n            acc[cookie.name] = cookie.value;\n        }\n        return acc;\n    }, {});\n    const searchXsHeader = xsEncrypt.signHeadersGet(fatchTopic, recordCookie, \"xhs-pc-web\", hotTopicParams);\n\n    const res = await http.api<HotTopicResponse>(\n        {\n            method: \"get\",\n            url: \"https://creator.xiaohongshu.com/api/galaxy/v2/creator/activity_center/list\",\n            params: hotTopicParams,\n            headers: searchXsHeader,\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n\n    const isSuccess = res.code === 0;\n    const message = `热门信息获取${isSuccess ? \"成功\" : `失败，原因：${res.msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n    const data = isSuccess ? res.data.activity_list : [];\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { type CommonAction, success } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport type { ActiomCommonParams, AxiosProxyParams } from \"../../types\";\nimport { DisabledReq } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { Xhshow } from \"../../utils/xhsXsEncrypt\";\n\n// 小红书参数加密器\nconst xsEncrypt = new Xhshow();\n\nexport const UnreadCountSchema = z.object({\n    connections: z.number().nullable(),\n    mentions: z.number().nullable(),\n    unread_count: z.number().nullable(),\n    likes: z.number().nullable(),\n});\n\nexport type UnreadCount = z.infer<typeof UnreadCountSchema>;\n\nexport type PublishAction = CommonAction<ActiomCommonParams, UnreadCount>;\n\nexport const getXhsUnreadCount: PublishAction = async (_task, params) => {\n    if (DisabledReq) return success({ connections: 0, mentions: 0, unread_count: 0, likes: 0 }, \"获取未读消息数成功\");\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://www.xiaohongshu.com/\",\n        origin: \"https://www.xiaohongshu.com\",\n    };\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId, \"xiaohongshu\"];\n    const http = new Http(...args);\n\n    let unreadCount: UnreadCount = {\n        connections: null,\n        mentions: null,\n        unread_count: null,\n        likes: null,\n    };\n\n    const a1Cookie = params.cookies.find((it) => it.name === \"a1\")?.value;\n    if (!a1Cookie) return { code: 414, message: \"账号数据异常，请重新绑定账号后重试。\", data: unreadCount };\n\n    const apiPath = \"/api/sns/web/unread_count\";\n    const recordCookie = params.cookies.reduce<Record<string, string>>((acc, cookie) => {\n        if (cookie.name && cookie.value) {\n            acc[cookie.name] = cookie.value;\n        }\n        return acc;\n    }, {});\n    const requestData = {};\n    const xsHeader = xsEncrypt.signHeadersPost(apiPath, recordCookie, \"xhs-pc-web\", requestData);\n\n    const res = await http.api<{ code: number; msg: string; data: UnreadCount }>(\n        {\n            method: \"GET\",\n            url: \"https://edith.xiaohongshu.com/api/sns/web/unread_count\",\n            data: requestData,\n            headers: xsHeader,\n        },\n        { retries: 3, retryDelay: 300, timeout: 30000 },\n    );\n\n    const isSuccess = res.code === 0;\n    if (isSuccess) unreadCount = res.data;\n    const message = `获取未读消息数${isSuccess ? \"成功\" : `失败，原因：${res.msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n\n    // return response(isSuccess ? 0 : 414, message, unreadCount);\n    return success(unreadCount, message);\n};\n","import { AutomateTask, success } from \"@iflyrpa/share\";\nimport { errorResponse } from \"../../types\";\nimport { TimeFormatter } from \"../../utils\";\nimport { Http } from \"../../utils/http\";\nimport { type SearchAccountInfoParams } from \".\";\nimport { bjhConfigData, SearchAccountInfoResponse } from \"./types\";\n\nexport async function getBaijiahaoData(\n    _task: AutomateTask,\n    params: SearchAccountInfoParams,\n): Promise<SearchAccountInfoResponse> {\n    const { token } = params;\n    if (!token) return errorResponse(\"缺少token\", 414);\n\n    const http = new Http({\n        headers: {\n            cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            token: String(token),\n            Referer: \"https://baijiahao.baidu.com/builder/rc/home\",\n        },\n    });\n\n    const yesterday = TimeFormatter.format(new Date().setDate(new Date().getDate() - 1), \"yyyyMMdd\");\n    const [fansData, readData, incomeData, yesterdayData] = await Promise.all([\n        http.api<{ errno: number; data: { coreData: { fansCount: number } } }>({\n            method: \"get\",\n            url: \"https://baijiahao.baidu.com/pcui/home/index\",\n        }),\n        http.api<{ errno: number; data: { total: { view_count: number } } }>({\n            method: \"get\",\n            url: \"https://baijiahao.baidu.com/author/eco/statistic/getauthorhistory\",\n        }),\n        http.api<{ errno: number; data: { all_income: { total_income: number; yesterday_income: number } } }>({\n            method: \"get\",\n            url: \"https://baijiahao.baidu.com/author/eco/income4/homepageincome\",\n        }),\n        http.api<{\n            errno: number;\n            data: {\n                data: {\n                    recommend_count: number;\n                    view_count: number;\n                    likes_count: number;\n                    comment_count: number;\n                    fans_increase: number;\n                };\n            };\n        }>({\n            method: \"get\",\n            url: \"https://baijiahao.baidu.com/author/eco/statistics/appStatistic\",\n            params: {\n                type: \"all\",\n                is_yesterday: false,\n                start_day: yesterday,\n                end_day: yesterday,\n                stat: 0,\n            },\n        }),\n    ]);\n    if (fansData.errno !== 0 || readData.errno !== 0 || incomeData.errno !== 0 || yesterdayData.errno !== 0) {\n        return errorResponse(\"百家号数据获取失败，请检查账号状态\", 414);\n    }\n\n    const bjhData: bjhConfigData = {\n        fansNum: fansData.data.coreData.fansCount,\n        fansNumYesterday: yesterdayData.data.data.fans_increase === -1 ? null : yesterdayData.data.data.fans_increase,\n        readNum: readData.data.total.view_count,\n        incomeNum: incomeData.data.all_income.total_income,\n        incomeNumYesterday:\n            incomeData.data.all_income.yesterday_income === -1 ? null : incomeData.data.all_income.yesterday_income,\n        recommendNumYesterday:\n            yesterdayData.data.data.recommend_count === -1 ? null : yesterdayData.data.data.recommend_count,\n        readNumYesterday: yesterdayData.data.data.view_count === -1 ? null : yesterdayData.data.data.view_count,\n        likeNumYesterday: yesterdayData.data.data.likes_count === -1 ? null : yesterdayData.data.data.likes_count,\n        commentNumYesterday:\n            yesterdayData.data.data.comment_count === -1 ? null : yesterdayData.data.data.comment_count,\n    };\n\n    return success(bjhData, \"百家号平台数据获取成功！\");\n}\n","import { AutomateTask, success } from \"@iflyrpa/share\";\nimport { AxiosProxyParams, errorResponse } from \"../../types\";\nimport { USER_MESSAGE } from \"../../utils/errorMessages\";\nimport { Http } from \"../../utils/http\";\nimport type { SearchAccountInfoParams } from \".\";\nimport { type douyinConfigData, type SearchAccountInfoResponse } from \"./types\";\n\n/**\n * 抖音账号数据采集\n *\n * 核心接口：\n * 1. 用户完整信息: GET /aweme/v1/web/user/profile/self/\n *    返回 user.follower_count（粉丝）、user.following_count（关注）、user.total_favorited（获赞）等\n * 2. 近7日数据概览: GET /aweme/janus/creator/data/overview/all/?last_days_type=1\n *\n * 注意: 近7日数据接口需要 msToken / a_bogus 动态参数，\n * 建议通过 Playwright 复用已登录浏览器上下文请求（详见文档 3.2）。\n * 此处直接请求，若被风控拦截会返回对应错误，昨日/近7日数据降级为 0。\n */\nexport async function getDouyinData(\n    _task: AutomateTask,\n    params: SearchAccountInfoParams,\n): Promise<SearchAccountInfoResponse> {\n    try {\n        // 验证关键 cookie（参考文档 3.1）\n        const sessionidCookie = params.cookies.find((it) => it.name === \"sessionid\")?.value;\n        if (!sessionidCookie) {\n            return errorResponse(\"抖音账号数据异常，请重新绑定账号后重试。\", 414);\n        }\n\n        // CSRF token（部分接口需要）\n        const csrfToken = params.cookies.find((it) => it.name === \"passport_csrf_token\")?.value || \"\";\n\n        const headers = {\n            cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            referer: \"https://creator.douyin.com/creator-micro/home\",\n            origin: \"https://creator.douyin.com\",\n            \"user-agent\":\n                \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36\",\n            ...(csrfToken ? { \"x-secsdk-csrf-token\": csrfToken } : {}),\n        };\n\n        const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n\n        const http = new Http(...args);\n\n        // 数值解析（文档中的计数字段为字符串，如 \"12345\"、\"+10\"）\n        const toNum = (val: string | number | undefined | null): number => {\n            if (val === undefined || val === null) return 0;\n            const n = Number.parseInt(String(val).replace(/[+,]/g, \"\"), 10);\n            return Number.isNaN(n) ? 0 : n;\n        };\n\n        // 1. 获取用户完整信息（粉丝数、关注数、获赞数、作品数等）\n        const userProfileP = http\n            .api<{\n                status_code?: number;\n                status_msg?: string;\n                user?: {\n                    follower_count?: number;\n                    following_count?: number;\n                    total_favorited?: number;\n                    aweme_count?: number;\n                    nickname?: string;\n                    uid?: string;\n                };\n            }>(\n                {\n                    method: \"get\",\n                    url: \"https://www.douyin.com/aweme/v1/web/user/profile/self/\",\n                    params: {\n                        device_platform: \"webapp\",\n                        aid: \"6383\",\n                        channel: \"channel_pc_web\",\n                        pc_client_type: \"1\",\n                        version_code: \"170400\",\n                        version_name: \"17.4.0\",\n                        cookie_enabled: \"true\",\n                        platform: \"PC\",\n                    },\n                },\n                { retries: 3, retryDelay: 100, timeout: 10000 },\n            )\n            .catch((e) => {\n                _task.logger.warn(`抖音用户信息获取失败: ${e instanceof Error ? e.message : String(e)}`);\n                return null;\n            });\n\n        // 2. 近7日数据概览\n        const overviewP = http\n            .api<{\n                status_code?: number;\n                data?: {\n                    new_fans?: { last_period_incr?: string };\n                    play?: { last_period_incr?: string };\n                    digg?: { last_period_incr?: string };\n                    comment?: { last_period_incr?: string };\n                    share?: { last_period_incr?: string };\n                    profile?: { last_period_incr?: string };\n                };\n            }>(\n                {\n                    method: \"get\",\n                    url: \"https://creator.douyin.com/aweme/janus/creator/data/overview/all/\",\n                    params: {\n                        last_days_type: 1, // 近7日\n                        aid: 2906,\n                        app_name: \"aweme_creator_platform\",\n                        device_platform: \"web\",\n                    },\n                },\n                { retries: 3, retryDelay: 100, timeout: 5000 },\n            )\n            .catch((e) => {\n                _task.logger.warn(\n                    `抖音近7日数据获取失败（可能未开通数据中心或被风控）: ${e instanceof Error ? e.message : String(e)}`,\n                );\n                return null;\n            });\n\n        const [userProfile, overview] = await Promise.all([userProfileP, overviewP]);\n        // _task.logger.info(`抖音用户信息响应: ${JSON.stringify(userProfile)}`);\n        // _task.logger.info(`抖音近7日数据响应: ${JSON.stringify(overview)}`);\n\n        // 从 API 响应提取统计数据\n        let fansNum = 0;\n        let favedNum = 0;\n        let followingNum = 0;\n\n        if (userProfile?.status_code === 0 && userProfile.user) {\n            const user = userProfile.user;\n            fansNum = toNum(user.follower_count);\n            followingNum = toNum(user.following_count);\n            favedNum = toNum(user.total_favorited);\n\n            // _task.logger.info(\n            //     `提取用户数据 - 昵称: ${user.nickname}, 粉丝: ${fansNum}, 关注: ${followingNum}, 获赞: ${favedNum}, 作品: ${user.aweme_count}`,\n            // );\n        } else {\n            _task.logger.warn(\n                `用户信息接口返回异常: status_code=${userProfile?.status_code}, msg=${userProfile?.status_msg}`,\n            );\n        }\n\n        const ov = overview?.data;\n        const douyinData: douyinConfigData = {\n            fansNum, // 从 /aweme/v1/web/user/profile/self/ 接口提取\n            favedNum, // 从 /aweme/v1/web/user/profile/self/ 接口提取\n            fansNumLastWeek: toNum(ov?.new_fans?.last_period_incr),\n            watchNumLastWeek: toNum(ov?.play?.last_period_incr),\n            likeNumLastWeek: toNum(ov?.digg?.last_period_incr),\n            commentNumLastWeek: toNum(ov?.comment?.last_period_incr),\n            shareNumLastWeek: toNum(ov?.share?.last_period_incr),\n            visitNumLastWeek: toNum(ov?.profile?.last_period_incr),\n        };\n\n        return success(douyinData, \"抖音平台数据获取成功！\");\n    } catch (error) {\n        // http 层抛出的是 ResponseData（{code, message, data}），\n        // 直接透传以保留代理超时等场景的错误码与友好提示（如 599 / 414）\n        if (error && typeof error === \"object\" && \"code\" in error && \"message\" in error) {\n            const err = error as { code: number; message: string; data: unknown };\n            _task.logger.error(`抖音账号数据获取失败: ${err.message} (${err.code})`);\n            return errorResponse(err.message, err.code);\n        }\n\n        const errMsg = error instanceof Error ? error.message : String(error);\n        _task.logger.error(`抖音账号数据获取失败: ${errMsg}`);\n        return errorResponse(USER_MESSAGE.DOUYIN_ACCOUNT_FETCH_FAILED);\n    }\n}\n","import { AutomateTask, success } from \"@iflyrpa/share\";\nimport { AxiosProxyParams, errorResponse } from \"../../types\";\nimport { USER_MESSAGE } from \"../../utils/errorMessages\";\nimport { Http } from \"../../utils/http\";\nimport type { SearchAccountInfoParams } from \".\";\nimport { type SearchAccountInfoResponse, type shipinhaoConfigData } from \"./types\";\n\n/**\n * 视频号账号数据采集\n *\n * 参考《API接口文档-抖音和视频号数据采集》 2.1:\n * POST /cgi-bin/mmfinderassistant-bin/auth/auth_data\n *\n * auth_data 返回账号基础信息（粉丝数、作品数）。\n * 昨日数据（净增关注/新增播放/喜欢/评论）需调用专门的统计接口，\n * auth_data 本身不返回，因此这些字段降级为 null。\n */\nexport async function getShipinhaoData(\n    _task: AutomateTask,\n    params: SearchAccountInfoParams,\n): Promise<SearchAccountInfoResponse> {\n    try {\n        // 验证关键 cookie（参考文档 3.1：视频号只需 sessionid）\n        const sessionidCookie = params.cookies.find((it) => it.name === \"sessionid\")?.value;\n        if (!sessionidCookie) {\n            return errorResponse(\"视频号账号数据异常，请重新绑定账号后重试。\", 414);\n        }\n\n        // 提取必需的请求头信息\n        const uinCookie = params.cookies.find((it) => it.name === \"uin\" || it.name === \"wxuin\")?.value || \"0000000000\";\n        const deviceIdCookie = params.cookies.find(\n            (it) => it.name === \"device_id\" || it.name === \"finger_print_device_id\",\n        )?.value;\n        const aid = params.cookies.find((it) => it.name === \"_aid\")?.value || \"9d3e0e9f-b842-498d-a273-4285d58df264\";\n        const finderId =\n            params.cookies.find((it) => it.name === \"_log_finder_id\" || it.name === \"finder_id\")?.value || \"\";\n\n        const headers = {\n            cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            referer: \"https://channels.weixin.qq.com/platform\",\n            origin: \"https://channels.weixin.qq.com\",\n            \"content-type\": \"application/json\",\n            \"X-WECHAT-UIN\": uinCookie,\n            ...(deviceIdCookie ? { \"finger-print-device-id\": deviceIdCookie } : {}),\n        };\n\n        const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n\n        const http = new Http(...args);\n\n        // 2.1 账号数据接口 auth_data\n        const authData = await http.api<{\n            errCode?: number;\n            errMsg?: string;\n            data?: {\n                userAttr?: {\n                    nickname?: string;\n                    encryptedUsername?: string;\n                };\n                // finderUser 在 data 顶层，包含粉丝数、作品数等核心数据\n                finderUser?: {\n                    nickname?: string;\n                    fansCount?: number; // 粉丝数\n                    feedsCount?: number; // 作品总数\n                    uniqId?: string; // 视频号ID\n                    acctType?: number;\n                };\n            };\n        }>(\n            {\n                method: \"post\",\n                url: \"https://channels.weixin.qq.com/cgi-bin/mmfinderassistant-bin/auth/auth_data\",\n                params: {\n                    _aid: aid,\n                    _rid: `${Date.now().toString(16)}-${Math.random().toString(36).substring(2, 9)}`,\n                    _pageUrl: encodeURIComponent(\"https://channels.weixin.qq.com/platform\"),\n                },\n                data: {\n                    timestamp: Date.now().toString(),\n                    _log_finder_uin: \"\",\n                    _log_finder_id: finderId,\n                    rawKeyBuff: \"\",\n                    pluginSessionId: null,\n                    scene: 7,\n                    reqScene: 7,\n                },\n            },\n            { retries: 3, retryDelay: 100, timeout: 5000 },\n        );\n\n        // _task.logger.info(`视频号账号数据响应: ${JSON.stringify(authData)}`);\n\n        // 认证相关的错误码（与 handleShipinhaoData 保持一致）\n        const AUTH_ERROR_CODES = [300333, 300334, 300330, 300331, 300332];\n\n        // 检查认证错误：登录失效返回 414，与其他平台一致\n        if (authData.errCode && AUTH_ERROR_CODES.includes(authData.errCode)) {\n            _task.logger.warn(`视频号登录已失效：${authData.errMsg} (${authData.errCode})`);\n            return errorResponse(\"视频号账号信息获取失败，请检查账号状态\", 414);\n        }\n\n        // 其他 API 错误\n        if (authData.errCode) {\n            _task.logger.warn(`视频号账号API错误：${authData.errMsg} (${authData.errCode})`);\n            return errorResponse(`视频号账号信息获取失败：${authData.errMsg || \"未知错误\"}`, 414);\n        }\n\n        // finderUser 在 data 顶层，包含粉丝数、作品数\n        const finderUser = authData.data?.finderUser;\n\n        // 2.2 获取昨日数据（new_post_total_data 接口）\n        const now = new Date();\n        const yesterday = new Date(now.getFullYear(), now.getMonth(), now.getDate() - 2); // 与网页一致\n        const startTs = Math.floor(yesterday.getTime() / 1000); // 昨日 00:00:00\n        const endTs = startTs + 86400;\n\n        _task.logger.info(`视频号昨日数据范围 start: ${startTs} ~ end: ${endTs}`);\n\n        let fansNumYesterday: number = 0;\n        let playNumYesterday: number = 0;\n        let likeNumYesterday: number = 0;\n        let commentNumYesterday: number = 0;\n\n        try {\n            const statsData = await http.api<{\n                errCode?: number;\n                errMsg?: string;\n                data?: {\n                    totalData?: {\n                        browse?: string[];\n                        like?: string[];\n                        comment?: string[];\n                        follow?: string[];\n                    };\n                };\n            }>(\n                {\n                    method: \"post\",\n                    url: \"https://channels.weixin.qq.com/cgi-bin/mmfinderassistant-bin/statistic/new_post_total_data\",\n                    params: {\n                        _aid: aid,\n                        _rid: `${Date.now().toString(16)}-${Math.random().toString(36).substring(2, 9)}`,\n                        _pageUrl: encodeURIComponent(\"https://channels.weixin.qq.com/platform\"),\n                    },\n                    data: {\n                        startTs: startTs.toString(),\n                        endTs: endTs.toString(),\n                        interval: 3,\n                        timestamp: Date.now().toString(),\n                        _log_finder_uin: \"\",\n                        _log_finder_id: finderId,\n                        rawKeyBuff: \"\",\n                        pluginSessionId: null,\n                        scene: 7,\n                        reqScene: 7,\n                    },\n                },\n                { retries: 3, retryDelay: 100, timeout: 5000 },\n            );\n\n            // _task.logger.info(`视频号昨日数据响应: ${JSON.stringify(statsData)}`);\n\n            // 不对昨日数据接口的错误做中断处理，降级为 null\n            if (!statsData.errCode && statsData.data?.totalData) {\n                // 直接从 totalData 提取汇总数据，数组第一个值是昨日数据\n                const data = statsData.data.totalData;\n                fansNumYesterday = Number.parseInt(data.follow?.[1] || \"0\", 10) || 0;\n                playNumYesterday = Number.parseInt(data.browse?.[1] || \"0\", 10) || 0;\n                likeNumYesterday = Number.parseInt(data.like?.[1] || \"0\", 10) || 0;\n                commentNumYesterday = Number.parseInt(data.comment?.[1] || \"0\", 10) || 0;\n\n                // _task.logger.info(\n                //     `视频号昨日数据提取成功 - 净增关注:${fansNumYesterday}, 播放:${playNumYesterday}, 喜欢:${likeNumYesterday}, 评论:${commentNumYesterday}`,\n                // );\n            }\n        } catch (error) {\n            const errMsg = error instanceof Error ? error.message : String(error);\n            _task.logger.warn(`视频号昨日数据获取失败（降级为null）: ${errMsg}`);\n        }\n\n        const shipinhaoData: shipinhaoConfigData = {\n            fansNum: finderUser?.fansCount || 0, // 粉丝数\n            feedsCount: finderUser?.feedsCount || 0, // 作品总数（不区分视频/图文）\n            fansNumYesterday,\n            playNumYesterday,\n            likeNumYesterday,\n            commentNumYesterday,\n        };\n        return success(shipinhaoData, \"视频号平台数据获取成功！\");\n    } catch (error) {\n        // http 层抛出的是 ResponseData（{code, message, data}），\n        // 直接透传以保留代理超时等场景的错误码与友好提示（如 599 / 414）\n        if (error && typeof error === \"object\" && \"code\" in error && \"message\" in error) {\n            const err = error as { code: number; message: string; data: unknown };\n            _task.logger.error(`视频号账号数据获取失败: ${err.message} (${err.code})`);\n            return errorResponse(err.message, err.code);\n        }\n\n        const errMsg = error instanceof Error ? error.message : String(error);\n        _task.logger.error(`视频号账号数据获取失败: ${errMsg}`);\n        return errorResponse(USER_MESSAGE.SHIPINHAO_ACCOUNT_FETCH_FAILED);\n    }\n}\n","import { AutomateTask, success } from \"@iflyrpa/share\";\nimport { errorResponse } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { type SearchAccountInfoParams } from \".\";\nimport { SearchAccountInfoResponse, ttConfigData } from \"./types\";\n\nexport async function getToutiaoData(\n    _task: AutomateTask,\n    params: SearchAccountInfoParams,\n): Promise<SearchAccountInfoResponse> {\n    const http = new Http({\n        headers: {\n            cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            referer: \"https://mp.toutiao.com/profile_v4/graphic/publish\",\n            \"user-agent\":\n                \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36\",\n        },\n    });\n\n    const totalData = await http.api<{\n        message: string;\n        data?: {\n            statistic: {\n                data: {\n                    total_subscribe_count: string;\n                    total_read_play_count: string;\n                    total_income: number;\n                    yesterday_income: number;\n                    is_yesterday_income_ready: boolean;\n                    yesterday_fans?: string;\n                    yesterday_play_count: string;\n                    yesterday_read_count: string;\n                };\n            };\n        };\n    }>({\n        method: \"get\",\n        url: \"https://mp.toutiao.com/mp/fe_api/home/merge_v2\",\n        params: { app_id: 1231 },\n    });\n\n    await new Promise((r) => setTimeout(r, 1000));\n\n    const contentDataYesterday = await http.api<{\n        message: string;\n        author_stat?: {\n            consume_data: { impression_count: number; go_detail_count: number };\n            interaction_data: { comment_count: number; digg_count: number };\n        };\n    }>({\n        method: \"get\",\n        url: \"https://mp.toutiao.com/mp/agw/statistic/v2/content_stat\",\n        params: { type: 0, app_id: 1231 },\n    });\n\n    const isSuccess = !!(totalData?.data?.statistic && contentDataYesterday?.author_stat);\n\n    if (!isSuccess || !totalData?.data || !contentDataYesterday?.author_stat) {\n        return errorResponse(\n            totalData?.message || contentDataYesterday?.message || \"头条号数据获取失败，请检查Cookie是否有效\",\n            414,\n        );\n    }\n\n    const ttData: ttConfigData = {\n        fansNum: Number(totalData.data.statistic.data.total_subscribe_count),\n        fansNumYesterday:\n            totalData.data.statistic.data.yesterday_fans !== undefined\n                ? Number(totalData.data.statistic.data.yesterday_fans)\n                : null,\n        readNum: Number(totalData.data?.statistic.data.total_read_play_count),\n        incomeNum: totalData.data?.statistic.data.total_income,\n        incomeNumYesterday: totalData.data?.statistic.data.is_yesterday_income_ready\n            ? totalData.data.statistic.data.yesterday_income\n            : null,\n        showNumYesterday: contentDataYesterday.author_stat.consume_data.impression_count,\n        readNumYesterday: contentDataYesterday.author_stat.consume_data.go_detail_count,\n        likeNumYesterday: contentDataYesterday.author_stat.interaction_data.digg_count,\n        commentNumYesterday: contentDataYesterday.author_stat.interaction_data.comment_count,\n    };\n\n    return success(ttData, \"头条号粉丝数据获取成功！\");\n}\n","import { AutomateTask, success } from \"@iflyrpa/share\";\nimport { DomUtils, parseDocument } from \"htmlparser2\";\nimport vm from \"vm\";\nimport { errorResponse } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { type SearchAccountInfoParams } from \".\";\nimport { SearchAccountInfoResponse, wxConfigData } from \"./types\";\n\ntype summaryData = { data_range_type: number; data_value: number }[];\nconst exportWxCgiData = (\n    html: string,\n): {\n    total_friend_cnt: number;\n    new_friend_cnt: number;\n    read_summary: summaryData;\n    share_summary: summaryData;\n} => {\n    // 1. 解析 HTML\n    const document = parseDocument(html);\n\n    // 2. 找所有 script 标签\n    const scripts = DomUtils.findAll((el) => el.type === \"script\", document.children);\n\n    // 3. 准备 vm 沙箱\n    const sandbox: any = {\n        window: {},\n    };\n    sandbox.window.wx = {};\n    sandbox.wx = sandbox.window.wx;\n\n    vm.createContext(sandbox);\n\n    // 4. 执行包含 wx.cgiData 的脚本\n    for (const script of scripts) {\n        const code = DomUtils.textContent(script);\n\n        if (!code) continue;\n\n        if (code.includes(\"wx.cgiData\")) {\n            try {\n                vm.runInContext(code, sandbox, {\n                    timeout: 1000,\n                });\n            } catch (e) {\n                // 非关键脚本可忽略\n            }\n        }\n    }\n\n    // 5. 返回结果\n    return sandbox.window.wx.cgiData;\n};\n\nexport async function getWeixinData(\n    _task: AutomateTask,\n    params: SearchAccountInfoParams,\n): Promise<SearchAccountInfoResponse> {\n    const { token } = params;\n\n    if (!token) return { code: 414, message: \"缺少token\", data: null };\n\n    const http = new Http({\n        headers: {\n            cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        },\n    });\n    const userInfo = {\n        originalCount: 0,\n        totalUsers: 0,\n        userIncrease: 0,\n        yesterday: {\n            read: 0,\n            share: 0,\n            subscribe: 0,\n        },\n    };\n    const userInfoHtmlPromise = http.api<string>({\n        method: \"get\",\n        url: \"https://mp.weixin.qq.com/cgi-bin/home\",\n        params: {\n            t: \"home/index\",\n            token,\n            lang: \"zh_CN\",\n        },\n    });\n    const userSummaryHtmlPromise = http.api<string>({\n        method: \"get\",\n        url: \"https://mp.weixin.qq.com/misc/appmsganalysis\",\n        params: {\n            token,\n            lang: \"zh_CN\",\n            type: \"daily_v2\",\n            action: \"report\",\n            indicatorSelect: \"read\",\n        },\n    });\n\n    const [userInfoHtml, userSummaryHtml] = await Promise.all([userInfoHtmlPromise, userSummaryHtmlPromise]);\n\n    if (userInfoHtml.includes(\"请重新<a id='jumpUrl' href='/'>登录</a>\"))\n        return errorResponse(\"微信公众号数据获取失败，请检查账号状态\", 414);\n\n    const userInfoJson = exportWxCgiData(userInfoHtml);\n    const userSummaryJson = exportWxCgiData(userSummaryHtml);\n\n    const wxData: wxConfigData = {\n        fansNum: userInfoJson.total_friend_cnt,\n        fansNumYesterday: userInfoJson.new_friend_cnt,\n        readNumYesterday: userSummaryJson.read_summary.filter((it) => it.data_range_type === 1)[0]?.data_value || 0,\n        shareNumYesterday: userSummaryJson.share_summary.filter((it) => it.data_range_type === 1)[0]?.data_value || 0,\n    };\n\n    return success(wxData, \"微信平台数据获取成功！\");\n}\n","import { AutomateTask, success } from \"@iflyrpa/share\";\nimport { AxiosProxyParams, errorResponse } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { Xhshow } from \"../../utils/xhsXsEncrypt\";\nimport type { SearchAccountInfoParams } from \".\";\nimport { type SearchAccountInfoResponse, type xhsConfigData } from \"./types\";\n\nexport async function getXiaohongshuData(\n    _task: AutomateTask,\n    params: SearchAccountInfoParams,\n): Promise<SearchAccountInfoResponse> {\n    const a1Cookie = params.cookies.find((it) => it.name === \"a1\")?.value;\n    if (!a1Cookie) {\n        return errorResponse(\"账号数据异常，请重新绑定账号后重试。\", 414);\n    }\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://creator.xiaohongshu.com\",\n        origin: \"https://creator.xiaohongshu.com\",\n    };\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId, \"xiaohongshu\"];\n    const http = new Http(...args);\n    const xsEncrypt = new Xhshow();\n\n    const sevenDataUrl = \"/api/galaxy/v2/creator/datacenter/account/base\";\n    const recordCookie = params.cookies.reduce<Record<string, string>>((acc, cookie) => {\n        if (cookie.name && cookie.value) {\n            acc[cookie.name] = cookie.value;\n        }\n        return acc;\n    }, {});\n    const sevenDataXsHeader = xsEncrypt.signHeadersGet(sevenDataUrl, recordCookie, \"xhs-pc-web\", null);\n\n    const [overAllData, sevenData] = await Promise.all([\n        http.api<{ data: { fans_count: number; faved_count: number } }>(\n            {\n                method: \"get\",\n                url: \"https://creator.xiaohongshu.com/api/galaxy/creator/home/personal_info\",\n            },\n            { retries: 3, retryDelay: 300, timeout: 30000 },\n        ),\n        http.api<{\n            data: {\n                seven: {\n                    view_count: number;\n                    like_count: number;\n                    collect_count: number;\n                    comment_count: number;\n                    rise_fans_count: number;\n                    rise_fans_list: { data: number; count: number }[];\n                };\n            };\n        }>(\n            {\n                method: \"get\",\n                baseURL: \"https://creator.xiaohongshu.com\",\n                url: sevenDataUrl,\n                headers: sevenDataXsHeader,\n            },\n            { retries: 3, retryDelay: 300, timeout: 30000 },\n        ),\n    ]);\n\n    const xhsData: xhsConfigData = {\n        fansNum: overAllData.data.fans_count,\n        favedNum: overAllData.data.faved_count,\n        watchNumLastWeek: sevenData.data.seven.view_count,\n        likeNumLastWeek: sevenData.data.seven.like_count,\n        collectNumLastWeek: sevenData.data.seven.collect_count,\n        commentNumLastWeek: sevenData.data.seven.comment_count,\n        fansNumLastWeek: sevenData.data.seven.rise_fans_count,\n        fansNumYesterday: sevenData.data.seven.rise_fans_list[0].count,\n    };\n\n    return success(xhsData, \"小红书平台数据获取成功！\");\n}\n","import { type CommonAction, success } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport { ActionCommonParamsSchema } from \"../../types\";\nimport { getBaijiahaoData } from \"./getBjhInfo\";\nimport { getDouyinData } from \"./getDouyinInfo\";\nimport { getShipinhaoData } from \"./getShipinhaoInfo\";\nimport { getToutiaoData } from \"./getTTInfo\";\nimport { getWeixinData } from \"./getWxInfo\";\nimport { getXiaohongshuData } from \"./getXhsInfo\";\nimport {\n    bjhConfigData,\n    douyinConfigData,\n    shipinhaoConfigData,\n    ttConfigData,\n    wxConfigData,\n    xhsConfigData,\n} from \"./types\";\n\nexport const SearchAccountInfoParamsSchema = ActionCommonParamsSchema.extend({\n    token: z.union([z.string(), z.number()]).optional(),\n    platform: z.enum([\"toutiao\", \"xiaohongshu\", \"weixin\", \"baijiahao\", \"douyin\", \"shipinhao\"]),\n});\n\nexport type SearchAccountInfoParams = z.infer<typeof SearchAccountInfoParamsSchema>;\n\nexport const SearchAccountInfo: CommonAction<\n    SearchAccountInfoParams,\n    ttConfigData | xhsConfigData | wxConfigData | bjhConfigData | douyinConfigData | shipinhaoConfigData | null\n> = async (_task, params) => {\n    const { platform } = params;\n    switch (platform) {\n        case \"toutiao\":\n            return getToutiaoData(_task, params);\n        case \"xiaohongshu\":\n            return getXiaohongshuData(_task, params);\n        case \"weixin\":\n            return getWeixinData(_task, params);\n        case \"baijiahao\":\n            return getBaijiahaoData(_task, params);\n        case \"douyin\":\n            return getDouyinData(_task, params);\n        case \"shipinhao\":\n            return getShipinhaoData(_task, params);\n        default:\n            return success(null, \"暂不支持该平台\");\n    }\n};\n","import { type CommonAction, success } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\n\nexport interface SearchBjhTopicListParams extends ActiomCommonParams {\n    token: string;\n    topicContent: string;\n}\n\nexport interface TopicData {\n    title: string;\n    id: string;\n}\n\nexport type PublishAction = CommonAction<SearchBjhTopicListParams, TopicData[]>;\n\nexport const searchBjhTopicList: PublishAction = async (_task, params) => {\n    const cookies = params.cookies ?? [];\n\n    const http = new Http({\n        headers: {\n            cookie: cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            token: params.token,\n        },\n    });\n\n    const res = await http.api<{ errno: number; data: { hot: TopicData[] } }>({\n        method: \"get\",\n        url: \"https://baijiahao.baidu.com/pcui/pcpublisher/searchtopic\",\n        params: {\n            content: params.topicContent,\n            resource_type: 1,\n        },\n    });\n\n    return success(res?.data?.hot ?? [], `百家号${res.errno === 0 ? \"话题获取成功！\" : \"话题获取失败\"}`);\n};\n","import { type CommonAction, success } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\n\nexport interface searchBjhUserArticleParams extends ActiomCommonParams {\n    searchValue: string;\n}\n\nconst parseBjhDom = (domString: string): string => {\n    const match = domString.match(/\"uk\"\\s*:\\s*\"([^\"]+)\"/);\n    if (!match) throw new Error(\"没有找到 runtime\");\n    return match[1].trim();\n};\n\nexport type PublishAction = CommonAction<searchBjhUserArticleParams, Record<string, unknown>[]>;\n\nexport const searchBjhUserArticle: PublishAction = async (_task, params) => {\n    const http = new Http({\n        headers: {\n            cookie: \"Hmery-Time=948577917; BAIDUID=5A704A91E4CBAFBE1421F0CA634ACA7E:FG=1; BAIDUID_BFESS=5A704A91E4CBAFBE1421F0CA634ACA7E:FG=1\",\n        },\n    });\n\n    // if (!a1Cookie) return {code: 414, message: \"账号数据异常，请重新绑定账号后重试。\", data: []};\n    if (params.searchValue.indexOf(\"home?from=bjh_article\") === -1)\n        return { code: 414, message: \"请输入正确的百家号用户主页链接地址！\", data: [] };\n\n    const result = await http.api<string>({\n        method: \"get\",\n        url: params.searchValue,\n        defaultErrorMsg: \"用户搜索异常，请稍后重试。\",\n    });\n\n    const runtime = parseBjhDom(result);\n\n    const detailJson = await http.api<{ errno: number; data?: { list: Record<string, unknown>[] } }>({\n        method: \"get\",\n        url: \"https://mbd.baidu.com/webpage/\",\n        params: {\n            tab: \"main\",\n            num: 10,\n            uk: runtime,\n            source: \"pc\",\n            type: \"newhome\",\n            action: \"dynamic\",\n            format: \"json\",\n        },\n    });\n    console.log(detailJson);\n\n    return success(detailJson.data?.list ?? [], `搜索用户相关数据${detailJson.errno === 0 ? \"成功！\" : \"失败！\"}`);\n};\n","// 文章公共属性\nimport { z } from \"zod\";\n\n// 文章公共属性\nconst BaseArticleSchema = z.object({\n    title: z.string(), // 文章标题\n    imageUrl: z.string(), // 图片地址\n    createTime: z.number(), // 发布时间\n    redirectUrl: z.string(), // 文章网页端地址\n    originalData: z.unknown().optional(), // 原始数据，可选\n});\n\n// 平台特定文章属性\nexport const ToutiaoArticleSchema = BaseArticleSchema.extend({\n    showNum: z.number(), // 展现量\n    readNum: z.number(), // 阅读量\n    likeNum: z.number(), // 点赞量\n    commentNum: z.number(), // 评论量\n});\nexport type ToutiaoArticle = z.infer<typeof ToutiaoArticleSchema>;\n\nexport const WeixinArticleSchema = BaseArticleSchema.extend({\n    readNum: z.number(), // 阅读人数\n    likeNum: z.number(), // 点赞人数\n    shareNum: z.number(), // 分享人数\n    recommendNum: z.number(), // 推荐人数\n});\nexport type WeixinArticle = z.infer<typeof WeixinArticleSchema>;\n\nexport const BaijiahaoArticleSchema = BaseArticleSchema.extend({\n    recommendNum: z.number(), // 推荐量\n    collectNum: z.number(), // 收藏量\n    readNum: z.number(), // 阅读量\n    likeNum: z.number(), // 点赞量\n    commentNum: z.number(), // 评论量\n    shareNum: z.number(), // 转发量\n});\nexport type BaijiahaoArticle = z.infer<typeof BaijiahaoArticleSchema>;\n\nexport const XiaohongshuArticleSchema = BaseArticleSchema.extend({\n    readNum: z.number(), // 阅读量\n    likeNum: z.number(), // 点赞量\n    commentNum: z.number(), // 评论量\n    collectNum: z.number(), // 收藏量\n    shareNum: z.number(), // 转发量\n});\nexport type XiaohongshuArticle = z.infer<typeof XiaohongshuArticleSchema>;\n\nexport const DouyinArticleSchema = BaseArticleSchema.extend({\n    playNum: z.number(), // 播放量\n    likeNum: z.number(), // 点赞量\n    commentNum: z.number(), // 评论量\n    shareNum: z.number(), // 分享数\n    collectNum: z.number(), // 收藏数\n    awemeId: z.string(), // 作品ID\n    awemeType: z.number(), // 作品类型：4=视频, 2=图文\n    duration: z.number().optional(), // 视频时长（毫秒）\n    status: z.string(), // 发布状态：public/private/reviewing\n    publicUrl: z.string(), // 作品公开访问URL\n});\nexport type DouyinArticle = z.infer<typeof DouyinArticleSchema>;\n\nexport const ShipinhaoArticleSchema = BaseArticleSchema.extend({\n    readNum: z.number(), // 阅读量\n    likeNum: z.number(), // 喜欢数\n    commentNum: z.number(), // 评论数\n    forwardNum: z.number(), // 转发数\n    favNum: z.number(), // 点赞数\n    objectId: z.string(), // 作品ID\n    postType: z.string(), // 作品类型：video/article\n    postStatus: z.number(), // 发布状态码\n    effectiveTime: z.number().optional(), // 定时发布时间（若存在）\n});\nexport type ShipinhaoArticle = z.infer<typeof ShipinhaoArticleSchema>;\n\n// 响应数据类型\nexport const FetchArticlesDataSchema = z.object({\n    articleCell: z\n        .array(\n            z.union([\n                ToutiaoArticleSchema,\n                WeixinArticleSchema,\n                BaijiahaoArticleSchema,\n                XiaohongshuArticleSchema,\n                DouyinArticleSchema,\n                ShipinhaoArticleSchema,\n            ]),\n        )\n        .optional(),\n    timerPublish: z\n        .array(\n            z.union([\n                ToutiaoArticleSchema,\n                WeixinArticleSchema,\n                BaijiahaoArticleSchema,\n                XiaohongshuArticleSchema,\n                DouyinArticleSchema,\n                ShipinhaoArticleSchema,\n            ]),\n        )\n        .optional(),\n    pagination: z\n        .object({\n            total: z.number().optional(), // 总条数\n            nextPage: z.boolean().optional(), // 是否有下一页\n            lastPage: z.number().optional(), // 用于维系游标所在页，提高查询速度\n            cursor: z.number().optional(), // 返回最终游标\n            pageNum: z.number(), // 当前页\n            pageSize: z.number(), // 每页大小\n        })\n        .optional(),\n});\n\nexport type FetchArticlesData = z.infer<typeof FetchArticlesDataSchema>;\nexport interface FetchArticlesResponse {\n    code: number;\n    message: string;\n    data: FetchArticlesData | Record<string, never>;\n}\n\nexport const errorResponse = (message: string, code = 500): FetchArticlesResponse => ({\n    code,\n    message,\n    data: {},\n});\n","import { AutomateTask, success } from \"@iflyrpa/share\";\nimport { USER_MESSAGE } from \"../../utils/errorMessages\";\nimport { Http } from \"../../utils/http\";\nimport type { FetchArticlesParams } from \".\";\nimport { type BaijiahaoArticle, errorResponse, type FetchArticlesResponse } from \"./types\";\n\ninterface ArticleInfo {\n    abstract: string;\n    antispam_code: number;\n    app_id: string;\n    article_id: string;\n    article_set_nids: string;\n    audit_msg: string;\n    authentication_type: string;\n    auto_generate_id: string;\n    bad_status: string;\n    bjh_ext_info: string;\n    bjh_video_finger_printing: string;\n    call_slot: number;\n    commit_at: string;\n    content?: string;\n    cover_images: string;\n    cover_layout: string;\n    created_at: string;\n    creative_method: string;\n    deleted_at: string;\n    displaytype_exinfo: string;\n    domain: string;\n    dst_status: string;\n    ext_info: string;\n    feed_cat: string;\n    feed_id: string;\n    feed_id_from: number;\n    feed_push_amount: number;\n    feed_rs: string;\n    feed_source_id: string;\n    feed_sub_cat: string;\n    file_name: string;\n    first_exclusive_publish: number;\n    first_storage_time: number;\n    has_edited_times: number;\n    is_authenticated: number;\n    is_feed_import: number;\n    is_good: number;\n    is_pay: number;\n    is_published: number;\n    is_reported: number;\n    is_transfer?: number;\n    is_tagged: number;\n    is_wx_spread: number;\n    issue_status: number;\n    midway_issue_status: number;\n    mount_goods: number;\n    mthvideo: number;\n    nid: string;\n    open_comment: number;\n    open_front_page: number;\n    origin_app_id: string;\n    origin_id: string;\n    origin_url: string;\n    original_status: number;\n    pay_money: number;\n    platform_source: number;\n    provider: string;\n    publish_at: string;\n    publish_time: string;\n    publish_type: string;\n    quality: number;\n    quality_audit_type: string;\n    quality_not_pass_reason: string;\n    quality_status: string;\n    res_slot: string;\n    secure_not_pass_reason: string;\n    secure_status: string;\n    shoubai_c_articleid: string;\n    smp_url: string;\n    source_name: string;\n    source_reprinted_allow: number;\n    source_reprinted_astrict: string;\n    source_type: string;\n    status: string;\n    sub_status_id: number;\n    subtitle: string;\n    tag: string;\n    tag_detail: string;\n    title: string;\n    top_end: number;\n    top_st: number;\n    tp_id: string;\n    transform_id: string;\n    trigger_odyssey: number;\n    type: string;\n    updated_at: string;\n    url: string;\n    vertical_cover: string;\n    video_sub_type: number;\n    video_tag: string;\n    weixin_import_type: number;\n    id: string;\n    certify_url: string;\n    timer_time: number;\n    similar_article_id: string;\n    article_push_audit_res: number;\n    withdraw_status: {\n        withdraw_msg: string;\n        has_withdraw_times: {\n            news: number;\n        };\n        can_withdraw: number;\n    };\n    modify_status: {\n        edit_msg: string;\n        can_edit: number;\n    };\n    delete_status: {\n        delete_msg: string;\n        can_delete: number;\n    };\n    recover_status: {\n        recover_msg: string;\n        can_recover: number;\n    };\n    can_edit_goods: number;\n    recomm_status: {\n        can_recomm: number;\n    };\n    dxxFinalAuditResult: string;\n    read_amount: number;\n    read_num: number;\n    forward_num: number;\n    praise_num: number;\n    comment_num: number;\n    rec_amount: number;\n    comment_amount: number;\n    share_amount: number;\n    like_amount: number;\n    collection_amount: number;\n    profit: number;\n    is_rec: number;\n    solicit_info: {\n        tag: string | null;\n        point: string | null;\n        inspire: string | null;\n    };\n    group_can_share: number;\n    group_already_shared: number;\n    show_selected_comment_option: number;\n    show_ai_intro: number;\n    flow_invest_status: number;\n    flow_invest_msg: string;\n    package_invest_status: number;\n    can_only_modify_goods: number;\n    audit_msg_color: string;\n    audit_msg_icon: string;\n    playlet_pay2free_switch: number;\n    audit_type_v0: string;\n    is_ridewind: string;\n    is_show_adding: string;\n    is_show_add_view: string;\n    add_view_count: string;\n    coupons_add_view_count: string;\n    platform_add_view_count: string;\n    rec_count: number;\n    share_url: string;\n    v_type: number;\n    v_intro: string;\n    duration: number | null;\n    video_num: number;\n}\n\ntype ArticleApiResponse = {\n    errno: number;\n    data: {\n        list: ArticleInfo[];\n        page: {\n            currentPage: number;\n            pageSize: number;\n            totalCount: number;\n            totalPage: number;\n        };\n    };\n};\n\nexport async function handleBaijiahaoData(\n    _task: AutomateTask,\n    params: FetchArticlesParams,\n): Promise<FetchArticlesResponse> {\n    try {\n        const {\n            cookies,\n            token,\n            pageNum = 1,\n            pageSize = 10,\n            showOriginalData = false,\n            onlySuccess = false,\n            containsArticle = false,\n        } = params;\n\n        if (!token) return { code: 414, message: \"缺少token\", data: {} };\n        const http = new Http({\n            headers: {\n                cookie: cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n                token: token,\n            },\n        });\n\n        async function fetchArticles(\n            pageNum: number,\n            pageSize: number,\n            onlySuccess = false,\n        ): Promise<ArticleApiResponse> {\n            return await http.api<ArticleApiResponse>({\n                method: \"get\",\n                url: \"https://baijiahao.baidu.com/pcui/article/lists\",\n                params: {\n                    currentPage: pageNum,\n                    pageSize: pageSize,\n                    search: \"\",\n                    type: \"\",\n                    collection: onlySuccess ? \"publish\" : \"\",\n                    clearBeforeFetch: false,\n                    dynamic: 1,\n                },\n            });\n        }\n\n        const articleInfo = await fetchArticles(pageNum, pageSize, onlySuccess);\n        if (articleInfo.errno !== 0) return errorResponse(\"百家号数据获取失败，请检查账号状态\", 414);\n        const filtered = articleInfo.data.list.filter((item) => item.status !== \"draft\");\n        const totalPage = articleInfo.data.page?.totalPage || 1;\n\n        let currentPage = pageNum + 1;\n        const usedPages = new Set<number>();\n        while (filtered.length < pageSize && currentPage <= totalPage) {\n            if (usedPages.has(currentPage)) {\n                currentPage++;\n                continue;\n            }\n\n            const res = await fetchArticles(currentPage, pageSize, onlySuccess);\n            usedPages.add(currentPage);\n\n            const validItems = res.data.list.filter((item) => item.status !== \"draft\");\n            filtered.push(...validItems);\n\n            currentPage++;\n        }\n\n        // 截取前 pageSize 条返回\n        const final = filtered.slice(0, pageSize);\n\n        const getDetailContent = async (url: string) => {\n            try {\n                const detailInfo = await http.api<string>({ method: \"get\", url });\n                const match = detailInfo.match(/window\\.jsonData\\s*=\\s*(\\{[\\s\\S]*?\\});window\\.firstScreenTime/);\n                if (!match) {\n                    const isCheckPass = detailInfo.indexOf(\"百度安全验证\");\n                    if (isCheckPass > -1) {\n                        return \"⚠️ 需要进行百度安全验证，请手动打开链接完成验证后再尝试获取文章内容\";\n                    }\n                    return null;\n                }\n                const jsonStr = match[1].trim();\n                type DataType = {\n                    bsData: {\n                        superlanding: {\n                            itemData: {\n                                sections: {\n                                    content: string;\n                                }[];\n                            };\n                        }[];\n                    };\n                };\n                const data: DataType = JSON.parse(jsonStr);\n                return data.bsData.superlanding[0].itemData.sections.map((item) => item.content).join(\"\");\n            } catch (err) {\n                console.error(\"❌ JSON 解析失败:\", err);\n                return null;\n            }\n        };\n\n        // 转换结构\n        const articleCell: BaijiahaoArticle[] = await Promise.all(\n            final.map(async (item) => ({\n                title: (item?.is_transfer ?? false) ? item.content || \"\" : item.title,\n                imageUrl: JSON.parse(item.cover_images)[0]?.src || \"\",\n                createTime: Math.floor(new Date(item.publish_at.replace(/-/g, \"/\")).getTime() / 1000),\n                redirectUrl: item.url || item.share_url,\n                recommendNum: item.rec_amount | item.forward_num,\n                collectNum: item.collection_amount,\n                readNum: item.read_amount | item.read_num,\n                likeNum: item.like_amount | item.praise_num,\n                commentNum: item.comment_amount | item.comment_num,\n                shareNum: item.share_amount,\n                ...(showOriginalData ? { originalData: item } : {}),\n                ...(containsArticle ? { article: await getDetailContent(item.url) } : {}),\n            })),\n        );\n\n        return success(\n            {\n                articleCell,\n                ...(onlySuccess\n                    ? {\n                          pagination: {\n                              total: articleInfo.data.page?.totalCount,\n                              pageNum,\n                              pageSize,\n                          },\n                      }\n                    : null),\n            },\n            \"百家号文章数据获取成功\",\n        );\n    } catch (error) {\n        const errMsg = error instanceof Error ? error.message : String(error);\n        _task.logger.error(`百家号文章数据获取失败: ${errMsg}`);\n        return errorResponse(USER_MESSAGE.BJH_POST_FETCH_FAILED);\n    }\n}\n","import { AutomateTask, success } from \"@iflyrpa/share\";\nimport type { AxiosProxyParams } from \"../../types\";\nimport { USER_MESSAGE } from \"../../utils/errorMessages\";\nimport { Http } from \"../../utils/http\";\nimport { type FetchArticlesParams } from \".\";\nimport { DouyinArticle, errorResponse, FetchArticlesResponse } from \"./types\";\n\n// API 响应接口定义\n// API 响应接口定义（参考《API接口文档》1.3 作品列表接口）\ninterface DouyinApiWork {\n    aweme_id: string;\n    desc: string;\n    Cover?: {\n        url_list?: string[];\n    };\n    create_time: number;\n    duration?: number;\n    aweme_type?: number;\n    status?: {\n        is_delete?: boolean;\n        is_private?: boolean;\n        in_reviewing?: boolean;\n    };\n    statistics?: {\n        play_count?: number;\n        digg_count?: number;\n        comment_count?: number;\n        share_count?: number;\n        collect_count?: number;\n    };\n    share_url?: string;\n    author?: {\n        uid?: string;\n    };\n}\n\ninterface DouyinWorkListResponse {\n    aweme_list?: DouyinApiWork[];\n    total?: number;\n    has_more?: boolean | number; // 文档为 1/0，兼容 boolean\n    cursor?: number; // 文档：下一页游标使用响应中的 cursor\n    max_cursor?: number; // 兼容旧字段\n    status_code?: number;\n}\n\n/**\n * 抖音作品数据采集\n *\n * 采集内容：\n * 1. 账号维度数据：粉丝、获赞、近7日数据（需开通数据中心）\n * 2. 作品维度数据：封面图、标题、发布时间、统计数据等\n *\n * 参考小红书实现模式：\n * - 内部封装 fetchWorks 函数\n * - 支持自动分页\n * - 支持代理配置\n * - 支持重试机制\n */\nexport async function handleDouyinData(\n    _task: AutomateTask,\n    params: FetchArticlesParams,\n): Promise<FetchArticlesResponse> {\n    try {\n        const { cookies, pageSize = 12, status = 0, showOriginalData = false, onlySuccess = false } = params;\n        // pageNum 为 0 或未传时按 1 处理\n        const pageNum = params.pageNum || 1;\n\n        // 配置请求头和代理\n        const headers = {\n            cookie: cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            referer: \"https://creator.douyin.com\",\n        };\n\n        const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n\n        const http = new Http(...args);\n\n        // 内部函数：获取作品列表（参考文档 1.3）\n        // 分页使用游标 max_cursor，首次为 0，后续用响应中的 cursor\n        async function fetchWorks(cursor: number): Promise<DouyinWorkListResponse> {\n            return await http.api<DouyinWorkListResponse>(\n                {\n                    method: \"get\",\n                    url: \"https://creator.douyin.com/janus/douyin/creator/pc/work_list\",\n                    params: {\n                        scene: \"star_atlas\",\n                        device_platform: \"android\",\n                        aid: 1128,\n                        status,\n                        count: pageSize,\n                        max_cursor: cursor,\n                    },\n                },\n                { retries: 3, retryDelay: 100, timeout: 5000 },\n            );\n        }\n\n        // has_more 兼容文档的 1/0 与 boolean\n        const isHasMore = (v: boolean | number | undefined): boolean => v === true || v === 1;\n\n        // 计算需要跳过和获取的数据量\n        const skipCount = (pageNum - 1) * pageSize;\n        const needCount = skipCount + pageSize;\n\n        // 首次请求游标为 0（抖音使用游标分页，非 offset）\n        const workListResponse = await fetchWorks(0);\n\n        if (!workListResponse || !Array.isArray(workListResponse.aweme_list)) {\n            return errorResponse(\"抖音数据获取失败，请检查账号状态\", 414);\n        }\n\n        // 累积作品，通过游标翻页直到攒够需要的数量或没有更多\n        const allWorks: DouyinApiWork[] = [...workListResponse.aweme_list];\n        let hasMore = isHasMore(workListResponse.has_more);\n        // 文档：后续请求使用响应中的 cursor；兼容旧的 max_cursor\n        let currentCursor = workListResponse.cursor ?? workListResponse.max_cursor ?? 0;\n\n        // 防止无限循环的翻页上限\n        let guard = 0;\n        while (allWorks.length < needCount && hasMore && guard < 20) {\n            const nextPageResponse = await fetchWorks(currentCursor);\n            if (!Array.isArray(nextPageResponse.aweme_list) || nextPageResponse.aweme_list.length === 0) {\n                break;\n            }\n            allWorks.push(...nextPageResponse.aweme_list);\n            hasMore = isHasMore(nextPageResponse.has_more);\n            currentCursor = nextPageResponse.cursor ?? nextPageResponse.max_cursor ?? currentCursor;\n            guard++;\n        }\n\n        // 截取当前页的数据：跳过前面的页，取 pageSize 条\n        const finalWorks = allWorks.slice(skipCount, needCount);\n\n        // 转换作品数据（字段映射参考文档 1.3）\n        const articleCell: DouyinArticle[] = finalWorks.map((item) => {\n            // 作品详情页（创作者后台），参考文档\"作品数据页面地址构建\"\n            const workDetailUrl = `https://creator.douyin.com/creator-micro/work-management/work-detail/${item.aweme_id}`;\n            // 公开访问 URL 优先用文档给出的 share_url\n            const workPublicUrl = item.share_url || `https://www.douyin.com/video/${item.aweme_id}`;\n\n            // 发布状态：删除 > 私密 > 审核中 > 公开\n            let statusText: string;\n            if (item.status?.is_delete) {\n                statusText = \"deleted\";\n            } else if (item.status?.is_private) {\n                statusText = \"private\";\n            } else if (item.status?.in_reviewing) {\n                statusText = \"reviewing\";\n            } else {\n                statusText = \"public\";\n            }\n\n            return {\n                title: item.desc || \"无作品描述\",\n                imageUrl: item.Cover?.url_list?.[0] || \"\",\n                createTime: item.create_time,\n                redirectUrl: workDetailUrl,\n\n                // 统计数据\n                playNum: item.statistics?.play_count || 0,\n                likeNum: item.statistics?.digg_count || 0,\n                commentNum: item.statistics?.comment_count || 0,\n                shareNum: item.statistics?.share_count || 0,\n                collectNum: item.statistics?.collect_count || 0,\n\n                // 扩展字段\n                awemeId: item.aweme_id,\n                awemeType: item.aweme_type ?? 0,\n                duration: item.duration,\n                status: statusText,\n                publicUrl: workPublicUrl,\n\n                ...(showOriginalData ? { originalData: item } : {}),\n            };\n        });\n\n        return success(\n            {\n                articleCell,\n                ...(onlySuccess\n                    ? {\n                          pagination: {\n                              total: workListResponse.total || allWorks.length,\n                              nextPage: hasMore,\n                              pageNum,\n                              pageSize,\n                          },\n                      }\n                    : null),\n            },\n            \"抖音数据获取成功\",\n        );\n    } catch (error) {\n        const errMsg = error instanceof Error ? error.message : String(error);\n        _task.logger.error(`抖音作品数据获取失败: ${errMsg}`);\n        return errorResponse(USER_MESSAGE.DOUYIN_POST_FETCH_FAILED);\n    }\n}\n","import { AutomateTask, success } from \"@iflyrpa/share\";\nimport type { AxiosProxyParams } from \"../../types\";\nimport { USER_MESSAGE } from \"../../utils/errorMessages\";\nimport { Http } from \"../../utils/http\";\nimport { type FetchArticlesParams } from \".\";\nimport { errorResponse, FetchArticlesResponse, ShipinhaoArticle } from \"./types\";\n\n// API 响应接口定义\ninterface ShipinhaoApiPost {\n    objectId?: string;\n    exportId?: string;\n    object_desc?: string;\n    desc?: {\n        description?: string;\n        media?: Array<{\n            thumbUrl?: string;\n            coverUrl?: string;\n            url?: string;\n        }>;\n    };\n    cover?: {\n        url: string;\n    };\n    media_url?: string;\n    createTime?: number;\n    effectiveTime?: number;\n    create_time?: number;\n    post_status?: number;\n    status?: number;\n    post_type?: number;\n    objectType?: number;\n\n    // 统计数据\n    readCount?: number;\n    read_count?: number;\n    likeCount?: number;\n    like_count?: number;\n    commentCount?: number;\n    comment_count?: number;\n    forwardCount?: number;\n    forward_count?: number;\n    favCount?: number;\n    fav_count?: number;\n}\n\ninterface ShipinhaoPostListResponse {\n    errCode?: number;\n    errMsg?: string;\n    data?: {\n        list?: ShipinhaoApiPost[];\n        totalCount?: number;\n        continueFlag?: boolean;\n        lastBuff?: string;\n    };\n    posts?: ShipinhaoApiPost[];\n    post_list?: ShipinhaoApiPost[];\n    has_more?: boolean;\n    total?: number;\n    offset?: number;\n}\n\n/**\n * 视频号作品数据采集\n *\n * 采集内容：\n * 1. 账号维度数据：关注者、昨日净增关注、昨日新增播放、昨日新增喜欢、昨日新增评论\n * 2. 作品维度数据：封面图、标题、发布时间、阅读/喜欢/评论/转发/点赞等\n *\n * 参考小红书实现模式：\n * - 内部封装 fetchPosts 函数\n * - 支持代理配置\n * - 支持重试机制\n * - 视频和图文分别获取后合并\n */\nexport async function handleShipinhaoData(\n    _task: AutomateTask,\n    params: FetchArticlesParams,\n): Promise<FetchArticlesResponse> {\n    try {\n        const { cookies, postType = \"all\", pageSize = 10, showOriginalData = false } = params;\n        // pageNum 为 0 或未传时按 1 处理\n        const pageNum = params.pageNum || 1;\n\n        // 从cookies中提取_aid（如果存在）\n        const aidCookie = cookies.find((it) => it.name === \"_aid\")?.value;\n        const aid = aidCookie || \"9d3e0e9f-b842-498d-a273-4285d58df264\";\n\n        // 提取必需的请求头信息\n        const uinCookie = cookies.find((it) => it.name === \"uin\" || it.name === \"wxuin\")?.value || \"0000000000\";\n        const deviceIdCookie = cookies.find(\n            (it) => it.name === \"device_id\" || it.name === \"finger_print_device_id\",\n        )?.value;\n\n        // 配置请求头和代理\n        const headers = {\n            cookie: cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            referer: \"https://channels.weixin.qq.com\",\n            origin: \"https://channels.weixin.qq.com\",\n            \"content-type\": \"application/json\",\n            \"X-WECHAT-UIN\": uinCookie,\n            ...(deviceIdCookie ? { \"finger-print-device-id\": deviceIdCookie } : {}),\n        };\n\n        const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n\n        const http = new Http(...args);\n\n        // 从cookies中提取_log_finder_id（如果存在）\n        const finderIdCookie =\n            cookies.find((it) => it.name === \"_log_finder_id\" || it.name === \"finder_id\")?.value || \"\";\n\n        // 内部函数：获取作品列表（支持分页）\n        // 视频: userpageType=11, pageUrl=.../post/list\n        // 图文: userpageType=10, pageUrl=.../post/finderNewLifePostList\n        async function fetchPosts(\n            currentPage: number,\n            userpageType: number,\n            pageUrl: string,\n            rawKeyBuff: string = \"\",\n        ): Promise<ShipinhaoPostListResponse> {\n            return await http.api<ShipinhaoPostListResponse>(\n                {\n                    method: \"post\",\n                    url: \"https://channels.weixin.qq.com/micro/content/cgi-bin/mmfinderassistant-bin/post/post_list\",\n                    params: {\n                        _aid: aid,\n                        _rid: `${Date.now().toString(16)}-${Math.random().toString(36).substring(2, 9)}`,\n                        _pageUrl: encodeURIComponent(pageUrl),\n                    },\n                    data: {\n                        pageSize,\n                        currentPage,\n                        userpageType,\n                        stickyOrder: true,\n                        timestamp: Date.now().toString(),\n                        _log_finder_uin: \"\",\n                        _log_finder_id: finderIdCookie,\n                        rawKeyBuff,\n                        pluginSessionId: null,\n                        scene: 7,\n                        reqScene: 7,\n                    },\n                },\n                { retries: 3, retryDelay: 100, timeout: 5000 },\n            );\n        }\n\n        // 内部函数：循环获取所有作品（处理分页）\n        // 返回全部作品及该类型的总数（totalCount，用于精确统计与完整性校验）\n        async function fetchAllPosts(\n            userpageType: number,\n            pageUrl: string,\n        ): Promise<{ posts: ShipinhaoApiPost[]; totalCount: number }> {\n            const allPosts: ShipinhaoApiPost[] = [];\n            let currentPage = 1;\n            let rawKeyBuff = \"\";\n            let continueFlag = true;\n            let totalCount = 0;\n\n            while (continueFlag) {\n                const response = await fetchPosts(currentPage, userpageType, pageUrl, rawKeyBuff);\n\n                // 检查认证错误\n                if (response.errCode && AUTH_ERROR_CODES.includes(response.errCode)) {\n                    throw new Error(`AUTH_ERROR:${response.errMsg || \"登录已失效\"}`);\n                }\n\n                // 其他错误\n                if (response.errCode) {\n                    _task.logger.warn(`视频号API错误：${response.errMsg} (${response.errCode})`);\n                    throw new Error(`视频号API错误：${response.errMsg} (${response.errCode})`);\n                }\n\n                // 首页记录该类型的总数\n                if (currentPage === 1) {\n                    totalCount = response.data?.totalCount ?? 0;\n                }\n\n                const posts = response.data?.list || response.posts || response.post_list || [];\n                allPosts.push(...posts);\n\n                // 检查是否还有更多数据\n                continueFlag = response.data?.continueFlag ?? false;\n                rawKeyBuff = response.data?.lastBuff || \"\";\n\n                // _task.logger.info(\n                //     `获取${userpageType === 11 ? \"视频\" : \"图文\"}第${currentPage}页，本页${posts.length}条，累计${allPosts.length}条，continueFlag=${continueFlag}`,\n                // );\n\n                currentPage++;\n\n                // 防止无限循环\n                if (currentPage > 100) {\n                    _task.logger.warn(\"分页超过100页，停止请求\");\n                    break;\n                }\n            }\n\n            // 完整性校验：拉取总数应与接口声明的 totalCount 一致\n            if (totalCount > 0 && allPosts.length !== totalCount) {\n                _task.logger.warn(`视频号分页可能不完整：期望${totalCount}条，实际${allPosts.length}条`);\n            }\n\n            return { posts: allPosts, totalCount };\n        }\n\n        // 将单个作品转换为统一格式\n        const mapPost = (item: ShipinhaoApiPost, forcePostType: \"video\" | \"article\"): ShipinhaoArticle => {\n            // 提取封面图\n            let imageUrl = \"\";\n            if (item.desc?.media?.[0]?.thumbUrl) {\n                imageUrl = item.desc.media[0].thumbUrl;\n            } else if (item.desc?.media?.[0]?.coverUrl) {\n                imageUrl = item.desc.media[0].coverUrl;\n            } else if (item.cover?.url) {\n                imageUrl = item.cover.url;\n            } else if (item.media_url) {\n                imageUrl = item.media_url;\n            }\n\n            // 提取标题\n            const title = item.desc?.description || item.object_desc || \"无标题\";\n\n            return {\n                title,\n                imageUrl,\n                createTime: (item.createTime || item.create_time) as number,\n                redirectUrl: \"https://channels.weixin.qq.com/platform\",\n\n                readNum: item.readCount || item.read_count || 0,\n                likeNum: item.likeCount || item.like_count || 0,\n                commentNum: item.commentCount || item.comment_count || 0,\n                forwardNum: item.forwardCount || item.forward_count || 0,\n                favNum: item.favCount || item.fav_count || 0,\n\n                objectId: item.exportId || item.objectId || \"\",\n                postType: forcePostType,\n                postStatus: item.status || item.post_status || 0,\n\n                ...(item.effectiveTime ? { effectiveTime: item.effectiveTime } : {}),\n                ...(showOriginalData ? { originalData: item } : {}),\n            };\n        };\n\n        const allArticles: ShipinhaoArticle[] = [];\n        const needVideo = postType === \"all\" || postType === \"video\";\n        const needArticle = postType === \"all\" || postType === \"article\";\n\n        // 认证相关的错误码\n        const AUTH_ERROR_CODES = [300333, 300334, 300330, 300331, 300332];\n\n        // 视频 + 图文各自的总数，相加即合并总数\n        let combinedTotal = 0;\n\n        // 获取视频作品（userpageType=11）\n        if (needVideo) {\n            try {\n                const videoPageUrl = \"https://channels.weixin.qq.com/micro/content/post/list\";\n                const { posts, totalCount } = await fetchAllPosts(11, videoPageUrl);\n                // _task.logger.info(`视频号视频获取响应：共${posts.length}条，totalCount=${totalCount}`);\n\n                const videoArticles = posts\n                    .filter((item) => item.createTime || item.create_time)\n                    .map((item) => mapPost(item, \"video\"));\n\n                allArticles.push(...videoArticles);\n                combinedTotal += totalCount || videoArticles.length;\n            } catch (error) {\n                const errMsg = error instanceof Error ? error.message : String(error);\n                // 认证错误直接向上抛出\n                if (errMsg.startsWith(\"AUTH_ERROR:\")) {\n                    throw error;\n                }\n                _task.logger.warn(`获取视频号视频失败：${errMsg}`);\n            }\n        }\n\n        // 获取图文作品（userpageType=10）\n        if (needArticle) {\n            try {\n                const articlePageUrl = \"https://channels.weixin.qq.com/micro/content/post/finderNewLifePostList\";\n                const { posts, totalCount } = await fetchAllPosts(10, articlePageUrl);\n                // _task.logger.info(`视频号图文获取响应：共${posts.length}条，totalCount=${totalCount}`);\n\n                const articleArticles = posts\n                    .filter((item) => item.createTime || item.create_time)\n                    .map((item) => mapPost(item, \"article\"));\n\n                allArticles.push(...articleArticles);\n                combinedTotal += totalCount || articleArticles.length;\n            } catch (error) {\n                const errMsg = error instanceof Error ? error.message : String(error);\n                // 认证错误直接向上抛出\n                if (errMsg.startsWith(\"AUTH_ERROR:\")) {\n                    throw error;\n                }\n                _task.logger.warn(`获取视频号图文失败：${errMsg}`);\n            }\n        }\n\n        // 合并后按发布时间倒序排列（最新的在前）\n        allArticles.sort((a, b) => b.createTime - a.createTime);\n\n        // 全量拉取后再按 pageNum/pageSize 切片\n        const total = allArticles.length;\n        const start = (pageNum - 1) * pageSize;\n        const pageItems = allArticles.slice(start, start + pageSize);\n\n        // _task.logger.info(`视频号数据获取成功，合计${total}条，第${pageNum}页返回${pageItems.length}条`);\n        // _task.logger.info(`视频号数据获取成功: ${JSON.stringify(pageItems)}`)\n\n        return success(\n            {\n                articleCell: pageItems,\n                pagination: {\n                    total,\n                    nextPage: start + pageSize < total,\n                    pageNum,\n                    pageSize,\n                },\n            },\n            \"视频号数据获取成功\",\n        );\n    } catch (error) {\n        const errMsg = error instanceof Error ? error.message : String(error);\n        _task.logger.error(`视频号作品数据获取失败: ${errMsg}`);\n\n        // 认证错误返回 414\n        if (errMsg.startsWith(\"AUTH_ERROR:\")) {\n            return errorResponse(\"视频号数据获取失败，请检查账号状态\", 414);\n        }\n\n        return errorResponse(USER_MESSAGE.SHIPINHAO_POST_FETCH_FAILED);\n    }\n}\n","import { AutomateTask, success } from \"@iflyrpa/share\";\nimport { USER_MESSAGE } from \"../../utils/errorMessages\";\nimport { Http } from \"../../utils/http\";\nimport { type FetchArticlesParams } from \".\";\nimport { errorResponse, FetchArticlesResponse, ToutiaoArticle } from \"./types\";\n\ninterface ArticleResponse {\n    itemCell: {\n        actionCtrl: Record<string, unknown>;\n        cellCtrl: {\n            articleImageType: number;\n            dspStyle: null | string;\n        };\n        extra: {\n            answer_count: string;\n            origin_content: string;\n        };\n        logPB: string;\n        articleBase: {\n            createTime: number;\n            itemStatus: number;\n            articleURL: string;\n            displayFlags: string;\n            gidStr: string;\n            subTitle: string | null;\n            title: string;\n            abstractText: string;\n            content: string;\n            displayURL: string;\n            groupID: number;\n            publishTime: number;\n            schema: string;\n            visibilityLevel: number;\n        };\n        articleClassification: {\n            bizTag: number;\n            groupSource: number;\n            isOriginal: boolean;\n            isStick: boolean;\n            isSubject: boolean;\n            articleSubType: number;\n            articleType: number;\n            bizID: number;\n        };\n        containsElements: {\n            hasImage: boolean;\n            hasVideo: boolean;\n        };\n        imageList: {\n            staggerFeedCover: ImageInfo[];\n            thumbImageList: ImageInfo[];\n        };\n        itemCounter: {\n            readCount: number;\n            repinCount: number;\n            showCount: number;\n            videoWatchCount: number;\n            commentCount: number;\n            diggCount: number;\n        };\n        richContentInfo: {\n            richContent: string;\n            titleRichSpan: string;\n        };\n        shareInfo: {\n            shareURL: string;\n        };\n        userInfo: {\n            avatarURL: string;\n            name: string;\n            userID: number;\n        };\n    };\n}\n\ninterface ImageInfo {\n    width: number;\n    height: number;\n    uri: string;\n    url: string;\n}\n\nexport async function handleToutiaoData(\n    _task: AutomateTask,\n    params: FetchArticlesParams,\n): Promise<FetchArticlesResponse> {\n    try {\n        const {\n            cookies,\n            pageNum = 1,\n            pageSize = 10,\n            showOriginalData = false,\n            onlySuccess = false,\n            containsArticle = false,\n        } = params;\n\n        const http = new Http({\n            headers: {\n                cookie: cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            },\n        });\n\n        const getDetailContent = async (id: string) => {\n            try {\n                const detailInfo = await http.api<{ content: string }>({\n                    method: \"get\",\n                    url: \"https://mp.toutiao.com/mp/agw/article/edit\",\n                    params: {\n                        pgc_id: id,\n                        wxstyle: 0,\n                        format: \"json\",\n                    },\n                });\n\n                return detailInfo.content;\n            } catch (err) {\n                console.error(\"❌ JSON 解析失败:\", err);\n                return null;\n            }\n        };\n\n        const visitedUid = await http.api<{ code: number; user_id_str: string }>({\n            url: \"https://mp.toutiao.com/mp/agw/creator_center/user_info?\",\n            method: \"get\",\n            params: { app_id: 1231 },\n        });\n\n        if (visitedUid.code !== 0) {\n            return errorResponse(\"头条号数据获取失败，请检查账号状态\", 414);\n        }\n\n        const articleInfo = await http.api<{\n            data: { assembleCell: ArticleResponse }[];\n            total_number: number;\n            api_base_info: { app_extra_params: string };\n        }>({\n            method: \"get\",\n            url: \"https://mp.toutiao.com/api/feed/mp_provider/v1/\",\n            params: {\n                provider_type: \"mp_provider\",\n                aid: \"13\",\n                app_name: \"news_article\",\n                category: \"mp_all\",\n                channel: \"\",\n                stream_api_version: \"88\",\n                genre_type_switch: '{\"repost\":1,\"small_video\":1,\"toutiao_graphic\":1,\"weitoutiao\":1,\"xigua_video\":1}',\n                device_platform: \"pc\",\n                platform_id: \"0\",\n                visited_uid: visitedUid.user_id_str,\n                offset: (pageNum - 1) * pageSize,\n                count: pageSize,\n                keyword: \"\",\n                client_extra_params: `{\"category\":\"mp_all\",\"real_app_id\":\"1231\",\"need_forward\":\"true\",\"offset_mode\":\"1\",\"page_index\":\"1\",\"status\":${onlySuccess ? \"2\" : \"8\"},\"source\":\"0\"}`,\n                app_id: \"1231\",\n            },\n        });\n\n        const articleCell: ToutiaoArticle[] = await Promise.all(\n            articleInfo.data.map(async (item) => ({\n                title: item.assembleCell.itemCell.articleBase.title,\n                imageUrl: item.assembleCell.itemCell.imageList.staggerFeedCover[0].url,\n                createTime: item.assembleCell.itemCell.articleBase.publishTime,\n                redirectUrl: item.assembleCell.itemCell.articleBase.articleURL,\n                showNum: item.assembleCell.itemCell.itemCounter.showCount,\n                readNum: item.assembleCell.itemCell.itemCounter.readCount,\n                likeNum: item.assembleCell.itemCell.itemCounter.diggCount,\n                commentNum: item.assembleCell.itemCell.itemCounter.commentCount,\n                ...(showOriginalData ? { originalData: item } : {}),\n                ...(containsArticle\n                    ? { article: await getDetailContent(item.assembleCell.itemCell.articleBase.gidStr) }\n                    : {}),\n            })),\n        );\n\n        const api_base_info_json: { total_count: number } = JSON.parse(articleInfo.api_base_info.app_extra_params);\n        return success(\n            {\n                articleCell,\n                ...(onlySuccess\n                    ? {\n                          pagination: {\n                              total: api_base_info_json.total_count,\n                              pageNum,\n                              pageSize,\n                          },\n                      }\n                    : null),\n            },\n            \"头条号文章文章获取成功\",\n        );\n    } catch (error) {\n        const errMsg = error instanceof Error ? error.message : String(error);\n        _task.logger.error(`头条号文章数据获取失败: ${errMsg}`);\n        return errorResponse(USER_MESSAGE.TT_POST_FETCH_FAILED);\n    }\n}\n","import vm from \"node:vm\";\nimport { AutomateTask, success } from \"@iflyrpa/share\";\nimport { DomUtils, parseDocument } from \"htmlparser2\";\nimport { Http } from \"../../utils/http\";\nimport type { FetchArticlesParams } from \".\";\nimport { errorResponse, type FetchArticlesResponse, type WeixinArticle } from \"./types\";\n\ninterface PublishInfo {\n    type: number;\n    msgid: number;\n    appmsg_info: Array<{\n        share_type: number;\n        appmsgid: number;\n        content_url: string;\n        title: string;\n        is_deleted: boolean;\n        copyright_status: number;\n        copyright_type: number;\n        read_num: number;\n        like_num: number;\n        comment_id: string;\n        is_comment_enable: boolean;\n        comment_num: number;\n        cover: string;\n        smart_product: number;\n        modify_status: number;\n        appmsg_like_type: number;\n        can_delete_status: number;\n        old_like_num: number;\n        itemidx: number;\n        is_pay_subscribe: number;\n        is_from_transfer: number;\n        public_tag_info: {\n            modify_times: number;\n            init_tag_list_size: number;\n        };\n        digest: string;\n        is_cooling_article: number;\n        pic_cdn_url_235_1: string;\n        pic_cdn_url_16_9: string;\n        pic_cdn_url_3_4: string;\n        pic_cdn_url_1_1: string;\n        disable_recommend: number;\n        line_info: {\n            use_line: number;\n            line_count: number;\n            send_time: number;\n            is_appmsg_flag: number;\n            is_use_flag: number;\n        };\n        claim_source_type: number;\n        share_num: number;\n        is_rumor_refutation: number;\n        segment_comment_id: string;\n        is_segment_comment_enable: boolean;\n        multi_picture_cover: number;\n        moment_like_num: number;\n        item_show_type: number;\n    }>;\n    copy_appmsg_id: number;\n    new_publish: number;\n}\n\ninterface BasePublishItem<T = string> {\n    publish_type: number;\n    publish_info: T;\n}\n\ninterface BaseParsedPublishPage<T = string> {\n    total_count: number;\n    publish_count: number;\n    masssend_count: number;\n    publish_list: BasePublishItem<T>[];\n    featured_count: number;\n}\n\ntype ParsedPublishPage = BaseParsedPublishPage<PublishInfo>;\n\nexport async function handleWeixinData(\n    _task: AutomateTask,\n    params: FetchArticlesParams,\n): Promise<FetchArticlesResponse> {\n    const {\n        cookies,\n        token,\n        pageNum = 1,\n        pageSize = 10,\n        showOriginalData = false,\n        onlySuccess = false,\n        cursor,\n        lastPage,\n        containsArticle = false,\n    } = params;\n    if (!token) return { code: 414, message: \"缺少token\", data: {} };\n    const http = new Http({\n        headers: {\n            cookie: cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        },\n    });\n    const ParsePublishPage = (html: string): ParsedPublishPage => {\n        const document = parseDocument(html);\n        // console.log(document);\n\n        const scripts = DomUtils.findAll((el) => el.type === \"script\", document.children);\n        // console.log(scripts);\n\n        // 3. 准备 vm 沙箱\n        const sandbox: any = {\n            window: {},\n        };\n\n        vm.createContext(sandbox);\n\n        // 4. 执行包含 wx.cgiData 的脚本\n        for (const script of scripts) {\n            const code = DomUtils.textContent(script);\n\n            if (!code) continue;\n\n            if (code.includes(\"publish_page\")) {\n                const replaceCode = code.replace(\"publish_page =\", \"window.publish_page =\");\n                try {\n                    vm.runInContext(replaceCode, sandbox, {\n                        timeout: 1000,\n                    });\n                } catch (e) {\n                    // 非关键脚本可忽略\n                }\n            }\n        }\n        const decodeHtmlEntities = (encodedStr: string): string => {\n            return encodedStr\n                .replace(/&quot;/g, '\"')\n                .replace(/&amp;/g, \"&\")\n                .replace(/&lt;/g, \"<\")\n                .replace(/&gt;/g, \">\")\n                .replace(/&#39;/g, \"'\");\n        };\n\n        sandbox.window.publish_page.publish_list.forEach((it: { publish_info: string }) => {\n            it.publish_info = JSON.parse(decodeHtmlEntities(it.publish_info));\n        });\n\n        return sandbox.window.publish_page;\n    };\n    async function fetchArticles(begin: number, pageSize: number, token: string | number): Promise<string> {\n        return http.api<string>({\n            method: \"get\",\n            url: \"https://mp.weixin.qq.com/cgi-bin/appmsgpublish\",\n            params: {\n                sub: \"list\",\n                begin: begin,\n                count: pageSize,\n                token: token,\n                lang: \"zh_CN\",\n            },\n        });\n    }\n\n    const size = onlySuccess ? 10 : pageSize > 20 ? 20 : pageSize;\n    let begin = (lastPage ?? pageNum) - 1; // 转换为 0-based index\n    const rawArticlesInfo = await fetchArticles(begin * size, size, token);\n    if (rawArticlesInfo.includes(\"请重新<a id='jumpUrl' href='/'>登录</a>\"))\n        return errorResponse(\"微信公众号数据获取失败，请检查账号状态\", 414);\n    const articlesInfo = ParsePublishPage(rawArticlesInfo);\n    let articleCell: WeixinArticle[] = [];\n\n    if (!onlySuccess && pageSize > 20) {\n        let totalFetched = articlesInfo.publish_list.length;\n        let nextPage = pageNum + 1;\n\n        while (totalFetched < pageSize) {\n            const remaining = pageSize - totalFetched;\n            const currentPageSize = remaining > 20 ? 20 : remaining;\n\n            const _rawArticlesInfo = await fetchArticles((nextPage - 1) * 20, currentPageSize, token);\n            const parsed = ParsePublishPage(_rawArticlesInfo);\n\n            articlesInfo.publish_list = articlesInfo.publish_list.concat(parsed.publish_list);\n            totalFetched = articlesInfo.publish_list.length;\n\n            if (parsed.publish_list.length < currentPageSize) break;\n            nextPage++;\n        }\n    }\n\n    let nextPage = false;\n    if (onlySuccess) {\n        let filteredList = articlesInfo.publish_list\n            .filter((item) => item.publish_info.appmsg_info[0].content_url.indexOf(\"tempkey\") === -1)\n            .map((item) => item.publish_info);\n\n        if (cursor) {\n            const cursorIndex = filteredList.findIndex((item) => item.msgid === cursor);\n            if (cursorIndex !== -1) filteredList = filteredList.slice(cursorIndex + 1);\n        }\n\n        let totalFetched = filteredList.length;\n\n        while (totalFetched < pageSize && begin * size < articlesInfo.total_count) {\n            begin += 1; // 页数递增\n            const nextRawArticlesInfo = await fetchArticles(begin * size, size, token);\n            const nextArticlesInfo = ParsePublishPage(nextRawArticlesInfo);\n            const newFiltered = nextArticlesInfo.publish_list\n                .filter((item) => item.publish_info.appmsg_info[0].content_url.indexOf(\"tempkey\") === -1)\n                .map((item) => item.publish_info);\n            filteredList = filteredList.concat(newFiltered);\n            totalFetched = filteredList.length;\n        }\n\n        filteredList = filteredList.slice(0, pageSize);\n        totalFetched = filteredList.length;\n\n        if (totalFetched >= pageSize && begin * size < articlesInfo.total_count) {\n            const nextRawArticlesInfo = await fetchArticles((begin + 1) * size, size, token);\n            const nextArticlesInfo = ParsePublishPage(nextRawArticlesInfo);\n            nextPage =\n                nextArticlesInfo.publish_list.length > 0 &&\n                nextArticlesInfo.publish_list.some(\n                    (item) => item.publish_info.appmsg_info[0].content_url.indexOf(\"tempkey\") === -1,\n                );\n        }\n\n        const getDetailContent = async (id: number) => {\n            try {\n                const detailInfo = await http.api<string>({\n                    method: \"get\",\n                    url: \"https://mp.weixin.qq.com/cgi-bin/appmsg\",\n                    params: {\n                        token,\n                        t: \"media/appmsg_edit\",\n                        action: \"edit\",\n                        type: 77,\n                        appmsgid: id,\n                        isMul: 1,\n                        get_delete: 1,\n                        re_edit: 1,\n                        lang: \"zh_CN\",\n                        timestamp: Date.now(),\n                    },\n                });\n\n                const text = detailInfo.match(/var\\s+infos\\s*=\\s*({[\\s\\S]*?})\\s*,\\s*item\\s*=/);\n                if (!text) {\n                    const isCheckPass = detailInfo.indexOf(\"环境异常\");\n                    if (isCheckPass > -1) return \"当前环境异常，无法获取文章内容\";\n                    return null;\n                }\n\n                const deatil: { item: { content: string }[] } = JSON.parse(text[1].trim());\n\n                return deatil.item[0].content;\n            } catch (err) {\n                console.error(\"❌ 解析失败:\", err);\n                return null;\n            }\n        };\n\n        const lastMsgId = filteredList.length > 0 ? filteredList[filteredList.length - 1].msgid : undefined;\n        articleCell = await Promise.all(\n            filteredList.map(async (item) => ({\n                title: item.appmsg_info[0].title,\n                imageUrl: item.appmsg_info[0].cover,\n                createTime: item.appmsg_info[0].line_info.send_time,\n                redirectUrl: item.appmsg_info[0].content_url,\n                readNum: item.appmsg_info[0].read_num,\n                likeNum: item.appmsg_info[0].old_like_num,\n                shareNum: item.appmsg_info[0].share_num,\n                recommendNum: item.appmsg_info[0].like_num,\n                ...(showOriginalData ? { originalData: item } : {}),\n                ...(containsArticle ? { article: await getDetailContent(item.msgid) } : {}),\n            })),\n        );\n\n        return success(\n            {\n                articleCell,\n                pagination: {\n                    nextPage,\n                    pageNum,\n                    pageSize,\n                    lastPage: begin + 1, // 返回当前页数\n                    cursor: lastMsgId, // 返回最后一条的 msgid\n                },\n            },\n            \"微信文章文章获取成功\",\n        );\n    }\n\n    const BasePublishBUilder = (publishInfo: BasePublishItem<PublishInfo>[]): WeixinArticle[] => {\n        return publishInfo.map((item) => ({\n            title: item.publish_info.appmsg_info[0].title,\n            imageUrl: item.publish_info.appmsg_info[0].cover,\n            createTime: item.publish_info.appmsg_info[0].line_info.send_time,\n            redirectUrl: item.publish_info.appmsg_info[0].content_url,\n            readNum: item.publish_info.appmsg_info[0].read_num,\n            likeNum: item.publish_info.appmsg_info[0].old_like_num,\n            shareNum: item.publish_info.appmsg_info[0].share_num,\n            recommendNum: item.publish_info.appmsg_info[0].like_num,\n            ...(showOriginalData ? { originalData: item } : {}),\n        }));\n    };\n\n    articleCell = BasePublishBUilder(articlesInfo.publish_list);\n\n    const timerPublishData = await http.api({\n        url: \"https://mp.weixin.qq.com/cgi-bin/home\",\n        method: \"get\",\n        params: {\n            t: \"home/index\",\n            token,\n            lang: \"zh_CN\",\n        },\n    });\n\n    const decodeTimerPublishData = (html: string): BasePublishItem<PublishInfo>[] | [] => {\n        const document = parseDocument(html);\n        // console.log(document);\n\n        const scripts = DomUtils.findAll((el) => el.type === \"script\", document.children);\n\n        // 3. 准备 vm 沙箱\n        const sandbox: any = {\n            window: {},\n        };\n\n        vm.createContext(sandbox);\n        // 4. 执行包含 wx.cgiData 的脚本\n        for (const script of scripts) {\n            let code = DomUtils.textContent(script);\n\n            if (!code) continue;\n\n            if (code.includes(\"wx.cgiData\")) {\n                code = code.replace(\"wx.cgiData\", \"window.wx.cgiData\");\n                try {\n                    vm.runInContext(code, sandbox, {\n                        timeout: 1000,\n                    });\n                } catch (e) {\n                    // 非关键脚本可忽略\n                }\n            }\n        }\n        if (!sandbox.window.wx || !sandbox.window.wx.cgiData || !sandbox.window.wx.cgiData.timesend_msg) {\n            return [];\n        }\n        const timesend_msg = JSON.parse(sandbox.window.wx.cgiData.timesend_msg);\n        return timesend_msg.sent_list.map((it: PublishInfo) => {\n            return {\n                publish_info: it,\n            };\n        });\n    };\n\n    const timmerPublish = decodeTimerPublishData(timerPublishData);\n    return success(\n        {\n            ...(timmerPublish.length === 0 ? {} : { timmerPublish: BasePublishBUilder(timmerPublish) }),\n            articleCell,\n        },\n        \"微信文章文章获取成功\",\n    );\n}\n","import { AutomateTask, success } from \"@iflyrpa/share\";\nimport type { AxiosProxyParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { Xhshow } from \"../../utils/xhsXsEncrypt\";\nimport type { FetchArticlesParams } from \".\";\nimport { errorResponse, type FetchArticlesResponse, type XiaohongshuArticle } from \"./types\";\n\ninterface Note {\n    id: string;\n    sticky: boolean;\n    schedule_post_time: number;\n    comments_count: number;\n    tab_status: number;\n    display_title: string;\n    time: string;\n    view_count: number;\n    shared_count: number;\n    images_list: {\n        url: string;\n    }[];\n    permission_code: number;\n    permission_msg: string;\n    level: number;\n    xsec_token: string;\n    xsec_source: string;\n    type: string;\n    likes: number;\n    collected_count: number;\n    goods_info: {\n        goods_name: string[];\n    };\n}\ntype ArticleApiResponse = {\n    data: {\n        notes: Note[];\n        page: number;\n        tags: {\n            notes_count: number;\n        }[];\n    };\n};\nexport async function handleXiaohongshuData(\n    _task: AutomateTask,\n    params: FetchArticlesParams,\n): Promise<FetchArticlesResponse> {\n    const {\n        cookies,\n        pageNum = 1,\n        pageSize = 10,\n        showOriginalData = false,\n        onlySuccess = false,\n        containsArticle = false,\n    } = params;\n\n    const xsEncrypt = new Xhshow();\n    const a1Cookie = cookies.find((it) => it.name === \"a1\")?.value;\n    if (!a1Cookie) return { code: 414, message: \"小红书数据获取失败，请检查账号状态\", data: {} };\n    if (onlySuccess && pageSize !== 10) return { code: 414, message: \"小红书pageSize不可修改\", data: {} };\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://creator.xiaohongshu.com\",\n        origin: \"https://creator.xiaohongshu.com\",\n    };\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n\n    const http = new Http(...args);\n    const recordCookie = params.cookies.reduce<Record<string, string>>((acc, cookie) => {\n        if (cookie.name && cookie.value) {\n            acc[cookie.name] = cookie.value;\n        }\n        return acc;\n    }, {});\n\n    async function fetchArticles(pageNum: number, onlySuccess = false): Promise<ArticleApiResponse> {\n        const serveUrl = \"/web_api/sns/v5/creator/note/user/posted\";\n        const serveParams = {\n            tab: onlySuccess ? 1 : 0,\n            page: pageNum - 1,\n        };\n        const serveXsHeader = xsEncrypt.signHeadersGet(serveUrl, recordCookie, \"xhs-pc-web\", serveParams);\n\n        return await http.api<ArticleApiResponse>(\n            {\n                method: \"get\",\n                baseURL: \"https://edith.xiaohongshu.com\",\n                url: serveUrl,\n                headers: serveXsHeader,\n                params: serveParams,\n            },\n            { retries: 3, retryDelay: 20, timeout: 3000 },\n        );\n    }\n    const articleInfo = await fetchArticles(pageNum, onlySuccess);\n\n    let hasNextpage = articleInfo.data.page !== -1;\n    const filtered = articleInfo.data.notes;\n    let currentPage = pageNum + 1;\n    const usedPages = new Set<number>();\n    while (filtered.length < pageSize && hasNextpage) {\n        if (usedPages.has(currentPage)) {\n            currentPage++;\n            continue;\n        }\n\n        const res = await fetchArticles(currentPage, onlySuccess);\n        usedPages.add(currentPage);\n\n        const validItems = res.data.notes;\n        filtered.push(...validItems);\n\n        currentPage++;\n        hasNextpage = res.data.page !== -1;\n    }\n\n    const getDetailContent = async (id: string) => {\n        try {\n            const detailUrl = \"/web_api/sns/capa/postgw/note/detail\";\n            const detailParams = {\n                note_id: id,\n                source: \"official\",\n                edit_mode: 1,\n            };\n            const detailxsHeader = xsEncrypt.signHeadersGet(detailUrl, recordCookie, \"xhs-pc-web\", detailParams);\n\n            const detailInfo = await http.api<{ data: { desc: string } }>(\n                {\n                    method: \"get\",\n                    baseURL: \"https://edith.xiaohongshu.com\",\n                    url: detailUrl,\n                    headers: detailxsHeader,\n                    params: detailParams,\n                },\n                { retries: 3, retryDelay: 20, timeout: 3000 },\n            );\n            return detailInfo.data.desc;\n        } catch (err) {\n            console.error(\"❌ JSON 解析失败:\", err);\n            return null;\n        }\n    };\n\n    const final = filtered.slice(0, pageSize);\n    const articleCell: XiaohongshuArticle[] = await Promise.all(\n        final.map(async (item) => ({\n            title: item.display_title,\n            imageUrl: item.images_list[0].url,\n            createTime: Math.floor(new Date(item.time.replace(/-/g, \"/\")).getTime() / 1000),\n            redirectUrl: `https://www.xiaohongshu.com/explore/${item.id}?xsec_token=${item.xsec_token}&xsec_source=pc_creatormng`,\n            readNum: item.view_count,\n            likeNum: item.likes,\n            commentNum: item.comments_count,\n            collectNum: item.collected_count,\n            shareNum: item.shared_count,\n            // articleStates: item.status,\n            ...(showOriginalData ? { originalData: item } : {}),\n            ...(containsArticle ? { article: await getDetailContent(item.id) } : {}),\n        })),\n    );\n\n    return success(\n        {\n            articleCell,\n            ...(onlySuccess\n                ? {\n                      pagination: {\n                          nextPage: hasNextpage,\n                          pageNum,\n                          pageSize,\n                      },\n                  }\n                : null),\n        },\n        \"小红书文章数据获取成功\",\n    );\n}\n","import { type CommonAction, success } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport { ActionCommonParamsSchema } from \"../../types\";\nimport { handleBaijiahaoData } from \"./handleBjhData\";\nimport { handleDouyinData } from \"./handleDouyinData\";\nimport { handleShipinhaoData } from \"./handleShipinhaoData\";\nimport { handleToutiaoData } from \"./handleTTData\";\nimport { handleWeixinData } from \"./handleWXData\";\nimport { handleXiaohongshuData } from \"./handleXhsData\";\nimport type { FetchArticlesData } from \"./types\";\n// 请求参数接口\n\nexport const FetchArticlesParamsSchema = ActionCommonParamsSchema.extend({\n    platform: z.string().describe(\"社交平台：weixin, toutiao, baijiahao, xiaohongshu, douyin, shipinhao\"),\n    token: z.union([z.string(), z.number()]).optional().describe(\"微信和百家号需要\"),\n    pageNum: z.number().optional().describe(\"当前页，默认1\"),\n    pageSize: z.number().optional().describe(\"每页大小，默认10\"),\n    size: z.number().optional().describe(\"获取前多少篇文章（不含草稿），默认获取全部\"),\n    onlySuccess: z.boolean().optional().describe(\"是否仅获取发布成功的文章，默认false\"),\n    showOriginalData: z.boolean().optional().describe(\"是否展示原始数据，默认false\"),\n    cursor: z.number().optional().describe(\"仅用于微信分页游标，默认为空\"),\n    lastPage: z.number().optional(),\n    containsArticle: z.boolean().optional().describe(\"是否包含文章内容，默认false\"),\n    // 抖音特定参数\n    status: z.number().optional().describe(\"抖音作品状态：0=全部\"),\n    includeAccount: z.boolean().optional().describe(\"是否包含账号数据，默认true\"),\n    // 视频号特定参数\n    postType: z\n        .enum([\"video\", \"article\", \"all\"])\n        .optional()\n        .describe(\"视频号作品类型：video=视频, article=图文, all=全部\"),\n});\n\nexport type FetchArticlesParams = z.infer<typeof FetchArticlesParamsSchema>;\n\nexport const FetchArticles: CommonAction<FetchArticlesParams, FetchArticlesData | Record<string, never>> = async (\n    _task,\n    params,\n) => {\n    const { platform } = params;\n    switch (platform) {\n        case \"toutiao\":\n            return handleToutiaoData(_task, params);\n        case \"weixin\":\n            return handleWeixinData(_task, params);\n        case \"baijiahao\":\n            return handleBaijiahaoData(_task, params);\n        case \"xiaohongshu\":\n            return handleXiaohongshuData(_task, params);\n        case \"douyin\":\n            return handleDouyinData(_task, params);\n        case \"shipinhao\":\n            return handleShipinhaoData(_task, params);\n        default:\n            return success({}, \"暂不支持该平台\");\n    }\n};\n","import { type CommonAction, response, success } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams, Toutiao } from \"../../types\";\nimport { Http } from \"../../utils/http\";\n\nexport interface SearchToutiaoLocationParams extends ActiomCommonParams {\n    placeName: string;\n}\n\nexport type PublishAction = CommonAction<SearchToutiaoLocationParams, Toutiao.CityPoi[]>;\n\nexport const searchToutiaoLocation: PublishAction = async (_task, params) => {\n    const http = new Http({\n        headers: {\n            cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            referer: \"https://mp.toutiao.com/profile_v4/graphic/publish\",\n            biz: 1231,\n        },\n    });\n\n    const res = await http.api<{\n        code: number;\n        message: string;\n        data: {\n            poi: Array<{\n                name: string;\n                city: string;\n                longitude: number;\n                latitude: number;\n                type_code: string;\n                id: string;\n            }>;\n        };\n    }>({\n        method: \"post\",\n        url: \"https://mp.toutiao.com/poi/api/searchplace\",\n        data: {\n            appid: 1231,\n            device: 2,\n            keywords: params.placeName,\n            language: \"zh-CN\",\n            location: \"-1,-1\",\n            offset: 20,\n            page: 1,\n            region: \"CN\",\n            scenario: \"TIPS\",\n            timestamp: Math.floor(Date.now() / 1000),\n        },\n    });\n\n    if (res.code === 414) {\n        return success(\n            res.data.poi.map((item) => ({\n                position: item.name,\n                city: item.city,\n                longitude: item.longitude,\n                latitude: item.latitude,\n                type_code: item.type_code,\n                poi_id: item.id,\n            })),\n        );\n    }\n\n    const isSuccess = res.code === 0;\n    const message = `搜索头条用户ID成功${isSuccess ? \"成功\" : `失败，原因：${res.message}`}`;\n    const data = isSuccess\n        ? res.data.poi.map((item) => ({\n              position: item.name,\n              city: item.city,\n              longitude: item.longitude,\n              latitude: item.latitude,\n              type_code: item.type_code,\n              poi_id: item.id,\n          }))\n        : [];\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams, Toutiao } from \"../../types\";\nimport { Http } from \"../../utils/http\";\n\nexport interface SearchToutiaoTopicListParams extends ActiomCommonParams {\n    searchValue: string;\n}\n\nexport type PublishAction = CommonAction<SearchToutiaoTopicListParams, Toutiao.Topic[]>;\n\nexport const searchToutiaoTopicList: PublishAction = async (_task, params) => {\n    const http = new Http({\n        headers: {\n            cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            referer: \"https://mp.toutiao.com/profile_v4/graphic/publish\",\n        },\n    });\n\n    const res = await http.api<{ code: number; message: string; recents: Toutiao.Topic[]; hots: Toutiao.Topic[] }>({\n        method: \"get\",\n        url: \"https://mp.toutiao.com/mp/agw/creator_helper/suggest_words\",\n        params: { type: 2, words: params.searchValue },\n    });\n\n    const isSuccess = res.code === 0;\n    const message = `获取话题${isSuccess ? \"成功\" : `失败，原因：${res.message}`}`;\n    const data = isSuccess ? (params.searchValue ? res.recents : res.hots) : [];\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { type CommonAction, response, success } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams, Toutiao } from \"../../types\";\nimport { Http } from \"../../utils/http\";\n\nexport interface SearchToutiaoUserIDParams extends ActiomCommonParams {\n    UserName: string;\n}\n\nexport type PublishAction = CommonAction<SearchToutiaoUserIDParams, Toutiao.SuggestWords[]>;\n\nexport const searchToutiaoUserInfo: PublishAction = async (_task, params) => {\n    const http = new Http({\n        headers: {\n            cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            referer: \"https://mp.toutiao.com/profile_v4/graphic/publish\",\n        },\n    });\n\n    const res = await http.api<{\n        err_no: number;\n        error_msg: string;\n        data: {\n            suggest: {\n                user: {\n                    info: { user_id: number; name: string; avatar_url: string };\n                    relation_count: { followers_count: number };\n                };\n            }[];\n        };\n    }>({\n        method: \"get\",\n        url: \"https://mp.toutiao.com/ugc/publish/post/v1/suggest/\",\n        params: {\n            words: params.UserName,\n            language: \"zh\",\n            app_name: \"toutiao_mp\",\n        },\n    });\n\n    if (res.err_no === 0) {\n        return success(\n            res.data.suggest.map((item) => ({\n                user_id: item.user.info.user_id,\n                name: item.user.info.name,\n                avatar_url: item.user.info.avatar_url,\n                followers_count: item.user.relation_count.followers_count,\n            })),\n            \"搜索成功\",\n        );\n    }\n\n    const isSuccess = res.err_no === 0;\n    const message = `搜索头条用户ID成功${isSuccess ? \"成功\" : `失败，原因：${res.error_msg}`}`;\n    const data = isSuccess\n        ? res.data.suggest.map((item) => ({\n              user_id: item.user.info.user_id,\n              name: item.user.info.name,\n              avatar_url: item.user.info.avatar_url,\n              followers_count: item.user.relation_count.followers_count,\n          }))\n        : [];\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { type CommonAction, success } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\n\nexport interface searchWeixinAccountCardParams extends ActiomCommonParams {\n    token: string | number;\n    searchValue: string;\n    pageNum: number;\n}\n\nexport interface WxAccountCardInfo {\n    fakeid: string;\n    nickname: string;\n    alias: string;\n    round_head_img: string;\n    service_type: number;\n    signature: string;\n    verify_status: number;\n}\n\nexport type PublishAction = CommonAction<searchWeixinAccountCardParams, WxAccountCardInfo[]>;\n\nexport const searchWeixinAccountCard: PublishAction = async (_task, params) => {\n    const { token } = params;\n    if (!token) return { code: 414, message: \"缺少token\", data: [] };\n    const fingerprint = \"4695500bc93ab4ce8fb2692da6564e04\";\n\n    try {\n        const http = new Http({\n            headers: {\n                cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            },\n        });\n\n        const accountCardList = await http.api<{\n            base_resp: { err_msg: string; ret: number };\n            list: WxAccountCardInfo[];\n        }>({\n            method: \"get\",\n            url: \"https://mp.weixin.qq.com/cgi-bin/searchbiz\",\n            params: {\n                token,\n                lang: \"zh_CN\",\n                action: \"search_biz\",\n                scene: params.pageNum - 1 || 0,\n                begin: \"0\",\n                count: \"10\",\n                query: params.searchValue,\n                fingerprint,\n                f: \"json\",\n                ajax: 1,\n            },\n        });\n\n        return success(accountCardList.list, \"微信搜索账户数据成功！\");\n    } catch (_error) {\n        return success([], \"微信搜索账户数据失败！\");\n    }\n};\n","import { type CommonAction, success } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\n\nexport interface searchWeixinUserArticleParams extends ActiomCommonParams {\n    fakeId: string;\n    token: string | number;\n}\n\nexport type PublishAction = CommonAction<searchWeixinUserArticleParams, Record<string, unknown>[]>;\n\nexport const searchWeixinUserArticle: PublishAction = async (_task, params) => {\n    const { token } = params;\n    if (!token) return { code: 414, message: \"缺少token\", data: [] };\n    const fingerprint = \"4695500bc93ab4ce8fb2692da6564e04\";\n\n    const http = new Http({\n        headers: {\n            cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        },\n    });\n\n    const publishInfo = await http.api<{ base_resp: { err_msg: string; ret: number }; publish_page: string }>(\n        {\n            method: \"get\",\n            url: \"https://mp.weixin.qq.com/cgi-bin/appmsgpublish\",\n            params: {\n                token,\n                lang: \"zh_CN\",\n                fingerprint,\n                f: \"json\",\n                ajax: 1,\n                sub: \"list\",\n                search_field: null,\n                begin: \"0\",\n                count: \"10\",\n                query: \"\",\n                fakeid: params.fakeId,\n                type: \"101_1\",\n                free_publish_type: \"1\",\n                sub_action: \"list_ex\",\n            },\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n\n    const publishPage: { publish_list: Record<string, unknown>[] } = publishInfo.publish_page\n        ? JSON.parse(publishInfo.publish_page)\n        : { publish_list: [] };\n\n    return success(publishPage.publish_list, \"微信搜索账户数据成功！\");\n};\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams, AxiosProxyParams } from \"../../types\";\nimport { DisabledReq } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { Xhshow } from \"../../utils/xhsXsEncrypt\";\n\n// 小红书参数加密器\nconst xsEncrypt = new Xhshow();\n\nexport interface searchXhsConnectionsParams extends ActiomCommonParams {\n    num: number;\n    cursor: string | null;\n}\n\nexport interface ConnectionsResponse {\n    code: number;\n    success: boolean;\n    msg: string;\n    data: ConnectionsDetail;\n}\n\nexport interface ConnectionsDetail {\n    message_list: {\n        title: string;\n        tag: string;\n        tag_type: string;\n        id: string;\n        type: string;\n        user: {\n            xsec_token: string;\n            userid: string;\n            nickname: string;\n            images: string;\n            fstatus: string;\n            red_official_verify_type: number;\n        };\n        time: number;\n        score: number;\n        track_type: string;\n    }[];\n    has_more: boolean;\n    strCursor: string;\n}\n\nexport type PublishAction = CommonAction<searchXhsConnectionsParams, ConnectionsDetail | Record<string, unknown>>;\n\nexport const searchXhsWebConnections: PublishAction = async (_task, params) => {\n    if (DisabledReq) return response(0, \"获取新增关注成功\", { message_list: [], has_more: false, strCursor: \"\" });\n\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://www.xiaohongshu.com/\",\n        origin: \"https://www.xiaohongshu.com/\",\n    };\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    const a1Cookie = params.cookies.find((it) => it.name === \"a1\")?.value;\n    if (!a1Cookie) return { code: 414, message: \"账号数据异常，请重新绑定账号后重试。\", data: {} };\n\n    const connectionsParams = {\n        num: params.num ?? 20,\n        cursor: params.cursor ?? \"\",\n    };\n    const fatchConnections = \"/api/sns/web/v1/you/connections\";\n    const recordCookie = params.cookies.reduce<Record<string, string>>((acc, cookie) => {\n        if (cookie.name && cookie.value) {\n            acc[cookie.name] = cookie.value;\n        }\n        return acc;\n    }, {});\n    const fatchConnectionsXsHeader = xsEncrypt.signHeadersGet(\n        fatchConnections,\n        recordCookie,\n        \"xhs-pc-web\",\n        connectionsParams,\n    );\n\n    const res = await http.api<ConnectionsResponse>(\n        {\n            method: \"get\",\n            url: \"https://edith.xiaohongshu.com/api/sns/web/v1/you/connections\",\n            params: connectionsParams,\n            headers: fatchConnectionsXsHeader,\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n\n    const isSuccess = res.code === 0;\n    const message = `获取新增关注${isSuccess ? \"成功\" : `失败，原因：${res.msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n    const data = isSuccess ? res.data : {};\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams, AxiosProxyParams } from \"../../types\";\nimport { DisabledReq } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { Xhshow } from \"../../utils/xhsXsEncrypt\";\n\n// 小红书参数加密器\nconst xsEncrypt = new Xhshow();\n\nexport interface searchXhsLikesParams extends ActiomCommonParams {\n    num: number;\n    cursor: string | null;\n}\n\nexport interface LikesResponse {\n    code: number;\n    success: boolean;\n    msg: string;\n    data: LikesDetail;\n}\n\nexport interface LikesDetail {\n    message_list: {\n        time: number;\n        user_info: {\n            fstatus: string;\n            red_official_verify_type: number;\n            xsec_token: string;\n            userid: string;\n            nickname: string;\n            image: string;\n        };\n        item_info: {\n            image: string;\n            status: number;\n            id: string;\n            content: string;\n            image_info: {\n                url: string;\n                width: number;\n                height: number;\n            };\n            illegal_info: {\n                illegal_status: string;\n                status: number;\n                desc: string;\n            };\n            link: string;\n            user_info: {\n                userid: string;\n                nickname: string;\n                image: string;\n                red_official_verify_type: number;\n            };\n            xsec_token: string;\n            type: string;\n        };\n        comment_info: {\n            illegal_info: {\n                status: number;\n                desc: string;\n                illegal_status: string;\n            };\n            status: number;\n            liked: boolean;\n            like_count: number;\n            id: string;\n            content: string;\n        };\n        liked: boolean;\n        time_flag: number;\n        type: string;\n        title: string;\n        score: number;\n        track_type: string;\n        id: string;\n    }[];\n    has_more: boolean;\n    strCursor: string;\n}\n\nexport type PublishAction = CommonAction<searchXhsLikesParams, LikesDetail | Record<string, unknown>>;\n\nexport const searchXhsWebLikes: PublishAction = async (_task, params) => {\n    if (DisabledReq) return response(0, \"获取点赞收藏成功\", { message_list: [], has_more: false, strCursor: \"\" });\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://www.xiaohongshu.com/\",\n        origin: \"https://www.xiaohongshu.com/\",\n    };\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    const a1Cookie = params.cookies.find((it) => it.name === \"a1\")?.value;\n    if (!a1Cookie) return { code: 414, message: \"账号数据异常，请重新绑定账号后重试。\", data: {} };\n\n    const likesParams = {\n        num: params.num ?? 20,\n        cursor: params.cursor ?? \"\",\n    };\n    const fatchLikes = \"/api/sns/web/v1/you/likes\";\n    const recordCookie = params.cookies.reduce<Record<string, string>>((acc, cookie) => {\n        if (cookie.name && cookie.value) {\n            acc[cookie.name] = cookie.value;\n        }\n        return acc;\n    }, {});\n    const fatchLikesXsHeader = xsEncrypt.signHeadersGet(fatchLikes, recordCookie, \"xhs-pc-web\", likesParams);\n\n    const res = await http.api<LikesResponse>(\n        {\n            method: \"get\",\n            url: \"https://edith.xiaohongshu.com/api/sns/web/v1/you/likes\",\n            params: likesParams,\n            headers: fatchLikesXsHeader,\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n\n    const isSuccess = res.code === 0;\n    const message = `获取点赞收藏${isSuccess ? \"成功\" : `失败，原因：${res.msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n    const data = isSuccess ? res.data : {};\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams, AxiosProxyParams } from \"../../types\";\nimport { DisabledReq } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { Xhshow } from \"../../utils/xhsXsEncrypt\";\n\n// const GenXSCommon = require(\"../../utils/XhsXsCommonEnc.js\") as (a1cookie: string, x_t: string|number, x_s:string) => string;\n\n// 小红书参数加密器\nconst xsEncrypt = new Xhshow();\n\nexport interface searchXhsMentionsParams extends ActiomCommonParams {\n    num: number;\n    cursor: string | null;\n}\n\nexport interface MentionsResponse {\n    code: number;\n    success: boolean;\n    msg: string;\n    data: MentionsDetail;\n}\n\nexport interface MentionsDetail {\n    message_list: {\n        title: string;\n        time: number;\n        comment_info: {\n            illegal_info: {\n                status: number;\n                desc: string;\n                illegal_status: string;\n            };\n            status: number;\n            liked: boolean;\n            like_count: number;\n            id: string;\n            content: string;\n        };\n        type: string;\n        score: number;\n        user_info: {\n            userid: string;\n            nickname: string;\n            image: string;\n            red_official_verify_type: number;\n            xsec_token: string;\n        };\n        item_info: {\n            type: string;\n            content: string;\n            image_info: {\n                width: number;\n                height: number;\n                url: string;\n            };\n            status: number;\n            id: string;\n            image: string;\n            illegal_info: {\n                status: number;\n                desc: string;\n                illegal_status: string;\n            };\n            link: string;\n            user_info: {\n                userid: string;\n                nickname: string;\n                image: string;\n                red_official_verify_type: number;\n            };\n            xsec_token: string;\n        };\n        track_type: string;\n        liked: boolean;\n        time_flag: number;\n        id: string;\n    }[];\n    has_more: boolean;\n    strCursor: string;\n}\n\nexport type PublishAction = CommonAction<searchXhsMentionsParams, MentionsDetail | Record<string, unknown>>;\n\nexport const searchXhsWebMentions: PublishAction = async (_task, params) => {\n    if (DisabledReq) return response(0, \"获取评论成功\", { message_list: [], has_more: false, strCursor: \"\" });\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://www.xiaohongshu.com/\",\n        origin: \"https://www.xiaohongshu.com/\",\n    };\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    const a1Cookie = params.cookies.find((it) => it.name === \"a1\")?.value;\n    if (!a1Cookie) return { code: 414, message: \"账号数据异常，请重新绑定账号后重试。\", data: {} };\n\n    const mentionsParams = {\n        num: params.num ?? 20,\n        cursor: params.cursor ?? \"\",\n    };\n    const fatchMentions = \"/api/sns/web/v1/you/mentions\";\n    const recordCookie = params.cookies.reduce<Record<string, string>>((acc, cookie) => {\n        if (cookie.name && cookie.value) {\n            acc[cookie.name] = cookie.value;\n        }\n        return acc;\n    }, {});\n    const fatchMentionsXsHeader = xsEncrypt.signHeadersGet(fatchMentions, recordCookie, \"xhs-pc-web\", mentionsParams);\n\n    // const xscommon = GenXSCommon(a1Cookie, xt, xs)\n    const res = await http.api<MentionsResponse>(\n        {\n            method: \"get\",\n            url: \"https://edith.xiaohongshu.com/api/sns/web/v1/you/mentions\",\n            params: mentionsParams,\n            headers: fatchMentionsXsHeader,\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n    const isSuccess = res.code === 0;\n    const message = `获取评论${isSuccess ? \"成功\" : `失败，原因：${res.msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n    const data = isSuccess ? res.data : {};\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams, AxiosProxyParams, Xiaohongshu } from \"../../types\";\nimport { Http } from \"../../utils/http\";\n\nexport interface searchXiaohongshuLocationParams extends ActiomCommonParams {\n    searchValue: string;\n    latitude?: number;\n    longitude?: number;\n    size?: number;\n    page?: number;\n}\n\nexport type PublishAction = CommonAction<searchXiaohongshuLocationParams, Xiaohongshu.Location[]>;\n\nexport const searchXiaohongshuLocation: PublishAction = async (_task, params) => {\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://creator.xiaohongshu.com\",\n        origin: \"https://creator.xiaohongshu.com\",\n    };\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    const result = await http.api<{ code: number; msg: string; data: { poi_list: Xiaohongshu.Location[] } }>(\n        {\n            method: \"post\",\n            url: \"https://edith.xiaohongshu.com/web_api/sns/v1/local/poi/creator/search\",\n            data: {\n                keyword: params.searchValue,\n                latitude: params.latitude ?? 0,\n                longitude: params.longitude ?? 0,\n                page: params.page ?? 1,\n                size: params.size ?? 10,\n                source: \"WEB\",\n                type: 3,\n            },\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n\n    const isSuccess = result.code === 0;\n    const message = `获取地点信息${isSuccess ? \"成功\" : `失败，原因：${result.msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n    const data = isSuccess ? result.data.poi_list : [];\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams, AxiosProxyParams, Xiaohongshu } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { Xhshow } from \"../../utils/xhsXsEncrypt\";\n\n// 小红书参数加密器\nconst xsEncrypt = new Xhshow();\n\nexport interface SearchXiaohongshuTopicListParams extends ActiomCommonParams {\n    searchValue: string;\n}\n\nexport type PublishAction = CommonAction<SearchXiaohongshuTopicListParams, Xiaohongshu.Topic[]>;\n\nexport const searchXiaohongshuTopicList: PublishAction = async (_task, params) => {\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://creator.xiaohongshu.com\",\n        origin: \"https://creator.xiaohongshu.com\",\n    };\n\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n    const a1Cookie = params.cookies.find((it) => it.name === \"a1\")?.value;\n    if (!a1Cookie) return { code: 414, message: \"账号数据异常，请重新绑定账号后重试。\", data: [] };\n\n    const topicData = {\n        keyword: params.searchValue,\n        suggest_topic_request: {\n            title: \"\",\n            desc: `#${params.searchValue}`,\n        },\n        page: {\n            page_size: 20,\n            page: 1,\n        },\n    };\n\n    const fatchTopic = \"/web_api/sns/v1/search/topic\";\n    const recordCookie = params.cookies.reduce<Record<string, string>>((acc, cookie) => {\n        if (cookie.name && cookie.value) {\n            acc[cookie.name] = cookie.value;\n        }\n        return acc;\n    }, {});\n\n    const fatchTopicXsHeader = xsEncrypt.signHeadersPost(fatchTopic, recordCookie, \"xhs-pc-web\", topicData);\n\n    const result = await http.api<{ code: number; msg: string; data: { topic_info_dtos: Xiaohongshu.Topic[] } }>(\n        {\n            method: \"post\",\n            url: \"https://edith.xiaohongshu.com/web_api/sns/v1/search/topic\",\n            data: topicData,\n            headers: fatchTopicXsHeader,\n            defaultErrorMsg: \"话题搜索异常，请稍后重试。\",\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n\n    const isSuccess = result.code === 0;\n    const message = `获取话题${isSuccess ? \"成功\" : `失败，原因：${result.msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n    const data = isSuccess ? result.data.topic_info_dtos : [];\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams, AxiosProxyParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\n\nexport interface searchXiaohongshuUserArticleParams extends ActiomCommonParams {\n    searchValue: string;\n}\n\nconst parseXhsDom = (\n    domString: string,\n): { user: { userPageData: Record<string, unknown>; notes: Record<string, unknown> } } => {\n    const match = domString.match(/window\\.__INITIAL_STATE__\\s*=\\s*(\\{[\\s\\S]*\\})/);\n    if (!match) {\n        if (domString.indexOf(\"website-login/captcha\") !== -1) {\n            throw new Error(\"当前信息需要登录后方可查看！\");\n        }\n        throw new Error(\"小红书页面数据检索失败！\");\n    }\n    const jsObjectStr = match[1];\n    return new Function(`return ${jsObjectStr}`)();\n};\n\nexport type PublishAction = CommonAction<searchXiaohongshuUserArticleParams, Record<string, unknown>>;\n\nexport const searchXiaohongshuUserArticle: PublishAction = async (_task, params) => {\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n    };\n\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    // const a1Cookie = params.cookies.find((it) => it.name === \"a1\")?.value;\n    // if (!a1Cookie) return {code: 414, message: \"账号数据异常，请重新绑定账号后重试。\", data: []};\n    if (params.searchValue.indexOf(\"user/profile\") === -1)\n        return { code: 414, message: \"请输入正确的小红书用户主页链接地址！\", data: {} };\n\n    const result = await http.api<string>(\n        {\n            method: \"get\",\n            url: params.searchValue,\n            defaultErrorMsg: \"用户搜索异常，请稍后重试。\",\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n\n    let INITIAL_STATE = {\n        user: { userPageData: {}, notes: {} },\n    };\n    try {\n        INITIAL_STATE = parseXhsDom(result);\n    } catch (error) {\n        return response(414, (error as Error).message, {});\n    }\n\n    const isSuccess = INITIAL_STATE !== null;\n    const message = `用户文章信息获取${isSuccess ? \"成功！\" : \"失败，请检查！\"}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n\n    return response(isSuccess ? 0 : 414, message, INITIAL_STATE);\n};\n","import { z } from \"zod\";\nimport { ActionCommonParamsSchema } from \"../../types\";\n\nexport const ShipinhaoCheckLinkValidateParamsSchema = ActionCommonParamsSchema.extend({\n    link: z.string(), // 需要验证的链接\n});\n\nexport type ShipinhaoCheckLinkValidateParams = z.infer<typeof ShipinhaoCheckLinkValidateParamsSchema>;\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport { AxiosProxyParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { rid } from \"../../utils/shipinhao/utils\";\nimport { ShipinhaoCheckLinkValidateParamsSchema } from \"./schema\";\n\nexport type ShipinhaoCheckLinkValidateParams = z.infer<typeof ShipinhaoCheckLinkValidateParamsSchema>;\nexport { ShipinhaoCheckLinkValidateParamsSchema } from \"./schema\";\n\nexport interface ShipinhaoCheckLinkValidateResponse {\n    errCode: number;\n    errMsg: string;\n    data?: {\n        baseResp: {\n            errcode: number;\n            errmsg: string;\n        };\n        title?: string;\n    };\n}\n\nexport type ShipinhaoCheckLinkValidateAction = CommonAction<\n    ShipinhaoCheckLinkValidateParams,\n    {\n        title?: string;\n        errMsg?: string;\n        errCode?: number;\n    }\n>;\n\nexport const shipinhaoCheckLinkValidate: ShipinhaoCheckLinkValidateAction = async (_task, params) => {\n    console.log(\"视频号验证链接参数\", JSON.stringify(params));\n\n    // 验证 cookies\n    if (!params.cookies || params.cookies.length === 0) {\n        return response(414, \"视频号验证链接失败：缺少必需的 cookies 参数\", {});\n    }\n\n    // 验证 extraParam 是否存在\n    if (!params.extraParam) {\n        return response(400, \"缺少 extraParam 参数\", {});\n    }\n\n    if (!params.extraParam.fingerPrintDeviceId || !params.extraParam.aId || !params.extraParam.uin) {\n        return response(400, \"fingerPrintDeviceId、aId和uin不能为空\", {});\n    }\n\n    // 验证链接参数\n    if (!params.link) {\n        return response(400, \"link 参数不能为空\", {});\n    }\n\n    const headers = {\n        cookie: params.cookies.map((it: { name: string; value: string }) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://channels.weixin.qq.com/\",\n        origin: \"https://channels.weixin.qq.com/\",\n        \"user-agent\":\n            \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36\",\n        \"finger-print-device-id\": params.extraParam.fingerPrintDeviceId,\n        \"x-wechat-uin\": params.extraParam.uin,\n    };\n\n    console.log(\"视频号验证链接 headers\", JSON.stringify(headers));\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    const GetTimeStamp = ($: number) => ($ ? Date.now().toString().substring(0, $) : Date.now().toString());\n\n    // 视频号助手验证链接参数\n    const linkParams: Record<string, string | number | null> = {\n        timestamp: GetTimeStamp(13),\n        pluginSessionId: null,\n        rawKeyBuff: null,\n        reqScene: 7,\n        scene: 7,\n        url: params.link,\n        _log_finder_id: params.extraParam.finderUserName || \"\",\n        _log_finder_uin: \"\",\n    };\n\n    _task.logger.info(`视频号验证链接参数: ${params.link}`);\n\n    const queryData = {\n        _aid: params.extraParam?.aId || \"\",\n        _rid: rid(),\n        _pageUrl: \"https://channels.weixin.qq.com/micro/content/post/finderNewLifeCreate\",\n    };\n    const queryString = new URLSearchParams(queryData).toString();\n\n    console.log(\n        \"视频号验证链接请求\",\n        `https://channels.weixin.qq.com/micro/content/cgi-bin/mmfinderassistant-bin/helper/helper_parse_mp_link?${queryString}`,\n    );\n\n    // 调用视频号助手验证链接API\n    const res = await http.api<ShipinhaoCheckLinkValidateResponse>(\n        {\n            method: \"post\",\n            url: `https://channels.weixin.qq.com/micro/content/cgi-bin/mmfinderassistant-bin/helper/helper_parse_mp_link?${queryString}`,\n            data: linkParams,\n            headers: {\n                ...headers,\n                \"Content-Type\": \"application/json\",\n            },\n        },\n        { retries: 3, retryDelay: 20, timeout: 5000 },\n    );\n\n    console.log(\"视频号验证链接响应\", JSON.stringify(res));\n    _task.logger.info(\"视频号验证链接响应:\", { ...res });\n\n    const isSuccess = res.errCode === 0;\n    const baseResp = res.data?.baseResp;\n    const message = `视频号验证链接${res.data?.title ? \"成功\" : `失败，原因：${baseResp?.errmsg || \"无法添加此链接\"}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n\n    const data: {\n        title?: string;\n        errMsg?: string;\n        errCode?: number;\n    } = {\n        title: res?.data?.title || \"\", // 校验成功会返回title\n        errMsg: baseResp?.errmsg || \"\",\n        errCode: baseResp?.errcode,\n    };\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { z } from \"zod\";\nimport { ActionCommonParamsSchema } from \"../../types\";\n\nexport const ShipinhaoGetLocationParamsSchema = ActionCommonParamsSchema.extend({\n    keyword: z.string().optional(),\n    latitude: z.number().optional(),\n    longitude: z.number().optional(),\n    city: z.string().optional(),\n    count: z.number().optional(),\n});\n\nexport type ShipinhaoGetLocationParams = z.infer<typeof ShipinhaoGetLocationParamsSchema>;\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport { AxiosProxyParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { rid } from \"../../utils/shipinhao/utils\";\nimport { ShipinhaoGetLocationParamsSchema } from \"./schema\";\n\nexport type ShipinhaoGetLocationParams = z.infer<typeof ShipinhaoGetLocationParamsSchema>;\nexport { ShipinhaoGetLocationParamsSchema } from \"./schema\";\n\nexport interface Location {\n    uid: string;\n    name: string;\n    longitude: number;\n    latitude: number;\n    address: string;\n    province: string;\n    city: string;\n    region: string;\n    fullAddress: string;\n    source: number;\n    poiCheckSum: string;\n}\nexport interface Address {\n    city: string;\n    country: string;\n    countryCode: string;\n    latitude: number;\n    longitude: number;\n    poiCheckSum: string;\n    province: string;\n    region: string;\n}\n\nexport interface ShipinhaoLocationResponse {\n    errCode: number;\n    errMsg: string;\n    data?: {\n        list?: Location[];\n        address?: Address;\n        total?: number;\n    };\n}\n\nexport type ShipinhaoGetLocationAction = CommonAction<\n    ShipinhaoGetLocationParams,\n    {\n        locations: Location[];\n        total: number;\n        address?: Address | undefined;\n    }\n>;\n\nexport const shipinhaoGetLocation: ShipinhaoGetLocationAction = async (_task, params) => {\n    console.log(\"视频号获取位置参数\", JSON.stringify(params));\n    // 验证 cookies\n    if (!params.cookies || params.cookies.length === 0) {\n        return response(414, \"视频号获取位置失败：缺少必需的 cookies 参数\", { locations: [], total: 0 });\n    }\n\n    // 验证 extraParam 是否存在\n    if (!params.extraParam) {\n        return response(400, \"缺少 extraParam 参数\", { locations: [], total: 0 });\n    }\n\n    if (!params.extraParam.fingerPrintDeviceId || !params.extraParam.aId || !params.extraParam.uin) {\n        return response(400, \"fingerPrintDeviceId、aId和uin不能为空\", { locations: [], total: 0 });\n    }\n\n    const headers = {\n        cookie: params.cookies.map((it: { name: string; value: string }) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://channels.weixin.qq.com/\",\n        origin: \"https://channels.weixin.qq.com/\",\n        \"user-agent\":\n            \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36\",\n        \"finger-print-device-id\": params.extraParam.fingerPrintDeviceId,\n        \"x-wechat-uin\": params.extraParam.uin,\n    };\n\n    console.log(\"视频号获取位置 headers\", JSON.stringify(headers));\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    const keyword = params.keyword || \"\";\n    const GetTimeStamp = ($: number) => ($ ? Date.now().toString().substring(0, $) : Date.now().toString());\n    // 视频号助手位置搜索参数\n    const locationParams: Record<string, string | number> = {\n        query: keyword,\n        cookies: \"\",\n        longitude: 0,\n        latitude: 0,\n        timestamp: GetTimeStamp(13),\n        scene: 7,\n        reqScene: 7,\n        _log_finder_id: \"\",\n    };\n\n    // 如果有经纬度，添加到参数中\n    if (params.latitude && params.longitude) {\n        locationParams.latitude = params.latitude;\n        locationParams.longitude = params.longitude;\n    }\n\n    // 如果有城市，添加到参数中\n    if (params.city) {\n        locationParams.city = params.city;\n    }\n\n    _task.logger.info(\n        `视频号获取位置参数: ${locationParams.query}, ${locationParams.latitude}, ${locationParams.longitude}, ${locationParams.city}`,\n    );\n\n    const queryData = {\n        _aid: params.extraParam?.aId || \"\",\n        _rid: rid(),\n        _pageUrl: \"https://channels.weixin.qq.com/micro/content/post/finderNewLifeCreate\",\n    };\n    const queryString = new URLSearchParams(queryData).toString();\n    console.log(\n        \"视频号获取位置请求\",\n        `https://channels.weixin.qq.com/cgi-bin/mmfinderassistant-bin/helper/helper_search_location?${queryString}`,\n    );\n    // 调用视频号助手位置搜索API\n    const res = await http.api<ShipinhaoLocationResponse>(\n        {\n            method: \"post\",\n            url: `https://channels.weixin.qq.com/micro/content/cgi-bin/mmfinderassistant-bin/helper/helper_search_location?${queryString}`,\n            data: locationParams,\n            headers: {\n                ...headers,\n                \"Content-Type\": \"application/json\",\n            },\n        },\n        { retries: 3, retryDelay: 20, timeout: 5000 },\n    );\n    console.log(\"视频号获取位置响应\", JSON.stringify(res));\n    _task.logger.info(\"视频号获取位置响应:\", { ...res });\n\n    const isSuccess = res.errCode === 0;\n    const message = `视频号获取位置${isSuccess ? \"成功\" : `失败，原因：${res.errMsg || res.errCode || \"未知错误\"}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n\n    let locations: Location[] = [];\n    let address: Address | undefined;\n    if (isSuccess && res?.data?.list) {\n        locations = res.data.list;\n        address = res.data?.address;\n    }\n\n    const data: { locations: Location[]; total: number; address: Address | undefined } = {\n        locations,\n        total: res?.data?.total || locations.length,\n        address,\n    };\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { ActionCommonParamsSchema } from \"../../types\";\n\nexport const ShipinhaoGetMsgParamsSchema = ActionCommonParamsSchema.extend({});\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport { AxiosProxyParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { rid } from \"../../utils/shipinhao/utils\";\nimport { ShipinhaoGetMsgParamsSchema } from \"./schema\";\n\nexport type ShipinhaoGetMsgParams = z.infer<typeof ShipinhaoGetMsgParamsSchema>;\nexport { ShipinhaoGetMsgParamsSchema } from \"./schema\";\n\n// 原始消息数据结构\nexport interface RawMessage {\n    svrMsgId: string;\n    fromUsername: string;\n    toUsername: string;\n    sessionId: string;\n    ts: number;\n    textMsg?: {\n        content: string;\n    };\n    imgMsg?: any;\n}\n\n// 会话信息数据结构\nexport interface SessionInfo {\n    username: string; // 用户名\n    nickname: string; // 昵称\n    headImgUrl: string; // 头像URL\n    sessionId: string; // 会话ID\n    sessionType?: number; // 会话类型 1-用户私信 2-系统消息\n    rejectMsg?: number;\n    extInfo?: any; // sex: 1-男 2-女\n    fromUserType?: number;\n    msgList?: RawMessage[]; // 添加消息列表字段\n}\n\n// 消息列表响应\nexport interface MessageListResponse {\n    errCode: number;\n    errMsg: string;\n    data?: {\n        msg?: RawMessage[];\n    };\n}\n\n// 会话详情响应\nexport interface SessionDetailResponse {\n    errCode: number;\n    errMsg: string;\n    data?: {\n        sessionInfo?: SessionInfo[];\n    };\n}\n\n// 处理后的消息数据\nexport interface ProcessedMessage {\n    platform: string;\n    accountId: string;\n    messageId: string;\n    content: string;\n    timestamp: number;\n    messageUserId: string;\n    messageOwnerUserId: string;\n    raw: RawMessage;\n}\n\n// 处理后的用户数据\nexport interface ProcessedMessageUser {\n    platform: string;\n    accountId: string;\n    messageUserId: string;\n    messageUserName: string;\n    messageUserAvatar: string;\n    messageOwnerId: string;\n    sessionId: string;\n    raw: SessionInfo;\n}\n\nexport type ShipinhaoGetMsgAction = CommonAction<\n    ShipinhaoGetMsgParams,\n    {\n        sessionInfo: SessionInfo[];\n    }\n>;\n\nexport const shipinhaoGetMsg: ShipinhaoGetMsgAction = async (_task, params) => {\n    console.log(\"视频号获取私信参数\", JSON.stringify(params));\n\n    try {\n        // 验证 cookies\n        if (!params.cookies?.length) {\n            return response(414, \"视频号获取私信失败：缺少必需的 cookies 参数\", {\n                sessionInfo: [],\n            });\n        }\n\n        const { extraParam } = params;\n        if (!extraParam?.fingerPrintDeviceId || !extraParam?.aId || !extraParam?.uin) {\n            return response(414, \"fingerPrintDeviceId、aId和uin不能为空\", {\n                sessionInfo: [],\n            });\n        }\n\n        // 获取用户名（finderUsername）\n        const finderUserName = extraParam.finderUserName;\n        if (!finderUserName) {\n            return response(414, \"缺少 finderUserName 参数\", {\n                sessionInfo: [],\n            });\n        }\n\n        const cookieStr = params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\");\n\n        const headers = {\n            referer: \"https://channels.weixin.qq.com/micro/interaction/private_msg\",\n            cookie: cookieStr,\n            Origin: \"https://channels.weixin.qq.com\",\n        };\n\n        const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n        const http = new Http(...args);\n\n        // 第一步：获取消息历史列表\n        const messageListParams = {\n            timestamp: Date.now().toString(),\n            _log_finder_uin: \"\",\n            _log_finder_id: finderUserName,\n            rawKeyBuff: null,\n            pluginSessionId: null,\n            scene: 7,\n            reqScene: 7,\n        };\n\n        const messageListUrl = `https://channels.weixin.qq.com/micro/interaction/cgi-bin/mmfinderassistant-bin/private-msg/get-history-msg?_rid=${rid()}`;\n\n        _task.logger.info(\"请求消息列表:\", { url: messageListUrl });\n\n        const messageListRes = await http.api<MessageListResponse>(\n            {\n                method: \"post\",\n                url: messageListUrl,\n                data: messageListParams,\n                headers,\n            },\n            { retries: 3, retryDelay: 20, timeout: 5000 },\n        );\n\n        // console.log(\"消息列表响应\", JSON.stringify(messageListRes));\n\n        if (!messageListRes?.data?.msg || messageListRes.data.msg.length === 0) {\n            console.log(\"没有消息数据\");\n            return response(0, \"视频号获取私信成功（无数据）\", {\n                sessionInfo: [],\n            });\n        }\n\n        // 收集 sessionId 和消息\n        const sessionIds = new Set<string>();\n        const allMessages = messageListRes.data.msg;\n\n        for (const msg of allMessages) {\n            sessionIds.add(msg.sessionId);\n        }\n\n        // 第二步：获取会话详细信息\n        const sessionDetailParams = {\n            sessionId: Array.from(sessionIds),\n            timestamp: Date.now().toString(),\n            _log_finder_uin: \"\",\n            _log_finder_id: finderUserName,\n            rawKeyBuff: null,\n            pluginSessionId: null,\n            scene: 7,\n            reqScene: 7,\n        };\n\n        const sessionDetailUrl = `https://channels.weixin.qq.com/micro/interaction/cgi-bin/mmfinderassistant-bin/private-msg/get-session-info?_rid=${rid()}`;\n\n        _task.logger.info(\"请求会话详情:\", { sessionDetailUrl });\n\n        const sessionDetailRes = await http.api<SessionDetailResponse>(\n            {\n                method: \"post\",\n                url: sessionDetailUrl,\n                data: sessionDetailParams,\n                headers,\n            },\n            { retries: 3, retryDelay: 20, timeout: 5000 },\n        );\n\n        // console.log(\"会话详情响应\", JSON.stringify(sessionDetailRes));\n\n        if (sessionDetailRes?.data?.sessionInfo && sessionDetailRes.data.sessionInfo.length > 0) {\n            // 遍历每个会话信息，将对应的消息按时间排序后添加到 msgList 字段\n            for (const session of sessionDetailRes.data.sessionInfo) {\n                // 筛选出该会话的所有消息\n                const sessionMessages = allMessages.filter((msg) => msg.sessionId === session.sessionId);\n\n                // 按时间戳降序排序（最新的消息在前）\n                sessionMessages.sort((a, b) => b.ts - a.ts);\n\n                // 将排序后的消息列表添加到会话信息中\n                session.msgList = sessionMessages;\n            }\n        }\n\n        const data = {\n            sessionInfo: sessionDetailRes.data?.sessionInfo || [],\n        };\n\n        console.log(\"消息列表响应111\", JSON.stringify(data));\n\n        return response(0, `视频号获取私信成功${_task.debug ? ` ${http.proxyInfo}` : \"\"}`, data);\n    } catch (error) {\n        console.error(\"获取私信数据异常\", error);\n        return response(414, `获取私信数据异常: ${error}`, {\n            sessionInfo: [],\n        });\n    }\n};\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport { ActiomCommonParams, AxiosProxyParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { rid } from \"../../utils/shipinhao/utils\";\n\nexport interface ShipinhaoGetMsgImageParams extends ActiomCommonParams {\n    imgMsg: {\n        aeskey: string;\n        url: string;\n    };\n    rawContent: string;\n}\n\n// 图片信息响应数据结构\nexport interface MediaInfoResponse {\n    errCode: number;\n    errMsg: string;\n    data?: {\n        baseResp?: {\n            errcode: number;\n        };\n        imgContent?: string; // base64 编码的图片内容（无头）\n        length?: string;\n        ext?: string; // 图片扩展名，如 png、jpeg 等\n    };\n}\n\nexport type ShipinhaoGetMediaInfoAction = CommonAction<\n    ShipinhaoGetMsgImageParams,\n    {\n        base64Img: string;\n    }\n>;\n\nexport const shipinhaoGetMsgImage: ShipinhaoGetMediaInfoAction = async (_task, params) => {\n    try {\n        // 验证 cookies\n        if (!params.cookies?.length) {\n            return response(414, \"视频号获取媒体信息失败：缺少必需的 cookies 参数\", {\n                base64Img: \"\",\n            });\n        }\n\n        const { extraParam, imgMsg, rawContent } = params;\n        if (!extraParam?.fingerPrintDeviceId || !extraParam?.aId || !extraParam?.uin) {\n            return response(414, \"fingerPrintDeviceId、aId和uin不能为空\", {\n                base64Img: \"\",\n            });\n        }\n\n        const finderUserName = extraParam.finderUserName;\n        if (!finderUserName) {\n            return response(414, \"缺少 finderUserName 参数\", {\n                base64Img: \"\",\n            });\n        }\n\n        const cookieStr = params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\");\n\n        const headers = {\n            referer: \"https://channels.weixin.qq.com/micro/interaction/private_msg\",\n            cookie: cookieStr,\n            Origin: \"https://channels.weixin.qq.com\",\n            Accept: \"*/*\",\n            \"Accept-Language\": \"zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7\",\n            \"Content-Type\": \"application/json\",\n            \"X-WECHAT-UIN\": extraParam.uin,\n            \"finger-print-device-id\": extraParam.fingerPrintDeviceId,\n            \"Sec-Fetch-Dest\": \"empty\",\n            \"Sec-Fetch-Mode\": \"cors\",\n            \"Sec-Fetch-Site\": \"same-origin\",\n        };\n\n        const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n        const http = new Http(...args);\n\n        const mediaInfoRes = await http.api<MediaInfoResponse>(\n            {\n                method: \"post\",\n                url: `https://channels.weixin.qq.com/micro/interaction/cgi-bin/mmfinderassistant-bin/private-msg/get-media-info?_aid=${extraParam.aId}&_rid=${rid()}&_pageUrl=https:%2F%2Fchannels.weixin.qq.com%2Fmicro%2Finteraction%2Fprivate_msg`,\n                data: {\n                    mediaType: 3, // 图片类型固定为3\n                    imgMsg: imgMsg,\n                    rawContent: rawContent,\n                    timestamp: Date.now().toString(),\n                    _log_finder_uin: null,\n                    _log_finder_id: finderUserName,\n                    rawKeyBuff: null,\n                    pluginSessionId: null,\n                    scene: 7,\n                    reqScene: 7,\n                },\n                headers,\n            },\n            { retries: 3, retryDelay: 20, timeout: 5000 },\n        );\n\n        console.log(\"媒体信息响应\", JSON.stringify(mediaInfoRes));\n\n        if (mediaInfoRes?.errCode !== 0 || !mediaInfoRes.data?.imgContent) {\n            return response(414, `视频号获取媒体信息失败: ${mediaInfoRes?.errMsg || \"未知错误\"}`, {\n                base64Img: \"\",\n            });\n        }\n\n        const extMap: Record<string, string> = {\n            png: \"image/png\",\n            jpg: \"image/jpeg\",\n            jpeg: \"image/jpeg\",\n            gif: \"image/gif\",\n            webp: \"image/webp\",\n            bmp: \"image/bmp\",\n            svg: \"image/svg+xml\",\n        };\n\n        const normalizedExt = mediaInfoRes.data?.ext?.toLowerCase().replace(/^\\./, \"\");\n        const mimeType = extMap[normalizedExt || \"\"] || \"image/png\"; // 默认使用 png\n        const base64Img = `data:${mimeType};base64,${mediaInfoRes.data?.imgContent}`;\n\n        const data = {\n            base64Img,\n        };\n\n        console.log(\"媒体信息处理结果\", JSON.stringify(data));\n\n        return response(0, `视频号获取媒体信息成功${_task.debug ? ` ${http.proxyInfo}` : \"\"}`, data);\n    } catch (error) {\n        console.error(\"获取媒体信息异常\", error);\n        return response(414, `获取媒体信息异常: ${error}`, {\n            base64Img: \"\",\n        });\n    }\n};\n","import { type Page, success, type UserInfo } from \"@iflyrpa/share\";\nimport type { Response } from \"playwright-core\";\nimport type { SteelAction } from \"./index\";\n\n/** 视频号助手 finder 账号信息 */\ninterface FinderInfo {\n    finderUsername: string;\n    nickname: string;\n    headImgUrl: string;\n    uniqId: string;\n    isMasterFinder: boolean;\n}\n\n/**\n * 视频号登录 RPA\n *\n * 流程：\n * 1. 打开视频号助手登录页，生成远程调试地址\n * 2. 拦截不必要资源（mp4/ttf），提升加载速度\n * 3. 监听 auth_login_status 接口判断扫码状态\n * 4. 扫码确认后切换监听 auth_data 获取用户信息和 finder 列表\n * 5. 提取 localStorage 中的 fingerPrintDeviceId 和 aId\n * 6. 收集 cookie 并返回结果\n */\nexport const rpaAction: SteelAction = async (task, _params) => {\n    const reporter = task.reportService?.reportLoginStatus ?? (() => Promise.resolve());\n\n    let page: Page;\n    /** 标记扫码状态：new → scanned → confirmed */\n    let statusMachine: \"new\" | \"scanned\" | \"confirmed\" = \"new\";\n    let isSelfClosing = false;\n    let handleBrowserDisconnected: (() => void) | undefined;\n    const cleanup = async () => {\n        if (handleBrowserDisconnected) {\n            task._steelBrowser?.off(\"disconnected\", handleBrowserDisconnected);\n        }\n        if (page && !page.isClosed()) {\n            await page.close().catch(() => {});\n        }\n    };\n\n    // ========== 第一步：启动浏览器并打开登录页 ==========\n    try {\n        page = await task.createPage({\n            url: \"https://channels.weixin.qq.com/login.html\",\n        });\n\n        if (!task._session?.id) throw new Error(\"Session ID 不存在\");\n\n        handleBrowserDisconnected = () => {\n            if (task.debug && isSelfClosing) {\n                task.logger.info(\"执行结束，关闭浏览器！\");\n            } else {\n                task.logger.info(\"浏览器被手动释放或意外关闭！\");\n            }\n        };\n        task._steelBrowser?.on(\"disconnected\", handleBrowserDisconnected);\n    } catch (e) {\n        task.logger.error(\"浏览器启动失败\", e);\n        return { code: 414, message: `浏览器启动失败: ${e}`, data: {} };\n    }\n\n    // 拦截不必要的资源，提升加载速度\n    await page.route(\"**/*.mp4\", (route) => route.abort());\n    await page.route(\"**/*.ttf\", (route) => route.abort());\n    await page.addInitScript(() => {\n        window.requestAnimationFrame = () => 0;\n    });\n\n    task.logger.info(\"页面创建成功，等待二维码加载...\");\n\n    // 等待页面稳定\n    await page.waitForTimeout(2000);\n\n    // ========== 第二步：生成远程调试地址 ==========\n    const pageInfo = await task._client?.sessions.liveDetails(task._session.id);\n    const pageId = pageInfo?.pages[0].id ?? \"\";\n\n    const baseHost = task._session.websocketUrl?.replace(/^wss?:\\/\\//, \"\") ?? \"\";\n    const connectAddress = new URLSearchParams({ baseHost, pageId }).toString();\n\n    task.reportService?.settingSessionID?.(task._session?.id || \"\");\n\n    task.logger.info(\"远程调试地址已生成，现在可以安全访问远程页面\");\n    await reporter(0, \"浏览器启动成功，请使用微信App扫码登录……\", { connectAddress });\n\n    // ========== 第三步：监听扫码状态与登录结果 ==========\n    const userInfo: UserInfo = { finderUsername: \"\", uniqueId: \"\", avatar: \"\", name: \"\" };\n    let finderList: FinderInfo[] = [];\n\n    try {\n        await new Promise<void>((resolve, reject) => {\n            let finished = false;\n\n            /** 清理所有监听器，防止重复触发 */\n            const cleanup = (status?: unknown) => {\n                if (finished) return;\n                finished = true;\n                page.off(\"response\", handleAuthData);\n                page.off(\"response\", handleAuthLoginStatus);\n                if (status !== undefined) reject(status);\n            };\n\n            /**\n             * 登录成功后获取用户数据\n             *\n             * 监听两个接口：\n             * - auth_data：获取 finder 用户信息和多账号列表\n             * - helper_upload_params：获取用户 uin（微信号标识）\n             */\n            const handleAuthData = async (resp: Response) => {\n                try {\n                    const url = resp.url();\n\n                    if (\n                        url.includes(\"/cgi-bin/mmfinderassistant-bin/auth/auth_data\") ||\n                        url.includes(\"/mmfinderassistant-bin/auth/auth_data\")\n                    ) {\n                        await reporter(0, \"扫码成功!\", { stage: \"scanQrcode\", connectAddress });\n                        try {\n                            const jsonResponse = await resp.json();\n\n                            if (jsonResponse.errCode === 0 && jsonResponse.data) {\n                                const data = jsonResponse.data;\n\n                                // 获取主视频号信息\n                                if (data.finderUser) {\n                                    userInfo.name = data.finderUser.nickname || \"\";\n                                    userInfo.uniqueId = data.finderUser.uniqId || \"\";\n                                    userInfo.avatar = data.finderUser.headImgUrl || \"\";\n                                    userInfo.finderUsername = data.finderUser.finderUsername || \"\";\n                                }\n\n                                // 视频号助手支持多账号管理，获取完整列表\n                                if (data.finderList && Array.isArray(data.finderList)) {\n                                    finderList = data.finderList.map((f: any) => ({\n                                        finderUsername: f.finderUsername,\n                                        nickname: f.nickname,\n                                        headImgUrl: f.headImgUrl,\n                                        uniqId: f.uniqId,\n                                        isMasterFinder: f.isMasterFinder,\n                                    }));\n                                }\n\n                                task.logger.info(\"auth_data 解析成功\", {\n                                    nickname: userInfo.name,\n                                    finderCount: finderList.length,\n                                });\n                            }\n                        } catch (e) {\n                            task.logger.warn(\"解析 auth_data 失败:\", {\n                                error: e instanceof Error ? e.message : String(e),\n                                url,\n                            });\n                        }\n                    } else if (url.includes(\"/mmfinderassistant-bin/helper/helper_upload_params\")) {\n                        // 通过 upload_params 接口获取用户 uin\n                        task.logger.info(\"检测到 helper_upload_params 接口\");\n                        cleanup();\n                        try {\n                            const jsonUserInfo: { data: { uin: string } } = await resp.json();\n                            userInfo.uin = jsonUserInfo.data.uin ?? \"\";\n                            task.logger.info(\"用户uin获取成功\", { uin: userInfo.uin });\n                        } catch (e) {\n                            task.logger.warn(\"无法解析用户信息:\", {\n                                url,\n                                error: e instanceof Error ? e.message : String(e),\n                            });\n                        }\n                        resolve();\n                    }\n                } catch (err) {\n                    task.logger.error(\"监听登录结果出现异常\", err);\n                    cleanup(err);\n                }\n            };\n\n            /**\n             * 监听视频号助手扫码状态接口 auth_login_status\n             *\n             * 状态码说明：\n             *   status=0, acctStatus=0 → 未扫码\n             *   status=5, acctStatus=1 → 已扫码，等待手机确认\n             *   status=1, acctStatus=1 → 已确认登录\n             *   status=3               → 登录成功（另一种状态）\n             */\n            const handleAuthLoginStatus = async (response: Response) => {\n                try {\n                    const url = response.url();\n\n                    if (\n                        !url.includes(\"/cgi-bin/mmfinderassistant-bin/auth/auth_login_status\") &&\n                        !url.includes(\"/mmfinderassistant-bin/auth/auth_login_status\")\n                    ) {\n                        return;\n                    }\n\n                    let jsonResponse: {\n                        errCode: number;\n                        errMsg?: string;\n                        data?: { status: number; acctStatus: number };\n                    };\n\n                    try {\n                        jsonResponse = await response.json();\n                    } catch (e) {\n                        task.logger.warn(\"Response body unavailable\", { url, error: e });\n                        return;\n                    }\n\n                    if (jsonResponse.errCode !== 0) {\n                        task.logger.warn(\"auth_login_status 返回错误:\", {\n                            errCode: jsonResponse.errCode,\n                            errMsg: jsonResponse.errMsg,\n                        });\n                        return;\n                    }\n\n                    const data = jsonResponse.data;\n                    if (!data) return;\n\n                    const { status, acctStatus } = data;\n                    task.logger.info(\"auth_login_status 状态:\", { status, acctStatus });\n\n                    // 未扫码，继续等待\n                    if (status === 0 && acctStatus === 0) return;\n\n                    // 已扫码，等待确认（仅首次上报）\n                    if (status === 5 && acctStatus === 1) {\n                        if (statusMachine !== \"scanned\") {\n                            statusMachine = \"scanned\";\n                            task.logger.info(\"用户已扫码，等待确认...\");\n                        }\n                        return;\n                    }\n\n                    // 登录成功：切换监听 → auth_data\n                    if ((status === 1 && acctStatus === 1) || status === 3) {\n                        statusMachine = \"confirmed\";\n                        task.logger.info(\"扫码确认，开始监听登录完成...\");\n                        page.off(\"response\", handleAuthLoginStatus);\n                        page.on(\"response\", handleAuthData);\n                    }\n                } catch (err) {\n                    task.logger.error(\"handleAuthLoginStatus 异常:\", err);\n                    cleanup(err);\n                }\n            };\n\n            // 提前注册监听，防止丢失请求\n            page.on(\"response\", handleAuthLoginStatus);\n        });\n    } catch (e) {\n        isSelfClosing = true;\n        const errorMessage = e instanceof Error ? e.message : String(e);\n        await cleanup();\n        return { code: 500, message: errorMessage, data: { stage: \"scanQrcode\", connectAddress } };\n    }\n\n    // ========== 第四步：提取 localStorage 数据 ==========\n    let localStorageData: Record<string, string> = {};\n    const maxRetries = 10;\n\n    task.logger.info(\"开始提取 localStorage 数据...\");\n\n    for (let retryCount = 0; retryCount < maxRetries; retryCount++) {\n        try {\n            localStorageData = await page.evaluate(() => ({\n                fingerPrintDeviceId: localStorage.getItem(\"_finger_print_device_id\") || \"\",\n                aId: localStorage.getItem(\"__rx::aid\") || \"\",\n            }));\n\n            if (localStorageData[\"fingerPrintDeviceId\"] && localStorageData[\"aId\"]) {\n                task.logger.info(\"视频号 fingerPrintDeviceId & aId 数据已获取\");\n                break;\n            }\n\n            task.logger.info(`等待 localStorage 数据... (${retryCount + 1}/${maxRetries})`);\n            await page.waitForTimeout(1000);\n        } catch (error) {\n            task.logger.warn(`提取 localStorage 数据失败 (尝试 ${retryCount + 1}/${maxRetries}):`, {\n                error: error instanceof Error ? error.message : String(error),\n            });\n            await page.waitForTimeout(1000);\n        }\n    }\n\n    // ========== 第五步：收集 cookie 并返回结果 ==========\n    const cookie = JSON.stringify(await task._steelBrowserContext?.cookies());\n    isSelfClosing = true;\n    await cleanup();\n\n    return success(\n        {\n            connectAddress,\n            cookie,\n            userInfo,\n            finderList,\n            extraParam: { ...localStorageData, uin: userInfo.uin, finderUserName: userInfo.finderUsername },\n        },\n        \"登录成功！\",\n    );\n};\n","import { TaskState, type UserInfo } from \"@iflyrpa/share\";\nimport type { Response } from \"playwright-core\";\nimport { ExecutionState } from \"../../types\";\nimport { ProxyAgent } from \"../../utils/proxy\";\nimport type { SteelAction } from \"./index\";\n\nconst scanRetryMaxCount = 60; // 二维码扫描重试次数\nconst waitQrcodeResultMaxTime = scanRetryMaxCount * 2 * 1000; // 最长等待时间\n\n// 视频号助手登录\nexport const rpaServer: SteelAction = async (task, params) => {\n    const updateTaskState = task.taskStageStore?.update?.bind(task.taskStageStore, task.taskId || \"\");\n    let executionState: ExecutionState | undefined;\n\n    let proxyUrl: string | undefined;\n    if (params.proxyLoc) {\n        task.logger?.info(`==> 开始获取代理信息：${params}`);\n        const ProxyAgentResult = await ProxyAgent({ logger: task.logger }, params.proxyLoc, params.accountId);\n        task.logger?.info(\"==> 代理信息获取成功！\");\n        proxyUrl = ProxyAgentResult ? `http://${ProxyAgentResult.ip}:${ProxyAgentResult.port}` : undefined;\n    }\n\n    const page = await task.createPage({\n        url: \"https://channels.weixin.qq.com/login.html\",\n        proxyUrl,\n        userAgent: params.userAgent,\n        ...(params.viewport ? { viewport: params.viewport } : {}),\n    });\n\n    task.steelBrowser?.on(\"disconnected\", async () => {\n        const browserContext = task.steelBrowserContext;\n        const browser = task.steelBrowser;\n        executionState = ExecutionState.BROWSER_CLOSED;\n        await page.close();\n\n        if (browserContext) {\n            await browserContext.close();\n        }\n        if (browser) {\n            await browser.close();\n        }\n    });\n\n    await updateTaskState?.({\n        state: TaskState.WAIT_SCAN,\n        connectAddress: await task.steelConnector?.getLive(task.sessionId || \"\"),\n        sessionId: task.sessionId,\n    });\n\n    let token: string | undefined;\n    let userInfo: UserInfo = { finderUsername: \"\", uniqueId: \"\", avatar: \"\", name: \"\" };\n    let finderList: Array<{\n        finderUsername: string;\n        nickname: string;\n        headImgUrl: string;\n        uniqId: string;\n        isMasterFinder: boolean;\n    }> = [];\n\n    try {\n        await new Promise<void>((resolve, reject) => {\n            let finished = false;\n\n            const timer = setTimeout(async () => {\n                cleanup();\n                executionState = ExecutionState.TIMEOUT;\n                await updateTaskState?.({\n                    state: TaskState.TIMEOUT,\n                    error: \"等待扫码登录超时\",\n                });\n                resolve();\n            }, waitQrcodeResultMaxTime);\n\n            const cleanup = () => {\n                if (finished) return;\n                finished = true;\n                clearTimeout(timer);\n                page.off(\"response\", handleAfterLogin);\n                page.off(\"response\", handleScanStatus);\n                task.steelBrowser?.off(\"disconnected\", handleBrowserClosed);\n            };\n\n            const handleBrowserClosed = () => {\n                cleanup();\n                executionState = ExecutionState.BROWSER_CLOSED;\n                resolve();\n            };\n\n            const handleAfterLogin = async (resp: Response) => {\n                try {\n                    const url = resp.url();\n\n                    // 视频号助手登录成功后获取认证数据\n                    if (\n                        url.includes(\"/cgi-bin/mmfinderassistant-bin/auth/auth_data\") ||\n                        url.includes(\"/mmfinderassistant-bin/auth/auth_data\")\n                    ) {\n                        try {\n                            const jsonResponse = await resp.json();\n\n                            if (jsonResponse.errCode === 0 && jsonResponse.data) {\n                                await updateTaskState?.({\n                                    state: TaskState.CONFIRMED,\n                                });\n\n                                const data = jsonResponse.data;\n\n                                // 获取视频号列表\n                                if (data.finderUser) {\n                                    userInfo.name = data.finderUser.nickname || \"\";\n                                    userInfo.uniqueId = data.finderUser.uniqId || \"\";\n                                    userInfo.avatar = data.finderUser.headImgUrl || \"\";\n                                    userInfo.finderUsername = data.finderUser.finderUsername || \"\";\n                                }\n\n                                // 如果有多个视频号，获取列表\n                                if (data.finderList && Array.isArray(data.finderList)) {\n                                    finderList = data.finderList.map((f: any) => ({\n                                        finderUsername: f.finderUsername,\n                                        nickname: f.nickname,\n                                        headImgUrl: f.headImgUrl,\n                                        uniqId: f.uniqId,\n                                        isMasterFinder: f.isMasterFinder,\n                                    }));\n                                }\n\n                                task.logger.info(\"auth_data 解析成功\", {\n                                    nickname: userInfo.name,\n                                    finderCount: finderList.length,\n                                });\n                            }\n                        } catch (e) {\n                            task.logger.warn(\"解析 auth_data 失败:\", {\n                                error: e instanceof Error ? e.message : String(e),\n                                url,\n                            });\n                        }\n                    } else if (url.includes(\"/mmfinderassistant-bin/helper/helper_upload_params\")) {\n                        // 获取用户微信号\n                        task.logger.info(\"检测到 helper_upload_params 接口\");\n                        cleanup();\n                        try {\n                            const jsonUserInfo: { data: { uin: string } } = await resp.json();\n                            userInfo.uin = jsonUserInfo.data.uin ?? \"\";\n                            task.logger.info(\"用户uin获取成功\", { uin: userInfo.uin });\n                        } catch (e) {\n                            task.logger.warn(\"无法解析用户信息:\", {\n                                url,\n                                error: e instanceof Error ? e.message : String(e),\n                            });\n                        }\n\n                        await updateTaskState?.({\n                            state: TaskState.CONFIRMED,\n                        });\n\n                        executionState = ExecutionState.SUCCESS;\n                        resolve();\n                    }\n\n                    // 备选：检测登录成功后的页面跳转\n                    if (url.includes(\"/platform\") || url.includes(\"/live\")) {\n                        // 如果还没处理过，尝试从页面获取数据\n                        if (executionState !== ExecutionState.SUCCESS) {\n                            try {\n                                await page.waitForFunction(() => !!(window as any).finder?.helperData, {\n                                    timeout: 5000,\n                                });\n\n                                const helperData = await page.evaluate(() => {\n                                    const win = window as unknown as {\n                                        finder: {\n                                            helperData: {\n                                                finderList: Array<any>;\n                                            };\n                                        };\n                                    };\n                                    return win.finder.helperData;\n                                });\n\n                                if (helperData) {\n                                    cleanup();\n                                    finderList = helperData.finderList || [];\n\n                                    const masterFinder = finderList.find((f) => f.isMasterFinder) || finderList[0];\n                                    if (masterFinder) {\n                                        userInfo = {\n                                            name: masterFinder.nickname,\n                                            uniqueId: masterFinder.finderUsername,\n                                            avatar: masterFinder.headImgUrl,\n                                            finderUsername: masterFinder.finderUsername,\n                                        };\n                                    }\n\n                                    await updateTaskState?.({\n                                        state: TaskState.CONFIRMED,\n                                    });\n\n                                    executionState = ExecutionState.SUCCESS;\n                                    resolve();\n                                }\n                            } catch (e) {\n                                task.logger.warn(\"从页面获取 helperData 失败:\", { error: e });\n                            }\n                        }\n                    }\n                } catch (err) {\n                    cleanup();\n                    reject(err);\n                }\n            };\n\n            // 视频号助手扫码状态检测接口：auth_login_status\n            // 状态码说明：\n            // status: 0 = 未扫码\n            // status: 5 = 已扫码未确认 (手机上点击确认登录)\n            // status: 1 = 已确认登录成功\n            // status: 3 = 登录成功（另一种状态）\n            // acctStatus: 0 = 未登录, 1 = 已登录\n            const handleScanStatus = async (response: Response) => {\n                try {\n                    const url = response.url();\n\n                    // 检测视频号助手扫码状态接口\n                    if (!url.includes(\"/mmfinderassistant-bin/auth/auth_login_status\")) {\n                        return;\n                    }\n\n                    let jsonResponse: Record<string, unknown>;\n                    try {\n                        const text = await response.text();\n                        if (!text) {\n                            task.logger.warn(\"Empty response body:\", { url });\n                            return;\n                        }\n                        jsonResponse = JSON.parse(text);\n                    } catch (e) {\n                        task.logger.warn(\"Failed to parse json:\", { url, error: e });\n                        return;\n                    }\n\n                    // 检查错误码\n                    if (jsonResponse.errCode !== 0) {\n                        task.logger.warn(\"auth_login_status 返回错误:\", {\n                            errCode: jsonResponse.errCode,\n                            errMsg: jsonResponse.errMsg,\n                        });\n                        return;\n                    }\n\n                    const data = jsonResponse.data as Record<string, number> | undefined;\n                    if (!data) return;\n\n                    const status = data.status;\n                    const acctStatus = data.acctStatus;\n\n                    task.logger?.info(`扫码状态: status=${status}, acctStatus=${acctStatus}`);\n\n                    // 状态判断\n                    if (status === 0 && acctStatus === 0) {\n                        // 未扫码，继续等待\n                        return;\n                    }\n\n                    if (status === 5 && acctStatus === 1) {\n                        // 已扫码，等待确认\n                        await updateTaskState?.({\n                            state: TaskState.SCANNED,\n                        });\n                        return;\n                    }\n\n                    // 登录成功状态：status=1 或 status=3\n                    if ((status === 1 && acctStatus === 1) || (status === 3 && acctStatus === 0)) {\n                        // 扫码完成，开始监听登录后的数据获取\n                        page.off(\"response\", handleScanStatus);\n                        page.on(\"response\", handleAfterLogin);\n\n                        // 触发获取 auth_data\n                        try {\n                            await page.evaluate(() => {\n                                // 触发视频号助手获取用户数据\n                                const event = new CustomEvent(\"getAuthData\");\n                                window.dispatchEvent(event);\n                            });\n                        } catch (e) {\n                            // 忽略错误，继续监听响应\n                        }\n                    }\n                } catch (err) {\n                    cleanup();\n                    reject(err);\n                }\n            };\n\n            // 在页面加载之前就注册监听，防止丢失请求\n            task.steelBrowser?.on(\"disconnected\", handleBrowserClosed);\n            page.on(\"response\", handleScanStatus);\n        });\n    } finally {\n        await page.close();\n    }\n\n    if (executionState === undefined) return { code: 500, message: \"未知错误\", data: {} };\n\n    switch (executionState) {\n        case ExecutionState.BROWSER_CLOSED: {\n            const msg = \"浏览器已关闭，任务中断!\";\n            await updateTaskState?.({\n                state: TaskState.FAILED,\n                error: \"浏览器已关闭\",\n            });\n            return { code: 414, message: msg, data: {} };\n        }\n\n        case ExecutionState.TIMEOUT: {\n            const msg = \"等待用户扫码登录超时!\";\n            await updateTaskState?.({\n                state: TaskState.TIMEOUT,\n                error: msg,\n            });\n            task.logger.info(msg);\n            return { code: 414, message: msg, data: {} };\n        }\n\n        case ExecutionState.SUCCESS: {\n            let localStorageData: Record<string, string> = {};\n            let retryCount = 0;\n            const maxRetries = 10;\n\n            task.logger.info(\"开始提取 localStorage 数据...\");\n\n            while (retryCount < maxRetries) {\n                try {\n                    localStorageData = await page.evaluate(() => ({\n                        fingerPrintDeviceId: localStorage.getItem(\"_finger_print_device_id\") || \"\",\n                        aId: localStorage.getItem(\"__rx::aid\") || \"\",\n                    }));\n\n                    // 检查是否有数据\n                    if (localStorageData[\"fingerPrintDeviceId\"] && localStorageData[\"aId\"]) {\n                        task.logger.info(\"视频号fingerPrintDeviceId&aId数据已获取\");\n                        break;\n                    }\n\n                    retryCount++;\n                    task.logger.info(`等待 localStorage 数据... (${retryCount}/${maxRetries})`);\n                    await page.waitForTimeout(1000);\n                } catch (error) {\n                    task.logger.warn(`提取 localStorage 数据失败 (尝试 ${retryCount + 1}/${maxRetries}):`, {\n                        error: error instanceof Error ? error.message : String(error),\n                    });\n                    retryCount++;\n                    await page.waitForTimeout(1000);\n                }\n            }\n\n            await updateTaskState?.({\n                state: TaskState.SUCCESS,\n                result: {\n                    cookie: JSON.stringify(await task.steelBrowserContext?.cookies()),\n                    token, // 视频号助手使用 sessionId 作为主要凭证\n                    userInfo: userInfo,\n                    finderList, // 返回所有可管理的视频号列表\n                    extraParam: { ...localStorageData, uin: userInfo.uin, finderUserName: userInfo.finderUsername }, // 添加 localStorage 数据和 uin\n                },\n            });\n            return {\n                code: 0,\n                message: \"成功\",\n                data: {\n                    cookie: JSON.stringify(await task.steelBrowserContext?.cookies()),\n                    token,\n                    userInfo,\n                    finderList, // 包含所有视频号信息，支持多账号管理\n                    extraParam: { ...localStorageData, uin: userInfo.uin, finderUserName: userInfo.finderUsername }, // 添加 localStorage 数据和 uin\n                },\n            };\n        }\n        default:\n            return { code: 500, message: \"任务执行中断\", data: {} };\n    }\n};\n","import { CommonAction, success } from \"@iflyrpa/share\";\nimport { ActiomCommonParams } from \"../../types\";\nimport { executeAction } from \"../../utils\";\nimport { rpaAction } from \"./rpa\";\nimport { rpaServer } from \"./rpa-server\";\n\nexport type ShipinhaoLoginParams = ActiomCommonParams;\n\nexport type SteelAction = CommonAction<ActiomCommonParams, Record<string, unknown>>;\n\nexport const shipinhaoLogin: SteelAction = async (task, params) => {\n    if (params.actionType === \"rpa\") {\n        return rpaAction(task, params);\n    }\n\n    if (params.actionType === \"mockApi\") {\n        return success({}, \"暂不支持mockApi\");\n    }\n\n    if (params.actionType === \"server\") {\n        return rpaServer(task, params);\n    }\n\n    return executeAction(rpaServer)(task, params);\n};\n","import crypto from \"node:crypto\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { Http } from \"../../utils/http\";\n\n/**\n * 视频号分片上传配置\n */\ninterface UploadConfig {\n    chunkSize?: number; // 分片大小，默认 8MB\n    concurrentLimit?: number; // 并发数，默认 4\n    singleFileSize?: number; // 大文件阈值，默认 10MB\n    http?: Http; // Http 实例\n    timeout?: number; // 单次网络请求超时(ms)，默认 60s\n    retries?: number; // 网络请求重试次数，默认 3\n    retryDelay?: number; // 重试间隔(ms)，默认 2000\n}\n\n/**\n * 分片信息\n */\ninterface PartInfo {\n    PartNumber: number;\n    ETag: string;\n}\n\n/**\n * 上传进度回调\n */\ntype ProgressCallback = (progress: {\n    uploadedChunks: number;\n    totalChunks: number;\n    percent: number;\n    speed?: number; // KB/s\n}) => void;\n\n/**\n * 视频号分片上传器\n * 参考前端代码逻辑实现\n */\nexport class VideoChannelUploader {\n    private chunkSize: number;\n    private concurrentLimit: number;\n    private singleFileSize: number;\n    private http: Http;\n    private reqOptions: { timeout: number; retries: number; retryDelay: number };\n\n    // 上传状态\n    private uploadTaskId: string = \"\";\n    private partInfo: PartInfo[] = [];\n    private md5: string = \"\";\n    private chunkCount: number = 0;\n    private uploadedChunks: number = 0;\n    private startTime: number = 0;\n    private uploadSpeed: number = 0;\n    private speedRecords: number[] = [];\n    private speedInterval?: NodeJS.Timeout;\n\n    constructor(config: UploadConfig = {}) {\n        this.chunkSize = config.chunkSize || 8 * 1024 * 1024; // 8MB\n        this.concurrentLimit = config.concurrentLimit || 4;\n        this.singleFileSize = config.singleFileSize || 10 * 1024 * 1024; // 10MB\n        this.http = config.http || new Http();\n        this.reqOptions = {\n            timeout: config.timeout ?? 60 * 1000, // 60s，上传/下载对网络更敏感\n            retries: config.retries ?? 3,\n            retryDelay: config.retryDelay ?? 2000,\n        };\n    }\n\n    /**\n     * 计算 Buffer MD5（前 5MB）\n     */\n    private calculateMd5(buffer: Buffer): string {\n        const MAX_SIZE = 5 * 1024 * 1024; // 5MB\n        const slice = buffer.length > MAX_SIZE ? buffer.slice(0, MAX_SIZE) : buffer;\n        return crypto.createHash(\"md5\").update(slice).digest(\"hex\");\n    }\n\n    /**\n     * 计算分片 MD5（完整分片）\n     */\n    private calculateChunkMd5(buffer: Buffer): string {\n        return crypto\n            .createHash(\"md5\")\n            .update(buffer as Uint8Array)\n            .digest(\"hex\");\n    }\n\n    /**\n     * 生成 UUID\n     */\n    private generateUUID(): string {\n        return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\n            const r = (Math.random() * 16) | 0;\n            const v = c === \"x\" ? r : (r & 0x3) | 0x8;\n            return v.toString(16);\n        });\n    }\n\n    /**\n     * 获取图片尺寸\n     */\n    private getImageSize(buffer: Buffer): { width: number; height: number } {\n        try {\n            // PNG\n            if (buffer[0] === 0x89 && buffer[1] === 0x50) {\n                return { width: buffer.readUInt32BE(16), height: buffer.readUInt32BE(20) };\n            }\n            // JPEG\n            if (buffer[0] === 0xff && buffer[1] === 0xd8) {\n                let offset = 2;\n                while (offset < buffer.length) {\n                    if (buffer[offset] !== 0xff) break;\n                    const marker = buffer[offset + 1];\n                    const size = buffer.readUInt16BE(offset + 2);\n                    if (marker === 0xc0 || marker === 0xc1 || marker === 0xc2) {\n                        return {\n                            height: buffer.readUInt16BE(offset + 5),\n                            width: buffer.readUInt16BE(offset + 7),\n                        };\n                    }\n                    offset += size + 2;\n                }\n            }\n            // GIF\n            if (buffer[0] === 0x47 && buffer[1] === 0x49) {\n                return { width: buffer.readUInt16LE(6), height: buffer.readUInt16LE(8) };\n            }\n            return { width: 0, height: 0 };\n        } catch {\n            return { width: 0, height: 0 };\n        }\n    }\n\n    /**\n     * 读取文件为 Buffer\n     */\n    private async readFile(filePath: string): Promise<Buffer> {\n        if (filePath.startsWith(\"http://\") || filePath.startsWith(\"https://\")) {\n            const resp = await this.http.api<Buffer>(\n                {\n                    url: filePath,\n                    method: \"get\",\n                    responseType: \"arraybuffer\",\n                },\n                this.reqOptions,\n            );\n            return Buffer.from(resp as any);\n        }\n        return fs.promises.readFile(filePath);\n    }\n\n    /**\n     * 获取上传认证参数（UploadID）\n     */\n    private async getUploadId(\n        fileSize: number,\n        fileName: string,\n        uin: number,\n        authKey: string,\n        taskId: string,\n    ): Promise<string> {\n        const blockSum = Math.ceil(fileSize / this.chunkSize);\n        const blockPartLength: number[] = [];\n\n        // 计算每个分片的结束位置（前端逻辑）\n        for (let i = 1; i <= blockSum; i++) {\n            const end = Math.min(i * this.chunkSize, fileSize);\n            blockPartLength.push(end);\n        }\n\n        const requestBody = {\n            BlockSum: blockSum,\n            BlockPartLength: blockPartLength,\n        };\n\n        const headers = {\n            \"X-Arguments\": `apptype=251&filetype=20304&weixinnum=${uin}&filekey=${encodeURIComponent(fileName)}&filesize=${fileSize}&taskid=${taskId}&scene=2`,\n            Authorization: authKey,\n            Accept: \"application/json, text/plain, */*\",\n            \"Content-MD5\": \"null\",\n            Referer: \"https://channels.weixin.qq.com/\",\n            Origin: \"https://channels.weixin.qq.com/\",\n        };\n\n        const resp = await this.http.api<{ UploadID?: string; errMsg?: string }>(\n            {\n                url: \"https://finderassistancea.video.qq.com/applyuploaddfs\",\n                method: \"put\",\n                headers,\n                data: requestBody,\n                defaultErrorMsg: \"获取UploadID失败\",\n            },\n            this.reqOptions,\n        );\n\n        if (!resp?.UploadID) {\n            throw new Error(`获取 UploadID 失败: ${resp?.errMsg || \"未知错误\"}`);\n        }\n\n        return resp.UploadID;\n    } /**\n     * 上传单个分片\n     */\n    private async uploadChunk(\n        chunk: Buffer,\n        fileName: string,\n        fileSize: number,\n        uin: number,\n        authKey: string,\n        uploadId: string,\n        partNumber: number,\n        taskId: string,\n        onProgress?: (delta: number) => void,\n    ): Promise<string> {\n        const md5Hash = this.calculateChunkMd5(chunk);\n\n        const headers = {\n            \"Content-MD5\": md5Hash,\n            \"X-Arguments\": `apptype=251&filetype=20304&weixinnum=${uin}&filekey=${encodeURIComponent(fileName)}&filesize=${fileSize}&taskid=${taskId}&scene=0`,\n            Authorization: authKey,\n            \"Content-Type\": \"application/octet-stream\",\n            Referer: \"https://channels.weixin.qq.com/platform/post/create\",\n            Origin: \"https://channels.weixin.qq.com\",\n        };\n\n        const url = `https://finderassistancea.video.qq.com/uploadpartdfs?PartNumber=${partNumber}&UploadID=${encodeURIComponent(uploadId)}`;\n\n        const resp = await this.http.api<{ ETag?: string; errCode?: number; errMsg?: string }>(\n            {\n                url,\n                method: \"put\",\n                headers,\n                data: chunk,\n                defaultErrorMsg: `分片 ${partNumber} 上传失败`,\n            },\n            this.reqOptions,\n        );\n\n        if (resp?.errCode !== undefined && resp.errCode !== 0) {\n            throw new Error(`分片 ${partNumber} 上传失败: ${resp.errMsg}`);\n        }\n\n        // 简单的进度更新\n        if (onProgress) {\n            onProgress(chunk.length);\n        }\n\n        return resp.ETag || \"\";\n    } /**\n     * 确认分片上传（用于断点续传检查）\n     */\n    private async confirmChunks(\n        uploadId: string,\n        fileName: string,\n        uin: number,\n        authKey: string,\n        transFlag: string,\n        taskId: string,\n    ): Promise<PartInfo[]> {\n        const headers = {\n            \"Content-MD5\": \"null\",\n            \"X-Arguments\": `apptype=251&filetype=20304&weixinnum=${uin}&filekey=${encodeURIComponent(fileName)}&filesize=0&taskid=${taskId}&scene=0`,\n            Authorization: authKey,\n            Referer: \"https://channels.weixin.qq.com/platform/post/create\",\n            Origin: \"https://channels.weixin.qq.com\",\n        };\n\n        const requestBody = {\n            TransFlag: transFlag || \"0_0\",\n            PartNumberMarker: \"1\",\n        };\n\n        const url = `https://finderassistancea.video.qq.com/listparts?UploadID=${encodeURIComponent(uploadId)}`;\n\n        const resp = await this.http.api<{ ListPartsResult?: { Part: any[] } }>(\n            {\n                url,\n                method: \"post\",\n                headers,\n                data: requestBody,\n                defaultErrorMsg: \"确认分片上传失败\",\n            },\n            this.reqOptions,\n        );\n\n        if (resp?.ListPartsResult?.Part) {\n            return resp.ListPartsResult.Part.map((p: any) => ({\n                PartNumber: parseInt(p.PartNumber),\n                ETag: p.ETag,\n            }));\n        }\n\n        return [];\n    }\n\n    /**\n     * 完成上传\n     */\n    private async completeUpload(\n        uploadId: string,\n        fileName: string,\n        fileSize: number,\n        uin: number,\n        authKey: string,\n        transFlag: string,\n        partInfo: PartInfo[],\n        taskId: string,\n    ): Promise<string> {\n        const headers = {\n            \"Content-MD5\": \"null\",\n            \"X-Arguments\": `apptype=251&filetype=20304&weixinnum=${uin}&filekey=${encodeURIComponent(fileName)}&filesize=${fileSize}&taskid=${taskId}&scene=0`,\n            Authorization: authKey,\n            Referer: \"https://channels.weixin.qq.com/platform/post/create\",\n            Origin: \"https://channels.weixin.qq.com\",\n        };\n\n        const requestBody = {\n            TransFlag: transFlag || \"0_0\",\n            PartInfo: partInfo,\n        };\n\n        const url = `https://finderassistancea.video.qq.com/completepartuploaddfs?UploadID=${encodeURIComponent(uploadId)}`;\n\n        const resp = await this.http.api<{ DownloadURL?: string; errMsg?: string }>(\n            {\n                url,\n                method: \"post\",\n                headers,\n                data: requestBody,\n                defaultErrorMsg: \"完成上传失败\",\n            },\n            this.reqOptions,\n        );\n\n        if (!resp?.DownloadURL) {\n            throw new Error(`完成上传失败: ${resp?.errMsg || \"未知错误\"}`);\n        }\n\n        return resp.DownloadURL;\n    }\n\n    /**\n     * 并发控制执行器\n     */\n    private async asyncPool<T>(concurrency: number, items: T[], fn: (item: T) => Promise<void>): Promise<void> {\n        const executing: Promise<void>[] = [];\n\n        for (const item of items) {\n            const p = Promise.resolve().then(() => fn(item));\n            executing.push(p);\n\n            if (executing.length >= concurrency) {\n                await Promise.race(executing);\n            }\n        }\n\n        await Promise.all(executing);\n    }\n\n    /**\n     * 开始上传（核心方法）\n     */\n    public async upload(\n        imagePath: string,\n        uin: number,\n        authKey: string,\n        options: {\n            onProgress?: ProgressCallback;\n            transFlag?: string;\n        } = {},\n    ): Promise<{\n        downloadUrl: string;\n        width: number;\n        height: number;\n        fileSize: number;\n        md5: string;\n    }> {\n        const { onProgress, transFlag } = options;\n\n        // 1. 读取文件\n        const fileBuffer = await this.readFile(imagePath);\n        const fileSize = fileBuffer.length;\n        const fileName = path.basename(imagePath);\n\n        // 检查大小限制（20MB）\n        if (fileSize > 20 * 1024 * 1024) {\n            throw new Error(\"图片大小超过 20MB 限制\");\n        }\n\n        // 2. 计算 MD5 和获取尺寸\n        this.md5 = this.calculateMd5(fileBuffer);\n        const { width, height } = this.getImageSize(fileBuffer);\n\n        // 3. 初始化任务\n        this.startTime = Date.now();\n        this.chunkCount = Math.ceil(fileSize / this.chunkSize);\n        this.uploadedChunks = 0;\n        this.partInfo = new Array(this.chunkCount).fill(null);\n\n        const taskId = this.generateUUID();\n        const uuid = this.generateUUID();\n\n        console.log(`[上传开始] 文件: ${fileName}, 大小: ${fileSize}, 分片: ${this.chunkCount}`);\n\n        // 4. 获取 UploadID\n        this.uploadTaskId = await this.getUploadId(fileSize, fileName, uin, authKey, taskId);\n        console.log(`[获取 UploadID] ${this.uploadTaskId}`);\n\n        // 5. 启动速度监控\n        this.startSpeedWatch();\n\n        // 6. 分片上传\n        if (fileSize <= this.chunkSize) {\n            // 小文件直接上传\n            console.log(\"[直接上传] 单文件模式\");\n            const etag = await this.uploadChunk(\n                fileBuffer,\n                fileName,\n                fileSize,\n                uin,\n                authKey,\n                this.uploadTaskId,\n                1,\n                taskId,\n                (delta) => this.updateProgress(delta, onProgress),\n            );\n            this.partInfo[0] = { PartNumber: 1, ETag: etag };\n            this.uploadedChunks = 1;\n        } else {\n            // 大文件并发分片上传\n            console.log(`[分片上传] 并发数: ${this.concurrentLimit}`);\n\n            const chunks = Array.from({ length: this.chunkCount }, (_, i) => i);\n\n            await this.asyncPool(this.concurrentLimit, chunks, async (index) => {\n                const start = index * this.chunkSize;\n                const end = Math.min((index + 1) * this.chunkSize, fileSize);\n                const chunk = fileBuffer.slice(start, end);\n\n                console.log(`[上传分片 ${index + 1}/${this.chunkCount}] 大小: ${chunk.length}`);\n\n                const etag = await this.uploadChunk(\n                    chunk,\n                    fileName,\n                    fileSize,\n                    uin,\n                    authKey,\n                    this.uploadTaskId,\n                    index + 1,\n                    taskId,\n                    (delta) => this.updateProgress(delta, onProgress),\n                );\n\n                this.partInfo[index] = { PartNumber: index + 1, ETag: etag };\n                this.uploadedChunks++;\n\n                onProgress?.({\n                    uploadedChunks: this.uploadedChunks,\n                    totalChunks: this.chunkCount,\n                    percent: Math.floor((this.uploadedChunks / this.chunkCount) * 100),\n                    speed: this.uploadSpeed,\n                });\n            });\n        }\n\n        // 7. 确认分片（可选，用于断点续传场景）\n        // const confirmedParts = await this.confirmChunks(...);\n\n        // 8. 完成上传\n        console.log(\"[完成上传] 合并分片...\");\n        const downloadUrl = await this.completeUpload(\n            this.uploadTaskId,\n            fileName,\n            fileSize,\n            uin,\n            authKey,\n            transFlag || \"0_0\",\n            this.partInfo.filter(Boolean),\n            taskId,\n        );\n\n        this.stopSpeedWatch();\n\n        return {\n            downloadUrl,\n            width,\n            height,\n            fileSize,\n            md5: crypto.createHash(\"md5\").update(fileBuffer).digest(\"hex\"),\n        };\n    }\n\n    /**\n     * 更新进度\n     */\n    private updateProgress(delta: number, onProgress?: ProgressCallback): void {\n        // 计算速度的逻辑\n    }\n\n    /**\n     * 启动速度监控\n     */\n    private startSpeedWatch(): void {\n        let lastUploaded = 0;\n        this.speedInterval = setInterval(() => {\n            const current = this.uploadedChunks * this.chunkSize;\n            this.uploadSpeed = Math.floor((current - lastUploaded) / 1024); // KB/s\n            this.speedRecords.push(this.uploadSpeed);\n            lastUploaded = current;\n        }, 1000);\n    }\n\n    /**\n     * 停止速度监控\n     */\n    private stopSpeedWatch(): void {\n        if (this.speedInterval) {\n            clearInterval(this.speedInterval);\n        }\n    }\n}\n\n// ==================== 使用示例 ====================\n\nasync function example() {\n    const uploader = new VideoChannelUploader({\n        chunkSize: 8 * 1024 * 1024, // 8MB 分片\n        concurrentLimit: 4, // 4 并发\n    });\n\n    try {\n        const result = await uploader.upload(\n            \"/path/to/large-image.jpg\", // 支持 5MB-20MB 的图片\n            123456789, // uin\n            \"your-auth-key\", // authKey\n            {\n                onProgress: (progress) => {\n                    console.log(`进度: ${progress.percent}%, 速度: ${progress.speed}KB/s`);\n                },\n            },\n        );\n\n        console.log(\"上传成功:\", result.downloadUrl);\n    } catch (error) {\n        console.error(\"上传失败:\", error);\n    }\n}\n","import { response, TaskState } from \"@iflyrpa/share\";\nimport { AxiosProxyParams } from \"../../types\";\nimport { stringifyError } from \"../../utils\";\nimport { classifyPublishError } from \"../../utils/errorMessages\";\nimport { Http } from \"../../utils/http\";\nimport { reportLogger } from \"../../utils/reportLogger\";\nimport { extractEncFileKey, rid } from \"../../utils/shipinhao/utils\";\nimport type { PublishAction } from \"./index\";\nimport { VideoChannelUploader } from \"./uploader\";\n\n/**\n * 视频号发布 - Mock API 方式\n * 通过调用视频号助手平台的内部API实现发布\n *\n * 核心流程:\n * 1. 获取用户信息 (getUserInfo) - 获取 uin 和 finderUsername\n * 2. 获取上传认证密钥 (getUploadAuthKey) - 获取 authKey\n * 3. 申请上传ID (getUploadId) - 获取 UploadID\n * 4. 上传图片 (uploadImage) - 上传图片内容\n * 5. 确认上传完成 (getUploadedImageInfo) - 获取 DownloadURL\n * 6. 发布图文 (publishDynamic) - 发布到视频号\n */\n\ninterface MusicInfo {\n    id: string; // 音乐ID (docId)\n    name: string; // 音乐名称\n    image: string; // 音乐封面图 (albumThumbUrl)\n    authorName: string; // 艺术家名称 (artist)\n    url: string; // 音乐流媒体URL (mediaStreamingUrl)\n    raw: {\n        playableInfo: {\n            type: number; // 音频类型 (docType)\n        };\n        bgmSource: number; // BGM来源\n        query?: string; // 查询字符串 (bgmQuery)\n    };\n}\n\ninterface UploadAuthKeyResponse {\n    errCode: number;\n    errMsg: string;\n    data?: {\n        authKey: string;\n        uin?: number;\n    };\n}\n\ninterface UserInfoResponse {\n    errCode: number;\n    errMsg: string;\n    data?: {\n        finderUser?: {\n            uin: number;\n            finderUsername: string;\n            nickname?: string;\n        };\n    };\n}\n\ninterface ImageUploadResult {\n    url: string;\n    md5sum: string;\n    fileSize: number;\n    thumbUrl: string;\n    fullThumbUrl: string;\n    width: number;\n    height: number;\n    mediaType: number;\n    videoPlayLen: number;\n    urlCdnTaskId: string;\n}\n\ninterface PublishResponse {\n    errCode: number;\n    errMsg: string;\n    data?: {\n        baseResp?: {\n            errcode: number;\n            errmsg: string;\n        };\n    };\n}\n\nfunction generateUUID(): string {\n    return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\n        const r = (Math.random() * 16) | 0;\n        const v = c === \"x\" ? r : (r & 0x3) | 0x8;\n        return v.toString(16);\n    });\n}\n\n/**\n * 获取13位时间戳\n */\nfunction getTimeStamp(length: number): string {\n    return Date.now().toString().substring(0, length);\n}\n\n/**\n * 获取用户信息\n * 根据 index_minify.js Line 44701 实现\n */\nasync function getUserInfo(cookies: string, http: Http): Promise<UserInfoResponse> {\n    // 构建请求体，与源码保持一致\n    const requestBody = {\n        timestamp: getTimeStamp(13), // 13位时间戳\n        _log_finder_uin: \"\",\n        _log_finder_id: \"\",\n        rawKeyBuff: null,\n        pluginSessionId: null,\n        scene: 7,\n        reqScene: 7,\n    };\n\n    // 使用 POST 请求，不是 GET\n    const response = await http.api<UserInfoResponse>({\n        method: \"post\",\n        url: \"https://channels.weixin.qq.com/cgi-bin/mmfinderassistant-bin/auth/auth_data\",\n        data: requestBody,\n        headers: {\n            cookie: cookies,\n            referer: \"https://channels.weixin.qq.com\",\n            \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36\",\n        },\n        defaultErrorMsg: \"获取用户信息失败\",\n    });\n\n    // 如果获取到用户信息，调用 getUploadAuthKey 获取 uin\n    if (response?.data?.finderUser) {\n        const finderUsername = response.data.finderUser.finderUsername || \"\";\n        const authKeyData = await getUploadAuthKey(cookies, finderUsername, http);\n\n        // 将 uin 设置到 finderUser 上\n        if (authKeyData?.data?.uin) {\n            response.data.finderUser.uin = authKeyData.data.uin;\n        } else {\n            // 如果没有获取到 uin，设置错误信息\n            response.errCode = authKeyData?.errCode || -1;\n            response.errMsg = authKeyData?.errMsg || \"获取 uin 失败\";\n        }\n    }\n\n    return response;\n}\n\n/**\n * 获取上传认证密钥\n * 根据 index_minify.js Line 44740 实现\n */\nasync function getUploadAuthKey(cookies: string, finderUsername: string, http: Http): Promise<UploadAuthKeyResponse> {\n    // 构建请求体，与源码保持一致\n    const requestBody = {\n        timestamp: getTimeStamp(13), // 13位时间戳\n        _log_finder_id: finderUsername, // 使用 finderUsername\n        rawKeyBuff: null,\n    };\n\n    const response = await http.api<UploadAuthKeyResponse>({\n        method: \"post\",\n        url: \"https://channels.weixin.qq.com/cgi-bin/mmfinderassistant-bin/helper/helper_upload_params\",\n        data: requestBody,\n        headers: {\n            cookie: cookies,\n            referer: \"https://channels.weixin.qq.com\",\n            Accept: \"application/json, text/plain, */*\",\n            \"Content-Type\": \"application/json\",\n            \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36\",\n        },\n        defaultErrorMsg: \"获取上传认证密钥失败\",\n    });\n\n    return response;\n}\n\nasync function uploadImageComplete(\n    imagePath: string,\n    taskId: string,\n    finderUsername: string,\n    uin: number,\n    authKey: string,\n    http: Http,\n): Promise<{\n    DownloadURL?: string;\n    errMsg?: string;\n    md5?: string;\n    width?: number;\n    height?: number;\n    fileSize?: number;\n}> {\n    const uploader = new VideoChannelUploader({\n        chunkSize: 8 * 1024 * 1024,\n        concurrentLimit: 4,\n        http,\n    });\n\n    const result = await uploader.upload(imagePath, uin, authKey, {\n        onProgress: (p) => console.log(`上传进度: ${p.percent}%`),\n    });\n\n    return {\n        DownloadURL: result.downloadUrl,\n        md5: result.md5,\n        fileSize: result.fileSize,\n        width: result.width,\n        height: result.height,\n    };\n}\n\n/**\n * 构建位置信息\n */\nfunction buildLocation(address?: {\n    name?: string;\n    latitude?: number;\n    longitude?: number;\n    city?: string;\n    address?: string;\n    uid?: string;\n}): Record<string, unknown> {\n    if (!address || !address.city) {\n        return {\n            latitude: 0,\n            longitude: 0,\n            city: \"\",\n            poiClassifyId: \"\",\n        };\n    }\n\n    if (address.uid) {\n        // 有完整POI信息\n        return {\n            latitude: address.latitude || 0,\n            longitude: address.longitude || 0,\n            city: address.city,\n            poiName: address.name || \"\",\n            address: address.address || \"\",\n            poiClassifyId: address.uid,\n        };\n    }\n\n    // 只有坐标\n    return {\n        latitude: address.latitude || 0,\n        longitude: address.longitude || 0,\n        city: address.city,\n        poiClassifyId: \"\",\n    };\n}\n\n/**\n * 构建话题 XML\n */\nfunction buildTopicXml(content: string, topics?: string[]): string {\n    const topicList = topics || [];\n    const valueCount = 1 + topicList.length * 2; // 内容(1) + 话题数×2\n\n    let xml = \"<finder>\";\n    xml += \"<version>1</version>\";\n    xml += `<valuecount>${valueCount}</valuecount>`;\n    xml += \"<style>\";\n    xml += `<at>${valueCount + 1}</at>`; // at 位置\n    xml += \"</style>\";\n    xml += `<value0><![CDATA[${content}]]></value0>`;\n\n    let valueIndex = 1;\n    for (const topic of topicList) {\n        // 话题节点\n        xml += `<value${valueIndex}>`;\n        xml += `<topic><![CDATA[#${topic}#]]></topic>`;\n        xml += `</value${valueIndex}>`;\n        valueIndex++;\n\n        // 空格节点\n        xml += `<value${valueIndex}><![CDATA[ ]]></value${valueIndex}>`;\n        valueIndex++;\n    }\n\n    xml += \"</finder>\";\n    return xml;\n}\n\n/**\n * 构建富文本 JSON\n */\nfunction buildRichTextJson(title: string, content: string): string {\n    const richText: Array<Record<string, unknown>> = [{ insert: title }, { attributes: { header: 1 }, insert: \"\\n\" }];\n\n    if (content) {\n        richText.push({ insert: content });\n    }\n\n    return JSON.stringify(richText);\n}\n\n/**\n * 构建描述文本\n */\nfunction buildDescription(content: string, topics?: string[]): string {\n    let description = content; // 添加话题\n    if (topics && topics.length > 0) {\n        description += `#${topics.join(\"#\")}`;\n    }\n\n    return description;\n}\n\n/**\n * 发布图文\n */\nasync function publishDynamic(\n    cookies: string,\n    uin: number | undefined,\n    fingerPrintDeviceId: string,\n    aId: string,\n    proxyHttp: Http,\n    confParams: {\n        token: string;\n        enverionment: \"development\" | \"production\";\n        articleId: string | undefined;\n        accountId: number | undefined;\n        uid: string | undefined;\n        postId: string | undefined;\n        eip: string | undefined;\n    },\n    params: {\n        title: string;\n        content: string;\n        images: ImageUploadResult[];\n        finderUsername: string;\n        publishType: string;\n        topic?: string[];\n        collection?: {\n            collectionId: string;\n            collectionName: string;\n        };\n        link?: {\n            urlType: number;\n            link: string;\n            title: string;\n        };\n        address?: {\n            name?: string;\n            latitude?: number;\n            longitude?: number;\n            city?: string;\n            address?: string;\n            uid?: string;\n        };\n        scheduledPublish?: number;\n        music?: MusicInfo; // 添加音乐参数\n    },\n): Promise<PublishResponse> {\n    const topicList = params.topic || [];\n    const location = params.address ? buildLocation(params.address) : {};\n\n    // 构建完整的发布参数\n    const publishData: Record<string, unknown> = {\n        // 系统参数\n        clientid: generateUUID(),\n        timestamp: getTimeStamp(13), // 13位时间戳\n        _log_finder_id: params.finderUsername,\n        _log_finder_uin: \"\",\n        videoClipTaskId: \"\",\n        mode: 1,\n        sence: 7,\n        reqScene: 7,\n        scene: 1,\n        rawKeyBuff: null,\n\n        // 基础定位信息\n        latitude: 0,\n        longitude: 0,\n        feedLongitude: 0,\n        feedLatitude: 0,\n\n        // 发布标记\n        originalFlag: 0,\n        objectType: 7, // 7=图文\n        postFlag: 0,\n        isFullPost: 1,\n        handleFlag: 2,\n\n        // 话题列表\n        topics: topicList,\n\n        // 核心内容对象\n        objectDesc: {\n            description: buildDescription(params.content, topicList),\n            event: {},\n            extReading: {\n                ...params.link,\n                link: params.link?.link?.replace(/[\\s\\u200b]/g, \"\"),\n            },\n            mediaType: 2, // 2=图片\n\n            // 位置信息\n            location: location,\n\n            // 话题信息\n            topic: {},\n\n            // @提及的用户\n            member: {},\n            mentionedUser: [],\n\n            mpTitle: \"\",\n\n            // 媒体列表-图片\n            media: params.images,\n            // 音乐\n            shortTitle: \"\",\n\n            // 富文本描述\n            finderNewlifeDesc: {\n                richTextTitle: params.title,\n                richTextJson: buildRichTextJson(params.title, params.content),\n                fromRichPublisher: 1,\n            },\n        },\n        // traceInfo: { // TODO\n        //     traceKey: \"FPT_1772941976_740477911\",\n        //     uploadCdnEnd: 1772941976,\n        //     uploadCdnStart: 1772941976\n        // }\n    };\n\n    // 定时发布（转为10位时间戳）\n    if (params.scheduledPublish) {\n        publishData.effectiveTime = params.scheduledPublish;\n    }\n\n    const objectDesc = publishData.objectDesc as Record<string, unknown>;\n    if (topicList.length) {\n        objectDesc.topic = {\n            finderTopicInfo: buildTopicXml(params.content, topicList),\n        };\n    }\n    if (params.collection) {\n        objectDesc.topic = {\n            ...(typeof objectDesc.topic === \"object\" && objectDesc.topic !== null ? objectDesc.topic : {}),\n            ...params.collection,\n        };\n    }\n\n    // 添加音乐信息（根据源码 Line 51809-51823）\n    if (params.music?.id) {\n        // hotfix 映射值,处理视频号图文音乐无效的问题\n        // bgmSource 2：默认，4：搜索\n        // docType 0/1 0 对应bgmSource 2， 1对应bgmSource 4\n        objectDesc.followPostInfo = {\n            musicInfo: {\n                docId: params.music.id,\n                albumThumbUrl: params.music.image,\n                name: params.music.name,\n                artist: params.music.authorName,\n                mediaStreamingUrl: params.music.url,\n                docType: params.music.raw.bgmSource === 2 ? 0 : 1,\n            },\n            groupId: params.music.id,\n            hasBgm: 1,\n            bgmSource: params.music.raw.bgmSource,\n            bgmQuery: params.music.raw.query || \"\",\n        };\n    }\n\n    // 选择正确的URL\n    const publishUrl =\n        params.publishType === \"1\"\n            ? \"https://channels.weixin.qq.com/cgi-bin/mmfinderassistant-bin/post/post_create\"\n            : \"https://channels.weixin.qq.com/cgi-bin/mmfinderassistant-bin/post/post_draft\";\n\n    // 草稿模式需要包装参数\n    let requestBody: Record<string, unknown>;\n    if (params.publishType === \"2\") {\n        requestBody = {\n            _log_finder_id: params.finderUsername,\n            objectId: null,\n            pluginSessionId: null,\n            postReq: publishData,\n            rawKeyBuff: \"\",\n            scene: 1,\n            timestamp: getTimeStamp(13),\n        };\n    } else {\n        requestBody = publishData;\n    }\n\n    const queryData = {\n        _aid: aId,\n        _rid: rid(),\n        _pageUrl: \"https://channels.weixin.qq.com/micro/content/post/finderNewLifeCreate\",\n    };\n    const queryString = new URLSearchParams(queryData).toString();\n\n    console.log(\"1111111111111111\", JSON.stringify(requestBody));\n\n    const apiResponse = await proxyHttp.api<PublishResponse>({\n        method: \"post\",\n        url: `${publishUrl}?${queryString}`,\n        data: requestBody,\n        headers: {\n            cookie: cookies,\n            referer: \"https://channels.weixin.qq.com/micro/content/post/finderNewLifeCreate\",\n            \"Content-type\": \"application/json\",\n            \"finger-print-device-id\": fingerPrintDeviceId,\n            \"x-wechat-uin\": uin,\n        },\n        defaultErrorMsg: \"发布图文失败\",\n    });\n\n    reportLogger({\n        token: confParams.token || \"\",\n        enverionment: confParams.enverionment || \"development\",\n        postId: confParams.articleId,\n        eip: proxyHttp.proxyInfo,\n        accountId: confParams.accountId,\n        uid: confParams.uid,\n        publishParams: publishData,\n        platform: \"shipinhao\",\n    });\n\n    return apiResponse;\n}\n\nexport const mockAction: PublishAction = async (task, params) => {\n    task.logger.info(\"[shipinhaoPublish] 开始执行视频号发布 - Mock API 方式\");\n    const updateTaskState = task.taskStageStore?.update?.bind(task.taskStageStore, task.taskId || \"\");\n    if (!params.extraParam.fingerPrintDeviceId || !params.extraParam.aId) {\n        return response(400, \"fingerPrintDeviceId和aId 不能为空\", \"\");\n    }\n\n    let currentStep = \"初始化\"; // 追踪当前执行步骤\n\n    try {\n        // 1. 转换 cookies 为字符串\n        currentStep = \"解析认证信息\";\n        const cookieString = params.cookies.map((c) => `${c.name}=${c.value}`).join(\"; \");\n        const fingerPrintDeviceId = params.extraParam.fingerPrintDeviceId;\n        const aId = params.extraParam.aId;\n\n        // 创建 Http 实例\n        const headers = {\n            cookie: cookieString,\n        };\n\n        const args: AxiosProxyParams = [{ headers }, task.logger, params.proxyLoc, params.accountId, \"shipinhao\"];\n\n        const http = new Http({ headers });\n        const proxyHttp = new Http(...args);\n\n        // 2. 验证参数\n        currentStep = \"验证发布参数\";\n        if (!params.banners || params.banners.length === 0) {\n            return response(400, \"至少需要一张图片\", \"\");\n        }\n\n        // 限制图片数量，并确保只包含字符串路径\n        const images = params.banners.slice(0, 18).filter((img: unknown) => typeof img === \"string\") as string[];\n\n        // 3. 获取用户信息\n        currentStep = \"获取用户信息\";\n        task.logger.info(\"[shipinhaoPublish] 获取用户信息...\");\n        console.log(\"cookieString\", cookieString);\n        const userInfo = await getUserInfo(cookieString, http);\n\n        console.log(JSON.stringify(userInfo));\n        if (userInfo.errCode !== 0 || !userInfo.data?.finderUser) {\n            const errorMsg =\n                userInfo.errCode === 300334 || userInfo.errCode === 300333\n                    ? \"登录失效\"\n                    : userInfo.errMsg || \"获取用户信息失败\";\n            return response(userInfo.errCode || 500, errorMsg, \"\");\n        }\n\n        const finderUsername = userInfo.data.finderUser.finderUsername;\n        console.log(finderUsername);\n        // 4. 获取上传认证密钥\n        currentStep = \"获取上传认证密钥\";\n        task.logger.info(\"[shipinhaoPublish] 获取上传认证密钥...\");\n        const authKeyResponse = await getUploadAuthKey(cookieString, finderUsername, http);\n\n        if (authKeyResponse.errCode !== 0 || !authKeyResponse.data?.authKey) {\n            return response(authKeyResponse.errCode || 500, `获取上传认证参数失败: ${authKeyResponse.errMsg}`, \"\");\n        }\n\n        const authKey = authKeyResponse.data.authKey;\n        const uin = authKeyResponse.data.uin;\n\n        if (!uin) {\n            return response(500, \"获取用户 uin 失败\", \"\");\n        }\n\n        const taskId = String(generateUUID());\n\n        // 5. 上传图片\n        currentStep = \"上传图片\";\n        task.logger.info(`[shipinhaoPublish] 开始上传 ${images.length} 张图片...`);\n        const uploadedImages: ImageUploadResult[] = [];\n\n        for (let i = 0; i < images.length; i++) {\n            currentStep = `上传图片 ${i + 1}/${images.length}`;\n            task.logger.info(`[shipinhaoPublish] ${currentStep}...`);\n\n            const uploadResult = await uploadImageComplete(images[i], taskId, finderUsername, uin, authKey, http);\n            console.log(JSON.stringify(uploadResult));\n            if (!uploadResult.DownloadURL) {\n                return response(500, `图片上传失败: ${uploadResult.errMsg}`, \"\");\n            }\n\n            uploadedImages.push({\n                url: `https://finder.video.qq.com${uploadResult.DownloadURL.split(\"qq.com\")[1] || \"\"}`,\n                md5sum: uploadResult.md5 || \"\",\n                fileSize: uploadResult.fileSize || 0,\n                thumbUrl: uploadResult.DownloadURL,\n                fullThumbUrl: uploadResult.DownloadURL,\n                width: uploadResult.width || 0,\n                height: uploadResult.height || 0,\n                mediaType: 2,\n                videoPlayLen: 0,\n                urlCdnTaskId: \"\",\n            });\n        }\n\n        // 6. 发布图文\n        currentStep = \"发布图文内容\";\n        task.logger.info(\"[shipinhaoPublish] 正在发布...\");\n\n        // 转换话题格式：从对象数组提取 name 字段\n        const topicNames = params.topic || undefined;\n\n        // 转换位置格式\n        const addressInfo = params.address\n            ? {\n                  name: params.address.name,\n                  latitude: params.address.latitude,\n                  longitude: params.address.longitude,\n                  city: params.address.city_name,\n                  address: params.address.address,\n                  uid: params.address.poi_id,\n              }\n            : undefined;\n\n        let publishResult: PublishResponse;\n        try {\n            publishResult = await publishDynamic(\n                cookieString,\n                uin,\n                fingerPrintDeviceId,\n                aId,\n                proxyHttp,\n                {\n                    token: params.huiwenToken || \"\",\n                    enverionment: task.enverionment || \"development\",\n                    articleId: params.articleId,\n                    postId: params.articleId,\n                    eip: proxyHttp.proxyInfo,\n                    accountId: params.accountId,\n                    uid: params.uid,\n                },\n                {\n                    title: params.title,\n                    content: params.content,\n                    images: uploadedImages,\n                    finderUsername,\n                    publishType: params.publishType || \"1\",\n                    topic: topicNames,\n                    link: params.link,\n                    address: addressInfo,\n                    collection: params.collection,\n                    scheduledPublish: params.scheduledPublish,\n                    music: params.music, // 传递音乐参数\n                },\n            );\n        } catch (error) {\n            const handledError = Http.handleApiError(error);\n            // 代理连接超时(599) 与网络/服务端错误(500/502/503/504)：重试耗尽后直接返回分类文案，\n            // 不再 throw 走 executeAction 的 RPA 兜底。code 归一为 414，使 executeAction 视为终止结果。\n            const classified = classifyPublishError(handledError);\n            if (classified) {\n                // 用户侧只给分类文案，原始错误信息记进日志；debug 模式下追加代理信息便于排查\n                const message = `${classified.userMessage}${task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n                task.logger.error(\n                    `[shipinhaoPublish] ${classified.category}，直接返回: ${handledError.message} (code=${handledError.code})`,\n                    stringifyError(handledError),\n                );\n                await updateTaskState?.({\n                    state: TaskState.FAILED,\n                    error: message,\n                });\n                return { code: 414, data: \"\", message };\n            }\n            // 其它错误码维持原有逻辑，抛出以便上层 executeAction 走 RPA 兜底\n            throw error;\n        }\n\n        task.logger.info(`[shipinhaoPublish] publishResult: ${JSON.stringify(publishResult)} `);\n\n        // 7. 处理发布结果\n        const resultCode = publishResult.data?.baseResp?.errcode ?? publishResult.errCode;\n        const resultMsg = publishResult.data?.baseResp?.errmsg ?? publishResult.errMsg;\n\n        if (resultCode === 0) {\n            task.logger.info(\"[shipinhaoPublish] 发布成功\");\n            const publishId = extractEncFileKey(uploadedImages[0]?.thumbUrl);\n            await updateTaskState?.({\n                state: TaskState.SUCCESS,\n                result: {\n                    response: resultMsg,\n                },\n            });\n            return response(0, \"发布成功\", publishId);\n        }\n\n        // 处理特殊错误码\n        let errorMessage = resultMsg;\n        if (resultCode === -11224) {\n            errorMessage = \"视频号管理员完成实名且绑定手机号后才可以发表\";\n        } else if (resultCode === 300333 || resultCode === 300334) {\n            errorMessage = \"登录失效\";\n        } else if (resultCode === 300330) {\n            errorMessage = \"未登录\";\n        } else if (resultCode === 300002) {\n            errorMessage = \"官方平台在校验音乐/位置/定时信息时失败了，请重新编辑后发布\";\n        }\n\n        task.logger.error(`[shipinhaoPublish] 发布失败: ${errorMessage}`);\n        await updateTaskState?.({\n            state: TaskState.FAILED,\n            error: errorMessage,\n        });\n        return response(resultCode || 500, errorMessage, \"\");\n    } catch (error) {\n        // 使用 Http.handleApiError 规范化错误，保留错误码和结构化信息\n        const handledError = Http.handleApiError(error);\n\n        // 构造详细的错误消息\n        const errorMsg = handledError.message || \"发布失败，请稍后重试\";\n        const errorCode = handledError.code || 500;\n\n        // 记录完整的错误信息（包括堆栈和额外上下文）\n        task.logger.error(`[shipinhaoPublish] 发布流程异常: ${errorMsg}`, stringifyError(error), handledError.extra);\n\n        // 更新任务状态\n        await updateTaskState?.({\n            state: TaskState.FAILED,\n            error: errorMsg,\n        });\n\n        return response(errorCode, errorMsg, \"\");\n    }\n};\n","import path from \"node:path\";\nimport type { Locator, Response } from \"@iflyrpa/share\";\nimport { downloadImage, getFilenameFromUrl, response, success } from \"@iflyrpa/share\";\nimport { TimeFormatter } from \"../../utils\";\nimport type { PublishAction } from \"./index\";\n\n/**\n * 视频号发布 - RPA 方式\n * 通过浏览器自动化实现视频号内容发布\n */\nexport const rpaAction: PublishAction = async (task, params) => {\n    task.logger.info(\"开始微信视频号发布（RPA 模式）\");\n\n    const tmpCachePath = task.getTmpPath();\n\n    const page = await task.createPage({\n        url: \"https://channels.weixin.qq.com/platform/post/finderNewLifeCreate\",\n        show: task.debug,\n        cookies: params.cookies,\n    });\n\n    try {\n        const waitForElement = async (selector: string, timeout = 10000): Promise<Locator | null> => {\n            try {\n                const element = page.locator(selector);\n                await element.waitFor({ state: \"visible\", timeout });\n                return element;\n            } catch {\n                task.logger.warn(`元素未找到: ${selector}`);\n                return null;\n            }\n        };\n\n        // 重试执行\n        const retryAction = async <T>(action: () => Promise<T>, maxRetries = 3, delay = 1000): Promise<T> => {\n            let lastError: Error | undefined;\n            for (let i = 0; i < maxRetries; i++) {\n                try {\n                    return await action();\n                } catch (error) {\n                    lastError = error as Error;\n                    task.logger.warn(`重试 ${i + 1}/${maxRetries}: ${lastError.message}`);\n                    if (i < maxRetries - 1) {\n                        await page.waitForTimeout(delay);\n                    }\n                }\n            }\n            throw lastError;\n        };\n\n        // 页面初始化\n\n        task.logger.info(\"等待页面加载...\");\n\n        // 检查登录状态\n        task.logger.info(\"检查登录状态...\");\n\n        // 打印当前 URL 和页面标题\n        if (task.debug) {\n            task.logger.info(`当前页面 URL: ${page.url()}`);\n            const title = await page.title();\n            task.logger.info(`页面标题: ${title}`);\n        }\n\n        try {\n            await page.waitForSelector(\".post-edit-wrap\", { state: \"visible\", timeout: 10000 });\n            task.logger.info(\"✓ 登录状态正常，找到编辑器容器\");\n        } catch {\n            task.logger.error(\"✗ 未找到编辑器，可能登录失效\");\n            return { code: 414, message: \"登录失效或页面加载异常\", data: page.url() };\n        }\n\n        task.logger.info(\"页面加载完成，开始填充内容\");\n\n        // 上传图片\n        if (params.banners && params.banners.length > 0) {\n            task.logger.info(`开始上传 ${params.banners.length} 张图片`);\n\n            await retryAction(async () => {\n                // 下载图片到本地\n                const images = await Promise.all(\n                    params.banners.map((url) => {\n                        const fileName = getFilenameFromUrl(url);\n                        return downloadImage(url, path.join(tmpCachePath, fileName));\n                    }),\n                );\n\n                // 根据实际 HTML 结构，文件上传输入框在 .ant-upload-btn 内\n                // 使用 page.locator 直接定位隐藏的 input，不需要等待可见性\n                const uploadSelectors = [\n                    '.ant-upload-btn input[type=\"file\"]',\n                    '.upload input[type=\"file\"][accept*=\"image\"]',\n                    '.upload-wrap input[type=\"file\"]',\n                    'input[type=\"file\"][accept*=\"image\"]',\n                ];\n\n                let uploadInput: Locator | null = null;\n\n                // 调试：打印当前页面所有的 file input\n                if (task.debug) {\n                    const allFileInputs = await page.locator('input[type=\"file\"]').count();\n                    task.logger.info(`页面中共找到 ${allFileInputs} 个文件上传输入框`);\n\n                    // 打印页面 URL 确认是否在正确页面\n                    task.logger.info(`当前页面 URL: ${page.url()}`);\n                }\n\n                for (const selector of uploadSelectors) {\n                    const input = page.locator(selector);\n                    const count = await input.count();\n                    if (count > 0) {\n                        uploadInput = input.first();\n                        task.logger.info(`找到上传输入框: ${selector}`);\n                        break;\n                    }\n                }\n\n                if (!uploadInput) {\n                    // 如果还是找不到，尝试等待更长时间后再找一次\n                    task.logger.warn(\"未找到上传输入框，等待 3 秒后重试...\");\n                    await page.waitForTimeout(3000);\n\n                    // 直接查找任意 file input（不检查可见性）\n                    const anyFileInput = page.locator('input[type=\"file\"]');\n                    const inputCount = await anyFileInput.count();\n\n                    if (inputCount > 0) {\n                        uploadInput = anyFileInput.first();\n                        task.logger.info(`找到文件输入框（共 ${inputCount} 个）`);\n                    } else {\n                        // 截图以便调试\n                        if (task.debug) {\n                            const screenshotPath = path.join(tmpCachePath, `upload-error-${Date.now()}.png`);\n                            await page.screenshot({ path: screenshotPath, fullPage: true });\n                            task.logger.error(`未找到上传输入框，已截图保存至: ${screenshotPath}`);\n                        }\n                        throw new Error(\"未找到图片上传输入框\");\n                    }\n                }\n\n                // 上传文件\n                await uploadInput.setInputFiles(images);\n                task.logger.info(`图片上传成功: ${images.length} 张`);\n\n                // 等待图片处理\n                await page.waitForTimeout(3000);\n            });\n        }\n\n        // 填写标题\n        if (params.title) {\n            task.logger.info(`填写标题: ${params.title}`);\n            await retryAction(async () => {\n                const titleInput = await waitForElement('input[placeholder*=\"填写标题\"]', 10000);\n\n                if (!titleInput) {\n                    throw new Error(\"未找到标题输入框\");\n                }\n\n                await titleInput.click();\n                // 先清空（重试时避免重复）\n                await titleInput.clear({ timeout: 3000 });\n                await titleInput.fill(params.title, { timeout: 5000 });\n                task.logger.info(\"标题填写完成\");\n            });\n        }\n\n        // 填写描述和话题\n        if (params.content) {\n            task.logger.info(\"填写描述和话题\");\n            await retryAction(async () => {\n                const descEditor = await waitForElement(\".input-editor\", 10000);\n                if (!descEditor) {\n                    throw new Error(\"未找到描述编辑器\");\n                }\n                await descEditor.click();\n                await page.waitForTimeout(500);\n\n                // 清空编辑器内容（重试时避免重复输入）\n                await descEditor.evaluate((el) => {\n                    el.textContent = \"\";\n                });\n                await page.waitForTimeout(300);\n                task.logger.info(\"已清空编辑器内容\");\n\n                // 模拟用户逐字输入，触发富文本编辑器的话题识别\n                await descEditor.pressSequentially(params.content, { delay: 10 }); // delay 设置输入延迟，模拟真实输入\n                await page.waitForTimeout(500);\n\n                task.logger.info(\"内容填写完成\");\n            });\n        }\n\n        //  选择地点\n        if (params.address?.poi_id) {\n            task.logger.info(`选择地点: ${params.address.name}`);\n            const instance = page.locator(\".position-display-wrap\");\n            await instance.click();\n            await page.waitForTimeout(1000);\n            await page\n                .locator(\".location-filter-wrap input\")\n                .fill(params.address?.name || params.address?.address || params.address?.city_name);\n            await page.waitForTimeout(2000);\n            const poperInstance = page.locator(\".location-filter-wrap .common-option-list-wrap .option-item\");\n            await poperInstance.nth(1).waitFor(); // 等待第二个元素出现\n            await poperInstance.nth(1).click(); // 点击第二个元素（索引从0开始，1是第二个）\n            task.logger.info(\"地点选择完成\");\n        }\n\n        // 选择合集\n        if (params.collection) {\n            task.logger.info(`选择合集: ${params.collection.collectionName}`);\n            const instanceCollection = page.locator(\".post-album-display-wrap\");\n            await instanceCollection.click();\n            await page.waitForTimeout(1000);\n            page.locator(\".post-album-wrap .option-item\")\n                .filter({ hasText: params.collection.collectionName })\n                .first()\n                .click({ force: true });\n        }\n\n        // 填写链接\n        if (params.link) {\n            const instanceLink = page.locator(\".link-display-wrap\");\n            await instanceLink.first().click();\n            task.logger.info(`添加链接: ${params.link.link}`);\n            await page.waitForTimeout(500);\n            const linkTypeName = params.link.urlType === 1 ? \"公众号文章\" : \"红包封面\";\n            page.locator(\".post-link-wrap .link-list-options .link-option-item\")\n                .filter({ hasText: linkTypeName })\n                .first()\n                .click({ force: true });\n            await waitForElement(\".link-input-wrap\", 3000);\n            const linkInput = page.locator('.link-input-wrap input[type=\"text\"]');\n            await linkInput.first().fill(params.link.link);\n        }\n\n        // 选择音乐\n        if (params.music) {\n            task.logger.info(`添加背景音乐: ${params.music.name}`);\n            const musicFormItem = page.locator(\".post-with-link\").filter({ hasText: \"音乐\" });\n            const musicDisplayWrap = musicFormItem.locator(\".link-display-wrap\").first();\n            await musicDisplayWrap.click();\n            const searchInput = musicFormItem.locator('.weui-desktop-search input[type=\"text\"]').first();\n            const searchTxt = `${params.music.name} - ${params.music.authorName}`;\n            await searchInput.fill(searchTxt); // 等待填充完成\n            await page.waitForTimeout(300); // 等待输入稳定\n            await searchInput.press(\"Enter\");\n            await page.waitForTimeout(2000);\n            const bgmItemWrap = musicFormItem\n                .locator(\".bgm-item-wrap\") // .song-info .title\n                .filter({ hasText: searchTxt })\n                .first();\n            await bgmItemWrap.hover();\n            await page.waitForTimeout(500);\n            await bgmItemWrap.locator(\".selected-icon\").first().click({ force: true });\n        }\n\n        //  定时发布\n        if (!params.isImmediatelyPublish && params.scheduledPublish) {\n            task.logger.info(\"设置定时发布\");\n            const timingRadio = page\n                .locator(\".weui-desktop-form__check-content\")\n                .filter({ hasNotText: \"不定时\" })\n                .first();\n            await timingRadio.click();\n            await page.waitForTimeout(500);\n            const instance = page.locator('.weui-desktop-picker__date input[placeholder*=\"请选择发表时间\"]');\n            await instance.click();\n            const dateD = TimeFormatter.format(params.scheduledPublish, \"d\");\n            const nowMonth = TimeFormatter.format(Date.now(), \"MM月\");\n            const nowMonthText = TimeFormatter.format(Date.now(), \"M月\");\n            const month = TimeFormatter.format(params.scheduledPublish, \"MM月\");\n            const monthLocator = await page\n                .locator(\"weui-desktop-picker__panel__label\")\n                .filter({ hasText: month })\n                .first();\n            if (!monthLocator) {\n                await page.locator(\".weui-desktop-picker__panel__label\").filter({ hasText: nowMonth }).first().click();\n                await page.waitForTimeout(500);\n                await page\n                    .locator(\".weui-desktop-picker__table-row td a\")\n                    .filter({ hasText: nowMonthText })\n                    .first()\n                    .click();\n            }\n            await page.waitForTimeout(500);\n            await page.locator(\".weui-desktop-picker__table-row td a\").filter({ hasText: dateD }).first().click();\n\n            await page\n                .locator(\".weui-desktop-form__input-wrp input[placeholder*='请选择时间']\")\n                .fill(TimeFormatter.format(params.scheduledPublish, \"hh:mm\"));\n            await page.locator(\"i.weui-desktop-icon__time\").click();\n            // 关闭弹出框\n            await page.locator(\".post-time-wrap .form-item .label\").filter({ hasText: \"发表时间\" }).click();\n        }\n\n        task.logger.info(\"准备发布...\");\n        await page.waitForTimeout(300);\n\n        let articleId = \"\";\n        let message = \"\";\n        // 定义响应处理函数\n        const handleResponse = async (response: Response) => {\n            const url = response.url();\n            if (url.includes(\"/post/post_create\") || url.includes(\"/post/post_draft\")) {\n                const jsonResponse = await response.json();\n                page.off(\"response\", handleResponse);\n                articleId = jsonResponse.object?.id || jsonResponse.data?.objectId || \"\";\n                message = jsonResponse?.errMsg || \"\";\n            }\n        };\n\n        // 开始监听响应事件\n        page.on(\"response\", handleResponse);\n        task._timerRecord.PrePublish = Date.now();\n\n        // 点击发布按钮\n        const publishText = params.publishType === \"1\" ? \"发表\" : \"保存草稿\";\n        await page.locator(\".form-btns .weui-desktop-btn\").filter({ hasText: publishText }).first().click();\n        task.logger.info(\"已点击发布按钮，等待响应...\");\n\n        // 关闭页面\n        await page.close();\n        return success(articleId, message || \"发布成功\");\n    } catch (error) {\n        const errorMsg = error instanceof Error ? error.message : String(error);\n        task.logger.error(`微信视频号发布失败: ${errorMsg}`);\n        return response(500, `微信视频号发布失败: ${errorMsg}`, \"\");\n    }\n};\n","import path from \"node:path\";\nimport { downloadImage, getFilenameFromUrl, Locator, Response, success, TaskState } from \"@iflyrpa/share\";\nimport { Page } from \"playwright-core\";\nimport { MockPublish } from \"../../types\";\nimport { TimeFormatter } from \"../../utils\";\nimport { ProxyAgent } from \"../../utils/proxy\";\nimport type { PublishAction } from \"./index\";\n\nexport const rpaAction_Server: PublishAction = async (task, params) => {\n    task.logger.info(\"开始微信视频号发布（Server 模式）\");\n    const defaultPage = task.steelBrowserContext?.pages()[0];\n    if (defaultPage) {\n        // 如果 route 已经注册过，就不重复注册\n        if (!(defaultPage as any)._routeRegistered) {\n            (defaultPage as any)._routeRegistered = true;\n\n            const blockedPatterns = [\"**/apm-fe.weixin.com*\", \"**/t2.weixin.com*\"].map(\n                (pattern) => new RegExp(pattern.replace(/\\*\\*/g, \".*\").replace(/\\*/g, \"[^/]*\")),\n            );\n\n            await defaultPage.route(\"**/*\", async (route) => {\n                const req = route.request();\n                const url = req.url();\n\n                // 是否命中屏蔽规则\n                const blocked = blockedPatterns.some((regex) => regex.test(url));\n                if (!blocked) {\n                    return route.continue();\n                }\n\n                if (req.method() === \"OPTIONS\") {\n                    console.log(\"处理 OPTIONS 预检：\", url);\n                    await route.fulfill({\n                        status: 204,\n                        headers: {\n                            \"access-control-allow-origin\": \"*\",\n                            \"access-control-allow-methods\": \"GET,POST,OPTIONS,PUT,DELETE\",\n                            \"access-control-allow-headers\": \"*\",\n                        },\n                        body: \"\",\n                    });\n                    return;\n                }\n\n                await route.fulfill({\n                    status: 204,\n                    body: \"\",\n                });\n            });\n        }\n    }\n\n    const tmpCachePath = task.getTmpPath();\n    task.logger?.info(\"==>进入RPA操作：任务开始,下载图片开始...\");\n    const updateTaskState = task.taskStageStore?.update?.bind(task.taskStageStore, task.taskId || \"\");\n    const imagePromise = Promise.all(\n        params.banners.map((url) => {\n            const fileName = getFilenameFromUrl(url);\n            return downloadImage(url, path.join(tmpCachePath, fileName));\n        }),\n    );\n\n    let proxyUrl: string | undefined;\n    if (params.proxyLoc) {\n        task.logger?.info(`==> 开始获取代理信息：${params}`);\n        const ProxyAgentResult = await ProxyAgent({ logger: task.logger }, params.proxyLoc, params.accountId);\n        task.logger?.info(\"==> 代理信息获取成功！\");\n        proxyUrl = ProxyAgentResult ? `http://${ProxyAgentResult.ip}:${ProxyAgentResult.port}` : undefined;\n    }\n\n    task.logger?.info(\"==>开始打开视频号页面...\");\n    const page = await task.createPage({\n        show: task.debug,\n        cookies: params.cookies,\n        proxyUrl,\n        url: params.url || \"https://channels.weixin.qq.com/platform/post/finderNewLifeCreate\",\n        ...(params.viewport ? { viewport: params.viewport } : {}),\n    });\n    task.logger?.info(\"==>视频号页面打开成功\");\n    console.log(task.steelConnector?.getLive(task.sessionId || \"\"));\n    await updateTaskState?.({\n        state: TaskState.ACTION,\n        connectAddress: task.steelConnector?.getProxyUrl(task.sessionId || \"\", \"v1/sessions/debug\"),\n        sessionId: task.sessionId,\n    });\n\n    const clickTimeout = 1000 * 10;\n\n    // 自动化脚本\n    // ----------------------------------------------------------------------------------\n\n    // 等待登录成功\n    try {\n        await page.waitForSelector(\".post-edit-wrap\", { state: \"visible\", timeout: 10000 });\n        task.logger?.info(\"✓ 登录状态正常，找到编辑器容器\");\n    } catch (error) {\n        task.logger?.error(\"✗ 未找到编辑器，可能登录失效\");\n        return { code: 414, message: \"登录失效或页面加载异常\", data: page.url() };\n    }\n\n    // 获取待上传图片的本地路径\n    const images = await imagePromise;\n\n    task.logger?.info(`==>图片下载完成，共 ${images.length} 张，开始上传图片...`);\n\n    // 上传图片\n    const uploadSelectors = [\n        '.ant-upload-btn input[type=\"file\"]',\n        '.upload input[type=\"file\"][accept*=\"image\"]',\n        '.upload-wrap input[type=\"file\"]',\n        'input[type=\"file\"][accept*=\"image\"]',\n    ];\n\n    let uploadInput: Locator | null = null;\n\n    for (const selector of uploadSelectors) {\n        const input = page.locator(selector);\n        const count = await input.count();\n        if (count > 0) {\n            uploadInput = input.first();\n            task.logger?.info(`找到上传输入框: ${selector}`);\n            break;\n        }\n    }\n\n    if (!uploadInput) {\n        task.logger?.warn(\"未找到上传输入框，等待 3 秒后重试...\");\n        await page.waitForTimeout(3000);\n\n        const anyFileInput = page.locator('input[type=\"file\"]');\n        const inputCount = await anyFileInput.count();\n\n        if (inputCount > 0) {\n            uploadInput = anyFileInput.first();\n            task.logger?.info(`找到文件输入框（共 ${inputCount} 个）`);\n        } else {\n            if (task.debug) {\n                const screenshotPath = path.join(tmpCachePath, `upload-error-${Date.now()}.png`);\n                await page.screenshot({ path: screenshotPath, fullPage: true });\n                task.logger?.error(`未找到上传输入框，已截图保存至: ${screenshotPath}`);\n            }\n            throw new Error(\"未找到图片上传输入框\");\n        }\n    }\n\n    await uploadInput.setInputFiles(images, { timeout: 60 * 1000 });\n    task.logger?.info(`==>图片上传完成: ${images.length} 张`);\n\n    // 等待图片处理\n    await page.waitForTimeout(3000);\n\n    // 填写标题\n    if (params.title) {\n        task.logger?.info(`填写标题: ${params.title}`);\n        const titleInput = page.locator('input[placeholder*=\"填写标题\"]');\n        await titleInput.waitFor({ state: \"visible\", timeout: clickTimeout });\n        await titleInput.click({ timeout: clickTimeout });\n        await titleInput.clear({ timeout: 3000 });\n        await titleInput.fill(params.title, { timeout: 5000 });\n        task.logger?.info(\"==>标题填写完成\");\n    }\n\n    // 填写描述和话题\n    if (params.content) {\n        task.logger?.info(\"填写描述和话题\");\n        const descEditor = page.locator(\".input-editor\");\n        await descEditor.waitFor({ state: \"visible\", timeout: clickTimeout });\n        await descEditor.click({ timeout: clickTimeout });\n        await page.waitForTimeout(500);\n\n        // 清空编辑器内容\n        await descEditor.evaluate((el) => {\n            el.textContent = \"\";\n        });\n        await page.waitForTimeout(300);\n        task.logger?.info(\"已清空编辑器内容\");\n\n        // 模拟用户逐字输入，触发富文本编辑器的话题识别\n        await descEditor.pressSequentially(params.content, { delay: 10 });\n        await page.waitForTimeout(500);\n\n        task.logger?.info(\"==>内容填写完成\");\n    }\n\n    // 选择地点\n    if (params.address?.poi_id) {\n        task.logger?.info(`选择地点: ${params.address.name}`);\n        const positionDisplayWrap = page.locator(\".position-display-wrap\");\n        await positionDisplayWrap.click({ timeout: clickTimeout });\n        await page.waitForTimeout(1000);\n        await page\n            .locator(\".location-filter-wrap input\")\n            .fill(params.address?.name || params.address?.address || params.address?.city_name);\n        await page.waitForTimeout(2000);\n        const poperInstance = page.locator(\".location-filter-wrap .common-option-list-wrap .option-item\");\n        await poperInstance.nth(1).waitFor();\n        await poperInstance.nth(1).click({ timeout: clickTimeout });\n        task.logger?.info(\"==>地点选择完成\");\n    }\n\n    // 选择合集\n    if (params.collection) {\n        task.logger?.info(`选择合集: ${params.collection.collectionName}`);\n        const instanceCollection = page.locator(\".post-album-display-wrap\");\n        await instanceCollection.click({ timeout: clickTimeout });\n        await page.waitForTimeout(1000);\n        await page\n            .locator(\".post-album-wrap .option-item\")\n            .filter({ hasText: params.collection.collectionName })\n            .first()\n            .click({ force: true });\n        task.logger?.info(\"==>合集选择完成\");\n    }\n\n    // 填写链接\n    if (params.link) {\n        task.logger?.info(`添加链接: ${params.link.link}`);\n        const instanceLink = page.locator(\".link-display-wrap\");\n        await instanceLink.first().click({ timeout: clickTimeout });\n        await page.waitForTimeout(500);\n        const linkTypeName = params.link.urlType === 1 ? \"公众号文章\" : \"红包封面\";\n        await page\n            .locator(\".post-link-wrap .link-list-options .link-option-item\")\n            .filter({ hasText: linkTypeName })\n            .first()\n            .click({ force: true });\n        await page.waitForSelector(\".link-input-wrap\", { state: \"visible\", timeout: 3000 });\n        const linkInput = page.locator('.link-input-wrap input[type=\"text\"]');\n        await linkInput.first().fill(params.link.link);\n        task.logger?.info(\"==>链接添加完成\");\n    }\n\n    // 选择音乐\n    if (params.music) {\n        task.logger?.info(`添加背景音乐: ${params.music.name}`);\n        const musicFormItem = page.locator(\".post-with-link\").filter({ hasText: \"音乐\" });\n        const musicDisplayWrap = musicFormItem.locator(\".link-display-wrap\").first();\n        await musicDisplayWrap.click({ timeout: clickTimeout });\n        const searchInput = musicFormItem.locator('.weui-desktop-search input[type=\"text\"]').first();\n        const searchTxt = `${params.music.name} - ${params.music.authorName}`;\n        await searchInput.fill(searchTxt);\n        await page.waitForTimeout(300);\n        await searchInput.press(\"Enter\");\n        await page.waitForTimeout(2000);\n        const bgmItemWrap = musicFormItem.locator(\".bgm-item-wrap\").filter({ hasText: searchTxt }).first();\n        await bgmItemWrap.hover();\n        await page.waitForTimeout(500);\n        await bgmItemWrap.locator(\".selected-icon\").first().click({ force: true });\n        task.logger?.info(\"==>背景音乐添加完成\");\n    }\n\n    // 定时发布\n    if (!params.isImmediatelyPublish && params.scheduledPublish) {\n        task.logger?.info(\"设置定时发布\");\n        const timingRadio = page.locator(\".weui-desktop-form__check-content\").filter({ hasNotText: \"不定时\" }).first();\n        await timingRadio.click({ timeout: clickTimeout });\n        await page.waitForTimeout(500);\n        const dateInput = page.locator('.weui-desktop-picker__date input[placeholder*=\"请选择发表时间\"]');\n        await dateInput.click({ timeout: clickTimeout });\n\n        const dateD = TimeFormatter.format(params.scheduledPublish, \"d\");\n        const nowMonth = TimeFormatter.format(Date.now(), \"MM月\");\n        const nowMonthText = TimeFormatter.format(Date.now(), \"M月\");\n        const month = TimeFormatter.format(params.scheduledPublish, \"MM月\");\n\n        const monthLocator = page.locator(\"weui-desktop-picker__panel__label\").filter({ hasText: month }).first();\n        const monthCount = await monthLocator.count();\n\n        if (monthCount === 0) {\n            await page\n                .locator(\".weui-desktop-picker__panel__label\")\n                .filter({ hasText: nowMonth })\n                .first()\n                .click({ timeout: clickTimeout });\n            await page.waitForTimeout(500);\n            await page\n                .locator(\".weui-desktop-picker__table-row td a\")\n                .filter({ hasText: nowMonthText })\n                .first()\n                .click({ timeout: clickTimeout });\n        }\n        await page.waitForTimeout(500);\n        await page\n            .locator(\".weui-desktop-picker__table-row td a\")\n            .filter({ hasText: dateD })\n            .first()\n            .click({ timeout: clickTimeout });\n\n        await page\n            .locator(\".weui-desktop-form__input-wrp input[placeholder*='请选择时间']\")\n            .fill(TimeFormatter.format(params.scheduledPublish, \"hh:mm\"));\n        await page.locator(\"i.weui-desktop-icon__time\").click({ timeout: clickTimeout });\n\n        // 关闭弹出框\n        await page\n            .locator(\".post-time-wrap .form-item .label\")\n            .filter({ hasText: \"发表时间\" })\n            .click({ timeout: clickTimeout });\n        task.logger?.info(\"==>定时发布设置完成\");\n    }\n\n    task.logger?.info(\"准备发布...\");\n    await page.waitForTimeout(300);\n\n    if (MockPublish) {\n        const message = \"视频号模拟发布成功\";\n        const data = \"123456789\";\n\n        await updateTaskState?.({\n            state: TaskState.SUCCESS,\n            result: {\n                response: data,\n            },\n        });\n        return success(data, message);\n    }\n\n    const publishResponse = await new Promise<{\n        success: boolean;\n        msg: string;\n        data?: { id: string; objectId: string };\n    }>((resolve) => {\n        // 定义响应处理函数\n        const handleResponse = async (response: Response) => {\n            const url = response.url();\n            if (url.includes(\"/post/post_create\") || url.includes(\"/post/post_draft\")) {\n                const jsonResponse = await response.json();\n                page.off(\"response\", handleResponse);\n\n                const articleId = jsonResponse.object?.id || jsonResponse.data?.objectId || \"\";\n                const message = jsonResponse?.errMsg || \"\";\n                const errCode = jsonResponse.data?.baseResp?.errcode ?? jsonResponse.errCode;\n\n                if (errCode === 0) {\n                    resolve({\n                        success: true,\n                        msg: message || \"发布成功\",\n                        data: { id: articleId, objectId: articleId },\n                    });\n                } else {\n                    let errorMessage = message;\n                    if (errCode === -11224) {\n                        errorMessage = \"视频号管理员完成实名且绑定手机号后才可以发表\";\n                    } else if (errCode === 300333 || errCode === 300334) {\n                        errorMessage = \"登录失效\";\n                    } else if (errCode === 300330) {\n                        errorMessage = \"未登录\";\n                    } else if (errCode === 300002) {\n                        errorMessage = \"官方平台在校验音乐/位置/定时信息时失败了，请重新编辑后发布\";\n                    }\n                    resolve({ success: false, msg: errorMessage });\n                }\n            }\n        };\n\n        // 开始监听响应事件\n        page.on(\"response\", handleResponse);\n\n        // task._timerRecord.PrePublish = Date.now();\n\n        // 点击发布按钮\n        const publishText = params.publishType === \"1\" ? \"发表\" : \"保存草稿\";\n        page.locator(\".form-btns .weui-desktop-btn\")\n            .filter({ hasText: publishText })\n            .first()\n            .click({ timeout: clickTimeout });\n\n        // 添加整体超时保护\n        setTimeout(() => {\n            page.off(\"response\", handleResponse);\n            resolve({ success: false, msg: \"发布超时\" });\n        }, 10000);\n    });\n\n    if (!publishResponse?.success) {\n        const msg = `发布失败：${publishResponse?.msg || \"未知错误\"}`;\n        await updateTaskState?.({\n            state: TaskState.FAILED,\n            error: msg,\n        });\n        await page.close();\n        return { code: 414, message: msg, data: \"\" };\n    }\n\n    await updateTaskState?.({\n        state: TaskState.SUCCESS,\n        result: {\n            response: publishResponse?.data?.id || \"\",\n        },\n    });\n\n    // 关闭页面\n    await page.close();\n    return success(publishResponse?.data?.id || \"\", publishResponse?.msg || \"发布成功\");\n};\n","import type { CommonAction } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport { ActionCommonParamsSchema } from \"../../types\";\nimport { executeAction } from \"../../utils\";\nimport { mockAction } from \"./mock\";\nimport { rpaAction } from \"./rpa\";\nimport { rpaAction_Server } from \"./rpa-server\";\n\nexport const ShipinhaoPublishParamsSchema = ActionCommonParamsSchema.extend({\n    title: z.string(), // 标题\n    content: z.string(), // 正文\n    banners: z.array(z.string()), // 图片URL字符串数组\n    topic: z.array(z.string()).optional(), // 话题\n    address: z\n        .object({\n            poi_id: z.string(), // uid\n            name: z.string().optional(), // name\n            address: z.string().optional(), // fullAddress\n            latitude: z.number(),\n            longitude: z.number(),\n            city_name: z.string(), // city\n        })\n        .optional(), // 位置，不显示位置则不传此参数\n    link: z\n        .object({\n            // 链接\n            urlType: z.number(), // 公众号文章 1 红包封面 2\n            link: z.string(),\n            title: z.string(), // 链接校验成功时data中的返回值title\n        })\n        .optional(),\n    collection: z\n        .object({\n            // 合集\n            collectionId: z.string(), // 合集id\n            collectionName: z.string(), //合集名称\n        })\n        .optional(),\n    music: z\n        .object({\n            id: z.string(), // musicSid 或 playableInfo.listenId\n            name: z.string(), // playableInfo.title\n            image: z.string(), // playableInfo.cover\n            authorName: z.string(), // playableInfo.author\n            url: z.string(), // url\n            raw: z.object({\n                playableInfo: z.object({\n                    type: z.number(), // playableInfo.type\n                }),\n                bgmSource: z.number(), // BGM来源 搜索-4 推荐-2 其他-1\n                query: z.string().optional(), // 搜索查询的字符串\n            }),\n        })\n        .optional(), // 音乐信息\n    proxyLoc: z.string().optional(), // 代理位置\n    localIP: z.string().optional(), // 用户ip\n    isImmediatelyPublish: z.boolean().optional(), // 是否立即发布\n    scheduledPublish: z.number().optional(), // 定时发布时间，时间戳类型 10位数字\n    publishType: z.enum([\"1\", \"2\"]).optional(), // 发布类型 1：发布 2：同步\n});\n\nexport type ShipinhaoPublishParams = z.infer<typeof ShipinhaoPublishParamsSchema>;\n\nexport type PublishAction = CommonAction<ShipinhaoPublishParams, string>;\n\nexport const shipinhaoPublish: PublishAction = async (task, params) => {\n    task.logger.info(`shipinhaoPublish actionType: ${params.actionType}`);\n    if (params.actionType === \"rpa\") {\n        return rpaAction(task, params);\n    }\n\n    if (params.actionType === \"mockApi\") {\n        return mockAction(task, params);\n    }\n\n    if (params.actionType === \"server\") {\n        return rpaAction_Server(task, params);\n    }\n\n    return executeAction(mockAction, rpaAction_Server)(task, params);\n};\n","import { Http } from \"../http\";\n\n/**\n * 视频号上传认证信息\n *\n * 说明：本文件的两个接口调用逻辑从 actions/shipinhaoPublish/mock.ts 抽取而来，\n * 该流程已在图文发布链路中实测可用，视频上传复用同一套认证。\n */\nexport interface ShipinhaoUploadAuth {\n    /** 微信号数字 uin，上传接口 X-Arguments 中的 weixinnum */\n    uin: number;\n    /** 上传接口 Authorization 头 */\n    authKey: string;\n    /** finderUsername，发布接口 _log_finder_id 使用 */\n    finderUsername: string;\n    /** 视频 filetype（服务端下发，实测 20302） */\n    videoFileType: number;\n    /** 图片/封面 filetype（服务端下发，实测 20304） */\n    pictureFileType: number;\n}\n\ninterface UserInfoResponse {\n    errCode: number;\n    errMsg: string;\n    data?: {\n        finderUser?: {\n            uin: number;\n            finderUsername: string;\n            nickname?: string;\n        };\n    };\n}\n\ninterface UploadAuthKeyResponse {\n    errCode: number;\n    errMsg: string;\n    data?: {\n        authKey: string;\n        uin?: number;\n        videoFileType?: number;\n        pictureFileType?: number;\n    };\n}\n\n/** 获取 13 位时间戳 */\nfunction getTimeStamp(length: number): string {\n    return Date.now().toString().substring(0, length);\n}\n\n/**\n * 获取用户信息（拿 finderUsername）\n */\nasync function getUserInfo(cookies: string, http: Http): Promise<UserInfoResponse> {\n    return http.api<UserInfoResponse>({\n        method: \"post\",\n        url: \"https://channels.weixin.qq.com/cgi-bin/mmfinderassistant-bin/auth/auth_data\",\n        data: {\n            timestamp: getTimeStamp(13),\n            _log_finder_uin: \"\",\n            _log_finder_id: \"\",\n            rawKeyBuff: null,\n            pluginSessionId: null,\n            scene: 7,\n            reqScene: 7,\n        },\n        headers: {\n            cookie: cookies,\n            referer: \"https://channels.weixin.qq.com\",\n            \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36\",\n        },\n        defaultErrorMsg: \"获取用户信息失败\",\n    });\n}\n\n/**\n * 获取上传认证密钥（拿 authKey 与 uin）\n */\nasync function getUploadAuthKey(cookies: string, finderUsername: string, http: Http): Promise<UploadAuthKeyResponse> {\n    return http.api<UploadAuthKeyResponse>({\n        method: \"post\",\n        url: \"https://channels.weixin.qq.com/cgi-bin/mmfinderassistant-bin/helper/helper_upload_params\",\n        data: {\n            timestamp: getTimeStamp(13),\n            _log_finder_id: finderUsername,\n            rawKeyBuff: null,\n        },\n        headers: {\n            cookie: cookies,\n            referer: \"https://channels.weixin.qq.com\",\n            Accept: \"application/json, text/plain, */*\",\n            \"Content-Type\": \"application/json\",\n            \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36\",\n        },\n        defaultErrorMsg: \"获取上传认证密钥失败\",\n    });\n}\n\n/** 认证失败时抛出，携带平台错误码便于上层归类 */\nexport class ShipinhaoAuthError extends Error {\n    constructor(\n        message: string,\n        public readonly errCode: number,\n    ) {\n        super(message);\n        this.name = \"ShipinhaoAuthError\";\n    }\n}\n\n/**\n * 获取视频号上传所需的认证信息\n *\n * @param cookies cookie 字符串（`name=value; name=value` 形式）\n * @param http Http 实例（不走代理即可，认证接口对代理无要求）\n */\nexport async function getShipinhaoUploadAuth(cookies: string, http: Http): Promise<ShipinhaoUploadAuth> {\n    const userInfo = await getUserInfo(cookies, http);\n\n    if (userInfo.errCode !== 0 || !userInfo.data?.finderUser) {\n        const isLoginExpired = userInfo.errCode === 300333 || userInfo.errCode === 300334;\n        throw new ShipinhaoAuthError(\n            isLoginExpired ? \"登录失效\" : userInfo.errMsg || \"获取用户信息失败\",\n            userInfo.errCode || 500,\n        );\n    }\n\n    const finderUsername = userInfo.data.finderUser.finderUsername;\n    const authKeyResponse = await getUploadAuthKey(cookies, finderUsername, http);\n\n    if (authKeyResponse.errCode !== 0 || !authKeyResponse.data?.authKey) {\n        throw new ShipinhaoAuthError(`获取上传认证参数失败: ${authKeyResponse.errMsg}`, authKeyResponse.errCode || 500);\n    }\n\n    const uin = authKeyResponse.data.uin;\n    if (!uin) {\n        throw new ShipinhaoAuthError(\"获取用户 uin 失败\", 500);\n    }\n\n    const videoFileType = authKeyResponse.data.videoFileType || 20302;\n    const pictureFileType = authKeyResponse.data.pictureFileType || 20304;\n\n    return { uin, authKey: authKeyResponse.data.authKey, finderUsername, videoFileType, pictureFileType };\n}\n","/**\n * post_create 发布体构建\n *\n * 字段结构以真实浏览器请求为准（见同目录 real.js，以及\n * scripts/api-explorer/shipinhao-video-upload/dist/network-logs1.json 里捕获的 post_create 请求体）。\n *\n * 两次独立抓包一致的关键点：\n * - 顶层 latitude/longitude/feedLatitude/feedLongitude 恒为 0，真实坐标只写在 objectDesc.location\n * - objectDesc.shortTitle 是数组 `[{ shortTitle }]`，不是字符串\n * - media[].md5sum 填 UUID 而非真实 md5（服务端不校验）\n * - report 里的 width/height/duration/fileSize 是转码**前**的原始视频信息\n */\n\nimport type { ShipinhaoPublishVideoParams } from \"./index\";\n\n/**\n * @用户在 description / mentionedUser 里的尾随分隔符：普通空格 U+0020\n *\n * 与 XML CDATA 里用的 U+2005 不同，两处实测就是两个不同字符，不能统一。\n */\nconst MENTION_TEXT_SUFFIX = \"\\u0020\";\n\n/**\n * @用户在 finderTopicInfo CDATA 里的尾随分隔符：四分之一空格 U+2005\n *\n * 前端编辑器插入 @提及时用的是这个不可断空格，服务端按它切分 @用户片段。\n */\nconst MENTION_XML_SUFFIX = \"\\u2005\";\n\n/** 描述文案中的话题片段：正文 → 话题 → @用户，与前端插入顺序一致 */\nexport function buildDescription(params: {\n    description: string;\n    topics?: string[];\n    mentionedUsers?: Array<{ nickname: string }>;\n}): string {\n    let description = params.description || \"\";\n\n    for (const topic of params.topics || []) {\n        description += `#${topic}`;\n    }\n\n    for (const user of params.mentionedUsers || []) {\n        description += `@${user.nickname}${MENTION_TEXT_SUFFIX}`;\n    }\n\n    return description;\n}\n\n/** mentionedUser[].nickname：实测昵称后带一个普通空格 */\nexport function buildMentionedUser(mentionedUsers?: Array<{ nickname: string }>): Array<{ nickname: string }> {\n    return (mentionedUsers || []).map((user) => ({ nickname: `${user.nickname}${MENTION_TEXT_SUFFIX}` }));\n}\n\n/**\n * 构建 finderTopicInfo XML\n *\n * value 节点按其在文案中出现的顺序排列：正文（非空时）为纯 CDATA，\n * 话题为 `<topic><![CDATA[#name#]]></topic>`（注意首尾都有 #），\n * @用户为 `@nickname` + U+2005 的 CDATA。\n * `<style><at>` 指向第一个 @用户所在的 value 序号，没有 @用户时为空。\n *\n * ⚠️ `description` 传的必须是**原始正文**，不是 buildDescription 拼接后的结果 ——\n * 拼接结果里已经含话题与 @用户，再进 value0 会重复一遍。\n */\nexport function buildTopicXml(params: {\n    description: string;\n    topics?: string[];\n    mentionedUsers?: Array<{ nickname: string }>;\n}): string {\n    const values: string[] = [];\n    let atIndex: number | null = null;\n\n    if (params.description) {\n        values.push(`<![CDATA[${params.description}]]>`);\n    }\n\n    for (const topic of params.topics || []) {\n        values.push(`<topic><![CDATA[#${topic}#]]></topic>`);\n    }\n\n    for (const user of params.mentionedUsers || []) {\n        if (atIndex === null) atIndex = values.length;\n        values.push(`<![CDATA[@${user.nickname}${MENTION_XML_SUFFIX}]]>`);\n    }\n\n    let xml = \"<finder>\";\n    xml += \"<version>1</version>\";\n    xml += `<valuecount>${values.length}</valuecount>`;\n    xml += `<style><at>${atIndex ?? \"\"}</at></style>`;\n    values.forEach((value, index) => {\n        xml += `<value${index}>${value}</value${index}>`;\n    });\n    xml += \"</finder>\";\n\n    return xml;\n}\n\n/** objectDesc.location：无位置时下发全 0 占位，与前端一致 */\nexport function buildLocation(location?: ShipinhaoPublishVideoParams[\"location\"]): Record<string, unknown> {\n    if (!location) {\n        return { latitude: 0, longitude: 0, city: \"\", poiName: \"\", address: \"\", poiClassifyId: \"\" };\n    }\n\n    return {\n        latitude: location.latitude,\n        longitude: location.longitude,\n        city: location.city,\n        poiName: location.poiName || \"\",\n        address: location.address || \"\",\n        poiClassifyId: location.poiClassifyId || \"\",\n    };\n}\n\n/**\n * objectDesc.topic：话题 XML + 合集信息合并在同一对象里\n *\n * `description` 同样要传原始正文，见 buildTopicXml 的说明。\n */\nexport function buildTopic(params: {\n    description: string;\n    topics?: string[];\n    mentionedUsers?: Array<{ nickname: string }>;\n    collection?: ShipinhaoPublishVideoParams[\"collection\"];\n}): Record<string, unknown> {\n    const topic: Record<string, unknown> = {\n        finderTopicInfo: buildTopicXml(params),\n    };\n\n    if (params.collection) {\n        topic.collectionId = params.collection.collectionId;\n        topic.collectionName = params.collection.collectionName;\n    }\n\n    return topic;\n}\n\n/** objectDesc.event：未参与活动时为空对象 */\nexport function buildEvent(event?: ShipinhaoPublishVideoParams[\"event\"]): Record<string, unknown> {\n    if (!event) return {};\n\n    return {\n        eventTopicId: event.eventTopicId,\n        eventName: event.eventName,\n        eventCreatorNickname: event.eventCreatorNickname || \"\",\n    };\n}\n\n/** objectDesc.extReading：无链接时也要带全字段占位（实测前端行为） */\nexport function buildExtReading(link?: ShipinhaoPublishVideoParams[\"link\"]): Record<string, unknown> {\n    if (!link) return { link: \"\", title: \"\", urlType: 1 };\n\n    return {\n        // 链接里的空格与零宽字符会导致校验失败，与图文发布保持同样的清洗\n        link: link.link.replace(/[\\s\\u200b]/g, \"\"),\n        title: link.title,\n        urlType: link.urlType ?? 1,\n    };\n}\n\n/**\n * 顶层 tagInfo：原样透传调用方传入的对象，只补上实时 tagKey\n *\n * tagKey 由服务端每次下发且带时效，必须用当次取到的值，所以这里始终覆盖调用方传的同名字段。\n */\nexport function buildTagInfo(\n    tagInfo: NonNullable<ShipinhaoPublishVideoParams[\"tagInfo\"]>,\n    tagKey: string,\n): Record<string, unknown> {\n    return { ...tagInfo, tagKey };\n}\n","/**\n * 视频号 CDN 上传器（视频 20302 / 封面 20304）\n *\n * 三阶段：applyupload → uploadpart×N → completepart\n * 分片大小 8MB，ETag 用本地 MD5 拼装（服务端 ETag == 分片 MD5 已实测确认）\n * 支持秒传/续传：同 taskid 已传分片服务端保留，不必重传\n *\n * 数据来源：network-logs.json (8/20) + network-logs1.json (8/19)\n */\n\nimport crypto from \"node:crypto\";\nimport fs from \"node:fs\";\nimport type { Http } from \"../../utils/http\";\n\nconst CHUNK_SIZE = 8 * 1024 * 1024; // 8MB\n\n/**\n * 上传超时调优参数\n *\n * 上传对网络远比普通接口敏感：8MB 分片在慢网下几十秒才走完一片，\n * 撞上过短的超时只会触发无意义的重试并把整体时间拖长，\n * 所以三个阶段统一给 3 分钟的宽松上限。每片独立计时，总时长不设上限。\n */\nexport interface UploadTuning {\n    /** 元数据请求（applyupload）超时 */\n    metaTimeout?: number;\n    /** 单分片上传超时 */\n    partTimeout?: number;\n    /** 单分片重试次数（PartNumber + Content-MD5 幂等，重试安全） */\n    partRetries?: number;\n    /** completepart 超时：服务端要落盘拼装整个文件，大视频天然慢 */\n    completeTimeout?: number;\n}\n\n/** 上传三阶段统一超时：3 分钟 */\nconst UPLOAD_STAGE_TIMEOUT = 3 * 60 * 1000;\n\nconst DEFAULT_TUNING = {\n    metaTimeout: UPLOAD_STAGE_TIMEOUT,\n    partTimeout: UPLOAD_STAGE_TIMEOUT,\n    partRetries: 3,\n    completeTimeout: UPLOAD_STAGE_TIMEOUT,\n} as const;\n\nexport interface UploadOptions {\n    filePath: string;\n    /** filetype: 20302=视频, 20304=封面 */\n    fileType: number;\n    uin: number;\n    authKey: string;\n    http: Http;\n    logger?: { info: (msg: string) => void; error: (msg: string, ...args: any[]) => void };\n    /** 超时调优，不传则用 DEFAULT_TUNING */\n    tuning?: UploadTuning;\n}\n\nexport interface UploadResult {\n    /** completepart 返回的 DownloadURL */\n    downloadUrl: string;\n    /** 文件 MD5 */\n    md5: string;\n    fileSize: number;\n}\n\n/**\n * 上传单个文件到视频号 CDN\n *\n * @param opts.filePath 本地文件路径\n * @param opts.fileType 20302=视频 / 20304=封面\n * @param opts.uin weixinnum\n * @param opts.authKey Authorization 头\n */\nexport async function uploadFile(opts: UploadOptions): Promise<UploadResult> {\n    const { filePath, fileType, uin, authKey, http, logger, tuning } = opts;\n\n    const stat = fs.statSync(filePath);\n    const fileSize = stat.size;\n    const fileName = filePath.split(/[\\\\/]/).pop() || \"file\";\n\n    const metaTimeout = tuning?.metaTimeout ?? DEFAULT_TUNING.metaTimeout;\n    const partTimeout = tuning?.partTimeout ?? DEFAULT_TUNING.partTimeout;\n    const partRetries = tuning?.partRetries ?? DEFAULT_TUNING.partRetries;\n    const completeTimeout = tuning?.completeTimeout ?? DEFAULT_TUNING.completeTimeout;\n\n    logger?.info(`[shipinhaoPublishVideo] 开始上传: ${fileName} (${fileSize} B, filetype=${fileType})`);\n    // logger?.info(\n    //     `上传超时策略: 单片 ${partTimeout / 1000}s（重试 ${partRetries} 次）、合并 ${completeTimeout / 1000}s`,\n    // );\n\n    // 计算文件 MD5 用于生成确定性 taskid（秒传/续传关键）\n    const fileMd5 = await computeFileMd5(filePath);\n    const taskId = generateTaskId(fileName, fileSize, fileMd5);\n\n    const baseUrl = \"https://finderassistancea.video.qq.com\";\n    const headers = { Authorization: authKey };\n\n    // 1. applyupload: 申请 UploadID\n    const xArgs = `apptype=251&filetype=${fileType}&weixinnum=${uin}&filekey=${encodeURIComponent(fileName)}&filesize=${fileSize}&taskid=${taskId}&scene=2`;\n\n    const chunkCount = Math.ceil(fileSize / CHUNK_SIZE);\n    const blockPartLength: number[] = [];\n    for (let i = 0; i < chunkCount; i++) {\n        blockPartLength.push(Math.min((i + 1) * CHUNK_SIZE, fileSize));\n    }\n\n    logger?.info(`[shipinhaoPublishVideo] 视频分片: ${chunkCount} 片`);\n    const applyRes = await http.api<{ UploadID: string; ListPartsResult?: any }>(\n        {\n            method: \"PUT\",\n            url: `${baseUrl}/applyuploaddfs`,\n            headers: { ...headers, \"X-Arguments\": xArgs },\n            data: { BlockSum: chunkCount, BlockPartLength: blockPartLength },\n        },\n        { timeout: metaTimeout, retries: 2, retryDelay: 2000 },\n    );\n\n    if (!applyRes.UploadID && !applyRes.ListPartsResult) {\n        throw new Error(\"申请 UploadID 失败: \" + JSON.stringify(applyRes));\n    }\n\n    let uploadId = applyRes.UploadID;\n\n    // 续传检测：如果返回 ListPartsResult，说明分片已部分上传\n    const uploadedParts = new Set<number>();\n    if (applyRes.ListPartsResult) {\n        // logger?.info(\"检测到已上传分片，执行续传\");\n        const parts = Array.isArray(applyRes.ListPartsResult.Part)\n            ? applyRes.ListPartsResult.Part\n            : applyRes.ListPartsResult.Part\n              ? [applyRes.ListPartsResult.Part]\n              : [];\n        for (const p of parts) {\n            uploadedParts.add(p.PartNumber);\n        }\n        // 需要再调一次 applyupload 拿 UploadID\n        const retryRes = await http.api<{ UploadID: string }>(\n            {\n                method: \"PUT\",\n                url: `${baseUrl}/applyuploaddfs`,\n                headers: { ...headers, \"X-Arguments\": xArgs },\n                data: { BlockSum: chunkCount, BlockPartLength: blockPartLength },\n            },\n            { timeout: metaTimeout, retries: 2, retryDelay: 2000 },\n        );\n        uploadId = retryRes.UploadID;\n        if (!uploadId) throw new Error(\"续传获取 UploadID 失败\");\n    }\n\n    // 2. uploadpart: 上传分片（跳过已传）\n    const partInfo: Array<{ PartNumber: number; ETag: string }> = [];\n    const fd = fs.openSync(filePath, \"r\");\n\n    try {\n        for (let i = 0; i < chunkCount; i++) {\n            const partNumber = i + 1;\n\n            // 秒传/续传：从 ListPartsResult 拿 ETag\n            if (uploadedParts.has(partNumber)) {\n                const existing = applyRes.ListPartsResult.Part.find((p: any) => p.PartNumber === partNumber);\n                if (existing) {\n                    partInfo.push({ PartNumber: partNumber, ETag: existing.ETag });\n                    // logger?.info(`分片 ${partNumber}/${chunkCount} 已存在，跳过`);\n                    continue;\n                }\n            }\n\n            const start = i * CHUNK_SIZE;\n            const end = Math.min(start + CHUNK_SIZE, fileSize);\n            const chunkSize = end - start;\n            const chunk = Buffer.alloc(chunkSize);\n            fs.readSync(fd, chunk, 0, chunkSize, start);\n\n            const chunkMd5 = crypto.createHash(\"md5\").update(chunk).digest(\"hex\");\n\n            // uploadpart: scene 改为 0（实测值）\n            const partStart = Date.now();\n            await http.api(\n                {\n                    method: \"PUT\",\n                    url: `${baseUrl}/uploadpartdfs?PartNumber=${partNumber}&UploadID=${encodeURIComponent(uploadId)}`,\n                    headers: {\n                        ...headers,\n                        \"X-Arguments\": xArgs.replace(/scene=2/, \"scene=0\"),\n                        \"Content-MD5\": chunkMd5,\n                    },\n                    data: chunk,\n                },\n                { timeout: partTimeout, retries: partRetries, retryDelay: 2000 },\n            );\n            const partElapsed = Date.now() - partStart;\n            const throughput = Math.round(chunkSize / (partElapsed / 1000));\n\n            // ETag = 分片 MD5（带引号，服务端格式）\n            partInfo.push({ PartNumber: partNumber, ETag: `\"${chunkMd5}\"` });\n            // logger?.info(\n            //     `分片 ${partNumber}/${chunkCount} 完成 (${chunkSize} B, ${partElapsed}ms, ${Math.round(throughput / 1024)}KB/s)`,\n            // );\n        }\n    } finally {\n        fs.closeSync(fd);\n    }\n\n    // 3. completepart: 合并\n    // 不重试：服务端要落盘拼装整个文件，失败重发代价高且拿不到更多信息，给足单次时间更划算\n    // logger?.info(\"合并分片...\");\n    const completeRes = await http.api<{ DownloadURL: string }>(\n        {\n            method: \"POST\",\n            url: `${baseUrl}/completepartuploaddfs?UploadID=${encodeURIComponent(uploadId)}`,\n            headers: { ...headers, \"X-Arguments\": xArgs },\n            data: { TransFlag: \"0_0\", PartInfo: partInfo },\n        },\n        { timeout: completeTimeout, retries: 1, retryDelay: 3000 },\n    );\n\n    if (!completeRes.DownloadURL) {\n        throw new Error(\"合并分片失败: \" + JSON.stringify(completeRes));\n    }\n\n    logger?.info(`[shipinhaoPublishVideo] ${fileName} 上传成功`);\n    return { downloadUrl: completeRes.DownloadURL, md5: fileMd5, fileSize };\n}\n\nasync function computeFileMd5(filePath: string): Promise<string> {\n    return new Promise((resolve, reject) => {\n        const hash = crypto.createHash(\"md5\");\n        const stream = fs.createReadStream(filePath);\n        stream.on(\"data\", (chunk) => hash.update(chunk));\n        stream.on(\"end\", () => resolve(hash.digest(\"hex\")));\n        stream.on(\"error\", reject);\n    });\n}\n\n/** 生成确定性 taskid（基于文件特征，支持秒传） */\nfunction generateTaskId(fileName: string, fileSize: number, fileMd5: string): string {\n    const input = `${fileName}-${fileSize}-${fileMd5}`;\n    return crypto.createHash(\"md5\").update(input).digest(\"hex\").slice(0, 32);\n}\n","/**\n * 从 MP4 文件解析视频元数据（宽高、时长、编码）\n *\n * 算法来源：scripts/api-explorer/shipinhao-video-upload/mp4-parse-poc.mjs\n * 已通过合成样本 8/8 + 真实 Chrome 编码视频交叉验证（见该 PoC）。\n *\n * 只读 ISO BMFF 的 box 头做定位，元数据 box（moov / moof）才单独读进内存，\n * 媒体数据（mdat）直接跳过 —— 实测 78MB 视频只读 14.64KB（占全文 0.018%）。\n * 因此内存占用与文件大小无关，也不受 fs.readFileSync 的 2GiB 上限约束\n * （早先的实现整文件载入，2GB 以上必然抛 RangeError 并被误报成「格式不支持」）。\n * 支持 MP4（ISO base media file format），不支持 AVI/MKV/FLV。\n *\n * 时长按四级回退取值：mvhd → 视频轨 mdhd → stts 累加 → moof/trun 累加。\n * 分片 MP4（fMP4，moov 里带 mvex/trex）的 mvhd/mdhd/stts 全为 0，\n * 真实时长只存在于各 moof 分片中，必须走最后一级才能拿到。\n */\n\nimport fs from \"node:fs\";\n\nexport interface VideoMeta {\n    width: number;\n    height: number;\n    /** 时长（秒，浮点数） */\n    duration: number;\n    /**\n     * 旋转角度（0/90/180/270），手机竖屏视频常为 90\n     *\n     * 仅用于把 tkhd 里的横屏尺寸换算成显示尺寸，不写进发布体。\n     * 由 buildVideoMetaFromParams 组装时恒为 0：浏览器给出的 videoWidth/videoHeight\n     * 已经是应用过旋转的显示尺寸，再换算一次会把宽高交换错。\n     */\n    rotation: number;\n    fileSize: number;\n    /**\n     * 视频轨编码格式（stsd 里的 sample entry fourcc，小写）\n     * H.264 为 avc1/avc3，H.265 为 hvc1/hev1，解析不到时为 null\n     */\n    codec: string | null;\n}\n\n/**\n * 单个元数据 box（moov / moof）的读取上限\n *\n * 8 小时 30fps 的视频，moov 里 stsz/stco 样本表约几十 MB，256MB 足够宽松。\n * 设上限只为防畸形文件声明出荒谬的 box size 导致大额分配。\n */\nconst MAX_METADATA_BOX_SIZE = 256 * 1024 * 1024;\n\n/** 解析过程中累积的轨道信息 */\ninterface TrackInfo {\n    trackId: number;\n    width: number;\n    height: number;\n    rotation: number;\n    handler: string | null;\n    codec: string | null;\n    /** 该轨自己的时间刻度（mdhd.timescale），fMP4 里算分片时长要用它 */\n    timescale: number;\n    /** mdhd.duration，fMP4 为 0 */\n    mdhdDuration: number;\n    /** stts 累加的样本总时长，fMP4 里 stts 为空表故为 0 */\n    sttsDuration: number;\n}\n\n/** 一次解析的可变状态，跨多个 moov/moof 分片累积 */\ninterface ParseState {\n    movie: { timescale: number; duration: number } | null;\n    tracks: TrackInfo[];\n    /** trackId → trex.default_sample_duration，trun 未逐样本给时长时用它兜底 */\n    trexDefaults: Map<number, number>;\n    /** trackId → 各 moof 分片累加的样本时长（该轨 timescale 下） */\n    fragmentDurations: Map<number, number>;\n    /** 当前 traf 的上下文，tfhd 写入、紧随其后的 trun 读取 */\n    trafTrackId: number;\n    trafDefaultSampleDuration: number;\n}\n\n/**\n * 读取一个 box 头，返回类型、总长与头部长度\n *\n * 头部最长 16 字节（size===1 的 64 位 largesize）。返回 null 表示读不到完整头。\n */\nfunction readBoxHeader(\n    fd: number,\n    offset: number,\n    limit: number,\n): { type: string; size: number; headerSize: number } | null {\n    if (offset + 8 > limit) return null;\n\n    const head = Buffer.alloc(16);\n    const read = fs.readSync(fd, head, 0, 16, offset);\n    if (read < 8) return null;\n\n    let size = head.readUInt32BE(0);\n    const type = head.toString(\"latin1\", 4, 8);\n    let headerSize = 8;\n\n    if (size === 1) {\n        if (read < 16) return null;\n        size = head.readUInt32BE(8) * 2 ** 32 + head.readUInt32BE(12);\n        headerSize = 16;\n    } else if (size === 0) {\n        // 「延伸到文件末尾」\n        size = limit - offset;\n    }\n\n    if (size < headerSize || offset + size > limit) return null;\n\n    return { type, size, headerSize };\n}\n\nexport function parseVideoMeta(filePath: string): VideoMeta | null {\n    let fd: number;\n    let fileSize: number;\n    try {\n        fd = fs.openSync(filePath, \"r\");\n    } catch {\n        return null;\n    }\n\n    try {\n        fileSize = fs.fstatSync(fd).size;\n\n        const state: ParseState = {\n            movie: null,\n            tracks: [],\n            trexDefaults: new Map(),\n            fragmentDurations: new Map(),\n            trafTrackId: 0,\n            trafDefaultSampleDuration: 0,\n        };\n\n        // 扫顶层 box：只把 moov / moof 读进内存，mdat 等纯数据 box 靠 size 跳过\n        let offset = 0;\n        while (offset + 8 <= fileSize) {\n            const header = readBoxHeader(fd, offset, fileSize);\n            if (!header) break;\n\n            if (header.type === \"moov\" || header.type === \"moof\") {\n                const bodyLength = header.size - header.headerSize;\n                if (bodyLength > 0 && bodyLength <= MAX_METADATA_BOX_SIZE) {\n                    const body = Buffer.alloc(bodyLength);\n                    const read = fs.readSync(fd, body, 0, bodyLength, offset + header.headerSize);\n                    // moof 的 traf 上下文不跨分片复用，进入前先清掉\n                    state.trafTrackId = 0;\n                    state.trafDefaultSampleDuration = 0;\n                    walkBoxes(body.subarray(0, read), 0, read, state);\n                }\n            }\n\n            offset += header.size;\n        }\n\n        const { movie, tracks } = state;\n        const video = tracks.find((t) => t.handler === \"vide\") || tracks.find((t) => t.width > 0 && t.height > 0);\n        if (!video) return null;\n\n        let { width, height } = video;\n        // 竖屏视频：tkhd 存横屏尺寸，靠变换矩阵判 90/270° 并交换宽高\n        if (video.rotation === 90 || video.rotation === 270) {\n            [width, height] = [height, width];\n        }\n\n        return {\n            width: Math.round(width),\n            height: Math.round(height),\n            duration: resolveDuration(movie, video, state.fragmentDurations),\n            rotation: video.rotation,\n            fileSize,\n            codec: video.codec,\n        };\n    } catch {\n        return null;\n    } finally {\n        try {\n            fs.closeSync(fd);\n        } catch {\n            // 关闭失败无补救手段，忽略\n        }\n    }\n}\n\n/**\n * 递归遍历已载入内存的 box 树（moov / moof 的内容）\n *\n * 与顶层扫描分开：这里的 buf 只含元数据，可以放心随机访问。\n */\nfunction walkBoxes(buf: Buffer, start: number, end: number, state: ParseState): void {\n    let off = start;\n\n    while (off + 8 <= end) {\n        let size = buf.readUInt32BE(off);\n        const type = buf.toString(\"latin1\", off + 4, off + 8);\n        let headerSize = 8;\n\n        if (size === 1) {\n            // 64-bit largesize\n            if (off + 16 > end) break;\n            const hi = buf.readUInt32BE(off + 8);\n            const lo = buf.readUInt32BE(off + 12);\n            size = hi * 2 ** 32 + lo;\n            headerSize = 16;\n        } else if (size === 0) {\n            size = end - off;\n        }\n\n        if (size < headerSize || off + size > end) break;\n\n        const bodyStart = off + headerSize;\n        const bodyEnd = off + size;\n\n        switch (type) {\n            case \"trak\":\n            case \"mdia\":\n            case \"minf\":\n            case \"stbl\":\n            case \"mvex\":\n            case \"traf\":\n                walkBoxes(buf, bodyStart, bodyEnd, state);\n                break;\n            case \"mvhd\":\n                state.movie = parseMvhd(buf, bodyStart, bodyEnd);\n                break;\n            case \"tkhd\":\n                state.tracks.push({\n                    ...parseTkhd(buf, bodyStart, bodyEnd),\n                    handler: null,\n                    codec: null,\n                    timescale: 0,\n                    mdhdDuration: 0,\n                    sttsDuration: 0,\n                });\n                break;\n            case \"mdhd\": {\n                // mdhd 与 tkhd 同属一个 trak，解析顺序上 tkhd 必先入栈\n                const mdhd = parseMvhd(buf, bodyStart, bodyEnd);\n                if (mdhd && state.tracks.length) {\n                    const track = state.tracks[state.tracks.length - 1];\n                    track.timescale = mdhd.timescale;\n                    track.mdhdDuration = mdhd.duration;\n                }\n                break;\n            }\n            case \"hdlr\":\n                if (bodyEnd - bodyStart >= 12 && state.tracks.length) {\n                    state.tracks[state.tracks.length - 1].handler = buf.toString(\n                        \"latin1\",\n                        bodyStart + 8,\n                        bodyStart + 12,\n                    );\n                }\n                break;\n            case \"stsd\": {\n                // version/flags(4) + entry_count(4)，随后每个 entry 为 size(4) + format fourcc(4)\n                const codec = parseStsdCodec(buf, bodyStart, bodyEnd);\n                if (codec && state.tracks.length) state.tracks[state.tracks.length - 1].codec = codec;\n                break;\n            }\n            case \"stts\":\n                if (state.tracks.length) {\n                    state.tracks[state.tracks.length - 1].sttsDuration = parseSttsDuration(buf, bodyStart, bodyEnd);\n                }\n                break;\n            case \"trex\": {\n                // version/flags(4) + track_ID(4) + default_sample_description_index(4)\n                // + default_sample_duration(4) + default_sample_size(4) + default_sample_flags(4)\n                if (bodyStart + 20 > bodyEnd) break;\n                state.trexDefaults.set(buf.readUInt32BE(bodyStart + 4), buf.readUInt32BE(bodyStart + 12));\n                break;\n            }\n            case \"tfhd\": {\n                const tfhd = parseTfhd(buf, bodyStart, bodyEnd);\n                state.trafTrackId = tfhd.trackId;\n                state.trafDefaultSampleDuration =\n                    tfhd.defaultSampleDuration || state.trexDefaults.get(tfhd.trackId) || 0;\n                break;\n            }\n            case \"trun\": {\n                const duration = parseTrunDuration(buf, bodyStart, bodyEnd, state.trafDefaultSampleDuration);\n                state.fragmentDurations.set(\n                    state.trafTrackId,\n                    (state.fragmentDurations.get(state.trafTrackId) || 0) + duration,\n                );\n                break;\n            }\n        }\n\n        off += size;\n    }\n}\n\n/** ISO BMFF 里表示「时长未知」的哨兵值，直播录制/未正常结束的文件常见 */\nconst UNKNOWN_DURATION_32 = 0xffffffff;\n\n/** 时长是否可用：0 表示缺失，0xFFFFFFFF 是「未知」哨兵，都要继续回退 */\nfunction isUsableDuration(duration: number): boolean {\n    return duration > 0 && duration !== UNKNOWN_DURATION_32;\n}\n\n/**\n * 四级回退取时长（秒）\n *\n * 1. mvhd：普通 MP4 走到这一步就够了\n * 2. 视频轨 mdhd：mvhd 缺失/为 0 时的常规兜底\n * 3. stts 样本累加：mdhd.duration 为 0 但样本表完整的文件\n * 4. moof/trun 分片累加：fMP4 唯一带时长的地方（moov 里前三项全为 0）\n *\n * 任一级算出可用值即采用，全都拿不到时返回 0（交服务端判断）。\n * 0xFFFFFFFF 视为「未知」而非真实时长 —— 否则会算出 49.7 天并被时长上限误拦。\n */\nfunction resolveDuration(\n    movie: { timescale: number; duration: number } | null,\n    video: { trackId: number; timescale: number; mdhdDuration: number; sttsDuration: number },\n    fragmentDurations: Map<number, number>,\n): number {\n    if (movie && movie.timescale && isUsableDuration(movie.duration)) {\n        return movie.duration / movie.timescale;\n    }\n\n    if (video.timescale) {\n        if (isUsableDuration(video.mdhdDuration)) return video.mdhdDuration / video.timescale;\n        if (video.sttsDuration > 0) return video.sttsDuration / video.timescale;\n\n        // fMP4：tfhd 的 track_ID 与 tkhd 一致，取不到时退回唯一分片（单轨文件的常见情形）\n        const fragment =\n            fragmentDurations.get(video.trackId) ??\n            (fragmentDurations.size === 1 ? [...fragmentDurations.values()][0] : 0);\n        if (fragment > 0) return fragment / video.timescale;\n    }\n\n    return 0;\n}\n\n/** stts 累加样本时长（该轨 timescale 下），空表返回 0 */\nfunction parseSttsDuration(buf: Buffer, start: number, end: number): number {\n    // version/flags(4) + entry_count(4) + [sample_count(4), sample_delta(4)]*N\n    if (start + 8 > end) return 0;\n    const entryCount = buf.readUInt32BE(start + 4);\n    let total = 0;\n    for (let i = 0; i < entryCount; i++) {\n        const off = start + 8 + i * 8;\n        if (off + 8 > end) break;\n        total += buf.readUInt32BE(off) * buf.readUInt32BE(off + 4);\n    }\n    return total;\n}\n\n/** tfhd：取 track_ID 与可选的 default_sample_duration（flags bit 0x000008） */\nfunction parseTfhd(buf: Buffer, start: number, end: number): { trackId: number; defaultSampleDuration: number } {\n    // version(1) + flags(3) + track_ID(4)，之后按 flags 依次出现可选字段\n    if (start + 8 > end) return { trackId: 0, defaultSampleDuration: 0 };\n\n    const flags = buf.readUIntBE(start + 1, 3);\n    const trackId = buf.readUInt32BE(start + 4);\n    let off = start + 8;\n\n    if (flags & 0x000001) off += 8; // base_data_offset\n    if (flags & 0x000002) off += 4; // sample_description_index\n\n    if (flags & 0x000008 && off + 4 <= end) {\n        return { trackId, defaultSampleDuration: buf.readUInt32BE(off) };\n    }\n\n    return { trackId, defaultSampleDuration: 0 };\n}\n\n/**\n * trun 累加本分片样本时长\n *\n * 优先用逐样本的 sample_duration（flags bit 0x000100）；未给出时按\n * sample_count × defaultSampleDuration（来自 tfhd 或 trex）估算。\n */\nfunction parseTrunDuration(buf: Buffer, start: number, end: number, defaultSampleDuration: number): number {\n    // version(1) + flags(3) + sample_count(4)，之后按 flags 出现可选字段与样本表\n    if (start + 8 > end) return 0;\n\n    const flags = buf.readUIntBE(start + 1, 3);\n    const sampleCount = buf.readUInt32BE(start + 4);\n    let off = start + 8;\n\n    if (flags & 0x000001) off += 4; // data_offset\n    if (flags & 0x000004) off += 4; // first_sample_flags\n\n    const hasDuration = (flags & 0x000100) !== 0;\n    if (!hasDuration) return sampleCount * defaultSampleDuration;\n\n    // 每个样本按 flags 决定字段组合，sample_duration 恒为首个\n    const entrySize =\n        4 +\n        ((flags & 0x000200) !== 0 ? 4 : 0) + // sample_size\n        ((flags & 0x000400) !== 0 ? 4 : 0) + // sample_flags\n        ((flags & 0x000800) !== 0 ? 4 : 0); // sample_composition_time_offset\n\n    let total = 0;\n    for (let i = 0; i < sampleCount; i++) {\n        const entryOff = off + i * entrySize;\n        if (entryOff + 4 > end) break;\n        total += buf.readUInt32BE(entryOff);\n    }\n    return total;\n}\n\n/** 读 stsd 第一个 sample entry 的 fourcc（如 avc1/hvc1），失败返回 null */\nfunction parseStsdCodec(buf: Buffer, start: number, end: number): string | null {\n    // version/flags(4) + entry_count(4) + entry size(4) + fourcc(4)\n    if (start + 16 > end) return null;\n    // entry_count 为 0 时后面没有 sample entry，不能把下一个 box 头当成 fourcc 读\n    if (buf.readUInt32BE(start + 4) === 0) return null;\n    return buf.toString(\"latin1\", start + 12, start + 16).toLowerCase();\n}\n\nfunction parseMvhd(buf: Buffer, start: number, end: number): { timescale: number; duration: number } | null {\n    const version = buf.readUInt8(start);\n    if (version === 1) {\n        if (start + 28 > end) return null;\n        const timescale = buf.readUInt32BE(start + 20);\n        const hi = buf.readUInt32BE(start + 24);\n        const lo = buf.readUInt32BE(start + 28);\n        return { timescale, duration: hi * 2 ** 32 + lo };\n    }\n    if (start + 20 > end) return null;\n    return { timescale: buf.readUInt32BE(start + 12), duration: buf.readUInt32BE(start + 16) };\n}\n\nfunction parseTkhd(\n    buf: Buffer,\n    start: number,\n    end: number,\n): { trackId: number; width: number; height: number; rotation: number } {\n    const version = buf.readUInt8(start);\n    const afterDuration = version === 1 ? 36 : 24;\n    const matrixOff = start + afterDuration + 16;\n    const whOff = matrixOff + 36;\n\n    // track_ID 紧跟创建/修改时间：v0 偏移 12，v1 偏移 20（时间戳为 64 位）\n    const trackIdOff = start + (version === 1 ? 20 : 12);\n    const trackId = trackIdOff + 4 <= end ? buf.readUInt32BE(trackIdOff) : 0;\n\n    if (whOff + 8 > end) return { trackId, width: 0, height: 0, rotation: 0 };\n\n    // 16.16 定点数\n    const width = buf.readUInt32BE(whOff) / 65536;\n    const height = buf.readUInt32BE(whOff + 4) / 65536;\n\n    // 变换矩阵前两个元素判旋转\n    const a = buf.readInt32BE(matrixOff) / 65536;\n    const b = buf.readInt32BE(matrixOff + 4) / 65536;\n    let rotation = 0;\n    if (Math.abs(a) < 0.01 && Math.abs(b - 1) < 0.01) rotation = 90;\n    else if (Math.abs(a + 1) < 0.01 && Math.abs(b) < 0.01) rotation = 180;\n    else if (Math.abs(a) < 0.01 && Math.abs(b + 1) < 0.01) rotation = 270;\n\n    return { trackId, width, height, rotation };\n}\n\n/** 调用方传入的视频元数据（浏览器 <video> + File 侧采集） */\nexport interface VideoMetadataInput {\n    duration: number;\n    width: number;\n    height: number;\n    fileSize: number;\n}\n\n/**\n * 只读视频轨编码格式，不解析其余字段\n *\n * 供「宽高时长由调用方给出，仅编码需要本地确认」的场景使用。\n * 浏览器没有暴露编码格式的 API（canPlayType/MediaCapabilities 只能回答\n * 「给定 MIME 能否播放」，无法反查文件实际编码），所以这一项只能读文件。\n * 走的是同一套分段读，成本是几 KB。\n *\n * @returns fourcc（小写，如 avc1/hvc1），读不到时 null\n */\nexport function parseVideoCodec(filePath: string): string | null {\n    return parseVideoMeta(filePath)?.codec ?? null;\n}\n\n/**\n * 用调用方传入的元数据组装 VideoMeta，编码格式仍从文件读取\n *\n * 宽高时长直接采用传入值：浏览器的 videoWidth/videoHeight 是**已应用旋转**的显示尺寸，\n * 正是发布体需要的值，所以 rotation 固定为 0，不再做二次换算（换算会把竖屏宽高交换错）。\n *\n * codec 读取失败不影响发布 —— validateShipinhaoVideo 对 codec=null 会跳过编码校验，\n * 退化为由服务端判断，与文件解析不出编码时的既有行为一致。\n */\nexport function buildVideoMetaFromParams(filePath: string, metadata: VideoMetadataInput): VideoMeta {\n    return {\n        width: Math.round(metadata.width),\n        height: Math.round(metadata.height),\n        duration: metadata.duration,\n        rotation: 0,\n        fileSize: metadata.fileSize,\n        codec: parseVideoCodec(filePath),\n    };\n}\n","import path from \"node:path\";\nimport type { VideoMeta } from \"./videoMeta\";\n\n/**\n * 视频号视频发布前的本地校验\n *\n * 平台限制：时长 8 小时内、大小不超过 20GB、格式为 MP4/H.264。\n * 在上传前拦截，避免把超限文件传完才被服务端拒绝。\n */\n\n/** 时长上限：8 小时 */\nexport const MAX_DURATION_SECONDS = 8 * 60 * 60;\n/** 大小上限：20GB */\nexport const MAX_FILE_SIZE = 20 * 1024 * 1024 * 1024;\n/** 容器格式白名单 */\nexport const ALLOWED_EXTENSIONS = [\".mp4\"] as const;\n/** 视频轨编码白名单（ISO BMFF sample entry fourcc）：H.264 */\nexport const ALLOWED_CODECS = [\"avc1\", \"avc3\"] as const;\n/** 标题最少字符数（填了才校验） */\nexport const MIN_TITLE_LENGTH = 6;\n/** 标题最多字符数 */\nexport const MAX_TITLE_LENGTH = 16;\n\nfunction formatFileSize(bytes: number): string {\n    if (bytes < 1024 * 1024) {\n        return `${(bytes / 1024).toFixed(2)} KB`;\n    }\n    if (bytes < 1024 * 1024 * 1024) {\n        return `${(bytes / 1024 / 1024).toFixed(2)} MB`;\n    }\n    return `${(bytes / 1024 / 1024 / 1024).toFixed(2)} GB`;\n}\n\nfunction formatDuration(seconds: number): string {\n    const total = Math.round(seconds);\n    const h = Math.floor(total / 3600);\n    const m = Math.floor((total % 3600) / 60);\n    const s = total % 60;\n    if (h > 0) return `${h}小时${m}分${s}秒`;\n    if (m > 0) return `${m}分${s}秒`;\n    return `${s}秒`;\n}\n\n/**\n * 校验视频是否满足视频号限制\n *\n * @param filePath 视频文件路径（用于取扩展名和文件名做提示）\n * @param meta parseVideoMeta 的解析结果\n * @returns 不满足时返回中文错误提示，满足时返回 null\n */\nexport function validateShipinhaoVideo(filePath: string, meta: VideoMeta): string | null {\n    const fileName = path.basename(filePath);\n    const ext = path.extname(fileName).toLowerCase();\n\n    // 1. 容器格式\n    if (!ALLOWED_EXTENSIONS.includes(ext as (typeof ALLOWED_EXTENSIONS)[number])) {\n        return `视频格式不支持：${fileName}。视频号仅支持 MP4/H.264 格式，请转换后重试。`;\n    }\n\n    // 2. 时长\n    if (meta.duration > MAX_DURATION_SECONDS) {\n        return `视频时长超过限制：${fileName}（${formatDuration(meta.duration)}）。视频号视频时长不能超过 8 小时，请剪辑后重试。`;\n    }\n\n    // 3. 文件大小\n    if (meta.fileSize > MAX_FILE_SIZE) {\n        return `视频大小超过限制：${fileName}（${formatFileSize(meta.fileSize)}）。视频号视频不能超过 20GB，请压缩后重试。`;\n    }\n\n    // 4. 编码格式。解析不到 codec 时不拦截，交给服务端判断，避免误伤\n    if (meta.codec && !ALLOWED_CODECS.includes(meta.codec as (typeof ALLOWED_CODECS)[number])) {\n        return `视频编码不支持：${fileName}（${meta.codec}）。视频号仅支持 H.264 编码，请转码后重试。`;\n    }\n\n    return null;\n}\n\n/**\n * 校验标题是否满足视频号限制\n *\n * 标题为可选参数：未传或为空白时不校验；填了就必须在 6-16 个字符之间。\n * 按 Unicode 码点计数，避免 emoji 等字符被算成多个。\n *\n * @param title 标题，可为空\n * @returns 不满足时返回中文错误提示，满足时返回 null\n */\nexport function validateShipinhaoTitle(title?: string): string | null {\n    if (title === undefined) return null;\n\n    const trimmed = title.trim();\n    if (trimmed === \"\") return null;\n\n    const length = [...trimmed].length;\n\n    if (length < MIN_TITLE_LENGTH || length > MAX_TITLE_LENGTH) {\n        return `视频号标题需要在 ${MIN_TITLE_LENGTH}-${MAX_TITLE_LENGTH} 个字符之间，当前 ${length} 个字符，请调整后重试。`;\n    }\n\n    return null;\n}\n","import crypto from \"node:crypto\";\nimport path from \"node:path\";\nimport type { CommonAction, LoggerImplement } from \"@iflyrpa/share\";\nimport { downloadImage, getFilenameFromUrl, response, TaskState } from \"@iflyrpa/share\";\nimport { AxiosProxyParams } from \"../../types\";\nimport { stringifyError } from \"../../utils\";\nimport { classifyPublishError } from \"../../utils/errorMessages\";\nimport { Http } from \"../../utils/http\";\nimport { reportLogger } from \"../../utils/reportLogger\";\nimport { getShipinhaoUploadAuth, type ShipinhaoUploadAuth } from \"../../utils/shipinhao/auth\";\nimport { extractEncFileKey, rid } from \"../../utils/shipinhao/utils\";\nimport type { ShipinhaoPublishVideoParams } from \"./index\";\nimport { buildEvent, buildExtReading, buildLocation, buildMentionedUser, buildTagInfo, buildTopic } from \"./payload\";\nimport { type UploadResult, uploadFile } from \"./uploader\";\nimport { buildVideoMetaFromParams, type VideoMeta } from \"./videoMeta\";\nimport { validateShipinhaoTitle, validateShipinhaoVideo } from \"./videoValidator\";\n\n/** 发布相关接口的来源页，headers.referer 与 query._pageUrl 均取此值 */\nconst POST_CREATE_PAGE_URL = \"https://channels.weixin.qq.com/micro/content/post/create\";\n\n/** 微前端接口前缀（发布链路全部走 /micro/content 下的网关） */\nconst MICRO_CONTENT_BASE = \"https://channels.weixin.qq.com/micro/content/cgi-bin/mmfinderassistant-bin\";\n\n/** 从 extraParam 里取出的浏览器侧标识，缺失时降级为空串（服务端非强校验） */\ninterface ShipinhaoClientContext {\n    /** 会话内固定的 UUID，query._aid */\n    aId: string;\n    /** 设备指纹，header finger-print-device-id */\n    fingerPrintDeviceId: string;\n    /** 微信数字 uin，header x-wechat-uin */\n    uin: string;\n}\n\nfunction resolveClientContext(params: ShipinhaoPublishVideoParams, fallbackUin: number): ShipinhaoClientContext {\n    const extra = (params.extraParam || {}) as Record<string, unknown>;\n    const deviceIdCookie = params.cookies.find(\n        (c) => c.name === \"device_id\" || c.name === \"finger_print_device_id\",\n    )?.value;\n\n    return {\n        aId: typeof extra.aId === \"string\" ? extra.aId : \"\",\n        fingerPrintDeviceId:\n            typeof extra.fingerPrintDeviceId === \"string\" ? extra.fingerPrintDeviceId : deviceIdCookie || \"\",\n        uin: typeof extra.uin === \"string\" ? extra.uin : String(fallbackUin),\n    };\n}\n\n/** 发布链路公共请求头（对齐真实浏览器请求） */\nfunction buildPublishHeaders(cookieString: string, client: ShipinhaoClientContext): Record<string, string> {\n    const headers: Record<string, string> = {\n        cookie: cookieString,\n        referer: POST_CREATE_PAGE_URL,\n        origin: \"https://channels.weixin.qq.com\",\n        \"content-type\": \"application/json\",\n    };\n\n    if (client.fingerPrintDeviceId) headers[\"finger-print-device-id\"] = client.fingerPrintDeviceId;\n    if (client.uin) headers[\"x-wechat-uin\"] = client.uin;\n\n    return headers;\n}\n\n/** 发布链路公共 query：_aid 会话固定、_rid 每请求随机、_pageUrl 来源页 */\nfunction buildPublishQuery(client: ShipinhaoClientContext): Record<string, string> {\n    const query: Record<string, string> = {\n        _rid: rid(),\n        _pageUrl: POST_CREATE_PAGE_URL,\n    };\n\n    if (client.aId) query._aid = client.aId;\n\n    return query;\n}\n\n/** 所有 mmfinderassistant 接口共用的 body 尾部字段 */\nfunction buildCommonBody(finderUsername: string): Record<string, unknown> {\n    return {\n        timestamp: String(Date.now()),\n        _log_finder_uin: \"\",\n        _log_finder_id: finderUsername,\n        rawKeyBuff: \"\",\n        pluginSessionId: null,\n        scene: 7,\n        reqScene: 7,\n    };\n}\n\n/**\n * 视频号视频发布 - Mock API 方式\n * 通过调用视频号助手平台的内部API实现视频发布\n *\n * 核心流程:\n * 1. helper_upload_params 获取认证 + filetype\n * 2. get-finder-post-trace-key 获取 traceKey\n * 3. 上传视频（applyupload → uploadpart×N → completepart）\n * 4. 上传封面（同 3，filetype=20304）：横屏封面必传，竖屏封面按需再传一次\n * 5. post_clip_video 提交转码\n * 6. post_clip_video_result 轮询至 flag=1\n * 7. post_create 发布\n */\n\ninterface TranscodeResult {\n    clipKey: string;\n    url: string;\n    width: number;\n    height: number;\n    duration: number;\n    md5: string;\n    fileSize: string;\n}\n\nexport type PublishVideoAction = CommonAction<ShipinhaoPublishVideoParams, string>;\n\n/** 获取 traceKey（发布体必需） */\nasync function getTraceKey(\n    auth: ShipinhaoUploadAuth,\n    client: ShipinhaoClientContext,\n    http: Http,\n    logger: LoggerImplement,\n): Promise<string> {\n    const res = await http.api<{ errCode: number; data?: { traceKey: string } }>({\n        method: \"POST\",\n        url: `${MICRO_CONTENT_BASE}/post/get-finder-post-trace-key`,\n        params: buildPublishQuery(client),\n        data: {\n            objectId: \"\",\n            ...buildCommonBody(auth.finderUsername),\n        },\n        defaultErrorMsg: \"获取 traceKey 失败\",\n    });\n\n    if (res.errCode !== 0 || !res.data?.traceKey) {\n        logger.error(\"[getTraceKey] 获取失败:\", JSON.stringify(res));\n        throw new Error(`获取 traceKey 失败: ${JSON.stringify(res)}`);\n    }\n\n    return res.data.traceKey;\n}\n\n/**\n * 获取内容声明标注的 tagKey\n *\n * tagKey 由服务端每次下发且带时效（实测形如 `6bd322b86292bee21787555047396788CB7BA97823489`，\n * 中间嵌了 10 位时间戳），不能硬编码或复用。仅在需要声明标注时调用。\n * 拿不到 tagKey 时返回 null，由调用方决定是否降级为不带 tagInfo 发布。\n */\nasync function getObjectTagKey(\n    auth: ShipinhaoUploadAuth,\n    client: ShipinhaoClientContext,\n    http: Http,\n    logger: LoggerImplement,\n): Promise<string | null> {\n    try {\n        const res = await http.api<{\n            errCode: number;\n            data?: { tagKey?: string; tags?: Array<{ tagType: number; tagName: string }> };\n        }>({\n            method: \"POST\",\n            url: `${MICRO_CONTENT_BASE}/post/finder_get_object_tag_list`,\n            params: buildPublishQuery(client),\n            data: {\n                source: 1,\n                ...buildCommonBody(auth.finderUsername),\n            },\n            defaultErrorMsg: \"获取内容声明标注失败\",\n        });\n\n        if (res.errCode !== 0 || !res.data?.tagKey) {\n            logger.warn(`[getObjectTagKey] 未取到 tagKey: ${JSON.stringify(res)}`);\n            return null;\n        }\n\n        return res.data.tagKey;\n    } catch (error) {\n        logger.warn(`[getObjectTagKey] 获取 tagKey 异常: ${stringifyError(error)}`);\n        return null;\n    }\n}\n\n/** 提交转码并轮询至完成 */\nasync function submitAndPollTranscode(opts: {\n    videoUrl: string;\n    videoMeta: VideoMeta;\n    traceKey: string;\n    uploadStartTime: number;\n    uploadEndTime: number;\n    finderUsername: string;\n    client: ShipinhaoClientContext;\n    http: Http;\n    logger: LoggerImplement;\n}): Promise<TranscodeResult> {\n    const { videoUrl, videoMeta, traceKey, uploadStartTime, uploadEndTime, finderUsername, client, http, logger } =\n        opts;\n\n    // 域名替换：wxapp.tc.qq.com → finder.video.qq.com（实测前端行为）\n    const finderUrl = videoUrl.includes(\"wxapp.tc.qq.com\")\n        ? `https://finder.video.qq.com${videoUrl.split(\"qq.com\")[1]}`\n        : videoUrl;\n\n    logger.info(\n        `[submitAndPollTranscode] 视频尺寸: ${videoMeta.width}x${videoMeta.height}, 时长: ${videoMeta.duration}s`,\n    );\n\n    const submitRes = await http.api<{ errCode: number; data?: { clipKey: string; draftId: string } }>({\n        method: \"POST\",\n        url: `${MICRO_CONTENT_BASE}/post/post_clip_video`,\n        params: buildPublishQuery(client),\n        data: {\n            url: finderUrl,\n            timeStart: 0,\n            cropDuration: 0,\n            height: videoMeta.height,\n            width: videoMeta.width,\n            x: 0,\n            y: 0,\n            clipOriginVideoInfo: {\n                width: videoMeta.width,\n                height: videoMeta.height,\n                duration: videoMeta.duration,\n                fileSize: videoMeta.fileSize,\n            },\n            traceInfo: {\n                traceKey,\n                uploadCdnStart: uploadStartTime,\n                uploadCdnEnd: uploadEndTime,\n            },\n            targetWidth: videoMeta.width,\n            targetHeight: videoMeta.height,\n            type: 4,\n            useAstraThumbCover: 1,\n            ...buildCommonBody(finderUsername),\n        },\n        defaultErrorMsg: \"提交转码失败\",\n    });\n\n    if (submitRes.errCode !== 0 || !submitRes.data?.clipKey) {\n        logger.error(\"[submitAndPollTranscode] 提交转码失败:\", JSON.stringify(submitRes));\n        throw new Error(`提交转码失败: ${JSON.stringify(submitRes)}`);\n    }\n\n    const { clipKey, draftId } = submitRes.data;\n\n    // 轮询转码结果：转码耗时与视频时长正相关，固定 5min 会误杀长视频。\n    // 按「视频时长 × 1.5 + 5min 基线」估算上限，并封顶 30min（平台侧再慢就是异常了）。\n    const pollInterval = 5000;\n    const pollBudget = Math.min(30 * 60 * 1000, 5 * 60 * 1000 + Math.ceil(videoMeta.duration * 1.5) * 1000);\n    const maxPolls = Math.ceil(pollBudget / pollInterval);\n    let pollCount = 0;\n\n    while (pollCount < maxPolls) {\n        await sleep(pollInterval);\n        pollCount++;\n\n        const pollRes = await http.api<{\n            errCode: number;\n            data?: {\n                flag: number;\n                url?: string;\n                width?: number;\n                height?: number;\n                duration?: number;\n                md5?: string;\n                fileSize?: string;\n            };\n        }>(\n            {\n                method: \"POST\",\n                url: `${MICRO_CONTENT_BASE}/post/post_clip_video_result`,\n                params: buildPublishQuery(client),\n                data: {\n                    clipKey,\n                    draftId,\n                    ...buildCommonBody(finderUsername),\n                },\n                defaultErrorMsg: \"转码轮询失败\",\n            },\n            { timeout: 60_000, retries: 2, retryDelay: 3000 },\n        );\n\n        if (pollRes.errCode !== 0) {\n            logger.error(`[submitAndPollTranscode] 转码轮询失败 (poll ${pollCount}):`, JSON.stringify(pollRes));\n            throw new Error(`转码轮询失败 (poll ${pollCount}): ${JSON.stringify(pollRes)}`);\n        }\n\n        const { flag, url, width, height, duration, md5, fileSize } = pollRes.data || {};\n\n        if (flag === 1) {\n            // 转码完成\n            if (!url || !width || !height || !duration || !md5 || !fileSize) {\n                logger.error(\"[submitAndPollTranscode] 转码完成但返回数据不完整:\", JSON.stringify(pollRes.data));\n                throw new Error(`转码完成但返回数据不完整: ${JSON.stringify(pollRes.data)}`);\n            }\n            logger.info(`[submitAndPollTranscode] 转码完成! 用时: ${(pollCount * pollInterval) / 1000}s`);\n            return { clipKey, url, width, height, duration, md5, fileSize };\n        } else if (flag === 2) {\n            // 处理中\n        } else {\n            // 未知状态，视为失败\n            logger.error(`[submitAndPollTranscode] 转码失败，未知 flag=${flag}:`, JSON.stringify(pollRes.data));\n            throw new Error(`转码失败，未知 flag=${flag}: ${JSON.stringify(pollRes.data)}`);\n        }\n    }\n\n    logger.error(\n        `[submitAndPollTranscode] 转码超时，已轮询 ${maxPolls} 次，用时: ${(maxPolls * pollInterval) / 1000}s`,\n    );\n    throw new Error(`转码超时 (${(maxPolls * pollInterval) / 1000}s)`);\n}\n\n/** 发布视频 */\nasync function publishVideo(opts: {\n    params: ShipinhaoPublishVideoParams;\n    auth: ShipinhaoUploadAuth;\n    client: ShipinhaoClientContext;\n    clipResult: TranscodeResult;\n    videoUpload: UploadResult;\n    /** 横屏封面上传结果 → thumbUrl / fullThumbUrl */\n    coverUpload: UploadResult;\n    /** 竖屏封面上传结果 → coverUrl / fullCoverUrl / shareCoverUrl */\n    verticalCoverUpload: UploadResult;\n    videoMeta: VideoMeta;\n    traceKey: string;\n    /** 内容声明 tagKey，未声明标注时为 null */\n    tagKey: string | null;\n    uploadStartTime: number;\n    uploadEndTime: number;\n    proxyHttp: Http;\n    logger: LoggerImplement;\n}): Promise<{ errCode: number; data?: { baseResp: { errcode: number; errmsg: string } } }> {\n    const {\n        params,\n        auth,\n        client,\n        clipResult,\n        videoUpload,\n        coverUpload,\n        verticalCoverUpload,\n        videoMeta,\n        traceKey,\n        tagKey,\n        uploadStartTime,\n        uploadEndTime,\n        proxyHttp,\n        logger,\n    } = opts;\n\n    // 域名替换封面 URL：上传返回 wxapp.tc.qq.com，发布体里要换成 finder.video.qq.com\n    const toFinderUrl = (url: string) =>\n        url.includes(\"wxapp.tc.qq.com\") ? `https://finder.video.qq.com${url.split(\"qq.com\")[1]}` : url;\n\n    // 横屏封面 → thumbUrl / fullThumbUrl\n    const thumbFinderUrl = toFinderUrl(coverUpload.downloadUrl);\n    // 竖屏封面 → coverUrl / fullCoverUrl / shareCoverUrl（未传竖屏封面时与横屏同图）\n    const coverFinderUrl = toFinderUrl(verticalCoverUpload.downloadUrl);\n\n    // 生成 UUID 作为 md5sum（实测行为，服务端不校验）\n    const md5sumUuid = crypto.randomUUID();\n\n    const description = params.description;\n\n    const objectDesc: Record<string, unknown> = {\n        mpTitle: \"\",\n        description,\n        extReading: buildExtReading(params.link),\n        mediaType: 4,\n        location: buildLocation(params.location),\n        // 注意传原始文案而非拼接后的 description：\n        // finderTopicInfo 的 value0 只放正文，话题与 @用户各占独立 value 节点\n        topic: buildTopic({\n            description: params.description,\n            topics: params.topics,\n            mentionedUsers: params.mentionedUsers,\n            collection: params.collection,\n        }),\n        event: buildEvent(params.event),\n        mentionedUser: buildMentionedUser(params.mentionedUsers),\n        media: [\n            {\n                url: clipResult.url,\n                fileSize: clipResult.fileSize,\n                // 横屏封面\n                thumbUrl: thumbFinderUrl,\n                fullThumbUrl: thumbFinderUrl,\n                // 竖屏封面（未传 verticalCoverPath 时与横屏同图）\n                coverUrl: coverFinderUrl,\n                fullCoverUrl: coverFinderUrl,\n                shareCoverUrl: coverFinderUrl,\n                mediaType: 4,\n                videoPlayLen: Math.round(clipResult.duration),\n                width: clipResult.width,\n                height: clipResult.height,\n                // md5sum 实测填 UUID 而非真实 md5，服务端不校验\n                md5sum: md5sumUuid,\n                cardShowStyle: 2,\n                urlCdnTaskId: clipResult.clipKey,\n            },\n        ],\n        // shortTitle 是数组结构，不是字符串（实测）\n        shortTitle: params.title ? [{ shortTitle: params.title }] : [],\n        member: {},\n    };\n\n    const publishData: Record<string, unknown> = {\n        objectType: 0,\n        // 顶层坐标实测恒为 0，真实坐标只写在 objectDesc.location\n        longitude: 0,\n        latitude: 0,\n        feedLongitude: 0,\n        feedLatitude: 0,\n        originalFlag: params.originalFlag ?? 0,\n        topics: params.topics || [],\n        isFullPost: 1,\n        handleFlag: 2,\n        videoClipTaskId: clipResult.clipKey,\n        traceInfo: {\n            traceKey,\n            uploadCdnStart: uploadStartTime,\n            uploadCdnEnd: uploadEndTime,\n        },\n        objectDesc,\n        report: {\n            clipKey: clipResult.clipKey,\n            draftId: clipResult.clipKey,\n            ...buildCommonBody(auth.finderUsername),\n            // report 是埋点，带的是转码**前**的原始视频信息\n            height: videoMeta.height,\n            width: videoMeta.width,\n            duration: videoMeta.duration,\n            fileSize: videoUpload.fileSize,\n            uploadCost: (uploadEndTime - uploadStartTime) * 1000,\n        },\n        postFlag: 0,\n        mode: 1,\n        clientid: crypto.randomUUID(),\n        ...buildCommonBody(auth.finderUsername),\n    };\n\n    if (params.scheduledTime) {\n        publishData.effectiveTime = params.scheduledTime;\n    }\n\n    // 内容声明标注：调用方传的 tagInfo 原样透传，只补实时 tagKey；缺 tagKey 时整体省略\n    if (params.tagInfo && tagKey) {\n        publishData.tagInfo = buildTagInfo(params.tagInfo, tagKey);\n    }\n\n    const publishRes = await proxyHttp.api<{\n        errCode: number;\n        data?: { baseResp: { errcode: number; errmsg: string } };\n    }>({\n        method: \"POST\",\n        url: `${MICRO_CONTENT_BASE}/post/post_create`,\n        params: buildPublishQuery(client),\n        data: publishData,\n        defaultErrorMsg: \"发布视频失败\",\n    });\n\n    logger.info(\n        `[publishVideo] 发布结果: errCode=${publishRes.errCode}, baseResp.errcode=${publishRes.data?.baseResp?.errcode}`,\n    );\n    return publishRes;\n}\n\nfunction sleep(ms: number): Promise<void> {\n    return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * 把封面路径解析成本地文件路径\n *\n * 第三方传的 coverPath 常常是 OSS 上的 http(s) 地址（见 params.json），\n * 而 uploadFile 走 fs.statSync/openSync 分片读取，只认本地路径，\n * 所以远程地址要先下载到临时目录。本地路径原样返回。\n *\n * @returns 本地文件路径\n */\nasync function resolveLocalCoverPath(\n    coverPath: string,\n    label: string,\n    tmpCachePath: string,\n    logger: LoggerImplement,\n): Promise<string> {\n    if (!/^https?:\\/\\//i.test(coverPath)) return coverPath;\n\n    const fileName = getFilenameFromUrl(coverPath);\n    const savePath = path.join(tmpCachePath, `${Date.now()}-${label}-${fileName}`);\n    await downloadImage(coverPath, savePath);\n    return savePath;\n}\n\nexport const mockAction: PublishVideoAction = async (task, params) => {\n    const updateTaskState = task.taskStageStore?.update?.bind(task.taskStageStore, task.taskId || \"\");\n\n    let currentStep = \"初始化\";\n\n    try {\n        // 1. 转换 cookies 为字符串\n        currentStep = \"解析认证信息\";\n        const cookieString = params.cookies.map((c) => `${c.name}=${c.value}`).join(\"; \");\n\n        // 创建 Http 实例：http 用于认证与 CDN 上传（只需 cookie）\n        const http = new Http({ headers: { cookie: cookieString } });\n\n        // 2. 验证参数\n        currentStep = \"验证发布参数\";\n        if (!params.videoPath) {\n            return response(414, \"视频文件路径不能为空\", \"\");\n        }\n        if (!params.coverPath) {\n            return response(414, \"横屏封面图片路径不能为空\", \"\");\n        }\n\n        // 3. 获取认证 + filetype\n        currentStep = \"获取上传认证\";\n        const auth = await getShipinhaoUploadAuth(cookieString, http);\n\n        // 3.1 组装浏览器侧标识（_aid / finger-print-device-id / x-wechat-uin）\n        // 这三项来自 extraParam，缺失时退化为 cookie 里的 device_id 与 auth 的 uin。\n        const client = resolveClientContext(params, auth.uin);\n\n        const publishHeaders = buildPublishHeaders(cookieString, client);\n        // microHttp 走 /micro/content 网关（traceKey/转码/标注），proxyHttp 用于发布并带代理\n        const microHttp = new Http({ headers: publishHeaders });\n        const args: AxiosProxyParams = [\n            { headers: publishHeaders },\n            task.logger,\n            params.proxyLoc,\n            params.accountId,\n            \"shipinhao\",\n        ];\n        const proxyHttp = new Http(...args);\n\n        // 4. 组装视频元数据：宽高时长用调用方传入值，编码格式从文件分段读取\n        currentStep = \"组装视频元数据\";\n        const videoMeta = buildVideoMetaFromParams(params.videoPath, params.videoMetadata);\n        task.logger.info(\n            `[shipinhaoPublishVideo] 视频: ${videoMeta.width}×${videoMeta.height}, ${videoMeta.duration.toFixed(2)}s, ${(videoMeta.fileSize / 1024 / 1024).toFixed(2)}MB, codec=${videoMeta.codec || \"unknown\"}`,\n        );\n\n        // 4.1 校验平台限制（时长 8 小时 / 大小 20GB / MP4+H.264），上传前拦截\n        currentStep = \"校验视频限制\";\n        const validationError = validateShipinhaoVideo(params.videoPath, videoMeta);\n        if (validationError) {\n            await updateTaskState?.({\n                state: TaskState.FAILED,\n                error: validationError,\n            });\n            return response(414, validationError, \"\");\n        }\n\n        // 4.2 校验标题长度\n        currentStep = \"校验标题\";\n        const titleError = validateShipinhaoTitle(params.title);\n        if (titleError) {\n            await updateTaskState?.({\n                state: TaskState.FAILED,\n                error: titleError,\n            });\n            return response(414, titleError, \"\");\n        }\n\n        // 5. 获取 traceKey\n        currentStep = \"获取 traceKey\";\n        const traceKey = await getTraceKey(auth, client, microHttp, task.logger);\n\n        // 5.1 需要内容声明标注时，取实时 tagKey（带时效，不能缓存复用）\n        let tagKey: string | null = null;\n        if (params.tagInfo) {\n            currentStep = \"获取内容声明 tagKey\";\n            tagKey = await getObjectTagKey(auth, client, microHttp, task.logger);\n        }\n\n        const uploadStartTime = Math.floor(Date.now() / 1000);\n\n        // 6. 上传视频\n        currentStep = \"上传视频\";\n        const videoUpload = await uploadFile({\n            filePath: params.videoPath,\n            fileType: auth.videoFileType,\n            uin: auth.uin,\n            authKey: auth.authKey,\n            http,\n            logger: task.logger,\n            // 视频用默认策略：按文件大小和最低吞吐（32KB/s）反推总预算，单片按 64KB/s 推算超时\n        });\n\n        const uploadEndTime = Math.floor(Date.now() / 1000);\n        task.logger.info(`[shipinhaoPublishVideo] 耗时: ${uploadEndTime - uploadStartTime}s`);\n\n        // 7. 上传横屏封面（thumbUrl / fullThumbUrl）\n        currentStep = \"上传横屏封面\";\n        const localCoverPath = await resolveLocalCoverPath(\n            params.coverPath,\n            \"横屏封面\",\n            task.getTmpPath(),\n            task.logger,\n        );\n        const coverUpload = await uploadFile({\n            filePath: localCoverPath,\n            fileType: auth.pictureFileType,\n            uin: auth.uin,\n            authKey: auth.authKey,\n            http,\n            logger: task.logger,\n            // 封面通常几百 KB，单片 3 分钟超时足够\n        });\n\n        // task.logger.info(`coverUpload :  ${JSON.stringify(coverUpload)}`)\n\n        // 7.1 上传竖屏封面（coverUrl / fullCoverUrl / shareCoverUrl）；不传则与横屏同图\n        let verticalCoverUpload = coverUpload;\n        if (params.verticalCoverPath) {\n            currentStep = \"上传竖屏封面\";\n            const localVerticalPath = await resolveLocalCoverPath(\n                params.verticalCoverPath,\n                \"竖屏封面\",\n                task.getTmpPath(),\n                task.logger,\n            );\n            verticalCoverUpload = await uploadFile({\n                filePath: localVerticalPath,\n                fileType: auth.pictureFileType,\n                uin: auth.uin,\n                authKey: auth.authKey,\n                http,\n                logger: task.logger,\n            });\n        }\n\n        // task.logger.info(`verticalCoverUpload: ${JSON.stringify(verticalCoverUpload)}`)\n\n        // 8. 提交转码\n        currentStep = \"提交转码\";\n        const clipResult = await submitAndPollTranscode({\n            videoUrl: videoUpload.downloadUrl,\n            videoMeta,\n            traceKey,\n            uploadStartTime,\n            uploadEndTime,\n            finderUsername: auth.finderUsername,\n            client,\n            http: microHttp,\n            logger: task.logger,\n        });\n\n        // 9. 发布视频\n        currentStep = \"发布视频\";\n        let publishResult: Awaited<ReturnType<typeof publishVideo>>;\n        try {\n            publishResult = await publishVideo({\n                params,\n                auth,\n                client,\n                clipResult,\n                videoUpload,\n                coverUpload,\n                verticalCoverUpload,\n                videoMeta,\n                traceKey,\n                tagKey,\n                uploadStartTime,\n                uploadEndTime,\n                proxyHttp,\n                logger: task.logger,\n            });\n        } catch (error) {\n            const handledError = Http.handleApiError(error);\n            task.logger.error(\n                `[shipinhaoPublishVideo] 发布请求失败: ${handledError.message}`,\n                stringifyError(handledError),\n            );\n            const classified = classifyPublishError(handledError);\n            if (classified) {\n                const message = `${classified.userMessage}${task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n                await updateTaskState?.({\n                    state: TaskState.FAILED,\n                    error: message,\n                });\n                return { code: 414, data: \"\", message };\n            }\n            throw error;\n        }\n\n        task.logger.info(`[shipinhaoPublishVideo] publishResult: ${JSON.stringify(publishResult)}`);\n\n        // 10. 处理发布结果\n        const resultCode = publishResult.data?.baseResp?.errcode ?? publishResult.errCode;\n        // 服务端只回顶层 errCode（无 baseResp）时不能兜底成“发布成功”，否则失败分支会打出自相矛盾的文案\n        const resultMsg =\n            publishResult.data?.baseResp?.errmsg ??\n            (resultCode === 0 ? \"发布成功\" : `发布失败（errCode=${resultCode}）`);\n\n        if (resultCode === 0) {\n            // 关联 id 取横屏封面的 encfilekey，与图文发布（shipinhaoPublish）保持一致。\n            // 不能用 clipKey：它只是转码任务 id，发布完成后在作品列表里查不到对应记录。\n            const publishId = extractEncFileKey(verticalCoverUpload.downloadUrl);\n            if (!publishId) {\n                task.logger.error(\n                    `[shipinhaoPublishVideo] 封面 DownloadURL 中未解析到 encfilekey，关联 id 为空: ${verticalCoverUpload.downloadUrl}`,\n                );\n            }\n\n            await updateTaskState?.({\n                state: TaskState.SUCCESS,\n                result: {\n                    response: resultMsg,\n                },\n            });\n\n            // 上报日志\n            reportLogger({\n                token: params.huiwenToken || \"\",\n                enverionment: task.enverionment || \"development\",\n                postId: params.articleId,\n                eip: proxyHttp.proxyInfo,\n                accountId: params.accountId,\n                uid: params.uid,\n                publishParams: {\n                    videoPath: params.videoPath,\n                    coverPath: params.coverPath,\n                    verticalCoverPath: params.verticalCoverPath,\n                    title: params.title,\n                    topics: params.topics,\n                    mentionedUsers: params.mentionedUsers,\n                    collection: params.collection,\n                    event: params.event,\n                    link: params.link,\n                    tagInfo: params.tagInfo,\n                    originalFlag: params.originalFlag,\n                    scheduledTime: params.scheduledTime,\n                },\n                platform: \"shipinhao\",\n            });\n\n            return response(0, \"发布成功\", publishId);\n        }\n\n        // 处理特殊错误码\n        let errorMessage = resultMsg;\n        if (resultCode === -11224) {\n            errorMessage = \"视频号管理员完成实名且绑定手机号后才可以发表\";\n        } else if (resultCode === 300333 || resultCode === 300334) {\n            errorMessage = \"登录失效\";\n        } else if (resultCode === 300330) {\n            errorMessage = \"未登录\";\n        } else if (resultCode === 300002) {\n            errorMessage = \"官方平台在校验音乐/位置/定时信息时失败了，请重新编辑后发布\";\n        }\n\n        task.logger.error(`[shipinhaoPublishVideo] 发布失败: ${errorMessage} (errCode=${resultCode})`);\n        await updateTaskState?.({\n            state: TaskState.FAILED,\n            error: errorMessage,\n        });\n        return response(414, errorMessage, \"\");\n    } catch (error) {\n        const handledError = Http.handleApiError(error);\n        const errorMsg = handledError.message || \"发布失败，请稍后重试\";\n\n        task.logger.error(\n            `[shipinhaoPublishVideo] 发布流程异常 [${currentStep}]: ${errorMsg}`,\n            stringifyError(error),\n            handledError.extra,\n        );\n\n        await updateTaskState?.({\n            state: TaskState.FAILED,\n            error: errorMsg,\n        });\n\n        return response(414, errorMsg, \"\");\n    }\n};\n","import path from \"node:path\";\nimport type { Locator, Response } from \"@iflyrpa/share\";\nimport { response, success } from \"@iflyrpa/share\";\nimport { TimeFormatter } from \"../../utils\";\nimport type { PublishVideoAction } from \"./mock\";\nimport { buildDescription } from \"./payload\";\nimport { buildVideoMetaFromParams } from \"./videoMeta\";\nimport { validateShipinhaoTitle, validateShipinhaoVideo } from \"./videoValidator\";\n\n/**\n * 视频号视频发布 - RPA 方式\n * 通过浏览器自动化实现视频号视频发布\n */\nexport const rpaAction: PublishVideoAction = async (task, params) => {\n    task.logger.info(\"开始微信视频号视频发布（RPA 模式）\");\n\n    // 校验平台限制（时长 8 小时 / 大小 20GB / MP4+H.264），开浏览器前先拦截\n    // 宽高时长用调用方传入值，编码格式从文件分段读取\n    const videoMeta = buildVideoMetaFromParams(params.videoPath, params.videoMetadata);\n    task.logger.info(\n        `视频: ${videoMeta.width}×${videoMeta.height}, ${videoMeta.duration.toFixed(2)}s, ${(videoMeta.fileSize / 1024 / 1024).toFixed(2)}MB, codec=${videoMeta.codec || \"unknown\"}`,\n    );\n    if (!videoMeta.codec) {\n        task.logger.warn(\"未能读取视频编码格式，跳过 H.264 预检，交由服务端判断\");\n    }\n\n    const validationError = validateShipinhaoVideo(params.videoPath, videoMeta);\n    if (validationError) {\n        task.logger.error(`视频校验未通过: ${validationError}`);\n        return response(414, validationError, \"\");\n    }\n    task.logger.info(\"视频校验通过\");\n\n    const titleError = validateShipinhaoTitle(params.title);\n    if (titleError) {\n        task.logger.error(`标题校验未通过: ${titleError}`);\n        return response(414, titleError, \"\");\n    }\n\n    // RPA 走页面表单，以下参数没有对应的稳定交互，只在 mockApi 模式生效\n    const unsupported = [\n        params.verticalCoverPath && \"verticalCoverPath\",\n        params.collection && \"collection\",\n        params.originalFlag && \"originalFlag\",\n        params.postWithMemberZoneLink && \"postWithMemberZoneLink\",\n    ].filter(Boolean);\n    if (unsupported.length) {\n        task.logger.warn(`RPA 模式不支持以下参数，将被忽略: ${unsupported.join(\"、\")}；如需生效请使用 mockApi 模式`);\n    }\n\n    // tagInfo 部分支持：tagType=5 暂不支持省市选择，其他类型完全支持\n    if (params.tagInfo && params.tagInfo.tagType === 5) {\n        const shootInfo = (params.tagInfo as any).shootInfo;\n        if (shootInfo && (shootInfo.provinceCode || shootInfo.cityCode)) {\n            task.logger.warn(\"tagInfo.tagType=5 在 RPA 模式下仅支持拍摄时间和国家选择，省市选择需要使用 mockApi 模式\");\n        }\n    }\n\n    const tmpCachePath = task.getTmpPath();\n\n    const page = await task.createPage({\n        url: \"https://channels.weixin.qq.com/platform/post/create\",\n        show: task.debug,\n        cookies: params.cookies,\n    });\n\n    try {\n        const waitForElement = async (selector: string, timeout = 10000): Promise<Locator | null> => {\n            try {\n                const element = page.locator(selector);\n                await element.waitFor({ state: \"visible\", timeout });\n                return element;\n            } catch {\n                task.logger.warn(`元素未找到: ${selector}`);\n                return null;\n            }\n        };\n\n        // 重试执行\n        const retryAction = async <T>(action: () => Promise<T>, maxRetries = 3, delay = 1000): Promise<T> => {\n            let lastError: Error | undefined;\n            for (let i = 0; i < maxRetries; i++) {\n                try {\n                    return await action();\n                } catch (error) {\n                    lastError = error as Error;\n                    task.logger.warn(`重试 ${i + 1}/${maxRetries}: ${lastError.message}`);\n                    if (i < maxRetries - 1) {\n                        await page.waitForTimeout(delay);\n                    }\n                }\n            }\n            throw lastError;\n        };\n\n        task.logger.info(\"等待页面加载...\");\n\n        // 检查登录状态\n        task.logger.info(\"检查登录状态...\");\n\n        if (task.debug) {\n            task.logger.info(`当前页面 URL: ${page.url()}`);\n            const title = await page.title();\n            task.logger.info(`页面标题: ${title}`);\n        }\n\n        try {\n            await page.waitForSelector(\".post-edit-wrap\", { state: \"visible\", timeout: 30_000 });\n            task.logger.info(\"✓ 登录状态正常，找到编辑器容器\");\n        } catch {\n            task.logger.error(\"✗ 未找到编辑器，可能登录失效\");\n            return { code: 414, message: \"登录失效或页面加载异常\", data: page.url() };\n        }\n\n        task.logger.info(\"页面加载完成，开始填充内容\");\n\n        // 上传视频\n        task.logger.info(\"开始上传视频\");\n        await retryAction(async () => {\n            // 定位视频上传输入框\n            const videoUploadSelectors = [\n                '.ant-upload-btn input[type=\"file\"][accept*=\"video\"]',\n                '.upload input[type=\"file\"][accept*=\"video\"]',\n                'input[type=\"file\"][accept*=\"video\"]',\n            ];\n\n            let uploadInput: Locator | null = null;\n\n            if (task.debug) {\n                const allFileInputs = await page.locator('input[type=\"file\"]').count();\n                task.logger.info(`页面中共找到 ${allFileInputs} 个文件上传输入框`);\n            }\n\n            for (const selector of videoUploadSelectors) {\n                const input = page.locator(selector);\n                const count = await input.count();\n                if (count > 0) {\n                    uploadInput = input.first();\n                    task.logger.info(`找到视频上传输入框: ${selector}`);\n                    break;\n                }\n            }\n\n            if (!uploadInput) {\n                task.logger.warn(\"未找到视频上传输入框，等待 3 秒后重试...\");\n                await page.waitForTimeout(3000);\n\n                const anyFileInput = page.locator('input[type=\"file\"]');\n                const inputCount = await anyFileInput.count();\n\n                if (inputCount > 0) {\n                    uploadInput = anyFileInput.first();\n                    task.logger.info(`找到文件输入框（共 ${inputCount} 个）`);\n                } else {\n                    if (task.debug) {\n                        const screenshotPath = path.join(tmpCachePath, `upload-error-${Date.now()}.png`);\n                        await page.screenshot({ path: screenshotPath, fullPage: true });\n                        task.logger.error(`未找到上传输入框，已截图保存至: ${screenshotPath}`);\n                    }\n                    throw new Error(\"未找到视频上传输入框\");\n                }\n            }\n\n            // 上传视频文件\n            await uploadInput.setInputFiles(params.videoPath);\n            task.logger.info(\"视频上传成功\");\n\n            // 等待视频处理\n            await page.waitForTimeout(5000);\n        });\n\n        // 上传封面\n        // 页面只有一个封面上传入口，只能传横屏封面 coverPath；\n        // 竖屏封面需要走 mockApi 模式（见前面的 unsupported 提示）\n        if (params.coverPath) {\n            task.logger.info(\"开始上传封面\");\n            await retryAction(async () => {\n                // 等待封面上传区域出现\n                const coverUploadBtn = await waitForElement(\".cover-upload-btn\", 10000);\n                if (coverUploadBtn) {\n                    const coverInput = page.locator('.cover-upload-btn input[type=\"file\"]');\n                    await coverInput.setInputFiles(params.coverPath);\n                    task.logger.info(\"封面上传成功\");\n                    await page.waitForTimeout(2000);\n                }\n            });\n        }\n\n        // 填写描述：话题与 @用户拼接到文案末尾，与 mockApi 模式的文案保持一致。\n        // 注意浏览器编辑器里 # 与 @ 会触发下拉选择，纯文本输入不保证绑定成结构化话题/提及，\n        // 需要结构化绑定（合集、活动、内容声明等）时请走 mockApi 模式。\n        const descriptionText = buildDescription({\n            description: params.description,\n            topics: params.topics,\n            mentionedUsers: params.mentionedUsers,\n        });\n\n        if (descriptionText) {\n            task.logger.info(\"填写视频描述\");\n            await retryAction(async () => {\n                const descEditor = await waitForElement(\".input-editor\", 10000);\n                if (!descEditor) {\n                    throw new Error(\"未找到描述编辑器\");\n                }\n                await descEditor.click();\n                await page.waitForTimeout(500);\n\n                // 清空编辑器内容\n                await descEditor.evaluate((el) => {\n                    el.textContent = \"\";\n                });\n                await page.waitForTimeout(300);\n                task.logger.info(\"已清空编辑器内容\");\n\n                // 模拟用户逐字输入\n                await descEditor.pressSequentially(descriptionText, { delay: 10 });\n                await page.waitForTimeout(500);\n\n                task.logger.info(\"描述填写完成\");\n            });\n        }\n\n        // 填写标题\n        if (params.title) {\n            task.logger.info(`填写标题: ${params.title}`);\n            const title = params.title;\n            await retryAction(async () => {\n                const titleInput = await waitForElement(\n                    \"#container-wrap div.form-item-body.short-title-wrap input\",\n                    10000,\n                );\n\n                if (!titleInput) {\n                    throw new Error(\"未找到标题输入框\");\n                }\n\n                await titleInput.click();\n                await titleInput.clear({ timeout: 3000 });\n                await titleInput.fill(title, { timeout: 5000 });\n                task.logger.info(\"标题填写完成\");\n            });\n        }\n\n        // 选择地点\n        if (params.location) {\n            task.logger.info(`选择地点: ${params.location.city}`);\n            const instance = page.locator(\".position-display-wrap\");\n            await instance.click();\n            await page.waitForTimeout(1000);\n            await page.locator(\".location-filter-wrap input\").fill(params.location.city);\n            await page.waitForTimeout(2000);\n            const poperInstance = page.locator(\".location-filter-wrap .common-option-list-wrap .option-item\");\n            await poperInstance.nth(1).waitFor();\n            await poperInstance.nth(1).click();\n            task.logger.info(\"地点选择完成\");\n        }\n        // 选择合集\n        if (params.collection) {\n            task.logger.info(`选择合集: ${params.collection.collectionName}`);\n            const instanceCollection = page.locator(\".post-album-display-wrap\");\n            await instanceCollection.click();\n            await page.waitForTimeout(1000);\n            page.locator(\".post-album-wrap .option-item\")\n                .filter({ hasText: params.collection.collectionName })\n                .first()\n                .click({ force: true });\n        }\n\n        // 填写链接\n        if (params.link) {\n            task.logger.info(`设置扩展阅读链接: ${params.link.title}`);\n\n            // 点击链接选择区域打开链接类型列表\n            await page.locator(\".post-link-wrap .link-display-wrap\").click();\n            await page.waitForTimeout(300);\n\n            // 根据 urlType 选择链接类型\n            const linkTypeText = params.link.urlType === 2 ? \"红包封面\" : \"公众号文章\";\n            await page.locator(\".link-option-item .title-wrap span\").filter({ hasText: linkTypeText }).click();\n            await page.waitForTimeout(300);\n\n            // 填写链接\n            const placeholder = params.link.urlType === 2 ? \"粘贴红包封面链接\" : \"粘贴公众号文章链接\";\n            await page.locator(`.link-input-wrap input[placeholder=\"${placeholder}\"]`).fill(params.link.link);\n            await page.waitForTimeout(500);\n\n            task.logger.info(`已设置${linkTypeText}: ${params.link.link}`);\n        }\n\n        // 活动选择\n        if (params.event) {\n            task.logger.info(`选择活动: ${params.event.eventName}`);\n\n            // 点击活动选择区域打开活动列表\n            await page.locator(\".post-activity-wrap .activity-display\").click();\n            await page.waitForTimeout(500);\n\n            // 在搜索框中输入活动名称\n            await page\n                .locator(\".activity-filter-wrap .weui-desktop-form__input[placeholder='搜索活动']\")\n                .fill(params.event.eventName);\n            await page.waitForTimeout(500);\n\n            // 等待搜索结果加载完成\n            const searchLoading = page.locator(\".search-loading\");\n            await searchLoading.waitFor({ state: \"hidden\", timeout: 5000 }).catch(() => {\n                task.logger.warn(\"活动搜索加载超时，继续尝试选择\");\n            });\n\n            // 点击匹配的活动项\n            const activityItem = page\n                .locator(\".option-item .activity-item .activity-item-info .name\")\n                .filter({ hasText: params.event.eventName });\n            const count = await activityItem.count();\n            if (count > 0) {\n                await activityItem.first().click();\n                await page.waitForTimeout(300);\n                task.logger.info(`已选择活动: ${params.event.eventName}`);\n            } else {\n                task.logger.warn(`未找到活动: ${params.event.eventName}，将不参与活动`);\n                // 关闭活动选择面板\n                await page.locator(\".post-activity-wrap .activity-display\").click();\n                await page.waitForTimeout(300);\n            }\n        }\n\n        // 定时发布\n        if (params.scheduledTime) {\n            task.logger.info(\"设置定时发布\");\n            const timingRadio = page\n                .locator(\".weui-desktop-form__check-label\")\n                .filter({ hasNotText: \"不定时\" })\n                .first();\n            await timingRadio.click();\n            await page.waitForTimeout(500);\n            const instance = page.locator(\".weui-desktop-picker__date\");\n            await instance.click();\n            const dateD = TimeFormatter.format(params.scheduledTime * 1000, \"d\");\n            const nowMonth = TimeFormatter.format(Date.now(), \"MM月\");\n            const nowMonthText = TimeFormatter.format(Date.now(), \"M月\");\n            const month = TimeFormatter.format(params.scheduledTime * 1000, \"MM月\");\n            const monthLocator = await page\n                .locator(\"weui-desktop-picker__panel__label\")\n                .filter({ hasText: month })\n                .first();\n            if (!monthLocator) {\n                await page.locator(\".weui-desktop-picker__panel__label\").filter({ hasText: nowMonth }).first().click();\n                await page.waitForTimeout(500);\n                await page\n                    .locator(\".weui-desktop-picker__table-row td a\")\n                    .filter({ hasText: nowMonthText })\n                    .first()\n                    .click();\n            }\n            await page.waitForTimeout(500);\n            await page.locator(\".weui-desktop-picker__table-row td a\").filter({ hasText: dateD }).first().click();\n\n            await page\n                .locator(\".weui-desktop-form__input-wrp input[placeholder*='请选择时间']\")\n                .fill(TimeFormatter.format(params.scheduledTime * 1000, \"hh:mm\"));\n            await page.locator(\"i.weui-desktop-icon__time\").click();\n            // 关闭弹出框\n            await page.locator(\".post-time-wrap .form-item .label\").filter({ hasText: \"发表时间\" }).click();\n        }\n\n        // 视频标注\n        if (params.tagInfo) {\n            task.logger.info(`设置视频标注: tagType=${params.tagInfo.tagType}`);\n\n            // 点击选择器打开下拉菜单\n            await page.locator(\".mark-tag-select\").click();\n            await page.waitForTimeout(300);\n\n            // 根据 tagType 选择对应的选项\n            const tagTypeTextMap: Record<number, string> = {\n                0: \"无需标注\",\n                1: \"含AI生成内容\",\n                2: \"内容包含营销广告\",\n                3: \"内容为虚构剧情，仅供娱乐\",\n                5: \"内容为自行拍摄\",\n                7: \"内容为转载\",\n                8: \"个人观点，仅供参考\",\n            };\n\n            const tagText = tagTypeTextMap[params.tagInfo.tagType];\n            if (!tagText) {\n                task.logger.warn(`未知的 tagType: ${params.tagInfo.tagType}，跳过标注设置`);\n            } else {\n                // 点击对应的选项\n                await page.locator(\".mark-tag-option .option-main\").filter({ hasText: tagText }).click();\n                await page.waitForTimeout(300);\n\n                // tagType=5 自行拍摄：需要填写拍摄时间和地点\n                if (params.tagInfo.tagType === 5) {\n                    const shootInfo = (params.tagInfo as any).shootInfo;\n                    if (shootInfo) {\n                        task.logger.info(\"填写拍摄时间和地点...\");\n                        await page.waitForTimeout(500);\n\n                        // 填写拍摄时间\n                        if (shootInfo.postTimestamp) {\n                            task.logger.info(`设置拍摄时间: ${shootInfo.postTimestamp}`);\n                            const timestamp = parseInt(shootInfo.postTimestamp, 10) * 1000;\n                            const date = new Date(timestamp);\n\n                            // 点击日期选择器\n                            await page\n                                .locator(\n                                    \".original-dialog-content .weui-desktop-picker__date input[placeholder*='请选择拍摄时间']\",\n                                )\n                                .click();\n                            await page.waitForTimeout(300);\n\n                            // 选择日期（直接点击日历中对应的日期）\n                            const dayNum = date.getDate();\n                            await page\n                                .locator(\".weui-desktop-picker__table a\")\n                                .filter({ hasText: new RegExp(`^\\\\s*${dayNum}\\\\s*$`) })\n                                .first()\n                                .click();\n                            await page.waitForTimeout(300);\n                        }\n\n                        // 填写拍摄地点\n                        if (shootInfo.countryCode || shootInfo.provinceCode || shootInfo.cityCode) {\n                            task.logger.info(\"设置拍摄地点...\");\n                            // 点击地点选择器\n                            await page\n                                .locator(\n                                    \".original-dialog-content .weui-desktop-form__dropdowncascade .weui-desktop-form__dropdowncascade__dt\",\n                                )\n                                .click();\n                            await page.waitForTimeout(300);\n\n                            // 选择国家（默认中国 countryCode=1156）\n                            if (shootInfo.countryCode === 1156) {\n                                await page\n                                    .locator(\".weui-desktop-dropdown__list-ele .weui-desktop-dropdown__list-ele__text\")\n                                    .filter({ hasText: \"中国\" })\n                                    .click();\n                                await page.waitForTimeout(300);\n\n                                // TODO: 传入参数添加标签数组，根据标签层层递进，用 hasText 选择对应的省市，例如shootInfo.locationTags = [\"安徽省\", \"合肥市\"]，然后循环选择\n\n                                task.logger.warn(\"RPA 模式下暂不支持选择具体省份和城市，仅选择了国家\");\n                            } else {\n                                task.logger.warn(`不支持的国家代码: ${shootInfo.countryCode}，跳过地点设置`);\n                            }\n                        }\n\n                        // 点击确认按钮关闭弹窗\n                        const confirmBtn = await waitForElement(\".weui-desktop-dialog .weui-desktop-btn_primary\");\n                        if (confirmBtn) {\n                            await confirmBtn.click();\n                            await page.waitForTimeout(300);\n                        }\n                    } else {\n                        task.logger.warn(\"tagType=5 需要提供 shootInfo 字段（拍摄时间和地点）\");\n                    }\n                }\n\n                // tagType=7 转载：需要填写转载来源\n                if (params.tagInfo.tagType === 7) {\n                    const repostSource = (params.tagInfo as any).repostSource;\n                    if (repostSource) {\n                        task.logger.info(`填写转载来源: ${repostSource}`);\n                        await page.waitForTimeout(500);\n\n                        // 填写转载来源\n                        await page.locator(\".repost-dialog-content .repost-textarea\").fill(repostSource);\n                        await page.waitForTimeout(300);\n\n                        // 点击完成按钮关闭弹窗\n                        const confirmBtn = await waitForElement(\".weui-desktop-dialog .weui-desktop-btn_primary\");\n                        if (confirmBtn) {\n                            await confirmBtn.click();\n                            await page.waitForTimeout(300);\n                        }\n                    } else {\n                        task.logger.warn(\"tagType=7 需要提供 repostSource 字段（转载来源）\");\n                    }\n                }\n            }\n        }\n\n        task.logger.info(\"准备发布...\");\n        await page.waitForTimeout(500);\n\n        let videoId = \"\";\n        // 定义响应处理函数\n        const handleResponse = async (response: Response) => {\n            const url = response.url();\n            if (url.includes(\"/post/post_create\")) {\n                const jsonResponse = await response.json();\n                page.off(\"response\", handleResponse);\n                videoId = jsonResponse.object?.id || jsonResponse.data?.objectId || \"\";\n            }\n        };\n\n        // 开始监听响应事件\n        page.on(\"response\", handleResponse);\n        task._timerRecord.PrePublish = Date.now();\n\n        // 等待视频上传完成：上传结束后，预览区的媒体操作栏才会渲染出该节点。\n        // 页面是 wujie 微前端，内容在 <wujie-app> 的 shadowRoot 里，普通 selector 穿不进去，\n        // 需要在 evaluate 里手动跨 shadow 边界查询。\n        const MEDIA_OPR_SELECTOR =\n            \"#container-wrap > div.container-center > div > div > div.main-body-wrap.post-create > div.main-body > div > \" +\n            \"div.post-edit-wrap.material-edit-wrap > div.material > div.preview > div > div.media-opr > div > span > div > div > div\";\n\n        task.logger.info(\"等待视频上传完成（预览区媒体操作栏出现）...\");\n\n        const uploadTimeout = 10 * 60 * 1000; // 最多等 10 分钟\n        const uploadWaitStart = Date.now();\n        let lastProgressLog = 0;\n\n        while (true) {\n            const ready = await page.evaluate((selector) => {\n                const host = document.querySelector(\"#container-wrap > div.container-center > div > wujie-app\");\n                const root = (host as HTMLElement | null)?.shadowRoot;\n                if (!root) return false;\n                return !!root.querySelector(selector);\n            }, MEDIA_OPR_SELECTOR);\n\n            if (ready) break;\n\n            const elapsed = Date.now() - uploadWaitStart;\n            if (elapsed > uploadTimeout) {\n                throw new Error(`视频上传超时，预览区未就绪（已等待 ${Math.round(elapsed / 1000)}s）`);\n            }\n\n            // 每 15s 打印一次进度，避免日志刷屏\n            if (elapsed - lastProgressLog >= 15000) {\n                lastProgressLog = elapsed;\n                task.logger.info(`视频仍在上传中... 已等待 ${Math.round(elapsed / 1000)}s`);\n            }\n\n            await page.waitForTimeout(1000);\n        }\n\n        task.logger.info(`视频上传完成（等待 ${Math.round((Date.now() - uploadWaitStart) / 1000)}s）`);\n\n        // 点击发布按钮（同样需要跨 shadow 边界）\n        const clicked = await page.evaluate(() => {\n            const host = document.querySelector(\"#container-wrap > div.container-center > div > wujie-app\");\n            const root = (host as HTMLElement | null)?.shadowRoot;\n            if (!root) return \"未找到 wujie-app shadowRoot\";\n\n            const btns = Array.from(root.querySelectorAll(\".form-btns .weui-desktop-btn\"));\n            const target = btns.find((el) => (el.textContent || \"\").includes(\"发表\")) as HTMLElement | undefined;\n            if (!target) return \"未找到发表按钮\";\n            if (target.classList.contains(\"weui-desktop-btn_disabled\")) return \"发表按钮仍处于禁用状态\";\n\n            target.click();\n            return null;\n        });\n\n        if (clicked) {\n            throw new Error(clicked);\n        }\n        task.logger.info(\"已点击发布按钮，等待响应...\");\n\n        // 等待页面跳转，表示发布完成\n        try {\n            await page.waitForURL((url) => url.href !== page.url(), { timeout: 30000 });\n            task.logger.info(`发布成功，页面已跳转: ${page.url()}`);\n        } catch {\n            task.logger.warn(\"等待页面跳转超时，可能发布失败或网络慢，继续关闭页面\");\n        }\n\n        // 关闭页面\n        await page.close();\n        return success(videoId, \"发布成功\");\n    } catch (error) {\n        let errorMsg = error instanceof Error ? error.message : String(error);\n        if (errorMsg.includes(\"context or browser has been closed\")) {\n            errorMsg = \"浏览器上下文已被关闭\";\n        }\n\n        task.logger.error(`微信视频号视频发布失败: ${errorMsg}`);\n        return response(414, `微信视频号视频发布失败: ${errorMsg}`, \"\");\n    }\n};\n","import type { CommonAction } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport { ActionCommonParamsSchema } from \"../../types\";\nimport { executeAction } from \"../../utils\";\nimport { mockAction } from \"./mock\";\nimport { rpaAction } from \"./rpa\";\n\n/**\n * 内容声明标注类型，对应发布体 `tagInfo.tagType`\n *\n * 取值来自 `post/finder_get_object_tag_list` 实测响应：\n * 0=无需标注、1=含AI生成内容、2=内容包含营销广告、3=内容为虚构剧情仅供娱乐、\n * 5=内容为自行拍摄、7=内容为转载、8=个人观点仅供参考\n */\nexport const ShipinhaoDeclareTagTypes = [0, 1, 2, 3, 5, 7, 8] as const;\n\nexport const ShipinhaoPublishVideoParamsSchema = ActionCommonParamsSchema.extend({\n    /** 本地视频路径（MP4/H.264，时长 ≤ 8 小时，大小 ≤ 20GB） */\n    videoPath: z.string().min(1),\n    /**\n     * 视频元数据，由调用方在浏览器侧采集后传入\n     *\n     * `<video>` 加载后取 `videoWidth` / `videoHeight` / `duration`，`fileSize` 取 `File.size`。\n     * 传入的宽高必须是**显示尺寸**（浏览器已应用旋转），SDK 直接用于发布体与转码请求，\n     * 不再做旋转换算 —— 竖屏视频传 tkhd 里的横屏尺寸会导致转码尺寸错误。\n     *\n     * 编码格式（H.264 校验用）不在此列：浏览器无 API 可取，由 SDK 从文件分段读取。\n     */\n    videoMetadata: z.object({\n        /** 时长（秒，可为小数），对应 media[].videoPlayLen 与 clipOriginVideoInfo.duration */\n        duration: z.number().positive(),\n        /** 显示宽度（px），对应 post_clip_video 的 targetWidth */\n        width: z.number().int().positive(),\n        /** 显示高度（px），对应 post_clip_video 的 targetHeight */\n        height: z.number().int().positive(),\n        /** 文件字节数，用于 20GB 上限校验 */\n        fileSize: z.number().int().positive(),\n        /** 视频文件路径（本地绝对路径） */\n        path: z.string().min(1).optional(),\n        /** 视频文件名（含扩展名） */\n        fileName: z.string().min(1),\n    }),\n    /**\n     * 横屏封面图片路径（JPEG/PNG），对应 media[].thumbUrl / fullThumbUrl\n     *\n     * 不传 verticalCoverPath 时，竖屏封面字段也复用此图。\n     */\n    coverPath: z.string().min(1),\n    /**\n     * 竖屏封面图片路径（可选，JPEG/PNG），对应 media[].coverUrl / fullCoverUrl / shareCoverUrl\n     *\n     * 不传则退回 coverPath，此时五个封面字段同图（实测浏览器只选一张封面时就是这个表现）。\n     */\n    verticalCoverPath: z.string().min(1).optional(),\n    /** 发布文案，对应 objectDesc.description；话题与 @用户会自动拼接到文案末尾 */\n    description: z.string(),\n    /** 短标题（可选，对应 objectDesc.shortTitle[0].shortTitle，填了需在 6-16 个字符之间） */\n    title: z.string().optional(),\n    /** 定时发布时间戳（可选，10 位秒级，对应 effectiveTime） */\n    scheduledTime: z.number().int().positive().optional(),\n    /** 是否立即发布（可选，对应顶层 isImmediatelyPublish，默认 false） */\n    isImmediatelyPublish: z.boolean().optional(),\n    /** 话题（可选，不带 # 号，对应顶层 topics 与 objectDesc.topic.finderTopicInfo） */\n    topics: z.array(z.string()).optional(),\n    /** @提及的用户（可选，对应 objectDesc.mentionedUser） */\n    mentionedUsers: z\n        .array(\n            z.object({\n                /** 昵称，不带 @ 号 */\n                nickname: z.string(),\n            }),\n        )\n        .optional(),\n    /** 合集（可选，对应 objectDesc.topic.collectionId / collectionName） */\n    collection: z\n        .object({\n            /** 合集 id，形如 event/UzFfAgtgekIEAQ... */\n            collectionId: z.string(),\n            collectionName: z.string(),\n        })\n        .optional(),\n    /** 活动（可选，对应 objectDesc.event） */\n    event: z\n        .object({\n            /** 活动 id，形如 event/UzFfAgtgekIEAQ... */\n            eventTopicId: z.string(),\n            eventName: z.string(),\n            eventCreatorNickname: z.string().optional(),\n        })\n        .optional(),\n    /** 扩展阅读链接（可选，对应 objectDesc.extReading） */\n    link: z\n        .object({\n            link: z.string(),\n            title: z.string(),\n            /** 1=公众号文章 2=红包封面 */\n            urlType: z.number().int().default(1),\n        })\n        .optional(),\n    /**\n     * 内容声明标注（可选），原样透传到发布体顶层 `tagInfo`\n     *\n     * 除 `tagType` 外的字段不做结构约束，调用方按页面行为自行组装并透传；\n     * `tagKey` 由 SDK 在发布时向 finder_get_object_tag_list 实时获取后补进去，传了也会被覆盖\n     * （它带时效，复用旧值会被服务端拒绝）。\n     *\n     * 已知需要附带额外字段的类型（详见 API.md）：\n     * - tagType=5 内容为自行拍摄：`shootInfo: { postTimestamp, countryCode?, provinceCode?, cityCode? }`\n     * - tagType=7 内容为转载：`repostSource: string`\n     */\n    tagInfo: z\n        .looseObject({\n            /** 标注类型，取值见 ShipinhaoDeclareTagTypes */\n            tagType: z.number().int(),\n        })\n        .optional(),\n    /** 是否原创声明（可选，对应顶层 originalFlag，默认 0=不声明） */\n    originalFlag: z.union([z.literal(0), z.literal(1)]).optional(),\n    /** 是否附带会员专区链接（可选，对应 objectDesc.member.postWithMemberZoneLink，默认 0） */\n    postWithMemberZoneLink: z.union([z.literal(0), z.literal(1)]).optional(),\n    /** 地理位置（可选） */\n    location: z\n        .object({\n            latitude: z.number(),\n            longitude: z.number(),\n            city: z.string(),\n            /** POI 名称，如「安徽医科大学第一附属医院」 */\n            poiName: z.string().optional(),\n            /** 详细地址，如「安徽省合肥市蜀山区绩溪路218号」 */\n            address: z.string().optional(),\n            poiClassifyId: z.string().optional(),\n        })\n        .optional(),\n});\n\nexport type ShipinhaoPublishVideoParams = z.infer<typeof ShipinhaoPublishVideoParamsSchema>;\n\nexport type PublishVideoAction = CommonAction<ShipinhaoPublishVideoParams, string>;\n\nexport const shipinhaoPublishVideo: PublishVideoAction = async (task, params) => {\n    task.logger.info(`[shipinhaoPublishVideo] actionType: ${params.actionType}`);\n\n    if (params.actionType === \"rpa\") {\n        return rpaAction(task, params);\n    }\n\n    if (params.actionType === \"mockApi\") {\n        return mockAction(task, params);\n    }\n\n    return executeAction(mockAction, rpaAction)(task, params);\n};\n","import { z } from \"zod\";\nimport { ActionCommonParamsSchema } from \"../../types\";\n\nexport const ShipinhaoSendMsgParamsSchema = ActionCommonParamsSchema.extend({\n    toUsername: z.string().min(1, \"接收者用户名不能为空\"), // 接收者用户名\n    sessionId: z.string().min(1, \"会话ID不能为空\"), // 会话ID\n    msgType: z.enum([\"TEXT\", \"IMAGE\"], {\n        message: \"消息类型必须是 TEXT 或 IMAGE\",\n    }), // 消息类型：TEXT-文本消息，IMAGE-图片消息\n    content: z.string().optional(), // 文本消息内容（msgType=TEXT时必填）\n    imageInfo: z\n        .object({\n            pathOrUrl: z.string().min(1, \"图片路径或URL不能为空\"), // 图片路径或URL\n        })\n        .optional(), // 图片信息（msgType=IMAGE时必填）\n});\n","import { createHash } from \"node:crypto\";\nimport fs from \"node:fs\";\nimport { type CommonAction, response } from \"@iflyrpa/share\";\nimport axios from \"axios\";\nimport { z } from \"zod\";\nimport { USER_MESSAGE } from \"../../utils/errorMessages\";\nimport { Http } from \"../../utils/http\";\nimport { rid } from \"../../utils/shipinhao/utils\";\nimport { ShipinhaoSendMsgParamsSchema } from \"./schema\";\n\nexport type ShipinhaoSendMsgParams = z.infer<typeof ShipinhaoSendMsgParamsSchema>;\nexport { ShipinhaoSendMsgParamsSchema } from \"./schema\";\n\nconst CHUNK_SIZE = 512 * 1024; // 分片大小：512KB\n// const COMPRESS_CONFIG = {\n//     maxWidth: 828, // 最大宽度限制\n//     quality: 95, // JPEG 质量（jimp 只支持 JPEG）\n//     pngCompressionLevel: 6, // PNG 压缩级别（jimp 使用 filterType 或 deflateLevel）\n// };\n\nexport interface UploadMsgImageResponse {\n    errCode: number;\n    errMsg: string;\n    data?: {\n        imgMsg: {\n            aesKey: string;\n            cdnUrl: string;\n            encryptKey: string;\n            height: number;\n            md5: string;\n            size: number;\n            width: number;\n        };\n    };\n}\n\n// 用户信息响应\ninterface UserInfoResponse {\n    errCode: number;\n    errMsg: string;\n    data?: {\n        finderUser?: {\n            finderUsername: string;\n        };\n    };\n}\n\n// async function compressImage(buffer: Buffer): Promise<{ data: Buffer; width: number; height: number }> {\n//     // 使用 jimp 读取图片\n//     const image = await Jimp.read(buffer);\n//     const originalWidth = image.bitmap.width;\n//     const originalHeight = image.bitmap.height;\n\n//     // 计算压缩后的尺寸\n//     let newWidth = originalWidth;\n//     let newHeight = originalHeight;\n\n//     if (originalWidth > COMPRESS_CONFIG.maxWidth) {\n//         newWidth = COMPRESS_CONFIG.maxWidth;\n//         newHeight = Math.round((originalHeight / originalWidth) * COMPRESS_CONFIG.maxWidth);\n//     }\n\n//     // 压缩处理\n//     image.resize(newWidth, newHeight);\n\n//     // 判断输出格式并设置质量\n//     const mime = image.getMIME();\n//     let outputBuffer: Buffer;\n\n//     if (mime === Jimp.MIME_JPEG) {\n//         // JPEG 设置质量\n//         image.quality(COMPRESS_CONFIG.quality);\n//         outputBuffer = await image.getBufferAsync(Jimp.MIME_JPEG);\n//     } else if (mime === Jimp.MIME_PNG) {\n//         // PNG 设置压缩级别（jimp 使用 deflateLevel，范围 0-9）\n//         // 注意：jimp 的 PNG 压缩选项有限，filterType 控制扫描算法\n//         outputBuffer = await image.getBufferAsync(Jimp.MIME_PNG);\n//     } else {\n//         // 其他格式默认处理为 PNG\n//         outputBuffer = await image.getBufferAsync(Jimp.MIME_PNG);\n//     }\n\n//     // 输出压缩信息\n//     const originalSize = buffer.length;\n//     const compressedSize = outputBuffer.length;\n//     console.log(\n//         `file compress before ${(originalSize / 1024 / 1024).toFixed(2)}M, ` +\n//             `compress after ${(compressedSize / 1024 / 1024).toFixed(2)}M, ` +\n//             `dimensions: ${newWidth}x${newHeight}`,\n//     );\n\n//     return {\n//         data: outputBuffer,\n//         width: newWidth,\n//         height: newHeight,\n//     };\n// }\n\n/**\n * 获取用户信息\n */\nasync function getUserInfo(cookieStr: string, http: Http): Promise<UserInfoResponse> {\n    const url = `https://channels.weixin.qq.com/cgi-bin/mmfinderassistant-bin/auth/auth_data?_rid=${rid()}`;\n\n    const headers = {\n        referer: \"https://channels.weixin.qq.com/micro/interaction/private_msg\",\n        cookie: cookieStr,\n        Origin: \"https://channels.weixin.qq.com\",\n    };\n\n    return await http.api<UserInfoResponse>(\n        {\n            method: \"get\",\n            url,\n            headers,\n        },\n        { retries: 3, retryDelay: 1000, timeout: 10000 },\n    );\n}\n\nexport type SendShipinhaoMsgAction = CommonAction<ShipinhaoSendMsgParams, any>;\n\nexport const shipinhaoSendMsg: SendShipinhaoMsgAction = async (_task, params) => {\n    if (!params.sessionId) {\n        return response(414, \"sessionId 不能为空\", undefined);\n    }\n\n    if (!params.toUsername) {\n        return response(414, \"接收者用户名不能为空\", undefined);\n    }\n\n    if (!params.msgType) {\n        return response(414, \"消息类型不能为空\", undefined);\n    }\n\n    if (![\"TEXT\", \"IMAGE\"].includes(params.msgType)) {\n        return response(414, \"消息类型必须是 TEXT 或 IMAGE\", undefined);\n    }\n\n    if (params.msgType === \"TEXT\") {\n        if (!params.content || params.content.trim() === \"\") {\n            return response(414, \"消息内容不能为空\", undefined);\n        }\n    }\n\n    if (params.msgType === \"IMAGE\") {\n        if (!params.imageInfo?.pathOrUrl) {\n            return response(414, \"图片路径或URL不能为空\", undefined);\n        }\n    }\n\n    if (!params.extraParam) {\n        return response(414, \"缺少 extraParam 参数\", undefined);\n    }\n\n    if (!params.extraParam.fingerPrintDeviceId || !params.extraParam.aId || !params.extraParam.uin) {\n        return response(414, \"fingerPrintDeviceId、aId 和 uin 不能为空\", undefined);\n    }\n\n    const cookieStr = params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\");\n    const headers = {\n        cookie: cookieStr,\n        referer: \"https://channels.weixin.qq.com/micro/interaction/private_msg\",\n        origin: \"https://channels.weixin.qq.com\",\n        \"content-type\": \"application/json\",\n        \"finger-print-device-id\": params.extraParam.fingerPrintDeviceId,\n        \"x-wechat-uin\": params.extraParam.uin,\n    };\n\n    const http = new Http({ headers });\n\n    const urlParams = new URLSearchParams({\n        _aid: params.extraParam.aId,\n        _rid: rid(),\n        _pageUrl: \"https://channels.weixin.qq.com/micro/interaction/private_msg\",\n    }).toString();\n\n    const generateCliMsgId = () => {\n        return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (s) => {\n            const t = (Math.random() * 16) | 0;\n            return (s === \"x\" ? t : (t & 3) | 8).toString(16);\n        });\n    };\n\n    let fromUsername = params.extraParam.finderUserName;\n    if (!fromUsername) {\n        _task.logger.info(\"未提供 finderUserName，尝试获取用户信息\");\n        const userInfoRes = await getUserInfo(cookieStr, http);\n\n        if (!userInfoRes.data?.finderUser?.finderUsername) {\n            return response(userInfoRes.errCode || -1, userInfoRes.errMsg || \"获取用户信息失败\", {});\n        }\n\n        fromUsername = userInfoRes.data.finderUser.finderUsername;\n        _task.logger.info(`获取到用户名: ${fromUsername}`);\n    }\n\n    let imgMsg: any;\n    if (params.msgType === \"IMAGE\") {\n        let imageBuffer: Buffer;\n        const imagePath = params.imageInfo!.pathOrUrl;\n\n        try {\n            if (imagePath.startsWith(\"http://\") || imagePath.startsWith(\"https://\")) {\n                const resp = await axios.get(imagePath, { responseType: \"arraybuffer\" });\n                imageBuffer = Buffer.from(resp.data);\n            } else {\n                const filePath = imagePath.startsWith(\"file://\") ? imagePath.slice(7) : imagePath;\n                imageBuffer = Buffer.from(await fs.promises.readFile(filePath));\n            }\n        } catch (err) {\n            // 原始错误可能带本地文件路径，只记日志不返给用户\n            _task.logger.error(`读取图片失败: ${err instanceof Error ? err.message : String(err)}`);\n            return response(414, USER_MESSAGE.IMAGE_UPLOAD_FAILED, undefined);\n        }\n\n        // const compressedBuffer = await compressImage(imageBuffer);\n        // imageBuffer = compressedBuffer.data;\n        const md5 = createHash(\"md5\").update(imageBuffer).digest(\"hex\");\n        const timestamp = Date.now().toString();\n        const totalChunks = Math.ceil(imageBuffer.length / CHUNK_SIZE);\n\n        console.log(`分片上传md5${md5}`);\n        let lastRes: UploadMsgImageResponse | undefined;\n\n        // 分片上传图片\n        for (let i = 0; i < totalChunks; i++) {\n            const chunkBuffer = imageBuffer.slice(i * CHUNK_SIZE, (i + 1) * CHUNK_SIZE);\n\n            const requestData = {\n                content: `data:application/octet-stream;base64,${chunkBuffer.toString(\"base64\")}`,\n                chunk: i,\n                chunks: totalChunks,\n                fromUsername,\n                toUsername: params.toUsername,\n                aesKey: \"U2FsdGVkX18cwrWR73LMGhBcmAX8xoNTgbmgkZBYkEs=\",\n                mediaSize: imageBuffer.length,\n                mediaType: 3,\n                md5,\n                timestamp,\n                _log_finder_uin: \"\",\n                _log_finder_id: params.extraParam.finderUserName || \"\",\n                rawKeyBuff: null,\n                pluginSessionId: null,\n                scene: 7,\n                reqScene: 7,\n            };\n\n            lastRes = await http.api<UploadMsgImageResponse>({\n                method: \"post\",\n                url: `https://channels.weixin.qq.com/micro/interaction/cgi-bin/mmfinderassistant-bin/private-msg/upload-media-info?${urlParams}`,\n                data: requestData,\n            });\n\n            console.log(`分片上传 ${i + 1}/${totalChunks} 响应:`, lastRes);\n            if (lastRes?.errCode !== 0 && i < totalChunks - 1) {\n                return response(414, lastRes?.errMsg || `第 ${i + 1}/${totalChunks} 分片上传失败`, undefined);\n            }\n        }\n\n        if (lastRes?.errCode !== 0) {\n            return response(414, lastRes?.errMsg || \"上传图片失败\", undefined);\n        }\n\n        const uploadedImgMsg = lastRes.data?.imgMsg as any;\n        imgMsg = {\n            aeskey: uploadedImgMsg.aesKey ?? uploadedImgMsg.aeskey,\n            url: uploadedImgMsg.cdnUrl ?? uploadedImgMsg.url,\n            hdSize: uploadedImgMsg.hdSize ?? uploadedImgMsg.size,\n            midSize: uploadedImgMsg.midSize ?? uploadedImgMsg.size,\n            thumbSize: uploadedImgMsg.thumbSize ?? uploadedImgMsg.size,\n            thumbHeight: uploadedImgMsg.thumbHeight ?? uploadedImgMsg.height,\n            thumbWidth: uploadedImgMsg.thumbWidth ?? uploadedImgMsg.width,\n            md5: uploadedImgMsg.md5,\n        };\n    }\n\n    console.log(\"发送私信请求参数1111\", {\n        sessionId: params.sessionId,\n        fromUsername,\n    });\n\n    const sendRes = await http.api<{ errCode: number; errMsg: string; data?: any }>({\n        method: \"post\",\n        url: `https://channels.weixin.qq.com/micro/interaction/cgi-bin/mmfinderassistant-bin/private-msg/send-private-msg?${urlParams}`,\n        data: {\n            timestamp: Date.now().toString(),\n            _log_finder_uin: \"\",\n            _log_finder_id: params.extraParam.finderUserName || \"\",\n            rawKeyBuff: null,\n            pluginSessionId: null,\n            scene: 7,\n            reqScene: 7,\n            msgPack: {\n                sessionId: params.sessionId,\n                fromUsername,\n                toUsername: params.toUsername,\n                cliMsgId: generateCliMsgId(),\n                msgType: params.msgType === \"TEXT\" ? 1 : 3,\n                imgMsg: params.msgType === \"IMAGE\" ? imgMsg : undefined,\n                textMsg: params.msgType === \"TEXT\" ? { content: params.content } : undefined,\n            },\n        },\n    });\n\n    console.log(\"发送私信响应:\", sendRes);\n    const isSuccess = sendRes?.errCode === 0;\n    return response(isSuccess ? 0 : 414, sendRes?.errMsg || \"发送图片私信失败\", sendRes.data);\n};\n","import { type Page, type Response, success, type UserInfo } from \"@iflyrpa/share\";\nimport type { SteelAction } from \"./index\";\n\n/**\n * 头条号登录 RPA\n *\n * 流程：\n * 1. 打开头条号登录页\n * 2. 生成远程调试地址，等待用户扫码\n * 3. 监听 user_info 接口获取用户信息\n * 4. 等待页面跳转到 /profile_v4/index 判断登录成功\n * 5. 收集 cookie 并返回结果\n */\nexport const rpaAction: SteelAction = async (task, _params) => {\n    const reporter = task.reportService?.reportLoginStatus ?? (() => Promise.resolve());\n\n    let page: Page;\n    let isSelfClosing = false;\n    let handleBrowserDisconnected: (() => void) | undefined;\n    const cleanup = async () => {\n        if (handleBrowserDisconnected) {\n            task._steelBrowser?.off(\"disconnected\", handleBrowserDisconnected);\n        }\n        if (page && !page.isClosed()) {\n            await page.close().catch(() => {});\n        }\n    };\n\n    // ========== 第一步：启动浏览器并打开登录页 ==========\n    try {\n        page = await task.createPage({\n            url: \"https://mp.toutiao.com/auth/page/login\",\n        });\n        if (!task._session?.id) throw new Error(\"Session ID 不存在\");\n        handleBrowserDisconnected = () => {\n            if (task.debug && isSelfClosing) {\n                task.logger.info(\"执行结束，关闭浏览器！\");\n            } else {\n                task.logger.info(\"浏览器被手动释放或意外关闭！\");\n            }\n        };\n        task._steelBrowser?.on(\"disconnected\", handleBrowserDisconnected);\n    } catch (e) {\n        return { code: 414, message: `浏览器启动失败: ${e}`, data: {} };\n    }\n\n    // ========== 第二步：生成远程调试地址 ==========\n    const pageInfo = await task._client?.sessions.liveDetails(task._session.id);\n    const pageId = pageInfo?.pages[0].id ?? \"\";\n\n    const baseHost = task._session.websocketUrl?.replace(/^wss?:\\/\\//, \"\") ?? \"\";\n    const connectAddress = new URLSearchParams({ baseHost, pageId }).toString();\n\n    task.reportService?.settingSessionID?.(task._session?.id || \"\");\n\n    // 拦截欢迎页的图片和视频资源，提升加载速度\n    await page.route(/\\/welcome.*\\.(png|mp4)$/i, (route) => route.abort());\n\n    await reporter(0, \"浏览器启动成功，请使用头条号App扫码登录……\", { connectAddress });\n\n    // ========== 第三步：监听登录状态与用户信息 ==========\n    let userInfo: UserInfo = { uniqueId: \"\", avatar: \"\", name: \"\" };\n    try {\n        /**\n         * 监听用户信息接口 /mp/agw/creator_center/user_info\n         * 登录成功后该接口会被自动调用，从中提取用户信息\n         */\n        const handleUserInfo = async (resp: Response) => {\n            if (resp.url().includes(\"/mp/agw/creator_center/user_info\")) {\n                try {\n                    const jsonUserInfo = await resp.json();\n                    userInfo = {\n                        name: jsonUserInfo.name,\n                        avatar: jsonUserInfo.avatar_url,\n                        uniqueId: jsonUserInfo.user_id_str,\n                    };\n                } catch (e) {\n                    task.logger.warn(\"无法解析用户信息:\", { error: e });\n                }\n            }\n        };\n        page.on(\"response\", handleUserInfo);\n\n        // 等待页面跳转到登录成功页面（不设超时，允许用户慢慢扫码）\n        await page.waitForURL(\"**/profile_v4/index**\", {\n            timeout: 0,\n            waitUntil: \"domcontentloaded\",\n        });\n\n        task.logger.info(\"页面已跳转到登录成功页面\");\n        await reporter(0, \"登录成功，正在获取用户信息...\", { stage: \"scanQrcode\", connectAddress });\n\n        // 等待用户信息接口响应\n        await page.waitForTimeout(2000);\n\n        page.off(\"response\", handleUserInfo);\n    } catch (e) {\n        task.logger.error(\"等待登录跳转失败\", { error: String(e) });\n        isSelfClosing = true;\n        await cleanup();\n        return { code: 500, message: \"登录失败，请重试！\", data: { stage: \"waitForLogin\", connectAddress } };\n    }\n\n    // ========== 第四步：收集 cookie 并返回结果 ==========\n    const cookie = JSON.stringify(await task._steelBrowserContext?.cookies());\n    isSelfClosing = true;\n    await cleanup();\n\n    return success({ connectAddress, cookie, userInfo }, \"登录成功！\");\n};\n","import { TaskState, type UserInfo } from \"@iflyrpa/share\";\nimport type { Response } from \"playwright-core\";\nimport { ExecutionState } from \"../../types\";\nimport { ProxyAgent } from \"../../utils/proxy\";\nimport type { SteelAction } from \"./index\";\n\nconst scanRetryMaxCount = 60; // 二维码扫描重试次数\nconst waitQrcodeResultMaxTime = scanRetryMaxCount * 2 * 1000; // 最长等待时间\n\nexport const rpaServer: SteelAction = async (task, params) => {\n    const updateTaskState = task.taskStageStore?.update?.bind(task.taskStageStore, task.taskId || \"\");\n    let executionState: ExecutionState | undefined;\n\n    let proxyUrl: string | undefined;\n    if (params.proxyLoc) {\n        task.logger?.info(`==> 开始获取代理信息：${params}`);\n        const ProxyAgentResult = await ProxyAgent({ logger: task.logger }, params.proxyLoc, params.accountId);\n        task.logger?.info(\"==> 代理信息获取成功！\");\n        proxyUrl = ProxyAgentResult ? `http://${ProxyAgentResult.ip}:${ProxyAgentResult.port}` : undefined;\n    }\n    const page = await task.createPage({\n        url: \"https://mp.toutiao.com/auth/page/login\",\n        proxyUrl,\n        userAgent: params.userAgent,\n        ...(params.viewport ? { viewport: params.viewport } : {}),\n    });\n\n    task.steelBrowser?.on(\"disconnected\", async () => {\n        const browserContext = task.steelBrowserContext;\n        const browser = task.steelBrowser;\n        executionState = ExecutionState.BROWSER_CLOSED;\n        await page.close();\n\n        if (browserContext) {\n            await browserContext.close();\n        }\n        if (browser) {\n            await browser.close();\n        }\n    });\n\n    // 拦截不必要的资源请求\n    // await page.route(/\\/welcome.*\\.(png|mp4)$/i, (route) => route.abort());\n\n    await updateTaskState?.({\n        state: TaskState.WAIT_SCAN,\n        connectAddress: await task.steelConnector?.getLive(task.sessionId || \"\"),\n        sessionId: task.sessionId,\n    });\n\n    let userInfo: UserInfo = { uniqueId: \"\", avatar: \"\", name: \"\" };\n\n    try {\n        await new Promise<void>((resolve, reject) => {\n            let finished = false;\n\n            const timer = setTimeout(async () => {\n                cleanup();\n                executionState = ExecutionState.TIMEOUT;\n                await updateTaskState?.({\n                    state: TaskState.TIMEOUT,\n                    error: \"等待扫码登录超时\",\n                });\n                resolve();\n            }, waitQrcodeResultMaxTime);\n\n            const cleanup = () => {\n                if (finished) return; // 防止多次调用\n                finished = true;\n                clearTimeout(timer);\n                page.off(\"response\", handleWebCommon);\n                page.off(\"response\", handleCheckQR);\n                task.steelBrowser?.off(\"disconnected\", handleBrowserClosed);\n            };\n\n            const handleBrowserClosed = () => {\n                cleanup();\n                executionState = ExecutionState.BROWSER_CLOSED;\n                resolve();\n            };\n\n            const handleWebCommon = async (resp: Response) => {\n                try {\n                    const url = resp.url();\n\n                    // 登录成功后的第一个请求\n                    if (url.includes(\"/web/common\")) {\n                        cleanup();\n\n                        const headers = resp.headers();\n                        const xmst = headers[\"x-ms-token\"];\n                        const date = headers[\"x-tt-timestamp\"];\n\n                        if (xmst && date) {\n                            const mstExpirDate = new Date(Number(date) * 1000 + 7 * 24 * 60 * 60 * 1000);\n                            const msToken = {\n                                name: \"msToken\",\n                                value: xmst,\n                                domain: \".bytedance.com\",\n                                expires: mstExpirDate.getTime() / 1000,\n                                httpOnly: true,\n                                path: \"/\",\n                                sameSite: \"None\" as const,\n                                secure: true,\n                            };\n                            await page.context().addCookies([msToken]);\n                            await updateTaskState?.({\n                                state: TaskState.CONFIRMED,\n                            });\n                        }\n\n                        executionState = ExecutionState.SUCCESS;\n                        resolve();\n                    } else if (url.includes(\"/mp/agw/creator_center/user_info\")) {\n                        // 优先获取用户信息\n                        try {\n                            const jsonUserInfo = await resp.json();\n                            userInfo = {\n                                name: jsonUserInfo.name ?? \"\",\n                                avatar: jsonUserInfo.avatar_url ?? \"\",\n                                uniqueId: jsonUserInfo.user_id_str ?? \"\",\n                            };\n                        } catch (e) {\n                            task.logger.warn(\"无法解析用户信息:\", { url, error: e });\n                        }\n                    }\n                } catch (err) {\n                    cleanup();\n                    reject(err);\n                }\n            };\n\n            // 0=用户未扫码，5=用户扫码已超时，2=用户已扫码未确认，3=扫码成功\n            const handleCheckQR = async (response: Response) => {\n                try {\n                    const url = response.url();\n                    if (!url.includes(\"/check_qrconnect/\")) return;\n\n                    let jsonResponse: { error_code: number; data?: { status: string } };\n                    try {\n                        const text = await response.text();\n                        if (!text) {\n                            task.logger.warn(\"Empty response body:\", { url });\n                            return;\n                        }\n\n                        jsonResponse = JSON.parse(text);\n                    } catch (e) {\n                        task.logger.warn(\"Failed to parse json:\", { url, error: e });\n                        return;\n                    }\n\n                    if (jsonResponse.error_code === 0 && jsonResponse.data?.status === \"2\") {\n                        // 扫码成功\n                        await updateTaskState?.({\n                            state: TaskState.SCANNED,\n                        });\n                    }\n                    if (jsonResponse.error_code === 0 && jsonResponse.data?.status === \"3\") {\n                        page.off(\"response\", handleCheckQR);\n                        page.on(\"response\", handleWebCommon);\n                    }\n                } catch (err) {\n                    cleanup();\n                    reject(err);\n                }\n            };\n\n            // 在页面加载之前就注册监听，防止丢失请求\n            task.steelBrowser?.on(\"disconnected\", handleBrowserClosed);\n            page.on(\"response\", handleCheckQR);\n        });\n    } finally {\n        await page.close();\n    }\n\n    if (executionState === undefined) return { code: 500, message: \"未知错误\", data: {} };\n\n    switch (executionState) {\n        case ExecutionState.BROWSER_CLOSED: {\n            const msg = \"浏览器已关闭，任务中断!\";\n            await updateTaskState?.({\n                state: TaskState.FAILED,\n                error: \"浏览器已关闭\",\n            });\n            return { code: 414, message: msg, data: {} };\n        }\n\n        case ExecutionState.TIMEOUT: {\n            const msg = \"等待用户扫码登录超时!\";\n            await updateTaskState?.({\n                state: TaskState.TIMEOUT,\n                error: msg,\n            });\n            task.logger.info(msg);\n            return { code: 414, message: msg, data: {} };\n        }\n\n        case ExecutionState.SUCCESS:\n            await updateTaskState?.({\n                state: TaskState.SUCCESS,\n                result: {\n                    cookie: JSON.stringify(await task.steelBrowserContext?.cookies()),\n                    userInfo: userInfo,\n                },\n            });\n            return {\n                code: 0,\n                message: \"成功\",\n                data: {\n                    cookie: JSON.stringify(await task.steelBrowserContext?.cookies()),\n                    userInfo,\n                },\n            };\n        default:\n            // 处理 RUNNING 和其他可能的状态\n            return { code: 500, message: \"任务执行中断\", data: {} };\n    }\n};\n","import { CommonAction, success } from \"@iflyrpa/share\";\nimport { ActiomCommonParams } from \"../../types\";\nimport { executeAction } from \"../../utils\";\nimport { rpaAction } from \"./rpa\";\nimport { rpaServer } from \"./rpa-server\";\n\nexport type ToutiaoLoginParams = ActiomCommonParams;\n\nexport type SteelAction = CommonAction<ActiomCommonParams, Record<string, unknown>>;\n\nexport const toutiaoLogin: SteelAction = async (task, params) => {\n    // params.actionType = \"rpa\";\n\n    if (params.actionType === \"rpa\") {\n        return rpaAction(task, params);\n    }\n\n    if (params.actionType === \"mockApi\") {\n        return success({}, \"暂不支持mockApi\");\n    }\n\n    if (params.actionType === \"server\") {\n        return rpaServer(task, params);\n    }\n\n    return executeAction(rpaAction)(task, params);\n};\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { downloadImage, getFilenameFromUrl, success, TaskState } from \"@iflyrpa/share\";\nimport FormData from \"form-data\";\n\nimport { AxiosProxyParams, MockPublish, Toutiao } from \"../../types\";\nimport { extractImgTag, replaceImgSrc, TimeFormatter } from \"../../utils\";\nimport { Http } from \"../../utils/http\";\nimport { reportLogger } from \"../../utils/reportLogger\";\nimport { COVER_TYPE, getAddTypeValue, type PublishAction } from \"./index\";\n\nconst GenAB = require(\"../../utils/ttABEncrypt\") as (headers: string, data: string) => string;\n\ninterface CommonResponse<T = unknown> {\n    data: T;\n    proxyInfo?: Record<string, unknown>;\n    code: number;\n    message: string;\n}\n\nconst errnoMap: Record<number, string | string[]> = {\n    20004020: \"图片上传异常，请重新绑定账号后同步。\",\n    7115: \"正文图片和封面图片推荐jpg、png格式。\",\n    7112: \"文章内图片上传失败，请检查文章中的图片后重试。\",\n    100006: \"文章同步异常，请重新绑定账号后重试。\",\n    3101: [\n        \"今日头条号发布次数已达上限，请明天再试。\",\n        \"头条账号状态异常，需前往头条号完成实名认证。\",\n        \"头条账号状态异常，资料审核未通过，请前往头条号查看。\",\n    ],\n    2007: \"文章发布失败，声明原创要求正文字数不少于 300 字，请修改后重试。\",\n    2010: \"无头条广告权限,请修改后重试。\",\n    3103: \"今日头条号发布次数已达上限，请明天再试。\",\n    1053: \"正文图片和封面图片推荐jpg、png格式。\",\n    1050: \"图片上传失败,请重试上传。\",\n    2005: \"账号无【申明原创】权限，请关闭申明后重试。\",\n    100004: \"用户未登录或登陆已过期，请重新登陆后重试。\",\n    4029: \"标题长度应该在2-30字之间，请修改后重试。\",\n    3102: \"账号已被禁言无法发布文章，请先保存草稿！\",\n};\nconst generatorFormData = (data: Record<string, unknown>) => {\n    return Object.entries(data)\n        .map(([key, value]) => {\n            const encodedKey = encodeURIComponent(key);\n            const encodedValue = encodeURIComponent(String(value));\n            return `${encodedKey}=${encodedValue}`;\n        })\n        .join(\"&\");\n};\nconst get3101DetailError = (errorList: string[], message: string, saveType: string) => {\n    let error = \"\";\n    if (message?.includes(\"当日发文\")) {\n        error = errorList[0];\n    } else if (message?.includes(\"实名认证\")) {\n        error = errorList[1];\n    } else if (message?.includes(\"资料审核\")) {\n        error = errorList[2];\n    }\n    return error || (saveType === \"draft\" ? \"文章同步异常，请稍后重试。\" : \"文章发布异常，请稍后重试。\");\n};\n\nexport const mockAction: PublishAction = async (task, params) => {\n    const { toutiaoSingleCover, toutiaoMultCover, toutiaoCoverType, toutiaoOriginal, toutiaoExclusive, toutiaoClaim } =\n        params.settingInfo;\n    const tmpCachePath = task.getTmpPath();\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        origin: \"https://mp.toutiao.com\",\n        referer: \"https://mp.toutiao.com/profile_v4/graphic/publish\",\n    };\n    const args: AxiosProxyParams = [\n        { headers },\n        task.logger,\n        params.proxyLoc,\n        params.accountId,\n        \"toutiao\", // 业务标识\n    ];\n    const http = new Http({ headers });\n    const proxyHttp = new Http(...args);\n\n    // 添加响应拦截器\n    proxyHttp.addResponseInterceptor<CommonResponse>((response) => {\n        // 检查响应中的 errno 字段\n        if (response && response.data?.code !== 0) {\n            let errmsg = \"\";\n\n            if (Array.isArray(errnoMap[response.data.code])) {\n                errmsg = get3101DetailError(\n                    errnoMap[response.data.code] as string[],\n                    response.data.message,\n                    params.saveType,\n                );\n            } else {\n                errmsg =\n                    (errnoMap[response.data.code] as string) ||\n                    response.config.defaultErrorMsg ||\n                    (params.saveType === \"draft\" ? \"文章同步异常，请稍后重试。\" : \"文章发布异常，请稍后重试。\");\n            }\n\n            return {\n                code: errnoMap[response.data.code] ? 414 : 500,\n                message: errmsg,\n                data: response.data,\n            };\n        }\n    });\n\n    // 0. 校验登录\n    await http.api({\n        method: \"get\",\n        url: \"https://mp.toutiao.com/mp/agw/creator_center/user_info\",\n        defaultErrorMsg: `头条号登录状态失效，请重新绑定账号后${params.saveType === \"draft\" ? \"同步\" : \"发布\"}。`,\n    });\n\n    const uploadImages = async (images: string[]) => {\n        // 下载图片到本地\n        return await Promise.all(\n            images.map(async (url) => {\n                const fileName = getFilenameFromUrl(url);\n                const image = await downloadImage(url, path.join(tmpCachePath, fileName));\n\n                // 检查文件大小（头条号限制 20MB）\n                const stats = fs.statSync(image);\n                const maxSize = 20 * 1024 * 1024; // 20MB\n                if (stats.size > maxSize) {\n                    throw {\n                        code: 414,\n                        message: \"头条号平台：单张图片不得超过 20MB\",\n                        data: \"\",\n                    };\n                }\n\n                const formData = new FormData();\n                formData.append(\"image\", fs.createReadStream(image));\n\n                const response = await http.api<CommonResponse<Toutiao.ImageData>>({\n                    method: \"post\",\n                    url: \"https://mp.toutiao.com/spice/image?upload_source=20020002&aid=1231&device_platform=web\",\n                    data: formData,\n                    defaultErrorMsg:\n                        params.saveType === \"draft\"\n                            ? \"图片上传异常，请稍后重试同步。\"\n                            : \"图片上传异常，请稍后重试发布。\",\n                });\n\n                return response.data;\n            }),\n        );\n    };\n\n    // 1. 提取并上传正文中的图片\n    const originContentImages = extractImgTag(params.content);\n    const targetContentImages = await uploadImages(originContentImages);\n    // 2. 替换正文中的图片\n    const content = replaceImgSrc(params.content, (dom) => {\n        if (dom.attribs.src) {\n            const idx = originContentImages.indexOf(dom.attribs.src.replace(/&amp;/g, \"&\"));\n            dom.attribs.src = targetContentImages[idx].image_url;\n            dom.attribs.web_uri = targetContentImages[idx].image_uri;\n            dom.attribs.img_width = targetContentImages[idx].image_width.toString();\n            dom.attribs.image_height = targetContentImages[idx].image_height.toString();\n            dom.attribs.image_type = targetContentImages[idx].image_type.toString();\n            dom.attribs.mime_type = targetContentImages[idx].image_mime_type;\n        }\n        return dom;\n    });\n\n    // 3. 上传横版封面\n    const coverUrl =\n        toutiaoCoverType === \"single\" ? [toutiaoSingleCover] : toutiaoCoverType === \"multiple\" ? toutiaoMultCover : [];\n    const coverRes = await uploadImages(coverUrl);\n\n    // 4. 构造发布数据\n    // const isSingleTitle = params.settingInfo.toutiaoTitleType === \"single\";\n    const location = params.settingInfo.toutiaoLocation;\n    const topics = params.settingInfo.toutiaoTopic || [];\n\n    // const multiTitleData = params.settingInfo.subTitles.map((title) => ({\n    // \tid: \"0\",\n    // \tvisibility_level: 0,\n    // \tsource: \"author\",\n    // \told_source: \"author\",\n    // \ttext: title,\n    // \tversion: \"author\",\n    // \tai_title: \"\",\n    // }));\n\n    const topicContent = topics\n        .map(\n            (topic) =>\n                `<p><a class=\"tteditor-forum\" data-name=\"${topic.word}\" data-id=\"${topic.id}\" data-concern-id=\"${topic.id}\">#${topic.word}#</a ></p >`,\n        )\n        .join(\"\");\n\n    let sourceData: Record<string, unknown> = {\n        source_type: toutiaoClaim ? toutiaoClaim.type : 5, // 老用户默认为：个人观点，仅供参考\n    };\n    if (toutiaoClaim && toutiaoClaim.type === 1) {\n        if (!toutiaoClaim?.source_author_uid) return { code: 500, message: \"请填写作者ID\", data: \"\" };\n        sourceData = {\n            ...sourceData,\n            source_author_uid: toutiaoClaim.source_author_uid,\n            time_format: toutiaoClaim.time_format,\n            position: toutiaoClaim.position,\n        };\n    }\n    const extraData = {\n        content_word_cnt: params.settingInfo.cntWord,\n        // is_multi_title: isSingleTitle ? 0 : 1,\n        // sub_titles: isSingleTitle ? [] : multiTitleData,\n        gd_ext: {\n            entrance: \"\",\n            from_page: \"publisher_mp\",\n            enter_from: \"PC\",\n            device_platform: \"mp\",\n            is_message: 0,\n        },\n        tuwen_wtt_trans_flag: params.settingInfo?.toutiaoTransWtt ? \"2\" : \"0\",\n        info_source: sourceData,\n        ...(location\n            ? {\n                  manual_selected_city: JSON.stringify({\n                      city: location.label,\n                      city_code: location.value,\n                  }),\n              }\n            : null),\n        ...(params.settingInfo?.toutiaoCollectionId\n            ? { want_join_collection_id: params.settingInfo.toutiaoCollectionId }\n            : null),\n    };\n\n    const publishData = {\n        article_type: 0,\n        source: 0,\n        search_creation_info: '{\"searchTopOne\": 0, \"abstract\": \"\", \"clue_id\": \"\"}',\n        title_id: \"\",\n        educluecard: \"\",\n        origin_debut_check_pgc_normal: 1,\n        is_fans_article: 0,\n        govern_forward: 0,\n        praise: 0,\n        disable_praise: 0,\n        tree_plan_article: 0,\n        star_order_id: \"\",\n        star_order_name: \"\",\n        customer_nick_name: \"\",\n        activity_tag: 0,\n        trends_writing_tag: 0,\n        is_refute_rumor: 0,\n        save: params.saveType === \"publish\" ? 1 : 0,\n        timer_status: params.settingInfo.timer ? 1 : 0,\n        timer_time: params.settingInfo.timer ? TimeFormatter.format(params.settingInfo.timer) : \"\",\n        title: params.title,\n        content: content + topicContent,\n        extra: JSON.stringify(extraData),\n        mp_editor_stat: toutiaoCoverType === \"no\" ? \"{}\" : '{\"image\": %d}',\n        draft_form_data: JSON.stringify({\n            coverType: COVER_TYPE[toutiaoCoverType],\n        }),\n        pgc_feed_covers: JSON.stringify(\n            coverRes.map((item) => ({\n                id: \"\",\n                url: item.image_url,\n                uri: item.image_uri,\n                ic_uri: \"\",\n                thumb_widt: item.image_width,\n                thumb_heigh: item.image_height,\n                extra: {\n                    from_content_uri: \"\",\n                    from_content: \"0\",\n                },\n            })),\n        ),\n        article_ad_type: getAddTypeValue(params.settingInfo.toutiaoAd),\n        // claim_origin: toutiaoOriginal.includes(\"original\") ? 1 : 0,\n        claim_exclusive: toutiaoExclusive ? toutiaoExclusive : toutiaoOriginal?.includes(\"exclusive\") ? 1 : 0, // 首发声明兼容老用户字段\n    };\n\n    task._timerRecord.PrePublish = Date.now();\n\n    task.logger.info(`[toutiaoPublish] ${params.saveType === \"draft\" ? \"同步草稿\" : \"发布文章\"}参数`, {\n        saveType: params.saveType,\n        title: params.title,\n        extra: extraData,\n        publishData,\n    });\n\n    const msToken = params.cookies.find((it) => it.name === \"msToken\")?.value;\n    let publishOption = {};\n    if (!msToken) {\n        publishOption = {\n            method: \"post\",\n            url: \"https://mp.toutiao.com/mp/agw/article/publish?source=mp&type=article&aid=1\",\n            data: publishData,\n            headers: {\n                \"content-type\": \"application/x-www-form-urlencoded\",\n            },\n            defaultErrorMsg: params.saveType === \"draft\" ? \"文章同步异常，请稍后重试。\" : \"文章发布异常，请稍后重试。\",\n        };\n    } else {\n        const postHeaders = generatorFormData({\n            source: \"mp\",\n            type: \"article\",\n            aid: 1231,\n            mp_publish_ab_val: 0,\n            msToken: msToken,\n        });\n        const postData = generatorFormData(publishData);\n        const a_bogus = GenAB(postHeaders, postData);\n\n        publishOption = {\n            method: \"post\",\n            url: `https://mp.toutiao.com/mp/agw/article/publish?${postHeaders}&a_bogus=${a_bogus}`,\n            data: postData,\n            headers: {\n                \"content-type\": \"application/x-www-form-urlencoded\",\n                \"user-agent\":\n                    \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36\",\n            },\n            defaultErrorMsg: params.saveType === \"draft\" ? \"文章同步异常，请稍后重试。\" : \"文章发布异常，请稍后重试。\",\n        };\n    }\n\n    const updateTaskState = task.taskStageStore?.update?.bind(task.taskStageStore, task.taskId || \"\");\n\n    if (MockPublish) {\n        const message = `文章模拟发布成功 ${http.proxyInfo}`;\n        const data = \"123456789\";\n\n        await updateTaskState?.({\n            state: TaskState.SUCCESS,\n            result: {\n                response: data,\n            },\n        });\n        return success(data, message);\n    }\n\n    const publishResult = await proxyHttp.api<CommonResponse<{ pgc_id: string }>>(publishOption, {\n        retries: 3,\n        retryDelay: 500,\n        timeout: 12 * 1000,\n    });\n\n    if (params.saveType !== \"draft\") {\n        reportLogger({\n            token: params.huiwenToken || \"\",\n            enverionment: task.enverionment || \"development\",\n            postId: params.articleId,\n            eip: proxyHttp.proxyInfo,\n            accountId: params.accountId,\n            uid: params.uid,\n            platform: \"toutiao\",\n            publishParams: publishOption,\n        });\n    }\n\n    const isSuccess = publishResult.code === 0;\n    const data = publishResult.data?.pgc_id;\n    const message = publishResult.message || (isSuccess ? \"文章发布成功！\" : \"文章发布失败，未知错误。\");\n\n    if (!isSuccess) {\n        await updateTaskState?.({\n            state: TaskState.FAILED,\n            error: message,\n        });\n        return { code: 414, data, message };\n    }\n\n    await updateTaskState?.({\n        state: TaskState.SUCCESS,\n        result: {\n            response: data,\n        },\n    });\n    // 临时返回结束\n    return success(publishResult.data.pgc_id, `文章发布成功！${task.debug ? ` ${http.proxyInfo}` : \"\"}`);\n};\n","import path from \"node:path\";\nimport type { Response } from \"@iflyrpa/share\";\nimport { downloadImage, getFilenameFromUrl, success } from \"@iflyrpa/share\";\n\nimport { copyHtmlToClipboard, getRandomInRange, PopupListener, TimeFormatter } from \"../../utils\";\nimport { COVER_TYPE, getAddTypeValue, type PublishAction } from \"./index\";\n\nconst GenAB = require(\"../../utils/ttABEncrypt\") as (headers: string, data: string) => string;\n\nexport const rpaAction: PublishAction = async (task, params) => {\n    const tmpCachePath = task.getTmpPath();\n\n    const commonCookies = {\n        path: \"/\",\n        secure: true,\n        domain: \"toutiao.com\",\n        url: \"https://mp.toutiao.com\",\n        httpOnly: true,\n    };\n\n    const page = await task.createPage({\n        show: task.debug,\n        url: params.url || \"https://mp.toutiao.com/profile_v4/graphic/publish\",\n        cookies: params.cookies?.map((it) => ({ ...it, ...commonCookies })) || [],\n    });\n\n    // 0. 校验登录\n    try {\n        await page.waitForSelector(\".publish-editor\", { state: \"visible\" });\n    } catch (_error) {\n        return {\n            code: 414,\n            message: `头条号登录状态失效，请重新绑定账号后${params.saveType === \"draft\" ? \"同步\" : \"发布\"}。`,\n            data: page.url(),\n        };\n    }\n\n    const interceptUrls = [\"/mp/agw/article/publish\"];\n\n    await page.route(\"**\", async (route, request) => {\n        const url = new URL(request.url());\n        if (interceptUrls.some((pattern) => url.pathname.includes(pattern))) {\n            const headers = {\n                ...request.headers(),\n                \"user-agent\":\n                    \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36\", //ua参数固定，不可修改\n            };\n\n            const generatorFormData = (data: Record<string, unknown>) => {\n                return Object.entries(data)\n                    .map(([key, value]) => {\n                        const encodedKey = encodeURIComponent(key);\n                        const encodedValue = encodeURIComponent(String(value));\n                        return `${encodedKey}=${encodedValue}`;\n                    })\n                    .join(\"&\");\n            };\n\n            const postHeaders = generatorFormData({\n                source: \"mp\",\n                type: \"article\",\n                aid: 1231,\n                mp_publish_ab_val: 0,\n                msToken: url.searchParams.get(\"msToken\"),\n            });\n            const postData = request.postData() || \"\";\n            const a_bogus = GenAB(postHeaders, postData);\n\n            url.searchParams.set(\"aid\", \"1231\");\n            url.searchParams.set(\"mp_publish_ab_val\", \"0\");\n            url.searchParams.set(\"a_bogus\", a_bogus);\n\n            await route.continue({ url: url.toString(), headers: headers });\n        } else {\n            await route.continue();\n        }\n    });\n\n    //弹窗监听检测\n    PopupListener(page, \".byte-modal.publish-exclusive-modal .title\", \"激励\", \".byte-modal-close-icon\", {\n        checkInterval: 1000,\n        stopAfterClick: false,\n    });\n\n    // 1. 填写标题\n    const titleInstance = page.locator(\".publish-editor-title-wrapper .publish-editor-title textarea\");\n    await titleInstance.click();\n    await titleInstance.fill(params.title);\n\n    // 2. 填写正文\n    await copyHtmlToClipboard(page, params.content);\n    // 定位目标元素并聚焦\n    await page.click(\".publish-editor .syl-editor-wrap .ProseMirror\");\n    // 模拟Ctrl+V粘贴\n    await page.keyboard.press(\"Control+V\");\n\n    // 3. 封面\n    const coverTypeValue = COVER_TYPE[params.settingInfo.toutiaoCoverType];\n    const coverContainer = page.locator(\".form-container .edit-cell\").filter({ hasText: \"展示封面\" });\n    // 滚动到可视区域\n    await coverContainer.evaluate((node) => node.scrollIntoView());\n    await coverContainer.locator(`.article-cover label.byte-radio:has(input[value=\"${coverTypeValue}\"])`).click();\n\n    let coverUrls: string[] = [];\n    if (params.settingInfo.toutiaoCoverType === \"single\") {\n        coverUrls = [params.settingInfo.toutiaoSingleCover];\n    } else if (params.settingInfo.toutiaoCoverType === \"multiple\") {\n        coverUrls = params.settingInfo.toutiaoMultCover;\n    }\n    // 获取待上传图片的本地路径\n    const images = await Promise.all(\n        coverUrls.map((url) => {\n            const fileName = getFilenameFromUrl(url);\n            return downloadImage(url, path.join(tmpCachePath, fileName));\n        }),\n    );\n\n    const coverUploadEle = coverContainer\n        .locator(\".article-cover .article-cover-images\")\n        .locator(\".article-cover-img-wrap, .article-cover-add\");\n    const coverUploadCount = await coverUploadEle.count();\n\n    for (let i = 0; i < coverUploadCount; i++) {\n        if (!images[i]) {\n            continue;\n        }\n\n        const ele = coverUploadEle.nth(i);\n        // 如果存在图片则替换\n        if ((await ele.locator(\"img\").count()) > 0) {\n            await ele.locator(\".article-cover-img-menu a\").filter({ hasText: \"替换\" }).click();\n        } else {\n            // 如果不存在图片则点击上传\n            await ele.click();\n        }\n\n        // 上传图片\n        const drawerContainer = page.locator(\".byte-drawer-wrapper:not(.byte-drawer-wrapper-hide)\");\n        await drawerContainer\n            .locator(\".byte-tabs-header .byte-tabs-header-title\")\n            .filter({ hasText: \"上传图片\" })\n            .click();\n        const fileChooserPromise = page.waitForEvent(\"filechooser\");\n        await page.waitForTimeout(200);\n        await drawerContainer.locator(\".upload-image-panel button.byte-btn\").filter({ hasText: \"本地上传\" }).click();\n        const fileChooser = await fileChooserPromise;\n        await fileChooser.setFiles([images[i]]);\n\n        // 等待上传完成（图片上传到服务端需要时间，disabled 状态解除后才可点击）\n        const confirmBtn = drawerContainer\n            .locator(\".footer .confirm-btns button:not(.byte-btn-disabled)\")\n            .filter({ hasText: \"确定\" });\n        await confirmBtn.waitFor({ state: \"visible\", timeout: 90000 });\n        await confirmBtn.click();\n\n        await page.waitForTimeout(getRandomInRange(500, 1000));\n    }\n\n    // 4. 添加位置\n    if (params.settingInfo.toutiaoLocation) {\n        const locationContainer = page.locator(\".form-container .edit-cell\").filter({ hasText: \"添加位置\" });\n        await locationContainer.locator(\".position-select\").click();\n        await locationContainer\n            .locator(\".position-select .byte-select-view-search input\")\n            .fill(params.settingInfo.toutiaoLocation.label);\n        const poperInstance = page.locator(\".byte-trigger .byte-select-popup .byte-select-option\");\n        await poperInstance.first().waitFor();\n        await poperInstance.first().click();\n    }\n\n    // 5. 投放广告\n    const adContainer = page\n        .locator(\".form-container .edit-cell .edit-label\")\n        .filter({ hasText: \"投放广告\" })\n        .locator(\"xpath=..\");\n\n    // 判断是否存在投放广告的选项\n    const isAdOptionVisible = await adContainer.isVisible();\n\n    if (isAdOptionVisible) {\n        const adRadio = adContainer.locator(\n            `label.byte-radio:has(input[value=\"${getAddTypeValue(params.settingInfo.toutiaoAd)}\"])`,\n        );\n        // 滚动到元素位置，避免被底部工具栏遮挡\n        await adRadio.scrollIntoViewIfNeeded();\n        await page.waitForTimeout(300);\n        // 使用 force 点击，避免被遮挡元素拦截\n        await adRadio.click({ force: true });\n    }\n\n    // 6. 声明首发\n    const exclusiveContainer = page\n        .locator(\".form-container .edit-cell .edit-label\")\n        .filter({ hasText: \"声明首发\" })\n        .locator(\"xpath=..\");\n    if (params.settingInfo.toutiaoOriginal?.includes(\"exclusive\") || params.settingInfo.toutiaoExclusive) {\n        exclusiveContainer.locator(\".exclusive .exclusive-checkbox-wraper .byte-checkbox\").check();\n    } else {\n        exclusiveContainer.locator(\".exclusive .exclusive-checkbox-wraper .byte-checkbox\").uncheck();\n    }\n\n    // 作品声明\n    const claim = params.settingInfo.toutiaoClaim ? params.settingInfo.toutiaoClaim.type : 5;\n    switch (claim) {\n        // case 1:\n        // \tawait page.locator(\".source-wrap .byte-checkbox\",{hasText: \"引用站内\"}).locator(\".byte-checkbox-mask\").check();\n        // \tif(!params.settingInfo.toutiaoClaim?.source_author_name) return{ code: 500, message: \"请填写作者账户名\", data: \"\" };\n        // \tawait page.locator(\".source-form-item\",{hasText: \"账号\"}).locator(\".byte-select-view-search input\").fill(params.settingInfo.toutiaoClaim.source_author_name)\n        // \tbreak;\n        case 3:\n            await page\n                .locator(\".source-wrap .byte-checkbox\", { hasText: \"引用AI\" })\n                .locator(\".byte-checkbox-mask\")\n                .check();\n\n            break;\n        case 4:\n            await page\n                .locator(\".source-wrap .byte-checkbox\", { hasText: \"取材网络\" })\n                .locator(\".byte-checkbox-mask\")\n                .check();\n\n            break;\n        case 5:\n            await page\n                .locator(\".source-wrap .byte-checkbox\", { hasText: \"个人观点，仅供参考\" })\n                .locator(\".byte-checkbox-mask\")\n                .check();\n\n            break;\n        case 6:\n            await page\n                .locator(\".source-wrap .byte-checkbox\", { hasText: \"虚构演绎，故事经历\" })\n                .locator(\".byte-checkbox-mask\")\n                .check();\n\n            break;\n        default:\n            await page\n                .locator(\".source-wrap .byte-checkbox\", { hasText: \"个人观点，仅供参考\" })\n                .locator(\".byte-checkbox-mask\")\n                .check();\n\n            break;\n    }\n\n    // 7. 保存草稿 / 发布\n    // biome-ignore-start lint/suspicious/noAsyncPromiseExecutor: 临时保留async\n    const articleId = await new Promise<string>(async (resolve) => {\n        const handleResponse = async (response: Response) => {\n            const url = response.url();\n            if (url.includes(\"/mp/agw/article/publish\")) {\n                const jsonResponse = await response.json();\n                page.off(\"response\", handleResponse);\n                resolve(jsonResponse.data.pgc_id);\n            }\n        };\n\n        page.on(\"response\", handleResponse);\n\n        if (params.settingInfo.timer && params.saveType === \"publish\") {\n            // 点击“定时发布”按钮\n            await page.locator(\".publish-footer button\").filter({ hasText: \"定时发布\" }).click();\n            await page.waitForSelector(\"button.publish-btn:not(.byte-btn-loading) >> nth=1\", { state: \"attached\" });\n\n            // 选择日期\n            await page.locator(\".byte-modal-content .day-select .byte-select-view-value\").click();\n            await page\n                .locator(\"li.byte-select-option\", {\n                    hasText: TimeFormatter.format(params.settingInfo.timer, \"MM月dd日\"),\n                })\n                .click();\n            await page.waitForTimeout(200);\n\n            // 选择小时\n            await page.locator(\".byte-modal-content .hour-select .byte-select-view-value\").click();\n            await page\n                .locator(\"li.byte-select-option\", { hasText: TimeFormatter.format(params.settingInfo.timer, \"h\") })\n                .click();\n            await page.waitForTimeout(200);\n\n            // 选择分钟\n            await page.locator(\".byte-modal-content .minute-select .byte-select-view-value\").click();\n            await page\n                .locator(\"li.byte-select-option\", { hasText: TimeFormatter.format(params.settingInfo.timer, \"m\") })\n                .click();\n            await page.waitForTimeout(200);\n\n            await page.locator(\".byte-modal-footer button\").filter({ hasText: \"预览并定时发布\" }).click();\n        } else {\n            await page.locator(\".publish-footer button\").filter({ hasText: \"预览并发布\" }).click();\n        }\n    });\n\n    if (params.settingInfo.toutiaoAd === \"no\") {\n        await page.waitForTimeout(200);\n        const confirmBtn = page.locator('div.byte-modal-footer button.byte-btn-primary:has-text(\"确定\")');\n        if (await confirmBtn.isVisible()) {\n            await confirmBtn.click();\n        }\n    }\n\n    task._timerRecord.PrePublish = Date.now();\n\n    if (params.saveType === \"publish\") {\n        await page\n            .locator(\".publish-footer button\")\n            .filter({ hasText: params.settingInfo.timer ? \"定时发布\" : \"确认发布\" })\n            .waitFor({ state: \"visible\", timeout: 90000 });\n        await page.waitForTimeout(200);\n        await page\n            .locator(\".publish-footer button\")\n            .filter({ hasText: params.settingInfo.timer ? \"定时发布\" : \"确认发布\" })\n            .click();\n    }\n\n    // 关闭页面\n    await page.close();\n\n    return success(articleId, params.saveType === \"publish\" ? \"发布成功\" : \"保存草稿成功\");\n};\n","import type { CommonAction } from \"@iflyrpa/share\";\nimport { ActiomCommonParams, ActionCommonParamsSchema } from \"../../types\";\nimport { executeAction, formatSectionHtml } from \"../../utils\";\nimport { mockAction } from \"./mock\";\nimport { rpaAction } from \"./rpa\";\n\ntype CoverType = \"single\" | \"multiple\" | \"no\";\n\nimport { z } from \"zod\";\n\nexport const ToutiaoPublishParamsSchema = ActionCommonParamsSchema.extend({\n    saveType: z.union([z.literal(\"draft\"), z.literal(\"publish\")]), // 保存成草稿 / 发布\n    title: z.string(),\n    content: z.string(),\n    proxyLoc: z.string().optional(), // 代理位置\n    localIP: z.string().optional(), // 用户ip\n    huiwenToken: z.string().optional(), // 绘文token\n    settingInfo: z.object({\n        toutiaoCoverType: z.union([z.literal(\"single\"), z.literal(\"multiple\"), z.literal(\"no\")]),\n        toutiaoTitleType: z.union([z.literal(\"single\"), z.literal(\"multiple\")]), // 已关闭对应功能，保留参数，兼容老版本\n        toutiaoSingleCover: z.string(),\n        toutiaoMultCover: z.array(z.string()),\n        toutiaoAd: z.string(), // 广告配置 - 投放广告/不投放广告\n        toutiaoOriginal: z.string().optional(), // 原创声明-已修改为首发声明，兼容老用户\n        toutiaoExclusive: z.number().optional(), // 头条首发  0 - 声明非首发 1- 声明首发\n        toutiaoCollectionId: z.string().optional(), // 头条合集id\n        toutiaoTransWtt: z.boolean().optional(), // 是否同步微头条\n        toutiaoClaim: z\n            .object({\n                type: z.number(), // 作品声明\n                source_author_uid: z.string().optional(),\n                source_author_name: z.string().optional(),\n                time_format: z.string().optional(),\n                position: z\n                    .object({\n                        position: z.string(),\n                        city: z.string(),\n                        longitude: z.number(),\n                        latitude: z.number(),\n                        type_code: z.string(),\n                        poi_id: z.string(),\n                    })\n                    .optional(),\n            })\n            .optional(),\n        toutiaoLocation: z\n            .object({\n                label: z.string(),\n                value: z.string(),\n            })\n            .passthrough()\n            .optional(), // 位置\n        toutiaoTopic: z.array(z.object({ id: z.string(), word: z.string() })), // 话题\n        cntWord: z.number(),\n        subTitles: z.array(z.string()), // 多标题\n        timer: z.number().optional(),\n    }),\n});\n\nexport type ToutiaoPublishParams = z.infer<typeof ToutiaoPublishParamsSchema>;\n\nexport const COVER_TYPE: Record<CoverType, number> = {\n    no: 1,\n    single: 2,\n    multiple: 3,\n};\n\nexport const getAddTypeValue = (toutiaoAd: ToutiaoPublishParams[\"settingInfo\"][\"toutiaoAd\"]) =>\n    toutiaoAd === \"yes\" ? 3 : 2;\n\nexport type PublishAction = CommonAction<ToutiaoPublishParams, string>;\n\nexport const toutiaoPublish: PublishAction = async (task, params) => {\n    task.logger.info(`toutiaoPublish actionType: ${params.actionType}`);\n    // Format content HTML\n    params.content = formatSectionHtml(params.content);\n\n    if (params.actionType === \"rpa\") {\n        return rpaAction(task, params);\n    }\n\n    if (params.actionType === \"mockApi\") {\n        return mockAction(task, params);\n    }\n\n    return executeAction(mockAction, rpaAction)(task, params);\n};\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { downloadImage, getFilenameFromUrl, success } from \"@iflyrpa/share\";\nimport FormData from \"form-data\";\nimport type { Toutiao } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport type { PublishAction } from \".\";\n\nexport const mockAction: PublishAction = async (task, params) => {\n    const tmpCachePath = task.getTmpPath();\n\n    const http = new Http({\n        headers: {\n            cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            origin: \"https://mp.toutiao.com\",\n            referer: \"https://mp.toutiao.com/profile_v4/graphic/publish\",\n        },\n    });\n\n    // 0. 校验登录\n    const userInfoRes = await http.api<{ code: number }>({\n        method: \"get\",\n        url: \"https://mp.toutiao.com/mp/agw/creator_center/user_info\",\n    });\n\n    if (userInfoRes.code !== 0) {\n        return { code: 0, message: \"登录失效\", data: userInfoRes };\n    }\n\n    // 1. 上传图片\n    const imageList: string[] = [];\n    if (params.banners && params.banners.length > 0) {\n        const images = await Promise.all(\n            params.banners.map((url) => {\n                const fileName = getFilenameFromUrl(url);\n                return downloadImage(url, path.join(tmpCachePath, fileName));\n            }),\n        );\n\n        const res = await Promise.all(\n            images.map(async (it) => {\n                const formData = new FormData();\n                formData.append(\"image\", fs.createReadStream(it));\n\n                const response = await http.api<{ data: Toutiao.ImageData }>({\n                    method: \"post\",\n                    url: \"https://mp.toutiao.com/spice/image?upload_source=20020003&aid=1231&device_platform=web\",\n                    data: formData,\n                });\n\n                return response.data;\n            }),\n        );\n\n        imageList.push(...res.map((it) => it.image_uri));\n    }\n\n    // 2. 构造发布数据\n    const extra = {\n        add_music_to_article_flag: \"0\", // 开启配乐\n        claim_exclusive: \"0\", // 原创&首发声明\n        tuwen_wtt_trans_flag: \"0\",\n        info_source: JSON.stringify({\n            source_type: 5,\n            source_author_uid: \"\",\n            time_format: \"\",\n            position: {},\n        }),\n        ugc_position: JSON.stringify({\n            address: \"\",\n            position: \"合肥市\",\n            city: \"合肥市\",\n            longitude: 117.227289,\n            latitude: 31.82057,\n            poi_type_code: \"190104\",\n            poi_id: \"22535659123306003\",\n        }),\n    };\n\n    const syncData = {\n        content: params.content, // 正文,\n        image_list: imageList, // 图片列表\n        is_fans_article: 2,\n        pre_upload: 1,\n        welfare_card: \"\",\n        extra: JSON.stringify(extra),\n    };\n\n    // biome-ignore lint/suspicious/noExplicitAny: false positive\n    const res = await http.api<any>({\n        method: \"post\",\n        url: \"https://mp.toutiao.com/mp/agw/article/wtt\",\n        data: syncData,\n    });\n\n    return success(res.data);\n};\n","import path from \"node:path\";\nimport { downloadImage, getFilenameFromUrl, success } from \"@iflyrpa/share\";\n\nimport type { PublishAction } from \"./index\";\n\nexport const rpaAction: PublishAction = async (task, params) => {\n    const commonCookies = {\n        path: \"/\",\n        secure: true,\n        domain: \"mp.toutiao.com\",\n        url: \"https://mp.toutiao.com\",\n        httpOnly: true,\n    };\n\n    const page = await task.createPage({\n        show: task.debug,\n        url: params.url || \"https://mp.toutiao.com/profile_v4/weitoutiao/publish\",\n        cookies: params.cookies?.map((it) => ({ ...it, ...commonCookies })) || [],\n    });\n\n    const tmpCachePath = task.getTmpPath();\n\n    // 0. 判断是否登录\n    try {\n        await page.waitForSelector(\".publish-box\");\n    } catch (error) {\n        return { code: 0, message: \"登录失效\", data: page.url() };\n    }\n\n    // 1. 添加正文\n    const descInstance = page.locator(\".syl-editor .ProseMirror\");\n    await descInstance.click();\n    await descInstance.fill(params.content);\n\n    // 2. 添加图片\n    if (params.banners && params.banners?.length > 0) {\n        const images = await Promise.all(\n            params.banners.map((url) => {\n                const fileName = getFilenameFromUrl(url);\n                return downloadImage(url, path.join(tmpCachePath, fileName));\n            }),\n        );\n\n        const fileChooserPromise = page.waitForEvent(\"filechooser\");\n        await page.locator(\".toolbar .syl-toolbar-tool.weitoutiao-image-plugin\").click();\n        await page.locator(\".byte-drawer.mp-ic-img-drawer button.byte-btn\").filter({ hasText: \"本地上传\" }).click();\n        const fileChooser = await fileChooserPromise;\n        await fileChooser.setFiles(images);\n\n        await page.locator(\".byte-drawer.mp-ic-img-drawer .footer button.byte-btn\").filter({ hasText: \"确定\" }).click();\n    }\n\n    // 滚动到底部\n    await page.mouse.wheel(0, 500); // 向下滚动 500 像素\n\n    // 3. 添加位置\n    if (params.address) {\n        const addressFormItem = page\n            .locator(\".img-form-wrap .form-item-wrap .form-item\")\n            .filter({ hasText: \"添加位置\" });\n        await addressFormItem.locator(\".byte-select\").click();\n        await addressFormItem.locator(\".byte-select-view-search input\").fill(params.address);\n        const poperInstance = page.locator(\".byte-trigger .byte-select-popup .byte-select-option\");\n        await poperInstance.first().waitFor();\n        await poperInstance.first().click();\n    }\n\n    // 4. 作品声明\n    if (params.declaration) {\n        const declarationFormItem = page\n            .locator(\".img-form-wrap .form-item-wrap .form-item\")\n            .filter({ hasText: \"作品声明\" })\n            .locator(\".source-info-wrap\");\n        await declarationFormItem.locator(`.byte-checkbox:has(input[value=\"${params.declaration}\"])`).click();\n    }\n\n    // 5. 发布\n    await page.locator(\".footer-wrap button.publish-content\").click();\n\n    return success(\"\");\n};\n","import type { CommonAction } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport { ActiomCommonParams, ActionCommonParamsSchema } from \"../../types\";\nimport { executeAction } from \"../../utils\";\nimport { mockAction } from \"./mock\";\nimport { rpaAction } from \"./rpa\";\n\n/**\n * 作品声明\n * 1：引用站内\n * 3：引用AI\n * 4：取材网络\n * 5：个人观点，仅供参考\n * 6：虚构演绎，故事经历\n * 7：投资观点，仅供参考\n * 8：健康医疗分享，仅供参考\n */\ntype DeclarationType = 1 | 3 | 4 | 5 | 6 | 7 | 8;\n\nexport interface WeitoutiaoPublishParams extends ActiomCommonParams {\n    content: string;\n    banners?: string[];\n    address?: string;\n    declaration?: DeclarationType;\n}\n\nexport type PublishAction = CommonAction<WeitoutiaoPublishParams>;\n\nexport const weitoutiaoPublish: PublishAction = async (task, params) => {\n    if (params.actionType === \"rpa\") {\n        return rpaAction(task, params);\n    }\n\n    if (params.actionType === \"mockApi\") {\n        return mockAction(task, params);\n    }\n\n    return executeAction(mockAction, rpaAction)(task, params);\n};\n","import { type Page, type Response, success, type UserInfo } from \"@iflyrpa/share\";\nimport type { SteelAction } from \"./index\";\n\n/**\n * 微信公众号登录 RPA\n *\n * 流程：\n * 1. 打开微信公众号登录页\n * 2. 生成远程调试地址，等待用户扫码\n * 3. 监听 scanloginqrcode 接口判断扫码状态（0=未扫码, 4=已扫码未确认, 1=已确认）\n * 4. 扫码确认后监听页面跳转到 /wxamp/home，提取 token\n * 5. 从 __INITIAL_STATE__ 获取用户信息\n * 6. 收集 cookie 并返回结果\n */\nexport const rpaAction: SteelAction = async (task, _params) => {\n    const reporter = task.reportService?.reportLoginStatus ?? (() => Promise.resolve());\n    let page: Page;\n    let isSelfClosing = false;\n    let handleBrowserDisconnected: (() => void) | undefined;\n    const cleanup = async () => {\n        if (handleBrowserDisconnected) {\n            task._steelBrowser?.off(\"disconnected\", handleBrowserDisconnected);\n        }\n        if (page && !page.isClosed()) {\n            await page.close().catch(() => {});\n        }\n    };\n\n    // ========== 第一步：启动浏览器并打开登录页 ==========\n    try {\n        page = await task.createPage({\n            url: \"https://mp.weixin.qq.com/cgi-bin/loginpage\",\n        });\n        if (!task._session?.id) throw new Error(\"Session ID 不存在\");\n        handleBrowserDisconnected = () => {\n            if (task.debug && isSelfClosing) {\n                task.logger.info(\"执行结束，关闭浏览器！\");\n            } else {\n                task.logger.info(\"浏览器被手动释放或意外关闭！\");\n            }\n        };\n        task._steelBrowser?.on(\"disconnected\", handleBrowserDisconnected);\n    } catch (e) {\n        return { code: 414, message: `浏览器启动失败: ${e}`, data: {} };\n    }\n\n    // ========== 第二步：生成远程调试地址 ==========\n    const pageInfo = await task._client?.sessions.liveDetails(task._session.id);\n    const pageId = pageInfo?.pages?.[0]?.id ?? \"\";\n\n    const baseHost = task._session.websocketUrl?.replace(/^wss?:\\/\\//, \"\") ?? \"\";\n    const connectAddress = new URLSearchParams({ baseHost, pageId }).toString();\n    task.reportService?.settingSessionID?.(task._session?.id || \"\");\n\n    await reporter(0, \"浏览器启动成功，请使用微信扫码登录……\", {\n        stage: \"connectAddress\",\n        connectAddress,\n    });\n\n    // ========== 第三步：监听扫码状态与登录结果 ==========\n    let token: string | undefined;\n    let userInfo: UserInfo = { uniqueId: \"\", avatar: \"\", name: \"\" };\n\n    try {\n        await new Promise<void>((resolve, reject) => {\n            let finished = false;\n\n            /** 清理所有监听器，防止重复触发 */\n            const cleanup = (status?: unknown) => {\n                if (finished) return;\n                finished = true;\n                page.off(\"response\", handleAfterLogin);\n                page.off(\"response\", handleScanStatus);\n                if (status !== undefined) reject(status);\n            };\n\n            /**\n             * 登录确认后的处理：\n             * 监听页面跳转到 /wxamp/ || /cgi-bin/home，从 URL 提取 token，\n             * 从 __INITIAL_STATE__ 获取用户信息\n             */\n            const handleAfterLogin = async (resp: Response) => {\n                try {\n                    const url = resp.url();\n\n                    if (url.includes(\"/wxamp/\") || url.includes(\"/cgi-bin/home\")) {\n                        cleanup();\n                        // 从 URL 中提取 token 参数\n                        const tokenMatch = url.match(/token=(\\d+)/);\n                        if (tokenMatch) token = tokenMatch[1];\n\n                        if (url.includes(\"/cgi-bin/home\")) {\n                            // 公众号后台首页使用 wx.commonData\n                            try {\n                                await page.waitForFunction(() => !!(window as any).wx?.commonData, { timeout: 5000 });\n                                const commonData = await page.evaluate(() => (window as any).wx.commonData);\n                                userInfo = {\n                                    name: commonData?.data?.nick_name ?? \"\",\n                                    uniqueId: commonData?.data?.user_name ?? \"\",\n                                    avatar: commonData?.data?.head_img ?? \"\",\n                                };\n                            } catch (e) {\n                                task.logger.warn(\"无法获取 commonData 用户信息:\", {\n                                    error: e instanceof Error ? e.message : String(e),\n                                });\n                            }\n                        } else {\n                            // 小程序主页使用 __INITIAL_STATE__\n                            try {\n                                await page.waitForFunction(() => !!(window as any).__INITIAL_STATE__?.userInfo, {\n                                    timeout: 5000,\n                                });\n                                const initialState = await page.evaluate(() => (window as any).__INITIAL_STATE__);\n\n                                userInfo = {\n                                    name: initialState?.userInfo?.nickName ?? \"\",\n                                    uniqueId: initialState?.userInfo?.userName ?? \"\",\n                                    avatar: initialState?.userInfo?.iconUrl ?? \"\",\n                                };\n                            } catch (e) {\n                                task.logger.warn(\"无法获取用户信息:\", {\n                                    error: e instanceof Error ? e.message : String(e),\n                                });\n                            }\n                        }\n\n                        resolve();\n                    }\n                } catch (e) {\n                    cleanup(e);\n                }\n            };\n\n            /**\n             * 监听扫码状态接口 /cgi-bin/scanloginqrcode\n             *\n             * 状态码说明：\n             *   0 = 用户未扫码\n             *   4 = 用户已扫码未确认\n             *   1 = 用户已确认登录\n             */\n            const handleScanStatus = async (response: Response) => {\n                try {\n                    const url = response.url();\n                    if (\n                        !url.includes(\"/cgi-bin/scanloginqrcode?action=ask\") &&\n                        !url.includes(\"/cgi-bin/loginqrcode?action=ask\")\n                    )\n                        return;\n\n                    let json: Record<string, unknown>;\n                    try {\n                        const text = await response.text();\n                        if (!text) {\n                            task.logger.warn(\"扫码状态接口返回空响应\", { url });\n                            return;\n                        }\n                        json = JSON.parse(text);\n                    } catch (e) {\n                        task.logger.warn(\"扫码状态接口响应解析失败\", { url, error: e });\n                        return;\n                    }\n\n                    // 已确认登录，切换监听：从扫码状态 → 登录结果\n                    if (json.status === 1) {\n                        page.off(\"response\", handleScanStatus);\n                        page.on(\"response\", handleAfterLogin);\n                        await reporter(0, \"扫码成功!\", { stage: \"scanQrcode\", connectAddress });\n                    }\n                } catch (e) {\n                    cleanup(e);\n                }\n            };\n\n            // 提前注册监听，防止漏掉响应\n            page.on(\"response\", handleScanStatus);\n        });\n    } catch (e) {\n        // 扫码状态码 → 用户友好提示的映射\n        const errMap: Record<string, string> = {\n            \"0\": \"扫码超时，请重试！\",\n            \"4\": \"已扫码但未确认，请重试！\",\n        };\n        isSelfClosing = true;\n\n        const errorMessage =\n            typeof e === \"string\" && errMap[e] ? errMap[e] : e instanceof Error ? e.message : String(e);\n\n        await cleanup();\n        return { code: 500, message: errorMessage, data: { stage: \"scanQrcode\", connectAddress } };\n    }\n\n    // ========== 第四步：收集 cookie 并返回结果 ==========\n    const cookie = JSON.stringify(await task._steelBrowserContext?.cookies());\n    isSelfClosing = true;\n    await cleanup();\n\n    return success({ connectAddress, token, cookie, userInfo }, \"登录成功！\");\n};\n","import { TaskState, type UserInfo } from \"@iflyrpa/share\";\nimport type { Response } from \"playwright-core\";\nimport { ExecutionState } from \"../../types\";\nimport { ProxyAgent } from \"../../utils/proxy\";\nimport type { SteelAction } from \"./index\";\n\nconst scanRetryMaxCount = 60; // 二维码扫描重试次数\nconst waitQrcodeResultMaxTime = scanRetryMaxCount * 2 * 1000; // 最长等待时间\n\nexport const rpaServer: SteelAction = async (task, params) => {\n    const updateTaskState = task.taskStageStore?.update?.bind(task.taskStageStore, task.taskId || \"\");\n    let executionState: ExecutionState | undefined;\n\n    let proxyUrl: string | undefined;\n    if (params.proxyLoc) {\n        task.logger?.info(`==> 开始获取代理信息：${params}`);\n        const ProxyAgentResult = await ProxyAgent({ logger: task.logger }, params.proxyLoc, params.accountId);\n        task.logger?.info(\"==> 代理信息获取成功！\");\n        proxyUrl = ProxyAgentResult ? `http://${ProxyAgentResult.ip}:${ProxyAgentResult.port}` : undefined;\n    }\n\n    const page = await task.createPage({\n        url: \"https://mp.weixin.qq.com/cgi-bin/loginpage\",\n        proxyUrl,\n        userAgent: params.userAgent,\n        ...(params.viewport ? { viewport: params.viewport } : {}),\n    });\n\n    task.steelBrowser?.on(\"disconnected\", async () => {\n        const browserContext = task.steelBrowserContext;\n        const browser = task.steelBrowser;\n        executionState = ExecutionState.BROWSER_CLOSED;\n        await page.close();\n\n        if (browserContext) {\n            await browserContext.close();\n        }\n        if (browser) {\n            await browser.close();\n        }\n    });\n\n    await updateTaskState?.({\n        state: TaskState.WAIT_SCAN,\n        connectAddress: await task.steelConnector?.getLive(task.sessionId || \"\"),\n        sessionId: task.sessionId,\n    });\n\n    let token: string | undefined;\n    let userInfo: UserInfo = { uniqueId: \"\", avatar: \"\", name: \"\" };\n\n    try {\n        await new Promise<void>((resolve, reject) => {\n            let finished = false;\n\n            const timer = setTimeout(async () => {\n                cleanup();\n                executionState = ExecutionState.TIMEOUT;\n                await updateTaskState?.({\n                    state: TaskState.TIMEOUT,\n                    error: \"等待扫码登录超时\",\n                });\n                resolve();\n            }, waitQrcodeResultMaxTime);\n\n            const cleanup = () => {\n                if (finished) return; // 防止多次调用\n                finished = true;\n                clearTimeout(timer);\n                page.off(\"response\", handleAfterLogin);\n                page.off(\"response\", handleScanStatus);\n                task.steelBrowser?.off(\"disconnected\", handleBrowserClosed);\n            };\n\n            const handleBrowserClosed = () => {\n                cleanup();\n                executionState = ExecutionState.BROWSER_CLOSED;\n                resolve();\n            };\n\n            const handleAfterLogin = async (resp: Response) => {\n                try {\n                    const url = resp.url();\n\n                    // 登录成功跳转到公众号主页\n                    if (url.includes(\"/wxamp/home\")) {\n                        cleanup();\n                        await updateTaskState?.({\n                            state: TaskState.CONFIRMED,\n                        });\n\n                        const tokenMatch = url.match(/token=(\\d+)/);\n                        if (tokenMatch) token = tokenMatch[1];\n\n                        try {\n                            await page.waitForFunction(() => !!(window as any).__INITIAL_STATE__?.userInfo, {\n                                timeout: 10000,\n                            });\n                            const initialState = await page.evaluate(() => (window as any).__INITIAL_STATE__);\n\n                            userInfo = {\n                                name: initialState?.userInfo?.nickName ?? \"\",\n                                uniqueId: initialState?.userInfo?.userName ?? \"\",\n                                avatar: initialState?.userInfo?.iconUrl ?? \"\",\n                            };\n                        } catch (e) {\n                            task.logger.warn(\"无法获取用户信息:\", { error: e });\n                        }\n\n                        executionState = ExecutionState.SUCCESS;\n                        resolve();\n                    }\n                } catch (err) {\n                    cleanup();\n                    reject(err);\n                }\n            };\n\n            // 0=用户未扫码， 4=用户已扫码未确认， 1=用户已确认登录\n            const handleScanStatus = async (response: Response) => {\n                try {\n                    const url = response.url();\n                    if (!url.includes(\"/cgi-bin/scanloginqrcode?action=ask\")) return;\n\n                    let jsonResponse: Record<string, unknown>;\n                    try {\n                        const text = await response.text(); // 总是安全的\n                        if (!text) {\n                            task.logger.warn(\"Empty response body:\", { url });\n                            return;\n                        }\n\n                        jsonResponse = JSON.parse(text); // 手动解析\n                    } catch (e) {\n                        task.logger.warn(\"Failed to parse json:\", { url, error: e });\n                        return;\n                    }\n                    const status = jsonResponse.status;\n\n                    // 状态码说明：\n                    // 0=未扫码, 1=已确认登录, 4=已扫码未确认\n                    if (status === 1 || status === 4) {\n                        if (status === 4) {\n                            await updateTaskState?.({\n                                state: TaskState.SCANNED,\n                            });\n                        }\n\n                        page.off(\"response\", handleScanStatus);\n                        page.on(\"response\", handleAfterLogin);\n                    }\n                } catch (err) {\n                    cleanup();\n                    reject(err);\n                }\n            };\n\n            // 在页面加载之前就注册监听，防止丢失请求\n            task.steelBrowser?.on(\"disconnected\", handleBrowserClosed);\n            page.on(\"response\", handleScanStatus);\n        });\n    } finally {\n        await page.close();\n    }\n\n    if (executionState === undefined) return { code: 500, message: \"未知错误\", data: {} };\n\n    switch (executionState) {\n        case ExecutionState.BROWSER_CLOSED: {\n            const msg = \"浏览器已关闭，任务中断!\";\n            await updateTaskState?.({\n                state: TaskState.FAILED,\n                error: \"浏览器已关闭\",\n            });\n            return { code: 414, message: msg, data: {} };\n        }\n\n        case ExecutionState.TIMEOUT: {\n            const msg = \"等待用户扫码登录超时!\";\n            await updateTaskState?.({\n                state: TaskState.TIMEOUT,\n                error: msg,\n            });\n            task.logger.info(msg);\n            return { code: 414, message: msg, data: {} };\n        }\n\n        case ExecutionState.SUCCESS:\n            await updateTaskState?.({\n                state: TaskState.SUCCESS,\n                result: {\n                    cookie: JSON.stringify(await task.steelBrowserContext?.cookies()),\n                    token,\n                    userInfo: userInfo,\n                },\n            });\n            return {\n                code: 0,\n                message: \"成功\",\n                data: {\n                    cookie: JSON.stringify(await task.steelBrowserContext?.cookies()),\n                    token,\n                    userInfo,\n                },\n            };\n        default:\n            // 处理 RUNNING 和其他可能的状态\n            return { code: 500, message: \"任务执行中断\", data: {} };\n    }\n};\n","import { CommonAction, success } from \"@iflyrpa/share\";\nimport { ActiomCommonParams } from \"../../types\";\nimport { executeAction } from \"../../utils\";\nimport { rpaAction } from \"./rpa\";\nimport { rpaServer } from \"./rpa-server\";\n\nexport type WeixinLoginParams = ActiomCommonParams;\n\nexport type SteelAction = CommonAction<ActiomCommonParams, Record<string, unknown>>;\n\nexport const weixinLogin: SteelAction = async (task, params) => {\n    // params.actionType = \"rpa\";\n\n    if (params.actionType === \"rpa\") {\n        return rpaAction(task, params);\n    }\n\n    if (params.actionType === \"mockApi\") {\n        return success({}, \"暂不支持mockApi\");\n    }\n\n    if (params.actionType === \"server\") {\n        return rpaServer(task, params);\n    }\n\n    return executeAction(rpaAction)(task, params);\n};\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { downloadImage, getFilenameFromUrl, success } from \"@iflyrpa/share\";\nimport FormData from \"form-data\";\nimport type { Weixin } from \"../../types\";\nimport type { AspectRatio } from \"../../utils\";\nimport { calculateCropCoordinates, getFileState } from \"../../utils\";\nimport { Http } from \"../../utils/http\";\nimport type { PublishAction, WeixinmpPublishParams } from \".\";\n\ntype ColorResponse = {\n    width: number;\n    height: number;\n    theme_color: { r: number; g: number; b: number };\n};\ntype ShareInamgeInfo = {\n    cdn_url: string;\n    disable_live: 0;\n    disable_theme: 1;\n    file_id: number;\n    width: number;\n    height: number;\n    theme_color: string;\n    url: string;\n};\n\nconst saveDraft = (http: Http, params: WeixinmpPublishParams, data: Record<string, unknown>) => {\n    const formData = new FormData();\n\n    for (const [key, value] of Object.entries(data)) {\n        formData.append(key, value);\n    }\n\n    return http.api({\n        method: \"post\",\n        url: \"https://mp.weixin.qq.com/cgi-bin/operate_appmsg\",\n        params: {\n            token: params.token,\n            t: \"ajax-response\",\n            sub: \"update\",\n            type: 77,\n            lang: \"zh_CN\",\n        },\n        data: formData,\n    });\n};\n\nexport const mockAction: PublishAction = async (task, params) => {\n    const tmpCachePath = task.getTmpPath();\n    const http = new Http({\n        headers: {\n            cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n            origin: \"https://mp.weixin.qq.com\",\n            referer: `https://mp.weixin.qq.com/cgi-bin/appmsg?token=${params.token}&lang=zh_CN`,\n        },\n    });\n\n    // 1. 上传图片\n    const shareImageInfos: ShareInamgeInfo[] = [];\n    const cropResult: Record<string, string> = {};\n\n    if (params.banners && params.banners.length > 0) {\n        // 下载图片到本地\n        const images = await Promise.all(\n            params.banners.map((url) => {\n                const fileName = getFilenameFromUrl(url);\n                return downloadImage(url, path.join(tmpCachePath, fileName));\n            }),\n        );\n\n        for (let index = 0; index < images.length; index++) {\n            const image = images[index];\n            const fileState = getFileState(image);\n\n            const formData = new FormData();\n            formData.append(\"id\", `WU_FILE_${index + 1}`);\n            formData.append(\"name\", fileState.name);\n            formData.append(\"type\", fileState.type);\n            formData.append(\"lastModifiedDate\", fileState.lastModifiedDate);\n            formData.append(\"size\", fileState.size);\n            formData.append(\"file\", fs.createReadStream(image));\n\n            const response = await http.api<{ cdn_url: string; content: string }>({\n                method: \"post\",\n                url: `https://mp.weixin.qq.com/cgi-bin/filetransfer?action=upload_material&f=json&writetype=doublewrite&token=${params.token}&lang=zh_CN`,\n                data: formData,\n            });\n\n            // 获取图片的主题色\n            const colorResponseData = await http.api<ColorResponse>({\n                method: \"get\",\n                url: \"https://mp.weixin.qq.com/cgi-bin/filepage\",\n                params: {\n                    action: \"getimgext\",\n                    fileid: response.content,\n                    token: params.token,\n                    lang: \"zh_CN\",\n                    f: \"json\",\n                    ajax: 1,\n                },\n            });\n\n            const themeColor = colorResponseData.theme_color;\n\n            shareImageInfos.push({\n                cdn_url: response.cdn_url,\n                disable_live: 0,\n                disable_theme: 1,\n                file_id: Number(response.content),\n                width: colorResponseData.width,\n                height: colorResponseData.height,\n                theme_color: `rgb(${themeColor.r},${themeColor.g},${themeColor.b})`,\n                url: response.cdn_url,\n            });\n\n            // 第一张图片还需要添加头图裁切\n            if (index === 0) {\n                const cropFormData = new FormData();\n                cropFormData.append(\"imgurl\", response.cdn_url);\n\n                // 需要裁切 16:9，3:4，1:1 三种尺寸的图片\n                const cropRatios: AspectRatio[] = [\n                    [16, 9],\n                    [1, 1],\n                    [3, 4],\n                ];\n                cropFormData.append(\"size_count\", cropRatios.length);\n                const cropCoordinates = cropRatios.map((r, idx) => {\n                    const cropCoordinate = calculateCropCoordinates(\n                        colorResponseData.width,\n                        colorResponseData.height,\n                        r,\n                    );\n                    cropFormData.append(`size${idx}_x1`, cropCoordinate.x1);\n                    cropFormData.append(`size${idx}_y1`, cropCoordinate.y1);\n                    cropFormData.append(`size${idx}_x2`, cropCoordinate.x2);\n                    cropFormData.append(`size${idx}_y2`, cropCoordinate.y2);\n\n                    return { ratio: `${r[0]}_${r[1]}`, ...cropCoordinate };\n                });\n\n                cropFormData.append(\"token\", params.token);\n                cropFormData.append(\"lang\", \"zh_CN\");\n                cropFormData.append(\"f\", \"json\");\n                cropFormData.append(\"ajax\", 1);\n\n                const cropResponse = await http.api<{ result: Weixin.WeiXinCropResult[] }>({\n                    method: \"post\",\n                    url: \"https://mp.weixin.qq.com/cgi-bin/cropimage?action=crop_multi\",\n                    data: cropFormData,\n                });\n\n                cropResult.cdn_url_back0 = response.cdn_url; // 原图\n                cropResult.cdn_url0 = cropResponse.result[0].cdnurl; // 16:9\n                cropResult.cdn_235_1_url0 = cropResponse.result[0].cdnurl; // 16:9\n                cropResult.cdn_16_9_url0 = cropResponse.result[0].cdnurl; // 16:9\n                cropResult.cdn_1_1_url0 = cropResponse.result[1].cdnurl; // 1:1\n                cropResult.cdn_3_4_url0 = cropResponse.result[2].cdnurl; // 3:4\n                cropResult.crop_list0 = JSON.stringify({\n                    crop_list: cropCoordinates.map((it, idx) => ({\n                        file_id: cropResponse.result[idx].file_id,\n                        ratio: it.ratio,\n                        x1: 0,\n                        x2: 0,\n                        y1: 0,\n                        y2: 0,\n                    })),\n                    crop_list_percent: cropCoordinates.map((it, idx) => ({\n                        ...it,\n                        file_id: cropResponse.result[idx].file_id,\n                    })),\n                });\n            }\n        }\n    }\n\n    // 保存\n    const res = await saveDraft(http, params, {\n        ...cropResult,\n        token: params.token,\n        lang: \"zh_CN\",\n        f: \"json\",\n        ajax: 1,\n        operate_from: \"Chrome\",\n        title0: params.title,\n        content0: params.content,\n        share_imageinfo0: JSON.stringify(shareImageInfos),\n    });\n\n    return success(res);\n};\n","import path from \"node:path\";\nimport { downloadImage, getFilenameFromUrl, success } from \"@iflyrpa/share\";\n\nimport type { PublishAction, Source } from \"./index\";\n\nconst sourceText: Record<Source, string> = {\n    ai: \"内容由AI生成\",\n    official: \"素材来源官方媒体/网络新闻\",\n    fictional: \"内容剧情演绎，仅供娱乐\",\n    personal: \"个人观点，仅供参考\",\n};\n\nexport const rpaAction: PublishAction = async (task, params) => {\n    const commonCookies = {\n        path: \"/\",\n        secure: true,\n        domain: \"mp.weixin.qq.com\",\n        url: \"https://mp.weixin.qq.com\",\n        httpOnly: true,\n    };\n\n    const page = await task.createPage({\n        show: task.debug,\n        url:\n            params.url ||\n            `https://mp.weixin.qq.com/cgi-bin/appmsg?t=media/appmsg_edit_v2&action=edit&isNew=1&type=77&createType=8&token=${params.token}&lang=zh_CN`,\n        cookies: params.cookies?.map((it) => ({ ...it, ...commonCookies })) || [],\n    });\n\n    const tmpCachePath = task.getTmpPath();\n\n    // 0. 判断是否登录\n    try {\n        await page.waitForSelector(\"#editor_pannel\");\n    } catch (_error) {\n        return { code: 500, message: \"登录失效\", data: page.url() };\n    }\n\n    const container = page.locator(\"#editor_pannel\");\n\n    // 1. 添加图片\n    if (params.banners && params.banners.length > 0) {\n        const images = await Promise.all(\n            params.banners.map((url) => {\n                const fileName = getFilenameFromUrl(url);\n                return downloadImage(url, path.join(tmpCachePath, fileName));\n            }),\n        );\n\n        // 选择文件\n        const fileChooserPromise = page.waitForEvent(\"filechooser\");\n        await container.locator(\".image-selector__add\").hover();\n        await container\n            .locator(\".image-selector__add .pop-opr__list .pop-opr__item\")\n            .filter({ hasText: \"本地上传\" })\n            .click();\n        const fileChooser = await fileChooserPromise;\n        await fileChooser.setFiles(images);\n    }\n\n    // 2. 标题\n    const titleInstance = page.locator(\"#js_title_main textarea#title\");\n    await titleInstance.click();\n    await titleInstance.fill(params.title);\n\n    // 3. 正文\n    const descInstance = page.locator(\"#guide_words_main .ProseMirror\");\n    await descInstance.click();\n    await descInstance.fill(params.content);\n\n    // 4. 来源\n    if (params.source) {\n        await container.locator(\"#js_claim_source_area .js_claim_source_desc\").click();\n        await page\n            .locator(\".popover_article_claim_source .frm_radio_item label\")\n            .filter({ hasText: sourceText[params.source] })\n            .click();\n    }\n\n    // 5. 等待所有图片上传完成\n    if (params.banners && params.banners.length > 0) {\n        await page.waitForSelector(\"#editor_pannel .image-selector .image-selector__preview\");\n    }\n\n    // 6. 保存\n    if (params.draft) {\n        await container.locator(\"#bottom_main #js_submit button\").click();\n    } else {\n        await container.locator(\"#bottom_main #js_send button\").click();\n    }\n\n    return success(\"\");\n};\n","import type { CommonAction } from \"@iflyrpa/share\";\n\nimport type { ActiomCommonParams } from \"../../types\";\nimport { executeAction } from \"../../utils\";\nimport { mockAction } from \"./mock\";\nimport { rpaAction } from \"./rpa\";\n\nexport type Source = \"ai\" | \"official\" | \"fictional\" | \"personal\";\n\nexport interface WeixinmpPublishParams extends ActiomCommonParams {\n    token: string | number;\n    banners?: string[];\n    title: string; // 标题\n    content: string; // 正文\n    /**\n     * 内容由AI生成 - ai\n     * 素材来源官方媒体/网络新闻 - official\n     * 内容剧情演绎，仅供娱乐 - fictional\n     * 个人观点，仅供参考  - personal\n     */\n    source?: Source; // 来源\n    draft?: boolean; // 是否为草稿\n}\n\nexport type PublishAction = CommonAction<WeixinmpPublishParams>;\n\nexport const weixinmpPublish: PublishAction = async (task, params) => {\n    if (params.actionType === \"rpa\") {\n        return rpaAction(task, params);\n    }\n\n    if (params.actionType === \"mockApi\") {\n        return mockAction(task, params);\n    }\n\n    return executeAction(mockAction, rpaAction)(task, params);\n};\n","export const scanRetryMaxCount = 30;\n\nexport const QuotaType = {\n    Normal: \"kQuotaTypeMassSendNormal\",\n    ProductActivity: \"kQuotaTypeMassSendProductActivity\",\n};\n\nexport interface QuotaItem {\n    original_quota: number;\n    quota: number;\n    str_date: string;\n}\n\nexport interface QuotaDetail {\n    quota_item_list: QuotaItem[];\n    quota_type: string;\n}\n\n/**\n * 生成微信话题 HTML 代码\n * @param topics - 话题数组\n * @returns 生成的 HTML 字符串\n */\nexport function genTopicHTML(topics: string[]): string {\n    if (!topics || topics.length === 0) return \"\";\n    const rn = (): string => {\n        const O = Date.now().toString(36);\n        const B = Math.random().toString(36).substring(2, 8);\n        return `${O}-${B}`;\n    };\n    const aTags = topics\n        .map((topic) => {\n            return `<a class=\"wx_topic_link\" topic-id=\"${rn()}\" style=\"color: #576B95 !important;\" data-topic=\"1\">#${topic}</a>`;\n        })\n        .join(\"&nbsp;\");\n\n    return `<p style=\"line-height: 1.75;margin: 0px 0px 24px;padding: 0px;\" data-bothblock=\"0px\"><span leaf=\"\">${aTags}</span></p>`;\n}\n","import fs, { write } from \"node:fs\";\n// import https from \"node:https\";\nimport path from \"node:path\";\nimport {\n    downloadImage,\n    getFilenameFromUrl,\n    type ResponseData,\n    randomString,\n    sleep,\n    success,\n    TaskState,\n} from \"@iflyrpa/share\";\nimport type { AxiosResponse } from \"axios\";\nimport FormData from \"form-data\";\nimport type { AxiosProxyParams } from \"../../types\";\nimport { extractImgTag, getFileState, replaceImgSrc, stringifyError } from \"../../utils\";\nimport { classifyPublishError } from \"../../utils/errorMessages\";\nimport { Http } from \"../../utils/http\";\nimport { reportLogger } from \"../../utils/reportLogger\";\nimport type { PublishAction, WeixinPublishParams, WxInteraction, WxWhitelistUserInfo } from \"./index\";\nimport { genTopicHTML, type QuotaDetail, QuotaType, scanRetryMaxCount } from \"./utils\";\n\ntype CommonResponse<T = unknown> = T & {\n    base_resp?: { err_msg: string; ret: number };\n};\n\nconst GET_QRCODE_DEFAULT_ERROR = \"二维码获取异常，请稍后重试。\";\n\nconst errnoMap: Record<number | string, string> = {\n    200003: \"微信公众号号登录状态失效，请重新绑定账号后重试。\",\n    420001: \"封面图不支持GIF，请更换后重试。\",\n    200002: \"上传图片参数错误，请检查后重试。\",\n    200039: \"上传图片高度（像素）与宽度（像素）的乘积不能超过600万，请更换后重试。\",\n    153201: \"不支持发布审核中或转码中的视频\",\n    200007: \"登陆失败，请重新登陆账户后重试。\",\n    64703: \"摘要超出120字长度限制，请修改摘要后重试。\",\n    \"-4\": \"不支持发布审核中或转码中的视频\",\n    \"-2\": \"不支持发布审核中或转码中的视频\",\n    \"-1\": \"系统错误，请注意备份内容后重试\",\n    770001: \"不支持发布审核中或转码中的视频\",\n    200074: \"系统繁忙，请稍后重试！\",\n    64702: \"标题超出64字长度限制，请修改标题后重试。\",\n    64552: \"请检查阅读原文中的链接后重试。\",\n};\n\n// 不需要直接抛出的异常码，如 154019\nconst ignoreErrno = [\n    154019,\n    154011, // 原创校验中\n    154008, // 原创校验不通过\n    154009, // 原创校验通过\n];\n\n// 用户互动类型表（兼容传参文本与页面文本两种写法）\nconst userTypeMap: Record<string, 1 | 2 | 3> = {\n    所有用户: 1,\n    所有人: 1,\n    已关注的用户: 2,\n    已关注的人: 2,\n    已关注7天及以上的用户: 3,\n    已关注7天及以上的人: 3,\n};\n\nconst generatorFormData = (data: Record<string, unknown>) => {\n    const formData = new URLSearchParams();\n\n    for (const [key, value] of Object.entries(data)) {\n        formData.append(key, String(value));\n    }\n\n    return formData.toString();\n};\n\nexport const checkCopyrightStat = async <T>(http: Http, params: WeixinPublishParams, data: Record<string, unknown>) => {\n    let resData: T;\n\n    try {\n        resData = await http.api({\n            method: \"post\",\n            url: \"https://mp.weixin.qq.com/cgi-bin/masssend\",\n            params: {\n                action: \"get_appmsg_copyright_stat\",\n                token: params.token,\n                lang: \"zh_CN\",\n            },\n            data: generatorFormData(data),\n        });\n    } catch (error) {\n        resData = (error as ResponseData)?.data;\n    }\n\n    return resData;\n};\n\nexport const mockAction: PublishAction = async (task, params) => {\n    const fingerprint = \"4695500bc93ab4ce8fb2692da6564e04\";\n    const client_time_diff = Number(\"1743488763\") * 1 - Math.floor(new Date().getTime() / 1000);\n    const reporter = task.reportService?.repportTaskStatus ?? (() => Promise.resolve());\n\n    const tmpCachePath = task.getTmpPath();\n    const headers = {\n        \"User-Agent\":\n            \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.0.0\",\n        Cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        origin: \"https://mp.weixin.qq.com\",\n        referer: `https://mp.weixin.qq.com/cgi-bin/appmsg?t=media/appmsg_edit&action=edit&isNew=1&type=77&createType=0&token=${params.token}&lang=zh_CN&timestamp=${Date.now()}`,\n    };\n    const args: AxiosProxyParams = [\n        { headers },\n        task.logger,\n        params.proxyLoc,\n        params.accountId,\n        \"weixin\", // 业务标识\n    ];\n    const http = new Http({ headers });\n    const proxyHttp = new Http(...args);\n\n    // 添加响应拦截器\n    const baseRespFinder = (response: AxiosResponse<CommonResponse> | undefined) => {\n        const responseData = response?.data;\n        const msgType = params.saveType === \"draft\" ? \"同步\" : \"发布\";\n\n        // 检查响应中的 errno 字段\n        if (\n            response &&\n            responseData?.base_resp &&\n            responseData.base_resp.ret !== 0 &&\n            !ignoreErrno.includes(responseData.base_resp.ret)\n        ) {\n            const errmsg =\n                errnoMap[responseData.base_resp.ret] ||\n                response.config.defaultErrorMsg ||\n                responseData.base_resp.err_msg ||\n                `文章${msgType}异常，请稍后重试。`;\n\n            return {\n                code: errnoMap[responseData.base_resp.ret] ? 414 : 500,\n                message: errmsg,\n                data: responseData,\n            };\n        }\n    };\n    http.addResponseInterceptor<CommonResponse>(baseRespFinder);\n    proxyHttp.addResponseInterceptor<CommonResponse>(baseRespFinder);\n\n    // 0. 校验登录\n    await http.api({\n        method: \"get\",\n        url: \"https://mp.weixin.qq.com/cgi-bin/appmsgpublish\",\n        params: {\n            fingerprint,\n            sub: \"list\",\n            begin: 0,\n            count: 10,\n            query: \"\",\n            type: 101_1_102_103,\n            show_type: \"\",\n            free_publish_type: 1_102_103,\n            sub_action: \"list_ex\",\n            search_card: 0,\n            token: params.token,\n            lang: \"zh_CN\",\n            f: \"json\",\n            ajax: 1,\n        },\n    });\n\n    // 1. 提取并上传正文中的图片\n    const uploadImages = async (images: string[]) => {\n        const cloudImages: Array<{ cdn_url: string; content: string }> = [];\n\n        // 下载图片到本地\n        const localImages = await Promise.all(\n            images.map((url) => {\n                let fileName = getFilenameFromUrl(url);\n                const ext = path.extname(fileName);\n                fileName = ext ? fileName : `${fileName}.png`;\n                return downloadImage(url, path.join(tmpCachePath, fileName));\n            }),\n        );\n\n        for (let index = 0; index < images.length; index++) {\n            const image = localImages[index];\n            const fileState = getFileState(image);\n\n            const formData = new FormData();\n            formData.append(\"id\", `WU_FILE_${index + 1}`);\n            formData.append(\"name\", fileState.name);\n            formData.append(\"type\", fileState.type);\n            formData.append(\"lastModifiedDate\", fileState.lastModifiedDate);\n            formData.append(\"size\", fileState.size);\n            formData.append(\"file\", fs.createReadStream(image));\n\n            const response = await http.api<(typeof cloudImages)[0]>(\n                {\n                    method: \"post\",\n                    url: `https://mp.weixin.qq.com/cgi-bin/filetransfer?action=upload_material&f=json&writetype=doublewrite&token=${params.token}&lang=zh_CN`,\n                    data: formData,\n                    defaultErrorMsg: \"图片上传异常，请稍后重试发布。\",\n                },\n                { retries: 3, retryDelay: 20, timeout: 2 * 60 * 1000 },\n            ); // 增加到2分钟，适应大图片上传\n\n            cloudImages.push(response);\n        }\n\n        return cloudImages;\n    };\n\n    const originContentImages = extractImgTag(params.content);\n    const targetContentImages = await uploadImages(originContentImages);\n    // 2. 替换正文中的图片\n    const content = replaceImgSrc(\n        params.settingInfo.wxTopic && params.settingInfo.wxTopic.length > 0\n            ? params.content + genTopicHTML(params.settingInfo.wxTopic)\n            : params.content,\n        (dom) => {\n            if (dom.attribs.src) {\n                const idx = originContentImages.findIndex((it) => it === dom.attribs.src.replace(/&amp;/g, \"&\"));\n                dom.attribs.src = targetContentImages[idx].cdn_url;\n                dom.attribs.class = \"rich_pass wxw-img js_insertlocalimg\";\n                dom.attribs.style = \"\";\n            }\n            return dom;\n        },\n    );\n\n    // 3. 上传封面图片\n    const coverRes = await uploadImages(params.settingInfo.wxCover ? [params.settingInfo.wxCover] : []);\n\n    // 4. 原创声明白名单有效性判断与生成转载白名单\n    let oriWhitelist = null;\n\n    if (params.settingInfo?.wxCopyright && params.settingInfo?.wxWhitelist) {\n        const _oriWhitelist = params.settingInfo.wxWhitelist;\n\n        if (_oriWhitelist && _oriWhitelist.length > 0) {\n            const white_list = [];\n\n            const white_list_user = {\n                nickname: \"\",\n                title: \"可修改文章\",\n                openid: \"\",\n                wx_name: \"\",\n                username: \"\",\n                avatar: \"\",\n                can_modify: \"1\",\n                can_hide_source: \"0\",\n                can_reward: \"0\",\n            };\n\n            for (const _user of _oriWhitelist) {\n                const userInfo_res = await http.api<{ search_list: WxWhitelistUserInfo[] }>({\n                    method: \"post\",\n                    url: \"https://mp.weixin.qq.com/cgi-bin/appmsgcopyright?action=searchacct\",\n                    params: {\n                        action: \"searchacct\",\n                    },\n                    data: generatorFormData({\n                        lang: \"zh_CN\",\n                        f: \"json\",\n                        ajax: 1,\n                        token: params.token,\n                        random: Math.random().toString(),\n                        username: _user,\n                    }),\n                    defaultErrorMsg: \"搜索用户信息失败\",\n                });\n\n                if (userInfo_res.search_list.length > 0) {\n                    const userInfo_resJson = userInfo_res.search_list[0];\n                    white_list_user.nickname = userInfo_resJson.nickname;\n                    white_list_user.openid = userInfo_resJson.openid;\n                    white_list_user.avatar = userInfo_resJson.pic_url;\n                    white_list_user.username = userInfo_resJson.username;\n                    white_list_user.wx_name = userInfo_resJson.wx_name;\n                    white_list.push({ ...white_list_user });\n                } else {\n                    return { code: 414, message: `白名单用户：${_user} 未搜索到，请确定输入是否正确！`, data: \"\" };\n                }\n            }\n            oriWhitelist = white_list.length > 0 ? JSON.stringify({ white_list: white_list }) : \"\";\n        }\n    }\n\n    // 5. 赞赏设置\n    let writerid = null;\n    let reply_id = null;\n    if (params.settingInfo.wxCopyright && params.settingInfo.wxRewardTarget) {\n        async function getWriterList() {\n            const res = await http.api({\n                method: \"get\",\n                url: \"https://mp.weixin.qq.com/acct/writermgr\",\n                params: {\n                    action: \"get_writer_list\",\n                    fingerprint,\n                    token: params.token,\n                    lang: \"zh_CN\",\n                    f: \"json\",\n                    ajax: 1,\n                },\n            });\n\n            return res.pageinfo.writerlist || [];\n        }\n\n        async function getRewardText(): Promise<{ text: string; reply_id: string }[]> {\n            const res = await http.api({\n                method: \"get\",\n                url: \"https://mp.weixin.qq.com/merchant/reward\",\n                params: {\n                    action: \"getautoreply\",\n                    fingerprint,\n                    token: params.token,\n                    lang: \"zh_CN\",\n                    f: \"json\",\n                    ajax: 1,\n                },\n            });\n\n            return res.reply_infos;\n        }\n\n        //遍历绑定信息\n        for (const _type in params.settingInfo.wxRewardTarget) {\n            if (_type === \"author\") {\n                if ((await getWriterList()).length === 0) {\n                    // 获取二维码等待用户绑定\n                    const rewardbind = await http.api({\n                        method: \"get\",\n                        url: \"https://mp.weixin.qq.com/acct/writermgr\",\n                        params: {\n                            action: \"get_rewardbind_qrcode\",\n                            random: Math.random().toString(),\n                            fingerprint,\n                            token: params.token,\n                            lang: \"zh_CN\",\n                            f: \"json\",\n                            ajax: 1,\n                        },\n                        defaultErrorMsg: GET_QRCODE_DEFAULT_ERROR,\n                    });\n\n                    const rewardBuffer = Buffer.from(rewardbind.qrcode_base64, \"base64\");\n                    const rewardFilePath = path.join(tmpCachePath, \"weixin_reward.jpg\");\n                    fs.writeFileSync(rewardFilePath, new Uint8Array(rewardBuffer));\n\n                    params.safeQrcodeCallback?.(rewardFilePath);\n\n                    const task_id = rewardbind.task_id;\n\n                    let code = null;\n\n                    for (let i = 0; i < scanRetryMaxCount; i++) {\n                        await sleep(2000);\n\n                        const checkScanResult = await http.api<{ qrcode_status: number }>({\n                            method: \"get\",\n                            url: \"https://mp.weixin.qq.com/acct/writermgr\",\n                            params: {\n                                action: \"query_rewardbind_qrcode_status\",\n                                task_id: task_id,\n                                fingerprint,\n                                lang: \"zh_CN\",\n                                f: \"json\",\n                                ajax: 1,\n                                token: params.token,\n                                timespam: Date.now(),\n                            },\n                        });\n\n                        code = checkScanResult.qrcode_status;\n\n                        if (code === 2 && (await getWriterList()).length > 0) {\n                            break;\n                        }\n\n                        if (i === scanRetryMaxCount - 1) {\n                            return { code: 414, message: \"二维码已过期，请重试绑定。\", data: \"\" };\n                        }\n                    }\n                }\n\n                // 判断为赞赏作者\n                const _writer = await getWriterList();\n                for (const _writer_item of _writer) {\n                    if (_writer_item.nickname === params.settingInfo.wxRewardTarget[_type]) {\n                        writerid = _writer_item.writerid;\n                    }\n                }\n                if (!writerid) {\n                    // 没找到作者id\n                    return { code: 414, message: \"未匹配到赞赏绑定用户，请确认用户名与绑定是否正常！\", data: \"\" };\n                }\n\n                if (params.settingInfo?.wxRewardText) {\n                    // 判断文案是否已添加\n                    const rewardList = await getRewardText();\n\n                    const matchdID =\n                        rewardList.find((reward) => reward.text === params.settingInfo.wxRewardText)?.reply_id ?? null;\n\n                    if (rewardList.length === 0 || !matchdID) {\n                        await http.api({\n                            method: \"post\",\n                            url: \"https://mp.weixin.qq.com/merchant/reward\",\n                            params: {\n                                action: \"addautoreply\",\n                            },\n                            data: generatorFormData({\n                                type: 1,\n                                fingerprint,\n                                token: params.token,\n                                lang: \"zh_CN\",\n                                f: \"json\",\n                                ajax: 1,\n                                text: params.settingInfo.wxRewardText,\n                            }),\n                        });\n                    } else {\n                        reply_id = matchdID;\n                    }\n\n                    if (!matchdID) {\n                        for (const _reply_item of await getRewardText()) {\n                            reply_id = (await getRewardText()).find(\n                                (reward) => reward.text === params.settingInfo.wxRewardText,\n                            )?.reply_id;\n                        }\n                        if (!reply_id) {\n                            return { code: 414, message: \"赞赏文案添加失败，请重新检查\", data: \"\" };\n                        }\n                    }\n                }\n            } else if (_type === \"project\") {\n                // 判断为公益捐赠\n            }\n        }\n    }\n    // 留言设置\n    const wxInteractionInfo = (() => {\n        const _wxInteraction = {\n            need_open_comment0: 0,\n            only_fans_can_comment0: 0,\n            only_fans_days_can_comment0: 0,\n            reply_flag0: 2,\n            auto_elect_comment0: 0,\n            auto_elect_reply0: 1,\n            open_fansmsg0: 0,\n        };\n\n        const type = params?.settingInfo?.wxInteraction?.Type ?? \"\";\n        if (type === \"public\") {\n            const _opt = params?.settingInfo?.wxInteraction?.Option;\n            if (!_opt || !_opt.Comment || !_opt.reply || _opt.elect_comment == null || _opt.elect_reply == null)\n                return null;\n\n            const commentType = userTypeMap[_opt.Comment];\n            const replyType = userTypeMap[_opt.reply] + 1;\n\n            // 设置评论权限\n            _wxInteraction.need_open_comment0 = 1;\n            switch (commentType) {\n                case 1:\n                    _wxInteraction.only_fans_can_comment0 = 0;\n                    _wxInteraction.only_fans_days_can_comment0 = 0;\n                    break;\n                case 2:\n                    _wxInteraction.only_fans_can_comment0 = 1;\n                    _wxInteraction.only_fans_days_can_comment0 = 0;\n                    break;\n                case 3:\n                    _wxInteraction.only_fans_can_comment0 = 0;\n                    _wxInteraction.only_fans_days_can_comment0 = 1;\n                    break;\n            }\n\n            // 设置回复权限等级\n            _wxInteraction.reply_flag0 = replyType;\n\n            // 精选功能\n            _wxInteraction.auto_elect_comment0 = _opt.elect_comment ? userTypeMap[_opt.Comment] : 0;\n            _wxInteraction.auto_elect_reply0 = _opt.elect_reply ? userTypeMap[_opt.reply] : 1;\n\n            return _wxInteraction;\n        }\n\n        if (type === \"private\") {\n            _wxInteraction.open_fansmsg0 = 1;\n            return _wxInteraction;\n        }\n\n        // 其他未启用评论功能的情形\n        return _wxInteraction;\n    })();\n\n    if (!wxInteractionInfo) return { code: 414, message: \"互动参数设置错误，请检查参数设置！\", data: \"\" };\n\n    // 4. 保存为草稿\n    const draftData = {\n        lang: \"zh_CN\",\n        f: \"json\",\n        ajax: 1,\n        count: 1,\n        operate_from: \"Chrome\",\n        isnew: 0,\n        articlenum: 1,\n        pre_timesend_set: 0,\n        is_finder_video0: 0,\n        finder_draft_id0: 0,\n        applyori0: 0,\n        can_reward0: writerid ? 1 : 0,\n        pay_gifts_count0: 0,\n        is_video_recommend0: -1,\n        writerid0: writerid ? writerid : 0,\n        auto_gen_digest0: 0,\n        last_choose_cover_from0: 0,\n        need_open_comment0: wxInteractionInfo.need_open_comment0,\n        only_fans_can_comment0: wxInteractionInfo.only_fans_can_comment0,\n        only_fans_days_can_comment0: wxInteractionInfo.only_fans_days_can_comment0,\n        reply_flag0: wxInteractionInfo.reply_flag0,\n        auto_elect_comment0: wxInteractionInfo.auto_elect_comment0,\n        auto_elect_reply0: wxInteractionInfo.auto_elect_reply0,\n        reward_reply_id0: params.settingInfo?.wxRewardText ? (reply_id ? reply_id : 0) : 0,\n        not_pay_can_comment0: 0,\n        data_seq: 0,\n        msg_index_id0: \"\",\n\n        token: params.token,\n        AppMsgId: params.appMsgId || \"\",\n        title0: params.title,\n        author0: params?.settingInfo?.wxAuthor || \"\",\n        digest0: params?.settingInfo?.wxAbstract || \"\",\n        content0: content || \"\",\n        sourceurl0: params?.settingInfo?.wxOriginalText || \"\",\n        cdn_url0: coverRes[0]?.cdn_url || \"\",\n        copyright_type0: params?.settingInfo?.wxCopyright ? 1 : 0,\n        allow_reprint0: params?.settingInfo?.wxCopyright ? 0 : \"\",\n        allow_reprint_modify0: params?.settingInfo?.wxCopyright ? 0 : \"\",\n        ori_white_list0: params?.settingInfo?.wxCopyright ? oriWhitelist : \"\",\n        open_fansmsg0: wxInteractionInfo.open_fansmsg0,\n        allow_fast_reprint0: params?.settingInfo?.wxQuickReprint ? 1 : 0,\n        disable_recommend0: params?.settingInfo?.wxNotAllowRecommend ? 1 : 0,\n        claim_source_type0: params?.settingInfo?.wxCreationSource?.[0] || \"\",\n        appmsg_album_info0: JSON.stringify({\n            appmsg_album_infos: params.settingInfo?.wxCollectionInfo ? [params.settingInfo.wxCollectionInfo] : [],\n        }),\n\n        masssend_check: 1,\n        is_masssend: 1,\n    };\n\n    task._timerRecord.PrePublish = Date.now();\n\n    const { appMsgId } = await http.api<{ appMsgId: string }>(\n        {\n            method: \"post\",\n            url: \"https://mp.weixin.qq.com/cgi-bin/operate_appmsg\",\n            params: {\n                token: params.token,\n                t: \"ajax-response\",\n                sub: \"create\",\n                type: 77,\n                lang: \"zh_CN\",\n            },\n            data: generatorFormData(draftData),\n            defaultErrorMsg: \"创建草稿失败，请稍后重试发布。\",\n        },\n        { timeout: 60 * 1000 },\n    );\n\n    // 如果只需要保存为草稿，直接返回 appMsgId\n    if (params.saveType === \"draft\") {\n        return { code: 0, data: appMsgId, message: \"微信公众号保存草稿成功。\" };\n    }\n\n    let checkTimes = 0;\n    let copyrightStatRes: { base_resp: { ret: number }; list?: string } = { base_resp: { ret: -1 }, list: \"\" };\n    do {\n        checkTimes++;\n        const copyrightStat = http.api<{ base_resp: { ret: number }; list?: string }>({\n            method: \"post\",\n            url: \"https://mp.weixin.qq.com/cgi-bin/masssend\",\n            params: {\n                action: \"get_appmsg_copyright_stat\",\n                token: params.token,\n                lang: \"zh_CN\",\n            },\n            data: generatorFormData({\n                token: params.token,\n                lang: \"zh_CN\",\n                f: \"json\",\n                ajax: 1,\n                fingerprint,\n                random: Math.random().toString(),\n                first_check: checkTimes === 1 ? 1 : 0,\n                type: 10,\n                appMsgId,\n            }),\n        });\n\n        copyrightStatRes = await copyrightStat;\n        if (copyrightStatRes.base_resp.ret === 154008 && copyrightStatRes?.list)\n            return {\n                code: 414,\n                message: \"文章内容未通过原创校验，请修改后重试！\",\n                data: JSON.parse(copyrightStatRes.list).list,\n            };\n    } while (copyrightStatRes.base_resp.ret === 154011 && checkTimes < 10);\n\n    const masssendpage = () => {\n        return http.api<CommonResponse<{ operation_seq: string; quota_detail_list: QuotaDetail[] }>>({\n            method: \"get\",\n            url: \"https://mp.weixin.qq.com/cgi-bin/masssendpage\",\n            params: {\n                token: params.token,\n                lang: \"zh_CN\",\n                f: \"json\",\n                ajax: 1,\n                preview_appmsgid: appMsgId,\n                fingerprint,\n                random: Math.random().toString(),\n            },\n            defaultErrorMsg: \"创建草稿失败，请稍后重试发布。\",\n        });\n    };\n\n    // 4. 预览\n    let massSendRes = await masssendpage();\n    // 判断是否需要同意群发声明\n    if (massSendRes.base_resp?.ret === 154019) {\n        await http.api({\n            method: \"post\",\n            url: \"https://mp.weixin.qq.com/cgi-bin/setprotocolsign\",\n            params: {\n                cgi: \"setprotocolsign\",\n                lang: \"zh_CN\",\n                token: params.token,\n            },\n            data: generatorFormData({\n                token: params.token,\n                lang: \"zh_CN\",\n                f: \"json\",\n                ajax: 1,\n                fingerprint,\n                random: Math.random().toString(),\n                issigned: 1,\n            }),\n        });\n        massSendRes = await masssendpage();\n    }\n\n    // 判断是否还有群发次数\n    const { operation_seq, quota_detail_list = [] } = massSendRes;\n\n    // 群发时需要判断是否还有群发次数\n    if (params.masssend) {\n        const quotaDetail = quota_detail_list.find((it) => it.quota_type === QuotaType.Normal);\n        if (!quotaDetail?.quota_item_list[0]?.quota) {\n            return { code: 414, message: \"今日群发次数用尽，请明天再试。\", data: \"\" };\n        }\n    }\n\n    // 非群发时会多一个接口\n    if (!params.masssend) {\n        await http.api({\n            method: \"post\",\n            url: \"https://mp.weixin.qq.com/cgi-bin/masssend\",\n            params: {\n                t: \"ajax-response\",\n                for_check: 1,\n                is_release_publish_page: 1,\n                token: params.token,\n                lang: \"zh_CN\",\n            },\n            data: generatorFormData({\n                appmsgid: appMsgId,\n                fingerprint,\n                token: params.token,\n                lang: \"zh_CN\",\n                f: \"json\",\n                ajax: 1,\n            }),\n        });\n    }\n\n    // check\n    await http.api({\n        method: \"post\",\n        url: \"https://mp.weixin.qq.com/cgi-bin/masssend?action=check_same_material\",\n        data: generatorFormData({\n            msgid: appMsgId,\n            fingerprint,\n            token: params.token,\n            lang: \"zh_CN\",\n            f: \"json\",\n            ajax: 1,\n            random: Math.random().toString(),\n        }),\n    });\n\n    const copyrightStatData = {\n        token: params.token,\n        lang: \"zh_CN\",\n        f: \"json\",\n        ajax: 1,\n        random: Math.random().toString(),\n        fingerprint,\n        first_check: 1,\n        type: 10,\n        appmsgid: appMsgId,\n    };\n    for (let i = 0; i < 10; i++) {\n        await sleep(1000);\n        const lastData = { ...copyrightStatData, first_check: i === 0 ? 1 : 0 };\n        const checkCopyrightStatRes = await checkCopyrightStat<{ open_ad_reprint_status?: string }>(\n            http,\n            params,\n            lastData,\n        );\n        if (checkCopyrightStatRes.open_ad_reprint_status) {\n            break;\n        }\n    }\n\n    await sleep(300);\n\n    await http.api({\n        method: \"post\",\n        url: \"https://mp.weixin.qq.com/cgi-bin/masssend\",\n        params: {\n            action: \"check_ad\",\n            token: params.token,\n            lang: \"zh_CN\",\n        },\n        data: generatorFormData({\n            appmsg_id: appMsgId,\n            fingerprint,\n            token: params.token,\n            lang: \"zh_CN\",\n            f: \"json\",\n            ajax: 1,\n            is_release_publish_page: params.masssend ? 0 : 1, // 群发时为 0，否则为 1\n            send_time: params.settingInfo.timer ? params.settingInfo.timer : 0,\n            random: Math.random().toString(),\n        }),\n    });\n\n    await sleep(300);\n\n    await http.api({\n        method: \"post\",\n        url: \"https://mp.weixin.qq.com/cgi-bin/masssend\",\n        params: {\n            action: \"check_music\",\n        },\n        data: generatorFormData({\n            appmsgid: appMsgId,\n            masssend_check: 1,\n            fingerprint,\n            token: params.token,\n            lang: \"zh_CN\",\n            f: \"json\",\n            ajax: 1,\n            random: Math.random().toString(),\n        }),\n    });\n\n    await sleep(300);\n\n    // 5. 获取群发文章ticket接口\n    const getTicketResult = await http.api<{ ticket: string; operation_seq: string }>({\n        method: \"post\",\n        url: \"https://mp.weixin.qq.com/misc/safeassistant\",\n        params: {\n            token: params.token,\n            lang: \"zh_CN\",\n            1: 1,\n        },\n        data: generatorFormData({\n            token: params.token,\n            lang: \"zh_CN\",\n            f: \"json\",\n            ajax: 1,\n            action: \"get_ticket\",\n            fingerprint,\n            random: Math.random().toString(),\n        }),\n        defaultErrorMsg: GET_QRCODE_DEFAULT_ERROR,\n    });\n\n    await sleep(300);\n\n    // 6. 获取群发文章 uuid\n    const getUuidResult = await http.api<{ uuid: string; genuuid_res: number }>({\n        method: \"post\",\n        url: \"https://mp.weixin.qq.com/safe/safeqrconnect\",\n        params: {\n            token: params.token,\n            lang: \"zh_CN\",\n            1: 1,\n        },\n        data: generatorFormData({\n            token: params.token,\n            lang: \"zh_CN\",\n            f: \"json\",\n            ajax: 1,\n            state: 0,\n            login_type: \"safe_center\",\n            type: \"json\",\n            ticket: getTicketResult.ticket,\n            fingerprint,\n            random: Math.random().toString(),\n        }),\n        defaultErrorMsg: GET_QRCODE_DEFAULT_ERROR,\n    });\n    await sleep(1000);\n\n    if (getUuidResult.genuuid_res !== 0) {\n        return { code: 414, message: GET_QRCODE_DEFAULT_ERROR, data: \"\" };\n    }\n    const uuid = getUuidResult.uuid;\n    await sleep(1000);\n\n    // 7. 获取验证二维码\n    const qrcodeResult = await http.api({\n        method: \"get\",\n        url: \"https://mp.weixin.qq.com/safe/safeqrcode\",\n        params: {\n            action: \"check\",\n            type: \"msgs\",\n            service_type: 1,\n            ticket: getTicketResult.ticket,\n            uuid,\n            msgid: operation_seq,\n            open_email: !!params.settingInfo.timer,\n            ...(params.masssend ? {} : { publish_type: 1 }),\n        },\n        defaultErrorMsg: GET_QRCODE_DEFAULT_ERROR,\n        responseType: \"arraybuffer\",\n    });\n\n    const qrcodeBuffer = Buffer.from(qrcodeResult);\n    const qrcodeFilePath = path.join(tmpCachePath, `weixin_qrcode_${Date.now()}.jpg`);\n    fs.writeFileSync(qrcodeFilePath, new Uint8Array(qrcodeBuffer));\n\n    const updateTaskState = task.taskStageStore?.update?.bind(task.taskStageStore, task.taskId || \"\");\n\n    if (params.safeQrcodeCallback) {\n        params.safeQrcodeCallback?.(qrcodeFilePath);\n    } else {\n        const data = `data:image/jpeg;base64,${Buffer.from(qrcodeResult).toString(\"base64\")}`;\n        await reporter(10041, \"请扫码确认发布!\", data);\n\n        await updateTaskState?.({\n            state: TaskState.WAIT_SCAN,\n            result: {\n                qrImg: data,\n            },\n        });\n    }\n\n    // 8. 验证二维码结果\n    let code = \"\";\n    for (let i = 0; i < scanRetryMaxCount; i++) {\n        await sleep(2000);\n\n        const checkScanResult = await http.api<{ code: string; errcode: number }>({\n            method: \"post\",\n            url: \"https://mp.weixin.qq.com/safe/safeuuid\",\n            params: {\n                token: params.token,\n                lang: \"zh_CN\",\n                timespam: Date.now(),\n            },\n            data: generatorFormData({\n                token: params.token,\n                lang: \"zh_CN\",\n                f: \"json\",\n                ajax: 1,\n                uuid,\n                action: \"json\",\n                type: \"json\",\n                fingerprint,\n                random: Math.random().toString(),\n            }),\n        });\n\n        if (checkScanResult.errcode === 405 && checkScanResult.code) {\n            code = checkScanResult.code;\n            break;\n        }\n\n        if (i === scanRetryMaxCount - 1) {\n            const message = \"二维码已过期，请重试发布。\";\n            await updateTaskState?.({\n                state: TaskState.FAILED,\n                error: message,\n            });\n\n            return { code: 414, message, data: \"\" };\n        }\n    }\n\n    // 非群发时会多一个接口\n    if (!params.masssend) {\n        await http.api({\n            method: \"post\",\n            url: \"https://mp.weixin.qq.com/misc/safeassistant\",\n            params: {\n                token: params.token,\n                lang: \"zh_CN\",\n                1: 1,\n            },\n            data: generatorFormData({\n                token: params.token,\n                lang: \"zh_CN\",\n                f: \"json\",\n                ajax: 1,\n                fingerprint,\n                random: Math.random().toString(),\n                action: \"get_uuid\",\n                uuid,\n            }),\n        });\n    }\n\n    const publishData = generatorFormData({\n        token: params.token,\n        lang: \"zh_CN\",\n        f: \"json\",\n        ajax: \"1\",\n        fingerprint,\n        random: Math.random().toString(),\n        ack: \"\",\n        code,\n        reprint_info: \"\",\n        reprint_confirm: \"0\",\n        list: \"\",\n        groupid: \"\",\n        sex: \"0\",\n        country: \"\",\n        province: \"\",\n        city: \"\",\n        send_time: params.settingInfo.timer ? params.settingInfo.timer : \"0\",\n        type: \"10\",\n        share_page: \"1\",\n        synctxweibo: \"0\",\n        operation_seq,\n        req_id: randomString(32),\n        req_time: new Date().getTime() + client_time_diff * 1e3,\n        sync_version: \"1\",\n        isFreePublish: params.masssend ? \"false\" : \"true\",\n        appmsgid: appMsgId,\n        isMulti: \"0\",\n        direct_send: \"1\",\n        isNeedCode: \"true\",\n        userType: \"1\",\n    });\n\n    // 9. 发送群发通知\n    try {\n        await proxyHttp.api<{ code: string; errcode: number; proxyInfo: Record<string, unknown> }>(\n            {\n                method: \"post\",\n                url: \"https://mp.weixin.qq.com/cgi-bin/masssend\",\n                params: {\n                    t: \"ajax-response\",\n                    token: params.token,\n                    lang: \"zh_CN\",\n                    ...(params.masssend\n                        ? {\n                              ...(params.settingInfo.timer\n                                  ? {\n                                        action: \"time_send\",\n                                    }\n                                  : {}),\n                          }\n                        : { is_release_publish_page: 1 }),\n                },\n                data: publishData,\n                defaultErrorMsg: params.masssend\n                    ? \"文章群发异常，请尝试关闭群发或稍后重试。\"\n                    : \"文章发布异常，请稍后重试。\",\n            },\n            { retries: 3, retryDelay: 500, timeout: 12 * 1000 },\n        );\n    } catch (error) {\n        const handledError = Http.handleApiError(error);\n        // 代理连接超时(599) 与网络/服务端错误(500/502/503/504)：重试耗尽后直接返回分类文案，\n        // 不再 throw 走 executeAction 的 RPA 兜底。code 归一为 414，使 executeAction 视为终止结果。\n        const classified = classifyPublishError(handledError);\n        if (classified) {\n            // 用户侧只给分类文案，原始错误信息记进日志；debug 模式下追加代理信息便于排查\n            const message = `${classified.userMessage}${task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n            task.logger.error(\n                `[weixinPublish] ${classified.category}，直接返回: ${handledError.message} (code=${handledError.code})`,\n                stringifyError(handledError),\n            );\n            await updateTaskState?.({\n                state: TaskState.FAILED,\n                error: message,\n            });\n            return { code: 414, data: \"\", message };\n        }\n        // 其它错误码维持原有逻辑，抛出以便上层 executeAction 走 RPA 兜底\n        throw error;\n    }\n\n    if (params.saveType === \"publish\") {\n        reportLogger({\n            token: params.huiwenToken || \"\",\n            enverionment: task.enverionment || \"development\",\n            postId: params.articleId,\n            eip: proxyHttp.proxyInfo,\n            accountId: params.accountId,\n            uid: params.uid,\n            platform: \"weixin\",\n            publishParams: publishData,\n        });\n    }\n\n    await updateTaskState?.({\n        state: TaskState.SUCCESS,\n        result: {\n            response: appMsgId,\n        },\n    });\n\n    return success(appMsgId, `微信公众号发布完成！${task.debug ? ` ${http.proxyInfo}` : \"\"}`);\n};\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport type { CookieMap, Response } from \"@iflyrpa/share\";\nimport { downloadImage, getFilenameFromUrl, success } from \"@iflyrpa/share\";\nimport axios from \"axios\";\n\nimport { copyHtmlToClipboard, PopupListener, parseUrlQueryString, TimeFormatter } from \"../../utils\";\nimport type { PublishAction } from \"./index\";\nimport { scanRetryMaxCount } from \"./utils\";\n\n// 等待二维码验证结果最长时间\nconst waitQrcodeResultMaxTime = scanRetryMaxCount * 2 * 1000;\n\nexport const rpaAction: PublishAction = async (task, params) => {\n    const tmpCachePath = task.getTmpPath();\n\n    const commonCookies = {\n        path: \"/\",\n        secure: true,\n        domain: \"mp.weixin.qq.com\",\n        url: \"https://mp.weixin.qq.com\",\n        httpOnly: true,\n    };\n\n    const urlParams = {\n        action: \"edit\",\n        type: 77,\n        token: params.token,\n        lang: \"zh_CN\",\n        timestamp: Date.now(),\n        appmsgid: params.appMsgId,\n    };\n\n    if (params.settingInfo?.wxRewardTarget) {\n        const urlRewardParams = {\n            action: \"inviteauthor\",\n            token: params.token,\n            lang: \"zh_CN\",\n        };\n        const wxRewardPage = await task.createPage({\n            show: task.debug,\n            url:\n                params.url ||\n                `https://mp.weixin.qq.com/cgi-bin/safecenterstatus?${Object.entries(urlRewardParams)\n                    .map((it) => it.join(\"=\"))\n                    .join(\"&\")}`,\n            cookies: params.cookies?.map((it) => ({ ...it, ...commonCookies })) || [],\n        });\n\n        const reward_page = wxRewardPage.locator(\"#app\");\n        const isAddRewarder = reward_page\n            .locator(\".author_card_bd.weui-desktop-vm_primary\")\n            .filter({ hasText: params.settingInfo.wxRewardTarget.author })\n            .count();\n        if ((await isAddRewarder) === 0) {\n            await reward_page.locator(\".weui-desktop-panel__hd-right\").click();\n            try {\n                try {\n                    await wxRewardPage.waitForSelector(\".invite-qrcode\", { state: \"visible\", timeout: 20000 });\n                    const qrcodeSrc = await reward_page.locator(\".invite-qrcode\").getAttribute(\"src\");\n\n                    if (qrcodeSrc) {\n                        const rewardBuffer = Buffer.from(qrcodeSrc.replace(/^data:image\\/\\w+;base64,/, \"\"), \"base64\");\n                        const rewardFilePath = path.join(tmpCachePath, \"weixin_reward.jpg\");\n                        fs.writeFileSync(rewardFilePath, new Uint8Array(rewardBuffer));\n\n                        params.safeQrcodeCallback?.(rewardFilePath);\n                    }\n\n                    // await wxRewardPage.waitForSelector('[data-transfer=\"true\"]:not([weui=\"true\"])', { state: 'detached', timeout: 30000 });\n                } catch (error) {\n                    throw new Error(\"二维码已过期，请重试绑定。\");\n                }\n\n                for (let i = 0; i < scanRetryMaxCount; i++) {\n                    await Promise.all([wxRewardPage.reload(), wxRewardPage.waitForLoadState(\"domcontentloaded\")]);\n\n                    try {\n                        await wxRewardPage.waitForSelector(\n                            `.author_card_bd.weui-desktop-vm_primary:has-text(\"${params.settingInfo.wxRewardTarget?.author}\")`,\n                            { timeout: 1000 },\n                        );\n                        break;\n                    } catch (error) {}\n\n                    if (i === scanRetryMaxCount - 1) throw new Error(\"未确认绑定账户，请在手机端确认绑定并重试\");\n                }\n            } catch (error) {\n                let errorMessage = \"发生未知错误\";\n                if (error instanceof Error) {\n                    errorMessage = error.message;\n                } else if (typeof error === \"string\") {\n                    errorMessage = error;\n                }\n                await wxRewardPage.close();\n                return { code: 414, message: errorMessage, data: \"\" };\n            }\n        }\n\n        if (params.settingInfo.wxRewardText) {\n            await wxRewardPage.locator('[href=\"/merchant/reward?action=getautoreply\"]').click();\n            await wxRewardPage.waitForLoadState(\"networkidle\");\n\n            const isAddWord = reward_page\n                .locator(\".auto-reply__list.edit .auto-reply__hd .auto-reply__text\")\n                .filter({ hasText: new RegExp(`^${params.settingInfo.wxRewardText}$`) })\n                .count();\n\n            if ((await isAddWord) === 0) {\n                await reward_page.locator(\".emotion_editor .edit_area\").fill(params.settingInfo.wxRewardText);\n                await reward_page.locator(\".emotion_editor .edit_area\").click();\n                await reward_page.locator(\".editor_toolbar .weui-desktop-btn.weui-desktop-btn_primary\").click();\n            }\n        }\n        await wxRewardPage.close();\n    }\n\n    const page = await task.createPage({\n        show: task.debug,\n        url:\n            params.url ||\n            `https://mp.weixin.qq.com/cgi-bin/appmsg?${Object.entries(urlParams)\n                .map((it) => it.join(\"=\"))\n                .join(\"&\")}`,\n        cookies: params.cookies?.map((it) => ({ ...it, ...commonCookies })) || [],\n    });\n\n    // 0. 校验登录\n    try {\n        await page.waitForSelector(\".weui-desktop-head\", { state: \"visible\" });\n    } catch (error) {\n        return { code: 414, message: \"登录失效\", data: page.url() };\n    }\n\n    // 1. 等待编辑器加载出来\n    try {\n        await page.waitForSelector(\"#editor_pannel\", { state: \"visible\", timeout: 60000 });\n    } catch (error) {\n        return { code: 414, message: \"编辑器加载超时，请稍后重试\", data: page.url() };\n    }\n\n    //新功能更新监听\n    PopupListener(\n        page,\n        '[v-transfer-dom=\"#vue_app\"] .weui-desktop-dialog',\n        \"更新\",\n        '[v-transfer-dom=\"#vue_app\"] .weui-desktop-icon-btn.weui-desktop-dialog__close-btn',\n        {\n            checkInterval: 1000,\n            stopAfterClick: false,\n        },\n    );\n    //小店功能开通监听\n    PopupListener(\n        page,\n        '[extclass=\"weui-desktop-dialog_simple\"] .weui-desktop-dialog',\n        \"小店\",\n        '[extclass=\"weui-desktop-dialog_simple\"] .weui-desktop-icon-btn.weui-desktop-dialog__close-btn',\n        {\n            checkInterval: 1000,\n            stopAfterClick: true,\n        },\n    );\n\n    // 2. 填写标题\n    const titleInstance = page.locator(\"#js_title_main textarea#title\");\n    await titleInstance.click();\n    await titleInstance.fill(params.title);\n\n    // 3. 填写作者\n    if (params.settingInfo.wxAuthor) {\n        const titleInstance = page.locator(\"#js_author_area input#author\");\n        await titleInstance.click();\n        await titleInstance.fill(params.settingInfo.wxAuthor);\n    }\n\n    // 4. 填写正文\n    await copyHtmlToClipboard(page, params.content);\n    // 定位目标元素并聚焦\n    await page.click(\".js_editor_area .ProseMirror\");\n    // 模拟Ctrl+V粘贴\n    await page.keyboard.press(\"Control+V\");\n\n    // 将设置区域滚动到可见区域\n    await page.locator(\"#article_setting_area\").evaluate((node) => node.scrollIntoView());\n\n    // 5. 填写摘要\n    if (params.settingInfo.wxAbstract) {\n        const titleInstance = page.locator(\"#article_setting_area #js_description_area textarea\");\n        await titleInstance.click();\n        await titleInstance.fill(params.settingInfo.wxAbstract);\n    }\n\n    // 6. 设置封面\n    if (params.settingInfo.wxCover) {\n        let fileName = getFilenameFromUrl(params.settingInfo.wxCover);\n        const ext = path.extname(fileName);\n        fileName = ext ? fileName : `${fileName}.png`;\n        const cover = await downloadImage(params.settingInfo.wxCover, path.join(tmpCachePath, fileName));\n\n        // 从图片库选择\n        await page.locator(\"#article_setting_area #js_cover_area .select-cover__btn\").hover();\n        await page\n            .locator(\"#article_setting_area #js_cover_area .pop-opr__group-select-cover .pop-opr__list .pop-opr__item\")\n            .filter({ hasText: \"从图片库选择\" })\n            .click();\n\n        // 在弹窗内选择「我的图片」- 「上传文件」\n        // 等待弹窗出现\n        await page.waitForSelector(\"#vue_app .weui-desktop-dialog\", { state: \"visible\" });\n        const dialog = page.locator(\"#vue_app .weui-desktop-dialog\");\n        // 点击「我的图片」\n        await dialog.locator(\".weui-desktop-menu .weui-desktop-menu__item\").filter({ hasText: \"我的图片\" }).click();\n        await page.waitForTimeout(300);\n        // 点击「上传文件」\n        const fileChooserPromise = page.waitForEvent(\"filechooser\");\n        await dialog.locator(\".weui-desktop-img-picker__list__area .js_upload_btn_container\").click();\n        const fileChooser = await fileChooserPromise;\n        await fileChooser.setFiles([cover]);\n\n        // 等待图片上传完成\n        try {\n            await page.waitForSelector(\".weui-desktop-img-picker__list .weui-desktop-img-picker__item.selected\", {\n                state: \"visible\",\n                timeout: 60000,\n            });\n        } catch (error) {\n            return { code: 414, message: \"封面图片上传超时，请检查网络后重试\", data: \"\" };\n        }\n        await page.waitForSelector(\".weui-desktop-upload__file__progress\", { state: \"detached\", timeout: 60000 });\n\n        const pic_msg = page.locator(\n            \".weui-desktop-img-picker__list .weui-desktop-img-picker__item.selected .weui-desktop-upload__file__msg\",\n        );\n        if ((await pic_msg.count()) > 0)\n            return {\n                code: 414,\n                message: `图片上传错误：${(await pic_msg.textContent()) || \"未知错误，请重试！\"}`,\n                data: \"\",\n            };\n\n        // 选择下一步\n        await dialog\n            .locator(\".weui-desktop-dialog__ft .weui-desktop-btn:not(.weui-desktop-btn_disabled)\")\n            .filter({ hasText: \"下一步\" })\n            .click();\n        // 等待第二步的确认按钮出来\n        await dialog\n            .locator(\".weui-desktop-dialog__ft .weui-desktop-btn\")\n            .filter({ hasText: \"确认\" })\n            .waitFor({ state: \"visible\" });\n        await dialog.locator(\".weui-desktop-dialog__ft .weui-desktop-btn\").filter({ hasText: \"确认\" }).click();\n    }\n\n    // 7. 原创与赞赏设置\n    if (params.settingInfo.wxCopyright) {\n        await page.locator(\"#js_original\").click();\n\n        const ori_dialog = page.locator(\".claim__original-dialog.original_dialog\");\n        const ori_dialog_bd = ori_dialog.locator(\".weui-desktop-dialog__bd\");\n        const ori_dialog_ft = ori_dialog.locator(\".weui-desktop-dialog__ft\");\n\n        await ori_dialog_bd.locator(\".weui-desktop-form__check-content\").filter({ hasText: \"文字原创\" }).click();\n\n        if (params.settingInfo?.wxWhitelist) {\n            for (const _target of params.settingInfo.wxWhitelist) {\n                await ori_dialog_bd.locator(\"#js_article_whitelist_search\").fill(_target);\n                await ori_dialog_bd.locator(\".js_search\").click();\n                const search_res = ori_dialog_bd.locator(\"#js_article_whitelist_search_result > div\");\n\n                await page.waitForTimeout(1000);\n\n                if ((await search_res.getAttribute(\"class\")) !== \"search-result-title search-result-empty\") {\n                    const search_res_name =\n                        (await search_res.locator(\".search-result-name-left\").textContent()) || undefined;\n                    await search_res.click();\n                    const whrite_list = ori_dialog_bd.locator(\"#js_article_whitelist_added tbody\");\n                    const white_td_isadd = await whrite_list\n                        .locator(\".table-td-name\")\n                        .filter({ hasText: search_res_name })\n                        .count();\n\n                    if (!white_td_isadd) {\n                        return { code: 414, message: \"白名单添加失败，请重试！\", data: \"\" };\n                    }\n                } else {\n                    return { code: 414, message: `白名单用户：${_target} 未搜索到，请确定输入是否正确！`, data: \"\" };\n                }\n            }\n        }\n\n        if (params.settingInfo?.wxQuickReprint) {\n            const btn_isChecked =\n                (await ori_dialog_bd.locator('//span[@class=\"frm_tips\"]').filter({ hasText: \"已开启\" }).count()) === 1;\n            if (!btn_isChecked)\n                await ori_dialog_bd.locator(\".weui-desktop-switch_loading .weui-desktop-switch__box\").click();\n        }\n\n        const checkbox = ori_dialog_ft.locator(\".weui-desktop-icon-checkbox\");\n        if (!(await checkbox.isChecked())) await checkbox.check();\n        await ori_dialog_ft.locator(\".weui-desktop-btn.weui-desktop-btn_primary\").click();\n\n        if (params.settingInfo?.wxRewardTarget) {\n            await page.locator(\"#js_reward_setting_area\").click();\n\n            const reward_setting = page.locator(\".reward-setting-dialog\");\n            const reward_setting_bd = reward_setting.locator(\".weui-desktop-dialog__bd\");\n            const reward_setting_ft = reward_setting.locator(\".weui-desktop-dialog__ft\");\n\n            //遍历绑定信息\n            for (const _type in params.settingInfo.wxRewardTarget) {\n                if (_type === \"author\") {\n                    const userName = params.settingInfo.wxRewardTarget[_type];\n\n                    await reward_setting_bd.locator(\".weui-desktop-form__check-label\", { hasText: \"赞赏作者\" }).click();\n                    await reward_setting_bd.locator(\".weui-desktop-form__input\").fill(userName);\n\n                    if (params.settingInfo.wxRewardText) {\n                        const reward_setting_replay = page.locator(\".reward-reply-setting\");\n                        const switchAuto = reward_setting_replay.locator(\".weui-desktop-switch__box\");\n\n                        const maxAttempts = 5;\n                        const delayMs = 500;\n                        let nowCheckTime = 0;\n\n                        for (let attempt = 0; attempt < maxAttempts; attempt++) {\n                            const isDisabled = await switchAuto.isDisabled();\n                            if (!isDisabled) {\n                                (await switchAuto.isChecked()) ? nowCheckTime++ : null;\n                                if (nowCheckTime === 2) break;\n                            }\n\n                            if (attempt === maxAttempts - 1)\n                                throw new Error(\"Checkbox did not become enabled within the timeout.\");\n                            await new Promise((resolve) => setTimeout(resolve, delayMs));\n                        }\n\n                        const isOneReplay =\n                            (await reward_setting_replay\n                                .locator(\".reward-reply-select__wrp >.reward-reply-select__tips\")\n                                .textContent()) === \"添加新的回复\";\n                        const isCurrentReplay =\n                            (await reward_setting_replay\n                                .locator(\".reward-reply-select__wrp >.reward-reply-select__display .wording\")\n                                .filter({ hasText: new RegExp(`^${[params.settingInfo.wxRewardText]}$`) })\n                                .count()) === 1;\n\n                        if (!isOneReplay && !isCurrentReplay) {\n                            await reward_setting_replay\n                                .locator(\".reward-reply-select__wrp >.reward-reply-select__tips\")\n                                .click();\n                            await reward_setting_replay\n                                .locator(\".reward-reply-select__display.can-select .wording\")\n                                .filter({ hasText: new RegExp(`^${[params.settingInfo.wxRewardText]}$`) })\n                                .click();\n                        }\n                    } else {\n                        (await reward_setting_bd\n                            .locator(\".reward-reply-setting .weui-desktop-switch__input\")\n                            .isChecked())\n                            ? await reward_setting_bd\n                                  .locator(\".reward-reply-setting .weui-desktop-switch__box\")\n                                  .uncheck()\n                            : 0;\n                    }\n                } else if (_type === \"project\") {\n                }\n            }\n\n            const checkbox = reward_setting_ft.locator(\".weui-desktop-icon-checkbox\");\n            if (!(await checkbox.isChecked())) await checkbox.check();\n            await reward_setting_ft.locator(\".weui-desktop-btn.weui-desktop-btn_primary\").click();\n        }\n    }\n\n    // 8. 互动设置\n    if (params.settingInfo?.wxInteraction) {\n        const openInteractionDialog = async () => {\n            await page.locator(\".appmsg-editor__setting-group.js_interaction_cell\").click();\n        };\n\n        const setupPublicInteraction = async () => {\n            const wxInteraction_bd = page.locator(\".interaction-dialog .weui-desktop-dialog__bd\");\n\n            // 开启留言开关\n            const commentSwitch = wxInteraction_bd.locator(\n                \".comment-switcher.version5-same-set .weui-desktop-switch__box\",\n            );\n            const isSwitchChecked = await wxInteraction_bd\n                .locator(\".comment-switcher.version5-same-set .weui-desktop-switch__input\")\n                .isChecked();\n            if (!isSwitchChecked) {\n                await commentSwitch.check();\n            }\n\n            // 谁可以留言（兼容传参文本与页面文本的差异）\n            const commentTextMap: Record<string, string> = {\n                所有用户: \"所有人\",\n                已关注的用户: \"已关注的人\",\n                已关注7天及以上的用户: \"已关注7天及以上的人\",\n            };\n            const commentOption = params.settingInfo.wxInteraction?.Option;\n            const commentKey = commentOption?.Comment ?? \"\";\n            const commentText = commentTextMap[commentKey] ?? commentKey;\n            const comment_area = wxInteraction_bd.locator(\".comment-options-same-set\");\n            await comment_area\n                .locator(\".comment-options__radio .weui-desktop-form__check-label\")\n                .filter({ hasText: commentText })\n                .click();\n            await page.waitForTimeout(500);\n\n            // 自动精选留言\n            if (\n                params.settingInfo.wxInteraction &&\n                params.settingInfo.wxInteraction.Option?.elect_comment !== undefined\n            ) {\n                const electSwitchInput = wxInteraction_bd.locator(\n                    \".comment-options-inner .comment-switcher .weui-desktop-switch__input\",\n                );\n                const electSwitchBox = wxInteraction_bd.locator(\n                    \".comment-options-inner .comment-switcher .weui-desktop-switch__box\",\n                );\n                const electCount = await electSwitchInput.count();\n                if (electCount > 0) {\n                    const isElectChecked = await electSwitchInput\n                        .first()\n                        .isChecked({ timeout: 3000 })\n                        .catch(() => false);\n                    if (params.settingInfo.wxInteraction.Option.elect_comment && !isElectChecked) {\n                        await electSwitchBox.first().check();\n                    } else if (!params.settingInfo.wxInteraction.Option.elect_comment && isElectChecked) {\n                        await electSwitchBox.first().uncheck();\n                    }\n                }\n            }\n        };\n\n        await openInteractionDialog();\n\n        if (params.settingInfo.wxInteraction.Type === \"public\") {\n            await setupPublicInteraction();\n\n            const wxInteraction_ft = page.locator(\".interaction-dialog .weui-desktop-dialog__ft\");\n            const confirmBtn = wxInteraction_ft.locator(\".weui-desktop-btn.weui-desktop-btn_primary\");\n            const isDisabled = await confirmBtn.evaluate((el) => el.classList.contains(\"weui-desktop-btn_disabled\"));\n\n            if (isDisabled) {\n                // 确定按钮不可用：关闭留言开关 -> 点确定关闭弹窗 -> 重新打开弹窗 -> 开启留言开关\n                const wxInteraction_bd = page.locator(\".interaction-dialog .weui-desktop-dialog__bd\");\n                const commentSwitch = wxInteraction_bd.locator(\n                    \".comment-switcher.version5-same-set .weui-desktop-switch__box\",\n                );\n                await commentSwitch.uncheck();\n                await confirmBtn.click();\n                await page.waitForTimeout(300);\n                await openInteractionDialog();\n                await setupPublicInteraction();\n            }\n\n            await page\n                .locator(\".interaction-dialog .weui-desktop-dialog__ft .weui-desktop-btn.weui-desktop-btn_primary\")\n                .click();\n        }\n    }\n\n    // 9. 原文链接\n    if (params.settingInfo.wxOriginalText) {\n        await page.locator(\"#js_article_url_area .allow_click_opr\").click();\n        await page.waitForTimeout(200);\n        const poperInstance = page.locator('.popover:not([style*=\"display: none\"])');\n        const poperInput = poperInstance.locator(\"input.weui-desktop-form__input.js_url\");\n        await poperInput.fill(params.settingInfo.wxOriginalText);\n        await poperInstance.locator(\".popover_bar .btn_primary\").click();\n    }\n\n    // 10. 创作来源\n    if (params.settingInfo.wxCreationSource && params.settingInfo.wxCreationSource.length > 0) {\n        const source = params.settingInfo.wxCreationSource[0];\n        await page.locator(\"#js_claim_source_area .allow_click_opr\").click();\n        await page.waitForTimeout(200);\n        const poperInstance = page.locator('.claim-source-dialog:not([style*=\"display: none\"])');\n        await poperInstance.locator(`.weui-desktop-form__check-label:has(input[value=\"${source}\"])`).click();\n        const confirmBtn = poperInstance.locator(\".weui-desktop-dialog__ft .weui-desktop-btn_primary\");\n        await confirmBtn.waitFor({ state: \"visible\" });\n        await confirmBtn.click();\n    }\n\n    // 11. 关闭平台推荐\n    if (params.settingInfo.wxNotAllowRecommend === true) {\n        await page.locator(\"#js_not_recommend_area .allow_click_opr\").click();\n        await page.waitForTimeout(200);\n        const poperInstance = page.locator('.popover:not([style*=\"display: none\"])');\n        await poperInstance.locator('.frm_radio_item label[for=\"not_recomment_0\"]').click();\n    }\n\n    await page.waitForTimeout(1000);\n    task._timerRecord.PrePublish = Date.now();\n\n    // 12. 发布\n    const articleId = await new Promise<string>((resolve) => {\n        // 定义响应处理函数\n        const handleResponse = async (response: Response) => {\n            const url = response.url();\n            const query = parseUrlQueryString(url);\n            if (url.includes(\"/cgi-bin/operate_appmsg\") && query?.t === \"ajax-response\") {\n                const jsonResponse = await response.json();\n                page.off(\"response\", handleResponse);\n                resolve(jsonResponse?.appMsgId);\n            }\n        };\n\n        // 开始监听响应事件\n        page.on(\"response\", handleResponse);\n\n        // 点击发表\n        (async () => {\n            await page.locator(\"#editor_pannel #bottom_main #js_button_area  #js_send button\").click();\n            await page.waitForTimeout(200);\n\n            if (params.settingInfo.timer) {\n                await page\n                    .locator(\".mass-send .mass-send__td-setting\", { hasText: \"定时发表\" })\n                    .locator(\".weui-desktop-switch__box\")\n                    .check();\n                const dateD = Number(TimeFormatter.format(params.settingInfo.timer, \"d\"));\n                const nowD = Number(TimeFormatter.format(Date.now(), \"d\"));\n\n                await page.locator(\".mass-send__timer .weui-desktop-form__dropdown__dt\").click();\n                const dropMenu = page\n                    .locator(\".mass-send__timer .weui-desktop-dropdown-menu\")\n                    .locator(\".weui-desktop-dropdown__list-ele\");\n                await dropMenu\n                    .filter({\n                        hasText:\n                            dateD === nowD\n                                ? \"今天\"\n                                : dateD === nowD + 1\n                                  ? \"明天\"\n                                  : TimeFormatter.format(params.settingInfo.timer, \"M月d日\"),\n                    })\n                    .click();\n\n                const timeDropMenu = page.locator(\".mass-send__timer .weui-desktop-picker__time:visible\");\n                await timeDropMenu\n                    .locator(\".weui-desktop-form__input\")\n                    .fill(TimeFormatter.format(params.settingInfo.timer, \"hh:mm\"));\n                await timeDropMenu.locator(\"i.weui-desktop-icon__time\").click();\n            }\n        })();\n    });\n    await page.waitForTimeout(200);\n\n    if (params.masssend) {\n        const times = Number(\n            await page\n                .locator(\".mass-send .multi-sent__notice_time\")\n                .locator('div[style=\"display: none;\"] div:not([style*=\"display: none\"]) span')\n                .textContent(),\n        );\n        if (times === 0) return { code: 414, message: \"今日群发次数用尽，请明天再试。\", data: \"\" };\n        await page.locator(\".mass-send .mass_send__notify\").locator(\".weui-desktop-switch__box\").check();\n    } else {\n        await page.locator(\".mass-send .mass_send__notify\").locator(\".weui-desktop-switch__box\").uncheck();\n    }\n\n    await page.waitForTimeout(200);\n\n    // 再次点击发表\n    await page.waitForSelector('.new_mass_send_dialog .weui-desktop-dialog__wrp:not([style*=\"display: none\"])', {\n        state: \"visible\",\n    });\n    await page\n        .locator(\".new_mass_send_dialog .weui-desktop-dialog .weui-desktop-dialog__ft button.weui-desktop-btn_primary\")\n        .click();\n\n    // 点击继续发表\n    await page.waitForSelector('.double_check_dialog .weui-desktop-dialog__wrp:not([style*=\"display: none\"])', {\n        state: \"visible\",\n    });\n    await page\n        .locator(\".double_check_dialog .weui-desktop-dialog .weui-desktop-dialog__ft button.weui-desktop-btn_primary\")\n        .click();\n\n    await page.waitForTimeout(2000);\n\n    // 原创校验弹窗\n    const originalCheckDialog = page.locator(\n        'div[data-transfer=\"true\"][width\\\\.number=\"800\"][height\\\\.number=\"800\"] .weui-desktop-dialog__title',\n    );\n    if ((await originalCheckDialog.count()) > 0) {\n        if ((await originalCheckDialog.textContent()) === \"原创校验\") {\n            const popMassend = page.locator('div[data-transfer=\"true\"][width\\\\.number=\"800\"][height\\\\.number=\"800\"]');\n            await popMassend.locator(\".weui-desktop-btn_primary\", { hasText: \"下一步\" }).click();\n            await popMassend.locator(\".weui-desktop-btn_primary\", { hasText: \"继续\" }).click();\n        }\n    }\n\n    try {\n        const startTime = Date.now();\n\n        // biome-ignore lint/suspicious/noAsyncPromiseExecutor: <explanation>\n        await new Promise<void>(async (resolve, reject) => {\n            // 定义响应处理函数\n            const handleResponse = async (response: Response) => {\n                if (response.url().includes(\"/safe/safeuuid\")) {\n                    const jsonResponse = await response.json();\n                    if (jsonResponse.errcode === 405) {\n                        resolve();\n                        page.off(\"response\", handleResponse);\n                    } else if (Date.now() - startTime > waitQrcodeResultMaxTime) {\n                        reject();\n                        page.off(\"response\", handleResponse);\n                    }\n                }\n            };\n\n            // 开始监听响应事件\n            page.on(\"response\", handleResponse);\n\n            // 获取微信验证二维码\n            await page.waitForSelector(\".dialog .js_wxchecks.safe_check img.qrcode.js_qrcode\", {\n                state: \"visible\",\n            });\n            const qrcodeSrc = await page\n                .locator(\".dialog .js_wxchecks.safe_check img.qrcode.js_qrcode\")\n                .first()\n                .getAttribute(\"src\");\n            if (qrcodeSrc) {\n                const imgUrl = new URL(qrcodeSrc, page.url()).href; // 处理相对路径\n                const response = await axios({\n                    method: \"get\",\n                    url: imgUrl,\n                    responseType: \"arraybuffer\", // 确保接收二进制数据\n                });\n                // 保存文件\n                const qrcodeFilePath = path.join(tmpCachePath, \"weixin_qrcode.jpg\");\n                fs.writeFileSync(qrcodeFilePath, response.data);\n                params.safeQrcodeCallback?.(qrcodeFilePath);\n            } else {\n                throw new Error(\"qrcodeSrc is empty\");\n            }\n        });\n    } catch (error) {\n        await page.close();\n        return { code: 500, message: \"群发二维码已过期，请重试发布。\", data: \"\" };\n    }\n\n    await page.waitForTimeout(3000);\n    await page.close();\n\n    return success(articleId);\n};\n","import type { CommonAction } from \"@iflyrpa/share\";\n\nimport { ActiomCommonParams, ActionCommonParamsSchema } from \"../../types\";\nimport { defaultParams, executeAction, formatSectionHtml } from \"../../utils\";\nimport type { CollectDetail } from \"../getWeixinCollection\";\nimport { mockAction } from \"./mock\";\nimport { rpaAction } from \"./rpa\";\n\nexport interface WxInteraction {\n    Type: \"public\" | \"private\" | \"off\"; // public:评论留言, priviate: 快捷私信, off: 不开启\n    Option?: {\n        // public下相关设置\n        Comment: \"已关注7天及以上的用户\" | \"已关注的用户\" | \"所有用户\"; // 评论设置\n        reply: \"已关注7天及以上的用户\" | \"已关注的用户\" | \"所有用户\"; // 回复设置\n        elect_comment: boolean; // 是否开启精选评论\n        elect_reply: boolean; // 是否开启精选回复\n    };\n}\n\nimport { z } from \"zod\";\n\nexport const WxInteractionSchema = z.object({\n    Type: z.enum([\"public\", \"private\", \"off\"]),\n    Option: z\n        .object({\n            Comment: z.enum([\"已关注7天及以上的用户\", \"已关注的用户\", \"所有用户\"]),\n            reply: z.enum([\"已关注7天及以上的用户\", \"已关注的用户\", \"所有用户\"]),\n            elect_comment: z.boolean(),\n            elect_reply: z.boolean(),\n        })\n        .optional(),\n});\n\nexport const WeixinPublishParamsSchema = ActionCommonParamsSchema.extend({\n    saveType: z.enum([\"draft\", \"publish\"]),\n    masssend: z.boolean().optional(),\n    token: z.union([z.string(), z.number()]),\n    title: z.string(),\n    content: z.string(),\n    uuid: z.string().optional(),\n    appMsgId: z.string().optional(),\n    operation_seq: z.string().optional(),\n    proxyLoc: z.string().optional(),\n    localIP: z.string().optional(),\n    huiwenToken: z.string().optional(),\n    settingInfo: z.object({\n        wxCover: z.string(),\n        wxAuthor: z.string().optional(),\n        wxAbstract: z.string().optional(),\n        wxOriginalText: z.string().optional(),\n        wxCopyright: z.boolean().optional(),\n        wxWhitelist: z.array(z.string()).optional(),\n        wxRewardTarget: z.record(z.string(), z.string()).optional(),\n        wxRewardText: z.string().optional(),\n        wxQuickReprint: z.boolean().optional(),\n        wxNotAllowRecommend: z.boolean().optional(),\n        wxCreationSource: z.array(z.string()).optional(),\n        wxInteraction: WxInteractionSchema.optional(),\n        timer: z.number().optional(),\n        wxTopic: z.array(z.string()).optional(),\n        wxCollectionInfo: z.any().optional(), // Replace `z.any()` with a specific schema if available\n    }),\n});\n\nexport interface WeixinPublishRuntimeOptions {\n    safeQrcodeCallback?: (qrcodePath: string) => void;\n}\n\nexport type WeixinPublishParams = z.infer<typeof WeixinPublishParamsSchema> & WeixinPublishRuntimeOptions;\n\nexport interface WxWhitelistUserInfo {\n    nickname: string;\n    openid: string; // 微信常用字段命名可能是 open_id\n    username: string;\n    wx_name: string;\n    pic_url: string;\n}\n\nexport type PublishAction = CommonAction<WeixinPublishParams, string>;\n\nexport const weixinPublish: PublishAction = async (task, _params) => {\n    const params = defaultParams(_params, { masssend: false });\n\n    // Format content HTML\n    params.content = formatSectionHtml(params.content);\n\n    if (params.actionType === \"rpa\") {\n        return rpaAction(task, params);\n    }\n\n    if (params.actionType === \"mockApi\") {\n        return mockAction(task, params);\n    }\n\n    return executeAction(mockAction, rpaAction)(task, params);\n};\n","import { type Page, success, type UserInfo } from \"@iflyrpa/share\";\nimport type { Response } from \"playwright-core\";\nimport type { SteelAction } from \"./index\";\n\nconst CREATOR_PUBLISH_URL = \"https://creator.xiaohongshu.com/publish/publish?source=official\";\n\n/** 小红书页面全局状态结构 */\ninterface InitialState {\n    user?: {\n        userInfo?: {\n            _rawValue?: {\n                id: number;\n                nickname: string;\n                images?: string;\n                userId?: string;\n            };\n        };\n    };\n}\n\ninterface CookieLike {\n    domain?: string;\n}\n\ninterface CreatorUserInfoPayload {\n    data?: {\n        userId?: string;\n        userName?: string;\n        userAvatar?: string;\n        [key: string]: unknown;\n    };\n    [key: string]: unknown;\n}\n\ninterface StageError extends Error {\n    stage: string;\n}\n\nconst createStageError = (message: string, stage: string): StageError => Object.assign(new Error(message), { stage });\n\nexport const isCreatorPublishUrl = (url: string): boolean => {\n    try {\n        const parsedUrl = new URL(url);\n        return parsedUrl.origin === \"https://creator.xiaohongshu.com\" && parsedUrl.pathname === \"/publish/publish\";\n    } catch {\n        return false;\n    }\n};\n\nexport const isExploreUrl = (url: string): boolean => {\n    try {\n        const parsedUrl = new URL(url);\n        return parsedUrl.origin === \"https://www.xiaohongshu.com\" && parsedUrl.pathname === \"/explore\";\n    } catch {\n        return false;\n    }\n};\n\nexport const filterCreatorCookies = <T extends CookieLike>(cookies: T[]): T[] =>\n    cookies.filter((cookie) => {\n        const normalizedDomain = (cookie.domain ?? \"\").replace(/^\\./, \"\");\n        return normalizedDomain === \"creator.xiaohongshu.com\" || normalizedDomain === \"xiaohongshu.com\";\n    });\n\nexport const mergeUserInfo = (current: UserInfo, next: UserInfo): UserInfo => ({\n    name: next.name || current.name,\n    avatar: next.avatar || current.avatar,\n    uniqueId: next.uniqueId || current.uniqueId,\n});\n\nexport const extractCreatorUserInfo = (payload: CreatorUserInfoPayload): UserInfo => ({\n    name: payload.data?.userName ?? \"\",\n    avatar: payload.data?.userAvatar ?? \"\",\n    uniqueId: payload.data?.userId ?? \"\",\n});\n\nconst readUserInfo = async (page: Page): Promise<UserInfo> =>\n    page.evaluate(() => {\n        const raw = (\n            window as unknown as {\n                __INITIAL_STATE__?: InitialState;\n            }\n        ).__INITIAL_STATE__?.user?.userInfo?._rawValue;\n\n        return {\n            name: raw?.nickname ?? \"\",\n            avatar: raw?.images ?? \"\",\n            uniqueId: raw?.userId ?? \"\",\n        };\n    });\n\n/**\n * 小红书登录 RPA\n *\n * 流程：\n * 1. 打开小红书登录页，生成远程调试地址\n * 2. 监听二维码扫码状态接口 /login/qrcode/status\n * 3. 扫码成功后，等待页面跳转到 /explore\n * 4. 主动跳转到创作者发布页，确认创作者平台登录态\n * 5. 返回创作者相关 cookie\n */\nexport const rpaAction: SteelAction = async (task, _params) => {\n    const reporter = task.reportService?.reportLoginStatus ?? (() => Promise.resolve());\n\n    let page: Page;\n    let isSelfClosing = false;\n\n    // ========== 第一步：启动浏览器并打开登录页 ==========\n    try {\n        page = await task.createPage({\n            url: \"https://www.xiaohongshu.com/login\",\n        });\n        if (!task._session?.id) throw new Error(\"Session ID 不存在\");\n        task._steelBrowser?.on(\"disconnected\", () => {\n            if (task.debug && isSelfClosing) {\n                task.logger.info(\"执行结束，关闭浏览器！\");\n            } else {\n                task.logger.info(\"浏览器被手动释放或意外关闭！\");\n            }\n        });\n    } catch (e) {\n        task.logger.error(\"浏览器启动失败\", e);\n        return { code: 414, message: `浏览器启动失败: ${e}`, data: {} };\n    }\n\n    // ========== 第二步：生成远程调试地址 ==========\n    const pageInfo = await task._client?.sessions.liveDetails(task._session.id);\n    const pageId = pageInfo?.pages[0].id ?? \"\";\n\n    const baseHost = task._session.websocketUrl?.replace(/^wss?:\\/\\//, \"\") ?? \"\";\n    const connectAddress = new URLSearchParams({ baseHost, pageId }).toString();\n\n    task.reportService?.settingSessionID?.(task._session?.id || \"\");\n\n    await reporter(0, \"浏览器启动成功，请使用小红书App扫码登录……\", { connectAddress });\n\n    // ========== 第三步：监听扫码状态与登录结果 ==========\n    let userInfo: UserInfo = { uniqueId: \"\", avatar: \"\", name: \"\" };\n    try {\n        await new Promise<void>((resolve, reject) => {\n            let finished = false;\n\n            /** 清理所有监听器，防止重复触发 */\n            const stopListening = () => {\n                page.off(\"response\", handleCheckQR);\n            };\n\n            const rejectOnce = (status: unknown) => {\n                if (finished) return;\n                finished = true;\n                stopListening();\n                reject(status);\n            };\n\n            const resolveOnce = () => {\n                if (finished) return;\n                finished = true;\n                stopListening();\n                resolve();\n            };\n\n            const continueAfterExplore = async () => {\n                try {\n                    if (!isExploreUrl(page.url())) {\n                        await page.waitForURL((currentUrl) => isExploreUrl(currentUrl.toString()), {\n                            timeout: 60000,\n                        });\n                    }\n\n                    userInfo = mergeUserInfo(\n                        userInfo,\n                        await readUserInfo(page).catch(() => ({ name: \"\", avatar: \"\", uniqueId: \"\" })),\n                    );\n                    await reporter(0, \"主站登录成功，正在跳转创作者发布页……\", {\n                        stage: \"scanQrcode\",\n                        phase: \"creatorPublishRedirect\",\n                        connectAddress,\n                    });\n\n                    const creatorUserInfoResponse = page.waitForResponse(\n                        (response) =>\n                            response.url().includes(\"/api/galaxy/user/info\") &&\n                            response.request().method() === \"GET\" &&\n                            response.status() === 200,\n                        { timeout: 20000 },\n                    );\n\n                    await page.goto(CREATOR_PUBLISH_URL, { waitUntil: \"domcontentloaded\", timeout: 20000 });\n\n                    await page.waitForURL((currentUrl) => isCreatorPublishUrl(currentUrl.toString()), {\n                        timeout: 20000,\n                    });\n                    await page.waitForSelector(\"#CreatorPlatform\", { state: \"visible\", timeout: 20000 });\n\n                    const creatorUserInfo = await creatorUserInfoResponse\n                        .then(async (response) =>\n                            extractCreatorUserInfo((await response.json()) as CreatorUserInfoPayload),\n                        )\n                        .catch(() => ({ name: \"\", avatar: \"\", uniqueId: \"\" }));\n                    userInfo = mergeUserInfo(userInfo, creatorUserInfo);\n\n                    await reporter(0, \"扫码成功!\", {\n                        stage: \"scanQrcode\",\n                        phase: \"creatorPublishRedirect\",\n                        connectAddress,\n                        userInfo,\n                    });\n\n                    if (!isCreatorPublishUrl(page.url())) {\n                        throw createStageError(\"创作者发布页跳转失败\", \"creatorPublishRedirect\");\n                    }\n                    resolveOnce();\n                } catch (err) {\n                    task.logger.error(\"登录结果处理异常\", err);\n                    rejectOnce(err);\n                }\n            };\n\n            /**\n             * 监听二维码扫码状态接口 /login/qrcode/status\n             *\n             * code_status 说明：\n             *   1 = 小红书扫码成功\n             *   2 = 微信扫码成功（同时返回登录信息）\n             */\n            const handleCheckQR = async (response: Response) => {\n                try {\n                    const url = response.url();\n                    if (!url.includes(\"/login/qrcode/status\") || response.request().method() !== \"GET\") return;\n\n                    let jsonResponse: { code: number; data: { code_status: number; login_info: { user_id: string } } };\n                    try {\n                        const text = await response.text();\n                        if (!text) {\n                            task.logger.warn(\"扫码状态接口返回空响应\", { url });\n                            return;\n                        }\n                        jsonResponse = JSON.parse(text);\n                    } catch (e) {\n                        task.logger.warn(\"扫码状态接口响应解析失败\", { url, error: e });\n                        return;\n                    }\n\n                    const codeStatus = jsonResponse.data?.code_status;\n\n                    if (jsonResponse.code === 0 && (codeStatus === 1 || codeStatus === 2)) {\n                        // 微信扫码时直接从响应中获取 userId\n                        if (codeStatus === 2) userInfo.uniqueId = jsonResponse.data.login_info.user_id;\n                        task.debug && task.logger.info(\"扫码成功，等待页面跳转到 explore...\");\n\n                        page.off(\"response\", handleCheckQR);\n                        void continueAfterExplore();\n                    }\n                } catch (err) {\n                    task.logger.error(\"用户信息获取错误\", err);\n                    rejectOnce(err);\n                }\n            };\n\n            // 提前注册监听，防止丢失请求\n            page.on(\"response\", handleCheckQR);\n        });\n    } catch (e) {\n        // 扫码状态码 → 用户友好提示的映射\n        const errMap: Record<string, string> = {\n            \"0\": \"用户扫码已超时，请重试！\",\n            \"1\": \"用户扫码后未点击确认，请重试！\",\n            \"3\": \"二维码已过期，请重试！\",\n        };\n        isSelfClosing = true;\n\n        const errorMessage =\n            typeof e === \"string\" && errMap[e] ? errMap[e] : e instanceof Error ? e.message : String(e);\n        const stage =\n            typeof e === \"object\" && e && \"stage\" in e\n                ? String((e as { stage?: unknown }).stage ?? \"scanQrcode\")\n                : \"scanQrcode\";\n\n        return { code: 500, message: errorMessage, data: { stage, connectAddress } };\n    }\n\n    // ========== 第四步：收集 cookie 并返回结果 ==========\n    const cookies = filterCreatorCookies((await task._steelBrowserContext?.cookies()) ?? []);\n    const cookie = JSON.stringify(cookies);\n    isSelfClosing = true;\n    await page.close();\n\n    return success({ connectAddress, cookie, userInfo }, \"登录成功！\");\n};\n","import { TaskState, type UserInfo } from \"@iflyrpa/share\";\nimport type { Response } from \"playwright-core\";\nimport type { SteelAction } from \"./index\";\n\nconst encode_mnsv2 = require(\"../../utils/xhs_ob/x_s.encoder.js\") as (\n    mnsv2: string,\n    platform: string,\n    req_type: string,\n) => string;\n\nimport { ExecutionState } from \"../../types\";\nimport { ProxyAgent } from \"../../utils/proxy\";\n\nconst scanRetryMaxCount = 60; // 二维码扫描重试\n// 等待二维码验证结果最长时间\nconst waitQrcodeResultMaxTime = scanRetryMaxCount * 2 * 1000;\n\ninterface CookieLike {\n    name: string;\n    value: string;\n}\n\n/**\n * 收集浏览器上下文 cookie，并确保关键的 a1 设备指纹 cookie 存在。\n *\n * a1 由小红书主站在首次访问 www.xiaohongshu.com 时通过 Set-Cookie 种下，整个请求\n * 签名体系都依赖它。少数情况下登录成功瞬间抓取时 a1 尚未落地，会导致后续 session\n * 检测因「缺失关键 cookie a1」直接失败且无法补救。这里在抓取阶段做一次补救：\n * 若首次抓取缺 a1，则显式访问主站等待 a1 落地后重新抓取。\n *\n * @returns 抓取到的 cookies；调用方需自行判断其中是否含 a1。\n */\nasync function collectCookiesWithA1(task: any): Promise<CookieLike[]> {\n    const hasA1 = (cookies: CookieLike[]) => cookies.some((c) => c.name === \"a1\" && !!c.value);\n\n    let cookies: CookieLike[] = (await task.steelBrowserContext?.cookies()) ?? [];\n    if (hasA1(cookies)) return cookies;\n\n    task.logger?.warn(\"[XhsLogin] 首次抓取缺失 a1，尝试补救……\");\n\n    try {\n        const page = task.steelBrowserContext?.pages?.()[0];\n        if (page) {\n            await page.goto(\"https://www.xiaohongshu.com\", { waitUntil: \"domcontentloaded\", timeout: 15000 });\n            // a1 通过 Set-Cookie 异步写入 context，给予短暂等待窗口轮询。\n            for (let i = 0; i < 10; i++) {\n                cookies = (await task.steelBrowserContext?.cookies()) ?? [];\n                if (hasA1(cookies)) {\n                    task.logger?.info(`[XhsLogin] a1 补救成功，第 ${i + 1} 次轮询命中`);\n                    return cookies;\n                }\n                await new Promise((resolve) => setTimeout(resolve, 500));\n            }\n        }\n    } catch (err) {\n        task.logger?.warn(\"[XhsLogin] a1 补救访问主站失败\", err);\n    }\n\n    // 返回最后一次抓取结果（可能仍缺 a1，由调用方判定）\n    cookies = (await task.steelBrowserContext?.cookies()) ?? [];\n    return cookies;\n}\n\ninterface InitialState {\n    user?: {\n        userInfo?: {\n            _rawValue?: {\n                id: number;\n                nickname: string;\n                images?: string;\n                userId?: string;\n            };\n        };\n    };\n}\n\nexport const rpaServer: SteelAction = async (task: any, params: any) => {\n    const updateTaskState = task.taskStageStore?.update?.bind(task.taskStageStore, task.taskId || \"\");\n    const reporter = task.reportService?.reportLoginStatus ?? (() => Promise.resolve());\n    let executionState: ExecutionState | undefined;\n\n    let proxyUrl: string | undefined;\n    if (params.proxyLoc) {\n        task.logger?.info(`==> 开始获取代理信息：${params}`);\n        const ProxyAgentResult = await ProxyAgent({ logger: task.logger }, params.proxyLoc, params.accountId);\n        task.logger?.info(\"==> 代理信息获取成功！\");\n        proxyUrl = ProxyAgentResult ? `http://${ProxyAgentResult.ip}:${ProxyAgentResult.port}` : undefined;\n    }\n\n    const page = await task.createPage({\n        url: \"https://www.xiaohongshu.com/login\",\n        proxyUrl,\n        userAgent: params.userAgent,\n    });\n\n    task.steelBrowser?.on(\"disconnected\", () => {\n        executionState = ExecutionState.BROWSER_CLOSED;\n    });\n\n    await updateTaskState?.({\n        state: TaskState.WAIT_SCAN,\n        connectAddress: task.steelConnector?.getProxyUrl(task.sessionId || \"\", \"v1/sessions/debug\"),\n        sessionId: task.sessionId,\n    });\n\n    let userInfo: UserInfo = { uniqueId: \"\", avatar: \"\", name: \"\" };\n    await new Promise<void>((resolve, reject) => {\n        let finished = false;\n\n        const timer = setTimeout(async () => {\n            if (finished) return; // 检查是否已经完成\n            cleanup();\n            executionState = ExecutionState.TIMEOUT;\n            await updateTaskState?.({\n                state: TaskState.TIMEOUT,\n                error: \"等待扫码登录超时\",\n            });\n            resolve();\n        }, waitQrcodeResultMaxTime);\n\n        const cleanup = () => {\n            if (finished) return; // 防止多次调用\n            finished = true;\n            clearTimeout(timer);\n            page.off(\"response\", handleWebCommon);\n            page.off(\"response\", handleCheckQR);\n            task.steelBrowser?.off(\"disconnected\", handleBrowserClosed);\n        };\n\n        const handleBrowserClosed = () => {\n            cleanup();\n            executionState = ExecutionState.BROWSER_CLOSED;\n            resolve();\n        };\n\n        const handleWebCommon = async (resp: Response) => {\n            try {\n                const url = resp.url();\n\n                // 登录成功后会触发 homefeed 请求\n                if (url.includes(\"/explore\") && resp.request().method() === \"GET\" && resp.status() === 200) {\n                    cleanup();\n                    await updateTaskState?.({\n                        state: TaskState.CONFIRMED,\n                    });\n\n                    await page.waitForFunction(\n                        () => typeof (window as unknown as { mnsv2: unknown }).mnsv2 === \"function\",\n                        {\n                            timeout: 10000,\n                        },\n                    );\n                    const ticket_mnsv2 = await page.evaluate(\n                        // 调用浏览器环境获取加密参数\n                        ({ c, d }: { c: string; d: string }) => {\n                            if (typeof (window as unknown as { mnsv2: unknown }).mnsv2 === \"function\") {\n                                return (window as unknown as { mnsv2: (...args: unknown[]) => string }).mnsv2(c, d);\n                            }\n                            return \"mnsv2 未定义\";\n                        },\n                        {\n                            c: '/api/cas/customer/web/service-ticket{\"service\":\"https://creator.xiaohongshu.com\",\"source\":\"official\",\"type\":\"tgt\"}',\n                            d: \"71bcd9dc89f6c256ead6cbe2b0a9793c\", // md5\n                        },\n                    );\n\n                    const XS = encode_mnsv2(ticket_mnsv2, \"Windows\", \"object\");\n\n                    const createrLogin = await page.request.post(\n                        \"https://customer.xiaohongshu.com/api/cas/customer/web/service-ticket\",\n                        {\n                            headers: {\n                                \"x-s\": XS,\n                                \"x-t\": Date.now().toString(),\n                                referer: \"https://creator.xiaohongshu.com/\",\n                                origin: \"https://creator.xiaohongshu.com\",\n                                cookie:\n                                    (await task._steelBrowserContext?.cookies())\n                                        ?.map((c: any) => `${c.name}=${c.value}`)\n                                        .join(\";\") || \"\",\n                            },\n                            data: {\n                                service: \"https://creator.xiaohongshu.com\",\n                                source: \"official\",\n                                type: \"tgt\",\n                            },\n                        },\n                    );\n                    task.logger.info(`createrLogin------- ${createrLogin.ok()}`);\n                    if (createrLogin.ok()) {\n                        let num = 30;\n                        //轮询获取用户信息，直到获取到用户信息\n                        async function getUserInfo() {\n                            userInfo = await page.evaluate(() => {\n                                const raw = (\n                                    window as unknown as {\n                                        __INITIAL_STATE__?: InitialState;\n                                    }\n                                ).__INITIAL_STATE__?.user?.userInfo?._rawValue;\n\n                                return {\n                                    name: raw?.nickname ?? raw?.nickname ?? \"\",\n                                    avatar: raw?.images ?? raw?.images ?? \"\",\n                                    uniqueId: raw?.userId ?? raw?.userId ?? \"\",\n                                };\n                            });\n                            await reporter(0, `第${30 - num + 1}次抓取用户信息!`, { userInfo });\n                            // 轮询获取用户信息，直到获取到用户信息\n                            if (userInfo.uniqueId || num <= 0) return;\n                            num--;\n                            await new Promise((resolve) => setTimeout(resolve, 1000));\n                            await getUserInfo();\n                        }\n                        await getUserInfo();\n                        task.logger.info(`userInfo------- ${JSON.stringify(userInfo)}`);\n                    }\n                    executionState = ExecutionState.SUCCESS;\n                    resolve();\n                }\n            } catch (err) {\n                cleanup();\n                reject(err);\n            }\n        };\n\n        // 0=用户未扫码，1=用户已扫码未确认,3=二维码过期\n        const handleCheckQR = async (response: Response) => {\n            try {\n                const url = response.url();\n                if (!url.includes(\"/login/qrcode/status\") || response.request().method() !== \"GET\") return;\n\n                let jsonResponse: { code: number; data: { code_status: number; login_info: { user_id: string } } };\n                try {\n                    const text = await response.text(); // 总是安全的\n                    if (!text) {\n                        task.logger.warn(\"Empty response body:\", { url });\n                        return;\n                    }\n\n                    jsonResponse = JSON.parse(text); // 手动解析\n                } catch (e) {\n                    task.logger.warn(\"Failed to parse json:\", { url, erroe: e });\n                    return;\n                }\n                const codeStatus = jsonResponse.data?.code_status;\n\n                // codeStatus ： 1为小红书扫码成功，2为微信扫码成功，并且同时返回登陆信息\n                if (jsonResponse.code === 0 && (codeStatus === 1 || codeStatus === 2)) {\n                    if (codeStatus === 2) userInfo.uniqueId = jsonResponse.data.login_info.user_id;\n\n                    await updateTaskState?.({\n                        state: TaskState.SCANNED,\n                        result: {\n                            userInfo,\n                        },\n                    });\n\n                    page.off(\"response\", handleCheckQR);\n                    page.on(\"response\", handleWebCommon);\n                }\n            } catch (err) {\n                cleanup();\n                reject(err);\n            }\n        };\n\n        // 在页面加载之前就注册监听，防止丢失请求\n        task.steelBrowser?.on(\"disconnected\", handleBrowserClosed);\n        page.on(\"response\", handleCheckQR);\n    });\n\n    if (executionState === undefined) return { code: 500, message: \"未知错误\", data: {} };\n\n    switch (executionState) {\n        case ExecutionState.BROWSER_CLOSED: {\n            const msg = \"浏览器已关闭，任务中断!\";\n            await updateTaskState?.({\n                state: TaskState.FAILED,\n                error: \"浏览器已关闭\",\n            });\n            return { code: 414, message: msg, data: {} };\n        }\n\n        case ExecutionState.TIMEOUT: {\n            const msg = \"等待用户扫码登录超时!\";\n            await updateTaskState?.({\n                state: TaskState.TIMEOUT,\n                error: msg,\n            });\n            task.logger.info(msg);\n            return { code: 414, message: msg, data: {} };\n        }\n\n        case ExecutionState.SUCCESS: {\n            // 抓取 cookie，并尝试确保关键的 a1 设备指纹 cookie 已落地。\n            // 若补救后仍缺 a1，记录日志但不阻断登录，留待后续 session 检测时拦截。\n            const cookies = await collectCookiesWithA1(task);\n            const hasA1 = cookies.some((c) => c.name === \"a1\" && !!c.value);\n\n            if (!hasA1) {\n                task.logger?.warn(\"[XhsLogin] 登录成功但缺失关键 cookie a1，后续检测可能失败\", {\n                    cookieNames: cookies.map((c) => c.name),\n                });\n            }\n\n            const cookieStr = JSON.stringify(cookies);\n            await updateTaskState?.({\n                state: TaskState.SUCCESS,\n                result: {\n                    cookie: cookieStr,\n                    userInfo: userInfo,\n                },\n            });\n            return {\n                code: 0,\n                message: \"成功\",\n                data: {\n                    cookie: cookieStr,\n                    userInfo,\n                },\n            };\n        }\n        default:\n            // 处理 RUNNING 和其他可能的状态\n            return { code: 500, message: \"任务执行中断\", data: {} };\n    }\n};\n","import { CommonAction, success } from \"@iflyrpa/share\";\nimport { ActiomCommonParams } from \"../../types\";\nimport { executeAction } from \"../../utils\";\nimport { rpaAction } from \"./rpa\";\nimport { rpaServer } from \"./rpa-server\";\n\nexport type XiaohongshuLoginParams = ActiomCommonParams;\n\nexport type SteelAction = CommonAction<ActiomCommonParams, Record<string, unknown>>;\n\nexport const xiaohongshuLogin: SteelAction = async (task, params) => {\n    // params.actionType = \"rpa\";\n\n    if (params.actionType === \"rpa\") {\n        return rpaAction(task, params);\n    }\n\n    if (params.actionType === \"mockApi\") {\n        return success({}, \"暂不支持mockApi\");\n    }\n\n    if (params.actionType === \"server\") {\n        return rpaServer(task, params);\n    }\n\n    return executeAction(rpaAction)(task, params);\n};\n","declare global {\n    interface Window {\n        mnsv2: (arg1: string, arg2: string) => string;\n        ck?: string;\n    }\n}\n\n// Node / Bun / Browser 兼容的 window 对象\nlet _windowCache: (Window & Record<string, unknown>) | null = null;\n\nconst getWindow = (): Window & Record<string, unknown> => {\n    if (_windowCache) return _windowCache;\n\n    if (typeof window !== \"undefined\") {\n        // 浏览器环境\n        _windowCache = window as unknown as Window & Record<string, unknown>;\n    } else if (typeof global !== \"undefined\") {\n        // Node.js 环境\n        _windowCache = globalThis as unknown as Window & Record<string, unknown>;\n    } else {\n        // 其他环境\n        _windowCache = globalThis as unknown as Window & Record<string, unknown>;\n    }\n\n    return _windowCache;\n};\n\n// ⭐ 必须最先注册（关键）\nif (typeof process !== \"undefined\") {\n    process.on(\"uncaughtException\", () => {});\n    process.on(\"unhandledRejection\", () => {});\n}\n\nconst mnsv2_enc = (arg1: string, arg2: string, cookieString: string): string => {\n    const win = getWindow();\n    win.ck = cookieString;\n\n    require(\"./ob.env\");\n    try {\n        require(\"./ob.enc\");\n    } catch {}\n\n    let result = \"\";\n\n    try {\n        result = win.mnsv2(arg1, arg2);\n    } catch {\n        // 同步异常（极少数）\n    }\n\n    return result;\n};\n\nexport default mnsv2_enc;\n","import crypto from \"node:crypto\";\nimport mnsvc2 from \"./mnsvc2\";\n\nconst encode_mnsv2 = require(\"./x_s.encoder.js\") as (\n    mnsv2: string,\n    type: string,\n    platform: string,\n    req_type: string,\n) => string;\n\nexport class Xhshow {\n    private stringifyCookies(cookies: Record<string, any>): string {\n        return Object.entries(cookies)\n            .map(([key, value]) => `${key}=${value}`)\n            .join(\"; \");\n    }\n    // constructor() {\n\n    // console.log(\"Xhshow xs encoder initialized\");\n    // }\n\n    signHeadersGet(\n        uri: string,\n        cookieString: Record<string, any>,\n        xsecAppid = \"ugc\",\n        params?: Record<string, unknown> | null,\n    ): Record<string, string> {\n        let para1 = \"\";\n        if (!params || Object.keys(params).length === 0) {\n            para1 = uri;\n        } else {\n            const _queryPara = Object.entries(params).map(([key, value]) => {\n                let valueStr = \"\";\n                if (Array.isArray(value)) {\n                    valueStr = value.map((v) => String(v)).join(\",\");\n                } else if (value !== null && value !== undefined) {\n                    valueStr = String(value);\n                }\n                return `${key}=${valueStr}`;\n            });\n            para1 = `${uri}?${_queryPara.join(\"&\")}`;\n        }\n\n        const md5Para1 = crypto.createHash(\"md5\").update(para1).digest(\"hex\"); // md5 enc\n        const mnsvc2_data = mnsvc2(para1, md5Para1, this.stringifyCookies(cookieString));\n\n        return { \"X-S\": encode_mnsv2(mnsvc2_data, xsecAppid, \"Windows\", \"object\") };\n    }\n\n    signHeadersPost(\n        uri: string,\n        cookieString: Record<string, any>,\n        xsecAppid = \"ugc\",\n        payload?: Record<string, unknown> | null,\n    ): Record<string, string> {\n        const para1 = uri + JSON.stringify(payload || {});\n        const md5Para1 = crypto.createHash(\"md5\").update(para1).digest(\"hex\"); // md5 enc\n        const mnsvc2_data = mnsvc2(para1, md5Para1, this.stringifyCookies(cookieString));\n\n        return { \"X-S\": encode_mnsv2(mnsvc2_data, xsecAppid, \"Windows\", \"object\") };\n    }\n}\n\nexport default Xhshow;\n//\n// const xhshow = new Xhshow();\n//\n// // For test\n// console.log(\n//     xhshow.signXsPost(\n//         \"/api/sns/web/v1/feed\",\n//         \"19aa5490309ue3bza2poh9lwqsqw2og6azztnku2050000809471\",\n//         \"xhs-pc-web\",\n//         {\"source_note_id\":\"6909f57e0000000007015f28\",\"image_formats\":[\"jpg\",\"webp\",\"avif\"],\"extra\":{\"need_body_topic\":\"1\"},\"xsec_source\":\"pc_search\",\"xsec_token\":\"ABEFyvlKvV2nK8QceNjsokHdjsoo7gonz4YIlxkzRbb5w=\"}\n//     )\n// );\n\n// console.log(xhshow.signXsGet(\"/api/sns/web/v1/search/filter\", \"19aa5490309ue3bza2poh9lwqsqw2og6azztnku2050000809471\", \"xhs-pc-web\", {keyword:\"ios26.1正式版\", search_id:\"2fn6umax1wg3kk0igh956\"}));\n","import fs from \"node:fs\";\n\nimport path from \"node:path\";\nimport { downloadImage, getFilenameFromUrl, response, success, TaskState } from \"@iflyrpa/share\";\nimport sizeOf from \"image-size\";\nimport { AxiosProxyParams, errorResponse, MockPublish, Xiaohongshu } from \"../../types\";\nimport { stringifyError } from \"../../utils\";\nimport { classifyPublishError } from \"../../utils/errorMessages\";\nimport { Http } from \"../../utils/http\";\nimport { reportLogger } from \"../../utils/reportLogger\";\nimport { Xhshow } from \"../../utils/xhs_ob_feed\";\nimport type { PublishAction } from \".\";\n\nimport Topic = Xiaohongshu.Topic;\n\ninterface CommonResponse<T = unknown> {\n    msg: string;\n    data: T;\n    proxyInfo?: Record<string, unknown>;\n    code: number;\n    success: boolean;\n    result?: number;\n}\n\ninterface UploadTempPermit<T = string[]> {\n    bucket: string;\n    uploadAddr: string;\n    fileIds: T;\n    token: string;\n}\n\nconst errnoMap: Record<number, string> = {\n    \"-1\": \"未知拦截器错误，请稍后重试。\",\n    915: \"所属C端账号手机号被修改，请重新登录\",\n    914: \"所属C端账号密码被修改，请重新登录\",\n    903: \"账户已登出，需重新登陆重试！\",\n    902: \"登录已过期，请重新登录！\",\n    906: \"账号存在风险，请重新登录！\",\n    \"-9136\": \"因违反社区规范禁止发笔记，请检查账号状态！\",\n};\n\n// 小红书参数加密器\nconst xsEncrypt = new Xhshow();\n\nexport const mockAction: PublishAction = async (task, params) => {\n    const tmpCachePath = task.getTmpPath();\n    if (\n        params?.selfDeclaration?.type === \"source-statement\" &&\n        params.selfDeclaration.childType === \"transshipment\" &&\n        params.originalBind\n    ) {\n        return { code: 414, message: \"原创声明与转载声明互斥，请重新选择后发布！\", data: \"\" };\n    }\n    const a1Cookie = params.cookies.find((it) => it.name === \"a1\")?.value;\n    if (!a1Cookie) {\n        return { code: 414, message: \"账号数据异常，请重新绑定账号后重试。\", data: \"\" };\n    }\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        origin: \"https://creator.xiaohongshu.com\",\n        referer: \"https://creator.xiaohongshu.com/\",\n        \"user-agent\":\n            \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36\",\n    };\n    const recordCookie = params.cookies.reduce<Record<string, string>>((acc, cookie) => {\n        if (cookie.name && cookie.value) {\n            acc[cookie.name] = cookie.value;\n        }\n        return acc;\n    }, {});\n\n    const args: AxiosProxyParams = [\n        { headers },\n        task.logger,\n        params.proxyLoc,\n        params.accountId,\n        \"xiaohongshu\", // 业务标识\n    ];\n\n    const http = new Http({ headers });\n    const proxyHttp = new Http(...args);\n\n    // 添加响应拦截器\n    proxyHttp.addResponseInterceptor<CommonResponse>((response) => {\n        const responseData = response?.data;\n\n        // 检查响应中的 errno 字段\n        if (\n            (response && responseData?.code && responseData.code !== 0) ||\n            (responseData?.code && !responseData.success)\n        ) {\n            const errmsg =\n                errnoMap[responseData.code] || response.config.defaultErrorMsg || \"文章发布异常，请稍后重试。\";\n\n            return {\n                code: errnoMap[responseData.code] ? 414 : 500,\n                message: errmsg,\n                data: responseData,\n            };\n        }\n    });\n\n    // 0. 获取上传 token\n    const fetchCoverUrl = \"/api/media/v1/upload/creator/permit\";\n    const fetchCoverParams = {\n        biz_name: \"spectrum\",\n        scene: \"image\",\n        file_count: params.banners.length,\n        version: 1,\n        source: \"web\",\n    };\n    const fetchCoverXsHeader = xsEncrypt.signHeadersGet(fetchCoverUrl, recordCookie, \"ugc\", fetchCoverParams);\n\n    const uploadInfos: UploadTempPermit<string>[] = [];\n    if (params.banners.length > 18) {\n        // 分批次获取 coverId\n        const num = Math.ceil(params.banners.length / 14);\n        for (let i = 0; i < num; i++) {\n            // const start = i * 14;\n            // const end = Math.min(start + 14, params.banners.length);\n            // const batchParams = {\n            //     ...fetchCoverParams,\n            //     file_count: end - start,\n            // };\n            const batchCoverIdInfo = await proxyHttp.api<CommonResponse<{ uploadTempPermits: UploadTempPermit[] }>>(\n                {\n                    method: \"get\",\n                    baseURL: \"https://creator.xiaohongshu.com\",\n                    url: fetchCoverUrl,\n                    defaultErrorMsg: \"获取小红书用户信息失败，请稍后重试发布。\",\n                    headers: fetchCoverXsHeader,\n                    params: fetchCoverParams,\n                },\n                { retries: 3, retryDelay: 500, timeout: 30000 },\n            );\n            for (const item of batchCoverIdInfo?.data?.uploadTempPermits ?? []) {\n                for (const fileId of item.fileIds) {\n                    uploadInfos.push({\n                        bucket: item.bucket || \"\",\n                        uploadAddr: item.uploadAddr || \"\",\n                        fileIds: fileId,\n                        token: item.token || \"\",\n                    });\n                }\n            }\n        }\n    } else {\n        const coverIdInfo = await proxyHttp.api<CommonResponse<{ uploadTempPermits: UploadTempPermit[] }>>(\n            {\n                method: \"get\",\n                baseURL: \"https://creator.xiaohongshu.com\",\n                url: fetchCoverUrl,\n                defaultErrorMsg: \"获取小红书用户信息失败，请稍后重试发布。\",\n                headers: fetchCoverXsHeader,\n                params: fetchCoverParams,\n            },\n            { retries: 3, retryDelay: 500, timeout: 30000 },\n        );\n        for (const item of coverIdInfo?.data?.uploadTempPermits ?? []) {\n            for (const fileId of item.fileIds) {\n                uploadInfos.push({\n                    bucket: item.bucket || \"\",\n                    uploadAddr: item.uploadAddr || \"\",\n                    fileIds: fileId,\n                    token: item.token || \"\",\n                });\n            }\n        }\n    }\n\n    if (uploadInfos.length < params.banners.length)\n        return { code: 414, message: \"可用 OSS bucket 数量不足，无法上传所有图片！\", data: \"\" };\n\n    if (uploadInfos.length === 0) return { code: 414, message: \"图片上传失败，请稍后重试！\", data: \"\" };\n\n    const availableBuckets = Array.from({ length: uploadInfos.length }, (_, i) => i);\n\n    const uploadFile = async (\n        url: string,\n        index: number,\n    ): Promise<{\n        ossFileId: string;\n        ossToken: string;\n        width: number;\n        height: number;\n        originSize: number;\n    }> => {\n        const fileName = getFilenameFromUrl(url);\n        const localUrl = await downloadImage(url, path.join(tmpCachePath, fileName));\n        const fileBuffer = fs.readFileSync(localUrl);\n\n        // 检查文件大小（小红书限制 32MB）\n        const maxSize = 32 * 1024 * 1024; // 32MB\n        if (fileBuffer.byteLength > maxSize) {\n            throw {\n                code: 414,\n                message: \"小红书平台：单张图片不得超过 32MB\",\n                data: \"\",\n            };\n        }\n\n        // 解析图片宽高与原始大小（origin_size 单位为 KB，与小红书 web 端保持一致）\n        let width = 0;\n        let height = 0;\n        try {\n            const dimensions = sizeOf(fileBuffer);\n            width = dimensions.width ?? 0;\n            height = dimensions.height ?? 0;\n\n            // 根据 EXIF orientation 调整宽高（小红书使用的是旋转后的显示尺寸）\n            // orientation 值说明：https://exiftool.sourceforge.net/TagNames/EXIF.html\n            // 1 = Horizontal (normal)\n            // 2 = Mirror horizontal\n            // 3 = Rotate 180\n            // 4 = Mirror vertical\n            // 5 = Mirror horizontal and rotate 270 CW\n            // 6 = Rotate 90 CW\n            // 7 = Mirror horizontal and rotate 90 CW\n            // 8 = Rotate 270 CW\n            const orientation = dimensions.orientation ?? 1;\n            if ([5, 6, 7, 8].includes(orientation)) {\n                [width, height] = [height, width];\n            }\n        } catch {\n            // 解析失败时保持 0，不阻断上传\n        }\n        const originSize = fileBuffer.byteLength / 1024;\n\n        const MAX_RETRIES = uploadInfos.length;\n        let attempt = 0;\n\n        while (attempt < MAX_RETRIES) {\n            // 分配 bucket\n            const ossBucketIndex = availableBuckets.shift(); // 移除并获取第一个可用 bucket\n\n            if (ossBucketIndex === undefined) {\n                return { ossFileId: \"\", ossToken: \"\", width, height, originSize }; // 没有可用 bucket\n            }\n\n            const currentInfo = uploadInfos[ossBucketIndex];\n            const ossFileId = currentInfo.fileIds;\n            const ossToken = currentInfo.token;\n            const ossDomain = currentInfo.uploadAddr;\n\n            try {\n                await http.api(\n                    {\n                        method: \"put\",\n                        url: `https://${ossDomain}/${ossFileId}`,\n                        data: fileBuffer,\n                        headers: {\n                            \"x-cos-security-token\": ossToken,\n                        },\n                        defaultErrorMsg: \"图片上传异常，请稍后重试。\",\n                    },\n                    { timeout: 60000 },\n                );\n                return { ossFileId, ossToken, width, height, originSize };\n            } catch (error) {\n                const e = Http.handleApiError(error);\n                task.logger.warn(\n                    `[xhs upload] 第${attempt + 1}次失败 index=${index} bucket=${ossBucketIndex} ` +\n                        `domain=${ossDomain} fileId=${ossFileId} code=${e.code} msg=${e.message} ` +\n                        `data=${stringifyError(e.data)}`,\n                );\n                attempt++;\n            }\n        }\n        return { ossFileId: \"\", ossToken: \"\", width, height, originSize }; // 所有尝试失败\n    };\n\n    const coverInfos = await Promise.all(params.banners.map((it, idx) => uploadFile(it, idx)));\n    const invalidUpload = coverInfos.find((it) => it.ossToken === \"\" || it.ossFileId === \"\");\n    if (invalidUpload) return { code: 414, message: \"图片上传异常，请稍后重试发布。\", data: \"\" };\n\n    if (params.topic && params.topic.length > 0) {\n        await Promise.all(\n            params.topic.map(async (topic) => {\n                if (!topic.id) {\n                    const topicData = { topic_names: topic.name };\n                    const topicXsHeader = xsEncrypt.signHeadersPost(\n                        \"/web_api/sns/capa/postgw/topic/batch_customized\",\n                        recordCookie,\n                        \"ugc\",\n                        topicData,\n                    );\n\n                    const createTopic = await proxyHttp.api<{ data?: { topic_infos: Topic[] } }>(\n                        {\n                            method: \"POST\",\n                            url: \"https://edith.xiaohongshu.com/web_api/sns/capa/postgw/topic/batch_customized\",\n                            headers: topicXsHeader,\n                            data: topicData,\n                            defaultErrorMsg: \"话题创建异常，请稍后重试。\",\n                        },\n                        { retries: 3, retryDelay: 20, timeout: 3000 },\n                    );\n                    if (!createTopic?.data) throw errorResponse(\"话题创建失败，请检查话题字段！\", 414);\n                    Object.assign(topic, createTopic?.data?.topic_infos[0]);\n                }\n            }),\n        );\n    }\n\n    const visibleRangeMap = {\n        public: 0,\n        private: 1,\n        friends: 4,\n    };\n\n    const publishData = {\n        common: {\n            ats: [],\n            biz_relations: [],\n            desc: params?.content,\n            goods_info: {},\n            hash_tag: params.topic || [],\n            note_id: \"\",\n            source: JSON.stringify({\n                type: \"web\",\n                ids: \"\",\n                extraInfo: '{\"systemId\":\"web\"}',\n            }),\n            title: params?.title,\n            type: \"normal\",\n            privacy_info: {\n                op_type: 1,\n                type: visibleRangeMap[params.visibleRange],\n            },\n            post_loc: params.address\n                ? {\n                      name: params.address?.name,\n                      poi_id: params.address?.poi_id,\n                      poi_type: params.address?.poi_type,\n                      subname: params.address?.full_address,\n                  }\n                : null,\n            business_binds: \"\",\n        },\n        image_info: {\n            images: coverInfos.map((it) => ({\n                extra_info_json: JSON.stringify({\n                    mimeType: \"image/png\",\n                    image_metadata: {\n                        bg_color: \"\",\n                        origin_size: it.originSize,\n                    },\n                }),\n                file_id: it.ossFileId,\n                width: it.width,\n                height: it.height,\n                metadata: { source: -1 },\n                stickers: { floating: [], version: 2 },\n            })),\n        },\n        video_info: null,\n    };\n\n    // 自主声明\n    const userDeclarationBind = {\n        origin: 2,\n        photoInfo: {},\n        repostInfo: {},\n    };\n\n    if (params.selfDeclaration?.type === \"fictional-rendition\") {\n        // 虚拟演绎，仅供娱乐\n        userDeclarationBind.origin = 1;\n    } else if (params.selfDeclaration?.type === \"ai-generated\") {\n        // 笔记含AI合成内容\n        userDeclarationBind.origin = 2;\n    } else if (params.selfDeclaration?.type === \"source-statement\") {\n        // 内容来源声明\n        if (params.selfDeclaration.childType === \"self-labeling\") {\n            // 已自主标注\n            userDeclarationBind.origin = 3;\n        } else if (params.selfDeclaration.childType === \"self-shooting\") {\n            // 自主拍摄\n            userDeclarationBind.origin = 4;\n            const photoInfo: { photoPlace?: unknown; photoTime?: string } = {};\n\n            if (params.selfDeclaration.shootingLocation) {\n                // 拍摄地点\n                photoInfo.photoPlace = {\n                    name: params.selfDeclaration.shootingLocation.name,\n                    poiId: params.selfDeclaration.shootingLocation.poi_id,\n                    poiType: params.selfDeclaration.shootingLocation.poi_type,\n                    subname: params.selfDeclaration.shootingLocation.full_address,\n                };\n            }\n\n            if (params.selfDeclaration.shootingDate) {\n                // 拍摄日期\n                photoInfo.photoTime = params.selfDeclaration.shootingDate;\n            }\n\n            userDeclarationBind.photoInfo = photoInfo;\n        } else if (params.selfDeclaration.childType === \"transshipment\") {\n            // 来源转载\n            userDeclarationBind.origin = 5;\n\n            if (params.selfDeclaration.sourceMedia) {\n                // 来源媒体\n                userDeclarationBind.repostInfo = {\n                    source: params.selfDeclaration.sourceMedia,\n                };\n            }\n        }\n    }\n\n    const bizId =\n        params?.originalBind &&\n        (params.cookies.find((it) => it.name === \"x-user-id-creator.xiaohongshu.com\")?.value ||\n            (await proxyHttp\n                .api<{ data: { userDetail: { id: string } } }>(\n                    {\n                        method: \"get\",\n                        url: \"https://creator.xiaohongshu.com/api/galaxy/user/my-info\",\n                    },\n                    { retries: 3, retryDelay: 20, timeout: 3000 },\n                )\n                .then((userData) => userData?.data?.userDetail?.id)));\n\n    const business_binds = {\n        version: 1,\n        bizType: \"\",\n        noteId: \"\",\n        noteOrderBind: {},\n        // 发布时间 - 立即发布/定时发布\n        notePostTiming: params.isImmediatelyPublish ? {} : { postTime: params.scheduledPublish },\n        coProduceBind: { enable: !!params?.coProduceBind }, // 是否允许合拍\n        noteCopyBind: { copyable: !!params?.noteCopyBind }, // 关闭允许复制\n        optionRelationList: params.originalBind\n            ? [\n                  {\n                      // 原创声明\n                      type: \"ORIGINAL_STATEMENT\",\n                      relationList: [\n                          {\n                              bizId,\n                              bizType: \"ORIGINAL_STATEMENT\",\n                              extraInfo: \"{}\",\n                          },\n                      ],\n                  },\n              ]\n            : [],\n        ...(params?.groupBind\n            ? {\n                  groupBind: {\n                      groupId: params?.groupBind?.group_id,\n                      groupName: params.groupBind?.group_name,\n                      desc: params.groupBind?.desc,\n                      avatar: params.groupBind?.avatar,\n                  },\n              }\n            : { groupBind: {} }),\n        ...(params.selfDeclaration ? { userDeclarationBind } : {}),\n        ...(params?.collectionBind?.id ? { noteCollectionBind: { id: params.collectionBind.id } } : {}),\n    };\n\n    publishData.common.business_binds = JSON.stringify(business_binds);\n\n    const publishXsHeader = xsEncrypt.signHeadersPost(\"/web_api/sns/v2/note\", recordCookie, \"ugc\", publishData);\n\n    task._timerRecord.PrePublish = Date.now();\n\n    const updateTaskState = task.taskStageStore?.update?.bind(task.taskStageStore, task.taskId || \"\");\n\n    if (MockPublish) {\n        const message = `文章模拟发布成功 ${http.proxyInfo}`;\n        const data = \"123456789\";\n\n        await updateTaskState?.({\n            state: TaskState.SUCCESS,\n            result: {\n                response: data,\n            },\n        });\n        return success(data, message);\n    }\n\n    task.logger.info(`[xiaohongshuPublish] publishData: ${JSON.stringify(publishData)} `);\n\n    // 发布\n    let publishResult: CommonResponse<{ id: string }>;\n    try {\n        publishResult = await proxyHttp.api<CommonResponse<{ id: string }>>(\n            {\n                method: \"post\",\n                url: \"https://edith.xiaohongshu.com/web_api/sns/v2/note\",\n                data: publishData,\n                headers: publishXsHeader,\n                defaultErrorMsg: \"文章发布异常，请稍后重试。\",\n            },\n            { retries: 2, retryDelay: 3000, timeout: 30 * 1000 },\n        );\n    } catch (error) {\n        const handledError = Http.handleApiError(error);\n        // 代理连接超时(599) 与网络/服务端错误(500/502/503/504)：重试耗尽后直接返回分类文案，\n        // 不再 throw 走 executeAction 的 RPA 兜底。code 归一为 414，使 executeAction 视为终止结果。\n        const classified = classifyPublishError(handledError);\n        if (classified) {\n            // 用户侧只给分类文案，原始错误信息记进日志；debug 模式下追加代理信息便于排查\n            const message = `${classified.userMessage}${task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n            task.logger.error(\n                `[xiaohongshuPublish] ${classified.category}，直接返回: ${handledError.message} (code=${handledError.code})`,\n                stringifyError(handledError),\n            );\n            await updateTaskState?.({\n                state: TaskState.FAILED,\n                error: message,\n            });\n            return { code: 414, data: \"\", message };\n        }\n        // 其它错误码维持原有逻辑，抛出以便上层 executeAction 走 RPA 兜底\n        throw error;\n    }\n\n    reportLogger({\n        token: params.huiwenToken || \"\",\n        enverionment: task.enverionment || \"development\",\n        postId: params.articleId,\n        eip: proxyHttp.proxyInfo,\n        accountId: params.accountId,\n        uid: params.uid,\n        platform: \"xiaohongshu\",\n        publishParams: publishData,\n    });\n\n    task.logger.info(`[xiaohongshuPublish] publishResult: ${JSON.stringify(publishResult)} `);\n\n    const isSuccess = publishResult.success;\n    const message = `文章发布${isSuccess ? \"成功\" : `失败，原因：${publishResult.msg}`}${task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n    const data = isSuccess ? publishResult?.data?.id || \"\" : \"\";\n\n    if (!isSuccess) {\n        await updateTaskState?.({\n            state: TaskState.FAILED,\n            error: message,\n        });\n        return { code: 414, data, message };\n    }\n\n    await updateTaskState?.({\n        state: TaskState.SUCCESS,\n        result: {\n            response: data,\n        },\n    });\n    // 临时返回结束\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import path from \"node:path\";\nimport { CookieMap, downloadImage, getFilenameFromUrl, Locator, Response, success, TaskState } from \"@iflyrpa/share\";\n// import { Xhshow } from \"../../utils/xhsXsEncrypt\";\nimport type { PublishAction } from \"./index\";\n// const GenXSCommon = require(\"../../utils/XhsXsCommonEnc.js\") as (a1cookie: string, x_t: string|number, x_s:string) => string;\n\n// 小红书参数加密器\n// const xsEncrypt = new Xhshow();\n\nexport const rpaAction: PublishAction = async (task, params) => {\n    const updateTaskState = task.taskStageStore?.update?.bind(task.taskStageStore, task.taskId || \"\");\n\n    const commonCookies = {\n        path: \"/\",\n        sameSite: \"lax\",\n        secure: false,\n        domain: \".xiaohongshu.com\",\n        url: \"https://creator.xiaohongshu.com\",\n        httpOnly: true,\n    };\n\n    const page = await task.createPage({\n        show: task.debug,\n        url: params.url || \"https://creator.xiaohongshu.com/publish/publish\",\n        cookies: params.cookies?.map((it) => ({ ...it, ...commonCookies })),\n    });\n\n    await updateTaskState?.({\n        state: TaskState.ACTION,\n        connectAddress: task.steelConnector?.getProxyUrl(task.sessionId || \"\", \"v1/sessions/debug\"),\n        sessionId: task.sessionId,\n    });\n    const tmpCachePath = task.getTmpPath();\n\n    // const interceptUrls = [\n    // \t'/api/media/v1/upload/creator/permit',\n    // \t'/api/galaxy/v2/creator/activity_center/list',\n    // \t'/web_api/sns/v5/creator/topic/template/list',\n    // \t'/web_api/sns/v5/creator/file/encryption',\n    // \t'/web_api/sns/capa/postgw/topic/batch_customized',\n    // \t'/web_api/sns/v2/note'\n    // ];\n\n    // await page.route('**', async (route, request) => {\n    // \tconst url = request.url();\n    // \tif (interceptUrls.some(pattern => url.includes(pattern))) {\n    // \t\tconst urlObj = new URL(url);\n    // \t\tconst fetchCoverUrl = urlObj.pathname + urlObj.search;\n    //         const fetchCoverParams = Object.fromEntries(new URLSearchParams(urlObj.search));\n    // \t\tconst xt = Date.now().toString();\n    //\n    // \t\tconst a1Cookie = params.cookies.find((it) => it.name === \"a1\")?.value;\n    // \t\tif (!a1Cookie) {\n    // \t\t\tawait route.fulfill({\n    // \t\t\t\tstatus: 200,\n    // \t\t\t\tcontentType: 'application/json',\n    // \t\t\t\tbody: JSON.stringify({ code: 414, message: \"账号数据异常，请重新绑定账号后重试。\", data: \"\" })\n    // \t\t\t});\n    // \t\t\treturn;\n    // \t\t}\n    //\n    // \t\tconst isNoteRequest = urlObj.pathname.includes(interceptUrls[5]);\n    //\n    // \t\tconst xs = await (isNoteRequest\n    // \t\t\t? (async () => {\n    // \t\t\t\tconst publishData = JSON.parse(request.postData() || \"\")\n    // \t\t\t\treturn xsEncrypt.signXsPost(interceptUrls[5], a1Cookie,\"xhs-pc-web\" ,publishData);\n    // \t\t\t  })(): xsEncrypt.signXsGet(urlObj.pathname, a1Cookie, \"xhs-pc-web\" , fetchCoverParams))\n    //\n    //         const xscommon = GenXSCommon(a1Cookie, xt, xs)\n    //\n    // \t\tconst newHeaders = {\n    // \t\t\t...request.headers(),\n    // \t\t\t'x-s': xs,\n    //             'x-s-common':xscommon\n    // \t\t};\n    //\n    // \t\tawait route.continue({ headers: newHeaders });\n    // \t}else {\n    // \t\tawait route.continue();\n    // \t}\n    // });\n\n    // 通用的选择地点\n    const selectAddress = async (selector: Locator, address: string) => {\n        const instance = typeof selector === \"string\" ? page.locator(selector) : selector;\n        await instance.click();\n        await instance.locator(\"input\").fill(address);\n        const poperInstance = page.locator('.d-popover:not([style*=\"display: none\"]) .d-options .d-grid-item');\n        await poperInstance.first().waitFor();\n        await poperInstance.first().click();\n    };\n\n    // 通用的选择日期\n    const selectDate = async (selector: string | Locator, date: string) => {\n        const instance = typeof selector === \"string\" ? page.locator(selector) : selector;\n        await instance.click();\n        await instance.fill(date);\n        await instance.blur();\n    };\n\n    // 查找显示的 popover 弹窗\n    const getPoperInstance = async (): Promise<Locator> => {\n        await page.waitForTimeout(500);\n        const elements = page.locator(\".d-popover\");\n        const count = await elements.count();\n        const visibleElements: (typeof elements)[] = [];\n\n        for (let i = 0; i < count; i++) {\n            const element = elements.nth(i);\n            const style = await element.getAttribute(\"style\");\n            if (style && !style.includes(\"display: none\")) {\n                visibleElements.push(element);\n            }\n        }\n\n        if (visibleElements.length > 0) {\n            return visibleElements[visibleElements.length - 1];\n        }\n\n        throw new Error(\"未找到 popover 弹窗\");\n    };\n\n    // 查找显示的 dialog 弹窗\n    const getDialogInstance = async (): Promise<Locator> => {\n        await page.waitForTimeout(1000);\n        const elements = page.locator(\".el-dialog\");\n        return elements.last();\n    };\n\n    // 自动化脚本\n    // ----------------------------------------------------------------------------------\n\n    // 等待登录成功\n    try {\n        await page.waitForSelector(\"#CreatorPlatform\", { state: \"visible\" });\n    } catch (error) {\n        return { code: 414, message: \"登录失效\", data: page.url() };\n    }\n\n    // 跳转到发布页面\n    await page.locator(\"#content-area .menu-container .publish-video .btn-wrapper .btn-inner\").click();\n\n    // 点击上传图文\n    await page\n        .locator('.header-tabs .creator-tab:not([style*=\"-9999px\"])')\n        .filter({ hasText: /^上传图文$/ })\n        .click();\n\n    // 获取待上传图片的本地路径\n    const images = await Promise.all(\n        params.banners.map((url) => {\n            const fileName = getFilenameFromUrl(url);\n            return downloadImage(url, path.join(tmpCachePath, fileName));\n        }),\n    );\n\n    // 选择文件\n    const fileChooser = await page.$(\"input.upload-input\");\n    if (fileChooser) await fileChooser.setInputFiles(images);\n\n    // 填写标题\n    const titleInstance = page.locator(\".input input\");\n    await titleInstance.waitFor({ state: \"visible\", timeout: 1000 * 50 });\n    await titleInstance.click();\n    await titleInstance.fill(params.title);\n\n    // 填写正文\n    const descInstance = page.locator(\".editor-container .tiptap.ProseMirror\");\n    await descInstance.click();\n    await descInstance.pressSequentially(params.content.replace(/#.*?\\[.*?]#/g, \"\"));\n\n    // 填写话题\n    if (params.topic && params.topic.length > 0) {\n        for (const it of params.topic) {\n            await descInstance.pressSequentially(`#${it.name}`);\n            await page.locator(\"#creator-editor-topic-container\").waitFor({ state: \"visible\" });\n            await page.waitForTimeout(500);\n            await page.locator(\"#creator-editor-topic-container .item\").first().click();\n        }\n    }\n\n    if (params.address) {\n        // 填写地点\n        await selectAddress(page.locator(\".address-card-wrapper .d-select-wrapper\"), params.address.name);\n    }\n\n    if (params.selfDeclaration) {\n        // 自主声明\n        await page.locator(\".declaration-wrapper .d-select-wrapper\").click();\n        const poperInstance = await getPoperInstance();\n        const selfDeclarationInstance = poperInstance.locator(\".d-options .d-option\");\n        if (params.selfDeclaration.type === \"fictional-rendition\") {\n            await selfDeclarationInstance.filter({ hasText: \"虚构演绎，仅供娱乐\" }).click();\n        } else if (params.selfDeclaration.type === \"ai-generated\") {\n            await selfDeclarationInstance.filter({ hasText: \"笔记含AI合成内容\" }).click();\n        } else if (params.selfDeclaration.type === \"source-statement\") {\n            await selfDeclarationInstance.filter({ hasText: /内容来源声明/ }).click();\n            // 内容来源声明二级菜单\n            const selfDeclarationSecondaryMenuInstance = (await getPoperInstance()).locator(\".d-options .d-option\");\n            // 等待元素出现\n            await selfDeclarationSecondaryMenuInstance.first().waitFor();\n            if (params.selfDeclaration.childType === \"self-labeling\") {\n                await selfDeclarationSecondaryMenuInstance.filter({ hasText: \"已在正文中自主标注\" }).click();\n            } else if (params.selfDeclaration.childType === \"self-shooting\") {\n                const { shootingDate, shootingLocation } = params.selfDeclaration;\n                await selfDeclarationSecondaryMenuInstance.filter({ hasText: \"自主拍摄\" }).click();\n                // 自主拍摄弹窗\n                const selfShootingPopup = await getDialogInstance();\n                const hasCustomContent = shootingDate || shootingLocation;\n\n                // 选择拍摄地点\n                if (shootingLocation) {\n                    await selectAddress(selfShootingPopup.locator(\".address-input\"), shootingLocation.name);\n                }\n                // 选择拍摄日期\n                if (shootingDate) {\n                    await selectDate(selfShootingPopup.locator(\".date-picker input\"), shootingDate);\n                }\n\n                await selfShootingPopup\n                    .locator(\"footer button\")\n                    .filter({ hasText: hasCustomContent ? \"确认\" : \"取消\" })\n                    .click();\n            } else if (params.selfDeclaration.childType === \"transshipment\") {\n                await selfDeclarationSecondaryMenuInstance.filter({ hasText: \"来源转载\" }).click();\n                // 来源媒体弹窗\n                const selfShootingPopup = await getDialogInstance();\n\n                const sourceMedia = params.selfDeclaration.sourceMedia;\n                if (sourceMedia) {\n                    await selfShootingPopup.locator(\".el-input input\").fill(sourceMedia);\n                }\n\n                await selfShootingPopup\n                    .locator(\"footer button\")\n                    .filter({ hasText: sourceMedia ? \"确认\" : \"取消\" })\n                    .click();\n            }\n        }\n    }\n\n    // 可见范围 - 仅自己可见\n    if (params.visibleRange === \"private\") {\n        await page.locator(\".publish-page-content-setting-content .d-select-wrapper\").last().click();\n        const poperInstance = await getPoperInstance();\n        await poperInstance.locator(\".d-options .d-option\").filter({ hasText: \"仅自己可见\" }).click();\n    }\n\n    task._timerRecord.PrePublish = Date.now();\n\n    // 发布时间选择：立即发布 / 定时发布\n    const releaseTimeInstance = page\n        .locator(\"label\")\n        .filter({ hasText: params.isImmediatelyPublish ? \"立即发布\" : \"定时发布\" });\n    await releaseTimeInstance.click();\n\n    if (params.scheduledPublish) {\n        // 自定义发布时间\n        await selectDate(\".date-picker input\", params.scheduledPublish);\n    }\n\n    // 等待图片上传完成：检测 .progress-container 消失且发布按钮存在\n    await page.waitForFunction(\n        () => {\n            const publishBtn = Array.from(document.querySelectorAll(\"button\")).find(\n                (b) => b.textContent?.trim() === \"发布\",\n            );\n            const uploading = document.querySelector(\".progress-container\");\n            return !!publishBtn && !uploading;\n        },\n        { timeout: 180000, polling: 2000 },\n    );\n\n    const response = await new Promise<string>((resolve, reject) => {\n        // 定义响应处理函数\n        const handleResponse = async (response: Response) => {\n            if (response.url().includes(\"/web_api/sns/v2/note\")) {\n                const jsonResponse = await response.json();\n                page.off(\"response\", handleResponse);\n                if (jsonResponse?.success) {\n                    resolve(jsonResponse?.data?.id);\n                } else {\n                    reject(new Error(jsonResponse?.msg || \"发布失败\"));\n                }\n            }\n        };\n\n        // 开始监听响应事件\n        page.on(\"response\", handleResponse);\n\n        page.locator(\".publish-page-publish-btn button\").filter({ hasText: \"发布\" }).click();\n    });\n\n    await updateTaskState?.({\n        state: TaskState.SUCCESS,\n        result: {\n            response,\n        },\n    });\n\n    // 关闭页面\n    await page.close();\n\n    return success(response);\n};\n","import path from \"node:path\";\nimport { downloadImage, getFilenameFromUrl, Locator, Response, success, TaskState } from \"@iflyrpa/share\";\nimport { Page } from \"playwright-core\";\nimport { MockPublish } from \"../../types\";\nimport { ProxyAgent } from \"../../utils/proxy\";\nimport type { PublishAction } from \"./index\";\n\nexport const rpaAction_Server: PublishAction = async (task, params) => {\n    if (params.originalBind && params?.selfDeclaration?.type === \"source-statement\") {\n        return { code: 414, message: \"已声明原创不可选择“来源转载”\", data: \"\" };\n    }\n\n    const defaultPage = task.steelBrowserContext?.pages()[0];\n    if (defaultPage) {\n        // 如果 route 已经注册过，就不重复注册\n        if (!(defaultPage as any)._routeRegistered) {\n            (defaultPage as any)._routeRegistered = true;\n\n            const blockedPatterns = [\n                \"**/ffmpeg-core.wasm*\",\n                \"**/apm-fe.xiaohongshu.com*\",\n                \"**/t2.xiaohongshu.com*\",\n                \"**/fe-video-qc.xhscdn.com*\",\n            ].map((pattern) => new RegExp(pattern.replace(/\\*\\*/g, \".*\").replace(/\\*/g, \"[^/]*\")));\n\n            await defaultPage.route(\"**/*\", async (route) => {\n                const req = route.request();\n                const url = req.url();\n\n                // 是否命中屏蔽规则\n                const blocked = blockedPatterns.some((regex) => regex.test(url));\n                if (!blocked) {\n                    return route.continue();\n                }\n\n                if (req.method() === \"OPTIONS\") {\n                    console.log(\"处理 OPTIONS 预检：\", url);\n                    await route.fulfill({\n                        status: 204,\n                        headers: {\n                            \"access-control-allow-origin\": \"*\",\n                            \"access-control-allow-methods\": \"GET,POST,OPTIONS,PUT,DELETE\",\n                            \"access-control-allow-headers\": \"*\",\n                        },\n                        body: \"\",\n                    });\n                    return;\n                }\n\n                await route.fulfill({\n                    status: 204,\n                    body: \"\",\n                });\n            });\n        }\n    }\n\n    const tmpCachePath = task.getTmpPath();\n    task.logger?.info(\"==>进入RPA操作：任务开始,下载图片开始...\");\n    const updateTaskState = task.taskStageStore?.update?.bind(task.taskStageStore, task.taskId || \"\");\n    const imagePromise = Promise.all(\n        params.banners.map((url) => {\n            const fileName = getFilenameFromUrl(url);\n            return downloadImage(url, path.join(tmpCachePath, fileName));\n        }),\n    );\n\n    let proxyUrl: string | undefined;\n    if (params.proxyLoc) {\n        task.logger?.info(`==> 开始获取代理信息：${params}`);\n        const ProxyAgentResult = await ProxyAgent({ logger: task.logger }, params.proxyLoc, params.accountId);\n        task.logger?.info(\"==> 代理信息获取成功！\");\n        proxyUrl = ProxyAgentResult ? `http://${ProxyAgentResult.ip}:${ProxyAgentResult.port}` : undefined;\n    }\n\n    task.logger?.info(\"==>开始打开小红书页面...\");\n    const page = await task.createPage({\n        show: task.debug,\n        cookies: params.cookies,\n        proxyUrl,\n        url: params.url || \"https://creator.xiaohongshu.com/publish/publish?source=official&from=menu&target=image\",\n        ...(params.viewport ? { viewport: params.viewport } : {}),\n    });\n    task.logger?.info(\"==>小红书页面打开成功\");\n\n    await updateTaskState?.({\n        state: TaskState.ACTION,\n        connectAddress: task.steelConnector?.getProxyUrl(task.sessionId || \"\", \"v1/sessions/debug\"),\n        sessionId: task.sessionId,\n    });\n\n    const clickTimeout = 1000 * 10;\n\n    // 通用的选择地点\n    const selectAddress = async (selector: Locator, address: string) => {\n        const instance = typeof selector === \"string\" ? page.locator(selector) : selector;\n        await instance.click({ timeout: clickTimeout });\n        await instance.locator(\"input\").fill(address);\n        const poperInstance = page.locator('.d-popover:not([style*=\"display: none\"]) .d-options .d-grid-item');\n        await poperInstance.first().waitFor();\n        await poperInstance.first().click({ timeout: clickTimeout });\n    };\n\n    // 通用的选择日期\n    const selectDate = async (selector: string | Locator, date: string) => {\n        const instance = typeof selector === \"string\" ? page.locator(selector) : selector;\n        await instance.click({ timeout: clickTimeout });\n        await instance.fill(date);\n        await instance.blur();\n    };\n\n    // 查找显示的 popover 弹窗\n    const getPoperInstance = async (): Promise<Locator> => {\n        await page.waitForTimeout(500);\n        const elements = page.locator(\".d-popover\");\n        const count = await elements.count();\n        const visibleElements: (typeof elements)[] = [];\n\n        for (let i = 0; i < count; i++) {\n            const element = elements.nth(i);\n            const style = await element.getAttribute(\"style\");\n            if (style && !style.includes(\"display: none\")) {\n                visibleElements.push(element);\n            }\n        }\n\n        if (visibleElements.length > 0) {\n            return visibleElements[visibleElements.length - 1];\n        }\n\n        throw new Error(\"未找到 popover 弹窗\");\n    };\n\n    // 查找显示的 dialog 弹窗\n    const getDialogInstance = async (): Promise<Locator> => {\n        await page.waitForTimeout(1000);\n        const elements = page.locator(\".el-dialog\");\n        return elements.last();\n    };\n\n    // 自动化脚本\n    // ----------------------------------------------------------------------------------\n\n    // 等待登录成功\n    try {\n        await page.waitForSelector(\"#CreatorPlatform\", { state: \"attached\" });\n    } catch (error) {\n        return { code: 414, message: \"登录失效\", data: page.url() };\n    }\n    // 获取待上传图片的本地路径\n    const images = await imagePromise;\n\n    task.logger?.info(`==>图片下载完成，共 ${images.length} 张，开始上传图片...`);\n\n    const fileChooser = await page.waitForSelector(\"input.upload-input\", { timeout: 1000 * 10 });\n\n    if (fileChooser) {\n        await fileChooser.setInputFiles(images, { timeout: 60 * 1000 }).catch((err) => {\n            task.logger?.error(`设置上传文件失败：${err.message}`);\n        });\n    } else {\n        task.logger?.error(\"文件上传输入框未找到\");\n    }\n\n    task.logger?.info(\"==>图片上传完成，开始渲染预览图...\");\n\n    // 填写标题\n    const titleInstance = page.locator(\".input input\");\n    await titleInstance.waitFor({ state: \"attached\", timeout: 1000 * 60 });\n    await titleInstance.click({ timeout: clickTimeout * 24 });\n    task.logger?.info(\"==> 预览图渲染成功，开始RPA操作！\");\n    await titleInstance.fill(params.title);\n\n    // 填写正文\n    const descInstance = page.locator(\".editor-container .tiptap.ProseMirror\");\n    await descInstance.click({ timeout: clickTimeout });\n    await descInstance.fill(`${params.content.replace(/#.*?\\[.*?]#/g, \"\")}\\n`);\n    await page.keyboard.press(\"Control+End\");\n\n    // 填写话题\n    if (params.topic && params.topic.length > 0) {\n        for (const it of params.topic) {\n            await page.keyboard.insertText(`#${it.name}`);\n            await page.locator(\".ql-mention-loading\").waitFor({ state: \"detached\" });\n            await page.waitForTimeout(1000);\n            await page.locator(\"#creator-editor-topic-container .item.is-selected\").click({ timeout: clickTimeout });\n            await page.keyboard.press(\"Control+End\");\n        }\n    }\n\n    // 滚动到底部\n    const container = page.locator(\".plugin.editor-container\");\n    await container.focus();\n    await page.mouse.wheel(0, 500); // 向下滚动 500 像素\n\n    if (params.address) {\n        // 填写地点\n        await selectAddress(\n            page.locator(\".media-extension .address-input\").filter({ hasText: \"添加地点\" }),\n            params.address.name,\n        );\n    }\n\n    // 添加合集\n    if (params.collectionBind) {\n        await page\n            .locator(\".media-extension .collection-container\")\n            .filter({ hasText: \"添加合集\" })\n            .click({ timeout: clickTimeout });\n        const collectionName = params.collectionBind.name;\n        const collectionBindInstance = await getPoperInstance(); // 获取弹窗实例\n        const collectionItemInstance = collectionBindInstance.locator(\".d-grid-item .item-label\", {\n            hasText: collectionName,\n        });\n        await collectionBindInstance.locator(\".loading\").waitFor({ state: \"detached\" });\n        await collectionItemInstance.click({ timeout: clickTimeout });\n    }\n\n    // 选择群聊\n    if (params.groupBind) {\n        await page\n            .locator(\".media-extension .address-input\")\n            .filter({ hasText: \"选择群聊\" })\n            .click({ timeout: clickTimeout });\n        const groupBindName = params.groupBind.group_name;\n        const groupBindInstance = await getPoperInstance(); // 获取弹窗实例\n        const groupItemInstance = groupBindInstance.locator(\".d-grid-item .name\", { hasText: groupBindName });\n        await groupBindInstance.locator(\".loading\").waitFor({ state: \"detached\" });\n        await groupItemInstance.click({ timeout: clickTimeout });\n    }\n\n    // 原创声明\n    const OriginalBindBtn = page.locator(\".btn-text.red\", { hasText: \"去声明\" });\n    const isOriginalBindBtnVisible = await OriginalBindBtn.isVisible();\n    if (isOriginalBindBtnVisible && params.originalBind) {\n        await OriginalBindBtn.click({ timeout: clickTimeout });\n        const poperInstance = await getPoperInstance();\n        await poperInstance.locator(\".d-checkbox-simulator\").click({ timeout: clickTimeout }); // 勾选同意协议的复选框\n        await poperInstance.locator(\".footer .custom-button.bg-red\").click({ timeout: clickTimeout }); // 点击声明原创按钮\n    }\n\n    // 内容类型声明\n    if (params.selfDeclaration) {\n        // 自主声明\n        await page\n            .locator(\".media-settings .flexbox\")\n            .filter({ hasText: \"内容类型声明\" })\n            .locator(\".d-select-placeholder\")\n            .click({ timeout: clickTimeout });\n        const poperInstance = await getPoperInstance();\n        const selfDeclarationInstance = poperInstance.locator(\".d-options .d-option\");\n        if (params.selfDeclaration.type === \"fictional-rendition\") {\n            await selfDeclarationInstance.filter({ hasText: \"虚构演绎，仅供娱乐\" }).click({ timeout: clickTimeout });\n        } else if (params.selfDeclaration.type === \"ai-generated\") {\n            await selfDeclarationInstance.filter({ hasText: \"笔记含AI合成内容\" }).click({ timeout: clickTimeout });\n        } else if (params.selfDeclaration.type === \"source-statement\") {\n            await selfDeclarationInstance.filter({ hasText: /内容来源声明/ }).click({ timeout: clickTimeout });\n            // 内容来源声明二级菜单\n            const selfDeclarationSecondaryMenuInstance = (await getPoperInstance()).locator(\".d-options .d-option\");\n            // 等待元素出现\n            await selfDeclarationSecondaryMenuInstance.first().waitFor();\n            if (params.selfDeclaration.childType === \"self-labeling\") {\n                await selfDeclarationSecondaryMenuInstance\n                    .filter({ hasText: \"已在正文中自主标注\" })\n                    .click({ timeout: clickTimeout });\n            } else if (params.selfDeclaration.childType === \"self-shooting\") {\n                const { shootingDate, shootingLocation } = params.selfDeclaration;\n                await selfDeclarationSecondaryMenuInstance\n                    .filter({ hasText: \"自主拍摄\" })\n                    .click({ timeout: clickTimeout });\n                // 自主拍摄弹窗\n                const selfShootingPopup = await getDialogInstance();\n                const hasCustomContent = shootingDate || shootingLocation;\n\n                // 选择拍摄地点\n                if (shootingLocation) {\n                    await selectAddress(selfShootingPopup.locator(\".address-input\"), shootingLocation.name);\n                }\n                // 选择拍摄日期\n                if (shootingDate) {\n                    await selectDate(selfShootingPopup.locator(\".date-picker input\"), shootingDate);\n                }\n\n                await selfShootingPopup\n                    .locator(\"footer button\")\n                    .filter({ hasText: hasCustomContent ? \"确认\" : \"取消\" })\n                    .click({ timeout: clickTimeout });\n            } else if (params.selfDeclaration.childType === \"transshipment\") {\n                await selfDeclarationSecondaryMenuInstance\n                    .filter({ hasText: \"来源转载\" })\n                    .click({ timeout: clickTimeout });\n                // 来源媒体弹窗\n                const selfShootingPopup = await getDialogInstance();\n\n                const sourceMedia = params.selfDeclaration.sourceMedia;\n                if (sourceMedia) {\n                    await selfShootingPopup.locator(\".el-input input\").fill(sourceMedia);\n                }\n\n                await selfShootingPopup\n                    .locator(\"footer button\")\n                    .filter({ hasText: sourceMedia ? \"确认\" : \"取消\" })\n                    .click({ timeout: clickTimeout });\n            }\n        }\n    }\n\n    // 可见范围 - 仅自己可见\n    if (params.visibleRange !== \"public\") {\n        await page\n            .locator(\".media-settings .flexbox\")\n            .filter({ hasText: \"可见范围\" })\n            .locator(\".d-select-wrapper\")\n            .click({ timeout: clickTimeout });\n        const poperInstance = await getPoperInstance();\n        const visibleText = params.visibleRange === \"friends\" ? \"好友可见\" : \"仅自己可见\";\n        await poperInstance\n            .locator(\".d-options .custom-option\")\n            .filter({ hasText: visibleText })\n            .click({ timeout: clickTimeout });\n    }\n\n    async function setSwitch(page: Page, label: string, target: boolean) {\n        const item = page.locator(\".d-new-form-item\", {\n            has: page.locator(\".d-form-item__label\", { hasText: label }),\n        });\n\n        const switchUI = item.locator(\".d-switch-simulator\");\n        const cls = await switchUI.getAttribute(\"class\");\n        const isChecked = cls?.includes(\"checked\") || true;\n\n        if (isChecked !== target) {\n            await switchUI.click({ timeout: clickTimeout });\n        }\n    }\n    if (!params.coProduceBind) {\n        await setSwitch(page, \"允许合拍\", false);\n    }\n    if (!params.noteCopyBind) {\n        await setSwitch(page, \"允许正文复制\", false);\n    }\n\n    // task._timerRecord.PrePublish = Date.now();\n\n    const releaseTimeInstance = page\n        .locator(\"label\")\n        .filter({ hasText: params.isImmediatelyPublish ? \"立即发布\" : \"定时发布\" });\n    await releaseTimeInstance.click({ timeout: clickTimeout });\n\n    if (params.scheduledPublish) {\n        // 自定义发布时间\n        await selectDate(\".date-picker input\", params.scheduledPublish);\n    }\n\n    // 等待图片上传完成\n    const imgPreviewArea = page.locator(\".img-preview-area\");\n    try {\n        await imgPreviewArea.locator(\".mask.uploading\").waitFor({\n            state: \"hidden\",\n            timeout: 50000,\n        });\n    } catch (error) {\n        throw new Error(\"上传图片超时，请重试！\");\n    }\n\n    if (MockPublish) {\n        const message = \"文章模拟发布成功\";\n        const data = \"123456789\";\n\n        await updateTaskState?.({\n            state: TaskState.SUCCESS,\n            result: {\n                response: data,\n            },\n        });\n        return success(data, message);\n    }\n\n    const response = await new Promise<{ success: boolean; msg: string; data?: { id: string } }>((resolve) => {\n        // 定义响应处理函数\n        const handleResponse = async (response: Response) => {\n            if (response.url().includes(\"/web_api/sns/v2/note\")) {\n                const jsonResponse = await response.json();\n                page.off(\"response\", handleResponse);\n                resolve(jsonResponse);\n            }\n        };\n\n        // 开始监听响应事件\n        page.on(\"response\", handleResponse);\n\n        page.locator(\".submit .publishBtn\").click({ timeout: clickTimeout });\n\n        // 检查错误toast\n        page.waitForSelector(\".d-toast-icon-danger\", { state: \"visible\", timeout: 2000 })\n            .then(async () => {\n                // 等待toast内容完全渲染\n                await page.waitForTimeout(300);\n                const toastDesc = await page.locator(\".d-toast-description\").textContent();\n                const desc = toastDesc?.trim();\n                page.off(\"response\", handleResponse);\n                resolve({ success: false, msg: desc || \"未知错误\" });\n            })\n            .catch(() => {\n                // toast 未出现,继续等待接口响应\n            });\n\n        // 添加整体超时保护\n        setTimeout(() => {\n            page.off(\"response\", handleResponse);\n            resolve({ success: false, msg: \"发布超时\" });\n        }, 7000);\n    });\n\n    if (!response?.success) {\n        const msg = `发布失败：${response?.msg || \"未知错误\"}`;\n        await updateTaskState?.({\n            state: TaskState.FAILED,\n            error: msg,\n        });\n        await page.close();\n        return { code: 414, message: msg, data: \"\" };\n    }\n\n    await updateTaskState?.({\n        state: TaskState.SUCCESS,\n        result: {\n            response: response?.data?.id || \"\",\n        },\n    });\n\n    // 关闭页面\n    await page.close();\n    return success(response?.data?.id || \"\");\n};\n","import crypto from \"node:crypto\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { downloadImage, getFilenameFromUrl, success, TaskState } from \"@iflyrpa/share\";\nimport { AxiosProxyParams, MockPublish } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { Xhshow } from \"../../utils/xhsXsEncrypt\";\n// import type { CollectionResponse } from \"../getXhsCollection\";\nimport type { PublishAction } from \".\";\n\nconst encode_mnsv2 = require(\"../../utils/xhs_ob/x_s.encoder.js\") as (\n    mnsv2: string,\n    platform: string,\n    req_type: string,\n) => string;\n\n// 生成 MD5\nfunction Md5(input: string): string {\n    return crypto.createHash(\"md5\").update(input).digest(\"hex\");\n}\n\ninterface CommonResponse<T = unknown> {\n    msg: string;\n    data: T;\n    proxyInfo?: Record<string, unknown>;\n    code: number;\n    success: boolean;\n    result?: number;\n}\n\ninterface UploadTempPermit<T = string[]> {\n    bucket: string;\n    uploadAddr: string;\n    fileIds: T;\n    token: string;\n}\n\nconst errnoMap: Record<number, string> = {\n    \"-1\": \"未知拦截器错误，请稍后重试。\",\n    915: \"所属C端账号手机号被修改，请重新登录\",\n    914: \"所属C端账号密码被修改，请重新登录\",\n    903: \"账户已登出，需重新登陆重试！\",\n    902: \"登录已过期，请重新登录！\",\n    906: \"账号存在风险，请重新登录！\",\n    \"-9136\": \"因违反社区规范禁止发笔记，请检查账号状态！\",\n};\n// 小红书参数加密器\nconst xsEncrypt = new Xhshow();\n\nexport const rpaAction_Server_Mock: PublishAction = async (task, params) => {\n    const updateTaskState = task.taskStageStore?.update?.bind(task.taskStageStore, task.taskId || \"\");\n\n    const tmpCachePath = task.getTmpPath();\n    if (\n        params?.selfDeclaration?.type === \"source-statement\" &&\n        params.selfDeclaration.childType === \"transshipment\" &&\n        params.originalBind\n    ) {\n        return { code: 414, message: \"原创声明与转载声明互斥，请重新选择后发布！\", data: \"\" };\n    }\n    const a1Cookie = params.cookies.find((it) => it.name === \"a1\")?.value;\n    if (!a1Cookie) {\n        return { code: 414, message: \"账号数据异常，请重新绑定账号后重试。\", data: \"\" };\n    }\n\n    const defaultPage = task.steelBrowserContext?.pages()[0];\n    if (defaultPage) {\n        // 如果 route 已经注册过，就不重复注册\n        if (!(defaultPage as any)._routeRegistered) {\n            (defaultPage as any)._routeRegistered = true;\n\n            const blockedPatterns = [\n                \"**/ffmpeg-core.wasm*\",\n                \"**/apm-fe.xiaohongshu.com*\",\n                \"**/t2.xiaohongshu.com*\",\n                \"**/fe-video-qc.xhscdn.com*\",\n            ].map((pattern) => new RegExp(pattern.replace(/\\*\\*/g, \".*\").replace(/\\*/g, \"[^/]*\")));\n\n            await defaultPage.route(\"**/*\", async (route) => {\n                const req = route.request();\n                const url = req.url();\n\n                // 是否命中屏蔽规则\n                const blocked = blockedPatterns.some((regex) => regex.test(url));\n                if (!blocked) {\n                    return route.continue();\n                }\n\n                if (req.method() === \"OPTIONS\") {\n                    console.log(\"处理 OPTIONS 预检：\", url);\n                    await route.fulfill({\n                        status: 204,\n                        headers: {\n                            \"access-control-allow-origin\": \"*\",\n                            \"access-control-allow-methods\": \"GET,POST,OPTIONS,PUT,DELETE\",\n                            \"access-control-allow-headers\": \"*\",\n                        },\n                        body: \"\",\n                    });\n                    return;\n                }\n\n                await route.fulfill({\n                    status: 204,\n                    body: \"\",\n                });\n            });\n        }\n    }\n\n    const pagePromise = task.createPage({\n        // 异步创建页面\n        show: task.debug,\n        cookies: params.cookies,\n        url: params.url || \"https://creator.xiaohongshu.com/statistics/account/v2?source=official\",\n    });\n    await updateTaskState?.({ state: TaskState.ACTION });\n\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        origin: \"https://creator.xiaohongshu.com\",\n        referer: \"https://creator.xiaohongshu.com/\",\n        \"user-agent\":\n            \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36\",\n    };\n    const recordCookie = params.cookies.reduce<Record<string, string>>((acc, cookie) => {\n        if (cookie.name && cookie.value) {\n            acc[cookie.name] = cookie.value;\n        }\n        return acc;\n    }, {});\n\n    const args: AxiosProxyParams = [\n        { headers },\n        task.logger,\n        params.proxyLoc,\n        params.accountId,\n        \"xiaohongshu-rpa\", // 业务标识\n    ];\n\n    const http = new Http({ headers });\n    const proxyHttp = new Http(...args);\n\n    // 添加响应拦截器\n    proxyHttp.addResponseInterceptor<CommonResponse>((response) => {\n        const responseData = response?.data;\n\n        // 检查响应中的 errno 字段\n        if (\n            (response && responseData?.code && responseData.code !== 0) ||\n            (responseData?.code && !responseData.success)\n        ) {\n            const errmsg =\n                errnoMap[responseData.code] || response.config.defaultErrorMsg || \"文章发布异常，请稍后重试。\";\n\n            return {\n                code: errnoMap[responseData.code] ? 414 : 500,\n                message: errmsg,\n                data: responseData,\n            };\n        }\n    });\n\n    // 0. 获取上传 token\n    const fetchCoverUrl = \"/api/media/v1/upload/creator/permit\";\n    const fetchCoverParams = {\n        biz_name: \"spectrum\",\n        scene: \"image\",\n        file_count: params.banners.length,\n        version: 1,\n        source: \"web\",\n    };\n    const fetchCoverXsHeader = xsEncrypt.signHeadersGet(fetchCoverUrl, recordCookie, \"ugc\", fetchCoverParams);\n    const uploadInfos: UploadTempPermit<string>[] = [];\n    if (params.banners.length > 18) {\n        // 分批次获取 coverId\n        const num = Math.ceil(params.banners.length / 14);\n        for (let i = 0; i < num; i++) {\n            const start = i * 14;\n            const end = Math.min(start + 14, params.banners.length);\n            const batchParams = {\n                ...fetchCoverParams,\n                file_count: end - start,\n            };\n            const batchCoverIdInfo = await proxyHttp.api<CommonResponse<{ uploadTempPermits: UploadTempPermit[] }>>(\n                {\n                    method: \"get\",\n                    baseURL: \"https://creator.xiaohongshu.com\",\n                    url: fetchCoverUrl,\n                    defaultErrorMsg: \"获取小红书用户信息失败，请稍后重试发布。\",\n                    headers: fetchCoverXsHeader,\n                    params: fetchCoverParams,\n                },\n                { retries: 3, retryDelay: 500, timeout: 8000 },\n            );\n            for (const item of batchCoverIdInfo?.data?.uploadTempPermits ?? []) {\n                for (const fileId of item?.fileIds ?? []) {\n                    uploadInfos.push({\n                        bucket: item.bucket || \"\",\n                        uploadAddr: item.uploadAddr || \"\",\n                        fileIds: fileId,\n                        token: item.token || \"\",\n                    });\n                }\n            }\n        }\n    } else {\n        const coverIdInfo = await proxyHttp.api<CommonResponse<{ uploadTempPermits: UploadTempPermit[] }>>(\n            {\n                method: \"get\",\n                baseURL: \"https://creator.xiaohongshu.com\",\n                url: fetchCoverUrl,\n                defaultErrorMsg: \"获取小红书用户信息失败，请稍后重试发布。\",\n                headers: fetchCoverXsHeader,\n                params: fetchCoverParams,\n            },\n            { retries: 3, retryDelay: 500, timeout: 8000 },\n        );\n        for (const item of coverIdInfo?.data?.uploadTempPermits ?? []) {\n            for (const fileId of item?.fileIds ?? []) {\n                uploadInfos.push({\n                    bucket: item.bucket || \"\",\n                    uploadAddr: item.uploadAddr || \"\",\n                    fileIds: fileId,\n                    token: item.token || \"\",\n                });\n            }\n        }\n    }\n    if (uploadInfos.length < params.banners.length)\n        return { code: 414, message: \"可用 OSS bucket 数量不足，无法上传所有图片！\", data: \"\" };\n\n    if (uploadInfos.length === 0) return { code: 414, message: \"图片上传失败，请稍后重试！\", data: \"\" };\n\n    const availableBuckets = Array.from({ length: uploadInfos.length }, (_, i) => i);\n\n    const uploadFile = async (\n        url: string,\n        index: number,\n    ): Promise<{\n        ossFileId: string;\n        ossToken: string;\n    }> => {\n        const fileName = getFilenameFromUrl(url);\n        const localUrl = await downloadImage(url, path.join(tmpCachePath, fileName));\n        const fileBuffer = fs.readFileSync(localUrl);\n\n        const MAX_RETRIES = uploadInfos.length;\n        task.logger.debug(`上传图片 ${index + 1}：尝试使用最多 ${MAX_RETRIES} 个 bucket`);\n        let attempt = 0;\n\n        while (attempt < MAX_RETRIES) {\n            // 分配 bucket\n            const ossBucketIndex = availableBuckets.shift(); // 移除并获取第一个可用 bucket\n\n            if (ossBucketIndex === undefined) {\n                return { ossFileId: \"\", ossToken: \"\" }; // 没有可用 bucket\n            }\n\n            const currentInfo = uploadInfos[ossBucketIndex];\n            const ossFileId = currentInfo.fileIds;\n            const ossToken = currentInfo.token;\n            const ossDomain = currentInfo.uploadAddr;\n\n            try {\n                await http.api(\n                    {\n                        method: \"put\",\n                        url: `https://${ossDomain}/${ossFileId}`,\n                        data: fileBuffer,\n                        headers: {\n                            \"x-cos-security-token\": ossToken,\n                        },\n                        defaultErrorMsg: \"图片上传异常，请稍后重试发布。\",\n                    },\n                    { timeout: 60000 },\n                );\n                return { ossFileId, ossToken };\n            } catch (error) {\n                task.logger.warn(\n                    `上传图片 ${index + 1}：使用 bucket ${ossDomain} 失败，尝试下一个可用 bucket。错误信息：${(error as Error).message}`,\n                );\n                attempt++;\n            }\n        }\n        return { ossFileId: \"\", ossToken: \"\" }; // 所有尝试失败\n    };\n\n    const coverInfos = await Promise.all(params.banners.map((it, idx) => uploadFile(it, idx)));\n    const invalidUpload = coverInfos.find((it) => it.ossToken === \"\" || it.ossFileId === \"\");\n    if (invalidUpload) return { code: 414, message: \"图片上传异常，请稍后重试发布。\", data: \"\" };\n\n    if (params.topic && params.topic.length > 0) {\n        await Promise.all(\n            params.topic.map(async (topic) => {\n                if (!topic.id) {\n                    const topicData = { topic_names: topic.name };\n                    const topicXsHeader = xsEncrypt.signHeadersPost(\n                        \"/web_api/sns/capa/postgw/topic/batch_customized\",\n                        recordCookie,\n                        \"ugc\",\n                        topicData,\n                    );\n\n                    const createTopic = await proxyHttp.api(\n                        {\n                            method: \"POST\",\n                            url: \"https://edith.xiaohongshu.com/web_api/sns/capa/postgw/topic/batch_customized\",\n                            headers: topicXsHeader,\n                            data: topicData,\n                            defaultErrorMsg: \"话题创建异常，请稍后重试。\",\n                        },\n                        { retries: 3, retryDelay: 20, timeout: 3000 },\n                    );\n                    Object.assign(topic, createTopic?.data?.topic_infos[0]);\n                }\n            }),\n        );\n    }\n\n    const visibleRangeMap = {\n        public: 0,\n        private: 1,\n        friends: 4,\n    };\n\n    const publishData = {\n        common: {\n            ats: [],\n            biz_relations: [],\n            desc: params?.content,\n            goods_info: {},\n            hash_tag: params.topic || [],\n            note_id: \"\",\n            source: JSON.stringify({\n                type: \"web\",\n                ids: \"\",\n                extraInfo: '{\"systemId\":\"web\"}',\n            }),\n            title: params?.title,\n            type: \"normal\",\n            privacy_info: {\n                op_type: 1,\n                type: visibleRangeMap[params.visibleRange],\n            },\n            post_loc: params.address\n                ? {\n                      name: params.address?.name,\n                      poi_id: params.address?.poi_id,\n                      poi_type: params.address?.poi_type,\n                      subname: params.address?.full_address,\n                  }\n                : null,\n            business_binds: \"\",\n        },\n        image_info: {\n            images: coverInfos.map((it) => ({\n                extra_info_json: '{\"mimeType\":\"image/png\"}',\n                file_id: it.ossFileId,\n                metadata: { source: -1 },\n                stickers: { floating: [], version: 2 },\n            })),\n        },\n        video_info: null,\n    };\n\n    // 自主声明\n    const userDeclarationBind = {\n        origin: 2,\n        photoInfo: {},\n        repostInfo: {},\n    };\n\n    if (params.selfDeclaration?.type === \"fictional-rendition\") {\n        // 虚拟演绎，仅供娱乐\n        userDeclarationBind.origin = 1;\n    } else if (params.selfDeclaration?.type === \"ai-generated\") {\n        // 笔记含AI合成内容\n        userDeclarationBind.origin = 2;\n    } else if (params.selfDeclaration?.type === \"source-statement\") {\n        // 内容来源声明\n        if (params.selfDeclaration.childType === \"self-labeling\") {\n            // 已自主标注\n            userDeclarationBind.origin = 3;\n        } else if (params.selfDeclaration.childType === \"self-shooting\") {\n            // 自主拍摄\n            userDeclarationBind.origin = 4;\n            const photoInfo: { photoPlace?: unknown; photoTime?: string } = {};\n\n            if (params.selfDeclaration.shootingLocation) {\n                // 拍摄地点\n                photoInfo.photoPlace = {\n                    name: params.selfDeclaration.shootingLocation.name,\n                    poiId: params.selfDeclaration.shootingLocation.poi_id,\n                    poiType: params.selfDeclaration.shootingLocation.poi_type,\n                    subname: params.selfDeclaration.shootingLocation.full_address,\n                };\n            }\n\n            if (params.selfDeclaration.shootingDate) {\n                // 拍摄日期\n                photoInfo.photoTime = params.selfDeclaration.shootingDate;\n            }\n\n            userDeclarationBind.photoInfo = photoInfo;\n        } else if (params.selfDeclaration.childType === \"transshipment\") {\n            // 来源转载\n            userDeclarationBind.origin = 5;\n\n            if (params.selfDeclaration.sourceMedia) {\n                // 来源媒体\n                userDeclarationBind.repostInfo = {\n                    source: params.selfDeclaration.sourceMedia,\n                };\n            }\n        }\n    }\n\n    const bizId =\n        params?.originalBind &&\n        (params.cookies.find((it) => it.name === \"x-user-id-creator.xiaohongshu.com\")?.value ||\n            (await proxyHttp\n                .api<{ data: { userDetail: { id: string } } }>(\n                    {\n                        method: \"get\",\n                        url: \"https://creator.xiaohongshu.com/api/galaxy/user/my-info\",\n                    },\n                    { retries: 3, retryDelay: 20, timeout: 3000 },\n                )\n                .then((userData) => userData?.data?.userDetail?.id)));\n\n    const business_binds = {\n        version: 1,\n        bizType: \"\",\n        noteId: \"\",\n        noteOrderBind: {},\n        // 发布时间 - 立即发布/定时发布\n        notePostTiming: params.isImmediatelyPublish ? {} : { postTime: params.scheduledPublish },\n        coProduceBind: { enable: !!params?.coProduceBind }, // 是否允许合拍\n        noteCopyBind: { copyable: !!params?.noteCopyBind }, // 关闭允许复制\n        optionRelationList: params.originalBind\n            ? [\n                  {\n                      // 原创声明\n                      type: \"ORIGINAL_STATEMENT\",\n                      relationList: [\n                          {\n                              bizId,\n                              bizType: \"ORIGINAL_STATEMENT\",\n                              extraInfo: \"{}\",\n                          },\n                      ],\n                  },\n              ]\n            : [],\n        ...(params?.groupBind\n            ? {\n                  groupBind: {\n                      groupId: params?.groupBind?.group_id,\n                      groupName: params.groupBind?.group_name,\n                      desc: params.groupBind?.desc,\n                      avatar: params.groupBind?.avatar,\n                  },\n              }\n            : { groupBind: {} }),\n        ...(params.selfDeclaration ? { userDeclarationBind } : {}),\n        ...(params?.collectionBind?.id ? { noteCollectionBind: { id: params.collectionBind.id } } : {}),\n    };\n\n    publishData.common.business_binds = JSON.stringify(business_binds);\n\n    task._timerRecord.PrePublish = Date.now();\n    const page = await pagePromise;\n    await updateTaskState?.({ sessionId: task.sessionId });\n    const publishXsHeader = {\n        \"x-s\": \"\",\n        \"x-t\": Date.now().toString(),\n    };\n    await page.waitForFunction(() => typeof (window as unknown as { mnsv2: unknown }).mnsv2 === \"function\", {\n        timeout: 10000,\n    });\n    const encodeData = `/web_api/sns/v2/note${JSON.stringify(publishData)}`;\n    const ticket_mnsv2 = await page.evaluate(\n        // 调用浏览器环境获取加密参数\n        ({ c, d }: { c: string; d: string }) => {\n            if (typeof (window as unknown as { mnsv2: unknown }).mnsv2 === \"function\") {\n                return (window as unknown as { mnsv2: (...args: unknown[]) => string }).mnsv2(c, d);\n            }\n            return \"mnsv2 未定义\";\n        },\n        {\n            c: encodeData,\n            d: Md5(encodeData), // md5\n        },\n    );\n    publishXsHeader[\"x-s\"] = encode_mnsv2(ticket_mnsv2, \"Windows\", \"object\");\n    publishXsHeader[\"x-t\"] = Date.now().toString();\n\n    if (MockPublish) {\n        const message = `文章模拟发布成功 ${http.proxyInfo}`;\n        const data = \"123456789\";\n\n        await updateTaskState?.({\n            state: TaskState.SUCCESS,\n            result: {\n                response: data,\n            },\n        });\n        return success(data, message);\n    }\n\n    // 发布\n    const publishResult = await proxyHttp.api<CommonResponse<{ id: string }>>(\n        {\n            method: \"post\",\n            url: \"https://edith.xiaohongshu.com/web_api/sns/v2/note\",\n            data: publishData,\n            headers: publishXsHeader,\n            defaultErrorMsg: \"文章发布异常，请稍后重试。\",\n        },\n        { retries: 2, retryDelay: 500, timeout: 12 * 1000 },\n    );\n\n    task.logger.info(`[xiaohongshuPublish server mock] publishResult: ${JSON.stringify(publishResult)} `);\n\n    const isSuccess = publishResult.success;\n    const message = `文章发布${isSuccess ? \"成功\" : `失败，原因：${publishResult.msg}`}${task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n    const data = isSuccess ? publishResult?.data?.id || \"\" : \"\";\n    if (!isSuccess) {\n        await updateTaskState?.({\n            state: TaskState.FAILED,\n            error: message,\n        });\n        return { code: 414, data, message };\n    }\n\n    await updateTaskState?.({\n        state: TaskState.SUCCESS,\n        result: {\n            response: data,\n        },\n    });\n    return success(data, message);\n};\n","import type { CommonAction } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport { ActionCommonParamsSchema, DisabledReq, type Xiaohongshu } from \"../../types\";\nimport { executeAction } from \"../../utils\";\nimport { CollectionDetail } from \"../getXhsCollection\";\nimport type { GroupDetail } from \"../getXhsGroup\";\nimport { mockAction } from \"./mock\";\nimport { rpaAction } from \"./rpa\";\nimport { rpaAction_Server } from \"./rpa-server\";\nimport { rpaAction_Server_Mock } from \"./rpa-server-mock\";\n\nconst FictionalRendition = z.object({\n    type: z.literal(\"fictional-rendition\"), // 虚拟演绎，仅供娱乐\n});\nconst AIGenerated = z.object({\n    type: z.literal(\"ai-generated\"), // 笔记含AI合成内容\n});\nconst SourceStatement = z.object({\n    type: z.literal(\"source-statement\"), // 内容来源声明\n    childType: z.enum([\"self-labeling\", \"self-shooting\", \"transshipment\"]), // 已自主标注 / 自助拍摄 / 转载\n    shootingLocation: z.custom<Xiaohongshu.Location>().optional(), // 拍摄地点\n    shootingDate: z.string().optional(), // 拍摄日期\n    sourceMedia: z.string().optional(), // 来源媒体\n});\nconst SelfDeclarationSchema = z.union([FictionalRendition, AIGenerated, SourceStatement]);\n\ntype SelfDeclaration = z.infer<typeof SelfDeclarationSchema>;\n\nexport const XiaohongshuPublishParamsSchema = ActionCommonParamsSchema.extend({\n    banners: z.array(z.string()), // 图片\n    title: z.string(), // 标题\n    content: z.string(), // 正文\n    address: z.custom<Xiaohongshu.Location>().optional(), // 地点\n    selfDeclaration: z.custom<SelfDeclaration>().optional(), // 自主声明\n    topic: z.array(z.custom<Xiaohongshu.Topic>()).optional(), //话题\n    proxyLoc: z.string().optional(), // 代理位置\n    localIP: z.string().optional(), // 用户ip\n    huiwenToken: z.string().optional(), // 绘文token\n    visibleRange: z.enum([\"public\", \"private\", \"friends\"]), // 可见范围\n    isImmediatelyPublish: z.boolean().optional(), // 是否立即发布\n    scheduledPublish: z.string().optional(), // 定时发布时间\n    collectionId: z.string().optional(), // 合集ID TODO：迁移完成后该字段移除\n    collectionBind: z.custom<CollectionDetail>().optional(), // 合集绑定\n    groupBind: z.custom<GroupDetail>().optional(), // 群聊绑定\n    noteCopyBind: z.boolean().optional(), // 是否允许复制\n    coProduceBind: z.boolean().optional(), // 是否允许合拍\n    originalBind: z.boolean().optional(), // 是否开启原创声明, 声明检测app端展示，web端发布后，最终是否原创成功以小红书APP结果为准\n});\n\nexport type XiaohongshuPublishParams = z.infer<typeof XiaohongshuPublishParamsSchema>;\n\nexport type PublishAction = CommonAction<XiaohongshuPublishParams, string>;\n\nexport const xiaohongshuPublish: PublishAction = async (task, params) => {\n    task.logger.info(`xiaohongshuPublish actionType: ${params.actionType}`);\n    if (DisabledReq) {\n        return {\n            code: 414,\n            data: \"\",\n            message:\n                \"临时维护：小红书发布政策调整，本平台小红书发布功能临时暂停服务并进行维护调整，暂时无法正常发布，敬请理解知悉。\",\n        };\n    }\n    if (params.actionType === \"rpa\") {\n        return rpaAction(task, params);\n    }\n\n    if (params.actionType === \"mockApi\") {\n        return mockAction(task, params);\n    }\n\n    if (params.actionType === \"server\") {\n        return rpaAction_Server(task, params);\n    }\n\n    // 优先执行Mock+RPA方案，失败则进入RPA-Server方案\n    return executeAction(mockAction, rpaAction_Server_Mock, rpaAction_Server)(task, params);\n};\n","import { type CommonAction, response, success } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams, AxiosProxyParams } from \"../../types\";\nimport { DisabledReq } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { Xhshow } from \"../../utils/xhsXsEncrypt\";\n\n// 小红书参数加密器\nconst xsEncrypt = new Xhshow();\n\nexport interface xiaohongshuWebCommentActionParams extends ActiomCommonParams {\n    note_id: string;\n    comment_id: string;\n    action: \"like\" | \"dislike\";\n}\nexport interface ActionResponse {\n    code: number;\n    success: boolean;\n    msg: string;\n}\n\nexport type PublishAction = CommonAction<xiaohongshuWebCommentActionParams, ActionResponse | Record<string, never>>;\n\nexport const xiaohongshuWebCommentAction: PublishAction = async (_task, params) => {\n    if (DisabledReq) return response(414, \"点赞相关操作失败\", {});\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://www.xiaohongshu.com/\",\n        origin: \"https://www.xiaohongshu.com/\",\n    };\n\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    const a1Cookie = params.cookies.find((it) => it.name === \"a1\")?.value;\n    if (!a1Cookie) return { code: 414, message: \"账号数据异常，请重新绑定账号后重试。\", data: [] };\n    if (!params.note_id && !params.comment_id && !params.action) {\n        return { code: 414, message: \"参数缺失，请检查后重试！\", data: {} };\n    }\n\n    const actionParams = {\n        note_id: params.note_id,\n        comment_id: params.comment_id,\n    };\n\n    let likeActionRes: ActionResponse = { code: 500, success: false, msg: \"\" };\n    const recordCookie = params.cookies.reduce<Record<string, string>>((acc, cookie) => {\n        if (cookie.name && cookie.value) {\n            acc[cookie.name] = cookie.value;\n        }\n        return acc;\n    }, {});\n\n    switch (params.action) {\n        case \"like\": {\n            const likeAction = \"/api/sns/web/v1/comment/like\";\n            const likeActionXsHeader = xsEncrypt.signHeadersPost(likeAction, recordCookie, \"xhs-pc-web\", actionParams);\n\n            likeActionRes = await http.api<ActionResponse>(\n                {\n                    method: \"post\",\n                    url: \"https://edith.xiaohongshu.com/api/sns/web/v1/comment/like\",\n                    data: actionParams,\n                    headers: likeActionXsHeader,\n                },\n                { retries: 3, retryDelay: 20, timeout: 3000 },\n            );\n            break;\n        }\n\n        case \"dislike\": {\n            const dislikeMentions = \"/api/sns/web/v1/comment/dislike\";\n            const dislikeXsHeader = xsEncrypt.signHeadersPost(\n                dislikeMentions,\n                recordCookie,\n                \"xhs-pc-web\",\n                actionParams,\n            );\n\n            likeActionRes = await http.api<ActionResponse>(\n                {\n                    method: \"post\",\n                    url: \"https://edith.xiaohongshu.com/api/sns/web/v1/comment/dislike\",\n                    data: actionParams,\n                    headers: dislikeXsHeader,\n                },\n                { retries: 3, retryDelay: 20, timeout: 3000 },\n            );\n            break;\n        }\n\n        default:\n            return { code: 414, message: \"参数action错误，请重试！\", data: {} };\n    }\n\n    const isSuccess = likeActionRes.code === 0;\n    const message = `点赞相关操作${isSuccess ? \"成功\" : `失败，原因：${likeActionRes.msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n    const data = isSuccess ? likeActionRes.success : {};\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { type CommonAction, response, success } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams, AxiosProxyParams } from \"../../types\";\nimport { DisabledReq } from \"../../types\";\nimport { Http } from \"../../utils/http\";\n\nexport interface searchXhsWebIntimacyListParams extends ActiomCommonParams {\n    searchValue?: string;\n}\n\nexport interface Intimacy {\n    images: string;\n    rid: string;\n    userid: string;\n    nickname: string;\n}\n\nexport type PublishAction = CommonAction<searchXhsWebIntimacyListParams, Intimacy[] | []>;\n\nexport const xiaohongshuWebIntimacySearch: PublishAction = async (_task, params) => {\n    if (DisabledReq) return response(0, \"搜索@列表数据成功\", []);\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://www.xiaohongshu.com/\",\n        origin: \"https://www.xiaohongshu.com\",\n    };\n\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    let intimacyDetail: Intimacy[] | [] = [];\n\n    const res = await http.api<{ code: number; msg: string; data: { items: Intimacy[] } }>(\n        {\n            method: \"get\",\n            url: `https://edith.xiaohongshu.com/api/sns/web/v1/intimacy/intimacy_list${params.searchValue ? \"/search\" : \"\"}`,\n            ...(params.searchValue\n                ? {\n                      params: {\n                          keyword: params.searchValue,\n                          page: 1,\n                          rows: 30,\n                      },\n                  }\n                : {}),\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n\n    const isSuccess = res.code === 0;\n    if (isSuccess) intimacyDetail = res.data?.items;\n    const message = `搜索@列表数据${isSuccess ? \"成功\" : `失败，原因：${res.msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n\n    return response(isSuccess ? 0 : 414, message, intimacyDetail);\n};\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams, AxiosProxyParams } from \"../../types\";\nimport { DisabledReq } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { Xhshow } from \"../../utils/xhsXsEncrypt\";\n\n// 小红书参数加密器\nconst xsEncrypt = new Xhshow();\n\nexport interface xiaohongshuWebMsgReadParams extends ActiomCommonParams {\n    type: \"mentions\" | \"likes\" | \"connections\"; // 消息类型\n}\nexport interface ReadResponse {\n    code: number;\n    success: boolean;\n    msg: string;\n}\n\nexport type PublishAction = CommonAction<xiaohongshuWebMsgReadParams, ReadResponse | Record<string, never>>;\n\nexport const xiaohongshuWebMsgRead: PublishAction = async (_task, params) => {\n    if (DisabledReq) return response(414, \"Read指定Tab失败\", {});\n\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://www.xiaohongshu.com/\",\n        origin: \"https://www.xiaohongshu.com/\",\n    };\n\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    const a1Cookie = params.cookies.find((it) => it.name === \"a1\")?.value;\n    if (!a1Cookie) return { code: 414, message: \"账号数据异常，请重新绑定账号后重试。\", data: [] };\n    if (!params.type) {\n        return { code: 414, message: \"参数缺失，请检查后重试！\", data: {} };\n    }\n\n    const replyParams = {\n        type: params.type,\n    };\n\n    const fatchMentions = \"/api/sns/web/v1/message/read\";\n    const recordCookie = params.cookies.reduce<Record<string, string>>((acc, cookie) => {\n        if (cookie.name && cookie.value) {\n            acc[cookie.name] = cookie.value;\n        }\n        return acc;\n    }, {});\n    const fatchMentionsXsHeader = xsEncrypt.signHeadersPost(fatchMentions, recordCookie, \"xhs-pc-web\", replyParams);\n\n    const res = await http.api<ReadResponse>(\n        {\n            method: \"post\",\n            url: \"https://edith.xiaohongshu.com/api/sns/web/v1/message/read\",\n            data: replyParams,\n            headers: fatchMentionsXsHeader,\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n\n    const isSuccess = res.code === 0;\n    const message = `Read指定Tab${isSuccess ? \"成功\" : `失败，原因：${res.msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n    const data = isSuccess ? res.success : {};\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams, AxiosProxyParams } from \"../../types\";\nimport { DisabledReq } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { Xhshow } from \"../../utils/xhsXsEncrypt\";\n\n// 小红书参数加密器\nconst xsEncrypt = new Xhshow();\n\nexport interface xiaohongshuWebMsgReplyParams extends ActiomCommonParams {\n    at_users?: { user_id: string; nickname: string }[]; // 被@用户ID列表\n    note_id: string; // 笔记ID\n    target_comment_id: string; // 目标评论ID\n    content: string; // 回复内容\n}\n\nexport interface ReplyResponse {\n    code: number;\n    success: boolean;\n    msg: string;\n    data: ReplyDataDetail;\n}\n\nexport interface ReplyDataDetail {\n    time: number;\n    toast: string;\n    comment: {\n        id: string;\n        note_id: string;\n        status: number;\n        content: string;\n        liked: boolean;\n        like_count: string;\n        show_tags: string[];\n        ip_location: string;\n        target_comment: {\n            id: string;\n            user_info: {\n                user_id: string;\n                nickname: string;\n                image: string;\n            };\n        };\n        user_info: {\n            nickname: string;\n            image: string;\n            user_id: string;\n        };\n        create_time: number;\n    };\n}\n\nexport type PublishAction = CommonAction<xiaohongshuWebMsgReplyParams, ReplyDataDetail | Record<string, never>>;\n\nexport const xiaohongshuWebMsgReply: PublishAction = async (_task, params) => {\n    if (DisabledReq) return response(414, \"评论回复失败\", {});\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://www.xiaohongshu.com/\",\n        origin: \"https://www.xiaohongshu.com/\",\n    };\n\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    const a1Cookie = params.cookies.find((it) => it.name === \"a1\")?.value;\n    if (!a1Cookie) return { code: 414, message: \"账号数据异常，请重新绑定账号后重试。\", data: [] };\n    if (!params.note_id || !params.target_comment_id || !params.content) {\n        return { code: 414, message: \"参数缺失，请检查后重试！\", data: {} };\n    }\n\n    const replyParams = {\n        at_users: params.at_users ?? [],\n        content: params.content,\n        note_id: params.note_id,\n        target_comment_id: params.target_comment_id,\n    };\n\n    const replyPath = \"/api/sns/web/v1/comment/post\";\n    const recordCookie = params.cookies.reduce<Record<string, string>>((acc, cookie) => {\n        if (cookie.name && cookie.value) {\n            acc[cookie.name] = cookie.value;\n        }\n        return acc;\n    }, {});\n    const replyXsHeader = xsEncrypt.signHeadersPost(replyPath, recordCookie, \"xhs-pc-web\", replyParams);\n\n    const res = await http.api<ReplyResponse>(\n        {\n            method: \"post\",\n            url: \"https://edith.xiaohongshu.com/api/sns/web/v1/comment/post\",\n            data: replyParams,\n            headers: replyXsHeader,\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n\n    const isSuccess = res.code === 0;\n    const message = `评论回复${isSuccess ? \"成功\" : `失败，原因：${res.msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n    const data = isSuccess ? res.data : {};\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { type CommonAction, response, success } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams, AxiosProxyParams } from \"../../types\";\nimport { DisabledReq } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { Xhshow } from \"../../utils/xhs_ob_feed\"; // 使用旧的工作版本\n\n// 小红书参数加密器\nconst xsEncrypt = new Xhshow();\nconst GenXSCommon = require(\"../../utils/XhsXsCommonEnc.js\") as (\n    a1cookie: string,\n    x_t: string | number,\n    x_s: string,\n) => string;\n\nexport interface xiaohongshuWebNoteFeedParams extends ActiomCommonParams {\n    source_note_id: string;\n    xsec_token: string;\n}\nexport interface FeedResponse {\n    code: number;\n    success: boolean;\n    msg: string;\n    data: {\n        items: FeedRespomseDetail[];\n    } | null;\n}\n\nexport interface FeedRespomseDetail {\n    note_card: Record<string, unknown>;\n}\n\nexport type PublishAction = CommonAction<xiaohongshuWebNoteFeedParams, FeedRespomseDetail[] | Record<string, unknown>>;\n\nexport const xiaohongshuWebNoteFeed: PublishAction = async (_task, params) => {\n    if (DisabledReq) return response(414, \"获取指定文章详情失败\", {});\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://www.xiaohongshu.com/\",\n        origin: \"https://www.xiaohongshu.com/\",\n    };\n\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    const a1Cookie = params.cookies.find((it) => it.name === \"a1\")?.value;\n    if (!a1Cookie) return { code: 414, message: \"账号数据异常，请重新绑定账号后重试。\", data: {} };\n    if (!params.source_note_id && !params.xsec_token) {\n        return { code: 414, message: \"参数缺失，请检查后重试！\", data: {} };\n    }\n\n    const feedParams = {\n        source_note_id: params.source_note_id,\n        image_formats: [\"jpg\", \"webp\", \"avif\"],\n        extra: { need_body_topic: \"1\" },\n        xsec_source: \"pc_feed\",\n        xsec_token: params.xsec_token,\n    };\n\n    const fatchFeed = \"/api/sns/web/v1/feed\";\n    const recordCookie = params.cookies.reduce<Record<string, string>>((acc, cookie) => {\n        if (cookie.name && cookie.value) {\n            acc[cookie.name] = cookie.value;\n        }\n        return acc;\n    }, {});\n\n    // 使用旧的签名算法（只返回 X-S）\n    const xsHeader = xsEncrypt.signHeadersPost(fatchFeed, recordCookie, \"xhs-pc-web\", feedParams);\n\n    // 生成时间戳\n    const xT = Date.now().toString();\n\n    // 使用 GenXSCommon 生成 x-s-common\n    const xsCommon = GenXSCommon(a1Cookie, xT, xsHeader[\"X-S\"]);\n\n    _task.logger.info(`请求参数: ${JSON.stringify(feedParams)}`);\n    _task.logger.info(`X-S: ${xsHeader[\"X-S\"]}`);\n    _task.logger.info(`x-s-common: ${xsCommon}`);\n\n    const res = await http.api<FeedResponse>(\n        {\n            method: \"post\",\n            url: \"https://edith.xiaohongshu.com/api/sns/web/v1/feed\",\n            data: feedParams,\n            headers: {\n                \"X-S\": xsHeader[\"X-S\"],\n                \"X-S-Common\": xsCommon,\n                \"X-T\": xT,\n            },\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n\n    // 添加详细日志\n    _task.logger.info(`API 响应: ${JSON.stringify(res)}`);\n\n    const isSuccess = res.code === 0 && res.data && res.data?.items && res.data?.items.length > 0;\n    const message = `获取指定文章详情${isSuccess ? \"成功\" : `失败，原因：${res.msg || \"返回数据为空，可能笔记不存在或参数错误\"}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n    const data = isSuccess ? res.data?.items[0].note_card || {} : {};\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { type CommonAction, response, success } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams, AxiosProxyParams } from \"../../types\";\nimport { DisabledReq } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { Xhshow } from \"../../utils/xhsXsEncrypt\";\n\n// 小红书参数加密器\nconst xsEncrypt = new Xhshow();\n\nexport interface xiaohongshuWebRelationParams extends ActiomCommonParams {\n    action: \"follow\" | \"unfollow\"; // 关系操作类型\n    target_user_id: string; // 目标用户ID\n}\n\nexport interface RelationResponse {\n    code: number;\n    success: boolean;\n    msg: string;\n    data: RelationDetail;\n}\n\nexport interface RelationDetail {\n    fstatus: string | null;\n}\n\nexport type PublishAction = CommonAction<xiaohongshuWebRelationParams, RelationDetail | Record<string, never>>;\n\nexport const xiaohongshuWebRelationAction: PublishAction = async (_task, params) => {\n    if (DisabledReq) return response(414, \"用户关系操作失败\", {});\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://www.xiaohongshu.com/\",\n        origin: \"https://www.xiaohongshu.com/\",\n    };\n\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    const a1Cookie = params.cookies.find((it) => it.name === \"a1\")?.value;\n    if (!a1Cookie) return { code: 414, message: \"账号数据异常，请重新绑定账号后重试。\", data: {} };\n    if (!params.action || !params.target_user_id) {\n        return { code: 414, message: \"参数缺失，请检查后重试！\", data: {} };\n    }\n\n    const relationParams = {\n        target_user_id: params.target_user_id,\n    };\n\n    let relationActionRes: RelationResponse;\n    const recordCookie = params.cookies.reduce<Record<string, string>>((acc, cookie) => {\n        if (cookie.name && cookie.value) {\n            acc[cookie.name] = cookie.value;\n        }\n        return acc;\n    }, {});\n    switch (params.action) {\n        case \"follow\": {\n            const followMentions = \"/api/sns/web/v1/user/follow\";\n            const followXsHeader = xsEncrypt.signHeadersPost(\n                followMentions,\n                recordCookie,\n                \"xhs-pc-web\",\n                relationParams,\n            );\n\n            relationActionRes = await http.api<RelationResponse>(\n                {\n                    method: \"post\",\n                    url: \"https://edith.xiaohongshu.com/api/sns/web/v1/user/follow\",\n                    data: relationParams,\n                    headers: followXsHeader,\n                },\n                { retries: 3, retryDelay: 500, timeout: 3000 },\n            );\n            break;\n        }\n\n        case \"unfollow\": {\n            const unfllowMentions = \"/api/sns/web/v1/user/unfollow\";\n            const unfllowXsHeader = xsEncrypt.signHeadersPost(\n                unfllowMentions,\n                recordCookie,\n                \"xhs-pc-web\",\n                relationParams,\n            );\n\n            relationActionRes = await http.api<RelationResponse>(\n                {\n                    method: \"post\",\n                    url: \"https://edith.xiaohongshu.com/api/sns/web/v1/user/unfollow\",\n                    data: relationParams,\n                    headers: unfllowXsHeader,\n                },\n                { retries: 3, retryDelay: 20, timeout: 3000 },\n            );\n            break;\n        }\n\n        default:\n            return { code: 414, message: \"参数action错误，请重试！\", data: {} };\n    }\n\n    const isSuccess = relationActionRes.code === 0;\n    const message = `用户关系操作${isSuccess ? \"成功\" : `失败，原因：${relationActionRes.msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n    const data = isSuccess ? relationActionRes.data : { fstatus: null };\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { type CommonAction, response } from \"@iflyrpa/share\";\nimport { z } from \"zod\";\nimport { ActionCommonParamsSchema, AxiosProxyParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\nimport { Xhshow } from \"../../utils/xhsXsEncrypt\";\n\n// 小红书参数加密器\nconst xsEncrypt = new Xhshow();\n\nexport const XhsWebSearchParamsSchema = ActionCommonParamsSchema.extend({\n    keyword: z.string(),\n    page: z.number(),\n    page_size: z.number(),\n    sort_type: z.enum([\"general\", \"time_descending\", \"popular_descending\"]), // 综合、时间降序、热门降序\n    time_filter: z.enum([\"不限\", \"一周内\"]),\n});\n\nexport type XhsWebSearchParams = z.infer<typeof XhsWebSearchParamsSchema>;\n\nexport interface SearchResponse {\n    code: number;\n    success: boolean;\n    msg: string;\n    data: {\n        has_more: boolean;\n        item: NoteDetail[];\n    };\n}\n\nexport interface NoteDetail {\n    xsec_token: string;\n    id: string;\n    model_type: string;\n    note_card: {\n        type: string;\n        display_title: string;\n        user: {\n            nick_name: string;\n            avatar: string;\n            user_id: string;\n            nickname: string;\n            xsec_token: string;\n        };\n        interact_info: {\n            shared_count: string;\n            liked: boolean;\n            liked_count: string;\n            collected: boolean;\n            collected_count: string;\n            comment_count: string;\n        };\n        cover: {\n            height: number;\n            width: number;\n            url_default: string;\n            url_pre: string;\n        };\n        image_list: Array<{\n            height: number;\n            width: number;\n            info_list: Array<{\n                image_scene: string;\n                url: string;\n            }>;\n        }>;\n        corner_tag_info: Array<{\n            type: string;\n            text: string;\n        }>;\n    };\n}\n\nexport type PublishAction = CommonAction<XhsWebSearchParams, Record<string, unknown>>;\n\nconst createSearchId = () => {\n    let r: bigint = BigInt(Date.now());\n    const o: bigint = BigInt(Math.ceil(0x7ffffffe * Math.random()));\n    r <<= BigInt(64);\n    r += o;\n    return r.toString(36);\n};\n\nexport const xiaohongshuWebSearch: PublishAction = async (_task, params) => {\n    const headers = {\n        cookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n        referer: \"https://www.xiaohongshu.com/\",\n        origin: \"https://www.xiaohongshu.com/\",\n    };\n\n    const args: AxiosProxyParams = [{ headers }, _task.logger, params.proxyLoc, params.accountId];\n    const http = new Http(...args);\n\n    const a1Cookie = params.cookies.find((it) => it.name === \"a1\")?.value;\n    if (!a1Cookie) return { code: 414, message: \"账号数据异常，请重新绑定账号后重试。\", data: {} };\n    if (!params.keyword || !params.page || !params.page_size || !params.sort_type || !params.time_filter) {\n        if (\n            params.sort_type !== \"general\" &&\n            params.sort_type !== \"time_descending\" &&\n            params.sort_type !== \"popular_descending\"\n        ) {\n            return { code: 414, message: \"排序类型参数错误，请检查后重试！\", data: {} };\n        }\n        if (params.time_filter !== \"不限\" && params.time_filter !== \"一周内\") {\n            return { code: 414, message: \"时间过滤参数错误，请检查后重试！\", data: {} };\n        }\n        return { code: 414, message: \"参数缺失，请检查后重试！\", data: {} };\n    }\n\n    const filterPath = \"/api/sns/web/v1/search/notes\";\n    const filterParams = {\n        ext_flags: [],\n        geo: \"\",\n        image_formats: [\"jpg\", \"webp\", \"avif\"],\n        filters: [\n            { tags: [params.sort_type], type: \"sort_type\" },\n            { tags: [\"不限\"], type: \"filter_note_type\" },\n            { tags: [params.time_filter], type: \"filter_note_time\" },\n            { tags: [\"不限\"], type: \"filter_note_range\" },\n            { tags: [\"不限\"], type: \"filter_pos_distance\" },\n        ],\n        keyword: params.keyword,\n        note_type: 0,\n        page: params.page,\n        page_size: params.page_size,\n        search_id: createSearchId() + (params.sort_type || params.time_filter ? `@${createSearchId()}` : \"\"),\n        sort: \"general\",\n    };\n\n    const recordCookie = params.cookies.reduce<Record<string, string>>((acc, cookie) => {\n        if (cookie.name && cookie.value) {\n            acc[cookie.name] = cookie.value;\n        }\n        return acc;\n    }, {});\n    const searchXsHeader = xsEncrypt.signHeadersPost(filterPath, recordCookie, \"xhs-pc-web\", filterParams);\n\n    const res = await http.api<SearchResponse>(\n        {\n            method: \"post\",\n            url: \"https://edith.xiaohongshu.com/api/sns/web/v1/search/notes\",\n            data: filterParams,\n            headers: searchXsHeader,\n        },\n        { retries: 3, retryDelay: 20, timeout: 3000 },\n    );\n\n    const isSuccess = res.code === 0;\n    const message = `Web笔记搜索${isSuccess ? \"成功\" : `失败，原因：${res.msg}`}${_task.debug ? ` ${http.proxyInfo}` : \"\"}`;\n    const data = isSuccess ? res.data : {};\n\n    return response(isSuccess ? 0 : 414, message, data);\n};\n","import { z } from \"zod\";\n\nexport const ttConfigDataSchema = z.object({\n    fansNum: z.number(),\n    fansNumYesterday: z.number().nullable(),\n    readNum: z.number(),\n    incomeNum: z.number(),\n    incomeNumYesterday: z.number().nullable(),\n    showNumYesterday: z.number().nullable(),\n    readNumYesterday: z.number().nullable(),\n    likeNumYesterday: z.number().nullable(),\n    commentNumYesterday: z.number().nullable(),\n});\n\nexport type ttConfigData = z.infer<typeof ttConfigDataSchema>;\n\nexport const xhsConfigDataSchema = z.object({\n    fansNum: z.number(),\n    favedNum: z.number(),\n    watchNumLastWeek: z.number(),\n    likeNumLastWeek: z.number(),\n    collectNumLastWeek: z.number(),\n    commentNumLastWeek: z.number(),\n    fansNumLastWeek: z.number(),\n    fansNumYesterday: z.number(),\n});\n\nexport type xhsConfigData = z.infer<typeof xhsConfigDataSchema>;\n\nexport const wxConfigDataSchema = z.object({\n    fansNum: z.number(),\n    fansNumYesterday: z.number(),\n    readNumYesterday: z.number(),\n    shareNumYesterday: z.number(),\n});\n\nexport type wxConfigData = z.infer<typeof wxConfigDataSchema>;\n\nexport const bjhConfigDataSchema = z.object({\n    fansNum: z.number(),\n    fansNumYesterday: z.number().nullable(),\n    readNum: z.number(),\n    incomeNum: z.number(),\n    incomeNumYesterday: z.number().nullable(),\n    recommendNumYesterday: z.number().nullable(),\n    readNumYesterday: z.number().nullable(),\n    likeNumYesterday: z.number().nullable(),\n    commentNumYesterday: z.number().nullable(),\n});\n\nexport type bjhConfigData = z.infer<typeof bjhConfigDataSchema>;\n\n// 抖音账号数据（参考文档 1.1 近7日数据 + 1.2 账号基础信息）\nexport const douyinConfigDataSchema = z.object({\n    fansNum: z.number(), // 粉丝总数（account_info.follower_count）\n    favedNum: z.number(), // 总获赞数（account_info.total_favorited）\n    fansNumLastWeek: z.number(), // 近7日净增粉丝（data.fans_incr）\n    watchNumLastWeek: z.number(), // 近7日播放量（data.play_count）\n    likeNumLastWeek: z.number(), // 近7日作品点赞（data.like_count）\n    commentNumLastWeek: z.number(), // 近7日作品评论（data.comment_count）\n    shareNumLastWeek: z.number(), // 近7日作品分享（data.share_count）\n    visitNumLastWeek: z.number(), // 近7日主页访问量（data.profile_visit）\n});\n\nexport type douyinConfigData = z.infer<typeof douyinConfigDataSchema>;\n\n// 视频号账号数据（auth_data 接口，实测响应结构）\nexport const shipinhaoConfigDataSchema = z.object({\n    fansNum: z.number(), // 粉丝数（data.finderUser.fansCount）\n    feedsCount: z.number(), // 作品总数（data.finderUser.feedsCount，不区分视频/图文）\n    // 昨日数据需调用专门的统计接口，若不可用则为 null\n    fansNumYesterday: z.number().nullable(), // 昨日净增关注\n    playNumYesterday: z.number().nullable(), // 昨日新增播放\n    likeNumYesterday: z.number().nullable(), // 昨日新增喜欢\n    commentNumYesterday: z.number().nullable(), // 昨日新增评论\n});\n\nexport type shipinhaoConfigData = z.infer<typeof shipinhaoConfigDataSchema>;\n\nexport interface SearchAccountInfoResponse {\n    code: number;\n    message: string;\n    data: ttConfigData | xhsConfigData | wxConfigData | bjhConfigData | douyinConfigData | shipinhaoConfigData | null;\n}\n","import type { AutomateTask, CommonAction, ResponseData } from \"@iflyrpa/share\";\nimport shareVersion from \"@iflyrpa/share/package.json\";\nimport actionVersion from \"../package.json\";\nimport { type BaijiahaoLoginParams, baijiahaoLogin } from \"./actions/baijiahaoLogin\";\nimport { type BaijiahaoPublishParams, baijiahaoPublish } from \"./actions/baijiahaoPublish\";\nimport {\n    BjhFansExport,\n    type GetWxFansSearchParams,\n    TTFansExport,\n    WxFansExport,\n    XhsFansExport,\n} from \"./actions/common/FansTool\";\nimport {\n    BjhSessionCheck,\n    DySessionCheck,\n    ShipinhaoSessionCheck,\n    TTSessionCheck,\n    type WxBjhSessionParams,\n    WxSessionCheck,\n    XhsSessionCheck,\n} from \"./actions/common/sessionCheck\";\nimport { type CreateShipinhaoCommentParams, createShipinhaoComment } from \"./actions/createShipinhaoComment\";\nimport {\n    type DouyinCheckVerifyQrCodeParams,\n    DouyinCheckVerifyQrCodeParamsSchema,\n    douyinCheckVerifyQrCode,\n} from \"./actions/douyinCheckVerifyQrCode\";\nimport { type DouyinCreateCommentReplyParams, douyinCreateCommentReply } from \"./actions/douyinCreateCommentReply\";\nimport { type DouyinGetCollectionParams, douyinGetCollection } from \"./actions/douyinGetCollection\";\nimport { type DouyinGetCommentListParams, douyinGetCommentList } from \"./actions/douyinGetCommentList\";\nimport { type DouyinGetCommentReplyListParams, douyinGetCommentReplyList } from \"./actions/douyinGetCommentReplyList\";\nimport { type DouyinGetHotParams, douyinGetHot } from \"./actions/douyinGetHot\";\nimport { type DouyinGetLocationParams, douyinGetLocation } from \"./actions/douyinGetLocation\";\nimport { type DouyinGetMusicParams, douyinGetMusic } from \"./actions/douyinGetMusic\";\nimport { type DouyinGetMusicByCategoryParams, douyinGetMusicByCategory } from \"./actions/douyinGetMusicByCategory\";\nimport { type DouyinGetMusicCategoryParams, douyinGetMusicCategory } from \"./actions/douyinGetMusicCategory\";\nimport { type DouyinGetTopicsParams, douyinGetTopics } from \"./actions/douyinGetTopics\";\nimport {\n    type DouyinGetVerifyQrCodeParams,\n    DouyinGetVerifyQrCodeParamsSchema,\n    douyinGetVerifyQrCode,\n} from \"./actions/douyinGetVerifyQrCode\";\nimport { type DouyinGetWorkListParams, douyinGetWorkList } from \"./actions/douyinGetWorkList\";\nimport { DouyinLoginParams, douyinLogin } from \"./actions/douyinLogin\";\nimport { type DouyinPublishParams, douyinPublish } from \"./actions/douyinPublish\";\nimport { type GetBaijiahaoActivityParams, getBaijiahaoActivity } from \"./actions/getBaijiahaoActivity\";\nimport { type GetBaijiahaoConfigParams, getBaijiahaoConfig } from \"./actions/getBaijiaohaoConfig\";\nimport { type GetShipinhaoBgmParams, getShipinhaoBgm } from \"./actions/getShipinhaoBgm\";\nimport { type GetShipinhaoBgmCategoryParams, getShipinhaoBgmCategory } from \"./actions/getShipinhaoBgmCategory\";\nimport { type GetShipinhaoCollectionParams, getShipinhaoCollection } from \"./actions/getShipinhaoCollection\";\nimport { type GetShipinhaoCommentListParams, getShipinhaoCommentList } from \"./actions/getShipinhaoCommentList\";\nimport { type GetShipinhaoConfigParams, getShipinhaoConfig } from \"./actions/getShipinhaoConfig\";\nimport { type GetShipinhaoPostListParams, getShipinhaoPostList } from \"./actions/getShipinhaoPostList\";\nimport { type GetToutiaoCollectionParams, getToutiaoCollection } from \"./actions/getToutiaoCollection\";\nimport { type GetToutiaoConfigParams, getToutiaoConfig } from \"./actions/getToutiaoConfig\";\nimport { type GetWeixinCollectionParams, getWeixinCollection } from \"./actions/getWeixinCollection\";\nimport { type GetWeixinConfigParams, getWeixinConfig } from \"./actions/getWeixinConfig\";\nimport { getXhsCollection } from \"./actions/getXhsCollection\";\nimport { getXhsGroup } from \"./actions/getXhsGroup\";\nimport { getXhsHotTopic } from \"./actions/getXhsHotTopic\";\nimport { getXhsUnreadCount } from \"./actions/getXhsWebUnreadCount\";\nimport { SearchAccountInfo, type SearchAccountInfoParams } from \"./actions/searchAccountInfo\";\nimport { type SearchBjhTopicListParams, searchBjhTopicList } from \"./actions/searchBjhTopicList\";\nimport { searchBjhUserArticle, type searchBjhUserArticleParams } from \"./actions/searchBjhUserArticle\";\nimport { FetchArticles, type FetchArticlesParams } from \"./actions/searchPublishInfo\";\nimport { type SearchToutiaoLocationParams, searchToutiaoLocation } from \"./actions/searchToutiaoLocation\";\nimport { type SearchToutiaoTopicListParams, searchToutiaoTopicList } from \"./actions/searchToutiaoTopicList\";\nimport { type SearchToutiaoUserIDParams, searchToutiaoUserInfo } from \"./actions/searchToutiaoUserID\";\nimport { searchWeixinAccountCard, type searchWeixinAccountCardParams } from \"./actions/searchWeixinAccountCard\";\nimport { searchWeixinUserArticle, type searchWeixinUserArticleParams } from \"./actions/searchWeixinUserArticle\";\nimport { type searchXhsConnectionsParams, searchXhsWebConnections } from \"./actions/searchXhsWebConnections\";\nimport { type searchXhsLikesParams, searchXhsWebLikes } from \"./actions/searchXhsWebLike\";\nimport { type searchXhsMentionsParams, searchXhsWebMentions } from \"./actions/searchXhsWebMentions\";\nimport { searchXiaohongshuLocation, type searchXiaohongshuLocationParams } from \"./actions/searchXiaohongshuLocation\";\nimport {\n    type SearchXiaohongshuTopicListParams,\n    searchXiaohongshuTopicList,\n} from \"./actions/searchXiaohongshuTopicList\";\nimport {\n    searchXiaohongshuUserArticle,\n    type searchXiaohongshuUserArticleParams,\n} from \"./actions/searchXiaohongshuUserArticle\";\nimport { ShipinhaoCheckLinkValidateParams, shipinhaoCheckLinkValidate } from \"./actions/shipinhaoCheckLinkValidate\";\nimport { ShipinhaoGetLocationParams, shipinhaoGetLocation } from \"./actions/shipinhaoGetLocation\";\nimport { ShipinhaoGetMsgParams, shipinhaoGetMsg } from \"./actions/shipinhaoGetMsg\";\nimport { ShipinhaoGetMsgImageParams, shipinhaoGetMsgImage } from \"./actions/shipinhaoGetMsgImage\";\nimport { ShipinhaoLoginParams, shipinhaoLogin } from \"./actions/shipinhaoLogin\";\nimport { type ShipinhaoPublishParams, shipinhaoPublish } from \"./actions/shipinhaoPublish\";\nimport { type ShipinhaoPublishVideoParams, shipinhaoPublishVideo } from \"./actions/shipinhaoPublishVideo\";\nimport { ShipinhaoSendMsgParams, shipinhaoSendMsg } from \"./actions/shipinhaoSendMsg\";\nimport { type ToutiaoLoginParams, toutiaoLogin } from \"./actions/toutiaoLogin\";\nimport { type ToutiaoPublishParams, toutiaoPublish } from \"./actions/toutiaoPublish\";\nimport { type WeitoutiaoPublishParams, weitoutiaoPublish } from \"./actions/weitoutiaoPublish\";\nimport { type WeixinLoginParams, weixinLogin } from \"./actions/weixinLogin\";\nimport { type WeixinmpPublishParams, weixinmpPublish } from \"./actions/weixinmpPublish\";\nimport { type WeixinPublishParams, weixinPublish } from \"./actions/weixinPublish\";\nimport { type XiaohongshuLoginParams, xiaohongshuLogin } from \"./actions/xiaohongshuLogin\";\nimport { type XiaohongshuPublishParams, xiaohongshuPublish } from \"./actions/xiaohongshuPublish\";\nimport {\n    xiaohongshuWebCommentAction,\n    type xiaohongshuWebCommentActionParams,\n} from \"./actions/xiaohongshuWebCommentAction\";\nimport {\n    type searchXhsWebIntimacyListParams,\n    xiaohongshuWebIntimacySearch,\n} from \"./actions/xiaohongshuWebIntimacySearch\";\nimport { xiaohongshuWebMsgRead, type xiaohongshuWebMsgReadParams } from \"./actions/xiaohongshuWebMsgRead\";\nimport { xiaohongshuWebMsgReply, type xiaohongshuWebMsgReplyParams } from \"./actions/xiaohongshuWebMsgReply\";\nimport { xiaohongshuWebNoteFeed, type xiaohongshuWebNoteFeedParams } from \"./actions/xiaohongshuWebNoteFeed\";\nimport {\n    xiaohongshuWebRelationAction,\n    type xiaohongshuWebRelationParams,\n} from \"./actions/xiaohongshuWebRelationAction\";\nimport { type XhsWebSearchParams, xiaohongshuWebSearch } from \"./actions/xiaohongshuWebSearch\";\nimport type { ActiomCommonParams } from \"./types\";\nimport { stringifyError } from \"./utils\";\nimport { Http } from \"./utils/http\";\nexport const BetaFlag = \"HuiwenCanary\"; // 用于标记是否为测试版本\n\nexport class Action {\n    constructor(private task: AutomateTask) {\n        this.task.logger.info(`当前包版本：Share=>${shareVersion.version} Action=>${actionVersion.version}`);\n    }\n\n    /**\n     * 【测试专用】获取当前 Action 类的版本标识\n     *\n     * 用于验证热更新后内存中的 Action 实例是否真的被替换了。\n     * 每个版本的 @iflyrpa/actions 包应该返回不同的标识。\n     *\n     * @returns 包含版本号和时间戳的对象\n     */\n    getActionVersionMarker() {\n        return {\n            version: actionVersion.version,\n            shareVersion: shareVersion.version,\n            // 使用构造函数名 + 版本号作为唯一标识\n            marker: `Action_${actionVersion.version}_${shareVersion.version}`,\n            timestamp: new Date().toLocaleString(),\n        };\n    }\n\n    // 绑定 task, 并处理异常\n    private async bindTask<T extends ActiomCommonParams, R>(func: CommonAction<T, R>, params: T) {\n        let responseData: ResponseData<R>;\n\n        // 检查是否为测试版本\n        this.task.isBeta = this.task?.isFeatOn ? this.task?.isFeatOn(BetaFlag) : false;\n\n        // 记录时间消耗\n        this.task._timerRecord.ActionStart = Date.now();\n\n        if (this.task?.setArticleId) {\n            // 给所有的日志添加 articleId 标签\n            this.task.setArticleId(params.articleId ?? \"\");\n        }\n\n        if (this.task?.setSaveType ?? false) {\n            // 给所有的日志添加 saveType 标签\n            this.task.setSaveType(params.saveType ?? \"\");\n        }\n\n        if (this.task?.isInitializedGB !== undefined) {\n            this.task.setGbInitType(this.task.isInitializedGB);\n        }\n\n        if (typeof params === \"object\") {\n            // 默认设置 cookies\n            params.cookies = params?.cookies ?? [];\n        }\n\n        try {\n            responseData = await func(this.task, params);\n        } catch (error) {\n            responseData = Http.handleApiError(error);\n        } finally {\n            this.task._timerRecord.ActionEnd = Date.now();\n        }\n\n        if (this.task.setTimeConsuming) {\n            // 收集各时间节点\n            this.task.setTimeConsuming(this.task._timerRecord);\n        }\n\n        if (responseData.code === 414) {\n            // 表示是由于脚本输入信息错误导致的失败，不是脚本问题\n            this.task.logger.info(`${func.name} action params error`, responseData);\n        } else if (responseData.code !== 0) {\n            this.task.logger.error(\n                responseData.message || `${func.name} 执行失败`,\n                stringifyError(responseData.data),\n                responseData.extra,\n            );\n            this.task.logger.info(`${func.name} action failed`);\n        } else {\n            this.task.logger.info(`${func.name} action success`);\n        }\n\n        if (this.task.debug && this.task._timerRecord.PrePublish) {\n            console.log(\n                \"预处理图片耗时：\",\n                (this.task._timerRecord.PrePublish - this.task._timerRecord.ActionStart) / 1000,\n                \"s\",\n            );\n            console.log(\n                \"发文接口耗时：\",\n                (this.task._timerRecord.ActionEnd - this.task._timerRecord.PrePublish) / 1000,\n                \"s\",\n            );\n        }\n        this.task.debug &&\n            console.log(\n                \"Action整体耗时：\",\n                (this.task._timerRecord.ActionEnd - this.task._timerRecord.ActionStart) / 1000,\n                \"s\",\n            );\n\n        return responseData;\n    }\n\n    // 小红书操作web笔记搜索\n    xiaohongshuWebSearch(params: XhsWebSearchParams) {\n        return this.bindTask(xiaohongshuWebSearch, params);\n    }\n\n    // 小红书操作指定web评论点赞/取消点赞\n    xiaohongshuWebCommentAction(params: xiaohongshuWebCommentActionParams) {\n        return this.bindTask(xiaohongshuWebCommentAction, params);\n    }\n\n    // 小红书获取指定文章详情\n    xiaohongshuWebNoteFeed(params: xiaohongshuWebNoteFeedParams) {\n        return this.bindTask(xiaohongshuWebNoteFeed, params);\n    }\n\n    // 小红书操作指定id用户关系（关注/取关）\n    xiaohongshuWebRelationAction(params: xiaohongshuWebRelationParams) {\n        return this.bindTask(xiaohongshuWebRelationAction, params);\n    }\n\n    // 小红书回复指定笔记评论\n    xiaohongshuWebMsgRead(params: xiaohongshuWebMsgReadParams) {\n        return this.bindTask(xiaohongshuWebMsgRead, params);\n    }\n\n    // 小红书获取@提及列表\n    xiaohongshuWebIntimacySearch(params: searchXhsWebIntimacyListParams) {\n        return this.bindTask(xiaohongshuWebIntimacySearch, params);\n    }\n\n    // 小红书回复指定笔记评论\n    xiaohongshuWebMsgReply(params: xiaohongshuWebMsgReplyParams) {\n        return this.bindTask(xiaohongshuWebMsgReply, params);\n    }\n\n    // 小红书获取新增关注列表\n    searchXhsWebConnections(params: searchXhsConnectionsParams) {\n        return this.bindTask(searchXhsWebConnections, params);\n    }\n\n    // 小红书获取赞和收藏列表\n    searchXhsWebLikes(params: searchXhsLikesParams) {\n        return this.bindTask(searchXhsWebLikes, params);\n    }\n\n    // 小红书获取评论与@提及列表\n    searchXhsWebMentions(params: searchXhsMentionsParams) {\n        return this.bindTask(searchXhsWebMentions, params);\n    }\n\n    // 小红书获取未读消息数\n    getXhsUnreadCount(params: ActiomCommonParams) {\n        return this.bindTask(getXhsUnreadCount, params);\n    }\n\n    // 百家号搜索用户文章\n    searchBjhUserArticle(params: searchBjhUserArticleParams) {\n        return this.bindTask(searchBjhUserArticle, params);\n    }\n\n    // 小红书搜索用户文章\n    searchXiaohongshuUserArticle(params: searchXiaohongshuUserArticleParams) {\n        return this.bindTask(searchXiaohongshuUserArticle, params);\n    }\n\n    // 微信搜索用户文章\n    searchWeixinUserArticle(params: searchWeixinUserArticleParams) {\n        return this.bindTask(searchWeixinUserArticle, params);\n    }\n\n    // 微信号搜索账号卡片\n    searchWeixinAccountCard(params: searchWeixinAccountCardParams) {\n        return this.bindTask(searchWeixinAccountCard, params);\n    }\n\n    // 微信登陆操作 仅用于Cli框架\n    WxLogin(params: WeixinLoginParams) {\n        return this.bindTask(weixinLogin, params);\n    }\n\n    // 百家号登陆操作 仅用于Cli框架\n    BaijiahaoLogin(params: BaijiahaoLoginParams) {\n        return this.bindTask(baijiahaoLogin, params);\n    }\n\n    // 头条号登陆操作 仅用于Cli框架\n    ToutiaoLogin(params: ToutiaoLoginParams) {\n        return this.bindTask(toutiaoLogin, params);\n    }\n\n    // 抖音创作者中心登陆\n    DouyinLogin(params: DouyinLoginParams) {\n        return this.bindTask(douyinLogin, params);\n    }\n\n    // 视频号登陆\n    ShipinhaoLogin(params: ShipinhaoLoginParams) {\n        return this.bindTask(shipinhaoLogin, params);\n    }\n\n    // 小红书登陆操作 仅用于Cli框架\n    XhsLogin(params: XiaohongshuLoginParams) {\n        return this.bindTask(xiaohongshuLogin, params);\n    }\n\n    // 获取指定平台的文章数据\n    FetchArticles(params: FetchArticlesParams) {\n        return this.bindTask(FetchArticles, params);\n    }\n\n    // 获取指定平台的分析数据\n    SearchAccountInfo(params: SearchAccountInfoParams) {\n        return this.bindTask(SearchAccountInfo, params);\n    }\n\n    // 头条Session有效性检测\n    TTSessionCheck(params: ActiomCommonParams) {\n        return this.bindTask(TTSessionCheck, params);\n    }\n\n    // 微信Session有效性检测\n    WxSessionCheck(params: WxBjhSessionParams) {\n        return this.bindTask(WxSessionCheck, params);\n    }\n\n    // 小红书Session有效性检测\n    XhsSessionCheck(params: ActiomCommonParams) {\n        return this.bindTask(XhsSessionCheck, params);\n    }\n\n    // 百家号Session有效性检测\n    BjhSessionCheck(params: WxBjhSessionParams) {\n        return this.bindTask(BjhSessionCheck, params);\n    }\n\n    // 抖音Session有效性检测\n    DySessionCheck(params: ActiomCommonParams) {\n        return this.bindTask(DySessionCheck, params);\n    }\n\n    // 视频号Session有效性检测\n    ShipinhaoSessionCheck(params: ActiomCommonParams) {\n        return this.bindTask(ShipinhaoSessionCheck, params);\n    }\n\n    // 搜索头条话题列表\n    searchToutiaoTopicList(params: SearchToutiaoTopicListParams) {\n        return this.bindTask(searchToutiaoTopicList, params);\n    }\n\n    // 搜索头条粉丝\n    TTFansExport(params: ActiomCommonParams) {\n        return this.bindTask(TTFansExport, params);\n    }\n\n    // 搜索小红书粉丝\n    XhsFansExport(params: ActiomCommonParams) {\n        return this.bindTask(XhsFansExport, params);\n    }\n\n    // 搜索微信粉丝\n    WxFansExport(params: GetWxFansSearchParams) {\n        return this.bindTask(WxFansExport, params);\n    }\n\n    // 搜索百家号粉丝\n    BjhFansExport(params: ActiomCommonParams) {\n        return this.bindTask(BjhFansExport, params);\n    }\n\n    SearchBjhTopicList(params: SearchBjhTopicListParams) {\n        return this.bindTask(searchBjhTopicList, params);\n    }\n\n    // 搜索头条用户ID\n    searchToutiaoUserID(params: SearchToutiaoUserIDParams) {\n        return this.bindTask(searchToutiaoUserInfo, params);\n    }\n\n    // 搜索头条Location\n    searchToutiaoLocation(params: SearchToutiaoLocationParams) {\n        return this.bindTask(searchToutiaoLocation, params);\n    }\n\n    // 获取头条配置\n    getToutiaoConfig(params: GetToutiaoConfigParams) {\n        return this.bindTask(getToutiaoConfig, params);\n    }\n\n    // 获取头条合集\n    getToutiaoCollection(params: GetToutiaoCollectionParams) {\n        return this.bindTask(getToutiaoCollection, params);\n    }\n\n    // 获取微信配额\n    getWeixinConfig(params: GetWeixinConfigParams) {\n        return this.bindTask(getWeixinConfig, params);\n    }\n\n    // 获取微信合集\n    getWeixinCollection(params: GetWeixinCollectionParams) {\n        return this.bindTask(getWeixinCollection, params);\n    }\n\n    // 获取视频号配置\n    getShipinhaoConfig(params: GetShipinhaoConfigParams) {\n        return this.bindTask(getShipinhaoConfig, params);\n    }\n\n    // 获取视频号合集\n    getShipinhaoCollection(params: GetShipinhaoCollectionParams) {\n        return this.bindTask(getShipinhaoCollection, params);\n    }\n\n    // 获取视频号背景音乐\n    getShipinhaoBgm(params: GetShipinhaoBgmParams) {\n        return this.bindTask(getShipinhaoBgm, params);\n    }\n\n    // 获取视频号背景音乐类型\n    getShipinhaoBgmCategory(params: GetShipinhaoBgmCategoryParams) {\n        return this.bindTask(getShipinhaoBgmCategory, params);\n    }\n\n    // 获取视频号已发布文章列表\n    getShipinhaoPostList(params: GetShipinhaoPostListParams) {\n        return this.bindTask(getShipinhaoPostList, params);\n    }\n\n    // 获取视频号评论列表\n    getShipinhaoCommentList(params: GetShipinhaoCommentListParams) {\n        return this.bindTask(getShipinhaoCommentList, params);\n    }\n\n    // 创建视频号评论\n    createShipinhaoComment(params: CreateShipinhaoCommentParams) {\n        return this.bindTask(createShipinhaoComment, params);\n    }\n\n    getXhsCollection(params: ActiomCommonParams) {\n        return this.bindTask(getXhsCollection, params);\n    }\n\n    getXhsGroup(params: ActiomCommonParams) {\n        return this.bindTask(getXhsGroup, params);\n    }\n\n    getXhsHotTopic(params: ActiomCommonParams) {\n        return this.bindTask(getXhsHotTopic, params);\n    }\n\n    // 获取百家号配置\n    getBaijiahaoConfig(params: GetBaijiahaoConfigParams) {\n        return this.bindTask(getBaijiahaoConfig, params);\n    }\n\n    // 百家号发布\n    baijiahaoPublish(params: BaijiahaoPublishParams) {\n        return this.bindTask(baijiahaoPublish, params);\n    }\n\n    // 查询百家号活动投稿\n    getBaijiahaoActivity(params: GetBaijiahaoActivityParams) {\n        return this.bindTask(getBaijiahaoActivity, params);\n    }\n\n    // 小红书发布\n    xiaohongshuPublish(params: XiaohongshuPublishParams) {\n        return this.bindTask(xiaohongshuPublish, params);\n    }\n\n    // 搜索小红书话题\n    searchXiaohongshuTopicList(params: SearchXiaohongshuTopicListParams) {\n        return this.bindTask(searchXiaohongshuTopicList, params);\n    }\n    // 搜索小红书地址\n    searchXiaohongshuLocation(params: searchXiaohongshuLocationParams) {\n        return this.bindTask(searchXiaohongshuLocation, params);\n    }\n\n    // 小绿书发布\n    weixinmpPublish(params: WeixinmpPublishParams) {\n        return this.bindTask(weixinmpPublish, params);\n    }\n\n    // 微头条发布\n    weitoutiaoPublish(params: WeitoutiaoPublishParams) {\n        return this.bindTask(weitoutiaoPublish, params);\n    }\n\n    // 头条发布\n    toutiaoPublish(params: ToutiaoPublishParams) {\n        return this.bindTask(toutiaoPublish, params);\n    }\n\n    // 微信发布\n    weixinPublish(params: WeixinPublishParams) {\n        return this.bindTask(weixinPublish, params);\n    }\n    //抖音发布\n    douyinPublish(params: DouyinPublishParams) {\n        return this.bindTask(douyinPublish, params);\n    }\n\n    // 抖音校验二维码扫码状态\n    douyinCheckVerifyQrCode(params: DouyinCheckVerifyQrCodeParams) {\n        return this.bindTask(douyinCheckVerifyQrCode, params);\n    }\n\n    // 抖音获取二维码扫码状态\n    douyinGetVerifyQrCode(params: DouyinGetVerifyQrCodeParams) {\n        return this.bindTask(douyinGetVerifyQrCode, params);\n    }\n\n    // 视频号发布\n    shipinhaoPublish(params: ShipinhaoPublishParams) {\n        return this.bindTask(shipinhaoPublish, params);\n    }\n    shipinhaoPublishVideo(params: ShipinhaoPublishVideoParams) {\n        return this.bindTask(shipinhaoPublishVideo, params);\n    }\n\n    douyinGetTopics(params: DouyinGetTopicsParams) {\n        return this.bindTask(douyinGetTopics, params);\n    }\n    douyinGetMusicCategory(params: DouyinGetMusicCategoryParams) {\n        return this.bindTask(douyinGetMusicCategory, params);\n    }\n    douyinGetMusicByCategory(params: DouyinGetMusicByCategoryParams) {\n        return this.bindTask(douyinGetMusicByCategory, params);\n    }\n    douyinGetMusic(params: DouyinGetMusicParams) {\n        return this.bindTask(douyinGetMusic, params);\n    }\n    douyinGetLocation(params: DouyinGetLocationParams) {\n        return this.bindTask(douyinGetLocation, params);\n    }\n    douyinGetHot(params: DouyinGetHotParams) {\n        return this.bindTask(douyinGetHot, params);\n    }\n    douyinGetCollection(params: DouyinGetCollectionParams) {\n        return this.bindTask(douyinGetCollection, params);\n    }\n    douyinGetCommentList(params: DouyinGetCommentListParams) {\n        return this.bindTask(douyinGetCommentList, params);\n    }\n    douyinGetCommentReplyList(params: DouyinGetCommentReplyListParams) {\n        return this.bindTask(douyinGetCommentReplyList, params);\n    }\n    douyinCreateCommentReply(params: DouyinCreateCommentReplyParams) {\n        return this.bindTask(douyinCreateCommentReply, params);\n    }\n    douyinGetWorkList(params: DouyinGetWorkListParams) {\n        return this.bindTask(douyinGetWorkList, params);\n    }\n    douyinLogin(params: DouyinLoginParams) {\n        return this.bindTask(douyinLogin, params);\n    }\n    shipinhaoCheckLinkValidate(params: ShipinhaoCheckLinkValidateParams) {\n        return this.bindTask(shipinhaoCheckLinkValidate, params);\n    }\n    shipinhaoGetLocation(params: ShipinhaoGetLocationParams) {\n        return this.bindTask(shipinhaoGetLocation, params);\n    }\n    shipinhaoGetMsg(params: ShipinhaoGetMsgParams) {\n        return this.bindTask(shipinhaoGetMsg, params);\n    }\n    shipinhaoGetMsgImage(params: ShipinhaoGetMsgImageParams) {\n        return this.bindTask(shipinhaoGetMsgImage, params);\n    }\n    shipinhaoSendMsg(params: ShipinhaoSendMsgParams) {\n        return this.bindTask(shipinhaoSendMsg, params);\n    }\n}\n\ntype ActionInstance = InstanceType<typeof Action>;\n\n// 提取方法的参数类型\ntype MethodParams<T> = {\n    // biome-ignore lint/suspicious/noExplicitAny: 有使用 any\n    [K in keyof T]: T[K] extends (...args: any[]) => unknown ? Parameters<T[K]>[0] : never;\n};\n\n// 应用于 Action 类的实例\nexport type ActionMethodParams = MethodParams<ActionInstance>;\n\nexport { version } from \"../package.json\";\nexport { type BaijiahaoPublishParams, BaijiahaoPublishParamsSchema } from \"./actions/baijiahaoPublish\";\nexport type { sessionCheckResult } from \"./actions/common/sessionCheck\";\nexport {\n    SessionCheckResultSchema,\n    type WxBjhSessionParams,\n    WxBjhSessionParamsSchema,\n} from \"./actions/common/sessionCheck\";\nexport type {\n    CreateCommentResponse,\n    CreateShipinhaoCommentParams,\n} from \"./actions/createShipinhaoComment\";\nexport {\n    type DouyinCheckVerifyQrCodeParams,\n    DouyinCheckVerifyQrCodeParamsSchema,\n    type QrCodeCheckResult,\n    type QrCodeStatusConfirmed,\n    type QrCodeStatusExpired,\n    type QrCodeStatusNew,\n} from \"./actions/douyinCheckVerifyQrCode\";\nexport {\n    type DouyinCreateCommentReplyParams,\n    DouyinCreateCommentReplyParamsSchema,\n} from \"./actions/douyinCreateCommentReply\";\nexport { type DouyinGetCollectionParams, DouyinGetCollectionParamsSchema } from \"./actions/douyinGetCollection\";\nexport { type DouyinGetCommentListParams, DouyinGetCommentListParamsSchema } from \"./actions/douyinGetCommentList\";\nexport {\n    type DouyinGetCommentReplyListParams,\n    DouyinGetCommentReplyListParamsSchema,\n} from \"./actions/douyinGetCommentReplyList\";\nexport { type DouyinGetHotParams, DouyinGetHotParamsSchema } from \"./actions/douyinGetHot\";\nexport { type DouyinGetLocationParams, DouyinGetLocationParamsSchema } from \"./actions/douyinGetLocation\";\nexport { type DouyinGetMusicParams, DouyinGetMusicParamsSchema } from \"./actions/douyinGetMusic\";\nexport {\n    type DouyinGetMusicByCategoryParams,\n    DouyinGetMusicByCategoryParamsSchema,\n} from \"./actions/douyinGetMusicByCategory\";\nexport {\n    type DouyinGetMusicCategoryParams,\n    DouyinGetMusicCategoryParamsSchema,\n} from \"./actions/douyinGetMusicCategory\";\nexport { type DouyinGetTopicsParams, DouyinGetTopicsParamsSchema } from \"./actions/douyinGetTopics\";\nexport {\n    type DouyinGetVerifyQrCodeParams,\n    DouyinGetVerifyQrCodeParamsSchema,\n} from \"./actions/douyinGetVerifyQrCode\";\nexport { type DouyinGetWorkListParams, DouyinGetWorkListParamsSchema } from \"./actions/douyinGetWorkList\";\nexport type { DouyinLoginParams } from \"./actions/douyinLogin\";\nexport { type DouyinPublishParams, DouyinPublishParamsSchema } from \"./actions/douyinPublish\";\nexport { ConfigDataSchema } from \"./actions/getBaijiaohaoConfig\";\nexport type { BgmDetail, BgmListResponse, GetShipinhaoBgmParams } from \"./actions/getShipinhaoBgm\";\nexport type {\n    BgmCategoryDetail,\n    BgmCategoryListResponse,\n    GetShipinhaoBgmCategoryParams,\n} from \"./actions/getShipinhaoBgmCategory\";\nexport type {\n    CollectionDetail as ShipinhaoCollectionDetail,\n    CollectionDetailResponse,\n    GetShipinhaoCollectionParams,\n} from \"./actions/getShipinhaoCollection\";\nexport type {\n    CommentDetail,\n    CommentListResponse,\n    GetShipinhaoCommentListParams,\n} from \"./actions/getShipinhaoCommentList\";\nexport type {\n    GetShipinhaoPostListParams,\n    PostDetail,\n    PostListResponse,\n} from \"./actions/getShipinhaoPostList\";\nexport { type CollectionDetail, CollectionDetailSchema } from \"./actions/getXhsCollection\";\nexport { type UnreadCount, UnreadCountSchema } from \"./actions/getXhsWebUnreadCount\";\nexport { type SearchAccountInfoParams, SearchAccountInfoParamsSchema } from \"./actions/searchAccountInfo\";\nexport {\n    type bjhConfigData,\n    bjhConfigDataSchema,\n    type douyinConfigData,\n    douyinConfigDataSchema,\n    type shipinhaoConfigData,\n    shipinhaoConfigDataSchema,\n    type ttConfigData,\n    ttConfigDataSchema,\n    type wxConfigData,\n    wxConfigDataSchema,\n    type xhsConfigData,\n    xhsConfigDataSchema,\n} from \"./actions/searchAccountInfo/types\";\nexport { type FetchArticlesParams, FetchArticlesParamsSchema } from \"./actions/searchPublishInfo\";\nexport { type FetchArticlesData, FetchArticlesDataSchema } from \"./actions/searchPublishInfo/types\";\nexport {\n    type ShipinhaoCheckLinkValidateParams,\n    ShipinhaoCheckLinkValidateParamsSchema,\n} from \"./actions/shipinhaoCheckLinkValidate\";\nexport { type ShipinhaoGetLocationParams, ShipinhaoGetLocationParamsSchema } from \"./actions/shipinhaoGetLocation\";\nexport { type ShipinhaoGetMsgParams, ShipinhaoGetMsgParamsSchema } from \"./actions/shipinhaoGetMsg\";\nexport type { ShipinhaoLoginParams } from \"./actions/shipinhaoLogin\";\nexport { type ShipinhaoPublishParams, ShipinhaoPublishParamsSchema } from \"./actions/shipinhaoPublish\";\nexport { type ShipinhaoPublishVideoParams, ShipinhaoPublishVideoParamsSchema } from \"./actions/shipinhaoPublishVideo\";\nexport { type ShipinhaoSendMsgParams, ShipinhaoSendMsgParamsSchema } from \"./actions/shipinhaoSendMsg\";\nexport { type ToutiaoPublishParams, ToutiaoPublishParamsSchema } from \"./actions/toutiaoPublish\";\nexport { type WeixinPublishParams, WeixinPublishParamsSchema } from \"./actions/weixinPublish\";\nexport { type XiaohongshuPublishParams, XiaohongshuPublishParamsSchema } from \"./actions/xiaohongshuPublish\";\nexport { type XhsWebSearchParams, XhsWebSearchParamsSchema } from \"./actions/xiaohongshuWebSearch\";\nexport { type ActiomCommonParams, ActionCommonParamsSchema } from \"./types\";\nexport { getFileState } from \"./utils\";\nexport { Http } from \"./utils/http\";\nexport { ProxyAgent } from \"./utils/proxy\";\nexport { reportLogger } from \"./utils/reportLogger\";\n// 内部测试方法\n\nexport { rpaAction_Server_Mock } from \"./actions/xiaohongshuPublish/rpa-server-mock\";\n"],"names":["encrypt_lookup","esm_typeof","t","encrypt_b64Encode","e","r","n","o","i","a","u","s","c","l","f","p","h","d","v","g","m","y","w","b","_","E","x","k","T","S","A","L","I","R","O","C","N","P","B","M","j","F","D","q","U","G","H","V","W","a0_0x10f4ac","X","z","Y","K","J","$","Q","Z","tt","encrypt_encodeChunk","encrypt_encodeUtf8","encodeURIComponent","parseInt","sign_common","JSON","encrypt_tripletToBase64","a0_0x3693","encrypt_mcr","GenXSCommon","a1cookie","x_t","x_s","b1","module","encoder","TextEncoder","leftRotate","shift","gt","value","length","_padChar","String","normalizeRuntime","runtime","Date","Math","getArr","input","format","reg","compress","block","temp","Array","state","tValue","ff","gg","ss1","ss2","tt1","tt2","write","bytes","index","fill","bitLength","BigInt","high","Number","low","result","encodeCustomBase64","alphabet","charCode0","charCode1","charCode2","baseNum","remaining","abArr256","nums","previousValue","lm","num1","abGarbledCharacters","arr256","n4","n2","n3","oldArrN2","n5","n6","n7","n8","uaArr256","userAgent","uaSalt","uaGarbledCharacters","encryptionUa","chars","getArr2","data","char","getLast3Num","dateTime1","timestamp","getLastNum2","arr1","arr","arrIndexes","xorResult","getNumList","arr0","arrAr","numList","randomValue","num2","num3","num4","topHeaderRandomGarbledCharacters","randomGarbledCharactersArrayList","randomGarbledCharactersArray1","randomGarbledCharactersArray2","getArr29","dateTime2","params","parArr","dataArr","browserArr","arr2","num","dateTime3","arr32","arr36","lastNumOne","lastNum","newArr","newArr2","getGarbledString","runtimeOptions","timestamp1","timestamp2","arr29","prefix","mixed","getABogus","url","safeUrl","safeData","safeUserAgent","mixedData","garbledString","crypto","require","hexToBuffer","hexString","Buffer","normalized","concatByteArrays","arrays","parts","Uint8Array","sliceArray","array","values","hmacSha256Sign","key","keyBuffer","dataBuffer","base64UrlToBuffer","getXCoordinateHexFromCertificate","certificatePem","certificate","jwk","getPrivateScalarHex","privateKeyPem","privateKey","getF","privateKeyHex","publicKeyHex","ecdh","ne","compressedPublicKeyHex","sharedKey","zeroKey","emptyBytes","outputLength","kdfFunction","seedHex","extraBytes","requiredLength","output","previousHex","counter","previousBytes","combined","initialKey","customHexBase64","getHeadersBdTicketGuardClientData","ticket","path","tsSign","secretKey","dataToSign","signature","reqSign","clientData","getBdV2","responseObj","options","headersBdTicketGuardClientData","generateCsrfToken","cookies","method","sessionid","getCookieValue","uid_tt","msToken","ttwid","version","timestampHex","random","generateRandomHex","signData","hash","csrfToken","name","cookie","generateCsrfTokenAdvanced","sid_guard","odin_tt","timestampSec","pathname","urlObj","URL","signParts","Boolean","firstHash","secondHash","generateCsrfTokenSimple","parseCsrfToken","token","date","RSA_PUBLIC_KEY_PEM","size","plaintext","publicKeyPem","rsaEncryptBase64","hexToBytes","hexStr","importAesCbcKey","raw","Error","bytesToB64","aesCbcEncrypt","plainText","keyHex","ivBytes","iv","cipher","ctBytes","ivPlusCt","bytesToHex","encrypted","aesCbcEncryptWithRandomIv","encryptWithRsaPublicKeyBase64","dtraitToken","payload","jsonText","randKeyBytes","enc","rsaB64","generateDtrait","UNSIGNABLE_HEADERS","sha256","hmac","getSigningKey","secretAccessKey","dateStamp","region","service","kDate","kRegion","kService","kSigning","isSignableHeader","header","lowerHeader","canonicalHeaderValues","canonicalHeaders","headers","headerPairs","Object","lowerKey","signedHeaders","headerNames","canonicalQueryString","iso8601","randomS","pool","generateAuthorization","config","accessKeyId","sessionToken","body","now","amzDate","requestHeaders","canonicalQueryStr","canonicalHeadersStr","signedHeadersStr","payloadHash","canonicalRequest","algorithm","credentialScope","canonicalRequestHash","stringToSign","signingKey","authorization","fs","calculateFileCrc32","filePath","crc32Value","crc32","crc32Hex","CRC_TABLE","crc","byte","a0_0x45db08","a0_0x4b0d","_0x2bd218","_0x316d6","_0x165410","a0_0x1654","_0x4b0d73","_0x5794db","_0x1859e3","_0x1b2596","_0x16c0e0","_0x1227f1","_0x46fb59","_0x383dd4","_0x4fc071","Random","Ts","Sm3DoneTs","xhrParaDoneTs","xhrReqDoneTs","_0x46e031","SM3Hasher","_0x468533","_0x11e792","_0x22d1ef","_0x182388","_0x2ded18","_0x5e491d","_0x12d911","_0x5795ab","_0x22d98b","_0x5659da","_0x357908","_0x5c0d1c","_0x2e8583","_0x28f42f","_0x4b2a85","_0xffe4ea","_0x34ff8d","_0xecf9f6","_0x3ddb20","_0x28ac8a","_0x117621","_0x335539","_0x450e58","_0x5b1ad8","_0x46ad66","_0xa844a0","_0x15bc36","_0x4a32f3","_0x36cc0b","_0xd7dcfe","_0x1e530c","_0x3c50af","_0x3da582","_0x14b06e","_0x4ec82e","_0x489962","_0x5dd43e","_0x744660","console","_0x197f71","_0x5e22dd","_0xfc800b","_0x1300f1","_0xed8891","_0x3414cb","_0x2f42fb","_0x326645","_0x2c63af","_0x558c0d","_0x4a902b","_0x493bba","_0x23a9bd","_0x7114f5","_0x49cf1f","_0x698c70","_0xe5328","_0x2b58f2","_0x17c086","_0x3621a2","_0x5959b9","_0x3b42ff","_0x50d411","_0x910e21","_0x459622","EnvData2CharCode","_0x58cd97","_0x23e1e0","_0x3ca6b2","_0x56cb93","_0x2d49d4","_0x3f2013","_0x4b8ded","_0x5bb315","_0x42b4c4","_0x1cdc95","_0x58aa5d","_0x26ee7a","_0xe2d586","_0x571095","_0x4dabdb","_0x4139e6","_0x339170","_0x56e1cd","_0x24b6d5","_0x196cf7","_0x2eb1f3","_0x2171ba","_0x925e58","_0x540dbd","_0x2fbb10","_0x41ebdd","_0x42a240","_0x49ec53","_0x3d9ba0","_0xeaa831","_0x477e24","_0x3bd924","_0xa7bf19","_0x23c273","_0x4d13ab","Base2Data","_0x348aa6","_0x2bc7c7","_0x874207","_0x224d00","_0x31697c","_0x235e4f","_0x29dde1","_0x4a74f1","_0xef36c2","_0x4120e4","_0x39cb62","_0x5cbaf6","_0x29a672","_0x96c5ae","_0x46c34b","_0x5d4cb4","_0x506f4f","Data2A_B","_0x19ca6d","_0x5d8d72","_0x225e7d","_0x4f0a28","_0x251d62","_0x2b8eea","_0x3fca04","_0xb85a46","_0x4e702d","_0x4382e1","_0x225aa0","_0x5607b9","_0x3fb7b7","_0x425784","GenAB","_0x315138","_0x1c32b3","_0x206982","_0x56536b","encodeUtf8","r2","tripletToBase64","encodeChunk","c2","b64Encode","encode_mnsv2","mnsv2","type","platform","req_type","_0x5e26","_0x4a41","_0x1218b5","_0x5e2612","_0x4a419f","_0xe72767","_0xe7f5e","_0x3fd162","_0x257514","_0x5c8197","glb","globalThis","_0x24c604","_0x6a35ed","_0x22f624","_0x7083c4","_0x12b83a","_0x1ff265","_0x19dd10","_0x2bfbca","_0x5cafee","_0x2f08d7","_0x37fbe9","_0x33582f","_0x641642","_0x2fdb95","_0x1258bd","_0x5bf9ad","_0xf255ce","_0xee3311","_0x318ddf","_0x4385f3","_0x584e4a","_0x5c149f","_0x17b7fe","_0x174344","_0x18d99e","_0x5cbc7d","_0x56bf71","_0x3dc1b2","_0x16e5da","_0xa53bfb","_0x485b39","_0x387bd5","_0x3dcf70","_0x48eb89","_0x5d0e43","_0xe05ad5","_0x2463d8","_0x1a5a8f","_0x49936e","_0x45d1a1","_0x2a01a0","_0x3ff15b","_0x4f901b","_0x1dfe70","_0x51b176","_0x3d45e0","_0xf84a5d","_0x39dfca","_0x3e5179","_0x3f8716","_0x3aa298","_0x4d3f6b","_0x4446eb","_0x4c8666","_0x1397bd","_0x3b53d5","_0x25f6f4","_0x29b4e2","_0x3f4419","_0x5170ae","_0x1359a6","_0x50e590","_0x338aeb","_0x3a9605","_0x290bc9","_0x1ff6c7","_0xcd43a3","_0x3b25e9","_0x5e42f8","_0x1ba8e5","_0x26aef5","_0x65c1f7","_0x373aa4","_0x50d703","_0x928a91","_0xb408a6","_0x20a02d","_0x29f74b","_0x545253","_0x358a47","_0x3f46e4","_0x18ec78","_0x4a7966","_0x31653d","_0x3e50ef","_0x4d3a96","_0x1a13b2","_0x3bacd8","_0x5887b3","_0x436eef","_0x5222c2","_0x2c8c91","_0x7980dd","_0xd59293","_0x2b8404","_0x24f33b","_0xd06423","_0x472411","_0x583510","_0x560524","_0x189796","_0x28584e","_0x4faf64","_0x4b2e99","_0x3623da","_0xce7c94","_0x9032ec","_0x14736a","_0x6288b8","_0x4f7385","_0x49c856","_0x176f10","_0x5253ed","_0x261198","_0x176d4f","_0x5cb9a5","_0x319795","_0x380a2e","_0x42b18d","_0x38ffc5","_0x5cfc49","_0x2f4e06","_0x1f4ce1","_0x579306","_0x125668","_0x1a570e","_0x15b5be","_0x55b590","_0x5a2f99","_0x2b20aa","_0x25efe9","_0x5a70e7","_0x301cd3","_0x1701b4","_0x42f110","_0x5aa648","_0x105428","_0x47dd10","_0x410a4e","_0x97fa53","_0x8beaee","_0x584b00","_0x4e8343","_0x434d83","_0x3e4974","_0x1f5b2f","_0xfeec47","_0x9fb647","_0x8c3df2","_0x17fbce","_0x246e23","_0x2163fd","_0x4557a3","_0x5ce007","_0x189e3c","_0x39d9b2","_0x4d5e62","_0x3c4e2e","_0x1275b5","_0x111acb","_0x45d234","_0x5c740a","_0x330c1e","_0x496b23","_0x3b8ef1","_0x231263","_0x25eebc","_0x1b69fa","_0x1da372","_0x2272aa","_0x11af26","_0x4404cf","_0x35dada","_0x334cfd","_0x43e4f0","_0x3cf229","_0x1b53c3","_0x5d9a2a","_0x2e2a54","_0x1d5c8b","_0x275a32","_0x4b36cf","_0x974374","_0x11b253","_0x3510ae","_0x2c1c19","_0x237c62","_0x2ed7be","_0x27caf3","_0x59cf43","_0x161ca7","_0x351dad","_0x59f40f","_0x56db54","_0x2731c5","_0x215661","_0x20571c","_0x2f81a1","_0x325743","_0x315b84","_0x29299d","_0x26e36b","_0x3ccd9d","_0x1bb79d","_0xc8fbc5","_0x1a7921","_0x10f7a4","_0x1e948f","_0x5ec926","_0x2a9505","_0x3a3eed","_0x55fbaf","_0x266fac","_0x3c78a3","_0x35474d","_0xa44cbd","_0xb82f14","_0x22aa37","_0x17d4ea","_0x2636de","_0x45fc23","_0x56bd98","_0x17a8e3","_0x1bb49c","_0x406702","_0x5cfd36","_0x38316d","_0x172a9d","_0x5382c2","_0x2ad38b","_0x367bd3","_0x39fe15","_0xf72fd1","Reflect","Proxy","_0x1acf38","_0x5419d5","_0xc4e151","_0x1cdc6a","_0x385b68","_0x3cb9ef","_0xaf1f2b","_0x2035d4","_0xa530a2","_0x5349ad","_0x31f90b","_0x355d4c","_0x28afe6","_0x17e79c","_0x12fb2d","_0x2fcaa9","Function","_0x2e7a26","arguments","_0x50aa3b","_0x5b028a","_0x120a3e","_0x5179ac","_0x5685b9","_0x1373ba","_0xa8799b","_0x11608f","_0x4605ce","_0x458cba","_0x40af62","_0x47239e","_0xd94b9a","Symbol","TypeError","_0x22f5c2","_0xc15748","_0x498cf3","_0x2ab336","_0x49c968","_0x2435ac","_0x4de9cc","_0x43ddd5","_0xb96fbb","_0x3ad1bc","_0x2a37cd","_0x486235","_0x105c68","_0x4f381c","_0xfa87b5","_0x5c9ccf","_0x2fc50f","_0x5ac37a","_0x5d468d","_0xd412d2","_0x2b32ac","_0x26614f","_0x1b0b08","_0x89bc72","_0x10e5cb","_0x2a1ef9","_0x4112a4","_0x14cec8","_0x586fa1","_0x4746fc","_0x50db27","_0x3a05d0","_0x4987a0","_0x29944e","_0x8bea75","_0x4da4b2","_0x2ce82e","_0x24f400","_0x51cce9","_0x1414c9","_0x48f581","_0x53ce65","_0x428514","_0x5c4110","_0x5e0b6d","_0x168ac1","_0xdeab25","_0x323a2b","_0x28c6bf","_0x8096f5","_0x2d0b41","_0x1d2320","_0x3121f2","_0x23b9e8","_0x42ee3d","_0x440e84","_0x36c245","_0x377410","_0x36ee46","_0x50dc14","_0x2d295a","_0x4fed5f","_0x1fdc1b","_0x3714b9","_0x484194","_0x7e7569","_0x1b87f3","_0x4e3c2b","_0x33e19f","_0xa3097b","_0xa9d1be","_0x4ab42b","_0x564652","_0xe4f438","_0x58c899","_0x3c7e4c","_0x36c27e","_0x102483","_0xa0b332","_0x4b430a","_0x524bf4","_0x2f0111","_0x4a995d","_0x31793d","_0x568eef","_0x1d4fa7","_0x1c5004","_0x30595f","_0x4e19c9","_0xf3aac1","_0xcd74f4","_0x4857c3","_0x6ea9fa","_0x1338c6","_0x1cc642","_0xf70f4c","_0x391e0e","_0x25d459","_0x42fb78","_0x28fdfd","_0x20fe2e","_0x1bafbb","_0x24e420","_0xbd2f50","_0x3c286b","_0x407daf","_0x2b4fe1","_0x1bf090","_0x502aec","_0x2086de","_0x13679c","_0x357cd1","_0x3b8cb1","_0x44fdd7","_0x3a98c2","_0x43c136","_0x121dbc","_0x210cf9","_0x5479","_0x55e4","_0x5a83dc","_0x547951","_0x55e409","_0x4d6a1b","_0xf55a6c","_0x4256ee","_0x17d3cf","_0xa70d40","_0x50a5e0","_d1b4df64eb152aa1d24e82f9bd0bfe7b","_0x1acabb","_0x456f43","_0x106df0","_0x1e2b8c","_0x3e16ea","_7140998d8f99c8324e0fcd817edff9b2","_0x139611","_0x131c86","_0x434b65","_0x2fdad2","_0x11de5b","_0x54f135","_0x47d7a2","_0x1cdab2","_0x3621ec","_0x1b667f","_0x7a6865","_6e8d40c844a972a6429074a59f678907","_0x496cdc","_0x5dd132","_0x4a0480","_0x2eac01","_0x56ce93","_575364e3fbdd1929a75a10a5118cc687","_0x362fcb","_0x3d21ce","_0x1e626c","_0x58bacc","_972e441617b5152eab406b3c2c8e25ff","_0x17d27e","_0x3f568d","_0x17f238","_0x5ce91f","_0x32e788","_0x38e84a","_0x914ea2","_0x259971","_2b3beb7962f7014c81b260f8aa1890be","_0x2d2326","_0x43e7ad","_0x5c56da","_0x2055b1","eval","_2d6b4518857b5d2355e5bd9809691b44","_0x543826","_0x3993fb","_0x3f7c9e","_0x1bf349","_0x298685","_0x585396","_0x30fb04","_0x21db63","_0x382aae","_0x546bf","_0x434164","_0x204d91","_0x19f010","_0x160df0","_0x528411","_0x4d6e02","_0x7e49ef","_0x543b8f","_0x16b1fb","_0x3d4192","_0xfd6cc0","_0x3fbacd","_0x45d0a5","_0x5c2c91","_0x922e84","_0x4a3e21","_0x4f3d04","_f523010cd8cf5fb75250d1fc2f671c73","_0xe64b03","_0x1e8b75","_0x1447ab","_0x2c06b2","_0x202073","_0x429066","_0x56585f","_0xffa0f2","_0x29f84f","_e0c26a2a191851217a8ed324fc1d568d","__$c","undefined","setTimeout","Promise","clearTimeout","performance","requestAnimationFrame","requestIdleCallback","RegExp","document","unescape","navigator","InstallTrigger","Set","XMLHttpRequest","chrome","Event","top","$toString","symbol","myToString","safeFunction1","func","funcname","makeFunction","safeFunction","Window","global","tagName","async","EventTarget","Node","Element","HTMLElement","HTMLHtmlElement","HTMLAllCollection","HTMLBodyElement","Document","HTMLDocument","PermissionStatus","Permissions","Storage","Location","USER_MESSAGE","NETWORK_CODES","classifyPublishError","handledError","code","isProxyRequest","category","RPA_ERROR_WEBHOOK_URL","ALARM_THROTTLE_MS","lastSentAt","Map","THROTTLE_MAP_MAX_KEYS","pruneThrottleMap","at","postFeishuWebhook","webhookUrl","axios","buildFeishuPostMessage","report","content","reportFeishuAlarm","last","PROXY_CREDENTIALS","findProxyCredential","ip","port","portNum","buildProxyUrl","credential","user","pass","ProxyAgent","task","addr","accountId","refresh","http","Http","ProxyInfo","err","loggerInfo","proxyAgent","SocksProxyAgent","ALARM_STATUS","isLocalAddress","hostname","HTTP_STATUS_MESSAGE","error","resp","logger","interceptors","findError","response","foundError","errorResponse","verifyDecision","pick","serverError","_message","status","createHash","stringifyError","message","attempts","axiosCode","baseURL","fullUrl","rawMsg","baseMsg","retriedSuffix","retries","retryDelay","reqTimeout","externalSignal","agent","sessionRt","Rtimes","controller","AbortController","timeoutId","forwardAbort","isRetry","backoff","resolve","requestUrl","platformTag","getRandomInRange","min","max","getFileState","filename","fileType","mime","stats","fileSize","lastModifiedDate","calculateCropCoordinates","width","height","aspectRatio","targetRatio","cropWidth","cropHeight","x1","y1","x2","y2","extractImgTag","html","srcList","parser","Parser","attributes","src","currentSrc","formatSectionHtml","handler","DomHandler","dom","sections","DomUtils","node","section","imgs","hasValidImg","img","domSerializer","TimeFormatter","formatStr","map","replaceImgSrc","callback","lastedHtml","isImageTag","traverseDom","child","executeAction","actions","action","copyHtmlToClipboard","page","htmlContent","blob","Blob","ClipboardItem","div","range","selection","window","PopupListener","popupSelector","popKey","buttonSelector","checkInterval","stopAfterClick","popup","button","intervalId","setInterval","clearInterval","parseUrlQueryString","queryStringObject","queryString","queryWithoutHash","queryStringArray","item","equalIndex","decodeURIComponent","defaultParams","defaults","rpaAction","_params","reporter","isSelfClosing","handleBrowserDisconnected","cleanup","pageInfo","pageId","baseHost","connectAddress","URLSearchParams","route","res","buffer","mimeType","dataUrl","request","hasInjectedQrcode","_request","base64","userInfo","cookieHeader","fetch","jsonUser","success","$constructor","initializer","init","inst","def","_a","Parent","Definition","fn","$ZodAsyncError","$ZodEncodeError","globalConfig","newConfig","entries","numericValues","joinValues","separator","val","stringifyPrimitive","jsonStringifyReplacer","cached","getter","set","nullish","cleanRegex","source","start","end","floatSafeRemainder","step","valDecCount","stepString","stepDecCount","match","decCount","valInt","stepInt","EVALUATING","defineLazy","object","assignProp","target","prop","mergeDefs","defs","mergedDescriptors","descriptors","esc","str","captureStackTrace","_args","isPlainObject","ctor","prot","shallowClone","propertyKeyTypes","escapeRegex","clone","cl","normalizeParams","optionalKeys","shape","NUMBER_FORMAT_RANGES","schema","mask","currDef","newShape","omit","extend","checks","hasChecks","_shape","safeExtend","merge","partial","Class","oldShape","required","aborted","startIndex","prefixIssues","issues","iss","unwrapMessage","finalizeIssue","ctx","full","getLengthableOrigin","args","$ZodError","$ZodRealError","flattenError","mapper","issue","fieldErrors","formErrors","sub","formatError","processError","curr","el","terminal","_parse","_Err","_ctx","_parseAsync","_safeParse","safeParse","_safeParseAsync","safeParseAsync","_encode","_decode","_encodeAsync","_decodeAsync","_safeEncode","_safeDecode","_safeEncodeAsync","_safeDecodeAsync","cuid","cuid2","ulid","xid","ksuid","nanoid","guid","email","_emoji","emoji","ipv4","ipv6","cidrv4","cidrv6","e164","dateSource","timeSource","hhmm","regex","datetime","time","opts","timeRegex","string","integer","lowercase","uppercase","$ZodCheck","numericOriginMap","$ZodCheckLessThan","origin","bag","$ZodCheckGreaterThan","$ZodCheckMultipleOf","isMultiple","$ZodCheckNumberFormat","isInt","minimum","maximum","$ZodCheckMaxLength","$ZodCheckMinLength","$ZodCheckLengthEquals","tooBig","$ZodCheckStringFormat","_b","$ZodCheckRegex","$ZodCheckLowerCase","$ZodCheckUpperCase","$ZodCheckIncludes","escapedRegex","pattern","$ZodCheckStartsWith","$ZodCheckEndsWith","$ZodCheckOverwrite","Doc","arg","lines","minIndent","dedented","line","$ZodType","ch","runChecks","isAborted","asyncResult","shouldRun","currLen","nextLen","handleCanaryResult","canary","checkResult","$ZodString","$ZodStringFormat","$ZodGUID","$ZodUUID","versionMap","$ZodEmail","$ZodURL","trimmed","$ZodEmoji","$ZodNanoID","$ZodCUID","$ZodCUID2","$ZodULID","$ZodXID","$ZodKSUID","$ZodISODateTime","$ZodISODate","$ZodISOTime","$ZodISODuration","$ZodIPv4","$ZodIPv6","$ZodCIDRv4","$ZodCIDRv6","address","prefixNum","isValidBase64","atob","$ZodBase64","isValidBase64URL","padded","$ZodBase64URL","$ZodE164","isValidJWT","tokensParts","parsedHeader","$ZodJWT","$ZodNumber","received","$ZodNumberFormat","$ZodBoolean","$ZodAny","$ZodUnknown","$ZodNever","handleArrayResult","final","$ZodArray","proms","handlePropertyResult","normalizeDef","keys","okeys","handleCatchall","unrecognized","keySet","_catchall","$ZodObject","desc","sh","newSh","_normalized","propValues","field","isObject","catchall","$ZodObjectJIT","superParse","generateFastpass","doc","parseStr","ids","id","fastpass","jit","allowsEval","fastEnabled","handleUnionResults","results","nonaborted","$ZodUnion","option","patterns","single","first","$ZodIntersection","left","right","handleIntersectionResults","mergeValues","bKeys","sharedKeys","newObj","sharedValue","newArray","itemA","itemB","merged","$ZodRecord","keyResult","$ZodEnum","valuesSet","$ZodLiteral","$ZodTransform","_out","handleOptionalResult","$ZodOptional","$ZodNullable","$ZodDefault","handleDefaultResult","$ZodPrefault","$ZodNonOptional","handleNonOptionalResult","$ZodCatch","$ZodPipe","handlePipeResult","next","$ZodReadonly","handleReadonlyResult","$ZodCustom","handleRefineResult","_iss","Sizable","getSizing","Nouns","adj","sizing","_issue","WeakMap","_meta","meta","pm","registry","globalRegistry","_string","_email","_guid","_uuid","_uuidv4","_uuidv6","_uuidv7","_url","_nanoid","_cuid","_cuid2","_ulid","_xid","_ksuid","_ipv4","_ipv6","_cidrv4","_cidrv6","_base64","_base64url","_e164","_jwt","_isoDateTime","_isoDate","_isoTime","_isoDuration","_number","_int","_boolean","_any","_unknown","_never","_lt","_lte","_gt","_gte","_multipleOf","_maxLength","_minLength","_length","_regex","_lowercase","_uppercase","_includes","includes","_startsWith","_endsWith","suffix","_overwrite","tx","_normalize","form","_trim","_toLowerCase","_toUpperCase","_array","element","_custom","norm","_refine","_superRefine","_check","ZodISODateTime","ZodISODate","ZodISOTime","ZodISODuration","ZodRealError","ZodType","check","refine","refinement","superRefine","optional","nullable","nonoptional","union","intersection","pipe","transform","prefault","readonly","description","_ZodString","ZodString","ZodEmail","ZodURL","ZodJWT","ZodEmoji","ZodGUID","ZodUUID","ZodNanoID","ZodCUID","ZodCUID2","ZodULID","ZodBase64","ZodBase64URL","ZodXID","ZodKSUID","ZodIPv4","ZodIPv6","ZodCIDRv4","ZodCIDRv6","ZodE164","ZodStringFormat","ZodNumber","ZodNumberFormat","ZodBoolean","ZodAny","any","ZodUnknown","unknown","ZodNever","never","ZodArray","minLength","maxLength","len","ZodObject","incoming","other","ZodOptional","ZodNonOptional","looseObject","ZodUnion","ZodIntersection","ZodRecord","record","keyType","valueType","ZodEnum","newEntries","ZodLiteral","literal","ZodTransform","innerType","ZodNullable","ZodDefault","defaultValue","ZodPrefault","ZodCatch","catchValue","ZodPipe","in_","out","ZodReadonly","ZodCustom","custom","en","ActionParamsSchema","ActionCommonParamsSchema","CookieBaseSchema","LocalStorageBaseSchema","ExecutionState","MockPublish","DisabledReq","scanRetryMaxCount","waitQrcodeResultMaxTime","rpaServer","updateTaskState","executionState","proxyUrl","ProxyAgentResult","browserContext","browser","style","newStyle","TaskState","reject","finished","timer","handleWebCommon","handleCheckQR","handleBrowserClosed","jsonResponse","jsonPStr","jsonStr","channel_v","msg","baijiahaoLogin","reportLogger","baseUrl","generateTopicHtml","topic","sv_small_images","generateUid","topicBase","topicAttr","attrStr","errnoMap","mockAction","baijiahaoSingleCover","baijiahaoMultCover","baijiahaoCoverType","tmpCachePath","it","proxyHttp","msgType","errmsg","appIdInfo","appId","uploadImages","_images","images","fileName","getFilenameFromUrl","ext","image","downloadImage","maxSize","formData","FormData","originContentImages","targetContentImages","topicCheck","idx","horizontalCoverUrl","horizontalCoverRes","cover_images","_cover_images_map","isAi","activityList","cover_layout","activity_list","publishData","isDraft","saveUrl","isSuccess","validCookies","_error","_err","isLoggedIn","titleEditor","coverFormItem","isSingleCover","firstSlot","modal","localTab","uploadBtn","beforeCount","fileChooserPromise","fileChooser","before","allBlobItems","count","clicked","isSelected","abstractTextarea","policyTip","aiSettingSection","confCheckbox","isChecked","event2NewsCheckbox","shouldCheck","statementSection","aigcCheckbox","hasEventSpec","sourceCheckLabel","isSourceChecked","sourceWrap","targetDate","datePickerInput","pickerPanel","targetYear","targetMonth","attempt","yearText","monthText","currentYear","currentMonth","isAfter","cascader","levels","level","cascaderDropdown","activity","activityFormItem","findCard","articleId","handleResponse","operatorContainer","scrollHourInfo","hourInner","hourElementHeight","hourMapsElem","hourMap","fistHourElem","fistHourElemH","lastHourElem","lastHourElemH","targetTimeH","scrollMinuteInfo","fistMinuteElem","fistMinuteElemH","lastMinuteElem","lastMinuteElemH","targetTimeM","BaijiahaoPublishParamsSchema","baijiahaoPublish","generatorFormData","TTFansExport","_task","fans","getToutiaoToken","userId","cookieStr","https","location","fansDetail","descriptionRes","XhsFansExport","WxFansExport","htmlStr","descMatch","BjhFansExport","CryptoConfig","BitOperations","inputArray","keyBytes","RandomGenerator","byteCount","minVal","maxVal","seq","part1","part2","Base64Encoder","dataToEncode","dataBytes","standardEncodedString","encodedString","standardString","base64String","RequestSignatureValidator","normalizedMethod","uri","a1Value","xsecAppid","CryptoProcessor","ts","xorKey","sum1","sum2","mark","hexParameter","appIdentifier","stringParam","seed","seedBytes","seedByte0","tsMs","timeOffset","sequenceValue","windowPropsLength","uriLength","md5Bytes","a1Bytes","sourceBytes","CRC32","table","signed","FingerprintData","FingerprintHelpers","weights","totalWeight","sum","weight","rendererStr","vendor","renderer","resolutionStr","widthStr","heightStr","availWidth","availHeight","ARC4","keyByte","FingerprintGenerator","cookieString","screenConfig","isIncognitoMode","x78Y","fp","b1Fp","b1Json","ciphertext","latin1String","encodedUrl","part","XsCommonSigner","cookieDict","fingerprint","x9","signStruct","signJson","Xhshow","valueStr","dValue","payloadArray","validatedMethod","validatedUri","validatedA1Value","validatedXsecAppid","validatedPayload","signatureData","signatureJson","cookieObj","methodUpper","requestData","xS","xSCommon","xT","xB3Traceid","xXrayTraceid","x3Signature","decodedBytes","xsSignature","jsonString","xsEncrypt","lastEnvLogTime","ENV_LOG_INTERVAL_MS","SessionCheckResultSchema","WxBjhSessionParamsSchema","TTSessionCheck","WxSessionCheck","XhsSessionCheck","shouldLogEnv","process","a1Cookie","loginBasePath","recordCookie","acc","loginBaseXsHeader","signError","baseInfoStart","_baseInfo","clientTimestamp","serverDate","serverTimestamp","timeDriftMs","webSessionPath","webSessionData","webSessionXsHeader","_web_session","baseInfo","web_session","BjhSessionCheck","DySessionCheck","ShipinhaoSessionCheck","getTimeStamp","requestBody","extractEncFileKey","downloadUrl","rid","hexTable","createShipinhaoComment","urlParams","DouyinCheckVerifyQrCodeParamsSchema","mergeSetCookies","oldCookies","setCookieHeader","setCookies","cookieMap","nameValue","eqIdx","attrs","attrEq","existing","douyinCheckVerifyQrCode","bizTraceId","passportCsrfToken","checkBody","checkBodyStr","checkQueryParams","checkQueryStr","checkUrl","aBogus","finalQueryStr","sessionDtrait","rawSetCookie","checkHttp","checkResponse","updatedCookies","DouyinCreateCommentReplyParamsSchema","douyinCreateCommentReply","queryParams","queryParamsBefore","DouyinGetCollectionParamsSchema","douyinGetCollection","collectionParams","DouyinGetCommentListParamsSchema","douyinGetCommentList","commentListParams","DouyinGetCommentReplyListParamsSchema","douyinGetCommentReplyList","replyListParams","DouyinGetHotParamsSchema","douyinGetHot","hotParams","DouyinGetLocationParamsSchema","douyinGetLocation","keyword","locationParams","locations","DouyinGetMusicParamsSchema","douyinGetMusic","musicParams","musicQueryBefore","authorizationParams","authQueryBefore","authorizationQueryString","musicRes","decompressed","decompress","DouyinGetMusicByCategoryParamsSchema","douyinGetMusicByCategory","DouyinGetMusicCategoryParamsSchema","douyinGetMusicCategory","categoryParams","DouyinGetTopicsParamsSchema","douyinGetTopics","topicParams","DouyinGetVerifyQrCodeParamsSchema","douyinGetVerifyQrCode","decision","bizTraceIdFromCookie","logId","qrCodeBody","qrCodeBodyStr","qrCodeQueryParams","qrCodeQueryStr","qrCodeUrl","aBogusQr","csrfTokenQr","sessionDtraitQr","qrHttp","qrCodeResponse","qrData","DouyinGetWorkListParamsSchema","douyinGetWorkList","workListParams","customStyle","_e","removeEventBlockers","MutationObserver","observer","loginButtonSelector","selector","btn","handlePageNavigation","frame","xmst","mstExpirDate","jsonUserInfo","errorMessage","securityData","maxRetries","retryCount","localStorage","browserInfo","userAgentData","douyinLogin","DouyinImageUploader","isHttps","Agent","agentOptions","newQueryString","uploadAuth","authData","expireTime","auth","times","addrParamsConfig","addrParamsQueryString","uploadAddress","storeInfo","imageInfo","uploadAddr","fileBuffer","uploadUrl","uploadImgResp","Infinity","imageUrl","total","localPath","dimensions","sizeOf","imageUrls","batch","batchIndex","totalBatches","batchPromises","globalIndex","batchResults","successResults","failedCount","coverUrl","ms","delayMs","label","waitTime","utf8Encoding","decoder","TextDecoder","decodeUnicodeEscapes","hex","parseVerifyPassportDecision","headerValue","cleanValue","decoded","parsed","fixedParsed","enrichParsedData","parsedCopywriting","copywritingStr","cleanedCopywriting","titleMatch","verifyWays","needsVerification","generateRandomString","characters","randomString","randomIndex","safeSerialize","obj","currentStep","sessionidCookie","publishParams","uploadedImgList","uploader","cover","banners","uploadResults","responseData","errorCode","webProtectData","ts_sign","serverDataCookie","ec_privateKey","ree_public_key","bdTicketGuardClientData","publishQuery","publishQueryParams","publishResult","classified","details","safeDecision","mockData","errorMsg","commonCookies","waitForElement","timeout","retryAction","delay","lastError","safeClick","locator","safeFill","text","titleInstance","descInstance","cleanContent","topics","topicTag","instanceCollection","musicTrigger","searchBox","searchInput","searchText","resultContainer","musicCards","matchedCard","cardCount","selectButton","buttonClicked","instance","publishDate","year","month","day","hour","minute","formattedTime","releaseTimeInstance","inputValue","rpaAction_Server","imagePromise","itemId","DouyinPublishParamsSchema","douyinPublish","getBaijiahaoActivity","ConfigDataSchema","getBaijiahaoConfig","_item","getShipinhaoBgm","getShipinhaoBgmCategory","getShipinhaoCollection","getShipinhaoCommentList","getShipinhaoConfig","WEIXIN_VIDEO_AID","generateRid","configData","getShipinhaoPostList","getToutiaoCollection","getToutiaoConfig","getSuggestWords","getCityDistrict","getUserRights","suggestWords","cityDistrict","userRights","getWeixinCollection","getWeixinConfig","filtered","CollectionDetailSchema","getXhsCollection","fatchCollextion","colletionData","collectionXsHeader","getXhsGroup","groupListParams","fatchGroup","searchXsHeader","getXhsHotTopic","hotTopicParams","fatchTopic","UnreadCountSchema","getXhsUnreadCount","unreadCount","apiPath","xsHeader","getBaijiahaoData","yesterday","fansData","readData","incomeData","yesterdayData","bjhData","getDouyinData","toNum","userProfileP","overviewP","userProfile","overview","fansNum","favedNum","followingNum","ov","douyinData","errMsg","getShipinhaoData","uinCookie","deviceIdCookie","aid","finderId","AUTH_ERROR_CODES","finderUser","startTs","endTs","fansNumYesterday","playNumYesterday","likeNumYesterday","commentNumYesterday","statsData","shipinhaoData","getToutiaoData","totalData","contentDataYesterday","ttData","exportWxCgiData","parseDocument","scripts","sandbox","vm","script","getWeixinData","userInfoHtmlPromise","userSummaryHtmlPromise","userInfoHtml","userSummaryHtml","userInfoJson","userSummaryJson","wxData","getXiaohongshuData","sevenDataUrl","sevenDataXsHeader","overAllData","sevenData","xhsData","SearchAccountInfoParamsSchema","SearchAccountInfo","searchBjhTopicList","parseBjhDom","domString","searchBjhUserArticle","detailJson","BaseArticleSchema","ToutiaoArticleSchema","WeixinArticleSchema","BaijiahaoArticleSchema","XiaohongshuArticleSchema","DouyinArticleSchema","ShipinhaoArticleSchema","FetchArticlesDataSchema","handleBaijiahaoData","pageNum","pageSize","showOriginalData","onlySuccess","containsArticle","fetchArticles","articleInfo","totalPage","currentPage","usedPages","validItems","getDetailContent","detailInfo","isCheckPass","articleCell","handleDouyinData","fetchWorks","cursor","isHasMore","skipCount","needCount","workListResponse","allWorks","hasMore","currentCursor","guard","nextPageResponse","finalWorks","workDetailUrl","workPublicUrl","statusText","handleShipinhaoData","postType","aidCookie","finderIdCookie","fetchPosts","userpageType","pageUrl","rawKeyBuff","fetchAllPosts","allPosts","continueFlag","totalCount","posts","mapPost","forcePostType","title","allArticles","needVideo","needArticle","combinedTotal","videoPageUrl","videoArticles","articlePageUrl","articleArticles","pageItems","handleToutiaoData","visitedUid","api_base_info_json","handleWeixinData","lastPage","ParsePublishPage","replaceCode","decodeHtmlEntities","encodedStr","begin","rawArticlesInfo","articlesInfo","totalFetched","nextPage","currentPageSize","_rawArticlesInfo","filteredList","cursorIndex","nextRawArticlesInfo","nextArticlesInfo","newFiltered","deatil","lastMsgId","BasePublishBUilder","publishInfo","timerPublishData","decodeTimerPublishData","timesend_msg","timmerPublish","handleXiaohongshuData","serveUrl","serveParams","serveXsHeader","hasNextpage","detailUrl","detailParams","detailxsHeader","FetchArticlesParamsSchema","FetchArticles","searchToutiaoLocation","searchToutiaoTopicList","searchToutiaoUserInfo","searchWeixinAccountCard","accountCardList","searchWeixinUserArticle","publishPage","searchXhsWebConnections","connectionsParams","fatchConnections","fatchConnectionsXsHeader","searchXhsWebLikes","likesParams","fatchLikes","fatchLikesXsHeader","searchXhsWebMentions","mentionsParams","fatchMentions","fatchMentionsXsHeader","searchXiaohongshuLocation","searchXiaohongshuTopicList","topicData","fatchTopicXsHeader","parseXhsDom","jsObjectStr","searchXiaohongshuUserArticle","INITIAL_STATE","ShipinhaoCheckLinkValidateParamsSchema","shipinhaoCheckLinkValidate","GetTimeStamp","linkParams","queryData","baseResp","ShipinhaoGetLocationParamsSchema","shipinhaoGetLocation","ShipinhaoGetMsgParamsSchema","shipinhaoGetMsg","extraParam","finderUserName","messageListParams","messageListUrl","messageListRes","sessionIds","allMessages","sessionDetailParams","sessionDetailUrl","sessionDetailRes","session","sessionMessages","shipinhaoGetMsgImage","imgMsg","rawContent","mediaInfoRes","extMap","normalizedExt","base64Img","statusMachine","finderList","handleAuthData","handleAuthLoginStatus","acctStatus","localStorageData","handleAfterLogin","handleScanStatus","helperData","win","masterFinder","event","CustomEvent","shipinhaoLogin","VideoChannelUploader","MAX_SIZE","slice","offset","marker","uin","authKey","taskId","blockSum","blockPartLength","chunk","uploadId","partNumber","onProgress","md5Hash","transFlag","partInfo","concurrency","items","executing","imagePath","etag","delta","chunks","lastUploaded","current","generateUUID","getUserInfo","finderUsername","authKeyData","getUploadAuthKey","uploadImageComplete","buildLocation","buildTopicXml","topicList","valueCount","xml","valueIndex","buildRichTextJson","richText","buildDescription","publishDynamic","fingerPrintDeviceId","aId","confParams","objectDesc","publishUrl","apiResponse","authKeyResponse","uploadedImages","uploadResult","topicNames","addressInfo","resultCode","resultMsg","publishId","uploadSelectors","uploadInput","allFileInputs","anyFileInput","inputCount","screenshotPath","titleInput","descEditor","poperInstance","instanceLink","linkTypeName","linkInput","musicFormItem","musicDisplayWrap","searchTxt","bgmItemWrap","timingRadio","dateD","nowMonth","nowMonthText","monthLocator","publishText","defaultPage","blockedPatterns","req","blocked","clickTimeout","positionDisplayWrap","dateInput","monthCount","publishResponse","errCode","ShipinhaoPublishParamsSchema","shipinhaoPublish","ShipinhaoAuthError","getShipinhaoUploadAuth","isLoginExpired","videoFileType","pictureFileType","MENTION_TEXT_SUFFIX","MENTION_XML_SUFFIX","buildMentionedUser","mentionedUsers","atIndex","buildTopic","buildEvent","buildExtReading","link","buildTagInfo","tagInfo","tagKey","CHUNK_SIZE","UPLOAD_STAGE_TIMEOUT","DEFAULT_TUNING","uploadFile","tuning","stat","metaTimeout","partTimeout","partRetries","completeTimeout","fileMd5","computeFileMd5","generateTaskId","xArgs","chunkCount","applyRes","uploadedParts","retryRes","fd","chunkSize","chunkMd5","partStart","completeRes","stream","MAX_METADATA_BOX_SIZE","readBoxHeader","limit","head","read","headerSize","parseVideoMeta","bodyLength","walkBoxes","movie","tracks","video","resolveDuration","buf","off","hi","lo","bodyStart","bodyEnd","parseMvhd","parseTkhd","mdhd","track","codec","parseStsdCodec","parseSttsDuration","tfhd","parseTfhd","duration","parseTrunDuration","UNKNOWN_DURATION_32","isUsableDuration","fragmentDurations","fragment","entryCount","flags","trackId","defaultSampleDuration","sampleCount","hasDuration","entrySize","entryOff","timescale","afterDuration","matrixOff","whOff","trackIdOff","rotation","parseVideoCodec","buildVideoMetaFromParams","metadata","MAX_DURATION_SECONDS","MAX_FILE_SIZE","ALLOWED_EXTENSIONS","ALLOWED_CODECS","MIN_TITLE_LENGTH","MAX_TITLE_LENGTH","formatFileSize","formatDuration","seconds","validateShipinhaoVideo","validateShipinhaoTitle","POST_CREATE_PAGE_URL","MICRO_CONTENT_BASE","resolveClientContext","fallbackUin","extra","buildPublishHeaders","client","buildPublishQuery","query","buildCommonBody","getTraceKey","getObjectTagKey","submitAndPollTranscode","videoUrl","videoMeta","traceKey","uploadStartTime","uploadEndTime","finderUrl","submitRes","clipKey","draftId","pollInterval","pollBudget","maxPolls","pollCount","sleep","pollRes","flag","md5","publishVideo","clipResult","videoUpload","coverUpload","verticalCoverUpload","toFinderUrl","thumbFinderUrl","coverFinderUrl","md5sumUuid","publishRes","resolveLocalCoverPath","coverPath","savePath","publishHeaders","microHttp","validationError","titleError","localCoverPath","localVerticalPath","unsupported","shootInfo","videoUploadSelectors","coverUploadBtn","coverInput","descriptionText","linkTypeText","placeholder","searchLoading","activityItem","tagTypeTextMap","tagText","dayNum","confirmBtn","repostSource","videoId","MEDIA_OPR_SELECTOR","uploadTimeout","uploadWaitStart","lastProgressLog","ready","host","root","elapsed","btns","ShipinhaoPublishVideoParamsSchema","shipinhaoPublishVideo","ShipinhaoSendMsgParamsSchema","shipinhaoSendMsg","generateCliMsgId","fromUsername","userInfoRes","imageBuffer","totalChunks","lastRes","chunkBuffer","uploadedImgMsg","sendRes","handleUserInfo","toutiaoLogin","encodedKey","encodedValue","get3101DetailError","errorList","saveType","toutiaoSingleCover","toutiaoMultCover","toutiaoCoverType","toutiaoOriginal","toutiaoExclusive","toutiaoClaim","coverRes","topicContent","sourceData","extraData","COVER_TYPE","getAddTypeValue","publishOption","postHeaders","postData","a_bogus","interceptUrls","coverTypeValue","coverContainer","coverUrls","coverUploadEle","coverUploadCount","ele","drawerContainer","locationContainer","adContainer","isAdOptionVisible","adRadio","exclusiveContainer","claim","ToutiaoPublishParamsSchema","toutiaoAd","toutiaoPublish","imageList","syncData","addressFormItem","declarationFormItem","weitoutiaoPublish","tokenMatch","commonData","initialState","json","errMap","weixinLogin","saveDraft","shareImageInfos","cropResult","fileState","colorResponseData","themeColor","cropFormData","cropRatios","cropCoordinates","cropCoordinate","cropResponse","sourceText","container","weixinmpPublish","QuotaType","genTopicHTML","rn","aTags","GET_QRCODE_DEFAULT_ERROR","ignoreErrno","userTypeMap","checkCopyrightStat","resData","client_time_diff","baseRespFinder","cloudImages","localImages","oriWhitelist","_oriWhitelist","white_list","white_list_user","_user","userInfo_res","userInfo_resJson","writerid","reply_id","getWriterList","getRewardText","_type","rewardbind","rewardBuffer","rewardFilePath","task_id","checkScanResult","_writer","_writer_item","rewardList","matchdID","reward","_reply_item","wxInteractionInfo","_wxInteraction","_opt","commentType","replyType","draftData","appMsgId","checkTimes","copyrightStatRes","copyrightStat","masssendpage","massSendRes","operation_seq","quota_detail_list","quotaDetail","copyrightStatData","lastData","checkCopyrightStatRes","getTicketResult","getUuidResult","uuid","qrcodeResult","qrcodeBuffer","qrcodeFilePath","urlRewardParams","wxRewardPage","reward_page","isAddRewarder","qrcodeSrc","isAddWord","dialog","pic_msg","ori_dialog","ori_dialog_bd","ori_dialog_ft","_target","search_res","search_res_name","whrite_list","white_td_isadd","btn_isChecked","checkbox","reward_setting","reward_setting_bd","reward_setting_ft","userName","reward_setting_replay","switchAuto","maxAttempts","nowCheckTime","isDisabled","isOneReplay","isCurrentReplay","openInteractionDialog","setupPublicInteraction","wxInteraction_bd","commentSwitch","isSwitchChecked","commentTextMap","commentOption","commentKey","commentText","comment_area","electSwitchInput","electSwitchBox","electCount","isElectChecked","wxInteraction_ft","poperInput","nowD","dropMenu","timeDropMenu","originalCheckDialog","popMassend","startTime","imgUrl","WxInteractionSchema","WeixinPublishParamsSchema","weixinPublish","CREATOR_PUBLISH_URL","createStageError","stage","isCreatorPublishUrl","parsedUrl","isExploreUrl","filterCreatorCookies","normalizedDomain","mergeUserInfo","extractCreatorUserInfo","readUserInfo","stopListening","rejectOnce","resolveOnce","continueAfterExplore","currentUrl","creatorUserInfoResponse","creatorUserInfo","codeStatus","collectCookiesWithA1","hasA1","ticket_mnsv2","XS","createrLogin","xiaohongshuLogin","_windowCache","getWindow","mnsv2_enc","arg1","arg2","para1","_queryPara","md5Para1","mnsvc2_data","mnsvc2","fetchCoverUrl","fetchCoverParams","fetchCoverXsHeader","uploadInfos","batchCoverIdInfo","fileId","coverIdInfo","availableBuckets","localUrl","orientation","originSize","MAX_RETRIES","ossBucketIndex","currentInfo","ossFileId","ossToken","ossDomain","coverInfos","invalidUpload","topicXsHeader","createTopic","visibleRangeMap","userDeclarationBind","photoInfo","bizId","userData","business_binds","publishXsHeader","selectAddress","selectDate","getPoperInstance","elements","visibleElements","getDialogInstance","selfDeclarationInstance","selfDeclarationSecondaryMenuInstance","shootingDate","shootingLocation","selfShootingPopup","hasCustomContent","sourceMedia","publishBtn","uploading","collectionName","collectionBindInstance","collectionItemInstance","groupBindName","groupBindInstance","groupItemInstance","OriginalBindBtn","isOriginalBindBtnVisible","visibleText","setSwitch","switchUI","cls","imgPreviewArea","toastDesc","Md5","rpaAction_Server_Mock","pagePromise","encodeData","FictionalRendition","AIGenerated","SourceStatement","XiaohongshuPublishParamsSchema","xiaohongshuPublish","xiaohongshuWebCommentAction","actionParams","likeActionRes","likeAction","likeActionXsHeader","dislikeMentions","dislikeXsHeader","xiaohongshuWebIntimacySearch","intimacyDetail","xiaohongshuWebMsgRead","replyParams","xiaohongshuWebMsgReply","replyPath","replyXsHeader","xiaohongshuWebNoteFeed","feedParams","fatchFeed","xsCommon","xiaohongshuWebRelationAction","relationParams","relationActionRes","followMentions","followXsHeader","unfllowMentions","unfllowXsHeader","XhsWebSearchParamsSchema","createSearchId","xiaohongshuWebSearch","filterPath","filterParams","ttConfigDataSchema","xhsConfigDataSchema","wxConfigDataSchema","bjhConfigDataSchema","douyinConfigDataSchema","shipinhaoConfigDataSchema","BetaFlag","Action","shareVersion","actionVersion"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;QACA,IAAIA,iBAAiB;YACnB;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;SACD;QAED,IAAIC,aAAa,CAAC;QAClBA,WAAW,CAAC,GAAG,SAAUC,CAAC;YACxB,OAAO,OAAOA;QAChB;QAEA,SAASC,kBAAkBD,CAAC;YAC1B,IAAIE,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI,KACJC,IAAI;gBACJ,OAAO,SAAU7C,CAAC,EAAEE,CAAC;oBACnB,OAAOF,IAAIE;gBACb;gBACA,OAAO,SAAUF,CAAC,EAAEE,CAAC;oBACnB,OAAOF,MAAME;gBACf;gBACA,OAAO,SAAUF,CAAC,EAAEE,CAAC;oBACnB,OAAOF,IAAIE;gBACb;gBACA,OAAO,SAAUF,CAAC,EAAEE,CAAC;oBACnB,OAAOF,IAAIE;gBACb;gBACA,O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CAAC,CAACE,EAAE,CAACb,GAAG,MAAM,CAACW,CAAC,CAACE,EAAEZ,GAAG,CAACC,GAAG,CAACV,CAAC,CAACsB,IAAI,EAAE,EAAE,IAAI,SAASH,CAAC,CAACE,EAAE,CAACV,GAAG,MAAM,CAACX,CAAC,CAACmB,CAAC,CAACE,EAAE,MAAM,CAACT,GAAG,CAACU,GAAG,GAAG,EAAE,MACjJF,CAAC,CAACC,EAAER,GAAG,IAAI,CAACM,CAAC,CAACE,EAAEP,GAAGC,GAAG,CAACgD,yBAAyB3D;YACpD,OAAOgB,CAAC,CAACC,EAAE,CAACL,GAAG,CAACC,GAAG,CAAC;QACtB;QAEA,SAAS+C,UAAUhE,CAAC,EAAEE,CAAC;YACrB,IAAIC,IAAI;gBACN;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBAC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C,GAAG;YAClBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,EAAE;YACjBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,GAAG;YAClBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,EAAE;YACjBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,GAAG;YAClBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,EAAE;YACjBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,GAAG;YAClBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,GAAG;YAClBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,GAAG;YAClBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,GAAG;YAClBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,GAAG;YAClBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,EAAE;YACjBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,GAAG;YAClBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,GAAG;YAClBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,GAAG;YAClBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,GAAG;YAClBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,GAAG;YAClBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,GAAG;YAClBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,GAAG;YAClBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,EAAE;YACjBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,GAAG;YAClBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,GAAG;YAClBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,GAAG;YAClBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,GAAG;YAClBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,GAAG;YAClBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,GAAG;YAClBqB,IAAI,CAAC,GAAG,GAAGrB,GAAG,CAAC,EAAE;YACjBqB,IAAI,CAAC,GAAG,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K;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAI;gBAAI;gBAAI;gBAAI;gBAAI;gBAAI;gBAAI;gBAAI;gBAAI;gBAAI;gBAAI;gBAAI;gBAAI;gBAAI;gBAAI;aAAI;YAAC,MAAMC,YAAU,GAAG,CAACL,UAAU,MAAM,CAAC;YAAK,IAAIM,YAAU;YAAI,IAAI,IAAIC,YAAU,KAAIA,YAAUH,SAAS,CAACJ,UAAU,MAAM,EAACO,YAAY;gBAAC,IAAIC,YAAUJ,SAAS,CAACG,UAAU;gBAACD,YAAWA,CAAAA,YAAUE,YAAUF,YAAUD,SAAQ,IAAG,OAAM,CAACD,SAAS,CAACG,UAAU,EAACH,SAAS,CAACE,UAAU,CAAC,GAAC;oBAACF,SAAS,CAACE,UAAU;oBAACF,SAAS,CAACG,UAAU;iBAAC;YAAC;YAAC,IAAIE,YAAU,KAAIC,YAAU;YAAG,IAAI,IAAIC,YAAU,KAAIA,YAAUZ,SAAS,CAACC,UAAU,MAAM,EAACW,YAAY;gBAAC,IAAIC,YAAUb,SAAS,CAACC,UAAU,MAAM,CAACW,YAAWE,YAAUF,YAAU,KAAIG,YAAUV,SAAS,CAACS,UAAU;gBAAC,CAACT,SAAS,CAACS,UAAU,EAACT,SAAS,CAAEK,CAAAA,YAAUK,SAAQ,IAAG,MAAM,CAAC,GAAC;oBAACV,SAAS,CAAEK,CAAAA,YAAUK,SAAQ,IAAG,MAAM;oBAACV,SAAS,CAACS,UAAU;iBAAC;gBAAC,IAAIE,YAAUX,SAAS,CAAEA,CAAAA,SAAS,CAACS,UAAU,GAACC,SAAQ,IAAG,MAAM;gBAACL,YAAWA,CAAAA,YAAUK,SAAQ,IAAG,OAAMJ,aAAWra,MAAM,CAAC,eAAe,CAACua,YAAUG;YAAW;YAAC,OAAOd,YAAUS;QAAU;QAAC,SAASM,SAASC,SAAS;YAAE,MAAMC,YAAU9I;YAAY,IAAI+I,YAAUD,UAAU,OAAME,YAAU,IAAGC,YAAU;gBAAC;gBAAK;gBAAM;gBAAK;gBAAI;gBAAI;gBAAI;gBAAK;gBAAI;gBAAI;gBAAK;gBAAI;gBAAI;gBAAK;gBAAM;gBAAK;gBAAM;gBAAK;gBAAI;gBAAI;gBAAK;gBAAM;gBAAK;gBAAM;gBAAK;gBAAI;gBAAI;gBAAK;gBAAM;gBAAK;gBAAM;gBAAK;gBAAI;gBAAI;gBAAK;gBAAM;gBAAK;gBAAM;gBAAK;gBAAI;gBAAI;gBAAK;gBAAM;gBAAK;gBAAM;gBAAK;gBAAI;gBAAI;gBAAK;gBAAI;gBAAI;gBAAK;gBAAK;gBAAI;gBAAI;gBAAK;gBAAK;gBAAK;gBAAI;gBAAI;gBAAK;gBAAI;gBAAK;gBAAI;gBAAI;gBAAK;gBAAI;gBAAI;gBAAI;gBAAK;gBAAK;gBAAI;gBAAI;gBAAK;gBAAI;gBAAK;gBAAK;gBAAI;gBAAK;gBAAK;gBAAI;gBAAI;gBAAK;gBAAI;gBAAK;gBAAK;gBAAI;gBAAI;gBAAK;gBAAI;gBAAI;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAI;gBAAI;gBAAK;gBAAI;gBAAK;gBAAK;gBAAI;gBAAI;gBAAK;gBAAI;gBAAI;gBAAK;gBAAK;gBAAK;gBAAK;gBAAI;gBAAK;gBAAK;gBAAK;gBAAI;gBAAI;gBAAK;gBAAI;gBAAK;gBAAK;gBAAI;gBAAI;gBAAK;gBAAI;gBAAI;gBAAK;gBAAK;gBAAK;gBAAK;gBAAK;gBAAI;gBAAI;gBAAK;gBAAI;gBAAI;gBAAK;gBAAI;gBAAI;gBAAK;gBAAI;gBAAK;gBAAK;gBAAI;gBAAI;gBAAK;gBAAS;gBAAK;gBAAK;gBAAK;gBAAK;gBAAI;gBAAI;gBAAK;gBAAK;gBAAI;gBAAI;gBAAK;gBAAK;gBAAK;gBAAI;gBAAI;gBAAK;gBAAI;gBAAI;gBAAK;gBAAI;gBAAK;gBAAK;gBAAI;gBAAI;gBAAK;gBAAQ;gBAAK;gBAAK;gBAAI;gBAAK;gBAAI;gBAAI;gBAAK;gBAAK;gBAAI;gBAAI;gBAAK;gBAAK;gBAAK;gBAAI;gBAAI;gBAAK;gBAAI;gBAAI;gBAAK;gBAAI;gBAAK;gBAAK;gBAAI;gBAAI;gBAAK;gBAAM;gBAAK;gBAAK;gBAAI;gBAAK;gBAAI;gBAAI;gBAAK;gBAAK;gBAAI;gBAAI;gBAAK;gBAAK;gBAAK;gBAAI;gBAAI;gBAAK;gBAAI;gBAAI;gBAAK;gBAAI;gBAAK;gBAAK;gBAAI;gBAAI;gBAAK;gBAAK;gBAAK;gBAAI;gBAAI;gBAAK;gBAAK;gBAAI;gBAAI;gBAAK;gBAAK;gBAAK;gBAAM;gBAAK;gBAAI;gBAAI;gBAAI;gBAAK;gBAAK;gBAAI;gBAAI;gBAAI;gBAAK;gBAAI;gBAAK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","debug_id":"309d0c4f-ece2-5152-b000-0390cb565a64"}