UNPKG

hivessh

Version:

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

100 lines 22.9 kB
export function convertFileEntryState(path, stats) { return { path: path, filename: stats.filename, mode: stats.attrs.mode, uid: stats.attrs.uid, gid: stats.attrs.gid, size: stats.attrs.size, atime: stats.attrs.atime, mtime: stats.attrs.mtime, isDirectory: stats.attrs.isDirectory(), isFile: stats.attrs.isFile(), isBlockDevice: stats.attrs.isBlockDevice(), isCharacterDevice: stats.attrs.isCharacterDevice(), isSymbolicLink: stats.attrs.isSymbolicLink(), isFIFO: stats.attrs.isFIFO(), isSocket: stats.attrs.isSocket(), }; } const voidMethods = [ "fastGet", "fastPut", "writeFile", "appendFile", "write", "fsetstat", "futimes", "fchown", "fchmod", "unlink", "rename", "mkdir", "mkdir", "rmdir", "setstat", "utimes", "chown", "chmod", "symlink", "ext_openssh_rename", "ext_openssh_hardlink", "ext_openssh_lsetstat", "ext_openssh_lsetstat", ]; const bufferMethods = [ "readFile", "open", "opendir", ]; const stringMethods = [ "readlink", "realpath", "ext_openssh_expandPath", ]; const statsMethods = [ "fstat", "lstat", "stat", ]; const anyMethods = [ "ext_openssh_statvfs", "ext_openssh_fstatvfs", "ext_openssh_fsync", ]; const booleanMethods = [ "exists", ]; const singleValueErrorCallbacks = [ ...bufferMethods, ...stringMethods, ...statsMethods, ...anyMethods, ...booleanMethods, ]; const fsStatsMethods = [ "readdir", ]; const otherMethods = [ "read" ]; export function createSFTPPromiseWrapper(sourceWrapper) { // promisify methods const ret = sourceWrapper; for (const voidMethod of voidMethods) { const altName = voidMethod + "2"; ret[altName] = ret[voidMethod]; ret[voidMethod] = (...params) => new Promise((res) => ret[altName](...params, res)); } for (const bufferMethod of singleValueErrorCallbacks) { const altName = bufferMethod + "2"; ret[altName] = ret[bufferMethod]; ret[bufferMethod] = (...params) => new Promise((res, rej) => ret[altName](...params, (err, value) => err ? rej(err) : res(value))); } ret.readdir2 = ret.readdir; ret.readdir = (...params) => new Promise((res, rej) => ret.readdir2(...params, (err, value) => err ? rej(err) : res(value.map((v) => convertFileEntryState(params[0], v))))); ret.read2 = ret.read; ret.read = (...params) => new Promise((res, rej) => ret.read2(...params, (err, read, buf, pos) => err ? rej(err) : res([read, buf, pos]))); return ret; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2Z0cFByb21pc2VXcmFwcGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Vzc2VudGlhbHMvU2Z0cFByb21pc2VXcmFwcGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW9CQSxNQUFNLFVBQVUscUJBQXFCLENBQ2pDLElBQVksRUFDWixLQUF5QjtJQUV6QixPQUFPO1FBQ0gsSUFBSSxFQUFFLElBQUk7UUFDVixRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVE7UUFDeEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSTtRQUN0QixHQUFHLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHO1FBQ3BCLEdBQUcsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUc7UUFDcEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSTtRQUN0QixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLO1FBQ3hCLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUs7UUFDeEIsV0FBVyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFO1FBQ3RDLE1BQU0sRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRTtRQUM1QixhQUFhLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUU7UUFDMUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtRQUNsRCxjQUFjLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUU7UUFDNUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO1FBQzVCLFFBQVEsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRTtLQUNuQyxDQUFBO0FBQ0wsQ0FBQztBQTZSRCxNQUFNLFdBQVcsR0FBRztJQUNoQixTQUFTO0lBQ1QsU0FBUztJQUNULFdBQVc7SUFDWCxZQUFZ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QUcsQ0FDM0QsS0FBSyxDQUFDLEdBQUcsQ0FDTCxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUM3QyxDQUNKLENBQ0osQ0FDSixDQUFBO0lBRUQsR0FBRyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFBO0lBQ3BCLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLE1BQWEsRUFBRSxFQUFFLENBQUMsSUFBSSxPQUFPLENBQ3hDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FDbkIsR0FBRyxNQUFNLEVBQ1QsQ0FBQyxHQUFzQixFQUFFLElBQVksRUFBRSxHQUFXLEVBQUUsR0FBVyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUM3RyxDQUNKLENBQUE7SUFFRCxPQUFPLEdBQUcsQ0FBQTtBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGaWxlRW50cnlXaXRoU3RhdHMsIElucHV0QXR0cmlidXRlcywgT3Blbk1vZGUsIFJlYWRGaWxlT3B0aW9ucywgU0ZUUFdyYXBwZXIsIFN0YXRzLCBUcmFuc2Zlck9wdGlvbnMsIFdyaXRlRmlsZU9wdGlvbnMgfSBmcm9tIFwic3NoMlwiXG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZVN0YXQge1xuICAgIHBhdGg6IHN0cmluZyxcbiAgICBmaWxlbmFtZTogc3RyaW5nLFxuICAgIG1vZGU6IG51bWJlcixcbiAgICB1aWQ6IG51bWJlcixcbiAgICBnaWQ6IG51bWJlcixcbiAgICBzaXplOiBudW1iZXIsXG4gICAgYXRpbWU6IG51bWJlcixcbiAgICBtdGltZTogbnVtYmVyLFxuICAgIGlzRGlyZWN0b3J5OiBib29sZWFuXG4gICAgaXNGaWxlOiBib29sZWFuXG4gICAgaXNCbG9ja0RldmljZTogYm9vbGVhblxuICAgIGlzQ2hhcmFjdGVyRGV2aWNlOiBib29sZWFuXG4gICAgaXNTeW1ib2xpY0xpbms6IGJvb2xlYW5cbiAgICBpc0ZJRk86IGJvb2xlYW5cbiAgICBpc1NvY2tldDogYm9vbGVhblxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEZpbGVFbnRyeVN0YXRlKFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBzdGF0czogRmlsZUVudHJ5V2l0aFN0YXRzXG4pOiBGaWxlU3RhdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcGF0aDogcGF0aCxcbiAgICAgICAgZmlsZW5hbWU6IHN0YXRzLmZpbGVuYW1lLFxuICAgICAgICBtb2RlOiBzdGF0cy5hdHRycy5tb2RlLFxuICAgICAgICB1aWQ6IHN0YXRzLmF0dHJzLnVpZCxcbiAgICAgICAgZ2lkOiBzdGF0cy5hdHRycy5naWQsXG4gICAgICAgIHNpemU6IHN0YXRzLmF0dHJzLnNpemUsXG4gICAgICAgIGF0aW1lOiBzdGF0cy5hdHRycy5hdGltZSxcbiAgICAgICAgbXRpbWU6IHN0YXRzLmF0dHJzLm10aW1lLFxuICAgICAgICBpc0RpcmVjdG9yeTogc3RhdHMuYXR0cnMuaXNEaXJlY3RvcnkoKSxcbiAgICAgICAgaXNGaWxlOiBzdGF0cy5hdHRycy5pc0ZpbGUoKSxcbiAgICAgICAgaXNCbG9ja0RldmljZTogc3RhdHMuYXR0cnMuaXNCbG9ja0RldmljZSgpLFxuICAgICAgICBpc0NoYXJhY3RlckRldmljZTogc3RhdHMuYXR0cnMuaXNDaGFyYWN0ZXJEZXZpY2UoKSxcbiAgICAgICAgaXNTeW1ib2xpY0xpbms6IHN0YXRzLmF0dHJzLmlzU3ltYm9saWNMaW5rKCksXG4gICAgICAgIGlzRklGTzogc3RhdHMuYXR0cnMuaXNGSUZPKCksXG4gICAgICAgIGlzU29ja2V0OiBzdGF0cy5hdHRycy5pc1NvY2tldCgpLFxuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBTRlRQUHJvbWlzZUludGVyZmFjZSB7XG4gICAgLyoqXG4gICAgICogKENsaWVudC1vbmx5KVxuICAgICAqIERvd25sb2FkcyBhIGZpbGUgYXQgYHJlbW90ZVBhdGhgIHRvIGBsb2NhbFBhdGhgIHVzaW5nIHBhcmFsbGVsIHJlYWRzIGZvciBmYXN0ZXIgdGhyb3VnaHB1dC5cbiAgICAgKi9cbiAgICBmYXN0R2V0KHJlbW90ZVBhdGg6IHN0cmluZywgbG9jYWxQYXRoOiBzdHJpbmcsIG9wdGlvbnM/OiBUcmFuc2Zlck9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+XG5cbiAgICAvKipcbiAgICAgKiAoQ2xpZW50LW9ubHkpXG4gICAgICogVXBsb2FkcyBhIGZpbGUgZnJvbSBgbG9jYWxQYXRoYCB0byBgcmVtb3RlUGF0aGAgdXNpbmcgcGFyYWxsZWwgcmVhZHMgZm9yIGZhc3RlciB0aHJvdWdocHV0LlxuICAgICAqL1xuICAgIGZhc3RQdXQobG9jYWxQYXRoOiBzdHJpbmcsIHJlbW90ZVBhdGg6IHN0cmluZywgb3B0aW9ucz86IFRyYW5zZmVyT3B0aW9ucyk6IFByb21pc2U8dm9pZD5cblxuICAgIC8qKlxuICAgICAqIChDbGllbnQtb25seSlcbiAgICAgKiBSZWFkcyBhIGZpbGUgaW4gbWVtb3J5IGFuZCByZXR1cm5zIGl0cyBjb250ZW50c1xuICAgICAqL1xuICAgIHJlYWRGaWxlPFxuICAgICAgICBPIGV4dGVuZHMgUmVhZEZpbGVPcHRpb25zIHwgQnVmZmVyRW5jb2RpbmdcbiAgICA+KFxuICAgICAgICByZW1vdGVQYXRoOiBzdHJpbmcsXG4gICAgICAgIG9wdGlvbnM/OiBPLFxuICAgICk6IFByb21pc2U8XG4gICAgICAgIE8gZXh0ZW5kcyBCdWZmZXJFbmNvZGluZyA/XG4gICAgICAgIHN0cmluZyA6XG4gICAgICAgIE8gZXh0ZW5kcyB7IGVuY29kZWluZzogQnVmZmVyRW5jb2RpbmcgfSA/XG4gICAgICAgIHN0cmluZyA6XG4gICAgICAgIEJ1ZmZlclxuICAgID5cblxuICAgIC8qKlxuICAgICAqIChDbGllbnQtb25seSlcbiAgICAgKiBXcml0ZXMgZGF0YSB0byBhIGZpbGVcbiAgICAgKi9cbiAgICB3cml0ZUZpbGU8XG4gICAgICAgIE8gZXh0ZW5kcyBXcml0ZUZpbGVPcHRpb25zIHwgQnVmZmVyRW5jb2RpbmcsXG4gICAgPihcbiAgICAgICAgcmVtb3RlUGF0aDogc3RyaW5nLFxuICAgICAgICBkYXRhOiAoXG4gICAgICAgICAgICBPIGV4dGVuZHMgQnVmZmVyRW5jb2RpbmcgP1xuICAgICAgICAgICAgc3RyaW5nIDpcbiAgICAgICAgICAgIE8gZXh0ZW5kcyB7IGVuY29kZWluZzogQnVmZmVyRW5jb2RpbmcgfSA/XG4gICAgICAgICAgICBzdHJpbmcgOlxuICAgICAgICAgICAgQnVmZmVyXG4gICAgICAgICksXG4gICAgICAgIG9wdGlvbnM/OiBXcml0ZUZpbGVPcHRpb25zIHwgQnVmZmVyRW5jb2RpbmdcbiAgICApOiBQcm9taXNlPHZvaWQ+XG5cbiAgICAvKipcbiAgICAgKiAoQ2xpZW50LW9ubHkpXG4gICAgICogQXBwZW5kcyBkYXRhIHRvIGEgZmlsZVxuICAgICAqL1xuICAgIGFwcGVuZEZpbGU8XG4gICAgICAgIE8gZXh0ZW5kcyBXcml0ZUZpbGVPcHRpb25zIHwgQnVmZmVyRW5jb2RpbmcsXG4gICAgPihcbiAgICAgICAgcmVtb3RlUGF0aDogc3RyaW5nLFxuICAgICAgICBkYXRhOiAoXG4gICAgICAgICAgICBPIGV4dGVuZHMgQnVmZmVyRW5jb2RpbmcgP1xuICAgICAgICAgICAgc3RyaW5nIDpcbiAgICAgICAgICAgIE8gZXh0ZW5kcyB7IGVuY29kZWluZzogQnVmZmVyRW5jb2RpbmcgfSA/XG4gICAgICAgICAgICBzdHJpbmcgOlxuICAgICAgICAgICAgQnVmZmVyXG4gICAgICAgICksXG4gICAgICAgIG9wdGlvbnM/OiBXcml0ZUZpbGVPcHRpb25zXG4gICAgKTogUHJvbWlzZTx2b2lkPlxuXG4gICAgLyoqXG4gICAgICogKENsaWVudC1vbmx5KVxuICAgICAqIE9wZW5zIGEgZmlsZSBgZmlsZW5hbWVgIGZvciBgbW9kZWAgd2l0aCBvcHRpb25hbCBgYXR0cmlidXRlc2AuXG4gICAgICovXG4gICAgb3BlbihcbiAgICAgICAgZmlsZW5hbWU6IHN0cmluZyxcbiAgICAgICAgbW9kZTogbnVtYmVyIHwgT3Blbk1vZGUsXG4gICAgICAgIGF0dHJpYnV0ZXM6IElucHV0QXR0cmlidXRlcyB8IHN0cmluZyB8IG51bWJlcixcbiAgICApOiBQcm9taXNlPEJ1ZmZlcj5cblxuICAgIC8qKlxuICAgICAqIChDbGllbnQtb25seSlcbiAgICAgKiBSZWFkcyBgbGVuZ3RoYCBieXRlcyBmcm9tIHRoZSByZXNvdXJjZSBhc3NvY2lhdGVkIHdpdGggYGhhbmRsZWAgc3RhcnRpbmcgYXQgYHBvc2l0aW9uYFxuICAgICAqIGFuZCBzdG9yZXMgdGhlIGJ5dGVzIGluIGBidWZmZXJgIHN0YXJ0aW5nIGF0IGBvZmZzZXRgLlxuICAgICAqL1xuICAgIHJlYWQoXG4gICAgICAgIGhhbmRsZTogQnVmZmVyLFxuICAgICAgICBidWZmZXI6IEJ1ZmZlcixcbiAgICAgICAgb2Zmc2V0OiBudW1iZXIsXG4gICAgICAgIGxlbmd0aDogbnVtYmVyLFxuICAgICAgICBwb3NpdGlvbjogbnVtYmVyLFxuICAgICk6IFByb21pc2U8W251bWJlciwgQnVmZmVyLCBudW1iZXJdPlxuXG4gICAgLyoqXG4gICAgICogKENsaWVudC1vbmx5KVxuICAgICAqL1xuICAgIHdyaXRlKGhhbmRsZTogQnVmZmVyLCBidWZmZXI6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIsIGxlbmd0aDogbnVtYmVyLCBwb3NpdGlvbjogbnVtYmVyKTogUHJvbWlzZTx2b2lkPlxuXG4gICAgLyoqXG4gICAgICogKENsaWVudC1vbmx5KVxuICAgICAqIFJldHJpZXZlcyBhdHRyaWJ1dGVzIGZvciB0aGUgcmVzb3VyY2UgYXNzb2NpYXRlZCB3aXRoIGBoYW5kbGVgLlxuICAgICAqL1xuICAgIGZzdGF0KGhhbmRsZTogQnVmZmVyKTogUHJvbWlzZTxTdGF0cz5cblxuICAgIC8qKlxuICAgICAqIChDbGllbnQtb25seSlcbiAgICAgKiBTZXRzIHRoZSBhdHRyaWJ1dGVzIGRlZmluZWQgaW4gYGF0dHJpYnV0ZXNgIGZvciB0aGUgcmVzb3VyY2UgYXNzb2NpYXRlZCB3aXRoIGBoYW5kbGVgLlxuICAgICAqL1xuICAgIGZzZXRzdGF0KGhhbmRsZTogQnVmZmVyLCBhdHRyaWJ1dGVzOiBJbnB1dEF0dHJpYnV0ZXMpOiBQcm9taXNlPHZvaWQ+XG5cbiAgICAvKipcbiAgICAgKiAoQ2xpZW50LW9ubHkpXG4gICAgICogU2V0cyB0aGUgYWNjZXNzIHRpbWUgYW5kIG1vZGlmaWVkIHRpbWUgZm9yIHRoZSByZXNvdXJjZSBhc3NvY2lhdGVkIHdpdGggYGhhbmRsZWAuXG4gICAgICovXG4gICAgZnV0aW1lcyhoYW5kbGU6IEJ1ZmZlciwgYXRpbWU6IG51bWJlciB8IERhdGUsIG10aW1lOiBudW1iZXIgfCBEYXRlKTogUHJvbWlzZTx2b2lkPlxuXG4gICAgLyoqXG4gICAgICogKENsaWVudC1vbmx5KVxuICAgICAqIFNldHMgdGhlIG93bmVyIGZvciB0aGUgcmVzb3VyY2UgYXNzb2NpYXRlZCB3aXRoIGBoYW5kbGVgLlxuICAgICAqL1xuICAgIGZjaG93bihoYW5kbGU6IEJ1ZmZlciwgdWlkOiBudW1iZXIsIGdpZDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPlxuXG4gICAgLyoqXG4gICAgICogKENsaWVudC1vbmx5KVxuICAgICAqIFNldHMgdGhlIG1vZGUgZm9yIHRoZSByZXNvdXJjZSBhc3NvY2lhdGVkIHdpdGggYGhhbmRsZWAuXG4gICAgICovXG4gICAgZmNobW9kKGhhbmRsZTogQnVmZmVyLCBtb2RlOiBudW1iZXIgfCBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+XG5cbiAgICAvKipcbiAgICAgKiAoQ2xpZW50LW9ubHkpXG4gICAgICogT3BlbnMgYSBkaXJlY3RvcnkgYHBhdGhgLlxuICAgICAqL1xuICAgIG9wZW5kaXIocGF0aDogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXI+XG5cbiAgICAvKipcbiAgICAgKiAoQ2xpZW50LW9ubHkpXG4gICAgICogUmV0cmlldmVzIGEgZGlyZWN0b3J5IGxpc3RpbmcuXG4gICAgICovXG4gICAgcmVhZGRpcihsb2NhdGlvbjogc3RyaW5nIHwgQnVmZmVyKTogUHJvbWlzZTxGaWxlU3RhdFtdPlxuXG4gICAgLyoqXG4gICAgICogKENsaWVudC1vbmx5KVxuICAgICAqIFJlbW92ZXMgdGhlIGZpbGUvc3ltbGluayBhdCBgcGF0aGAuXG4gICAgICovXG4gICAgdW5saW5rKHBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD5cblxuICAgIC8qKlxuICAgICAqIChDbGllbnQtb25seSlcbiAgICAgKiBSZW5hbWVzL21vdmVzIGBzcmNQYXRoYCB0byBgZGVzdFBhdGhgLlxuICAgICAqL1xuICAgIHJlbmFtZShzcmNQYXRoOiBzdHJpbmcsIGRlc3RQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+XG5cbiAgICAvKipcbiAgICAgKiAoQ2xpZW50LW9ubHkpXG4gICAgICogQ3JlYXRlcyBhIG5ldyBkaXJlY3RvcnkgYHBhdGhgLlxuICAgICAqL1xuICAgIG1rZGlyKHBhdGg6IHN0cmluZywgYXR0cmlidXRlczogSW5wdXRBdHRyaWJ1dGVzKTogUHJvbWlzZTx2b2lkPlxuXG4gICAgLyoqXG4gICAgICogKENsaWVudC1vbmx5KVxuICAgICAqIENyZWF0ZXMgYSBuZXcgZGlyZWN0b3J5IGBwYXRoYC5cbiAgICAgKi9cbiAgICBta2RpcihwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+XG5cbiAgICAvKipcbiAgICAgKiAoQ2xpZW50LW9ubHkpXG4gICAgICogUmVtb3ZlcyB0aGUgZGlyZWN0b3J5IGF0IGBwYXRoYC5cbiAgICAgKi9cbiAgICBybWRpcihwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+XG5cbiAgICAvKipcbiAgICAgKiAoQ2xpZW50LW9ubHkpXG4gICAgICogUmV0cmlldmVzIGF0dHJpYnV0ZXMgZm9yIGBwYXRoYC5cbiAgICAgKi9cbiAgICBzdGF0KHBhdGg6IHN0cmluZyk6IFByb21pc2U8U3RhdHM+XG5cbiAgICAvKipcbiAgICAgKiAoQ2xpZW50LW9ubHkpXG4gICAgICogYHBhdGhgIGV4aXN0cy5cbiAgICAgKi9cbiAgICBleGlzdHMocGF0aDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPlxuXG4gICAgLyoqXG4gICAgICogKENsaWVudC1vbmx5KVxuICAgICAqIFJldHJpZXZlcyBhdHRyaWJ1dGVzIGZvciBgcGF0aGAuIElmIGBwYXRoYCBpcyBhIHN5bWxpbmssIHRoZSBsaW5rIGl0c2VsZiBpcyBzdGF0J2VkXG4gICAgICogaW5zdGVhZCBvZiB0aGUgcmVzb3VyY2UgaXQgcmVmZXJzIHRvLlxuICAgICAqL1xuICAgIGxzdGF0KHBhdGg6IHN0cmluZyk6IFByb21pc2U8U3RhdHM+XG5cbiAgICAvKipcbiAgICAgKiAoQ2xpZW50LW9ubHkpXG4gICAgICogU2V0cyB0aGUgYXR0cmlidXRlcyBkZWZpbmVkIGluIGBhdHRyaWJ1dGVzYCBmb3IgYHBhdGhgLlxuICAgICAqL1xuICAgIHNldHN0YXQocGF0aDogc3RyaW5nLCBhdHRyaWJ1dGVzOiBJbnB1dEF0dHJpYnV0ZXMpOiBQcm9taXNlPHZvaWQ+XG5cbiAgICAvKipcbiAgICAgKiAoQ2xpZW50LW9ubHkpXG4gICAgICogU2V0cyB0aGUgYWNjZXNzIHRpbWUgYW5kIG1vZGlmaWVkIHRpbWUgZm9yIGBwYXRoYC5cbiAgICAgKi9cbiAgICB1dGltZXMocGF0aDogc3RyaW5nLCBhdGltZTogbnVtYmVyIHwgRGF0ZSwgbXRpbWU6IG51bWJlciB8IERhdGUpOiBQcm9taXNlPHZvaWQ+XG5cbiAgICAvKipcbiAgICAgKiAoQ2xpZW50LW9ubHkpXG4gICAgICogU2V0cyB0aGUgb3duZXIgZm9yIGBwYXRoYC5cbiAgICAgKi9cbiAgICBjaG93bihwYXRoOiBzdHJpbmcsIHVpZDogbnVtYmVyLCBnaWQ6IG51bWJlcik6IFByb21pc2U8dm9pZD5cblxuICAgIC8qKlxuICAgICAqIChDbGllbnQtb25seSlcbiAgICAgKiBTZXRzIHRoZSBtb2RlIGZvciBgcGF0aGAuXG4gICAgICovXG4gICAgY2htb2QocGF0aDogc3RyaW5nLCBtb2RlOiBudW1iZXIgfCBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+XG5cbiAgICAvKipcbiAgICAgKiAoQ2xpZW50LW9ubHkpXG4gICAgICogUmV0cmlldmVzIHRoZSB0YXJnZXQgZm9yIGEgc3ltbGluayBhdCBgcGF0aGAuXG4gICAgICovXG4gICAgcmVhZGxpbmsocGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+XG5cbiAgICAvKipcbiAgICAgKiAoQ2xpZW50LW9ubHkpXG4gICAgICogQ3JlYXRlcyBhIHN5bWxpbmsgYXQgYGxpbmtQYXRoYCB0byBgdGFyZ2V0UGF0aGAuXG4gICAgICovXG4gICAgc3ltbGluayh0YXJnZXRQYXRoOiBzdHJpbmcsIGxpbmtQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+XG5cbiAgICAvKipcbiAgICAgKiAoQ2xpZW50LW9ubHkpXG4gICAgICogUmVzb2x2ZXMgYHBhdGhgIHRvIGFuIGFic29sdXRlIHBhdGguXG4gICAgICovXG4gICAgcmVhbHBhdGgocGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+XG5cbiAgICAvKipcbiAgICAgKiAoQ2xpZW50LW9ubHksIE9wZW5TU0ggZXh0ZW5zaW9uKVxuICAgICAqIFBlcmZvcm1zIFBPU0lYIHJlbmFtZSgzKSBmcm9tIGBzcmNQYXRoYCB0byBgZGVzdFBhdGhgLlxuICAgICAqL1xuICAgIGV4dF9vcGVuc3NoX3JlbmFtZShzcmNQYXRoOiBzdHJpbmcsIGRlc3RQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+XG5cbiAgICAvKipcbiAgICAgKiAoQ2xpZW50LW9ubHksIE9wZW5TU0ggZXh0ZW5zaW9uKVxuICAgICAqIFBlcmZvcm1zIFBPU0lYIHN0YXR2ZnMoMikgb24gYHBhdGhgLlxuICAgICAqL1xuICAgIGV4dF9vcGVuc3NoX3N0YXR2ZnMocGF0aDogc3RyaW5nKTogUHJvbWlzZTxhbnk+XG5cbiAgICAvKipcbiAgICAgKiAoQ2xpZW50LW9ubHksIE9wZW5TU0ggZXh0ZW5zaW9uKVxuICAgICAqIFBlcmZvcm1zIFBPU0lYIGZzdGF0dmZzKDIpIG9uIG9wZW4gaGFuZGxlIGBoYW5kbGVgLlxuICAgICAqL1xuICAgIGV4dF9vcGVuc3NoX2ZzdGF0dmZzKGhhbmRsZTogQnVmZmVyKTogUHJvbWlzZTxhbnk+XG5cbiAgICAvKipcbiAgICAgKiAoQ2xpZW50LW9ubHksIE9wZW5TU0ggZXh0ZW5zaW9uKVxuICAgICAqIFBlcmZvcm1zIFBPU0lYIGxpbmsoMikgdG8gY3JlYXRlIGEgaGFyZCBsaW5rIHRvIGB0YXJnZXRQYXRoYCBhdCBgbGlua1BhdGhgLlxuICAgICAqL1xuICAgIGV4dF9vcGVuc3NoX2hhcmRsaW5rKHRhcmdldFBhdGg6IHN0cmluZywgbGlua1BhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD5cblxuICAgIC8qKlxuICAgICAqIChDbGllbnQtb25seSwgT3BlblNTSCBleHRlbnNpb24pXG4gICAgICogUGVyZm9ybXMgUE9TSVggZnN5bmMoMykgb24gdGhlIG9wZW4gaGFuZGxlIGBoYW5kbGVgLlxuICAgICAqL1xuICAgIGV4dF9vcGVuc3NoX2ZzeW5jKGhhbmRsZTogQnVmZmVyKTogUHJvbWlzZTxhbnk+XG5cbiAgICAvKipcbiAgICAgKiAoQ2xpZW50LW9ubHksIE9wZW5TU0ggZXh0ZW5zaW9uKVxuICAgICAqIFNpbWlsYXIgdG8gc2V0c3RhdCgpLCBidXQgaW5zdGVhZCBzZXRzIGF0dHJpYnV0ZXMgb24gc3ltbGlua3MuXG4gICAgICovXG4gICAgZXh0X29wZW5zc2hfbHNldHN0YXQocGF0aDogc3RyaW5nLCBhdHRyczogSW5wdXRBdHRyaWJ1dGVzKTogUHJvbWlzZTx2b2lkPlxuICAgIGV4dF9vcGVuc3NoX2xzZXRzdGF0KHBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD5cblxuICAgIC8qKlxuICAgICAqIChDbGllbnQtb25seSwgT3BlblNTSCBleHRlbnNpb24pXG4gICAgICogU2ltaWxhciB0byByZWFscGF0aCgpLCBidXQgc3VwcG9ydHMgdGlsZGUtZXhwYW5zaW9uLCBpLmUuIFwiflwiLCBcIn4vLi4uXCIgYW5kIFwifnVzZXIvLi4uXCIuIFRoZXNlIHBhdGhzIGFyZSBleHBhbmRlZCB1c2luZyBzaGVsbC1saWtlIHJ1bGVzLlxuICAgICAqL1xuICAgIGV4dF9vcGVuc3NoX2V4cGFuZFBhdGgocGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+XG5cbiAgICAvKipcbiAgICAgKiAoQ2xpZW50LW9ubHkpXG4gICAgICogUGVyZm9ybXMgYSByZW1vdGUgZmlsZSBjb3B5LiBJZiBsZW5ndGggaXMgMCwgdGhlbiB0aGUgc2VydmVyIHdpbGwgcmVhZCBmcm9tIHNyY0hhbmRsZSB1bnRpbCBFT0YgaXMgcmVhY2hlZC5cbiAgICAgKi9cbiAgICBleHRfY29weV9kYXRhKFxuICAgICAgICBoYW5kbGU6IEJ1ZmZlcixcbiAgICAgICAgc3JjT2Zmc2V0OiBudW1iZXIsXG4gICAgICAgIGxlbjogbnVtYmVyLFxuICAgICAgICBkc3RIYW5kbGU6IEJ1ZmZlcixcbiAgICAgICAgZHN0T2Zmc2V0OiBudW1iZXIsXG4gICAgKTogUHJvbWlzZTx2b2lkPlxufVxuXG5jb25zdCB2b2lkTWV0aG9kcyA9IFtcbiAgICBcImZhc3RHZXRcIixcbiAgICBcImZhc3RQdXRcIixcbiAgICBcIndyaXRlRmlsZVwiLFxuICAgIFwiYXBwZW5kRmlsZVwiLFxuICAgIFwid3JpdGVcIixcbiAgICBcImZzZXRzdGF0XCIsXG4gICAgXCJmdXRpbWVzXCIsXG4gICAgXCJmY2hvd25cIixcbiAgICBcImZjaG1vZFwiLFxuICAgIFwidW5saW5rXCIsXG4gICAgXCJyZW5hbWVcIixcbiAgICBcIm1rZGlyXCIsXG4gICAgXCJta2RpclwiLFxuICAgIFwicm1kaXJcIixcbiAgICBcInNldHN0YXRcIixcbiAgICBcInV0aW1lc1wiLFxuICAgIFwiY2hvd25cIixcbiAgICBcImNobW9kXCIsXG4gICAgXCJzeW1saW5rXCIsXG4gICAgXCJleHRfb3BlbnNzaF9yZW5hbWVcIixcbiAgICBcImV4dF9vcGVuc3NoX2hhcmRsaW5rXCIsXG4gICAgXCJleHRfb3BlbnNzaF9sc2V0c3RhdFwiLFxuICAgIFwiZXh0X29wZW5zc2hfbHNldHN0YXRcIixcbl1cblxuY29uc3QgYnVmZmVyTWV0aG9kcyA9IFtcbiAgICBcInJlYWRGaWxlXCIsXG4gICAgXCJvcGVuXCIsXG4gICAgXCJvcGVuZGlyXCIsXG5dXG5cbmNvbnN0IHN0cmluZ01ldGhvZHMgPSBbXG4gICAgXCJyZWFkbGlua1wiLFxuICAgIFwicmVhbHBhdGhcIixcbiAgICBcImV4dF9vcGVuc3NoX2V4cGFuZFBhdGhcIixcbl1cblxuY29uc3Qgc3RhdHNNZXRob2RzID0gW1xuICAgIFwiZnN0YXRcIixcbiAgICBcImxzdGF0XCIsXG4gICAgXCJzdGF0XCIsXG5dXG5cbmNvbnN0IGFueU1ldGhvZHMgPSBbXG4gICAgXCJleHRfb3BlbnNzaF9zdGF0dmZzXCIsXG4gICAgXCJleHRfb3BlbnNzaF9mc3RhdHZmc1wiLFxuICAgIFwiZXh0X29wZW5zc2hfZnN5bmNcIixcbl1cblxuY29uc3QgYm9vbGVhbk1ldGhvZHMgPSBbXG4gICAgXCJleGlzdHNcIixcbl1cblxuY29uc3Qgc2luZ2xlVmFsdWVFcnJvckNhbGxiYWNrcyA9IFtcbiAgICAuLi5idWZmZXJNZXRob2RzLFxuICAgIC4uLnN0cmluZ01ldGhvZHMsXG4gICAgLi4uc3RhdHNNZXRob2RzLFxuICAgIC4uLmFueU1ldGhvZHMsXG4gICAgLi4uYm9vbGVhbk1ldGhvZHMsXG5dXG5cbmNvbnN0IGZzU3RhdHNNZXRob2RzID0gW1xuICAgIFwicmVhZGRpclwiLFxuXVxuXG5jb25zdCBvdGhlck1ldGhvZHMgPSBbXG4gICAgXCJyZWFkXCJcbl1cblxuXG5leHBvcnQgdHlwZSBTRlRQUHJvbWlzZVdyYXBwZXIgPSBTRlRQUHJvbWlzZUludGVyZmFjZSAmIE9taXQ8U0ZUUFdyYXBwZXIsIGtleW9mIFNGVFBQcm9taXNlSW50ZXJmYWNlPlxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU0ZUUFByb21pc2VXcmFwcGVyKFxuICAgIHNvdXJjZVdyYXBwZXI6IFNGVFBXcmFwcGVyXG4pOiBTRlRQUHJvbWlzZVdyYXBwZXIge1xuICAgIC8vIHByb21pc2lmeSBtZXRob2RzXG5cbiAgICBjb25zdCByZXQ6IGFueSA9IHNvdXJjZVdyYXBwZXJcbiAgICBcbiAgICBmb3IgKGNvbnN0IHZvaWRNZXRob2Qgb2Ygdm9pZE1ldGhvZHMpIHtcbiAgICAgICAgY29uc3QgYWx0TmFtZSA9IHZvaWRNZXRob2QgKyBcIjJcIlxuICAgICAgICByZXRbYWx0TmFtZV0gPSByZXRbdm9pZE1ldGhvZF1cbiAgICAgICAgcmV0W3ZvaWRNZXRob2RdID0gKC4uLnBhcmFtczogYW55W10pID0+IG5ldyBQcm9taXNlPHZvaWQ+KFxuICAgICAgICAgICAgKHJlcykgPT4gcmV0W2FsdE5hbWVdKFxuICAgICAgICAgICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgICAgICAgICByZXNcbiAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgYnVmZmVyTWV0aG9kIG9mIHNpbmdsZVZhbHVlRXJyb3JDYWxsYmFja3MpIHtcbiAgICAgICAgY29uc3QgYWx0TmFtZSA9IGJ1ZmZlck1ldGhvZCArIFwiMlwiXG4gICAgICAgIHJldFthbHROYW1lXSA9IHJldFtidWZmZXJNZXRob2RdXG4gICAgICAgIHJldFtidWZmZXJNZXRob2RdID0gKC4uLnBhcmFtczogYW55W10pID0+IG5ldyBQcm9taXNlPGFueT4oXG4gICAgICAgICAgICAocmVzLCByZWopID0+IHJldFthbHROYW1lXShcbiAgICAgICAgICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgICAgICAgICAgKGVycjogYW55LCB2YWx1ZTogYW55KSA9PiBlcnIgPyByZWooZXJyKSA6IHJlcyh2YWx1ZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgIH1cblxuICAgIHJldC5yZWFkZGlyMiA9IHJldC5yZWFkZGlyXG4gICAgcmV0LnJlYWRkaXIgPSAoLi4ucGFyYW1zOiBhbnlbXSkgPT4gbmV3IFByb21pc2U8RmlsZVN0YXRbXT4oXG4gICAgICAgIChyZXMsIHJlaikgPT4gcmV0LnJlYWRkaXIyKFxuICAgICAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICAgICAgKGVycjogYW55LCB2YWx1ZTogRmlsZUVudHJ5V2l0aFN0YXRzW10pID0+IGVyciA/IHJlaihlcnIpIDogcmVzKFxuICAgICAgICAgICAgICAgIHZhbHVlLm1hcChcbiAgICAgICAgICAgICAgICAgICAgKHYpID0+IGNvbnZlcnRGaWxlRW50cnlTdGF0ZShwYXJhbXNbMF0sIHYpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICApXG4gICAgKVxuXG4gICAgcmV0LnJlYWQyID0gcmV0LnJlYWRcbiAgICByZXQucmVhZCA9ICguLi5wYXJhbXM6IGFueVtdKSA9PiBuZXcgUHJvbWlzZTxbbnVtYmVyLCBCdWZmZXIsIG51bWJlcl0+KFxuICAgICAgICAocmVzLCByZWopID0+IHJldC5yZWFkMihcbiAgICAgICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgICAgIChlcnI6IEVycm9yIHwgdW5kZWZpbmVkLCByZWFkOiBudW1iZXIsIGJ1ZjogQnVmZmVyLCBwb3M6IG51bWJlcikgPT4gZXJyID8gcmVqKGVycikgOiByZXMoW3JlYWQsIGJ1ZiwgcG9zXSlcbiAgICAgICAgKVxuICAgIClcblxuICAgIHJldHVybiByZXRcbn0iXX0=