优惠券小助手——自动显示京东(jd.com)、淘宝(taobao.com)、天猫(tmall.com)、天猫国际(tmall.hk)、唯品会(vip.com)、京东国际(jd.hk)优惠券,简洁易用!

最新简洁易用的京东(jd.com)、淘宝(taobao.com)、天猫(tmall.com)、唯品会(vip.com)优惠券小助手,自动显示隐藏优惠券,支持各大电商平台,包括京东(jd.com)、淘宝(taobao.com)、天猫(tmall.com)、聚划算、天猫超市、天猫国际(tmall.hk)、京东国际(jd.hk)、京东图书、京东电子书、京东工业品、京东大药房(yiyaojd.com)、唯品会(vip.com),让您购物省心更省钱!

目前为 2024-09-22 提交的版本。查看 最新版本

// ==UserScript==
// @name         优惠券小助手——自动显示京东(jd.com)、淘宝(taobao.com)、天猫(tmall.com)、天猫国际(tmall.hk)、唯品会(vip.com)、京东国际(jd.hk)优惠券,简洁易用!
// @name:zh     优惠券小助手——自动显示京东(jd.com)、淘宝(taobao.com)、天猫(tmall.com)、天猫国际(tmall.hk)、唯品会(vip.com)、京东国际(jd.hk)优惠券,简洁易用!
// @name:zh-TW  優惠券小助手——自動顯示京東(jd.com)、淘寶(taobao.com)、天貓(tmall.com)、天貓國際(tmall.hk)、唯品會(vip.com)、京東國際(jd.hk)優惠券,簡潔易用!
// @namespace    yiyezhiqiu
// @version      1.0.12
// @description  最新简洁易用的京东(jd.com)、淘宝(taobao.com)、天猫(tmall.com)、唯品会(vip.com)优惠券小助手,自动显示隐藏优惠券,支持各大电商平台,包括京东(jd.com)、淘宝(taobao.com)、天猫(tmall.com)、聚划算、天猫超市、天猫国际(tmall.hk)、京东国际(jd.hk)、京东图书、京东电子书、京东工业品、京东大药房(yiyaojd.com)、唯品会(vip.com),让您购物省心更省钱!
// @description:zh  最新简洁易用的京东(jd.com)、淘宝(taobao.com)、天猫(tmall.com)、唯品会(vip.com)优惠券小助手,自动显示隐藏优惠券,支持各大电商平台,包括京东(jd.com)、淘宝(taobao.com)、天猫(tmall.com)、聚划算、天猫超市、天猫国际(tmall.hk)、京东国际(jd.hk)、京东图书、京东电子书、京东工业品、京东大药房(yiyaojd.com)、唯品会(vip.com),让您购物省心更省钱!
// @description:zh-TW  最新簡潔易用的京東(jd.com)、淘寶(taobao.com)、天貓(tmall.com)、唯品會(vip.com)優惠券小助手,自動顯示隱藏優惠券,支持各大電商平台,包括京東(jd.com)、淘寶(taobao.com)、天貓(tmall.com)、聚划算、天貓超市、天貓國際(tmall.hk)、京東國際(jd.hk)、京東圖書、京東電子書、京東工業品、京東大藥房(yiyaojd.com)、唯品會(vip.com),讓您購物省心更省錢!
// @author       一叶知秋
// @homepage     https://coupon.jasonzk.com
// @license      None
// @require      https://cdn.jsdelivr.net/npm/[email protected]/crypto-js.min.js
// @match        *://*.taobao.com/*
// @match        *://*.tmall.com/*
// @match        *://*.tmall.hk/*
// @match        *://*.detail.tmall.com/*
// @match        *://*.liangxinyao.com/*
// @match        *://*.jd.com/*
// @match        *://*.jd.hk/*
// @match        *://*.yiyaojd.com/*
// @match        *://*.vip.com/*
// @match        *://*.vipglobal.hk/*
// @exclude      *://login.taobao.com/*
// @exclude      *://uland.taobao.com/*
// @exclude      *://login.tmall.com/*
// @exclude      *://pages.tmall.com/*
// @exclude      *://wq.jd.com/*
// @exclude      *://cart.jd.com/*
// @exclude      *://trade.jd.com/*
// @exclude      *://payc.m.jd.com/*
// @icon         data:image/png;base64,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
// @antifeature  referral-link
// @noframes
// @grant        unsafeWindow
// @grant        GM_openInTab
// @grant        GM_info
// @grant        window.close
// ==/UserScript==

