"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.methods = void 0; exports.load = load; exports.unload = unload; function load() { } function unload() { } let _originalConsoleError = () => { }; let _caughtLogs = []; exports.methods = { async startCatchLogging() { _caughtLogs = []; _originalConsoleError = console.error; console.error = (...data) => { const msg = data.map(a => a instanceof Error ? a.message : a).join(' '); _caughtLogs.push(msg); _originalConsoleError(...data); }; }, async stopCatchLogging() { console.error = _originalConsoleError; return _caughtLogs; }, async createPrefabFromNode(nodeUuid, path) { const cce = globalThis['cce']; if (!cce || !cce.Prefab || !cce.Prefab.createPrefabAssetFromNode) { throw new Error('CCE API not found'); } return await cce.Prefab.createPrefabAssetFromNode(nodeUuid, path); }, async applyPrefabByNode(nodeUuid) { try { const cce = globalThis['cce']; if (!cce || !cce.Prefab || !cce.Prefab.applyPrefab) { throw new Error('CCE API not found'); } const success = await cce.Prefab.applyPrefab(nodeUuid); if (!success) { throw new Error('Failed to apply prefab'); } else { return null; } } catch (error) { return error instanceof Error ? error.message : String(error); } }, async unlinkPrefabByNode(nodeUuid, recursive) { try { const cce = globalThis['cce']; if (!cce || !cce.Prefab || !cce.Prefab.unWrapPrefabInstance) { throw new Error('CCE API not found'); } const success = await cce.Prefab.unWrapPrefabInstance(nodeUuid, recursive); if (!success) { throw new Error('Failed to unlink prefab'); } else { return null; } } catch (error) { return error instanceof Error ? error.message : String(error); } }, async createOffscreenCanvas(width, height) { const canvas = document.createElement('canvas'); canvas.width = width; canvas.height = height; return canvas; }, async captureScreenshot(imageSize = { width: 512, height: 512 }, jpegQuality = 80, cameraPosition, targetPosition, orthographic = false, orthographicSize = 10) { return new Promise((resolve, reject) => { var _a, _b, _c, _d, _e, _f, _g, _h; const cce = globalThis['cce']; const cc = globalThis['cc']; let prevWidth; let prevHeight; // Optional: Save camera state let prevCamPos; let prevCamRot; let prevProjection; let prevOrthoSize; // Apply Camera Changes try { if (cce && cce.Camera && cce.Camera.camera) { const camNode = cce.Camera.camera.node; if (camNode) { prevCamPos = camNode.position.clone(); prevCamRot = camNode.rotation.clone(); prevProjection = cce.Camera.camera.projection; prevOrthoSize = cce.Camera.camera.orthoSize; cce.Camera.camera.projection = orthographic ? cc.Camera.ProjectionType.ORTHO : cc.Camera.ProjectionType.PERSPECTIVE; if (orthographic) { cce.Camera.camera.orthoSize = orthographicSize; } if (cameraPosition) { camNode.setPosition(new cc.Vec3((_a = cameraPosition.x) !== null && _a !== void 0 ? _a : 0, (_b = cameraPosition.y) !== null && _b !== void 0 ? _b : 0, (_c = cameraPosition.z) !== null && _c !== void 0 ? _c : 0)); } if (targetPosition) { camNode.lookAt(new cc.Vec3((_d = targetPosition.x) !== null && _d !== void 0 ? _d : 0, (_e = targetPosition.y) !== null && _e !== void 0 ? _e : 0, (_f = targetPosition.z) !== null && _f !== void 0 ? _f : 0)); } if (cce.Camera.refresh) cce.Camera.refresh(); } } } catch (e) { console.warn("[captureScreenshot] Failed to modify camera:", e); } if (cc.director && cc.director.root) { prevWidth = ((_g = cc.director.root.mainWindow) === null || _g === void 0 ? void 0 : _g.width) || 0; prevHeight = ((_h = cc.director.root.mainWindow) === null || _h === void 0 ? void 0 : _h.height) || 0; cc.director.root.resize(imageSize.width, imageSize.height); } else { return reject(new Error("cc.game.canvas not found or is not an HTMLCanvasElement")); } try { if (cce && cce.Engine) { cce.Engine.repaintInEditMode(); } } catch (e) { console.warn("Failed to repaintInEditMode:", e); } cc.director.once(cc.Director.EVENT_AFTER_RENDER, () => { try { if (cc.game && cc.game.canvas && (cc.game.canvas instanceof HTMLCanvasElement)) { const dataURL = cc.game.canvas.toDataURL('image/jpeg', jpegQuality / 100); const base64 = dataURL.replace(/^data:image\/\w+;base64,/, ''); resolve(base64); } else { reject(new Error("cc.game.canvas not found or is not an HTMLCanvasElement")); } } catch (error) { reject(new Error(error.message || String(error))); } finally { // Restore previous size if (cc.director && cc.director.root) { cc.director.root.resize(prevWidth, prevHeight); } // Restore camera setTimeout(() => { if (cce && cce.Camera && cce.Camera.camera && cce.Camera.camera.node) { if (prevCamPos) cce.Camera.camera.node.setPosition(prevCamPos); if (prevCamRot) cce.Camera.camera.node.setRotation(prevCamRot); if (prevProjection !== undefined) cce.Camera.camera.projection = prevProjection; if (prevOrthoSize !== undefined) cce.Camera.camera.orthoSize = prevOrthoSize; if (cce.Camera.refresh) cce.Camera.refresh(); } }, 50); } }); }); } }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NlbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zb3VyY2Uvc2NlbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsb0JBQTBCO0FBQzFCLHdCQUE0QjtBQUQ1QixTQUFnQixJQUFJLEtBQUssQ0FBQztBQUMxQixTQUFnQixNQUFNLEtBQUssQ0FBQztBQUM1QixJQUFJLHFCQUFxQixHQUFpQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEUsSUFBSSxXQUFXLEdBQWEsRUFBRSxDQUFDO0FBRWxCLFFBQUEsT0FBTyxHQUFHO0lBQ25CLEtBQUssQ0FBQyxpQkFBaUI7UUFDbkIsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUNqQixxQkFBcUIsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ3RDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQWUsRUFBRSxFQUFFO1lBQ25DLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDeEUsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN0QixxQkFBcUIsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FBQTtJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsZ0JBQWdCO1FBQ2xCLE9BQU8sQ0FBQyxLQUFLLEdBQUcscUJBQXFCLENBQUM7UUFDdEMsT0FBTyxXQUFXLENBQUM7SUFDdkIsQ0FBQztJQUVELEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxRQUFnQixFQUFFLElBQVk7UUFDckQsTUFBTSxHQUFHLEdBQUksVUFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV2QyxJQUFJLENBQUMsR0FBRyxJQUFJLENB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QUMsQ0FBQztnQkFDWCxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIGxvYWQoKSB7IH1cbmV4cG9ydCBmdW5jdGlvbiB1bmxvYWQoKSB7IH1cbmxldCBfb3JpZ2luYWxDb25zb2xlRXJyb3I6ICguLi5kYXRhOiB1bmtub3duW10pID0+IHZvaWQgPSAoKSA9PiB7IH07XG5sZXQgX2NhdWdodExvZ3M6IHN0cmluZ1tdID0gW107XG5cbmV4cG9ydCBjb25zdCBtZXRob2RzID0ge1xuICAgIGFzeW5jIHN0YXJ0Q2F0Y2hMb2dnaW5nKCkge1xuICAgICAgICBfY2F1Z2h0TG9ncyA9IFtdO1xuICAgICAgICBfb3JpZ2luYWxDb25zb2xlRXJyb3IgPSBjb25zb2xlLmVycm9yO1xuICAgICAgICBjb25zb2xlLmVycm9yID0gKC4uLmRhdGE6IHVua25vd25bXSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbXNnID0gZGF0YS5tYXAoYSA9PiBhIGluc3RhbmNlb2YgRXJyb3IgPyBhLm1lc3NhZ2UgOiBhKS5qb2luKCcgJyk7XG4gICAgICAgICAgICBfY2F1Z2h0TG9ncy5wdXNoKG1zZyk7XG4gICAgICAgICAgICBfb3JpZ2luYWxDb25zb2xlRXJyb3IoLi4uZGF0YSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgc3RvcENhdGNoTG9nZ2luZygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IgPSBfb3JpZ2luYWxDb25zb2xlRXJyb3I7XG4gICAgICAgIHJldHVybiBfY2F1Z2h0TG9ncztcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlUHJlZmFiRnJvbU5vZGUobm9kZVV1aWQ6IHN0cmluZywgcGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgY2NlID0gKGdsb2JhbFRoaXMgYXMgYW55KVsnY2NlJ107XG4gICAgICAgIFxuICAgICAgICBpZiAoIWNjZSB8fCAhY2NlLlByZWZhYiB8fCAhY2NlLlByZWZhYi5jcmVhdGVQcmVmYWJBc3NldEZyb21Ob2RlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NDRSBBUEkgbm90IGZvdW5kJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXdhaXQgY2NlLlByZWZhYi5jcmVhdGVQcmVmYWJBc3NldEZyb21Ob2RlKG5vZGVVdWlkLCBwYXRoKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgYXBwbHlQcmVmYWJCeU5vZGUobm9kZVV1aWQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgY2NlID0gKGdsb2JhbFRoaXMgYXMgYW55KVsnY2NlJ107XG4gICAgICAgICAgICBpZiAoIWNjZSB8fCAhY2NlLlByZWZhYiB8fCAhY2NlLlByZWZhYi5hcHBseVByZWZhYikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ0NFIEFQSSBub3QgZm91bmQnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IGNjZS5QcmVmYWIuYXBwbHlQcmVmYWIobm9kZVV1aWQpO1xuICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gYXBwbHkgcHJlZmFiJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyB1bmxpbmtQcmVmYWJCeU5vZGUobm9kZVV1aWQ6IHN0cmluZywgcmVjdXJzaXZlOiBib29sZWFuKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBjY2UgPSAoZ2xvYmFsVGhpcyBhcyBhbnkpWydjY2UnXTtcbiAgICAgICAgICAgIGlmICghY2NlIHx8ICFjY2UuUHJlZmFiIHx8ICFjY2UuUHJlZmFiLnVuV3JhcFByZWZhYkluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDQ0UgQVBJIG5vdCBmb3VuZCcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBzdWNjZXNzOiBib29sZWFuID0gYXdhaXQgY2NlLlByZWZhYi51bldyYXBQcmVmYWJJbnN0YW5jZShub2RlVXVpZCwgcmVjdXJzaXZlKTtcbiAgICAgICAgICAgIGlmICghc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHVubGluayBwcmVmYWInKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPZmZzY3JlZW5DYW52YXMod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiBQcm9taXNlPEhUTUxDYW52YXNFbGVtZW50PiB7XG4gICAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgcmV0dXJuIGNhbnZhcztcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FwdHVyZVNjcmVlbnNob3QoXG4gICAgICAgIGltYWdlU2l6ZTogeyB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciB9ID0geyB3aWR0aDogNTEyLCBoZWlnaHQ6IDUxMiB9LCBcbiAgICAgICAganBlZ1F1YWxpdHk6IG51bWJlciA9IDgwLFxuICAgICAgICBjYW1lcmFQb3NpdGlvbj86IHsgeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlciB9LFxuICAgICAgICB0YXJnZXRQb3NpdGlvbj86IHsgeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlciB9LFxuICAgICAgICBvcnRob2dyYXBoaWM6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICAgICAgb3J0aG9ncmFwaGljU2l6ZTogbnVtYmVyID0gMTBcbiAgICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2NlID0gKGdsb2JhbFRoaXMgYXMgYW55KVsnY2NlJ107XG4gICAgICAgICAgICBjb25zdCBjYyA9IChnbG9iYWxUaGlzIGFzIGFueSlbJ2NjJ107XG5cbiAgICAgICAgICAgIGxldCBwcmV2V2lkdGg6IG51bWJlcjtcbiAgICAgICAgICAgIGxldCBwcmV2SGVpZ2h0OiBudW1iZXI7XG5cbiAgICAgICAgICAgIC8vIE9wdGlvbmFsOiBTYXZlIGNhbWVyYSBzdGF0ZVxuICAgICAgICAgICAgbGV0IHByZXZDYW1Qb3M6IGFueTtcbiAgICAgICAgICAgIGxldCBwcmV2Q2FtUm90OiBhbnk7XG4gICAgICAgICAgICBsZXQgcHJldlByb2plY3Rpb246IG51bWJlcjtcbiAgICAgICAgICAgIGxldCBwcmV2T3J0aG9TaXplOiBudW1iZXI7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIEFwcGx5IENhbWVyYSBDaGFuZ2VzXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChjY2UgJiYgY2NlLkNhbWVyYSAmJiBjY2UuQ2FtZXJhLmNhbWVyYSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYW1Ob2RlID0gY2NlLkNhbWVyYS5jYW1lcmEubm9kZTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoY2FtTm9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJldkNhbVBvcyA9IGNhbU5vZGUucG9zaXRpb24uY2xvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZDYW1Sb3QgPSBjYW1Ob2RlLnJvdGF0aW9uLmNsb25lKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2UHJvamVjdGlvbiA9IGNjZS5DYW1lcmEuY2FtZXJhLnByb2plY3Rpb247XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2T3J0aG9TaXplID0gY2NlLkNhbWVyYS5jYW1lcmEub3J0aG9TaXplO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjY2UuQ2FtZXJhLmNhbWVyYS5wcm9qZWN0aW9uID0gb3J0aG9ncmFwaGljID8gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2MuQ2FtZXJhLlByb2plY3Rpb25UeXBlLk9SVEhPIDogY2MuQ2FtZXJhLlByb2plY3Rpb25UeXBlLlBFUlNQRUNUSVZFO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3J0aG9ncmFwaGljKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2NlLkNhbWVyYS5jYW1lcmEub3J0aG9TaXplID0gb3J0aG9ncmFwaGljU2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbWVyYVBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FtTm9kZS5zZXRQb3NpdGlvbihuZXcgY2MuVmVjMyhjYW1lcmFQb3NpdGlvbi54ID8/IDAsIGNhbWVyYVBvc2l0aW9uLnkgPz8gMCwgY2FtZXJhUG9zaXRpb24ueiA/PyAwKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0UG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW1Ob2RlLmxvb2tBdChuZXcgY2MuVmVjMyh0YXJnZXRQb3NpdGlvbi54ID8/IDAsIHRhcmdldFBvc2l0aW9uLnkgPz8gMCwgdGFyZ2V0UG9zaXRpb24ueiA/PyAwKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjY2UuQ2FtZXJhLnJlZnJlc2gpIGNjZS5DYW1lcmEucmVmcmVzaCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcIltjYXB0dXJlU2NyZWVuc2hvdF0gRmFpbGVkIHRvIG1vZGlmeSBjYW1lcmE6XCIsIGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY2MuZGlyZWN0b3IgJiYgY2MuZGlyZWN0b3Iucm9vdCkge1xuICAgICAgICAgICAgICAgIHByZXZXaWR0aCA9IGNjLmRpcmVjdG9yLnJvb3QubWFpbldpbmRvdz8ud2lkdGggfHwgMDtcbiAgICAgICAgICAgICAgICBwcmV2SGVpZ2h0ID0gY2MuZGlyZWN0b3Iucm9vdC5tYWluV2luZG93Py5oZWlnaHQgfHwgMDtcbiAgICAgICAgICAgICAgICBjYy5kaXJlY3Rvci5yb290LnJlc2l6ZShpbWFnZVNpemUud2lkdGgsIGltYWdlU2l6ZS5oZWlnaHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihcImNjLmdhbWUuY2FudmFzIG5vdCBmb3VuZCBvciBpcyBub3QgYW4gSFRNTENhbnZhc0VsZW1lbnRcIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChjY2UgJiYgY2NlLkVuZ2luZSkge1xuICAgICAgICAgICAgICAgICAgICBjY2UuRW5naW5lLnJlcGFpbnRJbkVkaXRNb2RlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkgeyBjb25zb2xlLndhcm4oXCJGYWlsZWQgdG8gcmVwYWludEluRWRpdE1vZGU6XCIsIGUpOyB9XG5cbiAgICAgICAgICAgIGNjLmRpcmVjdG9yLm9uY2UoY2MuRGlyZWN0b3IuRVZFTlRfQUZURVJfUkVOREVSLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNjLmdhbWUgJiYgY2MuZ2FtZS5jYW52YXMgJiYgKGNjLmdhbWUuY2FudmFzIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhVVJMID0gY2MuZ2FtZS5jYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywganBlZ1F1YWxpdHkgLyAxMDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzZTY0ID0gZGF0YVVSTC5yZXBsYWNlKC9eZGF0YTppbWFnZVxcL1xcdys7YmFzZTY0LC8sICcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoYmFzZTY0KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJjYy5nYW1lLmNhbnZhcyBub3QgZm91bmQgb3IgaXMgbm90IGFuIEhUTUxDYW52YXNFbGVtZW50XCIpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoZXJyb3IubWVzc2FnZSB8fCBTdHJpbmcoZXJyb3IpKSk7XG4gICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gUmVzdG9yZSBwcmV2aW91cyBzaXplXG4gICAgICAgICAgICAgICAgICAgIGlmIChjYy5kaXJlY3RvciAmJiBjYy5kaXJlY3Rvci5yb290KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYy5kaXJlY3Rvci5yb290LnJlc2l6ZShwcmV2V2lkdGgsIHByZXZIZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIFJlc3RvcmUgY2FtZXJhXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNjZSAmJiBjY2UuQ2FtZXJhICYmIGNjZS5DYW1lcmEuY2FtZXJhICYmIGNjZS5DYW1lcmEuY2FtZXJhLm5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldkNhbVBvcykgY2NlLkNhbWVyYS5jYW1lcmEubm9kZS5zZXRQb3NpdGlvbihwcmV2Q2FtUG9zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldkNhbVJvdCkgY2NlLkNhbWVyYS5jYW1lcmEubm9kZS5zZXRSb3RhdGlvbihwcmV2Q2FtUm90KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldlByb2plY3Rpb24gIT09IHVuZGVmaW5lZCkgY2NlLkNhbWVyYS5jYW1lcmEucHJvamVjdGlvbiA9IHByZXZQcm9qZWN0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2T3J0aG9TaXplICE9PSB1bmRlZmluZWQpIGNjZS5DYW1lcmEuY2FtZXJhLm9ydGhvU2l6ZSA9IHByZXZPcnRob1NpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNjZS5DYW1lcmEucmVmcmVzaCkgY2NlLkNhbWVyYS5yZWZyZXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sIDUwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxufTtcbiJdfQ==