{
  "indexVersion": 1,
  "generated": "2026-10-04T13:52:48.749Z",
  "capabilities": {
    "agri.feed-ration": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-V1OvKRRt2BBf8t0BywBNkRVCR+waOkfcYQ01NvmTyRM=",
          "summary": "Ration costing and dry matter intake from each feed's fresh weight, DM % and price per tonne, in exact money.",
          "level": 2,
          "tags": [
            "feed-ration",
            "ration-costing",
            "dry-matter-intake",
            "dmi",
            "feed-cost",
            "livestock-feed",
            "cost-per-tonne-dm",
            "dairy"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-float": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "agri.feed-ration-1.0.0.fune",
            "size": 33862,
            "sha256": "8a6ebd2fd6c6a7b0668704213d0f420c4a37e94443dc205a9b82954e57361167",
            "languages": {
              "typescript": {
                "name": "agri.feed-ration-1.0.0-typescript.fune",
                "size": 24483,
                "sha256": "25a77b151a56caedc58cebcf295325a03d02f6aa09eeaa77115cfa0c0197ee3f",
                "integrity": "sha256-5EWTisxiMrPfyKRmfS3jg+AdCQq7FMI89igqKRcgc5Q="
              },
              "python": {
                "name": "agri.feed-ration-1.0.0-python.fune",
                "size": 24606,
                "sha256": "d935af61d5a16dc467cc554d6b9f41543d24f92f81278d44db6b434b1fad6070",
                "integrity": "sha256-Kx/uvgeoGDEwuvonlGbZFBF3uX7mBtTHQPIfsvj8gvM="
              },
              "rust": {
                "name": "agri.feed-ration-1.0.0-rust.fune",
                "size": 26685,
                "sha256": "e7df94042dd44e49ef9c9c9c0a32a82943369253c751e4923f5470e6504ca190",
                "integrity": "sha256-fyKTPIedzb+tgkFJHrr4uViX1foIVpXMP7jRMl48yW0="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "agri.fertiliser-application": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-GX109HMWj7c3LinKNHB6X7sN1LyvCauBz/mQijSkG6Q=",
          "summary": "Fertiliser product rate (kg/ha and total) to meet N, P2O5 and K2O targets from its analysis, limiting nutrient first.",
          "level": 2,
          "tags": [
            "fertiliser",
            "fertilizer",
            "npk",
            "application-rate",
            "nutrient-planning",
            "nitrogen",
            "phosphate",
            "potash"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.round-div": "^1.0.0",
            "math.round-float": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "agri.fertiliser-application-1.0.0.fune",
            "size": 26867,
            "sha256": "3ce76b62cdc963f22dbd95631bbdc5b4569cb9f3ad4cb1e2ea7328c16063f7a3",
            "languages": {
              "typescript": {
                "name": "agri.fertiliser-application-1.0.0-typescript.fune",
                "size": 18490,
                "sha256": "a2391190fab12624064d9f10e9c07dec5cb4b1426456d12813b5928aeb40d61d",
                "integrity": "sha256-7+lUs4TPVuEqoMo0DVP2DrIQ+/S4VWDPURHsd5mO050="
              },
              "python": {
                "name": "agri.fertiliser-application-1.0.0-python.fune",
                "size": 18648,
                "sha256": "6ab5dd9bd37cf07db64048004b31fa6e5c9e2f761d63c5b729a01a4802940a36",
                "integrity": "sha256-fIBLqEUQszC357WQ3c+ut0zDIoZ0swCx99tBkbsmnTo="
              },
              "rust": {
                "name": "agri.fertiliser-application-1.0.0-rust.fune",
                "size": 20385,
                "sha256": "9ee2c5cd2f8fbf375b05dfa6d9cb366a6a26ad8f4dd27709e532b561bacc35e4",
                "integrity": "sha256-oY28fvo9YlU8T/VH/Y64h85P/i0/Jaf1Z1WKDiIeVVI="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "agri.field-area": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-8r8lgzholKnYAlgAG9v6XRnsayEjkEYvlvbyuahleG8=",
          "summary": "Field area in square metres, hectares and acres from a boundary polygon of latitude/longitude points.",
          "level": 1,
          "tags": [
            "field-area",
            "polygon-area",
            "land-area",
            "hectares",
            "acres",
            "gps-boundary",
            "geo",
            "mapping"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.sin-cos": "^1.0.0",
            "math.round-float": "^1.0.0",
            "geo.point-in-polygon": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "agri.field-area-1.0.0.fune",
            "size": 20067,
            "sha256": "2e2dc272023c9eff0d5dfb894cadecee64c19cb251b22efe036999e3cac3a1e7",
            "languages": {
              "typescript": {
                "name": "agri.field-area-1.0.0-typescript.fune",
                "size": 14251,
                "sha256": "a24951f9a691a8dca110fa154a12e29e1869d492506a9bb2785dcd6c1b2b6844",
                "integrity": "sha256-44qpTsSNvWvPCQALahYHx3WP70U2qVvA9vc+raNGX+w="
              },
              "python": {
                "name": "agri.field-area-1.0.0-python.fune",
                "size": 14259,
                "sha256": "d7d8b768b0aabb2b6bddbbf480af740171002dc0da0150773e56bd382d71ef7a",
                "integrity": "sha256-+WLKyS/xOhY6FqeVtqvGNdr43KcyA1cLIA77tn7cl+A="
              },
              "rust": {
                "name": "agri.field-area-1.0.0-rust.fune",
                "size": 14991,
                "sha256": "a4f28343a5f145cd27e5c3141de2b7331afb481c751dc7a4730d94e45d6bfcb1",
                "integrity": "sha256-6gRm3ilrfJZtmFXcgzR7rkzWZh1WYOA4/c4y8BF8T+c="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "agri.gross-margin": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-+IRptFeFOYO7m/GpzyLPr/NgvUMJkLA33gb801ljJ5o=",
          "summary": "Enterprise gross margin (output less variable costs), in total and per hectare or per head, in exact money.",
          "level": 2,
          "tags": [
            "gross-margin",
            "enterprise-costing",
            "farm-accounts",
            "variable-costs",
            "per-hectare",
            "per-head",
            "farm-business",
            "margin"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.add": "^1.0.0",
            "money.sum": "^1.0.0",
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "agri.gross-margin-1.0.0.fune",
            "size": 27146,
            "sha256": "01046e119ccab8b1635dcb534ab490eacc1e7554bb76ec17a2b96641c60934b3",
            "languages": {
              "typescript": {
                "name": "agri.gross-margin-1.0.0-typescript.fune",
                "size": 20495,
                "sha256": "38cf9958a729313d24cf70b97586c3caa40cf2ac8e79fb7c1d4273bf578c3fce",
                "integrity": "sha256-SRuVTCtN4WYICn+RngbCZUlN2j/KXqG/3M0Fc5sLWi4="
              },
              "python": {
                "name": "agri.gross-margin-1.0.0-python.fune",
                "size": 20660,
                "sha256": "36bc6297502b732ea3da4cc376a9c0695dcf5b208c34afc78e42714755ee8a33",
                "integrity": "sha256-b8TAjAG3EKbUOk0h8UMRXD3rG+aYVt0d2xitKz/WOPA="
              },
              "rust": {
                "name": "agri.gross-margin-1.0.0-rust.fune",
                "size": 21833,
                "sha256": "1d260b2685ba01ae01194afa48a1197580f773ea1a7e19db21fe3732e8e027d0",
                "integrity": "sha256-TrVC5kWvtwCJFTND1io9TjAsDg5ZbHCGIhRyfcwmY78="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "agri.growing-degree-days": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-IsB2knDz4kHto6LG1cc+LcnRBhxGtqIgEIplSDqVdb4=",
          "summary": "Growing degree days (thermal time) from daily min/max temperatures, a base and an optional upper cap.",
          "level": 1,
          "tags": [
            "growing-degree-days",
            "gdd",
            "heat-units",
            "thermal-time",
            "degree-days",
            "crop-development",
            "t-sum",
            "temperature"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.round-div": "^1.0.0",
            "math.round-float": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "agri.growing-degree-days-1.0.0.fune",
            "size": 16359,
            "sha256": "32de959c3bba666eb438eecb3ef515d8cd611fdb6ab664a9e7bfaf32c5c31bc8",
            "languages": {
              "typescript": {
                "name": "agri.growing-degree-days-1.0.0-typescript.fune",
                "size": 10713,
                "sha256": "e00facd3db4822a2ff2257010f0b79cb8c233b165f6eb63d81bc4e8641e8680c",
                "integrity": "sha256-5mPEmpNPnXhsarXbgV5Wcr3fHEjuXfttqGbYcrIvEBU="
              },
              "python": {
                "name": "agri.growing-degree-days-1.0.0-python.fune",
                "size": 10752,
                "sha256": "e60056b8ef70b0b2da95f867e27924bc14636aedabbd0bcf4a1cfda3afde8d80",
                "integrity": "sha256-VCnzQrdC+SzaeTAUfM+aA21RJ9VtdUn4tjUEzMP2DYY="
              },
              "rust": {
                "name": "agri.growing-degree-days-1.0.0-rust.fune",
                "size": 11466,
                "sha256": "39399b3ffdc5b3e0f295232c1c7c3f8c4a97bef69a10cb47fa6b863045abfcd1",
                "integrity": "sha256-yzK3k79k19A4LDcqf0eplPqzlZAF0Qkt81op98Gqq1A="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "agri.milk-price": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-gM4yymlJSb2BI00l8d6OdKlsGzGzd//GrGCSwgeNlE0=",
          "summary": "Milk price per litre and payment from a contract's base price, butterfat/protein adjustments and bonuses.",
          "level": 2,
          "tags": [
            "milk-price",
            "milk-cheque",
            "butterfat",
            "protein",
            "constituents",
            "ppl",
            "dairy-contract",
            "seasonality"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "agri.milk-price-1.0.0.fune",
            "size": 39277,
            "sha256": "c11c5977dbfc8fb8c2181f4bb679e4b08fd9394b0a95e65f64565c17ab8a23d2",
            "languages": {
              "typescript": {
                "name": "agri.milk-price-1.0.0-typescript.fune",
                "size": 29734,
                "sha256": "e812db248ccf46053e15bf2bd56663380a329dbcc8010f219ff69246fb1753ee",
                "integrity": "sha256-w+tdXb15PgIFJHyhV162DDF9GxbXe+VrAwB17+BgZIQ="
              },
              "python": {
                "name": "agri.milk-price-1.0.0-python.fune",
                "size": 29759,
                "sha256": "b420065fcf70c2a8df77306d0b90b56f2c20f31de578d331bb43c3db74556ca5",
                "integrity": "sha256-0R5AMbaVtwrPHG7gEIQQEciUrS9NzKnC/cS3ogIM0D4="
              },
              "rust": {
                "name": "agri.milk-price-1.0.0-rust.fune",
                "size": 32208,
                "sha256": "29a1f2c758ea521f7f9b9312794a2a9e76611fe72cc036ffdb25a746cd50d3ca",
                "integrity": "sha256-yhIhQqqiGobemApdymkeeTCbr5qSrtyJTSigkJR5+vo="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "agri.seed-rate": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-1FvFn4qO6dQ3ry2vuvWALLx4CHzqzM+r6oEcA71DSzs=",
          "summary": "Seed rate in kg/ha from target plants per m², thousand-grain weight and expected establishment.",
          "level": 1,
          "tags": [
            "seed-rate",
            "sowing-rate",
            "drilling",
            "tgw",
            "thousand-grain-weight",
            "establishment",
            "cereals",
            "plant-population"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.round-div": "^1.0.0",
            "math.round-float": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "agri.seed-rate-1.0.0.fune",
            "size": 13674,
            "sha256": "0cb3c657ec361c750a3bb5c33e092b800dbfa3b731ee943c781c2f8d4c3f0672",
            "languages": {
              "typescript": {
                "name": "agri.seed-rate-1.0.0-typescript.fune",
                "size": 9396,
                "sha256": "6e9b936f54b898ed723810f3d5a3f953ce6b703efca259c375606896f0ee820d",
                "integrity": "sha256-SBhI+VTYvg6/F500KVWYoLkKiWh/mIlAReeCat8/7LQ="
              },
              "python": {
                "name": "agri.seed-rate-1.0.0-python.fune",
                "size": 9413,
                "sha256": "a61870e4fc3473d781a6727da2c8485fd10c8d366a3fc06b9d78a650d88a1962",
                "integrity": "sha256-BLKhVc4B/jJQhkH2vTAiBTbtqCQIWtcCdDLxixm5S9M="
              },
              "rust": {
                "name": "agri.seed-rate-1.0.0-rust.fune",
                "size": 9989,
                "sha256": "a2091ddb782848eaf168fdc99fb78ce4f11f4eb68556b840d67d3f40e6f9e8f2",
                "integrity": "sha256-ZSas9v9O8j+e7hD6xCrWRT+mm8KFF8LH2LTGHlh2PU0="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "agri.spray-mix": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-qFEe2vbDmv3ZKWe4NsMIHGmwIghH95cZl8CDA8sGNuo=",
          "summary": "Sprayer tank mix: tank fills, and product and water per full and part tank, for an area, water volume and dose.",
          "level": 1,
          "tags": [
            "spray-mix",
            "tank-mix",
            "sprayer-calibration",
            "pesticide",
            "crop-protection",
            "application-rate",
            "tank-fills"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.round-div": "^1.0.0",
            "math.round-float": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "agri.spray-mix-1.0.0.fune",
            "size": 22831,
            "sha256": "e224faa434d7a94b9dad07edcd9cb944b0aead628d4715817978a4d98a1cbc2f",
            "languages": {
              "typescript": {
                "name": "agri.spray-mix-1.0.0-typescript.fune",
                "size": 15068,
                "sha256": "63768ed7d890adae65917ffa6c4632b75a677b05b1cec0b24929446af6eeb324",
                "integrity": "sha256-NV+ogfHZbs8HE7ahjDJwOwjz/nzaIwviJXJAXzWeBb8="
              },
              "python": {
                "name": "agri.spray-mix-1.0.0-python.fune",
                "size": 15128,
                "sha256": "337499623b67f1641520e51a77d6679cc9b633a9547e7ab3fa6c21be16006d08",
                "integrity": "sha256-ZeRSLCzUWoLVj00szKjnrSt5dxdfddoUlRTh6M9ZJ6Y="
              },
              "rust": {
                "name": "agri.spray-mix-1.0.0-rust.fune",
                "size": 16285,
                "sha256": "0c761c199720996a9b8c2d86540a8f8f3ab80b8efd69eae0fa375a1fa0c7e53b",
                "integrity": "sha256-CapDbkWzYQT9QETOiQbP4wQVsVrz+il2X8BbvfVCuJU="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-aZwzEffFRKrGocTd0F5mMO6VTRgKRR+bb1CZczCHKe0=",
          "summary": "Sprayer tank mix: tank fills, and product and water per full and part tank, for an area, water volume and dose.",
          "level": 1,
          "tags": [
            "spray-mix",
            "tank-mix",
            "sprayer-calibration",
            "pesticide",
            "crop-protection",
            "application-rate",
            "tank-fills"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.round-div": "^1.0.0",
            "math.round-float": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "agri.spray-mix-1.0.1.fune",
            "size": 23979,
            "sha256": "865c75eea05b131780d875c1023f8d889054971285cf0ac22b48355d174d2bda",
            "languages": {
              "typescript": {
                "name": "agri.spray-mix-1.0.1-typescript.fune",
                "size": 16216,
                "sha256": "1323f9f79f8ade52b8969b797baaf382405595b0719003ddbf4bfe790754a3cb",
                "integrity": "sha256-WLNV/JiPAFUMGAAH8KPbe/8Jt5wcH4EX0hkEGhPHRMQ="
              },
              "python": {
                "name": "agri.spray-mix-1.0.1-python.fune",
                "size": 16276,
                "sha256": "374c6054963485e12c3a99de8bd7bc9b1b9eff48a5b2e8cdfeb8f8f3c53da67b",
                "integrity": "sha256-cf8oOgOG/n4oyDIR36Avf/nl3/5QtMaN7UX2/MfqvBg="
              },
              "rust": {
                "name": "agri.spray-mix-1.0.1-rust.fune",
                "size": 17433,
                "sha256": "04cea010f98e3813431539227f8cd700eedbc8c5b07f6327ac88ad4a8eb94bdb",
                "integrity": "sha256-eW0BwyUMP3+FU8smplIxLneJxvBxX/vNXWcpznoOQEI="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "agri.stocking-rate": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-3GaQQcfFRYOawnad0l74NR+hEwOgQXVbj6dQzXoZqqQ=",
          "summary": "Stocking rate: livestock units and LU per hectare from animal numbers, by a published LU coefficient table.",
          "level": 1,
          "tags": [
            "stocking-rate",
            "livestock-units",
            "lsu",
            "grazing-livestock-unit",
            "stocking-density",
            "cattle",
            "sheep",
            "grazing"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.round-div": "^1.0.0",
            "math.round-float": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/livestock-units.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "agri.stocking-rate-1.0.0.fune",
            "size": 28542,
            "sha256": "ea1c3a6fb662b798bdd6c770213897224fdec034debb3fc76dde8826212ce5ca",
            "languages": {
              "typescript": {
                "name": "agri.stocking-rate-1.0.0-typescript.fune",
                "size": 21832,
                "sha256": "ce623db5ed9e29d4ee2c7859aca3bd7ab76aee252025c70493d4fa61eec37907",
                "integrity": "sha256-yiEvPcfcZY38zP43w1wt/nQShA0b8s1ZCwsCHlyr1HE="
              },
              "python": {
                "name": "agri.stocking-rate-1.0.0-python.fune",
                "size": 22110,
                "sha256": "7a41c0d7d4437a52bf0ace09e260d2ebd53da5cafafc183740df38aa4e496f73",
                "integrity": "sha256-+Ty2pXfAN3ZQmAnLPtNRh1w7ovycUxXwRA6Jufn5Xco="
              },
              "rust": {
                "name": "agri.stocking-rate-1.0.0-rust.fune",
                "size": 23434,
                "sha256": "11ceba8b46ccbb6903856e70869206fd434d7176398cfbabcae0a06157fe9324",
                "integrity": "sha256-vJhrKyI/4xoC7lfF0VtWtFctt1jr4zd848X3iqY2asc="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-7hzZle8q1ClwDV7Rd1XWXH7Aj4sJCCpdUNhuR9oFIDk=",
          "summary": "Stocking rate: livestock units and LU per hectare from animal numbers, by a published LU coefficient table.",
          "level": 1,
          "tags": [
            "stocking-rate",
            "livestock-units",
            "lsu",
            "grazing-livestock-unit",
            "stocking-density",
            "cattle",
            "sheep",
            "grazing"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.round-div": "^1.0.0",
            "math.round-float": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "data/livestock-units.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "agri.stocking-rate-1.0.1.fune",
            "size": 29126,
            "sha256": "8445c31ba2f5ec6cb65840b2379f4ef85f0522b532fb24eeb6e45dd5e6b37c21",
            "languages": {
              "typescript": {
                "name": "agri.stocking-rate-1.0.1-typescript.fune",
                "size": 22416,
                "sha256": "590d18dd7d931e5c680956368d15f1239e66d97cc5fcacefb9e2cf8a3dfd5c85",
                "integrity": "sha256-Lo+Rizm7vPE/hhnEJt1P5LgDcqm+5h0YuuvfOQ3XSk8="
              },
              "python": {
                "name": "agri.stocking-rate-1.0.1-python.fune",
                "size": 22694,
                "sha256": "f777184933d486e1b4d3e8aeddfcafd4e2c8238bfb6d4f90e4cec923c3e39aab",
                "integrity": "sha256-8gebifcXuKqO+oV1J4wYG1c+n1gGaW88rShkeKGUn/s="
              },
              "rust": {
                "name": "agri.stocking-rate-1.0.1-rust.fune",
                "size": 24018,
                "sha256": "484e672434a78807163f052ef60343a17700b0c3f898e0132037de8ec0f9bf96",
                "integrity": "sha256-sArSBzPXVPPfFX3/coZEdbcXg76b8vae14t5DdxWNtU="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "agri.yield-per-hectare": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-5mFcRXEGBpWJP6CgyCHRrg8u4a0jy7PeWAEduQMDvBc=",
          "summary": "Crop yield per hectare and per acre from harvested quantity and field area in any area unit, exactly, as decimal text.",
          "level": 1,
          "tags": [
            "yield",
            "yield-per-hectare",
            "yield-per-acre",
            "t-ha",
            "harvest",
            "crop-yield",
            "productivity",
            "hectare"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "units.convert": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "agri.yield-per-hectare-1.0.0.fune",
            "size": 21317,
            "sha256": "86db303ddce71a7afc9145a68cf71b1b7636d48c41535e4f40fedce92a88a6ca",
            "languages": {
              "typescript": {
                "name": "agri.yield-per-hectare-1.0.0-typescript.fune",
                "size": 12286,
                "sha256": "8c434b5031eb426b0d2250da1911a8e1fbb581c048c90e53922d74a32b0a6210",
                "integrity": "sha256-G2g7BidJcw9X4fGC/KCS0KhBo+DZ2vlp03eq13ge0Zg="
              },
              "python": {
                "name": "agri.yield-per-hectare-1.0.0-python.fune",
                "size": 12253,
                "sha256": "8a1e894cfef6aad0b059ee9a209d998abb1e4d4861f667792e1eb6d66b769882",
                "integrity": "sha256-Kgt5yePqlzRdvHZjKU35MzRRosvSmg6xAWSEgIC7xtY="
              },
              "rust": {
                "name": "agri.yield-per-hectare-1.0.0-rust.fune",
                "size": 14306,
                "sha256": "c7002a3ea1bd8ccc3312f4a32ee81551241f37e597a9b160d7df8610ba3a5125",
                "integrity": "sha256-P5Ho0j4ukwXsPZlDOKU9xEcsNOfsO/uekbhl0RIT4dQ="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-EigCkRuYYexHwDXGsVDCepNf8AwIkIENfyvDWBidt6I=",
          "summary": "Crop yield per hectare and per acre from harvested quantity and field area in any area unit, exactly, as decimal text.",
          "level": 1,
          "tags": [
            "yield",
            "yield-per-hectare",
            "yield-per-acre",
            "t-ha",
            "harvest",
            "crop-yield",
            "productivity",
            "hectare"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "units.convert": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "agri.yield-per-hectare-1.0.1.fune",
            "size": 21893,
            "sha256": "5f62d53b3f77ada6b3b1cbaa826f843dc3b8732e82a6bc4b91f08c2ecc229d9a",
            "languages": {
              "typescript": {
                "name": "agri.yield-per-hectare-1.0.1-typescript.fune",
                "size": 12860,
                "sha256": "97ccd029557845480671604db094b1fb13538e069f43206a49313c1e44a1ff21",
                "integrity": "sha256-QVIr+YwECPJVzfeW/tDBiSw07F8NQzlY2sd82QqOPdA="
              },
              "python": {
                "name": "agri.yield-per-hectare-1.0.1-python.fune",
                "size": 12829,
                "sha256": "4fde26e84b0bb3985aca8dfaa268d82d0359bd6b5d3aba6daa9dd25e7f278aa7",
                "integrity": "sha256-y6LpRcr2ZzYNXK622kh32Boeu4xKyNs96YNEg8v2xAw="
              },
              "rust": {
                "name": "agri.yield-per-hectare-1.0.1-rust.fune",
                "size": 14880,
                "sha256": "d75eea8f331871990ac6b8226792d0725e3ae11d12491643fc9e150a104f9bcb",
                "integrity": "sha256-9AiVGlLEorNyFRFOYJC0F5BPa6ltqjxfoi5QFD5n5sA="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "auth.access-token": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-zB8Hz03ZqHkO5gH+6EwJBskle/Pjwa1GRN/Q6GhuHOY=",
          "summary": "Issue an API's HS256 access token, read one from an Authorization header, and refuse revoked or superseded ones.",
          "level": 2,
          "tags": [
            "access-token",
            "jwt",
            "bearer",
            "login",
            "logout",
            "session",
            "revocation",
            "api-auth"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "auth.jwt": "^1.0.0",
            "time.unix-to-iso": "^1.0.0",
            "auth.bearer-token": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python/confirm_access_token.py",
            "impl/python/issue_access_token.py",
            "impl/python/read_access_token.py",
            "impl/rust/confirm_access_token.rs",
            "impl/rust/issue_access_token.rs",
            "impl/rust/read_access_token.rs",
            "impl/typescript/confirm_access_token.ts",
            "impl/typescript/issue_access_token.ts",
            "impl/typescript/read_access_token.ts",
            "vectors.json"
          ],
          "package": {
            "name": "auth.access-token-1.0.0.fune",
            "size": 52505,
            "sha256": "7888631aeb2e12d0f775ea5737dcd9b7cbed018c016908edfac9c05877c7b035",
            "languages": {
              "typescript": {
                "name": "auth.access-token-1.0.0-typescript.fune",
                "size": 36105,
                "sha256": "1fba9b32e13f9b6369e71a4a026477391fe3dd4956fcdf4df4dd1bed9a69f4a2",
                "integrity": "sha256-J+JasT092bXMxMWlrCFpmt8lcvoL4Tdeqiit62fYYiE="
              },
              "python": {
                "name": "auth.access-token-1.0.0-python.fune",
                "size": 36485,
                "sha256": "d9d9874fc3efd43542d3ed655da22ff10e64310f2b7ede0eeddefd6ee109e4cc",
                "integrity": "sha256-49QBpomSzysPdWsLvA3I/K9y1Pn7o+aNNU/ZCNx68rk="
              },
              "rust": {
                "name": "auth.access-token-1.0.0-rust.fune",
                "size": 40705,
                "sha256": "8fa35252c65ccbacbc94bed0223d3177d0d53d57a9dfd355596b63062f0c1bb3",
                "integrity": "sha256-GCjMEM1fZrZfmuJZKYYRCupLF5YHpYfNeaXm53JBvc4="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "auth.bearer-token": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-IRLDWeeov5gkqmur8HyUj+fKbK0fWyZjuyI/PnQn4f4=",
          "summary": "The token from an HTTP Authorization header of the form \"Bearer <token>\" (RFC 6750), or null if it has none.",
          "level": 1,
          "tags": [
            "bearer",
            "authorization",
            "header",
            "oauth",
            "token",
            "rfc6750",
            "http",
            "api"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "auth.bearer-token-1.0.0.fune",
            "size": 8426,
            "sha256": "087efd10d3dfaa6bd7fa838be29eaa2233f7a031d8bda534f66e615ae3a0a064",
            "languages": {
              "typescript": {
                "name": "auth.bearer-token-1.0.0-typescript.fune",
                "size": 5907,
                "sha256": "5362858ea42a2a30eb3683d14ef53bbfd95665dad22afe49e392a29e205e9e60",
                "integrity": "sha256-fby3EGHr3jiPCcLxecY0NTFQNDyDwUC0/whqtlGuhzw="
              },
              "python": {
                "name": "auth.bearer-token-1.0.0-python.fune",
                "size": 5747,
                "sha256": "42e38fc5d3b27ca20fcccb20b85af2051aae1c08fce6913bdeb0a3219135f23d",
                "integrity": "sha256-7fWpN+8i02tF5aJJnk0kIeP3P0Yjdr+6oN6jNBuH2kY="
              },
              "rust": {
                "name": "auth.bearer-token-1.0.0-rust.fune",
                "size": 5900,
                "sha256": "f70488b1dc35085c0c13ab77f732d49b571c3401b37eefab7dc3370699aecc40",
                "integrity": "sha256-t5GJsVlPfaJMjfz/Y7X5dn0fvWHGinU5SkIDyfCgudQ="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "auth.jwt": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-zWtlIBM/9s6MEmjbGh6jH92tZTrZM4DBKXorA+tWVDQ=",
          "summary": "Sign, verify and decode HS256 JSON Web Tokens (RFC 7519): signature, algorithm and exp/nbf/iat checked with leeway.",
          "level": 1,
          "tags": [
            "jwt",
            "json-web-token",
            "hs256",
            "hmac",
            "token",
            "bearer",
            "rfc7519",
            "rfc7515"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "encoding.utf8": "^1.0.0",
            "encoding.base64": "^1.0.0",
            "crypto.hmac-sha256": "^1.0.0",
            "crypto.constant-time-equal": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python/decode_jwt.py",
            "impl/python/sign_jwt.py",
            "impl/python/verify_jwt.py",
            "impl/rust/decode_jwt.rs",
            "impl/rust/sign_jwt.rs",
            "impl/rust/verify_jwt.rs",
            "impl/typescript/decode_jwt.ts",
            "impl/typescript/sign_jwt.ts",
            "impl/typescript/verify_jwt.ts",
            "vectors.json"
          ],
          "package": {
            "name": "auth.jwt-1.0.0.fune",
            "size": 76496,
            "sha256": "d49b933c8a31983881fb84fd097f957edda9112aa4ef3ceab659720a82a5849e",
            "languages": {
              "typescript": {
                "name": "auth.jwt-1.0.0-typescript.fune",
                "size": 46291,
                "sha256": "abf6f5b9656637277eddf649f6b086e6c0a931b3f994bc1f3dc8a690057bd3fc",
                "integrity": "sha256-EbIghUoCGvIAQMQY3K2sTMrpYzIxrt7oZkkOkMOHRr8="
              },
              "python": {
                "name": "auth.jwt-1.0.0-python.fune",
                "size": 44350,
                "sha256": "dcf6f8f4df0910b23d3803d6491683feec75377d7cea7ae5cebb94fd818d9ba2",
                "integrity": "sha256-sMli8+8p2BbFgO8PzxvRNNEDnIkSUzEW4g9nMkxNGzQ="
              },
              "rust": {
                "name": "auth.jwt-1.0.0-rust.fune",
                "size": 54955,
                "sha256": "75ce6303b7f3e811bd186fb266b8af87dbca2adc39f12401e6d0d863668a0c74",
                "integrity": "sha256-GZVGpAJQSTIRcHT1GXyeka1WB2R5tcTrKLitXFOUvf0="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "auth.login-throttle": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-yzx092XcpCMvcfb2i0CJyla4bfKi9jBG9RBEtq07kKw=",
          "summary": "Allow a login attempt or lock the account out, from its recent failed attempts, with the seconds until it may retry.",
          "level": 2,
          "tags": [
            "login",
            "throttle",
            "rate-limit",
            "lockout",
            "brute-force",
            "failed-attempts",
            "retry-after",
            "security"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "auth.login-throttle-1.0.0.fune",
            "size": 18062,
            "sha256": "cb6d13f80567a633f50be0eb2ba9f2432ad3e1c6d9138f5a2bbae76f7cc2d544",
            "languages": {
              "typescript": {
                "name": "auth.login-throttle-1.0.0-typescript.fune",
                "size": 12726,
                "sha256": "b10d45dfcd55ec4065324fab6c0cfb10b2ee86c36d94827efdc11a630f8cd176",
                "integrity": "sha256-d3fBqVfyckd8ScRPpsUyDh0xxH9XiLghBOCetkiE+KE="
              },
              "python": {
                "name": "auth.login-throttle-1.0.0-python.fune",
                "size": 12817,
                "sha256": "7bcd8fda74519f8b4eafe20631571dfc56e985af536944fddbc62ae6bdaa24fb",
                "integrity": "sha256-5U86XECKA23VQfqXKyS8cfEfKc0zfZb75d5SXQp74ok="
              },
              "rust": {
                "name": "auth.login-throttle-1.0.0-rust.fune",
                "size": 13901,
                "sha256": "e5bd5f3032990cc8f47739b48e497f44d9e1e238dc8a6e3d0aa474654ef243f6",
                "integrity": "sha256-WX8Lme2Gn/vpSYPR8QxF/yMZfqRlPlZ2zLn3W5n7wwk="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "auth.normalise-email": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-Hi3/IwPEySgl0FyqkMJwgpUBcASfuyWUTBZKwk0nzBQ=",
          "summary": "Trim an email address and lower-case its domain for storage and lookup, or null if it is not a plausible address.",
          "level": 1,
          "tags": [
            "email",
            "normalise",
            "normalize",
            "canonical",
            "login",
            "signup",
            "lowercase",
            "account"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "validation.email": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "auth.normalise-email-1.0.0.fune",
            "size": 7359,
            "sha256": "40e4714dd4327fd6b0ec3548c5d72ed135e2133a354b5183a9ec1384fcbd6626",
            "languages": {
              "typescript": {
                "name": "auth.normalise-email-1.0.0-typescript.fune",
                "size": 5682,
                "sha256": "91d22161660ef305594f3b81677607a498a1b461834d6ddf66b97b75ab480788",
                "integrity": "sha256-fSCDFFzSVfROPGxwgfaQP6Nw3+ATM8jkSypBapgPp3k="
              },
              "python": {
                "name": "auth.normalise-email-1.0.0-python.fune",
                "size": 5286,
                "sha256": "89c28bd029f6d5ef364c31ebb8dc6f79afda4dc0f1e0eb565215b29b28bbff01",
                "integrity": "sha256-sVguZBH3HtsZWB8aS4+JFRE9EOZsT22c4Ur2hJB8Rg0="
              },
              "rust": {
                "name": "auth.normalise-email-1.0.0-rust.fune",
                "size": 5405,
                "sha256": "1004f6bc3b133763ea631bdabe644c59cd6318d0e2897546c756659de8edb445",
                "integrity": "sha256-TrJtvITHl1+CrTn0RoUbO1V9FQtLplVJWXR61LFDX5A="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "auth.password-hash": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-+PHtTK6qDFSNbeq1QYNhP0MmRIr6FHKo2sbnqnDzyiA=",
          "summary": "Hash a password for storage as pbkdf2_sha256$iterations$salt$hash, verify one in constant time, and spot weak hashes.",
          "level": 2,
          "tags": [
            "password",
            "hash",
            "pbkdf2",
            "verify",
            "login",
            "credentials",
            "storage",
            "rehash"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "encoding.utf8": "^1.0.0",
            "encoding.base64": "^1.0.0",
            "crypto.pbkdf2-sha256": "^1.0.0",
            "crypto.constant-time-equal": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python/hash_password.py",
            "impl/python/password_needs_rehash.py",
            "impl/python/verify_password.py",
            "impl/rust/hash_password.rs",
            "impl/rust/password_needs_rehash.rs",
            "impl/rust/verify_password.rs",
            "impl/typescript/hash_password.ts",
            "impl/typescript/password_needs_rehash.ts",
            "impl/typescript/verify_password.ts",
            "vectors.json"
          ],
          "package": {
            "name": "auth.password-hash-1.0.0.fune",
            "size": 30725,
            "sha256": "78bdf1f46fd5900c50e04361990d04d460d9ed8b68898a699f9ae11135782913",
            "languages": {
              "typescript": {
                "name": "auth.password-hash-1.0.0-typescript.fune",
                "size": 20654,
                "sha256": "3b7bd780dae27f4a70f8c3129f3d83ff344cbaccfb3981b67b1ce29cf630e382",
                "integrity": "sha256-8cbZf32RnVf7jvzBjt3fpT9Gx7pBRjXStdffAV8RdWo="
              },
              "python": {
                "name": "auth.password-hash-1.0.0-python.fune",
                "size": 20342,
                "sha256": "63e5243c090745520e1751a128bfd8c333c83e8907398573755cfcfc93a5f704",
                "integrity": "sha256-+saK84lS4WGzrYqTkBAB0txL6mYP071BlNtHmyDs7zs="
              },
              "rust": {
                "name": "auth.password-hash-1.0.0-rust.fune",
                "size": 22773,
                "sha256": "85f3471f8e83e510fc5ce10efc56a66e7b4d60058c75e5394efacecd56b67935",
                "integrity": "sha256-t9thInujyiyL/OwtYCG4+HtG5wbo9H6SGn3sCPm1oXU="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "auth.password-policy": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-uUxbhBNitcu+Hk8k8JOP36V/6PJnGf0hLMAZhFoYsx0=",
          "summary": "Check a new password against a named policy (NIST SP 800-63B-4 by default): length, common passwords, name and email.",
          "level": 2,
          "tags": [
            "password",
            "policy",
            "strength",
            "validation",
            "signup",
            "blocklist",
            "nist",
            "common-passwords"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "data/common-passwords.json",
            "data/policies.json",
            "impl/python/check_password.py",
            "impl/python/password_policy.py",
            "impl/rust/check_password.rs",
            "impl/rust/password_policy.rs",
            "impl/typescript/check_password.ts",
            "impl/typescript/password_policy.ts",
            "vectors.json"
          ],
          "package": {
            "name": "auth.password-policy-1.0.0.fune",
            "size": 91189,
            "sha256": "00a1ca90ed5beb7fb652770a21eb657e590b55e6ee1973e51c483ef6c564c4b6",
            "languages": {
              "typescript": {
                "name": "auth.password-policy-1.0.0-typescript.fune",
                "size": 77791,
                "sha256": "b0d57f20070850e60f3de29551b503d73145b417225ad36e9936ea995c340fdd",
                "integrity": "sha256-XkP8wBGoLqFD+EpBI/MHXUL/xHYuJ4Kd7jESsQF3CCc="
              },
              "python": {
                "name": "auth.password-policy-1.0.0-python.fune",
                "size": 77631,
                "sha256": "14ac483a590bfe2284db070f97398fe99b3c9a492b0ce6b6c93e823ac4062bd2",
                "integrity": "sha256-8gcGtzA8zQtUg9uSlVTDm1FDsMZylPSaWkqEOF51FEk="
              },
              "rust": {
                "name": "auth.password-policy-1.0.0-rust.fune",
                "size": 79913,
                "sha256": "39a875adf1aaf15118f316870bb8e9a558f86c9dff785ab78c80297bb142bfb1",
                "integrity": "sha256-Dvm0zNaBWWz1KFn2QkrG9BkG61k8heQF6zXPdhmiPf4="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-oNBEcA26P0hI1sujHY4htbWUEVkWi+bnaxd8Q5nLd50=",
          "summary": "Check a new password against a named policy (NIST SP 800-63B-4 by default): length, common passwords, name and email.",
          "level": 2,
          "tags": [
            "password",
            "policy",
            "strength",
            "validation",
            "signup",
            "blocklist",
            "nist",
            "common-passwords"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "NOTICE",
            "README.md",
            "data/common-passwords.json",
            "data/policies.json",
            "impl/python/check_password.py",
            "impl/python/password_policy.py",
            "impl/rust/check_password.rs",
            "impl/rust/password_policy.rs",
            "impl/typescript/check_password.ts",
            "impl/typescript/password_policy.ts",
            "vectors.json"
          ],
          "package": {
            "name": "auth.password-policy-1.0.1.fune",
            "size": 91821,
            "sha256": "fc14f2bb4a0f992a8860e5ff7867dfd44257c67365449bd312570c296594f8d3",
            "languages": {
              "typescript": {
                "name": "auth.password-policy-1.0.1-typescript.fune",
                "size": 78423,
                "sha256": "cc2fa5a1fb97aaf41fcfccdd74c76d8191c063ae802853caacafdfd9c9478445",
                "integrity": "sha256-/ZQBZlCOk0gebsrJfxKeVIxnWcfrsINxe26x23x7trY="
              },
              "python": {
                "name": "auth.password-policy-1.0.1-python.fune",
                "size": 78263,
                "sha256": "a53efbb639874c7b7bfe8255f7432b446ef45b0dd715f1705c3de40d448ffda5",
                "integrity": "sha256-OeaGy+AmzZmRW8yf/KriYW4VVMGF0pdlx0ZFlU0X7eM="
              },
              "rust": {
                "name": "auth.password-policy-1.0.1-rust.fune",
                "size": 80545,
                "sha256": "e97f94cf86651312cc9cbb8b346c7bb0e1d36db8b0c7472afe9c7104aa0d9540",
                "integrity": "sha256-/XjE1mDUtVuoY3h0lp73Ikhwkn0t1visqDoX5nZIv6g="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "auth.validate-login": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-ZTVJiMCcVgRKmpmLPTeeI6Aef1Dh01K1gKJZpzJSLI8=",
          "summary": "Check a login form (email, password): the normalised email to look up, or a message for each field to fix.",
          "level": 3,
          "tags": [
            "login",
            "signin",
            "sign-in",
            "validation",
            "form",
            "email",
            "password",
            "credentials"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "auth.normalise-email": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "auth.validate-login-1.0.0.fune",
            "size": 10888,
            "sha256": "fe4473f438dfa5de4b3d85efea93e2d2b0863864953844544b1801e656e6120f",
            "languages": {
              "typescript": {
                "name": "auth.validate-login-1.0.0-typescript.fune",
                "size": 7945,
                "sha256": "0419b9f6357434e059e7e2c20f624cbc0caa5ca905f655525b006a5aad45c40d",
                "integrity": "sha256-v7P40OFBZQa0kvPJTKbZJqO/B/tgniAFs20b1iWYEos="
              },
              "python": {
                "name": "auth.validate-login-1.0.0-python.fune",
                "size": 7797,
                "sha256": "cc70f2ae9175d767991532c81c548988ae1edcbf6b51f37b9e2a8c1bb2497deb",
                "integrity": "sha256-N0v8jxwzLhFivpp2xcTj9hox1ZI+rZVu0pIeLcg1dEc="
              },
              "rust": {
                "name": "auth.validate-login-1.0.0-rust.fune",
                "size": 8278,
                "sha256": "136bc7558749bebb48d25eb4708aa01cbd006fdbe19ca4d4cb7558a4de2329d8",
                "integrity": "sha256-GBvd9XOh6yAETIkyUgsyq+0io3RMOEpVrYKgZfl5cQc="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "auth.validate-password-change": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-5H3j92LhpFejWkFK0of8DzP1T3a+Kg4fWyX8BqjpSew=",
          "summary": "Check a change-password form: current password given and correct, new one meeting the policy and different.",
          "level": 3,
          "tags": [
            "password",
            "change",
            "reset",
            "validation",
            "form",
            "policy",
            "account",
            "settings"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "auth.password-policy": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "auth.validate-password-change-1.0.0.fune",
            "size": 17269,
            "sha256": "c95e8fac3c2b80b7c7368d312f2ba8b40486e94e4e24148e6e53940224cd20c1",
            "languages": {
              "typescript": {
                "name": "auth.validate-password-change-1.0.0-typescript.fune",
                "size": 13144,
                "sha256": "c5a6c46b00c638fae6eeec8476cfea86877569fcbc8b009fc16ce5fe60809fbd",
                "integrity": "sha256-+0byuTF4dMnwPcgIz4co7G/NxJnJQQ5/4iYEM2KnU7U="
              },
              "python": {
                "name": "auth.validate-password-change-1.0.0-python.fune",
                "size": 13171,
                "sha256": "e4e59a1a70a4bd1c69d06a228cc682adde536237d366ef995ea29b71d6ffb6ce",
                "integrity": "sha256-FicORb57dda68bPpzV8cuIUynzU/xneksjhWOEpoupU="
              },
              "rust": {
                "name": "auth.validate-password-change-1.0.0-rust.fune",
                "size": 13940,
                "sha256": "bd7af22ea8b17c72d2f74cd1ffc59f6d2304afa53a9b9d865f8ccc07e15df5f8",
                "integrity": "sha256-x074U2KlggkIkpnU9XlEiszT7LKZ6h78tNkj+uW6Tuk="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "auth.validate-registration": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-4mlqpJQusOVgz8zrgwYoOhV3U1xAfmm7AY44y0cRmBo=",
          "summary": "Validate a sign-up form (email, password, name) in one call, with a message per field, in the browser and the API alike.",
          "level": 3,
          "tags": [
            "registration",
            "signup",
            "validation",
            "form",
            "email",
            "password",
            "name",
            "account"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "auth.normalise-email": "^1.0.0",
            "auth.password-policy": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "auth.validate-registration-1.0.0.fune",
            "size": 20018,
            "sha256": "61f73a1f82c59d4baea20cec7e33b7e61e88780f6af7fc6438ddca4bad4208e4",
            "languages": {
              "typescript": {
                "name": "auth.validate-registration-1.0.0-typescript.fune",
                "size": 14510,
                "sha256": "74a399ceb980be15452b95ec6148b1d338eec23f1712330309ae24a1bd36290e",
                "integrity": "sha256-yXT4ta1olxwvDx87WQe86BxrwPsXgU+26Knf9mCGHUo="
              },
              "python": {
                "name": "auth.validate-registration-1.0.0-python.fune",
                "size": 14111,
                "sha256": "069d9c98b5d6701eb3be61fb56badf6df27f00e4b117df06f1718d8505f95afe",
                "integrity": "sha256-U9KB+fDtIGm2TrcglPV3AaqinIuCjYC3vw6B0fs1nx0="
              },
              "rust": {
                "name": "auth.validate-registration-1.0.0-rust.fune",
                "size": 15285,
                "sha256": "eb92507e265b38e4162609056dd2c65478adb80a82cf91b7e0a74bf4bd6309ef",
                "integrity": "sha256-n7oJbDbT2sj2et3p+RcqxrrP6uihHwthgjmrJxQ7/yk="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "banking.bacs-processing-date": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-EUN3AMpHUDMUKPZqdgXPBooSmGOPhtjtgUWh98WbVGk=",
          "summary": "Bacs three-day cycle: input, processing and entry (arrival) dates for a submission, skipping weekends and bank holidays.",
          "level": 2,
          "tags": [
            "banking",
            "bacs",
            "direct-credit",
            "direct-debit",
            "payroll",
            "payment-date",
            "processing-date",
            "three-day-cycle",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.day-of-week": "^1.0.0",
            "dates.bank-holidays": "^1.0.0",
            "dates.add-business-days": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "banking.bacs-processing-date-1.0.0.fune",
            "size": 16519,
            "sha256": "d6c142dfcdfc0352df592c4b9d80d19c87383647f6a4e1a3df99f140b852d8cf",
            "languages": {
              "typescript": {
                "name": "banking.bacs-processing-date-1.0.0-typescript.fune",
                "size": 11781,
                "sha256": "991ba1dbd0a53588caac5444764acd8175f4fdc59e75227f622979049692e9a4",
                "integrity": "sha256-gO6dGdG7rWUI+4K+SOpjwQvm3LvK339nPCxHYCkCRTw="
              },
              "python": {
                "name": "banking.bacs-processing-date-1.0.0-python.fune",
                "size": 11899,
                "sha256": "6dcda6bef20da7f653c34f6769936da693d91e96149a1d62b34d9f34a9ee6329",
                "integrity": "sha256-EsRNJXu8MK1TfmJ/WzEslADuHtv+Iuap2LGS83xZDrs="
              },
              "rust": {
                "name": "banking.bacs-processing-date-1.0.0-rust.fune",
                "size": 12299,
                "sha256": "b9b4eff465362eae6fadbbb8ab832dbbdf69ddec4778d1e2c0f84cc9e08badf4",
                "integrity": "sha256-x54ot3l6AhMjF0UjZuJVNzkto1gj4wJZoZi06ykrUbA="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "banking.cheque-amount-words": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-5nd6tGho4X/V6bfZ8nD7dmJ9nS1WGnpcZmG4ElCW3g8=",
          "summary": "The words and figures to write on a cheque: \"One hundred and twenty pounds and fifty pence only\", \"£120.50\".",
          "level": 2,
          "tags": [
            "banking",
            "cheque",
            "check",
            "amount",
            "words",
            "figures",
            "pounds",
            "pence",
            "writing"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "money.format": "^1.0.0",
            "text.number-to-words": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "banking.cheque-amount-words-1.0.0.fune",
            "size": 14328,
            "sha256": "80d0e873ffe7b7ee2442c5a529db085afa8ab56d9a5f17e5a870ca935d0a7a10",
            "languages": {
              "typescript": {
                "name": "banking.cheque-amount-words-1.0.0-typescript.fune",
                "size": 10569,
                "sha256": "1ded992413b284fb17bf79dd3049cabdc05aa28f90228eb8094e1b6d0d72dd0d",
                "integrity": "sha256-DwdDbT1yITM6yjkTgJnYeJY2hy5GfVFvC6uL00gEIiQ="
              },
              "python": {
                "name": "banking.cheque-amount-words-1.0.0-python.fune",
                "size": 10429,
                "sha256": "f8637a6780c8b1658b394334f24c5425e40b6cbd9a5a89db7b0bc376d241c506",
                "integrity": "sha256-qMmF+uBHj4txVN2mS/tceidHprhpIfOKr+bUJP/Kkmk="
              },
              "rust": {
                "name": "banking.cheque-amount-words-1.0.0-rust.fune",
                "size": 11178,
                "sha256": "d2d612d3e99f4d8b10f8bbca0f2c34bab15a09f72e41f27793d3fe609fe87480",
                "integrity": "sha256-GuTccS4Ll2FOn1rN0fq376MNK5D+XyQ3pqydiT1lBLY="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "banking.faster-payments-limit": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-kBMmw3OKZGC+VcC16dt6NZYr8A026IO+BySeujIzl84=",
          "summary": "Whether a Faster Payment fits the scheme maximum, the bank's per-payment limit and what is left of its daily limit.",
          "level": 1,
          "tags": [
            "banking",
            "faster-payments",
            "fps",
            "payment-limit",
            "daily-limit",
            "transfer",
            "uk",
            "pay-uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/scheme-limits.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "banking.faster-payments-limit-1.0.0.fune",
            "size": 32784,
            "sha256": "b96e25a3af5950d0b2582501c0bd301d16c5e1e3b8fc68dc31b6d7de8454e987",
            "languages": {
              "typescript": {
                "name": "banking.faster-payments-limit-1.0.0-typescript.fune",
                "size": 25010,
                "sha256": "7a1d16be574218456eaa1dc5f44c3086f142ec884c26d0ee33e12fe633ea4752",
                "integrity": "sha256-k5v55HGbtPH1t0WDWjH74uFfjhC9e5gKJ3gdqqFwgBQ="
              },
              "python": {
                "name": "banking.faster-payments-limit-1.0.0-python.fune",
                "size": 25140,
                "sha256": "5d31c7c235850cf620a3aa3ce9979e9ec16fa34497956f414432edef5e18a02b",
                "integrity": "sha256-GFncd6068ran1P/kgZPK6Ks+0DLbzaG7pdvzMU4jFc0="
              },
              "rust": {
                "name": "banking.faster-payments-limit-1.0.0-rust.fune",
                "size": 26322,
                "sha256": "0f056e42744a0f03108a96dcfa42bc8771b300689bb01421495acf475b6a7769",
                "integrity": "sha256-EsQkF1I8cxpvPHskg5uji+tVtj3fF9ikFPNVj3yNw7M="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-9Khtg9oF5Vdp8N44JS3uyAJnXTc79lvNzacYb3X++io=",
          "summary": "Whether a Faster Payment fits the scheme maximum, the bank's per-payment limit and what is left of its daily limit.",
          "level": 1,
          "tags": [
            "banking",
            "faster-payments",
            "fps",
            "payment-limit",
            "daily-limit",
            "transfer",
            "uk",
            "pay-uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/scheme-limits.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "banking.faster-payments-limit-1.0.1.fune",
            "size": 33854,
            "sha256": "fdef054961ba90af897b02b441c5d846806e7f054dc87045f8a1a856581ef746",
            "languages": {
              "typescript": {
                "name": "banking.faster-payments-limit-1.0.1-typescript.fune",
                "size": 26072,
                "sha256": "374dc0a1cf1c87f42b35f5b91396184ad718f7157f1d5a4fb818693f6a55490e",
                "integrity": "sha256-NbHkvhRnM6qh+Lx5rBjzCKgfw9UkQJhqY2Zy1neHeRY="
              },
              "python": {
                "name": "banking.faster-payments-limit-1.0.1-python.fune",
                "size": 26210,
                "sha256": "52a74b0fee6fbff76cca6c170fc5c74dc5573d586eb9daa1a4c5d89c2d92a5b0",
                "integrity": "sha256-4OFvgqVPoXTGDMcJ2zIhq+Fa+2VCtVZ64xlNJg+WpXU="
              },
              "rust": {
                "name": "banking.faster-payments-limit-1.0.1-rust.fune",
                "size": 27384,
                "sha256": "471e376c47eb6df10a0e26029f7c49e6d86d455dcd2d9cb0e5f41b00c4021617",
                "integrity": "sha256-ikYJ11+N8pYlV25OwcydMRlzZypgCxiOH3opEuqATrs="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "banking.fees-cap": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-INfDWVbzZB4OSgVxFv4yl8YWCMdvLSwQH0I3dZg61ZU=",
          "summary": "Apply a monthly fee cap to a list of account charges: charge up to the cap, waive the rest.",
          "level": 2,
          "tags": [
            "banking",
            "fees",
            "charges",
            "cap",
            "monthly-maximum-charge",
            "overdraft",
            "unarranged",
            "waiver"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "dates.add-days": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "banking.fees-cap-1.0.0.fune",
            "size": 40737,
            "sha256": "c45e5342578439b5b049d92f612659f611e4531086b25829c7475f30eeceacc2",
            "languages": {
              "typescript": {
                "name": "banking.fees-cap-1.0.0-typescript.fune",
                "size": 32755,
                "sha256": "8b3273b910e0e47c874c2c79a383400bcc006c97c6e8aed482c8ea49fd559ff8",
                "integrity": "sha256-wnUuNlSdElC1US1YEzFpr6wYusbEHjbVriGlWuF2y8U="
              },
              "python": {
                "name": "banking.fees-cap-1.0.0-python.fune",
                "size": 32643,
                "sha256": "1aad953a020c856b7a10497ef70c38802234d84d0e1832c3d4ecb8bb4523384c",
                "integrity": "sha256-yD2ZnScsSerMQxutzwslNKWRzN778sXCBiv4ikqD4Vc="
              },
              "rust": {
                "name": "banking.fees-cap-1.0.0-rust.fune",
                "size": 34443,
                "sha256": "8ef94aa9d0287fa76352641bd81ad7e6c22f0b93285723407241aadf9714cad3",
                "integrity": "sha256-PgpTb8u85Ld7YSJc17XpS9JlX/tjA4/vETZnng3kkpk="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "banking.overdraft-interest": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-HyQizV2uEQmzSDNiU30r8HJm4oq8XZ/azov1v5aQqVY=",
          "summary": "Overdraft interest for a statement period from daily balances, with an interest-free buffer.",
          "level": 2,
          "tags": [
            "banking",
            "overdraft",
            "interest",
            "current-account",
            "statement",
            "daily-balance",
            "buffer",
            "arranged-overdraft"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "dates.days-between": "^1.0.0",
            "lending.daily-interest": "^1.0.0",
            "dates.day-count-fraction": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "banking.overdraft-interest-1.0.0.fune",
            "size": 22072,
            "sha256": "bf4af41ce4dae6ab3e75bc8132ae144f69be637d26bfcd42deac96d7e9ca6b50",
            "languages": {
              "typescript": {
                "name": "banking.overdraft-interest-1.0.0-typescript.fune",
                "size": 15950,
                "sha256": "6eb4e05dc6871abcfa519f325edd897601f9b90b942d66415307df7e7d856e21",
                "integrity": "sha256-Tq5nMn8imEtybyYY5XCIJpvFiEZ/aC73hslAiu9z5wo="
              },
              "python": {
                "name": "banking.overdraft-interest-1.0.0-python.fune",
                "size": 15947,
                "sha256": "4740d7178eb82eeb063c61caea7498742d5fa0c994987eabf0270da97d5fb4a8",
                "integrity": "sha256-jWRa4AHN4At3ED/3Ft3SYQ+isXDLdT2jE4/7RcDgAkw="
              },
              "rust": {
                "name": "banking.overdraft-interest-1.0.0-rust.fune",
                "size": 16799,
                "sha256": "22c93eef23c8a1e3ed0b32cf2bc5ace36760ab7721a716634e33bde9889276c6",
                "integrity": "sha256-j7/Ku3PLSyFXxM7PClWkd/2ksyenjpEsEKfQ/9cfCmU="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "banking.savings-aer": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-KUIGk/QKoUSqcNrYmzYlRg1hGr7RFSecLja9EIFuccA=",
          "summary": "AER (annual equivalent rate) from a gross nominal rate and how often interest is paid, to two decimal places.",
          "level": 1,
          "tags": [
            "banking",
            "savings",
            "aer",
            "annual-equivalent-rate",
            "apy",
            "effective-rate",
            "compounding",
            "interest"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.big-integer": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "banking.savings-aer-1.0.0.fune",
            "size": 9250,
            "sha256": "c56d71d3e9015670eff51ce4aa5368744bbd1301c9d9d60a8e5fbb287083612e",
            "languages": {
              "typescript": {
                "name": "banking.savings-aer-1.0.0-typescript.fune",
                "size": 6741,
                "sha256": "3bacc0f2c2f1e54ad3a37cbe88aa8b563b75d91dff66b3af5f1afcd47ec88594",
                "integrity": "sha256-PYENFKG40vnY3cSjiYlejzDR2yn5BeHI3yhb+0e2yBE="
              },
              "python": {
                "name": "banking.savings-aer-1.0.0-python.fune",
                "size": 6614,
                "sha256": "dc03c3ea799c28108525ea4d90fca81fb20616347115f50e01fec0a7a53acf9e",
                "integrity": "sha256-TRoBJmBxqxjtdFgZ47rhudlj2j3ATc3xZtRjBbhnn2g="
              },
              "rust": {
                "name": "banking.savings-aer-1.0.0-rust.fune",
                "size": 6911,
                "sha256": "6e2fe23b2f0ce5aec6977228802cc9f13680c18d161125f8dfbdd425e6ac715b",
                "integrity": "sha256-kPyAxlljTWfEsCvhrd4EWY+UXuIfvl7PGI4/eDyhX2s="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "charity.donation-matching": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-U8c2FUMKieSEp18InMI96ittmDi4V7CYoh0AwaDmlDI=",
          "summary": "Employer match on a donation: a ratio in basis points, limited by a per-donor cap and a programme budget.",
          "level": 1,
          "tags": [
            "charity",
            "matched-giving",
            "match-funding",
            "employer-match",
            "corporate-giving",
            "donation",
            "cap"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "money.apply-rate": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "charity.donation-matching-1.0.0.fune",
            "size": 18175,
            "sha256": "56f6f175fee8d2980ff162ce3c1fb2cbd1539103a9132b6ecf141e0bed6c485a",
            "languages": {
              "typescript": {
                "name": "charity.donation-matching-1.0.0-typescript.fune",
                "size": 12656,
                "sha256": "bddebe83c1837dcdad3a6013f3191d5221bc20d308f13ce0b5de17fd988624d4",
                "integrity": "sha256-spi4mbAV+hzjhu3D0NKfeBXANk+QhFR7U7iigv1jtWg="
              },
              "python": {
                "name": "charity.donation-matching-1.0.0-python.fune",
                "size": 12615,
                "sha256": "3762fac8cac96471b7e5b56fafb78214a99f8ad2b227ce52e45e9559827217fa",
                "integrity": "sha256-Sp3GSE660m4zwpPg9EA9RyFgzAhxImdYtwvI/Bl1dqY="
              },
              "rust": {
                "name": "charity.donation-matching-1.0.0-rust.fune",
                "size": 13602,
                "sha256": "336bccee3735e88eb0a0496188cb927be8f603c17ccd9e5b89a548d785085e30",
                "integrity": "sha256-HT1XWtUOd8UW94rUAAgSpD83qK+V+DTzADK39Sqiry0="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "charity.fundraising-ratio": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-cT+MtRJuEQVLEttVaBZTJlZbyPtNXL/KS7ue8lcrq0Q=",
          "summary": "Cost to raise £1 and charitable spend ratio for a charity, in exact basis points.",
          "level": 1,
          "tags": [
            "charity",
            "fundraising",
            "cost-to-raise-a-pound",
            "fundraising-efficiency",
            "charitable-spend",
            "ratio",
            "kpi"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "money.currency-digits": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "charity.fundraising-ratio-1.0.0.fune",
            "size": 15131,
            "sha256": "6528fc2825b22abe8b0c8f8b6ad4776e35bac2da7b434b2b99a119ee337cd3cc",
            "languages": {
              "typescript": {
                "name": "charity.fundraising-ratio-1.0.0-typescript.fune",
                "size": 10205,
                "sha256": "e3d74847753a7f37767a333035912d0591c6a81805ee7d120adda46a80922741",
                "integrity": "sha256-iIEKkugKwNiLzVAyEgFPwAx3RZ2LF9CyjkKUkrpStFc="
              },
              "python": {
                "name": "charity.fundraising-ratio-1.0.0-python.fune",
                "size": 10185,
                "sha256": "b8ca68aecca0ddda2b11e2bc6fd3d647e482bca4ef653ff40aee034be0407530",
                "integrity": "sha256-Vdx/7fl7x/1u/6bvMpGzo4wV43SCyj11lpdLnObN3Ts="
              },
              "rust": {
                "name": "charity.fundraising-ratio-1.0.0-rust.fune",
                "size": 10959,
                "sha256": "bcbf037802e6fd9a68e273f89f8718940d946406301f0620d957c4ffee62f170",
                "integrity": "sha256-llnqq3758ECTRS3eWLtI46bRJqeMApj378Vr09lqDTM="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "charity.gasds": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-u50Bn7n1klIShE0AJ5wYbkBXT13OusPwXGOoQ3sn2vU=",
          "summary": "Gift Aid Small Donations Scheme top-up for a tax year: the £8,000 limit, the matching rule and community buildings.",
          "level": 2,
          "tags": [
            "charity",
            "gasds",
            "gift-aid",
            "small-donations",
            "top-up",
            "bucket-collection",
            "contactless",
            "community-building",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "charity.gift-aid": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/gasds-limits.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "charity.gasds-1.0.0.fune",
            "size": 29686,
            "sha256": "55064dce447c6235f47df5f7421b80cb1b00086be77e12fe13d7283830fc3fd1",
            "languages": {
              "typescript": {
                "name": "charity.gasds-1.0.0-typescript.fune",
                "size": 20913,
                "sha256": "672e0aba1d93bf95f5de836d0269c86468c66f87eecae1f2739f77c9c5940286",
                "integrity": "sha256-FETmG0saH1Oua7JY94ze78uBCPQ2HKNm+wmdW0aUnEs="
              },
              "python": {
                "name": "charity.gasds-1.0.0-python.fune",
                "size": 21016,
                "sha256": "989a93113cfb078bbb6e97522acf630b41c6a1edad79cf92b9741e50c530c59e",
                "integrity": "sha256-riSXXmarD9qAYMVsddUJ5WlqT0r3k92En3l6nSQVQFw="
              },
              "rust": {
                "name": "charity.gasds-1.0.0-rust.fune",
                "size": 22283,
                "sha256": "0c8f227a041477c577825a2db41a8167ae58dd467babb48800dc149b0acd4354",
                "integrity": "sha256-4K3AP9vr5lVDw2VfXvkqEj9z3dZxZI+bTzfXKkzJjcA="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-tzGQgW3tZiXuUh0L0/J4nsXxrSsB19yU4BCW8fWt5s4=",
          "summary": "Gift Aid Small Donations Scheme top-up for a tax year: the £8,000 limit, the matching rule and community buildings.",
          "level": 2,
          "tags": [
            "charity",
            "gasds",
            "gift-aid",
            "small-donations",
            "top-up",
            "bucket-collection",
            "contactless",
            "community-building",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "charity.gift-aid": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/gasds-limits.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "charity.gasds-1.0.1.fune",
            "size": 30266,
            "sha256": "8826f78a8f0c510faec67f508547d655dc1496d9012838013ca8d906ea2da8c5",
            "languages": {
              "typescript": {
                "name": "charity.gasds-1.0.1-typescript.fune",
                "size": 21485,
                "sha256": "9b1a6cb24ac483ad8dbab79a9f964665fcdc0268671b32b8ce5d7ddfce98aeda",
                "integrity": "sha256-KYvL45tfNwTlmGTqnhXyRuMvrPVAnrdgPvycnxKqibc="
              },
              "python": {
                "name": "charity.gasds-1.0.1-python.fune",
                "size": 21596,
                "sha256": "5a0e097317e6dd8b92876d06d483a78eac28da5f4c436992011fcb0e1fdac55d",
                "integrity": "sha256-t9us4a3M2xtyaETZ9nYkvv0V+9dkaZ/TEA2yzVC484c="
              },
              "rust": {
                "name": "charity.gasds-1.0.1-rust.fune",
                "size": 22855,
                "sha256": "be30a29d6cb9d85008d76103ce7f6c7f07039018d8007d5f427e7f25f54c16ab",
                "integrity": "sha256-wYCTDNZwXUWlZPBPLkCP9IV0HNj6oQtlyg71fIh7/ME="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.2": {
          "integrity": "sha256-OEP5G0LjhWyAzkHFreLmm8QI33Y71WljRnDAY9MJNUs=",
          "summary": "Gift Aid Small Donations Scheme top-up for a tax year: the £8,000 limit, the matching rule and community buildings.",
          "level": 2,
          "tags": [
            "charity",
            "gasds",
            "gift-aid",
            "small-donations",
            "top-up",
            "bucket-collection",
            "contactless",
            "community-building",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "charity.gift-aid": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "data/gasds-limits.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "charity.gasds-1.0.2.fune",
            "size": 30833,
            "sha256": "e275b9e6f3a916bd36b655b5f4aa92ce758c18247a01e3ea19184c513ac45c77",
            "languages": {
              "typescript": {
                "name": "charity.gasds-1.0.2-typescript.fune",
                "size": 22052,
                "sha256": "6d7385ab6bd6f691a599e55935178c7acecf153fb7279c4719ffc2c47ef51282",
                "integrity": "sha256-mhDSFDoPIcnFZT4syiEYty25eyuPCCnh/MThN9U675c="
              },
              "python": {
                "name": "charity.gasds-1.0.2-python.fune",
                "size": 22163,
                "sha256": "36232bb0f45374c633c624098a0c35d121225c611227090d97fca023246b1f13",
                "integrity": "sha256-Rf5Yt90PyezpCcTZCL6w7XjWiryYuqR+PLPMWkOEhGM="
              },
              "rust": {
                "name": "charity.gasds-1.0.2-rust.fune",
                "size": 23422,
                "sha256": "c774075042114d4bbc2b660922d38473eef331da40d092ffe3959c0f7d125c5a",
                "integrity": "sha256-xW0pgaIcgKM6dW0zn89zvLZQguwD8lcZdkeTli1om+g="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "charity.gift-aid": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-iyz2HHIItARK0wqspXv27aNZRntrfwdInecF/AIvVAs=",
          "summary": "Gift Aid a UK charity can claim on a donation: basic rate tax grossed up, 25p per £1 at 20%.",
          "level": 2,
          "tags": [
            "charity",
            "gift-aid",
            "donation",
            "tax-relief",
            "hmrc",
            "basic-rate",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/basic-rate.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "charity.gift-aid-1.0.0.fune",
            "size": 17504,
            "sha256": "31bcd5044a81ccd25dc8a5b8031328b9774c5efba42f0125fb82592bc2df0437",
            "languages": {
              "typescript": {
                "name": "charity.gift-aid-1.0.0-typescript.fune",
                "size": 11894,
                "sha256": "2eaa237e241b110ccb4f6234534acf27b696396979731eeb3e520e7c97f0e6c6",
                "integrity": "sha256-7wUrH6PrvSsS0PVUw/dyDcagd49rDtMi15JpMbuxRgE="
              },
              "python": {
                "name": "charity.gift-aid-1.0.0-python.fune",
                "size": 11902,
                "sha256": "630b92d5485dd359b1b1d109bf12b4a4c24da6df7ddd3121546dbe348005ef0c",
                "integrity": "sha256-LF5GIdLKA7Zit2r3HeBGVwMHIvFuBn0fYX+v469KQ3E="
              },
              "rust": {
                "name": "charity.gift-aid-1.0.0-rust.fune",
                "size": 12808,
                "sha256": "102d8e4d26eea7855b28b7ed3cc74a12b901dffad0d076e76ff9040c2420f92f",
                "integrity": "sha256-yFhjHC1idRq/cRCAL5Ue+5r6w1CSFp3xFSxMYuxxUaY="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-BAcPCzGEMijUwsXV0xI9r+qmDrqxP9XrutsA3o+ogPU=",
          "summary": "Gift Aid a UK charity can claim on a donation: basic rate tax grossed up, 25p per £1 at 20%.",
          "level": 2,
          "tags": [
            "charity",
            "gift-aid",
            "donation",
            "tax-relief",
            "hmrc",
            "basic-rate",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/basic-rate.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "charity.gift-aid-1.0.1.fune",
            "size": 17990,
            "sha256": "e4bafd2aea4db6e66eb48ebb4b6995c03499a576a132368d8f7a866d00b566c9",
            "languages": {
              "typescript": {
                "name": "charity.gift-aid-1.0.1-typescript.fune",
                "size": 12372,
                "sha256": "6f62de2d2f4c569a16521969849ce8492be91125900358a5887cb422b17780a9",
                "integrity": "sha256-mRvBpJ9bZzDv/fZ4QKQrA57F/R4jLp7KRGeuiR2nPCE="
              },
              "python": {
                "name": "charity.gift-aid-1.0.1-python.fune",
                "size": 12388,
                "sha256": "b582eb11be4ca71c1b71ebdef5cc77bb49d8d2266507a7d96bf50055a331371b",
                "integrity": "sha256-Njj+XmLYDvMffGd+nPXWIEaJgGHZ50SsozyFc21T6so="
              },
              "rust": {
                "name": "charity.gift-aid-1.0.1-rust.fune",
                "size": 13286,
                "sha256": "086e2fe77c70e3e78289d9ab7e1c5aa86695c3e2d2a29d28bf6b4e2ce5c2693b",
                "integrity": "sha256-dlC72wfYvR6nGn/VZgYz98oDQwrQCzzLoUyfCq++5r0="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.2": {
          "integrity": "sha256-ErwpsPqiSemOV28TbaCFxbmys4EAW0THT8/9eimIzpU=",
          "summary": "Gift Aid a UK charity can claim on a donation: basic rate tax grossed up, 25p per £1 at 20%.",
          "level": 2,
          "tags": [
            "charity",
            "gift-aid",
            "donation",
            "tax-relief",
            "hmrc",
            "basic-rate",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "data/basic-rate.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "charity.gift-aid-1.0.2.fune",
            "size": 18560,
            "sha256": "09899aa21a9b970e077beb12a42deb66e9f6710f0beffa59f313fac439e4c65e",
            "languages": {
              "typescript": {
                "name": "charity.gift-aid-1.0.2-typescript.fune",
                "size": 12942,
                "sha256": "f02c31c3cf42b18c5f7a0a0d684b4956d82256e1b82c6e091183ac2461fd1425",
                "integrity": "sha256-QXxdcn8u0toxl0am+N/+z+KWBy1WVOucgkOQFniH6SM="
              },
              "python": {
                "name": "charity.gift-aid-1.0.2-python.fune",
                "size": 12958,
                "sha256": "af3fb28fa2b488a3899a88711bab3d9a60b48cff1abb0f54d2bd0580ec66e6bf",
                "integrity": "sha256-ICccjWVVuZYkFJ1wMKZ15Yar1HFDjHeQjsWTGSlWNeM="
              },
              "rust": {
                "name": "charity.gift-aid-1.0.2-rust.fune",
                "size": 13856,
                "sha256": "d0abdad1c2a43fdea2a83ab59a5abdaf8e36b0f3705c3fb39fc2494fbd2b3a54",
                "integrity": "sha256-vgZ8g4X4KP0kYdhCo/zfuUvYswHoJcNyjDQ4R/xvL+E="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "charity.gift-aid-eligibility": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-KoxlsOKuf5GlkzgeUjBD1iufep+khdzkvwZ/foatFxI=",
          "summary": "Whether a UK donation qualifies for Gift Aid: declaration, enough tax paid, and the donor benefit limits.",
          "level": 1,
          "tags": [
            "charity",
            "gift-aid",
            "eligibility",
            "donor-benefits",
            "benefit-limit",
            "declaration",
            "hmrc",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/benefit-limits.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "charity.gift-aid-eligibility-1.0.0.fune",
            "size": 29325,
            "sha256": "d5e6836c450e8a4d33780225093b67ad6965db05294fd73d125efbfc73de770c",
            "languages": {
              "typescript": {
                "name": "charity.gift-aid-eligibility-1.0.0-typescript.fune",
                "size": 20889,
                "sha256": "ee30ccdc249b7674389d8a5c3c2e964e74268bde51c1bfe9190ef4d1eeb4b0ce",
                "integrity": "sha256-9PBwKFmgu7+BeGhwkSDuLvFBe018/d5uvwJN9GASqBw="
              },
              "python": {
                "name": "charity.gift-aid-eligibility-1.0.0-python.fune",
                "size": 20956,
                "sha256": "d232ae745f6db5ef1e75717ed3058177752e4dec9ebb5517fc5e87d51e4951a0",
                "integrity": "sha256-CGLeoyQgojDtJkbMewJdyw/hcaKjhhtf9/0J1XXpfrc="
              },
              "rust": {
                "name": "charity.gift-aid-eligibility-1.0.0-rust.fune",
                "size": 21974,
                "sha256": "50452427c42c47cbe1b4c3146662696d03f12cc92db7dcc2f82e682bd03b8f88",
                "integrity": "sha256-A8PGjdZfRk5m5C9x48e6mfkKxIiWNCWhs0BAcbllv7E="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-oYbcHKxyzXOq6M7t8lRe1hYltkqFMVMahi2DOLxGWKY=",
          "summary": "Whether a UK donation qualifies for Gift Aid: declaration, enough tax paid, and the donor benefit limits.",
          "level": 1,
          "tags": [
            "charity",
            "gift-aid",
            "eligibility",
            "donor-benefits",
            "benefit-limit",
            "declaration",
            "hmrc",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/benefit-limits.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "charity.gift-aid-eligibility-1.0.1.fune",
            "size": 29993,
            "sha256": "0bc66abcd11938618923032f62de56a88fca162d7f8cba6fe68820a524ad7a63",
            "languages": {
              "typescript": {
                "name": "charity.gift-aid-eligibility-1.0.1-typescript.fune",
                "size": 21549,
                "sha256": "7d1a60f1011c0b442ae8699ca206fed6381517bc3738071d0d6308fe7854805a",
                "integrity": "sha256-vY4x5zK54GcebTQtoiScbHfGx8LdKE2EaxGW43xB1os="
              },
              "python": {
                "name": "charity.gift-aid-eligibility-1.0.1-python.fune",
                "size": 21624,
                "sha256": "aac3fe0c402c84c2b628696e0621c1ee3321a24f0d60fa79cd92a508fe49cc16",
                "integrity": "sha256-UXkpFBo2FXCXAGXaKpTRlhCqh3zdXBk9pu2tOkX9o5g="
              },
              "rust": {
                "name": "charity.gift-aid-eligibility-1.0.1-rust.fune",
                "size": 22634,
                "sha256": "d6ce066aa257c01e707feaf9d9496ff0fefab79ec8abf3319424012c9dccc4d3",
                "integrity": "sha256-aLJHG1HYdNl5Rvvqlyr4gn1zBvaAb6+FDDQZLxOO9C0="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.2": {
          "integrity": "sha256-13UyEbOMl8P0d+GHr2l/SkNWXPYPrDfL4shozCo1Dq4=",
          "summary": "Whether a UK donation qualifies for Gift Aid: declaration, enough tax paid, and the donor benefit limits.",
          "level": 1,
          "tags": [
            "charity",
            "gift-aid",
            "eligibility",
            "donor-benefits",
            "benefit-limit",
            "declaration",
            "hmrc",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "data/benefit-limits.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "charity.gift-aid-eligibility-1.0.2.fune",
            "size": 30575,
            "sha256": "064eea4e8c0671a71b467d4fbea583f7c475ff0a1e460244fcb03e1823366dbe",
            "languages": {
              "typescript": {
                "name": "charity.gift-aid-eligibility-1.0.2-typescript.fune",
                "size": 22131,
                "sha256": "0cd468d23ceaa7c6ac5923935e8dbb34b3c0668c47ac58796037e2da22cf6603",
                "integrity": "sha256-Ot2/VaINmHpBC0fv5MwPmnCCg9ZKb5+AcuSxboLuFPA="
              },
              "python": {
                "name": "charity.gift-aid-eligibility-1.0.2-python.fune",
                "size": 22206,
                "sha256": "e30b9f36cd23ed5721c7f055db64bd100e8b93adde72c2f685c53b978d86ed5a",
                "integrity": "sha256-dU7e3dCCNlGZSa7SHf3w7mepXscVjNznQEWxtfM1i+k="
              },
              "rust": {
                "name": "charity.gift-aid-eligibility-1.0.2-rust.fune",
                "size": 23216,
                "sha256": "a01e06a0f0f0c55dc5406d2727c7a4e51ec32f2686000521ed681c0fcb3ba73d",
                "integrity": "sha256-cp7FrOnN8DXZA5+6LXbYM6TDzDSpeQK5sMalCkOSAmU="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "charity.higher-rate-relief": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-Z/7XF7MONQg+2/LJVgJCxLGFoPxQ+c5e7gQ81p9sCfg=",
          "summary": "A Gift Aid donor's extra tax relief at higher, intermediate, additional and top rates, by extending the tax bands.",
          "level": 2,
          "tags": [
            "charity",
            "gift-aid",
            "higher-rate",
            "tax-relief",
            "self-assessment",
            "basic-rate-band",
            "scottish-tax",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "charity.gift-aid": "^1.0.0",
            "payroll.income-tax": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "charity.higher-rate-relief-1.0.0.fune",
            "size": 28062,
            "sha256": "e2ac4b8686231fef1cf45c66ac8d43723d57152a6aeef90a157fc4660e0cc9cf",
            "languages": {
              "typescript": {
                "name": "charity.higher-rate-relief-1.0.0-typescript.fune",
                "size": 18239,
                "sha256": "23e3c2db5c02d17b43247ee255a59a0187a32d7f25d3c3f4d724927455bd5ead",
                "integrity": "sha256-X7Kl5t5ZvabcJc7XFnEG1CAb/hhzqu9+c9DwAXAXL1o="
              },
              "python": {
                "name": "charity.higher-rate-relief-1.0.0-python.fune",
                "size": 18172,
                "sha256": "06b94ec2786123e88897e7cf882d191abd7bbd0af92f2fe14eb28d67182d6ff3",
                "integrity": "sha256-jCj5ERWIq0HRZsxO1Xd6Sz0eWQ+YbXwPq3g4WN+egPs="
              },
              "rust": {
                "name": "charity.higher-rate-relief-1.0.0-rust.fune",
                "size": 19303,
                "sha256": "647c2833723f1aa99dbb40b740c3c0959a4f723202a6453395b8741d03ca364e",
                "integrity": "sha256-y844sh3jixXacgCNKL7+M1++Mziwf2nCUG7SsNhFdNU="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "charity.payroll-giving": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-L3upoD4R1iZoAtVwvr5gbJnWASKF24KBkYqzO7Ol49Q=",
          "summary": "UK Payroll Giving for one pay period: the donation comes off pay before PAYE, and the tax it saves the employee.",
          "level": 2,
          "tags": [
            "charity",
            "payroll-giving",
            "give-as-you-earn",
            "gaye",
            "paye",
            "donation",
            "tax-relief",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "payroll.income-tax": "^1.0.0",
            "payroll.tax-period": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "charity.payroll-giving-1.0.0.fune",
            "size": 17773,
            "sha256": "6b0c4d385fdbed84474164b57fe3c3f23e9d39a2757335f3e7ea1641e055b2ce",
            "languages": {
              "typescript": {
                "name": "charity.payroll-giving-1.0.0-typescript.fune",
                "size": 13175,
                "sha256": "275659946460d922db0282ea577abe096e5302ed9860d6d21f6fb77f9c6dbbcc",
                "integrity": "sha256-I4LDQvyLUzp6PVQdZyUEkfmLD3ptByGumj2R+Jjh1IQ="
              },
              "python": {
                "name": "charity.payroll-giving-1.0.0-python.fune",
                "size": 13118,
                "sha256": "b6f0e4be8e68bb215b79be84a523ab2a2ecbbbfc7cf6e3f819b5d8f78796514c",
                "integrity": "sha256-OIEng6rPRAqC7Qj2yCVoVT6P6l6VLXA419/90Y5RJr0="
              },
              "rust": {
                "name": "charity.payroll-giving-1.0.0-rust.fune",
                "size": 14084,
                "sha256": "708a72a75826c4088b4dc942b55421c463f7fb57686a904429ac4de53dc55f07",
                "integrity": "sha256-YrRgE+zdFb2ASBvTJnZzh2dhtu6q4Uww3AMMzfbN26M="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "charity.reclaim-batch": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-ZXUCWSuAszbeBTX+onnG8eEDIyxwt6aT2DwEuSvv3zw=",
          "summary": "Gift Aid claim totals for a period from donation records: donor lines, aggregated small gifts, tax due.",
          "level": 3,
          "tags": [
            "charity",
            "gift-aid",
            "claim",
            "charities-online",
            "repayment-claim",
            "hmrc",
            "aggregated-donations",
            "schedule"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "charity.gift-aid": "^1.0.0",
            "dates.uk-tax-year": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/aggregation.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "charity.reclaim-batch-1.0.0.fune",
            "size": 41304,
            "sha256": "995d5fa2b05115145fab470ba75db554f74130aa8d83f1415827ffedf9dbd537",
            "languages": {
              "typescript": {
                "name": "charity.reclaim-batch-1.0.0-typescript.fune",
                "size": 29960,
                "sha256": "1ca0a9aae809ce8de1178870acf2257c2353ca43d2d2107b90f959e3a2cd4180",
                "integrity": "sha256-zK86J8PoP3XOWFWeANzTG/Dqv1aGTGkAUavjcQog2Cs="
              },
              "python": {
                "name": "charity.reclaim-batch-1.0.0-python.fune",
                "size": 29769,
                "sha256": "d196dce86d80a907af49c788d92234f164909c88b85bb6479281eabd539484ca",
                "integrity": "sha256-v7TAIk3zYSif6eiSlJp23eBCHFksRjWGxZdzWXE+KUs="
              },
              "rust": {
                "name": "charity.reclaim-batch-1.0.0-rust.fune",
                "size": 32917,
                "sha256": "eb268209169981894d22ce8f0535e4990c494fb75b6d352bf2571686bd91f7f9",
                "integrity": "sha256-o/76jzoVPmrrg4R9U+IJ6hf3CTd1QzKU9e0aGjY4w+s="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-e4d/6N+XJ4IoKM8ipnTJKpF0RI+23sa1Bql1IS3c+sc=",
          "summary": "Gift Aid claim totals for a period from donation records: donor lines, aggregated small gifts, tax due.",
          "level": 3,
          "tags": [
            "charity",
            "gift-aid",
            "claim",
            "charities-online",
            "repayment-claim",
            "hmrc",
            "aggregated-donations",
            "schedule"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "charity.gift-aid": "^1.0.0",
            "dates.uk-tax-year": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "data/aggregation.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "charity.reclaim-batch-1.0.1.fune",
            "size": 41775,
            "sha256": "61c4ca7d06e99d0fef814257877c589ba302a746d61de27aaf668ef9615116ee",
            "languages": {
              "typescript": {
                "name": "charity.reclaim-batch-1.0.1-typescript.fune",
                "size": 30431,
                "sha256": "0afc77313a2d6021d648b4a91369c43974fb15daef7beee48c84c9d4037ffca2",
                "integrity": "sha256-7qeL14BPwvewoTNm0bYHhyxVgTpFaczE24ePnQi1jdo="
              },
              "python": {
                "name": "charity.reclaim-batch-1.0.1-python.fune",
                "size": 30240,
                "sha256": "89e01d9285a35c3b7f364d2e5e491e390035aa36dab0bec935b4fb95f506926a",
                "integrity": "sha256-FoauOpf+UYnCjY02T6kf9/6sWV2H54ofW8y+xyEDfxc="
              },
              "rust": {
                "name": "charity.reclaim-batch-1.0.1-rust.fune",
                "size": 33388,
                "sha256": "72146c064e63819f6c3c01386707385b228bc671385a7aa65d877129138ba10c",
                "integrity": "sha256-4fmraspu5ZiIFjNGIdGO+60COv4zELnxU3kOpnTjBqw="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "charity.regular-giving-schedule": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-IdBhUE+UVlMw4BZfNpW8lJtY5crOggFtcbIdJG1Dp2c=",
          "summary": "Collection dates for a regular gift: monthly, quarterly or annual on a day, clamped to short months, after a lead time.",
          "level": 1,
          "tags": [
            "charity",
            "regular-giving",
            "direct-debit",
            "standing-order",
            "collection-dates",
            "monthly-giving",
            "pledge",
            "schedule"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0",
            "dates.recurrence": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "charity.regular-giving-schedule-1.0.0.fune",
            "size": 13309,
            "sha256": "8c444f46d2bfebf41aa575d4afe0af1fbfa55ef813325a5987629057027978fa",
            "languages": {
              "typescript": {
                "name": "charity.regular-giving-schedule-1.0.0-typescript.fune",
                "size": 8800,
                "sha256": "b2cdfc66edc3ff25f707deeafef69280e1b7523e8d83abe40c9b5e03e942fe0b",
                "integrity": "sha256-5QqJY/CNrDNhhSneUen8keDZQSNny1sdH11tJROgoWE="
              },
              "python": {
                "name": "charity.regular-giving-schedule-1.0.0-python.fune",
                "size": 8869,
                "sha256": "cadbc71b8bb7025334f1dbc7533624ce4a281ff5f9520c5eb26203f847404d0a",
                "integrity": "sha256-NpH2s8x/HKK3+in7r2eGMFmFHWDqlje2DUkMdBuBKzc="
              },
              "rust": {
                "name": "charity.regular-giving-schedule-1.0.0-rust.fune",
                "size": 9544,
                "sha256": "164945ea2039dcf6f941c408a82aedd857a03f10d5e11268b17679f53e496435",
                "integrity": "sha256-fM1pLvOE2bI9EUODr7w8iWr3GbFDSrykgqeY6j0R4hw="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "charity.restricted-funds": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-zG1/+0b8PrUANEbjkEku8qNSPgnyh05p4lmmfnaW7As=",
          "summary": "Allocate charity spending to restricted funds first, then unrestricted funds, never overdrawing a restricted fund.",
          "level": 2,
          "tags": [
            "charity",
            "restricted-funds",
            "unrestricted",
            "fund-accounting",
            "sorp",
            "earmarked",
            "grants",
            "allocation"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "charity.restricted-funds-1.0.0.fune",
            "size": 29754,
            "sha256": "ce887799e858a67e88f6ddc95c98896573e2f59abebe531670db8ee6efe8287d",
            "languages": {
              "typescript": {
                "name": "charity.restricted-funds-1.0.0-typescript.fune",
                "size": 20993,
                "sha256": "abd94d15648961a23e08e51cd61631bb8af18b9ec4029275c3e918bb8ca28223",
                "integrity": "sha256-DYnbRgwCE3W5JaGm2ZQHLEieq/JIjDemc658jkl6DS0="
              },
              "python": {
                "name": "charity.restricted-funds-1.0.0-python.fune",
                "size": 21047,
                "sha256": "4cbdd00718cad114373535b6722b9f803be087d5daab8f75725934fd7f6daf43",
                "integrity": "sha256-j/sNM5ZNe7dVvfas0tYO9S597xSzGzVsO1OAPhuwYeg="
              },
              "rust": {
                "name": "charity.restricted-funds-1.0.0-rust.fune",
                "size": 23892,
                "sha256": "ece5118ee7058bcb6df52823d22c17861bfcefa7e703c538af443fd562f101b7",
                "integrity": "sha256-+i58YFjK5pc+YVr7hgIF7jxfJUIzT2+h+N71sUHgegw="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "charts.axis": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-wfKeBRSYUa0/X8tPjiSRcUW6DyL13/KGJz14/UhIHfc=",
          "summary": "Axis geometry as data: tick positions, tick marks, label anchors and gridlines for number, time and category axes.",
          "level": 2,
          "tags": [
            "chart",
            "axis",
            "ticks",
            "gridlines",
            "labels",
            "geometry",
            "svg"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "charts.scale": "^1.1.0",
            "charts.ticks": "^1.0.0",
            "charts.format": "^1.0.0",
            "math.round-float": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python/axis_from_ticks.py",
            "impl/python/band_axis.py",
            "impl/python/grid_lines.py",
            "impl/python/number_axis.py",
            "impl/python/time_axis.py",
            "impl/rust/axis_from_ticks.rs",
            "impl/rust/band_axis.rs",
            "impl/rust/grid_lines.rs",
            "impl/rust/number_axis.rs",
            "impl/rust/time_axis.rs",
            "impl/typescript/axis_from_ticks.ts",
            "impl/typescript/band_axis.ts",
            "impl/typescript/grid_lines.ts",
            "impl/typescript/number_axis.ts",
            "impl/typescript/time_axis.ts",
            "vectors.json"
          ],
          "package": {
            "name": "charts.axis-1.0.0.fune",
            "size": 59383,
            "sha256": "6268c1533bbe811a1db6266d76348046d8dcdf69ce89c3b86d059779b3efa45f",
            "languages": {
              "typescript": {
                "name": "charts.axis-1.0.0-typescript.fune",
                "size": 40770,
                "sha256": "834433f63940c4ec1ad43de96beb43c47f1d7e2f9e2d79073cfaa023c94463ce",
                "integrity": "sha256-sRkqt4LkFFnK6O0+iY32H85pxyPLYkuX22hHxDghXVs="
              },
              "python": {
                "name": "charts.axis-1.0.0-python.fune",
                "size": 40244,
                "sha256": "236ff795042f01fe0cd478b90e35e1156c6153a9c4fdf04e7e164e2e13e60fa1",
                "integrity": "sha256-m/ZKD4Tx1S1TZ/Dx78Jp/co8eu5FmxhtiYi51SbbLF0="
              },
              "rust": {
                "name": "charts.axis-1.0.0-rust.fune",
                "size": 44455,
                "sha256": "298f076b455ec3e5053a6025b07e64f8c72092464048c82e65268b921747bcee",
                "integrity": "sha256-khJX38981vxKoVPrn3wLbvoNf+7ycRELsDed5pIpnhI="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-mLoq+RpiW4cRJmm+Xjr/EwZj7+EOdp8N3FfY/UPXgJI=",
          "summary": "Axis geometry as data: tick positions, tick marks, label anchors and gridlines for number, time and category axes.",
          "level": 2,
          "tags": [
            "chart",
            "axis",
            "ticks",
            "gridlines",
            "labels",
            "geometry",
            "svg"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "charts.scale": "^1.1.0",
            "charts.ticks": "^1.0.0",
            "charts.format": "^1.0.0",
            "math.round-float": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python/axis_from_ticks.py",
            "impl/python/band_axis.py",
            "impl/python/grid_lines.py",
            "impl/python/number_axis.py",
            "impl/python/time_axis.py",
            "impl/rust/axis_from_ticks.rs",
            "impl/rust/band_axis.rs",
            "impl/rust/grid_lines.rs",
            "impl/rust/number_axis.rs",
            "impl/rust/time_axis.rs",
            "impl/typescript/axis_from_ticks.ts",
            "impl/typescript/band_axis.ts",
            "impl/typescript/grid_lines.ts",
            "impl/typescript/number_axis.ts",
            "impl/typescript/time_axis.ts",
            "vectors.json"
          ],
          "package": {
            "name": "charts.axis-1.0.1.fune",
            "size": 69750,
            "sha256": "4aec0b33d90de1c1c687dff41d21141c1182ad88190729c54bf4fc3fbd7c0d4d",
            "languages": {
              "typescript": {
                "name": "charts.axis-1.0.1-typescript.fune",
                "size": 51137,
                "sha256": "937f6a549b59f78363556b93c2fe9a216a9d6e3ba0c9f9c469c2a39e6614ecb1",
                "integrity": "sha256-DsreKs2irw2u+R2TgnBTSyS6/7DFAm+uasaG6Mf6Xp4="
              },
              "python": {
                "name": "charts.axis-1.0.1-python.fune",
                "size": 50611,
                "sha256": "d5852cfa9dc59289eef6daa85617a950973dc61a0d5f830b658e8930ff409c5a",
                "integrity": "sha256-4UAfB2Zj28CHjMttP/3et8Fp7/O2PUF99XtnvTa9O5c="
              },
              "rust": {
                "name": "charts.axis-1.0.1-rust.fune",
                "size": 54822,
                "sha256": "0c3ad3cfdb80710a0ce8caa3cfc29a801090ddff0a954da565c40c4856f17dfd",
                "integrity": "sha256-kiZDjse3cGJqvXQXNbKngOuZpV6qi0KgqJpBu/C5agc="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "charts.bar-chart": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-PK3MImV9on5SwrUzsKDC6JtBlsXJCLqswUIVgXcTS0Q=",
          "summary": "Complete bar chart geometry as data, grouped or stacked: plot area, axes, gridlines, bar rectangles, colours, legend.",
          "level": 3,
          "tags": [
            "chart",
            "bar-chart",
            "column-chart",
            "stacked",
            "grouped",
            "svg",
            "geometry",
            "legend"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "charts.axis": "^1.0.0",
            "charts.scale": "^1.1.0",
            "charts.shape": "^1.0.0",
            "charts.stack": "^1.0.0",
            "charts.ticks": "^1.0.0",
            "charts.format": "^1.0.0",
            "charts.layout": "^1.0.0",
            "charts.palette": "^1.0.0",
            "math.round-float": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "charts.bar-chart-1.0.0.fune",
            "size": 38104,
            "sha256": "f2f19f88e0020d7eca1278bfe4cc959f8ef94dad942d2107c08b3fe086f020f3",
            "languages": {
              "typescript": {
                "name": "charts.bar-chart-1.0.0-typescript.fune",
                "size": 23917,
                "sha256": "5310a2625443b73851df12449ff1dd17f8f61c38f9d372869e02d1c229b33a1d",
                "integrity": "sha256-hDYARRmVOupzPxL+IpMmRyQLlh3y1CkUgarnVoAmsxk="
              },
              "python": {
                "name": "charts.bar-chart-1.0.0-python.fune",
                "size": 23615,
                "sha256": "e7fc98243b38ab51c88375357b0449a05fa530b038a06258772784122daa282b",
                "integrity": "sha256-XSSzd1Lt1RJi92vFnxlTQLRwYmwy3W2iqPYBHimaWZ0="
              },
              "rust": {
                "name": "charts.bar-chart-1.0.0-rust.fune",
                "size": 26996,
                "sha256": "595ea5d6d4b4c2d0b06a0548425742ba939a216fcf617ee46e8f13992f6ec7ef",
                "integrity": "sha256-ebEDnSeJ22zKX6ilLYcYo+bnKvudwQoHIAKQzC4BNrY="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "charts.color": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-AYbpHHYKT2G7i9+94kj+OMRNcwgED+shjrGwk+G72B0=",
          "summary": "Hex colours to RGB and back, and sRGB channels to linear light and back, identically in every language.",
          "level": 0,
          "tags": [
            "color",
            "colour",
            "hex",
            "rgb",
            "srgb",
            "gamma",
            "linear",
            "chart"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.pow": "^1.0.0",
            "math.round-float": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python/linear_to_srgb.py",
            "impl/python/parse_hex.py",
            "impl/python/srgb_to_linear.py",
            "impl/python/to_hex.py",
            "impl/rust/linear_to_srgb.rs",
            "impl/rust/parse_hex.rs",
            "impl/rust/srgb_to_linear.rs",
            "impl/rust/to_hex.rs",
            "impl/typescript/linear_to_srgb.ts",
            "impl/typescript/parse_hex.ts",
            "impl/typescript/srgb_to_linear.ts",
            "impl/typescript/to_hex.ts",
            "vectors.json"
          ],
          "package": {
            "name": "charts.color-1.0.0.fune",
            "size": 19719,
            "sha256": "828b8ee0f7f2de31e8dcab050778b11b0d6c822f5a3360d54d9f6c63110b136e",
            "languages": {
              "typescript": {
                "name": "charts.color-1.0.0-typescript.fune",
                "size": 13139,
                "sha256": "d2521de91ace253b676048af7b30c6edd15641893179503993aa534b18e9677b",
                "integrity": "sha256-N7z10e0FIxEelouxBPX5LMSfKKy9GW2fZhMijUF2jS4="
              },
              "python": {
                "name": "charts.color-1.0.0-python.fune",
                "size": 12790,
                "sha256": "30f23264859138792663b2cb2d624b681338b601075c4443dac8be43d1ef2066",
                "integrity": "sha256-X+W4kcxmnKIE7YRFT0hQaDlrNfYzTv7p3pKVSsgVA9U="
              },
              "rust": {
                "name": "charts.color-1.0.0-rust.fune",
                "size": 13808,
                "sha256": "da761fad2348b48e1f542fe859197e8be015e415c533f403b2f26eaaccc897d0",
                "integrity": "sha256-UHabTd8pCLkZm7WVc4nK+L4yRUHySqg8mcVchgpmvrM="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-0biub6MSTof1AIqztgvCt31Pgh5j1lFF35D4DnkMmLg=",
          "summary": "Hex colours to RGB and back, and sRGB channels to linear light and back, identically in every language.",
          "level": 0,
          "tags": [
            "color",
            "colour",
            "hex",
            "rgb",
            "srgb",
            "gamma",
            "linear",
            "chart"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.pow": "^1.0.0",
            "math.round-float": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python/linear_to_srgb.py",
            "impl/python/parse_hex.py",
            "impl/python/srgb_to_linear.py",
            "impl/python/to_hex.py",
            "impl/rust/linear_to_srgb.rs",
            "impl/rust/parse_hex.rs",
            "impl/rust/srgb_to_linear.rs",
            "impl/rust/to_hex.rs",
            "impl/typescript/linear_to_srgb.ts",
            "impl/typescript/parse_hex.ts",
            "impl/typescript/srgb_to_linear.ts",
            "impl/typescript/to_hex.ts",
            "vectors.json"
          ],
          "package": {
            "name": "charts.color-1.0.1.fune",
            "size": 21407,
            "sha256": "0057820f92301d76cf2398e9b40b4a0afd23d46a3dfb780173bc780bdaa04082",
            "languages": {
              "typescript": {
                "name": "charts.color-1.0.1-typescript.fune",
                "size": 14524,
                "sha256": "c1284d6520a0ecd272ba8004ad63f42cacf35e56779ee073cab965b08a5c797d",
                "integrity": "sha256-zTJtUqEEiN9zE4/mlZg8+PZuKSLF3eGGKqRaV1MGqFg="
              },
              "python": {
                "name": "charts.color-1.0.1-python.fune",
                "size": 14175,
                "sha256": "b404a4f035e55e188c9159e53fe4505b388fa1a9bf12e09ac243b96e58f62671",
                "integrity": "sha256-CXOLRAuBCBLzyP46hKr1TM/V5l2CP9kLZPp6Pt1Ti1M="
              },
              "rust": {
                "name": "charts.color-1.0.1-rust.fune",
                "size": 15496,
                "sha256": "1129e0c54275b0a93936656e97e121a117a826530f730f1511e19bcee45ec7b5",
                "integrity": "sha256-ytL/cUQnJDtwnmWu5iL28N0s8yIbxLd+qriwnxVFqSM="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "charts.contrast": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-LkOJM9KNXcwaSDguotl5Rudsnaz0XqvaIG5CSAVY3AE=",
          "summary": "WCAG 2.x contrast ratio between two colours, and which text colour reads best on a background.",
          "level": 0,
          "tags": [
            "color",
            "colour",
            "contrast",
            "wcag",
            "accessibility",
            "a11y",
            "luminance",
            "readable-text"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "charts.color": "^1.0.0",
            "math.round-float": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python/contrast_ratio.py",
            "impl/python/readable_text_color.py",
            "impl/rust/contrast_ratio.rs",
            "impl/rust/readable_text_color.rs",
            "impl/typescript/contrast_ratio.ts",
            "impl/typescript/readable_text_color.ts",
            "vectors.json"
          ],
          "package": {
            "name": "charts.contrast-1.0.0.fune",
            "size": 13998,
            "sha256": "8df0a1cc226f71b52191a6179462ce49d8e1b679809122fe20ee84efe740755b",
            "languages": {
              "typescript": {
                "name": "charts.contrast-1.0.0-typescript.fune",
                "size": 10152,
                "sha256": "65307b92ec20836dd78e6eba567091d70c200e6856c857a52528258de7783e72",
                "integrity": "sha256-w/nRgNfv2UrvGVMdWhtL4D9/xke6dp6BXMpQZYK5pTI="
              },
              "python": {
                "name": "charts.contrast-1.0.0-python.fune",
                "size": 9745,
                "sha256": "6b74e81402679ae224feb50ff4276c50a9ecc75fdca2aeaec5b47513a9aca089",
                "integrity": "sha256-odji+SHGLntA7wPNLjurYxNcozthnhH220anGg5p8VY="
              },
              "rust": {
                "name": "charts.contrast-1.0.0-rust.fune",
                "size": 10307,
                "sha256": "e20dafcce9e90e26589609ef387a55f6bc98ee52d8ee89569f2716e534f1c14f",
                "integrity": "sha256-F9iw/nMxW+H0iAdhCRB0hdYHAgLnrz+Kn1Z2g2csvx0="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "charts.downsample": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-DKlED4xGnfm8N5X+O3J1uvBP2rFg8T5oKKAFgt1EPo0=",
          "summary": "Reduce a long series to a few points that keep its visual shape, by Largest-Triangle-Three-Buckets (LTTB).",
          "level": 1,
          "tags": [
            "chart",
            "downsample",
            "lttb",
            "decimate",
            "simplify",
            "time-series",
            "performance",
            "thin"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "charts.downsample-1.0.0.fune",
            "size": 12548,
            "sha256": "1bcd3904463d0878e1dc0d38bc89b7df090dc3aef3892e82c30ff23e2b1a3e95",
            "languages": {
              "typescript": {
                "name": "charts.downsample-1.0.0-typescript.fune",
                "size": 8601,
                "sha256": "ebb2016a7621cadbbe8b562b051c385b5dc15e6a330f6997c867030eea270ee6",
                "integrity": "sha256-t3XJa/AVLD+LDW9aMKOQ3K/FCVpmexRsIfgUKjvfayk="
              },
              "python": {
                "name": "charts.downsample-1.0.0-python.fune",
                "size": 8049,
                "sha256": "4e3aafae1b33a119d1dcd2ff8fc426475c2a845c82606071d4b690c6ccbaf347",
                "integrity": "sha256-I6WbXFSWqfeXcpwgo9C09anjTpAuab8G7/luw1DwA9E="
              },
              "rust": {
                "name": "charts.downsample-1.0.0-rust.fune",
                "size": 8692,
                "sha256": "9ecc1fdbc6d113950bf47d7a0ed5eb879c6ca2e75284b0a8546961eec2241d23",
                "integrity": "sha256-z36/8yqeHrxzISkxv/dCyCMhael3+pR+ELArPGadyQk="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "charts.extent": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-ZM2bgbGtFVO+SHW4H3qJMUKfhvHG7LL+2o2Jc8h5sl0=",
          "summary": "The minimum and maximum of a series as [min, max], skipping gaps (null), or null when there is no value.",
          "level": 0,
          "tags": [
            "chart",
            "extent",
            "min",
            "max",
            "range",
            "domain",
            "gaps",
            "series"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "charts.extent-1.0.0.fune",
            "size": 6037,
            "sha256": "1b4a60b9f50bc1532a1136f2c266c61f9386fb5a55f1f62ffddb0a968a0bd8c8",
            "languages": {
              "typescript": {
                "name": "charts.extent-1.0.0-typescript.fune",
                "size": 4142,
                "sha256": "d76cca7c34ab58d608df793aeb7aaf4952d55ced166e864df09f6e81fbb10c47",
                "integrity": "sha256-tD3z0/niUbG5ptDq+fD0IRHVba4Olrj4H1scul3MFZk="
              },
              "python": {
                "name": "charts.extent-1.0.0-python.fune",
                "size": 4148,
                "sha256": "7efe937d84f56de95dbc96f8ce6e54b1ed5263691d51ab4a96ba5fabaaa0f385",
                "integrity": "sha256-0+H92wpbDkUANMIfspuC4Py9FnaH+0HnS1OVhOOZeYs="
              },
              "rust": {
                "name": "charts.extent-1.0.0-rust.fune",
                "size": 4333,
                "sha256": "54f236233a981e8529544b6a6e81d3329a96e34699848ff2afb443bf4fea9bda",
                "integrity": "sha256-WVsO6p+4ZCGA0JD0IHkokZFd4qIvpqUIyc9XOySKJAk="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-0F4Hq44rKjSZn9Ozyhoz6rF2ldBmvrQEk8H7j9OvVA4=",
          "summary": "The minimum and maximum of a series as [min, max], skipping gaps (null), or null when there is no value.",
          "level": 0,
          "tags": [
            "chart",
            "extent",
            "min",
            "max",
            "range",
            "domain",
            "gaps",
            "series"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "charts.extent-1.0.1.fune",
            "size": 7183,
            "sha256": "399353815202eee83b7de1869a785a3df6ca52d42d567693e8d053b41db659b9",
            "languages": {
              "typescript": {
                "name": "charts.extent-1.0.1-typescript.fune",
                "size": 4962,
                "sha256": "418af12ad7d705b13efbd4a69975b4af3f460146acf15b7b6f0ee0e752cc08b2",
                "integrity": "sha256-zUbr5SPew58Up/AYBkQD7CxwxHk9GeTWWdyfbkDCfIo="
              },
              "python": {
                "name": "charts.extent-1.0.1-python.fune",
                "size": 4968,
                "sha256": "bbcc45e1db26043d3c74c066f94a851215e637a175746336041b1c6b82dd183d",
                "integrity": "sha256-Gr+qc26meEhGCN4YrLo+pindwJHq6zQitOH7DKFJM4o="
              },
              "rust": {
                "name": "charts.extent-1.0.1-rust.fune",
                "size": 5479,
                "sha256": "f088781e286c9dc50b9cf84bb5b6b69ff5468b95f053ffd98db13d236dacaa18",
                "integrity": "sha256-hCXutT4ys6dujlyJCKGDaiI+w3MHri5YM+w/SnXUhpg="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "charts.format": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-EYCDhJDWTU269OxBTcW04G9ANX5GmwO+whosv20Prm8=",
          "summary": "Axis and label text for charts: tick numbers, SI prefixes (1.2k, 3.4M), percentages, dates and money.",
          "level": 1,
          "tags": [
            "chart",
            "format",
            "tick",
            "label",
            "axis",
            "si-prefix",
            "percent",
            "number-format"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "money.format": "^1.0.0",
            "dates.add-days": "^1.0.0",
            "math.round-float": "^1.0.0",
            "text.format-decimal": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python/format_date.py",
            "impl/python/format_money_tick.py",
            "impl/python/format_percent.py",
            "impl/python/format_si.py",
            "impl/python/format_tick.py",
            "impl/rust/format_date.rs",
            "impl/rust/format_money_tick.rs",
            "impl/rust/format_percent.rs",
            "impl/rust/format_si.rs",
            "impl/rust/format_tick.rs",
            "impl/typescript/format_date.ts",
            "impl/typescript/format_money_tick.ts",
            "impl/typescript/format_percent.ts",
            "impl/typescript/format_si.ts",
            "impl/typescript/format_tick.ts",
            "vectors.json"
          ],
          "package": {
            "name": "charts.format-1.0.0.fune",
            "size": 34031,
            "sha256": "90a9db7883d51cbff8d67baa2bc4c41feb39fc5e9c4820bafa27f68ded7fcadd",
            "languages": {
              "typescript": {
                "name": "charts.format-1.0.0-typescript.fune",
                "size": 22854,
                "sha256": "a009d2d1d9d4cdd39ef7db2dc1c1a73783886d8859c8283a428d10f066be5119",
                "integrity": "sha256-twFR65WT7egNpj6I+cOZD7CiskDXs9KnQDVbaSs9lRU="
              },
              "python": {
                "name": "charts.format-1.0.0-python.fune",
                "size": 21686,
                "sha256": "c78ff97c30d38ba939417ea930d362cc0b31de5ecad3af6833ead003ce8650c5",
                "integrity": "sha256-WYhdXuo4YK5WIWJqbUTA6wL9H1sR9xcSUwj1Wuf1F3k="
              },
              "rust": {
                "name": "charts.format-1.0.0-rust.fune",
                "size": 22637,
                "sha256": "c5a5a7b8f62a1e0233440694464f5607f28b8861ba39f041f52c1c70a438ad35",
                "integrity": "sha256-Wl56dqBEFU7RrFUn3CuaUes8PsZNNLzMNj50SYvgae0="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "charts.histogram-bins": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-whoujOTR+IzlAEQGgRImpNCi01mh35QJEcaI+u8jcm0=",
          "summary": "Bin values into histogram bins on round edges, by Sturges' rule, Freedman-Diaconis, or a fixed width.",
          "level": 1,
          "tags": [
            "chart",
            "histogram",
            "bins",
            "binning",
            "distribution",
            "sturges",
            "freedman-diaconis",
            "frequency"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.pow": "^1.0.0",
            "charts.ticks": "^1.0.0",
            "math.round-float": "^1.0.0",
            "stats.percentile": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "charts.histogram-bins-1.0.0.fune",
            "size": 20490,
            "sha256": "670e89879fefdf330fd24fb0245816b60333ca6a97345040574f0e8cab8b1915",
            "languages": {
              "typescript": {
                "name": "charts.histogram-bins-1.0.0-typescript.fune",
                "size": 12690,
                "sha256": "7797cdfbf64b2a6d893aa934ed1ee42f82a0e78cbbe1e8075faee7ce05d2b239",
                "integrity": "sha256-dzGdwHOnhOKvL3sPKPqYc+pfHYH0VWKrsB5+bfsSFok="
              },
              "python": {
                "name": "charts.histogram-bins-1.0.0-python.fune",
                "size": 12333,
                "sha256": "32bad32a21074762d27474266304a90c2e3c30cfb44b143b19b81908c99ebbb5",
                "integrity": "sha256-eMDXN6Ra8rJC7BNvrcCTJ7EVhZextjghiauM97l29Tw="
              },
              "rust": {
                "name": "charts.histogram-bins-1.0.0-rust.fune",
                "size": 13371,
                "sha256": "d438d4fa528bb642a769c50d571035aa942290c7c806a9802e5a0d1cae014797",
                "integrity": "sha256-OdcEfMcFpNNtt/lJhKcML1vcVbaFuU5kdxWWYKh6Z4I="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "charts.interpolate-color": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-6oQ+ZkJc6vKSKYSVqDaaUG7ZVcb6CWk+l6eDEIc/dvI=",
          "summary": "The colour at a point along a sequential or diverging ramp, mixed in OKLab so steps look even; hex in, hex out.",
          "level": 1,
          "tags": [
            "color",
            "colour",
            "interpolate",
            "ramp",
            "gradient",
            "oklab",
            "heatmap",
            "choropleth"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.pow": "^1.0.0",
            "charts.color": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "charts.interpolate-color-1.0.0.fune",
            "size": 13843,
            "sha256": "c3d3905de48b75779c0b1151ccd87042a60c07fb0cd554391849dfc1c8153a48",
            "languages": {
              "typescript": {
                "name": "charts.interpolate-color-1.0.0-typescript.fune",
                "size": 8531,
                "sha256": "caec4d281d99b0fb6dc928d4ff43f675bb4a79468b61f8c8c82f27ec8fc8da9d",
                "integrity": "sha256-jqCl5z2JM3zdc6eghMqdEOmZvqJSPcoKkIBXLquFf9U="
              },
              "python": {
                "name": "charts.interpolate-color-1.0.0-python.fune",
                "size": 8374,
                "sha256": "3e8188580360cc62e866c75cc39a774eab267ee9f83df787b196c5836f3a4e4c",
                "integrity": "sha256-59ng9P6bIEHq8c2Bl9ux9Tu93NCi002cVl3n9TKZP6w="
              },
              "rust": {
                "name": "charts.interpolate-color-1.0.0-rust.fune",
                "size": 8634,
                "sha256": "88b0ea583587ff188d99c1c34f327e8ee2c10ad5746d21874267216e9c6a2f7f",
                "integrity": "sha256-i7qAsS4bqy5atNWg1q0c1syIQGI/3s1jdGlS9ofBbCs="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "charts.layout": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-o4lfHX/Wo23Vi9NtSv2rI5fyNVUDn8SyqrlesP0uUTk=",
          "summary": "Chart layout: the plot area inside margins, legend items wrapped into rows, and greedy label collision avoidance.",
          "level": 2,
          "tags": [
            "chart",
            "layout",
            "margins",
            "plot-area",
            "legend",
            "labels",
            "collision",
            "overlap"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.round-float": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python/avoid_collisions.py",
            "impl/python/legend_rows.py",
            "impl/python/plot_area.py",
            "impl/rust/avoid_collisions.rs",
            "impl/rust/legend_rows.rs",
            "impl/rust/plot_area.rs",
            "impl/typescript/avoid_collisions.ts",
            "impl/typescript/legend_rows.ts",
            "impl/typescript/plot_area.ts",
            "vectors.json"
          ],
          "package": {
            "name": "charts.layout-1.0.0.fune",
            "size": 29997,
            "sha256": "c8c9572f8a23db8a6df85292ba342b8fac84dbca2803c988edc9e393933e8057",
            "languages": {
              "typescript": {
                "name": "charts.layout-1.0.0-typescript.fune",
                "size": 20193,
                "sha256": "c00d4a00754c4248d20b350ea4d7481e3ad5ecfbe9419c00ab7ad19a86b4e043",
                "integrity": "sha256-qp92YaPHGMtFu6xZC/64LqNJ8Ji7XSbdHsbmRZcl0yc="
              },
              "python": {
                "name": "charts.layout-1.0.0-python.fune",
                "size": 20121,
                "sha256": "368dfe014be5377eb7b3ecceb077be7c87701c20b7da99e92a39b14f5b3a31bd",
                "integrity": "sha256-GALTWNYgX7jH1v/SRlcv0/4GdmQUGkhZiGrZ4Zs1/KI="
              },
              "rust": {
                "name": "charts.layout-1.0.0-rust.fune",
                "size": 22231,
                "sha256": "6fda36889b897d772099eb63b453cf2d33368cdc2b7d9022abbc1ce438bda589",
                "integrity": "sha256-mO4o174y+vZGF8jfeAkb15BML1id/EhV2+RmZldV4D4="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-uWk4Mdh3NIBov4HSPLHzVzKqdXklpRCmj2bHpGRehBA=",
          "summary": "Chart layout: the plot area inside margins, legend items wrapped into rows, and greedy label collision avoidance.",
          "level": 2,
          "tags": [
            "chart",
            "layout",
            "margins",
            "plot-area",
            "legend",
            "labels",
            "collision",
            "overlap"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.round-float": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python/avoid_collisions.py",
            "impl/python/legend_rows.py",
            "impl/python/plot_area.py",
            "impl/rust/avoid_collisions.rs",
            "impl/rust/legend_rows.rs",
            "impl/rust/plot_area.rs",
            "impl/typescript/avoid_collisions.ts",
            "impl/typescript/legend_rows.ts",
            "impl/typescript/plot_area.ts",
            "vectors.json"
          ],
          "package": {
            "name": "charts.layout-1.0.1.fune",
            "size": 31155,
            "sha256": "362c12dd048eb65cd08ece4f6dad012fe7c294ba2598e17ae72a5f0cc38e2ab5",
            "languages": {
              "typescript": {
                "name": "charts.layout-1.0.1-typescript.fune",
                "size": 21351,
                "sha256": "09cf8ea378612399f78ee662617779777cf6f364eb819e763b07c13a57c08e3b",
                "integrity": "sha256-KxwvE9WDlMBdXLCb24vVHTFVdp6aBtAgQyc73HvSQrw="
              },
              "python": {
                "name": "charts.layout-1.0.1-python.fune",
                "size": 21279,
                "sha256": "56c884870d6eecd98184a9266fe2812f0735fb74eb3b5c5abe4fe036721aad03",
                "integrity": "sha256-j+BJQpus3lNV/UGBCbRPpsya4zcPtYQ7ur+I36ThqY4="
              },
              "rust": {
                "name": "charts.layout-1.0.1-rust.fune",
                "size": 23389,
                "sha256": "45c74f5d3e1ae206f05e11317b7aa2ad0de28a47f928128cf205816dd005e340",
                "integrity": "sha256-VZYsIvOzI9N6t6g5N6R6Lic43H0kTNpHHjhzjIakVoI="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "charts.line-chart": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-Qg/TErb2cC+NxMlsqSABIMjGpR9WCP1qffmYPGWj0ZU=",
          "summary": "Complete line chart geometry as data: plot area, number or date axes, gridlines, series paths, colours, legend.",
          "level": 3,
          "tags": [
            "chart",
            "line-chart",
            "time-series",
            "graph",
            "svg",
            "geometry",
            "legend",
            "axes"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "charts.axis": "^1.0.0",
            "charts.scale": "^1.1.0",
            "charts.shape": "^1.0.0",
            "charts.ticks": "^1.0.0",
            "charts.extent": "^1.0.0",
            "charts.format": "^1.0.0",
            "charts.layout": "^1.0.0",
            "charts.palette": "^1.0.0",
            "math.round-float": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "charts.line-chart-1.0.0.fune",
            "size": 38535,
            "sha256": "2fb332d4d4f2ac73f5de7a6d1bd32c4b4a05d6cd5b0577ba0dea2ee6dc209855",
            "languages": {
              "typescript": {
                "name": "charts.line-chart-1.0.0-typescript.fune",
                "size": 24616,
                "sha256": "7531de44ed46d07f73ee05ec8f8ecded01339336f9be681feba7d0625207d90a",
                "integrity": "sha256-1EdwhWtcw7qigVeelCbtZ466ngoZWMM4P8jZsZg/qz4="
              },
              "python": {
                "name": "charts.line-chart-1.0.0-python.fune",
                "size": 23998,
                "sha256": "b399eec3bc4cd1f33373ca116340354b08b1fae121e21704c30dfa8127a38dbe",
                "integrity": "sha256-iHIPe+hFZqPvXydaRf55sysaF4CAKAbzYSyFaTXYo6M="
              },
              "rust": {
                "name": "charts.line-chart-1.0.0-rust.fune",
                "size": 27585,
                "sha256": "71be077be7c8f000fe4ef383dabaa8fbff7984bb7ec81839b9e5f404e33fe46e",
                "integrity": "sha256-GoN8555B6h/QzxAI26PtI+6bicRtwHSz8jQjDGwYves="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "charts.palette": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-aeXA1lzUoVmHyaOFHfScGm7QidQsAO/NzTAPd7X93DU=",
          "summary": "A categorical palette of n colour-blind-safe colours for chart series: Okabe-Ito or Paul Tol's bright scheme.",
          "level": 1,
          "tags": [
            "color",
            "colour",
            "palette",
            "categorical",
            "color-blind",
            "okabe-ito",
            "accessibility",
            "series"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "data/palettes.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "charts.palette-1.0.0.fune",
            "size": 10984,
            "sha256": "ddf253584a9c2cad154b151e0ff42da0782096c9ab4744064ea04fc36c25b126",
            "languages": {
              "typescript": {
                "name": "charts.palette-1.0.0-typescript.fune",
                "size": 8652,
                "sha256": "a019b87ea0362e76fe2098b0a55701b2d1e0b5671dea331510511b6ab2834e07",
                "integrity": "sha256-rEoAH2OQbfl/ASekFeOCbsjb0N66l0ZdgywtciScDbA="
              },
              "python": {
                "name": "charts.palette-1.0.0-python.fune",
                "size": 8403,
                "sha256": "986e8a847d3d17864ed0ee107d8ac34d73c7c962f152c57bd1f9082ceef94720",
                "integrity": "sha256-nQSFT+O/k+WRIyfCuQiwkFjDaG1o0r6XQJ0iiyDX3fU="
              },
              "rust": {
                "name": "charts.palette-1.0.0-rust.fune",
                "size": 8759,
                "sha256": "ea033462cceffd9d13b2d9a80ece53c936a086ddaab2f2896d250fbabc5aeab8",
                "integrity": "sha256-JVizT+ybOSdHLapA4D8ZS7FWVzQDQLPRiW8KoYyPpgk="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "charts.scale": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-pyQlju4YyYk3POyMtJayPuP1waSFhZSFOmh8CKKSfDM=",
          "summary": "Map data values onto screen positions and back: linear, log, time, band and point scales, and nice domains.",
          "level": 1,
          "tags": [
            "chart",
            "scale",
            "axis",
            "domain",
            "range",
            "linear",
            "log",
            "time",
            "band",
            "nice",
            "plot",
            "geometry"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python/invert_linear.py",
            "impl/python/linear_scale.py",
            "impl/python/nice_domain.py",
            "impl/rust/invert_linear.rs",
            "impl/rust/linear_scale.rs",
            "impl/rust/nice_domain.rs",
            "impl/typescript/invert_linear.ts",
            "impl/typescript/linear_scale.ts",
            "impl/typescript/nice_domain.ts",
            "vectors.json"
          ],
          "package": {
            "name": "charts.scale-1.0.0.fune",
            "size": 25804,
            "sha256": "3b2f87385b03e0c3f4e8139e79ee5270cc7b4a60f23f951474f461fe8d250251",
            "languages": {
              "typescript": {
                "name": "charts.scale-1.0.0-typescript.fune",
                "size": 15627,
                "sha256": "ff1a8a1de1d9e6110b385cf60f00f06f0b88e6cfd821fdc959b9bef5f9b3b267",
                "integrity": "sha256-RUpZ+Knc3lFdYqbCx8IvqAIefrrDelwGNfYqy+j7+2Y="
              },
              "python": {
                "name": "charts.scale-1.0.0-python.fune",
                "size": 15633,
                "sha256": "bcabf0a02a3f57f97970cbd61541959f1eec8e80201ed3ee6608f9279dc2f711",
                "integrity": "sha256-TMLny7kgLcOSO11dh7wstlxCapfevgV0Q5snu/4aGWc="
              },
              "rust": {
                "name": "charts.scale-1.0.0-rust.fune",
                "size": 16774,
                "sha256": "d57be96aa1c801ca21f8f858d7c82a41153d682ec5961b784dfa8659babd164b",
                "integrity": "sha256-6v7Rp2uKBqR686pmaP6Ae3orBf3pVkgPrOrTe8TuHJk="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.1.0": {
          "integrity": "sha256-UaIa8nlZ6N172jPc9Bff8+D5VpdkPOg5iornpQn5ZYE=",
          "summary": "Map data values onto screen positions and back: linear, log, time, band and point scales, and nice domains.",
          "level": 1,
          "tags": [
            "chart",
            "scale",
            "axis",
            "domain",
            "range",
            "linear",
            "log",
            "time",
            "band",
            "nice",
            "plot",
            "geometry"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.ln": "^1.0.0",
            "math.round-float": "^1.0.0",
            "dates.days-between": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python/band_scale.py",
            "impl/python/invert_linear.py",
            "impl/python/linear_scale.py",
            "impl/python/log_scale.py",
            "impl/python/nice_domain.py",
            "impl/python/point_scale.py",
            "impl/python/time_scale.py",
            "impl/rust/band_scale.rs",
            "impl/rust/invert_linear.rs",
            "impl/rust/linear_scale.rs",
            "impl/rust/log_scale.rs",
            "impl/rust/nice_domain.rs",
            "impl/rust/point_scale.rs",
            "impl/rust/time_scale.rs",
            "impl/typescript/band_scale.ts",
            "impl/typescript/invert_linear.ts",
            "impl/typescript/linear_scale.ts",
            "impl/typescript/log_scale.ts",
            "impl/typescript/nice_domain.ts",
            "impl/typescript/point_scale.ts",
            "impl/typescript/time_scale.ts",
            "vectors.json"
          ],
          "package": {
            "name": "charts.scale-1.1.0.fune",
            "size": 61533,
            "sha256": "c1ff13b925cdadfa1c52e5ae9c82981d412d1778305d2bec4a47e4e0b15f4ba1",
            "languages": {
              "typescript": {
                "name": "charts.scale-1.1.0-typescript.fune",
                "size": 38932,
                "sha256": "f3c8924737737dff236335c022f63ed5b6ff524264e07a1050e2fceb416a3283",
                "integrity": "sha256-ETn8nLj2E7zCLtJdmoUUoIETmAMg4VA2OZFA5dfqYuc="
              },
              "python": {
                "name": "charts.scale-1.1.0-python.fune",
                "size": 38512,
                "sha256": "64ca487882bc49e3804437714b2da8a0fb7e20b4853ba357af7974f21ad88ee7",
                "integrity": "sha256-2Y6ecyqyMxuU4mF6WXkCZNJuRnolJqTozeP4wGlT17A="
              },
              "rust": {
                "name": "charts.scale-1.1.0-rust.fune",
                "size": 41619,
                "sha256": "1a3aa44b38d2abfed8a2f6a9f686940f64390ddfa719efca45266eac976670d1",
                "integrity": "sha256-H9bX6mtsS2DJpuCuytudehNvgZcPE7NfG6sGcpgtbDI="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "charts.shape": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-9D5I7Zo7YTcFAGIuoTWMK4mvpSr6Urx0oUHJan/aVMI=",
          "summary": "SVG path strings for lines, areas, steps, monotone curves, bars, arcs and pie slices, identical in every language.",
          "level": 2,
          "tags": [
            "chart",
            "svg",
            "path",
            "line",
            "area",
            "curve",
            "monotone",
            "bar",
            "arc",
            "pie",
            "donut"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.sin-cos": "^1.0.0",
            "math.round-float": "^1.0.0",
            "text.format-decimal": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python/arc_path.py",
            "impl/python/area_path.py",
            "impl/python/bar_rects.py",
            "impl/python/line_path.py",
            "impl/python/monotone_curve.py",
            "impl/python/pie_angles.py",
            "impl/python/step_path.py",
            "impl/rust/arc_path.rs",
            "impl/rust/area_path.rs",
            "impl/rust/bar_rects.rs",
            "impl/rust/line_path.rs",
            "impl/rust/monotone_curve.rs",
            "impl/rust/pie_angles.rs",
            "impl/rust/step_path.rs",
            "impl/typescript/arc_path.ts",
            "impl/typescript/area_path.ts",
            "impl/typescript/bar_rects.ts",
            "impl/typescript/line_path.ts",
            "impl/typescript/monotone_curve.ts",
            "impl/typescript/pie_angles.ts",
            "impl/typescript/step_path.ts",
            "vectors.json"
          ],
          "package": {
            "name": "charts.shape-1.0.0.fune",
            "size": 68319,
            "sha256": "15b509f1fa14c931ee25641ba2cc66f912ffd9bb3383191ac51509f7ebe38d79",
            "languages": {
              "typescript": {
                "name": "charts.shape-1.0.0-typescript.fune",
                "size": 42097,
                "sha256": "8a16cf2c121a401c547f2a3282c090516e2b9e23d8e0071c7413164a7a26980f",
                "integrity": "sha256-/EGoCySbjRcHzsBD2HwdhmN8em1OgMTMTJuzLLi2VcA="
              },
              "python": {
                "name": "charts.shape-1.0.0-python.fune",
                "size": 42177,
                "sha256": "bdd73f1fe2a3b59b6dfc68a8321f177ed63c16427efb1b0bb8e91b8d4836dd67",
                "integrity": "sha256-o3uWob/1iCXH+XmVngkKCWxp4x7qwJQyWimyurM3FW0="
              },
              "rust": {
                "name": "charts.shape-1.0.0-rust.fune",
                "size": 46023,
                "sha256": "cf160fb910878fb73913cb3ce5873ac9235c69c760d14900e9cf74844a59fbbd",
                "integrity": "sha256-YNR7KIw7FBKFLDuwB/1h7l2KTci90SXDbaGbu8gwegs="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-XCwX0xUr5O9OeoV8G7Mxp6UYdxbz846ejkdKcgFAWrA=",
          "summary": "SVG path strings for lines, areas, steps, monotone curves, bars, arcs and pie slices, identical in every language.",
          "level": 2,
          "tags": [
            "chart",
            "svg",
            "path",
            "line",
            "area",
            "curve",
            "monotone",
            "bar",
            "arc",
            "pie",
            "donut"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.sin-cos": "^1.0.0",
            "math.round-float": "^1.0.0",
            "text.format-decimal": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "impl/python/arc_path.py",
            "impl/python/area_path.py",
            "impl/python/bar_rects.py",
            "impl/python/line_path.py",
            "impl/python/monotone_curve.py",
            "impl/python/pie_angles.py",
            "impl/python/step_path.py",
            "impl/rust/arc_path.rs",
            "impl/rust/area_path.rs",
            "impl/rust/bar_rects.rs",
            "impl/rust/line_path.rs",
            "impl/rust/monotone_curve.rs",
            "impl/rust/pie_angles.rs",
            "impl/rust/step_path.rs",
            "impl/typescript/arc_path.ts",
            "impl/typescript/area_path.ts",
            "impl/typescript/bar_rects.ts",
            "impl/typescript/line_path.ts",
            "impl/typescript/monotone_curve.ts",
            "impl/typescript/pie_angles.ts",
            "impl/typescript/step_path.ts",
            "vectors.json"
          ],
          "package": {
            "name": "charts.shape-1.0.1.fune",
            "size": 69441,
            "sha256": "ef0ef7d0a8ffccb6b5b5eb69ed602f9c715c8a9b4f8fbd002af1ed5e8b19cb2d",
            "languages": {
              "typescript": {
                "name": "charts.shape-1.0.1-typescript.fune",
                "size": 43219,
                "sha256": "fbfb259ca198a55833ccc2527816d92ed598f79bef06b33cd05df1ffea4940b5",
                "integrity": "sha256-NDNKHkEJ0QWCXbbXoJT3ytCr9GcRAWPrx0v6gWPMArE="
              },
              "python": {
                "name": "charts.shape-1.0.1-python.fune",
                "size": 43299,
                "sha256": "2376f8882fd4a00dfbf121d9bfd3dd26bc22f4e70d3b8b21143938fc0b26f56f",
                "integrity": "sha256-0/el9u3OqdXOZDlVxaS77FVoGXy6o/XWLDHDpMOlY8I="
              },
              "rust": {
                "name": "charts.shape-1.0.1-rust.fune",
                "size": 47145,
                "sha256": "ff6701df5bc260c8ade4c2dcbcf5adbdcd81495c28984f5c546f2e8c6c75f386",
                "integrity": "sha256-s3197GAQFcFJCIkguSCkiTtUH3u5lzyAKTa9tM1Tzbo="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "charts.sparkline": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-nLYTRLwLCpZdycHcHTWgaT7YX+ArF7dZkIn55X83SCA=",
          "summary": "A sparkline's SVG path and end marker from a series, fitted into a box, with gaps left as breaks.",
          "level": 3,
          "tags": [
            "chart",
            "sparkline",
            "trend",
            "mini-chart",
            "svg",
            "path",
            "dashboard"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "charts.scale": "^1.0.0",
            "charts.shape": "^1.0.0",
            "charts.extent": "^1.0.0",
            "math.round-float": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "charts.sparkline-1.0.0.fune",
            "size": 12433,
            "sha256": "8d3f1c05fa48b0bcffcde841259a9c6370d3abad10274cab976f6807996959ca",
            "languages": {
              "typescript": {
                "name": "charts.sparkline-1.0.0-typescript.fune",
                "size": 7910,
                "sha256": "261cc92c531232b7b47816aa375e46e93ffae7133d2c26b01ad2c8330387cdba",
                "integrity": "sha256-H/W9lOb19NbDEXdVdizyeOtUJfVtaiCBpe4+LceFHII="
              },
              "python": {
                "name": "charts.sparkline-1.0.0-python.fune",
                "size": 7758,
                "sha256": "6768809a712278043745c29150372a7430c392485ef55aa6b4bb37828d119de9",
                "integrity": "sha256-set4i7h1U2BDyf58h3Voq/ztIG27YHU7a9yOUCxRBUc="
              },
              "rust": {
                "name": "charts.sparkline-1.0.0-rust.fune",
                "size": 8551,
                "sha256": "9a4d677bd437c0bfac0602934b26feb81a0c01c79cc573f74499d7d8838da80c",
                "integrity": "sha256-E3/sTlSwc0YXIzCI+204R8o7YV2iyJsF6R7dMabvMuQ="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "charts.stack": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-JGR07gshM25uYBvcXU3KRB1UkAPB2xm7wT85Bealxzk=",
          "summary": "Stack several series for stacked bars and areas: on zero, normalised to 100%, or diverging around zero.",
          "level": 2,
          "tags": [
            "chart",
            "stack",
            "stacked-bar",
            "stacked-area",
            "percent",
            "diverging",
            "series"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.round-float": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "charts.stack-1.0.0.fune",
            "size": 15255,
            "sha256": "ee6034afe10372edb9e49cb658d077cb040170c09a161bae7b4b58c9a7a1a5d0",
            "languages": {
              "typescript": {
                "name": "charts.stack-1.0.0-typescript.fune",
                "size": 9411,
                "sha256": "925d7db602f447fc6a7edd1b152959a7f963cfba99325053b7889ecc4b50e23a",
                "integrity": "sha256-JudwdKD8n2+6H+SZezLB118SHEGaHgSOsoUVJd49EdU="
              },
              "python": {
                "name": "charts.stack-1.0.0-python.fune",
                "size": 9443,
                "sha256": "7f621caee4901f28c3a01f92594ed3e0e1ca216b57fec53bf1f3005a9e311dc4",
                "integrity": "sha256-TcEAQh5GrasVFHiHMvml4PjTKFwqgk8whSbN2V1VFwg="
              },
              "rust": {
                "name": "charts.stack-1.0.0-rust.fune",
                "size": 10291,
                "sha256": "6673c21817d2dfe1d0bc6f58005c9838f4634828bc905cd59634183a8a48b67d",
                "integrity": "sha256-VRGodZIAKUClSnHpy6eOceSMZCOUsop+TtA2dxkwUhM="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "charts.ticks": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-F+eMtffgyP5RbxwCxVNef/YUwZxWExCZZPJoDqpQ3sk=",
          "summary": "Axis ticks: a round step (1, 2 or 5 x 10^k), the ticks on it, and calendar ticks from days to years.",
          "level": 1,
          "tags": [
            "chart",
            "ticks",
            "axis",
            "tick-step",
            "nice-numbers",
            "time-axis",
            "calendar",
            "gridlines"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0",
            "math.round-float": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python/nice_ticks.py",
            "impl/python/tick_step.py",
            "impl/python/time_tick_interval.py",
            "impl/python/time_ticks.py",
            "impl/rust/nice_ticks.rs",
            "impl/rust/tick_step.rs",
            "impl/rust/time_tick_interval.rs",
            "impl/rust/time_ticks.rs",
            "impl/typescript/nice_ticks.ts",
            "impl/typescript/tick_step.ts",
            "impl/typescript/time_tick_interval.ts",
            "impl/typescript/time_ticks.ts",
            "vectors.json"
          ],
          "package": {
            "name": "charts.ticks-1.0.0.fune",
            "size": 42760,
            "sha256": "c5ce85e5c19c171b83a7de93b99f92ae8d636f869f8cc071d3ef2bb16c333991",
            "languages": {
              "typescript": {
                "name": "charts.ticks-1.0.0-typescript.fune",
                "size": 25692,
                "sha256": "a6c9c158e2748cc3f724fdb4966764d74b33410fb3b76e6a2ecce040c0593585",
                "integrity": "sha256-1iD9QboophXo1F/dIUxkLIJQguySP1i7pZ6I5cE/7dY="
              },
              "python": {
                "name": "charts.ticks-1.0.0-python.fune",
                "size": 25207,
                "sha256": "2f681fcbfc0375c58129a8b49979f68b8b97a8cc14447b32148a684ed4c578d4",
                "integrity": "sha256-L5VhoG7YGzarL06+JMEDjD3jDuueAU/orPG2Q0UFyjs="
              },
              "rust": {
                "name": "charts.ticks-1.0.0-rust.fune",
                "size": 27629,
                "sha256": "04f7bc7c4e457baf3a7b09df9c20af3dc41be851e4b99bc562dbe6ab2c62a23a",
                "integrity": "sha256-lztXhc2+8ZCeDHw74HRGu0xavJo5gOgl7BGV441Iatc="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "collections.chunk": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-OGreZabbY0mDRZ3wSkRPlPzC5IbA6QXNQuI0gCkUQhs=",
          "summary": "Split a list into consecutive batches of at most n items, in order; the last batch may be short.",
          "level": 0,
          "tags": [
            "collections",
            "chunk",
            "batch",
            "split",
            "partition",
            "slice",
            "group-of-n"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "collections.chunk-1.0.0.fune",
            "size": 7030,
            "sha256": "ac5a3b9d4cf08b46bee335755d23351d37b66124c4e76f71be2bf77ad356cf0e",
            "languages": {
              "typescript": {
                "name": "collections.chunk-1.0.0-typescript.fune",
                "size": 4807,
                "sha256": "e22308e6f7fa50e7fafdd374691ef112be6bd177210e489ed75a72ef8b03b8fd",
                "integrity": "sha256-pYYeDTvJLd3NAYz7bzMs1pwNkYCvuLSD3SWGi/BkMOQ="
              },
              "python": {
                "name": "collections.chunk-1.0.0-python.fune",
                "size": 4980,
                "sha256": "14b4ce35c73b0f9029a70dfa5e3c3aababe010c7c5e1c669eeec4ac8462f7fe6",
                "integrity": "sha256-hXqm3sjg+hoHZKYwiqjPBHrHvGssGJlMFDXYs8mTozs="
              },
              "rust": {
                "name": "collections.chunk-1.0.0-rust.fune",
                "size": 5043,
                "sha256": "8d28cb0afc1103aa023db28685800c3b7dfb434add3f8623713685f5356ae24a",
                "integrity": "sha256-cXvj6lsKqQW/2r6JT/SDD2lL3WTpPfo1ccNi5oIvdes="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "collections.dedupe-by-key": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-R3d05vnIOHM8ohWhzFwNjQ3GdJTj4R69ocSwuRdnOs0=",
          "summary": "Remove records that share a key value, keeping the first or the last of each, in input order.",
          "level": 1,
          "tags": [
            "collections",
            "dedupe",
            "deduplicate",
            "distinct",
            "unique",
            "duplicates",
            "records"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "collections.dedupe-by-key-1.0.0.fune",
            "size": 16235,
            "sha256": "05480a9dc85245dd71b28201102ce3496e166eff75901d8ba8c05fb5ae139f26",
            "languages": {
              "typescript": {
                "name": "collections.dedupe-by-key-1.0.0-typescript.fune",
                "size": 10214,
                "sha256": "c466be72c960fc0b8477dda843959f3d0628ec997d0f3a72df6902ae03139fc9",
                "integrity": "sha256-OzUmulqW6HHFduuNBVcGp8mFafluA0OKoE8m7en9FzQ="
              },
              "python": {
                "name": "collections.dedupe-by-key-1.0.0-python.fune",
                "size": 10100,
                "sha256": "6b20eb8073784def3bbb56a8e392755be2b92dfc9cc70db0fc4f0db570a2d5ea",
                "integrity": "sha256-hturDQ/mOC9DzORxgMHhRekLv8lI+9t0/f8EtgUSp1s="
              },
              "rust": {
                "name": "collections.dedupe-by-key-1.0.0-rust.fune",
                "size": 10163,
                "sha256": "bbb4c9cb43cf4f848058e2515d610372d19b0f4e756400e7cf2fe9b7c6dcf5b8",
                "integrity": "sha256-p/ER+9lelBhjxfd0iqrHDVhA1d54pOaMQZFn+eT1elM="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "collections.diff": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-V51WcVrYZhjJyooDk68jIyaH8i+9b03sgDEMaWtyjsk=",
          "summary": "Compare two lists of records by key: which were added, which removed, and which changed and in what fields.",
          "level": 1,
          "tags": [
            "collections",
            "diff",
            "compare",
            "changes",
            "delta",
            "reconcile",
            "sync",
            "records"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "collections.diff-1.0.0.fune",
            "size": 27655,
            "sha256": "0416ed8558f592216df058b45d0fc42a83ef3f616cee47d44df8507dcd1a0546",
            "languages": {
              "typescript": {
                "name": "collections.diff-1.0.0-typescript.fune",
                "size": 17120,
                "sha256": "43916d9bff73ebc7ed0e8703ca48c7982c72a6fed891ae7daa2b7b402eab6add",
                "integrity": "sha256-mYCwToVgSdAXUlC/fxMlxGJQIZz8PhqtnU1lfNKmKhk="
              },
              "python": {
                "name": "collections.diff-1.0.0-python.fune",
                "size": 16512,
                "sha256": "3f65e7e6705dc081d2c956bb984ea7e90d4f34a361aa4fa48d13666716233a79",
                "integrity": "sha256-Jai7kt1c844MrlwAWZ7NIIiX1gireGGQOxTB6iaAoDo="
              },
              "rust": {
                "name": "collections.diff-1.0.0-rust.fune",
                "size": 18239,
                "sha256": "e09214aebb556d302c8c123b85c44af533d934d9564c35e07d4e81ab6b8f56a5",
                "integrity": "sha256-A1hlUGVTVH7kUHa1m+E4WeYzbwOM/QTp0JRpuqElADU="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "collections.group-by-key": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-QgSPw83tZY0AwYS+heImh9oyh/ddWTW7tM1ipqw//18=",
          "summary": "Group records by the value at one key, preserving input order inside each group.",
          "level": 1,
          "tags": [
            "collections",
            "group",
            "group-by",
            "bucket",
            "partition",
            "records"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "collections.group-by-key-1.0.0.fune",
            "size": 16841,
            "sha256": "640bae4c083fa730ec305773e5380386cb168bcaf3f4e6d84a52df863327dc20",
            "languages": {
              "typescript": {
                "name": "collections.group-by-key-1.0.0-typescript.fune",
                "size": 11085,
                "sha256": "92dd84714808a60af7a0bc97242399e99cf0290b44a7d77bc0986a911dc81a7e",
                "integrity": "sha256-1hZXw0d0u2kZH9/yiJwVpVZtlQFGYzmg1rJllTvBSWQ="
              },
              "python": {
                "name": "collections.group-by-key-1.0.0-python.fune",
                "size": 10738,
                "sha256": "c9b7f08110f1503dc38b8b40043f8ad9ba9d374de99440a97b849cbbdc9de8bf",
                "integrity": "sha256-rck35Vgf2Iy7OIQ4+vPy6Dx+TEyRkB1RWJZaA3Koiwc="
              },
              "rust": {
                "name": "collections.group-by-key-1.0.0-rust.fune",
                "size": 11418,
                "sha256": "a6cb389d7ee4a401a9701a629b643d4977858f7aae4c25e13a13dea787a0afb0",
                "integrity": "sha256-q1tDOHTLyOsa4hYkg7cY1alwyn9/LTh7GKIzm+55Rr4="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "collections.paginate": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-9vieHAeEPKZaELhFJzKpylsciCOh5AQfeKugTWl6jDQ=",
          "summary": "Slice a list into a 1-based page and report the totals an API response needs.",
          "level": 1,
          "tags": [
            "collections",
            "pagination",
            "paging",
            "api",
            "list",
            "offset"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "collections.paginate-1.0.0.fune",
            "size": 17341,
            "sha256": "8929c0b7700311f6c92da9535e16d1b59c1b2c009d632583ebe0718405baa03b",
            "languages": {
              "typescript": {
                "name": "collections.paginate-1.0.0-typescript.fune",
                "size": 10913,
                "sha256": "f63df90a4c0d7a2ab1f2ddd22843c2d53097f99754d74bad65aeac74ee337253",
                "integrity": "sha256-CCxmRQy3pg6xQdllTQMWvzyd/hiteipV3qGjMqew7gE="
              },
              "python": {
                "name": "collections.paginate-1.0.0-python.fune",
                "size": 11279,
                "sha256": "ea12c1f49e7a1d8733c64d71293db3113c05a7d2f33869e51e7827e306166301",
                "integrity": "sha256-PXX7vnvSVnR1NcHlSDI/yNyvXV4NOYVEAW6dwrMkyyE="
              },
              "rust": {
                "name": "collections.paginate-1.0.0-rust.fune",
                "size": 11963,
                "sha256": "57c5d0e94d6d896351805275c98bb3940226ba8b9c2d9a357f2091209852d2ce",
                "integrity": "sha256-uj9LKZQ9gKZQvO3OJp1Znm2o60S0Bc2YNQtQoPgFH0M="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "collections.search-text": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-nzOvuTdkZs77QjOaCasONfSPWTzXIuE/L0PqbGjGvm0=",
          "summary": "Filter records by a case-insensitive substring match across named fields, in input order.",
          "level": 1,
          "tags": [
            "collections",
            "search",
            "filter",
            "substring",
            "text",
            "records"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "collections.search-text-1.0.0.fune",
            "size": 17452,
            "sha256": "7e612046153f7cc2aa437415ba1baa1a58113b96422d2b45da2ce8a0ca7c8f5f",
            "languages": {
              "typescript": {
                "name": "collections.search-text-1.0.0-typescript.fune",
                "size": 11211,
                "sha256": "8905d8a2d5f3a253aeef04677087c3b7d9679ca7b84b566853bb58f16fc2ef67",
                "integrity": "sha256-NbaAIo16MfWrHIyQX4NTTtG9u5asm9m77Gz34/d+8qQ="
              },
              "python": {
                "name": "collections.search-text-1.0.0-python.fune",
                "size": 11344,
                "sha256": "29521da9eb456963852f09489aacf48db9589bf9415f0126af1c8fd7f5383252",
                "integrity": "sha256-u3DlLORzR70wMwJbLPFYf51JomNat3KmmMPNc4EfkXg="
              },
              "rust": {
                "name": "collections.search-text-1.0.0-rust.fune",
                "size": 11477,
                "sha256": "e3e3a22679099b149ff89bfc11d7763b19fb6745c7f0de94e76272d348705b5c",
                "integrity": "sha256-B8KNk4dpORzHnIEIiZGAHr8AK3q+zWywFG3bUP/n66g="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "collections.sort-by": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-HNK3ErFfWs161VJ+YMZcUhSRW16buhZ3uRNw7D99HfA=",
          "summary": "Stably sort records by one key, ascending or descending, with a total order across mixed types.",
          "level": 1,
          "tags": [
            "collections",
            "sort",
            "order",
            "stable",
            "records",
            "table"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "collections.sort-by-1.0.0.fune",
            "size": 19865,
            "sha256": "64f59dd149f5eee9c1e84e5a62ff365767cda76a85825b539a3a053a40a080c6",
            "languages": {
              "typescript": {
                "name": "collections.sort-by-1.0.0-typescript.fune",
                "size": 12597,
                "sha256": "12a88a8eacda51376bb03c8230cce752964112541c36448b86b487dccb091fea",
                "integrity": "sha256-bhf1YCIAAfMb9hvT5zbNHVGw1F/Gsyz3ePvO0zFFwl8="
              },
              "python": {
                "name": "collections.sort-by-1.0.0-python.fune",
                "size": 12092,
                "sha256": "8467afd7fef46eb418609028196624e4fb36eedaad98cac6abf528de32c8e243",
                "integrity": "sha256-AS1Xqx8gZU9VIbOLWGpC3x/210NRTsncw9kbACLz5b4="
              },
              "rust": {
                "name": "collections.sort-by-1.0.0-rust.fune",
                "size": 12480,
                "sha256": "25510067511f35edf0c43f79cdcf1f1d801a3bbf857130151f2daa0ad7345e35",
                "integrity": "sha256-Ly86tOS+DF8rhPeymos2ManZxhX9XNOyuUhOAcOKtDs="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "construction.brick-count": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-UcP2QNmt0AxA9512QZ21FnnitqyyYlSQGJ47St6GSl0=",
          "summary": "Bricks and mortar for a wall, openings subtracted, for UK standard 215 x 102.5 x 65 mm bricks with 10 mm joints.",
          "level": 1,
          "tags": [
            "bricks",
            "brickwork",
            "mortar",
            "wall",
            "bricklaying",
            "estimate",
            "quantity"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.round-div": "^1.0.0",
            "math.round-float": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "construction.brick-count-1.0.0.fune",
            "size": 19874,
            "sha256": "4c520d53927a6f63aa67ea0907846e0323782667d63ef704067c362ffc799a8f",
            "languages": {
              "typescript": {
                "name": "construction.brick-count-1.0.0-typescript.fune",
                "size": 12767,
                "sha256": "a74df82c0a7f44c6fb3ec5247abfbd93c9c30057e13bad485a711e7becf9be48",
                "integrity": "sha256-tJOcIcu7meL1G4juTIT6dUpcBSOp4/hdwJ/UIUfphYk="
              },
              "python": {
                "name": "construction.brick-count-1.0.0-python.fune",
                "size": 12936,
                "sha256": "0d5eba3baa4b82bd09ebd8dc97d0d6d9e281950eef689528622e3fee57acbb55",
                "integrity": "sha256-QV1q05ta7Jv6IOH1x0rDCum1gGdJ87BGDqVMLfPAVqc="
              },
              "rust": {
                "name": "construction.brick-count-1.0.0-rust.fune",
                "size": 13805,
                "sha256": "4a400693842246a78a7687d7bd239e9bd32cea04dd3c012ff6ee9f42e1f1cf63",
                "integrity": "sha256-MK/xs9EZEvvSnpPWqhtocaDK5ZoKuPDcKgehS9s4s4w="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "construction.cis-deduction": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-avVdMe5BJUr1+omexwo9sXHc1ZEUu5Tf+4sA8XVKO90=",
          "summary": "Construction Industry Scheme deduction (0, 20 or 30%) on the labour part of a subcontractor payment.",
          "level": 2,
          "tags": [
            "cis",
            "construction-industry-scheme",
            "subcontractor",
            "deduction",
            "hmrc",
            "labour",
            "tax",
            "gb"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.add": "^1.0.0",
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "money.apply-rate": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/cis-rates.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "construction.cis-deduction-1.0.0.fune",
            "size": 32006,
            "sha256": "dd6fa7c2bb71beabab099d76fc5b21a9dcc123675e9ee6d1d06b66e2676003c0",
            "languages": {
              "typescript": {
                "name": "construction.cis-deduction-1.0.0-typescript.fune",
                "size": 24428,
                "sha256": "e13faa3f86e28f55b4ae5d864df7da3c28d11cbd98637e50a42346ed625c2a0d",
                "integrity": "sha256-ZnniNHVVRR1UadOLLH3bcj+6AYwsWb7d0KoeC3kPbKc="
              },
              "python": {
                "name": "construction.cis-deduction-1.0.0-python.fune",
                "size": 24482,
                "sha256": "78f74a7135a07565d174159e60101c72077c93befbd02b4b4fabc708c0b47327",
                "integrity": "sha256-BOYIMiDH9X3ACgE8zRZv4AekKmRQEK4ONVjETK9KPSk="
              },
              "rust": {
                "name": "construction.cis-deduction-1.0.0-rust.fune",
                "size": 25822,
                "sha256": "0a1be9d38b2805d35f02c91b9ba3302d99b4547ab39a74bd53b50ccdee544250",
                "integrity": "sha256-lHtVFbP6fZjiAHZ/6jWtc9JOnKUAVw/Bj3U44ZncuXQ="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-HXE65eCtRpMFaTkh68X8Gu7mqn1J+iLjjXG8STWcFvg=",
          "summary": "Construction Industry Scheme deduction (0, 20 or 30%) on the labour part of a subcontractor payment.",
          "level": 2,
          "tags": [
            "cis",
            "construction-industry-scheme",
            "subcontractor",
            "deduction",
            "hmrc",
            "labour",
            "tax",
            "gb"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.add": "^1.0.0",
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "money.apply-rate": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/cis-rates.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "construction.cis-deduction-1.0.1.fune",
            "size": 32852,
            "sha256": "b435f79ea4a7b39e44bd5fcff16d691bcc4ab19faae7720859ae088a3d55e3e4",
            "languages": {
              "typescript": {
                "name": "construction.cis-deduction-1.0.1-typescript.fune",
                "size": 25266,
                "sha256": "861f2f28b80e26c6fb859bc97c4fa8d944ea7548e91f34391329e2ed9a94d28e",
                "integrity": "sha256-90PHYyqwVH3f5Pyq1/jyYC+LJJQ0NNfvx+/14gIEbGo="
              },
              "python": {
                "name": "construction.cis-deduction-1.0.1-python.fune",
                "size": 25328,
                "sha256": "4261a95264b29e4f3ea919aea4d0f7e57a2179b7e5d102ad1e65882887d22dcf",
                "integrity": "sha256-QcW2/PDNhDu3HlBZCZQDvFQumkC5cm+WFHdRU0zVnM4="
              },
              "rust": {
                "name": "construction.cis-deduction-1.0.1-rust.fune",
                "size": 26660,
                "sha256": "5ac060effbade41781598271141d33543333780b2f6b4b3fb874811752ea6205",
                "integrity": "sha256-SJm/UGWav23qU6QoOwW2eWe2fZHooNzKKQCpDcOKBd0="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.2": {
          "integrity": "sha256-IJH5TQus0fLO61fIV7B91mjcB8RW9qfaSCD5mgUP49w=",
          "summary": "Construction Industry Scheme deduction (0, 20 or 30%) on the labour part of a subcontractor payment.",
          "level": 2,
          "tags": [
            "cis",
            "construction-industry-scheme",
            "subcontractor",
            "deduction",
            "hmrc",
            "labour",
            "tax",
            "gb"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.add": "^1.0.0",
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "money.apply-rate": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "data/cis-rates.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "construction.cis-deduction-1.0.2.fune",
            "size": 33328,
            "sha256": "05e4a04b1844ab419c0e958d1e26ba9a3d67b236a001886fd0e72033e38a7696",
            "languages": {
              "typescript": {
                "name": "construction.cis-deduction-1.0.2-typescript.fune",
                "size": 25742,
                "sha256": "72872e03cd65d9db00fcc065cc3deb552cea440da172650dda6c3cc57adc7dd0",
                "integrity": "sha256-NfU8kSLCTQ/o2k2PjDVTVRa7HQuDOIMzSdUARpMZrWs="
              },
              "python": {
                "name": "construction.cis-deduction-1.0.2-python.fune",
                "size": 25804,
                "sha256": "0c0b7df8f4c3d55615c1fc28465f0e6646d7f8fbc850ff4983f98e5ce337c673",
                "integrity": "sha256-/wh3OXfbd8uDvQxGRzZurGBKtg5dcSKMjdCmLzFXUPQ="
              },
              "rust": {
                "name": "construction.cis-deduction-1.0.2-rust.fune",
                "size": 27136,
                "sha256": "8e55efbc24d91fda2a52a5c1fcf124beded5a3c67bd9897a57a3e85f98edb10d",
                "integrity": "sha256-m4SYw0ivkfd6GVu4zq3UuDMGFVxwrrgS4BA4i4pH+sk="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "construction.concrete-volume": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-TSDY7TgvngQDop3jZ/ta/AIjxPQvfoBFS6aIs9Z2gs0=",
          "summary": "Concrete for slabs, strip footings, pads and round columns: volume to the litre and an order rounded up to 0.1 m³.",
          "level": 1,
          "tags": [
            "concrete",
            "volume",
            "cubic-metres",
            "slab",
            "footing",
            "foundation",
            "column",
            "ready-mix"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.round-div": "^1.0.0",
            "math.round-float": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "construction.concrete-volume-1.0.0.fune",
            "size": 28439,
            "sha256": "7bd20fa333b6f2473a9d63e4ad8ae997aa56a8f1d89f9c2115c7f5506c054920",
            "languages": {
              "typescript": {
                "name": "construction.concrete-volume-1.0.0-typescript.fune",
                "size": 18514,
                "sha256": "ed834c0b4fe206c691f9dbf9b147aa04999e1b15812dd9d6033ec323e4db6ceb",
                "integrity": "sha256-o96ltcqKfXwtm/XEXKFpSz8aqzTDHfnrzk7uRhVw43Q="
              },
              "python": {
                "name": "construction.concrete-volume-1.0.0-python.fune",
                "size": 18700,
                "sha256": "6a0540400fb2d8afc98110285f150da84f673b2dd71a7e7cf1b38d0c4a306b36",
                "integrity": "sha256-FcB7cF12jRXnKDNfq2LCBQviz0lvytwl1VcvPJWg+xI="
              },
              "rust": {
                "name": "construction.concrete-volume-1.0.0-rust.fune",
                "size": 20535,
                "sha256": "b09b7cec22e51cf1d07e81259b3b4d5decf1bec28fce95870773535ba12946b3",
                "integrity": "sha256-pFj1x6k0KfinM7cCBnuaM3T5a3YvJW2KptVB0zm+rvw="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "construction.day-rate-quote": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-3c7QNlXytI2z0hakIFcr69wuySMtFtVoATTpFTHtnRI=",
          "summary": "A trade quote from labour days at a day rate, materials with a markup, and VAT.",
          "level": 2,
          "tags": [
            "quote",
            "estimate",
            "day-rate",
            "labour",
            "materials",
            "markup",
            "vat",
            "trades"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.add": "^1.0.0",
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "finance.tax.add-vat": "^1.0.0",
            "finance.markup-price": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "construction.day-rate-quote-1.0.0.fune",
            "size": 23229,
            "sha256": "99bc4e96eeef9b0a55ff34a9020b41d78b29d57268ffd4b169f99205d1c6f6a1",
            "languages": {
              "typescript": {
                "name": "construction.day-rate-quote-1.0.0-typescript.fune",
                "size": 17575,
                "sha256": "8ec3a2b5f52a5a0d734d30a2d8fb73751463373caf2da95362950c7891301180",
                "integrity": "sha256-Yw5N2jlybuPgJELG40PVRcFkBXp5RZF0EinF0B0C0ds="
              },
              "python": {
                "name": "construction.day-rate-quote-1.0.0-python.fune",
                "size": 17809,
                "sha256": "c6022d834c8d3a1c97356907ca307c0c1021eab65f01c0a8474f4ad6f9cae9f6",
                "integrity": "sha256-ImAfQktrHoOEJxrUz//FOgI2f8hHVV56DQ/GGzjnlzo="
              },
              "rust": {
                "name": "construction.day-rate-quote-1.0.0-rust.fune",
                "size": 19133,
                "sha256": "2f28ec2aca83ec841f7ace7c90cde380094e8df5e633a47215b3148dca255bd1",
                "integrity": "sha256-XkacaEh4rBe3y4ZLIfS+gfkiH7FF+s9mQcp4goGk520="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "construction.materials-area": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-lxZCZJWipZ7tztB7PFew73GvVBPXCSObboXX169qYf4=",
          "summary": "Packs of tiles, paint, plasterboard or flooring to cover an area, with waste and coats, rounded up to whole packs.",
          "level": 1,
          "tags": [
            "materials",
            "tiles",
            "paint",
            "plasterboard",
            "flooring",
            "coverage",
            "wastage",
            "estimate"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.round-div": "^1.0.0",
            "math.round-float": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "construction.materials-area-1.0.0.fune",
            "size": 16530,
            "sha256": "ec98f3e9cf334e260a5f1e0af38a1e2415fbd563bd2111edbe6616f6e4ec6079",
            "languages": {
              "typescript": {
                "name": "construction.materials-area-1.0.0-typescript.fune",
                "size": 11009,
                "sha256": "71d6eedb0685ea3eb5ebb205cff429d208da5fcfa9ee5fdd2431ce993e6aeafc",
                "integrity": "sha256-LvDEaVsXEBbYdO5zCS0lYsoY4dIbdqtL3Fbq6Xyeefg="
              },
              "python": {
                "name": "construction.materials-area-1.0.0-python.fune",
                "size": 11112,
                "sha256": "bcc7e449c832c38da0458a3a7ed80e3bb001243e036ca3801ef971e3e9488819",
                "integrity": "sha256-vNvxQnPDq884I7AJDmTHnxgqg3k7P+nzRQabvW1jLn8="
              },
              "rust": {
                "name": "construction.materials-area-1.0.0-rust.fune",
                "size": 11565,
                "sha256": "f7db13a24c29cebb4f711ba14ad5632d0187ba184d30f18d48d9af7d177e5500",
                "integrity": "sha256-s3Upf1L9OnJyqzuIR3p35024Q35BJrf6ZfScIMeFBp8="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "construction.payment-notice-dates": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-cvGQOlYmrKtCTUWmn5d6z7A8NA3Si8t57+Mr0fISsSw=",
          "summary": "Construction Act default dates: payment due, payment notice, final date for payment and pay-less notice.",
          "level": 2,
          "tags": [
            "construction-act",
            "hgcra",
            "scheme-for-construction-contracts",
            "payment-notice",
            "pay-less-notice",
            "final-date-for-payment",
            "due-date",
            "gb"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0",
            "dates.day-of-week": "^1.0.0",
            "dates.bank-holidays": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/scheme-periods.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "construction.payment-notice-dates-1.0.0.fune",
            "size": 34450,
            "sha256": "3f252214811a3ccf62f6e5ec82456cc7be821d47167b26e635e20ca62400a99d",
            "languages": {
              "typescript": {
                "name": "construction.payment-notice-dates-1.0.0-typescript.fune",
                "size": 22147,
                "sha256": "96edd0da95d7f54ab6dbb9ba464f0117d81a17d0b160df2b3d56b02cd33c4813",
                "integrity": "sha256-iYfhy41CPPT/F5KYLqrZuEVvu75e7PUHpB0qtuah8nA="
              },
              "python": {
                "name": "construction.payment-notice-dates-1.0.0-python.fune",
                "size": 22337,
                "sha256": "6a65afdadfb2dc636de414f04503c4a4b53ea8dedd5c6328fb790e00f40420c7",
                "integrity": "sha256-mSWw2Q/RRflDUbeKozQDBdZRKvFOS1GWpWyZu/31eRM="
              },
              "rust": {
                "name": "construction.payment-notice-dates-1.0.0-rust.fune",
                "size": 24382,
                "sha256": "59c7e0e70fdbcd620c363005eece182c909a69237d7fe2f201ffbece7b56ca0a",
                "integrity": "sha256-5CwItmRZV8YTlyJFOPxcE3f/6iq7ECV4KIVENEMTdrk="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-5ObrkA3BoTmkiZBMnFaUHQ0iOlfiRKVU5rm/0biw/Fo=",
          "summary": "Construction Act default dates: payment due, payment notice, final date for payment and pay-less notice.",
          "level": 2,
          "tags": [
            "construction-act",
            "hgcra",
            "scheme-for-construction-contracts",
            "payment-notice",
            "pay-less-notice",
            "final-date-for-payment",
            "due-date",
            "gb"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0",
            "dates.day-of-week": "^1.0.0",
            "dates.bank-holidays": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/scheme-periods.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "construction.payment-notice-dates-1.0.1.fune",
            "size": 35734,
            "sha256": "93aa612d3ecd3dda27db6e041fe09a0ad80aed7c362f01b363803c0783cfdce6",
            "languages": {
              "typescript": {
                "name": "construction.payment-notice-dates-1.0.1-typescript.fune",
                "size": 23423,
                "sha256": "6d7d75175dd089ac3297e24282b6efd2459efffd04ec3402e3c404486b901ccf",
                "integrity": "sha256-EyToDzovAClHX9r3ePvARjZd9PUDp+pZgleNmuF7BD0="
              },
              "python": {
                "name": "construction.payment-notice-dates-1.0.1-python.fune",
                "size": 23621,
                "sha256": "500e9e285c30b1197da907dbb573b33e1c29ef150722802b47fb330b7d87280a",
                "integrity": "sha256-WkucSmF0yTiBfscjug1G3y/1d6tB8sbAhAOsmeSEl0M="
              },
              "rust": {
                "name": "construction.payment-notice-dates-1.0.1-rust.fune",
                "size": 25658,
                "sha256": "261c4494af371792210e4970535a8aa1d331a094d97dfeb8fec774efa23ead3b",
                "integrity": "sha256-/zmAusA3d10sMIWuNlOCV6rKP/gLFo+iIgTmI+sSLYk="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.2": {
          "integrity": "sha256-4FpqvJnj6xFwGydSXb60WyXq6v5cX6hfB82wsnZAey4=",
          "summary": "Construction Act default dates: payment due, payment notice, final date for payment and pay-less notice.",
          "level": 2,
          "tags": [
            "construction-act",
            "hgcra",
            "scheme-for-construction-contracts",
            "payment-notice",
            "pay-less-notice",
            "final-date-for-payment",
            "due-date",
            "gb"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0",
            "dates.day-of-week": "^1.0.0",
            "dates.bank-holidays": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "data/scheme-periods.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "construction.payment-notice-dates-1.0.2.fune",
            "size": 36321,
            "sha256": "5ed0215832c005d94c37e236854190c8faf28902b35482e0156b08351caa1634",
            "languages": {
              "typescript": {
                "name": "construction.payment-notice-dates-1.0.2-typescript.fune",
                "size": 24010,
                "sha256": "b907d52a520d6ac2a00891ee3117df3b446ea3d34bb726e0b32eb8a5d7881f32",
                "integrity": "sha256-AuMRonNP2hYQjWWm5gChZVx8rFZ4Cn8LJQavAM1B2dQ="
              },
              "python": {
                "name": "construction.payment-notice-dates-1.0.2-python.fune",
                "size": 24208,
                "sha256": "e52d5b9e2b680856210c334e5aa3127f667a43f55f09f7406c05cffc4db360c1",
                "integrity": "sha256-3pqLQ80+WOvPhYfWM1P1ltjBNTyfAga95kpuMggmLlI="
              },
              "rust": {
                "name": "construction.payment-notice-dates-1.0.2-rust.fune",
                "size": 26245,
                "sha256": "8b69ae547cbc157c787f7f613ae370079f41cc3509057472e573e6812ec2e5b3",
                "integrity": "sha256-FcbrtO3tD6HN6hZsdmAyIIHl30XhS3oZBLk8EZRHPkk="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "construction.retention": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-PalIvLJiGpVataGLmfzd70o2uGxBSPHlKJkGU8HT+nw=",
          "summary": "Retention held and released on a construction valuation: full rate, half at practical completion, none at the end.",
          "level": 2,
          "tags": [
            "retention",
            "construction",
            "valuation",
            "practical-completion",
            "defects",
            "jct",
            "subcontract"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "construction.retention-1.0.0.fune",
            "size": 17797,
            "sha256": "3af86f923a327011e14fe345cb3d8f3ecec00bc9d184e6f288c24ed4a47f2132",
            "languages": {
              "typescript": {
                "name": "construction.retention-1.0.0-typescript.fune",
                "size": 13541,
                "sha256": "875a786bfe00611ac7da10056ed9a86fa432110b016cd54048288289642c1b1d",
                "integrity": "sha256-OSFiyYq3GhINx0H8LD34quYz6pzKfwnY3Cu94Nki+mA="
              },
              "python": {
                "name": "construction.retention-1.0.0-python.fune",
                "size": 13615,
                "sha256": "fdb0197509b3244bce92a6b1a17d11a0b8dd607cfccb2be1f443c9dbf2520319",
                "integrity": "sha256-K5UQP5pLBcxF0QXX1rn8tIarX1zu3YwustsScpAnzCc="
              },
              "rust": {
                "name": "construction.retention-1.0.0-rust.fune",
                "size": 14277,
                "sha256": "ab4783fe413178b422ac942047ef1b046d16f009ba188dba26cbbdf0a4568a77",
                "integrity": "sha256-btKKBzkOVk933dUzAhFFOf4VMNUJXp4hKWYznY8jpIA="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "construction.roof-pitch": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-iXena07Vhpq4OOlTgzifcC95jY6Q2iX4M1uIVP/4s0U=",
          "summary": "Roof pitch in degrees, rafter length and roof slope area from span, rise and length.",
          "level": 1,
          "tags": [
            "construction",
            "roof",
            "pitch",
            "rafter",
            "angle",
            "slope",
            "area",
            "roofing"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.atan": "^1.0.0",
            "math.round-float": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "construction.roof-pitch-1.0.0.fune",
            "size": 13927,
            "sha256": "a8a35da395a9273cd0e552f4eaf3ea782a8dc8357310c2c616bc80d54187f6f9",
            "languages": {
              "typescript": {
                "name": "construction.roof-pitch-1.0.0-typescript.fune",
                "size": 9247,
                "sha256": "80983d07cf33f10b3120ad6542165d44feb8c1287be2a1121ffcc9f9e35817f3",
                "integrity": "sha256-bL5Nl/+b/V+NNJjfd9piU7pwkIcUegajm0L5BX8jDlU="
              },
              "python": {
                "name": "construction.roof-pitch-1.0.0-python.fune",
                "size": 9284,
                "sha256": "736fce85a3274fcd201cd5861c758bb79df05edd7d0d7443cf57fea1c0501097",
                "integrity": "sha256-AKadfcdh+2fP6ZK+EKgebsTX5jNvZwCqfTUWIUoyzps="
              },
              "rust": {
                "name": "construction.roof-pitch-1.0.0-rust.fune",
                "size": 9952,
                "sha256": "9f7a0ce97eed4cf5d6e63d8d974c60107dc72833cd1537a8ad56756e0a7bd71f",
                "integrity": "sha256-N4zXgkNhgqE76AhxDwwdcjNy4w1kuy7PqGmYDHWAvk4="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "construction.timber-length": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-UKLLfFjulaOFzh7SRlBQ7mJmzUTItCr2GDQ/Orb1/nw=",
          "summary": "Cutting list: which stock lengths to buy and which pieces to cut from each, allowing for saw kerf.",
          "level": 1,
          "tags": [
            "timber",
            "cutting-list",
            "cut-list",
            "kerf",
            "stock-length",
            "bin-packing",
            "carpentry",
            "offcut"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "construction.timber-length-1.0.0.fune",
            "size": 19176,
            "sha256": "124e7adbbd6c2a9011a4643743e9dc813bf87e176a788a2da7e1a58768ac3aea",
            "languages": {
              "typescript": {
                "name": "construction.timber-length-1.0.0-typescript.fune",
                "size": 13366,
                "sha256": "65b70a308b612df6a002f33679e59a4878443f4b341d147222799b2e3da93540",
                "integrity": "sha256-XjSHlFrJbgdvmYEzfz/vuWQtP3dmVFNRT5a/K/JBZqM="
              },
              "python": {
                "name": "construction.timber-length-1.0.0-python.fune",
                "size": 13307,
                "sha256": "7b7fc7249c7a5335b84fb2cd3d2cc5b012512d1c9a8770ac3a1d868b5588286b",
                "integrity": "sha256-PuA1KNcv+tBb0RCv2yPW4vY31Ole77DOTZRMcB2BAgU="
              },
              "rust": {
                "name": "construction.timber-length-1.0.0-rust.fune",
                "size": 14943,
                "sha256": "29d2623c9c3dbd47d99f97be02b896d9a11538e8ac4ec5d1f4d7ac33973e0d3c",
                "integrity": "sha256-9FgMyEcj/GzanIIxYElwjsD4zEP0lLcgo5VYF6gpbCQ="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "construction.valuation": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-Ago/OUR4h4robfC68mLSGrhoU+on7aWoyCtY6jFCK60=",
          "summary": "Interim valuation: gross value to date, retention, previous payments, amount due, VAT or reverse charge, and CIS.",
          "level": 3,
          "tags": [
            "valuation",
            "interim-payment",
            "application-for-payment",
            "construction",
            "retention",
            "cis",
            "vat",
            "payment-certificate"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.add": "^1.0.0",
            "money.amount": "^1.0.0",
            "finance.tax.add-vat": "^1.0.0",
            "construction.retention": "^1.0.0",
            "construction.cis-deduction": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "construction.valuation-1.0.0.fune",
            "size": 44079,
            "sha256": "1974a3927d6147e478ea118428c408484aed5f276db955298896d5162f0078a8",
            "languages": {
              "typescript": {
                "name": "construction.valuation-1.0.0-typescript.fune",
                "size": 35812,
                "sha256": "04400efcfd6ab416628da70dd98a5c4b4432a0a0d4fab86ac02112df9b024caa",
                "integrity": "sha256-cFtuntLMcwfFYlAHGGFUcu+BRIdpkl+CephgaFnWngY="
              },
              "python": {
                "name": "construction.valuation-1.0.0-python.fune",
                "size": 35969,
                "sha256": "77409f98513a338d2b4b286431a58413b08e9ebda21c6f307be48af8a949ca7b",
                "integrity": "sha256-N4nrKrGPcBCyXnowxbbDwtPCZrVkoow63CDj2XNMJ6g="
              },
              "rust": {
                "name": "construction.valuation-1.0.0-rust.fune",
                "size": 38482,
                "sha256": "7b5de90bf3974da1e59bb8698b2837b1ca992507d8a5b6a31c052d1532c1f67e",
                "integrity": "sha256-owYIQWtv44rAH8y6v8Zoja1SpRTjDVYxjabSeDSNcgQ="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "construction.vat-reverse-charge": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-oPXQ/AAoaXTLzinm1Yg8Xgrggx1PauG2MboXlkJzB0U=",
          "summary": "Whether the UK VAT domestic reverse charge applies to a construction supply, and the invoice wording.",
          "level": 2,
          "tags": [
            "vat",
            "reverse-charge",
            "drc",
            "construction",
            "cis",
            "s55a",
            "invoice",
            "gb"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "data/reverse-charge.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "construction.vat-reverse-charge-1.0.0.fune",
            "size": 34072,
            "sha256": "3065508965a28cad36fd688f2bfaba11a1b14d62718e966897162b89c4165221",
            "languages": {
              "typescript": {
                "name": "construction.vat-reverse-charge-1.0.0-typescript.fune",
                "size": 24916,
                "sha256": "57961b82f7a450902309aa3bae1dd1007499242155abfe6a6829332060b73caf",
                "integrity": "sha256-a7lMceYVzeHCRVSNKDVn2UALxn9YyisiJFqG/pDeVt0="
              },
              "python": {
                "name": "construction.vat-reverse-charge-1.0.0-python.fune",
                "size": 25095,
                "sha256": "215d8d32222d0e41cfa84f45f40f6a517b8cd00f5e658108d3f9cb1f92847230",
                "integrity": "sha256-S+Aj1T1fDtAs2AC4lzqAv5SRzxP1kCdStB73TCtbk6A="
              },
              "rust": {
                "name": "construction.vat-reverse-charge-1.0.0-rust.fune",
                "size": 27283,
                "sha256": "19d7614b385fc6fadadf354ab88b0b5179cca0256f9dfd6f11796c40d31a98f4",
                "integrity": "sha256-6L3fiC5wx2/pN/c9eEQY09dRi6ReKaHPus6/xq/dTkw="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-frEdgtOvmSPutQoIhuJbIggLVKn/ZzcnAkRHYc3shYs=",
          "summary": "Whether the UK VAT domestic reverse charge applies to a construction supply, and the invoice wording.",
          "level": 2,
          "tags": [
            "vat",
            "reverse-charge",
            "drc",
            "construction",
            "cis",
            "s55a",
            "invoice",
            "gb"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "data/reverse-charge.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "construction.vat-reverse-charge-1.0.1.fune",
            "size": 35216,
            "sha256": "0f2d072615f4f1ec9b24c96f86a12e13cdcf8c003d414fd4862810229140106b",
            "languages": {
              "typescript": {
                "name": "construction.vat-reverse-charge-1.0.1-typescript.fune",
                "size": 26052,
                "sha256": "78c65d609a48391445a3c0f30c0a648ae6b8f45b17e9f9ad4ffc11440b2f091d",
                "integrity": "sha256-e9ZBEmvcqAchEI6DaueKZZQPVLB9VBWxkJtEmWQubJA="
              },
              "python": {
                "name": "construction.vat-reverse-charge-1.0.1-python.fune",
                "size": 26239,
                "sha256": "6980a87042069a81fd1b6fe980d18436a9f8ea1f09c39134033381bc34b2341f",
                "integrity": "sha256-C8LANU9W85XLZUK0AWDohgBHvoFzEQrwdM23Mn+pMU0="
              },
              "rust": {
                "name": "construction.vat-reverse-charge-1.0.1-rust.fune",
                "size": 28419,
                "sha256": "ed6a3c821b55fb14fcbe8dfcd3e727897baa13bbe6fe6d7345267782dcc4e051",
                "integrity": "sha256-qTaNkD/kuHyf/qRz/71RPAA7tL+BJ56JQdcMfiq+HPo="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.2": {
          "integrity": "sha256-A6ob9EuWy0+1MqvbueDO1tpkvZpyfwZWfGoCyVNpv8Y=",
          "summary": "Whether the UK VAT domestic reverse charge applies to a construction supply, and the invoice wording.",
          "level": 2,
          "tags": [
            "vat",
            "reverse-charge",
            "drc",
            "construction",
            "cis",
            "s55a",
            "invoice",
            "gb"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "NOTICE",
            "README.md",
            "data/reverse-charge.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "construction.vat-reverse-charge-1.0.2.fune",
            "size": 35697,
            "sha256": "da27d1183c7730bec44c1eddb84b28ee0e321a5d184e5d382e7eca4805b2fab4",
            "languages": {
              "typescript": {
                "name": "construction.vat-reverse-charge-1.0.2-typescript.fune",
                "size": 26533,
                "sha256": "25a024b0279dab0f102b286c345f66067e613f9bb1ee743a599f1d039453e6d5",
                "integrity": "sha256-KM1RUJOGnzNZaIUmzpU7aOGxVoaukyUe/Yc8caO8OhI="
              },
              "python": {
                "name": "construction.vat-reverse-charge-1.0.2-python.fune",
                "size": 26720,
                "sha256": "35c178909cd79f401a461236fbba8e5035775ab9853e683b7ad018c8287a9e54",
                "integrity": "sha256-DAdCpdWOCTBStm95Iu/3xM4PurGIPr8vMKSg/Lg3cbs="
              },
              "rust": {
                "name": "construction.vat-reverse-charge-1.0.2-rust.fune",
                "size": 28900,
                "sha256": "9fb6dc1db5793480c052556b99bb0654b313328f71e015c6f6175505ba17b2fe",
                "integrity": "sha256-ZS3X8nrCCtVerchDPC8gokrFapo0Euud840FAdrTSQA="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "crypto.constant-time-equal": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-cqrasHBw4PZNriQR6XBoOZbDB20qlvK+qZC5nbVanjI=",
          "summary": "Compare two byte strings in time that does not depend on where they differ, for checking MACs and hashes.",
          "level": 0,
          "tags": [
            "constant-time",
            "compare",
            "timing-attack",
            "equal",
            "mac",
            "hmac",
            "secure-compare",
            "timingsafeequal"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "crypto.constant-time-equal-1.0.0.fune",
            "size": 8608,
            "sha256": "db66dc151f666ef3543ee658d0dba37923deb21f54390dc4595a6c080f23bad3",
            "languages": {
              "typescript": {
                "name": "crypto.constant-time-equal-1.0.0-typescript.fune",
                "size": 6209,
                "sha256": "ca89c184df2d0d75205cc1d2fe7cceb6e6a156a0dea7279fcd92b622c37902f4",
                "integrity": "sha256-U6nbWG6elPgSgxV4/dgr1j6eGw7uGU0IZnqJR8uC+Bw="
              },
              "python": {
                "name": "crypto.constant-time-equal-1.0.0-python.fune",
                "size": 6055,
                "sha256": "b91f00e57c39a5f2d02300d93c341513dcb1fdd1112818a9eeaa325b7159074d",
                "integrity": "sha256-G4L6JYrXhBe00P3maIL8OHVTk/kkn2uY++uhZ6TMic0="
              },
              "rust": {
                "name": "crypto.constant-time-equal-1.0.0-rust.fune",
                "size": 6626,
                "sha256": "47222e1232ca033a4d6b59b04e5472eca6fba3125527cb060d938a0508fab413",
                "integrity": "sha256-ZVFveYiN7g2bJfNtUPOZF9oZUWgm8X1iuZFrdhxdCFY="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "crypto.hmac-sha256": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-BeO1BlhEvxgMTzQ/BAW5W3ZAu/eU36BOBhnME1bncCA=",
          "summary": "HMAC-SHA256 of a message under a secret key (RFC 2104, RFC 4231), in pure code that also runs in the browser.",
          "level": 0,
          "tags": [
            "hmac",
            "hmac-sha256",
            "mac",
            "signature",
            "sha256",
            "keyed-hash",
            "rfc2104",
            "rfc4231"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "crypto.sha256": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "crypto.hmac-sha256-1.0.0.fune",
            "size": 14277,
            "sha256": "aefbaef231a3cc8016bbff5c5226b4169f41ea671335aac1093c35e6d5bbf81e",
            "languages": {
              "typescript": {
                "name": "crypto.hmac-sha256-1.0.0-typescript.fune",
                "size": 11533,
                "sha256": "042f98e062fae4e9a3a668a264b50ecfefc9c94fdd3f9a88446bdf393cec62dd",
                "integrity": "sha256-pACvBGTYnF8K4/B50gqmvDen8dR3QyKpu1PZi6MnbmE="
              },
              "python": {
                "name": "crypto.hmac-sha256-1.0.0-python.fune",
                "size": 11043,
                "sha256": "ddac0a8ce5b45c95da02aafafe7cb87729b80bd9c19da3b5fc4065443c62040d",
                "integrity": "sha256-Q/v7lcpOc6RhrFXSaOmtbDAthILRFsIlB75anALkLqI="
              },
              "rust": {
                "name": "crypto.hmac-sha256-1.0.0-rust.fune",
                "size": 11999,
                "sha256": "b67fe2226a3ecf4b20c98252358c3e167a7fb4df72dd0679425faf2c8503fee2",
                "integrity": "sha256-voSp7vtXJKS30gTNE4A4DUz5yTiWA8SNM2TFXuZdja8="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "crypto.pbkdf2-sha256": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-gQynyGa6Jvc4kbKAv58hcUT12bIrwUezVhJnrAhbWj8=",
          "summary": "PBKDF2 with HMAC-SHA256 (RFC 8018): derive a key from a password and salt, slowly, fast enough for a login request.",
          "level": 0,
          "tags": [
            "pbkdf2",
            "pbkdf2-sha256",
            "key-derivation",
            "kdf",
            "password-hashing",
            "hmac",
            "sha256",
            "rfc8018"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "crypto.pbkdf2-sha256-1.0.0.fune",
            "size": 25612,
            "sha256": "ddf20f8864a274ed88673b3d29c00fb42f617b380f0b400ef48c77bc67f193b0",
            "languages": {
              "typescript": {
                "name": "crypto.pbkdf2-sha256-1.0.0-typescript.fune",
                "size": 16908,
                "sha256": "2b529e2c3d079a557c67cf4a10bcdab3e86a797c79d0e3f7a2a8952655c22adb",
                "integrity": "sha256-URfhCxMnvuVvw88IbszGn0cxyT8sfos74cx8WfZmhGA="
              },
              "python": {
                "name": "crypto.pbkdf2-sha256-1.0.0-python.fune",
                "size": 9945,
                "sha256": "25067faa0cedce756a404cecefbd40b5a4ff162dbecb917ef87e88ca08e01fc6",
                "integrity": "sha256-Q8OK5rlmyfPCD/k1Z6VttInKf1Vynt2PpeWLoMWKzpU="
              },
              "rust": {
                "name": "crypto.pbkdf2-sha256-1.0.0-rust.fune",
                "size": 16195,
                "sha256": "8c370f04ecc1b8d06c0c7bf2e9c0c9c6676aa9ad99b7a8cc7a71d5f113740a79",
                "integrity": "sha256-8KyLQZJrqLa318pTuMT1fXzV1kclyQUHPD/G7WI+6n0="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "crypto.sha256": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-m6yeQvXT6dWCP3WTtIl9ehCXaNtJsYli/mEoOPz34As=",
          "summary": "The SHA-256 digest of a byte string (FIPS 180-4), in pure code that also runs in the browser.",
          "level": 0,
          "tags": [
            "sha256",
            "sha-256",
            "sha2",
            "hash",
            "digest",
            "checksum",
            "fips180-4",
            "crypto"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "crypto.sha256-1.0.0.fune",
            "size": 17379,
            "sha256": "beb0733f73c235f9276b554934618e517a26461d4bf4350f5465f14bfd89c645",
            "languages": {
              "typescript": {
                "name": "crypto.sha256-1.0.0-typescript.fune",
                "size": 12628,
                "sha256": "ab09b0511b43c1d79753c6ae38a315e3c5f03499b967fd2f3e80320636456e6f",
                "integrity": "sha256-9PcBnZ6zF4lMiaYQ42Wg0trYWuf2YtTne8vj97MXfmE="
              },
              "python": {
                "name": "crypto.sha256-1.0.0-python.fune",
                "size": 9009,
                "sha256": "0dc9805f42b79d2e66c7aa4e9b658d7069bac35156fac942c71689026653dc9b",
                "integrity": "sha256-zRKlgFmSSS+CvIeAtk1yLK4dmu2udmV0FMC5F7yoYM8="
              },
              "rust": {
                "name": "crypto.sha256-1.0.0-rust.fune",
                "size": 12174,
                "sha256": "2a69c4e0572dc48e62bc8e67e77752a7331f5c46d533f75ccda813c0fadcbe8b",
                "integrity": "sha256-WJa9EmWKGlO3DoaxWn/WBcgBoH7GSoXxRHSPrSajZqU="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "dates.add-business-days": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-jWH1UTuEI8KE/60F1CfMSjVeAwKjS48WhHRzb4VfgNI=",
          "summary": "Move a date forward or back by working days, skipping weekends and a caller-supplied holiday list.",
          "level": 1,
          "tags": [
            "dates",
            "business-days",
            "working-days",
            "workday",
            "deadline",
            "sla",
            "holidays"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0",
            "dates.day-of-week": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "dates.add-business-days-1.0.0.fune",
            "size": 10744,
            "sha256": "ca468a6c835a3956b1d871f90139f2c4867e6021e46ae57156363167f24361b1",
            "languages": {
              "typescript": {
                "name": "dates.add-business-days-1.0.0-typescript.fune",
                "size": 7607,
                "sha256": "ee861e648f7f38b1c43e2f02ddb32b42399e8b353182ca73932b775d466dd195",
                "integrity": "sha256-9n9eP2IVIOWBKctFVIoQNU58hI3Mnp8K1TvdBVE8i4I="
              },
              "python": {
                "name": "dates.add-business-days-1.0.0-python.fune",
                "size": 7603,
                "sha256": "1ac183d533a2d6f804d783ef748135394c20eb8fb4dd90986a3989e5bbfbf7f9",
                "integrity": "sha256-FNwbLgNhyURxeX5B0vCCEgcuhjGoTqa+2b7x8uQl72Q="
              },
              "rust": {
                "name": "dates.add-business-days-1.0.0-rust.fune",
                "size": 8248,
                "sha256": "846d18703ca8ca8c499f8d728e9cadc84bfd0111d960669d713c50fb928971e0",
                "integrity": "sha256-4aiHOmgPQnpRNAQETVYq2wTa+ZEWdvphQ/YITBllpHE="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "dates.add-days": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-25F3NuMOKIimWm/K9nCrIhOES0ywUKybI3UNMXgwboU=",
          "summary": "Shift an ISO date by a whole number of days, forwards or backwards, with exact calendar arithmetic.",
          "level": 0,
          "tags": [
            "dates",
            "calendar",
            "arithmetic",
            "leap-year",
            "iso-8601"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "dates.add-days-1.0.0.fune",
            "size": 26107,
            "sha256": "c8546db9870fee4bc128650b0c3801cf6b3a0bc4daa6338c53a5f3b6d15a79e5",
            "languages": {
              "typescript": {
                "name": "dates.add-days-1.0.0-typescript.fune",
                "size": 13011,
                "sha256": "8ac31bd892373c0661c4190af278ad458d8e7491910525a7bf3e315178780095",
                "integrity": "sha256-TA9OX6nGtiR1DLG6aldSvAU5bhSVQTVFm0m2xMoSRK4="
              },
              "python": {
                "name": "dates.add-days-1.0.0-python.fune",
                "size": 12682,
                "sha256": "3e71f3cb7a2ad33d67464f1b1f7d5e29aaf9335a3c5473ffeb44ce8f1c6cb80d",
                "integrity": "sha256-37vTgepMCnYs/ZZDXj7jWyq2hCSb0uZ4OkqoK9QPGbY="
              },
              "rust": {
                "name": "dates.add-days-1.0.0-rust.fune",
                "size": 13630,
                "sha256": "45bce72cf9d89d00cbd39d13ec02d265010f0f3c3ef5ff39181cb8303bfe6987",
                "integrity": "sha256-uIERvK8nLDWvqiQ4pJKtqvnnQl/CAEioRltpp34u1pM="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "dates.add-months": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-464qlVjy21ALfvEhwSwkaC4HIjILvTm/JKm/H9M/SkE=",
          "summary": "Add calendar months to an ISO date, clamping to the month end: 31 Jan + 1 month is 28 or 29 Feb.",
          "level": 0,
          "tags": [
            "dates",
            "calendar",
            "months",
            "add-months",
            "edate",
            "billing-date",
            "month-end"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "dates.add-months-1.0.0.fune",
            "size": 9622,
            "sha256": "365179042efaf5baa5a372bd6f600a4866198ee24bd38041b598e441b535513d",
            "languages": {
              "typescript": {
                "name": "dates.add-months-1.0.0-typescript.fune",
                "size": 6666,
                "sha256": "f6bd2f8e8ef5e28fbf6274db988e03b1edc8c8cea1d3893878404f234260754e",
                "integrity": "sha256-6amoVl2pfXj52/geLPKNokV1O/VBYp691C7yNNvJJG8="
              },
              "python": {
                "name": "dates.add-months-1.0.0-python.fune",
                "size": 6699,
                "sha256": "fcd1109cbb37aded8e0e4021ccd0e809c45b2598a1523e6bf3a4c5658140eb19",
                "integrity": "sha256-tgFAvkxLNtzWup3kOuORO1hfiFAz6RkAenm17GeGkiM="
              },
              "rust": {
                "name": "dates.add-months-1.0.0-rust.fune",
                "size": 7219,
                "sha256": "c0c081c4b630c4b961cb0ae5db2f3459d20cf7244bd6926f5598ef220cfa7130",
                "integrity": "sha256-5teOi9DcvjZwPBbuTVRrKc0LAiWpyzIMojPQE0yCcU4="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "dates.age": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-9EWINZLDhKrQMRMCMAKsFGOvyQry0laf2doI/77ipGo=",
          "summary": "Age in whole years on a given date, with 29 February birthdays ageing on 1 March in other years.",
          "level": 1,
          "tags": [
            "dates",
            "age",
            "birthday",
            "date-of-birth",
            "years-old",
            "leap-day",
            "eligibility"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "dates.age-1.0.0.fune",
            "size": 8959,
            "sha256": "55db52a3f8f0f2ddc2ef538a47e196d364d089b870e596f48b02fe9348c6e070",
            "languages": {
              "typescript": {
                "name": "dates.age-1.0.0-typescript.fune",
                "size": 6755,
                "sha256": "013169186c21b288c460aa8b2e9a4516a31f0e42dd8913fa1f48497438445b28",
                "integrity": "sha256-nrKNIGN/qubtv4M6+0yyLpH+gJtvmW60NCcE1i8YhTg="
              },
              "python": {
                "name": "dates.age-1.0.0-python.fune",
                "size": 6708,
                "sha256": "8f42f6c75f05f0a587ecbd0e23e525c9b3b228286f931cad2d8909ac4982dc48",
                "integrity": "sha256-wL9zHG49QeGg0BmG29EH9lJ/Ef2CnPOSrrzhySSzh9w="
              },
              "rust": {
                "name": "dates.age-1.0.0-rust.fune",
                "size": 6972,
                "sha256": "8ed892e6068bcb4de825b901ae5b1291f4ff8218ef7825242c70b82af3502261",
                "integrity": "sha256-eIFKmc+ZYcxwWPdmcWUVj/2woHpR8B1wvP4ikKF3kik="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "dates.bank-holidays": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-w3uwRcTMm4gK/x8X6pbeNrrvy1F1Ijn7DlvMh/I3ix0=",
          "summary": "UK bank and public holidays for a region and year, as published by gov.uk, including one-off holidays.",
          "level": 1,
          "tags": [
            "dates",
            "bank-holidays",
            "public-holidays",
            "holidays",
            "uk",
            "gb",
            "working-days",
            "calendar"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "data/bank-holidays.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "dates.bank-holidays-1.0.0.fune",
            "size": 59370,
            "sha256": "916e69dedcd37c4d3383c26ae79478060310892b261b8a7e8bb073817c9f6298",
            "languages": {
              "typescript": {
                "name": "dates.bank-holidays-1.0.0-typescript.fune",
                "size": 54937,
                "sha256": "d12bce3c3e60a050ca971370c020cfef18d537c398df080db789184c5dfbecb2",
                "integrity": "sha256-pqfCHsXjGEhYSXvWz2IYSjai43QhjlMjHjVP982XC/w="
              },
              "python": {
                "name": "dates.bank-holidays-1.0.0-python.fune",
                "size": 54998,
                "sha256": "0e82d0eebb95378f176a8373541a46517fa89b223f274d91c747a62268e3903b",
                "integrity": "sha256-Sye9eaDNoUSi37QeGuyFNpOUgktwPtRZZi/RD0I92bk="
              },
              "rust": {
                "name": "dates.bank-holidays-1.0.0-rust.fune",
                "size": 55963,
                "sha256": "ac40768d84c48c7cdaf2fc51d28b0d1385f2ab3174c7ed3416bcb932c00f09ae",
                "integrity": "sha256-/0LmPwpKmsrC4BN6UrASSePHSKc0sI53QSbHkw84Irg="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-EsJjt2iFhw7jTBluhZoKYNB6/F/hgJivpD4qQbvKvhA=",
          "summary": "UK bank and public holidays for a region and year, as published by gov.uk, including one-off holidays.",
          "level": 1,
          "tags": [
            "dates",
            "bank-holidays",
            "public-holidays",
            "holidays",
            "uk",
            "gb",
            "working-days",
            "calendar"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "NOTICE",
            "README.md",
            "data/bank-holidays.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "dates.bank-holidays-1.0.1.fune",
            "size": 59839,
            "sha256": "0b3290c1a820afe756b41df29850449ee4c8ae1ddc5834ea7012cf5f094edaf1",
            "languages": {
              "typescript": {
                "name": "dates.bank-holidays-1.0.1-typescript.fune",
                "size": 55406,
                "sha256": "1a1159749daa6d6676b8d657db2a6f7f3bb72e4b15af6712c731e1a54375452e",
                "integrity": "sha256-mBN4FKNMJIcWx8OW9ZbPvEIRJgRd2kgISZeuwj6crvM="
              },
              "python": {
                "name": "dates.bank-holidays-1.0.1-python.fune",
                "size": 55467,
                "sha256": "342cecc130084a36f322ee9fe50912805afad3e9b2a8e94276e10ed8e51c0cb4",
                "integrity": "sha256-FuFyjmrFKRKdNxCufQrtTNhGRufp4buL7z+AozA6Hos="
              },
              "rust": {
                "name": "dates.bank-holidays-1.0.1-rust.fune",
                "size": 56432,
                "sha256": "cc33cf565ad753189412471ab33d24a8ccf93515d890126f697270381be7bd0c",
                "integrity": "sha256-mMttRLzUfPg/lKR6v4u1p+iPO9hilLbG9UKw4k7TPFM="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "dates.business-days-between": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-muIeFe+3UKNNnUFWoMMONspOpyAqgUYB1vPMAwwsgik=",
          "summary": "Working days between two dates, excluding weekends and a caller-supplied holiday list.",
          "level": 1,
          "tags": [
            "dates",
            "business-days",
            "working-days",
            "sla",
            "holidays",
            "calendar"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0",
            "dates.day-of-week": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "dates.business-days-between-1.0.0.fune",
            "size": 14702,
            "sha256": "350624abbac7ca1f91a54f9cf79a8bb6f43b98eef82b4135be420f139c178a88",
            "languages": {
              "typescript": {
                "name": "dates.business-days-between-1.0.0-typescript.fune",
                "size": 9371,
                "sha256": "9ae698be0352e85b93a2523d9e5316600d9dab54904521a81995c2cc24cfb60f",
                "integrity": "sha256-Pmn1FluxqmSGG554q16xkzRumoe1wAxLzMcQVb2gpxM="
              },
              "python": {
                "name": "dates.business-days-between-1.0.0-python.fune",
                "size": 9332,
                "sha256": "2ff344c198ab29bea96f49312affc9c5a5b72aa58ee23dc74845a505c9fe41c8",
                "integrity": "sha256-AHWkf7JjgG7uS37V880S5KWNLsnIt+/5vYsnCNHiN7c="
              },
              "rust": {
                "name": "dates.business-days-between-1.0.0-rust.fune",
                "size": 9821,
                "sha256": "de5d65370ab6ecddefe274d3c92bfa66881e708c92d16ad4161ae9b9088cb79c",
                "integrity": "sha256-M4G0lJPWtCD5jJ5XnWQqed54bf9JMl9nz3DVODxbc7M="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "dates.day-count-fraction": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-MdhhzyrF8t2jopfgNRVYrJlt771qfZeECyw+TgoX5vU=",
          "summary": "Year fraction between two dates by ACT/365F, ACT/360, 30/360, 30E/360 or ACT/ACT ISDA, as an exact fraction.",
          "level": 1,
          "tags": [
            "dates",
            "day-count",
            "year-fraction",
            "accrual",
            "interest",
            "bond",
            "act-360",
            "act-365",
            "30-360"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "dates.day-count-fraction-1.0.0.fune",
            "size": 16521,
            "sha256": "c19c350e9bcfd350f52a9fa1766f89525c83765d2f239ae9948617001b15a651",
            "languages": {
              "typescript": {
                "name": "dates.day-count-fraction-1.0.0-typescript.fune",
                "size": 10588,
                "sha256": "303cd04eb8f7275102cd6323260db8092f023e6082221caef00692ffcfcb5b0a",
                "integrity": "sha256-QleN0rqMRSpdOV/mraQHwp0+tNFBmAnyrb7wSlsnU4E="
              },
              "python": {
                "name": "dates.day-count-fraction-1.0.0-python.fune",
                "size": 10541,
                "sha256": "1374e38f0f794e0a21eae9086307caafd7eefee9528698a891cbd8b529dc4de0",
                "integrity": "sha256-kbFFMO1XA78gAawmvFSw6vDTLJV6+OGhJPeSR/RoE04="
              },
              "rust": {
                "name": "dates.day-count-fraction-1.0.0-rust.fune",
                "size": 11302,
                "sha256": "0b0f0fe7c8c080db0d83c2691fd5a868fd6d901c034b4152273b83e8a8bf53e3",
                "integrity": "sha256-oDx4dJ52phW6WjqG7t14SGTUQDGGo+EwkfbxF8vtT8M="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "dates.day-of-week": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-KK7sT9+g/QGcgQtYPjOK4akxycQgkfrEE0s/RriRdyM=",
          "summary": "The ISO 8601 day of the week for a date: 1 is Monday through 7 is Sunday.",
          "level": 0,
          "tags": [
            "dates",
            "calendar",
            "weekday",
            "weekend",
            "iso-8601"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "dates.day-of-week-1.0.0.fune",
            "size": 8714,
            "sha256": "976f7dbb98c070afdfb65de0f361d7b00c14159b37a0ee2615f23fc535081d4a",
            "languages": {
              "typescript": {
                "name": "dates.day-of-week-1.0.0-typescript.fune",
                "size": 5788,
                "sha256": "c15aa52a6db2fe4d222c0cdbe6e8b8c376e6a4e782a09173b0b6f1af8ff86178",
                "integrity": "sha256-OiJZLmmodmRfjbO19vbJ9Fs4eZxymOODMBYESufFi7A="
              },
              "python": {
                "name": "dates.day-of-week-1.0.0-python.fune",
                "size": 5781,
                "sha256": "a62b11d2d6b5f0f21e0d95e12a7bd34d651b0f1b66fb0655bf7975e2989475a8",
                "integrity": "sha256-vfNlujX/dtsfdqaVlvo3rgMVjrayiewsIocGxGyM+hA="
              },
              "rust": {
                "name": "dates.day-of-week-1.0.0-rust.fune",
                "size": 5987,
                "sha256": "3c4d9373a5933a37ab4aefdf9e3aaccaf7305bf6141193e6604c514995e30f0a",
                "integrity": "sha256-6tVFgBMw2w19DveaudT/bcFUk8ySKkvdcf9UgIFCs3A="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "dates.days-between": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-gj4XvWDUt5hEXY9W+Y52ymRA4YQcMNHE0Hw3uIaGVwY=",
          "summary": "Calendar days from one ISO date to another, signed: negative when the second date is earlier.",
          "level": 0,
          "tags": [
            "dates",
            "calendar",
            "difference",
            "elapsed",
            "days-until",
            "date-diff"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "dates.days-between-1.0.0.fune",
            "size": 5753,
            "sha256": "565c4d0d13627f23956a64889cf830784d375e938692821120e090059e785da8",
            "languages": {
              "typescript": {
                "name": "dates.days-between-1.0.0-typescript.fune",
                "size": 4708,
                "sha256": "bd15db1fa56460be420eeee5438d7e6dffea0e27e66bfb8da41be6b6b1fbd6ba",
                "integrity": "sha256-IOf+xNHjzmtZSZ6dP0JOStTW5QsFyOHEW7zftmKqUT4="
              },
              "python": {
                "name": "dates.days-between-1.0.0-python.fune",
                "size": 4692,
                "sha256": "a1560d3f9b8253e107e7bc385633beb9d50281c579681f9546a082b59e0a40eb",
                "integrity": "sha256-CNjMhC6hNOjNhznoq9+xWkBdbWLEW9nY5YQ2bvKFaEA="
              },
              "rust": {
                "name": "dates.days-between-1.0.0-rust.fune",
                "size": 4891,
                "sha256": "0bd33d149fb769492fd3d0f9fc15754684118e087dc5e29f8c3a24f11fbc8c35",
                "integrity": "sha256-XnOEvhas9yq+lvxzw+cxY/rwituOy3OM7GppGCBBqzg="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "dates.is-leap-year": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-whltxVVxHXck7lMd3Rp6ClnzabQ6GWOSVhQtmvDTi4Y=",
          "summary": "Whether a year is a Gregorian leap year: every 4th, except centuries, except every 400th.",
          "level": 0,
          "tags": [
            "dates",
            "calendar",
            "leap-year",
            "february",
            "gregorian",
            "29-february"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "dates.is-leap-year-1.0.0.fune",
            "size": 5878,
            "sha256": "41bf219585d5ca69808b1f991cae821ac237a69e9b4e28b0b4ac998c7c3d5049",
            "languages": {
              "typescript": {
                "name": "dates.is-leap-year-1.0.0-typescript.fune",
                "size": 4239,
                "sha256": "cc896a803686879df882fac02698bcfef50983f73a25618d200455fdd2907a1e",
                "integrity": "sha256-G6s0/3ke6SB0oXEeLEVjsfnGsBguFHKRVKuBjsqjV0w="
              },
              "python": {
                "name": "dates.is-leap-year-1.0.0-python.fune",
                "size": 4254,
                "sha256": "cd48042f0bd6c020eb26dce260ed6f1d6ebf23b9d4e97e1055ffc11d2d83378b",
                "integrity": "sha256-jiwubI1G85RbJrdwPXXKZuvQ006w8qpzQ/AgCSoj11k="
              },
              "rust": {
                "name": "dates.is-leap-year-1.0.0-rust.fune",
                "size": 4595,
                "sha256": "4930b6d804598ab3a122d9527d6de1a8d19dcf3fd368318a21b443c59bc1d602",
                "integrity": "sha256-0xP/B6EWmECcQrUoMpS73vzc9WpqrvczeKXzQd1a83k="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "dates.month-boundaries": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-rZatJYOgMOU1/WG8SG/zPmvOQ+eXiNY2JRyPrr7sw6A=",
          "summary": "The first day, last day and length of the calendar month containing a date.",
          "level": 1,
          "tags": [
            "dates",
            "calendar",
            "month",
            "billing",
            "period",
            "leap-year"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "dates.month-boundaries-1.0.0.fune",
            "size": 10722,
            "sha256": "9d24e00cd40e79db6edcafbb0f672a03ca0901aaa9c0c59efcc7c89f63270ee8",
            "languages": {
              "typescript": {
                "name": "dates.month-boundaries-1.0.0-typescript.fune",
                "size": 7311,
                "sha256": "e871bb0664a8cc44b0fd4d4e14e10029529536f2c231c17b7fe47339cbc4a9fb",
                "integrity": "sha256-dGMMAIO4Vlklm9M325JvR4b+by3y+zh1IDUvESWCTk8="
              },
              "python": {
                "name": "dates.month-boundaries-1.0.0-python.fune",
                "size": 7301,
                "sha256": "b1c53bc451860cf3587dc300b15a73ee199f92401c17f7bb146619357e060b2f",
                "integrity": "sha256-6wfibDjWoqt0UuBjHgeSyjioYUo/r2PQx/FPppSDUr4="
              },
              "rust": {
                "name": "dates.month-boundaries-1.0.0-rust.fune",
                "size": 7832,
                "sha256": "01e3b32001a957aebfd3491c18e3d231d92f1f380a288f84ffdb3e1efd928ee9",
                "integrity": "sha256-slDpagHQ545+hYiHlv4jenr5nw+Kttypa+I/MOnkKgM="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "dates.overlap": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-56n+rtKlfbnt/55PRmxgUZqVaLT6691W72VLCC4TneI=",
          "summary": "Days two date ranges have in common, with the end of each range stated as inclusive or exclusive.",
          "level": 0,
          "tags": [
            "dates",
            "overlap",
            "intersection",
            "date-range",
            "period",
            "proration",
            "booking"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "dates.overlap-1.0.0.fune",
            "size": 8742,
            "sha256": "08731d1504867ad1b280bdda86d5d7066507b82cdd9835266ada4d9e2c81b210",
            "languages": {
              "typescript": {
                "name": "dates.overlap-1.0.0-typescript.fune",
                "size": 6503,
                "sha256": "0105e048d8e53a7e2c4e4ae7d2fee8177cb9379c732594cb5ab9691c9f8452d6",
                "integrity": "sha256-v12TaSU0SxkwvteEMc7VscpLdlz2BNeU6ckPuMepM3c="
              },
              "python": {
                "name": "dates.overlap-1.0.0-python.fune",
                "size": 6497,
                "sha256": "5c3f593565b487701d6a706e1eea972ce5bebe64b38aa8072647abbd583f98fc",
                "integrity": "sha256-08H7jJAwFvHPVnn8Ww66AID7FPs3O+V2316ZaR+pRl0="
              },
              "rust": {
                "name": "dates.overlap-1.0.0-rust.fune",
                "size": 6830,
                "sha256": "ff3980595eb8490b5a49c9a33a45675b85c4671da7b0e5b30c16e7cafb02f512",
                "integrity": "sha256-xntr5rBPqc2ndV/jvjT3kS5Y+iWgf8RKNyMLV4aRBRM="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "dates.quarter": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-Fxwkrxl3PREPcFFfP2iomPIsWAwuyTjZ7YzJz3yCb00=",
          "summary": "Calendar quarter and fiscal quarter of a date, with the fiscal year and quarter date ranges, for any start month.",
          "level": 0,
          "tags": [
            "dates",
            "quarter",
            "fiscal-year",
            "financial-year",
            "q1",
            "reporting-period",
            "accounting"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "dates.quarter-1.0.0.fune",
            "size": 16466,
            "sha256": "a9245cb609f1202d1bdf5f7fb0d9b801c6fd7b7a79a68d0dad7c04ae4e78cf34",
            "languages": {
              "typescript": {
                "name": "dates.quarter-1.0.0-typescript.fune",
                "size": 10816,
                "sha256": "47389b683857f4b83e7ef66287ac02474ea3dbe1d846d3d210a6c26638f551e2",
                "integrity": "sha256-a/ntdAht3c87wUKud7buRysEUp90HcVhiid7WKjqwYI="
              },
              "python": {
                "name": "dates.quarter-1.0.0-python.fune",
                "size": 10922,
                "sha256": "dd4d6a7a4ee04cd9e6ed0aa89ed8dc9f57eb6a9b70b8afc14beced05fb94e9b7",
                "integrity": "sha256-jvMQ5y+g+DYuGtu2ipvs6EqSQMn8Wb8Sm6BScinpf14="
              },
              "rust": {
                "name": "dates.quarter-1.0.0-rust.fune",
                "size": 11796,
                "sha256": "b8cc788a1e30c3d2fb94c9ab77f4cfc8536d67d6a78d8fc4689fa513b47fe99e",
                "integrity": "sha256-DX3qc/IDzqMcdOvINNqSCG5Q8rSuxKwD5C81J9FcKC8="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "dates.recurrence": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-7MEXaT9QRUBaC6FQfb/aeTklVlOrfn7SBMFf65iOShg=",
          "summary": "The next n dates of a repeating rule: monthly on a day, last weekday of the month, every k days or weeks, yearly.",
          "level": 1,
          "tags": [
            "dates",
            "recurrence",
            "schedule",
            "repeat",
            "recurring",
            "rrule",
            "billing-cycle",
            "payment-schedule"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0",
            "dates.add-months": "^1.0.0",
            "dates.day-of-week": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "dates.recurrence-1.0.0.fune",
            "size": 23431,
            "sha256": "6b1e052bc18fadd07a3fc78683a4fcdcc31220b63b8d951e1d67f24a289cb99a",
            "languages": {
              "typescript": {
                "name": "dates.recurrence-1.0.0-typescript.fune",
                "size": 14472,
                "sha256": "53a08a8e0c48a28b14393f9ab8136e4361f50a0a38a5120eb64ebcdd31fae9ef",
                "integrity": "sha256-z2+WZczLGk2ez0lSccKvY4w+DA+In4eVIjE4BNIxJsQ="
              },
              "python": {
                "name": "dates.recurrence-1.0.0-python.fune",
                "size": 14623,
                "sha256": "c7000361faffe7f49368ce88022247a9c4bc67fe297191c591b241c5320a41d6",
                "integrity": "sha256-mA/S47vxgnbsdoYXBaU6ZxgIkwArC8DqcLCnBVMFKCY="
              },
              "rust": {
                "name": "dates.recurrence-1.0.0-rust.fune",
                "size": 15608,
                "sha256": "5cac59762086907a9d3e2f560934b9564026e2e1b6f2bc767b66d68ca1567106",
                "integrity": "sha256-W89jYPZd3ePyXivfFnkMEHIP8W801M9kC9NSGVbQXUY="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "dates.uk-tax-year": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-fGDEuIffFlM3HxIay+lP/NzviLMiYILsTFrhDdVqs9E=",
          "summary": "The UK personal tax year containing a date: 6 April to 5 April, with HMRC's label.",
          "level": 2,
          "tags": [
            "dates",
            "tax",
            "uk",
            "hmrc",
            "tax-year",
            "payroll"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "dates.uk-tax-year-1.0.0.fune",
            "size": 13524,
            "sha256": "48aafe74e712674b2fa094385a252387c41bace1a20db75a8603362dc9902d82",
            "languages": {
              "typescript": {
                "name": "dates.uk-tax-year-1.0.0-typescript.fune",
                "size": 8645,
                "sha256": "a46d5a641993c91805ca48e43c7e3a353a5bfe59edd3a0cc9ee5c6a08d14949b",
                "integrity": "sha256-GrgfCqK8XS4nhX/tjnvSsJ+TczGSBMSAdI4nfLs8PfE="
              },
              "python": {
                "name": "dates.uk-tax-year-1.0.0-python.fune",
                "size": 8486,
                "sha256": "64cd4519b66755c89b14cb0afa1e22f9427430ff5b49272fd5fc406953ea4667",
                "integrity": "sha256-E2KIL78vo0wbeQ49jwLZ3cwjo9x6Aa00dKqqtk/VcvA="
              },
              "rust": {
                "name": "dates.uk-tax-year-1.0.0-rust.fune",
                "size": 9179,
                "sha256": "4f036eec02868f538600244525279b6b0954dacbdee4e584aaf20ce6c67b3877",
                "integrity": "sha256-Get230d23rR87f0bQ4RSVntWkLjNcaBk6L2Gb5LMzbM="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "dates.week-number": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-XyS2+MfLEjeML9+p9xz6fqh+hciXmI1ysmuLqg6Wj/M=",
          "summary": "ISO 8601 week number and week-numbering year of a date: weeks start Monday, week 1 holds the first Thursday.",
          "level": 0,
          "tags": [
            "dates",
            "week-number",
            "iso-week",
            "iso-8601",
            "week-year",
            "calendar-week"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0",
            "dates.day-of-week": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "dates.week-number-1.0.0.fune",
            "size": 8545,
            "sha256": "57419625d710371dddc8e6db21a61c341ada81dd0670f975210cf019b72de781",
            "languages": {
              "typescript": {
                "name": "dates.week-number-1.0.0-typescript.fune",
                "size": 6622,
                "sha256": "3aa453a07e537a798b81d7e0539e41cfc8abe4d5ed83ee588d86bbb0d3888767",
                "integrity": "sha256-ixQatxxDEw1Uz9PQFckYkaFJSqo2OM1cGHvk3jVjJF0="
              },
              "python": {
                "name": "dates.week-number-1.0.0-python.fune",
                "size": 6528,
                "sha256": "881eccca5bd5e5ecacedff59cc7bbefb13c16197922927ecba323de15f4dea99",
                "integrity": "sha256-FR27wCnq42dOJT3eHln9AUDj9vcLUqkLSBYeqO6gPzg="
              },
              "rust": {
                "name": "dates.week-number-1.0.0-rust.fune",
                "size": 7003,
                "sha256": "37f218791412f737dec187bdf0c9a4711cfc9123669aa1e59040f6dc6bf74602",
                "integrity": "sha256-OVeI0qzTRl5Av3GaiHRO5Y+D5qaG09EAJqqqnA5ty20="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "education.academic-year": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-woK0pmDdJq3FJbgqMeM5UtLGTNd1YP2Ap/ev6SnhfIY=",
          "summary": "The academic year and term a date falls in: 1 September to 31 August by default, terms from the caller.",
          "level": 0,
          "tags": [
            "education",
            "academic-year",
            "school-year",
            "term",
            "semester",
            "school-calendar"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "education.academic-year-1.0.0.fune",
            "size": 21127,
            "sha256": "0d7011288ad1a4b1e0b788524b38b00b591e3b84038b55996cc81045f09a3a2a",
            "languages": {
              "typescript": {
                "name": "education.academic-year-1.0.0-typescript.fune",
                "size": 15049,
                "sha256": "40359926d68a913c6677edf2274247ee9feaec449489a4eeeb4134620ef70b91",
                "integrity": "sha256-cUkVgnjM4ylJjWp4nOnfCN5JTVDuCIfX5v0aJJNG9wc="
              },
              "python": {
                "name": "education.academic-year-1.0.0-python.fune",
                "size": 15113,
                "sha256": "d62d73f5bc56489acafba447083a5638fed8aa5d1dffb4a611ed09bd44ab3a05",
                "integrity": "sha256-yJ0gN+izq4ABta1QA1rf1E8mdatN3Vx7lHFY9weJdDk="
              },
              "rust": {
                "name": "education.academic-year-1.0.0-rust.fune",
                "size": 16533,
                "sha256": "0eb2e5213098a7dba5cd27b2a946ad772a15f6c7a1a0370f7423d3fbe3724c20",
                "integrity": "sha256-d1o8psOZrPzGhm4MyeOj26T0iqBkJCKn0WHJBK/xXbk="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-kAf3YBOFoYpCdMl58SPXUnRgyCfA9g6Nh7+63c2YbQM=",
          "summary": "The academic year and term a date falls in: 1 September to 31 August by default, terms from the caller.",
          "level": 0,
          "tags": [
            "education",
            "academic-year",
            "school-year",
            "term",
            "semester",
            "school-calendar"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "education.academic-year-1.0.1.fune",
            "size": 21655,
            "sha256": "1fb1026f5bc09794198c4d38378e7004589a623292db9380b50098ecd9c976e8",
            "languages": {
              "typescript": {
                "name": "education.academic-year-1.0.1-typescript.fune",
                "size": 15571,
                "sha256": "3bf344aaf7707265331c251cf4d263f1d3b5a944efed3a41825253ccb2016e77",
                "integrity": "sha256-V4F6D0OBlyqw5900iyshly2G75YyXe8/VyY0NV3z/PI="
              },
              "python": {
                "name": "education.academic-year-1.0.1-python.fune",
                "size": 15641,
                "sha256": "df7d0af818fbac7ed0e04874d9801210f3904449b8f1198e443fa231359a38e6",
                "integrity": "sha256-px8smI6sPPf7hAbxrIifvspEryxfEjTfWzfNnRTW05M="
              },
              "rust": {
                "name": "education.academic-year-1.0.1-rust.fune",
                "size": 17055,
                "sha256": "2434596bf9a8e2d89bc467bcb183c9d0b7d011ca8f2d8864dacb8c3c16150aa5",
                "integrity": "sha256-FCbA1HF0UMKFqZUP2eMJt9G79wDQg4SIwvEXH12RDhE="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "education.attendance-rate": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-2xh7i9dyr0aR6waBVC+kxRFRAwGRrMRy87BsO0qBF+8=",
          "summary": "Pupil attendance and absence rates in basis points, with the DfE persistent and severe absence flags.",
          "level": 1,
          "tags": [
            "education",
            "attendance",
            "absence",
            "persistent-absence",
            "severe-absence",
            "school",
            "dfe",
            "sessions"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/absence-thresholds.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "education.attendance-rate-1.0.0.fune",
            "size": 19799,
            "sha256": "91f9c93aa2be3a4e083af04103c647f4348778db123e142f0d3083fe2c71a2bc",
            "languages": {
              "typescript": {
                "name": "education.attendance-rate-1.0.0-typescript.fune",
                "size": 13538,
                "sha256": "528f13ba3d5318599c5046c41fba5442b40632353a4937f8342fa4f712168a72",
                "integrity": "sha256-uU99FI23d1FH8Z9Qy+DGNf+KsaggWLKvMYCCObbp5T4="
              },
              "python": {
                "name": "education.attendance-rate-1.0.0-python.fune",
                "size": 13727,
                "sha256": "7b4d18bd3c35c4527b996ba641dc653229636d6c8c7f3b7865c9ba3e69fafdc6",
                "integrity": "sha256-CI00tsDog5gB127Q3XD3CxBXdnfX0oMlACT5qcKJ9Yk="
              },
              "rust": {
                "name": "education.attendance-rate-1.0.0-rust.fune",
                "size": 14784,
                "sha256": "0a9e12fa0bbef5c3e19bba78e156492d7ff946738502b7b88c510f6133f8c242",
                "integrity": "sha256-C5H/ow4rSPS+gT9Eq+DmBKJEi0SR5hkvZdBElooGQcY="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-mZMHINIZVOU7RovBzEhwOsDWiliFU+rxzVvrLConCRM=",
          "summary": "Pupil attendance and absence rates in basis points, with the DfE persistent and severe absence flags.",
          "level": 1,
          "tags": [
            "education",
            "attendance",
            "absence",
            "persistent-absence",
            "severe-absence",
            "school",
            "dfe",
            "sessions"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "data/absence-thresholds.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "education.attendance-rate-1.0.1.fune",
            "size": 20274,
            "sha256": "628cb864d801b56920bd73fdf860b8bf0b0145e5019b166523a736ed57a86b22",
            "languages": {
              "typescript": {
                "name": "education.attendance-rate-1.0.1-typescript.fune",
                "size": 14013,
                "sha256": "ed6ad358deac7248ce4a4446e34f1b08227993fd5cbddfd03d8a4466b7d913e8",
                "integrity": "sha256-Zr4gzu4UaCYyHQxE+3h3WmJ8+MGnYboM/yV97irGfxU="
              },
              "python": {
                "name": "education.attendance-rate-1.0.1-python.fune",
                "size": 14202,
                "sha256": "cce1ec617175cbabbe75bfed8d9b487e5f2a322d8a0dd7cb89cabd346cac076c",
                "integrity": "sha256-rGpBQThYEhrn7Nziz0p8elU4ERQCZ7AAPF6gAYtAIrQ="
              },
              "rust": {
                "name": "education.attendance-rate-1.0.1-rust.fune",
                "size": 15259,
                "sha256": "04077027370385bbe6506cc1adf07e6742e890e2021f5610a712abca59b5f894",
                "integrity": "sha256-AeB96FyDVW9Ojr4TWsg4KPfd5i9Da7Gaqpe/mUkttac="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "education.cpd-hours": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-tlZbjxsTCu7uPu4nJFrwWwv2tgHw6C/3/S+vOJRCzL0=",
          "summary": "CPD logged against a requirement for a rolling or fixed period: minutes counted, shortfall and days left.",
          "level": 1,
          "tags": [
            "education",
            "cpd",
            "continuing-professional-development",
            "training-hours",
            "revalidation",
            "compliance",
            "learning-log"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0",
            "dates.add-months": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "education.cpd-hours-1.0.0.fune",
            "size": 27361,
            "sha256": "0856b3ae6ff73b1a34e6910f31d9c3658aa73cc73e8d0b31b46eb79c1063ffa3",
            "languages": {
              "typescript": {
                "name": "education.cpd-hours-1.0.0-typescript.fune",
                "size": 20285,
                "sha256": "ebb203f189e562bfcf9db2acedbc646d1768810b9b9b660a23aaeede4e1c069e",
                "integrity": "sha256-R277UXc+wiqvfa3Z9z+VGrIVImwaxcIzSO6YtUUas7E="
              },
              "python": {
                "name": "education.cpd-hours-1.0.0-python.fune",
                "size": 20379,
                "sha256": "e33baff99928a19fd2059809fb36c81eed3efdf1a6fd27cdc7e60467ef86c55c",
                "integrity": "sha256-kV68oaodZuRUOdi558Xpr3Kzn0tMRzQMz9TJqtKIpO0="
              },
              "rust": {
                "name": "education.cpd-hours-1.0.0-rust.fune",
                "size": 22105,
                "sha256": "3b7df5f6b0661ce3d4a4d02b16ef9af2c82160f85e561467f36b856c869cf842",
                "integrity": "sha256-7QYQKGcWf7eCzEBHydS0Zu1Hv2z7GA1bf2whP0kkpDg="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "education.degree-classification": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-wVqnRlDlAc8ni0yFwEOTxgimmnMoH5wLO8/eeXUVpMs=",
          "summary": "UK honours degree class (First, 2:1, 2:2, Third) from module marks and credits, weighted by level.",
          "level": 1,
          "tags": [
            "education",
            "degree-classification",
            "honours",
            "first",
            "2:1",
            "2:2",
            "university",
            "module-marks"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.rational": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/degree-classes.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "education.degree-classification-1.0.0.fune",
            "size": 33932,
            "sha256": "febcae3badc9347319cb25fe69bebe049faa2e89ed485f38df082dc927f35d89",
            "languages": {
              "typescript": {
                "name": "education.degree-classification-1.0.0-typescript.fune",
                "size": 26185,
                "sha256": "03ba388164203f2bcc301b8c47c183a051300e8f6e6dfd1d0e9129e7e3b7c655",
                "integrity": "sha256-KJRtQtDs9HMg6GZBfHudsWfUh3S6dVYKxt5Lkz4oZAg="
              },
              "python": {
                "name": "education.degree-classification-1.0.0-python.fune",
                "size": 26163,
                "sha256": "96872ce610b2c10f97131a03e5d1ea9b12d826b9e668e6f2da97df59665fe379",
                "integrity": "sha256-ZfP5b28259+lAb6e4P3R32HVtEChgxUe2LUrTOUt85I="
              },
              "rust": {
                "name": "education.degree-classification-1.0.0-rust.fune",
                "size": 27810,
                "sha256": "a2b8d4e5388bde6efe5d704d3510888a76ff97d09b0586087b6046223c85eebd",
                "integrity": "sha256-DF1B6fAwGzcNHBhu8DvhAwWlF/oCylOZV8CQBsCbjoE="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "education.fee-instalments": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-AqOKAGJjNm5d+lbgMaVpNP52DVVQVgm+MQw4LzhsNAY=",
          "summary": "Tuition fee instalment schedule from a total, shares and due dates, exact to the penny.",
          "level": 2,
          "tags": [
            "education",
            "tuition-fees",
            "instalments",
            "payment-plan",
            "schedule",
            "university",
            "school-fees"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "dates.add-days": "^1.0.0",
            "money.allocate": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "education.fee-instalments-1.0.0.fune",
            "size": 28265,
            "sha256": "dc792a881b37a71d994e1a7d24c0855ee8441b1914f760b7ea9661aee50b223f",
            "languages": {
              "typescript": {
                "name": "education.fee-instalments-1.0.0-typescript.fune",
                "size": 23025,
                "sha256": "aaf303d23bce2c954eb0d897a0086b666f62bc813be1e3015ecef6475a9912b0",
                "integrity": "sha256-/is1fFzozKz6VgCpQtTt+TLfx3WfDy1gzmcUMnW/46c="
              },
              "python": {
                "name": "education.fee-instalments-1.0.0-python.fune",
                "size": 23159,
                "sha256": "047c2f7385dc06cfbf350efc3eeaededc897359cadadfdcaa6a4287ec34e5c66",
                "integrity": "sha256-etz6bGylWLbMXhWPztFC8iMOqGRlQJUFgiw2j46WlTg="
              },
              "rust": {
                "name": "education.fee-instalments-1.0.0-rust.fune",
                "size": 24281,
                "sha256": "e55648f02d927ba97b26ac02ccf09a67dcf5daa2dcfe62352f812508ab34a2a5",
                "integrity": "sha256-rimbCKRSLNM3nGauPIR+K3RQyUQPZdjrNBCMIGOoeho="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "education.gpa": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-yGRQmVnnSt63UrSZJPFOO9IqoLgFwT4feHqbzpuuob8=",
          "summary": "Grade point average on a 4.0 scale from letter grades and credit hours, weighted by credits and rounded once.",
          "level": 1,
          "tags": [
            "education",
            "gpa",
            "grade-point-average",
            "credit-hours",
            "transcript",
            "4.0-scale",
            "cgpa",
            "quality-points"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/default-grade-points.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "education.gpa-1.0.0.fune",
            "size": 22646,
            "sha256": "6bb2027db4e91afabfd82eb1878bbc8519678d8dd28e88c166eeb480f053a5de",
            "languages": {
              "typescript": {
                "name": "education.gpa-1.0.0-typescript.fune",
                "size": 16336,
                "sha256": "1b55722175c86d0d2682263bb4ab938676d2b24d8b17e39ce0b1a376f3956317",
                "integrity": "sha256-a5i6Beuh6/pQ7z299JYV0xia/w5dtC0eu5iW1M7XSMM="
              },
              "python": {
                "name": "education.gpa-1.0.0-python.fune",
                "size": 16449,
                "sha256": "22e227312b7e8a52acf35e276ae2761d85c68ac51fd8ab512c14170b3fdd0eb2",
                "integrity": "sha256-C5BYUMEO+nWeo32H4kr8rjdQBcjoXVbbzYf7T1J3620="
              },
              "rust": {
                "name": "education.gpa-1.0.0-rust.fune",
                "size": 18091,
                "sha256": "f1646625884771487bdc05f22d372d4807c94129e621df85befd8b3c80eaecf3",
                "integrity": "sha256-sHXqGOuWtIbiLsbmyw8MZHDVdejQanTgfcMENCxBqro="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "education.grade-boundaries": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-/dFMb0PuWEoqWenl2h65pLx5P225RK7Fi6Dn/1xzEUY=",
          "summary": "Grade for a mark from the caller's boundary table: inclusive lower bounds, ungraded below the lowest.",
          "level": 1,
          "tags": [
            "education",
            "grade-boundaries",
            "grading",
            "exam",
            "mark",
            "gcse",
            "a-level",
            "ungraded"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "education.grade-boundaries-1.0.0.fune",
            "size": 24816,
            "sha256": "0244e03bc42f9de3b6c884928d7d37962273ba424a8d0d4914d82db11fbdc5eb",
            "languages": {
              "typescript": {
                "name": "education.grade-boundaries-1.0.0-typescript.fune",
                "size": 18301,
                "sha256": "3a8cd1e39fba30343689e23a7eb8e6a22349df3b7dd840fd7691f166ba9d2eb3",
                "integrity": "sha256-x9E1sRfOasm2aQBFcO7RH08yLNQOfVGZIluq4fm81AA="
              },
              "python": {
                "name": "education.grade-boundaries-1.0.0-python.fune",
                "size": 18455,
                "sha256": "d962c234c5ff5f41896e54160a6295c82789c4c631afc011514e14d3f4bee05a",
                "integrity": "sha256-v1AIt0tu2W2ACJxaZcXvtDg/zRClz8xhytMJnDXR80s="
              },
              "rust": {
                "name": "education.grade-boundaries-1.0.0-rust.fune",
                "size": 20060,
                "sha256": "5d1544c9074828247b9bb1e0742a6491a538cb58c7578a504a017568d5431336",
                "integrity": "sha256-V3uxjCC7w8douoOFfzLSsGed7X4I9jUXJGuhPYRplIA="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "education.school-year-group": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-fjJep3M7cfReRf2oegC0gky4LCxgTh4RzenExoMyAic=",
          "summary": "School year group from date of birth on a date, by UK nation: Reception to Year 13, P1 to S6, P1 to Year 14.",
          "level": 1,
          "tags": [
            "education",
            "school-year",
            "year-group",
            "reception",
            "primary-1",
            "date-of-birth",
            "cohort",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/cohort-rules.json",
            "data/year-groups.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "education.school-year-group-1.0.0.fune",
            "size": 24778,
            "sha256": "b4d15c86fa3862b18b1a8af454e95e82fcb9669d81b4996bc4a5a1331349bb8d",
            "languages": {
              "typescript": {
                "name": "education.school-year-group-1.0.0-typescript.fune",
                "size": 20879,
                "sha256": "f85ad796926c91d4efe322b571bab587e1fdf7a3d842ce83610c06612d7a36de",
                "integrity": "sha256-emi8s0yiJ7F8Y+9/Loi/ywq28jrx4IrnL14r7siHV5c="
              },
              "python": {
                "name": "education.school-year-group-1.0.0-python.fune",
                "size": 20786,
                "sha256": "8a91782fdab293dd047f4e54b9fa9c22b8f3827da1e74ebf68b77657c6253701",
                "integrity": "sha256-y1/AJ0roZi0iFJqlr/GzPS/vS4YFeEVprdYiHtVoA7w="
              },
              "rust": {
                "name": "education.school-year-group-1.0.0-rust.fune",
                "size": 21473,
                "sha256": "b403538d23e79640d1bceee1efbda7a55cc1fc8c6d53b1975479c56eb1ba24b0",
                "integrity": "sha256-1lUb8j1B16aglQ7WTnS+zMGfKoV7gG81EbH99tyfksg="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-Wy0T/IS3WInhLex6VlBNXs2x7Sm5vjF9qgrmqcu7tW0=",
          "summary": "School year group from date of birth on a date, by UK nation: Reception to Year 13, P1 to S6, P1 to Year 14.",
          "level": 1,
          "tags": [
            "education",
            "school-year",
            "year-group",
            "reception",
            "primary-1",
            "date-of-birth",
            "cohort",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "data/cohort-rules.json",
            "data/year-groups.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "education.school-year-group-1.0.1.fune",
            "size": 25255,
            "sha256": "f3210b5447a1609ada7aa234b73029f9222291daf2c7c1cdc506f4556ffe4ef4",
            "languages": {
              "typescript": {
                "name": "education.school-year-group-1.0.1-typescript.fune",
                "size": 21356,
                "sha256": "a5b0319ecb9726fde2430e8ba73475a6542afc38fc3a9d01ba72664403723731",
                "integrity": "sha256-C8QyLZbxpzRbtsAqy5ekiwQhDzTWplkceabyZA9ynGU="
              },
              "python": {
                "name": "education.school-year-group-1.0.1-python.fune",
                "size": 21263,
                "sha256": "c20b538b84078a36172ec7ec4e0bed59734794dd780b49b9a969c5a2679f8d21",
                "integrity": "sha256-B7gI/A6u86CbmqSiwNucUA1Jw9rbE9vO1HPOn2lgYkU="
              },
              "rust": {
                "name": "education.school-year-group-1.0.1-rust.fune",
                "size": 21950,
                "sha256": "854f8b10df92428125fbb906f276fc7ddcf1846688ebd13dd30927b05374c732",
                "integrity": "sha256-MBfgWkMGcofSxa3Qig8J9updkiboz4U2JWEcwuTAcB0="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "education.student-loan-repayment": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-1pY2DkSvRrgV6GnR27j7TGWc+qsppjmdlATYriapVtc=",
          "summary": "A graduate's student or postgraduate loan repayment for a tax year, as Self Assessment works it out.",
          "level": 2,
          "tags": [
            "education",
            "student-loan",
            "postgraduate-loan",
            "self-assessment",
            "repayment",
            "plan-2",
            "slc",
            "graduate"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "dates.uk-tax-year": "^1.0.0",
            "payroll.student-loan": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/unearned-income-limits.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "education.student-loan-repayment-1.0.0.fune",
            "size": 32826,
            "sha256": "11414324ad13c828c845addd8ac1ed0e6d2febd0dac6eed4103b7b5daf464376",
            "languages": {
              "typescript": {
                "name": "education.student-loan-repayment-1.0.0-typescript.fune",
                "size": 23906,
                "sha256": "7ffb2c9d8ab6ef30441c1159232016803b342d3ca1af85ff12e86ad1536d0f42",
                "integrity": "sha256-AKg97Tu/8zYENIgSaPB8s0/Z+MLoIPmlg+nPu22oUxQ="
              },
              "python": {
                "name": "education.student-loan-repayment-1.0.0-python.fune",
                "size": 24011,
                "sha256": "c3c6779568511597c8ebf354252eba1716d3a1ad1123f9a4d22c4ad1a001ec47",
                "integrity": "sha256-mJGsv4EOD3sOeXqYExqaHPF7yXQKY5MVT5Ud1kTRrXc="
              },
              "rust": {
                "name": "education.student-loan-repayment-1.0.0-rust.fune",
                "size": 24985,
                "sha256": "d2d52c6d3b160b3dead73468969004e9429c22d65e678ae3c4945e2af18e93ed",
                "integrity": "sha256-+Jh6OAX/6tT15QTp0ITDGjdK5oOeiMjUshoNaf+MzvU="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-jm4o18WHS4pfprJVPCVTUuuLNPwLiuha1Z4f7D9CLj4=",
          "summary": "A graduate's student or postgraduate loan repayment for a tax year, as Self Assessment works it out.",
          "level": 2,
          "tags": [
            "education",
            "student-loan",
            "postgraduate-loan",
            "self-assessment",
            "repayment",
            "plan-2",
            "slc",
            "graduate"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "dates.uk-tax-year": "^1.0.0",
            "payroll.student-loan": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "data/unearned-income-limits.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "education.student-loan-repayment-1.0.1.fune",
            "size": 33412,
            "sha256": "e750beb4fbaf6fccfbe382ece125611243d251c393f896d892cd373c7f3dbaf7",
            "languages": {
              "typescript": {
                "name": "education.student-loan-repayment-1.0.1-typescript.fune",
                "size": 24492,
                "sha256": "cbdcf168eef0deff6379e112daab0e3d38a2aca57fc79fa9330949bdd2d500d9",
                "integrity": "sha256-3ov4MOksRBU43Y0tWczrwqXfMvIcS7oGPObIberdQQQ="
              },
              "python": {
                "name": "education.student-loan-repayment-1.0.1-python.fune",
                "size": 24597,
                "sha256": "d0983dd44def1e6662ce086d2ca51ac49a738ba0afbe06ff5a9b9653a650c481",
                "integrity": "sha256-q2dZCX708jb3nddAg3/IabIJY+jTwvytTuq8ytyBepY="
              },
              "rust": {
                "name": "education.student-loan-repayment-1.0.1-rust.fune",
                "size": 25571,
                "sha256": "e8c2e876e9b989747d911b8f594acb3514bf1798fea7396f27c9ea3dc5cc0bcb",
                "integrity": "sha256-oNVkrssd4wr464+jkuLGPKtTywtEhABlq1gGiJ2Y26Q="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "education.timetable-clash": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-J7VwSsro+/9YGlmMnbw6D8UVyzpqW6IUo8rS8l+okDM=",
          "summary": "Find timetable clashes: overlapping sessions that share a room, a teacher or a student group, in a fixed order.",
          "level": 2,
          "tags": [
            "education",
            "timetable",
            "clash",
            "conflict",
            "double-booking",
            "scheduling",
            "rooms",
            "teachers"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "education.timetable-clash-1.0.0.fune",
            "size": 27523,
            "sha256": "8f9e99aff4a89eb9b167b91d4020da0439b1ef2d0c7b9adcd83173db26430efb",
            "languages": {
              "typescript": {
                "name": "education.timetable-clash-1.0.0-typescript.fune",
                "size": 20628,
                "sha256": "32f62115aa682f3aaa8e282e492579461556e6a262714b6c624be5878b64275a",
                "integrity": "sha256-D+QyZL15ApNhkSCSVlB/k+3mjzEKUGePnp6O5PbIvrE="
              },
              "python": {
                "name": "education.timetable-clash-1.0.0-python.fune",
                "size": 20723,
                "sha256": "987b891839c3f2aeb268418057d3342facb4f9c7800c5ce5f31d1043e4977585",
                "integrity": "sha256-WKY1YlCT6B/IWgCjDpEg0H8BAZu+7j9ou02VCzGDGH8="
              },
              "rust": {
                "name": "education.timetable-clash-1.0.0-rust.fune",
                "size": 22876,
                "sha256": "1c2afec2b6b4961fd6f85572c13c299a34d63538ee1adb52597aa42cc90e43dc",
                "integrity": "sha256-VOoNtmHAuBqE64tGUiDQmNjrFT+c5yYl/Iqt658WAmk="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "education.weighted-grade": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-ftfuNJHhAA+AulPX1l4NFYl4/Dv+Q0/7kv115M4Bpy8=",
          "summary": "Weighted percentage across coursework and exam components, exact as a fraction, then rounded once.",
          "level": 2,
          "tags": [
            "education",
            "weighted-grade",
            "coursework",
            "exam",
            "module-mark",
            "weighting",
            "final-grade",
            "assessment"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.rational": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "education.weighted-grade-1.0.0.fune",
            "size": 21780,
            "sha256": "00502fea3ca0bb6ac3d075fe288927fcfb06d8b723174710e715fd67fa3a8596",
            "languages": {
              "typescript": {
                "name": "education.weighted-grade-1.0.0-typescript.fune",
                "size": 16285,
                "sha256": "4a2b57596a8cdc89af207238a7af91a732027f4ae0d7e0405353e56e7c7e9229",
                "integrity": "sha256-ihaADt46JhEt/MXLZXBZDGbZrlLFQSyiFvHEgY/zPGI="
              },
              "python": {
                "name": "education.weighted-grade-1.0.0-python.fune",
                "size": 16419,
                "sha256": "fadf0aedbbbab4062a83d056aa6f09d7988b5f796a9ed809376a1cc2089f60c9",
                "integrity": "sha256-dp8v6nFdG/nH5JTuyOmRAM4Bz/++k9jnZjf97j+PCkU="
              },
              "rust": {
                "name": "education.weighted-grade-1.0.0-rust.fune",
                "size": 17578,
                "sha256": "cca88e3f0fb397a2cfb9d8bff914d36ff53c6b727efd8598bbfed51da75ef63a",
                "integrity": "sha256-S2eZFcJ27YOkVokS5bIfZjHHb7dsShHqspYNLUSk/Qw="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "encoding.base64": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-y8Ye+jGtOo6Kxo+GpSpfHTg6Kbh8EOPNmOGhmJeZc6U=",
          "summary": "Bytes to base64 and base64url text and back (RFC 4648), with strict decoding, identically in every language.",
          "level": 0,
          "tags": [
            "base64",
            "base64url",
            "encode",
            "decode",
            "bytes",
            "rfc4648",
            "jwt",
            "url-safe"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python/base64_decode.py",
            "impl/python/base64_encode.py",
            "impl/python/base64_url_decode.py",
            "impl/python/base64_url_encode.py",
            "impl/rust/base64_decode.rs",
            "impl/rust/base64_encode.rs",
            "impl/rust/base64_url_decode.rs",
            "impl/rust/base64_url_encode.rs",
            "impl/typescript/base64_decode.ts",
            "impl/typescript/base64_encode.ts",
            "impl/typescript/base64_url_decode.ts",
            "impl/typescript/base64_url_encode.ts",
            "vectors.json"
          ],
          "package": {
            "name": "encoding.base64-1.0.0.fune",
            "size": 31225,
            "sha256": "9dc42678ee52da6f5471c4c64d22da5ce75f681e734cea0ad5dd0ce6a188c403",
            "languages": {
              "typescript": {
                "name": "encoding.base64-1.0.0-typescript.fune",
                "size": 18784,
                "sha256": "17db8c2a4caedd1791d62e2f68bef3ced4ff31a7b3bbaa9710ba3fd7d879670b",
                "integrity": "sha256-pC6s0VXpF6q3TIY1IyzNpj6ckCVlkRqg52C38os5whg="
              },
              "python": {
                "name": "encoding.base64-1.0.0-python.fune",
                "size": 18514,
                "sha256": "58e9c16c1f6c3615f3f6afb9ee61f3f8886ab25bf92843c8c4bfdf62686cb8a7",
                "integrity": "sha256-B5ymNIOXP10zee1f36RwGN1h7sJAeeS2OBJO7ALX8EE="
              },
              "rust": {
                "name": "encoding.base64-1.0.0-rust.fune",
                "size": 20185,
                "sha256": "0519505836a1ccb14e7a6304e8a2104b4cf7e327af9f0daa69645d52b19f44ca",
                "integrity": "sha256-+aR9Y+0Rj8J12OJLA/fS5FE8Xpo1pL5ni1+gBhailHA="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "encoding.hex": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-+FsV3mKMp2YKZ+w+qpvAxnRL1TPQ/GI/CxNeXlMSqc0=",
          "summary": "Bytes to lowercase hexadecimal text and back (RFC 4648 base16), strictly, identically in every language.",
          "level": 0,
          "tags": [
            "hex",
            "hexadecimal",
            "base16",
            "bytes",
            "encode",
            "decode",
            "rfc4648",
            "digest"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python/hex_decode.py",
            "impl/python/hex_encode.py",
            "impl/rust/hex_decode.rs",
            "impl/rust/hex_encode.rs",
            "impl/typescript/hex_decode.ts",
            "impl/typescript/hex_encode.ts",
            "vectors.json"
          ],
          "package": {
            "name": "encoding.hex-1.0.0.fune",
            "size": 15224,
            "sha256": "8b494ecd32a0b545be0e436a0b8a598e80291fbf890387eaa70883258de64d2a",
            "languages": {
              "typescript": {
                "name": "encoding.hex-1.0.0-typescript.fune",
                "size": 9992,
                "sha256": "a31275a85aae0f3c57417e0016f8cf488c971be887d5927419423953e4cd50f4",
                "integrity": "sha256-ww9KrGCaDE8/OgPDH+JRuKVgDgn+sGhswGGOwoh+RC8="
              },
              "python": {
                "name": "encoding.hex-1.0.0-python.fune",
                "size": 9951,
                "sha256": "ec363620ae5e462ed44dc885dff181534446b4610cf9352bb8518c1c3d6ca349",
                "integrity": "sha256-RfSvEKgZIXcOgWK5wX9129WgH3oRyGrlHaSUzxljzho="
              },
              "rust": {
                "name": "encoding.hex-1.0.0-rust.fune",
                "size": 10723,
                "sha256": "cf3885fa039115253afa81c19178a4b2fd2900fc62a205612f9f0beebf18035f",
                "integrity": "sha256-61r1+kMj+IYbIgeBX7v5zeJwGL1MGCyt394bwGUzsK4="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "encoding.utf8": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-EO/gecpJg9PAcnxEdnQVGHeIHVOpaOOpf1+fc5c1ZJk=",
          "summary": "Text to UTF-8 bytes and strictly back (RFC 3629), so hashing and signing see the same bytes in every language.",
          "level": 0,
          "tags": [
            "utf8",
            "utf-8",
            "unicode",
            "text",
            "bytes",
            "encode",
            "decode",
            "rfc3629",
            "string"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python/utf8_decode.py",
            "impl/python/utf8_encode.py",
            "impl/rust/utf8_decode.rs",
            "impl/rust/utf8_encode.rs",
            "impl/typescript/utf8_decode.ts",
            "impl/typescript/utf8_encode.ts",
            "vectors.json"
          ],
          "package": {
            "name": "encoding.utf8-1.0.0.fune",
            "size": 14837,
            "sha256": "a476924f3a2599c51305953b1cb504a9ed4b90e0a92bd71556a9bb45bc0c9f86",
            "languages": {
              "typescript": {
                "name": "encoding.utf8-1.0.0-typescript.fune",
                "size": 10992,
                "sha256": "70d12ad13cfea672ff3aa811677528f95d37188cadf44e9c1cf725ef3628f5fe",
                "integrity": "sha256-FKId90crgB9eBVdHaEyKPG1h/Z9OR3D+ddNRtoUJpZI="
              },
              "python": {
                "name": "encoding.utf8-1.0.0-python.fune",
                "size": 9768,
                "sha256": "febb6f8129a861f7176274a10469c288c7f4bb68867b347558e7ce19e8f3285b",
                "integrity": "sha256-Yvaxd4Tt0nW+m5Bzho3/mvtZjJiYqzhIzE6KJc68q9k="
              },
              "rust": {
                "name": "encoding.utf8-1.0.0-rust.fune",
                "size": 9703,
                "sha256": "36a060f530547e2b6ae92bb179fc4238b0c6dccc846f3f53d4c716b2711a25ea",
                "integrity": "sha256-LjLCNcmzYO1/IrNMoiUoEI55u6oMYuk8hf4NUSmCO/E="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "energy.bill-calculate": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-lsj2qnl2jbISa/KYB18g+eGSzZWly1GCwFRFyjDKQYU=",
          "summary": "Electricity or gas bill from two meter reads: energy, standing charge, Climate Change Levy and VAT.",
          "level": 3,
          "tags": [
            "energy",
            "bill",
            "electricity",
            "gas",
            "utility-bill",
            "standing-charge",
            "vat",
            "ccl"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "energy.gas-kwh": "^1.0.0",
            "math.round-div": "^1.0.0",
            "dates.days-between": "^1.0.0",
            "finance.tax.add-vat": "^1.0.0",
            "energy.meter-advance": "^1.0.0",
            "energy.climate-change-levy": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "energy.bill-calculate-1.0.0.fune",
            "size": 30441,
            "sha256": "26df26352e87e74ee45faaeb0d4476e1f3adee5cf54461214c2330a9c1c38f4e",
            "languages": {
              "typescript": {
                "name": "energy.bill-calculate-1.0.0-typescript.fune",
                "size": 21639,
                "sha256": "c24f5b29cc53f2b0e47d95b9fb1e4c896709a83ee3fc71b9325c9c4c9c77a916",
                "integrity": "sha256-ukqG9TZ4WkD/m+j2Wp6C/nTc/sjte7G+jiM0/6rXdQo="
              },
              "python": {
                "name": "energy.bill-calculate-1.0.0-python.fune",
                "size": 21596,
                "sha256": "22b30829abb62b32bf624ef65182c43b242d5cc53fd1776426b1109463d34ad6",
                "integrity": "sha256-rkXx0Q4yI0r2KjG2RSs3vn7h31VHzFH6HFP4rPbci0w="
              },
              "rust": {
                "name": "energy.bill-calculate-1.0.0-rust.fune",
                "size": 24104,
                "sha256": "abf91e7b788f304529d5fd5861fe19712c03cfd9f1640080dbe7bd382ee52381",
                "integrity": "sha256-FZ9Iihc3RiCQH95PAJMXn7aUXzXc0lgmRYRDSJz54IY="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "energy.carbon-emissions": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-4BHBWWUnkCbYJyFCQ3gQs251OzEtyovIBFUYPugQQE0=",
          "summary": "kgCO2e from kWh or litres of a fuel, using the UK government GHG conversion factors for the year.",
          "level": 1,
          "tags": [
            "energy",
            "carbon",
            "emissions",
            "co2e",
            "ghg",
            "conversion-factors",
            "desnz",
            "secr",
            "scope"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/conversion-factors.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "energy.carbon-emissions-1.0.0.fune",
            "size": 22106,
            "sha256": "bae07b09df8f0ef3bd4ff5ecfd0029294f6be101f8709fde8d1a549ce45c75aa",
            "languages": {
              "typescript": {
                "name": "energy.carbon-emissions-1.0.0-typescript.fune",
                "size": 18341,
                "sha256": "e2e4886957dbf14fa1fc6b8a690dcdd7e7e1cfb82f8c06ff03867c76b87eb5d1",
                "integrity": "sha256-WJBrB7buyKRCfnbBc0R6dwzaS1FKSwRrFXZ2R/wYEx8="
              },
              "python": {
                "name": "energy.carbon-emissions-1.0.0-python.fune",
                "size": 18245,
                "sha256": "d66180f8f4dc106cd4a35ee0cc32a2fdb092ee8e637284f37c42db923e779e86",
                "integrity": "sha256-K/2a/6oJqVn+JehawazhdOf5zACjoa/VdzNTmryHHjc="
              },
              "rust": {
                "name": "energy.carbon-emissions-1.0.0-rust.fune",
                "size": 19150,
                "sha256": "a89d09a8005089d0ef868066a61def94781f89eba75943b5ed80cbc70bfc56fc",
                "integrity": "sha256-vLEa4vBAQwVT8zceB5H7QJCgFHNJ+u14ulDwaacv9LY="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-/Tuamdx48UlNdAVNOZ7FspjWFWX5j//2mK+ssSOgOO4=",
          "summary": "kgCO2e from kWh or litres of a fuel, using the UK government GHG conversion factors for the year.",
          "level": 1,
          "tags": [
            "energy",
            "carbon",
            "emissions",
            "co2e",
            "ghg",
            "conversion-factors",
            "desnz",
            "secr",
            "scope"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.round-div": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "data/conversion-factors.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "energy.carbon-emissions-1.0.1.fune",
            "size": 22579,
            "sha256": "2c79961b918cd1eb475f3c88476437760af9a41cf4c3a20b71b338f11d0e9451",
            "languages": {
              "typescript": {
                "name": "energy.carbon-emissions-1.0.1-typescript.fune",
                "size": 18814,
                "sha256": "dc9860d3a0e0fe858119f446c5550196918e3b77725781557a6f05fb71a6465e",
                "integrity": "sha256-dG9nev25YhaAN5awZkGugHl8rsZVbmJ4LVfwTdFsZhk="
              },
              "python": {
                "name": "energy.carbon-emissions-1.0.1-python.fune",
                "size": 18718,
                "sha256": "442eec95cfbee45169f51babdbb57455056e3e11ffd22636b7d529e8a479a407",
                "integrity": "sha256-r0YX3jYDnVGLxexAhfPbyQeyr9v9KUh+enGK6u01UiA="
              },
              "rust": {
                "name": "energy.carbon-emissions-1.0.1-rust.fune",
                "size": 19623,
                "sha256": "66a94a7b07a8107c32f8ead7f3666259334b24132d2c36327d1b2f3e30d93e99",
                "integrity": "sha256-RmokX7txOSBXz+HIlND4H/Hxbcp2TjdxOtTUDEv2+sU="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "energy.climate-change-levy": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-uYKv9sSeuDYDGz4lUSlmYCFu1jzQkWVgT1LEWzsb7Ac=",
          "summary": "Climate Change Levy on a business supply of electricity, gas, LPG or solid fuel, at the main rate in force on the date.",
          "level": 2,
          "tags": [
            "energy",
            "ccl",
            "climate-change-levy",
            "environmental-tax",
            "levy",
            "business-energy",
            "hmrc",
            "gb"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/ccl-rates.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "energy.climate-change-levy-1.0.0.fune",
            "size": 27804,
            "sha256": "3fea3d85af16c1074ac2815c1c2630a7f7fe6ff87a5ee99c57b5b3611a7d977a",
            "languages": {
              "typescript": {
                "name": "energy.climate-change-levy-1.0.0-typescript.fune",
                "size": 19870,
                "sha256": "9dc986b828ab4d57e9a06e38363f5e552c4815c7c81363aa874f8fed75aaed74",
                "integrity": "sha256-FYGZvIkGMhlL9RCyJzrpNGwus9TCBx78gyojcEOJvyk="
              },
              "python": {
                "name": "energy.climate-change-levy-1.0.0-python.fune",
                "size": 20074,
                "sha256": "0ec9a343c45637f66965eb9bd89685c964795fff3609fee8d445eb56d966e3e3",
                "integrity": "sha256-K6fvw9WRdXsgKb0ILPfwCUWBw1FCToIE9vbbGzgSqFI="
              },
              "rust": {
                "name": "energy.climate-change-levy-1.0.0-rust.fune",
                "size": 21726,
                "sha256": "89cb70fdb4576df38939f260273598f6c52d313e9b93d28a7d982d7948b7d064",
                "integrity": "sha256-jhTe0Vrnx/KQBwyAigY1BZOkbIoVwJ5JyAkjUKTMf9s="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-m9AfqEJisJkqHLqVJWr9DJkrZn7tzQ5hPH3Yxbq9Bh4=",
          "summary": "Climate Change Levy on a business supply of electricity, gas, LPG or solid fuel, at the main rate in force on the date.",
          "level": 2,
          "tags": [
            "energy",
            "ccl",
            "climate-change-levy",
            "environmental-tax",
            "levy",
            "business-energy",
            "hmrc",
            "gb"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/ccl-rates.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "energy.climate-change-levy-1.0.1.fune",
            "size": 28363,
            "sha256": "74fd4fcdc42d6d0eac501e4372a8deefbca5c1e44a8afa8e77e2564fffd3a78e",
            "languages": {
              "typescript": {
                "name": "energy.climate-change-levy-1.0.1-typescript.fune",
                "size": 20421,
                "sha256": "600543115409acdfb74b03af4bf43426a059c7e719e6b1e237a83fb7b8c3368f",
                "integrity": "sha256-cmthsJdWiXRTAqcM0vVJ+t4x5Aen947ZkYEADHJgrrQ="
              },
              "python": {
                "name": "energy.climate-change-levy-1.0.1-python.fune",
                "size": 20633,
                "sha256": "b0ca32dbadd6a4b87811d4575ed79d3ff2d2270d8def03c1313ccd3c82eaa82e",
                "integrity": "sha256-X84yHcvwkk7h6a1ImVIDpV2fZ2g7W1OC44/C2jzaqVk="
              },
              "rust": {
                "name": "energy.climate-change-levy-1.0.1-rust.fune",
                "size": 22277,
                "sha256": "0e446b7acb3ef3ac1e9374d00c4d9fb9f353df59a25b1677a9ecdfd795ec81e2",
                "integrity": "sha256-A0MzWq+u0tLZL40MdlKGwzaiWY+pCStg9nxTYD+V7MA="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.2": {
          "integrity": "sha256-bIPLFhETdEbkkDRgnDgwqJQPJUQpBTiJZFgLDtMj1e8=",
          "summary": "Climate Change Levy on a business supply of electricity, gas, LPG or solid fuel, at the main rate in force on the date.",
          "level": 2,
          "tags": [
            "energy",
            "ccl",
            "climate-change-levy",
            "environmental-tax",
            "levy",
            "business-energy",
            "hmrc",
            "gb"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "data/ccl-rates.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "energy.climate-change-levy-1.0.2.fune",
            "size": 28839,
            "sha256": "18139232039628d0676a0d19756af8beb5c03b60f1811a68eccf403a14f406fc",
            "languages": {
              "typescript": {
                "name": "energy.climate-change-levy-1.0.2-typescript.fune",
                "size": 20897,
                "sha256": "817611581d638b413d4be0ba6e50c6413e332a60c004a2d01abc56a50b5f7471",
                "integrity": "sha256-vA4heIhpQP01VRRZKJTvrxb6WzeXR4lCMoiBTSc657o="
              },
              "python": {
                "name": "energy.climate-change-levy-1.0.2-python.fune",
                "size": 21109,
                "sha256": "d7fe58ee932e84f272b0fa123dc5395bd7b8e24d89b284bb49c3ffd8c663538d",
                "integrity": "sha256-86pnV7GP+XVqmIvMpv6OSMftA7HsJwOyPn16YEeUVx8="
              },
              "rust": {
                "name": "energy.climate-change-levy-1.0.2-rust.fune",
                "size": 22753,
                "sha256": "6cc07eb193b5a7a587608dcde04ed6d9c63d5d9e77a669798071f236b4b1d1de",
                "integrity": "sha256-4rmeNpDZy/e3smzXaY+sxXyr0LSjw569BaTCgh/12yU="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "energy.degree-days": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-DBaNMT4McIZd4bYM8/J4z1KKV3FL9kDNvqFMVZuAyVc=",
          "summary": "Heating and cooling degree days from daily mean temperatures and a base temperature, exact to 0.1.",
          "level": 1,
          "tags": [
            "energy",
            "degree-days",
            "hdd",
            "cdd",
            "heating",
            "cooling",
            "temperature",
            "weather"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "energy.degree-days-1.0.0.fune",
            "size": 10167,
            "sha256": "dadb9334811da41846ae4e0017ec98006bd554a04830a1c1dd1ed49719b483e0",
            "languages": {
              "typescript": {
                "name": "energy.degree-days-1.0.0-typescript.fune",
                "size": 7134,
                "sha256": "75d06aad03904ba08fc37de732e15891b04330eb1625f2c5cb5da429ce3efceb",
                "integrity": "sha256-TbDOXRYm6jK0tb+0KrBmbJjonNv41n8rW9JgZF62Od8="
              },
              "python": {
                "name": "energy.degree-days-1.0.0-python.fune",
                "size": 7196,
                "sha256": "239b5cfa5a11ee50dbcd96ce022d91969de4b53075be63c088fbb7729a460e98",
                "integrity": "sha256-UYiXbhmLZzBVcf8dXJ77bbUT9mak1Ufg/C2/E+vH904="
              },
              "rust": {
                "name": "energy.degree-days-1.0.0-rust.fune",
                "size": 7971,
                "sha256": "4673508e1e0f2e609bb1f54fc77ee3f7240315026c4460e60b3487faf221a46d",
                "integrity": "sha256-4PHmmi8D0ZIn2mdtOgevsSheMBDc7TTaNuAZtAQfcYo="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "energy.estimate-read": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-nd6CNzjkxqgEP954c77MZRnQQaEaVzmg/OU1hSaQEUE=",
          "summary": "Estimate a meter read for a date from the average daily consumption between two earlier reads, with rollover.",
          "level": 2,
          "tags": [
            "energy",
            "meter",
            "estimated-read",
            "estimate",
            "reading",
            "consumption",
            "rollover",
            "utilities"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.round-div": "^1.0.0",
            "dates.days-between": "^1.0.0",
            "energy.meter-advance": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "energy.estimate-read-1.0.0.fune",
            "size": 14637,
            "sha256": "bd37a314f3d4d7631725632979d80c4bbf86d74141a4ebafa8a57187faea246f",
            "languages": {
              "typescript": {
                "name": "energy.estimate-read-1.0.0-typescript.fune",
                "size": 10656,
                "sha256": "c4c4270ae6c07b2d56bcc288b9bd7a014bce9b700e6c29c1bbdfbd1c22448260",
                "integrity": "sha256-gS56OJSaDE87wd12AwiLWLqk1ir96/TQ3ZNFDsgQr6M="
              },
              "python": {
                "name": "energy.estimate-read-1.0.0-python.fune",
                "size": 10638,
                "sha256": "152678782663c090f786b9a573f0fd954c7ad41c1f7a7f78aa18dbe483bb8231",
                "integrity": "sha256-5NjpsOqSoOzC/gOYKpwTjkDYfCWG+Xex4ULUmED7vIk="
              },
              "rust": {
                "name": "energy.estimate-read-1.0.0-rust.fune",
                "size": 11695,
                "sha256": "f3781c5e7615bc47779d1468259fb9952380b2b28e4ce2db5ea77e261fc71b85",
                "integrity": "sha256-/yI2vmCfdGeRxXcT5xlD202drNPUB0UcVQULk+Qdf+s="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "energy.gas-kwh": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-oT1oHDFRhtKbWquRV4zUIihVxJLeP+8XwVQVRr8Caoo=",
          "summary": "Convert gas meter units (cubic metres or hundreds of cubic feet) to kWh with the calorific value and 1.02264 correction.",
          "level": 1,
          "tags": [
            "energy",
            "gas",
            "kwh",
            "calorific-value",
            "cubic-metres",
            "cubic-feet",
            "meter-units",
            "conversion"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "energy.gas-kwh-1.0.0.fune",
            "size": 14672,
            "sha256": "e3046be9b02977427aee15807504a946cb0aaefd4e8d24bf6126de1e89db8f57",
            "languages": {
              "typescript": {
                "name": "energy.gas-kwh-1.0.0-typescript.fune",
                "size": 10256,
                "sha256": "079ef9f2743cb9b8392879ad12f8789dbcfcb62d60a6b935a381536c7ca32e42",
                "integrity": "sha256-OYxFhiz4RRgXddv5TJdc57T9HA7+M9IbkMk0lv4ubi0="
              },
              "python": {
                "name": "energy.gas-kwh-1.0.0-python.fune",
                "size": 10199,
                "sha256": "c18e231169f53b49a4998c26ac3d0f8d513535a2705a131e3bafd198d1e6a392",
                "integrity": "sha256-ygDVcSFLxl5e2QOCuKeYJsFy9cIeMoNT0dSmu8BLEVM="
              },
              "rust": {
                "name": "energy.gas-kwh-1.0.0-rust.fune",
                "size": 10865,
                "sha256": "cc8a9985a87f24fbdefa595945b5e60cbd04ca78191a804c2421f99c25c176b4",
                "integrity": "sha256-5+6nHHOulFMOJnp2dlc4RD+N8IMF1tMedp16b71HnWM="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "energy.meter-advance": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-DQNFj1CSKf6z1ydNzNd4OMsONacDFJzgjr/tY+aN2Bc=",
          "summary": "Units consumed between two meter reads, counting the meter rolling over past all nines once.",
          "level": 1,
          "tags": [
            "energy",
            "meter",
            "reading",
            "rollover",
            "wrap-around",
            "consumption",
            "advance",
            "utilities"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "energy.meter-advance-1.0.0.fune",
            "size": 7901,
            "sha256": "3a77a81e3c84db1734e25aa9c38f5b8a26ed3e8ec6c361d57efdb195c3d6dc0d",
            "languages": {
              "typescript": {
                "name": "energy.meter-advance-1.0.0-typescript.fune",
                "size": 5656,
                "sha256": "3be556d9802dda8dee4248f8aefb1367ea9f50f888165456b78aa98c2825e285",
                "integrity": "sha256-4LEFXSbD0j3qssMAMQX/btNae14msyXJnPbK8rTVqyA="
              },
              "python": {
                "name": "energy.meter-advance-1.0.0-python.fune",
                "size": 5777,
                "sha256": "fb523b4823381e1713076d46492788f57a93d0242f51db9b0a490a668880b5ba",
                "integrity": "sha256-k4X7uruG3CpDl4CiWGVGkXP+Sp3fiyYCrhTzsJmwTPU="
              },
              "rust": {
                "name": "energy.meter-advance-1.0.0-rust.fune",
                "size": 6124,
                "sha256": "b113a68feb082c1236cf7d0f8e240226f61f601cd33f52cb1954f1fad9f0c022",
                "integrity": "sha256-0dJgMLaEYq799e5Uqh9lIgX5+tHGV2Z7U0vSt2nFwIk="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "energy.price-cap": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-kdiIqNwc+5RcJ8qN/O9RBB3JRbv2M8lI8k0rGjCdetY=",
          "summary": "Ofgem energy price cap unit rate and daily standing charge for a fuel and payment method on a date (GB average).",
          "level": 2,
          "tags": [
            "energy",
            "price-cap",
            "ofgem",
            "default-tariff",
            "unit-rate",
            "standing-charge",
            "svt",
            "gb"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "data/price-cap.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "energy.price-cap-1.0.0.fune",
            "size": 26806,
            "sha256": "b5a3733da86eebe78def7142dbab96e2722f8b4fca91f0653abcc5cea7c4e0ef",
            "languages": {
              "typescript": {
                "name": "energy.price-cap-1.0.0-typescript.fune",
                "size": 21004,
                "sha256": "a633d4009d2359c7d1528747f6a5c1ff0a04a04557e34c72eb29258dae42f2c9",
                "integrity": "sha256-vw39mHEPGTQ7CZ+Ps1GV3yi3ld/CmNvwKdYIbwelCu8="
              },
              "python": {
                "name": "energy.price-cap-1.0.0-python.fune",
                "size": 21114,
                "sha256": "677221c1e325976bc913a3a0920cd4d32d1ca803cf0e396a0002000627b72173",
                "integrity": "sha256-hJG+2i/OvcEAZVcwmsDgyw2C/5aSqpfK2HSiVh0fiFw="
              },
              "rust": {
                "name": "energy.price-cap-1.0.0-rust.fune",
                "size": 22222,
                "sha256": "ed6ec7e40137fb5d4e55ba07afe9bac20a1ce8051bd5247fbe927b4c56d1c47a",
                "integrity": "sha256-rMPLP+4K2ZaQGj3ZekeiBZhslmLMahtGn/eCTMCy5w8="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-dkIGkLVkUCw6MAyeOrThqGlvSO//Zt9Ieu3E6ezMJIE=",
          "summary": "Ofgem energy price cap unit rate and daily standing charge for a fuel and payment method on a date (GB average).",
          "level": 2,
          "tags": [
            "energy",
            "price-cap",
            "ofgem",
            "default-tariff",
            "unit-rate",
            "standing-charge",
            "svt",
            "gb"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "data/price-cap.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "energy.price-cap-1.0.1.fune",
            "size": 27349,
            "sha256": "01528a344e3a739f896776b9ee4b867c47104d87ba50feba25906ff17ef70f52",
            "languages": {
              "typescript": {
                "name": "energy.price-cap-1.0.1-typescript.fune",
                "size": 21539,
                "sha256": "67bc0a462e126b715bcef052dc57165c5361b588d0a0f7d3aac2073ab326841c",
                "integrity": "sha256-EEp39+/L1JYgmK/Gdzv3VTyiTbkDQzJkOzu9kUsIGHg="
              },
              "python": {
                "name": "energy.price-cap-1.0.1-python.fune",
                "size": 21657,
                "sha256": "168b1e2ab703788ba233efc45c28f29ca564a3f5c13c983de123bc885c27901a",
                "integrity": "sha256-YGUXxtJEcPvdLxTqb/ibD2RZNrjxCzds+qaNHqkss+U="
              },
              "rust": {
                "name": "energy.price-cap-1.0.1-rust.fune",
                "size": 22757,
                "sha256": "5c09b74dc0489726f1ef5ca8a49993430e7756f91edcd8fef8913df9e79635a5",
                "integrity": "sha256-gJgmRmmlp+LfZ46bAU2FWgzH3Pi8ukH3QI4edxHEs3s="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.2": {
          "integrity": "sha256-PnHr1ji9mXheWM7nxAXzwe5k8/HsMMQGFblz7HDP4J4=",
          "summary": "Ofgem energy price cap unit rate and daily standing charge for a fuel and payment method on a date (GB average).",
          "level": 2,
          "tags": [
            "energy",
            "price-cap",
            "ofgem",
            "default-tariff",
            "unit-rate",
            "standing-charge",
            "svt",
            "gb"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "NOTICE",
            "README.md",
            "data/price-cap.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "energy.price-cap-1.0.2.fune",
            "size": 27981,
            "sha256": "b5ceea9f411ec53104d7e2ca1a14be3bffe7b245a623d40c0148b2e68f993042",
            "languages": {
              "typescript": {
                "name": "energy.price-cap-1.0.2-typescript.fune",
                "size": 22171,
                "sha256": "28d3a8a8c0ddeae7649bd6ad0ea025b3dea09d9b86afce94396d81421dde2813",
                "integrity": "sha256-I0CIVXuw/udCzrIV1DebwzRuKFbbGfFL9zOMmSvUmwk="
              },
              "python": {
                "name": "energy.price-cap-1.0.2-python.fune",
                "size": 22289,
                "sha256": "3fcb8622ee12a9086badbe3c87c09e9c69a8a829ea1997eb3a967d9af217a3c0",
                "integrity": "sha256-VyLa5K81zKs11Hp7ODrN1bsLLZz/yWjyiNmax23Po34="
              },
              "rust": {
                "name": "energy.price-cap-1.0.2-rust.fune",
                "size": 23389,
                "sha256": "f57494e7c418e8eb94116a3d1ed06441f1151da851a909738981a3d0e3b66f7d",
                "integrity": "sha256-gwdEpws2FdkPkl5+4WUwvdDhjFzXJWRavcByJunTlIA="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "energy.solar-generation": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-xD6NwvIMGpIkCOl0JGRH1twTzSRBMuOVuSW9KyHPTPw=",
          "summary": "Estimated annual solar PV generation by the MCS method: kWp x Kk x shade factor, per array and in total.",
          "level": 2,
          "tags": [
            "energy",
            "solar",
            "pv",
            "photovoltaic",
            "generation",
            "yield",
            "mcs",
            "kwp"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "energy.solar-generation-1.0.0.fune",
            "size": 11670,
            "sha256": "a6eb49277bb295c09e59a36e09900ec037b8cf1787bf39d098595bf24e77cbd0",
            "languages": {
              "typescript": {
                "name": "energy.solar-generation-1.0.0-typescript.fune",
                "size": 8410,
                "sha256": "7bb0e400fa52dd1c734f6f332c2bb1a4666345279539682746cd4553bd11f862",
                "integrity": "sha256-mkIvLkAt/lMm8bYikfzZfprZ84osN89X6KVOMY/Lne0="
              },
              "python": {
                "name": "energy.solar-generation-1.0.0-python.fune",
                "size": 8413,
                "sha256": "183fffe7d62fc93a28ab84649361bff7176e0bc9cb0a641b9fdc003bd9584056",
                "integrity": "sha256-9/A1y5VNRZJBw3+WollSL5atpt4e57ozcmRQDm0FlBE="
              },
              "rust": {
                "name": "energy.solar-generation-1.0.0-rust.fune",
                "size": 9345,
                "sha256": "8a9f0aea83d72e2938626f48e679fb736950dc2e67760a9f2f86b21f0085fc47",
                "integrity": "sha256-wJRQrifgsk+9pdwpAjy3MG1qcFTGHzZ8yy/oWYAqnfs="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "energy.tariff-time-of-use": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-Qu0O8q3NYiVB2Xt0b8PWriKHegU9J1bL/LBg2C4XBk8=",
          "summary": "Cost half-hourly consumption against time-of-use rates: Economy 7 windows or Agile-style half-hourly prices.",
          "level": 2,
          "tags": [
            "energy",
            "time-of-use",
            "tou",
            "economy-7",
            "agile",
            "half-hourly",
            "smart-meter",
            "tariff"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "energy.tariff-time-of-use-1.0.0.fune",
            "size": 30401,
            "sha256": "5b9d2cf0e8d53ab94a3bad7e7ecd8a67c60e48f44be0c2c54203b8838fa35244",
            "languages": {
              "typescript": {
                "name": "energy.tariff-time-of-use-1.0.0-typescript.fune",
                "size": 19977,
                "sha256": "9bd11a3be2a4cb6b9defb2826ace567276b374257dd18578104b587525a530fe",
                "integrity": "sha256-MqHN27MLfu8FhOuxPoaL4wJMIfQu7qhOFroM48l+TvY="
              },
              "python": {
                "name": "energy.tariff-time-of-use-1.0.0-python.fune",
                "size": 20227,
                "sha256": "73bb410d23c04ace7f363a134463c7c69ae04bf673ba15876a699b385939157a",
                "integrity": "sha256-PN+ldj1PDimImH2ESqLb8onoS0g/Mu+H91KY66xQcmI="
              },
              "rust": {
                "name": "energy.tariff-time-of-use-1.0.0-rust.fune",
                "size": 22669,
                "sha256": "b5a91a812102e04b70602d0804ba5fa0795a27fddb59dc2cdb49682216650638",
                "integrity": "sha256-5Qo82CnBo/Y2o2l5BCNLMPaBWIL1HrHv/D/ESC+Y+AQ="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-8fJgrTqk8C+QQCDWwnEib2sP735rdqzIuTebVC8FWPw=",
          "summary": "Cost half-hourly consumption against time-of-use rates: Economy 7 windows or Agile-style half-hourly prices.",
          "level": 2,
          "tags": [
            "energy",
            "time-of-use",
            "tou",
            "economy-7",
            "agile",
            "half-hourly",
            "smart-meter",
            "tariff"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "energy.tariff-time-of-use-1.0.1.fune",
            "size": 32263,
            "sha256": "1e8b0bc43c7659f220ae8758761991e8ef8c04a3e391ef49b21306675472d480",
            "languages": {
              "typescript": {
                "name": "energy.tariff-time-of-use-1.0.1-typescript.fune",
                "size": 21813,
                "sha256": "a0f5044dbdc881564d1b1e4df7418f1a07c67f8f057caceec812ae34a044d715",
                "integrity": "sha256-rD+HDW97nDvOCGxnb7QIDg2SsoqIs6EGhXK1cIT9dUA="
              },
              "python": {
                "name": "energy.tariff-time-of-use-1.0.1-python.fune",
                "size": 22089,
                "sha256": "1a45897b55e63a1215b026ecc13ab3bf8750839d540f995175c5eece2dbbb813",
                "integrity": "sha256-Gj00FhH0DZlhgOYXNQp3HEvnpFNf9yskNszurMiLU54="
              },
              "rust": {
                "name": "energy.tariff-time-of-use-1.0.1-rust.fune",
                "size": 24505,
                "sha256": "43d16a711abc305cf47105776c7ea0d169a295a46163a45acf42cd2ab1817e98",
                "integrity": "sha256-uaKGuMoCyXKsdOV6QvXTsUNSPe/fuPgrqbHHZ2+Sh6c="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "energy.water-bill": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-IEWqxm8+cONHGMQXtYFmO4mzqzyq94p02hAWpR9vT4Q=",
          "summary": "Metered water and sewerage bill from two reads: volumetric charges, return to sewer, standing and surface water charges.",
          "level": 2,
          "tags": [
            "energy",
            "water",
            "sewerage",
            "water-bill",
            "metered",
            "utilities",
            "surface-water",
            "standing-charge"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "dates.days-between": "^1.0.0",
            "energy.meter-advance": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "energy.water-bill-1.0.0.fune",
            "size": 28608,
            "sha256": "79d9f71e0a111957c20dff84b0ca2a486863c3ca44ebdd8b2b69095d390ad594",
            "languages": {
              "typescript": {
                "name": "energy.water-bill-1.0.0-typescript.fune",
                "size": 20198,
                "sha256": "873a309b9aea83c6d6de920b41a1ed6f6d23531a6a762c9adbdd52bf7ce5f91e",
                "integrity": "sha256-ixR5Puh6HJUpBo0XjkaU05NyUVuh2mcfsezU97c4FEE="
              },
              "python": {
                "name": "energy.water-bill-1.0.0-python.fune",
                "size": 20270,
                "sha256": "e17ba13694b1dcd3e4f086ddd5ee8e4f303f26d35f5ad3d0dfd0cf9a0702cb46",
                "integrity": "sha256-TzX7ksa0dTSbSZTdcOelACE+W7EmYLNHnVWr6o7vyNE="
              },
              "rust": {
                "name": "energy.water-bill-1.0.0-rust.fune",
                "size": 22584,
                "sha256": "5150ff2e9accb2a50e7f785e702521712c90612a6d9e918229c37626be908cf1",
                "integrity": "sha256-5GgNNOHDfBT7Lg+RDV0322xvB7NWpf+tLNe0EtpjWOs="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "finance.accruals-prepayments": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-vBI0IhbFhEebjR6QQgxTtBX4xxxwXqGuGUOfsS3UQQc=",
          "summary": "Split an invoice across accounting periods by days of service, for accruals, prepayments and deferred income.",
          "level": 2,
          "tags": [
            "accruals",
            "prepayments",
            "deferred-income",
            "deferred-revenue",
            "period-end",
            "cut-off",
            "apportionment",
            "matching",
            "month-end"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "dates.overlap": "^1.0.0",
            "money.allocate": "^1.0.0",
            "dates.days-between": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "finance.accruals-prepayments-1.0.0.fune",
            "size": 21194,
            "sha256": "98cd07e7a8663095d0e0f03e602e352103e186343e428b13014ec27501b3bad7",
            "languages": {
              "typescript": {
                "name": "finance.accruals-prepayments-1.0.0-typescript.fune",
                "size": 15633,
                "sha256": "eefae201c0f7d8593e46e035a6eea1e3c93d64cc50ff3eab9908aa2098996948",
                "integrity": "sha256-WxAr5r+cfOXw4CkkR58PUXCkd5wNEnd49CXu76SyMmg="
              },
              "python": {
                "name": "finance.accruals-prepayments-1.0.0-python.fune",
                "size": 15613,
                "sha256": "6770be0d090c54c3039c71a05d80cc14547eece56e34a9a2119e72ffc2e5aeb5",
                "integrity": "sha256-bmAVBcUha5vAr8E0lVjVdLJdkCrVROr78umYSig6dhI="
              },
              "rust": {
                "name": "finance.accruals-prepayments-1.0.0-rust.fune",
                "size": 16890,
                "sha256": "6390d61f989faecc62200d9f0780c735fb9d78400bc61e3f74b38d9d1d35861e",
                "integrity": "sha256-3MBT9VB8yJeAlLlIxhNhtK/QJkN7qhTKGZQgub6cuvI="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "finance.aged-debt": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-NltNHqMNNteW/K6muI3t+m0jRZy8jCHMHJm3Ab7vdtU=",
          "summary": "Aged debt report: open invoices bucketed as current, 1-30, 31-60, 61-90 and 90+ days overdue as at a date.",
          "level": 2,
          "tags": [
            "aged-debt",
            "aged-debtors",
            "ageing",
            "aging",
            "receivables",
            "credit-control",
            "overdue",
            "accounts-receivable"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.add": "^1.0.0",
            "money.amount": "^1.0.0",
            "dates.days-between": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "finance.aged-debt-1.0.0.fune",
            "size": 22899,
            "sha256": "c77e4bbac85a53d83b8987eb63d884d81d70c48171fdcd18c47f2fde788d57d0",
            "languages": {
              "typescript": {
                "name": "finance.aged-debt-1.0.0-typescript.fune",
                "size": 16270,
                "sha256": "679afb96c4778b2eb7602da7f5a58a6a011e1b798bd73d0c1c01ee6be28a2c0a",
                "integrity": "sha256-CaM3STqWouk+2biSaPeHcLqV7/G7Uv1V5FcV2Gcoli8="
              },
              "python": {
                "name": "finance.aged-debt-1.0.0-python.fune",
                "size": 16305,
                "sha256": "841e0cd0cef14019a96b70bf910f1caf86b68249220e7e76ed92d344b94ad60e",
                "integrity": "sha256-im90zfkoZl3Our3buGl9fzhXqe2t2u046Ma1yl/44y8="
              },
              "rust": {
                "name": "finance.aged-debt-1.0.0-rust.fune",
                "size": 18252,
                "sha256": "10b357f0f76d8d1d0cadae37fce1931f21e28c1e775e56dd2f0f1a0fe3de9dd4",
                "integrity": "sha256-dJLENLyjpjwAeT6rEoplN62Wmed0PCe3+hSqJDzZDYE="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "finance.bank-reconcile-match": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-VfedTrpKBzyYl2pjEdut1okAV/CLCWMw+hS/FSz8vfc=",
          "summary": "Match bank statement lines to ledger entries by exact amount, a date window and reference similarity, deterministically.",
          "level": 2,
          "tags": [
            "bank-reconciliation",
            "reconcile",
            "matching",
            "bank-statement",
            "cash-book",
            "auto-match",
            "bookkeeping"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "dates.days-between": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "finance.bank-reconcile-match-1.0.0.fune",
            "size": 28900,
            "sha256": "fb3977c3dbadd7f9c05039af4e56d6ec222201493cb059430c7cf27c85a4a88b",
            "languages": {
              "typescript": {
                "name": "finance.bank-reconcile-match-1.0.0-typescript.fune",
                "size": 19175,
                "sha256": "61b5fa265288af1060b9a5add3f2b891f36e8a864ec18afc37543439f3b0411e",
                "integrity": "sha256-35CJImJOPvliD02UbpyuYFAFwaeVKrxR6PoVb9U2b0s="
              },
              "python": {
                "name": "finance.bank-reconcile-match-1.0.0-python.fune",
                "size": 19112,
                "sha256": "0c02724f577e1f8d762f93cceba1074829e83eb7a10f5cff4593be999e1458d5",
                "integrity": "sha256-MqgKGQBuuw/cZYCS9qVpVtGT8Sh1YxhWVjJN2vJ4hds="
              },
              "rust": {
                "name": "finance.bank-reconcile-match-1.0.0-rust.fune",
                "size": 21091,
                "sha256": "874c7f4c4c107fc502c48b838791d9e960c786d6293b508d9163cbd9ad05b9af",
                "integrity": "sha256-A9wt7OTRr6rY+AZbJR1EiUUUcGiXYT6f3ZHeHhl0/+0="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "finance.compound-interest": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-Q8nftL66J9ymdDJNLZtKmBfc6TtLGjy0f3DG0mY82sY=",
          "summary": "Compound interest accrued period by period in minor units, the way a statement is built.",
          "level": 2,
          "tags": [
            "finance",
            "interest",
            "compound",
            "savings",
            "loan",
            "apr"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.add": "^1.0.0",
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "finance.compound-interest-1.0.0.fune",
            "size": 18344,
            "sha256": "c8221eaf973c1ba217232fe89724375fcc44c021a6b864410841c45dd98ab1b0",
            "languages": {
              "typescript": {
                "name": "finance.compound-interest-1.0.0-typescript.fune",
                "size": 12024,
                "sha256": "3fbb2c319e56d7f377c5361671499ef1a05b1ef4e86383d2c47123ff5f5624a2",
                "integrity": "sha256-NmfCnsY6utBMdyKVEJWAOTOn0AKeqi9S4vfrJ73tq70="
              },
              "python": {
                "name": "finance.compound-interest-1.0.0-python.fune",
                "size": 12134,
                "sha256": "9da565f3bfbd18d8fb71781be19729cb0035abcfc509768d2220275abc0ef6fe",
                "integrity": "sha256-hEuFH7CWCkuKVkBfQQMsXFK6untpjjqK1tLIYahbfB0="
              },
              "rust": {
                "name": "finance.compound-interest-1.0.0-rust.fune",
                "size": 13236,
                "sha256": "8636c5fe95c5e2cac43edf830edd45e6154d000320f3a3bf408dd5e8346dedab",
                "integrity": "sha256-pzwheycx268VLP2t2wQ8iGQkgWp8E7YG65rQGkxlFUg="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "finance.credit-note.calculate": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-1ndpDcAhEI0zhA90SOfUZXdanZktx385rVQqKBVzcPQ=",
          "summary": "Credit note against an original invoice, by units or by amount, with VAT at the original tax point's rates.",
          "level": 3,
          "tags": [
            "credit-note",
            "refund",
            "invoice",
            "vat",
            "returns",
            "billing",
            "accounting",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "finance.invoice.calculate": "^1.0.0",
            "finance.invoice.line-total": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "finance.credit-note.calculate-1.0.0.fune",
            "size": 36097,
            "sha256": "4d2a4b47688bccd58137edab5e068912269c299b06b57e5e31bc2ef66d97ec31",
            "languages": {
              "typescript": {
                "name": "finance.credit-note.calculate-1.0.0-typescript.fune",
                "size": 28923,
                "sha256": "1aee8ce688db28f2f976de6bb0e0ab3a684ed5cd47d8f44290f65f937341106d",
                "integrity": "sha256-O8hcKF/lmsnyIkkxAR5HeFvaKUuNxS9EDOhuMOTLyRg="
              },
              "python": {
                "name": "finance.credit-note.calculate-1.0.0-python.fune",
                "size": 29275,
                "sha256": "7846e832a75cd98282ea088fb38dcc142d9b182d7032e8c68a00f3bcf0baec98",
                "integrity": "sha256-KswPXoHSnTUtwwy3bW7/7Dvv//Lngk1Yn1G7eaz4KCs="
              },
              "rust": {
                "name": "finance.credit-note.calculate-1.0.0-rust.fune",
                "size": 29969,
                "sha256": "ff6cc2ae0d439fa36bb70a37d2d40c8c58a352644158d08c173f3ea0269c9109",
                "integrity": "sha256-8lnc8s50RPwIqj0O82E3e88VXiTeNzTqGFL8W2gh1Bo="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "finance.depreciation-reducing-balance": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-0V3k7MMWMWsRSGwsKN/OwvdlxtGjsxPJd2IKtD9l+BQ=",
          "summary": "Reducing-balance depreciation schedule at a fixed rate, writing off to the residual value in the final year.",
          "level": 2,
          "tags": [
            "finance",
            "accounting",
            "depreciation",
            "reducing-balance",
            "declining-balance",
            "diminishing-value",
            "fixed-assets",
            "schedule"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.add": "^1.0.0",
            "money.amount": "^1.0.0",
            "money.apply-rate": "^1.0.0",
            "finance.depreciation-straight-line": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "finance.depreciation-reducing-balance-1.0.0.fune",
            "size": 18429,
            "sha256": "69696d6a77b88def88901f5e5d0f3d6a16df86ebce536e0ce9e53d3dd4ceaa34",
            "languages": {
              "typescript": {
                "name": "finance.depreciation-reducing-balance-1.0.0-typescript.fune",
                "size": 13680,
                "sha256": "09136f0c6bdfb6fd4f765c70dc64b157ebc6c02cdd2c1bd71fd5eaf0f9bcc332",
                "integrity": "sha256-R+ME03ob6hFMWfeXTKuEpedL9H63Ugi0uO0oq4Nae7w="
              },
              "python": {
                "name": "finance.depreciation-reducing-balance-1.0.0-python.fune",
                "size": 13814,
                "sha256": "dc87d616d0de0fa8c892f1fdbd7b0efcc13b269548ca17bbf57c2db52cdd045e",
                "integrity": "sha256-jJHAl6rkHiu7SXg3t//JnZrMkJYkFv5VNpSvjS9y4sg="
              },
              "rust": {
                "name": "finance.depreciation-reducing-balance-1.0.0-rust.fune",
                "size": 14387,
                "sha256": "a858a4386c6a4275faf77312c0dd13739261d5d9f76a35f223035377307699ac",
                "integrity": "sha256-tdOGZuWK6mDFn7gPt3swA9/3/e4Yui59YY+ihYuOg0Y="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "finance.depreciation-straight-line": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-xcGdI7xo0ZKRxJv+2pFVhikkk/U0g3LxcDPNmBn/nXE=",
          "summary": "Straight-line depreciation schedule whose charges sum exactly to cost less residual value.",
          "level": 2,
          "tags": [
            "finance",
            "accounting",
            "depreciation",
            "straight-line",
            "fixed-assets",
            "schedule"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.add": "^1.0.0",
            "money.amount": "^1.0.0",
            "money.allocate": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "finance.depreciation-straight-line-1.0.0.fune",
            "size": 21560,
            "sha256": "0695a6a3ea4324d63b1e7b07067487ebe7fb608afa73b34475838341835c6495",
            "languages": {
              "typescript": {
                "name": "finance.depreciation-straight-line-1.0.0-typescript.fune",
                "size": 14739,
                "sha256": "68088aa81bc87f488c414f7d1102311c690729905ff11fd79e64b678831db2fb",
                "integrity": "sha256-QJxhYq3NXdaxOW9V8ZWwhkLS0+IePoy9S5e8rvWtRB0="
              },
              "python": {
                "name": "finance.depreciation-straight-line-1.0.0-python.fune",
                "size": 14849,
                "sha256": "4c6c83452f793e12119e02d936d03d37928bb03e142f9180e3c680627cc135a7",
                "integrity": "sha256-2LXqS4/UAGJgognXe5IklXpKvuhaE8tOu0jp2dHsVFA="
              },
              "rust": {
                "name": "finance.depreciation-straight-line-1.0.0-rust.fune",
                "size": 16128,
                "sha256": "4ba6b7b8a9d5a5a670915179a0516b059477f362054572e086beb4818ba71e0e",
                "integrity": "sha256-7DYoLE1Vv4Nmsnmn0i3oghmVK+Lg5QdF2dnHHBbnvjM="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "finance.early-payment-discount": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-fROPFSmch5QsAw60H2l1BYaOe1DJP8O593C109GR5C4=",
          "summary": "Early settlement discount available on a payment date under \"2/10 net 30\" style terms, and the amount to pay.",
          "level": 2,
          "tags": [
            "early-payment-discount",
            "settlement-discount",
            "prompt-payment",
            "2/10-net-30",
            "cash-discount",
            "payment-terms",
            "receivables",
            "payables"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.add": "^1.0.0",
            "money.amount": "^1.0.0",
            "dates.add-days": "^1.0.0",
            "money.apply-rate": "^1.0.0",
            "finance.payment-terms-due-date": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "finance.early-payment-discount-1.0.0.fune",
            "size": 16977,
            "sha256": "f68a7c9391ad1a546ab9a34c51f6b02a3d0dfcee0c2784d17193b5b775b9c029",
            "languages": {
              "typescript": {
                "name": "finance.early-payment-discount-1.0.0-typescript.fune",
                "size": 12644,
                "sha256": "8e72cb7e325016146d044693a025909f5453222aff13b8cbfe621c0e54aeac62",
                "integrity": "sha256-OXSvzJ0rKvA7bLEyWXtRC6GjZbGSCMkpxmMX4bIznHY="
              },
              "python": {
                "name": "finance.early-payment-discount-1.0.0-python.fune",
                "size": 12612,
                "sha256": "4618af88a51602a59c938587da347aafab6a12de2cd6293bbe8b44ef218b2205",
                "integrity": "sha256-/yFYwxXv4hlUfHFKh/aa81rknqWo7elfvqJBMPN+57A="
              },
              "rust": {
                "name": "finance.early-payment-discount-1.0.0-rust.fune",
                "size": 13529,
                "sha256": "559243825691564d275bed863693e17b0ee3e036d02a43e92b06cf2e8ee8086b",
                "integrity": "sha256-KF4RuaqFtP1H2gdxkXagGl13oJjhnTIvdhsQsoGctyc="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "finance.fx-revaluation": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-PobM4EVHAYTMZ5iUDjggVLc4ZSLpvtRtafHPuIJ7jhg=",
          "summary": "Unrealised foreign exchange gain or loss on foreign-currency balances revalued at a period-end rate.",
          "level": 2,
          "tags": [
            "fx-revaluation",
            "foreign-exchange",
            "unrealised-gain",
            "unrealised-loss",
            "period-end",
            "currency-revaluation",
            "month-end",
            "ias-21"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.add": "^1.0.0",
            "money.amount": "^1.0.0",
            "money.convert": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "finance.fx-revaluation-1.0.0.fune",
            "size": 21558,
            "sha256": "6cb7b3e1212b7ea10c4c3a460e0c1c058a94db0fd0cee1683a75fe666d6eeb01",
            "languages": {
              "typescript": {
                "name": "finance.fx-revaluation-1.0.0-typescript.fune",
                "size": 15878,
                "sha256": "a90099d49ed8c904ce4f8e9dc3cf380eedb5acba3641f2412b4aa4c368f8f2ea",
                "integrity": "sha256-jIFLWrLSYoyf1k9SpRspSqTuQBfgYBB4HnkWxcljpG0="
              },
              "python": {
                "name": "finance.fx-revaluation-1.0.0-python.fune",
                "size": 15959,
                "sha256": "ee32c0e370c1fe4a1a39ccf9ad3b3fc3e5335cc37d8083ea5443bd5a8017ac83",
                "integrity": "sha256-8uqYcXdSIsY+fxUjK4N+kXNSyOQ3VvsGLwfLPc93Hks="
              },
              "rust": {
                "name": "finance.fx-revaluation-1.0.0-rust.fune",
                "size": 17667,
                "sha256": "f024f1b99e8b821e645566916eea067acd3e117083a928885d5ff56ef586e3d8",
                "integrity": "sha256-UruR5mJJ1uc1pHmg6nKpLDn442Z9IFWAKB6dtM7gImA="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "finance.invoice.calculate": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-Z/KENHqPTYhQHMcaO5fxkrqH9TaayC5IsnNySzs7bdU=",
          "summary": "Calculate a complete invoice: line nets, VAT per line, totals and a VAT summary grouped by rate.",
          "level": 3,
          "tags": [
            "invoice",
            "billing",
            "vat",
            "tax",
            "totals",
            "accounting",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.add": "^1.0.0",
            "money.sum": "^1.0.0",
            "money.amount": "^1.0.0",
            "finance.tax.add-vat": "^1.0.0",
            "finance.invoice.line-total": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "finance.invoice.calculate-1.0.0.fune",
            "size": 21577,
            "sha256": "df21cb0a6c145c61a5de4151aeb3b0b11b21ea455afd665db482710d2694a6ea",
            "languages": {
              "typescript": {
                "name": "finance.invoice.calculate-1.0.0-typescript.fune",
                "size": 13906,
                "sha256": "3fedfd91c614da98f0fa5a7b1dfb5f9ff1e881e89b8bee44f3410ac3a6f9e07b",
                "integrity": "sha256-XFOgeey14TElS/tCcrquuVtZnMFnWyltovd3pyRXKsI="
              },
              "python": {
                "name": "finance.invoice.calculate-1.0.0-python.fune",
                "size": 13871,
                "sha256": "f9da1c6c059e4e7aaf72bd6d2f43a6a0e1311dceb6f94bffa01d9c259e0ef897",
                "integrity": "sha256-eI2BaqT2VfS7OBoD8prhPegxOfyVNHWYO6lFvf33NcI="
              },
              "rust": {
                "name": "finance.invoice.calculate-1.0.0-rust.fune",
                "size": 16536,
                "sha256": "0f9851ee98b572a2393513d12ab945a5264b867d665c98a0f242caddb2970255",
                "integrity": "sha256-53Eyr9KLPklHE/OGtsbJocTU7DZjBM4LUj+h/BucG3Y="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-1iGiQfbBKV1DIXhFyVwmQRR0gerXxVdYcLQdT6N4vyE=",
          "summary": "Calculate a complete invoice: line nets, VAT per line, totals and a VAT summary grouped by rate.",
          "level": 3,
          "tags": [
            "invoice",
            "billing",
            "vat",
            "tax",
            "totals",
            "accounting",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.add": "^1.0.0",
            "money.sum": "^1.0.0",
            "money.amount": "^1.0.0",
            "finance.tax.add-vat": "^1.0.0",
            "finance.invoice.line-total": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "finance.invoice.calculate-1.0.1.fune",
            "size": 36109,
            "sha256": "407c66fe0de98ea749e786a2b333280eba635925b5f685a3da36f577fedd1584",
            "languages": {
              "typescript": {
                "name": "finance.invoice.calculate-1.0.1-typescript.fune",
                "size": 28438,
                "sha256": "a96c0d9b0be312504363f9f2ee85f1e2c39ab73491cfdce34767539d0371d8a5",
                "integrity": "sha256-ZmtON8WvOgeJhBcuvkNUl5RNlITttkceZqlwjDZ39Ig="
              },
              "python": {
                "name": "finance.invoice.calculate-1.0.1-python.fune",
                "size": 28403,
                "sha256": "25077cef368ccb4c7a57dd64d748c80f99504e69089ee796b2bdf966594b7985",
                "integrity": "sha256-DJe9KNHYKp2hKpf1J4ypY+2/6Tj2PzhLT+q/PqHObX0="
              },
              "rust": {
                "name": "finance.invoice.calculate-1.0.1-rust.fune",
                "size": 31068,
                "sha256": "36b56d0271c1bb6cf566e06772f4c47c2e823beae631d49c38e2b05a727eafd4",
                "integrity": "sha256-uBzOwD+rRRhBmhSRdoGov/O74w+U0ShNCapgvxIPZGw="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "finance.invoice.line-total": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-9FssxKV4X0q/6F9TxzonJQYOuwnh9umIrV3Lrm36uTE=",
          "summary": "Net total for one invoice line: unit price by quantity, less a discount.",
          "level": 2,
          "tags": [
            "invoice",
            "line",
            "discount",
            "quantity",
            "billing"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "money.apply-rate": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "finance.invoice.line-total-1.0.0.fune",
            "size": 7070,
            "sha256": "c2462dccc8a0b7672e97f8e360047906aee3004d804143ee03dd6a0afcc9520a",
            "languages": {
              "typescript": {
                "name": "finance.invoice.line-total-1.0.0-typescript.fune",
                "size": 4263,
                "sha256": "13addbe6650c4d228eee3e2452fcd2e71c2d2f180d9aee810b29b6f8282049a0",
                "integrity": "sha256-ftufZ/D9Z0NEUpYf6iS/9diei/xYfJbKv8hzInr+op0="
              },
              "python": {
                "name": "finance.invoice.line-total-1.0.0-python.fune",
                "size": 4345,
                "sha256": "c5b0bfb9dc4a39307c267cc40223c4060ab4a71ff7718c43a219855d8e0ab52c",
                "integrity": "sha256-BuVM9AgxcCe0sEdbx2MCV3XJDB0p/2pfgdrDr0taL5M="
              },
              "rust": {
                "name": "finance.invoice.line-total-1.0.0-rust.fune",
                "size": 4900,
                "sha256": "3a92b97db5d48f71ab20ba891108f0d4be565ed68ed330535a655237fe08f7ad",
                "integrity": "sha256-YOhFz1OrNe7BFBnKcJT6XiJGFYHiTSP2D2Ps24/mESQ="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "finance.late-payment-interest": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-SA4zWv5B7MxyVn8aPnrcxdlk22MaF5sCB7ML338zxus=",
          "summary": "UK statutory late payment interest (8% over Bank Rate) and fixed compensation under the Late Payment Act 1998.",
          "level": 2,
          "tags": [
            "late-payment",
            "statutory-interest",
            "late-payment-act",
            "debt-recovery",
            "compensation",
            "overdue",
            "interest",
            "uk",
            "gb"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.add": "^1.0.0",
            "money.amount": "^1.0.0",
            "dates.add-days": "^1.0.0",
            "math.round-div": "^1.0.0",
            "dates.days-between": "^1.0.0",
            "finance.uk-bank-rate": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/fixed-sums.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "finance.late-payment-interest-1.0.0.fune",
            "size": 28717,
            "sha256": "681b9c39f016a4d30f6fe3fd0c204142e0db2b63ef15691e2fcbdec21a9a721f",
            "languages": {
              "typescript": {
                "name": "finance.late-payment-interest-1.0.0-typescript.fune",
                "size": 19263,
                "sha256": "32d2d4d72c176837cd0c361b6980d959170f6bc6356ecf6653d1a6a896edea0c",
                "integrity": "sha256-ckbwE+Hh6CYGVe1ZyeGKeGChZ4lUjmc6FZfiIHY3Iwg="
              },
              "python": {
                "name": "finance.late-payment-interest-1.0.0-python.fune",
                "size": 19160,
                "sha256": "db4e2643f76b7015ba0b41cf186e153d58ddc12d4f8ed3f92917bd9d988e232e",
                "integrity": "sha256-8OWq/mGmhNCGRNXg6utosE+zSgmjmY7unq4P8ebOzCY="
              },
              "rust": {
                "name": "finance.late-payment-interest-1.0.0-rust.fune",
                "size": 20594,
                "sha256": "668a7b150afc77b83d47ea591df907ab883f841045b7009d0e096d763a883d83",
                "integrity": "sha256-dzptgXYgX0oaGKmS2LM2hWZzTEoR8NdlKBFLFGBW1eY="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-e80NMhUiOXDOgWizZCIbkrpYcr5NizAW83H+Zeu/IYs=",
          "summary": "UK statutory late payment interest (8% over Bank Rate) and fixed compensation under the Late Payment Act 1998.",
          "level": 2,
          "tags": [
            "late-payment",
            "statutory-interest",
            "late-payment-act",
            "debt-recovery",
            "compensation",
            "overdue",
            "interest",
            "uk",
            "gb"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.add": "^1.0.0",
            "money.amount": "^1.0.0",
            "dates.add-days": "^1.0.0",
            "math.round-div": "^1.0.0",
            "dates.days-between": "^1.0.0",
            "finance.uk-bank-rate": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "data/fixed-sums.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "finance.late-payment-interest-1.0.1.fune",
            "size": 29300,
            "sha256": "4f0ce88e17b75b3668af5374d8eaa335466e2cbc63d97da5ee194d4d6b06b789",
            "languages": {
              "typescript": {
                "name": "finance.late-payment-interest-1.0.1-typescript.fune",
                "size": 19846,
                "sha256": "c631621f8edbb446b54cf68ed69ae7544ffb77711f093e134c4a4d272785c613",
                "integrity": "sha256-ok3jILf/mvw/og20ZzM8qf2cjTJ5x3Rl3WPo4F7lzZ0="
              },
              "python": {
                "name": "finance.late-payment-interest-1.0.1-python.fune",
                "size": 19743,
                "sha256": "139c848c6c924466de4e714218637a15a502f1f476f0e55884f5c6b15c798de5",
                "integrity": "sha256-4zpN4zTLs8RJITKeWzOnGd2ksynYHUPnvi2IMvpXzko="
              },
              "rust": {
                "name": "finance.late-payment-interest-1.0.1-rust.fune",
                "size": 21177,
                "sha256": "f1c35f15f787cb21b5dca7fd7f27d3bcfd5e5a5b4c3f3b538bfb8b5b90e17df4",
                "integrity": "sha256-+b0MirwUP0Dqn/ZaUcgxkqTIVJkOaxXIdQ+AplXXtxY="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "finance.ledger.journal-validate": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-DoALUiou1QbTBDTFUX9+TirewDajHhKelnoIFgk0PzM=",
          "summary": "Check a double-entry journal: debits equal credits, no zero or two-sided lines, one currency, well-formed account codes.",
          "level": 1,
          "tags": [
            "journal",
            "ledger",
            "double-entry",
            "bookkeeping",
            "debit",
            "credit",
            "balance",
            "validation",
            "general-ledger"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.add": "^1.0.0",
            "money.amount": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "finance.ledger.journal-validate-1.0.0.fune",
            "size": 29164,
            "sha256": "cd6200f3b41261bc67aaa8970bd4f13bee5b41b6d10c97e212f12d124df7d8e0",
            "languages": {
              "typescript": {
                "name": "finance.ledger.journal-validate-1.0.0-typescript.fune",
                "size": 20728,
                "sha256": "186b7c9f6279c8c1ad0500c3663baabbcbea8bfeb4c4e70ceaa603bdf3613730",
                "integrity": "sha256-dBzxVnSv29XnGgpXLL+Zb2RQgIRgyuJUTm+Q49vk64E="
              },
              "python": {
                "name": "finance.ledger.journal-validate-1.0.0-python.fune",
                "size": 20799,
                "sha256": "ea7098b8bffcb82edfa22cdac12c6f9a194e09599024c67763b8412bc8e9680a",
                "integrity": "sha256-7Q2bDW0n7R5oBd9OPRjDJAgafUhFuQjSr3cIuMmsjXE="
              },
              "rust": {
                "name": "finance.ledger.journal-validate-1.0.0-rust.fune",
                "size": 22855,
                "sha256": "fcb2e8b763a75483c3f68f9e334cc413ac0e934c42455d0dbc5707d95da233d7",
                "integrity": "sha256-w34duAnxBAMo2cZzUfiN4fbQ7M0hQIGFq5qyWQHgRCU="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "finance.ledger.trial-balance": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-buAps4iUGY7xEbDjxmcAQgiiHzMLJ0LguXC1x0Jz8Pk=",
          "summary": "Trial balance from journal lines: debit or credit balance per account, and proof that debits equal credits.",
          "level": 2,
          "tags": [
            "trial-balance",
            "ledger",
            "general-ledger",
            "double-entry",
            "bookkeeping",
            "debit",
            "credit",
            "accounts",
            "year-end"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.add": "^1.0.0",
            "money.amount": "^1.0.0",
            "finance.ledger.journal-validate": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "finance.ledger.trial-balance-1.0.0.fune",
            "size": 24288,
            "sha256": "cec194b001064de3bcd8096dca2aab7883610285ae3ebb71ca1ec50454999df3",
            "languages": {
              "typescript": {
                "name": "finance.ledger.trial-balance-1.0.0-typescript.fune",
                "size": 18418,
                "sha256": "96a62742e68331b25f47c65d33ee4fcf2447b3b4324307c9f72d0e919ef57ed8",
                "integrity": "sha256-FnS/rDbrXsHrW5tzJBmq47nh2IMKpxde4FQLbrfLe6g="
              },
              "python": {
                "name": "finance.ledger.trial-balance-1.0.0-python.fune",
                "size": 18451,
                "sha256": "508345adad6d0023e90861c3d060defdaeca2bd4ade220c95087a982f30b59fa",
                "integrity": "sha256-zSYh3btDL5B9ophJPH4qq4MbQyYi9trBjTGfi15J9lo="
              },
              "rust": {
                "name": "finance.ledger.trial-balance-1.0.0-rust.fune",
                "size": 19879,
                "sha256": "6dc90e6f151ba740c69a0e275856ed98de2aa5297a25c319fdc80748add66415",
                "integrity": "sha256-ht7hCwUwKDPM/4rn5hPJhTVuqr1fTWjMdFEu6oKpWSA="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "finance.margin": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-Co8q5C+ejo9y1WkFL4cU2r6mg/vy1DlKCu9KcgeiS84=",
          "summary": "Profit on a sale with both the margin and the markup, so the two are never confused.",
          "level": 2,
          "tags": [
            "finance",
            "margin",
            "markup",
            "pricing",
            "retail",
            "profit"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.add": "^1.0.0",
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "finance.margin-1.0.0.fune",
            "size": 16021,
            "sha256": "b34d55a2236e931c52e6bd1d5122aef0d799949537ccf7131318fafe63cedf69",
            "languages": {
              "typescript": {
                "name": "finance.margin-1.0.0-typescript.fune",
                "size": 10565,
                "sha256": "aa6385214f88b8ae54149004623004b041a029758e9cf13f98400903e61fc24a",
                "integrity": "sha256-+PLimX1wU5KIX3FQwbWCBx7hv308AhhzOPxUPsbGVEk="
              },
              "python": {
                "name": "finance.margin-1.0.0-python.fune",
                "size": 10568,
                "sha256": "4532ae2da6e2ecbc91216cf5d57c80274bed3f2d14c3dc450c1854587a870a79",
                "integrity": "sha256-gWcqWjh6yeqfub1okycBwWGNgx2kSxM3ge59tfoY1JQ="
              },
              "rust": {
                "name": "finance.margin-1.0.0-rust.fune",
                "size": 11782,
                "sha256": "65ac7c5cd969bf6c1051b5456383bf3f3d253ec559bb3373229683b71a4f5dbe",
                "integrity": "sha256-NscMQw4ZYe/o3a9W5LfJ0hK/J1NYAR4PcJWdcy67CoQ="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "finance.markup-price": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-il4ICjqejE/7Hi/pl/pdfpmBJlFMBTi7wc9vL+BRtyk=",
          "summary": "Selling price from a cost and a target margin or markup in basis points, with explicit rounding.",
          "level": 2,
          "tags": [
            "finance",
            "pricing",
            "markup",
            "margin",
            "cost-plus",
            "price",
            "retail"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "finance.markup-price-1.0.0.fune",
            "size": 15136,
            "sha256": "bfaa16042b3d9d9018be2d19e2ead48b179a814facd04d7ea13796de6f55ac33",
            "languages": {
              "typescript": {
                "name": "finance.markup-price-1.0.0-typescript.fune",
                "size": 11517,
                "sha256": "35eddd3540f3800ed2abc51dffe31fde7d3f87e2d48695ed59821497ef7335b4",
                "integrity": "sha256-1qmssRpLduVAGPZ/8psfmcy4LaRpu1M8MAPTDFSrSec="
              },
              "python": {
                "name": "finance.markup-price-1.0.0-python.fune",
                "size": 11543,
                "sha256": "6328592b7098245bba82a09666c752ab26a29857ce13683edf0d1f4efd623556",
                "integrity": "sha256-IxhYUOEsw4v3w6pWCeZKC7hYd0/GWxsVtqisTDVcw64="
              },
              "rust": {
                "name": "finance.markup-price-1.0.0-rust.fune",
                "size": 11824,
                "sha256": "14b843beb0c500c2a066808deae53bbc96d9bc30d641cfe6fbcaf28011d30347",
                "integrity": "sha256-M0P11XvMjjgL6bJ6H/WSZJWbJqZsPAksMaYIqQziy6s="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "finance.payment-terms-due-date": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-r6oe9id4/aDw3XehCDnBArokJxzAqyOnfXNxfhk+bWM=",
          "summary": "Invoice due date from payment terms: net N days, end of month, N days after month end, day N of next month.",
          "level": 1,
          "tags": [
            "payment-terms",
            "due-date",
            "net-30",
            "eom",
            "credit-terms",
            "invoice",
            "settlement",
            "receivables"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0",
            "dates.add-months": "^1.0.0",
            "dates.month-boundaries": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "finance.payment-terms-due-date-1.0.0.fune",
            "size": 17935,
            "sha256": "0455561cbc8963d1c565857524d43b7d30a46e9260f81d847729f9155eedd3d9",
            "languages": {
              "typescript": {
                "name": "finance.payment-terms-due-date-1.0.0-typescript.fune",
                "size": 12717,
                "sha256": "6a90fa515535343aeaafc6b4fa15be749e1a567da16bd78cdb9ac0d150c23da0",
                "integrity": "sha256-6KlJgTlWD8Cm8iqCGd64W0Axrk6lt53ST5mXl/KG1g4="
              },
              "python": {
                "name": "finance.payment-terms-due-date-1.0.0-python.fune",
                "size": 12551,
                "sha256": "5ab043fc0cf3720d3974bb73d9b39f660cea3c07f6287bd11a646d22ac4aad36",
                "integrity": "sha256-n3RsraFtdcEVHx/3n9kruhG9Ov+5T4vPqkSK7tVPt/k="
              },
              "rust": {
                "name": "finance.payment-terms-due-date-1.0.0-rust.fune",
                "size": 13005,
                "sha256": "5771136278aaa2f665db18f0bb18af232a8d698dd0c41aaf9ceae7622408c538",
                "integrity": "sha256-yfO2aM98TTU6sJvMJ9kUhHFrrxvAq0LF9A77nl0xEPw="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "finance.proration": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-CQbfFI1TXs8wNyXsgM8336u1dRdkmxUyMUJlI89+vO4=",
          "summary": "Split an amount into the part used and the part unused over a billing period, losing nothing.",
          "level": 2,
          "tags": [
            "finance",
            "proration",
            "billing",
            "subscription",
            "saas",
            "refund",
            "upgrade"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "money.allocate": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "finance.proration-1.0.0.fune",
            "size": 13979,
            "sha256": "8787fa0dca9740f81e2faa9aca8f833b8d6ddaa96c980992803b17503cde999b",
            "languages": {
              "typescript": {
                "name": "finance.proration-1.0.0-typescript.fune",
                "size": 9332,
                "sha256": "e94d703f082a28b22941cf1e4da67e111be26c22f045690e4a88d46ccc62db73",
                "integrity": "sha256-/O5iIf871DKUkO14LjLoulMPGlAbaKvSQQKCyJ5tCZc="
              },
              "python": {
                "name": "finance.proration-1.0.0-python.fune",
                "size": 9409,
                "sha256": "a9cc85ef85b0cc17c7060a92ddb854b8ed12658f245c1576a6ebb5ddd1fdab6c",
                "integrity": "sha256-itrrvXou5kRn/9mP206oHK8xMseWooh2rTCBxaCaK8M="
              },
              "rust": {
                "name": "finance.proration-1.0.0-rust.fune",
                "size": 10432,
                "sha256": "62f2a9d78a3a7016dd286335e456722571fac6d4624bfc33d53ef3075c720bc2",
                "integrity": "sha256-5jEV68GhcrN1N0rktLH9JH8RgsQA1Bo0JCvthLMJPCs="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "finance.tax.add-vat": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-9RkKxDVAv8jyQXNteiwyP71v1y9QrhGDf2luO3Gz8iY=",
          "summary": "Add VAT to a net amount using the rate in force on the date of supply.",
          "level": 2,
          "tags": [
            "tax",
            "vat",
            "uk",
            "invoice",
            "net",
            "gross"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.add": "^1.0.0",
            "money.amount": "^1.0.0",
            "money.apply-rate": "^1.0.0",
            "finance.tax.vat-rate": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "finance.tax.add-vat-1.0.0.fune",
            "size": 8542,
            "sha256": "05f063a240ebc0fa25068224c4945615ecd6b9ddb72ceb1a68ac2af306ec8b3a",
            "languages": {
              "typescript": {
                "name": "finance.tax.add-vat-1.0.0-typescript.fune",
                "size": 6244,
                "sha256": "c090879ca90ee5ae469104725e9c958ff491a847d8ee73387fcf51493cc469d5",
                "integrity": "sha256-kQ+cH4+82IgGMZWZPCcNWGRQPD+ti5IkaJ+GpRTAago="
              },
              "python": {
                "name": "finance.tax.add-vat-1.0.0-python.fune",
                "size": 6189,
                "sha256": "82200c7a4e89996afdc66d937f21dfc52ce6662c93bc7c1f356cb2aa4cf1cdf7",
                "integrity": "sha256-+Ew9m9QF9FyRfPpqn8a+UNcl/EMEWep5Hv7fltSoTWY="
              },
              "rust": {
                "name": "finance.tax.add-vat-1.0.0-rust.fune",
                "size": 6747,
                "sha256": "469c78c31961128e78538b28fbf2449512046e32b045af041b9a8f7c1425d173",
                "integrity": "sha256-fDHtH9jckyJZau5oZfujYp9+wHT9cECbTD4yKYzTc5s="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-kuV/udOJ1n7Cu9FtM7osH0/zwOm45JLwwclreq0VqF8=",
          "summary": "Add VAT to a net amount using the rate in force on the date of supply.",
          "level": 2,
          "tags": [
            "tax",
            "vat",
            "uk",
            "invoice",
            "net",
            "gross"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.add": "^1.0.0",
            "money.amount": "^1.0.0",
            "money.apply-rate": "^1.0.0",
            "finance.tax.vat-rate": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "finance.tax.add-vat-1.0.1.fune",
            "size": 9696,
            "sha256": "51e2215962b87cfc7de9ebfdc142e005b3f7b780a6faf91244486bb57a406763",
            "languages": {
              "typescript": {
                "name": "finance.tax.add-vat-1.0.1-typescript.fune",
                "size": 7398,
                "sha256": "3914634bd66ddd093981c7690472c17ac1a51b8552b08a8dbce01aa8d336b643",
                "integrity": "sha256-e8TV1TK8oFbeIcQuyKC5N8j+UVRBGkMJ2Uousypx7hA="
              },
              "python": {
                "name": "finance.tax.add-vat-1.0.1-python.fune",
                "size": 7343,
                "sha256": "33a38654363f705637f2184e74a6e06c8e821c0f73bde5075bc2369f853068ae",
                "integrity": "sha256-nvq3sBvcs5v5Gfa8vpWL6TlK2ZNrpx4j26gnl0bLoWE="
              },
              "rust": {
                "name": "finance.tax.add-vat-1.0.1-rust.fune",
                "size": 7901,
                "sha256": "59fdd059dcc16ff2955078352a2550f90f87d63d640f6ab700ffe8e7e76af8eb",
                "integrity": "sha256-HpWVeCwm9JNajeIXYih6XyY9BdjJDKaiqUiadOoKp1Q="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "finance.tax.remove-vat": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-J3+XLbgKiTA8I3J3E2Ib4q9OWgKCtnJAiyxNehd8d7k=",
          "summary": "Extract the VAT already included in a gross amount, using the rate in force on the date of supply.",
          "level": 2,
          "tags": [
            "tax",
            "vat",
            "uk",
            "gross",
            "net",
            "vat-inclusive",
            "retail"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "finance.tax.add-vat": "^1.0.0",
            "finance.tax.vat-rate": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "finance.tax.remove-vat-1.0.0.fune",
            "size": 7589,
            "sha256": "3da67ed18e1dd6d2f1ea8edc804bc28d11b536bac10981509f6f8f9440fb68ea",
            "languages": {
              "typescript": {
                "name": "finance.tax.remove-vat-1.0.0-typescript.fune",
                "size": 5311,
                "sha256": "a448442112bff9a377e4db17d59abf187159f9c51af0566baaee9fbdc97cdf0b",
                "integrity": "sha256-F+SOZjqDKxrlDPWkpmkYC579eOpaJqe40Hq5zMDVvi8="
              },
              "python": {
                "name": "finance.tax.remove-vat-1.0.0-python.fune",
                "size": 5270,
                "sha256": "4a8968fcc82ee9df72c80b1bc1af97bcf294856a5cf75760b4e328c006e30738",
                "integrity": "sha256-M0S3dA8vrCoKtavqnlc/ghbjKh6cuhFBtUegxtGmTac="
              },
              "rust": {
                "name": "finance.tax.remove-vat-1.0.0-rust.fune",
                "size": 5618,
                "sha256": "6d838d28c04c361db5cb0844ff3ffd129fc8542541ead55afa21bcbc09039ea8",
                "integrity": "sha256-/FzbtgebYfNTBWzzeQbc1Z9zrw3qPy/A5gixeNEsrwg="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-Sje5aJAAu/ew/ujRyRlueYZL4qvCIsfPItMFtasYMQo=",
          "summary": "Extract the VAT already included in a gross amount, using the rate in force on the date of supply.",
          "level": 2,
          "tags": [
            "tax",
            "vat",
            "uk",
            "gross",
            "net",
            "vat-inclusive",
            "retail"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "finance.tax.add-vat": "^1.0.0",
            "finance.tax.vat-rate": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "finance.tax.remove-vat-1.0.1.fune",
            "size": 11587,
            "sha256": "bbad1ea5f661fe68687fe1b6b6857904e8dd7422f9aa7d4501a896ac893b51d2",
            "languages": {
              "typescript": {
                "name": "finance.tax.remove-vat-1.0.1-typescript.fune",
                "size": 9309,
                "sha256": "1ad3ff2592bf65595e002031fac055009f8e5ce854af1ecaab57fa12734c12cb",
                "integrity": "sha256-MoneNyb5/KSVVavyHzR0rh9recoU9lDjItfefMPGHCk="
              },
              "python": {
                "name": "finance.tax.remove-vat-1.0.1-python.fune",
                "size": 9268,
                "sha256": "558de634a410cf94a1a1f6ff9feca8c91885cc67225c309d8b858f437b7fea22",
                "integrity": "sha256-uLUD3JPyMUHcqg7I0/VZwoV/W4i1okW5OqmPtV2rRgo="
              },
              "rust": {
                "name": "finance.tax.remove-vat-1.0.1-rust.fune",
                "size": 9616,
                "sha256": "3e06d4c199fc151ae8570645d959de7f4a2537809b0c29a7c638711df6ae8a6d",
                "integrity": "sha256-vhyDXQL9eTPDr9gfRaX14UTubSloGQLW5G2axSOKkBY="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.2": {
          "integrity": "sha256-pbRuYXeuMx/xnIH241Zjn+38zgm4DxR+S7wLQaDjjmM=",
          "summary": "Extract the VAT already included in a gross amount, using the rate in force on the date of supply.",
          "level": 2,
          "tags": [
            "tax",
            "vat",
            "uk",
            "gross",
            "net",
            "vat-inclusive",
            "retail"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "finance.tax.add-vat": "^1.0.0",
            "finance.tax.vat-rate": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "finance.tax.remove-vat-1.0.2.fune",
            "size": 12741,
            "sha256": "a0de006f7150d4162a1c9fbb6fdb42ac78bf05e9a21abf97409fe209e8e6bb88",
            "languages": {
              "typescript": {
                "name": "finance.tax.remove-vat-1.0.2-typescript.fune",
                "size": 10463,
                "sha256": "6ecffa1732335f69c8e297a8ed9c679d83372ffdc67176a6f04d47d865555c32",
                "integrity": "sha256-+rfLLeUm/6vsvKCG+hBb/ozhzcEf0SpYjvn3ibVpSME="
              },
              "python": {
                "name": "finance.tax.remove-vat-1.0.2-python.fune",
                "size": 10422,
                "sha256": "1067b1f8273c37bc504258c83d1aec2b4b39f5571271365c983384be9cbf2c4d",
                "integrity": "sha256-ps+EvSemvXbghp6Y8qpPK4o/JvF1adfOr8NT6QI7c3o="
              },
              "rust": {
                "name": "finance.tax.remove-vat-1.0.2-rust.fune",
                "size": 10770,
                "sha256": "1c63f3aeb0d5e295480872cd3f7f1e9ac1c82b25a00adfa87d890e3e13dd4e0f",
                "integrity": "sha256-8QMGchvb0pW/XFPHeY5QwQb3e4AIL3ETgwq1634k2Ac="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "finance.tax.vat-flat-rate": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-DEE7p8/ZE5OltMa4JJiSlvPtRLOr0JKhCItm0GMI/fw=",
          "summary": "UK VAT Flat Rate Scheme: VAT due on gross turnover at the sector's dated rate, limited cost rate and first-year 1% off.",
          "level": 2,
          "tags": [
            "vat",
            "flat-rate-scheme",
            "frs",
            "limited-cost-business",
            "tax",
            "uk",
            "gb",
            "small-business"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "dates.add-days": "^1.0.0",
            "dates.add-months": "^1.0.0",
            "money.apply-rate": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/flat-rates.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "finance.tax.vat-flat-rate-1.0.0.fune",
            "size": 37466,
            "sha256": "130d7218e0fa3eabb3d522d1d9aad759474a9875b55f362c48d04f35cf78e34e",
            "languages": {
              "typescript": {
                "name": "finance.tax.vat-flat-rate-1.0.0-typescript.fune",
                "size": 31167,
                "sha256": "56e7dfe9de493d8470c2bfeaf4c209d7276cd66164983256bb2a0d71a59edac4",
                "integrity": "sha256-OhLml8giguCxSY5bk9cYyxzZu6EPuBrerjDP5Iy2jjc="
              },
              "python": {
                "name": "finance.tax.vat-flat-rate-1.0.0-python.fune",
                "size": 31225,
                "sha256": "057521cf7af7e815c9f970280fb55cf46b2bb1bd5b5e19a935ce94182f298497",
                "integrity": "sha256-R40THLkVoyjHubn3RSbFg5sWpgBZ7EvBDr6i8kPTQ6g="
              },
              "rust": {
                "name": "finance.tax.vat-flat-rate-1.0.0-rust.fune",
                "size": 32184,
                "sha256": "4d1ec3eea13573f28a436963b754758c2dd91f0dee3b96f726548f4955515691",
                "integrity": "sha256-N98Tl8nW0S7WLvjNzSE7SKsoYnsG/6x6MSko39uFf2k="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-hrq0UWRnFeDnpHumiTquXURQMo/1OrvER7EicZhuaAU=",
          "summary": "UK VAT Flat Rate Scheme: VAT due on gross turnover at the sector's dated rate, limited cost rate and first-year 1% off.",
          "level": 2,
          "tags": [
            "vat",
            "flat-rate-scheme",
            "frs",
            "limited-cost-business",
            "tax",
            "uk",
            "gb",
            "small-business"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "dates.add-days": "^1.0.0",
            "dates.add-months": "^1.0.0",
            "money.apply-rate": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "data/flat-rates.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "finance.tax.vat-flat-rate-1.0.1.fune",
            "size": 39155,
            "sha256": "8732114a4b9325f0257d3e3481a85f460a71b16a8c4f8260f2fb63c2ae0a7819",
            "languages": {
              "typescript": {
                "name": "finance.tax.vat-flat-rate-1.0.1-typescript.fune",
                "size": 32856,
                "sha256": "9449f2cf9eb8b649e9fc0948ab6084fcc09a2363c92bc94da4e4dba53b111d76",
                "integrity": "sha256-9tlX6ALzwqRPI6HRQV+v0cQEoBCa88m9XGeBHy9qaNQ="
              },
              "python": {
                "name": "finance.tax.vat-flat-rate-1.0.1-python.fune",
                "size": 32914,
                "sha256": "c40eaac101702b08e93aaa288321b743190792d41f40747e6b84e3f8031a4581",
                "integrity": "sha256-ysBX7TH09tr8aytpjWdi3SRPC/99JbcLRckhwYVgZ6I="
              },
              "rust": {
                "name": "finance.tax.vat-flat-rate-1.0.1-rust.fune",
                "size": 33873,
                "sha256": "75f18a8bbfee0b753dcd2111960327bc063272b62821332bf9437b1ad63e588e",
                "integrity": "sha256-TXsjXbvDjbWYVxX07LXt4BWiHTRlOUjER+L+x3uO0H8="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "finance.tax.vat-rate": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-o1OWgmfuao08qx52AJlgNDcNdhfY6Gb7hj5Qf2QvEGw=",
          "summary": "Look up the VAT rate in force for a jurisdiction, category and date.",
          "level": 2,
          "tags": [
            "tax",
            "vat",
            "uk",
            "gb",
            "ie",
            "rates",
            "jurisdiction"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "data/vat-rules.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "finance.tax.vat-rate-1.0.0.fune",
            "size": 16342,
            "sha256": "2afc934d5f8c6cbf28454f4c06577403bf0881266c72939708733f6fcaff06d7",
            "languages": {
              "typescript": {
                "name": "finance.tax.vat-rate-1.0.0-typescript.fune",
                "size": 10726,
                "sha256": "e73c073ba2e7a8ab7261f7429b830ced56f0b255fd3cf26141f7071949c6a2c6",
                "integrity": "sha256-NNvY3OQ1OZlRFnQYqPZCyNCkee6oOeLjaZkaerqKgjk="
              },
              "python": {
                "name": "finance.tax.vat-rate-1.0.0-python.fune",
                "size": 10886,
                "sha256": "f33616964f08f00f2b3b01cb8da840946cd3873382079a814900e98fff9b6796",
                "integrity": "sha256-WQV8IozHj0lIvrD+Lzrcd5E8UYuN5/nYTo7Ew3f80TM="
              },
              "rust": {
                "name": "finance.tax.vat-rate-1.0.0-rust.fune",
                "size": 12290,
                "sha256": "6246c54aee0a638bdf0968eabed2f572228255b5582aaaf234ac2bb05f93410b",
                "integrity": "sha256-qWgQbjXMWYCrDAvXcmCCyXOtYShEbBtdvILGZ50kMPs="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.1.0": {
          "integrity": "sha256-b9x1XrQUR3Eeo3kq1ICTHYSOu2T+W/Nbelfo88tVNnQ=",
          "summary": "Look up the VAT rate in force for a jurisdiction, category and date.",
          "level": 2,
          "tags": [
            "tax",
            "vat",
            "uk",
            "gb",
            "ie",
            "rates",
            "jurisdiction"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "data/vat-rules.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "finance.tax.vat-rate-1.1.0.fune",
            "size": 25007,
            "sha256": "cfad5016ece720b95b4758996b7fd0171463baacc4589cb34a15d0fc0a6dc6f7",
            "languages": {
              "typescript": {
                "name": "finance.tax.vat-rate-1.1.0-typescript.fune",
                "size": 16771,
                "sha256": "25f2b235ebf96de3208f3f1a5f4640df2559688b7cabc0aa0d7f57cbfee7934a",
                "integrity": "sha256-eYcNKBWDvusIUqGwZkXqfimCT18Ge6AT4smtCR4eaec="
              },
              "python": {
                "name": "finance.tax.vat-rate-1.1.0-python.fune",
                "size": 17026,
                "sha256": "0ee84a537a8f6047ee9e67151198442dc94f3346891691333bc01c04724ae31b",
                "integrity": "sha256-ZiiSWRHzpRs6V/1v4KWyQtToZVo0BGJ7Fn/qG+yPk5s="
              },
              "rust": {
                "name": "finance.tax.vat-rate-1.1.0-rust.fune",
                "size": 18744,
                "sha256": "484e5e9256c60fb71055d3cade0e5ae1642f0fffa01363b3d582b09b1543528d",
                "integrity": "sha256-O+t5L3J+35rBtBI4Rww86w/g35OXSMeRE4zz1sld8ns="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.2.0": {
          "integrity": "sha256-tWV4Hnu84jCtlkFcXqO/DbNal1eLJh5lreiUh3by+ck=",
          "summary": "Look up the VAT rate in force for a jurisdiction, category and date.",
          "level": 2,
          "tags": [
            "tax",
            "vat",
            "uk",
            "gb",
            "ie",
            "rates",
            "jurisdiction"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "data/vat-rules.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "finance.tax.vat-rate-1.2.0.fune",
            "size": 26789,
            "sha256": "8a75d11902283c7ae2d991659e9066c925d6b740e862a57a5fdab0c185480422",
            "languages": {
              "typescript": {
                "name": "finance.tax.vat-rate-1.2.0-typescript.fune",
                "size": 18553,
                "sha256": "a00e2ca88d4c9c2becfb689624571b58819ebf670d97cd96a43cfd62624a33a3",
                "integrity": "sha256-/dzR3sKP9RN/hryoJBPn0IOCg96hSG2JK1FLAUwFe1E="
              },
              "python": {
                "name": "finance.tax.vat-rate-1.2.0-python.fune",
                "size": 18808,
                "sha256": "53e0857644d7bbdadedd6dffdedfccc351138c103cf7be9d3e2fcbfd49a760c1",
                "integrity": "sha256-PIYCHVm9VUaGrMtMtvskdYYbPbL4dGDTBXK50AYo4Hw="
              },
              "rust": {
                "name": "finance.tax.vat-rate-1.2.0-rust.fune",
                "size": 20526,
                "sha256": "14e1c4fcb7b5ce94d5639f915afec9ebcf587b79651e149aeb45c8c4922a4e61",
                "integrity": "sha256-YoFrkxcASY/388K1EHVosMtKXG7SHesifTAJy8Pzljk="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.2.1": {
          "integrity": "sha256-zaKqbTSD3CQaUcw8h7cWYLyeWGZJWuhMx4rcftxVDLs=",
          "summary": "Look up the VAT rate in force for a jurisdiction, category and date.",
          "level": 2,
          "tags": [
            "tax",
            "vat",
            "uk",
            "gb",
            "ie",
            "rates",
            "jurisdiction"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "data/vat-rules.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "finance.tax.vat-rate-1.2.1.fune",
            "size": 27651,
            "sha256": "0fd87ff2b692e357b5990b0cab9b2da733e03f5e6525da379f26c22d40886baf",
            "languages": {
              "typescript": {
                "name": "finance.tax.vat-rate-1.2.1-typescript.fune",
                "size": 19409,
                "sha256": "4e3847e1da81ded45aea09d750f6adf0543a94604d4c429eb2c3bf21487d2913",
                "integrity": "sha256-Fat9VomK1cimN5pR3yZPWcmtvde9JcbacilEpDHkn7U="
              },
              "python": {
                "name": "finance.tax.vat-rate-1.2.1-python.fune",
                "size": 19671,
                "sha256": "11e9cba166eb9f8152019b144b6a098aee5151018d8cace071ddf11709ed79c8",
                "integrity": "sha256-IJC1Cttam6IQiBZiBkPqWCRl6jqJsZ3Bf01RBVmfe9A="
              },
              "rust": {
                "name": "finance.tax.vat-rate-1.2.1-rust.fune",
                "size": 21381,
                "sha256": "4da0d81677fb86ae896e89964cb4c7c8dd9d4220982d8a7701f6967ae8f8d664",
                "integrity": "sha256-Kb8hnnRXt2vHpV9UdIz/xIjPCZx2VYK/3r9Y9uOxFWc="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.2.2": {
          "integrity": "sha256-MKgptOjMZoAzdQs42F6G5mPsvyROstpixWvONTEtjaE=",
          "summary": "Look up the VAT rate in force for a jurisdiction, category and date.",
          "level": 2,
          "tags": [
            "tax",
            "vat",
            "uk",
            "gb",
            "ie",
            "rates",
            "jurisdiction"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "NOTICE",
            "README.md",
            "data/vat-rules.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "finance.tax.vat-rate-1.2.2.fune",
            "size": 29231,
            "sha256": "e5a418fbea99dfe246f95af105ed05474df6247aa72affcae9b0c67dabfac0c8",
            "languages": {
              "typescript": {
                "name": "finance.tax.vat-rate-1.2.2-typescript.fune",
                "size": 20989,
                "sha256": "e54a74f13ea3c2b45141a467789b4e3b53d956698ffe59728596b3c800505263",
                "integrity": "sha256-fM47t7i3F7Y9ESraLYNpJYDa7h9U/g7NZMRj8Ai6cQs="
              },
              "python": {
                "name": "finance.tax.vat-rate-1.2.2-python.fune",
                "size": 21251,
                "sha256": "71f3ed8a7da26723279829384d6eb1e6beeafbe18c0523ed67889894c958f20d",
                "integrity": "sha256-YkKWIXajgdQABaXhA+pU96XAmipT72Sdj1gxEUEH6To="
              },
              "rust": {
                "name": "finance.tax.vat-rate-1.2.2-rust.fune",
                "size": 22961,
                "sha256": "ab99a29d5c29b0f561bb23f890539017ce837a22b98a5250f6ed3c3b46cd1a24",
                "integrity": "sha256-k401BIUJBadeVGu/poH7j+gaC+sVuO0pfUdGw8eZ8vQ="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "finance.tax.vat-return": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-Ku0e1W0ubqAt7yIY5NinhDNQU/4c6l9RlnsZXKXOJKc=",
          "summary": "UK nine-box VAT return totals for a period from categorised sales and purchases (VAT Notice 700/12).",
          "level": 3,
          "tags": [
            "vat",
            "vat-return",
            "nine-box",
            "mtd",
            "making-tax-digital",
            "hmrc",
            "tax",
            "uk",
            "gb",
            "reverse-charge"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.add": "^1.0.0",
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "dates.days-between": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "finance.tax.vat-return-1.0.0.fune",
            "size": 36416,
            "sha256": "b5f82636e46863b9486112427d0f5be955d767dbe5b873bd9cca52d86632e1bc",
            "languages": {
              "typescript": {
                "name": "finance.tax.vat-return-1.0.0-typescript.fune",
                "size": 26522,
                "sha256": "aca9d8412a1ab79e4445a494cd14821bc5945151e85650d6e830ff42c209dcd9",
                "integrity": "sha256-2pMBteXVmhbmPxl9KlJRqD1InoomljMInj6T9YzHa6E="
              },
              "python": {
                "name": "finance.tax.vat-return-1.0.0-python.fune",
                "size": 26348,
                "sha256": "149977288291a32d7fd01147e24bdc3e4d4a198fcb0ef40b1ab41fac1b282397",
                "integrity": "sha256-24hZnS1Kj3oXePxlpkSnZEf6bF6mExLqeuzlrEi+Vn8="
              },
              "rust": {
                "name": "finance.tax.vat-return-1.0.0-rust.fune",
                "size": 28372,
                "sha256": "c62d951ea138bb32cd300755564b222935abc3f8cf9d827480cc6ce708f9cc23",
                "integrity": "sha256-EUI60ayWytr5/KmfomvnROhDzu4ex4lEb0Llqd3sEAg="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-30jFoBl78GFDl1KInEx5kH07+II2/rkLGSpp5YqKoIQ=",
          "summary": "UK nine-box VAT return totals for a period from categorised sales and purchases (VAT Notice 700/12).",
          "level": 3,
          "tags": [
            "vat",
            "vat-return",
            "nine-box",
            "mtd",
            "making-tax-digital",
            "hmrc",
            "tax",
            "uk",
            "gb",
            "reverse-charge"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.add": "^1.0.0",
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "dates.days-between": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "finance.tax.vat-return-1.0.1.fune",
            "size": 37576,
            "sha256": "81f3e3501c2945d9de2e7f02bbad017010b8b7bccd8e0ef52a5423d4419a8dcd",
            "languages": {
              "typescript": {
                "name": "finance.tax.vat-return-1.0.1-typescript.fune",
                "size": 27682,
                "sha256": "34390823a46210312071a5c76ddb4fd54728e2998b16d8add7631409adad4824",
                "integrity": "sha256-YgK7C/hWlkpy8/0Ajw0Al0iYe0USXeTPspjvt+5dGTU="
              },
              "python": {
                "name": "finance.tax.vat-return-1.0.1-python.fune",
                "size": 27508,
                "sha256": "83564f5261f4f2e83fcd09fbed618b076fadef60d296466cc2d5a004e70a26d8",
                "integrity": "sha256-UFqT3hAwoRzoHphSYVyXelowW6NPjxPHeEHWjFgmNmc="
              },
              "rust": {
                "name": "finance.tax.vat-return-1.0.1-rust.fune",
                "size": 29532,
                "sha256": "9aee6a31a83cd1dc8e87081e5a7dbff5350c5843a0253e738e5efa85ef043966",
                "integrity": "sha256-rWnCc9YruYexptvTeTD4PgI0deJYdr0+G39pe8kA7ws="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "finance.uk-bank-rate": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-8IofMIbtKOUFED+zLSRO9RFHqtF9fRb/jFTXLEKX1dE=",
          "summary": "Bank of England Bank Rate (base rate) in force on a date, from the Bank's official history since 2001.",
          "level": 2,
          "tags": [
            "bank-rate",
            "base-rate",
            "interest-rate",
            "bank-of-england",
            "boe",
            "official-rate",
            "uk",
            "gb"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/bank-rate.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "finance.uk-bank-rate-1.0.0.fune",
            "size": 18299,
            "sha256": "ba6aaaa0cef20deda10b06d09133b399d8f136790bb604eb180109f96f4363be",
            "languages": {
              "typescript": {
                "name": "finance.uk-bank-rate-1.0.0-typescript.fune",
                "size": 15187,
                "sha256": "de66489c7823753b073aeea32ddc852935f6c3f940e2be2aea0508d404f77041",
                "integrity": "sha256-IGxPMPUNAdt5p9NIh9dSyDQzISih4dj9KpM6YASNQvI="
              },
              "python": {
                "name": "finance.uk-bank-rate-1.0.0-python.fune",
                "size": 15142,
                "sha256": "a2f5f0eecbf5adfeee3e8f91a39e84065aa8fdd99b962d18fc13f3975654b006",
                "integrity": "sha256-wsEWgizeYJWRbmjYNh1G84IOZph2qpNS4M+j85Fmd6Q="
              },
              "rust": {
                "name": "finance.uk-bank-rate-1.0.0-rust.fune",
                "size": 15738,
                "sha256": "4892aa68978991eb9351912353f6d341eccd7beca36deef1245f0d67ba271be1",
                "integrity": "sha256-vsc5iUYueJBF8wVEHxpzEe4uC83QAtfumShotToGqq8="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-YTmeZOn1uILt9eHr+6eJvwafGtqGKRKcv0ar2QOBXCE=",
          "summary": "Bank of England Bank Rate (base rate) in force on a date, from the Bank's official history since 2001.",
          "level": 2,
          "tags": [
            "bank-rate",
            "base-rate",
            "interest-rate",
            "bank-of-england",
            "boe",
            "official-rate",
            "uk",
            "gb"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "data/bank-rate.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "finance.uk-bank-rate-1.0.1.fune",
            "size": 19031,
            "sha256": "4b45acdee1dd9262e18c14d1cc635cc6cd8ae0e61583ea93b4e5adba0f9fdeac",
            "languages": {
              "typescript": {
                "name": "finance.uk-bank-rate-1.0.1-typescript.fune",
                "size": 15919,
                "sha256": "edef08de33750aa0143a8a79bbd6263644ecfe76da3637d70c51ddd06e5e4488",
                "integrity": "sha256-4kH7FI7f9y94RP45UpkniAU0FZHSeW+CGo9xpBpANDc="
              },
              "python": {
                "name": "finance.uk-bank-rate-1.0.1-python.fune",
                "size": 15874,
                "sha256": "cbfb2f6c3002bdfd75bb412289257691e3cca2eaacb131761a97904b243cf48d",
                "integrity": "sha256-C6y5/us3Z0ONltq9mU6MjS4p/i+TMRjLyuEhbHUvkr0="
              },
              "rust": {
                "name": "finance.uk-bank-rate-1.0.1-rust.fune",
                "size": 16470,
                "sha256": "998710e9883c938cfdb6557310d0f6478c0a111dbb11fdb2ce1bb95238e24a74",
                "integrity": "sha256-n0tjUE2R8Ysc3BgTCH6AZqej/mGxh/t640Q+QSmrQps="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "fleet.company-car-bik": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-ymjysOIMOAc0peClN6nWfntDpuHGjx09LESS0sow1f8=",
          "summary": "UK company car benefit in kind: appropriate percentage by CO2 and electric range, car and fuel benefit for a tax year.",
          "level": 2,
          "tags": [
            "company-car",
            "bik",
            "benefit-in-kind",
            "p11d",
            "car-benefit",
            "fuel-benefit",
            "hmrc",
            "gb"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.add": "^1.0.0",
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "dates.uk-tax-year": "^1.0.0",
            "dates.days-between": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/bik-bands.json",
            "data/bik-limits.json",
            "data/fuel-multipliers.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "fleet.company-car-bik-1.0.0.fune",
            "size": 77201,
            "sha256": "f46eed0571d51a4cb6c090d3e55436d3bac3f446f14f74bc68b9484a5f01a977",
            "languages": {
              "typescript": {
                "name": "fleet.company-car-bik-1.0.0-typescript.fune",
                "size": 59342,
                "sha256": "23f644c5dddb9cce4b2534518ee5d4bf736d0624fb973bdc16531a78e04fef64",
                "integrity": "sha256-RL9K93X7293CxmFUqpeF1NCHZEsZWmXY1CMcUBxdswg="
              },
              "python": {
                "name": "fleet.company-car-bik-1.0.0-python.fune",
                "size": 59709,
                "sha256": "de5340ebc3fbdde899e4090d6afa9997b23b74e2c3621a1e7168d723448a5201",
                "integrity": "sha256-y4HcFO4OCfJDfj9kL1XASorNKEFXPMehi7bq6rvlrx4="
              },
              "rust": {
                "name": "fleet.company-car-bik-1.0.0-rust.fune",
                "size": 62446,
                "sha256": "2e848756edc594c42d7726855c512218b8a33d94629a02e6b682e2a7976df761",
                "integrity": "sha256-tr4I4dlSezk2VkDFAS6twxiIhucW0KqXyt0VGvDkha0="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-uW4baGbU9d3cZ1F1w3hhBHKV1lgIFup5U20WlNLIMd0=",
          "summary": "UK company car benefit in kind: appropriate percentage by CO2 and electric range, car and fuel benefit for a tax year.",
          "level": 2,
          "tags": [
            "company-car",
            "bik",
            "benefit-in-kind",
            "p11d",
            "car-benefit",
            "fuel-benefit",
            "hmrc",
            "gb"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.add": "^1.0.0",
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "dates.uk-tax-year": "^1.0.0",
            "dates.days-between": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/bik-bands.json",
            "data/bik-limits.json",
            "data/fuel-multipliers.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "fleet.company-car-bik-1.0.1.fune",
            "size": 78789,
            "sha256": "8934c56de97cc2134be27c810fb897e1fbe8ddbe2381fee31af7ddb9f7d5caf6",
            "languages": {
              "typescript": {
                "name": "fleet.company-car-bik-1.0.1-typescript.fune",
                "size": 60922,
                "sha256": "7e41bd7671c946f134b7d62743b7146f66b4a033d0e92ef8a958712fea14a16c",
                "integrity": "sha256-SPYTF2Y2JnFyKkW1z509UZ8p/MOrQx9VMSEDqzoFAmk="
              },
              "python": {
                "name": "fleet.company-car-bik-1.0.1-python.fune",
                "size": 61297,
                "sha256": "7b6b361c8eed3245afd07a601c30edd4ba05a1afaba170992eecafd1b0e860d6",
                "integrity": "sha256-8tJbt7lXL2w4tW+G+h4NYOAA3weuQIWw1sD9fnOvZL4="
              },
              "rust": {
                "name": "fleet.company-car-bik-1.0.1-rust.fune",
                "size": 64026,
                "sha256": "2783f991f878224768de121516a30e14dada4279d2c6c3ff29086dbb4d83fcc3",
                "integrity": "sha256-ONRhjpsWC+XUhQ38DjODZaTTFJ8d3Hckv+TBODDE/VE="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.2": {
          "integrity": "sha256-5YCC9pwYWkkRZyj9TKSuujAxCMu8OVBQjuYW9XSSP2c=",
          "summary": "UK company car benefit in kind: appropriate percentage by CO2 and electric range, car and fuel benefit for a tax year.",
          "level": 2,
          "tags": [
            "company-car",
            "bik",
            "benefit-in-kind",
            "p11d",
            "car-benefit",
            "fuel-benefit",
            "hmrc",
            "gb"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.add": "^1.0.0",
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "dates.uk-tax-year": "^1.0.0",
            "dates.days-between": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "data/bik-bands.json",
            "data/bik-limits.json",
            "data/fuel-multipliers.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "fleet.company-car-bik-1.0.2.fune",
            "size": 80480,
            "sha256": "7e493f52d22a4498ea6cd4387b67b820b51da25c702c6184ec830b306bda0ff1",
            "languages": {
              "typescript": {
                "name": "fleet.company-car-bik-1.0.2-typescript.fune",
                "size": 62613,
                "sha256": "3515e26ffc365f0bc6195b05ed2e98a712b250712242fd8bb0acd16066e22717",
                "integrity": "sha256-69kKDl3ytfP21ikFGs6b5KQMd6lYHo718BaJLrCS1x4="
              },
              "python": {
                "name": "fleet.company-car-bik-1.0.2-python.fune",
                "size": 62988,
                "sha256": "cf5242d1a99f484cfdab1bcd3e99fa3dde3d0c2965704fb7d039b96836484894",
                "integrity": "sha256-v63PEU0DLpiindkc0UoH7AZfbBxrCLmvJNB1lxUel5c="
              },
              "rust": {
                "name": "fleet.company-car-bik-1.0.2-rust.fune",
                "size": 65717,
                "sha256": "d3244063e7e8e6ace5cad878c1c41a9e815e1bc1f63fdb11f68cd99cd8ea7f66",
                "integrity": "sha256-vPaudLExseCqjiNQjjmhV4BvMZDoLTKTsTEK7Xc9WhA="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "fleet.cost-per-mile": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-l+OYEcvvRw2BgmuKMF9FjTx1PbrxqXJ095Ygi9paHAs=",
          "summary": "Whole-life cost per mile of a vehicle, in tenths of a penny, from depreciation, fuel, maintenance, insurance and tax.",
          "level": 1,
          "tags": [
            "cost-per-mile",
            "pence-per-mile",
            "whole-life-cost",
            "tco",
            "fleet",
            "running-costs",
            "vehicle"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.sum": "^1.0.0",
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "fleet.cost-per-mile-1.0.0.fune",
            "size": 17753,
            "sha256": "eac59b91ed735bbe4b2d8f38c349e2f4b840cd26eeecb644a17f65ca12d6f05c",
            "languages": {
              "typescript": {
                "name": "fleet.cost-per-mile-1.0.0-typescript.fune",
                "size": 13126,
                "sha256": "dca088aa98126c46ea14f97cfaeeca66c5aebb73f8b521791b3d8f77497f810f",
                "integrity": "sha256-2qeHGncU9kEZkTQXByRnGHfSv8mz1iiVVBuH1h+UsJc="
              },
              "python": {
                "name": "fleet.cost-per-mile-1.0.0-python.fune",
                "size": 13133,
                "sha256": "6154ddfe2e0c2871a8726bc2be5d68c2fdc6f04187138bc02f0550ad7da3977a",
                "integrity": "sha256-EWETwm82ww3V3iJCVl99FbsvFywwMxbxIHREO6fbYj8="
              },
              "rust": {
                "name": "fleet.cost-per-mile-1.0.0-rust.fune",
                "size": 14434,
                "sha256": "19f49a2d97f0845e5c84ec264b8a8f42221e55a680f6e2ffcead28563e72fda4",
                "integrity": "sha256-epoKxb6cDrBS3MLxvsldSs6yQAiGx7+SSzp60XuoBeA="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "fleet.drivers-hours": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-Obx2/NHY+namVpCGXcOVbWpnDSorgdjutwaIaO41Xdk=",
          "summary": "Check a driver's activities against GB/EU drivers' hours: breaks after 4.5h, daily, weekly and fortnightly driving.",
          "level": 2,
          "tags": [
            "drivers-hours",
            "tachograph",
            "hgv",
            "driving-time",
            "breaks",
            "eu-561",
            "compliance",
            "fleet"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0",
            "dates.day-of-week": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/limits.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "fleet.drivers-hours-1.0.0.fune",
            "size": 51848,
            "sha256": "82ff618312316e63aa5fa7c001f3d8bc194e7469a3fbad61360529e59e1ec7e0",
            "languages": {
              "typescript": {
                "name": "fleet.drivers-hours-1.0.0-typescript.fune",
                "size": 29685,
                "sha256": "c8ccf443c3830099cf6e9846357696932fedbbc74f793ac36784f9de358b0b3d",
                "integrity": "sha256-4s2T7Tx61VeuO5FzVydmIAmLsoyFLoYQkDYfHU55yOQ="
              },
              "python": {
                "name": "fleet.drivers-hours-1.0.0-python.fune",
                "size": 30303,
                "sha256": "4b2426990bab017c9ad99b55807da52493abf6ada1062efc8c73406a5de94c4a",
                "integrity": "sha256-LBKP3B7uIu8aMYiUXp88gZAB8mCH59DzHcd+hKBI3g0="
              },
              "rust": {
                "name": "fleet.drivers-hours-1.0.0-rust.fune",
                "size": 33848,
                "sha256": "b46227db0b74a99477091bc1836034763fa85a974809074c482c2a2bb62e0dff",
                "integrity": "sha256-bPAei+54edYcAP76ykfr6fjsbfvej0ZDDT6CHC0EPds="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-45hDZMDuz0XOaRS+4VNHwSiPuR9/bQ/XYz9SSiLP6HE=",
          "summary": "Check a driver's activities against GB/EU drivers' hours: breaks after 4.5h, daily, weekly and fortnightly driving.",
          "level": 2,
          "tags": [
            "drivers-hours",
            "tachograph",
            "hgv",
            "driving-time",
            "breaks",
            "eu-561",
            "compliance",
            "fleet"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0",
            "dates.day-of-week": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/limits.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "fleet.drivers-hours-1.0.1.fune",
            "size": 52953,
            "sha256": "382070925b09f173e31ff7c9f0e3b74a49f5ae30a02fe2b70b5db2234858199d",
            "languages": {
              "typescript": {
                "name": "fleet.drivers-hours-1.0.1-typescript.fune",
                "size": 30776,
                "sha256": "292a2acd0032d703661007917066bab0c518cff64ec09cf9fbe75c60fafae8c6",
                "integrity": "sha256-LpiQgfLLN0+e8wu/vNNSSyHx5jvTSP2ovLWWx0IAlcw="
              },
              "python": {
                "name": "fleet.drivers-hours-1.0.1-python.fune",
                "size": 31408,
                "sha256": "e1e2bce8d1c03c5a76d2f1133e0afff419b8009685caae7c0b393e2ace6b9f16",
                "integrity": "sha256-YGZUJIV9vTienC6uTjBQPvUtle6Iou7NuiDIIkDheDw="
              },
              "rust": {
                "name": "fleet.drivers-hours-1.0.1-rust.fune",
                "size": 34939,
                "sha256": "af2c5d6f2194e8751f301ab614804d06c5515876ff4a69a9ee9352719fcdc856",
                "integrity": "sha256-gWKBymiSzDROqHcGF9515UotFMnGr8rORPdB4s45n8s="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.2": {
          "integrity": "sha256-LHSHU322j3y0+vEpKj0q1If7I+Cdv4qEIqlOYoUz7GM=",
          "summary": "Check a driver's activities against GB/EU drivers' hours: breaks after 4.5h, daily, weekly and fortnightly driving.",
          "level": 2,
          "tags": [
            "drivers-hours",
            "tachograph",
            "hgv",
            "driving-time",
            "breaks",
            "eu-561",
            "compliance",
            "fleet"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0",
            "dates.day-of-week": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "data/limits.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "fleet.drivers-hours-1.0.2.fune",
            "size": 54669,
            "sha256": "4e3059f6a0676d4a40c653432cf048beb2de571f37281e05606dd7975e093ab8",
            "languages": {
              "typescript": {
                "name": "fleet.drivers-hours-1.0.2-typescript.fune",
                "size": 32492,
                "sha256": "cddec3090aed077541e885ef1c3825e1cd55d89f07ebce79f6592909cdc83755",
                "integrity": "sha256-HboJdPjhIXTJjNzG4SshYxPlm7UaIGlKETKe5RFoFh0="
              },
              "python": {
                "name": "fleet.drivers-hours-1.0.2-python.fune",
                "size": 33124,
                "sha256": "27e30d5b6d02d714afc9a822184e775eb214bfbb66dc2c3e2a3a71ccf194c3e9",
                "integrity": "sha256-tx2ANCPC3hKop5fS/RS09XJkwYt59B+n1+i4C5JOcFc="
              },
              "rust": {
                "name": "fleet.drivers-hours-1.0.2-rust.fune",
                "size": 36655,
                "sha256": "892ce2274e5b9659c65ee0e82ab030636ac3ba4306074a26f0d66f6c77ec9541",
                "integrity": "sha256-TwD6vOa5KP8CWdJN+FYiFed7DNedbHcbiU7k0muPzbA="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "fleet.emissions": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-SMXBb3izZcS6qX5UYkRefDInwRaM1emddcdV4lCqk6s=",
          "summary": "Vehicle greenhouse gas emissions (grams CO2e) from fuel used or distance, using UK government DESNZ conversion factors.",
          "level": 1,
          "tags": [
            "co2",
            "co2e",
            "carbon",
            "emissions",
            "ghg",
            "desnz",
            "secr",
            "fleet",
            "conversion-factors"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "data/ghg-factors.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "fleet.emissions-1.0.0.fune",
            "size": 142292,
            "sha256": "9ae9748536da133a49c7bc0f5de74e995af896df2b19f9b979797556986f3c36",
            "languages": {
              "typescript": {
                "name": "fleet.emissions-1.0.0-typescript.fune",
                "size": 134785,
                "sha256": "863736d2ae0f1cdc9d45995678217c87ade5fe559b1f7d2f353383f91a4a6a2d",
                "integrity": "sha256-aomlF2x/7zLD/8syNhLjmq30yzN8mEEo9WixocF+cwE="
              },
              "python": {
                "name": "fleet.emissions-1.0.0-python.fune",
                "size": 134765,
                "sha256": "36e2c999c594f2cc1e65c500ae8c0b6e1200d909228705ce15af1e7917c3ee83",
                "integrity": "sha256-RlWwTfL3xP15VkRYKMI/7HWztd/4/rvZUYG/WFcFV9w="
              },
              "rust": {
                "name": "fleet.emissions-1.0.0-rust.fune",
                "size": 136468,
                "sha256": "631aab9f924a54b9a65a21da03ef4d311c43e78a891a314ca7bc8310ea59ae57",
                "integrity": "sha256-B1AwJarArOOu7zFJ0aPWYYdaiA8huYG/lcjp90zS8Dk="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-PZXd3PBXeAPqvQ+NL8F8pTMaaUWDa09pCeALt6EtEsE=",
          "summary": "Vehicle greenhouse gas emissions (grams CO2e) from fuel used or distance, using UK government DESNZ conversion factors.",
          "level": 1,
          "tags": [
            "co2",
            "co2e",
            "carbon",
            "emissions",
            "ghg",
            "desnz",
            "secr",
            "fleet",
            "conversion-factors"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "NOTICE",
            "README.md",
            "data/ghg-factors.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "fleet.emissions-1.0.1.fune",
            "size": 142757,
            "sha256": "889b6473407bbb10b8b415ea8a5d9fa9ddc9d09a15beacbd289c885db32cce5c",
            "languages": {
              "typescript": {
                "name": "fleet.emissions-1.0.1-typescript.fune",
                "size": 135250,
                "sha256": "2f0ee69eaaed66b35d3162fab5dbdaa4e0c656061a83645cdfa151ee92bda2b6",
                "integrity": "sha256-5raH8W4gmCreCMwYovmpB1r6eQhpFJkh5Tcoi+k31BQ="
              },
              "python": {
                "name": "fleet.emissions-1.0.1-python.fune",
                "size": 135230,
                "sha256": "c5a2ba9c0d815e5ad33cbb7bda1c8ef355bb721db126008f7e97c511dc7b99fb",
                "integrity": "sha256-w1XKLuznV1cTRQtBQQZM8V8QEY4C60Q16gUuCq/DaIo="
              },
              "rust": {
                "name": "fleet.emissions-1.0.1-rust.fune",
                "size": 136933,
                "sha256": "c3896409dcc4affebc9e3dbb5ed9e270af2bd4fc3acfb0d5672f7f6c68f04439",
                "integrity": "sha256-mCXSjjUwPlAb2gFfQr/qYsoo5sH28DWa1tmm6FmnG50="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "fleet.ev-charging-cost": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-hNg9vP7ZRNN2BBujD7E93ermy7UvNLmdAuDAH5Rpo6M=",
          "summary": "Cost of an electric vehicle charge from the energy added, charger efficiency and power, and time-of-use tariff windows.",
          "level": 1,
          "tags": [
            "ev",
            "electric-vehicle",
            "charging",
            "kwh",
            "tariff",
            "off-peak",
            "time-of-use",
            "cost"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "math.round-div-big": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "fleet.ev-charging-cost-1.0.0.fune",
            "size": 25531,
            "sha256": "9fc287a33d2b3f706f8c094b4b8abdd0ffd4c82a126327139af47506725c396c",
            "languages": {
              "typescript": {
                "name": "fleet.ev-charging-cost-1.0.0-typescript.fune",
                "size": 16789,
                "sha256": "1e2e3b79cacfc12df9ab4ec2ad0fee7f4f473b102dc9fab5108e1a603fe9ae37",
                "integrity": "sha256-U8WUMs7CctAToajIuDzcKt5qeqmntwhTY/8qikMBO8k="
              },
              "python": {
                "name": "fleet.ev-charging-cost-1.0.0-python.fune",
                "size": 16610,
                "sha256": "4833aaee65243a06d83ec0526631148b20a754b7a8b8f5b1d257e0addf9ad247",
                "integrity": "sha256-Y+3Sh88WvYdOUerwBeQ8oCz1JyZgp1d8LiuaYc99g20="
              },
              "rust": {
                "name": "fleet.ev-charging-cost-1.0.0-rust.fune",
                "size": 18608,
                "sha256": "48c8b958f43f3eb5fbe7809e40ecd06e29768e8ab29bcac37c7d30f10dfed59f",
                "integrity": "sha256-6qJNGgzQc3/8SRBJzVybx9ZMXfalUXC/kpgGxU0RjDg="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "fleet.fuel-cost": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-mo0T1J/xNwuMdHKqK4n7h4xeYPi2MXQyxpn0YvZlopg=",
          "summary": "Fuel cost of a trip from distance, fuel economy (UK or US mpg, or L/100km) and price per litre, exactly.",
          "level": 1,
          "tags": [
            "fuel",
            "fuel-cost",
            "trip-cost",
            "mpg",
            "litres-per-100km",
            "petrol",
            "diesel",
            "mileage"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "units.convert": "^1.0.0",
            "math.round-div": "^1.0.0",
            "math.big-integer": "^1.0.0",
            "math.round-div-big": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "fleet.fuel-cost-1.0.0.fune",
            "size": 22193,
            "sha256": "5022019ff35116bcc4305837d21b577312e7a9eb682e807d301f46e7f00b5dc3",
            "languages": {
              "typescript": {
                "name": "fleet.fuel-cost-1.0.0-typescript.fune",
                "size": 13700,
                "sha256": "22c723a4acc0e8adba879eda3b327e639b0778eda14b3174b9ca9d0b977c7b22",
                "integrity": "sha256-i9JerYxmkOyBUwDoXmu40q37zB5dmslgq5aKoJTLGG8="
              },
              "python": {
                "name": "fleet.fuel-cost-1.0.0-python.fune",
                "size": 13427,
                "sha256": "0edbc6275aba30343c1e0b029e4c018b7640a0e0ebb349c5c99d035da77cd1f7",
                "integrity": "sha256-FhQi5dZDo42Uq7bo6E/2thc3L8SUM1k5r/293AxL5vI="
              },
              "rust": {
                "name": "fleet.fuel-cost-1.0.0-rust.fune",
                "size": 15062,
                "sha256": "66bab4a0ae8ba63b2b62ad7b2480a71e7e0863e2a711d89b0fb4f999b7e10544",
                "integrity": "sha256-3Ol1gbxvCWfxsIqjIYTno3WiV40RbtzmBoqu/ayUuiM="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "fleet.mileage-allowance": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-NS7VfI5OsiKqQ0qz3PykhAmdvGEPN7GgYn7BYY8Z58E=",
          "summary": "HMRC approved mileage allowance payments for an employee's own vehicle: tax-free amount, taxable excess or relief.",
          "level": 2,
          "tags": [
            "mileage",
            "amap",
            "mileage-allowance-relief",
            "hmrc",
            "business-miles",
            "expenses",
            "45p",
            "gb"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.add": "^1.0.0",
            "money.amount": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/amap-rates.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "fleet.mileage-allowance-1.0.0.fune",
            "size": 44551,
            "sha256": "9cedb0ff9b16c96bd6dc5f06301b53a3da95e2d12f9e493b4b80f2718eda80e2",
            "languages": {
              "typescript": {
                "name": "fleet.mileage-allowance-1.0.0-typescript.fune",
                "size": 32612,
                "sha256": "5f322bc9e2c3d82712e85ec53ef8db15b73d1fda8d1e106333e46af3ea36d0de",
                "integrity": "sha256-U85frQVXyblr5gcC4G69tpH5DSmAg+OHuERoyOSl59s="
              },
              "python": {
                "name": "fleet.mileage-allowance-1.0.0-python.fune",
                "size": 32743,
                "sha256": "9321cf700142fb5e17daa3a3e49be26bcc460d29bba0e4720d5b8e55429eb059",
                "integrity": "sha256-+jU+raHfchgHP/aWehQ2HvzGhZwIgTlZuxRLEO0CLfM="
              },
              "rust": {
                "name": "fleet.mileage-allowance-1.0.0-rust.fune",
                "size": 34716,
                "sha256": "7b3838c9da1599ba3071747c33a05e74162330752bb45b319b449619076bcf36",
                "integrity": "sha256-aZIh2GKfozs31LKKhOG0CX16yos0tf5cY4WHdKr/aEg="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-GkDHcY3WGMY4c+W/wniAU2434dFZtCt2sKVCIUD7mw8=",
          "summary": "HMRC approved mileage allowance payments for an employee's own vehicle: tax-free amount, taxable excess or relief.",
          "level": 2,
          "tags": [
            "mileage",
            "amap",
            "mileage-allowance-relief",
            "hmrc",
            "business-miles",
            "expenses",
            "45p",
            "gb"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.add": "^1.0.0",
            "money.amount": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/amap-rates.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "fleet.mileage-allowance-1.0.1.fune",
            "size": 45244,
            "sha256": "c6c7fdc872eeba36d5f2616015e93cd26571b1f9413cbd7ff426af8df0969a64",
            "languages": {
              "typescript": {
                "name": "fleet.mileage-allowance-1.0.1-typescript.fune",
                "size": 33297,
                "sha256": "0f97d31079d480af4d630305270c4d207c6bf8759ffd228dd9dc20bd140a1254",
                "integrity": "sha256-zXPQyVWErTFppk/UtD8uii9kcru5b5VetrdQRLSWH6s="
              },
              "python": {
                "name": "fleet.mileage-allowance-1.0.1-python.fune",
                "size": 33436,
                "sha256": "0523e1e37c382ed17a158259a719ef110e83f7ef2cbc549876604ea56d498a43",
                "integrity": "sha256-mOiH0GDXC2+uUndhvCp1q5bOZzSAfFcAvxk0Ub2lh3E="
              },
              "rust": {
                "name": "fleet.mileage-allowance-1.0.1-rust.fune",
                "size": 35401,
                "sha256": "a6fcc4617965b470e09e390d14cfd60862abb30279d67458f6fd754193467a62",
                "integrity": "sha256-Y/wSmvJBzT4TvYYltKmFo/N+Xkl6c7VbFlHmJ9aXkWY="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.2": {
          "integrity": "sha256-LZM/0RW1XzliCeg103WS5ch1OSxKmdCFk/t10e+qunk=",
          "summary": "HMRC approved mileage allowance payments for an employee's own vehicle: tax-free amount, taxable excess or relief.",
          "level": 2,
          "tags": [
            "mileage",
            "amap",
            "mileage-allowance-relief",
            "hmrc",
            "business-miles",
            "expenses",
            "45p",
            "gb"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.add": "^1.0.0",
            "money.amount": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "data/amap-rates.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "fleet.mileage-allowance-1.0.2.fune",
            "size": 45821,
            "sha256": "7c1c278eb23c990fe4d2ec7e7a9ad6310c79813c7d1da2ddad378f54b24ac2dd",
            "languages": {
              "typescript": {
                "name": "fleet.mileage-allowance-1.0.2-typescript.fune",
                "size": 33874,
                "sha256": "5b2a76d535bbb8ef36a2091e48c314990969c47134f255e01cdafa497acfb063",
                "integrity": "sha256-0zp00hmg60gh1TKaQYlUdMMNkjDsatMYOGdngcH451Y="
              },
              "python": {
                "name": "fleet.mileage-allowance-1.0.2-python.fune",
                "size": 34013,
                "sha256": "061d24452ffaa51483bc38087ab1a0897d4b06fcd493128bb52469d1a9a398bd",
                "integrity": "sha256-LHxNr27E20UNf6zRuPaKP0JHsESGD7GGRPO7lq587eI="
              },
              "rust": {
                "name": "fleet.mileage-allowance-1.0.2-rust.fune",
                "size": 35978,
                "sha256": "70e812acad70be03aa9dc3da17181133185d24e0f92a9240c7a0e693a0c1093d",
                "integrity": "sha256-e3tsdiAjpY1vOdyDC41J3oLbfMHfvSTzz6vwqxgzooA="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "fleet.service-due": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-AVHsb0AHv9/i3bdP4JaBEhWuDfurXfV6vnkidzFBcMg=",
          "summary": "Next vehicle service by months or miles, whichever comes first, projecting the mileage date, with an overdue flag.",
          "level": 1,
          "tags": [
            "service-due",
            "maintenance",
            "service-interval",
            "mileage",
            "fleet",
            "vehicle",
            "overdue",
            "reminder"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0",
            "math.round-div": "^1.0.0",
            "dates.add-months": "^1.0.0",
            "dates.days-between": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "fleet.service-due-1.0.0.fune",
            "size": 21991,
            "sha256": "121547871626eacd7a5f48e89ec365542c118d12124d29b4defe9360ad0a5566",
            "languages": {
              "typescript": {
                "name": "fleet.service-due-1.0.0-typescript.fune",
                "size": 14000,
                "sha256": "1cba5e3f08afcc9fd2a37e52993ef5cfacd25ad84b1c8302a37a23b8ca5b0da4",
                "integrity": "sha256-2LYNtEIUYfkTvt43emTTRT8MUlQ3W0gZHTWu4ehThxg="
              },
              "python": {
                "name": "fleet.service-due-1.0.0-python.fune",
                "size": 14159,
                "sha256": "a714dd2c00c936f251533deb600b4ce51727c3b01c101c7414daf73ee5a03bdb",
                "integrity": "sha256-N0RKhuStRBFgbEDExM9MrdrlpTnGdYc9vkMGDQMxX0Q="
              },
              "rust": {
                "name": "fleet.service-due-1.0.0-rust.fune",
                "size": 15594,
                "sha256": "ec835d087d48894f307fa6d2a1bd8bdc4afbe4cda1ba9258474fbf7230d19fc4",
                "integrity": "sha256-bg4XfEUq/QJq4MB96qubXbOmkFzOMT286LahqzAffB4="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "fleet.tachograph-rest": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-a7YY3vnRl1nScBvxwJpY3PtvyAVLR/ZhTUnfxZs/VUk=",
          "summary": "Check daily and weekly rest against GB/EU drivers' hours: 11h daily (9h reduced, 3+9 split), 45h weekly (24h reduced).",
          "level": 2,
          "tags": [
            "tachograph",
            "daily-rest",
            "weekly-rest",
            "drivers-hours",
            "hgv",
            "eu-561",
            "compliance",
            "fleet"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0",
            "fleet.drivers-hours": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/rest-limits.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "fleet.tachograph-rest-1.0.0.fune",
            "size": 48311,
            "sha256": "b7d68bfee5fe23e7320df4dd4cecfa051c1f33320d6ad24f44fc5ad963348769",
            "languages": {
              "typescript": {
                "name": "fleet.tachograph-rest-1.0.0-typescript.fune",
                "size": 29857,
                "sha256": "49030f424d05cd88a48a2af0eea9a6dd915fd03aafef44f723ffc203d2a41265",
                "integrity": "sha256-iv9rFwDpw21IXyCFFt3yzYO+qQpbfPPr18GDTDaTscw="
              },
              "python": {
                "name": "fleet.tachograph-rest-1.0.0-python.fune",
                "size": 29621,
                "sha256": "aa4ae0924de2a3abb628749a441c03b531fae9cfc8de18b90694a73618c84422",
                "integrity": "sha256-jRQzVabvPMtrvBxhFdFz0FezUsC6xOXYzO76hRRDaEE="
              },
              "rust": {
                "name": "fleet.tachograph-rest-1.0.0-rust.fune",
                "size": 32221,
                "sha256": "ff315fc2a650be5c172d6ef3a8eda3145ed2cd98b00a746d2073b80abaac6849",
                "integrity": "sha256-uxCbscT7QAqCM19T4pyP4SQz9wibVgC9apser8HZqYg="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-k3EhmrI2xzMDX5C7bTWwQOeV6Tqv0Izq1r7VH59Uc+U=",
          "summary": "Check daily and weekly rest against GB/EU drivers' hours: 11h daily (9h reduced, 3+9 split), 45h weekly (24h reduced).",
          "level": 2,
          "tags": [
            "tachograph",
            "daily-rest",
            "weekly-rest",
            "drivers-hours",
            "hgv",
            "eu-561",
            "compliance",
            "fleet"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0",
            "fleet.drivers-hours": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/rest-limits.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "fleet.tachograph-rest-1.0.1.fune",
            "size": 49264,
            "sha256": "02583a23e07d64e164b157cd17e1b450d5ecac28ecc7695202ba1bb5144cc86b",
            "languages": {
              "typescript": {
                "name": "fleet.tachograph-rest-1.0.1-typescript.fune",
                "size": 30796,
                "sha256": "cd9c0b68059e8145c18ec98a0a2370e6739ff42345bb397e1854b283bf3cdbc2",
                "integrity": "sha256-4QQn2LP0JvL3z8pMuwbowDnrk/u1Azw2mZc3U2+wL88="
              },
              "python": {
                "name": "fleet.tachograph-rest-1.0.1-python.fune",
                "size": 30574,
                "sha256": "4eaa195bfb9880be81f1f28c73e54aafd0ab711c22316f973de7895bee41ece9",
                "integrity": "sha256-41fdIfZ530Jf9m9kj6TCwKdru6IR0juO8gpbHsNb94s="
              },
              "rust": {
                "name": "fleet.tachograph-rest-1.0.1-rust.fune",
                "size": 33160,
                "sha256": "98a5685964c49ee47b49272f1706d841a10c5136b97b0edfa08f7300631babe1",
                "integrity": "sha256-+v0hDafvS/XafLAT1Hlv1TvYLmwxJmTagsOwLz2feyg="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.2": {
          "integrity": "sha256-hASY9Vdzhsuc5UYUO2AseMCwSliLhlrcApDxA5tglUY=",
          "summary": "Check daily and weekly rest against GB/EU drivers' hours: 11h daily (9h reduced, 3+9 split), 45h weekly (24h reduced).",
          "level": 2,
          "tags": [
            "tachograph",
            "daily-rest",
            "weekly-rest",
            "drivers-hours",
            "hgv",
            "eu-561",
            "compliance",
            "fleet"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0",
            "fleet.drivers-hours": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "data/rest-limits.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "fleet.tachograph-rest-1.0.2.fune",
            "size": 50956,
            "sha256": "19cdd744983e4308d0f5046caeb2179a4538315474774285c3a3eec012f54b99",
            "languages": {
              "typescript": {
                "name": "fleet.tachograph-rest-1.0.2-typescript.fune",
                "size": 32488,
                "sha256": "082640e7362d0223cf29d36259dee04fbb1b8fbd1385ca1d31774925f7277f2f",
                "integrity": "sha256-9tyOevGAq5Kqy3mpxF6i4EswUXlsLtFXhqDA71leSpE="
              },
              "python": {
                "name": "fleet.tachograph-rest-1.0.2-python.fune",
                "size": 32266,
                "sha256": "999260bfc6bbaf4e89685f30126cebc93a8a815e5e2cda9f88f56cc996e07f47",
                "integrity": "sha256-T0+MtFEGsCf0pWBOriPu6W+k0T2SglK7YynymT4m/+Q="
              },
              "rust": {
                "name": "fleet.tachograph-rest-1.0.2-rust.fune",
                "size": 34852,
                "sha256": "b1b8b0635baee819ee222563607d8acd816e3470a9744f26568fc3d9f956f25f",
                "integrity": "sha256-WaV/WBIpWzfqA1oOUXC8SV/8NjOVrxhrcMLjacTNgS8="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "fleet.vehicle-depreciation": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-mnA4zqU1SfWinbOi1Wq3Ew6LmgvQtGuYZa/hoboy9MY=",
          "summary": "A vehicle's current value from its cost, age and mileage, on retention curves the caller supplies, exactly.",
          "level": 2,
          "tags": [
            "depreciation",
            "vehicle-value",
            "residual-value",
            "used-car",
            "fleet",
            "mileage",
            "age",
            "valuation"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "math.big-integer": "^1.0.0",
            "math.round-div-big": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "fleet.vehicle-depreciation-1.0.0.fune",
            "size": 20117,
            "sha256": "b50858107abbf776025a8428d9a393149ba85037572410721642ac50a82a6752",
            "languages": {
              "typescript": {
                "name": "fleet.vehicle-depreciation-1.0.0-typescript.fune",
                "size": 13100,
                "sha256": "ec89f8791c16cc8518475849d86aa24b6b9f3aa167f6c3f23607bce0676b000e",
                "integrity": "sha256-6XAbG3SSf6xRfsA0Pgx4jdNjzGw60cJF1qGyOjuV3lo="
              },
              "python": {
                "name": "fleet.vehicle-depreciation-1.0.0-python.fune",
                "size": 12982,
                "sha256": "5c8b53ddd0b0960f83d6e654e0fea2344a27087f3f62535987f6e18c284a8588",
                "integrity": "sha256-crgAF7l362y9QlYAZMu2H46etqEGcmMblOUgRVB5JAc="
              },
              "rust": {
                "name": "fleet.vehicle-depreciation-1.0.0-rust.fune",
                "size": 14573,
                "sha256": "fcc6b8be8fe52a2fb24272ef820cf8813752fd6a9cfbbd98fa3c8785809c9486",
                "integrity": "sha256-estCC8x+lviWcFWTQVQ5vsbjUgmvwXj37thCGoH3184="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "form.character-count": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-giAJylUapEc3aMsEZIapTo9TbKzosfF1g0wskIkJb7s=",
          "summary": "The GOV.UK character count message for a text box: characters or words left or over a limit, with a threshold.",
          "level": 1,
          "tags": [
            "form",
            "character-count",
            "word-count",
            "textarea",
            "limit",
            "remaining",
            "maxlength",
            "govuk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "form.character-count-1.0.0.fune",
            "size": 23804,
            "sha256": "93f144d80817ef9293d4f4c9160ea5b7f788d1434f878b9fefeab57694eee108",
            "languages": {
              "typescript": {
                "name": "form.character-count-1.0.0-typescript.fune",
                "size": 17344,
                "sha256": "171e635c4c62248cd6e4cff54ff715f67ec7ea7ffc53c5c600e21d3569b457bd",
                "integrity": "sha256-h+KE+JvqJ1ACeG/0TXK96+L8ohDfv4R5XM4OpPkSq1w="
              },
              "python": {
                "name": "form.character-count-1.0.0-python.fune",
                "size": 17591,
                "sha256": "63220da4f6beacc7e9f314edc6444cda6dbbdd79bb589b26cd23b2b916ea0ac4",
                "integrity": "sha256-iQxaQZasF5pDidaOooUqjqWq+Bzzq4n3NQGXb00Ya10="
              },
              "rust": {
                "name": "form.character-count-1.0.0-rust.fune",
                "size": 18395,
                "sha256": "4d19e87c945d4c3585b0128308111902598dbb7a4ae208758d93fdd60f087f37",
                "integrity": "sha256-m9pGfk6SU5bSpInWj8aOWd0kPDJJNV6McLkZU2tCb9s="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-bVWA5XTA4RJKo/rFBQ2ipm6HiBqiPAFJu0r5r1A/ZrM=",
          "summary": "The GOV.UK character count message for a text box: characters or words left or over a limit, with a threshold.",
          "level": 1,
          "tags": [
            "form",
            "character-count",
            "word-count",
            "textarea",
            "limit",
            "remaining",
            "maxlength",
            "govuk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "NOTICE",
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "form.character-count-1.0.1.fune",
            "size": 25373,
            "sha256": "09734b67f0d2f813a074ca016c5da79fa9a3dd8e621c10f984d1144a87919df2",
            "languages": {
              "typescript": {
                "name": "form.character-count-1.0.1-typescript.fune",
                "size": 18913,
                "sha256": "fbe32bb29b89707378ac0c7e616372ff9bb0a35660357bc95a8e1e1253cf8fc6",
                "integrity": "sha256-Es6nm2mCVM6e2Y+dtgof/TFyt4Q9bIqRLJQAZWEgxps="
              },
              "python": {
                "name": "form.character-count-1.0.1-python.fune",
                "size": 19160,
                "sha256": "7c0aff3c301f7308c757be99729ac7a758c60a0f7de141f82ce134586c766e6c",
                "integrity": "sha256-FyKXtGcvlewKtAFuCv2U25Orx7u7Ej38w69Fujxg6Ew="
              },
              "rust": {
                "name": "form.character-count-1.0.1-rust.fune",
                "size": 19964,
                "sha256": "7c7db52b206b7ffa5f61a259324e57f78ee635e34a369c097023b304dc54fd42",
                "integrity": "sha256-aA9BsTXtcFg2UxO4eaGQX31S6f5UERaOB6OqFkrIC2A="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "form.date-parts": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-aclNwh6zkg6L40toIYAzmJHkl6qfS85KlEKaegjoxOg=",
          "summary": "Check a date typed into day, month and year boxes, with GOV.UK's error messages and the boxes to mark in error.",
          "level": 1,
          "tags": [
            "form",
            "date",
            "validation",
            "date-input",
            "date-of-birth",
            "day-month-year",
            "govuk",
            "error-message"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "form.date-parts-1.0.0.fune",
            "size": 46177,
            "sha256": "7f230eb3a77811cc7a49386345b5940ccd413e70aa365a65e67d2c221e01b958",
            "languages": {
              "typescript": {
                "name": "form.date-parts-1.0.0-typescript.fune",
                "size": 31769,
                "sha256": "ec0428d49a5f36c822255cb1b31fb1ceab34d4cdb3025b68148050754e03ea93",
                "integrity": "sha256-tpAfwMkT9jdzNmWDhOclx4tgbIfweSAbZU1z43HE98w="
              },
              "python": {
                "name": "form.date-parts-1.0.0-python.fune",
                "size": 31823,
                "sha256": "67c250d8a2fedca420b49bd7656f48e92e7ee2bf65783699e97dd3b24f010f04",
                "integrity": "sha256-ED6c1tpOIl8J+NHn6Gqmrm4PPr4vEAdjD0hELg+N4kE="
              },
              "rust": {
                "name": "form.date-parts-1.0.0-rust.fune",
                "size": 33801,
                "sha256": "f3c31265fdc4ca3556ce198926f8e3d381d6e915cb4c748f2b0e4a4d87e84661",
                "integrity": "sha256-lIz875n+5g/q0VvR7NCJLh0XqXT7cuBIuuJtChKWK3E="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-s3p7U5eooiHWiuBVR1tJlWjJDPUWp7/pK0YvF4FN+xY=",
          "summary": "Check a date typed into day, month and year boxes, with GOV.UK's error messages and the boxes to mark in error.",
          "level": 1,
          "tags": [
            "form",
            "date",
            "validation",
            "date-input",
            "date-of-birth",
            "day-month-year",
            "govuk",
            "error-message"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "form.date-parts-1.0.1.fune",
            "size": 47741,
            "sha256": "96374a928398e4115d021774526a6218dacc6bf9e774d30f79043c268f877024",
            "languages": {
              "typescript": {
                "name": "form.date-parts-1.0.1-typescript.fune",
                "size": 33333,
                "sha256": "09d10756579a1d61d86a2c7bbc529921485b73ca9f0896571f7db1f49e9935c2",
                "integrity": "sha256-FgBNbTOoScDmDY+a8YavJp84vxn3Bzi05WETUOTpi+g="
              },
              "python": {
                "name": "form.date-parts-1.0.1-python.fune",
                "size": 33387,
                "sha256": "916cba44a8a25f47294991e3ebccd3eba795c432b8475ec4fdec7fb243393d21",
                "integrity": "sha256-M9QG/lWyFodHywaYlZE8wc91nZ6Satpyr9iUEWkkq2k="
              },
              "rust": {
                "name": "form.date-parts-1.0.1-rust.fune",
                "size": 35365,
                "sha256": "05c7ca1d15dc42de4910b33106ec4ef64bf4e0aa48088be5f548e3da9726fd9d",
                "integrity": "sha256-HFO0qB330u/Rax6Jygkell0RNIoaU5aoJP4a8Yzb+FE="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "form.state": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-4iwVxqLIHJ91vACnQMzcZgEb5/IVXok5FkIlhOL65j4=",
          "summary": "A form's state as a pure reducer: values, touched fields, validator errors and the submit, for useReducer.",
          "level": 1,
          "tags": [
            "form",
            "state",
            "reducer",
            "useReducer",
            "validation",
            "errors",
            "submit",
            "touched"
          ],
          "languages": [
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/typescript/form_reducer.ts",
            "impl/typescript/initial_form_state.ts",
            "impl/typescript/visible_errors.ts",
            "vectors.json"
          ],
          "package": {
            "name": "form.state-1.0.0.fune",
            "size": 39056,
            "sha256": "48e819bc253a284e260070392a27a3fcd2918ec24b658685167f0699381b3e73",
            "languages": {
              "typescript": {
                "name": "form.state-1.0.0-typescript.fune",
                "size": 39084,
                "sha256": "44e6d08bcd449e034d9e440f699c365c212d4dea0a6335ffe95fc88435062961",
                "integrity": "sha256-4iwVxqLIHJ91vACnQMzcZgEb5/IVXok5FkIlhOL65j4="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-q/Sbq0mkHRo4m4cJpsY3s+YdxrwS/JjzZnz7CqsSKKE=",
          "summary": "A form's state as a pure reducer: values, touched fields, validator errors and the submit, for useReducer.",
          "level": 1,
          "tags": [
            "form",
            "state",
            "reducer",
            "useReducer",
            "validation",
            "errors",
            "submit",
            "touched"
          ],
          "languages": [
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "NOTICE",
            "README.md",
            "impl/typescript/form_reducer.ts",
            "impl/typescript/initial_form_state.ts",
            "impl/typescript/visible_errors.ts",
            "vectors.json"
          ],
          "package": {
            "name": "form.state-1.0.1.fune",
            "size": 40615,
            "sha256": "e87c728a244fcbb1336f68a8bc50ca6be08eb2194ab9d3a2a40882aa71372d5d",
            "languages": {
              "typescript": {
                "name": "form.state-1.0.1-typescript.fune",
                "size": 40643,
                "sha256": "5185acd34fa3f84694b0c1b9a1fef5cbe04207977f74c88367c48655b8a903db",
                "integrity": "sha256-q/Sbq0mkHRo4m4cJpsY3s+YdxrwS/JjzZnz7CqsSKKE="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "geo.bounding-box": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-Fehj651rQPjJSj5Ah5g5VSo+N1uc7FQWzFD7LbV7Sdc=",
          "summary": "Latitude/longitude bounding box that contains every point within a distance of a centre point.",
          "level": 0,
          "tags": [
            "geo",
            "bounding-box",
            "bbox",
            "radius",
            "search",
            "latitude",
            "longitude",
            "nearby"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "geo.bounding-box-1.0.0.fune",
            "size": 25515,
            "sha256": "74658290375ebdd1c98f319e6acc3f3438a4e0b2156f09909818f7c1c02ba2c9",
            "languages": {
              "typescript": {
                "name": "geo.bounding-box-1.0.0-typescript.fune",
                "size": 13109,
                "sha256": "8e3cf00d80868784b6ed7d0b28360799fe500feb74f5964932e9464b04b1bf7f",
                "integrity": "sha256-Vkn33ccdLo44A9N+iyiFfgsYABSFyy7+YiFF+Nke+pw="
              },
              "python": {
                "name": "geo.bounding-box-1.0.0-python.fune",
                "size": 12693,
                "sha256": "d08bddc5df8f46b262747ae1dba928ece4b298fe425fda23000514f63cdd6641",
                "integrity": "sha256-uq2mJldwUpFoTUWrqUS/90/Qqd5ztXzaJvwIQgSvI7M="
              },
              "rust": {
                "name": "geo.bounding-box-1.0.0-rust.fune",
                "size": 14329,
                "sha256": "2eaaf1d8d2d46e67ef0fac7c9f6ab82ec7ef8b9bd13cc1de4f6e25f4c6c5ef10",
                "integrity": "sha256-sUvaxZxBIkXome8Ak+IcCRAX360SxwIQ8prKuHxVlsM="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "2.0.0": {
          "integrity": "sha256-jLp/ybkSwRZP4ry6y3vI8CSq1M8rh3o0ZzBHo46LiI0=",
          "summary": "Latitude/longitude bounding box that contains every point within a distance of a centre point.",
          "level": 0,
          "tags": [
            "geo",
            "bounding-box",
            "bbox",
            "radius",
            "search",
            "latitude",
            "longitude",
            "nearby"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.atan": "^1.0.0",
            "math.sin-cos": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "geo.bounding-box-2.0.0.fune",
            "size": 22478,
            "sha256": "7e79132161c5e6092da15d9f79b040dfba351e8cb429691518d00652677f0457",
            "languages": {
              "typescript": {
                "name": "geo.bounding-box-2.0.0-typescript.fune",
                "size": 13561,
                "sha256": "9b05bc30f22e4cf567da654a9601f3b0f640d0a6c0f93fa5e4875027268754e0",
                "integrity": "sha256-qF4NS3JBDUePYDYbEl/Uwhu+3li4Yaxsb9Wg5Aw0bYk="
              },
              "python": {
                "name": "geo.bounding-box-2.0.0-python.fune",
                "size": 13602,
                "sha256": "ef6e09dec6014960e09f51d2a12097d9f330168ba62bc22760e4f5fcfcf8ee3f",
                "integrity": "sha256-6yjD8OZpFxN/NpCB9bh81dHkF0xIlg1KSzb6bl96ksM="
              },
              "rust": {
                "name": "geo.bounding-box-2.0.0-rust.fune",
                "size": 14727,
                "sha256": "27d6d17c712965c9bb39781e5d8c034b5d891e253cd9efd74027e41af7cfff6f",
                "integrity": "sha256-ImZRCrEpHUkwwwMCVrGyryODqrgzvs55HNsaw3pJsv8="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "geo.distance": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-yrfKq1XT8idDA31tJKF1/0vc8bj+p6OGg/FV+LW8ZKI=",
          "summary": "Great-circle distance in metres between two latitude/longitude points (haversine), to the millimetre.",
          "level": 0,
          "tags": [
            "geo",
            "distance",
            "haversine",
            "great-circle",
            "latitude",
            "longitude",
            "gps"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "geo.distance-1.0.0.fune",
            "size": 23430,
            "sha256": "701b702975d223bf7fdc1a539827f06ebd9962b8f8d84d0c1216bca38fc31935",
            "languages": {
              "typescript": {
                "name": "geo.distance-1.0.0-typescript.fune",
                "size": 12361,
                "sha256": "e3e9cddff0ffabe8ff7c9485b179f9350bca7f86aa6be3e1111a5e70585fdbc8",
                "integrity": "sha256-DZNcrO+pHNd/lkuHeM8bkg1dXajFBuTmuWJfD0A5CRQ="
              },
              "python": {
                "name": "geo.distance-1.0.0-python.fune",
                "size": 11860,
                "sha256": "7dedde41f7913e8cb94583d2c84e828f5011ec8dd4079f77887e13687d57a40d",
                "integrity": "sha256-QT7J0+p1XfWYE9eOYUSWoI+6X8ZqlhmSqKcrMYcqUys="
              },
              "rust": {
                "name": "geo.distance-1.0.0-rust.fune",
                "size": 13191,
                "sha256": "6216c0cae6fcae83cf085e664806bbd24283f44e43dea56a43e35741c10b681c",
                "integrity": "sha256-NxF8XWTJP9sqCT3lK9Ri67UZupkurJ4yljNlhkz9D4Q="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "2.0.0": {
          "integrity": "sha256-RszzvvwpW9Tk6JIkdT1O7HddGflXQ3SCK+mt9dNS4XI=",
          "summary": "Great-circle distance in metres between two latitude/longitude points (haversine), to the millimetre.",
          "level": 0,
          "tags": [
            "geo",
            "distance",
            "haversine",
            "great-circle",
            "latitude",
            "longitude",
            "gps"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.atan": "^1.0.0",
            "math.sin-cos": "^1.0.0",
            "math.round-float": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "geo.distance-2.0.0.fune",
            "size": 20447,
            "sha256": "2b5c24b572d5c3696eb23324dcd7c6dc2fd9d26a25655445ec770267aa124a4d",
            "languages": {
              "typescript": {
                "name": "geo.distance-2.0.0-typescript.fune",
                "size": 13691,
                "sha256": "945be469b9907750a90267cc3ac281e084056fb62e97e3afd6cde64dac1210a9",
                "integrity": "sha256-YpR/m4oTw9yFLlqLgk/usdIHN0+JlQmc/0X4xhX7Ml4="
              },
              "python": {
                "name": "geo.distance-2.0.0-python.fune",
                "size": 13586,
                "sha256": "b451176a5da85877d3476b3c8187dbdfad4e1552ea20b01fc6aa4864fb4c610f",
                "integrity": "sha256-OttPWFY/P5TZg2h+MOsG2MsQb+uH4iDmJ3bx0WPbpiQ="
              },
              "rust": {
                "name": "geo.distance-2.0.0-rust.fune",
                "size": 14428,
                "sha256": "9e82f2655a9c0d0e5162162f23cb623199cd481d6cd7fdb3324e324a4e686b12",
                "integrity": "sha256-WpMqFH3rt0c4mtaZHaTInKO1CSz6AYqwpzKsdfa6aGo="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "geo.point-in-polygon": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-dET0rB+EH2BnoEycEtebWTNaNLuGnWVbsFVB9jOqJjo=",
          "summary": "Whether a latitude/longitude point lies inside a polygon (ray casting; the boundary counts as inside).",
          "level": 0,
          "tags": [
            "geo",
            "polygon",
            "geofence",
            "point-in-polygon",
            "ray-casting",
            "contains",
            "inside"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "geo.point-in-polygon-1.0.0.fune",
            "size": 19392,
            "sha256": "200241894c1b058f6c2763c8b07b0d3e658dbbd10c6a84dfbb9cf4027c03a4f8",
            "languages": {
              "typescript": {
                "name": "geo.point-in-polygon-1.0.0-typescript.fune",
                "size": 12310,
                "sha256": "b59d1826425514ce11c86640ab4d61db231248111a29a989f59b43ff297323e9",
                "integrity": "sha256-m+vgrqGpwxyQO5H10Rd4Pz89sE7lZNhT4avQJOAImeo="
              },
              "python": {
                "name": "geo.point-in-polygon-1.0.0-python.fune",
                "size": 12614,
                "sha256": "972670f2d9788a7244c952c3d83aafd9ade2d19a1176eab63a825c113e8b5004",
                "integrity": "sha256-vCWrKAUXoaaTpFYceUG+P3MpiNnZ+uO/iHef+yLpsk0="
              },
              "rust": {
                "name": "geo.point-in-polygon-1.0.0-rust.fune",
                "size": 12524,
                "sha256": "2baecd2d7539ca8bf145c5a623abf328b14393426dd9bdb85dfb94dbdfd6be15",
                "integrity": "sha256-/jsZbE9wb2wsC0r8NAcvfDczYuBJt4biBsO1psG3nmM="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "health.age-in-months": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-xmrc5Xf/Wfyug+UWSIiWur45PaVdeomWW3bDcQo3WeI=",
          "summary": "Age in completed months and days on a given date, for paediatric charts and doses; month ends handled like birthdays.",
          "level": 0,
          "tags": [
            "health",
            "paediatrics",
            "age",
            "months",
            "infant",
            "baby",
            "date-of-birth",
            "neonate"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0",
            "dates.add-months": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "health.age-in-months-1.0.0.fune",
            "size": 11926,
            "sha256": "63bf286b1e35ae77f10d05f89522d6523c430157b518aa3e793912bf46e3c03f",
            "languages": {
              "typescript": {
                "name": "health.age-in-months-1.0.0-typescript.fune",
                "size": 8361,
                "sha256": "844ca856b09baddfb3bc688103729360f977980cde2608f23ecdb6c76d0a6666",
                "integrity": "sha256-RNwTq6Rgz7YwWrkWEc3cnWGz3fsx9cEeJ++jy8TQCFk="
              },
              "python": {
                "name": "health.age-in-months-1.0.0-python.fune",
                "size": 8341,
                "sha256": "5feb2abe22af2c24e1f1684796f296cc9110a9355eede0ee5e66245fded40c5e",
                "integrity": "sha256-jNVS6mry0hORzCGwnSZldgZ8yPToMbEtIPTGrnCf/TQ="
              },
              "rust": {
                "name": "health.age-in-months-1.0.0-rust.fune",
                "size": 9054,
                "sha256": "ea29639208ca4a76bd52d54de499b9216d3e11a9131ea190e096d9c5c32986f5",
                "integrity": "sha256-B4QijnBpDYaSwk/KNtpChld7YoMAMIOriOMvFME4PvE="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-heM/fjc/AIkfNl/rj7cLWKV10xSy/Arem9cVvpZzYxA=",
          "summary": "Age in completed months and days on a given date, for paediatric charts and doses; month ends handled like birthdays.",
          "level": 0,
          "tags": [
            "health",
            "paediatrics",
            "age",
            "months",
            "infant",
            "baby",
            "date-of-birth",
            "neonate"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0",
            "dates.add-months": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "health.age-in-months-1.0.1.fune",
            "size": 13308,
            "sha256": "6ba2f856fa499229596115645b913970f63d353863d146ba2c24df0dcfff919e",
            "languages": {
              "typescript": {
                "name": "health.age-in-months-1.0.1-typescript.fune",
                "size": 9743,
                "sha256": "0ab1abeb67f75805bc4adc2779708746aee0f9278b0312b444833cb67153c8c0",
                "integrity": "sha256-jc/6hiBdvaKLeNZGZKYgdOt3cOWBy4N0nExDymG8Bm4="
              },
              "python": {
                "name": "health.age-in-months-1.0.1-python.fune",
                "size": 9723,
                "sha256": "b48ab9859d9285c318435c5fa78100aa9b915c6bd857095344332b610f543918",
                "integrity": "sha256-jD5SjqQFwnLAPxFt13301XQRQdi9T6mFh0ByvNMfYUc="
              },
              "rust": {
                "name": "health.age-in-months-1.0.1-rust.fune",
                "size": 10436,
                "sha256": "ebd0bdf9fd982ba8f34b988b709db396fc1ac4f9839c60bf86c38331bc9037e1",
                "integrity": "sha256-8afM5X/ZkLxo3dSP4myYE7nKP7Jw1ZMF/nDWtVy+2eQ="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "health.appointment-slots": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-WBUZ3LBJwq2pA34X6jephq1BZOjr94KnrvmdtGP4Bhs=",
          "summary": "Bookable appointment slots from clinic sessions, a slot length, breaks and existing bookings.",
          "level": 2,
          "tags": [
            "appointments",
            "slots",
            "booking",
            "clinic",
            "scheduling",
            "availability",
            "diary",
            "rota"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "time.minutes-between": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "health.appointment-slots-1.0.0.fune",
            "size": 27013,
            "sha256": "a1d00b9b95ac26e421914bf3b7ef8000edc88f7ef4de92c5fbbc890692cfe318",
            "languages": {
              "typescript": {
                "name": "health.appointment-slots-1.0.0-typescript.fune",
                "size": 18251,
                "sha256": "c1739eff1d65677f2807b4bb39e6ddc989584322fdb06a584dbddc835b005b94",
                "integrity": "sha256-wYPYPr2uCPAOit0mRT+w7XnvhklmFaRu6OtwxKZN8Q4="
              },
              "python": {
                "name": "health.appointment-slots-1.0.0-python.fune",
                "size": 18049,
                "sha256": "0b7ee0ca9433b8718ddfc1c66ea470119d0adad06b0a8a1fc51696839b6ff514",
                "integrity": "sha256-AAWI0Pe22KRIuCgZioK1RpenahhrkIjL7C1x7/mYAYI="
              },
              "rust": {
                "name": "health.appointment-slots-1.0.0-rust.fune",
                "size": 19943,
                "sha256": "b0b462862806702f396d78dd3a688c1ef79ccb1ca18916517522d60bf72dd516",
                "integrity": "sha256-gt6g/EBsi8cU7SKh2UYDF0yFvyRFUUuXqR+2i6dmiwM="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-Hj6Yz7BvAAKoQM661xXm4NF7HtrnXT8MG6rMsO5DrUg=",
          "summary": "Bookable appointment slots from clinic sessions, a slot length, breaks and existing bookings.",
          "level": 2,
          "tags": [
            "appointments",
            "slots",
            "booking",
            "clinic",
            "scheduling",
            "availability",
            "diary",
            "rota"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "time.minutes-between": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "health.appointment-slots-1.0.1.fune",
            "size": 28395,
            "sha256": "9b81b0c2ed4032adce8b962d58a67032ce0817f7dcf79e05cf4ec899e66e00a1",
            "languages": {
              "typescript": {
                "name": "health.appointment-slots-1.0.1-typescript.fune",
                "size": 19633,
                "sha256": "577c6ff447070065b3161261d8e05525b4d24e66f422371c13427c5b7e224973",
                "integrity": "sha256-Rt8o0+og/oRi0xcF1d4sJC3zmj2oJ+MtW8UobZ4wQxU="
              },
              "python": {
                "name": "health.appointment-slots-1.0.1-python.fune",
                "size": 19431,
                "sha256": "cb4ecd9e9da156ad25be5a759615cc28c595b312447a37ecf1782b609dac600b",
                "integrity": "sha256-5x7LqaB/QUgxQuLQadGgvOLVP7UwycXCX5LwXObqQtA="
              },
              "rust": {
                "name": "health.appointment-slots-1.0.1-rust.fune",
                "size": 21325,
                "sha256": "df114dcb71238adfd29c74d689abf08a2306aec8e5c6429395280ae0fb2796e2",
                "integrity": "sha256-nfbW4up8YiYx9buPINcK+Lfkp+XkmX4oILWlo6kZ+VI="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "health.bmi": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-6Yq3DIDl9lPEZ/D1Y8TTNBxxDilDlIaHFG4v91HIEnE=",
          "summary": "Adult body mass index (kg/m², 1 decimal place) and its NICE/WHO weight category.",
          "level": 0,
          "tags": [
            "bmi",
            "body-mass-index",
            "weight",
            "height",
            "obesity",
            "overweight",
            "underweight",
            "adult"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.round-float": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "health.bmi-1.0.0.fune",
            "size": 13519,
            "sha256": "af3d6757e1d9279a4705adb7be15c723518f013110574649e6423c2bbdcc784e",
            "languages": {
              "typescript": {
                "name": "health.bmi-1.0.0-typescript.fune",
                "size": 9796,
                "sha256": "2858df018d0773381fa7a3a64171a20301055a74e7495c7d2401f71a96546fc5",
                "integrity": "sha256-22zem40AB7cUJpRNi/uweRaqMlHaomU9bWQLazLBSes="
              },
              "python": {
                "name": "health.bmi-1.0.0-python.fune",
                "size": 9878,
                "sha256": "9e83e614a05eae44af86cba7ec2d54d1bb48675605be5e8c56394448469996fc",
                "integrity": "sha256-rgWZBQI2UD6TGihlesRkmSB4CqpiQKwzcyZkKfAgATg="
              },
              "rust": {
                "name": "health.bmi-1.0.0-rust.fune",
                "size": 10433,
                "sha256": "62e011fae97fe05fa87632d16cd365159acfbb2b252eab32e4159f221b4ef884",
                "integrity": "sha256-mrZPNCUlqUD5guAzbwSASy2raoCkRNu34GuQN0FbX7M="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-Wxe9IH7Q4fE1tIHJdaJZf5IJsErDogePRU9olkM9fdo=",
          "summary": "Adult body mass index (kg/m², 1 decimal place) and its NICE/WHO weight category.",
          "level": 0,
          "tags": [
            "bmi",
            "body-mass-index",
            "weight",
            "height",
            "obesity",
            "overweight",
            "underweight",
            "adult"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.round-float": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "health.bmi-1.0.1.fune",
            "size": 14901,
            "sha256": "2288b649366d888521b2232654f5e07174beeac4280a8d070cc3bdb001bcb593",
            "languages": {
              "typescript": {
                "name": "health.bmi-1.0.1-typescript.fune",
                "size": 11178,
                "sha256": "e3fc4515aa1cdf6dd6e70d4e037591ac1211a6fbd402cfc6ab22121f1658bcca",
                "integrity": "sha256-//MQTSbBa75SwBBmgxB7cCoLR9l3uLWTwXSFjtgy9uk="
              },
              "python": {
                "name": "health.bmi-1.0.1-python.fune",
                "size": 11260,
                "sha256": "3cdf1013081438d5356dcb5983640d4af189258b14749e1ebb5614e16ffca34a",
                "integrity": "sha256-ktAWd3IFtuZhNXFKaHwENyVbEOdISQLucQ6x6vETLW4="
              },
              "rust": {
                "name": "health.bmi-1.0.1-rust.fune",
                "size": 11815,
                "sha256": "e8f7422fe3a58e7dff341854aa56c5b3ef93f1174987ba83c7075a8c33cccbc1",
                "integrity": "sha256-ygpZP/gsHIIjrR/YXnW55h1jYyw45sMXbuAXYaoADo8="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "health.bsa": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-PN0FbCgpAdVTseiA4MQxcRezPZLZHCFGq4Vt9t7Fxp8=",
          "summary": "Body surface area in m² by the Mosteller and the DuBois & DuBois formulas, to 2 decimal places.",
          "level": 0,
          "tags": [
            "bsa",
            "body-surface-area",
            "mosteller",
            "dubois",
            "chemotherapy",
            "dosing",
            "m2"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.pow": "^1.0.0",
            "math.round-float": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "health.bsa-1.0.0.fune",
            "size": 12035,
            "sha256": "81cf3f02076ab9cb46048c8c90ba49ad1655d6fda3d2ee260a6db0b00e886756",
            "languages": {
              "typescript": {
                "name": "health.bsa-1.0.0-typescript.fune",
                "size": 8444,
                "sha256": "15fed9006ecd7762654d20967ae8e061133732f6d3ea14f301f3a15f6ea6e104",
                "integrity": "sha256-TJ4r5gtY0/jYpVpaZNC+hGsNsa8bHvPLBi2UeoGrPSM="
              },
              "python": {
                "name": "health.bsa-1.0.0-python.fune",
                "size": 8478,
                "sha256": "e4dc5bbde38cdf20eda785fc0fb7256da411cb904129783fb08973ba51cbca46",
                "integrity": "sha256-v8pW6J+J/efw/fXOMe/BTzHLiI8/Z3QxuJLDbLPjz1E="
              },
              "rust": {
                "name": "health.bsa-1.0.0-rust.fune",
                "size": 9133,
                "sha256": "13e69973d3fd300650499725972fe7dc325fe8dd3749a7a9d64af26ea014762e",
                "integrity": "sha256-5UBFCdcMSUorETjc00En0lvSmGQ62y44KiTr8YOFEAI="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-C/kb8JAokmbixNzbQB57OqK+LYacNdESJnkALrX0/0g=",
          "summary": "Body surface area in m² by the Mosteller and the DuBois & DuBois formulas, to 2 decimal places.",
          "level": 0,
          "tags": [
            "bsa",
            "body-surface-area",
            "mosteller",
            "dubois",
            "chemotherapy",
            "dosing",
            "m2"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.pow": "^1.0.0",
            "math.round-float": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "health.bsa-1.0.1.fune",
            "size": 13763,
            "sha256": "fe964241429628530d99653abd5ac16c3aa6ebad194a08439b4b61137669358c",
            "languages": {
              "typescript": {
                "name": "health.bsa-1.0.1-typescript.fune",
                "size": 10172,
                "sha256": "692d0f4a07f105bb42688934a1d4af1fe2f408162a7f08247914219b7611bdef",
                "integrity": "sha256-1QRdIYsZ35Xj4OIXzfbDIMil3gieFqw8cthARPaRDyI="
              },
              "python": {
                "name": "health.bsa-1.0.1-python.fune",
                "size": 10206,
                "sha256": "cefdc985e73f03d2d25658dc9b1c00530acf8bf14190e038df345748bb273d36",
                "integrity": "sha256-mzQIMJVqQQtq4R/uBStH9oX0uaSis0h7ncRnYNXL8iM="
              },
              "rust": {
                "name": "health.bsa-1.0.1-rust.fune",
                "size": 10861,
                "sha256": "ba12b751fcd094cef429ffe69ecd6261f3a3db9c3a567f43f7a7bd18e0ad00ba",
                "integrity": "sha256-jQoXnSspdypxj4jcWWbrSEJubRz+kzy5IwUuOLAszio="
              }
            }
          },
          "status": "unreviewed",
          "statusNote": "not for clinical use; regulatory review pending",
          "license": "NOASSERTION"
        }
      }
    },
    "health.dose-weight-based": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-fwYBreZEaLfC8YV1RIxEgKtcjwa5FG9/+VIrQYu8P4w=",
          "summary": "Weight-based dose (per kg) capped at a maximum single dose and rounded to a measurable volume, in exact micro-units.",
          "level": 2,
          "tags": [
            "dose",
            "dosing",
            "weight-based",
            "mg-per-kg",
            "paediatric",
            "dose-calculation",
            "max-dose",
            "measurable-volume"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "health.dose-weight-based-1.0.0.fune",
            "size": 24817,
            "sha256": "dabdc567b4f64cd30f679167282306f771793af14e96298f1513ed821cbe3a58",
            "languages": {
              "typescript": {
                "name": "health.dose-weight-based-1.0.0-typescript.fune",
                "size": 15860,
                "sha256": "e199454a3828af9b27baec269e549dc6e30809ffd3df74eef0328b895efd9139",
                "integrity": "sha256-fGub4apibZH2LjSuB5lK5NyRSQXdCYfw/U/qSNo1CpY="
              },
              "python": {
                "name": "health.dose-weight-based-1.0.0-python.fune",
                "size": 15814,
                "sha256": "e2979055ce574ea256c8f687ac6d338eb8c21d48bdd3822f7b8fda3d88f83018",
                "integrity": "sha256-OkTKiifmYMwfyT7qz2+vA23l3fLo9BBLADOZobTzaf8="
              },
              "rust": {
                "name": "health.dose-weight-based-1.0.0-rust.fune",
                "size": 17573,
                "sha256": "1d1ad6458dc4639d637c99632caa9cc92b710c6b93c32813c5509bdda899a46c",
                "integrity": "sha256-bDCZoEXAQ0cw94NrSIwW9/j8x71eFfMciX4IMTW1lVA="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-7Le7RVtxlxc5z5siQlJgpUkGTM8X0D0fE5FNIo7/hE8=",
          "summary": "Weight-based dose (per kg) capped at a maximum single dose and rounded to a measurable volume, in exact micro-units.",
          "level": 2,
          "tags": [
            "dose",
            "dosing",
            "weight-based",
            "mg-per-kg",
            "paediatric",
            "dose-calculation",
            "max-dose",
            "measurable-volume"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "health.dose-weight-based-1.0.1.fune",
            "size": 26519,
            "sha256": "fb3a319fd96fe97fc55f9f76484cb17fd73dfdd268483893ef40cb6d90639fa5",
            "languages": {
              "typescript": {
                "name": "health.dose-weight-based-1.0.1-typescript.fune",
                "size": 17562,
                "sha256": "5320a3e35d389b3c05e08c6f87ad05339c22794e5146bc445ead794ece5bc74b",
                "integrity": "sha256-Mc8GShx4jhhVcr3dY97cje/eFvEhLwMJ2G5VxZCcPZg="
              },
              "python": {
                "name": "health.dose-weight-based-1.0.1-python.fune",
                "size": 17516,
                "sha256": "f7f6b69d11a48c33060521ce61b4c130fc046aeda9c30150f9ec971c3f18b417",
                "integrity": "sha256-bTh0munqAr6eXtHL7LavBsNPUacuhVdK2puMavLqGvc="
              },
              "rust": {
                "name": "health.dose-weight-based-1.0.1-rust.fune",
                "size": 19275,
                "sha256": "7bb3f0730e26c319322566e20e4d6bca6e2872c6b071fcb8102b879b5d401562",
                "integrity": "sha256-6tvsys3t30az8/Ekp7OEd3FTfN30TJSEzL16+ZEuJLw="
              }
            }
          },
          "status": "unreviewed",
          "statusNote": "not for clinical use; regulatory review pending",
          "license": "NOASSERTION"
        }
      }
    },
    "health.egfr": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-LBayEJRkHTe5dwjFvDgkmZ0FK9fu0n1SFApC5nmKZF8=",
          "summary": "eGFR in mL/min/1.73 m² by the race-free CKD-EPI 2021 creatinine equation, from creatinine in µmol/L or mg/dL.",
          "level": 1,
          "tags": [
            "egfr",
            "ckd-epi",
            "kidney",
            "renal-function",
            "creatinine",
            "gfr",
            "ckd",
            "nephrology"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.pow": "^1.0.0",
            "math.round-float": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "health.egfr-1.0.0.fune",
            "size": 17839,
            "sha256": "c937b6bc03b4c487c24e6a1be9763058aba462beade698fc8892657f6be21584",
            "languages": {
              "typescript": {
                "name": "health.egfr-1.0.0-typescript.fune",
                "size": 12095,
                "sha256": "74cc6a4aeb8c8e767b85dcc3667be2c654a181c79714cbba28d3b819988237e8",
                "integrity": "sha256-j9LQkGaB2S0Gj/FBr+5ul6tFx8ZBOSPNnl/2U+6+IIQ="
              },
              "python": {
                "name": "health.egfr-1.0.0-python.fune",
                "size": 12090,
                "sha256": "5729022334a52e47be06b3afdbe4aef43f15d4c3039a4dae32335907b996dff0",
                "integrity": "sha256-7e4nsqU6ywTZxhyjWWFTxRou4z1I8PBSiHeqW+I4MEQ="
              },
              "rust": {
                "name": "health.egfr-1.0.0-rust.fune",
                "size": 13136,
                "sha256": "065b8895c68f2416b56b54ca702bc1fb4245cc13c005febbab478b0a539d58c2",
                "integrity": "sha256-vJEvgK6tGT6G1n9y6g+xr01wGCrSknZLATQA1QtqizY="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-zx+Er/knrn4vxQUR4AKC9sX1ZyUSRD58wpnlBCMV5mY=",
          "summary": "eGFR in mL/min/1.73 m² by the race-free CKD-EPI 2021 creatinine equation, from creatinine in µmol/L or mg/dL.",
          "level": 1,
          "tags": [
            "egfr",
            "ckd-epi",
            "kidney",
            "renal-function",
            "creatinine",
            "gfr",
            "ckd",
            "nephrology"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.pow": "^1.0.0",
            "math.round-float": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "health.egfr-1.0.1.fune",
            "size": 19595,
            "sha256": "7568ccd75178204e88fa3b4010605a1598a6e4d83d65791523d0dad63d96c330",
            "languages": {
              "typescript": {
                "name": "health.egfr-1.0.1-typescript.fune",
                "size": 13851,
                "sha256": "cc15645abc25f4c0c019f6c0ea99b147d152ebf7b0e8f47707bbc0ffb12a1235",
                "integrity": "sha256-NCFi7LEU2IG3BWCH6gcBEBMeLr8wxnk6eLu0N/QeTog="
              },
              "python": {
                "name": "health.egfr-1.0.1-python.fune",
                "size": 13846,
                "sha256": "51109c72437f6f195c98a8c4f6e16646c4f161f742f89473d1851613880a859c",
                "integrity": "sha256-tZsJWzohiEJVuis+py3ZyRXWSrBPM9sKBEbH1MV5EEE="
              },
              "rust": {
                "name": "health.egfr-1.0.1-rust.fune",
                "size": 14892,
                "sha256": "37a15c7047771cbc996be37159ad4896c1dca470d9f64ed0ff555441bb2ed29b",
                "integrity": "sha256-n3BPIYdnMqOpSwg9DroaXxue+jPYsregmLyS+yIWkzM="
              }
            }
          },
          "status": "unreviewed",
          "statusNote": "not for clinical use; regulatory review pending",
          "license": "NOASSERTION"
        }
      }
    },
    "health.gestational-age": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-ai/hgCT8JEzvHByhnvNTl4Pfioyy3BOqkdsv1tdw8NE=",
          "summary": "Gestational age (weeks+days) and estimated due date from the last menstrual period by Naegele's rule, cycle-adjusted.",
          "level": 1,
          "tags": [
            "health",
            "pregnancy",
            "gestational-age",
            "due-date",
            "edd",
            "naegele",
            "lmp",
            "obstetrics",
            "antenatal"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "health.gestational-age-1.0.0.fune",
            "size": 14669,
            "sha256": "eece582e3c18dfa4333d0a6782552ad603158f9d4cd53dcbddbfcbc2caec00d3",
            "languages": {
              "typescript": {
                "name": "health.gestational-age-1.0.0-typescript.fune",
                "size": 10736,
                "sha256": "952042a0230979afdc46bebc0cba1dd999679bddbaeff194352d3a4926261f32",
                "integrity": "sha256-V2gSqcVpPWrDwjfw372qjmy/e75oM36NQyoThgwwvUE="
              },
              "python": {
                "name": "health.gestational-age-1.0.0-python.fune",
                "size": 10704,
                "sha256": "f90f58ea360d0ac0c6eaea1e1722e71c25ac7ff2c4a0bd717e7765963ed36758",
                "integrity": "sha256-pP31aM6D8tbslRHiHpyVD4+6nmPBglJmmzSEyf6URP8="
              },
              "rust": {
                "name": "health.gestational-age-1.0.0-rust.fune",
                "size": 11739,
                "sha256": "3cfd645b99561ba5305f441e711f15fe5fe75b5868be11bdd58b237ff29911d7",
                "integrity": "sha256-KlYt+OBHygWSud7qtUJ++n/m7cbyXJh8McU1F1eMdWg="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-giCyoKAphqYisvRIl6CM1Glk4VEw5KzRabXhgs1bNY0=",
          "summary": "Gestational age (weeks+days) and estimated due date from the last menstrual period by Naegele's rule, cycle-adjusted.",
          "level": 1,
          "tags": [
            "health",
            "pregnancy",
            "gestational-age",
            "due-date",
            "edd",
            "naegele",
            "lmp",
            "obstetrics",
            "antenatal"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "health.gestational-age-1.0.1.fune",
            "size": 16397,
            "sha256": "3a8338b49fe1e3953ced98e28cc50e831e4fb21b826a63e9a294e9106686c903",
            "languages": {
              "typescript": {
                "name": "health.gestational-age-1.0.1-typescript.fune",
                "size": 12464,
                "sha256": "69c9035ba974d1eda9e5e119c92a4459ba954b5d1c460593c6b99cac495ab030",
                "integrity": "sha256-R6shGy0TKIghdj3KtakQccGNatwEhVwlg0K2Ufwu53U="
              },
              "python": {
                "name": "health.gestational-age-1.0.1-python.fune",
                "size": 12432,
                "sha256": "3acdf0c4b861c0511762105f87fdbb22637578f335405c58812e0641b604279d",
                "integrity": "sha256-waJ4DgY6yRkYisDckCSneVKfmYSbhuvCsAVqQMnSR9E="
              },
              "rust": {
                "name": "health.gestational-age-1.0.1-rust.fune",
                "size": 13467,
                "sha256": "0ed34df81f1328ccf17fe8f978dfa6199f416663b0b78795f754a84091b8f00d",
                "integrity": "sha256-1Eb9889WflCOfhO0HtSPxSLSijBTCSC1ZUTZDcgP/WI="
              }
            }
          },
          "status": "unreviewed",
          "statusNote": "not for clinical use; regulatory review pending",
          "license": "NOASSERTION"
        }
      }
    },
    "health.news2": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-7gUbx8FIGnaU9s6AUUbd3q0dZXYeUJ1GopCe7dvxYE8=",
          "summary": "NEWS2 early warning score from one set of observations: parameter scores, aggregate and RCP clinical risk band.",
          "level": 2,
          "tags": [
            "news2",
            "early-warning-score",
            "deterioration",
            "observations",
            "vital-signs",
            "acvpu",
            "nhs",
            "rcp"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "health.news2-1.0.0.fune",
            "size": 48217,
            "sha256": "68949e2d83f623b010a7e675b0f81f366ce89b35ae219ce97c7d0b1cd951c512",
            "languages": {
              "typescript": {
                "name": "health.news2-1.0.0-typescript.fune",
                "size": 36533,
                "sha256": "c9285470a81cce4661df8e1b83e4b017e8f72ca75e76944d13c485b57718db2a",
                "integrity": "sha256-BhnpMgaNIrocgVRvBlVY6ryAwIFbXUxYbcDbRblY4vg="
              },
              "python": {
                "name": "health.news2-1.0.0-python.fune",
                "size": 36750,
                "sha256": "951c86c2fe9a36998d0f0fefc1ac1c9a17e68850a2cbae82015e5bba6957319f",
                "integrity": "sha256-qntdnSKR6fgI/7+t5f7zQVpnwiaB73jDFndlZ6VEw18="
              },
              "rust": {
                "name": "health.news2-1.0.0-rust.fune",
                "size": 39128,
                "sha256": "7d6a487a8b7e795207a1d1197691adff94b0353fb0c48c91b2f75f3705609b20",
                "integrity": "sha256-MOHtYahzFT23YL3zlWvrTTd/8plitt/6ldsGsrQYzcE="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-pEuoUP0JbSxO2rHY7/djeN0ys4ZgZp/+Ni2154GEiaI=",
          "summary": "NEWS2 early warning score from one set of observations: parameter scores, aggregate and RCP clinical risk band.",
          "level": 2,
          "tags": [
            "news2",
            "early-warning-score",
            "deterioration",
            "observations",
            "vital-signs",
            "acvpu",
            "nhs",
            "rcp"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "NOTICE",
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "health.news2-1.0.1.fune",
            "size": 50450,
            "sha256": "ff104d3b779d004108990f2752a5f6c606cac001472954b3ed60b0cdd256246f",
            "languages": {
              "typescript": {
                "name": "health.news2-1.0.1-typescript.fune",
                "size": 38766,
                "sha256": "48e7136e707e559b77146265e6a54465c6934370539e7ef85a5b401adef5b81d",
                "integrity": "sha256-aFs4FbLZLohtJ28BNAO4ASfpALwkiHr0/d9NQN9SwuY="
              },
              "python": {
                "name": "health.news2-1.0.1-python.fune",
                "size": 38983,
                "sha256": "ddee6699bbe2a7ee8c3ddd0a2f918951c282a304a2ceb93ae6415f8c8bff8eeb",
                "integrity": "sha256-h0k98RB++6S/t7W55b5q4jl8IOxFyteK8hxwbVkAckw="
              },
              "rust": {
                "name": "health.news2-1.0.1-rust.fune",
                "size": 41361,
                "sha256": "e03dd868f10987c9da91fcfd8d606ce34feff84bb4fd2263384a23c1ab042fa7",
                "integrity": "sha256-BZnWCE0Obl+nd0lKa7zqZaJsntL4QK+2Ba9/7023BMM="
              }
            }
          },
          "status": "unreviewed",
          "statusNote": "not for clinical use; regulatory review pending",
          "license": "NOASSERTION"
        }
      }
    },
    "health.nhs-number-format": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-B5D2B8BZuc2DH+sgZiFr3BbUmvtpMKZqvk5Gr+qkT54=",
          "summary": "Display an NHS number in the 3-3-4 format (\"943 476 5919\") after checking its modulus 11 check digit.",
          "level": 1,
          "tags": [
            "nhs",
            "nhs-number",
            "patient-identifier",
            "format",
            "display",
            "3-3-4",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "validation.nhs-number": "^2.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "health.nhs-number-format-1.0.0.fune",
            "size": 7454,
            "sha256": "954512d1a1fc983bea7f92b75a8b24baa80192dfb610d5c18222e474c892fb80",
            "languages": {
              "typescript": {
                "name": "health.nhs-number-format-1.0.0-typescript.fune",
                "size": 5645,
                "sha256": "fa27c132c6fd332177c1f07242e07415a6d9d267ff2b37f3e389a0ab2f0743ae",
                "integrity": "sha256-kZzo8c7wywgGRzSA0Y8wcpS0+0/t6hxjguiGLyQA+EU="
              },
              "python": {
                "name": "health.nhs-number-format-1.0.0-python.fune",
                "size": 5622,
                "sha256": "3c0d34dacf628cbb3cb0a914c89afe9dcf021b578fd1c9542499c9b737b8432f",
                "integrity": "sha256-A5BIyVGBFs+pqk4fZOs0zaIUG42Y3RzxgVDShY63+4k="
              },
              "rust": {
                "name": "health.nhs-number-format-1.0.0-rust.fune",
                "size": 5999,
                "sha256": "678f9ef2218796388d4e8606912d903d4724435204691cdac5856d540bf5167d",
                "integrity": "sha256-1C+PnjSTOCRabFqCq/9nidOQ3CUfxfs4GETsWptT5RE="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-GGOpc2FHlKu4u1hOpjTtJCzVgWWpaJr01TUXZX1t5OE=",
          "summary": "Display an NHS number in the 3-3-4 format (\"943 476 5919\") after checking its modulus 11 check digit.",
          "level": 1,
          "tags": [
            "nhs",
            "nhs-number",
            "patient-identifier",
            "format",
            "display",
            "3-3-4",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "validation.nhs-number": "^2.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "health.nhs-number-format-1.0.1.fune",
            "size": 8836,
            "sha256": "1f6e8488a8c34ccf99aad7db26c1105d866646b494890512370348ab1e566dd8",
            "languages": {
              "typescript": {
                "name": "health.nhs-number-format-1.0.1-typescript.fune",
                "size": 7027,
                "sha256": "e06c839f2f19278488c233b736488391f6c973ec54d46bc25477dff59e145874",
                "integrity": "sha256-/E5gEieuXns5eDBq3wgNn0T1TNE4C7eIShdK1AS6Ojc="
              },
              "python": {
                "name": "health.nhs-number-format-1.0.1-python.fune",
                "size": 7004,
                "sha256": "a2517cbbd23a56c4219c880243dcd41f5c172fd2653d74990b60c22f4ef207ad",
                "integrity": "sha256-BBijdaEe/68ND/zskQPev2UdiAKfZq4MxmiOVTKGiWQ="
              },
              "rust": {
                "name": "health.nhs-number-format-1.0.1-rust.fune",
                "size": 7381,
                "sha256": "398811e24922c58d3e87c54e3f11285b2a1bc0ad44902ce687cff22ebdde49d7",
                "integrity": "sha256-fXRPNen5L8ErOqG9y3X6Sh4knRO3jZ6yyiJRHhFF5pc="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "health.qrisk-inputs-validate": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-A2/SPOAqOO2kD/lXE28rKr7Xq5NpncuwTZNLzHUpS4M=",
          "summary": "Check a QRISK3 cardiovascular risk input set against the calculator's published ranges; does not compute risk.",
          "level": 2,
          "tags": [
            "qrisk",
            "qrisk3",
            "cardiovascular",
            "cvd",
            "risk-calculator",
            "validation",
            "inputs",
            "heart-disease"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "validation.uk-postcode": "^2.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "health.qrisk-inputs-validate-1.0.0.fune",
            "size": 61521,
            "sha256": "02f4cd96b767c5a006fbded8d7c9fd1047eb8801fb9f7c7f37aab107d9f218c1",
            "languages": {
              "typescript": {
                "name": "health.qrisk-inputs-validate-1.0.0-typescript.fune",
                "size": 47211,
                "sha256": "343ce69539f6c55f97baa981dbf5c475abe66e48d668aae15c9b6afbedb7c432",
                "integrity": "sha256-KCzrBrUHHwNz45uA0mzebS5qJGmUANfoHkIRSZKgw5I="
              },
              "python": {
                "name": "health.qrisk-inputs-validate-1.0.0-python.fune",
                "size": 47633,
                "sha256": "810030f0d2811c898e6c62b9b50cdd28cef58d1f7a57630c6cfc9d61fd80dfd3",
                "integrity": "sha256-UdXC0uzPGlAUqJPOjVd517AefaQSReB8Z+HtwX6+b1Q="
              },
              "rust": {
                "name": "health.qrisk-inputs-validate-1.0.0-rust.fune",
                "size": 50353,
                "sha256": "4e87aa373f80bb8f2fc366b893c6b1f2e3c65bc7a4987597751eb75dff254414",
                "integrity": "sha256-/pGKZy9Gy+zt6TXDnUF9WKOoGBbkvGa5Q/B/F1WhuH4="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-wTEIT/HPmxjCI3mjL+4Q30GJK4VdEDlVX2uEoykryh8=",
          "summary": "Check a QRISK3 cardiovascular risk input set against the calculator's published ranges; does not compute risk.",
          "level": 2,
          "tags": [
            "qrisk",
            "qrisk3",
            "cardiovascular",
            "cvd",
            "risk-calculator",
            "validation",
            "inputs",
            "heart-disease"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "validation.uk-postcode": "^2.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "health.qrisk-inputs-validate-1.0.1.fune",
            "size": 63589,
            "sha256": "60ced6a1a2baa49117e7b29dcfa24a8b99cc406022f04baaf04502da74e7e2f7",
            "languages": {
              "typescript": {
                "name": "health.qrisk-inputs-validate-1.0.1-typescript.fune",
                "size": 49279,
                "sha256": "e2bb44327a2b4ec800c41e0e34d232e6efd8e66fb362161fdcfb83c3ebf5b002",
                "integrity": "sha256-e1CMTJLi1H9AN3ErE/TD1HhjX8QN/f7XzA4G5TohvG8="
              },
              "python": {
                "name": "health.qrisk-inputs-validate-1.0.1-python.fune",
                "size": 49701,
                "sha256": "c6904b7f3afb1114a96fe08e480ba7c29e80b618af63ed517e92e24f6b16b7d3",
                "integrity": "sha256-JMKjkR7HORlPsNK4u1Jd4YBTuW/xIJWyXI4GItU2slY="
              },
              "rust": {
                "name": "health.qrisk-inputs-validate-1.0.1-rust.fune",
                "size": 52421,
                "sha256": "99a2083ac0f3f497fc5343e9fb17fa06239f2c425704aa685c2648554fca5283",
                "integrity": "sha256-3kyvC4uNiFR0i9da+olJeIbOKUue8ag0Fkp5Px6szTI="
              }
            }
          },
          "status": "unreviewed",
          "statusNote": "not for clinical use; regulatory review pending",
          "license": "NOASSERTION"
        }
      }
    },
    "health.waiting-time": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-WuUvUMaTNODK0WTO+SdeQsHh8ycJGujzwfCUCL4QajI=",
          "summary": "NHS England referral-to-treatment (RTT) wait in days and weekly bands, with the 18-week breach flag.",
          "level": 1,
          "tags": [
            "health",
            "nhs",
            "rtt",
            "referral-to-treatment",
            "waiting-list",
            "18-weeks",
            "breach",
            "elective",
            "waiting-time"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "health.waiting-time-1.0.0.fune",
            "size": 16244,
            "sha256": "198576ddbe1a3d5b288d828d5d7ecf0d8584e072efc036b8df3c44c0abf0be82",
            "languages": {
              "typescript": {
                "name": "health.waiting-time-1.0.0-typescript.fune",
                "size": 12166,
                "sha256": "9c207e1c0de58b7086c1fbcf897cdbd2d5ca7017bb324c8b743df84922363cdb",
                "integrity": "sha256-N07VrHv43ldLACD4cn8D7BSRAZL6yshIiMH1nyV/+Us="
              },
              "python": {
                "name": "health.waiting-time-1.0.0-python.fune",
                "size": 12237,
                "sha256": "71dde4b5f63e4ac1ae4863b1e3e3ea51156e5f63e693d15fa6f09be1088f14cf",
                "integrity": "sha256-SmST2KdokF9/nrKJOQCV2ILkeEvjvnx810iNgzagoSo="
              },
              "rust": {
                "name": "health.waiting-time-1.0.0-rust.fune",
                "size": 13141,
                "sha256": "17a2a0c36f9f23047eaf62967ecfbac69df0115ec63c804856627bf3fa3bf2ff",
                "integrity": "sha256-mh3Vk4kGumBjsOoFLnrcPW2qB/430XigjUIMgkyDFJ0="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-NS5HIoPF01BBRsbNRCS/43MMmV+9ZPxsJl/wciA0NTM=",
          "summary": "NHS England referral-to-treatment (RTT) wait in days and weekly bands, with the 18-week breach flag.",
          "level": 1,
          "tags": [
            "health",
            "nhs",
            "rtt",
            "referral-to-treatment",
            "waiting-list",
            "18-weeks",
            "breach",
            "elective",
            "waiting-time"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "health.waiting-time-1.0.1.fune",
            "size": 17626,
            "sha256": "07f74e0f2679def6b1c69bdf5b69be088b085710b9cb337bf662c9823b46f0b0",
            "languages": {
              "typescript": {
                "name": "health.waiting-time-1.0.1-typescript.fune",
                "size": 13548,
                "sha256": "93a24d88e0305260ff9617bfefc56f2ebaffdd7374c2f7aff52badc22054458f",
                "integrity": "sha256-FOQ6kulEgwfySl/yJT0Mm6aMe3Gi+c5hibwjEJta23Q="
              },
              "python": {
                "name": "health.waiting-time-1.0.1-python.fune",
                "size": 13619,
                "sha256": "f4ac5244831538d6d9b212d6cc05aeef658d049731526b903bff2aade97ecd40",
                "integrity": "sha256-ZssWBrJhWr5cWqr56+ngulxVEYezfZIY6Uw+gldr9os="
              },
              "rust": {
                "name": "health.waiting-time-1.0.1-rust.fune",
                "size": 14523,
                "sha256": "391ce651dd274e244261ea7685f5e6b3ffeeab79c2c30bdf291e358abdc8df5a",
                "integrity": "sha256-CCBPVfGSYCNUXZAy5A4Dtx3WusAo/6HjJpgu4JbHJNY="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "hospitality.allergen-matrix": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-fVE/77hV7ErtHRhVPlI+dUTOhGmvnDbcyZR2vtTG3q8=",
          "summary": "Which of the 14 UK major allergens a dish contains or may contain, from its ingredients' declared allergens.",
          "level": 2,
          "tags": [
            "allergens",
            "allergen-matrix",
            "food-allergy",
            "natashas-law",
            "menu",
            "food-safety",
            "fic",
            "14-allergens"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/allergens.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "hospitality.allergen-matrix-1.0.0.fune",
            "size": 40318,
            "sha256": "66a9509d8ec6a3e6966493ac91fb7ecc9534558d01df6e9be9a11cca92e7ba7c",
            "languages": {
              "typescript": {
                "name": "hospitality.allergen-matrix-1.0.0-typescript.fune",
                "size": 32500,
                "sha256": "38653a2fec318c07ab88ada834e92e8069b6c1f7a358938226e3fc85e1d895a3",
                "integrity": "sha256-avbbAUkGdUELclxPzjCqAXrJlPSNK+UiXMYjt0m6VuE="
              },
              "python": {
                "name": "hospitality.allergen-matrix-1.0.0-python.fune",
                "size": 32733,
                "sha256": "5a4669c0e42277aa4bc21687bc3d366099b2a8325a9abac16eefeff5f8030f38",
                "integrity": "sha256-bbptpoiugRml3FkHU0qMQFBKGbC1KuXzT6h1ePcLmYg="
              },
              "rust": {
                "name": "hospitality.allergen-matrix-1.0.0-rust.fune",
                "size": 34417,
                "sha256": "8a832e99f0501bf59c3d7a2d3177e8a308805b09df2db87d265d0c0f26ef72d1",
                "integrity": "sha256-QkQ9ofwkZZnp49oSybITbuO3aFbgf4UZwItSZ6S9RS8="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-QDXSWlxUyW+yZtQAN9dVy6wBnzYqaijTPVuZGQBE+fc=",
          "summary": "Which of the 14 UK major allergens a dish contains or may contain, from its ingredients' declared allergens.",
          "level": 2,
          "tags": [
            "allergens",
            "allergen-matrix",
            "food-allergy",
            "natashas-law",
            "menu",
            "food-safety",
            "fic",
            "14-allergens"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "data/allergens.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "hospitality.allergen-matrix-1.0.1.fune",
            "size": 42005,
            "sha256": "165cf7187dce0c180a786df1838560e799c843dd61036fdd85213befacfe38b2",
            "languages": {
              "typescript": {
                "name": "hospitality.allergen-matrix-1.0.1-typescript.fune",
                "size": 34187,
                "sha256": "2339f0c2fa3e82e51273861338f55ce4c3632beb759204f82a7777478c084d0f",
                "integrity": "sha256-gpmwtIzPM+IhmlQwFciY6U+wMQ3S7ZKcvYT10sxk2lU="
              },
              "python": {
                "name": "hospitality.allergen-matrix-1.0.1-python.fune",
                "size": 34420,
                "sha256": "907b8417a57cef86e3dade69d504e4aa8b9a905e74bcb016c4964d0474b8139a",
                "integrity": "sha256-qDdmMLit8gwAVsd9ZbqjcIaoSHZAOXEBAY5fV3d7c4g="
              },
              "rust": {
                "name": "hospitality.allergen-matrix-1.0.1-rust.fune",
                "size": 36104,
                "sha256": "d2288589e4cbb98aa2a9e0197f5d84d9c37b296d0d58ead8ba095d4655e7257b",
                "integrity": "sha256-0uqdSFFY2shwtI2DIDwNcRoE+4hOdhoHt2HRmrA5wI4="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "hospitality.bill-split": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-/d/CctT3ZBufnCRVXymD49bMMN57MVzjVp7/02LYn+w=",
          "summary": "Split a restaurant bill evenly, by item or by share, exactly to the penny, with the service charge shared in proportion.",
          "level": 2,
          "tags": [
            "bill-split",
            "split-the-bill",
            "restaurant",
            "share",
            "divide",
            "service-charge",
            "diners",
            "hospitality"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.sum": "^1.0.0",
            "money.amount": "^1.0.0",
            "money.allocate": "^1.0.0",
            "money.split-even": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "hospitality.bill-split-1.0.0.fune",
            "size": 33657,
            "sha256": "27a4d9bd67451248d4e95373ee278994c6967160d4e722656396787618ac3f6a",
            "languages": {
              "typescript": {
                "name": "hospitality.bill-split-1.0.0-typescript.fune",
                "size": 23884,
                "sha256": "4d005909883b363b930c241472d27decd277627ce7001c89ae9450fdcb223c38",
                "integrity": "sha256-H2PrDmF4TBMw1W63v1TQvLrMDX0Z/fo3CdXLGYKvw24="
              },
              "python": {
                "name": "hospitality.bill-split-1.0.0-python.fune",
                "size": 23999,
                "sha256": "7c7ec3b6b2676d6f76d64dc46bbb273a6b54b29732c869247c93ccfbc88e06b3",
                "integrity": "sha256-S93XaR7vd1EezCKFcO6HHh1yGaomHvDXcjD6HzSOoLE="
              },
              "rust": {
                "name": "hospitality.bill-split-1.0.0-rust.fune",
                "size": 25548,
                "sha256": "6042bbfc1eed8c61ac0fb3d40675a13c8b62304c1b653843b8f2535ea3e229ac",
                "integrity": "sha256-nrjpXf9Ch/H5eGG6CluJg1mF+zNvCbwth3h0rAqILDo="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "hospitality.cancellation-charge": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-lrTsyivZ0q0Lm02/JGaqoZzEEQqgDdnHxz9tArHaNmk=",
          "summary": "Cancellation fee for a booking from a policy of notice bands and the days of notice given.",
          "level": 2,
          "tags": [
            "cancellation",
            "cancellation-fee",
            "no-show",
            "booking",
            "hotel",
            "restaurant",
            "notice-period",
            "policy"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.sum": "^1.0.0",
            "money.amount": "^1.0.0",
            "money.apply-rate": "^1.0.0",
            "dates.days-between": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "hospitality.cancellation-charge-1.0.0.fune",
            "size": 27490,
            "sha256": "3ba4ab8923acd8d3ee6e170e44351889efac20e81a0702eea2b9c043ef56efa7",
            "languages": {
              "typescript": {
                "name": "hospitality.cancellation-charge-1.0.0-typescript.fune",
                "size": 20031,
                "sha256": "070142437836d3e0e52c28bd465dfbc4bb918b44853240b61fe3d783025fa493",
                "integrity": "sha256-8B9nCx4hnQkaLxtilLCZva58B605anWvMbiqfVUigM0="
              },
              "python": {
                "name": "hospitality.cancellation-charge-1.0.0-python.fune",
                "size": 20189,
                "sha256": "fb1dca62bec170f8d400fb7fdb8fe282382781d0d0e55cd8a526e26150b936c7",
                "integrity": "sha256-n+tQoxHUTw9yv7A1JLembahoP9qzTB0GJx4+GoosS3A="
              },
              "rust": {
                "name": "hospitality.cancellation-charge-1.0.0-rust.fune",
                "size": 21364,
                "sha256": "0edfec855f5029440e9f7a86a7cc742a629ca1bc065d7c1d7c80bce171eb4968",
                "integrity": "sha256-c94klDYRPtYkbc4HdLP8X96cplEQ6ScTG/AcrZWQmaw="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "hospitality.gross-profit-menu": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-P1Z/Md858154gYPFBnqRk9mLLYnG3Uxp30Wu3Q6nJpA=",
          "summary": "Menu gross profit (GP%) on the VAT-exclusive price, and the menu price that reaches a target GP.",
          "level": 2,
          "tags": [
            "gross-profit",
            "gp",
            "menu-pricing",
            "food-cost",
            "vat",
            "restaurant",
            "margin",
            "hospitality"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "finance.margin": "^1.0.0",
            "math.round-div": "^1.0.0",
            "finance.tax.add-vat": "^1.0.0",
            "finance.markup-price": "^1.0.0",
            "finance.tax.remove-vat": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python/menu_gross_profit.py",
            "impl/python/menu_price_for_gp.py",
            "impl/rust/menu_gross_profit.rs",
            "impl/rust/menu_price_for_gp.rs",
            "impl/typescript/menu_gross_profit.ts",
            "impl/typescript/menu_price_for_gp.ts",
            "vectors.json"
          ],
          "package": {
            "name": "hospitality.gross-profit-menu-1.0.0.fune",
            "size": 26994,
            "sha256": "f5fa6251ed00c56e15f51284d89af8438562aa2a63cb42e36a4dffcb17920e3b",
            "languages": {
              "typescript": {
                "name": "hospitality.gross-profit-menu-1.0.0-typescript.fune",
                "size": 19477,
                "sha256": "447aaf91f53b7fcf362a29c6badbd5549099b6340eaf744ae93ca85ca68a5da9",
                "integrity": "sha256-AdynoLcStBQ+wSoMCxMxzdzZV0CvG9YwcII1JOVIKIo="
              },
              "python": {
                "name": "hospitality.gross-profit-menu-1.0.0-python.fune",
                "size": 19433,
                "sha256": "eb28341ea7a52dbac38201b624d5d6d2b158ebbdc875a7f2b8975d86186bc66c",
                "integrity": "sha256-mBsq4X8TJDqUzrtYFLSGqQiTZxQQGIgmJIXGfBPMDkk="
              },
              "rust": {
                "name": "hospitality.gross-profit-menu-1.0.0-rust.fune",
                "size": 20862,
                "sha256": "987010171b4c189792283be6ca415ac3ae5e348b3518ad9f4e9bdbfd736cee23",
                "integrity": "sha256-/SPaDMeIwpK6dcomPhAFq9PKCDQcV/ud/4TLdlxD1VA="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "hospitality.occupancy-adr-revpar": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-gURgnQDJrXJ5wh/57O2gWIqQCHWVoA9aW8n/aCajpwk=",
          "summary": "Hotel occupancy, average daily rate (ADR) and revenue per available room (RevPAR) for a period.",
          "level": 1,
          "tags": [
            "hotel",
            "occupancy",
            "adr",
            "revpar",
            "average-daily-rate",
            "revenue-management",
            "kpi",
            "rooms"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "hospitality.occupancy-adr-revpar-1.0.0.fune",
            "size": 15023,
            "sha256": "a5b276ca41ec79434791e086583943b38f276c9e5b13ff990bce6edf2f1bfc4f",
            "languages": {
              "typescript": {
                "name": "hospitality.occupancy-adr-revpar-1.0.0-typescript.fune",
                "size": 10359,
                "sha256": "d734e8564f88e6c490aab25630ed57a1581c835bcef1780e68d79c4e8327acec",
                "integrity": "sha256-zYGKayTERbYSjg4xuqVMDZpKJHIs619T8u/b7D9umIU="
              },
              "python": {
                "name": "hospitality.occupancy-adr-revpar-1.0.0-python.fune",
                "size": 10578,
                "sha256": "b03e57b77f7d1afa289cb934938bbd72f1bd783f2b161bf426b2d9fb3b69e312",
                "integrity": "sha256-MrJroKTLLA4QGeaDiIVYROs6Np+DUV1IBBlOPiDj63Y="
              },
              "rust": {
                "name": "hospitality.occupancy-adr-revpar-1.0.0-rust.fune",
                "size": 11408,
                "sha256": "9665990d363ccbf198a82d1a8ff9fe308667fe73317905d3090643491ed0a85d",
                "integrity": "sha256-YIBXaUBOfbDpyVPxIAkUDM5dcbZjivGxYt0BCAaHStE="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "hospitality.recipe-cost": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-mNzw4f45HirSW7Z5j1RnuZFMJuq7NW0dB8RCGK772v8=",
          "summary": "Cost a recipe and each portion from ingredient quantities, pack sizes and pack prices, allowing for trim and waste.",
          "level": 2,
          "tags": [
            "recipe-costing",
            "food-cost",
            "cost-per-portion",
            "plate-cost",
            "yield",
            "waste",
            "kitchen",
            "menu-costing"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.sum": "^1.0.0",
            "money.amount": "^1.0.0",
            "units.convert": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "hospitality.recipe-cost-1.0.0.fune",
            "size": 32689,
            "sha256": "fe718206114a6704a750c74316e45506c8d3585dc867a9bb381d551a5d8782d6",
            "languages": {
              "typescript": {
                "name": "hospitality.recipe-cost-1.0.0-typescript.fune",
                "size": 20715,
                "sha256": "f361f06be57ae42703604a3318518023feb3a7f8eddd8d843e83fe76fcfb6c5b",
                "integrity": "sha256-8V849RblhlgKa9c6LHsRieqr44Q0cTYc2b3qaQyFpQI="
              },
              "python": {
                "name": "hospitality.recipe-cost-1.0.0-python.fune",
                "size": 20994,
                "sha256": "d4b37c6d685f5d15d9b2204fdb6c2654b65ab4d63ff5af5d7905186c689321e6",
                "integrity": "sha256-npRr1BEw1ZkWHwR+K44aSFc2OGDCx6tH7G1xv6EhovM="
              },
              "rust": {
                "name": "hospitality.recipe-cost-1.0.0-rust.fune",
                "size": 23800,
                "sha256": "c0d4fc3fb73e1df8cbdb0d7c82adc05cfa6c6b37881d4412578f5dc3b8dd263f",
                "integrity": "sha256-br1qthSWsY7sNqGznAvWOs0lJYP8MML5lqeqA5KBm5A="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-qTSneOKCqlGbl7TjfsUjB7Tk90NBy6bi5L+DrD+N9S8=",
          "summary": "Cost a recipe and each portion from ingredient quantities, pack sizes and pack prices, allowing for trim and waste.",
          "level": 2,
          "tags": [
            "recipe-costing",
            "food-cost",
            "cost-per-portion",
            "plate-cost",
            "yield",
            "waste",
            "kitchen",
            "menu-costing"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.sum": "^1.0.0",
            "money.amount": "^1.0.0",
            "units.convert": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "hospitality.recipe-cost-1.0.1.fune",
            "size": 33471,
            "sha256": "46e7b8e9d2f1a0c701b9782c76ba36ce439ddd530eb27edc42f0b66d35beea5d",
            "languages": {
              "typescript": {
                "name": "hospitality.recipe-cost-1.0.1-typescript.fune",
                "size": 21491,
                "sha256": "3353904067033d05b03711d4eb9917bc505935971cde5d131da749c0f97c959f",
                "integrity": "sha256-T6KzUOOrywDjHG7I1MV7GgBUpGidmlED3II3E1Rm8bs="
              },
              "python": {
                "name": "hospitality.recipe-cost-1.0.1-python.fune",
                "size": 21776,
                "sha256": "47942cdd96af7179de06b41ed4e0147313ada896ba1c66f0014fc9432f10e9f0",
                "integrity": "sha256-LoByxLEhYuPmF2qVzF+JZeC0g7ScbNNWpCoYKKOIM9k="
              },
              "rust": {
                "name": "hospitality.recipe-cost-1.0.1-rust.fune",
                "size": 24576,
                "sha256": "1bfc30f2352ae02b051adef0dede30ae494d88fa184a1528967cab00291d48a4",
                "integrity": "sha256-ZQbRrL8YFeid9ZCVtGjIyWPovp8yVbP5fJrcleP/tXU="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "hospitality.recipe-scale": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-KXISTfMVifgdDZYYzu8iWIsqpFHayYWAlJKIThu61fI=",
          "summary": "Scale a recipe to a new number of portions, tidying metric units (g to kg, mL to L) and rounding to kitchen precision.",
          "level": 1,
          "tags": [
            "recipe",
            "scale",
            "scaling",
            "portions",
            "servings",
            "kitchen",
            "conversion",
            "multiply-recipe"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "units.convert": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "hospitality.recipe-scale-1.0.0.fune",
            "size": 25056,
            "sha256": "395e9476e9dc68534331a5c2b26904d45050e60834242409350f723763cd9f93",
            "languages": {
              "typescript": {
                "name": "hospitality.recipe-scale-1.0.0-typescript.fune",
                "size": 14554,
                "sha256": "63c99ca928a890a8c8e2133525dec057934e1f84406616e4d8e3610919352a8f",
                "integrity": "sha256-3merGNyQBRujnQBlKBBa3oICHlRVkiAaMIPgq5EsjfY="
              },
              "python": {
                "name": "hospitality.recipe-scale-1.0.0-python.fune",
                "size": 14757,
                "sha256": "db258041756af6c7072e7c3738571f1ca44cd6f1788749f8f0b06d8f3de21292",
                "integrity": "sha256-8iPGewIcKho7p/1jz4BQ+0oO8mgVZvVchJywWfrnwxQ="
              },
              "rust": {
                "name": "hospitality.recipe-scale-1.0.0-rust.fune",
                "size": 17107,
                "sha256": "9fb7ba86c1f8ec5dc0882dfc7c66b199a33ff4553d49847a8e448261950cbc8f",
                "integrity": "sha256-PJGo6s0Uzn6f5rO8WIVb4W8JeNt2J0OJRnFCpZInDZo="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-iEJJo1BKhp91/uJQJftC9pISxJTypczxtbeQd9cp78Y=",
          "summary": "Scale a recipe to a new number of portions, tidying metric units (g to kg, mL to L) and rounding to kitchen precision.",
          "level": 1,
          "tags": [
            "recipe",
            "scale",
            "scaling",
            "portions",
            "servings",
            "kitchen",
            "conversion",
            "multiply-recipe"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "units.convert": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "hospitality.recipe-scale-1.0.1.fune",
            "size": 25349,
            "sha256": "f3dadaf13f24e70de045b41a408f23310643fa027ec7e91b2b134e6e012c2847",
            "languages": {
              "typescript": {
                "name": "hospitality.recipe-scale-1.0.1-typescript.fune",
                "size": 14845,
                "sha256": "fe265e9879820946793dd784b90423fb2e41aaa2700fa08543f8009a7904d9b2",
                "integrity": "sha256-3pJ9X0gvqXU6k9L/fuqXUYOLqP6R4zO8PwMujM1onUo="
              },
              "python": {
                "name": "hospitality.recipe-scale-1.0.1-python.fune",
                "size": 15050,
                "sha256": "91b71997922c7a8d6f59b49e5eaaf5ebb6c9dd37ea8b61639e92086282dfa73d",
                "integrity": "sha256-OZxYpCgyWKaIQtN7CBXG+oLRs8Sl3Beda5tRm6Pq6q4="
              },
              "rust": {
                "name": "hospitality.recipe-scale-1.0.1-rust.fune",
                "size": 17398,
                "sha256": "f6374d4fc817c16ad1f91819cbe54c6fe2b7c5db46485f8e078a99832bec053e",
                "integrity": "sha256-kMPP3erHlTskF5+3Iv0uIbp0nLsCI/hInlo7CQS0mJE="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "hospitality.room-rate": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-sFgZBrIbOYUTznkeMBR4RvRzzO+2nNAWdeAUgh5vX2k=",
          "summary": "Price a hotel stay night by night from the caller's seasonal, day-of-week rate table, less any length-of-stay discount.",
          "level": 2,
          "tags": [
            "room-rate",
            "hotel",
            "nightly-rate",
            "seasonal-pricing",
            "weekend-rate",
            "length-of-stay",
            "discount",
            "accommodation"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.add": "^1.0.0",
            "money.sum": "^1.0.0",
            "money.amount": "^1.0.0",
            "dates.add-days": "^1.0.0",
            "money.apply-rate": "^1.0.0",
            "dates.day-of-week": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "hospitality.room-rate-1.0.0.fune",
            "size": 34278,
            "sha256": "208333290373505148e2a6ca259cfffd40928fb3539a293ed8d040da0440476b",
            "languages": {
              "typescript": {
                "name": "hospitality.room-rate-1.0.0-typescript.fune",
                "size": 24703,
                "sha256": "87524ba2720a51f6790b716eee43636a16ea3b4751a6305014369a89f6ce8fdf",
                "integrity": "sha256-Gk9Tpmc3pZCDgsSCbinU5XXykpgjJC5a4tfa/Vw7uyI="
              },
              "python": {
                "name": "hospitality.room-rate-1.0.0-python.fune",
                "size": 24992,
                "sha256": "2f7bcd72404494613b992a9a7692d88f6438c85e9f2c31e2a1a177ef55a3d4ab",
                "integrity": "sha256-ToE52lX1OFauTWy9SNwPj6In639r9PjkBBs9QAy1jgU="
              },
              "rust": {
                "name": "hospitality.room-rate-1.0.0-rust.fune",
                "size": 26985,
                "sha256": "38e9a2183de1844993cff70f2ae1062a9eb70dd3866405dc5622d62a7cb21df4",
                "integrity": "sha256-PEjIpEZ5aR4UvGKPpOV8BShIwe4zrnbRdieiWWmTmnw="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "hospitality.service-charge": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-78w5Yi5A55M7Ns2bQnaVg7UIlzAfLLm8atcw3KyjGQs=",
          "summary": "A discretionary service charge on a bill's eligible lines, as a basis-point rate with explicit rounding.",
          "level": 1,
          "tags": [
            "service-charge",
            "gratuity",
            "tip",
            "restaurant",
            "bill",
            "hospitality",
            "optional-service"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.add": "^1.0.0",
            "money.sum": "^1.0.0",
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "money.apply-rate": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "hospitality.service-charge-1.0.0.fune",
            "size": 18941,
            "sha256": "2a0ae152d790183164c02f7b44a848c2d7815696806025aca498132d1d764c3c",
            "languages": {
              "typescript": {
                "name": "hospitality.service-charge-1.0.0-typescript.fune",
                "size": 14690,
                "sha256": "d46d3cf621924825f07bf0a67891d8028b106bd39ef6d9b9a9a30d06419827cf",
                "integrity": "sha256-6fPbtji5LDuntqcUrgCUXqlXRhHoeaMGTusVIxhBYIM="
              },
              "python": {
                "name": "hospitality.service-charge-1.0.0-python.fune",
                "size": 14678,
                "sha256": "00c8bddb6f54ec6f2f3c4523d2d831a1264eed9a80e953b13100ca0efafc4770",
                "integrity": "sha256-dvUmHtLg/eqdcVZTT4lGn/26+fcjaM0PndGBa6EobOg="
              },
              "rust": {
                "name": "hospitality.service-charge-1.0.0-rust.fune",
                "size": 15617,
                "sha256": "fe902a446b66c79bbd34421b6a73fb68e0c522cebabf5cc048446087f1eafbb4",
                "integrity": "sha256-98Ews6R316vpm2Q4hKFZl6TEwfoqQCmly4czqFDry+A="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "hospitality.tourist-tax": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-OLM8j6NY6ac72/OULRNIcfVc34I7FPYV1rxYsbvMneI=",
          "summary": "Visitor levy (tourist tax) on an overnight stay: Edinburgh's 5%, Cardiff's per person per night, or a caller's own rule.",
          "level": 2,
          "tags": [
            "tourist-tax",
            "visitor-levy",
            "city-tax",
            "accommodation-tax",
            "hotel",
            "edinburgh",
            "wales",
            "overnight-stay"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.sum": "^1.0.0",
            "money.amount": "^1.0.0",
            "dates.add-days": "^1.0.0",
            "money.apply-rate": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/visitor-levies.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "hospitality.tourist-tax-1.0.0.fune",
            "size": 53126,
            "sha256": "b9b7715fc3271365e6a7223046d761509829d32cc436557af815ba0530431232",
            "languages": {
              "typescript": {
                "name": "hospitality.tourist-tax-1.0.0-typescript.fune",
                "size": 38890,
                "sha256": "7abbbeabb2968001aa6a9ce530577d74910e29466cbb4d1076df4a195d708f9d",
                "integrity": "sha256-IFeWvsB2biYRu53eoiE5ETQZi8TjVGkm2/bDVZzeX8M="
              },
              "python": {
                "name": "hospitality.tourist-tax-1.0.0-python.fune",
                "size": 39150,
                "sha256": "9279f1e370a7e032e73dbd4b4c1076a5eaabe9f6ceff3403cff15e54ed078057",
                "integrity": "sha256-LxW7It14l8M+vu8rEhO5m+3XjfaWp+2zQCo697sLzl0="
              },
              "rust": {
                "name": "hospitality.tourist-tax-1.0.0-rust.fune",
                "size": 41762,
                "sha256": "e09a755e3b00303fa0f5876f734454e715eee46d0688f5620a4e00afd668ee93",
                "integrity": "sha256-heiiF3COY4Q+rHv+qIBkp+miP/nmeD9PsY6/1s98QrE="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-uaiFZngukkOUsiZl6lC14e8IgcyHaPmi7JQ6LHm7rsM=",
          "summary": "Visitor levy (tourist tax) on an overnight stay: Edinburgh's 5%, Cardiff's per person per night, or a caller's own rule.",
          "level": 2,
          "tags": [
            "tourist-tax",
            "visitor-levy",
            "city-tax",
            "accommodation-tax",
            "hotel",
            "edinburgh",
            "wales",
            "overnight-stay"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.sum": "^1.0.0",
            "money.amount": "^1.0.0",
            "dates.add-days": "^1.0.0",
            "money.apply-rate": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "data/visitor-levies.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "hospitality.tourist-tax-1.0.1.fune",
            "size": 53703,
            "sha256": "c937463d15ee80caed0d4760f6652b904bb77b22ef7e51defcef156eab2ea146",
            "languages": {
              "typescript": {
                "name": "hospitality.tourist-tax-1.0.1-typescript.fune",
                "size": 39467,
                "sha256": "cf327e11016cdb6efd781fc0b2bb127ff4e373b79398aca2a84faf25da4b380b",
                "integrity": "sha256-KnmX/spXOtnx4Vm9QOlzcn9G7ovwb46UHO61AooHvPQ="
              },
              "python": {
                "name": "hospitality.tourist-tax-1.0.1-python.fune",
                "size": 39727,
                "sha256": "37bd26bd17bc3fbd26e5e249f240783d6c31f10ebc9764cc9baeff61eb5f6d0a",
                "integrity": "sha256-i/uGgjIiY876p2VFlWm5ISr8BmdzKhI09t+HM1TUzDw="
              },
              "rust": {
                "name": "hospitality.tourist-tax-1.0.1-rust.fune",
                "size": 42339,
                "sha256": "c7e2287b56a50f773e3c24b1a32559040d4df08b634d98904759fa19930cee5c",
                "integrity": "sha256-Y5BJTBE+BSDrFE5hlhIrKYPEc2Hcr0dJIszY8DgIblA="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "hospitality.tronc-allocation": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-r+JBbRcJp6qGCxd0RKVDgCCxxe2gBFzMZ+bxlfyYy+c=",
          "summary": "Share a tips pool (tronc) between staff by hours worked, points, or hours times points, exactly to the penny.",
          "level": 2,
          "tags": [
            "tronc",
            "tips",
            "gratuities",
            "tip-pool",
            "service-charge",
            "staff",
            "allocation",
            "hospitality"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "money.allocate": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "hospitality.tronc-allocation-1.0.0.fune",
            "size": 23042,
            "sha256": "2a06249aa9fe592eb58b2943d4d639adb5cac80e12b5c5743c97efbeab417afe",
            "languages": {
              "typescript": {
                "name": "hospitality.tronc-allocation-1.0.0-typescript.fune",
                "size": 17222,
                "sha256": "2b0fde1e849fadcca20b13333e64b51a4daf49fb7fbc9c2146cb342dd3d28ef7",
                "integrity": "sha256-z1Noixm53wZET6+2DlfbODUfWsrHCWDkpsQKSMv3bG4="
              },
              "python": {
                "name": "hospitality.tronc-allocation-1.0.0-python.fune",
                "size": 17302,
                "sha256": "f9c0e9aa8973aeeacd890f4f216060f7f274ca451931e92fda6f77bb22bfaa4a",
                "integrity": "sha256-Er9lBMGPGWouesJwUmqi6aaDJP8TwT4fPxOVLxmjl44="
              },
              "rust": {
                "name": "hospitality.tronc-allocation-1.0.0-rust.fune",
                "size": 18260,
                "sha256": "5415855f96fb5ec24c376febfbd5090b1eb996e0511ace5b76afe79d9507ef25",
                "integrity": "sha256-0AUUJOL/CtXzOLR3yzQ33O3l3VIhvXSXdz+1eWgnRrc="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "hr.absence-bradford-factor": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-gnfZ2GV1VTXCruqpXNGJyxEbH0CfM19FEGn8MpkKnMs=",
          "summary": "Bradford factor for a set of absence spells: spells squared times total days, which weights frequent short absences.",
          "level": 1,
          "tags": [
            "hr",
            "absence",
            "sickness",
            "bradford-factor",
            "attendance",
            "spells",
            "score"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "hr.absence-bradford-factor-1.0.0.fune",
            "size": 6247,
            "sha256": "2a1f3a106d2a361a144113adb6e481be6a0e58e4c254009219961a1e8d166876",
            "languages": {
              "typescript": {
                "name": "hr.absence-bradford-factor-1.0.0-typescript.fune",
                "size": 4635,
                "sha256": "068638a39cfd9c35f3c7d561ab9f72a67089a4e2435ecd9fb66207f7e85df387",
                "integrity": "sha256-kDEl3roSrpDGZ985H5hxoIObv50a/djQJPVCRyiZMA0="
              },
              "python": {
                "name": "hr.absence-bradford-factor-1.0.0-python.fune",
                "size": 4669,
                "sha256": "03361022355437797f0b769dfe21d39c08386ccb8201ccd402804befacfe7313",
                "integrity": "sha256-HU9A+mjB1isr589NjGAmf1z13WTWanfBWMn7F/1D5pg="
              },
              "rust": {
                "name": "hr.absence-bradford-factor-1.0.0-rust.fune",
                "size": 5145,
                "sha256": "14b37b04ef96a45d25f8399454044176d3ad46be0433245089fd324249de7bd0",
                "integrity": "sha256-c+vGdEBCRoVNa/SFJ8NjE5aWWqBg7aWy+bGbapeXO2s="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "hr.length-of-service": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-1797rd5HCSiSSuekytdlp7El2pFFki/2WBekStYJJlY=",
          "summary": "Continuous service between two dates in completed years, months and days, counting both end dates.",
          "level": 1,
          "tags": [
            "hr",
            "service",
            "tenure",
            "length-of-service",
            "continuous-employment",
            "employment",
            "anniversary",
            "years-of-service"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0",
            "dates.add-months": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "hr.length-of-service-1.0.0.fune",
            "size": 9867,
            "sha256": "ffcde6ff77b8bcb654ea1aeb5ac3a10f4e19609b983b285e8bd386b8e4d1dc82",
            "languages": {
              "typescript": {
                "name": "hr.length-of-service-1.0.0-typescript.fune",
                "size": 6877,
                "sha256": "7606b2691ae2dc6a78e15ba43de78910407f012712b33ee10d861203a77479e9",
                "integrity": "sha256-fsU+aUl+N7jXaurnHka9LhU+Kcrtkvqx5zWYfBCK0/c="
              },
              "python": {
                "name": "hr.length-of-service-1.0.0-python.fune",
                "size": 6817,
                "sha256": "0f54aa133c2d0045aedafa563c2c85d6573e97107264d62d5f5471cc70d66ace",
                "integrity": "sha256-3XVeWS+pObSXHLjbse+SAiitrk3X+HyPywjXrj9OdQ8="
              },
              "rust": {
                "name": "hr.length-of-service-1.0.0-rust.fune",
                "size": 7383,
                "sha256": "6f1d166c0232a2085846a91f899ad907fb17e6a96d438123bc3de690fee1056c",
                "integrity": "sha256-x1Awb6rRn+yl4PNvvRTT0dEB+sUOQWBxnJEAAljXezc="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "http.retry-after": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-zfRNx6GAha2MTwITopjWTCC44vvAEkS+/mxrpWGLdIA=",
          "summary": "Seconds to wait from an HTTP Retry-After header (delay-seconds or an HTTP date), or null if missing or malformed.",
          "level": 1,
          "tags": [
            "retry-after",
            "http",
            "header",
            "rate-limit",
            "429",
            "503",
            "backoff",
            "throttle"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "time.iso-to-unix": "^1.0.0",
            "dates.is-leap-year": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "http.retry-after-1.0.0.fune",
            "size": 14698,
            "sha256": "441e33fb277a014ea37cbffe29dc8e4ca7354b82390b91db5d0d68e5a6d79a3e",
            "languages": {
              "typescript": {
                "name": "http.retry-after-1.0.0-typescript.fune",
                "size": 9170,
                "sha256": "5e349d64b2618be65a48ef0179fac8ad2c015d7ae1b2c54e7e198079ff1c36ae",
                "integrity": "sha256-amIfLoBr/HRM+VckOWl1wsZ5A07S0JVjmlDNgq0eq9Q="
              },
              "python": {
                "name": "http.retry-after-1.0.0-python.fune",
                "size": 8730,
                "sha256": "ff2f1d05d3c7c41ef28a3ed435edac604ee0f85b097f8ca5f150891a81ea4e69",
                "integrity": "sha256-r+E/Un2yecP0tLj2Ppa898ET0Yse0RomlufvBfcPhOo="
              },
              "rust": {
                "name": "http.retry-after-1.0.0-rust.fune",
                "size": 9292,
                "sha256": "4c6758bf84cf9f6c19cf4a595e3f4afab5385a1c183884667ed976513616a2f1",
                "integrity": "sha256-AU/o1223/YZv6zHJ+Dt2/RyaqyPMeMPIoNzkePaWNiU="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "insurance.age-banding": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-AFi/ASb6Kxqa/fJSyPo7ue84TDcAe4T4LMRuhZufBIc=",
          "summary": "Age at policy inception and the rating band it falls in, from a table of age bands.",
          "level": 1,
          "tags": [
            "insurance",
            "age",
            "age-band",
            "rating-factor",
            "inception",
            "date-of-birth",
            "driver-age",
            "banding"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.age": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "insurance.age-banding-1.0.0.fune",
            "size": 20379,
            "sha256": "1fa8cf97116e325b222b3dadce90daedf0ce8f6b20be718c01ed06f92392b407",
            "languages": {
              "typescript": {
                "name": "insurance.age-banding-1.0.0-typescript.fune",
                "size": 15467,
                "sha256": "127e1a1d21ceebe95eb0f3c4ec9d20a0fe99b8ddbb7c3171977d689a05c80f16",
                "integrity": "sha256-Zja+PsQxBAEyI2tqJi4X95DJWS8aZaEgCw8WbubQnQk="
              },
              "python": {
                "name": "insurance.age-banding-1.0.0-python.fune",
                "size": 15432,
                "sha256": "62be7d9de9f8898298bc4600be83d851141de5fd8453f87c0daf1b221da9391e",
                "integrity": "sha256-MlTNCZzQhSPZPPTx9VW2XiCco8NdKp/5nQSNGIEoNxc="
              },
              "rust": {
                "name": "insurance.age-banding-1.0.0-rust.fune",
                "size": 16404,
                "sha256": "f1c822ab1cc58bc8ccfd0642d945a6aef9422c0754c2a2e4dd5f036326d1180c",
                "integrity": "sha256-nb9UUq99k5KKBMJuQ4BP+aEB4IRUQ3cPYpNDldWBTNs="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-OwbHDJQ/yNm4MvD5y0HUr4mrPLleLgLA1/ga9Cf/hvM=",
          "summary": "Age at policy inception and the rating band it falls in, from a table of age bands.",
          "level": 1,
          "tags": [
            "insurance",
            "age",
            "age-band",
            "rating-factor",
            "inception",
            "date-of-birth",
            "driver-age",
            "banding"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.age": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "insurance.age-banding-1.0.1.fune",
            "size": 21490,
            "sha256": "4105698c1939caa7e55028e28b250af68328f96d6a2bf614fe066223725563b3",
            "languages": {
              "typescript": {
                "name": "insurance.age-banding-1.0.1-typescript.fune",
                "size": 16578,
                "sha256": "919c1f5cd77bdffae992d3caf04b98968c1371744446a79224efd0636ff6a559",
                "integrity": "sha256-ycToIyxuNiRZtCDHywJ7cZe5K84XFVpg3DLSqQxFJVQ="
              },
              "python": {
                "name": "insurance.age-banding-1.0.1-python.fune",
                "size": 16543,
                "sha256": "7c15f8b270633afd4d1bf9635322cf7d8d7b1011812b54cd3ecb2fbec2f2ce01",
                "integrity": "sha256-A2bEwkjUG6qbYF6uMvykvdLLYrj+E4/E+33k++WI9pM="
              },
              "rust": {
                "name": "insurance.age-banding-1.0.1-rust.fune",
                "size": 17515,
                "sha256": "6046aab5127176ffa2fe4221894131c80fccafc45ccfccfe4bdc2810865393be",
                "integrity": "sha256-4ofkXEF4IeCltuFhvOZ7zVrav+vJ4T+4rIfr5g721mY="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "insurance.claim-reserve": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-lLxYj+1jlelKpdaL3/6G5dSPouQ7fF7Vz0tIx0Lscnk=",
          "summary": "Claim reserve history: paid, recovered, outstanding and incurred after each transaction, and the movement.",
          "level": 2,
          "tags": [
            "insurance",
            "claims",
            "reserve",
            "case-reserve",
            "outstanding",
            "incurred",
            "paid",
            "claims-movement"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "dates.add-days": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "insurance.claim-reserve-1.0.0.fune",
            "size": 27810,
            "sha256": "09a69f155083930260e05e9d44f683c59f91be69e9928b61feb994038927b87e",
            "languages": {
              "typescript": {
                "name": "insurance.claim-reserve-1.0.0-typescript.fune",
                "size": 21100,
                "sha256": "eb89f37a4a5436e4c54e29e3dc880a87f4d221d80497df5bbc4094d029a9a6ce",
                "integrity": "sha256-p64sN7ccTc6wZmCONv5/lXtSWplpyhqUJ0WThjB/LqQ="
              },
              "python": {
                "name": "insurance.claim-reserve-1.0.0-python.fune",
                "size": 21203,
                "sha256": "1cf1beb4b7de276d07819f6c47cc4c292a05e2771ea492a421e758b0e7eded07",
                "integrity": "sha256-lfC/S/VGsxHmi2igqOh/v8Dj+KlLCSvhbo/jdzyn+Lo="
              },
              "rust": {
                "name": "insurance.claim-reserve-1.0.0-rust.fune",
                "size": 22475,
                "sha256": "ed2c375f4796604fc2b435b1b98f32af7e5cfc68a727e04a05e65f827c3dd1e0",
                "integrity": "sha256-B/64n3RqXXu8/Hxg42QI444YZtUDH25mo3YCClYuYtE="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-i95OMGaJHG1Xg1LWeN1zUEFbRo1IOAvpmnsk9zjaiNM=",
          "summary": "Claim reserve history: paid, recovered, outstanding and incurred after each transaction, and the movement.",
          "level": 2,
          "tags": [
            "insurance",
            "claims",
            "reserve",
            "case-reserve",
            "outstanding",
            "incurred",
            "paid",
            "claims-movement"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "dates.add-days": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "insurance.claim-reserve-1.0.1.fune",
            "size": 28921,
            "sha256": "36fadf22a15bc9a0a8ff4a780f9c86d616fdf776b90d5c8689674c66f2246539",
            "languages": {
              "typescript": {
                "name": "insurance.claim-reserve-1.0.1-typescript.fune",
                "size": 22211,
                "sha256": "aa3c6fe5e25ce2b78fe8f2d2c51e1b4c4b74f6277ee744d1a6a353d4b3ae0481",
                "integrity": "sha256-bTnA5jla78OKoeCUH7ppp2eHEKsvXbpplWdayP/ZIhk="
              },
              "python": {
                "name": "insurance.claim-reserve-1.0.1-python.fune",
                "size": 22314,
                "sha256": "d933520f55cdff7f69cce541ceae0293288a49d82f436808e1ae6bebc3a970a4",
                "integrity": "sha256-2EhKoCvxCpbtYpAkxEGcn+eo3EUJLuVg6/qQ7hQAjfA="
              },
              "rust": {
                "name": "insurance.claim-reserve-1.0.1-rust.fune",
                "size": 23586,
                "sha256": "71a0033c2ce82ab396a7afa83942392fc4646db5f79d4237ed5394f4ccf799ed",
                "integrity": "sha256-Bhrua5W3hmJgeEFbztVpZEoFXSoeJdC0Y3Cly7vGcGA="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "insurance.excess-apply": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-7gDsJAgOnsxuhUMm+9oj4sIPjBdSKXb4ebGGT77jC1g=",
          "summary": "Claim payout after the compulsory and voluntary excess, capped at the policy limit.",
          "level": 1,
          "tags": [
            "insurance",
            "excess",
            "deductible",
            "claim",
            "payout",
            "settlement",
            "limit-of-indemnity"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "insurance.excess-apply-1.0.0.fune",
            "size": 21466,
            "sha256": "f10ce7183801561fb02fd79616901eacf609c468e311666f309cc7bbe289fcbb",
            "languages": {
              "typescript": {
                "name": "insurance.excess-apply-1.0.0-typescript.fune",
                "size": 16169,
                "sha256": "b9152d804dc1e94fc4f99ec2875f4e3173a5c38238b78b1f9766c69a024e6b84",
                "integrity": "sha256-OtK6KWC7mAfXtdLkPR0rht1duTM+A+4tgzP4bRegNrE="
              },
              "python": {
                "name": "insurance.excess-apply-1.0.0-python.fune",
                "size": 16220,
                "sha256": "ac40f118ad1dc1decf99c1e11e4fd22dbe069b7984cd9b83efe0874deeb13d52",
                "integrity": "sha256-8zWRnHd1oIdnwOumAcsXwrAtsm+kMXdSA/Tgiy0Yp9A="
              },
              "rust": {
                "name": "insurance.excess-apply-1.0.0-rust.fune",
                "size": 17047,
                "sha256": "dbf9fc1920e74292992133fa23b5f416dd7a3cb8416940751b34199fa4f0ed63",
                "integrity": "sha256-zyJ44QTfzbBaQwbq8TiXie8Fl+5LNVW06KSp6ErnE1I="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-xIvOyXwJF66Z0z8hiNLpDajwvQphJGvpT8qeHBRHP04=",
          "summary": "Claim payout after the compulsory and voluntary excess, capped at the policy limit.",
          "level": 1,
          "tags": [
            "insurance",
            "excess",
            "deductible",
            "claim",
            "payout",
            "settlement",
            "limit-of-indemnity"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "insurance.excess-apply-1.0.1.fune",
            "size": 22577,
            "sha256": "7c4367145a5a64ec36e9208bdc8f7522251b18bf68a78e588c94314952f4e6b1",
            "languages": {
              "typescript": {
                "name": "insurance.excess-apply-1.0.1-typescript.fune",
                "size": 17280,
                "sha256": "1b4c615669ad99fa96fc7234bd801e1e1f4347079de9d41e32b76c815026ed65",
                "integrity": "sha256-YZirqV9aC/pHxJDpWUzvfToGgi2ZxSZ3S35qjP+SxQo="
              },
              "python": {
                "name": "insurance.excess-apply-1.0.1-python.fune",
                "size": 17331,
                "sha256": "99307ed1fd6b68666036a068d3a5caf10ac7d8c16761e974d0e63d92eacd5624",
                "integrity": "sha256-P0S8EzAVmw/DiptW4tAzrnonacOljbG7qLvBGx+N4TM="
              },
              "rust": {
                "name": "insurance.excess-apply-1.0.1-rust.fune",
                "size": 18158,
                "sha256": "dc673f524357f9e843506d6ff6f615dcabdb9b53316d90fb5b8540589e57f34b",
                "integrity": "sha256-Xlc5OIRR9A+qZ9zEGfWVv00poOOdFGVPG8/dumVnyIU="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "insurance.instalment-plan": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-aZmZBULNsJZCbzj7uhOZqT0MIuaI2g4vhjTSmvcLzTQ=",
          "summary": "Pay a premium by monthly instalments: deposit, flat credit charge, instalments exact to the penny, and the APR.",
          "level": 2,
          "tags": [
            "insurance",
            "instalments",
            "monthly-payments",
            "premium-finance",
            "credit-charge",
            "deposit",
            "apr",
            "direct-debit"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "lending.apr": "^1.0.0",
            "money.amount": "^1.0.0",
            "money.apply-rate": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "insurance.instalment-plan-1.0.0.fune",
            "size": 26311,
            "sha256": "afe8693073f11d1cd4a77d2b844eb79b19dcd60529a448e4d68c802f940fb901",
            "languages": {
              "typescript": {
                "name": "insurance.instalment-plan-1.0.0-typescript.fune",
                "size": 18797,
                "sha256": "fed965cd9cfcd531d9a9ffed2a214387297de5f81a41feb6770708d1aca17a23",
                "integrity": "sha256-Ln8YfPmMOpufPVXz7zu0PgmIF9LgsqubZIUXMlXEMHQ="
              },
              "python": {
                "name": "insurance.instalment-plan-1.0.0-python.fune",
                "size": 18931,
                "sha256": "f222850354eca33d920c0291c8b2c0e784a9095c9699d2dcc9e45d70b929a17b",
                "integrity": "sha256-FC9bScQu6UVQaHzvYvr7oaWR0Ldtw3YR/nUnbnuUeWY="
              },
              "rust": {
                "name": "insurance.instalment-plan-1.0.0-rust.fune",
                "size": 20105,
                "sha256": "a28e72685e651138b807d83b0b71a81bac74f9690d1652b003e45e0835ea335b",
                "integrity": "sha256-5XCEy7tyDdjv0nkBrWEHCssiID7wgfWVCnDkw1HsJtc="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-mwK1hP38MOIX/2RNIXLcJ41ygD6gKkS/n02do1vo2Rg=",
          "summary": "Pay a premium by monthly instalments: deposit, flat credit charge, instalments exact to the penny, and the APR.",
          "level": 2,
          "tags": [
            "insurance",
            "instalments",
            "monthly-payments",
            "premium-finance",
            "credit-charge",
            "deposit",
            "apr",
            "direct-debit"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "lending.apr": "^1.0.0",
            "money.amount": "^1.0.0",
            "money.apply-rate": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "insurance.instalment-plan-1.0.1.fune",
            "size": 27422,
            "sha256": "73ebf4fcf9f102c86ff18e2e44f3495f7f985cc4dd9631f7b89d73928641c6d3",
            "languages": {
              "typescript": {
                "name": "insurance.instalment-plan-1.0.1-typescript.fune",
                "size": 19908,
                "sha256": "9a0ce70765ef7551ee7cfc91d763e62537fde52f71c2b30d0b8bce808653db6a",
                "integrity": "sha256-dNm2bIVVftwf07jWYbLMMr2c6zHZLiUgkOMxWy5qjNI="
              },
              "python": {
                "name": "insurance.instalment-plan-1.0.1-python.fune",
                "size": 20042,
                "sha256": "6e5a484d60f64af93b72eb1073e38d74cd8f958f92413a068a8ab69d1ad1924c",
                "integrity": "sha256-Gui4rHFZ45E8mfOEqZi5+HENj9x5AuxIf2tlwfVoiFk="
              },
              "rust": {
                "name": "insurance.instalment-plan-1.0.1-rust.fune",
                "size": 21216,
                "sha256": "d86090ca93aaff634878dc21ccddeacaa561bebc75fe94b1c8f5ae550f33c7a3",
                "integrity": "sha256-eH0Zq00aoEOcoDs1hyTjM2N9Eon23bjf+pe8U0iYcBU="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "insurance.ipt": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-rn8nWqBFjN5355CkNbrFvbCaVNkLKl5u008RxgyWMD0=",
          "summary": "UK Insurance Premium Tax at the standard or higher rate in force on a date, added to or taken out of a premium.",
          "level": 2,
          "tags": [
            "insurance",
            "ipt",
            "insurance-premium-tax",
            "premium-tax",
            "tax",
            "gb",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/ipt-rates.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "insurance.ipt-1.0.0.fune",
            "size": 27743,
            "sha256": "ce5ea01e297a92e99d3f2387552203466e2ba1b08834819886754165dfe430a7",
            "languages": {
              "typescript": {
                "name": "insurance.ipt-1.0.0-typescript.fune",
                "size": 20804,
                "sha256": "a94da894e6e7af21b3b643401b4f8a8d5e5faf6eed715a711601c0fbf3b85328",
                "integrity": "sha256-KrZZtBDAPCbisTKhvcKM5VQOZ3whNyvcnzcaAI5ojSQ="
              },
              "python": {
                "name": "insurance.ipt-1.0.0-python.fune",
                "size": 20796,
                "sha256": "6d2b2656220498d185fe5c415f3a6cf89800065566f378812acb3958794dc822",
                "integrity": "sha256-FA78m3s9uf4oUwKveHG25a1Ig034MJYpCtQbfsd+pkw="
              },
              "rust": {
                "name": "insurance.ipt-1.0.0-rust.fune",
                "size": 22085,
                "sha256": "0a23537e13c297118a6005ec29c3a2ba8ad0d9b07e26d95dc6fb6bd5d9460026",
                "integrity": "sha256-ovhYm1zWqkNv16Ux8OWSwT34WqWBxlMt8aApsbUNJwo="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-3VkM+Yw6xjSSwK6TuZ4zNSEUKu+2fojxG0BGuMxDrUc=",
          "summary": "UK Insurance Premium Tax at the standard or higher rate in force on a date, added to or taken out of a premium.",
          "level": 2,
          "tags": [
            "insurance",
            "ipt",
            "insurance-premium-tax",
            "premium-tax",
            "tax",
            "gb",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/ipt-rates.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "insurance.ipt-1.0.1.fune",
            "size": 28285,
            "sha256": "73e6506693fac418c1882c188e97a4232d869190ddeef1d550c2e58623bd1c22",
            "languages": {
              "typescript": {
                "name": "insurance.ipt-1.0.1-typescript.fune",
                "size": 21338,
                "sha256": "9a7038d806ffcc48652fc09eca343145dd128f9b2f1511f33143e67e49eb4d03",
                "integrity": "sha256-BMh8Cdlcwyb+QUbzzLLapssODHxldkCR8RgKFSVSIJg="
              },
              "python": {
                "name": "insurance.ipt-1.0.1-python.fune",
                "size": 21338,
                "sha256": "f7df9a1e46b71bbcaee992dc7512aec386c774e1369ba75bbd2ae9b76c232f84",
                "integrity": "sha256-VHYHfqStiElkLk29yQeZJdPRh/SYFrhe2JFSTIhKQQA="
              },
              "rust": {
                "name": "insurance.ipt-1.0.1-rust.fune",
                "size": 22619,
                "sha256": "48d5c34e7e906f29e2fddf34a6db4ac8d9dcfe3d258d30fc0b38cb3b43c9562c",
                "integrity": "sha256-uMvYANV1letqR9v/3L3AOJn1RG9ckCXFOCe0GeURx2I="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.2": {
          "integrity": "sha256-jyqnY0+yS9+qJRjLLDVKE/gdUFCUk0H2xywAeo8Cn80=",
          "summary": "UK Insurance Premium Tax at the standard or higher rate in force on a date, added to or taken out of a premium.",
          "level": 2,
          "tags": [
            "insurance",
            "ipt",
            "insurance-premium-tax",
            "premium-tax",
            "tax",
            "gb",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "data/ipt-rates.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "insurance.ipt-1.0.2.fune",
            "size": 29815,
            "sha256": "8d55d7448ac7e71939df07dced4b27e75fd73078fb9b6878a2c1d028dd2adbbb",
            "languages": {
              "typescript": {
                "name": "insurance.ipt-1.0.2-typescript.fune",
                "size": 22868,
                "sha256": "7ac4405f8b09380d45c839c97723d29e67400d9d8a4d3edbf9796f071ace1e7c",
                "integrity": "sha256-14ELHpOflYKbRanArPl+iJsMI6xoO7mYu2tCvoyO8eY="
              },
              "python": {
                "name": "insurance.ipt-1.0.2-python.fune",
                "size": 22868,
                "sha256": "f2184858e6ba8375e48f85520d7c61278f0a3f33e4e8975c4788c43bdd18071a",
                "integrity": "sha256-C/KftU6qfGOdgf3ETFu69h09p9xZywFcq/0J6KrT+AU="
              },
              "rust": {
                "name": "insurance.ipt-1.0.2-rust.fune",
                "size": 24149,
                "sha256": "f2d2c03fc74399c13c1027a7fe24a212178c01de1f3569b58588221a1585390a",
                "integrity": "sha256-VuoBbkQI8Qis5BCjM1YppEaY68UrpAHC9IiHgeHEDAo="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "insurance.loss-ratio": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-qaTcp1aIzcgwaVISmcLAiukq8E9HP5ecirGf2bxhJS4=",
          "summary": "Loss ratio, expense ratio and combined ratio in basis points, from earned premium, incurred claims and expenses.",
          "level": 1,
          "tags": [
            "insurance",
            "loss-ratio",
            "combined-ratio",
            "expense-ratio",
            "underwriting-result",
            "kpi",
            "claims-ratio"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "insurance.loss-ratio-1.0.0.fune",
            "size": 12883,
            "sha256": "b70a130f04b4f4f66f6529138d2b89ed2ab8c869c2cc6269b7626a9be714c3c3",
            "languages": {
              "typescript": {
                "name": "insurance.loss-ratio-1.0.0-typescript.fune",
                "size": 9828,
                "sha256": "f2917c42c448504a6879bea37085a9171be4b9446b4984a092468cccbbda2ac6",
                "integrity": "sha256-TPmW4U/1xxr7ngizSstuc2g1IJTiCt6dx75qL907v8M="
              },
              "python": {
                "name": "insurance.loss-ratio-1.0.0-python.fune",
                "size": 9813,
                "sha256": "20ddfde2dfb201b0c8055db00eb9381e9a5e527e5c972ebc3e05bf2ed28fdeb1",
                "integrity": "sha256-CEmB9xhfxPPkWcvDSCTxTv+krIEf1N9gklz3y6VAsd8="
              },
              "rust": {
                "name": "insurance.loss-ratio-1.0.0-rust.fune",
                "size": 10444,
                "sha256": "1d32ad882fc174efb4983665746cf9e8130642003d45444ab93ff92cfac4bc95",
                "integrity": "sha256-W5tvpFQhSKz2jVK7hxhMgk0zomzYG1iBz6r6bgUye/o="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-9pa6qo3bbFZkoj4JeobBAcXCBbRy9o4/x/BIUJ/kuGc=",
          "summary": "Loss ratio, expense ratio and combined ratio in basis points, from earned premium, incurred claims and expenses.",
          "level": 1,
          "tags": [
            "insurance",
            "loss-ratio",
            "combined-ratio",
            "expense-ratio",
            "underwriting-result",
            "kpi",
            "claims-ratio"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "insurance.loss-ratio-1.0.1.fune",
            "size": 13994,
            "sha256": "ead1e8afc8af61bdb43581a65bd1f4a3c88a8b48c6b97e1f1a676c0c8e05590e",
            "languages": {
              "typescript": {
                "name": "insurance.loss-ratio-1.0.1-typescript.fune",
                "size": 10939,
                "sha256": "5066fd5d65ac47bfa6ece930711c810f20937dff9ceaadeb69bf8943f6f429c8",
                "integrity": "sha256-cjjbFMJJv0VoKNbgOz6kFh/Pvcoijp1Q/PvBMFRdMCY="
              },
              "python": {
                "name": "insurance.loss-ratio-1.0.1-python.fune",
                "size": 10924,
                "sha256": "d3d6347c26dbef37918200e25a893ab611ca058c4d74468242a32e592c466e4a",
                "integrity": "sha256-FlDniC7sDl53aJCdAlPF8FCNAXGW6IOVEvYOexN/7io="
              },
              "rust": {
                "name": "insurance.loss-ratio-1.0.1-rust.fune",
                "size": 11555,
                "sha256": "2777a644097c2ce9f28441c6f9b92d977df03b25ca7f25b2f5e8203f16a46442",
                "integrity": "sha256-JhqC4TuqhWej71JfzfWC7/WDD+J8x+T3zxcbbplMI0k="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "insurance.mid-term-adjustment": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-8waXPvkT6ETijGVullb5XsLsiW3QzfiDpGvOK8A/AM0=",
          "summary": "Additional or return premium for a mid-term policy change, pro rata on the days left, plus an admin fee.",
          "level": 2,
          "tags": [
            "insurance",
            "mta",
            "mid-term-adjustment",
            "additional-premium",
            "return-premium",
            "endorsement",
            "pro-rata",
            "admin-fee"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "dates.days-between": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "insurance.mid-term-adjustment-1.0.0.fune",
            "size": 22435,
            "sha256": "3e1b01f038298d94bbdf0ee01ce480b11b86a04e4522f68156c9e3bd8a92fb56",
            "languages": {
              "typescript": {
                "name": "insurance.mid-term-adjustment-1.0.0-typescript.fune",
                "size": 17400,
                "sha256": "cb6ec801096c1d4eead65be20593822c92acb52c7d83af10cade10ba3b75e0aa",
                "integrity": "sha256-n7e1zjjFfE3pbloVXEdwrRSbP5gf/S5RcgZZjDbaGL0="
              },
              "python": {
                "name": "insurance.mid-term-adjustment-1.0.0-python.fune",
                "size": 17464,
                "sha256": "e3d2b53b7fb187ff58d4a70c59ccd06ead313bff19515946a80f0e464b6be0b6",
                "integrity": "sha256-ivhmNIjzAQOpIqU27D58w+Oh8+s5bHTiLURqlquJnsM="
              },
              "rust": {
                "name": "insurance.mid-term-adjustment-1.0.0-rust.fune",
                "size": 18359,
                "sha256": "ad4563b6884984108266080946b3179a0334e29ab08e1ac1f703e862edec652d",
                "integrity": "sha256-l7sBmC0YGmx9zp3p29uY6TTaKMY1TBqh07b9BNi/wyg="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-zOgB8nkG2GTCLRujWD6Ut0DUXF4Y3BLpuKQmAbRS0xM=",
          "summary": "Additional or return premium for a mid-term policy change, pro rata on the days left, plus an admin fee.",
          "level": 2,
          "tags": [
            "insurance",
            "mta",
            "mid-term-adjustment",
            "additional-premium",
            "return-premium",
            "endorsement",
            "pro-rata",
            "admin-fee"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "dates.days-between": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "insurance.mid-term-adjustment-1.0.1.fune",
            "size": 23546,
            "sha256": "20a8cb56d87453621b8f8019e80a7a541baf3ddc581fffb67386f6c0b352b594",
            "languages": {
              "typescript": {
                "name": "insurance.mid-term-adjustment-1.0.1-typescript.fune",
                "size": 18511,
                "sha256": "6e3f32017a598fec381786f5a466639655c3d7463fc97a5125b2ddb360bf115c",
                "integrity": "sha256-sN+k7QS9T+6wHCrwzW5+LEjf6oPt94rfqVTVKSmOIaE="
              },
              "python": {
                "name": "insurance.mid-term-adjustment-1.0.1-python.fune",
                "size": 18575,
                "sha256": "0364bfe90f10cae131af147946fcf8ec0419bc2dd40ede3aad941ccabcfab5e0",
                "integrity": "sha256-r7o/SMJhFIHea8BaUWSGRmULm9elj9vxsA2VLDXYaPc="
              },
              "rust": {
                "name": "insurance.mid-term-adjustment-1.0.1-rust.fune",
                "size": 19470,
                "sha256": "b7fbaf072cc45581c652fd96f02cc597c63cd674feb1b16ce5efeb5cdd8867b5",
                "integrity": "sha256-CmK2Wt3AxU5Q9Yp4XeMArmzpLDLOeQdk8VUC1SXvBts="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "insurance.no-claims-discount": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-+NJCp5Eu22cs1rKLwbB4dVajkfvCn9alYyaZSxmuJTA=",
          "summary": "No-claims discount at renewal: earn a year, or step back after claims on the insurer's scale, with NCD protection.",
          "level": 2,
          "tags": [
            "insurance",
            "ncd",
            "no-claims-discount",
            "no-claims-bonus",
            "ncb",
            "step-back",
            "protected-ncd",
            "motor"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "insurance.no-claims-discount-1.0.0.fune",
            "size": 39591,
            "sha256": "c90a0a8d1d466afc748c68c32b14014dc17ad2842eece16c124d952e6708da76",
            "languages": {
              "typescript": {
                "name": "insurance.no-claims-discount-1.0.0-typescript.fune",
                "size": 31622,
                "sha256": "189059d5a1d51d8e03c2ec024b57713c199c5b46be881abb31dfce0ca9f554ee",
                "integrity": "sha256-1YKydCXiZV8K/uH7IkIjzubdaAh9a07efaqwHh0UpSc="
              },
              "python": {
                "name": "insurance.no-claims-discount-1.0.0-python.fune",
                "size": 31708,
                "sha256": "98674f057c4452dc9caa8d2a9f09c54080277e1c2e6177302518013c95369896",
                "integrity": "sha256-O35fskGAaLNKd5yfjV9RbozddanD2Z2wr28KuYfJYgo="
              },
              "rust": {
                "name": "insurance.no-claims-discount-1.0.0-rust.fune",
                "size": 33191,
                "sha256": "dac53e2b14474aae0192a3c4480cc81457876bc6320aa1151e23a6eeddd7d4e0",
                "integrity": "sha256-uZ9WO9bqPF+0M+zWH3c8Q3uBJOmoFunROHibo3nolHY="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-5l/KTZIA3NsJTz4enf2izh8lfOQzZehT6klotOkKQ7g=",
          "summary": "No-claims discount at renewal: earn a year, or step back after claims on the insurer's scale, with NCD protection.",
          "level": 2,
          "tags": [
            "insurance",
            "ncd",
            "no-claims-discount",
            "no-claims-bonus",
            "ncb",
            "step-back",
            "protected-ncd",
            "motor"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "insurance.no-claims-discount-1.0.1.fune",
            "size": 40702,
            "sha256": "27923c7f066fa8f20dfcb109cdee16c333ccada33e48bdf747d60c63e1e3d800",
            "languages": {
              "typescript": {
                "name": "insurance.no-claims-discount-1.0.1-typescript.fune",
                "size": 32733,
                "sha256": "bbb8fa6014db30f8cee9969bd5aaf0f8168f6b6f366c84ef0e5c2f91e230390f",
                "integrity": "sha256-KqdbO8ob4l2qm0w2ZMkZG1GhJT7c797oPp02KgpadH0="
              },
              "python": {
                "name": "insurance.no-claims-discount-1.0.1-python.fune",
                "size": 32819,
                "sha256": "5f4406243479763d454681262288e9c0f099d168acfbd4ec0e540fab354b1147",
                "integrity": "sha256-hbAbVDM3e+VTZfOewgXUSRam0tlGG+UAiSPPdyL2lEs="
              },
              "rust": {
                "name": "insurance.no-claims-discount-1.0.1-rust.fune",
                "size": 34302,
                "sha256": "37a31a59ff86ee297ec7eb7f88ac240c29232ae493ecaac1ecb35e2b2ed6e9b6",
                "integrity": "sha256-DpEKI4OLE4rkrd7Fhgly5C5jWi0j9sCHGES98Y7cJ58="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "insurance.premium-proration": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-07oMPIBhK5F0esCHmYu7wx2Bk7noKT6Mf3kiGQsvZHs=",
          "summary": "Return premium on mid-term cancellation, pro rata or on a short-period scale, with an optional minimum retained premium.",
          "level": 2,
          "tags": [
            "insurance",
            "cancellation",
            "return-premium",
            "refund",
            "pro-rata",
            "short-period",
            "short-rate",
            "minimum-premium"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "dates.add-months": "^1.0.0",
            "money.apply-rate": "^1.0.0",
            "finance.proration": "^1.0.0",
            "dates.days-between": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "insurance.premium-proration-1.0.0.fune",
            "size": 39644,
            "sha256": "263853b6c87ef971be3b68ae45120aed37cd158cddb4dc9b23251823e54311c1",
            "languages": {
              "typescript": {
                "name": "insurance.premium-proration-1.0.0-typescript.fune",
                "size": 29824,
                "sha256": "e752ae2efc7263dd718f46ab58f0ca245a072d9e4de1e00e17814477bde398de",
                "integrity": "sha256-a7F9xDSzLN2JoQikB8W73HVIfwM9mRw4SiBXMlEJ8Mo="
              },
              "python": {
                "name": "insurance.premium-proration-1.0.0-python.fune",
                "size": 29938,
                "sha256": "f083e94db9bc9905b3d32d78100c4f7e73a3c5ce4ad256e91916a5b0c4d00084",
                "integrity": "sha256-acMrlgJGNumzSlbTFdfBQrWVst8ybXSd9K2Vh8CdcBw="
              },
              "rust": {
                "name": "insurance.premium-proration-1.0.0-rust.fune",
                "size": 31490,
                "sha256": "f30ff82df9c04f893d1f68e239caca68d3f571e75801c7848eb2131165d8c6ad",
                "integrity": "sha256-t1NMzh2AA4KEItPbeSHe+DOWC65filoRykKLOTcWwM8="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-dx90JscxMQ8qN8Orm/lTyZ6UnEak9V6pDgq5ouzv+u8=",
          "summary": "Return premium on mid-term cancellation, pro rata or on a short-period scale, with an optional minimum retained premium.",
          "level": 2,
          "tags": [
            "insurance",
            "cancellation",
            "return-premium",
            "refund",
            "pro-rata",
            "short-period",
            "short-rate",
            "minimum-premium"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "dates.add-months": "^1.0.0",
            "money.apply-rate": "^1.0.0",
            "finance.proration": "^1.0.0",
            "dates.days-between": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "insurance.premium-proration-1.0.1.fune",
            "size": 40755,
            "sha256": "18aebce0eb051a6d189b00076f06d1f6267ea13396e37cf4bcfffaab9f195b97",
            "languages": {
              "typescript": {
                "name": "insurance.premium-proration-1.0.1-typescript.fune",
                "size": 30935,
                "sha256": "5621387878a8971a7621f2d367da262adae96025ea380a73c7e3045c108943d2",
                "integrity": "sha256-LmhzUW+t6hE1bQ3HzFkSzd6BeYi0QIYj55EeiI4HfS8="
              },
              "python": {
                "name": "insurance.premium-proration-1.0.1-python.fune",
                "size": 31049,
                "sha256": "6481f42f7398b1a9cb7ac679969b5610e78f51947f0b1c17885d4cc1d571e877",
                "integrity": "sha256-oX2wGgYFAXRhbjB3epobcfbA0qunzyu0NfuRsFDio18="
              },
              "rust": {
                "name": "insurance.premium-proration-1.0.1-rust.fune",
                "size": 32601,
                "sha256": "26a551ef1e2876765bc7bfbc9f435030c004f92d8348715c2e86b15c86be338b",
                "integrity": "sha256-BsJd1AnZ5NKBBDUvS1tbIpW1lJVw6jLP47Hrb2W2dAA="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "insurance.rating-factors": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-sUMdZv7CSavBn74hcD0EgYw7AwkjatXQalRUazaENe0=",
          "summary": "Premium from a base rate times factor-table lookups, loadings and discounts, within minimum and maximum premiums.",
          "level": 2,
          "tags": [
            "insurance",
            "rating",
            "premium",
            "rating-factors",
            "relativities",
            "loading",
            "discount",
            "minimum-premium",
            "underwriting"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "math.big-integer": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "insurance.rating-factors-1.0.0.fune",
            "size": 45872,
            "sha256": "fae4d827f1088f6e16dd2adb4b93e01adf5a5881e9f6b4a456ae545e13050434",
            "languages": {
              "typescript": {
                "name": "insurance.rating-factors-1.0.0-typescript.fune",
                "size": 33818,
                "sha256": "675c8ce21ba297f058dfcd0c47daff9f1d32f7476ac1bbbd4a34a640107eb74d",
                "integrity": "sha256-xNh7Xw5uRQN7u4kqR2z5mCHGz5uhQRGPPBWEJNBAAEY="
              },
              "python": {
                "name": "insurance.rating-factors-1.0.0-python.fune",
                "size": 33811,
                "sha256": "2e387865829010b732c8bfc23053ba199b6dd88f809cb63fc73b0e35b41f2bad",
                "integrity": "sha256-7yVBFHvtjsGogsJvg4FmQgTrqd5WOOSz2aifMK7qAx0="
              },
              "rust": {
                "name": "insurance.rating-factors-1.0.0-rust.fune",
                "size": 36877,
                "sha256": "ecf48cff2228863e6767d07c9b10bae60c2bc43575d9f5d27eb0e439cbcca45e",
                "integrity": "sha256-z51lyOWXfAAJYyu5kaKxfPp1w8E4J9mzz3RdVYvLjDo="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-uQznaVDGhlRwgll5CpwHCUYSREZx9+60EkdI5tQ/T34=",
          "summary": "Premium from a base rate times factor-table lookups, loadings and discounts, within minimum and maximum premiums.",
          "level": 2,
          "tags": [
            "insurance",
            "rating",
            "premium",
            "rating-factors",
            "relativities",
            "loading",
            "discount",
            "minimum-premium",
            "underwriting"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "math.big-integer": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "insurance.rating-factors-1.0.1.fune",
            "size": 46983,
            "sha256": "ce4334fca52247b4674c4c0994edd03dd8a34c79973ffbe7f84a108accd00508",
            "languages": {
              "typescript": {
                "name": "insurance.rating-factors-1.0.1-typescript.fune",
                "size": 34929,
                "sha256": "a1e0812c6ab5ace2e67fddbae97fc46c4fef068900e937db1d7096b385b1b247",
                "integrity": "sha256-L2N14HpbwwbXeEGc5rRROe7+36Dpnm59pwm2ittOCg0="
              },
              "python": {
                "name": "insurance.rating-factors-1.0.1-python.fune",
                "size": 34922,
                "sha256": "9d84d5f08dd3d6de10dd7c4bb880549a112e977a6c1470988febf350d860b38f",
                "integrity": "sha256-C34bHOha3/YzxgxgCEJx9vVp0dzw11UR7UJq/E1EDmY="
              },
              "rust": {
                "name": "insurance.rating-factors-1.0.1-rust.fune",
                "size": 37988,
                "sha256": "c98a967f89c4e971535c25b3fba66431e37e8a7931c65796e5d7373e7b752d9c",
                "integrity": "sha256-KGDc3GuQ/CsJmwXat1VQw+ihEJSdHr4wMLQV/yYzaaE="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "insurance.sum-insured-average": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-LB4MoIJsLOWBKOokHCIEWUTM3gC99G0mqinpzCocgvQ=",
          "summary": "Average clause settlement for underinsurance: the loss times sum insured over value at risk, capped at the loss.",
          "level": 2,
          "tags": [
            "insurance",
            "average-clause",
            "underinsurance",
            "sum-insured",
            "value-at-risk",
            "pro-rata-average",
            "claim-settlement"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "insurance.sum-insured-average-1.0.0.fune",
            "size": 23682,
            "sha256": "9e7517e8e036bf925963d336197fbfec6cd74d78146bf5bf35abb080d3aa5d56",
            "languages": {
              "typescript": {
                "name": "insurance.sum-insured-average-1.0.0-typescript.fune",
                "size": 18029,
                "sha256": "9880baeedf2ede36c16b263884e66862a1cc99255d8e8c67154353342a964305",
                "integrity": "sha256-wkVerHFE0+DvfVunPJh9LQ1vwVe53kzPRPH4dZJh5HA="
              },
              "python": {
                "name": "insurance.sum-insured-average-1.0.0-python.fune",
                "size": 17780,
                "sha256": "20abee42c1949a4d6b1cfc3d25981b2f71e441385f9083de67f14e6ca527925a",
                "integrity": "sha256-Efs7djnvOzuWcsI5LYsxMrphfm3kycmiD75xf1SRXO0="
              },
              "rust": {
                "name": "insurance.sum-insured-average-1.0.0-rust.fune",
                "size": 19017,
                "sha256": "96250a38bb2b31e406cf01fb29b7cf7e5b204981c22160a5038b101e9ce8c2b6",
                "integrity": "sha256-xY/0TrGownfa7zlvMhyyBescIE+Mdt7ygcDZy2Q6UsE="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-mjEAw8lnPO9luxPzBnmEOqRlO1m2XU650f5d3wI7Xec=",
          "summary": "Average clause settlement for underinsurance: the loss times sum insured over value at risk, capped at the loss.",
          "level": 2,
          "tags": [
            "insurance",
            "average-clause",
            "underinsurance",
            "sum-insured",
            "value-at-risk",
            "pro-rata-average",
            "claim-settlement"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "insurance.sum-insured-average-1.0.1.fune",
            "size": 24793,
            "sha256": "8e7b374a3bc1f1004bf949a8fbe45e47610e61258200987c46eb572ebace2363",
            "languages": {
              "typescript": {
                "name": "insurance.sum-insured-average-1.0.1-typescript.fune",
                "size": 19140,
                "sha256": "65831bf3e7a715ad993bdaf9591561c20084b61eed61edbae8b6a62aa524d69e",
                "integrity": "sha256-wicTa9MV/ltDXav9YJpN1w8iBo3MD6ECHP54rdLOXHk="
              },
              "python": {
                "name": "insurance.sum-insured-average-1.0.1-python.fune",
                "size": 18891,
                "sha256": "a3c54d70786787ff86fd1b3ac08b28773a11a34a9b2bc246d473671809c7bd7b",
                "integrity": "sha256-QQ7tKtK936sDBhWwt3HN3/R1Rgv01lwJINiTwNunFn8="
              },
              "rust": {
                "name": "insurance.sum-insured-average-1.0.1-rust.fune",
                "size": 20128,
                "sha256": "c705b0bd45bb37e108512b69058d208498fcaef38fbfc315c036bea0c28670ba",
                "integrity": "sha256-dpqy03UHM4qJ5GCH6I6rFkHKt8a5ymEasr6rvW2Mvvc="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "inventory.abc-classification": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-G5OiYCTCcNUuEnZvXovOcsJXlQUEj/SUlh1PpZaBd/w=",
          "summary": "ABC classes by annual consumption value (Pareto), with configurable cut-offs such as 80/15/5 and deterministic ties.",
          "level": 2,
          "tags": [
            "abc-analysis",
            "abc-classification",
            "pareto",
            "80-20",
            "consumption-value",
            "inventory-classification",
            "stock-ranking"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "inventory.abc-classification-1.0.0.fune",
            "size": 26098,
            "sha256": "90bb26438e7d1b6baed85d767cb3ab5755635015364d1fea9ec3bfcb4a987677",
            "languages": {
              "typescript": {
                "name": "inventory.abc-classification-1.0.0-typescript.fune",
                "size": 18535,
                "sha256": "000f6c263805a5fe09dd13465eea51faeaaa2ae56ae6cadec6a28f97dab14900",
                "integrity": "sha256-4N2T0wq0qT0qmAPw6K4TEEC/mIA6upAdhLi9U2SMG+s="
              },
              "python": {
                "name": "inventory.abc-classification-1.0.0-python.fune",
                "size": 18889,
                "sha256": "9088a5941c56ffafd5ffd679ab86c441e14cfa205dce18689f2b46ddd26acf6d",
                "integrity": "sha256-DHTzWA42cJezkj9X0/ElVpFpk29r2fIhd4NxiLhlTrk="
              },
              "rust": {
                "name": "inventory.abc-classification-1.0.0-rust.fune",
                "size": 20364,
                "sha256": "754968234b1f4d706cae0315d3f81ea22f8d1e20d76d95023d8cf2be7bdff164",
                "integrity": "sha256-XAt6t2Ao5jdOYMgZAHUzkpSv/BPc1WbXH8XR3/wkmBc="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "inventory.cycle-count-schedule": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-VmLOMFMOYsVP97bQVWs7nbTeKMhAMo8SVCaOe+ZS6FE=",
          "summary": "Cycle count schedule: spread each item's counts evenly over the working days of a period, by ABC class frequency.",
          "level": 2,
          "tags": [
            "cycle-count",
            "stock-count",
            "stocktake",
            "perpetual-inventory",
            "count-schedule",
            "abc",
            "warehouse",
            "audit"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0",
            "dates.day-of-week": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "inventory.cycle-count-schedule-1.0.0.fune",
            "size": 20209,
            "sha256": "28d643e77bd3b58fea5f1e3246191548aa9c02667cc931fd33fe53ce5e5bdd87",
            "languages": {
              "typescript": {
                "name": "inventory.cycle-count-schedule-1.0.0-typescript.fune",
                "size": 13214,
                "sha256": "d814883784460ec6341a3f17e7fbf28fb93e065ca286dcb7e1ff8904d603a92e",
                "integrity": "sha256-YNymdIJA8N0KSY3Ii5rfutyzj6a7sR5QU642AgLKGF4="
              },
              "python": {
                "name": "inventory.cycle-count-schedule-1.0.0-python.fune",
                "size": 12992,
                "sha256": "abbaa1f8627e52ae7e478b136485d8eb436d8393aee53f2f6abceab75f07c204",
                "integrity": "sha256-RrmVIzja28s0ReJk8i63huZVBTJuMuHjCN6VeWiuz1U="
              },
              "rust": {
                "name": "inventory.cycle-count-schedule-1.0.0-rust.fune",
                "size": 14899,
                "sha256": "69a91ca5079773942393ac404085c2b1da297a696cc207f979e5b28280b04b91",
                "integrity": "sha256-ik1jiLpkklB3OTcSxEvXNy7bGcFh85nlcTEJQ4Ukb2Q="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "inventory.eoq": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-7lTICrQobaG5ZOEV8S/+KBTSsUuoFrCmeW/qXXnBKLQ=",
          "summary": "Economic order quantity (Harris/Wilson): the order size that minimises ordering plus holding cost, in whole units.",
          "level": 1,
          "tags": [
            "eoq",
            "economic-order-quantity",
            "order-quantity",
            "wilson",
            "harris",
            "lot-size",
            "inventory",
            "purchasing"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "math.integer-sqrt": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "inventory.eoq-1.0.0.fune",
            "size": 14944,
            "sha256": "f6c821a1432734350964c729182dcec1ec2b14422daa6830c0e1a6c227918003",
            "languages": {
              "typescript": {
                "name": "inventory.eoq-1.0.0-typescript.fune",
                "size": 10183,
                "sha256": "fe17662618772e2df0a1c8e25deab2c7ddbd18d8498b5e4850a491889b740d14",
                "integrity": "sha256-NFOSVh+fR0OJSSQzY16wCgtk64Lli2s2XldqaTvTWvI="
              },
              "python": {
                "name": "inventory.eoq-1.0.0-python.fune",
                "size": 10108,
                "sha256": "fde39bf289275f9603d280c155c7de8934c088f6b971e51ab2b711aa94893ed5",
                "integrity": "sha256-N8X5ZxP5M5QHjKOKTA//n7VRAp4qnLgfeOQfWaYRLIY="
              },
              "rust": {
                "name": "inventory.eoq-1.0.0-rust.fune",
                "size": 10841,
                "sha256": "8e4c19656e1bc9fd8e7179196d4104c12772acec4fc83b8bdbb7e36f2e047159",
                "integrity": "sha256-9hSV3bN/yaoG5JKNHffvAfCMT+tkYlnWrnwyVXAffPA="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "inventory.expiry-fefo": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-kz0jsYJFNggToKfKBR+tns8VmNhKjGE51VrvUq5f8ZU=",
          "summary": "First-expiry-first-out pick list for a quantity across batches, skipping expired and short-dated stock.",
          "level": 2,
          "tags": [
            "fefo",
            "first-expiry-first-out",
            "pick-list",
            "batch",
            "lot",
            "expiry",
            "shelf-life",
            "best-before",
            "use-by"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.days-between": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "inventory.expiry-fefo-1.0.0.fune",
            "size": 18600,
            "sha256": "9bbf73c5c2b456aff2db9af2961110453eebfcea6ecd6ff8937a4798b3abdda0",
            "languages": {
              "typescript": {
                "name": "inventory.expiry-fefo-1.0.0-typescript.fune",
                "size": 13551,
                "sha256": "e1a2d9d23b1ac23314e0dbce2a199cc105ddb46ed6e8214391a1679b08722e14",
                "integrity": "sha256-rXa3WBGNlRz4703N1ct0WaNRVO+8DaZyYLucGOwkV8s="
              },
              "python": {
                "name": "inventory.expiry-fefo-1.0.0-python.fune",
                "size": 13599,
                "sha256": "04b78f85fbf89000f736ad0e16767329bbaa1363fb6a2a6a9d613d9bdee8a417",
                "integrity": "sha256-Q88RVYWd3dJjc5VmkhKzXcKFwjZ1g60P28dW65ORF58="
              },
              "rust": {
                "name": "inventory.expiry-fefo-1.0.0-rust.fune",
                "size": 15218,
                "sha256": "52e4c735fc9ca68aa5476661a10982dcf885f0ad773c4da095dbeba0f490417c",
                "integrity": "sha256-h95J3/AtOku40TIvEPbKvxl8KYqp54xnM3G9kpBXYEc="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "inventory.pallet-fit": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-zUjJf79Pljrv9dCqYOwTAmdn+8YeMlPksmz7f8Ikd2w=",
          "summary": "How many cartons fit per layer and per pallet (UK 1200x1000 or EUR 1200x800), within a height and weight limit.",
          "level": 1,
          "tags": [
            "pallet-fit",
            "palletisation",
            "cartons-per-pallet",
            "pallet-pattern",
            "layer",
            "euro-pallet",
            "uk-pallet",
            "load-planning"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "data/pallets.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "inventory.pallet-fit-1.0.0.fune",
            "size": 24143,
            "sha256": "32db121a67b47e361aaa3a1440444154e6a0fb75cd286a87e29836986c11e78c",
            "languages": {
              "typescript": {
                "name": "inventory.pallet-fit-1.0.0-typescript.fune",
                "size": 15914,
                "sha256": "870b33d979b5c2bce6ce13aaf46d018647aca54897ba8374aec43922ca9b9a66",
                "integrity": "sha256-1zW2yv9OFVObdmnfziR1sIZSJBlJ+O4kuMruw9VQANU="
              },
              "python": {
                "name": "inventory.pallet-fit-1.0.0-python.fune",
                "size": 15911,
                "sha256": "a59a64d0d5d5ec99c8f0fd4d1665305ad412a55bc3e6a4c3eb4c3b34c27329fa",
                "integrity": "sha256-mWca26sExb0hdq61H9gKFq6BdIefHreTGZJrjR2NRms="
              },
              "rust": {
                "name": "inventory.pallet-fit-1.0.0-rust.fune",
                "size": 17550,
                "sha256": "9dc862ebac383bb5619630bacad6522ca5ba1df1642493d0917e4e16fc146419",
                "integrity": "sha256-9Kqr6lB2+DLXMxRkJoS5PnYsoq5UJMM1AO3n9suwNL4="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "inventory.reorder-point": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-STQh1dU6aEXafkHCZ6E7kpwy1i+HlCoZqm/hyMN9KGE=",
          "summary": "Reorder point: demand over the supplier lead time, rounded up to whole units, plus safety stock.",
          "level": 1,
          "tags": [
            "reorder-point",
            "rop",
            "reorder-level",
            "lead-time",
            "replenishment",
            "min-stock",
            "inventory"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "inventory.reorder-point-1.0.0.fune",
            "size": 8362,
            "sha256": "04b058af629a2ff2051b887513bb1b28d44cd180350dc6a5fb183a40448df0e0",
            "languages": {
              "typescript": {
                "name": "inventory.reorder-point-1.0.0-typescript.fune",
                "size": 5694,
                "sha256": "940ba6cae2009db3c00041d8d70c6df8dfc909a0617d898322a79b95a72126e5",
                "integrity": "sha256-s3QTF5UX/BdpJ7zqL1+MRbAVlQFSsMw7uF99BRKdlMc="
              },
              "python": {
                "name": "inventory.reorder-point-1.0.0-python.fune",
                "size": 5773,
                "sha256": "c95f39ef4a96d69d828d795b14b578331c8ebd5a4c723100075d00c3e39a2432",
                "integrity": "sha256-MNNrvuiRHPAKiZwAUNEUSEC2ZzyT126ieP/1kN/u9cs="
              },
              "rust": {
                "name": "inventory.reorder-point-1.0.0-rust.fune",
                "size": 6203,
                "sha256": "5eca8353cec8fd7560506be04464597297b0d845b2b24e07a105d7e6ecf4fcdc",
                "integrity": "sha256-lBcpvZ/vfsjz/lEFyR7T9Kcfwt6FGdPfN+t234k5P3Q="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "inventory.safety-stock": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-aUQDt3v+pkyXPEZzzwhnxZQH7Ch15eN/l0XEr/0blTU=",
          "summary": "Safety stock in whole units, by service level and demand variability (z-score) or by max-minus-average.",
          "level": 1,
          "tags": [
            "safety-stock",
            "buffer-stock",
            "service-level",
            "z-score",
            "reorder-point",
            "stock-out",
            "inventory"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "data/z-scores.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "inventory.safety-stock-1.0.0.fune",
            "size": 23713,
            "sha256": "d75657642e13f1c5f479aa6efcabc22b9f8cbee52afacec946682c4e660bdb76",
            "languages": {
              "typescript": {
                "name": "inventory.safety-stock-1.0.0-typescript.fune",
                "size": 16642,
                "sha256": "6e23c1ee2e21cadafc55674f95a26ca2400c482d14c7ce7ee03c61f1d3421853",
                "integrity": "sha256-/djbDtf51yymzPHZOE7Xs4JgUQM7tP47MMG3CkdjgXk="
              },
              "python": {
                "name": "inventory.safety-stock-1.0.0-python.fune",
                "size": 16778,
                "sha256": "306009ed93722e0530d07b574ba1abf64c4679d7de5422767125324f63ff1379",
                "integrity": "sha256-Vu43l0Vs+1a6BGe6r/aIVb6p8FaUWbfnN1Z1JZmGYlU="
              },
              "rust": {
                "name": "inventory.safety-stock-1.0.0-rust.fune",
                "size": 18127,
                "sha256": "a5821c83187e45e9d6ae5df7b3fbb2151952130154305bb36b562807477499f2",
                "integrity": "sha256-kGjm7Ss4mojOLrl9MucewlZAuj6i085Zy+DF6mEcYq0="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "inventory.stock-turnover": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-cMrN+i0vgx6259KtvC2znz7IWnqlF1zfhEiDDrAYvJU=",
          "summary": "Stock turnover ratio, days inventory outstanding and days of cover for a period, computed exactly.",
          "level": 1,
          "tags": [
            "stock-turnover",
            "inventory-turnover",
            "stock-turns",
            "days-of-cover",
            "dio",
            "days-inventory-outstanding",
            "inventory-days"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "inventory.stock-turnover-1.0.0.fune",
            "size": 14658,
            "sha256": "9155bb345cfebcc9171de07f32cb2dbca138e4b611c2e5f980f793cbbc978314",
            "languages": {
              "typescript": {
                "name": "inventory.stock-turnover-1.0.0-typescript.fune",
                "size": 10237,
                "sha256": "39784c55d8b8ab9a1686fe1c7863dc7d94f03624803afad98e8e17eca0dbddd8",
                "integrity": "sha256-K8ArMoMrTgbk2X8B+Sv8DnmqiQhwWlyV/3I9UxEDd/Q="
              },
              "python": {
                "name": "inventory.stock-turnover-1.0.0-python.fune",
                "size": 10314,
                "sha256": "c33d2d83520884ea8da5dab03fc8e16903a8ef7dc4920d396e46925121742ddc",
                "integrity": "sha256-Rg4qnV+WG8VcZKFUjl6LBxVTeIWUsZso3ttuh2NHIOY="
              },
              "rust": {
                "name": "inventory.stock-turnover-1.0.0-rust.fune",
                "size": 11385,
                "sha256": "adb098f9e326cef572b5f1942b78b94fe49cb7346302bf559e46a5b49b90ecbb",
                "integrity": "sha256-OcP8ttqfPnK9cgU6XrJ0fzj6Y1fjo6lIj6UWFaz9JJM="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "inventory.valuation-fifo": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-87wfFzlrAgyK5Qj2Dw2BHsX3uMBpJrlqvmsow+jODR4=",
          "summary": "FIFO stock valuation and cost of sales from a stock movement ledger, in exact money.",
          "level": 2,
          "tags": [
            "fifo",
            "first-in-first-out",
            "stock-valuation",
            "inventory-valuation",
            "cost-of-sales",
            "cogs",
            "cost-layers"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "dates.add-days": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "inventory.valuation-fifo-1.0.0.fune",
            "size": 24834,
            "sha256": "f514605cd88d7e8ffd9f8428614b212c31641f671a5e882c438070f9332702a0",
            "languages": {
              "typescript": {
                "name": "inventory.valuation-fifo-1.0.0-typescript.fune",
                "size": 16290,
                "sha256": "e61983ce908a318699597f04573f5f04614f2708f7cd907be4911a76f6544d62",
                "integrity": "sha256-Hrzfr8FbREJbIBunIrOQ0gJGf+mNhyc0d55R2wI+TWI="
              },
              "python": {
                "name": "inventory.valuation-fifo-1.0.0-python.fune",
                "size": 16388,
                "sha256": "d72e621a4ed16c3cd151be3c30720ffd47a39697b41603c70a49e64d9e594c8c",
                "integrity": "sha256-/9Qr2LUyEAF08jpFiDc/rRBAR7VVZib68+6d1rIprhI="
              },
              "rust": {
                "name": "inventory.valuation-fifo-1.0.0-rust.fune",
                "size": 18386,
                "sha256": "397e226e9efbc96e1b8ee474d5ef5941ac30ec15cdbb9d3e49b9c6d739a9e1ed",
                "integrity": "sha256-e/b9ll+JUECMAd3gMV/IdnVC+DmeyUOLmUaEv578LRA="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "inventory.valuation-weighted-average": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-bFkzeiyYsJo4vHVlLyxO2AZawy4kb+8raZvrEkKez3k=",
          "summary": "Perpetual weighted average cost: stock value and cost of sales from a movement ledger, rounding once per issue.",
          "level": 2,
          "tags": [
            "weighted-average-cost",
            "avco",
            "average-cost",
            "stock-valuation",
            "inventory-valuation",
            "cost-of-sales",
            "cogs",
            "perpetual"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "dates.add-days": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "inventory.valuation-weighted-average-1.0.0.fune",
            "size": 23998,
            "sha256": "d29d4868187162269f70922eaf8fe32cac4705b4ab4223ef9cc1a33082de5428",
            "languages": {
              "typescript": {
                "name": "inventory.valuation-weighted-average-1.0.0-typescript.fune",
                "size": 16388,
                "sha256": "022723992499ab1fce9851adc25338a61766ea31d1cf596f87c5a2fbce168a31",
                "integrity": "sha256-d76DEyXDAUZqezpszLhCOkOVhd9tH9kIBdzc9ygsvIU="
              },
              "python": {
                "name": "inventory.valuation-weighted-average-1.0.0-python.fune",
                "size": 16599,
                "sha256": "2bcd5255b0f627729eb6a0c0aa7eaa747c51dd53c7a63fcd562a71bc26f5b707",
                "integrity": "sha256-aTBkceK5OV7em5RM02VzADSHu84TvzQevfPGxf9/0d4="
              },
              "rust": {
                "name": "inventory.valuation-weighted-average-1.0.0-rust.fune",
                "size": 18085,
                "sha256": "b8b13d6bf2057211603dbe1cebc7120c28acfc6bf43d1dc8cf2abb8c899546fc",
                "integrity": "sha256-8imc/OZtOUx8MrXPeIsTGa6THeWinPCro6Pc3p14riQ="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "invest.bond-yield": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-nXT/DOUDo8VH4g2VMNSzdr+UL9xTBdY168F707zf6RQ=",
          "summary": "Current yield and yield to maturity of a fixed-coupon bond from its clean price, as Excel's YIELD defines it.",
          "level": 2,
          "tags": [
            "invest",
            "bond",
            "yield",
            "ytm",
            "yield-to-maturity",
            "current-yield",
            "gilt",
            "fixed-income",
            "accrued-interest"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0",
            "dates.add-months": "^1.0.0",
            "math.big-integer": "^1.0.0",
            "math.fractional-power": "^1.0.0",
            "dates.day-count-fraction": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "invest.bond-yield-1.0.0.fune",
            "size": 37667,
            "sha256": "8621d381ff85c89fcd81c67f7c9328aea506ff924c12bfa9016efd0b8d5ebea8",
            "languages": {
              "typescript": {
                "name": "invest.bond-yield-1.0.0-typescript.fune",
                "size": 22611,
                "sha256": "395455f6012653addd9c8a39120efddbd551c4ef26719f5dc4e5dd80045ef393",
                "integrity": "sha256-pLWSFPyQPOuv5KPYvf48SzXLRU+XaHgCYi6otG7/kMY="
              },
              "python": {
                "name": "invest.bond-yield-1.0.0-python.fune",
                "size": 22409,
                "sha256": "eb28ce896131299d04dba6f2a4ea00cb5bea563cc5cbed12be9835d7b80e0ab6",
                "integrity": "sha256-VYVqUrPVB1XTvOO4jnufFKqvxNH/1U64sxgtMjRILQE="
              },
              "rust": {
                "name": "invest.bond-yield-1.0.0-rust.fune",
                "size": 25525,
                "sha256": "06c43b44219af2bbe330219e55e7834fe471330ae32993ebbccf82c42ac4d6fd",
                "integrity": "sha256-Fy6mle39W7gVCrZRLszMesAJBXC7a+o0EhV+P2KSabY="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-e/RDgc7Pez8cOtHPokmXvU/oTNdKPLjL1SCQ5mcHciU=",
          "summary": "Current yield and yield to maturity of a fixed-coupon bond from its clean price, as Excel's YIELD defines it.",
          "level": 2,
          "tags": [
            "invest",
            "bond",
            "yield",
            "ytm",
            "yield-to-maturity",
            "current-yield",
            "gilt",
            "fixed-income",
            "accrued-interest"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0",
            "dates.add-months": "^1.0.0",
            "math.big-integer": "^1.0.0",
            "math.fractional-power": "^1.0.0",
            "dates.day-count-fraction": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "invest.bond-yield-1.0.1.fune",
            "size": 38178,
            "sha256": "98a1ba5bddea5e2445560238ea4cb004a4c3c3fc5212fac021283d639520cde9",
            "languages": {
              "typescript": {
                "name": "invest.bond-yield-1.0.1-typescript.fune",
                "size": 23120,
                "sha256": "28aee1431f947ab2180ab6d0df375ffefab39c1327789174fd272b773e99ba94",
                "integrity": "sha256-yJXOeQY1Lb7SvKwJYOslENT1vAwFJdsjwKiVcEftI70="
              },
              "python": {
                "name": "invest.bond-yield-1.0.1-python.fune",
                "size": 22920,
                "sha256": "eccb4c93918c9d3562faff39d082128f3e8a7a62400d66f347e5a3b42af7dac8",
                "integrity": "sha256-Lmyz/VUHg1TTKvSoOOvhnS+6oNH3VqDFcr+7oPa9FDI="
              },
              "rust": {
                "name": "invest.bond-yield-1.0.1-rust.fune",
                "size": 26034,
                "sha256": "34eedc22423c6d85a856507ca72af1c35ed59fdd2c303f6aa41a1c719752dd78",
                "integrity": "sha256-iaxIjC4uTrcUryy5yhDc/ePacXO3cI3IyU0KpZono0g="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.2": {
          "integrity": "sha256-uCSfwX5Vd2tnRAHM344QHOijGbkUyi2rW7INL/SWnmo=",
          "summary": "Current yield and yield to maturity of a fixed-coupon bond from its clean price, as Excel's YIELD defines it.",
          "level": 2,
          "tags": [
            "invest",
            "bond",
            "yield",
            "ytm",
            "yield-to-maturity",
            "current-yield",
            "gilt",
            "fixed-income",
            "accrued-interest"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0",
            "dates.add-months": "^1.0.0",
            "math.big-integer": "^1.0.0",
            "math.fractional-power": "^1.0.0",
            "dates.day-count-fraction": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "invest.bond-yield-1.0.2.fune",
            "size": 39297,
            "sha256": "ad1fe02add0c15d25868fa0f169af80e02fb2ccc08aa8b76f120da93c3bf7a43",
            "languages": {
              "typescript": {
                "name": "invest.bond-yield-1.0.2-typescript.fune",
                "size": 24239,
                "sha256": "da956b47b47ba7b4813cbb0ff97f576be59af266e6a6e8bfd0043f9b9a7a4beb",
                "integrity": "sha256-HqXIDd0LbcWo0joLiXjzhSDvwzZ/jrz1jm6JTnec9T0="
              },
              "python": {
                "name": "invest.bond-yield-1.0.2-python.fune",
                "size": 24039,
                "sha256": "9955149a9c6e17e3f44fb1014bce47d279adb5ad267ca361b78628e429b7f153",
                "integrity": "sha256-ybJ5hEofULuzRWARm7gX5xHMnR+rwv/osvzhl9GnynQ="
              },
              "rust": {
                "name": "invest.bond-yield-1.0.2-rust.fune",
                "size": 27153,
                "sha256": "3c6e863a36ae5457d79566ea5ae946130168013cfdecb88473de5a7f77138f78",
                "integrity": "sha256-6As78UE5s050pioYpF7xaxsSDd4yGRfSaNoIPaGLAVc="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "invest.cagr": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-NBaBbhcriV+C34jfU51hSevSeRFs4ZDN/ywKayEvkCI=",
          "summary": "Compound annual growth rate between two values over a whole or fractional number of years, in basis points.",
          "level": 1,
          "tags": [
            "invest",
            "cagr",
            "compound-annual-growth-rate",
            "annualised-return",
            "growth-rate",
            "investment",
            "performance"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.big-integer": "^1.0.0",
            "math.fractional-power": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "invest.cagr-1.0.0.fune",
            "size": 16835,
            "sha256": "ebc46061334ef247274a4bdfaf641207eda3ad7c2ab652d775e7b2b3f4b58356",
            "languages": {
              "typescript": {
                "name": "invest.cagr-1.0.0-typescript.fune",
                "size": 11453,
                "sha256": "b96bbc6e33970e2e58b2aa4ff779f53a3094ffe5ceef9a54ae3fd9a1eb03cc0e",
                "integrity": "sha256-00I+6+rz+dkv8mYU0Z9s89CRtcLaUBOWOn1RnEwiyoU="
              },
              "python": {
                "name": "invest.cagr-1.0.0-python.fune",
                "size": 11439,
                "sha256": "dfa4a1267c56557ebb86a4946f198805a03be51a992b9545f70b8fe0e877d2e8",
                "integrity": "sha256-SJ71gBe6G4MSVK7lkbqUC2KzR5qfgaRVIyEJJc5C16Y="
              },
              "rust": {
                "name": "invest.cagr-1.0.0-rust.fune",
                "size": 12417,
                "sha256": "8f520ed5f29b73507941f7308b36c1cc80cb058192eece4506e9f29c420a59e4",
                "integrity": "sha256-f9+KRuwmgMnnRQy+Hq6cEQNT3p/73wqP8iIYeNV8MlE="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-ws855O2Gh1hmRLDvJZTMq59l6riRclLwFlMGMyEqFZs=",
          "summary": "Compound annual growth rate between two values over a whole or fractional number of years, in basis points.",
          "level": 1,
          "tags": [
            "invest",
            "cagr",
            "compound-annual-growth-rate",
            "annualised-return",
            "growth-rate",
            "investment",
            "performance"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.big-integer": "^1.0.0",
            "math.fractional-power": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "invest.cagr-1.0.1.fune",
            "size": 17954,
            "sha256": "476f7d80d95953d3636c4dff5779c0ea3a8756b1a1913891e57d8ab87a4549cb",
            "languages": {
              "typescript": {
                "name": "invest.cagr-1.0.1-typescript.fune",
                "size": 12572,
                "sha256": "bf6c49705763db07a2bb1ad753921274581c42cdf052162f13b830e7c3eb4328",
                "integrity": "sha256-GqC54wzVFq0iBb+fMFhN3h1rl212qwZuHGDbvZZrK3k="
              },
              "python": {
                "name": "invest.cagr-1.0.1-python.fune",
                "size": 12558,
                "sha256": "c4ce48e62e9832f1c86289ebb83e5ffe5db4c2e6b088d766fca32ad4aa67fa4d",
                "integrity": "sha256-5iGdVUD7KUnRIivYt+xDDI4k95ZBPmDOjTqd1RlFiQo="
              },
              "rust": {
                "name": "invest.cagr-1.0.1-rust.fune",
                "size": 13536,
                "sha256": "6ce56cf82d69f068a553a125288b6e955916e2fb4f8ddb053c942fecfe4625e0",
                "integrity": "sha256-D4TPLiQRqZWicPMMoewrpnRVp0qHLMrz1Y/yzw1sp0E="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "invest.capital-gains-tax": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-yMQ8V0yhW1z5amp/70i1SA3OPnuWgy503RYiQ5wPOJY=",
          "summary": "UK Capital Gains Tax for an individual's tax year: losses, annual exempt amount, and the rates by asset and date.",
          "level": 2,
          "tags": [
            "cgt",
            "capital-gains-tax",
            "annual-exempt-amount",
            "aea",
            "residential-property",
            "losses",
            "tax",
            "uk",
            "gb"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "money.apply-rate": "^1.0.0",
            "dates.uk-tax-year": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/cgt-rates.json",
            "data/cgt-years.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "invest.capital-gains-tax-1.0.0.fune",
            "size": 63143,
            "sha256": "1c06d2593571174e3f7916e55a44893196c6be7806afd751e7d8b3005c486acd",
            "languages": {
              "typescript": {
                "name": "invest.capital-gains-tax-1.0.0-typescript.fune",
                "size": 47492,
                "sha256": "d63b79193586fadd59e94a59edbff8fadfc4c3da166fd875422c4117de5dc741",
                "integrity": "sha256-oCEeHRuwfYwkvS0Xd3o+0ac1hWj6FLnYshOOGQIRXw4="
              },
              "python": {
                "name": "invest.capital-gains-tax-1.0.0-python.fune",
                "size": 47444,
                "sha256": "eba9b60f8aa656edd037119a048528e204b47d4d7b5b73c762d89428ec135814",
                "integrity": "sha256-7VhoI+8UVZFOh1thj5cLhGd093DPT62WSSub7N0/z1s="
              },
              "rust": {
                "name": "invest.capital-gains-tax-1.0.0-rust.fune",
                "size": 50431,
                "sha256": "b888d4a0650306a1d100c46dfd1a039082817a7a86e2b7050ba135c7b5440361",
                "integrity": "sha256-4IWkQNNVqovyo/ZM7GOrIe/wxHoi5MbgIu+0ewUg8Yc="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-8HwGH3srRLEsFLHdkRuQ+0VGNgqjp6amRvAlQuh4gOw=",
          "summary": "UK Capital Gains Tax for an individual's tax year: losses, annual exempt amount, and the rates by asset and date.",
          "level": 2,
          "tags": [
            "cgt",
            "capital-gains-tax",
            "annual-exempt-amount",
            "aea",
            "residential-property",
            "losses",
            "tax",
            "uk",
            "gb"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "money.apply-rate": "^1.0.0",
            "dates.uk-tax-year": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "data/cgt-rates.json",
            "data/cgt-years.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "invest.capital-gains-tax-1.0.1.fune",
            "size": 64796,
            "sha256": "8e0d4a77f71e50cd266ad151218feae9edd76aaa073c769d22c87ac68830b186",
            "languages": {
              "typescript": {
                "name": "invest.capital-gains-tax-1.0.1-typescript.fune",
                "size": 49145,
                "sha256": "5d578609a3fa84b4f77bc6aab26f6fc576363f03c05cb7312562510c2fff90c7",
                "integrity": "sha256-K/1Xmmt2fkiFrPDWvS/mc7uuTlasi9FG9sbfZQsfDlY="
              },
              "python": {
                "name": "invest.capital-gains-tax-1.0.1-python.fune",
                "size": 49097,
                "sha256": "77f824ec70152a50d40908e912873f64a2b3941792005e63774f2a82f71db3b4",
                "integrity": "sha256-a+77Hkc5FdBzPJcMxvv3WBpLU0GftG5GYfizt21Awfw="
              },
              "rust": {
                "name": "invest.capital-gains-tax-1.0.1-rust.fune",
                "size": 52084,
                "sha256": "1266be7d10f1da22af7eb3dc76785ea44fa234d3611925cacb7375f7ae63122a",
                "integrity": "sha256-B8pZikUYa7yfkBtTi3v2LGPhWnzAmhTRC6JiKPFBHbk="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "invest.dividend-yield": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-9TH+fQ+49/IeDHCf49avOpgxm9vxmY2LMNtGhGZfbiw=",
          "summary": "Trailing and forward dividend yield of a share or fund, in basis points, from the price and the dividends per unit.",
          "level": 1,
          "tags": [
            "investment",
            "dividend",
            "yield",
            "income",
            "trailing-yield",
            "forward-yield",
            "shares",
            "equity-income"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "invest.dividend-yield-1.0.0.fune",
            "size": 21277,
            "sha256": "5a1aeec65dc1f6366644681676843c7e932a0f097f7445bc929b2286cb331e8b",
            "languages": {
              "typescript": {
                "name": "invest.dividend-yield-1.0.0-typescript.fune",
                "size": 15938,
                "sha256": "fd0ffe1474679b5b61a8d0d11660ac4711baa9eee8dc6cb65c4639c233ccf70d",
                "integrity": "sha256-iCBSmd0P2gR1OrP4yiRBFU0pkz5gSsCq+c9Zm87DN38="
              },
              "python": {
                "name": "invest.dividend-yield-1.0.0-python.fune",
                "size": 15955,
                "sha256": "53b3f5062d456543a3c56b66cc61f330e82699166077bd4e44896ce9514c4942",
                "integrity": "sha256-20cuOL576skuU+x/SnbCjEnyfyRyxEsDt3+rv8AjzoU="
              },
              "rust": {
                "name": "invest.dividend-yield-1.0.0-rust.fune",
                "size": 17336,
                "sha256": "db21650db38bf760ff57a1e321f847eeccec17adb1d7fece358e34c99ee10538",
                "integrity": "sha256-TTwEYKm0Q64bTgJl5dKhFSbTJXhGL+3UmyB0lrhnafE="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-vXAw1hg26P/NhTlAPX5vzk3rI/VjBQTDJutuY/gWOzk=",
          "summary": "Trailing and forward dividend yield of a share or fund, in basis points, from the price and the dividends per unit.",
          "level": 1,
          "tags": [
            "investment",
            "dividend",
            "yield",
            "income",
            "trailing-yield",
            "forward-yield",
            "shares",
            "equity-income"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "invest.dividend-yield-1.0.1.fune",
            "size": 22396,
            "sha256": "f1cd722e5b8f802d33186c5cc93f3723a0300ae96aaea140bad42be8b9f5fcac",
            "languages": {
              "typescript": {
                "name": "invest.dividend-yield-1.0.1-typescript.fune",
                "size": 17057,
                "sha256": "0440934c4b2a70e133ea61cd2ebdc64d25283620fd2d77b6e2c864b1e89320a8",
                "integrity": "sha256-FaxyobdMpAHUmWV+v9oVkb8f0/r4sDV4KzSyD70apzY="
              },
              "python": {
                "name": "invest.dividend-yield-1.0.1-python.fune",
                "size": 17074,
                "sha256": "ca525f6e2231be501c4ff100dca5712b56cd51ed471f2ea9f7c808cdcd724e56",
                "integrity": "sha256-kJBtNrwmbIN6DUncIx1b3Aiud1UwcQPG5LwjOtZtQCU="
              },
              "rust": {
                "name": "invest.dividend-yield-1.0.1-rust.fune",
                "size": 18455,
                "sha256": "39629337032aa91801700e44888025f72c7d2ab6b3c34b0e6d4338ac3a41089e",
                "integrity": "sha256-dn+1EY82kFARn5GGSPVd4jMhoEiL4TpR4MmIaQikZKo="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "invest.drawdown-sustainability": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-CKnJFx+P3P/v0VbQgx+HKpLeoGLVylFFXpN6qhj7Cg0=",
          "summary": "How many years a pension or investment pot lasts under a yearly withdrawal and a constant growth rate, year by year.",
          "level": 3,
          "tags": [
            "investment",
            "drawdown",
            "retirement",
            "pension",
            "withdrawal-rate",
            "sustainability",
            "decumulation",
            "income"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "money.apply-rate": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "invest.drawdown-sustainability-1.0.0.fune",
            "size": 36681,
            "sha256": "6697983dff7e398f9061260a2adbc52b26f2b22eda0e03e535fc84d0d0244da9",
            "languages": {
              "typescript": {
                "name": "invest.drawdown-sustainability-1.0.0-typescript.fune",
                "size": 28395,
                "sha256": "7677d03949bf4c010f3589be26d167397f9c9a8891403b5c1b63a53b25df2ea1",
                "integrity": "sha256-UKv+AM9oqZ8rmtHZubW0IkALLKuFIpwJoL9MNDfBhr4="
              },
              "python": {
                "name": "invest.drawdown-sustainability-1.0.0-python.fune",
                "size": 28529,
                "sha256": "fda0c636ae6c6a51e3cea0de6738f6193d0009364bd57fc5f1602b01a3217b02",
                "integrity": "sha256-wMz0F+kdfsK07SOTy+yGPZOjJzIRCgYCtot0ZAKejd8="
              },
              "rust": {
                "name": "invest.drawdown-sustainability-1.0.0-rust.fune",
                "size": 30799,
                "sha256": "4fb7653bbba0bed360cf2d783446ed8c6d84f6aa3cacb3311adeb2952b9dd569",
                "integrity": "sha256-zsH0hmMfy3PSE9DTN9wrNjeVguaPfe3D2WrZoEvaAqw="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-lup22oruSi7st7dcjKDcnHYHFfiQeHeKt4vPm+FDgSY=",
          "summary": "How many years a pension or investment pot lasts under a yearly withdrawal and a constant growth rate, year by year.",
          "level": 3,
          "tags": [
            "investment",
            "drawdown",
            "retirement",
            "pension",
            "withdrawal-rate",
            "sustainability",
            "decumulation",
            "income"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "money.apply-rate": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "invest.drawdown-sustainability-1.0.1.fune",
            "size": 37800,
            "sha256": "782e11f00033a2b53709ddb4707847fdaada9402f7b4f482d513e77e0aa1896a",
            "languages": {
              "typescript": {
                "name": "invest.drawdown-sustainability-1.0.1-typescript.fune",
                "size": 29514,
                "sha256": "99704eda7c3705a170bdf984204ec81ddf02b49b714be39e4361b71c8691991e",
                "integrity": "sha256-+Q1bko64CKsErWVvXcy7BOpRw4W/J89we3RMjVE3rXU="
              },
              "python": {
                "name": "invest.drawdown-sustainability-1.0.1-python.fune",
                "size": 29648,
                "sha256": "ef2ea4bd37ee06b26d960cbe1b9f808c9df90de1ca1e683d9deaf7e3974618d8",
                "integrity": "sha256-5olzZpw8PXBqTpcSxy7LHp9BGn85fZWI8gH5u7YRCrM="
              },
              "rust": {
                "name": "invest.drawdown-sustainability-1.0.1-rust.fune",
                "size": 31918,
                "sha256": "0760cad68756a4f2b5fd7df731f9fef058e22ab97ab63a3d647d7ec538bc8ac8",
                "integrity": "sha256-xhw0skSyEUvlWi7Z0CbWhhm7p4jWxWyqpf8IEVqNLbI="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "invest.fee-drag": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-oVcoDIbNspq7onqkhzYvrlNYuUwNtvBbBl4PFFclj0g=",
          "summary": "What an annual charge costs an investment over the years: value with and without the fee, year by year, in minor units.",
          "level": 2,
          "tags": [
            "investment",
            "fees",
            "ongoing-charges",
            "ocf",
            "amc",
            "fee-drag",
            "platform-fee",
            "compounding",
            "cost-of-fees"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "money.apply-rate": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "invest.fee-drag-1.0.0.fune",
            "size": 39834,
            "sha256": "641636af4d02eac9108e507c541778b59a539262563827b1e5f29648c9a6f48f",
            "languages": {
              "typescript": {
                "name": "invest.fee-drag-1.0.0-typescript.fune",
                "size": 32557,
                "sha256": "37d61b4afbf89e4bb85623b652f80d5a5ab3d6f3b0a554a1326dde78a5dad7f9",
                "integrity": "sha256-sqOfCB7v5apbIRwLNinDu4Wo6g36shabsJIP9YGgYDU="
              },
              "python": {
                "name": "invest.fee-drag-1.0.0-python.fune",
                "size": 32530,
                "sha256": "6793f9bd244f486ec3a7fd11bfd687fa35b3d258ff860928e57eb1d420fa538d",
                "integrity": "sha256-FB/CVpmOBDujVYelctCvSI5kNVALg9pi6yKbWL4sTkY="
              },
              "rust": {
                "name": "invest.fee-drag-1.0.0-rust.fune",
                "size": 34677,
                "sha256": "f0298e71e31d5ba60b0dab7b2ee40e75d82e98091ad39bd59dd4606acc328954",
                "integrity": "sha256-ke1yyRyVORGefny4SN4beuScPtAiXVyhVXY7lRweRmQ="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-ILDm6A4bHdNM5s2ZkyV9ME6pGcjt1Sh3adnhVc3avaE=",
          "summary": "What an annual charge costs an investment over the years: value with and without the fee, year by year, in minor units.",
          "level": 2,
          "tags": [
            "investment",
            "fees",
            "ongoing-charges",
            "ocf",
            "amc",
            "fee-drag",
            "platform-fee",
            "compounding",
            "cost-of-fees"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "money.apply-rate": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "invest.fee-drag-1.0.1.fune",
            "size": 40953,
            "sha256": "2e0eed6bc13576141691424f434b8f8bdf9ccba04127a58213167c7939abfdeb",
            "languages": {
              "typescript": {
                "name": "invest.fee-drag-1.0.1-typescript.fune",
                "size": 33676,
                "sha256": "dd3d5ba6308509467f146239ec5d7042d8a845ab3c668a079ac9e3baff8c129e",
                "integrity": "sha256-aDcY2frjbuXazZXpfcyQxJBPF8TI8W5+f87EHKkfU8o="
              },
              "python": {
                "name": "invest.fee-drag-1.0.1-python.fune",
                "size": 33649,
                "sha256": "8e4657ed682aaac1585c91da297f5dc67a3904fb877e3868887b445d5113cacc",
                "integrity": "sha256-Y8A45dsT+a/aJ0dlKARtnWVm2L+YIuY7R28YUKO1/C0="
              },
              "rust": {
                "name": "invest.fee-drag-1.0.1-rust.fune",
                "size": 35796,
                "sha256": "9794756101410fe4bc2c72d4e1b42e7ad68a4f269e8cd85699bb6410f642a9ab",
                "integrity": "sha256-ULg73Oazm7fLyK6lS76XleQLKbO+W0DdLs0rIO0GDE4="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "invest.isa-allowance": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-zXDlQPPAAuGHUsN28feIPdfchtXs97dkKsI0BF17XdQ=",
          "summary": "ISA allowance used and remaining for a UK tax year: the overall limit, Lifetime ISA, cash ISA and Junior ISA.",
          "level": 1,
          "tags": [
            "isa",
            "individual-savings-account",
            "allowance",
            "subscription-limit",
            "lifetime-isa",
            "lisa",
            "junior-isa",
            "jisa",
            "cash-isa",
            "uk",
            "gb"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/isa-limits.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "invest.isa-allowance-1.0.0.fune",
            "size": 52926,
            "sha256": "1c49110b8d82f17680816f4da69929a94770378d4aa2f4d736fd5a88ece120f3",
            "languages": {
              "typescript": {
                "name": "invest.isa-allowance-1.0.0-typescript.fune",
                "size": 41158,
                "sha256": "738dd4254d668bd303759d0033ca7aea950f5b432a1bfc7b9989ca4a827f649c",
                "integrity": "sha256-kaaHBqjTkTHkTmXD40pFasgZ5VpZdvuQKBVSomelEU8="
              },
              "python": {
                "name": "invest.isa-allowance-1.0.0-python.fune",
                "size": 41487,
                "sha256": "15d54c3f779865e0a574515497f189d4580b87d230171909056e677ebf2bd01c",
                "integrity": "sha256-/q28PHzUqwfxlfu7o6f/CXLjifnhxZbxFFXvzN3MMcI="
              },
              "rust": {
                "name": "invest.isa-allowance-1.0.0-rust.fune",
                "size": 43791,
                "sha256": "c2bf3b5f4da64c7c50519df5dc6b6499da15266a5ae8fcc7ead8cc0aae3687ba",
                "integrity": "sha256-wL88CepYylHyarlr7vikUiewisxRsD+TxLVLJC2AbeQ="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-NtoKFLl3NLnDfgzydEMUE/56Sq3cqyFDBy5g0yKUMlM=",
          "summary": "ISA allowance used and remaining for a UK tax year: the overall limit, Lifetime ISA, cash ISA and Junior ISA.",
          "level": 1,
          "tags": [
            "isa",
            "individual-savings-account",
            "allowance",
            "subscription-limit",
            "lifetime-isa",
            "lisa",
            "junior-isa",
            "jisa",
            "cash-isa",
            "uk",
            "gb"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/isa-limits.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "invest.isa-allowance-1.0.1.fune",
            "size": 54072,
            "sha256": "58fad51ab456b08fb84ac13edb2a52cea5f53ba0c617b68d26867efee117b943",
            "languages": {
              "typescript": {
                "name": "invest.isa-allowance-1.0.1-typescript.fune",
                "size": 42298,
                "sha256": "4d1a35670f9bd2b32a1c55ab6f3542b8897660c0e74239d22d7c4954c38864a7",
                "integrity": "sha256-yVe2BbtwIAEnK4BHA1YlmH1KWTOGF8flpswUwkEx2fM="
              },
              "python": {
                "name": "invest.isa-allowance-1.0.1-python.fune",
                "size": 42633,
                "sha256": "2a5e97d16aa13697439dbc1d13b038a725e5863c499e0d0d84a09a16fcd0f838",
                "integrity": "sha256-YMGDOazMo01audZKHpV6Ju1F9VhEl2t1tRSjHjn/1HA="
              },
              "rust": {
                "name": "invest.isa-allowance-1.0.1-rust.fune",
                "size": 44931,
                "sha256": "d7496f4711bc6f27cbf7275bcc3ea10c671a37e0f65d28c0e5081a92601367d7",
                "integrity": "sha256-xtkOJPjjNxNU4DNVl0rPgJjqAHz2Ma/IrD9aRNoXm8E="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.2": {
          "integrity": "sha256-r/H5Vg8wp/PHdSC5m3hUUkqGOAmfeO1NvwcnYzagjA4=",
          "summary": "ISA allowance used and remaining for a UK tax year: the overall limit, Lifetime ISA, cash ISA and Junior ISA.",
          "level": 1,
          "tags": [
            "isa",
            "individual-savings-account",
            "allowance",
            "subscription-limit",
            "lifetime-isa",
            "lisa",
            "junior-isa",
            "jisa",
            "cash-isa",
            "uk",
            "gb"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "data/isa-limits.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "invest.isa-allowance-1.0.2.fune",
            "size": 55617,
            "sha256": "06a5b36689a7bd8fd074675a34bec845d691e192be1e38c70b6acc5c3efad5a2",
            "languages": {
              "typescript": {
                "name": "invest.isa-allowance-1.0.2-typescript.fune",
                "size": 43843,
                "sha256": "e249d0df547c7dfd4387b385d9160c41c4a50173585346a95a1b860bfcf2fbe7",
                "integrity": "sha256-eS8f8JIweCETdjJg6DSjlN7xLcwaLV9mJhFsICw4xwo="
              },
              "python": {
                "name": "invest.isa-allowance-1.0.2-python.fune",
                "size": 44178,
                "sha256": "addf19f7434e3143d8b5af815412ed1bf132f4dc3e9a70c45782eb5d4e5ee3cd",
                "integrity": "sha256-iqTyn+xPWxUznaLI4kIVFBRGGm1kK4p9WuGOFsX+Qzk="
              },
              "rust": {
                "name": "invest.isa-allowance-1.0.2-rust.fune",
                "size": 46476,
                "sha256": "4640ab9ad44e1932dc270eacc419ee8c6b70860de4bcb54f5961ea6512c3ecc2",
                "integrity": "sha256-36SouTKFEOW6kDUf5EZ5fJUQdweMegc+D8T+arVWii4="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "invest.money-weighted-return": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-62X78Z7jq3T8HflHUd/yO1uGgMF/DwWI5gGhF4sNIUc=",
          "summary": "Money-weighted return (XIRR) of dated cash flows on Excel's actual/365 convention, solved exactly in fixed point.",
          "level": 2,
          "tags": [
            "invest",
            "xirr",
            "irr",
            "internal-rate-of-return",
            "money-weighted-return",
            "mwr",
            "cash-flows",
            "performance"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "dates.add-days": "^1.0.0",
            "math.big-integer": "^1.0.0",
            "math.fractional-power": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "invest.money-weighted-return-1.0.0.fune",
            "size": 32086,
            "sha256": "31cb736fea92e05d1712b04f4261f2f544f9e4e9cf5f8cb4b7f702295c68ec97",
            "languages": {
              "typescript": {
                "name": "invest.money-weighted-return-1.0.0-typescript.fune",
                "size": 22232,
                "sha256": "09797d41b5d3ba38bdc98f0b15eba1c387c3d2de2019f214d247feec2d5f3b2c",
                "integrity": "sha256-A3V52pMBH+2n8e3UMVCJtXOXs/S+zM7xovQZ3l5ktsA="
              },
              "python": {
                "name": "invest.money-weighted-return-1.0.0-python.fune",
                "size": 21990,
                "sha256": "0b9a5c5ac0e19ad1cb7412c59d05aae022141a9c664fb3e8ed46e8d4797252d3",
                "integrity": "sha256-yT/m2YTgIpsTZMA3zXsizs3dKHG4Jc6/+Qc7KWLoqDs="
              },
              "rust": {
                "name": "invest.money-weighted-return-1.0.0-rust.fune",
                "size": 23956,
                "sha256": "5f53b424103b1dad38b2790ee1304e907756386192c55ef7cb5cfa44e057c797",
                "integrity": "sha256-CNj0rZS887bObpQvUe1VBM+nKstepTPNZTw7KPB8qfE="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-RJI98IW//IemaL60III+lfIPtCYpdoG3g8ygoRG2utc=",
          "summary": "Money-weighted return (XIRR) of dated cash flows on Excel's actual/365 convention, solved exactly in fixed point.",
          "level": 2,
          "tags": [
            "invest",
            "xirr",
            "irr",
            "internal-rate-of-return",
            "money-weighted-return",
            "mwr",
            "cash-flows",
            "performance"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "dates.add-days": "^1.0.0",
            "math.big-integer": "^1.0.0",
            "math.fractional-power": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "invest.money-weighted-return-1.0.1.fune",
            "size": 33205,
            "sha256": "c88ced54de7fdc34450b449701043a464a3ad3df3fac08b9d062d895b6f53b52",
            "languages": {
              "typescript": {
                "name": "invest.money-weighted-return-1.0.1-typescript.fune",
                "size": 23351,
                "sha256": "23860a9f8c5d1bb90eed920610d7a6f2613fa9a97931b2b21de03b7bfe8e1fcc",
                "integrity": "sha256-R8c0zIYxX48DrubGvYsWYcU7vHxDXm5mdczxSA6viRo="
              },
              "python": {
                "name": "invest.money-weighted-return-1.0.1-python.fune",
                "size": 23109,
                "sha256": "063725db3df16da3a92d11ee2f6975b5bd1e0bffde069d406f2fa8ea4c623a20",
                "integrity": "sha256-EJrr78mLQhgDfl0KmyLngcNmcAl+IRiRSoCEpK6e/qA="
              },
              "rust": {
                "name": "invest.money-weighted-return-1.0.1-rust.fune",
                "size": 25075,
                "sha256": "6fbf66455583a2e557f2eea85aa388164625c3ff57b6125b26e2d88be640a77a",
                "integrity": "sha256-GOhvEyeqTci3dTPyGYY/J4D8KJIwLEmFuNWBPXj2eV0="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "invest.pension-annual-allowance": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-dxsiuNkEw5Fzh41soFWwlHpEbOj48E6Xg7w2TJJrdfc=",
          "summary": "UK pension annual allowance for a tax year with taper, MPAA and three-year carry-forward, and the excess charged.",
          "level": 2,
          "tags": [
            "pension",
            "annual-allowance",
            "tapered-annual-allowance",
            "mpaa",
            "money-purchase-annual-allowance",
            "carry-forward",
            "pension-tax",
            "uk",
            "gb"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "dates.uk-tax-year": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/annual-allowance.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "invest.pension-annual-allowance-1.0.0.fune",
            "size": 117117,
            "sha256": "87d133c9704e1d8626a6ef6ba2c0cb8f64821c84cba418375fd12b70e0d5cded",
            "languages": {
              "typescript": {
                "name": "invest.pension-annual-allowance-1.0.0-typescript.fune",
                "size": 97385,
                "sha256": "5e3eb6a0a40afd4d3f06ecf9d65c30a392ffe85759c49bbfbb39de417d456ef2",
                "integrity": "sha256-rpKtzW2IB3FOfdr7us/EVNhtzKErA4K6yoe2zB3VuZE="
              },
              "python": {
                "name": "invest.pension-annual-allowance-1.0.0-python.fune",
                "size": 97350,
                "sha256": "fe0774a4bde5e3cdb2c6f1f03d31678099e22c1c527226ca70240197f13f06cc",
                "integrity": "sha256-bZuzI0pEMXUEIAKAcAjDfNCQO7VstOGiTW8YdJcrSEI="
              },
              "rust": {
                "name": "invest.pension-annual-allowance-1.0.0-rust.fune",
                "size": 101162,
                "sha256": "112e5e827ded4451e2ba5d1b0d089b7f2501f441b4d0782c47c039b1e50dd827",
                "integrity": "sha256-hsuaVN9I8M7JYSCDb/sU/HPVX27L4vXO7pT/xKwI1DA="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-mcojfMnJ07PxrFVHT1Jr6DkEoWfPRnA0Q/ymECo5uoU=",
          "summary": "UK pension annual allowance for a tax year with taper, MPAA and three-year carry-forward, and the excess charged.",
          "level": 2,
          "tags": [
            "pension",
            "annual-allowance",
            "tapered-annual-allowance",
            "mpaa",
            "money-purchase-annual-allowance",
            "carry-forward",
            "pension-tax",
            "uk",
            "gb"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "dates.uk-tax-year": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "data/annual-allowance.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "invest.pension-annual-allowance-1.0.1.fune",
            "size": 118697,
            "sha256": "5a850274af383b621252b3e7f98e34e868219345132c2d46c5c8d93741546d06",
            "languages": {
              "typescript": {
                "name": "invest.pension-annual-allowance-1.0.1-typescript.fune",
                "size": 98965,
                "sha256": "a7e25522f0e35ae08d9aecb1d1849f9d546385943dec60c83c37b929a8f7c4ee",
                "integrity": "sha256-AZsuYv1TZHH5GzlRWSrdDCy2wbEBhucAJjIYR5RiYc0="
              },
              "python": {
                "name": "invest.pension-annual-allowance-1.0.1-python.fune",
                "size": 98930,
                "sha256": "64374761029e2da36ca2e13c884613db26bd9fb528bb3b7712bcf96e00e96f7e",
                "integrity": "sha256-oyohuKQlwzIHQKGUsJOaFCOy9b+Vf9K1kK6nyr5nSYc="
              },
              "rust": {
                "name": "invest.pension-annual-allowance-1.0.1-rust.fune",
                "size": 102742,
                "sha256": "e89ec04f82bb2d77a01d9f21ea6c28b10cb855622d5aca710faf43affde6be3e",
                "integrity": "sha256-OOyT4df5hyqayVHQl6y2NbFbCDD4BJpr0YuzfwI8lhc="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "invest.portfolio-weights": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-RynFAAfUogoAFLGY389JoiYfShYowKihU9uggR4/wj4=",
          "summary": "Each holding's share of a portfolio and its drift from a target weight, in basis points, from exact arithmetic.",
          "level": 1,
          "tags": [
            "investment",
            "portfolio",
            "weights",
            "allocation",
            "drift",
            "asset-allocation",
            "target-weight",
            "overweight"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "invest.portfolio-weights-1.0.0.fune",
            "size": 34258,
            "sha256": "fdac61569d154b2666d9392ef1c5542b2347478083192ec8f38964654fc2b164",
            "languages": {
              "typescript": {
                "name": "invest.portfolio-weights-1.0.0-typescript.fune",
                "size": 25779,
                "sha256": "faee7cced0a566a4cc04a1f767b99cd9d6c87cd476bbd201e2bb988d658009a5",
                "integrity": "sha256-X5oXMs2MaWmfPSQjEy1WeGOOlnTWnjSDwX+n8tUnej8="
              },
              "python": {
                "name": "invest.portfolio-weights-1.0.0-python.fune",
                "size": 25827,
                "sha256": "ce3a59a9b699634d36601c04c9a689ed9696edcab5c86ed41d3e68ebe59527f7",
                "integrity": "sha256-kCN6ctmZxW25tGyMhN/anYC+gxIyc7KsR52qaBgE83Q="
              },
              "rust": {
                "name": "invest.portfolio-weights-1.0.0-rust.fune",
                "size": 28508,
                "sha256": "c05d2cf2c9a0d3d30d3130638fb0e75f7a206d73d76b284cf2a45a14ef85f129",
                "integrity": "sha256-n7sqqNqe3CVBKtVs86E/gOfMNYFWkPp8JX56Ca3A5Jk="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-bQxMO/9bUCNALaTNwXmkPnEvA4pb6gC7KvNlkEH7HrA=",
          "summary": "Each holding's share of a portfolio and its drift from a target weight, in basis points, from exact arithmetic.",
          "level": 1,
          "tags": [
            "investment",
            "portfolio",
            "weights",
            "allocation",
            "drift",
            "asset-allocation",
            "target-weight",
            "overweight"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "invest.portfolio-weights-1.0.1.fune",
            "size": 35377,
            "sha256": "71b36d3c97468580a8343302d7f638bdd4a8437780e9831038a47dd616f9607e",
            "languages": {
              "typescript": {
                "name": "invest.portfolio-weights-1.0.1-typescript.fune",
                "size": 26898,
                "sha256": "bb08efee409d36bcbf238ac23573298af31406820eb3690376b5ee81796d741e",
                "integrity": "sha256-e64VtdolN3MUDhwdLMDQpyrnihmYO+UkTOEUhMmiN9s="
              },
              "python": {
                "name": "invest.portfolio-weights-1.0.1-python.fune",
                "size": 26946,
                "sha256": "101a618bfb43af3e58ee087ae1904c02ad40dc0b580c7a8074c3a182f901ede0",
                "integrity": "sha256-dDRjZZyaXq2mzOjqiJJJ9ZR6eOd6Ekb6KLw5edrmHIM="
              },
              "rust": {
                "name": "invest.portfolio-weights-1.0.1-rust.fune",
                "size": 29627,
                "sha256": "67fd85bae7995c4dbbd568a0f249cc64020f026522d97007c8c3a09ae8b1ac95",
                "integrity": "sha256-YiBQzfTsIrGuogpqZSU1BREtaDn2F9PW6qzi7qUznU8="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "invest.rebalance": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-HIUk9PCFJ0J+O57h5S52+4dz9OStZRDn31c9A9B+9HQ=",
          "summary": "Whole-unit buy and sell trades that bring a portfolio back to target weights, skipping trades below a minimum size.",
          "level": 2,
          "tags": [
            "investment",
            "rebalance",
            "rebalancing",
            "portfolio",
            "trades",
            "target-weight",
            "asset-allocation",
            "minimum-trade"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "invest.rebalance-1.0.0.fune",
            "size": 45899,
            "sha256": "416cd82ac6f80e33b86a2025460f4e0f35ddac4654191cefdcb4a527d6157a4e",
            "languages": {
              "typescript": {
                "name": "invest.rebalance-1.0.0-typescript.fune",
                "size": 32693,
                "sha256": "15d74434011bc72640f3df3b49a148dc5fb6927fc06a880f2e2bf24658231da4",
                "integrity": "sha256-J1ZFn+sRjgqjNmn3gTj7wDhzxIt33L7XiCqAJGQWHnY="
              },
              "python": {
                "name": "invest.rebalance-1.0.0-python.fune",
                "size": 32617,
                "sha256": "48bad3a47275a3f2d2cdac54e6716255b407e52c265838ae25936f639a559e96",
                "integrity": "sha256-e9NWewjB4lWa9t8whSZ3b4VXd4fjKZkHK09Q0PC9QPY="
              },
              "rust": {
                "name": "invest.rebalance-1.0.0-rust.fune",
                "size": 36335,
                "sha256": "a81504d24f8592581cad5f0ef26bec44a61734104e0c0edad7cefbf60c31e5e2",
                "integrity": "sha256-+t/IeQTM/Vuq0DqzvYdCV+UEIlI816yfk1SyG6SXgNw="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-vn4NwA/Ayylx63O26g1WJYpYBs1f2n+dtJSVA48CYzA=",
          "summary": "Whole-unit buy and sell trades that bring a portfolio back to target weights, skipping trades below a minimum size.",
          "level": 2,
          "tags": [
            "investment",
            "rebalance",
            "rebalancing",
            "portfolio",
            "trades",
            "target-weight",
            "asset-allocation",
            "minimum-trade"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "invest.rebalance-1.0.1.fune",
            "size": 47018,
            "sha256": "9a985d1d4806b19bad49add26fea276f96be4bf3b9056c205b28a8eb679302f9",
            "languages": {
              "typescript": {
                "name": "invest.rebalance-1.0.1-typescript.fune",
                "size": 33812,
                "sha256": "acc578df52fa942bc64fe568aa22ad68dd73661d4537149aeaac0daf655df3b6",
                "integrity": "sha256-cU+VVadY4DZ6woJoET4ICqXMwzdc+iTXC/SyTTu3ZyM="
              },
              "python": {
                "name": "invest.rebalance-1.0.1-python.fune",
                "size": 33736,
                "sha256": "1aa7296af857da241f9e0b8583602ab455affa1a30bd7f622b82e836e8bff2de",
                "integrity": "sha256-+hGZlOFJrXoKW3f+VDrLgaH5Z/4i4VluEkhu3lX5Zz4="
              },
              "rust": {
                "name": "invest.rebalance-1.0.1-rust.fune",
                "size": 37454,
                "sha256": "0356fbc0c7506938fd6b1c0a109166da787d56ab47395b25e54fc61920ac139a",
                "integrity": "sha256-TiAt8toQ0bZDJB80lI5zQdpY1SsyGDTaSQqVnEbGhwQ="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "invest.section-104-pool": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-J8R32/tZP9rsrqGJoJ8lm6Lie2Tpy5jaZBwaHO1CGSM=",
          "summary": "UK share matching for CGT: same-day, 30-day bed-and-breakfast, then the Section 104 pool; allowable cost per disposal.",
          "level": 2,
          "tags": [
            "cgt",
            "capital-gains",
            "section-104",
            "share-pooling",
            "bed-and-breakfast",
            "same-day-rule",
            "allowable-cost",
            "uk",
            "gb"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "dates.add-days": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "invest.section-104-pool-1.0.0.fune",
            "size": 66041,
            "sha256": "86f7a6b5c95e6efd15123a84948372931748ee9e17d854dc99fa63d4246fd72c",
            "languages": {
              "typescript": {
                "name": "invest.section-104-pool-1.0.0-typescript.fune",
                "size": 46792,
                "sha256": "2569cef8d73ec2c97df7c26f80acc49ec6549f63cd1281bf052d529f13db3919",
                "integrity": "sha256-ngm7wlVVenQ+OGL6hNyKdqeBnW/rAne0gj3ZHTr3Qro="
              },
              "python": {
                "name": "invest.section-104-pool-1.0.0-python.fune",
                "size": 46821,
                "sha256": "8b56c41b0ffd94122ef38cf2a1d383b0f949feb14d978a386590037faee396dd",
                "integrity": "sha256-PINOyrUWLQ3M5a/5lYU8DRhju3eO94rBsM7MSzEZl6E="
              },
              "rust": {
                "name": "invest.section-104-pool-1.0.0-rust.fune",
                "size": 50440,
                "sha256": "aa45088ea6aa3e61fc3e5ef1aaa54e73a9781f1f10b7852e7492e0c8310893f0",
                "integrity": "sha256-fq8Uo7uod4u7Fog8UeCjPxVcU3jMNkXKOtQQuSvKqpk="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-sNVghEOtbx4w2q1NFnMGV6eCi0+2lFXNX/jVxvwh7Gw=",
          "summary": "UK share matching for CGT: same-day, 30-day bed-and-breakfast, then the Section 104 pool; allowable cost per disposal.",
          "level": 2,
          "tags": [
            "cgt",
            "capital-gains",
            "section-104",
            "share-pooling",
            "bed-and-breakfast",
            "same-day-rule",
            "allowable-cost",
            "uk",
            "gb"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "dates.add-days": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "invest.section-104-pool-1.0.1.fune",
            "size": 67172,
            "sha256": "b4e96750fab062b5580292f177bf38dd9bfdd097e49233c3b5cdfe8b0b18694d",
            "languages": {
              "typescript": {
                "name": "invest.section-104-pool-1.0.1-typescript.fune",
                "size": 47923,
                "sha256": "6d44b828ff05dd1bf58da70a1bceea138cf4cfe42e195917d5a86f8c7585dca0",
                "integrity": "sha256-sHPd5TUnrVtLQpk0bDFC/ktP5H7cf7E5S8S6N/WiQPk="
              },
              "python": {
                "name": "invest.section-104-pool-1.0.1-python.fune",
                "size": 47952,
                "sha256": "d23822a6611f515f6659caa6e431534b5a5307dd26873a96c6813ec92a7fc99d",
                "integrity": "sha256-/7KO/zz55VPySLWvfiYdgauJXxtpPeXhSLmx/JbNHXM="
              },
              "rust": {
                "name": "invest.section-104-pool-1.0.1-rust.fune",
                "size": 51571,
                "sha256": "d38d317142a65b7dcb4886432fb766c8081b933417a92b271cf3e2a7aab347c3",
                "integrity": "sha256-XTEXzvznSuUbPiSbWgDcCOJGt25mqx43zMejjzAgsJA="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "invest.time-weighted-return": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-u9ZmOldMujRD3aBjThyWkeC2L33DbA0LVjfCT3BqVfQ=",
          "summary": "Time-weighted return from valuations taken at each external cash flow, geometrically linked exactly.",
          "level": 2,
          "tags": [
            "invest",
            "twr",
            "time-weighted-return",
            "performance",
            "geometric-linking",
            "gips",
            "portfolio-return"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "dates.add-days": "^1.0.0",
            "math.big-integer": "^1.0.0",
            "math.fractional-power": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "invest.time-weighted-return-1.0.0.fune",
            "size": 31297,
            "sha256": "8981059c0bea31f99b3848eca0a2ca83307031702f93478b45ffd325a4ff2662",
            "languages": {
              "typescript": {
                "name": "invest.time-weighted-return-1.0.0-typescript.fune",
                "size": 23446,
                "sha256": "ea2c580307a14629bbc3eae204681c940df03eb7ce890ad3cbf1eaf875189b44",
                "integrity": "sha256-qtkstarFMx5W+3g+G1csGjZLAh89IVknkOERFkCFCnU="
              },
              "python": {
                "name": "invest.time-weighted-return-1.0.0-python.fune",
                "size": 23383,
                "sha256": "c6032446808c240d854a324c4f06a685426daa5c8c92509f5c2ee6ad92acb5d2",
                "integrity": "sha256-4b5EK5pY2qe6ARv1fWH2OPqdAhgs2PCVC0mAVFGyehs="
              },
              "rust": {
                "name": "invest.time-weighted-return-1.0.0-rust.fune",
                "size": 25212,
                "sha256": "317549dafde2bf08a021f578d335f67bb7157113ea21f540bffe58477246477b",
                "integrity": "sha256-QN9ZigV/sXzEq8dAv4axbq2XVGqPFU43k/cwhfARCLQ="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-oQJUZyFb5HpgtNmsqQVRPGFyFc1xuAONuEfYhh65QaE=",
          "summary": "Time-weighted return from valuations taken at each external cash flow, geometrically linked exactly.",
          "level": 2,
          "tags": [
            "invest",
            "twr",
            "time-weighted-return",
            "performance",
            "geometric-linking",
            "gips",
            "portfolio-return"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "dates.add-days": "^1.0.0",
            "math.big-integer": "^1.0.0",
            "math.fractional-power": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "invest.time-weighted-return-1.0.1.fune",
            "size": 32416,
            "sha256": "7d64059a234d6464f3e546ed8903c2babb7b2a1f0c1bd3df47b357d88585a42a",
            "languages": {
              "typescript": {
                "name": "invest.time-weighted-return-1.0.1-typescript.fune",
                "size": 24565,
                "sha256": "316ba72d428268f813387a945be3739981a06ccbd24e716bab2ee72eaee6cb59",
                "integrity": "sha256-QsX3prV/pvH7UAY0qLppbcqazYhXk0RsBG/COjhqbcE="
              },
              "python": {
                "name": "invest.time-weighted-return-1.0.1-python.fune",
                "size": 24502,
                "sha256": "dcf31e418d0e92149969f3485164c1f4115e282346a7ac3b1bcbf2ee03049549",
                "integrity": "sha256-/BpTvddtyIMO9DEDupbiypyx3qTDYzXOm1AhKMKrDWc="
              },
              "rust": {
                "name": "invest.time-weighted-return-1.0.1-rust.fune",
                "size": 26331,
                "sha256": "c4f5b73a0f02ba774e56bd94d435d9f115d408be848cc05682b2d59e1acba348",
                "integrity": "sha256-bW//+iGC17XzE7XPJS8KO78x5YKH4BJR8kgcOqx540A="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "legal.conflict-name-match": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-ktVJ0B7ouuW4Q71AnqJtnEX8bMuM6nCr9jJy9a7d3ug=",
          "summary": "Fuzzy-match a name against existing clients and parties for a conflict check: normalised, token-sorted Jaro-Winkler.",
          "level": 2,
          "tags": [
            "conflict-check",
            "fuzzy-match",
            "name-matching",
            "jaro-winkler",
            "similarity",
            "dedupe",
            "client-intake",
            "kyc"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.round-div": "^1.0.0",
            "text.normalise-name": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "legal.conflict-name-match-1.0.0.fune",
            "size": 25026,
            "sha256": "630c751be9d9b1464d257483a124961fb1d9b35a735a0f28d73645e789fbb097",
            "languages": {
              "typescript": {
                "name": "legal.conflict-name-match-1.0.0-typescript.fune",
                "size": 16523,
                "sha256": "437f866d6639da32a041d937b8984a1892359b128d777e41e365b7a7df9973ba",
                "integrity": "sha256-RBJNjZnWZNFPGaqKgNaKLqH6FvjJ8xuce/+qmUjBBQU="
              },
              "python": {
                "name": "legal.conflict-name-match-1.0.0-python.fune",
                "size": 16006,
                "sha256": "97fa8a0a404beccf9c69f742163547d2bcec5c2faba147b54df69b7396c598ac",
                "integrity": "sha256-L86Vc8uJzi7y6ZwCqsn1yBi7LLEAf7AkUZZcP8E/Nmk="
              },
              "rust": {
                "name": "legal.conflict-name-match-1.0.0-rust.fune",
                "size": 17183,
                "sha256": "f6827841e7250aeec01cfcf626e838fad0a3afb61b851758d5fd931b6ed7e1bb",
                "integrity": "sha256-rJBm2J+Qo+OibNk4CKQK7EeuTYd66PrSSG8t3yv7rf8="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-xmsRj3M57WxgifnvWi9OUdknNR4BJcnzsmtNODqTTro=",
          "summary": "Fuzzy-match a name against existing clients and parties for a conflict check: normalised, token-sorted Jaro-Winkler.",
          "level": 2,
          "tags": [
            "conflict-check",
            "fuzzy-match",
            "name-matching",
            "jaro-winkler",
            "similarity",
            "dedupe",
            "client-intake",
            "kyc"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.round-div": "^1.0.0",
            "text.normalise-name": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "legal.conflict-name-match-1.0.1.fune",
            "size": 26132,
            "sha256": "c27233e64cee06c1f59edb65c614a9919cbf8fb9f4683e8bcda553f267fa09b8",
            "languages": {
              "typescript": {
                "name": "legal.conflict-name-match-1.0.1-typescript.fune",
                "size": 17629,
                "sha256": "12899b70615105b8198f2eeed229330b6ca895cbc85eede9a454fb56ce2cdd08",
                "integrity": "sha256-njTQwTK1ljH3D9e7Z2u3aaWq9IVcO0rFYRK7XE8Gm18="
              },
              "python": {
                "name": "legal.conflict-name-match-1.0.1-python.fune",
                "size": 17112,
                "sha256": "060cc31bf2a92ae0e6c705b6e1c679a4ab46afd2c493cae0117db259a17e4a46",
                "integrity": "sha256-0V0pQdZ5w5rR/x/NKfM4gZfNJ93SyuGShpa6gkz79VM="
              },
              "rust": {
                "name": "legal.conflict-name-match-1.0.1-rust.fune",
                "size": 18289,
                "sha256": "bbef77a0e48da50844ead7052bb28186aaa04f42e5e533ec3b083ebc5e2d1cc5",
                "integrity": "sha256-GCMXExcfhEabf1mfiWDAE6lVFGgIOslnqhzRW6KpkY8="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "legal.court-deadline": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-C1cSa45zQ73+FHRUL0Nluw9XSSvfJUKeH+vqJ589QGc=",
          "summary": "A deadline in days under CPR 2.8: clear days, short periods skip weekends and bank holidays, court-closed days.",
          "level": 2,
          "tags": [
            "court-deadline",
            "cpr",
            "civil-procedure-rules",
            "clear-days",
            "time-limit",
            "litigation",
            "deadline",
            "england-and-wales"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0",
            "dates.day-of-week": "^1.0.0",
            "dates.bank-holidays": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "legal.court-deadline-1.0.0.fune",
            "size": 21263,
            "sha256": "2aabeb71f1faec59dad5daef47fd42e1be143465146efb5823a9735bf8b35e32",
            "languages": {
              "typescript": {
                "name": "legal.court-deadline-1.0.0-typescript.fune",
                "size": 15001,
                "sha256": "91f79a0a8f7c84a9d61445039459244ea3f2056597f49598916ce95d745b11ab",
                "integrity": "sha256-ZFYpUI+qPgwfm14RdTrafm0JG7X0dbWmFM2LqGauFsk="
              },
              "python": {
                "name": "legal.court-deadline-1.0.0-python.fune",
                "size": 14985,
                "sha256": "3e0942caa354ed8ac9f950f324189b3c7644aef77532429eac9a2b52fa0eaa2c",
                "integrity": "sha256-qYz+sGYt9iALIOeHeBPy8I8Ft6DewnLqvQzC6Oj7hQI="
              },
              "rust": {
                "name": "legal.court-deadline-1.0.0-rust.fune",
                "size": 15921,
                "sha256": "1ea95697046f84fa4f604a3a4ecd5b860cfb0e03d823b73667b0c8d977544389",
                "integrity": "sha256-cWuGCEBFlLU//djJAidpdnpT3TIWThKobfM3CMX59as="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-VywGIBY9mSECgLVggr/mM7NxSnJh7rQuJjwyWGjFsbI=",
          "summary": "A deadline in days under CPR 2.8: clear days, short periods skip weekends and bank holidays, court-closed days.",
          "level": 2,
          "tags": [
            "court-deadline",
            "cpr",
            "civil-procedure-rules",
            "clear-days",
            "time-limit",
            "litigation",
            "deadline",
            "england-and-wales"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0",
            "dates.day-of-week": "^1.0.0",
            "dates.bank-holidays": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "legal.court-deadline-1.0.1.fune",
            "size": 22391,
            "sha256": "4d0f68c186119372dad98ecaf67bd0da6cccbe52fa52ef1d1cff22b249c29a76",
            "languages": {
              "typescript": {
                "name": "legal.court-deadline-1.0.1-typescript.fune",
                "size": 16129,
                "sha256": "f50e8205708f9cfd4e776b7eae67322633767b02cd93ebee1cccfd46a16c4709",
                "integrity": "sha256-WFzQmnINLs3+5oSUAVio4VWwyEXGldXtCW42gWLH0bM="
              },
              "python": {
                "name": "legal.court-deadline-1.0.1-python.fune",
                "size": 16113,
                "sha256": "6f92e9a9ac748114dc132e0b469a2f8a5dfe702633fbbf62d96e067f675c2211",
                "integrity": "sha256-DZSzRaJnIMbeYwT1MehBpzJG3rDL5FztmpD5D408NQk="
              },
              "rust": {
                "name": "legal.court-deadline-1.0.1-rust.fune",
                "size": 17049,
                "sha256": "abcdb073e59e3c5d4c58a90e9adcfb8fabbcd028c3686a736ad17de57191a187",
                "integrity": "sha256-tNemMZl2fAy9EbOAdI7zIKuxZZpuyUs5XpR8CL+Zk5s="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "legal.court-fee": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-4b+wvIPJibmylNWcVE5yGHRd9ksFt0LKOBhfHb113LM=",
          "summary": "The court fee to issue a money claim in England and Wales, from the claim value bands in force on a date.",
          "level": 2,
          "tags": [
            "court-fee",
            "issue-fee",
            "money-claim",
            "small-claims",
            "mcol",
            "ex50",
            "civil-proceedings-fees-order",
            "county-court"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "money.apply-rate": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/issue-fees.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "legal.court-fee-1.0.0.fune",
            "size": 26523,
            "sha256": "1e9f3725a6991824b10b82093e4022873ee2306733724cddc41297bed57927e2",
            "languages": {
              "typescript": {
                "name": "legal.court-fee-1.0.0-typescript.fune",
                "size": 21282,
                "sha256": "01e2c6b4ccc0782b25141c53a79896c2abd6036accb2c80e00daca03cec4df95",
                "integrity": "sha256-8JVPgtX4tfBs7ThWZkZj9J5VsGA7j6qgOutK9rnvyjs="
              },
              "python": {
                "name": "legal.court-fee-1.0.0-python.fune",
                "size": 21428,
                "sha256": "ba9166c954a1b95bbe950e42fb28c692ddc7369f612a7c3410cd06b0cd7d260c",
                "integrity": "sha256-EQFKr/Ti48Kh8ttkSSKNOn1gDhIvQ+LCM1xeSuZw3pE="
              },
              "rust": {
                "name": "legal.court-fee-1.0.0-rust.fune",
                "size": 21899,
                "sha256": "818c03e69e03e1105cd014bf8d95e799a850aef2a585d21a83cd04e2cff8fcb5",
                "integrity": "sha256-f/zotLaUDkfYDS+6JtHgqxHeZQ5eDPbXS/zj6c0wWkk="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-KOHg62jBybCk5R3tMVXTYo2RqjT26H3R6hKr5LH1s5I=",
          "summary": "The court fee to issue a money claim in England and Wales, from the claim value bands in force on a date.",
          "level": 2,
          "tags": [
            "court-fee",
            "issue-fee",
            "money-claim",
            "small-claims",
            "mcol",
            "ex50",
            "civil-proceedings-fees-order",
            "county-court"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "money.apply-rate": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/issue-fees.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "legal.court-fee-1.0.1.fune",
            "size": 27019,
            "sha256": "c285cde35790de8fb7410f99bda660ee30c341c50fbd99cefab5f52e7bfcf700",
            "languages": {
              "typescript": {
                "name": "legal.court-fee-1.0.1-typescript.fune",
                "size": 21770,
                "sha256": "76fc7159e8820aa1d80862a61e7c9293549696eecfaa09d9e933b614f9b73c98",
                "integrity": "sha256-ZnHcKMqfR1ioUNpOWhDQZZQhfYnZ4F+hyGZ1l0fbgIc="
              },
              "python": {
                "name": "legal.court-fee-1.0.1-python.fune",
                "size": 21924,
                "sha256": "04713f05a4bde7698b355f5f40ebb4407cd34237ea679a2abd9991592110dde7",
                "integrity": "sha256-LpMFJwIg+NXnTqH3qqUU2418+aRnwG5TVJp6OfiLA2g="
              },
              "rust": {
                "name": "legal.court-fee-1.0.1-rust.fune",
                "size": 22387,
                "sha256": "644feef10c1a6dda9f1b002875b89ecdd890398a8f4d3eadc92591ce97e6d0fa",
                "integrity": "sha256-jQzwKYU0KsHsyYbKsNTVs0vvcImD2jXJLwCxtWWEWb0="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.2": {
          "integrity": "sha256-EqdE8wM3B83xrPs+8ANvX+iSWzdwi49DznH2I69jQkw=",
          "summary": "The court fee to issue a money claim in England and Wales, from the claim value bands in force on a date.",
          "level": 2,
          "tags": [
            "court-fee",
            "issue-fee",
            "money-claim",
            "small-claims",
            "mcol",
            "ex50",
            "civil-proceedings-fees-order",
            "county-court"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "money.apply-rate": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "data/issue-fees.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "legal.court-fee-1.0.2.fune",
            "size": 28650,
            "sha256": "d2d7f4132bb6851de07bc03880325d69e4950c060408a88e2a930dacfa2c3724",
            "languages": {
              "typescript": {
                "name": "legal.court-fee-1.0.2-typescript.fune",
                "size": 23401,
                "sha256": "7ac9fceb5e04a13ecd7740b08634ce764cbb0af813d935b6f4295d7e0afd791e",
                "integrity": "sha256-bhsoDs8rE2haaLCqu2MelH+/khoFl0cy9hxzV0mTmzY="
              },
              "python": {
                "name": "legal.court-fee-1.0.2-python.fune",
                "size": 23555,
                "sha256": "f53491984a675da804e322c91fe70de8f61a9a84d54c7862fe63ed8c7c8c185c",
                "integrity": "sha256-U+F1WcO4V6rbYPami+3c4dzZ9f1sbf2eeH3fSklZgY8="
              },
              "rust": {
                "name": "legal.court-fee-1.0.2-rust.fune",
                "size": 24018,
                "sha256": "726bac6004b49084f120bb81c5a9809f0162dcf08cfbdc032fa545bc0511ceeb",
                "integrity": "sha256-C9DxHNlzOFJL4qY35bFXsNqQ0tVQ2OSHWnfPyL6K5vE="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "legal.disbursements-vat": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-4C7Ny7iZPlaZuA13GAivw7PlsJdO0h1SoIDnpHJ4TI4=",
          "summary": "Whether a cost passed to a client is a VAT disbursement (outside scope) or a recharge (VAT due), per HMRC Notice 700.",
          "level": 2,
          "tags": [
            "disbursement",
            "recharge",
            "vat",
            "outside-the-scope",
            "expenses",
            "rechargeable-costs",
            "solicitor",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "legal.disbursements-vat-1.0.0.fune",
            "size": 23159,
            "sha256": "4c9d4dc4ff724ec3d29e4857c74e3b5e9e52a7b38ba1a8660cd9c2c0be019ea9",
            "languages": {
              "typescript": {
                "name": "legal.disbursements-vat-1.0.0-typescript.fune",
                "size": 18332,
                "sha256": "9be030c695fb4af657c6ce788080b29896034399fc4261175cfe2acc3daa49dc",
                "integrity": "sha256-A21InfeB/t38bm6Kc6HykkighIVSTq9gyEFr8agH+XE="
              },
              "python": {
                "name": "legal.disbursements-vat-1.0.0-python.fune",
                "size": 18654,
                "sha256": "523543876b9da4d5d255a06034dcf06b45e3817ff22293dc6e4f7cda19f16ca7",
                "integrity": "sha256-ti7MMp2jXsxKqfAalAI/VuEDs54XqAFK0bcxU9AJSYY="
              },
              "rust": {
                "name": "legal.disbursements-vat-1.0.0-rust.fune",
                "size": 19831,
                "sha256": "f4cffab4acc9119b9a7f22ab8100f629f2e534f7355f1e51bc7d5b7234ddd8bf",
                "integrity": "sha256-A+2n3BD5l9CUVaOxzPU8SqfW9NhmwI9hmStHtQcTQlw="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-es/z3f+V9nFfnLOAh9I3Z1vHGMnD+TNt5MgAWPcbyUo=",
          "summary": "Whether a cost passed to a client is a VAT disbursement (outside scope) or a recharge (VAT due), per HMRC Notice 700.",
          "level": 2,
          "tags": [
            "disbursement",
            "recharge",
            "vat",
            "outside-the-scope",
            "expenses",
            "rechargeable-costs",
            "solicitor",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "legal.disbursements-vat-1.0.1.fune",
            "size": 24265,
            "sha256": "f395722568fd97d13528843cefafa35d4e2f217ccc31ee0d5ac5bdbe53b13f21",
            "languages": {
              "typescript": {
                "name": "legal.disbursements-vat-1.0.1-typescript.fune",
                "size": 19438,
                "sha256": "ee2d4abe494a2989193b9ae815e5cffa5827179fefa86d39a57b5b805f52c1b9",
                "integrity": "sha256-HIk8s8rP1YFSFOTFos5WCb6jYAtcFk7Rexn/nTZJPqw="
              },
              "python": {
                "name": "legal.disbursements-vat-1.0.1-python.fune",
                "size": 19760,
                "sha256": "5956f34dc0a5aea4eec0fcd7302020c74de865803a2a38ddfd7c6e4b805dbfee",
                "integrity": "sha256-67COt6qZalbppKe0dSxMd2qZ7byoSAMWif5LVdgEdFY="
              },
              "rust": {
                "name": "legal.disbursements-vat-1.0.1-rust.fune",
                "size": 20937,
                "sha256": "ae81ac1193891b769db6580e706f95ac3806e59fa049bc95a9a04998ed654fcb",
                "integrity": "sha256-NplS/5SYZtIBkQN3j7TU0zp7p3W2Os+6Cu34olGQpAs="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "legal.limitation-date": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-gRST95Yc9K+yOreAyZhmDfAeadOWvnc3ns135cQZc3g=",
          "summary": "The last day to bring a claim under the Limitation Act 1980, by claim type, from the date it accrued.",
          "level": 2,
          "tags": [
            "limitation",
            "limitation-period",
            "time-bar",
            "limitation-act-1980",
            "expiry",
            "deadline",
            "claim",
            "solicitor"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0",
            "dates.add-months": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/limitation-periods.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "legal.limitation-date-1.0.0.fune",
            "size": 28192,
            "sha256": "fb927b7b4d84491a9f291168a574d7603080d0605d6802f9fa4bdc34eb6eaac5",
            "languages": {
              "typescript": {
                "name": "legal.limitation-date-1.0.0-typescript.fune",
                "size": 22566,
                "sha256": "0046781541907defe755782b696e40a23a409df51bd7e67dd45d6da6a28eb1b9",
                "integrity": "sha256-mD++C+jjkoFTZi1Oy1i9ATfpGNfrkxtXiROYOhYAjt4="
              },
              "python": {
                "name": "legal.limitation-date-1.0.0-python.fune",
                "size": 22627,
                "sha256": "40ef84e628fcd6029aa9f0039868119179ff2a6c180dcbc53f28833f39a8316b",
                "integrity": "sha256-VEqvWC6zlCgxx+msyamHMw6TCIB9XQDXY7Q8DsuLpGo="
              },
              "rust": {
                "name": "legal.limitation-date-1.0.0-rust.fune",
                "size": 23657,
                "sha256": "e49d7a9bb2522b615469e060400a9b48eb9a7dd54f3c543de206001552842270",
                "integrity": "sha256-okUPlIj0QOhDI4SM3/Id2vWv5ZoGXBKXJ9s77TybrVY="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-FvUsT9BY8gi6HHMkPx7Z5OiTMkNct/feq7clccQMyLQ=",
          "summary": "The last day to bring a claim under the Limitation Act 1980, by claim type, from the date it accrued.",
          "level": 2,
          "tags": [
            "limitation",
            "limitation-period",
            "time-bar",
            "limitation-act-1980",
            "expiry",
            "deadline",
            "claim",
            "solicitor"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0",
            "dates.add-months": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "data/limitation-periods.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "legal.limitation-date-1.0.1.fune",
            "size": 29851,
            "sha256": "e158c7c9b69f962c622dbfc6b5caa8b6ab3589271299976d4c6e4fe6c9c8f195",
            "languages": {
              "typescript": {
                "name": "legal.limitation-date-1.0.1-typescript.fune",
                "size": 24225,
                "sha256": "5009d44ca80668beffbbaaeaf06f426e1061ec365af7623720f73ca96bbcf925",
                "integrity": "sha256-TnnbPohAWT6XLxk+JhC8i8ZWxjNuDC4nHrGrD9TTKV4="
              },
              "python": {
                "name": "legal.limitation-date-1.0.1-python.fune",
                "size": 24286,
                "sha256": "ee3eb2a781dfb2bf21a5d8c9aea376303fba5f1b29ecfd539a4f821aa6520ebe",
                "integrity": "sha256-8yWcbupNkFkE7KvODrbovI0PvPbyHuRSPut/p4WwvEY="
              },
              "rust": {
                "name": "legal.limitation-date-1.0.1-rust.fune",
                "size": 25316,
                "sha256": "77559910759cbad02d264c287528b574bca0333ee42870c0a2827f1273626037",
                "integrity": "sha256-F4tAqq8E2hD3PP3Bw7mqzu6mrgmj5MpeveTJDYQnFiY="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "legal.retainer-drawdown": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-CBbXQ8xnXyeiLz15Bdu7t+Xid8dJZiMZ/xGERF5Ckao=",
          "summary": "Apply money held on account in client account to bills in order: what each bill takes, what stays due, what is left.",
          "level": 2,
          "tags": [
            "retainer",
            "money-on-account",
            "client-account",
            "drawdown",
            "solicitor",
            "bill",
            "trust-account"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "legal.retainer-drawdown-1.0.0.fune",
            "size": 20729,
            "sha256": "572210a0152cff2a8b3c9b7af004191ff32046432ae49da15a2473fe526fbd1d",
            "languages": {
              "typescript": {
                "name": "legal.retainer-drawdown-1.0.0-typescript.fune",
                "size": 16247,
                "sha256": "fede6f483286f12402dcab50ea2c8dc90549869a37635d66c55a1e2b0af46b69",
                "integrity": "sha256-eY/2t0+x/DF9cldKs++/uSQMbvYR77cahPfgHQJegFY="
              },
              "python": {
                "name": "legal.retainer-drawdown-1.0.0-python.fune",
                "size": 16388,
                "sha256": "0c48a844122afe87aabb1bb987601298c42128c83e7d0c216c3146b185b28b16",
                "integrity": "sha256-gV25k9nwrq5T1PeT3280HLxSpDONjWMifpW1sKuCbis="
              },
              "rust": {
                "name": "legal.retainer-drawdown-1.0.0-rust.fune",
                "size": 17742,
                "sha256": "a114c75733de58ab2a453c29b7e022eeecd602840001a7318a6619dd04a473b4",
                "integrity": "sha256-wvXvRQs0CA+/SrgWha02bKVkfmbtkc7PEg25GLujTOI="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-DjeLfPuRUxjIYJVdLr/d/RTb8q5WrZsz5MpT9Ikn9ZA=",
          "summary": "Apply money held on account in client account to bills in order: what each bill takes, what stays due, what is left.",
          "level": 2,
          "tags": [
            "retainer",
            "money-on-account",
            "client-account",
            "drawdown",
            "solicitor",
            "bill",
            "trust-account"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "legal.retainer-drawdown-1.0.1.fune",
            "size": 21835,
            "sha256": "ade1e11d776564d1508d4c2cc41781ad189fcdb156899d63768b15215bb91b9b",
            "languages": {
              "typescript": {
                "name": "legal.retainer-drawdown-1.0.1-typescript.fune",
                "size": 17353,
                "sha256": "d7431680176ce705d3cc785d049b186f39a08a37357130b92271406f9e1e52a7",
                "integrity": "sha256-jaHGDRs1WM6znWSBYyAOqZsQAIkDc87rvsVd7gANjDc="
              },
              "python": {
                "name": "legal.retainer-drawdown-1.0.1-python.fune",
                "size": 17494,
                "sha256": "1387ed31d9d57eb23e9c8fe61df2dad88e496e8b22b2f43ff91be0dc5eaebe53",
                "integrity": "sha256-BJvu9aLYnALXFRlMDyJuVE1jumEcwleqL1h4ApEQ4ig="
              },
              "rust": {
                "name": "legal.retainer-drawdown-1.0.1-rust.fune",
                "size": 18848,
                "sha256": "09f08bd9005e582b750d0882f818dc3ad32e8521e2c7850e1543faa943dfe0aa",
                "integrity": "sha256-4+jBf9PLR1rF3s/trxRIr/hLqIx4+R2ht5ySBlM/X+U="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "legal.statutory-interest": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-hXwyxaQ/bdE93/wJpPkOVRkJq3D4SeDZtL3aU0KOHQ4=",
          "summary": "Statutory interest on a judgment debt (8% simple, daily) or a late commercial debt, England and Wales.",
          "level": 2,
          "tags": [
            "judgment-interest",
            "statutory-interest",
            "judgments-act",
            "county-court-judgment",
            "ccj",
            "late-payment",
            "debt-recovery",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "dates.add-days": "^1.0.0",
            "math.round-div": "^1.0.0",
            "finance.late-payment-interest": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/county-court-thresholds.json",
            "data/judgment-rates.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "legal.statutory-interest-1.0.0.fune",
            "size": 34616,
            "sha256": "d0447f7a39d4fb9e41fefb96ebf58b4b42d35c3eba805bb1cf4fc90f7da7ba6c",
            "languages": {
              "typescript": {
                "name": "legal.statutory-interest-1.0.0-typescript.fune",
                "size": 22727,
                "sha256": "6f28240acbce82ae475d6d659e7eff54199871e01d170e48cb2e150efbb2c0a6",
                "integrity": "sha256-3FknuzV9FWY033DtB3ekycR55C3J1RzXcf9T78xhewc="
              },
              "python": {
                "name": "legal.statutory-interest-1.0.0-python.fune",
                "size": 22853,
                "sha256": "e7171aea9fc8cbcc98f522c01a7b4a5492e93d74029e80914b5d958cb6beeb71",
                "integrity": "sha256-RsBpDyraxrLfn+7ylStxevLLRGfDIEatK6m9hj7nn6o="
              },
              "rust": {
                "name": "legal.statutory-interest-1.0.0-rust.fune",
                "size": 24228,
                "sha256": "6b47abf1c9638da46884813a450f98be1f63a3fb4f2912b26b6bad96a141a8f4",
                "integrity": "sha256-uErRUl1Ikb23dWFcM90u+ibyWC4ZGv0Gr8dWGBJPtLU="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-3htC0A8YEjuOxBtrQo3ZEw2iHdD+Qkaj0rrYpKwJHz8=",
          "summary": "Statutory interest on a judgment debt (8% simple, daily) or a late commercial debt, England and Wales.",
          "level": 2,
          "tags": [
            "judgment-interest",
            "statutory-interest",
            "judgments-act",
            "county-court-judgment",
            "ccj",
            "late-payment",
            "debt-recovery",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "dates.add-days": "^1.0.0",
            "math.round-div": "^1.0.0",
            "finance.late-payment-interest": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "data/county-court-thresholds.json",
            "data/judgment-rates.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "legal.statutory-interest-1.0.1.fune",
            "size": 36256,
            "sha256": "b13808f9559d1b655dfc3ff876d6d8d5e957c3492525c100c6e3a8a8ef97ec9b",
            "languages": {
              "typescript": {
                "name": "legal.statutory-interest-1.0.1-typescript.fune",
                "size": 24367,
                "sha256": "e627da884185b6a771f25797f1e1ec35a3a69afea900d9cb7fb501bdd2ae60a8",
                "integrity": "sha256-s4CUoE8ug8UrrTN/hFR4Xqoi/bWdrVahBbH7lJrrHZM="
              },
              "python": {
                "name": "legal.statutory-interest-1.0.1-python.fune",
                "size": 24493,
                "sha256": "5728b30cf6cd695bbfa6c3462951f2c5bce016f0a0fd8ce0741d59d58f29202e",
                "integrity": "sha256-znSnEEDJ6uk0pYzzYqzexvqL9C53Sm6qDVSGm6mx3Nc="
              },
              "rust": {
                "name": "legal.statutory-interest-1.0.1-rust.fune",
                "size": 25868,
                "sha256": "bf77ae247b3d24cbad5e55c1a413188e255c7ab5306435e56a24e7bfe716b115",
                "integrity": "sha256-vdk0ZwvM0vN+OXXm0qgmNiSeI/iagkqMjKeFu4+tm50="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "legal.time-billing": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-YAnXpNqyZODPjRgYpoZNtKD6H934sWzJOxdtDEOM6nU=",
          "summary": "Fees from time entries: each rounded to 6-minute (or other) units and priced at the fee earner's hourly rate.",
          "level": 2,
          "tags": [
            "time-billing",
            "billable-hours",
            "six-minute-units",
            "fee-earner",
            "rate-card",
            "timesheet",
            "legal-fees",
            "solicitor"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "time.round-to-increment": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "legal.time-billing-1.0.0.fune",
            "size": 34897,
            "sha256": "e161f2cc6742245fff0129a6c88ea58c92b0ceeb9a8ec9b6187b8688e6438a93",
            "languages": {
              "typescript": {
                "name": "legal.time-billing-1.0.0-typescript.fune",
                "size": 26978,
                "sha256": "9214dfc34092a85aefb504c033796a2f7703a694bd57c443dafa12f21c052bc7",
                "integrity": "sha256-W1CmSvLW9nyAkIEbTsS+2Hq5Sc7m2EjeS9lpOXTSI3k="
              },
              "python": {
                "name": "legal.time-billing-1.0.0-python.fune",
                "size": 27009,
                "sha256": "cd4c45eda638e225b56f9bddf583cbe71484eede3506d27b2d4d36526009811d",
                "integrity": "sha256-olR6s6gUNmE19zDtLZ+tPwHBjrpuc8mW6959ArPQsXg="
              },
              "rust": {
                "name": "legal.time-billing-1.0.0-rust.fune",
                "size": 29422,
                "sha256": "21b530abcd06e2be91707cd7040202a7dc8c4c23e0b6ad731cf13e2495c8c4da",
                "integrity": "sha256-R/M27GAYdUxzb/0uLjZ8lgEqYQS548//0F90gBohaM4="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-iS8nFFvjZVZqVSoT4A3cX/ksjO2bM7NKfTalWIZYyN8=",
          "summary": "Fees from time entries: each rounded to 6-minute (or other) units and priced at the fee earner's hourly rate.",
          "level": 2,
          "tags": [
            "time-billing",
            "billable-hours",
            "six-minute-units",
            "fee-earner",
            "rate-card",
            "timesheet",
            "legal-fees",
            "solicitor"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "time.round-to-increment": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "legal.time-billing-1.0.1.fune",
            "size": 36003,
            "sha256": "6b5652aae439ee26b499cf65290280d902f76bdb479118c9ae9ce73d33fa78ee",
            "languages": {
              "typescript": {
                "name": "legal.time-billing-1.0.1-typescript.fune",
                "size": 28084,
                "sha256": "26804d97e9a37c3217c4cf9e2a9292c031cb8be0cc3f95437d4cae6ec654b957",
                "integrity": "sha256-PTsqGNqCXaASEggeeFUwN/tZd30rpvtnPhYuFiIU4qg="
              },
              "python": {
                "name": "legal.time-billing-1.0.1-python.fune",
                "size": 28115,
                "sha256": "cb84b1c33e73d278cefb0a9757de66e58511826f6e922eed27338fe73adc9f79",
                "integrity": "sha256-xKhIefDUlIAmnqkkr8n+zsXrbJ3rnOH0081cypabgdw="
              },
              "rust": {
                "name": "legal.time-billing-1.0.1-rust.fune",
                "size": 30528,
                "sha256": "9a469e9c6bddb6ce90d1d9db1493c977028d0a03aec2851b09c71ac7e84937dc",
                "integrity": "sha256-84c8WDVU2RmUCam5tOx/2bwr0HS+tyxLgR++kRKKll4="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "lending.affordability": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-1sulviuwRr0u/cnP9CyjcMslYf82DNjWZ3wugzynfJg=",
          "summary": "Debt-to-income and a stressed-rate affordability test for a proposed loan's monthly repayment.",
          "level": 2,
          "tags": [
            "lending",
            "affordability",
            "debt-to-income",
            "dti",
            "stress-test",
            "mortgage",
            "underwriting",
            "creditworthiness"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "money.apply-rate": "^1.0.0",
            "lending.loan-payment": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "lending.affordability-1.0.0.fune",
            "size": 22737,
            "sha256": "e730c2f8585380b5fa6047deaa5ab6279015202666572e848b36f5498bac2730",
            "languages": {
              "typescript": {
                "name": "lending.affordability-1.0.0-typescript.fune",
                "size": 15940,
                "sha256": "013d231ffbaab5e7df47d4489c2e2ba93b83f3b9e13c65bd9d16e78fcd8be963",
                "integrity": "sha256-erncZ+Pu4toA5yFOmij/vMQz7rySnF0RMq08S27rYRI="
              },
              "python": {
                "name": "lending.affordability-1.0.0-python.fune",
                "size": 15898,
                "sha256": "791cd53a139b2c4a788ecfcc474c385e162a170c21c116d3828a50b5884ab9a4",
                "integrity": "sha256-90RB4CDeDLbkL0OyZ6px61h99yDtdYcVTydc2rS2m4k="
              },
              "rust": {
                "name": "lending.affordability-1.0.0-rust.fune",
                "size": 16823,
                "sha256": "105e5bf0eafbbc36f74111531c03e7a9affb411180b2b65f617e57cb6f40b737",
                "integrity": "sha256-NppeOnEi11M5bp4gkKu8QxUy9FKKDdkCMo5V01rdO6c="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-YBXFlJPDjwripfn3hrJOSrMwPA89ZegrgzWlSN65jt8=",
          "summary": "Debt-to-income and a stressed-rate affordability test for a proposed loan's monthly repayment.",
          "level": 2,
          "tags": [
            "lending",
            "affordability",
            "debt-to-income",
            "dti",
            "stress-test",
            "mortgage",
            "underwriting",
            "creditworthiness"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "money.apply-rate": "^1.0.0",
            "lending.loan-payment": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "lending.affordability-1.0.1.fune",
            "size": 23905,
            "sha256": "6df533da587af8202f351258764764ef705d4978e30e84e333aae7ff28213787",
            "languages": {
              "typescript": {
                "name": "lending.affordability-1.0.1-typescript.fune",
                "size": 17108,
                "sha256": "77057daf91cdac648f12ef7f902c9da046397c7bc8ee88cb26f9eb382c3e966b",
                "integrity": "sha256-txZZrh1GtIdaJGaGpxzTSut4ilxduPCnSWsZQnpla9A="
              },
              "python": {
                "name": "lending.affordability-1.0.1-python.fune",
                "size": 17066,
                "sha256": "6b922bf0c63859fb7346c34a98d9a0c4e8213ee2786582cee0b00702efc3ae2c",
                "integrity": "sha256-RKEOn7zBHzDhlPAlnH9pd6hEbO92+FbG5tpXipU5Drc="
              },
              "rust": {
                "name": "lending.affordability-1.0.1-rust.fune",
                "size": 17991,
                "sha256": "6349db852fc69d8b486133d4bd71efdfa8fc053fd9f97262245e905eb2c568a6",
                "integrity": "sha256-NpmQFDR2fa/qEJh2DgVm7vyJF7Qi6qrOJsb0yj/BAiY="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "lending.amortisation-schedule": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-SeJmEYE08mn4Z4xG+UvmK7lBvfyoii7qsvdG6dCXd20=",
          "summary": "Repayment schedule for a level-payment loan: interest, principal and balance per period, ending at exactly zero.",
          "level": 3,
          "tags": [
            "lending",
            "loan",
            "mortgage",
            "amortisation",
            "amortization",
            "schedule",
            "repayment-table",
            "instalments"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "lending.loan-payment": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "lending.amortisation-schedule-1.0.0.fune",
            "size": 64877,
            "sha256": "511f8c9a41494676db126c4370726d037cabbece85d267473d5e95ef7799bee1",
            "languages": {
              "typescript": {
                "name": "lending.amortisation-schedule-1.0.0-typescript.fune",
                "size": 58009,
                "sha256": "b33aa310185d03a021795b913646582df618a1348065e45aaeec2e9b1eaa4e7c",
                "integrity": "sha256-6ZlslpG/1BXTLjyXVVXoEwP/eQuZWlghr1d/WUW0/gI="
              },
              "python": {
                "name": "lending.amortisation-schedule-1.0.0-python.fune",
                "size": 58163,
                "sha256": "e6b6f4518023e27211a88d09d05ad271ad39abad0f6bcfcc0d1f686240b6b081",
                "integrity": "sha256-zg+HOZrbZwz5+22YzB2QQtGqVLHRkx6nGyaNv2t6eP0="
              },
              "rust": {
                "name": "lending.amortisation-schedule-1.0.0-rust.fune",
                "size": 59189,
                "sha256": "eefe434f9dff7f96ba067fdbbfde1deaa2d0a5e18baa6fe0f2aa418c1b5c898b",
                "integrity": "sha256-BCoBO3/fxfGPesMLNiAlDnn2mw/dI4vW4e3YxEkaZ5E="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-2EWcyLuk8BsjCQdZD7aC48202sC+sEGTa4m6R+K8gZQ=",
          "summary": "Repayment schedule for a level-payment loan: interest, principal and balance per period, ending at exactly zero.",
          "level": 3,
          "tags": [
            "lending",
            "loan",
            "mortgage",
            "amortisation",
            "amortization",
            "schedule",
            "repayment-table",
            "instalments"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "lending.loan-payment": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "lending.amortisation-schedule-1.0.1.fune",
            "size": 66045,
            "sha256": "d20048fdaec868479307700ac9f444968a01d572c7be5809edaf48096ef9f96c",
            "languages": {
              "typescript": {
                "name": "lending.amortisation-schedule-1.0.1-typescript.fune",
                "size": 59177,
                "sha256": "9d89738c0ecf7cbcf3a2f429dc2ac9d46538f49c76de3eb207de7b396780498c",
                "integrity": "sha256-Pr4GOAGTksr0/M6XYpmx8zA/WGOmHzQVIt5liXo35pY="
              },
              "python": {
                "name": "lending.amortisation-schedule-1.0.1-python.fune",
                "size": 59331,
                "sha256": "e256dddab54c78ab0dce138d5fab85a4bafccf3b019cc3b4e918e9dd236e7371",
                "integrity": "sha256-t4Syh9rGajZa3AwVQ37AFj2fdEtMoCvg5w7mDAnHrZY="
              },
              "rust": {
                "name": "lending.amortisation-schedule-1.0.1-rust.fune",
                "size": 60357,
                "sha256": "6bf6799f089b540d78193630d38630bafe5755e4e6e532b1d3b4dab54d74c905",
                "integrity": "sha256-ov4vnT9DdkkX/+Y4gknjOZstzUj2dFguEVFptHMj5Z4="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "lending.apr": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-ucvIx1qGOT3fay+wnH2/3XVqlhhq5IV3Hdhs5545iNs=",
          "summary": "Consumer-credit APR from drawdowns and repayments, by the FCA CONC App 1.2.6 equation, to one decimal place.",
          "level": 2,
          "tags": [
            "lending",
            "apr",
            "annual-percentage-rate",
            "consumer-credit",
            "total-charge-for-credit",
            "conc",
            "cca",
            "gb"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.big-integer": "^1.0.0",
            "math.fractional-power": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "lending.apr-1.0.0.fune",
            "size": 48184,
            "sha256": "dc1f50faf9d8952d5bdf8f7a6fb7193e8326e8f8d3fa9dc3e2a3e6b45eb63d08",
            "languages": {
              "typescript": {
                "name": "lending.apr-1.0.0-typescript.fune",
                "size": 37652,
                "sha256": "1e5fb5b8b2f5f6950c28e73a158766d3fc90ece96a9c23e2232f142ee5a83149",
                "integrity": "sha256-fBLb9DJ2Y1b3HPXQXHtf/LW9iVpyNZepuTm7ioqKQ4c="
              },
              "python": {
                "name": "lending.apr-1.0.0-python.fune",
                "size": 37383,
                "sha256": "d8292bf6472330ac93e0d6a34bdaef5f023fedbc0aa1a7a8a7722fdaf35f1370",
                "integrity": "sha256-aAhKYPcCKuLDTh5/bj4A5GE/n4Faqi1MOBqxv6UVVLk="
              },
              "rust": {
                "name": "lending.apr-1.0.0-rust.fune",
                "size": 39257,
                "sha256": "d3667efbf52d90a7f1e6f8e1c8a126cb1e09678b4e1e46343ef4df494ed13756",
                "integrity": "sha256-uPn9I7nduPJMW8wxO91aA65QjOZYaF1g5Doej8FHUuk="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-dbPKY7k5nTYK6W7uQwrGSHN2zGsygF+eO1+/5/PofvI=",
          "summary": "Consumer-credit APR from drawdowns and repayments, by the FCA CONC App 1.2.6 equation, to one decimal place.",
          "level": 2,
          "tags": [
            "lending",
            "apr",
            "annual-percentage-rate",
            "consumer-credit",
            "total-charge-for-credit",
            "conc",
            "cca",
            "gb"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.big-integer": "^1.0.0",
            "math.fractional-power": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "lending.apr-1.0.1.fune",
            "size": 49352,
            "sha256": "dd7bb6a99d431966dc31b1c9bb87c668e459af3781904ae26a062587a8944735",
            "languages": {
              "typescript": {
                "name": "lending.apr-1.0.1-typescript.fune",
                "size": 38820,
                "sha256": "53253f607cee41caccd71e60a809e4073845a20d7721f5b807b5c7ac02694827",
                "integrity": "sha256-AjvsnAT7M5i29Fc9RUU58T1SiN+9oD0E9M2tmwwYC8A="
              },
              "python": {
                "name": "lending.apr-1.0.1-python.fune",
                "size": 38551,
                "sha256": "3ac0ecabdf30f5eae38a307fadeb60693ad9cc4784a37f60a2e7f0ab749c5272",
                "integrity": "sha256-/B764g/sdJvYupAPHGt5kWXumX6a3OkvsQy3nXb6hYE="
              },
              "rust": {
                "name": "lending.apr-1.0.1-rust.fune",
                "size": 40425,
                "sha256": "40122891c15badb8eaa78b804be5ab8eeb3efe3789f7d98b17bfe717b4add11f",
                "integrity": "sha256-G8eNj6VrZJtZSI2oYxNYz5mQd+nIgN6qUI1SmZL6HgY="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "lending.daily-interest": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-DPd0KJF2vMnHzxsdAmZpwLCX1UZ0hK2AXI3A6GZLrco=",
          "summary": "Interest accrued day by day on a changing balance under a day-count convention, summed exactly and rounded once.",
          "level": 2,
          "tags": [
            "lending",
            "interest",
            "daily-interest",
            "accrual",
            "day-count",
            "balance",
            "savings",
            "overdraft",
            "act-365"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.rational": "^1.0.0",
            "math.round-div": "^1.0.0",
            "dates.days-between": "^1.0.0",
            "dates.day-count-fraction": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "lending.daily-interest-1.0.0.fune",
            "size": 25790,
            "sha256": "7e5128fdf8cd250dc1679e4ce5d5e2d4d87c68352b5a93eadccb9d39d3b34225",
            "languages": {
              "typescript": {
                "name": "lending.daily-interest-1.0.0-typescript.fune",
                "size": 19094,
                "sha256": "d02a49eb1da98133f057da5086d13d74ebbfe33ec981371fe21b37adab22679d",
                "integrity": "sha256-uWuRV3ReQZSghRA6xcReO7SHlMKcYwvpMQENZBAEWP8="
              },
              "python": {
                "name": "lending.daily-interest-1.0.0-python.fune",
                "size": 18923,
                "sha256": "0feaac68fe0f53d15596cf80e2fa1e1925b17158701fcc43c3f2b024ae58f5d4",
                "integrity": "sha256-Z4OuM/gu58o5t7thVFCb3225MQ3ihK+ou6wiPiwIf8k="
              },
              "rust": {
                "name": "lending.daily-interest-1.0.0-rust.fune",
                "size": 20023,
                "sha256": "491ab3bca213764f82fb6a1446c5e1b60b507ebaa3641674d40ce0a2d1b409ad",
                "integrity": "sha256-+R5S2gUcX5CxA2R+vJ0xFE5yDuUZzRbnQM39KeDsJNg="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-1z7hcbRyu3kxoonZTbeoBhOm0NCP2KInHb7JViuaBdI=",
          "summary": "Interest accrued day by day on a changing balance under a day-count convention, summed exactly and rounded once.",
          "level": 2,
          "tags": [
            "lending",
            "interest",
            "daily-interest",
            "accrual",
            "day-count",
            "balance",
            "savings",
            "overdraft",
            "act-365"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.rational": "^1.0.0",
            "math.round-div": "^1.0.0",
            "dates.days-between": "^1.0.0",
            "dates.day-count-fraction": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "lending.daily-interest-1.0.1.fune",
            "size": 26958,
            "sha256": "2c05773e8a51ceee16cb0d3f7b369aaebb047265e4c8eb990b39c4186dae89ed",
            "languages": {
              "typescript": {
                "name": "lending.daily-interest-1.0.1-typescript.fune",
                "size": 20262,
                "sha256": "4fe2895249a67d7aa93f0f83408eefe1f0227a7b861b3bb13845c5e7f8097fc7",
                "integrity": "sha256-Cay9GJk5zNoPbHYdu6eZ8oMBNBsfxev1FGXtPvzR5kU="
              },
              "python": {
                "name": "lending.daily-interest-1.0.1-python.fune",
                "size": 20091,
                "sha256": "fc74a43b5b1f5f29fc60a0ce2add6d7110317eb3ed0d54ba399d783b48ffc7e3",
                "integrity": "sha256-cLSH0tx+pTA90qq1nx+vtQ+jYmaj/RJcWrCcuwtSsxU="
              },
              "rust": {
                "name": "lending.daily-interest-1.0.1-rust.fune",
                "size": 21191,
                "sha256": "f311de8d3ae9ba9b23a9a021480cf269bc171478b1b84aef4b179d1d62054ab9",
                "integrity": "sha256-cavMQOyRygckoVXX+bcwZ8Bq1xLMCISA+zc0Fuvcg/0="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "lending.early-settlement": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-P5k2PkoJVPuuQjtX710/csfk5it3BlwSG19LTBsa/5I=",
          "summary": "Early settlement figure and rebate on UK regulated consumer credit, per the Early Settlement Regulations 2004.",
          "level": 2,
          "tags": [
            "lending",
            "early-settlement",
            "settlement-figure",
            "rebate",
            "consumer-credit",
            "cca",
            "redemption",
            "gb"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "dates.add-days": "^1.0.0",
            "dates.add-months": "^1.0.0",
            "math.big-integer": "^1.0.0",
            "dates.days-between": "^1.0.0",
            "math.fractional-power": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "lending.early-settlement-1.0.0.fune",
            "size": 97394,
            "sha256": "8284b8e2472adb9e78d4a6b5fa0174fb1292de4cfb2acd6df3e20bb531047c68",
            "languages": {
              "typescript": {
                "name": "lending.early-settlement-1.0.0-typescript.fune",
                "size": 86640,
                "sha256": "6c9faa2d35e1907c5fa0aa03beced7f377bef5fa5ee3949d20fe20ba7b013282",
                "integrity": "sha256-K/GpQIgUTuJ1UMKztprstjBayz+4E8DL6utl31SB560="
              },
              "python": {
                "name": "lending.early-settlement-1.0.0-python.fune",
                "size": 86482,
                "sha256": "23ba44d7337d214538481ecf1ae97048e9cd9a6216ac855d48bea0c100fa589a",
                "integrity": "sha256-PQVvmgXPm7X0zMySUAim0U7u93OF1WK8U5F+p2wtyPo="
              },
              "rust": {
                "name": "lending.early-settlement-1.0.0-rust.fune",
                "size": 88028,
                "sha256": "5e3c4b08c28f8c9741e7bdcffc466e0134a59c440375361d719b7c89674c04f5",
                "integrity": "sha256-QdmqeadQkKG99nYbLJNL0QGSdPGnS5pT1Zyd2hkckZw="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-ECEw4tSGZBJV5E8MsDm2JzGNZs4QAkL+P9FYLR0/Q2Y=",
          "summary": "Early settlement figure and rebate on UK regulated consumer credit, per the Early Settlement Regulations 2004.",
          "level": 2,
          "tags": [
            "lending",
            "early-settlement",
            "settlement-figure",
            "rebate",
            "consumer-credit",
            "cca",
            "redemption",
            "gb"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "dates.add-days": "^1.0.0",
            "dates.add-months": "^1.0.0",
            "math.big-integer": "^1.0.0",
            "dates.days-between": "^1.0.0",
            "math.fractional-power": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "lending.early-settlement-1.0.1.fune",
            "size": 98562,
            "sha256": "0c7f98fcae78d3b8c877e90e6d3d6858547820c7c16f61b1da4451db3c34e1aa",
            "languages": {
              "typescript": {
                "name": "lending.early-settlement-1.0.1-typescript.fune",
                "size": 87808,
                "sha256": "762a48097395b76105f2b0414dc78bbb17bc6b7be6d966149417d1245ade19e0",
                "integrity": "sha256-QTCGurw3UtgGOyeNKxhCj9jy8RQguYtlIno3Et6AHbA="
              },
              "python": {
                "name": "lending.early-settlement-1.0.1-python.fune",
                "size": 87650,
                "sha256": "f1d1aab6670c345972a2cc2439395b19085ff1990766d3d6e6ec46be9152d455",
                "integrity": "sha256-svutEjgRJzQkFBpDP6ilBGP3Rp2DF0FBtRuTzSttTwk="
              },
              "rust": {
                "name": "lending.early-settlement-1.0.1-rust.fune",
                "size": 89196,
                "sha256": "433538ab033978df9f2b3ed1aa1c1ee1748dde0f59a041ca87e33ad5d143b22d",
                "integrity": "sha256-FyAh/AR1zNe553XJMiooWIzTkZjvnWQbjhU9+3O+n8A="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "lending.loan-payment": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-Y93BwroOpyQ5GX7RiRa2w/DGN3I6INEZrIbAw+RTA8U=",
          "summary": "Level repayment for a loan (annuity formula), computed exactly and rounded once, the way you choose.",
          "level": 2,
          "tags": [
            "lending",
            "loan",
            "mortgage",
            "repayment",
            "annuity",
            "instalment",
            "pmt",
            "amortising"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "math.big-integer": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "lending.loan-payment-1.0.0.fune",
            "size": 21644,
            "sha256": "2cda1ca02e49e0cbea8d34e9653591bf1918f08b4fb391f139db0abb2f49c191",
            "languages": {
              "typescript": {
                "name": "lending.loan-payment-1.0.0-typescript.fune",
                "size": 14056,
                "sha256": "7b58251d2d51b30a3927ae948cf774e18cc4a74b371bdd1e8b2291163324d6ea",
                "integrity": "sha256-VQb6Tt53u7B/GQff4DI1DL2f/cticn1hPZdICDvXprg="
              },
              "python": {
                "name": "lending.loan-payment-1.0.0-python.fune",
                "size": 14061,
                "sha256": "d32efdecb6b08d6f2afbf2a00212ce671e135ac01fe56690a68ed6735e961f97",
                "integrity": "sha256-WsR3Sl1jw74BdR1L/PWJEfX1gjTZ1PzexdqzhqMV3OU="
              },
              "rust": {
                "name": "lending.loan-payment-1.0.0-rust.fune",
                "size": 14555,
                "sha256": "a1a93a457df8654de93a785986a628f7023df990aec244b946719405384c9a9e",
                "integrity": "sha256-g0NKc6h6o3oqVAgYl1o/by00kYA78tZCMul8bxhhYwY="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-4TW+785uH7PzHymttZ4bwfZFXbeaFcrW2j37n90RvUo=",
          "summary": "Level repayment for a loan (annuity formula), computed exactly and rounded once, the way you choose.",
          "level": 2,
          "tags": [
            "lending",
            "loan",
            "mortgage",
            "repayment",
            "annuity",
            "instalment",
            "pmt",
            "amortising"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "math.big-integer": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "lending.loan-payment-1.0.1.fune",
            "size": 22812,
            "sha256": "ae3adb6e388662e058f53225156c2198c46abb159e47c6967cb931c48a9670a1",
            "languages": {
              "typescript": {
                "name": "lending.loan-payment-1.0.1-typescript.fune",
                "size": 15224,
                "sha256": "a36a93a3d11c50b3bfa748eff40777808a67c06ffbc6e685013a0d6dc60b4de3",
                "integrity": "sha256-XfzjHsKc4pQDITaSaezzt0RA9hjW+ByPMm5LMmcHELc="
              },
              "python": {
                "name": "lending.loan-payment-1.0.1-python.fune",
                "size": 15229,
                "sha256": "0fc6692cd1823f2effc6a0a2177eef42eee4389079ab77d9ff51eae23b09420a",
                "integrity": "sha256-kVkZxY2Ez7VYwa3zHnBP/g2h/Tf92REu/XGB2kRDjic="
              },
              "rust": {
                "name": "lending.loan-payment-1.0.1-rust.fune",
                "size": 15723,
                "sha256": "92fa2060d985490b67d3604cad0fb8853686dd704b3399c2546ed5efff43df14",
                "integrity": "sha256-ng7sYHFhgbGqSHWQBnwdVi7aVCYSICLTqCdtdnqvOkA="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "lending.ltv": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-QjO9tfRcTb2JSOsNslCpOpjSNmvQFyMHowl7BQY/14o=",
          "summary": "Loan-to-value ratio in basis points, and the band it falls in from a band table you supply.",
          "level": 1,
          "tags": [
            "lending",
            "ltv",
            "loan-to-value",
            "mortgage",
            "equity",
            "band",
            "deposit"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "lending.ltv-1.0.0.fune",
            "size": 21068,
            "sha256": "cb7c32d332a34dba94a79558c5d054979d4706d697ed194156541da2a1c07e3f",
            "languages": {
              "typescript": {
                "name": "lending.ltv-1.0.0-typescript.fune",
                "size": 16145,
                "sha256": "51fcd2461dd2b1a0fb3f680a6dd356cbdefd014c72c71629f44da24fd646aae5",
                "integrity": "sha256-XCrNLw9MaSgZdQ4IqfLUFhMbzZQCZjqjDH+51qoltDk="
              },
              "python": {
                "name": "lending.ltv-1.0.0-python.fune",
                "size": 16116,
                "sha256": "fb764a8ce4ec64abe101c29736e27a9a6fc5a720a9c86897b189ddbb75e6fcf2",
                "integrity": "sha256-ERlVIGQq2YEmpEo5DZ7Odcmo4q1ztz6p9CNE3Pd6dus="
              },
              "rust": {
                "name": "lending.ltv-1.0.0-rust.fune",
                "size": 16957,
                "sha256": "fb3806c207b37cfc908a24de12f6160b12ff9ee9fff1ca5ed14109139ba4c177",
                "integrity": "sha256-lNiWQeZ38bJ0jEsWMERiFMkKTzg/vC3Ogh3Y/wMmuCY="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-iKphWTkWk0c7IhAZC9k/Ih6/6YaqNIvZHSu8v9/5gwQ=",
          "summary": "Loan-to-value ratio in basis points, and the band it falls in from a band table you supply.",
          "level": 1,
          "tags": [
            "lending",
            "ltv",
            "loan-to-value",
            "mortgage",
            "equity",
            "band",
            "deposit"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "lending.ltv-1.0.1.fune",
            "size": 22236,
            "sha256": "63eed277bff3fe7d0cbfa30ba2ea54b4c963b0e535b95f461a1043a8f7bd4a3c",
            "languages": {
              "typescript": {
                "name": "lending.ltv-1.0.1-typescript.fune",
                "size": 17313,
                "sha256": "43befc54a0ee11dfc28564ee081611d451155ccb01480f2f05e25332b429362f",
                "integrity": "sha256-FYAX57ZL1S1GBuGxprxX4q8HXAb3kGMk+XRWgk7RGsY="
              },
              "python": {
                "name": "lending.ltv-1.0.1-python.fune",
                "size": 17284,
                "sha256": "ba48062c3c33be274de81f285bd4775f893f32f14cfed222edf6f0aa31436ba7",
                "integrity": "sha256-DY+2mt0eKaQf4BSxi9OUKA6ZJfjWS28AeznVLlKHwZw="
              },
              "rust": {
                "name": "lending.ltv-1.0.1-rust.fune",
                "size": 18125,
                "sha256": "bb36a092e807586b44649386356d3c6aa405b2bb32c6cc744879d5b8bde6a38f",
                "integrity": "sha256-/DePPb6MXsIOzl7bkC0C99neJOXc1FnQ0dQ8cdQ8zg8="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "lending.overpayment-effect": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-mKiYAACuzdi3HLKuOfNxkrrMshUKCk+T+Jsd3Y4QWts=",
          "summary": "What a one-off overpayment does to a loan: a shorter term at the same payment, or a lower payment over the same term.",
          "level": 3,
          "tags": [
            "lending",
            "loan",
            "mortgage",
            "overpayment",
            "lump-sum",
            "early-repayment",
            "term-reduction",
            "payment-reduction"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "lending.loan-payment": "^1.0.0",
            "lending.amortisation-schedule": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "lending.overpayment-effect-1.0.0.fune",
            "size": 28498,
            "sha256": "5f0cd6a5d016440de8b0df757bf2c623f54c6a263e67d131983c00fa889c3bef",
            "languages": {
              "typescript": {
                "name": "lending.overpayment-effect-1.0.0-typescript.fune",
                "size": 19812,
                "sha256": "ab233e035ad8c638820d4de0a62cc6069daada6fe796ed60a99025be9e3b4d25",
                "integrity": "sha256-wq3gn5idlWS9SUkkODJw7ednF8TwngI75P6n2ad3Sug="
              },
              "python": {
                "name": "lending.overpayment-effect-1.0.0-python.fune",
                "size": 19726,
                "sha256": "86fc680433565690477bc949d92cd382a3cf124744ef10b64e5fedbc81ab461a",
                "integrity": "sha256-kYI+4Te7dWClRQtDzmUBcU6Z/zvkibhX7phAmfuxszY="
              },
              "rust": {
                "name": "lending.overpayment-effect-1.0.0-rust.fune",
                "size": 21168,
                "sha256": "dd6389911c67c519a7efc9eede5d763f8121e2e79f3ccafe9dba6b81bb1c6e10",
                "integrity": "sha256-KwJWTRMNqkIpoQLTUYECDdBC0vDSq2WaPQwHTKwg8YE="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-9RnGaTjI8XgSWjQEAbYwEMtQ0H9WRtQ8Wd7erW8rWjw=",
          "summary": "What a one-off overpayment does to a loan: a shorter term at the same payment, or a lower payment over the same term.",
          "level": 3,
          "tags": [
            "lending",
            "loan",
            "mortgage",
            "overpayment",
            "lump-sum",
            "early-repayment",
            "term-reduction",
            "payment-reduction"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "lending.loan-payment": "^1.0.0",
            "lending.amortisation-schedule": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "lending.overpayment-effect-1.0.1.fune",
            "size": 29666,
            "sha256": "fc3aabd047cbf3d1b5254941c6ebef4ebd6a7293999346017809571b78e00bc8",
            "languages": {
              "typescript": {
                "name": "lending.overpayment-effect-1.0.1-typescript.fune",
                "size": 20980,
                "sha256": "b1b947e15cc8ffc22358cea8ea86b48753c41addae345a9e414aa960f387cd43",
                "integrity": "sha256-9t4tWUEXRGsorGMNNjraCkAguApLV+q5oeclzaCsOl4="
              },
              "python": {
                "name": "lending.overpayment-effect-1.0.1-python.fune",
                "size": 20894,
                "sha256": "aa4ec06f01d99cd7ecb60d63582cdafb1225eae2c280b74764133d3a3f93bd72",
                "integrity": "sha256-bynmYnKHpm0E7yGkhQPrjkO7BBSAQThhrSA6lCrH8bI="
              },
              "rust": {
                "name": "lending.overpayment-effect-1.0.1-rust.fune",
                "size": 22336,
                "sha256": "ebeba177f35433f2cc3ff83d8f93ba3b9d66642231e269dd13b0749cbf31fad1",
                "integrity": "sha256-62UwetjHen7a/kOGszOyReHOA5fSP0+hjqq8lSAYf28="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "logistics.container-fit": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-yk/fcqXEpnzdHYL03XjtttJjnL9uHa/GR8hMQEZYo54=",
          "summary": "How many identical cartons fit in a 20ft, 40ft or 40ft high-cube container or a 13.6 m trailer, by space and by weight.",
          "level": 2,
          "tags": [
            "container-fit",
            "container-loading",
            "load-planning",
            "cartons",
            "20ft",
            "40ft",
            "high-cube",
            "trailer"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "data/containers.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "logistics.container-fit-1.0.0.fune",
            "size": 27549,
            "sha256": "0724243703a57d2a7546dcf573145a83d6aab928f399362008abab1ef93294b6",
            "languages": {
              "typescript": {
                "name": "logistics.container-fit-1.0.0-typescript.fune",
                "size": 18794,
                "sha256": "e157e8e355e51f82f4d7dd08668971e48d3940cd30db07c4b5b48c820b7d8589",
                "integrity": "sha256-IHYy3nPmsQTCezLYfxHBLkkIg+M5vMv+Lom30MFx8+E="
              },
              "python": {
                "name": "logistics.container-fit-1.0.0-python.fune",
                "size": 18981,
                "sha256": "ab43f363f672a6ce6dcb6f5c62d039b93c04dacc77619ccc410babeadea94b2a",
                "integrity": "sha256-TAo65+1kD6CZnI/XB4Sf+r25pqzhB7HpPzeHuaXTvA8="
              },
              "rust": {
                "name": "logistics.container-fit-1.0.0-rust.fune",
                "size": 20372,
                "sha256": "ee2a7717e97ec029a390ce5e32e06790488bcf1c1c14ab8a13839661dc335c99",
                "integrity": "sha256-YjEVA6tZ9QdmPT3+WsEXLLyY5IFY9qJSGkZO51/vA1U="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "logistics.delivery-date": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-9jdqfha1r+2APH9ONocZNiuC1tjDwVkeavIOP+oEEpk=",
          "summary": "Estimated dispatch and delivery dates from order time, dispatch cut-off, service days, weekends and UK bank holidays.",
          "level": 2,
          "tags": [
            "delivery-date",
            "eta",
            "estimated-delivery",
            "dispatch",
            "cut-off",
            "next-day",
            "working-days",
            "shipping"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.day-of-week": "^1.0.0",
            "dates.bank-holidays": "^1.0.0",
            "dates.add-business-days": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "logistics.delivery-date-1.0.0.fune",
            "size": 20130,
            "sha256": "bd62d3c93df138ca8f79b8fc80b6870308c59a14b2e3ba36a8cf803ea728edc4",
            "languages": {
              "typescript": {
                "name": "logistics.delivery-date-1.0.0-typescript.fune",
                "size": 13380,
                "sha256": "0d9b8f51edb5a964985ef71f6afbde4665057577a1797eb6496cd4e01d5e7c07",
                "integrity": "sha256-mKXnqD2dwHkB3pc/kgyfJi7ozCgdX/YX+6ZqIktlOqM="
              },
              "python": {
                "name": "logistics.delivery-date-1.0.0-python.fune",
                "size": 13480,
                "sha256": "db213928198d48722819f4750850780efe9e67378f27339d2eab018ccff33ab6",
                "integrity": "sha256-Nz/E7qK+61oneuQbEfwfFIC1t4rznnuWwARJ75BxLRk="
              },
              "rust": {
                "name": "logistics.delivery-date-1.0.0-rust.fune",
                "size": 14452,
                "sha256": "72bf273617979b4922ed0a85fa5d3111d3b10dfd6d05110a5d8614e47c2d80b6",
                "integrity": "sha256-ZQ4lE5Vpgl1DFXf1zK82GRG9TS6PNIdY+W5w3PTJUqA="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "logistics.demurrage": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-UzmabKlA1AvZ/U2PBRnNO62VfBksf0PQciTItih9enU=",
          "summary": "Demurrage or detention charge for a container: free days, then a tiered daily rate from the carrier's tariff.",
          "level": 2,
          "tags": [
            "demurrage",
            "detention",
            "container",
            "free-time",
            "port-charges",
            "shipping-line",
            "storage",
            "d-and-d"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.sum": "^1.0.0",
            "money.amount": "^1.0.0",
            "dates.add-days": "^1.0.0",
            "dates.days-between": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "logistics.demurrage-1.0.0.fune",
            "size": 28367,
            "sha256": "9bf7d4f8c7b4fe3c08a03715c06c0870b842933ed6581de5c71d421ae761358f",
            "languages": {
              "typescript": {
                "name": "logistics.demurrage-1.0.0-typescript.fune",
                "size": 19587,
                "sha256": "0abd60efb0b591b502b3faf590fe673c41f9c0f76a34a9759110a842073558f7",
                "integrity": "sha256-+Akt3CsKLIlwtjWV6n4RpD3j1YBdBSVMbmcJgRoU3QM="
              },
              "python": {
                "name": "logistics.demurrage-1.0.0-python.fune",
                "size": 19938,
                "sha256": "680b70a279415de6e12c1db7a56e51f533575e7f94bb2ea2923f716d7e5d0013",
                "integrity": "sha256-vDP9O5hDc8CnaDZHvlM6RRsrSySlBD3JaAj2x4ooiaM="
              },
              "rust": {
                "name": "logistics.demurrage-1.0.0-rust.fune",
                "size": 21470,
                "sha256": "adf9e73beafc1f5adb407f56063fa95afc20a43d7ed9ed1d30e0ba66ddec8b46",
                "integrity": "sha256-m7HWPVAihm/C39QPGkca9GKfIV0uLY2TAPmV1dKm9xo="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "logistics.duty-estimate": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-0kNxa7HtJpnsvTpVUBBCQITdGqDkG7Im1KEMIjfcuok=",
          "summary": "Estimate import duty and import VAT on goods: customs value on a CIF basis, the caller's duty rate, VAT on top.",
          "level": 2,
          "tags": [
            "import-duty",
            "customs-duty",
            "import-vat",
            "landed-cost",
            "customs-value",
            "cif",
            "tariff"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.add": "^1.0.0",
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "money.apply-rate": "^1.0.0",
            "finance.tax.vat-rate": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "logistics.duty-estimate-1.0.0.fune",
            "size": 23095,
            "sha256": "99d0570f48411b68738de7c26609db5d694afb6227c74254220d23f6e72c051e",
            "languages": {
              "typescript": {
                "name": "logistics.duty-estimate-1.0.0-typescript.fune",
                "size": 17944,
                "sha256": "9f31bbd05611faf54eeb171bd84d7240fbe6fe4167d2e8038fee4b4bed502bfa",
                "integrity": "sha256-VijbCmPQY/TO2ClswYp3Cyv+nzIz8/17G9rid3SN3/8="
              },
              "python": {
                "name": "logistics.duty-estimate-1.0.0-python.fune",
                "size": 18039,
                "sha256": "a82ec3691421b5a95f29f50289ff67234c2fdb442823801dbec16262d10d1b97",
                "integrity": "sha256-TniWid7i0FQneUhcK9KVg7oYEKmU77Aw6cZjy00lIgY="
              },
              "rust": {
                "name": "logistics.duty-estimate-1.0.0-rust.fune",
                "size": 18868,
                "sha256": "330be3835e823a9db83ae481e4bd705ab4ebf4569629fb812b3930344738f103",
                "integrity": "sha256-IkH6mx5XJJ8HcbE2F7wWXVhfosgrFdlaaq+MoQmrEb4="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-YK7dhze2x3iYipiI3DucTuoZe4rClLlNhwuNf3mjyA0=",
          "summary": "Estimate import duty and import VAT on goods: customs value on a CIF basis, the caller's duty rate, VAT on top.",
          "level": 2,
          "tags": [
            "import-duty",
            "customs-duty",
            "import-vat",
            "landed-cost",
            "customs-value",
            "cif",
            "tariff"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.add": "^1.0.0",
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "money.apply-rate": "^1.0.0",
            "finance.tax.vat-rate": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "logistics.duty-estimate-1.0.1.fune",
            "size": 24224,
            "sha256": "1c8030daab97024fc1ebae2e82887697a464ddf6ba1e738fd84f1def3a9d78bc",
            "languages": {
              "typescript": {
                "name": "logistics.duty-estimate-1.0.1-typescript.fune",
                "size": 19073,
                "sha256": "b3a0bccd5f84749b28b1ee4a2d0ef2a249642d6e68b26a34ce7286501c973ecc",
                "integrity": "sha256-4b5tm3y1xI5L0b9U7gMfivw+HuU+sHG9vEa8S/243A4="
              },
              "python": {
                "name": "logistics.duty-estimate-1.0.1-python.fune",
                "size": 19168,
                "sha256": "64fa3f6a1553e8ceca8a3b4b21eb0e610e730d7661087af7e53d78839a7fc3fa",
                "integrity": "sha256-zf+hhukWkFmjFl+ukd0CJoB/f06PyQT38gpoJt8novA="
              },
              "rust": {
                "name": "logistics.duty-estimate-1.0.1-rust.fune",
                "size": 19997,
                "sha256": "6952812f1dcd338535c6fd4bf94a99de49ac67526d07c1a2c3cc1b0c0732365c",
                "integrity": "sha256-YFDT9mtiaKRdg7RVoljM7NqWCTGtpuGHq3DqcPJGja0="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "logistics.freight-rate": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-9WEDqSO0j6BydTqxrJfDiY/l0JwWSWRo+3WWsntdiMo=",
          "summary": "Freight charge from a carrier's dated weight-break tariff for a zone, with the fuel surcharge in force on the ship date.",
          "level": 2,
          "tags": [
            "freight",
            "rate",
            "tariff",
            "weight-break",
            "fuel-surcharge",
            "carrier",
            "haulage",
            "air-freight"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.add": "^1.0.0",
            "money.amount": "^1.0.0",
            "money.compare": "^1.0.0",
            "math.round-div": "^1.0.0",
            "money.apply-rate": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "logistics.freight-rate-1.0.0.fune",
            "size": 72801,
            "sha256": "8bea10f04f6f84cc8fdf6cedc848e6c79afef95634eae21234454081c74ab780",
            "languages": {
              "typescript": {
                "name": "logistics.freight-rate-1.0.0-typescript.fune",
                "size": 61013,
                "sha256": "e530a653d93261f6357349a0a0f574258f1c12f2dc87f5cf58fe5d7c29d4ad24",
                "integrity": "sha256-I37DfUR3UmAYg87l31C2JYBo4D8I/RX3Fkj7J3kWpDM="
              },
              "python": {
                "name": "logistics.freight-rate-1.0.0-python.fune",
                "size": 61344,
                "sha256": "d268ab62e97d57e0469e3363b8d9e5770eb02543c445a1fbb0ea0de7a88e32c0",
                "integrity": "sha256-gjGUc53iaE5f48mXeno6vtqwxnKirsusJODNtZtRgDw="
              },
              "rust": {
                "name": "logistics.freight-rate-1.0.0-rust.fune",
                "size": 63746,
                "sha256": "ac7aef43d3149baa54a4d8eb3588e14109bc39c3d02a5e6bf2f5ede145c42c25",
                "integrity": "sha256-znGsfav9SWUMhvNAuULdfRV+n5ZWQ8plIIiemNV1DdM="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-nDaT4UC9jJKJi4odKrYLOPHz58prUNnpHXXEXUHYg4M=",
          "summary": "Freight charge from a carrier's dated weight-break tariff for a zone, with the fuel surcharge in force on the ship date.",
          "level": 2,
          "tags": [
            "freight",
            "rate",
            "tariff",
            "weight-break",
            "fuel-surcharge",
            "carrier",
            "haulage",
            "air-freight"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.add": "^1.0.0",
            "money.amount": "^1.0.0",
            "money.compare": "^1.0.0",
            "math.round-div": "^1.0.0",
            "money.apply-rate": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "logistics.freight-rate-1.0.1.fune",
            "size": 77267,
            "sha256": "23349243b0c363ec3d796e3aa555df9607f22fdd26c6b21ea95fb440639411d4",
            "languages": {
              "typescript": {
                "name": "logistics.freight-rate-1.0.1-typescript.fune",
                "size": 65475,
                "sha256": "f6098b3e994d7c8b9f5669d91cdfa1b36ea4204df9e76a9c75c18da84c475029",
                "integrity": "sha256-ecBvsBcNfTdO1PtF0HM81wJmzLMgG7gbl02F0D/YAvI="
              },
              "python": {
                "name": "logistics.freight-rate-1.0.1-python.fune",
                "size": 65810,
                "sha256": "869d904581607f9144d487fb9340b9d96412662dc746ce7e111390d0ea4e6399",
                "integrity": "sha256-haYUU3Y+jxMikDtFfK10UjL3hEVxIsxITchDGj8gv+4="
              },
              "rust": {
                "name": "logistics.freight-rate-1.0.1-rust.fune",
                "size": 68208,
                "sha256": "af6695ce5c9430fb01d9a9842b53e06fa413d18a195f39c6bbd9048a25715ec1",
                "integrity": "sha256-ZbbTrK13Ts24SpCNaFeG01bh95rLrEqbvMz/MjBidc4="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "logistics.hs-code-validate": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-IMTHVbJd85YaTIsYwSE1zBy7M8G/WmzmaWFl4ZLpa10=",
          "summary": "Check the format of a commodity code: 6-digit HS, 8-digit CN or 10-digit TARIC/UK code, with chapter and heading checks.",
          "level": 0,
          "tags": [
            "hs-code",
            "commodity-code",
            "tariff-code",
            "customs",
            "harmonized-system",
            "cn-code",
            "taric",
            "validation"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "logistics.hs-code-validate-1.0.0.fune",
            "size": 15709,
            "sha256": "eddcf67d1fabf3fa292b04fa0eebf29864dfac042423cc3aa270daf774f60579",
            "languages": {
              "typescript": {
                "name": "logistics.hs-code-validate-1.0.0-typescript.fune",
                "size": 11320,
                "sha256": "f69415e589e5ba7e9ed7337845ae37a0fa4fa5bea369d7b86751d6789b4cc1f1",
                "integrity": "sha256-isQgRjSHHTSmF2J5egahoz2A1x2nVe4RtCsMQjpK714="
              },
              "python": {
                "name": "logistics.hs-code-validate-1.0.0-python.fune",
                "size": 11448,
                "sha256": "1c0a088bbebdac48639c0c8e28c562a1126dd74e35785ae0d2bc7b41f37941c3",
                "integrity": "sha256-t+J1r6J/HTi3ISVbckecbkJitm1pE9Q7hTi8YO1QTjs="
              },
              "rust": {
                "name": "logistics.hs-code-validate-1.0.0-rust.fune",
                "size": 12201,
                "sha256": "220fd6c5e4e1a70cd3c76eab84e1f0eea0748e83c34868b4a060ad05bcb7db08",
                "integrity": "sha256-IbMQAyUh7UPGmoEjdWcEJjlsqkxp782I7KiBjNLYT48="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "logistics.incoterm-responsibility": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-ioCebNb5uty95BOZZPadHN9KkkEHF1pGtD9vb/3rKqc=",
          "summary": "Who pays which costs and where risk passes under an Incoterms 2020 rule, from EXW to DDP, FOB and CIF.",
          "level": 1,
          "tags": [
            "incoterms",
            "trade-terms",
            "fob",
            "cif",
            "exw",
            "ddp",
            "shipping-terms",
            "risk-transfer"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "data/incoterms.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "logistics.incoterm-responsibility-1.0.0.fune",
            "size": 28239,
            "sha256": "57c1201634d9316eda613d5c80824cbc9e6cca39f51bdf50c04e191704300252",
            "languages": {
              "typescript": {
                "name": "logistics.incoterm-responsibility-1.0.0-typescript.fune",
                "size": 23037,
                "sha256": "f2c896048722abaf6b4bd70c61c978659b60a8159e6dcba5601ea40b710d0a26",
                "integrity": "sha256-7qrhYuyvv4BcDJUMin5vntQ9bQ/qTK2wd9q8Jg7oZMw="
              },
              "python": {
                "name": "logistics.incoterm-responsibility-1.0.0-python.fune",
                "size": 23280,
                "sha256": "c9c4e1ac5ee463d4fd0173346a8c7d9d9880b35b2f0a43eb1d104c30aa17ce66",
                "integrity": "sha256-6IZ5giEnyVAy3ayYudF/kLum/Ie/P5sU6osSAU5IDLA="
              },
              "rust": {
                "name": "logistics.incoterm-responsibility-1.0.0-rust.fune",
                "size": 24524,
                "sha256": "7579bb6ccc93927808373b1132940249d11f4e18cf98d053ea3353ef7450d044",
                "integrity": "sha256-nzk6b0QL08mAZR29CkI+RxhUytObnrS5HBD+5ytEusc="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-RapIfMIj8Oltlp1SS2bktWuPoEy1E7tHylJCAHAxAZk=",
          "summary": "Who pays which costs and where risk passes under an Incoterms 2020 rule, from EXW to DDP, FOB and CIF.",
          "level": 1,
          "tags": [
            "incoterms",
            "trade-terms",
            "fob",
            "cif",
            "exw",
            "ddp",
            "shipping-terms",
            "risk-transfer"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "NOTICE",
            "README.md",
            "data/incoterms.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "logistics.incoterm-responsibility-1.0.1.fune",
            "size": 28648,
            "sha256": "7c969bfc65419b68fd7060978248e8b5e566a203722cc52d1ed598d7ca14c5a8",
            "languages": {
              "typescript": {
                "name": "logistics.incoterm-responsibility-1.0.1-typescript.fune",
                "size": 23446,
                "sha256": "c73b36648406189df964dc499e747e7fea1bbfbf6b7e9d690d45f2690f93c592",
                "integrity": "sha256-XGFh4sChJzm8FpGNmtmaIhDIgdSigjFSKGMHVTEQ8UA="
              },
              "python": {
                "name": "logistics.incoterm-responsibility-1.0.1-python.fune",
                "size": 23689,
                "sha256": "bf227fe1a6c7bd5d704945c573a7d2fe0eb5d14f3dd9346ae1275ce47a53113e",
                "integrity": "sha256-6W9lrYRfuXd2XhIiefeP/VmRTZV6XWnHW32BeL1CXs0="
              },
              "rust": {
                "name": "logistics.incoterm-responsibility-1.0.1-rust.fune",
                "size": 24933,
                "sha256": "9c14310e0e7cef5148785b35b4c86337d37bd40bc03d9d76fe0375276696215f",
                "integrity": "sha256-nr5X7sxZtiNQJBbC5IBeI4yy6qf4dDoS6kTwB8jXZRg="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "logistics.route-distance": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-Wkn68Y68G3eQFsEvJyegxmVYfXxZARsoPBy7WdztLe4=",
          "summary": "Total great-circle distance of an ordered list of stops, leg by leg, optionally back to the start, to the millimetre.",
          "level": 2,
          "tags": [
            "route",
            "distance",
            "multi-stop",
            "delivery-route",
            "itinerary",
            "trip",
            "mileage",
            "haversine"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "geo.distance": "^1.0.0",
            "geo.point-in-polygon": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "logistics.route-distance-1.0.0.fune",
            "size": 10910,
            "sha256": "466edb4c820220ce3afbcc8bdacd67502202c89f2f192576ce8b885c7f53a9a8",
            "languages": {
              "typescript": {
                "name": "logistics.route-distance-1.0.0-typescript.fune",
                "size": 7926,
                "sha256": "f77be72409c58978e62ec956f49814067a99213ea9ca598f3ea89e78f06eba5c",
                "integrity": "sha256-dbogbRfV9TU5GhV1cL7BsQOa9m/mNcPnNikZVgnwL7Y="
              },
              "python": {
                "name": "logistics.route-distance-1.0.0-python.fune",
                "size": 7973,
                "sha256": "743e45e0360d5680e4117d25f6fa3600f8239cc1db7282f2cf41bf2ba5a719a4",
                "integrity": "sha256-2E6CKPwV0yPk5lc2N0TDa+kQJnKmCyEgQClHT50fiBM="
              },
              "rust": {
                "name": "logistics.route-distance-1.0.0-rust.fune",
                "size": 8505,
                "sha256": "c9c6a4afc0608c93da45ece0b48c24d5b74572ad44a0f2eef0b660ee9896a540",
                "integrity": "sha256-yXa1u8bW/Aq9azr97vOFXoHwyaqWTLrLVxbVN4sz+AA="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "logistics.sscc": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-Z9gUIDi/s5+xgkNzv+mA2s/55CzuHX2l/BpxA5XMHDc=",
          "summary": "Build an 18-digit SSCC pallet label number from extension digit, GS1 company prefix and serial, with its check digit.",
          "level": 0,
          "tags": [
            "sscc",
            "sscc-18",
            "gs1",
            "pallet-label",
            "logistics-unit",
            "check-digit",
            "shipping-label",
            "barcode"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "logistics.sscc-1.0.0.fune",
            "size": 11838,
            "sha256": "073616835887c024668390f51220564385095dcf3ead76172e71b17798111f3c",
            "languages": {
              "typescript": {
                "name": "logistics.sscc-1.0.0-typescript.fune",
                "size": 7700,
                "sha256": "db0265d5b250bbfaa0b7b90ab840b886c21f2acbeebd163cddf65fbebd6ec74f",
                "integrity": "sha256-UkIRKeqReNQS+zp08ebXNdiM6V5kjqT31vr0yA1XyiU="
              },
              "python": {
                "name": "logistics.sscc-1.0.0-python.fune",
                "size": 7883,
                "sha256": "bbfb0fe166ce5f2667581c659d1a59c32efdb31b26d1b079d02331c480718d7b",
                "integrity": "sha256-cMSRuY12ByGeutaUBIsFaYYFw3VlIwSKJRcVQZsNYU4="
              },
              "rust": {
                "name": "logistics.sscc-1.0.0-rust.fune",
                "size": 7889,
                "sha256": "c6ea8745a939ddaca7c8153bea2bdba313c708e7c8ab9b50b010ecbac547374b",
                "integrity": "sha256-AY4dTyrcRVwwSOIPnsfw/8RkNoTpuKTQCGOsTrDIXnA="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.1.0": {
          "integrity": "sha256-IqQQF7Lf/uHSAi4dUdngLHZvDlIJeP9PE1kNxNKuSic=",
          "summary": "Build an 18-digit SSCC pallet label number from extension digit, GS1 company prefix and serial, with its check digit.",
          "level": 0,
          "tags": [
            "sscc",
            "sscc-18",
            "gs1",
            "pallet-label",
            "logistics-unit",
            "check-digit",
            "shipping-label",
            "barcode"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "validation.gs1-check-digit": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "logistics.sscc-1.1.0.fune",
            "size": 10910,
            "sha256": "aea2a0319e89e237e8778fea97ac8cd01600de11bd63409a4546fd35791a5e55",
            "languages": {
              "typescript": {
                "name": "logistics.sscc-1.1.0-typescript.fune",
                "size": 7434,
                "sha256": "52fc018803e0447f69960080e67f5d87ad58bb4d4547701e42532525b79f7d06",
                "integrity": "sha256-ozIpK6JGRpOU470vwktnIJg8da4Lu4wMgzfnPfLCIWw="
              },
              "python": {
                "name": "logistics.sscc-1.1.0-python.fune",
                "size": 7636,
                "sha256": "3f99320f49e8ed099e1c1f173cf64fb8486b1dacae177b199498f73812acea40",
                "integrity": "sha256-R/+Jp0zbE1lILsQv3YQQMU5YAwIPaaUd/A8TIrcTGuY="
              },
              "rust": {
                "name": "logistics.sscc-1.1.0-rust.fune",
                "size": 7586,
                "sha256": "a3ed0f1b84a2ace1a483230bed8a0b6a0e25659bfa2bf0525c130b11033fb5ff",
                "integrity": "sha256-/CZGB2sxaJQzP0SBJpjPNldjXsVX2axXdLYOaBPHpTs="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "manufacturing.batch-size": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-KV7SoSFXkK5gWC7bYNqu338+imCpbCbVBGSILK/YqcQ=",
          "summary": "Economic batch quantity: the EOQ for a batch made at a finite production rate, in whole units.",
          "level": 1,
          "tags": [
            "ebq",
            "economic-batch-quantity",
            "economic-production-quantity",
            "epq",
            "batch-size",
            "lot-size",
            "run-size"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "math.integer-sqrt": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "manufacturing.batch-size-1.0.0.fune",
            "size": 16906,
            "sha256": "3df9331cc9df8c218c15180f723cc8186675afb8e740d946e9b518896efdd2e5",
            "languages": {
              "typescript": {
                "name": "manufacturing.batch-size-1.0.0-typescript.fune",
                "size": 11096,
                "sha256": "62ec16bc372817dff02e36c48641eed53302c32dbcf58e42cf9841f98a40ad75",
                "integrity": "sha256-0ZNwCAPn9vaEf+jUofgFZKm2v5iCiptoLAuNycT0RJY="
              },
              "python": {
                "name": "manufacturing.batch-size-1.0.0-python.fune",
                "size": 11153,
                "sha256": "b6abe383b2cec3c4a5697e8d5049ab00b44c7a3101b317c1c15bf5bcce039980",
                "integrity": "sha256-8SceGH0w1P9Xzxp5JlbFvtimgrqi4sno7TW85fOdZis="
              },
              "rust": {
                "name": "manufacturing.batch-size-1.0.0-rust.fune",
                "size": 12073,
                "sha256": "6cf9debe228804a589791d4ab559a322052eeef54545295df8159504334b0ece",
                "integrity": "sha256-8b2REhgAFhLl4H1V9UgEFz3NQ5VPwT1YDpQDgquJOqU="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "manufacturing.bom-cost": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-6KAXGIVkKs7wv8mNWzm4xZST63hzQ7YHvk+wjgDDVAQ=",
          "summary": "Rolled-up standard cost of one unit of a product from its BOM, bought-in costs, and labour and overhead rates.",
          "level": 2,
          "tags": [
            "standard-cost",
            "cost-rollup",
            "bom-cost",
            "product-costing",
            "bill-of-materials",
            "labour",
            "overhead"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.rational": "^1.0.0",
            "math.round-div": "^1.0.0",
            "manufacturing.bom-explode": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "manufacturing.bom-cost-1.0.0.fune",
            "size": 36826,
            "sha256": "7fcf50a7bb83472208973c51088f91af2ab7d3d023c4f24f25a2af7a39516952",
            "languages": {
              "typescript": {
                "name": "manufacturing.bom-cost-1.0.0-typescript.fune",
                "size": 28124,
                "sha256": "78de6c18e2a67ec4e20dfbd396837af2218dd7fd4715103b2c16158f55a0037c",
                "integrity": "sha256-0um30T3RW3mwx014JNIu4gGHz24cvL0f8wcW91ZkRAY="
              },
              "python": {
                "name": "manufacturing.bom-cost-1.0.0-python.fune",
                "size": 28151,
                "sha256": "d893c7c2a26e81eeb56fd5402e13b1da9d30d2c384a491ae506e1c7a0208f6c9",
                "integrity": "sha256-EaRGW71CrkNEWVaoMKEnXanN/umyk62anlDqNwjDhIU="
              },
              "rust": {
                "name": "manufacturing.bom-cost-1.0.0-rust.fune",
                "size": 30133,
                "sha256": "83423f137e54c299c0f5a7fca70636eef7e63467098ea371acd933f7284e865c",
                "integrity": "sha256-tsRgTi/1FhSKkYCEJaKhM5jW8ZX6IZuAke5EiEZTJ28="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "manufacturing.bom-explode": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-3oMCzG/BUZpD5YT9U/fpoSuZi/0dpv8LLmO9hRBT5pk=",
          "summary": "Explode a multi-level bill of materials into exact total quantities per component, with scrap and cycle checks.",
          "level": 2,
          "tags": [
            "bom",
            "bill-of-materials",
            "explosion",
            "mrp",
            "components",
            "low-level-code",
            "scrap"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.rational": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "manufacturing.bom-explode-1.0.0.fune",
            "size": 31594,
            "sha256": "358f6d5d5064497212fb69f10e1c6ef4db3a6504b0a9922c6fdc680011c3115e",
            "languages": {
              "typescript": {
                "name": "manufacturing.bom-explode-1.0.0-typescript.fune",
                "size": 22987,
                "sha256": "f8f5262bbdf926b55d339993445bc431add1132f92e6b384984d78d391d9e711",
                "integrity": "sha256-YF1zv6AcmY0jkR4nz6BhU91liD9/T0debGNgjP4pop8="
              },
              "python": {
                "name": "manufacturing.bom-explode-1.0.0-python.fune",
                "size": 22995,
                "sha256": "f852dee1946d09ecd7b35091a24146968d4bd228dd7e7d5851b1d3b23b3dd12d",
                "integrity": "sha256-aIMbgOOSoEdsL7B+F3GtPQTUcfTdZFhbYdDjcU+/Zcg="
              },
              "rust": {
                "name": "manufacturing.bom-explode-1.0.0-rust.fune",
                "size": 25554,
                "sha256": "0a12b2d6f48c4b5164b78f6d53b9930cd40338c0ab778ea333948d03da8166b9",
                "integrity": "sha256-jtVBeZCp2F0GWHkzHw4rF8W6oEd/jpskHZd6+9ttxa8="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "manufacturing.capacity": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-SeAgwVXtz4z1cVL+Ha+2fmOpEu2PgUtPSjWaZcdWvDU=",
          "summary": "Capacity against routed load per work centre over a period, with efficiency, utilisation and overload flags.",
          "level": 2,
          "tags": [
            "capacity-planning",
            "work-centre",
            "load",
            "crp",
            "rough-cut",
            "utilisation",
            "efficiency",
            "overload"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.rational": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "manufacturing.capacity-1.0.0.fune",
            "size": 24339,
            "sha256": "800880c66390d77d913aba0819f30b53e18201a1e71deffe04f2b59a02f81183",
            "languages": {
              "typescript": {
                "name": "manufacturing.capacity-1.0.0-typescript.fune",
                "size": 15300,
                "sha256": "951ac4c5f2b2c4a60cb85e051a31c177dfc9526ea77345b88abcd7180c61bf1d",
                "integrity": "sha256-v+TVXtSrYvHc07nrKnetmHwJu2iN09EQZaLSVzyAERs="
              },
              "python": {
                "name": "manufacturing.capacity-1.0.0-python.fune",
                "size": 15684,
                "sha256": "cfa3f24250329d7acca763ddff9669e86b31a9079ef26540f2c736d437314c7d",
                "integrity": "sha256-XSZ98pBuh81GEsrZSkbdR+ZCUskmchu6NucpqVfGBkY="
              },
              "rust": {
                "name": "manufacturing.capacity-1.0.0-rust.fune",
                "size": 18175,
                "sha256": "84196e97063d74e71e7e1cd30dc2b681195ffc64e69c269e20ab99047472f888",
                "integrity": "sha256-ckS5Rr7DITGZwJGHNXYMfM4ukbh46TWR0C2sotrVGmA="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "manufacturing.lot-number": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-588tOP813AkE4NBSuk95wk2P5XI8kj90FiFzUrjULZ8=",
          "summary": "Deterministic lot or batch code YYDDD-LL-SSS from the production date (Julian day), line and sequence.",
          "level": 0,
          "tags": [
            "lot-number",
            "batch-code",
            "batch-number",
            "julian-date",
            "traceability",
            "production-line"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "manufacturing.lot-number-1.0.0.fune",
            "size": 9136,
            "sha256": "677f36c5f07cbd03dd5a9615041db4a2d68ec3e1c5752e068bb8cee7b9982c12",
            "languages": {
              "typescript": {
                "name": "manufacturing.lot-number-1.0.0-typescript.fune",
                "size": 6691,
                "sha256": "49a5fd6d26e6f7b4a303f9813357276eba5120135af0245272b488c32bde5a40",
                "integrity": "sha256-7rRDOvHQvEBre0F3oD/18uVe2FkRlY3wMRnWL+j3Shg="
              },
              "python": {
                "name": "manufacturing.lot-number-1.0.0-python.fune",
                "size": 6601,
                "sha256": "3244cf29c71f4730593050f489fbd0409eedb23693f544e27f9f3a3a782c20ff",
                "integrity": "sha256-pT9k6jBwfzSlP2qydLPmZApfOj41siAe962OXez1ZnE="
              },
              "rust": {
                "name": "manufacturing.lot-number-1.0.0-rust.fune",
                "size": 7000,
                "sha256": "880a555ea34e0246f0002f5596b779f60f87e2b877780811789917a0828151b8",
                "integrity": "sha256-IJzEz4BnhG3aw7fS9TQ/FrqtFl6YW4BhLvNxKaLvOOQ="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "manufacturing.oee": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-JDvzCgoqtOgC/d0CrX/OKht5APXZMwqxKZtMBq8eAws=",
          "summary": "Overall equipment effectiveness (availability x performance x quality) in basis points, from times and counts.",
          "level": 1,
          "tags": [
            "oee",
            "overall-equipment-effectiveness",
            "availability",
            "performance",
            "quality",
            "tpm",
            "lean"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "manufacturing.oee-1.0.0.fune",
            "size": 17981,
            "sha256": "cbd3d1eb8231b27c04caa961c4e0f95ed7892e64ecdee06bc38a314984b764b7",
            "languages": {
              "typescript": {
                "name": "manufacturing.oee-1.0.0-typescript.fune",
                "size": 11846,
                "sha256": "67801278fac0cb0fae742e60c87089601efd54784dd62153b7fb1d8cfcad78eb",
                "integrity": "sha256-mtySD/NSiKH/C3FsPfkIJs0heb6qZEwjG3LIXlGGGp0="
              },
              "python": {
                "name": "manufacturing.oee-1.0.0-python.fune",
                "size": 11921,
                "sha256": "ef51c8eb270f228d2766a39c09cb079a2d7808831bf3416b77258969179644c0",
                "integrity": "sha256-l4X51cyef/F2+Rolg0/8RAZ24twtt2SG6jE6h3L3OOg="
              },
              "rust": {
                "name": "manufacturing.oee-1.0.0-rust.fune",
                "size": 12548,
                "sha256": "bb8f7a89edb31fe0d97a3ed930c4707d7721931c5d18c4c86bd0c3148b281237",
                "integrity": "sha256-joKT6UK9wt1eVvT1izkVESeakr+XRqqL34Ws4irkp4U="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "manufacturing.takt-time": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-3LDb+OCpUDwR1noW1WvHb4sAh0IxClqkdYbVLYiSaOE=",
          "summary": "Takt time: available production time divided by customer demand, exact and in whole seconds.",
          "level": 1,
          "tags": [
            "takt-time",
            "lean",
            "cycle-time",
            "demand",
            "pace",
            "line-balancing"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.rational": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "manufacturing.takt-time-1.0.0.fune",
            "size": 9998,
            "sha256": "fd7d347610f0d78c840a26ef782ce2053b081d4bf02cd41df8ded064c3afccb7",
            "languages": {
              "typescript": {
                "name": "manufacturing.takt-time-1.0.0-typescript.fune",
                "size": 7049,
                "sha256": "4f63b1257246c7c004b97fb509f909d307c6a946add5029947ecf6c890f63bfa",
                "integrity": "sha256-4eR8Aw+Xg7IeRW4a2pi36ocQPEe3trrTxFItjSDa+dE="
              },
              "python": {
                "name": "manufacturing.takt-time-1.0.0-python.fune",
                "size": 7213,
                "sha256": "3d900b3a3fc28eefd4ccf51bc43b9ff6a99bfd02b5c7e8f8eece38728989050d",
                "integrity": "sha256-USuZdO0G1MgCwJDz/yxLwncihG922XVmsRGshnfszyM="
              },
              "rust": {
                "name": "manufacturing.takt-time-1.0.0-rust.fune",
                "size": 7744,
                "sha256": "58d02444ef6d231fdf7d2eab8caf5e2819d040c141772fc941f36fcf5619b68a",
                "integrity": "sha256-ib0qiOLVIpI7V0rdCTNIsbWcc7QhAWyq614VvLHbHko="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "manufacturing.tolerance-check": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-aFNKfFhmvYciOjgdPTmErvP/qfAkeWYp+zjODELKDyQ=",
          "summary": "Check a measurement against a nominal size and its upper and lower deviations, in whole micrometres.",
          "level": 0,
          "tags": [
            "tolerance",
            "quality-control",
            "inspection",
            "limits",
            "dimension",
            "go-no-go",
            "pass-fail"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "manufacturing.tolerance-check-1.0.0.fune",
            "size": 14651,
            "sha256": "02a3faf1c5fd1fc72dfdfa4fe659af7e86632dfe9b9993836204e86a78d84a43",
            "languages": {
              "typescript": {
                "name": "manufacturing.tolerance-check-1.0.0-typescript.fune",
                "size": 9733,
                "sha256": "efe56f3e5bd934743d8c6986d73c59760c1412ff79e362b25376f511d2850cf6",
                "integrity": "sha256-wItTGqCv8N3ZdmqBtS9CWHQIP1vEypAtEuzv55KexQQ="
              },
              "python": {
                "name": "manufacturing.tolerance-check-1.0.0-python.fune",
                "size": 9961,
                "sha256": "80fa5c75c71a6b1fc06474c31fc2f3a05fb9fbc145fd46985907d6bc24581df4",
                "integrity": "sha256-x3bgcykrV2LJVWtNBAj5V3hsyOjz+FKo9aSBHDQgjA4="
              },
              "rust": {
                "name": "manufacturing.tolerance-check-1.0.0-rust.fune",
                "size": 10929,
                "sha256": "c6c702d70e3e68d607f65cd81a9dfdc129a2856d0252c2c91a901f88adab00c4",
                "integrity": "sha256-xFQOLOI1mW0iMbAruHrKZHQHNkNxKRsKyVZUbbpVElk="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "manufacturing.variance": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-hqgPVs1ZDPghdPmkQj05PkcSXLrY95vjYCrxsWKOwMI=",
          "summary": "Standard costing variances: material price and usage, labour rate and efficiency, favourable or adverse.",
          "level": 2,
          "tags": [
            "variance-analysis",
            "standard-costing",
            "material-price-variance",
            "usage-variance",
            "labour-rate-variance",
            "efficiency-variance",
            "cost-accounting"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.rational": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "manufacturing.variance-1.0.0.fune",
            "size": 33167,
            "sha256": "891beb9988a990d3a686a6a4e0993bc51814dd5d685d087f0e5ebdcb2c68455c",
            "languages": {
              "typescript": {
                "name": "manufacturing.variance-1.0.0-typescript.fune",
                "size": 24548,
                "sha256": "47c25f65c280a0e49bdec0705f29a7db9bbced919c245ea9c4f20d3536ef11f4",
                "integrity": "sha256-+yle/aZPeSagDLysJUj5ve/vj6ueefdRTVmo2aOKLC4="
              },
              "python": {
                "name": "manufacturing.variance-1.0.0-python.fune",
                "size": 24559,
                "sha256": "260377595097891f590392f19669ac164721754d7e8c2b2ab267dd8c24209ab8",
                "integrity": "sha256-cvlpCPG0bwXSoPoW4nixpRokEnZt+mSwtxWQTe3P3t0="
              },
              "rust": {
                "name": "manufacturing.variance-1.0.0-rust.fune",
                "size": 26392,
                "sha256": "35ab3f623e92c06558818f94e4dee96ba7f5085f65a394029efbb7c9d4758480",
                "integrity": "sha256-nvc+1rKtwjinbfiQTO86xR3KBUA2ZtS55yJ8qW/f7/4="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "manufacturing.yield-scrap": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-DBUUoBveGR3wvIz6VxQDRirkig0CmhqzpukbfRclt9s=",
          "summary": "Whole units to start for a required good output at a process yield, and the scrap that allows for.",
          "level": 1,
          "tags": [
            "yield",
            "scrap",
            "process-loss",
            "input-quantity",
            "rework",
            "production-planning"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "manufacturing.yield-scrap-1.0.0.fune",
            "size": 9473,
            "sha256": "ab5b9cd98e14ed85a740cf8e559162cb6e2553b2573427c955d5584c4f4351aa",
            "languages": {
              "typescript": {
                "name": "manufacturing.yield-scrap-1.0.0-typescript.fune",
                "size": 6645,
                "sha256": "3d54b67c8376c755e00d58740261f0710b28b4ec359509fc4f2adfb15678798a",
                "integrity": "sha256-PyilW0xfBNCeXpVxvHncqFZgkIuEi4fdI5DKUaO3IzQ="
              },
              "python": {
                "name": "manufacturing.yield-scrap-1.0.0-python.fune",
                "size": 6812,
                "sha256": "834847d54007f06ab5f4cb58975052c98d4ad19c2f23df186c397541516ec509",
                "integrity": "sha256-IP3S9C8Z5X7klkeD4oWDxAxXUh1ujvuSslQ6hElLv0A="
              },
              "rust": {
                "name": "manufacturing.yield-scrap-1.0.0-rust.fune",
                "size": 7208,
                "sha256": "aba752f956be1bbaa166f2fe858a9f7c5d091d2409277bfb915109d86b5bed86",
                "integrity": "sha256-n4RQBnZoO98DsPEQQPDp1I5nuXghkZt7c9zLOChojGc="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "math.atan": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-xACPJ3mgsCXfrpqenIwhpIOUhx6/FqaaWTTNugjb8Rs=",
          "summary": "Arctangent in radians from + - * / only (fdlibm's method), so every language returns the same double.",
          "level": 0,
          "tags": [
            "math",
            "trigonometry",
            "atan",
            "arctan",
            "arctangent",
            "inverse-tangent",
            "angle",
            "portable",
            "deterministic"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "math.atan-1.0.0.fune",
            "size": 14462,
            "sha256": "2d22c6965402cba6883885aa3686001a32ebaa68876664b9166069c24e13ec91",
            "languages": {
              "typescript": {
                "name": "math.atan-1.0.0-typescript.fune",
                "size": 8307,
                "sha256": "a158cfc1e5a21261365d267aedd5f1f9c079f8c81e4c4ea84935eb22aac72047",
                "integrity": "sha256-5BJsMhbKPpVOnqBd/+Ex9OldRXHGzhpiu4/imK3sZ9k="
              },
              "python": {
                "name": "math.atan-1.0.0-python.fune",
                "size": 8350,
                "sha256": "2f32f2c9db116db0e6ede4ea567170dc06a863697fc5267f516334ddacb0b80d",
                "integrity": "sha256-Bm0VOcO4WuzvMcEBnfvMn0mORB3yJW27LVcod83KodI="
              },
              "rust": {
                "name": "math.atan-1.0.0-rust.fune",
                "size": 9069,
                "sha256": "ea4576517cab5b8331c1cf94f4e91d4da51dde97fb860043c12a3af743b13700",
                "integrity": "sha256-W/1faXWSjVvVu1NkD7UrY2u9PfRxK4JZ6eH40TCNVuU="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-iBi91nu22//d6kQagZOddcFYgbLivECPTHRYXTOZG2I=",
          "summary": "Arctangent in radians from + - * / only (fdlibm's method), so every language returns the same double.",
          "level": 0,
          "tags": [
            "math",
            "trigonometry",
            "atan",
            "arctan",
            "arctangent",
            "inverse-tangent",
            "angle",
            "portable",
            "deterministic"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "NOTICE",
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "math.atan-1.0.1.fune",
            "size": 16172,
            "sha256": "28024017684bf94c01788cdac745e870183b7f2d5e8709a02fca9422fec83d7b",
            "languages": {
              "typescript": {
                "name": "math.atan-1.0.1-typescript.fune",
                "size": 9423,
                "sha256": "0544e2cbd496b76c5ac18bbcb3bdcfb203de630bb2ae7ec9f309d11d47a3cecb",
                "integrity": "sha256-r070poFeDKoKysNtYm7GmffoIjbxflu9wThUnhS5WNc="
              },
              "python": {
                "name": "math.atan-1.0.1-python.fune",
                "size": 9460,
                "sha256": "1dcbb4a80dbd426026f65285b4f4a8b565a44ff2426b955219605abe71c5f932",
                "integrity": "sha256-V2x5ZRn2tgT7f/rUHY05DH2ZiSs3vbVjP+a5H5T7R64="
              },
              "rust": {
                "name": "math.atan-1.0.1-rust.fune",
                "size": 10185,
                "sha256": "2a3bc22dbdb20048ce83e7acedd70c84cb95be1c530307aaa0db15a1a316b9d8",
                "integrity": "sha256-OHeNhvvUMBcYuD+xamoYTw6dxxr8aild9ZPT04wcV9U="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "math.basis-points": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-5trYUlCjwVPemjXLunqEGCxKU1SoMjQc1dXKsTN2Cp4=",
          "summary": "Convert a rate between percent, basis points and a plain ratio exactly, as decimal text or integer basis points.",
          "level": 0,
          "tags": [
            "math",
            "basis-points",
            "bps",
            "percent",
            "percentage",
            "ratio",
            "rate",
            "conversion"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "math.basis-points-1.0.0.fune",
            "size": 14007,
            "sha256": "7ee7e2aa9137812ddceea028ea4164333ce73b3305eb9db7a5ccd4a4259d0e1b",
            "languages": {
              "typescript": {
                "name": "math.basis-points-1.0.0-typescript.fune",
                "size": 8131,
                "sha256": "065485bc2d5e69457e0fa5351099c7fb50a9ea4b7667a71c4524e4d855844012",
                "integrity": "sha256-fFcRLCUEleN2oVyb5dUA5kVpQaEN3xKINexp5oAq4pY="
              },
              "python": {
                "name": "math.basis-points-1.0.0-python.fune",
                "size": 8138,
                "sha256": "3504c6c7c7ab0a64afa8de33508ff28f098922c8b8ac166088e1d6439a1e78d7",
                "integrity": "sha256-YqG3RaFW58NjUaX8uNypSX8WzqPbmh9UVsV42Pgu5wI="
              },
              "rust": {
                "name": "math.basis-points-1.0.0-rust.fune",
                "size": 8920,
                "sha256": "3495fdc8d1891fae4357d653fbd29531fec746c4fcf25c9d62ef2a3a3beb7462",
                "integrity": "sha256-gMROLC8OT8AB636d6Y+w3RmJCIp7rwg9DWezIXULMj4="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "2.0.0": {
          "integrity": "sha256-9Yuiv1BnQpcGRodiV5QkvBGuLxd9zVs/vqhBFU8ufNo=",
          "summary": "Convert a rate between percent, basis points and a plain ratio exactly, as decimal text or integer basis points.",
          "level": 0,
          "tags": [
            "math",
            "basis-points",
            "bps",
            "percent",
            "percentage",
            "ratio",
            "rate",
            "conversion"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python/convert_rate.py",
            "impl/python/from_basis_points.py",
            "impl/python/to_basis_points.py",
            "impl/rust/convert_rate.rs",
            "impl/rust/from_basis_points.rs",
            "impl/rust/to_basis_points.rs",
            "impl/typescript/convert_rate.ts",
            "impl/typescript/from_basis_points.ts",
            "impl/typescript/to_basis_points.ts",
            "vectors.json"
          ],
          "package": {
            "name": "math.basis-points-2.0.0.fune",
            "size": 25143,
            "sha256": "8f577c1f8da63586073a8df9632faa5df78e65aec48b6eace456101dc5c12935",
            "languages": {
              "typescript": {
                "name": "math.basis-points-2.0.0-typescript.fune",
                "size": 16994,
                "sha256": "0ad56667c891e83bb9acab8f62641822ec5f1a4ff7d9875cea61f4a302929e36",
                "integrity": "sha256-hsRu/x0GOiZszphzZamaB94VkSuk4qrSuCfUpYSYy5s="
              },
              "python": {
                "name": "math.basis-points-2.0.0-python.fune",
                "size": 17042,
                "sha256": "d1e06a3618f04dec7f70932981db74b3adeae603154d66d834b1442ce6004e1e",
                "integrity": "sha256-H4MXPLVHoY/I5+YWB+m8bzLY4jdrAVLrVp3K3ehG6EM="
              },
              "rust": {
                "name": "math.basis-points-2.0.0-rust.fune",
                "size": 18395,
                "sha256": "0006affb1eefe91691e1c586b71cc83f7c54572c7af43aec51d2aca776e25161",
                "integrity": "sha256-mbpB6OsS1sHQ3Mxffixwn/o8xnFwxhYOLTRyue1ysro="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "math.big-integer": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-0LNz+mWsPTDSAYB48wpEZV9roLC0CS3I1oNVHhp0ixM=",
          "summary": "Exact integer arithmetic of any size, on decimal strings, for powers and products that overflow 64 bits.",
          "level": 0,
          "tags": [
            "math",
            "bigint",
            "big-integer",
            "bignum",
            "arbitrary-precision",
            "integer",
            "exact",
            "power"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "math.big-integer-1.0.0.fune",
            "size": 27178,
            "sha256": "242eb37623145ad5d7b0d7b9063ea4d93bac3ec93828ccab3e7149d5c7ed9af3",
            "languages": {
              "typescript": {
                "name": "math.big-integer-1.0.0-typescript.fune",
                "size": 11156,
                "sha256": "95f8fcdaf187158d09f0d54be32ce1c44e288e89f508aca141fdc3331912942f",
                "integrity": "sha256-1jQR9z8Xr7m9OSqg9AtMtneoWI47vCqwj5jg+YeA2r0="
              },
              "python": {
                "name": "math.big-integer-1.0.0-python.fune",
                "size": 10955,
                "sha256": "822bf28971eda4588bdeb351ee5e9dd3b75c6e97a57a973f243fea7e5155c34b",
                "integrity": "sha256-g4N/dU2c6mLXRM2pi3bEsbVcW/Va9i/GOi/jujYxQwo="
              },
              "rust": {
                "name": "math.big-integer-1.0.0-rust.fune",
                "size": 22355,
                "sha256": "162556478d60a1768c2ee195328cebaaeb3145a6c3c1bc7e7387cdba235c6ea0",
                "integrity": "sha256-Eq9eLvDlx2CrJqfrZW552MxX5sJHdV3cb8wLn0yoZC0="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "math.clamp": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-Z3CSHrtfDXXuq9I1yBA2ffrC5bzMUKecUGNL73qH56Y=",
          "summary": "Clamp an integer to an inclusive range, refusing a range whose bounds are the wrong way round.",
          "level": 0,
          "tags": [
            "math",
            "clamp",
            "bound",
            "limit",
            "range",
            "constrain",
            "primitive"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "math.clamp-1.0.0.fune",
            "size": 5509,
            "sha256": "2123f0c62d89da1b2ece2862eaf1514f0cbf2690d429dee046b20b51c896f2b4",
            "languages": {
              "typescript": {
                "name": "math.clamp-1.0.0-typescript.fune",
                "size": 3805,
                "sha256": "ccfaf0f48128d2b8f81ba383579b18048e2bbdc8fc5398169429d17f4d8ba93e",
                "integrity": "sha256-lBMhX6k9jaX2O42rarJkN2lVk6oN7skuhma26AtZaZM="
              },
              "python": {
                "name": "math.clamp-1.0.0-python.fune",
                "size": 3849,
                "sha256": "257242f4d2aa9023baa8826584fa9e4f4383d88ae04023dbd7dd7ee59c889c27",
                "integrity": "sha256-pU+NVrtOd2x0ZMaczcP6CYuXMtZ+nJtsjJCXE15G1U4="
              },
              "rust": {
                "name": "math.clamp-1.0.0-rust.fune",
                "size": 4161,
                "sha256": "60f9bbbb66405ad6ffaf1214b85887bc24d3d2bae67e94c236bfd621b971f22a",
                "integrity": "sha256-e8iGOPMxLfT9MafYEY4vS6idY+ze81/DMXeY5OCWFYU="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "math.exp": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-c08pjLJmtn5BSJh7GuGijaWVdCGTFdsE2BIAaJ0OPHA=",
          "summary": "e to the power x from + - * / only, so TypeScript, Python and Rust return the same double for the same input.",
          "level": 0,
          "tags": [
            "math",
            "exponential",
            "exp",
            "e-power",
            "portable",
            "deterministic",
            "primitive"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "math.exp-1.0.0.fune",
            "size": 7558,
            "sha256": "29423e4cf6d386b02f5d4bbd7a4e669544e1b6ac82033d114c726f51d4ef223a",
            "languages": {
              "typescript": {
                "name": "math.exp-1.0.0-typescript.fune",
                "size": 4792,
                "sha256": "5a6378d3ba950fed4b9dd1037076f1ec4b479c8b1a1b5fe389232afe483e449b",
                "integrity": "sha256-zZv9jrGiaqSys2YI8uuc6MQ8nQE8SIPLFybtLNfTVPM="
              },
              "python": {
                "name": "math.exp-1.0.0-python.fune",
                "size": 4545,
                "sha256": "c4473e7b56f3fca01ec91e3a3ca5a15bcc868f94031a124999bb56af120057e9",
                "integrity": "sha256-SxkdYRwGXVgNAyp5+FvcY5CH7O2V8sfHRMftTJEPra8="
              },
              "rust": {
                "name": "math.exp-1.0.0-rust.fune",
                "size": 4801,
                "sha256": "1cb42c50f734a43c106a470079eea46df540371ca5cc34f6229a3f7ff22725bc",
                "integrity": "sha256-KkwIbnjVtAnbVkN5xvs/abNqdfSuqr0r82OXtGqoeTg="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-JpGFbjKtmLcgAr6udTOL6iBSCjSQJTVvOzZV1F77FFs=",
          "summary": "e to the power x from + - * / only, so TypeScript, Python and Rust return the same double for the same input.",
          "level": 0,
          "tags": [
            "math",
            "exponential",
            "exp",
            "e-power",
            "portable",
            "deterministic",
            "primitive"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "NOTICE",
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "math.exp-1.0.1.fune",
            "size": 9262,
            "sha256": "fdfc01db0682c8965665894ed39dac0613d41651768c4ba538a6be62fc5c1113",
            "languages": {
              "typescript": {
                "name": "math.exp-1.0.1-typescript.fune",
                "size": 5904,
                "sha256": "c5a398c66fcc8201c841f248441ddf47df836a0feafe8d3960d538861593478c",
                "integrity": "sha256-708d4fwufTEARV+8Q8Apnqz1vQ4M17QVkOv1gHSCbQk="
              },
              "python": {
                "name": "math.exp-1.0.1-python.fune",
                "size": 5651,
                "sha256": "2e8128289f06b0dd49483cdbb32abfd6076919b599f48fb6b52403ea21e6981b",
                "integrity": "sha256-7jGw0EPfjy67u0w+ym0bsBb197rKYYCmi9kTk7m8oGY="
              },
              "rust": {
                "name": "math.exp-1.0.1-rust.fune",
                "size": 5913,
                "sha256": "ae6c3f00511001ae57fabe065e413a1361f5d6115a9806315dc3d279a50c89e1",
                "integrity": "sha256-ro57Ib1cBoV7GBBnnfIohN8udZ0sZjOg2ki3Tr2vacg="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "math.fractional-power": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-FvkruZ8Yk75cMXF2Bg0Q315bKxvfYj45OXt9HfhLPQ0=",
          "summary": "Raise a positive decimal to a fractional power, (1.199)^(31/365), identically in every language.",
          "level": 1,
          "tags": [
            "math",
            "power",
            "root",
            "nth-root",
            "exponent",
            "fixed-point",
            "compounding",
            "discount-factor"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.big-integer": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "math.fractional-power-1.0.0.fune",
            "size": 22168,
            "sha256": "0066bd743f23291b72f2b4086147d1571e046c6c0b3849aa079fa868ff3e143c",
            "languages": {
              "typescript": {
                "name": "math.fractional-power-1.0.0-typescript.fune",
                "size": 11504,
                "sha256": "6f7b11440bf126b2570767fc4f7c1e1a850737b947c360650e08a736f493ce19",
                "integrity": "sha256-NKHUWzz4uTuNeMc6Q40vtZH2HcOXllQMco0ShrEx0DI="
              },
              "python": {
                "name": "math.fractional-power-1.0.0-python.fune",
                "size": 11373,
                "sha256": "ced1ce111194c5b28d4551ffd37532f3d5d0f8a20b81e242a3763653653a4d87",
                "integrity": "sha256-V40lb3naN6G8bLbVmMZOH7Ra3sNMZrQEpRpQsO9BTtk="
              },
              "rust": {
                "name": "math.fractional-power-1.0.0-rust.fune",
                "size": 13157,
                "sha256": "43f310fc375f24eb789d534963aecabb45bb7b472d791365c699c107318b11f7",
                "integrity": "sha256-c9GLymLd7qijSjNP+2SVJkXIwlJysYulnia1z+aviaQ="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "math.gcd-lcm": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-lNg5fBTVq+3+Vc43wYsqgavD/qFIMLYzSowCN7ocDZY=",
          "summary": "Greatest common divisor and least common multiple of two integers, exactly and without overflow.",
          "level": 0,
          "tags": [
            "math",
            "gcd",
            "lcm",
            "hcf",
            "divisor",
            "multiple",
            "primitive"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "math.gcd-lcm-1.0.0.fune",
            "size": 10259,
            "sha256": "c9e41636d824c974f9a85f3a786451805447acfbe1af4ee8a0b3e2d4f96448b9",
            "languages": {
              "typescript": {
                "name": "math.gcd-lcm-1.0.0-typescript.fune",
                "size": 6157,
                "sha256": "1a08c0eccf54258a34c79d011d0b3cf2491d638a644ef32c58b2029b1aa843bf",
                "integrity": "sha256-8rcQkEtMuLqSd8SohbO8EmstN1gPEV1ijuaAyzMw9k0="
              },
              "python": {
                "name": "math.gcd-lcm-1.0.0-python.fune",
                "size": 6147,
                "sha256": "a0fdec06f0cfda6661fdd30bd8c66909efeb6ff582df5cf4b14fc6f932682beb",
                "integrity": "sha256-NAmlQ+3D3dhCMNS8w6TC26/crRxks8QUhxffF6NNBnI="
              },
              "rust": {
                "name": "math.gcd-lcm-1.0.0-rust.fune",
                "size": 7119,
                "sha256": "ffefd0c83cf1ddbdcce661266ba7afd14daeb12bee5072f4b58b91204aa87fb3",
                "integrity": "sha256-K/Ho6SLX6yerPYWpotU6LsUCzzAGia7MuDmor+ZPiss="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "2.0.0": {
          "integrity": "sha256-AUfSyzneVrIhB8cnRz60MH6hp4uecP6XZ/Ms7GKQHxo=",
          "summary": "Greatest common divisor and least common multiple of two integers, exactly and without overflow.",
          "level": 0,
          "tags": [
            "math",
            "gcd",
            "lcm",
            "hcf",
            "divisor",
            "multiple",
            "primitive"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python/gcd.py",
            "impl/python/gcd_lcm.py",
            "impl/python/lcm.py",
            "impl/rust/gcd.rs",
            "impl/rust/gcd_lcm.rs",
            "impl/rust/lcm.rs",
            "impl/typescript/gcd.ts",
            "impl/typescript/gcd_lcm.ts",
            "impl/typescript/lcm.ts",
            "vectors.json"
          ],
          "package": {
            "name": "math.gcd-lcm-2.0.0.fune",
            "size": 19234,
            "sha256": "b4ff66bde30ed40b4e53d980014fb8902c3854539d276a87c0c083ba74f7a1bb",
            "languages": {
              "typescript": {
                "name": "math.gcd-lcm-2.0.0-typescript.fune",
                "size": 13168,
                "sha256": "7414af304779f5cf712dc5b0588ca71af45f1fc6688fd38f25f1d9d8fc371ca5",
                "integrity": "sha256-n2CbvyoNtFjiEpxz61sngoecRNec4PV3TiDZ/YuiaUc="
              },
              "python": {
                "name": "math.gcd-lcm-2.0.0-python.fune",
                "size": 13146,
                "sha256": "8aa3a74455b168f7197ef199b31f7a31eba97411c2c1132d5bce0d87054f15fc",
                "integrity": "sha256-GSfpfDA5881JXPimkbV7VO5AH/T/xm0jllIE5FGA/cc="
              },
              "rust": {
                "name": "math.gcd-lcm-2.0.0-rust.fune",
                "size": 15036,
                "sha256": "ec6924b9f1eb9fd98b13d32dc478535f6b1f42210bc69dc8dec8f1fb78780c4c",
                "integrity": "sha256-9Swsu+K2nT1I2QqXYXsutOz7TwFLQyUSnNi+AA3ddGU="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "math.integer-sqrt": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-rIhuB8bWDtP/FCG8YY0NxngRdXPqIWleEuwnVu09NOk=",
          "summary": "Exact integer square root: the largest whole number whose square does not exceed n.",
          "level": 0,
          "tags": [
            "math",
            "square-root",
            "sqrt",
            "isqrt",
            "integer",
            "exact",
            "primitive"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "math.integer-sqrt-1.0.0.fune",
            "size": 5586,
            "sha256": "7dc41dbf6a7e06cbd778a22b43f531a03b95d9e48c91f9ab7de1cbf549641f8c",
            "languages": {
              "typescript": {
                "name": "math.integer-sqrt-1.0.0-typescript.fune",
                "size": 4052,
                "sha256": "7bbe4d52a74acc583380c6d2da9ce62e0ab8b53f2e8090ba65a09b7d56645463",
                "integrity": "sha256-dxpuY2ZrvEejJrKoayyh9GdvBBegz0KtaM2r9fLTQpg="
              },
              "python": {
                "name": "math.integer-sqrt-1.0.0-python.fune",
                "size": 3920,
                "sha256": "e26ba2f91cc4402cbbef5cd71ccb925b851eb6050f4eb526c739ab92fc5e274d",
                "integrity": "sha256-Wy2QCC5rbJ2FglKCu70nvdLsKg78VrpAW1jzIJ10OtM="
              },
              "rust": {
                "name": "math.integer-sqrt-1.0.0-rust.fune",
                "size": 4418,
                "sha256": "c0f88b99d78f700750d642240134801c6c569b0806a915c3339f7d2366d437fe",
                "integrity": "sha256-GxWDxoFrN2IZ6BB9cHX3XKTIj7gvQsdEWEYg8Q4253Y="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "math.ln": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-pY3IZieYupOorOZU5Z1TVpXX2mcAjaI0RuZvrNqNgOs=",
          "summary": "Natural logarithm from + - * / only, so TypeScript, Python and Rust return the same double for the same input.",
          "level": 0,
          "tags": [
            "math",
            "logarithm",
            "ln",
            "log",
            "natural-log",
            "portable",
            "deterministic",
            "primitive"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "math.ln-1.0.0.fune",
            "size": 8860,
            "sha256": "35902ca7884b817f89ad47af47080eed0945dbddcd025b8329b72aa7ee1a9921",
            "languages": {
              "typescript": {
                "name": "math.ln-1.0.0-typescript.fune",
                "size": 5762,
                "sha256": "25fe03f310fb23142537b1309d085097b053db78c35229aad232e6892f16ad30",
                "integrity": "sha256-FOI/8LsBy850MxJBbGju3l2E8ccnzKwrRSRh7YJpQxg="
              },
              "python": {
                "name": "math.ln-1.0.0-python.fune",
                "size": 5416,
                "sha256": "f1cdb73f9d9e1102db7c8171c81f760d6221eb33a3e28bd0bc8dec5841a2fafc",
                "integrity": "sha256-Z3MmA5AMO+QlPSNWrPwvjxuyAfKf3daCd9qY/aCsFq0="
              },
              "rust": {
                "name": "math.ln-1.0.0-rust.fune",
                "size": 5668,
                "sha256": "d926adcde05045415f4fc9933fcce5f98c53b20035700deefd193c669dbdd086",
                "integrity": "sha256-5DKNaKn/SLiEqlr4zvUA5Xeaxmzy962oc+0JNLadg+U="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-GLqh9yluaZsywvJilv5ytsewAf/Nto22TaNcYy+T6JM=",
          "summary": "Natural logarithm from + - * / only, so TypeScript, Python and Rust return the same double for the same input.",
          "level": 0,
          "tags": [
            "math",
            "logarithm",
            "ln",
            "log",
            "natural-log",
            "portable",
            "deterministic",
            "primitive"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "NOTICE",
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "math.ln-1.0.1.fune",
            "size": 10563,
            "sha256": "fcc649f7bc35683193541d1555c0148e1698113437f262b6ec72d5868216ca15",
            "languages": {
              "typescript": {
                "name": "math.ln-1.0.1-typescript.fune",
                "size": 6873,
                "sha256": "3400a49d33e226b84efb8d1e71f8767485f3c85f046615483b9e7cda038c7b37",
                "integrity": "sha256-byDzF2q53fVJAI/sr4lcZ1IUaFcHgWIxbbxWMFcLKl0="
              },
              "python": {
                "name": "math.ln-1.0.1-python.fune",
                "size": 6521,
                "sha256": "c198be757be45feff14d99d1c6cc0a859c6438af2d818cb9ac9a843536d82903",
                "integrity": "sha256-0kSvgyHsr/YfaQoAXibaUo6Y59eLJmWSbMmHA5898l8="
              },
              "rust": {
                "name": "math.ln-1.0.1-rust.fune",
                "size": 6779,
                "sha256": "4cdab46e3d891b5db223c2165b627e5176b4516669a0ab294439cae3f85957fb",
                "integrity": "sha256-r5E+HcwhDAE89fedWhN68pB5yPf9Zf9bt8NhQX50ICc="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "math.percent-change": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-Oqhh6B5mVTovIJp2/6RUHoM+cBsP2YQwPbe+c6LFX+8=",
          "summary": "Percentage change from one value to another, in basis points, with an explicit rounding mode.",
          "level": 1,
          "tags": [
            "math",
            "percent",
            "percentage",
            "change",
            "growth",
            "delta",
            "basis-points"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "math.percent-change-1.0.0.fune",
            "size": 8362,
            "sha256": "133895b99e1f08eef17414ed38f294e326208c6c9c87007a408d2bb44d6c4c5c",
            "languages": {
              "typescript": {
                "name": "math.percent-change-1.0.0-typescript.fune",
                "size": 5982,
                "sha256": "c180607351d48d3c9923c8836a37caa6e11c66836401bb798a98d0f024b09304",
                "integrity": "sha256-rvkWNgk2OmnW/N2VDUhpsKK193KA3nz53K1EC3cAamQ="
              },
              "python": {
                "name": "math.percent-change-1.0.0-python.fune",
                "size": 6061,
                "sha256": "a1a94c9d9b57f701b8dd321e7f57c70517ccdf6886abec8097235a4318a49a30",
                "integrity": "sha256-RIx/UeJKEeRQ52GBNnGio/LG6MiVsoQDinF9PdI2L1U="
              },
              "rust": {
                "name": "math.percent-change-1.0.0-rust.fune",
                "size": 6319,
                "sha256": "f2c612e338806144078909138bd3b9e2ac6fca9bdf19768c7eac882ca6399985",
                "integrity": "sha256-5qI1U6dxCEt/as126VsQ8IZLzm1TEJGy+LQxW5gw/uE="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "math.pow": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-b8wjqK3ebWja9vpCPAQxdTG9uSZjDyArTR9Cq6pouXA=",
          "summary": "base to the power exponent from + - * / only, exact by squaring for whole exponents, identical in every language.",
          "level": 0,
          "tags": [
            "math",
            "power",
            "pow",
            "exponent",
            "root",
            "gamma",
            "portable",
            "deterministic",
            "primitive"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.ln": "^1.0.0",
            "math.exp": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "math.pow-1.0.0.fune",
            "size": 10336,
            "sha256": "cd57d65c28d5c41529f94f72488bf0eaae5a2fe9c3bc09339de550bc46cd5cc7",
            "languages": {
              "typescript": {
                "name": "math.pow-1.0.0-typescript.fune",
                "size": 6234,
                "sha256": "2c7e6862bfeb6ec90479be1c68cec591f0ec09a50d26b8c978b025353a10eac3",
                "integrity": "sha256-r8BHYAycvXS69cnJSL2CAPZxDh+XVYE0VLQLVE5nZ8I="
              },
              "python": {
                "name": "math.pow-1.0.0-python.fune",
                "size": 6333,
                "sha256": "263c09913cde8fb8b8e2c754508242d3dcad519936883ce074c8dc1d96e4bf48",
                "integrity": "sha256-dY1rTt85QR2oS+n/UGMdivGbWh6fctVQYviJ5Myk6gE="
              },
              "rust": {
                "name": "math.pow-1.0.0-rust.fune",
                "size": 6513,
                "sha256": "1f4b428e6beee8e209272b8943c2dfe3cd5c6291d3f944d880c915445829161a",
                "integrity": "sha256-9QZDvtzXOosJtyTOA3C3OqQsKHbVgjaJD3aMFJnVlxU="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "math.rational": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-4DuOyzxVc+YJ4igpTD0VfZYyA4fDUvJ/Ev1swtHZl2M=",
          "summary": "Exact fraction arithmetic, always reduced, for rates and ratios that must not drift.",
          "level": 1,
          "tags": [
            "math",
            "rational",
            "fraction",
            "ratio",
            "exact",
            "arithmetic",
            "rate",
            "compare",
            "round"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.gcd-lcm": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "math.rational-1.0.0.fune",
            "size": 20595,
            "sha256": "525db2981a46569bdeb824d6acadf1eaee1c94a6b4dd0feb5893496901d12f79",
            "languages": {
              "typescript": {
                "name": "math.rational-1.0.0-typescript.fune",
                "size": 13159,
                "sha256": "cdbcbebc0bc4cbec8048dd0dda0771268b6341a9f8b90b624989ffe073ac05a0",
                "integrity": "sha256-pp5Kd7+oUhyOuGbXvmjJNYZGLSEwga5S3vhjBOoXFuA="
              },
              "python": {
                "name": "math.rational-1.0.0-python.fune",
                "size": 12878,
                "sha256": "1909b73bebeaf827c484a743cd2e4c1e519e7fea3cb57447fb04756d12c1c757",
                "integrity": "sha256-9GzzcA4v7P7cFFysU1RPefxNNu3zCVeJIaxDGdgHOA8="
              },
              "rust": {
                "name": "math.rational-1.0.0-rust.fune",
                "size": 13740,
                "sha256": "06bd855db2e65a8cdb404698180b1face9e7570bac6d2b32fe76ab17bd304004",
                "integrity": "sha256-3uOlr9WP7GuPK0H+STWVIjuLBFLTFbkUYdcs18Aiy6c="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "2.0.0": {
          "integrity": "sha256-xHiFQrfP3xMeeJzh5IcTyTgU7RQlmbapJb0OLgG0R7M=",
          "summary": "Exact fraction arithmetic, always reduced, for rates and ratios that must not drift.",
          "level": 1,
          "tags": [
            "math",
            "rational",
            "fraction",
            "ratio",
            "exact",
            "arithmetic",
            "rate",
            "compare",
            "round"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.gcd-lcm": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python/add_rational.py",
            "impl/python/calculate_rational.py",
            "impl/python/compare_rational.py",
            "impl/python/divide_rational.py",
            "impl/python/multiply_rational.py",
            "impl/python/rational.py",
            "impl/python/rational_to_integer.py",
            "impl/python/subtract_rational.py",
            "impl/rust/add_rational.rs",
            "impl/rust/calculate_rational.rs",
            "impl/rust/compare_rational.rs",
            "impl/rust/divide_rational.rs",
            "impl/rust/multiply_rational.rs",
            "impl/rust/rational.rs",
            "impl/rust/rational_to_integer.rs",
            "impl/rust/subtract_rational.rs",
            "impl/typescript/add_rational.ts",
            "impl/typescript/calculate_rational.ts",
            "impl/typescript/compare_rational.ts",
            "impl/typescript/divide_rational.ts",
            "impl/typescript/multiply_rational.ts",
            "impl/typescript/rational.ts",
            "impl/typescript/rational_to_integer.ts",
            "impl/typescript/subtract_rational.ts",
            "vectors.json"
          ],
          "package": {
            "name": "math.rational-2.0.0.fune",
            "size": 50001,
            "sha256": "0a32a648ef33659cc1265ea863eaf465419d3a5a7145b44278f83bdbcd1ace30",
            "languages": {
              "typescript": {
                "name": "math.rational-2.0.0-typescript.fune",
                "size": 36457,
                "sha256": "154a2a10e41824d5780f89ae65b8f9240a14ae25b37920f96cc6c87b810e4958",
                "integrity": "sha256-JXHV6kP5FSQJ/1GDzlXWnlfwJ/w2SDCDtollwY8XBLA="
              },
              "python": {
                "name": "math.rational-2.0.0-python.fune",
                "size": 35969,
                "sha256": "f0e2d1248313ccb2b0c6b90eb659b2eca0fed44d326ebb06f52548459ee7cf4e",
                "integrity": "sha256-px5RtyNWS7u0x5WD8jyTifZRp3iTYFpeNkEnZd0I9dk="
              },
              "rust": {
                "name": "math.rational-2.0.0-rust.fune",
                "size": 39043,
                "sha256": "555e1c47cd7ba4d7465accf2c870f54cf05a5b8283183926717c706e942842ca",
                "integrity": "sha256-5OZIkg2agaPITjb9Z3N4FBxH8ioJC8/kBsYHVFltHyg="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "math.round-div": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-8Lp6LMpZYxyAEsqFmMyJZmttvvhMJkc6tVLVWP73gHE=",
          "summary": "Integer division with an explicit rounding mode, for money arithmetic that must not drift.",
          "level": 0,
          "tags": [
            "math",
            "rounding",
            "integer",
            "money",
            "primitive"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "math.round-div-1.0.0.fune",
            "size": 8574,
            "sha256": "080fff23c095f85b327bfd1e4e45f2dd32088a6ece3c4bfdb3629ee684b44b73",
            "languages": {
              "typescript": {
                "name": "math.round-div-1.0.0-typescript.fune",
                "size": 5349,
                "sha256": "d77f2bcfe36ab21c5be5d6d132fdad95fb0d8e5e144c1c2806ea63de6e0cd78d",
                "integrity": "sha256-M3d3izyPEehpES9CiQ6pZErnycGcK2NhpdN8HJYsUfQ="
              },
              "python": {
                "name": "math.round-div-1.0.0-python.fune",
                "size": 5381,
                "sha256": "6e40f34991aa09add1bd0f538a46ed372e7ef44394ee07deaa5d604698dce76b",
                "integrity": "sha256-QCtOfHjtlUJhBrg+MBpADdbh3BT9hemONdirPm0Ax8c="
              },
              "rust": {
                "name": "math.round-div-1.0.0-rust.fune",
                "size": 5530,
                "sha256": "42c6478790a7887fc5f497d8ccbe43d4ed311178d67446089eb5c726f5afdceb",
                "integrity": "sha256-+ED0yG9OpV91i12KKm5725HC0pWgZ+ts7s3QBnDIfig="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "math.round-div-big": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-fj1ztFqofjNRXzasZGMT1oBkLQXoNOt8CFTVoAKhxcE=",
          "summary": "Divide two integers of any size with an explicit rounding mode, on decimal strings, for exact money sums past 2^53.",
          "level": 0,
          "tags": [
            "math",
            "rounding",
            "integer",
            "bigint",
            "big-integer",
            "division",
            "money",
            "exact"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.round-div": "^1.0.0",
            "math.big-integer": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "math.round-div-big-1.0.0.fune",
            "size": 10443,
            "sha256": "84e7151555e35d220724d00e6c32107dde025c9fa1ca43935b7e774824f035d7",
            "languages": {
              "typescript": {
                "name": "math.round-div-big-1.0.0-typescript.fune",
                "size": 7567,
                "sha256": "e91a16a3b4e7f597ecef0e970ff1d90237bab18c7baf3d1592809b9d4392b8b7",
                "integrity": "sha256-FNTFJECoUIngOw3GQQJEBqSw6RnnJXjwvMNRcdqyHmM="
              },
              "python": {
                "name": "math.round-div-big-1.0.0-python.fune",
                "size": 6870,
                "sha256": "d38c148c460c378c1c4eda7665db6cf96639318131cb658b71e247b0773181da",
                "integrity": "sha256-YGb6XRJXiIJIjegPafZB425HWJKpbxQK2eXKj2ZxlDk="
              },
              "rust": {
                "name": "math.round-div-big-1.0.0-rust.fune",
                "size": 8212,
                "sha256": "57723e86e00e9aaded9e68f828c3fa2da9a50de0697206a7b172910d803169c0",
                "integrity": "sha256-8F8hZUS3q0Z7yfjo10s3IsNxXRvR0AFtuec+Q6+f+Bs="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "math.round-float": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-UqUTrXIO8blrgzZSGeteISoRGkYdDzEipKRfaacUmyw=",
          "summary": "Round a float half away from zero to 0-12 decimal places, identically in TypeScript, Python and Rust.",
          "level": 0,
          "tags": [
            "math",
            "rounding",
            "round",
            "float",
            "decimal-places",
            "half-away-from-zero",
            "precision",
            "primitive"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "math.round-float-1.0.0.fune",
            "size": 13354,
            "sha256": "636aaefc23d19a399890dd9a83751e6e995ca3862a570b3bb4e52a63f4ad36f2",
            "languages": {
              "typescript": {
                "name": "math.round-float-1.0.0-typescript.fune",
                "size": 8955,
                "sha256": "46ede220aeeee32a4c33a694fa3ccdf1380c45d479a3fbc19090272c5ef6b321",
                "integrity": "sha256-WzRvRyA6qVKv2mmrjxJtDm9Cs43sUuFNueRORVMDE2o="
              },
              "python": {
                "name": "math.round-float-1.0.0-python.fune",
                "size": 8663,
                "sha256": "343aab912895b14d01eab0b552db8dd5c6b674d834201fa6127653d25675851c",
                "integrity": "sha256-blhZ4H+sriVEbO4edH9SywNMD+vWmySw2GsVs2j5gik="
              },
              "rust": {
                "name": "math.round-float-1.0.0-rust.fune",
                "size": 8992,
                "sha256": "7883c0969a50548e0b3a8509ce6fb5cd2a09536226cd1b0f3df9d4ecf5f1f7f7",
                "integrity": "sha256-K93RSTB6tbXVPC8e4nBKosZ9J5MlmYqQsfE5ymFt6CY="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "math.sin-cos": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-5YPeQP5y+ZrlAj4gyECywONzoNwi8YoawRrp808F+jg=",
          "summary": "Sine and cosine of an angle in radians from + - * / only, so every language returns the same doubles.",
          "level": 0,
          "tags": [
            "math",
            "trigonometry",
            "sin",
            "cos",
            "sine",
            "cosine",
            "angle",
            "portable",
            "deterministic"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "math.sin-cos-1.0.0.fune",
            "size": 10949,
            "sha256": "b59a5e1a8d56abe53dcc0c342d1361407ec02316c586513bf381648c8fdefae2",
            "languages": {
              "typescript": {
                "name": "math.sin-cos-1.0.0-typescript.fune",
                "size": 6522,
                "sha256": "8d057f51baff244e6ada1a8ba06a8ef07be3e257adf805203674b5805e58d645",
                "integrity": "sha256-WOqoj3R2ktrelV69I8W0JErFa0LNmsIU/L+ulAHzZsc="
              },
              "python": {
                "name": "math.sin-cos-1.0.0-python.fune",
                "size": 6242,
                "sha256": "3c78ae245b45546392d7881040dc0c99a694ced6288b11bc9c7786e40f080c46",
                "integrity": "sha256-nSREoDaYqVRF9qT6zj7SdvpGhKrsx74RqDz2ONh4aAY="
              },
              "rust": {
                "name": "math.sin-cos-1.0.0-rust.fune",
                "size": 6523,
                "sha256": "8af8c4d78c49f3fb273765dac9be72eb5378f16257d2834e4b8af4f6e7a671e0",
                "integrity": "sha256-bCFNKygvUPzKG7onUjZwA08qqDPmjSSAqSqFQtXcVxA="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-+HboEFopsIILCouNhOCd6q39IIw7Zk92Cuom9kb3UDM=",
          "summary": "Sine and cosine of an angle in radians from + - * / only, so every language returns the same doubles.",
          "level": 0,
          "tags": [
            "math",
            "trigonometry",
            "sin",
            "cos",
            "sine",
            "cosine",
            "angle",
            "portable",
            "deterministic"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "NOTICE",
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "math.sin-cos-1.0.1.fune",
            "size": 12682,
            "sha256": "4d26576babecb864dc8bf2da42d2ee2798ace554299b378af172bb29cee14e35",
            "languages": {
              "typescript": {
                "name": "math.sin-cos-1.0.1-typescript.fune",
                "size": 7653,
                "sha256": "b1c63237a309709fc623672e669e183d2b2964cf97b057e9e98c5311a18db04a",
                "integrity": "sha256-xE/YsR+Tdmzb9DsP5kVogRKjPf0hjg5fsAAZC8CKpF8="
              },
              "python": {
                "name": "math.sin-cos-1.0.1-python.fune",
                "size": 7367,
                "sha256": "b490fdcf9fedbd87933894c81f18227bd59d542eb72bfedeecf4ac1ef7cc427d",
                "integrity": "sha256-GET+PYcB/zqRDW102KZxjLJS8R897qltOhIt9x7LviI="
              },
              "rust": {
                "name": "math.sin-cos-1.0.1-rust.fune",
                "size": 7654,
                "sha256": "011d221b75e85f8f1d33667e91f50f3d767c6669deaade12eb83bec2fafdfaff",
                "integrity": "sha256-JMO7J2ulbmm7uNf04oLk6fylMSYjt9v6U/L3gYpk4tY="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "money.add": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-Shs3I8K2W1DjMeKAdiT0B/KEDO43piornJO/9ER8SCE=",
          "summary": "Add, subtract and negate monetary amounts, refusing to mix currencies.",
          "level": 1,
          "tags": [
            "money",
            "arithmetic",
            "currency"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "money.add-1.0.0.fune",
            "size": 3782,
            "sha256": "05a3306e1d263396987387bcee089ab451fdcc5789e97fb0e110889e5def31c9",
            "languages": {
              "typescript": {
                "name": "money.add-1.0.0-typescript.fune",
                "size": 2557,
                "sha256": "a880f668bb081f16eff4cffc7dd0abbf98bf7635fd0df5cc2542bc878e98cfd9",
                "integrity": "sha256-jCkqR4gDz7nsfovnvsIuGww4rSdcnyHu2TfwzRiRJLw="
              },
              "python": {
                "name": "money.add-1.0.0-python.fune",
                "size": 2509,
                "sha256": "b89fec11349e6659981c5a0ed499c131528889982c363161aff92f8e2c8f270e",
                "integrity": "sha256-5MCjV9EIg9Fg00ewSjo9ESnSMfTYTITNUe3kp0TkRT8="
              },
              "rust": {
                "name": "money.add-1.0.0-rust.fune",
                "size": 2890,
                "sha256": "c93c8b4fa0a0ef8babdef94f0049364df697208718ce8da59c61d0cad36bb9fb",
                "integrity": "sha256-brqwUMHbClSRrIMCvFXEtOPE/Q51UKkXiHuBTI83vAE="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-a0RYkWDCagItnUJwvijgWU4UX2l+KCMz1vCSEBalyVA=",
          "summary": "Add, subtract and negate monetary amounts, refusing to mix currencies.",
          "level": 1,
          "tags": [
            "money",
            "arithmetic",
            "currency"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "money.add-1.0.1.fune",
            "size": 5558,
            "sha256": "8cd9bf58cd000b7479fa5e8e95e7e9aaf8742f7615506f2c78c2793ebbe8bd69",
            "languages": {
              "typescript": {
                "name": "money.add-1.0.1-typescript.fune",
                "size": 4333,
                "sha256": "b3ef05c646b745f0c055568888b1d1112b162c32ec8c7d1d03aa17753273bb9c",
                "integrity": "sha256-cNwu0SeOunijPfmlsHaWz1u8VNBeh8IpQHOa2HOG04I="
              },
              "python": {
                "name": "money.add-1.0.1-python.fune",
                "size": 4285,
                "sha256": "0a7465f3aeea4505cfc73a7d936a0984ef5b10afd717e73d10eeb38773fd3479",
                "integrity": "sha256-v+ilXH+Bn0cQaTWsf83Sql7Xlioh1jb/PxGmG8G34VE="
              },
              "rust": {
                "name": "money.add-1.0.1-rust.fune",
                "size": 4666,
                "sha256": "90b65af1ee2c2af4c05dcb2831a3a6a8edd17d65cefb5ebcfe065929f60db7f0",
                "integrity": "sha256-ECXWBFYw6AnHNHtytepa4SEnWvMvcR0FJvPJEDLWxAA="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "money.allocate": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-YjFnd3c4jCMhDYD2Zr/9n0QKVh5NdRl/QhVraiWczWM=",
          "summary": "Split an amount across ratios without losing or inventing a single minor unit.",
          "level": 1,
          "tags": [
            "money",
            "split",
            "allocate",
            "proration",
            "remainder"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "money.allocate-1.0.0.fune",
            "size": 8253,
            "sha256": "94885a2d1582976c8f966a662a880b69d40bf0c991ab03766ae6d08d096b2655",
            "languages": {
              "typescript": {
                "name": "money.allocate-1.0.0-typescript.fune",
                "size": 4729,
                "sha256": "b2a28797a8b5320c2b73c3eaa06e1eed74a3c6ac4093d71d186e69baa26e9037",
                "integrity": "sha256-1dRRRdGOSLlVa6fkHhgY8MET8kkme3XyWU5La6RC3L4="
              },
              "python": {
                "name": "money.allocate-1.0.0-python.fune",
                "size": 4587,
                "sha256": "619e64336d6d5a3ae6f1cee9eb27811ae0cca471a0a753368af92aacfd1de972",
                "integrity": "sha256-dqk1Yv6kMI/aNncOGm6UzfECfY0N3WLNlBaY/+8e6io="
              },
              "rust": {
                "name": "money.allocate-1.0.0-rust.fune",
                "size": 5427,
                "sha256": "aa8f1ea8970252e9dfab1967c15075c3ecad72cf48fb88a05ec3ac9c8ba24ec8",
                "integrity": "sha256-I37r1ycfOma9lYpat0X5OSJDIkwNOakzpW1Imz+EJb8="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-Gz7e5TjTqd63ueXyXLPWQyCcX9eqXZK4vTcUQh+DBiQ=",
          "summary": "Split an amount across ratios without losing or inventing a single minor unit.",
          "level": 1,
          "tags": [
            "money",
            "split",
            "allocate",
            "proration",
            "remainder"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "money.allocate-1.0.1.fune",
            "size": 10802,
            "sha256": "9cce7c55a15100ba63fdb2177af7103771921fe17b05187a707c3473df1440ee",
            "languages": {
              "typescript": {
                "name": "money.allocate-1.0.1-typescript.fune",
                "size": 7278,
                "sha256": "5fa51ed35be133a0e863d04bb541554c6d9a42a98db5f7b1f8d547da8648c5b3",
                "integrity": "sha256-EWwKMBRz1vWXtGTPKvRndQrXV6/aXQFFwjS4um2sYas="
              },
              "python": {
                "name": "money.allocate-1.0.1-python.fune",
                "size": 7136,
                "sha256": "e540ec12e29a20ae82f5f9af5cc2701e6dcda1b33a0f85e9c7ae5e079c104c62",
                "integrity": "sha256-b4NDVZsxiajtlAy1is1SUNhZp9ljkUuMGGEW6uKaUTk="
              },
              "rust": {
                "name": "money.allocate-1.0.1-rust.fune",
                "size": 7976,
                "sha256": "38f1512baa04e87d0864d4c3a81428ee769ac25711f5b41ee37557682e1627c8",
                "integrity": "sha256-I8ICH2Xrxm1h3Ap1684A0SoDBNS/kab9psTg76nBzn0="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "money.amount": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-eVIDdR44bkQFpq8oDjIfZ9I77X7LAn/NJnuZUmIb1GU=",
          "summary": "A currency-tagged monetary amount held in integer minor units.",
          "level": 0,
          "tags": [
            "money",
            "currency",
            "type",
            "primitive"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "money.amount-1.0.0.fune",
            "size": 6566,
            "sha256": "0cbec6e22e228a57a285a6cfd8ad1a99992e1b1622d5c04234e85a78766cdfea",
            "languages": {
              "typescript": {
                "name": "money.amount-1.0.0-typescript.fune",
                "size": 3881,
                "sha256": "a23635c044e9dc0a1ccf942ffa04b04b64f3f4bca5f347f15f3a90a70946910b",
                "integrity": "sha256-3zshcwsL+zizr8VzidfRIMwBJKwaFPZOJeSazPwazTU="
              },
              "python": {
                "name": "money.amount-1.0.0-python.fune",
                "size": 3725,
                "sha256": "50667576607c484f542a0c030f1a269b033f1e1c5cce6873757c6e9a11420589",
                "integrity": "sha256-7c2SY89mpmFAbd650fsfeVsMp0hGqRHS1zkWFfIh1YQ="
              },
              "rust": {
                "name": "money.amount-1.0.0-rust.fune",
                "size": 4404,
                "sha256": "368927919709704019154a397b5e1244a8a7f8658163391ce6cb8d29ec805e01",
                "integrity": "sha256-5wTHogTtuiLSqbx9LGtD9XDKX3VaCNlFvgzyLOUs4tc="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-idlFLMP3XBE8VKyQnopq0PQsKvkJBoJyntxznzF2Mu4=",
          "summary": "A currency-tagged monetary amount held in integer minor units.",
          "level": 0,
          "tags": [
            "money",
            "currency",
            "type",
            "primitive"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "money.amount-1.0.1.fune",
            "size": 7776,
            "sha256": "7a02c05afaaa44fd77303a897cbaf4017e855cc62554d480693a7f1ed5d84e32",
            "languages": {
              "typescript": {
                "name": "money.amount-1.0.1-typescript.fune",
                "size": 5091,
                "sha256": "49b38c26e5eebead42f1b40c1560e1b2449853aff701a164912011bf71e87ddc",
                "integrity": "sha256-ljOzUNZrZhAlk6fTH6Q0Zj5590ko96jonF3HwwPDwQA="
              },
              "python": {
                "name": "money.amount-1.0.1-python.fune",
                "size": 4935,
                "sha256": "f69716683409ce83906b359202807ee51b5d7616dcef69e7bce0225c6f089a61",
                "integrity": "sha256-HAAp7wSidUoPZlvr1T/Ga/8ryMFm5j8ptaUVbWHE4z4="
              },
              "rust": {
                "name": "money.amount-1.0.1-rust.fune",
                "size": 5614,
                "sha256": "a9548b6f0611f31f3ce62ef78033c593b4e63d6df3a9829ad756dedd661f32b9",
                "integrity": "sha256-LkT70i4UnKnGKXTlJVeuDhgO2S7lRUJI5HJNXCSv+X8="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.2": {
          "integrity": "sha256-xMOObEtSXNfkSaHxq9iIsfBliU7ujdpvHSiwhlBB65Q=",
          "summary": "A currency-tagged monetary amount held in integer minor units.",
          "level": 0,
          "tags": [
            "money",
            "currency",
            "type",
            "primitive"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "money.amount-1.0.2.fune",
            "size": 8117,
            "sha256": "b8ba6ab0ede8ca6006c44677a6da9c5d26f31ea497f0dbc75bfc7587ddc0ab66",
            "languages": {
              "typescript": {
                "name": "money.amount-1.0.2-typescript.fune",
                "size": 5430,
                "sha256": "655807d70daf69efd992cb724440880c9a83c0f72fa123ddb33f796bd6143317",
                "integrity": "sha256-PmAkKXuDZLXMJSDWn6Ukz/Jb4xkiv0wLy9f61jz7aUQ="
              },
              "python": {
                "name": "money.amount-1.0.2-python.fune",
                "size": 5276,
                "sha256": "90ea5a20208ad735e3313e446d12175664499667fed88c55985269c300626f85",
                "integrity": "sha256-sAt9aRt4R5F8iM013XYwgZBxohIcvr1boUjUfPpoqTo="
              },
              "rust": {
                "name": "money.amount-1.0.2-rust.fune",
                "size": 5953,
                "sha256": "71196da22b8881bfe88906753a1f14ea46693a7d8e11081a483cc53fe8d2300f",
                "integrity": "sha256-PenXf2Bbz7+DN8PyGUHYIPNJ+FL6n3dt0ModXB8bbws="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "money.apply-rate": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-U1CAgr5QVdYpbJKxIG7BHj1Rp2fCcdLMcZQC/HEolpo=",
          "summary": "Apply a rate expressed in basis points to a monetary amount, with an explicit rounding mode.",
          "level": 1,
          "tags": [
            "money",
            "rate",
            "percentage",
            "basis-points",
            "discount",
            "tax"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "money.apply-rate-1.0.0.fune",
            "size": 6558,
            "sha256": "c626a99e25b85e9edc9b6c0c560d80199b6d5594d0d01a9a982a6005a46e20c9",
            "languages": {
              "typescript": {
                "name": "money.apply-rate-1.0.0-typescript.fune",
                "size": 4519,
                "sha256": "f67d21ac4cb44a259b1fde6c972c78bbe0c0870b62f015f07d5e4c09dc8fab43",
                "integrity": "sha256-0mlJ9JahleGPwa5b1Ndusndr5U6Syk/8X1ELMzG1Ccc="
              },
              "python": {
                "name": "money.apply-rate-1.0.0-python.fune",
                "size": 4515,
                "sha256": "ca7dbac95a68f9d69bbb40db7c976f692b05f9ec8c2050bc36fad4100dc73bce",
                "integrity": "sha256-8pQUGIp6C2qodUsqqGzF6IzAN2sCokR5ziD+Qna5mOo="
              },
              "rust": {
                "name": "money.apply-rate-1.0.0-rust.fune",
                "size": 4558,
                "sha256": "c2327c3fd61e4c085764f344bd9cf5fc91d65ec5419229af36b4e38fc25a547d",
                "integrity": "sha256-xzMpUPxLmAmyvdoonn+Sr6IyiVX+9zG+lBvYaW4Aub0="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-9gGdFmmso1D3O5I/dXx4qsRcTb0I/nkWoODBOr/rQPU=",
          "summary": "Apply a rate expressed in basis points to a monetary amount, with an explicit rounding mode.",
          "level": 1,
          "tags": [
            "money",
            "rate",
            "percentage",
            "basis-points",
            "discount",
            "tax"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "money.apply-rate-1.0.1.fune",
            "size": 8862,
            "sha256": "e34dd8f310c3432e1767a88c32e75318e3764f0ec7a0b3f941fa8e19e4e2ce1b",
            "languages": {
              "typescript": {
                "name": "money.apply-rate-1.0.1-typescript.fune",
                "size": 6823,
                "sha256": "774c8d221a8e733126412580062bf5d04d24ace2412f478180741700c04d682c",
                "integrity": "sha256-zWJU3bMEvf14q/GzsUjKjgU2B2xnFqVh/JGOv69jY3I="
              },
              "python": {
                "name": "money.apply-rate-1.0.1-python.fune",
                "size": 6819,
                "sha256": "8b16db9c77ec73087dc28d02433b1e7d3df2a486a61b3ad743e0aa5a231fd266",
                "integrity": "sha256-ujAMkxaBYo11HHFosJSLZUGorLQGKF6M7EqQu3CQ/L0="
              },
              "rust": {
                "name": "money.apply-rate-1.0.1-rust.fune",
                "size": 6862,
                "sha256": "f2a2a0a4110791d8ff5514066460b1f101cbc970332bf849da09d374de01a1c2",
                "integrity": "sha256-jlENTBJOLg6PzzSEDab95lDsp4o5tgKH2etOh76g2tw="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "money.compare": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-LVsjlcbJvbFiZuXEPMx4xK/5H3uxWsx0UR7z6/yHIBs=",
          "summary": "Compare two amounts of one currency, refusing to compare across currencies; min, max and clamp too.",
          "level": 1,
          "tags": [
            "money",
            "compare",
            "comparison",
            "min",
            "max",
            "clamp",
            "sort",
            "currency"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.clamp": "^1.0.0",
            "money.amount": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "money.compare-1.0.0.fune",
            "size": 9081,
            "sha256": "a2f90e08a0b24b24f121a1d6df2604bc4d7f49028d1aeeaf71dcd14cd8162520",
            "languages": {
              "typescript": {
                "name": "money.compare-1.0.0-typescript.fune",
                "size": 6315,
                "sha256": "2d4b4a33c7b8e853f81e7e1a5058a993cf8691839cb3a239fe2fa970e50b0f15",
                "integrity": "sha256-saCq/uCvxER2kqKBbRRr5C/++NFIVZu5jW2wIwQ05vA="
              },
              "python": {
                "name": "money.compare-1.0.0-python.fune",
                "size": 6316,
                "sha256": "622325eaf849845dc87d8542e9ee7237c0b44496d16b0663476bc58fac22de16",
                "integrity": "sha256-81/ZnmVoOGSvs0vOAfu915i6qs0h6S3Fzh992U0ijWo="
              },
              "rust": {
                "name": "money.compare-1.0.0-rust.fune",
                "size": 6774,
                "sha256": "16ebe06b3a840a5fcd9874f66b5d3305c102551b2965562e221f8797a09e348d",
                "integrity": "sha256-cjgYX7zgxMZxwUULBHLJAWl5r+aoIzVT3prUoKeoCTs="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "2.0.0": {
          "integrity": "sha256-dzj3U3ofNa2a+hMmk4QDvE8n50R3Y+NmOTjRil6zTsI=",
          "summary": "Compare two amounts of one currency, refusing to compare across currencies; min, max and clamp too.",
          "level": 1,
          "tags": [
            "money",
            "compare",
            "comparison",
            "min",
            "max",
            "clamp",
            "sort",
            "currency"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.clamp": "^1.0.0",
            "money.amount": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python/clamp_money.py",
            "impl/python/compare_money.py",
            "impl/python/max_money.py",
            "impl/python/min_money.py",
            "impl/rust/clamp_money.rs",
            "impl/rust/compare_money.rs",
            "impl/rust/max_money.rs",
            "impl/rust/min_money.rs",
            "impl/typescript/clamp_money.ts",
            "impl/typescript/compare_money.ts",
            "impl/typescript/max_money.ts",
            "impl/typescript/min_money.ts",
            "vectors.json"
          ],
          "package": {
            "name": "money.compare-2.0.0.fune",
            "size": 21448,
            "sha256": "be921740d107bfb3f817355a1724582ab8bf91eb38f3977ac0a346c71dfcc541",
            "languages": {
              "typescript": {
                "name": "money.compare-2.0.0-typescript.fune",
                "size": 16688,
                "sha256": "a45eedd5d64e17ad9f5cb401f361f3a970019429dfc81fc8e7f373125a32d957",
                "integrity": "sha256-YZWj9631yLzMS3rLmUtDw/jzrUm6QJ7oVetaRkMsqo0="
              },
              "python": {
                "name": "money.compare-2.0.0-python.fune",
                "size": 16648,
                "sha256": "d6cca37235853dab248fab2fde5ff83458260880de07d096b1d5461832e8613e",
                "integrity": "sha256-zzu7ZGzdFh5Xw+VJLfJQTTaSewxpGFhVjECPDE6LJ4M="
              },
              "rust": {
                "name": "money.compare-2.0.0-rust.fune",
                "size": 17946,
                "sha256": "b74cb2910b4f3c914e018ca5499062423bb841e29736c2c32e5e7f484d55d96b",
                "integrity": "sha256-JvRLx+6PHT13s7APqJhIQUp7JFcytqDcej/CVLWUmU4="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "money.convert": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-k/5EhtLoWrMzYMLaawL1k+BljuQBmCUC5+YN8VtPWqg=",
          "summary": "Convert an amount to another currency at a supplied exact rate, with an explicit rounding mode.",
          "level": 2,
          "tags": [
            "money",
            "currency",
            "conversion",
            "exchange",
            "fx",
            "rate",
            "forex"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.rational": "^1.0.0",
            "math.round-div": "^1.0.0",
            "money.currency-digits": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "money.convert-1.0.0.fune",
            "size": 17457,
            "sha256": "5f212485febe18b862f284258bf82a2443c493df5d26c3d20f0303bc6fdf5691",
            "languages": {
              "typescript": {
                "name": "money.convert-1.0.0-typescript.fune",
                "size": 14008,
                "sha256": "e81622bd1d50d46c6b0b952b9223a94484165a9c462c20a3385af203d28095cf",
                "integrity": "sha256-l2ER39lql1snROkSSN8azQIaYMZxDVfZEAhkfgfiGV4="
              },
              "python": {
                "name": "money.convert-1.0.0-python.fune",
                "size": 13900,
                "sha256": "93c0bb06f211282d2889997efa35c045545f08ade053f56c5cdb3cd69cc3e72a",
                "integrity": "sha256-KICLJE9rzPwO0etR4OtXEGykCyY7bJ3GL+offnWDDf4="
              },
              "rust": {
                "name": "money.convert-1.0.0-rust.fune",
                "size": 14643,
                "sha256": "25fbc108c0ee9375d041eb676d9b69f1f704aaecd5d6d6040f1112036a419fa7",
                "integrity": "sha256-7tkPHknUKC6vCxfqTCi2PSDjyy2+s/cyLnPsMwV/JIc="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "money.currency-digits": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-ck4YVvSBLesRscHA5M/67RnuOBZnfbFyFtuk+PNwmt8=",
          "summary": "How many decimal places a currency's minor unit has, from the ISO 4217 list.",
          "level": 0,
          "tags": [
            "money",
            "currency",
            "iso4217",
            "minor-unit",
            "decimals",
            "precision",
            "exponent"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "data/currency-digits.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "money.currency-digits-1.0.0.fune",
            "size": 17054,
            "sha256": "b63fec1cb7b8064cbb5b61d7419482b8766fe76df16f4f73fdd7fd94af91de47",
            "languages": {
              "typescript": {
                "name": "money.currency-digits-1.0.0-typescript.fune",
                "size": 15787,
                "sha256": "37d35cc8c27649dcf454192927ae26b1cdb1d9b2e27cb371f3e5734eedf93d20",
                "integrity": "sha256-falIlZgpxnrW7AExlnRTYoGSWgGz325sKHptR5773r4="
              },
              "python": {
                "name": "money.currency-digits-1.0.0-python.fune",
                "size": 15736,
                "sha256": "ca767b54b9b4a3d0f40d3ad1615ba7a4d6767842e7586706a9c1c4b3c7256655",
                "integrity": "sha256-3oXBhhmbqAIStYOD/z0sqjXFeRLSRZRirNgQg6zCt8w="
              },
              "rust": {
                "name": "money.currency-digits-1.0.0-rust.fune",
                "size": 15965,
                "sha256": "05b8cca7bba2765fb8a9fe46eee48da38064c3eb9458502f0948aca052e5c54a",
                "integrity": "sha256-LGqDaRQF4p8q3QiHzsQWeFZxww/8RnHErQH9wdpthds="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "money.format": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-BgAhDgM+BAjyhmZ/GYRh5cLNJevLddU9y2JXbPMqiLo=",
          "summary": "Render a monetary amount as text, using the currency's real minor-unit precision.",
          "level": 1,
          "tags": [
            "money",
            "format",
            "display",
            "currency",
            "presentation"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/currencies.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "money.format-1.0.0.fune",
            "size": 8922,
            "sha256": "d0d6f4e61a074c3a58575ea3c268f73feba16804516f27bafeb63b5be66c0138",
            "languages": {
              "typescript": {
                "name": "money.format-1.0.0-typescript.fune",
                "size": 5799,
                "sha256": "352a8d2ebe98113af0dacc87de82ba297b42451835ca29c8ac63f7dd08d7c5d2",
                "integrity": "sha256-gGHKPMMsuqK+aLmKosIEHxb8jMMPIUVU2A8hxWGrATg="
              },
              "python": {
                "name": "money.format-1.0.0-python.fune",
                "size": 5675,
                "sha256": "4747838046bcb2eb7020c43d753786315110620195ccfdd4c154212b072d5353",
                "integrity": "sha256-ronDvcsvURPrd4UA6F3AOdL1POPsVTpYcMW7oWhnQ0I="
              },
              "rust": {
                "name": "money.format-1.0.0-rust.fune",
                "size": 6416,
                "sha256": "76fbdbbd0e31341add42e3de9c9629714d7b353430bfb40e3e452a54df4ed4b9",
                "integrity": "sha256-tdn1MR171tKjbsrnKqw6fk6nEKM/cKE6Kew0+Y0sKB4="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "money.parse": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-RUYwqb6LNsCmcTMIlQI+zPYBzGFC+9CfI0CQN2LBCG8=",
          "summary": "Parse \"£1,234.50\" or \"1.234,50 €\" into integer minor units, strictly: no guessing, no rounding.",
          "level": 1,
          "tags": [
            "money",
            "parse",
            "input",
            "currency",
            "amount",
            "text",
            "minor-units"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "money.currency-digits": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/currency-symbols.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "money.parse-1.0.0.fune",
            "size": 28750,
            "sha256": "ecbdeba4a39292c61457306e88c137e00908b4f639810f6736ead0376b3c3162",
            "languages": {
              "typescript": {
                "name": "money.parse-1.0.0-typescript.fune",
                "size": 19061,
                "sha256": "e05b9194a110bc81462ff182c13503d7ea05196451bd113b1361c4ace980291e",
                "integrity": "sha256-uNXcNC98L++HLVvJJpd7nqdePGrswr6XfxqaA19Pg6U="
              },
              "python": {
                "name": "money.parse-1.0.0-python.fune",
                "size": 18885,
                "sha256": "2675d7143b4b58a114f6c5e62feede0dab56e8d5cd77e0a3fcd1f5a7dab9bb21",
                "integrity": "sha256-caIyVvl5hT98QhJtow9TFzstlsQ6Y7paPrF2uqluScI="
              },
              "rust": {
                "name": "money.parse-1.0.0-rust.fune",
                "size": 19964,
                "sha256": "b1ae7044786afd5ea1dd745ea3d64ef7a7dfa1e48ff248b84b3175466bb39096",
                "integrity": "sha256-7DooklTX64nPFJ96tWs+1TC9t68Mco96nYC+Pmx6x+I="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "money.split-even": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-o8K7G1gFU93+7Z7h3MCK5DIdY2AV7ZmSE0oJo7HOQbM=",
          "summary": "Split an amount into n near-equal parts that add back up to exactly the whole.",
          "level": 1,
          "tags": [
            "money",
            "split",
            "divide",
            "share",
            "even",
            "bill",
            "instalments"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "money.split-even-1.0.0.fune",
            "size": 11382,
            "sha256": "30cfb34e4555102a0abc16f49997744bfa2a6bc56f99ff350fcb758d468ee06e",
            "languages": {
              "typescript": {
                "name": "money.split-even-1.0.0-typescript.fune",
                "size": 8789,
                "sha256": "04e951dcb6dde9d3bd4b6162939e69af2ac4374d7d388df0cf785489a3e9499b",
                "integrity": "sha256-pmIQGtaHWxdPZGQsLiqZ8lmc20H68NxzJaaZOaBjmTM="
              },
              "python": {
                "name": "money.split-even-1.0.0-python.fune",
                "size": 8686,
                "sha256": "99a2eb96aaccd4685554424963f75e876e4becfbc33be93bf87f9dfe8c33e116",
                "integrity": "sha256-VTgAvJ0E5gKF0xk+rKS8rLVGDZHgTUgwKHTNZwBEFds="
              },
              "rust": {
                "name": "money.split-even-1.0.0-rust.fune",
                "size": 9223,
                "sha256": "c9cb10f2e4464f457b42daaf1dc092beb9a6dd0fe503362353574110d5333931",
                "integrity": "sha256-WAbtnNc1i6Fmwwj7xG0CGLFCqpRSYGJDoimr0iym0LY="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "money.sum": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-l8NV2G6EvSc/eeUXfZMNK2hkk2/HiVyz6OaxSdSFQmk=",
          "summary": "Total a list of monetary amounts, with an explicit currency for the empty case.",
          "level": 1,
          "tags": [
            "money",
            "aggregate",
            "sum",
            "total"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.add": "^1.0.0",
            "money.amount": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "money.sum-1.0.0.fune",
            "size": 3488,
            "sha256": "dc2958a37f07f5a3ae28ad6f788ff55623c7a0cf37daafc8ad3fc01e4005009e",
            "languages": {
              "typescript": {
                "name": "money.sum-1.0.0-typescript.fune",
                "size": 2563,
                "sha256": "e79989810566372af0ecf572f8bd7bd37ade3336cf7edb0a4d80652e482eb6e7",
                "integrity": "sha256-8cOdcAJuKPogV6bvcZuRI9oCQNzhqlmwI/rcmZiA6aU="
              },
              "python": {
                "name": "money.sum-1.0.0-python.fune",
                "size": 2564,
                "sha256": "c366639c6d5493290c2831a68fdb16eb7596f8f93536724925528ee13dd424a6",
                "integrity": "sha256-nouoSMOoqp9bp0vyMAw48UzdGQ0pAFH8MmJRtpDw0xg="
              },
              "rust": {
                "name": "money.sum-1.0.0-rust.fune",
                "size": 2873,
                "sha256": "b7d7d5118533938808e7fa0b994ba5a97e4934d8af84e7bea98f8e75288a6adb",
                "integrity": "sha256-M17gQS2ePP7Wslb2tXJaQn8qC9zVgJaZrbp+z2TXurY="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-H1YiXYFbdVRbyRsHyDWTGQ/5qsn+sR0WoAWawhMWPf4=",
          "summary": "Total a list of monetary amounts, with an explicit currency for the empty case.",
          "level": 1,
          "tags": [
            "money",
            "aggregate",
            "sum",
            "total"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.add": "^1.0.0",
            "money.amount": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "money.sum-1.0.1.fune",
            "size": 5305,
            "sha256": "b10d69d8451e8785f2c24dd1321240ee289aef491bedae6c2419b38984e03a02",
            "languages": {
              "typescript": {
                "name": "money.sum-1.0.1-typescript.fune",
                "size": 4380,
                "sha256": "5c1304c2f547a593bee3be2f32f8ac011cad52d8b33025367234f31d98a420f8",
                "integrity": "sha256-TCM2vf7z1p2t1yS4Iejnb7NnjvnLFhAAw1CYrboFqV8="
              },
              "python": {
                "name": "money.sum-1.0.1-python.fune",
                "size": 4381,
                "sha256": "4d7f05ca998ea60d4bf4e62c168330d64acc8e21f1496ff15c9f225c3dbdf191",
                "integrity": "sha256-ee7TPfEHOuPHq2advE5cfpXyz+74ooOiTpHAe3Vk1/o="
              },
              "rust": {
                "name": "money.sum-1.0.1-rust.fune",
                "size": 4690,
                "sha256": "d1ad98afef977334cb8399f18c460b5d99eb1b4700924b6cb54d493b85b9a40c",
                "integrity": "sha256-U/Y7w/cIxYKJykSKmEON5iCBBibg+K5OxBHDWcJcKrw="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "monitor.alert-mute": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-GolmkwtCnN7JdtUhaCkEEoO97kQVC6OxowE2BHFwdVM=",
          "summary": "Whether to hold an alert back: its component is under maintenance, or a related alert on it is already firing.",
          "level": 0,
          "tags": [
            "monitoring",
            "alerting",
            "mute",
            "silence",
            "inhibit",
            "maintenance",
            "suppress",
            "alertmanager"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "monitor.alert-mute-1.0.0.fune",
            "size": 17962,
            "sha256": "2ff913849ec88695dff7947db041136c9efcfe0adce2756ea7e73ae57951391b",
            "languages": {
              "typescript": {
                "name": "monitor.alert-mute-1.0.0-typescript.fune",
                "size": 13229,
                "sha256": "2dc0a42df46f5ebcfdf2eb9b8ac4378cc4a4f9b99bc6a28257aad30185f08757",
                "integrity": "sha256-ye/y2dc0gkFsJF2G1VDagAsjmRpO96Zm5I/tvrZULck="
              },
              "python": {
                "name": "monitor.alert-mute-1.0.0-python.fune",
                "size": 13269,
                "sha256": "34a0e617174bf3bd9e3cf04ece07cca5f3e794ad4d9c8f3af1c19a88726aa47f",
                "integrity": "sha256-hlTaQuzjfX1UrZn0xHxaBGK75fiJkrtH06AGuFMs764="
              },
              "rust": {
                "name": "monitor.alert-mute-1.0.0-rust.fune",
                "size": 14648,
                "sha256": "079b0be741aab844af45834419f6da285fedb3fce6b8a2cffa3ffe3f2fce75db",
                "integrity": "sha256-TWrmGVBafdyf5oX5NiQ7pVJiph8k8KLGmPUqknRLKoE="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "monitor.alert-rule": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-6i9SgYctTc/DGaucMU3jhI2FIABJeCDFTII8rjvn27A=",
          "summary": "Evaluate a threshold alert rule over a metric series: inactive, pending, firing or no-data, Prometheus style.",
          "level": 1,
          "tags": [
            "monitoring",
            "alerting",
            "threshold",
            "alert-rule",
            "prometheus",
            "hysteresis",
            "for-duration"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "monitor.series-window": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "monitor.alert-rule-1.0.0.fune",
            "size": 25566,
            "sha256": "2269259d07d83cc2869899f3d1fabd2898ed5f870612b99233b4bb3593b8a2f3",
            "languages": {
              "typescript": {
                "name": "monitor.alert-rule-1.0.0-typescript.fune",
                "size": 18073,
                "sha256": "3bb27b9f2ade32ec393254600bc8c2fb96c249cc8961985c6ca8b851dacc7524",
                "integrity": "sha256-+85VBWvxCGBCtXMfY7YR/jPV5t17ifF259hwaHi5Szg="
              },
              "python": {
                "name": "monitor.alert-rule-1.0.0-python.fune",
                "size": 18175,
                "sha256": "c22fa3892838869c657fa93b6926ea754cfd87ab53307a7d296da2eac90bd525",
                "integrity": "sha256-w1kHp+n/56PAx18zoZzeKoFY9pWasBtKl5WcJFwsuFs="
              },
              "rust": {
                "name": "monitor.alert-rule-1.0.0-rust.fune",
                "size": 19808,
                "sha256": "0863f502f2bb3693029d4c82c3724e324dbfaa0e376163925b0bc7b3e634c9db",
                "integrity": "sha256-kQJLyMy/yvlTj1aOQdSzRJHclsn4Wu8YIXMB1sFGn5s="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "monitor.alert-state": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-e5QlaV+0GxxAe6wrRFS1RCymoMByQYKlXjoOxs0QhzQ=",
          "summary": "Step an alert through inactive, pending, firing and resolved, and say which notification to send.",
          "level": 1,
          "tags": [
            "monitoring",
            "alerting",
            "alert-state",
            "notification",
            "flapping",
            "renotify",
            "state-machine"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "monitor.alert-state-1.0.0.fune",
            "size": 30077,
            "sha256": "9f53e4ae117c8e8b7e9613f83b621d77b32fb2d1ac4450004a95b8d77e1eaa2b",
            "languages": {
              "typescript": {
                "name": "monitor.alert-state-1.0.0-typescript.fune",
                "size": 20288,
                "sha256": "182c96738dd64f692b56bce06f917f19eb074a88c00b4740002244efebd22fb2",
                "integrity": "sha256-c08D5SODDiXSl5XJwqGtEZNWHyIVjKWjcoQCW728RjE="
              },
              "python": {
                "name": "monitor.alert-state-1.0.0-python.fune",
                "size": 20502,
                "sha256": "f88c22cf7c98aa26cd9d691ee308d2364f06cec234a60dd8be592b09c4abc2c4",
                "integrity": "sha256-FHQHYszzLt30W6ceDDs/ERSko0kPLaas1tZCep3W9GM="
              },
              "rust": {
                "name": "monitor.alert-state-1.0.0-rust.fune",
                "size": 22525,
                "sha256": "f8479d38d510efb8ebc0cce9ff3faacf587cb8dda6be203d3342c1068791ba72",
                "integrity": "sha256-tDB4ZxZjm5PDMJIKwe5QZKtl+yCTcxRIRERyN0Ky8Po="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "monitor.anomaly": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-cJNNcWIX1fUf5+umERQr64w2B7eOw2cO/JeD9ID73pw=",
          "summary": "Is a new metric value an outlier against its history? By z-score or by the robust median/MAD modified z-score.",
          "level": 1,
          "tags": [
            "monitoring",
            "anomaly",
            "outlier",
            "z-score",
            "mad",
            "modified-z-score",
            "anomaly-detection",
            "statistics"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "monitor.anomaly-1.0.0.fune",
            "size": 20303,
            "sha256": "e8a9775aeb313d5da72d056bf055ca3a55eb60349a14667fe8ac2521749c8642",
            "languages": {
              "typescript": {
                "name": "monitor.anomaly-1.0.0-typescript.fune",
                "size": 13542,
                "sha256": "867639219a171ccfba57958b43775bde86ee6c47f3e8fe69a72f60b5ff2e34df",
                "integrity": "sha256-m4FzQbR9Vxo9o7rCq8GD1jGX5hCE568GysBD4PKTpLI="
              },
              "python": {
                "name": "monitor.anomaly-1.0.0-python.fune",
                "size": 12974,
                "sha256": "780729b6fdb26ccdcf7f2ecab8be9b05568b1b01c774bd78cc293d9ae55e7ac1",
                "integrity": "sha256-LMJSfebU9Zmvy2OSAQHm9x/+VfAL5VNv/73mA/PGrDg="
              },
              "rust": {
                "name": "monitor.anomaly-1.0.0-rust.fune",
                "size": 14475,
                "sha256": "6f3f286a28f7378d8a9d293ac9e5e4144072ea65b8b6651119326dcb1ed65a47",
                "integrity": "sha256-T+YcLr6EF8kpnZUbE6j8pNy+4ngwAstOTk6KMjKJlyY="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "monitor.burn-rate": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-bt7JtNxSUzpLpBZYhunrugogS89y/rFU9DQRkaXy19Y=",
          "summary": "How fast an SLO's error budget is burning: the error rate as a multiple of the rate the SLO allows, in thousandths.",
          "level": 1,
          "tags": [
            "slo",
            "burn-rate",
            "error-budget",
            "sre",
            "alerting",
            "reliability",
            "monitoring"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "monitor.burn-rate-1.0.0.fune",
            "size": 10928,
            "sha256": "46c18382d46a5017709173ffb79dffb5064f4708ea3cbc5a92acd65d672b4ccc",
            "languages": {
              "typescript": {
                "name": "monitor.burn-rate-1.0.0-typescript.fune",
                "size": 7311,
                "sha256": "c61107b7e9de4df7538226ea98f001f2db2d6c67c213717c1ffaf144f4c4609a",
                "integrity": "sha256-Nl7AfHnUmaiQoDHwfHmjtG5GzZEMZOgrL6rl3Nwd1LY="
              },
              "python": {
                "name": "monitor.burn-rate-1.0.0-python.fune",
                "size": 7265,
                "sha256": "3030b390b51ad3059c0fad29996efbaa90c482d35493ed3c7ce05ec783051808",
                "integrity": "sha256-4wds1dGP4MbZhmyTftk5w37mOFtnJAWNJpOos8CawhI="
              },
              "rust": {
                "name": "monitor.burn-rate-1.0.0-rust.fune",
                "size": 7990,
                "sha256": "16f5ef87b711c2476c85b5e4ee1219a83c64f26bd77068be2bd1ab279bcefade",
                "integrity": "sha256-0DvhLYCLd0ZSwIaND2VHX7/sV4VvKtx97RM3uWxLKLQ="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "monitor.burn-rate-alert": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-9Sqv+26I8fI1E0UNccddFfhoRuCUfiG6KuYVkTANjzA=",
          "summary": "Multiwindow, multi-burn-rate SLO alerting: which rules fire, from event counts per window (Google SRE workbook).",
          "level": 2,
          "tags": [
            "slo",
            "burn-rate",
            "alerting",
            "error-budget",
            "sre",
            "multiwindow",
            "paging",
            "monitoring"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "monitor.burn-rate": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/sre-workbook.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "monitor.burn-rate-alert-1.0.0.fune",
            "size": 36710,
            "sha256": "cb79d96eae45df07f1b3036b2566d85833b6bb124aef7b4581d67c7b86abf29b",
            "languages": {
              "typescript": {
                "name": "monitor.burn-rate-alert-1.0.0-typescript.fune",
                "size": 25871,
                "sha256": "08bd1d7eafcabe9ad216699059c900783be1585395aab3b362562ca7da8327a5",
                "integrity": "sha256-lTM8FCN42L+sUhNcVx4C6TEc/o67T7/vXOAkbM2O/PI="
              },
              "python": {
                "name": "monitor.burn-rate-alert-1.0.0-python.fune",
                "size": 26247,
                "sha256": "fcd2677dbffb4cc3de0452c38f5516474e179d4f68db950a3ba1293f58f33660",
                "integrity": "sha256-U3qMKjTNeMPFVbMmCbbO5ykU2v4ABwk/840yfcwI1Ys="
              },
              "rust": {
                "name": "monitor.burn-rate-alert-1.0.0-rust.fune",
                "size": 28190,
                "sha256": "0011991bfa4a7bf0de8daf5959636d795381c6e20949f99a0a01f73c50982888",
                "integrity": "sha256-b7m8u+y6BNCWm9E2hD0FFTXZEj572JQJ52bej6O7t/M="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.1.0": {
          "integrity": "sha256-ldVTyjSVAf6MLKjlIf+drvNym8TsA5ejLPsBk8R/uEU=",
          "summary": "Multiwindow, multi-burn-rate SLO alerting: which rules fire, from event counts per window (Google SRE workbook).",
          "level": 2,
          "tags": [
            "slo",
            "burn-rate",
            "alerting",
            "error-budget",
            "sre",
            "multiwindow",
            "paging",
            "monitoring"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "monitor.burn-rate": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/sre-workbook.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "monitor.burn-rate-alert-1.1.0.fune",
            "size": 49922,
            "sha256": "70eda3d5b7fa1576c85af323ee95d2ea9d724bbc8a4696e90ba396ba7854142c",
            "languages": {
              "typescript": {
                "name": "monitor.burn-rate-alert-1.1.0-typescript.fune",
                "size": 36884,
                "sha256": "211f451ba46d7629f246e3dfab38359b34977f995d7162a7d7941f08741cf9ea",
                "integrity": "sha256-OsX2Dx8n56IYSLXeY5OUg7h44efpyeynOcifeVWo1bI="
              },
              "python": {
                "name": "monitor.burn-rate-alert-1.1.0-python.fune",
                "size": 37281,
                "sha256": "fd923e2a521aa28db6dbea817e54bc230602f016b1876e647bab7063829a7c8d",
                "integrity": "sha256-hLhMwXfNsW4akxArZmuRjp+VOkdEYyeAKuVJRY04mJ8="
              },
              "rust": {
                "name": "monitor.burn-rate-alert-1.1.0-rust.fune",
                "size": 40123,
                "sha256": "b122e94ff65ae0ac5df1ac367232f77dd4c21d69c3c6f94416d4e8cbc2343609",
                "integrity": "sha256-eiQoJEhZjECqQTRUyDe1/uJYJboqnn8Q4O1f7JgZ8pk="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "2.0.0": {
          "integrity": "sha256-9FjatvwErZJCoyAgs/+bmWq8RCn1mJV8C9PXFqk96lY=",
          "summary": "Multiwindow, multi-burn-rate SLO alerting: which rules fire, from event counts per window (Google SRE workbook).",
          "level": 2,
          "tags": [
            "slo",
            "burn-rate",
            "alerting",
            "error-budget",
            "sre",
            "multiwindow",
            "paging",
            "monitoring"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "monitor.burn-rate": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/sre-workbook.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "monitor.burn-rate-alert-2.0.0.fune",
            "size": 49170,
            "sha256": "f929270cee119def2ed9395259cd3c8fa3fe53c7ab9b4d545e38f800cb445206",
            "languages": {
              "typescript": {
                "name": "monitor.burn-rate-alert-2.0.0-typescript.fune",
                "size": 36610,
                "sha256": "1bc2030e7c7e3db7035b4a6cc8f84bd6bfdb0cc566e922f83676b9c93dd0a51d",
                "integrity": "sha256-dHg3IAsB3mBI9lpgVQtDSAMNZz5umxKWWyi1XgmSqTA="
              },
              "python": {
                "name": "monitor.burn-rate-alert-2.0.0-python.fune",
                "size": 37007,
                "sha256": "aeb140c3d47f35ab42ce321fa11aeb3c2b4c0b36e8f64ecb2911476553bb85d7",
                "integrity": "sha256-sg70LFOFjql1zFQKQccGAr3L8IWhWB4YGfU1KNV2eeQ="
              },
              "rust": {
                "name": "monitor.burn-rate-alert-2.0.0-rust.fune",
                "size": 39385,
                "sha256": "1262534b4420ef97833fa2977ef1011706e7db992fbbe30cf7d9143cec264318",
                "integrity": "sha256-jJUkx6rIddGN5BPbsg3OjWVa070U5jrBU2jGX101+f0="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "monitor.cert-check": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-H/9+aN/V+y6mIqBX0LCHw5/xW9CyfLuPEFP4v49pE20=",
          "summary": "A TLS certificate's expiry state as a check status: ok and warning are up, critical is degraded, expired is down.",
          "level": 1,
          "tags": [
            "monitoring",
            "tls",
            "ssl",
            "certificate",
            "expiry",
            "check-status",
            "status-page"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "monitor.cert-expiry": "^1.0.0",
            "monitor.check-status": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "monitor.cert-check-1.0.0.fune",
            "size": 6468,
            "sha256": "dbf9c93a2ae200b76eadfcdfa274794e15dcf5cea51fecec6eb708774fc6879e",
            "languages": {
              "typescript": {
                "name": "monitor.cert-check-1.0.0-typescript.fune",
                "size": 4954,
                "sha256": "125c8b1e24e86f5a8b55e7b0e7f76bcf9719a393781e11e2a12152e884766bfc",
                "integrity": "sha256-leBiSBlndm9BNUSmfNLvqbdQQ/n6l1jKtYVmXGA36W0="
              },
              "python": {
                "name": "monitor.cert-check-1.0.0-python.fune",
                "size": 4818,
                "sha256": "533035832a51183aff187e44082804857f7e330789c7de2a278502c6862582b7",
                "integrity": "sha256-/KCN12Y+Cwtw2dur4J6b7LioykoeSsxoF1tdxaclSdo="
              },
              "rust": {
                "name": "monitor.cert-check-1.0.0-rust.fune",
                "size": 4896,
                "sha256": "0407ae3e38eb3ba5d160a9394d14a513fd9bce6a45c7d74e8a04fb4d6d01f5f1",
                "integrity": "sha256-TBAM8cjrdVMvhNR0IDDL8PbcYhI6BGNaB8UNKixsgU0="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "monitor.cert-expiry": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-sFt/I9PwOM26UCI8PCC1qvgiWBA3xslNSH4dNrQJIXc=",
          "summary": "How long a TLS certificate has left before its notAfter, and whether that is ok, a warning, critical or expired.",
          "level": 0,
          "tags": [
            "monitoring",
            "tls",
            "ssl",
            "certificate",
            "expiry",
            "x509",
            "renewal"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "monitor.cert-expiry-1.0.0.fune",
            "size": 12501,
            "sha256": "292a46615a892497895595a25acb9d91861d2afa190688786e5cd8eca8dd9720",
            "languages": {
              "typescript": {
                "name": "monitor.cert-expiry-1.0.0-typescript.fune",
                "size": 8541,
                "sha256": "5c9802c7bb205340a44c1e1be4bd01d7a1bb1616e20a44eee467f1e24af8079e",
                "integrity": "sha256-4w7nDZEHvWEOJ7JJOQY5ST8finfXLhZGZdy2Dei10A4="
              },
              "python": {
                "name": "monitor.cert-expiry-1.0.0-python.fune",
                "size": 8667,
                "sha256": "d0889e3d4ac3f6e1cb6e69ab5ade6a1bfc7affb33b441003870c81555f668d25",
                "integrity": "sha256-a5PiQHhxHPak1jSgt8g6wADO+4+XG2GJ3ChFwtiiPOc="
              },
              "rust": {
                "name": "monitor.cert-expiry-1.0.0-rust.fune",
                "size": 9587,
                "sha256": "a901b93ca48f0b6ff27e4404e6484cae6c65f1d4a5582e654ac0963b71dee621",
                "integrity": "sha256-Ejm2jBjKUw4q697tHCdWOgTroxn2m8wikUF8mq58ZXc="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "monitor.check-status": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-QDYEGp5SKvkQORlSxnVac0DjNfR0tUVEXPPjlurl8vA=",
          "summary": "Combine the statuses of one target's probes from several locations into one up, degraded or down, with a quorum.",
          "level": 0,
          "tags": [
            "monitoring",
            "status",
            "up",
            "down",
            "degraded",
            "quorum",
            "multi-location",
            "health-check"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "monitor.check-status-1.0.0.fune",
            "size": 9013,
            "sha256": "be76e5bc993feafeee52850214d86b9e76091db0f91f029ed87fadc0576185ff",
            "languages": {
              "typescript": {
                "name": "monitor.check-status-1.0.0-typescript.fune",
                "size": 6019,
                "sha256": "e8115037b5d0544a24fbdc7b584b932fcc2d2428c29ccc96ff8291bf31e22c02",
                "integrity": "sha256-pcpNQdcOAxUag6XC1fqOpygXfnS112AT7QylgmcvTk8="
              },
              "python": {
                "name": "monitor.check-status-1.0.0-python.fune",
                "size": 6081,
                "sha256": "547fb55595aeccbdeb230c4be277475557eb974f3bc3c8888ebba312a598f98c",
                "integrity": "sha256-KCihFAQSH6ajOdPQKicT5am9rmjLf2Jg5ZWMTYCpZAk="
              },
              "rust": {
                "name": "monitor.check-status-1.0.0-rust.fune",
                "size": 6803,
                "sha256": "17876ab49c43bcbf087e2d2995194e38db955392f747df039f418e41758a8180",
                "integrity": "sha256-/l7yFpohJ+I3LQZdHQ9VQB4CGLGQ2C2yXigDLnDGNAI="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "monitor.component-state": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-Y1aEdM/pcVFsX8JEc7w6ybSSObFYLPhZ9tdTRm/3x60=",
          "summary": "A status page component's state from its checks: operational, degraded, partial or major outage, or maintenance.",
          "level": 1,
          "tags": [
            "monitoring",
            "status-page",
            "component",
            "outage",
            "maintenance",
            "statuspage"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "monitor.check-status": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "monitor.component-state-1.0.0.fune",
            "size": 9719,
            "sha256": "cffd933922c240ddf102b7ac117550f261e261ec98c4c1781338eee2a23942d6",
            "languages": {
              "typescript": {
                "name": "monitor.component-state-1.0.0-typescript.fune",
                "size": 7041,
                "sha256": "9d7e3c24592355399fbc8cbf7af4dde6f8f8394868dc119a882992d0d347f28b",
                "integrity": "sha256-iSr8J5srzJPu7uRduYdhab7gF36D9v81hJPIfvSBalA="
              },
              "python": {
                "name": "monitor.component-state-1.0.0-python.fune",
                "size": 7070,
                "sha256": "9054b8e035654245e3c5279c6332e6b32dd9fd033b6ca248b4511d9905c73d84",
                "integrity": "sha256-h5AanCC0CSWlWCPZ/TRhMzrXgRIpwM/oVO8L8bZ7mRQ="
              },
              "rust": {
                "name": "monitor.component-state-1.0.0-rust.fune",
                "size": 7362,
                "sha256": "d619cc06508b9447afb63eb90223882db719fe2b64257d55e08a12546bb9476a",
                "integrity": "sha256-Ts8vXLP3FeRZqIZCLDN06zTr79T0njE2uDjWlLz9E0o="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "monitor.counter-increase": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-+b/GhBOJFi5I3bD8k1WZYCzqDVAAC9mIbXneAjcqOFg=",
          "summary": "How much a monotonic counter grew over a series of samples, counting restarts from zero, and its rate per second.",
          "level": 1,
          "tags": [
            "monitoring",
            "counter",
            "increase",
            "rate",
            "resets",
            "prometheus",
            "metrics",
            "throughput"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "monitor.series-window": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "monitor.counter-increase-1.0.0.fune",
            "size": 13697,
            "sha256": "72a41bbe93f4216ce749d9f7e52d04f91f95f6126064253f5328ac742ca6b10a",
            "languages": {
              "typescript": {
                "name": "monitor.counter-increase-1.0.0-typescript.fune",
                "size": 9734,
                "sha256": "2679de3fac5e36d656c009c82e84be3115a259d6e6b4323b601f2ba956b4f6ab",
                "integrity": "sha256-XZjnK//qfdQRW3N2d4EJD5Wjoy1Et/Hfc5WQywLeNh0="
              },
              "python": {
                "name": "monitor.counter-increase-1.0.0-python.fune",
                "size": 9618,
                "sha256": "2ce2a7ddaab202e181f382949573136ede82723b15a250e5edeb33cdc4a2436b",
                "integrity": "sha256-BEhLdyNZWHtgJ1WdZ2EH7iJzM72rr/B7M0Tl4yi1iww="
              },
              "rust": {
                "name": "monitor.counter-increase-1.0.0-rust.fune",
                "size": 10481,
                "sha256": "ff71b8df17e63bc457a0bc728af9ddc550ac83f0af6d0ba76a556c4f4f3d160a",
                "integrity": "sha256-+OgaHzHTsjXWHhDzR2GkRwY51ObVGTF1q+YDQtx9Shw="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "monitor.error-budget": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-aktZnb2DBt9uETN0wSBot82yJAHkhIwKzNCIoB37F0s=",
          "summary": "How much of an SLO's error budget is allowed, used and left, from good and bad event counts or seconds.",
          "level": 1,
          "tags": [
            "slo",
            "error-budget",
            "sre",
            "reliability",
            "availability",
            "monitoring",
            "sla"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "monitor.error-budget-1.0.0.fune",
            "size": 16523,
            "sha256": "0895adf982e895f32250a3b40eac437e9a220efbad181a65b878c3c16c09fc1b",
            "languages": {
              "typescript": {
                "name": "monitor.error-budget-1.0.0-typescript.fune",
                "size": 11373,
                "sha256": "5ba06311405cacfe7e5851f1593203ffbbd8d48606df70b82f022add22f3e1c2",
                "integrity": "sha256-Ev983pv9LR+9uiyEmu1xwRiFlb9tGQxjkM2ffZVHhsk="
              },
              "python": {
                "name": "monitor.error-budget-1.0.0-python.fune",
                "size": 11312,
                "sha256": "5167ae05986b13e5b8cf584bce7d8ebdb437541fb1345b5a8c68e4fa8d2ba381",
                "integrity": "sha256-+JYIyaCjiVSR2tn6lLA6aN54veALUviHIFrgJJ0TMJ4="
              },
              "rust": {
                "name": "monitor.error-budget-1.0.0-rust.fune",
                "size": 12372,
                "sha256": "07b8f0064595937b59dc4055feddd38d65e78c575c9c0eadcee8f2c167f9a0ab",
                "integrity": "sha256-LemsErNvJxX0ciAVBKsvshQ9eYRSDT/cytqFG4nRBNU="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "monitor.format-duration": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-fqwIQCbT5JZIFwYQ4xkA+Z17EX0wPb+/ra8onBvIBOs=",
          "summary": "A number of seconds as a short human duration for dashboards and alerts: \"3h 12m\", \"2d 4h\", \"45s\".",
          "level": 0,
          "tags": [
            "duration",
            "format",
            "humanize",
            "elapsed",
            "uptime",
            "downtime",
            "time-ago"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "monitor.format-duration-1.0.0.fune",
            "size": 9390,
            "sha256": "44f871f699d6fea3ca40422a12abc585030b3392315c13e5dd4c90297fe0841f",
            "languages": {
              "typescript": {
                "name": "monitor.format-duration-1.0.0-typescript.fune",
                "size": 6012,
                "sha256": "62be196ee2ed832b8593bdf8d7f318b01f7eb33c1669a95c04c4bac3deca19ab",
                "integrity": "sha256-TqA6v1w4wWXSd7ktmHE61+OuQsxSmAZbi9xw6ImGVpE="
              },
              "python": {
                "name": "monitor.format-duration-1.0.0-python.fune",
                "size": 6022,
                "sha256": "0d70d415c1c29e1bf0f38789f64f5e43e066d06f56162fbefa3cb2c49cc57298",
                "integrity": "sha256-doE4hNkFxf8MT4HZMshrq0cHQefwbywJsykfZmQrjpU="
              },
              "rust": {
                "name": "monitor.format-duration-1.0.0-rust.fune",
                "size": 6550,
                "sha256": "35a482ebf47fa88ef0e73d3139561f6096ec3338b025dd0518bdce701d463eff",
                "integrity": "sha256-JHhoPz4yVTUo+EVS9KKImZxASpTnI8CeCpZm8MAXsYw="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "monitor.heartbeat": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-WGbkg79tEdaa2A2v2EQExK72pqbVOCMx0Jt0g0+5VrE=",
          "summary": "Whether a cron job that pings on a schedule is new, up, late or down, from its last ping, period and grace time.",
          "level": 0,
          "tags": [
            "monitoring",
            "heartbeat",
            "cron",
            "dead-mans-switch",
            "healthcheck",
            "ping",
            "grace-period"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "monitor.heartbeat-1.0.0.fune",
            "size": 12774,
            "sha256": "670066e850a8ae45f319f6644290afddae8eaec2c718edba53e6b8a7a51a80f3",
            "languages": {
              "typescript": {
                "name": "monitor.heartbeat-1.0.0-typescript.fune",
                "size": 8726,
                "sha256": "c8b5ab5359a8c5a0502f70256e2fa8666afee12ccc53987d08bd372fc1588a61",
                "integrity": "sha256-kYPyWC2zjIxrC5FhoPQnE44bT7ycRB0+eW7HXUxfsVc="
              },
              "python": {
                "name": "monitor.heartbeat-1.0.0-python.fune",
                "size": 8888,
                "sha256": "751080eedc6f5722756d17e8ca7418867c2e4fe0710df6dc9cc236e202e41c98",
                "integrity": "sha256-K9g4vmTLgCVwvZjkXFmy8F8Eka3c9q804m+zpEb3eIE="
              },
              "rust": {
                "name": "monitor.heartbeat-1.0.0-rust.fune",
                "size": 9692,
                "sha256": "6a88bd28659d524a06c4fb15613ecea0c3b259aa607f10b91a0f576718288cc6",
                "integrity": "sha256-PrbglHjeh+O1viFQGWTBwVolJNuQuJpZ6QVadOL2FxI="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "monitor.heartbeat-check": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-shGPbx8L87oo2uvFkfRUnfV6Fiyy7Ptii2QyGQegj48=",
          "summary": "A heartbeat's state as a check status for a status page: up, late as degraded, down as down, new as nothing yet.",
          "level": 1,
          "tags": [
            "monitoring",
            "heartbeat",
            "cron",
            "status-page",
            "check-status",
            "dead-mans-switch"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "monitor.heartbeat": "^1.0.0",
            "monitor.check-status": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "monitor.heartbeat-check-1.0.0.fune",
            "size": 6589,
            "sha256": "ba92e30f23d19bb08606233144125bb805f847790f3973b11d15a465ee2381f9",
            "languages": {
              "typescript": {
                "name": "monitor.heartbeat-check-1.0.0-typescript.fune",
                "size": 4921,
                "sha256": "6dde2997440b4777371067211386b79adac0e1a2767248c3c1794b8e54a8d0ac",
                "integrity": "sha256-6TmWwpPoZRQAHJI8twD0N0AYDP/0up8L3VYqVxtd3io="
              },
              "python": {
                "name": "monitor.heartbeat-check-1.0.0-python.fune",
                "size": 4823,
                "sha256": "604c125dd09288ed9f1c7618271d3cf5c8de65e85d5f6334f5dcd00a751840d8",
                "integrity": "sha256-kbUyYU7/M+6NmLaZW59z16Wrrn58vfssV2sGjV0wJBc="
              },
              "rust": {
                "name": "monitor.heartbeat-check-1.0.0-rust.fune",
                "size": 4947,
                "sha256": "0e88d36ebbc877686ae9d80caeae62f6be6ef43fd71632b5e5cd9cf96436e197",
                "integrity": "sha256-o2Vhl+AD9pBXKr/Bsz65Y0fzHzLLqHMWXzjMNOfCH8s="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "monitor.http-check-result": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-ATQRAXgof4IIt1Jadzvemb0raiWPzOv1SyU6OyQ/7oc=",
          "summary": "Classify one HTTP probe as up, degraded or down, with a reason and message, from status, body and latency.",
          "level": 1,
          "tags": [
            "monitoring",
            "http",
            "uptime",
            "health-check",
            "synthetic",
            "probe",
            "status-code",
            "latency"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "monitor.check-status": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "monitor.http-check-result-1.0.0.fune",
            "size": 35051,
            "sha256": "86ccd509db6060458338a7b87a7c3b2049f7bbd1758e551bb3411a8dbea3b456",
            "languages": {
              "typescript": {
                "name": "monitor.http-check-result-1.0.0-typescript.fune",
                "size": 24449,
                "sha256": "8d886555b5f7e7f1a0408d51170372a663b78971c5b8e9ab305276e1eab8799f",
                "integrity": "sha256-uOx24i9WZ/D1z6iOuYSmHaxW7WmrSHIgXR02jqiPJ2E="
              },
              "python": {
                "name": "monitor.http-check-result-1.0.0-python.fune",
                "size": 24816,
                "sha256": "3ff0edc00ff1a04461b3e2b2dec7d71819d944159a5814b8267e257bafa60f2f",
                "integrity": "sha256-vZq/FHjraWnREwE2G1gdoc8zJlZTi6D85pns/UJZDHs="
              },
              "rust": {
                "name": "monitor.http-check-result-1.0.0-rust.fune",
                "size": 27362,
                "sha256": "ebac4f9f4e9f82d06781b0ac08bb7f083f11cf4ef10e1200567350d11dd76f80",
                "integrity": "sha256-D460nF/YmOCHzpc2dx7igjo2sfta8eVMxRxTz3eOib8="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "monitor.incidents": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-KjGJob6Yhm9IKE0WBt/RIBKg1Wl1F3+FjAfqWsW+HBU=",
          "summary": "Turn a series of up, degraded and down checks into incidents, ignoring runs too short to confirm.",
          "level": 1,
          "tags": [
            "monitoring",
            "incidents",
            "outage",
            "downtime",
            "flapping",
            "uptime"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "monitor.check-status": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "monitor.incidents-1.0.0.fune",
            "size": 19417,
            "sha256": "4664c6be7bf3e0139623ab73f3d74becc8b401bdee0de17e21fa7824a05124a8",
            "languages": {
              "typescript": {
                "name": "monitor.incidents-1.0.0-typescript.fune",
                "size": 12977,
                "sha256": "33c6fdc3c53956ae65a76e5bcd34d92e8b3ebd7087d50a833c3ae714266b89e5",
                "integrity": "sha256-UuMtt1VYccG359JLPlbVCVIL/plN1PNYiZrvbG/NYa8="
              },
              "python": {
                "name": "monitor.incidents-1.0.0-python.fune",
                "size": 13004,
                "sha256": "48c8c6176e4807c0daa932c77cba61313bf325df6cc9d8e257747bd6b7e2ee2e",
                "integrity": "sha256-6H+Eli4Py6cNsxN45F/9fMstPRriuV8hule9OnhgBf0="
              },
              "rust": {
                "name": "monitor.incidents-1.0.0-rust.fune",
                "size": 14692,
                "sha256": "d27245738d70b5b92998a838b51cc595caebf2c6d5fcb4969b13de93fff27546",
                "integrity": "sha256-Aybbxcphx2p96mWPS+NLZUWtrtSSQdZuBnoJ0UU9Acs="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "monitor.maintenance-window": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-XSj1Qev/+oAx4SRsWyO3kvXcJbh1FSm1sfy+FCXf6Ks=",
          "summary": "The scheduled maintenance window in force at a moment, if any, so alerts and uptime can be suppressed during it.",
          "level": 0,
          "tags": [
            "monitoring",
            "maintenance",
            "downtime",
            "schedule",
            "suppress",
            "alerting",
            "status-page"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "monitor.maintenance-window-1.0.0.fune",
            "size": 10867,
            "sha256": "2be593f1b02aa7c8f811132adb9151be5f7527287fc2fb9fb90100f77531e111",
            "languages": {
              "typescript": {
                "name": "monitor.maintenance-window-1.0.0-typescript.fune",
                "size": 7295,
                "sha256": "f8c1049fd7157ac3846267aea2b5511256ff1ac24dd1050f80ed7d6c952e13a1",
                "integrity": "sha256-wZQHVC8Mtkb9GfXrT1wIH3/JwZQXCiy14igsvXnWiWY="
              },
              "python": {
                "name": "monitor.maintenance-window-1.0.0-python.fune",
                "size": 7344,
                "sha256": "ebb3135c38b770645e77471dd6ab473e4a704d1d9f6b2be950fdcb3424e3cfae",
                "integrity": "sha256-CWkOyfB0bWnVGj4KpV3QneZjSBUY59jFwfTc7OIANQ8="
              },
              "rust": {
                "name": "monitor.maintenance-window-1.0.0-rust.fune",
                "size": 8446,
                "sha256": "dee8d313e61683c750a2cb5ed9288bcc886a94d5635621c97654ff610b7c6de8",
                "integrity": "sha256-25Dp8Dea5UsQGMKi3aOtisrA1DEZ0E+X79aCPtCTfUo="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "monitor.mttr": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-NjxrD54US6WCQ48rE2gGMolXrN12I4Lib4b9wWZV0W8=",
          "summary": "MTTR, MTBF, downtime and incident counts for a reporting window, from a list of incidents.",
          "level": 2,
          "tags": [
            "monitoring",
            "mttr",
            "mtbf",
            "reliability",
            "incidents",
            "downtime",
            "sre"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.round-div": "^1.0.0",
            "monitor.incidents": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "monitor.mttr-1.0.0.fune",
            "size": 19550,
            "sha256": "fe08b30003860518cf3c9e0a257ccace1a5bb8d6a2ae4249d93cc26e353eea9d",
            "languages": {
              "typescript": {
                "name": "monitor.mttr-1.0.0-typescript.fune",
                "size": 13563,
                "sha256": "e7568bf04391096e39a28d0f016e500cd57e9f2deabd8eda7ad02143f9bd6949",
                "integrity": "sha256-dHOJMVFfFazGiodVYw2TZnlI7mwBshh8sSYKR+JczwY="
              },
              "python": {
                "name": "monitor.mttr-1.0.0-python.fune",
                "size": 13674,
                "sha256": "8c9f593c13a33fea1cc6e66aacbb4e3f21e2c7c7fb19438c5e09f9bbb6a6cbe8",
                "integrity": "sha256-BaBmi2wZ+1RGM7sCHhna+VHnuOaDJALPFDRh6mnSwC4="
              },
              "rust": {
                "name": "monitor.mttr-1.0.0-rust.fune",
                "size": 14597,
                "sha256": "3e43c456d0a006755a1de53a9e08497935633c677c773f117790629ab691b633",
                "integrity": "sha256-TsBBHkXqFxZpb7ZtryslqJDjoFKyvsn/FqDWP2M87ic="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "monitor.parse-access-log": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-6nzrPyGOF9m2aSlr4+FHHXrI3z4XQLDj3xZxAr2Hgvk=",
          "summary": "Parse one Apache/NCSA Common or Combined Log Format access log line; null for a line in neither format.",
          "level": 1,
          "tags": [
            "access-log",
            "apache",
            "nginx",
            "combined-log-format",
            "clf",
            "log-parsing",
            "http",
            "monitoring"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "time.iso-to-unix": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "monitor.parse-access-log-1.0.0.fune",
            "size": 30251,
            "sha256": "5b2da1cd322e4f8cba9f69c62260dedb034c0c0fafa5c19b429c094b3dfe194d",
            "languages": {
              "typescript": {
                "name": "monitor.parse-access-log-1.0.0-typescript.fune",
                "size": 17798,
                "sha256": "7fe3f775a6afa759d27cf1f469f77e130b2c71cef3312e479236020202956021",
                "integrity": "sha256-qVCmQXAEu9XCI8yn2YJo8wOShsYSnF4DUfqITGcWLEg="
              },
              "python": {
                "name": "monitor.parse-access-log-1.0.0-python.fune",
                "size": 18060,
                "sha256": "ed516504155b5396748513f7c683c6997c2b82911d7852b030f26579d053e6a2",
                "integrity": "sha256-VyQN8tLIe152NRJljiVWlkfvjwVo5USdhGUNMd7f79A="
              },
              "rust": {
                "name": "monitor.parse-access-log-1.0.0-rust.fune",
                "size": 19521,
                "sha256": "6f95f7443a66071e955e638578c7ad729c29c539234d7cd23473aadfffd67a8a",
                "integrity": "sha256-ce1EjkQokddsj1G9VawR8YFFpQK3B/noYsuag7YsS8k="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "monitor.rollup": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-zt5sYHn5lgPxXA3P33wdAhEMjIeCFFE2Yfhlgtxh5h0=",
          "summary": "Aggregate a metric series into fixed time buckets (count, min, max, avg, sum, last), empty buckets included.",
          "level": 1,
          "tags": [
            "monitoring",
            "rollup",
            "aggregate",
            "bucket",
            "downsample",
            "time-series",
            "metrics",
            "resample"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.round-div": "^1.0.0",
            "monitor.series-window": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "monitor.rollup-1.0.0.fune",
            "size": 15684,
            "sha256": "24f1815aeec79e93ba09881a92cd6a2eea649de96822ffbc1de2eda986c78e0c",
            "languages": {
              "typescript": {
                "name": "monitor.rollup-1.0.0-typescript.fune",
                "size": 11047,
                "sha256": "824bdda3a3cfb8dee1d44966fc5f9ca4cb03b724f8d2f7a20d8157b9c3b3a8ef",
                "integrity": "sha256-ir3D399qyIsr4nJ+gfI8N7mmKfmUmEdKSMUn1jPcdj4="
              },
              "python": {
                "name": "monitor.rollup-1.0.0-python.fune",
                "size": 11112,
                "sha256": "e2416e82c87aca1933acd3aa4990e450809616e8830cf2f715cbdf924c671851",
                "integrity": "sha256-q3Q6AFDT+9bKwhF8iqakI3flLc3DAAaZERkbs5t0BKA="
              },
              "rust": {
                "name": "monitor.rollup-1.0.0-rust.fune",
                "size": 12197,
                "sha256": "5e3034c15fec251583abde5133f6da417dec1234c87cb651ff0ed841748861a6",
                "integrity": "sha256-j3HNSTcldMP+yt/aUqeAVLc329EpQuGzoyF4obsEr48="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "monitor.series-window": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-brcwmb7YymR39VDT+9uVunVRnrKuvZDFpWFBLjpDwc8=",
          "summary": "The samples of a time series from one moment up to (not including) another, checking they are in time order.",
          "level": 0,
          "tags": [
            "monitoring",
            "time-series",
            "metrics",
            "samples",
            "window",
            "range",
            "slice",
            "filter"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "monitor.series-window-1.0.0.fune",
            "size": 9491,
            "sha256": "b34498a4d87e3c9ae6c5bb56c9a194952205a5cd37f465b3e3485541c6053dca",
            "languages": {
              "typescript": {
                "name": "monitor.series-window-1.0.0-typescript.fune",
                "size": 6481,
                "sha256": "4aab809e6e9e39a139b11262e36db29077dd3e41ffe2f8a98495bc60d1b6f487",
                "integrity": "sha256-qmQqdhnX03CME82v3jeq8rwmChVXo5QHIc/LnqCUCh4="
              },
              "python": {
                "name": "monitor.series-window-1.0.0-python.fune",
                "size": 6476,
                "sha256": "b36ea87763e9bc13eb345b4b980c8400e693154ae149448c94d33d0e4d0d1c77",
                "integrity": "sha256-u2QmZOkRYPDSFRkFEFSnIi+0FPinbE3aspx8deHxxN8="
              },
              "rust": {
                "name": "monitor.series-window-1.0.0-rust.fune",
                "size": 7240,
                "sha256": "9af7cec82dc0e2a089fd18b9dc6309b01a6623029652eae5f85a233f71c66b66",
                "integrity": "sha256-8MOs3EyGXsddL7pcmbVuC0M+X0yHh0SC5jmR90l7Rd8="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "monitor.status-code-summary": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-d6W+QWxKtuJ0IPefgatFpZWk1v4ZiuvYqUSREnjnGho=",
          "summary": "Count HTTP status codes by class (1xx to 5xx) and give the server error and client error rates in basis points.",
          "level": 1,
          "tags": [
            "monitoring",
            "http",
            "status-code",
            "error-rate",
            "5xx",
            "4xx",
            "access-log"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "monitor.status-code-summary-1.0.0.fune",
            "size": 11312,
            "sha256": "e27fd5dc4c4c4687f89e92d503e9fed8929a4049f125a06aa3acb874a2e6fa0c",
            "languages": {
              "typescript": {
                "name": "monitor.status-code-summary-1.0.0-typescript.fune",
                "size": 8111,
                "sha256": "f7f2206e7308e30e37be4acc42ad53af18935d05a96af191960a8beb41e8fd25",
                "integrity": "sha256-uEemT0Ruq4w+w0DJYJ0+Os5/0v85+oQ+K6elMnNKAKs="
              },
              "python": {
                "name": "monitor.status-code-summary-1.0.0-python.fune",
                "size": 8185,
                "sha256": "e6c89c8e414172da26476053a36360dc8d5435cc3a11389cc13796a9823ad407",
                "integrity": "sha256-iGrzXZ8UzL7dwfsupjkv3PhSrxyV2uq21baKOj9PYzg="
              },
              "rust": {
                "name": "monitor.status-code-summary-1.0.0-rust.fune",
                "size": 9000,
                "sha256": "048e792a0c9b54c9878922bf9c62037584a9fae35af95c127d5ea51e0e97bd07",
                "integrity": "sha256-GdLwNIWSDJM61FGXeiMbvaDewyOEvjgPW7ocPQi2p+E="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "monitor.status-page": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-mXg1Ien0v9VLzZFewphq+lZLZ75CNjcOS4h0koSvMkk=",
          "summary": "The overall state, headline and affected components at the top of a status page, from each component's state.",
          "level": 2,
          "tags": [
            "monitoring",
            "status-page",
            "summary",
            "outage",
            "incident",
            "statuspage"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "monitor.component-state": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "monitor.status-page-1.0.0.fune",
            "size": 13298,
            "sha256": "d9db4b93cf50e564dd970817a68ff904dff2740c164187a2bb320660670351ae",
            "languages": {
              "typescript": {
                "name": "monitor.status-page-1.0.0-typescript.fune",
                "size": 9387,
                "sha256": "1a99cee4fcd6b50e281fb9342c1d851203987bf7ee0959f372454e3f600cfb15",
                "integrity": "sha256-4n3BN+0Fj0sxypHNX/F9kLXI0hXVSGdqnxLEPMGpDbg="
              },
              "python": {
                "name": "monitor.status-page-1.0.0-python.fune",
                "size": 9321,
                "sha256": "a14a314ca5fbb95a4ca7762dd3c176575610a680e54e40c48db90a149c63ff09",
                "integrity": "sha256-iEgaxmurU5bHXp56eQLVpPtbPvCZ0hko9TNUfufvKHM="
              },
              "rust": {
                "name": "monitor.status-page-1.0.0-rust.fune",
                "size": 10202,
                "sha256": "1259ebe42006600f1798865c5742128c882983d2b844cf8486e974ce5c856e42",
                "integrity": "sha256-6lZGIsU7dhsWovxnYSx/r5JPDFNFROx876Xi2zhuM6c="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "monitor.uptime": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-82egBGkUbrz45UqqEmFwf2dZIa3ed6ScORxrWXHkgMY=",
          "summary": "Time-weighted uptime of a target over a window from its checks, with gaps longer than a limit counted as unknown.",
          "level": 1,
          "tags": [
            "monitoring",
            "uptime",
            "availability",
            "sla",
            "downtime",
            "health-check"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "monitor.check-status": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "monitor.uptime-1.0.0.fune",
            "size": 19320,
            "sha256": "915fa80bdd33c7db5b73f1a098649af886ed65ae0cf1e4c06518d7c974a4e134",
            "languages": {
              "typescript": {
                "name": "monitor.uptime-1.0.0-typescript.fune",
                "size": 13255,
                "sha256": "92eaffd4612ec2516e0ac1e59742c2762a2ade6ea354e0c2c26640d14ad568cd",
                "integrity": "sha256-Tg9sHh96H/NUwyB3P4DOVS2Be2Rsz/b3ZYmmcBW4RTc="
              },
              "python": {
                "name": "monitor.uptime-1.0.0-python.fune",
                "size": 13256,
                "sha256": "c694afe8da68a7eb6010642a6f66c36451176713c7e3542f7cc7c5bd4528bf4d",
                "integrity": "sha256-1BGEB0YKLI/F958ybVr0TvBGTTBuTwZnsfpM8nUBQOQ="
              },
              "rust": {
                "name": "monitor.uptime-1.0.0-rust.fune",
                "size": 14489,
                "sha256": "daa326f54cefc0bd1a02212d8b58eb1cd4d385dc37f6da276b76abe888ca7899",
                "integrity": "sha256-1p5uEBS1o5pwYOe/YkI7hyVKVtx/sxITfZjNbSpWM70="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "monitor.uptime-bars": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-PuW1TfcTPMGTUhgdD5K93v1+awwCcVq/0ikW66o5enI=",
          "summary": "One bar per UTC day for a status page's uptime history: seconds in each state, uptime and a colour state, oldest first.",
          "level": 2,
          "tags": [
            "monitoring",
            "uptime",
            "status-page",
            "history",
            "daily",
            "availability"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "monitor.uptime": "^1.0.0",
            "time.unix-to-iso": "^1.0.0",
            "monitor.check-status": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "monitor.uptime-bars-1.0.0.fune",
            "size": 17393,
            "sha256": "acd1ac7feb44a8df71bcace52d4de9ffefbaaa76498627388340399962540227",
            "languages": {
              "typescript": {
                "name": "monitor.uptime-bars-1.0.0-typescript.fune",
                "size": 12695,
                "sha256": "fd62159bdab97e511c80d5ceb9a71121abf40e1b545c1ba242fea7e8904d3c3a",
                "integrity": "sha256-lkEcR5FAEKKI5pPfRsOCaq1J4nSOSDoIcMrUthWSfCA="
              },
              "python": {
                "name": "monitor.uptime-bars-1.0.0-python.fune",
                "size": 12829,
                "sha256": "d2b8b147d4ecdc86ef4c686d5ca0c04b40df9558feb8d9f2d7d46848d59a128e",
                "integrity": "sha256-E3hckEx9lMC2i5tf0bYVDzsdT2guZSfgLwX30y29Zhs="
              },
              "rust": {
                "name": "monitor.uptime-bars-1.0.0-rust.fune",
                "size": 13847,
                "sha256": "50d0be3e43776694e80ce1d1f3eb855f9d526ed3a72e0054ba9c8d682078f061",
                "integrity": "sha256-NAoKyb+HGIEotEdrUH411jFUON/BMOs7A8bJYXm7IZM="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "net.cidr": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-2o6zrrj4fR5qgYvrBP2jbQ2j086gMBNJi/qnyWTxUZw=",
          "summary": "CIDR blocks: network, broadcast, first and last host, host count, netmask and prefix, and membership.",
          "level": 1,
          "tags": [
            "cidr",
            "subnet",
            "netmask",
            "prefix",
            "network",
            "broadcast",
            "ip",
            "subnet-calculator"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "net.ipv4": "^1.0.0",
            "net.ipv6": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python/cidr_contains.py",
            "impl/python/cidr_info.py",
            "impl/python/is_cidr.py",
            "impl/python/netmask_to_prefix.py",
            "impl/python/prefix_to_netmask.py",
            "impl/rust/cidr_contains.rs",
            "impl/rust/cidr_info.rs",
            "impl/rust/is_cidr.rs",
            "impl/rust/netmask_to_prefix.rs",
            "impl/rust/prefix_to_netmask.rs",
            "impl/typescript/cidr_contains.ts",
            "impl/typescript/cidr_info.ts",
            "impl/typescript/is_cidr.ts",
            "impl/typescript/netmask_to_prefix.ts",
            "impl/typescript/prefix_to_netmask.ts",
            "vectors.json"
          ],
          "package": {
            "name": "net.cidr-1.0.0.fune",
            "size": 36244,
            "sha256": "bbc5cdb055ae733750b3c2cfb9061a67690545d83a9deae6e546ea7de67c4510",
            "languages": {
              "typescript": {
                "name": "net.cidr-1.0.0-typescript.fune",
                "size": 24468,
                "sha256": "438567b41289b422f708068cd5889fab539acaf295b199414e20e35e1fbc74c0",
                "integrity": "sha256-498HKqe9z3/q+KbxxpcpEMOjSC1Tyhuj71rqN32mhEc="
              },
              "python": {
                "name": "net.cidr-1.0.0-python.fune",
                "size": 24033,
                "sha256": "8b9fe7b85eac2e26d1e710c5570306aba79da0f4abfc82c3aaf76293debae8a9",
                "integrity": "sha256-GOgJOpvYK26zDe5b4GBkYbikRfYuUvMjnidkADld0GE="
              },
              "rust": {
                "name": "net.cidr-1.0.0-rust.fune",
                "size": 26083,
                "sha256": "2c3bcb43527ef69ec9041dcdcba2b73f838e74ca486bdc791b93747f69258d5b",
                "integrity": "sha256-1uwUSx1EysaMfMTyVzHLI8icmoOUicFj+hNbtwKdfOE="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "net.cidr-hosts": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-OtF0mMV2ljQDmL/w240iGbagQUaNiRfxftqFOR9A53s=",
          "summary": "List every usable host address in an IPv4 CIDR block, refusing blocks larger than a limit.",
          "level": 1,
          "tags": [
            "cidr",
            "hosts",
            "expand",
            "sweep",
            "scan",
            "subnet",
            "enumerate",
            "ip-range"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "net.cidr": "^1.0.0",
            "net.ipv4": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "net.cidr-hosts-1.0.0.fune",
            "size": 8078,
            "sha256": "2d687cc796d80ae148d21078616ddf2ee78e96cbd9c9702318f2a28dc36a3283",
            "languages": {
              "typescript": {
                "name": "net.cidr-hosts-1.0.0-typescript.fune",
                "size": 5808,
                "sha256": "cfbb6b7fbb148ff1deb70f18378df42b36bd3176adee8219428b59444a4fa0e2",
                "integrity": "sha256-W6oMdxfu4BG7I44ktklsBg57eEajPXk+K+1sit518Ok="
              },
              "python": {
                "name": "net.cidr-hosts-1.0.0-python.fune",
                "size": 5750,
                "sha256": "2e14337a67587143ada0d49ba6d87d64d978c22566a4b5d0df0dffaa9a0491d4",
                "integrity": "sha256-fxiXcJjvB5Y9ZJET4Y6dHxlofQMftI0ZoOE0FeATLCo="
              },
              "rust": {
                "name": "net.cidr-hosts-1.0.0-rust.fune",
                "size": 6168,
                "sha256": "9abd0566ade76cf5b08cb8bf3d528105740521d36584862e4f869e2cbe1171f1",
                "integrity": "sha256-XMoGDQdtLS35bW3F2zZ5RlTy5zTcLMyMw/37Jt/0srI="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "net.device-status": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-TantvZRzXzuTyx63/J5wGKDyXqS6BxbLeFQrduVfnqs=",
          "summary": "Classify a device as up, degraded or down from its latency summary and loss, p95 and jitter thresholds.",
          "level": 2,
          "tags": [
            "monitoring",
            "status",
            "up",
            "down",
            "degraded",
            "health-check",
            "alerting",
            "sla"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "net.latency-summary": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "net.device-status-1.0.0.fune",
            "size": 23784,
            "sha256": "7d524303a5558a52cdbb5aa7c08d00a4663572dfad2cd19a7e4a2a98f96e7611",
            "languages": {
              "typescript": {
                "name": "net.device-status-1.0.0-typescript.fune",
                "size": 16620,
                "sha256": "9dd1253b3dd4dcfc4ce1f55f886479f647d2db9913da0fca44f7e5f112a04c29",
                "integrity": "sha256-VnRZU8UQhjWXniKckROTuAWtQrHGavae5gCl0ILEx8k="
              },
              "python": {
                "name": "net.device-status-1.0.0-python.fune",
                "size": 16738,
                "sha256": "141baff8496e7ba64243c32a75df77d9a3be5ca6c9380f64b7505438b462a3d3",
                "integrity": "sha256-5UrD70HB6NgXbBQ9liI33rdEmQ8UWDn9fKpOJNZqXH0="
              },
              "rust": {
                "name": "net.device-status-1.0.0-rust.fune",
                "size": 17860,
                "sha256": "274e0afeba7cb1de649d4a8b2ef07c78164bb567ca78dc316b57933e43e1df86",
                "integrity": "sha256-v7/kj2rohsfFe2F3iuKwPbQI+0qNCzEiuNsZBgHZjlY="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "net.device-validate": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-Lbwjnxun0VpSBp3t7+rCTvirbfzecpWD99Va2kZfdZs=",
          "summary": "Validate one network inventory entry: name, host, ports, optional MAC and subnet, with every problem listed.",
          "level": 3,
          "tags": [
            "inventory",
            "validate",
            "device",
            "network",
            "config",
            "monitoring",
            "host"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "net.cidr": "^1.0.0",
            "net.ipv4": "^1.0.0",
            "net.ipv6": "^1.0.0",
            "net.port": "^1.0.0",
            "net.mac-address": "^1.0.0",
            "net.hostname-validate": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "net.device-validate-1.0.0.fune",
            "size": 29150,
            "sha256": "f74a06dc52d0c5f4093e13b770f7f2c0508d155be2bfb2ef9ebed0ff496ad420",
            "languages": {
              "typescript": {
                "name": "net.device-validate-1.0.0-typescript.fune",
                "size": 16916,
                "sha256": "aa3d8dc34d99b4ead2cae5cfd5974c3e6dcc1208dac5cba85cd2edbd583f436f",
                "integrity": "sha256-i25CePE1mfsCAgKCGnJDpmWeuaQXMfmOsz3zjVxZMpw="
              },
              "python": {
                "name": "net.device-validate-1.0.0-python.fune",
                "size": 17294,
                "sha256": "a6e1b5d4f2370703931df5191b39014a90e362aad19b20c6e826db8a8691805c",
                "integrity": "sha256-66zTkRgauXz6Slor1T/8Agshcx+Qhc5Qm542yuFgCZY="
              },
              "rust": {
                "name": "net.device-validate-1.0.0-rust.fune",
                "size": 19164,
                "sha256": "55cf5c4efe7e99f445d2c67fecb94d8a15cdecc1ad3a2bcb29f849d3dc328727",
                "integrity": "sha256-gXapiV8TV5SQdSnfNdkKakDWmrWCfUHcZ0NBtFmST2Q="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "net.hostname-validate": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-ilLuPazLTMzhbrNvvHh7xuZG7IpStJXPcfWybNjGFus=",
          "summary": "Check a host name against RFC 1123 and RFC 952 label rules and length limits, and normalise it.",
          "level": 1,
          "tags": [
            "hostname",
            "dns",
            "domain",
            "fqdn",
            "validate",
            "rfc1123",
            "label",
            "host"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "net.hostname-validate-1.0.0.fune",
            "size": 16975,
            "sha256": "9576a43bfb084e52ba629fd752e619e549894cae29d493d149f1b1ff4f682255",
            "languages": {
              "typescript": {
                "name": "net.hostname-validate-1.0.0-typescript.fune",
                "size": 12083,
                "sha256": "2cdefd29668278a8b07a877867d7acc96a1bb0c77a398eaa53c14f6c30f73580",
                "integrity": "sha256-69GigqiIy9nvaLNMDeC+2KwZXQEH5HyjPZY/gzHQBUI="
              },
              "python": {
                "name": "net.hostname-validate-1.0.0-python.fune",
                "size": 12178,
                "sha256": "64416d6b9994aff35e42fc2f91b993b15ba0fc7ce88cf1e87609d6f9a356531c",
                "integrity": "sha256-T/YoMrpuxC5n5kMm8y/5xgsSxJppo8Evs9k2yYRA/jc="
              },
              "rust": {
                "name": "net.hostname-validate-1.0.0-rust.fune",
                "size": 13178,
                "sha256": "b732bf8d377758dc5ef841a8bd7cb0a8835bfe0c2c809d71404eeb95b771503a",
                "integrity": "sha256-0ENaGiPLqJVfTF0Zd9vziPhvKigOTf3d7GfEFjt0vYI="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "net.ip-classify": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-RiVz3YwcfxlpHVGp3Q1M+YyioTBxUWuh2LCMFO1agVU=",
          "summary": "Classify an IPv4 or IPv6 address as loopback, private, link-local, multicast, documentation, CGNAT or global.",
          "level": 2,
          "tags": [
            "ip",
            "classify",
            "private",
            "loopback",
            "link-local",
            "multicast",
            "rfc6890",
            "special-purpose",
            "cgnat"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "net.cidr": "^1.0.0",
            "net.ipv4": "^1.0.0",
            "net.ipv6": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/special-purpose.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "net.ip-classify-1.0.0.fune",
            "size": 28917,
            "sha256": "597f539abc40a7ef8f254dd3c14b52974a0a93ad2d1d5931dc716c99f023dd92",
            "languages": {
              "typescript": {
                "name": "net.ip-classify-1.0.0-typescript.fune",
                "size": 24276,
                "sha256": "783e8329d5edac1524cdac0464ce3b80215f69eeb973ea6f48cae43accb9eebd",
                "integrity": "sha256-tpUDBwCSiFyLORdIR3LOOySAeeQj4EIUGJOQfpkGNGY="
              },
              "python": {
                "name": "net.ip-classify-1.0.0-python.fune",
                "size": 24134,
                "sha256": "829318dad4afe1e5482f35dbc80690dd7f65814cb11c011da938f888b7802e55",
                "integrity": "sha256-15ybJ/owTjU9AgWJAIUMaDLrVzakaaGFq5XuIaz8doA="
              },
              "rust": {
                "name": "net.ip-classify-1.0.0-rust.fune",
                "size": 25315,
                "sha256": "194312e6e6eddb30181172c36133303d3d491f2a646e305732a9efa1af4951f6",
                "integrity": "sha256-R4AEb4h9Zho4HIIGA9aMis2ce5F1cKphjOdIAvrWa6E="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "net.ipv4": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-VF1w4eYIk49tTV6WG+ocgIiE7EGppm9DPaNdZi03usA=",
          "summary": "Parse, format and check dotted-quad IPv4 addresses, refusing leading zeros, octal, hex and short forms.",
          "level": 1,
          "tags": [
            "ip",
            "ipv4",
            "ip-address",
            "dotted-quad",
            "parse",
            "format",
            "validate",
            "network"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python/format_ipv4.py",
            "impl/python/is_ipv4.py",
            "impl/python/parse_ipv4.py",
            "impl/rust/format_ipv4.rs",
            "impl/rust/is_ipv4.rs",
            "impl/rust/parse_ipv4.rs",
            "impl/typescript/format_ipv4.ts",
            "impl/typescript/is_ipv4.ts",
            "impl/typescript/parse_ipv4.ts",
            "vectors.json"
          ],
          "package": {
            "name": "net.ipv4-1.0.0.fune",
            "size": 17239,
            "sha256": "239a64ddd143396d95f8918b6a17f5f3532ede133b4c5a6482d44307f26f5f5d",
            "languages": {
              "typescript": {
                "name": "net.ipv4-1.0.0-typescript.fune",
                "size": 11780,
                "sha256": "60c1f4a7f7ac16894898eee0498304205fcd1fbad595e0060745a885d5243c03",
                "integrity": "sha256-+uefZjRptQJbfEEzbma2+ZE510HR7iBNcEeb2LFGNtk="
              },
              "python": {
                "name": "net.ipv4-1.0.0-python.fune",
                "size": 11790,
                "sha256": "315b231c88cfdc9d66e9f47f1c02bc9d73614c43bd69122ee28c0409457eddbe",
                "integrity": "sha256-HwzzTNSLncTbWGhVtCg0GiZhMY6emuid1J7A61U9BB0="
              },
              "rust": {
                "name": "net.ipv4-1.0.0-rust.fune",
                "size": 12531,
                "sha256": "9c97b12bb41a6e0f469a3b51caee5728244160cdd35dd8206072ed109a919f1a",
                "integrity": "sha256-y4FTQ/rpU34OeH2YPWoJN/yUUACNn1FdfemdCEUmtpU="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "net.ipv6": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-LKoVn/gCPSWCjdE4I9TueLM+xdwQgEdkc+SvhWnqpEg=",
          "summary": "Parse IPv6 addresses and write them in RFC 5952 canonical form: lower-case, zeros compressed, IPv4 embedded.",
          "level": 1,
          "tags": [
            "ip",
            "ipv6",
            "ip-address",
            "rfc5952",
            "canonical",
            "compress",
            "parse",
            "format"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "net.ipv4": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python/format_ipv6.py",
            "impl/python/is_ipv6.py",
            "impl/python/parse_ipv6.py",
            "impl/rust/format_ipv6.rs",
            "impl/rust/is_ipv6.rs",
            "impl/rust/parse_ipv6.rs",
            "impl/typescript/format_ipv6.ts",
            "impl/typescript/is_ipv6.ts",
            "impl/typescript/parse_ipv6.ts",
            "vectors.json"
          ],
          "package": {
            "name": "net.ipv6-1.0.0.fune",
            "size": 25384,
            "sha256": "f6cadea3f28991bad7dc0085b557c9d1e5f7db5ed39785b4040b78946ff72b56",
            "languages": {
              "typescript": {
                "name": "net.ipv6-1.0.0-typescript.fune",
                "size": 16015,
                "sha256": "be5bfbf90d0edb5a3f0d620c9314c7c48c064b8ff230245e53c9bbec10a67278",
                "integrity": "sha256-KjrtVzESvM4YZ82aUA1FTyIqF0t3HHg4x2X87sERopw="
              },
              "python": {
                "name": "net.ipv6-1.0.0-python.fune",
                "size": 15723,
                "sha256": "d7fa4bb1732699ff619851b315e50624f1f5c212ee8b4899cecf9e6d55f5cfb5",
                "integrity": "sha256-Fu5YhvwJxpcO+tW8MjouAccv5KoMx+HoXglDj30O4jg="
              },
              "rust": {
                "name": "net.ipv6-1.0.0-rust.fune",
                "size": 16730,
                "sha256": "76f8b626716e209016d5f3db636bdd2930e90ea5660484aa90a90f7318791627",
                "integrity": "sha256-0dgMrbs/6E5xdkzGbnVg62fob/S3wQY5JM/sVhexp5E="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "net.latency-summary": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-RtYe0yeM5j8+kJ2VvuhokskQSBD7OFEx8O4aOvQlJvg=",
          "summary": "Summarise probe results: sent, received, loss, min/avg/max, p95 and jitter, in whole microseconds.",
          "level": 1,
          "tags": [
            "latency",
            "ping",
            "rtt",
            "packet-loss",
            "jitter",
            "p95",
            "probe",
            "summarize"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.round-div": "^1.0.0",
            "stats.percentile": "^2.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "net.latency-summary-1.0.0.fune",
            "size": 16995,
            "sha256": "c5e4c99d628f4ef623dfefae12ed3b64b1ec4e9e410a83d09c0d2247bd5d9cb0",
            "languages": {
              "typescript": {
                "name": "net.latency-summary-1.0.0-typescript.fune",
                "size": 10699,
                "sha256": "a7cdd01c480c682c30c72dff8f209e2783050ab5c8aee229a316edb269010133",
                "integrity": "sha256-c7CZqaWzfmUG4ugNRzmCTEG3nIQchxlTz0+qBbJwpoI="
              },
              "python": {
                "name": "net.latency-summary-1.0.0-python.fune",
                "size": 10775,
                "sha256": "9b5ea6302a615fac901dca9899b09f6a9dd635b5b7a11e676a82abcb8e1529df",
                "integrity": "sha256-CNITzoMAYHz/myjOrc1thKys++I9HpERLhRmHWD28XY="
              },
              "rust": {
                "name": "net.latency-summary-1.0.0-rust.fune",
                "size": 12507,
                "sha256": "3bc5721e3372041d67bfcb38e8743f1ab194ed291f701de47a70b4266e7e238c",
                "integrity": "sha256-RjmVtBpCW+Lyr9dowQz9oQzxROM813Iew0V6pkm+e6E="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "net.mac-address": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-WnNXoSQLWeuTN4z6zl0CKd+2T4xUXpC/Ve7hBvq1aBA=",
          "summary": "Validate a MAC address in colon, hyphen, Cisco dot or bare form and normalise it, with multicast and local bits.",
          "level": 1,
          "tags": [
            "mac",
            "mac-address",
            "eui-48",
            "ethernet",
            "hardware-address",
            "normalise",
            "oui",
            "validate"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "net.mac-address-1.0.0.fune",
            "size": 17508,
            "sha256": "8645bd19c80f220684b55b51b8ce0a839c37ee15c4a4b860ad78c9fae11e03af",
            "languages": {
              "typescript": {
                "name": "net.mac-address-1.0.0-typescript.fune",
                "size": 12134,
                "sha256": "800dbac36f9d706add93717ed708bf69091d238a0fea5eb97f32205f77ab9343",
                "integrity": "sha256-SGt8bA1rfiws+TeyYg/YxLzGqNHaSswEw5vtB8KDq3o="
              },
              "python": {
                "name": "net.mac-address-1.0.0-python.fune",
                "size": 11994,
                "sha256": "96f6e88062692a557b80797c58fee9cee06d3ca7f61be026fdda1908b02a353f",
                "integrity": "sha256-hI1dUbMTzkBi2v9OC0Uq7MHIb216/pCI1BoMi21z0gU="
              },
              "rust": {
                "name": "net.mac-address-1.0.0-rust.fune",
                "size": 13348,
                "sha256": "f57ae8a0da99da80519f713c20bf649ad1ab33af8480dc71df15cc2e3386d787",
                "integrity": "sha256-xkDjy1Yvb1Y8tad2/PwbZfg9AKdBkVbRrBQ32TH0hrk="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "net.port": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-Y+rcPpT5KiFwhIj4+5iXUrDb6p8ftlF4wQ/55e30Fvs=",
          "summary": "Check a TCP/UDP port number and name the IANA service registered on it, with its system/user/dynamic range.",
          "level": 1,
          "tags": [
            "port",
            "tcp",
            "udp",
            "service",
            "iana",
            "well-known-ports",
            "network"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "data/services.json",
            "impl/python/is_port.py",
            "impl/python/port_service.py",
            "impl/rust/is_port.rs",
            "impl/rust/port_service.rs",
            "impl/typescript/is_port.ts",
            "impl/typescript/port_service.ts",
            "vectors.json"
          ],
          "package": {
            "name": "net.port-1.0.0.fune",
            "size": 33904,
            "sha256": "b4abf0a4585a74e0ed2cb54fce546dc137d24a263d490d0705b908921f46fd33",
            "languages": {
              "typescript": {
                "name": "net.port-1.0.0-typescript.fune",
                "size": 29315,
                "sha256": "eb5531b0a6d4083f6588e055634802e7b180eff285220bca89a1e18f4cea657c",
                "integrity": "sha256-xE2Tr37y8apL7FFhW3Ht566uN3wrVIOkN6k7G/1GApo="
              },
              "python": {
                "name": "net.port-1.0.0-python.fune",
                "size": 29365,
                "sha256": "32a4bfff57bdc6e21b02ff3d88f7c921708ff186ee767fecd4c21d5aeb6cc557",
                "integrity": "sha256-E9mdLqcK2ZW1TPnwvFKbeFea+R+PRPcAv/yzkQVfkVY="
              },
              "rust": {
                "name": "net.port-1.0.0-rust.fune",
                "size": 30532,
                "sha256": "0bc5e77a8036597ce2184a3238e938b1b264d4447baa9454afcada383df3bf80",
                "integrity": "sha256-FYSk54BFwwmQJqu+zMwQONk1E0QidQpNLKfR6B2eW/o="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "net.port-list": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-Ja2mbMzj3Rj/6pGDO/a2enD14HQ7JsmRlthGYxBHVSc=",
          "summary": "Parse a port list such as 22,80,8000-8010 into port numbers, in order and without duplicates.",
          "level": 1,
          "tags": [
            "port",
            "ports",
            "port-range",
            "parse",
            "list",
            "scan",
            "tcp",
            "udp"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "net.port": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "net.port-list-1.0.0.fune",
            "size": 12546,
            "sha256": "a9386de8ca0833c7dca907585ed78b1740aafad25d5a3d15532e62b3ff6119fa",
            "languages": {
              "typescript": {
                "name": "net.port-list-1.0.0-typescript.fune",
                "size": 7949,
                "sha256": "bae33156dbed49340ad51ec42077b11a8aaa17a4a0ab191639054d6d6032f72d",
                "integrity": "sha256-xygVcvVw1QdGAQ44dBqwCmTx6uPV8dW8obnfPtjR3T8="
              },
              "python": {
                "name": "net.port-list-1.0.0-python.fune",
                "size": 7986,
                "sha256": "0f46e7f1ed2ccf16649e1fd9fd49965c155ab507e9184e51275b45a7ca95ec36",
                "integrity": "sha256-FS81hRsF8l615RcEjhtL9wLSnup2sfkdZHeHHyAMd1I="
              },
              "rust": {
                "name": "net.port-list-1.0.0-rust.fune",
                "size": 8463,
                "sha256": "bd0a13070082958dbd1acdd7aae733413b38b295848829cb8def68ed89bc1a7d",
                "integrity": "sha256-4YfHbtLMKRs/yt+qpAsz6bCkDRlBDab3/ME+Xhnq7e4="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "payroll.gross-to-net": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-EtPOsNSWrAcIj76g24q0fpbvjV14IsXjGeJb4/grX44=",
          "summary": "A UK payslip for one pay period: gross pay, pension, PAYE tax, National Insurance, student loans and net pay.",
          "level": 3,
          "tags": [
            "payroll",
            "payslip",
            "gross-to-net",
            "take-home-pay",
            "net-pay",
            "paye",
            "national-insurance",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "payroll.income-tax": "^1.0.0",
            "payroll.tax-period": "^1.0.0",
            "payroll.student-loan": "^1.0.0",
            "payroll.national-insurance": "^1.0.0",
            "payroll.pension-auto-enrolment": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "payroll.gross-to-net-1.0.0.fune",
            "size": 30206,
            "sha256": "02abd199c5379b1eb3149db8a14bb497d82f97da5d7a7312b887dc633ecdd9ec",
            "languages": {
              "typescript": {
                "name": "payroll.gross-to-net-1.0.0-typescript.fune",
                "size": 20883,
                "sha256": "fc916acc08a8c6885d7758a2597ccc09723ec4170331dec44425027e3809cafe",
                "integrity": "sha256-jLKz064f9U6ACDGYLh+xRVMg3lQhp8gXb7zbrHKDw48="
              },
              "python": {
                "name": "payroll.gross-to-net-1.0.0-python.fune",
                "size": 20929,
                "sha256": "21f641e8c8681d92a8bc60c20eadd51b6b752c43613cbcd7d47aa2c9a60587e0",
                "integrity": "sha256-BQruy8A2k5F6av+x4i4bj72T6R9GCOUWrByznwg3evQ="
              },
              "rust": {
                "name": "payroll.gross-to-net-1.0.0-rust.fune",
                "size": 23836,
                "sha256": "8408107fa5d3cbe555683a95de5ba8fdb5d9cec6cbdf475f83806bce60404cd0",
                "integrity": "sha256-b/dnhOA50r8TIYuqHIXOh11oUZae3eIJQC/rl7MgzVE="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-AjMi1u/0uzUJyIBKU8abpPLqWCgG8Xe9mETXA1b5arg=",
          "summary": "A UK payslip for one pay period: gross pay, pension, PAYE tax, National Insurance, student loans and net pay.",
          "level": 3,
          "tags": [
            "payroll",
            "payslip",
            "gross-to-net",
            "take-home-pay",
            "net-pay",
            "paye",
            "national-insurance",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "payroll.income-tax": "^1.0.0",
            "payroll.tax-period": "^1.0.0",
            "payroll.student-loan": "^1.0.0",
            "payroll.national-insurance": "^1.0.0",
            "payroll.pension-auto-enrolment": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "payroll.gross-to-net-1.0.1.fune",
            "size": 31769,
            "sha256": "c37221261111539c198a5a8f58c94c4736fb0e9603bb5fe8e1d34290fb6a1a56",
            "languages": {
              "typescript": {
                "name": "payroll.gross-to-net-1.0.1-typescript.fune",
                "size": 22446,
                "sha256": "4a56b7fa104422075f61fc796896e46b0d4ab599e51ef6707da1be6675813bd5",
                "integrity": "sha256-RyN/zIh2+A5scO4n+uM40ZuGtj4HJZvwockPxypStGI="
              },
              "python": {
                "name": "payroll.gross-to-net-1.0.1-python.fune",
                "size": 22492,
                "sha256": "fc0e20fc15a26ce26957da456fc3e0b84700e355f262eef798354313f221ca8c",
                "integrity": "sha256-oynoiXPfYRY6Kc+bymbdnxlAwjzB01A+0Kj0TYaW+7E="
              },
              "rust": {
                "name": "payroll.gross-to-net-1.0.1-rust.fune",
                "size": 25399,
                "sha256": "033db847bae3a1eaa8f2da17f746b4e9a74c07b93d9c8630bd22a5a3db206645",
                "integrity": "sha256-Y0VPNfCDhYQraZdVJWEmDMCOGNUah0vJUImaOXnXnHU="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "payroll.holiday-entitlement": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-m8BKFkQphWtcqna5PJke0eZfLns45D0ZY3x4qCeDoZw=",
          "summary": "UK statutory holiday: 5.6 weeks capped at 28 days and pro-rated, or 12.07% accrual for irregular hours.",
          "level": 2,
          "tags": [
            "holiday",
            "annual-leave",
            "holiday-entitlement",
            "working-time",
            "part-time",
            "irregular-hours",
            "12.07",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0",
            "math.round-div": "^1.0.0",
            "dates.add-months": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/holiday-rules.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "payroll.holiday-entitlement-1.0.0.fune",
            "size": 29430,
            "sha256": "35abd36d8d334f2ba648843a2913d81f51c200f6543c8f23efc0583284e78589",
            "languages": {
              "typescript": {
                "name": "payroll.holiday-entitlement-1.0.0-typescript.fune",
                "size": 20190,
                "sha256": "d75fee5f3cbd694d4167f0040924efa1a63fec1851dc342018e7babed7e4f144",
                "integrity": "sha256-42ya4ewcozPinw8rqeUZrceCRm3ZJPxZ/3HGaAxPvQo="
              },
              "python": {
                "name": "payroll.holiday-entitlement-1.0.0-python.fune",
                "size": 20343,
                "sha256": "52a001092790fd10676a68647742e769d07e0a6ec79561044615d341eae8d9b6",
                "integrity": "sha256-dJcPq4lcC9sXsKhwNuRkIRwkqgCyjHaJsK23X/M1DUc="
              },
              "rust": {
                "name": "payroll.holiday-entitlement-1.0.0-rust.fune",
                "size": 21641,
                "sha256": "0b94ead36f1483684d34040d6f0491bed670ee64d50a137c1a7b01dbbc9a1884",
                "integrity": "sha256-TyNckMmeARFXAiGLa+LRyPYyIdOlHrga+rmhYCnJ2Pk="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-5qnJuzaFyWQUkhapmSaAkn3p5DHzfPQMmrKxp2F1JJc=",
          "summary": "UK statutory holiday: 5.6 weeks capped at 28 days and pro-rated, or 12.07% accrual for irregular hours.",
          "level": 2,
          "tags": [
            "holiday",
            "annual-leave",
            "holiday-entitlement",
            "working-time",
            "part-time",
            "irregular-hours",
            "12.07",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0",
            "math.round-div": "^1.0.0",
            "dates.add-months": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "data/holiday-rules.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "payroll.holiday-entitlement-1.0.1.fune",
            "size": 31100,
            "sha256": "f228bcbb8c052af0c0e89ea873ca50eca2da8288312857b44074edd44cbba9dc",
            "languages": {
              "typescript": {
                "name": "payroll.holiday-entitlement-1.0.1-typescript.fune",
                "size": 21860,
                "sha256": "8364842493231d1bf6a38cfcae46975b069fd7e7dced904fbf380f5526c025ee",
                "integrity": "sha256-eJDijVMyl+Dqvv6mAJnVXCxt99b/sZtqkc6XbE4GaUk="
              },
              "python": {
                "name": "payroll.holiday-entitlement-1.0.1-python.fune",
                "size": 22013,
                "sha256": "3b386347d0b940f2bc0458a7e36ec7d0649df48ad347fbe5b5afe70e41d53b55",
                "integrity": "sha256-ztCWhoQKSmHFdHZIqXvsJAtcuv6PHsVeyRN9etFy7rs="
              },
              "rust": {
                "name": "payroll.holiday-entitlement-1.0.1-rust.fune",
                "size": 23311,
                "sha256": "6c145fc8db2fd2b09c3a1c6bd90d3b853b29d1b7462bf66c52ac1fb52b30afd3",
                "integrity": "sha256-9YVbEHap0HHdmIhMXm05B2bsLL6s5/mrxjntDmQcI6Q="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "payroll.holiday-pay-accrual": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-ps48T4nHvzgHUJGRrNn/8ayx8ZUQ/B0bjq+pRgHVvK4=",
          "summary": "UK holiday pay: 12.07% rolled-up holiday pay, or a week's pay averaged over the last 52 paid weeks.",
          "level": 2,
          "tags": [
            "holiday-pay",
            "rolled-up-holiday-pay",
            "12.07",
            "average-weekly-pay",
            "reference-period",
            "working-time",
            "uk",
            "payroll"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "dates.add-days": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/holiday-pay-rules.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "payroll.holiday-pay-accrual-1.0.0.fune",
            "size": 38401,
            "sha256": "d016abbce3a5fcb8c080568f7fe45d85af3e784a44d312ad4e220b4bd2c97520",
            "languages": {
              "typescript": {
                "name": "payroll.holiday-pay-accrual-1.0.0-typescript.fune",
                "size": 31164,
                "sha256": "6540b5e4244db75f80cdfe8c4940a3e60cae311a52bdf026b75c22a748f9ba0f",
                "integrity": "sha256-sgNoc1gOec1qhtVD02e8Kq32fmK9B0iFaI+wL50NyY0="
              },
              "python": {
                "name": "payroll.holiday-pay-accrual-1.0.0-python.fune",
                "size": 31313,
                "sha256": "494018c4235aae2bcc32ad4320c5d2e625ab3fdca618959e547db0d7563c0500",
                "integrity": "sha256-/huGn7XtFykrEDwWnOrtCR9t6/Xpz+Cn2fqRT9IZxFQ="
              },
              "rust": {
                "name": "payroll.holiday-pay-accrual-1.0.0-rust.fune",
                "size": 32214,
                "sha256": "09ebd9c76abbf4e83f9e23312ec975ab4d6554f201450568f68cf742f1f7d617",
                "integrity": "sha256-GgafzmVuPWKbkGXL4jWaD5EtAKl4ZqPGFhbRcSeawUc="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-aBqEroAl8qYYISG74J11I8TVRnlXRHecHKAwuXgO9/M=",
          "summary": "UK holiday pay: 12.07% rolled-up holiday pay, or a week's pay averaged over the last 52 paid weeks.",
          "level": 2,
          "tags": [
            "holiday-pay",
            "rolled-up-holiday-pay",
            "12.07",
            "average-weekly-pay",
            "reference-period",
            "working-time",
            "uk",
            "payroll"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "dates.add-days": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "data/holiday-pay-rules.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "payroll.holiday-pay-accrual-1.0.1.fune",
            "size": 40071,
            "sha256": "728a430cc5fb2f72f87a2b6d207ae3bb653e159163886445e4e01d65cdfa8f69",
            "languages": {
              "typescript": {
                "name": "payroll.holiday-pay-accrual-1.0.1-typescript.fune",
                "size": 32834,
                "sha256": "01f2cb46ed25f44042d436516e1040e08e75e49df65ab1f59b474edff4afbfbc",
                "integrity": "sha256-+dpCWfroiJYfdSnhmheaBh5EN0dSGNDIk+zEFIUE2vc="
              },
              "python": {
                "name": "payroll.holiday-pay-accrual-1.0.1-python.fune",
                "size": 32983,
                "sha256": "056321bc6e705891e3a5b39fb02bcb6c970829343196e279b71903b48ea74415",
                "integrity": "sha256-JyKTZtqTC1B/VCNJIRY0iE5s2WUnN+e5DeMZSbSyU2k="
              },
              "rust": {
                "name": "payroll.holiday-pay-accrual-1.0.1-rust.fune",
                "size": 33884,
                "sha256": "237accd06cdd051927f6d1a085d5bd43ede7a90d10da922aecdb0976d85d3bb2",
                "integrity": "sha256-zyH6zKXwuwb47I0peLvjtEa89G2ms67uRi89279zzjk="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "payroll.income-tax": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-eWDTyJrl2ye05AgMC3jP3GJp9Ba/JzJvEiGOykEoUpI=",
          "summary": "PAYE income tax for one pay period from a tax code, cumulative or week 1/month 1, by HMRC's tax table routines.",
          "level": 2,
          "tags": [
            "payroll",
            "paye",
            "income-tax",
            "tax-code",
            "hmrc",
            "scottish-tax",
            "k-code",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "payroll.tax-period": "^1.0.0",
            "payroll.tax-code-parse": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/income-tax-bands.json",
            "data/overriding-limit.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "payroll.income-tax-1.0.0.fune",
            "size": 73674,
            "sha256": "32cd4cbaf68c99ed34b25bc60d367c45a37187f2d962f96ebd5d38ff8a5f9319",
            "languages": {
              "typescript": {
                "name": "payroll.income-tax-1.0.0-typescript.fune",
                "size": 53650,
                "sha256": "a23698ffed709f4e67ad05118f6832260c28e379b885713d3ff7774e0db5fff0",
                "integrity": "sha256-DBG3sXPBmjhgml2GW5qDSXSnlOIf56+Pn+8qP9ZXos8="
              },
              "python": {
                "name": "payroll.income-tax-1.0.0-python.fune",
                "size": 53647,
                "sha256": "8dc12c9618edbf93d1bbf1b1272418221df92785d8019f0732e3948b53974778",
                "integrity": "sha256-M4g9Vi11FrBCr9ZFrvzOXHGaIr/girzwKes4ZyfRvDw="
              },
              "rust": {
                "name": "payroll.income-tax-1.0.0-rust.fune",
                "size": 55789,
                "sha256": "0cba20d487273320166042d96ebe5c954aeeb685bccb14b27b9a2eaec4095e02",
                "integrity": "sha256-V/LKJq3bal9OT/ONH5xOZmDUNwwD2OEpf2GW5c/2RDg="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-FwUH7vkYPjpJUE7lNib0BdZHLx/vOwA0PlfE9/wC4/c=",
          "summary": "PAYE income tax for one pay period from a tax code, cumulative or week 1/month 1, by HMRC's tax table routines.",
          "level": 2,
          "tags": [
            "payroll",
            "paye",
            "income-tax",
            "tax-code",
            "hmrc",
            "scottish-tax",
            "k-code",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "payroll.tax-period": "^1.0.0",
            "payroll.tax-code-parse": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/income-tax-bands.json",
            "data/overriding-limit.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "payroll.income-tax-1.0.1.fune",
            "size": 74518,
            "sha256": "1337c69c829960d2adb7d282781418b546398837de22423f42a49b0a78ffb14f",
            "languages": {
              "typescript": {
                "name": "payroll.income-tax-1.0.1-typescript.fune",
                "size": 54486,
                "sha256": "db1f31bf5bd362b35da33838a1d4dc473ae9f0b44352107554198f4f82d17f8c",
                "integrity": "sha256-WaWSXNhIQEvFDi/oSYur+v+2Bpbnq+soiQ0fXZKlXdg="
              },
              "python": {
                "name": "payroll.income-tax-1.0.1-python.fune",
                "size": 54491,
                "sha256": "5a3cb6701f0d8782722c79e93e49f12027bd7435009c9c01ba3add84e51bc4dc",
                "integrity": "sha256-E7YVVfVpchFZ+BLkyKWAXRXa1a5DPaJk2wzzgmRGMW8="
              },
              "rust": {
                "name": "payroll.income-tax-1.0.1-rust.fune",
                "size": 56625,
                "sha256": "8a25ea8f9c94f2492909a63dc9cf475a1977270c7f7544e6fc6e8fceb5ace3f0",
                "integrity": "sha256-fPafxlnXTMp7KqgjmUyFdzL7k4ga1ug8bpzyHy8Zi3E="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.2": {
          "integrity": "sha256-6DMCgSioQnDb7/u5dz6zzS1NV3se6zbZ3Tj7rCaiitw=",
          "summary": "PAYE income tax for one pay period from a tax code, cumulative or week 1/month 1, by HMRC's tax table routines.",
          "level": 2,
          "tags": [
            "payroll",
            "paye",
            "income-tax",
            "tax-code",
            "hmrc",
            "scottish-tax",
            "k-code",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "payroll.tax-period": "^1.0.0",
            "payroll.tax-code-parse": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "data/income-tax-bands.json",
            "data/overriding-limit.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "payroll.income-tax-1.0.2.fune",
            "size": 76197,
            "sha256": "5645c1d0fd0808d3cf2a019746437faa0df2fcd64144ed99be1917b890da1b9d",
            "languages": {
              "typescript": {
                "name": "payroll.income-tax-1.0.2-typescript.fune",
                "size": 56165,
                "sha256": "d6cc6e195c4ca8ab7021d8482c6b57be922cf4b709758f17dfd94b149c657b8b",
                "integrity": "sha256-q29EZhyUlvFveCdCQuPLphGNyCHg+ro8KdSvJt7W77Y="
              },
              "python": {
                "name": "payroll.income-tax-1.0.2-python.fune",
                "size": 56170,
                "sha256": "d6f1e99097102534a229491d4a9a54c7cc19a912c1711fa3a7cee3c2c7766c66",
                "integrity": "sha256-nmE4YK09/f4m2OPgNVA0u4RLfktTGYh7BoSyCs11CcY="
              },
              "rust": {
                "name": "payroll.income-tax-1.0.2-rust.fune",
                "size": 58304,
                "sha256": "03cab309af6c4de626555fcda60ccce4630fd15473ffc07656b42ed194010d43",
                "integrity": "sha256-PeEaVQViYM9HXcqmrIDrYpzReOBZAGhMq00c7oTneyg="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "payroll.minimum-wage-check": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-PBfOMKjTQ0R6ZSH3oXHjGMD5B8J9uWHkLnSDLLHps1E=",
          "summary": "Check pay for a pay reference period against the minimum or living wage for age and apprenticeship.",
          "level": 2,
          "tags": [
            "payroll",
            "minimum-wage",
            "national-living-wage",
            "nmw",
            "nlw",
            "apprentice",
            "compliance",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.age": "^1.0.0",
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "dates.add-months": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/rates.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "payroll.minimum-wage-check-1.0.0.fune",
            "size": 27785,
            "sha256": "bce0ed874279e24be9bfda46cc1f4ed1bc4e435fcd742f3acc97b46d688bde6e",
            "languages": {
              "typescript": {
                "name": "payroll.minimum-wage-check-1.0.0-typescript.fune",
                "size": 20437,
                "sha256": "8c885d1762545682c281b14a8724e98f4e37cc00fc8f5bc155f8e385d465bd19",
                "integrity": "sha256-brR9ReBSoH9ykfLgAMAFlLuYZ0UWa5z8j9158haT1yk="
              },
              "python": {
                "name": "payroll.minimum-wage-check-1.0.0-python.fune",
                "size": 20474,
                "sha256": "ab7d55e604c331a82e721b763765fa27e7a14dd6a45e63b1764b11bc7a4a6281",
                "integrity": "sha256-COCRHhJyvb/c1BXBDjrXlTX5Ye9mxfgkIIZl2osMcdI="
              },
              "rust": {
                "name": "payroll.minimum-wage-check-1.0.0-rust.fune",
                "size": 21458,
                "sha256": "c62e04395ca5278293634d61562a98597b7514fcafff01f62e00517d6d2f0dc5",
                "integrity": "sha256-Y5roFAgIyTx6jAi4r3fCWZNixHVyOgxFksKV92pXUpU="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-wBkHL5dotW8iSlSR06UwGetGYLxDmo0h8GxiXSUTVmU=",
          "summary": "Check pay for a pay reference period against the minimum or living wage for age and apprenticeship.",
          "level": 2,
          "tags": [
            "payroll",
            "minimum-wage",
            "national-living-wage",
            "nmw",
            "nlw",
            "apprentice",
            "compliance",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.age": "^1.0.0",
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "dates.add-months": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "data/rates.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "payroll.minimum-wage-check-1.0.1.fune",
            "size": 29454,
            "sha256": "fc3c52f01a77aa82e360aff88540ad9814e2f3bdffcb2d9b283ef1710c867cc4",
            "languages": {
              "typescript": {
                "name": "payroll.minimum-wage-check-1.0.1-typescript.fune",
                "size": 22106,
                "sha256": "f9cc33062bb6e4dc3604278daa99900af2a1d06da4f92221bd641ee2f618ac1a",
                "integrity": "sha256-BnjGHwEqtVZ3Y+rFXJrXRBajhBVYhM6d09GffWb11Xs="
              },
              "python": {
                "name": "payroll.minimum-wage-check-1.0.1-python.fune",
                "size": 22143,
                "sha256": "c94cc8eff4e13f3ab7e5c52103c712459c18159ca3d4ff6190824825dad25012",
                "integrity": "sha256-YRlS6nJYdbadhYJ936xXKM3vSYAkR8whGO9EfVmnCBQ="
              },
              "rust": {
                "name": "payroll.minimum-wage-check-1.0.1-rust.fune",
                "size": 23127,
                "sha256": "8747bcdcebe050f519faca72b19497459650c2a8ce0356735bffcd0dc0af6080",
                "integrity": "sha256-wLjkdNEqTKfftHdj0gPUOehDRc+0fnFHvq993J7zmAA="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "payroll.national-insurance": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-Y4IqID0mYDI+DI0gs2UvWaLLb5ixr7alC6IgKwKqwr8=",
          "summary": "Employee and employer Class 1 National Insurance for one payment by category letter, exact percentage method.",
          "level": 2,
          "tags": [
            "national-insurance",
            "nic",
            "nics",
            "class-1",
            "employer-ni",
            "payroll",
            "hmrc",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "payroll.tax-period": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/ni-primary-rates.json",
            "data/ni-secondary-rates.json",
            "data/ni-thresholds.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "payroll.national-insurance-1.0.0.fune",
            "size": 68733,
            "sha256": "1c46066b49a90917503fa98767a47d4a066ad4a19c91b1daed261dc9dcd6a69e",
            "languages": {
              "typescript": {
                "name": "payroll.national-insurance-1.0.0-typescript.fune",
                "size": 53049,
                "sha256": "fe8584cb2cbdccd755a1a6d753806c773fef85e529852b9fda440d180c798136",
                "integrity": "sha256-XGb2Tqf2zxuS3NzLgNaldVykbdTM5FlR1UHfQ1fdp4Y="
              },
              "python": {
                "name": "payroll.national-insurance-1.0.0-python.fune",
                "size": 52776,
                "sha256": "b5903a09ef33facd0e26830f685b429ea6332b794646b3172533c1dec71e0d4f",
                "integrity": "sha256-EdMTBcsiXxt8qkhpDGnr83Mu/z/WWBXPjA2JmAj2U+4="
              },
              "rust": {
                "name": "payroll.national-insurance-1.0.0-rust.fune",
                "size": 54794,
                "sha256": "39e670a832f99ae6697a241c9d51585c0bc3ade82a12f33d9568ce9e68bda9c6",
                "integrity": "sha256-YlApTBAcDid3IyhSjx+JEOf/mKHRBrNVNerJBOE/I1Q="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-cqAlRAUYwjBnmfi03blgtrVz3sFIKeTymHGQKLwLCqQ=",
          "summary": "Employee and employer Class 1 National Insurance for one payment by category letter, exact percentage method.",
          "level": 2,
          "tags": [
            "national-insurance",
            "nic",
            "nics",
            "class-1",
            "employer-ni",
            "payroll",
            "hmrc",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "payroll.tax-period": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/ni-primary-rates.json",
            "data/ni-secondary-rates.json",
            "data/ni-thresholds.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "payroll.national-insurance-1.0.1.fune",
            "size": 69377,
            "sha256": "06de374f855c96dcd6f9b9c58b5a5bd7c1b889b2387f9e54040307984a7fb214",
            "languages": {
              "typescript": {
                "name": "payroll.national-insurance-1.0.1-typescript.fune",
                "size": 53685,
                "sha256": "9e0798f1e91a25ba1f268ea93581123e5c0d76fa670cffd8fd27f28eced3a677",
                "integrity": "sha256-VDYMfXrf41bb7zY5NxHR9+K3HkrwZRATuLKqre7waI8="
              },
              "python": {
                "name": "payroll.national-insurance-1.0.1-python.fune",
                "size": 53420,
                "sha256": "7554229998c09a41e12379346286b512367600940a85b8bffc5e8cf82348d93c",
                "integrity": "sha256-FaXaUV3N8uT6O+0n4ja4XuvFK8eepQTctZ5EwfGd3bs="
              },
              "rust": {
                "name": "payroll.national-insurance-1.0.1-rust.fune",
                "size": 55430,
                "sha256": "60c72e4434c846559737e1852f260564adc10c3d33edaed85ba2436df09abbe1",
                "integrity": "sha256-04HYO2ChZM35D1MhkyWM+U5m1t8XqtJPYVvz6zhAClI="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.2": {
          "integrity": "sha256-5Y4qBvRAyuzU6BU7t0qpGHnwN1LgdtZ/qXyoX07v7Hw=",
          "summary": "Employee and employer Class 1 National Insurance for one payment by category letter, exact percentage method.",
          "level": 2,
          "tags": [
            "national-insurance",
            "nic",
            "nics",
            "class-1",
            "employer-ni",
            "payroll",
            "hmrc",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "payroll.tax-period": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "data/ni-primary-rates.json",
            "data/ni-secondary-rates.json",
            "data/ni-thresholds.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "payroll.national-insurance-1.0.2.fune",
            "size": 71050,
            "sha256": "3e144d3220404676150707f02c616973a6c75a01b23121c5ffebe3dd5dfbbfec",
            "languages": {
              "typescript": {
                "name": "payroll.national-insurance-1.0.2-typescript.fune",
                "size": 55358,
                "sha256": "23db6a45ef11613cc871f25c69809f43bc7789e8695ff9df3f4ba8250dffdc92",
                "integrity": "sha256-DsOMOvpJPm+5cvUDIlMgZ2CstrwqtAqrVk4eqoC92fM="
              },
              "python": {
                "name": "payroll.national-insurance-1.0.2-python.fune",
                "size": 55093,
                "sha256": "84775aae0cf90f582c13e7385fae162b2c7413aab3fc72a4b4d8a8954ea35571",
                "integrity": "sha256-fbcqfVKiQC26W5kgKx29M/nJ0opW5pimIqDeaYirPVw="
              },
              "rust": {
                "name": "payroll.national-insurance-1.0.2-rust.fune",
                "size": 57103,
                "sha256": "9161ce6e0336642016832caeb71d0fc4c64dc96ce24dd51f6c74d99f1bdf6d3a",
                "integrity": "sha256-33cDrMDsVG+5wQuzYHrp3oVyMDKHTcrNR20rfvcy+gI="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "payroll.net-to-gross": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-vBhNNPfgnmCITNX8QXeKoDmxlYqxShAoBDvRh0StLLQ=",
          "summary": "The gross pay that gives at least a target net pay in one UK pay period, found by a deterministic search.",
          "level": 3,
          "tags": [
            "payroll",
            "net-to-gross",
            "gross-up",
            "grossing-up",
            "take-home-pay",
            "payslip",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "payroll.gross-to-net": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "payroll.net-to-gross-1.0.0.fune",
            "size": 18032,
            "sha256": "25ddb19264562f5e05f6dfd1e3a9acbc5689a71bfa04460a62f26345a16ce93d",
            "languages": {
              "typescript": {
                "name": "payroll.net-to-gross-1.0.0-typescript.fune",
                "size": 13366,
                "sha256": "703bb84108b61bc134f89f7facbad46ddc825407764b90be63f1eb098e87eca9",
                "integrity": "sha256-YZgCmwM0MepklUkc/4/oFrkcZ0zI+iUnPsmXaHkFsXU="
              },
              "python": {
                "name": "payroll.net-to-gross-1.0.0-python.fune",
                "size": 13377,
                "sha256": "6fd692b7b6005a128dffcf457523d41a4df8005b52310068299004b5c80de22e",
                "integrity": "sha256-PZP4D5jt293cSdk3my6EDNiZOccYtQsiQsx7L23i658="
              },
              "rust": {
                "name": "payroll.net-to-gross-1.0.0-rust.fune",
                "size": 13983,
                "sha256": "eb1fc401fdbfb97b880e918d4225449d39bf590505090e33a3ae5ad4c9548cfa",
                "integrity": "sha256-qmh5sWXlC4v2klpuJAEHDyTRHVmMtulRL3Evq4g6IGM="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-KOIQayODOWaFMyN1h+FlizMicKN3+lxDRJ/7laWY8kc=",
          "summary": "The gross pay that gives at least a target net pay in one UK pay period, found by a deterministic search.",
          "level": 3,
          "tags": [
            "payroll",
            "net-to-gross",
            "gross-up",
            "grossing-up",
            "take-home-pay",
            "payslip",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "payroll.gross-to-net": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "payroll.net-to-gross-1.0.1.fune",
            "size": 27521,
            "sha256": "337895c35f53013d7f2568ea5f832830feab8d0704ae9ecc65ece2e19cff986c",
            "languages": {
              "typescript": {
                "name": "payroll.net-to-gross-1.0.1-typescript.fune",
                "size": 22855,
                "sha256": "07ed8fb9a5c2c6a976d6cfddc3b9d4ed5e752e05799e604b7ba687785ee50cc8",
                "integrity": "sha256-4/VT4kZmzJuZ4AMXgmgNia7J75qcGZKZU03+1nmtFAc="
              },
              "python": {
                "name": "payroll.net-to-gross-1.0.1-python.fune",
                "size": 22866,
                "sha256": "3aabb55afa50c6f9893acb162082b97e531ea8e466c1fd027e4eeb294a0dc525",
                "integrity": "sha256-aMKY9Cr/rgDSTMYveS6WxuDufahSVO5WcHM58sSlWU4="
              },
              "rust": {
                "name": "payroll.net-to-gross-1.0.1-rust.fune",
                "size": 23472,
                "sha256": "6ed8b6045e04d229f12170e5c8e47bed4b6ec52330158cc89308afa88b7b1cb2",
                "integrity": "sha256-G52Ws8uMXPCFwS5dNyxuu5RCKL3o6qf+CkSXI1pGCyg="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.2": {
          "integrity": "sha256-SSZDg6bQfXVL/O+YjxSSsIMFfroaViSmmu93gQsJmJM=",
          "summary": "The gross pay that gives at least a target net pay in one UK pay period, found by a deterministic search.",
          "level": 3,
          "tags": [
            "payroll",
            "net-to-gross",
            "gross-up",
            "grossing-up",
            "take-home-pay",
            "payslip",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "payroll.gross-to-net": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "payroll.net-to-gross-1.0.2.fune",
            "size": 28658,
            "sha256": "6d4d7589fc87a348906f02e669c8a9c62ad3d58e752a098cb284865d169b75fd",
            "languages": {
              "typescript": {
                "name": "payroll.net-to-gross-1.0.2-typescript.fune",
                "size": 23992,
                "sha256": "c37ad8543b04bd551ebc1d55b789cb35a8ad300255b93ba263678c7699deb015",
                "integrity": "sha256-xq5AO1YSLmEaecyBWSk4MdReHWidGhuqJX0vVuyBDqQ="
              },
              "python": {
                "name": "payroll.net-to-gross-1.0.2-python.fune",
                "size": 24003,
                "sha256": "a1d9760d1efc5ffd6b17ffe9e21f25a630b61ea48365c1c6893347afbbcb0b35",
                "integrity": "sha256-d38OS1csIWJTwxsNUusqOBo9FMJOEQgNgKWvZkxJK6A="
              },
              "rust": {
                "name": "payroll.net-to-gross-1.0.2-rust.fune",
                "size": 24609,
                "sha256": "4aa4e3b0ac7faf53d3d70bf45a80f38b9eea73226610e5b5a8e433607eca64ce",
                "integrity": "sha256-hljyNzH5xs0L0xgvM+WQv7gDUWOsshrqb14JJS5XrC8="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "payroll.notice-period": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-9b+qcnKhfAVjwaVabco+x4y+0hElwjIJjYxCerQdsjE=",
          "summary": "Statutory minimum notice in weeks from continuous service: one week per year from two years, capped at twelve.",
          "level": 1,
          "tags": [
            "notice",
            "notice-period",
            "termination",
            "dismissal",
            "resignation",
            "statutory-notice",
            "employment-rights",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "hr.length-of-service": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "payroll.notice-period-1.0.0.fune",
            "size": 8084,
            "sha256": "2ffa1493b724e7a2ad4e78005fe7800be20ff73a78fe669ee042abed9ce74163",
            "languages": {
              "typescript": {
                "name": "payroll.notice-period-1.0.0-typescript.fune",
                "size": 5983,
                "sha256": "9949a82990724e5ff725bc152ea7bdf2ba56d8f909838fc7a533e28feb10d255",
                "integrity": "sha256-CFD62xPhyBffpX9mVOkjcz3IudIAaKqUJPDwA39TYwY="
              },
              "python": {
                "name": "payroll.notice-period-1.0.0-python.fune",
                "size": 6021,
                "sha256": "53330857bd75fabd8cd94167e0af074c849ddf42719b0f108e0b99791f4542df",
                "integrity": "sha256-+9BLUzB6lUv0O6Cc1DDIepljpt6WabsorLI0tzyInLQ="
              },
              "rust": {
                "name": "payroll.notice-period-1.0.0-rust.fune",
                "size": 6426,
                "sha256": "24ff63762705f49bb1cf64a8ca7d2ff0e594532561759a6a125cde6ff9b800d5",
                "integrity": "sha256-2E7Q9Eoa7HYqW5gapawQC9PBum3i4ROiUDwwQW15qU8="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-5xeymPrzfzA9qjSkHXX5zWahXbIOy788WlbaiqIiC+A=",
          "summary": "Statutory minimum notice in weeks from continuous service: one week per year from two years, capped at twelve.",
          "level": 1,
          "tags": [
            "notice",
            "notice-period",
            "termination",
            "dismissal",
            "resignation",
            "statutory-notice",
            "employment-rights",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "hr.length-of-service": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "payroll.notice-period-1.0.1.fune",
            "size": 9748,
            "sha256": "ca1fdef6192d38555bd6dfbb1ba5da45d5d0a66e60ca7817499cf6a8715afeaa",
            "languages": {
              "typescript": {
                "name": "payroll.notice-period-1.0.1-typescript.fune",
                "size": 7647,
                "sha256": "0a798a5d9ef49c5a26127cafd72f2ca85186460964c45b52c090e4e070b54300",
                "integrity": "sha256-gMYfogZxyiM9tyzlyM7dHiKePwr8oC2gqfLDkZ3IjO0="
              },
              "python": {
                "name": "payroll.notice-period-1.0.1-python.fune",
                "size": 7685,
                "sha256": "89a5d87743d056dd68506ab8d3ff662865e072f50809196bb02b49669cb6d75c",
                "integrity": "sha256-l9OHvkhUBye26EUH+cg+Nm6D3aDeZNiBejKfdTxPQsA="
              },
              "rust": {
                "name": "payroll.notice-period-1.0.1-rust.fune",
                "size": 8090,
                "sha256": "83d7b856a9c2dcb20e5a2041c224288bc648c15bb01653a3411774136fec3029",
                "integrity": "sha256-3STZ6XlXWFipktHwdlERcSKjdcaAsjc8aRpTVovN6cE="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "payroll.overtime": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-XbTv2W4mdAF/Q931u3qp3KjHDxmQFQ0eN4XYdYOq6MI=",
          "summary": "Pay for the time worked in a period split into multiplier bands: basic, time and a half after 40 hours, double time.",
          "level": 2,
          "tags": [
            "payroll",
            "overtime",
            "time-and-a-half",
            "double-time",
            "hourly-pay",
            "premium",
            "wages"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.sum": "^1.0.0",
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "payroll.overtime-1.0.0.fune",
            "size": 14951,
            "sha256": "a3757217ab546dc163afe8a24fdfabba76475e58753b695aa9809c730d45d41a",
            "languages": {
              "typescript": {
                "name": "payroll.overtime-1.0.0-typescript.fune",
                "size": 9831,
                "sha256": "47cef5fe33591f8183f9f9ff3d4d6e5a412ec2588e185cc4d8151febdf5df340",
                "integrity": "sha256-DNPOKdiMVB4S2EkV0RHby8oN2mGOMTk1gw2tswl7q4c="
              },
              "python": {
                "name": "payroll.overtime-1.0.0-python.fune",
                "size": 9888,
                "sha256": "fd46f016dcdd07b8f38b5d3a610a75de6970ddfb484f0695be751d5020f647e6",
                "integrity": "sha256-lhNAEJJUTZDBo1Kf7skffFH+FM7CGnkPtNUkhQXrkUg="
              },
              "rust": {
                "name": "payroll.overtime-1.0.0-rust.fune",
                "size": 11146,
                "sha256": "3c533f4e2d0f84134a75f1102823f7bc4bedf307543bc5dfe146864e52858766",
                "integrity": "sha256-Bs79itsj5SegHREo4oHsASzOKCQhUJshuHzDf+dGLYA="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-honBtORJ0o30WEprjQjt/4a862ZwzBwurrd8XDztruc=",
          "summary": "Pay for the time worked in a period split into multiplier bands: basic, time and a half after 40 hours, double time.",
          "level": 2,
          "tags": [
            "payroll",
            "overtime",
            "time-and-a-half",
            "double-time",
            "hourly-pay",
            "premium",
            "wages"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.sum": "^1.0.0",
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "payroll.overtime-1.0.1.fune",
            "size": 16084,
            "sha256": "ac96db3b7cb33ea5c5ce1b86422b56f2e9c356fa58f5928bbd580e2a88360b3d",
            "languages": {
              "typescript": {
                "name": "payroll.overtime-1.0.1-typescript.fune",
                "size": 10964,
                "sha256": "d99b647f759c8eb9fcf1b071be77c7d5ceb5f59d620a333d270337a32c7f8c7e",
                "integrity": "sha256-EoXD8AU6e0uFMiKtXne5X9sYdfifBcCZEZd1xnYWfxM="
              },
              "python": {
                "name": "payroll.overtime-1.0.1-python.fune",
                "size": 11021,
                "sha256": "13e827bb989337dc0a0c6f524267f1908dca6d467abad17118001421c7282f3a",
                "integrity": "sha256-aPWErbi1bOgCK1UJT6CBXnCfaBFYYXjEY4XY/ssdHxk="
              },
              "rust": {
                "name": "payroll.overtime-1.0.1-rust.fune",
                "size": 12279,
                "sha256": "32d85f21261c334ef38f7e2eff1ce1baf21642eb9870963b8c0d23f7b4ab3db1",
                "integrity": "sha256-P05dm6kVdTqhpTRyfbRqSD0ISFaXn45fgYlxeCcrQRQ="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "payroll.pension-auto-enrolment": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-yddx+QzAD0OFrgjbJa5WKSyJSvvxnnfiriSB6VN/lNU=",
          "summary": "Workplace pension contributions for one pay period: qualifying earnings band, employee and employer shares, tax relief.",
          "level": 2,
          "tags": [
            "pension",
            "auto-enrolment",
            "workplace-pension",
            "qualifying-earnings",
            "relief-at-source",
            "net-pay",
            "payroll",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "payroll.tax-period": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/ae-minimums.json",
            "data/ae-thresholds.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "payroll.pension-auto-enrolment-1.0.0.fune",
            "size": 42056,
            "sha256": "2f5e024580030156c506808f225a871847e8a92150652881ef91bb8e6e6a9486",
            "languages": {
              "typescript": {
                "name": "payroll.pension-auto-enrolment-1.0.0-typescript.fune",
                "size": 30100,
                "sha256": "513cb164f63fda649b5f9047aee0bf3c22edac262fb8cc207cfc78a833f1a7d6",
                "integrity": "sha256-DzLm80qDW5byGd0EFhzK+L9sBU4k+8nQ2XiA1SXfw8Q="
              },
              "python": {
                "name": "payroll.pension-auto-enrolment-1.0.0-python.fune",
                "size": 30309,
                "sha256": "1aeb3cf15302eaef808cf73ff48aa59f0c64b179704dfb140d3fb6d6cc32d44d",
                "integrity": "sha256-lR5Xw+GSWUiOzfS3BoUk7f1GSGEw2kuCaoy9d41sA00="
              },
              "rust": {
                "name": "payroll.pension-auto-enrolment-1.0.0-rust.fune",
                "size": 31953,
                "sha256": "63466340d16d0733cd64da758a91e071589222ff19b7df96041bdf7f90ff6c2a",
                "integrity": "sha256-YpZN8EdhMmfvNdjlaQi3SbGcsw5csEiIIBTTpHH/Mx0="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-IQwGzV72eP1adLvZH6pcBNyxWT+2uGJ+Q7/vstujo/Q=",
          "summary": "Workplace pension contributions for one pay period: qualifying earnings band, employee and employer shares, tax relief.",
          "level": 2,
          "tags": [
            "pension",
            "auto-enrolment",
            "workplace-pension",
            "qualifying-earnings",
            "relief-at-source",
            "net-pay",
            "payroll",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "payroll.tax-period": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/ae-minimums.json",
            "data/ae-thresholds.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "payroll.pension-auto-enrolment-1.0.1.fune",
            "size": 43012,
            "sha256": "fe586145b719778d7d0ef1f6d3840cb095c12b4c5d28caabf017c86489941826",
            "languages": {
              "typescript": {
                "name": "payroll.pension-auto-enrolment-1.0.1-typescript.fune",
                "size": 31048,
                "sha256": "1e2873a7c857ac969fd895fe5b5cd6a0c70157cde0e32f5081e4c4864dfe3c3d",
                "integrity": "sha256-bQlDkIrDXx8bKQ1uGrwhRcKvakhwzncai4aIku6EX5o="
              },
              "python": {
                "name": "payroll.pension-auto-enrolment-1.0.1-python.fune",
                "size": 31265,
                "sha256": "9ac3c7741ce932542335e04d91e37271f0a6ae160154b6d2ed6fb1ed7ed694a0",
                "integrity": "sha256-aADvrVdqmm1niC0K6nZuw77sBJ4QiuwWeFqtTLeo3l0="
              },
              "rust": {
                "name": "payroll.pension-auto-enrolment-1.0.1-rust.fune",
                "size": 32901,
                "sha256": "6cd550e45190b443a4b673b29d8715ef67513e74391a90dc61c561c1a5648a19",
                "integrity": "sha256-ziZ3mH8vNVNeAWvSDAlloMNA3sO2YY8o91MsBGaWmOU="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.2": {
          "integrity": "sha256-0bbPkTREEcZPDQKcYKYPtFX6QUgNJvMc69sSvTg7L6A=",
          "summary": "Workplace pension contributions for one pay period: qualifying earnings band, employee and employer shares, tax relief.",
          "level": 2,
          "tags": [
            "pension",
            "auto-enrolment",
            "workplace-pension",
            "qualifying-earnings",
            "relief-at-source",
            "net-pay",
            "payroll",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "payroll.tax-period": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "data/ae-minimums.json",
            "data/ae-thresholds.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "payroll.pension-auto-enrolment-1.0.2.fune",
            "size": 44685,
            "sha256": "f321e0f6c141f121f7bd4bac66d1b2db1ff5166a43dbd8180060576f5b954433",
            "languages": {
              "typescript": {
                "name": "payroll.pension-auto-enrolment-1.0.2-typescript.fune",
                "size": 32721,
                "sha256": "45c109217a0a3b8f1578f54add8d5b6e4a68ae4b164f960a44e5c627a6447109",
                "integrity": "sha256-xZEUYcRRzJ/qrbX+bQgObOy9FmtfdmSVBXlJ4/vBHyg="
              },
              "python": {
                "name": "payroll.pension-auto-enrolment-1.0.2-python.fune",
                "size": 32938,
                "sha256": "3422efc193d54e2f55fb44f823e75e9e13ca0db7d0c4ae040ac636441110bd5d",
                "integrity": "sha256-gkn51CQ1OhaCAa8mZR7wZEbqc4ym7yUixcqY9M+kaKQ="
              },
              "rust": {
                "name": "payroll.pension-auto-enrolment-1.0.2-rust.fune",
                "size": 34574,
                "sha256": "392f85c093172274557a80383b159c7294c4b90b5f24f9c46d17c0615e6ea0bc",
                "integrity": "sha256-qm97eBs3NQdG0oqDv4dsxhLpS3ddrW9v8zAft+69VpA="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "payroll.pro-rata-salary": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-27RqEzqCC0Tzqg7fQWmgqY7bN1hZBebOvuJNzj58ZtU=",
          "summary": "Salary for part of a pay period and for part-time hours, by calendar days or working days, rounded once.",
          "level": 1,
          "tags": [
            "payroll",
            "pro-rata",
            "salary",
            "starter",
            "leaver",
            "part-time",
            "fte",
            "apportion",
            "partial-month"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "dates.add-days": "^1.0.0",
            "math.round-div": "^1.0.0",
            "dates.business-days-between": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "payroll.pro-rata-salary-1.0.0.fune",
            "size": 14807,
            "sha256": "985557198e9652fa5eb30699d7b0882c7091e2aee5eb9c2bb610593fa7777518",
            "languages": {
              "typescript": {
                "name": "payroll.pro-rata-salary-1.0.0-typescript.fune",
                "size": 9954,
                "sha256": "3cdb7ca6a33cbcaa64f0115aa0230ca6f1d9ef527df40cac8a8be2a6406a55f8",
                "integrity": "sha256-2KO21AMKpPuKtCRuR9lvw9MuPW6AQCsf399ZhgSAE1M="
              },
              "python": {
                "name": "payroll.pro-rata-salary-1.0.0-python.fune",
                "size": 10000,
                "sha256": "5ec846aaa8d634152f6f62bcbab38fb9ec949ff86f2f8090535ce56c8e640eae",
                "integrity": "sha256-myx+sEt4fw6Z0JGrhUTzvmiOI6PfJ5QnmYp+yUEUz+8="
              },
              "rust": {
                "name": "payroll.pro-rata-salary-1.0.0-rust.fune",
                "size": 10667,
                "sha256": "fd4044698dd90cde982e4dc4b7a76523aa13e64b1919d8cc31214d7c7f0a04f2",
                "integrity": "sha256-dOsion7+OrwXYsj4H7TtP5AjOXy4qBeGdNWTuF82zqE="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-ry3ElEKYaAkDXEyPoM4oeU942BxMbonak1lsNsoDEls=",
          "summary": "Salary for part of a pay period and for part-time hours, by calendar days or working days, rounded once.",
          "level": 1,
          "tags": [
            "payroll",
            "pro-rata",
            "salary",
            "starter",
            "leaver",
            "part-time",
            "fte",
            "apportion",
            "partial-month"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "dates.add-days": "^1.0.0",
            "math.round-div": "^1.0.0",
            "dates.business-days-between": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "payroll.pro-rata-salary-1.0.1.fune",
            "size": 15940,
            "sha256": "f8bb34881684fca05492f85329cff6f12cb9fef7c6277d1903e38ba24f5bfdf0",
            "languages": {
              "typescript": {
                "name": "payroll.pro-rata-salary-1.0.1-typescript.fune",
                "size": 11087,
                "sha256": "033ba7465728e3c9c61b66b49eeb92be1bdeba10662162d7faefd3167f43fcc5",
                "integrity": "sha256-dLKJjymaM6SYQnOvCjJXI68hhOQqWosB2onONhGRqog="
              },
              "python": {
                "name": "payroll.pro-rata-salary-1.0.1-python.fune",
                "size": 11133,
                "sha256": "ca5d0b31d6b8e98c769a159895f8c184af64a4a0e1525ceb310c4ba0831478a8",
                "integrity": "sha256-7yJIPcooYc/cLH6oFWzE+smzDWB8wLD6VXifIcuPvhI="
              },
              "rust": {
                "name": "payroll.pro-rata-salary-1.0.1-rust.fune",
                "size": 11800,
                "sha256": "6cebcb4576b95d0147269b831406905a96552ec7dac407c8aa66bbe3ecec932d",
                "integrity": "sha256-Y7/6iEeoyCHO9f3F97RKFfNFtQ1qlk8OPiDQTChljYE="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "payroll.redundancy-pay": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-sNQh/Jf9QhNJvdmnCTYWVbUaaz/0gXqp7Wlkn29TWOY=",
          "summary": "Statutory redundancy pay from age, completed years of service (at most 20) and a week's pay capped by date.",
          "level": 2,
          "tags": [
            "redundancy",
            "redundancy-pay",
            "severance",
            "statutory-redundancy",
            "dismissal",
            "employment-rights",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.age": "^1.0.0",
            "money.amount": "^1.0.0",
            "dates.add-days": "^1.0.0",
            "math.round-div": "^1.0.0",
            "dates.add-months": "^1.0.0",
            "hr.length-of-service": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/week-pay-caps.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "payroll.redundancy-pay-1.0.0.fune",
            "size": 20078,
            "sha256": "4850df68000f3f6b9fa350c7d293e24d4865509660c5045d6d11c9b46ce08df5",
            "languages": {
              "typescript": {
                "name": "payroll.redundancy-pay-1.0.0-typescript.fune",
                "size": 14353,
                "sha256": "fe1a3335bca876963bac7d2d03828823db06bc473c50a8138486cf50940e65f4",
                "integrity": "sha256-Q8IfoVJl2GMiyGD/cvMby1JoRkkmvmLdODVr+9PhRZE="
              },
              "python": {
                "name": "payroll.redundancy-pay-1.0.0-python.fune",
                "size": 14357,
                "sha256": "942b980a5fcd87a43360624e2628c6ca22b9f00b46df918697e1248983d9f7ce",
                "integrity": "sha256-vkV8pfvSgWumg7O85XbbpcBNE3aE6WBexrBYRslxwAc="
              },
              "rust": {
                "name": "payroll.redundancy-pay-1.0.0-rust.fune",
                "size": 14952,
                "sha256": "32970994b11336def52a231bf7e33f4c359af85fa4cb676608102cb9a2c3292b",
                "integrity": "sha256-lMZrJwBGJo1LkfmMrhtFCIoXjwvnhIGvubfAjevP/+U="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-PQao1LCfLqcgKBKsoWEp5haK0qoGuxbiLjceDE+qX1I=",
          "summary": "Statutory redundancy pay from age, completed years of service (at most 20) and a week's pay capped by date.",
          "level": 2,
          "tags": [
            "redundancy",
            "redundancy-pay",
            "severance",
            "statutory-redundancy",
            "dismissal",
            "employment-rights",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.age": "^1.0.0",
            "money.amount": "^1.0.0",
            "dates.add-days": "^1.0.0",
            "math.round-div": "^1.0.0",
            "dates.add-months": "^1.0.0",
            "hr.length-of-service": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "data/week-pay-caps.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "payroll.redundancy-pay-1.0.1.fune",
            "size": 21743,
            "sha256": "0959e1fee050e56472f1d7d7bb9e96fc665845510c0231d65be3aab98a03b682",
            "languages": {
              "typescript": {
                "name": "payroll.redundancy-pay-1.0.1-typescript.fune",
                "size": 16018,
                "sha256": "7a4a33f3c127562b22c73ad3f8f15735dfb25cdbfe76101ee19c899327ca13bb",
                "integrity": "sha256-i7zA67hcPrh2ik1XBefX0FFRhz8Cjl5942uc+695SjE="
              },
              "python": {
                "name": "payroll.redundancy-pay-1.0.1-python.fune",
                "size": 16022,
                "sha256": "8a84f3ff0d66f7dba0d2b2be84bb40b08ab020499462c4e5c4eec00b314d0a25",
                "integrity": "sha256-alVQ2SYHO3ZxeIuPNEJ5B3tnOdtvZkPucn0s7XRHb5c="
              },
              "rust": {
                "name": "payroll.redundancy-pay-1.0.1-rust.fune",
                "size": 16617,
                "sha256": "8d2d6393cb512f72e1f436784db73c9ea4003fa3eb098bd807fa44d6a0865468",
                "integrity": "sha256-qAqZqs0uZ8YcEVdatre7METKLldF6qZ5rasWBP7Ac1U="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "payroll.statutory-maternity-pay": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-lcax2CWUjBifRO/mDkMxqC2+FHtmF51CvbGkHHmbRUs=",
          "summary": "UK Statutory Maternity Pay: LEL eligibility and 39 weekly amounts, 90% then the lower of 90% or the flat rate.",
          "level": 2,
          "tags": [
            "smp",
            "statutory-maternity-pay",
            "maternity",
            "parental-leave",
            "payroll",
            "uk",
            "hmrc"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "dates.add-days": "^1.0.0",
            "math.round-div": "^1.0.0",
            "dates.day-of-week": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/lower-earnings-limits.json",
            "data/smp-rates.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "payroll.statutory-maternity-pay-1.0.0.fune",
            "size": 67901,
            "sha256": "396e9e1f5cc5af549e8796022dd85b45eae552c371875fbb697f8046ac33e00b",
            "languages": {
              "typescript": {
                "name": "payroll.statutory-maternity-pay-1.0.0-typescript.fune",
                "size": 59271,
                "sha256": "ba4a5a1ed0d291469afe45833f1006e9ac09092c2bb492db7b80a036b8b7092e",
                "integrity": "sha256-OudnC/pLkIx+k/ch6Xg69DY5pEGa5Gc4mpzutrCJN5w="
              },
              "python": {
                "name": "payroll.statutory-maternity-pay-1.0.0-python.fune",
                "size": 59258,
                "sha256": "7442f4755d7e17b1eed70341cdb19488563da8f4fffc35a0e29d55ca0ca2876f",
                "integrity": "sha256-xv8HGJNQ61Vz60PlbAcZlHVfH8z4qwQS3zN8xeYzhdM="
              },
              "rust": {
                "name": "payroll.statutory-maternity-pay-1.0.0-rust.fune",
                "size": 60762,
                "sha256": "151e71b290a6780e2bfa5aa2707ef9b9eb444e46e8061a3ce7403177f8a571d1",
                "integrity": "sha256-vYDSNUKZgp1rnCtzHtDT/d02jpHbKNGuRnBSMBgAySY="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-lHk7VmUtnsfOSzoxl6nc9NNotKICfijtRfJvFCbmD7s=",
          "summary": "UK Statutory Maternity Pay: LEL eligibility and 39 weekly amounts, 90% then the lower of 90% or the flat rate.",
          "level": 2,
          "tags": [
            "smp",
            "statutory-maternity-pay",
            "maternity",
            "parental-leave",
            "payroll",
            "uk",
            "hmrc"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "dates.add-days": "^1.0.0",
            "math.round-div": "^1.0.0",
            "dates.day-of-week": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "data/lower-earnings-limits.json",
            "data/smp-rates.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "payroll.statutory-maternity-pay-1.0.1.fune",
            "size": 69575,
            "sha256": "3cddc9f24aa78a6d4b30c05b3acf924169bb925796c1bf01b73c69bff6001869",
            "languages": {
              "typescript": {
                "name": "payroll.statutory-maternity-pay-1.0.1-typescript.fune",
                "size": 60945,
                "sha256": "ad4b2ca36f3937f7a0e2182f163f55af44af8c73c63383971ed6d142f0071838",
                "integrity": "sha256-VWZ6qacefvmUzXKoJdzokEnEGL8blhioNklrzHEr69M="
              },
              "python": {
                "name": "payroll.statutory-maternity-pay-1.0.1-python.fune",
                "size": 60932,
                "sha256": "1f935900494d0c03ef98b3f42f725580d4f2c8ff1c8834c17802e2dcfdd93c9d",
                "integrity": "sha256-FE6L6+Eyj+ZN1oDdC8VwLZy5cQy40+gGXq+k3qZMT8I="
              },
              "rust": {
                "name": "payroll.statutory-maternity-pay-1.0.1-rust.fune",
                "size": 62436,
                "sha256": "b625b3ce35335343947750de4198fc4db210759e30c3619cfdfe573c8f0ffa2e",
                "integrity": "sha256-zEyZAtbejSGou8LiNgkY0V78Sqha614XNGd52uEEKlk="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "payroll.statutory-sick-pay": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-sQHcldeCqiDfzcUd2/KdjcwlwsFKOBvSuF1G992eigY=",
          "summary": "UK Statutory Sick Pay for sickness spells: waiting days, 8-week linking, 28-week limit and the rate by date.",
          "level": 2,
          "tags": [
            "ssp",
            "statutory-sick-pay",
            "sick-pay",
            "sickness",
            "absence",
            "payroll",
            "uk",
            "hmrc"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "dates.add-days": "^1.0.0",
            "math.round-div": "^1.0.0",
            "dates.add-months": "^1.0.0",
            "dates.day-of-week": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/ssp-rules.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "payroll.statutory-sick-pay-1.0.0.fune",
            "size": 50582,
            "sha256": "8fbcbce9756114686bbd536f224af76c8e031da76ca1d2887d04f1a20b3e8c4b",
            "languages": {
              "typescript": {
                "name": "payroll.statutory-sick-pay-1.0.0-typescript.fune",
                "size": 35094,
                "sha256": "a3faa39d1927ddd06deab14edcf3b18bd3c146be6120f480da2ec355cb61de53",
                "integrity": "sha256-3ORIYb+RBD4P3WnmJ0MireK+V+vvjdlL9NquAfN+5XE="
              },
              "python": {
                "name": "payroll.statutory-sick-pay-1.0.0-python.fune",
                "size": 35225,
                "sha256": "5da547041adb75c8d73ffef9c4f87dd4c6d28a8fb9dbc5d8503723a58be60512",
                "integrity": "sha256-t02krkm7MUbAaGsFOP1X40VbZboBPbwC3Tg1MM9H+Zs="
              },
              "rust": {
                "name": "payroll.statutory-sick-pay-1.0.0-rust.fune",
                "size": 37533,
                "sha256": "3b684627217e622fc251a84f6ebb4963b32ec2903997943c718b7facdd269ba4",
                "integrity": "sha256-fxzNm5xQgdD+DxYmCVAwLFxnDF1eze0tzuhMesQLBm0="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-TKiK2yMw/nNfOlgaqtF1yC1dN+8t7Gf22IdqqvBXZI0=",
          "summary": "UK Statutory Sick Pay for sickness spells: waiting days, 8-week linking, 28-week limit and the rate by date.",
          "level": 2,
          "tags": [
            "ssp",
            "statutory-sick-pay",
            "sick-pay",
            "sickness",
            "absence",
            "payroll",
            "uk",
            "hmrc"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "dates.add-days": "^1.0.0",
            "math.round-div": "^1.0.0",
            "dates.add-months": "^1.0.0",
            "dates.day-of-week": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "data/ssp-rules.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "payroll.statutory-sick-pay-1.0.1.fune",
            "size": 52251,
            "sha256": "aee3a09d679043e90bea8a61646a83de75fe303badb083f88bacf8051e8abbcf",
            "languages": {
              "typescript": {
                "name": "payroll.statutory-sick-pay-1.0.1-typescript.fune",
                "size": 36763,
                "sha256": "f88dcfca9a171a3e8cdd5fec114b302db2ac4246902c3dcd9e8fb1f08457d847",
                "integrity": "sha256-izYWxUfmTuBwDORhgz8VKgbO0X9dOyZUFM8uAqvpRSQ="
              },
              "python": {
                "name": "payroll.statutory-sick-pay-1.0.1-python.fune",
                "size": 36894,
                "sha256": "b78600f12799074c323f25438cfb606120c7c1eff28eb1b7cf34c34b9da7c174",
                "integrity": "sha256-+3nSl/ddvjVh32TlWt0BihWze0gb8dIXgHtfVEwGyfg="
              },
              "rust": {
                "name": "payroll.statutory-sick-pay-1.0.1-rust.fune",
                "size": 39202,
                "sha256": "96e7d3977500c810f4a76465e3102715a1deac44ab4a636f463a09d2879450a7",
                "integrity": "sha256-Vz8uUtobbuYzcXK3SfPexfrNFriO6Go5vaoVPio0Wcg="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "payroll.student-loan": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-SkILN+B3fmcw8kTpU9Dza2HA+0TJZOKshNIjDVmHBtU=",
          "summary": "Student loan or postgraduate loan deduction from one period's pay, by plan, rounded down to whole pounds.",
          "level": 2,
          "tags": [
            "student-loan",
            "postgraduate-loan",
            "slc",
            "plan-1",
            "plan-2",
            "plan-4",
            "plan-5",
            "payroll",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "payroll.tax-period": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/student-loan-thresholds.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "payroll.student-loan-1.0.0.fune",
            "size": 23725,
            "sha256": "3f88d31b873fb177f8d3f516db14afa1d8cb14b843357b73b720a3439d8854ae",
            "languages": {
              "typescript": {
                "name": "payroll.student-loan-1.0.0-typescript.fune",
                "size": 17198,
                "sha256": "2259fd3cd9f6ea25a2d8c2e55298a8c7a0d542381d23e63fa52477fe0a344e86",
                "integrity": "sha256-rL4sDMxO2Y1mYLRggBQPwIE7YOoun2vF0OExOAygFco="
              },
              "python": {
                "name": "payroll.student-loan-1.0.0-python.fune",
                "size": 17146,
                "sha256": "f09c4a932eef83ccabcbe0877decae3a7f096780be3df1278a5eb4ada452fc7a",
                "integrity": "sha256-1LtMlTpPI9b3dUuGKCg8ngYDY/G7ieIor7vj/u3881w="
              },
              "rust": {
                "name": "payroll.student-loan-1.0.0-rust.fune",
                "size": 17669,
                "sha256": "42c8baaf10ac49ad49b7fe8d1af28d5a5773488e1dcec72753016c4b4e38017e",
                "integrity": "sha256-JENGZP+bCTeTkCzDxt5UYATKwVb4QpOwv23Xayu4PEw="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-yjI8wEvWsk82DPARYQ1BNNtml99gdZ7xGMQQwXfARRs=",
          "summary": "Student loan or postgraduate loan deduction from one period's pay, by plan, rounded down to whole pounds.",
          "level": 2,
          "tags": [
            "student-loan",
            "postgraduate-loan",
            "slc",
            "plan-1",
            "plan-2",
            "plan-4",
            "plan-5",
            "payroll",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "payroll.tax-period": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/student-loan-thresholds.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "payroll.student-loan-1.0.1.fune",
            "size": 24359,
            "sha256": "d534646e94f040ddf1214b70c287e4fcb178b3b4e17bfbf8c450c099b11281d9",
            "languages": {
              "typescript": {
                "name": "payroll.student-loan-1.0.1-typescript.fune",
                "size": 17824,
                "sha256": "46fc6505111a6d6666c0532b48ad6b9b50c49ca34b76be78b91a58980fe2ae86",
                "integrity": "sha256-++If/nhamFBBewznLGd1KuIP3vO8BBiJb/frj166g8k="
              },
              "python": {
                "name": "payroll.student-loan-1.0.1-python.fune",
                "size": 17780,
                "sha256": "47af843b49c21411cccd9d92236322af6b3f2a64d64559e8703833f9688124d0",
                "integrity": "sha256-T247sjx0Go6ql1ytI0yQdrnj/1GtA+IkhvQ8U4abVk8="
              },
              "rust": {
                "name": "payroll.student-loan-1.0.1-rust.fune",
                "size": 18295,
                "sha256": "4bde00cf2b0e1b40a684647835288546ae78ef57cdc8743944d36410d9c4f827",
                "integrity": "sha256-gqwZyjhefnn3h+4i+Gg05QxMPmbpFU4qIM1Akup46Yw="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.2": {
          "integrity": "sha256-FRSf6trCXtvH3Gemx7a6Winujh21RpLaftDa5Vhz/E4=",
          "summary": "Student loan or postgraduate loan deduction from one period's pay, by plan, rounded down to whole pounds.",
          "level": 2,
          "tags": [
            "student-loan",
            "postgraduate-loan",
            "slc",
            "plan-1",
            "plan-2",
            "plan-4",
            "plan-5",
            "payroll",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "payroll.tax-period": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "data/student-loan-thresholds.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "payroll.student-loan-1.0.2.fune",
            "size": 26022,
            "sha256": "676554a300c7212bc0f9a40a01e8e3840edacbd66b950e7d088c60c0bd40fb0d",
            "languages": {
              "typescript": {
                "name": "payroll.student-loan-1.0.2-typescript.fune",
                "size": 19487,
                "sha256": "db2fa9c31a95dfcd6aefb4f65d8be0571d0255eb1488d22ac63efcf7093764d6",
                "integrity": "sha256-w7SzUmlPdJGVCbnF1BUuHVz+Obb05JThB/NhDEFJ8mc="
              },
              "python": {
                "name": "payroll.student-loan-1.0.2-python.fune",
                "size": 19443,
                "sha256": "f4145c74972b39596774378370de93bafb4c57f98abaa32aed9274f8ee53a51b",
                "integrity": "sha256-vv9b1dwns34geHl/4coRn0ipih4av4Byam2MyfQiivU="
              },
              "rust": {
                "name": "payroll.student-loan-1.0.2-rust.fune",
                "size": 19958,
                "sha256": "4110e6568c5ffcea2ad85dad08d58d631998b432575347e78d158912f6f2f997",
                "integrity": "sha256-wzArFeWPIdXuZeAhMFZ7PyPGS4C/VVZRMR+JOghRh3Q="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "payroll.tax-code-parse": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-/PTSp5fjM8OznaH6g108tvknQwUa5f0nrWatP15v3c4=",
          "summary": "Parse a UK PAYE tax code (1257L, K475, BR, D0, NT, 0T, S and C prefixes, W1/M1/X) into its allowance and flags.",
          "level": 1,
          "tags": [
            "payroll",
            "paye",
            "tax-code",
            "hmrc",
            "allowance",
            "emergency-code",
            "k-code",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "payroll.tax-code-parse-1.0.0.fune",
            "size": 22582,
            "sha256": "38b52679e96f0086fa77a7de95030af71800f73cae781019b24221d0ce0b6e44",
            "languages": {
              "typescript": {
                "name": "payroll.tax-code-parse-1.0.0-typescript.fune",
                "size": 15453,
                "sha256": "4941913dde016a544295b89e4332feb144323895cefe1e20d708514d117335ef",
                "integrity": "sha256-3WkFY+rZfCZG9sOlxaoszDyuiXiH5t5+Os4NBYlTbgI="
              },
              "python": {
                "name": "payroll.tax-code-parse-1.0.0-python.fune",
                "size": 15498,
                "sha256": "27ec6f231b5348c3fa19bae2141e0a67a2fcc9eeacec4fcd10efa310e085d748",
                "integrity": "sha256-YNQlrJwo5oy/CmvnZo5t4ctzhB2BDoBd5GYxnenO1XY="
              },
              "rust": {
                "name": "payroll.tax-code-parse-1.0.0-rust.fune",
                "size": 17053,
                "sha256": "9134c8cdb35267a4f9f6e6d683ad95784fa865b3d7319511bd43fed156a34929",
                "integrity": "sha256-G7pJ0XQ2y4NJdEPYl09Y5XVujH3sBhOTdsPUDrAsb4w="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-y8WH9r5qNUiPr+kZCGZ/B3v49VGsV5vs3i8H6LAiMyM=",
          "summary": "Parse a UK PAYE tax code (1257L, K475, BR, D0, NT, 0T, S and C prefixes, W1/M1/X) into its allowance and flags.",
          "level": 1,
          "tags": [
            "payroll",
            "paye",
            "tax-code",
            "hmrc",
            "allowance",
            "emergency-code",
            "k-code",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "payroll.tax-code-parse-1.0.1.fune",
            "size": 26076,
            "sha256": "605686aaca47a97f706e67c19efc658e384e9f737cc0b5ba4da8d0a17a957cc1",
            "languages": {
              "typescript": {
                "name": "payroll.tax-code-parse-1.0.1-typescript.fune",
                "size": 18005,
                "sha256": "6b8a89cd74f978bb34763ad11bf432dd17ff5e304f762782ad4b4024f24ec376",
                "integrity": "sha256-XuqHNXGK+7makCKJ0XGvo/FvtCc3Qz7A6bEd9YzKqxs="
              },
              "python": {
                "name": "payroll.tax-code-parse-1.0.1-python.fune",
                "size": 18019,
                "sha256": "821e29be11789d818cbbc48491998f3ac46c66664060e9643017b46a9af0bad9",
                "integrity": "sha256-WOV3pKWQyZwPz0PAhs70q3iXkM95QfORwfAvaV4WAAw="
              },
              "rust": {
                "name": "payroll.tax-code-parse-1.0.1-rust.fune",
                "size": 19532,
                "sha256": "c43dc13aafea3e587d8df642d4d4b2c3cdc9994d5b7a0410149478b5b5d81fbb",
                "integrity": "sha256-RHOe1paLWba2oX0nkLoCkNJ+tRJJSuGqzI7XvFFHox8="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.2": {
          "integrity": "sha256-II2a3uAzXYeft6Ct7oRmmVcGHihhmNoe3Rxj6RdZH7M=",
          "summary": "Parse a UK PAYE tax code (1257L, K475, BR, D0, NT, 0T, S and C prefixes, W1/M1/X) into its allowance and flags.",
          "level": 1,
          "tags": [
            "payroll",
            "paye",
            "tax-code",
            "hmrc",
            "allowance",
            "emergency-code",
            "k-code",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "payroll.tax-code-parse-1.0.2.fune",
            "size": 27637,
            "sha256": "a2d2166d9aec28dc6e7a42f0658b6dcc1f5ffc41287b0e4880b0b47a9860d3db",
            "languages": {
              "typescript": {
                "name": "payroll.tax-code-parse-1.0.2-typescript.fune",
                "size": 19566,
                "sha256": "f9f501f6f4386a467e172d03ecebd020348ee0e03a86919848342235d1eef7b7",
                "integrity": "sha256-QXcL3r6L4x5LI2k90xeX5Uflt+MUJuzoR/GT2SPdpyU="
              },
              "python": {
                "name": "payroll.tax-code-parse-1.0.2-python.fune",
                "size": 19580,
                "sha256": "72a0bb289de26a3d42d0bbc1f44a42cfe6c6e14c529786a5c0a04adb055810fd",
                "integrity": "sha256-FKqiJTM3+6WDHuPeGtGaPrPxapogiycFgBbu1h5aSnw="
              },
              "rust": {
                "name": "payroll.tax-code-parse-1.0.2-rust.fune",
                "size": 21093,
                "sha256": "b85e1b52adb029f467acaf16346c5e45b20c0c9be51a2cb764a4b5bb0d11ec54",
                "integrity": "sha256-9a7PZ/okDlAz7ojx2bW7j0GfocHlZNw34dOjGBcC/vI="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "payroll.tax-period": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-sqkUyrwZOeVrtx1dA0Ou1Tphr3E+mEIYYJAnD7mJdww=",
          "summary": "The UK PAYE tax week, tax month and payroll period number that a pay date falls in, weeks 53, 54 and 56 included.",
          "level": 2,
          "tags": [
            "payroll",
            "paye",
            "tax-week",
            "tax-month",
            "pay-period",
            "week-53",
            "hmrc",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0",
            "dates.uk-tax-year": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "payroll.tax-period-1.0.0.fune",
            "size": 12936,
            "sha256": "43ed19fe6b4dc194504b76282d6f3d032e7648e498f813adc6d7926c3cc38e4e",
            "languages": {
              "typescript": {
                "name": "payroll.tax-period-1.0.0-typescript.fune",
                "size": 9371,
                "sha256": "154a8a921529c8bced062ddf1d98ef58b337c836472d8506970aa688c8b792be",
                "integrity": "sha256-JaW9bZMgs0XBeYoVVqBM3+MIKyDcWFzFmc6QboCgJuU="
              },
              "python": {
                "name": "payroll.tax-period-1.0.0-python.fune",
                "size": 9295,
                "sha256": "95ab2d97efa8e853aa78867bf8e32f079b1ee57ac8d5326c844e46c249ed1a39",
                "integrity": "sha256-GF499aBbxR5UT6p4BZy1hoioD3bCY/wcueAdAyZU8XQ="
              },
              "rust": {
                "name": "payroll.tax-period-1.0.0-rust.fune",
                "size": 9902,
                "sha256": "df8a7f9d3af5c1724fa9a835941d94626e809c595e4ef82bc92a9cabb450d18e",
                "integrity": "sha256-DqOCYbp8Af2kWzEfBUD7NZpAhvKbdkSEp3TXyR2gbJM="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-n+68puAnI1DrYhtcfoDLygMSBvkALMZ59VqszGXMlJQ=",
          "summary": "The UK PAYE tax week, tax month and payroll period number that a pay date falls in, weeks 53, 54 and 56 included.",
          "level": 2,
          "tags": [
            "payroll",
            "paye",
            "tax-week",
            "tax-month",
            "pay-period",
            "week-53",
            "hmrc",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0",
            "dates.uk-tax-year": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "payroll.tax-period-1.0.1.fune",
            "size": 14493,
            "sha256": "aec12ac339e717be493bd6db1e7a8778fd8e04e4e8fe86674c1d4853d504fe83",
            "languages": {
              "typescript": {
                "name": "payroll.tax-period-1.0.1-typescript.fune",
                "size": 10928,
                "sha256": "332fec45876c4685738f0c78df7583d764064cc406241ccc473ab21b17f5a261",
                "integrity": "sha256-5lociqSXuDpx+MVwA97fWzvZUSW76OauJwrDc/BwaWY="
              },
              "python": {
                "name": "payroll.tax-period-1.0.1-python.fune",
                "size": 10852,
                "sha256": "cba5b007868bf7c8c805e138156014c327982bab1e46642e3eddea7e7a4d4cc2",
                "integrity": "sha256-+IHSUlYoEbWjSaQejdTFEqpQ3F4xsq4uW9UU444rDi0="
              },
              "rust": {
                "name": "payroll.tax-period-1.0.1-rust.fune",
                "size": 11459,
                "sha256": "7f399f75a3d63022aadfdb31e029aefb71d654c65ca63f813b0ab31e8231f863",
                "integrity": "sha256-Y3dW+c2z5aMLjWxTw7YMltODBYEDB9pHmfRg4/XcsK0="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "professional.utilisation": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-XCvs1qX/VR2dhcwUiFPDKrvULoJR86yaPYi5N3eAi84=",
          "summary": "Billable utilisation and billing, collection and overall realisation rates, in basis points.",
          "level": 1,
          "tags": [
            "utilisation",
            "utilization",
            "realisation",
            "realization",
            "billable-hours",
            "chargeable-hours",
            "recovery-rate",
            "kpi"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "professional.utilisation-1.0.0.fune",
            "size": 17094,
            "sha256": "f32bb3b6126fc9e69b155a7c56e388128aef8acae763806758ee20bb1b94c333",
            "languages": {
              "typescript": {
                "name": "professional.utilisation-1.0.0-typescript.fune",
                "size": 12177,
                "sha256": "73fb98f85f312dd3a992ddba8c4550c661d41e32b0174dd5a53a2b2103950c10",
                "integrity": "sha256-r9qmgw6sV2JQj8ooNAJ/Bb3fOIwv5hdgMMGsWXpQqMk="
              },
              "python": {
                "name": "professional.utilisation-1.0.0-python.fune",
                "size": 12177,
                "sha256": "dbef61fc33740d720067d98650a36d0583666211dd12f748872055f2addbc3c2",
                "integrity": "sha256-v1H6dG52kcQl0FosvX6bHGcVSxWrUmYN8GBXmQkwTsM="
              },
              "rust": {
                "name": "professional.utilisation-1.0.0-rust.fune",
                "size": 13058,
                "sha256": "40ea54d1204f0c901a8fc117ecbacd52ef5ea851aa4bdcaf7193dd963bb36b54",
                "integrity": "sha256-p5U1itT2tdaZxano4RYFFIC2BBTxxCVuHyfmS+CivzQ="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "professional.wip-valuation": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-OPSOmspr0Cz58TPSYKWjZqzGckf4dsEw2dcDTKkT1cs=",
          "summary": "Value unbilled time (work in progress) at cost or charge-out rates, less a write-down percentage.",
          "level": 2,
          "tags": [
            "wip",
            "work-in-progress",
            "unbilled-time",
            "lockup",
            "write-down",
            "valuation",
            "professional-services",
            "timesheet"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "money.apply-rate": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "professional.wip-valuation-1.0.0.fune",
            "size": 20532,
            "sha256": "85ce0dffecec883e8332a37bbc0897c3a983c6bc2e3f45e45df36fa9275d365c",
            "languages": {
              "typescript": {
                "name": "professional.wip-valuation-1.0.0-typescript.fune",
                "size": 15875,
                "sha256": "4437b446f62b5b8039b7afda390cfd19609394a1ca840c5143cedaabc44f8323",
                "integrity": "sha256-4tXMybtEOZ3oJ65fsvxaGYeSe7Hi7Jn7CtqRsU3p78A="
              },
              "python": {
                "name": "professional.wip-valuation-1.0.0-python.fune",
                "size": 15981,
                "sha256": "c54d81d143a73bb5b0b4e3f58ecbec1bce9fe8aadc1d8f0f96081b59823f01e8",
                "integrity": "sha256-zvUYekJq7iK/hfT6vlsKqoPXwhKAn4HF3do96GFs6LY="
              },
              "rust": {
                "name": "professional.wip-valuation-1.0.0-rust.fune",
                "size": 16666,
                "sha256": "6881765a7603a4ac84c5beecec42bc4d00f8956dbfc7a936b98871ab9b39144c",
                "integrity": "sha256-lIbk+pl2qKH6+IDZ0Q6XidOnGax1P8y4fOOF9tGd/oU="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "property.completion-statement": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-MfuFlnRR8aTeq6OPEGw/jrDBQDzk5M7OSSD6dM3s758=",
          "summary": "A buyer's completion statement: price less deposit, ground rent and service charge apportioned to completion, plus fees.",
          "level": 3,
          "tags": [
            "property",
            "conveyancing",
            "completion-statement",
            "apportionment",
            "ground-rent",
            "service-charge",
            "balance-due"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "finance.proration": "^1.0.0",
            "dates.days-between": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "property.completion-statement-1.0.0.fune",
            "size": 34327,
            "sha256": "1f9cfa17eae6a2cd7677174082df16b88414d40d7064502744dcc963f5e46977",
            "languages": {
              "typescript": {
                "name": "property.completion-statement-1.0.0-typescript.fune",
                "size": 25208,
                "sha256": "26a34e69e3a3cac1500946aa086a2c04cb8b1d6a8d498d1ab3eb4d5e3af974ce",
                "integrity": "sha256-QMfSAotUyLHtDp1Dbjlzl7eppUAA24+ZezrlOdWDgyw="
              },
              "python": {
                "name": "property.completion-statement-1.0.0-python.fune",
                "size": 25236,
                "sha256": "2922404bf44cd49e09767b513baf1cfa71d7c0032a238d6684f543c7599e67e7",
                "integrity": "sha256-+XWrUZT3oncgCxWCYqdSaaSNytCvV3hQ4QI3nvlLLtk="
              },
              "rust": {
                "name": "property.completion-statement-1.0.0-rust.fune",
                "size": 27703,
                "sha256": "4aa299cb782289f699f91b2d839032c0aa4d46b04e35d06b0e26e312af61563c",
                "integrity": "sha256-UclTZmfczdXtX1x2pHYow/Db+7AT9sImFDbtEMPBvQU="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-GTMI1ikcPpU9m6l5jxJ3M6mMRvR31p49IuoRadcs+DU=",
          "summary": "A buyer's completion statement: price less deposit, ground rent and service charge apportioned to completion, plus fees.",
          "level": 3,
          "tags": [
            "property",
            "conveyancing",
            "completion-statement",
            "apportionment",
            "ground-rent",
            "service-charge",
            "balance-due"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "finance.proration": "^1.0.0",
            "dates.days-between": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "property.completion-statement-1.0.1.fune",
            "size": 35483,
            "sha256": "c9e605bb8b5a9c475e6b8e65e6afe3a01464719068aede67f61941a640183d45",
            "languages": {
              "typescript": {
                "name": "property.completion-statement-1.0.1-typescript.fune",
                "size": 26364,
                "sha256": "401de653794825b4e71d429b5df83e27cad96e1977f35c03f3b0424941af78f7",
                "integrity": "sha256-qlEBEPQOWJPW/lJxi31snnwYVehhtaF6MOuvQDTenF4="
              },
              "python": {
                "name": "property.completion-statement-1.0.1-python.fune",
                "size": 26392,
                "sha256": "d8a7f251c3abe8830d52c0c5c2916fc826524f6752abbff39ba57084b26df61d",
                "integrity": "sha256-K0F2QCd3rbU9KkFMSwGxz3VUDAa15AzB9dhd5189ObQ="
              },
              "rust": {
                "name": "property.completion-statement-1.0.1-rust.fune",
                "size": 28859,
                "sha256": "032ad408d6435dd9a9677f24a26744dd0766718ae5a851971d0089184e254a9f",
                "integrity": "sha256-rYFvsQFJ4fgJZgHeGxKjt2+9j2dpDk7mItzZUKACCds="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "property.council-tax-band": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-+Oorqh4Yo5J2ILT30ksLmG5zGGWJenk27/T/aZ3sons=",
          "summary": "Council tax for a valuation band from the Band D charge: the statutory band ratio, England, Wales and Scotland.",
          "level": 1,
          "tags": [
            "property",
            "council-tax",
            "band-d",
            "valuation-band",
            "local-tax",
            "ratio",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/band-ratios.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "property.council-tax-band-1.0.0.fune",
            "size": 29095,
            "sha256": "1a72a2d3ced89b64a0d90456ce6679b108383c1bf7bd060cbb38c2a182bbd8cb",
            "languages": {
              "typescript": {
                "name": "property.council-tax-band-1.0.0-typescript.fune",
                "size": 22620,
                "sha256": "c049c9d0d448a04b3a4b923f5f6a3961a84b0cc3b88e5a7330b7fc9f7d5cd31a",
                "integrity": "sha256-j6TKGqJOfj/5HWYeuWUg/fEo8CveAmNuzydyxI64uDY="
              },
              "python": {
                "name": "property.council-tax-band-1.0.0-python.fune",
                "size": 22691,
                "sha256": "591fedc8577a700b2575048cfe7bb9dea8c5aae19753243522db31e91b6a6bda",
                "integrity": "sha256-sF1l25HcoVtZggoQBMsVEe43UZVhYnz2ifdeZO+VLfY="
              },
              "rust": {
                "name": "property.council-tax-band-1.0.0-rust.fune",
                "size": 23886,
                "sha256": "7d1ce100dcc2abe8737766e2ccee37153a3fa566eb907507f51c30aa058b5c05",
                "integrity": "sha256-Lzlxaq3fMOMBFplJqwC27dicSexHtZM0waIVHHnCgQM="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-JVIAwwzyL1/a5apJSzdLOjNWWf0GWoUKNF2GiUcHycM=",
          "summary": "Council tax for a valuation band from the Band D charge: the statutory band ratio, England, Wales and Scotland.",
          "level": 1,
          "tags": [
            "property",
            "council-tax",
            "band-d",
            "valuation-band",
            "local-tax",
            "ratio",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/band-ratios.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "property.council-tax-band-1.0.1.fune",
            "size": 29716,
            "sha256": "355c616f832065cc3e35cd650c52f0c2a82b81509dc6768132ae09c5468c25e6",
            "languages": {
              "typescript": {
                "name": "property.council-tax-band-1.0.1-typescript.fune",
                "size": 23233,
                "sha256": "edda5b407e0a8c8e2d393a7d78a03d386d90e5e3019a607f83e265a0f2ce014c",
                "integrity": "sha256-fHXzldshNZe/laYIqcyetlnmxv1wvN0ViU7Hzm4CAO8="
              },
              "python": {
                "name": "property.council-tax-band-1.0.1-python.fune",
                "size": 23312,
                "sha256": "d8e1e436896dd75cb10b2d7d50fce6488df261767be635e483287964020e56c9",
                "integrity": "sha256-Fu6V6cMeTaBOZ5d+f4wOU/y54GHTgKCwy4Qmc4J23dU="
              },
              "rust": {
                "name": "property.council-tax-band-1.0.1-rust.fune",
                "size": 24499,
                "sha256": "7390b273f18ef956032152b1e155d73132e59198cb98f9c1bdbbf9445f1f9ccb",
                "integrity": "sha256-yRmIfU/lpEfHmiPNFXywBiN5hxLfvsY7mkCrwKXW7ow="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.2": {
          "integrity": "sha256-Tv276h5LwK3/xPzCAPqU03BbKXOzgF4PRR0RVMLnzQo=",
          "summary": "Council tax for a valuation band from the Band D charge: the statutory band ratio, England, Wales and Scotland.",
          "level": 1,
          "tags": [
            "property",
            "council-tax",
            "band-d",
            "valuation-band",
            "local-tax",
            "ratio",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "data/band-ratios.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "property.council-tax-band-1.0.2.fune",
            "size": 31407,
            "sha256": "5f8b90e78d630afbffb126b21c594e6bb7a5a0bf3fff236c747fe911a51d6094",
            "languages": {
              "typescript": {
                "name": "property.council-tax-band-1.0.2-typescript.fune",
                "size": 24924,
                "sha256": "bf7fb133c6f5ffb16db20f87962527a929fc6ed1442e1c7513ec545a723595fe",
                "integrity": "sha256-fExR62VN+oR3OY1nYg+Vw9vI8f5pRWSmMYSKfyTYZtE="
              },
              "python": {
                "name": "property.council-tax-band-1.0.2-python.fune",
                "size": 25003,
                "sha256": "f10958083d7b30c4009dbd52a61bf19bca5ae692610db7a14f907fff4849df9c",
                "integrity": "sha256-2DCkdZpd/SKYFGu2zQnGFhToKPnE10S9HqqJu7tGn2g="
              },
              "rust": {
                "name": "property.council-tax-band-1.0.2-rust.fune",
                "size": 26190,
                "sha256": "b5c93c499809ff68ee1eca21eb053a5bb903393bddc1c7b649710670a3645d4c",
                "integrity": "sha256-UBZGscU7RBWDxDFxN+C52tHIq/lPP2kkPaMq7Z2fELE="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "property.deposit-cap": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-VplhgvjwEbfsfAKfqwTg5+p7Ubid7SL454AqzkH/bJ4=",
          "summary": "Maximum tenancy deposit a landlord may take: five or six weeks' rent under the Tenant Fees Act 2019.",
          "level": 1,
          "tags": [
            "property",
            "lettings",
            "tenancy-deposit",
            "deposit-cap",
            "tenant-fees-act",
            "landlord",
            "rent",
            "security-deposit"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/deposit-caps.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "property.deposit-cap-1.0.0.fune",
            "size": 23485,
            "sha256": "b56c6062814945c1d963a228be68dd265c98c4696e736c876dab11797c4ee986",
            "languages": {
              "typescript": {
                "name": "property.deposit-cap-1.0.0-typescript.fune",
                "size": 16207,
                "sha256": "cc604fdf72d17a2a284e8443c8da9813e20ba1549a4c6da53eadaea4a9e6eddb",
                "integrity": "sha256-gYB1yJ0jHIcg80yGhhijCE+fLA0m9q2hoYUDUZN8hRk="
              },
              "python": {
                "name": "property.deposit-cap-1.0.0-python.fune",
                "size": 16264,
                "sha256": "4728383974c7b934f7ecc852090a1ca5b0c693c2e2eef1d133bdb7b7fb441ef9",
                "integrity": "sha256-ETIdnh5SrtRXY7VnicEBiK6/Qc0SSattGM2yzKkMmmc="
              },
              "rust": {
                "name": "property.deposit-cap-1.0.0-rust.fune",
                "size": 17344,
                "sha256": "3a18878e421b9896c10bd09f8165213200603aa94a1238055c6f10eb0d78ee73",
                "integrity": "sha256-nO979LDMLecwiSLvtndfuLQVGJg4tY3Q8Z1lYpdPZ1M="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-Ipru/xeeRT2HgTLVoyhdmWgaOwuCgSst4MRte97szts=",
          "summary": "Maximum tenancy deposit a landlord may take: five or six weeks' rent under the Tenant Fees Act 2019.",
          "level": 1,
          "tags": [
            "property",
            "lettings",
            "tenancy-deposit",
            "deposit-cap",
            "tenant-fees-act",
            "landlord",
            "rent",
            "security-deposit"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/deposit-caps.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "property.deposit-cap-1.0.1.fune",
            "size": 24118,
            "sha256": "2cf87083727022e584c3d0ebbe2d647a5870b43c473f9b488426a4c5a3c22539",
            "languages": {
              "typescript": {
                "name": "property.deposit-cap-1.0.1-typescript.fune",
                "size": 16832,
                "sha256": "657a999fe00cf25d66d3ed9dd199ad33f6f5437cf85e62031cdb01d557b09bff",
                "integrity": "sha256-jZpV99LNI5idUN9xYFCof2SDgP7ASvX16xaSyqRg9gc="
              },
              "python": {
                "name": "property.deposit-cap-1.0.1-python.fune",
                "size": 16897,
                "sha256": "6c1ab0cd5802a02078e2c4a6c1c9301a069704bdc19edfabfc46d577a634b28c",
                "integrity": "sha256-iZ1qdvzZFtvcZaFMu4Mj120edHQ0eXlvEnPNb27p9x0="
              },
              "rust": {
                "name": "property.deposit-cap-1.0.1-rust.fune",
                "size": 17969,
                "sha256": "e7a754f2b433904b24ea89b2527868e8a47b0db46ef1ccabb3ac078f49a0c3da",
                "integrity": "sha256-NlrbcxRoQpSKjGCqguT79oRXV05euJhhFrMC5KYvlB8="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.2": {
          "integrity": "sha256-nZp4yFsiz/nr7faWUr4vxv9jCNAh4r92S5Cj/UJNXAA=",
          "summary": "Maximum tenancy deposit a landlord may take: five or six weeks' rent under the Tenant Fees Act 2019.",
          "level": 1,
          "tags": [
            "property",
            "lettings",
            "tenancy-deposit",
            "deposit-cap",
            "tenant-fees-act",
            "landlord",
            "rent",
            "security-deposit"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "data/deposit-caps.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "property.deposit-cap-1.0.2.fune",
            "size": 25804,
            "sha256": "95c34f3aa1cf27cc69d6a003d2105754225142fe70affebf4fca94b38300fb8e",
            "languages": {
              "typescript": {
                "name": "property.deposit-cap-1.0.2-typescript.fune",
                "size": 18518,
                "sha256": "75834a5a7a7625fa6e396d5eed84a602209b1dc510de9cd5d5b06000cd23fbbf",
                "integrity": "sha256-i4kEgF2U4LItCmM5MkhC81u1eNR3jsbqPkpc4AIQMoU="
              },
              "python": {
                "name": "property.deposit-cap-1.0.2-python.fune",
                "size": 18583,
                "sha256": "8a332ea47cb2548b1e252e1339c0e5d75da75648889d5bf885f998b16328a712",
                "integrity": "sha256-2V7fLeMnO8cOT1k+ln2qmrDFBerKSsFvXk7NnBbPSvA="
              },
              "rust": {
                "name": "property.deposit-cap-1.0.2-rust.fune",
                "size": 19655,
                "sha256": "677c4ab2eabf838649c2f9a0520c1c50d1dc9a20b927a0229a87d52e2cf7382d",
                "integrity": "sha256-xQbd3X+tWMXn5kv2CaVkvrRGye4H5xzKvGZJLSXABQo="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "property.floor-area": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-IhUT8ITcGm8H1hKkiksAm8m/6wCOD/igJLXlZubFofw=",
          "summary": "Floor area from room lengths and widths, exactly, with the total in both square metres and square feet.",
          "level": 1,
          "tags": [
            "property",
            "floor-area",
            "square-feet",
            "square-metres",
            "sq-ft",
            "room-dimensions",
            "gia",
            "measurement"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "units.convert": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "property.floor-area-1.0.0.fune",
            "size": 19410,
            "sha256": "1d61ab42c79adb922f1fa4e036ba46b288c591b0579a04ac64e2de69a39b9d9b",
            "languages": {
              "typescript": {
                "name": "property.floor-area-1.0.0-typescript.fune",
                "size": 13139,
                "sha256": "b378c9cae199090a499f7a0e51a7e3381360d179d6b7785e254050fde65b1661",
                "integrity": "sha256-yQu7tOHMGIeG/u+6g4mib1zivnvwD28eJVkB94samQw="
              },
              "python": {
                "name": "property.floor-area-1.0.0-python.fune",
                "size": 13019,
                "sha256": "dd1cde780cb39dc53aba408080fb78ec691e7c6baf359180cb96aaf4de457b8a",
                "integrity": "sha256-5c2oIIQW1QtqFBbafVbvsFdbLnpVzVQbn0IM5bYHvJM="
              },
              "rust": {
                "name": "property.floor-area-1.0.0-rust.fune",
                "size": 14828,
                "sha256": "092f46bed319464be501d8893c9d683e6fab115dc95d3d55c6bc87538313aa65",
                "integrity": "sha256-JCkjwO4FMaRNzW0GnzokjJtAaUHl51eyu4eOvNafPxk="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-6DtauKAcEOgpC5LFAYUK11p8OVv8wyjhMbZUypkswRY=",
          "summary": "Floor area from room lengths and widths, exactly, with the total in both square metres and square feet.",
          "level": 1,
          "tags": [
            "property",
            "floor-area",
            "square-feet",
            "square-metres",
            "sq-ft",
            "room-dimensions",
            "gia",
            "measurement"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "units.convert": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "property.floor-area-1.0.1.fune",
            "size": 20088,
            "sha256": "bdbfd1ea4f7cf4b2b2e5d20aa29c9a72d58d6890b097ea72c84833944e02f956",
            "languages": {
              "typescript": {
                "name": "property.floor-area-1.0.1-typescript.fune",
                "size": 13815,
                "sha256": "43beff004a21448e8e7a8fbacca3ba1b6c1f152b7bf73731e6d01a51be45644b",
                "integrity": "sha256-6+SVb+Y9f/264j0gkcngx+nSOuTAVKF+9tDFby4x+9w="
              },
              "python": {
                "name": "property.floor-area-1.0.1-python.fune",
                "size": 13697,
                "sha256": "0a8bfd818bd1352b61affb0e0141e3ed0e24895b29487dca091cf2eeda1f6707",
                "integrity": "sha256-msW9GHhKTVWZvRyhhTXv+fElKeVz7sCqyNvgE0LV/mg="
              },
              "rust": {
                "name": "property.floor-area-1.0.1-rust.fune",
                "size": 15504,
                "sha256": "a6b066c1b7454d8cb5749f34d04e8c92b011df96ae3228e2b439a3d15ffe44d8",
                "integrity": "sha256-rV/URzesTmvCZ1kaSvq8yr8r4tPwLrd/ZxdoCxbwBG0="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.2": {
          "integrity": "sha256-qA1wSXHSSyz8bXU0C/6YIkCA73duImw/j7FOiFzhlwc=",
          "summary": "Floor area from room lengths and widths, exactly, with the total in both square metres and square feet.",
          "level": 1,
          "tags": [
            "property",
            "floor-area",
            "square-feet",
            "square-metres",
            "sq-ft",
            "room-dimensions",
            "gia",
            "measurement"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "units.convert": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "property.floor-area-1.0.2.fune",
            "size": 21244,
            "sha256": "f59699a3b1318c87c90a61fe248c8ef838984c17b27452ee4d538dcd807727ed",
            "languages": {
              "typescript": {
                "name": "property.floor-area-1.0.2-typescript.fune",
                "size": 14971,
                "sha256": "17e825e563fa0b71ca2fb2715d8e64d6752617f92f883f3fcec4e917cd05ff6b",
                "integrity": "sha256-uz40K2yTt4QG30rETOi00F5nWZt/Fr+bxcvV0ucy7aY="
              },
              "python": {
                "name": "property.floor-area-1.0.2-python.fune",
                "size": 14853,
                "sha256": "b03946797d042015c1ea4ddf625cc549880b9d7d38aaff46294319d362220410",
                "integrity": "sha256-ZPYfy/POgbfdlLgFO4GmBidgcLb3X58U/VqAYsCECqA="
              },
              "rust": {
                "name": "property.floor-area-1.0.2-rust.fune",
                "size": 16660,
                "sha256": "4361ee5ec327a6d12404c1f344386d0f25f588da92fb1f5d07d8f6e0a5bd33d5",
                "integrity": "sha256-mosgbMnDmWle3sa+JcSkaoYaE82ADgl0z31xGEGJPUA="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "property.holding-deposit-cap": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-HrzNjLr0mbexn5EDKV5bWqMdmx8RRskfwlCl5V3yBiE=",
          "summary": "Maximum holding deposit to reserve a rental property: one week's rent (annual rent ÷ 52), rounded down.",
          "level": 1,
          "tags": [
            "property",
            "lettings",
            "holding-deposit",
            "reservation-fee",
            "tenant-fees-act",
            "landlord",
            "rent"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "property.deposit-cap": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "property.holding-deposit-cap-1.0.0.fune",
            "size": 10083,
            "sha256": "a1a3d163ad3c1f63cbe46f37fb76cd9f358f35aaf39b59a3da715de89a5f1f11",
            "languages": {
              "typescript": {
                "name": "property.holding-deposit-cap-1.0.0-typescript.fune",
                "size": 7613,
                "sha256": "36be3f0afe798e391806ceb672e8076d23f3b8a5bdf10a2db37e79b0ae22e157",
                "integrity": "sha256-6NDEX7M3vkeiTH/lRt2vrMEty1y0s/9EyMpO7IrEktw="
              },
              "python": {
                "name": "property.holding-deposit-cap-1.0.0-python.fune",
                "size": 7527,
                "sha256": "8c8bc440f5ebe6932286af58f45bfc9d545e8ea35eb24cd65db3d46d808b5683",
                "integrity": "sha256-H3xbQz3sKA+JO/6q5qFVSQcsO28rm3smev/JUU2FK9o="
              },
              "rust": {
                "name": "property.holding-deposit-cap-1.0.0-rust.fune",
                "size": 7741,
                "sha256": "7cb82941ac923b109967b3a055259c70aff3889e1738a873f0e7fb98a9e3cd2d",
                "integrity": "sha256-i8FZmFb1pu3WneBBvZl3EglegbfHmS7k09ksqmFwZyU="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-F7NbiAmZKTUNGq9M0rrvdEkckx0Wa8RSO+UWThah1Rg=",
          "summary": "Maximum holding deposit to reserve a rental property: one week's rent (annual rent ÷ 52), rounded down.",
          "level": 1,
          "tags": [
            "property",
            "lettings",
            "holding-deposit",
            "reservation-fee",
            "tenant-fees-act",
            "landlord",
            "rent"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "property.deposit-cap": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "property.holding-deposit-cap-1.0.1.fune",
            "size": 11239,
            "sha256": "18782f7abf08ee38fcfae99fa5b97ff4c87979119dc200dae05ddd30544d6001",
            "languages": {
              "typescript": {
                "name": "property.holding-deposit-cap-1.0.1-typescript.fune",
                "size": 8769,
                "sha256": "894d623ffeafec004d99045941cce287045ff442a0ab895d83340594432263f8",
                "integrity": "sha256-0VzWe5FtFE3qPFTOqrTEIeUvUV97y4jtVfzPnzc+eRU="
              },
              "python": {
                "name": "property.holding-deposit-cap-1.0.1-python.fune",
                "size": 8683,
                "sha256": "186b753f5653e75d4d4c3984c29b9fcfa895144fc9acfb706bec7a2474f914c4",
                "integrity": "sha256-KEvplMK0qOD811g7lAWgn6ARWjP+fDIp8ntcqW5ElL0="
              },
              "rust": {
                "name": "property.holding-deposit-cap-1.0.1-rust.fune",
                "size": 8897,
                "sha256": "a6e3b8747efae3b37843d8068a8483531a55a368eaa1685dd8b7776d12547fec",
                "integrity": "sha256-TfUe3YVAtjG4N1QiJmLwfbjdo0zLOfSy4udsEI+5xU8="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "property.mortgage-affordability": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-uD8GJrJneFp7mrhq62ToNacydLhXeZrziKglVsYBm2c=",
          "summary": "Mortgage affordability: the loan-to-income multiple and a stress-tested repayment against income, both checked.",
          "level": 2,
          "tags": [
            "property",
            "mortgage",
            "affordability",
            "income-multiple",
            "loan-to-income",
            "lti",
            "stress-test",
            "borrowing"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "lending.affordability": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "property.mortgage-affordability-1.0.0.fune",
            "size": 23702,
            "sha256": "c21373cf87be1b2371401c4a94dde8cf05b3576404af90e365b48bae5c91586d",
            "languages": {
              "typescript": {
                "name": "property.mortgage-affordability-1.0.0-typescript.fune",
                "size": 17779,
                "sha256": "17092fad3dbc2a8d61afcaea933b465a76b8affa9f109b128604fbd2ae9886ae",
                "integrity": "sha256-m7kD6f29NDSh8KdyCdvcMvqxihrZgbrTN+i+iVfy158="
              },
              "python": {
                "name": "property.mortgage-affordability-1.0.0-python.fune",
                "size": 17786,
                "sha256": "6dbbcdd96e470d1db5f5154907ed7756d81891b7099eeade96da20fbbe417c35",
                "integrity": "sha256-IQVxC5rXnGPcx3VqIcpKN1QBK3C3ejyO7ckuMk6BM20="
              },
              "rust": {
                "name": "property.mortgage-affordability-1.0.0-rust.fune",
                "size": 18853,
                "sha256": "011c759bc90506127b381d0553ccefacfd88d83586338286a422d45d10974636",
                "integrity": "sha256-unr8VD6xr9hHKoyppOqzLhdXMlHDFe+HTtcPoRD8R5g="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-Q4e2Vs3xZ1JSBmITRNt1qg1u6FAULCE/7HvspkA5/I8=",
          "summary": "Mortgage affordability: the loan-to-income multiple and a stress-tested repayment against income, both checked.",
          "level": 2,
          "tags": [
            "property",
            "mortgage",
            "affordability",
            "income-multiple",
            "loan-to-income",
            "lti",
            "stress-test",
            "borrowing"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "lending.affordability": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "property.mortgage-affordability-1.0.1.fune",
            "size": 24858,
            "sha256": "570381df9685b75339ee22fedf93eb8ab2f7d05aba48c4de45b125cea93163aa",
            "languages": {
              "typescript": {
                "name": "property.mortgage-affordability-1.0.1-typescript.fune",
                "size": 18935,
                "sha256": "edffb3dc901d5ff9ebcd01d129f64a877d4f769d2c868c5116fec37b160bcbaa",
                "integrity": "sha256-AegHrTtEriWomQBKqk+t/IsNgkrHrNVqCs/djhkX0IY="
              },
              "python": {
                "name": "property.mortgage-affordability-1.0.1-python.fune",
                "size": 18942,
                "sha256": "d2c312c7e34882241bae1ecb9b69ca97befb88e897bafa168b789873b72f73c0",
                "integrity": "sha256-/ctbqDRFgpSht4BMMb/bsHi1P+WExMEyBOnp16MbWTw="
              },
              "rust": {
                "name": "property.mortgage-affordability-1.0.1-rust.fune",
                "size": 20009,
                "sha256": "e1681c8dac52787934a777442153026f2502ab446c1c41ab1a3c39f9ba1d9412",
                "integrity": "sha256-7FW/DVu7mvQPmPX+0Y1R+V6K4m1A5r3+tU4iCEJy2L8="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "property.rent-proration": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-rIlatwopolz+Z8OT7HHyO34kwNr1WnO/i86pVi6O2XE=",
          "summary": "Rent for part of a month from the monthly rent, by the annual-daily or the calendar-month method.",
          "level": 1,
          "tags": [
            "property",
            "rent",
            "proration",
            "apportionment",
            "part-month",
            "daily-rate",
            "lettings",
            "pro-rata"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "dates.add-days": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "property.rent-proration-1.0.0.fune",
            "size": 16876,
            "sha256": "5b6be9048d5ecd7b61cb256ee32daf2cbe2c93ff7cf3d62ddc83b0a2e3665b5c",
            "languages": {
              "typescript": {
                "name": "property.rent-proration-1.0.0-typescript.fune",
                "size": 12258,
                "sha256": "7aa8b3e8635ccb17a59f4f0512789382f6f8f60702de68ef9703a6f317551b27",
                "integrity": "sha256-r4tIWvfBeC0NJXbvfLQqGfpnDvZk/cAufAbCnjT66sc="
              },
              "python": {
                "name": "property.rent-proration-1.0.0-python.fune",
                "size": 12151,
                "sha256": "23538e46649cbeba57946f39b067e53a0030cb1c7de76ea3fdc234eb41edfa21",
                "integrity": "sha256-Kp/lPeLG2P2aai6MV9lnCFb/6crGElrb8SKlN1jctQs="
              },
              "rust": {
                "name": "property.rent-proration-1.0.0-rust.fune",
                "size": 12677,
                "sha256": "f25043e02e758b17cb2238a837c6aeee58faa74e1ecfb7a53c805b7814b5b567",
                "integrity": "sha256-DyVHfmmjyEcMNPSh/veTsWn5lAh9PPneH8+RfGkv5uc="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-blrsGUDsXvRjwQu7Zq/o7zMqXBsO7/bWIL5bz4a1YeQ=",
          "summary": "Rent for part of a month from the monthly rent, by the annual-daily or the calendar-month method.",
          "level": 1,
          "tags": [
            "property",
            "rent",
            "proration",
            "apportionment",
            "part-month",
            "daily-rate",
            "lettings",
            "pro-rata"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "dates.add-days": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "property.rent-proration-1.0.1.fune",
            "size": 18032,
            "sha256": "5e43d8959fd00770ddbbfc4387dfd7fa97fe2a51efc1a64bb5ad9cbbe25c7ad9",
            "languages": {
              "typescript": {
                "name": "property.rent-proration-1.0.1-typescript.fune",
                "size": 13414,
                "sha256": "ddf2612fce5de4a303dec4d616264233880f6bfb094f0249436ab3d0beebf279",
                "integrity": "sha256-BEUURQHVJml9jGFqKEBfXvlzQlqZKHDouxwa8DSn+es="
              },
              "python": {
                "name": "property.rent-proration-1.0.1-python.fune",
                "size": 13307,
                "sha256": "24099e31fab7c1505c16316c72316254313befbd78468a069b340f8ab27de7bb",
                "integrity": "sha256-Vylfz0kCdlfIq4btFmA62mEF2S3vdTm9InZisKMKl1E="
              },
              "rust": {
                "name": "property.rent-proration-1.0.1-rust.fune",
                "size": 13833,
                "sha256": "f41d673a1327c5a20ea6cddaeab603561a618af586065a704fe92dfbe2c819e4",
                "integrity": "sha256-q4EES7gLopsmQ2sks983L5cleO3hcwFZYGXhRit0rw8="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "property.rent-review": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-iHKIn+FeHhAm0Zj5qZT7fl3RZcX0g5vTYN7bSiV3XOk=",
          "summary": "New rent after an index-linked (CPI/RPI) rent review, with an optional collar and cap and upward-only option.",
          "level": 2,
          "tags": [
            "property",
            "rent-review",
            "index-linked",
            "cpi",
            "rpi",
            "collar",
            "cap",
            "upward-only",
            "commercial-lease"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "property.rent-review-1.0.0.fune",
            "size": 23138,
            "sha256": "11f422817ecdd81cdfd1978d0b5952d1439bfd09691e5e2fef8fc0e5aa29d59e",
            "languages": {
              "typescript": {
                "name": "property.rent-review-1.0.0-typescript.fune",
                "size": 16088,
                "sha256": "d195a01ad00ec3aedf5088b6cedfb6ce952de7efb5e2b072e9f6739a907b29f9",
                "integrity": "sha256-D94Qok8FkaKk24vZo0xezO9sySmkAn/9CBs6/YiY28k="
              },
              "python": {
                "name": "property.rent-review-1.0.0-python.fune",
                "size": 16168,
                "sha256": "62c6938254e8687d3b8744aa7cb8758e7488303b066723571d2617fae20fbc05",
                "integrity": "sha256-GgzLHd8yQQGM/BjWTfLQKVtMdaUWsVPT74hdDxk6q4M="
              },
              "rust": {
                "name": "property.rent-review-1.0.0-rust.fune",
                "size": 17394,
                "sha256": "dfd7cc05e3b96d7b4b82e47a0de46c5ba1b53197d482fb03b58ba50e2812178b",
                "integrity": "sha256-tVOeSlyBJYySUAvGXl/EkcnN+W8Wu3SYmnaCgWXODA8="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-051MeHLxo5M2ycfgg45iCXBEjO27RZ6oqzshEIopzDM=",
          "summary": "New rent after an index-linked (CPI/RPI) rent review, with an optional collar and cap and upward-only option.",
          "level": 2,
          "tags": [
            "property",
            "rent-review",
            "index-linked",
            "cpi",
            "rpi",
            "collar",
            "cap",
            "upward-only",
            "commercial-lease"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "property.rent-review-1.0.1.fune",
            "size": 24294,
            "sha256": "a99fdebf211fc8b8352ce6c5280a8c91645000b6a5b3b61bc5c61c419be7c331",
            "languages": {
              "typescript": {
                "name": "property.rent-review-1.0.1-typescript.fune",
                "size": 17244,
                "sha256": "ebdc5221bbdf028fa51c2ad470cacff936fad53e77d7830a4954a1f6cb6ab545",
                "integrity": "sha256-KBTVOWyKxHkZl4iTW62FYpkjhOsIMz4UVw7ZEhFAEg4="
              },
              "python": {
                "name": "property.rent-review-1.0.1-python.fune",
                "size": 17324,
                "sha256": "1b555a6ba6ab3717ea3e5553853164507001cdbd6adefe17adeef91414df550d",
                "integrity": "sha256-AqIp6EtPctH9EpwlX5DdzCkui611bm3kVl/LX9V9iyA="
              },
              "rust": {
                "name": "property.rent-review-1.0.1-rust.fune",
                "size": 18550,
                "sha256": "6d115af281e128f6bca9da261bc80b6413f7208ed42371619ef02b4427866876",
                "integrity": "sha256-HutQQcWCO8y082Q1FsIULbPZQAOWqFVfenGxcZN+o7I="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "property.rental-yield": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-CjuwX4eMAiR8cN5SJ7Z37ZFwXsW4mwduNCNvXVzCnU4=",
          "summary": "Gross and net rental yield of a let property, in basis points, from annual rent, costs and value.",
          "level": 1,
          "tags": [
            "property",
            "rental-yield",
            "yield",
            "buy-to-let",
            "landlord",
            "return",
            "rent",
            "investment"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "property.rental-yield-1.0.0.fune",
            "size": 14835,
            "sha256": "fd0cf9dd43e2da31dd70b59d5d67108302fd5759bd83b49b5dcbb93d72c279ae",
            "languages": {
              "typescript": {
                "name": "property.rental-yield-1.0.0-typescript.fune",
                "size": 10713,
                "sha256": "0f93179f7e53505e483306321550115b107ed3f52b528db91155c53c70389ab9",
                "integrity": "sha256-SeCzaBvTPTxql1OHMpSI3P0dnW4PLVOJeWn+I4qoSBw="
              },
              "python": {
                "name": "property.rental-yield-1.0.0-python.fune",
                "size": 10633,
                "sha256": "49663bd9bfb99dbcff6e534a5981bf0edca9deb128bccdb9d79a5715ff2806cf",
                "integrity": "sha256-q7QBmnsa+Y1Z8Xja/xkRtrtjqw0/xvkCMB2rFVe2fmw="
              },
              "rust": {
                "name": "property.rental-yield-1.0.0-rust.fune",
                "size": 11333,
                "sha256": "5a1a5efe6dd072448c761cf8711119c12a7693573a312f2f1209c2672a60f31e",
                "integrity": "sha256-/Hn7npwAuOMhwfpSpffGLjs0Sq14STSGjzJ1qAfIJZ0="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-x62wKz7Az4O0/dKfRQ/lxa3mrejjwgpU6CM0NzwhGIc=",
          "summary": "Gross and net rental yield of a let property, in basis points, from annual rent, costs and value.",
          "level": 1,
          "tags": [
            "property",
            "rental-yield",
            "yield",
            "buy-to-let",
            "landlord",
            "return",
            "rent",
            "investment"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "property.rental-yield-1.0.1.fune",
            "size": 15991,
            "sha256": "3e882f7973bc1f8825bfd157c4753a5bf3177593459909e2f106244e03404142",
            "languages": {
              "typescript": {
                "name": "property.rental-yield-1.0.1-typescript.fune",
                "size": 11869,
                "sha256": "76fc4ef134d43c333f06675933e0124c3a30408380f47904f4a86f625706c3aa",
                "integrity": "sha256-dS1IKYSHEX24cIxwPY2cxFK0JRtdGZTs3uJ+krfgDmI="
              },
              "python": {
                "name": "property.rental-yield-1.0.1-python.fune",
                "size": 11789,
                "sha256": "ae09523e2bd5bd7dd722412dcf6a948db5d4c5804c28649714f10cdd931b7953",
                "integrity": "sha256-f5MCFBS2+c9d8EolkGcq1FyEGLD8Pypgd2eEEKDtgpM="
              },
              "rust": {
                "name": "property.rental-yield-1.0.1-rust.fune",
                "size": 12489,
                "sha256": "0b07ca2cae7459f99157bc9801ef0ccdf06a93da01169479296775c10f7aa982",
                "integrity": "sha256-I2UyTD2U3+IetkSqVxczLLev5G3WXW6Bf16P6x9dmd0="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "property.service-charge-apportion": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-QNkAZZ92OpCrLt1ZG7nZG7U9hskWtmC+CJolIRlvn4I=",
          "summary": "Apportion a service charge across units by lease fraction, floor area or fixed percentage, exact to the penny.",
          "level": 2,
          "tags": [
            "property",
            "service-charge",
            "apportionment",
            "leasehold",
            "block-management",
            "floor-area",
            "share"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.gcd-lcm": "^1.0.0",
            "money.amount": "^1.0.0",
            "money.allocate": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "property.service-charge-apportion-1.0.0.fune",
            "size": 25609,
            "sha256": "d3707eea6034faf42e1f93d8e5f7f70fb9c2b3309aa32d52fce942729d6f5c39",
            "languages": {
              "typescript": {
                "name": "property.service-charge-apportion-1.0.0-typescript.fune",
                "size": 18620,
                "sha256": "95ddcab3c8b734fe5814d2e32d806929ad7ccb8aa13bfb86fc20f1a852a63924",
                "integrity": "sha256-yHxVGwys8ho1hZDLm/0x6qsPdRerbzZbh5foaNw5hSA="
              },
              "python": {
                "name": "property.service-charge-apportion-1.0.0-python.fune",
                "size": 18587,
                "sha256": "1614f92266822c24c4e064e491072b4c30a12ba1ac00e8c020c2b84b9c020abc",
                "integrity": "sha256-/ERVUJ+IYKrSyqAVtWFueWDQQKPHiwqtpgpDbS/AKus="
              },
              "rust": {
                "name": "property.service-charge-apportion-1.0.0-rust.fune",
                "size": 20102,
                "sha256": "8ace334a4735d7305ec9ad1ad7b3fd1c104c446a56c1ea93d0ea94d03a482ea2",
                "integrity": "sha256-O+OocUBc8adA0rPyUuF7dGHI/u7BytwFc1fjpZDlejg="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-UCdNNM6t2VNi7bSCbf2yPhS7uQRJFaVxA93N2X3LJYA=",
          "summary": "Apportion a service charge across units by lease fraction, floor area or fixed percentage, exact to the penny.",
          "level": 2,
          "tags": [
            "property",
            "service-charge",
            "apportionment",
            "leasehold",
            "block-management",
            "floor-area",
            "share"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.gcd-lcm": "^1.0.0",
            "money.amount": "^1.0.0",
            "money.allocate": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "property.service-charge-apportion-1.0.1.fune",
            "size": 26765,
            "sha256": "5e9bff52e0f5eefba43b53d17b7c1b4ee788f4c0b2362f3c0ed1410b67baeaf1",
            "languages": {
              "typescript": {
                "name": "property.service-charge-apportion-1.0.1-typescript.fune",
                "size": 19776,
                "sha256": "1ff7081b6ac6ce794cfea476f66dc75cc5645ceb2ccfe5012a607d5eb5a133f9",
                "integrity": "sha256-z9SMibbup9Xwgbfd3GPHz4j2Yz1bF0sWQ4sD3SX2/lo="
              },
              "python": {
                "name": "property.service-charge-apportion-1.0.1-python.fune",
                "size": 19743,
                "sha256": "2a850fa88ab2c99213f03e46decfdaf0f77d401d410523b0e10cd629e74a5182",
                "integrity": "sha256-3oEYyu78VWkYEIHe5s5Hy29V8FVuKX+EibuzS7KiBCU="
              },
              "rust": {
                "name": "property.service-charge-apportion-1.0.1-rust.fune",
                "size": 21258,
                "sha256": "4d82e546c11a5252768e3865fedf30335a6e2641f40dd12297fbca3e9e6508b5",
                "integrity": "sha256-mbdcwjkLp275Tv317rKCkpuNBsIbXsdd0MIxngqIB30="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "property.stamp-duty": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-2433LwwE9OnfdQbE8CsytJz5sOoVyNqKiCaqGbUDCik=",
          "summary": "Stamp duty on a property purchase: SDLT (England, NI), LBTT (Scotland), LTT (Wales), with reliefs and surcharges.",
          "level": 2,
          "tags": [
            "property",
            "stamp-duty",
            "sdlt",
            "lbtt",
            "ltt",
            "land-transaction-tax",
            "first-time-buyer",
            "additional-dwelling-supplement"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/bands.json",
            "data/surcharges.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "property.stamp-duty-1.0.0.fune",
            "size": 129189,
            "sha256": "fcd3d2d8bd1ad9d340cf7d48b2397b61661731d25e301809dc084f1f4f9c2100",
            "languages": {
              "typescript": {
                "name": "property.stamp-duty-1.0.0-typescript.fune",
                "size": 112493,
                "sha256": "a06bd49cfd5dababbb9191391c67dde7d8bd4df98c16703c9942a917ca1a8bdf",
                "integrity": "sha256-oYxHNOvX+PPapwcS5sPMVBvZnEC/lLKqaKpj78sV1Pw="
              },
              "python": {
                "name": "property.stamp-duty-1.0.0-python.fune",
                "size": 112538,
                "sha256": "bb8fe77ea14cc50149e47421c9b7324ca32d1101559883360c6df49977b4556a",
                "integrity": "sha256-Q0mpsOVQxNTdnFpia0NIlkg3foyAmYutXfn/J/Df8mo="
              },
              "rust": {
                "name": "property.stamp-duty-1.0.0-rust.fune",
                "size": 115222,
                "sha256": "3f9465e24755c0c8aebd5b03e03f098175cd796ca2a01524d391a4fb99c26fc1",
                "integrity": "sha256-RTWhvTdIMy/1+Mqc0q3LPBSeYtDuHQH/wf+StLDwkIE="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-/Qqo2BYVXuTiNhJuUi3ZOjcaBAHNl3rTugHdGJu6B8E=",
          "summary": "Stamp duty on a property purchase: SDLT (England, NI), LBTT (Scotland), LTT (Wales), with reliefs and surcharges.",
          "level": 2,
          "tags": [
            "property",
            "stamp-duty",
            "sdlt",
            "lbtt",
            "ltt",
            "land-transaction-tax",
            "first-time-buyer",
            "additional-dwelling-supplement"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/bands.json",
            "data/surcharges.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "property.stamp-duty-1.0.1.fune",
            "size": 130204,
            "sha256": "c5b7dacc19b5e34500470e65f5143c37b58c31208c0822ceb32d5f068acb813a",
            "languages": {
              "typescript": {
                "name": "property.stamp-duty-1.0.1-typescript.fune",
                "size": 113500,
                "sha256": "0ec2a53dc40e52f5002d53d728dc658d1180221a606640b1334c7953f8ecb8c5",
                "integrity": "sha256-Emqys5v2bF7uACqto+OOuCFSQFZ0mnBiECriXpjMQD8="
              },
              "python": {
                "name": "property.stamp-duty-1.0.1-python.fune",
                "size": 113553,
                "sha256": "47fde859fe5140ff4eaf33c07eedecda20e079b84c8cbbb99151a721d432b2e9",
                "integrity": "sha256-rwSOy+K+C5h590n6mEa75HBdQGFQO7nl/RQpfUcnvW0="
              },
              "rust": {
                "name": "property.stamp-duty-1.0.1-rust.fune",
                "size": 116229,
                "sha256": "6ec126a8ea80cb4d32099e91a891ee4566dd6c373881f2c7c638f4bfb2ee354b",
                "integrity": "sha256-QDHU9XZiOLLQ+XV1Aj9Ag/cdrM2iVNOvooL6u74SK7I="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.2": {
          "integrity": "sha256-983oTuVmOiPcYZvjYptynOYztJ129r+LrLb61JVujf4=",
          "summary": "Stamp duty on a property purchase: SDLT (England, NI), LBTT (Scotland), LTT (Wales), with reliefs and surcharges.",
          "level": 2,
          "tags": [
            "property",
            "stamp-duty",
            "sdlt",
            "lbtt",
            "ltt",
            "land-transaction-tax",
            "first-time-buyer",
            "additional-dwelling-supplement"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "data/bands.json",
            "data/surcharges.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "property.stamp-duty-1.0.2.fune",
            "size": 131821,
            "sha256": "51d7f5dd8dc09a2b08d3f52cb4d39838ab0819b6904334bb4132930be3cf40a7",
            "languages": {
              "typescript": {
                "name": "property.stamp-duty-1.0.2-typescript.fune",
                "size": 115117,
                "sha256": "690b8584905fa1aa60e9f13ccbc2ff10f513cbe4594aebe788013c8ad036f9ca",
                "integrity": "sha256-BQqeDqVUJqIzozGnpb2n4NMDfQNSZWCSlTl1yV7ORjA="
              },
              "python": {
                "name": "property.stamp-duty-1.0.2-python.fune",
                "size": 115170,
                "sha256": "f7a1041bbcb71493dbb72b508f742d9daa1529f4542edad40e193a173deafe1d",
                "integrity": "sha256-K5hH9IKyfPGeKvFG0nAVxEP8AivY3GtpnklESRxUM6w="
              },
              "rust": {
                "name": "property.stamp-duty-1.0.2-rust.fune",
                "size": 117846,
                "sha256": "183da1d97ec9e90f638ddf92345096d2490f1431e3629297ba9606a6c7205859",
                "integrity": "sha256-7IZUDvJKaB5hcGKZiY36hQQVRbUvIaEFgVgIT1gDum4="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "react.form.button": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-2eMwFSTIKLGUGyJuaatP6yVNMPMgReRUq7RJtBSYZiw=",
          "summary": "A form button in primary, secondary or warning style that stays focusable while loading (GOV.UK button).",
          "level": 1,
          "tags": [
            "react",
            "form",
            "button",
            "submit",
            "warning",
            "danger",
            "loading",
            "double-submit",
            "accessibility"
          ],
          "languages": [
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/typescript.tsx",
            "vectors.json"
          ],
          "package": {
            "name": "react.form.button-1.0.0.fune",
            "size": 11986,
            "sha256": "c65c514ec86f9fcad2ffda3b3a890ed2e3be3578f37fd31830d7f3971cb44570",
            "languages": {
              "typescript": {
                "name": "react.form.button-1.0.0-typescript.fune",
                "size": 12014,
                "sha256": "39958450b76e08a4c5a85cea92ed2fb4ea0932e0e0c8fd30ac3a4cf8eab3348c",
                "integrity": "sha256-2eMwFSTIKLGUGyJuaatP6yVNMPMgReRUq7RJtBSYZiw="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-ryVgqmWq+d2rNLYqvYZZuIsOwL1ypL7Z/YDtaIsmm68=",
          "summary": "A form button in primary, secondary or warning style that stays focusable while loading (GOV.UK button).",
          "level": 1,
          "tags": [
            "react",
            "form",
            "button",
            "submit",
            "warning",
            "danger",
            "loading",
            "double-submit",
            "accessibility"
          ],
          "languages": [
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "NOTICE",
            "README.md",
            "impl/typescript.tsx",
            "vectors.json"
          ],
          "package": {
            "name": "react.form.button-1.0.1.fune",
            "size": 13552,
            "sha256": "bae4ac854d06deca5d39c4edc64fb3bc6e78e1cceb029e73b1a3d026d017213d",
            "languages": {
              "typescript": {
                "name": "react.form.button-1.0.1-typescript.fune",
                "size": 13580,
                "sha256": "e622e2d9fcfdbe4c641629d0e7d5d890d9e6031109861b6886ae4d6b437a0b99",
                "integrity": "sha256-ryVgqmWq+d2rNLYqvYZZuIsOwL1ypL7Z/YDtaIsmm68="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "react.form.checkbox": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-1VEKZRNJPqA4i4GIBAyQV2xIC42wmkeHu8+ojNXj1Zg=",
          "summary": "One checkbox with its label beside it, such as \"I agree to the terms\" (GOV.UK single checkbox).",
          "level": 1,
          "tags": [
            "react",
            "form",
            "checkbox",
            "tickbox",
            "consent",
            "agree",
            "toggle",
            "accessibility"
          ],
          "languages": [
            "typescript"
          ],
          "dependencies": {
            "react.form.form-field": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/typescript.tsx",
            "vectors.json"
          ],
          "package": {
            "name": "react.form.checkbox-1.0.0.fune",
            "size": 16003,
            "sha256": "f9e31240672cb783592b0923fcea53edaa55ee39c9ad41c18c72bf2831a2045c",
            "languages": {
              "typescript": {
                "name": "react.form.checkbox-1.0.0-typescript.fune",
                "size": 16031,
                "sha256": "833a5a18eaae85d3390491189820968c685b30da8bfab9a7de2d88bfe8b6e350",
                "integrity": "sha256-1VEKZRNJPqA4i4GIBAyQV2xIC42wmkeHu8+ojNXj1Zg="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-6148Yth9Z30djEsi2s4TXOjMlVWMGWjWvkw4i0N+qfg=",
          "summary": "One checkbox with its label beside it, such as \"I agree to the terms\" (GOV.UK single checkbox).",
          "level": 1,
          "tags": [
            "react",
            "form",
            "checkbox",
            "tickbox",
            "consent",
            "agree",
            "toggle",
            "accessibility"
          ],
          "languages": [
            "typescript"
          ],
          "dependencies": {
            "react.form.form-field": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "impl/typescript.tsx",
            "vectors.json"
          ],
          "package": {
            "name": "react.form.checkbox-1.0.1.fune",
            "size": 17571,
            "sha256": "12202cc73d1122e81fe87afe337ff39422336f629324450d07cadd9278b372ca",
            "languages": {
              "typescript": {
                "name": "react.form.checkbox-1.0.1-typescript.fune",
                "size": 17599,
                "sha256": "46381b3b15d08066221a2842a329224b3a7f48ec7e2992a9fdc9939bd854f8f4",
                "integrity": "sha256-6148Yth9Z30djEsi2s4TXOjMlVWMGWjWvkw4i0N+qfg="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "react.form.checkbox-group": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-abvVyKFjLJhq3vRgXUpE5Kn1uHMOkL8tfudJx/wHQ+k=",
          "summary": "A question answered by ticking any of several checkboxes, with item hints and an exclusive \"None\" (GOV.UK checkboxes).",
          "level": 1,
          "tags": [
            "react",
            "form",
            "checkboxes",
            "multi-select",
            "select-all-that-apply",
            "fieldset",
            "accessibility"
          ],
          "languages": [
            "typescript"
          ],
          "dependencies": {
            "react.form.fieldset": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/typescript/checkbox_group.tsx",
            "impl/typescript/toggle_value.ts",
            "vectors.json"
          ],
          "package": {
            "name": "react.form.checkbox-group-1.0.0.fune",
            "size": 28965,
            "sha256": "7b1d9a290204053f7c95d6760518eefda2d69adbf3001bbef6fc839b3aa035a2",
            "languages": {
              "typescript": {
                "name": "react.form.checkbox-group-1.0.0-typescript.fune",
                "size": 28993,
                "sha256": "a35d41e43c458ac4a764e62d9379a820a97cdf669249395e2500473219e43436",
                "integrity": "sha256-abvVyKFjLJhq3vRgXUpE5Kn1uHMOkL8tfudJx/wHQ+k="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-WACluvn1/56rWVu2ygFLtr/RgDYR9qiQROuKO3xiRAc=",
          "summary": "A question answered by ticking any of several checkboxes, with item hints and an exclusive \"None\" (GOV.UK checkboxes).",
          "level": 1,
          "tags": [
            "react",
            "form",
            "checkboxes",
            "multi-select",
            "select-all-that-apply",
            "fieldset",
            "accessibility"
          ],
          "languages": [
            "typescript"
          ],
          "dependencies": {
            "react.form.fieldset": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "impl/typescript/checkbox_group.tsx",
            "impl/typescript/toggle_value.ts",
            "vectors.json"
          ],
          "package": {
            "name": "react.form.checkbox-group-1.0.1.fune",
            "size": 30539,
            "sha256": "963bedc570f4f5372600ea3f65c2cfd809c700eb96f382a75842021a62ee99a7",
            "languages": {
              "typescript": {
                "name": "react.form.checkbox-group-1.0.1-typescript.fune",
                "size": 30567,
                "sha256": "38b7c36e2c345d248ff9b5661acaac0da40eae3e8a70071a86e7cacf23b13a65",
                "integrity": "sha256-WACluvn1/56rWVu2ygFLtr/RgDYR9qiQROuKO3xiRAc="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "react.form.date-input": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-KabfJva5caN7FfbtSRLHf/ezCYCN9rfZKbO2hpZei5w=",
          "summary": "Day, month and year boxes under one legend, with hint, error message and the boxes in error marked (GOV.UK date input).",
          "level": 1,
          "tags": [
            "react",
            "form",
            "date",
            "date-input",
            "date-of-birth",
            "day-month-year",
            "fieldset",
            "accessibility"
          ],
          "languages": [
            "typescript"
          ],
          "dependencies": {
            "form.date-parts": "^1.0.0",
            "react.form.fieldset": "^1.0.0",
            "react.form.form-field": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/typescript.tsx",
            "vectors.json"
          ],
          "package": {
            "name": "react.form.date-input-1.0.0.fune",
            "size": 30067,
            "sha256": "4ab4b00c1d5f4be0f41206c09a8fa863929f96c5158798f99a0ba0338d83d027",
            "languages": {
              "typescript": {
                "name": "react.form.date-input-1.0.0-typescript.fune",
                "size": 30095,
                "sha256": "37a23aab793eacca1c3d710a89d8e190e4001ce51941d6e975ca6e8657c64dc3",
                "integrity": "sha256-KabfJva5caN7FfbtSRLHf/ezCYCN9rfZKbO2hpZei5w="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-V2QnlLwJtjt2h+Sa/iXAYJL4D4A3RvEWRX3NtvciUQ8=",
          "summary": "Day, month and year boxes under one legend, with hint, error message and the boxes in error marked (GOV.UK date input).",
          "level": 1,
          "tags": [
            "react",
            "form",
            "date",
            "date-input",
            "date-of-birth",
            "day-month-year",
            "fieldset",
            "accessibility"
          ],
          "languages": [
            "typescript"
          ],
          "dependencies": {
            "form.date-parts": "^1.0.0",
            "react.form.fieldset": "^1.0.0",
            "react.form.form-field": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "impl/typescript.tsx",
            "vectors.json"
          ],
          "package": {
            "name": "react.form.date-input-1.0.1.fune",
            "size": 31637,
            "sha256": "a734e5f2e2bc4c8a5d4cc58279b1e22528b3259540e552286afc44c5677074a6",
            "languages": {
              "typescript": {
                "name": "react.form.date-input-1.0.1-typescript.fune",
                "size": 31665,
                "sha256": "25d274947e525e46adf5bb33b7c7e67f599c17f76ffd9d3fe115bd6afbddea4b",
                "integrity": "sha256-V2QnlLwJtjt2h+Sa/iXAYJL4D4A3RvEWRX3NtvciUQ8="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "react.form.error-summary": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-c7apjmbyvj0fwHL22OjbvjG3+hjJm2POmWEFGqpMqok=",
          "summary": "A \"There is a problem\" box linking to each field in error, focused on arrival, built from a validator's fields (GOV.UK).",
          "level": 1,
          "tags": [
            "react",
            "form",
            "error-summary",
            "validation",
            "errors",
            "accessibility",
            "focus",
            "govuk"
          ],
          "languages": [
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/typescript/error_summary.tsx",
            "impl/typescript/error_summary_items.ts",
            "vectors.json"
          ],
          "package": {
            "name": "react.form.error-summary-1.0.0.fune",
            "size": 20383,
            "sha256": "1581a4554dcaae6518f235938169dc3bab0197845e2113e2f84749b5d7b8b7f4",
            "languages": {
              "typescript": {
                "name": "react.form.error-summary-1.0.0-typescript.fune",
                "size": 20411,
                "sha256": "35d164365260b7811cf7e9587d7c83d38e06ddf36a7b8c957b052f409a660e0f",
                "integrity": "sha256-c7apjmbyvj0fwHL22OjbvjG3+hjJm2POmWEFGqpMqok="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-VR1iK81SfgasKER8EjsQKcXpqnhXVuVya1d+8TXq2VA=",
          "summary": "A \"There is a problem\" box linking to each field in error, focused on arrival, built from a validator's fields (GOV.UK).",
          "level": 1,
          "tags": [
            "react",
            "form",
            "error-summary",
            "validation",
            "errors",
            "accessibility",
            "focus",
            "govuk"
          ],
          "languages": [
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "NOTICE",
            "README.md",
            "impl/typescript/error_summary.tsx",
            "impl/typescript/error_summary_items.ts",
            "vectors.json"
          ],
          "package": {
            "name": "react.form.error-summary-1.0.1.fune",
            "size": 21956,
            "sha256": "845721bbb76c87d10b2d8c313db329b36a5a5f44d5e926828f11e7b7fad3ec9c",
            "languages": {
              "typescript": {
                "name": "react.form.error-summary-1.0.1-typescript.fune",
                "size": 21984,
                "sha256": "1cdb42ce773f4e035cd58bb3d69c424dd825201e858f37fb2fe964e831633310",
                "integrity": "sha256-VR1iK81SfgasKER8EjsQKcXpqnhXVuVya1d+8TXq2VA="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "react.form.fieldset": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-nNMDLvaByPMyAIHW1uL3xdRcf1lDPHR+PtgYRwNb2xM=",
          "summary": "Group related inputs under a legend, with a hint and error message described to the whole group (GOV.UK fieldset).",
          "level": 1,
          "tags": [
            "react",
            "form",
            "fieldset",
            "legend",
            "group",
            "question",
            "accessibility"
          ],
          "languages": [
            "typescript"
          ],
          "dependencies": {
            "react.form.form-field": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/typescript.tsx",
            "vectors.json"
          ],
          "package": {
            "name": "react.form.fieldset-1.0.0.fune",
            "size": 10589,
            "sha256": "6840a5baf9ec13279943d7713fd08fd81629f3176c0f9bd0ac678d0fe7f70f04",
            "languages": {
              "typescript": {
                "name": "react.form.fieldset-1.0.0-typescript.fune",
                "size": 10617,
                "sha256": "6d0f397637ac17e7a06d91aeb7d183ae70c6f628b58b7a5bc9d9b8143903a4ce",
                "integrity": "sha256-nNMDLvaByPMyAIHW1uL3xdRcf1lDPHR+PtgYRwNb2xM="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-4ZdhbhUFmmv3WFG9HOhja7V61k5p0RYT3/Z6KWT4hlU=",
          "summary": "Group related inputs under a legend, with a hint and error message described to the whole group (GOV.UK fieldset).",
          "level": 1,
          "tags": [
            "react",
            "form",
            "fieldset",
            "legend",
            "group",
            "question",
            "accessibility"
          ],
          "languages": [
            "typescript"
          ],
          "dependencies": {
            "react.form.form-field": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "impl/typescript.tsx",
            "vectors.json"
          ],
          "package": {
            "name": "react.form.fieldset-1.0.1.fune",
            "size": 12157,
            "sha256": "d206cc4d4bc6cfde3777d9ebb3876f6f694a215d9af99868815ab16c720b1b02",
            "languages": {
              "typescript": {
                "name": "react.form.fieldset-1.0.1-typescript.fune",
                "size": 12185,
                "sha256": "2f27cab8eab7337c66b049749e177bdd7b1ab47df8018a67916827eb7cd9ff24",
                "integrity": "sha256-4ZdhbhUFmmv3WFG9HOhja7V61k5p0RYT3/Z6KWT4hlU="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "react.form.form-field": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-CCgl8dDMSufDDlmd1wKHyus4Xu9G5kdqiayX9bfihRM=",
          "summary": "Wire a label, hint and error message to one form control by id, the accessible way (GOV.UK form group pattern).",
          "level": 1,
          "tags": [
            "react",
            "form",
            "field",
            "label",
            "hint",
            "error",
            "aria-describedby",
            "accessibility",
            "wrapper"
          ],
          "languages": [
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/typescript/field_ids.ts",
            "impl/typescript/form_field.tsx",
            "vectors.json"
          ],
          "package": {
            "name": "react.form.form-field-1.0.0.fune",
            "size": 15015,
            "sha256": "bb3fb8e8e83b2220393892970d57bcd67d4f70e012518622a45949e9d5c1061c",
            "languages": {
              "typescript": {
                "name": "react.form.form-field-1.0.0-typescript.fune",
                "size": 15043,
                "sha256": "4d169622f524b66872474034c04784968d815a0849b4a32b77a88292b078dca9",
                "integrity": "sha256-CCgl8dDMSufDDlmd1wKHyus4Xu9G5kdqiayX9bfihRM="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-iN2fwqrok3/DGCASLxzxdPRe9PNdhxAqkMw44AO7Aco=",
          "summary": "Wire a label, hint and error message to one form control by id, the accessible way (GOV.UK form group pattern).",
          "level": 1,
          "tags": [
            "react",
            "form",
            "field",
            "label",
            "hint",
            "error",
            "aria-describedby",
            "accessibility",
            "wrapper"
          ],
          "languages": [
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "NOTICE",
            "README.md",
            "impl/typescript/field_ids.ts",
            "impl/typescript/form_field.tsx",
            "vectors.json"
          ],
          "package": {
            "name": "react.form.form-field-1.0.1.fune",
            "size": 16585,
            "sha256": "11aa9cbbcc1bda588032b5d068a107d3393a8f6ea7b19bf2b8420590b98b2a76",
            "languages": {
              "typescript": {
                "name": "react.form.form-field-1.0.1-typescript.fune",
                "size": 16613,
                "sha256": "e7f1d3e2652702cdb5597890a62845e5f48615d3e0ac80d60268486c41d05c94",
                "integrity": "sha256-iN2fwqrok3/DGCASLxzxdPRe9PNdhxAqkMw44AO7Aco="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "react.form.password-field": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-9BWGKmgo2SB9OLxidTjAvgXeAa+vdm6A+cp8UsEpels=",
          "summary": "A password input with a Show/Hide button and an optional live checklist of a password policy (GOV.UK password input).",
          "level": 2,
          "tags": [
            "react",
            "form",
            "password",
            "show-password",
            "password-policy",
            "checklist",
            "signup",
            "accessibility"
          ],
          "languages": [
            "typescript"
          ],
          "dependencies": {
            "auth.password-policy": "^1.0.0",
            "react.form.form-field": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/typescript/password_checklist.ts",
            "impl/typescript/password_field.tsx",
            "vectors.json"
          ],
          "package": {
            "name": "react.form.password-field-1.0.0.fune",
            "size": 41188,
            "sha256": "817115583d7b157257ece3251b6fec053beacb71e7e990f0f0abcf8a47c544c5",
            "languages": {
              "typescript": {
                "name": "react.form.password-field-1.0.0-typescript.fune",
                "size": 41216,
                "sha256": "c81a5f49509c4c8f95b90f33859ef07fe03b1fb0d9592aa3cf0f75921ab74b7e",
                "integrity": "sha256-9BWGKmgo2SB9OLxidTjAvgXeAa+vdm6A+cp8UsEpels="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-RW+OvGE1PjG8q5eOrb1alQB1EccB93VjZocr1LDZ8/A=",
          "summary": "A password input with a Show/Hide button and an optional live checklist of a password policy (GOV.UK password input).",
          "level": 2,
          "tags": [
            "react",
            "form",
            "password",
            "show-password",
            "password-policy",
            "checklist",
            "signup",
            "accessibility"
          ],
          "languages": [
            "typescript"
          ],
          "dependencies": {
            "auth.password-policy": "^1.0.0",
            "react.form.form-field": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "impl/typescript/password_checklist.ts",
            "impl/typescript/password_field.tsx",
            "vectors.json"
          ],
          "package": {
            "name": "react.form.password-field-1.0.1.fune",
            "size": 42762,
            "sha256": "6ae4641b8c498ce5779786c7735dc6e3be0777ec7ed9e2989c543384eecfc942",
            "languages": {
              "typescript": {
                "name": "react.form.password-field-1.0.1-typescript.fune",
                "size": 42790,
                "sha256": "2b58da4b32060ef0b345cdb4f47a806927ef27fe9a26f27ea029b236f4c0ee37",
                "integrity": "sha256-RW+OvGE1PjG8q5eOrb1alQB1EccB93VjZocr1LDZ8/A="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "react.form.radio-group": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-WywRBEX+3VlSmxVbKaoAx2AAzJcnH8VH8Ztn6pE97xk=",
          "summary": "Choose exactly one of several radios, with item hints, an \"or\" divider and inline yes/no (GOV.UK radios).",
          "level": 1,
          "tags": [
            "react",
            "form",
            "radios",
            "radio-buttons",
            "choose-one",
            "yes-no",
            "fieldset",
            "accessibility"
          ],
          "languages": [
            "typescript"
          ],
          "dependencies": {
            "react.form.fieldset": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/typescript.tsx",
            "vectors.json"
          ],
          "package": {
            "name": "react.form.radio-group-1.0.0.fune",
            "size": 24215,
            "sha256": "c03287c5456335c08d7657f819c7b2d40d82abcac4a63036ddd9759cf4d36595",
            "languages": {
              "typescript": {
                "name": "react.form.radio-group-1.0.0-typescript.fune",
                "size": 24243,
                "sha256": "4ee608f091fd45cd9c15c34e92052cab8973ac440989b1e38ee1b1b804c6234a",
                "integrity": "sha256-WywRBEX+3VlSmxVbKaoAx2AAzJcnH8VH8Ztn6pE97xk="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-L6qeoY8cwxRsZfRVLhLltA6bEQ4Kb/bSDYkTXeZfoZ0=",
          "summary": "Choose exactly one of several radios, with item hints, an \"or\" divider and inline yes/no (GOV.UK radios).",
          "level": 1,
          "tags": [
            "react",
            "form",
            "radios",
            "radio-buttons",
            "choose-one",
            "yes-no",
            "fieldset",
            "accessibility"
          ],
          "languages": [
            "typescript"
          ],
          "dependencies": {
            "react.form.fieldset": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "impl/typescript.tsx",
            "vectors.json"
          ],
          "package": {
            "name": "react.form.radio-group-1.0.1.fune",
            "size": 25786,
            "sha256": "6bf67dda35dc28690b911506e10e1c0cd002e073a2c384d0345fdc44fd532004",
            "languages": {
              "typescript": {
                "name": "react.form.radio-group-1.0.1-typescript.fune",
                "size": 25814,
                "sha256": "c6d6a316ad06c2c4eae413af676e641954f7a710893d6690007b9f9f398ae78a",
                "integrity": "sha256-L6qeoY8cwxRsZfRVLhLltA6bEQ4Kb/bSDYkTXeZfoZ0="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "react.form.select": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-SX4Ba6FZ/gzp9fSLNDn0REPAyBq3SaZVwjr4rjwm2so=",
          "summary": "A labelled drop-down list with a hint, error message and an optional empty first option (GOV.UK select).",
          "level": 1,
          "tags": [
            "react",
            "form",
            "select",
            "dropdown",
            "drop-down",
            "picklist",
            "options",
            "accessibility"
          ],
          "languages": [
            "typescript"
          ],
          "dependencies": {
            "react.form.form-field": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/typescript.tsx",
            "vectors.json"
          ],
          "package": {
            "name": "react.form.select-1.0.0.fune",
            "size": 17536,
            "sha256": "5ca24bff280ebabaf901b8779e3d8a2c4aca46d21a8e39dc0ce02aa61ce07fa3",
            "languages": {
              "typescript": {
                "name": "react.form.select-1.0.0-typescript.fune",
                "size": 17564,
                "sha256": "17c7b9c96e8322059e38ef7c3ee59485b36dea452124d3a5642811111d29a56c",
                "integrity": "sha256-SX4Ba6FZ/gzp9fSLNDn0REPAyBq3SaZVwjr4rjwm2so="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-TQ3aq+I6V0f8MtOuCro0x+Nn/FtfsQsD18YDn6hkR+k=",
          "summary": "A labelled drop-down list with a hint, error message and an optional empty first option (GOV.UK select).",
          "level": 1,
          "tags": [
            "react",
            "form",
            "select",
            "dropdown",
            "drop-down",
            "picklist",
            "options",
            "accessibility"
          ],
          "languages": [
            "typescript"
          ],
          "dependencies": {
            "react.form.form-field": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "impl/typescript.tsx",
            "vectors.json"
          ],
          "package": {
            "name": "react.form.select-1.0.1.fune",
            "size": 19102,
            "sha256": "eb37bce68b970a74d07be29ccb8711517f95098898b26d664fe9b95499a7a0e8",
            "languages": {
              "typescript": {
                "name": "react.form.select-1.0.1-typescript.fune",
                "size": 19130,
                "sha256": "914fae8361e5ed5bda95f5273a03a0e96d458e013a28cf3f93a435051c5b5775",
                "integrity": "sha256-TQ3aq+I6V0f8MtOuCro0x+Nn/FtfsQsD18YDn6hkR+k="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "react.form.styles": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-BSyNt7JmPB2BiVPzMBE1W4mYAkDPUzctaR4f6BRZb4Y=",
          "summary": "An optional stylesheet for the react.form elements' caps-* classes, themed by --caps-form-* custom properties.",
          "level": 1,
          "tags": [
            "react",
            "form",
            "css",
            "stylesheet",
            "theme",
            "dark-mode",
            "styles",
            "focus"
          ],
          "languages": [
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "react.form.styles-1.0.0.fune",
            "size": 106656,
            "sha256": "63ec153a2b6a17179e38f42224ca4903a413e1f7b9a669f41edfe7fb9555ab5d",
            "languages": {
              "typescript": {
                "name": "react.form.styles-1.0.0-typescript.fune",
                "size": 106684,
                "sha256": "eaf7203c5e9b0f56d85d5efa443b683bc18bced2defb861c1a3d6671cdc1b0b6",
                "integrity": "sha256-BSyNt7JmPB2BiVPzMBE1W4mYAkDPUzctaR4f6BRZb4Y="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-p5Vl+1BCYPTLVHZpOG1flSOTiMx+e0CGg8ORgy4ps8o=",
          "summary": "An optional stylesheet for the react.form elements' caps-* classes, themed by --caps-form-* custom properties.",
          "level": 1,
          "tags": [
            "react",
            "form",
            "css",
            "stylesheet",
            "theme",
            "dark-mode",
            "styles",
            "focus"
          ],
          "languages": [
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "NOTICE",
            "README.md",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "react.form.styles-1.0.1.fune",
            "size": 108222,
            "sha256": "c82e7a60923cd285b074f6d9599f81c3f5ecf61d464d9b5299114b836fdeab3f",
            "languages": {
              "typescript": {
                "name": "react.form.styles-1.0.1-typescript.fune",
                "size": 108250,
                "sha256": "7c7fc4908da9ce8a64801e42389a1d37acb0b5d5fddda40400e3da7200d6d9e4",
                "integrity": "sha256-p5Vl+1BCYPTLVHZpOG1flSOTiMx+e0CGg8ORgy4ps8o="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "react.form.text-field": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-I3CSnxggoCLg/IH8hpjiIaeKELBEo6KWL7gtozc64MU=",
          "summary": "A labelled single-line text input with hint, error message, autocomplete, prefix and suffix (GOV.UK text input).",
          "level": 1,
          "tags": [
            "react",
            "form",
            "input",
            "text-field",
            "email",
            "telephone",
            "url",
            "autocomplete",
            "accessibility"
          ],
          "languages": [
            "typescript"
          ],
          "dependencies": {
            "react.form.form-field": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/typescript.tsx",
            "vectors.json"
          ],
          "package": {
            "name": "react.form.text-field-1.0.0.fune",
            "size": 16473,
            "sha256": "73865468de96ff4fdf0fc522dcc9449765bcc074ca4037609b6f9cacc3a57d1f",
            "languages": {
              "typescript": {
                "name": "react.form.text-field-1.0.0-typescript.fune",
                "size": 16501,
                "sha256": "245ab41773b6dfdc6653cfbefa4eef91eceececa81069f358041cb9479550094",
                "integrity": "sha256-I3CSnxggoCLg/IH8hpjiIaeKELBEo6KWL7gtozc64MU="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-w8zU7C2ffWtp+CEijdQltQuW+miDbKRqMUfr5crVbus=",
          "summary": "A labelled single-line text input with hint, error message, autocomplete, prefix and suffix (GOV.UK text input).",
          "level": 1,
          "tags": [
            "react",
            "form",
            "input",
            "text-field",
            "email",
            "telephone",
            "url",
            "autocomplete",
            "accessibility"
          ],
          "languages": [
            "typescript"
          ],
          "dependencies": {
            "react.form.form-field": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "impl/typescript.tsx",
            "vectors.json"
          ],
          "package": {
            "name": "react.form.text-field-1.0.1.fune",
            "size": 18043,
            "sha256": "8fadff2c32a9f4cadc2147e799a5b885037c65616cbd70d4228dfb8eddd34f54",
            "languages": {
              "typescript": {
                "name": "react.form.text-field-1.0.1-typescript.fune",
                "size": 18071,
                "sha256": "04553e727073013074c534654d0fb12977c0e0948b27fc20d4fb1e774538b0b0",
                "integrity": "sha256-w8zU7C2ffWtp+CEijdQltQuW+miDbKRqMUfr5crVbus="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "react.form.textarea": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-yPQOZ2W/0klO0kJQgu8UOPVikeBkHif2F080t+7HWrc=",
          "summary": "A labelled multi-line text box with hint, error and an optional live character or word count (GOV.UK).",
          "level": 1,
          "tags": [
            "react",
            "form",
            "textarea",
            "text-area",
            "character-count",
            "word-count",
            "multiline",
            "accessibility"
          ],
          "languages": [
            "typescript"
          ],
          "dependencies": {
            "form.character-count": "^1.0.0",
            "react.form.form-field": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/typescript.tsx",
            "vectors.json"
          ],
          "package": {
            "name": "react.form.textarea-1.0.0.fune",
            "size": 19306,
            "sha256": "d011bcc340ae0e1a49c89f5c46fd6bc261c80bc6dbca020a1fcdef98cad1f17b",
            "languages": {
              "typescript": {
                "name": "react.form.textarea-1.0.0-typescript.fune",
                "size": 19334,
                "sha256": "ab3b4210611851a1da9c531d75332641fb52e5ee9ec5e529a40ff6d3ae43df5b",
                "integrity": "sha256-yPQOZ2W/0klO0kJQgu8UOPVikeBkHif2F080t+7HWrc="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-STs1FV3guv4aUl9t+1WiLK+Exop3s3GJ5g8hj/r5ApA=",
          "summary": "A labelled multi-line text box with hint, error and an optional live character or word count (GOV.UK).",
          "level": 1,
          "tags": [
            "react",
            "form",
            "textarea",
            "text-area",
            "character-count",
            "word-count",
            "multiline",
            "accessibility"
          ],
          "languages": [
            "typescript"
          ],
          "dependencies": {
            "form.character-count": "^1.0.0",
            "react.form.form-field": "^1.0.0"
          },
          "files": [
            "NOTICE",
            "README.md",
            "impl/typescript.tsx",
            "vectors.json"
          ],
          "package": {
            "name": "react.form.textarea-1.0.1.fune",
            "size": 20874,
            "sha256": "8348967dd13b86f1602175c65ed0df7137a1cb4a30fdd6ce147c9edc2f7f28f8",
            "languages": {
              "typescript": {
                "name": "react.form.textarea-1.0.1-typescript.fune",
                "size": 20902,
                "sha256": "4fe37754d1e536ac91e70359555c73e91c82c108f477b5db8087273b8babf7b5",
                "integrity": "sha256-STs1FV3guv4aUl9t+1WiLK+Exop3s3GJ5g8hj/r5ApA="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "retail.basket-total": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-GO2ESaznOwO5sFvwZXVeEXCXY+Yp6IHW54K7yn9utCw=",
          "summary": "Total a basket: line prices, promotions, a basket discount, VAT per line and delivery, into one checked total.",
          "level": 3,
          "tags": [
            "basket",
            "cart",
            "checkout",
            "total",
            "vat",
            "promotions",
            "delivery",
            "order-total"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.sum": "^1.0.0",
            "money.amount": "^1.0.0",
            "money.allocate": "^1.0.0",
            "finance.tax.add-vat": "^1.0.0",
            "finance.tax.remove-vat": "^1.0.0",
            "retail.promotion-apply": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "retail.basket-total-1.0.0.fune",
            "size": 35866,
            "sha256": "21ebf48aa63a287997a9b3c5add548af26f56619552fe27219b1573eda0cb56d",
            "languages": {
              "typescript": {
                "name": "retail.basket-total-1.0.0-typescript.fune",
                "size": 23958,
                "sha256": "677570deabba7fe334270380b2b2c1ebe356cd546896fccfc2322c787ba897f9",
                "integrity": "sha256-+X7bWg9SFU7wX2sg4XS6aZqqSIb5BuK/eDJG2IyYXpo="
              },
              "python": {
                "name": "retail.basket-total-1.0.0-python.fune",
                "size": 24122,
                "sha256": "83d69483100f2a87170d960cc1b56733ce9b110d577e6656dd8466584e669373",
                "integrity": "sha256-c1Pyt8jikSF6zyCXBbD/zc3hD2beUVE0o8nIqlHKgNQ="
              },
              "rust": {
                "name": "retail.basket-total-1.0.0-rust.fune",
                "size": 27948,
                "sha256": "8b42d0c2dac934b9cbcd64e1018e892654e25e3049877369840d3b42f3feb208",
                "integrity": "sha256-8+Flbv4ViKAALMoBP0AAKH4GyKeeTTjD03dy28H3fOA="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "retail.coupon-validate": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-vcOEVWlFOWwy9k+ZgSS4fDWijfLIhKrNiMGwWr8fKCU=",
          "summary": "Check a coupon against a basket: dates, usage limits, eligible products and minimum spend, with reason codes.",
          "level": 1,
          "tags": [
            "coupon",
            "voucher",
            "discount-code",
            "promo-code",
            "eligibility",
            "minimum-spend",
            "redemption"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.sum": "^1.0.0",
            "money.amount": "^1.0.0",
            "money.compare": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "retail.coupon-validate-1.0.0.fune",
            "size": 31771,
            "sha256": "2f3b1751f83b86484da40c127ba5c07ab7e3d3451f7d11c8dee60ec1e953c6a6",
            "languages": {
              "typescript": {
                "name": "retail.coupon-validate-1.0.0-typescript.fune",
                "size": 24126,
                "sha256": "0e92e4da5de3b789c3a9baa1f1bcda9f42c2468903022d7d996b4c6d43a268fd",
                "integrity": "sha256-hfpTOWYzghRsgfSEnhcFzcVp0cRG1TGkNXthxPxMtv0="
              },
              "python": {
                "name": "retail.coupon-validate-1.0.0-python.fune",
                "size": 24205,
                "sha256": "320eb3cf642a8f4babfebc7be4479223dd0eb842afecf20d977a3d38021556f2",
                "integrity": "sha256-Pkozf5Pn4pZgIfjiqg6/AliQxNDzl6EywXfuKkdaEnE="
              },
              "rust": {
                "name": "retail.coupon-validate-1.0.0-rust.fune",
                "size": 26924,
                "sha256": "d7fea8c9bce85176ebbf7cc9af3e03e77b5d46f45297c1b124006969359fea7d",
                "integrity": "sha256-UB+HTobzuW4I/G29B5tgGex5eElW2LWzSMp2QcjHTUQ="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-198utoR59p+dCJefMmEU0oRYJy2lna7vOnNDColYNiY=",
          "summary": "Check a coupon against a basket: dates, usage limits, eligible products and minimum spend, with reason codes.",
          "level": 1,
          "tags": [
            "coupon",
            "voucher",
            "discount-code",
            "promo-code",
            "eligibility",
            "minimum-spend",
            "redemption"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.sum": "^1.0.0",
            "money.amount": "^1.0.0",
            "money.compare": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "retail.coupon-validate-1.0.1.fune",
            "size": 33269,
            "sha256": "4c0c6b527fd50c4a971742164fab44783c6122b6fb78fabb9a80b5a6722cb6fd",
            "languages": {
              "typescript": {
                "name": "retail.coupon-validate-1.0.1-typescript.fune",
                "size": 25616,
                "sha256": "f5e011308a7da96860ffd423b912f567bcf62000287ed67a545182a139f4ce80",
                "integrity": "sha256-Elh3RtCFsLCutwXhvW/rKh9y41ALrf7FdYTLCZKvrtE="
              },
              "python": {
                "name": "retail.coupon-validate-1.0.1-python.fune",
                "size": 25703,
                "sha256": "7fb911dc3277dc1b67b29dd1133550b79e7946849f1f48d4bc11aa1b79e56221",
                "integrity": "sha256-DFyRmVauJtvdKb3SwxpyMOaLjrXPtXRA+91Z7BoQBGY="
              },
              "rust": {
                "name": "retail.coupon-validate-1.0.1-rust.fune",
                "size": 28414,
                "sha256": "f39c5bd1733f1e14eedc76705439475ec76d3ccc4f4ca63a907068e8453fe055",
                "integrity": "sha256-f5heQR10CwRILp3iGHHjZ3ddFbmuVJmTCqWlFlsllIM="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "retail.gift-card-balance": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-laccII60zqeCDDMm3v8AIRH8JZM8GjZdNRRFQ+3QhZw=",
          "summary": "Apply a payment from a gift card, redeeming part of the balance or all of it, and say what is still due.",
          "level": 1,
          "tags": [
            "gift-card",
            "gift-voucher",
            "stored-value",
            "partial-redemption",
            "balance",
            "tender",
            "payment"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.add": "^1.0.0",
            "money.amount": "^1.0.0",
            "money.compare": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "retail.gift-card-balance-1.0.0.fune",
            "size": 10092,
            "sha256": "96c516afc5ce0a9054f4fde768709d56a54ec0f25dbb87aaa57d283cf0ffdfe3",
            "languages": {
              "typescript": {
                "name": "retail.gift-card-balance-1.0.0-typescript.fune",
                "size": 7593,
                "sha256": "475691e666da78024661132aaa5d963a4fbbce0f108041fcbdf018e64e94416f",
                "integrity": "sha256-PMPdia9wK50l9a/WM3Ubfit0fZ+Z0tjdYQfjQAeBccY="
              },
              "python": {
                "name": "retail.gift-card-balance-1.0.0-python.fune",
                "size": 7612,
                "sha256": "f774361033ce12671266e63121a3d6b1fa58830db0acb85450ea3d2ce7900cba",
                "integrity": "sha256-mxPqjsy2Onl+ojpKDT3rLzFUe54I9tIvHdoEcSffjgU="
              },
              "rust": {
                "name": "retail.gift-card-balance-1.0.0-rust.fune",
                "size": 8219,
                "sha256": "fc21ad5f997efaed41de8a046ffa6fb1c5a1b8fa8a0400295f4ddeb9ff60ccee",
                "integrity": "sha256-hIgMnB9zM0lZCfvblntnkmCOo4Y1wWpKUXMEgli1/Zs="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "retail.loyalty-points": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-ZtVk9dt6YhE9zaBh5kfI+hwZWhfH+eOv0H3FZvygvvA=",
          "summary": "Loyalty points for a purchase: redeem in blocks, earn on what is paid, with tier multipliers.",
          "level": 2,
          "tags": [
            "loyalty",
            "points",
            "rewards",
            "reward-points",
            "tiers",
            "redemption",
            "clubcard"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.add": "^1.0.0",
            "money.amount": "^1.0.0",
            "money.compare": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "retail.loyalty-points-1.0.0.fune",
            "size": 33957,
            "sha256": "4e1450deacf6621b1f6f757b77e6042937b79b1a75eca021eacdb3dd2afa4307",
            "languages": {
              "typescript": {
                "name": "retail.loyalty-points-1.0.0-typescript.fune",
                "size": 25493,
                "sha256": "cfd64c3c7ae95c6d2047bda85d72af0d1bda7a7904964ef11fbf9258f99c85ae",
                "integrity": "sha256-Pt9auDzAoyrPZxV4XomDcDufkMXg4/FLfwFq3JbN/gU="
              },
              "python": {
                "name": "retail.loyalty-points-1.0.0-python.fune",
                "size": 25733,
                "sha256": "0afda48014495885c88c53cb4df3135c2eef28dab727ac3d3c282a191bab327f",
                "integrity": "sha256-FInwQFTyuZirUE8oM4D9wNx2S+oWB6ibrxaQhQFpf2c="
              },
              "rust": {
                "name": "retail.loyalty-points-1.0.0-rust.fune",
                "size": 27697,
                "sha256": "69d4bdce586657701327bc678c31428c655d56a139789a3c2fff98b3c5910970",
                "integrity": "sha256-TIdXmzfnvX5UI7Svz1hs63dXNUzmx292qwJ8WWEFYdo="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "retail.oss-vat": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-eglyWAhJcIl0wR+45GN45JgSiwSi13aBby4OxoGmW0o=",
          "summary": "EU distance-selling VAT: which member state's standard rate applies under OSS and the EUR 10,000 threshold, and the VAT.",
          "level": 2,
          "tags": [
            "vat",
            "oss",
            "one-stop-shop",
            "eu",
            "distance-selling",
            "ecommerce",
            "cross-border",
            "destination"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "money.apply-rate": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/oss-rules.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "retail.oss-vat-1.0.0.fune",
            "size": 41812,
            "sha256": "0db7e57e14bedd5cedc92cb6317fd07a407ca6cd0fed2c85e45e79a207e3849a",
            "languages": {
              "typescript": {
                "name": "retail.oss-vat-1.0.0-typescript.fune",
                "size": 31891,
                "sha256": "24450831c1823f0edf4ba5187b4ba10ae8c96099c797c50c1b3b0898e6a2903b",
                "integrity": "sha256-LYwaOEk+wN+ZFo33KOacT1RSARbLEagxnDOscmj2lUo="
              },
              "python": {
                "name": "retail.oss-vat-1.0.0-python.fune",
                "size": 31976,
                "sha256": "a8e99a32e9ec67ff57bcb95b281b06942531f4f0ef5e764cf0eab6ddb010d69f",
                "integrity": "sha256-xeJIz9LwiLtJQEtOmfV7xDlmO4eNvfcM27wuVrX/+nQ="
              },
              "rust": {
                "name": "retail.oss-vat-1.0.0-rust.fune",
                "size": 33433,
                "sha256": "7ac0ab341b077f611225197a597bc4e6727128806f8532634cc02c91a18049b3",
                "integrity": "sha256-wyt4F3sY/vHOv4xJ4j+NR4MEAHX/pLTWY6k6bdia7+o="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-oe8EmYRPdglDjL7ZbHnTK7M0nxzHZVYbVxnfJIDG8wI=",
          "summary": "EU distance-selling VAT: which member state's standard rate applies under OSS and the EUR 10,000 threshold, and the VAT.",
          "level": 2,
          "tags": [
            "vat",
            "oss",
            "one-stop-shop",
            "eu",
            "distance-selling",
            "ecommerce",
            "cross-border",
            "destination"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "money.apply-rate": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/oss-rules.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "retail.oss-vat-1.0.1.fune",
            "size": 43282,
            "sha256": "ce85841c8c38c0c8e1ec067733af5d541e14881cde2145cd59fd209bd1cf04ed",
            "languages": {
              "typescript": {
                "name": "retail.oss-vat-1.0.1-typescript.fune",
                "size": 33351,
                "sha256": "7ff6942cc7364af7e9082be3bbbe4187c9aaa4989956dc0c221ae644db59e933",
                "integrity": "sha256-eK8dRVf9w1bpXmsiGSm2QcSpU0M5FRXniRfDcXrnOOk="
              },
              "python": {
                "name": "retail.oss-vat-1.0.1-python.fune",
                "size": 33446,
                "sha256": "456aba0d75802588a84999869e957e6a1f03c77a9d3e81abc40a6896e576ee85",
                "integrity": "sha256-osyhwQ01ZE7+2UOUi8xrqDOjyQMIkeQ0/TuVgB2pJho="
              },
              "rust": {
                "name": "retail.oss-vat-1.0.1-rust.fune",
                "size": 34893,
                "sha256": "e7b000323c742a95fd331608a4da0e4a1d64dd5eb9fc0dd136038a6f8153a7e5",
                "integrity": "sha256-yMgHRPK8qd+MZXalzBQS3CGoHE51IWKMAOI9qs/k+kw="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "retail.price-per-unit": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-w9Rb995tjPQ2F0codo2UuXg2AtgHHgqPuknUOlHupnU=",
          "summary": "Unit price for shelf-edge labels: price per kg, per 100 g, per litre, per 100 ml, per metre or per item.",
          "level": 1,
          "tags": [
            "unit-price",
            "unit-pricing",
            "price-per-kg",
            "price-per-litre",
            "shelf-edge-label",
            "price-marking-order",
            "comparison-price"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "units.convert": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "retail.price-per-unit-1.0.0.fune",
            "size": 18193,
            "sha256": "91c42b39bff0dc8171ff784c046682b312bae9762878d28a3f3b558f386f9bec",
            "languages": {
              "typescript": {
                "name": "retail.price-per-unit-1.0.0-typescript.fune",
                "size": 12636,
                "sha256": "00eb171cec3e0c33fa1d58ed209da9169c23bbce34f9782f016a68fba625fbd4",
                "integrity": "sha256-Bw487UtllvAeA3TFOw8ozroeR2hoSm/CEtdG30ZIDSI="
              },
              "python": {
                "name": "retail.price-per-unit-1.0.0-python.fune",
                "size": 12603,
                "sha256": "a09b11349cf7eb136bf512689f35f0f1fcba71480e787ebc2cd4e02ed8cbc3b4",
                "integrity": "sha256-F+gmXoag3Yl0EXDqNgaSdXHM80sj2tBJ3Nno+Y9uJ1A="
              },
              "rust": {
                "name": "retail.price-per-unit-1.0.0-rust.fune",
                "size": 13474,
                "sha256": "de7e212ab4bd2e69b03ed9a2f611fc7f13df7c423bc932898ebad760bae0d4db",
                "integrity": "sha256-XJSJIa8CAzS4Q8ks0n/JvSH6SJ7COTFxgCF6sebNbyI="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-HzPEZ8YE1m+YzYMnZkSq3UmQDj0mMXX/1Vl+NiJzHJo=",
          "summary": "Unit price for shelf-edge labels: price per kg, per 100 g, per litre, per 100 ml, per metre or per item.",
          "level": 1,
          "tags": [
            "unit-price",
            "unit-pricing",
            "price-per-kg",
            "price-per-litre",
            "shelf-edge-label",
            "price-marking-order",
            "comparison-price"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "units.convert": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "retail.price-per-unit-1.0.1.fune",
            "size": 18495,
            "sha256": "bb9baca1fabbefbfb0d311fb8f46242ae294c3a78f05a541398b361ce3e780e5",
            "languages": {
              "typescript": {
                "name": "retail.price-per-unit-1.0.1-typescript.fune",
                "size": 12936,
                "sha256": "62a6cdb14ddaba0af58235441606ec513a1693e239e1767c7870a0b62a43e843",
                "integrity": "sha256-qkQaoVWJuUk9eLaj+nUtTE07R78AhbBH6cdPHOk6IAY="
              },
              "python": {
                "name": "retail.price-per-unit-1.0.1-python.fune",
                "size": 12905,
                "sha256": "4ab9f40bfde3bc1dda020b8fe4fa5870e136427ec377a6d61687d9a96c2e1860",
                "integrity": "sha256-zbZV4in5jk0blwbIVMZxpYBRvhsIAqsnXF8zBQl+PUY="
              },
              "rust": {
                "name": "retail.price-per-unit-1.0.1-rust.fune",
                "size": 13774,
                "sha256": "df3a33c6a62dc4a6723866b6e9a43e399907588dbbb2c10a2bc92527468d8e1e",
                "integrity": "sha256-mZxa1t5s6l6uRz7ewWGQiho21gtNPZ4C23T57hMbvXo="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "retail.price-rounding": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-EBG8oEgy2oYQE1LQPzCRhGhf5MsdRj6H0m192vabIkQ=",
          "summary": "Snap a price to a price point: charm pricing (.99, .95), nearest 5p or 10p, rounding up, down or to nearest.",
          "level": 1,
          "tags": [
            "price-rounding",
            "charm-pricing",
            "psychological-pricing",
            "price-points",
            "99p",
            "rounding",
            "retail"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "retail.price-rounding-1.0.0.fune",
            "size": 13055,
            "sha256": "d39029f0305ffe416736abd470d7272f7161efeb35839bc185a407b36c8df25e",
            "languages": {
              "typescript": {
                "name": "retail.price-rounding-1.0.0-typescript.fune",
                "size": 9477,
                "sha256": "a481ed22377652f9a8216660c1cc07ed71a566c82b4535e84eae6de92683961f",
                "integrity": "sha256-lIi2PZfF0VMaxFLMAtV1ohgcyohzaoZ8qCxzeqqAptk="
              },
              "python": {
                "name": "retail.price-rounding-1.0.0-python.fune",
                "size": 9508,
                "sha256": "eb07868623b63f7ce2046208e69797e5ff8abfb747147f97a076f9834b6ae831",
                "integrity": "sha256-rdHqetk6z2M/52NEFTF/SWyno0dgxO1D1M5akN23iEM="
              },
              "rust": {
                "name": "retail.price-rounding-1.0.0-rust.fune",
                "size": 9818,
                "sha256": "4900c0d4b9372d2ea250e690e5bd63774f56a56595ad3dcc87b46d276cce483c",
                "integrity": "sha256-tBLrT1WRrtpt97CCLSCY43LVS9RWakWsHki0rtPZ3j8="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "retail.promotion-apply": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-UmhMbpy16pQyTcTavyz7B+o+P1e16mZOwrwTbNV6eNo=",
          "summary": "Apply BOGOF, 3-for-2, percent off, amount off and multibuy deals to a basket, best for the customer, allocated to lines.",
          "level": 2,
          "tags": [
            "promotions",
            "offers",
            "bogof",
            "3-for-2",
            "multibuy",
            "mix-and-match",
            "discount",
            "deals"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.sum": "^1.0.0",
            "money.amount": "^1.0.0",
            "money.allocate": "^1.0.0",
            "money.apply-rate": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "retail.promotion-apply-1.0.0.fune",
            "size": 57590,
            "sha256": "543033a8dadfeb6e49c6ae44fbfe8fa644df4566a12ee6e4fd45ef2cb9ce94bd",
            "languages": {
              "typescript": {
                "name": "retail.promotion-apply-1.0.0-typescript.fune",
                "size": 37076,
                "sha256": "88d1ad20f563ccaa428967032d9c320c682b5333365acaecbb1e8b4f7599e1ea",
                "integrity": "sha256-1cjmVGSrPwVPjTyfj4PJDlBKa3gUxFZ9PZub5HODHf0="
              },
              "python": {
                "name": "retail.promotion-apply-1.0.0-python.fune",
                "size": 36523,
                "sha256": "b54d8bef602d5a8af0e81fab7a7bc65615c612d61e8cc584345ea873d37bd89c",
                "integrity": "sha256-sKKArPkT2vyVV5rbgpuSKPOJeWHzegho7z9H180dLeg="
              },
              "rust": {
                "name": "retail.promotion-apply-1.0.0-rust.fune",
                "size": 40617,
                "sha256": "b465a0ff180750ad7916d1534cf824e6adac20ff2953602ec504dc27d24fafc9",
                "integrity": "sha256-/5ZYwwsur0YEOUVC1ttHR86PS7plk2yL3B/izk/mIIs="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "retail.refund-calculate": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-m2mMmpvA1l3WgGnMEdDDoxo9wTk2+hmMqXjdYYohtSo=",
          "summary": "Refund for returned items, sharing basket discounts back across the sale so every refund is exact to the penny.",
          "level": 2,
          "tags": [
            "refund",
            "returns",
            "return",
            "credit-note",
            "apportionment",
            "discount-allocation"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.sum": "^1.0.0",
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "money.allocate": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "retail.refund-calculate-1.0.0.fune",
            "size": 29559,
            "sha256": "1df6a683263a2e3f77ad9a3d4985b7433ada680a5e0188e673c69be3b18822e1",
            "languages": {
              "typescript": {
                "name": "retail.refund-calculate-1.0.0-typescript.fune",
                "size": 20172,
                "sha256": "0e9a32aabbaa1b22899ebba0bac3b4b6761e1add22db3ecd6d623041b693114c",
                "integrity": "sha256-DXeiLDqwWh7r7r4LWndIHpNbQdZdmTRwZe4g603iHZg="
              },
              "python": {
                "name": "retail.refund-calculate-1.0.0-python.fune",
                "size": 20438,
                "sha256": "7ad7226e9c110fd8da47785e0c54b6dafb17d203f145ac12cf998d4bc124a5c9",
                "integrity": "sha256-DMwYP8eJPxkLcdVT1X6WIFx/o/W2Evzhoc6bwCmuUKw="
              },
              "rust": {
                "name": "retail.refund-calculate-1.0.0-rust.fune",
                "size": 22367,
                "sha256": "a3beb691b59284ddd34e86f5e0a0e12792acfdac9d366ae3610c60fe20c8326b",
                "integrity": "sha256-/gS3x8OBRuSMNLP380At0eiQUpYdWk6F0uvjZLVZO3g="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "retail.sales-tax-us": {
      "versions": {
        "1.1.0": {
          "integrity": "sha256-IPQ/Ni5gbnEwE+AaCK6U9N1502bxxBumpBfjBp61eDs=",
          "summary": "US sales tax on a sale: the state's base rate from dated data plus a local rate the caller supplies.",
          "level": 2,
          "tags": [
            "sales-tax",
            "us",
            "usa",
            "state-sales-tax",
            "local-tax",
            "tax",
            "retail"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/state-rates.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "retail.sales-tax-us-1.1.0.fune",
            "size": 43956,
            "sha256": "bca334db5599e5fc25b9c838a82406617a97bfd2eb3cbe10f2d367f87f4fbd30",
            "languages": {
              "typescript": {
                "name": "retail.sales-tax-us-1.1.0-typescript.fune",
                "size": 37053,
                "sha256": "e5c87fc467dedee02eaaec782dca0b57425296309beb3ac1901421a308189bbb",
                "integrity": "sha256-YdhLuBzvDDsS/OC8Dl0jjzVhIfYvjfXSnlYxKeJ5o/U="
              },
              "python": {
                "name": "retail.sales-tax-us-1.1.0-python.fune",
                "size": 37247,
                "sha256": "30f542bad55f04e4807b4c451ac443b01f1a4bc74545b570deee495fddbcf965",
                "integrity": "sha256-Gj3ObVcGyrVb50vYNdmm9lqaEWipzEgON6yMdR/onPs="
              },
              "rust": {
                "name": "retail.sales-tax-us-1.1.0-rust.fune",
                "size": 38432,
                "sha256": "3beeaff0837beb7636e6aa58b7705e453c1894cb0d7dc5b6a2061f294a0ea2e7",
                "integrity": "sha256-KZpxeDrv5k8SZdkUsD3lDlJLygs7ebLpamD0nfWHFhs="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.1.1": {
          "integrity": "sha256-T6Bumn6gEaM65F830kcyE+hkfL036hARxthjmLqK9Uw=",
          "summary": "US sales tax on a sale: the state's base rate from dated data plus a local rate the caller supplies.",
          "level": 2,
          "tags": [
            "sales-tax",
            "us",
            "usa",
            "state-sales-tax",
            "local-tax",
            "tax",
            "retail"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/state-rates.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "retail.sales-tax-us-1.1.1.fune",
            "size": 45087,
            "sha256": "941ed9edd74dd652b16ec02a4f70e835b7eedcfa4ea77db167bbd6c01ff9bc6d",
            "languages": {
              "typescript": {
                "name": "retail.sales-tax-us-1.1.1-typescript.fune",
                "size": 38184,
                "sha256": "48bd7c0325669b8b87c67c9218249e42759effb37681398cae751200a8b21ae7",
                "integrity": "sha256-IlBnRzZhgJQIe/94JF8GUowzkxu9El42wM2EcJxcwNo="
              },
              "python": {
                "name": "retail.sales-tax-us-1.1.1-python.fune",
                "size": 38378,
                "sha256": "e791316ca860c2a45dc531fd88091470c79eb8d6827aa841ecee0e55e59c2adf",
                "integrity": "sha256-cLUWlorw72w174KRiCFHo3+AyXTmBfr2dhuWbej33Sk="
              },
              "rust": {
                "name": "retail.sales-tax-us-1.1.1-rust.fune",
                "size": 39563,
                "sha256": "43fefffd69ecc435e578f0fd04f0d3694a1986a97b7a769ed43908497bc32c88",
                "integrity": "sha256-85qV2F9FEHHAUXTnwmllIkWV8mtrqO9AxDvG1vLsJqo="
              }
            }
          },
          "status": "unreviewed",
          "license": "NOASSERTION"
        }
      }
    },
    "retail.shipping-rate": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-1sRRkhKYxZpg7CFbqhKIDAmklDjd8K6KWAqOADfjA5E=",
          "summary": "Delivery charge from a dated rate table by service, zone, chargeable weight and size, with a free-over threshold.",
          "level": 2,
          "tags": [
            "shipping",
            "delivery",
            "postage",
            "carriage",
            "rate-card",
            "free-delivery",
            "courier"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "money.compare": "^1.0.0",
            "math.round-div": "^1.0.0",
            "retail.volumetric-weight": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "retail.shipping-rate-1.0.0.fune",
            "size": 57923,
            "sha256": "821cbeccfca36da34e2a8aca342ac9507a987f7caa583597f553214cacab2c51",
            "languages": {
              "typescript": {
                "name": "retail.shipping-rate-1.0.0-typescript.fune",
                "size": 48730,
                "sha256": "0bd3e15ee6578b31699ca30a4c706140d21a4de6c62f9bfe8dde8545eff18bf8",
                "integrity": "sha256-hv2VWGAEaolicyWYUeO32hYxQN7oGz8UpQ63UzOjRpc="
              },
              "python": {
                "name": "retail.shipping-rate-1.0.0-python.fune",
                "size": 49076,
                "sha256": "e747ba44fe15a9f5276bfa4d5575131fe308bb976ed3401da249fa6a9f042e2c",
                "integrity": "sha256-GOWNcjg5BBhGTdoCWd751+iIQpf8xUw4jXir0CfVc/o="
              },
              "rust": {
                "name": "retail.shipping-rate-1.0.0-rust.fune",
                "size": 51859,
                "sha256": "d6a91b4e432179d011028f804adaed1c85fc0d3f6999d036ae2f8eb800340b0e",
                "integrity": "sha256-R48ub9m3POzXzbJAWMVJ18hmLhcs6EZAzG8H+kbVqCM="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-AC1reAFJJdTP5cUz3Dos0+deXOmDBcM2nM9fhbEs7z4=",
          "summary": "Delivery charge from a dated rate table by service, zone, chargeable weight and size, with a free-over threshold.",
          "level": 2,
          "tags": [
            "shipping",
            "delivery",
            "postage",
            "carriage",
            "rate-card",
            "free-delivery",
            "courier"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "money.compare": "^1.0.0",
            "math.round-div": "^1.0.0",
            "retail.volumetric-weight": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "retail.shipping-rate-1.0.1.fune",
            "size": 62057,
            "sha256": "39fd330b80771b492b4376d7ecbcaef5ad74059b5172124f042f30150bef46c3",
            "languages": {
              "typescript": {
                "name": "retail.shipping-rate-1.0.1-typescript.fune",
                "size": 52856,
                "sha256": "40b617e57c135552a5e07cffb1e5233047786e486ae5808cb40b4a27f5e26d13",
                "integrity": "sha256-pwGY/M9kBMZabz2is7FS94fkjDlQ5cg0MJXP2OIGpJ8="
              },
              "python": {
                "name": "retail.shipping-rate-1.0.1-python.fune",
                "size": 53210,
                "sha256": "c99873caa68799749624aba37350805e7f8f76b00c181b6c86b135ab4a96098e",
                "integrity": "sha256-PD2yW+H444tiFJ3oAtXHb9cw0M0wz/0gKu1EVVZIWlY="
              },
              "rust": {
                "name": "retail.shipping-rate-1.0.1-rust.fune",
                "size": 55985,
                "sha256": "bc823949099d936e82c1e55861c4e53b08cd98e1dd86d1e678746fae0cbd755b",
                "integrity": "sha256-0Iwh//QYtjibIueXfXmOcmOR5yvxLe05E/zujSZWluU="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "retail.sku-generate": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-YxZ4jvwJfffaaV4P/ssMa7DwwRN9LasDvo5LYqN1Fdg=",
          "summary": "Build a deterministic stock-keeping unit code from a prefix and product attributes.",
          "level": 0,
          "tags": [
            "sku",
            "stock-keeping-unit",
            "product-code",
            "item-code",
            "variant",
            "inventory",
            "catalogue"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "retail.sku-generate-1.0.0.fune",
            "size": 10804,
            "sha256": "7ef658222abadfe67f4a35e4484720e326cfec7c0c1a48b09861c4ff9050d9db",
            "languages": {
              "typescript": {
                "name": "retail.sku-generate-1.0.0-typescript.fune",
                "size": 7100,
                "sha256": "d9b1b0cc947846d84c92cdac7fe108f31bce532c1a8a42b9dabec7295427bd93",
                "integrity": "sha256-zoaaJbrVr6eO5jLqlOMD/FicHsT2Lz1LZbdplzpXQl0="
              },
              "python": {
                "name": "retail.sku-generate-1.0.0-python.fune",
                "size": 7192,
                "sha256": "98f1ae533e8c4c63d292f505cdeee16f53fe3e921f631f20df7d11809a134f09",
                "integrity": "sha256-TJ45WtffzXKwnI8XjhBNXM7oTD6fHfIAet1Ox+kSpIo="
              },
              "rust": {
                "name": "retail.sku-generate-1.0.0-rust.fune",
                "size": 7834,
                "sha256": "a48229f66c869e232103cea19c5806a4755f53b50259f93cef98a97a0fbf0578",
                "integrity": "sha256-hqqv9RUg9Q35sQOlXbR/DJZHD4tohqe3zqbeWgMnVg8="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "retail.volumetric-weight": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-wo4gII468wsrDi/+j2vNXA3q0UcG0hX/h+nVllzLfCA=",
          "summary": "Chargeable parcel weight: the greater of actual and volumetric (dimensional) weight, rounded up to a billing step.",
          "level": 1,
          "tags": [
            "volumetric-weight",
            "dimensional-weight",
            "dim-weight",
            "chargeable-weight",
            "parcel",
            "shipping",
            "courier"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "retail.volumetric-weight-1.0.0.fune",
            "size": 12793,
            "sha256": "aae507e675957ea20e4a1fa476747be9fc726667d41008986e4e2dedfe705a4d",
            "languages": {
              "typescript": {
                "name": "retail.volumetric-weight-1.0.0-typescript.fune",
                "size": 8948,
                "sha256": "8709aad899c4cc05175d169d5fd6f3d504aa7e0b9e5fb6eaa8345aa1737e7cbf",
                "integrity": "sha256-wvc2sTKyKKLKRq9c9LCxc7XcHFBWd6GllO2VEgwxNzQ="
              },
              "python": {
                "name": "retail.volumetric-weight-1.0.0-python.fune",
                "size": 9092,
                "sha256": "abf6807600ff463f516d5c1cce45b008862495fe0bf28224ab210579e2b2e8fe",
                "integrity": "sha256-mJKZBhJi8BXw3Nk566KxJM/2gqooUBb7ZlTopARXCj4="
              },
              "rust": {
                "name": "retail.volumetric-weight-1.0.0-rust.fune",
                "size": 9605,
                "sha256": "156165c0c381358be017c77e2875658ead7d59405bed0b33dad8cb9b21b9588a",
                "integrity": "sha256-Izc3a7XA+4Eep1bzRkPbHbWQWjCGK8DBia+9yyt5Yao="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "stats.mean-median": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-7tbJzX8i3ryeHgyoTR9pWALQdtYx2Zp7zSJtxRu49gw=",
          "summary": "Mean, median and mode of a list of integers, with the mean and median as exact fractions.",
          "level": 0,
          "tags": [
            "statistics",
            "mean",
            "median",
            "mode",
            "average",
            "central-tendency"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "stats.mean-median-1.0.0.fune",
            "size": 19364,
            "sha256": "f90bdb4452a1f9b675c30352a8731b29cf937dc78ea902e7b0d2a54d83d9bdf5",
            "languages": {
              "typescript": {
                "name": "stats.mean-median-1.0.0-typescript.fune",
                "size": 11963,
                "sha256": "94700e4284f7ff11d9285fee90af0f0183933c967d34c9963ca7a157e0f489c0",
                "integrity": "sha256-acLSkP+zq6JSM7M8fBQRcs0w3s38M1U7IJ2MYOES57M="
              },
              "python": {
                "name": "stats.mean-median-1.0.0-python.fune",
                "size": 11656,
                "sha256": "1f8257abec5133c919d1b587d720d46eeaf8cfd76b1ce00409a7d82964339222",
                "integrity": "sha256-YgxYzsD171WIKTKrMI4puMFj98w04hhO2zgCQEwsw9s="
              },
              "rust": {
                "name": "stats.mean-median-1.0.0-rust.fune",
                "size": 13183,
                "sha256": "b46e0a229dbd303c528088f3dbccacb97ca0343375cf867deb9d5723ff48fbad",
                "integrity": "sha256-FgxXazmVfrtAGDiC4N18HrYH7ODMpmYxDq39IAiGBSg="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "stats.moving-average": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-dw0xS6lg+B3wz2NIh7iVwm1sMf8TPV2vjfuCHzTfQ10=",
          "summary": "Simple or exponential moving average over a series, one value per full window, rounded to stated decimals.",
          "level": 1,
          "tags": [
            "statistics",
            "moving-average",
            "sma",
            "ema",
            "rolling-average",
            "smoothing",
            "time-series"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "stats.moving-average-1.0.0.fune",
            "size": 14752,
            "sha256": "b198f3f61aee2038d7c4fba2112ddb92138afe094729ec01694fce715c62ce93",
            "languages": {
              "typescript": {
                "name": "stats.moving-average-1.0.0-typescript.fune",
                "size": 8908,
                "sha256": "fe0178bf7bebe1feb46720c7bf34fac096dc2b7b349c2c3896103a015586f5cb",
                "integrity": "sha256-2KYjw060F5+wGnSY1GEeAz7UkXaZsMHgG3MP09tW6uo="
              },
              "python": {
                "name": "stats.moving-average-1.0.0-python.fune",
                "size": 9088,
                "sha256": "125c3a138dbecafcd5776a0434de65ee9c0c9e8fd6429d0fb7c091b0eb6c90a8",
                "integrity": "sha256-uoQV4zX40GGBLZ/GJTiM41/Iisra5sfHy71sY0oPOWM="
              },
              "rust": {
                "name": "stats.moving-average-1.0.0-rust.fune",
                "size": 9474,
                "sha256": "fcb6379a10ca4e64523323750f8f0d3b095cb40ad5543e6d42a3244b8484c3f7",
                "integrity": "sha256-DYhA0/XAViJhnJKdcrfenHjydPIT63suP5h49DvU5Nw="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "2.0.0": {
          "integrity": "sha256-PC2HbhqvkuLfjg2/jwCBbG53qKjACuXnUe0upsP8d2E=",
          "summary": "Simple or exponential moving average over a series, one value per full window, rounded to stated decimals.",
          "level": 1,
          "tags": [
            "statistics",
            "moving-average",
            "sma",
            "ema",
            "rolling-average",
            "smoothing",
            "time-series"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.round-float": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "stats.moving-average-2.0.0.fune",
            "size": 16223,
            "sha256": "a3ae5d80d93991fcecfb0b38c0fdfef47b6272f0925172d288273ab4a28150a5",
            "languages": {
              "typescript": {
                "name": "stats.moving-average-2.0.0-typescript.fune",
                "size": 10876,
                "sha256": "ba35dae41471ec2461318941ef878595a88800a1e2c752a1f76a5a1dcc8b79a5",
                "integrity": "sha256-/lImCawqYetjge8wSiI3d2aNESO46Ue91jA+gbzVWa4="
              },
              "python": {
                "name": "stats.moving-average-2.0.0-python.fune",
                "size": 11052,
                "sha256": "4cb5d7d1a0242b8293c2aa3df597af9eaeab9685864f123ca1fb9d4ee0d8353f",
                "integrity": "sha256-p1hXf8svmk8ybzkJXLNmrPIpyCS6Q3ITzyjAWYieVtI="
              },
              "rust": {
                "name": "stats.moving-average-2.0.0-rust.fune",
                "size": 11361,
                "sha256": "efd891173514c768fd6bf75bd6d4a7f938269408742111b8de53b592093908ae",
                "integrity": "sha256-XEDvbHM1isCDXGRpqsFiajIfG9OwNmVkkRh8/IQ9ldY="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "stats.percentile": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-8oVb45AVLX1Yj7V+ycFmkh8Ma/JYcV4zAy1APgLmvSc=",
          "summary": "Percentile of a list of numbers by a named method: nearest-rank, or linear interpolation (R-7, Excel PERCENTILE.INC).",
          "level": 0,
          "tags": [
            "statistics",
            "percentile",
            "quantile",
            "median",
            "p95",
            "nearest-rank"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "stats.percentile-1.0.0.fune",
            "size": 15267,
            "sha256": "b848e49f013fc86b77acac0821b654c86dea0c1b880a47fd9afe2fdaeac9b79c",
            "languages": {
              "typescript": {
                "name": "stats.percentile-1.0.0-typescript.fune",
                "size": 9571,
                "sha256": "0bd918c8580efbe360c0fcf4dfe39a20aafd48b981eea854f3f07bf830f56a79",
                "integrity": "sha256-XkJSgc/etzMnArxEODNBusMe533wtjXNmaT0lZsmgpI="
              },
              "python": {
                "name": "stats.percentile-1.0.0-python.fune",
                "size": 9844,
                "sha256": "bec7c6aa1289a09da5201d4976abf4cb31c7619f71e1f7b905cf30b8f68794b7",
                "integrity": "sha256-L0eVoaM4q7IdSAyzlNbonobhLpj1aSpaCIahsXb9WHc="
              },
              "rust": {
                "name": "stats.percentile-1.0.0-rust.fune",
                "size": 10284,
                "sha256": "3b2e5e7747398ef7cc552327e96d4f9e777e5cd57122eadc8c106591d7ddea7c",
                "integrity": "sha256-f9PJypLxaJEvzyz4yqzMTbRSY7aiHWJrVO3FxmdzBf4="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "2.0.0": {
          "integrity": "sha256-nkruvKoyK1ZKUAWJ6DGqmc6y/2yRgywVBKbm5L0qBmk=",
          "summary": "Percentile of a list of numbers by a named method: nearest-rank, or linear interpolation (R-7, Excel PERCENTILE.INC).",
          "level": 0,
          "tags": [
            "statistics",
            "percentile",
            "quantile",
            "median",
            "p95",
            "nearest-rank"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.round-float": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "stats.percentile-2.0.0.fune",
            "size": 16571,
            "sha256": "4693d39eb07fa564946633d58010c57ca84c722206051c511be28ab988b4f316",
            "languages": {
              "typescript": {
                "name": "stats.percentile-2.0.0-typescript.fune",
                "size": 11341,
                "sha256": "c5e17c492aa3942383caa0323bae0847d26f43f55b8da67868f5453fbbaab956",
                "integrity": "sha256-u306I7MLoMEFZz2YXVBnKF6/on+iuwvXALMtRWILCf0="
              },
              "python": {
                "name": "stats.percentile-2.0.0-python.fune",
                "size": 11612,
                "sha256": "bb85b30925fa7f80c8c290f25e84ec3920fae0c1455c706ee8f21693c02dbd9f",
                "integrity": "sha256-RTUXxYf2p33HDF6KB1u0z6K4PC8XGzNIZAx/CTbh1jI="
              },
              "rust": {
                "name": "stats.percentile-2.0.0-rust.fune",
                "size": 11996,
                "sha256": "c362b0db7e832b1247c4329f74f8adbaaf7513197fdd97a2d2de7bffac0f2d0c",
                "integrity": "sha256-Qw+HaHClh/u0JyFsFYpmMQv4hMLM9jYJHjBhQlmcHtw="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "stats.standard-deviation": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-t9LL9DUK7nHOxlg6VqbSHbviR/cg+XLy/Gl5186XJjY=",
          "summary": "Population or sample standard deviation of a list of numbers, two-pass, rounded to stated decimals.",
          "level": 1,
          "tags": [
            "statistics",
            "standard-deviation",
            "stddev",
            "variance",
            "spread",
            "stdev"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "stats.standard-deviation-1.0.0.fune",
            "size": 12588,
            "sha256": "aea4bddbb12330d26f7bdff755ca24697691ed9aece2b97892c034b13986048d",
            "languages": {
              "typescript": {
                "name": "stats.standard-deviation-1.0.0-typescript.fune",
                "size": 7924,
                "sha256": "41245ef50aebe12eac14e0efca8b4172431164361c48356e8008654aa0a6cd8b",
                "integrity": "sha256-94JClLXPZyejZzNfMbRvktEdpdpAvmlTA/K9RTm9+3s="
              },
              "python": {
                "name": "stats.standard-deviation-1.0.0-python.fune",
                "size": 8251,
                "sha256": "bf85a112330460ca575e0d993f5399f925b661693d39922e10ddc7702123a438",
                "integrity": "sha256-rWNgh1gxq7F662C0zBDo1/6k3+GIqjj0DSdULH9Me50="
              },
              "rust": {
                "name": "stats.standard-deviation-1.0.0-rust.fune",
                "size": 8493,
                "sha256": "0b6b73db46a2edc2fe3f5d8c418e2477c09c7ebfbbece7245ba720173bd90a6b",
                "integrity": "sha256-mxgfkDGOXCQDLM4p9KjcgfNP3NtsrEOxW96SjWSI0aQ="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "2.0.0": {
          "integrity": "sha256-XJ+lifb8/561IQjAVflZN9JlHS6I9un5H/gTMgRBabs=",
          "summary": "Population or sample standard deviation of a list of numbers, two-pass, rounded to stated decimals.",
          "level": 1,
          "tags": [
            "statistics",
            "standard-deviation",
            "stddev",
            "variance",
            "spread",
            "stdev"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.round-float": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "stats.standard-deviation-2.0.0.fune",
            "size": 13777,
            "sha256": "21e27bf19a71cebfd8a92b40113bd4376f71d00616efdbdcdfc31ca968a95f44",
            "languages": {
              "typescript": {
                "name": "stats.standard-deviation-2.0.0-typescript.fune",
                "size": 9441,
                "sha256": "ec0e02f788dad9f5c080c6a89373cce34ac8d04156f4b52102a49b0cb2da3e79",
                "integrity": "sha256-viNHYCkcircg0jEnO0Ec7Tr7e7uWFCKn3jP4Rqs0jSY="
              },
              "python": {
                "name": "stats.standard-deviation-2.0.0-python.fune",
                "size": 9738,
                "sha256": "445894b37c86eb7dc132b3c7bb7b76c9f1d6562758b8e8454888e730101086da",
                "integrity": "sha256-CHAXsnxSyrRAyLxbCKzoEzgckP6kArzVY7a+t0D6pKQ="
              },
              "rust": {
                "name": "stats.standard-deviation-2.0.0-rust.fune",
                "size": 9962,
                "sha256": "9e766948e0f2ca9cce1d74a7facf3d409cd9746b8c805df23d110f16e0465009",
                "integrity": "sha256-LZCQVewPRNzs2lty5irqyadIh0gCuAdCOIgcSsknAhw="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "stats.weighted-average": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-tNVjYg+aYpEYeANQYj7ptoDMRxRITWlHUlM8AgtOOjg=",
          "summary": "Weighted average of integers, computed exactly and rounded once to stated decimals with an explicit rounding mode.",
          "level": 1,
          "tags": [
            "statistics",
            "weighted-average",
            "weighted-mean",
            "average",
            "mean",
            "gpa"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "stats.weighted-average-1.0.0.fune",
            "size": 13212,
            "sha256": "b7bb1a17d5815e23abb96433395dccabe366ec5e241f044edb1bfa80f4b08b40",
            "languages": {
              "typescript": {
                "name": "stats.weighted-average-1.0.0-typescript.fune",
                "size": 8049,
                "sha256": "e46c8840fc6339795016bd51af7f53b1a39357410144f989ffd8f14d9ec5d4e2",
                "integrity": "sha256-RtKfwdzQZzNmhUy0kz6WXP+8lPtk5GpBnxm+o08qnEk="
              },
              "python": {
                "name": "stats.weighted-average-1.0.0-python.fune",
                "size": 8089,
                "sha256": "3d5cb60ba1a39123b4763eb8d82a834a1acc923c6912bd01b830454b5f52570c",
                "integrity": "sha256-fOGODQXFVCL1sNMH91miM/frKWcfOSCsKUq8c6gydEM="
              },
              "rust": {
                "name": "stats.weighted-average-1.0.0-rust.fune",
                "size": 8826,
                "sha256": "1afb8615b99fc677290586ba889e45156b2aecf988083d41f45d8edc438485ef",
                "integrity": "sha256-gSSWquoCffr6HbxE4bafjUD2xDL2QYXomuOc0HaYoqM="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "subscriptions.churn": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-V9T0tGC7UI/9LfQrTEsEM8nqSj7JmswoWLMc5WklM3M=",
          "summary": "Logo churn, gross and net revenue churn, and gross and net revenue retention for one period, in basis points.",
          "level": 1,
          "tags": [
            "subscriptions",
            "churn",
            "retention",
            "nrr",
            "grr",
            "net-revenue-retention",
            "revenue-churn",
            "logo-churn",
            "saas",
            "metrics"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "subscriptions.churn-1.0.0.fune",
            "size": 19176,
            "sha256": "2de1c509adb029c3c9ebed57f1d3285cc2bbcaa850afc64282e4384e7ceb12a6",
            "languages": {
              "typescript": {
                "name": "subscriptions.churn-1.0.0-typescript.fune",
                "size": 13667,
                "sha256": "080be69486b9e208e1861328f7f008cbbaece013794ba9d440d1e6b42a7262d9",
                "integrity": "sha256-W2/cy1EB7DaU+3DBwzRouEhhwG4iuKb1IdGCaF5GAx0="
              },
              "python": {
                "name": "subscriptions.churn-1.0.0-python.fune",
                "size": 13886,
                "sha256": "627302ab5055cc112c27c1a3d72fce33e7b4054a0f358b1b97d39688ee1eafcb",
                "integrity": "sha256-TzALhaUOuaNb+zswpzCakbcLfCJnbbdRqt1YPfZFkoc="
              },
              "rust": {
                "name": "subscriptions.churn-1.0.0-rust.fune",
                "size": 14809,
                "sha256": "7e4bdfb0b0823a4e58c780e72758dbd1d7d6411c8120c31791940f1679a36b98",
                "integrity": "sha256-lckKVvzYersdI0F24xtvEJuyZqvKK0d1suME1C2i5YM="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "subscriptions.dunning-schedule": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-RWsqh8y3q9nByTVAXa7IHtd1ihJvH2GKlqvAI9wXLrI=",
          "summary": "Retry dates for a failed subscription payment from a retry policy, in calendar or business days.",
          "level": 1,
          "tags": [
            "subscriptions",
            "dunning",
            "retry",
            "failed-payment",
            "payment-retry",
            "collections",
            "schedule",
            "business-days"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0",
            "dates.add-business-days": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "subscriptions.dunning-schedule-1.0.0.fune",
            "size": 9946,
            "sha256": "29af783bacb57f016d8ee8462b19297e142602118f308f1cf84ac8beb18c75d1",
            "languages": {
              "typescript": {
                "name": "subscriptions.dunning-schedule-1.0.0-typescript.fune",
                "size": 6945,
                "sha256": "e9a79d33c013481c15bd325b5fff0d45f3aef6ca77df486fccc06b3c42c9ef0c",
                "integrity": "sha256-IZ8BIrz+feAw4as66IvG0b4UzAKgV81onWTsH4GD82c="
              },
              "python": {
                "name": "subscriptions.dunning-schedule-1.0.0-python.fune",
                "size": 7039,
                "sha256": "b1d0c9db1d456243d9444c1c1a5316dd3a7850fd48c02196bcfe3daa11ab5b64",
                "integrity": "sha256-zeu/hC5rM0eoIjzwekXWuwWX86ev+6Lqj0xIFKwKGGs="
              },
              "rust": {
                "name": "subscriptions.dunning-schedule-1.0.0-rust.fune",
                "size": 7632,
                "sha256": "e4f8dd94cab3c0574a983ffdbbcfba2905f5b7c47601e9b4784b7136c6db61e4",
                "integrity": "sha256-24Xbzwb9Ub6yrcTeg/IJ6XNbUQwMFaF69iFsK5yPTlM="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "subscriptions.invoice": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-xvu4OsVFUhWSTelsKC9AE2kvKHY+72Ej4pYDS8PpoTY=",
          "summary": "A subscription renewal invoice: plan, add-ons and usage, coupon discounts by billing period, and VAT.",
          "level": 3,
          "tags": [
            "subscriptions",
            "invoice",
            "renewal",
            "billing",
            "coupon",
            "discount",
            "vat",
            "saas",
            "recurring"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "money.allocate": "^1.0.0",
            "money.apply-rate": "^1.0.0",
            "finance.invoice.calculate": "^1.0.0",
            "finance.invoice.line-total": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "subscriptions.invoice-1.0.0.fune",
            "size": 46731,
            "sha256": "7282cffb4acedf2a62ba3f257a023e3d5357736d3babcede57565cd471e3ccc7",
            "languages": {
              "typescript": {
                "name": "subscriptions.invoice-1.0.0-typescript.fune",
                "size": 35644,
                "sha256": "170714d14f6d6f4177b777631a3f798ff667d790f76c4535d7478369c0ff8d8b",
                "integrity": "sha256-QEJLeWT0u3Fl9EEIJSPFLgON+mf2KXcncojoTcJYvl8="
              },
              "python": {
                "name": "subscriptions.invoice-1.0.0-python.fune",
                "size": 35955,
                "sha256": "315d517a3ce7bd3f4b1e85f91a58cb74d10dfadd39063d05ef61f968f1970b64",
                "integrity": "sha256-5J2VxZawoE1zvDqXyoZMcpZfxF6EGPqasWTucZKkOPw="
              },
              "rust": {
                "name": "subscriptions.invoice-1.0.0-rust.fune",
                "size": 37650,
                "sha256": "e76dc67a2010325b2ab8ecd30e1303eb7b75c8dfe0ef0d1129cd115b7ed67b6d",
                "integrity": "sha256-fvXhGW3K9Z8yGI7LranqCRlkdkAcD7YdHzASGUXjV5c="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "subscriptions.ltv-cac": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-1Qf3KQeDULa3lftFqeakNfjLNXPBuiP7Nu7nleJmqsA=",
          "summary": "Customer lifetime value, LTV to CAC ratio and CAC payback months from ARPA, gross margin, churn and CAC.",
          "level": 1,
          "tags": [
            "subscriptions",
            "ltv",
            "clv",
            "lifetime-value",
            "cac",
            "payback",
            "unit-economics",
            "saas",
            "metrics"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "subscriptions.ltv-cac-1.0.0.fune",
            "size": 14952,
            "sha256": "725964865268be00d902a309ce0d11889e068dda8249a82b4d7074e26c23c6ae",
            "languages": {
              "typescript": {
                "name": "subscriptions.ltv-cac-1.0.0-typescript.fune",
                "size": 10053,
                "sha256": "fde8bcb0902f3587c898706850de6b9a725ccc37b14ee9c945a06c9e2fafbac4",
                "integrity": "sha256-5wJAj6IPX4LkSSaYVFOiuJUd8qzdbEFvQv0uNrz3bb4="
              },
              "python": {
                "name": "subscriptions.ltv-cac-1.0.0-python.fune",
                "size": 10140,
                "sha256": "7159f0ce0555679a09a3f31537d71e90e42ae39453bd2a899ffc013e1af9e0ac",
                "integrity": "sha256-OUx1RsLHc3fPBwbSqNLT+JYnMe/a1NiHcfqg/zdyrNg="
              },
              "rust": {
                "name": "subscriptions.ltv-cac-1.0.0-rust.fune",
                "size": 11359,
                "sha256": "ae655099e8d164c314e26df19b8ff2e727c660789beab21d9f8a2ff23341cc67",
                "integrity": "sha256-ozujvqVez52zhXfM3njPWBJaoF1uh65ZcbEmNAcHfQM="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "subscriptions.mrr-arr": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-2RY4nN2Qsnq+eYFad6bteZeziA5PeWacKs11Cl/9BfA=",
          "summary": "Monthly and annual recurring revenue from a list of subscriptions, normalising intervals and leaving out trials.",
          "level": 1,
          "tags": [
            "subscriptions",
            "mrr",
            "arr",
            "recurring-revenue",
            "saas",
            "metrics",
            "annual-run-rate",
            "normalise"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.rational": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "subscriptions.mrr-arr-1.0.0.fune",
            "size": 19756,
            "sha256": "c365b390da882b1e456067e309fd722583bc83f1878ef19af2c14429fd7b479c",
            "languages": {
              "typescript": {
                "name": "subscriptions.mrr-arr-1.0.0-typescript.fune",
                "size": 14524,
                "sha256": "88ebeb900f1a52a6eab8e92aec794a5eb8911d9259799926acf8e185e09d86b3",
                "integrity": "sha256-K+LfSK8AN6w7AIeoPntJ9RBus0u5SGMv/lI8c10MLbk="
              },
              "python": {
                "name": "subscriptions.mrr-arr-1.0.0-python.fune",
                "size": 14527,
                "sha256": "5c75e015e2539f6c133e82d9de0cfbf438c4ac308f24497d78daf7404a6912ab",
                "integrity": "sha256-wesRYWtZeiEcLf1zQrk/dvQbRjYtq/kv/BFIf96T4aE="
              },
              "rust": {
                "name": "subscriptions.mrr-arr-1.0.0-rust.fune",
                "size": 15493,
                "sha256": "c82499f2aef6bffe1f4cf6dbe271f00dce29dbd223e99801e0e68126503bfb90",
                "integrity": "sha256-L8y4CJUnlpcruBnn12zz0G7nQA0XdyLg4OftK62LM7Y="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.1.0": {
          "integrity": "sha256-vJPkpCWRFNy3GwUkxstxlGKDsseQh6f6tEllY4vyX3k=",
          "summary": "Monthly and annual recurring revenue from a list of subscriptions, normalising intervals and leaving out trials.",
          "level": 1,
          "tags": [
            "subscriptions",
            "mrr",
            "arr",
            "recurring-revenue",
            "saas",
            "metrics",
            "annual-run-rate",
            "normalise"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.rational": "^1.0.0",
            "subscriptions.next-billing-date": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "subscriptions.mrr-arr-1.1.0.fune",
            "size": 20656,
            "sha256": "00720786d3b507dce9b22f2e8966b5ec051a2a993e0df8eef8ed7f42d5596938",
            "languages": {
              "typescript": {
                "name": "subscriptions.mrr-arr-1.1.0-typescript.fune",
                "size": 15158,
                "sha256": "730aebae79246b8ec6a81f9f4e7cca5424b268d9f073ef77404276ca921087b7",
                "integrity": "sha256-MP8jj3eplRtEzvDC1+LBJLZ4qIkUTuvpEgQ6GiKzHTk="
              },
              "python": {
                "name": "subscriptions.mrr-arr-1.1.0-python.fune",
                "size": 15133,
                "sha256": "dfa091b1b0bfbd68854af9be88cdac473576ed67c6512e8c05b76b299dbfe498",
                "integrity": "sha256-KbyLGxgI1vdHBS8xNazSpufJlYMxhQPlwJgGf9T5Nes="
              },
              "rust": {
                "name": "subscriptions.mrr-arr-1.1.0-rust.fune",
                "size": 15833,
                "sha256": "0733ba3d579871425366208d6432b61289e8755f6ac832ab90364882c85956b0",
                "integrity": "sha256-neLjA9y6v90HjWzSYYmt25rK9fB8sZNhR334gXEtoqQ="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "subscriptions.next-billing-date": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-peRlgkfWdFFQ32N5kALYimbYr1x1vnxvsmVs2g6hLAo=",
          "summary": "The next renewal date after a given day, from a billing anchor and interval; month-end safe.",
          "level": 1,
          "tags": [
            "subscriptions",
            "renewal",
            "billing-date",
            "billing-cycle",
            "anchor",
            "recurring",
            "next-invoice",
            "month-end"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0",
            "dates.add-months": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "subscriptions.next-billing-date-1.0.0.fune",
            "size": 13831,
            "sha256": "192959e1946903593052c3226a188eb9198309e0da4edf0b391ed04485bb4400",
            "languages": {
              "typescript": {
                "name": "subscriptions.next-billing-date-1.0.0-typescript.fune",
                "size": 9382,
                "sha256": "889755b71e4b7553cb529c68cdb6823ad15d25378e5537ec8d84b3450c6e1c7b",
                "integrity": "sha256-uGr+f0w4eSmmQmexdW4ga3BXeJ22w4xikjZPqtL9o1k="
              },
              "python": {
                "name": "subscriptions.next-billing-date-1.0.0-python.fune",
                "size": 9257,
                "sha256": "ec67d9ae57ce21fcb523414586db8b7d098fad56ab55c1362a794ecc7217a4ec",
                "integrity": "sha256-vD3/iWPWmKbFAF94qjwrQetZeoi9X7YW/Wjz+QA7GBI="
              },
              "rust": {
                "name": "subscriptions.next-billing-date-1.0.0-rust.fune",
                "size": 9612,
                "sha256": "0460beb7799f8fe47041f7cd3ad8386444aaad74473350b4e6795d4108aec986",
                "integrity": "sha256-opGGhEiBgdEqJqz78VUXEDnRbwZrP455dM1haUuXBUU="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "subscriptions.proration": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-Thpm9MX1Y4LScBslPxnlETFFd6vKs5pRF2++2cPVTak=",
          "summary": "Mid-cycle plan change: credit for unused time on the old plan and charge for the rest of the period on the new one.",
          "level": 2,
          "tags": [
            "subscriptions",
            "proration",
            "prorate",
            "upgrade",
            "downgrade",
            "plan-change",
            "mid-cycle",
            "credit",
            "saas"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.add": "^1.0.0",
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0",
            "dates.days-between": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "subscriptions.proration-1.0.0.fune",
            "size": 18130,
            "sha256": "189c16e33e151e6292e99ef2c233360a38e28ac036826ef9729369aa5a430d98",
            "languages": {
              "typescript": {
                "name": "subscriptions.proration-1.0.0-typescript.fune",
                "size": 13846,
                "sha256": "40f54975c66e6808c5ef0deb47b6e0522747aa5d6e324050bb93a24e6ddf4c22",
                "integrity": "sha256-CrxMGMe/0gTIozTfaHcEmuCiRR9+063W2fL3fmxkQV0="
              },
              "python": {
                "name": "subscriptions.proration-1.0.0-python.fune",
                "size": 13885,
                "sha256": "fec8fe96df780f9748bcbf9b0f329864874e682f1241a9b1db80cf883c773109",
                "integrity": "sha256-vnGE6EHBOF22qZrDCNdt7AHRPTRErLG/S9C3Z7Vy7Vw="
              },
              "rust": {
                "name": "subscriptions.proration-1.0.0-rust.fune",
                "size": 14739,
                "sha256": "54cd5d8cd7335cb63c5c0a57bc299b2c9b1636e2a3376a720a13d00d6c25a834",
                "integrity": "sha256-9DJOgaWMqVpSBp6L+4BiaNaWq47wHwYQK+v8r69rGFo="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "subscriptions.trial-end": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-eZyj1XJE1rpdMmQMUc+zu4cofxuguSm7fpmCDKGHnoE=",
          "summary": "When a free trial ends and the first payment is due, from the trial's start date and length in days.",
          "level": 0,
          "tags": [
            "subscriptions",
            "trial",
            "free-trial",
            "trial-period",
            "first-charge",
            "saas",
            "billing"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "subscriptions.trial-end-1.0.0.fune",
            "size": 9102,
            "sha256": "34e5fca082f1dd914bf792c858bd5b8e161ad3cf9dfe5681ace9b206478a7b3e",
            "languages": {
              "typescript": {
                "name": "subscriptions.trial-end-1.0.0-typescript.fune",
                "size": 6491,
                "sha256": "05ff554172444de7bb13890e7d1b8adad528d38150ea8b4bd809143705c32ba1",
                "integrity": "sha256-xRja8izI51Ky1UEtjbUYJeG6hKGeQNeupnpITWJumck="
              },
              "python": {
                "name": "subscriptions.trial-end-1.0.0-python.fune",
                "size": 6548,
                "sha256": "60b84a0f5113aad47f673a06c5efe85123f79956f6b1a62f413ae3d8c5411e27",
                "integrity": "sha256-a+WWuP346EcJ5bwD2ATBkNJ7rPRu21+VPKNR22Kt8wU="
              },
              "rust": {
                "name": "subscriptions.trial-end-1.0.0-rust.fune",
                "size": 6971,
                "sha256": "7a772097ffd09a01adba6d88862ee23564c8313b6f36a09002fbda28afd1a4cd",
                "integrity": "sha256-KaAJXNgYgevYsC+NzjL+RlqEZKvqDWZ1QmUS75YFxbo="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "subscriptions.usage-tiered": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-0546zAQpV7w3MbpKWByi6IA1kisX193Yomu6ne2LclQ=",
          "summary": "Price metered usage against tiers, graduated or volume, with an optional flat fee per tier.",
          "level": 2,
          "tags": [
            "subscriptions",
            "usage",
            "metered",
            "tiered",
            "graduated",
            "volume",
            "pricing",
            "billing",
            "saas"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.sum": "^1.0.0",
            "money.amount": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "subscriptions.usage-tiered-1.0.0.fune",
            "size": 36389,
            "sha256": "a95d14505f62a99c7864d1763d9cb2cef7fb5c178ad87c07060a7fe269a41a97",
            "languages": {
              "typescript": {
                "name": "subscriptions.usage-tiered-1.0.0-typescript.fune",
                "size": 28511,
                "sha256": "0894305877bfe62766452d40eb7c4212ef3a5a0bd42b5319b596eb049d948a1c",
                "integrity": "sha256-aKFv2275NXAhioWL/an3q14utAn1AHe8FWQuavQO0nA="
              },
              "python": {
                "name": "subscriptions.usage-tiered-1.0.0-python.fune",
                "size": 28681,
                "sha256": "fc77a831e7d5d6ee6059e47367c74aaf18fbe5a7f03cb6ece725950101ee6b52",
                "integrity": "sha256-p//eps8eMoTnT0PqNgJDnS1SYx0JJyGZw1ljnxgWb4M="
              },
              "rust": {
                "name": "subscriptions.usage-tiered-1.0.0-rust.fune",
                "size": 30397,
                "sha256": "4066522a5d8ec60df6b8924cc0b3ef622926336614dd2c3a148a44861f0ab360",
                "integrity": "sha256-9dbhGpPklIU+cAj6khbMSZ5N3KzTolqUP/GQfck+yIY="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "telecoms.call-rating": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-bA1FAYPoRd2YsB0+sKZwKjCtByL9Hn+NfsPRSo4AFsA=",
          "summary": "Rate a call from a rate deck: longest-prefix destination match, billing increments, connection fee and minimum charge.",
          "level": 2,
          "tags": [
            "telecoms",
            "call-rating",
            "rating",
            "voip",
            "rate-deck",
            "prefix",
            "billing-increment",
            "per-minute",
            "cdr"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "telecoms.call-rating-1.0.0.fune",
            "size": 49092,
            "sha256": "60fcc9138dca3fd49ac1a75f78343197e8b86a26de086cdb9af785cfd5a13e74",
            "languages": {
              "typescript": {
                "name": "telecoms.call-rating-1.0.0-typescript.fune",
                "size": 40889,
                "sha256": "8dbd1ed37617f441c4cfa72af5c4c3b6629c74f7bb2fb955340f085468cb837d",
                "integrity": "sha256-QfHxiLhkKnWMt433zeLy3oTJY/KlxvcD8nzUuI1YMLU="
              },
              "python": {
                "name": "telecoms.call-rating-1.0.0-python.fune",
                "size": 41238,
                "sha256": "ec6e88654ba8a11c0164181d26202339f0c9783e71b1b62133fe2d984c8287e9",
                "integrity": "sha256-SHEaCx2UCaF4jk5A1hNMCfEoVVJqLjuU34/MAjWLYAQ="
              },
              "rust": {
                "name": "telecoms.call-rating-1.0.0-rust.fune",
                "size": 42551,
                "sha256": "02d4ed5f86b4157c67036a69d15d62a53b702f891844c96ffa06f9d0f9850072",
                "integrity": "sha256-fNhzdn6lH3QJyOcuypYXkhrxMUKVnuzaRnRMvG6hac8="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-YdoEOuCj0OVxJ3dt8yZMXC1EaWJGZVqbsIuXpHs3Twk=",
          "summary": "Rate a call from a rate deck: longest-prefix destination match, billing increments, connection fee and minimum charge.",
          "level": 2,
          "tags": [
            "telecoms",
            "call-rating",
            "rating",
            "voip",
            "rate-deck",
            "prefix",
            "billing-increment",
            "per-minute",
            "cdr"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "telecoms.call-rating-1.0.1.fune",
            "size": 53002,
            "sha256": "8ce31e9dc6f4de068db64d17e0eda321b01d477f7d60fd5f6aa692a6c936a440",
            "languages": {
              "typescript": {
                "name": "telecoms.call-rating-1.0.1-typescript.fune",
                "size": 44793,
                "sha256": "6ec8e7af9214c4976a9b96961dc11f2c53f88306107b8fd0c37f928a2d33baa8",
                "integrity": "sha256-611tQQoCcWJIwtOFWOKpOOKzlZOo3F+bnmIthSCXVJc="
              },
              "python": {
                "name": "telecoms.call-rating-1.0.1-python.fune",
                "size": 45148,
                "sha256": "e08e52b466374000c092dd43d0b517c372198e752fe67b6078c98a3aeb2a0cf4",
                "integrity": "sha256-iTp95uk/H3sxUt+/wCo64nt7ps7hIg1lIyJbPOzhIOc="
              },
              "rust": {
                "name": "telecoms.call-rating-1.0.1-rust.fune",
                "size": 46455,
                "sha256": "3a1a8e6ef14c949991fa18a895294f55fb6be5048e69ad60558b87227b67c885",
                "integrity": "sha256-I/soK0H/+rqEreaLyneY+gk++0ar9V2bVQpdHP3YACE="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "telecoms.data-allowance": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-52W9mllReci+D55yDx3APP4YkfqEZhCh9TMv3baqaJ4=",
          "summary": "Mobile data allowance used and remaining, and the overage charge in whole blocks with an optional spend cap.",
          "level": 1,
          "tags": [
            "telecoms",
            "mobile",
            "data-allowance",
            "overage",
            "usage",
            "bundle",
            "out-of-bundle",
            "spend-cap"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "telecoms.data-allowance-1.0.0.fune",
            "size": 16774,
            "sha256": "1303c6b9048c3779a132c0ecf21d9968ae11ccd7831036a9704c4efd489e8939",
            "languages": {
              "typescript": {
                "name": "telecoms.data-allowance-1.0.0-typescript.fune",
                "size": 11684,
                "sha256": "45870232cf4c77f145166ed556c7b7ce72e12a186179a92c0f4be17dcfffae92",
                "integrity": "sha256-okRqyzkoD5+KsDS44kOIbQbCMbtlaDZQ60OJeFTtXPo="
              },
              "python": {
                "name": "telecoms.data-allowance-1.0.0-python.fune",
                "size": 11871,
                "sha256": "09873ffafcd045e74eb7cf0122f976e7c58c546fa76a7b059b4e0fcd3045e056",
                "integrity": "sha256-nHPewnIn/1JUdg5Zp9v293fRgSHN3PXmq5VqcMQmTt8="
              },
              "rust": {
                "name": "telecoms.data-allowance-1.0.0-rust.fune",
                "size": 12829,
                "sha256": "e40f7e95b482098c169156d42dd2401dd42f23e30457cd9d8e6811637804e4c6",
                "integrity": "sha256-lBJNnGcq5pWnHjz53ihpC1uNfgWbgOJUjAXA2rPx0G0="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "telecoms.roaming-charge": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-YlMvdhvU5M5dmxDV9f8gjetRyhe3OmV8XM9ze1Q0kMg=",
          "summary": "Roaming charges for a trip abroad from a dated tariff table of zones: daily fees, data, calls and texts.",
          "level": 2,
          "tags": [
            "telecoms",
            "roaming",
            "mobile",
            "abroad",
            "zone",
            "tariff",
            "daily-pass",
            "travel"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.sum": "^1.0.0",
            "money.amount": "^1.0.0",
            "dates.add-days": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/roaming-tariffs.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "telecoms.roaming-charge-1.0.0.fune",
            "size": 26052,
            "sha256": "bf9affc1d7cdd4b408cd9da8a81490bf46befb5b4fdac23ca86bc8a088e7daa9",
            "languages": {
              "typescript": {
                "name": "telecoms.roaming-charge-1.0.0-typescript.fune",
                "size": 17968,
                "sha256": "a7e517ad4befe4219b13edc66778b232c587c7aa900d7c4ff299f4370d2c236d",
                "integrity": "sha256-D+aoY+tRx8BOxqhVqoSggo2nGOiI5sLaFni2KSCKlQU="
              },
              "python": {
                "name": "telecoms.roaming-charge-1.0.0-python.fune",
                "size": 18334,
                "sha256": "93100092da1049797b644878871f3ad92f6247732a7f664cffc6b144918c2f6c",
                "integrity": "sha256-1gaXhOrQaEAC0Dycgpxer78rQt2ENTzaD9zSNaXxmKg="
              },
              "rust": {
                "name": "telecoms.roaming-charge-1.0.0-rust.fune",
                "size": 19740,
                "sha256": "9e7e8528458983eea180f51e5b7e4abc176c80d52803e059fd19df6036a20be0",
                "integrity": "sha256-b7wV/IMRRgKeHxKdqAtUnbAzIHAUfOXqDeBIY33d75Q="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.0.1": {
          "integrity": "sha256-X5Hk+aVnBJ29/Ca51zweqUsiI7yhgs/TdVX0OgAEsS0=",
          "summary": "Roaming charges for a trip abroad from a dated tariff table of zones: daily fees, data, calls and texts.",
          "level": 2,
          "tags": [
            "telecoms",
            "roaming",
            "mobile",
            "abroad",
            "zone",
            "tariff",
            "daily-pass",
            "travel"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.sum": "^1.0.0",
            "money.amount": "^1.0.0",
            "dates.add-days": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/roaming-tariffs.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "telecoms.roaming-charge-1.0.1.fune",
            "size": 26410,
            "sha256": "d894624e3f41bf0cef0e6e79c70a1b3be68f6077aa0f0dfa1fe4546ddae16c8b",
            "languages": {
              "typescript": {
                "name": "telecoms.roaming-charge-1.0.1-typescript.fune",
                "size": 18324,
                "sha256": "7a563701a218dd85314b302540092dfee3936ceacd85eff092eb1017ba854e06",
                "integrity": "sha256-SnMJrBnvVgdk0lDJrjYE2jvalojMjA9/qf8uByj64oU="
              },
              "python": {
                "name": "telecoms.roaming-charge-1.0.1-python.fune",
                "size": 18692,
                "sha256": "60983709e21c675dad8edf0ddc269f76f478ec2bc58bd516c4a2670677b84786",
                "integrity": "sha256-7zV5Y00pzA/o2a2jSnh1HiE21JU3Fk19PkLEwZeNwgo="
              },
              "rust": {
                "name": "telecoms.roaming-charge-1.0.1-rust.fune",
                "size": 20096,
                "sha256": "f11c4a8944c4d1d76373b31e68ffce4920158bb49f9c64054d405228989bed0d",
                "integrity": "sha256-H3uEeGiJDx9nu4vmFKpU9oiMidCUKvLY44UT2Fh+Jes="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "text.format-decimal": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-yZH0N5zXpurL7PmG7OT2vwlcBAEpw5LswQoker+2vWc=",
          "summary": "Format a float as plain decimal text with fixed or trimmed places and optional grouping, identically in every language.",
          "level": 0,
          "tags": [
            "format",
            "number",
            "decimal",
            "to-fixed",
            "thousands-separator",
            "display",
            "text",
            "float"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.round-float": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "text.format-decimal-1.0.0.fune",
            "size": 10670,
            "sha256": "dfb1ce562594c30b832d373293ea7f9748721400553b6297338c3bfdf3e1962b",
            "languages": {
              "typescript": {
                "name": "text.format-decimal-1.0.0-typescript.fune",
                "size": 7397,
                "sha256": "d8779fb1c8064b0728c928dfeda4e7ced7158ee6cee3950205ae559707455018",
                "integrity": "sha256-UITWyLzfYWS0diJPX4dfTD6euI1JZKY+Im7JU/yXBKY="
              },
              "python": {
                "name": "text.format-decimal-1.0.0-python.fune",
                "size": 6996,
                "sha256": "17d8a797041548896d19b2f75e404ed3c3df799ccbda9d8ecc2d2b885969abdc",
                "integrity": "sha256-nx92nkcz6jJFgu6h/PazFMoAbeyubx3bi5hIoJU/oI8="
              },
              "rust": {
                "name": "text.format-decimal-1.0.0-rust.fune",
                "size": 7599,
                "sha256": "ca861fb4d86f893e0351007fbe6267ef429a8099313dc86f1b3b14d41c5374bb",
                "integrity": "sha256-X+FOSW0XxUUqIxOkUkKy94nkjN6RQ3n6JA7HKhzF4og="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "text.initials": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-R4j/orfhSCM8TX+o2siUcpPYV5+ZPkPoeuc+rlGXitE=",
          "summary": "Initials from a personal name for avatars and signatures: \"Jean-Paul Sartre\" is \"JPS\".",
          "level": 0,
          "tags": [
            "text",
            "initials",
            "name",
            "avatar",
            "monogram",
            "abbreviation",
            "person"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "text.initials-1.0.0.fune",
            "size": 13352,
            "sha256": "e40807e13cc5bc3f27e7c437cea64cf86e010c14d9b57bb11ef839683ec2f8d7",
            "languages": {
              "typescript": {
                "name": "text.initials-1.0.0-typescript.fune",
                "size": 7706,
                "sha256": "608d912d8b4696409591c01be7dcfe1ae8533b5c9adccb6dedbf496111f1e89b",
                "integrity": "sha256-QfNUnPjx/txDURDf6yRLzJ7eg7W6IIwxMUdmd3tZzSA="
              },
              "python": {
                "name": "text.initials-1.0.0-python.fune",
                "size": 7553,
                "sha256": "a14682a4383addb3220cf66f448065a799541b9e0bae4cfd25484db9d34200d9",
                "integrity": "sha256-vJD+o1LxnYNPhy/5qsC+C/CCN2V3c3PwW/KdUlgNZb4="
              },
              "rust": {
                "name": "text.initials-1.0.0-rust.fune",
                "size": 8103,
                "sha256": "072657c1feee4c6fcff10bdeab5665e8f4e2d9bf2bba4bd76fab353062c0ac51",
                "integrity": "sha256-T7XGv/BMNcUHcXBEmbfd0H7Rp2x/E4iqlRGn1WDiVn4="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "text.integer-to-words": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-nVOkFbTj5W2O/py9H1ZUWrk7WqSuDHGh4Hp0xLjUMKQ=",
          "summary": "Spell out a whole number in British English words, with \"and\" the way a cheque writes it.",
          "level": 0,
          "tags": [
            "text",
            "number",
            "words",
            "spell-out",
            "cheque",
            "check",
            "british",
            "english"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "text.integer-to-words-1.0.0.fune",
            "size": 14665,
            "sha256": "10077b87722a7d653cc638e87d36928c6c58749c0d5e58c5d408a21f496ad8b9",
            "languages": {
              "typescript": {
                "name": "text.integer-to-words-1.0.0-typescript.fune",
                "size": 8518,
                "sha256": "04253cb79990b6652c7dbf23f80ae21a80c7684f6bf32b48c787976cc3d67e63",
                "integrity": "sha256-03ExqkZ9gaKxVv/OCH20+INwrqxVwlIoCQAl0s2nLoU="
              },
              "python": {
                "name": "text.integer-to-words-1.0.0-python.fune",
                "size": 8688,
                "sha256": "5ea65d30fb63dc34e0b6b7f040d90238d7abce29175ff0fb49d26377ad17a49c",
                "integrity": "sha256-BLSu1VF75uP7ZG60cPXVKvfEHbHsbj+pGWwtL9cxvHM="
              },
              "rust": {
                "name": "text.integer-to-words-1.0.0-rust.fune",
                "size": 9343,
                "sha256": "505ff3ed799235bd8214fa794f5ee76567ea151330345127b60f34cf2cc5ba9f",
                "integrity": "sha256-v85tU/Xmd5Ao++1rSywpK/csuN4pShORValG9tVvCZI="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "text.mask": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-D0G83xHo7qYYHFM3VmhcTyaRxAJBDfoPndniD8eQqG8=",
          "summary": "Mask all but the last n characters of a card, account or phone number, optionally keeping separators.",
          "level": 0,
          "tags": [
            "text",
            "mask",
            "redact",
            "obscure",
            "card",
            "account",
            "pci",
            "privacy",
            "last-four"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "text.mask-1.0.0.fune",
            "size": 10511,
            "sha256": "e1bbb7d0741d771c6ccf2ae30859e642453a9ee706208c1183714ba54a1668fa",
            "languages": {
              "typescript": {
                "name": "text.mask-1.0.0-typescript.fune",
                "size": 7208,
                "sha256": "10cbc9b8e3527003db806e075aa22247ac467ff820db1e77b7a72a3bae3f4e53",
                "integrity": "sha256-J4hSutVFIcgq1eW7x0bdfV2HfR73p4C6gGCnK8GUotE="
              },
              "python": {
                "name": "text.mask-1.0.0-python.fune",
                "size": 7249,
                "sha256": "a38d842c6923f08343ac86d256a9d2ad199f6cb9589113ccbc78c0691db2e86d",
                "integrity": "sha256-9QrASywncpWfYxfO9uoc7d0brg5WjSJnK28PGBo2Axg="
              },
              "rust": {
                "name": "text.mask-1.0.0-rust.fune",
                "size": 7272,
                "sha256": "d757de7759c72076bdcd6bb6028b03731b5d503ac96b6282f0cebd9219e7ffc5",
                "integrity": "sha256-+UTaEu/OR6husILcjkwcTyGfn46ksZYWMH0+H+MiNT8="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "text.normalise-name": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-GHZlqZEWqvZtKz/jaDLY8CcEWaQwvRPalsCWbOVL9uY=",
          "summary": "Tidy a personal name: trim, collapse whitespace and title-case, with Mc, Mac, O', hyphen and van/de rules.",
          "level": 0,
          "tags": [
            "text",
            "name",
            "normalise",
            "normalize",
            "title-case",
            "capitalise",
            "person",
            "surname"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "text.normalise-name-1.0.0.fune",
            "size": 20343,
            "sha256": "0bf63c83fe4c2e377d0cdaaa48a46a62df8d3f2ca06519e1f2eda52282043849",
            "languages": {
              "typescript": {
                "name": "text.normalise-name-1.0.0-typescript.fune",
                "size": 11662,
                "sha256": "6de35cf140bde6ed5586734cbf1ac027a974a643256e308139d44b365d9f7500",
                "integrity": "sha256-ZbNQtInY83QDsnB9MzD7/ivZowXRtdcqLplHl92Cs4E="
              },
              "python": {
                "name": "text.normalise-name-1.0.0-python.fune",
                "size": 11329,
                "sha256": "a353080ffef6306220603e2df0a71f0d3a22c826ea4960f7a8c80b2e83977062",
                "integrity": "sha256-UeltS+i8CZ/yKe/aEIFIanMgt+9st+Ut48Q/Gb8UWfQ="
              },
              "rust": {
                "name": "text.normalise-name-1.0.0-rust.fune",
                "size": 12272,
                "sha256": "8ba62de7f86bbcf884a65ac5f61aa3dab559654137eeedd033a4f517de5ca6e7",
                "integrity": "sha256-OrgPvYJKAbqP4PW95nyICRJbBv7BkTe2EivD9HzQQ/0="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "text.number-to-words": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-TNEcuap1MPPYMUf/8n45AbMdQIxQEW0sBr9CER67uos=",
          "summary": "Write a money amount in words for a cheque: \"one thousand two hundred and thirty-four pounds and fifty-six pence\".",
          "level": 1,
          "tags": [
            "text",
            "number",
            "words",
            "cheque",
            "check",
            "amount",
            "spell-out",
            "pounds",
            "pence"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "money.amount": "^1.0.0",
            "text.integer-to-words": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "text.number-to-words-1.0.0.fune",
            "size": 11719,
            "sha256": "fdaf116aa82fea8fd199e36476f6a67f745c9cc3fc9eac5e96dae653996723b7",
            "languages": {
              "typescript": {
                "name": "text.number-to-words-1.0.0-typescript.fune",
                "size": 7998,
                "sha256": "d45ada1176677a9595442e2f9fa715adce16805df38fa786e3eca23739c00b18",
                "integrity": "sha256-xTYYVIelTFhviF8v0A8KeOPOd+EsXXihu4Qk0mZ+eNM="
              },
              "python": {
                "name": "text.number-to-words-1.0.0-python.fune",
                "size": 7685,
                "sha256": "32833fc7250bcd29ad65ca06ce6c5e64e42d27e12100f49216c93b4ba1e580f2",
                "integrity": "sha256-usy67ovpQVumsOw2HTdLJn6dQvr/2G6jY27ENmQSr5I="
              },
              "rust": {
                "name": "text.number-to-words-1.0.0-rust.fune",
                "size": 8106,
                "sha256": "acc002d26785615d51b8f7a238dbfaf879d19f77e624dc80eba2553cad38fc55",
                "integrity": "sha256-Q2otiTb1ZfdVSp2UOr126x9LmVNxYj7aeMi1n5Rm8RA="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "text.slugify": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-6Npgj5C7sgdQ6jlr2Ew6r2QVS9V0FQz3uwUHq9WnKdA=",
          "summary": "Turn a title into a lowercase ASCII URL slug, transliterating common accented Latin letters.",
          "level": 1,
          "tags": [
            "text",
            "slug",
            "slugify",
            "url",
            "permalink",
            "ascii",
            "transliterate"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "text.slugify-1.0.0.fune",
            "size": 16855,
            "sha256": "6d01bf54f96ea7650d9b1fb098f56f1fb3119a0164e1d193fb181385a1125b2e",
            "languages": {
              "typescript": {
                "name": "text.slugify-1.0.0-typescript.fune",
                "size": 8753,
                "sha256": "e5a5178f1c17ddab9043dd0fcd1a58306a199156e23bf56320bcacf265f3c68b",
                "integrity": "sha256-Lj9gyxdHsn/md/Aso4eLs4mFNp4Wt+hc62hMnPF9U6Y="
              },
              "python": {
                "name": "text.slugify-1.0.0-python.fune",
                "size": 8532,
                "sha256": "cd99636651945e330070a65713977debca104c5e68509b44cba806d089aa3448",
                "integrity": "sha256-BRO5fRrJ35pEtHUKYPuhFswXzaQ36Yxgl2D8zUnVkkA="
              },
              "rust": {
                "name": "text.slugify-1.0.0-rust.fune",
                "size": 9752,
                "sha256": "dd228a8dd7180c17f1c3302bc4fef984324f2368074a2d0a7dc9ae732eeed4db",
                "integrity": "sha256-xBZQPUPmtsuMCoy1PBJNQyk5JUAEotwvaAtVIByRrEs="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "text.truncate": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-6sLjmu7UXuDaXEcstiqBSGXP5cpmX4HOXV07H/s0a/s=",
          "summary": "Shorten text to a maximum length on a word boundary and add an ellipsis, counting Unicode code points.",
          "level": 0,
          "tags": [
            "text",
            "truncate",
            "ellipsis",
            "shorten",
            "excerpt",
            "summary",
            "word-boundary",
            "preview"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "text.truncate-1.0.0.fune",
            "size": 14096,
            "sha256": "b7ad085ce8cf8efc872eace07a79adef908cc5061bb91d369cc64baf1819ae77",
            "languages": {
              "typescript": {
                "name": "text.truncate-1.0.0-typescript.fune",
                "size": 9058,
                "sha256": "16b7e8329dccf8b2901bd23ace2ce174442dd588affa7ef990913f40c7d2a418",
                "integrity": "sha256-p6bKsRnUp4IM7rVfUcb/6cUGt8vqrNSTYH8x+Ur+dyc="
              },
              "python": {
                "name": "text.truncate-1.0.0-python.fune",
                "size": 8997,
                "sha256": "d7caf664f5ada0f922b36e6b56bb1992e07e47130f56b53d1b7adc17a6500f99",
                "integrity": "sha256-flSplxpaNHp7Js6OhPjjTp/ciXx/MuPhNlO1rsmGdZI="
              },
              "rust": {
                "name": "text.truncate-1.0.0-rust.fune",
                "size": 8891,
                "sha256": "848761665445779eb00c3ce124f6df392b84f78ae8c1c91154975c26153edb59",
                "integrity": "sha256-CBgAtQimzzgoVvlfcOIZ0Fa0i/B6dv/gGrmQfI1rJ74="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "time.countdown": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-ZcpxtqI7oQyeZz7j5wJ/q/cJx9BhfiLgRWZRE7spQyQ=",
          "summary": "Seconds left until a Unix time, whether it has passed, and a timer text like 4:05, for tokens or retry waits.",
          "level": 0,
          "tags": [
            "countdown",
            "timer",
            "remaining",
            "expiry",
            "expires-in",
            "time-left",
            "retry-after",
            "clock"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "time.countdown-1.0.0.fune",
            "size": 8884,
            "sha256": "5f79273496584521bbb68fa26b0ddacef830b3504a91209b74ff3a0c133ebbac",
            "languages": {
              "typescript": {
                "name": "time.countdown-1.0.0-typescript.fune",
                "size": 6689,
                "sha256": "1bc6ee087f2155db4c340a5b1602cbe097839fe795bc63fd771e677db6b185d5",
                "integrity": "sha256-+/kqvCEI9TOJ3qOKPYnJjUhOpB9iSQdE2GSr02gBlBE="
              },
              "python": {
                "name": "time.countdown-1.0.0-python.fune",
                "size": 6618,
                "sha256": "7827ebd5785e8cae8925834ff4f8b50b8293782c1dfd22bbb29270a691186c8d",
                "integrity": "sha256-gkDXd1Ll0iHxlDOKE/R2v4sh8WVw0ogx+i+0Wn7hk4M="
              },
              "rust": {
                "name": "time.countdown-1.0.0-rust.fune",
                "size": 6907,
                "sha256": "c6a045a0c227d602d26241577ae8eb804f5e7cd2d2c2cf32f5b9683877238b7f",
                "integrity": "sha256-SULljSLxp27JgG72KItdLacsRKrkqgkVpD9KlO9v7Iw="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "time.duration": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-YeK+VWd5xvYN76VLgMlLxa1smDZB5116jSclD5QEA5s=",
          "summary": "Parse durations written as 1h30m, 90m or 01:30, add them up in whole minutes, and format the total.",
          "level": 0,
          "tags": [
            "time",
            "duration",
            "timesheet",
            "hours-minutes",
            "parse",
            "format",
            "total"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "time.duration-1.0.0.fune",
            "size": 16803,
            "sha256": "9ed1e9761812ec0a6b703bd222ff255b2ae24103893c1176ce38d9a2f9ef215a",
            "languages": {
              "typescript": {
                "name": "time.duration-1.0.0-typescript.fune",
                "size": 9636,
                "sha256": "5a05ef23355079c5a5af2072ffe7c12d69186b4f64155ead03de644c8f48a4f6",
                "integrity": "sha256-sCJFxPFPsMPAOcTGZkdyDLoRGxyKcwrlRnvGM0e61C4="
              },
              "python": {
                "name": "time.duration-1.0.0-python.fune",
                "size": 9831,
                "sha256": "c9c26d99de7660503b574ae49da555f58754682e92ffd374d656cce46fa17ba4",
                "integrity": "sha256-x5ZE1GfomoW9qe5bj+RAs/7/vF6VR4m8QAl5BabxlkI="
              },
              "rust": {
                "name": "time.duration-1.0.0-rust.fune",
                "size": 10360,
                "sha256": "a4ff231f170916c01e05d6bc38f41c8de320d905836fb7e37cf7b90fac1e4548",
                "integrity": "sha256-NF6AkXXj7dGfPWs9rOor7U63T+ZJgaY+IMC5VvwAstA="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "time.iso-to-unix": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-2tXm9953d+Km8wFpt6Cw4kvbjSEPImwE9A3NhlQrLys=",
          "summary": "An RFC 3339 timestamp with a Z or offset, such as 2026-09-26T13:00:00+01:00, to Unix time in whole seconds.",
          "level": 0,
          "tags": [
            "unix-time",
            "epoch",
            "timestamp",
            "iso-8601",
            "rfc3339",
            "parse",
            "utc",
            "datetime"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "time.iso-to-unix-1.0.0.fune",
            "size": 11961,
            "sha256": "2d3f5e9d5cc2f5bf95e84e0be406e3b7a459602bbc4581e126bdd823dc7f1cf4",
            "languages": {
              "typescript": {
                "name": "time.iso-to-unix-1.0.0-typescript.fune",
                "size": 7548,
                "sha256": "7a45d05b05202ea6a84f0c2cf7b7f167d91604a49d7250d21cd2ffa28ca59ac4",
                "integrity": "sha256-RjZ6jWiZX1UBw8ZQiRGfUCXc5ivc6EuVMYNT2gNdDic="
              },
              "python": {
                "name": "time.iso-to-unix-1.0.0-python.fune",
                "size": 7596,
                "sha256": "3994435095d5ef06d7dfb639027e2fd0956f6d90cc7b0b5385602c7f37311505",
                "integrity": "sha256-adJP82aEjCVb+BLeXSpZaEfc1XBmFD5/hMYsLfVOfjE="
              },
              "rust": {
                "name": "time.iso-to-unix-1.0.0-rust.fune",
                "size": 7899,
                "sha256": "de116205cacb2e941e92d9dedfa2041b8b56a086bc931a027e562eb10a26bb88",
                "integrity": "sha256-FFpjl3/PIG/ggRyaZS9qXXB7rXxk8ha8lzJe+Tp4sjg="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "time.minutes-between": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-HJ1xxWb3xvR8d7zk/SmBuKiCd7oLQPs8uud28hkm+EQ=",
          "summary": "Minutes from one local date and time to another, correct across midnight; wall-clock time, no time zones.",
          "level": 0,
          "tags": [
            "time",
            "minutes",
            "elapsed",
            "shift",
            "overnight",
            "timesheet",
            "duration",
            "clock"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "time.minutes-between-1.0.0.fune",
            "size": 8862,
            "sha256": "f28512233b8908b71542c3178abccb2281cb736b93ba1f13ac1eede9c71e9386",
            "languages": {
              "typescript": {
                "name": "time.minutes-between-1.0.0-typescript.fune",
                "size": 6458,
                "sha256": "597cb3b4bb8da8e2fd970da1f18df31ce108fc463fb938104905757d374f265a",
                "integrity": "sha256-ngZSguxh8RShRtcrFAax4p/YqkP4d0tUS2QxZbLcaws="
              },
              "python": {
                "name": "time.minutes-between-1.0.0-python.fune",
                "size": 6416,
                "sha256": "1294cc8ffc73e915195a54c9bd5e5276f35bd6584274682b1f7be3b3dbdc08e9",
                "integrity": "sha256-Q0Rmn0nU87PV0S86CUKeUP22echeeTTxSB6VRUMqeC0="
              },
              "rust": {
                "name": "time.minutes-between-1.0.0-rust.fune",
                "size": 6740,
                "sha256": "de168dfa9ea294bb2abe52774847d10ed2cf026197e1b381bea04622ba97a90b",
                "integrity": "sha256-BO7vrSUGW686B7/gdb12x8OI/CR+Ub5YrJzoP5H58Zw="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "time.round-to-increment": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-MCt2O8rsNww9RNCBHqnjc9aUGBNjCfMzE+oaeh0DKNc=",
          "summary": "Round a duration in minutes to a billing increment such as 6 or 15 minutes, up, down or to nearest.",
          "level": 0,
          "tags": [
            "time",
            "rounding",
            "billing",
            "billable-hours",
            "six-minute-units",
            "timesheet",
            "increment"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "math.round-div": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "time.round-to-increment-1.0.0.fune",
            "size": 7541,
            "sha256": "a025300b5b63a666a8089af6172507925276781f65c341183991b49c65834fc8",
            "languages": {
              "typescript": {
                "name": "time.round-to-increment-1.0.0-typescript.fune",
                "size": 5897,
                "sha256": "9a94b597cd86581008378238625828439fcae2269776f0332cd5eaa0c1d6cac5",
                "integrity": "sha256-pksuUNZZd0Lu0L0QNXbigBTEcNlz+HHN/vcABZCACoc="
              },
              "python": {
                "name": "time.round-to-increment-1.0.0-python.fune",
                "size": 5963,
                "sha256": "2329365507ad8e2fa06446c906d93c150f80324c8cd3c9575f8c3f80b9c84ddc",
                "integrity": "sha256-TblCWnxv1GgmKIexIKd6tzGK5eROYLZKc8PNvrig7BA="
              },
              "rust": {
                "name": "time.round-to-increment-1.0.0-rust.fune",
                "size": 6049,
                "sha256": "9baa5a943411300256d717a5d9717eb44871e6dcb1d0a2dc00f17e9c3196e85f",
                "integrity": "sha256-WjbXzOhsq+cSrCYit6/vMCc9EGU0wbjTx08g1y5skwU="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "time.unix-to-iso": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-Nh8axs7h3nuc/8i2DjVUd1W0NFdrdRh1Q04Vu2xk/Qs=",
          "summary": "Unix time in seconds to an ISO 8601 UTC timestamp such as 2026-09-26T12:00:00Z, for years 0001 to 9999.",
          "level": 0,
          "tags": [
            "unix-time",
            "epoch",
            "timestamp",
            "iso-8601",
            "rfc3339",
            "utc",
            "datetime",
            "format"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "time.unix-to-iso-1.0.0.fune",
            "size": 8080,
            "sha256": "5ece36497825e6cc03e39573f4f7148c832ce451c8951058ba30d1d63d3c1eed",
            "languages": {
              "typescript": {
                "name": "time.unix-to-iso-1.0.0-typescript.fune",
                "size": 5827,
                "sha256": "adaa7da482539f84d21f77f2986a9dadc9739645235c2a3457fd53c50bef7f5e",
                "integrity": "sha256-orfZ2bowevtLsG7LZvpznGzuLRtov+FWpXXJkg8GC9E="
              },
              "python": {
                "name": "time.unix-to-iso-1.0.0-python.fune",
                "size": 5717,
                "sha256": "67a8c3d0aa68c7663b8a98de5daa135281b5b11ffa6ffc8625085d2590098bc4",
                "integrity": "sha256-3kC+vhaVqjSL253mX3vJj+T94DHCrG4GR1z0+kCpdL8="
              },
              "rust": {
                "name": "time.unix-to-iso-1.0.0-rust.fune",
                "size": 5936,
                "sha256": "dfd9c381be2cd9a64f92d9b4458463d5509dc13368d5335510df6772c09a0e42",
                "integrity": "sha256-phqJ+acWppwBsk4Aa/Sxsy+9hRsiIS0Q9Jat0l25C8k="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "todo.due-label": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-tzpEmlguAghwkED8ubvhGN4VnWIGvtTpFNID3ZD7JMQ=",
          "summary": "The short English label shown next to a todo: \"2 days overdue\", \"Due today\", \"Due tomorrow\", \"Due Fri 2 Oct\".",
          "level": 2,
          "tags": [
            "todo",
            "due",
            "label",
            "deadline",
            "overdue",
            "reminder",
            "display"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "todo.item": "^1.0.0",
            "dates.add-days": "^1.0.0",
            "todo.due-status": "^1.0.0",
            "dates.day-of-week": "^1.0.0",
            "dates.days-between": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "todo.due-label-1.0.0.fune",
            "size": 14494,
            "sha256": "8aefefe87feab04119b7d82cf60a2bc4f421a0265722e14f34271dd4a0d7e21e",
            "languages": {
              "typescript": {
                "name": "todo.due-label-1.0.0-typescript.fune",
                "size": 11466,
                "sha256": "f2eecd7d982a52c2d3def804a778e37ad2fb76c4722cf6bbbe859366a35fd980",
                "integrity": "sha256-ZbC822wdHVkSpoQgS5oYQFN9kmbfjLynrosVYl/+aI0="
              },
              "python": {
                "name": "todo.due-label-1.0.0-python.fune",
                "size": 11338,
                "sha256": "0d3e9e1da47899dcd141003047764de86e0a25f635351ffbe37acf40aa5a3acd",
                "integrity": "sha256-AgUSilkg7KJDLvpOZeEglLSswHjHT5P7hKDjPRztxzw="
              },
              "rust": {
                "name": "todo.due-label-1.0.0-rust.fune",
                "size": 12000,
                "sha256": "97536432045a05c1196246011d3bc9ba79ca9278b158052ed4ae124792eb6d8d",
                "integrity": "sha256-vGnPZoYOtudWkQyBZIJmaTBqZ8RS/1OUIMO4JGCmCxk="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "todo.due-status": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-aRUl+jZNbLW1f1JMi4coG/iCvOnXZiLXvdN5cooEgtU=",
          "summary": "Where a todo stands against its due date today: done, overdue, today, tomorrow, this week, later or no date.",
          "level": 2,
          "tags": [
            "todo",
            "due",
            "overdue",
            "deadline",
            "status",
            "today",
            "tomorrow",
            "this-week"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "todo.item": "^1.0.0",
            "dates.day-of-week": "^1.0.0",
            "dates.days-between": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "todo.due-status-1.0.0.fune",
            "size": 12691,
            "sha256": "4922cabdc3416872cbc8b1ced81949f83081c366581e2bebbec8ba21fbacfacd",
            "languages": {
              "typescript": {
                "name": "todo.due-status-1.0.0-typescript.fune",
                "size": 10580,
                "sha256": "c40ea3ed289b079421a897242b56669f286f35517034ce556ce46fd97d9593a1",
                "integrity": "sha256-bd5B+9uS8Yzs9CvXveRKC25zBh6jVHTCLiWSzsJjjr0="
              },
              "python": {
                "name": "todo.due-status-1.0.0-python.fune",
                "size": 10402,
                "sha256": "f5cc1c05f18bc146b05e38af68d8866c42fe0168fecc5a0dd011e916068b6dc5",
                "integrity": "sha256-sj8wdLWrxbgQBeoS7V34Nz6y31kcXqcq6/AqJ5jGZM0="
              },
              "rust": {
                "name": "todo.due-status-1.0.0-rust.fune",
                "size": 10721,
                "sha256": "8cf112933382e532a36a2e426f6695f42c872305640dbbb3e1a72ad6e482f346",
                "integrity": "sha256-99WDysRI9qkQ/nSjcRxbuvCrRlsmKCw/er6OpoP6oOE="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "todo.export-csv": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-BDSU/fg9aHXv/RW+4REymuQhySu4JwWTiBLHIj+nXLU=",
          "summary": "Write todos as a CSV file (RFC 4180) with one column per field, for backups, spreadsheets and other apps.",
          "level": 2,
          "tags": [
            "todo",
            "csv",
            "export",
            "download",
            "backup",
            "spreadsheet",
            "rfc4180",
            "comma-separated"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "todo.item": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "todo.export-csv-1.0.0.fune",
            "size": 17768,
            "sha256": "f2f17720f311707190e8643af25b46732546ab8cf545f39a5f5f873f7139bc83",
            "languages": {
              "typescript": {
                "name": "todo.export-csv-1.0.0-typescript.fune",
                "size": 14272,
                "sha256": "cedeb7a4ff41998de2cc202cfff71b8a9e57832e7cfef8020208aba016a7e706",
                "integrity": "sha256-Z43L1t9cK4Yl9wO8i7TwDevSLLXq41jZVltdS3ntXk0="
              },
              "python": {
                "name": "todo.export-csv-1.0.0-python.fune",
                "size": 14333,
                "sha256": "e5f88e042b79636aad88172e83da9c51b97698eddad31ef3fd195d9f9d3a9a6a",
                "integrity": "sha256-79E73F5+Cw+kV4xYuxGnFfA+O1n+h33NfMsxMAYvirs="
              },
              "rust": {
                "name": "todo.export-csv-1.0.0-rust.fune",
                "size": 14739,
                "sha256": "737f0ee48bcba998a01a9e0c0cfec748771a2a85638a22c952840b773a6881a4",
                "integrity": "sha256-JyhYQ8kuKN2GIp8DEZF6bUa4f1LrBtAApRVsTzRqz7s="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "todo.filter": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-cidLCPeS5Q0DiqffvNSMi2LhSISkpjuA+PtHKfufLpU=",
          "summary": "The todos a list view shows: all, active or completed, optionally one tag, and a search box, in input order.",
          "level": 2,
          "tags": [
            "todo",
            "filter",
            "search",
            "view",
            "tag",
            "active",
            "completed",
            "find"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "todo.item": "^1.0.0",
            "todo.normalise-tags": "^1.0.0",
            "collections.search-text": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "todo.filter-1.0.0.fune",
            "size": 39877,
            "sha256": "80695baaa6bba264a8d5e8cd28af7869ab720455532ec7ce43c7d3725d6622e7",
            "languages": {
              "typescript": {
                "name": "todo.filter-1.0.0-typescript.fune",
                "size": 35437,
                "sha256": "466e2ee25ec1505a24ba1cde2bf9cbd3f005941d6b23e5ee27eae9bff2cac2fd",
                "integrity": "sha256-vVccwz1sgqc7MUCnrQJFiXeeZNojkexzwf3HYDt1P0c="
              },
              "python": {
                "name": "todo.filter-1.0.0-python.fune",
                "size": 35297,
                "sha256": "6e97df7a20ebf501db808fcad7239d1943b85781ef2e0a9b276772d79998ba07",
                "integrity": "sha256-PoS5ecK/ElVw6Cc11NCkuY+zHGNtZ4OLj6hHRcwAIW8="
              },
              "rust": {
                "name": "todo.filter-1.0.0-rust.fune",
                "size": 36251,
                "sha256": "ae2380259f395fb5fcb13faab46447599e2701320c336be598fa13e00234ef3c",
                "integrity": "sha256-CqygxS5v2nqhYilAq3S3BOmWWqQdAoP/SE5QteoNqA8="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "todo.group-by-due": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-/X5/B536X6zLcsh1ZcULdtds0LdsT6mv7VgCDX4jmTE=",
          "summary": "Split todos into Overdue, Today, Tomorrow, This week, Later, No date and Done sections, in that order.",
          "level": 2,
          "tags": [
            "todo",
            "group",
            "sections",
            "due",
            "overdue",
            "agenda",
            "planner",
            "list"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "todo.item": "^1.0.0",
            "todo.due-status": "^1.0.0",
            "dates.day-of-week": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "todo.group-by-due-1.0.0.fune",
            "size": 27566,
            "sha256": "1481e318e0c34459c62eda3eb94aeb9446f0f310526596be41943d6b38f8f888",
            "languages": {
              "typescript": {
                "name": "todo.group-by-due-1.0.0-typescript.fune",
                "size": 24159,
                "sha256": "6afaa762df2cbe32dbbccd3dd117fbfc7726ebf18ec07614c4f7275735439de8",
                "integrity": "sha256-EM8FBcAx9yQHgUxxkdaaOu1E+e4tMq2LQjyghknCYTo="
              },
              "python": {
                "name": "todo.group-by-due-1.0.0-python.fune",
                "size": 23906,
                "sha256": "b54a601dcba853a24f95f725781c1b43cc74c175379871790c1c14063770edd9",
                "integrity": "sha256-bsZ4pvBEvNEFVltxyki23h8QRib3VTebER5ab3y0d+E="
              },
              "rust": {
                "name": "todo.group-by-due-1.0.0-rust.fune",
                "size": 24729,
                "sha256": "3775345c5d6d86f1abe7dda18be2eb7f96ca8bfb0396e7aaadf19a8ea66e4660",
                "integrity": "sha256-nYUTT4co1WvlwYwNkZOOJYujncNrEEtOWClMjklcoDA="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.1.0": {
          "integrity": "sha256-mcqpf+o+f4wFI3idltngWxOCHWm071QV/u5v+Dlu/f4=",
          "summary": "Split todos into Overdue, Today, Tomorrow, This week, Later, No date and Done sections, in that order.",
          "level": 2,
          "tags": [
            "todo",
            "group",
            "sections",
            "due",
            "overdue",
            "agenda",
            "planner",
            "list"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "todo.item": "^1.0.0",
            "todo.due-status": "^1.0.0",
            "dates.day-of-week": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python/group_by_due.py",
            "impl/python/group_by_due_with_order.py",
            "impl/rust/group_by_due.rs",
            "impl/rust/group_by_due_with_order.rs",
            "impl/typescript/group_by_due.ts",
            "impl/typescript/group_by_due_with_order.ts",
            "vectors.json"
          ],
          "package": {
            "name": "todo.group-by-due-1.1.0.fune",
            "size": 49637,
            "sha256": "d36f8e49fb579f388a1115d49410ca12ebca4b45e0d52da7f61191aa63236dd6",
            "languages": {
              "typescript": {
                "name": "todo.group-by-due-1.1.0-typescript.fune",
                "size": 44335,
                "sha256": "af2108ad306863e43deb25de1f2883f1d3d7a77520c28b65dc55f3a57f83d0f7",
                "integrity": "sha256-1GG3wALs1lmj9JnAuPJJA50wGwgKFJT/dluhROy3j6k="
              },
              "python": {
                "name": "todo.group-by-due-1.1.0-python.fune",
                "size": 43803,
                "sha256": "6bd3400c6f6ba9fc9526ea8bcbf1e519770eebe53c20241ab495040e62a9e989",
                "integrity": "sha256-KnPYTBkgAww2xU/dIycB8HAx50iEup3HUxFY4XZPS9s="
              },
              "rust": {
                "name": "todo.group-by-due-1.1.0-rust.fune",
                "size": 44985,
                "sha256": "6c947cf027f63c306fa65935a74bb1326d605dc2336f39a17d21d9a58116a09d",
                "integrity": "sha256-tBprO4kDJYcCOe3bYm7+ha6oOQXpOB6aANTzhXY/I18="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "todo.import-csv": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-+0JQ/DaS+I7wlszF68cfvsptbOrhkFPWQOal4TKGFek=",
          "summary": "Read todos from a CSV file (RFC 4180) as todo.export-csv writes it, checking every row, with row-numbered errors.",
          "level": 2,
          "tags": [
            "todo",
            "csv",
            "import",
            "upload",
            "restore",
            "spreadsheet",
            "rfc4180",
            "comma-separated",
            "validate"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "todo.item": "^1.0.0",
            "todo.normalise-tags": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "todo.import-csv-1.0.0.fune",
            "size": 43391,
            "sha256": "395dfb021064802d0bdf93d3ed3c090c104159ba61537513055acb08dc2a1eb9",
            "languages": {
              "typescript": {
                "name": "todo.import-csv-1.0.0-typescript.fune",
                "size": 30913,
                "sha256": "f0dd07fcb818a9be76521a3c89815d6ffeb67e1a666547daa105651ad0710644",
                "integrity": "sha256-7cxZNNLvIbbXwSS09XH1A5l9+LS0eAMcnH1k4tXs5Jc="
              },
              "python": {
                "name": "todo.import-csv-1.0.0-python.fune",
                "size": 30646,
                "sha256": "09a074588cfebc8cf23c876027c6973ebe71bce72e1a66587ad77a1643a8a5ad",
                "integrity": "sha256-c0iC16mtROdNMEWttY8pAy1hRvUGIUg/vC/hIiQs4XY="
              },
              "rust": {
                "name": "todo.import-csv-1.0.0-rust.fune",
                "size": 32294,
                "sha256": "5b3af7f1cd2f72cd6f21dfd13718a97cc74cab59457cb19b8b160d301985d84c",
                "integrity": "sha256-T/+tApWb/bVNRtx0zex9ITSrvMweQV0kbYn+3FTMSlY="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.1.0": {
          "integrity": "sha256-HxLpW113ZYki6R+lDzKG81PdE9UcWaMWi8H2y+go3Zg=",
          "summary": "Read todos from a CSV file (RFC 4180) as todo.export-csv writes it, checking every row, with row-numbered errors.",
          "level": 2,
          "tags": [
            "todo",
            "csv",
            "import",
            "upload",
            "restore",
            "spreadsheet",
            "rfc4180",
            "comma-separated",
            "validate"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "todo.item": "^1.0.0",
            "todo.normalise-tags": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python/import_csv.py",
            "impl/python/validate_todo_csv.py",
            "impl/rust/import_csv.rs",
            "impl/rust/validate_todo_csv.rs",
            "impl/typescript/import_csv.ts",
            "impl/typescript/validate_todo_csv.ts",
            "vectors.json"
          ],
          "package": {
            "name": "todo.import-csv-1.1.0.fune",
            "size": 67710,
            "sha256": "b929c1dc7a055e568d43fe74cd107a4a7846eb0bd4b458f321a6feb040f764b1",
            "languages": {
              "typescript": {
                "name": "todo.import-csv-1.1.0-typescript.fune",
                "size": 47447,
                "sha256": "d90bb16a0adefcaa6a38b6cfc9d3303a587f3be1beb9e5064455a1c7fb0ad67b",
                "integrity": "sha256-IJSUn53/SipPL+q6LlKqu9pSxT8oOyLeQPES6UNph+E="
              },
              "python": {
                "name": "todo.import-csv-1.1.0-python.fune",
                "size": 46946,
                "sha256": "2f9fb37fb701699e859119d86f49e94ee30b8b9cf2fc70ec98873de5f79bd916",
                "integrity": "sha256-GzcS85H7Un4MxtANurM587hddgWNkAxyMgY5XTg5QRA="
              },
              "rust": {
                "name": "todo.import-csv-1.1.0-rust.fune",
                "size": 50545,
                "sha256": "73280bc5b26fd62a6f37c94c55c55cdf58f424af5e5c1a551c87d4e3bbfff4fa",
                "integrity": "sha256-8B0d5lQkbNf1gzkFUMePuCqBbGWP3NmSrC8VKWx3RN0="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "todo.item": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-9XVMOnBwn35LfWO0pJHNV8UgKG7QfgJ5+s5+nTEDoJM=",
          "summary": "The to-do item type (Todo, TodoDraft, Recurrence) and its validators, with a message per field.",
          "level": 2,
          "tags": [
            "todo",
            "task",
            "to-do",
            "checklist",
            "validation",
            "form",
            "item",
            "reminder"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python/validate_draft.py",
            "impl/python/validate_todo.py",
            "impl/rust/validate_draft.rs",
            "impl/rust/validate_todo.rs",
            "impl/typescript/validate_draft.ts",
            "impl/typescript/validate_todo.ts",
            "vectors.json"
          ],
          "package": {
            "name": "todo.item-1.0.0.fune",
            "size": 65295,
            "sha256": "3b6af46b7431804010e2f024169dc8d1e700829887069428d844cbc5f8d9e295",
            "languages": {
              "typescript": {
                "name": "todo.item-1.0.0-typescript.fune",
                "size": 44676,
                "sha256": "c9a193402d503731197ffba28978d02e001e6bc51326b8faeac33be09cb26109",
                "integrity": "sha256-h8/J1LfB7CDIzzoB6CVewYo7hMWRsdbDOEW1PKlzOfo="
              },
              "python": {
                "name": "todo.item-1.0.0-python.fune",
                "size": 43185,
                "sha256": "3028bcf0d0ca0663afe77ef356e9be772d0dd39455df83e1d98bfa8a055480ed",
                "integrity": "sha256-wHEAkq628GbLsXr3KzzVG/VO8BLd5mPLDJxwLXc6PA4="
              },
              "rust": {
                "name": "todo.item-1.0.0-rust.fune",
                "size": 48998,
                "sha256": "063f7a6998e24abbaf4873ed0a0fc3659c5ca0baa73bcc450273184fd495edb1",
                "integrity": "sha256-CyW6hOhK6jBERioyQ6l5IqgE/WnhALZ831ZOqT37w5s="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "todo.list": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-N2kTA2aBg1KKVEBxD/OGAyxDjbe85YWXZtT3ut+4Q+U=",
          "summary": "The to-do list reducer: add, edit, complete, remove, clear and reorder todos, each returning a new list.",
          "level": 2,
          "tags": [
            "todo",
            "to-do",
            "task-list",
            "reducer",
            "checklist",
            "reorder",
            "complete",
            "crud"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "todo.item": "^1.0.0",
            "todo.normalise-tags": "^1.0.0",
            "todo.next-occurrence": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python/add_todo.py",
            "impl/python/clear_completed.py",
            "impl/python/move_todo.py",
            "impl/python/remove_todo.py",
            "impl/python/toggle_all.py",
            "impl/python/toggle_todo.py",
            "impl/python/update_todo.py",
            "impl/rust/add_todo.rs",
            "impl/rust/clear_completed.rs",
            "impl/rust/move_todo.rs",
            "impl/rust/remove_todo.rs",
            "impl/rust/toggle_all.rs",
            "impl/rust/toggle_todo.rs",
            "impl/rust/update_todo.rs",
            "impl/typescript/add_todo.ts",
            "impl/typescript/clear_completed.ts",
            "impl/typescript/move_todo.ts",
            "impl/typescript/remove_todo.ts",
            "impl/typescript/toggle_all.ts",
            "impl/typescript/toggle_todo.ts",
            "impl/typescript/update_todo.ts",
            "vectors.json"
          ],
          "package": {
            "name": "todo.list-1.0.0.fune",
            "size": 112220,
            "sha256": "0605cc9f5a249dd3b2fe88ecf7b795d4fba56c213a196f63fe789a337c56247d",
            "languages": {
              "typescript": {
                "name": "todo.list-1.0.0-typescript.fune",
                "size": 95258,
                "sha256": "eb423b6f9393fc4dea63c4aa1eac6350975da05ac1ea8a52f68e1c432363377b",
                "integrity": "sha256-rC2es77VErc+YiHoSK09h0NxRlp5ac/noYiNAQtkbd0="
              },
              "python": {
                "name": "todo.list-1.0.0-python.fune",
                "size": 94177,
                "sha256": "5de47099aaab54f5a495b5611a0318d71a3f902662177cc6a3f9673dfada7091",
                "integrity": "sha256-12qZZ6lXat2IyXipvkHtI1ZZ/wi2lWlHpq1t+YBKrMk="
              },
              "rust": {
                "name": "todo.list-1.0.0-rust.fune",
                "size": 97181,
                "sha256": "3b846456c8c4cfae47213172fdd61c240dd41e3d582856b7402f4618cab184c7",
                "integrity": "sha256-ITfQofkeuQGUCFOJ8LeoauNQF3PG4xZV9+UjddrtryY="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.1.0": {
          "integrity": "sha256-h/9jKmB8YyaZfoItb2Z5abgO4h5yPu8qfw+h2tDt5Tc=",
          "summary": "The to-do list reducer: add, edit, complete, remove, clear and reorder todos, each returning a new list.",
          "level": 2,
          "tags": [
            "todo",
            "to-do",
            "task-list",
            "reducer",
            "checklist",
            "reorder",
            "complete",
            "crud"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "todo.item": "^1.0.0",
            "todo.normalise-tags": "^1.0.0",
            "todo.next-occurrence": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python/add_todo.py",
            "impl/python/clear_completed.py",
            "impl/python/move_todo.py",
            "impl/python/remove_todo.py",
            "impl/python/toggle_all.py",
            "impl/python/toggle_all_mode.py",
            "impl/python/toggle_todo.py",
            "impl/python/update_todo.py",
            "impl/rust/add_todo.rs",
            "impl/rust/clear_completed.rs",
            "impl/rust/move_todo.rs",
            "impl/rust/remove_todo.rs",
            "impl/rust/toggle_all.rs",
            "impl/rust/toggle_all_mode.rs",
            "impl/rust/toggle_todo.rs",
            "impl/rust/update_todo.rs",
            "impl/typescript/add_todo.ts",
            "impl/typescript/clear_completed.ts",
            "impl/typescript/move_todo.ts",
            "impl/typescript/remove_todo.ts",
            "impl/typescript/toggle_all.ts",
            "impl/typescript/toggle_all_mode.ts",
            "impl/typescript/toggle_todo.ts",
            "impl/typescript/update_todo.ts",
            "vectors.json"
          ],
          "package": {
            "name": "todo.list-1.1.0.fune",
            "size": 120488,
            "sha256": "0a1efc6ef9c4ca540d04da3b39ad8880f3a3ff01fa3dc624fda7042916a74253",
            "languages": {
              "typescript": {
                "name": "todo.list-1.1.0-typescript.fune",
                "size": 102324,
                "sha256": "2b47a7d0eb2ed2b08c402eb15b7eba31c5c54858eb6956f45eb7c9788dfb567b",
                "integrity": "sha256-ANbCAX32+PSoLbk+SaECiQifa8M5jCJiAt/dvOBK4Fc="
              },
              "python": {
                "name": "todo.list-1.1.0-python.fune",
                "size": 101026,
                "sha256": "79525a882e9592c040525a27b755221dbf34da5dc5131f4a6bbedcd4c61919bf",
                "integrity": "sha256-NQEAi4nxmHHRu2EK464OVHeHSXqmP4KG+pNRo1hqvJI="
              },
              "rust": {
                "name": "todo.list-1.1.0-rust.fune",
                "size": 104202,
                "sha256": "da62c63e57e561f82788f55fac4929c00a5a972bd0c9fd076f431b3417c7ea27",
                "integrity": "sha256-52sx67evbxGbADxac4UljkOLHOW2wSSMRaUMsmxbnKU="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "todo.merge": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-gcU7DleoKtDsfCNBLmBzwhr/OsNL9PJ8/0CEigIdk68=",
          "summary": "Merge imported todos into a list by id: an imported todo replaces the one with its id, new ids are appended.",
          "level": 2,
          "tags": [
            "todo",
            "merge",
            "import",
            "upsert",
            "sync",
            "combine",
            "csv",
            "by-id"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "todo.item": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "todo.merge-1.0.0.fune",
            "size": 19135,
            "sha256": "70fd49a1e279c942df6f45cf86dbc03153376c38c62cd1836180141e1f1f11db",
            "languages": {
              "typescript": {
                "name": "todo.merge-1.0.0-typescript.fune",
                "size": 16323,
                "sha256": "6f013e98348d6f97e014f63ec4aea0190809d8429d6e15bfcc6bbcce327f011a",
                "integrity": "sha256-+bGqQXbkVKwKVAHTTRda7ZHikvqJJ5CkLuPzvtIhHYs="
              },
              "python": {
                "name": "todo.merge-1.0.0-python.fune",
                "size": 16070,
                "sha256": "5122c50d4eb812a8bfe596b708aa2be0179493e0e3c76000ec1ee8f5774dd58e",
                "integrity": "sha256-siHUiaFGrir75i52cAjZgwlBn3rTxhiJDSgUzMfe4F0="
              },
              "rust": {
                "name": "todo.merge-1.0.0-rust.fune",
                "size": 16674,
                "sha256": "566baf137214f403376b4340f57cdf32a3c27c6c7a77d1f8624036914951f38e",
                "integrity": "sha256-3wrK0hMRKVMDxqp7Ir1bFZlLWxhwp0OpPAP6dlKahqU="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "todo.next-occurrence": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-W2y+3TBi9eR2nKD45yGmAzWS5ie5zaTXbGQwdDs2ADM=",
          "summary": "The next due date of a repeating todo once it is done: daily, weekdays, weekly, monthly or yearly, month-end safe.",
          "level": 2,
          "tags": [
            "todo",
            "recurring",
            "repeat",
            "recurrence",
            "next-due",
            "schedule",
            "habit",
            "reminder"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "todo.item": "^1.0.0",
            "dates.add-days": "^1.0.0",
            "dates.day-of-week": "^1.0.0",
            "subscriptions.next-billing-date": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "todo.next-occurrence-1.0.0.fune",
            "size": 15072,
            "sha256": "7a616d4b47583508c619f5160c68a8331ae3c067991b69c5ff71283ffc3a8ff1",
            "languages": {
              "typescript": {
                "name": "todo.next-occurrence-1.0.0-typescript.fune",
                "size": 11053,
                "sha256": "15570d9b345e44a5741cc846487100908d3e2595815dad69ad7fa1eeff18b45b",
                "integrity": "sha256-GORYNMXAjN5QwXW1Fy5gC7va4QYXaIuy+sSaBZGrgc8="
              },
              "python": {
                "name": "todo.next-occurrence-1.0.0-python.fune",
                "size": 10575,
                "sha256": "2fb49aca4c29e27acab8ca37507bec673137ad38dece63ab4afb8ebb85e154ef",
                "integrity": "sha256-G3xDM0V+HSIYW4L3D8uNgA3TgqDOTJvHydKZoA4m83I="
              },
              "rust": {
                "name": "todo.next-occurrence-1.0.0-rust.fune",
                "size": 11230,
                "sha256": "f105dd9c40163e9bc010dc1970f2698b548b897a90594eaeb200d3e2c9567b08",
                "integrity": "sha256-SjWGB3k6+nkVtSZ46bTaSontLJFsbhEQmkm6Xs+5+PM="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "todo.normalise-tags": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-Y3QLodx7SOUvLib9ZhY+bD5ihLksWhP3ddG0wJLl12s=",
          "summary": "Clean up tags as typed: trim, drop the #, lower-case slug form, drop empties and duplicates, keep the order.",
          "level": 2,
          "tags": [
            "todo",
            "tags",
            "labels",
            "hashtag",
            "normalise",
            "dedupe",
            "slug",
            "categories"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "text.slugify": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "todo.normalise-tags-1.0.0.fune",
            "size": 6037,
            "sha256": "c098ae9cc4cff3719a9100ca369754dcc598f716578252f1b23114de7be44139",
            "languages": {
              "typescript": {
                "name": "todo.normalise-tags-1.0.0-typescript.fune",
                "size": 4667,
                "sha256": "599a85e803e7fd4aabcbc4ad6ed7d6f0cfd4ff974405c6fbac3aa8ff18a73d55",
                "integrity": "sha256-EIW0w0sicXXjAkuKlVi6ilyn8PsHLqyDMj3gsDFrKXM="
              },
              "python": {
                "name": "todo.normalise-tags-1.0.0-python.fune",
                "size": 4525,
                "sha256": "07b12fef7146611ac611e80d522c2d18c877854e2dba3a9c06e9e0c55ba13609",
                "integrity": "sha256-OD/Duyxx2dffjbHecFq1rA8yBctBQJlEj/IOtUK51k8="
              },
              "rust": {
                "name": "todo.normalise-tags-1.0.0-rust.fune",
                "size": 4711,
                "sha256": "46b0dcf9bcfbfa5eeaaf5facd2c6f3c00ed8c1770ace449770d1596908bbfc33",
                "integrity": "sha256-r6UdeFtFz+Q3akXGrxvcGGNS+bVnlFvj4QvuQjs9tiE="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "todo.parse-date-phrase": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-eScW7nMswaeqC5jsBX1ORbC8wqQlLWnm07FW0DbKhLk=",
          "summary": "Read a typed due date like \"tomorrow\", \"next friday\", \"in 2 weeks\" or \"2026-10-01\" as a date, relative to today.",
          "level": 2,
          "tags": [
            "todo",
            "due-date",
            "natural-language",
            "date-parser",
            "relative-date",
            "reschedule",
            "quick-add"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "dates.add-days": "^1.0.0",
            "dates.add-months": "^1.0.0",
            "dates.day-of-week": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "todo.parse-date-phrase-1.0.0.fune",
            "size": 27727,
            "sha256": "d450114d42ed52f5273b9e892f470087e1157482e503316c84b52862283d32bd",
            "languages": {
              "typescript": {
                "name": "todo.parse-date-phrase-1.0.0-typescript.fune",
                "size": 18339,
                "sha256": "49d9c2d14d2e8cdfc3a33281043690dd0d7f4024d444933d888a6b6e117aaaf1",
                "integrity": "sha256-ONFaeYfwA9w53UDen3JqX5nW2PMfBPpL44cvVZpLaP4="
              },
              "python": {
                "name": "todo.parse-date-phrase-1.0.0-python.fune",
                "size": 17563,
                "sha256": "b2283bce979acd722655237e9c0ecd8958e50e7ce80c4626e0960886dcc616d3",
                "integrity": "sha256-kowmMnB2M8RSQR0+NUmrfBXgxfV/j/aYjT6Fvm8ezxU="
              },
              "rust": {
                "name": "todo.parse-date-phrase-1.0.0-rust.fune",
                "size": 18871,
                "sha256": "5341959f507b6e8558e2308120a2abd52a13e6f2e008de3f9f1c72c8fa399b54",
                "integrity": "sha256-2ABnAt5PAlgMZrbli1hBb/FcX9unl52yp6trVpSuNaI="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "todo.parse-quick-add": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-Fuaxstm1718kdr4ljAV8OkRlioZMIDnP4ySfxjbhKJk=",
          "summary": "Turn one typed line like \"Pay rent tomorrow !high #home every month\" into a todo draft.",
          "level": 2,
          "tags": [
            "todo",
            "quick-add",
            "natural-language",
            "parser",
            "task-entry",
            "smart-add",
            "hashtag",
            "recurring"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "todo.item": "^1.0.0",
            "dates.add-days": "^1.0.0",
            "dates.day-of-week": "^1.0.0",
            "todo.normalise-tags": "^1.0.0",
            "todo.parse-date-phrase": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "todo.parse-quick-add-1.0.0.fune",
            "size": 38995,
            "sha256": "a0b6cc29d50d4f894ab93594df3235c1dfbace717adf4f7d0846edaa53f9d87f",
            "languages": {
              "typescript": {
                "name": "todo.parse-quick-add-1.0.0-typescript.fune",
                "size": 26822,
                "sha256": "e91ee681a5e8f9726ee6a829c541efc10a2671a6c7f1eba56fdef8d22beaf816",
                "integrity": "sha256-H77CBsMjLZ+82+mR18gDGv88zQeuxeWWajgjUBhFdlg="
              },
              "python": {
                "name": "todo.parse-quick-add-1.0.0-python.fune",
                "size": 26406,
                "sha256": "fc8b48b8ffd1f1ad2166bc115d3b2e7a46d924aec1723c636866367cd29d459b",
                "integrity": "sha256-vDdYMXBcrcJNRdlLa058HIxpinN4gs1fy3T1cePwXqk="
              },
              "rust": {
                "name": "todo.parse-quick-add-1.0.0-rust.fune",
                "size": 27899,
                "sha256": "9c9778161dadc7139843aa2bfba91f1e9f496883ea6b01d02e86ac6977a1b792",
                "integrity": "sha256-gLvDe4NpW8XOIHshUwsI/LnYXa+he8zwwSkAIx8ElzI="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "todo.parse-repeat": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-siylq+MKiB6B2J3h9x3+bpGwNOd6oYWAtjvzvWwtQKU=",
          "summary": "Read a Repeat box, \"every 2 weeks\" or \"every monday on 2026-10-05\", as a todo's recurrence, or null.",
          "level": 2,
          "tags": [
            "todo",
            "recurrence",
            "repeat",
            "recurring",
            "parse",
            "every",
            "schedule",
            "form"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "todo.item": "^1.0.0",
            "dates.add-days": "^1.0.0",
            "dates.day-of-week": "^1.0.0",
            "todo.parse-quick-add": "^1.0.0",
            "todo.parse-date-phrase": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "todo.parse-repeat-1.0.0.fune",
            "size": 16279,
            "sha256": "efdd5ec36a56dc62104de85dc0453a6b348ac1d515dc1f5a5e1f6b7a9c048043",
            "languages": {
              "typescript": {
                "name": "todo.parse-repeat-1.0.0-typescript.fune",
                "size": 11091,
                "sha256": "2c5e87343daab8fcdb6be922724daa90426f89dbfa2ffd3929565dd90b2b6a19",
                "integrity": "sha256-vyUdIU/ecFjYEvEhQ5TmLefr02glvPy1AA15Aj6mo3g="
              },
              "python": {
                "name": "todo.parse-repeat-1.0.0-python.fune",
                "size": 10877,
                "sha256": "7588dc713dbc3c8f8cac2a587ede443a810ca20741fc28aa3138889dcb7aba9e",
                "integrity": "sha256-MsyarBTomYeMgFBkhlu1sqV5ZQK+rlRePGenk4TBFFQ="
              },
              "rust": {
                "name": "todo.parse-repeat-1.0.0-rust.fune",
                "size": 11519,
                "sha256": "7e7069793b3be342cee847b57ad8c9307d08ce5b7935f41efab3e45b7b3b4efe",
                "integrity": "sha256-7mjLtvfuLXHBF4OAby91kKpmL5zWO+geoFAbjhIy2Sw="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "todo.parse-tags": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-dTaQbA2kSXWOgqMJyhNDQRbAKh2HTYDcmkAzSc2+LbU=",
          "summary": "Read a tags box as typed, \"#Home, work  errands\", into normalised tags: split on spaces and commas.",
          "level": 2,
          "tags": [
            "todo",
            "tags",
            "labels",
            "hashtag",
            "parse",
            "input",
            "form",
            "split"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "todo.normalise-tags": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "todo.parse-tags-1.0.0.fune",
            "size": 5584,
            "sha256": "734fe72a197d9ff6cf0d95a156b13bbc0e71941a27aa25bb703f1bc63f4a768c",
            "languages": {
              "typescript": {
                "name": "todo.parse-tags-1.0.0-typescript.fune",
                "size": 4434,
                "sha256": "9b65db954aabe0afcbe1012976baadb41e906c0d99e9cb7b91f8bf514fb26935",
                "integrity": "sha256-0KJgCqZUEGNwoap4vbJ5HM8sDl3o8nFgC4fBLiNnkgo="
              },
              "python": {
                "name": "todo.parse-tags-1.0.0-python.fune",
                "size": 4426,
                "sha256": "d91f720ba9c532a3591924e8dd9316ea18ebef5be708100cfbb0fd97f3a403b9",
                "integrity": "sha256-XixdeJsi294oTsKJmIAfl6IXGA8YrmKfvXGsabZtQvc="
              },
              "rust": {
                "name": "todo.parse-tags-1.0.0-rust.fune",
                "size": 4566,
                "sha256": "64682ba9793baf59a0ebdc0a5d095280ff0bc572f8ad75c840b5b94890d57f4d",
                "integrity": "sha256-2U5Ceg2qlu1kOizdy+u9IKVo5zTSZBLuYrtrw6rpBCI="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "todo.recurrence-label": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-bcgBYwS4CRnWhviA65Y7Ql0h2fl1Zub+BLS7yyxleRA=",
          "summary": "English text for a repeating todo's chip: \"Every weekday\", \"Every 2 weeks on Monday\", \"Every month on the 31st\".",
          "level": 2,
          "tags": [
            "todo",
            "recurring",
            "repeat",
            "recurrence",
            "label",
            "chip",
            "schedule",
            "describe"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "todo.item": "^1.0.0",
            "dates.add-days": "^1.0.0",
            "dates.day-of-week": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "todo.recurrence-label-1.0.0.fune",
            "size": 14770,
            "sha256": "48e103549743096fc75b9fabac022928dc7ddd1bad9a610567b1c5d64667ad4f",
            "languages": {
              "typescript": {
                "name": "todo.recurrence-label-1.0.0-typescript.fune",
                "size": 10201,
                "sha256": "fea6a72fb40a0c7d4daa7c4551a30bfa8482c10c5e1bd4c674a33df54e4669c4",
                "integrity": "sha256-81onL5p47MfXrhnsbJknGn6zTUBZjfkSyJSgufdwL2Y="
              },
              "python": {
                "name": "todo.recurrence-label-1.0.0-python.fune",
                "size": 9904,
                "sha256": "e1fc61bf1ae1df7b0c4390168d366dd3215a49794d9e7c251d374b1a0c4a05aa",
                "integrity": "sha256-EkUBDPdKqkbcwQFW/119qYz6/1zshPoXIRck8CB2r+U="
              },
              "rust": {
                "name": "todo.recurrence-label-1.0.0-rust.fune",
                "size": 10545,
                "sha256": "27fa877deef4753b603665785cc4f51f34e045d196f8160002350fa8d4f75f43",
                "integrity": "sha256-ZdIpRgiI6dP8S7FnyEYr85LQkk5CtekvMJU+mfcYrhU="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "todo.reschedule-recurrence": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-oJCeniEzGZxXjraiBzslkV+ddstw9dLf+hLazlG+Nmc=",
          "summary": "When a repeating todo's due date is moved by hand, move its series with it: the new date becomes the anchor.",
          "level": 2,
          "tags": [
            "todo",
            "recurrence",
            "repeat",
            "reschedule",
            "anchor",
            "due-date",
            "series",
            "move"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "todo.item": "^1.0.0",
            "dates.add-days": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "todo.reschedule-recurrence-1.0.0.fune",
            "size": 9618,
            "sha256": "32bbf5607d31a2d70a36741adcf309620dd29de47922d0b5e4045c5976eb5451",
            "languages": {
              "typescript": {
                "name": "todo.reschedule-recurrence-1.0.0-typescript.fune",
                "size": 7443,
                "sha256": "f2f27c113ee706773b8e2e300011aab632698a0510e077b82d120c95b44fb2af",
                "integrity": "sha256-kZyZ1VqDMhPd4NpQSqq3kLLC2CEabg6BOqLaOCTu6MA="
              },
              "python": {
                "name": "todo.reschedule-recurrence-1.0.0-python.fune",
                "size": 7258,
                "sha256": "330f30d239519367e0c8ad204635fa789d57ea444deea3a5ce8e720fd7cb87dc",
                "integrity": "sha256-qQYS1I0JNxBslwxtMDnna0sVNsVvPE/XdhlmOdR2iZY="
              },
              "rust": {
                "name": "todo.reschedule-recurrence-1.0.0-rust.fune",
                "size": 7683,
                "sha256": "450784972844716f2caa9f60a37191a8bbe44c83de49fd53ebd0f3792fe04902",
                "integrity": "sha256-t31a2sjRkcQE7PRkn9hMeX2H4+RIPp+mw2A93DFIKhQ="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "todo.sort": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-qnQBz2K9D0+r+lC5EEkZC9k528ikVJDiefEjfPz0Mvg=",
          "summary": "Sort todos by manual order, due date, priority, creation time or title, stably, with sensible tie-breakers.",
          "level": 2,
          "tags": [
            "todo",
            "sort",
            "order",
            "priority",
            "due-date",
            "title",
            "arrange"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "todo.item": "^1.0.0",
            "collections.sort-by": "^1.0.0",
            "collections.search-text": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "todo.sort-1.0.0.fune",
            "size": 43900,
            "sha256": "c1d30450c183f2c1d6ceb267684929429e8bf879c49ad01d2e3803d07240012e",
            "languages": {
              "typescript": {
                "name": "todo.sort-1.0.0-typescript.fune",
                "size": 37293,
                "sha256": "a003727a16536b18ff4124e8bc39018db5450d43bb1f8b6e76be4b8d0d83648e",
                "integrity": "sha256-CxEti8RdDvSxB/FDq14H2ejvwN+l8hbYBeDs8mHNYwc="
              },
              "python": {
                "name": "todo.sort-1.0.0-python.fune",
                "size": 36746,
                "sha256": "b5a442a7b2f01dd97aae7f047e434a7c3ec16d231e4cd4b82190e2a96a07db0b",
                "integrity": "sha256-P+B3HG9D9ESnP0KRu6tV/qh8+VONLdXJ3EW6jAAs3gE="
              },
              "rust": {
                "name": "todo.sort-1.0.0-rust.fune",
                "size": 37827,
                "sha256": "e9465f688d9bb45490211c7c2dbb2292dddf6049b706987b00041106c0b1336e",
                "integrity": "sha256-0pxMsagJjFjGb0T6oZ9L11aR2/ALlvH/qWzT8TW2KdU="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "todo.summary": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-/bFq5qXoNQVEPbXrJkeQwOyAyZ7zxB+klP6pou2k7jc=",
          "summary": "Counts for a todo list's header or footer: total, active, done, overdue, due today, percent done and \"3 items left\".",
          "level": 2,
          "tags": [
            "todo",
            "summary",
            "count",
            "progress",
            "percent",
            "remaining",
            "stats",
            "footer"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "todo.item": "^1.0.0",
            "math.round-div": "^1.0.0",
            "todo.due-status": "^1.0.0",
            "dates.day-of-week": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "todo.summary-1.0.0.fune",
            "size": 66009,
            "sha256": "c18e7aa1361361be82208402f37176789c3697b153d357e69072e6d82a83db45",
            "languages": {
              "typescript": {
                "name": "todo.summary-1.0.0-typescript.fune",
                "size": 62951,
                "sha256": "3bc0be92d6b69cce7e354077a9cd14f5b5a0fa43c302267564d5dd01cc6053e4",
                "integrity": "sha256-THn4H/tO5ZZB/j096OQes5rxOvH38wS8JXoOJvFAQWE="
              },
              "python": {
                "name": "todo.summary-1.0.0-python.fune",
                "size": 62916,
                "sha256": "3c014b083183ebca368ab0bbb49727756b0108f72d231c6249da355271b28369",
                "integrity": "sha256-bYhoDJgw/NZqDFscVn6AJEOBYJ1ZpOa/shijQbjJ0Uw="
              },
              "rust": {
                "name": "todo.summary-1.0.0-rust.fune",
                "size": 63700,
                "sha256": "cc7eabc75919e1f52a5a35901a572fcb0d86e4243e9c2314cdc4447f5266a993",
                "integrity": "sha256-hwFZzGnUN+Y7F7g6Fz3XV7DRJfsFK3YLXYMfIzmVjH0="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "todo.tag-counts": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-SoazyJ9JcryNeZeC+OXDk55gCjw71tr7v5SXrsvAzIQ=",
          "summary": "How many todos carry each tag, for a tag sidebar: most used first, open todos only unless asked.",
          "level": 2,
          "tags": [
            "todo",
            "tags",
            "labels",
            "count",
            "sidebar",
            "histogram",
            "frequency",
            "categories"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "todo.item": "^1.0.0",
            "collections.sort-by": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "todo.tag-counts-1.0.0.fune",
            "size": 13164,
            "sha256": "3666265c41bbbb558c4084744eea9703df9e92cb87e8831c6fd0e5f1d8e56185",
            "languages": {
              "typescript": {
                "name": "todo.tag-counts-1.0.0-typescript.fune",
                "size": 10632,
                "sha256": "ae731054869b7a852554895db445417cc415e1af55411c5d14736876575748eb",
                "integrity": "sha256-KEdG/cbyeYUtN0ZM0au1bGe7w5EdVr7K7i73zZ+gTS0="
              },
              "python": {
                "name": "todo.tag-counts-1.0.0-python.fune",
                "size": 10405,
                "sha256": "89f1e133dacedca52f800b44e10ac642c3718d530470db0cdcb3a11316edfdd2",
                "integrity": "sha256-IcwrKLicawJFDcEVQyMggPVvbUJYnFPB81Hky2Mgwws="
              },
              "rust": {
                "name": "todo.tag-counts-1.0.0-rust.fune",
                "size": 11281,
                "sha256": "167df7b61e693c2625506060d9e0b034d10c557cecc2d21f9a1e830c69d2f451",
                "integrity": "sha256-RUAqfQKoMF/hh0GOSSOLa/EHZAGmQ34sefVXSDDYj54="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "units.convert": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-X770ffzz4dIjkOmycx2SzvTYdQ5hQG26gVieLDl1168=",
          "summary": "Convert length, mass, area, volume, temperature and energy between units, exactly, as decimal text.",
          "level": 1,
          "tags": [
            "units",
            "unit-conversion",
            "measurement",
            "imperial",
            "metric",
            "temperature"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "data/units.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "units.convert-1.0.0.fune",
            "size": 40187,
            "sha256": "b696daf01ee5529e23321dbd3ab00989ebbf892d891a029f312f8065b201a871",
            "languages": {
              "typescript": {
                "name": "units.convert-1.0.0-typescript.fune",
                "size": 30873,
                "sha256": "5a6cb0ce3526550a7491a75720b9b13ba9988b05a2f20f6e23267c84d3cdd539",
                "integrity": "sha256-8XAc2ffXkcfBHb8Aoljjixi6d57wU6IJOeTVa3ZnZTE="
              },
              "python": {
                "name": "units.convert-1.0.0-python.fune",
                "size": 30550,
                "sha256": "a7228038cd43e6949f28ee6caa831036c65669bbde3779b7d50b6144766a1715",
                "integrity": "sha256-wf7ecNz9D0JS6yG8vrOHDgYfWQ3+5eJ7F/ofAtRuo9U="
              },
              "rust": {
                "name": "units.convert-1.0.0-rust.fune",
                "size": 32684,
                "sha256": "ca32296e43fa2be5b666bb9d1dab3a26b17d4899a1b041eee736dde7a984493c",
                "integrity": "sha256-gV0jmwm8aaMsyIDvItayY2/v+c9dTC9TVSg07+OmP3s="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "units.parse-quantity": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-heI/coD07k8NDgwDLvLRgNaMDjmqLMaeFHgugXM0P0Y=",
          "summary": "Parse \"2.5 kg\", \"1,200 m\" or \"12 ft 6 in\" into an exact decimal value and a canonical unit symbol, strictly.",
          "level": 2,
          "tags": [
            "units",
            "quantity",
            "parse",
            "measurement",
            "imperial",
            "feet-inches"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "units.convert": "^1.0.0"
          },
          "files": [
            "README.md",
            "data/aliases.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "units.parse-quantity-1.0.0.fune",
            "size": 48085,
            "sha256": "8edaf9580576a532d30ec6a175c43a336e2e53ee57d48381fc833377b290fa8c",
            "languages": {
              "typescript": {
                "name": "units.parse-quantity-1.0.0-typescript.fune",
                "size": 31051,
                "sha256": "29bf5d6f49e5403c1945438181169b48c9971be1d75b0b111c86de72866cd6ba",
                "integrity": "sha256-ni3yvcu5Sh/6OMad1fTXmVdl9mN8oOquGA23zxnSTVk="
              },
              "python": {
                "name": "units.parse-quantity-1.0.0-python.fune",
                "size": 30662,
                "sha256": "9c978616cc0cc4755e18aa6a4f19f500fa7643f9a0cf9360b5dd6831924fde40",
                "integrity": "sha256-j7sf2lXNixaftgqhVWhNiggx6TUl8ANGC8M6VhunR0M="
              },
              "rust": {
                "name": "units.parse-quantity-1.0.0-rust.fune",
                "size": 32880,
                "sha256": "64ee1c89e50779e18c346fcd82234357e23fa80623d22a0029a89b26f139956d",
                "integrity": "sha256-jtfE4sk+NZpK08mRaVevUknwK9ukGZjW686FiTM9byM="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "validation.bic": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-72dJ3z4oODkZa7FHVI+joFaun460C197VGamlUR4EiM=",
          "summary": "Check the format of a SWIFT/BIC code (8 or 11 characters) and split it into its parts.",
          "level": 0,
          "tags": [
            "validation",
            "bic",
            "swift",
            "iso9362",
            "bank",
            "payments",
            "wire",
            "sepa"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "validation.bic-1.0.0.fune",
            "size": 14777,
            "sha256": "2a573b0bd05ab318b74e3aea6ddc5e1de63a1a838cce8211f58259a5ee40f76b",
            "languages": {
              "typescript": {
                "name": "validation.bic-1.0.0-typescript.fune",
                "size": 10686,
                "sha256": "80e860283643cb7dc68644c268e864a383ee550eb8d1dc9de946c75b441a9a45",
                "integrity": "sha256-t3QP3ll9yc0fb4jri2J8OyD+T8yiigmFruxkyy04quM="
              },
              "python": {
                "name": "validation.bic-1.0.0-python.fune",
                "size": 10619,
                "sha256": "8abd4f9a4d5a193c9720538804b0aab6c00f5d23fcfcda6d5293c1b646903f2b",
                "integrity": "sha256-QK9JfUwr3E/1Xlwq+3GbYwuqPN4QWz+Cb0mQQu+l5Jk="
              },
              "rust": {
                "name": "validation.bic-1.0.0-rust.fune",
                "size": 11592,
                "sha256": "883c0ed7ae9e67a80ecf57c9c2d2eeef5997cb7ceb3fbb7a7a8f7136fbcebb83",
                "integrity": "sha256-ah1MpVap8OGzuoulvNLec9iAbCwC8BK75XkHRMQRmcc="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "validation.email": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-2tD59J0+sz9LTsXKs1MOejrAWaffoZdVpiq5GwkQ+Yk=",
          "summary": "Is this a plausible email address? A documented, pragmatic subset of RFC 5322, not the full grammar.",
          "level": 1,
          "tags": [
            "validation",
            "email",
            "address",
            "rfc5322",
            "rfc5321",
            "signup"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "validation.email-1.0.0.fune",
            "size": 22673,
            "sha256": "261bd3391546f0c3952214872b5e7e71f138c040d13438502b1ba9a933196a4b",
            "languages": {
              "typescript": {
                "name": "validation.email-1.0.0-typescript.fune",
                "size": 12465,
                "sha256": "0059e45e94abe0a3bef3adecc5d71e18a79d186c44dc13cb01a8037a1901740e",
                "integrity": "sha256-dyBpaWBfAZjvYNT+7nNpQdmwIxlwbJnEDlo+DWK84eM="
              },
              "python": {
                "name": "validation.email-1.0.0-python.fune",
                "size": 12284,
                "sha256": "c5018c7fb6ba727272a341dbc93a60f878acf54c145195adb9fb44638cf86bd0",
                "integrity": "sha256-Ww/saT87ymTN1Sjee7d17gwZJ7KaduFu3sQobzleBxs="
              },
              "rust": {
                "name": "validation.email-1.0.0-rust.fune",
                "size": 13264,
                "sha256": "9ca07ca2d5acaf11f7f7859df204a2754bf14cb09bc95cb9d744129a90907c71",
                "integrity": "sha256-vCbLr2VBVG9CTVmpqDYvGEDqSJcTNU0EmDrIW5mDXJ0="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "validation.gs1-check-digit": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-Lk3bvv3bA0XQmDjcZo9GeD9Xb7R+JSqa4pw4epBzfik=",
          "summary": "Compute or check the GS1 mod-10 check digit of any GS1 key: GTIN, SSCC, GLN, GSRN, GDTI, GSIN and the rest.",
          "level": 0,
          "tags": [
            "validation",
            "gs1",
            "check-digit",
            "mod10",
            "gtin",
            "ean",
            "upc",
            "sscc",
            "gln",
            "gsrn",
            "gsin",
            "barcode"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python/gs1_check_digit.py",
            "impl/python/is_gs1_check_digit_valid.py",
            "impl/rust/gs1_check_digit.rs",
            "impl/rust/is_gs1_check_digit_valid.rs",
            "impl/typescript/gs1_check_digit.ts",
            "impl/typescript/is_gs1_check_digit_valid.ts",
            "vectors.json"
          ],
          "package": {
            "name": "validation.gs1-check-digit-1.0.0.fune",
            "size": 15242,
            "sha256": "f57294b4fe86f2e8ced3fffedc28f4fba3738cd0d9037d8ce207562cf69d30ca",
            "languages": {
              "typescript": {
                "name": "validation.gs1-check-digit-1.0.0-typescript.fune",
                "size": 11312,
                "sha256": "51d57a6838b35f7ea5fdfa5834077ee673e0a224e3369e28d1def002e4177296",
                "integrity": "sha256-gkbj0mpMTio4a5nTi3M7iQcpejfxubmZAtKGNNoivY8="
              },
              "python": {
                "name": "validation.gs1-check-digit-1.0.0-python.fune",
                "size": 11468,
                "sha256": "77bed52f4133d6ee152efeba9e5bfc30911ecd95f9cc1b04040cce923a1827ec",
                "integrity": "sha256-ItQHx7IHW1CPA4UKOgJfAsQ/kIEf3alaWQ6yv+9NF18="
              },
              "rust": {
                "name": "validation.gs1-check-digit-1.0.0-rust.fune",
                "size": 11914,
                "sha256": "5a5606637d8c62eb3eba0c5432d349e7e4704f47fb649fd072898b44e7b139e7",
                "integrity": "sha256-0KUolEO92JneK0hzzJW3Iyi25lVND0U1h4WUW/mGjFM="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "validation.gtin": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-XBxSLqX+2bsAQQPqW4IHWNL9UiqUdQPTi8PJlip7Y3g=",
          "summary": "Check an EAN-8, UPC-A, EAN-13 or GTIN-14 barcode number against the GS1 mod-10 check digit.",
          "level": 0,
          "tags": [
            "validation",
            "gtin",
            "ean",
            "upc",
            "barcode",
            "gs1",
            "check-digit",
            "product"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "validation.gtin-1.0.0.fune",
            "size": 15535,
            "sha256": "271a98258ce51ebf169572a6716b94b7754f5f7ba5b92aea276225a52ddf264d",
            "languages": {
              "typescript": {
                "name": "validation.gtin-1.0.0-typescript.fune",
                "size": 10560,
                "sha256": "4a741968710a7bf4c4cc65ccb56d1848492af378e1d6cea429f0b9841e6164bd",
                "integrity": "sha256-GDc05PnKEnTi7LYBH+oJntO5t/1R9Yqh586cX8buZAo="
              },
              "python": {
                "name": "validation.gtin-1.0.0-python.fune",
                "size": 10607,
                "sha256": "fd1af5047c06f8a45d203f46c07d785bdddb7e7829c15802bfe2a4a67979613b",
                "integrity": "sha256-B9nkfdcSBx6bxhrabChURtTB8K/6orsolIL9wdIZQnc="
              },
              "rust": {
                "name": "validation.gtin-1.0.0-rust.fune",
                "size": 11390,
                "sha256": "0c35831fea893cb2460aacb50e2e1d57cc547d509b82713f730ba0545d0e4c4b",
                "integrity": "sha256-64xG9x4XFoOk4jlzMH/cwvm6/e+mSgeJ3nF/SHWgiwk="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "1.1.0": {
          "integrity": "sha256-6ef0CX4Jw3OkwxLekZ6MUitOEWgrA5VrCM094PK0yo0=",
          "summary": "Check an EAN-8, UPC-A, EAN-13 or GTIN-14 barcode number against the GS1 mod-10 check digit.",
          "level": 0,
          "tags": [
            "validation",
            "gtin",
            "ean",
            "upc",
            "barcode",
            "gs1",
            "check-digit",
            "product"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "validation.gs1-check-digit": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "validation.gtin-1.1.0.fune",
            "size": 15693,
            "sha256": "34abcea03c11dbc84715b68a15149e3b346a65ea45084ac80d49792f3adec583",
            "languages": {
              "typescript": {
                "name": "validation.gtin-1.1.0-typescript.fune",
                "size": 11130,
                "sha256": "b08e7995633c2bd40782905e9c0e3a57caa30e558f3710710e003b3d12224156",
                "integrity": "sha256-4bray0iPPkfGDptjDWxe/v77OTL2UXFcJNFLdfd5Ufc="
              },
              "python": {
                "name": "validation.gtin-1.1.0-python.fune",
                "size": 11231,
                "sha256": "60f36ced9c4d2ebb2a18fa1ea12da39d56c4dccc79bbe74ae341e1ea94e3c7b9",
                "integrity": "sha256-iKqYwvb34sn6CJy8NScy+AlbC5MTJnbNwcLIAp1e07M="
              },
              "rust": {
                "name": "validation.gtin-1.1.0-rust.fune",
                "size": 11928,
                "sha256": "5cf7c1608fdd61589de54c71b1957dd39a67df201c8f06ec7f1b417035565641",
                "integrity": "sha256-ISpDtLUNe14L8QLPyq07YlELTvk1NrzgMHWP5fZGGkU="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "validation.iban": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-zkTwtQEVTUDRYfjKQJCSFXhtdlzUNrjknG1uttGUGW8=",
          "summary": "Check an IBAN against the ISO 13616 mod-97-10 checksum and the registered length for its country.",
          "level": 2,
          "tags": [
            "validation",
            "iban",
            "bank",
            "payments",
            "sepa",
            "iso13616",
            "mod97",
            "checksum"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "data/iban-lengths.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "validation.iban-1.0.0.fune",
            "size": 25944,
            "sha256": "9bfdfb5bf97b782d91dfc079fedfee84e43d92fe1568b402fc5e45584227d8a4",
            "languages": {
              "typescript": {
                "name": "validation.iban-1.0.0-typescript.fune",
                "size": 17376,
                "sha256": "1d69ebcbf0d3c91bcc73877abeec784ef593ca12675ac5e48baf3e4a0565a694",
                "integrity": "sha256-jZEY0w7uNEA7Vt0f3sroqmAhs4wYB+XLbG1NU7QDKuY="
              },
              "python": {
                "name": "validation.iban-1.0.0-python.fune",
                "size": 17321,
                "sha256": "1e9a3edd54afe45e8d2d01c3cb778d4f206fcc2ab8d04949b34038d678d325cf",
                "integrity": "sha256-xvdxF9QedveWbt79ENsqs6w9enZdPEOHGfnq/2utjPo="
              },
              "rust": {
                "name": "validation.iban-1.0.0-rust.fune",
                "size": 17637,
                "sha256": "6851c0945b6a78f999ad38f6ed0a5f2fdf6f0c11cfc999104bad44a8300ad48a",
                "integrity": "sha256-hGXKZiOUGx1V5fZFJitZofxvGg5RJCnT+g0lnVFVeqM="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "validation.isbn": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-TRN7gnOrtDWO3ACBnBkKPpd4dek0c2IwOOmUtbpF8aY=",
          "summary": "Check an ISBN-10 or ISBN-13 and convert between them; the normalised form is always the ISBN-13.",
          "level": 0,
          "tags": [
            "validation",
            "isbn",
            "book",
            "isbn-10",
            "isbn-13",
            "ean",
            "bookland",
            "check-digit"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "validation.isbn-1.0.0.fune",
            "size": 19171,
            "sha256": "8172c558a9fcbd41bc83843d50404321a07e6af6e93416743fbf2dbf57cced2f",
            "languages": {
              "typescript": {
                "name": "validation.isbn-1.0.0-typescript.fune",
                "size": 11660,
                "sha256": "1ffe8bd3e48acaba3fd12ab174cc5ed55277a5bbed596c088bec38ce2080d9d0",
                "integrity": "sha256-7ResmzZaeC4HHuN+LXUuKt41gJSbVUIN/v0YHnIBmhw="
              },
              "python": {
                "name": "validation.isbn-1.0.0-python.fune",
                "size": 11611,
                "sha256": "6a63e0a88527ac54edf148dac18c575c1b5c359c9acff06968db298546934d10",
                "integrity": "sha256-7FcJy7UOGnKjTS/5UGnGyeXTNS4sfhBugaokMkqGqBA="
              },
              "rust": {
                "name": "validation.isbn-1.0.0-rust.fune",
                "size": 13006,
                "sha256": "cf3e87858416f213eec6a15583276e3c52b523464d1b6552e7b26e32de071d99",
                "integrity": "sha256-WvtUM4FncY31hkJMsvnkeL704NvNUxWcKhe3vGzxCjk="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "validation.lei": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-snECgIXrrsfU29OSs+HjpkYHUQNb0EGSeo5Sg9/0NNA=",
          "summary": "Check a 20-character Legal Entity Identifier against its ISO 17442 / ISO 7064 MOD 97-10 check digits.",
          "level": 0,
          "tags": [
            "validation",
            "lei",
            "legal-entity-identifier",
            "iso17442",
            "gleif",
            "mod97",
            "checksum",
            "mifid"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "validation.lei-1.0.0.fune",
            "size": 13996,
            "sha256": "fde9af0883131cea8a51a63bf4bfb2b0bf9f39bd4aca36513ebfebb722d46a54",
            "languages": {
              "typescript": {
                "name": "validation.lei-1.0.0-typescript.fune",
                "size": 9272,
                "sha256": "3af358b46891e4b5fe8edfd057848e00c353654ebd4240138dc183f48539e0b6",
                "integrity": "sha256-TfTd797eVQJZro7hmsw/0eIfT2lhX8f/DY4XhGxqjZU="
              },
              "python": {
                "name": "validation.lei-1.0.0-python.fune",
                "size": 9216,
                "sha256": "436a768bd9d1cd0f68b5911063f99c88271fdfeaac1c514fe95b278cf51f1109",
                "integrity": "sha256-yzQ0+Hclu6YiDPcjjsjgH5gVbJESl0qxm/HxPCqdcDM="
              },
              "rust": {
                "name": "validation.lei-1.0.0-rust.fune",
                "size": 9970,
                "sha256": "2b44fb2d73eeda1b04f04bb798956d9012ac7b212a7ea4fc939f3caabb181608",
                "integrity": "sha256-cJriOYNNGvzDgoDLaZsjQK63NxN3hGwwrKG400yWqRs="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "validation.luhn": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-YP1Itp6+B4ArWkBWoWyQhPzvEjN405YG3/qRWfWy66U=",
          "summary": "Check a digit string against the Luhn mod-10 checksum used by payment cards and many identifiers.",
          "level": 1,
          "tags": [
            "validation",
            "luhn",
            "mod10",
            "checksum",
            "card",
            "payment",
            "imei"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "validation.luhn-1.0.0.fune",
            "size": 13049,
            "sha256": "0ca77e1af7ac5c6493cdc4737614cd723c89e632555685d909d4dd957a24d1d6",
            "languages": {
              "typescript": {
                "name": "validation.luhn-1.0.0-typescript.fune",
                "size": 7306,
                "sha256": "99ec8aaeb1f6aed22f72537e0dc040a621ebbba555dc7146112cf2c53334b5cd",
                "integrity": "sha256-29OUt8A4e67a0RfO8BtdsBUe8RczxGQ5JqkOYgCH/ME="
              },
              "python": {
                "name": "validation.luhn-1.0.0-python.fune",
                "size": 7338,
                "sha256": "09a48269c001b228e666fbb0de4f0c7669b6274b0792287b12332e424823a19b",
                "integrity": "sha256-dO1yd41PZBP6LGWLu58YF6C89zPR7Y0VPUu+B1f9dSc="
              },
              "rust": {
                "name": "validation.luhn-1.0.0-rust.fune",
                "size": 7689,
                "sha256": "56dad7c23291b9cb5f553d217471cf0d7f7d9886ab53a8cf836a179e4ac67d7d",
                "integrity": "sha256-YaINyKt0bZNlLkPb/oVUIcTo3r+VCRX92Gr9y0cdE8w="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "validation.nhs-number": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-7zeg/nAa+lGDBRJK+InVZoSvA0RVo2RfTcyF3LN3rM0=",
          "summary": "Check an NHS number's modulus 11 check digit and normalise it to ten digits.",
          "level": 1,
          "tags": [
            "validation",
            "nhs",
            "nhs-number",
            "patient",
            "health",
            "modulus11",
            "checksum",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "validation.nhs-number-1.0.0.fune",
            "size": 14810,
            "sha256": "6dd6e144b2dba0762c799c75588b9aebbbb91474bd336f24a06c99f8f9686ff5",
            "languages": {
              "typescript": {
                "name": "validation.nhs-number-1.0.0-typescript.fune",
                "size": 9561,
                "sha256": "f750b556c95fb238226a87c8544313bb5ef278d30354951c6a8790a09c277b83",
                "integrity": "sha256-IibgiKJygzP3l19NQngLeZ5vMcAwq9Qc6g9eWd1kKYo="
              },
              "python": {
                "name": "validation.nhs-number-1.0.0-python.fune",
                "size": 9601,
                "sha256": "5764a76c7266850495689b3d8c73510ea225a8f8ef3f8091d3b17eade2524752",
                "integrity": "sha256-cQuhZKj/YUzho/c9SBvXp3A2+UgMeXZw5KrBBP//X7o="
              },
              "rust": {
                "name": "validation.nhs-number-1.0.0-rust.fune",
                "size": 10636,
                "sha256": "c69650361ef4eb08ff78020fa1cb0de367d7b2c6388138537dfe95d323bb905d",
                "integrity": "sha256-tfMRWgozeYLl5zdH+/ma/4P2T3Dm5STF/JMGV/I37WA="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "2.0.0": {
          "integrity": "sha256-Nbqb4hxpeVHgUM6fXpuWYQnak1A8zo46lPdy3QoVsYc=",
          "summary": "Check an NHS number's modulus 11 check digit and normalise it to ten digits.",
          "level": 1,
          "tags": [
            "validation",
            "nhs",
            "nhs-number",
            "patient",
            "health",
            "modulus11",
            "checksum",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "validation.nhs-number-2.0.0.fune",
            "size": 15159,
            "sha256": "2787086483e4c4f9358958bfcb526f16f58d415a0a524be114297c20def61b5e",
            "languages": {
              "typescript": {
                "name": "validation.nhs-number-2.0.0-typescript.fune",
                "size": 9883,
                "sha256": "6c87f4b511cf1026d0f7259827e3603cc4877f6ad29e1f7a023c0ee6cfe77aff",
                "integrity": "sha256-D86VYxejnwoVJO+AqIcLnuiq2CgffNFI7lHusoK/TqE="
              },
              "python": {
                "name": "validation.nhs-number-2.0.0-python.fune",
                "size": 9924,
                "sha256": "f4eef894f042f82dfb5f980983e92d61054ab98b0caf276796437678b4268849",
                "integrity": "sha256-rdDbzbDh1YDph/+bo7oEkDBGyIWpuCAkntUcXKR9zHw="
              },
              "rust": {
                "name": "validation.nhs-number-2.0.0-rust.fune",
                "size": 10968,
                "sha256": "574de1af20dde6858738851cc2eaf45925b8ce92f527677f906fa6cad4a2ff0b",
                "integrity": "sha256-NrEjtuCoUFQFpahXq5M8G4uykUAJnFSun5PnhHf/W5U="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "validation.phone-e164": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-5gIpuX84ewXJspPQYMDNNo2iseZI0Z7DNuLu6nUQ3zM=",
          "summary": "Normalise a phone number to E.164 (+447700900123) using a default country's trunk and dialling prefixes.",
          "level": 1,
          "tags": [
            "validation",
            "phone",
            "telephone",
            "mobile",
            "e164",
            "normalise",
            "international",
            "dialling"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "data/phone-countries.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "validation.phone-e164-1.0.0.fune",
            "size": 29600,
            "sha256": "c9e8389e8f9ead978a148c80af56bb327ad7c41d0cf134b5bd9b72e1c59e3440",
            "languages": {
              "typescript": {
                "name": "validation.phone-e164-1.0.0-typescript.fune",
                "size": 20107,
                "sha256": "6d8888bfc28b5962d265f0a00e80c7ff6e559670c70d3d6c4e6a415de850e00b",
                "integrity": "sha256-a13sG0IMVT/A+SYIDTEvSmKyjGrcZIt3SvMBdHSaejA="
              },
              "python": {
                "name": "validation.phone-e164-1.0.0-python.fune",
                "size": 20242,
                "sha256": "c8701359878013b10f8fe5543b92ca4d799e300f958aefcf2f345554e97dddf9",
                "integrity": "sha256-xC5HRveOj6qml4bEN1AC9pgBSJcj7zBT+FLhSVsV80A="
              },
              "rust": {
                "name": "validation.phone-e164-1.0.0-rust.fune",
                "size": 21465,
                "sha256": "27bc6c57ccadca63a89c0a64f5454647a12d470459269c095b1bb27416ece7fb",
                "integrity": "sha256-aznV9ltKVl0k5zZdEZjexC+hqaIL7Q0nV9jc+Z9LYIo="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "2.0.0": {
          "integrity": "sha256-HQ+/Yx4K+s0cC01CnA7QaMQS0RY8u+2N0ODN5jzv6CM=",
          "summary": "Normalise a phone number to E.164 (+447700900123) using a default country's trunk and dialling prefixes.",
          "level": 1,
          "tags": [
            "validation",
            "phone",
            "telephone",
            "mobile",
            "e164",
            "normalise",
            "international",
            "dialling"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "data/phone-countries.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "validation.phone-e164-2.0.0.fune",
            "size": 29949,
            "sha256": "7fb8dd5dbc3e989deda850ffb47f21b2c03c547eb73908c78d864e92d7f09a58",
            "languages": {
              "typescript": {
                "name": "validation.phone-e164-2.0.0-typescript.fune",
                "size": 20429,
                "sha256": "e77d38a4284206a00a09482939b9292d6b9ff3a6ad621d83eee495fa0f269a9c",
                "integrity": "sha256-InURzeBpeitz0ihxQEETl6kp3ATaXM3TK6dGSKNl6mo="
              },
              "python": {
                "name": "validation.phone-e164-2.0.0-python.fune",
                "size": 20565,
                "sha256": "15ebd7ad01a5583d98631390e3a2a0ad7a04f7dfcbb5cfcc6590bb44479de012",
                "integrity": "sha256-vAO3J4hKW1dDABPtpq+zQowo5F2pog154FnN7ap7w8w="
              },
              "rust": {
                "name": "validation.phone-e164-2.0.0-rust.fune",
                "size": 21797,
                "sha256": "77fcbe829fa1ae3d8a1aecca5da2a896c817ee33556b09b14dce24d8343309de",
                "integrity": "sha256-bkh3fzk7VS4l0siKZBieJ+K0SFkdyWRisvwsZXG70xk="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "validation.uk-company-number": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-n9Ig77BSz2ok5wdnbfMv+WL6sI71NexqljzXXcj9/dg=",
          "summary": "Check a Companies House company number's format and prefix (SC, NI, OC, LP...) and zero-pad it to eight characters.",
          "level": 0,
          "tags": [
            "validation",
            "company-number",
            "crn",
            "companies-house",
            "registration",
            "uk",
            "gb",
            "llp"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "data/company-prefixes.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "validation.uk-company-number-1.0.0.fune",
            "size": 23490,
            "sha256": "74bc6328c07a7c0020b5f2e8564b98c5de6506b72a6ead13b6d7260fbebd260a",
            "languages": {
              "typescript": {
                "name": "validation.uk-company-number-1.0.0-typescript.fune",
                "size": 16801,
                "sha256": "ddd9994796d16d35f57451668b59bdf29f6864e49b14399f0d79a466e2431ac9",
                "integrity": "sha256-CHZ6l8XNxtXhKKUnx6vXJJw1O4V8yyWAAnToWURMbps="
              },
              "python": {
                "name": "validation.uk-company-number-1.0.0-python.fune",
                "size": 16847,
                "sha256": "bc60357a036ad0b269101d93621c00b92a5e8b15851853d618e8a3b10a82c5eb",
                "integrity": "sha256-R4GOPRhALWsZ5bbclfALAeYhiQRbV+GOuGjAg1L28fY="
              },
              "rust": {
                "name": "validation.uk-company-number-1.0.0-rust.fune",
                "size": 18010,
                "sha256": "4b2a57ebf004a52f5bff5e48d24208825f872b940f8f827bf284f63be6a67c11",
                "integrity": "sha256-KLdk5pLHZCd/58N2+NOF78U9OqRbyO03Mggb7EPq5mk="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "2.0.0": {
          "integrity": "sha256-gy96gHJThRM1F6H0ANrfcFS9F7chZTdwyO0pnpnJZwY=",
          "summary": "Check a Companies House company number's format and prefix (SC, NI, OC, LP...) and zero-pad it to eight characters.",
          "level": 0,
          "tags": [
            "validation",
            "company-number",
            "crn",
            "companies-house",
            "registration",
            "uk",
            "gb",
            "llp"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "data/company-prefixes.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "validation.uk-company-number-2.0.0.fune",
            "size": 23858,
            "sha256": "f9c8efdf14c7e97e7f201944074e7eef6d1b01a687fe28fe751002dae5e7d70a",
            "languages": {
              "typescript": {
                "name": "validation.uk-company-number-2.0.0-typescript.fune",
                "size": 17142,
                "sha256": "4483654e23fd386298b8584dee494c56b54a0bbe89cfb6ca66cbf83fa8210bc2",
                "integrity": "sha256-IBzTmjo95GhyeFR+ERngPLqlxsBJA8N2LM8F4QRLj3k="
              },
              "python": {
                "name": "validation.uk-company-number-2.0.0-python.fune",
                "size": 17189,
                "sha256": "7c53afa10e18651aed0b57d1d79d0d0879ae5ebe7682a2c44663edcd592706b0",
                "integrity": "sha256-HmKlVsqCOOfIJoBnkPOqmfQG7GNRCiq0uoVkTNGt6uc="
              },
              "rust": {
                "name": "validation.uk-company-number-2.0.0-rust.fune",
                "size": 18361,
                "sha256": "baf63710d758bfefca74f9d7655d60147ddd1d11c2ae38c02cdedff23c5ba6ca",
                "integrity": "sha256-ygVVLYb3GScExSodfStM0uhGj4zw8fD5T37U4rl1vOk="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "2.0.1": {
          "integrity": "sha256-9ccz033hbFGNIZz/Rvi4eFjOmeWlcRG7h13QI6GP+gA=",
          "summary": "Check a Companies House company number's format and prefix (SC, NI, OC, LP...) and zero-pad it to eight characters.",
          "level": 0,
          "tags": [
            "validation",
            "company-number",
            "crn",
            "companies-house",
            "registration",
            "uk",
            "gb",
            "llp"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "NOTICE",
            "README.md",
            "data/company-prefixes.json",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "validation.uk-company-number-2.0.1.fune",
            "size": 24336,
            "sha256": "4d2865bda769e6a35cd0e59dded3a4d0bd0bbe286318e4d41df49acf58204951",
            "languages": {
              "typescript": {
                "name": "validation.uk-company-number-2.0.1-typescript.fune",
                "size": 17620,
                "sha256": "ba59b36fcacc33410f7b1c06cb5de27def394a64535fcbfea0d25a249b6cba09",
                "integrity": "sha256-HfZ3udg9RlWQRjx9yRo3htNEO0gMPvjxySSUJcprrmg="
              },
              "python": {
                "name": "validation.uk-company-number-2.0.1-python.fune",
                "size": 17667,
                "sha256": "e2de4a22d53f78a86f750ce69dff184c414a39a1219834ffbe8a79f06ba6261c",
                "integrity": "sha256-IsLPexqJFHK8kql20UJ+DMBDESlVgO+y9zbf+JTxh0M="
              },
              "rust": {
                "name": "validation.uk-company-number-2.0.1-rust.fune",
                "size": 18839,
                "sha256": "40c21e6063b31bf7d24f3b28a4a38c50bbacdad2d1fe9fb11e3572bd8559587c",
                "integrity": "sha256-n6P4nfi++Q6NpNTOiaplTSjdH8lT/kAWbFE4a5hFuCw="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "validation.uk-modulus-table": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-gAYW0pnrFscpoKESdSXZzGF/raMfF1MsWZab5ozA8uA=",
          "summary": "Parse Vocalink's VALACDOS.txt and SCSUBTAB.txt into the table UK sort code modulus checking needs.",
          "level": 1,
          "tags": [
            "validation",
            "sort-code",
            "account-number",
            "modulus",
            "vocalink",
            "valacdos",
            "scsubtab",
            "bank",
            "uk",
            "gb",
            "parser"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "validation.uk-modulus-table-1.0.0.fune",
            "size": 33152,
            "sha256": "7b72440545c7642c6abb082c6ba8003139826250ab85e6dbebe2d1ecbbd0826c",
            "languages": {
              "typescript": {
                "name": "validation.uk-modulus-table-1.0.0-typescript.fune",
                "size": 21442,
                "sha256": "303e67f471ca10fe9e372b458127268c566802f529f5a9199f8a0f232f705897",
                "integrity": "sha256-6P7dwYTWZbF9fInI4p6WEL3jZwSew2AN4g6vT3j4U9g="
              },
              "python": {
                "name": "validation.uk-modulus-table-1.0.0-python.fune",
                "size": 21401,
                "sha256": "f79a7e7de9b75dcbe0429b8808ae5b758a8f670b91a2ad58d08c0015e44bbf5c",
                "integrity": "sha256-y/Ip5UGo+JaIRIthi7iUfDnWQ6uxEa646XSjvnLBK00="
              },
              "rust": {
                "name": "validation.uk-modulus-table-1.0.0-rust.fune",
                "size": 24673,
                "sha256": "de218d929cc4eab3391d22901b73940e0cd92da427a2f59231906d3a06c0aa6c",
                "integrity": "sha256-lZ+vP6pU7V/KTRiR4wTtM1xweQak9zWuvXDIqPiwLgs="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "validation.uk-ni-number": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-3LxqwQZGcoUeXsZpMFvNWUxojsD08Rqx09kT4rCF1Qw=",
          "summary": "Check a UK National Insurance number's format and HMRC's disallowed prefix letters, and normalise it.",
          "level": 1,
          "tags": [
            "validation",
            "national-insurance",
            "nino",
            "ni-number",
            "hmrc",
            "payroll",
            "uk",
            "gb"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "validation.uk-ni-number-1.0.0.fune",
            "size": 15976,
            "sha256": "11470cb19b93bf8d071d62938dfebf56b12a1db80ab516d8437dc0426b734ebc",
            "languages": {
              "typescript": {
                "name": "validation.uk-ni-number-1.0.0-typescript.fune",
                "size": 10314,
                "sha256": "da2ed0b42527a78efdb910d6550b72ee603a0d965789ce5fa4330c6381de4e5d",
                "integrity": "sha256-vAaXH4RnJJWqy9Z8T4gSgRP0xJc4AThx0uXpQMdmAxk="
              },
              "python": {
                "name": "validation.uk-ni-number-1.0.0-python.fune",
                "size": 10268,
                "sha256": "7a184df85f534295382b861a618629637d3d92847bc95f949b9d6a460a33e76a",
                "integrity": "sha256-t9DNyknngfjdI0662J6wE6XUI3x0w0B8ldQGl2hdUG4="
              },
              "rust": {
                "name": "validation.uk-ni-number-1.0.0-rust.fune",
                "size": 11168,
                "sha256": "305e6a023c1b25b5a7a21365add6f1d539980370695670ae06d480df19009704",
                "integrity": "sha256-SupRw68mf/Eq1PiYCRta4Lb7C/K8OJsX0gQuo3ARpPc="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "2.0.0": {
          "integrity": "sha256-EFAYYPhFRRGVvPakSjT6TZFizJ9XEp93KUWZ1NZLvy4=",
          "summary": "Check a UK National Insurance number's format and HMRC's disallowed prefix letters, and normalise it.",
          "level": 1,
          "tags": [
            "validation",
            "national-insurance",
            "nino",
            "ni-number",
            "hmrc",
            "payroll",
            "uk",
            "gb"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "validation.uk-ni-number-2.0.0.fune",
            "size": 16329,
            "sha256": "64cd5b29cb5b59b7db384f18e0d7d3705f1b70d3e382266a9a09b96170171293",
            "languages": {
              "typescript": {
                "name": "validation.uk-ni-number-2.0.0-typescript.fune",
                "size": 10640,
                "sha256": "eaa5de5011aca1458d7e22fa39a2794bb611189f64f97e89a153c3a832e52264",
                "integrity": "sha256-L5UK7boNZb1A0Ev3EH3OK4zCTzTILbcsnZ31szQQ1Zk="
              },
              "python": {
                "name": "validation.uk-ni-number-2.0.0-python.fune",
                "size": 10595,
                "sha256": "e4ab2ca40d21ae4eaa7ea95478ded39d28f001f590dc9a27eb08e4c0d43a7d90",
                "integrity": "sha256-crkNNJF1GIZv0a73mQKx/DV/NtNTLf02MQwYoKQJG8E="
              },
              "rust": {
                "name": "validation.uk-ni-number-2.0.0-rust.fune",
                "size": 11504,
                "sha256": "8a86c6216270039c6bce39a31ecd4dcf9c5bf83366f9f4a38ee405d1399aefc6",
                "integrity": "sha256-oQr+pUDqjEEvrwI9RUsQUwQGTQ0eiiaQt3+Q9WuT30Q="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "validation.uk-postcode": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-S9wu1kqMe1c4h3Z2QpOPZbNopFb5oweVJArqYNhwOXk=",
          "summary": "Validate a UK postcode and normalise it to canonical upper case with one space before the inward code.",
          "level": 2,
          "tags": [
            "validation",
            "postcode",
            "uk",
            "gb",
            "address",
            "royal-mail",
            "normalisation"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "validation.uk-postcode-1.0.0.fune",
            "size": 24130,
            "sha256": "fc3e50b998f9065970ff5105dff00793c5a3284e5330da76cbb20a320751e3cf",
            "languages": {
              "typescript": {
                "name": "validation.uk-postcode-1.0.0-typescript.fune",
                "size": 13850,
                "sha256": "cf8ca111ccd9619931ed482e9ca2c2e05d679d9e094075844731db12d704f4a8",
                "integrity": "sha256-wCurlA4jsqP31JRh0+DQiL2UiDiodhS/rllrhmcWRic="
              },
              "python": {
                "name": "validation.uk-postcode-1.0.0-python.fune",
                "size": 13815,
                "sha256": "980a81e3f3db042701a2585aca864b8b04ce25ef5068bcf6b29d3aadabd13721",
                "integrity": "sha256-9VurffxauVGbStTrg7G9oJcX/3r0ZzgN/M7lctV+EsY="
              },
              "rust": {
                "name": "validation.uk-postcode-1.0.0-rust.fune",
                "size": 15167,
                "sha256": "b94a12594959991c0c08f42a1d26977c8f1d038201c1a5fdb9284281414d8cdc",
                "integrity": "sha256-C9EDubiQ6Yzg1fD5O2D30O9NoZCc35z1R7GJDkCtL8s="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "2.0.0": {
          "integrity": "sha256-nohZPvmI/fGso5IePu8z+4PiRw6tCuLt43AlkYgj5do=",
          "summary": "Validate a UK postcode and normalise it to canonical upper case with one space before the inward code.",
          "level": 2,
          "tags": [
            "validation",
            "postcode",
            "uk",
            "gb",
            "address",
            "royal-mail",
            "normalisation"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "validation.uk-postcode-2.0.0.fune",
            "size": 24508,
            "sha256": "647091250dc23f8ef1175a6802294d5d573a21c5b6adf039649845ee87df8634",
            "languages": {
              "typescript": {
                "name": "validation.uk-postcode-2.0.0-typescript.fune",
                "size": 14183,
                "sha256": "3a5bd66cb86f331f072708180e913d4c9478c0976828f7493d317d29372fce44",
                "integrity": "sha256-hSALoko7OHptq+kMgOHgwYIYdDbFOniUPZnt+EwQvB8="
              },
              "python": {
                "name": "validation.uk-postcode-2.0.0-python.fune",
                "size": 14150,
                "sha256": "3828ccf77627a9b2909e1fa2d7febd04451c253aa698a90b9521d6168645418e",
                "integrity": "sha256-mwDWs0/EPRqXrXwgYKdEV5PVJW8ItQ0MDRgVJarEcos="
              },
              "rust": {
                "name": "validation.uk-postcode-2.0.0-rust.fune",
                "size": 15511,
                "sha256": "3ad410a9f1597f16bf71de8369196ea6db1e02de37b5267a02fd1f8b25bb244e",
                "integrity": "sha256-IUQAklpG784nmBFSWaNNh5rMa9+8hrM+wYK9/6dRS8U="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "validation.uk-sort-code-account": {
      "versions": {
        "3.0.0": {
          "integrity": "sha256-Sl6Z4lKTn72fDH952IjgG8LMS6m1epkFUX0QFfQ/mbs=",
          "summary": "Check a UK sort code and account number with the Vocalink/Pay.UK modulus rules, against a table you supply.",
          "level": 1,
          "tags": [
            "validation",
            "sort-code",
            "account-number",
            "bank",
            "uk",
            "gb",
            "modulus",
            "bacs",
            "vocalink"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {
            "validation.uk-modulus-table": "^1.0.0"
          },
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "validation.uk-sort-code-account-3.0.0.fune",
            "size": 68924,
            "sha256": "636ab9cf79494aeb1d6f17d59ab4a5237bae07a8fbabfc3a1c29c5faf45e00e7",
            "languages": {
              "typescript": {
                "name": "validation.uk-sort-code-account-3.0.0-typescript.fune",
                "size": 50136,
                "sha256": "57ebb97e8a77bc9205c867129af60c41f59bce0c51703ed05b18ea79a5f520f6",
                "integrity": "sha256-yCqcdXQ72yOZASQgstqugJCJ/5Ixh6WTviCkWJnmehg="
              },
              "python": {
                "name": "validation.uk-sort-code-account-3.0.0-python.fune",
                "size": 50201,
                "sha256": "97d77b128484e0dff5337da64de3eaaa262ff6dbab35fc5b0dded9f8f2db6c7d",
                "integrity": "sha256-sLwLAQvI5re1Xz6Tal1oC36ea5582FSgodBRZz9YUfU="
              },
              "rust": {
                "name": "validation.uk-sort-code-account-3.0.0-rust.fune",
                "size": 52117,
                "sha256": "95e73615b85ba29d5f5a6f69792f8f650c4e6b95ebf600d81d068a682a4d7059",
                "integrity": "sha256-xQUvA3/4w23u762mmivnnsGO6DyThOxuSxOUu+Sa7gU="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "validation.uk-utr": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-ScsusGhTGp5OnUxkBr637RCw9tbdvOlDGAFt0PcGEfE=",
          "summary": "Check an HMRC Unique Taxpayer Reference's modulus 11 check digit, accepting the K and spacing people type.",
          "level": 0,
          "tags": [
            "validation",
            "utr",
            "unique-taxpayer-reference",
            "hmrc",
            "self-assessment",
            "corporation-tax",
            "checksum",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "validation.uk-utr-1.0.0.fune",
            "size": 14481,
            "sha256": "49c2fc6b4d93787cc970b824c98ba5b024576f4e8a846e7d140cc26cb02c367c",
            "languages": {
              "typescript": {
                "name": "validation.uk-utr-1.0.0-typescript.fune",
                "size": 9474,
                "sha256": "99d86fd27bd282df943075ada91e43ce1cb993991440a89ab06452b8ec974dd7",
                "integrity": "sha256-ZwrJ7BIr6XytytHJjmJo98Z9bRTr/gsBMHBCkHrbqcE="
              },
              "python": {
                "name": "validation.uk-utr-1.0.0-python.fune",
                "size": 9400,
                "sha256": "123f7b12ff13009c7a038f544d26498339f292a4d1d9dc0ee09c21aeedc1aa1b",
                "integrity": "sha256-aOv5AKEKTbqLqi7rLi4nRQodnG5NvwmjK7dhWnpGuDA="
              },
              "rust": {
                "name": "validation.uk-utr-1.0.0-rust.fune",
                "size": 10353,
                "sha256": "db2c755b7cbd4e7c3fc2e4ac452971920fee86d9b341c8f128b9c9333b6136b1",
                "integrity": "sha256-+gRf7zPxOj+2Zw1ivjfPgnCx2USWqukP6cK6bXITo6E="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "2.0.0": {
          "integrity": "sha256-6GiUsBps+X8sRO2NiifR1VFW6ClhogbWAco47atzvh4=",
          "summary": "Check an HMRC Unique Taxpayer Reference's modulus 11 check digit, accepting the K and spacing people type.",
          "level": 0,
          "tags": [
            "validation",
            "utr",
            "unique-taxpayer-reference",
            "hmrc",
            "self-assessment",
            "corporation-tax",
            "checksum",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "validation.uk-utr-2.0.0.fune",
            "size": 14818,
            "sha256": "f866c1a37886789ae2812344db45fc881ddf574927be7389c4fc7aa24e409948",
            "languages": {
              "typescript": {
                "name": "validation.uk-utr-2.0.0-typescript.fune",
                "size": 9784,
                "sha256": "1fbdf3402e37bccb0876a202a63f296fcabaac64e1614682c37f9fa9236b73f0",
                "integrity": "sha256-WR9RcIjC4Ts3M0h5f63Ftfthgzlg4wlQ24DUI73s9lo="
              },
              "python": {
                "name": "validation.uk-utr-2.0.0-python.fune",
                "size": 9711,
                "sha256": "594f67310794ecc05eac984a3a3ee829727040773d3c764309607cf340b2bfd7",
                "integrity": "sha256-/+/Yk5MuWQ2NwJnGbkqTfGSvWs30wi07IUqA5sw14jc="
              },
              "rust": {
                "name": "validation.uk-utr-2.0.0-rust.fune",
                "size": 10673,
                "sha256": "1b53684f901f46c9a036c36eceab339a067ccfd29b2a510b13df990075c7665a",
                "integrity": "sha256-M1h2STrcBncVpFkMbdaVuWZKlFv4uv5LyANey24scf8="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        },
        "2.0.1": {
          "integrity": "sha256-9sWslBXB7oWUOHc6Laa9QBtndmU2jhBegGFDg7KV+7w=",
          "summary": "Check an HMRC Unique Taxpayer Reference's modulus 11 check digit, accepting the K and spacing people type.",
          "level": 0,
          "tags": [
            "validation",
            "utr",
            "unique-taxpayer-reference",
            "hmrc",
            "self-assessment",
            "corporation-tax",
            "checksum",
            "uk"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "NOTICE",
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "validation.uk-utr-2.0.1.fune",
            "size": 15621,
            "sha256": "e5dd2f390ffd7aa5941f98bbbec6482e0408926ba489ebfb849fb1f8d16a147f",
            "languages": {
              "typescript": {
                "name": "validation.uk-utr-2.0.1-typescript.fune",
                "size": 10587,
                "sha256": "e7764f490f70e5551bde98dfadf10b4a71eabbf063f97e0c77e14056bcf13c17",
                "integrity": "sha256-1bPwQTGQTXSmodQ7ssirESTi68bb8Nyj+B15kuRwneg="
              },
              "python": {
                "name": "validation.uk-utr-2.0.1-python.fune",
                "size": 10514,
                "sha256": "eb9e36c76d2577c9b4795d79b52cd2da0e2650972f7d600cc8560ccac261a73b",
                "integrity": "sha256-qd1ICqtkL2C12YyoHr5HSW137/dx26rdekAttD6bnXI="
              },
              "rust": {
                "name": "validation.uk-utr-2.0.1-rust.fune",
                "size": 11476,
                "sha256": "26ec1b3b49f3f82585244c911110fc47b50327b5added911f5352f243ad19858",
                "integrity": "sha256-qCIM2ab7jR4ps1/XcgRlxAJOOXo91GdOfyVy+oXWr8I="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "validation.uk-vat-number": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-MJ+S0YyNojtESEbhjmcGwc283mPBRT1fW7GfAijdyDU=",
          "summary": "Check a UK VAT registration number against HMRC's mod-97 checksum, including the post-2010 9755 variant.",
          "level": 2,
          "tags": [
            "validation",
            "vat",
            "uk",
            "gb",
            "hmrc",
            "checksum",
            "mod97",
            "tax"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "validation.uk-vat-number-1.0.0.fune",
            "size": 18619,
            "sha256": "d1a950461b5bbdba2866ab53c031bf097fcc1483dfc4827b44e4930675b2d4da",
            "languages": {
              "typescript": {
                "name": "validation.uk-vat-number-1.0.0-typescript.fune",
                "size": 10603,
                "sha256": "b657c7a2eb13fd4d468434e1d6a5071ab371b2628e814041e8ff5edccc2b823d",
                "integrity": "sha256-C+6Fl+DetyVz+Xrlh/dsUBvj97mQq5h+xfeChLGv+zM="
              },
              "python": {
                "name": "validation.uk-vat-number-1.0.0-python.fune",
                "size": 10328,
                "sha256": "2df228d87aa5d6fc78c87d25700341fa124a84c2e8fa4886da8d3264acd4406e",
                "integrity": "sha256-8laZy9rFAXZ4FZunH8UPR8pwj5K3XLAK4KqXxmwIbrA="
              },
              "rust": {
                "name": "validation.uk-vat-number-1.0.0-rust.fune",
                "size": 10774,
                "sha256": "7cf81dca8d6418f95f44055af5c06874b8123e7e37843a697441f5fd6a77265f",
                "integrity": "sha256-ovlW6diXykUs1C9ekCylyGB+JAysHPDSlMH21nLEvsc="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    },
    "validation.vin": {
      "versions": {
        "1.0.0": {
          "integrity": "sha256-ko/EJKSxgTbDgwDpOr99t7BGmO//WBLUhfp2S7TDMVE=",
          "summary": "Check a 17-character vehicle identification number and its check digit; enforced for North American VINs.",
          "level": 0,
          "tags": [
            "validation",
            "vin",
            "vehicle",
            "chassis",
            "car",
            "iso3779",
            "check-digit",
            "dvla"
          ],
          "languages": [
            "python",
            "rust",
            "typescript"
          ],
          "dependencies": {},
          "files": [
            "README.md",
            "impl/python.py",
            "impl/rust.rs",
            "impl/typescript.ts",
            "vectors.json"
          ],
          "package": {
            "name": "validation.vin-1.0.0.fune",
            "size": 17748,
            "sha256": "310dc9072c78fe16ddf0e7f98d75b9535b807ba32c97aed2874a45be9b7b36c6",
            "languages": {
              "typescript": {
                "name": "validation.vin-1.0.0-typescript.fune",
                "size": 11689,
                "sha256": "51ce837d4c572f4b428ce0c00866fb000495533391e025b99eddc6897a472a77",
                "integrity": "sha256-kDlCCje4ZycefTdlx5Zi7Yuil3ym+/wUm1eFpfCqke4="
              },
              "python": {
                "name": "validation.vin-1.0.0-python.fune",
                "size": 11545,
                "sha256": "b0b54edc35ad39491a60811311505ca873c5cc126b32a9e33b872a73c8b0830a",
                "integrity": "sha256-FxQng4VFIIRGghyv6/yBACjefbxrF6FbihoSqdM7ZUA="
              },
              "rust": {
                "name": "validation.vin-1.0.0-rust.fune",
                "size": 12794,
                "sha256": "47fa479773bdf6780cf201a7dddc663834449ebb9cc2a45d792aa57280c17f58",
                "integrity": "sha256-NmlisFRBgO9bUwtcCp1fzYOhO5PS6lw6yL0hboRSyqQ="
              }
            }
          },
          "status": "stable",
          "license": "NOASSERTION"
        }
      }
    }
  }
}