(function() {
    'use strict';

var __defProp = Object.defineProperty;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
(function(CryptoJS2) {
  "use strict";
  var __vite_style__ = document.createElement("style");
  __vite_style__.textContent = "*,\n::before,\n::after{\n  box-sizing:border-box;\n  border-width:0;\n  border-style:solid;\n  border-color:#e5e7eb;\n}\n\n::before,\n::after{\n  --tw-content:'';\n}\n\nbutton,\ninput{\n  font-family:inherit;\n  font-feature-settings:inherit;\n  font-variation-settings:inherit;\n  font-size:100%;\n  font-weight:inherit;\n  line-height:inherit;\n  letter-spacing:inherit;\n  color:inherit;\n  margin:0;\n  padding:0;\n}\n\nbutton{\n  text-transform:none;\n}\n\nbutton,\ninput:where([type='button']),\ninput:where([type='submit']){\n  -webkit-appearance:button;\n  background-color:transparent;\n  background-image:none;\n}\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button{\n  height:auto;\n}\n\n::-webkit-search-decoration{\n  -webkit-appearance:none;\n}\n\n::-webkit-file-upload-button{\n  -webkit-appearance:button;\n  font:inherit;\n}\n\ninput::-moz-placeholder{\n  opacity:1;\n  color:#9ca3af;\n}\n\ninput::placeholder{\n  opacity:1;\n  color:#9ca3af;\n}\n\nbutton{\n  cursor:pointer;\n}\n\n*, ::before, ::after{\n  --tw-border-spacing-x:0;\n  --tw-border-spacing-y:0;\n  --tw-translate-x:0;\n  --tw-translate-y:0;\n  --tw-rotate:0;\n  --tw-skew-x:0;\n  --tw-skew-y:0;\n  --tw-scale-x:1;\n  --tw-scale-y:1;\n  --tw-pan-x:;\n  --tw-pan-y:;\n  --tw-pinch-zoom:;\n  --tw-scroll-snap-strictness:proximity;\n  --tw-gradient-from-position:;\n  --tw-gradient-via-position:;\n  --tw-gradient-to-position:;\n  --tw-ordinal:;\n  --tw-slashed-zero:;\n  --tw-numeric-figure:;\n  --tw-numeric-spacing:;\n  --tw-numeric-fraction:;\n  --tw-ring-inset:;\n  --tw-ring-offset-width:0px;\n  --tw-ring-offset-color:#fff;\n  --tw-ring-color:rgb(59 130 246 / 0.5);\n  --tw-ring-offset-shadow:0 0 #0000;\n  --tw-ring-shadow:0 0 #0000;\n  --tw-shadow:0 0 #0000;\n  --tw-shadow-colored:0 0 #0000;\n  --tw-blur:;\n  --tw-brightness:;\n  --tw-contrast:;\n  --tw-grayscale:;\n  --tw-hue-rotate:;\n  --tw-invert:;\n  --tw-saturate:;\n  --tw-sepia:;\n  --tw-drop-shadow:;\n  --tw-backdrop-blur:;\n  --tw-backdrop-brightness:;\n  --tw-backdrop-contrast:;\n  --tw-backdrop-grayscale:;\n  --tw-backdrop-hue-rotate:;\n  --tw-backdrop-invert:;\n  --tw-backdrop-opacity:;\n  --tw-backdrop-saturate:;\n  --tw-backdrop-sepia:;\n  --tw-contain-size:;\n  --tw-contain-layout:;\n  --tw-contain-paint:;\n  --tw-contain-style:;\n}\n\n::backdrop{\n  --tw-border-spacing-x:0;\n  --tw-border-spacing-y:0;\n  --tw-translate-x:0;\n  --tw-translate-y:0;\n  --tw-rotate:0;\n  --tw-skew-x:0;\n  --tw-skew-y:0;\n  --tw-scale-x:1;\n  --tw-scale-y:1;\n  --tw-pan-x:;\n  --tw-pan-y:;\n  --tw-pinch-zoom:;\n  --tw-scroll-snap-strictness:proximity;\n  --tw-gradient-from-position:;\n  --tw-gradient-via-position:;\n  --tw-gradient-to-position:;\n  --tw-ordinal:;\n  --tw-slashed-zero:;\n  --tw-numeric-figure:;\n  --tw-numeric-spacing:;\n  --tw-numeric-fraction:;\n  --tw-ring-inset:;\n  --tw-ring-offset-width:0px;\n  --tw-ring-offset-color:#fff;\n  --tw-ring-color:rgb(59 130 246 / 0.5);\n  --tw-ring-offset-shadow:0 0 #0000;\n  --tw-ring-shadow:0 0 #0000;\n  --tw-shadow:0 0 #0000;\n  --tw-shadow-colored:0 0 #0000;\n  --tw-blur:;\n  --tw-brightness:;\n  --tw-contrast:;\n  --tw-grayscale:;\n  --tw-hue-rotate:;\n  --tw-invert:;\n  --tw-saturate:;\n  --tw-sepia:;\n  --tw-drop-shadow:;\n  --tw-backdrop-blur:;\n  --tw-backdrop-brightness:;\n  --tw-backdrop-contrast:;\n  --tw-backdrop-grayscale:;\n  --tw-backdrop-hue-rotate:;\n  --tw-backdrop-invert:;\n  --tw-backdrop-opacity:;\n  --tw-backdrop-saturate:;\n  --tw-backdrop-sepia:;\n  --tw-contain-size:;\n  --tw-contain-layout:;\n  --tw-contain-paint:;\n  --tw-contain-style:;\n}\n.cp-absolute{\n  position:absolute;\n}\n.cp-relative{\n  position:relative;\n}\n.cp-z-20{\n  z-index:20;\n}\n.cp-mb-\\[12px\\]{\n  margin-bottom:12px;\n}\n.cp-flex{\n  display:flex;\n}\n.cp-h-\\[25px\\]{\n  height:25px;\n}\n.cp-w-\\[120px\\]{\n  width:120px;\n}\n.cp-w-\\[25px\\]{\n  width:25px;\n}\n.cp-w-full{\n  width:100%;\n}\n.cp-flex-none{\n  flex:none;\n}\n.cp-flex-grow{\n  flex-grow:1;\n}\n.cp-cursor-pointer{\n  cursor:pointer;\n}\n.cp-flex-col{\n  flex-direction:column;\n}\n.cp-gap-\\[4px\\]{\n  gap:4px;\n}\n.cp-rounded{\n  border-radius:0.25rem;\n}\n.cp-rounded-full{\n  border-radius:9999px;\n}\n.cp-rounded-lg{\n  border-radius:0.5rem;\n}\n.cp-rounded-md{\n  border-radius:0.375rem;\n}\n.cp-rounded-e-lg{\n  border-start-end-radius:0.5rem;\n  border-end-end-radius:0.5rem;\n}\n.cp-border{\n  border-width:1px;\n}\n.cp-border-l-4{\n  border-left-width:4px;\n}\n.cp-border-r-2{\n  border-right-width:2px;\n}\n.cp-border-dotted{\n  border-style:dotted;\n}\n.cp-border-gray-300{\n  --tw-border-opacity:1;\n  border-color:rgb(209 213 219 / var(--tw-border-opacity));\n}\n.cp-border-l-red-600{\n  --tw-border-opacity:1;\n  border-left-color:rgb(220 38 38 / var(--tw-border-opacity));\n}\n.cp-bg-blue-400{\n  --tw-bg-opacity:1;\n  background-color:rgb(96 165 250 / var(--tw-bg-opacity));\n}\n.cp-bg-gray-50{\n  --tw-bg-opacity:1;\n  background-color:rgb(249 250 251 / var(--tw-bg-opacity));\n}\n.cp-bg-slate-100{\n  --tw-bg-opacity:1;\n  background-color:rgb(241 245 249 / var(--tw-bg-opacity));\n}\n.cp-bg-white{\n  --tw-bg-opacity:1;\n  background-color:rgb(255 255 255 / var(--tw-bg-opacity));\n}\n.cp-p-4{\n  padding:1rem;\n}\n.cp-p-\\[12px\\]{\n  padding:12px;\n}\n.cp-py-\\[10px\\]{\n  padding-top:10px;\n  padding-bottom:10px;\n}\n.cp-pl-4{\n  padding-left:1rem;\n}\n.cp-pl-\\[10px\\]{\n  padding-left:10px;\n}\n.cp-pr-4{\n  padding-right:1rem;\n}\n.cp-pr-\\[40px\\]{\n  padding-right:40px;\n}\n.cp-text-center{\n  text-align:center;\n}\n.cp-text-3xl{\n  font-size:1.875rem;\n  line-height:2.25rem;\n}\n.cp-text-lg{\n  font-size:1.125rem;\n  line-height:1.75rem;\n}\n.cp-text-sm{\n  font-size:0.875rem;\n  line-height:1.25rem;\n}\n.cp-font-bold{\n  font-weight:700;\n}\n.cp-font-semibold{\n  font-weight:600;\n}\n.cp-text-gray-500{\n  --tw-text-opacity:1;\n  color:rgb(107 114 128 / var(--tw-text-opacity));\n}\n.cp-text-gray-900{\n  --tw-text-opacity:1;\n  color:rgb(17 24 39 / var(--tw-text-opacity));\n}\n.cp-text-red-500{\n  --tw-text-opacity:1;\n  color:rgb(239 68 68 / var(--tw-text-opacity));\n}\n*,\n::before,\n::after{\n  box-sizing:initial;\n}\n";
  document.head.appendChild(__vite_style__);
  function noop() {
  }
  function run(fn) {
    return fn();
  }
  function blank_object() {
    return /* @__PURE__ */ Object.create(null);
  }
  function run_all(fns) {
    fns.forEach(run);
  }
  function is_function(thing) {
    return typeof thing === "function";
  }
  function safe_not_equal(a, b) {
    return a != a ? b == b : a !== b || a && typeof a === "object" || typeof a === "function";
  }
  function is_empty(obj) {
    return Object.keys(obj).length === 0;
  }
  function subscribe(store, ...callbacks) {
    if (store == null) {
      for (const callback of callbacks) {
        callback(void 0);
      }
      return noop;
    }
    const unsub = store.subscribe(...callbacks);
    return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;
  }
  function component_subscribe(component, store, callback) {
    component.$$.on_destroy.push(subscribe(store, callback));
  }
  function append(target, node) {
    target.appendChild(node);
  }
  function insert(target, node, anchor) {
    target.insertBefore(node, anchor || null);
  }
  function detach(node) {
    if (node.parentNode) {
      node.parentNode.removeChild(node);
    }
  }
  function element(name) {
    return document.createElement(name);
  }
  function text(data) {
    return document.createTextNode(data);
  }
  function space() {
    return text(" ");
  }
  function empty() {
    return text("");
  }
  function listen(node, event, handler, options) {
    node.addEventListener(event, handler, options);
    return () => node.removeEventListener(event, handler, options);
  }
  function attr(node, attribute, value) {
    if (value == null) node.removeAttribute(attribute);
    else if (node.getAttribute(attribute) !== value) node.setAttribute(attribute, value);
  }
  function children(element2) {
    return Array.from(element2.childNodes);
  }
  function set_data(text2, data) {
    data = "" + data;
    if (text2.data === data) return;
    text2.data = /** @type {string} */
    data;
  }
  function set_style(node, key, value, important) {
    if (value == null) {
      node.style.removeProperty(key);
    } else {
      node.style.setProperty(key, value, "");
    }
  }
  let current_component;
  function set_current_component(component) {
    current_component = component;
  }
  const dirty_components = [];
  const binding_callbacks = [];
  let render_callbacks = [];
  const flush_callbacks = [];
  const resolved_promise = /* @__PURE__ */ Promise.resolve();
  let update_scheduled = false;
  function schedule_update() {
    if (!update_scheduled) {
      update_scheduled = true;
      resolved_promise.then(flush);
    }
  }
  function add_render_callback(fn) {
    render_callbacks.push(fn);
  }
  const seen_callbacks = /* @__PURE__ */ new Set();
  let flushidx = 0;
  function flush() {
    if (flushidx !== 0) {
      return;
    }
    const saved_component = current_component;
    do {
      try {
        while (flushidx < dirty_components.length) {
          const component = dirty_components[flushidx];
          flushidx++;
          set_current_component(component);
          update(component.$$);
        }
      } catch (e) {
        dirty_components.length = 0;
        flushidx = 0;
        throw e;
      }
      set_current_component(null);
      dirty_components.length = 0;
      flushidx = 0;
      while (binding_callbacks.length) binding_callbacks.pop()();
      for (let i = 0; i < render_callbacks.length; i += 1) {
        const callback = render_callbacks[i];
        if (!seen_callbacks.has(callback)) {
          seen_callbacks.add(callback);
          callback();
        }
      }
      render_callbacks.length = 0;
    } while (dirty_components.length);
    while (flush_callbacks.length) {
      flush_callbacks.pop()();
    }
    update_scheduled = false;
    seen_callbacks.clear();
    set_current_component(saved_component);
  }
  function update($$) {
    if ($$.fragment !== null) {
      $$.update();
      run_all($$.before_update);
      const dirty = $$.dirty;
      $$.dirty = [-1];
      $$.fragment && $$.fragment.p($$.ctx, dirty);
      $$.after_update.forEach(add_render_callback);
    }
  }
  function flush_render_callbacks(fns) {
    const filtered = [];
    const targets = [];
    render_callbacks.forEach((c) => fns.indexOf(c) === -1 ? filtered.push(c) : targets.push(c));
    targets.forEach((c) => c());
    render_callbacks = filtered;
  }
  const outroing = /* @__PURE__ */ new Set();
  let outros;
  function group_outros() {
    outros = {
      r: 0,
      c: [],
      p: outros
      // parent group
    };
  }
  function check_outros() {
    if (!outros.r) {
      run_all(outros.c);
    }
    outros = outros.p;
  }
  function transition_in(block, local) {
    if (block && block.i) {
      outroing.delete(block);
      block.i(local);
    }
  }
  function transition_out(block, local, detach2, callback) {
    if (block && block.o) {
      if (outroing.has(block)) return;
      outroing.add(block);
      outros.c.push(() => {
        outroing.delete(block);
        if (callback) {
          if (detach2) block.d(1);
          callback();
        }
      });
      block.o(local);
    } else if (callback) {
      callback();
    }
  }
  function create_component(block) {
    block && block.c();
  }
  function mount_component(component, target, anchor) {
    const { fragment, after_update } = component.$$;
    fragment && fragment.m(target, anchor);
    add_render_callback(() => {
      const new_on_destroy = component.$$.on_mount.map(run).filter(is_function);
      if (component.$$.on_destroy) {
        component.$$.on_destroy.push(...new_on_destroy);
      } else {
        run_all(new_on_destroy);
      }
      component.$$.on_mount = [];
    });
    after_update.forEach(add_render_callback);
  }
  function destroy_component(component, detaching) {
    const $$ = component.$$;
    if ($$.fragment !== null) {
      flush_render_callbacks($$.after_update);
      run_all($$.on_destroy);
      $$.fragment && $$.fragment.d(detaching);
      $$.on_destroy = $$.fragment = null;
      $$.ctx = [];
    }
  }
  function make_dirty(component, i) {
    if (component.$$.dirty[0] === -1) {
      dirty_components.push(component);
      schedule_update();
      component.$$.dirty.fill(0);
    }
    component.$$.dirty[i / 31 | 0] |= 1 << i % 31;
  }
  function init(component, options, instance2, create_fragment2, not_equal, props, append_styles = null, dirty = [-1]) {
    const parent_component = current_component;
    set_current_component(component);
    const $$ = component.$$ = {
      fragment: null,
      ctx: [],
      // state
      props,
      update: noop,
      not_equal,
      bound: blank_object(),
      // lifecycle
      on_mount: [],
      on_destroy: [],
      on_disconnect: [],
      before_update: [],
      after_update: [],
      context: new Map(options.context || (parent_component ? parent_component.$$.context : [])),
      // everything else
      callbacks: blank_object(),
      dirty,
      skip_bound: false,
      root: options.target || parent_component.$$.root
    };
    append_styles && append_styles($$.root);
    let ready = false;
    $$.ctx = instance2 ? instance2(component, options.props || {}, (i, ret, ...rest) => {
      const value = rest.length ? rest[0] : ret;
      if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) {
        if (!$$.skip_bound && $$.bound[i]) $$.bound[i](value);
        if (ready) make_dirty(component, i);
      }
      return ret;
    }) : [];
    $$.update();
    ready = true;
    run_all($$.before_update);
    $$.fragment = create_fragment2 ? create_fragment2($$.ctx) : false;
    if (options.target) {
      if (options.hydrate) {
        const nodes = children(options.target);
        $$.fragment && $$.fragment.l(nodes);
        nodes.forEach(detach);
      } else {
        $$.fragment && $$.fragment.c();
      }
      if (options.intro) transition_in(component.$$.fragment);
      mount_component(component, options.target, options.anchor);
      flush();
    }
    set_current_component(parent_component);
  }
  class SvelteComponent {
    constructor() {
      /**
       * ### PRIVATE API
       *
       * Do not use, may change at any time
       *
       * @type {any}
       */
      __publicField(this, "$$");
      /**
       * ### PRIVATE API
       *
       * Do not use, may change at any time
       *
       * @type {any}
       */
      __publicField(this, "$$set");
    }
    /** @returns {void} */
    $destroy() {
      destroy_component(this, 1);
      this.$destroy = noop;
    }
    /**
     * @template {Extract<keyof Events, string>} K
     * @param {K} type
     * @param {((e: Events[K]) => void) | null | undefined} callback
     * @returns {() => void}
     */
    $on(type, callback) {
      if (!is_function(callback)) {
        return noop;
      }
      const callbacks = this.$$.callbacks[type] || (this.$$.callbacks[type] = []);
      callbacks.push(callback);
      return () => {
        const index = callbacks.indexOf(callback);
        if (index !== -1) callbacks.splice(index, 1);
      };
    }
    /**
     * @param {Partial<Props>} props
     * @returns {void}
     */
    $set(props) {
      if (this.$$set && !is_empty(props)) {
        this.$$.skip_bound = true;
        this.$$set(props);
        this.$$.skip_bound = false;
      }
    }
  }
  const PUBLIC_VERSION = "4";
  if (typeof window !== "undefined")
    (window.__svelte || (window.__svelte = { v: /* @__PURE__ */ new Set() })).v.add(PUBLIC_VERSION);
  function create_if_block_1$1(ctx) {
    let div;
    let t0;
    let t1;
    return {
      c() {
        div = element("div");
        t0 = text("剩余:");
        t1 = text(
          /*left*/
          ctx[3]
        );
        attr(div, "class", "cp-text-md");
      },
      m(target, anchor) {
        insert(target, div, anchor);
        append(div, t0);
        append(div, t1);
      },
      p(ctx2, dirty) {
        if (dirty & /*left*/
        8) set_data(
          t1,
          /*left*/
          ctx2[3]
        );
      },
      d(detaching) {
        if (detaching) {
          detach(div);
        }
      }
    };
  }
  function create_if_block$2(ctx) {
    let div;
    let t0;
    let t1;
    return {
      c() {
        div = element("div");
        t0 = text("有效期至:");
        t1 = text(
          /*date*/
          ctx[2]
        );
        attr(div, "class", "cp-text-md");
      },
      m(target, anchor) {
        insert(target, div, anchor);
        append(div, t0);
        append(div, t1);
      },
      p(ctx2, dirty) {
        if (dirty & /*date*/
        4) set_data(
          t1,
          /*date*/
          ctx2[2]
        );
      },
      d(detaching) {
        if (detaching) {
          detach(div);
        }
      }
    };
  }
  function create_fragment$3(ctx) {
    let div7;
    let div4;
    let div0;
    let t0;
    let div1;
    let t1;
    let div2;
    let t2;
    let t3;
    let t4;
    let div3;
    let t5;
    let t6;
    let div6;
    let div5;
    let t7;
    let t8;
    let t9;
    let t10;
    let mounted2;
    let dispose;
    let if_block0 = (
      /*left*/
      ctx[3] != null && /*left*/
      ctx[3] > 0 && create_if_block_1$1(ctx)
    );
    let if_block1 = (
      /*date*/
      ctx[2] && /*date*/
      ctx[2] != "" && create_if_block$2(ctx)
    );
    return {
      c() {
        div7 = element("div");
        div4 = element("div");
        div0 = element("div");
        t0 = space();
        div1 = element("div");
        t1 = space();
        div2 = element("div");
        t2 = text("¥");
        t3 = text(
          /*amount*/
          ctx[0]
        );
        t4 = space();
        div3 = element("div");
        t5 = text(
          /*condition*/
          ctx[1]
        );
        t6 = space();
        div6 = element("div");
        div5 = element("div");
        t7 = text(
          /*amount*/
          ctx[0]
        );
        t8 = text("元优惠券");
        t9 = space();
        if (if_block0) if_block0.c();
        t10 = space();
        if (if_block1) if_block1.c();
        attr(div0, "class", "cp-absolute cp-h-[25px] cp-w-[25px] cp-rounded-full cp-border cp-bg-slate-100");
        set_style(div0, "border-bottom", "transparent");
        set_style(div0, "border-right", "transparent");
        set_style(div0, "transform", "rotate(-135deg)");
        set_style(div0, "right", "-12.5px");
        set_style(div0, "top", "-25px");
        attr(div1, "class", "cp-absolute cp-h-[25px] cp-w-[25px] cp-rounded-full cp-border cp-bg-slate-100");
        set_style(div1, "border-bottom", "transparent");
        set_style(div1, "border-right", "transparent");
        set_style(div1, "transform", "rotate(45deg)");
        set_style(div1, "right", "-12.5px");
        set_style(div1, "bottom", "-25px");
        attr(div2, "class", "cp-text-3xl cp-font-bold cp-text-red-500");
        attr(div3, "class", "cp-text-gray-500");
        attr(div4, "class", "cp-relative cp-w-[120px] cp-flex-none cp-border-r-2 cp-border-dotted cp-pr-4 cp-text-center");
        attr(div5, "class", "cp-text-lg cp-font-semibold");
        attr(div6, "class", "cp-flex cp-flex-grow cp-flex-col cp-gap-[4px] cp-pl-4");
        attr(div7, "class", "cp-flex cp-cursor-pointer cp-rounded-lg cp-border cp-border-l-4 cp-border-l-red-600 cp-bg-white cp-p-4");
      },
      m(target, anchor) {
        insert(target, div7, anchor);
        append(div7, div4);
        append(div4, div0);
        append(div4, t0);
        append(div4, div1);
        append(div4, t1);
        append(div4, div2);
        append(div2, t2);
        append(div2, t3);
        append(div4, t4);
        append(div4, div3);
        append(div3, t5);
        append(div7, t6);
        append(div7, div6);
        append(div6, div5);
        append(div5, t7);
        append(div5, t8);
        append(div6, t9);
        if (if_block0) if_block0.m(div6, null);
        append(div6, t10);
        if (if_block1) if_block1.m(div6, null);
        if (!mounted2) {
          dispose = listen(
            div7,
            "click",
            /*handleClick*/
            ctx[4]
          );
          mounted2 = true;
        }
      },
      p(ctx2, [dirty]) {
        if (dirty & /*amount*/
        1) set_data(
          t3,
          /*amount*/
          ctx2[0]
        );
        if (dirty & /*condition*/
        2) set_data(
          t5,
          /*condition*/
          ctx2[1]
        );
        if (dirty & /*amount*/
        1) set_data(
          t7,
          /*amount*/
          ctx2[0]
        );
        if (
          /*left*/
          ctx2[3] != null && /*left*/
          ctx2[3] > 0
        ) {
          if (if_block0) {
            if_block0.p(ctx2, dirty);
          } else {
            if_block0 = create_if_block_1$1(ctx2);
            if_block0.c();
            if_block0.m(div6, t10);
          }
        } else if (if_block0) {
          if_block0.d(1);
          if_block0 = null;
        }
        if (
          /*date*/
          ctx2[2] && /*date*/
          ctx2[2] != ""
        ) {
          if (if_block1) {
            if_block1.p(ctx2, dirty);
          } else {
            if_block1 = create_if_block$2(ctx2);
            if_block1.c();
            if_block1.m(div6, null);
          }
        } else if (if_block1) {
          if_block1.d(1);
          if_block1 = null;
        }
      },
      i: noop,
      o: noop,
      d(detaching) {
        if (detaching) {
          detach(div7);
        }
        if (if_block0) if_block0.d();
        if (if_block1) if_block1.d();
        mounted2 = false;
        dispose();
      }
    };
  }
  function instance$2($$self, $$props, $$invalidate) {
    let { amount = 5 } = $$props;
    let { condition = "满100可用" } = $$props;
    let { date = "" } = $$props;
    let { url = "" } = $$props;
    let { left = 0 } = $$props;
    const handleClick = () => {
      if (url) {
        if (window.GM_openInTab) {
          GM_openInTab(url, { active: true });
          window.close();
        }
      }
    };
    $$self.$$set = ($$props2) => {
      if ("amount" in $$props2) $$invalidate(0, amount = $$props2.amount);
      if ("condition" in $$props2) $$invalidate(1, condition = $$props2.condition);
      if ("date" in $$props2) $$invalidate(2, date = $$props2.date);
      if ("url" in $$props2) $$invalidate(5, url = $$props2.url);
      if ("left" in $$props2) $$invalidate(3, left = $$props2.left);
    };
    return [amount, condition, date, left, handleClick, url];
  }
  class Coupon extends SvelteComponent {
    constructor(options) {
      super();
      init(this, options, instance$2, create_fragment$3, safe_not_equal, {
        amount: 0,
        condition: 1,
        date: 2,
        url: 5,
        left: 3
      });
    }
  }
  const subscriber_queue = [];
  function writable(value, start = noop) {
    let stop;
    const subscribers = /* @__PURE__ */ new Set();
    function set(new_value) {
      if (safe_not_equal(value, new_value)) {
        value = new_value;
        if (stop) {
          const run_queue = !subscriber_queue.length;
          for (const subscriber of subscribers) {
            subscriber[1]();
            subscriber_queue.push(subscriber, value);
          }
          if (run_queue) {
            for (let i = 0; i < subscriber_queue.length; i += 2) {
              subscriber_queue[i][0](subscriber_queue[i + 1]);
            }
            subscriber_queue.length = 0;
          }
        }
      }
    }
    function update2(fn) {
      set(fn(value));
    }
    function subscribe2(run2, invalidate = noop) {
      const subscriber = [run2, invalidate];
      subscribers.add(subscriber);
      if (subscribers.size === 1) {
        stop = start(set, update2) || noop;
      }
      run2(value);
      return () => {
        subscribers.delete(subscriber);
        if (subscribers.size === 0 && stop) {
          stop();
          stop = null;
        }
      };
    }
    return { set, update: update2, subscribe: subscribe2 };
  }
  function createCoupon() {
    const { subscribe: subscribe2, set, update: update2 } = writable(null);
    return {
      subscribe: subscribe2,
      updateCoupon: (data) => update2(() => data)
    };
  }
  const coupon = createCoupon();
  var UrlType = /* @__PURE__ */ ((UrlType2) => {
    UrlType2["Tmall"] = "tmall";
    UrlType2["YYTmall"] = "liangxinyao";
    UrlType2["Taobao"] = "taobao";
    UrlType2["JD"] = "jd";
    UrlType2["Vip"] = "vip";
    return UrlType2;
  })(UrlType || {});
  var Platform = /* @__PURE__ */ ((Platform2) => {
    Platform2[Platform2["Taobao"] = 1] = "Taobao";
    Platform2[Platform2["JD"] = 2] = "JD";
    Platform2[Platform2["Pdd"] = 3] = "Pdd";
    Platform2[Platform2["Vip"] = 4] = "Vip";
    Platform2[Platform2["None"] = 5] = "None";
    return Platform2;
  })(Platform || {});
  const PluginName = "3";
  function createPlatform() {
    const { subscribe: subscribe2, set, update: update2 } = writable(null);
    return {
      subscribe: subscribe2,
      updatePlatform: (data) => update2(() => data)
    };
  }
  const platform = createPlatform();
  function create_else_block(ctx) {
    let span;
    return {
      c() {
        span = element("span");
        span.textContent = "暂无优惠券!";
        attr(span, "class", "cp-text-red-500");
      },
      m(target, anchor) {
        insert(target, span, anchor);
      },
      p: noop,
      d(detaching) {
        if (detaching) {
          detach(span);
        }
      }
    };
  }
  function create_if_block$1(ctx) {
    let if_block_anchor;
    let if_block = (
      /*$platform*/
      ctx[1] != Platform.JD && create_if_block_1()
    );
    return {
      c() {
        if (if_block) if_block.c();
        if_block_anchor = empty();
      },
      m(target, anchor) {
        if (if_block) if_block.m(target, anchor);
        insert(target, if_block_anchor, anchor);
      },
      p(ctx2, dirty) {
        if (
          /*$platform*/
          ctx2[1] != Platform.JD
        ) {
          if (if_block) ;
          else {
            if_block = create_if_block_1();
            if_block.c();
            if_block.m(if_block_anchor.parentNode, if_block_anchor);
          }
        } else if (if_block) {
          if_block.d(1);
          if_block = null;
        }
      },
      d(detaching) {
        if (detaching) {
          detach(if_block_anchor);
        }
        if (if_block) if_block.d(detaching);
      }
    };
  }
  function create_if_block_1(ctx) {
    let span;
    return {
      c() {
        span = element("span");
        span.textContent = "已领取优惠券!";
        attr(span, "class", "cp-text-red-500");
      },
      m(target, anchor) {
        insert(target, span, anchor);
      },
      d(detaching) {
        if (detaching) {
          detach(span);
        }
      }
    };
  }
  function create_fragment$2(ctx) {
    let div;
    function select_block_type(ctx2, dirty) {
      if (
        /*show*/
        ctx2[0]
      ) return create_if_block$1;
      return create_else_block;
    }
    let current_block_type = select_block_type(ctx);
    let if_block = current_block_type(ctx);
    return {
      c() {
        div = element("div");
        if_block.c();
        attr(div, "class", "cp-text-center");
      },
      m(target, anchor) {
        insert(target, div, anchor);
        if_block.m(div, null);
      },
      p(ctx2, [dirty]) {
        if (current_block_type === (current_block_type = select_block_type(ctx2)) && if_block) {
          if_block.p(ctx2, dirty);
        } else {
          if_block.d(1);
          if_block = current_block_type(ctx2);
          if (if_block) {
            if_block.c();
            if_block.m(div, null);
          }
        }
      },
      i: noop,
      o: noop,
      d(detaching) {
        if (detaching) {
          detach(div);
        }
        if_block.d();
      }
    };
  }
  function instance$1($$self, $$props, $$invalidate) {
    let $platform;
    component_subscribe($$self, platform, ($$value) => $$invalidate(1, $platform = $$value));
    let { show = false } = $$props;
    $$self.$$set = ($$props2) => {
      if ("show" in $$props2) $$invalidate(0, show = $$props2.show);
    };
    return [show, $platform];
  }
  class Desc extends SvelteComponent {
    constructor(options) {
      super();
      init(this, options, instance$1, create_fragment$2, safe_not_equal, { show: 0 });
    }
  }
  function create_if_block(ctx) {
    var _a, _b, _c, _d, _e;
    let div;
    let t;
    let coupon_1;
    let current;
    coupon_1 = new Coupon({
      props: {
        amount: (
          /*$coupon*/
          (_a = ctx[0]) == null ? void 0 : _a.amount
        ),
        condition: (
          /*$coupon*/
          (_b = ctx[0]) == null ? void 0 : _b.condition
        ),
        date: (
          /*$coupon*/
          (_c = ctx[0]) == null ? void 0 : _c.date
        ),
        url: (
          /*$coupon*/
          (_d = ctx[0]) == null ? void 0 : _d.short_url
        ),
        left: (
          /*$coupon*/
          (_e = ctx[0]) == null ? void 0 : _e.left
        )
      }
    });
    return {
      c() {
        div = element("div");
        t = space();
        create_component(coupon_1.$$.fragment);
        attr(div, "class", "cp-mb-[12px]");
      },
      m(target, anchor) {
        insert(target, div, anchor);
        insert(target, t, anchor);
        mount_component(coupon_1, target, anchor);
        current = true;
      },
      p(ctx2, dirty) {
        var _a2, _b2, _c2, _d2, _e2;
        const coupon_1_changes = {};
        if (dirty & /*$coupon*/
        1) coupon_1_changes.amount = /*$coupon*/
        (_a2 = ctx2[0]) == null ? void 0 : _a2.amount;
        if (dirty & /*$coupon*/
        1) coupon_1_changes.condition = /*$coupon*/
        (_b2 = ctx2[0]) == null ? void 0 : _b2.condition;
        if (dirty & /*$coupon*/
        1) coupon_1_changes.date = /*$coupon*/
        (_c2 = ctx2[0]) == null ? void 0 : _c2.date;
        if (dirty & /*$coupon*/
        1) coupon_1_changes.url = /*$coupon*/
        (_d2 = ctx2[0]) == null ? void 0 : _d2.short_url;
        if (dirty & /*$coupon*/
        1) coupon_1_changes.left = /*$coupon*/
        (_e2 = ctx2[0]) == null ? void 0 : _e2.left;
        coupon_1.$set(coupon_1_changes);
      },
      i(local) {
        if (current) return;
        transition_in(coupon_1.$$.fragment, local);
        current = true;
      },
      o(local) {
        transition_out(coupon_1.$$.fragment, local);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(div);
          detach(t);
        }
        destroy_component(coupon_1, detaching);
      }
    };
  }
  function create_fragment$1(ctx) {
    var _a, _b, _c, _d;
    let div;
    let desc;
    let t;
    let current;
    desc = new Desc({
      props: {
        show: (
          /*$coupon*/
          ((_a = ctx[0]) == null ? void 0 : _a.amount) != null && /*$coupon*/
          ((_b = ctx[0]) == null ? void 0 : _b.amount) > 0
        )
      }
    });
    let if_block = (
      /*$coupon*/
      ((_c = ctx[0]) == null ? void 0 : _c.amount) != null && /*$coupon*/
      ((_d = ctx[0]) == null ? void 0 : _d.amount) > 0 && create_if_block(ctx)
    );
    return {
      c() {
        div = element("div");
        create_component(desc.$$.fragment);
        t = space();
        if (if_block) if_block.c();
        attr(div, "class", "cp-mb-[12px] cp-rounded-md cp-bg-slate-100 cp-p-[12px]");
      },
      m(target, anchor) {
        insert(target, div, anchor);
        mount_component(desc, div, null);
        append(div, t);
        if (if_block) if_block.m(div, null);
        current = true;
      },
      p(ctx2, [dirty]) {
        var _a2, _b2, _c2, _d2;
        const desc_changes = {};
        if (dirty & /*$coupon*/
        1) desc_changes.show = /*$coupon*/
        ((_a2 = ctx2[0]) == null ? void 0 : _a2.amount) != null && /*$coupon*/
        ((_b2 = ctx2[0]) == null ? void 0 : _b2.amount) > 0;
        desc.$set(desc_changes);
        if (
          /*$coupon*/
          ((_c2 = ctx2[0]) == null ? void 0 : _c2.amount) != null && /*$coupon*/
          ((_d2 = ctx2[0]) == null ? void 0 : _d2.amount) > 0
        ) {
          if (if_block) {
            if_block.p(ctx2, dirty);
            if (dirty & /*$coupon*/
            1) {
              transition_in(if_block, 1);
            }
          } else {
            if_block = create_if_block(ctx2);
            if_block.c();
            transition_in(if_block, 1);
            if_block.m(div, null);
          }
        } else if (if_block) {
          group_outros();
          transition_out(if_block, 1, 1, () => {
            if_block = null;
          });
          check_outros();
        }
      },
      i(local) {
        if (current) return;
        transition_in(desc.$$.fragment, local);
        transition_in(if_block);
        current = true;
      },
      o(local) {
        transition_out(desc.$$.fragment, local);
        transition_out(if_block);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(div);
        }
        destroy_component(desc);
        if (if_block) if_block.d();
      }
    };
  }
  function instance($$self, $$props, $$invalidate) {
    let $coupon;
    component_subscribe($$self, coupon, ($$value) => $$invalidate(0, $coupon = $$value));
    return [$coupon];
  }
  class Container extends SvelteComponent {
    constructor(options) {
      super();
      init(this, options, instance, create_fragment$1, safe_not_equal, {});
    }
  }
  const baseUrl = "https://api2.jasonzk.com";
  const getPromoUrl = `${baseUrl}/compare/urlv2`;
  const getCouponUrl = `${baseUrl}/coupon/coupon`;
  const words = [
    "a",
    "b",
    "c",
    "d",
    "e",
    "f",
    "g",
    "h",
    "i",
    "j",
    "k",
    "l",
    "m",
    "n",
    "o",
    "p",
    "q",
    "r",
    "s",
    "t",
    "u",
    "v",
    "w",
    "x",
    "y",
    "z",
    "A",
    "B",
    "C",
    "D",
    "E",
    "F",
    "G",
    "H",
    "I",
    "J",
    "K",
    "L",
    "M",
    "N",
    "O",
    "P",
    "Q",
    "R",
    "S",
    "T",
    "U",
    "V",
    "W",
    "X",
    "Y",
    "Z",
    "-",
    ","
  ];
  function shuffleWords() {
    return words.sort(() => Math.random() - 0.5);
  }
  function getToken() {
    const words2 = shuffleWords();
    const index0 = getIndex(words2, "all", true);
    const index1 = getIndex(words2, "iance", true);
    const random = Math.floor(Math.random() * 2);
    const splits = [getIndex(words2, ","), getIndex(words2, "-")];
    const now = Date.now();
    const split = random == 0 ? "," : "-";
    const data = [
      split,
      index0,
      splits[random] + split,
      index1,
      splits[random] + split,
      now
    ];
    const key = "jason";
    const token = CryptoJS2.AES.encrypt(data.join(""), key).toString();
    const keyMap = getKeyMap(words2, now, split, key);
    return {
      token,
      keyMap
    };
  }
  function getKeyMap(words2, now, split, key) {
    const data = [split, words2, now];
    const keyMap = CryptoJS2.AES.encrypt(JSON.stringify(data), key).toString();
    return keyMap;
  }
  function getIndex(words2, keyword, needSplit = false) {
    const index = [];
    for (let i = 0; i < keyword.length; i++) {
      index.push(words2.indexOf(keyword[i]).toString());
      if (needSplit) {
        index.push("@");
      }
    }
    return index.join("");
  }
  async function get(url, data) {
    const params = new URLSearchParams(data ?? {});
    url = url + "?" + params.toString();
    const { token, keyMap } = getToken();
    const headers = {
      authorization: token,
      authhash: keyMap,
      plgn: PluginName
    };
    if (window.GM_info) {
      headers["plgv"] = GM_info.script.version;
    }
    const res = await fetch(url, {
      headers
    });
    const json = await res.json();
    if (json.code == 1003 && json.updateVersion && json.updateVersion.force) {
      window.GM_openInTab && GM_openInTab(json.updateVersion.addr, {
        active: true
      });
    }
    return json;
  }
  function create_fragment(ctx) {
    let main;
    let container;
    let t;
    let current;
    container = new Container({});
    let if_block = false;
    return {
      c() {
        main = element("main");
        create_component(container.$$.fragment);
        t = space();
      },
      m(target, anchor) {
        insert(target, main, anchor);
        mount_component(container, main, null);
        append(main, t);
        current = true;
      },
      p: noop,
      i(local) {
        if (current) return;
        transition_in(container.$$.fragment, local);
        transition_in(if_block);
        current = true;
      },
      o(local) {
        transition_out(container.$$.fragment, local);
        transition_out(if_block);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(main);
        }
        destroy_component(container);
      }
    };
  }
  class App extends SvelteComponent {
    constructor(options) {
      super();
      init(this, options, null, create_fragment, safe_not_equal, {});
    }
  }
  async function createTarget(target) {
    const div = document.createElement("div");
    return new Promise((resolve) => {
      let timer = 0;
      function addSibling() {
        let t = null;
        for (const item of target) {
          t = document.querySelector(item);
          if (t) {
            break;
          }
        }
        if (t) {
          t.after(div);
          clearTimeout(timer);
          resolve(div);
        } else {
          timer = setTimeout(addSibling, 100);
        }
      }
      timer = setTimeout(addSibling, 100);
    });
  }
  async function getTitle(p) {
    const pat = p ?? ensurePlatform();
    let title = "";
    switch (pat) {
      case Platform.Taobao:
        title = await getTbTitle();
        break;
      case Platform.JD:
        title = await getJdTitle();
        break;
      case Platform.Vip:
        title = await getVipTitle();
        break;
    }
    return {
      platform: pat,
      title
    };
  }
  function getTbTitle() {
    return new Promise((resolve) => {
      var _a;
      const title = (_a = document.querySelector("h1")) == null ? void 0 : _a.textContent;
      if (title) {
        resolve(title);
      } else {
        const observer = new MutationObserver(() => {
          var _a2;
          const title2 = (_a2 = document.querySelector("h1")) == null ? void 0 : _a2.textContent;
          if (title2) {
            observer.disconnect();
            resolve(title2);
          }
        });
        observer.observe(document.body, {
          childList: true,
          subtree: true
        });
      }
    });
  }
  function getJdTitle() {
    return new Promise((resolve) => {
      var _a;
      const title = (_a = document.querySelector(".sku-name")) == null ? void 0 : _a.textContent;
      if (title) {
        const rt = title.replace(/\s+/g, "");
        resolve(rt);
      } else {
        const observer = new MutationObserver(() => {
          var _a2;
          const title2 = (_a2 = document.querySelector(".sku-name")) == null ? void 0 : _a2.textContent;
          if (title2) {
            observer.disconnect();
            const rt = title2.replace(/\s+/g, "");
            resolve(rt);
          }
        });
        observer.observe(document.body, {
          childList: true,
          subtree: true
        });
      }
    });
  }
  function getVipTitle() {
    const isH5 = isMobile();
    const className = isH5 ? ".name_title_ll" : ".pib-title-detail";
    return new Promise((resolve) => {
      var _a;
      const title = (_a = document.querySelector(className)) == null ? void 0 : _a.textContent;
      if (title && title != "商家店铺") {
        resolve(title.replace("商家店铺", ""));
      } else {
        const observer = new MutationObserver(() => {
          var _a2;
          const title2 = (_a2 = document.querySelector(className)) == null ? void 0 : _a2.textContent;
          if (title2 && title2 != "商家店铺") {
            observer.disconnect();
            resolve(title2.replace("商家店铺", ""));
          }
        });
        observer.observe(document.body, {
          childList: true,
          subtree: true
        });
      }
    });
  }
  function ensurePlatform() {
    const url = window.location.host;
    let p = Platform.None;
    if (url.indexOf(UrlType.Taobao) != -1 || url.indexOf(UrlType.Tmall) != -1 || url.indexOf(UrlType.YYTmall) != -1) {
      platform.updatePlatform(Platform.Taobao);
      p = Platform.Taobao;
    } else if (url.indexOf(UrlType.JD) != -1) {
      platform.updatePlatform(Platform.JD);
      p = Platform.JD;
    } else if (url.indexOf(UrlType.Vip) != -1) {
      platform.updatePlatform(Platform.Vip);
      p = Platform.Vip;
    } else {
      platform.updatePlatform(Platform.None);
    }
    return p;
  }
  function checkCanRedirect(platform2, title) {
    const href = window.location.href;
    switch (platform2) {
      case Platform.Taobao:
        return href.indexOf("mm_117425171_2324550020_111391250310") == -1 && href.indexOf("mm_117425171_21428696_71990812") == -1 && href.indexOf("mm_117425171_33696257_277458675") == -1 && title != "天猫" && title != "淘宝网";
      case Platform.JD:
        return href.indexOf("2015895618") == -1 || href.indexOf(".jasonzk.com") > -1;
      case Platform.Vip:
        return href.indexOf("a1bea5af456e316c7745ed3ca2a379e6") == -1 && href.indexOf("f938d6787b301f8cd8d258aa477437a3") == -1 && href.indexOf("41c6df95c56c4de075bf27fffb06af9f") == -1 && (window.location.pathname.indexOf("detail-") > -1 || window.location.hostname.indexOf("m.vip.com") > -1);
      default:
        return false;
    }
  }
  function isMobile() {
    return /Mobi|Android|iPhone|iPad|iPod/i.test(navigator.userAgent);
  }
  async function mounted() {
    const platform2 = ensurePlatform();
    const { title } = await getTitle(platform2);
    const flag = checkCanRedirect(platform2, title);
    if (flag) {
      const json2 = await get(getPromoUrl, {
        title,
        platform: platform2,
        pt: PluginName,
        url: window.location.href
      });
      if (json2 && json2.data) {
        if (!window.GM_openInTab || isMobile() && platform2 == Platform.Vip) {
          window.location.replace(json2.data);
        } else {
          GM_openInTab(json2.data, {
            active: true
          });
          window.close();
        }
      }
    }
    if (isMobile() && platform2 == Platform.Vip) {
      return;
    }
    const json = await get(getCouponUrl, {
      title,
      platform: platform2,
      pt: PluginName,
      url: window.location.href
    });
    if (json && json.data) {
      coupon.updateCoupon(json.data);
      const target = await createTarget(json.data.selector);
      new App({
        target
      });
    }
  }
  mounted();
})(CryptoJS);



})();