Jump to content
Jamestay97

[Solved] help with button/link click

Recommended Posts

Hello! Thanks you for looking at my post

**No source code I'm sorry work related can't copy information**

I've been using autoit for about 1 year. 

I'm having trouble automating a click on an internet explorer web page and I've tried a lot of examples from help pages and forums already. The object I'm trying to click on isnt always in the same spot so I can't use mouse click or control click, I have tried to use the different get collection options and clickbyname, or index or get object. I'm just struggling. 

Description of object I'm trying to click -- 

HTML Code looks like <a ng-click.. "Click Here" it appears it's just a click able object named "click here" that opens a hidden window by running a script inside the web page. I'm not able to grab the information from the window unless it's open so I have to automate this click somehow. 

 

I understand it's difficult to assist without having something to look at, I apologize for that sincerely and appreciate and assistance and suggestions. 

Edited by Jamestay97
Issue solved

Share this post


Link to post
Share on other sites

Danp2, 

Yes I have tried the clickbytext and clickbyindex it seems like when I used a MsgBox to display the clickbyindex options it was there but can't be clicked for some reason. Using F5 in Sci yielding the usual not found error. 

Share this post


Link to post
Share on other sites

Danp2, 

I did look into frames, but I will also check again. The error was similar but it was specifically mentioning the name of the object I was trying to get, so "Click Here" not found  

Share this post


Link to post
Share on other sites

The HTML shows 

<a ng-click="showAdditionalinfo(order Task Detail.task.additionalinfo)" ng-show="ordertask detail.task.additionalInfo">click here</a>

Share this post


Link to post
Share on other sites
<!-- ngIf: !orderTaskDetail.order&&isAdditionalInfoExist() -->
<td class="ng-scope" ng-if="!orderTaskDetail.order&amp;&amp;isAdditionalInfoExist()">
                <a ng-click="showAdditionalInfo(orderTaskDetail.task.additionalInfo)" ng-show="orderTaskDetail.task.additionalInfo">
                    Click Here
                </a>
            </td>

The above text is for the "click here" button/link and below I'm linking my new problem which is a drop down list in the same instance.

<select class="inputTxt taskDetailsPrDisp ng-pristine ng-untouched ng-valid ng-not-empty" style="margin-left: 15px;" ng-change="selectPrimaryDisposition()" ng-model="viewTaskDetails.taskDetail.currPrimaryDispId" ng-options="item.id as item.value for item in viewTaskDetails.taskDetail.availablePrimaryDisps"><option selected="selected" value="">--Select--</option><option value="number:6205" label="Complete">Complete</option><option value="number:6206" label="Incomplete">Incomplete</option><option value="number:6345" label="Unable to Resolve - Send to PAC for Handling">Unable to Resolve - Send for Handling</option></select>

My current version of the code is pretty long and I've tried multiple things.  I'm mainly having an issue trying to find the form name and the object names. 

but for something like a radio button on the same page I was able to make something like this.. 

$oIE = _IEAttach("SMART")
   $sHtml=_IEBodyReadHTML($oIE)
$aArray = _StringBetween($sHtml, "rate.a.call.poor", "rate.a.call.no.contact")
$sString = _ArrayToString($aArray, " ", 0, 0)
$aArray1 = _StringBetween($sString, 'name="' , "class")
$sString1 = _ArrayToString($aArray1, " ", 0, 0)
$sStringLen = StringLen($sString1)
$final = StringLeft($sString1, $sStringLen - 2)
$oRadio = _IEGetObjByName($oIE,$final)
_IEAction($oRadio,"Click")

then for the text box on the same page is this...

$oIE = _IEAttach("SMART")
$oObj = _IEGetObjByName($oIE,"comment")
_IEPropertySet($oObj,"innertext","Account is CSG unable to complete task.")

 

Share this post


Link to post
Share on other sites
22 minutes ago, Jamestay97 said:

ng-click

This is indicative of a website using AngularJS, which has proven problematic to automate.

25 minutes ago, Jamestay97 said:

but for something like a radio button on the same page I was able to make something like this.. 

Why would you need to do this? Does the name dynamically change each time?

3 hours ago, Jamestay97 said:

I did look into frames, but I will also check again. The error was similar but it was specifically mentioning the name of the object I was trying to get, so "Click Here" not found  

