diff --git a/Editor/BuildTool/AppBuilder.cs b/Editor/BuildTool/AppBuilder.cs
index 1706fd0..d2da38d 100644
--- a/Editor/BuildTool/AppBuilder.cs
+++ b/Editor/BuildTool/AppBuilder.cs
@@ -60,7 +60,7 @@ namespace Guru.Editor
         #region 构建 Android 接口
 
         /// 
-        /// 
+        /// 构建 Android 包体
         /// 
         /// 
         /// 
diff --git a/Runtime/GuruCore/Runtime/Ads/ADService.cs b/Runtime/GuruCore/Runtime/Ads/ADService.cs
index 7f44c17..21fe587 100644
--- a/Runtime/GuruCore/Runtime/Ads/ADService.cs
+++ b/Runtime/GuruCore/Runtime/Ads/ADService.cs
@@ -117,6 +117,7 @@ namespace Guru
         {
 	        _badsloadStartTime = Time.realtimeSinceStartup;
 	        _chanelMax.LoadBannerAD();
+	        OnBannerStartLoad?.Invoke(_chanelMax.MaxBADSSlotID);
         }
 
         #endregion
@@ -148,6 +149,7 @@ namespace Guru
         private void OnLoadMaxIV() {
 	        _iadsLoadStartTime = Time.realtimeSinceStartup; // 更新计时器
 	        _chanelMax.LoadInterstitialAD();
+	        OnInterstitialStartLoad?.Invoke(_chanelMax.MaxIADSSlotID);
         }
         
         
@@ -180,6 +182,7 @@ namespace Guru
         {
 	        _radsLoadStartTime = Time.realtimeSinceStartup; // 更新计时器
 	        _chanelMax.LoadRewardAD();
+	        OnRewardStartLoad?.Invoke(_chanelMax.MaxRADSSlotID);
         }
     
         
diff --git a/Runtime/GuruCore/Runtime/Ads/ADServiceBase.cs b/Runtime/GuruCore/Runtime/Ads/ADServiceBase.cs
index 537c116..f1d6f40 100644
--- a/Runtime/GuruCore/Runtime/Ads/ADServiceBase.cs
+++ b/Runtime/GuruCore/Runtime/Ads/ADServiceBase.cs
@@ -26,11 +26,14 @@ namespace Guru
 
         protected Action _onSdkInitReady;
         
+        public static Action OnBannerStartLoad;
         public static Action OnBannerLoaded;
 
+        public static Action OnInterstitialStartLoad;
         public static Action OnInterstitialLoaded;
         public static Action OnInterstitialFailed;
 
+        public static Action OnRewardStartLoad;
         public static Action OnRewardLoaded;
         public static Action OnRewardFailed;
 
@@ -545,7 +548,7 @@ namespace Guru
             if (IsRadsLoading) return;
             
             OnLoadRads();
-            var id = GetRewardedVideoID();
+            var id = GetRewardedID();
             Analytics.ADRadsLoad(AdParams.Build(id)); // 上报打点
             MaxSdk.LoadRewardedAd(id);
         }
@@ -561,7 +564,7 @@ namespace Guru
             if (!IsInitialized)
                 return false;
 
-            return MaxSdk.IsRewardedAdReady(GetRewardedVideoID());
+            return MaxSdk.IsRewardedAdReady(GetRewardedID());
         }
 
         /// 
@@ -589,7 +592,7 @@ namespace Guru
             _rewardAction = rewardAction;
             _failAction = failAction;
             _dismissAction = dismissAction;
-            MaxSdk.ShowRewardedAd(GetRewardedVideoID());
+            MaxSdk.ShowRewardedAd(GetRewardedID());
 
             // RequestRewardedAD();
         }
@@ -684,7 +687,7 @@ namespace Guru
 
         #region Ad Settings
 
-        protected virtual string GetRewardedVideoID()
+        protected virtual string GetRewardedID()
         {
             return GuruSettings.Instance.ADSetting.GetRewardedVideoID();
         }
diff --git a/Runtime/GuruCore/Runtime/Ads/ADServiceEvent.cs b/Runtime/GuruCore/Runtime/Ads/ADServiceEvent.cs
new file mode 100644
index 0000000..2415add
--- /dev/null
+++ b/Runtime/GuruCore/Runtime/Ads/ADServiceEvent.cs
@@ -0,0 +1,18 @@
+namespace Guru
+{
+    public static class ADServiceEvent
+    {
+        public const string ADSERVICE_READY = "evt_adservice_ready";
+        
+        public const string BADS_LOAD_START = "evt_bads_load_start";
+        public const string BADS_LOADED = "evt_bads_loaded";
+        public const string BADS_LOAD_FAILED = "evt_bads_load_failed";
+        public const string BADS_IMP = "evt_bads_imp";
+        
+        
+        
+        
+        
+        
+    }
+}
\ No newline at end of file
diff --git a/Runtime/GuruCore/Runtime/Ads/ADServiceEvent.cs.meta b/Runtime/GuruCore/Runtime/Ads/ADServiceEvent.cs.meta
new file mode 100644
index 0000000..a350a9c
--- /dev/null
+++ b/Runtime/GuruCore/Runtime/Ads/ADServiceEvent.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 48d4ca9d7e6c4393bf13f6ce619145bc
+timeCreated: 1714970592
\ No newline at end of file
diff --git a/Runtime/GuruCore/Runtime/Ads/Channels/Max/AdChanelMax.cs b/Runtime/GuruCore/Runtime/Ads/Channels/Max/AdChanelMax.cs
index 7818a51..5701b84 100644
--- a/Runtime/GuruCore/Runtime/Ads/Channels/Max/AdChanelMax.cs
+++ b/Runtime/GuruCore/Runtime/Ads/Channels/Max/AdChanelMax.cs
@@ -21,9 +21,9 @@ namespace Guru
         #region 广告位
         
         // ---------------- Max 广告位ID -------------------- 
-        internal string MaxBannerSlotID => GuruSettings.Instance.ADSetting.GetBannerID();
-        internal string MaxIVSlotID => GuruSettings.Instance.ADSetting.GetInterstitialID();
-        internal string MaxRVSlotID => GuruSettings.Instance.ADSetting.GetRewardedVideoID();
+        internal string MaxBADSSlotID => GuruSettings.Instance.ADSetting.GetBannerID();
+        internal string MaxIADSSlotID => GuruSettings.Instance.ADSetting.GetInterstitialID();
+        internal string MaxRADSSlotID => GuruSettings.Instance.ADSetting.GetRewardedVideoID();
         
         #endregion
         
@@ -49,11 +49,11 @@ namespace Guru
         {
             // Banners are automatically sized to 320x50 on phones and 728x90 on tablets
             // You may use the utility method `MaxSdkUtils.isTablet()` to help with view sizing adjustments
-            MaxSdk.CreateBanner(MaxBannerSlotID, MaxSdkBase.BannerPosition.BottomCenter);
-            MaxSdk.SetBannerExtraParameter(MaxBannerSlotID, "adaptive_banner", "false");
+            MaxSdk.CreateBanner(MaxBADSSlotID, MaxSdkBase.BannerPosition.BottomCenter);
+            MaxSdk.SetBannerExtraParameter(MaxBADSSlotID, "adaptive_banner", "false");
             // Set background or background color for banners to be fully functional
-            MaxSdk.SetBannerBackgroundColor(MaxBannerSlotID, _backColor);
-            Analytics.ADBadsLoad(AdParams.Build(MaxBannerSlotID));
+            MaxSdk.SetBannerBackgroundColor(MaxBADSSlotID, _backColor);
+            Analytics.ADBadsLoad(AdParams.Build(MaxBADSSlotID));
         }
         
         public void SetBannerBackColor(string hex)
@@ -69,8 +69,8 @@ namespace Guru
         public bool IsInterstitialRequestOver => true;
         public void LoadInterstitialAD()
         {
-            Analytics.ADIadsLoad(AdParams.Build(MaxIVSlotID)); // 上报打点
-            MaxSdk.LoadInterstitial(MaxIVSlotID);
+            Analytics.ADIadsLoad(AdParams.Build(MaxIADSSlotID)); // 上报打点
+            MaxSdk.LoadInterstitial(MaxIADSSlotID);
         }
 
         #endregion
@@ -80,8 +80,8 @@ namespace Guru
         public bool IsRewardRequestOver => true;
         public void LoadRewardAD()
         {
-            Analytics.ADRadsLoad(AdParams.Build(MaxRVSlotID)); // 上报打点
-            MaxSdk.LoadRewardedAd(MaxRVSlotID);
+            Analytics.ADRadsLoad(AdParams.Build(MaxRADSSlotID)); // 上报打点
+            MaxSdk.LoadRewardedAd(MaxRADSSlotID);
         }
 
         #endregion
