haraka 0.0.32 → 3.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +28 -0
- package/.githooks/pre-commit +41 -0
- package/.prettierignore +6 -0
- package/.qlty/.gitignore +7 -0
- package/.qlty/configs/.shellcheckrc +1 -0
- package/.qlty/qlty.toml +15 -0
- package/CHANGELOG.md +1872 -62
- package/CLAUDE.md +40 -0
- package/CONTRIBUTORS.md +34 -0
- package/Dockerfile +50 -0
- package/GEMINI.md +38 -0
- package/LICENSE +2 -1
- package/Plugins.md +227 -0
- package/README.md +100 -115
- package/SECURITY.md +178 -0
- package/TODO +22 -0
- package/address.js +53 -0
- package/bin/haraka +593 -0
- package/bin/haraka_grep +32 -0
- package/config/aliases +2 -0
- package/config/auth_flat_file.ini +7 -0
- package/config/auth_vpopmaild.ini +9 -0
- package/config/connection.ini +79 -0
- package/config/delay_deny.ini +7 -0
- package/config/dhparams.pem +8 -0
- package/config/host_list +3 -0
- package/config/host_list_regex +6 -0
- package/config/http.ini +11 -0
- package/config/lmtp.ini +7 -0
- package/config/log.ini +11 -0
- package/config/me +1 -0
- package/config/outbound.bounce_message +18 -0
- package/config/outbound.bounce_message_html +36 -0
- package/config/outbound.bounce_message_image +106 -0
- package/config/outbound.ini +24 -0
- package/config/plugins +67 -0
- package/config/smtp.ini +37 -0
- package/config/smtp_bridge.ini +4 -0
- package/config/smtp_forward.ini +31 -0
- package/config/smtp_proxy.ini +27 -0
- package/config/tarpit.timeout +1 -0
- package/config/tls.ini +83 -0
- package/config/tls_cert.pem +23 -0
- package/config/tls_key.pem +28 -0
- package/config/watch.ini +12 -0
- package/config/xclient.hosts +2 -0
- package/connection.js +1863 -0
- package/contrib/Haraka.cf +6 -0
- package/contrib/Haraka.pm +35 -0
- package/contrib/bad_smtp_server.pl +25 -0
- package/contrib/bsd-rc.d/haraka +61 -0
- package/contrib/debian-init.d/haraka +87 -0
- package/contrib/haraka.init +96 -0
- package/contrib/haraka.service +23 -0
- package/contrib/plugin2npm.sh +81 -0
- package/contrib/ubuntu-upstart/haraka.conf +27 -0
- package/coverage/coverage-final.json +2 -0
- package/coverage/coverage-summary.json +33 -0
- package/coverage/tmp/coverage-79131-1779241025146-0.json +1 -0
- package/coverage/tmp/coverage-79132-1779240999690-0.json +1 -0
- package/coverage/tmp/coverage-79172-1779241000095-0.json +1 -0
- package/coverage/tmp/coverage-79210-1779241000156-0.json +1 -0
- package/coverage/tmp/coverage-79211-1779241000209-0.json +1 -0
- package/coverage/tmp/coverage-79212-1779241000266-0.json +1 -0
- package/coverage/tmp/coverage-79213-1779241000441-0.json +1 -0
- package/coverage/tmp/coverage-79214-1779241000626-0.json +1 -0
- package/coverage/tmp/coverage-79215-1779241000795-0.json +1 -0
- package/coverage/tmp/coverage-79216-1779241000965-0.json +1 -0
- package/coverage/tmp/coverage-79218-1779241001013-0.json +1 -0
- package/coverage/tmp/coverage-79219-1779241001179-0.json +1 -0
- package/coverage/tmp/coverage-79220-1779241006249-0.json +1 -0
- package/coverage/tmp/coverage-79227-1779241011453-0.json +1 -0
- package/coverage/tmp/coverage-79229-1779241011537-0.json +1 -0
- package/coverage/tmp/coverage-79230-1779241011647-0.json +1 -0
- package/coverage/tmp/coverage-79231-1779241011765-0.json +1 -0
- package/coverage/tmp/coverage-79232-1779241011841-0.json +1 -0
- package/coverage/tmp/coverage-79233-1779241011909-0.json +1 -0
- package/coverage/tmp/coverage-79234-1779241011984-0.json +1 -0
- package/coverage/tmp/coverage-79235-1779241012055-0.json +1 -0
- package/coverage/tmp/coverage-79236-1779241012230-0.json +1 -0
- package/coverage/tmp/coverage-79237-1779241012300-0.json +1 -0
- package/coverage/tmp/coverage-79238-1779241012368-0.json +1 -0
- package/coverage/tmp/coverage-79239-1779241012438-0.json +1 -0
- package/coverage/tmp/coverage-79240-1779241012511-0.json +1 -0
- package/coverage/tmp/coverage-79241-1779241012582-0.json +1 -0
- package/coverage/tmp/coverage-79242-1779241012652-0.json +1 -0
- package/coverage/tmp/coverage-79243-1779241012814-0.json +1 -0
- package/coverage/tmp/coverage-79244-1779241012931-0.json +1 -0
- package/coverage/tmp/coverage-79245-1779241013007-0.json +1 -0
- package/coverage/tmp/coverage-79246-1779241013106-0.json +1 -0
- package/coverage/tmp/coverage-79247-1779241013178-0.json +1 -0
- package/coverage/tmp/coverage-79248-1779241013244-0.json +1 -0
- package/coverage/tmp/coverage-79249-1779241013409-0.json +1 -0
- package/coverage/tmp/coverage-79250-1779241013697-0.json +1 -0
- package/coverage/tmp/coverage-79251-1779241013847-0.json +1 -0
- package/coverage/tmp/coverage-79252-1779241014288-0.json +1 -0
- package/coverage/tmp/coverage-79253-1779241014378-0.json +1 -0
- package/coverage/tmp/coverage-79254-1779241014428-0.json +1 -0
- package/coverage/tmp/coverage-79255-1779241021774-0.json +1 -0
- package/coverage/tmp/coverage-80382-1779241021949-0.json +1 -0
- package/coverage/tmp/coverage-80383-1779241025019-0.json +1 -0
- package/coverage/tmp/coverage-80384-1779241025133-0.json +1 -0
- package/docs/Body.md +1 -0
- package/docs/Config.md +1 -0
- package/docs/Connection.md +153 -0
- package/docs/CoreConfig.md +96 -0
- package/docs/CustomReturnCodes.md +3 -0
- package/docs/HAProxy.md +62 -0
- package/docs/Header.md +1 -0
- package/docs/Logging.md +129 -0
- package/docs/Outbound.md +210 -0
- package/docs/Plugins.md +372 -0
- package/docs/Results.md +7 -0
- package/docs/Transaction.md +135 -0
- package/docs/Tutorial.md +183 -0
- package/docs/deprecated/access.md +3 -0
- package/docs/deprecated/backscatterer.md +9 -0
- package/docs/deprecated/connect.rdns_access.md +53 -0
- package/docs/deprecated/data.headers.md +3 -0
- package/docs/deprecated/data.nomsgid.md +7 -0
- package/docs/deprecated/data.noreceived.md +11 -0
- package/docs/deprecated/data.rfc5322_header_checks.md +11 -0
- package/docs/deprecated/dkim_sign.md +97 -0
- package/docs/deprecated/dkim_verify.md +28 -0
- package/docs/deprecated/dnsbl.md +80 -0
- package/docs/deprecated/dnswl.md +73 -0
- package/docs/deprecated/lookup_rdns.strict.md +67 -0
- package/docs/deprecated/mail_from.access.md +52 -0
- package/docs/deprecated/mail_from.blocklist.md +18 -0
- package/docs/deprecated/mail_from.nobounces.md +8 -0
- package/docs/deprecated/rcpt_to.access.md +53 -0
- package/docs/deprecated/rcpt_to.blocklist.md +18 -0
- package/docs/deprecated/rcpt_to.routes.md +3 -0
- package/docs/deprecated/rdns.regexp.md +30 -0
- package/docs/plugins/aliases.md +3 -0
- package/docs/plugins/auth/auth_bridge.md +34 -0
- package/docs/plugins/auth/auth_ldap.md +4 -0
- package/docs/plugins/auth/auth_proxy.md +36 -0
- package/docs/plugins/auth/auth_vpopmaild.md +33 -0
- package/docs/plugins/auth/flat_file.md +40 -0
- package/docs/plugins/block_me.md +18 -0
- package/docs/plugins/data.signatures.md +11 -0
- package/docs/plugins/delay_deny.md +23 -0
- package/docs/plugins/max_unrecognized_commands.md +6 -0
- package/docs/plugins/prevent_credential_leaks.md +22 -0
- package/docs/plugins/process_title.md +42 -0
- package/docs/plugins/queue/deliver.md +3 -0
- package/docs/plugins/queue/discard.md +32 -0
- package/docs/plugins/queue/lmtp.md +24 -0
- package/docs/plugins/queue/qmail-queue.md +16 -0
- package/docs/plugins/queue/quarantine.md +87 -0
- package/docs/plugins/queue/smtp_bridge.md +32 -0
- package/docs/plugins/queue/smtp_forward.md +127 -0
- package/docs/plugins/queue/smtp_proxy.md +68 -0
- package/docs/plugins/queue/test.md +7 -0
- package/docs/plugins/rcpt_to.in_host_list.md +34 -0
- package/docs/plugins/rcpt_to.max_count.md +3 -0
- package/docs/plugins/record_envelope_addresses.md +20 -0
- package/docs/plugins/relay.md +3 -0
- package/docs/plugins/reseed_rng.md +16 -0
- package/docs/plugins/status.md +41 -0
- package/docs/plugins/tarpit.md +50 -0
- package/docs/plugins/tls.md +235 -0
- package/docs/plugins/toobusy.md +27 -0
- package/docs/plugins/xclient.md +10 -0
- package/docs/tutorials/Migrating_from_v1_to_v2.md +96 -0
- package/docs/tutorials/SettingUpOutbound.md +62 -0
- package/eslint.config.mjs +2 -0
- package/haraka.js +74 -0
- package/haraka.sh +2 -0
- package/http/html/404.html +58 -0
- package/http/html/index.html +47 -0
- package/http/package.json +21 -0
- package/line_socket.js +24 -0
- package/logger.js +322 -0
- package/outbound/client_pool.js +59 -0
- package/outbound/config.js +134 -0
- package/outbound/hmail.js +1504 -0
- package/outbound/index.js +349 -0
- package/outbound/qfile.js +93 -0
- package/outbound/queue.js +399 -0
- package/outbound/tls.js +85 -0
- package/outbound/todo.js +17 -0
- package/package.json +91 -29
- package/plugins/.eslintrc.yaml +3 -0
- package/plugins/auth/auth_base.js +261 -0
- package/plugins/auth/auth_bridge.js +20 -0
- package/plugins/auth/auth_proxy.js +227 -0
- package/plugins/auth/auth_vpopmaild.js +162 -0
- package/plugins/auth/flat_file.js +44 -0
- package/plugins/block_me.js +88 -0
- package/plugins/data.signatures.js +30 -0
- package/plugins/delay_deny.js +153 -0
- package/plugins/prevent_credential_leaks.js +61 -0
- package/plugins/process_title.js +197 -0
- package/plugins/profile.js +11 -0
- package/plugins/queue/deliver.js +12 -0
- package/plugins/queue/discard.js +27 -0
- package/plugins/queue/lmtp.js +45 -0
- package/plugins/queue/qmail-queue.js +93 -0
- package/plugins/queue/quarantine.js +133 -0
- package/plugins/queue/smtp_bridge.js +45 -0
- package/plugins/queue/smtp_forward.js +371 -0
- package/plugins/queue/smtp_proxy.js +142 -0
- package/plugins/queue/test.js +15 -0
- package/plugins/rcpt_to.host_list_base.js +65 -0
- package/plugins/rcpt_to.in_host_list.js +56 -0
- package/plugins/record_envelope_addresses.js +17 -0
- package/plugins/reseed_rng.js +7 -0
- package/plugins/status.js +274 -0
- package/plugins/tarpit.js +45 -0
- package/plugins/tls.js +164 -0
- package/plugins/toobusy.js +47 -0
- package/plugins/xclient.js +124 -0
- package/plugins.js +604 -0
- package/queue/1772642154987_1775581346001_4_82235_TGwgfd_2_mattbook-m3.home.simerson.net +0 -0
- package/run_tests +11 -0
- package/server.js +827 -0
- package/smtp_client.js +504 -0
- package/test/.eslintrc.yaml +11 -0
- package/test/config/auth_flat_file.ini +5 -0
- package/test/config/block_me.recipient +1 -0
- package/test/config/block_me.senders +1 -0
- package/test/config/dhparams.pem +8 -0
- package/test/config/host_list +2 -0
- package/test/config/outbound_tls_cert.pem +1 -0
- package/test/config/outbound_tls_key.pem +1 -0
- package/test/config/plugins +7 -0
- package/test/config/smtp.ini +11 -0
- package/test/config/smtp_forward.ini +30 -0
- package/test/config/tls/example.com/_.example.com.key +28 -0
- package/test/config/tls/example.com/example.com.crt +25 -0
- package/test/config/tls/haraka.local.pem +51 -0
- package/test/config/tls.ini +45 -0
- package/test/config/tls_cert.pem +21 -0
- package/test/config/tls_key.pem +28 -0
- package/test/connection.js +817 -0
- package/test/fixtures/haproxy_allowed/config/connection.ini +3 -0
- package/test/fixtures/haproxy_disabled/config/connection.ini +3 -0
- package/test/fixtures/haproxy_untrusted/config/connection.ini +3 -0
- package/test/fixtures/line_socket.js +21 -0
- package/test/fixtures/todo_qfile.txt +0 -0
- package/test/fixtures/util_hmailitem.js +156 -0
- package/test/installation/config/test-plugin-flat +1 -0
- package/test/installation/config/test-plugin.ini +10 -0
- package/test/installation/config/tls.ini +1 -0
- package/test/installation/node_modules/load_first/index.js +5 -0
- package/test/installation/node_modules/load_first/package.json +11 -0
- package/test/installation/node_modules/test-plugin/config/test-plugin-flat +1 -0
- package/test/installation/node_modules/test-plugin/config/test-plugin.ini +9 -0
- package/test/installation/node_modules/test-plugin/package.json +5 -0
- package/test/installation/node_modules/test-plugin/test-plugin.js +5 -0
- package/test/installation/plugins/base_plugin.js +3 -0
- package/test/installation/plugins/folder_plugin/index.js +3 -0
- package/test/installation/plugins/folder_plugin/package.json +11 -0
- package/test/installation/plugins/inherits.js +7 -0
- package/test/installation/plugins/load_first.js +3 -0
- package/test/installation/plugins/plugin.js +1 -0
- package/test/installation/plugins/tls.js +3 -0
- package/test/logger.js +217 -0
- package/test/loud/config/dhparams.pem +0 -0
- package/test/loud/config/tls/goobered.pem +45 -0
- package/test/loud/config/tls.ini +43 -0
- package/test/mail_specimen/base64-root-part.txt +23 -0
- package/test/mail_specimen/varied-fold-lengths-preserve-data.txt +283 -0
- package/test/outbound/bounce_net_errors.js +133 -0
- package/test/outbound/bounce_rfc3464.js +226 -0
- package/test/outbound/hmail.js +210 -0
- package/test/outbound/index.js +385 -0
- package/test/outbound/qfile.js +124 -0
- package/test/outbound/queue.js +325 -0
- package/test/plugins/auth/auth_base.js +620 -0
- package/test/plugins/auth/auth_bridge.js +80 -0
- package/test/plugins/auth/auth_vpopmaild.js +81 -0
- package/test/plugins/auth/flat_file.js +123 -0
- package/test/plugins/block_me.js +141 -0
- package/test/plugins/data.signatures.js +111 -0
- package/test/plugins/delay_deny.js +262 -0
- package/test/plugins/prevent_credential_leaks.js +174 -0
- package/test/plugins/process_title.js +141 -0
- package/test/plugins/queue/deliver.js +98 -0
- package/test/plugins/queue/discard.js +78 -0
- package/test/plugins/queue/lmtp.js +137 -0
- package/test/plugins/queue/qmail-queue.js +98 -0
- package/test/plugins/queue/quarantine.js +80 -0
- package/test/plugins/queue/smtp_bridge.js +152 -0
- package/test/plugins/queue/smtp_forward.js +1023 -0
- package/test/plugins/queue/smtp_proxy.js +138 -0
- package/test/plugins/rcpt_to.host_list_base.js +102 -0
- package/test/plugins/rcpt_to.in_host_list.js +186 -0
- package/test/plugins/record_envelope_addresses.js +66 -0
- package/test/plugins/reseed_rng.js +34 -0
- package/test/plugins/status.js +207 -0
- package/test/plugins/tarpit.js +90 -0
- package/test/plugins/tls.js +86 -0
- package/test/plugins/toobusy.js +21 -0
- package/test/plugins/xclient.js +119 -0
- package/test/plugins.js +230 -0
- package/test/queue/1507509981169_1507509981169_0_61403_e0Y0Ym_1_fixed +0 -0
- package/test/queue/1507509981169_1507509981169_0_61403_e0Y0Ym_1_haraka +0 -0
- package/test/queue/1508269674999_1508269674999_0_34002_socVUF_1_haraka +0 -0
- package/test/queue/1508455115683_1508455115683_0_90253_9Q4o4V_1_haraka +0 -0
- package/test/queue/zero-length +0 -0
- package/test/server.js +1012 -0
- package/test/smtp_client.js +1303 -0
- package/test/tls_socket.js +321 -0
- package/test/transaction.js +554 -0
- package/tls_socket.js +771 -0
- package/transaction.js +267 -0
- package/lib/index.js +0 -371
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
package Mail::SpamAssassin::Plugin::Haraka;
|
|
2
|
+
my $VERSION = 0.1;
|
|
3
|
+
|
|
4
|
+
use warnings;
|
|
5
|
+
use strict;
|
|
6
|
+
use Mail::SpamAssassin::Plugin;
|
|
7
|
+
use vars qw(@ISA);
|
|
8
|
+
@ISA = qw(Mail::SpamAssassin::Plugin);
|
|
9
|
+
|
|
10
|
+
sub dbg {
|
|
11
|
+
Mail::SpamAssassin::Plugin::dbg ("Haraka: @_");
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
sub new {
|
|
15
|
+
my ($class, $mailsa) = @_;
|
|
16
|
+
$class = ref($class) || $class;
|
|
17
|
+
my $self = $class->SUPER::new($mailsa);
|
|
18
|
+
bless ($self, $class);
|
|
19
|
+
$self->register_eval_rule("get_haraka_uuid");
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
sub get_haraka_uuid {
|
|
23
|
+
my ($self, $pms) = @_;
|
|
24
|
+
|
|
25
|
+
# Add last external IP
|
|
26
|
+
my $le = $pms->get_tag('LASTEXTERNALIP');
|
|
27
|
+
if(defined($le) && $le) {
|
|
28
|
+
$pms->set_spamd_result_item( sub { return "last-external=$le"; } );
|
|
29
|
+
}
|
|
30
|
+
my $header = $pms->get("X-Haraka-UUID");
|
|
31
|
+
if(defined($header) && $header) {
|
|
32
|
+
$pms->set_spamd_result_item( sub { return "haraka-uuid=$header"; } );
|
|
33
|
+
}
|
|
34
|
+
return 0;
|
|
35
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#!/usr/bin/perl
|
|
2
|
+
|
|
3
|
+
use warnings;
|
|
4
|
+
use strict;
|
|
5
|
+
|
|
6
|
+
use IO::Socket;
|
|
7
|
+
|
|
8
|
+
my $server = IO::Socket::INET->new(Listen => 5, LocalPort => 2525, Proto => "tcp");
|
|
9
|
+
$server || die $!;
|
|
10
|
+
|
|
11
|
+
while (my $client = $server->accept()) {
|
|
12
|
+
print "Got connection\n";
|
|
13
|
+
$client->print("220 hostname\r\n");
|
|
14
|
+
my $helo = <$client>;
|
|
15
|
+
$client->print("250 hi\r\n");
|
|
16
|
+
my $mail = <$client>;
|
|
17
|
+
$client->print("250 ok\r\n");
|
|
18
|
+
my $rcpt = <$client>;
|
|
19
|
+
$client->print("250 ok\r\n");
|
|
20
|
+
my $data = <$client>;
|
|
21
|
+
$client->print("354 ok\r\n");
|
|
22
|
+
my $line = <$client>;
|
|
23
|
+
$client->close();
|
|
24
|
+
print "Closed client\n";
|
|
25
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
# USAGE: rename this as 'haraka' and drop it in /usr/local/etc/rc.d
|
|
3
|
+
# tested on FreeBSD. Should work on NetBSD and Dragonfly
|
|
4
|
+
|
|
5
|
+
# PROVIDE: haraka
|
|
6
|
+
# REQUIRE: NETWORKING ldconfig
|
|
7
|
+
# KEYWORD: shutdown
|
|
8
|
+
|
|
9
|
+
. /etc/rc.subr
|
|
10
|
+
|
|
11
|
+
name="haraka"
|
|
12
|
+
rcvar="haraka_enable"
|
|
13
|
+
|
|
14
|
+
command="/usr/local/bin/haraka"
|
|
15
|
+
pidfile="/var/run/${name}.pid"
|
|
16
|
+
|
|
17
|
+
haraka_flags=${haraka_flags:="-c /data"}
|
|
18
|
+
|
|
19
|
+
start_cmd="start"
|
|
20
|
+
status_cmd="status"
|
|
21
|
+
stop_cmd="stop"
|
|
22
|
+
|
|
23
|
+
load_rc_config $name
|
|
24
|
+
|
|
25
|
+
start()
|
|
26
|
+
{
|
|
27
|
+
/usr/local/bin/node /usr/local/bin/haraka $haraka_flags
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
status()
|
|
31
|
+
{
|
|
32
|
+
if [ -f $pidfile ];
|
|
33
|
+
then
|
|
34
|
+
LPID=`cat $pidfile`
|
|
35
|
+
LPROC=`/bin/ps -p $PID`
|
|
36
|
+
if [ -n $LPROC ];
|
|
37
|
+
then
|
|
38
|
+
echo "$name is running as $LPID"
|
|
39
|
+
else
|
|
40
|
+
echo "$name is not running"
|
|
41
|
+
fi
|
|
42
|
+
else
|
|
43
|
+
echo "$name is not running"
|
|
44
|
+
fi
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
stop()
|
|
48
|
+
{
|
|
49
|
+
if [ -f $pidfile ];
|
|
50
|
+
then
|
|
51
|
+
kill `cat $pidfile`
|
|
52
|
+
if [ -f $pidfile ];
|
|
53
|
+
then
|
|
54
|
+
rm $pidfile
|
|
55
|
+
fi
|
|
56
|
+
else
|
|
57
|
+
echo "no PID file!"
|
|
58
|
+
fi
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
run_rc_command "$1"
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
### BEGIN INIT INFO
|
|
3
|
+
# Provides: haraka
|
|
4
|
+
# Required-Start: $local_fs $remote_fs $network $syslog $named
|
|
5
|
+
# Required-Stop: $local_fs $remote_fs $network $syslog $named
|
|
6
|
+
# Default-Start: 2 3 4 5
|
|
7
|
+
# Default-Stop: 0 1 6
|
|
8
|
+
# X-Interactive: true
|
|
9
|
+
# Short-Description: Start/stop haraka SMTP server
|
|
10
|
+
### END INIT INFO
|
|
11
|
+
# Thx to author of http://www.thegeekstuff.com/2012/03/lsbinit-script/
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
DAEMON="/usr/local/bin/haraka"
|
|
15
|
+
NAME="haraka"
|
|
16
|
+
APP_DIR="/etc/haraka"
|
|
17
|
+
CONFIG="$APP_DIR/config/smtp.ini"
|
|
18
|
+
MAX_OPEN_FILES=65535
|
|
19
|
+
EXEC_OPTS="-c $APP_DIR"
|
|
20
|
+
PIDFILE="/var/run/$NAME/smtp.pid"
|
|
21
|
+
|
|
22
|
+
. /lib/lsb/init-functions
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
case "$1" in
|
|
26
|
+
start)
|
|
27
|
+
# Checked the PID file exists and check the actual status of process
|
|
28
|
+
if [ -e $PIDFILE ]; then
|
|
29
|
+
status_of_proc -p $PIDFILE $DAEMON "$NAME process" && status="0" || status="$?"
|
|
30
|
+
# If the status is SUCCESS then don't need to start again.
|
|
31
|
+
if [ $status = "0" ]; then
|
|
32
|
+
exit # Exit
|
|
33
|
+
fi
|
|
34
|
+
fi
|
|
35
|
+
# Start the daemon.
|
|
36
|
+
log_daemon_msg "Starting the process" "$NAME"
|
|
37
|
+
# Start the daemon with the help of start-stop-daemon
|
|
38
|
+
# Log the message appropriately
|
|
39
|
+
if start-stop-daemon --start --oknodo --pidfile $PIDFILE --exec $DAEMON -- $EXEC_OPTS; then
|
|
40
|
+
log_end_msg 0
|
|
41
|
+
else
|
|
42
|
+
log_end_msg 1
|
|
43
|
+
fi
|
|
44
|
+
;;
|
|
45
|
+
stop)
|
|
46
|
+
# Stop the daemon.
|
|
47
|
+
if [ -e $PIDFILE ]; then
|
|
48
|
+
status_of_proc -p $PIDFILE $DAEMON "Stoppping the $NAME process" && status="0" || status="$?"
|
|
49
|
+
if [ "$status" = 0 ]; then
|
|
50
|
+
start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE
|
|
51
|
+
/bin/rm -rf $PIDFILE
|
|
52
|
+
fi
|
|
53
|
+
else
|
|
54
|
+
log_daemon_msg "$NAME process is not running"
|
|
55
|
+
log_end_msg 0
|
|
56
|
+
fi
|
|
57
|
+
;;
|
|
58
|
+
restart)
|
|
59
|
+
# Restart the daemon.
|
|
60
|
+
$0 stop && sleep 2 && $0 start
|
|
61
|
+
;;
|
|
62
|
+
status)
|
|
63
|
+
# Check the status of the process.
|
|
64
|
+
if [ -e $PIDFILE ]; then
|
|
65
|
+
status_of_proc -p $PIDFILE $DAEMON "$NAME process" && exit 0 || exit $?
|
|
66
|
+
else
|
|
67
|
+
log_daemon_msg "$NAME Process is not running"
|
|
68
|
+
log_end_msg 0
|
|
69
|
+
fi
|
|
70
|
+
;;
|
|
71
|
+
reload)
|
|
72
|
+
# Reload the process. Basically sending some signal to a daemon to reload
|
|
73
|
+
# it configurations.
|
|
74
|
+
if [ -e $PIDFILE ]; then
|
|
75
|
+
start-stop-daemon --stop --oknodo --signal 1 --quiet --pidfile $PIDFILE --name $NAME
|
|
76
|
+
log_success_msg "$NAME process reloaded successfully"
|
|
77
|
+
else
|
|
78
|
+
log_failure_msg "$PIDFILE does not exists"
|
|
79
|
+
fi
|
|
80
|
+
;;
|
|
81
|
+
*)
|
|
82
|
+
# For invalid arguments, print the usage message.
|
|
83
|
+
echo "Usage: $0 {start|stop|restart|reload|status}"
|
|
84
|
+
exit 2
|
|
85
|
+
;;
|
|
86
|
+
esac
|
|
87
|
+
exit $?
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
#
|
|
3
|
+
# Haraka
|
|
4
|
+
#
|
|
5
|
+
# chkconfig: 2345 80 30
|
|
6
|
+
# description: Node.js Mail Server
|
|
7
|
+
#
|
|
8
|
+
|
|
9
|
+
# Source function library.
|
|
10
|
+
. /etc/rc.d/init.d/functions
|
|
11
|
+
|
|
12
|
+
exec="/usr/local/bin/haraka"
|
|
13
|
+
prog="haraka"
|
|
14
|
+
config="/etc/haraka/config/smtp.ini"
|
|
15
|
+
|
|
16
|
+
[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog
|
|
17
|
+
|
|
18
|
+
[ -z "$max_open_files" ] && max_open_files=65535
|
|
19
|
+
|
|
20
|
+
lockfile=/var/lock/subsys/$prog
|
|
21
|
+
|
|
22
|
+
start() {
|
|
23
|
+
[ -x $exec ] || exit 5
|
|
24
|
+
[ -f $config ] || exit 6
|
|
25
|
+
echo -n $"Starting $prog: "
|
|
26
|
+
ulimit -n $max_open_files
|
|
27
|
+
daemon "$exec -c /etc/haraka 2>&1 >> /var/log/haraka.log"
|
|
28
|
+
retval=$?
|
|
29
|
+
echo
|
|
30
|
+
[ $retval -eq 0 ] && touch $lockfile
|
|
31
|
+
return $retval
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
stop() {
|
|
35
|
+
echo -n $"Stopping $prog: "
|
|
36
|
+
killproc $prog
|
|
37
|
+
retval=$?
|
|
38
|
+
echo
|
|
39
|
+
rm -f $lockfile
|
|
40
|
+
return $retval
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
restart() {
|
|
44
|
+
stop
|
|
45
|
+
start
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
reload() {
|
|
49
|
+
restart
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
force_reload() {
|
|
53
|
+
restart
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
rh_status() {
|
|
57
|
+
# run checks to determine if the service is running or use generic status
|
|
58
|
+
status $prog
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
rh_status_q() {
|
|
62
|
+
rh_status >/dev/null 2>&1
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
case "$1" in
|
|
67
|
+
start)
|
|
68
|
+
rh_status_q && exit 0
|
|
69
|
+
$1
|
|
70
|
+
;;
|
|
71
|
+
stop)
|
|
72
|
+
rh_status_q || exit 0
|
|
73
|
+
$1
|
|
74
|
+
;;
|
|
75
|
+
restart)
|
|
76
|
+
$1
|
|
77
|
+
;;
|
|
78
|
+
reload)
|
|
79
|
+
rh_status_q || exit 7
|
|
80
|
+
$1
|
|
81
|
+
;;
|
|
82
|
+
force-reload)
|
|
83
|
+
force_reload
|
|
84
|
+
;;
|
|
85
|
+
status)
|
|
86
|
+
rh_status
|
|
87
|
+
;;
|
|
88
|
+
condrestart|try-restart)
|
|
89
|
+
rh_status_q || exit 0
|
|
90
|
+
restart
|
|
91
|
+
;;
|
|
92
|
+
*)
|
|
93
|
+
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
|
|
94
|
+
exit 2
|
|
95
|
+
esac
|
|
96
|
+
exit $?
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
#
|
|
2
|
+
# systemd service file for Haraka
|
|
3
|
+
#
|
|
4
|
+
# Ensure that `daemonize` in `smtp.ini` is set to `false` (which is the default value).
|
|
5
|
+
#
|
|
6
|
+
# Put this file in /etc/systemd/system, modify the paths to suit, then run:
|
|
7
|
+
# sudo systemctl enable haraka
|
|
8
|
+
# sudo systemctl start haraka
|
|
9
|
+
#
|
|
10
|
+
|
|
11
|
+
[Unit]
|
|
12
|
+
Description=Haraka MTA
|
|
13
|
+
After=syslog.target network.target remote-fs.target nss-lookup.target
|
|
14
|
+
|
|
15
|
+
[Service]
|
|
16
|
+
Type=simple
|
|
17
|
+
PIDFile=/var/run/haraka.pid
|
|
18
|
+
ExecStart=/usr/bin/haraka -c /path/to/your/config
|
|
19
|
+
KillMode=process
|
|
20
|
+
PrivateTmp=true
|
|
21
|
+
|
|
22
|
+
[Install]
|
|
23
|
+
WantedBy=multi-user.target
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
|
|
3
|
+
usage()
|
|
4
|
+
{
|
|
5
|
+
echo "$0 \$plugin_name"
|
|
6
|
+
exit
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
if [ -z "$1" ]; then
|
|
10
|
+
usage
|
|
11
|
+
fi
|
|
12
|
+
|
|
13
|
+
export GITHUB_ORG="haraka"
|
|
14
|
+
export PLUGIN_NAME="haraka-plugin-$1"
|
|
15
|
+
export PLUGIN_REPO="../$PLUGIN_NAME"
|
|
16
|
+
export GIT_CMD="git -C $PLUGIN_REPO"
|
|
17
|
+
|
|
18
|
+
if [ -d "$PLUGIN_REPO" ]; then
|
|
19
|
+
echo "repo exists at $PLUGIN_REPO"
|
|
20
|
+
else
|
|
21
|
+
git clone git@github.com:haraka/haraka-plugin-template.git "$PLUGIN_REPO" || exit
|
|
22
|
+
$GIT_CMD remote rm origin || exit
|
|
23
|
+
$GIT_CMD remote add origin "git@github.com:$GITHUB_ORG/$PLUGIN_NAME.git" || exit
|
|
24
|
+
fi
|
|
25
|
+
|
|
26
|
+
if grep template "$PLUGIN_REPO/README.md"; then
|
|
27
|
+
echo "redressing as $PLUGIN_NAME"
|
|
28
|
+
sed -i '' -e "s/template/${1}/g" "$PLUGIN_REPO/README.md"
|
|
29
|
+
|
|
30
|
+
sed -i '' \
|
|
31
|
+
-e "s/template/${1}/g" \
|
|
32
|
+
-e "s/template\.ini/$1.ini/" \
|
|
33
|
+
"$PLUGIN_REPO/test/index.js"
|
|
34
|
+
|
|
35
|
+
sed -i '' -e "s/template/${1}/g" "$PLUGIN_REPO/package.json"
|
|
36
|
+
|
|
37
|
+
sed -i '' \
|
|
38
|
+
-e "s/_template/_${1}/g" \
|
|
39
|
+
-e "s/template\.ini/$1.ini/" \
|
|
40
|
+
"$PLUGIN_REPO/index.js"
|
|
41
|
+
|
|
42
|
+
$GIT_CMD mv config/template.ini "config/$1.ini"
|
|
43
|
+
|
|
44
|
+
$GIT_CMD add package.json README.md index.js test config
|
|
45
|
+
$GIT_CMD commit -m "publish $1 as NPM module"
|
|
46
|
+
|
|
47
|
+
$GIT_CMD rm redress.sh
|
|
48
|
+
fi
|
|
49
|
+
|
|
50
|
+
if [ -f "docs/plugins/$1.md" ]; then
|
|
51
|
+
echo "copying docs/plugin/$1.md to $PLUGIN_REPO/README.md"
|
|
52
|
+
head -n8 "$PLUGIN_REPO/README.md" > foo.md
|
|
53
|
+
cat "docs/plugins/$1.md" >> foo.md
|
|
54
|
+
tail -n14 "$PLUGIN_REPO/README.md" >> foo.md
|
|
55
|
+
mv foo.md "$PLUGIN_REPO/README.md"
|
|
56
|
+
git rm "docs/plugins/$1.md" || exit
|
|
57
|
+
fi
|
|
58
|
+
|
|
59
|
+
if [ -f "config/$1.ini" ]; then
|
|
60
|
+
echo "copying $1.ini"
|
|
61
|
+
cp "config/$1.ini" "$PLUGIN_REPO/config/$1.ini"
|
|
62
|
+
git rm "config/$1.ini"
|
|
63
|
+
$GIT_CMD add "config/$1.ini"
|
|
64
|
+
fi
|
|
65
|
+
|
|
66
|
+
if [ -f "plugins/$1.js" ]; then
|
|
67
|
+
echo "copying plugins/$1.js"
|
|
68
|
+
cp "plugins/$1.js" "$PLUGIN_REPO/index.js"
|
|
69
|
+
tee "plugins/$1.js" <<DEPRECATED
|
|
70
|
+
exports.register = function () {
|
|
71
|
+
this.logerror('This plugin has moved. See https://github.com/haraka/haraka-plugin-$1');
|
|
72
|
+
}
|
|
73
|
+
DEPRECATED
|
|
74
|
+
$GIT_CMD add index.js
|
|
75
|
+
fi
|
|
76
|
+
|
|
77
|
+
if [ -f "test/plugins/$1.js" ]; then
|
|
78
|
+
echo "copying test/plugins/$1.js"
|
|
79
|
+
cp "test/plugins/$1.js" "$PLUGIN_REPO/test/index.js"
|
|
80
|
+
git rm "test/plugins/$1.js"
|
|
81
|
+
fi
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# haraka - nodejs email server
|
|
2
|
+
#
|
|
3
|
+
# Ubuntu Upstart script (place in /etc/init and run "initctl start haraka")
|
|
4
|
+
# (Assumes running w/the daemonize plugin)
|
|
5
|
+
#
|
|
6
|
+
# Contributed by "David Weekly" <david@weekly.org>
|
|
7
|
+
#
|
|
8
|
+
|
|
9
|
+
description "Haraka Email Server"
|
|
10
|
+
|
|
11
|
+
start on (local-filesystems and net-device-up IFACE=eth0)
|
|
12
|
+
stop on shutdown
|
|
13
|
+
|
|
14
|
+
respawn
|
|
15
|
+
respawn limit 10 5
|
|
16
|
+
umask 022
|
|
17
|
+
limit nofile 65535 65535
|
|
18
|
+
|
|
19
|
+
console none
|
|
20
|
+
|
|
21
|
+
pre-start script
|
|
22
|
+
test -x /usr/local/bin/haraka || { stop; exit 0; }
|
|
23
|
+
test -c /dev/null || { stop; exit 0; }
|
|
24
|
+
end script
|
|
25
|
+
|
|
26
|
+
expect fork
|
|
27
|
+
exec /usr/local/bin/haraka -c /etc/haraka
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
{"/Users/matt/git/haraka/Haraka/plugins/queue/smtp_forward.js": {"path":"/Users/matt/git/haraka/Haraka/plugins/queue/smtp_forward.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":12}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":28}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":64}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":63}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":22}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":0}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":31}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":0}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":52}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":0}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":32}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":23}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":0}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":32}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":0}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":41}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":0}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":37}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":50}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":5}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":0}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":40}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":53}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":5}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":0}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":48}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":0}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":40}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":68}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":61}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":5}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":0}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":61}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":42}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":1}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":0}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":45}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":31}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":27}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":9}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":23}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":35}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":40}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":44}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":37}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":40}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":31}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":36}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":14}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":10}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":15}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":40}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":10}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":5}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":1}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":0}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":38}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":47}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":0}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":20}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":56}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":61}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":45}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":54}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":12}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":62}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":46}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":5}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":0}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":62}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":34}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":65}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":0}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":24}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":1}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":0}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":50}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":87}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":0}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":75}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":1}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":0}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":60}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":39}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":20}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":0}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":37}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":17}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":69}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":21}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":5}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":0}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":47}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":40}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":0}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":44}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":33}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":0}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":31}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":58}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":46}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":5}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":0}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":48}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":10}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":1}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":0}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":65}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":34}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":43}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":0}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":74}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":34}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":0}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":53}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":49}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":0}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":48}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":28}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":36}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":46}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":59}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":19}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":5}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":0}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":48}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":52}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":34}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":0}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":52}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":34}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":46}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":5}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":0}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":65}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":16}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":1}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":0}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":63}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":39}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":20}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":0}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":26}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":21}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":54}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":21}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":5}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":0}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":56}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":46}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":64}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":23}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":5}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":0}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":42}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":41}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":65}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":54}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":27}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":9}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":56}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":62}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":5}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":0}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":67}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":56}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":48}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":10}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":1}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":0}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":56}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":98}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":42}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":57}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":0}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":39}},"176":{"start":{"line":177,"column":0},"end":{"line":177,"column":58}},"177":{"start":{"line":178,"column":0},"end":{"line":178,"column":48}},"178":{"start":{"line":179,"column":0},"end":{"line":179,"column":92}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":22}},"180":{"start":{"line":181,"column":0},"end":{"line":181,"column":13}},"181":{"start":{"line":182,"column":0},"end":{"line":182,"column":9}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":0}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":30}},"184":{"start":{"line":185,"column":0},"end":{"line":185,"column":52}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":44}},"186":{"start":{"line":187,"column":0},"end":{"line":187,"column":9}},"187":{"start":{"line":188,"column":0},"end":{"line":188,"column":0}},"188":{"start":{"line":189,"column":0},"end":{"line":189,"column":40}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":87}},"190":{"start":{"line":191,"column":0},"end":{"line":191,"column":103}},"191":{"start":{"line":192,"column":0},"end":{"line":192,"column":18}},"192":{"start":{"line":193,"column":0},"end":{"line":193,"column":9}},"193":{"start":{"line":194,"column":0},"end":{"line":194,"column":0}},"194":{"start":{"line":195,"column":0},"end":{"line":195,"column":40}},"195":{"start":{"line":196,"column":0},"end":{"line":196,"column":45}},"196":{"start":{"line":197,"column":0},"end":{"line":197,"column":45}},"197":{"start":{"line":198,"column":0},"end":{"line":198,"column":0}},"198":{"start":{"line":199,"column":0},"end":{"line":199,"column":87}},"199":{"start":{"line":200,"column":0},"end":{"line":200,"column":53}},"200":{"start":{"line":201,"column":0},"end":{"line":201,"column":42}},"201":{"start":{"line":202,"column":0},"end":{"line":202,"column":29}},"202":{"start":{"line":203,"column":0},"end":{"line":203,"column":14}},"203":{"start":{"line":204,"column":0},"end":{"line":204,"column":51}},"204":{"start":{"line":205,"column":0},"end":{"line":205,"column":63}},"205":{"start":{"line":206,"column":0},"end":{"line":206,"column":14}},"206":{"start":{"line":207,"column":0},"end":{"line":207,"column":51}},"207":{"start":{"line":208,"column":0},"end":{"line":208,"column":63}},"208":{"start":{"line":209,"column":0},"end":{"line":209,"column":14}},"209":{"start":{"line":210,"column":0},"end":{"line":210,"column":9}},"210":{"start":{"line":211,"column":0},"end":{"line":211,"column":6}},"211":{"start":{"line":212,"column":0},"end":{"line":212,"column":1}},"212":{"start":{"line":213,"column":0},"end":{"line":213,"column":0}},"213":{"start":{"line":214,"column":0},"end":{"line":214,"column":52}},"214":{"start":{"line":215,"column":0},"end":{"line":215,"column":61}},"215":{"start":{"line":216,"column":0},"end":{"line":216,"column":48}},"216":{"start":{"line":217,"column":0},"end":{"line":217,"column":62}},"217":{"start":{"line":218,"column":0},"end":{"line":218,"column":20}},"218":{"start":{"line":219,"column":0},"end":{"line":219,"column":5}},"219":{"start":{"line":220,"column":0},"end":{"line":220,"column":0}},"220":{"start":{"line":221,"column":0},"end":{"line":221,"column":62}},"221":{"start":{"line":222,"column":0},"end":{"line":222,"column":58}},"222":{"start":{"line":223,"column":0},"end":{"line":223,"column":20}},"223":{"start":{"line":224,"column":0},"end":{"line":224,"column":5}},"224":{"start":{"line":225,"column":0},"end":{"line":225,"column":0}},"225":{"start":{"line":226,"column":0},"end":{"line":226,"column":15}},"226":{"start":{"line":227,"column":0},"end":{"line":227,"column":1}},"227":{"start":{"line":228,"column":0},"end":{"line":228,"column":0}},"228":{"start":{"line":229,"column":0},"end":{"line":229,"column":53}},"229":{"start":{"line":230,"column":0},"end":{"line":230,"column":23}},"230":{"start":{"line":231,"column":0},"end":{"line":231,"column":40}},"231":{"start":{"line":232,"column":0},"end":{"line":232,"column":39}},"232":{"start":{"line":233,"column":0},"end":{"line":233,"column":0}},"233":{"start":{"line":234,"column":0},"end":{"line":234,"column":45}},"234":{"start":{"line":235,"column":0},"end":{"line":235,"column":63}},"235":{"start":{"line":236,"column":0},"end":{"line":236,"column":0}},"236":{"start":{"line":237,"column":0},"end":{"line":237,"column":86}},"237":{"start":{"line":238,"column":0},"end":{"line":238,"column":31}},"238":{"start":{"line":239,"column":0},"end":{"line":239,"column":0}},"239":{"start":{"line":240,"column":0},"end":{"line":240,"column":20}},"240":{"start":{"line":241,"column":0},"end":{"line":241,"column":0}},"241":{"start":{"line":242,"column":0},"end":{"line":242,"column":68}},"242":{"start":{"line":243,"column":0},"end":{"line":243,"column":0}},"243":{"start":{"line":244,"column":0},"end":{"line":244,"column":27}},"244":{"start":{"line":245,"column":0},"end":{"line":245,"column":19}},"245":{"start":{"line":246,"column":0},"end":{"line":246,"column":98}},"246":{"start":{"line":247,"column":0},"end":{"line":247,"column":9}},"247":{"start":{"line":248,"column":0},"end":{"line":248,"column":0}},"248":{"start":{"line":249,"column":0},"end":{"line":249,"column":27}},"249":{"start":{"line":250,"column":0},"end":{"line":250,"column":53}},"250":{"start":{"line":251,"column":0},"end":{"line":251,"column":9}},"251":{"start":{"line":252,"column":0},"end":{"line":252,"column":0}},"252":{"start":{"line":253,"column":0},"end":{"line":253,"column":32}},"253":{"start":{"line":254,"column":0},"end":{"line":254,"column":65}},"254":{"start":{"line":255,"column":0},"end":{"line":255,"column":60}},"255":{"start":{"line":256,"column":0},"end":{"line":256,"column":27}},"256":{"start":{"line":257,"column":0},"end":{"line":257,"column":13}},"257":{"start":{"line":258,"column":0},"end":{"line":258,"column":24}},"258":{"start":{"line":259,"column":0},"end":{"line":259,"column":9}},"259":{"start":{"line":260,"column":0},"end":{"line":260,"column":0}},"260":{"start":{"line":261,"column":0},"end":{"line":261,"column":30}},"261":{"start":{"line":262,"column":0},"end":{"line":262,"column":45}},"262":{"start":{"line":263,"column":0},"end":{"line":263,"column":46}},"263":{"start":{"line":264,"column":0},"end":{"line":264,"column":48}},"264":{"start":{"line":265,"column":0},"end":{"line":265,"column":22}},"265":{"start":{"line":266,"column":0},"end":{"line":266,"column":13}},"266":{"start":{"line":267,"column":0},"end":{"line":267,"column":102}},"267":{"start":{"line":268,"column":0},"end":{"line":268,"column":18}},"268":{"start":{"line":269,"column":0},"end":{"line":269,"column":9}},"269":{"start":{"line":270,"column":0},"end":{"line":270,"column":0}},"270":{"start":{"line":271,"column":0},"end":{"line":271,"column":41}},"271":{"start":{"line":272,"column":0},"end":{"line":272,"column":0}},"272":{"start":{"line":273,"column":0},"end":{"line":273,"column":39}},"273":{"start":{"line":274,"column":0},"end":{"line":274,"column":42}},"274":{"start":{"line":275,"column":0},"end":{"line":275,"column":48}},"275":{"start":{"line":276,"column":0},"end":{"line":276,"column":14}},"276":{"start":{"line":277,"column":0},"end":{"line":277,"column":16}},"277":{"start":{"line":278,"column":0},"end":{"line":278,"column":45}},"278":{"start":{"line":279,"column":0},"end":{"line":279,"column":9}},"279":{"start":{"line":280,"column":0},"end":{"line":280,"column":0}},"280":{"start":{"line":281,"column":0},"end":{"line":281,"column":38}},"281":{"start":{"line":282,"column":0},"end":{"line":282,"column":37}},"282":{"start":{"line":283,"column":0},"end":{"line":283,"column":54}},"283":{"start":{"line":284,"column":0},"end":{"line":284,"column":10}},"284":{"start":{"line":285,"column":0},"end":{"line":285,"column":0}},"285":{"start":{"line":286,"column":0},"end":{"line":286,"column":37}},"286":{"start":{"line":287,"column":0},"end":{"line":287,"column":45}},"287":{"start":{"line":288,"column":0},"end":{"line":288,"column":0}},"288":{"start":{"line":289,"column":0},"end":{"line":289,"column":64}},"289":{"start":{"line":290,"column":0},"end":{"line":290,"column":44}},"290":{"start":{"line":291,"column":0},"end":{"line":291,"column":48}},"291":{"start":{"line":292,"column":0},"end":{"line":292,"column":22}},"292":{"start":{"line":293,"column":0},"end":{"line":293,"column":13}},"293":{"start":{"line":294,"column":0},"end":{"line":294,"column":59}},"294":{"start":{"line":295,"column":0},"end":{"line":295,"column":33}},"295":{"start":{"line":296,"column":0},"end":{"line":296,"column":10}},"296":{"start":{"line":297,"column":0},"end":{"line":297,"column":0}},"297":{"start":{"line":298,"column":0},"end":{"line":298,"column":38}},"298":{"start":{"line":299,"column":0},"end":{"line":299,"column":45}},"299":{"start":{"line":300,"column":0},"end":{"line":300,"column":69}},"300":{"start":{"line":301,"column":0},"end":{"line":301,"column":10}},"301":{"start":{"line":302,"column":0},"end":{"line":302,"column":0}},"302":{"start":{"line":303,"column":0},"end":{"line":303,"column":51}},"303":{"start":{"line":304,"column":0},"end":{"line":304,"column":45}},"304":{"start":{"line":305,"column":0},"end":{"line":305,"column":81}},"305":{"start":{"line":306,"column":0},"end":{"line":306,"column":33}},"306":{"start":{"line":307,"column":0},"end":{"line":307,"column":10}},"307":{"start":{"line":308,"column":0},"end":{"line":308,"column":6}},"308":{"start":{"line":309,"column":0},"end":{"line":309,"column":1}},"309":{"start":{"line":310,"column":0},"end":{"line":310,"column":0}},"310":{"start":{"line":311,"column":0},"end":{"line":311,"column":41}},"311":{"start":{"line":312,"column":0},"end":{"line":312,"column":80}},"312":{"start":{"line":313,"column":0},"end":{"line":313,"column":80}},"313":{"start":{"line":314,"column":0},"end":{"line":314,"column":82}},"314":{"start":{"line":315,"column":0},"end":{"line":315,"column":62}},"315":{"start":{"line":316,"column":0},"end":{"line":316,"column":38}},"316":{"start":{"line":317,"column":0},"end":{"line":317,"column":16}},"317":{"start":{"line":318,"column":0},"end":{"line":318,"column":20}},"318":{"start":{"line":319,"column":0},"end":{"line":319,"column":65}},"319":{"start":{"line":320,"column":0},"end":{"line":320,"column":32}},"320":{"start":{"line":321,"column":0},"end":{"line":321,"column":5}},"321":{"start":{"line":322,"column":0},"end":{"line":322,"column":55}},"322":{"start":{"line":323,"column":0},"end":{"line":323,"column":20}},"323":{"start":{"line":324,"column":0},"end":{"line":324,"column":30}},"324":{"start":{"line":325,"column":0},"end":{"line":325,"column":46}},"325":{"start":{"line":326,"column":0},"end":{"line":326,"column":46}},"326":{"start":{"line":327,"column":0},"end":{"line":327,"column":5}},"327":{"start":{"line":328,"column":0},"end":{"line":328,"column":13}},"328":{"start":{"line":329,"column":0},"end":{"line":329,"column":1}},"329":{"start":{"line":330,"column":0},"end":{"line":330,"column":0}},"330":{"start":{"line":331,"column":0},"end":{"line":331,"column":49}},"331":{"start":{"line":332,"column":0},"end":{"line":332,"column":50}},"332":{"start":{"line":333,"column":0},"end":{"line":333,"column":71}},"333":{"start":{"line":334,"column":0},"end":{"line":334,"column":0}},"334":{"start":{"line":335,"column":0},"end":{"line":335,"column":74}},"335":{"start":{"line":336,"column":0},"end":{"line":336,"column":85}},"336":{"start":{"line":337,"column":0},"end":{"line":337,"column":5}},"337":{"start":{"line":338,"column":0},"end":{"line":338,"column":0}},"338":{"start":{"line":339,"column":0},"end":{"line":339,"column":15}},"339":{"start":{"line":340,"column":0},"end":{"line":340,"column":118}},"340":{"start":{"line":341,"column":0},"end":{"line":341,"column":29}},"341":{"start":{"line":342,"column":0},"end":{"line":342,"column":0}},"342":{"start":{"line":343,"column":0},"end":{"line":343,"column":28}},"343":{"start":{"line":344,"column":0},"end":{"line":344,"column":52}},"344":{"start":{"line":345,"column":0},"end":{"line":345,"column":21}},"345":{"start":{"line":346,"column":0},"end":{"line":346,"column":5}},"346":{"start":{"line":347,"column":0},"end":{"line":347,"column":0}},"347":{"start":{"line":348,"column":0},"end":{"line":348,"column":94}},"348":{"start":{"line":349,"column":0},"end":{"line":349,"column":0}},"349":{"start":{"line":350,"column":0},"end":{"line":350,"column":16}},"350":{"start":{"line":351,"column":0},"end":{"line":351,"column":20}},"351":{"start":{"line":352,"column":0},"end":{"line":352,"column":49}},"352":{"start":{"line":353,"column":0},"end":{"line":353,"column":51}},"353":{"start":{"line":354,"column":0},"end":{"line":354,"column":5}},"354":{"start":{"line":355,"column":0},"end":{"line":355,"column":0}},"355":{"start":{"line":356,"column":0},"end":{"line":356,"column":28}},"356":{"start":{"line":357,"column":0},"end":{"line":357,"column":28}},"357":{"start":{"line":358,"column":0},"end":{"line":358,"column":40}},"358":{"start":{"line":359,"column":0},"end":{"line":359,"column":32}},"359":{"start":{"line":360,"column":0},"end":{"line":360,"column":6}},"360":{"start":{"line":361,"column":0},"end":{"line":361,"column":0}},"361":{"start":{"line":362,"column":0},"end":{"line":362,"column":16}},"362":{"start":{"line":363,"column":0},"end":{"line":363,"column":1}}},"s":{"0":19,"1":19,"2":19,"3":19,"4":19,"5":19,"6":19,"7":19,"8":19,"9":19,"10":19,"11":20,"12":20,"13":20,"14":20,"15":20,"16":20,"17":20,"18":20,"19":0,"20":0,"21":20,"22":20,"23":0,"24":0,"25":20,"26":20,"27":20,"28":20,"29":0,"30":0,"31":0,"32":20,"33":20,"34":20,"35":20,"36":19,"37":20,"38":20,"39":20,"40":20,"41":20,"42":20,"43":20,"44":20,"45":20,"46":20,"47":20,"48":20,"49":20,"50":20,"51":20,"52":0,"53":0,"54":0,"55":0,"56":19,"57":11,"58":0,"59":11,"60":11,"61":11,"62":2,"63":2,"64":2,"65":11,"66":9,"67":8,"68":8,"69":11,"70":11,"71":11,"72":7,"73":7,"74":7,"75":7,"76":19,"77":4,"78":2,"79":2,"80":2,"81":2,"82":19,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":19,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":19,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":19,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":19,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":19,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":0,"253":0,"254":0,"255":0,"256":0,"257":0,"258":0,"259":0,"260":0,"261":0,"262":0,"263":0,"264":0,"265":0,"266":0,"267":0,"268":0,"269":0,"270":0,"271":0,"272":0,"273":0,"274":0,"275":0,"276":0,"277":0,"278":0,"279":0,"280":0,"281":0,"282":0,"283":0,"284":0,"285":0,"286":0,"287":0,"288":0,"289":0,"290":0,"291":0,"292":0,"293":0,"294":0,"295":0,"296":0,"297":0,"298":0,"299":0,"300":0,"301":0,"302":0,"303":0,"304":0,"305":0,"306":0,"307":0,"308":0,"309":0,"310":19,"311":2,"312":2,"313":2,"314":2,"315":2,"316":2,"317":2,"318":2,"319":2,"320":2,"321":2,"322":2,"323":2,"324":0,"325":0,"326":0,"327":2,"328":2,"329":2,"330":19,"331":5,"332":5,"333":0,"334":5,"335":5,"336":2,"337":2,"338":5,"339":5,"340":5,"341":5,"342":5,"343":5,"344":2,"345":2,"346":2,"347":5,"348":1,"349":1,"350":1,"351":5,"352":5,"353":1,"354":5,"355":5,"356":5,"357":5,"358":6,"359":2,"360":2,"361":5,"362":5},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":363,"column":1}},"locations":[{"start":{"line":1,"column":0},"end":{"line":363,"column":1}}]},"1":{"type":"branch","line":12,"loc":{"start":{"line":12,"column":-1},"end":{"line":37,"column":11}},"locations":[{"start":{"line":12,"column":-1},"end":{"line":37,"column":11}}]},"2":{"type":"branch","line":18,"loc":{"start":{"line":18,"column":5},"end":{"line":18,"column":11}},"locations":[{"start":{"line":18,"column":5},"end":{"line":18,"column":11}}]},"3":{"type":"branch","line":19,"loc":{"start":{"line":19,"column":11},"end":{"line":22,"column":11}},"locations":[{"start":{"line":19,"column":11},"end":{"line":22,"column":11}}]},"4":{"type":"branch","line":23,"loc":{"start":{"line":23,"column":11},"end":{"line":26,"column":11}},"locations":[{"start":{"line":23,"column":11},"end":{"line":26,"column":11}}]},"5":{"type":"branch","line":29,"loc":{"start":{"line":29,"column":11},"end":{"line":33,"column":11}},"locations":[{"start":{"line":29,"column":11},"end":{"line":33,"column":11}}]},"6":{"type":"branch","line":38,"loc":{"start":{"line":38,"column":-1},"end":{"line":57,"column":11}},"locations":[{"start":{"line":38,"column":-1},"end":{"line":57,"column":11}}]},"7":{"type":"branch","line":57,"loc":{"start":{"line":57,"column":34},"end":{"line":77,"column":11}},"locations":[{"start":{"line":57,"column":34},"end":{"line":77,"column":11}}]},"8":{"type":"branch","line":58,"loc":{"start":{"line":58,"column":40},"end":{"line":60,"column":11}},"locations":[{"start":{"line":58,"column":40},"end":{"line":60,"column":11}}]},"9":{"type":"branch","line":62,"loc":{"start":{"line":62,"column":11},"end":{"line":66,"column":5}},"locations":[{"start":{"line":62,"column":11},"end":{"line":66,"column":5}}]},"10":{"type":"branch","line":62,"loc":{"start":{"line":62,"column":54},"end":{"line":63,"column":12}},"locations":[{"start":{"line":62,"column":54},"end":{"line":63,"column":12}}]},"11":{"type":"branch","line":66,"loc":{"start":{"line":66,"column":5},"end":{"line":70,"column":11}},"locations":[{"start":{"line":66,"column":5},"end":{"line":70,"column":11}}]},"12":{"type":"branch","line":66,"loc":{"start":{"line":66,"column":55},"end":{"line":67,"column":12}},"locations":[{"start":{"line":66,"column":55},"end":{"line":67,"column":12}}]},"13":{"type":"branch","line":67,"loc":{"start":{"line":67,"column":12},"end":{"line":70,"column":11}},"locations":[{"start":{"line":67,"column":12},"end":{"line":70,"column":11}}]},"14":{"type":"branch","line":70,"loc":{"start":{"line":70,"column":11},"end":{"line":70,"column":29}},"locations":[{"start":{"line":70,"column":11},"end":{"line":70,"column":29}}]},"15":{"type":"branch","line":70,"loc":{"start":{"line":70,"column":29},"end":{"line":70,"column":49}},"locations":[{"start":{"line":70,"column":29},"end":{"line":70,"column":49}}]},"16":{"type":"branch","line":70,"loc":{"start":{"line":70,"column":51},"end":{"line":71,"column":12}},"locations":[{"start":{"line":70,"column":51},"end":{"line":71,"column":12}}]},"17":{"type":"branch","line":71,"loc":{"start":{"line":71,"column":12},"end":{"line":71,"column":27}},"locations":[{"start":{"line":71,"column":12},"end":{"line":71,"column":27}}]},"18":{"type":"branch","line":71,"loc":{"start":{"line":71,"column":27},"end":{"line":72,"column":12}},"locations":[{"start":{"line":71,"column":27},"end":{"line":72,"column":12}}]},"19":{"type":"branch","line":72,"loc":{"start":{"line":72,"column":12},"end":{"line":72,"column":37}},"locations":[{"start":{"line":72,"column":12},"end":{"line":72,"column":37}}]},"20":{"type":"branch","line":72,"loc":{"start":{"line":72,"column":37},"end":{"line":72,"column":57}},"locations":[{"start":{"line":72,"column":37},"end":{"line":72,"column":57}}]},"21":{"type":"branch","line":72,"loc":{"start":{"line":72,"column":57},"end":{"line":77,"column":10}},"locations":[{"start":{"line":72,"column":57},"end":{"line":77,"column":10}}]},"22":{"type":"branch","line":77,"loc":{"start":{"line":77,"column":43},"end":{"line":83,"column":11}},"locations":[{"start":{"line":77,"column":43},"end":{"line":83,"column":11}}]},"23":{"type":"branch","line":78,"loc":{"start":{"line":78,"column":51},"end":{"line":83,"column":10}},"locations":[{"start":{"line":78,"column":51},"end":{"line":83,"column":10}}]},"24":{"type":"branch","line":311,"loc":{"start":{"line":311,"column":39},"end":{"line":331,"column":11}},"locations":[{"start":{"line":311,"column":39},"end":{"line":331,"column":11}}]},"25":{"type":"branch","line":319,"loc":{"start":{"line":319,"column":37},"end":{"line":320,"column":11}},"locations":[{"start":{"line":319,"column":37},"end":{"line":320,"column":11}}]},"26":{"type":"branch","line":320,"loc":{"start":{"line":320,"column":6},"end":{"line":320,"column":10}},"locations":[{"start":{"line":320,"column":6},"end":{"line":320,"column":10}}]},"27":{"type":"branch","line":322,"loc":{"start":{"line":322,"column":48},"end":{"line":323,"column":12}},"locations":[{"start":{"line":322,"column":48},"end":{"line":323,"column":12}}]},"28":{"type":"branch","line":324,"loc":{"start":{"line":324,"column":11},"end":{"line":328,"column":12}},"locations":[{"start":{"line":324,"column":11},"end":{"line":328,"column":12}}]},"29":{"type":"branch","line":331,"loc":{"start":{"line":331,"column":30},"end":{"line":363,"column":1}},"locations":[{"start":{"line":331,"column":30},"end":{"line":363,"column":1}}]},"30":{"type":"branch","line":333,"loc":{"start":{"line":333,"column":24},"end":{"line":333,"column":69}},"locations":[{"start":{"line":333,"column":24},"end":{"line":333,"column":69}}]},"31":{"type":"branch","line":334,"loc":{"start":{"line":334,"column":-1},"end":{"line":335,"column":11}},"locations":[{"start":{"line":334,"column":-1},"end":{"line":335,"column":11}}]},"32":{"type":"branch","line":335,"loc":{"start":{"line":335,"column":43},"end":{"line":336,"column":9}},"locations":[{"start":{"line":335,"column":43},"end":{"line":336,"column":9}}]},"33":{"type":"branch","line":336,"loc":{"start":{"line":336,"column":11},"end":{"line":339,"column":11}},"locations":[{"start":{"line":336,"column":11},"end":{"line":339,"column":11}}]},"34":{"type":"branch","line":339,"loc":{"start":{"line":339,"column":11},"end":{"line":340,"column":67}},"locations":[{"start":{"line":339,"column":11},"end":{"line":340,"column":67}}]},"35":{"type":"branch","line":340,"loc":{"start":{"line":340,"column":67},"end":{"line":340,"column":108}},"locations":[{"start":{"line":340,"column":67},"end":{"line":340,"column":108}}]},"36":{"type":"branch","line":340,"loc":{"start":{"line":340,"column":109},"end":{"line":341,"column":12}},"locations":[{"start":{"line":340,"column":109},"end":{"line":341,"column":12}}]},"37":{"type":"branch","line":344,"loc":{"start":{"line":344,"column":11},"end":{"line":348,"column":11}},"locations":[{"start":{"line":344,"column":11},"end":{"line":348,"column":11}}]},"38":{"type":"branch","line":348,"loc":{"start":{"line":348,"column":11},"end":{"line":352,"column":40}},"locations":[{"start":{"line":348,"column":11},"end":{"line":352,"column":40}}]},"39":{"type":"branch","line":352,"loc":{"start":{"line":352,"column":40},"end":{"line":353,"column":11}},"locations":[{"start":{"line":352,"column":40},"end":{"line":353,"column":11}}]},"40":{"type":"branch","line":353,"loc":{"start":{"line":353,"column":36},"end":{"line":354,"column":5}},"locations":[{"start":{"line":353,"column":36},"end":{"line":354,"column":5}}]},"41":{"type":"branch","line":356,"loc":{"start":{"line":356,"column":-1},"end":{"line":356,"column":4}},"locations":[{"start":{"line":356,"column":-1},"end":{"line":356,"column":4}}]},"42":{"type":"branch","line":358,"loc":{"start":{"line":358,"column":4},"end":{"line":362,"column":10}},"locations":[{"start":{"line":358,"column":4},"end":{"line":362,"column":10}}]},"43":{"type":"branch","line":359,"loc":{"start":{"line":359,"column":6},"end":{"line":359,"column":12}},"locations":[{"start":{"line":359,"column":6},"end":{"line":359,"column":12}}]},"44":{"type":"branch","line":359,"loc":{"start":{"line":359,"column":12},"end":{"line":362,"column":9}},"locations":[{"start":{"line":359,"column":12},"end":{"line":362,"column":9}}]}},"b":{"0":[19],"1":[20],"2":[0],"3":[0],"4":[0],"5":[0],"6":[20],"7":[11],"8":[0],"9":[2],"10":[0],"11":[9],"12":[1],"13":[8],"14":[10],"15":[1],"16":[0],"17":[10],"18":[2],"19":[8],"20":[1],"21":[7],"22":[4],"23":[2],"24":[2],"25":[1],"26":[0],"27":[1],"28":[0],"29":[5],"30":[3],"31":[0],"32":[2],"33":[2],"34":[3],"35":[0],"36":[3],"37":[2],"38":[1],"39":[0],"40":[1],"41":[0],"42":[6],"43":[4],"44":[2]},"fnMap":{"0":{"name":"exports.register","decl":{"start":{"line":12,"column":-1},"end":{"line":37,"column":11}},"loc":{"start":{"line":12,"column":-1},"end":{"line":37,"column":11}},"line":12},"1":{"name":"exports.load_smtp_forward_ini","decl":{"start":{"line":38,"column":-1},"end":{"line":57,"column":11}},"loc":{"start":{"line":38,"column":-1},"end":{"line":57,"column":11}},"line":38},"2":{"name":"exports.get_config","decl":{"start":{"line":57,"column":34},"end":{"line":77,"column":11}},"loc":{"start":{"line":57,"column":34},"end":{"line":77,"column":11}},"line":57},"3":{"name":"exports.is_outbound_enabled","decl":{"start":{"line":77,"column":43},"end":{"line":83,"column":11}},"loc":{"start":{"line":77,"column":43},"end":{"line":83,"column":11}},"line":77},"4":{"name":"exports.check_sender","decl":{"start":{"line":83,"column":36},"end":{"line":108,"column":11}},"loc":{"start":{"line":83,"column":36},"end":{"line":108,"column":11}},"line":83},"5":{"name":"exports.set_queue","decl":{"start":{"line":108,"column":33},"end":{"line":139,"column":11}},"loc":{"start":{"line":108,"column":33},"end":{"line":139,"column":11}},"line":108},"6":{"name":"exports.check_recipient","decl":{"start":{"line":139,"column":39},"end":{"line":171,"column":11}},"loc":{"start":{"line":139,"column":39},"end":{"line":171,"column":11}},"line":139},"7":{"name":"exports.auth","decl":{"start":{"line":171,"column":28},"end":{"line":214,"column":11}},"loc":{"start":{"line":171,"column":28},"end":{"line":214,"column":11}},"line":171},"8":{"name":"exports.forward_enabled","decl":{"start":{"line":214,"column":39},"end":{"line":229,"column":11}},"loc":{"start":{"line":214,"column":39},"end":{"line":229,"column":11}},"line":214},"9":{"name":"exports.queue_forward","decl":{"start":{"line":229,"column":37},"end":{"line":311,"column":11}},"loc":{"start":{"line":229,"column":37},"end":{"line":311,"column":11}},"line":229},"10":{"name":"exports.get_mx_next_hop","decl":{"start":{"line":311,"column":39},"end":{"line":331,"column":11}},"loc":{"start":{"line":311,"column":39},"end":{"line":331,"column":11}},"line":311},"11":{"name":"exports.get_mx","decl":{"start":{"line":331,"column":30},"end":{"line":363,"column":1}},"loc":{"start":{"line":331,"column":30},"end":{"line":363,"column":1}},"line":331}},"f":{"0":20,"1":20,"2":11,"3":4,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":2,"11":5}}
|
|
2
|
+
}
|