Incredible Backup & Restore Beta

You'd get a no service message if you're not registered with SIPgate. That's where I'd start troubleshooting. Something is causing it not to register. Take Asterisk off line and then bring it back on line and watch the CLI or set up SIP tracking and see what the problem is. Does it think it's registered elsewhere perhaps??
 
And this is what I see when I try to make a call (had to cut it down to fit in the reply):

Code:
  -- Executing [s@macro-user-callerid:1] Set("SIP/704-b7805be8",  "AMPUSER=704") in new stack
  -- Executing [s@macro-user-callerid:2] GotoIf("SIP/704-b7805be8",  "0?report") in new stack
  -- Executing [s@macro-user-callerid:3] ExecIf("SIP/704-b7805be8",  "1|Set|REALCALLERIDNUM=704") in new stack
  -- Executing [s@macro-user-callerid:4] Set("SIP/704-b7805be8",  "AMPUSER=704") in new stack
  -- Executing [s@macro-user-callerid:5] Set("SIP/704-b7805be8",  "AMPUSERCIDNAME=Yahoo") in new stack
  -- Executing [s@macro-user-callerid:6] GotoIf("SIP/704-b7805be8",  "0?report") in new stack
  -- Executing [s@macro-user-callerid:7] Set("SIP/704-b7805be8",  "AMPUSERCID=704") in new stack
  -- Executing [s@macro-user-callerid:8] Set("SIP/704-b7805be8",  "CALLERID(all)="Yahoo" <704>") in new stack
  -- Executing [s@macro-user-callerid:9] ExecIf("SIP/704-b7805be8",  "0|Set|CHANNEL(language)=") in new stack
  -- Executing [s@macro-user-callerid:10] GotoIf("SIP/704-b7805be8",  "1?continue") in new stack
  -- Goto (macro-user-callerid,s,19)
  -- Executing [s@macro-user-callerid:19] NoOp("SIP/704-b7805be8",  "Using CallerID "Yahoo" <704>") in new stack
  -- Executing [YYYYYYY@from-internal:2] Set("SIP/704-b7805be8",  "_NODEST=") in new stack
  -- Executing [YYYYYYY@from-internal:3] Macro("SIP/704-b7805be8",  "record-enable|704|OUT|") in new stack
  -- Executing [s@macro-record-enable:1] GotoIf("SIP/704-b7805be8",  "1?check") in new stack
  -- Goto (macro-record-enable,s,4)
  -- Executing [s@macro-record-enable:4] AGI("SIP/704-b7805be8",  "recordingcheck|20100507-100325|1273251804.2") in new stack
  -- Launched AGI Script /var/lib/asterisk/agi-bin/recordingcheck
recordingcheck|20100507-100325|1273251804.2: Outbound recording not  enabled
  -- AGI Script recordingcheck completed, returning 0
  -- Executing [s@macro-record-enable:5] MacroExit("SIP/704-b7805be8",  "") in new stack
  -- Executing [YYYYYYY@from-internal:4] Macro("SIP/704-b7805be8",  "dialout-trunk|1|YYYYYYY||") in new stack
  -- Executing [s@macro-dialout-trunk:1] Set("SIP/704-b7805be8",  "DIAL_TRUNK=1") in new stack
  -- Executing [s@macro-dialout-trunk:2] GosubIf("SIP/704-b7805be8",  "0?sub-pincheck|s|1") in new stack
  -- Executing [s@macro-dialout-trunk:3] GotoIf("SIP/704-b7805be8",  "0?disabletrunk|1") in new stack
  -- Executing [s@macro-dialout-trunk:4] Set("SIP/704-b7805be8",  "DIAL_NUMBER=YYYYYYY") in new stack
  -- Executing [s@macro-dialout-trunk:5] Set("SIP/704-b7805be8",  "DIAL_TRUNK_OPTIONS=tr") in new stack
  -- Executing [s@macro-dialout-trunk:6] Set("SIP/704-b7805be8",  "OUTBOUND_GROUP=OUT_1") in new stack
  -- Executing [s@macro-dialout-trunk:7] GotoIf("SIP/704-b7805be8",  "0?nomax") in new stack
  -- Executing [s@macro-dialout-trunk:8] GotoIf("SIP/704-b7805be8",  "0?chanfull") in new stack
  -- Executing [s@macro-dialout-trunk:9] GotoIf("SIP/704-b7805be8",  "0?skipoutcid") in new stack
  -- Executing [s@macro-dialout-trunk:10] Set("SIP/704-b7805be8",  "DIAL_TRUNK_OPTIONS=") in new stack
  -- Executing [s@macro-dialout-trunk:11] Macro("SIP/704-b7805be8",  "outbound-callerid|1") in new stack
  -- Executing [s@macro-outbound-callerid:1] ExecIf("SIP/704-b7805be8",  "0|SetCallerPres|") in new stack
  -- Executing [s@macro-outbound-callerid:2] ExecIf("SIP/704-b7805be8",  "0|Set|REALCALLERIDNUM=704") in new stack
  -- Executing [s@macro-outbound-callerid:3] GotoIf("SIP/704-b7805be8",  "1?normcid") in new stack
  -- Goto (macro-outbound-callerid,s,6)
  -- Executing [s@macro-outbound-callerid:6] Set("SIP/704-b7805be8",  "USEROUTCID="Work Phone" <707ZZZZZZZ>") in new stack
