<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Манипуляции с окном и его элементами управления]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=6431&amp;type=atom" />
	<updated>2011-11-24T03:42:33Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=6431</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Манипуляции с окном и его элементами управления]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=53790#p53790" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>ypppu пишет:</cite><blockquote><p>...делать различные действия с окнами и их элементами управления (&quot;контролами&quot;).</p></blockquote></div><p><em>Апгрэйдом</em> своего статуса я не одержим, так как считаю, что можно быть полезным имея статус участника, а вот идея реализации меня заинтересовала:<br /></p><div class="codebox"><pre><code>/*
*клавиши задающие направления:
   numpadup, numpaddown, numpadleft, numpadright

клавиши задающие вид действия:
   lalt+lwin+lbutton - скрытие/отображение окна (с иконой в трее)
   lalt+lbutton - движение контрола
   ralt+rctrl+* - движение контрола**
   rwin+rctrl+* - ресайз контрола**
   ralt+mbutton - раз/блокировка контрола
   ralt+mbutton(x2) - скрытие/отображение контрола
   ralt+wu/wd - прозрачность окна**
   ralt+appskey+* - ресайз окна**
   ralt+rshift - сохранение значений
   ralt/rwin+numpadclear - восстановление значений**

пункты меню:
   переключение отображения окна**
   скрытие/отображение окна**
   tilde+esc - закрытие скрипта

**требуется сохранение значений окна
 */

#NoEnv
#UseHook
#WinActivateForce
SetBatchLines, -1
DetectHiddenWindows, On
Value:=5, TransValue:=255
Menu, Tray, NoStandard
Menu, Tray, Tip, Test
Menu, Tray, Add, &amp;AOT stored window, AOTWindow
Menu, Tray, Add, &amp;Hide stored window, ToggleVWindow
Menu, Tray, Add
Menu, Tray, Add, &amp;Exit (Tilde+Esc), ExitScript
OnMessage(0x401, &quot;WM_LBUTTONUP&quot;)
SetTimer, ChaseCursor, 100
Hotkey, *NumpadUp, Action
Hotkey, *NumpadDown, Action
Hotkey, *NumpadLeft, Action
Hotkey, *NumpadRight, Action
Hotkey, *NumpadClear, Action
Hotkey, RAlt &amp; WheelUp, Action2
Hotkey, RAlt &amp; WheelDown, Action2
Hotkey, RAlt &amp; LButton, Action3
Hotkey, vkC0 &amp; Esc, ExitScript
~*LButton::Goto, Action

ChaseCursor:
   CoordMode, Mouse
   MouseGetPos, XPosA, YPosA
   CoordMode, Mouse, Relative
   MouseGetPos, XPosR, YPosR, WinID, WinCtrl
   WinGetTitle, WinTitle, % &quot;ahk_id&quot;WinID
   WinGetPos, WinX, WinY, WinW, WinH, % &quot;ahk_id&quot;WinID
   ControlGetPos, CtrlX, CtrlY, CtrlW
                , CtrlH, % WinCtrl, % &quot;ahk_id&quot;WinID
;   CurrentInfo()
   If GetKeyState(&quot;RAlt&quot;, &quot;P&quot;) And GetKeyState(&quot;RShift&quot;, &quot;P&quot;)
   {
      If IsInvisible
      {
         TrayTip,, hidden window must be visible
         Return
      }
      StoreInfo(), Message(&quot;stored&quot;, &quot;stored size&quot;)
   }
   Return

Action:
   If GetKeyState(&quot;Alt&quot;, &quot;P&quot;) Or GetKeyState(&quot;RWin&quot;, &quot;P&quot;)
   {
      If GetKeyState(&quot;RAlt&quot;, &quot;P&quot;) And GetKeyState(&quot;RCtrl&quot;, &quot;P&quot;)
      {
         If SubStr(A_ThisHotkey, 2)=&quot;NumpadUp&quot;
            CtrlMove(CtrlXC, CtrlYC-=Value
                   , CtrlWC, CtrlHC, &quot;Y&quot;, &quot;-&quot;, CtrlYC)
         Else If SubStr(A_ThisHotkey, 2)=&quot;NumpadDown&quot;
            CtrlMove(CtrlXC, CtrlYC+=Value
                   , CtrlWC, CtrlHC, &quot;Y&quot;, &quot;+&quot;, CtrlYC)
         Else If SubStr(A_ThisHotkey, 2)=&quot;NumpadLeft&quot;
            CtrlMove(CtrlXC-=Value, CtrlYC
                   , CtrlWC, CtrlHC, &quot;X&quot;, &quot;-&quot;, CtrlXC)
         Else If SubStr(A_ThisHotkey, 2)=&quot;NumpadRight&quot;
            CtrlMove(CtrlXC+=Value, CtrlYC
                   , CtrlWC, CtrlHC, &quot;X&quot;, &quot;+&quot;, CtrlXC)
      }
      Else If GetKeyState(&quot;RWin&quot;, &quot;P&quot;) And GetKeyState(&quot;RCtrl&quot;, &quot;P&quot;)
      {
         If SubStr(A_ThisHotkey, 2)=&quot;NumpadUp&quot;
            CtrlMove(CtrlXC, CtrlYC
                   , CtrlWC, CtrlHC-=Value, &quot;H&quot;, &quot;-&quot;, CtrlHC)
         Else If SubStr(A_ThisHotkey, 2)=&quot;NumpadDown&quot;
            CtrlMove(CtrlXC, CtrlYC
                   , CtrlWC, CtrlHC+=Value, &quot;H&quot;, &quot;+&quot;, CtrlHC)
         Else If SubStr(A_ThisHotkey, 2)=&quot;NumpadLeft&quot;
            CtrlMove(CtrlXC, CtrlYC
                   , CtrlWC-=Value, CtrlHC, &quot;W&quot;, &quot;-&quot;, CtrlWC)
         Else If SubStr(A_ThisHotkey, 2)=&quot;NumpadRight&quot;
            CtrlMove(CtrlXC, CtrlYC
                   , CtrlWC+=Value, CtrlHC, &quot;W&quot;, &quot;+&quot;, CtrlWC)
      }
      Else If GetKeyState(&quot;AppsKey&quot;, &quot;P&quot;)
      {
         If SubStr(A_ThisHotkey, 2)=&quot;NumpadUp&quot;
            WinResize(WinWC, WinHC-=Value)
         Else If SubStr(A_ThisHotkey, 2)=&quot;NumpadDown&quot;
            WinResize(WinWC, WinHC+=Value)
         Else If SubStr(A_ThisHotkey, 2)=&quot;NumpadLeft&quot;
            WinResize(WinWC-=Value, WinHC)
         Else If SubStr(A_ThisHotkey, 2)=&quot;NumpadRight&quot;
            WinResize(WinWC+=Value, WinHC)
      }
      Else If GetKeyState(&quot;RAlt&quot;, &quot;P&quot;) And GetKeyState(&quot;NumpadClear&quot;, &quot;P&quot;)
           Or GetKeyState(&quot;RWin&quot;, &quot;P&quot;) And GetKeyState(&quot;NumpadClear&quot;, &quot;P&quot;)
      {
         If !WinTitleS
         {
            TrayTip,, stored window is not found!
            Return
         }
         Else BackInfo()
      }
      Else If GetKeyState(&quot;LAlt&quot;, &quot;P&quot;) And !GetKeyState(&quot;LWin&quot;, &quot;P&quot;)
      {
         If IsInvisible
         {
            TrayTip,, hidden window must be visible!!!
            Return
         }
         StoreInfo()
         While GetKeyState(&quot;LButton&quot;, &quot;P&quot;)
         {
            ControlMove, % WinCtrlS, XPosR-CtrlW/2, YPosR-CtrlH/2
                       ,,, % &quot;ahk_id&quot;WinIDS
            TrayTip,, % &quot; control: &quot;WinCtrlS
                    . &quot;`nx: &quot;CtrlX &quot;, y: &quot;CtrlY
            WinSet, Redraw,, % &quot;ahk_id&quot;WinID
            Sleep, 100
         }
         BackInfo()
      }
      Else If GetKeyState(&quot;LWin&quot;, &quot;P&quot;) And !IsUsed
      {
         WinTitleT:=WinTitle, WinIDT:=WinID, IsUsed:=True
         WinGet, ProcPath, ProcessPath, % &quot;ahk_id&quot;WinIDT
         WinHide, % &quot;ahk_id&quot;WinIDT
         hIcon:=DllCall(&quot;Shell32.dll\ExtractAssociatedIcon&quot;, Int, 0
                                                           , Str, ProcPath
                                                           , &quot;Ptr*&quot;, 0)
         TrayIcon(A_ScriptHwnd, 1, 0x401, hIcon, WinTitleT, 0)
      }
   }
   Else Send, % &quot;{&quot;SubStr(A_ThisHotkey, 2)&quot; Down}&quot;
   KeyWait, % A_ThisHotkey
   If GetKeyState(&quot;Alt&quot;, &quot;P&quot;) Or GetKeyState(&quot;RWin&quot;, &quot;P&quot;)
      Return
   Else Send, % &quot;{&quot;SubStr(A_ThisHotkey, 2)&quot; Up}&quot;
   Return

Action2:
   Hotkey, % A_ThisHotkey, WBlock, On
   If (WinIDSV!=WinIDS Or IsInvisible)
   {
      If IsInvisible
      {
         TrayTip,, hidden window must be visible
         Sleep, 50
         Hotkey, % A_ThisHotkey, Action2, On
         Return
      }
      WinSet, Trans, % TransValue:=255, % &quot;ahk_id&quot;WinIDSV
      WinIDSV:=&quot;&quot;
   }
   WinActivate, % &quot;ahk_id&quot;WinIDS
   TTransValue:=A_ThisHotkey=&quot;RAlt &amp; WheelUp&quot; ? 255:0
   If (TransValue=TTransValue Or !WinIDS)
   {
      If !WinIDS
         TrayTip,, stored window is not found!
      Sleep, 50
      Hotkey, % A_ThisHotkey, Action2, On
      Return
   }
   TransValue.=A_ThisHotkey=&quot;RAlt &amp; WheelUp&quot; ? +=15:-=15
   WinSet, Trans, % TransValue, % &quot;ahk_id&quot;WinIDS
   Str:=&quot;&quot;, WinIDSV:=WinIDS
   If TransValue=255
      Str:=&quot; (opaque)&quot;
   Else If TransValue=0
      Str:=&quot; (transparent)&quot;
   TrayTip,, % &quot;transparency: &quot;TransValue . Str
   Sleep, 50
   Hotkey, % A_ThisHotkey, Action2, On
WBlock:
   Return

Action3:
   KeyWait, LButton
   Itr++
   SetTimer, Counter, -250
   Return
Counter:
   If Itr=1
      SetTimer, ActionBySClick, -0
   Else If Itr=2
      SetTimer, ActionByDClick, -0
   Itr:=&quot;&quot;
   Return
ActionBySClick:
   ControlGet, CCheck, Enabled,, % WinCtrl, % &quot;ahk_id&quot;WinID
   Control, % CCheck ? &quot;Disable&quot;:&quot;Enable&quot;,, % WinCtrl, % &quot;ahk_id&quot;WinID
   WinSet, Redraw,, % &quot;ahk_id&quot;WinID
   TrayTip,, % &quot;control: &quot;WinCtrl . (CCheck ? &quot;`ndisable&quot;:&quot;`nenable&quot;)
   Return
ActionByDClick:
   If !CtrlHidden
      WinCtrlV:=WinCtrl, WinIDV:=WinID
   WinActivate, % &quot;ahk_id&quot;WinIDV
   Control, % !CtrlHidden ? &quot;Hide&quot;:&quot;Show&quot;,, % WinCtrlV, % &quot;ahk_id&quot;WinIDV
   WinSet, Redraw,, % &quot;ahk_id&quot;WinID
   TrayTip,, % &quot;control: &quot;WinCtrlV . (!CtrlHidden ? &quot;`nhidden&quot;:&quot;`nvisible&quot;)
   CtrlHidden:=!CtrlHidden
   Return

ToggleVWindow:
   If (!WinIDS Or WinIDT=WinIDS)
   {
      TrayTip,, % &quot;stored window &quot;
              . (!WinIDS ? &quot;is not found!&quot;
                         : &quot;has already hidden!&quot;)
      Return
   }
   If !IsInvisible
      WinHide, % &quot;ahk_id&quot;WinIDS
   Else
      WinShow, % &quot;ahk_id&quot;WinIDS
   Menu, Tray, Rename, % (!IsInvisible ? &quot;&amp;Hide&quot;
                                       : &quot;&amp;Show&quot;) . &quot; stored window&quot;
                     , % (!IsInvisible ? &quot;&amp;Show&quot;
                                       : &quot;&amp;Hide&quot;) . &quot; stored window&quot;
   IsInvisible:=!IsInvisible
   Return

AOTWindow:
   If !WinIDS
   {
      TrayTip,, stored window is not found!
      Return
   }
   WinSet, AlwaysOnTop, Toggle, % &quot;ahk_id&quot;WinIDS
   WinGet, IsExStyle, ExStyle, % &quot;ahk_id&quot;WinIDS
   TrayTip,, % IsExStyle&amp;8 ? &quot;stored window is&quot; . &quot;`n  always on top&quot;
                           : &quot; stored window is&quot; . &quot;`nnot always on top&quot;
   Menu, Tray, % IsExStyle&amp;8 ? &quot;Check&quot;:&quot;Uncheck&quot;
             , &amp;AOT stored window
   Return

ExitScript:
   ExitApp

CtrlMove(X, Y, W, H, Dir, Sign, Val)
{
   global
   If (!WinCtrlS Or IsInvisible)
   {
      TrayTip,, % &quot;stored window &quot;
             . (IsInvisible ? &quot;must be visible&quot;:&quot;is not found!&quot;)
      Return
   }
   WinActivate, % &quot;ahk_id&quot;WinIDS
   ControlMove, % WinCtrlS, X, Y, W, H, % &quot;ahk_id&quot;WinIDS
   MouseMove, X+W/2, Y+H/2
   TrayTip,, % &quot; control: &quot;WinCtrlS
           . &quot;`nact.: &quot;Sign &quot;, dir.: &quot;Dir &quot;, val.: &quot;Val
   WinSet, Redraw,, % &quot;ahk_id&quot;WinID
}

WinResize(W, H)
{
   global
   If (!WinIDS Or IsInvisible)
   {
      TrayTip,, % &quot;stored window &quot;
             . (IsInvisible ? &quot;must be visible&quot;:&quot;is not found!&quot;)
      Return
   }
   WinActivate, % &quot;ahk_id&quot;WinIDS
   WinMove, % &quot;ahk_id&quot;WinIDS,, WinXC, WinYC, W, H
   MouseMove, W/2, H/2
   TrayTip,, % &quot;size window: &quot;WinTitleS
           . &quot;`n&quot;W &quot;x&quot;H
   WinSet, Redraw,, % &quot;ahk_id&quot;WinID
}

StoreInfo()
{
   global
   WinTitleS:=WinTitle
   WinCtrlS:=WinCtrl, WinIDS:=WinID
   WinWS:=WinWC:=WinW, WinHS:=WinHC:=WinH
   CtrlXS:=CtrlXC:=CtrlX, CtrlYS:=CtrlYC:=CtrlY
   CtrlWS:=CtrlWC:=CtrlW, CtrlHS:=CtrlHC:=CtrlH
   WinGet, IsExStyle, ExStyle, % &quot;ahk_id&quot;WinIDS
   Menu, Tray, % IsExStyle&amp;8 ? &quot;Check&quot;:&quot;Uncheck&quot;
             , &amp;AOT stored window
   If (WinIDSV!=WinIDS)
   {
      WinSet, Trans, % TransValue:=255, % &quot;ahk_id&quot;WinIDSV
      WinIDSV:=&quot;&quot;
   }
}

BackInfo()
{
   global
   If ((WinIDT=WinIDS And IsUsed) Or IsInvisible)
   {
      TrayTip,, stored window must be visible
      Return
   }
   CtrlMove(CtrlXS, CtrlYS, CtrlWS, CtrlHS, &quot;&quot;, &quot;&quot;, &quot;&quot;)
   WinResize(WinWS, WinHS), Message(&quot;reset&quot;, &quot;resize&quot;)
   CtrlXC:=CtrlXS, CtrlYC:=CtrlYS
   CtrlWC:=CtrlWS, CtrlHC:=CtrlHS
}

Message(Text1, Text2)
{
   global
   TrayTip,, % Text1 &quot; control: &quot;WinCtrlS
      . &quot;`nx: &quot;CtrlXS &quot;, y: &quot;CtrlYS
      . &quot;, w: &quot;CtrlWS &quot;, h: &quot;CtrlHS
         . &quot;`n&quot;Text2 &quot; window: &quot;WinTitleS
         . &quot;`n&quot;WinWS &quot;x&quot;WinHS
}

CurrentInfo()
{
   global
   ToolTip, % &quot;coords: ax: &quot;XPosA &quot;, ay: &quot;YPosA
          . &quot;`n`trx: &quot;XPosR &quot;, ry: &quot;YPosR
;          . &quot;`nwindow: &quot;WinTitle
;          . &quot;`n`tw: &quot;WinW &quot;, h: &quot;WinH
;          . &quot;`n`tx: &quot;WinX &quot;, y: &quot;WinY
          . &quot;`ncontrol: &quot;WinCtrl
          . &quot;`n`tw: &quot;CtrlW &quot;, h: &quot;CtrlH
          . &quot;`n`tx: &quot;CtrlX &quot;, y: &quot;CtrlY
}

WM_LBUTTONUP(wParam, lParam, Msg, hWnd)
{
   global
   If (Msg=0x401 And lParam=0x202) ; WM_USER &amp; WM_LBUTTONUP
   {
      WinShow, % &quot;ahk_id&quot;WinIDT
      WinActivate, % &quot;ahk_id&quot;WinIDT
      TrayIcon(A_ScriptHwnd, 1, 0x401, 0, &quot;&quot;, 2)
      DllCall(&quot;DestroyIcon&quot;, Int, hIcon)
      WinIDT:=IsUsed:=False
   }
}

TrayIcon(hWnd, uID, uCbMsg=0, hIcon=0, Title=&quot;&quot;, dwMsg=2)
{
   VarSetCapacity(NID, 68, 0)
   NumPut(VarSetCapacity(NID), NID, 0)
   NumPut(hWnd, NID, 4)
   NumPut(uID, NID, 8)
   NumPut(7, NID, 12)
   NumPut(uCbMsg, NID, 16)
   NumPut(hIcon, NID, 20)
   StrPut(Title, &amp;NID+24, 64, &quot;UTF-16&quot;)
   DllCall(&quot;Shell32.dll\Shell_NotifyIcon&quot;
                       . (A_IsUnicode ? &quot;W&quot;:&quot;A&quot;), Int, dwMsg
                                                , Int, &amp;NID)
}</code></pre></div><div class="quotebox"><cite>ypppu пишет:</cite><blockquote><p>Было бы здорово организовать GUI-окно с выводом информации об окне, контроле под курсором и т. д., как в AutoIt3 Window Spy.</p></blockquote></div><p>Я делаю под личные нужды, что-то подобное, позже выложу.</p>]]></content>
			<author>
				<name><![CDATA[Grey]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25792</uri>
			</author>
			<updated>2011-11-24T03:42:33Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=53790#p53790</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Манипуляции с окном и его элементами управления]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=53467#p53467" />
			<content type="html"><![CDATA[<p>А разработка игры <a href="http://forum.script-coding.com/viewtopic.php?pid=47806#p47806">Life</a> не является разработкой?)</p>]]></content>
			<author>
				<name><![CDATA[Zohann]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26234</uri>
			</author>
			<updated>2011-11-13T07:44:45Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=53467#p53467</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Манипуляции с окном и его элементами управления]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=53426#p53426" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>ypppu пишет:</cite><blockquote><p>Некоторые участники форума явно претендуют на звание разработчика. Не хватает только формальности - сделать разработку.<br />Предлагаю участникам такое задание.</p></blockquote></div><p>Т.е. это задание только для тех, у кого статус &quot;Участник&quot;, а хочет иметь &quot;Разработчик&quot;?<br />Кстати, этот статус(&quot;Разработчик&quot;) ничего кроме права писать в коллекцию(а это скорее &quot;почётная обязанность&quot;) не даёт. Обычно есть ещё плюшки вроде использования HTML в сообщениях.</p>]]></content>
			<author>
				<name><![CDATA[Александр_]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24888</uri>
			</author>
			<updated>2011-11-10T22:49:36Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=53426#p53426</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Манипуляции с окном и его элементами управления]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=53417#p53417" />
			<content type="html"><![CDATA[<p>Я знаю. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> Но объединить их в один универсальный - тоже интересная задача.</p>]]></content>
			<author>
				<name><![CDATA[ypppu]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=5974</uri>
			</author>
			<updated>2011-11-10T19:03:34Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=53417#p53417</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Манипуляции с окном и его элементами управления]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=53415#p53415" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>ypppu пишет:</cite><blockquote><p>Было бы здорово организовать GUI-окно с выводом информации об окне, контроле под курсором и т. д., как в AutoIt3 Window Spy.</p></blockquote></div><p>Подобных скриптов на оф. форуме куча, я видел по-крайней мере несколько.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2011-11-10T18:42:22Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=53415#p53415</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[AHK: Манипуляции с окном и его элементами управления]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=53412#p53412" />
			<content type="html"><![CDATA[<p>Некоторые участники форума явно претендуют на звание разработчика. Не хватает только формальности - сделать разработку.<br />Предлагаю участникам такое задание.<br />Разработать скрипт, который позволил бы делать различные действия с окнами и их элементами управления (&quot;контролами&quot;). Например, чтобы при удержании Ctrl+Alt можно было курсором подвинуть контрол. Или изменить его статус (enable / disable), видимость. Также возможность изменять размер окон, у которых это не предусмотрено, сворачивать их в область уведомлений (&quot;трей&quot;). Было бы здорово организовать GUI-окно с выводом информации об окне, контроле под курсором и т. д., как в AutoIt3 Window Spy.</p>]]></content>
			<author>
				<name><![CDATA[ypppu]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=5974</uri>
			</author>
			<updated>2011-11-10T16:45:36Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=53412#p53412</id>
		</entry>
</feed>
