Advertisement
Guest User

Templien V2

a guest
Sep 11th, 2011
180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
AutoIt 14.37 KB | None | 0 0
  1.  
  2. #cs
  3.     BitByteBit
  4.     AlienUDF: http://pastebin.com/i09q5ruP
  5.  
  6.     Array Structure.
  7.  
  8.     [n][0] = Device
  9.     [n][1] = Function
  10.     [n][2] = Range
  11.     [n][3] = Colour
  12.     [n][4] = State
  13.     [n][5] = List Item Handle.
  14.  
  15. #ce
  16. FileInstall('LightFX 64x.dll', 'LightFX 64x.dll')
  17. #include<Array.au3>
  18. #include<guitreeview.au3>
  19. #include<guilistview.au3>
  20. Global $aInfo[4], $hWnd, $hGUI1
  21. Global $hCombo1, $hCombo2, $hCombo3
  22. Global $aControl[1][6]
  23. Global $hCPU1, $hCPU2, $hGPU, $hBat
  24. Global $hCtrl, $hIntel1, $hIntel2, $nVidia, $bChanged = False, $bHwHidden = False, $bSimulate = False, $bHidden = False
  25. Global Const $sStr = StringSplit("Battery|CPU|GPU", "|", 2), $aDev = StringSplit("Keyboard|Left Grill|Right Grill|Logo|Status", "|", 2), $hFile = @ScriptDir & '\Options.ini'
  26. $aControl[0][0] = 0
  27. _StartHWMonitor()
  28. Global $aSettings
  29. OnAutoItExitRegister('_Exit')
  30. Opt("GUIResizeMode", 1)
  31. Opt("GUIOnEventMode", 1)
  32. Opt("TrayIconDebug", 1)
  33. Opt('TrayAutoPause', 0)
  34. Opt('TrayOnEventMode', 1)
  35. Opt('TrayMenuMode', 1)
  36. $HW = TrayCreateItem('Hide HWMonitor')
  37. TrayCreateItem('Exit')
  38. TrayItemSetOnEvent(-1, '_Exit')
  39. TraySetClick(8)
  40. TraySetOnEvent(-7, '_HideMain')
  41. TrayItemSetOnEvent($HW, '_HideHWMonitor')
  42. AdlibRegister('_EnsureOpen', 3000)
  43. AdlibRegister('_ReduceMemory', 10000)
  44. _ReduceMemory()
  45. HotKeySet('!d', '_Debug')
  46. Func _Debug()
  47.     _ArrayDisplay($aControl)
  48. EndFunc   ;==>_Debug
  49. #region GUI
  50. $GUI_EVENT_CLOSE = -3
  51. $hGUI = GUICreate("Templien V2", 436, 325, -1, -1, 0x00040000 + 0x00010000 + 0x00020000)
  52. GUISetOnEvent(-3, '_Exit')
  53. GUISetBkColor(0x1F1F1F)
  54. GUICtrlCreateGroup("", 5, 18, 424, 277)
  55.  
  56. $hDevice = GUICtrlCreateList("", 12, 31, 92, 57)
  57. $hFunction = GUICtrlCreateList("", 12, 88, 92, 57)
  58. $hRange = GUICtrlCreateList("", 12, 145, 92, 57)
  59. $hColour = GUICtrlCreateList("", 12, 202, 92, 57)
  60.  
  61. GUICtrlSetData($hDevice, "Keyboard|Left Grill|Right Grill|Logo|Status")
  62. GUICtrlSetData($hFunction, "CPU|GPU|Battery")
  63. GUICtrlSetData($hColour, "Custom|Blue|Green|Indigo|Red|Orange|Violet|Yellow|White")
  64.  
  65. $List1 = GUICtrlCreateListView("Light                |Function|Range|Colour", 114, 31, 308, 255, 0x0010, 0x00000004 + 0x00000020)
  66.  
  67. $Button1 = GUICtrlCreateButton("Add", 12, 262, 42, 25)
  68. $Button2 = GUICtrlCreateButton("Delete", 62, 262, 42, 25)
  69. GUICtrlSetOnEvent($Button1, '_Save')
  70. GUICtrlSetOnEvent($Button2, '_Delete')
  71.  
  72. For $iTmp = 0 To 90 Step 10
  73.     If $iTmp = 90 Then
  74.         GUICtrlSetData($hRange, $iTmp & " - " & 100)
  75.     Else
  76.         GUICtrlSetData($hRange, $iTmp & " - " & $iTmp + 9)
  77.     EndIf
  78. Next
  79.  
  80. _LoadSettings()
  81. $iTmp = GUICtrlCreateLabel("Loading AlienFX libary.", 162, 5, 112, 15)
  82. GUICtrlSetColor($iTmp, 0xFFFFFF)
  83. GUICtrlSetResizing($iTmp, 768)
  84. GUISetState(@SW_SHOW)
  85.  
  86. #include<AlienUDF.au3>
  87. GUICtrlDelete($iTmp)
  88. $iTmp = GUICtrlCreateLabel("Core 1", 42, 5, 35, 15)
  89. GUICtrlCreateLabel("Core 2", 138, 5, 37, 15)
  90. GUICtrlCreateLabel("GPU", 234, 5, 29, 15)
  91. $hCPU1 = GUICtrlCreateLabel("0c", 82, 5, 30, 15)
  92. $hCPU2 = GUICtrlCreateLabel("0c", 178, 5, 30, 15)
  93. $hGPU = GUICtrlCreateLabel("0", 274, 5, 30, 15)
  94. $hBat = GUICtrlCreateLabel("100%", 370, 5, 30, 15)
  95. For $iTmp = $iTmp To GUICtrlCreateLabel("Battery", 330, 5, 37, 15)
  96.     GUICtrlSetColor($iTmp, 0xFFFFFF)
  97.     GUICtrlSetResizing($iTmp, 768)
  98.     GUICtrlSetOnEvent($iTmp, '_Simulate')
  99. Next
  100. #endregion ### END Koda GUI section ###
  101. While 1
  102.     If Not $bSimulate Then
  103.         $aInfo[0] = _GetBattery()
  104.         $aInfo[1] = Int(_StringBetween1(_GUICtrlTreeView_GetText($hCtrl, $hIntel1), '   ', ' °C  ('))
  105.         $aInfo[2] = Int(_StringBetween1(_GUICtrlTreeView_GetText($hCtrl, $nVidia), '    ', ' °C  ('))
  106.         $aInfo[3] = Int(_StringBetween1(_GUICtrlTreeView_GetText($hCtrl, $hIntel2), '   ', ' °C  ('))
  107.     EndIf
  108. ;~  $aInfo[0] = ControlGetText('Form1', '', 'Static1')
  109. ;~  $aInfo[1] = $aInfo[0]
  110. ;~  $aInfo[2] = $aInfo[0]
  111. ;~  $aInfo[3] = $aInfo[0]
  112.  
  113.     If $aInfo[0] <> GUICtrlRead($hBat) Then GUICtrlSetData($hBat, $aInfo[0])
  114.     If $aInfo[1] <> GUICtrlRead($hCPU1) Then GUICtrlSetData($hCPU1, $aInfo[1])
  115.     If $aInfo[3] <> GUICtrlRead($hCPU2) Then GUICtrlSetData($hCPU2, $aInfo[3])
  116.     If $aInfo[2] <> GUICtrlRead($hGPU) Then GUICtrlSetData($hGPU, $aInfo[2])
  117.  
  118.     _CheckDevice()
  119.  
  120. ;~  $nMsg = GUIGetMsg()
  121. ;~  Switch $nMsg
  122. ;~      Case $GUI_EVENT_CLOSE
  123. ;~          Exit
  124. ;~      Case $Button1
  125. ;~          _Save()
  126. ;~      Case $Button2
  127. ;~          _Delete()
  128. ;~  EndSwitch
  129.     Sleep(500)
  130. WEnd
  131. Func _CheckDevice()
  132.     ;_AlienSetLightColour($iColour = 0xFF0000FF, $iLight = 0, $iLocation = 0)
  133.     ;0 - Keyboard.
  134.     ;1 - Left Grill.
  135.     ;2 - Right Grill.
  136.     ;3 - Logo.
  137.     ;4 - Status.
  138.  
  139.     ;Loop through all rules.
  140.     For $i = 1 To $aControl[0][0]
  141.         Switch $aControl[$i][1]
  142.             Case $sStr[0]
  143.                 $x = 0
  144.             Case $sStr[1]
  145.                 $x = 1
  146.             Case $sStr[2]
  147.                 $x = 2
  148.         EndSwitch
  149.         $aRange = StringSplit($aControl[$i][2], " - ", 1)
  150.         ;If within range.
  151.         If $aInfo[$x] >= $aRange[1] And $aInfo[$x] <= $aRange[2] Then
  152.             ;If already on ignore.
  153.             If $aControl[$i][4] = 'On' Then ContinueLoop
  154.  
  155.             ;Get light device.
  156.             For $iDev = 0 To 4
  157.                 If $aControl[$i][0] = $aDev[$iDev] Then ExitLoop
  158.             Next
  159.             ;Set variable to On.
  160.             $aControl[$i][4] = 'On'
  161.             $bChanged = True
  162.             ;Enable Checkbox.
  163.             GUICtrlSetState($aControl[$i][5], 1)
  164.  
  165.             ;Turn on light.
  166.             _AlienSetLightColour('0xFF' & $aControl[$i][3], $iDev)
  167.  
  168.         ElseIf $aControl[$i][4] = 'On' Then
  169.             GUICtrlSetState($aControl[$i][5], 4)
  170.             $aControl[$i][4] = 'Off'
  171.         EndIf
  172.     Next
  173.     If $bChanged Then
  174.         _AlienUpdate()
  175.         $bChanged = False
  176.         ;ConsoleWrite('Updated.' & @CRLF)
  177.     EndIf
  178. EndFunc   ;==>_CheckDevice
  179. Func _ChooseColor($iReturnType = 2, $iColorRef = 0, $iRefType = 0, $hWndOwnder = 0)
  180.     Local $custcolors = "dword[16]"
  181.  
  182.     Local $tChoose = DllStructCreate("dword Size;hwnd hWndOwnder;handle hInstance;dword rgbResult;ptr CustColors;dword Flags;lparam lCustData;ptr lpfnHook;ptr lpTemplateName")
  183.     Local $tcc = DllStructCreate($custcolors)
  184.  
  185.     If $iRefType = 1 Then ; BGR hex color to colorref
  186.         $iColorRef = Int($iColorRef)
  187.     ElseIf $iRefType = 2 Then ; RGB hex color to colorref
  188.         $iColorRef = Hex(String($iColorRef), 6)
  189.         $iColorRef = '0x' & StringMid($iColorRef, 5, 2) & StringMid($iColorRef, 3, 2) & StringMid($iColorRef, 1, 2)
  190.     EndIf
  191.  
  192.     DllStructSetData($tChoose, "Size", DllStructGetSize($tChoose))
  193.     DllStructSetData($tChoose, "hWndOwnder", $hWndOwnder)
  194.     DllStructSetData($tChoose, "rgbResult", $iColorRef)
  195.     DllStructSetData($tChoose, "CustColors", DllStructGetPtr($tcc))
  196.     DllStructSetData($tChoose, "Flags", BitOR(0x0100, 0x0002, 0x0001))
  197.  
  198.     Local $aResult = DllCall("comdlg32.dll", "bool", "ChooseColor", "ptr", DllStructGetPtr($tChoose))
  199.     If @error Then Return SetError(@error, @extended, -1)
  200.     If $aResult[0] = 0 Then Return SetError(-3, -3, -1) ; user selected cancel or struct settings incorrect
  201.  
  202.     Local $color_picked = DllStructGetData($tChoose, "rgbResult")
  203.  
  204.     If $iReturnType = 1 Then ; return Hex BGR Color
  205.         Return '0x' & Hex(String($color_picked), 6)
  206.     ElseIf $iReturnType = 2 Then ; return Hex RGB Color
  207.         $color_picked = Hex(String($color_picked), 6)
  208.         Return StringMid($color_picked, 5, 2) & StringMid($color_picked, 3, 2) & StringMid($color_picked, 1, 2)
  209.     ElseIf $iReturnType = 0 Then ; return RGB COLORREF
  210.         Return $color_picked
  211.     Else
  212.         Return SetError(-4, -4, -1)
  213.     EndIf
  214. EndFunc   ;==>_ChooseColor
  215. Func _Delete()
  216.     $sCurrent = GUICtrlRead($List1)
  217.     If $sCurrent = 0 Then Return MsgBox(48, 'Error', 'Please select a profile on the right.')
  218.     For $i = 1 To $aControl[0][0]
  219.         If $sCurrent = $aControl[$i][5] Then
  220.             GUICtrlDelete($aControl[$i][5])
  221.             IniDelete($hFile, 'Profiles', $aControl[$i][0] & '|' & $aControl[$i][1] & '|' & $aControl[$i][2] & '|' & $aControl[$i][3])
  222.             _ArrayDelete($aControl, $i)
  223.             $aControl[0][0] -= 1
  224.             ExitLoop
  225.         EndIf
  226.     Next
  227. EndFunc   ;==>_Delete
  228. Func _EndSimulation()
  229.     $bSimulate = False
  230.     GUIDelete($hGUI1)
  231. EndFunc   ;==>_EndSimulation
  232. Func _EnsureOpen()
  233.     If Not ProcessExists('HWMonitor.exe') Then _StartHWMonitor()
  234. EndFunc   ;==>_EnsureOpen
  235. Func _Exit()
  236.     WinClose('CPUID')
  237.     _AlienClose()
  238.     Exit
  239. EndFunc   ;==>_Exit
  240. Func _HideHWMonitor()
  241.     $bHwHidden = $bHwHidden = False
  242.     If $bHwHidden Then
  243.         WinSetState($hWnd, '', @SW_HIDE)
  244.     Else
  245.         WinSetState($hWnd, '', @SW_SHOW)
  246.     EndIf
  247. EndFunc   ;==>_HideHWMonitor
  248. Func _HideMain()
  249.     $bHidden = $bHidden = False
  250.     If $bHidden Then
  251.         GUISetState(@SW_SHOW, $hGUI)
  252.     Else
  253.         GUISetState(@SW_HIDE, $hGUI)
  254.     EndIf
  255. EndFunc   ;==>_HideMain
  256. Func _IniWrite($i)
  257.     IniWrite($hFile, 'Profiles', $aControl[$i][0] & '|' & $aControl[$i][1] & '|' & $aControl[$i][2] & '|' & $aControl[$i][3], '')
  258. EndFunc   ;==>_IniWrite
  259. Func _ListItemHandler()
  260.     $sTmp = GUICtrlRead(@GUI_CtrlId)
  261.     $sTmp = StringSplit($sTmp, '|')
  262.     GUICtrlSetData($hDevice, $sTmp[1])
  263.     GUICtrlSetData($hFunction, $sTmp[2])
  264.     GUICtrlSetData($hRange, $sTmp[3])
  265.     GUICtrlSetData($hColour, $sTmp[4])
  266. EndFunc   ;==>_ListItemHandler
  267. Func _LoadSettings()
  268.     $aSettings = IniReadSection($hFile, 'Profiles')
  269.     If @error Then
  270.         Global $aControl[1][6]
  271.         $aControl[0][0] = 0
  272.         Return
  273.     EndIf
  274.     ReDim $aControl[$aSettings[0][0] + 1][6]
  275.     $aControl[0][0] = $aSettings[0][0]
  276.     For $i = 1 To $aSettings[0][0]
  277.         $aArray = StringSplit($aSettings[$i][0], '|')
  278.         $aControl[$i][0] = $aArray[1]
  279.         $aControl[$i][1] = $aArray[2]
  280.         $aControl[$i][2] = $aArray[3]
  281.         $aControl[$i][3] = $aArray[4]
  282.         $aControl[$i][4] = 'Off'
  283.         $aControl[$i][5] = GUICtrlCreateListViewItem($aControl[$i][0] & '|' & $aControl[$i][1] & '|' & $aControl[$i][2] & '|' & _RGBToString($aArray[4]), $List1)
  284.         GUICtrlSetOnEvent($aControl[$i][5], '_ListItemHandler')
  285.     Next
  286.     ;_ArrayDisplay($aControl)
  287. EndFunc   ;==>_LoadSettings
  288. Func _ReduceMemory()
  289. ;~  _Log('Reducing memory.')
  290.     Local $ai = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', @AutoItPID)
  291.     $ai = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', $ai[0])
  292.     DllCall('kernel32.dll', 'int', 'CloseHandle', 'int', $ai[0])
  293. EndFunc   ;==>_ReduceMemory
  294. Func _RGBToString($sStr1)
  295.     Switch $sStr1
  296.         Case '0000FF'
  297.             $sStr1 = 'Blue'
  298.         Case '00FF00'
  299.             $sStr1 = "Green"
  300.         Case 'FF0000'
  301.             $sStr1 = "Red"
  302.         Case '3F48CC'
  303.             $sStr1 = 'Indigo'
  304.         Case 'FF8000'
  305.             $sStr1 = 'Orange'
  306.         Case '8000FF'
  307.             $sStr1 = 'Violet'
  308.         Case 'FFFFFF'
  309.             $sStr1 = "White"
  310.         Case Else
  311.             $sStr1 = 'Custom'
  312.     EndSwitch
  313.     Return $sStr1
  314. EndFunc   ;==>_RGBToString
  315. Func _Save()
  316.     Local $iDevice, $iFunction, $iRange, $iColour
  317.     $iDevice = GUICtrlRead($hDevice)
  318.     $iFunction = GUICtrlRead($hFunction)
  319.     $iRange = GUICtrlRead($hRange)
  320.     $iColor = GUICtrlRead($hColour)
  321.     If Not $iDevice Then
  322.         ;ConsoleWrite($iDevice & @CRLF)
  323.         Return MsgBox(48, 'Error T__T', 'Please choose a light!')
  324.     ElseIf Not $iFunction Then
  325.         Return MsgBox(48, 'Error T__T', 'Please choose a function!')
  326.     ElseIf Not $iRange Then
  327.         Return MsgBox(48, 'Error T__T', 'Please choose a range!')
  328.     ElseIf Not $iColor Then
  329.         Return MsgBox(48, 'Error T__T', 'Please choose a colour!')
  330.     EndIf
  331.  
  332.  
  333.     $iU = UBound($aControl)
  334.     $aControl[0][0] += 1
  335.     ReDim $aControl[$iU + 1][6]
  336.     $aControl[$iU][0] = $iDevice
  337.     $aControl[$iU][1] = $iFunction
  338.     $aControl[$iU][2] = $iRange
  339.     Switch $iColor
  340.         Case "Custom"
  341.             $aControl[$iU][3] = _ChooseColor()
  342.         Case "Blue"
  343.             $aControl[$iU][3] = '0000FF'
  344.         Case "Green"
  345.             $aControl[$iU][3] = '00FF00'
  346.         Case "Indigo"
  347.             $aControl[$iU][3] = '3F48CC'
  348.         Case "Red"
  349.             $aControl[$iU][3] = 'FF0000'
  350.         Case "Orange"
  351.             $aControl[$iU][3] = 'FF8000'
  352.         Case "Violet"
  353.             $aControl[$iU][3] = '8000FF'
  354.         Case "White"
  355.             $aControl[$iU][3] = 'FFFFFF'
  356.         Case "Yellow"
  357.             $aControl[$iU][3] = 'FFFF00'
  358.         Case Else
  359.     EndSwitch
  360.     $aControl[$iU][4] = 'Off'
  361.     $aControl[$iU][5] = GUICtrlCreateListViewItem($aControl[$iU][0] & '|' & $aControl[$iU][1] & '|' & $aControl[$iU][2] & '|' & GUICtrlRead($hColour), $List1)
  362.     GUICtrlSetOnEvent($aControl[$iU][5], '_ListItemHandler')
  363.     _IniWrite($iU)
  364.     ;_ArrayDisplay($aControl)
  365. EndFunc   ;==>_Save
  366. Func _Simulate()
  367.     $bSimulate = True
  368.     $hGUI1 = GUICreate('Simulating.', 107, 91, Default, Default, Default, 0x00000080)
  369.     GUISetOnEvent(-3, '_EndSimulation')
  370.     GUISetBkColor(0x1F1F1F)
  371.     $hCombo1 = GUICtrlCreateCombo('0', 55, 10, 42)
  372.     GUICtrlSetOnEvent(-1, '_SimulateCombo')
  373.     $hCombo2 = GUICtrlCreateCombo('0', 55, 35, 42)
  374.     GUICtrlSetOnEvent(-1, '_SimulateCombo')
  375.     $hCombo3 = GUICtrlCreateCombo('0', 55, 60, 42)
  376.     GUICtrlSetOnEvent(-1, '_SimulateCombo')
  377.     For $i = 0 To 100 Step 10
  378.         GUICtrlSetData($hCombo1, $i, $aInfo[1])
  379.         GUICtrlSetData($hCombo2, $i, $aInfo[2])
  380.         GUICtrlSetData($hCombo3, $i, $aInfo[0])
  381.     Next
  382.     GUICtrlCreateLabel('CPU', 10, 14)
  383.     GUICtrlSetColor(-1, 0xFFFFFF)
  384.     GUICtrlCreateLabel('GPU', 10, 39)
  385.     GUICtrlSetColor(-1, 0xFFFFFF)
  386.     GUICtrlCreateLabel('Battery', 10, 64)
  387.     GUICtrlSetColor(-1, 0xFFFFFF)
  388.     GUISetState(@SW_SHOW, $hGUI1)
  389. EndFunc   ;==>_Simulate
  390. Func _SimulateCombo()
  391.     Switch @GUI_CtrlId
  392.         Case $hCombo1
  393.             ;CPU
  394.             $aInfo[1] = GUICtrlRead($hCombo1)
  395.             $aInfo[3] = $aInfo[1]
  396.         Case $hCombo2
  397.             ;GPU
  398.             $aInfo[2] = GUICtrlRead($hCombo2)
  399.         Case $hCombo3
  400.             ;Battery
  401.             $aInfo[0] = GUICtrlRead($hCombo3)
  402.     EndSwitch
  403. EndFunc   ;==>_SimulateCombo
  404. Func _StartHWMonitor()
  405.     If Not ProcessExists('hwmonitor.exe') Then
  406.         If ShellExecute(@ScriptDir & '\HWMonitor.exe', '', '', '', @SW_HIDE) = 0 Then Exit MsgBox(0, 'FATALITY!', 'Failed to find: "HWMonitor.exe"' & @CR & 'In folder: ' & @ScriptDir & @CR & 'Please relocate Templien.exe to a folder that contains HWMonitor.')
  407.     EndIf
  408.     WinWait('CPUID Hardware Monitor')
  409.     $hWnd = WinGetHandle('CPUID Hardware Monitor')
  410.     $hCtrl = ControlGetHandle($hWnd, '', 'SysTreeView321')
  411.     ControlListView($hWnd, '', 'SysTreeView321', 'SelectAll')
  412.  
  413.     $hIntel1 = _GUICtrlTreeView_FindItem($hCtrl, "Intel", True, 0)
  414.     If $hIntel1 = 0 Then
  415.         MsgBox(0, 'Error T__T', 'Failed to read CPU temperature.' & @CRLF & 'Please send a screenshot of HWMonitor to [email protected].')
  416.     Else
  417.         $hIntel1 = _GUICtrlTreeView_GetFirstChild($hCtrl, _GUICtrlTreeView_GetFirstChild($hCtrl, $hIntel1))
  418.         $hIntel2 = _GUICtrlTreeView_GetNextSibling($hCtrl, $hIntel1)
  419.     EndIf
  420.  
  421.     $nVidia = _GUICtrlTreeView_FindItem($hCtrl, "NVIDIA", True, 0)
  422.     If $nVidia = 0 Then
  423.         Return ;MsgBox(0, 'Error T__T', 'Failed to read GPU temperature.' & @CR & 'Please enable graphics card then close HWMonitor.')
  424.     Else
  425.         $nVidia = _GUICtrlTreeView_GetFirstChild($hCtrl, _GUICtrlTreeView_GetNextSibling($hCtrl, _GUICtrlTreeView_GetFirstChild($hCtrl, $nVidia)))
  426.     EndIf
  427.     If $bHwHidden Then WinSetState($hWnd, '', @SW_HIDE)
  428. EndFunc   ;==>_StartHWMonitor
  429. Func _StringBetween1($s_String, $s_Start = 0, $s_End = 0)
  430.     $s_Start = StringInStr($s_String, $s_Start) + StringLen($s_Start)
  431.     Return StringMid($s_String, $s_Start, StringInStr($s_String, $s_End) - $s_Start)
  432. EndFunc   ;==>_StringBetween1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement