import __vite__cjsImport0_lodash from "/node_modules/.vite/deps/lodash.js?v=0e19d92d"; const set = __vite__cjsImport0_lodash["set"];
import loading from "/src/components/Provider/Loading.tsx";
import { message } from "/node_modules/.vite/deps/ant-design-vue.js?v=f7d2fa05";
import __vite__cjsImport3_aliOss from "/node_modules/.vite/deps/ali-oss.js?v=a26e0da8"; const OSS = __vite__cjsImport3_aliOss.__esModule ? __vite__cjsImport3_aliOss.default : __vite__cjsImport3_aliOss;
export class UploadController {
  request;
  blobURLMaps = /* @__PURE__ */ new Map();
  constructor(request) {
    this.request = request;
  }
  getBlobURLName(url) {
    return this.blobURLMaps.get(url)?.name;
  }
  createObjectURL(obj) {
    const url = URL.createObjectURL(obj);
    this.blobURLMaps.set(url, obj);
    return url;
  }
  revokeObjectURL(url) {
    URL.revokeObjectURL(url);
    this.blobURLMaps.delete(url);
  }
  selectFile(opts) {
    return new Promise((resolve, reject) => {
      const fileInput = document.createElement("input");
      fileInput.type = "file";
      fileInput.accept = opts?.accept || "images/*";
      fileInput.multiple = opts?.multiple || false;
      fileInput.onchange = function() {
        resolve([...this.files]);
      };
      window.addEventListener(
        "focus",
        () => {
          setTimeout(() => {
            reject(console.warn("select file cancel"));
          }, 300);
        },
        { once: true }
      );
      fileInput.click();
    });
  }
  async uploadBlobImages(data) {
    const todoMap = /* @__PURE__ */ new Map();
    addBlobToList(data);
    const todoList = todoMap.entries();
    let err = "";
    for (const item of todoList) {
      const [blobUrl, path] = item;
      const file = this.blobURLMaps.get(blobUrl);
      if (file) {
        const paths = path.split(",");
        loading.show("上传中");
        const ret = await this.uploadFiles(file);
        if (ret.url) {
          paths.forEach((p) => {
            set(data, p, ret.url);
          });
          this.revokeObjectURL(blobUrl);
        } else {
          err = ret.error || `上传文件失败[${path}]`;
          break;
        }
      } else {
        err = `上传文件为空[${path}]`;
      }
    }
    loading.hidden();
    if (err) {
      message.error(err);
      throw err;
    }
    function addBlobToList(data2, path = "") {
      if (data2 instanceof Object) {
        if (data2 instanceof Array) {
          data2.forEach((item, i) => {
            addBlobToList(item, path ? path + "." + i : i.toString());
          });
        } else {
          Object.entries(data2).forEach(([key, value]) => {
            addBlobToList(value, path ? path + "." + key : key);
          });
        }
      }
      if (typeof data2 === "string" && /^blob:/.test(data2)) {
        if (todoMap.has(data2)) {
          path = todoMap.get(data2) + "," + path;
        }
        todoMap.set(data2, path);
      }
    }
  }
  async getPolicy() {
    try {
      const res = await this.request("/upload/policy", {
        method: "GET"
      });
      console.log(res);
      if (res.errorNo != 200) {
        return { error: "获取上传签名失败!" };
      }
      const policy = res.result.body.Credentials;
      return policy;
    } catch (e) {
      return { error: "获取上传签名失败!" };
    }
  }
  async uploadFiles(file, path = "/images/") {
    const res = await this.getPolicy();
    if (res.error) {
      return res.error;
    }
    const ext = file.name.split(".");
    if (ext.length === 1)
      return { error: "上传失败!" };
    const fileExt = ext[ext.length - 1].toLowerCase();
    const fileName = this.randomName(12) + "." + fileExt;
    const client = new OSS({
      region: "oss-cn-chengdu",
      accessKeyId: res.AccessKeyId,
      accessKeySecret: res.AccessKeySecret,
      // 从STS服务获取的安全令牌(SecurityToken)。
      stsToken: res.SecurityToken,
      bucket: "baishuihu"
    });
    try {
      const options = {
        timeout: 6e5
      };
      const result = await client.put(path + fileName, file, options);
      return { url: result.url };
    } catch (e) {
      console.log(e);
      return { error: "上传失败!" };
    }
  }
  // async uploadFile(file: File): Promise<{ url?: string; error?: string }> {
  //   const fromData = new FormData();
  //   fromData.append("file", file);
  //   try {
  //     const ret = await this.request("/upload/file", {
  //       method: "POST",
  //       data: fromData,
  //       headers: {
  //         "Content-Type": "multipart/form-data",
  //       },
  //     });
  //     if (ret.errorNo != 200) {
  //       return { error: "上传失败!" };
  //     }
  //     const url = ret.result.url;
  //     return { url };
  //   } catch (e) {
  //     return { error: "上传失败!" };
  //   }
  // }
  getFileExt(file) {
    let ext = "unkown";
    if (file) {
      const exp = /^.+\.(.+)$/;
      if (file.name && exp.test(file.name)) {
        ext = exp.exec(file.name)[1];
      } else if (file.type) {
        ext = file.type.split("/").pop();
      }
      return ext.toLowerCase();
    } else {
      return ext;
    }
  }
  randomName(length) {
    const data = [
      "0",
      "1",
      "2",
      "3",
      "4",
      "5",
      "6",
      "7",
      "8",
      "9",
      "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"
    ];
    let nums = "";
    for (let i = 0; i < length; i++) {
      const r = parseInt(Math.random() * 61 + "");
      nums += data[r];
    }
    return nums;
  }
}

