{
  "name": "Stonemason's wall log: coverage a ton achieved, and cost a square foot of face",
  "page": "https://otherworldlabs.com/stone-masonry-material-cost/",
  "endpoint": "https://otherworldlabs.com/stone-masonry-material-cost/api.json",
  "question": "For one finished stone wall, what did it cost a square foot of finished face, what coverage a ton and what mortar bags a hundred square feet did this crew actually get, each beside the figure the yard quoted and the figure printed on the mortar sack, and what do those achieved rates make the next wall's order?",
  "answers": "one finished wall at a time, in one stone product; the page keeps no history and this endpoint stores nothing",
  "version": "2026-10-11",
  "licence": "The arithmetic is not ours to license. Reuse the formulas; the page is free and needs no attribution.",
  "method": "static description plus a worked example; the same formulas run in the page in the reader's browser, with nothing sent anywhere",
  "currency": "whatever the figures are entered in; the page does no conversion and attaches no currency to a figure",
  "direction": "The calculation runs backward from a wall that is finished, not forward from a wall that is planned. It takes a delivery and the five fates of it, an invoice and a time sheet, and prints what the wall cost a square foot of finished face and the coverage rates it actually reached. The only forward figure is the next wall's order, and it is sized at the achieved rate rather than at the quoted one. No quantity is ever supplied by this endpoint: the quoted coverage, the quoted bags a hundred square feet, the joint width and every dimension are the caller's own figures, read off a pallet tag, a sack, an invoice or a drawing.",
  "rounding": {
    "counts": "whole where the control's step is whole (the mortar bags); a figure outside the range the control offers is brought to the nearer end of the range first, and a fraction is then rounded by the same rule as money below",
    "money": "two decimals by round2(x) = sign(x) x (Math.round(Math.abs(x) * 100) / 100) on the double, which is half AWAY FROM ZERO in both directions: -0.005 comes out as -0.01, where Math.round(-0.005 * 100) / 100 would give -0 and so -0.00. The sign is taken out before the rounding and put back after, which is what makes the two directions the same rule rather than two rules. round2 is applied where each figure is defined and again to every sum, difference and quotient built out of figures already rounded, so no printed line is worked from a longer number than the one printed beside it",
    "tons": "two decimals by the same half-away-from-zero rule. The tons in the face are a subtraction of already-rounded tons, so they cannot disagree with the figures the page prints above them",
    "coverage": "square feet a ton and bags a hundred square feet to two decimals by the same rule",
    "percentages": "the three gap shares (coverageGapConsumedPct, coverageGapInFacePct, bagsGapPct) are signed and are returned at one decimal by the same rule. They are computed from the ALREADY ROUNDED gap and the quoted figure, so a reader who recomputes from the two figures the page prints gets the figure the page prints",
    "joint": "the joint width is carried to four decimals, because the control's step is a sixteenth of an inch (0.0625). No output depends on it"
  },
  "clamping": "Every figure is brought inside the range the page's own control offers before anything is computed, and the ranges in `inputs` below are those controls' own min, max and step. Six fields have no meaningful zero and are carried as NOT TYPED rather than clamped up to the bottom of their range: faceAreaSqFt, tonsDelivered, quotedCoveragePerTon, quotedBagsPerHundred, palletTons and nextWallAreaSqFt read as not typed when they are blank or at nothing, and the figures that depend on them are returned as null. tonsNotInFace and tonsCulledOfThat are the two fields where BLANK and ZERO mean different things: blank is 'I do not know this', zero is 'none of the delivery went this way'. There is no state this endpoint describes that the page's controls cannot reach.",
  "inputs": [
    { "name": "jobName", "type": "string", "required": false, "range": "up to 48 characters", "note": "The wall in the mason's own words. It is echoed and nothing else; no figure depends on it. Nothing typed on the page is stored or sent anywhere." },
    { "name": "stoneProduct", "type": "string", "required": false, "range": "up to 48 characters", "note": "The stone exactly as the yard prints it on the tag or the ticket. Echoed, and it is the key the kit's season table groups by. No figure here depends on it." },
    { "name": "faceAreaSqFt", "type": "number", "unit": "square feet", "required": true, "range": "1 to 20000, step 0.1", "note": "The finished face as the mason measured it. Blank or nothing reads as not typed, and every per-square-foot and coverage figure is then null." },
    { "name": "jointWidthIn", "type": "number", "unit": "inches", "required": false, "range": "0 to 2, step 0.0625", "note": "The joint as measured, recorded so that a later wall is read beside this one. No output depends on it, and no joint is suggested, defaulted or recommended anywhere." },
    { "name": "quotedCoveragePerTon", "type": "number", "unit": "square feet a ton", "required": false, "range": "1 to 500, step 0.1", "note": "THE CALLER'S OWN FIGURE, read off the pallet tag or the yard's product page. This endpoint holds no coverage figure for any stone and will not supply one. Blank reads as not typed and the gap figures are then null." },
    { "name": "quotedBagsPerHundred", "type": "number", "unit": "bags a hundred square feet", "required": false, "range": "0 to 100, step 0.1", "note": "THE CALLER'S OWN FIGURE, read off the mortar sack or the maker's own table. This endpoint holds no bag figure, no mortar type and no proportion, and will not supply one. Blank or nothing reads as not typed." },
    { "name": "tonsDelivered", "type": "number", "unit": "tons", "required": true, "range": "0.1 to 60, step 0.01", "note": "Off the delivery ticket. Blank or nothing reads as not typed and nothing is computed." },
    { "name": "tonsNotInFace", "type": "number", "unit": "tons", "required": false, "range": "0 to 60, step 0.01", "note": "The pile: the stone culled at the pallet and the stone lost as offcut and breakage while laying, taken together, as the mason weighed or counted the one pile. Every figure this endpoint returns needs only this sum. BLANK means not known, and tonsInFace, achievedCoveragePerTonInFace and the gap figures built on it are then null; ZERO means the whole delivery reached the face, the credit or the part pallet." },
    { "name": "tonsCulledOfThat", "type": "number", "unit": "tons", "required": false, "range": "0 to 60, step 0.01", "note": "Of that pile, the part culled at the pallet. The offcut and breakage figure is the remainder and is never typed. A figure above the pile is held at the pile. BLANK costs no figure at all: it splits one row of the page's own fates table and nothing else." },
    { "name": "tonsReturned", "type": "number", "unit": "tons", "required": false, "range": "0 to 60, step 0.01", "note": "Stone sent back to the yard for credit, off the yard's credit note. Blank reads as nothing." },
    { "name": "tonsCarried", "type": "number", "unit": "tons", "required": false, "range": "0 to 60, step 0.01", "note": "Good stone left whole on a part pallet and carried away for the next wall. Blank reads as nothing." },
    { "name": "palletTons", "type": "number", "unit": "tons", "required": false, "range": "0.1 to 5, step 0.01", "note": "The yard's own pallet, used only to split the next wall's order into whole pallets and a part pallet. Blank reads as not typed and those two figures are null." },
    { "name": "stonePricePerTon", "type": "number", "unit": "dollars a ton", "required": true, "range": "0 to 2000, step 0.01", "note": "As invoiced by the yard. At nothing, the entry is treated as incomplete and the page prints no headline figure." },
    { "name": "deliveryCharge", "type": "number", "unit": "dollars", "required": false, "range": "0 to 2000, step 0.01", "note": "Delivery and haulage as invoiced. It is carried whole by this wall and is not credited back on a return." },
    { "name": "returnDeductionPct", "type": "number", "unit": "percent", "required": false, "range": "0 to 100, step 0.1", "note": "The yard's own deduction on a return, as a percent of the returned stone's value at the price a ton. The page takes a percent and not a flat sum; a flat deduction is the one shape this field cannot express and the page says so." },
    { "name": "bagsUsed", "type": "number", "unit": "bags", "required": false, "range": "0 to 400, step 1", "note": "Mortar bags used on the wall, the mason's own count. Blank reads as nothing." },
    { "name": "pricePerBag", "type": "number", "unit": "dollars a bag", "required": false, "range": "0 to 100, step 0.01", "note": "As invoiced." },
    { "name": "sandUsed", "type": "number", "unit": "whatever unit the invoice prices", "required": false, "range": "0 to 40, step 0.01", "note": "Sand used, in the unit the invoice prices it in (tons, yards or bags). The endpoint does not know which, and does no conversion: the quantity and the price for one of those units are multiplied together and nothing else is done with either." },
    { "name": "sandPrice", "type": "number", "unit": "dollars a unit", "required": false, "range": "0 to 2000, step 0.01", "note": "The price of one of the units sandUsed is counted in." },
    { "name": "hours", "type": "number", "unit": "hours", "required": false, "range": "0 to 2000, step 0.25", "note": "Hours on the wall off the mason's own time sheet, every pair of hands in the figure." },
    { "name": "hourlyRate", "type": "number", "unit": "dollars an hour", "required": false, "range": "0 to 500, step 0.01", "note": "THE MASON'S OWN RATE. No rate is suggested, defaulted or recommended anywhere." },
    { "name": "nextWallAreaSqFt", "type": "number", "unit": "square feet", "required": false, "range": "0 to 20000, step 0.1", "note": "The next wall's face area, if there is one to size. Blank reads as not typed and the four next-order figures are null." }
  ],
  "outputs": [
    { "name": "overrunTons", "unit": "tons", "formula": "max(0, pile + tonsReturned + tonsCarried - tonsDelivered) while tonsDelivered is typed, where a blank pile reads as nothing; 0 while tonsDelivered is not typed, because with no delivery typed there is no delivery for the typed fates to run past. Positive only where the typed fates run past a delivery that was typed, which is a typing error rather than a wall: while it is positive the page prints no headline figure and dashes the share column" },
    { "name": "tonsConsumed", "unit": "tons, or null", "formula": "tonsDelivered - tonsReturned - tonsCarried; null while tonsDelivered is not typed or overrunTons is positive" },
    { "name": "tonsInFace", "unit": "tons, or null", "formula": "tonsConsumed - pile; null while the pile is blank, while tonsDelivered is not typed, or while overrunTons is positive. It is the residue of the five fates and not a second count of the delivery: nobody weighs a finished wall" },
    { "name": "tonsOffcut", "unit": "tons, or null", "formula": "pile - tonsCulledOfThat; null while either of the two is blank. It is never typed" },
    { "name": "stoneInvoiced", "unit": "dollars, or null", "formula": "tonsDelivered x stonePricePerTon; null while the tonnage is not usable. THE TONNAGE IS USABLE when tonsDelivered is typed and overrunTons is 0, so this figure is null both while the delivery is blank and while the typed fates run past it" },
    { "name": "stoneAndDelivery", "unit": "dollars, or null", "formula": "stoneInvoiced + deliveryCharge; null while the tonnage is not usable" },
    { "name": "returnValue", "unit": "dollars, or null", "formula": "tonsReturned x stonePricePerTon; null while the tonnage is not usable" },
    { "name": "returnDeduction", "unit": "dollars, or null", "formula": "returnValue x returnDeductionPct / 100; null while the tonnage is not usable" },
    { "name": "returnCredit", "unit": "dollars, or null", "formula": "returnValue - returnDeduction; null while the tonnage is not usable" },
    { "name": "costCarriedForward", "unit": "dollars, or null", "formula": "tonsCarried x stonePricePerTon, with nothing deducted: good stone left whole is cost held out of this wall rather than cost lost; null while the tonnage is not usable" },
    { "name": "stoneCost", "unit": "dollars, or null", "formula": "stoneAndDelivery - returnCredit - costCarriedForward; null while the tonnage is not usable. Where it is not null it cannot come out below nothing, because the tonnage being usable means the return and the part pallet together did not run past the delivery; there is no state in which it is both printed and negative" },
    { "name": "mortarCost", "unit": "dollars", "formula": "bagsUsed x pricePerBag. Never null: it does not read the tonnage, so it stands while the stone-money chain is null" },
    { "name": "sandCost", "unit": "dollars", "formula": "sandUsed x sandPrice. Never null, for the same reason as mortarCost" },
    { "name": "mortarAndSandCost", "unit": "dollars", "formula": "mortarCost + sandCost. Never null" },
    { "name": "materialCost", "unit": "dollars, or null", "formula": "stoneCost + mortarAndSandCost; null while the tonnage is not usable, because stoneCost is" },
    { "name": "labourCost", "unit": "dollars", "formula": "hours x hourlyRate. Never null: the hours and the rate are typed figures and no tonnage contradicts them" },
    { "name": "totalCost", "unit": "dollars, or null", "formula": "materialCost + labourCost; null while the tonnage is not usable, because materialCost is" },
    { "name": "materialPerSqFt", "unit": "dollars a square foot, or null", "formula": "materialCost / faceAreaSqFt; null while the tonnage is not usable or while faceAreaSqFt is not typed" },
    { "name": "labourPerSqFt", "unit": "dollars a square foot, or null", "formula": "labourCost / faceAreaSqFt; null ONLY while faceAreaSqFt is not typed. It is the one per-square-foot figure that is not conditional on the tonnage, so it prints while materialPerSqFt and costPerSqFt are null" },
    { "name": "costPerSqFt", "unit": "dollars a square foot, or null", "formula": "totalCost / faceAreaSqFt; null while the tonnage is not usable or while faceAreaSqFt is not typed. It is computed from totalCost and NOT as materialPerSqFt + labourPerSqFt: the two rounded parts can add to a cent more or less than the rounded whole, and the page prints each as its own division rather than an addition that would be visibly false" },
    { "name": "achievedCoveragePerTonConsumed", "unit": "square feet a ton, or null", "formula": "faceAreaSqFt / tonsConsumed; null while tonsConsumed is null or nothing. This is the figure the next order is sized at, because a pallet of this stone at this joint arrives with the culls and the offcut it arrives with" },
    { "name": "achievedCoveragePerTonInFace", "unit": "square feet a ton, or null", "formula": "faceAreaSqFt / tonsInFace; null while tonsInFace is null or nothing, which includes every state where the pile is blank. It is dashed and never estimated" },
    { "name": "bagsPerHundredAchieved", "unit": "bags a hundred square feet, or null", "formula": "bagsUsed / faceAreaSqFt x 100" },
    { "name": "coverageGapConsumed", "unit": "square feet a ton, signed, or null", "formula": "achievedCoveragePerTonConsumed - quotedCoveragePerTon; null while either is null. The page prints its magnitude with the word more, less or level beside it, so the sign lives in the word" },
    { "name": "coverageGapConsumedPct", "unit": "percent, signed, or null", "formula": "coverageGapConsumed / quotedCoveragePerTon x 100; null while the quoted figure is not typed. It is deliberately unbounded in both directions: a stone laid at a wide joint can cover far past its tag, and a culled pallet far short of it" },
    { "name": "coverageGapInFace", "unit": "square feet a ton, signed, or null", "formula": "achievedCoveragePerTonInFace - quotedCoveragePerTon" },
    { "name": "coverageGapInFacePct", "unit": "percent, signed, or null", "formula": "coverageGapInFace / quotedCoveragePerTon x 100" },
    { "name": "bagsGap", "unit": "bags a hundred square feet, signed, or null", "formula": "bagsPerHundredAchieved - quotedBagsPerHundred" },
    { "name": "bagsGapPct", "unit": "percent, signed, or null", "formula": "bagsGap / quotedBagsPerHundred x 100" },
    { "name": "nextTons", "unit": "tons, or null", "formula": "nextWallAreaSqFt / achievedCoveragePerTonConsumed, at the ACHIEVED rate and never at the quoted one; null while either is null" },
    { "name": "nextWholePallets", "unit": "pallets, or null", "formula": "floor(nextTons / palletTons); null while either is null" },
    { "name": "nextPartPalletTons", "unit": "tons, or null", "formula": "nextTons - nextWholePallets x palletTons. A part pallet is left as a part pallet: whether a yard will break one is not an arithmetic question" },
    { "name": "nextBags", "unit": "bags, or null", "formula": "bagsPerHundredAchieved / 100 x nextWallAreaSqFt, at one decimal. It is not rounded up to a whole sack, because how many spare sacks to put on the lorry is the mason's decision" },
    { "name": "waiting", "unit": "true or false", "formula": "true while faceAreaSqFt is not typed, tonsDelivered is not typed, stonePricePerTon is nothing, or overrunTons is positive. While it is true the page's headline prints no figure at all and the sentence saying what is still wanted prints above it" }
  ],
  "formula": [
    "pile = tonsNotInFace, carried as null when blank; pile0 = pile or 0",
    "tonsCulledOfThat is held at the pile where a larger figure is typed, so the offcut remainder can never come out below nothing",
    "overrunTons = max(0, pile0 + tonsReturned + tonsCarried - tonsDelivered) while tonsDelivered is typed, and 0 while tonsDelivered is not typed. Those are the two halves of one rule and the second is not a special case bolted on: with no delivery typed there is no delivery for the typed fates to run past, so there is nothing to call an overrun. Read with the first half alone, a 20-ton pile and a blank delivery would come out at 20; the engine returns 0, and waiting is already true on the blank delivery by itself, so the headline is held back either way",
    "THE TONNAGE IS USABLE when tonsDelivered is typed and overrunTons is 0. Four formula lines below are conditional on it and say so field by field, because a positive overrun is a contradiction in the STONE tonnage and nothing else: every stone-money figure (stoneInvoiced, stoneAndDelivery, returnValue, returnDeduction, returnCredit, costCarriedForward, stoneCost) is null while the tonnage is not usable, and so are materialCost and totalCost, which are built out of stoneCost, and materialPerSqFt and costPerSqFt, which are built out of those. mortarCost, sandCost, mortarAndSandCost, labourCost and labourPerSqFt are NOT conditional on it and stand at every state: the bags, the sand and the hours are typed figures that no tonnage contradicts. labourPerSqFt therefore prints while materialPerSqFt and costPerSqFt are null, which is the one asymmetry a reader of this file would otherwise have to guess",
    "tonsConsumed = tonsDelivered - tonsReturned - tonsCarried, when the tonnage is usable, else null",
    "tonsInFace = tonsConsumed - pile, when the pile is typed and tonsConsumed is not null, else null",
    "tonsOffcut = pile - tonsCulledOfThat, when both are typed, else null",
    "while the tonnage is usable: stoneInvoiced = tonsDelivered x stonePricePerTon; stoneAndDelivery = stoneInvoiced + deliveryCharge. Both null while it is not",
    "while the tonnage is usable: returnValue = tonsReturned x stonePricePerTon; returnDeduction = returnValue x returnDeductionPct / 100; returnCredit = returnValue - returnDeduction. All three null while it is not",
    "costCarriedForward = tonsCarried x stonePricePerTon while the tonnage is usable, else null",
    "stoneCost = stoneAndDelivery - returnCredit - costCarriedForward while the tonnage is usable, else null",
    "mortarCost = bagsUsed x pricePerBag; sandCost = sandUsed x sandPrice; mortarAndSandCost = mortarCost + sandCost. None of the three is ever null: they do not read the tonnage",
    "materialCost = stoneCost + mortarAndSandCost, and totalCost = materialCost + labourCost, both null while the tonnage is not usable because stoneCost is; labourCost = hours x hourlyRate and is never null",
    "materialPerSqFt = materialCost / faceAreaSqFt and costPerSqFt = totalCost / faceAreaSqFt, both null while the tonnage is not usable or faceAreaSqFt is not typed; labourPerSqFt = labourCost / faceAreaSqFt, null only while faceAreaSqFt is not typed",
    "achievedCoveragePerTonConsumed = faceAreaSqFt / tonsConsumed when tonsConsumed > 0, else null",
    "achievedCoveragePerTonInFace = faceAreaSqFt / tonsInFace when tonsInFace > 0, else null",
    "bagsPerHundredAchieved = bagsUsed / faceAreaSqFt x 100 when faceAreaSqFt is typed, else null",
    "for each pair (got, quoted): gap = got - quoted when both are not null, else null; gapPct = gap / quoted x 100 when quoted > 0, else null",
    "nextTons = nextWallAreaSqFt / achievedCoveragePerTonConsumed when both are not null and the rate is above nothing, else null",
    "nextWholePallets = floor(nextTons / palletTons); nextPartPalletTons = nextTons - nextWholePallets x palletTons",
    "nextBags = bagsPerHundredAchieved / 100 x nextWallAreaSqFt, at one decimal",
    "waiting = faceAreaSqFt is not typed, or tonsDelivered is not typed, or stonePricePerTon is not above nothing, or overrunTons > 0"
  ],
  "identities": [
    "the five fates are typed as a partition of the delivery and tonsInFace is their residue, so tonsInFace + pile + tonsReturned + tonsCarried equals tonsDelivered by construction wherever tonsInFace is not null. There is no unaccounted line, because there is no second, independent count of the delivery to reconcile against: a mason does not weigh a finished wall",
    "pile equals tonsCulledOfThat + tonsOffcut wherever both are typed, and tonsOffcut is never typed",
    "stoneCost + mortarAndSandCost equals materialCost, and materialCost + labourCost equals totalCost, which are the two additions the page prints as their own lines",
    "costPerSqFt may differ by a cent from materialPerSqFt + labourPerSqFt, because each of the three is a rounded quotient of a rounded figure. The page prints all three as divisions of their own numerators and never as that addition",
    "achievedCoveragePerTonConsumed x tonsConsumed equals faceAreaSqFt to the rounding of the coverage figure, and the same holds in the face",
    "coverageGapConsumed equals achievedCoveragePerTonConsumed - quotedCoveragePerTon, both of them figures the page also prints, so the gap is the subtraction of two printed figures and not a third reading of either"
  ],
  "example": {
    "note": "A 410 square foot garden wall in one stone, 12 tons delivered, a pile of 1.1 tons of which 0.6 was culled at the pallet, 1.5 tons sent back at a 20 percent deduction and a 0.4 ton part pallet carried away. The tag quoted 35 square feet a ton and the sack 9 bags a hundred square feet. This is the state the page ships filled in.",
    "inputs": {
      "jobName": "Garden wall at the Mill House",
      "stoneProduct": "Cotswold random walling",
      "faceAreaSqFt": 410,
      "jointWidthIn": 0.5,
      "quotedCoveragePerTon": 35,
      "quotedBagsPerHundred": 9,
      "tonsDelivered": 12,
      "tonsNotInFace": 1.1,
      "tonsCulledOfThat": 0.6,
      "tonsReturned": 1.5,
      "tonsCarried": 0.4,
      "palletTons": 1.5,
      "stonePricePerTon": 290,
      "deliveryCharge": 120,
      "returnDeductionPct": 20,
      "bagsUsed": 38,
      "pricePerBag": 9.4,
      "sandUsed": 3,
      "sandPrice": 135,
      "hours": 46,
      "hourlyRate": 48,
      "nextWallAreaSqFt": 260
    },
    "outputs": {
      "overrunTons": 0,
      "tonsConsumed": 10.1,
      "tonsInFace": 9,
      "tonsOffcut": 0.5,
      "stoneInvoiced": 3480,
      "stoneAndDelivery": 3600,
      "returnValue": 435,
      "returnDeduction": 87,
      "returnCredit": 348,
      "costCarriedForward": 116,
      "stoneCost": 3136,
      "mortarCost": 357.2,
      "sandCost": 405,
      "mortarAndSandCost": 762.2,
      "materialCost": 3898.2,
      "labourCost": 2208,
      "totalCost": 6106.2,
      "materialPerSqFt": 9.51,
      "labourPerSqFt": 5.39,
      "costPerSqFt": 14.89,
      "achievedCoveragePerTonConsumed": 40.59,
      "achievedCoveragePerTonInFace": 45.56,
      "bagsPerHundredAchieved": 9.27,
      "coverageGapConsumed": 5.59,
      "coverageGapConsumedPct": 16,
      "coverageGapInFace": 10.56,
      "coverageGapInFacePct": 30.2,
      "bagsGap": 0.27,
      "bagsGapPct": 3,
      "nextTons": 6.41,
      "nextWholePallets": 4,
      "nextPartPalletTons": 0.41,
      "nextBags": 24.1,
      "waiting": false
    }
  },
  "not_covered": [
    "What coverage a stone gets, what a pallet holds, how many bags a hundred square feet takes, or what any of those should be. Every such figure is the caller's own, read off a tag, a sack or a drawing, and this endpoint holds none of them for any product.",
    "Mortar: no type, no proportion, no mix and no specification. The bags and their price are quantities on an invoice here and nothing else.",
    "Anything structural or statutory: wall height, footings, retaining work, lintels, flues, loadings, drawings, approvals or sign-offs. This is a record of tons, bags, hours and money after the wall is finished.",
    "How stone is worked on site, and anything about handling it.",
    "What to ask for a wall. There is no typical or average figure of any kind in this endpoint, no price guidance, and no comparison with anybody else's figures.",
    "Any comparison with a yard's calculator, a maker's table or any application. This endpoint describes its own arithmetic and says nothing about anyone else's.",
    "Stock across jobs, a season of walls, or a part pallet's life after this wall. The page answers one finished wall; the two files sold beside it are what keep a season."
  ],
  "no_advice": "Arithmetic on figures the caller types. It recommends no quantity, no rate, no price and no method, and it asks for nothing that identifies anybody."
}
