UNPKG

hivessh

Version:

HiveSsh is an innovative library designed to streamline SSH2 connections and simplify task execution on Linux servers.

135 lines 17.9 kB
import { filterEmpty, trimAll } from "../../utils/base.js"; /** * @deprecated The AbstractPackageManager (APM) feature will be removed in the future to more focus on the core problems and solutions */ export const dnfEnv = { LANG: "en_US.UTF-8" }; /** * @deprecated The AbstractPackageManager (APM) feature will be removed in the future to more focus on the core problems and solutions */ export const ignoredErrMsgs = [ "transaction completed", "base", "cleaning up", "warning", ]; /** * @deprecated The AbstractPackageManager (APM) feature will be removed in the future to more focus on the core problems and solutions * @param data * @returns */ export const ignoreMessageFilter = (data) => { let data2 = trimAll(data).toLowerCase(); for (const msg of ignoredErrMsgs) { if (data2.includes(msg)) { return undefined; } } return data; }; /** * @deprecated The AbstractPackageManager (APM) feature will be removed in the future to more focus on the core problems and solutions */ export const parseDnfList = (exit) => { const trimmedLines = filterEmpty(exit.out.split("\n")); const packages = trimmedLines.slice(1).map((line) => line.split(/\s+/)[0]); return packages; }; /** * @deprecated The AbstractPackageManager (APM) feature will be removed in the future to more focus on the core problems and solutions * @param exit * @returns */ export const parseDnfDescription = (exit) => { const infoLines = exit.out.split("\n").filter((line) => line.includes(":")); const fields = {}; for (const infoLine of infoLines) { const [key, value] = infoLine.trim().split(":"); fields[key.toLowerCase()] = value.trim(); } if (!fields.hasOwnProperty("name") || !fields.hasOwnProperty("version")) { throw new Error("Required fields 'name' or 'version' missing in DNF package info"); } return { name: fields.name, version: fields.version, description: fields.description || "", fields, }; }; /** * @deprecated The AbstractPackageManager (APM) feature will be removed in the future to more focus on the core problems and solutions * @param sshHost * @param cmdTimeoutMillis * @returns */ export const initDnfApm = (sshHost, cmdTimeoutMillis) => { return { type: "dnf", sshHost, //### cache updateCache: async () => { return sshHost.exec('dnf makecache', { sudo: true, timeoutMillis: cmdTimeoutMillis, mapErrOut: ignoreMessageFilter, env: dnfEnv, }).then(); }, clearCache: async () => { return sshHost.exec('dnf clean all', { sudo: true, timeoutMillis: cmdTimeoutMillis, mapErrOut: ignoreMessageFilter, env: dnfEnv, }).then(); }, //### edit install: (...pkgs) => sshHost.exec("dnf install -y " + pkgs.join(" "), { sudo: true, timeoutMillis: cmdTimeoutMillis, mapErrOut: ignoreMessageFilter, env: dnfEnv, }).then(), uninstall: (...pkgs) => sshHost.exec("dnf remove - y " + pkgs.join(" "), { sudo: true, timeoutMillis: cmdTimeoutMillis, mapErrOut: ignoreMessageFilter, env: dnfEnv, }).then(), //### maintenance upgradeAll: () => sshHost.exec("dnf upgrade -y", { sudo: true, timeoutMillis: cmdTimeoutMillis, mapErrOut: ignoreMessageFilter, env: dnfEnv, }).then(), uninstallUnused: () => sshHost.exec("dnf autoremove -y", { sudo: true, timeoutMillis: cmdTimeoutMillis, mapErrOut: ignoreMessageFilter, env: dnfEnv, }).then(), //### get list: () => sshHost.exec("dnf list installed", { sudo: true, timeoutMillis: cmdTimeoutMillis, mapErrOut: ignoreMessageFilter, env: dnfEnv, }).then(parseDnfList), upgradable: () => sshHost.exec("dnf list updates", { sudo: true, timeoutMillis: cmdTimeoutMillis, mapErrOut: ignoreMessageFilter, env: dnfEnv, }).then(parseDnfList), describe: (pkg) => sshHost.exec("dnf info ${ pkg }", { sudo: true, timeoutMillis: cmdTimeoutMillis, mapErrOut: ignoreMessageFilter, env: dnfEnv, }).then(parseDnfDescription), }; }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5mLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwbS9pbXBsL2RuZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQWEsV0FBVyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBR3JFOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHO0lBQ2xCLElBQUksRUFBRSxhQUFhO0NBQ3RCLENBQUE7QUFFRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBYTtJQUNwQyx1QkFBdUI7SUFDdkIsTUFBTTtJQUNOLGFBQWE7SUFDYixTQUFTO0NBQ1osQ0FBQTtBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBcUIsQ0FDakQsSUFBWSxFQUNkLEVBQUU7SUFDQSxJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUE7SUFDdkMsS0FBSyxNQUFNLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUMvQixJQUNJLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQ3JCLENBQUM7WUFDQyxPQUFPLFNBQVMsQ0FBQTtRQUNwQixDQUFDO0lBQ0wsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFBO0FBQ2YsQ0FBQyxDQUFBO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FDeEIsSUFBb0IsRUFDWixFQUFFO0lBQ1YsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FDdkIsQ0FBQTtJQUVELE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENB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U0FDZCxDQUVKLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDO0tBQ2xDLENBQUE7QUFDTCxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTc2hDaGFubmVsRXhpdCwgU3RyZWFtRGF0YU1hcHBlciB9IGZyb20gXCIuLi8uLi9Tc2hFeGVjLmpzXCJcbmltcG9ydCB7IFNzaEhvc3QgfSBmcm9tIFwiLi4vLi4vU3NoSG9zdC5qc1wiXG5pbXBvcnQgeyBBd2FpdGFibGUsIGZpbHRlckVtcHR5LCB0cmltQWxsIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2Jhc2UuanNcIlxuaW1wb3J0IHsgQWJzdHJhY3RQYWNrYWdlLCBBYnN0cmFjdFBhY2thZ2VNYW5hZ2VyLCBBcG1Jbml0IH0gZnJvbSBcIi4uL2FwbS5qc1wiXG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVGhlIEFic3RyYWN0UGFja2FnZU1hbmFnZXIgKEFQTSkgZmVhdHVyZSB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZSB0byBtb3JlIGZvY3VzIG9uIHRoZSBjb3JlIHByb2JsZW1zIGFuZCBzb2x1dGlvbnNcbiAqL1xuZXhwb3J0IGNvbnN0IGRuZkVudiA9IHtcbiAgICBMQU5HOiBcImVuX1VTLlVURi04XCJcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBUaGUgQWJzdHJhY3RQYWNrYWdlTWFuYWdlciAoQVBNKSBmZWF0dXJlIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlIHRvIG1vcmUgZm9jdXMgb24gdGhlIGNvcmUgcHJvYmxlbXMgYW5kIHNvbHV0aW9uc1xuICovXG5leHBvcnQgY29uc3QgaWdub3JlZEVyck1zZ3M6IHN0cmluZ1tdID0gW1xuICAgIFwidHJhbnNhY3Rpb24gY29tcGxldGVkXCIsXG4gICAgXCJiYXNlXCIsXG4gICAgXCJjbGVhbmluZyB1cFwiLFxuICAgIFwid2FybmluZ1wiLFxuXVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFRoZSBBYnN0cmFjdFBhY2thZ2VNYW5hZ2VyIChBUE0pIGZlYXR1cmUgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUgdG8gbW9yZSBmb2N1cyBvbiB0aGUgY29yZSBwcm9ibGVtcyBhbmQgc29sdXRpb25zXG4gKiBAcGFyYW0gZGF0YSBcbiAqIEByZXR1cm5zIFxuICovXG5leHBvcnQgY29uc3QgaWdub3JlTWVzc2FnZUZpbHRlcjogU3RyZWFtRGF0YU1hcHBlciA9IChcbiAgICBkYXRhOiBzdHJpbmdcbikgPT4ge1xuICAgIGxldCBkYXRhMiA9IHRyaW1BbGwoZGF0YSkudG9Mb3dlckNhc2UoKVxuICAgIGZvciAoY29uc3QgbXNnIG9mIGlnbm9yZWRFcnJNc2dzKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGRhdGEyLmluY2x1ZGVzKG1zZylcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBUaGUgQWJzdHJhY3RQYWNrYWdlTWFuYWdlciAoQVBNKSBmZWF0dXJlIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlIHRvIG1vcmUgZm9jdXMgb24gdGhlIGNvcmUgcHJvYmxlbXMgYW5kIHNvbHV0aW9uc1xuICovXG5leHBvcnQgY29uc3QgcGFyc2VEbmZMaXN0ID0gKFxuICAgIGV4aXQ6IFNzaENoYW5uZWxFeGl0XG4pOiBzdHJpbmdbXSA9PiB7XG4gICAgY29uc3QgdHJpbW1lZExpbmVzID0gZmlsdGVyRW1wdHkoXG4gICAgICAgIGV4aXQub3V0LnNwbGl0KFwiXFxuXCIpXG4gICAgKVxuXG4gICAgY29uc3QgcGFja2FnZXMgPSB0cmltbWVkTGluZXMuc2xpY2UoMSkubWFwKChsaW5lKSA9PiBsaW5lLnNwbGl0KC9cXHMrLylbMF0pXG4gICAgcmV0dXJuIHBhY2thZ2VzXG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVGhlIEFic3RyYWN0UGFja2FnZU1hbmFnZXIgKEFQTSkgZmVhdHVyZSB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZSB0byBtb3JlIGZvY3VzIG9uIHRoZSBjb3JlIHByb2JsZW1zIGFuZCBzb2x1dGlvbnNcbiAqIEBwYXJhbSBleGl0IFxuICogQHJldHVybnMgXG4gKi9cbmV4cG9ydCBjb25zdCBwYXJzZURuZkRlc2NyaXB0aW9uID0gKFxuICAgIGV4aXQ6IFNzaENoYW5uZWxFeGl0XG4pOiBBYnN0cmFjdFBhY2thZ2UgPT4ge1xuICAgIGNvbnN0IGluZm9MaW5lcyA9IGV4aXQub3V0LnNwbGl0KFwiXFxuXCIpLmZpbHRlcigobGluZSkgPT4gbGluZS5pbmNsdWRlcyhcIjpcIikpXG5cbiAgICBjb25zdCBmaWVsZHM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fVxuICAgIGZvciAoY29uc3QgaW5mb0xpbmUgb2YgaW5mb0xpbmVzKSB7XG4gICAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IGluZm9MaW5lLnRyaW0oKS5zcGxpdChcIjpcIilcbiAgICAgICAgZmllbGRzW2tleS50b0xvd2VyQ2FzZSgpXSA9IHZhbHVlLnRyaW0oKVxuICAgIH1cblxuICAgIGlmICghZmllbGRzLmhhc093blByb3BlcnR5KFwibmFtZVwiKSB8fCAhZmllbGRzLmhhc093blByb3BlcnR5KFwidmVyc2lvblwiKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBcIlJlcXVpcmVkIGZpZWxkcyAnbmFtZScgb3IgJ3ZlcnNpb24nIG1pc3NpbmcgaW4gRE5GIHBhY2thZ2UgaW5mb1wiXG4gICAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBmaWVsZHMubmFtZSEsXG4gICAgICAgIHZlcnNpb246IGZpZWxkcy52ZXJzaW9uISxcbiAgICAgICAgZGVzY3JpcHRpb246IGZpZWxkcy5kZXNjcmlwdGlvbiB8fCBcIlwiLFxuICAgICAgICBmaWVsZHMsXG4gICAgfVxufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFRoZSBBYnN0cmFjdFBhY2thZ2VNYW5hZ2VyIChBUE0pIGZlYXR1cmUgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUgdG8gbW9yZSBmb2N1cyBvbiB0aGUgY29yZSBwcm9ibGVtcyBhbmQgc29sdXRpb25zXG4gKiBAcGFyYW0gc3NoSG9zdCBcbiAqIEBwYXJhbSBjbWRUaW1lb3V0TWlsbGlzIFxuICogQHJldHVybnMgXG4gKi9cblxuZXhwb3J0IGNvbnN0IGluaXREbmZBcG06IEFwbUluaXQgPSAoXG4gICAgc3NoSG9zdDogU3NoSG9zdCxcbiAgICBjbWRUaW1lb3V0TWlsbGlzPzogbnVtYmVyIHwgdW5kZWZpbmVkLFxuKTogQXdhaXRhYmxlPEFic3RyYWN0UGFja2FnZU1hbmFnZXI+ID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcImRuZlwiLFxuICAgICAgICBzc2hIb3N0LFxuXG4gICAgICAgIC8vIyMjIGNhY2hlXG4gICAgICAgIHVwZGF0ZUNhY2hlOiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gc3NoSG9zdC5leGVjKFxuICAgICAgICAgICAgICAgICdkbmYgbWFrZWNhY2hlJyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN1ZG86IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHRpbWVvdXRNaWxsaXM6IGNtZFRpbWVvdXRNaWxsaXMsXG4gICAgICAgICAgICAgICAgICAgIG1hcEVyck91dDogaWdub3JlTWVzc2FnZUZpbHRlcixcbiAgICAgICAgICAgICAgICAgICAgZW52OiBkbmZFbnYsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKS50aGVuKClcbiAgICAgICAgfSxcbiAgICAgICAgY2xlYXJDYWNoZTogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHNzaEhvc3QuZXhlYyhcbiAgICAgICAgICAgICAgICAnZG5mIGNsZWFuIGFsbCcsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdWRvOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB0aW1lb3V0TWlsbGlzOiBjbWRUaW1lb3V0TWlsbGlzLFxuICAgICAgICAgICAgICAgICAgICBtYXBFcnJPdXQ6IGlnbm9yZU1lc3NhZ2VGaWx0ZXIsXG4gICAgICAgICAgICAgICAgICAgIGVudjogZG5mRW52LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICkudGhlbigpXG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8jIyMgZWRpdFxuICAgICAgICBpbnN0YWxsOiAoLi4ucGtnczogc3RyaW5nW10pID0+XG4gICAgICAgICAgICBzc2hIb3N0LmV4ZWMoXG4gICAgICAgICAgICAgICAgXCJkbmYgaW5zdGFsbCAteSBcIiArIHBrZ3Muam9pbihcIiBcIiksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdWRvOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB0aW1lb3V0TWlsbGlzOiBjbWRUaW1lb3V0TWlsbGlzLFxuICAgICAgICAgICAgICAgICAgICBtYXBFcnJPdXQ6IGlnbm9yZU1lc3NhZ2VGaWx0ZXIsXG4gICAgICAgICAgICAgICAgICAgIGVudjogZG5mRW52LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICkudGhlbigpLFxuICAgICAgICB1bmluc3RhbGw6ICguLi5wa2dzOiBzdHJpbmdbXSkgPT5cbiAgICAgICAgICAgIHNzaEhvc3QuZXhlYyhcbiAgICAgICAgICAgICAgICBcImRuZiByZW1vdmUgLSB5IFwiICsgcGtncy5qb2luKFwiIFwiKSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN1ZG86IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHRpbWVvdXRNaWxsaXM6IGNtZFRpbWVvdXRNaWxsaXMsXG4gICAgICAgICAgICAgICAgICAgIG1hcEVyck91dDogaWdub3JlTWVzc2FnZUZpbHRlcixcbiAgICAgICAgICAgICAgICAgICAgZW52OiBkbmZFbnYsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKS50aGVuKCksXG5cbiAgICAgICAgLy8jIyMgbWFpbnRlbmFuY2VcbiAgICAgICAgdXBncmFkZUFsbDogKCkgPT5cbiAgICAgICAgICAgIHNzaEhvc3QuZXhlYyhcbiAgICAgICAgICAgICAgICBcImRuZiB1cGdyYWRlIC15XCIsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdWRvOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB0aW1lb3V0TWlsbGlzOiBjbWRUaW1lb3V0TWlsbGlzLFxuICAgICAgICAgICAgICAgICAgICBtYXBFcnJPdXQ6IGlnbm9yZU1lc3NhZ2VGaWx0ZXIsXG4gICAgICAgICAgICAgICAgICAgIGVudjogZG5mRW52LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICkudGhlbigpLFxuICAgICAgICB1bmluc3RhbGxVbnVzZWQ6ICgpID0+XG4gICAgICAgICAgICBzc2hIb3N0LmV4ZWMoXG4gICAgICAgICAgICAgICAgXCJkbmYgYXV0b3JlbW92ZSAteVwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3VkbzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgdGltZW91dE1pbGxpczogY21kVGltZW91dE1pbGxpcyxcbiAgICAgICAgICAgICAgICAgICAgbWFwRXJyT3V0OiBpZ25vcmVNZXNzYWdlRmlsdGVyLFxuICAgICAgICAgICAgICAgICAgICBlbnY6IGRuZkVudixcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApLnRoZW4oKSxcblxuICAgICAgICAvLyMjIyBnZXRcbiAgICAgICAgbGlzdDogKCkgPT5cbiAgICAgICAgICAgIHNzaEhvc3QuZXhlYyhcbiAgICAgICAgICAgICAgICBcImRuZiBsaXN0IGluc3RhbGxlZFwiLFxuXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdWRvOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB0aW1lb3V0TWlsbGlzOiBjbWRUaW1lb3V0TWlsbGlzLFxuICAgICAgICAgICAgICAgICAgICBtYXBFcnJPdXQ6IGlnbm9yZU1lc3NhZ2VGaWx0ZXIsXG4gICAgICAgICAgICAgICAgICAgIGVudjogZG5mRW52LFxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgKS50aGVuKHBhcnNlRG5mTGlzdCksXG4gICAgICAgIHVwZ3JhZGFibGU6ICgpID0+XG4gICAgICAgICAgICBzc2hIb3N0LmV4ZWMoXG4gICAgICAgICAgICAgICAgXCJkbmYgbGlzdCB1cGRhdGVzXCIsXG5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN1ZG86IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHRpbWVvdXRNaWxsaXM6IGNtZFRpbWVvdXRNaWxsaXMsXG4gICAgICAgICAgICAgICAgICAgIG1hcEVyck91dDogaWdub3JlTWVzc2FnZUZpbHRlcixcbiAgICAgICAgICAgICAgICAgICAgZW52OiBkbmZFbnYsXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICApLnRoZW4ocGFyc2VEbmZMaXN0KSxcbiAgICAgICAgZGVzY3JpYmU6IChwa2c6IHN0cmluZykgPT5cbiAgICAgICAgICAgIHNzaEhvc3QuZXhlYyhcbiAgICAgICAgICAgICAgICBcImRuZiBpbmZvICR7IHBrZyB9XCIsXG5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN1ZG86IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHRpbWVvdXRNaWxsaXM6IGNtZFRpbWVvdXRNaWxsaXMsXG4gICAgICAgICAgICAgICAgICAgIG1hcEVyck91dDogaWdub3JlTWVzc2FnZUZpbHRlcixcbiAgICAgICAgICAgICAgICAgICAgZW52OiBkbmZFbnYsXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICApLnRoZW4ocGFyc2VEbmZEZXNjcmlwdGlvbiksXG4gICAgfVxufSJdfQ==