//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlVwbG9hZENvbnRyb2xsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc2V0IH0gZnJvbSBcImxvZGFzaFwiO1xyXG5pbXBvcnQgbG9hZGluZyBmcm9tIFwiQC9jb21wb25lbnRzL1Byb3ZpZGVyL0xvYWRpbmdcIjtcclxuaW1wb3J0IHsgbWVzc2FnZSB9IGZyb20gXCJhbnQtZGVzaWduLXZ1ZVwiO1xyXG5pbXBvcnQgT1NTIGZyb20gXCJhbGktb3NzXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgVXBsb2FkQ29udHJvbGxlciB7XHJcbiAgcmVxdWVzdDogYW55O1xyXG4gIGJsb2JVUkxNYXBzID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcclxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBhbnkpIHtcclxuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XHJcbiAgfVxyXG4gIGdldEJsb2JVUkxOYW1lKHVybDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5ibG9iVVJMTWFwcy5nZXQodXJsKT8ubmFtZTtcclxuICB9XHJcbiAgY3JlYXRlT2JqZWN0VVJMKG9iajogQmxvYik6IHN0cmluZyB7XHJcbiAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKG9iaik7XHJcbiAgICB0aGlzLmJsb2JVUkxNYXBzLnNldCh1cmwsIG9iaik7XHJcbiAgICByZXR1cm4gdXJsO1xyXG4gIH1cclxuICByZXZva2VPYmplY3RVUkwodXJsOiBzdHJpbmcpIHtcclxuICAgIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcclxuICAgIHRoaXMuYmxvYlVSTE1hcHMuZGVsZXRlKHVybCk7XHJcbiAgfVxyXG4gIHNlbGVjdEZpbGUob3B0cz86IHsgYWNjZXB0Pzogc3RyaW5nOyBtdWx0aXBsZT86IGJvb2xlYW4gfSk6IFByb21pc2U8RmlsZVtdPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBjb25zdCBmaWxlSW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XHJcbiAgICAgIGZpbGVJbnB1dC50eXBlID0gXCJmaWxlXCI7XHJcbiAgICAgIGZpbGVJbnB1dC5hY2NlcHQgPSBvcHRzPy5hY2NlcHQgfHwgXCJpbWFnZXMvKlwiO1xyXG4gICAgICBmaWxlSW5wdXQubXVsdGlwbGUgPSBvcHRzPy5tdWx0aXBsZSB8fCBmYWxzZTtcclxuXHJcbiAgICAgIGZpbGVJbnB1dC5vbmNoYW5nZSA9IGZ1bmN0aW9uICh0aGlzOiBhbnkpIHtcclxuICAgICAgICByZXNvbHZlKFsuLi50aGlzLmZpbGVzXSk7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcclxuICAgICAgICBcImZvY3VzXCIsXHJcbiAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHJlamVjdChjb25zb2xlLndhcm4oXCJzZWxlY3QgZmlsZSBjYW5jZWxcIikpO1xyXG4gICAgICAgICAgfSwgMzAwKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHsgb25jZTogdHJ1ZSB9XHJcbiAgICAgICk7XHJcblxyXG4gICAgICBmaWxlSW5wdXQuY2xpY2soKTtcclxuICAgIH0pO1xyXG4gIH1cclxuICBhc3luYyB1cGxvYWRCbG9iSW1hZ2VzKGRhdGE6IG9iamVjdCkge1xyXG4gICAgY29uc3QgdG9kb01hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XHJcbiAgICBhZGRCbG9iVG9MaXN0KGRhdGEpO1xyXG4gICAgY29uc3QgdG9kb0xpc3QgPSB0b2RvTWFwLmVudHJpZXMoKTtcclxuXHJcbiAgICBsZXQgZXJyID0gXCJcIjtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdG9kb0xpc3QpIHtcclxuICAgICAgY29uc3QgW2Jsb2JVcmwsIHBhdGhdID0gaXRlbTtcclxuICAgICAgY29uc3QgZmlsZSA9IHRoaXMuYmxvYlVSTE1hcHMuZ2V0KGJsb2JVcmwpO1xyXG4gICAgICBpZiAoZmlsZSkge1xyXG4gICAgICAgIGNvbnN0IHBhdGhzID0gcGF0aC5zcGxpdChcIixcIik7XHJcbiAgICAgICAgbG9hZGluZy5zaG93KFwi5LiK5Lyg5LitXCIpO1xyXG4gICAgICAgIGNvbnN0IHJldCA9IGF3YWl0IHRoaXMudXBsb2FkRmlsZXMoZmlsZSk7XHJcbiAgICAgICAgaWYgKHJldC51cmwpIHtcclxuICAgICAgICAgIHBhdGhzLmZvckVhY2goKHApID0+IHtcclxuICAgICAgICAgICAgc2V0KGRhdGEsIHAsIHJldC51cmwpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLnJldm9rZU9iamVjdFVSTChibG9iVXJsKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZXJyID0gcmV0LmVycm9yIHx8IGDkuIrkvKDmlofku7blpLHotKVbJHtwYXRofV1gO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGVyciA9IGDkuIrkvKDmlofku7bkuLrnqbpbJHtwYXRofV1gO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBsb2FkaW5nLmhpZGRlbigpO1xyXG4gICAgaWYgKGVycikge1xyXG4gICAgICBtZXNzYWdlLmVycm9yKGVycik7XHJcbiAgICAgIHRocm93IGVycjtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZEJsb2JUb0xpc3QoZGF0YTogYW55LCBwYXRoID0gXCJcIikge1xyXG4gICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIE9iamVjdCkge1xyXG4gICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICAgIGRhdGEuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICAgICAgICBhZGRCbG9iVG9MaXN0KGl0ZW0sIHBhdGggPyBwYXRoICsgXCIuXCIgKyBpIDogaS50b1N0cmluZygpKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBPYmplY3QuZW50cmllcyhkYXRhKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcclxuICAgICAgICAgICAgYWRkQmxvYlRvTGlzdCh2YWx1ZSwgcGF0aCA/IHBhdGggKyBcIi5cIiArIGtleSA6IGtleSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiICYmIC9eYmxvYjovLnRlc3QoZGF0YSkpIHtcclxuICAgICAgICBpZiAodG9kb01hcC5oYXMoZGF0YSkpIHtcclxuICAgICAgICAgIHBhdGggPSB0b2RvTWFwLmdldChkYXRhKSArIFwiLFwiICsgcGF0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdG9kb01hcC5zZXQoZGF0YSwgcGF0aCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgYXN5bmMgZ2V0UG9saWN5KCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5yZXF1ZXN0KFwiL3VwbG9hZC9wb2xpY3lcIiwge1xyXG4gICAgICAgIG1ldGhvZDogXCJHRVRcIixcclxuICAgICAgfSk7XHJcbiAgICAgIGNvbnNvbGUubG9nKHJlcyk7XHJcbiAgICAgIGlmIChyZXMuZXJyb3JObyAhPSAyMDApIHtcclxuICAgICAgICByZXR1cm4geyBlcnJvcjogXCLojrflj5bkuIrkvKDnrb7lkI3lpLHotKUhXCIgfTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBwb2xpY3kgPSByZXMucmVzdWx0LmJvZHkuQ3JlZGVudGlhbHM7XHJcbiAgICAgIHJldHVybiBwb2xpY3k7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIHJldHVybiB7IGVycm9yOiBcIuiOt+WPluS4iuS8oOetvuWQjeWksei0pSFcIiB9O1xyXG4gICAgfVxyXG4gIH1cclxuICBhc3luYyB1cGxvYWRGaWxlcyhcclxuICAgIGZpbGU6IEZpbGUsXHJcbiAgICBwYXRoOiBzdHJpbmcgPSBcIi9pbWFnZXMvXCJcclxuICApOiBQcm9taXNlPHsgdXJsPzogc3RyaW5nOyBlcnJvcj86IHN0cmluZyB9PiB7XHJcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmdldFBvbGljeSgpO1xyXG4gICAgaWYgKHJlcy5lcnJvcikge1xyXG4gICAgICByZXR1cm4gcmVzLmVycm9yO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZXh0ID0gZmlsZS5uYW1lLnNwbGl0KFwiLlwiKTtcclxuICAgIGlmIChleHQubGVuZ3RoID09PSAxKSByZXR1cm4geyBlcnJvcjogXCLkuIrkvKDlpLHotKUhXCIgfTtcclxuICAgIGNvbnN0IGZpbGVFeHQgPSBleHRbZXh0Lmxlbmd0aCAtIDFdLnRvTG93ZXJDYXNlKCk7XHJcbiAgICBjb25zdCBmaWxlTmFtZSA9IHRoaXMucmFuZG9tTmFtZSgxMikgKyBcIi5cIiArIGZpbGVFeHQ7XHJcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgT1NTKHtcclxuICAgICAgcmVnaW9uOiBcIm9zcy1jbi1jaGVuZ2R1XCIsXHJcbiAgICAgIGFjY2Vzc0tleUlkOiByZXMuQWNjZXNzS2V5SWQsXHJcbiAgICAgIGFjY2Vzc0tleVNlY3JldDogcmVzLkFjY2Vzc0tleVNlY3JldCxcclxuICAgICAgLy8g5LuOU1RT5pyN5Yqh6I635Y+W55qE5a6J5YWo5Luk54mM77yIU2VjdXJpdHlUb2tlbu+8ieOAglxyXG4gICAgICBzdHNUb2tlbjogcmVzLlNlY3VyaXR5VG9rZW4sXHJcbiAgICAgIGJ1Y2tldDogXCJiYWlzaHVpaHVcIixcclxuICAgIH0pO1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICB0aW1lb3V0OiA2MDAwMDAsXHJcbiAgICAgIH07XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNsaWVudC5wdXQocGF0aCArIGZpbGVOYW1lLCBmaWxlLCBvcHRpb25zKTtcclxuICAgICAgcmV0dXJuIHsgdXJsOiByZXN1bHQudXJsIH07XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG4gICAgICByZXR1cm4geyBlcnJvcjogXCLkuIrkvKDlpLHotKUhXCIgfTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8gYXN5bmMgdXBsb2FkRmlsZShmaWxlOiBGaWxlKTogUHJvbWlzZTx7IHVybD86IHN0cmluZzsgZXJyb3I/OiBzdHJpbmcgfT4ge1xyXG4gIC8vICAgY29uc3QgZnJvbURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuICAvLyAgIGZyb21EYXRhLmFwcGVuZChcImZpbGVcIiwgZmlsZSk7XHJcbiAgLy8gICB0cnkge1xyXG4gIC8vICAgICBjb25zdCByZXQgPSBhd2FpdCB0aGlzLnJlcXVlc3QoXCIvdXBsb2FkL2ZpbGVcIiwge1xyXG4gIC8vICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgLy8gICAgICAgZGF0YTogZnJvbURhdGEsXHJcbiAgLy8gICAgICAgaGVhZGVyczoge1xyXG4gIC8vICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJtdWx0aXBhcnQvZm9ybS1kYXRhXCIsXHJcbiAgLy8gICAgICAgfSxcclxuICAvLyAgICAgfSk7XHJcbiAgLy8gICAgIGlmIChyZXQuZXJyb3JObyAhPSAyMDApIHtcclxuICAvLyAgICAgICByZXR1cm4geyBlcnJvcjogXCLkuIrkvKDlpLHotKUhXCIgfTtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgICBjb25zdCB1cmwgPSByZXQucmVzdWx0LnVybDtcclxuICAvLyAgICAgcmV0dXJuIHsgdXJsIH07XHJcbiAgLy8gICB9IGNhdGNoIChlKSB7XHJcbiAgLy8gICAgIHJldHVybiB7IGVycm9yOiBcIuS4iuS8oOWksei0pSFcIiB9O1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuICBnZXRGaWxlRXh0KGZpbGU6IEZpbGUpIHtcclxuICAgIGxldCBleHQ6IGFueSA9IFwidW5rb3duXCI7XHJcbiAgICBpZiAoZmlsZSkge1xyXG4gICAgICBjb25zdCBleHAgPSAvXi4rXFwuKC4rKSQvO1xyXG4gICAgICBpZiAoZmlsZS5uYW1lICYmIGV4cC50ZXN0KGZpbGUubmFtZSkpIHtcclxuICAgICAgICBleHQgPSAoZXhwLmV4ZWMoZmlsZS5uYW1lKSBhcyBhbnkpWzFdO1xyXG4gICAgICB9IGVsc2UgaWYgKGZpbGUudHlwZSkge1xyXG4gICAgICAgIGV4dCA9IGZpbGUudHlwZS5zcGxpdChcIi9cIikucG9wKCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGV4dC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGV4dDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJhbmRvbU5hbWUobGVuZ3RoOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGRhdGEgPSBbXHJcbiAgICAgIFwiMFwiLFxyXG4gICAgICBcIjFcIixcclxuICAgICAgXCIyXCIsXHJcbiAgICAgIFwiM1wiLFxyXG4gICAgICBcIjRcIixcclxuICAgICAgXCI1XCIsXHJcbiAgICAgIFwiNlwiLFxyXG4gICAgICBcIjdcIixcclxuICAgICAgXCI4XCIsXHJcbiAgICAgIFwiOVwiLFxyXG4gICAgICBcIkFcIixcclxuICAgICAgXCJCXCIsXHJcbiAgICAgIFwiQ1wiLFxyXG4gICAgICBcIkRcIixcclxuICAgICAgXCJFXCIsXHJcbiAgICAgIFwiRlwiLFxyXG4gICAgICBcIkdcIixcclxuICAgICAgXCJIXCIsXHJcbiAgICAgIFwiSVwiLFxyXG4gICAgICBcIkpcIixcclxuICAgICAgXCJLXCIsXHJcbiAgICAgIFwiTFwiLFxyXG4gICAgICBcIk1cIixcclxuICAgICAgXCJOXCIsXHJcbiAgICAgIFwiT1wiLFxyXG4gICAgICBcIlBcIixcclxuICAgICAgXCJRXCIsXHJcbiAgICAgIFwiUlwiLFxyXG4gICAgICBcIlNcIixcclxuICAgICAgXCJUXCIsXHJcbiAgICAgIFwiVVwiLFxyXG4gICAgICBcIlZcIixcclxuICAgICAgXCJXXCIsXHJcbiAgICAgIFwiWFwiLFxyXG4gICAgICBcIllcIixcclxuICAgICAgXCJaXCIsXHJcbiAgICAgIFwiYVwiLFxyXG4gICAgICBcImJcIixcclxuICAgICAgXCJjXCIsXHJcbiAgICAgIFwiZFwiLFxyXG4gICAgICBcImVcIixcclxuICAgICAgXCJmXCIsXHJcbiAgICAgIFwiZ1wiLFxyXG4gICAgICBcImhcIixcclxuICAgICAgXCJpXCIsXHJcbiAgICAgIFwialwiLFxyXG4gICAgICBcImtcIixcclxuICAgICAgXCJsXCIsXHJcbiAgICAgIFwibVwiLFxyXG4gICAgICBcIm5cIixcclxuICAgICAgXCJvXCIsXHJcbiAgICAgIFwicFwiLFxyXG4gICAgICBcInFcIixcclxuICAgICAgXCJyXCIsXHJcbiAgICAgIFwic1wiLFxyXG4gICAgICBcInRcIixcclxuICAgICAgXCJ1XCIsXHJcbiAgICAgIFwidlwiLFxyXG4gICAgICBcIndcIixcclxuICAgICAgXCJ4XCIsXHJcbiAgICAgIFwieVwiLFxyXG4gICAgICBcInpcIixcclxuICAgIF07XHJcbiAgICBsZXQgbnVtcyA9IFwiXCI7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IHIgPSBwYXJzZUludChNYXRoLnJhbmRvbSgpICogNjEgKyBcIlwiKTtcclxuICAgICAgbnVtcyArPSBkYXRhW3JdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bXM7XHJcbiAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxXQUFXO0FBQ3BCLE9BQU8sYUFBYTtBQUNwQixTQUFTLGVBQWU7QUFDeEIsT0FBTyxTQUFTO0FBRVQsYUFBTSxpQkFBaUI7QUFBQSxFQUM1QjtBQUFBLEVBQ0EsY0FBYyxvQkFBSSxJQUFpQjtBQUFBLEVBQ25DLFlBQVksU0FBYztBQUN4QixTQUFLLFVBQVU7QUFBQSxFQUNqQjtBQUFBLEVBQ0EsZUFBZSxL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