ExecIf("SIP/704-b7805be8",  "1|Set|CALLERID(all)=Work Phone <707ZZZZZZZ>") in new stack
  -- Executing [s@macro-outbound-callerid:14] ExecIf("SIP/704-b7805be8",  "0|SetCallerPres|prohib_passed_screen") in new stack
  -- Executing [s@macro-dialout-trunk:12] ExecIf("SIP/704-b7805be8",  "1|AGI|fixlocalprefix") in new stack
  -- Launched AGI Script /var/lib/asterisk/agi-bin/fixlocalprefix
     >  fixlocalprefix: Using pattern 1NXXNXXXXXX
     >  fixlocalprefix: Using pattern NXXNXXXXXX
     >  fixlocalprefix: Using pattern 1707+NXXXXXX
==  fixlocalprefix: Dialpattern 1707+NXXXXXX matched. YYYYYYY ->  1707YYYYYYY
  -- AGI Script fixlocalprefix completed, returning 0
  -- Executing [s@macro-dialout-trunk:13] Set("SIP/704-b7805be8",  "OUTNUM=1707YYYYYYY") in new stack
  -- Executing [s@macro-dialout-trunk:14] Set("SIP/704-b7805be8",  "custom=SIP/vitel-outbound") in new stack
  -- Executing [s@macro-dialout-trunk:15] ExecIf("SIP/704-b7805be8",  "0|Set|DIAL_TRUNK_OPTIONS=M(setmusic^)") in new stack
  -- Executing [s@macro-dialout-trunk:16] Macro("SIP/704-b7805be8",  "dialout-trunk-predial-hook|") in new stack
  -- Executing [s@macro-dialout-trunk-predial-hook:1]  MacroExit("SIP/704-b7805be8", "") in new stack
  -- Executing [s@macro-dialout-trunk:17] GotoIf("SIP/704-b7805be8",  "0?bypass|1") in new stack
  -- Executing [s@macro-dialout-trunk:18] GotoIf("SIP/704-b7805be8",  "0?customtrunk") in new stack
  -- Executing [s@macro-dialout-trunk:19] Dial("SIP/704-b7805be8",  "SIP/vitel-outbound/1707YYYYYYY|300|") in new stack