This is too vague. Show us the actual error message if you want meaningful help. 😉

Share this post


Link to post
Share on other sites

 

Sure thing, here's some examples of what I've tried so far. 

#include <IE.au3>
$oIE = _IEAttach("SMART")
$oObj = _IEGetObjByName($oIE,"showAdditionalInfo(orderTaskDetail.task.additionalInfo)")
_IEAction($oObj, "click")
--> IE.au3 T3.0-2 Warning from function _IEGetObjByName, $_IESTATUS_NoMatch (Name: showAdditionalInfo(orderTaskDetail.task.additionalInfo), Index: 0)
--> IE.au3 T3.0-2 Error from function _IEAction(click), $_IESTATUS_InvalidDataType

This code does not yield an error in SciTE however does not produce a click to the object.

#include <IE.au3>

Local $oIE = _IEAttach("SMART")

Local $sMyString = "Click Here"
Local $oLinks = _IELinkGetCollection($oIE)
For $oLink In $oLinks
    Local $sLinkText = _IEPropertyGet($oLink, "innerText")
    If StringInStr($sLinkText, $sMyString) Then
       _IEAction($oLink,"focus")
       sleep(500)
        _IEAction($oLink, "click")
        sleep(500)
        _IEAction($oLink, "enable")
        sleep(500)
        ExitLoop
    EndIf
Next

Here's another example, same kind of $_IESTATUS_NoMatch

$oIE = _IEAttach("SMART")
$oForm = _IEFormGetObjByName ($oIE, "ng-scope")
$oText = _IEFormElementGetObjByName ($oForm, "showAdditionalInfo(orderTaskDetail.task.additionalInfo)")
$oAction = _IEAction($oText,"Click")
--> IE.au3 T3.0-2 Warning from function _IEFormGetObjByName, $_IESTATUS_NoMatch
--> IE.au3 T3.0-2 Error from function _IEFormElementGetObjByName, $_IESTATUS_InvalidDataType
--> IE.au3 T3.0-2 Error from function _IEAction(Click), $_IESTATUS_InvalidDataType
>Exit code: 0    Time: 0.3138

Again this is the HTML it looks like it's part of a table so I'm going to try to edit my script to pander towards an IE table and see if  that resolves the issue.

<td class="ng-scope" ng-if="!orderTaskDetail.order&amp;&amp;isAdditionalInfoExist()">
                <a ng-click="showAdditionalInfo(orderTaskDetail.task.additionalInfo)" ng-show="orderTaskDetail.task.additionalInfo">
                    Click Here
                </a>
            </td>

 

 

 

Share this post


Link to post
Share on other sites

"showAdditionalInfo(orderTaskDetail.task.additionalInfo)" and "ng-scope" aren't valid element names, so the errors you received are expected.

In the code where you loop through all links, there's no way to tell if it found the desired link. You should add a ConsoleWrite or a MessageBox for diagnostic purposes.

 

Share this post


Link to post
Share on other sites

I will attempt to do that would you mind including that in the source code I provided? 

I would prefer a msgbox but I'm not sure how to make it cycle for each link found.

thank you again!

edit: this is what I tried however the msgbox is coming up blank.

edit2: I got the msgbox working but the "Click Here" link was not included in the list of links. Possibly because it's in the table?

 

For $oLink In $oLinks
    Local $sLinkText = _IEPropertyGet($oLink, "innerText")
    msgbox(0,"",$sLinkText & @Extended)
    If StringInStr($sLinkText, $sMyString) Then
       _IEAction($oLink,"focus")

 

Edited by Jamestay97
updated code

Share this post


Link to post
Share on other sites

This is an update to the code I've been working on as far as the object being in a table..

