SysInfo: Keyb_SendKeys improved support to Unicode

git-svn-id: svn://ultimatepp.org/upp/trunk@1840 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
koldo 2009-12-25 21:27:05 +00:00
parent 5ba2597156
commit a9e0f791d1
8 changed files with 1827 additions and 927 deletions

View file

@ -29,12 +29,15 @@
#include <time.h>
#include <signal.h>
#include <sys/reboot.h>
//#include <linux/kd.h>
//#include <sys/ioctl.h>
#include <X11/Xlib.h>
#include <X11/Xos.h>
#include <X11/Xfuncs.h>
#include <X11/Xutil.h>
#include <X11/Xatom.h>
#include <X11/extensions/XTest.h>
#endif
using namespace Upp;
@ -818,7 +821,7 @@ void GetWindowsList(Array<long> &hWnd, Array<long> &processId, Array<String> &na
if((ret == Success || ret > 0) && list != NULL) {
String sret;
for(i = 0; i < count; i++)
sret << list[i] << " ";
sret << list[i]; // << " ";
XFreeStringList(list);
caption.Add(FromSystemCharset(sret));
} else
@ -933,6 +936,7 @@ long GetWindowIdFromCaption(String windowCaption, bool exactMatch)
GetWindowsList(wid, pid, name, fileName, caption);
for (int i = 0; i < wid.GetCount(); ++i) {
if (exactMatch) {
String s = caption[i];
if (caption[i] == windowCaption)
return wid[i];
} else {
@ -1903,8 +1907,57 @@ bool CloseCDTray(String drive)
#endif
void Mouse_LeftClick()
{
Mouse_LeftDown();
Mouse_LeftUp();
}
void Mouse_RightClick()
{
Mouse_RightDown();
Mouse_RightUp();
}
void Mouse_MiddleClick()
{
Mouse_MiddleDown();
Mouse_MiddleUp();
}
void Mouse_LeftDblClick()
{
Mouse_LeftClick();
Mouse_LeftClick();
}
void Mouse_MiddleDblClick()
{
Mouse_MiddleClick();
Mouse_MiddleClick();
}
void Mouse_RightDblClick()
{
Mouse_RightClick();
Mouse_RightClick();
}
struct KeyCodes {
String key;
int code;
};
#if defined(PLATFORM_WIN32)
Array <String> GetWinRegSubkeys(const String& key, HKEY base) {
HKEY hkey;
Array <String> subkeys;
if(RegOpenKeyEx(base, key, 0, KEY_READ, &hkey) != ERROR_SUCCESS)
return subkeys;
char temp[_MAX_PATH];
dword len;
for(dword dw = 0; len = sizeof(temp), RegEnumKeyEx(hkey, dw, temp, &len, 0, 0, 0, 0) == ERROR_SUCCESS; dw++)
subkeys.Add(temp);
RegCloseKey(hkey);
return subkeys;
}
void Mouse_LeftDown()
{
mouse_event (MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
@ -1929,36 +1982,6 @@ void Mouse_RightUp()
{
mouse_event (MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);
}
void Mouse_LeftClick()
{
Mouse_LeftDown();
Mouse_LeftUp();
}
void Mouse_MiddleClick()
{
Mouse_MiddleDown();
Mouse_MiddleUp();
}
void Mouse_RightClick()
{
Mouse_RightDown();
Mouse_RightUp();
}
void Mouse_LeftDblClick()
{
Mouse_LeftClick();
Mouse_LeftClick();
}
void Mouse_MiddleDblClick()
{
Mouse_MiddleClick();
Mouse_MiddleClick();
}
void Mouse_RightDblClick()
{
Mouse_RightClick();
Mouse_RightClick();
}
bool PutWindowPlacement(HWND hwnd, RECT rcNormalPosition, POINT ptMinPosition, POINT ptMaxPosition, long showcmd, long flags)
{
@ -2040,11 +2063,6 @@ bool Mouse_GetPos(long &x, long &y)
return true;
}
struct KeyCodes {
String key;
int code;
};
KeyCodes keyCodes[60] = {
"NUMPAD7", VK_NUMPAD7, "BACK", VK_BACK,
"NUMPAD8", VK_NUMPAD8, "TAB", VK_TAB,
@ -2075,17 +2093,52 @@ KeyCodes keyCodes[60] = {
"RCONTROL", VK_RCONTROL, "NUMPAD4", VK_NUMPAD4,
"LMENU", VK_LMENU, "NUMPAD5", VK_NUMPAD5,
"RMENU", VK_RMENU, "NUMPAD6", VK_NUMPAD6,
/*"PGUP", XK_Page_Up, "PGDOWN", XK_Page_Down
"CAPSLOCK", XK_Caps_Lock, "BACKSPACE",XK_BackSpace */
""
};
int GetKeyCode(String key)
{
for (int i = 0; keyCodes[i].code != 0; ++i)
if (keyCodes[i].key == key)
return keyCodes[i].code;
return 0;
void PressKeyVK(int keyVK, bool hold = false, bool release = false, bool compatible = false)
{
long nScan, nExtended;
nScan = MapVirtualKey(keyVK, 2);
nExtended = 0;
if (nScan == 0)
nExtended = KEYEVENTF_EXTENDEDKEY;
nScan = MapVirtualKey(keyVK, 0);
if (compatible)
nExtended = 0;
if (!release)
keybd_event ((BYTE)keyVK, (BYTE)nScan, nExtended, 0);
if (!hold)
keybd_event ((BYTE)keyVK, (BYTE)nScan, KEYEVENTF_KEYUP | nExtended, 0);
}
#if defined(__MINGW32__)
#define MAPVK_VK_TO_VSC 0
#define MAPVK_VSC_TO_VK 1
#define MAPVK_VK_TO_CHAR 2
#define MAPVK_VSC_TO_VK_EX 3
#endif
#define MAPVK_VK_TO_VSC_EX 4
// This is less nice but more compatible for Notepad and MSWord for example
void PressKey(wchar key, bool hold = false, bool release = false)
{
String numStr = FormatIntDec(key, 5, '0');
PressKeyVK(VK_LMENU, true);
PressKeyVK(VK_NUMPAD0 + numStr[0] - '0');
PressKeyVK(VK_NUMPAD0 + numStr[1] - '0');
PressKeyVK(VK_NUMPAD0 + numStr[2] - '0');
PressKeyVK(VK_NUMPAD0 + numStr[3] - '0');
PressKeyVK(VK_NUMPAD0 + numStr[4] - '0');
PressKeyVK(VK_LMENU, false, true);
}
/*
void PressKey(wchar key, bool hold = false, bool release = false)
{
bool caps, num, scroll;
@ -2094,19 +2147,26 @@ void PressKey(wchar key, bool hold = false, bool release = false)
if (caps)
SetKeyLockStatus(false, num, scroll);
}
long nVK = VkKeyScanW(key);
if (nVK == 0)
return;
long nScan, nExtended;
nScan = MapVirtualKey(nVK, 2);
nExtended = 0;
char buff[120];
GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_ILANGUAGE, buff, sizeof(buff));
HKL hKeyboardLayout = ::LoadKeyboardLayout(buff, KLF_ACTIVATE);
SHORT nVK = VkKeyScanExW(key, hKeyboardLayout);
if (nVK == -1) { // Last resource !!
String numStr = FormatIntDec(key, 4, '0');
PressKeyVK(VK_LMENU, true);
PressKeyVK(VK_NUMPAD0 + numStr[0] - '0');
PressKeyVK(VK_NUMPAD0 + numStr[1] - '0');
PressKeyVK(VK_NUMPAD0 + numStr[2] - '0');
PressKeyVK(VK_NUMPAD0 + numStr[3] - '0');
PressKeyVK(VK_LMENU, false, true);
return;
}
UINT nScan = MapVirtualKeyExW(nVK, MAPVK_VK_TO_CHAR, hKeyboardLayout);
long nExtended = 0;
if (nScan == 0)
nExtended = KEYEVENTF_EXTENDEDKEY;
nScan = MapVirtualKey(nVK, 0);
nScan = MapVirtualKeyExW(nVK, MAPVK_VK_TO_VSC, hKeyboardLayout);
bool shift, ctrl, alt;
@ -2138,66 +2198,16 @@ void PressKey(wchar key, bool hold = false, bool release = false)
if (IsLetter(key) && caps)
SetKeyLockStatus(true, num, scroll);
}
void PressKeyVK(int keyVK, bool hold = false, bool release = false, bool compatible = false)
{
long nScan, nExtended;
nScan = MapVirtualKey(keyVK, 2);
nExtended = 0;
if (nScan == 0)
nExtended = KEYEVENTF_EXTENDEDKEY;
nScan = MapVirtualKey(keyVK, 0);
if (compatible)
nExtended = 0;
if (!release)
keybd_event ((BYTE)keyVK, (BYTE)nScan, nExtended, 0);
if (!hold)
keybd_event ((BYTE)keyVK, (BYTE)nScan, KEYEVENTF_KEYUP | nExtended, 0);
}
*/
void Keyb_SendKeys(String text, long finalDelay, long delayBetweenKeys)
{
bool inKey = false;
String key = "";
WString wtext(text);
for (int i = 0; i < text.GetCount(); ++i) {
bool vk = false;
Sleep(delayBetweenKeys);
wchar c = wtext[i];
if (c == '{')
inKey = true;
else if (c == '}') {
if (key == "{")
c = '{';
else {
c = GetKeyCode(key);
vk = true;
}
inKey = false;
key = "";
} else if (inKey == 1)
key.Cat(c);
if (inKey == false) {
if (!vk)
PressKey(c);
else
PressKeyVK(c);
}
}
Sleep(finalDelay);
}
void GetKeyLockStatus(bool &caps, bool &num, bool &scroll)
bool GetKeyLockStatus(bool &caps, bool &num, bool &scroll)
{
caps = GetKeyState(VK_CAPITAL);
num = GetKeyState(VK_NUMLOCK);
scroll = GetKeyState(VK_SCROLL);
return true;
}
void SetKeyLockStatus(bool caps, bool num, bool scroll)
bool SetKeyLockStatus(bool caps, bool num, bool scroll)
{
bool capsnow, numnow, scrollnow;
@ -2208,6 +2218,7 @@ void SetKeyLockStatus(bool caps, bool num, bool scroll)
PressKeyVK(VK_NUMLOCK);
if (scrollnow != scroll)
PressKeyVK(VK_SCROLL);
return true;
}
#if defined(__MINGW32__)
@ -2650,7 +2661,7 @@ bool Window_GetRect(long windowId, long &left, long &top, long &right, long &bot
}
// Window child;
// if (XTranslateCoordinates (dpy, windowId, rt, 0, 0, &rx, &ry, &child))
// printf (" +%d+%d", rx - bw, ry - bw);
// printf ("%d %d", rx - bw, ry - bw);
XCloseDisplay (dpy);
SetX11ErrorHandler();
@ -2706,6 +2717,149 @@ bool Mouse_SetPos(long x, long y, long windowId)
return true;
}
// libxtst-dev
void Mouse_FakeClick(int button, int press) {
Display *dpy = XOpenDisplay(NULL);
XTestFakeButtonEvent(dpy, button, press, CurrentTime);
XFlush(dpy);
XCloseDisplay(dpy);
}
void Mouse_LeftDown() {
Mouse_FakeClick(1, True);
}
void Mouse_LeftUp() {
Mouse_FakeClick(1, False);
}
void Mouse_MiddleDown() {
Mouse_FakeClick(2, True);
}
void Mouse_MiddleUp() {
Mouse_FakeClick(2, False);
}
void Mouse_RightDown() {
Mouse_FakeClick(3, True);
}
void Mouse_RightUp() {
Mouse_FakeClick(3, False);
}
void PressKeyVK(int key, Display *dpy = NULL) {
bool local = false;
if (!dpy) {
if (!(dpy = XOpenDisplay(NULL)))
return;
local = true;
}
XTestFakeKeyEvent(dpy, XKeysymToKeycode(dpy, key), True, CurrentTime);
XTestFakeKeyEvent(dpy, XKeysymToKeycode(dpy, key), False, CurrentTime);
if (local) {
XFlush(dpy);
XCloseDisplay(dpy);
}
}
void PressKey(wchar key, Display *dpy = NULL) {
bool local = false;
if (!dpy) {
if (!(dpy = XOpenDisplay(NULL)))
return;
local = true;
}
wchar k = key;
if (key > 0x00ff)
key = key | 0x01000000;
bool shift = false;
KeyCode code = XKeysymToKeycode(dpy, key);
if (code != 0) {
if (XKeycodeToKeysym(dpy, code, 0) != key) {
if (XKeycodeToKeysym(dpy, code, 1) == key)
shift = true;
else
code = 0;
}
} else {
int firstKeycode, maxKeycode;
int keysymsPerKeycode;
XDisplayKeycodes(dpy, &firstKeycode, &maxKeycode);
KeySym *keysyms = XGetKeyboardMapping(dpy, firstKeycode, maxKeycode-firstKeycode+1, &keysymsPerKeycode);
int indx = (maxKeycode-firstKeycode-1)*keysymsPerKeycode;
keysyms[indx] = key;
XChangeKeyboardMapping(dpy, firstKeycode, keysymsPerKeycode, keysyms, maxKeycode-firstKeycode);
XSync(dpy, False);
code = maxKeycode-1;
if (XKeycodeToKeysym(dpy, code, 0) != key) {
if (XKeycodeToKeysym(dpy, code, 1) == key)
shift = true;
}
}
if (code != 0) {
if (shift)
XTestFakeKeyEvent(dpy, XKeysymToKeycode(dpy, XK_Shift_L), True, CurrentTime);
XTestFakeKeyEvent(dpy, code, True, CurrentTime);
XTestFakeKeyEvent(dpy, code, False, CurrentTime);
if (shift)
XTestFakeKeyEvent(dpy, XKeysymToKeycode(dpy, XK_Shift_L), False, CurrentTime);
}
if (local) {
XFlush(dpy);
XCloseDisplay(dpy);
}
}
bool GetKeyLockStatus0(bool &caps, bool &num, bool &scroll, Display *dpy) {
int x, y, xx, yy;
Window dm1, dm2;
unsigned int sKbdState;
if(!XQueryPointer(dpy, DefaultRootWindow(dpy), &dm1, &dm2, &x, &y, &xx, &yy, &sKbdState))
return false;
caps = sKbdState & LockMask;
num = sKbdState & Mod2Mask;
scroll = sKbdState & Mod5Mask;
return true;
}
bool GetKeyLockStatus(bool &caps, bool &num, bool &scroll) {
Display *dpy;
if (!(dpy = XOpenDisplay(NULL)))
return false;
if (!GetKeyLockStatus0(caps, num, scroll, dpy)) {
XCloseDisplay(dpy);
return false;
}
XFlush(dpy);
XCloseDisplay(dpy);
return true;
}
bool SetKeyLockStatus(bool caps, bool num, bool scroll) {
Display *dpy;
if (!(dpy = XOpenDisplay(NULL)))
return false;
bool oldcaps, oldnum, oldscroll;
if (!GetKeyLockStatus0(oldcaps, oldnum, oldscroll, dpy)) {
XCloseDisplay(dpy);
return false;
}
if (caps != oldcaps)
PressKeyVK(XK_Caps_Lock, dpy);
if (num != oldnum)
PressKeyVK(XK_Num_Lock, dpy);
if (scroll != oldscroll)
PressKeyVK(XK_Scroll_Lock, dpy);
XFlush(dpy);
XCloseDisplay(dpy);
return true;
}
bool Window_SaveCapture(long windowId, String fileName, int left, int top, int width, int height)
{
if (GetFileExt(fileName) != ".xwd")
@ -2721,8 +2875,86 @@ bool Window_SaveCapture(long windowId, String fileName, int left, int top, int w
return Sys(command, strret) >= 0;
}
KeyCodes keyCodes[] = {
"NUMPAD7", XK_KP_7, "BACK", XK_BackSpace,
"NUMPAD8", XK_KP_8, "TAB", XK_Tab,
"NUMPAD9", XK_KP_9, "RETURN", XK_Return,
"MULTIPLY", XK_KP_Multiply, "SHIFT", XK_Shift_Lock,
"ADD", XK_KP_Add, "CONTROL", XK_Control_L,
"SEPARATOR", XK_KP_Separator,"MENU", XK_Super_L,
"SUBTRACT", XK_KP_Subtract, "PAUSE", XK_Pause,
"DECIMAL", XK_KP_Decimal, /*"CAPITAL", VK_CAPITAL,*/
"DIVIDE", XK_KP_Divide, "ESCAPE", XK_Escape,
"F1", XK_F1, "SPACE", XK_KP_Space,
"F2", XK_F2, "END", XK_End,
"F3", XK_F3, "HOME", XK_Home,
"F4", XK_F4, "LEFT", XK_Left,
"F5", XK_F5, "UP", XK_Up,
"F6", XK_F6, "RIGHT", XK_Right,
"F7", XK_F7, "DOWN", XK_Down,
"F8", XK_F8, "PRINT", XK_Sys_Req,
"F9", XK_F9, /*"SNAPSHOT", VK_SNAPSHOT,*/
"F10", XK_F10, "INSERT", XK_Insert,
"F11", XK_F11, "DELETE", XK_Delete,
"F12", XK_F12, "LWIN", XK_Meta_L,
"NUMLOCK", XK_Num_Lock, "RWIN", XK_Meta_R,
"SCROLL", XK_Scroll_Lock, "NUMPAD0", XK_KP_0,
"LSHIFT", XK_Shift_L, "NUMPAD1", XK_KP_1,
"RSHIFT", XK_Shift_R, "NUMPAD2", XK_KP_2,
"LCONTROL", XK_Control_L, "NUMPAD3", XK_KP_3,
"RCONTROL", XK_Control_R, "NUMPAD4", XK_KP_4,
"LMENU", XK_Super_L, "NUMPAD5", XK_KP_5,
"RMENU", XK_Super_R, "NUMPAD6", XK_KP_6,
"PGUP", XK_Page_Up, "PGDOWN", XK_Page_Down,
"CAPSLOCK", XK_Caps_Lock, "BACKSPACE",XK_BackSpace,
""
};
#endif
int GetKeyCode(String key) {
for (int i = 0; keyCodes[i].code != 0; ++i)
if (keyCodes[i].key == key)
return keyCodes[i].code;
return 0;
}
void Keyb_SendKeys(String text, long finalDelay, long delayBetweenKeys)
{
bool inKey = false;
String key = "";
WString wtext(text);
for (int i = 0; i < wtext.GetCount(); ++i) {
bool vk = false;
Sleep(delayBetweenKeys);
wchar c = wtext[i];
if (c == '{')
inKey = true;
else if (c == '}') {
if (key == "{")
c = '{';
else {
c = GetKeyCode(key);
vk = true;
}
inKey = false;
key = "";
} else if (inKey == 1)
key.Cat(c);
else if (c == '\n') {
c = GetKeyCode("RETURN");
vk = true;
}
if (inKey == false) {
if (!vk)
PressKey(c);
else
PressKeyVK(c);
}
}
Sleep(finalDelay);
}
bool Snap_Desktop(String fileName)
{
return Window_SaveCapture(0, fileName);

View file

@ -1,151 +1,152 @@
#ifndef _SysInfo_SysInfo_h
#define _SysInfo_SysInfo_h
#include "Functions4U/Functions4U.h"
using namespace Upp;
// Open the file with the adecuated program defined in the OS by default
bool LaunchFile(const String file);
/////////////////////////////////////////////////////////////////////
// Processor Info
void GetSystemInfo(String &manufacturer, String &productName, String &version, int &numberOfProcessors);
void GetBiosInfo(String &biosVersion, Date &biosReleaseDate);
bool GetProcessorInfo(int number, String &vendor, String &identifier, String &architecture, int &speed);
// Gets the real CPU speed in MHz
int GetCpuSpeed();
#if defined(PLATFORM_WIN32)
bool GetVideoInfo(Array <Value> &name, Array <Value> &description, Array <Value> &videoProcessor,
Array <Value> &ram, Array <Value> &videoMode);
bool GetPackagesInfo(Array <Value> &name, Array <Value> &version, Array <Value> &vendor,
Array <Value> &installDate, Array <Value> &caption, Array <Value> &description, Array <Value> &state);
#endif
/////////////////////////////////////////////////////////////////////
// Memory Info
bool GetMemoryInfo(int &memoryLoad, uint64 &totalPhys, uint64 &freePhys, uint64 &totalPageFile, uint64 &freePageFile, uint64 &totalVirtual, uint64 &freeVirtual);
/////////////////////////////////////////////////////////////////////
// Windows list
// They get arrays with handles to all the opened windows with additional info as
// pid: Handle to the process that manages the window
// name: Window name
// fileName: Window process program file name
// title: Window title (caption)
void GetWindowsList(Array<long> &wid, Array<long> &pid, Array<String> &name, Array<String> &fileName, Array<String> &title);
Array<long> GetWindowsList();
/////////////////////////////////////////////////////////////////////
// Process list
// They get arrays with handles to all the opened processes and process names
bool GetProcessList(Array<long> &pid, Array<String> &pNames);
Array<long> GetProcessList();
String GetProcessName(long pid);
// Gets the program file name of a process
String GetProcessFileName(long processID);
// Gets the process id of a program with a window with certain title
long GetProcessIdFromWindowCaption(String windowCaption, bool exactMatch = false);
long GetWindowIdFromCaption(String windowCaption, bool exactMatch = false);
long GetProcessIdFromWindowId(long wid);
long GetWindowIdFromProcessId(long pid);
// Ends a process by any means
bool ProcessTerminate(long pid, int timeout = 500);
// Gets the process priority as a number from 0 (minimum) to 10 (maximum)
int GetProcessPriority(long pid);
bool SetProcessPriority(long pid, int priority);
// True if a process with handle pid exists
bool ProcessExists(long pid);
/////////////////////////////////////////////////////////////////////
// Os Info
bool GetOsInfo(String &kernel, String &kerVersion, String &kerArchitecture, String &distro, String &distVersion, String &desktop, String &deskVersion);
String GetDesktopManagerNew();
/////////////////////////////////////////////////////////////////////
// Drives list
// Get the dirve path list
Array<String> GetDriveList();
// Get drives info
// Return false if drive is not mounted or it is not accesible
bool GetDriveSpace(String drive, uint64 &freeBytesUser, uint64 &totalBytesUser, uint64 &totalFreeBytes);
bool GetDriveInformation(String drive, String &type, String &volume, /*uint64 &serial, */int &maxName, String &fileSystem);
/////////////////////////////////////////////////////////////////////
// Others
// Gets process id
long GetProcessId();
// I tries to "logoff", "reboot" or "shutdown"
bool Shutdown(String action);
// It gets compiler info
void GetCompilerInfo(String &name, int &version, String &date);
// It gets info about the battery status
bool GetBatteryStatus(bool &discharging, int &percentage, int &remainingMin);
// Get if there is battery
bool GetBatteryInfo(bool &present/*, int &designCapacity, int &lastFullCapacity, String &vendor, String &type, String &model, String &serial*/);
bool OpenCDTray(String drive);
bool CloseCDTray(String drive);
/////////////////////////////////////////////////////////////////////
// Key and mouse keys
bool Window_GetRect(long windowId, long &left, long &top, long &right, long &bottom);
void Window_SetRect(long windowId, long left, long top, long right, long bottom);
bool Mouse_GetPos(long &x, long &y);
bool Mouse_SetPos(long x, long y, long windowId);
bool Window_SaveCapture(long windowId, String fileName, int left = -1, int top = -1, int width = -1, int height = -1);
bool Snap_Desktop(String fileName);
bool Snap_DesktopRectangle(String fileName, int left, int top, int width, int height);
bool Snap_Window(String fileName, long handle);
#if defined(PLATFORM_WIN32)
void Mouse_LeftClick();
void Mouse_MiddleClick();
void Mouse_RightClick();
void Mouse_LeftDblClick();
void Mouse_MiddleDblClick();
void Mouse_RightDblClick();
void Mouse_LeftDown();
void Mouse_LeftUp();
void Mouse_RightDown();
void Mouse_RightUp();
void Mouse_MiddleDown();
void Mouse_MiddleUp();
void Keyb_SendKeys(String text, long finalDelay = 100, long delayBetweenKeys = 50);
void GetKeyLockStatus(bool &caps, bool &num, bool &scroll);
void SetKeyLockStatus(bool caps, bool num, bool scroll);
bool Record_Desktop(String fileName, int duration, int secsFrame = 1, bool viewMouse = true);
bool Record_DesktopRectangle(String fileName, int duration, int left, int top, int width, int height, int secsFrame = 1, bool viewMouse = true);
bool Record_Window(String fileName, int duration, long handle, int secsFrame = 1, bool viewMouse = true);
#endif
void SetDesktopWallPaper(const char *path);
#endif
// Known bugs
// GetWindowsList does not get the window title in Kde
// Shutdown in Linux only works with option "logoff", probably because of user permissions
#ifndef _SysInfo_SysInfo_h
#define _SysInfo_SysInfo_h
#include "Functions4U/Functions4U.h"
using namespace Upp;
// Open the file with the adecuated program defined in the OS by default
bool LaunchFile(const String file);
/////////////////////////////////////////////////////////////////////
// Processor Info
void GetSystemInfo(String &manufacturer, String &productName, String &version, int &numberOfProcessors);
void GetBiosInfo(String &biosVersion, Date &biosReleaseDate);
bool GetProcessorInfo(int number, String &vendor, String &identifier, String &architecture, int &speed);
// Gets the real CPU speed in MHz
int GetCpuSpeed();
#if defined(PLATFORM_WIN32)
bool GetVideoInfo(Array <Value> &name, Array <Value> &description, Array <Value> &videoProcessor,
Array <Value> &ram, Array <Value> &videoMode);
bool GetPackagesInfo(Array <Value> &name, Array <Value> &version, Array <Value> &vendor,
Array <Value> &installDate, Array <Value> &caption, Array <Value> &description, Array <Value> &state);
#endif
/////////////////////////////////////////////////////////////////////
// Memory Info
bool GetMemoryInfo(int &memoryLoad, uint64 &totalPhys, uint64 &freePhys, uint64 &totalPageFile, uint64 &freePageFile, uint64 &totalVirtual, uint64 &freeVirtual);
/////////////////////////////////////////////////////////////////////
// Windows list
// They get arrays with handles to all the opened windows with additional info as
// pid: Handle to the process that manages the window
// name: Window name
// fileName: Window process program file name
// title: Window title (caption)
void GetWindowsList(Array<long> &wid, Array<long> &pid, Array<String> &name, Array<String> &fileName, Array<String> &title);
Array<long> GetWindowsList();
/////////////////////////////////////////////////////////////////////
// Process list
// They get arrays with handles to all the opened processes and process names
bool GetProcessList(Array<long> &pid, Array<String> &pNames);
Array<long> GetProcessList();
String GetProcessName(long pid);
// Gets the program file name of a process
String GetProcessFileName(long processID);
// Gets the process id of a program with a window with certain title
long GetProcessIdFromWindowCaption(String windowCaption, bool exactMatch = false);
long GetWindowIdFromCaption(String windowCaption, bool exactMatch = false);
long GetProcessIdFromWindowId(long wid);
long GetWindowIdFromProcessId(long pid);
// Ends a process by any means
bool ProcessTerminate(long pid, int timeout = 500);
// Gets the process priority as a number from 0 (minimum) to 10 (maximum)
int GetProcessPriority(long pid);
bool SetProcessPriority(long pid, int priority);
// True if a process with handle pid exists
bool ProcessExists(long pid);
/////////////////////////////////////////////////////////////////////
// Os Info
bool GetOsInfo(String &kernel, String &kerVersion, String &kerArchitecture, String &distro, String &distVersion, String &desktop, String &deskVersion);
String GetDesktopManagerNew();
/////////////////////////////////////////////////////////////////////
// Drives list
// Get the dirve path list
Array<String> GetDriveList();
// Get drives info
// Return false if drive is not mounted or it is not accesible
bool GetDriveSpace(String drive, uint64 &freeBytesUser, uint64 &totalBytesUser, uint64 &totalFreeBytes);
bool GetDriveInformation(String drive, String &type, String &volume, /*uint64 &serial, */int &maxName, String &fileSystem);
/////////////////////////////////////////////////////////////////////
// Others
// Gets process id
long GetProcessId();
// I tries to "logoff", "reboot" or "shutdown"
bool Shutdown(String action);
// It gets compiler info
void GetCompilerInfo(String &name, int &version, String &date);
// It gets info about the battery status
bool GetBatteryStatus(bool &discharging, int &percentage, int &remainingMin);
// Get if there is battery
bool GetBatteryInfo(bool &present/*, int &designCapacity, int &lastFullCapacity, String &vendor, String &type, String &model, String &serial*/);
bool OpenCDTray(String drive);
bool CloseCDTray(String drive);
/////////////////////////////////////////////////////////////////////
// Key and mouse keys
bool Window_GetRect(long windowId, long &left, long &top, long &right, long &bottom);
bool Mouse_GetPos(long &x, long &y);
bool Mouse_SetPos(long x, long y, long windowId);
void Mouse_LeftClick();
void Mouse_LeftDown();
void Mouse_LeftUp();
void Mouse_MiddleClick();
void Mouse_MiddleDown();
void Mouse_MiddleUp();
void Mouse_RightClick();
void Mouse_RightDown();
void Mouse_RightUp();
void Mouse_LeftDblClick();
void Mouse_MiddleDblClick();
void Mouse_RightDblClick();
void Keyb_SendKeys(String text, long finalDelay = 100, long delayBetweenKeys = 50);
bool Window_SaveCapture(long windowId, String fileName, int left = -1, int top = -1, int width = -1, int height = -1);
bool Snap_Desktop(String fileName);
bool Snap_DesktopRectangle(String fileName, int left, int top, int width, int height);
bool Snap_Window(String fileName, long handle);
bool GetKeyLockStatus(bool &caps, bool &num, bool &scroll);
bool SetKeyLockStatus(bool caps, bool num, bool scroll);
#if defined(PLATFORM_WIN32)
void Window_SetRect(long windowId, long left, long top, long right, long bottom);
bool Record_Desktop(String fileName, int duration, int secsFrame = 1, bool viewMouse = true);
bool Record_DesktopRectangle(String fileName, int duration, int left, int top, int width, int height, int secsFrame = 1, bool viewMouse = true);
bool Record_Window(String fileName, int duration, long handle, int secsFrame = 1, bool viewMouse = true);
#endif
void SetDesktopWallPaper(const char *path);
#endif
// Known bugs
// GetWindowsList does not get the window title in Kde
// Shutdown in Linux only works with option "logoff", probably because of user permissions

View file

@ -1,14 +1,12 @@
description "OS, hardware and Desktop handling functions\377B255,170,0";
noblitz;
uses
Core,
Functions4U;
library(WIN32) "psapi gdi32 vfw32 oleaut32 wbemuuid";
library(!WIN32) X11;
library(!WIN32) "Xtst X11 ";
file
SysInfo.cpp,

View file

@ -415,13 +415,13 @@ text keys.&]
[@(0.0.255) bool]_`&[*@3 caps], [@(0.0.255) bool]_`&[*@3 num], [@(0.0.255) bool]_`&[*@3 scrol
l])&]
[s2; Gets the status of keys [%-*@3 caps ]lock, [%-*@3 num ]lock and
[%-*@3 scroll] [%-*@3 ]lock.&]
[%-*@3 scroll] [%-*@3 ]lock. Not fully functional in Linux.&]
[s3; &]
[s4;%- &]
[s5;:SetKeyLockStatus`(bool`,bool`,bool`):%- [@(0.0.255) void]_[* SetKeyLockStatus]([@(0.0.255) b
ool]_[*@3 caps], [@(0.0.255) bool]_[*@3 num], [@(0.0.255) bool]_[*@3 scroll])&]
[s2; Sets the status of keys [%-*@3 caps ]lock, [%-*@3 num ]lock and
[%-*@3 scroll] [%-*@3 ]lock.&]
[%-*@3 scroll] [%-*@3 ]lock. Not fully functional in Linux.&]
[s3; &]
[ {{10000@1 [s0; [* Screen recording]]}}&]
[s3; &]

View file

@ -5,6 +5,9 @@ topic "News and changes log";
[s0; [*R6 SysInfo. News and changes log]&]
[s0;2 &]
[s0;2 &]
[s0; [2 2009/12/23-|Improved international support in Keyb`_SendKeys()]&]
[s0; [2 2009/12/16-|Keyb`_SendKeys(), `*KeyLockStatus() and Mouse`_`*()
supported in Linux]&]
[s0; [2 2009/12/12-|LoadFile`_Safe fixed bug... I forgot to move it
to Functions4U]&]
[s0; [2 2009/12/11-|Keyb`_SendKeys and Snap`_`* functions in Windows

View file

@ -1,5 +1,5 @@
TITLE("News and changes log")
COMPRESSED
120,156,133,145,91,107,2,49,16,133,255,202,64,47,180,210,213,36,187,222,159,122,179,72,139,133,174,82,232,178,104,220,204,174,65,77,22,179,106,165,246,191,55,177,8,150,74,27,2,153,135,156,51,223,153,137,224,244,148,92,145,19,242,207,105,221,97,202,151,179,34,142,120,195,111,151,94,106,86,71,173,206,167,62,37,180,198,130,122,192,136,79,88,64,89,149,54,26,1,173,87,27,126,179,86,107,37,60,47,164,86,113,244,49,252,60,187,239,121,131,16,34,67,218,16,57,143,112,99,186,42,213,101,232,225,218,0,87,2,146,9,87,25,26,152,233,44,62,143,221,79,6,63,95,136,24,48,66,154,21,202,236,245,182,79,154,139,142,156,225,104,24,242,20,33,149,239,40,96,188,204,202,229,50,116,33,213,139,76,23,80,104,152,235,21,130,220,149,157,165,74,28,148,9,6,241,17,83,234,109,31,113,51,182,134,168,132,173,190,201,66,197,243,209,112,84,130,116,175,6,169,224,85,42,161,45,187,210,107,48,203,60,215,139,2,6,74,38,90,56,148,25,130,226,115,52,
71,186,16,139,30,234,57,30,216,57,66,225,248,20,174,33,231,201,148,103,248,39,43,173,48,235,226,194,247,117,127,193,205,228,70,170,139,203,22,116,118,51,40,236,40,167,198,249,189,141,55,201,228,136,154,4,222,246,1,139,231,221,18,156,240,90,8,43,220,231,176,202,125,188,16,87,168,126,57,144,10,243,189,237,237,2,121,177,235,39,15,247,6,241,23,202,131,183,100,
120,156,133,82,109,79,219,48,16,254,43,39,141,77,80,145,214,118,66,40,229,211,222,58,85,20,144,8,213,36,162,168,117,147,75,106,53,177,163,216,161,84,116,255,125,118,180,78,12,170,225,47,62,91,126,222,206,23,195,209,17,57,37,31,200,59,107,244,13,115,222,150,38,137,249,208,191,236,221,133,22,71,45,206,167,62,37,52,100,193,121,192,136,79,88,64,217,25,29,14,3,122,126,54,244,47,194,112,148,242,218,8,37,147,248,121,254,235,227,247,27,111,22,65,172,201,37,196,142,35,218,234,137,204,85,31,110,112,163,129,203,12,210,21,151,5,106,40,85,145,124,74,220,75,6,255,238,16,51,96,132,92,12,40,27,48,223,219,77,170,186,81,143,152,129,144,6,27,201,157,26,47,65,183,117,173,26,99,111,225,10,183,203,197,60,66,153,217,74,31,159,36,111,137,104,232,237,94,63,59,133,69,207,86,83,149,174,35,195,77,107,175,58,139,215,170,213,184,152,47,122,246,252,71,165,83,135,169,144,237,211,33,114,230,237,166,138,103,99,81,90,92,196,115,132,92,
60,89,204,178,45,250,253,62,76,32,87,77,161,12,24,5,149,141,2,162,43,199,173,76,93,24,29,204,14,145,210,215,142,59,115,145,228,181,243,6,249,30,237,156,253,20,50,83,182,195,82,109,254,54,102,38,69,170,50,103,165,68,144,188,66,125,64,133,88,235,145,170,240,5,93,213,53,219,250,147,184,129,154,167,107,94,224,127,189,210,1,179,44,46,252,189,186,111,184,94,125,17,242,248,100,4,227,174,7,198,126,248,90,59,190,135,229,54,93,29,64,147,192,219,253,64,115,219,141,138,3,126,206,50,11,220,231,176,200,125,188,8,31,81,190,97,32,221,152,124,109,144,155,78,79,188,156,46,72,126,3,201,165,237,186,

View file

@ -12,7 +12,7 @@ are some screenshots of the different tabs:]&]
[s0; [2 It includes general hardware, hard disk and OS info.]&]
[s0;2 &]
[s0; [2
@@image:3084&2359
@@image:3678&2811
ǐ<EFBFBD>_<EFBFBD>
<EFBFBD>Й<EFBFBD>
<EFBFBD>竿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǐ<EFBFBD><EFBFBD><EFBFBD>
@ -571,7 +571,7 @@ are some screenshots of the different tabs:]&]
that launched the window.]&]
[s0;2 &]
[s0; [2
@@image:3084&2359
@@image:3682&2821
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>西<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>
@ -1380,7 +1380,7 @@ that launched the window.]&]
[s0; [2 This is the list of processes with priority (if available).]&]
[s0;2 &]
[s0; [2
@@image:3084&2359
@@image:3682&2816
絿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>И<EFBFBD><EFBFBD>
ы<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
@ -1886,7 +1886,7 @@ Windows).]&]
it is necessary to press bottom left button.]&]
[s0;2 &]
[s0; [2
@@image:3084&2184
@@image:3682&2603
絿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>б<EFBFBD><EFBFBD>
<EFBFBD>西<EFBFBD><EFBFBD>
@ -2713,7 +2713,7 @@ that is all.]&]
press `"Snap it!`"]&]
[s0;2 &]
[s0; [2
@@image:2189&1356
@@image:2342&1447
<EFBFBD>絿<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>
@ -3005,4 +3005,532 @@ press `"Snap it!`"]&]
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>
]&]
[s0; &]
[s0; &]
[s0;i150;O0; [2 Mouse `& Keyboard]&]
[s0;2 &]
[s0; [2 These functions let to simulate mouse movement and clicks,
and inject text including international languages.]&]
[s0;2 &]
[s0;l288;i150;O1; [2 Get/SetKeylockStatus() buttons show the key lock
status and permit to change it by clicking]&]
[s0;l288;i150;O1; [2 Keyb`_SendKeys() inject keystrokes to text editor]&]
[s0;l288;i150;O1; [2 Mouse`_SetPos, LeftDown/Up() moves the program
window by simulating mouse drag on the window header]&]
[s0;l288;i150;O1; [2 RemoveAccents() changes the accented letters with
the most approximate ascii characters.]&]
[s0;2 &]
[s0;
@@image:3745&2013
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ш<EFBFBD>
л<EFBFBD>¨Η<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>浿
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>潿<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>
Н<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
尿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>ǐ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>羿<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>鷿<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
К<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>ζ<EFBFBD><EFBFBD>Ъ<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
вě<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>尿<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>椿<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>±<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>Ы<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD><EFBFBD>
<EFBFBD>彿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>т<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>фт徿<EFBFBD><EFBFBD>
<EFBFBD>К<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>
<EFBFBD><EFBFBD>ó<EFBFBD><EFBFBD>鲿<EFBFBD><EFBFBD><EFBFBD>尿<EFBFBD><EFBFBD>便
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>Κ涿<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
退<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Ю<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>В詿т<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
沿<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>я<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>а<EFBFBD><EFBFBD><EFBFBD>尿<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>髿
<EFBFBD><EFBFBD><EFBFBD>¤<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>寿<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ш<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>怀<EFBFBD><EFBFBD><EFBFBD><EFBFBD>°尿
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD><EFBFBD>
謿<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>耀<EFBFBD><EFBFBD><EFBFBD>退
<EFBFBD><EFBFBD>ΜЛ<EFBFBD>
<EFBFBD><EFBFBD>ǎ<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>巿
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>ń
<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD><EFBFBD><EFBFBD>
Е<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>ω<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ο<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>ǘ<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
婿
<EFBFBD><EFBFBD>Ч
ǘ<EFBFBD>·<EFBFBD>÷
<EFBFBD><EFBFBD><EFBFBD>ё<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>
ě<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ā
<EFBFBD><EFBFBD>
鷿<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD>
<EFBFBD>渿<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ó<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>輿<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>泿祿
<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Η<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>榿<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>Ь<EFBFBD><EFBFBD><EFBFBD>
κ<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>ǎ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>稿Ι<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>ǚ<EFBFBD>Ы
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ъ窿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
妿<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>
б<EFBFBD><EFBFBD>
<EFBFBD>騿<EFBFBD><EFBFBD>θ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
樿广<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>ω<EFBFBD>
<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>廿<EFBFBD><EFBFBD>
<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>ì<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Ρ<EFBFBD>Э<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>ш<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>Ц<EFBFBD>ъ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>访<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>з<EFBFBD>т<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ы<EFBFBD>
潿<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>ча<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>Т<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>賿<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>
椿<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǜ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>鹿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
аφ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ё
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>
Π<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>访ê<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Э<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>
齿<EFBFBD><EFBFBD><EFBFBD>ψ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ш<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>簿
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>σ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>ψ<EFBFBD><EFBFBD>ó<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
尿<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ρ<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>ǚ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
崿<EFBFBD><EFBFBD><EFBFBD>Ε<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>Κ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>娿<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Η<EFBFBD><EFBFBD>
<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
騿<EFBFBD><EFBFBD>鴿<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>宿
<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>广<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>饿<EFBFBD>ш
<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>ū<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>渿Ё<EFBFBD>
<EFBFBD>妿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>
湿<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>西<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ю<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>媿<EFBFBD><EFBFBD>
с姿<EFBFBD><EFBFBD><EFBFBD>
驿<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>簿<EFBFBD><EFBFBD>
<EFBFBD>ù
<EFBFBD><EFBFBD><EFBFBD>
簿<EFBFBD><EFBFBD>
<EFBFBD>ń<EFBFBD><EFBFBD><EFBFBD>
騿<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
у<EFBFBD><EFBFBD>А<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>Т<EFBFBD><EFBFBD><EFBFBD>ǹ<EFBFBD><EFBFBD><EFBFBD>
岿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>
<EFBFBD>缿ˇ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ń<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>溿<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>宿<EFBFBD>
<EFBFBD><EFBFBD>椿<EFBFBD>ψ<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>Ц<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
詿
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>窿<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>騿<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>鮿ζ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǜ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>ê<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>祿<EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>羿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>访<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>т<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>髿
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>é<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>зу
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>椿<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>
ˉ<EFBFBD><EFBFBD>é<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>鸿鷿<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>Ξ鷿稿<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>ь
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>о<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>廿<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>ωЫ<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
鷿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>π<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>寿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>鷿<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>ω<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>徿ζ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>使<EFBFBD>岿<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>嫿<EFBFBD>Э<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>祿й<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>怀<EFBFBD><EFBFBD><EFBFBD>庿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>鱿<EFBFBD><EFBFBD>Ι<EFBFBD>
<EFBFBD><EFBFBD>蹿
<EFBFBD>沿Ш宿
Е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>к
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>祿<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>η<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>丿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
П<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>Ь<EFBFBD><EFBFBD><EFBFBD>Б<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>轿<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ε<EFBFBD><EFBFBD><EFBFBD><EFBFBD>詿<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ńΞ<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>ь<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>椿娿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>ü<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>У<EFBFBD><EFBFBD>ê<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>к<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>Ь<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
沿<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ň<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Ι<EFBFBD><EFBFBD><EFBFBD>ì<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Ф<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>э<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>б
<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>κ
<EFBFBD>к<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>ǒ<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>ǐ<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ш沿<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>樿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>缿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ю<EFBFBD>
<EFBFBD><EFBFBD>忿忿<EFBFBD>м<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>т<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ш
髿<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
с<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>ǹ
<EFBFBD><EFBFBD><EFBFBD>ю<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD>
<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
贿<EFBFBD><EFBFBD>в<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>Г<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>忿<EFBFBD>
<EFBFBD>賿<EFBFBD><EFBFBD>稿<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>Г<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>π<EFBFBD>
<EFBFBD>湿<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>ǒ<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ō<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>ù
<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>
<EFBFBD>
<EFBFBD><EFBFBD>
<EFBFBD>°<EFBFBD>
<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>
仿<EFBFBD><EFBFBD>
<EFBFBD>ê<EFBFBD>箿仿
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>Э<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><EFBFBD><EFBFBD>
忿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>仿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>贿
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ы<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ω<EFBFBD><EFBFBD><EFBFBD>
輿<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>л<EFBFBD><EFBFBD><EFBFBD>Τ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ü<EFBFBD>°<EFBFBD><EFBFBD>
<EFBFBD>迿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>ê<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
鱿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
&]
[s0; ]

File diff suppressed because it is too large Load diff