== Everyone is busy/congested at this time (1:0/0/1)
  -- Executing [s@macro-dialout-trunk:20] Goto("SIP/704-b7805be8",  "s-CHANUNAVAIL|1") in new stack
  -- Goto (macro-dialout-trunk,s-CHANUNAVAIL,1)
  -- Executing [s-CHANUNAVAIL@macro-dialout-trunk:1]  GotoIf("SIP/704-b7805be8", "1?noreport") in new stack
  -- Goto (macro-dialout-trunk,s-CHANUNAVAIL,3)
  -- Executing [s-CHANUNAVAIL@macro-dialout-trunk:3]  NoOp("SIP/704-b7805be8", "TRUNK Dial failed due to CHANUNAVAIL  (hangupcause: 3) - failing through to other trunks") in new stack
  -- Executing [YYYYYYY@from-internal:5] Macro("SIP/704-b7805be8",  "dialout-trunk|5|YYYYYYY||") in new stack
  -- Executing [s@macro-dialout-trunk:1] Set("SIP/704-b7805be8",  "DIAL_TRUNK=5") in new stack
  -- Executing [s@macro-dialout-trunk:2] GosubIf("SIP/704-b7805be8",  "0?sub-pincheck|s|1") in new stack
  -- Executing [s@macro-dialout-trunk:3] GotoIf("SIP/704-b7805be8",  "0?disabletrunk|1") in new stack
  -- Executing [s@macro-dialout-trunk:4] Set("SIP/704-b7805be8",  "DIAL_NUMBER=YYYYYYY") in new stack
  -- Executing [s@macro-dialout-trunk:5] Set("SIP/704-b7805be8",  "DIAL_TRUNK_OPTIONS=tr") in new stack
  -- Executing [s@macro-dialout-trunk:6] Set("SIP/704-b7805be8",  "OUTBOUND_GROUP=OUT_5") in new stack
  -- Executing [s@macro-dialout-trunk:7] GotoIf("SIP/704-b7805be8",  "1?nomax") in new stack
  -- Goto (macro-dialout-trunk,s,9)
  -- Executing [s@macro-dialout-trunk:9] GotoIf("SIP/704-b7805be8",  "0?skipoutcid") in new stack
  -- Executing [s@macro-dialout-trunk:10] Set("SIP/704-b7805be8",  "DIAL_TRUNK_OPTIONS=") in new stack
  -- Executing [s@macro-dialout-trunk:11] Macro("SIP/704-b7805be8",  "outbound-callerid|5") in new stack
  -- Executing [s@macro-outbound-callerid:1] ExecIf("SIP/704-b7805be8",  "0|SetCallerPres|") in new stack
  -- Executing [s@macro-outbound-callerid:2] ExecIf("SIP/704-b7805be8",  "0|Set|REALCALLERIDNUM=707ZZZZZZZ") in new stack
  -- Executing [s@macro-outbound-callerid:3] GotoIf("SIP/704-b7805be8",  "1?normcid") in new stack
  -- Goto (macro-outbound-callerid,s,6)
  -- Executing [s@macro-outbound-callerid:6] Set("SIP/704-b7805be8",  "USEROUTCID="Work Phone" <707ZZZZZZZ>") in new stack
GotoIf("SIP/704-b7805be8",  "1?trunkcid") in new stack
  -- Goto (macro-outbound-callerid,s,12)
  -- Executing [s@macro-outbound-callerid:12] ExecIf("SIP/704-b7805be8",  "0|Set|CALLERID(all)=") in new stack
  -- Executing [s@macro-outbound-callerid:13] ExecIf("SIP/704-b7805be8",  "1|Set|CALLERID(all)=Work Phone <707ZZZZZZZ>") in new stack
  -- Executing [s@macro-outbound-callerid:14] ExecIf("SIP/704-b7805be8",  "0|SetCallerPres|prohib_passed_screen") in new stack
  -- Executing [s@macro-dialout-trunk:12] ExecIf("SIP/704-b7805be8",  "0|AGI|fixlocalprefix") in new stack
  -- Executing [s@macro-dialout-trunk:13] Set("SIP/704-b7805be8",  "OUTNUM=YYYYYYY") in new stack
  -- Executing [s@macro-dialout-trunk:14] Set("SIP/704-b7805be8",  "custom=SIP/sipgate") in new stack
  -- Executing [s@macro-dialout-trunk:15] ExecIf("SIP/704-b7805be8",  "0|Set|DIAL_TRUNK_OPTIONS=M(setmusic^)") in new stack
  -- Executing [s@macro-dialout-trunk:16] Macro("SIP/704-b7805be8",  "dialout-trunk-predial-hook|") in new stack
  -- Executing [s@macro-dialout-trunk-predial-hook:1]  MacroExit("SIP/704-b7805be8", "") in new stack
  -- Executing [s@macro-dialout-trunk:17] GotoIf("SIP/704-b7805be8",  "0?bypass|1") in new stack
  -- Executing [s@macro-dialout-trunk:18] GotoIf("SIP/704-b7805be8",  "0?customtrunk") in new stack
  -- Executing [s@macro-dialout-trunk:19] Dial("SIP/704-b7805be8",  "SIP/sipgate/YYYYYYY|300|") in new stack
== Everyone is busy/congested at this time (1:0/0/1)
  -- Executing [s@macro-dialout-trunk:20] Goto("SIP/704-b7805be8",  "s-CHANUNAVAIL|1") in new stack
  -- Goto (macro-dialout-trunk,s-CHANUNAVAIL,1)
  -- Executing [s-CHANUNAVAIL@macro-dialout-trunk:1]  GotoIf("SIP/704-b7805be8", "1?noreport") in new stack
  -- Goto (macro-dialout-trunk,s-CHANUNAVAIL,3)
  -- Executing [s-CHANUNAVAIL@macro-dialout-trunk:3]  NoOp("SIP/704-b7805be8", "TRUNK Dial failed due to CHANUNAVAIL  (hangupcause: 3) - failing through to other trunks") in new stack
  -- Executing [YYYYYYY@from-internal:6] Macro("SIP/704-b7805be8",  "outisbusy|") in new stack
  -- Executing [s@macro-outisbusy:1] GotoIf("SIP/704-b7805be8",  "0?emergency|1") in new stack
  -- Executing [s@macro-outisbusy:2] GotoIf("SIP/704-b7805be8",  "0?intracompany|1") in new stack
  -- Executing [s@macro-outisbusy:3] Playback("SIP/704-b7805be8",  "all-circuits-busy-now&pls-try-call-later| noanswer") in new stack
  -- <SIP/704-b7805be8> Playing 'all-circuits-busy-now' (language  'en')
  -- <SIP/704-b7805be8> Playing 'pls-try-call-later' (language  'en')
 
Just curious...

Did you restore FreePBX as part of the restore? If not, try that. In other words, build up a basic PIAF system, run update-scripts, update-fixes, then incrediblerestore and be sure to tell it to reload FreePBX by typing y.

These entries tell me something got clobbered in the restore process because the attempted call through SIPgate doesn't even have your area code in it:

-- Executing [s@macro-dialout-trunk:19] Dial("SIP/704-b7805be8", "SIP/vitel-outbound/1707YYYYYYY|300|") in new stack
== Everyone is busy/congested at this time (1:0/0/1)

-- Executing [s@macro-dialout-trunk:19] Dial("SIP/704-b7805be8", "SIP/sipgate/YYYYYYY|300|") in new stack
== Everyone is busy/congested at this time (1:0/0/1)
 
Just curious...

Did you restore FreePBX as part of the restore? If not, try that. In other words, build up a basic PIAF system, run update-scripts, update-fixes, then incrediblerestore and be sure to tell it to reload FreePBX by typing y.

These entries tell me something got clobbered in the restore process because the attempted call through SIPgate doesn't even have your area code in it:

I did exactly that, bare metal restore with PIAF, run update-scripts, update-fixes and then a incrediblerestore.

In digging into this a bit more, I'm beginning to think that part (or all) of the issue may have been with SIPGate.

I logged into my SIPGate account and saw quite a few calls that "failed for unknown reason", yet SIPGate saw me as being connected and online.

I edited one of the trunks (without actually changing anything) and submitted changes/applied configuration changes. Went back to work on some work-related stuff and had 2 trunk registrations and no trunks online. A few minutes later, I had 2 trunk registrations and 4 trunks online.

Now I can make / receive calls. Now I'll start testing other functionality.
 
Looks like we may also want to make sure we add /opt/swift (the Cepstral stuff) to the backup. I had iPBX configured to use swift, but since it's not installed, those apps are failing. Once I installed Cepstral, things worked fine.
 
Other than Incredible PBX apps, the rest are going to have to be added independently. Too much work to figure out what's installed and what's not. There are four different combinations of code just for Cepstral so it would be a nightmare. The install scripts should still be in /root after the restore. And the Nerd Vittles documentation is easy to find.
 
I agree with reinstalling the apps; I was just thinking that if someone has modified the extensions_custom.conf and that relies on swift (instead of flite), that including the /opt/swift directory might be a good idea.
 
Latest build has option to restore Asterisk. Needs some testing. :wink5:
 
referring to post #25 above
I have had some problems with sipgate, unrelated to
the restore issues - perhaps these problems are self-inflicted,
they usually are.

I finally set the registration string to
username/[email protected]/DID
to get the DID to work so that the
inbound route would identify the call.

Anthony
 
Install Cd BITES again!!!!!!!!1

Ok, I thought we had talked about this months ago and a warning was going to be put in.....

Box had problems since I messed up PHP on it. Make incredible backups on both a flash drive and ext usb drive.

pop'd in the latest install CD, used ksalt - and 95% thru the format process I realized it just formatted the hard drive, flash drive and usb drive!!!!!!!!!!!!! This is the 2nd time the install Cd has done this to me.

I have now lost over a years worth of work/tweaks on this phone box.

I thought we were gonna have some warning to unplug/remove any usb drives so they dont get formatted.

Granted this is 99% my fault - but we had talked and someone had said they were gonna add a drive removal warning.....

Dad is having surgery on monday, this is friday and I have to recreate this from scratch for work..... :(
 
sangoma & others

What a great tool!

Can I get some direction on a couple of other directories that would also be good to backup.

1) Sangoma card. I think the stuff is in /etc/wanpipe but I am unsure. Just want to be sure that this system will come back online.

2) Does the directories capture things like reminders.

3) I am not a wizard on linux yet, but the directory listings, how does this work. does it only capture the files in the listed directories or does it capture the sub-directories and files as well.

4) could the script do a reboot at the end to make sure everything is back running as orginial.

Thank you for your great work!
 
Do you include the /var/lib/asterisk/licenses directory ?

Personally, I like to BU any g739, FAX or Skype for Asterisk licenses I may have.

My 2 cents.
 
  1. /etc/wanpipe has been added to support certain add-on cards.
  2. Reminders get captured as part of /var/spool/asterisk tree and MySQL.
  3. If a directory is listed, all subdirectories and files under that directory get captured.
  4. Reboot is automatic with restore. It isn't necessary when doing a backup.
  5. /var/lib/asterisk/licenses gets captured as part of /var/lib/asterisk tree.
 
What set of backup/restore tools is "comprehensive"?

Is this the backup/restore functionality that appears in FreePBX -> Tools -> Backup & Restore?

I assume that this is not the Backup / Restore that appears in Webmin -> Backup Configuration Files.

What combination of backup tools get a complete backup of a live FreePBX install restore-able to a clean install of Centos 5.5?

Thanks,

Ken
 
Additions to iptables don't seem to carry over