The ArrayDisplay shows the "Click Here" value in row 11 - col 2 .. included a screenshot .. hooray!(sort've)

The click portion of the code isn't doing anything still, but no errors in sciTE

Heres the code. 

Local $oIE = _IEAttach("SMART")
$oTable = _IETableGetCollection ($oIE, 1)
$aTableData = _IETableWriteToArray ($oTable)
_ArrayDisplay($aTableData); have I got the right table
$oLinks = _IELinkGetCollection ($oIE)
For $oLink In $oLinks
    If StringInStr($oLink.href , "Click " ) Then
        _IEAction($oLink, "click")
    EndIf
Next
_IELoadWait( $oIE )

 

screenshot61020.png

Edited by Jamestay97
explanation of code behavior

Share this post


Link to post
Share on other sites

You may want to try this :

#include <IE.au3>
#include <Array.au3>

Local $oIE = _IEAttach("SMART")
$oTable = _IETableGetCollection ($oIE, 1)
$aTableData = _IETableWriteToArray ($oTable)
_ArrayDisplay($aTableData); have I got the right table
$oLinks = _IETagNameGetCollection ($oTable, "a")
For $oLink In $oLinks
  ConsoleWrite (_IEPropertyGet ($oLink, "innertext") & @CRLF)
    If StringInStr($oLink.innerText , "Click" ) Then
        _IEAction($oLink, "click")
        ExitLoop
    EndIf
Next
_IELoadWait( $oIE )

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By mLipok
      In the past there was many questions about how to: "Automatic file upload using without user interaction"

      https://www.autoitscript.com/forum/topic/92907-ie-8-input-namenomfic-typefile-idnomfic/
      https://www.autoitscript.com/forum/topic/116899-cant-automate-input-typefile-tag-in-ie/?tab=comments#comment-815478
      https://www.autoitscript.com/forum/topic/14883-input-typefile/
      https://www.autoitscript.com/forum/topic/188708-how-to-set-the-value-of-an-input-typefile-element/
      https://www.autoitscript.com/forum/topic/91513-how-can-i-auto-set-file-path-for-input-file-in-ie/
      https://www.autoitscript.com/forum/topic/116899-cant-automate-input-typefile-tag-in-ie/
      https://www.autoitscript.com/forum/topic/169190-how-to-script-file-upload-button/
      https://www.autoitscript.com/forum/topic/145327-how-to-deal-with-ie-window-for-upload-a-fileinput-typefile/
      https://www.autoitscript.com/forum/topic/140482-internet-explorer-input-file-problem/
       
      I found solution here: 
      https://stackoverflow.com/questions/33253517/upload-a-file-via-input-input-in-html-form-with-vba
      and:
      https://www.motobit.com/tips/detpg_uploadvbsie/
      And I translate this code to AutoIt3 code:
      ; Upload file using http protocol And multipart/form-data ; v1.01 ; 2001 Antonin Foller, PSTRUH Software Global $oErrorHandler = ObjEvent("AutoIt.Error", _ErrFunc) do_vbsUpload() Func do_vbsUpload() #cs ; We need at least two arguments (File & URL) ConsoleWrite('- ' & @ScriptLineNumber & @CRLF) If $CmdLine[0] < 2 Then InfoEcho() ConsoleWrite('- ' & @ScriptLineNumber & @CRLF) ; Are some required objects missing? If StringInStr(CheckRequirements(), "Error") > 0 Then InfoEcho() ConsoleWrite('- ' & @ScriptLineNumber & @CRLF) Local $s_FileName, $s_DestURL, $s_FieldName $s_FieldName = "FileField" ; Default field name For $i_argCounter = 1 To $CmdLine[0] ConsoleWrite('+ '& $i_argCounter& ' >> ' & $CmdLine[$i_argCounter] & @CRLF) Select Case $i_argCounter = 1 ;~ $s_FileName = $CmdLine[$i_argCounter] $s_FileName = @ScriptFullPath Case $i_argCounter = 2 $s_DestURL = $CmdLine[$i_argCounter] Case $i_argCounter = 3 $s_FieldName = $CmdLine[$i_argCounter] EndSelect Next UploadFile($s_DestURL, $s_FileName, $s_FieldName) #ce UploadFile('http://www.dobeash.com/test.html', @ScriptFullPath, 'fileExample') EndFunc ;==>do_vbsUpload ; ******************* upload - begin ; Upload file using input type=file Func UploadFile($s_DestURL, $s_FileName, $s_FieldName) ; Boundary of fields. ; Be sure this string is Not In the source file Const $Boundary = "---------------------------0123456789012" ; Get source file As a binary data. Local $d_FileContents = GetFile($s_FileName) ; Build multipart/form-data document Local $s_FormData = BuildFormData($d_FileContents, $Boundary, $s_FileName, $s_FieldName) ; Post the data To the destination URL IEPostBinaryRequest($s_DestURL, $s_FormData, $Boundary) EndFunc ;==>UploadFile ; Build multipart/form-data document with file contents And header info Func BuildFormData($d_FileContents, $Boundary, $s_FileName, $s_FieldName) Const $s_ContentType = "application/upload" ; The two parts around file contents In the multipart-form data. Local $s_Pre = "--" & $Boundary & @CRLF & mpFields($s_FieldName, $s_FileName, $s_ContentType) Local $s_Po = @CRLF & "--" & $Boundary & "--" & @CRLF ; Build form data using recordset binary field Const $i_adLongVarBinary = 205 Local $oRS = ObjCreate("ADODB.Recordset") ; https://docs.microsoft.com/en-us/sql/ado/reference/ado-api/append-method-ado?view=sql-server-ver15 $oRS.Fields.Append("b", $i_adLongVarBinary, StringLen($s_Pre) + BinaryLen($d_FileContents) + StringLen($s_Po)) $oRS.Open() $oRS.AddNew() ; Convert Pre string value To a binary data Local $i_LenData = StringLen($s_Pre) $oRS("b").AppendChunk(StringToMB($s_Pre) & StringToBinary(Chr(0))) $s_Pre = $oRS("b").GetChunk($i_LenData) $oRS("b") = "" ; Convert Po string value To a binary data $i_LenData = StringLen($s_Po) $oRS("b").AppendChunk(StringToMB($s_Po) & StringToBinary(Chr(0))) $s_Po = $oRS("b").GetChunk($i_LenData) $oRS("b") = "" ; Join Pre & $d_FileContents & Po binary data $oRS("b").AppendChunk($s_Pre) $oRS("b").AppendChunk($d_FileContents) $oRS("b").AppendChunk($s_Po) $oRS.Update() Local $s_FormData = $oRS("b") $oRS.Close() Return $s_FormData EndFunc ;==>BuildFormData ; sends multipart/form-data To the URL using IE Func IEPostBinaryRequest($s_URL, $s_FormData, $Boundary) ; Create InternetExplorer Local $oIE = ObjCreate("InternetExplorer.Application") ; You can uncoment Next line To see form results $oIE.Visible = True ; Send the form data To $s_URL As POST multipart/form-data request $oIE.Navigate($s_URL, '', '', $s_FormData, _ "Content-Type: multipart/form-data; boundary=" & $Boundary & @CRLF) While $oIE.Busy Wait(1, "Upload To " & $s_URL) WEnd ; Get a result of the script which has received upload ;~ On Error Resume Next Local $s_IE_InnerHTML = $oIE.Document.body.innerHTML MsgBox(0, 'TEST #' & @CRLF & @ScriptLineNumber, $s_IE_InnerHTML) $oIE.Quit() Return $s_IE_InnerHTML EndFunc ;==>IEPostBinaryRequest ; Infrormations In form field header. Func mpFields($s_FieldName, $s_FileName, $s_ContentType) Local $s_MPTemplate = _ ; template For multipart header 'Content-Disposition: form-data; name="{field}";' & _ 'FileName="{file}"' & @CRLF & _ 'Content-Type: {ct}' & @CRLF & @CRLF & _ '' Local $s_Out $s_Out = StringReplace($s_MPTemplate, "{field}", $s_FieldName) $s_Out = StringReplace($s_Out, "{file}", $s_FileName) $s_Out = StringReplace($s_Out, "{ct}", $s_ContentType) Return $s_Out EndFunc ;==>mpFields Func Wait($i_Seconds, $s_Message) MsgBox(64, '', $s_Message, $i_Seconds) EndFunc ;==>Wait ; Returns file contents As a binary data Func GetFile($s_FileName) Local $oStream = ObjCreate("ADODB.Stream") $oStream.Type = 1 ; Binary $oStream.Open() $oStream.LoadFromFile($s_FileName) Local $d_GetFile = $oStream.Read() $oStream.Close() Return $d_GetFile EndFunc ;==>GetFile ; Converts OLE string To multibyte string Func StringToMB($S) Local $I, $B For $I = 1 To StringLen($S) $B &= StringToBinary(Asc(StringMid($S, $I, 1))) Next Return $B EndFunc ;==>StringToMB ; ******************* upload - end ; ******************* Support ; Basic script info Func InfoEcho() Local $sMsg = _ "Upload file using http And multipart/form-data" & @CRLF & _ "Copyright (C) 2001 Antonin Foller, PSTRUH Software" & @CRLF & _ "use" & @CRLF & _ "[cscript|wscript] fupload.vbs file $s_URL [fieldname]" & @CRLF & _ " file ... Local file To upload" & @CRLF & _ " $s_URL ... $s_URL which can accept uploaded data" & @CRLF & _ " fieldname ... Name of the source form field." & @CRLF & _ @CRLF & CheckRequirements() & @CRLF & _ "" ConsoleWrite('! ' & $sMsg & @CRLF) EndFunc ;==>InfoEcho ; Checks If all of required objects are installed Func CheckRequirements() Local $sMsg = _ "This script requires some objects installed To run properly." & @CRLF & _ CheckOneObject("ADODB.Recordset") & @CRLF & _ CheckOneObject("ADODB.Stream") & @CRLF & _ CheckOneObject("InternetExplorer.Application") & @CRLF & _ "" Return $sMsg ; $sMsgBox $sMsg EndFunc ;==>CheckRequirements ; Checks If the one object is installed. Func CheckOneObject($sClassName) Local $sMsg ObjCreate($sClassName) If @error = 0 Then $sMsg = "OK" Else $sMsg = "Error:" & @error EndIf Return $sClassName & " - " & $sMsg EndFunc ;==>CheckOneObject ; ******************* Support - end ; User's COM error function. Will be called if COM error occurs Func _ErrFunc(ByRef $oError) ; Do anything here. ConsoleWrite(@ScriptName & " (" & $oError.scriptline & ") : ==> COM Error intercepted !" & @CRLF & _ @TAB & "err.number is: " & @TAB & @TAB & "0x" & Hex($oError.number) & @CRLF & _ @TAB & "err.windescription:" & @TAB & $oError.windescription & @CRLF & _ @TAB & "err.description is: " & @TAB & $oError.description & @CRLF & _ @TAB & "err.source is: " & @TAB & @TAB & $oError.source & @CRLF & _ @TAB & "err.helpfile is: " & @TAB & $oError.helpfile & @CRLF & _ @TAB & "err.helpcontext is: " & @TAB & $oError.helpcontext & @CRLF & _ @TAB & "err.lastdllerror is: " & @TAB & $oError.lastdllerror & @CRLF & _ @TAB & "err.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _ @TAB & "err.retcode is: " & @TAB & "0x" & Hex($oError.retcode) & @CRLF & @CRLF) EndFunc ;==>_ErrFunc  
      But I miss something and the code not works as intendend.
      Please join and contribute, in solving this issue, as this will be handy for entire community.
      @mLipok
       
      btw.
      I think that this may be realated to ChrB() which I simply translate to StringToBinary()
      Especialy this :
      StringToBinary(Chr(0))) could be the main issue.
      But for now I'm tired and going to sleep.
      Hope maybe tomorrow somebody solve this issue.
       
    • By Deshanur
      Am trying to automate injecting credential on the login form for all kind of Web application for IE. I know how to identify the form name by viewing the source code and using the method - _IEFormGetObjByName($ie, $form_Name).
      I would like to know how to identify or get the form object for the web app where there is no form name tag for example below, for the is I have used - _IEFormGetCollection($ie, 0) to get the form object.
      My Question is does it work for all kind of application "_IEFormGetCollection($ie, 0)" how to identify Index value? is it always 0? is there any better solution?
      The final solution am looking for is find out form object, get the username, password field and inject credential and submit the form.
      How to find out index value? for the forms which does not have form name field.
      $login_form = _IEFormGetCollection($ie, 0) $email_field = _IEFormElementGetObjByName($login_form, $form_UserName) $pass_field = _IEFormElementGetObjByName($login_form, $form_password) $login_button = _IEFormElementGetObjByName($login_form, $form_submitbutton) _IEFormElementSetValue($email_field, $CmdLine[2]) _IEFormElementSetValue($pass_field, $CmdLine[3]) ControlSend($hwnd, "", "[CLASS:Internet Explorer_Server; INSTANCE:1]","{Enter}") OR This works fine if the form has form name. $login_form = _IEFormGetObjByName($ie, $form_Name) $email_field = _IEFormElementGetObjByName($login_form, $form_UserName) $pass_field = _IEFormElementGetObjByName($login_form, $form_password) $login_button = _IEFormElementGetObjByName($login_form, $form_submitbutton) _IEFormElementSetValue($email_field, $CmdLine[2]) _IEFormElementSetValue($pass_field, $CmdLine[3]) ControlSend($hwnd, "", "[CLASS:Internet Explorer_Server; INSTANCE:1]","{Enter}")
    • By devilspride
      The following code creates a IE blank window
      Local $oIE = _IECreate()  
      But when i use Navigate to the URL, it open the URL in Microsoft Edge instead if IE.
      _IENavigate($oIE,$url)  
      What should i do to navigate in IE.
      Complete code :
      #include <MsgBoxConstants.au3> #include <WinAPIFiles.au3> #include <IE.au3> #Region TESTING Local $url = 'https://www.youtube.com' Local $oIE = _IECreate() _IENavigate($oIE,$url) #EndRegion Console Output
      IE.au3 T3.0-2 Error from function _IELoadWait, $_IESTATUS_ClientDisconnected (-2147023174, Browser has been deleted prior to operation.)  
      I have searched the forums but did not find such kind of post.
      Other posts were describing How to use Edge using Web driver selenium.
       
      Edit: I am working in Windows10. Recently many changes have been done by Microsoft to IE and Microsoft Edge. (2020)
      Earlier in 2019 this was working fine.
    • By Zaoka
      I'm trying to create script that would login on my SAP WEBI "web page" and replace some uploaded excel files. But i'm having problem on even the log in.
      These are user fill elements with Firefox Inspector
      <input type="text" id="_id0:logon:CMS" name="_id0:logon:CMS"> <input type="text" id="_id0:logon:USERNAME" name="_id0:logon:USERNAME"> <input type="password" id="_id0:logon:PASSWORD" name="_id0:logon:PASSWORD"> LogOnButton
      <input type="submit" id="_id0:logon:logonButton" value="Log On" class="logonButtonNoHover logon_button_no_hover" onmouseover="this.className = 'logonButtonHover logon_button_hover';" onmouseout="this.className = 'logonButtonNoHover logon_button_no_hover';">  
       
      My example, I tried _IEGetObjByName and _IEGetObjById but the script only open page but will not even fill out the form
        #include <IE.au3> Call("signIn") Func signIn() Global $oIE = _IECreate("http://192.xxx.xxx.xx:xxx/BOE/BI") Sleep (5000) Local $server = _IEGetObjByName($oIE, "_id0:logon:CMS") Local $username = _IEGetObjByName($oIE, "_id0:logon:USERNAME") Local $password = _IEGetObjByName($oIE, "_id0:logon:PASSWORD") Local $button = _IEGetObjById($oIE, "_id0:logon:logonButton") _IEFormElementSetValue($server, "TestServer:1000") _IEFormElementSetValue($username, "MyUserName") _IEFormElementSetValue($password, "MyPass") ; THIS PART ABOUT BUTTON CLICK I DONT UNDERSTAND AT ALL $sSelector = "body > div:nth-of-type(2) > div > div:nth-of-type(3) > div > table > tbody > tr > td > table > tbody > tr > td > table > tbody > tr:nth-of-type(1) > td > div > div:nth-of-type(1) > form > div:nth-of-type(5) > button" $signInUC = $oIE.document.QuerySelector($sSelector) _IEAction($signInUC, "click") EndFunc ;==>signIn  
      I would be very grateful for any help
    • By adityaparakh
      Hello ,

      A website I am trying to login with my credentials.
      And retrieve the cookie into a text file.
      Unable to do so.
      Is it that certain,  Httponly , type - are not allowed to be fetched.

      Then further ,
      I will be checking every 5 minutes if my session is active , else re-login and re-fetch the cookie.
      For the second part , I will probably fetch some table and see if not in appropriate format do Part 1 : Fetch Cookie - again.
      Any better way , tips would be appreciated.
       
      Thanks
       
×
×
  • Create New...