消消方块阵换皮表情
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

227 lines
28 KiB

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.methods = void 0;
exports.load = load;
exports.unload = unload;
const config_manager_1 = require("./config-manager");
const finder_1 = require("./finder");
const i18n_1 = require("./i18n");
const logger_1 = require("./logger");
const panel_manager_1 = require("./panel-manager");
const parser_1 = require("./parser");
const printer_1 = require("./printer");
const MainEvent = require('./lib/eazax/main-event');
const { reload } = require('./lib/eazax/editor-main-util');
/**
* @en Registration method for the main process of Extension
* @zh 为扩展的主进程的注册方法
*/
exports.methods = {
/**
* 查找引用
*/
async findCurrentSelection() {
// 获取选中资源
// asset
const lastSelectType = Editor.Selection.getLastSelectedType();
// uuid
const lastSelectUuid = Editor.Selection.getLastSelected(lastSelectType);
// uuid
const lastSelectUuids = Editor.Selection.getSelected(lastSelectType);
(0, logger_1.print)('log', `lastSelectType:${lastSelectType} lastSelectUuid:${lastSelectUuid}`);
(0, logger_1.print)('log', `lastSelectType:${lastSelectType} lastSelectUuids:${JSON.stringify(lastSelectUuids)}`);
const uuids = lastSelectUuids;
const tmpAssetInfoMap = {};
for (let i = 0; i < uuids.length; i++) {
const uuid = uuids[i];
const assetInfo = await Editor.Message.request('asset-db', 'query-asset-info', uuid);
if (!assetInfo) {
(0, logger_1.print)('error', `找不到资源信息${uuid}`);
continue;
}
(0, logger_1.print)('log', `资源详情:${JSON.stringify(assetInfo, null, 4)}`);
if (assetInfo.isDirectory) {
// 文件夹不用
uuids.splice(i--);
}
else {
tmpAssetInfoMap[uuid] = assetInfo;
}
}
// 未选择资源
if (uuids.length === 0) {
(0, logger_1.print)('log', i18n_1.I18n.t('please-select-assets'));
return;
}
// 遍历查找
for (let i = 0; i < uuids.length; i++) {
const uuid = uuids[i];
// 读取缓存
let assetInfo = tmpAssetInfoMap[uuid];
if (!assetInfo) {
// 再查找一次
assetInfo = await Editor.Message.request('asset-db', 'query-asset-info', uuid);
}
if (!assetInfo) {
continue;
}
// 去掉前缀
const shortUrl = assetInfo.url.replace('db://', '');
// 查找引用
(0, logger_1.print)('info', '🔍', `${i18n_1.I18n.t('find-asset-refs')} ${shortUrl}`);
const refs = await finder_1.Finder.findByUuid(assetInfo);
if (refs.length === 0) {
(0, logger_1.print)('info', '📂', `${i18n_1.I18n.t('no-refs')} ${shortUrl}`);
continue;
}
const results = {
type: assetInfo.type,
uuid,
url: assetInfo.url,
path: assetInfo.path,
refs,
};
// 打印结果
printer_1.Printer.printResult(results);
// 显示结果面板
const { showResultsPanel } = config_manager_1.ConfigManager.get();
if (showResultsPanel) {
panel_manager_1.PanelManager.openResultsPanel(results);
}
}
},
/**
* 打开设置面板
*/
openSettingsPanel() {
panel_manager_1.PanelManager.openSettingsPanel();
},
/**
* 场景编辑器就绪后
*/
onSceneReady() {
// 自动检查更新
// const config = ConfigManager.get();
// if (config.autoCheckUpdate) {
// checkUpdate(false);
// }
},
/**
* 资源变化回调
*/
async onAssetChanged(uuid) {
//
const assetInfo = await Editor.Message.request('asset-db', 'query-asset-info', uuid);
const { type, url, file } = assetInfo;
// 场景和预制体
if (type === 'cc.SceneAsset' || type === 'cc.Prefab') {
// 排除内置资源
if (url.indexOf('db://internal') !== -1) {
return;
}
// 更新节点树
await parser_1.Parser.updateCache(file);
}
}
};
// ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
function eventListener_load() {
reload();
}
let lastOpenAssetsUrl = '';
async function eventListener_openAssets(event, url, nodePath) {
// console.log('open-asset', url, nodePath);
let needOpen = false;
if (lastOpenAssetsUrl !== url) {
// 打开资源
await Editor.Message.request('asset-db', 'open-asset', url);
lastOpenAssetsUrl = url;
needOpen = true;
}
// 不是节点
if (!nodePath) {
return;
}
const isScene = url.endsWith('.scene');
// 获取这个资源的uuid
const uuid = await Editor.Message.request('asset-db', 'query-uuid', url);
// 查询实例化之后的uuid
const info = await Editor.Message.request('scene', 'query-nodes-by-asset-uuid', uuid);
const nodeUuid = info[0];
// console.log('uuid', nodeUuid);
// const nodeInfo = await Editor.Message.request('scene', 'query-node', nodeUuid);
// console.log('nodeInfo', nodeInfo);
const nodeInfo = await Editor.Message.request('scene', 'query-node-tree', nodeUuid);
// console.log('nodeTree', nodeInfo);
// 拆分nodePath
const nodePaths = nodePath.split('/');
if (!isScene) {
// 去掉第一级
nodePaths.shift();
}
// 获取指定节点
let curNode = nodeInfo;
for (let i = 0; i < nodePaths.length; i++) {
const nodePath = nodePaths[i];
// console.log('find', nodePath);
// 查找子节点
let find = false;
if (curNode.children && curNode.children.length > 0) {
for (let j = 0; j < curNode.children.length; j++) {
const child = curNode.children[j];
// console.log('check', child, child.name);
if (child.name === nodePath) {
curNode = child;
find = true;
break;
}
}
}
if (!find) {
break;
}
}
// 如果需要打开,需要延迟一下再选中,否则编辑器打开事件也会选中一次
if (needOpen) {
// 延迟1秒后再选中
setTimeout(() => {
// 选中节点
Editor.Selection.clear('node');
Editor.Selection.select('node', [curNode.uuid]);
}, 500);
}
else {
// 选中节点
Editor.Selection.clear('node');
Editor.Selection.select('node', [curNode.uuid]);
}
}
async function eventListener_selectAssets(event, url) {
// 使用url获得uuid
const uuid = await Editor.Message.request('asset-db', 'query-uuid', url);
// console.log('select-asset', url, uuid);
Editor.Selection.clear('asset');
Editor.Selection.select('asset', [uuid]);
}
/**
* @en Method Triggered on Extension Startup
* @zh 扩展启动时触发的方法
*/
function load() {
// 修改快捷键之后需要重新加载
MainEvent.on('reload', eventListener_load);
// 打开资源
MainEvent.on('open-asset', eventListener_openAssets);
// 选中资源
MainEvent.on('select-asset', eventListener_selectAssets);
}
/**
* @en Method triggered when uninstalling the extension
* @zh 卸载扩展时触发的方法
*/
function unload() {
MainEvent.removeListener('reload', eventListener_load);
MainEvent.removeListener('open-asset', eventListener_openAssets);
MainEvent.removeListener('select-asset', eventListener_selectAssets);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NvdXJjZS9tYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTZOQSxvQkFPQztBQU1ELHdCQUlDO0FBN09ELHFEQUFpRDtBQUNqRCxxQ0FBa0M7QUFDbEMsaUNBQThCO0FBQzlCLHFDQUFpQztBQUNqQyxtREFBK0M7QUFDL0MscUNBQWtDO0FBQ2xDLHVDQUFvQztBQUVwQyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsd0JBQXdCLENBQUMsQ0FBQztBQUNwRCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLDhCQUE4QixDQUFDLENBQUM7QUFFM0Q7OztHQUdHO0FBQ1UsUUFBQSxPQUFPLEdBQTRDO0lBQzVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLG9CQUFvQjtRQUV0QixTQUFTO1FBQ1QsUUFBUTtRQUNSLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUM5RCxPQUFPO1FBQ1AsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDeEUsT0FBTztRQUNQLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3JFLElBQUEsY0FBSyxFQUFDLEtBQUssRUFBRSxrQkFBa0IsY0FBYyxtQkFBbUIsY0FBYyxFQUFFLENBQUMsQ0FBQztRQUNsRixJQUFBLGNBQUssRUFBQyxLQUFLLEVBQUUsa0JBQWtCLGNBQWMsb0JBQW9CLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXBHLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQztRQUM5QixNQUFNLGVBQWUsR0FBMkIsRUFBRSxDQUFDO1FBQ25ELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFL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c2V0SW5mbyB9IGZyb20gJ0Bjb2Nvcy9jcmVhdG9yLXR5cGVzL2VkaXRvci9wYWNrYWdlcy9hc3NldC1kYi9AdHlwZXMvcHVibGljJztcclxuaW1wb3J0IHsgQ29uZmlnTWFuYWdlciB9IGZyb20gJy4vY29uZmlnLW1hbmFnZXInO1xyXG5pbXBvcnQgeyBGaW5kZXIgfSBmcm9tICcuL2ZpbmRlcic7XHJcbmltcG9ydCB7IEkxOG4gfSBmcm9tICcuL2kxOG4nO1xyXG5pbXBvcnQgeyBwcmludCB9IGZyb20gJy4vbG9nZ2VyJztcclxuaW1wb3J0IHsgUGFuZWxNYW5hZ2VyIH0gZnJvbSAnLi9wYW5lbC1tYW5hZ2VyJztcclxuaW1wb3J0IHsgUGFyc2VyIH0gZnJvbSAnLi9wYXJzZXInO1xyXG5pbXBvcnQgeyBQcmludGVyIH0gZnJvbSAnLi9wcmludGVyJztcclxuaW1wb3J0IHsgSVJlc3VsdCB9IGZyb20gJy4vdHlwZXMnO1xyXG5jb25zdCBNYWluRXZlbnQgPSByZXF1aXJlKCcuL2xpYi9lYXpheC9tYWluLWV2ZW50Jyk7XHJcbmNvbnN0IHsgcmVsb2FkIH0gPSByZXF1aXJlKCcuL2xpYi9lYXpheC9lZGl0b3ItbWFpbi11dGlsJyk7XHJcblxyXG4vKipcclxuICogQGVuIFJlZ2lzdHJhdGlvbiBtZXRob2QgZm9yIHRoZSBtYWluIHByb2Nlc3Mgb2YgRXh0ZW5zaW9uXHJcbiAqIEB6aCDkuLrmianlsZXnmoTkuLvov5vnqIvnmoTms6jlhozmlrnms5VcclxuICovXHJcbmV4cG9ydCBjb25zdCBtZXRob2RzOiB7IFtrZXk6IHN0cmluZ106ICguLi5hbnk6IGFueSkgPT4gYW55IH0gPSB7XHJcbiAgICAvKipcclxuICAgICAqIOafpeaJvuW8leeUqFxyXG4gICAgICovXHJcbiAgICBhc3luYyBmaW5kQ3VycmVudFNlbGVjdGlvbigpIHtcclxuXHJcbiAgICAgICAgLy8g6I635Y+W6YCJ5Lit6LWE5rqQXHJcbiAgICAgICAgLy8gYXNzZXRcclxuICAgICAgICBjb25zdCBsYXN0U2VsZWN0VHlwZSA9IEVkaXRvci5TZWxlY3Rpb24uZ2V0TGFzdFNlbGVjdGVkVHlwZSgpO1xyXG4gICAgICAgIC8vIHV1aWRcclxuICAgICAgICBjb25zdCBsYXN0U2VsZWN0VXVpZCA9IEVkaXRvci5TZWxlY3Rpb24uZ2V0TGFzdFNlbGVjdGVkKGxhc3RTZWxlY3RUeXBlKTtcclxuICAgICAgICAvLyB1dWlkXHJcbiAgICAgICAgY29uc3QgbGFzdFNlbGVjdFV1aWRzID0gRWRpdG9yLlNlbGVjdGlvbi5nZXRTZWxlY3RlZChsYXN0U2VsZWN0VHlwZSk7XHJcbiAgICAgICAgcHJpbnQoJ2xvZycsIGBsYXN0U2VsZWN0VHlwZToke2xhc3RTZWxlY3RUeXBlfSBsYXN0U2VsZWN0VXVpZDoke2xhc3RTZWxlY3RVdWlkfWApO1xyXG4gICAgICAgIHByaW50KCdsb2cnLCBgbGFzdFNlbGVjdFR5cGU6JHtsYXN0U2VsZWN0VHlwZX0gbGFzdFNlbGVjdFV1aWRzOiR7SlNPTi5zdHJpbmdpZnkobGFzdFNlbGVjdFV1aWRzKX1gKTtcclxuXHJcbiAgICAgICAgY29uc3QgdXVpZHMgPSBsYXN0U2VsZWN0VXVpZHM7XHJcbiAgICAgICAgY29uc3QgdG1wQXNzZXRJbmZvTWFwOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB1dWlkcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCB1dWlkID0gdXVpZHNbaV07XHJcbiAgICAgICAgICAgIGNvbnN0IGFzc2V0SW5mbyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3F1ZXJ5LWFzc2V0LWluZm8nLCB1dWlkKTtcclxuICAgICAgICAgICAgaWYgKCFhc3NldEluZm8pIHtcclxuICAgICAgICAgICAgICAgIHByaW50KCdlcnJvcicsIGDmib7kuI3liLDotYTmupDkv6Hmga8ke3V1aWR9YCk7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwcmludCgnbG9nJywgYOi1hOa6kOivpuaDhe+8miR7SlNPTi5zdHJpbmdpZnkoYXNzZXRJbmZvLCBudWxsLCA0KX1gKTtcclxuICAgICAgICAgICAgaWYgKGFzc2V0SW5mby5pc0RpcmVjdG9yeSkge1xyXG4gICAgICAgICAgICAgICAgLy8g5paH5Lu25aS55LiN55SoXHJcbiAgICAgICAgICAgICAgICB1dWlkcy5zcGxpY2UoaS0tKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRtcEFzc2V0SW5mb01hcFt1dWlkXSA9IGFzc2V0SW5mbztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyDmnKrpgInmi6notYTmupBcclxuICAgICAgICBpZiAodXVpZHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHByaW50KCdsb2cnLCBJMThuLnQoJ3BsZWFzZS1zZWxlY3QtYXNzZXRzJykpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIOmBjeWOhuafpeaJvlxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdXVpZHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgdXVpZCA9IHV1aWRzW2ldO1xyXG4gICAgICAgICAgICAvLyDor7vlj5bnvJPlrZhcclxuICAgICAgICAgICAgbGV0IGFzc2V0SW5mbzogQXNzZXRJbmZvID0gdG1wQXNzZXRJbmZvTWFwW3V1aWRdO1xyXG4gICAgICAgICAgICBpZiAoIWFzc2V0SW5mbykge1xyXG4gICAgICAgICAgICAgICAgLy8g5YaN5p+l5om+5LiA5qyhXHJcbiAgICAgICAgICAgICAgICBhc3NldEluZm8gPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdxdWVyeS1hc3NldC1pbmZvJywgdXVpZCkgYXMgQXNzZXRJbmZvO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghYXNzZXRJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyDljrvmjonliY3nvIBcclxuICAgICAgICAgICAgY29uc3Qgc2hvcnRVcmwgPSBhc3NldEluZm8udXJsLnJlcGxhY2UoJ2RiOi8vJywgJycpO1xyXG4gICAgICAgICAgICAvLyDmn6Xmib7lvJXnlKhcclxuICAgICAgICAgICAgcHJpbnQoJ2luZm8nLCAn8J+UjScsIGAke0kxOG4udCgnZmluZC1hc3NldC1yZWZzJyl9ICR7c2hvcnRVcmx9YCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlZnMgPSBhd2FpdCBGaW5kZXIuZmluZEJ5VXVpZChhc3NldEluZm8pO1xyXG4gICAgICAgICAgICBpZiAocmVmcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHByaW50KCdpbmZvJywgJ/Cfk4InLCBgJHtJMThuLnQoJ25vLXJlZnMnKX0gJHtzaG9ydFVybH1gKTtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCByZXN1bHRzOiBJUmVzdWx0ID0ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYXNzZXRJbmZvLnR5cGUsXHJcbiAgICAgICAgICAgICAgICB1dWlkLFxyXG4gICAgICAgICAgICAgICAgdXJsOiBhc3NldEluZm8udXJsLFxyXG4gICAgICAgICAgICAgICAgcGF0aDogYXNzZXRJbmZvLnBhdGgsXHJcbiAgICAgICAgICAgICAgICByZWZzLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAvLyDmiZPljbDnu5PmnpxcclxuICAgICAgICAgICAgUHJpbnRlci5wcmludFJlc3VsdChyZXN1bHRzKTtcclxuXHJcbiAgICAgICAgICAgIC8vIOaYvuekuue7k+aenOmdouadv1xyXG4gICAgICAgICAgICBjb25zdCB7IHNob3dSZXN1bHRzUGFuZWwgfSA9IENvbmZpZ01hbmFnZXIuZ2V0KCk7XHJcbiAgICAgICAgICAgIGlmIChzaG93UmVzdWx0c1BhbmVsKSB7XHJcbiAgICAgICAgICAgICAgICBQYW5lbE1hbmFnZXIub3BlblJlc3VsdHNQYW5lbChyZXN1bHRzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDmiZPlvIDorr7nva7pnaLmnb9cclxuICAgICAqL1xyXG4gICAgb3BlblNldHRpbmdzUGFuZWwoKSB7XHJcbiAgICAgICAgUGFuZWxNYW5hZ2VyLm9wZW5TZXR0aW5nc1BhbmVsKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5Zy65pmv57yW6L6R5Zmo5bCx57uq5ZCOXHJcbiAgICAgKi9cclxuICAgIG9uU2NlbmVSZWFkeSgpIHtcclxuICAgICAgICAvLyDoh6rliqjmo4Dmn6Xmm7TmlrBcclxuICAgICAgICAvLyBjb25zdCBjb25maWcgPSBDb25maWdNYW5hZ2VyLmdldCgpO1xyXG4gICAgICAgIC8vIGlmIChjb25maWcuYXV0b0NoZWNrVXBkYXRlKSB7XHJcbiAgICAgICAgLy8gICAgIGNoZWNrVXBkYXRlKGZhbHNlKTtcclxuICAgICAgICAvLyB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog6LWE5rqQ5Y+Y5YyW5Zue6LCDXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIG9uQXNzZXRDaGFuZ2VkKHV1aWQ6IHN0cmluZykge1xyXG4gICAgICAgIC8vXHJcbiAgICAgICAgY29uc3QgYXNzZXRJbmZvID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncXVlcnktYXNzZXQtaW5mbycsIHV1aWQpIGFzIEFzc2V0SW5mbztcclxuICAgICAgICBjb25zdCB7IHR5cGUsIHVybCwgZmlsZSB9ID0gYXNzZXRJbmZvO1xyXG4gICAgICAgIC8vIOWcuuaZr+WSjOmihOWItuS9k1xyXG4gICAgICAgIGlmICh0eXBlID09PSAnY2MuU2NlbmVBc3NldCcgfHwgdHlwZSA9PT0gJ2NjLlByZWZhYicpIHtcclxuICAgICAgICAgICAgLy8g5o6S6Zmk5YaF572u6LWE5rqQXHJcbiAgICAgICAgICAgIGlmICh1cmwuaW5kZXhPZignZGI6Ly9pbnRlcm5hbCcpICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIOabtOaWsOiKgueCueagkVxyXG4gICAgICAgICAgICBhd2FpdCBQYXJzZXIudXBkYXRlQ2FjaGUoZmlsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuLy8g4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaT4oaTXHJcbmZ1bmN0aW9uIGV2ZW50TGlzdGVuZXJfbG9hZCgpIHtcclxuICAgIHJlbG9hZCgpO1xyXG59XHJcbmxldCBsYXN0T3BlbkFzc2V0c1VybDogc3RyaW5nID0gJyc7XHJcbmFzeW5jIGZ1bmN0aW9uIGV2ZW50TGlzdGVuZXJfb3BlbkFzc2V0cyhldmVudDogYW55LCB1cmw6IHN0cmluZywgbm9kZVBhdGg6IHN0cmluZykge1xyXG4gICAgLy8gY29uc29sZS5sb2coJ29wZW4tYXNzZXQnLCB1cmwsIG5vZGVQYXRoKTtcclxuICAgIGxldCBuZWVkT3BlbiA9IGZhbHNlO1xyXG4gICAgaWYgKGxhc3RPcGVuQXNzZXRzVXJsICE9PSB1cmwpIHtcclxuICAgICAgICAvLyDmiZPlvIDotYTmupBcclxuICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdvcGVuLWFzc2V0JywgdXJsKTtcclxuICAgICAgICBsYXN0T3BlbkFzc2V0c1VybCA9IHVybDtcclxuICAgICAgICBuZWVkT3BlbiA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5LiN5piv6IqC54K5XHJcbiAgICBpZiAoIW5vZGVQYXRoKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGlzU2NlbmUgPSB1cmwuZW5kc1dpdGgoJy5zY2VuZScpO1xyXG4gICAgLy8g6I635Y+W6L+Z5Liq6LWE5rqQ55qEdXVpZFxyXG4gICAgY29uc3QgdXVpZCA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3F1ZXJ5LXV1aWQnLCB1cmwpIGFzIGFueTtcclxuICAgIC8vIOafpeivouWunuS+i+WMluS5i+WQjueahHV1aWRcclxuICAgIGNvbnN0IGluZm8gPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdzY2VuZScsICdxdWVyeS1ub2Rlcy1ieS1hc3NldC11dWlkJywgdXVpZCk7XHJcbiAgICBjb25zdCBub2RlVXVpZCA9IGluZm9bMF07XHJcbiAgICAvLyBjb25zb2xlLmxvZygndXVpZCcsIG5vZGVVdWlkKTtcclxuXHJcbiAgICAvLyBjb25zdCBub2RlSW5mbyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ3NjZW5lJywgJ3F1ZXJ5LW5vZGUnLCBub2RlVXVpZCk7XHJcbiAgICAvLyBjb25zb2xlLmxvZygnbm9kZUluZm8nLCBub2RlSW5mbyk7XHJcblxyXG4gICAgY29uc3Qgbm9kZUluZm8gPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdzY2VuZScsICdxdWVyeS1ub2RlLXRyZWUnLCBub2RlVXVpZCkgYXMgYW55O1xyXG4gICAgLy8gY29uc29sZS5sb2coJ25vZGVUcmVlJywgbm9kZUluZm8pO1xyXG5cclxuICAgIC8vIOaLhuWIhm5vZGVQYXRoXHJcbiAgICBjb25zdCBub2RlUGF0aHMgPSBub2RlUGF0aC5zcGxpdCgnLycpO1xyXG4gICAgaWYgKCFpc1NjZW5lKSB7XHJcbiAgICAgICAgLy8g5Y675o6J56ys5LiA57qnXHJcbiAgICAgICAgbm9kZVBhdGhzLnNoaWZ0KCk7XHJcbiAgICB9XHJcbiAgICAvLyDojrflj5bmjIflrproioLngrlcclxuICAgIGxldCBjdXJOb2RlID0gbm9kZUluZm87XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVQYXRocy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IG5vZGVQYXRoID0gbm9kZVBhdGhzW2ldO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdmaW5kJywgbm9kZVBhdGgpO1xyXG4gICAgICAgIC8vIOafpeaJvuWtkOiKgueCuVxyXG4gICAgICAgIGxldCBmaW5kID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKGN1ck5vZGUuY2hpbGRyZW4gJiYgY3VyTm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY3VyTm9kZS5jaGlsZHJlbi5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBjdXJOb2RlLmNoaWxkcmVuW2pdO1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2NoZWNrJywgY2hpbGQsIGNoaWxkLm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkLm5hbWUgPT09IG5vZGVQYXRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VyTm9kZSA9IGNoaWxkO1xyXG4gICAgICAgICAgICAgICAgICAgIGZpbmQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZmluZCkge1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5aaC5p6c6ZyA6KaB5omT5byA77yM6ZyA6KaB5bu26L+f5LiA5LiL5YaN6YCJ5Lit77yM5ZCm5YiZ57yW6L6R5Zmo5omT5byA5LqL5Lu25Lmf5Lya6YCJ5Lit5LiA5qyhXHJcbiAgICBpZiAobmVlZE9wZW4pIHtcclxuICAgICAgICAvLyDlu7bov58x56eS5ZCO5YaN6YCJ5LitXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIOmAieS4reiKgueCuVxyXG4gICAgICAgICAgICBFZGl0b3IuU2VsZWN0aW9uLmNsZWFyKCdub2RlJyk7XHJcbiAgICAgICAgICAgIEVkaXRvci5TZWxlY3Rpb24uc2VsZWN0KCdub2RlJywgW2N1ck5vZGUudXVpZF0pO1xyXG4gICAgICAgIH0sIDUwMCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIOmAieS4reiKgueCuVxyXG4gICAgICAgIEVkaXRvci5TZWxlY3Rpb24uY2xlYXIoJ25vZGUnKTtcclxuICAgICAgICBFZGl0b3IuU2VsZWN0aW9uLnNlbGVjdCgnbm9kZScsIFtjdXJOb2RlLnV1aWRdKTtcclxuICAgIH1cclxuXHJcbn1cclxuYXN5bmMgZnVuY3Rpb24gZXZlbnRMaXN0ZW5lcl9zZWxlY3RBc3NldHMoZXZlbnQ6IGFueSwgdXJsOiBzdHJpbmcpIHtcclxuICAgIC8vIOS9v+eUqHVybOiOt+W+l3V1aWRcclxuICAgIGNvbnN0IHV1aWQgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdxdWVyeS11dWlkJywgdXJsKSBhcyBhbnk7XHJcbiAgICAvLyBjb25zb2xlLmxvZygnc2VsZWN0LWFzc2V0JywgdXJsLCB1dWlkKTtcclxuICAgIEVkaXRvci5TZWxlY3Rpb24uY2xlYXIoJ2Fzc2V0Jyk7XHJcbiAgICBFZGl0b3IuU2VsZWN0aW9uLnNlbGVjdCgnYXNzZXQnLCBbdXVpZF0pO1xyXG59XHJcblxyXG4vKipcclxuICogQGVuIE1ldGhvZCBUcmlnZ2VyZWQgb24gRXh0ZW5zaW9uIFN0YXJ0dXBcclxuICogQHpoIOaJqeWxleWQr+WKqOaXtuinpuWPkeeahOaWueazlVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWQoKSB7XHJcbiAgICAvLyDkv67mlLnlv6vmjbfplK7kuYvlkI7pnIDopoHph43mlrDliqDovb1cclxuICAgIE1haW5FdmVudC5vbigncmVsb2FkJywgZXZlbnRMaXN0ZW5lcl9sb2FkKTtcclxuICAgIC8vIOaJk+W8gOi1hOa6kFxyXG4gICAgTWFpbkV2ZW50Lm9uKCdvcGVuLWFzc2V0JywgZXZlbnRMaXN0ZW5lcl9vcGVuQXNzZXRzKTtcclxuICAgIC8vIOmAieS4rei1hOa6kFxyXG4gICAgTWFpbkV2ZW50Lm9uKCdzZWxlY3QtYXNzZXQnLCBldmVudExpc3RlbmVyX3NlbGVjdEFzc2V0cyk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAZW4gTWV0aG9kIHRyaWdnZXJlZCB3aGVuIHVuaW5zdGFsbGluZyB0aGUgZXh0ZW5zaW9uXHJcbiAqIEB6aCDljbjovb3mianlsZXml7bop6blj5HnmoTmlrnms5VcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiB1bmxvYWQoKSB7XHJcbiAgICBNYWluRXZlbnQucmVtb3ZlTGlzdGVuZXIoJ3JlbG9hZCcsIGV2ZW50TGlzdGVuZXJfbG9hZCk7XHJcbiAgICBNYWluRXZlbnQucmVtb3ZlTGlzdGVuZXIoJ29wZW4tYXNzZXQnLCBldmVudExpc3RlbmVyX29wZW5Bc3NldHMpO1xyXG4gICAgTWFpbkV2ZW50LnJlbW92ZUxpc3RlbmVyKCdzZWxlY3QtYXNzZXQnLCBldmVudExpc3RlbmVyX3NlbGVjdEFzc2V0cyk7XHJcbn1cclxuIl19