diff --git a/Runtime/GuruCore/Runtime/Events.meta b/Runtime/GuruCore/Runtime/Events.meta
new file mode 100644
index 0000000..fcce08c
--- /dev/null
+++ b/Runtime/GuruCore/Runtime/Events.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 31cc00ccd21c4fdc9fb6ea0163677367
+timeCreated: 1714955721
\ No newline at end of file
diff --git a/Runtime/GuruCore/Runtime/Events/EventBus.cs b/Runtime/GuruCore/Runtime/Events/EventBus.cs
new file mode 100644
index 0000000..ee8aeb1
--- /dev/null
+++ b/Runtime/GuruCore/Runtime/Events/EventBus.cs
@@ -0,0 +1,327 @@
+
+namespace Guru
+{
+    using UnityEngine;
+    using System.Collections.Generic;
+    using System;
+    
+    public class EventBus: MonoBehaviour
+    {
+        private const string Tag = "[EventBus]";
+        private static bool _initOnce = false;
+        private Dictionary> _normalEvents;
+        private Dictionary> _mainThreadEvents;
+        private Queue _mainThreadQueue;
+        private Queue _mainThreadEventPool;
+
+        private static EventBus _instance;
+        public static EventBus Instance {
+            get
+            {
+                if (_instance == null)
+                {
+                    if (GuruSDKCallback.Instance != null)
+                    {
+                        _instance = AttachOnHost(GuruSDKCallback.Instance); // Set to the host object
+                    }
+                }
+                return _instance;
+            }
+        }
+
+
+
+        public static EventBus AttachOnHost(GameObject go)
+        {
+            var ins = go.AddComponent();
+            ins.Init();
+            return ins;
+        }
+        public static EventBus AttachOnHost(Component component)
+        {
+            return component.gameObject.AddComponent();
+        }
+
+
+
+        
+
+        #region API
+
+        public static void Bind(string evtName, Action
     public partial class GameDefine
     {
-        public static string CompanyName = "Guru Fun Game Studio";
+        public static string CompanyName = "Guru Game";
         public const string MACRO_LOG = "ENABLE_LOG";
         public const string MACRO_DEBUG = "DEBUG";
         public const string MACRO_RELEASE = "RELEASE";
diff --git a/Runtime/GuruDebugger.meta b/Runtime/GuruDebugger.meta
new file mode 100644
index 0000000..56335e1
--- /dev/null
+++ b/Runtime/GuruDebugger.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: d717553eea6bf4338b9f3059be371e71
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/GuruDebugger/README.md b/Runtime/GuruDebugger/README.md
new file mode 100644
index 0000000..32975a7
--- /dev/null
+++ b/Runtime/GuruDebugger/README.md
@@ -0,0 +1,60 @@
+# Guru Debugger 面板
+
+Version 1.0.0
+
+# 使用方法
+
+调用方式, 可直接调用
+
+```c#
+// 首次调用需要初始化
+Debugger.Init():
+
+// TODO: 加入你的Layout初始化方法     
+    
+// 显示 Debugger:
+Debuggger.Show();
+
+// 关闭回调
+Debugger.OnClose += OnDebuggerClose;  
+ 
+private void OnDebuggerClose(){
+    
+    // TODO: do sth when debugger is closed 
+}
+
+```
+
+Layout 初始化
+```c#
+// 添加一个条目
+// 一般一个条目的构成为  {tab}/{option} 的方式
+
+// 添加一个 Key - Value item 
+Debugger.Instance.AddOption("Start Info/Test Key", "Test Value");
+
+// 添加一个整体可点击的 Item
+Debugger.Instance.AddOption("Start Info/Yes, click me", "", () => {
+    // TODO: the item is a pure button, add click event.
+});
+
+// 添加一个 Button
+Debugger.Instance.AddOption("Start Info/Test Key", "Test Value")
+    .AddButton("Button", ()=>{
+        // TODO: do sth when button is clicked
+    });
+
+// Option 可以添加更多的内容, 但是不建议超过 5 个
+Debugger.Instance.AddOption("Start Info/Test2", "valueof2")
+    .AddLabel("Sth else to add")
+    .AddCopyButton();
+
+
+
+```
+
+
+
+
+
+
diff --git a/Runtime/GuruDebugger/README.md.meta b/Runtime/GuruDebugger/README.md.meta
new file mode 100644
index 0000000..6a8af8a
--- /dev/null
+++ b/Runtime/GuruDebugger/README.md.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 48c5db714459493d8d02ecaf89f1c2ac
+timeCreated: 1711084921
\ No newline at end of file
diff --git a/Runtime/GuruDebugger/Runtime.meta b/Runtime/GuruDebugger/Runtime.meta
new file mode 100644
index 0000000..cca0a1f
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 036a24160e57d414290c124d76a4a66f
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/GuruDebugger/Runtime/AdsStatus.meta b/Runtime/GuruDebugger/Runtime/AdsStatus.meta
new file mode 100644
index 0000000..e93118d
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/AdsStatus.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: d58fb9f98adf4830b25ff52a810ffdd6
+timeCreated: 1714471155
\ No newline at end of file
diff --git a/Runtime/GuruDebugger/Runtime/AdsStatus/AdStatus.cs b/Runtime/GuruDebugger/Runtime/AdsStatus/AdStatus.cs
new file mode 100644
index 0000000..0e8b079
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/AdsStatus/AdStatus.cs
@@ -0,0 +1,42 @@
+namespace Guru.Debugger
+{
+    public class AdStatus
+    {
+
+        private static AdStatusPresenter _adp;
+
+        private static bool _inited;
+        
+        
+        public static void Install()
+        {
+            if (_inited) return;
+            _inited = true;
+            _adp = new AdStatusPresenter();
+            _adp.Init();
+            
+        }
+
+
+        public static void ShowMonitor()
+        {
+            if(!_inited) Install();
+
+            if (_adp != null)
+            {
+                _adp.ShowMonitor();
+            }
+        }
+
+        public static void HideMonitor()
+        {
+            if(!_inited) Install();
+
+            if (_adp != null)
+            {
+                _adp.HideMonitor();
+            }
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/Runtime/GuruDebugger/Runtime/AdsStatus/AdStatus.cs.meta b/Runtime/GuruDebugger/Runtime/AdsStatus/AdStatus.cs.meta
new file mode 100644
index 0000000..201a6ac
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/AdsStatus/AdStatus.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 2d3bb9dff8e44e5c8d76a505ebf0e5c0
+timeCreated: 1714188842
\ No newline at end of file
diff --git a/Runtime/GuruDebugger/Runtime/AdsStatus/AdStatusConsts.cs b/Runtime/GuruDebugger/Runtime/AdsStatus/AdStatusConsts.cs
new file mode 100644
index 0000000..c18f9df
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/AdsStatus/AdStatusConsts.cs
@@ -0,0 +1,14 @@
+namespace Guru.Debugger
+{
+    public class AdStatusConsts
+    {
+
+        public static readonly int MaxInfoCount = 20;
+        public static readonly string ColorGreen = "88FF00";
+        public static readonly string ColorRed = "FF0000";
+        public static readonly string ColorGray = "747474";
+        public static readonly string ColorYellow = "FFE700";
+        public static readonly float MonitorStartAlpha = 0.72f;
+        public static readonly float MonitorStayTime = 5f;
+    }
+}
\ No newline at end of file
diff --git a/Runtime/GuruDebugger/Runtime/AdsStatus/AdStatusConsts.cs.meta b/Runtime/GuruDebugger/Runtime/AdsStatus/AdStatusConsts.cs.meta
new file mode 100644
index 0000000..283ae6f
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/AdsStatus/AdStatusConsts.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 707f290f7f5a40959be9a2e4cc3f7196
+timeCreated: 1714190216
\ No newline at end of file
diff --git a/Runtime/GuruDebugger/Runtime/AdsStatus/Data.meta b/Runtime/GuruDebugger/Runtime/AdsStatus/Data.meta
new file mode 100644
index 0000000..404d350
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/AdsStatus/Data.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: afeefc6f0b0b4a88b274a24366952bd1
+timeCreated: 1714189118
\ No newline at end of file
diff --git a/Runtime/GuruDebugger/Runtime/AdsStatus/Data/AdStatusInfo.cs b/Runtime/GuruDebugger/Runtime/AdsStatus/Data/AdStatusInfo.cs
new file mode 100644
index 0000000..152d2d3
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/AdsStatus/Data/AdStatusInfo.cs
@@ -0,0 +1,59 @@
+
+
+namespace Guru.Debugger
+{
+    using System;
+    
+    
+    /// 
+    /// 广告类型
+    /// 
+    public enum AdType
+    {
+        Banner,
+        Interstitial,
+        Rewarded,
+    }
+
+    /// 
+    /// 广告状态枚举
+    /// 
+    public enum AdStatusType
+    {
+        NotReady,
+        Loading,
+        Loaded,
+        LoadFailed,
+        DisplayFailed,
+        Closed,
+        Paid,
+        Clicked
+    }
+
+
+    /// 
+    /// 广告状态信息
+    /// 
+    public class AdStatusInfo
+    {
+        public string adUnitId;
+        public AdType adType;
+        public AdStatusType status = AdStatusType.NotReady;
+        public string info;
+        public DateTime date;
+        public string network;
+        public string creativeId;
+        public double revenue;
+        public string waterfall;
+        public string format;
+
+
+        public string GetDate() => date.ToString("yy-MM-dd HH:mm:ss");
+
+        public string ToLogString()
+        {
+            return $"[{GetDate()}] {adType}:{status}\tid:{adUnitId}\tname:{format}\tnetwork{network}\trevenue:{revenue}\twaterfall:{waterfall}\tinfo:{info}";
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/Runtime/GuruDebugger/Runtime/AdsStatus/Data/AdStatusInfo.cs.meta b/Runtime/GuruDebugger/Runtime/AdsStatus/Data/AdStatusInfo.cs.meta
new file mode 100644
index 0000000..c487a04
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/AdsStatus/Data/AdStatusInfo.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: acca1ff8fa8e4b22a42b1e99d6f0da06
+timeCreated: 1714189132
\ No newline at end of file
diff --git a/Runtime/GuruDebugger/Runtime/AdsStatus/MVP.meta b/Runtime/GuruDebugger/Runtime/AdsStatus/MVP.meta
new file mode 100644
index 0000000..c552d32
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/AdsStatus/MVP.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: a03478ca777c43ce8cbf5e029732621f
+timeCreated: 1714189110
\ No newline at end of file
diff --git a/Runtime/GuruDebugger/Runtime/AdsStatus/MVP/AdStatusModel.cs b/Runtime/GuruDebugger/Runtime/AdsStatus/MVP/AdStatusModel.cs
new file mode 100644
index 0000000..9062f34
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/AdsStatus/MVP/AdStatusModel.cs
@@ -0,0 +1,68 @@
+using System;
+
+namespace Guru.Debugger
+{
+    public class AdStatusModel
+    {
+
+
+        public string monitorInfo;
+
+
+        public int bannerTotalCount = 0;
+        public int bannerSuccessCount = 0;
+        public int bannerFailCount = 0;
+        
+        public int interstitialTotalCount = 0;
+        public int interstitialSuccessCount = 0;
+        public int interstitialFailCount = 0;
+        
+        public int rewardedTotalCount = 0;
+        public int rewardedSuccessCount = 0;
+        public int rewardedFailCount = 0;
+        
+        public void AddBannerCount(bool success)
+        {
+            bannerTotalCount++;
+            if (success)
+            {
+                bannerSuccessCount++;
+            }
+            else
+            {
+                bannerFailCount++;
+            }
+            
+        }
+        
+        public void AddInterCount(bool success)
+        {
+            interstitialTotalCount++;
+            if (success)
+            {
+                interstitialSuccessCount++;
+            }
+            else
+            {
+                interstitialFailCount++;
+            }
+        }
+        
+        public void AddRewardCount(bool success)
+        {
+            rewardedTotalCount++;
+            if (success)
+            {
+                rewardedSuccessCount++;
+            }
+            else
+            {
+                rewardedFailCount++;
+            }
+            
+        }
+
+
+        
+    }
+}
\ No newline at end of file
diff --git a/Runtime/GuruDebugger/Runtime/AdsStatus/MVP/AdStatusModel.cs.meta b/Runtime/GuruDebugger/Runtime/AdsStatus/MVP/AdStatusModel.cs.meta
new file mode 100644
index 0000000..219cd56
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/AdsStatus/MVP/AdStatusModel.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 0d43f5b89b964c17bc59f0e51dbe472b
+timeCreated: 1714180020
\ No newline at end of file
diff --git a/Runtime/GuruDebugger/Runtime/AdsStatus/MVP/AdStatusMonitorView.cs b/Runtime/GuruDebugger/Runtime/AdsStatus/MVP/AdStatusMonitorView.cs
new file mode 100644
index 0000000..3f3129a
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/AdsStatus/MVP/AdStatusMonitorView.cs
@@ -0,0 +1,111 @@
+
+namespace Guru.Debugger
+{
+    using System;
+    using UnityEngine.EventSystems;
+
+    using UnityEngine;
+    using UnityEngine.UI;
+    using Consts=AdStatusConsts;
+    
+
+    public class AdStatusMonitorView : MonoBehaviour, IDragHandler, IEndDragHandler, IBeginDragHandler, IPointerClickHandler
+    {
+
+        public bool Active
+        {
+            get => gameObject.activeSelf;
+            set => gameObject.SetActive(value);
+        }
+
+        public float Alpha
+        {
+            get => _canvasGroup?.alpha ?? 0;
+            set
+            {
+                if(_canvasGroup != null) 
+                    _canvasGroup.alpha = value;
+            } 
+        }
+
+
+        [SerializeField] private CanvasGroup _canvasGroup;
+        [SerializeField] private Text _txtInfo;
+        private IPointerClickHandler _pointerClickHandlerImplementation;
+
+
+        private DateTime _clickStartDate;
+        private bool _isOnDraging = false;
+
+        public Action OnClickHandler;
+        public Action OnDestryHandler;
+        
+
+        // Start is called before the first frame update
+        void Awake()
+        {
+            Alpha = Consts.MonitorStartAlpha;
+        }
+
+        
+
+
+        public void OnDrag(PointerEventData eventData)
+        {
+            var delat = eventData.delta;
+            transform.localPosition += new Vector3(delat.x, delat.y, 0);
+        }
+
+
+        
+
+        public void OnBeginDrag(PointerEventData eventData)
+        {
+            Alpha = 1;
+            // _clickStartDate = DateTime.Now;
+            _isOnDraging = true;
+        }
+        public void OnEndDrag(PointerEventData eventData)
+        {
+            // var sp = DateTime.Now - _clickStartDate;
+            // Debug.Log($"Drag Time: {sp.TotalSeconds}");
+            _isOnDraging = false;
+            OnPanelActivated();
+        }
+        public void OnPointerClick(PointerEventData eventData)
+        {
+            if (_isOnDraging) return;
+            // Debug.Log($"Click Handler delta: {eventData.delta}      isMoving: {eventData.IsPointerMoving()}");
+            OnClickHandler?.Invoke();
+            OnPanelActivated();
+        }
+
+        /// 
+        /// 数据刷新
+        /// 
+        /// 
+        public void OnUpdateInfo(string info)
+        {
+            _txtInfo.text = info;
+        }
+
+
+        
+        private void OnPanelActivated()
+        {
+            Alpha = 1;
+            CancelInvoke(nameof(OnbResetAlpha));
+            Invoke(nameof(OnbResetAlpha), Consts.MonitorStayTime); // 自动置灰
+        }
+
+
+        private void OnbResetAlpha()
+        {
+            if (_canvasGroup == null) return;
+            Alpha = Consts.MonitorStartAlpha;
+        }
+
+    }
+
+}
+
diff --git a/Runtime/GuruDebugger/Runtime/AdsStatus/MVP/AdStatusMonitorView.cs.meta b/Runtime/GuruDebugger/Runtime/AdsStatus/MVP/AdStatusMonitorView.cs.meta
new file mode 100644
index 0000000..3cd7376
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/AdsStatus/MVP/AdStatusMonitorView.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ed7d7e0d6ce2048c1bacbd901b97c752
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/GuruDebugger/Runtime/AdsStatus/MVP/AdStatusPresenter.Ads.cs b/Runtime/GuruDebugger/Runtime/AdsStatus/MVP/AdStatusPresenter.Ads.cs
new file mode 100644
index 0000000..b5ee8e2
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/AdsStatus/MVP/AdStatusPresenter.Ads.cs
@@ -0,0 +1,416 @@
+
+
+namespace Guru.Debugger
+{
+    using System;
+    using System.Collections.Generic;
+    using System.Text;
+    using UnityEngine;
+    using Consts=AdStatusConsts;
+    
+    
+    
+    public partial class AdStatusPresenter
+    {
+        private Queue _bannerInfos;
+        private Queue _interInfos;
+        private Queue _rewardInfos;
+
+        private AdStatusInfo _curBadsInfo;
+        private AdStatusInfo _curIadsInfo;
+        private AdStatusInfo _curRadsInfo;
+        
+        #region InfoContainer
+
+        /// 
+        /// 添加对应的 Info
+        /// 
+        /// 
+        private void AddBannerInfo(AdStatusInfo info)
+        {
+            if (_bannerInfos.Count >= AdStatusConsts.MaxInfoCount)
+            {
+                _bannerInfos.Dequeue();
+            }
+            Debug.Log(info.ToLogString());
+            _bannerInfos.Enqueue(info);
+            _curBadsInfo = info;
+            OnStatueChanged(info);
+        }
+        
+        private void AddInterInfo(AdStatusInfo info)
+        {
+            if (_interInfos.Count >= AdStatusConsts.MaxInfoCount)
+            {
+                _interInfos.Dequeue();
+            }
+            _interInfos.Enqueue(info);
+            _curIadsInfo = info;
+            OnStatueChanged(info);
+        }
+        
+        private void AddRewardInfo(AdStatusInfo info)
+        {
+            if (_rewardInfos.Count >= AdStatusConsts.MaxInfoCount)
+            {
+                _rewardInfos.Dequeue();
+            }
+            _rewardInfos.Enqueue(info);
+            _curRadsInfo = info;
+            OnStatueChanged(info);
+        }
+
+
+
+
+        private void OnStatueChanged(AdStatusInfo info)
+        {
+            _model.monitorInfo = CreateMonitorInfo();
+            
+            if (info != null)
+            {
+                int code = 0;
+                if (info.status == AdStatusType.LoadFailed || info.status == AdStatusType.DisplayFailed)
+                {
+                    code = -1;
+                }
+                else if (info.status == AdStatusType.Loaded)
+                {
+                    code = 1;
+                }
+                
+                switch (info.adType)
+                {
+                    case AdType.Banner:
+                        if(code == 1) _model.AddBannerCount(true);
+                        else if(code == -1) _model.AddBannerCount(false);
+                        break;
+                    case AdType.Interstitial:
+                        if(code == 1) _model.AddInterCount(true);
+                        else if(code == -1) _model.AddInterCount(false);
+                        break;
+                    case AdType.Rewarded:
+                        if(code == 1) _model.AddRewardCount(true);
+                        else if(code == -1) _model.AddRewardCount(false);
+                        break;
+                }
+            }
+
+            UpdateView(); // 刷新视图
+        }
+
+
+        private string CreateMonitorInfo()
+        {
+            string msg = "";
+            bool loaded = false;
+            
+            
+            
+            StringBuilder sb = new StringBuilder();
+
+            if (GuruSDK.IsAdsReady)
+            {
+                msg = ColoredText("AdService not initialized...", Consts.ColorRed);
+                return msg;
+            }
+            
+            if (_curBadsInfo == null)
+            {
+                msg = $"BADS: {ColoredText("not ready", Consts.ColorRed)}\n";
+            }
+            else
+            {
+
+                switch (_curBadsInfo.status)
+                {
+                    case AdStatusType.Loaded:
+                        msg = $"BADS: {ColoredText("loaded", Consts.ColorGreen)}\n\tnetwork: {_curBadsInfo.network}\n\twaterfall: {_curBadsInfo.waterfall}\n";
+                        break;
+                    case AdStatusType.LoadFailed:
+                        msg = $"BADS: {ColoredText("loading failed", Consts.ColorRed)}\n\tmessage: {_curBadsInfo.info}\n";
+                        break;
+                    case AdStatusType.DisplayFailed:
+                        msg = $"BADS: {ColoredText("display failed", Consts.ColorRed)}\n\tmessage: {_curBadsInfo.info}\n";
+                        break;  
+                    case AdStatusType.Loading:
+                        msg = $"BADS: {ColoredText("loading...", Consts.ColorYellow)}\n\tformat: {_curBadsInfo.format}\n";
+                        break;
+                    case AdStatusType.Paid:
+                        msg = $"BADS: {ColoredText("display", Consts.ColorGreen)}\n\tnetwork: {_curIadsInfo.network}\n\trevenue: {_curBadsInfo.revenue}\n";
+                        break;
+                    case AdStatusType.NotReady:
+                        msg = $"BADS: {ColoredText("not ready", Consts.ColorGray)}\n\t{ColoredText("---", Consts.ColorGray)}\n";
+                        break;
+                    default:
+                        msg = $"BADS: {ColoredText("other", Consts.ColorGray)}\n\tstatus: {ColoredText($"{_curBadsInfo.status}", Consts.ColorYellow)}\n";
+                        break;
+                }
+            }
+            sb.Append(msg);
+
+
+            if (_curIadsInfo == null)
+            {
+                msg = $"IADS: {ColoredText("not ready", Consts.ColorRed)}\n";
+            }
+            else
+            {
+                switch (_curIadsInfo.status)
+                {
+                    case AdStatusType.Loaded:
+                        msg = $"IADS: {ColoredText("loaded", Consts.ColorGreen)}\n\tnetwork: {_curIadsInfo.network}\n\twaterfall: {_curBadsInfo.waterfall}\n";
+                        break;
+                    case AdStatusType.LoadFailed:
+                        msg = $"IADS: {ColoredText("loading failed", Consts.ColorRed)}\n\tmessage: {_curIadsInfo.info}\n";
+                        break;
+                    case AdStatusType.DisplayFailed:
+                        msg = $"IADS: {ColoredText("display failed", Consts.ColorRed)}\n\tmessage: {_curIadsInfo.info}\n";
+                        break;  
+                    case AdStatusType.Loading:
+                        msg = $"IADS: {ColoredText("loading...", Consts.ColorYellow)}\n\tformat: {_curIadsInfo.format}\n";
+                        break;
+                    case AdStatusType.Paid:
+                        msg = $"IADS: {ColoredText("get revenue", Consts.ColorGreen)}\n\trevenue: {_curIadsInfo.revenue}\n";
+                        break;
+                    case AdStatusType.NotReady:
+                        msg = $"IADS: {ColoredText("not ready", Consts.ColorGray)}\n\t{ColoredText("---", Consts.ColorGray)}\n";
+                        break;
+                    default:
+                        msg = $"IADS: {ColoredText("other", Consts.ColorGray)}\n\tstatus: {ColoredText($"{_curIadsInfo.status}", Consts.ColorYellow)}\n";
+                        break;
+                }
+            }
+            sb.Append(msg);
+            
+
+            if (_curRadsInfo == null)
+            {
+                msg = $"RADS: {ColoredText("not ready", Consts.ColorRed)}\n";
+            }
+            else
+            {
+                switch (_curRadsInfo.status)
+                {
+                    case AdStatusType.Loaded:
+                        msg = $"RADS: {ColoredText("loaded", Consts.ColorGreen)}\n\tnetwork: {_curRadsInfo.network}\n\twaterfall: {_curRadsInfo.waterfall}\n";
+                        break;
+                    case AdStatusType.LoadFailed:
+                        msg = $"RADS: {ColoredText("loading failed", Consts.ColorRed)}\n\tmessage: {_curRadsInfo.info}\n";
+                        break;
+                    case AdStatusType.DisplayFailed:
+                        msg = $"RADS: {ColoredText("display failed", Consts.ColorRed)}\n\tmessage: {_curRadsInfo.info}\n";
+                        break;  
+                    case AdStatusType.Loading:
+                        msg = $"RADS: {ColoredText("loading...", Consts.ColorYellow)}\n\tformat: {_curRadsInfo.format}\n";
+                        break;
+                    case AdStatusType.Paid:
+                        msg = $"RADS: {ColoredText("get revenue", Consts.ColorGreen)}\n\trevenue: {_curRadsInfo.revenue}\n";
+                        break;
+                    case AdStatusType.NotReady:
+                        msg = $"RADS: {ColoredText("not ready", Consts.ColorGray)}\n\t{ColoredText("---", Consts.ColorGray)}\n";
+                        break;
+                    default:
+                        msg = $"RADS: {ColoredText("other", Consts.ColorGray)}\n\tstatus: {ColoredText($"{_curRadsInfo.status}", Consts.ColorYellow)}\n";
+                        break;
+                }
+            }
+            sb.Append(msg);
+            
+            
+            return sb.ToString();
+        }
+
+
+        private string ColoredText(string content, string hexColor = "000000")
+        {
+            return $"{content}";
+        }
+
+
+        #endregion
+        
+        
+        #region AppLovin
+
+        private void InitAdsCallbacks()
+        {
+            AddCallbacks();
+
+            _bannerInfos = new Queue(AdStatusConsts.MaxInfoCount);
+            _interInfos = new Queue(AdStatusConsts.MaxInfoCount);
+            _rewardInfos = new Queue(AdStatusConsts.MaxInfoCount);    
+        }
+
+
+
+
+        private void AddCallbacks()
+        {
+            //----------------- Banner -----------------
+            GuruSDK.Callbacks.Ads.OnBannerADStartLoad += OnBannerAdLoadEvent;
+            MaxSdkCallbacks.Banner.OnAdLoadedEvent += OnBannerAdLoadedEvent;
+            MaxSdkCallbacks.Banner.OnAdLoadFailedEvent += OnBannerAdLoadFailEvent;
+            MaxSdkCallbacks.Banner.OnAdRevenuePaidEvent += OnBannerAdRevenuePaidEvent;
+            MaxSdkCallbacks.Banner.OnAdClickedEvent += OnBannerAdClickedEvent;
+            //----------------- Interstitials -----------------
+            GuruSDK.Callbacks.Ads.OnInterstitialADStartLoad += OnInterAdLoadEvent;
+            MaxSdkCallbacks.Interstitial.OnAdLoadedEvent += OnInterAdLoadedEvent;
+            MaxSdkCallbacks.Interstitial.OnAdLoadFailedEvent += OnInterAdLoadFailEvent;
+            MaxSdkCallbacks.Interstitial.OnAdDisplayFailedEvent += OnInterAdDisplayFailEvent;
+            MaxSdkCallbacks.Interstitial.OnAdRevenuePaidEvent += OnInterAdRevenuePaidEvent;
+            MaxSdkCallbacks.Interstitial.OnAdClickedEvent += OnInterAdClickedEvent;
+            MaxSdkCallbacks.Interstitial.OnAdHiddenEvent += OnInterAdHiddenEvent;
+            //----------------- Reward -----------------
+            Guru.GuruSDK.Callbacks.Ads.OnRewardedADStartLoad += OnRewardedStartLoad;
+            MaxSdkCallbacks.Rewarded.OnAdLoadedEvent += OnRewardAdLoadedEvent;
+            MaxSdkCallbacks.Rewarded.OnAdLoadFailedEvent += OnRewardAdLoadFailEvent;
+            MaxSdkCallbacks.Rewarded.OnAdDisplayFailedEvent += OnRewardAdDisplayFailEvent;
+            MaxSdkCallbacks.Rewarded.OnAdRevenuePaidEvent += OnRewardAdRevenuePaidEvent;
+            MaxSdkCallbacks.Rewarded.OnAdClickedEvent += OnRewardAdClickedEvent;
+            MaxSdkCallbacks.Rewarded.OnAdHiddenEvent += OnRewardAdHiddenEvent;
+            
+            
+        }
+
+       
+
+
+        //-------------- Banner ------------------
+        private void OnBannerAdLoadEvent(string adUnitId)
+        {
+            AddBannerInfo(CreateLoadingInfo(adUnitId, AdType.Banner));
+        }
+        
+        private void OnBannerAdLoadedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
+        {
+            var waterfall = adInfo.WaterfallInfo?.Name ?? "";
+            AddBannerInfo(CreateLoadedInfo(adUnitId, AdType.Banner, adInfo.NetworkName, adInfo.AdFormat, waterfall));
+        }
+        
+        private void OnBannerAdLoadFailEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo)
+        {
+            var waterfall = errorInfo.WaterfallInfo?.Name ?? "";
+            var format = "BADS";
+            var msg = $"[{errorInfo.MediatedNetworkErrorCode}] {errorInfo.MediatedNetworkErrorMessage}";
+            var network = "error";
+            AddBannerInfo(CreateFailInfo(adUnitId, AdType.Banner, network, format, waterfall, msg));
+        }
+
+        private void OnBannerAdClickedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
+        {
+            var waterfall = adInfo.WaterfallInfo?.Name ?? "";
+            AddBannerInfo(CreateClosedInfo(adUnitId, AdType.Banner, adInfo.NetworkName, adInfo.AdFormat, waterfall));
+        }
+
+        private void OnBannerAdRevenuePaidEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
+        {
+            var waterfall = adInfo.WaterfallInfo?.Name ?? "";
+            AddBannerInfo(CreatePaidInfo(adUnitId, AdType.Banner, adInfo.Revenue, adInfo.NetworkName, adInfo.AdFormat, waterfall));
+        }
+
+        
+        //----------------- Interstitial -----------------
+        private void OnInterAdLoadEvent(string adUnitId)
+        {
+            AddInterInfo(CreateLoadingInfo(adUnitId, AdType.Interstitial));
+        }
+        
+        private void OnInterAdHiddenEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
+        {
+            var waterfall = adInfo.WaterfallInfo?.Name ?? "";
+            AddInterInfo(CreateClosedInfo(adUnitId, AdType.Interstitial, adInfo.NetworkName, adInfo.AdFormat, waterfall));
+        }
+
+        private void OnInterAdClickedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
+        {
+            var waterfall = adInfo.WaterfallInfo?.Name ?? "";
+            AddInterInfo(CreateClickedInfo(adUnitId, AdType.Interstitial, adInfo.NetworkName, adInfo.AdFormat, waterfall));
+        }
+
+        private void OnInterAdRevenuePaidEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
+        {
+            var waterfall = adInfo.WaterfallInfo?.Name ?? "";
+            AddInterInfo(CreatePaidInfo(adUnitId, AdType.Interstitial, adInfo.Revenue, adInfo.NetworkName, adInfo.AdFormat, waterfall));
+        }
+
+        private void OnInterAdLoadFailEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo)
+        {
+            var waterfall = errorInfo.WaterfallInfo?.Name ?? "";
+            var format = "IADS";
+            var msg = $"[{errorInfo.MediatedNetworkErrorCode}] {errorInfo.MediatedNetworkErrorMessage}";
+            var network = "error";
+            AddInterInfo(CreateFailInfo(adUnitId, AdType.Interstitial, network, format, waterfall, msg));
+        }
+        
+        private void OnInterAdDisplayFailEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo, MaxSdkBase.AdInfo adInfo)
+        {
+            var waterfall = errorInfo.WaterfallInfo?.Name ?? "";
+            var format = adInfo.AdFormat;
+            var msg = $"[{errorInfo.MediatedNetworkErrorCode}] {errorInfo.MediatedNetworkErrorMessage}";
+            var network = adInfo.NetworkName;
+            AddInterInfo(CreateFailInfo(adUnitId, AdType.Interstitial, network, format, waterfall, msg, true));
+        }
+        
+        private void OnInterAdLoadedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
+        {
+            var waterfall = adInfo.WaterfallInfo?.Name ?? "";
+            AddInterInfo(CreateLoadedInfo(adUnitId, AdType.Interstitial, adInfo.NetworkName, adInfo.AdFormat, waterfall));
+        }
+        
+        //----------------- Reward -----------------
+        private void OnRewardedStartLoad(string adUnitId)
+        {
+            AddRewardInfo(CreateLoadingInfo(adUnitId, AdType.Rewarded));
+        }
+        
+        private void OnRewardAdHiddenEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
+        {
+            var waterfall = adInfo.WaterfallInfo?.Name ?? "";
+            AddRewardInfo(CreateClosedInfo(adUnitId, AdType.Rewarded, adInfo.NetworkName, adInfo.AdFormat, waterfall));
+        }
+
+        private void OnRewardAdClickedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
+        {
+            var waterfall = adInfo.WaterfallInfo?.Name ?? "";
+            AddRewardInfo(CreateClickedInfo(adUnitId, AdType.Rewarded, adInfo.NetworkName, adInfo.AdFormat, waterfall));
+        }
+
+        private void OnRewardAdRevenuePaidEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
+        {
+            var waterfall = adInfo.WaterfallInfo?.Name ?? "";
+            AddRewardInfo(CreatePaidInfo(adUnitId, AdType.Rewarded, adInfo.Revenue, adInfo.NetworkName, adInfo.AdFormat, waterfall));
+        }
+
+        private void OnRewardAdLoadFailEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo)
+        {
+            var waterfall = errorInfo.WaterfallInfo?.Name ?? "";
+            var format = "IADS";
+            var msg = $"[{errorInfo.MediatedNetworkErrorCode}] {errorInfo.MediatedNetworkErrorMessage}";
+            var network = "error";
+            AddRewardInfo(CreateFailInfo(adUnitId, AdType.Rewarded, network, format, waterfall, msg));
+        }
+        
+        private void OnRewardAdDisplayFailEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo, MaxSdkBase.AdInfo adInfo)
+        {
+            var waterfall = errorInfo.WaterfallInfo?.Name ?? "";
+            var format = adInfo.AdFormat;
+            var msg = $"[{errorInfo.MediatedNetworkErrorCode}] {errorInfo.MediatedNetworkErrorMessage}";
+            var network = adInfo.NetworkName;
+            AddRewardInfo(CreateFailInfo(adUnitId, AdType.Rewarded, network, format, waterfall, msg, true));
+        }
+        
+        private void OnRewardAdLoadedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
+        {
+            var waterfall = adInfo.WaterfallInfo?.Name ?? "";
+            AddRewardInfo(CreateLoadedInfo(adUnitId, AdType.Rewarded, adInfo.NetworkName, adInfo.AdFormat, waterfall));
+        }
+        
+        
+        
+        
+
+        #endregion
+
+    }
+}
\ No newline at end of file
diff --git a/Runtime/GuruDebugger/Runtime/AdsStatus/MVP/AdStatusPresenter.Ads.cs.meta b/Runtime/GuruDebugger/Runtime/AdsStatus/MVP/AdStatusPresenter.Ads.cs.meta
new file mode 100644
index 0000000..b11ebb2
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/AdsStatus/MVP/AdStatusPresenter.Ads.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 17f2898f0a96448f91b71112d7bf19dc
+timeCreated: 1714190118
\ No newline at end of file
diff --git a/Runtime/GuruDebugger/Runtime/AdsStatus/MVP/AdStatusPresenter.Factory.cs b/Runtime/GuruDebugger/Runtime/AdsStatus/MVP/AdStatusPresenter.Factory.cs
new file mode 100644
index 0000000..31d2df8
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/AdsStatus/MVP/AdStatusPresenter.Factory.cs
@@ -0,0 +1,101 @@
+namespace Guru.Debugger
+{
+    using System;
+    
+    
+    
+    public partial class AdStatusPresenter
+    {
+
+        internal static AdStatusInfo CreateLoadingInfo(string adUnitId, AdType adType)
+        {
+            return new AdStatusInfo
+            {
+                adUnitId = adUnitId,
+                adType = adType,
+                status = AdStatusType.Loading,
+                date = DateTime.Now,
+            };
+        }
+        internal static AdStatusInfo CreateLoadedInfo(string adUnitId, AdType adType, string network, string format, string waterfall)
+        {
+            return new AdStatusInfo
+            {
+                adUnitId = adUnitId,
+                adType = adType,
+                status = AdStatusType.Loaded,
+                date = DateTime.Now,
+                network = network,
+                format = format,
+                waterfall = waterfall
+            };
+        }
+
+        internal static AdStatusInfo CreateFailInfo(string adUnitId, AdType adType, string network, string format, string waterfall, string message = "", bool disPlayError = false)
+        {
+            if (string.IsNullOrEmpty(network)) network = "unknown";
+            return new AdStatusInfo
+            {
+                adUnitId = adUnitId,
+                adType = adType,
+                status = disPlayError ? AdStatusType.LoadFailed : AdStatusType.DisplayFailed,
+                date = DateTime.Now,
+                info = message,
+                network = network,
+                format = format,
+                waterfall = waterfall
+            };
+        }
+        
+        
+        internal static AdStatusInfo CreateClosedInfo(string adUnitId, AdType adType, string network, string format, string waterfall)
+        {
+            if (string.IsNullOrEmpty(network)) network = "unknown";
+            return new AdStatusInfo
+            {
+                adUnitId = adUnitId,
+                adType = adType,
+                status = AdStatusType.Closed,
+                date = DateTime.Now,
+                network = network,
+                format = format,
+                waterfall = waterfall
+            };
+        }
+        
+   
+        
+        internal static AdStatusInfo CreatePaidInfo(string adUnitId, AdType adType, double revenue, string network, string format, string waterfall)
+        {
+            if (string.IsNullOrEmpty(network)) network = "unknown";
+            return new AdStatusInfo
+            {
+                adUnitId = adUnitId,
+                adType = adType,
+                status = AdStatusType.Paid,
+                date = DateTime.Now,
+                revenue = revenue,
+                network = network,
+                format = format,
+                waterfall = waterfall
+            };
+        }
+        
+        
+        internal static AdStatusInfo CreateClickedInfo(string adUnitId, AdType adType, string network, string format, string waterfall)
+        {
+            if (string.IsNullOrEmpty(network)) network = "unknown";
+            return new AdStatusInfo
+            {
+                adUnitId = adUnitId,
+                adType = adType,
+                status = AdStatusType.Clicked,
+                date = DateTime.Now,
+                network = network,
+                format = format,
+                waterfall = waterfall
+            };
+        }
+        
+    }
+}
\ No newline at end of file
diff --git a/Runtime/GuruDebugger/Runtime/AdsStatus/MVP/AdStatusPresenter.Factory.cs.meta b/Runtime/GuruDebugger/Runtime/AdsStatus/MVP/AdStatusPresenter.Factory.cs.meta
new file mode 100644
index 0000000..ba3ad94
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/AdsStatus/MVP/AdStatusPresenter.Factory.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 70de9f517f574b00ad3b5e88933bba06
+timeCreated: 1714189561
\ No newline at end of file
diff --git a/Runtime/GuruDebugger/Runtime/AdsStatus/MVP/AdStatusPresenter.cs b/Runtime/GuruDebugger/Runtime/AdsStatus/MVP/AdStatusPresenter.cs
new file mode 100644
index 0000000..4f9403c
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/AdsStatus/MVP/AdStatusPresenter.cs
@@ -0,0 +1,81 @@
+using UnityEngine;
+
+namespace Guru.Debugger
+{
+    public partial class AdStatusPresenter
+    {
+        const string K_DEBUGGER_ROOT = "ui/debugger_root";
+
+
+        private AdStatusMonitorView _monitor;
+
+        private AdStatusModel _model;
+        
+        
+
+
+
+        public void Init()
+        {
+            _model = new AdStatusModel();
+            
+            LoadDebuggerRoot();
+            InitAdsCallbacks();
+            
+        }
+
+        /// 
+        /// Debugger Root
+        /// 
+        private void LoadDebuggerRoot()
+        {
+            var prefab = Resources.Load(K_DEBUGGER_ROOT);
+
+            if (prefab != null)
+            {
+                var go = GameObject.Instantiate(prefab);
+                go.name = "__debugger_root__";
+                
+                var t = go.transform.Find("root/ads_status_monitor");
+                if (t != null)
+                {
+                    _monitor = t.GetComponent();
+                    if (_monitor != null)
+                    {
+                        _monitor.OnUpdateInfo("ads is on loading...");
+                        _monitor.Active = false;
+                    }
+                }
+                
+
+            }
+        }
+
+
+
+        private void UpdateView()
+        {
+            if (_model == null) return;
+            
+            _monitor.OnUpdateInfo(_model.monitorInfo);
+        }
+
+
+        internal void ShowMonitor()
+        {
+            if (_monitor == null) return;
+            _monitor.Active = true;
+        }
+        internal void HideMonitor()
+        {
+            if (_monitor == null) return;
+            _monitor.Active = false;
+        }
+    }
+}
+
+
+
+
+
+    
\ No newline at end of file
diff --git a/Runtime/GuruDebugger/Runtime/AdsStatus/MVP/AdStatusPresenter.cs.meta b/Runtime/GuruDebugger/Runtime/AdsStatus/MVP/AdStatusPresenter.cs.meta
new file mode 100644
index 0000000..dd6c75d
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/AdsStatus/MVP/AdStatusPresenter.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 85c881cbd1224a23a1e305a13602fe0a
+timeCreated: 1714180008
\ No newline at end of file
diff --git a/Runtime/GuruDebugger/Runtime/AdsStatus/Resources.meta b/Runtime/GuruDebugger/Runtime/AdsStatus/Resources.meta
new file mode 100644
index 0000000..e3bf90a
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/AdsStatus/Resources.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: d0d21acdf9214513b93ebcc7b58f2c8d
+timeCreated: 1714136951
\ No newline at end of file
diff --git a/Runtime/GuruDebugger/Runtime/AdsStatus/Resources/ui.meta b/Runtime/GuruDebugger/Runtime/AdsStatus/Resources/ui.meta
new file mode 100644
index 0000000..f94bb59
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/AdsStatus/Resources/ui.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 326887151680842e4ad2390b0dfa1953
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/GuruDebugger/Runtime/AdsStatus/Resources/ui/debugger_root.prefab b/Runtime/GuruDebugger/Runtime/AdsStatus/Resources/ui/debugger_root.prefab
new file mode 100644
index 0000000..005a5b5
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/AdsStatus/Resources/ui/debugger_root.prefab
@@ -0,0 +1,331 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &5150702560827386885
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 5150702560827386906}
+  m_Layer: 5
+  m_Name: root
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &5150702560827386906
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5150702560827386885}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 5150702562168738941}
+  m_Father: {fileID: 5150702561338006477}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!1 &5150702561338006473
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 5150702561338006477}
+  - component: {fileID: 5150702561338006476}
+  - component: {fileID: 5150702561338006479}
+  - component: {fileID: 5150702561338006478}
+  m_Layer: 5
+  m_Name: debugger_root
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &5150702561338006477
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5150702561338006473}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 0, y: 0, z: 0}
+  m_Children:
+  - {fileID: 5150702560827386906}
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0, y: 0}
+--- !u!223 &5150702561338006476
+Canvas:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5150702561338006473}
+  m_Enabled: 1
+  serializedVersion: 3
+  m_RenderMode: 0
+  m_Camera: {fileID: 0}
+  m_PlaneDistance: 100
+  m_PixelPerfect: 0
+  m_ReceivesEvents: 1
+  m_OverrideSorting: 0
+  m_OverridePixelPerfect: 0
+  m_SortingBucketNormalizedSize: 0
+  m_AdditionalShaderChannelsFlag: 0
+  m_SortingLayerID: 0
+  m_SortingOrder: 2000
+  m_TargetDisplay: 0
+--- !u!114 &5150702561338006479
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5150702561338006473}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_UiScaleMode: 1
+  m_ReferencePixelsPerUnit: 100
+  m_ScaleFactor: 1
+  m_ReferenceResolution: {x: 1080, y: 2048}
+  m_ScreenMatchMode: 0
+  m_MatchWidthOrHeight: 0
+  m_PhysicalUnit: 3
+  m_FallbackScreenDPI: 96
+  m_DefaultSpriteDPI: 96
+  m_DynamicPixelsPerUnit: 1
+  m_PresetInfoIsWorld: 0
+--- !u!114 &5150702561338006478
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5150702561338006473}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_IgnoreReversedGraphics: 1
+  m_BlockingObjects: 0
+  m_BlockingMask:
+    serializedVersion: 2
+    m_Bits: 4294967295
+--- !u!1 &5150702562168738940
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 5150702562168738941}
+  - component: {fileID: 5150702562168738931}
+  - component: {fileID: 5150702562168738930}
+  - component: {fileID: 6987031650776014463}
+  - component: {fileID: 5150702562168738928}
+  m_Layer: 5
+  m_Name: ads_status_monitor
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &5150702562168738941
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5150702562168738940}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 5150702562590427462}
+  m_Father: {fileID: 5150702560827386906}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 1, y: 0}
+  m_AnchorMax: {x: 1, y: 0}
+  m_AnchoredPosition: {x: -249, y: 378}
+  m_SizeDelta: {x: 480, y: 320}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &5150702562168738931
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5150702562168738940}
+  m_CullTransparentMesh: 1
+--- !u!114 &5150702562168738930
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5150702562168738940}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0, g: 0, b: 0, a: 0.8627451}
+  m_RaycastTarget: 1
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 0}
+  m_Type: 0
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+  m_PixelsPerUnitMultiplier: 1
+--- !u!225 &6987031650776014463
+CanvasGroup:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5150702562168738940}
+  m_Enabled: 1
+  m_Alpha: 0.8
+  m_Interactable: 1
+  m_BlocksRaycasts: 1
+  m_IgnoreParentGroups: 0
+--- !u!114 &5150702562168738928
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5150702562168738940}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: ed7d7e0d6ce2048c1bacbd901b97c752, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  _canvasGroup: {fileID: 6987031650776014463}
+  _txtInfo: {fileID: 5150702562590427463}
+--- !u!1 &5150702562590427457
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 5150702562590427462}
+  - component: {fileID: 5150702562590427460}
+  - component: {fileID: 5150702562590427463}
+  m_Layer: 5
+  m_Name: txt_info
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &5150702562590427462
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5150702562590427457}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 5150702562168738941}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: -20, y: -20}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &5150702562590427460
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5150702562590427457}
+  m_CullTransparentMesh: 1
+--- !u!114 &5150702562590427463
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5150702562590427457}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 0
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 0
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 14
+    m_FontStyle: 0
+    m_BestFit: 1
+    m_MinSize: 10
+    m_MaxSize: 40
+    m_Alignment: 0
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: '11111
+
+    22222
+
+    33333
+
+    44444
+
+    55555
+
+    66666'
diff --git a/Runtime/GuruDebugger/Runtime/AdsStatus/Resources/ui/debugger_root.prefab.meta b/Runtime/GuruDebugger/Runtime/AdsStatus/Resources/ui/debugger_root.prefab.meta
new file mode 100644
index 0000000..0a70fac
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/AdsStatus/Resources/ui/debugger_root.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 4332e3ea47cf5426c90ffcb6817292e6
+PrefabImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/GuruDebugger/Runtime/Debugger.meta b/Runtime/GuruDebugger/Runtime/Debugger.meta
new file mode 100644
index 0000000..98111e1
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/Debugger.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: f78334aec158543b2b8fc6157f69764b
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/GuruDebugger/Runtime/Debugger/Core.meta b/Runtime/GuruDebugger/Runtime/Debugger/Core.meta
new file mode 100644
index 0000000..86f5ccf
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/Debugger/Core.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: be43df6b6918346819c7938339e0fb93
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/GuruDebugger/Runtime/Debugger/Core/Debugger.cs b/Runtime/GuruDebugger/Runtime/Debugger/Core/Debugger.cs
new file mode 100644
index 0000000..6153469
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/Debugger/Core/Debugger.cs
@@ -0,0 +1,291 @@
+
+
+namespace Guru.Debugger
+{
+    using System;
+    using UnityEngine;
+    using UnityEngine.UI;
+    using G = GlobalVars;
+    using System.Collections.Generic;
+    using System.Linq;
+    
+    
+    public class GuruDebugger
+    {
+        public const string Version = "1.0.0";    
+        private static bool _initOnce = false;
+        private static GuruDebugger _instance;
+        public static GuruDebugger Instance
+        {
+            get
+            {
+                if (_instance == null)
+                {
+                    Init();
+                }
+                return _instance;
+            }
+        }
+
+        public static event Action OnClosed
+        {
+            add
+            {
+                if (_onViewClosed == null)
+                {
+                    _onViewClosed = value;
+                }
+                else
+                {
+                    _onViewClosed += value;
+                }
+            }
+
+            remove
+            {
+                if (_onViewClosed != null)
+                {
+                    _onViewClosed -= value;
+                }
+            }
+        }
+
+        private static Action _onViewClosed;
+
+        private DebuggerViewRoot _viewRoot;
+        private Dictionary> optionDicts;
+        private string _curTabName;
+
+        public static void Init()
+        {
+            if (_instance == null) _initOnce = false;
+
+            if (_initOnce) return;
+            _initOnce = true;
+            _instance = new GuruDebugger();
+            _instance.StartService();
+        }
+        
+        private void StartService()
+        {
+            _viewRoot = DebuggerViewRoot.Instance;
+            optionDicts = new Dictionary>(5);
+            G.Events.OnUIEvent += OnUIEvent;
+        }
+        
+        private void OnUIEvent(string evt, object data)
+        {
+            switch (evt)
+            {
+                case G.Events.EventTabClicked:
+                    OnSelectTab(data.ToString());
+                    break;
+                case G.Events.EventViewClosed:
+                    optionDicts?.Clear();
+                    _onViewClosed?.Invoke();
+                    break;
+            }
+        }
+
+
+        #region UI Layout
+
+        public OptionLayout AddOption(string uri, string content = "", Action clickHandler = null)
+        {
+            string tabName = G.Consts.DefaultTabName;
+            string optName = G.Consts.DefaultOptionName;
+            if (uri.Contains("/"))
+            {
+                var names = uri.Split('/');
+                if (names.Length > 0)
+                {
+                    tabName = names[0];
+                }
+                if(names.Length > 1) optName = names[1];
+            }
+
+            if (!optionDicts.ContainsKey(tabName))
+            {
+                optionDicts[tabName] = new List(10);
+            }
+  
+            OptionLayout opt = new OptionLayout();
+            opt.tabName = tabName;
+            opt.optName = optName;
+            opt.content = content;
+            opt.selfClickHandler = clickHandler;
+
+            AddOptionLayout(tabName, opt);
+            
+            return opt;
+        }
+
+        private void AddOptionLayout(string tabName, OptionLayout layout)
+        {
+            if (!optionDicts.ContainsKey(tabName))
+            {
+                optionDicts[tabName] = new List(20);
+            }
+            
+            optionDicts[tabName].Add(layout);
+        }
+
+
+        public void ShowPage(string tabName = "")
+        {
+            if (string.IsNullOrEmpty(tabName) 
+                && optionDicts != null && optionDicts.Count > 0)
+            {
+                tabName = optionDicts.Keys.First();
+            }
+
+            if (!string.IsNullOrEmpty(tabName))
+            {
+                RenderPage(tabName);
+            }
+        }
+
+        /// 
+        /// 渲染页面
+        /// 
+        /// 
+        private void RenderPage(string tabName)
+        {
+            if (string.IsNullOrEmpty(tabName)) return;
+            
+            _viewRoot.Show();
+            _viewRoot.RefreshTabs(tabName, optionDicts.Keys.ToList());
+            _viewRoot.CleanOptions();
+            if (optionDicts.TryGetValue(tabName, out var opts))
+            {
+                OptionLayout ol;
+                UIOptionItem ui;
+                for (int i = 0; i < opts.Count; i++)
+                {
+                    ol = opts[i];
+                    ui = _viewRoot.RegisterOption(ol.optName, ol.content);
+
+                    if (ol.selfClickHandler != null)
+                    {
+                        var btnName = ol.content;
+                        if (string.IsNullOrEmpty(btnName)) btnName = ol.optName;
+                        var btn = _viewRoot.AddOptionButton(ui, btnName, ol.selfClickHandler);
+                        ui.Clickable = true;
+                        continue;
+                    }
+                    
+                    foreach (var item in ol.items)
+                    {
+                        switch (item.type)
+                        {
+                            case "button":
+                                var btn = _viewRoot.AddOptionButton(ui, item.name, item.clickHandler);
+                                if (!item.size.Equals(Vector2.zero)) btn.Size = item.size;
+                                break;
+                            
+                            case "label":
+                                var lb = _viewRoot.AddOptionLabel(ui, item.name, item.align);
+                                if (!item.size.Equals(Vector2.zero)) lb.Size = item.size;
+                                break;
+                        }
+                    }
+                }
+            }
+            else
+            {
+                Debug.LogError($"{tabName} not found!");
+            }
+
+        }
+
+
+        private void OnSelectTab(string tabName)
+        {
+            if (_curTabName == tabName) return;
+            Instance.ShowPage(tabName);
+        }
+
+        #endregion
+
+        #region Display
+        
+        public static void Show(string tabName = "")
+        {
+            Instance.ShowPage(tabName);
+        }
+
+        public static void Hide() => Instance._viewRoot.Hide();
+        
+        #endregion
+        
+        #region DebuggerOption
+        
+        public class OptionLayout
+        {
+            public string optName;
+            public string content;
+            public string tabName;
+            public Action selfClickHandler;
+
+            internal List items;
+
+
+            public OptionLayout()
+            {
+                items = new List(10);
+            }
+
+
+            public OptionLayout AddLabel(string labelName)
+            {
+                items.Add(new OptionItemLayout()
+                {
+                    name = labelName,
+                    type = "label",
+                });
+                return this;
+            }
+            
+            public OptionLayout AddButton(string btnName, Action onClick)
+            {
+                items.Add(new OptionItemLayout()
+                {
+                    name = btnName,
+                    type = "button",
+                    clickHandler = onClick
+                });
+                return this;
+            }
+        }
+
+        internal class OptionItemLayout
+        {
+            public string type;
+            public Action clickHandler;
+            public string name;
+            public string content;
+            public TextAnchor align = TextAnchor.MiddleCenter;
+            public Vector2 size = Vector2.zero;
+        }
+
+        #endregion
+        
+    }
+
+
+    public static class OptionLayoutExtension
+    {
+        public static GuruDebugger.OptionLayout AddCopyButton(this GuruDebugger.OptionLayout layout, Action onClick = null)
+        {
+            layout.AddButton("Copy", ()=>
+            {
+                GUIUtility.systemCopyBuffer = layout.content;
+                onClick?.Invoke();
+            });
+            return layout;
+        }
+    }
+
+
+
+}
\ No newline at end of file
diff --git a/Runtime/GuruDebugger/Runtime/Debugger/Core/Debugger.cs.meta b/Runtime/GuruDebugger/Runtime/Debugger/Core/Debugger.cs.meta
new file mode 100644
index 0000000..2988732
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/Debugger/Core/Debugger.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: f5ccddaa61334c748afe7c39cf8e11b7
+timeCreated: 1711014134
\ No newline at end of file
diff --git a/Runtime/GuruDebugger/Runtime/Debugger/Core/DebuggerConsts.cs b/Runtime/GuruDebugger/Runtime/Debugger/Core/DebuggerConsts.cs
new file mode 100644
index 0000000..d246bec
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/Debugger/Core/DebuggerConsts.cs
@@ -0,0 +1,34 @@
+
+
+namespace Guru.Debugger
+{
+    using System;
+    using UnityEngine;
+
+    public static class GlobalVars
+    {
+        
+        public class Events
+        {
+            public const string EventTabClicked  = "evt_tab_clicked";
+            public const string EventViewClosed  = "evt_view_closed";
+
+            public static Action OnUIEvent = (e, o) => { };
+        }
+        
+
+        public class Consts
+        {
+            public const string DefaultTabName = "Tab";
+            public const string DefaultOptionName = "Opt";
+        }
+
+        public class Colors
+        {
+            public static Color Gray = new Color(1,1,1, 0.12f);
+            public static Color Gray2 = new Color(1,1,1, 0.036f);
+            public static Color LightGreen = new Color(0.02f,1,1, 0.788f);
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/Runtime/GuruDebugger/Runtime/Debugger/Core/DebuggerConsts.cs.meta b/Runtime/GuruDebugger/Runtime/Debugger/Core/DebuggerConsts.cs.meta
new file mode 100644
index 0000000..4fa07c9
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/Debugger/Core/DebuggerConsts.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 1f8d5969a496489eab759e7ff15a9cdc
+timeCreated: 1711021436
\ No newline at end of file
diff --git a/Runtime/GuruDebugger/Runtime/Debugger/Core/UIComponent.cs b/Runtime/GuruDebugger/Runtime/Debugger/Core/UIComponent.cs
new file mode 100644
index 0000000..7b9e588
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/Debugger/Core/UIComponent.cs
@@ -0,0 +1,57 @@
+using System;
+using UnityEngine;
+
+namespace Guru.Debugger
+{
+    public class UIComponent: MonoBehaviour
+    {
+        
+        public virtual long GID { get; protected set; }
+        public virtual string ID => $"{GID}";
+        
+        public Transform Parent
+        {
+            get => transform.parent;
+            set
+            {
+                transform.SetParent(value);
+                transform.localPosition = Vector3.zero;
+            }
+        }
+
+        public Vector2 Size
+        {
+            get => _rectTransform.sizeDelta;
+            set => _rectTransform.sizeDelta = value;
+        }
+
+
+        public bool Active
+        {
+            get => gameObject.activeSelf;
+            set => gameObject.SetActive(value);
+        }
+
+        protected RectTransform _rectTransform;
+        private void Awake()
+        {
+            _rectTransform = gameObject.GetComponent();
+
+            OnCreated();
+        }
+
+        protected virtual void OnCreated()
+        {
+            
+        }
+
+        /// 
+        /// 刷新UI
+        /// 
+        public virtual void Refresh()
+        {
+            
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/Runtime/GuruDebugger/Runtime/Debugger/Core/UIComponent.cs.meta b/Runtime/GuruDebugger/Runtime/Debugger/Core/UIComponent.cs.meta
new file mode 100644
index 0000000..f07c1eb
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/Debugger/Core/UIComponent.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: c65140f21e494b6fa50779248643af52
+timeCreated: 1711063080
\ No newline at end of file
diff --git a/Runtime/GuruDebugger/Runtime/Debugger/UI.meta b/Runtime/GuruDebugger/Runtime/Debugger/UI.meta
new file mode 100644
index 0000000..a7e3944
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/Debugger/UI.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 4351260f681b42d9851e353f24f3b05a
+timeCreated: 1711018597
\ No newline at end of file
diff --git a/Runtime/GuruDebugger/Runtime/Debugger/UI/DebuggerViewRoot.Factory.cs b/Runtime/GuruDebugger/Runtime/Debugger/UI/DebuggerViewRoot.Factory.cs
new file mode 100644
index 0000000..960f5f4
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/Debugger/UI/DebuggerViewRoot.Factory.cs
@@ -0,0 +1,221 @@
+
+
+using System.Collections.Generic;
+
+namespace Guru.Debugger
+{
+    using System;
+    using UnityEngine;
+    using G = GlobalVars;
+    
+    
+    public partial class DebuggerViewRoot
+    {
+        
+        [SerializeField] private UITabItem _tabPrefab;
+        [SerializeField] private UIOptionItem _optPrefab;
+        [SerializeField] private VButton _btnPrefab;
+        [SerializeField] private VLabel _labelPrefab;
+        
+        private Queue _tabPools;
+        private Queue _optPools;
+        
+        private List _displayedTabs;
+        private List _displayedOptions;
+
+        private long _tabIds = 0;
+        private long _optIds = 0;
+        private long _btnIds = 0;
+        private long _lbIds = 0;
+
+        private void InitFactory()
+        {
+            _tabPools = new Queue(10);
+            _optPools = new Queue(20);
+
+            _tabPrefab.Parent = _binNode;
+            _optPrefab.Parent = _binNode;
+
+
+            _displayedTabs = new List(10);
+            _displayedOptions = new List(20);
+        }
+        
+        #region Tabs
+        
+        public UITabItem RegisterTab(string tabNam)
+        {
+            var tab = GetTab(tabNam);
+            _displayedTabs.Add(tab);
+            return tab;
+        }
+
+        
+        
+        public UITabItem BuildTab(string tabName)
+        {
+            var go = Instantiate(_tabPrefab.gameObject, _tabContent);
+            go.SetActive(true);
+            var tab = go.GetComponent();
+            tab.InitWithData(_tabIds, tabName);
+            tab.OnRecycle = OnTabRecycle;
+            tab.OnClicked = OnTabClicked;
+            _tabIds++;
+            return tab;
+        }
+
+        private void OnTabClicked(string tabName)
+        {
+            G.Events.OnUIEvent?.Invoke(G.Events.EventTabClicked, tabName);
+        }
+
+        private void OnTabRecycle(UITabItem tab)
+        {
+            _displayedTabs.Remove(tab);
+            tab.Parent = _binNode;
+            tab.transform.localPosition = Vector3.zero;
+            _tabPools.Enqueue(tab);
+        }
+
+
+        private UITabItem GetTab(string tabName)
+        {
+            if (_tabPools.Count > 0)
+            {
+                var tab = _tabPools.Dequeue();
+                tab.Label = tabName;
+                tab.Parent = _tabContent;
+                return tab;
+            }
+            return BuildTab(tabName);
+        }
+
+        #endregion
+
+        #region Options
+
+
+        public UIOptionItem RegisterOption(string optName, string content = "")
+        {
+            var opt = GetOption(optName);
+            opt.Content = content;
+            opt.Refresh();
+            _displayedOptions.Add(opt);
+            return opt;
+        }
+        
+        
+        
+        public UIOptionItem BuildOption(string optName)
+        {
+            var go = Instantiate(_optPrefab.gameObject, _optContent);
+            go.SetActive(true);
+            var opt = go.GetComponent();
+            opt.InitWithData(_optIds, optName);
+            opt.OnRecycle = OnOptionRecycle;
+            _optIds++;
+            return opt;
+        }
+
+        
+        private UIOptionItem GetOption(string name)
+        {
+            if (_optPools.Count > 0)
+            {
+                var opt = _optPools.Dequeue();
+                opt.Label = name;
+                opt.Parent = _optContent;
+                return opt;
+            }
+            return BuildOption(name);
+        }
+        
+        /// 
+        /// 选项回收
+        /// 
+        /// 
+        private void OnOptionRecycle(UIOptionItem opt)
+        {
+            _displayedOptions.Remove(opt);   
+            opt.Parent = _binNode;
+            opt.transform.localPosition = Vector3.zero;
+            _optPools.Enqueue(opt);
+        }
+      
+        #endregion
+        
+        #region Button
+
+        public VButton BuildButton(string name, Action onClick, Transform parent)
+        {
+            var go = Instantiate(_btnPrefab.gameObject, parent);
+            var btn = go.GetComponent();
+            btn.Label = name;
+            btn.OnClicked = onClick;
+            btn.Size = new Vector2(120, 0);
+            return btn;
+        }
+        
+        #region 添加组件
+
+        internal VButton AddOptionButton(UIOptionItem option, string btnName, Action btnHandler)
+        {
+            var btn = BuildButton(btnName, btnHandler, option.Root);
+            option.AddChild(btn.gameObject);
+            return btn;
+        }
+        internal VLabel AddOptionLabel(UIOptionItem option, string label, TextAnchor align = TextAnchor.MiddleCenter)
+        {
+            var lb = BuildLabel(label, align, option.Root);
+            option.AddChild(lb.gameObject);
+            return lb;
+        }
+
+
+
+        #endregion
+        
+        #endregion
+        
+        #region Label
+
+        public VLabel BuildLabel(string lbName, TextAnchor align, Transform parent)
+        {
+            var go = Instantiate(_labelPrefab.gameObject, parent);
+            go.name = lbName;
+            var label = go.GetComponent();
+            label.Text = lbName;
+            label.Align = align;
+            label.Size = new Vector2(300, 0);
+            return label;
+        }
+
+        #endregion
+
+        #region Recycle
+        
+        internal void CleanTabs()
+        {
+            while (_displayedTabs.Count > 0)
+            {
+                var tab = _displayedTabs[0];
+                tab.Dispose();
+            }
+        }
+
+
+
+        internal void CleanOptions()
+        {
+            while (_displayedOptions.Count > 0)
+            {
+                var opt = _displayedOptions[0];
+                opt.Dispose();
+            }
+
+        }
+
+        #endregion
+        
+    }
+}
\ No newline at end of file
diff --git a/Runtime/GuruDebugger/Runtime/Debugger/UI/DebuggerViewRoot.Factory.cs.meta b/Runtime/GuruDebugger/Runtime/Debugger/UI/DebuggerViewRoot.Factory.cs.meta
new file mode 100644
index 0000000..a2b8dc2
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/Debugger/UI/DebuggerViewRoot.Factory.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 3a8636631ec74eeea6dff03bdc79c03c
+timeCreated: 1711026127
\ No newline at end of file
diff --git a/Runtime/GuruDebugger/Runtime/Debugger/UI/DebuggerViewRoot.cs b/Runtime/GuruDebugger/Runtime/Debugger/UI/DebuggerViewRoot.cs
new file mode 100644
index 0000000..b1c8eb8
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/Debugger/UI/DebuggerViewRoot.cs
@@ -0,0 +1,151 @@
+
+
+using UnityEngine.EventSystems;
+
+namespace Guru.Debugger
+{
+    using UnityEngine;
+    using UnityEngine.UI;
+    using G = GlobalVars;
+    
+    using System;
+    using System.Collections.Generic;
+    
+    public partial class DebuggerViewRoot: UIComponent, IViewFactory, IWidgetFactory
+    {
+        [SerializeField] private Canvas _canvas;
+        [SerializeField] private CanvasGroup _canvasGroup;
+
+        [SerializeField] private RectTransform _tabContent;
+        [SerializeField] private RectTransform _optContent;
+        [SerializeField] private RectTransform _binNode;
+        
+        
+        [SerializeField] private Button _btnClose;
+        
+        private const string PrefabPath = "ui/debugger_root";
+        private const string InstanceName = "__debugger__";
+        
+        private static DebuggerViewRoot _instance;
+        public static DebuggerViewRoot Instance
+        {
+            get
+            {
+                if (_instance == null) _instance = CreateInstance();
+                return _instance;
+            }
+        }
+        
+        private EventSystem _eventSystem;
+
+        
+
+        #region Static Calls
+
+        private static DebuggerViewRoot CreateInstance()
+        {
+            var p = Resources.Load(PrefabPath);
+            if (p != null)
+            {
+                var go = Instantiate(p);
+                DontDestroyOnLoad(go);
+                go.name = InstanceName;
+                return go.GetComponent();
+            }
+            return null;
+        }
+
+
+
+
+        #endregion
+
+        #region Initialization
+
+        private void Awake()
+        {
+            Init();
+        }
+
+
+        private void Init()
+        {
+            InitFactory();
+            
+            _btnClose.onClick.AddListener(OnCloseBtnEvent);
+
+            if (EventSystem.current == null)
+            {
+                SetupEventSystem();
+            }
+            else
+            {
+                _eventSystem = EventSystem.current;
+            }
+            
+            Hide();
+        }
+
+        private void SetupEventSystem()
+        {
+
+            var go = new GameObject(nameof(EventSystem));
+            var es = go.AddComponent();
+            go.AddComponent();
+            es.transform.parent = transform;
+            _eventSystem = es;
+        }
+
+        private void OnCloseBtnEvent()
+        {
+            Hide();
+            OnSelfClosed();
+        }
+
+        #endregion
+        
+        #region Display
+        
+        public void Show() => Active = true;
+        public void Hide() => Active = false;
+        
+        #endregion
+
+        #region Pages
+
+        
+        internal void RefreshTabs(string tanName, List tabs = null)
+        {
+            if (tabs == null)
+            {
+                tabs = new List(_displayedTabs.Count);
+                foreach (var t in _displayedTabs)
+                {
+                    tabs.Add(t.Label);
+                }
+            }
+
+            CleanTabs();
+            foreach (var tn in tabs)
+            {
+                var tab = RegisterTab(tn);
+                tab.Selected = tn == tanName;
+                tab.OnClicked = OnTabClicked;
+            }
+        }
+
+        #endregion
+
+        #region Dispos
+
+        private void OnSelfClosed()
+        {
+            CleanTabs();
+            CleanOptions();
+            G.Events.OnUIEvent?.Invoke(G.Events.EventViewClosed, null);
+        }
+
+        #endregion
+
+    }
+}
\ No newline at end of file
diff --git a/Runtime/GuruDebugger/Runtime/Debugger/UI/DebuggerViewRoot.cs.meta b/Runtime/GuruDebugger/Runtime/Debugger/UI/DebuggerViewRoot.cs.meta
new file mode 100644
index 0000000..f403f54
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/Debugger/UI/DebuggerViewRoot.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 128174e534964447a73e381ca1fadd0f
+timeCreated: 1711018610
\ No newline at end of file
diff --git a/Runtime/GuruDebugger/Runtime/Debugger/UI/IVFactory.cs b/Runtime/GuruDebugger/Runtime/Debugger/UI/IVFactory.cs
new file mode 100644
index 0000000..3999354
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/Debugger/UI/IVFactory.cs
@@ -0,0 +1,22 @@
+
+
+namespace Guru.Debugger
+{
+    using System;
+    using UnityEngine;
+    
+    
+    public interface IViewFactory
+    {
+        UITabItem BuildTab(string tabName);
+        UIOptionItem BuildOption(string optName);
+    }
+    
+    public interface IWidgetFactory 
+    {
+
+        VButton BuildButton(string name, Action onClick, Transform parent);
+        VLabel BuildLabel(string lbName, TextAnchor align, Transform parent);
+        
+    }
+}
\ No newline at end of file
diff --git a/Runtime/GuruDebugger/Runtime/Debugger/UI/IVFactory.cs.meta b/Runtime/GuruDebugger/Runtime/Debugger/UI/IVFactory.cs.meta
new file mode 100644
index 0000000..ebec633
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/Debugger/UI/IVFactory.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: d783b7f8e37f48f3bc36e2877c6143b3
+timeCreated: 1711025708
\ No newline at end of file
diff --git a/Runtime/GuruDebugger/Runtime/Debugger/UI/UIOptionItem.cs b/Runtime/GuruDebugger/Runtime/Debugger/UI/UIOptionItem.cs
new file mode 100644
index 0000000..2f97a2a
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/Debugger/UI/UIOptionItem.cs
@@ -0,0 +1,114 @@
+
+
+using System;
+using System.Collections.Generic;
+
+namespace Guru.Debugger
+{
+    using UnityEngine;
+    using UnityEngine.UI;
+    
+    public class UIOptionItem: UIComponent
+    {
+
+        [SerializeField] private RectTransform _root;
+        [SerializeField] private VLabel _label;
+        [SerializeField] private VLabel _content;
+        [SerializeField] private Image _bgImage;
+
+        public Action OnRecycle;
+        private List _children;
+
+        public Transform Root => _root;
+        
+        public string Label
+        {
+            get => _label.Text;
+            set => _label.Text = value;
+        }
+        
+        public string Content
+        {
+            get => _content.Text;
+            set
+            {
+                _content.Text = value;
+                _content.Active = !string.IsNullOrEmpty(value);
+            }
+        }
+
+
+        private bool _clickable = false;
+        public bool Clickable
+        {
+            get => _clickable;
+            set
+            {
+                _clickable = value;
+                _label.Active = !_clickable;
+                _content.Active = !_clickable;
+            }
+        }
+
+
+        public void InitWithData(long gid, string optName = "")
+        {
+            GID = gid;
+            name = $"opt_{gid}";
+            _children = new List(10);
+
+            if (string.IsNullOrEmpty(optName))
+            {
+                _label.Active = false;
+            }
+            else
+            {
+                Label = optName;
+            }
+
+            _label.Align = TextAnchor.MiddleLeft;
+            _content.Align = TextAnchor.MiddleLeft;
+
+            
+        }
+
+
+        public void Dispose()
+        {
+            Clickable = false;
+            ClearChildren();
+            OnRecycle?.Invoke(this);
+        }
+
+
+        private void ClearChildren()
+        {
+            
+            if(_children != null && _children.Count > 0)
+            {
+                foreach (var child in _children)
+                {
+                    Destroy(child);
+                }
+                _children.Clear();
+            }
+        }
+
+
+        public void AddChild(GameObject obj)
+        {
+            _children.Add(obj);
+        }
+
+
+        public override void Refresh()
+        {
+            var idx = transform.GetSiblingIndex();
+            _bgImage.color = idx % 2 == 0 ? GlobalVars.Colors.Gray : GlobalVars.Colors.Gray2;
+        }
+        
+
+
+
+    }
+}
\ No newline at end of file
diff --git a/Runtime/GuruDebugger/Runtime/Debugger/UI/UIOptionItem.cs.meta b/Runtime/GuruDebugger/Runtime/Debugger/UI/UIOptionItem.cs.meta
new file mode 100644
index 0000000..a519f23
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/Debugger/UI/UIOptionItem.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 8010bd3b4bfd4274997d438a1d99ae19
+timeCreated: 1711024532
\ No newline at end of file
diff --git a/Runtime/GuruDebugger/Runtime/Debugger/UI/UITabItem.cs b/Runtime/GuruDebugger/Runtime/Debugger/UI/UITabItem.cs
new file mode 100644
index 0000000..734e504
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/Debugger/UI/UITabItem.cs
@@ -0,0 +1,93 @@
+
+
+namespace Guru.Debugger
+{
+    using UnityEngine;
+    using System;
+    using UnityEngine.UI;
+    using G = GlobalVars;
+    
+    public class UITabItem: UIComponent
+    {
+        [SerializeField] private VButton _btn;
+
+        private string _label;
+        public string Label
+        {
+            get => _label;
+            set
+            {
+                _label = value;
+                _btn.Label = value;
+            }
+        }
+
+        private bool _selected = false;
+
+        public bool Selected
+        {
+            get => _selected;
+            set
+            {
+                _selected = value;
+                Refresh();
+            }
+        }
+        public Action OnClicked;
+        public Action OnRecycle;
+
+        #region Init
+
+        protected override void OnCreated()
+        {
+            _btn.OnClicked = OnTabClickedEvent;
+        }
+
+
+        private void OnTabClickedEvent()
+        {
+            Selected = !Selected;
+            OnClicked?.Invoke(_label);
+            Refresh();
+        }
+
+
+        public void InitWithData(long gid, string label = "")
+        {
+            GID = gid;
+            name = $"tab_{GID}";
+            _btn.name = "_btn";
+
+            if (!string.IsNullOrEmpty(label))
+            {
+                Label = label;
+            }
+
+        }
+
+
+        #endregion
+        
+        #region UI
+
+        public override void Refresh()
+        {
+            _btn.Color = Selected? G.Colors.LightGreen: G.Colors.Gray;
+        }
+
+        #endregion
+
+        #region Recycle
+
+
+        public void Dispose()
+        {
+            OnClicked = null;
+            OnRecycle?.Invoke(this);
+        }
+
+
+        #endregion
+        
+    }
+}
\ No newline at end of file
diff --git a/Runtime/GuruDebugger/Runtime/Debugger/UI/UITabItem.cs.meta b/Runtime/GuruDebugger/Runtime/Debugger/UI/UITabItem.cs.meta
new file mode 100644
index 0000000..48da652
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/Debugger/UI/UITabItem.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 74db3f6a69ff47f0880e1250393e6f7f
+timeCreated: 1711020325
\ No newline at end of file
diff --git a/Runtime/GuruDebugger/Runtime/Debugger/UI/VButton.cs b/Runtime/GuruDebugger/Runtime/Debugger/UI/VButton.cs
new file mode 100644
index 0000000..a7a951a
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/Debugger/UI/VButton.cs
@@ -0,0 +1,52 @@
+
+
+namespace Guru.Debugger
+{
+    using System;
+    using UnityEngine;
+    using UnityEngine.UI;
+
+    public class VButton: UIComponent
+    {
+        [SerializeField] private Image _image;
+        [SerializeField] private Text _label;
+        [SerializeField] private Button _button;
+        
+        public string Label
+        {
+            get => _label.text;
+            set => _label.text = value;
+        }
+        
+        public Action OnClicked;
+        
+        public Color Color
+        {
+            get => _image.color;
+            set => _image.color = value;
+        }
+        
+        public Color LabelColor
+        {
+            get => _label.color;
+            set => _label.color = value;
+        }
+
+
+        protected override void OnCreated()
+        {
+            _button.onClick.AddListener(OnSelfClicked);
+        }
+        private void OnSelfClicked()
+        {
+            OnClicked?.Invoke();
+        }
+        
+        
+        
+        
+        
+        
+        
+    }
+}
\ No newline at end of file
diff --git a/Runtime/GuruDebugger/Runtime/Debugger/UI/VButton.cs.meta b/Runtime/GuruDebugger/Runtime/Debugger/UI/VButton.cs.meta
new file mode 100644
index 0000000..8c11ac5
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/Debugger/UI/VButton.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: cd788ac6ee4f4afe9d57738d49a3fdc4
+timeCreated: 1711020763
\ No newline at end of file
diff --git a/Runtime/GuruDebugger/Runtime/Debugger/UI/VLabel.cs b/Runtime/GuruDebugger/Runtime/Debugger/UI/VLabel.cs
new file mode 100644
index 0000000..d3b6455
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/Debugger/UI/VLabel.cs
@@ -0,0 +1,36 @@
+
+using System;
+
+namespace Guru.Debugger
+{
+    using UnityEngine;
+    using UnityEngine.UI;
+    
+    public class VLabel : UIComponent
+    {
+        [SerializeField] private Text _label;
+        public string Text
+        {
+            get => _label.text;
+            set => _label.text = value;
+        }
+        
+        public Color Color
+        {
+            get => _label.color;
+            set => _label.color = value;
+        }
+
+        private TextAnchor _align;
+        public TextAnchor Align
+        {
+            get => _align;
+            set
+            {
+                _align = value;
+                _label.alignment = _align;
+            }
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/Runtime/GuruDebugger/Runtime/Debugger/UI/VLabel.cs.meta b/Runtime/GuruDebugger/Runtime/Debugger/UI/VLabel.cs.meta
new file mode 100644
index 0000000..c095ea4
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/Debugger/UI/VLabel.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: e85702df90d74eb4892a7a742bcb0f05
+timeCreated: 1711026040
\ No newline at end of file
diff --git a/Runtime/GuruDebugger/Runtime/Prefab.meta b/Runtime/GuruDebugger/Runtime/Prefab.meta
new file mode 100644
index 0000000..6c614a7
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/Prefab.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 47c2a153e811d49d1b9680abd08382f7
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/GuruDebugger/Runtime/Prefab/btn_item.prefab b/Runtime/GuruDebugger/Runtime/Prefab/btn_item.prefab
new file mode 100644
index 0000000..73a5cb3
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/Prefab/btn_item.prefab
@@ -0,0 +1,206 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &5161587445136557863
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 148257080420939497}
+  - component: {fileID: 1727577413956784551}
+  - component: {fileID: 2268706270294319084}
+  m_Layer: 5
+  m_Name: label
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &148257080420939497
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5161587445136557863}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 1939155628914972370}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.5, y: 0.5}
+  m_AnchorMax: {x: 0.5, y: 0.5}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 100, y: 100}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &1727577413956784551
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5161587445136557863}
+  m_CullTransparentMesh: 1
+--- !u!114 &2268706270294319084
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5161587445136557863}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 0
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 14
+    m_FontStyle: 0
+    m_BestFit: 1
+    m_MinSize: 10
+    m_MaxSize: 40
+    m_Alignment: 4
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: INFO
+--- !u!1 &8854415019278044657
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1939155628914972370}
+  - component: {fileID: 7097619541680742948}
+  - component: {fileID: 3799638908809225334}
+  - component: {fileID: 7483045806784872229}
+  m_Layer: 5
+  m_Name: btn_item
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &1939155628914972370
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8854415019278044657}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 148257080420939497}
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 100, y: 50}
+  m_SizeDelta: {x: 200, y: 100}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &7097619541680742948
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8854415019278044657}
+  m_CullTransparentMesh: 1
+--- !u!114 &3799638908809225334
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8854415019278044657}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.078431375, g: 1, b: 0.78765476, a: 0.5372549}
+  m_RaycastTarget: 1
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 0}
+  m_Type: 0
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+  m_PixelsPerUnitMultiplier: 1
+--- !u!114 &7483045806784872229
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8854415019278044657}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: cd788ac6ee4f4afe9d57738d49a3fdc4, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Navigation:
+    m_Mode: 3
+    m_WrapAround: 0
+    m_SelectOnUp: {fileID: 0}
+    m_SelectOnDown: {fileID: 0}
+    m_SelectOnLeft: {fileID: 0}
+    m_SelectOnRight: {fileID: 0}
+  m_Transition: 1
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+    m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+    m_ColorMultiplier: 1
+    m_FadeDuration: 0.1
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 0}
+    m_PressedSprite: {fileID: 0}
+    m_SelectedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_SelectedTrigger: Selected
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 3799638908809225334}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls: []
+  _image: {fileID: 0}
+  _label: {fileID: 0}
diff --git a/Runtime/GuruDebugger/Runtime/Prefab/btn_item.prefab.meta b/Runtime/GuruDebugger/Runtime/Prefab/btn_item.prefab.meta
new file mode 100644
index 0000000..27bdd89
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/Prefab/btn_item.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: c84e57ed527f24e6ab91e1cf45aa6ca4
+PrefabImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/GuruDebugger/Runtime/Prefab/opt_node_item.prefab b/Runtime/GuruDebugger/Runtime/Prefab/opt_node_item.prefab
new file mode 100644
index 0000000..9c5a396
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/Prefab/opt_node_item.prefab
@@ -0,0 +1,391 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &2528333701503730058
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 695922022511621486}
+  - component: {fileID: 412087832265673011}
+  m_Layer: 0
+  m_Name: root
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &695922022511621486
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2528333701503730058}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 629926880474666585}
+  - {fileID: 7248743696833887442}
+  m_Father: {fileID: 4102609491836130493}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 10, y: 0}
+  m_SizeDelta: {x: -20, y: -20}
+  m_Pivot: {x: 0, y: 0.5}
+--- !u!114 &412087832265673011
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2528333701503730058}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Padding:
+    m_Left: 0
+    m_Right: 0
+    m_Top: 0
+    m_Bottom: 0
+  m_ChildAlignment: 3
+  m_Spacing: 6
+  m_ChildForceExpandWidth: 1
+  m_ChildForceExpandHeight: 1
+  m_ChildControlWidth: 1
+  m_ChildControlHeight: 1
+  m_ChildScaleWidth: 0
+  m_ChildScaleHeight: 0
+  m_ReverseArrangement: 0
+--- !u!1 &4102609491836130490
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 4102609491836130493}
+  - component: {fileID: 4102609491836130495}
+  - component: {fileID: 4102609491836130492}
+  - component: {fileID: 6345045228542041246}
+  m_Layer: 5
+  m_Name: opt_node_item
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &4102609491836130493
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4102609491836130490}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 695922022511621486}
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 160}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &4102609491836130495
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4102609491836130490}
+  m_CullTransparentMesh: 1
+--- !u!114 &4102609491836130492
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4102609491836130490}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0, g: 0, b: 0, a: 0.39215687}
+  m_RaycastTarget: 1
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 0}
+  m_Type: 0
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+  m_PixelsPerUnitMultiplier: 1
+--- !u!114 &6345045228542041246
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4102609491836130490}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 8010bd3b4bfd4274997d438a1d99ae19, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  _root: {fileID: 695922022511621486}
+  _label: {fileID: 2993293849972821997}
+  _content: {fileID: 5021256505751954790}
+  _bgImage: {fileID: 4102609491836130492}
+--- !u!1001 &83327412588764366
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 695922022511621486}
+    m_Modifications:
+    - target: {fileID: 2277169281067990379, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_Name
+      value: _content
+      objectReference: {fileID: 0}
+    - target: {fileID: 4704551826277804405, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_Text
+      value: Content
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_Pivot.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_Pivot.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_RootOrder
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_AnchorMax.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_AnchorMax.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_AnchorMin.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_AnchorMin.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_SizeDelta.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_SizeDelta.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: -0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: -0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: -0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_AnchoredPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_AnchoredPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+--- !u!114 &5021256505751954790 stripped
+MonoBehaviour:
+  m_CorrespondingSourceObject: {fileID: 4937950594306488744, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+  m_PrefabInstance: {fileID: 83327412588764366}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: e85702df90d74eb4892a7a742bcb0f05, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+--- !u!224 &7248743696833887442 stripped
+RectTransform:
+  m_CorrespondingSourceObject: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+  m_PrefabInstance: {fileID: 83327412588764366}
+  m_PrefabAsset: {fileID: 0}
+--- !u!1001 &7858023797254583877
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 695922022511621486}
+    m_Modifications:
+    - target: {fileID: 2277169281067990379, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_Name
+      value: _label
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_Pivot.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_Pivot.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_RootOrder
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_AnchorMax.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_AnchorMax.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_AnchorMin.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_AnchorMin.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_SizeDelta.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_SizeDelta.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: -0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: -0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: -0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_AnchoredPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_AnchoredPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+--- !u!224 &629926880474666585 stripped
+RectTransform:
+  m_CorrespondingSourceObject: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+  m_PrefabInstance: {fileID: 7858023797254583877}
+  m_PrefabAsset: {fileID: 0}
+--- !u!114 &2993293849972821997 stripped
+MonoBehaviour:
+  m_CorrespondingSourceObject: {fileID: 4937950594306488744, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+  m_PrefabInstance: {fileID: 7858023797254583877}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: e85702df90d74eb4892a7a742bcb0f05, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
diff --git a/Runtime/GuruDebugger/Runtime/Prefab/opt_node_item.prefab.meta b/Runtime/GuruDebugger/Runtime/Prefab/opt_node_item.prefab.meta
new file mode 100644
index 0000000..6d8a297
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/Prefab/opt_node_item.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: db9336d7824134e1cb737eb3ba4c9d93
+PrefabImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/GuruDebugger/Runtime/Prefab/tab_node_item.prefab b/Runtime/GuruDebugger/Runtime/Prefab/tab_node_item.prefab
new file mode 100644
index 0000000..027ba1a
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/Prefab/tab_node_item.prefab
@@ -0,0 +1,174 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &7844578585297590383
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 7844578585297590382}
+  - component: {fileID: 7844578585297590376}
+  - component: {fileID: 3730802781450377123}
+  m_Layer: 5
+  m_Name: tab_node_item
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &7844578585297590382
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7844578585297590383}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 8727470446105646736}
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 200, y: 80}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &7844578585297590376
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7844578585297590383}
+  m_CullTransparentMesh: 1
+--- !u!114 &3730802781450377123
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7844578585297590383}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 74db3f6a69ff47f0880e1250393e6f7f, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  _btn: {fileID: 301294120361967463}
+--- !u!1001 &7203357951589204034
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 7844578585297590382}
+    m_Modifications:
+    - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+      propertyPath: m_Pivot.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+      propertyPath: m_Pivot.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+      propertyPath: m_RootOrder
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+      propertyPath: m_AnchorMax.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+      propertyPath: m_AnchorMax.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+      propertyPath: m_AnchorMin.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+      propertyPath: m_AnchorMin.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+      propertyPath: m_SizeDelta.x
+      value: 200
+      objectReference: {fileID: 0}
+    - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+      propertyPath: m_SizeDelta.y
+      value: 100
+      objectReference: {fileID: 0}
+    - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: -0
+      objectReference: {fileID: 0}
+    - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: -0
+      objectReference: {fileID: 0}
+    - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: -0
+      objectReference: {fileID: 0}
+    - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+      propertyPath: m_AnchoredPosition.x
+      value: 100
+      objectReference: {fileID: 0}
+    - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+      propertyPath: m_AnchoredPosition.y
+      value: 50
+      objectReference: {fileID: 0}
+    - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 8854415019278044657, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+      propertyPath: m_Name
+      value: v_btn
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+--- !u!224 &8727470446105646736 stripped
+RectTransform:
+  m_CorrespondingSourceObject: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+  m_PrefabInstance: {fileID: 7203357951589204034}
+  m_PrefabAsset: {fileID: 0}
+--- !u!114 &301294120361967463 stripped
+MonoBehaviour:
+  m_CorrespondingSourceObject: {fileID: 7483045806784872229, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+  m_PrefabInstance: {fileID: 7203357951589204034}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: cd788ac6ee4f4afe9d57738d49a3fdc4, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
diff --git a/Runtime/GuruDebugger/Runtime/Prefab/tab_node_item.prefab.meta b/Runtime/GuruDebugger/Runtime/Prefab/tab_node_item.prefab.meta
new file mode 100644
index 0000000..01cb801
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/Prefab/tab_node_item.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: e22e7dc3c05a644c08c833a3a2f42a16
+PrefabImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/GuruDebugger/Runtime/Prefab/v_btn.prefab b/Runtime/GuruDebugger/Runtime/Prefab/v_btn.prefab
new file mode 100644
index 0000000..567ee32
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/Prefab/v_btn.prefab
@@ -0,0 +1,233 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &5161587445136557863
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 148257080420939497}
+  - component: {fileID: 1727577413956784551}
+  - component: {fileID: 2268706270294319084}
+  m_Layer: 5
+  m_Name: label
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &148257080420939497
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5161587445136557863}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 1939155628914972370}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &1727577413956784551
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5161587445136557863}
+  m_CullTransparentMesh: 1
+--- !u!114 &2268706270294319084
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5161587445136557863}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 0
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 14
+    m_FontStyle: 0
+    m_BestFit: 1
+    m_MinSize: 10
+    m_MaxSize: 32
+    m_Alignment: 4
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: INFO
+--- !u!1 &8854415019278044657
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1939155628914972370}
+  - component: {fileID: 7097619541680742948}
+  - component: {fileID: 3799638908809225334}
+  - component: {fileID: 8622626705591949948}
+  - component: {fileID: 7483045806784872229}
+  - component: {fileID: 5027051285820548675}
+  m_Layer: 5
+  m_Name: v_btn
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &1939155628914972370
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8854415019278044657}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 148257080420939497}
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 100, y: 50}
+  m_SizeDelta: {x: 200, y: 100}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &7097619541680742948
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8854415019278044657}
+  m_CullTransparentMesh: 1
+--- !u!114 &3799638908809225334
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8854415019278044657}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 0.15686275}
+  m_RaycastTarget: 1
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 0}
+  m_Type: 0
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+  m_PixelsPerUnitMultiplier: 1
+--- !u!114 &8622626705591949948
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8854415019278044657}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Navigation:
+    m_Mode: 3
+    m_WrapAround: 0
+    m_SelectOnUp: {fileID: 0}
+    m_SelectOnDown: {fileID: 0}
+    m_SelectOnLeft: {fileID: 0}
+    m_SelectOnRight: {fileID: 0}
+  m_Transition: 1
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+    m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+    m_ColorMultiplier: 1
+    m_FadeDuration: 0.1
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 0}
+    m_PressedSprite: {fileID: 0}
+    m_SelectedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_SelectedTrigger: Selected
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 3799638908809225334}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls: []
+--- !u!114 &7483045806784872229
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8854415019278044657}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: cd788ac6ee4f4afe9d57738d49a3fdc4, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  _image: {fileID: 3799638908809225334}
+  _label: {fileID: 2268706270294319084}
+  _button: {fileID: 8622626705591949948}
+--- !u!225 &5027051285820548675
+CanvasGroup:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8854415019278044657}
+  m_Enabled: 1
+  m_Alpha: 1
+  m_Interactable: 1
+  m_BlocksRaycasts: 1
+  m_IgnoreParentGroups: 0
diff --git a/Runtime/GuruDebugger/Runtime/Prefab/v_btn.prefab.meta b/Runtime/GuruDebugger/Runtime/Prefab/v_btn.prefab.meta
new file mode 100644
index 0000000..716ab3b
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/Prefab/v_btn.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: d0b72a82a22a748f89a2896a633bad10
+PrefabImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/GuruDebugger/Runtime/Prefab/v_label.prefab b/Runtime/GuruDebugger/Runtime/Prefab/v_label.prefab
new file mode 100644
index 0000000..071f27a
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/Prefab/v_label.prefab
@@ -0,0 +1,133 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &2277169281067990379
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 7327563488862494748}
+  - component: {fileID: 4937950594306488744}
+  m_Layer: 5
+  m_Name: v_label
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &7327563488862494748
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2277169281067990379}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 6542213729106578396}
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 160, y: 100}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &4937950594306488744
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2277169281067990379}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: e85702df90d74eb4892a7a742bcb0f05, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  _label: {fileID: 4704551826277804405}
+--- !u!1 &9037852253254046115
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 6542213729106578396}
+  - component: {fileID: 3463804050856076278}
+  - component: {fileID: 4704551826277804405}
+  m_Layer: 5
+  m_Name: text
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &6542213729106578396
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 9037852253254046115}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 7327563488862494748}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &3463804050856076278
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 9037852253254046115}
+  m_CullTransparentMesh: 1
+--- !u!114 &4704551826277804405
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 9037852253254046115}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 0
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 14
+    m_FontStyle: 0
+    m_BestFit: 1
+    m_MinSize: 10
+    m_MaxSize: 32
+    m_Alignment: 4
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: Name
diff --git a/Runtime/GuruDebugger/Runtime/Prefab/v_label.prefab.meta b/Runtime/GuruDebugger/Runtime/Prefab/v_label.prefab.meta
new file mode 100644
index 0000000..e24915c
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/Prefab/v_label.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 4557ac9378ce94fd38269da8f9aa86e3
+PrefabImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/GuruDebugger/Runtime/Resources.meta b/Runtime/GuruDebugger/Runtime/Resources.meta
new file mode 100644
index 0000000..da8b1fb
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/Resources.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 0ebe768b61d1d4fa782e856b6bca6eff
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/GuruDebugger/Runtime/Resources/ui.meta b/Runtime/GuruDebugger/Runtime/Resources/ui.meta
new file mode 100644
index 0000000..948794e
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/Resources/ui.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 5c11309f0c00147efabb99ad473fa760
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/GuruDebugger/Runtime/Resources/ui/debugger_root.prefab b/Runtime/GuruDebugger/Runtime/Resources/ui/debugger_root.prefab
new file mode 100644
index 0000000..4b5d74f
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/Resources/ui/debugger_root.prefab
@@ -0,0 +1,1604 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &5678077650178334412
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 5678077650178334411}
+  - component: {fileID: 5678077650178334410}
+  - component: {fileID: 5678077650178334409}
+  m_Layer: 5
+  m_Name: content_tab
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &5678077650178334411
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5678077650178334412}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 5678077650929315700}
+  m_Father: {fileID: 5678077650265235301}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.5, y: 0}
+  m_AnchorMax: {x: 0.5, y: 1}
+  m_AnchoredPosition: {x: -659.9998, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0, y: 0.5}
+--- !u!114 &5678077650178334410
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5678077650178334412}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_HorizontalFit: 2
+  m_VerticalFit: 0
+--- !u!114 &5678077650178334409
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5678077650178334412}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Padding:
+    m_Left: 0
+    m_Right: 0
+    m_Top: 0
+    m_Bottom: 0
+  m_ChildAlignment: 3
+  m_Spacing: 10
+  m_ChildForceExpandWidth: 1
+  m_ChildForceExpandHeight: 1
+  m_ChildControlWidth: 0
+  m_ChildControlHeight: 0
+  m_ChildScaleWidth: 0
+  m_ChildScaleHeight: 0
+  m_ReverseArrangement: 0
+--- !u!1 &5678077650216891752
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 5678077650216891767}
+  - component: {fileID: 5678077650216891765}
+  - component: {fileID: 5678077650216891766}
+  m_Layer: 5
+  m_Name: label
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &5678077650216891767
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5678077650216891752}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 5678077651910291723}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.5, y: 0.5}
+  m_AnchorMax: {x: 0.5, y: 0.5}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 100, y: 100}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &5678077650216891765
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5678077650216891752}
+  m_CullTransparentMesh: 1
+--- !u!114 &5678077650216891766
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5678077650216891752}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 0
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 40
+    m_FontStyle: 1
+    m_BestFit: 0
+    m_MinSize: 4
+    m_MaxSize: 40
+    m_Alignment: 4
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: X
+--- !u!1 &5678077650265235302
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 5678077650265235301}
+  - component: {fileID: 1803235044013397190}
+  m_Layer: 5
+  m_Name: viewport
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &5678077650265235301
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5678077650265235302}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 5678077650178334411}
+  m_Father: {fileID: 5678077651956306229}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1803235044013397190
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5678077650265235302}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 3312d7739989d2b4e91e6319e9a96d76, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Padding: {x: 0, y: 0, z: 0, w: 0}
+  m_Softness: {x: 0, y: 0}
+--- !u!1 &5678077650299143687
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 5678077650299143686}
+  - component: {fileID: 5678077650299143684}
+  - component: {fileID: 5678077650299143685}
+  m_Layer: 5
+  m_Name: navigator
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &5678077650299143686
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5678077650299143687}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 5678077652153614777}
+  - {fileID: 5678077651956306229}
+  - {fileID: 5678077651910291723}
+  m_Father: {fileID: 5678077651425366170}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 100}
+  m_Pivot: {x: 0.5, y: 1}
+--- !u!222 &5678077650299143684
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5678077650299143687}
+  m_CullTransparentMesh: 1
+--- !u!114 &5678077650299143685
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5678077650299143687}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0, g: 0, b: 0, a: 0.78431374}
+  m_RaycastTarget: 1
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 0}
+  m_Type: 0
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+  m_PixelsPerUnitMultiplier: 1
+--- !u!1 &5678077650315353686
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 5678077650315353685}
+  - component: {fileID: 5678077650315353684}
+  - component: {fileID: 5678077650315353683}
+  m_Layer: 5
+  m_Name: content_opt
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &5678077650315353685
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5678077650315353686}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 5678077650501026979}
+  m_Father: {fileID: 5678077652184860989}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0.5}
+  m_AnchorMax: {x: 1, y: 0.5}
+  m_AnchoredPosition: {x: 0, y: 1389.9999}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0.5, y: 1}
+--- !u!114 &5678077650315353684
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5678077650315353686}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_HorizontalFit: 0
+  m_VerticalFit: 2
+--- !u!114 &5678077650315353683
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5678077650315353686}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Padding:
+    m_Left: 0
+    m_Right: 0
+    m_Top: 0
+    m_Bottom: 0
+  m_ChildAlignment: 1
+  m_Spacing: 10
+  m_ChildForceExpandWidth: 1
+  m_ChildForceExpandHeight: 1
+  m_ChildControlWidth: 1
+  m_ChildControlHeight: 0
+  m_ChildScaleWidth: 0
+  m_ChildScaleHeight: 0
+  m_ReverseArrangement: 0
+--- !u!1 &5678077650595346832
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 5678077650595346844}
+  - component: {fileID: 5678077650595346845}
+  - component: {fileID: 5678077650595346846}
+  - component: {fileID: 5678077650595346847}
+  - component: {fileID: 1672044669829354977}
+  - component: {fileID: 1290928425606660014}
+  m_Layer: 5
+  m_Name: debugger_root
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &5678077650595346844
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5678077650595346832}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 0, y: 0, z: 0}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 4157740473186689210}
+  - {fileID: 5678077651094479703}
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0, y: 0}
+--- !u!223 &5678077650595346845
+Canvas:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5678077650595346832}
+  m_Enabled: 1
+  serializedVersion: 3
+  m_RenderMode: 0
+  m_Camera: {fileID: 0}
+  m_PlaneDistance: 100
+  m_PixelPerfect: 1
+  m_ReceivesEvents: 1
+  m_OverrideSorting: 0
+  m_OverridePixelPerfect: 0
+  m_SortingBucketNormalizedSize: 0
+  m_AdditionalShaderChannelsFlag: 0
+  m_SortingLayerID: 0
+  m_SortingOrder: 1001
+  m_TargetDisplay: 0
+--- !u!114 &5678077650595346846
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5678077650595346832}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_UiScaleMode: 0
+  m_ReferencePixelsPerUnit: 100
+  m_ScaleFactor: 1
+  m_ReferenceResolution: {x: 800, y: 600}
+  m_ScreenMatchMode: 0
+  m_MatchWidthOrHeight: 0
+  m_PhysicalUnit: 3
+  m_FallbackScreenDPI: 96
+  m_DefaultSpriteDPI: 96
+  m_DynamicPixelsPerUnit: 1
+  m_PresetInfoIsWorld: 0
+--- !u!114 &5678077650595346847
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5678077650595346832}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_IgnoreReversedGraphics: 1
+  m_BlockingObjects: 0
+  m_BlockingMask:
+    serializedVersion: 2
+    m_Bits: 4294967295
+--- !u!225 &1672044669829354977
+CanvasGroup:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5678077650595346832}
+  m_Enabled: 1
+  m_Alpha: 1
+  m_Interactable: 1
+  m_BlocksRaycasts: 1
+  m_IgnoreParentGroups: 0
+--- !u!114 &1290928425606660014
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5678077650595346832}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 128174e534964447a73e381ca1fadd0f, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  _canvas: {fileID: 5678077650595346845}
+  _canvasGroup: {fileID: 1672044669829354977}
+  _tabContent: {fileID: 5678077650178334411}
+  _optContent: {fileID: 5678077650315353685}
+  _binNode: {fileID: 4157740473186689210}
+  _btnClose: {fileID: 5678077651910291720}
+  _tabPrefab: {fileID: 1285608918186647737}
+  _optPrefab: {fileID: 3327545592706632832}
+  _btnPrefab: {fileID: 3738088849103178904}
+  _labelPrefab: {fileID: 2318477437615943927}
+--- !u!1 &5678077650909481233
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 5678077650909481232}
+  - component: {fileID: 5678077650909481246}
+  - component: {fileID: 5678077650909481247}
+  m_Layer: 5
+  m_Name: background
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &5678077650909481232
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5678077650909481233}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 5678077651094479703}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &5678077650909481246
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5678077650909481233}
+  m_CullTransparentMesh: 1
+--- !u!114 &5678077650909481247
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5678077650909481233}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.15686275, g: 0.15686275, b: 0.15686275, a: 1}
+  m_RaycastTarget: 1
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 0}
+  m_Type: 0
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+  m_PixelsPerUnitMultiplier: 1
+--- !u!1 &5678077651056538017
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 5678077651056538016}
+  - component: {fileID: 5678077651056538031}
+  m_Layer: 5
+  m_Name: options_scroll
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &5678077651056538016
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5678077651056538017}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 5678077652184860989}
+  m_Father: {fileID: 5678077651425366170}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: -50}
+  m_SizeDelta: {x: 0, y: -100}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &5678077651056538031
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5678077651056538017}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Content: {fileID: 5678077650315353685}
+  m_Horizontal: 0
+  m_Vertical: 1
+  m_MovementType: 1
+  m_Elasticity: 0.1
+  m_Inertia: 1
+  m_DecelerationRate: 0.135
+  m_ScrollSensitivity: 1
+  m_Viewport: {fileID: 0}
+  m_HorizontalScrollbar: {fileID: 0}
+  m_VerticalScrollbar: {fileID: 0}
+  m_HorizontalScrollbarVisibility: 0
+  m_VerticalScrollbarVisibility: 0
+  m_HorizontalScrollbarSpacing: 0
+  m_VerticalScrollbarSpacing: 0
+  m_OnValueChanged:
+    m_PersistentCalls:
+      m_Calls: []
+--- !u!1 &5678077651094479688
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 5678077651094479703}
+  m_Layer: 5
+  m_Name: options
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &5678077651094479703
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5678077651094479688}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 5678077650909481232}
+  - {fileID: 5678077651425366170}
+  m_Father: {fileID: 5678077650595346844}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!1 &5678077651425366171
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 5678077651425366170}
+  m_Layer: 5
+  m_Name: root
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &5678077651425366170
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5678077651425366171}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 5678077651056538016}
+  - {fileID: 5678077650299143686}
+  m_Father: {fileID: 5678077651094479703}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: -40}
+  m_SizeDelta: {x: 0, y: -80}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!1 &5678077651910291724
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 5678077651910291723}
+  - component: {fileID: 5678077651910291721}
+  - component: {fileID: 5678077651910291722}
+  - component: {fileID: 5678077651910291720}
+  m_Layer: 5
+  m_Name: btn_close
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &5678077651910291723
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5678077651910291724}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 5678077650216891767}
+  m_Father: {fileID: 5678077650299143686}
+  m_RootOrder: 2
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 1, y: 0.5}
+  m_AnchorMax: {x: 1, y: 0.5}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 100, y: 80}
+  m_Pivot: {x: 1, y: 0.5}
+--- !u!222 &5678077651910291721
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5678077651910291724}
+  m_CullTransparentMesh: 1
+--- !u!114 &5678077651910291722
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5678077651910291724}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 0, b: 0, a: 0.3137255}
+  m_RaycastTarget: 1
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 0}
+  m_Type: 0
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+  m_PixelsPerUnitMultiplier: 1
+--- !u!114 &5678077651910291720
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5678077651910291724}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Navigation:
+    m_Mode: 3
+    m_WrapAround: 0
+    m_SelectOnUp: {fileID: 0}
+    m_SelectOnDown: {fileID: 0}
+    m_SelectOnLeft: {fileID: 0}
+    m_SelectOnRight: {fileID: 0}
+  m_Transition: 1
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+    m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+    m_ColorMultiplier: 1
+    m_FadeDuration: 0.1
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 0}
+    m_PressedSprite: {fileID: 0}
+    m_SelectedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_SelectedTrigger: Selected
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 5678077651910291722}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls: []
+--- !u!1 &5678077651956306230
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 5678077651956306229}
+  - component: {fileID: 5678077651956306228}
+  m_Layer: 5
+  m_Name: tabs_scorll
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &5678077651956306229
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5678077651956306230}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 5678077650265235301}
+  m_Father: {fileID: 5678077650299143686}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: -60, y: 0}
+  m_SizeDelta: {x: -120, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &5678077651956306228
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5678077651956306230}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Content: {fileID: 5678077650178334411}
+  m_Horizontal: 1
+  m_Vertical: 0
+  m_MovementType: 1
+  m_Elasticity: 0.1
+  m_Inertia: 1
+  m_DecelerationRate: 0.135
+  m_ScrollSensitivity: 1
+  m_Viewport: {fileID: 5678077650265235301}
+  m_HorizontalScrollbar: {fileID: 0}
+  m_VerticalScrollbar: {fileID: 0}
+  m_HorizontalScrollbarVisibility: 0
+  m_VerticalScrollbarVisibility: 0
+  m_HorizontalScrollbarSpacing: 0
+  m_VerticalScrollbarSpacing: 0
+  m_OnValueChanged:
+    m_PersistentCalls:
+      m_Calls: []
+--- !u!1 &5678077652153614778
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 5678077652153614777}
+  - component: {fileID: 5678077652153614727}
+  - component: {fileID: 5678077652153614776}
+  m_Layer: 5
+  m_Name: background
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &5678077652153614777
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5678077652153614778}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 5678077650299143686}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 0}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 400}
+  m_Pivot: {x: 0.5, y: 0}
+--- !u!222 &5678077652153614727
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5678077652153614778}
+  m_CullTransparentMesh: 1
+--- !u!114 &5678077652153614776
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5678077652153614778}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0, g: 0, b: 0, a: 0.7058824}
+  m_RaycastTarget: 0
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 0
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 0}
+  m_Type: 0
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+  m_PixelsPerUnitMultiplier: 1
+--- !u!1 &5678077652184860990
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 5678077652184860989}
+  - component: {fileID: 5678077652184860988}
+  m_Layer: 5
+  m_Name: viewport
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &5678077652184860989
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5678077652184860990}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 5678077650315353685}
+  m_Father: {fileID: 5678077651056538016}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: -0.00012207031}
+  m_SizeDelta: {x: 0, y: -10.492065}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &5678077652184860988
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5678077652184860990}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 3312d7739989d2b4e91e6319e9a96d76, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Padding: {x: 0, y: 0, z: 0, w: 0}
+  m_Softness: {x: 0, y: 0}
+--- !u!1 &8711180360588463275
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 4157740473186689210}
+  m_Layer: 0
+  m_Name: __bin__
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!224 &4157740473186689210
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8711180360588463275}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 5679040531673032047}
+  - {fileID: 79729155806030147}
+  m_Father: {fileID: 5678077650595346844}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.5, y: 0.5}
+  m_AnchorMax: {x: 0.5, y: 0.5}
+  m_AnchoredPosition: {x: 0, y: 500000}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!1001 &2454777507547019034
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 5678077650178334411}
+    m_Modifications:
+    - target: {fileID: 3730802781450377123, guid: e22e7dc3c05a644c08c833a3a2f42a16, type: 3}
+      propertyPath: _btn
+      value: 
+      objectReference: {fileID: 2756051535210465405}
+    - target: {fileID: 7844578585297590382, guid: e22e7dc3c05a644c08c833a3a2f42a16, type: 3}
+      propertyPath: m_Pivot.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 7844578585297590382, guid: e22e7dc3c05a644c08c833a3a2f42a16, type: 3}
+      propertyPath: m_Pivot.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 7844578585297590382, guid: e22e7dc3c05a644c08c833a3a2f42a16, type: 3}
+      propertyPath: m_RootOrder
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7844578585297590382, guid: e22e7dc3c05a644c08c833a3a2f42a16, type: 3}
+      propertyPath: m_AnchorMax.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7844578585297590382, guid: e22e7dc3c05a644c08c833a3a2f42a16, type: 3}
+      propertyPath: m_AnchorMax.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7844578585297590382, guid: e22e7dc3c05a644c08c833a3a2f42a16, type: 3}
+      propertyPath: m_AnchorMin.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7844578585297590382, guid: e22e7dc3c05a644c08c833a3a2f42a16, type: 3}
+      propertyPath: m_AnchorMin.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7844578585297590382, guid: e22e7dc3c05a644c08c833a3a2f42a16, type: 3}
+      propertyPath: m_SizeDelta.x
+      value: 200
+      objectReference: {fileID: 0}
+    - target: {fileID: 7844578585297590382, guid: e22e7dc3c05a644c08c833a3a2f42a16, type: 3}
+      propertyPath: m_SizeDelta.y
+      value: 100
+      objectReference: {fileID: 0}
+    - target: {fileID: 7844578585297590382, guid: e22e7dc3c05a644c08c833a3a2f42a16, type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7844578585297590382, guid: e22e7dc3c05a644c08c833a3a2f42a16, type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7844578585297590382, guid: e22e7dc3c05a644c08c833a3a2f42a16, type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7844578585297590382, guid: e22e7dc3c05a644c08c833a3a2f42a16, type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 7844578585297590382, guid: e22e7dc3c05a644c08c833a3a2f42a16, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7844578585297590382, guid: e22e7dc3c05a644c08c833a3a2f42a16, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7844578585297590382, guid: e22e7dc3c05a644c08c833a3a2f42a16, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7844578585297590382, guid: e22e7dc3c05a644c08c833a3a2f42a16, type: 3}
+      propertyPath: m_AnchoredPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7844578585297590382, guid: e22e7dc3c05a644c08c833a3a2f42a16, type: 3}
+      propertyPath: m_AnchoredPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7844578585297590382, guid: e22e7dc3c05a644c08c833a3a2f42a16, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7844578585297590382, guid: e22e7dc3c05a644c08c833a3a2f42a16, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7844578585297590382, guid: e22e7dc3c05a644c08c833a3a2f42a16, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7844578585297590383, guid: e22e7dc3c05a644c08c833a3a2f42a16, type: 3}
+      propertyPath: m_Name
+      value: tab_node_item
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: e22e7dc3c05a644c08c833a3a2f42a16, type: 3}
+--- !u!114 &1285608918186647737 stripped
+MonoBehaviour:
+  m_CorrespondingSourceObject: {fileID: 3730802781450377123, guid: e22e7dc3c05a644c08c833a3a2f42a16, type: 3}
+  m_PrefabInstance: {fileID: 2454777507547019034}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 74db3f6a69ff47f0880e1250393e6f7f, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+--- !u!114 &2756051535210465405 stripped
+MonoBehaviour:
+  m_CorrespondingSourceObject: {fileID: 301294120361967463, guid: e22e7dc3c05a644c08c833a3a2f42a16, type: 3}
+  m_PrefabInstance: {fileID: 2454777507547019034}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: cd788ac6ee4f4afe9d57738d49a3fdc4, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+--- !u!224 &5678077650929315700 stripped
+RectTransform:
+  m_CorrespondingSourceObject: {fileID: 7844578585297590382, guid: e22e7dc3c05a644c08c833a3a2f42a16, type: 3}
+  m_PrefabInstance: {fileID: 2454777507547019034}
+  m_PrefabAsset: {fileID: 0}
+--- !u!1001 &6068955105058075581
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 4157740473186689210}
+    m_Modifications:
+    - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+      propertyPath: m_Pivot.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+      propertyPath: m_Pivot.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+      propertyPath: m_RootOrder
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+      propertyPath: m_AnchorMax.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+      propertyPath: m_AnchorMax.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+      propertyPath: m_AnchorMin.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+      propertyPath: m_AnchorMin.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+      propertyPath: m_SizeDelta.x
+      value: 200
+      objectReference: {fileID: 0}
+    - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+      propertyPath: m_SizeDelta.y
+      value: 100
+      objectReference: {fileID: 0}
+    - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: -0
+      objectReference: {fileID: 0}
+    - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: -0
+      objectReference: {fileID: 0}
+    - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: -0
+      objectReference: {fileID: 0}
+    - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+      propertyPath: m_AnchoredPosition.x
+      value: 100
+      objectReference: {fileID: 0}
+    - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+      propertyPath: m_AnchoredPosition.y
+      value: 50
+      objectReference: {fileID: 0}
+    - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 8854415019278044657, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+      propertyPath: m_Name
+      value: v_btn
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+--- !u!114 &3738088849103178904 stripped
+MonoBehaviour:
+  m_CorrespondingSourceObject: {fileID: 7483045806784872229, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+  m_PrefabInstance: {fileID: 6068955105058075581}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: cd788ac6ee4f4afe9d57738d49a3fdc4, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+--- !u!224 &5679040531673032047 stripped
+RectTransform:
+  m_CorrespondingSourceObject: {fileID: 1939155628914972370, guid: d0b72a82a22a748f89a2896a633bad10, type: 3}
+  m_PrefabInstance: {fileID: 6068955105058075581}
+  m_PrefabAsset: {fileID: 0}
+--- !u!1001 &7254169892197894495
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 4157740473186689210}
+    m_Modifications:
+    - target: {fileID: 2277169281067990379, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_Name
+      value: v_label
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_Pivot.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_Pivot.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_RootOrder
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_AnchorMax.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_AnchorMax.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_AnchorMin.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_AnchorMin.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_SizeDelta.x
+      value: 160
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_SizeDelta.y
+      value: 100
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: -0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: -0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: -0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_AnchoredPosition.x
+      value: 500
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_AnchoredPosition.y
+      value: 3000
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+--- !u!224 &79729155806030147 stripped
+RectTransform:
+  m_CorrespondingSourceObject: {fileID: 7327563488862494748, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+  m_PrefabInstance: {fileID: 7254169892197894495}
+  m_PrefabAsset: {fileID: 0}
+--- !u!114 &2318477437615943927 stripped
+MonoBehaviour:
+  m_CorrespondingSourceObject: {fileID: 4937950594306488744, guid: 4557ac9378ce94fd38269da8f9aa86e3, type: 3}
+  m_PrefabInstance: {fileID: 7254169892197894495}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: e85702df90d74eb4892a7a742bcb0f05, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+--- !u!1001 &8512911683717107742
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 5678077650315353685}
+    m_Modifications:
+    - target: {fileID: 412087832265673011, guid: db9336d7824134e1cb737eb3ba4c9d93, type: 3}
+      propertyPath: m_Spacing
+      value: 6
+      objectReference: {fileID: 0}
+    - target: {fileID: 629926880474666585, guid: db9336d7824134e1cb737eb3ba4c9d93, type: 3}
+      propertyPath: m_AnchorMax.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 629926880474666585, guid: db9336d7824134e1cb737eb3ba4c9d93, type: 3}
+      propertyPath: m_AnchorMin.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 629926880474666585, guid: db9336d7824134e1cb737eb3ba4c9d93, type: 3}
+      propertyPath: m_SizeDelta.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 629926880474666585, guid: db9336d7824134e1cb737eb3ba4c9d93, type: 3}
+      propertyPath: m_SizeDelta.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 629926880474666585, guid: db9336d7824134e1cb737eb3ba4c9d93, type: 3}
+      propertyPath: m_AnchoredPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 629926880474666585, guid: db9336d7824134e1cb737eb3ba4c9d93, type: 3}
+      propertyPath: m_AnchoredPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4102609491836130490, guid: db9336d7824134e1cb737eb3ba4c9d93, type: 3}
+      propertyPath: m_Name
+      value: opt_node_item
+      objectReference: {fileID: 0}
+    - target: {fileID: 4102609491836130493, guid: db9336d7824134e1cb737eb3ba4c9d93, type: 3}
+      propertyPath: m_Pivot.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 4102609491836130493, guid: db9336d7824134e1cb737eb3ba4c9d93, type: 3}
+      propertyPath: m_Pivot.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 4102609491836130493, guid: db9336d7824134e1cb737eb3ba4c9d93, type: 3}
+      propertyPath: m_RootOrder
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4102609491836130493, guid: db9336d7824134e1cb737eb3ba4c9d93, type: 3}
+      propertyPath: m_AnchorMax.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4102609491836130493, guid: db9336d7824134e1cb737eb3ba4c9d93, type: 3}
+      propertyPath: m_AnchorMax.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4102609491836130493, guid: db9336d7824134e1cb737eb3ba4c9d93, type: 3}
+      propertyPath: m_AnchorMin.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4102609491836130493, guid: db9336d7824134e1cb737eb3ba4c9d93, type: 3}
+      propertyPath: m_AnchorMin.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4102609491836130493, guid: db9336d7824134e1cb737eb3ba4c9d93, type: 3}
+      propertyPath: m_SizeDelta.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4102609491836130493, guid: db9336d7824134e1cb737eb3ba4c9d93, type: 3}
+      propertyPath: m_SizeDelta.y
+      value: 104
+      objectReference: {fileID: 0}
+    - target: {fileID: 4102609491836130493, guid: db9336d7824134e1cb737eb3ba4c9d93, type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4102609491836130493, guid: db9336d7824134e1cb737eb3ba4c9d93, type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4102609491836130493, guid: db9336d7824134e1cb737eb3ba4c9d93, type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4102609491836130493, guid: db9336d7824134e1cb737eb3ba4c9d93, type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 4102609491836130493, guid: db9336d7824134e1cb737eb3ba4c9d93, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4102609491836130493, guid: db9336d7824134e1cb737eb3ba4c9d93, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4102609491836130493, guid: db9336d7824134e1cb737eb3ba4c9d93, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4102609491836130493, guid: db9336d7824134e1cb737eb3ba4c9d93, type: 3}
+      propertyPath: m_AnchoredPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4102609491836130493, guid: db9336d7824134e1cb737eb3ba4c9d93, type: 3}
+      propertyPath: m_AnchoredPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4102609491836130493, guid: db9336d7824134e1cb737eb3ba4c9d93, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4102609491836130493, guid: db9336d7824134e1cb737eb3ba4c9d93, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 4102609491836130493, guid: db9336d7824134e1cb737eb3ba4c9d93, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7248743696833887442, guid: db9336d7824134e1cb737eb3ba4c9d93, type: 3}
+      propertyPath: m_AnchorMax.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7248743696833887442, guid: db9336d7824134e1cb737eb3ba4c9d93, type: 3}
+      propertyPath: m_AnchorMin.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7248743696833887442, guid: db9336d7824134e1cb737eb3ba4c9d93, type: 3}
+      propertyPath: m_SizeDelta.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7248743696833887442, guid: db9336d7824134e1cb737eb3ba4c9d93, type: 3}
+      propertyPath: m_SizeDelta.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7248743696833887442, guid: db9336d7824134e1cb737eb3ba4c9d93, type: 3}
+      propertyPath: m_AnchoredPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7248743696833887442, guid: db9336d7824134e1cb737eb3ba4c9d93, type: 3}
+      propertyPath: m_AnchoredPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: db9336d7824134e1cb737eb3ba4c9d93, type: 3}
+--- !u!114 &3327545592706632832 stripped
+MonoBehaviour:
+  m_CorrespondingSourceObject: {fileID: 6345045228542041246, guid: db9336d7824134e1cb737eb3ba4c9d93, type: 3}
+  m_PrefabInstance: {fileID: 8512911683717107742}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 8010bd3b4bfd4274997d438a1d99ae19, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+--- !u!224 &5678077650501026979 stripped
+RectTransform:
+  m_CorrespondingSourceObject: {fileID: 4102609491836130493, guid: db9336d7824134e1cb737eb3ba4c9d93, type: 3}
+  m_PrefabInstance: {fileID: 8512911683717107742}
+  m_PrefabAsset: {fileID: 0}
diff --git a/Runtime/GuruDebugger/Runtime/Resources/ui/debugger_root.prefab.meta b/Runtime/GuruDebugger/Runtime/Resources/ui/debugger_root.prefab.meta
new file mode 100644
index 0000000..e0bdf93
--- /dev/null
+++ b/Runtime/GuruDebugger/Runtime/Resources/ui/debugger_root.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 346f45e927caa428a96dfb925af7ceeb
+PrefabImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/GuruDebugger/Samples.meta b/Runtime/GuruDebugger/Samples.meta
new file mode 100644
index 0000000..ba81363
--- /dev/null
+++ b/Runtime/GuruDebugger/Samples.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: c72ccdd308b4438e84ba71a4bc049aff
+timeCreated: 1711037647
\ No newline at end of file
diff --git a/Runtime/GuruDebugger/Samples/DebugDemo.cs b/Runtime/GuruDebugger/Samples/DebugDemo.cs
new file mode 100644
index 0000000..95864f1
--- /dev/null
+++ b/Runtime/GuruDebugger/Samples/DebugDemo.cs
@@ -0,0 +1,25 @@
+
+using Guru;
+using Guru.Debugger;
+using UnityEngine;
+
+public class DebugDemo : MonoBehaviour
+{
+    // Start is called before the first frame update
+    void Start()
+    {
+        GuruDebugger.Init();
+
+        GuruDebugger.Instance.AddOption("INFO/page1", "DebugDemo")
+            .AddButton("AAA", () =>
+            {
+                Debug.Log("AAA");
+            })
+            .AddLabel("Test");
+        
+        
+        GuruDebugger.Show();
+    }
+
+  
+}
diff --git a/Runtime/GuruDebugger/Samples/DebugDemo.cs.meta b/Runtime/GuruDebugger/Samples/DebugDemo.cs.meta
new file mode 100644
index 0000000..bb35cac
--- /dev/null
+++ b/Runtime/GuruDebugger/Samples/DebugDemo.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ea03c9090000940e3a5ae500d9d918bc
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Runtime/GuruDebugger/Samples/DebugDemo.unity b/Runtime/GuruDebugger/Samples/DebugDemo.unity
new file mode 100644
index 0000000..aeb32b7
--- /dev/null
+++ b/Runtime/GuruDebugger/Samples/DebugDemo.unity
@@ -0,0 +1,509 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!29 &1
+OcclusionCullingSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_OcclusionBakeSettings:
+    smallestOccluder: 5
+    smallestHole: 0.25
+    backfaceThreshold: 100
+  m_SceneGUID: 00000000000000000000000000000000
+  m_OcclusionCullingData: {fileID: 0}
+--- !u!104 &2
+RenderSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 9
+  m_Fog: 0
+  m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
+  m_FogMode: 3
+  m_FogDensity: 0.01
+  m_LinearFogStart: 0
+  m_LinearFogEnd: 300
+  m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
+  m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
+  m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
+  m_AmbientIntensity: 1
+  m_AmbientMode: 0
+  m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
+  m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
+  m_HaloStrength: 0.5
+  m_FlareStrength: 1
+  m_FlareFadeSpeed: 3
+  m_HaloTexture: {fileID: 0}
+  m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
+  m_DefaultReflectionMode: 0
+  m_DefaultReflectionResolution: 128
+  m_ReflectionBounces: 1
+  m_ReflectionIntensity: 1
+  m_CustomReflection: {fileID: 0}
+  m_Sun: {fileID: 0}
+  m_IndirectSpecularColor: {r: 0.44657874, g: 0.49641275, b: 0.5748172, a: 1}
+  m_UseRadianceAmbientProbe: 0
+--- !u!157 &3
+LightmapSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 12
+  m_GIWorkflowMode: 1
+  m_GISettings:
+    serializedVersion: 2
+    m_BounceScale: 1
+    m_IndirectOutputScale: 1
+    m_AlbedoBoost: 1
+    m_EnvironmentLightingMode: 0
+    m_EnableBakedLightmaps: 1
+    m_EnableRealtimeLightmaps: 0
+  m_LightmapEditorSettings:
+    serializedVersion: 12
+    m_Resolution: 2
+    m_BakeResolution: 40
+    m_AtlasSize: 1024
+    m_AO: 0
+    m_AOMaxDistance: 1
+    m_CompAOExponent: 1
+    m_CompAOExponentDirect: 0
+    m_ExtractAmbientOcclusion: 0
+    m_Padding: 2
+    m_LightmapParameters: {fileID: 0}
+    m_LightmapsBakeMode: 1
+    m_TextureCompression: 1
+    m_FinalGather: 0
+    m_FinalGatherFiltering: 1
+    m_FinalGatherRayCount: 256
+    m_ReflectionCompression: 2
+    m_MixedBakeMode: 2
+    m_BakeBackend: 1
+    m_PVRSampling: 1
+    m_PVRDirectSampleCount: 32
+    m_PVRSampleCount: 512
+    m_PVRBounces: 2
+    m_PVREnvironmentSampleCount: 256
+    m_PVREnvironmentReferencePointCount: 2048
+    m_PVRFilteringMode: 1
+    m_PVRDenoiserTypeDirect: 1
+    m_PVRDenoiserTypeIndirect: 1
+    m_PVRDenoiserTypeAO: 1
+    m_PVRFilterTypeDirect: 0
+    m_PVRFilterTypeIndirect: 0
+    m_PVRFilterTypeAO: 0
+    m_PVREnvironmentMIS: 1
+    m_PVRCulling: 1
+    m_PVRFilteringGaussRadiusDirect: 1
+    m_PVRFilteringGaussRadiusIndirect: 5
+    m_PVRFilteringGaussRadiusAO: 2
+    m_PVRFilteringAtrousPositionSigmaDirect: 0.5
+    m_PVRFilteringAtrousPositionSigmaIndirect: 2
+    m_PVRFilteringAtrousPositionSigmaAO: 1
+    m_ExportTrainingData: 0
+    m_TrainingDataDestination: TrainingData
+    m_LightProbeSampleCountMultiplier: 4
+  m_LightingDataAsset: {fileID: 0}
+  m_LightingSettings: {fileID: 0}
+--- !u!196 &4
+NavMeshSettings:
+  serializedVersion: 2
+  m_ObjectHideFlags: 0
+  m_BuildSettings:
+    serializedVersion: 2
+    agentTypeID: 0
+    agentRadius: 0.5
+    agentHeight: 2
+    agentSlope: 45
+    agentClimb: 0.4
+    ledgeDropHeight: 0
+    maxJumpAcrossDistance: 0
+    minRegionArea: 2
+    manualCellSize: 0
+    cellSize: 0.16666667
+    manualTileSize: 0
+    tileSize: 256
+    accuratePlacement: 0
+    maxJobWorkers: 0
+    preserveTilesOutsideBounds: 0
+    debug:
+      m_Flags: 0
+  m_NavMeshData: {fileID: 0}
+--- !u!1001 &1243617387
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 0}
+    m_Modifications:
+    - target: {fileID: 5678077650178334411, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3}
+      propertyPath: m_SizeDelta.x
+      value: 200
+      objectReference: {fileID: 0}
+    - target: {fileID: 5678077650315353685, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3}
+      propertyPath: m_SizeDelta.y
+      value: 160
+      objectReference: {fileID: 0}
+    - target: {fileID: 5678077650315353685, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3}
+      propertyPath: m_AnchoredPosition.y
+      value: 870.00006
+      objectReference: {fileID: 0}
+    - target: {fileID: 5678077650501026979, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3}
+      propertyPath: m_AnchorMax.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 5678077650501026979, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3}
+      propertyPath: m_AnchorMin.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 5678077650501026979, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3}
+      propertyPath: m_SizeDelta.x
+      value: 1080
+      objectReference: {fileID: 0}
+    - target: {fileID: 5678077650501026979, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3}
+      propertyPath: m_AnchoredPosition.x
+      value: 540
+      objectReference: {fileID: 0}
+    - target: {fileID: 5678077650501026979, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3}
+      propertyPath: m_AnchoredPosition.y
+      value: -80
+      objectReference: {fileID: 0}
+    - target: {fileID: 5678077650595346832, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3}
+      propertyPath: m_Name
+      value: debugger_root
+      objectReference: {fileID: 0}
+    - target: {fileID: 5678077650595346832, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3}
+      propertyPath: m_IsActive
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 5678077650595346844, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3}
+      propertyPath: m_Pivot.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 5678077650595346844, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3}
+      propertyPath: m_Pivot.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 5678077650595346844, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3}
+      propertyPath: m_RootOrder
+      value: 3
+      objectReference: {fileID: 0}
+    - target: {fileID: 5678077650595346844, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3}
+      propertyPath: m_AnchorMax.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 5678077650595346844, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3}
+      propertyPath: m_AnchorMax.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 5678077650595346844, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3}
+      propertyPath: m_AnchorMin.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 5678077650595346844, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3}
+      propertyPath: m_AnchorMin.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 5678077650595346844, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3}
+      propertyPath: m_SizeDelta.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 5678077650595346844, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3}
+      propertyPath: m_SizeDelta.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 5678077650595346844, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 5678077650595346844, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 5678077650595346844, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 5678077650595346844, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 5678077650595346844, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 5678077650595346844, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 5678077650595346844, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 5678077650595346844, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3}
+      propertyPath: m_AnchoredPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 5678077650595346844, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3}
+      propertyPath: m_AnchoredPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 5678077650595346844, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 5678077650595346844, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 5678077650595346844, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 5678077650929315700, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3}
+      propertyPath: m_AnchorMax.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 5678077650929315700, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3}
+      propertyPath: m_AnchorMin.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 5678077650929315700, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3}
+      propertyPath: m_AnchoredPosition.x
+      value: 100
+      objectReference: {fileID: 0}
+    - target: {fileID: 5678077650929315700, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3}
+      propertyPath: m_AnchoredPosition.y
+      value: -50
+      objectReference: {fileID: 0}
+    - target: {fileID: 9123733450142156359, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3}
+      propertyPath: m_AnchorMax.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 9123733450142156359, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3}
+      propertyPath: m_AnchorMin.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 9123733450142156359, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3}
+      propertyPath: m_AnchoredPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 9123733450142156359, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3}
+      propertyPath: m_AnchoredPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: 346f45e927caa428a96dfb925af7ceeb, type: 3}
+--- !u!1 &1409984334
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1409984337}
+  - component: {fileID: 1409984336}
+  - component: {fileID: 1409984335}
+  m_Layer: 0
+  m_Name: Main Camera
+  m_TagString: MainCamera
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!81 &1409984335
+AudioListener:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1409984334}
+  m_Enabled: 1
+--- !u!20 &1409984336
+Camera:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1409984334}
+  m_Enabled: 1
+  serializedVersion: 2
+  m_ClearFlags: 1
+  m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
+  m_projectionMatrixMode: 1
+  m_GateFitMode: 2
+  m_FOVAxisMode: 0
+  m_SensorSize: {x: 36, y: 24}
+  m_LensShift: {x: 0, y: 0}
+  m_FocalLength: 50
+  m_NormalizedViewPortRect:
+    serializedVersion: 2
+    x: 0
+    y: 0
+    width: 1
+    height: 1
+  near clip plane: 0.3
+  far clip plane: 1000
+  field of view: 60
+  orthographic: 0
+  orthographic size: 5
+  m_Depth: -1
+  m_CullingMask:
+    serializedVersion: 2
+    m_Bits: 4294967295
+  m_RenderingPath: -1
+  m_TargetTexture: {fileID: 0}
+  m_TargetDisplay: 0
+  m_TargetEye: 3
+  m_HDR: 1
+  m_AllowMSAA: 1
+  m_AllowDynamicResolution: 0
+  m_ForceIntoRT: 0
+  m_OcclusionCulling: 1
+  m_StereoConvergence: 10
+  m_StereoSeparation: 0.022
+--- !u!4 &1409984337
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1409984334}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 1, z: -10}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1597431377
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1597431379}
+  - component: {fileID: 1597431378}
+  m_Layer: 0
+  m_Name: Directional Light
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!108 &1597431378
+Light:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1597431377}
+  m_Enabled: 1
+  serializedVersion: 10
+  m_Type: 1
+  m_Shape: 0
+  m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
+  m_Intensity: 1
+  m_Range: 10
+  m_SpotAngle: 30
+  m_InnerSpotAngle: 21.80208
+  m_CookieSize: 10
+  m_Shadows:
+    m_Type: 2
+    m_Resolution: -1
+    m_CustomResolution: -1
+    m_Strength: 1
+    m_Bias: 0.05
+    m_NormalBias: 0.4
+    m_NearPlane: 0.2
+    m_CullingMatrixOverride:
+      e00: 1
+      e01: 0
+      e02: 0
+      e03: 0
+      e10: 0
+      e11: 1
+      e12: 0
+      e13: 0
+      e20: 0
+      e21: 0
+      e22: 1
+      e23: 0
+      e30: 0
+      e31: 0
+      e32: 0
+      e33: 1
+    m_UseCullingMatrixOverride: 0
+  m_Cookie: {fileID: 0}
+  m_DrawHalo: 0
+  m_Flare: {fileID: 0}
+  m_RenderMode: 0
+  m_CullingMask:
+    serializedVersion: 2
+    m_Bits: 4294967295
+  m_RenderingLayerMask: 1
+  m_Lightmapping: 4
+  m_LightShadowCasterMode: 0
+  m_AreaSize: {x: 1, y: 1}
+  m_BounceIntensity: 1
+  m_ColorTemperature: 6570
+  m_UseColorTemperature: 0
+  m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
+  m_UseBoundingSphereOverride: 0
+  m_UseViewFrustumForShadowCasterCull: 1
+  m_ShadowRadius: 0
+  m_ShadowAngle: 0
+--- !u!4 &1597431379
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1597431377}
+  m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
+  m_LocalPosition: {x: 0, y: 3, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
+--- !u!1 &1847055078
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1847055080}
+  - component: {fileID: 1847055079}
+  m_Layer: 0
+  m_Name: Main
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &1847055079
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1847055078}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: ea03c9090000940e3a5ae500d9d918bc, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+--- !u!4 &1847055080
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1847055078}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 2
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
diff --git a/Runtime/GuruDebugger/Samples/DebugDemo.unity.meta b/Runtime/GuruDebugger/Samples/DebugDemo.unity.meta
new file mode 100644
index 0000000..4d9cdb9
--- /dev/null
+++ b/Runtime/GuruDebugger/Samples/DebugDemo.unity.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 1873ecc2969fb40fdb00731d8abfd8f7
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: