× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



Why on earth would they convert it to an exponent form? Makes no sense.

If you included a decimal e.g. 1000.00 would they still do that?


Jon P

On Sep 18, 2023, at 9:53 AM, (WalzCraft) Jerry Forss <JForss@xxxxxxxxxxxxx> wrote:

Fortunately, the element in question is a repeat of what I am sending them. Rather inconsequential.
So I just changed it to send 1001 instead of 1000.

This is using the TaxJar web service so I can verify our taxes on an order.
All I am interested in is the Tax Rates that are returned for the ship to address.

-----Original Message-----
From: RPG400-L <rpg400-l-bounces@xxxxxxxxxxxxxxxxxx> On Behalf Of Jon Paris
Sent: Monday, September 18, 2023 8:44 AM
To: RPG programming on IBM i <rpg400-l@xxxxxxxxxxxxxxxxxx>
Subject: Re: External DATA-INTO not matching variable

Data-Into uses %Dec rules to convert the character string to numeric. Those rules state:

If the parameter is a character expression
• See Rules for converting character values to numeric values using built-in functions for the rules for character expressions for %DEC.
• Floating point data, for example '1.2E6', is not allowed.
• If invalid numeric data is found, an exception occurs with status code 105.

In other words the exact symptoms you are experiencing.

The only simple thing I can think of - assuming the folks who send you the JSON won't change it - is to change any fields that may exhibit this issue to character and then manually convert them using $Dec or whatever. That would allow you to use Monitor blocks to trap conversion errors and process them appropriately.


Jon P.

On Sep 18, 2023, at 8:24 AM, (WalzCraft) Jerry Forss <JForss@xxxxxxxxxxxxx> wrote:

Ok, here's something.

I am using Notepad++ to review json and use the plugins/json viewer.
I didn't notice the unformatted json before I did that.
Here is the raw json. Notice the county_taxable_amount as 1.0e3

{"tax":{"amount_to_collect":55.0,"breakdown":{"city_tax_collectable":0
.0,"city_tax_rate":0.0,"city_taxable_amount":0.0,"combined_tax_rate":0
.055,"county_tax_collectable":5.0,"county_tax_rate":0.005,"county_taxa
ble_amount":1.0e3,"line_items":[{"city_amount":0.0,"city_tax_rate":0.0
,"city_taxable_amount":0.0,"combined_tax_rate":0.055,"county_amount":5
.0,"county_tax_rate":0.005,"county_taxable_amount":1.0e3,"id":"1","spe
cial_district_amount":0.0,"special_district_taxable_amount":0.0,"speci
al_tax_rate":0.0,"state_amount":50.0,"state_sales_tax_rate":0.05,"stat
e_taxable_amount":1.0e3,"tax_collectable":55.0,"taxable_amount":1.0e3}
],"shipping":{"city_amount":0.0,"city_tax_rate":0.0,"city_taxable_amou
nt":0.0,"combined_tax_rate":0.055,"county_amount":0.0,"county_tax_rate
":0.005,"county_taxable_amount":0.0,"special_district_amount":0.0,"spe
cial_tax_rate":0.0,"special_taxable_amount":0.0,"state_amount":0.0,"st
ate_sales_tax_rate":0.05,"state_taxable_amount":0.0,"tax_collectable":
0.0,"taxable_amoun
t":0.0},"special_district_tax_collectable":0.0,"special_district_taxab
le_amount":0.0,"special_tax_rate":0.0,"state_tax_collectable":50.0,"st
ate_tax_rate":0.05,"state_taxable_amount":1.0e3,"tax_collectable":55.0
,"taxable_amount":1.0e3},"freight_taxable":true,"has_nexus":true,"juri
sdictions":{"city":"DE FOREST","country":"US","county":"DANE
COUNTY","state":"WI"},"order_total_amount":1.0e3,"rate":0.055,"shippin
g":0.0,"tax_source":"destination","taxable_amount":1.0e3}}


-----Original Message-----
From: RPG400-L <rpg400-l-bounces@xxxxxxxxxxxxxxxxxx> On Behalf Of
(WalzCraft) Jerry Forss
Sent: Monday, September 18, 2023 7:13 AM
To: RPG programming on IBM i <rpg400-l@xxxxxxxxxxxxxxxxxx>
Subject: RE: External DATA-INTO not matching variable

Scott & Jon

Here is the entire json that was returned.
{
"tax": {
"amount_to_collect": 55.0,
"breakdown": {
"city_tax_collectable": 0.0,
"city_tax_rate": 0.0,
"city_taxable_amount": 0.0,
"combined_tax_rate": 0.055,
"county_tax_collectable": 5.0,
"county_tax_rate": 0.005,
"county_taxable_amount": 1000.0,
"line_items": [
{
"city_amount": 0.0,
"city_tax_rate": 0.0,
"city_taxable_amount": 0.0,
"combined_tax_rate": 0.055,
"county_amount": 5.0,
"county_tax_rate": 0.005,
"county_taxable_amount": 1000.0,
"id": "1",
"special_district_amount": 0.0,
"special_district_taxable_amount": 0.0,
"special_tax_rate": 0.0,
"state_amount": 50.0,
"state_sales_tax_rate": 0.05,
"state_taxable_amount": 1000.0,
"tax_collectable": 55.0,
"taxable_amount": 1000.0
}
],
"shipping": {
"city_amount": 0.0,
"city_tax_rate": 0.0,
"city_taxable_amount": 0.0,
"combined_tax_rate": 0.055,
"county_amount": 0.0,
"county_tax_rate": 0.005,
"county_taxable_amount": 0.0,
"special_district_amount": 0.0,
"special_tax_rate": 0.0,
"special_taxable_amount": 0.0,
"state_amount": 0.0,
"state_sales_tax_rate": 0.05,
"state_taxable_amount": 0.0,
"tax_collectable": 0.0,
"taxable_amount": 0.0
},
"special_district_tax_collectable": 0.0,
"special_district_taxable_amount": 0.0,
"special_tax_rate": 0.0,
"state_tax_collectable": 50.0,
"state_tax_rate": 0.05,
"state_taxable_amount": 1000.0,
"tax_collectable": 55.0,
"taxable_amount": 1000.0
},
"freight_taxable": true,
"has_nexus": true,
"jurisdictions": {
"city": "DE FOREST",
"country": "US",
"county": "DANE COUNTY",
"state": "WI"
},
"order_total_amount": 1000.0,
"rate": 0.055,
"shipping": 0.0,
"tax_source": "destination",
"taxable_amount": 1000.0
}
}

Here is my entire DS

// Tax Response From API Call
Dcl-ds TaxResponse Qualified;

Dcl-ds tax;

amount_to_collect Packed(7 : 2);

Dcl-ds breakdown;

city_taxable_amount Packed(7 : 2);
city_tax_rate Packed(7 : 2);
city_tax_collectable Packed(7 : 2);
combined_tax_rate Packed(7 : 4);
county_tax_collectable Packed(7 : 2);
county_tax_rate Packed(7 : 4);
county_taxable_amount Packed(7 : 2);

cnt_line_items Int(5);
Dcl-ds line_items Dim(25);
city_amount Packed(7 : 2);
city_tax_rate Packed(7 : 4);
city_taxable_amount Packed(7 : 2);
combined_tax_rate Packed(7 : 4);
county_amount Packed(7 : 2);
county_tax_rate Packed(7 : 4);
county_taxable_amount Packed(7 : 2);
id Char(1);
special_district_amount Packed(7 : 2);
special_tax_rate Packed(7 : 4);
special_district_taxable_amount Packed(7 : 2);
state_amount Packed(7 : 2);
state_sales_tax_rate Packed(7 : 4);
state_taxable_amount Packed(7 : 2);
tax_collectable Packed(7 : 2);
taxable_amount Packed(7 : 2);
End-Ds;

special_district_tax_collectable Packed(7 : 2);
special_tax_rate Packed(7 : 4);
special_district_taxable_amount Packed(7 : 2);
state_tax_collectable Packed(7 : 2);
state_tax_rate Packed(7 : 4);
state_taxable_amount Packed(7 : 2);
tax_collectable Packed(7 : 2);
taxable_amount Packed(7 : 2);

End-Ds;

freight_taxable Char(5);
has_nexus Char(5);

Dcl-ds jurisdictions;
city Char(50);
country Char(10);
county Char(50);
state Char(2);
End-Ds;

order_total_amount Packed(7 : 2);
rate Packed(7 : 4);
shipping Packed(7 : 2);
tax_source Char(20);
taxable_amount Packed(7 : 2);

End-Ds;

End-Ds;

DS as loaded
EVAL TaxResponse
TAXRESPONSE.TAX.AMOUNT_TO_COLLECT = 00055.00
TAXRESPONSE.TAX.BREAKDOWN.CITY_TAXABLE_AMOUNT = 00000.00
TAXRESPONSE.TAX.BREAKDOWN.CITY_TAX_RATE = 00000.00
TAXRESPONSE.TAX.BREAKDOWN.CITY_TAX_COLLECTABLE = 00000.00
TAXRESPONSE.TAX.BREAKDOWN.COMBINED_TAX_RATE = 000.0550
TAXRESPONSE.TAX.BREAKDOWN.COUNTY_TAX_COLLECTABLE = 00005.00
TAXRESPONSE.TAX.BREAKDOWN.COUNTY_TAX_RATE = 000.0050
TAXRESPONSE.TAX.BREAKDOWN.COUNTY_TAXABLE_AMOUNT = 00000.00
TAXRESPONSE.TAX.BREAKDOWN.CNT_LINE_ITEMS = 0
TAXRESPONSE.TAX.BREAKDOWN.LINE_ITEMS.CITY_AMOUNT(1) = 00000.00
TAXRESPONSE.TAX.BREAKDOWN.LINE_ITEMS.CITY_TAX_RATE(1) = 000.0000
TAXRESPONSE.TAX.BREAKDOWN.LINE_ITEMS.CITY_TAXABLE_AMOUNT(1) = 00000.00
More...

-----Original Message-----
From: RPG400-L <rpg400-l-bounces@xxxxxxxxxxxxxxxxxx> On Behalf Of
Scott Klement
Sent: Sunday, September 17, 2023 8:33 PM
To: rpg400-l@xxxxxxxxxxxxxxxxxx
Subject: Re: External DATA-INTO not matching variable

Hi Jerry,

According to the message, when copying data from the
taxresponse.tax.breakdown.county_taxable_amount element, it is
receiving
status=105 (A character representation of a numeric value is in
error.)

Keep in mind that there may be multiple places that you have
tax/breakdown/county_taxable_amount in your JSON document. But one of
them seems to contain something that cannot be converted to the
Packed(7: 2) field that you have in the data structure.

You could see precisely what it is sending by setting the following
environment variable in the job prior to running your program

ADDENVVAR ENVVAR(QIBM_RPG_DATA_INTO_TRACE_PARSER) VALUE(*STDOUT)

Though it also shouldn't be too hard to search for all of the county_taxable_amount fields in the JSON and see what their values are... maybe one is null or contains letters, or something.

Good luck

On 9/17/23 6:42 PM, (WalzCraft) Jerry Forss wrote:
Scott

Sorry, I was out of town for a long weekend.

Here is the second page.

Additional Message Information

Message ID . . . . . . : RNX0356
Date sent . . . . . . : 09/17/23 Time sent . . . . . . : 18:41:00

array elements.
8. The document contains data that cannot be successfully assigned to the
RPG variable. The RPG status code associated with the failure is 105.
9. The document contains a date, time, or timestamp value that is not
relevant or does not have a valid format.
10. A name was found in the document for a data structure having a subfield
matching the datasubf option.
11. An attribute was found having the same name as the datasubf option.
12. A name was found having the same name as a subfield that is identified
by the countprefix or nsprefix option. For example, if option
"countprefix=n_" was specified, and there exist subfields "xyz" and
"n_xyz", it is not valid to have a name with the name "n_xyz".
13. The datasubf option identified the same subfield as the countprefix
More...
Press Enter to continue.

-----Original Message-----
From: RPG400-L <rpg400-l-bounces@xxxxxxxxxxxxxxxxxx> On Behalf Of
Scott Klement
Sent: Thursday, September 14, 2023 1:06 PM
To: rpg400-l@xxxxxxxxxxxxxxxxxx
Subject: Re: External DATA-INTO not matching variable

Jerry,

It says you are receiving reason code 8. Please page down to where it describes reason code 8, and there will be an RPG status code listed there. What is it?

-SK

On 9/14/23 11:50 AM, (WalzCraft) Jerry Forss wrote:
Missing error message


Additional Message Information

Message ID . . . . . . : RNX0356
Date sent . . . . . . : 09/14/23 Time sent . . . . . . : 11:31:22

Message . . . . : The document for the DATA-INTO operation does not match
the RPG variable; reason code 8.

Cause . . . . . : While parsing a document for the DATA-INTO operation, the
parser found that the document does not correspond to RPG variable
"taxresponse" and the options do not allow for this. The reason code is 8.
The exact subfield for which the error was detected is
"taxresponse.tax.breakdown.county_taxable_amount". The options are "doc=file
case=any countprefix=cnt_ allowmissing=yes allowextra=yes". The document
name is /IAccess/TaxJar/559920_9_TaxJar_Resp.json; *N indicates that the
document is not an external file. The parser is 'YAJLINTO'. *N indicates
that the parser is a procedure pointer.
Recovery . . . : Contact the person responsible for program maintenance to
More...
Press Enter to continue.

-----Original Message-----
From: RPG400-L <rpg400-l-bounces@xxxxxxxxxxxxxxxxxx> On Behalf Of
(WalzCraft) Jerry Forss
Sent: Thursday, September 14, 2023 11:48 AM
To: RPG programming on IBM i <rpg400-l@xxxxxxxxxxxxxxxxxx>
Subject: External DATA-INTO not matching variable

CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.

Hi All

I am starting to build call to TaxJar for verifying taxes but getting a mapping error on the county_taxable_amount and not seeing the issue.
It loads everything up to that field.

What am I doing wrong?

Json return doc

{
"tax": {
"amount_to_collect": 55.0,
"breakdown": {
"city_tax_collectable": 0.0,
"city_tax_rate": 0.0,
"city_taxable_amount": 0.0,
"combined_tax_rate": 0.055,
"county_tax_collectable": 5.0,
"county_tax_rate": 0.005,
"county_taxable_amount": 1000.0,
"line_items": [
{
"city_amount": 0.0,
"city_tax_rate": 0.0,
"city_taxable_amount": 0.0,
"combined_tax_rate": 0.055,
"county_amount": 5.0,
"county_tax_rate": 0.005,
"county_taxable_amount": 1000.0,
"id": "1",
"special_district_amount": 0.0,
"special_district_taxable_amount": 0.0,
"special_tax_rate": 0.0,
"state_amount": 50.0,
"state_sales_tax_rate": 0.05,
"state_taxable_amount": 1000.0,
"tax_collectable": 55.0,
"taxable_amount": 1000.0
}
],

Data Structure

// Tax Response From API Call
Dcl-ds TaxResponse Qualified;

Dcl-ds tax;

amount_to_collect Packed(7 : 2);

Dcl-ds breakdown;

city_taxable_amount Packed(7 : 2);
city_tax_rate Packed(7 : 2);
city_tax_collectable Packed(7 : 2);
combined_tax_rate Packed(7 : 4);
county_tax_collectable Packed(7 : 2);
county_tax_rate Packed(7 : 4);
county_taxable_amount Packed(7 : 2);

cnt_line_items Int(5);
Dcl-ds line_items Dim(25);
city_amount Packed(7 : 2);
city_tax_rate Packed(7 : 4);
city_taxable_amount Packed(7 : 2);
combined_tax_rate Packed(7 : 4);
county_amount Packed(7 : 2);
county_tax_rate Packed(7 : 4);
county_taxable_amount Packed(7 : 2);
id Char(1);
special_district_amount Packed(7 : 2);
special_tax_rate Packed(7 : 4);
special_district_taxable_amount Packed(7 : 2);
state_amount Packed(7 : 2);
state_sales_tax_rate Packed(7 : 4);
state_taxable_amount Packed(7 : 2);
tax_collectable Packed(7 : 2);
taxable_amount Packed(7 : 2);
End-Ds;

Error

[cid:image001.png@01D9E701.4ADAD820]





Subject to Change Notice:

WalzCraft reserves the right to improve designs, and to change specifications without notice.

Confidentiality Notice:

This message and any attachments may contain confidential and
privileged information that is protected by law. The information
contained herein is transmitted for the sole use of the intended
recipient(s) and should "only" pertain to "WalzCraft" company matters.
If you are not the intended recipient or designated agent of the
recipient of such information, you are hereby notified that any use,
dissemination, copying or retention of this email or the information
contained herein is strictly prohibited and may subject you to
penalties under federal and/or state law. If you received this email
in error, please notify the sender immediately and permanently
delete this email. Thank You

WalzCraft PO Box 1748 La Crosse, WI, 54602-1748
www.walzcraft.com<http://www.walzcraft.com> Phone: 1-800-237-1326
--
This is the RPG programming on IBM i (RPG400-L) mailing list To post
a message email: RPG400-L@xxxxxxxxxxxxxxxxxx To subscribe,
unsubscribe, or change list options,
visit: https://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxxxxxxxx
Before posting, please take a moment to review the archives at https://archive.midrange.com/rpg400-l.

Please contact support@xxxxxxxxxxxxxxxxxxxx for any subscription related questions.




Subject to Change Notice:

WalzCraft reserves the right to improve designs, and to change specifications without notice.

Confidentiality Notice:

This message and any attachments may contain confidential and
privileged information that is protected by law. The information
contained herein is transmitted for the sole use of the intended
recipient(s) and should "only" pertain to "WalzCraft" company matters.
If you are not the intended recipient or designated agent of the
recipient of such information, you are hereby notified that any use,
dissemination, copying or retention of this email or the information
contained herein is strictly prohibited and may subject you to
penalties under federal and/or state law. If you received this email
in error, please notify the sender immediately and permanently
delete this email. Thank You

WalzCraft PO Box 1748 La Crosse, WI, 54602-1748
www.walzcraft.com<http://www.walzcraft.com> Phone: 1-800-237-1326
--
This is the RPG programming on IBM i (RPG400-L) mailing list To post
a message email: RPG400-L@xxxxxxxxxxxxxxxxxx To subscribe,
unsubscribe, or change list options,
visit: https://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxxxxxxxx
Before posting, please take a moment to review the archives at https://archive.midrange.com/rpg400-l.

Please contact support@xxxxxxxxxxxxxxxxxxxx for any subscription related questions.




Subject to Change Notice:

WalzCraft reserves the right to improve designs, and to change specifications without notice.

Confidentiality Notice:

This message and any attachments may contain confidential and
privileged information that is protected by law. The information
contained herein is transmitted for the sole use of the intended
recipient(s) and should "only" pertain to "WalzCraft" company matters.
If you are not the intended recipient or designated agent of the
recipient of such information, you are hereby notified that any use,
dissemination, copying or retention of this email or the information
contained herein is strictly prohibited and may subject you to
penalties under federal and/or state law. If you received this email
in error, please notify the sender immediately and permanently delete
this email. Thank You

WalzCraft PO Box 1748 La Crosse, WI, 54602-1748
www.walzcraft.com<http://www.walzcraft.com> Phone: 1-800-237-1326
--
This is the RPG programming on IBM i (RPG400-L) mailing list To post a
message email: RPG400-L@xxxxxxxxxxxxxxxxxx To subscribe, unsubscribe,
or change list options,
visit: https://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxxxxxxxx
Before posting, please take a moment to review the archives at https://archive.midrange.com/rpg400-l.

Please contact support@xxxxxxxxxxxxxxxxxxxx for any subscription related questions.




Subject to Change Notice:

WalzCraft reserves the right to improve designs, and to change specifications without notice.

Confidentiality Notice:

This message and any attachments may contain confidential and
privileged information that is protected by law. The information
contained herein is transmitted for the sole use of the intended
recipient(s) and should "only" pertain to "WalzCraft" company matters.
If you are not the intended recipient or designated agent of the
recipient of such information, you are hereby notified that any use,
dissemination, copying or retention of this email or the information
contained herein is strictly prohibited and may subject you to
penalties under federal and/or state law. If you received this email
in error, please notify the sender immediately and permanently delete
this email. Thank You

WalzCraft PO Box 1748 La Crosse, WI, 54602-1748
www.walzcraft.com<http://www.walzcraft.com> Phone: 1-800-237-1326
--
This is the RPG programming on IBM i (RPG400-L) mailing list To post a
message email: RPG400-L@xxxxxxxxxxxxxxxxxx To subscribe, unsubscribe,
or change list options,
visit: https://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxxxxxxxx
Before posting, please take a moment to review the archives at https://archive.midrange.com/rpg400-l.

Please contact support@xxxxxxxxxxxxxxxxxxxx for any subscription related questions.




Subject to Change Notice:

WalzCraft reserves the right to improve designs, and to change specifications without notice.

Confidentiality Notice:

This message and any attachments may contain confidential and
privileged information that is protected by law. The information
contained herein is transmitted for the sole use of the intended
recipient(s) and should "only" pertain to "WalzCraft" company matters.
If you are not the intended recipient or designated agent of the
recipient of such information, you are hereby notified that any use,
dissemination, copying or retention of this email or the information
contained herein is strictly prohibited and may subject you to
penalties under federal and/or state law. If you received this email
in error, please notify the sender immediately and permanently delete
this email. Thank You

WalzCraft PO Box 1748 La Crosse, WI, 54602-1748
www.walzcraft.com<http://www.walzcraft.com> Phone: 1-800-237-1326
--
This is the RPG programming on IBM i (RPG400-L) mailing list To post a
message email: RPG400-L@xxxxxxxxxxxxxxxxxx To subscribe, unsubscribe,
or change list options,
visit: https://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxxxxxxxx
Before posting, please take a moment to review the archives at
https://archive.midrange.com/rpg400-l.

Please contact support@xxxxxxxxxxxxxxxxxxxx for any subscription related questions.


--
This is the RPG programming on IBM i (RPG400-L) mailing list To post a message email: RPG400-L@xxxxxxxxxxxxxxxxxx To subscribe, unsubscribe, or change list options,
visit: https://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxxxxxxxx
Before posting, please take a moment to review the archives at https://archive.midrange.com/rpg400-l.

Please contact support@xxxxxxxxxxxxxxxxxxxx for any subscription related questions.




Subject to Change Notice:

WalzCraft reserves the right to improve designs, and to change specifications without notice.

Confidentiality Notice:

This message and any attachments may contain confidential and privileged information that is protected by law. The information contained herein is transmitted for the sole use of the intended recipient(s) and should "only" pertain to "WalzCraft" company matters. If you are not the intended recipient or designated agent of the recipient of such information, you are hereby notified that any use, dissemination, copying or retention of this email or the information contained herein is strictly prohibited and may subject you to penalties under federal and/or state law. If you received this email in error, please notify the sender immediately and permanently delete this email. Thank You

WalzCraft PO Box 1748 La Crosse, WI, 54602-1748
www.walzcraft.com<http://www.walzcraft.com> Phone: 1-800-237-1326
--
This is the RPG programming on IBM i (RPG400-L) mailing list
To post a message email: RPG400-L@xxxxxxxxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: https://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxxxxxxxx
Before posting, please take a moment to review the archives
at https://archive.midrange.com/rpg400-l.

Please contact support@xxxxxxxxxxxxxxxxxxxx for any subscription related questions.



As an Amazon Associate we earn from qualifying purchases.

This thread ...

Follow-Ups:
Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.