First, a great backup/restore app!
I use samba sometimes, so I added a few rules to the iptables via webmin.
Here is the iptables file
Code:
# Generated by iptables-save v1.2.11 on Tue Jul 18 22:20:07 2006
*nat
:PREROUTING ACCEPT [8:408]
:POSTROUTING ACCEPT [2:129]
:OUTPUT ACCEPT [2:129]
COMMIT
# Completed on Tue Jul 18 22:20:07 2006
# Generated by iptables-save v1.2.11 on Tue Jul 18 22:20:07 2006
*mangle
:PREROUTING ACCEPT [287:33378]
:INPUT ACCEPT [287:33378]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [288:38355]
:POSTROUTING ACCEPT [288:38355]
COMMIT
# Completed on Tue Jul 18 22:20:07 2006
# Generated by iptables-save v1.2.11 on Tue Jul 18 22:20:07 2006
*filter
:FORWARD ACCEPT [0:0]
:INPUT DROP [0:0]
:OUTPUT ACCEPT [0:0]
# Accept traffic from internal interfaces
-A INPUT ! -i eth0 -j ACCEPT
# Accept traffic with the ACK flag set
-A INPUT -p tcp -m tcp --tcp-flags ACK ACK -j ACCEPT
# Allow incoming data that is part of a connection we established
-A INPUT -m state --state ESTABLISHED -j ACCEPT
# Allow data that is related to existing connections
-A INPUT -m state --state RELATED -j ACCEPT
# Accept responses to DNS queries
-A INPUT -p udp -m udp --dport 1024:65535 --sport 53 -j ACCEPT
# Accept responses to our pings
-A INPUT -p icmp -m icmp --icmp-type echo-reply -j ACCEPT
# Accept notifications of unreachable hosts
-A INPUT -p icmp -m icmp --icmp-type destination-unreachable -j ACCEPT
# Accept notifications to reduce sending speed
-A INPUT -p icmp -m icmp --icmp-type source-quench -j ACCEPT
# Accept notifications of lost packets
-A INPUT -p icmp -m icmp --icmp-type time-exceeded -j ACCEPT
# Accept notifications of protocol problems
-A INPUT -p icmp -m icmp --icmp-type parameter-problem -j ACCEPT
# Allow connections to our SSH server
-A INPUT -p tcp -m tcp --dport ssh -j ACCEPT
# Allow connections to our IDENT server
-A INPUT -p tcp -m tcp --dport auth -j ACCEPT
# Allow connections to our SSH server
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
# Allow connections to our WEB server
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
# Allow connections to our Secure Web server
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
# Allow connections to our FTP server
-A INPUT -p tcp -m tcp --dport 9001 -j ACCEPT
# Allow connections to our Webmin server
-A INPUT -p tcp -m tcp --dport 9080 -j ACCEPT
# Allow connections to our Alternative Web server
-A INPUT -p udp -m udp --dport 4569 -j ACCEPT
# Allow connections to our IAX server
-A INPUT -p udp -m udp --dport 5000:5082 -j ACCEPT
# Allow connections to our SIP server
-A INPUT -p udp -m udp --dport 10000:20000 -j ACCEPT
# Allow connections to our SIP-RTP server
-A INPUT -p tcp -m tcp --dport 4445 -j ACCEPT
# Allow connections to our FOP server
-A INPUT -p tcp -m tcp --dport 5038 -j ACCEPT
# Allow connections to NTP time server
-A INPUT -p udp -m udp --dport 123 -j ACCEPT
# Allow connections to our Alternative Web server
-A INPUT -p udp -m udp --dport 69 -j ACCEPT
# Allow connections to our Webmin server
-A INPUT -p tcp -m tcp --dport 9022 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 135 -j ACCEPT
-A INPUT -p udp -m udp --dport 135 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 137:139 -j ACCEPT
-A INPUT -p udp -m udp --dport 137:139 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 445 -j ACCEPT
-A INPUT -p udp -m udp --dport 445 -j ACCEPT
COMMIT
# Completed on Tue Jul 18 22:20:07 2006

Just the last several lines (ports 135, 137-139, 445) are added compared to the base install.
When I did the restore, I selected no sip/iax functionality.
However, my added lines did not show up on restore.
The other iptables files created by restore do not show the added ports either. Easy enough to add by hand, but would like it to be part of the restore process.

Only noticed a few errors/warnings during restore
one regarding var/lib/asterisk/sounds/tts folder
another for etc/pbx/f2b.flag
and lastly, queue module may not be installed.


I see the backup script includes iptables, not sure why it is not copied over?
 
Resolved iptables issue

I modified the first and third line as shown below in the backup script to test if the * character in the third line caused a syntax error.

Code:
tar -cf $tstamp.tar /var/www/html /var/lib/asterisk /var/spool/asterisk /var/lib/mysql /root /etc/asterisk /tftpboot /etc/sysconfig/iptables /etc/sysconfig/network
tar -uf $tstamp.tar /etc/pbx /etc/wanpipe /etc/crontab /etc/sudoers /etc/amportal.conf /etc/odbc.ini /etc/odbcinst.ini
tar -cf $tstamp.1.tar /etc/hosts /etc/resolv.conf /etc/sysconfig/network-scripts/ifcfg*
Now my iptables file copies over during restore.
I'll try testing later, I suspect need the end of 3rd line to say?
Code:
/etc/sysconfig/network-scripts/ifcfg*.*
Or everything after it will choke.
 

Members online

Forum statistics

Threads
26,688
Messages
174,412
Members
20,259
Latest member
Fadeek86
Get 3CX - Absolutely Free!

Link up your team and customers Phone System Live Chat Video Conferencing

Hosted or Self-managed. Up to 10 users free forever. No credit card. Try risk free.

3CX
A 3CX Account with that email already exists. You will be redirected to the Customer Portal to sign in or reset your password if you've forgotten it.
Back
Top