diff --git a/.github/workflows/unittest.yaml b/.github/workflows/unittest.yaml new file mode 100644 index 0000000..42c7775 --- /dev/null +++ b/.github/workflows/unittest.yaml @@ -0,0 +1,38 @@ +name: Run Unittests + +on: + pull_request: + branches: + - main + push: + branches: + - main + +jobs: + test: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: '3.10' + + - name: Install Poetry + run: | + curl -sSL https://install.python-poetry.org | python3 - + export PATH="$HOME/.local/bin:$PATH" + poetry --version + + - name: Install dependencies + run: | + export PATH="$HOME/.local/bin:$PATH" + poetry install + + - name: Run tests with pytest + run: | + export PATH="$HOME/.local/bin:$PATH" + poetry run pytest tests diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 3911443..e084f3e 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -9,20 +9,20 @@ repos: args: [--allow-multiple-documents] exclude: "conda.recipe/meta.yaml" - id: end-of-file-fixer - exclude: "nucDataLibs/.*" + exclude: "tests/data/.*" - id: trailing-whitespace - exclude: "nucDataLibs/.*" + exclude: "tests/data/.*" - repo: https://github.com/astral-sh/ruff-pre-commit rev: v0.7.3 hooks: - id: ruff args: [--fix, --exit-non-zero-on-fix] - exclude: "nucDataLibs/.*" + exclude: "(tests/data/.*|legacy/.*)" - id: ruff-format - exclude: "nucDataLibs/.*" + exclude: "(tests/data/.*|legacy/.*)" - repo: https://github.com/codespell-project/codespell rev: v2.3.0 hooks: - id: codespell - exclude: "(nucDataLibs/.*|.*\\.ipynb)|poetry.lock" + exclude: "(tests/data/.*|.*\\.ipynb)|poetry.lock" args: ["--ignore-words-list=DELTE"] diff --git a/docs/development/architecture_v1.md b/docs/development/architecture_v1.md new file mode 100644 index 0000000..c524c35 --- /dev/null +++ b/docs/development/architecture_v1.md @@ -0,0 +1,190 @@ +# PLEIADES Architecture Documentation + +This document is the design document for PLEIADES(v1), followed by suggestions on refactoring and enhancements. + +## Overview + +PLEIADES is a computational platform designed for neutron resonance analysis, with a focus on SAMMY integration and workflow management. The architecture follows a layered design with clear separation between configuration, execution, and analysis components. + +## System Architecture + +The system is divided into four main layers: + +1. **Core Layer**: Core configuration management and nuclear data access +1. **Processing Layer**: Workflow orchestration and input generation +1. **Execution Layer**: SAMMY execution and parameter management +1. **Analysis Layer**: Results parsing and visualization + +```mermaid +graph TD + User[User Script] --> |"Configure"| SammyUtils + User --> |"Visualize"| SammyPlotter + + subgraph Core["Core Layer"] + SammyStructures["sammyStructures.py
Configuration Management"] + NucData["nucData.py
Nuclear Data Access"] + end + + subgraph Processing["Processing Layer"] + SammyUtils["sammyUtils.py
Orchestration"] --> SammyStructures + SammyUtils --> NucData + SammyInput["sammyInput.py
Input Generation"] --> NucData + SammyParFile["sammyParFile.py
Parameter Management"] --> NucData + end + + subgraph Execution["Execution Layer"] + SammyRunner["sammyRunner.py
SAMMY Integration"] + SammyUtils --> SammyRunner + SammyRunner --> SammyInput + SammyRunner --> SammyParFile + end + + subgraph Analysis["Analysis Layer"] + SammyOutput["sammyOutput.py
Results Parser"] + SammyPlotter["sammyPlotter.py
Visualization"] + SammyOutput --> SammyPlotter + SammyRunner --> SammyOutput + end +``` + +## Module Details + +| Module | Key Components | Complexity | Summary | +|--------|---------------|------------|----------| +| sammyStructures.py | `SammyFitConfig`, `sammyRunConfig` | High | Core configuration management system handling parameter storage, validation, and directory structures | +| nucData.py | `get_mass_from_ame()`, `extract_isotope_info()`, `get_info()` | Medium | Nuclear data access layer providing isotope information and atomic mass calculations | +| sammyUtils.py | `create_parFile_from_endf()`, `configure_sammy_run()`, `run_sammy()` | High | High-level orchestrator managing workflow and coordinating between modules | +| sammyRunner.py | `run_sammy_fit()`, `check_sammy_environment()` | Medium | SAMMY execution manager handling both local and Docker environments | +| sammyInput.py | `InputFile` class | Medium | SAMMY input file generator with format-specific handlers | +| sammyParFile.py | `ParFile`, `Update` classes | High | Parameter file manager supporting complex operations on SAMMY par files | +| sammyOutput.py | `lptResults` class | Medium | Output parser extracting fit results from SAMMY output files | +| sammyPlotter.py | `process_and_plot_lst_file()` | Low | Visualization tools for SAMMY results | +| simData.py | `create_transmission()`, `Isotope` class | Low | Simulation support for transmission data | + +## Example Workflow + +The following example demonstrates a typical workflow using PLEIADES for SAMMY analysis: + +```python +# 1. Configuration Setup +from pleiades import sammyUtils, sammyPlotter +config = sammyUtils.SammyFitConfig("uranium.ini") + +# 2. Generate Parameter Files +sammyUtils.create_parFile_from_endf(config, verbose_level=1) + +# 3. Configure SAMMY Run +sammy_run = sammyUtils.configure_sammy_run(config, verbose_level=1) + +# 4. Execute SAMMY Fit +sammyUtils.run_sammy(config, verbose_level=1) + +# 5. Analyze Results +sammyPlotter.process_and_plot_lst_file( + f"{config.params['directories']['sammy_fit_dir']}/results/SAMMY.LST", + residual=True, + quantity="transmission" +) + +# Optional: Iterative Refinement +# Update isotopes/parameters and rerun +config.params["isotopes"]["names"].append("Ta-181") +config.params["isotopes"]["abundances"].append(0.01) +sammy_run = sammyUtils.configure_sammy_run(config, verbose_level=1) +``` + +Key Workflow Steps: + +1. Initialize configuration from `INI` file +2. Generate parameter files from `ENDF` data +3. Configure SAMMY run environment +4. Execute SAMMY fit +5. Analyze and visualize results +6. [Optional] Iterate with parameter refinements + +The system supports both simple workflows and complex scenarios involving multiple isotopes and iterative refinement of fits. + +## Opportunities for Enhancement + +### Core Considerations + +1. **SAMMY Integration Requirements** + - The existing codebase effectively handles SAMMY's fixed-width format requirements + - This core functionality must be preserved during any refactoring + - Format definitions and card structures are essential and cannot be simplified + +1. **Class Organization** + - The `ParFile` and `InputFile` classes successfully manage complex SAMMY requirements + - Could benefit from internal reorganization while maintaining external interfaces + - Consider using composition for different card types while keeping format compliance + + ```python + # Current approach works but could be reorganized internally + class ParFile: + def __init__(self): + self._SPIN_GROUP_FORMAT = {...} # Essential format definition + self._CHANNEL_RADII_FORMAT = {...} + ``` + +### Implementation Opportunities + +1. **Type System Enhancement** + - Adding type hints could improve code maintainability + - Would help new developers understand data structures better + + ```python + # Potential enhancement while maintaining functionality + def parse_spin_group(self, data: SpinGroupData) -> SpinGroupCard: + """Parse spin group data into SAMMY-compliant format""" + ``` + +1. **File Handling Consistency** + - Consider standardizing on `pathlib` for path operations + - Maintain robust file handling while improving consistency + + ```python + # Standardize on pathlib while keeping functionality + symlink_path = pathlib.Path(fit_dir) / "res_endf8.endf" + ``` + +1. **Input Validation** + - Could consolidate validation while maintaining format requirements + - Early validation would help users identify issues sooner + +### Testing and Documentation + +1. **Test Coverage** + - Add unit tests to ensure format compliance + - Create test fixtures for common SAMMY input scenarios + - Validate output formats match SAMMY requirements + +1. **Documentation Enhancement** + - Expand docstrings for complex format handling + - Add examples of correct SAMMY input generation + - Document format requirements clearly + +### Performance Considerations + +1. **Resource Management** + - Review file handling patterns + - Consider streaming for large files where possible + + ```python + # Potential enhancement for large files + def process_large_file(self, filename: Path) -> Iterator[str]: + with filename.open() as f: + for line in f: + yield self.process_line(line) + ``` + +### Future Development Opportunities + +1. **Module Organization** + - Consider grouping related SAMMY format handlers + - Maintain format compliance while improving code organization + +1. **Error Handling** + - Enhance error messages for format-related issues + - Help users understand SAMMY's requirements better + +The original implementation effectively manages SAMMY's complex requirements. These suggestions aim to build upon that foundation while maintaining full compatibility with SAMMY's fixed-width format requirements. diff --git a/docs/development/architecture_v2.md b/docs/development/architecture_v2.md new file mode 100644 index 0000000..b04a85c --- /dev/null +++ b/docs/development/architecture_v2.md @@ -0,0 +1,238 @@ +# PLEIADES Refactoring Design Document + +## Background + +PLEIADES is a library that help users prepare input files to use with SAMMY, a nuclear simulation software. +The current implementation of PLEIADES is functional, but facing the following challenges: + +1. Tight Coupling: Core components are tightly coupled, making it difficult to modify one component without affecting others. +1. Complex File Handling: Parameter file management spreads across multiple modules with duplicated logic. +1. Error Handling: Inconsistent error handling patterns across modules. +1. Type Safety: Lack of type hints makes code harder to maintain and more prone to runtime errors. +1. Testing Complexity: Tightly coupled components make unit testing difficult + +## Refactoring Goals + +1. Modular Architecture + + - Clear separation of concerns between components + - Decoupled interfaces between modules + - Composition-based design for parameter file handling + +1. Enhanced Backend Support + + - Abstract SAMMY execution interface + - Support for local, Docker, and NOVA backends + - Extensible design for future backend additions + +1. Robust Data Management + + - Centralized nuclear data access + - Type-safe data models (via Pydantic) + - Efficient caching mechanisms + +1. Improved Error Handling + + - vConsistent error handling patterns + - Clear error hierarchies + - Descriptive error messages + +1. Type Safety and Validation + + - Comprehensive type hints + - Runtime validation using Pydantic models + - Format validation for SAMMY inputs + +1. Testability + + - Unit testable components + - Clear interfaces for mocking + - Comprehensive test coverage + +## System Architecture + +**Proposed** Architecture (left) vs. **Original** Architecture (right): + +```mermaid +graph TD + %% Define the nodes and connections + subgraph "Original Architecture" + User1[User Script] --> |"Configure"| SammyUtils1 + User1 --> |"Visualize"| SammyPlotter1 + + subgraph "Core" + SammyStructures1["sammyStructures.py
Configuration"] + NucData1["nucData.py
Nuclear Data"] + end + + subgraph "Processing" + SammyUtils1["sammyUtils.py"] --> SammyStructures1 + SammyUtils1 --> NucData1 + SammyInput1["sammyInput.py"] --> NucData1 + SammyParFile1["sammyParFile.py"] --> NucData1 + end + + subgraph "Execution" + SammyRunner1["sammyRunner.py"] + SammyUtils1 --> SammyRunner1 + SammyRunner1 --> SammyInput1 + SammyRunner1 --> SammyParFile1 + end + + subgraph "Analysis" + SammyOutput1["sammyOutput.py"] + SammyPlotter1["sammyPlotter.py"] + SammyRunner1 --> SammyOutput1 + SammyOutput1 --> SammyPlotter1 + end + end + + subgraph "Refactored Architecture" + User2[User Script] --> |"Configure"| Core2 + User2 --> |"Execute"| SammyManager2 + + subgraph "Core Layer" + Core2["Core Manager"] --> DataManager2 + Core2 --> Models2 + DataManager2["Nuclear Data Manager"] + Models2["Domain Models"] + end + + subgraph "SAMMY Layer" + SammyManager2["SAMMY Manager"] --> Factory2 + Factory2["Backend Factory"] --> Backends2 + Backends2["Backend Interface"] + SammyManager2 --> ParFile2 + ParFile2["Parameter File Manager"] --> Cards2 + Cards2["Card Components"] + SammyManager2 --> InpFile2["Input File Manager"] + InpFile2 --> Cards2["Card Components"] + InpFile2 --> Commands2["Command Components"] + SammyManager2 --> DatFile2["Data File Manager"] + end + + subgraph "Backend Implementations" + Backends2 --> Local2["Local Runner"] + Backends2 --> Docker2["Docker Runner"] + Backends2 --> Nova2["NOVA Runner"] + end + + subgraph "Output Layer" + SammyManager2 --> OutputManager2 + OutputManager2["Output Manager"] + OutputManager2 --> Analysis2["Analysis"] + OutputManager2 --> Plotting2["Plotting"] + end + end + + %% Add styling for "Original Architecture" + classDef originalStyle fill:#F3E5AB,stroke:#6B4226,stroke-width:2px; + class User1,SammyUtils1,SammyPlotter1,SammyStructures1,NucData1,SammyInput1,SammyParFile1,SammyRunner1,SammyOutput1 originalStyle; + + %% Add styling for "Refactored Architecture" + classDef refactoredStyle fill:#D5F3FE,stroke:#1E88E5,stroke-width:2px; + class User2,Core2,SammyManager2,DataManager2,Models2,Factory2,Backends2,ParFile2,InpFile2,DatFile2,Cards2,Commands2,Local2,Docker2,Nova2,OutputManager2,Analysis2,Plotting2 refactoredStyle; +``` + +Key architectural decisions: + +1. Core Layer Consolidation + + - Centralized data management through DataManager replaces scattered nuclear data access + - Type-safe domain models using `Pydantic` for consistency and validation + - Clear separation between data access and business logic + - Improved caching and error handling for nuclear data operations + +1. SAMMY Layer Modularization + + - Complete separation of three key file types: + - Parameter file (.par) - resonance parameters and physical constants + - Input file (.inp) - execution control and commands + - Data file (.dat) - experimental data + - Each file type managed by dedicated components: + - Parameter File Manager with modular card components + - Input File Manager with commands and card components + - Data File Manager for transmission/cross-section data + - Backend abstraction using Factory pattern for flexible execution + +1. File Generation Components + + - Card Components: Reusable building blocks for both parameter and input files + - Strong typing for each card type + - Validation rules enforced through models + - Fixed-width format handling utilities + - Command Components: Specialized for input file generation + - Consistent command formatting + - Validation of command combinations + - Default configurations + +1. Backend System Enhancement + + - Abstract Backend Interface allowing multiple implementations + - Three supported execution methods: + - Local SAMMY installation + - Docker containerization + - NOVA web service integration + - Runtime backend selection and validation + - Environment-aware configuration + - Consistent error handling across backends + +1. Output Processing Improvements + + - Complete decoupling of execution and analysis + - Unified output collection interface + - Flexible analysis pipeline + - Modular visualization components + - Format conversion utilities + +1. Cross-Cutting Improvements + + - Comprehensive error hierarchies + - Consistent logging patterns + - Configuration validation + - Type safety throughout + - Unit test support + +## Refactoring Guidelines + +Core Development Principles + +1. Type Safety + - Implement comprehensive type hints for all functions and classes + - Enforce type checking during development and CI + +1. Data Models + - Use `Pydantic` (v2) for data container classes and validation + - Define clear data structures for nuclear physics quantities + - Validate data at system boundaries + +1. Error Handling + - Define module-specific exception hierarchies + - Provide physics-relevant error messages + - Handle errors at appropriate abstraction levels + +1. Module Design + - Each module serves single, well-defined purpose + - Clear interfaces between components + - Minimize inter-module dependencies + - Prefer composition over inheritance + - Provide example usage in module docstrings or the `__main__` block. + +1. Testing + - Unit tests required for all new modules + - Test physics edge cases and error conditions + - Mock external dependencies (SAMMY, filesystem) + - Maintain test coverage targets + +### Implementation Process + +1. Review original module functionality +1. Design new module interface and data structures +1. Implement core features with type safety and validation +1. Add comprehensive unit tests +1. Migrate dependent code gradually +1. Document new interfaces and behaviors + +### Reference Implementations + +When in doubt, refer to the completed modules for guidance. diff --git a/examples/configFiles/nat_europium.ini b/examples/configFiles/nat_europium.ini deleted file mode 100644 index 494089c..0000000 --- a/examples/configFiles/nat_europium.ini +++ /dev/null @@ -1,81 +0,0 @@ -[main] -run_with_endf = false -fit_energy_min = 0.1 -fit_energy_max = 29.0 -flight_path_length = 14.96 -fudge_factor = 1.0 - -[directories] -working_dir = "" -user_defined = false -image_dir = "images" -data_dir = "../data" -archive_dir = ".archive" -sammy_fit_dir = "natEu" -endf_dir = "endf" -fir_results = "fit_results" - -[filenames] -data_file_name = 'natEu.twenty' -input_file_name = 'input.inp' -params_file_name = 'params.par' - -[isotopes] -names = Eu-151,Eu-153 -abundances = 0.7,0.99 -vary_abundances = true,true - -[broadening] -thickness = 9.5e-4 -vary_thickness = true -temperature = 2966 -vary_temperature = false -flight_path_spread = 0.001 -vary_flight_path_spread = false -deltag_fwhm = 0.001 -vary_deltag_fwhm = false -deltae_us = 0.001006 -vary_deltae_us = false - -[normalization] -normalization = 1.0 -vary_normalization = false -constant_bg = 0.0001 -vary_constant_bg = false -one_over_v_bg = 0.0001 -vary_one_over_v_bg = false -sqrt_energy_bg = 0.0001 -vary_sqrt_energy_bg = false -exponential_bg = 0.0 -vary_exponential_bg = false -exp_decay_bg = 0.0 -vary_exp_decay_bg = false - -[tzero] -t0 = 1.1875 -vary_t0 = false -L0 = 0.988967 -vary_L0 = false - -[delta_L] -delta_L1 = -0.004762 -delta_L1_err = -vary_delta_L1 = false -delta_L0 = 0.092731 -delta_L0_err = -vary_delta_L0 = false - -[delta_E] -DE = 0.20044 -DE_err = -vary_DE = false -D0 = 13.618 -D0_err = -vary_D0 = false -DlnE = -5.0151 -DlnE_err = -vary_DlnE = false - -[resonances] -resonance_energy_min = 0.1 -resonance_energy_max = 100.0 diff --git a/examples/configFiles/simTransmissionConfig.ini b/examples/configFiles/simTransmissionConfig.ini deleted file mode 100644 index 17085ff..0000000 --- a/examples/configFiles/simTransmissionConfig.ini +++ /dev/null @@ -1,29 +0,0 @@ -[Isotope1] -name = U-238 -thickness = 0.01 -thickness_unit = cm -abundance = 1 -xs_file_location = /PATH/TO/PLEIADES/nucDataLibs/xSections/u-n.tot -density = 19.1 -density_unit = g/cm3 -ignore = false - -[Isotope2] -name = U-235 -thickness = 0.02 -thickness_unit = cm -abundance = 1 -xs_file_location = /PATH/TO/PLEIADES/nucDataLibs/xSections/u-n.tot -density = 19.1 -density_unit = g/cm3 -ignore = false - -[Isotope3] -name = Ta-181 -thickness = 0.02 -thickness_unit = cm -abundance = 1 -xs_file_location = /PATH/TO/PLEIADES/nucDataLibs/xSections/ta-n.tot -density = 16.65 -density_unit = g/cm3 -ignore = false diff --git a/examples/configFiles/uranium.ini b/examples/configFiles/uranium.ini deleted file mode 100644 index 12ad4c8..0000000 --- a/examples/configFiles/uranium.ini +++ /dev/null @@ -1,85 +0,0 @@ -[main] -sammy_run_method = "docker" -sammy_command = "sammy-docker" -sammy_fit_name = "uranium-fit" -run_endf_for_par = true -use_endf_par_file = true -fit_energy_min = 1 -fit_energy_max = 100.0 -flight_path_length = 14.96 -fudge_factor = 1.0 - -[directories] -working_dir = "./analysis" -user_defined = false -image_dir = "images" -data_dir = "../data" -archive_dir = ".archive" -sammy_fit_dir = "u235-u238" -endf_dir = "endf" -fit_results_dir = "results" - -[filenames] -data_file_name = 'u235-u238.twenty' -input_file_name = 'input.inp' -params_file_name = 'params.par' - -[isotopes] -names = U-235,U-238 -abundances = 0.01,0.01 -vary_abundances = true,true - -[broadening] -thickness = 1.0 -vary_thickness = true -temperature = 2966 -vary_temperature = false -flight_path_spread = 0.0 -vary_flight_path_spread = false -deltag_fwhm = 0.0 -vary_deltag_fwhm = false -deltae_us = 0.00 -vary_deltae_us = false - -[normalization] -normalization = 1.0 -vary_normalization = false -constant_bg = 0.00 -vary_constant_bg = false -one_over_v_bg = 0.00 -vary_one_over_v_bg = false -sqrt_energy_bg = 0.00 -vary_sqrt_energy_bg = false -exponential_bg = 0.0 -vary_exponential_bg = false -exp_decay_bg = 0.0 -vary_exp_decay_bg = false - -[tzero] -t0 = 1.1875 -vary_t0 = false -L0 = 0.988967 -vary_L0 = false - -[delta_L] -delta_L1 = -0.004762 -delta_L1_err = -vary_delta_L1 = false -delta_L0 = 0.092731 -delta_L0_err = -vary_delta_L0 = false - -[delta_E] -DE = 0.20044 -DE_err = -vary_DE = false -D0 = 13.618 -D0_err = -vary_D0 = false -DlnE = -5.0151 -DlnE_err = -vary_DlnE = false - -[resonances] -resonance_energy_min = 0.1 -resonance_energy_max = 100.0 diff --git a/examples/data/natEu.twenty b/examples/data/natEu.twenty deleted file mode 100644 index 7e9c3eb..0000000 --- a/examples/data/natEu.twenty +++ /dev/null @@ -1,2618 +0,0 @@ - 0.0100384000 0.0124021000 0.0016089100 - 0.0100873000 0.0092289900 0.0014453700 - 0.0101366000 0.0113757000 0.0015378700 - 0.0101862000 0.0115490000 0.0015481200 - 0.0102362000 0.0109497000 0.0014860100 - 0.0102865000 0.0125182000 0.0015527200 - 0.0103372000 0.0097647800 0.0013978800 - 0.0103883000 0.0125837000 0.0015446700 - 0.0104398000 0.0097960800 0.0013770400 - 0.0104917000 0.0139567000 0.0015736700 - 0.0105439000 0.0130358000 0.0015259500 - 0.0105965000 0.0135223000 0.0015353000 - 0.0106496000 0.0127577000 0.0014827500 - 0.0107030000 0.0122016000 0.0014465400 - 0.0107568000 0.0113277000 0.0013834400 - 0.0108111000 0.0138744000 0.0014957900 - 0.0108657000 0.0132085000 0.0014554300 - 0.0109208000 0.0127671000 0.0014178800 - 0.0109763000 0.0166236000 0.0015632300 - 0.0110322000 0.0139894000 0.0014505800 - 0.0110885000 0.0171604000 0.0015682400 - 0.0111453000 0.0148479000 0.0014619500 - 0.0112025000 0.0168808000 0.0015167000 - 0.0112602000 0.0136958000 0.0013706100 - 0.0113182000 0.0141931000 0.0013816100 - 0.0113768000 0.0154519000 0.0014193700 - 0.0114358000 0.0154123000 0.0014158700 - 0.0114953000 0.0145636000 0.0013592900 - 0.0115552000 0.0178614000 0.0014664300 - 0.0116156000 0.0162545000 0.0013970500 - 0.0116765000 0.0148516000 0.0013391900 - 0.0117378000 0.0167599000 0.0013959700 - 0.0117996000 0.0159145000 0.0013439900 - 0.0118620000 0.0187224000 0.0014265800 - 0.0119248000 0.0172020000 0.0013740500 - 0.0119881000 0.0151172000 0.0012827000 - 0.0120519000 0.0185136000 0.0013912500 - 0.0121163000 0.0157758000 0.0012839200 - 0.0121811000 0.0179785000 0.0013457700 - 0.0122465000 0.0170340000 0.0013143100 - 0.0123124000 0.0192876000 0.0013773500 - 0.0123789000 0.0198782000 0.0013768500 - 0.0124458000 0.0220229000 0.0014289000 - 0.0125134000 0.0202494000 0.0013664000 - 0.0125814000 0.0209589000 0.0013663100 - 0.0126501000 0.0195005000 0.0013086800 - 0.0127193000 0.0190792000 0.0012937000 - 0.0127890000 0.0219310000 0.0013628200 - 0.0128594000 0.0219470000 0.0013530500 - 0.0129303000 0.0218978000 0.0013463000 - 0.0130018000 0.0220466000 0.0013405700 - 0.0130739000 0.0218112000 0.0013326300 - 0.0131466000 0.0222460000 0.0013351900 - 0.0132199000 0.0242942000 0.0013929200 - 0.0132938000 0.0219568000 0.0013196800 - 0.0133684000 0.0239729000 0.0013767500 - 0.0134436000 0.0222409000 0.0013272100 - 0.0135194000 0.0244859000 0.0013711000 - 0.0135959000 0.0248919000 0.0013623600 - 0.0136730000 0.0239240000 0.0013354100 - 0.0137507000 0.0238629000 0.0013199000 - 0.0138292000 0.0249351000 0.0013379600 - 0.0139083000 0.0263717000 0.0013678000 - 0.0139881000 0.0242520000 0.0012964500 - 0.0140685000 0.0254453000 0.0013150500 - 0.0141497000 0.0282891000 0.0013670400 - 0.0142316000 0.0277050000 0.0013432800 - 0.0143142000 0.0278071000 0.0013325800 - 0.0143975000 0.0263827000 0.0012896200 - 0.0144815000 0.0273024000 0.0012956000 - 0.0145663000 0.0288303000 0.0013197900 - 0.0146518000 0.0319202000 0.0013703500 - 0.0147381000 0.0313794000 0.0013484900 - 0.0148251000 0.0296052000 0.0013011500 - 0.0149129000 0.0314528000 0.0013315500 - 0.0150015000 0.0305383000 0.0013052400 - 0.0150909000 0.0302659000 0.0012809800 - 0.0151811000 0.0303648000 0.0012799100 - 0.0152721000 0.0340318000 0.0013388900 - 0.0153640000 0.0348114000 0.0013374900 - 0.0154566000 0.0338295000 0.0013153900 - 0.0155501000 0.0339914000 0.0013149800 - 0.0156445000 0.0366573000 0.0013577600 - 0.0157397000 0.0352321000 0.0013330200 - 0.0158357000 0.0368079000 0.0013636400 - 0.0159327000 0.0355200000 0.0013331900 - 0.0160306000 0.0362707000 0.0013416100 - 0.0161293000 0.0385078000 0.0013752500 - 0.0162290000 0.0381181000 0.0013554900 - 0.0163296000 0.0383197000 0.0013537000 - 0.0164311000 0.0396994000 0.0013731900 - 0.0165336000 0.0396499000 0.0013699800 - 0.0166371000 0.0402936000 0.0013706600 - 0.0167415000 0.0394958000 0.0013603200 - 0.0168469000 0.0439216000 0.0014304300 - 0.0169533000 0.0436170000 0.0014109700 - 0.0170607000 0.0408858000 0.0013608200 - 0.0171692000 0.0439584000 0.0013926200 - 0.0172787000 0.0427609000 0.0013667300 - 0.0173892000 0.0452531000 0.0013953400 - 0.0175008000 0.0466604000 0.0014021300 - 0.0176135000 0.0478718000 0.0014117600 - 0.0177272000 0.0457936000 0.0013614300 - 0.0178421000 0.0468711000 0.0013734500 - 0.0179581000 0.0509017000 0.0014155500 - 0.0180752000 0.0492731000 0.0013791200 - 0.0181935000 0.0508107000 0.0013883900 - 0.0183130000 0.0510551000 0.0013833800 - 0.0184336000 0.0533277000 0.0014020700 - 0.0185554000 0.0552303000 0.0014152500 - 0.0186784000 0.0530259000 0.0013691600 - 0.0188027000 0.0532816000 0.0013679900 - 0.0189282000 0.0552882000 0.0013790100 - 0.0190549000 0.0551244000 0.0013657900 - 0.0191830000 0.0577732000 0.0013954800 - 0.0193123000 0.0589052000 0.0014001200 - 0.0194430000 0.0576857000 0.0013784600 - 0.0195749000 0.0603987000 0.0014019800 - 0.0197083000 0.0603167000 0.0013956800 - 0.0198429000 0.0614760000 0.0014078400 - 0.0199790000 0.0606118000 0.0013871200 - 0.0201165000 0.0616982000 0.0013916600 - 0.0202554000 0.0634680000 0.0014004700 - 0.0203958000 0.0655938000 0.0014176100 - 0.0205376000 0.0653689000 0.0014006600 - 0.0206809000 0.0676610000 0.0014160000 - 0.0208257000 0.0709890000 0.0014345000 - 0.0209720000 0.0715626000 0.0014349900 - 0.0211199000 0.0701039000 0.0014043500 - 0.0212693000 0.0716361000 0.0014078400 - 0.0214203000 0.0737385000 0.0014236600 - 0.0215730000 0.0740215000 0.0014146800 - 0.0217273000 0.0759374000 0.0014237600 - 0.0218832000 0.0753786000 0.0014111000 - 0.0220409000 0.0767815000 0.0014160400 - 0.0222002000 0.0795275000 0.0014381000 - 0.0223613000 0.0797233000 0.0014301000 - 0.0225241000 0.0833809000 0.0014693900 - 0.0226888000 0.0839766000 0.0014669000 - 0.0228552000 0.0869420000 0.0014764200 - 0.0230235000 0.0856462000 0.0014536700 - 0.0231936000 0.0873872000 0.0014537000 - 0.0233656000 0.0884483000 0.0014480900 - 0.0235396000 0.0912395000 0.0014620000 - 0.0237155000 0.0909722000 0.0014467300 - 0.0238934000 0.0928542000 0.0014522000 - 0.0240733000 0.0949510000 0.0014497200 - 0.0242552000 0.0947081000 0.0014358400 - 0.0244392000 0.0988032000 0.0014563700 - 0.0246253000 0.1011410000 0.0014607700 - 0.0248135000 0.1014000000 0.0014498300 - 0.0250039000 0.1044650000 0.0014589800 - 0.0251965000 0.1040410000 0.0014455400 - 0.0253914000 0.1054050000 0.0014400900 - 0.0255885000 0.1084160000 0.0014518800 - 0.0257879000 0.1125390000 0.0014664600 - 0.0259896000 0.1113470000 0.0014422500 - 0.0261937000 0.1158440000 0.0014624600 - 0.0264003000 0.1147090000 0.0014422800 - 0.0266093000 0.1202780000 0.0014676100 - 0.0268208000 0.1198870000 0.0014490200 - 0.0270348000 0.1222440000 0.0014589800 - 0.0272513000 0.1272640000 0.0014773500 - 0.0274705000 0.1278290000 0.0014698900 - 0.0276924000 0.1252350000 0.0014374300 - 0.0279170000 0.1313740000 0.0014693800 - 0.0281443000 0.1325560000 0.0014613800 - 0.0283743000 0.1338220000 0.0014670500 - 0.0286072000 0.1364280000 0.0014703300 - 0.0288430000 0.1412250000 0.0014916800 - 0.0290818000 0.1418490000 0.0014898400 - 0.0293235000 0.1430870000 0.0014928700 - 0.0295682000 0.1469370000 0.0015081500 - 0.0298160000 0.1483350000 0.0015113700 - 0.0300669000 0.1515680000 0.0015219800 - 0.0303210000 0.1529460000 0.0015143700 - 0.0305784000 0.1556130000 0.0015195200 - 0.0308390000 0.1599000000 0.0015301200 - 0.0311030000 0.1629350000 0.0015307100 - 0.0313704000 0.1658180000 0.0015318000 - 0.0316412000 0.1680290000 0.0015338400 - 0.0319156000 0.1714360000 0.0015392400 - 0.0321936000 0.1731620000 0.0015361900 - 0.0324752000 0.1756600000 0.0015369500 - 0.0327605000 0.1795850000 0.0015446100 - 0.0330496000 0.1793930000 0.0015364400 - 0.0333425000 0.1857400000 0.0015579400 - 0.0336393000 0.1874980000 0.0015553100 - 0.0339402000 0.1904730000 0.0015596200 - 0.0342451000 0.1942500000 0.0015631000 - 0.0345541000 0.1983860000 0.0015696200 - 0.0348673000 0.1979160000 0.0015560700 - 0.0351848000 0.2052400000 0.0015771300 - 0.0355066000 0.2071710000 0.0015729300 - 0.0358329000 0.2099060000 0.0015782700 - 0.0361637000 0.2143980000 0.0015855500 - 0.0364991000 0.2132690000 0.0015704000 - 0.0368392000 0.2199310000 0.0015856400 - 0.0371840000 0.2239800000 0.0015900900 - 0.0375338000 0.2273330000 0.0015924400 - 0.0378884000 0.2302250000 0.0015930900 - 0.0382482000 0.2340620000 0.0015951200 - 0.0386131000 0.2390970000 0.0016002100 - 0.0389832000 0.2432050000 0.0016072900 - 0.0393587000 0.2478750000 0.0016126500 - 0.0397396000 0.2502360000 0.0016082900 - 0.0401261000 0.2543380000 0.0016197800 - 0.0405182000 0.2549780000 0.0016073400 - 0.0409162000 0.2608100000 0.0016199300 - 0.0413200000 0.2685350000 0.0016382300 - 0.0417298000 0.2707110000 0.0016356500 - 0.0421458000 0.2723970000 0.0016312400 - 0.0425680000 0.2784870000 0.0016460300 - 0.0429966000 0.2852740000 0.0016591500 - 0.0434317000 0.2853810000 0.0016452800 - 0.0438734000 0.2906300000 0.0016582500 - 0.0443219000 0.2983750000 0.0016732700 - 0.0447773000 0.3015340000 0.0016742800 - 0.0452398000 0.3049850000 0.0016742300 - 0.0457094000 0.3085840000 0.0016790500 - 0.0461865000 0.3151590000 0.0016896400 - 0.0466710000 0.3172860000 0.0016863200 - 0.0471632000 0.3232820000 0.0016954700 - 0.0476632000 0.3274150000 0.0016991900 - 0.0481712000 0.3318540000 0.0017043800 - 0.0486874000 0.3351750000 0.0017028100 - 0.0492119000 0.3419900000 0.0017160500 - 0.0497450000 0.3464820000 0.0017183600 - 0.0500486000 0.3476860000 0.0048508300 - 0.0501165000 0.3490380000 0.0048676200 - 0.0501845000 0.3515330000 0.0048875600 - 0.0502526000 0.3481230000 0.0048437700 - 0.0503209000 0.3510530000 0.0048738800 - 0.0503893000 0.3512010000 0.0048817300 - 0.0504578000 0.3504330000 0.0048454900 - 0.0505265000 0.3591170000 0.0049162900 - 0.0505954000 0.3531820000 0.0048591100 - 0.0506643000 0.3493550000 0.0048443900 - 0.0507334000 0.3570270000 0.0049185700 - 0.0508027000 0.3466910000 0.0048101600 - 0.0508721000 0.3533390000 0.0048352300 - 0.0509416000 0.3593090000 0.0048992100 - 0.0510113000 0.3626340000 0.0049208300 - 0.0510811000 0.3493880000 0.0048173400 - 0.0511511000 0.3611790000 0.0048969100 - 0.0512212000 0.3649870000 0.0049461000 - 0.0512915000 0.3542730000 0.0048320900 - 0.0513619000 0.3605810000 0.0048964300 - 0.0514324000 0.3588260000 0.0048676800 - 0.0515031000 0.3656880000 0.0049287900 - 0.0515739000 0.3586370000 0.0048513200 - 0.0516449000 0.3628740000 0.0049234100 - 0.0517161000 0.3540400000 0.0048196800 - 0.0517873000 0.3668370000 0.0049129600 - 0.0518588000 0.3615830000 0.0048754600 - 0.0519303000 0.3594590000 0.0048349400 - 0.0520021000 0.3686370000 0.0049440400 - 0.0520739000 0.3667570000 0.0049198900 - 0.0521459000 0.3626340000 0.0048710700 - 0.0522181000 0.3607090000 0.0048379300 - 0.0522904000 0.3663200000 0.0048960100 - 0.0523629000 0.3667440000 0.0049009300 - 0.0524355000 0.3725800000 0.0049680400 - 0.0525083000 0.3760240000 0.0049801900 - 0.0525812000 0.3772810000 0.0049773700 - 0.0526543000 0.3663410000 0.0048707500 - 0.0527275000 0.3660420000 0.0048858700 - 0.0528009000 0.3783780000 0.0049883400 - 0.0528744000 0.3742680000 0.0049369000 - 0.0529481000 0.3730230000 0.0049383000 - 0.0530219000 0.3863150000 0.0050520500 - 0.0530959000 0.3754090000 0.0049590000 - 0.0531701000 0.3689720000 0.0048866400 - 0.0532444000 0.3759360000 0.0049405000 - 0.0533189000 0.3706780000 0.0048855700 - 0.0533935000 0.3718690000 0.0048923600 - 0.0534683000 0.3849540000 0.0050026500 - 0.0535432000 0.3798720000 0.0049638800 - 0.0536183000 0.3741090000 0.0049178200 - 0.0536935000 0.3815600000 0.0049604900 - 0.0537689000 0.3806880000 0.0049671900 - 0.0538445000 0.3844920000 0.0049731000 - 0.0539202000 0.3796600000 0.0049539500 - 0.0539961000 0.3832530000 0.0049505200 - 0.0540721000 0.3788250000 0.0049037800 - 0.0541483000 0.3826650000 0.0049449500 - 0.0542247000 0.3922200000 0.0050221400 - 0.0543012000 0.3923340000 0.0050414400 - 0.0543779000 0.3759530000 0.0048840000 - 0.0544548000 0.3829550000 0.0049329600 - 0.0545318000 0.3952150000 0.0050443500 - 0.0546090000 0.3910850000 0.0049995200 - 0.0546863000 0.3909650000 0.0050117100 - 0.0547638000 0.3879260000 0.0049747100 - 0.0548415000 0.3939460000 0.0050169600 - 0.0549193000 0.3979420000 0.0050453000 - 0.0549973000 0.3911790000 0.0049908600 - 0.0550755000 0.3987150000 0.0050475900 - 0.0551539000 0.3923450000 0.0049865300 - 0.0552324000 0.3871740000 0.0049362200 - 0.0553110000 0.3946060000 0.0050073800 - 0.0553899000 0.3954480000 0.0049867900 - 0.0554689000 0.3901780000 0.0049692400 - 0.0555480000 0.3912630000 0.0049618100 - 0.0556274000 0.3993900000 0.0050138200 - 0.0557069000 0.4016050000 0.0050527900 - 0.0557866000 0.3870060000 0.0049435800 - 0.0558665000 0.3948150000 0.0050044000 - 0.0559465000 0.4011170000 0.0050243700 - 0.0560267000 0.4059050000 0.0050875400 - 0.0561071000 0.3943290000 0.0049641800 - 0.0561876000 0.3906470000 0.0049436800 - 0.0562683000 0.3990930000 0.0049746200 - 0.0563492000 0.3972140000 0.0049833400 - 0.0564303000 0.4041670000 0.0050369100 - 0.0565116000 0.3941920000 0.0049533500 - 0.0565930000 0.3942480000 0.0049587600 - 0.0566746000 0.4030220000 0.0050217200 - 0.0567563000 0.4059310000 0.0050405400 - 0.0568383000 0.4090970000 0.0050458100 - 0.0569204000 0.4135410000 0.0050856700 - 0.0570027000 0.4053610000 0.0049995700 - 0.0570852000 0.4101250000 0.0050626100 - 0.0571679000 0.4098720000 0.0050430100 - 0.0572507000 0.4006280000 0.0049579700 - 0.0573338000 0.4098970000 0.0050567000 - 0.0574170000 0.4102320000 0.0050762300 - 0.0575003000 0.4125190000 0.0050507900 - 0.0575839000 0.4082140000 0.0050280100 - 0.0576677000 0.4114900000 0.0050325000 - 0.0577516000 0.4140860000 0.0050444900 - 0.0578357000 0.4169320000 0.0050901400 - 0.0579200000 0.4142120000 0.0050540800 - 0.0580045000 0.4162310000 0.0050749800 - 0.0580892000 0.4131000000 0.0050364800 - 0.0581740000 0.4179480000 0.0050822800 - 0.0582591000 0.4055010000 0.0049880200 - 0.0583443000 0.4178720000 0.0050571500 - 0.0584297000 0.4172520000 0.0050654300 - 0.0585153000 0.4172970000 0.0050583500 - 0.0586011000 0.4072810000 0.0049573100 - 0.0586871000 0.4124860000 0.0050173100 - 0.0587733000 0.4195220000 0.0050780600 - 0.0588596000 0.4225260000 0.0050778900 - 0.0589462000 0.4206000000 0.0050923000 - 0.0590329000 0.4191090000 0.0050596400 - 0.0591199000 0.4221140000 0.0050665000 - 0.0592070000 0.4272120000 0.0051084400 - 0.0592943000 0.4236640000 0.0050719300 - 0.0593818000 0.4208340000 0.0050445200 - 0.0594695000 0.4274560000 0.0051244900 - 0.0595574000 0.4293400000 0.0051289500 - 0.0596455000 0.4151280000 0.0050017900 - 0.0597338000 0.4248800000 0.0050798600 - 0.0598223000 0.4284310000 0.0050947700 - 0.0599110000 0.4285850000 0.0050774200 - 0.0599998000 0.4123130000 0.0049584200 - 0.0600889000 0.4280960000 0.0050716000 - 0.0601782000 0.4329150000 0.0051427700 - 0.0602677000 0.4278760000 0.0050691700 - 0.0603574000 0.4308810000 0.0050991100 - 0.0604472000 0.4233890000 0.0050537800 - 0.0605373000 0.4329100000 0.0051180300 - 0.0606276000 0.4408890000 0.0051607300 - 0.0607181000 0.4255290000 0.0050392200 - 0.0608087000 0.4258950000 0.0050403000 - 0.0608996000 0.4366720000 0.0051354300 - 0.0609907000 0.4407980000 0.0051481100 - 0.0610820000 0.4293660000 0.0050589900 - 0.0611735000 0.4249940000 0.0050332000 - 0.0612652000 0.4355760000 0.0050996000 - 0.0613571000 0.4295640000 0.0050421300 - 0.0614493000 0.4430700000 0.0051774300 - 0.0615416000 0.4344460000 0.0050926100 - 0.0616341000 0.4348250000 0.0050941900 - 0.0617269000 0.4324130000 0.0050705000 - 0.0618198000 0.4351130000 0.0050833600 - 0.0619130000 0.4411200000 0.0051235100 - 0.0620064000 0.4407970000 0.0051150700 - 0.0620999000 0.4462590000 0.0051590200 - 0.0621937000 0.4464100000 0.0051660100 - 0.0622877000 0.4459680000 0.0051429300 - 0.0623820000 0.4417470000 0.0051056000 - 0.0624764000 0.4428140000 0.0051343700 - 0.0625711000 0.4491040000 0.0051763700 - 0.0626659000 0.4345430000 0.0050585800 - 0.0627610000 0.4537800000 0.0052156100 - 0.0628563000 0.4511810000 0.0051892800 - 0.0629518000 0.4520820000 0.0051929500 - 0.0630476000 0.4520850000 0.0051665400 - 0.0631435000 0.4420880000 0.0050990000 - 0.0632397000 0.4541530000 0.0051977600 - 0.0633361000 0.4533220000 0.0051831300 - 0.0634327000 0.4501850000 0.0051595700 - 0.0635295000 0.4470780000 0.0051243400 - 0.0636266000 0.4567580000 0.0052076500 - 0.0637239000 0.4566740000 0.0052055000 - 0.0638214000 0.4510250000 0.0051572800 - 0.0639191000 0.4577750000 0.0051887600 - 0.0640170000 0.4524020000 0.0051677900 - 0.0641152000 0.4499800000 0.0051514000 - 0.0642136000 0.4602860000 0.0052139000 - 0.0643123000 0.4528570000 0.0051709500 - 0.0644111000 0.4570050000 0.0051967400 - 0.0645102000 0.4554940000 0.0051667400 - 0.0646095000 0.4530000000 0.0051423000 - 0.0647091000 0.4613750000 0.0052267100 - 0.0648088000 0.4571620000 0.0051689500 - 0.0649088000 0.4618310000 0.0052142000 - 0.0650091000 0.4640030000 0.0052055200 - 0.0651095000 0.4610620000 0.0051992700 - 0.0652102000 0.4671310000 0.0052284900 - 0.0653112000 0.4596270000 0.0051841900 - 0.0654123000 0.4594730000 0.0051877000 - 0.0655137000 0.4657600000 0.0052205300 - 0.0656154000 0.4620730000 0.0051899400 - 0.0657173000 0.4598440000 0.0051897800 - 0.0658194000 0.4666440000 0.0052318700 - 0.0659217000 0.4631770000 0.0052037600 - 0.0660243000 0.4578680000 0.0051453200 - 0.0661272000 0.4734300000 0.0052657000 - 0.0662302000 0.4663760000 0.0052068700 - 0.0663335000 0.4625070000 0.0051687700 - 0.0664371000 0.4743710000 0.0052790100 - 0.0665409000 0.4665920000 0.0051764700 - 0.0666449000 0.4808710000 0.0053176100 - 0.0667492000 0.4640420000 0.0051964500 - 0.0668538000 0.4761390000 0.0052757000 - 0.0669585000 0.4702740000 0.0052266200 - 0.0670635000 0.4752240000 0.0052724000 - 0.0671688000 0.4710070000 0.0052209800 - 0.0672743000 0.4744370000 0.0052586000 - 0.0673801000 0.4796730000 0.0053231000 - 0.0674861000 0.4883540000 0.0053518300 - 0.0675924000 0.4708700000 0.0052055500 - 0.0676989000 0.4776300000 0.0052670600 - 0.0678057000 0.4761730000 0.0052528900 - 0.0679127000 0.4818470000 0.0053039100 - 0.0680200000 0.4836860000 0.0052938900 - 0.0681275000 0.4851110000 0.0053059100 - 0.0682353000 0.4754810000 0.0052343100 - 0.0683433000 0.4804070000 0.0052691900 - 0.0684516000 0.4787260000 0.0052597800 - 0.0685602000 0.4858840000 0.0053387100 - 0.0686690000 0.4849950000 0.0052950800 - 0.0687781000 0.4878700000 0.0053398500 - 0.0688874000 0.4842570000 0.0053035200 - 0.0689970000 0.4850490000 0.0052904700 - 0.0691069000 0.4852950000 0.0053044500 - 0.0692170000 0.4850380000 0.0052843900 - 0.0693274000 0.4890390000 0.0053332200 - 0.0694380000 0.4892100000 0.0053315800 - 0.0695489000 0.4926820000 0.0053455800 - 0.0696601000 0.4888110000 0.0053100700 - 0.0697716000 0.4840630000 0.0052805200 - 0.0698833000 0.4814990000 0.0052605800 - 0.0699952000 0.4859700000 0.0052821200 - 0.0701075000 0.4938690000 0.0053462700 - 0.0702200000 0.4883440000 0.0053003500 - 0.0703328000 0.4922020000 0.0053154900 - 0.0704459000 0.4942320000 0.0053287300 - 0.0705592000 0.4829880000 0.0052746000 - 0.0706728000 0.4891500000 0.0052942000 - 0.0707867000 0.4906360000 0.0053187300 - 0.0709009000 0.5014050000 0.0054075400 - 0.0710153000 0.5106360000 0.0054634600 - 0.0711300000 0.5014880000 0.0053934600 - 0.0712450000 0.4920530000 0.0053114900 - 0.0713603000 0.4981080000 0.0053597600 - 0.0714758000 0.4932910000 0.0053111300 - 0.0715917000 0.5036820000 0.0054037600 - 0.0717078000 0.5050830000 0.0054203100 - 0.0718242000 0.5002330000 0.0053462800 - 0.0719409000 0.5097120000 0.0054391300 - 0.0720578000 0.5014410000 0.0053696200 - 0.0721751000 0.5032090000 0.0053883100 - 0.0722926000 0.4972380000 0.0053427500 - 0.0724104000 0.5108540000 0.0054713900 - 0.0725285000 0.5034620000 0.0053889100 - 0.0726469000 0.4936430000 0.0053058300 - 0.0727656000 0.5020660000 0.0053655400 - 0.0728846000 0.4992740000 0.0053572300 - 0.0730039000 0.5125260000 0.0054481200 - 0.0731235000 0.5120020000 0.0054629000 - 0.0732433000 0.5133060000 0.0054362300 - 0.0733635000 0.5080210000 0.0054183500 - 0.0734839000 0.5143310000 0.0054530900 - 0.0736047000 0.5032030000 0.0053526100 - 0.0737257000 0.5049940000 0.0053852700 - 0.0738471000 0.5149280000 0.0054407700 - 0.0739687000 0.5083220000 0.0053965100 - 0.0740907000 0.5109540000 0.0054143700 - 0.0742129000 0.5139330000 0.0054216200 - 0.0743355000 0.5175890000 0.0054742900 - 0.0744583000 0.5114440000 0.0054267700 - 0.0745815000 0.5198270000 0.0054877600 - 0.0747050000 0.5304020000 0.0055670000 - 0.0748287000 0.5172210000 0.0054553700 - 0.0749528000 0.5213010000 0.0054929200 - 0.0750772000 0.5133730000 0.0054268300 - 0.0752019000 0.5160780000 0.0054472500 - 0.0753269000 0.5123360000 0.0054066700 - 0.0754522000 0.5203840000 0.0054681500 - 0.0755779000 0.5181280000 0.0054554900 - 0.0757038000 0.5135480000 0.0054199300 - 0.0758301000 0.5138410000 0.0054326600 - 0.0759567000 0.5241750000 0.0055179400 - 0.0760836000 0.5345120000 0.0055729900 - 0.0762108000 0.5220310000 0.0054845000 - 0.0763383000 0.5371940000 0.0055680400 - 0.0764662000 0.5244510000 0.0055030500 - 0.0765944000 0.5186210000 0.0054478500 - 0.0767229000 0.5203900000 0.0054592700 - 0.0768517000 0.5317800000 0.0055431000 - 0.0769808000 0.5301660000 0.0055490200 - 0.0771103000 0.5235560000 0.0054994300 - 0.0772401000 0.5179700000 0.0054488500 - 0.0773702000 0.5353360000 0.0055786900 - 0.0775007000 0.5223380000 0.0054644900 - 0.0776315000 0.5249980000 0.0054896000 - 0.0777626000 0.5279830000 0.0055143000 - 0.0778941000 0.5356400000 0.0055535500 - 0.0780258000 0.5387040000 0.0055952600 - 0.0781580000 0.5427290000 0.0056204000 - 0.0782904000 0.5435020000 0.0056436800 - 0.0784232000 0.5337330000 0.0055427800 - 0.0785564000 0.5292940000 0.0055174000 - 0.0786898000 0.5228490000 0.0054643800 - 0.0788236000 0.5304200000 0.0055351400 - 0.0789578000 0.5373740000 0.0055639200 - 0.0790923000 0.5402340000 0.0055972900 - 0.0792271000 0.5267600000 0.0054971700 - 0.0793623000 0.5444700000 0.0056385200 - 0.0794978000 0.5445040000 0.0056343700 - 0.0796337000 0.5360880000 0.0055581800 - 0.0797700000 0.5313590000 0.0055336400 - 0.0799065000 0.5407460000 0.0056093600 - 0.0800435000 0.5393080000 0.0055838300 - 0.0801807000 0.5376440000 0.0055791100 - 0.0803184000 0.5418370000 0.0056146500 - 0.0804564000 0.5446280000 0.0056356000 - 0.0805947000 0.5465380000 0.0056302300 - 0.0807334000 0.5450420000 0.0056374800 - 0.0808725000 0.5454180000 0.0056286400 - 0.0810119000 0.5476610000 0.0056457600 - 0.0811517000 0.5430560000 0.0056185900 - 0.0812918000 0.5461560000 0.0056218200 - 0.0814323000 0.5507220000 0.0056776300 - 0.0815732000 0.5418600000 0.0056094400 - 0.0817144000 0.5543990000 0.0056910300 - 0.0818560000 0.5482990000 0.0056502200 - 0.0819980000 0.5545530000 0.0056794400 - 0.0821404000 0.5549290000 0.0056947700 - 0.0822831000 0.5487630000 0.0056469000 - 0.0824262000 0.5592810000 0.0057070100 - 0.0825696000 0.5457930000 0.0056318700 - 0.0827134000 0.5575350000 0.0057382600 - 0.0828577000 0.5545020000 0.0056839500 - 0.0830022000 0.5600890000 0.0057288800 - 0.0831472000 0.5482500000 0.0056453900 - 0.0832926000 0.5504550000 0.0056491800 - 0.0834383000 0.5523460000 0.0056892300 - 0.0835844000 0.5558040000 0.0057043100 - 0.0837309000 0.5487730000 0.0056505300 - 0.0838778000 0.5556580000 0.0057049200 - 0.0840250000 0.5560660000 0.0057100700 - 0.0841727000 0.5572950000 0.0057040200 - 0.0843207000 0.5595000000 0.0057283100 - 0.0844692000 0.5597330000 0.0057458900 - 0.0846180000 0.5496280000 0.0056536400 - 0.0847672000 0.5692860000 0.0058060100 - 0.0849168000 0.5653290000 0.0057931700 - 0.0850669000 0.5682450000 0.0058106300 - 0.0852173000 0.5649420000 0.0057718600 - 0.0853681000 0.5611840000 0.0057462400 - 0.0855193000 0.5650720000 0.0057776200 - 0.0856709000 0.5510260000 0.0056896300 - 0.0858229000 0.5594060000 0.0057397500 - 0.0859753000 0.5710450000 0.0058267600 - 0.0861282000 0.5605280000 0.0057408400 - 0.0862814000 0.5745240000 0.0058599400 - 0.0864350000 0.5650190000 0.0058182700 - 0.0865891000 0.5629220000 0.0057792000 - 0.0867436000 0.5611480000 0.0057587400 - 0.0868985000 0.5707550000 0.0058408900 - 0.0870538000 0.5655840000 0.0057953800 - 0.0872095000 0.5719140000 0.0058516200 - 0.0873656000 0.5773650000 0.0058847000 - 0.0875221000 0.5788070000 0.0059105200 - 0.0876791000 0.5798920000 0.0059019100 - 0.0878365000 0.5696960000 0.0058285300 - 0.0879943000 0.5661480000 0.0057831800 - 0.0881526000 0.5723950000 0.0058628600 - 0.0883113000 0.5846030000 0.0059500300 - 0.0884704000 0.5734080000 0.0058374600 - 0.0886299000 0.5765500000 0.0058708600 - 0.0887899000 0.5683620000 0.0058144700 - 0.0889503000 0.5820350000 0.0059320100 - 0.0891111000 0.5849940000 0.0059610800 - 0.0892724000 0.5852560000 0.0059598800 - 0.0894341000 0.5773600000 0.0058778300 - 0.0895962000 0.5771240000 0.0058951000 - 0.0897588000 0.5846870000 0.0059389500 - 0.0899218000 0.5732720000 0.0058596600 - 0.0900853000 0.5798740000 0.0059254100 - 0.0902492000 0.5740480000 0.0058984200 - 0.0904136000 0.5679380000 0.0058366200 - 0.0905784000 0.5834490000 0.0059433600 - 0.0907437000 0.5890250000 0.0060052500 - 0.0909094000 0.5841110000 0.0059725700 - 0.0910756000 0.5849060000 0.0059738700 - 0.0912422000 0.5856360000 0.0059935000 - 0.0914093000 0.5896260000 0.0059979300 - 0.0915769000 0.5802830000 0.0059334900 - 0.0917449000 0.5797970000 0.0059278600 - 0.0919133000 0.5887980000 0.0059936000 - 0.0920823000 0.5904810000 0.0060392700 - 0.0922517000 0.5825630000 0.0059739800 - 0.0924216000 0.5868350000 0.0060074900 - 0.0925919000 0.5920710000 0.0060173600 - 0.0927627000 0.5957620000 0.0060482700 - 0.0929340000 0.5924350000 0.0060631200 - 0.0931058000 0.5920660000 0.0060416300 - 0.0932780000 0.5984880000 0.0060849900 - 0.0934507000 0.5937670000 0.0060880400 - 0.0936239000 0.5909320000 0.0060419800 - 0.0937976000 0.5889930000 0.0060164000 - 0.0939718000 0.5933340000 0.0060770800 - 0.0941464000 0.6009840000 0.0061403000 - 0.0943215000 0.6040290000 0.0061400200 - 0.0944972000 0.5901110000 0.0060286100 - 0.0946733000 0.5938780000 0.0060796700 - 0.0948499000 0.5858460000 0.0060092600 - 0.0950270000 0.5980720000 0.0061107600 - 0.0952046000 0.5995770000 0.0061469300 - 0.0953827000 0.5959760000 0.0061132400 - 0.0955613000 0.5974210000 0.0061282800 - 0.0957404000 0.5993740000 0.0061328100 - 0.0959200000 0.6020010000 0.0061841800 - 0.0961001000 0.5974090000 0.0061181400 - 0.0962807000 0.5971780000 0.0061254800 - 0.0964619000 0.5977720000 0.0061110700 - 0.0966435000 0.5974820000 0.0061356900 - 0.0968257000 0.5855880000 0.0060543900 - 0.0970083000 0.6057970000 0.0062198400 - 0.0971915000 0.6066180000 0.0062137400 - 0.0973752000 0.6055970000 0.0062268400 - 0.0975594000 0.5990480000 0.0061655200 - 0.0977442000 0.5937200000 0.0061059000 - 0.0979295000 0.5994730000 0.0061540700 - 0.0981153000 0.6048950000 0.0062064600 - 0.0983016000 0.5960030000 0.0061455700 - 0.0984885000 0.6112600000 0.0062618300 - 0.0986759000 0.6041150000 0.0062090300 - 0.0988638000 0.6105330000 0.0062288300 - 0.0990523000 0.6119550000 0.0062900000 - 0.0992413000 0.6093650000 0.0062534700 - 0.0994308000 0.6057100000 0.0062401600 - 0.0996209000 0.6117800000 0.0062810300 - 0.0998116000 0.6070230000 0.0062463200 - 0.1000030000 0.6159220000 0.0063362900 - 0.1001940000 0.6112820000 0.0062921700 - 0.1003870000 0.6125920000 0.0062966900 - 0.1005800000 0.6091700000 0.0062787800 - 0.1007730000 0.6117690000 0.0063052600 - 0.1009670000 0.6134840000 0.0063308900 - 0.1011610000 0.6063490000 0.0062735100 - 0.1013570000 0.6146290000 0.0063233900 - 0.1015520000 0.6138260000 0.0063416300 - 0.1017480000 0.6107160000 0.0063252300 - 0.1019450000 0.6118210000 0.0063203100 - 0.1021430000 0.6049840000 0.0062755100 - 0.1023400000 0.6123910000 0.0063279900 - 0.1025390000 0.6140220000 0.0063885500 - 0.1027380000 0.6134950000 0.0063571700 - 0.1029380000 0.6133180000 0.0063673800 - 0.1031380000 0.6164100000 0.0063973300 - 0.1033390000 0.6282400000 0.0064822500 - 0.1035400000 0.6166550000 0.0064083700 - 0.1037420000 0.6156190000 0.0064080000 - 0.1039450000 0.6122320000 0.0063627600 - 0.1041480000 0.6116640000 0.0063840500 - 0.1043520000 0.6180940000 0.0064175900 - 0.1045560000 0.5983930000 0.0062734500 - 0.1047610000 0.6206310000 0.0064556800 - 0.1049670000 0.6244750000 0.0064508800 - 0.1051730000 0.6212430000 0.0064912000 - 0.1053800000 0.6264570000 0.0065292700 - 0.1055870000 0.6248980000 0.0065124500 - 0.1057950000 0.6118310000 0.0063658200 - 0.1060040000 0.6189050000 0.0064673100 - 0.1062130000 0.6226870000 0.0064897800 - 0.1064230000 0.6328870000 0.0066076800 - 0.1066340000 0.6197190000 0.0064947600 - 0.1068450000 0.6245920000 0.0064932000 - 0.1070560000 0.6248770000 0.0065493900 - 0.1072690000 0.6223910000 0.0065399900 - 0.1074820000 0.6220280000 0.0065058600 - 0.1076950000 0.6338960000 0.0066191900 - 0.1079100000 0.6335300000 0.0066379300 - 0.1081250000 0.6188980000 0.0065073800 - 0.1083400000 0.6288610000 0.0065909800 - 0.1085560000 0.6262480000 0.0065734900 - 0.1087730000 0.6269410000 0.0065898600 - 0.1089910000 0.6185000000 0.0065238500 - 0.1092090000 0.6255310000 0.0065975300 - 0.1094280000 0.6233070000 0.0065697200 - 0.1096470000 0.6284980000 0.0066081600 - 0.1098680000 0.6249150000 0.0065939600 - 0.1100880000 0.6415790000 0.0067320400 - 0.1103100000 0.6121640000 0.0064875200 - 0.1105320000 0.6320730000 0.0066613900 - 0.1107550000 0.6384260000 0.0067299900 - 0.1109780000 0.6292840000 0.0066533700 - 0.1112020000 0.6252620000 0.0066409300 - 0.1114270000 0.6356810000 0.0067473900 - 0.1116530000 0.6385940000 0.0067639200 - 0.1118790000 0.6311540000 0.0067395300 - 0.1121060000 0.6273020000 0.0066777700 - 0.1123340000 0.6461250000 0.0068187200 - 0.1125620000 0.6303370000 0.0067115500 - 0.1127910000 0.6265710000 0.0067090800 - 0.1130200000 0.6292400000 0.0066887400 - 0.1132510000 0.6433480000 0.0068338800 - 0.1134820000 0.6387700000 0.0068040400 - 0.1137140000 0.6324310000 0.0067391500 - 0.1139460000 0.6344760000 0.0068039800 - 0.1141800000 0.6294810000 0.0067477400 - 0.1144130000 0.6341900000 0.0067952000 - 0.1146480000 0.6501730000 0.0069274300 - 0.1148840000 0.6341400000 0.0067976300 - 0.1151200000 0.6305110000 0.0067816300 - 0.1153560000 0.6378110000 0.0068541900 - 0.1155940000 0.6375140000 0.0068605500 - 0.1158320000 0.6490350000 0.0069621800 - 0.1160710000 0.6504960000 0.0069807000 - 0.1163110000 0.6410030000 0.0068701000 - 0.1165520000 0.6339940000 0.0068542800 - 0.1167930000 0.6415800000 0.0069109400 - 0.1170350000 0.6341000000 0.0068555600 - 0.1172780000 0.6406030000 0.0069276700 - 0.1175210000 0.6376450000 0.0069009700 - 0.1177660000 0.6333950000 0.0068799600 - 0.1180110000 0.6366480000 0.0069089500 - 0.1182570000 0.6429350000 0.0069563600 - 0.1185030000 0.6382600000 0.0069582500 - 0.1187500000 0.6432740000 0.0070114900 - 0.1189990000 0.6405530000 0.0069589600 - 0.1192480000 0.6341100000 0.0069306300 - 0.1194970000 0.6430110000 0.0070236800 - 0.1197480000 0.6502080000 0.0070752200 - 0.1199990000 0.6455120000 0.0070673500 - 0.1202510000 0.6457570000 0.0070667000 - 0.1205040000 0.6393590000 0.0070088900 - 0.1207580000 0.6474890000 0.0070692600 - 0.1210120000 0.6269210000 0.0069242400 - 0.1212670000 0.6411570000 0.0070380400 - 0.1215230000 0.6546100000 0.0071781900 - 0.1217800000 0.6359020000 0.0070138600 - 0.1220380000 0.6514610000 0.0071713800 - 0.1222960000 0.6496690000 0.0071439500 - 0.1225560000 0.6506590000 0.0071701200 - 0.1228160000 0.6549800000 0.0072365700 - 0.1230770000 0.6483870000 0.0071701800 - 0.1233390000 0.6553200000 0.0072540500 - 0.1236020000 0.6496990000 0.0071727100 - 0.1238650000 0.6493840000 0.0071965600 - 0.1241290000 0.6459240000 0.0071502200 - 0.1243950000 0.6503690000 0.0072098200 - 0.1246610000 0.6365050000 0.0071448600 - 0.1249280000 0.6457360000 0.0071884700 - 0.1251950000 0.6445450000 0.0071884400 - 0.1254640000 0.6499770000 0.0072387800 - 0.1257330000 0.6598350000 0.0073183900 - 0.1260040000 0.6488650000 0.0072350600 - 0.1262750000 0.6401350000 0.0071845700 - 0.1265470000 0.6505700000 0.0073031200 - 0.1268200000 0.6455920000 0.0072566300 - 0.1270940000 0.6453560000 0.0072667600 - 0.1273690000 0.6429820000 0.0072783400 - 0.1276440000 0.6457390000 0.0072900300 - 0.1279210000 0.6569010000 0.0073832600 - 0.1281980000 0.6407380000 0.0072954200 - 0.1284770000 0.6470470000 0.0073084200 - 0.1287560000 0.6487270000 0.0073566700 - 0.1290360000 0.6565860000 0.0074438800 - 0.1293170000 0.6532220000 0.0074508700 - 0.1295990000 0.6582660000 0.0074420600 - 0.1298820000 0.6367050000 0.0072865500 - 0.1301660000 0.6543360000 0.0074417000 - 0.1304510000 0.6580210000 0.0075013400 - 0.1307370000 0.6507560000 0.0074049200 - 0.1310230000 0.6592310000 0.0075244300 - 0.1313110000 0.6703690000 0.0076516400 - 0.1315990000 0.6616600000 0.0075912900 - 0.1318890000 0.6677120000 0.0076499200 - 0.1321790000 0.6507760000 0.0074917200 - 0.1324710000 0.6561100000 0.0075313400 - 0.1327630000 0.6546040000 0.0075230300 - 0.1330570000 0.6643320000 0.0076392100 - 0.1333510000 0.6584610000 0.0075840800 - 0.1336460000 0.6443010000 0.0074538200 - 0.1339420000 0.6588070000 0.0076140800 - 0.1342400000 0.6550240000 0.0076209300 - 0.1345380000 0.6496200000 0.0075716200 - 0.1348370000 0.6670090000 0.0077368500 - 0.1351380000 0.6616650000 0.0076634200 - 0.1354390000 0.6580790000 0.0076795000 - 0.1357410000 0.6599080000 0.0076960800 - 0.1360440000 0.6603810000 0.0077080000 - 0.1363490000 0.6528760000 0.0076605800 - 0.1366540000 0.6477670000 0.0076118000 - 0.1369600000 0.6488430000 0.0076541600 - 0.1372680000 0.6508670000 0.0076625600 - 0.1375760000 0.6568600000 0.0077200800 - 0.1378860000 0.6624280000 0.0077972700 - 0.1381960000 0.6545680000 0.0077737900 - 0.1385080000 0.6631220000 0.0078567200 - 0.1388200000 0.6559560000 0.0078022200 - 0.1391340000 0.6576330000 0.0078381100 - 0.1394490000 0.6668420000 0.0079115400 - 0.1397650000 0.6576030000 0.0078372700 - 0.1400810000 0.6652870000 0.0079775800 - 0.1403990000 0.6587700000 0.0078515700 - 0.1407180000 0.6445380000 0.0077311600 - 0.1410390000 0.6609600000 0.0079353700 - 0.1413600000 0.6548400000 0.0078772900 - 0.1416820000 0.6651370000 0.0080095300 - 0.1420060000 0.6652620000 0.0079911700 - 0.1423300000 0.6600700000 0.0079311600 - 0.1426560000 0.6563530000 0.0079429900 - 0.1429820000 0.6658230000 0.0080197800 - 0.1433100000 0.6569080000 0.0079545700 - 0.1436390000 0.6592390000 0.0079741800 - 0.1439700000 0.6537310000 0.0079598500 - 0.1443010000 0.6558050000 0.0080255200 - 0.1446330000 0.6544090000 0.0079551400 - 0.1449670000 0.6644570000 0.0080966300 - 0.1453020000 0.6615340000 0.0080508400 - 0.1456380000 0.6693120000 0.0082081900 - 0.1459750000 0.6604740000 0.0081455900 - 0.1463130000 0.6589040000 0.0081090200 - 0.1466520000 0.6651010000 0.0081850000 - 0.1469930000 0.6716310000 0.0082543600 - 0.1473350000 0.6714330000 0.0082797200 - 0.1476780000 0.6651650000 0.0082379700 - 0.1480220000 0.6525020000 0.0081215600 - 0.1483670000 0.6680530000 0.0082459700 - 0.1487140000 0.6622360000 0.0082296200 - 0.1490620000 0.6573100000 0.0082364600 - 0.1494110000 0.6601750000 0.0082469300 - 0.1497610000 0.6630680000 0.0082910500 - 0.1501130000 0.6734830000 0.0083709900 - 0.1504650000 0.6673720000 0.0083661100 - 0.1508190000 0.6606760000 0.0082982300 - 0.1511740000 0.6619780000 0.0083472000 - 0.1515310000 0.6671400000 0.0084244500 - 0.1518890000 0.6426720000 0.0081752700 - 0.1522480000 0.6587070000 0.0083505000 - 0.1526080000 0.6592540000 0.0083439300 - 0.1529700000 0.6518580000 0.0083641800 - 0.1533320000 0.6595580000 0.0083854200 - 0.1536970000 0.6537210000 0.0083339600 - 0.1540620000 0.6733490000 0.0085766400 - 0.1544290000 0.6643060000 0.0085143800 - 0.1547970000 0.6700930000 0.0085493300 - 0.1551660000 0.6626450000 0.0085336700 - 0.1555370000 0.6510470000 0.0084401800 - 0.1559090000 0.6594350000 0.0084843700 - 0.1562820000 0.6633000000 0.0085927400 - 0.1566570000 0.6872160000 0.0088619600 - 0.1570330000 0.6604000000 0.0085364300 - 0.1574110000 0.6553920000 0.0085197400 - 0.1577890000 0.6614380000 0.0085955300 - 0.1581700000 0.6674080000 0.0086958700 - 0.1585510000 0.6563070000 0.0085734100 - 0.1589340000 0.6629980000 0.0086661800 - 0.1593180000 0.6709620000 0.0087894000 - 0.1597040000 0.6648870000 0.0087362100 - 0.1600910000 0.6638190000 0.0087456300 - 0.1604800000 0.6577940000 0.0087197000 - 0.1608700000 0.6661810000 0.0088142000 - 0.1612610000 0.6619930000 0.0087317400 - 0.1616540000 0.6681780000 0.0088419800 - 0.1620480000 0.6519560000 0.0087224900 - 0.1624440000 0.6557310000 0.0087371000 - 0.1628410000 0.6467430000 0.0086389300 - 0.1632390000 0.6667090000 0.0089259600 - 0.1636390000 0.6621380000 0.0089215000 - 0.1640410000 0.6652240000 0.0089421400 - 0.1644440000 0.6749740000 0.0090480100 - 0.1648480000 0.6441130000 0.0087475400 - 0.1652540000 0.6767550000 0.0090849500 - 0.1656620000 0.6517400000 0.0088503400 - 0.1660710000 0.6534900000 0.0088800500 - 0.1664810000 0.6595910000 0.0089885500 - 0.1668930000 0.6556920000 0.0089703800 - 0.1673070000 0.6502500000 0.0088946700 - 0.1677220000 0.6592000000 0.0089986900 - 0.1681390000 0.6711450000 0.0091209800 - 0.1685570000 0.6529740000 0.0089785900 - 0.1689760000 0.6439680000 0.0088881500 - 0.1693980000 0.6625660000 0.0090488600 - 0.1698210000 0.6587410000 0.0091145600 - 0.1702450000 0.6638590000 0.0092262700 - 0.1706710000 0.6467050000 0.0090275500 - 0.1710990000 0.6584110000 0.0091638600 - 0.1715280000 0.6627000000 0.0092473700 - 0.1719590000 0.6472260000 0.0090813000 - 0.1723920000 0.6493680000 0.0090903200 - 0.1728260000 0.6534980000 0.0091847700 - 0.1732620000 0.6535240000 0.0091978400 - 0.1736990000 0.6526570000 0.0091584800 - 0.1741380000 0.6635810000 0.0093228300 - 0.1745790000 0.6570410000 0.0093023400 - 0.1750210000 0.6510930000 0.0092566600 - 0.1754660000 0.6465730000 0.0091774700 - 0.1759110000 0.6552240000 0.0093317800 - 0.1763590000 0.6425070000 0.0091562000 - 0.1768080000 0.6361220000 0.0091284500 - 0.1772590000 0.6548690000 0.0093976800 - 0.1777120000 0.6583230000 0.0093741100 - 0.1781660000 0.6578090000 0.0094552000 - 0.1786230000 0.6345370000 0.0092239200 - 0.1790800000 0.6459190000 0.0093445600 - 0.1795400000 0.6461020000 0.0093543900 - 0.1800020000 0.6398490000 0.0092696500 - 0.1804650000 0.6491950000 0.0095092000 - 0.1809300000 0.6425230000 0.0093461800 - 0.1813970000 0.6555370000 0.0095394100 - 0.1818650000 0.6583600000 0.0096096600 - 0.1823360000 0.6519620000 0.0095464500 - 0.1828080000 0.6418160000 0.0094663000 - 0.1832820000 0.6337920000 0.0093659300 - 0.1837580000 0.6516530000 0.0095990200 - 0.1842360000 0.6519200000 0.0096207300 - 0.1847160000 0.6499820000 0.0096459700 - 0.1851970000 0.6451210000 0.0095505800 - 0.1856810000 0.6372430000 0.0095119100 - 0.1861660000 0.6484540000 0.0096393100 - 0.1866540000 0.6559030000 0.0097349600 - 0.1871430000 0.6480900000 0.0096780300 - 0.1876340000 0.6518460000 0.0096847900 - 0.1881270000 0.6168750000 0.0093615800 - 0.1886220000 0.6568590000 0.0098667800 - 0.1891190000 0.6278800000 0.0095116300 - 0.1896180000 0.6542310000 0.0097937900 - 0.1901190000 0.6161870000 0.0094203600 - 0.1906210000 0.6302730000 0.0095372400 - 0.1911260000 0.6315810000 0.0096071100 - 0.1916330000 0.6330500000 0.0095897600 - 0.1921420000 0.6461380000 0.0098335100 - 0.1926530000 0.6409020000 0.0097469400 - 0.1931660000 0.6325660000 0.0097392900 - 0.1936810000 0.6722530000 0.0101404000 - 0.1941980000 0.6367230000 0.0097573000 - 0.1947170000 0.6418340000 0.0098287700 - 0.1952390000 0.6315660000 0.0097223700 - 0.1957620000 0.6329870000 0.0097772900 - 0.1962870000 0.6358040000 0.0098107600 - 0.1968150000 0.6523920000 0.0100704000 - 0.1973450000 0.6251520000 0.0098247900 - 0.1978760000 0.6405460000 0.0098966900 - 0.1984100000 0.6441030000 0.0099935600 - 0.1989470000 0.6430800000 0.0099798500 - 0.1994850000 0.6451180000 0.0100421000 - 0.2000250000 0.6118440000 0.0096411400 - 0.2005680000 0.6129990000 0.0096834500 - 0.2011130000 0.6330560000 0.0099697600 - 0.2016600000 0.6433630000 0.0100650000 - 0.2022100000 0.6198270000 0.0097464100 - 0.2027610000 0.6343180000 0.0099789700 - 0.2033150000 0.6250140000 0.0099285300 - 0.2038710000 0.6210020000 0.0098223700 - 0.2044300000 0.6210030000 0.0098522900 - 0.2049910000 0.6192400000 0.0098631000 - 0.2055540000 0.6290070000 0.0099661500 - 0.2061190000 0.6242160000 0.0099617700 - 0.2066870000 0.6158110000 0.0099229800 - 0.2072570000 0.6422050000 0.0102852000 - 0.2078290000 0.6071110000 0.0097946300 - 0.2084040000 0.5940340000 0.0096354300 - 0.2089810000 0.6071700000 0.0098623800 - 0.2095610000 0.6139020000 0.0099429100 - 0.2101430000 0.6180880000 0.0099462400 - 0.2107270000 0.6059080000 0.0098726400 - 0.2113140000 0.6189020000 0.0100270000 - 0.2119040000 0.6168330000 0.0099549000 - 0.2124950000 0.6092530000 0.0098644000 - 0.2130900000 0.6106230000 0.0099392700 - 0.2136860000 0.6253190000 0.0101581000 - 0.2142860000 0.5937240000 0.0096500800 - 0.2148880000 0.6107830000 0.0099897800 - 0.2154920000 0.6103940000 0.0100153000 - 0.2160990000 0.5958640000 0.0098561800 - 0.2167080000 0.5945760000 0.0098123300 - 0.2173200000 0.6116010000 0.0099718700 - 0.2179350000 0.5892250000 0.0097261800 - 0.2185520000 0.6077990000 0.0099886900 - 0.2191720000 0.5871980000 0.0097902300 - 0.2197950000 0.6097440000 0.0100385000 - 0.2204200000 0.5976870000 0.0099408800 - 0.2210480000 0.6163180000 0.0101556000 - 0.2216780000 0.5939800000 0.0099060100 - 0.2223120000 0.6025720000 0.0100036000 - 0.2229480000 0.5984860000 0.0099563200 - 0.2235860000 0.6011660000 0.0099977600 - 0.2242280000 0.5934770000 0.0099519300 - 0.2248720000 0.5980510000 0.0100402000 - 0.2255190000 0.5885300000 0.0098864700 - 0.2261690000 0.5977770000 0.0100451000 - 0.2268210000 0.5912650000 0.0099989000 - 0.2274770000 0.5853150000 0.0099252000 - 0.2281350000 0.5781480000 0.0097612100 - 0.2287960000 0.5784410000 0.0098194300 - 0.2294600000 0.5738520000 0.0097352700 - 0.2301270000 0.5692700000 0.0097121100 - 0.2307970000 0.5834270000 0.0099291900 - 0.2314700000 0.5764720000 0.0098490200 - 0.2321450000 0.5537320000 0.0095531100 - 0.2328240000 0.5671500000 0.0097803600 - 0.2335060000 0.5625890000 0.0096750600 - 0.2341900000 0.5637310000 0.0096888800 - 0.2348780000 0.5640550000 0.0096747500 - 0.2355690000 0.5566980000 0.0095852600 - 0.2362620000 0.5695520000 0.0098087100 - 0.2369590000 0.5611270000 0.0097439400 - 0.2376590000 0.5464420000 0.0095272600 - 0.2383620000 0.5468830000 0.0095641300 - 0.2390680000 0.5683290000 0.0098204300 - 0.2397780000 0.5529960000 0.0096440300 - 0.2404900000 0.5587760000 0.0097400800 - 0.2412060000 0.5401180000 0.0094815700 - 0.2419240000 0.5365920000 0.0094617700 - 0.2426460000 0.5369340000 0.0094595300 - 0.2433720000 0.5488340000 0.0096463600 - 0.2441000000 0.5346510000 0.0093995300 - 0.2448320000 0.5256610000 0.0093446500 - 0.2455670000 0.5236900000 0.0093014900 - 0.2463060000 0.5217600000 0.0092963300 - 0.2470470000 0.5363730000 0.0095619900 - 0.2477920000 0.5436740000 0.0095068100 - 0.2485410000 0.5071170000 0.0091562200 - 0.2492930000 0.4999150000 0.0090243500 - 0.2500480000 0.5258490000 0.0093633700 - 0.2508070000 0.5151620000 0.0092407000 - 0.2515690000 0.5133330000 0.0091874700 - 0.2523350000 0.4857070000 0.0088689000 - 0.2531040000 0.5101750000 0.0092440900 - 0.2538760000 0.4951150000 0.0090151800 - 0.2546530000 0.5004030000 0.0091104200 - 0.2554320000 0.5033120000 0.0091733400 - 0.2562160000 0.5018190000 0.0091721100 - 0.2570030000 0.4940080000 0.0090076200 - 0.2577940000 0.4652390000 0.0086472000 - 0.2585880000 0.4884990000 0.0089667100 - 0.2593860000 0.4860460000 0.0090486500 - 0.2601870000 0.4727900000 0.0087479200 - 0.2609930000 0.4770020000 0.0088678400 - 0.2618020000 0.4606310000 0.0086346300 - 0.2626150000 0.4573520000 0.0085854000 - 0.2634310000 0.4596690000 0.0086408600 - 0.2642520000 0.4583820000 0.0086000500 - 0.2650760000 0.4532550000 0.0086079600 - 0.2659050000 0.4485410000 0.0084718700 - 0.2667370000 0.4390160000 0.0084000100 - 0.2675730000 0.4486140000 0.0085130500 - 0.2684130000 0.4460620000 0.0085466200 - 0.2692560000 0.4284950000 0.0083179500 - 0.2701040000 0.4379820000 0.0084130700 - 0.2709560000 0.4235110000 0.0082473600 - 0.2718120000 0.4124030000 0.0080969600 - 0.2726720000 0.4192180000 0.0081894700 - 0.2735360000 0.4155820000 0.0080998000 - 0.2744040000 0.4047200000 0.0080210900 - 0.2752770000 0.4121050000 0.0080963800 - 0.2761530000 0.4148850000 0.0081204800 - 0.2770340000 0.3976860000 0.0079098400 - 0.2779190000 0.3941810000 0.0078828800 - 0.2788080000 0.4072820000 0.0080882600 - 0.2797020000 0.3824020000 0.0077673200 - 0.2805990000 0.3807990000 0.0077541900 - 0.2815010000 0.3832910000 0.0077486300 - 0.2824080000 0.3756810000 0.0077015600 - 0.2833190000 0.3534090000 0.0073841800 - 0.2842340000 0.3483260000 0.0073446300 - 0.2851530000 0.3547730000 0.0073708500 - 0.2860780000 0.3398820000 0.0071720800 - 0.2870060000 0.3498170000 0.0073611900 - 0.2879390000 0.3450920000 0.0072861100 - 0.2888770000 0.3434220000 0.0073017000 - 0.2898190000 0.3338730000 0.0071955700 - 0.2907660000 0.3198580000 0.0069775300 - 0.2917180000 0.3164100000 0.0069073200 - 0.2926740000 0.3082800000 0.0067407400 - 0.2936350000 0.3184840000 0.0069385400 - 0.2946010000 0.2970430000 0.0066727600 - 0.2955710000 0.2969410000 0.0066335900 - 0.2965470000 0.2921440000 0.0065998500 - 0.2975270000 0.2899100000 0.0065716300 - 0.2985120000 0.2755000000 0.0063548700 - 0.2995020000 0.2852390000 0.0065377400 - 0.3004960000 0.2707630000 0.0062916200 - 0.3014960000 0.2686870000 0.0062971700 - 0.3025010000 0.2764950000 0.0064141900 - 0.3035110000 0.2631090000 0.0062413800 - 0.3045260000 0.2610320000 0.0062016700 - 0.3055460000 0.2457540000 0.0060088100 - 0.3065710000 0.2440190000 0.0059607200 - 0.3076010000 0.2416830000 0.0059614200 - 0.3086370000 0.2426300000 0.0059581900 - 0.3096770000 0.2365220000 0.0058394900 - 0.3107230000 0.2254500000 0.0056724300 - 0.3117750000 0.2383070000 0.0058860700 - 0.3128310000 0.2255380000 0.0056778100 - 0.3138930000 0.2197840000 0.0056298700 - 0.3149610000 0.2153870000 0.0055032500 - 0.3160340000 0.2125640000 0.0054832900 - 0.3171120000 0.2168940000 0.0055800600 - 0.3181960000 0.2037540000 0.0053770900 - 0.3192850000 0.2096720000 0.0054795700 - 0.3203800000 0.2080720000 0.0054587900 - 0.3214810000 0.1999950000 0.0053426700 - 0.3225880000 0.2025950000 0.0053841100 - 0.3237000000 0.2012510000 0.0053951900 - 0.3248180000 0.2009320000 0.0053375400 - 0.3259410000 0.1948790000 0.0052250400 - 0.3270710000 0.1941250000 0.0052427500 - 0.3282060000 0.1936580000 0.0052246000 - 0.3293480000 0.2031960000 0.0053662900 - 0.3304950000 0.1922910000 0.0051784000 - 0.3316480000 0.1931200000 0.0052393400 - 0.3328080000 0.1880110000 0.0051249700 - 0.3339730000 0.1955820000 0.0052667600 - 0.3351450000 0.1958080000 0.0052572900 - 0.3363220000 0.1904180000 0.0051622600 - 0.3375060000 0.1882420000 0.0051269000 - 0.3386970000 0.1940240000 0.0052358800 - 0.3398930000 0.1936130000 0.0052107900 - 0.3410960000 0.2002310000 0.0053435600 - 0.3423050000 0.1915370000 0.0051872800 - 0.3435210000 0.1848860000 0.0051023600 - 0.3447430000 0.1886470000 0.0051727500 - 0.3459720000 0.1892260000 0.0051700900 - 0.3472070000 0.1894500000 0.0051542900 - 0.3484490000 0.1939320000 0.0053045300 - 0.3496980000 0.1875590000 0.0051271500 - 0.3509530000 0.1985200000 0.0052917800 - 0.3522150000 0.1892110000 0.0051589200 - 0.3534840000 0.1955050000 0.0052520100 - 0.3547600000 0.1910400000 0.0052088800 - 0.3560430000 0.1858880000 0.0050868500 - 0.3573330000 0.1911820000 0.0051920700 - 0.3586290000 0.1933290000 0.0052499500 - 0.3599330000 0.1909120000 0.0052355100 - 0.3612440000 0.1841550000 0.0050694900 - 0.3625620000 0.1926200000 0.0052135300 - 0.3638880000 0.1841860000 0.0051101600 - 0.3652200000 0.1767180000 0.0049978200 - 0.3665600000 0.1786440000 0.0050096400 - 0.3679080000 0.1825640000 0.0050871400 - 0.3692620000 0.1763680000 0.0049717700 - 0.3706250000 0.1714510000 0.0049114500 - 0.3719940000 0.1636920000 0.0047961500 - 0.3733720000 0.1659550000 0.0048132600 - 0.3747570000 0.1689970000 0.0048685900 - 0.3761500000 0.1617580000 0.0047766000 - 0.3775500000 0.1524690000 0.0045973200 - 0.3789590000 0.1490820000 0.0045675800 - 0.3803750000 0.1457750000 0.0045125400 - 0.3817990000 0.1442540000 0.0044923300 - 0.3832320000 0.1404380000 0.0044429200 - 0.3846720000 0.1390770000 0.0044069100 - 0.3861210000 0.1279110000 0.0042296600 - 0.3875770000 0.1212870000 0.0041073000 - 0.3890420000 0.1164060000 0.0040034100 - 0.3905160000 0.1179760000 0.0040630500 - 0.3919970000 0.1171900000 0.0040334900 - 0.3934880000 0.1028250000 0.0037459400 - 0.3949860000 0.1074540000 0.0038800000 - 0.3964930000 0.0937941000 0.0036150100 - 0.3980090000 0.0917835000 0.0035951900 - 0.3995340000 0.0851818000 0.0034207700 - 0.4010670000 0.0816513000 0.0033748100 - 0.4026090000 0.0749277000 0.0032652000 - 0.4041600000 0.0694071000 0.0031046800 - 0.4057210000 0.0658407000 0.0030047500 - 0.4072900000 0.0588130000 0.0028535000 - 0.4088680000 0.0576435000 0.0028365200 - 0.4104550000 0.0492701000 0.0026144100 - 0.4120520000 0.0457286000 0.0025384900 - 0.4136580000 0.0441065000 0.0025042700 - 0.4152740000 0.0363506000 0.0022885500 - 0.4168990000 0.0355030000 0.0022483500 - 0.4185330000 0.0368358000 0.0022977800 - 0.4201770000 0.0295313000 0.0020816900 - 0.4218310000 0.0245506000 0.0019220800 - 0.4234950000 0.0223490000 0.0018345100 - 0.4251680000 0.0190743000 0.0017217800 - 0.4268520000 0.0192426000 0.0017265300 - 0.4285450000 0.0197984000 0.0017420900 - 0.4302490000 0.0147931000 0.0015667700 - 0.4319620000 0.0135225000 0.0014973200 - 0.4336860000 0.0135138000 0.0015057000 - 0.4354210000 0.0115326000 0.0014092100 - 0.4371650000 0.0094757000 0.0013173800 - 0.4389210000 0.0062075400 0.0011555200 - 0.4406860000 0.0078734600 0.0012312900 - 0.4424630000 0.0066580500 0.0011806700 - 0.4442500000 0.0079308900 0.0012536000 - 0.4460480000 0.0076187000 0.0012319400 - 0.4478570000 0.0053951800 0.0011111900 - 0.4496780000 0.0046622500 0.0010672700 - 0.4515090000 0.0024646800 0.0009129800 - 0.4533510000 0.0063284200 0.0011694100 - 0.4552050000 0.0043364300 0.0010433400 - 0.4570700000 0.0049012300 0.0010741100 - 0.4589470000 0.0043931900 0.0010384700 - 0.4608350000 0.0067581100 0.0011889200 - 0.4627350000 0.0053351500 0.0011123500 - 0.4646460000 0.0065700100 0.0011840100 - 0.4665700000 0.0076171800 0.0012349600 - 0.4685050000 0.0078465900 0.0012397800 - 0.4704530000 0.0096253700 0.0013231000 - 0.4724130000 0.0105303000 0.0013723900 - 0.4743850000 0.0105175000 0.0013709000 - 0.4763690000 0.0110166000 0.0014049100 - 0.4783660000 0.0136702000 0.0015064200 - 0.4803750000 0.0137035000 0.0015212300 - 0.4823970000 0.0149983000 0.0015651700 - 0.4844320000 0.0180374000 0.0016823800 - 0.4864800000 0.0228847000 0.0018553600 - 0.4885410000 0.0256035000 0.0019409300 - 0.4906150000 0.0337665000 0.0022049000 - 0.4927020000 0.0323731000 0.0021638200 - 0.4948020000 0.0387303000 0.0023333100 - 0.4969160000 0.0406215000 0.0024033500 - 0.4990440000 0.0513221000 0.0026822100 - 0.5011850000 0.0559387000 0.0027935200 - 0.5033400000 0.0684816000 0.0030580200 - 0.5055090000 0.0730981000 0.0031594800 - 0.5076920000 0.0835820000 0.0033465900 - 0.5098890000 0.0900047000 0.0034744500 - 0.5121010000 0.1049470000 0.0037708800 - 0.5143270000 0.1121340000 0.0038850000 - 0.5165670000 0.1301930000 0.0042347800 - 0.5188220000 0.1337220000 0.0042466000 - 0.5210920000 0.1546800000 0.0046092500 - 0.5233770000 0.1700200000 0.0048266300 - 0.5256770000 0.1809680000 0.0049759300 - 0.5279920000 0.1960560000 0.0052146200 - 0.5303230000 0.2141390000 0.0055117900 - 0.5326690000 0.2310250000 0.0057223900 - 0.5350300000 0.2439360000 0.0058937900 - 0.5374080000 0.2606330000 0.0061097300 - 0.5398010000 0.2743850000 0.0062830300 - 0.5422100000 0.3010360000 0.0065962800 - 0.5446350000 0.3210930000 0.0068430400 - 0.5470770000 0.3278600000 0.0069572700 - 0.5495350000 0.3434080000 0.0071402500 - 0.5520100000 0.3631460000 0.0073499000 - 0.5545010000 0.3792230000 0.0075503500 - 0.5570090000 0.3919540000 0.0076411100 - 0.5595350000 0.4108540000 0.0078913300 - 0.5620770000 0.4283020000 0.0080404400 - 0.5646370000 0.4518300000 0.0083736500 - 0.5672150000 0.4436830000 0.0082226300 - 0.5698100000 0.4781510000 0.0086096500 - 0.5724230000 0.4979310000 0.0088615800 - 0.5750540000 0.4981750000 0.0088587200 - 0.5777040000 0.5089570000 0.0089199800 - 0.5803710000 0.5362230000 0.0092226600 - 0.5830570000 0.5319110000 0.0091741800 - 0.5857620000 0.5461550000 0.0093249000 - 0.5884860000 0.5536020000 0.0093534700 - 0.5912280000 0.5798190000 0.0096601700 - 0.5939900000 0.5837880000 0.0096866300 - 0.5967720000 0.5904500000 0.0096955900 - 0.5995730000 0.5971420000 0.0098114700 - 0.6023930000 0.6098310000 0.0099711700 - 0.6052340000 0.6467700000 0.0103494000 - 0.6080950000 0.6468100000 0.0103023000 - 0.6109760000 0.6412360000 0.0102679000 - 0.6138780000 0.6682350000 0.0106020000 - 0.6168000000 0.6630540000 0.0104038000 - 0.6197430000 0.6729180000 0.0105172000 - 0.6227080000 0.6874670000 0.0107085000 - 0.6256930000 0.6911650000 0.0107258000 - 0.6287010000 0.6992010000 0.0107589000 - 0.6317300000 0.7356410000 0.0112009000 - 0.6347810000 0.7182020000 0.0109651000 - 0.6378540000 0.7258120000 0.0110427000 - 0.6409490000 0.7326990000 0.0111846000 - 0.6440670000 0.7353980000 0.0111235000 - 0.6472080000 0.7468270000 0.0113102000 - 0.6503720000 0.7474300000 0.0112506000 - 0.6535590000 0.7652710000 0.0114692000 - 0.6567700000 0.7704820000 0.0114942000 - 0.6600040000 0.7685840000 0.0114141000 - 0.6632620000 0.7806660000 0.0115365000 - 0.6665450000 0.7749690000 0.0114329000 - 0.6698510000 0.7968750000 0.0117492000 - 0.6731830000 0.7898190000 0.0116338000 - 0.6765400000 0.7876150000 0.0115358000 - 0.6799210000 0.8190460000 0.0119197000 - 0.6833280000 0.8008630000 0.0115867000 - 0.6867610000 0.8223790000 0.0118416000 - 0.6902200000 0.8004570000 0.0116480000 - 0.6937040000 0.7902720000 0.0114908000 - 0.6972160000 0.8325020000 0.0120150000 - 0.7007540000 0.8252540000 0.0118742000 - 0.7043190000 0.8329880000 0.0120047000 - 0.7079110000 0.8276480000 0.0119163000 - 0.7115310000 0.8333310000 0.0119912000 - 0.7151790000 0.8379890000 0.0120661000 - 0.7188550000 0.8366440000 0.0119914000 - 0.7225590000 0.8353810000 0.0119631000 - 0.7262920000 0.8462020000 0.0119346000 - 0.7300540000 0.8444560000 0.0120219000 - 0.7338450000 0.8767970000 0.0124183000 - 0.7376660000 0.8621040000 0.0122376000 - 0.7415170000 0.8727730000 0.0123456000 - 0.7453980000 0.8760530000 0.0124194000 - 0.7493090000 0.8538420000 0.0121120000 - 0.7532520000 0.8815020000 0.0124752000 - 0.7572250000 0.8862980000 0.0124783000 - 0.7612310000 0.8664640000 0.0122482000 - 0.7652680000 0.8861740000 0.0124456000 - 0.7693370000 0.8802190000 0.0124033000 - 0.7734390000 0.8761450000 0.0122630000 - 0.7775730000 0.8920140000 0.0124723000 - 0.7817410000 0.8758080000 0.0122385000 - 0.7859430000 0.8662250000 0.0121332000 - 0.7901780000 0.8948590000 0.0124961000 - 0.7944480000 0.8793230000 0.0122900000 - 0.7987530000 0.8906860000 0.0123820000 - 0.8030920000 0.8700710000 0.0122142000 - 0.8074670000 0.8921130000 0.0123642000 - 0.8118780000 0.8838610000 0.0122717000 - 0.8163250000 0.8852110000 0.0123098000 - 0.8208090000 0.9023810000 0.0125131000 - 0.8253300000 0.8932090000 0.0124025000 - 0.8298880000 0.8880420000 0.0123339000 - 0.8344840000 0.8775610000 0.0121884000 - 0.8391190000 0.9049700000 0.0125807000 - 0.8437920000 0.8935110000 0.0123909000 - 0.8485040000 0.9024020000 0.0124728000 - 0.8532560000 0.8954260000 0.0124495000 - 0.8580480000 0.8804120000 0.0121873000 - 0.8628800000 0.8887400000 0.0122616000 - 0.8677530000 0.8944820000 0.0123386000 - 0.8726680000 0.8791170000 0.0121681000 - 0.8776250000 0.8843070000 0.0122284000 - 0.8826240000 0.8697340000 0.0120935000 - 0.8876660000 0.8916090000 0.0123976000 - 0.8927510000 0.8720590000 0.0121138000 - 0.8978800000 0.8628220000 0.0120310000 - 0.9030530000 0.8669140000 0.0120630000 - 0.9082710000 0.8816130000 0.0122048000 - 0.9135340000 0.8573030000 0.0119960000 - 0.9188440000 0.8629390000 0.0120386000 - 0.9241990000 0.8610360000 0.0119964000 - 0.9296020000 0.8606260000 0.0119677000 - 0.9350520000 0.8575870000 0.0119299000 - 0.9405510000 0.8156320000 0.0114533000 - 0.9460980000 0.8462460000 0.0118583000 - 0.9516940000 0.8214460000 0.0115875000 - 0.9573400000 0.8004130000 0.0113428000 - 0.9630360000 0.7877540000 0.0112784000 - 0.9687830000 0.7828740000 0.0112134000 - 0.9745820000 0.7613300000 0.0109850000 - 0.9804330000 0.7380910000 0.0107068000 - 0.9863370000 0.7365560000 0.0107819000 - 0.9922950000 0.7148410000 0.0105609000 - 0.9983070000 0.6740860000 0.0101504000 - 1.0043700000 0.6543470000 0.0100207000 - 1.0104900000 0.6189190000 0.0095520700 - 1.0166700000 0.5906250000 0.0093280800 - 1.0229100000 0.5588300000 0.0090223900 - 1.0292000000 0.5237470000 0.0085914200 - 1.0355500000 0.5125840000 0.0085012200 - 1.0419600000 0.4857050000 0.0082489500 - 1.0484300000 0.4894770000 0.0082818000 - 1.0549600000 0.4837510000 0.0082110200 - 1.0615500000 0.4868330000 0.0082638800 - 1.0682000000 0.5244200000 0.0086017200 - 1.0749200000 0.5375020000 0.0086901500 - 1.0817000000 0.5780480000 0.0091468900 - 1.0885400000 0.6026170000 0.0094199000 - 1.0954500000 0.6241780000 0.0095571200 - 1.1024200000 0.6662900000 0.0099437800 - 1.1094700000 0.7104750000 0.0104011000 - 1.1165800000 0.7373280000 0.0106533000 - 1.1237500000 0.7681470000 0.0109742000 - 1.1310000000 0.7890630000 0.0111021000 - 1.1383200000 0.8064960000 0.0112551000 - 1.1457100000 0.8273010000 0.0113718000 - 1.1531700000 0.8318400000 0.0114338000 - 1.1607000000 0.8581590000 0.0116489000 - 1.1683100000 0.8588790000 0.0116946000 - 1.1759900000 0.8826170000 0.0119054000 - 1.1837500000 0.8851580000 0.0119673000 - 1.1915900000 0.8929950000 0.0119578000 - 1.1995000000 0.9040880000 0.0120810000 - 1.2074900000 0.9064460000 0.0120937000 - 1.2155700000 0.9218980000 0.0122492000 - 1.2237200000 0.9105310000 0.0121009000 - 1.2319600000 0.9178100000 0.0122246000 - 1.2402800000 0.9373620000 0.0123772000 - 1.2486800000 0.9239270000 0.0122370000 - 1.2571700000 0.9061390000 0.0119797000 - 1.2657500000 0.9549550000 0.0125805000 - 1.2744200000 0.9360940000 0.0122951000 - 1.2831700000 0.9535140000 0.0124600000 - 1.2920200000 0.9628530000 0.0126062000 - 1.3009600000 0.9447530000 0.0123464000 - 1.3099900000 0.9442880000 0.0123893000 - 1.3191100000 0.9503510000 0.0123617000 - 1.3283300000 0.9396270000 0.0122386000 - 1.3376500000 0.9394060000 0.0122975000 - 1.3470600000 0.9398680000 0.0122608000 - 1.3565800000 0.9387000000 0.0121840000 - 1.3662000000 0.9541890000 0.0123643000 - 1.3759200000 0.9460330000 0.0122159000 - 1.3857400000 0.9623950000 0.0124611000 - 1.3956700000 0.9438030000 0.0123034000 - 1.4019300000 0.9592640000 0.0247807000 - 1.4044400000 0.9135650000 0.0235854000 - 1.4069700000 0.9445070000 0.0247608000 - 1.4095000000 0.9632440000 0.0251395000 - 1.4120300000 0.9815000000 0.0253126000 - 1.4145800000 0.9386600000 0.0240308000 - 1.4171300000 0.9485570000 0.0245540000 - 1.4196800000 0.9251830000 0.0240687000 - 1.4222500000 0.9094210000 0.0238212000 - 1.4248200000 0.9657730000 0.0251165000 - 1.4273900000 0.9449060000 0.0248960000 - 1.4299800000 0.9651640000 0.0249968000 - 1.4325700000 0.9799200000 0.0254148000 - 1.4351700000 0.9851150000 0.0255357000 - 1.4377800000 0.9698740000 0.0250120000 - 1.4403900000 0.9514070000 0.0246799000 - 1.4430100000 0.9755230000 0.0250867000 - 1.4456400000 0.9548780000 0.0245455000 - 1.4482700000 0.9479080000 0.0242858000 - 1.4509100000 1.0168600000 0.0258639000 - 1.4535600000 0.9329350000 0.0242691000 - 1.4562200000 0.9806260000 0.0249191000 - 1.4588800000 0.9209430000 0.0236443000 - 1.4615500000 0.9524660000 0.0246310000 - 1.4642300000 0.9556290000 0.0246301000 - 1.4669100000 0.9470730000 0.0245761000 - 1.4696100000 0.9823250000 0.0254478000 - 1.4723100000 0.9636330000 0.0248635000 - 1.4750100000 0.9999240000 0.0256308000 - 1.4777300000 0.9771720000 0.0250829000 - 1.4804500000 0.9399580000 0.0242063000 - 1.4831800000 0.9720940000 0.0252898000 - 1.4859200000 0.9629310000 0.0248524000 - 1.4886700000 1.0039300000 0.0257570000 - 1.4914200000 0.9796440000 0.0252425000 - 1.4941800000 0.9775470000 0.0249624000 - 1.4969500000 0.9558080000 0.0247690000 - 1.4997200000 0.9448640000 0.0245844000 - 1.5025100000 0.9604090000 0.0246848000 - 1.5053000000 0.9744850000 0.0248092000 - 1.5081000000 0.9756710000 0.0253060000 - 1.5109100000 0.9266900000 0.0238917000 - 1.5137200000 0.9547240000 0.0245760000 - 1.5165400000 0.9408560000 0.0241217000 - 1.5193700000 0.9407810000 0.0243170000 - 1.5222100000 0.9413990000 0.0240252000 - 1.5250600000 0.9592950000 0.0244268000 - 1.5279100000 0.9694530000 0.0246551000 - 1.5307800000 0.9800460000 0.0251141000 - 1.5336500000 0.9312380000 0.0239303000 - 1.5365300000 0.9669940000 0.0249974000 - 1.5394100000 0.9864080000 0.0253112000 - 1.5423100000 0.9160270000 0.0238109000 - 1.5452100000 0.9674450000 0.0248461000 - 1.5481200000 0.9639670000 0.0245769000 - 1.5510400000 0.9711460000 0.0243848000 - 1.5539700000 0.9865100000 0.0251839000 - 1.5569100000 0.9585160000 0.0245663000 - 1.5598500000 0.9490040000 0.0244007000 - 1.5628000000 0.9507770000 0.0245336000 - 1.5657600000 1.0004300000 0.0258088000 - 1.5687300000 0.9576060000 0.0247281000 - 1.5717100000 0.9548090000 0.0245664000 - 1.5747000000 0.9538990000 0.0244941000 - 1.5776900000 0.9592470000 0.0246887000 - 1.5807000000 0.9368200000 0.0238826000 - 1.5837100000 0.9540040000 0.0243632000 - 1.5867300000 0.9380740000 0.0240034000 - 1.5897600000 0.9758390000 0.0248957000 - 1.5928000000 0.9110140000 0.0233662000 - 1.5958500000 0.9515420000 0.0243614000 - 1.5989000000 0.9376490000 0.0241828000 - 1.6019700000 0.9534140000 0.0246137000 - 1.6050400000 0.9342430000 0.0240555000 - 1.6081200000 0.9107270000 0.0234301000 - 1.6112100000 0.9584930000 0.0245296000 - 1.6143100000 0.9684040000 0.0246247000 - 1.6174200000 0.9792000000 0.0250197000 - 1.6205400000 0.9378450000 0.0241833000 - 1.6236700000 0.9134850000 0.0236865000 - 1.6268000000 0.9179520000 0.0235823000 - 1.6299500000 0.9810250000 0.0252688000 - 1.6331000000 0.9770440000 0.0254425000 - 1.6362700000 0.9459700000 0.0244269000 - 1.6394400000 0.9397210000 0.0242894000 - 1.6426200000 0.9225450000 0.0237938000 - 1.6458100000 0.9279290000 0.0241978000 - 1.6490100000 0.9593250000 0.0244302000 - 1.6522200000 0.9141680000 0.0236279000 - 1.6554400000 0.9540250000 0.0243815000 - 1.6586700000 0.9492580000 0.0246251000 - 1.6619100000 0.8918570000 0.0233761000 - 1.6651500000 0.9042670000 0.0235832000 - 1.6684100000 0.8919390000 0.0233148000 - 1.6716800000 0.9217630000 0.0238562000 - 1.6749500000 0.9206860000 0.0239360000 - 1.6782400000 0.9132040000 0.0237442000 - 1.6815400000 0.9048590000 0.0237769000 - 1.6848400000 0.8811800000 0.0231559000 - 1.6881600000 0.8511180000 0.0226281000 - 1.6914800000 0.8676330000 0.0226024000 - 1.6948200000 0.8643760000 0.0227342000 - 1.6981600000 0.8952740000 0.0233521000 - 1.7015100000 0.8881050000 0.0229452000 - 1.7048800000 0.8729110000 0.0228805000 - 1.7082500000 0.8639660000 0.0225780000 - 1.7116400000 0.8684880000 0.0228421000 - 1.7150300000 0.8771430000 0.0228564000 - 1.7184400000 0.8750810000 0.0229720000 - 1.7218500000 0.8854450000 0.0234122000 - 1.7252800000 0.8894990000 0.0233647000 - 1.7287100000 0.8401160000 0.0221147000 - 1.7321600000 0.8561840000 0.0225083000 - 1.7356100000 0.8706620000 0.0227535000 - 1.7390800000 0.8880850000 0.0232324000 - 1.7425500000 0.8616530000 0.0225454000 - 1.7460400000 0.8783360000 0.0231453000 - 1.7495400000 0.8697560000 0.0225765000 - 1.7530500000 0.8709880000 0.0229575000 - 1.7565600000 0.8825950000 0.0232338000 - 1.7600900000 0.8942960000 0.0231445000 - 1.7636300000 0.8887310000 0.0232293000 - 1.7671800000 0.8992880000 0.0234208000 - 1.7707400000 0.8988750000 0.0232567000 - 1.7743200000 0.8531010000 0.0223224000 - 1.7779000000 0.8301600000 0.0220691000 - 1.7814900000 0.9162670000 0.0236004000 - 1.7851000000 0.8850950000 0.0231079000 - 1.7887100000 0.8585540000 0.0223554000 - 1.7923400000 0.9032040000 0.0233552000 - 1.7959800000 0.9186750000 0.0237397000 - 1.7996300000 0.8843230000 0.0228309000 - 1.8032800000 0.8961370000 0.0231490000 - 1.8069600000 0.9107420000 0.0236993000 - 1.8106400000 0.9136750000 0.0235211000 - 1.8143300000 0.9081960000 0.0233922000 - 1.8180400000 0.9320790000 0.0241251000 - 1.8217500000 0.8722850000 0.0227046000 - 1.8254800000 0.8582490000 0.0223063000 - 1.8292200000 0.9404840000 0.0241715000 - 1.8329700000 0.8892120000 0.0227926000 - 1.8367300000 0.9265900000 0.0239280000 - 1.8405000000 0.9757060000 0.0247883000 - 1.8442900000 0.9260930000 0.0238850000 - 1.8480900000 0.9380790000 0.0237701000 - 1.8518900000 0.9184410000 0.0234116000 - 1.8557100000 0.9242720000 0.0238062000 - 1.8595500000 0.9776970000 0.0246730000 - 1.8633900000 0.9304790000 0.0235921000 - 1.8672500000 0.9490040000 0.0241295000 - 1.8711100000 0.9310270000 0.0235198000 - 1.8749900000 0.9345770000 0.0237303000 - 1.8788900000 0.9208970000 0.0234715000 - 1.8827900000 0.9255390000 0.0235830000 - 1.8867100000 0.9139180000 0.0231227000 - 1.8906400000 0.9725000000 0.0244984000 - 1.8945800000 0.9623530000 0.0245530000 - 1.8985300000 0.9220900000 0.0236906000 - 1.9025000000 0.9836100000 0.0246935000 - 1.9064700000 0.9374600000 0.0238940000 - 1.9104600000 0.9468650000 0.0240947000 - 1.9144700000 0.9559380000 0.0243550000 - 1.9184800000 0.9629190000 0.0244577000 - 1.9225100000 0.9591440000 0.0242114000 - 1.9265500000 0.9689060000 0.0241747000 - 1.9306100000 0.9547260000 0.0241415000 - 1.9346700000 0.9877600000 0.0247876000 - 1.9387500000 0.9632370000 0.0243453000 - 1.9428400000 0.9546070000 0.0242363000 - 1.9469500000 0.9698420000 0.0245540000 - 1.9510700000 0.9031820000 0.0228894000 - 1.9552000000 0.9656310000 0.0243729000 - 1.9593400000 0.9498320000 0.0239203000 - 1.9635000000 0.9562270000 0.0240886000 - 1.9676700000 0.9425770000 0.0237672000 - 1.9718600000 0.9331910000 0.0236545000 - 1.9760500000 0.9989940000 0.0251295000 - 1.9802700000 0.9159930000 0.0229817000 - 1.9844900000 0.9679110000 0.0241795000 - 1.9887300000 0.9844360000 0.0248325000 - 1.9929800000 0.9167290000 0.0232135000 - 1.9972500000 0.9112620000 0.0232738000 - 2.0015200000 0.9294840000 0.0236099000 - 2.0058200000 0.9539440000 0.0241429000 - 2.0101200000 0.9453030000 0.0239074000 - 2.0144400000 0.9419770000 0.0239101000 - 2.0187800000 0.9959880000 0.0245893000 - 2.0231300000 0.9689600000 0.0244745000 - 2.0274900000 0.9142470000 0.0230484000 - 2.0318700000 0.9463370000 0.0239751000 - 2.0362600000 0.9374110000 0.0234970000 - 2.0406600000 0.9165970000 0.0232979000 - 2.0450800000 0.9491950000 0.0238393000 - 2.0495200000 0.9141200000 0.0231362000 - 2.0539600000 0.9179960000 0.0232484000 - 2.0584300000 0.9491030000 0.0239801000 - 2.0629000000 0.9826860000 0.0245257000 - 2.0674000000 0.9765780000 0.0246251000 - 2.0719000000 0.9440730000 0.0238260000 - 2.0764200000 0.9508600000 0.0237599000 - 2.0809600000 0.9196270000 0.0230540000 - 2.0855100000 0.9424950000 0.0234969000 - 2.0900800000 0.9531510000 0.0240119000 - 2.0946600000 0.9708800000 0.0245485000 - 2.0992500000 0.9511440000 0.0240343000 - 2.1038700000 0.9145220000 0.0228927000 - 2.1084900000 0.9371930000 0.0236286000 - 2.1131300000 0.9206700000 0.0232026000 - 2.1177900000 0.9123240000 0.0232568000 - 2.1224600000 0.9250150000 0.0234728000 - 2.1271500000 0.9546760000 0.0237558000 - 2.1318500000 0.9546510000 0.0237033000 - 2.1365700000 0.9596980000 0.0242383000 - 2.1413100000 0.9152220000 0.0231210000 - 2.1460600000 0.9164060000 0.0231871000 - 2.1508300000 0.9004370000 0.0228080000 - 2.1556100000 0.9465150000 0.0239682000 - 2.1604100000 0.9464290000 0.0239624000 - 2.1652200000 0.9311050000 0.0235431000 - 2.1700500000 0.9341210000 0.0236769000 - 2.1749000000 0.9678680000 0.0242565000 - 2.1797600000 0.8550180000 0.0219077000 - 2.1846400000 0.9094910000 0.0230705000 - 2.1895300000 0.9337420000 0.0234217000 - 2.1944500000 0.9016160000 0.0228216000 - 2.1993800000 0.8963200000 0.0228433000 - 2.2043200000 0.9297030000 0.0235084000 - 2.2092800000 0.9440470000 0.0236426000 - 2.2142600000 0.9089530000 0.0231651000 - 2.2192600000 0.8834140000 0.0225871000 - 2.2242700000 0.8564640000 0.0222803000 - 2.2293000000 0.8939870000 0.0228107000 - 2.2343500000 0.8806840000 0.0225667000 - 2.2394100000 0.8577640000 0.0219540000 - 2.2444900000 0.8989070000 0.0229261000 - 2.2495900000 0.8630530000 0.0224179000 - 2.2547000000 0.8502840000 0.0218177000 - 2.2598400000 0.8459770000 0.0218328000 - 2.2649900000 0.8439420000 0.0220465000 - 2.2701600000 0.8659500000 0.0224267000 - 2.2753400000 0.8250700000 0.0216004000 - 2.2805500000 0.8275510000 0.0218121000 - 2.2857700000 0.7979550000 0.0208482000 - 2.2910100000 0.8021910000 0.0211464000 - 2.2962600000 0.8308320000 0.0215972000 - 2.3015400000 0.8073500000 0.0212670000 - 2.3068300000 0.7853930000 0.0207942000 - 2.3121500000 0.7703350000 0.0205690000 - 2.3174800000 0.7410430000 0.0199944000 - 2.3228300000 0.7488110000 0.0199746000 - 2.3281900000 0.7398480000 0.0199162000 - 2.3335800000 0.6610480000 0.0184813000 - 2.3389800000 0.7099570000 0.0193555000 - 2.3444100000 0.6519540000 0.0184685000 - 2.3498500000 0.6513830000 0.0185711000 - 2.3553100000 0.6084900000 0.0175830000 - 2.3607900000 0.5778760000 0.0170979000 - 2.3662900000 0.5679720000 0.0168451000 - 2.3718100000 0.5592540000 0.0168393000 - 2.3773500000 0.5302940000 0.0165299000 - 2.3829100000 0.4630160000 0.0148066000 - 2.3884900000 0.4421750000 0.0144649000 - 2.3940800000 0.4293570000 0.0143990000 - 2.3997000000 0.3675160000 0.0130748000 - 2.4053400000 0.3383410000 0.0125427000 - 2.4109900000 0.3193220000 0.0120951000 - 2.4166700000 0.2958780000 0.0116134000 - 2.4223600000 0.2693860000 0.0109843000 - 2.4280800000 0.2537730000 0.0106267000 - 2.4338200000 0.2473240000 0.0104568000 - 2.4395800000 0.2455450000 0.0105195000 - 2.4453500000 0.2222360000 0.0098211400 - 2.4511500000 0.2277480000 0.0099875100 - 2.4569700000 0.2017940000 0.0092062400 - 2.4628100000 0.2323830000 0.0101837000 - 2.4686700000 0.2225490000 0.0097936700 - 2.4745500000 0.2385970000 0.0102979000 - 2.4804500000 0.2640300000 0.0108965000 - 2.4863800000 0.2837970000 0.0111472000 - 2.4923200000 0.3010840000 0.0115715000 - 2.4982900000 0.3432890000 0.0125621000 - 2.5042800000 0.3638800000 0.0129433000 - 2.5102800000 0.4151800000 0.0141039000 - 2.5163200000 0.4216280000 0.0140905000 - 2.5223700000 0.4639400000 0.0149010000 - 2.5284400000 0.4701140000 0.0149375000 - 2.5345400000 0.5355180000 0.0162615000 - 2.5406600000 0.5614410000 0.0169385000 - 2.5468000000 0.5937650000 0.0172447000 - 2.5529600000 0.6374340000 0.0181060000 - 2.5591500000 0.6278030000 0.0179970000 - 2.5653500000 0.6728680000 0.0186420000 - 2.5715800000 0.6907550000 0.0189458000 - 2.5778400000 0.7158640000 0.0193751000 - 2.5841100000 0.7618740000 0.0203713000 - 2.5904100000 0.7133570000 0.0191036000 - 2.5967300000 0.7456470000 0.0198635000 - 2.6030800000 0.7750530000 0.0204398000 - 2.6094500000 0.7508420000 0.0200781000 - 2.6158400000 0.8033730000 0.0211089000 - 2.6222500000 0.7693580000 0.0203470000 - 2.6286900000 0.7584600000 0.0202336000 - 2.6351600000 0.7892450000 0.0208009000 - 2.6416400000 0.7797150000 0.0203026000 - 2.6481500000 0.7483240000 0.0199086000 - 2.6546900000 0.7608350000 0.0202112000 - 2.6612500000 0.7621080000 0.0203159000 - 2.6678300000 0.7600920000 0.0200352000 - 2.6744400000 0.7628320000 0.0202908000 - 2.6810700000 0.7517260000 0.0200935000 - 2.6877300000 0.7489130000 0.0199400000 - 2.6944100000 0.7402930000 0.0198019000 - 2.7011100000 0.7074230000 0.0190785000 - 2.7078500000 0.7125910000 0.0190243000 - 2.7146000000 0.7189610000 0.0194376000 - 2.7213900000 0.7239160000 0.0192146000 - 2.7281900000 0.7084230000 0.0191145000 - 2.7350300000 0.7298650000 0.0195101000 - 2.7418900000 0.7605370000 0.0202923000 - 2.7487700000 0.7581320000 0.0199300000 - 2.7556800000 0.7982390000 0.0207566000 - 2.7626200000 0.7903370000 0.0206569000 - 2.7695800000 0.7979620000 0.0206781000 - 2.7765700000 0.8031070000 0.0207523000 - 2.7835900000 0.8243150000 0.0213118000 - 2.7906300000 0.8401400000 0.0214718000 - 2.7977000000 0.8528780000 0.0217281000 - 2.8048000000 0.8369330000 0.0211388000 - 2.8119200000 0.8854380000 0.0223653000 - 2.8190700000 0.8948050000 0.0224753000 - 2.8262500000 0.8837430000 0.0222193000 - 2.8334500000 0.8875760000 0.0222125000 - 2.8406900000 0.8645730000 0.0217760000 - 2.8479500000 0.8901790000 0.0223077000 - 2.8552300000 0.8846770000 0.0220150000 - 2.8625500000 0.8995910000 0.0224954000 - 2.8699000000 0.9305330000 0.0229008000 - 2.8772700000 0.9014280000 0.0225264000 - 2.8846700000 0.8887380000 0.0220394000 - 2.8921000000 0.9292740000 0.0228944000 - 2.8995600000 0.9039310000 0.0223250000 - 2.9070500000 0.9125260000 0.0224275000 - 2.9145600000 0.9098820000 0.0224207000 - 2.9221100000 0.9084670000 0.0225008000 - 2.9296800000 0.9113570000 0.0226147000 - 2.9372900000 0.8483220000 0.0212017000 - 2.9449200000 0.8801880000 0.0219961000 - 2.9525900000 0.9262880000 0.0228508000 - 2.9602800000 0.9536110000 0.0235776000 - 2.9680000000 0.9096290000 0.0224652000 - 2.9757600000 0.8953650000 0.0222927000 - 2.9835400000 0.9067730000 0.0227141000 - 2.9913600000 0.9132120000 0.0224204000 - 2.9992100000 0.9092000000 0.0224313000 - 3.0070800000 0.8983410000 0.0224401000 - 3.0149900000 0.8880630000 0.0220008000 - 3.0229300000 0.8928400000 0.0222215000 - 3.0309000000 0.8645110000 0.0217452000 - 3.0389000000 0.9178950000 0.0229595000 - 3.0469400000 0.8714180000 0.0218816000 - 3.0550000000 0.8745750000 0.0218609000 - 3.0631000000 0.8790440000 0.0219229000 - 3.0712300000 0.8308500000 0.0210681000 - 3.0794000000 0.8163540000 0.0208673000 - 3.0875900000 0.8256460000 0.0211076000 - 3.0958200000 0.8628530000 0.0216267000 - 3.1040800000 0.8449520000 0.0211708000 - 3.1123700000 0.8146480000 0.0209833000 - 3.1207000000 0.8030310000 0.0207883000 - 3.1290600000 0.7932670000 0.0202539000 - 3.1374600000 0.7873180000 0.0201087000 - 3.1458900000 0.8108630000 0.0210024000 - 3.1543500000 0.7675180000 0.0200975000 - 3.1628400000 0.7469700000 0.0198129000 - 3.1713800000 0.7076650000 0.0190439000 - 3.1799400000 0.6779230000 0.0185025000 - 3.1885400000 0.6752350000 0.0184675000 - 3.1971800000 0.6301410000 0.0177278000 - 3.2058500000 0.6001170000 0.0172730000 - 3.2145500000 0.5703070000 0.0165839000 - 3.2232900000 0.5101430000 0.0153783000 - 3.2320700000 0.4704880000 0.0145772000 - 3.2408800000 0.4002090000 0.0132835000 - 3.2497300000 0.3842960000 0.0131936000 - 3.2586200000 0.3517610000 0.0123947000 - 3.2675400000 0.3182900000 0.0117945000 - 3.2765000000 0.2819510000 0.0109806000 - 3.2854900000 0.2596060000 0.0105423000 - 3.2945200000 0.2266630000 0.0098057300 - 3.3035900000 0.2308950000 0.0099443300 - 3.3127000000 0.2093550000 0.0093710900 - 3.3218500000 0.1855170000 0.0087611300 - 3.3310300000 0.1954290000 0.0091253600 - 3.3402500000 0.1704780000 0.0084357100 - 3.3495100000 0.1778610000 0.0086007900 - 3.3588100000 0.1698150000 0.0083664000 - 3.3681400000 0.1844800000 0.0089251400 - 3.3775200000 0.2013360000 0.0090743100 - 3.3869300000 0.2095930000 0.0094569700 - 3.3963900000 0.2386920000 0.0100254000 - 3.4058800000 0.2675280000 0.0107380000 - 3.4154200000 0.3029590000 0.0113542000 - 3.4249900000 0.3705610000 0.0128808000 - 3.4346000000 0.4137250000 0.0136852000 - 3.4442600000 0.4645050000 0.0145876000 - 3.4539500000 0.5125510000 0.0156099000 - 3.4636900000 0.5678020000 0.0165431000 - 3.4734700000 0.6011130000 0.0172251000 - 3.4832900000 0.6448990000 0.0178822000 - 3.4931500000 0.6572180000 0.0179269000 - 3.5030500000 0.7114130000 0.0189913000 - 3.5129900000 0.7480650000 0.0196792000 - 3.5229800000 0.7361820000 0.0195526000 - 3.5330100000 0.7879220000 0.0205344000 - 3.5430800000 0.7452980000 0.0195491000 - 3.5532000000 0.7712040000 0.0201426000 - 3.5633600000 0.7670180000 0.0198477000 - 3.5735600000 0.7558110000 0.0196647000 - 3.5838100000 0.7435080000 0.0194330000 - 3.5941000000 0.7418830000 0.0196115000 - 3.6044400000 0.7609820000 0.0199325000 - 3.6148200000 0.7291470000 0.0191767000 - 3.6252400000 0.6903970000 0.0185369000 - 3.6357100000 0.6848980000 0.0185763000 - 3.6462300000 0.6675500000 0.0183615000 - 3.6567900000 0.6378760000 0.0177579000 - 3.6673900000 0.5823090000 0.0166996000 - 3.6780500000 0.5630870000 0.0162611000 - 3.6887500000 0.5483130000 0.0162056000 - 3.6994900000 0.5475730000 0.0161596000 - 3.7102900000 0.5504590000 0.0163414000 - 3.7211300000 0.5720430000 0.0168294000 - 3.7320200000 0.5508560000 0.0163556000 - 3.7429500000 0.5947430000 0.0172490000 - 3.7539400000 0.6132620000 0.0175086000 - 3.7649700000 0.5941350000 0.0168652000 - 3.7760500000 0.6582160000 0.0181185000 - 3.7871800000 0.6645880000 0.0182548000 - 3.7983600000 0.7024840000 0.0189475000 - 3.8095900000 0.7281690000 0.0194000000 - 3.8208700000 0.6830890000 0.0185543000 - 3.8322000000 0.7028670000 0.0190678000 - 3.8435800000 0.6362580000 0.0177979000 - 3.8550100000 0.6527870000 0.0183287000 - 3.8664900000 0.6238610000 0.0178627000 - 3.8780300000 0.5703100000 0.0165942000 - 3.8896100000 0.5740450000 0.0169862000 - 3.9012500000 0.4877390000 0.0152084000 - 3.9129400000 0.4885290000 0.0156341000 - 3.9246800000 0.4650010000 0.0151683000 - 3.9364700000 0.4692270000 0.0152475000 - 3.9483200000 0.4700310000 0.0153216000 - 3.9602200000 0.4960920000 0.0158543000 - 3.9721800000 0.5057440000 0.0161854000 - 3.9841900000 0.5831320000 0.0179393000 - 3.9962500000 0.6073930000 0.0189897000 - 4.0083700000 0.6662360000 0.0202413000 - 4.0205500000 0.6984740000 0.0214665000 - 4.0327800000 0.7439660000 0.0233165000 - 4.0450600000 0.8004770000 0.0260186000 - 4.0574000000 0.7824320000 0.0274392000 - 4.0698000000 0.8784180000 0.0329901000 - 4.0822600000 0.8775350000 0.0377019000 - 4.0947700000 0.8760580000 0.0438873000 - 4.1073400000 0.7839350000 0.0474807000 - 4.1199700000 0.9788290000 0.0621463000 - 4.1326600000 1.0264400000 0.0693284000 - 4.1454000000 0.8176410000 0.0533672000 - 4.1582100000 0.9157950000 0.0557376000 - 4.1710700000 0.9162000000 0.0480224000 - 4.1839900000 0.8696010000 0.0400365000 - 4.1969800000 0.9519930000 0.0372252000 - 4.2100200000 0.9839800000 0.0339105000 - 4.2231300000 0.9502960000 0.0300434000 - 4.2362900000 0.9624540000 0.0286221000 - 4.2495200000 0.9498530000 0.0260583000 - 4.2628100000 0.9251010000 0.0247120000 - 4.2761600000 0.9387460000 0.0246352000 - 4.2895800000 0.9589940000 0.0243943000 - 4.3030600000 0.9698820000 0.0242167000 - 4.3166000000 0.9623060000 0.0235793000 - 4.3302100000 0.9657040000 0.0238545000 - 4.3438800000 1.0031700000 0.0244074000 - 4.3576100000 0.9675060000 0.0234964000 - 4.3714100000 0.9349270000 0.0225669000 - 4.3852800000 0.9579060000 0.0232466000 - 4.3992100000 0.9277390000 0.0221732000 - 4.4132100000 0.9846730000 0.0234894000 - 4.4272800000 0.9845750000 0.0234489000 - 4.4414100000 1.0118000000 0.0238240000 - 4.4556100000 0.9585980000 0.0229066000 - 4.4698800000 0.9533820000 0.0224506000 - 4.4842200000 0.9624150000 0.0225899000 - 4.4986300000 0.9677840000 0.0229785000 - 4.5131000000 0.9826970000 0.0232197000 - 4.5276500000 0.9826070000 0.0233676000 - 4.5422700000 0.9488380000 0.0225314000 - 4.5569600000 0.9907570000 0.0233137000 - 4.5717200000 0.9559990000 0.0226817000 - 4.5865500000 0.9816290000 0.0226932000 - 4.6014500000 0.9768730000 0.0230408000 - 4.6164300000 0.9802180000 0.0231780000 - 4.6314800000 0.9491020000 0.0225352000 - 4.6466000000 1.0058500000 0.0236829000 - 4.6618000000 0.9921860000 0.0231181000 - 4.6770700000 0.9703960000 0.0227913000 - 4.6924200000 0.9714200000 0.0229502000 - 4.7078400000 0.9484080000 0.0224337000 - 4.7233400000 0.9332990000 0.0223029000 - 4.7389100000 0.9635410000 0.0228871000 - 4.7545700000 0.9798830000 0.0231398000 - 4.7703000000 0.9426480000 0.0220059000 - 4.7861100000 0.9433240000 0.0223660000 - 4.8019900000 0.9423990000 0.0221376000 - 4.8179600000 0.9700130000 0.0227580000 - 4.8340100000 0.9345570000 0.0222106000 - 4.8501400000 0.9443970000 0.0222641000 - 4.8663400000 1.0040900000 0.0234774000 - 4.8826300000 0.9723750000 0.0226658000 - 4.8990000000 0.9871560000 0.0231910000 - 4.9154600000 0.9461980000 0.0224995000 - 4.9319900000 0.9818550000 0.0232177000 - 4.9486100000 0.9666480000 0.0226409000 - 4.9653200000 0.9913450000 0.0233561000 - 4.9821100000 0.9996780000 0.0234784000 - 4.9989800000 0.9257980000 0.0216606000 - 5.0159400000 0.9885750000 0.0232679000 - 5.0329900000 0.9750800000 0.0230357000 - 5.0501200000 0.9666050000 0.0231352000 - 5.0673400000 0.9577510000 0.0226194000 - 5.0846500000 0.9403150000 0.0224563000 - 5.1020500000 0.9752410000 0.0234361000 - 5.1195400000 0.9882070000 0.0235583000 - 5.1371200000 0.9341580000 0.0224927000 - 5.1547800000 0.9602660000 0.0231195000 - 5.1725400000 0.9587000000 0.0230835000 - 5.1904000000 0.9492010000 0.0231574000 - 5.2083400000 0.9728040000 0.0236083000 - 5.2263800000 0.9693310000 0.0230717000 - 5.2445100000 0.9721800000 0.0232930000 - 5.2627400000 0.9656560000 0.0229420000 - 5.2810600000 0.9279160000 0.0222408000 - 5.2994700000 0.9169540000 0.0219681000 - 5.3179900000 0.9119520000 0.0219263000 - 5.3366000000 0.9443530000 0.0224419000 - 5.3553100000 0.9178610000 0.0219220000 - 5.3741100000 0.9148550000 0.0217703000 - 5.3930200000 0.8724360000 0.0208530000 - 5.4120300000 0.8925290000 0.0213002000 - 5.4311300000 0.9819530000 0.0228645000 - 5.4503400000 0.9208650000 0.0218984000 - 5.4696500000 0.9633470000 0.0224185000 - 5.4890700000 0.9776380000 0.0228625000 - 5.5085800000 1.0053100000 0.0230169000 - 5.5282000000 0.9559260000 0.0222370000 - 5.5479300000 0.9451720000 0.0223019000 - 5.5677600000 0.9266630000 0.0217713000 - 5.5877000000 0.9709600000 0.0224637000 - 5.6027200000 0.9828850000 0.0321233000 - 5.6127700000 0.9428030000 0.0309389000 - 5.6228500000 0.9900180000 0.0320399000 - 5.6329600000 0.9750980000 0.0312655000 - 5.6430900000 0.9836410000 0.0318548000 - 5.6532400000 1.0087400000 0.0329664000 - 5.6634300000 0.9820400000 0.0323560000 - 5.6736400000 0.9880640000 0.0325502000 - 5.6838900000 0.9674800000 0.0314904000 - 5.6941500000 0.9344780000 0.0311921000 - 5.7044500000 0.9748540000 0.0314480000 - 5.7147800000 0.9118450000 0.0299582000 - 5.7251300000 0.9670560000 0.0315152000 - 5.7355100000 0.9881080000 0.0321895000 - 5.7459200000 0.9219510000 0.0298435000 - 5.7563600000 0.9770050000 0.0314324000 - 5.7668200000 0.9633450000 0.0314080000 - 5.7773200000 0.9342510000 0.0302913000 - 5.7878400000 0.9348690000 0.0308116000 - 5.7983900000 0.9626780000 0.0317179000 - 5.8089800000 0.9093210000 0.0299592000 - 5.8195900000 0.9175240000 0.0307165000 - 5.8302200000 0.9320850000 0.0309125000 - 5.8408900000 0.9431250000 0.0310762000 - 5.8515900000 0.9895030000 0.0322945000 - 5.8623200000 0.9190360000 0.0302231000 - 5.8730700000 0.9284000000 0.0308778000 - 5.8838600000 1.0004000000 0.0326415000 - 5.8946800000 0.9580690000 0.0313301000 - 5.9055200000 0.9180820000 0.0304370000 - 5.9164000000 0.8957010000 0.0300398000 - 5.9273000000 0.8312450000 0.0282444000 - 5.9382400000 0.9303890000 0.0312664000 - 5.9492100000 0.8656470000 0.0292170000 - 5.9602000000 0.8900080000 0.0297892000 - 5.9712300000 0.8169740000 0.0279122000 - 5.9822900000 0.8572970000 0.0291471000 - 5.9933800000 0.9046920000 0.0307815000 - 6.0045000000 0.9016650000 0.0300146000 - 6.0156500000 0.8984670000 0.0303202000 - 6.0268300000 0.8471380000 0.0290220000 - 6.0380400000 0.9007520000 0.0304911000 - 6.0492900000 0.8444970000 0.0285645000 - 6.0605600000 0.8719460000 0.0299097000 - 6.0718700000 0.8222920000 0.0289813000 - 6.0832100000 0.7952710000 0.0275825000 - 6.0945800000 0.8213670000 0.0282364000 - 6.1059800000 0.7834530000 0.0274838000 - 6.1174100000 0.8141270000 0.0284105000 - 6.1288800000 0.7663980000 0.0268012000 - 6.1403800000 0.8270900000 0.0288512000 - 6.1519100000 0.7936400000 0.0281487000 - 6.1634700000 0.7833610000 0.0276137000 - 6.1750700000 0.8241300000 0.0289639000 - 6.1867000000 0.8172670000 0.0286241000 - 6.1983600000 0.8459250000 0.0291004000 - 6.2100600000 0.8091960000 0.0283975000 - 6.2217900000 0.8166800000 0.0285349000 - 6.2335500000 0.8817520000 0.0300535000 - 6.2453400000 0.8975930000 0.0302508000 - 6.2571700000 0.9235840000 0.0312499000 - 6.2690300000 0.9274090000 0.0308904000 - 6.2809300000 0.9183040000 0.0304614000 - 6.2928600000 0.8943330000 0.0302201000 - 6.3048200000 0.9102670000 0.0297859000 - 6.3168200000 0.9684960000 0.0316811000 - 6.3288500000 0.9335380000 0.0305731000 - 6.3409200000 0.9548270000 0.0314186000 - 6.3530200000 0.9398490000 0.0310187000 - 6.3651500000 0.9652750000 0.0312630000 - 6.3773300000 0.9489240000 0.0305991000 - 6.3895300000 0.9633830000 0.0314116000 - 6.4017700000 0.9710110000 0.0319319000 - 6.4140500000 0.9560190000 0.0311100000 - 6.4263600000 0.9577020000 0.0310615000 - 6.4387000000 0.9649580000 0.0316282000 - 6.4510900000 0.9804010000 0.0319488000 - 6.4635100000 0.9882040000 0.0318166000 - 6.4759600000 0.9534830000 0.0310183000 - 6.4884500000 0.9606210000 0.0308531000 - 6.5009700000 0.9306890000 0.0302835000 - 6.5135400000 0.9903480000 0.0319979000 - 6.5261400000 0.9972760000 0.0323905000 - 6.5387700000 0.9411570000 0.0308646000 - 6.5514400000 0.9823790000 0.0321248000 - 6.5641500000 0.9456850000 0.0307970000 - 6.5769000000 0.9462450000 0.0306171000 - 6.5896800000 0.9323960000 0.0301746000 - 6.6025000000 0.9396060000 0.0302462000 - 6.6153600000 0.9229990000 0.0298206000 - 6.6282600000 0.9562290000 0.0307145000 - 6.6411900000 0.9884910000 0.0316659000 - 6.6541600000 0.9775700000 0.0319265000 - 6.6671700000 0.9538620000 0.0310368000 - 6.6802200000 0.9951540000 0.0323563000 - 6.6933000000 0.9086190000 0.0298390000 - 6.7064300000 0.9599610000 0.0311704000 - 6.7195900000 0.9412690000 0.0308060000 - 6.7327900000 0.9351080000 0.0302300000 - 6.7460300000 0.9248780000 0.0303966000 - 6.7593100000 0.9383100000 0.0300967000 - 6.7726300000 0.9554210000 0.0308901000 - 6.7859900000 0.9171090000 0.0298279000 - 6.7993900000 0.9550740000 0.0309371000 - 6.8128200000 0.9041700000 0.0292401000 - 6.8263000000 0.9252980000 0.0300172000 - 6.8398200000 0.9553460000 0.0310740000 - 6.8533800000 0.8991420000 0.0302140000 - 6.8669700000 0.9090290000 0.0297858000 - 6.8806100000 0.9285400000 0.0307186000 - 6.8942900000 0.9311420000 0.0303617000 - 6.9080100000 0.9040810000 0.0301241000 - 6.9217700000 0.9149050000 0.0302832000 - 6.9355800000 0.8753230000 0.0293964000 - 6.9494200000 0.9115340000 0.0299420000 - 6.9633000000 0.8883210000 0.0298782000 - 6.9772300000 0.8782060000 0.0296831000 - 6.9912000000 0.8237740000 0.0279194000 - 7.0052100000 0.8010900000 0.0274705000 - 7.0192600000 0.7950650000 0.0273758000 - 7.0333600000 0.7912850000 0.0271753000 - 7.0475000000 0.8072880000 0.0278709000 - 7.0616800000 0.8564670000 0.0290720000 - 7.0759000000 0.7684240000 0.0265685000 - 7.0901600000 0.7561890000 0.0262593000 - 7.1044700000 0.7429670000 0.0264696000 - 7.1188300000 0.7542560000 0.0264841000 - 7.1332200000 0.6862540000 0.0248953000 - 7.1476600000 0.6798000000 0.0248159000 - 7.1621500000 0.5989590000 0.0230515000 - 7.1766700000 0.6001160000 0.0227714000 - 7.1912500000 0.5689500000 0.0221416000 - 7.2058600000 0.5204390000 0.0210072000 - 7.2205200000 0.5223920000 0.0211553000 - 7.2352300000 0.5119550000 0.0208716000 - 7.2499800000 0.5231910000 0.0209462000 - 7.2647800000 0.5241020000 0.0211471000 - 7.2796200000 0.5424310000 0.0217068000 - 7.2945000000 0.5488300000 0.0217537000 - 7.3094400000 0.5533280000 0.0219139000 - 7.3244200000 0.5310700000 0.0214232000 - 7.3394400000 0.4987910000 0.0205042000 - 7.3545100000 0.5121140000 0.0210709000 - 7.3696300000 0.4997620000 0.0206218000 - 7.3847900000 0.4534560000 0.0195112000 - 7.4000000000 0.4335880000 0.0191079000 - 7.4152600000 0.4323040000 0.0189059000 - 7.4305700000 0.4309580000 0.0192856000 - 7.4459200000 0.4595680000 0.0202032000 - 7.4613200000 0.5274710000 0.0219023000 - 7.4767700000 0.5346740000 0.0221766000 - 7.4922600000 0.5590340000 0.0229536000 - 7.5078100000 0.6266000000 0.0250012000 - 7.5234000000 0.6926630000 0.0272253000 - 7.5390400000 0.7139110000 0.0283471000 - 7.5547300000 0.7789050000 0.0307885000 - 7.5704700000 0.7687010000 0.0308989000 - 7.5862600000 0.8513980000 0.0334405000 - 7.6021000000 0.9122880000 0.0369457000 - 7.6179800000 0.8613890000 0.0346874000 - 7.6339200000 0.9020650000 0.0362335000 - 7.6499100000 0.9387890000 0.0367748000 - 7.6659500000 0.8996380000 0.0349477000 - 7.6820300000 0.9202360000 0.0342620000 - 7.6981700000 0.8770160000 0.0316786000 - 7.7143600000 0.9935290000 0.0346918000 - 7.7306000000 0.9291820000 0.0320297000 - 7.7468900000 0.9358640000 0.0316472000 - 7.7632400000 0.9324360000 0.0312388000 - 7.7796300000 0.9358690000 0.0310654000 - 7.7960800000 0.9472900000 0.0314852000 - 7.8125800000 0.9578940000 0.0315666000 - 7.8291300000 0.8956230000 0.0297305000 - 7.8457400000 0.9719840000 0.0311953000 - 7.8624000000 0.9841430000 0.0316835000 - 7.8791100000 0.9634380000 0.0316124000 - 7.8958700000 0.9533770000 0.0309176000 - 7.9126900000 1.0185600000 0.0326970000 - 7.9295600000 0.9873770000 0.0317229000 - 7.9464900000 1.0046700000 0.0319778000 - 7.9634700000 0.9822910000 0.0313286000 - 7.9805000000 0.9763680000 0.0313752000 - 7.9975900000 0.9757430000 0.0315325000 - 8.0147300000 0.9855310000 0.0313232000 - 8.0319300000 0.9304630000 0.0296615000 - 8.0491900000 0.9621450000 0.0307797000 - 8.0665000000 0.9047100000 0.0296192000 - 8.0838600000 0.9942670000 0.0316576000 - 8.1012800000 0.9584290000 0.0312029000 - 8.1187600000 0.9743290000 0.0314716000 - 8.1363000000 0.9590000000 0.0305896000 - 8.1538900000 0.9458760000 0.0307356000 - 8.1715400000 1.0059200000 0.0317628000 - 8.1892500000 0.9631760000 0.0309675000 - 8.2070100000 0.9527180000 0.0305329000 - 8.2248300000 0.9801710000 0.0313653000 - 8.2427100000 0.8855600000 0.0287351000 - 8.2606500000 0.9475180000 0.0304677000 - 8.2786500000 0.9207680000 0.0292790000 - 8.2967100000 0.9343030000 0.0299973000 - 8.3148200000 0.9513310000 0.0304364000 - 8.3330000000 0.9503660000 0.0304590000 - 8.3512300000 0.9525110000 0.0300627000 - 8.3695200000 0.9184410000 0.0296269000 - 8.3878800000 0.9461970000 0.0300430000 - 8.4062900000 0.9617990000 0.0309293000 - 8.4247700000 0.9609620000 0.0306328000 - 8.4433100000 0.9426280000 0.0304243000 - 8.4619000000 0.9362310000 0.0298147000 - 8.4805600000 0.9134540000 0.0291923000 - 8.4992800000 0.9471520000 0.0301252000 - 8.5180700000 0.9155140000 0.0297878000 - 8.5369100000 0.9276610000 0.0298012000 - 8.5558200000 0.9569990000 0.0309046000 - 8.5747900000 0.9370570000 0.0299302000 - 8.5938200000 0.8597810000 0.0281632000 - 8.6129200000 0.9298430000 0.0305164000 - 8.6320800000 0.8529590000 0.0279597000 - 8.6513100000 0.8586270000 0.0282271000 - 8.6706000000 0.7970830000 0.0269651000 - 8.6899500000 0.7898960000 0.0273112000 - 8.7093700000 0.7429330000 0.0253373000 - 8.7288600000 0.7120970000 0.0252451000 - 8.7484000000 0.6409870000 0.0235449000 - 8.7680200000 0.5967740000 0.0223798000 - 8.7877000000 0.5042430000 0.0200379000 - 8.8074500000 0.4796090000 0.0199164000 - 8.8272600000 0.4393860000 0.0190562000 - 8.8471500000 0.4316950000 0.0185525000 - 8.8670900000 0.4018990000 0.0177470000 - 8.8871100000 0.4318190000 0.0185469000 - 8.9071900000 0.5080350000 0.0204524000 - 8.9273500000 0.5372580000 0.0210432000 - 8.9475700000 0.6214280000 0.0232109000 - 8.9678600000 0.6352130000 0.0233379000 - 8.9882100000 0.6970240000 0.0246751000 - 9.0086400000 0.7128690000 0.0251340000 - 9.0291400000 0.7549190000 0.0261690000 - 9.0497100000 0.7361530000 0.0252641000 - 9.0703500000 0.7655730000 0.0260903000 - 9.0910500000 0.7950950000 0.0270575000 - 9.1118300000 0.8268380000 0.0278361000 - 9.1326900000 0.8469050000 0.0278168000 - 9.1536100000 0.8359670000 0.0277347000 - 9.1746000000 0.8854800000 0.0287792000 - 9.1956700000 0.9194850000 0.0294580000 - 9.2168100000 0.9122500000 0.0293980000 - 9.2380200000 0.8552060000 0.0276705000 - 9.2593100000 0.8986820000 0.0289085000 - 9.2806700000 0.9426920000 0.0299642000 - 9.3021000000 0.9511500000 0.0298951000 - 9.3236100000 0.9225370000 0.0290866000 - 9.3451900000 0.9587600000 0.0306440000 - 9.3668500000 0.9897290000 0.0312455000 - 9.3885800000 1.0034100000 0.0312630000 - 9.4103900000 0.9220630000 0.0292444000 - 9.4322800000 0.9655950000 0.0302385000 - 9.4542400000 0.9974470000 0.0315134000 - 9.4762700000 0.9723150000 0.0308708000 - 9.4983900000 1.0382200000 0.0327450000 - 9.5205800000 0.9646570000 0.0305416000 - 9.5428500000 0.9286750000 0.0296677000 - 9.5652000000 0.9527820000 0.0304704000 - 9.5876300000 0.9811320000 0.0307802000 - 9.6101400000 0.9718590000 0.0305917000 - 9.6327200000 0.9592890000 0.0309772000 - 9.6553900000 1.0118000000 0.0320134000 - 9.6781300000 1.0096200000 0.0319125000 - 9.7009600000 0.9570450000 0.0301236000 - 9.7238700000 0.9661190000 0.0298732000 - 9.7468500000 1.0308700000 0.0321823000 - 9.7699200000 0.9955020000 0.0312368000 - 9.7930700000 0.9721960000 0.0306963000 - 9.8163100000 1.0218400000 0.0321273000 - 9.8396300000 1.0361700000 0.0321288000 - 9.8630300000 0.9627600000 0.0304955000 - 9.8865100000 0.9678390000 0.0304200000 - 9.9100800000 1.0251000000 0.0320303000 - 9.9337300000 0.9375480000 0.0298678000 - 9.9574700000 0.9708370000 0.0310280000 - 9.9812900000 0.9668580000 0.0303401000 - 10.0052000000 0.9890420000 0.0309393000 - 10.0292000000 0.9692430000 0.0303646000 - 10.0533000000 0.9255250000 0.0294666000 - 10.0774000000 0.9633090000 0.0301040000 - 10.1017000000 0.9531760000 0.0301100000 - 10.1260000000 0.9941560000 0.0313323000 - 10.1505000000 0.9192600000 0.0290609000 - 10.1750000000 0.9961740000 0.0309639000 - 10.1996000000 0.9587250000 0.0304887000 - 10.2243000000 0.8786680000 0.0282776000 - 10.2491000000 0.8819180000 0.0285556000 - 10.2739000000 0.8753220000 0.0283930000 - 10.2989000000 0.8808340000 0.0286594000 - 10.3240000000 0.8379200000 0.0277051000 - 10.3491000000 0.7958630000 0.0267755000 - 10.3744000000 0.7339550000 0.0248263000 - 10.3997000000 0.7231400000 0.0249977000 - 10.4251000000 0.7027180000 0.0247029000 - 10.4506000000 0.6491200000 0.0233446000 - 10.4763000000 0.6908960000 0.0245396000 - 10.5020000000 0.6651480000 0.0236813000 - 10.5278000000 0.7684190000 0.0261305000 - 10.5537000000 0.8419420000 0.0276975000 - 10.5797000000 0.7986110000 0.0259570000 - 10.6058000000 0.8812660000 0.0285097000 - 10.6319000000 0.9052290000 0.0293789000 - 10.6582000000 0.9102560000 0.0287284000 - 10.6846000000 0.9363990000 0.0298149000 - 10.7111000000 0.9695570000 0.0302238000 - 10.7377000000 0.9901290000 0.0313796000 - 10.7643000000 0.9387910000 0.0298961000 - 10.7911000000 0.9444340000 0.0299494000 - 10.8180000000 0.9214220000 0.0290427000 - 10.8450000000 0.9021210000 0.0289411000 - 10.8721000000 0.8999290000 0.0288136000 - 10.8992000000 0.9359100000 0.0295744000 - 10.9265000000 0.8841690000 0.0285069000 - 10.9539000000 0.9509790000 0.0306558000 - 10.9814000000 0.9043480000 0.0291414000 - 11.0090000000 0.9757470000 0.0308900000 - 11.0367000000 0.8952030000 0.0284728000 - 11.0645000000 0.9095520000 0.0289444000 - 11.0924000000 0.9057940000 0.0285411000 - 11.1204000000 0.8952970000 0.0288534000 - 11.1485000000 0.9287380000 0.0296519000 - 11.1767000000 0.9127360000 0.0292197000 - 11.2051000000 0.9644070000 0.0305814000 - 11.2335000000 0.8998210000 0.0285709000 - 11.2621000000 0.9411300000 0.0300337000 - 11.2907000000 0.9224960000 0.0287960000 - 11.3195000000 0.9230570000 0.0290650000 - 11.3484000000 0.8871440000 0.0283397000 - 11.3773000000 0.8742540000 0.0283264000 - 11.4064000000 0.8345460000 0.0272954000 - 11.4357000000 0.8172740000 0.0270072000 - 11.4650000000 0.7509760000 0.0254104000 - 11.4944000000 0.7290090000 0.0251159000 - 11.5240000000 0.6666840000 0.0238522000 - 11.5536000000 0.6008070000 0.0224678000 - 11.5834000000 0.5549270000 0.0213590000 - 11.6133000000 0.5465370000 0.0210868000 - 11.6433000000 0.5417880000 0.0205402000 - 11.6734000000 0.5899770000 0.0218969000 - 11.7037000000 0.6172730000 0.0225442000 - 11.7340000000 0.7371510000 0.0253574000 - 11.7645000000 0.8039410000 0.0266341000 - 11.7951000000 0.8744580000 0.0285992000 - 11.8258000000 0.9066830000 0.0289233000 - 11.8567000000 0.9032390000 0.0290235000 - 11.8876000000 0.9336530000 0.0298871000 - 11.9187000000 0.9254120000 0.0294399000 - 11.9499000000 0.9574590000 0.0301012000 - 11.9812000000 0.9330920000 0.0297990000 - 12.0127000000 0.9459030000 0.0300118000 - 12.0442000000 0.9104480000 0.0290143000 - 12.0759000000 0.8508080000 0.0274255000 - 12.1078000000 0.8758370000 0.0282944000 - 12.1397000000 0.8596240000 0.0279793000 - 12.1718000000 0.8722400000 0.0280747000 - 12.2040000000 0.8691240000 0.0285237000 - 12.2363000000 0.8344600000 0.0273193000 - 12.2688000000 0.9358410000 0.0300150000 - 12.3013000000 0.8932610000 0.0289755000 - 12.3341000000 0.8989630000 0.0289457000 - 12.3669000000 0.8523650000 0.0274145000 - 12.3999000000 0.8195040000 0.0265523000 - 12.4330000000 0.8308000000 0.0269507000 - 12.4662000000 0.8066070000 0.0266905000 - 12.4996000000 0.7575630000 0.0255497000 - 12.5331000000 0.7906100000 0.0269478000 - 12.5668000000 0.7971270000 0.0268678000 - 12.6006000000 0.6987160000 0.0239932000 - 12.6345000000 0.7795070000 0.0261590000 - 12.6685000000 0.7391180000 0.0249865000 - 12.7027000000 0.7867680000 0.0266593000 - 12.7371000000 0.7716010000 0.0261414000 - 12.7715000000 0.8392530000 0.0275599000 - 12.8061000000 0.8636960000 0.0277963000 - 12.8409000000 0.8335590000 0.0268517000 - 12.8758000000 0.9356060000 0.0295442000 - 12.9108000000 0.9310430000 0.0293838000 - 12.9460000000 0.9806990000 0.0302894000 - 12.9813000000 1.0254300000 0.0321313000 - 13.0168000000 0.9417190000 0.0294721000 - 13.0524000000 0.9623980000 0.0303364000 - 13.0882000000 0.9240910000 0.0287440000 - 13.1241000000 0.9400080000 0.0293815000 - 13.1601000000 0.9098450000 0.0287010000 - 13.1963000000 0.9428510000 0.0298311000 - 13.2327000000 0.9286080000 0.0296482000 - 13.2692000000 0.9194570000 0.0292360000 - 13.3059000000 0.9663880000 0.0300527000 - 13.3427000000 0.9501960000 0.0296460000 - 13.3796000000 0.9640250000 0.0306763000 - 13.4167000000 0.9874520000 0.0305698000 - 13.4540000000 0.9398640000 0.0290083000 - 13.4914000000 0.9914280000 0.0311939000 - 13.5290000000 0.9507190000 0.0297632000 - 13.5667000000 0.9297310000 0.0295921000 - 13.6046000000 0.9625230000 0.0300035000 - 13.6427000000 0.9426530000 0.0295572000 - 13.6809000000 0.9399850000 0.0298510000 - 13.7193000000 0.9859800000 0.0316477000 - 13.7578000000 0.9746220000 0.0304666000 - 13.7965000000 0.9870130000 0.0304781000 - 13.8354000000 0.9743500000 0.0303469000 - 13.8744000000 0.9375750000 0.0290959000 - 13.9136000000 0.9854080000 0.0306815000 - 13.9530000000 0.9021840000 0.0284320000 - 13.9925000000 1.0006800000 0.0312224000 - 14.0322000000 0.9204890000 0.0291536000 - 14.0721000000 1.0110300000 0.0314782000 - 14.1121000000 0.9977520000 0.0310139000 - 14.1523000000 0.9896230000 0.0305688000 - 14.1927000000 0.9718340000 0.0305013000 - 14.2332000000 0.9622840000 0.0299040000 - 14.2740000000 0.9334540000 0.0293410000 - 14.3149000000 0.9717200000 0.0301031000 - 14.3559000000 0.9712350000 0.0304088000 - 14.3972000000 0.9520570000 0.0298148000 - 14.4386000000 0.9611650000 0.0300535000 - 14.4802000000 0.9409330000 0.0294947000 - 14.5220000000 0.8993630000 0.0289977000 - 14.5640000000 0.8604840000 0.0273180000 - 14.6061000000 0.8489070000 0.0275784000 - 14.6485000000 0.8448680000 0.0278685000 - 14.6910000000 0.8120300000 0.0274250000 - 14.7337000000 0.7450320000 0.0257875000 - 14.7766000000 0.8075220000 0.0271608000 - 14.8197000000 0.7989320000 0.0272881000 - 14.8630000000 0.8203180000 0.0269409000 - 14.9064000000 0.8283440000 0.0271757000 - 14.9501000000 0.8844820000 0.0286687000 - 14.9939000000 0.8869280000 0.0289207000 - 15.0379000000 0.8289200000 0.0274290000 - 15.0822000000 0.7839120000 0.0263629000 - 15.1266000000 0.7497420000 0.0257578000 - 15.1712000000 0.7192810000 0.0253376000 - 15.2160000000 0.7744120000 0.0267699000 - 15.2611000000 0.7941980000 0.0274651000 - 15.3063000000 0.8753600000 0.0294064000 - 15.3517000000 0.8804690000 0.0292723000 - 15.3973000000 0.9382370000 0.0306834000 - 15.4431000000 0.9559900000 0.0305370000 - 15.4892000000 0.9845800000 0.0315587000 - 15.5354000000 0.9851430000 0.0315987000 - 15.5818000000 1.0120900000 0.0319819000 - 15.6285000000 0.9587760000 0.0309760000 - 15.6754000000 0.9593120000 0.0305056000 - 15.7224000000 0.9698270000 0.0309984000 - 15.7697000000 0.9999400000 0.0322280000 - 15.8172000000 0.9558110000 0.0307301000 - 15.8649000000 0.9614440000 0.0311331000 - 15.9129000000 0.9978250000 0.0323023000 - 15.9610000000 0.9826160000 0.0317561000 - 16.0094000000 0.9062300000 0.0293173000 - 16.0580000000 0.9552790000 0.0307919000 - 16.1068000000 0.9484610000 0.0305833000 - 16.1558000000 0.9800280000 0.0319650000 - 16.2051000000 0.9663410000 0.0317208000 - 16.2545000000 0.9954470000 0.0322548000 - 16.3043000000 0.9660880000 0.0317658000 - 16.3542000000 0.9612690000 0.0315732000 - 16.4044000000 0.9682140000 0.0321176000 - 16.4548000000 0.9232850000 0.0306990000 - 16.5054000000 0.9575560000 0.0319977000 - 16.5563000000 0.8873950000 0.0303738000 - 16.6074000000 0.9011820000 0.0307698000 - 16.6587000000 0.8944850000 0.0314397000 - 16.7103000000 0.8677790000 0.0308771000 - 16.7621000000 0.9653530000 0.0343104000 - 16.8141000000 0.9290550000 0.0322747000 - 16.8664000000 0.8610860000 0.0305270000 - 16.9190000000 0.9378030000 0.0331059000 - 16.9718000000 0.9389780000 0.0332439000 - 17.0248000000 1.0018000000 0.0352002000 - 17.0781000000 0.9604140000 0.0347914000 - 17.1316000000 0.9305460000 0.0341570000 - 17.1854000000 1.0124500000 0.0370375000 - 17.2395000000 0.9891940000 0.0367784000 - 17.2938000000 0.9859160000 0.0370976000 - 17.3483000000 0.9545490000 0.0371352000 - 17.4031000000 0.9453870000 0.0377938000 - 17.4582000000 0.9659150000 0.0392156000 - 17.5135000000 0.8774260000 0.0379402000 - 17.5691000000 0.8888350000 0.0383040000 - 17.6250000000 0.8772700000 0.0408384000 - 17.6811000000 0.8959180000 0.0427513000 - 17.7375000000 0.8587140000 0.0443820000 - 17.7942000000 0.7974850000 0.0440008000 - 17.8511000000 0.7636720000 0.0457381000 - 17.9084000000 0.7251570000 0.0476241000 - 17.9659000000 0.5339030000 0.0447687000 - 18.0236000000 0.5615310000 0.0522601000 - 18.0817000000 0.7410020000 0.0722189000 - 18.1400000000 0.7279510000 0.0838383000 - 18.1986000000 0.9338550000 0.1504070000 - 18.2575000000 0.9006340000 0.1797020000 - 18.3167000000 0.7659780000 0.3403370000 - 18.3762000000 1.2346900000 0.9627210000 - 18.4359000000 0.7940810000 1.6040800000 - 18.4960000000 0.2253680000 0.7327060000 - 18.5563000000 0.2802370000 0.8270040000 - 18.6170000000 -0.0376973000 1.2507100000 - 18.6779000000 -0.1472880000 1.0513400000 - 18.7391000000 0.1892810000 1.3806000000 - 18.8007000000 0.0871814000 1.5614900000 - 18.8625000000 0.4628990000 1.1457600000 - 18.9247000000 0.0520294000 0.5327860000 - 18.9871000000 -0.1385580000 0.3054710000 - 19.0499000000 0.3066950000 0.4873340000 - 19.1130000000 0.1931940000 0.2869540000 - 19.1764000000 0.5442030000 0.2189610000 - 19.2401000000 0.5858690000 0.1637390000 - 19.3041000000 0.5551390000 0.1281380000 - 19.3685000000 0.8754780000 0.1244300000 - 19.4331000000 0.7643320000 0.0894222000 - 19.4981000000 0.7866990000 0.0728718000 - 19.5634000000 0.8435950000 0.0656133000 - 19.6291000000 0.7701470000 0.0529936000 - 19.6951000000 0.8448640000 0.0510696000 - 19.7614000000 0.7237830000 0.0447334000 - 19.8280000000 0.6902750000 0.0410574000 - 19.8950000000 0.5336640000 0.0331582000 - 19.9624000000 0.4681350000 0.0295951000 - 20.0300000000 0.4238570000 0.0267210000 - 20.0980000000 0.5150580000 0.0283575000 - 20.1664000000 0.6583170000 0.0309344000 - 20.2351000000 0.7573550000 0.0333656000 - 20.3042000000 0.8875270000 0.0369698000 - 20.3736000000 0.9993450000 0.0399584000 - 20.4434000000 0.9083430000 0.0363385000 - 20.5135000000 0.9826400000 0.0391698000 - 20.5840000000 0.9824770000 0.0391220000 - 20.6548000000 0.8975180000 0.0379414000 - 20.7261000000 0.9544270000 0.0424749000 - 20.7977000000 0.9202970000 0.0465272000 - 20.8696000000 0.9874300000 0.0672021000 - 20.9420000000 0.9093600000 0.1032110000 - 21.0147000000 0.8132590000 0.1168700000 - 21.0878000000 0.9055290000 0.1076750000 - 21.1613000000 0.8549770000 0.0720198000 - 21.2351000000 0.9150730000 0.0553359000 - 21.3094000000 0.9331940000 0.0430041000 - 21.3840000000 0.9244990000 0.0368818000 - 21.4590000000 0.8684040000 0.0327771000 - 21.5345000000 0.8296120000 0.0304408000 - 21.6103000000 0.8586940000 0.0307526000 - 21.6865000000 0.8629630000 0.0305832000 - 21.7632000000 0.8833720000 0.0303244000 - 21.8402000000 0.8990950000 0.0307411000 - 21.9176000000 0.8904990000 0.0304141000 - 21.9955000000 0.8670150000 0.0294478000 - 22.0738000000 0.8190360000 0.0280037000 - 22.1525000000 0.7812660000 0.0273877000 - 22.2316000000 0.7526850000 0.0262739000 - 22.3111000000 0.8149440000 0.0278837000 - 22.3911000000 0.8533190000 0.0287027000 - 22.4715000000 0.7637770000 0.0264174000 - 22.5523000000 0.8074650000 0.0270473000 - 22.6336000000 0.8343270000 0.0277018000 - 22.7153000000 0.8560370000 0.0286019000 - 22.7975000000 0.8894310000 0.0286085000 - 22.8801000000 0.9358180000 0.0296754000 - 22.9631000000 0.9467260000 0.0300373000 - 23.0466000000 0.9616560000 0.0303665000 - 23.1306000000 0.9099640000 0.0288110000 - 23.2150000000 0.9486840000 0.0298812000 - 23.2999000000 0.9192640000 0.0291327000 - 23.3852000000 0.9259140000 0.0291504000 - 23.4711000000 0.9422160000 0.0297687000 - 23.5573000000 0.8256940000 0.0268846000 - 23.6441000000 0.8436200000 0.0273963000 - 23.7314000000 0.8832550000 0.0285120000 - 23.8191000000 0.8832790000 0.0278674000 - 23.9073000000 0.9562070000 0.0299431000 - 23.9960000000 0.9349730000 0.0289875000 - 24.0852000000 0.8444520000 0.0270897000 - 24.1749000000 0.8913070000 0.0281125000 - 24.2651000000 0.8906300000 0.0281822000 - 24.3559000000 0.8555870000 0.0276524000 - 24.4471000000 0.8725850000 0.0283605000 - 24.5388000000 0.7525190000 0.0257158000 - 24.6311000000 0.7776690000 0.0257289000 - 24.7238000000 0.8463770000 0.0270327000 - 24.8171000000 0.8756070000 0.0277428000 - 24.9110000000 0.9588920000 0.0293980000 - 25.0053000000 0.9657220000 0.0295672000 - 25.1002000000 0.9439960000 0.0290475000 - 25.1957000000 0.9087560000 0.0282124000 - 25.2916000000 0.9580680000 0.0299151000 - 25.3882000000 0.9365040000 0.0294849000 - 25.4853000000 0.9585150000 0.0294639000 - 25.5829000000 0.9657720000 0.0297029000 - 25.6811000000 0.9395880000 0.0291743000 - 25.7799000000 0.9541580000 0.0292622000 - 25.8792000000 0.9485630000 0.0293420000 - 25.9792000000 0.9875910000 0.0303118000 - 26.0797000000 0.9571500000 0.0297973000 - 26.1807000000 0.9047160000 0.0285135000 - 26.2824000000 0.9364590000 0.0295582000 - 26.3847000000 0.8753380000 0.0284619000 - 26.4876000000 0.8179390000 0.0277574000 - 26.5910000000 0.7195360000 0.0260743000 - 26.6951000000 0.6805780000 0.0267298000 - 26.7998000000 0.7113360000 0.0313208000 - 26.9051000000 0.8890370000 0.0454545000 - 27.0110000000 0.9588390000 0.0528428000 - 27.1176000000 1.0704100000 0.0490603000 - 27.2248000000 0.9882660000 0.0362184000 - 27.3326000000 0.9577500000 0.0312730000 - 27.4410000000 0.9876770000 0.0312963000 - 27.5502000000 0.9947150000 0.0308071000 - 27.6599000000 0.9360990000 0.0284115000 - 27.7703000000 0.9986620000 0.0307324000 - 27.8814000000 0.9757830000 0.0294059000 - 27.9932000000 0.9641810000 0.0295117000 - 28.1056000000 0.9858600000 0.0301198000 - 28.2187000000 0.9589610000 0.0291927000 - 28.3325000000 0.9802880000 0.0293570000 - 28.4470000000 0.9397350000 0.0287737000 - 28.5621000000 0.8862370000 0.0277541000 - 28.6780000000 0.8905800000 0.0280938000 - 28.7946000000 0.8767000000 0.0273413000 - 28.9119000000 0.9268360000 0.0287576000 - 29.0299000000 0.8556840000 0.0271895000 - 29.1486000000 0.9137910000 0.0285498000 - 29.2681000000 0.8319910000 0.0262487000 - 29.3883000000 0.8799540000 0.0276573000 - 29.5092000000 0.9173570000 0.0285350000 - 29.6309000000 0.9672390000 0.0292756000 - 29.7533000000 0.9266570000 0.0283722000 - 29.8766000000 0.9528170000 0.0288518000 diff --git a/examples/data/u235-u238.twenty b/examples/data/u235-u238.twenty deleted file mode 100644 index b9cec7c..0000000 --- a/examples/data/u235-u238.twenty +++ /dev/null @@ -1,5000 +0,0 @@ - 1.0 0.8986456911 0.05 - 1.0198039608 0.8932659809 0.05 - 1.0396079216 0.8862739083 0.05 - 1.0594118824 0.8774798525 0.05 - 1.0792158432 0.8671346826 0.05 - 1.099019804 0.8561987923 0.05 - 1.1188237648 0.8473398256 0.05 - 1.1386277255 0.8449164117 0.05 - 1.1584316863 0.8517653042 0.05 - 1.1782356471 0.8669889567 0.05 - 1.1980396079 0.885829224 0.05 - 1.2178435687 0.9035751107 0.05 - 1.2376475295 0.917719668 0.05 - 1.2574514903 0.9278700911 0.05 - 1.2772554511 0.934326443 0.05 - 1.2970594119 0.9378253707 0.05 - 1.3168633727 0.9400169878 0.05 - 1.3366673335 0.9423163001 0.05 - 1.3564712943 0.9447098837 0.05 - 1.3762752551 0.9467669539 0.05 - 1.3960792158 0.9483655877 0.05 - 1.4158831766 0.9495913713 0.05 - 1.4356871374 0.9505492986 0.05 - 1.4554910982 0.9513250539 0.05 - 1.475295059 0.9519568973 0.05 - 1.4950990198 0.9524812761 0.05 - 1.5149029806 0.9529446962 0.05 - 1.5347069414 0.9533257242 0.05 - 1.5545109022 0.9536610248 0.05 - 1.574314863 0.9539525929 0.05 - 1.5941188238 0.9542203224 0.05 - 1.6139227846 0.9544479375 0.05 - 1.6337267453 0.9546622644 0.05 - 1.6535307061 0.9548524223 0.05 - 1.6733346669 0.9550059647 0.05 - 1.6931386277 0.9551467228 0.05 - 1.7129425885 0.9552743552 0.05 - 1.7327465493 0.9553685025 0.05 - 1.7525505101 0.9554442264 0.05 - 1.7723544709 0.9554914961 0.05 - 1.7921584317 0.9554905442 0.05 - 1.8119623925 0.9554479198 0.05 - 1.8317663533 0.9553461702 0.05 - 1.8515703141 0.9551455423 0.05 - 1.8713742749 0.9548212061 0.05 - 1.8911782356 0.9542923374 0.05 - 1.9109821964 0.9534096884 0.05 - 1.9307861572 0.9518678462 0.05 - 1.950590118 0.9489597782 0.05 - 1.9703940788 0.9429015267 0.05 - 1.9901980396 0.9304906395 0.05 - 2.0100020004 0.9109299547 0.05 - 2.0298059612 0.8949697521 0.05 - 2.049609922 0.898130712 0.05 - 2.0694138828 0.9168759733 0.05 - 2.0892178436 0.9349749151 0.05 - 2.1090218044 0.9454387721 0.05 - 2.1288257652 0.9505559155 0.05 - 2.1486297259 0.9531754653 0.05 - 2.1684336867 0.9546731626 0.05 - 2.1882376475 0.9555994087 0.05 - 2.2080416083 0.9562379583 0.05 - 2.2278455691 0.9566842833 0.05 - 2.2476495299 0.9570080616 0.05 - 2.2674534907 0.9572665119 0.05 - 2.2872574515 0.957469942 0.05 - 2.3070614123 0.9576254286 0.05 - 2.3268653731 0.9577490735 0.05 - 2.3466693339 0.957855363 0.05 - 2.3664732947 0.9579497142 0.05 - 2.3862772555 0.9580286402 0.05 - 2.4060812162 0.958091968 0.05 - 2.425885177 0.9581457493 0.05 - 2.4456891378 0.9581928886 0.05 - 2.4654930986 0.9582281399 0.05 - 2.4852970594 0.9582676418 0.05 - 2.5051010202 0.9582979021 0.05 - 2.524904981 0.9583416437 0.05 - 2.5447089418 0.9583805662 0.05 - 2.5645129026 0.9584289404 0.05 - 2.5843168634 0.9584962995 0.05 - 2.6041208242 0.958562635 0.05 - 2.623924785 0.9586321905 0.05 - 2.6437287457 0.9587044872 0.05 - 2.6635327065 0.9587205886 0.05 - 2.6833366673 0.9586399913 0.05 - 2.7031406281 0.9583148148 0.05 - 2.7229445889 0.9575540709 0.05 - 2.7427485497 0.9562270666 0.05 - 2.7625525105 0.9543543707 0.05 - 2.7823564713 0.9522173254 0.05 - 2.8021604321 0.9502412346 0.05 - 2.8219643929 0.9486313086 0.05 - 2.8417683537 0.9474560563 0.05 - 2.8615723145 0.9465395581 0.05 - 2.8813762753 0.9457402723 0.05 - 2.901180236 0.9448606263 0.05 - 2.9209841968 0.9438671273 0.05 - 2.9407881576 0.9426412741 0.05 - 2.9605921184 0.9411240716 0.05 - 2.9803960792 0.9391711635 0.05 - 3.00020004 0.9366675361 0.05 - 3.0200040008 0.9334393336 0.05 - 3.0398079616 0.9292324737 0.05 - 3.0596119224 0.9237898153 0.05 - 3.0794158832 0.9170632085 0.05 - 3.099219844 0.9094444138 0.05 - 3.1190238048 0.9022051879 0.05 - 3.1388277656 0.8973877502 0.05 - 3.1586317263 0.8968308736 0.05 - 3.1784356871 0.9008803857 0.05 - 3.1982396479 0.9079569117 0.05 - 3.2180436087 0.9156660677 0.05 - 3.2378475695 0.9223735462 0.05 - 3.2576515303 0.927276217 0.05 - 3.2774554911 0.930458772 0.05 - 3.2972594519 0.9322354022 0.05 - 3.3170634127 0.9329744396 0.05 - 3.3368673735 0.9328854707 0.05 - 3.3566713343 0.9321259135 0.05 - 3.3764752951 0.9308006859 0.05 - 3.3962792559 0.9288479332 0.05 - 3.4160832166 0.9262649192 0.05 - 3.4358871774 0.9228604068 0.05 - 3.4556911382 0.9183854774 0.05 - 3.475495099 0.9124152239 0.05 - 3.4952990598 0.9041839461 0.05 - 3.5151030206 0.892533031 0.05 - 3.5349069814 0.8758792021 0.05 - 3.5547109422 0.8533152059 0.05 - 3.574514903 0.8273043048 0.05 - 3.5943188638 0.8050612632 0.05 - 3.6141228246 0.7963821546 0.05 - 3.6339267854 0.8058058634 0.05 - 3.6537307461 0.8280781133 0.05 - 3.6735347069 0.8528738054 0.05 - 3.6933386677 0.8721381271 0.05 - 3.7131426285 0.8837293933 0.05 - 3.7329465893 0.8891075561 0.05 - 3.7527505501 0.890335663 0.05 - 3.7725545109 0.8888457945 0.05 - 3.7923584717 0.8853702026 0.05 - 3.8121624325 0.8802312522 0.05 - 3.8319663933 0.8737416509 0.05 - 3.8517703541 0.8657404076 0.05 - 3.8715743149 0.8564012404 0.05 - 3.8913782757 0.8452697307 0.05 - 3.9111822364 0.8324088645 0.05 - 3.9309861972 0.8172499925 0.05 - 3.950790158 0.7993978429 0.05 - 3.9705941188 0.7782273104 0.05 - 3.9903980796 0.7529974709 0.05 - 4.0102020404 0.7229540504 0.05 - 4.0300060012 0.6864619347 0.05 - 4.049809962 0.642021852 0.05 - 4.0696139228 0.587421453 0.05 - 4.0894178836 0.5201923354 0.05 - 4.1092218444 0.4371729552 0.05 - 4.1290258052 0.3362777332 0.05 - 4.148829766 0.2202391254 0.05 - 4.1686337267 0.1058008282 0.05 - 4.1884376875 0.0288276614 0.05 - 4.2082416483 0.0032162173 0.05 - 4.2280456091 0.0001334506 0.05 - 4.2478495699 3.7425e-06 0.05 - 4.2676535307 2.777e-07 0.05 - 4.2874574915 2.054e-07 0.05 - 4.3072614523 1.798e-06 0.05 - 4.3270654131 5.70763e-05 0.05 - 4.3468693739 0.0015945174 0.05 - 4.3666733347 0.0177820208 0.05 - 4.3864772955 0.078265616 0.05 - 4.4062812563 0.1823927464 0.05 - 4.426085217 0.2972924098 0.05 - 4.4458891778 0.4006280633 0.05 - 4.4656931386 0.4871744177 0.05 - 4.4854970994 0.557873104 0.05 - 4.5053010602 0.6152473918 0.05 - 4.525105021 0.6621793165 0.05 - 4.5449089818 0.7006663506 0.05 - 4.5647129426 0.7325646409 0.05 - 4.5845169034 0.7591749476 0.05 - 4.6043208642 0.781383428 0.05 - 4.624124825 0.8000834244 0.05 - 4.6439287858 0.8159671409 0.05 - 4.6637327465 0.8291723015 0.05 - 4.6835367073 0.8402072682 0.05 - 4.7033406681 0.8489314144 0.05 - 4.7231446289 0.8549801378 0.05 - 4.7429485897 0.8571412364 0.05 - 4.7627525505 0.8524384224 0.05 - 4.7825565113 0.8363618165 0.05 - 4.8023604721 0.8066657324 0.05 - 4.8221644329 0.771055936 0.05 - 4.8419683937 0.7478849129 0.05 - 4.8617723545 0.7530491116 0.05 - 4.8815763153 0.7858753598 0.05 - 4.9013802761 0.8300389081 0.05 - 4.9211842368 0.8679498205 0.05 - 4.9409881976 0.8927636734 0.05 - 4.9607921584 0.9070885427 0.05 - 4.9805961192 0.9154311775 0.05 - 5.00040008 0.920876959 0.05 - 5.0202040408 0.9248235296 0.05 - 5.0400080016 0.9279145806 0.05 - 5.0598119624 0.9303990445 0.05 - 5.0796159232 0.9325052278 0.05 - 5.099419884 0.9342750618 0.05 - 5.1192238448 0.9358061224 0.05 - 5.1390278056 0.9371015431 0.05 - 5.1588317664 0.9381975302 0.05 - 5.1786357271 0.9391353966 0.05 - 5.1984396879 0.9398992799 0.05 - 5.2182436487 0.9404792593 0.05 - 5.2380476095 0.940923595 0.05 - 5.2578515703 0.9412227503 0.05 - 5.2776555311 0.9413694569 0.05 - 5.2974594919 0.9413687724 0.05 - 5.3172634527 0.9412108282 0.05 - 5.3370674135 0.940875507 0.05 - 5.3568713743 0.9402579593 0.05 - 5.3766753351 0.9392564719 0.05 - 5.3964792959 0.9376611999 0.05 - 5.4162832567 0.9354069015 0.05 - 5.4360872174 0.9329420911 0.05 - 5.4558911782 0.9312214654 0.05 - 5.475695139 0.9312423851 0.05 - 5.4954990998 0.9330849013 0.05 - 5.5153030606 0.9358776712 0.05 - 5.5351070214 0.9386275344 0.05 - 5.5549109822 0.9407604253 0.05 - 5.574714943 0.9422540204 0.05 - 5.5945189038 0.9433282148 0.05 - 5.6143228646 0.9441908403 0.05 - 5.6341268254 0.9449211353 0.05 - 5.6539307862 0.9455749796 0.05 - 5.6737347469 0.9461589392 0.05 - 5.6935387077 0.9466926141 0.05 - 5.7133426685 0.9471458818 0.05 - 5.7331466293 0.9475345246 0.05 - 5.7529505901 0.9478561229 0.05 - 5.7727545509 0.948096959 0.05 - 5.7925585117 0.9482500492 0.05 - 5.8123624725 0.9482940933 0.05 - 5.8321664333 0.9482361186 0.05 - 5.8519703941 0.948067162 0.05 - 5.8717743549 0.9477687556 0.05 - 5.8915783157 0.9473151563 0.05 - 5.9113822765 0.946707139 0.05 - 5.9311862372 0.9458961598 0.05 - 5.950990198 0.9448322829 0.05 - 5.9707941588 0.9435038337 0.05 - 5.9905981196 0.9418350313 0.05 - 6.0104020804 0.9397832451 0.05 - 6.0302060412 0.9372393076 0.05 - 6.050010002 0.9341592077 0.05 - 6.0698139628 0.9304547216 0.05 - 6.0896179236 0.9261165889 0.05 - 6.1094218844 0.9211582825 0.05 - 6.1292258452 0.9157631384 0.05 - 6.149029806 0.910087589 0.05 - 6.1688337668 0.9044990622 0.05 - 6.1886377275 0.8992351373 0.05 - 6.2084416883 0.8941801495 0.05 - 6.2282456491 0.8888937111 0.05 - 6.2480496099 0.881587116 0.05 - 6.2678535707 0.8690153803 0.05 - 6.2876575315 0.8452937367 0.05 - 6.3074614923 0.8024798994 0.05 - 6.3272654531 0.7364037266 0.05 - 6.3470694139 0.6558538909 0.05 - 6.3668733747 0.584433612 0.05 - 6.3866773355 0.5472836959 0.05 - 6.4064812963 0.5574973364 0.05 - 6.4262852571 0.6114144777 0.05 - 6.4460892178 0.6893334786 0.05 - 6.4658931786 0.764402775 0.05 - 6.4856971394 0.8165121031 0.05 - 6.5055011002 0.8407374074 0.05 - 6.525305061 0.8389195927 0.05 - 6.5451090218 0.8063703012 0.05 - 6.5649129826 0.7218381162 0.05 - 6.5847169434 0.5558485782 0.05 - 6.6045209042 0.3282289014 0.05 - 6.624324865 0.1411788592 0.05 - 6.6441288258 0.0528051779 0.05 - 6.6639327866 0.0261960583 0.05 - 6.6837367473 0.0257243242 0.05 - 6.7035407081 0.0503476598 0.05 - 6.7233446689 0.1332051809 0.05 - 6.7431486297 0.3114922052 0.05 - 6.7629525905 0.5368352972 0.05 - 6.7827565513 0.7108906153 0.05 - 6.8025605121 0.8084014667 0.05 - 6.8223644729 0.8577696092 0.05 - 6.8421684337 0.8840851814 0.05 - 6.8619723945 0.8995864876 0.05 - 6.8817763553 0.9092126224 0.05 - 6.9015803161 0.9149467506 0.05 - 6.9213842769 0.9173836437 0.05 - 6.9411882376 0.9163996624 0.05 - 6.9609921984 0.9109140968 0.05 - 6.9807961592 0.8991081596 0.05 - 7.00060012 0.878890821 0.05 - 7.0204040808 0.8501560985 0.05 - 7.0402080416 0.8173523833 0.05 - 7.0600120024 0.7893492057 0.05 - 7.0798159632 0.7762753079 0.05 - 7.099619924 0.7837711299 0.05 - 7.1194238848 0.8094375316 0.05 - 7.1392278456 0.8444539787 0.05 - 7.1590318064 0.8790056183 0.05 - 7.1788357672 0.9063840851 0.05 - 7.1986397279 0.9251774703 0.05 - 7.2184436887 0.9371546449 0.05 - 7.2382476495 0.9446764717 0.05 - 7.2580516103 0.9495514826 0.05 - 7.2778555711 0.9528746541 0.05 - 7.2976595319 0.9552776661 0.05 - 7.3174634927 0.9570754795 0.05 - 7.3372674535 0.9584602721 0.05 - 7.3570714143 0.959573766 0.05 - 7.3768753751 0.9604735611 0.05 - 7.3966793359 0.9612108156 0.05 - 7.4164832967 0.9618281469 0.05 - 7.4362872575 0.9623416515 0.05 - 7.4560912182 0.9627798748 0.05 - 7.475895179 0.9631511941 0.05 - 7.4956991398 0.9634643876 0.05 - 7.5155031006 0.9637362972 0.05 - 7.5353070614 0.9639814728 0.05 - 7.5551110222 0.9642236538 0.05 - 7.574914983 0.9644775587 0.05 - 7.5947189438 0.9647490135 0.05 - 7.6145229046 0.9650648802 0.05 - 7.6343268654 0.9654329086 0.05 - 7.6541308262 0.9658365462 0.05 - 7.673934787 0.9662627778 0.05 - 7.6937387477 0.9666852651 0.05 - 7.7135427085 0.9670646443 0.05 - 7.7333466693 0.9673831267 0.05 - 7.7531506301 0.9676287951 0.05 - 7.7729545909 0.9677960693 0.05 - 7.7927585517 0.9678896605 0.05 - 7.8125625125 0.9679238633 0.05 - 7.8323664733 0.9679077767 0.05 - 7.8521704341 0.9678518583 0.05 - 7.8719743949 0.9677667456 0.05 - 7.8917783557 0.9676466061 0.05 - 7.9115823165 0.9675068421 0.05 - 7.9313862773 0.9673384916 0.05 - 7.951190238 0.9671440109 0.05 - 7.9709941988 0.96691375 0.05 - 7.9907981596 0.9666533324 0.05 - 8.0106021204 0.9663625001 0.05 - 8.0304060812 0.9660351517 0.05 - 8.050210042 0.9656687652 0.05 - 8.0700140028 0.9652660019 0.05 - 8.0898179636 0.9648118877 0.05 - 8.1096219244 0.9643005482 0.05 - 8.1294258852 0.9637226672 0.05 - 8.149229846 0.963075199 0.05 - 8.1690338068 0.9623599547 0.05 - 8.1888377676 0.9615534773 0.05 - 8.2086417283 0.9606455456 0.05 - 8.2284456891 0.9596200047 0.05 - 8.2482496499 0.9584721783 0.05 - 8.2680536107 0.9571652898 0.05 - 8.2878575715 0.9556810835 0.05 - 8.3076615323 0.9539806932 0.05 - 8.3274654931 0.9520465772 0.05 - 8.3472694539 0.9498128475 0.05 - 8.3670734147 0.947244928 0.05 - 8.3868773755 0.9442400905 0.05 - 8.4066813363 0.9407391892 0.05 - 8.4264852971 0.9366048952 0.05 - 8.4462892579 0.9317021289 0.05 - 8.4660932186 0.9258007444 0.05 - 8.4858971794 0.918633974 0.05 - 8.5057011402 0.9098852499 0.05 - 8.525505101 0.8989372028 0.05 - 8.5453090618 0.8851289171 0.05 - 8.5651130226 0.8673531315 0.05 - 8.5849169834 0.8440735315 0.05 - 8.6047209442 0.8132606483 0.05 - 8.624524905 0.7723844336 0.05 - 8.6443288658 0.7190967476 0.05 - 8.6641328266 0.6527061681 0.05 - 8.6839367874 0.5765187231 0.05 - 8.7037407481 0.4983519813 0.05 - 8.7235447089 0.429300599 0.05 - 8.7433486697 0.3783471586 0.05 - 8.7631526305 0.3516846968 0.05 - 8.7829565913 0.3511389121 0.05 - 8.8027605521 0.3759780498 0.05 - 8.8225645129 0.4229284757 0.05 - 8.8423684737 0.4850873049 0.05 - 8.8621724345 0.5537578901 0.05 - 8.8819763953 0.6197901739 0.05 - 8.9017803561 0.6768641823 0.05 - 8.9215843169 0.7230612296 0.05 - 8.9413882777 0.7591704299 0.05 - 8.9611922384 0.7871724265 0.05 - 8.9809961992 0.8092716308 0.05 - 9.00080016 0.8267163867 0.05 - 9.0206041208 0.8408229747 0.05 - 9.0404080816 0.8522875833 0.05 - 9.0602120424 0.8615537045 0.05 - 9.0800160032 0.8689263205 0.05 - 9.099819964 0.8744454723 0.05 - 9.1196239248 0.8780179733 0.05 - 9.1394278856 0.8791596961 0.05 - 9.1592318464 0.8772495972 0.05 - 9.1790358072 0.8717292983 0.05 - 9.198839768 0.8621040852 0.05 - 9.2186437287 0.8490755415 0.05 - 9.2384476895 0.835048283 0.05 - 9.2582516503 0.8230092067 0.05 - 9.2780556111 0.8167552363 0.05 - 9.2978595719 0.8185609701 0.05 - 9.3176635327 0.8283501365 0.05 - 9.3374674935 0.8436625263 0.05 - 9.3572714543 0.8611439107 0.05 - 9.3770754151 0.8777706429 0.05 - 9.3968793759 0.8916896651 0.05 - 9.4166833367 0.9023148997 0.05 - 9.4364872975 0.9101433785 0.05 - 9.4562912583 0.9157236776 0.05 - 9.476095219 0.9197164732 0.05 - 9.4958991798 0.9226049049 0.05 - 9.5157031406 0.9246317609 0.05 - 9.5355071014 0.926005225 0.05 - 9.5553110622 0.9268512541 0.05 - 9.575115023 0.9272515413 0.05 - 9.5949189838 0.9272642954 0.05 - 9.6147229446 0.9268627715 0.05 - 9.6345269054 0.9261142381 0.05 - 9.6543308662 0.9250794939 0.05 - 9.674134827 0.9238876896 0.05 - 9.6939387878 0.9226133335 0.05 - 9.7137427485 0.9214447233 0.05 - 9.7335467093 0.9205218959 0.05 - 9.7533506701 0.9199071102 0.05 - 9.7731546309 0.9196598564 0.05 - 9.7929585917 0.919648266 0.05 - 9.8127625525 0.9196883646 0.05 - 9.8325665133 0.9195905119 0.05 - 9.8523704741 0.9191955175 0.05 - 9.8721744349 0.9182504988 0.05 - 9.8919783957 0.9165955235 0.05 - 9.9117823565 0.9141595787 0.05 - 9.9315863173 0.9108445736 0.05 - 9.9513902781 0.9064395821 0.05 - 9.9711942388 0.9007759475 0.05 - 9.9909981996 0.8935540507 0.05 - 10.0108021604 0.8843027058 0.05 - 10.0306061212 0.8724641452 0.05 - 10.050410082 0.8569098044 0.05 - 10.0702140428 0.8367060586 0.05 - 10.0900180036 0.8105693606 0.05 - 10.1098219644 0.7766156415 0.05 - 10.1296259252 0.7329940345 0.05 - 10.149429886 0.676245491 0.05 - 10.1692338468 0.600695116 0.05 - 10.1890378076 0.5017470842 0.05 - 10.2088417684 0.3799893563 0.05 - 10.2286457291 0.251725482 0.05 - 10.2484496899 0.1425069904 0.05 - 10.2682536507 0.0702442323 0.05 - 10.2880576115 0.0330648474 0.05 - 10.3078615723 0.017016109 0.05 - 10.3276655331 0.0112599802 0.05 - 10.3474694939 0.0107248544 0.05 - 10.3672734547 0.0149271128 0.05 - 10.3870774155 0.0276567237 0.05 - 10.4068813763 0.0581245748 0.05 - 10.4266853371 0.1204358739 0.05 - 10.4464892979 0.2216804291 0.05 - 10.4662932587 0.3498063072 0.05 - 10.4860972194 0.4791618919 0.05 - 10.5059011802 0.5884336027 0.05 - 10.525705141 0.6710698926 0.05 - 10.5455091018 0.7304794646 0.05 - 10.5653130626 0.7734554528 0.05 - 10.5851170234 0.8049925152 0.05 - 10.6049209842 0.828810568 0.05 - 10.624724945 0.8473062154 0.05 - 10.6445289058 0.8620495739 0.05 - 10.6643328666 0.8739248037 0.05 - 10.6841368274 0.8836391553 0.05 - 10.7039407882 0.8917149146 0.05 - 10.7237447489 0.8983976283 0.05 - 10.7435487097 0.9040769234 0.05 - 10.7633526705 0.9089693279 0.05 - 10.7831566313 0.9132637464 0.05 - 10.8029605921 0.9170947189 0.05 - 10.8227645529 0.9205800758 0.05 - 10.8425685137 0.9237572542 0.05 - 10.8623724745 0.9266645818 0.05 - 10.8821764353 0.9292750151 0.05 - 10.9019803961 0.9316499717 0.05 - 10.9217843569 0.9337768174 0.05 - 10.9415883177 0.9356971109 0.05 - 10.9613922785 0.9374100577 0.05 - 10.9811962392 0.9389482125 0.05 - 11.0010002 0.940310235 0.05 - 11.0208041608 0.9415389876 0.05 - 11.0406081216 0.9426312461 0.05 - 11.0604120824 0.9435983467 0.05 - 11.0802160432 0.9444766521 0.05 - 11.100020004 0.9452422821 0.05 - 11.1198239648 0.945920205 0.05 - 11.1396279256 0.9465083931 0.05 - 11.1594318864 0.9469895932 0.05 - 11.1792358472 0.9473964702 0.05 - 11.199039808 0.9476911775 0.05 - 11.2188437688 0.9478756612 0.05 - 11.2386477295 0.9479395311 0.05 - 11.2584516903 0.9478835509 0.05 - 11.2782556511 0.9477030559 0.05 - 11.2980596119 0.9474252363 0.05 - 11.3178635727 0.947055879 0.05 - 11.3376675335 0.9465576974 0.05 - 11.3574714943 0.9458692777 0.05 - 11.3772754551 0.94491041 0.05 - 11.3970794159 0.9435453969 0.05 - 11.4168833767 0.9416234477 0.05 - 11.4366873375 0.9388889092 0.05 - 11.4564912983 0.9348612312 0.05 - 11.4762952591 0.9287273328 0.05 - 11.4960992198 0.9188916461 0.05 - 11.5159031806 0.9026916804 0.05 - 11.5357071414 0.8764328803 0.05 - 11.5555111022 0.8358285741 0.05 - 11.575315063 0.7798551268 0.05 - 11.5951190238 0.7126875678 0.05 - 11.6149229846 0.6462162288 0.05 - 11.6347269454 0.5937074353 0.05 - 11.6545309062 0.5665949962 0.05 - 11.674334867 0.5704546444 0.05 - 11.6941388278 0.6045258324 0.05 - 11.7139427886 0.6618515028 0.05 - 11.7337467493 0.7304191101 0.05 - 11.7535507101 0.796178316 0.05 - 11.7733546709 0.8492050045 0.05 - 11.7931586317 0.8864134366 0.05 - 11.8129625925 0.9097725964 0.05 - 11.8327665533 0.9237313138 0.05 - 11.8525705141 0.9318675847 0.05 - 11.8723744749 0.9367006751 0.05 - 11.8921784357 0.9395587651 0.05 - 11.9119823965 0.9412432018 0.05 - 11.9317863573 0.9421068794 0.05 - 11.9515903181 0.94238024 0.05 - 11.9713942789 0.9421450176 0.05 - 11.9911982396 0.9414345152 0.05 - 12.0110022004 0.9402927292 0.05 - 12.0308061612 0.9387092135 0.05 - 12.050610122 0.9365784999 0.05 - 12.0704140828 0.9338328759 0.05 - 12.0902180436 0.9302917539 0.05 - 12.1100220044 0.9258031332 0.05 - 12.1298259652 0.9199623395 0.05 - 12.149629926 0.9123251904 0.05 - 12.1694338868 0.901959432 0.05 - 12.1892378476 0.8875853323 0.05 - 12.2090418084 0.8670245601 0.05 - 12.2288457692 0.8371674047 0.05 - 12.2486497299 0.7943137588 0.05 - 12.2684536907 0.7353972769 0.05 - 12.2882576515 0.6610557959 0.05 - 12.3080616123 0.5773395837 0.05 - 12.3278655731 0.4962674285 0.05 - 12.3476695339 0.4293937759 0.05 - 12.3674734947 0.3865455598 0.05 - 12.3872774555 0.3723940663 0.05 - 12.4070814163 0.3878233778 0.05 - 12.4268853771 0.4315107278 0.05 - 12.4466893379 0.4994015301 0.05 - 12.4664932987 0.5819370098 0.05 - 12.4862972595 0.667095657 0.05 - 12.5061012202 0.7430054808 0.05 - 12.525905181 0.8031932336 0.05 - 12.5457091418 0.8467386468 0.05 - 12.5655131026 0.8769943783 0.05 - 12.5853170634 0.8975740475 0.05 - 12.6051210242 0.9116625998 0.05 - 12.624924985 0.9214309205 0.05 - 12.6447289458 0.9282123555 0.05 - 12.6645329066 0.9328861203 0.05 - 12.6843368674 0.9358769034 0.05 - 12.7041408282 0.9374157372 0.05 - 12.723944789 0.9377153099 0.05 - 12.7437487497 0.9368698287 0.05 - 12.7635527105 0.9350937111 0.05 - 12.7833566713 0.9327329666 0.05 - 12.8031606321 0.9302636181 0.05 - 12.8229645929 0.9282421571 0.05 - 12.8427685537 0.9272855664 0.05 - 12.8625725145 0.9277256055 0.05 - 12.8823764753 0.929663785 0.05 - 12.9021804361 0.9328278102 0.05 - 12.9219843969 0.9367618307 0.05 - 12.9417883577 0.9408915552 0.05 - 12.9615923185 0.9447732662 0.05 - 12.9813962793 0.9481078242 0.05 - 13.00120024 0.9507183428 0.05 - 13.0210042008 0.9526015229 0.05 - 13.0408081616 0.9538112087 0.05 - 13.0606121224 0.9544293231 0.05 - 13.0804160832 0.9544951499 0.05 - 13.100220044 0.9540563852 0.05 - 13.1200240048 0.953140812 0.05 - 13.1398279656 0.9517843001 0.05 - 13.1596319264 0.9500236693 0.05 - 13.1794358872 0.9479435344 0.05 - 13.199239848 0.9457362308 0.05 - 13.2190438088 0.9435309439 0.05 - 13.2388477696 0.9416036666 0.05 - 13.2586517303 0.9401891132 0.05 - 13.2784556911 0.9394725634 0.05 - 13.2982596519 0.9394982647 0.05 - 13.3180636127 0.9401932287 0.05 - 13.3378675735 0.9413454413 0.05 - 13.3576715343 0.9427570986 0.05 - 13.3774754951 0.9441440879 0.05 - 13.3972794559 0.9452674576 0.05 - 13.4170834167 0.9459776048 0.05 - 13.4368873775 0.9461151722 0.05 - 13.4566913383 0.9456137331 0.05 - 13.4764952991 0.9444408546 0.05 - 13.4962992599 0.9425689058 0.05 - 13.5161032206 0.939957492 0.05 - 13.5359071814 0.9366210077 0.05 - 13.5557111422 0.9325707307 0.05 - 13.575515103 0.927832259 0.05 - 13.5953190638 0.9225176689 0.05 - 13.6151230246 0.9166513803 0.05 - 13.6349269854 0.9104188944 0.05 - 13.6547309462 0.9037300742 0.05 - 13.674534907 0.8965535445 0.05 - 13.6943388678 0.8886319381 0.05 - 13.7141428286 0.8793088866 0.05 - 13.7339467894 0.8674488983 0.05 - 13.7537507502 0.8511461535 0.05 - 13.7735547109 0.8275307724 0.05 - 13.7933586717 0.7934095339 0.05 - 13.8131626325 0.7457624078 0.05 - 13.8329665933 0.6838921252 0.05 - 13.8527705541 0.6113916545 0.05 - 13.8725745149 0.5356072306 0.05 - 13.8923784757 0.4663757179 0.05 - 13.9121824365 0.4123924968 0.05 - 13.9319863973 0.3787370584 0.05 - 13.9517903581 0.3681276287 0.05 - 13.9715943189 0.3806175721 0.05 - 13.9913982797 0.4156849485 0.05 - 14.0112022404 0.4698150692 0.05 - 14.0310062012 0.5376129701 0.05 - 14.050810162 0.6108230483 0.05 - 14.0706141228 0.6801896654 0.05 - 14.0904180836 0.7394255109 0.05 - 14.1102220444 0.7855029449 0.05 - 14.1300260052 0.8195291741 0.05 - 14.149829966 0.8439483489 0.05 - 14.1696339268 0.8616139533 0.05 - 14.1894378876 0.8747793017 0.05 - 14.2092418484 0.8849031313 0.05 - 14.2290458092 0.8930050769 0.05 - 14.24884977 0.8996084147 0.05 - 14.2686537307 0.9050655466 0.05 - 14.2884576915 0.9096349962 0.05 - 14.3082616523 0.9133560126 0.05 - 14.3280656131 0.9163083915 0.05 - 14.3478695739 0.9184183933 0.05 - 14.3676735347 0.9196578047 0.05 - 14.3874774955 0.9198201718 0.05 - 14.4072814563 0.9185648465 0.05 - 14.4270854171 0.9156054446 0.05 - 14.4468893779 0.9108821506 0.05 - 14.4666933387 0.904640009 0.05 - 14.4864972995 0.8977220825 0.05 - 14.5063012603 0.891608855 0.05 - 14.526105221 0.8880703637 0.05 - 14.5459091818 0.88849528 0.05 - 14.5657131426 0.8934979666 0.05 - 14.5855171034 0.9022968179 0.05 - 14.6053210642 0.9134993882 0.05 - 14.625125025 0.9250767914 0.05 - 14.6449289858 0.9355469455 0.05 - 14.6647329466 0.9438721335 0.05 - 14.6845369074 0.9499329227 0.05 - 14.7043408682 0.9540984038 0.05 - 14.724144829 0.9568594232 0.05 - 14.7439487898 0.9586967397 0.05 - 14.7637527506 0.9599605167 0.05 - 14.7835567113 0.9608829847 0.05 - 14.8033606721 0.9615975351 0.05 - 14.8231646329 0.9621672579 0.05 - 14.8429685937 0.9626389245 0.05 - 14.8627725545 0.9630270763 0.05 - 14.8825765153 0.9633332541 0.05 - 14.9023804761 0.963575227 0.05 - 14.9221844369 0.9637500485 0.05 - 14.9419883977 0.9638703113 0.05 - 14.9617923585 0.9639328896 0.05 - 14.9815963193 0.9639441107 0.05 - 15.0014002801 0.963891497 0.05 - 15.0212042408 0.9637916188 0.05 - 15.0410082016 0.9636313221 0.05 - 15.0608121624 0.9633999637 0.05 - 15.0806161232 0.9630730173 0.05 - 15.100420084 0.9626290439 0.05 - 15.1202240448 0.9620056757 0.05 - 15.1400280056 0.9611240294 0.05 - 15.1598319664 0.9598629425 0.05 - 15.1796359272 0.9580510453 0.05 - 15.199439888 0.9554714464 0.05 - 15.2192438488 0.9518456478 0.05 - 15.2390478096 0.9468574213 0.05 - 15.2588517704 0.9400982306 0.05 - 15.2786557311 0.9313350942 0.05 - 15.2984596919 0.9205766859 0.05 - 15.3182636527 0.9079532084 0.05 - 15.3380676135 0.8947674016 0.05 - 15.3578715743 0.8822505433 0.05 - 15.3776755351 0.8722418375 0.05 - 15.3974794959 0.8666754364 0.05 - 15.4172834567 0.8665354471 0.05 - 15.4370874175 0.8719793769 0.05 - 15.4568913783 0.8821382271 0.05 - 15.4766953391 0.8953486969 0.05 - 15.4964992999 0.9096496373 0.05 - 15.5163032607 0.9233645094 0.05 - 15.5361072214 0.9351965321 0.05 - 15.5559111822 0.9446809001 0.05 - 15.575715143 0.9518806965 0.05 - 15.5955191038 0.9571120096 0.05 - 15.6153230646 0.9608135702 0.05 - 15.6351270254 0.9634001837 0.05 - 15.6549309862 0.9651722294 0.05 - 15.674734947 0.9663761928 0.05 - 15.6945389078 0.9671752505 0.05 - 15.7143428686 0.9676574 0.05 - 15.7341468294 0.9678798039 0.05 - 15.7539507902 0.967866771 0.05 - 15.773754751 0.9676229661 0.05 - 15.7935587117 0.9671223477 0.05 - 15.8133626725 0.9663092918 0.05 - 15.8331666333 0.9651041607 0.05 - 15.8529705941 0.963308979 0.05 - 15.8727745549 0.9605963678 0.05 - 15.8925785157 0.9565021507 0.05 - 15.9123824765 0.9501829619 0.05 - 15.9321864373 0.940611337 0.05 - 15.9519903981 0.9265496969 0.05 - 15.9717943589 0.9072064449 0.05 - 15.9915983197 0.8826656833 0.05 - 16.0114022805 0.8546925873 0.05 - 16.0312062412 0.8268644457 0.05 - 16.051010202 0.8034991751 0.05 - 16.0708141628 0.7892449152 0.05 - 16.0906181236 0.7868046499 0.05 - 16.1104220844 0.7967803551 0.05 - 16.1302260452 0.8171459539 0.05 - 16.150030006 0.8440113998 0.05 - 16.1698339668 0.8726279299 0.05 - 16.1896379276 0.8991461018 0.05 - 16.2094418884 0.9208897588 0.05 - 16.2292458492 0.9371233789 0.05 - 16.24904981 0.9483646341 0.05 - 16.2688537708 0.9557406127 0.05 - 16.2886577315 0.9604231836 0.05 - 16.3084616923 0.9633226778 0.05 - 16.3282656531 0.9650126426 0.05 - 16.3480696139 0.9658728415 0.05 - 16.3678735747 0.9660516095 0.05 - 16.3876775355 0.9656449851 0.05 - 16.4074814963 0.9645825434 0.05 - 16.4272854571 0.9627860016 0.05 - 16.4470894179 0.9600423544 0.05 - 16.4668933787 0.9561180574 0.05 - 16.4866973395 0.9507533363 0.05 - 16.5065013003 0.9437126213 0.05 - 16.5263052611 0.9348272291 0.05 - 16.5461092218 0.9243773212 0.05 - 16.5659131826 0.9128414544 0.05 - 16.5857171434 0.9011214119 0.05 - 16.6055211042 0.8905000354 0.05 - 16.625325065 0.8821952496 0.05 - 16.6451290258 0.8772378919 0.05 - 16.6649329866 0.87633498 0.05 - 16.6847369474 0.8793246878 0.05 - 16.7045409082 0.8856997508 0.05 - 16.724344869 0.8943207428 0.05 - 16.7441488298 0.9040261596 0.05 - 16.7639527906 0.9139116956 0.05 - 16.7837567514 0.9230848024 0.05 - 16.8035607121 0.9312024752 0.05 - 16.8233646729 0.9380458593 0.05 - 16.8431686337 0.943612552 0.05 - 16.8629725945 0.9481544797 0.05 - 16.8827765553 0.9517976061 0.05 - 16.9025805161 0.9547721924 0.05 - 16.9223844769 0.9572082714 0.05 - 16.9421884377 0.959188119 0.05 - 16.9619923985 0.9608469568 0.05 - 16.9817963593 0.9622495593 0.05 - 17.0016003201 0.9634452831 0.05 - 17.0214042809 0.9644849922 0.05 - 17.0412082416 0.9653892363 0.05 - 17.0610122024 0.9661634813 0.05 - 17.0808161632 0.9668443816 0.05 - 17.100620124 0.9674585081 0.05 - 17.1204240848 0.9679995293 0.05 - 17.1402280456 0.968483965 0.05 - 17.1600320064 0.9689203176 0.05 - 17.1798359672 0.9693060173 0.05 - 17.199639928 0.9696630092 0.05 - 17.2194438888 0.9699777026 0.05 - 17.2392478496 0.9702600143 0.05 - 17.2590518104 0.9705153986 0.05 - 17.2788557712 0.9707424408 0.05 - 17.2986597319 0.970937974 0.05 - 17.3184636927 0.9711141469 0.05 - 17.3382676535 0.9712653913 0.05 - 17.3580716143 0.9713842642 0.05 - 17.3778755751 0.9714820543 0.05 - 17.3976795359 0.9715574424 0.05 - 17.4174834967 0.9715972063 0.05 - 17.4372874575 0.9716111032 0.05 - 17.4570914183 0.9716000872 0.05 - 17.4768953791 0.9715650541 0.05 - 17.4966993399 0.9715034234 0.05 - 17.5165033007 0.9714198673 0.05 - 17.5363072615 0.9713184704 0.05 - 17.5561112222 0.971183283 0.05 - 17.575915183 0.9710067088 0.05 - 17.5957191438 0.9707757055 0.05 - 17.6155231046 0.9704789312 0.05 - 17.6353270654 0.9700954444 0.05 - 17.6551310262 0.9696212217 0.05 - 17.674934987 0.9690160556 0.05 - 17.6947389478 0.9682568282 0.05 - 17.7145429086 0.9672887905 0.05 - 17.7343468694 0.9660727958 0.05 - 17.7541508302 0.9645246678 0.05 - 17.773954791 0.9625293972 0.05 - 17.7937587518 0.9599748082 0.05 - 17.8135627125 0.9566399481 0.05 - 17.8333666733 0.9523334259 0.05 - 17.8531706341 0.9467946868 0.05 - 17.8729745949 0.9397951763 0.05 - 17.8927785557 0.9312104145 0.05 - 17.9125825165 0.9210522585 0.05 - 17.9323864773 0.909673607 0.05 - 17.9521904381 0.8977396127 0.05 - 17.9719943989 0.8861188752 0.05 - 17.9917983597 0.8759152064 0.05 - 18.0116023205 0.8683034587 0.05 - 18.0314062813 0.8640349425 0.05 - 18.051210242 0.8636445802 0.05 - 18.0710142028 0.866914527 0.05 - 18.0908181636 0.873382358 0.05 - 18.1106221244 0.8820247531 0.05 - 18.1304260852 0.8919248569 0.05 - 18.150230046 0.902212449 0.05 - 18.1700340068 0.9119993104 0.05 - 18.1898379676 0.9209805703 0.05 - 18.2096419284 0.9287214047 0.05 - 18.2294458892 0.93523561 0.05 - 18.24924985 0.9405625033 0.05 - 18.2690538108 0.9448252591 0.05 - 18.2888577716 0.9482312139 0.05 - 18.3086617323 0.9509218513 0.05 - 18.3284656931 0.9530558654 0.05 - 18.3482696539 0.9547174446 0.05 - 18.3680736147 0.9560346419 0.05 - 18.3878775755 0.9570466685 0.05 - 18.4076815363 0.9578384763 0.05 - 18.4274854971 0.95843619 0.05 - 18.4472894579 0.9588698771 0.05 - 18.4670934187 0.9591562675 0.05 - 18.4868973795 0.9593023812 0.05 - 18.5067013403 0.9593417393 0.05 - 18.5265053011 0.9592554207 0.05 - 18.5463092619 0.9590633864 0.05 - 18.5661132226 0.9587624735 0.05 - 18.5859171834 0.9583483548 0.05 - 18.6057211442 0.9578206209 0.05 - 18.625525105 0.9571797934 0.05 - 18.6453290658 0.9564115425 0.05 - 18.6651330266 0.9554983857 0.05 - 18.6849369874 0.9544423171 0.05 - 18.7047409482 0.9531934309 0.05 - 18.724544909 0.9517359818 0.05 - 18.7443488698 0.9500280612 0.05 - 18.7641528306 0.9479928775 0.05 - 18.7839567914 0.9455786447 0.05 - 18.8037607522 0.9426368638 0.05 - 18.8235647129 0.9390738424 0.05 - 18.8433686737 0.9347030658 0.05 - 18.8631726345 0.9294315759 0.05 - 18.8829765953 0.9231480022 0.05 - 18.9027805561 0.9160097214 0.05 - 18.9225845169 0.9082290092 0.05 - 18.9423884777 0.9001362094 0.05 - 18.9621924385 0.8920805343 0.05 - 18.9819963993 0.8840678002 0.05 - 19.0018003601 0.8757380227 0.05 - 19.0216043209 0.8662580545 0.05 - 19.0414082817 0.8538705066 0.05 - 19.0612122424 0.8364508595 0.05 - 19.0810162032 0.8116549416 0.05 - 19.100820164 0.7771616841 0.05 - 19.1206241248 0.7311833929 0.05 - 19.1404280856 0.673583976 0.05 - 19.1602320464 0.6059197534 0.05 - 19.1800360072 0.5336625432 0.05 - 19.199839968 0.4625478884 0.05 - 19.2196439288 0.3988775663 0.05 - 19.2394478896 0.3486794135 0.05 - 19.2592518504 0.3137055549 0.05 - 19.2790558112 0.2963234177 0.05 - 19.298859772 0.2960098076 0.05 - 19.3186637327 0.3126326461 0.05 - 19.3384676935 0.3455226089 0.05 - 19.3582716543 0.3940518771 0.05 - 19.3780756151 0.4537392861 0.05 - 19.3978795759 0.5209240091 0.05 - 19.4176835367 0.5891213187 0.05 - 19.4374874975 0.6524394038 0.05 - 19.4572914583 0.7074244297 0.05 - 19.4770954191 0.7528165025 0.05 - 19.4968993799 0.7890268368 0.05 - 19.5167033407 0.8178224138 0.05 - 19.5365073015 0.8410404863 0.05 - 19.5563112623 0.859949499 0.05 - 19.576115223 0.8756272228 0.05 - 19.5959191838 0.8885754937 0.05 - 19.6157231446 0.8992939748 0.05 - 19.6355271054 0.9080156524 0.05 - 19.6553310662 0.9151030645 0.05 - 19.675135027 0.9207661075 0.05 - 19.6949389878 0.9253177653 0.05 - 19.7147429486 0.928979961 0.05 - 19.7345469094 0.9319757706 0.05 - 19.7543508702 0.9343945083 0.05 - 19.774154831 0.9363986285 0.05 - 19.7939587918 0.9379768244 0.05 - 19.8137627526 0.9392488645 0.05 - 19.8335667133 0.9401917729 0.05 - 19.8533706741 0.9408304816 0.05 - 19.8731746349 0.9412119354 0.05 - 19.8929785957 0.941265354 0.05 - 19.9127825565 0.9410123326 0.05 - 19.9325865173 0.9403795888 0.05 - 19.9523904781 0.9393011268 0.05 - 19.9721944389 0.937636293 0.05 - 19.9919983997 0.9352075483 0.05 - 20.0118023605 0.9317188126 0.05 - 20.0316063213 0.9267837803 0.05 - 20.0514102821 0.9197611207 0.05 - 20.0712142428 0.9098632263 0.05 - 20.0910182036 0.8960653123 0.05 - 20.1108221644 0.8770952761 0.05 - 20.1306261252 0.8519508285 0.05 - 20.150430086 0.8200176214 0.05 - 20.1702340468 0.7815031095 0.05 - 20.1900380076 0.7380754925 0.05 - 20.2098419684 0.6926739068 0.05 - 20.2296459292 0.6496807601 0.05 - 20.24944989 0.6129008489 0.05 - 20.2692538508 0.5861160964 0.05 - 20.2890578116 0.571781115 0.05 - 20.3088617724 0.571586049 0.05 - 20.3286657331 0.5850168106 0.05 - 20.3484696939 0.6112663241 0.05 - 20.3682736547 0.647329521 0.05 - 20.3880776155 0.6891841569 0.05 - 20.4078815763 0.7330494106 0.05 - 20.4276855371 0.7740026638 0.05 - 20.4474894979 0.8087523676 0.05 - 20.4672934587 0.8353374029 0.05 - 20.4870974195 0.8532302325 0.05 - 20.5069013803 0.8628931753 0.05 - 20.5267053411 0.8655277973 0.05 - 20.5465093019 0.8624723984 0.05 - 20.5663132627 0.8549259526 0.05 - 20.5861172234 0.8439553134 0.05 - 20.6059211842 0.8294965227 0.05 - 20.625725145 0.8103689436 0.05 - 20.6455291058 0.7827040321 0.05 - 20.6653330666 0.739933137 0.05 - 20.6851370274 0.6723328829 0.05 - 20.7049409882 0.5714818571 0.05 - 20.724744949 0.4408430859 0.05 - 20.7445489098 0.2983722351 0.05 - 20.7643528706 0.1741400236 0.05 - 20.7841568314 0.0886974176 0.05 - 20.8039607922 0.0418547988 0.05 - 20.823764753 0.0201025368 0.05 - 20.8435687137 0.0111556803 0.05 - 20.8633726745 0.008006186 0.05 - 20.8831766353 0.0079602823 0.05 - 20.9029805961 0.0108381227 0.05 - 20.9227845569 0.0188044361 0.05 - 20.9425885177 0.0368403002 0.05 - 20.9623924785 0.0720093001 0.05 - 20.9821964393 0.1294893244 0.05 - 21.0020004001 0.2033346561 0.05 - 21.0218043609 0.2798258109 0.05 - 21.0416083217 0.3474483259 0.05 - 21.0614122825 0.4032655202 0.05 - 21.0812162432 0.4523715125 0.05 - 21.101020204 0.500832289 0.05 - 21.1208241648 0.5526518 0.05 - 21.1406281256 0.6074326974 0.05 - 21.1604320864 0.6634851323 0.05 - 21.1802360472 0.7172252322 0.05 - 21.200040008 0.7650114917 0.05 - 21.2198439688 0.8048883972 0.05 - 21.2396479296 0.8367455098 0.05 - 21.2594518904 0.8610704497 0.05 - 21.2792558512 0.8794622195 0.05 - 21.299059812 0.89329787 0.05 - 21.3188637728 0.9038898983 0.05 - 21.3386677335 0.9121252533 0.05 - 21.3584716943 0.918686565 0.05 - 21.3782756551 0.9240557686 0.05 - 21.3980796159 0.9285154566 0.05 - 21.4178835767 0.9323234437 0.05 - 21.4376875375 0.9355632698 0.05 - 21.4574914983 0.9384066737 0.05 - 21.4772954591 0.9408618786 0.05 - 21.4970994199 0.9430674167 0.05 - 21.5169033807 0.9450177718 0.05 - 21.5367073415 0.9467547745 0.05 - 21.5565113023 0.9483395337 0.05 - 21.5763152631 0.949762637 0.05 - 21.5961192238 0.9510350236 0.05 - 21.6159231846 0.9522148761 0.05 - 21.6357271454 0.9532902454 0.05 - 21.6555311062 0.9542744355 0.05 - 21.675335067 0.955175259 0.05 - 21.6951390278 0.9560146416 0.05 - 21.7149429886 0.9567903191 0.05 - 21.7347469494 0.9574991835 0.05 - 21.7545509102 0.9581649881 0.05 - 21.774354871 0.9587724192 0.05 - 21.7941588318 0.959349194 0.05 - 21.8139627926 0.9598792662 0.05 - 21.8337667534 0.9603788719 0.05 - 21.8535707141 0.9608407241 0.05 - 21.8733746749 0.9612653916 0.05 - 21.8931786357 0.9616584332 0.05 - 21.9129825965 0.9620226403 0.05 - 21.9327865573 0.9623565515 0.05 - 21.9525905181 0.9626716822 0.05 - 21.9723944789 0.9629540857 0.05 - 21.9921984397 0.9632114627 0.05 - 22.0120024005 0.9634517284 0.05 - 22.0318063613 0.9636796338 0.05 - 22.0516103221 0.9638835961 0.05 - 22.0714142829 0.9640802751 0.05 - 22.0912182436 0.9642685902 0.05 - 22.1110222044 0.9644574391 0.05 - 22.1308261652 0.9646296556 0.05 - 22.150630126 0.9647859805 0.05 - 22.1704340868 0.9649290638 0.05 - 22.1902380476 0.9650579433 0.05 - 22.2100420084 0.9651477541 0.05 - 22.2298459692 0.965211549 0.05 - 22.24964993 0.9652526104 0.05 - 22.2694538908 0.9652530372 0.05 - 22.2892578516 0.9652182455 0.05 - 22.3090618124 0.9651321947 0.05 - 22.3288657732 0.9650023309 0.05 - 22.3486697339 0.9648146711 0.05 - 22.3684736947 0.9645417263 0.05 - 22.3882776555 0.9641562477 0.05 - 22.4080816163 0.9636081124 0.05 - 22.4278855771 0.9628238981 0.05 - 22.4476895379 0.9616838034 0.05 - 22.4674934987 0.9600288465 0.05 - 22.4872974595 0.95762415 0.05 - 22.5071014203 0.9541877032 0.05 - 22.5269053811 0.9494404664 0.05 - 22.5467093419 0.9431699476 0.05 - 22.5665133027 0.935209314 0.05 - 22.5863172635 0.9257279975 0.05 - 22.6061212242 0.9152541904 0.05 - 22.625925185 0.9044206283 0.05 - 22.6457291458 0.8942007128 0.05 - 22.6655331066 0.8856629589 0.05 - 22.6853370674 0.8794898547 0.05 - 22.7051410282 0.8761179735 0.05 - 22.724944989 0.8752587942 0.05 - 22.7447489498 0.8761520038 0.05 - 22.7645529106 0.8774868275 0.05 - 22.7843568714 0.8776482523 0.05 - 22.8041608322 0.875406592 0.05 - 22.823964793 0.8699158192 0.05 - 22.8437687538 0.8613264209 0.05 - 22.8635727145 0.8507303969 0.05 - 22.8833766753 0.8398064116 0.05 - 22.9031806361 0.8307686588 0.05 - 22.9229845969 0.8257704953 0.05 - 22.9427885577 0.8257606846 0.05 - 22.9625925185 0.831383548 0.05 - 22.9823964793 0.8420260299 0.05 - 23.0022004401 0.8561759536 0.05 - 23.0220044009 0.8719608112 0.05 - 23.0418083617 0.8878766484 0.05 - 23.0616123225 0.902215071 0.05 - 23.0814162833 0.9141105886 0.05 - 23.101220244 0.9231866574 0.05 - 23.1210242048 0.9294797333 0.05 - 23.1408281656 0.933157101 0.05 - 23.1606321264 0.9344800618 0.05 - 23.1804360872 0.9333702828 0.05 - 23.200240048 0.9295348189 0.05 - 23.2200440088 0.9223001902 0.05 - 23.2398479696 0.9107765654 0.05 - 23.2596519304 0.8938713395 0.05 - 23.2794558912 0.8712289489 0.05 - 23.299259852 0.8431691658 0.05 - 23.3190638128 0.8113302509 0.05 - 23.3388677736 0.7788741215 0.05 - 23.3586717343 0.7489959103 0.05 - 23.3784756951 0.7251184408 0.05 - 23.3982796559 0.7097768047 0.05 - 23.4180836167 0.703838849 0.05 - 23.4378875775 0.706579731 0.05 - 23.4576915383 0.7155148673 0.05 - 23.4774954991 0.7276613492 0.05 - 23.4972994599 0.7396474985 0.05 - 23.5171034207 0.7488308858 0.05 - 23.5369073815 0.7535959462 0.05 - 23.5567113423 0.7535374159 0.05 - 23.5765153031 0.7493001611 0.05 - 23.5963192639 0.7414291134 0.05 - 23.6161232246 0.7300367 0.05 - 23.6359271854 0.7143115511 0.05 - 23.6557311462 0.692147208 0.05 - 23.675535107 0.6607115067 0.05 - 23.6953390678 0.6170344123 0.05 - 23.7151430286 0.5592439801 0.05 - 23.7349469894 0.4883224999 0.05 - 23.7547509502 0.4091355897 0.05 - 23.774554911 0.328438531 0.05 - 23.7943588718 0.2548825274 0.05 - 23.8141628326 0.1947451793 0.05 - 23.8339667934 0.1490626057 0.05 - 23.8537707542 0.1185022938 0.05 - 23.8735747149 0.1003565445 0.05 - 23.8933786757 0.0924996615 0.05 - 23.9131826365 0.0942294554 0.05 - 23.9329865973 0.1056058629 0.05 - 23.9527905581 0.1282089043 0.05 - 23.9725945189 0.1646458511 0.05 - 23.9923984797 0.2167794459 0.05 - 24.0122024405 0.2854235194 0.05 - 24.0320064013 0.3677324442 0.05 - 24.0518103621 0.4562391274 0.05 - 24.0716143229 0.5423030514 0.05 - 24.0914182837 0.617797074 0.05 - 24.1112222444 0.677387408 0.05 - 24.1310262052 0.7200047385 0.05 - 24.150830166 0.747525054 0.05 - 24.1706341268 0.7636617901 0.05 - 24.1904380876 0.7725633888 0.05 - 24.2102420484 0.7779096583 0.05 - 24.2300460092 0.7827899511 0.05 - 24.24984997 0.7892645869 0.05 - 24.2696539308 0.7981538296 0.05 - 24.2894578916 0.8094789818 0.05 - 24.3092618524 0.8226620935 0.05 - 24.3290658132 0.836664261 0.05 - 24.348869774 0.8504546763 0.05 - 24.3686737347 0.8631913084 0.05 - 24.3884776955 0.8745568967 0.05 - 24.4082816563 0.8841598301 0.05 - 24.4280856171 0.8921507213 0.05 - 24.4478895779 0.898609251 0.05 - 24.4676935387 0.9039201382 0.05 - 24.4874974995 0.9082139202 0.05 - 24.5073014603 0.9117586811 0.05 - 24.5271054211 0.9147382811 0.05 - 24.5469093819 0.9172081152 0.05 - 24.5667133427 0.9193534416 0.05 - 24.5865173035 0.9211956596 0.05 - 24.6063212643 0.9227785471 0.05 - 24.626125225 0.9241272657 0.05 - 24.6459291858 0.9253120266 0.05 - 24.6657331466 0.9263412275 0.05 - 24.6855371074 0.9272116734 0.05 - 24.7053410682 0.9279746275 0.05 - 24.725145029 0.9285911055 0.05 - 24.7449489898 0.9291268519 0.05 - 24.7647529506 0.9295347196 0.05 - 24.7845569114 0.9298944401 0.05 - 24.8043608722 0.9301407163 0.05 - 24.824164833 0.9302775765 0.05 - 24.8439687938 0.9303685243 0.05 - 24.8637727546 0.9303484444 0.05 - 24.8835767153 0.9302747306 0.05 - 24.9033806761 0.9301026216 0.05 - 24.9231846369 0.9298616216 0.05 - 24.9429885977 0.9295393719 0.05 - 24.9627925585 0.9291655763 0.05 - 24.9825965193 0.9286866904 0.05 - 25.0024004801 0.928120179 0.05 - 25.0222044409 0.9274830571 0.05 - 25.0420084017 0.9267796092 0.05 - 25.0618123625 0.9259794934 0.05 - 25.0816163233 0.9250954762 0.05 - 25.1014202841 0.9241432012 0.05 - 25.1212242448 0.9230830629 0.05 - 25.1410282056 0.921960849 0.05 - 25.1608321664 0.9207022821 0.05 - 25.1806361272 0.9194123884 0.05 - 25.200440088 0.9179785688 0.05 - 25.2202440488 0.9165323645 0.05 - 25.2400480096 0.9149394651 0.05 - 25.2598519704 0.9133287673 0.05 - 25.2796559312 0.9116692352 0.05 - 25.299459892 0.9099720226 0.05 - 25.3192638528 0.9082731552 0.05 - 25.3390678136 0.9065669472 0.05 - 25.3588717744 0.9048448889 0.05 - 25.3786757351 0.9031651634 0.05 - 25.3984796959 0.9016254609 0.05 - 25.4182836567 0.9000794967 0.05 - 25.4380876175 0.8987202266 0.05 - 25.4578915783 0.8974798951 0.05 - 25.4776955391 0.8963764073 0.05 - 25.4974994999 0.8955199336 0.05 - 25.5173034607 0.8948458542 0.05 - 25.5371074215 0.8943710681 0.05 - 25.5569113823 0.8942291658 0.05 - 25.5767153431 0.8943181089 0.05 - 25.5965193039 0.8947974264 0.05 - 25.6163232647 0.8956374257 0.05 - 25.6361272254 0.8968491911 0.05 - 25.6559311862 0.8984039453 0.05 - 25.675735147 0.9003517385 0.05 - 25.6955391078 0.9026650866 0.05 - 25.7153430686 0.9053552658 0.05 - 25.7351470294 0.9083831888 0.05 - 25.7549509902 0.911672948 0.05 - 25.774754951 0.9151909051 0.05 - 25.7945589118 0.918868581 0.05 - 25.8143628726 0.9226527227 0.05 - 25.8341668334 0.9265008933 0.05 - 25.8539707942 0.9303646731 0.05 - 25.873774755 0.9341397554 0.05 - 25.8935787157 0.9378362949 0.05 - 25.9133826765 0.9413846602 0.05 - 25.9331866373 0.9447405372 0.05 - 25.9529905981 0.9478648078 0.05 - 25.9727945589 0.9506900377 0.05 - 25.9925985197 0.9532588243 0.05 - 26.0124024805 0.9555149959 0.05 - 26.0322064413 0.9574312842 0.05 - 26.0520104021 0.9589833401 0.05 - 26.0718143629 0.960156147 0.05 - 26.0916183237 0.9609293239 0.05 - 26.1114222845 0.9612709282 0.05 - 26.1312262452 0.9611476022 0.05 - 26.151030206 0.9605295171 0.05 - 26.1708341668 0.9593598609 0.05 - 26.1906381276 0.9576088715 0.05 - 26.2104420884 0.9552306182 0.05 - 26.2302460492 0.9521963764 0.05 - 26.25005001 0.9484346137 0.05 - 26.2698539708 0.9439717511 0.05 - 26.2896579316 0.9387932071 0.05 - 26.3094618924 0.9329717368 0.05 - 26.3292658532 0.9265982233 0.05 - 26.349069814 0.9198959584 0.05 - 26.3688737748 0.9131153331 0.05 - 26.3886777355 0.9064479133 0.05 - 26.4084816963 0.9003594265 0.05 - 26.4282856571 0.8951343876 0.05 - 26.4480896179 0.8912442139 0.05 - 26.4678935787 0.8887526711 0.05 - 26.4876975395 0.8879717832 0.05 - 26.5075015003 0.8887986156 0.05 - 26.5273054611 0.8910779172 0.05 - 26.5471094219 0.8947057577 0.05 - 26.5669133827 0.8992542576 0.05 - 26.5867173435 0.9043719006 0.05 - 26.6065213043 0.9097740229 0.05 - 26.6263252651 0.9151609192 0.05 - 26.6461292258 0.9203806068 0.05 - 26.6659331866 0.9252020668 0.05 - 26.6857371474 0.9295616361 0.05 - 26.7055411082 0.9334605485 0.05 - 26.725345069 0.9368929778 0.05 - 26.7451490298 0.9399116577 0.05 - 26.7649529906 0.942557248 0.05 - 26.7847569514 0.9448668849 0.05 - 26.8045609122 0.946887196 0.05 - 26.824364873 0.9486385026 0.05 - 26.8441688338 0.9501594742 0.05 - 26.8639727946 0.9514654742 0.05 - 26.8837767554 0.9525719038 0.05 - 26.9035807161 0.953466075 0.05 - 26.9233846769 0.9541563253 0.05 - 26.9431886377 0.9546021068 0.05 - 26.9629925985 0.9547858015 0.05 - 26.9827965593 0.9546830203 0.05 - 27.0026005201 0.9543076156 0.05 - 27.0224044809 0.9536499567 0.05 - 27.0422084417 0.9527880373 0.05 - 27.0620124025 0.9518376041 0.05 - 27.0818163633 0.9509103322 0.05 - 27.1016203241 0.9501411949 0.05 - 27.1214242849 0.9497118601 0.05 - 27.1412282456 0.9497463212 0.05 - 27.1610322064 0.9503080975 0.05 - 27.1808361672 0.9513628821 0.05 - 27.200640128 0.9528381657 0.05 - 27.2204440888 0.9546077407 0.05 - 27.2402480496 0.9564537683 0.05 - 27.2600520104 0.9583159761 0.05 - 27.2798559712 0.9600065553 0.05 - 27.299659932 0.961472409 0.05 - 27.3194638928 0.9626690556 0.05 - 27.3392678536 0.9635813707 0.05 - 27.3590718144 0.9642241887 0.05 - 27.3788757752 0.9646208552 0.05 - 27.3986797359 0.9647843301 0.05 - 27.4184836967 0.964727569 0.05 - 27.4382876575 0.9644260505 0.05 - 27.4580916183 0.9638536673 0.05 - 27.4778955791 0.9629487354 0.05 - 27.4976995399 0.9616139071 0.05 - 27.5175035007 0.9597115561 0.05 - 27.5373074615 0.9570687403 0.05 - 27.5571114223 0.9534487348 0.05 - 27.5769153831 0.9486323446 0.05 - 27.5967193439 0.9423190107 0.05 - 27.6165233047 0.9342973657 0.05 - 27.6363272655 0.9244823863 0.05 - 27.6561312262 0.9130662196 0.05 - 27.675935187 0.9003178035 0.05 - 27.6957391478 0.8870476147 0.05 - 27.7155431086 0.8740795505 0.05 - 27.7353470694 0.8624721971 0.05 - 27.7551510302 0.853330998 0.05 - 27.774954991 0.8474281175 0.05 - 27.7947589518 0.8452948511 0.05 - 27.8145629126 0.847081663 0.05 - 27.8343668734 0.8524500595 0.05 - 27.8541708342 0.8608370054 0.05 - 27.873974795 0.8711475352 0.05 - 27.8937787558 0.8826136889 0.05 - 27.9135827165 0.8941781798 0.05 - 27.9333866773 0.9053195146 0.05 - 27.9531906381 0.9153520283 0.05 - 27.9729945989 0.9240904623 0.05 - 27.9927985597 0.9314010185 0.05 - 28.0126025205 0.9374015692 0.05 - 28.0324064813 0.9421543098 0.05 - 28.0522104421 0.9458440724 0.05 - 28.0720144029 0.9486052216 0.05 - 28.0918183637 0.9505783128 0.05 - 28.1116223245 0.9518572102 0.05 - 28.1314262853 0.9525811604 0.05 - 28.151230246 0.9527401633 0.05 - 28.1710342068 0.9524043972 0.05 - 28.1908381676 0.9515893252 0.05 - 28.2106421284 0.9503450354 0.05 - 28.2304460892 0.9486868513 0.05 - 28.25025005 0.9467277434 0.05 - 28.2700540108 0.9446075306 0.05 - 28.2898579716 0.9424674832 0.05 - 28.3096619324 0.9405728305 0.05 - 28.3294658932 0.9391575712 0.05 - 28.349269854 0.9384535714 0.05 - 28.3690738148 0.9386038772 0.05 - 28.3888777756 0.9396554084 0.05 - 28.4086817363 0.9415214158 0.05 - 28.4284856971 0.9440730185 0.05 - 28.4482896579 0.9469569164 0.05 - 28.4680936187 0.9500194645 0.05 - 28.4878975795 0.9529339275 0.05 - 28.5077015403 0.9555294151 0.05 - 28.5275055011 0.9576768387 0.05 - 28.5473094619 0.9593216372 0.05 - 28.5671134227 0.9605150833 0.05 - 28.5869173835 0.9613500929 0.05 - 28.6067213443 0.9619230481 0.05 - 28.6265253051 0.9623473085 0.05 - 28.6463292659 0.9627335167 0.05 - 28.6661332266 0.9631710379 0.05 - 28.6859371874 0.9637100644 0.05 - 28.7057411482 0.9643551487 0.05 - 28.725545109 0.9651130415 0.05 - 28.7453490698 0.965986699 0.05 - 28.7651530306 0.9669122498 0.05 - 28.7849569914 0.967872051 0.05 - 28.8047609522 0.9688272255 0.05 - 28.824564913 0.969754595 0.05 - 28.8443688738 0.9706289349 0.05 - 28.8641728346 0.971425798 0.05 - 28.8839767954 0.9721380297 0.05 - 28.9037807562 0.9727685139 0.05 - 28.9235847169 0.9733141636 0.05 - 28.9433886777 0.9737852724 0.05 - 28.9631926385 0.974185142 0.05 - 28.9829965993 0.9745281087 0.05 - 29.0028005601 0.9748171763 0.05 - 29.0226045209 0.9750631457 0.05 - 29.0424084817 0.9752694796 0.05 - 29.0622124425 0.9754468621 0.05 - 29.0820164033 0.975597785 0.05 - 29.1018203641 0.9757193843 0.05 - 29.1216243249 0.9758201885 0.05 - 29.1414282857 0.9759007472 0.05 - 29.1612322464 0.9759627732 0.05 - 29.1810362072 0.976002162 0.05 - 29.200840168 0.9760208401 0.05 - 29.2206441288 0.9760177585 0.05 - 29.2404480896 0.9759877409 0.05 - 29.2602520504 0.9759262128 0.05 - 29.2800560112 0.975829565 0.05 - 29.299859972 0.9756956904 0.05 - 29.3196639328 0.9755075759 0.05 - 29.3394678936 0.9752403104 0.05 - 29.3592718544 0.9748717046 0.05 - 29.3790758152 0.9743498877 0.05 - 29.398879776 0.9736201451 0.05 - 29.4186837367 0.9726003061 0.05 - 29.4384876975 0.9711813392 0.05 - 29.4582916583 0.9692425827 0.05 - 29.4780956191 0.9666679528 0.05 - 29.4978995799 0.9633754202 0.05 - 29.5177035407 0.9593423404 0.05 - 29.5375075015 0.9547132336 0.05 - 29.5573114623 0.9497489393 0.05 - 29.5771154231 0.9448154196 0.05 - 29.5969193839 0.9404378698 0.05 - 29.6167233447 0.9371637696 0.05 - 29.6365273055 0.9353405939 0.05 - 29.6563312663 0.9352187941 0.05 - 29.676135227 0.9367633122 0.05 - 29.6959391878 0.939741833 0.05 - 29.7157431486 0.9435911517 0.05 - 29.7355471094 0.9477181296 0.05 - 29.7553510702 0.9515656398 0.05 - 29.775155031 0.9545342055 0.05 - 29.7949589918 0.9562023201 0.05 - 29.8147629526 0.9563345605 0.05 - 29.8345669134 0.9548300931 0.05 - 29.8543708742 0.9518163945 0.05 - 29.874174835 0.9475364319 0.05 - 29.8939787958 0.9423298577 0.05 - 29.9137827566 0.9367846624 0.05 - 29.9335867173 0.9314018198 0.05 - 29.9533906781 0.9267532386 0.05 - 29.9731946389 0.9234128821 0.05 - 29.9929985997 0.9217394935 0.05 - 30.0128025605 0.9220276671 0.05 - 30.0326065213 0.9241038478 0.05 - 30.0524104821 0.9278857893 0.05 - 30.0722144429 0.9328596683 0.05 - 30.0920184037 0.9386414856 0.05 - 30.1118223645 0.9446226562 0.05 - 30.1316263253 0.9504238267 0.05 - 30.1514302861 0.9556733794 0.05 - 30.1712342468 0.9601144516 0.05 - 30.1910382076 0.9637086675 0.05 - 30.2108421684 0.9664518698 0.05 - 30.2306461292 0.968432325 0.05 - 30.25045009 0.9697579536 0.05 - 30.2702540508 0.9705403707 0.05 - 30.2900580116 0.9708655708 0.05 - 30.3098619724 0.9707985092 0.05 - 30.3296659332 0.9703809577 0.05 - 30.349469894 0.96960742 0.05 - 30.3692738548 0.9684513299 0.05 - 30.3890778156 0.9668897985 0.05 - 30.4088817764 0.964881261 0.05 - 30.4286857371 0.9623908637 0.05 - 30.4484896979 0.9594400236 0.05 - 30.4682936587 0.9561053903 0.05 - 30.4880976195 0.952547736 0.05 - 30.5079015803 0.948926937 0.05 - 30.5277055411 0.9455160101 0.05 - 30.5475095019 0.9425778177 0.05 - 30.5673134627 0.9402469383 0.05 - 30.5871174235 0.9385980904 0.05 - 30.6069213843 0.9375442845 0.05 - 30.6267253451 0.9368170392 0.05 - 30.6465293059 0.9359610454 0.05 - 30.6663332667 0.9343823708 0.05 - 30.6861372274 0.9314138096 0.05 - 30.7059411882 0.9264941277 0.05 - 30.725745149 0.91926163 0.05 - 30.7455491098 0.9098410021 0.05 - 30.7653530706 0.8985277629 0.05 - 30.7851570314 0.8864223507 0.05 - 30.8049609922 0.874687118 0.05 - 30.824764953 0.8647972876 0.05 - 30.8445689138 0.8579115495 0.05 - 30.8643728746 0.8553023366 0.05 - 30.8841768354 0.8572218349 0.05 - 30.9039807962 0.8636813763 0.05 - 30.923784757 0.8739912083 0.05 - 30.9435887177 0.8870248437 0.05 - 30.9633926785 0.9013784049 0.05 - 30.9831966393 0.9158840019 0.05 - 31.0030006001 0.9292632277 0.05 - 31.0228045609 0.9409510612 0.05 - 31.0426085217 0.950531717 0.05 - 31.0624124825 0.9579654489 0.05 - 31.0822164433 0.9635673327 0.05 - 31.1020204041 0.9676070859 0.05 - 31.1218243649 0.970471218 0.05 - 31.1416283257 0.9724690753 0.05 - 31.1614322865 0.9738768717 0.05 - 31.1812362472 0.9748597951 0.05 - 31.201040208 0.9755554707 0.05 - 31.2208441688 0.9760486852 0.05 - 31.2406481296 0.9764083729 0.05 - 31.2604520904 0.9766680255 0.05 - 31.2802560512 0.9768417971 0.05 - 31.300060012 0.9769507592 0.05 - 31.3198639728 0.9770123348 0.05 - 31.3396679336 0.9770296137 0.05 - 31.3594718944 0.9770083467 0.05 - 31.3792758552 0.9769498472 0.05 - 31.399079816 0.9768520466 0.05 - 31.4188837768 0.9767215675 0.05 - 31.4386877375 0.9765539907 0.05 - 31.4584916983 0.976343976 0.05 - 31.4782956591 0.9760926123 0.05 - 31.4980996199 0.9757903564 0.05 - 31.5179035807 0.9754365026 0.05 - 31.5377075415 0.9750285569 0.05 - 31.5575115023 0.9745524068 0.05 - 31.5773154631 0.9739885379 0.05 - 31.5971194239 0.9733268753 0.05 - 31.6169233847 0.9725511654 0.05 - 31.6367273455 0.9716101099 0.05 - 31.6565313063 0.9704876728 0.05 - 31.6763352671 0.9691299061 0.05 - 31.6961392278 0.967463144 0.05 - 31.7159431886 0.9653801653 0.05 - 31.7357471494 0.9627563692 0.05 - 31.7555511102 0.9593849053 0.05 - 31.775355071 0.9550309349 0.05 - 31.7951590318 0.9493369564 0.05 - 31.8149629926 0.9418720891 0.05 - 31.8347669534 0.9321095854 0.05 - 31.8545709142 0.9194589167 0.05 - 31.874374875 0.9034508622 0.05 - 31.8941788358 0.8835637182 0.05 - 31.9139827966 0.8598975392 0.05 - 31.9337867574 0.8326274407 0.05 - 31.9535907181 0.8029473732 0.05 - 31.9733946789 0.7725945505 0.05 - 31.9931986397 0.7431596553 0.05 - 32.0130026005 0.7167217495 0.05 - 32.0328065613 0.6957964007 0.05 - 32.0526105221 0.6818305301 0.05 - 32.0724144829 0.6759423026 0.05 - 32.0922184437 0.6787285225 0.05 - 32.1120224045 0.689946593 0.05 - 32.1318263653 0.7087705505 0.05 - 32.1516303261 0.7338317066 0.05 - 32.1714342869 0.7626641094 0.05 - 32.1912382476 0.7933357931 0.05 - 32.2110422084 0.8238632774 0.05 - 32.2308461692 0.8521201463 0.05 - 32.25065013 0.877008305 0.05 - 32.2704540908 0.89786838 0.05 - 32.2902580516 0.9147153954 0.05 - 32.3100620124 0.9279190527 0.05 - 32.3298659732 0.9380793253 0.05 - 32.349669934 0.9457422729 0.05 - 32.3694738948 0.9515987922 0.05 - 32.3892778556 0.956066886 0.05 - 32.4090818164 0.959531933 0.05 - 32.4288857772 0.9622562188 0.05 - 32.4486897379 0.9644737595 0.05 - 32.4684936987 0.9662713707 0.05 - 32.4882976595 0.9677762406 0.05 - 32.5081016203 0.9690346046 0.05 - 32.5279055811 0.9701166357 0.05 - 32.5477095419 0.9710494421 0.05 - 32.5675135027 0.9718541756 0.05 - 32.5873174635 0.9725603356 0.05 - 32.6071214243 0.973173435 0.05 - 32.6269253851 0.9737104312 0.05 - 32.6467293459 0.9741843906 0.05 - 32.6665333067 0.974609079 0.05 - 32.6863372675 0.9749753897 0.05 - 32.7061412282 0.9753042199 0.05 - 32.725945189 0.9755870146 0.05 - 32.7457491498 0.9758340587 0.05 - 32.7655531106 0.976051436 0.05 - 32.7853570714 0.9762383182 0.05 - 32.8051610322 0.9763934012 0.05 - 32.824964993 0.9765154183 0.05 - 32.8447689538 0.9766102862 0.05 - 32.8645729146 0.9766779992 0.05 - 32.8843768754 0.9767184713 0.05 - 32.9041808362 0.9767235334 0.05 - 32.923984797 0.9766940917 0.05 - 32.9437887578 0.9766345043 0.05 - 32.9635927185 0.9765463859 0.05 - 32.9833966793 0.9764145406 0.05 - 33.0032006401 0.9762344612 0.05 - 33.0230046009 0.9759977153 0.05 - 33.0428085617 0.9757091141 0.05 - 33.0626125225 0.975352468 0.05 - 33.0824164833 0.9748958138 0.05 - 33.1022204441 0.9743422858 0.05 - 33.1220244049 0.9736450298 0.05 - 33.1418283657 0.9727592322 0.05 - 33.1616323265 0.9716246025 0.05 - 33.1814362873 0.9701155861 0.05 - 33.201240248 0.9680542678 0.05 - 33.2210442088 0.9651921116 0.05 - 33.2408481696 0.9611670865 0.05 - 33.2606521304 0.9553668936 0.05 - 33.2804560912 0.9470848417 0.05 - 33.300260052 0.9354749846 0.05 - 33.3200640128 0.9195241189 0.05 - 33.3398679736 0.8984835272 0.05 - 33.3596719344 0.871949438 0.05 - 33.3794758952 0.8402969076 0.05 - 33.399279856 0.8048689009 0.05 - 33.4190838168 0.767679855 0.05 - 33.4388877776 0.7316564241 0.05 - 33.4586917383 0.6995840509 0.05 - 33.4784956991 0.6743020804 0.05 - 33.4982996599 0.6580794421 0.05 - 33.5181036207 0.6519390812 0.05 - 33.5379075815 0.6562452598 0.05 - 33.5577115423 0.670540318 0.05 - 33.5775155031 0.6935885027 0.05 - 33.5973194639 0.7229920448 0.05 - 33.6171234247 0.7561263828 0.05 - 33.6369273855 0.7905837109 0.05 - 33.6567313463 0.8235566837 0.05 - 33.6765353071 0.8532652733 0.05 - 33.6963392679 0.8784912409 0.05 - 33.7161432286 0.8990253228 0.05 - 33.7359471894 0.9150358345 0.05 - 33.7557511502 0.9271167205 0.05 - 33.775555111 0.9360642213 0.05 - 33.7953590718 0.9425428445 0.05 - 33.8151630326 0.9471907562 0.05 - 33.8349669934 0.950473117 0.05 - 33.8547709542 0.95274342 0.05 - 33.874574915 0.9542527284 0.05 - 33.8943788758 0.9552033759 0.05 - 33.9141828366 0.9556850721 0.05 - 33.9339867974 0.9557848524 0.05 - 33.9537907582 0.9555214306 0.05 - 33.9735947189 0.9549095884 0.05 - 33.9933986797 0.95392393 0.05 - 34.0132026405 0.9524621274 0.05 - 34.0330066013 0.9503924276 0.05 - 34.0528105621 0.9474697505 0.05 - 34.0726145229 0.9433681589 0.05 - 34.0924184837 0.9375695862 0.05 - 34.1122224445 0.9294201729 0.05 - 34.1320264053 0.9180611497 0.05 - 34.1518303661 0.9026243602 0.05 - 34.1716343269 0.8823821461 0.05 - 34.1914382877 0.8567967962 0.05 - 34.2112422484 0.8261107984 0.05 - 34.2310462092 0.7912730351 0.05 - 34.25085017 0.7542745786 0.05 - 34.2706541308 0.7177208623 0.05 - 34.2904580916 0.6842101647 0.05 - 34.3102620524 0.6563444884 0.05 - 34.3300660132 0.6363915721 0.05 - 34.349869974 0.6257567992 0.05 - 34.3696739348 0.6248137431 0.05 - 34.3894778956 0.6332480319 0.05 - 34.4092818564 0.6500099715 0.05 - 34.4290858172 0.6732403197 0.05 - 34.448889778 0.7004150093 0.05 - 34.4686937387 0.7291932833 0.05 - 34.4884976995 0.7569450418 0.05 - 34.5083016603 0.7817006377 0.05 - 34.5281056211 0.8020808533 0.05 - 34.5479095819 0.8174678985 0.05 - 34.5677135427 0.8277955866 0.05 - 34.5875175035 0.8335267879 0.05 - 34.6073214643 0.8352301224 0.05 - 34.6271254251 0.8332686016 0.05 - 34.6469293859 0.8282673546 0.05 - 34.6667333467 0.8204806953 0.05 - 34.6865373075 0.8102328169 0.05 - 34.7063412683 0.7976212117 0.05 - 34.726145229 0.7831013649 0.05 - 34.7459491898 0.7669238311 0.05 - 34.7657531506 0.7493098509 0.05 - 34.7855571114 0.7304155429 0.05 - 34.8053610722 0.7104162802 0.05 - 34.825165033 0.6892132323 0.05 - 34.8449689938 0.6660658085 0.05 - 34.8647729546 0.6401673195 0.05 - 34.8845769154 0.6099221879 0.05 - 34.9043808762 0.5738063314 0.05 - 34.924184837 0.5303085543 0.05 - 34.9439887978 0.4788483572 0.05 - 34.9637927586 0.4203724808 0.05 - 34.9835967193 0.357942471 0.05 - 35.0034006801 0.2944712723 0.05 - 35.0232046409 0.2353899777 0.05 - 35.0430086017 0.1839354734 0.05 - 35.0628125625 0.1422257773 0.05 - 35.0826165233 0.1105264464 0.05 - 35.1024204841 0.0879389907 0.05 - 35.1222244449 0.073044951 0.05 - 35.1420284057 0.0643914193 0.05 - 35.1618323665 0.0609743024 0.05 - 35.1816363273 0.0623539589 0.05 - 35.2014402881 0.0686931563 0.05 - 35.2212442488 0.0806567703 0.05 - 35.2410482096 0.0997535547 0.05 - 35.2608521704 0.1272086606 0.05 - 35.2806561312 0.1641278141 0.05 - 35.300460092 0.2115950831 0.05 - 35.3202640528 0.2685526212 0.05 - 35.3400680136 0.3322060951 0.05 - 35.3598719744 0.3988155251 0.05 - 35.3796759352 0.4641195265 0.05 - 35.399479896 0.5243039934 0.05 - 35.4192838568 0.5768928193 0.05 - 35.4390878176 0.6203876741 0.05 - 35.4588917784 0.6547387123 0.05 - 35.4786957391 0.6804579242 0.05 - 35.4984996999 0.6979028259 0.05 - 35.5183036607 0.7078868498 0.05 - 35.5381076215 0.7106674644 0.05 - 35.5579115823 0.7058293453 0.05 - 35.5777155431 0.6927331416 0.05 - 35.5975195039 0.6705541132 0.05 - 35.6173234647 0.6377964428 0.05 - 35.6371274255 0.593711519 0.05 - 35.6569313863 0.5384364567 0.05 - 35.6767353471 0.4730507997 0.05 - 35.6965393079 0.4012100263 0.05 - 35.7163432687 0.3276552601 0.05 - 35.7361472294 0.2572862312 0.05 - 35.7559511902 0.1953984056 0.05 - 35.775755151 0.1448062663 0.05 - 35.7955591118 0.1062191176 0.05 - 35.8153630726 0.0784768165 0.05 - 35.8351670334 0.0595196812 0.05 - 35.8549709942 0.0475363589 0.05 - 35.874774955 0.0406068724 0.05 - 35.8945789158 0.0377514898 0.05 - 35.9143828766 0.038352783 0.05 - 35.9341868374 0.042519068 0.05 - 35.9539907982 0.0510705393 0.05 - 35.973794759 0.0650643998 0.05 - 35.9935987197 0.0866953959 0.05 - 36.0134026805 0.1175602958 0.05 - 36.0332066413 0.1598413406 0.05 - 36.0530106021 0.2139443147 0.05 - 36.0728145629 0.2785290935 0.05 - 36.0926185237 0.3502094218 0.05 - 36.1124224845 0.4243524489 0.05 - 36.1322264453 0.4958812483 0.05 - 36.1520304061 0.5605223668 0.05 - 36.1718343669 0.6159768545 0.05 - 36.1916383277 0.6612516969 0.05 - 36.2114422885 0.6965227758 0.05 - 36.2312462492 0.7229108143 0.05 - 36.25105021 0.7414836996 0.05 - 36.2708541708 0.7535325928 0.05 - 36.2906581316 0.759410578 0.05 - 36.3104620924 0.7597530193 0.05 - 36.3302660532 0.754017985 0.05 - 36.350070014 0.7414418282 0.05 - 36.3698739748 0.7199480837 0.05 - 36.3896779356 0.6872986544 0.05 - 36.4094818964 0.6400964506 0.05 - 36.4292858572 0.5757490105 0.05 - 36.449089818 0.4933871591 0.05 - 36.4688937788 0.3967055094 0.05 - 36.4886977395 0.2937322265 0.05 - 36.5085017003 0.1971610602 0.05 - 36.5283056611 0.1189746789 0.05 - 36.5481096219 0.0646413577 0.05 - 36.5679135827 0.0321954897 0.05 - 36.5877175435 0.0152522025 0.05 - 36.6075215043 0.0072540262 0.05 - 36.6273254651 0.0036939382 0.05 - 36.6471294259 0.0021643887 0.05 - 36.6669333867 0.0015451808 0.05 - 36.6867373475 0.0014067565 0.05 - 36.7065413083 0.001643781 0.05 - 36.7263452691 0.0024075898 0.05 - 36.7461492298 0.0042538842 0.05 - 36.7659531906 0.008473913 0.05 - 36.7857571514 0.017700729 0.05 - 36.8055611122 0.0366218034 0.05 - 36.825365073 0.0714722163 0.05 - 36.8451690338 0.1272204427 0.05 - 36.8649729946 0.2044998506 0.05 - 36.8847769554 0.2971979211 0.05 - 36.9045809162 0.3942723282 0.05 - 36.924384877 0.4861234044 0.05 - 36.9441888378 0.5650970356 0.05 - 36.9639927986 0.6294216627 0.05 - 36.9837967594 0.6800263779 0.05 - 37.0036007201 0.7191354081 0.05 - 37.0234046809 0.7495574526 0.05 - 37.0432086417 0.7734984612 0.05 - 37.0630126025 0.7925862889 0.05 - 37.0828165633 0.8083068873 0.05 - 37.1026205241 0.8214056853 0.05 - 37.1224244849 0.8324866517 0.05 - 37.1422284457 0.8419874761 0.05 - 37.1620324065 0.8503135046 0.05 - 37.1818363673 0.8575332245 0.05 - 37.2016403281 0.8638914994 0.05 - 37.2214442889 0.8695448205 0.05 - 37.2412482496 0.8745486715 0.05 - 37.2610522104 0.8790797341 0.05 - 37.2808561712 0.8830599521 0.05 - 37.300660132 0.8867105024 0.05 - 37.3204640928 0.8900474086 0.05 - 37.3402680536 0.8930335344 0.05 - 37.3600720144 0.8957549185 0.05 - 37.3798759752 0.8982747435 0.05 - 37.399679936 0.9006127267 0.05 - 37.4194838968 0.9027169323 0.05 - 37.4392878576 0.9046647324 0.05 - 37.4590918184 0.9064964376 0.05 - 37.4788957792 0.9081558617 0.05 - 37.4986997399 0.9096876013 0.05 - 37.5185037007 0.9111140634 0.05 - 37.5383076615 0.9124225255 0.05 - 37.5581116223 0.9136066815 0.05 - 37.5779155831 0.9147035917 0.05 - 37.5977195439 0.9156754768 0.05 - 37.6175235047 0.9166120139 0.05 - 37.6373274655 0.9174066902 0.05 - 37.6571314263 0.9181234027 0.05 - 37.6769353871 0.9187520889 0.05 - 37.6967393479 0.9193014809 0.05 - 37.7165433087 0.9197672989 0.05 - 37.7363472695 0.9201367174 0.05 - 37.7561512302 0.9204440643 0.05 - 37.775955191 0.9206360825 0.05 - 37.7957591518 0.9207928077 0.05 - 37.8155631126 0.9208182458 0.05 - 37.8353670734 0.920764807 0.05 - 37.8551710342 0.9206414316 0.05 - 37.874974995 0.9204001239 0.05 - 37.8947789558 0.9200567413 0.05 - 37.9145829166 0.9196291821 0.05 - 37.9343868774 0.9190510037 0.05 - 37.9541908382 0.9183814472 0.05 - 37.973994799 0.917534718 0.05 - 37.9937987598 0.9165837832 0.05 - 38.0136027205 0.9154916519 0.05 - 38.0334066813 0.9142172535 0.05 - 38.0532106421 0.912777604 0.05 - 38.0730146029 0.9111499091 0.05 - 38.0928185637 0.9093792951 0.05 - 38.1126225245 0.9073697819 0.05 - 38.1324264853 0.9052206537 0.05 - 38.1522304461 0.9028767119 0.05 - 38.1720344069 0.9004056709 0.05 - 38.1918383677 0.8978298172 0.05 - 38.2116423285 0.8951641257 0.05 - 38.2314462893 0.8924435702 0.05 - 38.2512502501 0.8897320289 0.05 - 38.2710542108 0.8870746345 0.05 - 38.2908581716 0.8845144659 0.05 - 38.3106621324 0.882043828 0.05 - 38.3304660932 0.879669303 0.05 - 38.350270054 0.8773980214 0.05 - 38.3700740148 0.8751846412 0.05 - 38.3898779756 0.8729179286 0.05 - 38.4096819364 0.8705040485 0.05 - 38.4294858972 0.8679054506 0.05 - 38.449289858 0.8649758365 0.05 - 38.4690938188 0.8615568881 0.05 - 38.4888977796 0.8575790799 0.05 - 38.5087017403 0.8528797704 0.05 - 38.5285057011 0.8473482866 0.05 - 38.5483096619 0.8408251022 0.05 - 38.5681136227 0.8330684123 0.05 - 38.5879175835 0.8240115793 0.05 - 38.6077215443 0.8134642204 0.05 - 38.6275255051 0.8010119922 0.05 - 38.6473294659 0.7864195169 0.05 - 38.6671334267 0.7693455609 0.05 - 38.6869373875 0.749183969 0.05 - 38.7067413483 0.7253021233 0.05 - 38.7265453091 0.6969301394 0.05 - 38.7463492699 0.6628064068 0.05 - 38.7661532306 0.6224835218 0.05 - 38.7859571914 0.5747559762 0.05 - 38.8057611522 0.5188648591 0.05 - 38.825565113 0.4552659777 0.05 - 38.8453690738 0.3854933561 0.05 - 38.8651730346 0.3124408499 0.05 - 38.8849769954 0.2402169171 0.05 - 38.9047809562 0.1740854349 0.05 - 38.924584917 0.1182620148 0.05 - 38.9443888778 0.0750871637 0.05 - 38.9641928386 0.0448159927 0.05 - 38.9839967994 0.0254008136 0.05 - 39.0038007602 0.0139379842 0.05 - 39.0236047209 0.0075973 0.05 - 39.0434086817 0.0042315621 0.05 - 39.0632126425 0.0024974921 0.05 - 39.0830166033 0.0016174113 0.05 - 39.1028205641 0.0011888364 0.05 - 39.1226245249 0.0010080317 0.05 - 39.1424284857 0.0010015966 0.05 - 39.1622324465 0.0011597613 0.05 - 39.1820364073 0.0015532347 0.05 - 39.2018403681 0.0023408053 0.05 - 39.2216443289 0.003827812 0.05 - 39.2414482897 0.0065868107 0.05 - 39.2612522505 0.0115120431 0.05 - 39.2810562112 0.0198999671 0.05 - 39.300860172 0.0332067602 0.05 - 39.3206641328 0.0526925932 0.05 - 39.3404680936 0.0789559239 0.05 - 39.3602720544 0.1116580728 0.05 - 39.3800760152 0.1497837219 0.05 - 39.399879976 0.1919730728 0.05 - 39.4196839368 0.2367490223 0.05 - 39.4394878976 0.2834653308 0.05 - 39.4592918584 0.3310969523 0.05 - 39.4790958192 0.3794121638 0.05 - 39.49889978 0.4273604742 0.05 - 39.5187037407 0.4744398715 0.05 - 39.5385077015 0.5196643078 0.05 - 39.5583116623 0.562173231 0.05 - 39.5781156231 0.6009641006 0.05 - 39.5979195839 0.6359832708 0.05 - 39.6177235447 0.6665304586 0.05 - 39.6375275055 0.6929157629 0.05 - 39.6573314663 0.715343241 0.05 - 39.6771354271 0.7342025333 0.05 - 39.6969393879 0.75009852 0.05 - 39.7167433487 0.7635039647 0.05 - 39.7365473095 0.7747160756 0.05 - 39.7563512703 0.784172487 0.05 - 39.776155231 0.792193432 0.05 - 39.7959591918 0.7992096386 0.05 - 39.8157631526 0.805358676 0.05 - 39.8355671134 0.810838931 0.05 - 39.8553710742 0.8160541145 0.05 - 39.875175035 0.8210987421 0.05 - 39.8949789958 0.8261126866 0.05 - 39.9147829566 0.8311696273 0.05 - 39.9345869174 0.8363826468 0.05 - 39.9543908782 0.8417706098 0.05 - 39.974194839 0.8471653859 0.05 - 39.9939987998 0.8526925445 0.05 - 40.0138027606 0.8581682466 0.05 - 40.0336067213 0.8635192975 0.05 - 40.0534106821 0.8687405265 0.05 - 40.0732146429 0.8736603117 0.05 - 40.0930186037 0.8782740479 0.05 - 40.1128225645 0.882495964 0.05 - 40.1326265253 0.8863696686 0.05 - 40.1524304861 0.8897971379 0.05 - 40.1722344469 0.8928046291 0.05 - 40.1920384077 0.8953849189 0.05 - 40.2118423685 0.8975735286 0.05 - 40.2316463293 0.8992298123 0.05 - 40.2514502901 0.9004357966 0.05 - 40.2712542509 0.9011557002 0.05 - 40.2910582116 0.9013086019 0.05 - 40.3108621724 0.9009752947 0.05 - 40.3306661332 0.9001176266 0.05 - 40.350470094 0.8987984658 0.05 - 40.3702740548 0.8971444208 0.05 - 40.3900780156 0.8951959679 0.05 - 40.4098819764 0.8932415933 0.05 - 40.4296859372 0.8912883656 0.05 - 40.449489898 0.8895989336 0.05 - 40.4692938588 0.8883398558 0.05 - 40.4890978196 0.8876700757 0.05 - 40.5089017804 0.8876059617 0.05 - 40.5287057411 0.8881824292 0.05 - 40.5485097019 0.8894377761 0.05 - 40.5683136627 0.8912511107 0.05 - 40.5881176235 0.8935022593 0.05 - 40.6079215843 0.8960748745 0.05 - 40.6277255451 0.8988653215 0.05 - 40.6475295059 0.9017152627 0.05 - 40.6673334667 0.9044912099 0.05 - 40.6871374275 0.9071931331 0.05 - 40.7069413883 0.9096938592 0.05 - 40.7267453491 0.9120073755 0.05 - 40.7465493099 0.9140750567 0.05 - 40.7663532707 0.9159313627 0.05 - 40.7861572314 0.9175632403 0.05 - 40.8059611922 0.9189905715 0.05 - 40.825765153 0.9202086487 0.05 - 40.8455691138 0.9212590459 0.05 - 40.8653730746 0.9221567216 0.05 - 40.8851770354 0.922908946 0.05 - 40.9049809962 0.9235034129 0.05 - 40.924784957 0.9239368448 0.05 - 40.9445889178 0.9242505071 0.05 - 40.9643928786 0.9244377123 0.05 - 40.9841968394 0.9244732728 0.05 - 41.0040008002 0.9243504256 0.05 - 41.023804761 0.9240901606 0.05 - 41.0436087217 0.923681968 0.05 - 41.0634126825 0.923124128 0.05 - 41.0832166433 0.9223988746 0.05 - 41.1030206041 0.9215084427 0.05 - 41.1228245649 0.9204894244 0.05 - 41.1426285257 0.9193643281 0.05 - 41.1624324865 0.9181500845 0.05 - 41.1822364473 0.9169101029 0.05 - 41.2020404081 0.9156179385 0.05 - 41.2218443689 0.9142987883 0.05 - 41.2416483297 0.9130645555 0.05 - 41.2614522905 0.911918996 0.05 - 41.2812562513 0.9108374606 0.05 - 41.301060212 0.9098783323 0.05 - 41.3208641728 0.9089600943 0.05 - 41.3406681336 0.9081198597 0.05 - 41.3604720944 0.9072787102 0.05 - 41.3802760552 0.9064556745 0.05 - 41.400080016 0.9056337145 0.05 - 41.4198839768 0.9047814483 0.05 - 41.4396879376 0.9039151576 0.05 - 41.4594918984 0.9030300729 0.05 - 41.4792958592 0.9022768035 0.05 - 41.49909982 0.9016137737 0.05 - 41.5189037808 0.9010817699 0.05 - 41.5387077415 0.9006867104 0.05 - 41.5585117023 0.900311381 0.05 - 41.5783156631 0.8997738074 0.05 - 41.5981196239 0.8988068109 0.05 - 41.6179235847 0.8969932278 0.05 - 41.6377275455 0.8939072212 0.05 - 41.6575315063 0.8889337614 0.05 - 41.6773354671 0.8816924116 0.05 - 41.6971394279 0.8717236066 0.05 - 41.7169433887 0.8591102301 0.05 - 41.7367473495 0.8441869936 0.05 - 41.7565513103 0.8276550586 0.05 - 41.7763552711 0.8106914954 0.05 - 41.7961592318 0.7947107042 0.05 - 41.8159631926 0.7808755415 0.05 - 41.8357671534 0.7705983399 0.05 - 41.8555711142 0.7649556045 0.05 - 41.875375075 0.7644515497 0.05 - 41.8951790358 0.7692195007 0.05 - 41.9149829966 0.7786493245 0.05 - 41.9347869574 0.7919261702 0.05 - 41.9545909182 0.8079293479 0.05 - 41.974394879 0.8249983407 0.05 - 41.9941988398 0.8421870237 0.05 - 42.0140028006 0.8579496873 0.05 - 42.0338067614 0.8714523919 0.05 - 42.0536107221 0.8823348991 0.05 - 42.0734146829 0.8903084605 0.05 - 42.0932186437 0.8955920198 0.05 - 42.1130226045 0.8986748372 0.05 - 42.1328265653 0.9001011118 0.05 - 42.1526305261 0.9004784354 0.05 - 42.1724344869 0.9004109855 0.05 - 42.1922384477 0.9004007125 0.05 - 42.2120424085 0.9008033846 0.05 - 42.2318463693 0.9018347631 0.05 - 42.2516503301 0.9036831543 0.05 - 42.2714542909 0.9062731049 0.05 - 42.2912582517 0.9095080703 0.05 - 42.3110622124 0.9131372675 0.05 - 42.3308661732 0.9170300414 0.05 - 42.350670134 0.9208648415 0.05 - 42.3704740948 0.9245476079 0.05 - 42.3902780556 0.9278164104 0.05 - 42.4100820164 0.9305775148 0.05 - 42.4298859772 0.932759016 0.05 - 42.449689938 0.9342500394 0.05 - 42.4694938988 0.9350051408 0.05 - 42.4892978596 0.9349931799 0.05 - 42.5091018204 0.9341618849 0.05 - 42.5289057812 0.9325093615 0.05 - 42.5487097419 0.9300675054 0.05 - 42.5685137027 0.9269595288 0.05 - 42.5883176635 0.9233670933 0.05 - 42.6081216243 0.9195937055 0.05 - 42.6279255851 0.9159392194 0.05 - 42.6477295459 0.9127879697 0.05 - 42.6675335067 0.9105051397 0.05 - 42.6873374675 0.9094177373 0.05 - 42.7071414283 0.9096880173 0.05 - 42.7269453891 0.9112816704 0.05 - 42.7467493499 0.9141805136 0.05 - 42.7665533107 0.9180870288 0.05 - 42.7863572715 0.9226502016 0.05 - 42.8061612322 0.9275133592 0.05 - 42.825965193 0.9323527893 0.05 - 42.8457691538 0.9368946148 0.05 - 42.8655731146 0.9408560798 0.05 - 42.8853770754 0.9442185336 0.05 - 42.9051810362 0.9469161441 0.05 - 42.924984997 0.9489912351 0.05 - 42.9447889578 0.9505386706 0.05 - 42.9645929186 0.9516527839 0.05 - 42.9843968794 0.9524019474 0.05 - 43.0042008402 0.9528678749 0.05 - 43.024004801 0.9530849495 0.05 - 43.0438087618 0.9530582734 0.05 - 43.0636127225 0.9527705945 0.05 - 43.0834166833 0.9521513642 0.05 - 43.1032206441 0.951111769 0.05 - 43.1230246049 0.9495151442 0.05 - 43.1428285657 0.9471998901 0.05 - 43.1626325265 0.9439545079 0.05 - 43.1824364873 0.9396171123 0.05 - 43.2022404481 0.934035885 0.05 - 43.2220444089 0.9271506033 0.05 - 43.2418483697 0.9190561618 0.05 - 43.2616523305 0.9099785046 0.05 - 43.2814562913 0.9004506764 0.05 - 43.3012602521 0.8909923616 0.05 - 43.3210642128 0.8822926252 0.05 - 43.3408681736 0.8749932977 0.05 - 43.3606721344 0.869812831 0.05 - 43.3804760952 0.8671797517 0.05 - 43.400280056 0.8673106292 0.05 - 43.4200840168 0.8701265428 0.05 - 43.4398879776 0.8753097621 0.05 - 43.4596919384 0.882377459 0.05 - 43.4794958992 0.8906271316 0.05 - 43.49929986 0.8993685632 0.05 - 43.5191038208 0.9081368774 0.05 - 43.5389077816 0.9161942991 0.05 - 43.5587117423 0.9233188378 0.05 - 43.5785157031 0.9292138205 0.05 - 43.5983196639 0.9338561021 0.05 - 43.6181236247 0.9373064821 0.05 - 43.6379275855 0.9396716484 0.05 - 43.6577315463 0.9410822899 0.05 - 43.6775355071 0.9416341062 0.05 - 43.6973394679 0.9414832039 0.05 - 43.7171434287 0.9406653971 0.05 - 43.7369473895 0.9392711139 0.05 - 43.7567513503 0.9373549954 0.05 - 43.7765553111 0.9349601382 0.05 - 43.7963592719 0.9321844157 0.05 - 43.8161632326 0.9291319659 0.05 - 43.8359671934 0.9259707427 0.05 - 43.8557711542 0.9227674374 0.05 - 43.875575115 0.9198155165 0.05 - 43.8953790758 0.9172789744 0.05 - 43.9151830366 0.9152970129 0.05 - 43.9349869974 0.9140688436 0.05 - 43.9547909582 0.913589314 0.05 - 43.974594919 0.9139751863 0.05 - 43.9943988798 0.9151270553 0.05 - 44.0142028406 0.9169257421 0.05 - 44.0340068014 0.9192744353 0.05 - 44.0538107622 0.9219563207 0.05 - 44.0736147229 0.9247905314 0.05 - 44.0934186837 0.9276462943 0.05 - 44.1132226445 0.9303335441 0.05 - 44.1330266053 0.9327701365 0.05 - 44.1528305661 0.9348586193 0.05 - 44.1726345269 0.936531743 0.05 - 44.1924384877 0.9378142075 0.05 - 44.2122424485 0.9386545791 0.05 - 44.2320464093 0.9390804064 0.05 - 44.2518503701 0.9390476745 0.05 - 44.2716543309 0.9385874378 0.05 - 44.2914582917 0.9376239161 0.05 - 44.3112622525 0.9361269411 0.05 - 44.3310662132 0.9340477868 0.05 - 44.350870174 0.9313039507 0.05 - 44.3706741348 0.9278060366 0.05 - 44.3904780956 0.9235523143 0.05 - 44.4102820564 0.9184798627 0.05 - 44.4300860172 0.9126979801 0.05 - 44.449889978 0.9062021454 0.05 - 44.4696939388 0.8993283329 0.05 - 44.4894978996 0.892347948 0.05 - 44.5093018604 0.8855104915 0.05 - 44.5291058212 0.8792181529 0.05 - 44.548909782 0.8739532686 0.05 - 44.5687137427 0.8699932128 0.05 - 44.5885177035 0.8675648405 0.05 - 44.6083216643 0.8669161776 0.05 - 44.6281256251 0.8679951665 0.05 - 44.6479295859 0.8705327194 0.05 - 44.6677335467 0.874458515 0.05 - 44.6875375075 0.8793167622 0.05 - 44.7073414683 0.8847488457 0.05 - 44.7271454291 0.8902777237 0.05 - 44.7469493899 0.8957759235 0.05 - 44.7667533507 0.9008938321 0.05 - 44.7865573115 0.9053752185 0.05 - 44.8063612723 0.9091897101 0.05 - 44.826165233 0.9123648104 0.05 - 44.8459691938 0.9148591854 0.05 - 44.8657731546 0.9168654198 0.05 - 44.8855771154 0.918429075 0.05 - 44.9053810762 0.9196598906 0.05 - 44.925185037 0.9207397778 0.05 - 44.9449889978 0.9217025696 0.05 - 44.9647929586 0.9225905513 0.05 - 44.9845969194 0.9235640076 0.05 - 45.0044008802 0.9245792936 0.05 - 45.024204841 0.9256750618 0.05 - 45.0440088018 0.9269243253 0.05 - 45.0638127626 0.9282548655 0.05 - 45.0836167233 0.9296809711 0.05 - 45.1034206841 0.9312062794 0.05 - 45.1232246449 0.9327743026 0.05 - 45.1430286057 0.9344195376 0.05 - 45.1628325665 0.9360711065 0.05 - 45.1826365273 0.9377356913 0.05 - 45.2024404881 0.9393925841 0.05 - 45.2222444489 0.9410169969 0.05 - 45.2420484097 0.9425800944 0.05 - 45.2618523705 0.9440836 0.05 - 45.2816563313 0.9455072098 0.05 - 45.3014602921 0.9468463466 0.05 - 45.3212642529 0.9480896715 0.05 - 45.3410682136 0.9492305697 0.05 - 45.3608721744 0.9502704653 0.05 - 45.3806761352 0.9512065507 0.05 - 45.400480096 0.9520402177 0.05 - 45.4202840568 0.952767555 0.05 - 45.4400880176 0.9533870919 0.05 - 45.4598919784 0.9538912182 0.05 - 45.4796959392 0.9542801423 0.05 - 45.4994999 0.9545234401 0.05 - 45.5193038608 0.9546149685 0.05 - 45.5391078216 0.9545391388 0.05 - 45.5589117824 0.9542741819 0.05 - 45.5787157431 0.9537996576 0.05 - 45.5985197039 0.95309846 0.05 - 45.6183236647 0.9521769511 0.05 - 45.6381276255 0.9510396712 0.05 - 45.6579315863 0.9497373345 0.05 - 45.6777355471 0.9483583864 0.05 - 45.6975395079 0.9469497791 0.05 - 45.7173434687 0.9456397358 0.05 - 45.7371474295 0.9445565537 0.05 - 45.7569513903 0.9438059698 0.05 - 45.7767553511 0.9434718542 0.05 - 45.7965593119 0.9436384556 0.05 - 45.8163632727 0.94430831 0.05 - 45.8361672334 0.9454483841 0.05 - 45.8559711942 0.9470004061 0.05 - 45.875775155 0.9488555125 0.05 - 45.8955791158 0.950899665 0.05 - 45.9153830766 0.9529980789 0.05 - 45.9351870374 0.9550458129 0.05 - 45.9549909982 0.9569735299 0.05 - 45.974794959 0.9586790675 0.05 - 45.9945989198 0.9601544644 0.05 - 46.0144028806 0.9613861249 0.05 - 46.0342068414 0.9623877411 0.05 - 46.0540108022 0.9631753413 0.05 - 46.073814763 0.9637922852 0.05 - 46.0936187237 0.9642609008 0.05 - 46.1134226845 0.9646162455 0.05 - 46.1332266453 0.9648814998 0.05 - 46.1530306061 0.9650761366 0.05 - 46.1728345669 0.9652157096 0.05 - 46.1926385277 0.9653088832 0.05 - 46.2124424885 0.9653633854 0.05 - 46.2322464493 0.9653855359 0.05 - 46.2520504101 0.9653689498 0.05 - 46.2718543709 0.9653137826 0.05 - 46.2916583317 0.9652161476 0.05 - 46.3114622925 0.9650789122 0.05 - 46.3312662533 0.9648887822 0.05 - 46.351070214 0.9646169132 0.05 - 46.3708741748 0.9642540222 0.05 - 46.3906781356 0.9637711869 0.05 - 46.4104820964 0.9631441714 0.05 - 46.4302860572 0.9623132292 0.05 - 46.450090018 0.9612210506 0.05 - 46.4698939788 0.9598135272 0.05 - 46.4896979396 0.9580178721 0.05 - 46.5095019004 0.9557350491 0.05 - 46.5293058612 0.9528986153 0.05 - 46.549109822 0.9494175094 0.05 - 46.5689137828 0.9452563994 0.05 - 46.5887177435 0.9403680719 0.05 - 46.6085217043 0.9348129568 0.05 - 46.6283256651 0.9285764682 0.05 - 46.6481296259 0.9218085186 0.05 - 46.6679335867 0.9146776498 0.05 - 46.6877375475 0.907381376 0.05 - 46.7075415083 0.9000948777 0.05 - 46.7273454691 0.8929150803 0.05 - 46.7471494299 0.8861279508 0.05 - 46.7669533907 0.8797197105 0.05 - 46.7867573515 0.8738486428 0.05 - 46.8065613123 0.8685083993 0.05 - 46.8263652731 0.8636973339 0.05 - 46.8461692338 0.8593892478 0.05 - 46.8659731946 0.8556634782 0.05 - 46.8857771554 0.8525366749 0.05 - 46.9055811162 0.8500679238 0.05 - 46.925385077 0.8484252081 0.05 - 46.9451890378 0.8478378381 0.05 - 46.9649929986 0.8484297384 0.05 - 46.9847969594 0.85029392 0.05 - 47.0046009202 0.8536075259 0.05 - 47.024404881 0.8582421338 0.05 - 47.0442088418 0.8643147765 0.05 - 47.0640128026 0.8714688174 0.05 - 47.0838167634 0.8794670505 0.05 - 47.1036207241 0.8880059769 0.05 - 47.1234246849 0.896721118 0.05 - 47.1432286457 0.9054168416 0.05 - 47.1630326065 0.9136678035 0.05 - 47.1828365673 0.9213536357 0.05 - 47.2026405281 0.9282099921 0.05 - 47.2224444889 0.9342249922 0.05 - 47.2422484497 0.9393687361 0.05 - 47.2620524105 0.9436943773 0.05 - 47.2818563713 0.9472556442 0.05 - 47.3016603321 0.9501588544 0.05 - 47.3214642929 0.952502772 0.05 - 47.3412682537 0.954366167 0.05 - 47.3610722144 0.955854902 0.05 - 47.3808761752 0.9570336705 0.05 - 47.400680136 0.9579618599 0.05 - 47.4204840968 0.9586883761 0.05 - 47.4402880576 0.9592537633 0.05 - 47.4600920184 0.9596770177 0.05 - 47.4798959792 0.9599765449 0.05 - 47.49969994 0.9601660242 0.05 - 47.5195039008 0.9602468937 0.05 - 47.5393078616 0.9602139821 0.05 - 47.5591118224 0.9600482503 0.05 - 47.5789157832 0.9597291665 0.05 - 47.5987197439 0.9592145149 0.05 - 47.6185237047 0.9584519943 0.05 - 47.6383276655 0.9573450543 0.05 - 47.6581316263 0.9558080882 0.05 - 47.6779355871 0.9537073442 0.05 - 47.6977395479 0.9508700799 0.05 - 47.7175435087 0.9471907387 0.05 - 47.7373474695 0.9424907176 0.05 - 47.7571514303 0.9366857416 0.05 - 47.7769553911 0.9297459736 0.05 - 47.7967593519 0.921721706 0.05 - 47.8165633127 0.9127987116 0.05 - 47.8363672735 0.9034204064 0.05 - 47.8561712342 0.8939516646 0.05 - 47.875975195 0.8849171308 0.05 - 47.8957791558 0.8768516701 0.05 - 47.9155831166 0.8702389628 0.05 - 47.9353870774 0.865579431 0.05 - 47.9551910382 0.8629178623 0.05 - 47.974994999 0.862436985 0.05 - 47.9947989598 0.8639203839 0.05 - 48.0146029206 0.8670011056 0.05 - 48.0344068814 0.8713039435 0.05 - 48.0542108422 0.8760809693 0.05 - 48.074014803 0.8810139133 0.05 - 48.0938187638 0.8854613772 0.05 - 48.1136227245 0.8891171875 0.05 - 48.1334266853 0.8917399591 0.05 - 48.1532306461 0.893236103 0.05 - 48.1730346069 0.893706076 0.05 - 48.1928385677 0.8933567294 0.05 - 48.2126425285 0.8924870172 0.05 - 48.2324464893 0.89132486 0.05 - 48.2522504501 0.890265992 0.05 - 48.2720544109 0.8895957188 0.05 - 48.2918583717 0.8894849281 0.05 - 48.3116623325 0.8902115571 0.05 - 48.3314662933 0.8918084936 0.05 - 48.3512702541 0.8942858521 0.05 - 48.3710742148 0.897576949 0.05 - 48.3908781756 0.9015936963 0.05 - 48.4106821364 0.9060651922 0.05 - 48.4304860972 0.9107698165 0.05 - 48.450290058 0.915486186 0.05 - 48.4700940188 0.9200038269 0.05 - 48.4898979796 0.9239953361 0.05 - 48.5097019404 0.9272208185 0.05 - 48.5295059012 0.9294402107 0.05 - 48.549309862 0.9305052316 0.05 - 48.5691138228 0.9302898789 0.05 - 48.5889177836 0.9286672975 0.05 - 48.6087217443 0.9257273463 0.05 - 48.6285257051 0.9215004843 0.05 - 48.6483296659 0.9162715041 0.05 - 48.6681336267 0.9102237505 0.05 - 48.6879375875 0.9038294594 0.05 - 48.7077415483 0.8974965453 0.05 - 48.7275455091 0.8915642938 0.05 - 48.7473494699 0.8864951507 0.05 - 48.7671534307 0.8826035226 0.05 - 48.7869573915 0.880033335 0.05 - 48.8067613523 0.8788355959 0.05 - 48.8265653131 0.8788130187 0.05 - 48.8463692739 0.8797669571 0.05 - 48.8661732346 0.8811563875 0.05 - 48.8859771954 0.8825920726 0.05 - 48.9057811562 0.8834513966 0.05 - 48.925585117 0.883287056 0.05 - 48.9453890778 0.8817534629 0.05 - 48.9651930386 0.8786244298 0.05 - 48.9849969994 0.8738275371 0.05 - 49.0048009602 0.8676012087 0.05 - 49.024604921 0.8602926177 0.05 - 49.0444088818 0.8523050409 0.05 - 49.0642128426 0.8443981015 0.05 - 49.0840168034 0.8369542146 0.05 - 49.1038207642 0.8307029364 0.05 - 49.1236247249 0.826006038 0.05 - 49.1434286857 0.8231273205 0.05 - 49.1632326465 0.8220792428 0.05 - 49.1830366073 0.8228475239 0.05 - 49.2028405681 0.8248292481 0.05 - 49.2226445289 0.8275875429 0.05 - 49.2424484897 0.8306560895 0.05 - 49.2622524505 0.8332906432 0.05 - 49.2820564113 0.8347750873 0.05 - 49.3018603721 0.8351738468 0.05 - 49.3216643329 0.8344706146 0.05 - 49.3414682937 0.8328297061 0.05 - 49.3612722545 0.8308153942 0.05 - 49.3810762152 0.8290549732 0.05 - 49.400880176 0.8284482406 0.05 - 49.4206841368 0.8295624852 0.05 - 49.4404880976 0.8328912254 0.05 - 49.4602920584 0.8385392417 0.05 - 49.4800960192 0.8465810093 0.05 - 49.49989998 0.8566924143 0.05 - 49.5197039408 0.8683430535 0.05 - 49.5395079016 0.8806727858 0.05 - 49.5593118624 0.893186736 0.05 - 49.5791158232 0.9053244761 0.05 - 49.598919784 0.9164531115 0.05 - 49.6187237447 0.9261916875 0.05 - 49.6385277055 0.9344599202 0.05 - 49.6583316663 0.9411952281 0.05 - 49.6781356271 0.9465431404 0.05 - 49.6979395879 0.9506748083 0.05 - 49.7177435487 0.9537601649 0.05 - 49.7375475095 0.9560222006 0.05 - 49.7573514703 0.9576232364 0.05 - 49.7771554311 0.9586931947 0.05 - 49.7969593919 0.9593344604 0.05 - 49.8167633527 0.9595827706 0.05 - 49.8365673135 0.9594495451 0.05 - 49.8563712743 0.9589090711 0.05 - 49.876175235 0.9579497338 0.05 - 49.8959791958 0.956497653 0.05 - 49.9157831566 0.9545524352 0.05 - 49.9355871174 0.9521063892 0.05 - 49.9553910782 0.9491819829 0.05 - 49.975195039 0.9458813449 0.05 - 49.9949989998 0.9423471013 0.05 - 50.0148029606 0.9387633912 0.05 - 50.0346069214 0.9353045385 0.05 - 50.0544108822 0.9322034234 0.05 - 50.074214843 0.929624093 0.05 - 50.0940188038 0.927680013 0.05 - 50.1138227646 0.9263878928 0.05 - 50.1336267253 0.9257169321 0.05 - 50.1534306861 0.9253917114 0.05 - 50.1732346469 0.9251762794 0.05 - 50.1930386077 0.9247626242 0.05 - 50.2128425685 0.9237135617 0.05 - 50.2326465293 0.9217366909 0.05 - 50.2524504901 0.9185294935 0.05 - 50.2722544509 0.9139124183 0.05 - 50.2920584117 0.907902094 0.05 - 50.3118623725 0.9006597849 0.05 - 50.3316663333 0.8925679906 0.05 - 50.3514702941 0.8841019367 0.05 - 50.3712742549 0.8757793933 0.05 - 50.3910782156 0.868313246 0.05 - 50.4108821764 0.8621813759 0.05 - 50.4306861372 0.8580016114 0.05 - 50.450490098 0.8558941887 0.05 - 50.4702940588 0.8561325713 0.05 - 50.4900980196 0.8586362664 0.05 - 50.5099019804 0.8631996563 0.05 - 50.5297059412 0.8693548091 0.05 - 50.549509902 0.8767184841 0.05 - 50.5693138628 0.8846337356 0.05 - 50.5891178236 0.8927278254 0.05 - 50.6089217844 0.9005450807 0.05 - 50.6287257451 0.9077210221 0.05 - 50.6485297059 0.9139786213 0.05 - 50.6683336667 0.9191844943 0.05 - 50.6881376275 0.9233816431 0.05 - 50.7079415883 0.9265451208 0.05 - 50.7277455491 0.9287494331 0.05 - 50.7475495099 0.930151899 0.05 - 50.7673534707 0.930760525 0.05 - 50.7871574315 0.9306915587 0.05 - 50.8069613923 0.9300001982 0.05 - 50.8267653531 0.9287084091 0.05 - 50.8465693139 0.9267620885 0.05 - 50.8663732747 0.9242327285 0.05 - 50.8861772354 0.9209680934 0.05 - 50.9059811962 0.9169566385 0.05 - 50.925785157 0.912048851 0.05 - 50.9455891178 0.9062198948 0.05 - 50.9653930786 0.8993288911 0.05 - 50.9851970394 0.8913006546 0.05 - 51.0050010002 0.8821469804 0.05 - 51.024804961 0.871767123 0.05 - 51.0446089218 0.8602576968 0.05 - 51.0644128826 0.8477560879 0.05 - 51.0842168434 0.8343352468 0.05 - 51.1040208042 0.8204362251 0.05 - 51.123824765 0.8062570372 0.05 - 51.1436287257 0.7921567024 0.05 - 51.1634326865 0.778521295 0.05 - 51.1832366473 0.7659813784 0.05 - 51.2030406081 0.754704143 0.05 - 51.2228445689 0.7453346111 0.05 - 51.2426485297 0.7383701735 0.05 - 51.2624524905 0.7338583653 0.05 - 51.2822564513 0.7322568607 0.05 - 51.3020604121 0.7334769928 0.05 - 51.3218643729 0.7377575197 0.05 - 51.3416683337 0.7447626205 0.05 - 51.3614722945 0.7541326499 0.05 - 51.3812762553 0.7656432793 0.05 - 51.401080216 0.778516949 0.05 - 51.4208841768 0.7921084639 0.05 - 51.4406881376 0.8057452929 0.05 - 51.4604920984 0.8189804876 0.05 - 51.4802960592 0.8313404029 0.05 - 51.50010002 0.8421776102 0.05 - 51.5199039808 0.8516901104 0.05 - 51.5397079416 0.8596443057 0.05 - 51.5595119024 0.8662649732 0.05 - 51.5793158632 0.871744978 0.05 - 51.599119824 0.8764674307 0.05 - 51.6189237848 0.8807173291 0.05 - 51.6387277455 0.8846504247 0.05 - 51.6585317063 0.8885020723 0.05 - 51.6783356671 0.8923335969 0.05 - 51.6981396279 0.8960323355 0.05 - 51.7179435887 0.8995487071 0.05 - 51.7377475495 0.9028192806 0.05 - 51.7575515103 0.9056108617 0.05 - 51.7773554711 0.907855327 0.05 - 51.7971594319 0.9094339902 0.05 - 51.8169633927 0.9103440664 0.05 - 51.8367673535 0.9105411389 0.05 - 51.8565713143 0.9100486368 0.05 - 51.8763752751 0.9088702645 0.05 - 51.8961792358 0.9070612325 0.05 - 51.9159831966 0.9047025434 0.05 - 51.9357871574 0.9018370426 0.05 - 51.9555911182 0.8985555293 0.05 - 51.975395079 0.8948830658 0.05 - 51.9951990398 0.8908269503 0.05 - 52.0150030006 0.8866250533 0.05 - 52.0348069614 0.8822466697 0.05 - 52.0546109222 0.8777950702 0.05 - 52.074414883 0.873337697 0.05 - 52.0942188438 0.8690679803 0.05 - 52.1140228046 0.864958602 0.05 - 52.1338267654 0.8612413854 0.05 - 52.1536307261 0.8580787772 0.05 - 52.1734346869 0.8554492341 0.05 - 52.1932386477 0.8535193432 0.05 - 52.2130426085 0.8524074021 0.05 - 52.2328465693 0.8521706883 0.05 - 52.2526505301 0.8526961283 0.05 - 52.2724544909 0.8540668362 0.05 - 52.2922584517 0.8563151411 0.05 - 52.3120624125 0.8593533835 0.05 - 52.3318663733 0.8630771899 0.05 - 52.3516703341 0.8673963057 0.05 - 52.3714742949 0.8722062859 0.05 - 52.3912782557 0.8773770444 0.05 - 52.4110822164 0.8827906083 0.05 - 52.4308861772 0.8882706043 0.05 - 52.450690138 0.8937765517 0.05 - 52.4704940988 0.8993326143 0.05 - 52.4902980596 0.9046588581 0.05 - 52.5101020204 0.9097825314 0.05 - 52.5299059812 0.9146485742 0.05 - 52.549709942 0.9192013059 0.05 - 52.5695139028 0.9234207261 0.05 - 52.5893178636 0.9273010486 0.05 - 52.6091218244 0.9308736743 0.05 - 52.6289257852 0.9341070568 0.05 - 52.6487297459 0.9370285369 0.05 - 52.6685337067 0.9396843 0.05 - 52.6883376675 0.9420757345 0.05 - 52.7081416283 0.9442251458 0.05 - 52.7279455891 0.9461928487 0.05 - 52.7477495499 0.9479900185 0.05 - 52.7675535107 0.9496341797 0.05 - 52.7873574715 0.9511485025 0.05 - 52.8071614323 0.9525450806 0.05 - 52.8269653931 0.9538272637 0.05 - 52.8467693539 0.9550065147 0.05 - 52.8665733147 0.9560845765 0.05 - 52.8863772755 0.9570547256 0.05 - 52.9061812362 0.9579125185 0.05 - 52.925985197 0.9586612978 0.05 - 52.9457891578 0.9592962237 0.05 - 52.9655931186 0.9598142194 0.05 - 52.9853970794 0.9602149399 0.05 - 53.0052010402 0.960498885 0.05 - 53.025005001 0.9606575907 0.05 - 53.0448089618 0.9606808037 0.05 - 53.0646129226 0.9605713733 0.05 - 53.0844168834 0.9602756645 0.05 - 53.1042208442 0.9597946213 0.05 - 53.124024805 0.9590795938 0.05 - 53.1438287658 0.9580850791 0.05 - 53.1636327265 0.9567730014 0.05 - 53.1834366873 0.9550865707 0.05 - 53.2032406481 0.9529836435 0.05 - 53.2230446089 0.9504907178 0.05 - 53.2428485697 0.9475490572 0.05 - 53.2626525305 0.9442563414 0.05 - 53.2824564913 0.9406840186 0.05 - 53.3022604521 0.9369597787 0.05 - 53.3220644129 0.933229339 0.05 - 53.3418683737 0.9296863628 0.05 - 53.3616723345 0.9265046625 0.05 - 53.3814762953 0.9239510456 0.05 - 53.4012802561 0.9221203596 0.05 - 53.4210842168 0.9211762497 0.05 - 53.4408881776 0.9211731999 0.05 - 53.4606921384 0.9220963261 0.05 - 53.4804960992 0.9238372147 0.05 - 53.50030006 0.9263415676 0.05 - 53.5201040208 0.9293927068 0.05 - 53.5399079816 0.9327962375 0.05 - 53.5597119424 0.936336442 0.05 - 53.5795159032 0.9399270944 0.05 - 53.599319864 0.9433579626 0.05 - 53.6191238248 0.946546676 0.05 - 53.6389277856 0.9493852749 0.05 - 53.6587317463 0.9518648465 0.05 - 53.6785357071 0.9539809486 0.05 - 53.6983396679 0.9557173023 0.05 - 53.7181436287 0.9571513925 0.05 - 53.7379475895 0.9582896782 0.05 - 53.7577515503 0.9591893145 0.05 - 53.7775555111 0.95987728 0.05 - 53.7973594719 0.9603879351 0.05 - 53.8171634327 0.9607378755 0.05 - 53.8369673935 0.9609525165 0.05 - 53.8567713543 0.9610400334 0.05 - 53.8765753151 0.9610172116 0.05 - 53.8963792759 0.9608859495 0.05 - 53.9161832366 0.9606424623 0.05 - 53.9359871974 0.9602992216 0.05 - 53.9557911582 0.959857352 0.05 - 53.975595119 0.9593244605 0.05 - 53.9953990798 0.9587262601 0.05 - 54.0152030406 0.9580819915 0.05 - 54.0350070014 0.9574198524 0.05 - 54.0548109622 0.9567959127 0.05 - 54.074614923 0.9562449984 0.05 - 54.0944188838 0.955819878 0.05 - 54.1142228446 0.9555765386 0.05 - 54.1340268054 0.9555439639 0.05 - 54.1538307662 0.9557328305 0.05 - 54.1736347269 0.9561759704 0.05 - 54.1934386877 0.9568322458 0.05 - 54.2132426485 0.9576726143 0.05 - 54.2330466093 0.9586637814 0.05 - 54.2528505701 0.9597341287 0.05 - 54.2726545309 0.9608311616 0.05 - 54.2924584917 0.9618841968 0.05 - 54.3122624525 0.9628391935 0.05 - 54.3320664133 0.9636615211 0.05 - 54.3518703741 0.9643344441 0.05 - 54.3716743349 0.9648253602 0.05 - 54.3914782957 0.9651343536 0.05 - 54.4112822565 0.9652741335 0.05 - 54.4310862172 0.9652587138 0.05 - 54.450890178 0.9651079823 0.05 - 54.4706941388 0.9648217071 0.05 - 54.4904980996 0.9644158636 0.05 - 54.5103020604 0.9638942747 0.05 - 54.5301060212 0.9632597422 0.05 - 54.549909982 0.9625002297 0.05 - 54.5697139428 0.9615838708 0.05 - 54.5895179036 0.9604961373 0.05 - 54.6093218644 0.9591917434 0.05 - 54.6291258252 0.9576217809 0.05 - 54.648929786 0.9556908439 0.05 - 54.6687337467 0.9533213409 0.05 - 54.6885377075 0.9503890947 0.05 - 54.7083416683 0.9467635079 0.05 - 54.7281456291 0.9423265998 0.05 - 54.7479495899 0.9368477055 0.05 - 54.7677535507 0.9302297828 0.05 - 54.7875575115 0.9222256471 0.05 - 54.8073614723 0.912768967 0.05 - 54.8271654331 0.9016405852 0.05 - 54.8469693939 0.8888481426 0.05 - 54.8667733547 0.8742744313 0.05 - 54.8865773155 0.8582232375 0.05 - 54.9063812763 0.8406927061 0.05 - 54.926185237 0.8222222379 0.05 - 54.9459891978 0.8033099192 0.05 - 54.9657931586 0.784509546 0.05 - 54.9855971194 0.7665984284 0.05 - 55.0054010802 0.7503371516 0.05 - 55.025205041 0.7366960593 0.05 - 55.0450090018 0.726327399 0.05 - 55.0648129626 0.7199286815 0.05 - 55.0846169234 0.7178130403 0.05 - 55.1044208842 0.7202443001 0.05 - 55.124224845 0.7274372289 0.05 - 55.1440288058 0.7388409936 0.05 - 55.1638327666 0.753978957 0.05 - 55.1836367273 0.7721991361 0.05 - 55.2034406881 0.7922826353 0.05 - 55.2232446489 0.813403944 0.05 - 55.2430486097 0.8345816404 0.05 - 55.2628525705 0.8546619983 0.05 - 55.2826565313 0.8730129858 0.05 - 55.3024604921 0.889141835 0.05 - 55.3222644529 0.9025934515 0.05 - 55.3420684137 0.9134540431 0.05 - 55.3618723745 0.9217641601 0.05 - 55.3816763353 0.9277621605 0.05 - 55.4014802961 0.9317326345 0.05 - 55.4212842569 0.9339854291 0.05 - 55.4410882176 0.934743068 0.05 - 55.4608921784 0.9342451498 0.05 - 55.4806961392 0.932643871 0.05 - 55.5005001 0.9300415091 0.05 - 55.5203040608 0.9265562565 0.05 - 55.5401080216 0.9221669816 0.05 - 55.5599119824 0.9169543363 0.05 - 55.5797159432 0.9109452066 0.05 - 55.599519904 0.9041989023 0.05 - 55.6193238648 0.8967318993 0.05 - 55.6391278256 0.8887164189 0.05 - 55.6589317864 0.8802403995 0.05 - 55.6787357471 0.8716172021 0.05 - 55.6985397079 0.8629654776 0.05 - 55.7183436687 0.8543677564 0.05 - 55.7381476295 0.846301954 0.05 - 55.7579515903 0.8387670785 0.05 - 55.7777555511 0.8320973847 0.05 - 55.7975595119 0.8262615811 0.05 - 55.8173634727 0.8215542125 0.05 - 55.8371674335 0.8180169722 0.05 - 55.8569713943 0.8154291667 0.05 - 55.8767753551 0.8138260621 0.05 - 55.8965793159 0.8131009691 0.05 - 55.9163832767 0.8132061774 0.05 - 55.9361872374 0.8139180161 0.05 - 55.9559911982 0.8153236963 0.05 - 55.975795159 0.8172160326 0.05 - 55.9955991198 0.8195254845 0.05 - 56.0154030806 0.8222774641 0.05 - 56.0352070414 0.8253932607 0.05 - 56.0550110022 0.8287728103 0.05 - 56.074814963 0.8321757681 0.05 - 56.0946189238 0.8356308788 0.05 - 56.1144228846 0.8387374737 0.05 - 56.1342268454 0.8412184769 0.05 - 56.1540308062 0.8426351962 0.05 - 56.173834767 0.8425585025 0.05 - 56.1936387277 0.8405087337 0.05 - 56.2134426885 0.8361646401 0.05 - 56.2332466493 0.8292071189 0.05 - 56.2530506101 0.8194303331 0.05 - 56.2728545709 0.8068497827 0.05 - 56.2926585317 0.7916892722 0.05 - 56.3124624925 0.7742402219 0.05 - 56.3322664533 0.755347789 0.05 - 56.3520704141 0.7359269247 0.05 - 56.3718743749 0.7167330382 0.05 - 56.3916783357 0.6988055248 0.05 - 56.4114822965 0.6831080071 0.05 - 56.4312862573 0.6705946327 0.05 - 56.451090218 0.6618380201 0.05 - 56.4708941788 0.65742441 0.05 - 56.4906981396 0.6577039138 0.05 - 56.5105021004 0.6625246631 0.05 - 56.5303060612 0.6718546832 0.05 - 56.550110022 0.6852424321 0.05 - 56.5699139828 0.7018902982 0.05 - 56.5897179436 0.7215973597 0.05 - 56.6095219044 0.7429740257 0.05 - 56.6293258652 0.7651430065 0.05 - 56.649129826 0.7876937427 0.05 - 56.6689337868 0.8095750769 0.05 - 56.6887377475 0.8300486785 0.05 - 56.7085417083 0.8487847736 0.05 - 56.7283456691 0.86554126 0.05 - 56.7481496299 0.8801645508 0.05 - 56.7679535907 0.8926765382 0.05 - 56.7877575515 0.9033009738 0.05 - 56.8075615123 0.9121760906 0.05 - 56.8273654731 0.9195662124 0.05 - 56.8471694339 0.9257412746 0.05 - 56.8669733947 0.930860844 0.05 - 56.8867773555 0.9351400756 0.05 - 56.9065813163 0.9387760176 0.05 - 56.9263852771 0.9417989371 0.05 - 56.9461892378 0.9443946147 0.05 - 56.9659931986 0.9466419259 0.05 - 56.9857971594 0.9485596258 0.05 - 57.0056011202 0.9502480029 0.05 - 57.025405081 0.9517377114 0.05 - 57.0452090418 0.9530375249 0.05 - 57.0650130026 0.9541931016 0.05 - 57.0848169634 0.9552010702 0.05 - 57.1046209242 0.9560817515 0.05 - 57.124424885 0.9568404941 0.05 - 57.1442288458 0.9574763563 0.05 - 57.1640328066 0.9579626867 0.05 - 57.1838367674 0.9582905456 0.05 - 57.2036407281 0.9584525124 0.05 - 57.2234446889 0.9584175348 0.05 - 57.2432486497 0.9581364166 0.05 - 57.2630526105 0.9575883735 0.05 - 57.2828565713 0.9567397286 0.05 - 57.3026605321 0.9555520339 0.05 - 57.3224644929 0.9539989819 0.05 - 57.3422684537 0.9520700019 0.05 - 57.3620724145 0.9497684054 0.05 - 57.3818763753 0.9471011196 0.05 - 57.4016803361 0.9441072361 0.05 - 57.4214842969 0.9408524753 0.05 - 57.4412882577 0.9373777014 0.05 - 57.4610922184 0.9337514662 0.05 - 57.4808961792 0.9300910431 0.05 - 57.50070014 0.9264982317 0.05 - 57.5205041008 0.9229525935 0.05 - 57.5403080616 0.9195751121 0.05 - 57.5601120224 0.916418153 0.05 - 57.5799159832 0.9134187999 0.05 - 57.599719944 0.910689224 0.05 - 57.6195239048 0.9081495045 0.05 - 57.6393278656 0.9058015491 0.05 - 57.6591318264 0.9036392867 0.05 - 57.6789357872 0.9015259073 0.05 - 57.6987397479 0.8994777775 0.05 - 57.7185437087 0.8973911773 0.05 - 57.7383476695 0.895234095 0.05 - 57.7581516303 0.8928070171 0.05 - 57.7779555911 0.8900580888 0.05 - 57.7977595519 0.8868248819 0.05 - 57.8175635127 0.8830561661 0.05 - 57.8373674735 0.8785922153 0.05 - 57.8571714343 0.8734175376 0.05 - 57.8769753951 0.8675788463 0.05 - 57.8967793559 0.8611311062 0.05 - 57.9165833167 0.8541841836 0.05 - 57.9363872775 0.847213729 0.05 - 57.9561912382 0.8405091404 0.05 - 57.975995199 0.8345294342 0.05 - 57.9957991598 0.8297831966 0.05 - 58.0156031206 0.8265713104 0.05 - 58.0354070814 0.8253002408 0.05 - 58.0552110422 0.8263354652 0.05 - 58.075015003 0.8296194403 0.05 - 58.0948189638 0.8352206799 0.05 - 58.1146229246 0.8428164206 0.05 - 58.1344268854 0.8522105458 0.05 - 58.1542308462 0.8628214762 0.05 - 58.174034807 0.8742309774 0.05 - 58.1938387678 0.8856964993 0.05 - 58.2136427285 0.8968540105 0.05 - 58.2334466893 0.9072422034 0.05 - 58.2532506501 0.9164003903 0.05 - 58.2730546109 0.9242012541 0.05 - 58.2928585717 0.9304716925 0.05 - 58.3126625325 0.9351854887 0.05 - 58.3324664933 0.9383599751 0.05 - 58.3522704541 0.9400985876 0.05 - 58.3720744149 0.9404566236 0.05 - 58.3918783757 0.939566141 0.05 - 58.4116823365 0.9374918012 0.05 - 58.4314862973 0.9343668675 0.05 - 58.4512902581 0.9302699761 0.05 - 58.4710942188 0.9253358592 0.05 - 58.4908981796 0.9196754766 0.05 - 58.5107021404 0.9134590479 0.05 - 58.5305061012 0.9069330801 0.05 - 58.550310062 0.9003772984 0.05 - 58.5701140228 0.89398159 0.05 - 58.5899179836 0.8880976767 0.05 - 58.6097219444 0.8830694599 0.05 - 58.6295259052 0.8790307099 0.05 - 58.649329866 0.8763572865 0.05 - 58.6691338268 0.8750980859 0.05 - 58.6889377876 0.8754090466 0.05 - 58.7087417483 0.8771157946 0.05 - 58.7285457091 0.8803013263 0.05 - 58.7483496699 0.8845799829 0.05 - 58.7681536307 0.8898562062 0.05 - 58.7879575915 0.8957459316 0.05 - 58.8077615523 0.9019416092 0.05 - 58.8275655131 0.9081812399 0.05 - 58.8473694739 0.9142519111 0.05 - 58.8671734347 0.9199559842 0.05 - 58.8869773955 0.9250508783 0.05 - 58.9067813563 0.9295665947 0.05 - 58.9265853171 0.9334198455 0.05 - 58.9463892779 0.936656643 0.05 - 58.9661932386 0.9393492037 0.05 - 58.9859971994 0.9415788317 0.05 - 59.0058011602 0.9434915515 0.05 - 59.025605121 0.9451534942 0.05 - 59.0454090818 0.9466824962 0.05 - 59.0652130426 0.9481208551 0.05 - 59.0850170034 0.949539609 0.05 - 59.1048209642 0.9509623799 0.05 - 59.124624925 0.9523798106 0.05 - 59.1444288858 0.9538309172 0.05 - 59.1642328466 0.9552634317 0.05 - 59.1840368074 0.9566365834 0.05 - 59.2038407682 0.9579382451 0.05 - 59.2236447289 0.9591722335 0.05 - 59.2434486897 0.960287496 0.05 - 59.2632526505 0.9612719169 0.05 - 59.2830566113 0.962096733 0.05 - 59.3028605721 0.9627821528 0.05 - 59.3226645329 0.9633253347 0.05 - 59.3424684937 0.9637282971 0.05 - 59.3622724545 0.9639946689 0.05 - 59.3820764153 0.9641337645 0.05 - 59.4018803761 0.9641436854 0.05 - 59.4216843369 0.9640314417 0.05 - 59.4414882977 0.9637953952 0.05 - 59.4612922585 0.9634384856 0.05 - 59.4810962192 0.9629452784 0.05 - 59.50090018 0.9623288077 0.05 - 59.5207041408 0.9615978664 0.05 - 59.5405081016 0.9607488544 0.05 - 59.5603120624 0.9598086682 0.05 - 59.5801160232 0.9587884466 0.05 - 59.599919984 0.9577303767 0.05 - 59.6197239448 0.9566483635 0.05 - 59.6395279056 0.9555840313 0.05 - 59.6593318664 0.9545489185 0.05 - 59.6791358272 0.9535955578 0.05 - 59.698939788 0.9526955603 0.05 - 59.7187437487 0.9519174894 0.05 - 59.7385477095 0.9511848053 0.05 - 59.7583516703 0.950515493 0.05 - 59.7781556311 0.9498683545 0.05 - 59.7979595919 0.9492126391 0.05 - 59.8177635527 0.9484816743 0.05 - 59.8375675135 0.9476537669 0.05 - 59.8573714743 0.9466465628 0.05 - 59.8771754351 0.9454507796 0.05 - 59.8969793959 0.9440103332 0.05 - 59.9167833567 0.9423255012 0.05 - 59.9365873175 0.9403743376 0.05 - 59.9563912783 0.9381740143 0.05 - 59.976195239 0.9357239408 0.05 - 59.9959991998 0.9330908909 0.05 - 60.0158031606 0.930294381 0.05 - 60.0356071214 0.927447775 0.05 - 60.0554110822 0.9245842128 0.05 - 60.075215043 0.9217748667 0.05 - 60.0950190038 0.9191414297 0.05 - 60.1148229646 0.9167802604 0.05 - 60.1346269254 0.9147794785 0.05 - 60.1544308862 0.9132185347 0.05 - 60.174234847 0.9121993443 0.05 - 60.1940388078 0.9118091643 0.05 - 60.2138427686 0.9120064631 0.05 - 60.2336467293 0.9127932303 0.05 - 60.2534506901 0.914202099 0.05 - 60.2732546509 0.9161610463 0.05 - 60.2930586117 0.9186266668 0.05 - 60.3128625725 0.9214976043 0.05 - 60.3326665333 0.924609964 0.05 - 60.3524704941 0.9279321297 0.05 - 60.3722744549 0.9313110469 0.05 - 60.3920784157 0.9347012237 0.05 - 60.4118823765 0.9379289252 0.05 - 60.4316863373 0.9409406967 0.05 - 60.4514902981 0.9436910044 0.05 - 60.4712942589 0.9460427358 0.05 - 60.4910982196 0.9480187712 0.05 - 60.5109021804 0.9495360688 0.05 - 60.5307061412 0.9505839777 0.05 - 60.550510102 0.9511481179 0.05 - 60.5703140628 0.9512185451 0.05 - 60.5901180236 0.950809761 0.05 - 60.6099219844 0.9499798471 0.05 - 60.6297259452 0.9487037068 0.05 - 60.649529906 0.9471125021 0.05 - 60.6693338668 0.9452229465 0.05 - 60.6891378276 0.9431625698 0.05 - 60.7089417884 0.9410683234 0.05 - 60.7287457491 0.9389758014 0.05 - 60.7485497099 0.9370724789 0.05 - 60.7683536707 0.9354131232 0.05 - 60.7881576315 0.9340821453 0.05 - 60.8079615923 0.9331180801 0.05 - 60.8277655531 0.9325254086 0.05 - 60.8475695139 0.9323033271 0.05 - 60.8673734747 0.9323547875 0.05 - 60.8871774355 0.9326241078 0.05 - 60.9069813963 0.9329979502 0.05 - 60.9267853571 0.9333893795 0.05 - 60.9465893179 0.9337429369 0.05 - 60.9663932787 0.934016085 0.05 - 60.9861972394 0.9341769927 0.05 - 61.0060012002 0.9342469227 0.05 - 61.025805161 0.934324386 0.05 - 61.0456091218 0.9344479584 0.05 - 61.0654130826 0.9346723991 0.05 - 61.0852170434 0.9351307405 0.05 - 61.1050210042 0.935822887 0.05 - 61.124824965 0.9368443787 0.05 - 61.1446289258 0.9381600931 0.05 - 61.1644328866 0.939754374 0.05 - 61.1842368474 0.9415964147 0.05 - 61.2040408082 0.943595534 0.05 - 61.223844769 0.9456468846 0.05 - 61.2436487297 0.9477404789 0.05 - 61.2634526905 0.9497650958 0.05 - 61.2832566513 0.9516560248 0.05 - 61.3030606121 0.9533979636 0.05 - 61.3228645729 0.9549288418 0.05 - 61.3426685337 0.956254897 0.05 - 61.3624724945 0.9573751415 0.05 - 61.3822764553 0.9583059178 0.05 - 61.4020804161 0.9590733839 0.05 - 61.4218843769 0.9596917994 0.05 - 61.4416883377 0.9601944514 0.05 - 61.4614922985 0.9606075421 0.05 - 61.4812962593 0.9609170189 0.05 - 61.50110022 0.9611608256 0.05 - 61.5209041808 0.9613641158 0.05 - 61.5407081416 0.9615492226 0.05 - 61.5605121024 0.9617230088 0.05 - 61.5803160632 0.9618798119 0.05 - 61.600120024 0.9620213507 0.05 - 61.6199239848 0.9621484176 0.05 - 61.6397279456 0.962274844 0.05 - 61.6595319064 0.9624225318 0.05 - 61.6793358672 0.9625651204 0.05 - 61.699139828 0.9627292302 0.05 - 61.7189437888 0.9628996449 0.05 - 61.7387477495 0.9630752932 0.05 - 61.7585517103 0.9632726119 0.05 - 61.7783556711 0.9634694997 0.05 - 61.7981596319 0.9636684707 0.05 - 61.8179635927 0.9638779886 0.05 - 61.8377675535 0.9640854762 0.05 - 61.8575715143 0.9642936945 0.05 - 61.8773754751 0.9644793112 0.05 - 61.8971794359 0.9646608558 0.05 - 61.9169833967 0.9648205155 0.05 - 61.9367873575 0.9649608574 0.05 - 61.9565913183 0.9650731661 0.05 - 61.9763952791 0.9651637207 0.05 - 61.9961992398 0.965225708 0.05 - 62.0160032006 0.9652679144 0.05 - 62.0358071614 0.9652711897 0.05 - 62.0556111222 0.9652427825 0.05 - 62.075415083 0.965190814 0.05 - 62.0952190438 0.9651008552 0.05 - 62.1150230046 0.9649862008 0.05 - 62.1348269654 0.9648426352 0.05 - 62.1546309262 0.9646638929 0.05 - 62.174434887 0.9644564142 0.05 - 62.1942388478 0.9642110589 0.05 - 62.2140428086 0.9639399822 0.05 - 62.2338467694 0.9636317101 0.05 - 62.2536507301 0.9632994819 0.05 - 62.2734546909 0.9629402439 0.05 - 62.2932586517 0.9625600796 0.05 - 62.3130626125 0.9621578743 0.05 - 62.3328665733 0.9617711018 0.05 - 62.3526705341 0.9613982942 0.05 - 62.3724744949 0.9610428901 0.05 - 62.3922784557 0.9607246108 0.05 - 62.4120824165 0.960448237 0.05 - 62.4318863773 0.960224461 0.05 - 62.4516903381 0.9600594357 0.05 - 62.4714942989 0.9599406614 0.05 - 62.4912982597 0.95985997 0.05 - 62.5111022204 0.9597859498 0.05 - 62.5309061812 0.9597117714 0.05 - 62.550710142 0.9595690408 0.05 - 62.5705141028 0.9593331673 0.05 - 62.5903180636 0.9589475841 0.05 - 62.6101220244 0.9583484081 0.05 - 62.6299259852 0.9574240647 0.05 - 62.649729946 0.956091478 0.05 - 62.6695339068 0.9541930997 0.05 - 62.6893378676 0.9516015029 0.05 - 62.7091418284 0.9480735633 0.05 - 62.7289457892 0.9434334119 0.05 - 62.7487497499 0.9373801548 0.05 - 62.7685537107 0.9295949517 0.05 - 62.7883576715 0.9198057207 0.05 - 62.8081616323 0.9075149397 0.05 - 62.8279655931 0.8925919023 0.05 - 62.8477695539 0.8748290966 0.05 - 62.8675735147 0.8541379204 0.05 - 62.8873774755 0.8304400759 0.05 - 62.9071814363 0.8042636081 0.05 - 62.9269853971 0.7760131572 0.05 - 62.9467893579 0.746492668 0.05 - 62.9665933187 0.716790904 0.05 - 62.9863972795 0.6876919327 0.05 - 63.0062012402 0.6601822477 0.05 - 63.026005201 0.6351062176 0.05 - 63.0458091618 0.61349796 0.05 - 63.0656131226 0.5963332922 0.05 - 63.0854170834 0.5834925483 0.05 - 63.1052210442 0.5759525004 0.05 - 63.125025005 0.5739024555 0.05 - 63.1448289658 0.5768606702 0.05 - 63.1646329266 0.5850224235 0.05 - 63.1844368874 0.5983397413 0.05 - 63.2042408482 0.6158624686 0.05 - 63.224044809 0.6374916438 0.05 - 63.2438487698 0.6619190151 0.05 - 63.2636527305 0.6885083206 0.05 - 63.2834566913 0.7161357075 0.05 - 63.3032606521 0.7442271983 0.05 - 63.3230646129 0.7715256236 0.05 - 63.3428685737 0.7973507166 0.05 - 63.3626725345 0.8209621045 0.05 - 63.3824764953 0.842108959 0.05 - 63.4022804561 0.8604482085 0.05 - 63.4220844169 0.8759235235 0.05 - 63.4418883777 0.8887244524 0.05 - 63.4616923385 0.8991692968 0.05 - 63.4814962993 0.9074640167 0.05 - 63.5013002601 0.9140563511 0.05 - 63.5211042208 0.9191929849 0.05 - 63.5409081816 0.9232088416 0.05 - 63.5607121424 0.9263496948 0.05 - 63.5805161032 0.9288276571 0.05 - 63.600320064 0.9308643002 0.05 - 63.6201240248 0.9325439534 0.05 - 63.6399279856 0.9339866949 0.05 - 63.6597319464 0.935324429 0.05 - 63.6795359072 0.9365292102 0.05 - 63.699339868 0.9376643561 0.05 - 63.7191438288 0.9387853003 0.05 - 63.7389477896 0.9398975572 0.05 - 63.7587517504 0.9409435175 0.05 - 63.7785557111 0.9420194464 0.05 - 63.7983596719 0.9430564333 0.05 - 63.8181636327 0.94406198 0.05 - 63.8379675935 0.9450011907 0.05 - 63.8577715543 0.9458913453 0.05 - 63.8775755151 0.9466907623 0.05 - 63.8973794759 0.9473848154 0.05 - 63.9171834367 0.9479245861 0.05 - 63.9369873975 0.9482051136 0.05 - 63.9567913583 0.9482195409 0.05 - 63.9765953191 0.9478181346 0.05 - 63.9963992799 0.9468924307 0.05 - 64.0162032406 0.9453582806 0.05 - 64.0360072014 0.9430254135 0.05 - 64.0558111622 0.9397952616 0.05 - 64.075615123 0.9355380571 0.05 - 64.0954190838 0.9302098587 0.05 - 64.1152230446 0.923868495 0.05 - 64.1350270054 0.91656807 0.05 - 64.1548309662 0.9086302732 0.05 - 64.174634927 0.9002912113 0.05 - 64.1944388878 0.891969777 0.05 - 64.2142428486 0.8841955384 0.05 - 64.2340468094 0.8774016724 0.05 - 64.2538507702 0.8720940593 0.05 - 64.2736547309 0.8686195681 0.05 - 64.2934586917 0.8671866604 0.05 - 64.3132626525 0.8681021472 0.05 - 64.3330666133 0.8711934727 0.05 - 64.3528705741 0.8762267919 0.05 - 64.3726745349 0.8830563205 0.05 - 64.3924784957 0.8911824838 0.05 - 64.4122824565 0.9000947029 0.05 - 64.4320864173 0.909352075 0.05 - 64.4518903781 0.91853314 0.05 - 64.4716943389 0.9272645862 0.05 - 64.4914982997 0.9351868893 0.05 - 64.5113022605 0.9421668319 0.05 - 64.5311062212 0.9481490939 0.05 - 64.550910182 0.9531042922 0.05 - 64.5707141428 0.9571297461 0.05 - 64.5905181036 0.9603322529 0.05 - 64.6103220644 0.9628209691 0.05 - 64.6301260252 0.964749099 0.05 - 64.649929986 0.9662208185 0.05 - 64.6697339468 0.9673578892 0.05 - 64.6895379076 0.9682322466 0.05 - 64.7093418684 0.9689309999 0.05 - 64.7291458292 0.9694865148 0.05 - 64.74894979 0.9699404204 0.05 - 64.7687537508 0.9703307953 0.05 - 64.7885577115 0.9706662586 0.05 - 64.8083616723 0.9709543309 0.05 - 64.8281656331 0.9712061741 0.05 - 64.8479695939 0.9714408185 0.05 - 64.8677735547 0.9716509024 0.05 - 64.8875775155 0.9718472097 0.05 - 64.9073814763 0.9720099411 0.05 - 64.9271854371 0.9721589354 0.05 - 64.9469893979 0.9722924932 0.05 - 64.9667933587 0.9724076581 0.05 - 64.9865973195 0.9725125829 0.05 - 65.0064012803 0.9726026006 0.05 - 65.026205241 0.9726772149 0.05 - 65.0460092018 0.9727396848 0.05 - 65.0658131626 0.9727848784 0.05 - 65.0856171234 0.9728101786 0.05 - 65.1054210842 0.9728193177 0.05 - 65.125225045 0.9728115404 0.05 - 65.1450290058 0.9727812565 0.05 - 65.1648329666 0.9727300367 0.05 - 65.1846369274 0.9726583517 0.05 - 65.2044408882 0.9725589651 0.05 - 65.224244849 0.9724255958 0.05 - 65.2440488098 0.9722617751 0.05 - 65.2638527706 0.9720576422 0.05 - 65.2836567313 0.9718078551 0.05 - 65.3034606921 0.9715081024 0.05 - 65.3232646529 0.9711419964 0.05 - 65.3430686137 0.9706995327 0.05 - 65.3628725745 0.9701671602 0.05 - 65.3826765353 0.969530495 0.05 - 65.4024804961 0.9687535048 0.05 - 65.4222844569 0.9678005005 0.05 - 65.4420884177 0.9666191106 0.05 - 65.4618923785 0.9651634505 0.05 - 65.4816963393 0.9633624683 0.05 - 65.5015003001 0.9611120366 0.05 - 65.5213042609 0.9583090944 0.05 - 65.5411082216 0.9548207964 0.05 - 65.5609121824 0.950436704 0.05 - 65.5807161432 0.944928508 0.05 - 65.600520104 0.9379385706 0.05 - 65.6203240648 0.929002732 0.05 - 65.6401280256 0.9175945878 0.05 - 65.6599319864 0.902838879 0.05 - 65.6797359472 0.8837768578 0.05 - 65.699539908 0.859253378 0.05 - 65.7193438688 0.8281475226 0.05 - 65.7391478296 0.7890890592 0.05 - 65.7589517904 0.7415288266 0.05 - 65.7787557512 0.685362748 0.05 - 65.7985597119 0.6212518426 0.05 - 65.8183636727 0.5514914554 0.05 - 65.8381676335 0.4792756463 0.05 - 65.8579715943 0.4084883817 0.05 - 65.8777755551 0.3418258461 0.05 - 65.8975795159 0.2829987502 0.05 - 65.9173834767 0.2335456712 0.05 - 65.9371874375 0.1935331254 0.05 - 65.9569913983 0.1629999765 0.05 - 65.9767953591 0.1408793167 0.05 - 65.9965993199 0.1263768014 0.05 - 66.0164032807 0.1185020937 0.05 - 66.0362072414 0.1164364224 0.05 - 66.0560112022 0.1202721164 0.05 - 66.075815163 0.1302705235 0.05 - 66.0956191238 0.1470954857 0.05 - 66.1154230846 0.1713638374 0.05 - 66.1352270454 0.2042127469 0.05 - 66.1550310062 0.2460176072 0.05 - 66.174834967 0.296864057 0.05 - 66.1946389278 0.3558282506 0.05 - 66.2144428886 0.4210281827 0.05 - 66.2342468494 0.4887183223 0.05 - 66.2540508102 0.5555847725 0.05 - 66.273854771 0.6189368295 0.05 - 66.2936587317 0.6755129204 0.05 - 66.3134626925 0.7243648878 0.05 - 66.3332666533 0.7647517777 0.05 - 66.3530706141 0.7973875455 0.05 - 66.3728745749 0.823158348 0.05 - 66.3926785357 0.8435318234 0.05 - 66.4124824965 0.8596456098 0.05 - 66.4322864573 0.8725983721 0.05 - 66.4520904181 0.8833049237 0.05 - 66.4718943789 0.8923985808 0.05 - 66.4916983397 0.9003483 0.05 - 66.5115023005 0.9074507824 0.05 - 66.5313062613 0.9137952746 0.05 - 66.551110222 0.919573852 0.05 - 66.5709141828 0.9247574461 0.05 - 66.5907181436 0.9294110367 0.05 - 66.6105221044 0.9335223126 0.05 - 66.6303260652 0.9371209808 0.05 - 66.650130026 0.9402745601 0.05 - 66.6699339868 0.9430097919 0.05 - 66.6897379476 0.945370893 0.05 - 66.7095419084 0.9473922866 0.05 - 66.7293458692 0.9491419356 0.05 - 66.74914983 0.9506646573 0.05 - 66.7689537908 0.95197235 0.05 - 66.7887577516 0.9531427257 0.05 - 66.8085617123 0.9541653103 0.05 - 66.8283656731 0.9550619671 0.05 - 66.8481696339 0.9558833215 0.05 - 66.8679735947 0.9566060548 0.05 - 66.8877775555 0.9572469716 0.05 - 66.9075815163 0.9578097261 0.05 - 66.9273854771 0.9582886707 0.05 - 66.9471894379 0.9587083485 0.05 - 66.9669933987 0.9590344741 0.05 - 66.9867973595 0.9592975288 0.05 - 67.0066013203 0.9594673358 0.05 - 67.0264052811 0.9595748483 0.05 - 67.0462092418 0.9595966634 0.05 - 67.0660132026 0.9595594569 0.05 - 67.0858171634 0.959479184 0.05 - 67.1056211242 0.9593706607 0.05 - 67.125425085 0.9592670425 0.05 - 67.1452290458 0.9591860738 0.05 - 67.1650330066 0.9591273918 0.05 - 67.1848369674 0.9591457055 0.05 - 67.2046409282 0.9592473301 0.05 - 67.224444889 0.9594438538 0.05 - 67.2442488498 0.9597531222 0.05 - 67.2640528106 0.9601527114 0.05 - 67.2838567714 0.960639784 0.05 - 67.3036607321 0.9612074642 0.05 - 67.3234646929 0.9618388467 0.05 - 67.3432686537 0.9624823456 0.05 - 67.3630726145 0.9631317656 0.05 - 67.3828765753 0.9637741969 0.05 - 67.4026805361 0.9643915203 0.05 - 67.4224844969 0.9649554555 0.05 - 67.4422884577 0.9654694921 0.05 - 67.4620924185 0.9659341016 0.05 - 67.4818963793 0.9663477553 0.05 - 67.5017003401 0.9667152934 0.05 - 67.5215043009 0.9670281797 0.05 - 67.5413082617 0.9673013866 0.05 - 67.5611122224 0.9675446541 0.05 - 67.5809161832 0.9677635413 0.05 - 67.600720144 0.9679634641 0.05 - 67.6205241048 0.9681440088 0.05 - 67.6403280656 0.9683047667 0.05 - 67.6601320264 0.9684572155 0.05 - 67.6799359872 0.9686010344 0.05 - 67.699739948 0.9687394686 0.05 - 67.7195439088 0.9688680076 0.05 - 67.7393478696 0.968985778 0.05 - 67.7591518304 0.9691008516 0.05 - 67.7789557912 0.9692111005 0.05 - 67.798759752 0.969319014 0.05 - 67.8185637127 0.9694238764 0.05 - 67.8383676735 0.9695175731 0.05 - 67.8581716343 0.9696071012 0.05 - 67.8779755951 0.9696923741 0.05 - 67.8977795559 0.9697742592 0.05 - 67.9175835167 0.969853849 0.05 - 67.9373874775 0.969925659 0.05 - 67.9571914383 0.9699903693 0.05 - 67.9769953991 0.9700454243 0.05 - 67.9967993599 0.9700927813 0.05 - 68.0166033207 0.970133031 0.05 - 68.0364072815 0.9701600363 0.05 - 68.0562112422 0.9701738596 0.05 - 68.076015203 0.9701641408 0.05 - 68.0958191638 0.9701344799 0.05 - 68.1156231246 0.9700809274 0.05 - 68.1354270854 0.9700011774 0.05 - 68.1552310462 0.9698908593 0.05 - 68.175035007 0.9697454757 0.05 - 68.1948389678 0.9695646633 0.05 - 68.2146429286 0.9693519866 0.05 - 68.2344468894 0.9691001555 0.05 - 68.2542508502 0.9688141926 0.05 - 68.274054811 0.9685046173 0.05 - 68.2938587718 0.968179113 0.05 - 68.3136627325 0.967839557 0.05 - 68.3334666933 0.9674898109 0.05 - 68.3532706541 0.9671508496 0.05 - 68.3730746149 0.9668265175 0.05 - 68.3928785757 0.966522372 0.05 - 68.4126825365 0.9662421568 0.05 - 68.4324864973 0.9660013009 0.05 - 68.4522904581 0.9658044044 0.05 - 68.4720944189 0.9656475011 0.05 - 68.4918983797 0.9655498402 0.05 - 68.5117023405 0.965517291 0.05 - 68.5315063013 0.9655495874 0.05 - 68.5513102621 0.965648261 0.05 - 68.5711142228 0.9658236011 0.05 - 68.5909181836 0.966068132 0.05 - 68.6107221444 0.9663794643 0.05 - 68.6305261052 0.9667483989 0.05 - 68.650330066 0.9671752324 0.05 - 68.6701340268 0.9676278096 0.05 - 68.6899379876 0.9680853089 0.05 - 68.7097419484 0.9685328741 0.05 - 68.7295459092 0.9689677366 0.05 - 68.74934987 0.9693434984 0.05 - 68.7691538308 0.9696501588 0.05 - 68.7889577916 0.9698672577 0.05 - 68.8087617524 0.9699943059 0.05 - 68.8285657131 0.9700044561 0.05 - 68.8483696739 0.9698852462 0.05 - 68.8681736347 0.9696211704 0.05 - 68.8879775955 0.9692026811 0.05 - 68.9077815563 0.9686033535 0.05 - 68.9275855171 0.9678174604 0.05 - 68.9473894779 0.9668252528 0.05 - 68.9671934387 0.9656049649 0.05 - 68.9869973995 0.9641524383 0.05 - 69.0068013603 0.9624484295 0.05 - 69.0266053211 0.9605098997 0.05 - 69.0464092819 0.9583506389 0.05 - 69.0662132426 0.9559857076 0.05 - 69.0860172034 0.9534785414 0.05 - 69.1058211642 0.9509034265 0.05 - 69.125625125 0.9483258577 0.05 - 69.1454290858 0.9457960298 0.05 - 69.1652330466 0.9434644101 0.05 - 69.1850370074 0.9413647493 0.05 - 69.2048409682 0.9395894213 0.05 - 69.224644929 0.9382568396 0.05 - 69.2444488898 0.9373669602 0.05 - 69.2642528506 0.9369419534 0.05 - 69.2840568114 0.9370032299 0.05 - 69.3038607722 0.9374973479 0.05 - 69.3236647329 0.9384097086 0.05 - 69.3434686937 0.9396516282 0.05 - 69.3632726545 0.9411601146 0.05 - 69.3830766153 0.9428415845 0.05 - 69.4028805761 0.9446322712 0.05 - 69.4226845369 0.9464530413 0.05 - 69.4424884977 0.9482567848 0.05 - 69.4622924585 0.9499929508 0.05 - 69.4820964193 0.9516151001 0.05 - 69.5019003801 0.9530830483 0.05 - 69.5217043409 0.9544132865 0.05 - 69.5415083017 0.9555928661 0.05 - 69.5613122625 0.956614185 0.05 - 69.5811162232 0.957501321 0.05 - 69.600920184 0.9582681909 0.05 - 69.6207241448 0.9589209307 0.05 - 69.6405281056 0.9594814079 0.05 - 69.6603320664 0.9599345113 0.05 - 69.6801360272 0.9603062579 0.05 - 69.699939988 0.9606035684 0.05 - 69.7197439488 0.9608117109 0.05 - 69.7395479096 0.9609433022 0.05 - 69.7593518704 0.9610031281 0.05 - 69.7791558312 0.9609692075 0.05 - 69.798959792 0.9608430883 0.05 - 69.8187637528 0.9606144112 0.05 - 69.8385677135 0.960288326 0.05 - 69.8583716743 0.9598433184 0.05 - 69.8781756351 0.9592647913 0.05 - 69.8979795959 0.9585360812 0.05 - 69.9177835567 0.957642917 0.05 - 69.9375875175 0.9565350612 0.05 - 69.9573914783 0.9552080815 0.05 - 69.9771954391 0.9535689347 0.05 - 69.9969993999 0.9516066828 0.05 - 70.0168033607 0.9492172821 0.05 - 70.0366073215 0.9463564658 0.05 - 70.0564112823 0.9429432846 0.05 - 70.076215243 0.9388391229 0.05 - 70.0960192038 0.934018556 0.05 - 70.1158231646 0.9283967573 0.05 - 70.1356271254 0.921905466 0.05 - 70.1554310862 0.9146324047 0.05 - 70.175235047 0.9064454107 0.05 - 70.1950390078 0.8976104819 0.05 - 70.2148429686 0.8881804385 0.05 - 70.2346469294 0.8783767705 0.05 - 70.2544508902 0.8684735762 0.05 - 70.274254851 0.8587281103 0.05 - 70.2940588118 0.8494703339 0.05 - 70.3138627726 0.8409555321 0.05 - 70.3336667333 0.8334970101 0.05 - 70.3534706941 0.8274048477 0.05 - 70.3732746549 0.8225843623 0.05 - 70.3930786157 0.8194370262 0.05 - 70.4128825765 0.8177328464 0.05 - 70.4326865373 0.817385385 0.05 - 70.4524904981 0.8183377018 0.05 - 70.4722944589 0.8203090793 0.05 - 70.4920984197 0.8230559569 0.05 - 70.5119023805 0.8261464128 0.05 - 70.5317063413 0.8294600448 0.05 - 70.5515103021 0.832681512 0.05 - 70.5713142629 0.8357265886 0.05 - 70.5911182236 0.8383218414 0.05 - 70.6109221844 0.840389804 0.05 - 70.6307261452 0.8421288366 0.05 - 70.650530106 0.8434274349 0.05 - 70.6703340668 0.8445639722 0.05 - 70.6901380276 0.845603521 0.05 - 70.7099419884 0.8467742621 0.05 - 70.7297459492 0.8483016471 0.05 - 70.74954991 0.8503258122 0.05 - 70.7693538708 0.8530084678 0.05 - 70.7891578316 0.8563774946 0.05 - 70.8089617924 0.8605144474 0.05 - 70.8287657532 0.8654524007 0.05 - 70.8485697139 0.8710726935 0.05 - 70.8683736747 0.8772764941 0.05 - 70.8881776355 0.8838738787 0.05 - 70.9079815963 0.8907469436 0.05 - 70.9277855571 0.8977529792 0.05 - 70.9475895179 0.9046758821 0.05 - 70.9673934787 0.9114285862 0.05 - 70.9871974395 0.9178543125 0.05 - 71.0070014003 0.9238136044 0.05 - 71.0268053611 0.929254586 0.05 - 71.0466093219 0.9341522775 0.05 - 71.0664132827 0.9384921852 0.05 - 71.0862172434 0.9422858604 0.05 - 71.1060212042 0.945578537 0.05 - 71.125825165 0.948386575 0.05 - 71.1456291258 0.9507644755 0.05 - 71.1654330866 0.9527405085 0.05 - 71.1852370474 0.9543798219 0.05 - 71.2050410082 0.9557386103 0.05 - 71.224844969 0.9568258238 0.05 - 71.2446489298 0.9576930537 0.05 - 71.2644528906 0.9583698538 0.05 - 71.2842568514 0.9588601574 0.05 - 71.3040608122 0.9591944881 0.05 - 71.323864773 0.9593865959 0.05 - 71.3436687337 0.9594509873 0.05 - 71.3634726945 0.9593930054 0.05 - 71.3832766553 0.9592250246 0.05 - 71.4030806161 0.9589639349 0.05 - 71.4228845769 0.958612098 0.05 - 71.4426885377 0.9581996054 0.05 - 71.4624924985 0.9577491577 0.05 - 71.4822964593 0.9572668905 0.05 - 71.5021004201 0.9567636069 0.05 - 71.5219043809 0.9563134743 0.05 - 71.5417083417 0.9559185919 0.05 - 71.5615123025 0.9556081274 0.05 - 71.5813162633 0.9554158365 0.05 - 71.601120224 0.9553782298 0.05 - 71.6209241848 0.9555142494 0.05 - 71.6407281456 0.9558153353 0.05 - 71.6605321064 0.9562849378 0.05 - 71.6803360672 0.9569213908 0.05 - 71.700140028 0.9577163761 0.05 - 71.7199439888 0.9586511359 0.05 - 71.7397479496 0.9596609889 0.05 - 71.7595519104 0.9607137951 0.05 - 71.7793558712 0.9617929995 0.05 - 71.799159832 0.9628072924 0.05 - 71.8189637928 0.9637556354 0.05 - 71.8387677536 0.9645672678 0.05 - 71.8585717143 0.9652052687 0.05 - 71.8783756751 0.9656377487 0.05 - 71.8981796359 0.9658120043 0.05 - 71.9179835967 0.9656874488 0.05 - 71.9377875575 0.9652460744 0.05 - 71.9575915183 0.9644182596 0.05 - 71.9773954791 0.9631628493 0.05 - 71.9971994399 0.9614415849 0.05 - 72.0170034007 0.9591704233 0.05 - 72.0368073615 0.9562998755 0.05 - 72.0566113223 0.9527392692 0.05 - 72.0764152831 0.9484593848 0.05 - 72.0962192438 0.9434125311 0.05 - 72.1160232046 0.9375238023 0.05 - 72.1358271654 0.9308448159 0.05 - 72.1556311262 0.9233982578 0.05 - 72.175435087 0.9152750946 0.05 - 72.1952390478 0.9066732761 0.05 - 72.2150430086 0.8978139852 0.05 - 72.2348469694 0.8888685311 0.05 - 72.2546509302 0.8800641299 0.05 - 72.274454891 0.8718409386 0.05 - 72.2942588518 0.8644469234 0.05 - 72.3140628126 0.858213105 0.05 - 72.3338667734 0.8532726731 0.05 - 72.3536707341 0.8499094748 0.05 - 72.3734746949 0.8481905819 0.05 - 72.3932786557 0.8482009124 0.05 - 72.4130826165 0.8499939679 0.05 - 72.4328865773 0.8532187368 0.05 - 72.4526905381 0.8579797011 0.05 - 72.4724944989 0.8638521582 0.05 - 72.4922984597 0.870599449 0.05 - 72.5121024205 0.877992443 0.05 - 72.5319063813 0.885656656 0.05 - 72.5517103421 0.893379845 0.05 - 72.5715143029 0.9009850275 0.05 - 72.5913182637 0.9082627937 0.05 - 72.6111222244 0.9149742224 0.05 - 72.6309261852 0.9211001911 0.05 - 72.650730146 0.9265611968 0.05 - 72.6705341068 0.9313589361 0.05 - 72.6903380676 0.9355028541 0.05 - 72.7101420284 0.9390412244 0.05 - 72.7299459892 0.9420174052 0.05 - 72.74974995 0.9445156905 0.05 - 72.7695539108 0.9466110983 0.05 - 72.7893578716 0.9483215527 0.05 - 72.8091618324 0.9497781874 0.05 - 72.8289657932 0.9510147232 0.05 - 72.848769754 0.9520582886 0.05 - 72.8685737147 0.9530019953 0.05 - 72.8883776755 0.9538704746 0.05 - 72.9081816363 0.9546747474 0.05 - 72.9279855971 0.9554542644 0.05 - 72.9477895579 0.9562237606 0.05 - 72.9675935187 0.9569995249 0.05 - 72.9873974795 0.9577999732 0.05 - 73.0072014403 0.9585951633 0.05 - 73.0270054011 0.9594043465 0.05 - 73.0468093619 0.9602284374 0.05 - 73.0666133227 0.961053228 0.05 - 73.0864172835 0.9618737068 0.05 - 73.1062212442 0.9626936739 0.05 - 73.126025205 0.9634859288 0.05 - 73.1458291658 0.964260031 0.05 - 73.1656331266 0.9649946241 0.05 - 73.1854370874 0.9656944921 0.05 - 73.2052410482 0.9663559749 0.05 - 73.225045009 0.9669730841 0.05 - 73.2448489698 0.9675450791 0.05 - 73.2646529306 0.9680816963 0.05 - 73.2844568914 0.968574589 0.05 - 73.3042608522 0.9690219521 0.05 - 73.324064813 0.9694402692 0.05 - 73.3438687738 0.9698247538 0.05 - 73.3636727345 0.9701696624 0.05 - 73.3834766953 0.9704893645 0.05 - 73.4032806561 0.9707852195 0.05 - 73.4230846169 0.971058377 0.05 - 73.4428885777 0.9713049875 0.05 - 73.4626925385 0.9715352434 0.05 - 73.4824964993 0.9717454139 0.05 - 73.5023004601 0.9719442429 0.05 - 73.5221044209 0.9721227286 0.05 - 73.5419083817 0.9722901692 0.05 - 73.5617123425 0.9724435984 0.05 - 73.5815163033 0.9725826799 0.05 - 73.6013202641 0.972715304 0.05 - 73.6211242248 0.9728323809 0.05 - 73.6409281856 0.9729397381 0.05 - 73.6607321464 0.9730381628 0.05 - 73.6805361072 0.9731241941 0.05 - 73.700340068 0.9731988576 0.05 - 73.7201440288 0.9732695041 0.05 - 73.7399479896 0.973327474 0.05 - 73.7597519504 0.9733772995 0.05 - 73.7795559112 0.9734115104 0.05 - 73.799359872 0.9734320896 0.05 - 73.8191638328 0.9734384974 0.05 - 73.8389677936 0.9734255568 0.05 - 73.8587717544 0.9734001662 0.05 - 73.8785757151 0.973357601 0.05 - 73.8983796759 0.9732923341 0.05 - 73.9181836367 0.9731941832 0.05 - 73.9379875975 0.9730583121 0.05 - 73.9577915583 0.9728839384 0.05 - 73.9775955191 0.9726622326 0.05 - 73.9973994799 0.9723782723 0.05 - 74.0172034407 0.9720102038 0.05 - 74.0370074015 0.9715454787 0.05 - 74.0568113623 0.9709411177 0.05 - 74.0766153231 0.970172927 0.05 - 74.0964192839 0.9691955248 0.05 - 74.1162232446 0.9679375041 0.05 - 74.1360272054 0.9663318932 0.05 - 74.1558311662 0.9642824602 0.05 - 74.175635127 0.9616882819 0.05 - 74.1954390878 0.9584189866 0.05 - 74.2152430486 0.9543722365 0.05 - 74.2350470094 0.949371518 0.05 - 74.2548509702 0.9433669877 0.05 - 74.274654931 0.9361889068 0.05 - 74.2944588918 0.9278104801 0.05 - 74.3142628526 0.9181944374 0.05 - 74.3340668134 0.9074791351 0.05 - 74.3538707742 0.8958886283 0.05 - 74.3736747349 0.8835646535 0.05 - 74.3934786957 0.871002037 0.05 - 74.4132826565 0.85845965 0.05 - 74.4330866173 0.8465502179 0.05 - 74.4528905781 0.8356178775 0.05 - 74.4726945389 0.8261133365 0.05 - 74.4924984997 0.8185820934 0.05 - 74.5123024605 0.8131509532 0.05 - 74.5321064213 0.8102749177 0.05 - 74.5519103821 0.8098660656 0.05 - 74.5717143429 0.8118970778 0.05 - 74.5915183037 0.8163511684 0.05 - 74.6113222645 0.8228127955 0.05 - 74.6311262252 0.8310593945 0.05 - 74.650930186 0.8405214779 0.05 - 74.6707341468 0.8508629618 0.05 - 74.6905381076 0.8615959274 0.05 - 74.7103420684 0.8723849717 0.05 - 74.7301460292 0.8827067636 0.05 - 74.74994999 0.8923468582 0.05 - 74.7697539508 0.9011012695 0.05 - 74.7895579116 0.9088683357 0.05 - 74.8093618724 0.9154848061 0.05 - 74.8291658332 0.9210112865 0.05 - 74.848969794 0.9254786507 0.05 - 74.8687737548 0.9289740197 0.05 - 74.8885777155 0.9316242172 0.05 - 74.9083816763 0.9334413091 0.05 - 74.9281856371 0.9346211069 0.05 - 74.9479895979 0.9352211813 0.05 - 74.9677935587 0.9353284776 0.05 - 74.9875975195 0.935044554 0.05 - 75.0074014803 0.9344547645 0.05 - 75.0272054411 0.9336262267 0.05 - 75.0470094019 0.9326330267 0.05 - 75.0668133627 0.9315762872 0.05 - 75.0866173235 0.9305101999 0.05 - 75.1064212843 0.9294572372 0.05 - 75.126225245 0.9284418073 0.05 - 75.1460292058 0.927482397 0.05 - 75.1658331666 0.9266449788 0.05 - 75.1856371274 0.9258473302 0.05 - 75.2054410882 0.9250867987 0.05 - 75.225245049 0.9243506086 0.05 - 75.2450490098 0.9236311434 0.05 - 75.2648529706 0.9228277012 0.05 - 75.2846569314 0.9219593416 0.05 - 75.3044608922 0.9209764903 0.05 - 75.324264853 0.9198696374 0.05 - 75.3440688138 0.9186069617 0.05 - 75.3638727746 0.9173009825 0.05 - 75.3836767353 0.9159558268 0.05 - 75.4034806961 0.9145518589 0.05 - 75.4232846569 0.9132033761 0.05 - 75.4430886177 0.9119720733 0.05 - 75.4628925785 0.9109908834 0.05 - 75.4826965393 0.9102578884 0.05 - 75.5025005001 0.9098952974 0.05 - 75.5223044609 0.9099386789 0.05 - 75.5421084217 0.9103923944 0.05 - 75.5619123825 0.911322465 0.05 - 75.5817163433 0.9126941564 0.05 - 75.6015203041 0.9145168397 0.05 - 75.6213242649 0.9167716121 0.05 - 75.6411282256 0.9194095626 0.05 - 75.6609321864 0.9222965881 0.05 - 75.6807361472 0.9254995203 0.05 - 75.700540108 0.9287813304 0.05 - 75.7203440688 0.9321730272 0.05 - 75.7401480296 0.9355974662 0.05 - 75.7599519904 0.9389606107 0.05 - 75.7797559512 0.9422283111 0.05 - 75.799559912 0.9453560385 0.05 - 75.8193638728 0.9482835582 0.05 - 75.8391678336 0.9509980507 0.05 - 75.8589717944 0.9534913212 0.05 - 75.8787757552 0.9557485292 0.05 - 75.8985797159 0.9577517424 0.05 - 75.9183836767 0.9595387299 0.05 - 75.9381876375 0.9611057541 0.05 - 75.9579915983 0.9624660333 0.05 - 75.9777955591 0.9636494232 0.05 - 75.9975995199 0.9646581991 0.05 - 76.0174034807 0.9655085707 0.05 - 76.0372074415 0.9662082593 0.05 - 76.0570114023 0.9667766966 0.05 - 76.0768153631 0.9672211105 0.05 - 76.0966193239 0.9675571265 0.05 - 76.1164232847 0.9677852709 0.05 - 76.1362272454 0.9679020675 0.05 - 76.1560312062 0.9679075509 0.05 - 76.175835167 0.9678034565 0.05 - 76.1956391278 0.9675816221 0.05 - 76.2154430886 0.9672220211 0.05 - 76.2352470494 0.9667151534 0.05 - 76.2550510102 0.9660110343 0.05 - 76.274854971 0.9650926498 0.05 - 76.2946589318 0.9638627007 0.05 - 76.3144628926 0.9622532221 0.05 - 76.3342668534 0.9601663746 0.05 - 76.3540708142 0.9574549595 0.05 - 76.373874775 0.9539396641 0.05 - 76.3936787357 0.9493689174 0.05 - 76.4134826965 0.943500831 0.05 - 76.4332866573 0.9360090176 0.05 - 76.4530906181 0.9264693621 0.05 - 76.4728945789 0.9145661037 0.05 - 76.4926985397 0.8998762898 0.05 - 76.5125025005 0.8820496778 0.05 - 76.5323064613 0.8607501404 0.05 - 76.5521104221 0.8358589815 0.05 - 76.5719143829 0.8073605168 0.05 - 76.5917183437 0.7756458579 0.05 - 76.6115223045 0.7410496746 0.05 - 76.6313262653 0.7044153464 0.05 - 76.651130226 0.666300018 0.05 - 76.6709341868 0.6281771355 0.05 - 76.6907381476 0.5912401569 0.05 - 76.7105421084 0.5561731353 0.05 - 76.7303460692 0.5237192987 0.05 - 76.75015003 0.4951663392 0.05 - 76.7699539908 0.4707230984 0.05 - 76.7897579516 0.4512434931 0.05 - 76.8095619124 0.4367598879 0.05 - 76.8293658732 0.4277358148 0.05 - 76.849169834 0.4238397966 0.05 - 76.8689737948 0.4255032687 0.05 - 76.8887777556 0.4324864272 0.05 - 76.9085817163 0.4446436109 0.05 - 76.9283856771 0.4618961812 0.05 - 76.9481896379 0.484108498 0.05 - 76.9679935987 0.5103438457 0.05 - 76.9877975595 0.5404745444 0.05 - 77.0076015203 0.5733017941 0.05 - 77.0274054811 0.6081025846 0.05 - 77.0472094419 0.6443394846 0.05 - 77.0670134027 0.6805503646 0.05 - 77.0868173635 0.7155115575 0.05 - 77.1066213243 0.7483284016 0.05 - 77.1264252851 0.7783779767 0.05 - 77.1462292458 0.8049053877 0.05 - 77.1660332066 0.827580679 0.05 - 77.1858371674 0.8460961852 0.05 - 77.2056411282 0.8604689194 0.05 - 77.225445089 0.8708676728 0.05 - 77.2452490498 0.8771371732 0.05 - 77.2650530106 0.8797417833 0.05 - 77.2848569714 0.8786899508 0.05 - 77.3046609322 0.8742251294 0.05 - 77.324464893 0.8664374772 0.05 - 77.3442688538 0.8557171453 0.05 - 77.3640728146 0.8422690892 0.05 - 77.3838767754 0.8263573236 0.05 - 77.4036807361 0.8083383008 0.05 - 77.4234846969 0.7887980957 0.05 - 77.4432886577 0.7681864674 0.05 - 77.4630926185 0.747120255 0.05 - 77.4828965793 0.7264693002 0.05 - 77.5027005401 0.7065016216 0.05 - 77.5225045009 0.6881128011 0.05 - 77.5423084617 0.6717729732 0.05 - 77.5621124225 0.6579628149 0.05 - 77.5819163833 0.6471783556 0.05 - 77.6017203441 0.6397052563 0.05 - 77.6215243049 0.636066014 0.05 - 77.6413282657 0.6358694036 0.05 - 77.6611322264 0.6394431775 0.05 - 77.6809361872 0.6466619555 0.05 - 77.700740148 0.6571516878 0.05 - 77.7205441088 0.6709247261 0.05 - 77.7403480696 0.6871119669 0.05 - 77.7601520304 0.7053903499 0.05 - 77.7799559912 0.7250147205 0.05 - 77.799759952 0.7452579644 0.05 - 77.8195639128 0.7656872514 0.05 - 77.8393678736 0.7855359679 0.05 - 77.8591718344 0.8042785043 0.05 - 77.8789757952 0.8212127396 0.05 - 77.898779756 0.8362530485 0.05 - 77.9185837167 0.8490706382 0.05 - 77.9383876775 0.8597740915 0.05 - 77.9581916383 0.8683868683 0.05 - 77.9779955991 0.8750288265 0.05 - 77.9977995599 0.8801211959 0.05 - 78.0176035207 0.8840176807 0.05 - 78.0374074815 0.886984063 0.05 - 78.0572114423 0.8894679999 0.05 - 78.0770154031 0.8917069946 0.05 - 78.0968193639 0.8939966851 0.05 - 78.1166233247 0.8964705928 0.05 - 78.1364272855 0.8992141342 0.05 - 78.1562312462 0.9023761845 0.05 - 78.176035207 0.9058642642 0.05 - 78.1958391678 0.9096480864 0.05 - 78.2156431286 0.9136344062 0.05 - 78.2354470894 0.9177513051 0.05 - 78.2552510502 0.9217888915 0.05 - 78.275055011 0.9257827814 0.05 - 78.2948589718 0.9295529129 0.05 - 78.3146629326 0.9330598788 0.05 - 78.3344668934 0.9362456301 0.05 - 78.3542708542 0.9390966452 0.05 - 78.374074815 0.9415892662 0.05 - 78.3938787758 0.9437274366 0.05 - 78.4136827365 0.9455714134 0.05 - 78.4334866973 0.9471064292 0.05 - 78.4532906581 0.9483657552 0.05 - 78.4730946189 0.9493647366 0.05 - 78.4928985797 0.9500772216 0.05 - 78.5127025405 0.9505139133 0.05 - 78.5325065013 0.9506441766 0.05 - 78.5523104621 0.9504058302 0.05 - 78.5721144229 0.9497569151 0.05 - 78.5919183837 0.9486544256 0.05 - 78.6117223445 0.9469691847 0.05 - 78.6315263053 0.9446620256 0.05 - 78.6513302661 0.9417062755 0.05 - 78.6711342268 0.9380044767 0.05 - 78.6909381876 0.9335682455 0.05 - 78.7107421484 0.9283976728 0.05 - 78.7305461092 0.9225142772 0.05 - 78.75035007 0.9160544228 0.05 - 78.7701540308 0.9091638198 0.05 - 78.7899579916 0.9020740008 0.05 - 78.8097619524 0.8948976399 0.05 - 78.8295659132 0.8879261635 0.05 - 78.849369874 0.8813774369 0.05 - 78.8691738348 0.8755585048 0.05 - 78.8889777956 0.8706299377 0.05 - 78.9087817564 0.8668434406 0.05 - 78.9285857171 0.8645109025 0.05 - 78.9483896779 0.8634165043 0.05 - 78.9681936387 0.8639078956 0.05 - 78.9879975995 0.8657649433 0.05 - 79.0078015603 0.8690297099 0.05 - 79.0276055211 0.8735448047 0.05 - 79.0474094819 0.8790522525 0.05 - 79.0672134427 0.8854153553 0.05 - 79.0870174035 0.8923854274 0.05 - 79.1068213643 0.8996560709 0.05 - 79.1266253251 0.9070200892 0.05 - 79.1464292859 0.9143120434 0.05 - 79.1662332466 0.9212811415 0.05 - 79.1860372074 0.9277527819 0.05 - 79.2058411682 0.9336583724 0.05 - 79.225645129 0.9388733192 0.05 - 79.2454490898 0.943384486 0.05 - 79.2652530506 0.9471638718 0.05 - 79.2850570114 0.9502360671 0.05 - 79.3048609722 0.9526263439 0.05 - 79.324664933 0.9543926166 0.05 - 79.3444688938 0.9555407681 0.05 - 79.3642728546 0.9561446162 0.05 - 79.3840768154 0.9562114126 0.05 - 79.4038807762 0.9557845495 0.05 - 79.4236847369 0.9549198295 0.05 - 79.4434886977 0.9536086647 0.05 - 79.4632926585 0.9519453474 0.05 - 79.4830966193 0.9499732653 0.05 - 79.5029005801 0.9477425362 0.05 - 79.5227045409 0.9453584074 0.05 - 79.5425085017 0.9429025768 0.05 - 79.5623124625 0.9404909279 0.05 - 79.5821164233 0.9382282537 0.05 - 79.6019203841 0.9362684995 0.05 - 79.6217243449 0.9346498101 0.05 - 79.6415283057 0.9335306059 0.05 - 79.6613322665 0.9329631734 0.05 - 79.6811362272 0.9329389883 0.05 - 79.700940188 0.9335102664 0.05 - 79.7207441488 0.934617542 0.05 - 79.7405481096 0.9362513346 0.05 - 79.7603520704 0.9382723611 0.05 - 79.7801560312 0.9406374926 0.05 - 79.799959992 0.9431598604 0.05 - 79.8197639528 0.94576837 0.05 - 79.8395679136 0.9483491363 0.05 - 79.8593718744 0.9508425953 0.05 - 79.8791758352 0.9531169462 0.05 - 79.898979796 0.9551418242 0.05 - 79.9187837568 0.9568614093 0.05 - 79.9385877175 0.9582403589 0.05 - 79.9583916783 0.9592711855 0.05 - 79.9781956391 0.95996361 0.05 - 79.9979995999 0.9603107154 0.05 - 80.0178035607 0.9603423155 0.05 - 80.0376075215 0.9600571136 0.05 - 80.0574114823 0.9594715441 0.05 - 80.0772154431 0.9585978716 0.05 - 80.0970194039 0.9574654234 0.05 - 80.1168233647 0.9560708925 0.05 - 80.1366273255 0.9544593674 0.05 - 80.1564312863 0.9526407178 0.05 - 80.176235247 0.9506720029 0.05 - 80.1960392078 0.9486073292 0.05 - 80.2158431686 0.9464845589 0.05 - 80.2356471294 0.9443943488 0.05 - 80.2554510902 0.9423454053 0.05 - 80.275255051 0.9404848569 0.05 - 80.2950590118 0.9387923039 0.05 - 80.3148629726 0.937364324 0.05 - 80.3346669334 0.9362096888 0.05 - 80.3544708942 0.9353043006 0.05 - 80.374274855 0.9346259463 0.05 - 80.3940788158 0.9340551336 0.05 - 80.4138827766 0.9334709679 0.05 - 80.4336867373 0.9327116111 0.05 - 80.4534906981 0.9315599812 0.05 - 80.4732946589 0.9298161983 0.05 - 80.4930986197 0.9272776582 0.05 - 80.5129025805 0.9237260971 0.05 - 80.5327065413 0.9190428196 0.05 - 80.5525105021 0.9132194227 0.05 - 80.5723144629 0.9063205477 0.05 - 80.5921184237 0.8983916546 0.05 - 80.6119223845 0.889873453 0.05 - 80.6317263453 0.8809739961 0.05 - 80.6515303061 0.8722106846 0.05 - 80.6713342669 0.8641096115 0.05 - 80.6911382276 0.8570506747 0.05 - 80.7109421884 0.8515896815 0.05 - 80.7307461492 0.8479093364 0.05 - 80.75055011 0.8463858977 0.05 - 80.7703540708 0.8472309047 0.05 - 80.7901580316 0.8502289054 0.05 - 80.8099619924 0.8553152486 0.05 - 80.8297659532 0.8622900494 0.05 - 80.849569914 0.8707227722 0.05 - 80.8693738748 0.8802240204 0.05 - 80.8891778356 0.8902430333 0.05 - 80.9089817964 0.9005137947 0.05 - 80.9287857572 0.9104264631 0.05 - 80.9485897179 0.9198166633 0.05 - 80.9683936787 0.9282786073 0.05 - 80.9881976395 0.9356882838 0.05 - 81.0080016003 0.9419429125 0.05 - 81.0278055611 0.9469974636 0.05 - 81.0476095219 0.9508960117 0.05 - 81.0674134827 0.9537490656 0.05 - 81.0872174435 0.9555853637 0.05 - 81.1070214043 0.9565572816 0.05 - 81.1268253651 0.9567334715 0.05 - 81.1466293259 0.9562261059 0.05 - 81.1664332867 0.9551008475 0.05 - 81.1862372474 0.9534637305 0.05 - 81.2060412082 0.9513492802 0.05 - 81.225845169 0.9488592182 0.05 - 81.2456491298 0.9460825434 0.05 - 81.2654530906 0.9431130899 0.05 - 81.2852570514 0.9400521153 0.05 - 81.3050610122 0.936971075 0.05 - 81.324864973 0.9340492693 0.05 - 81.3446689338 0.9313854688 0.05 - 81.3644728946 0.929107828 0.05 - 81.3842768554 0.9272912366 0.05 - 81.4040808162 0.9260864138 0.05 - 81.423884777 0.9254821245 0.05 - 81.4436887377 0.9255630626 0.05 - 81.4634926985 0.9262961756 0.05 - 81.4832966593 0.927691676 0.05 - 81.5031006201 0.9296551077 0.05 - 81.5229045809 0.9321085259 0.05 - 81.5427085417 0.9349573973 0.05 - 81.5625125025 0.9380801439 0.05 - 81.5823164633 0.9413495952 0.05 - 81.6021204241 0.944692679 0.05 - 81.6219243849 0.9479870072 0.05 - 81.6417283457 0.9511428237 0.05 - 81.6615323065 0.9541168865 0.05 - 81.6813362673 0.9568323705 0.05 - 81.701140228 0.9592773908 0.05 - 81.7209441888 0.9614244965 0.05 - 81.7407481496 0.9632947151 0.05 - 81.7605521104 0.964900072 0.05 - 81.7803560712 0.9662391545 0.05 - 81.800160032 0.9673690058 0.05 - 81.8199639928 0.968297838 0.05 - 81.8397679536 0.9690576981 0.05 - 81.8595719144 0.9696663909 0.05 - 81.8793758752 0.9701449902 0.05 - 81.899179836 0.9705175119 0.05 - 81.9189837968 0.97079879 0.05 - 81.9387877576 0.9709939536 0.05 - 81.9585917183 0.9711234765 0.05 - 81.9783956791 0.9711806211 0.05 - 81.9981996399 0.9711795811 0.05 - 82.0180036007 0.971116136 0.05 - 82.0378075615 0.9709961235 0.05 - 82.0576115223 0.9708021012 0.05 - 82.0774154831 0.9705403579 0.05 - 82.0972194439 0.9701991147 0.05 - 82.1170234047 0.9697717585 0.05 - 82.1368273655 0.9692446617 0.05 - 82.1566313263 0.9685964387 0.05 - 82.1764352871 0.9678063607 0.05 - 82.1962392478 0.9668426088 0.05 - 82.2160432086 0.9656762962 0.05 - 82.2358471694 0.9642592083 0.05 - 82.2556511302 0.962561277 0.05 - 82.275455091 0.9605220455 0.05 - 82.2952590518 0.9580698493 0.05 - 82.3150630126 0.9550984251 0.05 - 82.3348669734 0.9515663073 0.05 - 82.3546709342 0.9473448108 0.05 - 82.374474895 0.9423311869 0.05 - 82.3942788558 0.9364167384 0.05 - 82.4140828166 0.9294981318 0.05 - 82.4338867774 0.9214893979 0.05 - 82.4536907381 0.912294925 0.05 - 82.4734946989 0.9017597732 0.05 - 82.4932986597 0.8898631002 0.05 - 82.5131026205 0.8765510232 0.05 - 82.5329065813 0.8615749529 0.05 - 82.5527105421 0.844840553 0.05 - 82.5725145029 0.8263535554 0.05 - 82.5923184637 0.8058656486 0.05 - 82.6121224245 0.7834237832 0.05 - 82.6319263853 0.7589316062 0.05 - 82.6517303461 0.7322799568 0.05 - 82.6715343069 0.703836756 0.05 - 82.6913382677 0.6734999271 0.05 - 82.7111422284 0.6419250944 0.05 - 82.7309461892 0.6097209084 0.05 - 82.75075015 0.5774951311 0.05 - 82.7705541108 0.5461399039 0.05 - 82.7903580716 0.5163169372 0.05 - 82.8101620324 0.4885750395 0.05 - 82.8299659932 0.4637592499 0.05 - 82.849769954 0.4422021623 0.05 - 82.8695739148 0.4246254772 0.05 - 82.8893778756 0.4114203616 0.05 - 82.9091818364 0.4025259825 0.05 - 82.9289857972 0.3983092539 0.05 - 82.948789758 0.3988064522 0.05 - 82.9685937187 0.404078623 0.05 - 82.9883976795 0.4138556743 0.05 - 83.0082016403 0.4286285996 0.05 - 83.0280056011 0.4477408706 0.05 - 83.0478095619 0.4711400332 0.05 - 83.0676135227 0.4984912584 0.05 - 83.0874174835 0.5292400397 0.05 - 83.1072214443 0.5622404195 0.05 - 83.1270254051 0.5973447034 0.05 - 83.1468293659 0.6333820149 0.05 - 83.1666333267 0.6691558935 0.05 - 83.1864372875 0.7039451721 0.05 - 83.2062412482 0.7368014753 0.05 - 83.226045209 0.7670801181 0.05 - 83.2458491698 0.794219998 0.05 - 83.2656531306 0.8177580395 0.05 - 83.2854570914 0.8376836442 0.05 - 83.3052610522 0.854065088 0.05 - 83.325065013 0.8669384882 0.05 - 83.3448689738 0.8767578246 0.05 - 83.3646729346 0.8838847685 0.05 - 83.3844768954 0.8886041232 0.05 - 83.4042808562 0.8914718683 0.05 - 83.424084817 0.892839888 0.05 - 83.4438887778 0.8931378406 0.05 - 83.4636927385 0.8927145304 0.05 - 83.4834966993 0.8918918656 0.05 - 83.5033006601 0.8909810682 0.05 - 83.5231046209 0.8902281854 0.05 - 83.5429085817 0.889754659 0.05 - 83.5627125425 0.8896478371 0.05 - 83.5825165033 0.8900467654 0.05 - 83.6023204641 0.8908347371 0.05 - 83.6221244249 0.8920331769 0.05 - 83.6419283857 0.8935073888 0.05 - 83.6617323465 0.8951724728 0.05 - 83.6815363073 0.896891291 0.05 - 83.7013402681 0.8985087911 0.05 - 83.7211442288 0.8999808268 0.05 - 83.7409481896 0.9011250946 0.05 - 83.7607521504 0.9019011178 0.05 - 83.7805561112 0.9021918403 0.05 - 83.800360072 0.9020549868 0.05 - 83.8201640328 0.9014380717 0.05 - 83.8399679936 0.9004111771 0.05 - 83.8597719544 0.898912758 0.05 - 83.8795759152 0.8970402365 0.05 - 83.899379876 0.8948600296 0.05 - 83.9191838368 0.8924599082 0.05 - 83.9389877976 0.8898966905 0.05 - 83.9587917584 0.8872111342 0.05 - 83.9785957191 0.8844425509 0.05 - 83.9983996799 0.8816881613 0.05 - 84.0182036407 0.8790307227 0.05 - 84.0380076015 0.8765361494 0.05 - 84.0578115623 0.8741289295 0.05 - 84.0776155231 0.8721099837 0.05 - 84.0974194839 0.8702739856 0.05 - 84.1172234447 0.8687070661 0.05 - 84.1370274055 0.8676034461 0.05 - 84.1568313663 0.8668079373 0.05 - 84.1766353271 0.8663767772 0.05 - 84.1964392879 0.8663944372 0.05 - 84.2162432486 0.8667095026 0.05 - 84.2360472094 0.8674713094 0.05 - 84.2558511702 0.8685465035 0.05 - 84.275655131 0.8700401253 0.05 - 84.2954590918 0.8717688702 0.05 - 84.3152630526 0.8738471405 0.05 - 84.3350670134 0.8762059693 0.05 - 84.3548709742 0.878722387 0.05 - 84.374674935 0.8815855438 0.05 - 84.3944788958 0.8845358284 0.05 - 84.4142828566 0.8876747415 0.05 - 84.4340868174 0.8909160284 0.05 - 84.4538907782 0.8942132718 0.05 - 84.4736947389 0.8974862149 0.05 - 84.4934986997 0.9007583572 0.05 - 84.5133026605 0.9039144788 0.05 - 84.5331066213 0.9069187758 0.05 - 84.5529105821 0.9096156768 0.05 - 84.5727145429 0.9119508131 0.05 - 84.5925185037 0.9138545186 0.05 - 84.6123224645 0.915207222 0.05 - 84.6321264253 0.9159024675 0.05 - 84.6519303861 0.9158740799 0.05 - 84.6717343469 0.9149862315 0.05 - 84.6915383077 0.9131745393 0.05 - 84.7113422685 0.9103407184 0.05 - 84.7311462292 0.9063189731 0.05 - 84.75095019 0.9011051875 0.05 - 84.7707541508 0.8945899673 0.05 - 84.7905581116 0.8867437568 0.05 - 84.8103620724 0.8776003443 0.05 - 84.8301660332 0.8671723988 0.05 - 84.849969994 0.855551158 0.05 - 84.8697739548 0.8428989344 0.05 - 84.8895779156 0.8294314524 0.05 - 84.9093818764 0.8154023565 0.05 - 84.9291858372 0.8012528865 0.05 - 84.948989798 0.7873066617 0.05 - 84.9687937588 0.7739315741 0.05 - 84.9885977195 0.7614422794 0.05 - 85.0084016803 0.7504017815 0.05 - 85.0282056411 0.740989184 0.05 - 85.0480096019 0.7336039985 0.05 - 85.0678135627 0.7285506623 0.05 - 85.0876175235 0.7259672562 0.05 - 85.1074214843 0.7258444101 0.05 - 85.1272254451 0.7282130686 0.05 - 85.1470294059 0.7332118896 0.05 - 85.1668333667 0.7403943918 0.05 - 85.1866373275 0.7497929489 0.05 - 85.2064412883 0.7608474968 0.05 - 85.226245249 0.7734308782 0.05 - 85.2460492098 0.7869611914 0.05 - 85.2658531706 0.8011843305 0.05 - 85.2856571314 0.8156361566 0.05 - 85.3054610922 0.83000615 0.05 - 85.325265053 0.843901133 0.05 - 85.3450690138 0.856955928 0.05 - 85.3648729746 0.8690831509 0.05 - 85.3846769354 0.8800309315 0.05 - 85.4044808962 0.8897774557 0.05 - 85.424284857 0.8982033023 0.05 - 85.4440888178 0.9054235112 0.05 - 85.4638927786 0.9114911113 0.05 - 85.4836967393 0.9164657797 0.05 - 85.5035007001 0.9205150791 0.05 - 85.5233046609 0.923754231 0.05 - 85.5431086217 0.9263051925 0.05 - 85.5629125825 0.9282798117 0.05 - 85.5827165433 0.9298299531 0.05 - 85.6025205041 0.9310631313 0.05 - 85.6223244649 0.9320623541 0.05 - 85.6421284257 0.93293072 0.05 - 85.6619323865 0.9337189291 0.05 - 85.6817363473 0.934531043 0.05 - 85.7015403081 0.9354057653 0.05 - 85.7213442689 0.9363382147 0.05 - 85.7411482296 0.9373990098 0.05 - 85.7609521904 0.938598363 0.05 - 85.7807561512 0.9399278644 0.05 - 85.800560112 0.9414003176 0.05 - 85.8203640728 0.9429845177 0.05 - 85.8401680336 0.9446791874 0.05 - 85.8599719944 0.9464485719 0.05 - 85.8797759552 0.9482446604 0.05 - 85.899579916 0.9500708613 0.05 - 85.9193838768 0.9518779683 0.05 - 85.9391878376 0.9536564577 0.05 - 85.9589917984 0.9553592903 0.05 - 85.9787957592 0.9569827897 0.05 - 85.9985997199 0.9585042147 0.05 - 86.0184036807 0.9599208828 0.05 - 86.0382076415 0.961221533 0.05 - 86.0580116023 0.9624144123 0.05 - 86.0778155631 0.9634955137 0.05 - 86.0976195239 0.9644712528 0.05 - 86.1174234847 0.965341749 0.05 - 86.1372274455 0.9661198291 0.05 - 86.1570314063 0.9668200502 0.05 - 86.1768353671 0.9674450836 0.05 - 86.1966393279 0.9680002677 0.05 - 86.2164432887 0.9684970161 0.05 - 86.2362472494 0.9689317877 0.05 - 86.2560512102 0.9693143616 0.05 - 86.275855171 0.9696462887 0.05 - 86.2956591318 0.9699308222 0.05 - 86.3154630926 0.9701754128 0.05 - 86.3352670534 0.9703716989 0.05 - 86.3550710142 0.97051536 0.05 - 86.374874975 0.9705971431 0.05 - 86.3946789358 0.9706133802 0.05 - 86.4144828966 0.9705589369 0.05 - 86.4342868574 0.9704199926 0.05 - 86.4540908182 0.97019352 0.05 - 86.473894779 0.9698573413 0.05 - 86.4936987397 0.9694052169 0.05 - 86.5135027005 0.9688282917 0.05 - 86.5333066613 0.9681191001 0.05 - 86.5531106221 0.967258191 0.05 - 86.5729145829 0.9662580582 0.05 - 86.5927185437 0.9651253895 0.05 - 86.6125225045 0.9638859995 0.05 - 86.6323264653 0.9625462804 0.05 - 86.6521304261 0.9611334143 0.05 - 86.6719343869 0.9597024746 0.05 - 86.6917383477 0.9582793909 0.05 - 86.7115423085 0.95692154 0.05 - 86.7313462693 0.9556507603 0.05 - 86.75115023 0.9545395158 0.05 - 86.7709541908 0.9536298059 0.05 - 86.7907581516 0.9529418385 0.05 - 86.8105621124 0.9524893383 0.05 - 86.8303660732 0.9523256025 0.05 - 86.850170034 0.952386865 0.05 - 86.8699739948 0.9527103219 0.05 - 86.8897779556 0.9532599232 0.05 - 86.9095819164 0.9539944063 0.05 - 86.9293858772 0.9548762357 0.05 - 86.949189838 0.9558629312 0.05 - 86.9689937988 0.9569074365 0.05 - 86.9887977596 0.9579835991 0.05 - 87.0086017203 0.9590472267 0.05 - 87.0284056811 0.9600528698 0.05 - 87.0482096419 0.9609935492 0.05 - 87.0680136027 0.9618379153 0.05 - 87.0878175635 0.9625685732 0.05 - 87.1076215243 0.9631787898 0.05 - 87.1274254851 0.9636515232 0.05 - 87.1472294459 0.9640056556 0.05 - 87.1670334067 0.9642370233 0.05 - 87.1868373675 0.9643412429 0.05 - 87.2066413283 0.9643303794 0.05 - 87.2264452891 0.9642021343 0.05 - 87.2462492498 0.9639704038 0.05 - 87.2660532106 0.9636391724 0.05 - 87.2858571714 0.9632019312 0.05 - 87.3056611322 0.9626745163 0.05 - 87.325465093 0.9620778451 0.05 - 87.3452690538 0.9614002215 0.05 - 87.3650730146 0.9606787184 0.05 - 87.3848769754 0.9599004299 0.05 - 87.4046809362 0.9591206771 0.05 - 87.424484897 0.9583317568 0.05 - 87.4442888578 0.9575387866 0.05 - 87.4640928186 0.9568048836 0.05 - 87.4838967794 0.9561224566 0.05 - 87.5037007401 0.9555176376 0.05 - 87.5235047009 0.9550247745 0.05 - 87.5433086617 0.9546589487 0.05 - 87.5631126225 0.9544312224 0.05 - 87.5829165833 0.9543203624 0.05 - 87.6027205441 0.9543787504 0.05 - 87.6225245049 0.9545829426 0.05 - 87.6423284657 0.9549224125 0.05 - 87.6621324265 0.9553847823 0.05 - 87.6819363873 0.9559561933 0.05 - 87.7017403481 0.9566262419 0.05 - 87.7215443089 0.9573726647 0.05 - 87.7413482697 0.9581517425 0.05 - 87.7611522304 0.9589540338 0.05 - 87.7809561912 0.959767998 0.05 - 87.800760152 0.9605588684 0.05 - 87.8205641128 0.9613188816 0.05 - 87.8403680736 0.9620221201 0.05 - 87.8601720344 0.9626537402 0.05 - 87.8799759952 0.9632136312 0.05 - 87.899779956 0.9636809623 0.05 - 87.9195839168 0.9640546328 0.05 - 87.9393878776 0.9643266451 0.05 - 87.9591918384 0.9645069476 0.05 - 87.9789957992 0.9645754519 0.05 - 87.99879976 0.9645555763 0.05 - 88.0186037207 0.9644363096 0.05 - 88.0384076815 0.9642170211 0.05 - 88.0582116423 0.9639130676 0.05 - 88.0780156031 0.9635190501 0.05 - 88.0978195639 0.9630355321 0.05 - 88.1176235247 0.9624689042 0.05 - 88.1374274855 0.9618268366 0.05 - 88.1572314463 0.9610862139 0.05 - 88.1770354071 0.9602760876 0.05 - 88.1968393679 0.9593694074 0.05 - 88.2166433287 0.9583757973 0.05 - 88.2364472895 0.9572863824 0.05 - 88.2562512503 0.9560992238 0.05 - 88.276055211 0.9547867427 0.05 - 88.2958591718 0.9533778494 0.05 - 88.3156631326 0.9518394358 0.05 - 88.3354670934 0.9501497891 0.05 - 88.3552710542 0.9483420151 0.05 - 88.375075015 0.9463973802 0.05 - 88.3948789758 0.9442864539 0.05 - 88.4146829366 0.9420506811 0.05 - 88.4344868974 0.9396673085 0.05 - 88.4542908582 0.9372150076 0.05 - 88.474094819 0.9346142428 0.05 - 88.4938987798 0.931986969 0.05 - 88.5137027405 0.9293231161 0.05 - 88.5335067013 0.926681627 0.05 - 88.5533106621 0.9240276115 0.05 - 88.5731146229 0.9214490466 0.05 - 88.5929185837 0.9189803375 0.05 - 88.6127225445 0.9166831755 0.05 - 88.6325265053 0.9145864407 0.05 - 88.6523304661 0.9127179957 0.05 - 88.6721344269 0.9111011555 0.05 - 88.6919383877 0.909816945 0.05 - 88.7117423485 0.9088458285 0.05 - 88.7315463093 0.9082259107 0.05 - 88.7513502701 0.9079421596 0.05 - 88.7711542308 0.9079636669 0.05 - 88.7909581916 0.9083412064 0.05 - 88.8107621524 0.9089613021 0.05 - 88.8305661132 0.9099036105 0.05 - 88.850370074 0.9110690727 0.05 - 88.8701740348 0.9123992224 0.05 - 88.8899779956 0.9138857282 0.05 - 88.9097819564 0.9154700852 0.05 - 88.9295859172 0.9170890492 0.05 - 88.949389878 0.9187387239 0.05 - 88.9691938388 0.9203166574 0.05 - 88.9889977996 0.921845471 0.05 - 89.0088017604 0.9232855609 0.05 - 89.0286057211 0.9246169431 0.05 - 89.0484096819 0.9258296652 0.05 - 89.0682136427 0.926908271 0.05 - 89.0880176035 0.9277694396 0.05 - 89.1078215643 0.9284642492 0.05 - 89.1276255251 0.9289436988 0.05 - 89.1474294859 0.9291134838 0.05 - 89.1672334467 0.9289825014 0.05 - 89.1870374075 0.9284168498 0.05 - 89.2068413683 0.9273844744 0.05 - 89.2266453291 0.9257538085 0.05 - 89.2464492899 0.9234009032 0.05 - 89.2662532507 0.9202885196 0.05 - 89.2860572114 0.9162612767 0.05 - 89.3058611722 0.9112282355 0.05 - 89.325665133 0.905194466 0.05 - 89.3454690938 0.8981050426 0.05 - 89.3652730546 0.8900374818 0.05 - 89.3850770154 0.881018367 0.05 - 89.4048809762 0.8713266843 0.05 - 89.424684937 0.8611514785 0.05 - 89.4444888978 0.8508023442 0.05 - 89.4642928586 0.8403181959 0.05 - 89.4840968194 0.8302661513 0.05 - 89.5039007802 0.8208810899 0.05 - 89.5237047409 0.8125442907 0.05 - 89.5435087017 0.8053616769 0.05 - 89.5633126625 0.7996935069 0.05 - 89.5831166233 0.7957807807 0.05 - 89.6029205841 0.7936065696 0.05 - 89.6227245449 0.7933419988 0.05 - 89.6425285057 0.7948011565 0.05 - 89.6623324665 0.7982944964 0.05 - 89.6821364273 0.8032921451 0.05 - 89.7019403881 0.8097707466 0.05 - 89.7217443489 0.8176227195 0.05 - 89.7415483097 0.8265417905 0.05 - 89.7613522705 0.8362519837 0.05 - 89.7811562312 0.846439755 0.05 - 89.800960192 0.8569834616 0.05 - 89.8207641528 0.8675151757 0.05 - 89.8405681136 0.877824811 0.05 - 89.8603720744 0.8876907759 0.05 - 89.8801760352 0.8969225366 0.05 - 89.899979996 0.9053299084 0.05 - 89.9197839568 0.9127246244 0.05 - 89.9395879176 0.9189808378 0.05 - 89.9593918784 0.9240033673 0.05 - 89.9791958392 0.9276303184 0.05 - 89.9989998 0.9297207511 0.05 - 90.0188037608 0.9301241636 0.05 - 90.0386077215 0.9287272418 0.05 - 90.0584116823 0.92536491 0.05 - 90.0782156431 0.9199777303 0.05 - 90.0980196039 0.9124575113 0.05 - 90.1178235647 0.9028637921 0.05 - 90.1376275255 0.8912766411 0.05 - 90.1574314863 0.8778802452 0.05 - 90.1772354471 0.8629748091 0.05 - 90.1970394079 0.8470442526 0.05 - 90.2168433687 0.830638788 0.05 - 90.2366473295 0.8142594712 0.05 - 90.2564512903 0.7985013359 0.05 - 90.2762552511 0.7839960523 0.05 - 90.2960592118 0.7713682209 0.05 - 90.3158631726 0.7611856309 0.05 - 90.3356671334 0.7538661496 0.05 - 90.3554710942 0.7496099412 0.05 - 90.375275055 0.7486989234 0.05 - 90.3950790158 0.7510447418 0.05 - 90.4148829766 0.7565482068 0.05 - 90.4346869374 0.7651601264 0.05 - 90.4544908982 0.7763101487 0.05 - 90.474294859 0.789490246 0.05 - 90.4940988198 0.8043756592 0.05 - 90.5139027806 0.8200695974 0.05 - 90.5337067413 0.8362979226 0.05 - 90.5535107021 0.8524364295 0.05 - 90.5733146629 0.8679164386 0.05 - 90.5931186237 0.882343725 0.05 - 90.6129225845 0.8954112061 0.05 - 90.6327265453 0.9069182247 0.05 - 90.6525305061 0.9167890105 0.05 - 90.6723344669 0.9250771308 0.05 - 90.6921384277 0.9317586879 0.05 - 90.7119423885 0.9370386844 0.05 - 90.7317463493 0.941052287 0.05 - 90.7515503101 0.9439603269 0.05 - 90.7713542709 0.9459069248 0.05 - 90.7911582316 0.9470225603 0.05 - 90.8109621924 0.9474560841 0.05 - 90.8307661532 0.947264412 0.05 - 90.850570114 0.946547203 0.05 - 90.8703740748 0.9453332009 0.05 - 90.8901780356 0.9436590976 0.05 - 90.9099819964 0.941533996 0.05 - 90.9297859572 0.9389710527 0.05 - 90.949589918 0.9359640103 0.05 - 90.9693938788 0.9325007079 0.05 - 90.9891978396 0.928533833 0.05 - 91.0090018004 0.9240818615 0.05 - 91.0288057612 0.9191350852 0.05 - 91.0486097219 0.9136869884 0.05 - 91.0684136827 0.9077758252 0.05 - 91.0882176435 0.9013249694 0.05 - 91.1080216043 0.8944125224 0.05 - 91.1278255651 0.8870814 0.05 - 91.1476295259 0.8793762373 0.05 - 91.1674334867 0.8713938011 0.05 - 91.1872374475 0.8631994007 0.05 - 91.2070414083 0.8549669762 0.05 - 91.2268453691 0.846827622 0.05 - 91.2466493299 0.8389781106 0.05 - 91.2664532907 0.8314582311 0.05 - 91.2862572515 0.8245492006 0.05 - 91.3060612122 0.8184083904 0.05 - 91.325865173 0.8132303961 0.05 - 91.3456691338 0.8090445004 0.05 - 91.3654730946 0.8061165638 0.05 - 91.3852770554 0.8045179329 0.05 - 91.4050810162 0.8043064381 0.05 - 91.424884977 0.8055523997 0.05 - 91.4446889378 0.8083412411 0.05 - 91.4644928986 0.8124447237 0.05 - 91.4842968594 0.8179207927 0.05 - 91.5041008202 0.8246819362 0.05 - 91.523904781 0.8323669248 0.05 - 91.5437087417 0.8409675413 0.05 - 91.5635127025 0.8501896858 0.05 - 91.5833166633 0.8598167701 0.05 - 91.6031206241 0.8695014564 0.05 - 91.6229245849 0.8791463911 0.05 - 91.6427285457 0.8884760264 0.05 - 91.6625325065 0.8973510483 0.05 - 91.6823364673 0.9055285285 0.05 - 91.7021404281 0.9129450009 0.05 - 91.7219443889 0.9194530598 0.05 - 91.7417483497 0.9249848723 0.05 - 91.7615523105 0.9295839872 0.05 - 91.7813562713 0.933214732 0.05 - 91.801160232 0.9359363581 0.05 - 91.8209641928 0.9378134882 0.05 - 91.8407681536 0.9389487222 0.05 - 91.8605721144 0.939425526 0.05 - 91.8803760752 0.9393830327 0.05 - 91.900180036 0.9389614213 0.05 - 91.9199839968 0.9382530008 0.05 - 91.9397879576 0.9373978661 0.05 - 91.9595919184 0.9365381612 0.05 - 91.9793958792 0.9357669546 0.05 - 91.99919984 0.9351811824 0.05 - 92.0190038008 0.9348639319 0.05 - 92.0388077616 0.9348290467 0.05 - 92.0586117223 0.9351019444 0.05 - 92.0784156831 0.9356962098 0.05 - 92.0982196439 0.9365279411 0.05 - 92.1180236047 0.9375301852 0.05 - 92.1378275655 0.9385731091 0.05 - 92.1576315263 0.9396228296 0.05 - 92.1774354871 0.9405055682 0.05 - 92.1972394479 0.941064903 0.05 - 92.2170434087 0.941180391 0.05 - 92.2368473695 0.9407431232 0.05 - 92.2566513303 0.9395857992 0.05 - 92.2764552911 0.9376468416 0.05 - 92.2962592519 0.9348339434 0.05 - 92.3160632126 0.9311246709 0.05 - 92.3358671734 0.9264821245 0.05 - 92.3556711342 0.9210464491 0.05 - 92.375475095 0.914813597 0.05 - 92.3952790558 0.9080187457 0.05 - 92.4150830166 0.9008617477 0.05 - 92.4348869774 0.8935877385 0.05 - 92.4546909382 0.8864081876 0.05 - 92.474494899 0.8796780623 0.05 - 92.4942988598 0.8736368466 0.05 - 92.5141028206 0.8685197202 0.05 - 92.5339067814 0.8647648379 0.05 - 92.5537107421 0.8623296807 0.05 - 92.5735147029 0.8614888219 0.05 - 92.5933186637 0.8622292789 0.05 - 92.6131226245 0.864520062 0.05 - 92.6329265853 0.8683971578 0.05 - 92.6527305461 0.873511922 0.05 - 92.6725345069 0.879763129 0.05 - 92.6923384677 0.8869329214 0.05 - 92.7121424285 0.8946270682 0.05 - 92.7319463893 0.9026296822 0.05 - 92.7517503501 0.9106859737 0.05 - 92.7715543109 0.9185380833 0.05 - 92.7913582717 0.9260244581 0.05 - 92.8111622324 0.9328852304 0.05 - 92.8309661932 0.9390211071 0.05 - 92.850770154 0.9444128451 0.05 - 92.8705741148 0.9490055496 0.05 - 92.8903780756 0.9528062716 0.05 - 92.9101820364 0.9558996132 0.05 - 92.9299859972 0.9583044615 0.05 - 92.949789958 0.9601034281 0.05 - 92.9695939188 0.9613866059 0.05 - 92.9893978796 0.962220026 0.05 - 93.0092018404 0.9627021858 0.05 - 93.0290058012 0.962884868 0.05 - 93.048809762 0.962852296 0.05 - 93.0686137227 0.9626572934 0.05 - 93.0884176835 0.9623862986 0.05 - 93.1082216443 0.9620526626 0.05 - 93.1280256051 0.9617316801 0.05 - 93.1478295659 0.9614553441 0.05 - 93.1676335267 0.9612416594 0.05 - 93.1874374875 0.9611496485 0.05 - 93.2072414483 0.9611895515 0.05 - 93.2270454091 0.9613735162 0.05 - 93.2468493699 0.9617154411 0.05 - 93.2666533307 0.9621940196 0.05 - 93.2864572915 0.9628005889 0.05 - 93.3062612523 0.9635390412 0.05 - 93.326065213 0.9643767834 0.05 - 93.3458691738 0.9653095902 0.05 - 93.3656731346 0.9662837199 0.05 - 93.3854770954 0.9672731312 0.05 - 93.4052810562 0.9682788512 0.05 - 93.425085017 0.9692723874 0.05 - 93.4448889778 0.970210061 0.05 - 93.4646929386 0.9710899689 0.05 - 93.4844968994 0.9718964985 0.05 - 93.5043008602 0.9725955389 0.05 - 93.524104821 0.9731770796 0.05 - 93.5439087818 0.9736307352 0.05 - 93.5637127425 0.9739253481 0.05 - 93.5835167033 0.9740387485 0.05 - 93.6033206641 0.9739291869 0.05 - 93.6231246249 0.9735605111 0.05 - 93.6429285857 0.9728667003 0.05 - 93.6627325465 0.9717663066 0.05 - 93.6825365073 0.9701725413 0.05 - 93.7023404681 0.9679761112 0.05 - 93.7221444289 0.965051822 0.05 - 93.7419483897 0.9612773694 0.05 - 93.7617523505 0.9565149516 0.05 - 93.7815563113 0.9506740461 0.05 - 93.8013602721 0.9436218906 0.05 - 93.8211642328 0.9353753953 0.05 - 93.8409681936 0.9259241833 0.05 - 93.8607721544 0.9153007873 0.05 - 93.8805761152 0.903768068 0.05 - 93.900380076 0.8915658067 0.05 - 93.9201840368 0.8789839426 0.05 - 93.9399879976 0.8664125676 0.05 - 93.9597919584 0.854326741 0.05 - 93.9795959192 0.8430887018 0.05 - 93.99939988 0.8331475073 0.05 - 94.0192038408 0.8249856524 0.05 - 94.0390078016 0.8188075653 0.05 - 94.0588117624 0.8150448287 0.05 - 94.0786157231 0.813702234 0.05 - 94.0984196839 0.8147626539 0.05 - 94.1182236447 0.8183268778 0.05 - 94.1380276055 0.824209719 0.05 - 94.1578315663 0.8319936329 0.05 - 94.1776355271 0.8414448423 0.05 - 94.1974394879 0.852200686 0.05 - 94.2172434487 0.8637084124 0.05 - 94.2370474095 0.8756439958 0.05 - 94.2568513703 0.8876460245 0.05 - 94.2766553311 0.8992071962 0.05 - 94.2964592919 0.9101457276 0.05 - 94.3162632527 0.9201337559 0.05 - 94.3360672134 0.9290106896 0.05 - 94.3558711742 0.9367190607 0.05 - 94.375675135 0.9432517112 0.05 - 94.3954790958 0.9485960268 0.05 - 94.4152830566 0.9528368295 0.05 - 94.4350870174 0.9560655011 0.05 - 94.4548909782 0.9584138411 0.05 - 94.474694939 0.9599744156 0.05 - 94.4944988998 0.9608588901 0.05 - 94.5143028606 0.9611861446 0.05 - 94.5341068214 0.9610626318 0.05 - 94.5539107822 0.9605516414 0.05 - 94.5737147429 0.9597570859 0.05 - 94.5935187037 0.9587990426 0.05 - 94.6133226645 0.95771341 0.05 - 94.6331266253 0.9566157667 0.05 - 94.6529305861 0.9555399441 0.05 - 94.6727345469 0.9545961286 0.05 - 94.6925385077 0.9538093596 0.05 - 94.7123424685 0.9532486641 0.05 - 94.7321464293 0.9529429691 0.05 - 94.7519503901 0.95290989 0.05 - 94.7717543509 0.9531632884 0.05 - 94.7915583117 0.953681158 0.05 - 94.8113622725 0.9544506321 0.05 - 94.8311662332 0.9554288852 0.05 - 94.850970194 0.9565597236 0.05 - 94.8707741548 0.957787316 0.05 - 94.8905781156 0.9590853145 0.05 - 94.9103820764 0.9603859431 0.05 - 94.9301860372 0.9616427606 0.05 - 94.949989998 0.9628130138 0.05 - 94.9697939588 0.9638639743 0.05 - 94.9895979196 0.9647715839 0.05 - 95.0094018804 0.9655121564 0.05 - 95.0292058412 0.9660797323 0.05 - 95.049009802 0.9664800985 0.05 - 95.0688137628 0.966707747 0.05 - 95.0886177235 0.9667743211 0.05 - 95.1084216843 0.9666957866 0.05 - 95.1282256451 0.9664856172 0.05 - 95.1480296059 0.9661414242 0.05 - 95.1678335667 0.9656802343 0.05 - 95.1876375275 0.9651312139 0.05 - 95.2074414883 0.9644982083 0.05 - 95.2272454491 0.9637875252 0.05 - 95.2470494099 0.9630200102 0.05 - 95.2668533707 0.9621953498 0.05 - 95.2866573315 0.9613517952 0.05 - 95.3064612923 0.9604675972 0.05 - 95.3262652531 0.9595691351 0.05 - 95.3460692138 0.9586732368 0.05 - 95.3658731746 0.9577769394 0.05 - 95.3856771354 0.9569015043 0.05 - 95.4054810962 0.9560467221 0.05 - 95.425285057 0.9552451251 0.05 - 95.4450890178 0.9544943184 0.05 - 95.4648929786 0.9538253591 0.05 - 95.4846969394 0.9532310286 0.05 - 95.5045009002 0.9527284477 0.05 - 95.524304861 0.9523233195 0.05 - 95.5441088218 0.9520279112 0.05 - 95.5639127826 0.9518639653 0.05 - 95.5837167433 0.9517970693 0.05 - 95.6035207041 0.9518612726 0.05 - 95.6233246649 0.9520218286 0.05 - 95.6431286257 0.9522577248 0.05 - 95.6629325865 0.9526105548 0.05 - 95.6827365473 0.9530499309 0.05 - 95.7025405081 0.9535252922 0.05 - 95.7223444689 0.9540681744 0.05 - 95.7421484297 0.9546110221 0.05 - 95.7619523905 0.9552005834 0.05 - 95.7817563513 0.9557958767 0.05 - 95.8015603121 0.9563866769 0.05 - 95.8213642729 0.9569556202 0.05 - 95.8411682336 0.9574925284 0.05 - 95.8609721944 0.9579884178 0.05 - 95.8807761552 0.9584523705 0.05 - 95.900580116 0.9588579571 0.05 - 95.9203840768 0.9592347223 0.05 - 95.9401880376 0.9595387621 0.05 - 95.9599919984 0.9597927358 0.05 - 95.9797959592 0.9600096242 0.05 - 95.99959992 0.9601493804 0.05 - 96.0194038808 0.9602663362 0.05 - 96.0392078416 0.9603152514 0.05 - 96.0590118024 0.9603097887 0.05 - 96.0788157632 0.9602796142 0.05 - 96.0986197239 0.9601704423 0.05 - 96.1184236847 0.9600216714 0.05 - 96.1382276455 0.9598295884 0.05 - 96.1580316063 0.9595791853 0.05 - 96.1778355671 0.9592950832 0.05 - 96.1976395279 0.9589446429 0.05 - 96.2174434887 0.9585824154 0.05 - 96.2372474495 0.958174759 0.05 - 96.2570514103 0.9577671816 0.05 - 96.2768553711 0.9573462677 0.05 - 96.2966593319 0.9569086193 0.05 - 96.3164632927 0.956465413 0.05 - 96.3362672535 0.956065959 0.05 - 96.3560712142 0.9556659454 0.05 - 96.375875175 0.9552855213 0.05 - 96.3956791358 0.9549301228 0.05 - 96.4154830966 0.9546060251 0.05 - 96.4352870574 0.9542645101 0.05 - 96.4550910182 0.953936089 0.05 - 96.474894979 0.9535636466 0.05 - 96.4946989398 0.9531050948 0.05 - 96.5145029006 0.9525156799 0.05 - 96.5343068614 0.9517618831 0.05 - 96.5541108222 0.9507684503 0.05 - 96.573914783 0.9494516807 0.05 - 96.5937187437 0.9477713652 0.05 - 96.6135227045 0.945577531 0.05 - 96.6333266653 0.9428665903 0.05 - 96.6531306261 0.9394757445 0.05 - 96.6729345869 0.9353763453 0.05 - 96.6927385477 0.9305214698 0.05 - 96.7125425085 0.9248870691 0.05 - 96.7323464693 0.9184628632 0.05 - 96.7521504301 0.9113132082 0.05 - 96.7719543909 0.9035376611 0.05 - 96.7917583517 0.8952175069 0.05 - 96.8115623125 0.8865693585 0.05 - 96.8313662733 0.8777911214 0.05 - 96.851170234 0.8690265018 0.05 - 96.8709741948 0.8605700043 0.05 - 96.8907781556 0.852748828 0.05 - 96.9105821164 0.8456836741 0.05 - 96.9303860772 0.8396635959 0.05 - 96.950190038 0.8349398151 0.05 - 96.9699939988 0.8316333653 0.05 - 96.9897979596 0.8298389509 0.05 - 97.0096019204 0.8296692322 0.05 - 97.0294058812 0.8310023985 0.05 - 97.049209842 0.8340943583 0.05 - 97.0690138028 0.838506133 0.05 - 97.0888177636 0.8442202929 0.05 - 97.1086217243 0.8510735067 0.05 - 97.1284256851 0.8589156407 0.05 - 97.1482296459 0.8673758522 0.05 - 97.1680336067 0.8762845299 0.05 - 97.1878375675 0.8852893143 0.05 - 97.2076415283 0.8944093069 0.05 - 97.2274454891 0.9032506062 0.05 - 97.2472494499 0.911653257 0.05 - 97.2670534107 0.9194806239 0.05 - 97.2868573715 0.9266776052 0.05 - 97.3066613323 0.9331256335 0.05 - 97.3264652931 0.9387843023 0.05 - 97.3462692539 0.9436989289 0.05 - 97.3660732146 0.947894312 0.05 - 97.3858771754 0.9514010049 0.05 - 97.4056811362 0.954268343 0.05 - 97.425485097 0.9565564557 0.05 - 97.4452890578 0.9583408714 0.05 - 97.4650930186 0.9596730646 0.05 - 97.4848969794 0.9606147003 0.05 - 97.5047009402 0.9612190872 0.05 - 97.524504901 0.9615297101 0.05 - 97.5443088618 0.9615773016 0.05 - 97.5641128226 0.9613643568 0.05 - 97.5839167834 0.9609232362 0.05 - 97.6037207441 0.9602516263 0.05 - 97.6235247049 0.9593442502 0.05 - 97.6433286657 0.9581896151 0.05 - 97.6631326265 0.9567821995 0.05 - 97.6829365873 0.9550915231 0.05 - 97.7027405481 0.9530935608 0.05 - 97.7225445089 0.950770887 0.05 - 97.7423484697 0.9481036233 0.05 - 97.7621524305 0.9450331345 0.05 - 97.7819563913 0.9415884106 0.05 - 97.8017603521 0.9377493792 0.05 - 97.8215643129 0.9335158723 0.05 - 97.8413682737 0.9289374039 0.05 - 97.8611722344 0.9240137035 0.05 - 97.8809761952 0.9188530148 0.05 - 97.900780156 0.9135549933 0.05 - 97.9205841168 0.9081387366 0.05 - 97.9403880776 0.9027508536 0.05 - 97.9601920384 0.897500203 0.05 - 97.9799959992 0.8925275418 0.05 - 97.99979996 0.8878906901 0.05 - 98.0196039208 0.8838020663 0.05 - 98.0394078816 0.8802713558 0.05 - 98.0592118424 0.8773799077 0.05 - 98.0790158032 0.8752645681 0.05 - 98.098819764 0.8738292022 0.05 - 98.1186237247 0.8731952449 0.05 - 98.1384276855 0.873229744 0.05 - 98.1582316463 0.8738867688 0.05 - 98.1780356071 0.875165569 0.05 - 98.1978395679 0.876858659 0.05 - 98.2176435287 0.8789299144 0.05 - 98.2374474895 0.8812407458 0.05 - 98.2572514503 0.883680129 0.05 - 98.2770554111 0.8860485018 0.05 - 98.2968593719 0.8882960379 0.05 - 98.3166633327 0.8903960365 0.05 - 98.3364672935 0.8921271913 0.05 - 98.3562712543 0.8934963369 0.05 - 98.376075215 0.8944227874 0.05 - 98.3958791758 0.8948924296 0.05 - 98.4156831366 0.894771445 0.05 - 98.4354870974 0.8940884691 0.05 - 98.4552910582 0.8928617855 0.05 - 98.475095019 0.8909816208 0.05 - 98.4948989798 0.888462982 0.05 - 98.5147029406 0.8852571582 0.05 - 98.5345069014 0.881363469 0.05 - 98.5543108622 0.8766982122 0.05 - 98.574114823 0.8712076537 0.05 - 98.5939187838 0.8648409769 0.05 - 98.6137227445 0.8574811249 0.05 - 98.6335267053 0.8489910261 0.05 - 98.6533306661 0.8391694342 0.05 - 98.6731346269 0.8279522609 0.05 - 98.6929385877 0.8149040107 0.05 - 98.7127425485 0.7999092197 0.05 - 98.7325465093 0.7827964458 0.05 - 98.7523504701 0.7630023806 0.05 - 98.7721544309 0.7403011477 0.05 - 98.7919583917 0.7142642228 0.05 - 98.8117623525 0.6847187528 0.05 - 98.8315663133 0.6514107689 0.05 - 98.8513702741 0.6141245839 0.05 - 98.8711742348 0.5729581399 0.05 - 98.8909781956 0.5283181916 0.05 - 98.9107821564 0.4805792334 0.05 - 98.9305861172 0.4306836323 0.05 - 98.950390078 0.3799809454 0.05 - 98.9701940388 0.3291809804 0.05 - 98.9899979996 0.280178344 0.05 - 99.0098019604 0.2337857122 0.05 - 99.0296059212 0.1917203378 0.05 - 99.049409882 0.1542432654 0.05 - 99.0692138428 0.1222033992 0.05 - 99.0890178036 0.0955610116 0.05 - 99.1088217644 0.073983849 0.05 - 99.1286257251 0.0569392722 0.05 - 99.1484296859 0.0438237819 0.05 - 99.1682336467 0.0337697795 0.05 - 99.1880376075 0.0263499128 0.05 - 99.2078415683 0.0209488419 0.05 - 99.2276455291 0.0170015613 0.05 - 99.2474494899 0.0142285901 0.05 - 99.2672534507 0.0123302612 0.05 - 99.2870574115 0.0111036409 0.05 - 99.3068613723 0.0104477275 0.05 - 99.3266653331 0.0102541575 0.05 - 99.3464692939 0.0105526196 0.05 - 99.3662732547 0.0113260046 0.05 - 99.3860772154 0.012659836 0.05 - 99.4058811762 0.0146952424 0.05 - 99.425685137 0.0176291042 0.05 - 99.4454890978 0.0217279685 0.05 - 99.4652930586 0.0273771412 0.05 - 99.4850970194 0.0349806511 0.05 - 99.5049009802 0.0450416805 0.05 - 99.524704941 0.0581665277 0.05 - 99.5445089018 0.0750787602 0.05 - 99.5643128626 0.0960626864 0.05 - 99.5841168234 0.1216215644 0.05 - 99.6039207842 0.1520833639 0.05 - 99.6237247449 0.1870020468 0.05 - 99.6435287057 0.2260787413 0.05 - 99.6633326665 0.268343069 0.05 - 99.6831366273 0.3130607045 0.05 - 99.7029405881 0.3588666594 0.05 - 99.7227445489 0.4046617272 0.05 - 99.7425485097 0.449320709 0.05 - 99.7623524705 0.4921193366 0.05 - 99.7821564313 0.5325680299 0.05 - 99.8019603921 0.5698421452 0.05 - 99.8217643529 0.6037656042 0.05 - 99.8415683137 0.6345277781 0.05 - 99.8613722745 0.6621368765 0.05 - 99.8811762352 0.6866153386 0.05 - 99.900980196 0.7085823265 0.05 - 99.9207841568 0.7278092095 0.05 - 99.9405881176 0.7449031763 0.05 - 99.9603920784 0.7599862284 0.05 - 99.9801960392 0.7732466944 0.05 - 100.0 0.7849330752 0.05 diff --git a/Notes/Pleiades.notes b/legacy/Notes/Pleiades.notes similarity index 100% rename from Notes/Pleiades.notes rename to legacy/Notes/Pleiades.notes diff --git a/Notes/SammyInputFile.notes b/legacy/Notes/SammyInputFile.notes similarity index 100% rename from Notes/SammyInputFile.notes rename to legacy/Notes/SammyInputFile.notes diff --git a/Notes/SammyOutputLstFile.notes b/legacy/Notes/SammyOutputLstFile.notes similarity index 100% rename from Notes/SammyOutputLstFile.notes rename to legacy/Notes/SammyOutputLstFile.notes diff --git a/Notes/SammyParameterFile.notes b/legacy/Notes/SammyParameterFile.notes similarity index 100% rename from Notes/SammyParameterFile.notes rename to legacy/Notes/SammyParameterFile.notes diff --git a/docs/Makefile b/legacy/docs/Makefile similarity index 100% rename from docs/Makefile rename to legacy/docs/Makefile diff --git a/docs/conf.py b/legacy/docs/conf.py similarity index 100% rename from docs/conf.py rename to legacy/docs/conf.py diff --git a/docs/examples.rst b/legacy/docs/examples.rst similarity index 100% rename from docs/examples.rst rename to legacy/docs/examples.rst diff --git a/docs/index.rst b/legacy/docs/index.rst similarity index 100% rename from docs/index.rst rename to legacy/docs/index.rst diff --git a/docs/installation.rst b/legacy/docs/installation.rst similarity index 100% rename from docs/installation.rst rename to legacy/docs/installation.rst diff --git a/docs/make.bat b/legacy/docs/make.bat similarity index 100% rename from docs/make.bat rename to legacy/docs/make.bat diff --git a/docs/modules.rst b/legacy/docs/modules.rst similarity index 100% rename from docs/modules.rst rename to legacy/docs/modules.rst diff --git a/docs/overview.rst b/legacy/docs/overview.rst similarity index 100% rename from docs/overview.rst rename to legacy/docs/overview.rst diff --git a/docs/requirements.txt b/legacy/docs/requirements.txt similarity index 100% rename from docs/requirements.txt rename to legacy/docs/requirements.txt diff --git a/docs/usage.rst b/legacy/docs/usage.rst similarity index 100% rename from docs/usage.rst rename to legacy/docs/usage.rst diff --git a/examples/Notebooks/natEu_fit_tutorial.ipynb b/legacy/examples/Notebooks/natEu_fit_tutorial.ipynb similarity index 99% rename from examples/Notebooks/natEu_fit_tutorial.ipynb rename to legacy/examples/Notebooks/natEu_fit_tutorial.ipynb index e35eca7..4a691cc 100644 --- a/examples/Notebooks/natEu_fit_tutorial.ipynb +++ b/legacy/examples/Notebooks/natEu_fit_tutorial.ipynb @@ -30,7 +30,7 @@ "metadata": {}, "outputs": [], "source": [ - "from pleiades import sammyUtils, sammyPlotter" + "from pleiades import sammyPlotter, sammyUtils" ] }, { diff --git a/examples/Notebooks/u_fit_tutorial.ipynb b/legacy/examples/Notebooks/u_fit_tutorial.ipynb similarity index 93% rename from examples/Notebooks/u_fit_tutorial.ipynb rename to legacy/examples/Notebooks/u_fit_tutorial.ipynb index b941c33..d095eee 100644 --- a/examples/Notebooks/u_fit_tutorial.ipynb +++ b/legacy/examples/Notebooks/u_fit_tutorial.ipynb @@ -28,7 +28,7 @@ "metadata": {}, "outputs": [], "source": [ - "from pleiades import sammyUtils, sammyRunner, sammyOutput, sammyPlotter" + "from pleiades import sammyOutput, sammyPlotter, sammyRunner, sammyUtils" ] }, { @@ -72,7 +72,7 @@ "metadata": {}, "outputs": [], "source": [ - "!ls -lah \n", + "!ls -lah\n", "!ls -lah analysis" ] }, @@ -238,9 +238,7 @@ "source": [ "# Plot the results\n", "results_lst = uranium.params[\"directories\"][\"sammy_fit_dir\"] / \"results/SAMMY.LST\"\n", - "sammyPlotter.process_and_plot_lst_file(\n", - " results_lst, residual=True, quantity=\"transmission\"\n", - ")" + "sammyPlotter.process_and_plot_lst_file(results_lst, residual=True, quantity=\"transmission\")" ] }, { @@ -273,14 +271,10 @@ "\n", "# Update the isotope abundances with the new results from the SAMMY fit\n", "for i, isotope in enumerate(uranium.params[\"isotopes\"][\"names\"]):\n", - " uranium.params[\"isotopes\"][\"abundances\"][i] = float(\n", - " uranium_fit._results[\"Iteration Results\"][-1][\"Nuclides\"][i][\"Abundance\"]\n", - " )\n", + " uranium.params[\"isotopes\"][\"abundances\"][i] = float(uranium_fit._results[\"Iteration Results\"][-1][\"Nuclides\"][i][\"Abundance\"])\n", "\n", "# Update the sample thickness with the new results from the SAMMY fit\n", - "uranium.params[\"broadening\"][\"thickness\"] = float(\n", - " uranium_fit._results[\"Iteration Results\"][-1][\"Thickness\"]\n", - ")\n", + "uranium.params[\"broadening\"][\"thickness\"] = float(uranium_fit._results[\"Iteration Results\"][-1][\"Thickness\"])\n", "\n", "# check your work!\n", "print(f\"New Abundance: {uranium.params['isotopes']['abundances']}\")\n", @@ -295,9 +289,7 @@ "outputs": [], "source": [ "# Create new fit directory inside the working directory with the added isotope and its initial abundance\n", - "uranium.params[\"directories\"][\"sammy_fit_dir\"] = (\n", - " uranium.params[\"directories\"][\"working_dir\"] / \"u235-u238-ta181\"\n", - ")\n", + "uranium.params[\"directories\"][\"sammy_fit_dir\"] = uranium.params[\"directories\"][\"working_dir\"] / \"u235-u238-ta181\"\n", "\n", "# check your work!\n", "print(f\"New fit directory: {uranium.params['directories']['sammy_fit_dir']}\")\n", @@ -429,9 +421,7 @@ "outputs": [], "source": [ "# Grab the results from the SAMMY fit and plot the fit\n", - "updated_results_lpt = (\n", - " uranium.params[\"directories\"][\"sammy_fit_dir\"] / \"results/SAMMY.LPT\"\n", - ")\n", + "updated_results_lpt = uranium.params[\"directories\"][\"sammy_fit_dir\"] / \"results/SAMMY.LPT\"\n", "updated_uranium_fit = sammyOutput.lptResults(updated_results_lpt)\n", "\n", "updated_uranium_fit._print_iteration(-1)" @@ -461,12 +451,8 @@ "outputs": [], "source": [ "# Plot the results\n", - "updated_results_lst = (\n", - " uranium.params[\"directories\"][\"sammy_fit_dir\"] / \"results/SAMMY.LST\"\n", - ")\n", - "sammyPlotter.process_and_plot_lst_file(\n", - " updated_results_lst, residual=True, quantity=\"transmission\"\n", - ")" + "updated_results_lst = uranium.params[\"directories\"][\"sammy_fit_dir\"] / \"results/SAMMY.LST\"\n", + "sammyPlotter.process_and_plot_lst_file(updated_results_lst, residual=True, quantity=\"transmission\")" ] }, { diff --git a/examples/scripts/makeCompoundFit.py b/legacy/examples/scripts/makeCompoundFit.py similarity index 73% rename from examples/scripts/makeCompoundFit.py rename to legacy/examples/scripts/makeCompoundFit.py index 93535b0..7078fee 100644 --- a/examples/scripts/makeCompoundFit.py +++ b/legacy/examples/scripts/makeCompoundFit.py @@ -1,4 +1,4 @@ -from pleiades import sammyUtils, sammyRunner, sammyOutput, sammyPlotter +from pleiades import sammyOutput, sammyPlotter, sammyRunner, sammyUtils # Load the configuration file from the ini file in the parent directory uranium = sammyUtils.SammyFitConfig("../configFiles/uranium.ini") @@ -17,9 +17,7 @@ results_lpt = uranium.params["directories"]["sammy_fit_dir"] / "results/SAMMY.LPT" results_lst = uranium.params["directories"]["sammy_fit_dir"] / "results/SAMMY.LST" uranium_fit = sammyOutput.lptResults(results_lpt) -sammyPlotter.process_and_plot_lst_file( - results_lst, residual=True, quantity="transmission" -) +sammyPlotter.process_and_plot_lst_file(results_lst, residual=True, quantity="transmission") # Print out the initial parameters for the isotopes (names and abundances) print(f"Isotopes: {uranium.params['isotopes']['names']}") @@ -28,23 +26,17 @@ # Update the isotope abundances with the new results from the SAMMY fit for i, isotope in enumerate(uranium.params["isotopes"]["names"]): - uranium.params["isotopes"]["abundances"][i] = float( - uranium_fit._results["Iteration Results"][-1]["Nuclides"][i]["Abundance"] - ) + uranium.params["isotopes"]["abundances"][i] = float(uranium_fit._results["Iteration Results"][-1]["Nuclides"][i]["Abundance"]) # Update the sample thickness with the new results from the SAMMY fit -uranium.params["broadening"]["thickness"] = float( - uranium_fit._results["Iteration Results"][-1]["Thickness"] -) +uranium.params["broadening"]["thickness"] = float(uranium_fit._results["Iteration Results"][-1]["Thickness"]) # check your work! print(f"New Abundance: {uranium.params['isotopes']['abundances']}") print(f"New Thickness: {uranium.params['broadening']['thickness']}") # Create new fit directory -uranium.params["directories"]["sammy_fit_dir"] = ( - uranium.params["directories"]["working_dir"] / "u235-u238-ta181" -) +uranium.params["directories"]["sammy_fit_dir"] = uranium.params["directories"]["working_dir"] / "u235-u238-ta181" # check your work! print(f"New fit directory: {uranium.params['directories']['sammy_fit_dir']}") @@ -69,13 +61,7 @@ sammyRunner.run_sammy_fit(sammy_run, verbose_level=1) # Grab the results from the SAMMY fit and plot the fit -updated_results_lpt = ( - uranium.params["directories"]["sammy_fit_dir"] / "results/SAMMY.LPT" -) -updated_results_lst = ( - uranium.params["directories"]["sammy_fit_dir"] / "results/SAMMY.LST" -) +updated_results_lpt = uranium.params["directories"]["sammy_fit_dir"] / "results/SAMMY.LPT" +updated_results_lst = uranium.params["directories"]["sammy_fit_dir"] / "results/SAMMY.LST" updated_uranium_fit = sammyOutput.lptResults(results_lpt) -sammyPlotter.process_and_plot_lst_file( - updated_results_lst, residual=True, quantity="transmission" -) +sammyPlotter.process_and_plot_lst_file(updated_results_lst, residual=True, quantity="transmission") diff --git a/examples/scripts/simTransmission-U.py b/legacy/examples/scripts/simTransmission-U.py similarity index 87% rename from examples/scripts/simTransmission-U.py rename to legacy/examples/scripts/simTransmission-U.py index 0c666c6..240cfe1 100644 --- a/examples/scripts/simTransmission-U.py +++ b/legacy/examples/scripts/simTransmission-U.py @@ -1,8 +1,10 @@ import argparse import sys # For parsing command line arguments -import pleiades.simData as psd # For simulating neutron transmission spectra -import numpy as np # For generating energy grids + import matplotlib.pyplot as plt +import numpy as np # For generating energy grids + +import pleiades.simData as psd # For simulating neutron transmission spectra def main( @@ -66,21 +68,15 @@ def main( if __name__ == "__main__": - parser = argparse.ArgumentParser( - description="Process config file for isotopes and plot transmission." - ) + parser = argparse.ArgumentParser(description="Process config file for isotopes and plot transmission.") parser.add_argument( "--isoConfig", type=str, default="config.ini", help="Path to the isotope config file", ) - parser.add_argument( - "--energy_min", type=float, default=1, help="Minimum energy for the plot [eV]" - ) - parser.add_argument( - "--energy_max", type=float, default=100, help="Maximum energy for the plot [eV]" - ) + parser.add_argument("--energy_min", type=float, default=1, help="Minimum energy for the plot [eV]") + parser.add_argument("--energy_max", type=float, default=100, help="Maximum energy for the plot [eV]") parser.add_argument( "--energy_points", type=int, diff --git a/src/pleiades/nucData.py b/legacy/pleiades_old/nucData.py similarity index 96% rename from src/pleiades/nucData.py rename to legacy/pleiades_old/nucData.py index 47533b8..0e017f7 100644 --- a/src/pleiades/nucData.py +++ b/legacy/pleiades_old/nucData.py @@ -26,9 +26,7 @@ def extract_isotope_info(filename: str, isotope: str) -> tuple: symbol = data[3] # Extract the element symbol numOfNucleons = data[1] # Extract the number of nucleons - if ( - isotope == f"{symbol}-{numOfNucleons}" - ): # Check if the isotope matches + if isotope == f"{symbol}-{numOfNucleons}": # Check if the isotope matches spin = data[5] abundance = data[7] return spin, abundance @@ -138,9 +136,7 @@ def get_mass_from_ame(isotopic_str: str = "U-238", verbose_level: int = 0) -> fl print(f"looking for isotope: {element}-{atomic_number}") # Use Python 3.9's new feature to open the file from data files - nucelar_masses_file = pkg_resources.files("pleiades").joinpath( - "../../nucDataLibs/isotopeInfo/mass.mas20" - ) + nucelar_masses_file = pkg_resources.files("pleiades").joinpath("../../nucDataLibs/isotopeInfo/mass.mas20") with open(nucelar_masses_file, "r") as f: # Skip the first 36 lines of header info for _ in range(36): @@ -182,9 +178,7 @@ def get_mat_number(isotopic_str: str = "U-238") -> int: element, atomic_number = get_info(isotopic_str) # open the file containing the endf summary table - nucelar_masses_file = pkg_resources.files("pleiades").joinpath( - "../../nucDataLibs/isotopeInfo/neutrons.list" - ) + nucelar_masses_file = pkg_resources.files("pleiades").joinpath("../../nucDataLibs/isotopeInfo/neutrons.list") with open(nucelar_masses_file, "r") as fid: pattern = r"\b\s*(\d+)\s*-\s*([A-Za-z]+)\s*-\s*(\d+)([A-Za-z]*)\b" # match the isotope name for line in fid: diff --git a/src/pleiades/post_install.py b/legacy/pleiades_old/post_install.py similarity index 86% rename from src/pleiades/post_install.py rename to legacy/pleiades_old/post_install.py index cd201cc..bc0363e 100644 --- a/src/pleiades/post_install.py +++ b/legacy/pleiades_old/post_install.py @@ -24,15 +24,10 @@ def check_sammy_installed(): stderr=subprocess.PIPE, stdin=subprocess.PIPE, ) - stdout, stderr = process.communicate( - input=b"q\n" - ) # Send 'q' (quit) followed by newline + stdout, stderr = process.communicate(input=b"q\n") # Send 'q' (quit) followed by newline # Check for keywords in output indicating successful execution - if ( - b"SAMMY Version" in stdout - or b"What is the name of the INPut file" in stdout - ): + if b"SAMMY Version" in stdout or b"What is the name of the INPut file" in stdout: print("SAMMY is installed and available in the PATH.") else: print("SAMMY could not be launched or might not be installed correctly.") diff --git a/src/pleiades/sammyInput.py b/legacy/pleiades_old/sammyInput.py similarity index 91% rename from src/pleiades/sammyInput.py rename to legacy/pleiades_old/sammyInput.py index 830fc84..27a0353 100644 --- a/src/pleiades/sammyInput.py +++ b/legacy/pleiades_old/sammyInput.py @@ -1,11 +1,12 @@ import configparser -from pleiades import nucData as pnd -from contextlib import suppress import datetime +from contextlib import suppress + +from pleiades import nucData +from pleiades import nucData as pnd # SammyFitConfig imports from PLEIADES from pleiades.sammyStructures import SammyFitConfig -from pleiades import nucData print_header_check = "\033[1;34m\033[0m " print_header_good = "\033[1;32m\033[0m " @@ -15,9 +16,7 @@ class InputFile: """InputFile class for the Sammy input file.""" - def __init__( - self, config_file: str = None, auto_update: bool = True, verbose_level: int = 0 - ) -> None: + def __init__(self, config_file: str = None, auto_update: bool = True, verbose_level: int = 0) -> None: """Reads an .ini config file to create a structured SAMMY inp file If a string is not given for the config_file, the default values will be used and a default SAMMY input file will be created. @@ -35,19 +34,14 @@ def __init__( # If config file is given, read the file and update the default parameters if config_file is not None: if verbose_level > 0: - print( - f"{print_header_check} Reading SAMMY input config file: {config_file}" - ) + print(f"{print_header_check} Reading SAMMY input config file: {config_file}") # read the config file using configparser self._config = configparser.ConfigParser() self._config.read(config_file) # turn the configparser object into a dict of dicts data-structure - self._config_data = { - section: dict(self._config[section]) - for section in self._config.sections() - } + self._config_data = {section: dict(self._config[section]) for section in self._config.sections()} # TODO: right now Card10 is not required # since we are specifying spin group data in the par file @@ -60,9 +54,7 @@ def __init__( else: if verbose_level > 0: - print( - f"{print_header_check} No input config file given. Using default parameters for input deck." - ) + print(f"{print_header_check} No input config file given. Using default parameters for input deck.") # update auto values self._update_and_calculate_values(auto_update=auto_update) @@ -73,9 +65,7 @@ def __init__( return - def update_with_config( - self, config: SammyFitConfig, isotope: str = "", for_endf: bool = False - ) -> "InputFile": + def update_with_config(self, config: SammyFitConfig, isotope: str = "", for_endf: bool = False) -> "InputFile": """ Update the SAMMY input data with isotope-specific information and configuration. @@ -96,18 +86,14 @@ def update_with_config( # Set isotope and atomic weight (use auto to calculate if necessary) self.data["Card2"]["elmnt"] = isotope - self.data["Card2"]["aw"] = ( - "auto" # This will trigger auto calculation of atomic weight - ) + self.data["Card2"]["aw"] = "auto" # This will trigger auto calculation of atomic weight self.data["Card2"]["emin"] = config.params["fit_energy_min"] self.data["Card2"]["emax"] = config.params["fit_energy_max"] # Set commands for Card3 if for_endf: # Resetting the commands for running SAMMY to generate output par files based on ENDF. - self.data["Card3"]["commands"] = ( - "TWENTY,DO NOT SOLVE BAYES EQUATIONS,INPUT IS ENDF/B FILE" - ) + self.data["Card3"]["commands"] = "TWENTY,DO NOT SOLVE BAYES EQUATIONS,INPUT IS ENDF/B FILE" else: self.data["Card3"]["commands"] = ( "CHI_SQUARED,TWENTY,SOLVE_BAYES,QUANTUM_NUMBERS,REICH-MOORE FORMALISm is wanted,GENERATE ODF FILE AUTOMATICALLY,USE I4 FORMAT TO READ SPIN GROUP NUMBER" @@ -156,22 +142,14 @@ def process(self, auto_update: bool = True) -> "InputFile": if par_width: # Format parameter based on its type and width if par_type == str: # noqa: E721 - line += self.format_type_A( - self.data[card][parameter], par_width - ) + line += self.format_type_A(self.data[card][parameter], par_width) elif par_type == int: # noqa: E721 - line += self.format_type_I( - int(self.data[card][parameter]), par_width - ) + line += self.format_type_I(int(self.data[card][parameter]), par_width) elif par_type == float: # noqa: E721 - line += self.format_type_F( - float(self.data[card][parameter]), par_width - ) + line += self.format_type_F(float(self.data[card][parameter]), par_width) else: # Raise an error for unsupported parameter types - raise ValueError( - f"{print_header_bad} Parameter can only have float, int, or str types" - ) + raise ValueError(f"{print_header_bad} Parameter can only have float, int, or str types") else: # Handle free format cards like Card3 if card == "Card3": @@ -418,9 +396,7 @@ def _update_and_calculate_values(self, auto_update: bool = True) -> None: if auto_update and command.startswith("INPUT IS ENDF"): commands[i] = f"INPUT IS ENDF/B FILE MAT={mat_number}" if command.startswith("FILE="): - self._resolution_commands = ( - f"USER-DEFINED RESOLUTION FUNCTION\n{command}\n" - ) + self._resolution_commands = f"USER-DEFINED RESOLUTION FUNCTION\n{command}\n" commands.pop(i) self.data["Card3"]["commands"] = ",".join(commands) diff --git a/src/pleiades/sammyOutput.py b/legacy/pleiades_old/sammyOutput.py similarity index 97% rename from src/pleiades/sammyOutput.py rename to legacy/pleiades_old/sammyOutput.py index 626f0c0..a3ead4d 100644 --- a/src/pleiades/sammyOutput.py +++ b/legacy/pleiades_old/sammyOutput.py @@ -88,17 +88,13 @@ def preprocess_lpt_file(self): for i, line in enumerate(lines): # Extract general information if line.startswith(" Emin and Emax ="): - self._results["General"]["Emin"], self._results["General"]["Emax"] = ( - self._parse_emin_emax(line) - ) + self._results["General"]["Emin"], self._results["General"]["Emax"] = self._parse_emin_emax(line) elif line.startswith(" TARGET ELEMENT IS"): self._results["General"]["Target Element"] = line.split("IS")[1].strip() elif line.startswith(" ATOMIC WEIGHT IS"): self._results["General"]["Atomic Weight"] = line.split("IS")[1].strip() elif line.startswith(" Number of nuclides is "): - self._results["General"]["Number of nuclides"] = int( - line.split("is")[1].strip() - ) + self._results["General"]["Number of nuclides"] = int(line.split("is")[1].strip()) # Identify the start of each iteration block elif any(flag in line for flag in iteration_start_flags): @@ -110,9 +106,7 @@ def preprocess_lpt_file(self): end_line = iteration_start_lines[i + 1] - 1 else: end_line = len(lines) - 1 - self._results["General"]["Iteration Block Lines"].append( - [start_line, end_line] - ) + self._results["General"]["Iteration Block Lines"].append([start_line, end_line]) def grab_results_of_fits(self): """grabs the results of each iteration block and stores them in the results structure @@ -153,9 +147,7 @@ def _parse_iteration_block(self, block_lines): # If the line contains TEMPERATURE and THICKNESS, then their information is to follow (next line) if "TEMPERATURE" in line and "THICKNESS" in line: # Extract temperature and thickness from the line - match = re.search( - r"(\d+\.\d+E[+-]?\d+)\s+(\d+\.\d+E[+-]?\d+)", block_lines[i + 1] - ) + match = re.search(r"(\d+\.\d+E[+-]?\d+)\s+(\d+\.\d+E[+-]?\d+)", block_lines[i + 1]) if match: iteration_result["Temperature"] = float(match.group(1)) iteration_result["Thickness"] = float(match.group(2)) @@ -191,12 +183,7 @@ def _parse_iteration_block(self, block_lines): iteration_result["RedChi2"] = float(match.group(1)) # If the line contains Nuclide, Abundance, Mass, and Spin groups, then information on the nuclides is to follow - elif ( - " Nuclide" in line - and "Abundance" in line - and "Mass" in line - and "Spin groups" in line - ): + elif " Nuclide" in line and "Abundance" in line and "Mass" in line and "Spin groups" in line: # Extract nuclide information for j in range(self._results["General"]["Number of nuclides"]): iteration_result["Nuclides"].append( @@ -255,9 +242,7 @@ def _print(self, iteration_index: int = None): if 0 <= iteration_index < len(self._results["Iteration Results"]): self._print_iteration(iteration_index) else: - print( - f"Error: Invalid iteration index {iteration_index}. Valid range: 0 to {len(self._results['Iteration Results']) - 1}" - ) + print(f"Error: Invalid iteration index {iteration_index}. Valid range: 0 to {len(self._results['Iteration Results']) - 1}") else: # Print all iterations for idx in range(len(self._results["Iteration Results"])): @@ -481,7 +466,7 @@ def param_table(self, only_vary:bool = True, params = {} for line in parameter_lines: - for match in re.compile(r'([0-9.]+(?:[eE][+-]?\d+)?)\s*\(\s*(\d+)\)').finditer(line): + for match in re.compile(r'([0-9.]+(?:[eE][+-]?\\d+)?)\\s*\\(\\s*(\\d+)\\)').finditer(line): if match: params[int(match.group(2))] = float(match.group(1)) diff --git a/src/pleiades/sammyParFile.py b/legacy/pleiades_old/sammyParFile.py similarity index 87% rename from src/pleiades/sammyParFile.py rename to legacy/pleiades_old/sammyParFile.py index 2394f21..ad3b466 100644 --- a/src/pleiades/sammyParFile.py +++ b/legacy/pleiades_old/sammyParFile.py @@ -16,10 +16,10 @@ # - Import the this class with 'from pleiades import sammyParFile' # General imports -import re -import pathlib import configparser import json +import pathlib +import re class ParFile: @@ -275,18 +275,12 @@ def read(self) -> "ParFile": if line.startswith("Name"): if particle_pair: particle_pair = " ".join(particle_pair) - particle_pairs.append( - particle_pair - ) # stack particle pairs in list + particle_pairs.append(particle_pair) # stack particle pairs in list particle_pair = [] particle_pair.append(line) line = next(fid) - particle_pair = " ".join(particle_pair)[ - :-1 - ] # remove the last '\n' character - particle_pairs.append( - particle_pair - ) # stack the final particle pairs in list + particle_pair = " ".join(particle_pair)[:-1] # remove the last '\n' character + particle_pairs.append(particle_pair) # stack the final particle pairs in list # read spin group and channel cards if line.upper().startswith("SPIN GROUP INFO"): @@ -373,9 +367,7 @@ def write(self, filename: str = "params.par") -> None: os.makedirs(self.filename.parent, exist_ok=True) if not self.data: - raise RuntimeError( - "self.data is empty, please run the self.read() method first" - ) + raise RuntimeError("self.data is empty, please run the self.read() method first") lines = [] @@ -393,9 +385,7 @@ def write(self, filename: str = "params.par") -> None: # first line is the spin group info lines.append(self._write_spin_group(card[0])) # number of channels for this group - n_channels = int(card[0]["n_entrance_channel"]) + int( - card[0]["n_exit_channel"] - ) + n_channels = int(card[0]["n_entrance_channel"]) + int(card[0]["n_exit_channel"]) for channel in range(1, n_channels + 1): lines.append(self._write_spin_channel(card[channel])) lines.append(" ") @@ -446,29 +436,11 @@ def write(self, filename: str = "params.par") -> None: if any(self.data["misc"].values()): lines.append("MISCELLANEOUS PARAMETERS FOLLOW".ljust(80)) card = self.data["misc"] - if any( - [ - value - for key, value in self.data["misc"].items() - if key in self._MISC_DELTA_FORMAT - ] - ): + if any([value for key, value in self.data["misc"].items() if key in self._MISC_DELTA_FORMAT]): lines.append(self._write_misc_delta(card)) - if any( - [ - value - for key, value in self.data["misc"].items() - if key in self._MISC_TZERO_FORMAT - ] - ): + if any([value for key, value in self.data["misc"].items() if key in self._MISC_TZERO_FORMAT]): lines.append(self._write_misc_tzero(card)) - if any( - [ - value - for key, value in self.data["misc"].items() - if key in self._MISC_DELTE_FORMAT - ] - ): + if any([value for key, value in self.data["misc"].items() if key in self._MISC_DELTE_FORMAT]): lines.append(self._write_misc_deltE(card)) lines.append(" " * 80) lines.append("") @@ -557,9 +529,7 @@ def __add__(self, isotope: "ParFile") -> "ParFile": compound.data["isotopic_masses"].update(isotope.data["isotopic_masses"]) # update info - isotopes = ( - compound.data["info"]["isotopes"] + isotope.data["info"]["isotopes"] - ) + isotopes = compound.data["info"]["isotopes"] + isotope.data["info"]["isotopes"] compound.data["info"].update(isotope.data["info"]) compound.data["info"]["isotopes"] = isotopes @@ -582,9 +552,7 @@ def _parse_spin_group_cards(self) -> None: Returns: (list of dicts): list containing groups, each group is a dictionary containing key-value dicts for spin_groups and channels """ sg_dict = [] - lines = ( - line for line in self._spin_group_cards - ) # convert to a generator object + lines = (line for line in self._spin_group_cards) # convert to a generator object for line in lines: # read each line @@ -594,9 +562,7 @@ def _parse_spin_group_cards(self) -> None: spin_group = [spin_group_dict] # number of channels for this group - n_channels = int(spin_group_dict["n_entrance_channel"]) + int( - spin_group_dict["n_exit_channel"] - ) + n_channels = int(spin_group_dict["n_entrance_channel"]) + int(spin_group_dict["n_exit_channel"]) # loop over channels for n in range(n_channels): @@ -613,9 +579,7 @@ def _parse_spin_group_cards(self) -> None: def _parse_channel_radii_cards(self) -> None: """parse a list of channel-radii and channel-groups cards and sort the key-word pairs""" cr_data = [] - cards = ( - card for card in self._channel_radii_cards - ) # convert to a generator object + cards = (card for card in self._channel_radii_cards) # convert to a generator object # parse channel radii and groups using regex cr_pattern = r"Radii=\s*([\d.]+),\s*([\d.]+)\s*Flags=\s*([\d]+),\s*([\d]+)" @@ -634,9 +598,7 @@ def _parse_channel_radii_cards(self) -> None: card = next(cards) while match := re.search(cg_pattern, card): group = int(match.group(1)) # Extract Group as an integer - channels = [ - int(ch) for ch in match.group(2).split(",") - ] # Extract Channels as a list of integers + channels = [int(ch) for ch in match.group(2).split(",")] # Extract Channels as a list of integers cg_data.append([group] + channels) @@ -662,19 +624,14 @@ def _parse_resonance_params_cards(self) -> None: def _parse_isotopic_masses_cards(self) -> None: """parse a list of isotopic_masses cards, sort the key-word values""" im_dicts = {} - for isotope, card in zip( - self.data["particle_pairs"], self._isotopic_masses_cards - ): + for isotope, card in zip(self.data["particle_pairs"], self._isotopic_masses_cards): im_dicts.update(**{isotope["name"]: self._read_isotopic_masses(card)}) self.data.update({"isotopic_masses": im_dicts}) def _read_particle_pairs(self, particle_pairs_line: str) -> dict: # parse key-word pairs from a particle_pairs line - particle_pairs_dict = { - key: particle_pairs_line[value] - for key, value in self._PARTICLE_PAIRS_FORMAT.items() - } + particle_pairs_dict = {key: particle_pairs_line[value] for key, value in self._PARTICLE_PAIRS_FORMAT.items()} return particle_pairs_dict def _write_particle_pairs(self, particle_pairs_dict: dict) -> str: @@ -686,17 +643,12 @@ def _write_particle_pairs(self, particle_pairs_dict: dict) -> str: for key, slice_value in self._PARTICLE_PAIRS_FORMAT.items(): word_length = slice_value.stop - slice_value.start # assign the fixed-format position with the corresponding key-word value - new_text[slice_value] = list( - str(particle_pairs_dict[key]).ljust(word_length) - ) + new_text[slice_value] = list(str(particle_pairs_dict[key]).ljust(word_length)) return "".join(new_text).replace("\n ", "\n") def _read_spin_group(self, spin_group_line: str) -> dict: # parse key-word pairs from a spin_group line - spin_group_dict = { - key: spin_group_line[value] - for key, value in self._SPIN_GROUP_FORMAT.items() - } + spin_group_dict = {key: spin_group_line[value] for key, value in self._SPIN_GROUP_FORMAT.items()} return spin_group_dict def _write_spin_group(self, spin_group_dict: dict) -> str: @@ -710,10 +662,7 @@ def _write_spin_group(self, spin_group_dict: dict) -> str: def _read_spin_channel(self, spin_channel_line: str) -> dict: # parse key-word pairs from a spin-channel line - spin_channel_dict = { - key: spin_channel_line[value] - for key, value in self._SPIN_CHANNEL_FORMAT.items() - } + spin_channel_dict = {key: spin_channel_line[value] for key, value in self._SPIN_CHANNEL_FORMAT.items()} return spin_channel_dict def _write_spin_channel(self, spin_channel_dict: dict) -> str: @@ -740,10 +689,7 @@ def _write_channel_radii(self, channel_radii_dict: dict) -> str: def _read_resonance_params(self, resonance_params_line: str) -> dict: # parse key-word pairs from a resonance_params line - resonance_params_dict = { - key: resonance_params_line[value] - for key, value in self._RESONANCE_PARAMS_FORMAT.items() - } + resonance_params_dict = {key: resonance_params_line[value] for key, value in self._RESONANCE_PARAMS_FORMAT.items()} return resonance_params_dict def _write_resonance_params(self, resonance_params_dict: dict) -> str: @@ -752,17 +698,12 @@ def _write_resonance_params(self, resonance_params_dict: dict) -> str: for key, slice_value in self._RESONANCE_PARAMS_FORMAT.items(): word_length = slice_value.stop - slice_value.start # assign the fixed-format position with the corresponding key-word value - new_text[slice_value] = list( - str(resonance_params_dict[key]).ljust(word_length) - ) + new_text[slice_value] = list(str(resonance_params_dict[key]).ljust(word_length)) return "".join(new_text) def _read_isotopic_masses(self, isotopic_masses_line: str) -> None: # parse key-word pairs from a isotopic-masses line - isotopic_masses_dict = { - key: isotopic_masses_line[value] - for key, value in self._ISOTOPIC_MASSES_FORMAT.items() - } + isotopic_masses_dict = {key: isotopic_masses_line[value] for key, value in self._ISOTOPIC_MASSES_FORMAT.items()} return isotopic_masses_dict def _write_isotopic_masses(self, isotopic_masses_dict: dict) -> str: @@ -771,9 +712,7 @@ def _write_isotopic_masses(self, isotopic_masses_dict: dict) -> str: for key, slice_value in self._ISOTOPIC_MASSES_FORMAT.items(): word_length = slice_value.stop - slice_value.start # assign the fixed-format position with the corresponding key-word value - new_text[slice_value] = list( - str(isotopic_masses_dict[key]).ljust(word_length) - ) + new_text[slice_value] = list(str(isotopic_masses_dict[key]).ljust(word_length)) return "".join(new_text) def _write_normalization(self, normalization_dict: dict) -> str: @@ -782,9 +721,7 @@ def _write_normalization(self, normalization_dict: dict) -> str: for key, slice_value in self._NORMALIZATION_FORMAT.items(): word_length = slice_value.stop - slice_value.start # assign the fixed-format position with the corresponding key-word value - new_text[slice_value] = list( - str(normalization_dict[key]).ljust(word_length) - ) + new_text[slice_value] = list(str(normalization_dict[key]).ljust(word_length)) return "".join(new_text) def _write_broadening(self, broadening_dict: dict) -> str: @@ -828,9 +765,7 @@ def _write_misc_deltE(self, misc_deltE_dict: dict) -> str: def _write_resolution(self, resolution_dict: dict) -> str: # write a formatted resolution line from dict with the key-word resolution values - new_text = ( - [" "] * 80 + ["\n"] - ) * 10 # 80 characters long list of spaces to be filled + new_text = ([" "] * 80 + ["\n"]) * 10 # 80 characters long list of spaces to be filled resolution_dict["burst_keyword"] = "BURST" resolution_dict["tau_keyword"] = resolution_dict["tau_keyword2"] = "TAU " resolution_dict["lambd_keyword"] = resolution_dict["lambd_keyword2"] = "LAMBD" @@ -840,9 +775,7 @@ def _write_resolution(self, resolution_dict: dict) -> str: for key, slice_value in self._RESOLUTION_FORMAT.items(): word_length = slice_value.stop - slice_value.start # assign the fixed-format position with the corresponding key-word value - new_text[slice_value] = list( - str(resolution_dict[key]).ljust(word_length)[:word_length] - ) + new_text[slice_value] = list(str(resolution_dict[key]).ljust(word_length)[:word_length]) return "".join(new_text) @@ -870,19 +803,12 @@ def bump_group_number(self, increment: int = 0) -> None: # bump isotopic masses if self.parent.data["isotopic_masses"]: for key, isotope in self.parent.data["isotopic_masses"].items(): - spin_groups = [ - f"{group[0]['group_number'].strip():>5}" - for group in self.parent.data["spin_group"] - ] + spin_groups = [f"{group[0]['group_number'].strip():>5}" for group in self.parent.data["spin_group"]] sg_formatted = "".join(spin_groups[:8]).ljust(43) - L = ( - (len(spin_groups) - 8) // 15 if len(spin_groups) > 8 else -1 - ) # number of extra lines needed + L = (len(spin_groups) - 8) // 15 if len(spin_groups) > 8 else -1 # number of extra lines needed for l in range(0, L + 1): # noqa: E741 - sg_formatted += "-1\n" + "".join( - spin_groups[8 + 15 * l : 8 + 15 * (l + 1)] - ).ljust(78) + sg_formatted += "-1\n" + "".join(spin_groups[8 + 15 * l : 8 + 15 * (l + 1)]).ljust(78) isotope["spin_groups"] = sg_formatted def bump_igroup_number(self, increment: int = 0) -> None: @@ -907,28 +833,17 @@ def isotopic_masses_abundance(self) -> None: """Update the isotopic masses data""" if self.parent.data["isotopic_masses"]: for card in self.parent.data["isotopic_masses"]: - self.parent.data["isotopic_masses"][card]["abundance"] = ( - f"{f'{self.parent.weight:.7f}':>9}"[:9] - ) + self.parent.data["isotopic_masses"][card]["abundance"] = f"{f'{self.parent.weight:.7f}':>9}"[:9] else: - spin_groups = [ - f"{group[0]['group_number'].strip():>5}" - for group in self.parent.data["spin_group"] - ] + spin_groups = [f"{group[0]['group_number'].strip():>5}" for group in self.parent.data["spin_group"]] sg_formatted = "".join(spin_groups[:8]).ljust(43) - L = ( - (len(spin_groups) - 8) // 15 if len(spin_groups) > 8 else -1 - ) # number of extra lines needed + L = (len(spin_groups) - 8) // 15 if len(spin_groups) > 8 else -1 # number of extra lines needed for l in range(0, L + 1): # noqa: E741 - sg_formatted += "-1\n" + "".join( - spin_groups[8 + 15 * l : 8 + 15 * (l + 1)] - ).ljust(78) + sg_formatted += "-1\n" + "".join(spin_groups[8 + 15 * l : 8 + 15 * (l + 1)]).ljust(78) iso_dict = { - "atomic_mass": f'{float(self.parent.data["particle_pairs"][0]["mass_b"]):>9}'[ - :9 - ], + "atomic_mass": f'{float(self.parent.data["particle_pairs"][0]["mass_b"]):>9}'[:9], "abundance": f"{f'{self.parent.weight:.7f}':>9}"[:9], "abundance_uncertainty": f"{'':>9}", "vary_abundance": "1".ljust(5), @@ -939,25 +854,15 @@ def isotopic_masses_abundance(self) -> None: def define_as_element(self, name: str, weight: float = 1.0) -> None: from numpy import average - spin_groups = [ - f"{group[0]['group_number'].strip():>5}" - for group in self.parent.data["spin_group"] - ] + spin_groups = [f"{group[0]['group_number'].strip():>5}" for group in self.parent.data["spin_group"]] sg_formatted = "".join(spin_groups[:8]).ljust(43) - L = ( - (len(spin_groups) - 8) // 15 if len(spin_groups) > 8 else -1 - ) # number of extra lines needed + L = (len(spin_groups) - 8) // 15 if len(spin_groups) > 8 else -1 # number of extra lines needed for l in range(0, L + 1): # noqa: E741 - sg_formatted += "-1\n" + "".join( - spin_groups[8 + 15 * l : 8 + 15 * (l + 1)] - ).ljust(78) + sg_formatted += "-1\n" + "".join(spin_groups[8 + 15 * l : 8 + 15 * (l + 1)]).ljust(78) aw = [float(i["mass_b"]) for i in self.parent.data["particle_pairs"]] - weights = [ - float(self.parent.data["isotopic_masses"][i]["abundance"]) - for i in self.parent.data["isotopic_masses"] - ] + weights = [float(self.parent.data["isotopic_masses"][i]["abundance"]) for i in self.parent.data["isotopic_masses"]] aw = average(aw, weights=weights) iso_dict = { @@ -977,9 +882,7 @@ def toggle_vary_abundances(self, vary: bool = False) -> None: vary (bool, optional): True will flag all abundances to vary """ for isotope in self.parent.data["isotopic_masses"]: - self.parent.data["isotopic_masses"][isotope]["vary_abundance"] = ( - f"{vary:<5}" - ) + self.parent.data["isotopic_masses"][isotope]["vary_abundance"] = f"{vary:<5}" self.parent.data["info"][f"vary_{isotope}"] = f"{vary:<5}" def limit_energies_of_parfile(self) -> None: @@ -989,9 +892,7 @@ def limit_energies_of_parfile(self) -> None: for num, res in enumerate(self.parent.data["resonance_params"]): # cast all numbers such as "3.6700-5" to floats energy = ( - "e-".join(res["reosnance_energy"].split("-")) - .lstrip("e") - .replace("+", "e+") + "e-".join(res["reosnance_energy"].split("-")).lstrip("e").replace("+", "e+") if "e" not in res["reosnance_energy"] else res["reosnance_energy"] ) @@ -1042,9 +943,7 @@ def limit_energies_of_parfile(self) -> None: # reindex spin groups for group in self.parent.data["spin_group"]: - group[0]["group_number"] = ( - f"{index_map[group[0]['group_number'].strip()]:>3}" - ) + group[0]["group_number"] = f"{index_map[group[0]['group_number'].strip()]:>3}" return @@ -1090,20 +989,12 @@ def vary_resonances_in_energy_range( for card in self.parent.data["resonance_params"]: if emin <= float(card["reosnance_energy"]) <= emax: card["vary_energy"] = f"{1:>2}" if vary_energies else f"{0:>2}" - card["vary_capture_width"] = ( - f"{1:>2}" if vary_gamma_widths else f"{0:>2}" - ) - card["vary_neutron_width"] = ( - f"{1:>2}" if vary_neutron_widths else f"{0:>2}" - ) + card["vary_capture_width"] = f"{1:>2}" if vary_gamma_widths else f"{0:>2}" + card["vary_neutron_width"] = f"{1:>2}" if vary_neutron_widths else f"{0:>2}" if card["fission1_width"].strip(): - card["vary_fission1_width"] = ( - f"{1:>2}" if vary_fission_widths else f"{0:>2}" - ) + card["vary_fission1_width"] = f"{1:>2}" if vary_fission_widths else f"{0:>2}" if card["fission2_width"].strip(): - card["vary_fission2_width"] = ( - f"{1:>2}" if vary_fission_widths else f"{0:>2}" - ) + card["vary_fission2_width"] = f"{1:>2}" if vary_fission_widths else f"{0:>2}" def normalization(self, **kwargs) -> None: """change or vary normalization parameters and vary flags @@ -1138,13 +1029,7 @@ def normalization(self, **kwargs) -> None: "vary_exp_decay_bg": 0, } - self.parent.data["normalization"].update( - { - key: value - for key, value in kwargs.items() - if key in self.parent.data["normalization"] - } - ) + self.parent.data["normalization"].update({key: value for key, value in kwargs.items() if key in self.parent.data["normalization"]}) def broadening(self, **kwargs) -> None: """change or vary broadening parameters and vary flags @@ -1178,13 +1063,7 @@ def broadening(self, **kwargs) -> None: "vary_deltae_us": 0, } - self.parent.data["broadening"].update( - { - key: value - for key, value in kwargs.items() - if key in self.parent.data["broadening"] - } - ) + self.parent.data["broadening"].update({key: value for key, value in kwargs.items() if key in self.parent.data["broadening"]}) def misc(self, **kwargs) -> None: """change or vary misc parameters and vary flags @@ -1226,13 +1105,7 @@ def misc(self, **kwargs) -> None: "DlnE": "", } - self.parent.data["misc"].update( - { - key: value - for key, value in kwargs.items() - if key in self.parent.data["misc"] - } - ) + self.parent.data["misc"].update({key: value for key, value in kwargs.items() if key in self.parent.data["misc"]}) def resolution(self, **kwargs) -> None: """change or vary resolution parameters and vary flags @@ -1365,13 +1238,7 @@ def resolution(self, **kwargs) -> None: "chann": "", } - self.parent.data["resolution"].update( - { - key: value - for key, value in kwargs.items() - if key in self.parent.data["resolution"] - } - ) + self.parent.data["resolution"].update({key: value for key, value in kwargs.items() if key in self.parent.data["resolution"]}) def vary_all(self, vary=True, data_key="misc_delta"): """toggle all vary parameters in a data keyword to either vary/fixed @@ -1387,9 +1254,7 @@ def vary_all(self, vary=True, data_key="misc_delta"): """ keyword = data_key.split("_")[0] data_dict = getattr(self.parent, f"_{data_key.upper()}_FORMAT") - self.parent.data[keyword].update( - {key: int(vary) for key in data_dict if key.startswith("vary_")} - ) + self.parent.data[keyword].update({key: int(vary) for key in data_dict if key.startswith("vary_")}) def save_params_to_config(self) -> None: # write the self.data dictionary to a config.ini file diff --git a/src/pleiades/sammyPlotter.py b/legacy/pleiades_old/sammyPlotter.py similarity index 91% rename from src/pleiades/sammyPlotter.py rename to legacy/pleiades_old/sammyPlotter.py index a9cd4e1..3d6c39c 100644 --- a/src/pleiades/sammyPlotter.py +++ b/legacy/pleiades_old/sammyPlotter.py @@ -1,6 +1,6 @@ +import matplotlib.pyplot as plt import numpy as np import pandas as pd -import matplotlib.pyplot as plt def process_and_plot_lst_file(filename, residual=False, quantity="cross-section"): @@ -93,12 +93,8 @@ def plot_cross_section(data, residual=False): ax[0].set_ylabel("Cross Section (barns)") ax[0].legend() - plt.plot( - energy, diff_initial, label="Difference Initial", marker="o", linestyle="-" - ) - plt.plot( - energy, diff_final, label="Difference Final", marker="o", linestyle="-" - ) + plt.plot(energy, diff_initial, label="Difference Initial", marker="o", linestyle="-") + plt.plot(energy, diff_final, label="Difference Final", marker="o", linestyle="-") plt.ylabel("Difference (barns)") else: @@ -188,13 +184,8 @@ def plot_transmission(data, residual=False): ax[1].set_xticks([]) ax[1].set_yticks([], []) - data["residual_initial"] = ( - data["Zeroth-order theoretical transmission"] - - data["Experimental transmission"] - ) - data["residual_final"] = ( - data["Final theoretical transmission"] - data["Experimental transmission"] - ) + data["residual_initial"] = data["Zeroth-order theoretical transmission"] - data["Experimental transmission"] + data["residual_final"] = data["Final theoretical transmission"] - data["Experimental transmission"] # data.plot.scatter(x="Energy",y="residual_initial",yerr="Absolute uncertainty in experimental transmission",lw=0,ylim=(-10,10),color=initial_color,ax=ax[2],alpha=0.5,legend=False) data.plot.scatter( @@ -246,16 +237,12 @@ def plot_transmission(data, residual=False): def read_data(filename): # Load the data - data = np.loadtxt( - filename, delimiter=" ", skiprows=1 - ) # Assuming space delimited and one header row + data = np.loadtxt(filename, delimiter=" ", skiprows=1) # Assuming space delimited and one header row # Check number of columns num_cols = data.shape[1] if num_cols != 13: - raise ValueError( - "Incorrect number of columns. Expected 13 but got {}".format(num_cols) - ) + raise ValueError(f"Incorrect number of columns. Expected 13 but got {num_cols}") return data diff --git a/src/pleiades/sammyRunner.py b/legacy/pleiades_old/sammyRunner.py similarity index 92% rename from src/pleiades/sammyRunner.py rename to legacy/pleiades_old/sammyRunner.py index 582d849..0c2d329 100644 --- a/src/pleiades/sammyRunner.py +++ b/legacy/pleiades_old/sammyRunner.py @@ -20,14 +20,15 @@ # with 'from pleiades.sammyStructures import SammyFitConfig' # General imports -import pathlib +import datetime import glob import os +import pathlib import shutil import subprocess import textwrap + import numpy as np -import datetime # SammyFitConfig imports from PLEIADES from pleiades.sammyStructures import SammyFitConfig, sammyRunConfig @@ -118,9 +119,7 @@ def set_sammy_call_method(docker_image_name: str = "", verbose_level: int = 0) - docker_image = docker_image_name docker_command = f"docker image inspect {docker_image}" try: - subprocess.check_output( - docker_command, shell=True, stderr=subprocess.STDOUT - ) + subprocess.check_output(docker_command, shell=True, stderr=subprocess.STDOUT) if verbose_level > 0: print(f"{print_header_good} Found docker version of SAMMY") sammy_call = "docker" @@ -174,9 +173,7 @@ def run_sammy_fit(config: sammyRunConfig, verbose_level: int = 0) -> None: # Print info based on verbosity level if verbose_level > 0: - print( - f"{print_header_check} ----------------------- Running SAMMY for {sammy_fit_name}" - ) + print(f"{print_header_check} ----------------------- Running SAMMY for {sammy_fit_name}") if verbose_level > 1: print(f"{print_header_check} input_file: {full_path_to_input_file}") print(f"{print_header_check} par_file: {full_path_to_params_file}") @@ -188,9 +185,7 @@ def run_sammy_fit(config: sammyRunConfig, verbose_level: int = 0) -> None: if not os.path.isfile(full_path_to_input_file): raise FileNotFoundError(f"{print_header_bad} Input file {input_file} not found") if not os.path.isfile(full_path_to_params_file): - raise FileNotFoundError( - f"{print_header_bad} Parameter file {params_file} not found" - ) + raise FileNotFoundError(f"{print_header_bad} Parameter file {params_file} not found") if not os.path.isfile(full_path_to_data_file): raise FileNotFoundError(f"{print_header_bad} Data file {data_file} not found") @@ -266,15 +261,11 @@ def run_sammy_fit(config: sammyRunConfig, verbose_level: int = 0) -> None: # Check if the SAMMY run was successful by opening the output file and checking for the line " Normal finish to SAMMY" with open(output_file, "r") as output: if verbose_level > 0: - print( - f"{print_header_check} Checking SAMMY output file: {full_path_to_output_file}" - ) + print(f"{print_header_check} Checking SAMMY output file: {full_path_to_output_file}") for line in output: if " Normal finish to SAMMY" in line: if verbose_level > 0: - print( - f"{print_header_good} SAMMY fit was successful for {sammy_fit_name}" - ) + print(f"{print_header_good} SAMMY fit was successful for {sammy_fit_name}") break else: raise RuntimeError( @@ -284,9 +275,7 @@ def run_sammy_fit(config: sammyRunConfig, verbose_level: int = 0) -> None: # Move all SAMMY output files with the prefix SAM to the results folder for file in glob.glob("SAM*"): # Construct the full path for the destination - destination_file = os.path.join( - full_path_to_result_files, os.path.basename(file) - ) + destination_file = os.path.join(full_path_to_result_files, os.path.basename(file)) # Check if the file already exists in the destination folder if os.path.exists(destination_file): # Remove the existing file in the destination folder @@ -343,12 +332,8 @@ def run_endf(config: SammyFitConfig, isotope: str = "", verbose_level: int = 0) with open(fit_dir / input_file) as fid: next(fid) # The first line is the isotope name line = next(fid) # Read the second line with Emin and Emax - Emin = float( - line[20:30].strip() - ) # Extract Emin using character positions and strip spaces - Emax = float( - line[30:40].strip() - ) # Extract Emax using character positions and strip spaces + Emin = float(line[20:30].strip()) # Extract Emin using character positions and strip spaces + Emax = float(line[30:40].strip()) # Extract Emax using character positions and strip spaces if verbose_level > 1: print(f"{print_header_check} Emin: {Emin}, Emax: {Emax}") @@ -371,9 +356,7 @@ def run_endf(config: SammyFitConfig, isotope: str = "", verbose_level: int = 0) fid.write(f"{energy:>20.8f}{transmission:>20.8f}{error:>20.8f}\n") if verbose_level > 0: - print( - f"{print_header_check} Dummy data file with {num_points} points written to {data_file}" - ) + print(f"{print_header_check} Dummy data file with {num_points} points written to {data_file}") # Creating a par file based on ENDF file symlink_path = fit_dir / "res_endf8.endf" @@ -439,14 +422,10 @@ def run_endf(config: SammyFitConfig, isotope: str = "", verbose_level: int = 0) for line in output_file: if " Normal finish to SAMMY" in line: if verbose_level > 0: - print( - f"{print_header_good} SAMMY ENDF run was successful for {isotope}" - ) + print(f"{print_header_good} SAMMY ENDF run was successful for {isotope}") break else: - raise RuntimeError( - f"{print_header_bad} SAMMY ENDF run was not successful for {isotope}" - ) + raise RuntimeError(f"{print_header_bad} SAMMY ENDF run was not successful for {isotope}") # Move the SAMNDF output files to the results folder for file in glob.glob("SAM*"): diff --git a/src/pleiades/sammyStructures.py b/legacy/pleiades_old/sammyStructures.py similarity index 89% rename from src/pleiades/sammyStructures.py rename to legacy/pleiades_old/sammyStructures.py index dec5f89..630b7ef 100644 --- a/src/pleiades/sammyStructures.py +++ b/legacy/pleiades_old/sammyStructures.py @@ -116,9 +116,7 @@ def __init__(self, config_path=None): if config_path: print(f"{print_header_check} Loading configuration from {config_path}") if not os.path.exists(config_path): - raise FileNotFoundError( - f"{print_header_bad} Config file {config_path} not found." - ) + raise FileNotFoundError(f"{print_header_bad} Config file {config_path} not found.") else: config = configparser.ConfigParser() config.read(config_path) @@ -126,9 +124,7 @@ def __init__(self, config_path=None): # Set sammy_fit_dir to sammy_fit_name if sammy_fit_dir is not provided or is empty if not self.params["directories"]["sammy_fit_dir"]: - self.params["directories"]["sammy_fit_dir"] = self.params[ - "sammy_fit_name" - ] + self.params["directories"]["sammy_fit_dir"] = self.params["sammy_fit_name"] # Check and create all needed directories self._check_directories() @@ -147,26 +143,18 @@ def _load_from_config(self, config): if "," in value: # If the field is "abundances", convert to a list of floats if key == "abundances": - self.params[section][key] = [ - float(v.strip()) for v in value.split(",") - ] + self.params[section][key] = [float(v.strip()) for v in value.split(",")] else: # Otherwise, convert to a list of strings - self.params[section][key] = [ - v.strip() for v in value.split(",") - ] + self.params[section][key] = [v.strip() for v in value.split(",")] else: # Handle normal value conversion for non-list fields - self.params[section][key] = self._convert_value( - self._strip_quotes(value) - ) + self.params[section][key] = self._convert_value(self._strip_quotes(value)) else: for key, value in config.items(section): if key in self.params: # Strip quotes and convert value - self.params[key] = self._convert_value( - self._strip_quotes(value) - ) + self.params[key] = self._convert_value(self._strip_quotes(value)) def _convert_value(self, value): """Helper method to convert a string value to the appropriate type. @@ -211,9 +199,7 @@ def _check_directories(self): os.makedirs(working_dir, exist_ok=True) # Create archive_dir if it doesn't exist - archive_dir = pathlib.Path( - working_dir / self.params["directories"]["archive_dir"] - ).resolve() + archive_dir = pathlib.Path(working_dir / self.params["directories"]["archive_dir"]).resolve() if not os.path.exists(archive_dir): os.makedirs(archive_dir, exist_ok=True) @@ -230,9 +216,7 @@ def _check_directories(self): # If user defined, then the endf_dir path is set in the configuration file if not self.params["directories"]["user_defined"]: # Set the data directory to be an absolute path - self.params["directories"]["data_dir"] = pathlib.Path( - self.params["directories"]["data_dir"] - ).resolve() + self.params["directories"]["data_dir"] = pathlib.Path(self.params["directories"]["data_dir"]).resolve() # set the working directory to be an absolute path self.params["directories"]["working_dir"] = working_dir @@ -243,9 +227,7 @@ def _check_directories(self): self.params["directories"]["endf_dir"] = endf_dir_path # Convert the sammy_fit_dir_path to an absolute path - sammy_fit_dir_path = ( - working_dir / self.params["directories"]["sammy_fit_dir"] - ) + sammy_fit_dir_path = working_dir / self.params["directories"]["sammy_fit_dir"] sammy_fit_dir_path = pathlib.Path(sammy_fit_dir_path).resolve() self.params["directories"]["sammy_fit_dir"] = sammy_fit_dir_path @@ -304,24 +286,12 @@ def _convert_from_sammy_fit_config(self, sammy_fit_config): self.params["sammy_command"] = sammy_fit_config.params["sammy_command"] self.params["sammy_fit_name"] = sammy_fit_config.params["sammy_fit_name"] self.params["run_endf_for_par"] = sammy_fit_config.params["run_endf_for_par"] - self.params["directories"]["data_dir"] = sammy_fit_config.params["directories"][ - "data_dir" - ] - self.params["directories"]["sammy_fit_dir"] = sammy_fit_config.params[ - "directories" - ]["sammy_fit_dir"] - self.params["filenames"]["data_file_name"] = sammy_fit_config.params[ - "filenames" - ]["data_file_name"] - self.params["filenames"]["input_file_name"] = sammy_fit_config.params[ - "filenames" - ]["input_file_name"] - self.params["filenames"]["params_file_name"] = sammy_fit_config.params[ - "filenames" - ]["params_file_name"] - self.params["filenames"]["output_file_name"] = sammy_fit_config.params[ - "filenames" - ]["output_file_name"] + self.params["directories"]["data_dir"] = sammy_fit_config.params["directories"]["data_dir"] + self.params["directories"]["sammy_fit_dir"] = sammy_fit_config.params["directories"]["sammy_fit_dir"] + self.params["filenames"]["data_file_name"] = sammy_fit_config.params["filenames"]["data_file_name"] + self.params["filenames"]["input_file_name"] = sammy_fit_config.params["filenames"]["input_file_name"] + self.params["filenames"]["params_file_name"] = sammy_fit_config.params["filenames"]["params_file_name"] + self.params["filenames"]["output_file_name"] = sammy_fit_config.params["filenames"]["output_file_name"] def print_params(self): """Prints the parameters in a nicely formatted way.""" diff --git a/src/pleiades/sammyUtils.py b/legacy/pleiades_old/sammyUtils.py similarity index 75% rename from src/pleiades/sammyUtils.py rename to legacy/pleiades_old/sammyUtils.py index 1a2320c..0d2483c 100755 --- a/src/pleiades/sammyUtils.py +++ b/legacy/pleiades_old/sammyUtils.py @@ -20,25 +20,25 @@ # with 'from pleiades.sammyStructures import SammyFitConfig' # General imports -from pathlib import Path -import pathlib +import importlib.resources as pkg_resources import os +import pathlib import shutil +from pathlib import Path + import numpy as np -import importlib.resources as pkg_resources + +from pleiades import nucData, sammyInput, sammyParFile, sammyRunner # PLEIADES imports from pleiades.sammyStructures import SammyFitConfig, sammyRunConfig -from pleiades import sammyParFile, sammyInput, sammyRunner, nucData print_header_check = "\033[1;34m\033[0m " print_header_good = "\033[1;32m\033[0m " print_header_bad = "\033[1;31m\033[0m " -def create_parFile_from_endf( - config: SammyFitConfig, archive: bool = True, verbose_level: int = 0 -) -> None: +def create_parFile_from_endf(config: SammyFitConfig, archive: bool = True, verbose_level: int = 0) -> None: """ Takes a SammyFitConfig object and creates SAMMY parFiles from ENDF data based on the isotopes specified in the configuration. @@ -63,9 +63,7 @@ def create_parFile_from_endf( # first check to see if the SAMMY environment is set up correctly if not sammyRunner.check_sammy_environment(config, verbose_level): - raise FileNotFoundError( - f"{print_header_bad} SAMMY executable not found in the path" - ) + raise FileNotFoundError(f"{print_header_bad} SAMMY executable not found in the path") else: if verbose_level > 0: print(f"{print_header_good} SAMMY executable found in the path") @@ -81,12 +79,8 @@ def create_parFile_from_endf( # Print a header if verbose_level > 0 if verbose_level > 0: - print( - f"\n{print_header_check} ================================================" - ) - print( - f"{print_header_check} Creating SAMMY parFile files from ENDF data for isotopes: {isotopes}" - ) + print(f"\n{print_header_check} ================================================") + print(f"{print_header_check} Creating SAMMY parFile files from ENDF data for isotopes: {isotopes}") # Set the ENDF directory path endf_dir_path = pathlib.Path(config.params["directories"]["endf_dir"]).resolve() @@ -98,29 +92,21 @@ def create_parFile_from_endf( print(f"{print_header_check} ENDF directory created at {endf_dir_path}") else: if verbose_level > 0: - print( - f"{print_header_check} ENDF directory at {endf_dir_path} already exists" - ) + print(f"{print_header_check} ENDF directory at {endf_dir_path} already exists") # Set the res_endf8.endf file path to be in the endf directory destination_res_endf = endf_dir_path / "res_endf8.endf" # Now check to see if the res_endf8.endf file exists in the endf dir. If not, copy it there. if not os.path.exists(destination_res_endf): - source_res_endf = pkg_resources.files("pleiades").joinpath( - "../../nucDataLibs/resonanceTables/res_endf8.endf" - ) + source_res_endf = pkg_resources.files("pleiades").joinpath("../../nucDataLibs/resonanceTables/res_endf8.endf") # Copy the res_endf8.endf file to the endf directory shutil.copy(source_res_endf, destination_res_endf) if verbose_level > 0: - print( - f"{print_header_check} Copied {source_res_endf} to {destination_res_endf}" - ) + print(f"{print_header_check} Copied {source_res_endf} to {destination_res_endf}") else: if verbose_level > 0: - print( - f"{print_header_check} res_endf8.endf file already exists at {destination_res_endf}\n" - ) + print(f"{print_header_check} res_endf8.endf file already exists at {destination_res_endf}\n") # Loop through the isotope list: # 1. Create a SAMMY input, data, and params file, @@ -134,53 +120,37 @@ def create_parFile_from_endf( if not os.path.exists(isotope_dir_path): os.makedirs(isotope_dir_path) if verbose_level > 0: - print( - f"{print_header_check} Isotope directory created at {isotope_dir_path}" - ) + print(f"{print_header_check} Isotope directory created at {isotope_dir_path}") else: if verbose_level > 0: - print( - f"{print_header_check} Isotope directory at {isotope_dir_path} already exists" - ) + print(f"{print_header_check} Isotope directory at {isotope_dir_path} already exists") # Check to see if the par file already exists in the isotope directory par_file = fit_results_dir / Path("SAMNDF.PAR") if os.path.exists(par_file): if verbose_level > 0: - print( - f"{print_header_check} SAMMY parFile already exists at {par_file}" - ) - print( - f"{print_header_check} Skipping SAMMY ENDF run for isotope: {isotope}" - ) + print(f"{print_header_check} SAMMY parFile already exists at {par_file}") + print(f"{print_header_check} Skipping SAMMY ENDF run for isotope: {isotope}") continue else: if verbose_level > 0: - print( - f"{print_header_check} A SAMMY parFile does not exist at {par_file}" - ) + print(f"{print_header_check} A SAMMY parFile does not exist at {par_file}") # Print a header if verbose_level > 0 if verbose_level > 0: - print( - f"{print_header_check} Now Creating SAMMY input.inp and params.par for isotope: {isotope}" - ) + print(f"{print_header_check} Now Creating SAMMY input.inp and params.par for isotope: {isotope}") # Create and update SAMMY input file data structure inp = sammyInput.InputFile() inp.update_with_config(config, isotope=isotope, for_endf=True) # Create a SAMMY input file in the isotope directory - sammy_input_file = ( - isotope_dir_path / (config.params["filenames"]["input_file_name"]) - ) + sammy_input_file = isotope_dir_path / (config.params["filenames"]["input_file_name"]) # Write the SAMMY input file to the specified location. inp.process().write(sammy_input_file) if verbose_level > 0: - print( - f"{print_header_check} SAMMY input file created at {sammy_input_file}" - ) + print(f"{print_header_check} SAMMY input file created at {sammy_input_file}") # Print the input data structure if desired if verbose_level > 1: @@ -192,9 +162,7 @@ def create_parFile_from_endf( data_file = isotope_dir_path / ("data.twenty") # Determine the number of points (at least 100) and create a list of energies - energy_values = np.linspace( - config.params["fit_energy_max"], config.params["fit_energy_min"], 100 - ) + energy_values = np.linspace(config.params["fit_energy_max"], config.params["fit_energy_min"], 100) # Open the data file and write the energy, transmission, and error values # Note: this is the twenty character format that SAMMY expects with the TWENTY command @@ -206,9 +174,7 @@ def create_parFile_from_endf( fid.write(f"{energy:>20.8f}{transmission:>20.8f}{error:>20.8f}\n") if verbose_level > 0: - print( - f"{print_header_check} Created an ENDF dummy data file at {data_file}" - ) + print(f"{print_header_check} Created an ENDF dummy data file at {data_file}") # Creating a par file based on ENDF file endf_res_file_name = "res_endf8.endf" @@ -230,21 +196,15 @@ def create_parFile_from_endf( isotope_run_config = sammyRunConfig() # configure run_config for an ENDF SAMMY run - isotope_run_config.params["sammy_run_method"] = config.params[ - "sammy_run_method" - ] + isotope_run_config.params["sammy_run_method"] = config.params["sammy_run_method"] isotope_run_config.params["sammy_command"] = config.params["sammy_command"] isotope_run_config.params["sammy_fit_name"] = isotope isotope_run_config.params["run_endf_for_par"] = True - isotope_run_config.params["directories"]["sammy_fit_dir"] = str( - isotope_dir_path - ) + isotope_run_config.params["directories"]["sammy_fit_dir"] = str(isotope_dir_path) isotope_run_config.params["directories"]["input_dir"] = str(isotope_dir_path) isotope_run_config.params["directories"]["params_dir"] = str(endf_dir_path) isotope_run_config.params["directories"]["data_dir"] = str(isotope_dir_path) - isotope_run_config.params["filenames"]["params_file_name"] = str( - endf_res_file_name - ) + isotope_run_config.params["filenames"]["params_file_name"] = str(endf_res_file_name) sammyRunner.run_sammy_fit(isotope_run_config, verbose_level=verbose_level) @@ -290,9 +250,7 @@ def configure_sammy_run(config: SammyFitConfig, verbose_level: int = 0): # Create a SAMMY parFile for each isotope if verbose_level > 0: - print( - f"\n{print_header_check} Merging SAMMY parameter files for isotopes: {isotopes}, with abundances: {abundances}" - ) + print(f"\n{print_header_check} Merging SAMMY parameter files for isotopes: {isotopes}, with abundances: {abundances}") # TODO: This assumes that parfiles were created via ENDF data. This might not always be the case. # I think I can use the run_with_endf flag to determine if the par file was created with ENDF data @@ -333,24 +291,12 @@ def configure_sammy_run(config: SammyFitConfig, verbose_level: int = 0): "flight_path_spread": config.params["broadening"]["flight_path_spread"], "deltag_fwhm": config.params["broadening"]["deltag_fwhm"], "deltae_us": config.params["broadening"]["deltae_us"], - "vary_match_radius": int( - config.params["broadening"]["vary_match_radius"] is True - ), - "vary_thickness": int( - config.params["broadening"]["vary_thickness"] is True - ), - "vary_temperature": int( - config.params["broadening"]["vary_temperature"] is True - ), - "vary_flight_path_spread": int( - config.params["broadening"]["vary_flight_path_spread"] is True - ), - "vary_deltag_fwhm": int( - config.params["broadening"]["vary_deltag_fwhm"] is True - ), - "vary_deltae_us": int( - config.params["broadening"]["vary_deltae_us"] is True - ), + "vary_match_radius": int(config.params["broadening"]["vary_match_radius"] is True), + "vary_thickness": int(config.params["broadening"]["vary_thickness"] is True), + "vary_temperature": int(config.params["broadening"]["vary_temperature"] is True), + "vary_flight_path_spread": int(config.params["broadening"]["vary_flight_path_spread"] is True), + "vary_deltag_fwhm": int(config.params["broadening"]["vary_deltag_fwhm"] is True), + "vary_deltae_us": int(config.params["broadening"]["vary_deltae_us"] is True), } outputParFile.update.broadening(**broadening_args) @@ -362,24 +308,12 @@ def configure_sammy_run(config: SammyFitConfig, verbose_level: int = 0): "sqrt_energy_bg": float(config.params["normalization"]["sqrt_energy_bg"]), "exponential_bg": float(config.params["normalization"]["exponential_bg"]), "exp_decay_bg": float(config.params["normalization"]["exp_decay_bg"]), - "vary_normalization": int( - config.params["normalization"]["vary_normalization"] is True - ), - "vary_constant_bg": int( - config.params["normalization"]["vary_constant_bg"] is True - ), - "vary_one_over_v_bg": int( - config.params["normalization"]["vary_one_over_v_bg"] is True - ), - "vary_sqrt_energy_bg": int( - config.params["normalization"]["vary_sqrt_energy_bg"] is True - ), - "vary_exponential_bg": int( - config.params["normalization"]["vary_exponential_bg"] is True - ), - "vary_exp_decay_bg": int( - config.params["normalization"]["vary_exp_decay_bg"] is True - ), + "vary_normalization": int(config.params["normalization"]["vary_normalization"] is True), + "vary_constant_bg": int(config.params["normalization"]["vary_constant_bg"] is True), + "vary_one_over_v_bg": int(config.params["normalization"]["vary_one_over_v_bg"] is True), + "vary_sqrt_energy_bg": int(config.params["normalization"]["vary_sqrt_energy_bg"] is True), + "vary_exponential_bg": int(config.params["normalization"]["vary_exponential_bg"] is True), + "vary_exp_decay_bg": int(config.params["normalization"]["vary_exp_decay_bg"] is True), } outputParFile.update.normalization(**normalization_args) @@ -391,17 +325,13 @@ def configure_sammy_run(config: SammyFitConfig, verbose_level: int = 0): # Now create a SAMMY input file if verbose_level > 0: - print( - f"{print_header_check} Creating SAMMY inpFile files for isotopes: {isotopes} with abundances: {abundances}" - ) + print(f"{print_header_check} Creating SAMMY inpFile files for isotopes: {isotopes} with abundances: {abundances}") # Create an inpFile from inp = sammyInput.InputFile(verbose_level=verbose_level) # find the lowest atomic number isotope and set it as the element - lowest_atomic_isotope = min( - isotopes, key=lambda isotope: nucData.get_mass_from_ame(isotope) - ) + lowest_atomic_isotope = min(isotopes, key=lambda isotope: nucData.get_mass_from_ame(isotope)) # Update input data with isotope-specific information inp.data["Card2"]["elmnt"] = lowest_atomic_isotope @@ -430,27 +360,21 @@ def configure_sammy_run(config: SammyFitConfig, verbose_level: int = 0): # Write the SAMMY input file to the specified location. inp.process().write(output_inp_file) if verbose_level > 0: - print( - f"{print_header_check} Created compound input file: {output_inp_file}" - ) + print(f"{print_header_check} Created compound input file: {output_inp_file}") # Create a symbolic link inside the sammy_fit_dir that points to the data file data_file = os.path.join(data_dir, config.params["filenames"]["data_file_name"]) data_file_name = pathlib.Path(data_file).name if verbose_level > 0: - print( - f"{print_header_check} Symlinking data file: {data_file} into {sammy_fit_dir}" - ) + print(f"{print_header_check} Symlinking data file: {data_file} into {sammy_fit_dir}") # Check if the symbolic link already exists symlink_path = pathlib.Path(sammy_fit_dir) / data_file_name if os.path.islink(symlink_path): os.unlink(symlink_path) # unlink old symlink - os.symlink( - data_file, pathlib.Path(sammy_fit_dir) / data_file_name - ) # create new symlink + os.symlink(data_file, pathlib.Path(sammy_fit_dir) / data_file_name) # create new symlink # Create a sammy run configuration object sammy_run_config = sammyRunConfig() @@ -459,27 +383,13 @@ def configure_sammy_run(config: SammyFitConfig, verbose_level: int = 0): sammy_run_config.params["sammy_run_method"] = config.params["sammy_run_method"] sammy_run_config.params["sammy_command"] = config.params["sammy_command"] sammy_run_config.params["run_endf_for_par"] = False - sammy_run_config.params["directories"]["sammy_fit_dir"] = config.params[ - "directories" - ]["sammy_fit_dir"] - sammy_run_config.params["directories"]["input_dir"] = config.params[ - "directories" - ]["sammy_fit_dir"] - sammy_run_config.params["directories"]["params_dir"] = config.params[ - "directories" - ]["sammy_fit_dir"] - sammy_run_config.params["directories"]["data_dir"] = config.params[ - "directories" - ]["data_dir"] - sammy_run_config.params["filenames"]["params_file_name"] = config.params[ - "filenames" - ]["params_file_name"] - sammy_run_config.params["filenames"]["input_file_name"] = config.params[ - "filenames" - ]["input_file_name"] - sammy_run_config.params["filenames"]["data_file_name"] = config.params[ - "filenames" - ]["data_file_name"] + sammy_run_config.params["directories"]["sammy_fit_dir"] = config.params["directories"]["sammy_fit_dir"] + sammy_run_config.params["directories"]["input_dir"] = config.params["directories"]["sammy_fit_dir"] + sammy_run_config.params["directories"]["params_dir"] = config.params["directories"]["sammy_fit_dir"] + sammy_run_config.params["directories"]["data_dir"] = config.params["directories"]["data_dir"] + sammy_run_config.params["filenames"]["params_file_name"] = config.params["filenames"]["params_file_name"] + sammy_run_config.params["filenames"]["input_file_name"] = config.params["filenames"]["input_file_name"] + sammy_run_config.params["filenames"]["data_file_name"] = config.params["filenames"]["data_file_name"] return sammy_run_config diff --git a/src/pleiades/simData.py b/legacy/pleiades_old/simData.py similarity index 81% rename from src/pleiades/simData.py rename to legacy/pleiades_old/simData.py index 9d3f973..19a4601 100644 --- a/src/pleiades/simData.py +++ b/legacy/pleiades_old/simData.py @@ -1,8 +1,10 @@ import configparser +import json + import numpy as np from scipy.interpolate import interp1d + import pleiades.nucData as pnd -import json AVOGADRO = 6.02214076e23 # Avogadro's number CM2_TO_BARN = 1e24 # Conversion factor from cm2 to barns @@ -34,9 +36,7 @@ def create_transmission(energy_grid, isotope): if thickness_unit == "mm": thickness /= 10.0 else: - raise ValueError( - "Unsupported thickness unit: {thickness_unit} for {isotope_name}" - ) + raise ValueError("Unsupported thickness unit: {thickness_unit} for {isotope_name}") if density_unit != "g/cm3": raise ValueError("Unsupported density unit:{density_unit} for {isotope_name}") @@ -45,9 +45,7 @@ def create_transmission(energy_grid, isotope): # Create interpolation function for cross-section data energies_eV, cross_sections = zip(*xs_data) - interpolate_xs_data = interp1d( - energies_eV, cross_sections, kind="linear", fill_value="extrapolate" - ) + interpolate_xs_data = interp1d(energies_eV, cross_sections, kind="linear", fill_value="extrapolate") # create a list of tuples containing the energy and transmission data transmission = [] @@ -108,17 +106,11 @@ def parse_xs_file(file_location, isotope_name, verbose_level=0): # If capture_data is True and the line doesn't start with a '#', then it's the data elif capture_data and not line.startswith("#"): energy_eV, xs = line.split() - xs_data.append( - (float(energy_eV) * 1e6, float(xs)) - ) # Convert energy from MeV to eV + xs_data.append((float(energy_eV) * 1e6, float(xs))) # Convert energy from MeV to eV # If the loop completes and the isotope was not found if not isotope_xs_found: - raise ValueError( - "Cross-section data for {isotope_name} not found in {file_location}".format( - isotope_name=isotope_name, file_location=file_location - ) - ) + raise ValueError(f"Cross-section data for {isotope_name} not found in {file_location}") return xs_data @@ -153,16 +145,10 @@ def load_xs_data(self, verbose_level=0): print(f"[load_xs_data] -> loading xs file for {self.name}") self.xs_data = parse_xs_file(self.xs_file_location, self.name, verbose_level=0) if not self.xs_data: - raise ValueError( - f"No data loaded for {self.name} from {self.xs_file_location}" - ) + raise ValueError(f"No data loaded for {self.name} from {self.xs_file_location}") def __repr__(self): - xs_status = ( - "XS data loaded successfully" - if len(self.xs_data) != 0 - else "XS data not loaded" - ) + xs_status = "XS data loaded successfully" if len(self.xs_data) != 0 else "XS data not loaded" return f"Isotope({self.name},{self.atomic_mass},{self.thickness} {self.thickness_unit}, {self.abundance}, {self.xs_file_location}, {self.density} {self.density_unit}, {xs_status})" @@ -197,22 +183,12 @@ def load_isotopes_from_config(config_file, verbose=False): atomic_mass = pnd.get_mass_from_ame(name) if atomic_mass is None: raise ValueError(f"Could not find atomic mass for {name}") - thickness = config.getfloat( - section, "thickness", fallback=default_isotope.thickness - ) - thickness_unit = config.get( - section, "thickness_unit", fallback=default_isotope.thickness_unit - ) - abundance = config.getfloat( - section, "abundance", fallback=default_isotope.abundance - ) - xs_file_location = config.get( - section, "xs_file_location", fallback=default_isotope.xs_file_location - ) + thickness = config.getfloat(section, "thickness", fallback=default_isotope.thickness) + thickness_unit = config.get(section, "thickness_unit", fallback=default_isotope.thickness_unit) + abundance = config.getfloat(section, "abundance", fallback=default_isotope.abundance) + xs_file_location = config.get(section, "xs_file_location", fallback=default_isotope.xs_file_location) density = config.getfloat(section, "density", fallback=default_isotope.density) - density_unit = config.get( - section, "density_unit", fallback=default_isotope.density_unit - ) + density_unit = config.get(section, "density_unit", fallback=default_isotope.density_unit) # Create an Isotope instance and load the xs data isotope = Isotope( @@ -233,9 +209,7 @@ def load_isotopes_from_config(config_file, verbose=False): return isotopes -def write_transmission_data_twenty( - energy_data, transmission_data, output_file, include_error=False, verbose=False -): +def write_transmission_data_twenty(energy_data, transmission_data, output_file, include_error=False, verbose=False): """Write the transmission data to a file in the format: energy (eV), transmission (0-1) with SAMMY's twenty character format. Args: @@ -256,16 +230,12 @@ def write_transmission_data_twenty( energy_str = f"{energy:>20}" # Right-justified, 20 characters transmission_str = f"{transmission:>20}" # Right-justified, 20 characters - transmission_error_str = ( - f"{transmission_error:>20}" # Right-justified, 20 characters - ) + transmission_error_str = f"{transmission_error:>20}" # Right-justified, 20 characters if include_error: f.write(f"{energy_str}{transmission_str}{transmission_error_str}\n") else: - f.write( - f"{energy_str}{transmission_str}\n" - ) # Write the data to the file + f.write(f"{energy_str}{transmission_str}\n") # Write the data to the file def write_transmission_data_json( @@ -296,14 +266,8 @@ def write_transmission_data_json( """ # Check if transmission data contains numpy arrays and convert them to lists - energy_data = [ - item[0].tolist() if isinstance(item[0], np.ndarray) else item[0] - for item in transmission_data - ] - transmission_data = [ - item[1].tolist() if isinstance(item[1], np.ndarray) else item[1] - for item in transmission_data - ] + energy_data = [item[0].tolist() if isinstance(item[0], np.ndarray) else item[0] for item in transmission_data] + transmission_data = [item[1].tolist() if isinstance(item[1], np.ndarray) else item[1] for item in transmission_data] # Create the dictionary structure for JSON data_structure = { diff --git a/tests/test_nucData.py b/legacy/tests/test_nucData.py similarity index 94% rename from tests/test_nucData.py rename to legacy/tests/test_nucData.py index 31d8c08..464809b 100644 --- a/tests/test_nucData.py +++ b/legacy/tests/test_nucData.py @@ -1,8 +1,10 @@ +import logging import os -from pleiades import nucData import pathlib + import pytest -import logging + +from pleiades import nucData ## Configure logging for the test # Set file name @@ -102,7 +104,9 @@ def test_parse_ame_line(): logger.info(logger_header_break) logger.info("Testing parsing a line from the AME file") - line = " 0 6 6 12 C 0.0 0.0 7680.1446 0.0002 B- -17338.0681 0.9999 12 000000.0 0.0" + line = ( + " 0 6 6 12 C 0.0 0.0 7680.1446 0.0002 B- -17338.0681 0.9999 12 000000.0 0.0" + ) parsed_data = nucData.parse_ame_line(line) logger.info(f"Parsed Data: {parsed_data}") @@ -155,9 +159,7 @@ def test_get_mass_from_ame(ame_file, monkeypatch): logger.info("Testing fetching the atomic mass from mass.mas20") # Use monkeypatch to override the pleiades_dir path for nucData - monkeypatch.setattr( - nucData, "pleiades_dir", pathlib.Path(ame_file).parent.parent.parent - ) + monkeypatch.setattr(nucData, "pleiades_dir", pathlib.Path(ame_file).parent.parent.parent) # Test for a few isotopes isotope = "H-1" @@ -195,9 +197,7 @@ def test_get_mat_number(neutron_file, monkeypatch): logger.info("Testing fetching the ENDF mat number from neutrons.list") # Use monkeypatch to override the pleiades_dir path for nucData - monkeypatch.setattr( - nucData, "pleiades_dir", pathlib.Path(neutron_file).parent.parent.parent - ) # Points to root directory + monkeypatch.setattr(nucData, "pleiades_dir", pathlib.Path(neutron_file).parent.parent.parent) # Points to root directory # Test with known isotopes isotope = "Fe-56" diff --git a/tests/test_sammyInput.py b/legacy/tests/test_sammyInput.py similarity index 93% rename from tests/test_sammyInput.py rename to legacy/tests/test_sammyInput.py index cd9a987..0e3aa8a 100644 --- a/tests/test_sammyInput.py +++ b/legacy/tests/test_sammyInput.py @@ -1,9 +1,10 @@ +import logging +import os + import pytest + from pleiades import sammyInput from pleiades.sammyStructures import SammyFitConfig -import os -import logging - ## Configure logging for the test # Set file name @@ -65,13 +66,9 @@ def test_update_with_config(input_file): config = SammyFitConfig() config.params["isotopes"] = {"names": ["U-235", "U-238"]} - logger.info( - f"Config loaded successfully with isotopes: {config.params['isotopes']['names']}" - ) + logger.info(f"Config loaded successfully with isotopes: {config.params['isotopes']['names']}") input_file.update_with_config(config) - assert ( - input_file.data["Card2"]["elmnt"] == "U-235" - ) # Selects isotope with lowest mass + assert input_file.data["Card2"]["elmnt"] == "U-235" # Selects isotope with lowest mass assert input_file.data["Card2"]["aw"] == "auto" # Atomic weight should be auto logger.info("InputFile updated successfully") @@ -127,9 +124,7 @@ def test_format_type_F(): formatted_float = sammyInput.InputFile.format_type_F(1.2345, 10) - assert ( - len(formatted_float) == 10 - ) # Ensure the formatted string is 10 characters wide + assert len(formatted_float) == 10 # Ensure the formatted string is 10 characters wide assert formatted_float.strip() == "1.2345" # Check that the float part is correct logger.info("format_type_F method tested successfully") diff --git a/tests/test_sammyRunner.py b/legacy/tests/test_sammyRunner.py similarity index 93% rename from tests/test_sammyRunner.py rename to legacy/tests/test_sammyRunner.py index d63a53c..1bdaa6d 100644 --- a/tests/test_sammyRunner.py +++ b/legacy/tests/test_sammyRunner.py @@ -1,7 +1,9 @@ +import logging import os -from pleiades import sammyUtils, sammyRunner + import pytest -import logging + +from pleiades import sammyRunner, sammyUtils # Configure logging for the test log_file = "test_sammyRunner.log" @@ -47,9 +49,7 @@ def test_check_sammy_environment(default_config): logger.info(logger_header_break) logger.info("Checking if SAMMY environment exists") - sammy_compiled_exists, sammy_docker_exists = sammyRunner.check_sammy_environment( - default_config - ) + sammy_compiled_exists, sammy_docker_exists = sammyRunner.check_sammy_environment(default_config) logger.info(logger_footer_break) @@ -60,9 +60,7 @@ def test_set_sammy_call_method(default_config): # Test the set_sammy_call_method() function logger.info(logger_header_break) logger.info("Testing the set_sammy_call_method() function") - sammy_call, sammy_command = sammyRunner.set_sammy_call_method( - docker_image_name="sammy-docker", verbose_level=1 - ) + sammy_call, sammy_command = sammyRunner.set_sammy_call_method(docker_image_name="sammy-docker", verbose_level=1) logger.info(f"Sammy call: {sammy_call}") logger.info(f"Sammy command: {sammy_command}") diff --git a/tests/test_sammyUtils.py b/legacy/tests/test_sammyUtils.py similarity index 81% rename from tests/test_sammyUtils.py rename to legacy/tests/test_sammyUtils.py index 9dc8c5d..b2b2509 100644 --- a/tests/test_sammyUtils.py +++ b/legacy/tests/test_sammyUtils.py @@ -1,8 +1,10 @@ +import logging import os -from pleiades import sammyUtils, sammyRunner import pathlib + import pytest -import logging + +from pleiades import sammyRunner, sammyUtils ## Configure logging for the test # Set file name @@ -45,9 +47,7 @@ def default_config(tmpdir): config.params["directories"]["working_dir"] = str(tmpdir.mkdir("working_dir")) # Set paths for subdirectories endf and data - config.params["directories"]["endf_dir"] = str( - pathlib.Path(config.params["directories"]["working_dir"]) / "endf" - ) + config.params["directories"]["endf_dir"] = str(pathlib.Path(config.params["directories"]["working_dir"]) / "endf") return config @@ -56,9 +56,7 @@ def test_sammyUtils_sammy_config(default_config): """Test the sammyUtils.SammyFitConfig class by loading the default config.""" logger.info(logger_header_break) logger.info("Checking if default config is a SammyFitConfig object") - logger.info( - f"Temp working directory created at {default_config.params['directories']['working_dir']}" - ) + logger.info(f"Temp working directory created at {default_config.params['directories']['working_dir']}") # Check if default_config is a SammyFitConfig object assert isinstance(default_config, sammyUtils.SammyFitConfig) @@ -71,14 +69,10 @@ def test_set_sammy_call_method(default_config): """Test the set_sammy_call_method() function to determine the SAMMY run method.""" logger.info(logger_header_break) logger.info("Testing the set_sammy_call_method() function") - logger.info( - f"Temp working directory created at {default_config.params['directories']['working_dir']}" - ) + logger.info(f"Temp working directory created at {default_config.params['directories']['working_dir']}") # Test the set_sammy_call_method() function - sammy_call, sammy_command = sammyRunner.set_sammy_call_method( - docker_image_name="sammy-docker", verbose_level=1 - ) + sammy_call, sammy_command = sammyRunner.set_sammy_call_method(docker_image_name="sammy-docker", verbose_level=1) logger.info(f"Sammy call: {sammy_call}") logger.info(f"Sammy command: {sammy_command}") @@ -97,17 +91,11 @@ def test_create_parFile_from_endf(default_config): """Test the creation of a parFile from an ENDF file.""" logger.info(logger_header_break) test_isotope = "U-238" - logger.info( - f"Testing the creation of a parFile from an ENDF file for with test isotope: {test_isotope}" - ) - logger.info( - f"Temp working directory created at {default_config.params['directories']['working_dir']}" - ) + logger.info(f"Testing the creation of a parFile from an ENDF file for with test isotope: {test_isotope}") + logger.info(f"Temp working directory created at {default_config.params['directories']['working_dir']}") # Grab the sammy_call and sammy_command from the sammyRunner.set_sammy_call_method() function - sammy_call, sammy_command = sammyRunner.set_sammy_call_method( - docker_image_name="sammy-docker", verbose_level=1 - ) + sammy_call, sammy_command = sammyRunner.set_sammy_call_method(docker_image_name="sammy-docker", verbose_level=1) # Update the default config with a U-238 isotope logger.info("Updating default config with U-238 isotope") @@ -132,15 +120,11 @@ def test_create_parFile_from_endf(default_config): assert isotope_dir_path.exists() # Check if the parFile was created - logger.info( - f"Checking if SAMNDF.PAR parFile was created at {isotope_dir_path / 'results'}" - ) + logger.info(f"Checking if SAMNDF.PAR parFile was created at {isotope_dir_path / 'results'}") parFile_path = pathlib.Path(isotope_dir_path / "results" / "SAMNDF.PAR") assert parFile_path.exists() - logger.info( - f"SAMNDF.PAR parFile created successfully at {isotope_dir_path / 'results'}" - ) + logger.info(f"SAMNDF.PAR parFile created successfully at {isotope_dir_path / 'results'}") logger.info(logger_footer_break) diff --git a/poetry.lock b/poetry.lock index 6302e0c..941436f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,25 +1,169 @@ -# This file is automatically @generated by Poetry 1.8.4 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.0.1 and should not be changed by hand. + +[[package]] +name = "aiohappyeyeballs" +version = "2.4.4" +description = "Happy Eyeballs for asyncio" +optional = false +python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" +files = [ + {file = "aiohappyeyeballs-2.4.4-py3-none-any.whl", hash = "sha256:a980909d50efcd44795c4afeca523296716d50cd756ddca6af8c65b996e27de8"}, + {file = "aiohappyeyeballs-2.4.4.tar.gz", hash = "sha256:5fdd7d87889c63183afc18ce9271f9b0a7d32c2303e394468dd45d514a757745"}, +] + +[[package]] +name = "aiohttp" +version = "3.11.11" +description = "Async http client/server framework (asyncio)" +optional = false +python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" +files = [ + {file = "aiohttp-3.11.11-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a60804bff28662cbcf340a4d61598891f12eea3a66af48ecfdc975ceec21e3c8"}, + {file = "aiohttp-3.11.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4b4fa1cb5f270fb3eab079536b764ad740bb749ce69a94d4ec30ceee1b5940d5"}, + {file = "aiohttp-3.11.11-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:731468f555656767cda219ab42e033355fe48c85fbe3ba83a349631541715ba2"}, + {file = "aiohttp-3.11.11-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb23d8bb86282b342481cad4370ea0853a39e4a32a0042bb52ca6bdde132df43"}, + {file = "aiohttp-3.11.11-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f047569d655f81cb70ea5be942ee5d4421b6219c3f05d131f64088c73bb0917f"}, + {file = "aiohttp-3.11.11-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dd7659baae9ccf94ae5fe8bfaa2c7bc2e94d24611528395ce88d009107e00c6d"}, + {file = "aiohttp-3.11.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af01e42ad87ae24932138f154105e88da13ce7d202a6de93fafdafb2883a00ef"}, + {file = "aiohttp-3.11.11-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5854be2f3e5a729800bac57a8d76af464e160f19676ab6aea74bde18ad19d438"}, + {file = "aiohttp-3.11.11-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6526e5fb4e14f4bbf30411216780c9967c20c5a55f2f51d3abd6de68320cc2f3"}, + {file = "aiohttp-3.11.11-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:85992ee30a31835fc482468637b3e5bd085fa8fe9392ba0bdcbdc1ef5e9e3c55"}, + {file = "aiohttp-3.11.11-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:88a12ad8ccf325a8a5ed80e6d7c3bdc247d66175afedbe104ee2aaca72960d8e"}, + {file = "aiohttp-3.11.11-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:0a6d3fbf2232e3a08c41eca81ae4f1dff3d8f1a30bae415ebe0af2d2458b8a33"}, + {file = "aiohttp-3.11.11-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:84a585799c58b795573c7fa9b84c455adf3e1d72f19a2bf498b54a95ae0d194c"}, + {file = "aiohttp-3.11.11-cp310-cp310-win32.whl", hash = "sha256:bfde76a8f430cf5c5584553adf9926534352251d379dcb266ad2b93c54a29745"}, + {file = "aiohttp-3.11.11-cp310-cp310-win_amd64.whl", hash = "sha256:0fd82b8e9c383af11d2b26f27a478640b6b83d669440c0a71481f7c865a51da9"}, + {file = "aiohttp-3.11.11-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ba74ec819177af1ef7f59063c6d35a214a8fde6f987f7661f4f0eecc468a8f76"}, + {file = "aiohttp-3.11.11-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4af57160800b7a815f3fe0eba9b46bf28aafc195555f1824555fa2cfab6c1538"}, + {file = "aiohttp-3.11.11-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ffa336210cf9cd8ed117011085817d00abe4c08f99968deef0013ea283547204"}, + {file = "aiohttp-3.11.11-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81b8fe282183e4a3c7a1b72f5ade1094ed1c6345a8f153506d114af5bf8accd9"}, + {file = "aiohttp-3.11.11-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3af41686ccec6a0f2bdc66686dc0f403c41ac2089f80e2214a0f82d001052c03"}, + {file = "aiohttp-3.11.11-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:70d1f9dde0e5dd9e292a6d4d00058737052b01f3532f69c0c65818dac26dc287"}, + {file = "aiohttp-3.11.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:249cc6912405917344192b9f9ea5cd5b139d49e0d2f5c7f70bdfaf6b4dbf3a2e"}, + {file = "aiohttp-3.11.11-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0eb98d90b6690827dcc84c246811feeb4e1eea683c0eac6caed7549be9c84665"}, + {file = "aiohttp-3.11.11-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ec82bf1fda6cecce7f7b915f9196601a1bd1a3079796b76d16ae4cce6d0ef89b"}, + {file = "aiohttp-3.11.11-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:9fd46ce0845cfe28f108888b3ab17abff84ff695e01e73657eec3f96d72eef34"}, + {file = "aiohttp-3.11.11-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:bd176afcf8f5d2aed50c3647d4925d0db0579d96f75a31e77cbaf67d8a87742d"}, + {file = "aiohttp-3.11.11-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:ec2aa89305006fba9ffb98970db6c8221541be7bee4c1d027421d6f6df7d1ce2"}, + {file = "aiohttp-3.11.11-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:92cde43018a2e17d48bb09c79e4d4cb0e236de5063ce897a5e40ac7cb4878773"}, + {file = "aiohttp-3.11.11-cp311-cp311-win32.whl", hash = "sha256:aba807f9569455cba566882c8938f1a549f205ee43c27b126e5450dc9f83cc62"}, + {file = "aiohttp-3.11.11-cp311-cp311-win_amd64.whl", hash = "sha256:ae545f31489548c87b0cced5755cfe5a5308d00407000e72c4fa30b19c3220ac"}, + {file = "aiohttp-3.11.11-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e595c591a48bbc295ebf47cb91aebf9bd32f3ff76749ecf282ea7f9f6bb73886"}, + {file = "aiohttp-3.11.11-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3ea1b59dc06396b0b424740a10a0a63974c725b1c64736ff788a3689d36c02d2"}, + {file = "aiohttp-3.11.11-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8811f3f098a78ffa16e0ea36dffd577eb031aea797cbdba81be039a4169e242c"}, + {file = "aiohttp-3.11.11-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd7227b87a355ce1f4bf83bfae4399b1f5bb42e0259cb9405824bd03d2f4336a"}, + {file = "aiohttp-3.11.11-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d40f9da8cabbf295d3a9dae1295c69975b86d941bc20f0a087f0477fa0a66231"}, + {file = "aiohttp-3.11.11-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ffb3dc385f6bb1568aa974fe65da84723210e5d9707e360e9ecb51f59406cd2e"}, + {file = "aiohttp-3.11.11-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8f5f7515f3552d899c61202d99dcb17d6e3b0de777900405611cd747cecd1b8"}, + {file = "aiohttp-3.11.11-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3499c7ffbfd9c6a3d8d6a2b01c26639da7e43d47c7b4f788016226b1e711caa8"}, + {file = "aiohttp-3.11.11-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8e2bf8029dbf0810c7bfbc3e594b51c4cc9101fbffb583a3923aea184724203c"}, + {file = "aiohttp-3.11.11-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b6212a60e5c482ef90f2d788835387070a88d52cf6241d3916733c9176d39eab"}, + {file = "aiohttp-3.11.11-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:d119fafe7b634dbfa25a8c597718e69a930e4847f0b88e172744be24515140da"}, + {file = "aiohttp-3.11.11-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:6fba278063559acc730abf49845d0e9a9e1ba74f85f0ee6efd5803f08b285853"}, + {file = "aiohttp-3.11.11-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:92fc484e34b733704ad77210c7957679c5c3877bd1e6b6d74b185e9320cc716e"}, + {file = "aiohttp-3.11.11-cp312-cp312-win32.whl", hash = "sha256:9f5b3c1ed63c8fa937a920b6c1bec78b74ee09593b3f5b979ab2ae5ef60d7600"}, + {file = "aiohttp-3.11.11-cp312-cp312-win_amd64.whl", hash = "sha256:1e69966ea6ef0c14ee53ef7a3d68b564cc408121ea56c0caa2dc918c1b2f553d"}, + {file = "aiohttp-3.11.11-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:541d823548ab69d13d23730a06f97460f4238ad2e5ed966aaf850d7c369782d9"}, + {file = "aiohttp-3.11.11-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:929f3ed33743a49ab127c58c3e0a827de0664bfcda566108989a14068f820194"}, + {file = "aiohttp-3.11.11-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0882c2820fd0132240edbb4a51eb8ceb6eef8181db9ad5291ab3332e0d71df5f"}, + {file = "aiohttp-3.11.11-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b63de12e44935d5aca7ed7ed98a255a11e5cb47f83a9fded7a5e41c40277d104"}, + {file = "aiohttp-3.11.11-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa54f8ef31d23c506910c21163f22b124facb573bff73930735cf9fe38bf7dff"}, + {file = "aiohttp-3.11.11-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a344d5dc18074e3872777b62f5f7d584ae4344cd6006c17ba12103759d407af3"}, + {file = "aiohttp-3.11.11-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b7fb429ab1aafa1f48578eb315ca45bd46e9c37de11fe45c7f5f4138091e2f1"}, + {file = "aiohttp-3.11.11-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c341c7d868750e31961d6d8e60ff040fb9d3d3a46d77fd85e1ab8e76c3e9a5c4"}, + {file = "aiohttp-3.11.11-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ed9ee95614a71e87f1a70bc81603f6c6760128b140bc4030abe6abaa988f1c3d"}, + {file = "aiohttp-3.11.11-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:de8d38f1c2810fa2a4f1d995a2e9c70bb8737b18da04ac2afbf3971f65781d87"}, + {file = "aiohttp-3.11.11-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:a9b7371665d4f00deb8f32208c7c5e652059b0fda41cf6dbcac6114a041f1cc2"}, + {file = "aiohttp-3.11.11-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:620598717fce1b3bd14dd09947ea53e1ad510317c85dda2c9c65b622edc96b12"}, + {file = "aiohttp-3.11.11-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:bf8d9bfee991d8acc72d060d53860f356e07a50f0e0d09a8dfedea1c554dd0d5"}, + {file = "aiohttp-3.11.11-cp313-cp313-win32.whl", hash = "sha256:9d73ee3725b7a737ad86c2eac5c57a4a97793d9f442599bea5ec67ac9f4bdc3d"}, + {file = "aiohttp-3.11.11-cp313-cp313-win_amd64.whl", hash = "sha256:c7a06301c2fb096bdb0bd25fe2011531c1453b9f2c163c8031600ec73af1cc99"}, + {file = "aiohttp-3.11.11-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3e23419d832d969f659c208557de4a123e30a10d26e1e14b73431d3c13444c2e"}, + {file = "aiohttp-3.11.11-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:21fef42317cf02e05d3b09c028712e1d73a9606f02467fd803f7c1f39cc59add"}, + {file = "aiohttp-3.11.11-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1f21bb8d0235fc10c09ce1d11ffbd40fc50d3f08a89e4cf3a0c503dc2562247a"}, + {file = "aiohttp-3.11.11-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1642eceeaa5ab6c9b6dfeaaa626ae314d808188ab23ae196a34c9d97efb68350"}, + {file = "aiohttp-3.11.11-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2170816e34e10f2fd120f603e951630f8a112e1be3b60963a1f159f5699059a6"}, + {file = "aiohttp-3.11.11-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8be8508d110d93061197fd2d6a74f7401f73b6d12f8822bbcd6d74f2b55d71b1"}, + {file = "aiohttp-3.11.11-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4eed954b161e6b9b65f6be446ed448ed3921763cc432053ceb606f89d793927e"}, + {file = "aiohttp-3.11.11-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6c9af134da4bc9b3bd3e6a70072509f295d10ee60c697826225b60b9959acdd"}, + {file = "aiohttp-3.11.11-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:44167fc6a763d534a6908bdb2592269b4bf30a03239bcb1654781adf5e49caf1"}, + {file = "aiohttp-3.11.11-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:479b8c6ebd12aedfe64563b85920525d05d394b85f166b7873c8bde6da612f9c"}, + {file = "aiohttp-3.11.11-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:10b4ff0ad793d98605958089fabfa350e8e62bd5d40aa65cdc69d6785859f94e"}, + {file = "aiohttp-3.11.11-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:b540bd67cfb54e6f0865ceccd9979687210d7ed1a1cc8c01f8e67e2f1e883d28"}, + {file = "aiohttp-3.11.11-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1dac54e8ce2ed83b1f6b1a54005c87dfed139cf3f777fdc8afc76e7841101226"}, + {file = "aiohttp-3.11.11-cp39-cp39-win32.whl", hash = "sha256:568c1236b2fde93b7720f95a890741854c1200fba4a3471ff48b2934d2d93fd3"}, + {file = "aiohttp-3.11.11-cp39-cp39-win_amd64.whl", hash = "sha256:943a8b052e54dfd6439fd7989f67fc6a7f2138d0a2cf0a7de5f18aa4fe7eb3b1"}, + {file = "aiohttp-3.11.11.tar.gz", hash = "sha256:bb49c7f1e6ebf3821a42d81d494f538107610c3a705987f53068546b0e90303e"}, +] + +[package.dependencies] +aiohappyeyeballs = ">=2.3.0" +aiosignal = ">=1.1.2" +async-timeout = {version = ">=4.0,<6.0", markers = "python_version < \"3.11\""} +attrs = ">=17.3.0" +frozenlist = ">=1.1.1" +multidict = ">=4.5,<7.0" +propcache = ">=0.2.0" +yarl = ">=1.17.0,<2.0" + +[package.extras] +speedups = ["Brotli", "aiodns (>=3.2.0)", "brotlicffi"] + +[[package]] +name = "aiosignal" +version = "1.3.2" +description = "aiosignal: a list of registered asynchronous callbacks" +optional = false +python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" +files = [ + {file = "aiosignal-1.3.2-py2.py3-none-any.whl", hash = "sha256:45cde58e409a301715980c2b01d0c28bdde3770d8290b5eb2173759d9acb31a5"}, + {file = "aiosignal-1.3.2.tar.gz", hash = "sha256:a8c255c66fafb1e499c9351d0bf32ff2d8a0321595ebac3b93713656d2436f54"}, +] + +[package.dependencies] +frozenlist = ">=1.1.0" + +[[package]] +name = "annotated-types" +version = "0.7.0" +description = "Reusable constraint types to use with typing.Annotated" +optional = false +python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" +files = [ + {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, + {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, +] [[package]] name = "anyio" -version = "4.6.2.post1" +version = "4.7.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ - {file = "anyio-4.6.2.post1-py3-none-any.whl", hash = "sha256:6d170c36fba3bdd840c73d3868c1e777e33676a69c3a72cf0a0d5d6d8009b61d"}, - {file = "anyio-4.6.2.post1.tar.gz", hash = "sha256:4c8bc31ccdb51c7f7bd251f51c609e038d63e34219b44aa86e47576389880b4c"}, + {file = "anyio-4.7.0-py3-none-any.whl", hash = "sha256:ea60c3723ab42ba6fff7e8ccb0488c898ec538ff4df1f1d5e642c3601d07e352"}, + {file = "anyio-4.7.0.tar.gz", hash = "sha256:2f834749c602966b7d456a7567cafcb309f96482b5081d14ac93ccd457f9dd48"}, ] [package.dependencies] exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} idna = ">=2.8" sniffio = ">=1.1" -typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""} +typing_extensions = {version = ">=4.5", markers = "python_version < \"3.13\""} [package.extras] -doc = ["Sphinx (>=7.4,<8.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] -test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "truststore (>=0.9.1)", "uvloop (>=0.21.0b1)"] +doc = ["Sphinx (>=7.4,<8.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx_rtd_theme"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "truststore (>=0.9.1)", "uvloop (>=0.21)"] trio = ["trio (>=0.26.1)"] [[package]] @@ -28,6 +172,8 @@ version = "0.1.4" description = "Disable App Nap on macOS >= 10.9" optional = false python-versions = ">=3.6" +groups = ["main"] +markers = "python_version <= \"3.11\" and platform_system == \"Darwin\" or python_version >= \"3.12\" and platform_system == \"Darwin\"" files = [ {file = "appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c"}, {file = "appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee"}, @@ -39,6 +185,8 @@ version = "23.1.0" description = "Argon2 for Python" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "argon2_cffi-23.1.0-py3-none-any.whl", hash = "sha256:c670642b78ba29641818ab2e68bd4e6a78ba53b7eff7b4c3815ae16abf91c7ea"}, {file = "argon2_cffi-23.1.0.tar.gz", hash = "sha256:879c3e79a2729ce768ebb7d36d4609e3a78a4ca2ec3a9f12286ca057e3d0db08"}, @@ -59,6 +207,8 @@ version = "21.2.0" description = "Low-level CFFI bindings for Argon2" optional = false python-versions = ">=3.6" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "argon2-cffi-bindings-21.2.0.tar.gz", hash = "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3"}, {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367"}, @@ -96,6 +246,8 @@ version = "1.3.0" description = "Better dates & times for Python" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80"}, {file = "arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85"}, @@ -111,21 +263,20 @@ test = ["dateparser (==1.*)", "pre-commit", "pytest", "pytest-cov", "pytest-mock [[package]] name = "asttokens" -version = "2.4.1" +version = "3.0.0" description = "Annotate AST trees with source code positions" optional = false -python-versions = "*" +python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ - {file = "asttokens-2.4.1-py2.py3-none-any.whl", hash = "sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24"}, - {file = "asttokens-2.4.1.tar.gz", hash = "sha256:b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0"}, + {file = "asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2"}, + {file = "asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7"}, ] -[package.dependencies] -six = ">=1.12.0" - [package.extras] -astroid = ["astroid (>=1,<2)", "astroid (>=2,<4)"] -test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"] +astroid = ["astroid (>=2,<4)"] +test = ["astroid (>=2,<4)", "pytest", "pytest-cov", "pytest-xdist"] [[package]] name = "async-lru" @@ -133,6 +284,8 @@ version = "2.0.4" description = "Simple LRU cache for asyncio" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "async-lru-2.0.4.tar.gz", hash = "sha256:b8a59a5df60805ff63220b2a0c5b5393da5521b113cd5465a44eb037d81a5627"}, {file = "async_lru-2.0.4-py3-none-any.whl", hash = "sha256:ff02944ce3c288c5be660c42dbcca0742b32c3b279d6dceda655190240b99224"}, @@ -141,21 +294,36 @@ files = [ [package.dependencies] typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} +[[package]] +name = "async-timeout" +version = "5.0.1" +description = "Timeout context manager for asyncio programs" +optional = false +python-versions = ">=3.8" +groups = ["main"] +markers = "python_version < \"3.11\"" +files = [ + {file = "async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c"}, + {file = "async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3"}, +] + [[package]] name = "attrs" -version = "24.2.0" +version = "24.3.0" description = "Classes Without Boilerplate" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ - {file = "attrs-24.2.0-py3-none-any.whl", hash = "sha256:81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2"}, - {file = "attrs-24.2.0.tar.gz", hash = "sha256:5cfb1b9148b5b086569baec03f20d7b6bf3bcacc9a42bebf87ffaaca362f6346"}, + {file = "attrs-24.3.0-py3-none-any.whl", hash = "sha256:ac96cd038792094f438ad1f6ff80837353805ac950cd2aa0e0625ef19850c308"}, + {file = "attrs-24.3.0.tar.gz", hash = "sha256:8f5c07333d543103541ba7be0e2ce16eeee8130cb0b3f9238ab904ce1e85baff"}, ] [package.extras] benchmark = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins", "pytest-xdist[psutil]"] cov = ["cloudpickle", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit-uv", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier (<24.7)"] tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"] @@ -166,6 +334,8 @@ version = "2.16.0" description = "Internationalization utilities" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "babel-2.16.0-py3-none-any.whl", hash = "sha256:368b5b98b37c06b7daf6696391c3240c938b37767d4584413e8438c5c435fa8b"}, {file = "babel-2.16.0.tar.gz", hash = "sha256:d1f3554ca26605fe173f3de0c65f750f5a42f924499bf134de6423582298e316"}, @@ -180,6 +350,8 @@ version = "4.12.3" description = "Screen-scraping library" optional = false python-versions = ">=3.6.0" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "beautifulsoup4-4.12.3-py3-none-any.whl", hash = "sha256:b80878c9f40111313e55da8ba20bdba06d8fa3969fc68304167741bbf9e082ed"}, {file = "beautifulsoup4-4.12.3.tar.gz", hash = "sha256:74e3d1928edc070d21748185c46e3fb33490f22f52a3addee9aee0f4f7781051"}, @@ -195,12 +367,35 @@ charset-normalizer = ["charset-normalizer"] html5lib = ["html5lib"] lxml = ["lxml"] +[[package]] +name = "bioblend" +version = "1.4.0" +description = "Library for interacting with the Galaxy API" +optional = false +python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" +files = [ + {file = "bioblend-1.4.0-py3-none-any.whl", hash = "sha256:20886e5f7658e1dc3e025cedb4be88538342374afba583ce4e2acb5c14a25c63"}, + {file = "bioblend-1.4.0.tar.gz", hash = "sha256:175d49d288e27d132ff59c870551c87cd95d7747be55ab94807c563291a3fa1d"}, +] + +[package.dependencies] +requests = ">=2.20.0" +requests-toolbelt = ">=0.5.1,<0.9.0 || >0.9.0" +tuspy = "*" + +[package.extras] +testing = ["pytest"] + [[package]] name = "bleach" version = "6.2.0" description = "An easy safelist-based HTML-sanitizing tool." optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "bleach-6.2.0-py3-none-any.whl", hash = "sha256:117d9c6097a7c3d22fd578fcd8d35ff1e125df6736f554da4e432fdd63f31e5e"}, {file = "bleach-6.2.0.tar.gz", hash = "sha256:123e894118b8a599fd80d3ec1a6d4cc7ce4e5882b1317a7e1ba69b56e95f991f"}, @@ -214,13 +409,15 @@ css = ["tinycss2 (>=1.1.0,<1.5)"] [[package]] name = "certifi" -version = "2024.8.30" +version = "2024.12.14" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ - {file = "certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8"}, - {file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"}, + {file = "certifi-2024.12.14-py3-none-any.whl", hash = "sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56"}, + {file = "certifi-2024.12.14.tar.gz", hash = "sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db"}, ] [[package]] @@ -229,6 +426,8 @@ version = "1.17.1" description = "Foreign Function Interface for Python calling C code." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"}, {file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"}, @@ -308,6 +507,8 @@ version = "3.4.0" description = "Validate configuration and produce human readable error messages." optional = false python-versions = ">=3.8" +groups = ["dev"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"}, {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, @@ -319,6 +520,8 @@ version = "3.4.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7.0" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6"}, {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b"}, @@ -433,6 +636,8 @@ version = "0.4.6" description = "Cross-platform colored terminal text." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["main", "dev"] +markers = "python_version <= \"3.11\" and sys_platform == \"win32\" or python_version >= \"3.12\" and sys_platform == \"win32\"" files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, @@ -444,6 +649,8 @@ version = "0.2.2" description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3"}, {file = "comm-0.2.2.tar.gz", hash = "sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e"}, @@ -461,6 +668,8 @@ version = "1.3.1" description = "Python library for calculating contours of 2D quadrilateral grids" optional = false python-versions = ">=3.10" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "contourpy-1.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a045f341a77b77e1c5de31e74e966537bba9f3c4099b35bf4c2e3939dd54cdab"}, {file = "contourpy-1.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:500360b77259914f7805af7462e41f9cb7ca92ad38e9f94d6c8641b089338124"}, @@ -528,12 +737,93 @@ mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.11.1)", "types-Pil test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] test-no-images = ["pytest", "pytest-cov", "pytest-rerunfailures", "pytest-xdist", "wurlitzer"] +[[package]] +name = "coverage" +version = "7.6.9" +description = "Code coverage measurement for Python" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" +files = [ + {file = "coverage-7.6.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:85d9636f72e8991a1706b2b55b06c27545448baf9f6dbf51c4004609aacd7dcb"}, + {file = "coverage-7.6.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:608a7fd78c67bee8936378299a6cb9f5149bb80238c7a566fc3e6717a4e68710"}, + {file = "coverage-7.6.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96d636c77af18b5cb664ddf12dab9b15a0cfe9c0bde715da38698c8cea748bfa"}, + {file = "coverage-7.6.9-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d75cded8a3cff93da9edc31446872d2997e327921d8eed86641efafd350e1df1"}, + {file = "coverage-7.6.9-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7b15f589593110ae767ce997775d645b47e5cbbf54fd322f8ebea6277466cec"}, + {file = "coverage-7.6.9-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:44349150f6811b44b25574839b39ae35291f6496eb795b7366fef3bd3cf112d3"}, + {file = "coverage-7.6.9-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:d891c136b5b310d0e702e186d70cd16d1119ea8927347045124cb286b29297e5"}, + {file = "coverage-7.6.9-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:db1dab894cc139f67822a92910466531de5ea6034ddfd2b11c0d4c6257168073"}, + {file = "coverage-7.6.9-cp310-cp310-win32.whl", hash = "sha256:41ff7b0da5af71a51b53f501a3bac65fb0ec311ebed1632e58fc6107f03b9198"}, + {file = "coverage-7.6.9-cp310-cp310-win_amd64.whl", hash = "sha256:35371f8438028fdccfaf3570b31d98e8d9eda8bb1d6ab9473f5a390969e98717"}, + {file = "coverage-7.6.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:932fc826442132dde42ee52cf66d941f581c685a6313feebed358411238f60f9"}, + {file = "coverage-7.6.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:085161be5f3b30fd9b3e7b9a8c301f935c8313dcf928a07b116324abea2c1c2c"}, + {file = "coverage-7.6.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ccc660a77e1c2bf24ddbce969af9447a9474790160cfb23de6be4fa88e3951c7"}, + {file = "coverage-7.6.9-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c69e42c892c018cd3c8d90da61d845f50a8243062b19d228189b0224150018a9"}, + {file = "coverage-7.6.9-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0824a28ec542a0be22f60c6ac36d679e0e262e5353203bea81d44ee81fe9c6d4"}, + {file = "coverage-7.6.9-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4401ae5fc52ad8d26d2a5d8a7428b0f0c72431683f8e63e42e70606374c311a1"}, + {file = "coverage-7.6.9-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:98caba4476a6c8d59ec1eb00c7dd862ba9beca34085642d46ed503cc2d440d4b"}, + {file = "coverage-7.6.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ee5defd1733fd6ec08b168bd4f5387d5b322f45ca9e0e6c817ea6c4cd36313e3"}, + {file = "coverage-7.6.9-cp311-cp311-win32.whl", hash = "sha256:f2d1ec60d6d256bdf298cb86b78dd715980828f50c46701abc3b0a2b3f8a0dc0"}, + {file = "coverage-7.6.9-cp311-cp311-win_amd64.whl", hash = "sha256:0d59fd927b1f04de57a2ba0137166d31c1a6dd9e764ad4af552912d70428c92b"}, + {file = "coverage-7.6.9-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:99e266ae0b5d15f1ca8d278a668df6f51cc4b854513daab5cae695ed7b721cf8"}, + {file = "coverage-7.6.9-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9901d36492009a0a9b94b20e52ebfc8453bf49bb2b27bca2c9706f8b4f5a554a"}, + {file = "coverage-7.6.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abd3e72dd5b97e3af4246cdada7738ef0e608168de952b837b8dd7e90341f015"}, + {file = "coverage-7.6.9-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ff74026a461eb0660366fb01c650c1d00f833a086b336bdad7ab00cc952072b3"}, + {file = "coverage-7.6.9-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65dad5a248823a4996724a88eb51d4b31587aa7aa428562dbe459c684e5787ae"}, + {file = "coverage-7.6.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:22be16571504c9ccea919fcedb459d5ab20d41172056206eb2994e2ff06118a4"}, + {file = "coverage-7.6.9-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f957943bc718b87144ecaee70762bc2bc3f1a7a53c7b861103546d3a403f0a6"}, + {file = "coverage-7.6.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0ae1387db4aecb1f485fb70a6c0148c6cdaebb6038f1d40089b1fc84a5db556f"}, + {file = "coverage-7.6.9-cp312-cp312-win32.whl", hash = "sha256:1a330812d9cc7ac2182586f6d41b4d0fadf9be9049f350e0efb275c8ee8eb692"}, + {file = "coverage-7.6.9-cp312-cp312-win_amd64.whl", hash = "sha256:b12c6b18269ca471eedd41c1b6a1065b2f7827508edb9a7ed5555e9a56dcfc97"}, + {file = "coverage-7.6.9-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:899b8cd4781c400454f2f64f7776a5d87bbd7b3e7f7bda0cb18f857bb1334664"}, + {file = "coverage-7.6.9-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:61f70dc68bd36810972e55bbbe83674ea073dd1dcc121040a08cdf3416c5349c"}, + {file = "coverage-7.6.9-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a289d23d4c46f1a82d5db4abeb40b9b5be91731ee19a379d15790e53031c014"}, + {file = "coverage-7.6.9-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7e216d8044a356fc0337c7a2a0536d6de07888d7bcda76febcb8adc50bdbbd00"}, + {file = "coverage-7.6.9-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c026eb44f744acaa2bda7493dad903aa5bf5fc4f2554293a798d5606710055d"}, + {file = "coverage-7.6.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e77363e8425325384f9d49272c54045bbed2f478e9dd698dbc65dbc37860eb0a"}, + {file = "coverage-7.6.9-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:777abfab476cf83b5177b84d7486497e034eb9eaea0d746ce0c1268c71652077"}, + {file = "coverage-7.6.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:447af20e25fdbe16f26e84eb714ba21d98868705cb138252d28bc400381f6ffb"}, + {file = "coverage-7.6.9-cp313-cp313-win32.whl", hash = "sha256:d872ec5aeb086cbea771c573600d47944eea2dcba8be5f3ee649bfe3cb8dc9ba"}, + {file = "coverage-7.6.9-cp313-cp313-win_amd64.whl", hash = "sha256:fd1213c86e48dfdc5a0cc676551db467495a95a662d2396ecd58e719191446e1"}, + {file = "coverage-7.6.9-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:ba9e7484d286cd5a43744e5f47b0b3fb457865baf07bafc6bee91896364e1419"}, + {file = "coverage-7.6.9-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e5ea1cf0872ee455c03e5674b5bca5e3e68e159379c1af0903e89f5eba9ccc3a"}, + {file = "coverage-7.6.9-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d10e07aa2b91835d6abec555ec8b2733347956991901eea6ffac295f83a30e4"}, + {file = "coverage-7.6.9-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:13a9e2d3ee855db3dd6ea1ba5203316a1b1fd8eaeffc37c5b54987e61e4194ae"}, + {file = "coverage-7.6.9-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c38bf15a40ccf5619fa2fe8f26106c7e8e080d7760aeccb3722664c8656b030"}, + {file = "coverage-7.6.9-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d5275455b3e4627c8e7154feaf7ee0743c2e7af82f6e3b561967b1cca755a0be"}, + {file = "coverage-7.6.9-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:8f8770dfc6e2c6a2d4569f411015c8d751c980d17a14b0530da2d7f27ffdd88e"}, + {file = "coverage-7.6.9-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8d2dfa71665a29b153a9681edb1c8d9c1ea50dfc2375fb4dac99ea7e21a0bcd9"}, + {file = "coverage-7.6.9-cp313-cp313t-win32.whl", hash = "sha256:5e6b86b5847a016d0fbd31ffe1001b63355ed309651851295315031ea7eb5a9b"}, + {file = "coverage-7.6.9-cp313-cp313t-win_amd64.whl", hash = "sha256:97ddc94d46088304772d21b060041c97fc16bdda13c6c7f9d8fcd8d5ae0d8611"}, + {file = "coverage-7.6.9-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:adb697c0bd35100dc690de83154627fbab1f4f3c0386df266dded865fc50a902"}, + {file = "coverage-7.6.9-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:be57b6d56e49c2739cdf776839a92330e933dd5e5d929966fbbd380c77f060be"}, + {file = "coverage-7.6.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1592791f8204ae9166de22ba7e6705fa4ebd02936c09436a1bb85aabca3e599"}, + {file = "coverage-7.6.9-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4e12ae8cc979cf83d258acb5e1f1cf2f3f83524d1564a49d20b8bec14b637f08"}, + {file = "coverage-7.6.9-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb5555cff66c4d3d6213a296b360f9e1a8e323e74e0426b6c10ed7f4d021e464"}, + {file = "coverage-7.6.9-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:b9389a429e0e5142e69d5bf4a435dd688c14478a19bb901735cdf75e57b13845"}, + {file = "coverage-7.6.9-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:592ac539812e9b46046620341498caf09ca21023c41c893e1eb9dbda00a70cbf"}, + {file = "coverage-7.6.9-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a27801adef24cc30871da98a105f77995e13a25a505a0161911f6aafbd66e678"}, + {file = "coverage-7.6.9-cp39-cp39-win32.whl", hash = "sha256:8e3c3e38930cfb729cb8137d7f055e5a473ddaf1217966aa6238c88bd9fd50e6"}, + {file = "coverage-7.6.9-cp39-cp39-win_amd64.whl", hash = "sha256:e28bf44afa2b187cc9f41749138a64435bf340adfcacb5b2290c070ce99839d4"}, + {file = "coverage-7.6.9-pp39.pp310-none-any.whl", hash = "sha256:f3ca78518bc6bc92828cd11867b121891d75cae4ea9e908d72030609b996db1b"}, + {file = "coverage-7.6.9.tar.gz", hash = "sha256:4a8d8977b0c6ef5aeadcb644da9e69ae0dcfe66ec7f368c89c72e058bd71164d"}, +] + +[package.dependencies] +tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} + +[package.extras] +toml = ["tomli"] + [[package]] name = "cycler" version = "0.12.1" description = "Composable style cycles" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30"}, {file = "cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c"}, @@ -545,37 +835,39 @@ tests = ["pytest", "pytest-cov", "pytest-xdist"] [[package]] name = "debugpy" -version = "1.8.8" +version = "1.8.11" description = "An implementation of the Debug Adapter Protocol for Python" optional = false python-versions = ">=3.8" -files = [ - {file = "debugpy-1.8.8-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:e59b1607c51b71545cb3496876544f7186a7a27c00b436a62f285603cc68d1c6"}, - {file = "debugpy-1.8.8-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6531d952b565b7cb2fbd1ef5df3d333cf160b44f37547a4e7cf73666aca5d8d"}, - {file = "debugpy-1.8.8-cp310-cp310-win32.whl", hash = "sha256:b01f4a5e5c5fb1d34f4ccba99a20ed01eabc45a4684f4948b5db17a319dfb23f"}, - {file = "debugpy-1.8.8-cp310-cp310-win_amd64.whl", hash = "sha256:535f4fb1c024ddca5913bb0eb17880c8f24ba28aa2c225059db145ee557035e9"}, - {file = "debugpy-1.8.8-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:c399023146e40ae373753a58d1be0a98bf6397fadc737b97ad612886b53df318"}, - {file = "debugpy-1.8.8-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:09cc7b162586ea2171eea055985da2702b0723f6f907a423c9b2da5996ad67ba"}, - {file = "debugpy-1.8.8-cp311-cp311-win32.whl", hash = "sha256:eea8821d998ebeb02f0625dd0d76839ddde8cbf8152ebbe289dd7acf2cdc6b98"}, - {file = "debugpy-1.8.8-cp311-cp311-win_amd64.whl", hash = "sha256:d4483836da2a533f4b1454dffc9f668096ac0433de855f0c22cdce8c9f7e10c4"}, - {file = "debugpy-1.8.8-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:0cc94186340be87b9ac5a707184ec8f36547fb66636d1029ff4f1cc020e53996"}, - {file = "debugpy-1.8.8-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64674e95916e53c2e9540a056e5f489e0ad4872645399d778f7c598eacb7b7f9"}, - {file = "debugpy-1.8.8-cp312-cp312-win32.whl", hash = "sha256:5c6e885dbf12015aed73770f29dec7023cb310d0dc2ba8bfbeb5c8e43f80edc9"}, - {file = "debugpy-1.8.8-cp312-cp312-win_amd64.whl", hash = "sha256:19ffbd84e757a6ca0113574d1bf5a2298b3947320a3e9d7d8dc3377f02d9f864"}, - {file = "debugpy-1.8.8-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:705cd123a773d184860ed8dae99becd879dfec361098edbefb5fc0d3683eb804"}, - {file = "debugpy-1.8.8-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:890fd16803f50aa9cb1a9b9b25b5ec321656dd6b78157c74283de241993d086f"}, - {file = "debugpy-1.8.8-cp313-cp313-win32.whl", hash = "sha256:90244598214bbe704aa47556ec591d2f9869ff9e042e301a2859c57106649add"}, - {file = "debugpy-1.8.8-cp313-cp313-win_amd64.whl", hash = "sha256:4b93e4832fd4a759a0c465c967214ed0c8a6e8914bced63a28ddb0dd8c5f078b"}, - {file = "debugpy-1.8.8-cp38-cp38-macosx_14_0_x86_64.whl", hash = "sha256:143ef07940aeb8e7316de48f5ed9447644da5203726fca378f3a6952a50a9eae"}, - {file = "debugpy-1.8.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f95651bdcbfd3b27a408869a53fbefcc2bcae13b694daee5f1365b1b83a00113"}, - {file = "debugpy-1.8.8-cp38-cp38-win32.whl", hash = "sha256:26b461123a030e82602a750fb24d7801776aa81cd78404e54ab60e8b5fecdad5"}, - {file = "debugpy-1.8.8-cp38-cp38-win_amd64.whl", hash = "sha256:f3cbf1833e644a3100eadb6120f25be8a532035e8245584c4f7532937edc652a"}, - {file = "debugpy-1.8.8-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:53709d4ec586b525724819dc6af1a7703502f7e06f34ded7157f7b1f963bb854"}, - {file = "debugpy-1.8.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a9c013077a3a0000e83d97cf9cc9328d2b0bbb31f56b0e99ea3662d29d7a6a2"}, - {file = "debugpy-1.8.8-cp39-cp39-win32.whl", hash = "sha256:ffe94dd5e9a6739a75f0b85316dc185560db3e97afa6b215628d1b6a17561cb2"}, - {file = "debugpy-1.8.8-cp39-cp39-win_amd64.whl", hash = "sha256:5c0e5a38c7f9b481bf31277d2f74d2109292179081f11108e668195ef926c0f9"}, - {file = "debugpy-1.8.8-py2.py3-none-any.whl", hash = "sha256:ec684553aba5b4066d4de510859922419febc710df7bba04fe9e7ef3de15d34f"}, - {file = "debugpy-1.8.8.zip", hash = "sha256:e6355385db85cbd666be703a96ab7351bc9e6c61d694893206f8001e22aee091"}, +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" +files = [ + {file = "debugpy-1.8.11-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:2b26fefc4e31ff85593d68b9022e35e8925714a10ab4858fb1b577a8a48cb8cd"}, + {file = "debugpy-1.8.11-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61bc8b3b265e6949855300e84dc93d02d7a3a637f2aec6d382afd4ceb9120c9f"}, + {file = "debugpy-1.8.11-cp310-cp310-win32.whl", hash = "sha256:c928bbf47f65288574b78518449edaa46c82572d340e2750889bbf8cd92f3737"}, + {file = "debugpy-1.8.11-cp310-cp310-win_amd64.whl", hash = "sha256:8da1db4ca4f22583e834dcabdc7832e56fe16275253ee53ba66627b86e304da1"}, + {file = "debugpy-1.8.11-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:85de8474ad53ad546ff1c7c7c89230db215b9b8a02754d41cb5a76f70d0be296"}, + {file = "debugpy-1.8.11-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ffc382e4afa4aee367bf413f55ed17bd91b191dcaf979890af239dda435f2a1"}, + {file = "debugpy-1.8.11-cp311-cp311-win32.whl", hash = "sha256:40499a9979c55f72f4eb2fc38695419546b62594f8af194b879d2a18439c97a9"}, + {file = "debugpy-1.8.11-cp311-cp311-win_amd64.whl", hash = "sha256:987bce16e86efa86f747d5151c54e91b3c1e36acc03ce1ddb50f9d09d16ded0e"}, + {file = "debugpy-1.8.11-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:84e511a7545d11683d32cdb8f809ef63fc17ea2a00455cc62d0a4dbb4ed1c308"}, + {file = "debugpy-1.8.11-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce291a5aca4985d82875d6779f61375e959208cdf09fcec40001e65fb0a54768"}, + {file = "debugpy-1.8.11-cp312-cp312-win32.whl", hash = "sha256:28e45b3f827d3bf2592f3cf7ae63282e859f3259db44ed2b129093ca0ac7940b"}, + {file = "debugpy-1.8.11-cp312-cp312-win_amd64.whl", hash = "sha256:44b1b8e6253bceada11f714acf4309ffb98bfa9ac55e4fce14f9e5d4484287a1"}, + {file = "debugpy-1.8.11-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:8988f7163e4381b0da7696f37eec7aca19deb02e500245df68a7159739bbd0d3"}, + {file = "debugpy-1.8.11-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c1f6a173d1140e557347419767d2b14ac1c9cd847e0b4c5444c7f3144697e4e"}, + {file = "debugpy-1.8.11-cp313-cp313-win32.whl", hash = "sha256:bb3b15e25891f38da3ca0740271e63ab9db61f41d4d8541745cfc1824252cb28"}, + {file = "debugpy-1.8.11-cp313-cp313-win_amd64.whl", hash = "sha256:d8768edcbeb34da9e11bcb8b5c2e0958d25218df7a6e56adf415ef262cd7b6d1"}, + {file = "debugpy-1.8.11-cp38-cp38-macosx_14_0_x86_64.whl", hash = "sha256:ad7efe588c8f5cf940f40c3de0cd683cc5b76819446abaa50dc0829a30c094db"}, + {file = "debugpy-1.8.11-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:189058d03a40103a57144752652b3ab08ff02b7595d0ce1f651b9acc3a3a35a0"}, + {file = "debugpy-1.8.11-cp38-cp38-win32.whl", hash = "sha256:32db46ba45849daed7ccf3f2e26f7a386867b077f39b2a974bb5c4c2c3b0a280"}, + {file = "debugpy-1.8.11-cp38-cp38-win_amd64.whl", hash = "sha256:116bf8342062246ca749013df4f6ea106f23bc159305843491f64672a55af2e5"}, + {file = "debugpy-1.8.11-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:654130ca6ad5de73d978057eaf9e582244ff72d4574b3e106fb8d3d2a0d32458"}, + {file = "debugpy-1.8.11-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23dc34c5e03b0212fa3c49a874df2b8b1b8fda95160bd79c01eb3ab51ea8d851"}, + {file = "debugpy-1.8.11-cp39-cp39-win32.whl", hash = "sha256:52d8a3166c9f2815bfae05f386114b0b2d274456980d41f320299a8d9a5615a7"}, + {file = "debugpy-1.8.11-cp39-cp39-win_amd64.whl", hash = "sha256:52c3cf9ecda273a19cc092961ee34eb9ba8687d67ba34cc7b79a521c1c64c4c0"}, + {file = "debugpy-1.8.11-py2.py3-none-any.whl", hash = "sha256:0e22f846f4211383e6a416d04b4c13ed174d24cc5d43f5fd52e7821d0ebc8920"}, + {file = "debugpy-1.8.11.tar.gz", hash = "sha256:6ad2688b69235c43b020e04fecccdf6a96c8943ca9c2fb340b8adc103c655e57"}, ] [[package]] @@ -584,6 +876,8 @@ version = "5.1.1" description = "Decorators for Humans" optional = false python-versions = ">=3.5" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, @@ -595,6 +889,8 @@ version = "0.7.1" description = "XML bomb protection for Python stdlib modules" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, @@ -606,6 +902,8 @@ version = "0.3.9" description = "Distribution utilities" optional = false python-versions = "*" +groups = ["dev"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87"}, {file = "distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403"}, @@ -617,6 +915,8 @@ version = "1.2.2" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" +groups = ["main", "dev"] +markers = "python_version < \"3.11\"" files = [ {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, @@ -631,6 +931,8 @@ version = "2.1.0" description = "Get the currently executing AST node of a frame, and other information" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "executing-2.1.0-py2.py3-none-any.whl", hash = "sha256:8d63781349375b5ebccc3142f4b30350c0cd9c79f921cde38be2be4637e98eaf"}, {file = "executing-2.1.0.tar.gz", hash = "sha256:8ea27ddd260da8150fa5a708269c4a10e76161e2496ec3e587da9e3c0fe4b9ab"}, @@ -641,13 +943,15 @@ tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipyth [[package]] name = "fastjsonschema" -version = "2.20.0" +version = "2.21.1" description = "Fastest Python implementation of JSON schema" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ - {file = "fastjsonschema-2.20.0-py3-none-any.whl", hash = "sha256:5875f0b0fa7a0043a91e93a9b8f793bcbbba9691e7fd83dca95c28ba26d21f0a"}, - {file = "fastjsonschema-2.20.0.tar.gz", hash = "sha256:3d48fc5300ee96f5d116f10fe6f28d938e6008f59a6a025c2649475b87f76a23"}, + {file = "fastjsonschema-2.21.1-py3-none-any.whl", hash = "sha256:c9e5b7e908310918cf494a434eeb31384dd84a98b57a30bcb1f535015b554667"}, + {file = "fastjsonschema-2.21.1.tar.gz", hash = "sha256:794d4f0a58f848961ba16af7b9c85a3e88cd360df008c59aac6fc5ae9323b5d4"}, ] [package.extras] @@ -659,6 +963,8 @@ version = "3.16.1" description = "A platform independent file lock." optional = false python-versions = ">=3.8" +groups = ["dev"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "filelock-3.16.1-py3-none-any.whl", hash = "sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0"}, {file = "filelock-3.16.1.tar.gz", hash = "sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435"}, @@ -671,61 +977,63 @@ typing = ["typing-extensions (>=4.12.2)"] [[package]] name = "fonttools" -version = "4.55.0" +version = "4.55.3" description = "Tools to manipulate font files" optional = false python-versions = ">=3.8" -files = [ - {file = "fonttools-4.55.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:51c029d4c0608a21a3d3d169dfc3fb776fde38f00b35ca11fdab63ba10a16f61"}, - {file = "fonttools-4.55.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bca35b4e411362feab28e576ea10f11268b1aeed883b9f22ed05675b1e06ac69"}, - {file = "fonttools-4.55.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ce4ba6981e10f7e0ccff6348e9775ce25ffadbee70c9fd1a3737e3e9f5fa74f"}, - {file = "fonttools-4.55.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31d00f9852a6051dac23294a4cf2df80ced85d1d173a61ba90a3d8f5abc63c60"}, - {file = "fonttools-4.55.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e198e494ca6e11f254bac37a680473a311a88cd40e58f9cc4dc4911dfb686ec6"}, - {file = "fonttools-4.55.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7208856f61770895e79732e1dcbe49d77bd5783adf73ae35f87fcc267df9db81"}, - {file = "fonttools-4.55.0-cp310-cp310-win32.whl", hash = "sha256:e7e6a352ff9e46e8ef8a3b1fe2c4478f8a553e1b5a479f2e899f9dc5f2055880"}, - {file = "fonttools-4.55.0-cp310-cp310-win_amd64.whl", hash = "sha256:636caaeefe586d7c84b5ee0734c1a5ab2dae619dc21c5cf336f304ddb8f6001b"}, - {file = "fonttools-4.55.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:fa34aa175c91477485c44ddfbb51827d470011e558dfd5c7309eb31bef19ec51"}, - {file = "fonttools-4.55.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:37dbb3fdc2ef7302d3199fb12468481cbebaee849e4b04bc55b77c24e3c49189"}, - {file = "fonttools-4.55.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5263d8e7ef3c0ae87fbce7f3ec2f546dc898d44a337e95695af2cd5ea21a967"}, - {file = "fonttools-4.55.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f307f6b5bf9e86891213b293e538d292cd1677e06d9faaa4bf9c086ad5f132f6"}, - {file = "fonttools-4.55.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:f0a4b52238e7b54f998d6a56b46a2c56b59c74d4f8a6747fb9d4042190f37cd3"}, - {file = "fonttools-4.55.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3e569711464f777a5d4ef522e781dc33f8095ab5efd7548958b36079a9f2f88c"}, - {file = "fonttools-4.55.0-cp311-cp311-win32.whl", hash = "sha256:2b3ab90ec0f7b76c983950ac601b58949f47aca14c3f21eed858b38d7ec42b05"}, - {file = "fonttools-4.55.0-cp311-cp311-win_amd64.whl", hash = "sha256:aa046f6a63bb2ad521004b2769095d4c9480c02c1efa7d7796b37826508980b6"}, - {file = "fonttools-4.55.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:838d2d8870f84fc785528a692e724f2379d5abd3fc9dad4d32f91cf99b41e4a7"}, - {file = "fonttools-4.55.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f46b863d74bab7bb0d395f3b68d3f52a03444964e67ce5c43ce43a75efce9246"}, - {file = "fonttools-4.55.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33b52a9cfe4e658e21b1f669f7309b4067910321757fec53802ca8f6eae96a5a"}, - {file = "fonttools-4.55.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:732a9a63d6ea4a81b1b25a1f2e5e143761b40c2e1b79bb2b68e4893f45139a40"}, - {file = "fonttools-4.55.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7dd91ac3fcb4c491bb4763b820bcab6c41c784111c24172616f02f4bc227c17d"}, - {file = "fonttools-4.55.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1f0e115281a32ff532118aa851ef497a1b7cda617f4621c1cdf81ace3e36fb0c"}, - {file = "fonttools-4.55.0-cp312-cp312-win32.whl", hash = "sha256:6c99b5205844f48a05cb58d4a8110a44d3038c67ed1d79eb733c4953c628b0f6"}, - {file = "fonttools-4.55.0-cp312-cp312-win_amd64.whl", hash = "sha256:f8c8c76037d05652510ae45be1cd8fb5dd2fd9afec92a25374ac82255993d57c"}, - {file = "fonttools-4.55.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8118dc571921dc9e4b288d9cb423ceaf886d195a2e5329cc427df82bba872cd9"}, - {file = "fonttools-4.55.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:01124f2ca6c29fad4132d930da69158d3f49b2350e4a779e1efbe0e82bd63f6c"}, - {file = "fonttools-4.55.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81ffd58d2691f11f7c8438796e9f21c374828805d33e83ff4b76e4635633674c"}, - {file = "fonttools-4.55.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5435e5f1eb893c35c2bc2b9cd3c9596b0fcb0a59e7a14121562986dd4c47b8dd"}, - {file = "fonttools-4.55.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d12081729280c39d001edd0f4f06d696014c26e6e9a0a55488fabc37c28945e4"}, - {file = "fonttools-4.55.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a7ad1f1b98ab6cb927ab924a38a8649f1ffd7525c75fe5b594f5dab17af70e18"}, - {file = "fonttools-4.55.0-cp313-cp313-win32.whl", hash = "sha256:abe62987c37630dca69a104266277216de1023cf570c1643bb3a19a9509e7a1b"}, - {file = "fonttools-4.55.0-cp313-cp313-win_amd64.whl", hash = "sha256:2863555ba90b573e4201feaf87a7e71ca3b97c05aa4d63548a4b69ea16c9e998"}, - {file = "fonttools-4.55.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:00f7cf55ad58a57ba421b6a40945b85ac7cc73094fb4949c41171d3619a3a47e"}, - {file = "fonttools-4.55.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f27526042efd6f67bfb0cc2f1610fa20364396f8b1fc5edb9f45bb815fb090b2"}, - {file = "fonttools-4.55.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8e67974326af6a8879dc2a4ec63ab2910a1c1a9680ccd63e4a690950fceddbe"}, - {file = "fonttools-4.55.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61dc0a13451143c5e987dec5254d9d428f3c2789a549a7cf4f815b63b310c1cc"}, - {file = "fonttools-4.55.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:b2e526b325a903868c62155a6a7e24df53f6ce4c5c3160214d8fe1be2c41b478"}, - {file = "fonttools-4.55.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:b7ef9068a1297714e6fefe5932c33b058aa1d45a2b8be32a4c6dee602ae22b5c"}, - {file = "fonttools-4.55.0-cp38-cp38-win32.whl", hash = "sha256:55718e8071be35dff098976bc249fc243b58efa263768c611be17fe55975d40a"}, - {file = "fonttools-4.55.0-cp38-cp38-win_amd64.whl", hash = "sha256:553bd4f8cc327f310c20158e345e8174c8eed49937fb047a8bda51daf2c353c8"}, - {file = "fonttools-4.55.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3f901cef813f7c318b77d1c5c14cf7403bae5cb977cede023e22ba4316f0a8f6"}, - {file = "fonttools-4.55.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8c9679fc0dd7e8a5351d321d8d29a498255e69387590a86b596a45659a39eb0d"}, - {file = "fonttools-4.55.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd2820a8b632f3307ebb0bf57948511c2208e34a4939cf978333bc0a3f11f838"}, - {file = "fonttools-4.55.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23bbbb49bec613a32ed1b43df0f2b172313cee690c2509f1af8fdedcf0a17438"}, - {file = "fonttools-4.55.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:a656652e1f5d55b9728937a7e7d509b73d23109cddd4e89ee4f49bde03b736c6"}, - {file = "fonttools-4.55.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f50a1f455902208486fbca47ce33054208a4e437b38da49d6721ce2fef732fcf"}, - {file = "fonttools-4.55.0-cp39-cp39-win32.whl", hash = "sha256:161d1ac54c73d82a3cded44202d0218ab007fde8cf194a23d3dd83f7177a2f03"}, - {file = "fonttools-4.55.0-cp39-cp39-win_amd64.whl", hash = "sha256:ca7fd6987c68414fece41c96836e945e1f320cda56fc96ffdc16e54a44ec57a2"}, - {file = "fonttools-4.55.0-py3-none-any.whl", hash = "sha256:12db5888cd4dd3fcc9f0ee60c6edd3c7e1fd44b7dd0f31381ea03df68f8a153f"}, - {file = "fonttools-4.55.0.tar.gz", hash = "sha256:7636acc6ab733572d5e7eec922b254ead611f1cdad17be3f0be7418e8bfaca71"}, +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" +files = [ + {file = "fonttools-4.55.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1dcc07934a2165ccdc3a5a608db56fb3c24b609658a5b340aee4ecf3ba679dc0"}, + {file = "fonttools-4.55.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f7d66c15ba875432a2d2fb419523f5d3d347f91f48f57b8b08a2dfc3c39b8a3f"}, + {file = "fonttools-4.55.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27e4ae3592e62eba83cd2c4ccd9462dcfa603ff78e09110680a5444c6925d841"}, + {file = "fonttools-4.55.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62d65a3022c35e404d19ca14f291c89cc5890032ff04f6c17af0bd1927299674"}, + {file = "fonttools-4.55.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d342e88764fb201286d185093781bf6628bbe380a913c24adf772d901baa8276"}, + {file = "fonttools-4.55.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:dd68c87a2bfe37c5b33bcda0fba39b65a353876d3b9006fde3adae31f97b3ef5"}, + {file = "fonttools-4.55.3-cp310-cp310-win32.whl", hash = "sha256:1bc7ad24ff98846282eef1cbeac05d013c2154f977a79886bb943015d2b1b261"}, + {file = "fonttools-4.55.3-cp310-cp310-win_amd64.whl", hash = "sha256:b54baf65c52952db65df39fcd4820668d0ef4766c0ccdf32879b77f7c804d5c5"}, + {file = "fonttools-4.55.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8c4491699bad88efe95772543cd49870cf756b019ad56294f6498982408ab03e"}, + {file = "fonttools-4.55.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5323a22eabddf4b24f66d26894f1229261021dacd9d29e89f7872dd8c63f0b8b"}, + {file = "fonttools-4.55.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5480673f599ad410695ca2ddef2dfefe9df779a9a5cda89503881e503c9c7d90"}, + {file = "fonttools-4.55.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da9da6d65cd7aa6b0f806556f4985bcbf603bf0c5c590e61b43aa3e5a0f822d0"}, + {file = "fonttools-4.55.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e894b5bd60d9f473bed7a8f506515549cc194de08064d829464088d23097331b"}, + {file = "fonttools-4.55.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:aee3b57643827e237ff6ec6d28d9ff9766bd8b21e08cd13bff479e13d4b14765"}, + {file = "fonttools-4.55.3-cp311-cp311-win32.whl", hash = "sha256:eb6ca911c4c17eb51853143624d8dc87cdcdf12a711fc38bf5bd21521e79715f"}, + {file = "fonttools-4.55.3-cp311-cp311-win_amd64.whl", hash = "sha256:6314bf82c54c53c71805318fcf6786d986461622dd926d92a465199ff54b1b72"}, + {file = "fonttools-4.55.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:f9e736f60f4911061235603a6119e72053073a12c6d7904011df2d8fad2c0e35"}, + {file = "fonttools-4.55.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7a8aa2c5e5b8b3bcb2e4538d929f6589a5c6bdb84fd16e2ed92649fb5454f11c"}, + {file = "fonttools-4.55.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07f8288aacf0a38d174445fc78377a97fb0b83cfe352a90c9d9c1400571963c7"}, + {file = "fonttools-4.55.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8d5e8916c0970fbc0f6f1bece0063363bb5857a7f170121a4493e31c3db3314"}, + {file = "fonttools-4.55.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ae3b6600565b2d80b7c05acb8e24d2b26ac407b27a3f2e078229721ba5698427"}, + {file = "fonttools-4.55.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:54153c49913f45065c8d9e6d0c101396725c5621c8aee744719300f79771d75a"}, + {file = "fonttools-4.55.3-cp312-cp312-win32.whl", hash = "sha256:827e95fdbbd3e51f8b459af5ea10ecb4e30af50221ca103bea68218e9615de07"}, + {file = "fonttools-4.55.3-cp312-cp312-win_amd64.whl", hash = "sha256:e6e8766eeeb2de759e862004aa11a9ea3d6f6d5ec710551a88b476192b64fd54"}, + {file = "fonttools-4.55.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a430178ad3e650e695167cb53242dae3477b35c95bef6525b074d87493c4bf29"}, + {file = "fonttools-4.55.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:529cef2ce91dc44f8e407cc567fae6e49a1786f2fefefa73a294704c415322a4"}, + {file = "fonttools-4.55.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e75f12c82127486fac2d8bfbf5bf058202f54bf4f158d367e41647b972342ca"}, + {file = "fonttools-4.55.3-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:859c358ebf41db18fb72342d3080bce67c02b39e86b9fbcf1610cca14984841b"}, + {file = "fonttools-4.55.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:546565028e244a701f73df6d8dd6be489d01617863ec0c6a42fa25bf45d43048"}, + {file = "fonttools-4.55.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:aca318b77f23523309eec4475d1fbbb00a6b133eb766a8bdc401faba91261abe"}, + {file = "fonttools-4.55.3-cp313-cp313-win32.whl", hash = "sha256:8c5ec45428edaa7022f1c949a632a6f298edc7b481312fc7dc258921e9399628"}, + {file = "fonttools-4.55.3-cp313-cp313-win_amd64.whl", hash = "sha256:11e5de1ee0d95af4ae23c1a138b184b7f06e0b6abacabf1d0db41c90b03d834b"}, + {file = "fonttools-4.55.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:caf8230f3e10f8f5d7593eb6d252a37caf58c480b19a17e250a63dad63834cf3"}, + {file = "fonttools-4.55.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b586ab5b15b6097f2fb71cafa3c98edfd0dba1ad8027229e7b1e204a58b0e09d"}, + {file = "fonttools-4.55.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a8c2794ded89399cc2169c4d0bf7941247b8d5932b2659e09834adfbb01589aa"}, + {file = "fonttools-4.55.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf4fe7c124aa3f4e4c1940880156e13f2f4d98170d35c749e6b4f119a872551e"}, + {file = "fonttools-4.55.3-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:86721fbc389ef5cc1e2f477019e5069e8e4421e8d9576e9c26f840dbb04678de"}, + {file = "fonttools-4.55.3-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:89bdc5d88bdeec1b15af790810e267e8332d92561dce4f0748c2b95c9bdf3926"}, + {file = "fonttools-4.55.3-cp38-cp38-win32.whl", hash = "sha256:bc5dbb4685e51235ef487e4bd501ddfc49be5aede5e40f4cefcccabc6e60fb4b"}, + {file = "fonttools-4.55.3-cp38-cp38-win_amd64.whl", hash = "sha256:cd70de1a52a8ee2d1877b6293af8a2484ac82514f10b1c67c1c5762d38073e56"}, + {file = "fonttools-4.55.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bdcc9f04b36c6c20978d3f060e5323a43f6222accc4e7fcbef3f428e216d96af"}, + {file = "fonttools-4.55.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c3ca99e0d460eff46e033cd3992a969658c3169ffcd533e0a39c63a38beb6831"}, + {file = "fonttools-4.55.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22f38464daa6cdb7b6aebd14ab06609328fe1e9705bb0fcc7d1e69de7109ee02"}, + {file = "fonttools-4.55.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed63959d00b61959b035c7d47f9313c2c1ece090ff63afea702fe86de00dbed4"}, + {file = "fonttools-4.55.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5e8d657cd7326eeaba27de2740e847c6b39dde2f8d7cd7cc56f6aad404ddf0bd"}, + {file = "fonttools-4.55.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:fb594b5a99943042c702c550d5494bdd7577f6ef19b0bc73877c948a63184a32"}, + {file = "fonttools-4.55.3-cp39-cp39-win32.whl", hash = "sha256:dc5294a3d5c84226e3dbba1b6f61d7ad813a8c0238fceea4e09aa04848c3d851"}, + {file = "fonttools-4.55.3-cp39-cp39-win_amd64.whl", hash = "sha256:aedbeb1db64496d098e6be92b2e63b5fac4e53b1b92032dfc6988e1ea9134a4d"}, + {file = "fonttools-4.55.3-py3-none-any.whl", hash = "sha256:f412604ccbeee81b091b420272841e5ec5ef68967a9790e80bffd0e30b8e2977"}, + {file = "fonttools-4.55.3.tar.gz", hash = "sha256:3983313c2a04d6cc1fe9251f8fc647754cf49a61dac6cb1e7249ae67afaafc45"}, ] [package.extras] @@ -748,17 +1056,124 @@ version = "1.5.1" description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" optional = false python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014"}, {file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"}, ] +[[package]] +name = "frozenlist" +version = "1.5.0" +description = "A list-like structure which implements collections.abc.MutableSequence" +optional = false +python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" +files = [ + {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5b6a66c18b5b9dd261ca98dffcb826a525334b2f29e7caa54e182255c5f6a65a"}, + {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d1b3eb7b05ea246510b43a7e53ed1653e55c2121019a97e60cad7efb881a97bb"}, + {file = "frozenlist-1.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:15538c0cbf0e4fa11d1e3a71f823524b0c46299aed6e10ebb4c2089abd8c3bec"}, + {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e79225373c317ff1e35f210dd5f1344ff31066ba8067c307ab60254cd3a78ad5"}, + {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9272fa73ca71266702c4c3e2d4a28553ea03418e591e377a03b8e3659d94fa76"}, + {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:498524025a5b8ba81695761d78c8dd7382ac0b052f34e66939c42df860b8ff17"}, + {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:92b5278ed9d50fe610185ecd23c55d8b307d75ca18e94c0e7de328089ac5dcba"}, + {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f3c8c1dacd037df16e85227bac13cca58c30da836c6f936ba1df0c05d046d8d"}, + {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f2ac49a9bedb996086057b75bf93538240538c6d9b38e57c82d51f75a73409d2"}, + {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e66cc454f97053b79c2ab09c17fbe3c825ea6b4de20baf1be28919460dd7877f"}, + {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:5a3ba5f9a0dfed20337d3e966dc359784c9f96503674c2faf015f7fe8e96798c"}, + {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6321899477db90bdeb9299ac3627a6a53c7399c8cd58d25da094007402b039ab"}, + {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:76e4753701248476e6286f2ef492af900ea67d9706a0155335a40ea21bf3b2f5"}, + {file = "frozenlist-1.5.0-cp310-cp310-win32.whl", hash = "sha256:977701c081c0241d0955c9586ffdd9ce44f7a7795df39b9151cd9a6fd0ce4cfb"}, + {file = "frozenlist-1.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:189f03b53e64144f90990d29a27ec4f7997d91ed3d01b51fa39d2dbe77540fd4"}, + {file = "frozenlist-1.5.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:fd74520371c3c4175142d02a976aee0b4cb4a7cc912a60586ffd8d5929979b30"}, + {file = "frozenlist-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2f3f7a0fbc219fb4455264cae4d9f01ad41ae6ee8524500f381de64ffaa077d5"}, + {file = "frozenlist-1.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f47c9c9028f55a04ac254346e92977bf0f166c483c74b4232bee19a6697e4778"}, + {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0996c66760924da6e88922756d99b47512a71cfd45215f3570bf1e0b694c206a"}, + {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a2fe128eb4edeabe11896cb6af88fca5346059f6c8d807e3b910069f39157869"}, + {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1a8ea951bbb6cacd492e3948b8da8c502a3f814f5d20935aae74b5df2b19cf3d"}, + {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de537c11e4aa01d37db0d403b57bd6f0546e71a82347a97c6a9f0dcc532b3a45"}, + {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c2623347b933fcb9095841f1cc5d4ff0b278addd743e0e966cb3d460278840d"}, + {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cee6798eaf8b1416ef6909b06f7dc04b60755206bddc599f52232606e18179d3"}, + {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f5f9da7f5dbc00a604fe74aa02ae7c98bcede8a3b8b9666f9f86fc13993bc71a"}, + {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:90646abbc7a5d5c7c19461d2e3eeb76eb0b204919e6ece342feb6032c9325ae9"}, + {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:bdac3c7d9b705d253b2ce370fde941836a5f8b3c5c2b8fd70940a3ea3af7f4f2"}, + {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:03d33c2ddbc1816237a67f66336616416e2bbb6beb306e5f890f2eb22b959cdf"}, + {file = "frozenlist-1.5.0-cp311-cp311-win32.whl", hash = "sha256:237f6b23ee0f44066219dae14c70ae38a63f0440ce6750f868ee08775073f942"}, + {file = "frozenlist-1.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:0cc974cc93d32c42e7b0f6cf242a6bd941c57c61b618e78b6c0a96cb72788c1d"}, + {file = "frozenlist-1.5.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:31115ba75889723431aa9a4e77d5f398f5cf976eea3bdf61749731f62d4a4a21"}, + {file = "frozenlist-1.5.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7437601c4d89d070eac8323f121fcf25f88674627505334654fd027b091db09d"}, + {file = "frozenlist-1.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7948140d9f8ece1745be806f2bfdf390127cf1a763b925c4a805c603df5e697e"}, + {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:feeb64bc9bcc6b45c6311c9e9b99406660a9c05ca8a5b30d14a78555088b0b3a"}, + {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:683173d371daad49cffb8309779e886e59c2f369430ad28fe715f66d08d4ab1a"}, + {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7d57d8f702221405a9d9b40f9da8ac2e4a1a8b5285aac6100f3393675f0a85ee"}, + {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30c72000fbcc35b129cb09956836c7d7abf78ab5416595e4857d1cae8d6251a6"}, + {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:000a77d6034fbad9b6bb880f7ec073027908f1b40254b5d6f26210d2dab1240e"}, + {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5d7f5a50342475962eb18b740f3beecc685a15b52c91f7d975257e13e029eca9"}, + {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:87f724d055eb4785d9be84e9ebf0f24e392ddfad00b3fe036e43f489fafc9039"}, + {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:6e9080bb2fb195a046e5177f10d9d82b8a204c0736a97a153c2466127de87784"}, + {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9b93d7aaa36c966fa42efcaf716e6b3900438632a626fb09c049f6a2f09fc631"}, + {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:52ef692a4bc60a6dd57f507429636c2af8b6046db8b31b18dac02cbc8f507f7f"}, + {file = "frozenlist-1.5.0-cp312-cp312-win32.whl", hash = "sha256:29d94c256679247b33a3dc96cce0f93cbc69c23bf75ff715919332fdbb6a32b8"}, + {file = "frozenlist-1.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:8969190d709e7c48ea386db202d708eb94bdb29207a1f269bab1196ce0dcca1f"}, + {file = "frozenlist-1.5.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:7a1a048f9215c90973402e26c01d1cff8a209e1f1b53f72b95c13db61b00f953"}, + {file = "frozenlist-1.5.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:dd47a5181ce5fcb463b5d9e17ecfdb02b678cca31280639255ce9d0e5aa67af0"}, + {file = "frozenlist-1.5.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1431d60b36d15cda188ea222033eec8e0eab488f39a272461f2e6d9e1a8e63c2"}, + {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6482a5851f5d72767fbd0e507e80737f9c8646ae7fd303def99bfe813f76cf7f"}, + {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:44c49271a937625619e862baacbd037a7ef86dd1ee215afc298a417ff3270608"}, + {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:12f78f98c2f1c2429d42e6a485f433722b0061d5c0b0139efa64f396efb5886b"}, + {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ce3aa154c452d2467487765e3adc730a8c153af77ad84096bc19ce19a2400840"}, + {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b7dc0c4338e6b8b091e8faf0db3168a37101943e687f373dce00959583f7439"}, + {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:45e0896250900b5aa25180f9aec243e84e92ac84bd4a74d9ad4138ef3f5c97de"}, + {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:561eb1c9579d495fddb6da8959fd2a1fca2c6d060d4113f5844b433fc02f2641"}, + {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:df6e2f325bfee1f49f81aaac97d2aa757c7646534a06f8f577ce184afe2f0a9e"}, + {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:140228863501b44b809fb39ec56b5d4071f4d0aa6d216c19cbb08b8c5a7eadb9"}, + {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7707a25d6a77f5d27ea7dc7d1fc608aa0a478193823f88511ef5e6b8a48f9d03"}, + {file = "frozenlist-1.5.0-cp313-cp313-win32.whl", hash = "sha256:31a9ac2b38ab9b5a8933b693db4939764ad3f299fcaa931a3e605bc3460e693c"}, + {file = "frozenlist-1.5.0-cp313-cp313-win_amd64.whl", hash = "sha256:11aabdd62b8b9c4b84081a3c246506d1cddd2dd93ff0ad53ede5defec7886b28"}, + {file = "frozenlist-1.5.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:dd94994fc91a6177bfaafd7d9fd951bc8689b0a98168aa26b5f543868548d3ca"}, + {file = "frozenlist-1.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2d0da8bbec082bf6bf18345b180958775363588678f64998c2b7609e34719b10"}, + {file = "frozenlist-1.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:73f2e31ea8dd7df61a359b731716018c2be196e5bb3b74ddba107f694fbd7604"}, + {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:828afae9f17e6de596825cf4228ff28fbdf6065974e5ac1410cecc22f699d2b3"}, + {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f1577515d35ed5649d52ab4319db757bb881ce3b2b796d7283e6634d99ace307"}, + {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2150cc6305a2c2ab33299453e2968611dacb970d2283a14955923062c8d00b10"}, + {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a72b7a6e3cd2725eff67cd64c8f13335ee18fc3c7befc05aed043d24c7b9ccb9"}, + {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c16d2fa63e0800723139137d667e1056bee1a1cf7965153d2d104b62855e9b99"}, + {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:17dcc32fc7bda7ce5875435003220a457bcfa34ab7924a49a1c19f55b6ee185c"}, + {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:97160e245ea33d8609cd2b8fd997c850b56db147a304a262abc2b3be021a9171"}, + {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:f1e6540b7fa044eee0bb5111ada694cf3dc15f2b0347ca125ee9ca984d5e9e6e"}, + {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:91d6c171862df0a6c61479d9724f22efb6109111017c87567cfeb7b5d1449fdf"}, + {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c1fac3e2ace2eb1052e9f7c7db480818371134410e1f5c55d65e8f3ac6d1407e"}, + {file = "frozenlist-1.5.0-cp38-cp38-win32.whl", hash = "sha256:b97f7b575ab4a8af9b7bc1d2ef7f29d3afee2226bd03ca3875c16451ad5a7723"}, + {file = "frozenlist-1.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:374ca2dabdccad8e2a76d40b1d037f5bd16824933bf7bcea3e59c891fd4a0923"}, + {file = "frozenlist-1.5.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9bbcdfaf4af7ce002694a4e10a0159d5a8d20056a12b05b45cea944a4953f972"}, + {file = "frozenlist-1.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1893f948bf6681733aaccf36c5232c231e3b5166d607c5fa77773611df6dc336"}, + {file = "frozenlist-1.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2b5e23253bb709ef57a8e95e6ae48daa9ac5f265637529e4ce6b003a37b2621f"}, + {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f253985bb515ecd89629db13cb58d702035ecd8cfbca7d7a7e29a0e6d39af5f"}, + {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:04a5c6babd5e8fb7d3c871dc8b321166b80e41b637c31a995ed844a6139942b6"}, + {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9fe0f1c29ba24ba6ff6abf688cb0b7cf1efab6b6aa6adc55441773c252f7411"}, + {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:226d72559fa19babe2ccd920273e767c96a49b9d3d38badd7c91a0fdeda8ea08"}, + {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15b731db116ab3aedec558573c1a5eec78822b32292fe4f2f0345b7f697745c2"}, + {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:366d8f93e3edfe5a918c874702f78faac300209a4d5bf38352b2c1bdc07a766d"}, + {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1b96af8c582b94d381a1c1f51ffaedeb77c821c690ea5f01da3d70a487dd0a9b"}, + {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:c03eff4a41bd4e38415cbed054bbaff4a075b093e2394b6915dca34a40d1e38b"}, + {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:50cf5e7ee9b98f22bdecbabf3800ae78ddcc26e4a435515fc72d97903e8488e0"}, + {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1e76bfbc72353269c44e0bc2cfe171900fbf7f722ad74c9a7b638052afe6a00c"}, + {file = "frozenlist-1.5.0-cp39-cp39-win32.whl", hash = "sha256:666534d15ba8f0fda3f53969117383d5dc021266b3c1a42c9ec4855e4b58b9d3"}, + {file = "frozenlist-1.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:5c28f4b5dbef8a0d8aad0d4de24d1e9e981728628afaf4ea0792f5d0939372f0"}, + {file = "frozenlist-1.5.0-py3-none-any.whl", hash = "sha256:d994863bba198a4a518b467bb971c56e1db3f180a25c6cf7bb1949c267f748c3"}, + {file = "frozenlist-1.5.0.tar.gz", hash = "sha256:81d5af29e61b9c8348e876d442253723928dce6433e0e76cd925cd83f1b4b817"}, +] + [[package]] name = "h11" version = "0.14.0" description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, @@ -766,13 +1181,15 @@ files = [ [[package]] name = "httpcore" -version = "1.0.6" +version = "1.0.7" description = "A minimal low-level HTTP client." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ - {file = "httpcore-1.0.6-py3-none-any.whl", hash = "sha256:27b59625743b85577a8c0e10e55b50b5368a4f2cfe8cc7bcfa9cf00829c2682f"}, - {file = "httpcore-1.0.6.tar.gz", hash = "sha256:73f6dbd6eb8c21bbf7ef8efad555481853f5f6acdeaff1edb0694289269ee17f"}, + {file = "httpcore-1.0.7-py3-none-any.whl", hash = "sha256:a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd"}, + {file = "httpcore-1.0.7.tar.gz", hash = "sha256:8551cb62a169ec7162ac7be8d4817d561f60e08eaa485234898414bb5a8a0b4c"}, ] [package.dependencies] @@ -787,13 +1204,15 @@ trio = ["trio (>=0.22.0,<1.0)"] [[package]] name = "httpx" -version = "0.27.2" +version = "0.28.1" description = "The next generation HTTP client." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ - {file = "httpx-0.27.2-py3-none-any.whl", hash = "sha256:7bb2708e112d8fdd7829cd4243970f0c223274051cb35ee80c03301ee29a3df0"}, - {file = "httpx-0.27.2.tar.gz", hash = "sha256:f7c2be1d2f3c3c3160d441802406b206c2b76f5947b11115e6df10c6c65e66c2"}, + {file = "httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad"}, + {file = "httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc"}, ] [package.dependencies] @@ -801,7 +1220,6 @@ anyio = "*" certifi = "*" httpcore = "==1.*" idna = "*" -sniffio = "*" [package.extras] brotli = ["brotli", "brotlicffi"] @@ -812,13 +1230,15 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "identify" -version = "2.6.2" +version = "2.6.3" description = "File identification library for Python" optional = false python-versions = ">=3.9" +groups = ["dev"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ - {file = "identify-2.6.2-py2.py3-none-any.whl", hash = "sha256:c097384259f49e372f4ea00a19719d95ae27dd5ff0fd77ad630aa891306b82f3"}, - {file = "identify-2.6.2.tar.gz", hash = "sha256:fab5c716c24d7a789775228823797296a2994b075fb6080ac83a102772a98cbd"}, + {file = "identify-2.6.3-py2.py3-none-any.whl", hash = "sha256:9edba65473324c2ea9684b1f944fe3191db3345e50b6d04571d10ed164f8d7bd"}, + {file = "identify-2.6.3.tar.gz", hash = "sha256:62f5dae9b5fef52c84cc188514e9ea4f3f636b1d8799ab5ebc475471f9e47a02"}, ] [package.extras] @@ -830,6 +1250,8 @@ version = "3.10" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.6" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, @@ -844,6 +1266,8 @@ version = "2.0.0" description = "brain-dead simple config-ini parsing" optional = false python-versions = ">=3.7" +groups = ["dev"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, @@ -855,6 +1279,8 @@ version = "6.29.5" description = "IPython Kernel for Jupyter" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "ipykernel-6.29.5-py3-none-any.whl", hash = "sha256:afdb66ba5aa354b09b91379bac28ae4afebbb30e8b39510c9690afb7a10421b5"}, {file = "ipykernel-6.29.5.tar.gz", hash = "sha256:f093a22c4a40f8828f8e330a9c297cb93dcab13bd9678ded6de8e5cf81c56215"}, @@ -884,13 +1310,15 @@ test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio [[package]] name = "ipython" -version = "8.29.0" +version = "8.31.0" description = "IPython: Productive Interactive Computing" optional = false python-versions = ">=3.10" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ - {file = "ipython-8.29.0-py3-none-any.whl", hash = "sha256:0188a1bd83267192123ccea7f4a8ed0a78910535dbaa3f37671dca76ebd429c8"}, - {file = "ipython-8.29.0.tar.gz", hash = "sha256:40b60e15b22591450eef73e40a027cf77bd652e757523eebc5bd7c7c498290eb"}, + {file = "ipython-8.31.0-py3-none-any.whl", hash = "sha256:46ec58f8d3d076a61d128fe517a51eb730e3aaf0c184ea8c17d16e366660c6a6"}, + {file = "ipython-8.31.0.tar.gz", hash = "sha256:b6a2274606bec6166405ff05e54932ed6e5cfecaca1fc05f2cacde7bb074d70b"}, ] [package.dependencies] @@ -900,16 +1328,16 @@ exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} jedi = ">=0.16" matplotlib-inline = "*" pexpect = {version = ">4.3", markers = "sys_platform != \"win32\" and sys_platform != \"emscripten\""} -prompt-toolkit = ">=3.0.41,<3.1.0" +prompt_toolkit = ">=3.0.41,<3.1.0" pygments = ">=2.4.0" -stack-data = "*" +stack_data = "*" traitlets = ">=5.13.0" -typing-extensions = {version = ">=4.6", markers = "python_version < \"3.12\""} +typing_extensions = {version = ">=4.6", markers = "python_version < \"3.12\""} [package.extras] all = ["ipython[black,doc,kernel,matplotlib,nbconvert,nbformat,notebook,parallel,qtconsole]", "ipython[test,test-extra]"] black = ["black"] -doc = ["docrepr", "exceptiongroup", "intersphinx-registry", "ipykernel", "ipython[test]", "matplotlib", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "sphinxcontrib-jquery", "tomli", "typing-extensions"] +doc = ["docrepr", "exceptiongroup", "intersphinx_registry", "ipykernel", "ipython[test]", "matplotlib", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "sphinxcontrib-jquery", "tomli", "typing_extensions"] kernel = ["ipykernel"] matplotlib = ["matplotlib"] nbconvert = ["nbconvert"] @@ -926,6 +1354,8 @@ version = "20.11.0" description = "Operations with ISO 8601 durations" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042"}, {file = "isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9"}, @@ -940,6 +1370,8 @@ version = "0.19.2" description = "An autocompletion tool for Python that can be used for text editors." optional = false python-versions = ">=3.6" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9"}, {file = "jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0"}, @@ -955,13 +1387,15 @@ testing = ["Django", "attrs", "colorama", "docopt", "pytest (<9.0.0)"] [[package]] name = "jinja2" -version = "3.1.4" +version = "3.1.5" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ - {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"}, - {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"}, + {file = "jinja2-3.1.5-py3-none-any.whl", hash = "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb"}, + {file = "jinja2-3.1.5.tar.gz", hash = "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb"}, ] [package.dependencies] @@ -972,13 +1406,15 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "json5" -version = "0.9.28" +version = "0.10.0" description = "A Python implementation of the JSON5 data format." optional = false python-versions = ">=3.8.0" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ - {file = "json5-0.9.28-py3-none-any.whl", hash = "sha256:29c56f1accdd8bc2e037321237662034a7e07921e2b7223281a5ce2c46f0c4df"}, - {file = "json5-0.9.28.tar.gz", hash = "sha256:1f82f36e615bc5b42f1bbd49dbc94b12563c56408c6ffa06414ea310890e9a6e"}, + {file = "json5-0.10.0-py3-none-any.whl", hash = "sha256:19b23410220a7271e8377f81ba8aacba2fdd56947fbb137ee5977cbe1f5e8dfa"}, + {file = "json5-0.10.0.tar.gz", hash = "sha256:e66941c8f0a02026943c52c2eb34ebeb2a6f819a0be05920a6f5243cd30fd559"}, ] [package.extras] @@ -990,6 +1426,8 @@ version = "3.0.0" description = "Identify specific nodes in a JSON document (RFC 6901)" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942"}, {file = "jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef"}, @@ -1001,6 +1439,8 @@ version = "4.23.0" description = "An implementation of JSON Schema validation for Python" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jsonschema-4.23.0-py3-none-any.whl", hash = "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566"}, {file = "jsonschema-4.23.0.tar.gz", hash = "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4"}, @@ -1030,6 +1470,8 @@ version = "2024.10.1" description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jsonschema_specifications-2024.10.1-py3-none-any.whl", hash = "sha256:a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf"}, {file = "jsonschema_specifications-2024.10.1.tar.gz", hash = "sha256:0f38b83639958ce1152d02a7f062902c41c8fd20d558b0c34344292d417ae272"}, @@ -1044,6 +1486,8 @@ version = "8.6.3" description = "Jupyter protocol implementation and client libraries" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f"}, {file = "jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419"}, @@ -1066,6 +1510,8 @@ version = "5.7.2" description = "Jupyter core package. A base package on which Jupyter projects rely." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jupyter_core-5.7.2-py3-none-any.whl", hash = "sha256:4f7315d2f6b4bcf2e3e7cb6e46772eba760ae459cd1f59d29eb57b0a01bd7409"}, {file = "jupyter_core-5.7.2.tar.gz", hash = "sha256:aa5f8d32bbf6b431ac830496da7392035d6f61b4f54872f15c4bd2a9c3f536d9"}, @@ -1082,13 +1528,15 @@ test = ["ipykernel", "pre-commit", "pytest (<8)", "pytest-cov", "pytest-timeout" [[package]] name = "jupyter-events" -version = "0.10.0" +version = "0.11.0" description = "Jupyter Event System library" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ - {file = "jupyter_events-0.10.0-py3-none-any.whl", hash = "sha256:4b72130875e59d57716d327ea70d3ebc3af1944d3717e5a498b8a06c6c159960"}, - {file = "jupyter_events-0.10.0.tar.gz", hash = "sha256:670b8229d3cc882ec782144ed22e0d29e1c2d639263f92ca8383e66682845e22"}, + {file = "jupyter_events-0.11.0-py3-none-any.whl", hash = "sha256:36399b41ce1ca45fe8b8271067d6a140ffa54cec4028e95491c93b78a855cacf"}, + {file = "jupyter_events-0.11.0.tar.gz", hash = "sha256:c0bc56a37aac29c1fbc3bcfbddb8c8c49533f9cf11f1c4e6adadba936574ab90"}, ] [package.dependencies] @@ -1102,7 +1550,7 @@ traitlets = ">=5.3" [package.extras] cli = ["click", "rich"] -docs = ["jupyterlite-sphinx", "myst-parser", "pydata-sphinx-theme", "sphinxcontrib-spelling"] +docs = ["jupyterlite-sphinx", "myst-parser", "pydata-sphinx-theme (>=0.16)", "sphinx (>=8)", "sphinxcontrib-spelling"] test = ["click", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "pytest-console-scripts", "rich"] [[package]] @@ -1111,6 +1559,8 @@ version = "2.2.5" description = "Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jupyter-lsp-2.2.5.tar.gz", hash = "sha256:793147a05ad446f809fd53ef1cd19a9f5256fd0a2d6b7ce943a982cb4f545001"}, {file = "jupyter_lsp-2.2.5-py3-none-any.whl", hash = "sha256:45fbddbd505f3fbfb0b6cb2f1bc5e15e83ab7c79cd6e89416b248cb3c00c11da"}, @@ -1121,13 +1571,15 @@ jupyter-server = ">=1.1.2" [[package]] name = "jupyter-server" -version = "2.14.2" +version = "2.15.0" description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ - {file = "jupyter_server-2.14.2-py3-none-any.whl", hash = "sha256:47ff506127c2f7851a17bf4713434208fc490955d0e8632e95014a9a9afbeefd"}, - {file = "jupyter_server-2.14.2.tar.gz", hash = "sha256:66095021aa9638ced276c248b1d81862e4c50f292d575920bbe960de1c56b12b"}, + {file = "jupyter_server-2.15.0-py3-none-any.whl", hash = "sha256:872d989becf83517012ee669f09604aa4a28097c0bd90b2f424310156c2cdae3"}, + {file = "jupyter_server-2.15.0.tar.gz", hash = "sha256:9d446b8697b4f7337a1b7cdcac40778babdd93ba614b6d68ab1c0c918f1c4084"}, ] [package.dependencies] @@ -1136,7 +1588,7 @@ argon2-cffi = ">=21.1" jinja2 = ">=3.0.3" jupyter-client = ">=7.4.4" jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" -jupyter-events = ">=0.9.0" +jupyter-events = ">=0.11.0" jupyter-server-terminals = ">=0.4.4" nbconvert = ">=6.4.4" nbformat = ">=5.3.0" @@ -1161,6 +1613,8 @@ version = "0.5.3" description = "A Jupyter Server Extension Providing Terminals." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jupyter_server_terminals-0.5.3-py3-none-any.whl", hash = "sha256:41ee0d7dc0ebf2809c668e0fc726dfaf258fcd3e769568996ca731b6194ae9aa"}, {file = "jupyter_server_terminals-0.5.3.tar.gz", hash = "sha256:5ae0295167220e9ace0edcfdb212afd2b01ee8d179fe6f23c899590e9b8a5269"}, @@ -1176,13 +1630,15 @@ test = ["jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-jupyter[server] (> [[package]] name = "jupyterlab" -version = "4.3.0" +version = "4.3.4" description = "JupyterLab computational environment" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ - {file = "jupyterlab-4.3.0-py3-none-any.whl", hash = "sha256:f67e1095ad61ae04349024f0b40345062ab108a0c6998d9810fec6a3c1a70cd5"}, - {file = "jupyterlab-4.3.0.tar.gz", hash = "sha256:7c6835cbf8df0af0ec8a39332e85ff11693fb9a468205343b4fc0bfbc74817e5"}, + {file = "jupyterlab-4.3.4-py3-none-any.whl", hash = "sha256:b754c2601c5be6adf87cb5a1d8495d653ffb945f021939f77776acaa94dae952"}, + {file = "jupyterlab-4.3.4.tar.gz", hash = "sha256:f0bb9b09a04766e3423cccc2fc23169aa2ffedcdf8713e9e0fb33cac0b6859d0"}, ] [package.dependencies] @@ -1196,7 +1652,7 @@ jupyter-server = ">=2.4.0,<3" jupyterlab-server = ">=2.27.1,<3" notebook-shim = ">=0.2" packaging = "*" -setuptools = ">=40.1.0" +setuptools = ">=40.8.0" tomli = {version = ">=1.2.2", markers = "python_version < \"3.11\""} tornado = ">=6.2.0" traitlets = "*" @@ -1214,6 +1670,8 @@ version = "0.3.0" description = "Pygments theme using JupyterLab CSS variables" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780"}, {file = "jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d"}, @@ -1225,6 +1683,8 @@ version = "2.27.3" description = "A set of server components for JupyterLab and JupyterLab like applications." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jupyterlab_server-2.27.3-py3-none-any.whl", hash = "sha256:e697488f66c3db49df675158a77b3b017520d772c6e1548c7d9bcc5df7944ee4"}, {file = "jupyterlab_server-2.27.3.tar.gz", hash = "sha256:eb36caca59e74471988f0ae25c77945610b887f777255aa21f8065def9e51ed4"}, @@ -1250,6 +1710,8 @@ version = "1.4.7" description = "A fast implementation of the Cassowary constraint solver" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "kiwisolver-1.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8a9c83f75223d5e48b0bc9cb1bf2776cf01563e00ade8775ffe13b0b6e1af3a6"}, {file = "kiwisolver-1.4.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:58370b1ffbd35407444d57057b57da5d6549d2d854fa30249771775c63b5fe17"}, @@ -1373,6 +1835,8 @@ version = "3.0.2" description = "Safely add untrusted strings to HTML/XML markup." optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"}, @@ -1439,51 +1903,47 @@ files = [ [[package]] name = "matplotlib" -version = "3.9.2" +version = "3.10.0" description = "Python plotting package" optional = false -python-versions = ">=3.9" -files = [ - {file = "matplotlib-3.9.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:9d78bbc0cbc891ad55b4f39a48c22182e9bdaea7fc0e5dbd364f49f729ca1bbb"}, - {file = "matplotlib-3.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c375cc72229614632c87355366bdf2570c2dac01ac66b8ad048d2dabadf2d0d4"}, - {file = "matplotlib-3.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d94ff717eb2bd0b58fe66380bd8b14ac35f48a98e7c6765117fe67fb7684e64"}, - {file = "matplotlib-3.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab68d50c06938ef28681073327795c5db99bb4666214d2d5f880ed11aeaded66"}, - {file = "matplotlib-3.9.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:65aacf95b62272d568044531e41de26285d54aec8cb859031f511f84bd8b495a"}, - {file = "matplotlib-3.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:3fd595f34aa8a55b7fc8bf9ebea8aa665a84c82d275190a61118d33fbc82ccae"}, - {file = "matplotlib-3.9.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d8dd059447824eec055e829258ab092b56bb0579fc3164fa09c64f3acd478772"}, - {file = "matplotlib-3.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c797dac8bb9c7a3fd3382b16fe8f215b4cf0f22adccea36f1545a6d7be310b41"}, - {file = "matplotlib-3.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d719465db13267bcef19ea8954a971db03b9f48b4647e3860e4bc8e6ed86610f"}, - {file = "matplotlib-3.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8912ef7c2362f7193b5819d17dae8629b34a95c58603d781329712ada83f9447"}, - {file = "matplotlib-3.9.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7741f26a58a240f43bee74965c4882b6c93df3e7eb3de160126d8c8f53a6ae6e"}, - {file = "matplotlib-3.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:ae82a14dab96fbfad7965403c643cafe6515e386de723e498cf3eeb1e0b70cc7"}, - {file = "matplotlib-3.9.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:ac43031375a65c3196bee99f6001e7fa5bdfb00ddf43379d3c0609bdca042df9"}, - {file = "matplotlib-3.9.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:be0fc24a5e4531ae4d8e858a1a548c1fe33b176bb13eff7f9d0d38ce5112a27d"}, - {file = "matplotlib-3.9.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf81de2926c2db243c9b2cbc3917619a0fc85796c6ba4e58f541df814bbf83c7"}, - {file = "matplotlib-3.9.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6ee45bc4245533111ced13f1f2cace1e7f89d1c793390392a80c139d6cf0e6c"}, - {file = "matplotlib-3.9.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:306c8dfc73239f0e72ac50e5a9cf19cc4e8e331dd0c54f5e69ca8758550f1e1e"}, - {file = "matplotlib-3.9.2-cp312-cp312-win_amd64.whl", hash = "sha256:5413401594cfaff0052f9d8b1aafc6d305b4bd7c4331dccd18f561ff7e1d3bd3"}, - {file = "matplotlib-3.9.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:18128cc08f0d3cfff10b76baa2f296fc28c4607368a8402de61bb3f2eb33c7d9"}, - {file = "matplotlib-3.9.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4876d7d40219e8ae8bb70f9263bcbe5714415acfdf781086601211335e24f8aa"}, - {file = "matplotlib-3.9.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d9f07a80deab4bb0b82858a9e9ad53d1382fd122be8cde11080f4e7dfedb38b"}, - {file = "matplotlib-3.9.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7c0410f181a531ec4e93bbc27692f2c71a15c2da16766f5ba9761e7ae518413"}, - {file = "matplotlib-3.9.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:909645cce2dc28b735674ce0931a4ac94e12f5b13f6bb0b5a5e65e7cea2c192b"}, - {file = "matplotlib-3.9.2-cp313-cp313-win_amd64.whl", hash = "sha256:f32c7410c7f246838a77d6d1eff0c0f87f3cb0e7c4247aebea71a6d5a68cab49"}, - {file = "matplotlib-3.9.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:37e51dd1c2db16ede9cfd7b5cabdfc818b2c6397c83f8b10e0e797501c963a03"}, - {file = "matplotlib-3.9.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:b82c5045cebcecd8496a4d694d43f9cc84aeeb49fe2133e036b207abe73f4d30"}, - {file = "matplotlib-3.9.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f053c40f94bc51bc03832a41b4f153d83f2062d88c72b5e79997072594e97e51"}, - {file = "matplotlib-3.9.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dbe196377a8248972f5cede786d4c5508ed5f5ca4a1e09b44bda889958b33f8c"}, - {file = "matplotlib-3.9.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5816b1e1fe8c192cbc013f8f3e3368ac56fbecf02fb41b8f8559303f24c5015e"}, - {file = "matplotlib-3.9.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:cef2a73d06601437be399908cf13aee74e86932a5ccc6ccdf173408ebc5f6bb2"}, - {file = "matplotlib-3.9.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e0830e188029c14e891fadd99702fd90d317df294c3298aad682739c5533721a"}, - {file = "matplotlib-3.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03ba9c1299c920964e8d3857ba27173b4dbb51ca4bab47ffc2c2ba0eb5e2cbc5"}, - {file = "matplotlib-3.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1cd93b91ab47a3616b4d3c42b52f8363b88ca021e340804c6ab2536344fad9ca"}, - {file = "matplotlib-3.9.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6d1ce5ed2aefcdce11904fc5bbea7d9c21fff3d5f543841edf3dea84451a09ea"}, - {file = "matplotlib-3.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:b2696efdc08648536efd4e1601b5fd491fd47f4db97a5fbfd175549a7365c1b2"}, - {file = "matplotlib-3.9.2-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:d52a3b618cb1cbb769ce2ee1dcdb333c3ab6e823944e9a2d36e37253815f9556"}, - {file = "matplotlib-3.9.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:039082812cacd6c6bec8e17a9c1e6baca230d4116d522e81e1f63a74d01d2e21"}, - {file = "matplotlib-3.9.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6758baae2ed64f2331d4fd19be38b7b4eae3ecec210049a26b6a4f3ae1c85dcc"}, - {file = "matplotlib-3.9.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:050598c2b29e0b9832cde72bcf97627bf00262adbc4a54e2b856426bb2ef0697"}, - {file = "matplotlib-3.9.2.tar.gz", hash = "sha256:96ab43906269ca64a6366934106fa01534454a69e471b7bf3d79083981aaab92"}, +python-versions = ">=3.10" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" +files = [ + {file = "matplotlib-3.10.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2c5829a5a1dd5a71f0e31e6e8bb449bc0ee9dbfb05ad28fc0c6b55101b3a4be6"}, + {file = "matplotlib-3.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a2a43cbefe22d653ab34bb55d42384ed30f611bcbdea1f8d7f431011a2e1c62e"}, + {file = "matplotlib-3.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:607b16c8a73943df110f99ee2e940b8a1cbf9714b65307c040d422558397dac5"}, + {file = "matplotlib-3.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01d2b19f13aeec2e759414d3bfe19ddfb16b13a1250add08d46d5ff6f9be83c6"}, + {file = "matplotlib-3.10.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e6c6461e1fc63df30bf6f80f0b93f5b6784299f721bc28530477acd51bfc3d1"}, + {file = "matplotlib-3.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:994c07b9d9fe8d25951e3202a68c17900679274dadfc1248738dcfa1bd40d7f3"}, + {file = "matplotlib-3.10.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:fd44fc75522f58612ec4a33958a7e5552562b7705b42ef1b4f8c0818e304a363"}, + {file = "matplotlib-3.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c58a9622d5dbeb668f407f35f4e6bfac34bb9ecdcc81680c04d0258169747997"}, + {file = "matplotlib-3.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:845d96568ec873be63f25fa80e9e7fae4be854a66a7e2f0c8ccc99e94a8bd4ef"}, + {file = "matplotlib-3.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5439f4c5a3e2e8eab18e2f8c3ef929772fd5641876db71f08127eed95ab64683"}, + {file = "matplotlib-3.10.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4673ff67a36152c48ddeaf1135e74ce0d4bce1bbf836ae40ed39c29edf7e2765"}, + {file = "matplotlib-3.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:7e8632baebb058555ac0cde75db885c61f1212e47723d63921879806b40bec6a"}, + {file = "matplotlib-3.10.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4659665bc7c9b58f8c00317c3c2a299f7f258eeae5a5d56b4c64226fca2f7c59"}, + {file = "matplotlib-3.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d44cb942af1693cced2604c33a9abcef6205601c445f6d0dc531d813af8a2f5a"}, + {file = "matplotlib-3.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a994f29e968ca002b50982b27168addfd65f0105610b6be7fa515ca4b5307c95"}, + {file = "matplotlib-3.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b0558bae37f154fffda54d779a592bc97ca8b4701f1c710055b609a3bac44c8"}, + {file = "matplotlib-3.10.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:503feb23bd8c8acc75541548a1d709c059b7184cde26314896e10a9f14df5f12"}, + {file = "matplotlib-3.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:c40ba2eb08b3f5de88152c2333c58cee7edcead0a2a0d60fcafa116b17117adc"}, + {file = "matplotlib-3.10.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:96f2886f5c1e466f21cc41b70c5a0cd47bfa0015eb2d5793c88ebce658600e25"}, + {file = "matplotlib-3.10.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:12eaf48463b472c3c0f8dbacdbf906e573013df81a0ab82f0616ea4b11281908"}, + {file = "matplotlib-3.10.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2fbbabc82fde51391c4da5006f965e36d86d95f6ee83fb594b279564a4c5d0d2"}, + {file = "matplotlib-3.10.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad2e15300530c1a94c63cfa546e3b7864bd18ea2901317bae8bbf06a5ade6dcf"}, + {file = "matplotlib-3.10.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:3547d153d70233a8496859097ef0312212e2689cdf8d7ed764441c77604095ae"}, + {file = "matplotlib-3.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:c55b20591ced744aa04e8c3e4b7543ea4d650b6c3c4b208c08a05b4010e8b442"}, + {file = "matplotlib-3.10.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:9ade1003376731a971e398cc4ef38bb83ee8caf0aee46ac6daa4b0506db1fd06"}, + {file = "matplotlib-3.10.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:95b710fea129c76d30be72c3b38f330269363fbc6e570a5dd43580487380b5ff"}, + {file = "matplotlib-3.10.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cdbaf909887373c3e094b0318d7ff230b2ad9dcb64da7ade654182872ab2593"}, + {file = "matplotlib-3.10.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d907fddb39f923d011875452ff1eca29a9e7f21722b873e90db32e5d8ddff12e"}, + {file = "matplotlib-3.10.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3b427392354d10975c1d0f4ee18aa5844640b512d5311ef32efd4dd7db106ede"}, + {file = "matplotlib-3.10.0-cp313-cp313t-win_amd64.whl", hash = "sha256:5fd41b0ec7ee45cd960a8e71aea7c946a28a0b8a4dcee47d2856b2af051f334c"}, + {file = "matplotlib-3.10.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:81713dd0d103b379de4516b861d964b1d789a144103277769238c732229d7f03"}, + {file = "matplotlib-3.10.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:359f87baedb1f836ce307f0e850d12bb5f1936f70d035561f90d41d305fdacea"}, + {file = "matplotlib-3.10.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae80dc3a4add4665cf2faa90138384a7ffe2a4e37c58d83e115b54287c4f06ef"}, + {file = "matplotlib-3.10.0.tar.gz", hash = "sha256:b886d02a581b96704c9d1ffe55709e49b4d2d52709ccebc4be42db856e511278"}, ] [package.dependencies] @@ -1498,7 +1958,7 @@ pyparsing = ">=2.3.1" python-dateutil = ">=2.7" [package.extras] -dev = ["meson-python (>=0.13.1)", "numpy (>=1.25)", "pybind11 (>=2.6)", "setuptools (>=64)", "setuptools_scm (>=7)"] +dev = ["meson-python (>=0.13.1,<0.17.0)", "pybind11 (>=2.13.2,!=2.13.3)", "setuptools (>=64)", "setuptools_scm (>=7)"] [[package]] name = "matplotlib-inline" @@ -1506,6 +1966,8 @@ version = "0.1.7" description = "Inline Matplotlib backend for Jupyter" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca"}, {file = "matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90"}, @@ -1520,20 +1982,130 @@ version = "3.0.2" description = "A sane and fast Markdown parser with useful plugins and renderers" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "mistune-3.0.2-py3-none-any.whl", hash = "sha256:71481854c30fdbc938963d3605b72501f5c10a9320ecd412c121c163a1c7d205"}, {file = "mistune-3.0.2.tar.gz", hash = "sha256:fc7f93ded930c92394ef2cb6f04a8aabab4117a91449e72dcc8dfa646a508be8"}, ] +[[package]] +name = "multidict" +version = "6.1.0" +description = "multidict implementation" +optional = false +python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" +files = [ + {file = "multidict-6.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3380252550e372e8511d49481bd836264c009adb826b23fefcc5dd3c69692f60"}, + {file = "multidict-6.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:99f826cbf970077383d7de805c0681799491cb939c25450b9b5b3ced03ca99f1"}, + {file = "multidict-6.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a114d03b938376557927ab23f1e950827c3b893ccb94b62fd95d430fd0e5cf53"}, + {file = "multidict-6.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1c416351ee6271b2f49b56ad7f308072f6f44b37118d69c2cad94f3fa8a40d5"}, + {file = "multidict-6.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6b5d83030255983181005e6cfbac1617ce9746b219bc2aad52201ad121226581"}, + {file = "multidict-6.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3e97b5e938051226dc025ec80980c285b053ffb1e25a3db2a3aa3bc046bf7f56"}, + {file = "multidict-6.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d618649d4e70ac6efcbba75be98b26ef5078faad23592f9b51ca492953012429"}, + {file = "multidict-6.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:10524ebd769727ac77ef2278390fb0068d83f3acb7773792a5080f2b0abf7748"}, + {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ff3827aef427c89a25cc96ded1759271a93603aba9fb977a6d264648ebf989db"}, + {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:06809f4f0f7ab7ea2cabf9caca7d79c22c0758b58a71f9d32943ae13c7ace056"}, + {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:f179dee3b863ab1c59580ff60f9d99f632f34ccb38bf67a33ec6b3ecadd0fd76"}, + {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:aaed8b0562be4a0876ee3b6946f6869b7bcdb571a5d1496683505944e268b160"}, + {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3c8b88a2ccf5493b6c8da9076fb151ba106960a2df90c2633f342f120751a9e7"}, + {file = "multidict-6.1.0-cp310-cp310-win32.whl", hash = "sha256:4a9cb68166a34117d6646c0023c7b759bf197bee5ad4272f420a0141d7eb03a0"}, + {file = "multidict-6.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:20b9b5fbe0b88d0bdef2012ef7dee867f874b72528cf1d08f1d59b0e3850129d"}, + {file = "multidict-6.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3efe2c2cb5763f2f1b275ad2bf7a287d3f7ebbef35648a9726e3b69284a4f3d6"}, + {file = "multidict-6.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c7053d3b0353a8b9de430a4f4b4268ac9a4fb3481af37dfe49825bf45ca24156"}, + {file = "multidict-6.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:27e5fc84ccef8dfaabb09d82b7d179c7cf1a3fbc8a966f8274fcb4ab2eb4cadb"}, + {file = "multidict-6.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e2b90b43e696f25c62656389d32236e049568b39320e2735d51f08fd362761b"}, + {file = "multidict-6.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d83a047959d38a7ff552ff94be767b7fd79b831ad1cd9920662db05fec24fe72"}, + {file = "multidict-6.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d1a9dd711d0877a1ece3d2e4fea11a8e75741ca21954c919406b44e7cf971304"}, + {file = "multidict-6.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec2abea24d98246b94913b76a125e855eb5c434f7c46546046372fe60f666351"}, + {file = "multidict-6.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4867cafcbc6585e4b678876c489b9273b13e9fff9f6d6d66add5e15d11d926cb"}, + {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5b48204e8d955c47c55b72779802b219a39acc3ee3d0116d5080c388970b76e3"}, + {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:d8fff389528cad1618fb4b26b95550327495462cd745d879a8c7c2115248e399"}, + {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a7a9541cd308eed5e30318430a9c74d2132e9a8cb46b901326272d780bf2d423"}, + {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:da1758c76f50c39a2efd5e9859ce7d776317eb1dd34317c8152ac9251fc574a3"}, + {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c943a53e9186688b45b323602298ab727d8865d8c9ee0b17f8d62d14b56f0753"}, + {file = "multidict-6.1.0-cp311-cp311-win32.whl", hash = "sha256:90f8717cb649eea3504091e640a1b8568faad18bd4b9fcd692853a04475a4b80"}, + {file = "multidict-6.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:82176036e65644a6cc5bd619f65f6f19781e8ec2e5330f51aa9ada7504cc1926"}, + {file = "multidict-6.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b04772ed465fa3cc947db808fa306d79b43e896beb677a56fb2347ca1a49c1fa"}, + {file = "multidict-6.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6180c0ae073bddeb5a97a38c03f30c233e0a4d39cd86166251617d1bbd0af436"}, + {file = "multidict-6.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:071120490b47aa997cca00666923a83f02c7fbb44f71cf7f136df753f7fa8761"}, + {file = "multidict-6.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50b3a2710631848991d0bf7de077502e8994c804bb805aeb2925a981de58ec2e"}, + {file = "multidict-6.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b58c621844d55e71c1b7f7c498ce5aa6985d743a1a59034c57a905b3f153c1ef"}, + {file = "multidict-6.1.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55b6d90641869892caa9ca42ff913f7ff1c5ece06474fbd32fb2cf6834726c95"}, + {file = "multidict-6.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b820514bfc0b98a30e3d85462084779900347e4d49267f747ff54060cc33925"}, + {file = "multidict-6.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:10a9b09aba0c5b48c53761b7c720aaaf7cf236d5fe394cd399c7ba662d5f9966"}, + {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1e16bf3e5fc9f44632affb159d30a437bfe286ce9e02754759be5536b169b305"}, + {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:76f364861c3bfc98cbbcbd402d83454ed9e01a5224bb3a28bf70002a230f73e2"}, + {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:820c661588bd01a0aa62a1283f20d2be4281b086f80dad9e955e690c75fb54a2"}, + {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:0e5f362e895bc5b9e67fe6e4ded2492d8124bdf817827f33c5b46c2fe3ffaca6"}, + {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3ec660d19bbc671e3a6443325f07263be452c453ac9e512f5eb935e7d4ac28b3"}, + {file = "multidict-6.1.0-cp312-cp312-win32.whl", hash = "sha256:58130ecf8f7b8112cdb841486404f1282b9c86ccb30d3519faf301b2e5659133"}, + {file = "multidict-6.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:188215fc0aafb8e03341995e7c4797860181562380f81ed0a87ff455b70bf1f1"}, + {file = "multidict-6.1.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:d569388c381b24671589335a3be6e1d45546c2988c2ebe30fdcada8457a31008"}, + {file = "multidict-6.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:052e10d2d37810b99cc170b785945421141bf7bb7d2f8799d431e7db229c385f"}, + {file = "multidict-6.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f90c822a402cb865e396a504f9fc8173ef34212a342d92e362ca498cad308e28"}, + {file = "multidict-6.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b225d95519a5bf73860323e633a664b0d85ad3d5bede6d30d95b35d4dfe8805b"}, + {file = "multidict-6.1.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:23bfd518810af7de1116313ebd9092cb9aa629beb12f6ed631ad53356ed6b86c"}, + {file = "multidict-6.1.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c09fcfdccdd0b57867577b719c69e347a436b86cd83747f179dbf0cc0d4c1f3"}, + {file = "multidict-6.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf6bea52ec97e95560af5ae576bdac3aa3aae0b6758c6efa115236d9e07dae44"}, + {file = "multidict-6.1.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57feec87371dbb3520da6192213c7d6fc892d5589a93db548331954de8248fd2"}, + {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0c3f390dc53279cbc8ba976e5f8035eab997829066756d811616b652b00a23a3"}, + {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:59bfeae4b25ec05b34f1956eaa1cb38032282cd4dfabc5056d0a1ec4d696d3aa"}, + {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:b2f59caeaf7632cc633b5cf6fc449372b83bbdf0da4ae04d5be36118e46cc0aa"}, + {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:37bb93b2178e02b7b618893990941900fd25b6b9ac0fa49931a40aecdf083fe4"}, + {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4e9f48f58c2c523d5a06faea47866cd35b32655c46b443f163d08c6d0ddb17d6"}, + {file = "multidict-6.1.0-cp313-cp313-win32.whl", hash = "sha256:3a37ffb35399029b45c6cc33640a92bef403c9fd388acce75cdc88f58bd19a81"}, + {file = "multidict-6.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:e9aa71e15d9d9beaad2c6b9319edcdc0a49a43ef5c0a4c8265ca9ee7d6c67774"}, + {file = "multidict-6.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:db7457bac39421addd0c8449933ac32d8042aae84a14911a757ae6ca3eef1392"}, + {file = "multidict-6.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d094ddec350a2fb899fec68d8353c78233debde9b7d8b4beeafa70825f1c281a"}, + {file = "multidict-6.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5845c1fd4866bb5dd3125d89b90e57ed3138241540897de748cdf19de8a2fca2"}, + {file = "multidict-6.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9079dfc6a70abe341f521f78405b8949f96db48da98aeb43f9907f342f627cdc"}, + {file = "multidict-6.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3914f5aaa0f36d5d60e8ece6a308ee1c9784cd75ec8151062614657a114c4478"}, + {file = "multidict-6.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c08be4f460903e5a9d0f76818db3250f12e9c344e79314d1d570fc69d7f4eae4"}, + {file = "multidict-6.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d093be959277cb7dee84b801eb1af388b6ad3ca6a6b6bf1ed7585895789d027d"}, + {file = "multidict-6.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3702ea6872c5a2a4eeefa6ffd36b042e9773f05b1f37ae3ef7264b1163c2dcf6"}, + {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:2090f6a85cafc5b2db085124d752757c9d251548cedabe9bd31afe6363e0aff2"}, + {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:f67f217af4b1ff66c68a87318012de788dd95fcfeb24cc889011f4e1c7454dfd"}, + {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:189f652a87e876098bbc67b4da1049afb5f5dfbaa310dd67c594b01c10388db6"}, + {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:6bb5992037f7a9eff7991ebe4273ea7f51f1c1c511e6a2ce511d0e7bdb754492"}, + {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:ac10f4c2b9e770c4e393876e35a7046879d195cd123b4f116d299d442b335bcd"}, + {file = "multidict-6.1.0-cp38-cp38-win32.whl", hash = "sha256:e27bbb6d14416713a8bd7aaa1313c0fc8d44ee48d74497a0ff4c3a1b6ccb5167"}, + {file = "multidict-6.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:22f3105d4fb15c8f57ff3959a58fcab6ce36814486500cd7485651230ad4d4ef"}, + {file = "multidict-6.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:4e18b656c5e844539d506a0a06432274d7bd52a7487e6828c63a63d69185626c"}, + {file = "multidict-6.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a185f876e69897a6f3325c3f19f26a297fa058c5e456bfcff8015e9a27e83ae1"}, + {file = "multidict-6.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ab7c4ceb38d91570a650dba194e1ca87c2b543488fe9309b4212694174fd539c"}, + {file = "multidict-6.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e617fb6b0b6953fffd762669610c1c4ffd05632c138d61ac7e14ad187870669c"}, + {file = "multidict-6.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:16e5f4bf4e603eb1fdd5d8180f1a25f30056f22e55ce51fb3d6ad4ab29f7d96f"}, + {file = "multidict-6.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4c035da3f544b1882bac24115f3e2e8760f10a0107614fc9839fd232200b875"}, + {file = "multidict-6.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:957cf8e4b6e123a9eea554fa7ebc85674674b713551de587eb318a2df3e00255"}, + {file = "multidict-6.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:483a6aea59cb89904e1ceabd2b47368b5600fb7de78a6e4a2c2987b2d256cf30"}, + {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:87701f25a2352e5bf7454caa64757642734da9f6b11384c1f9d1a8e699758057"}, + {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:682b987361e5fd7a139ed565e30d81fd81e9629acc7d925a205366877d8c8657"}, + {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ce2186a7df133a9c895dea3331ddc5ddad42cdd0d1ea2f0a51e5d161e4762f28"}, + {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:9f636b730f7e8cb19feb87094949ba54ee5357440b9658b2a32a5ce4bce53972"}, + {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:73eae06aa53af2ea5270cc066dcaf02cc60d2994bbb2c4ef5764949257d10f43"}, + {file = "multidict-6.1.0-cp39-cp39-win32.whl", hash = "sha256:1ca0083e80e791cffc6efce7660ad24af66c8d4079d2a750b29001b53ff59ada"}, + {file = "multidict-6.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:aa466da5b15ccea564bdab9c89175c762bc12825f4659c11227f515cee76fa4a"}, + {file = "multidict-6.1.0-py3-none-any.whl", hash = "sha256:48e171e52d1c4d33888e529b999e5900356b9ae588c2f09a52dcefb158b27506"}, + {file = "multidict-6.1.0.tar.gz", hash = "sha256:22ae2ebf9b0c69d206c003e2f6a914ea33f0a932d4aa16f236afc049d9958f4a"}, +] + +[package.dependencies] +typing-extensions = {version = ">=4.1.0", markers = "python_version < \"3.11\""} + [[package]] name = "nbclient" -version = "0.10.0" +version = "0.10.2" description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." optional = false -python-versions = ">=3.8.0" +python-versions = ">=3.9.0" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ - {file = "nbclient-0.10.0-py3-none-any.whl", hash = "sha256:f13e3529332a1f1f81d82a53210322476a168bb7090a0289c795fe9cc11c9d3f"}, - {file = "nbclient-0.10.0.tar.gz", hash = "sha256:4b3f1b7dba531e498449c4db4f53da339c91d449dc11e9af3a43b4eb5c5abb09"}, + {file = "nbclient-0.10.2-py3-none-any.whl", hash = "sha256:4ffee11e788b4a27fabeb7955547e4318a5298f34342a4bfd01f2e1faaeadc3d"}, + {file = "nbclient-0.10.2.tar.gz", hash = "sha256:90b7fc6b810630db87a6d0c2250b1f0ab4cf4d3c27a299b0cde78a4ed3fd9193"}, ] [package.dependencies] @@ -1544,8 +2116,8 @@ traitlets = ">=5.4" [package.extras] dev = ["pre-commit"] -docs = ["autodoc-traits", "mock", "moto", "myst-parser", "nbclient[test]", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling"] -test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0,<8)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] +docs = ["autodoc-traits", "flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "mock", "moto", "myst-parser", "nbconvert (>=7.1.0)", "pytest (>=7.0,<8)", "pytest-asyncio", "pytest-cov (>=4.0)", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling", "testpath", "xmltodict"] +test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=7.1.0)", "pytest (>=7.0,<8)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] [[package]] name = "nbconvert" @@ -1553,6 +2125,8 @@ version = "7.16.4" description = "Converting Jupyter Notebooks (.ipynb files) to other formats. Output formats include asciidoc, html, latex, markdown, pdf, py, rst, script. nbconvert can be used both as a Python library (`import nbconvert`) or as a command line tool (invoked as `jupyter nbconvert ...`)." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "nbconvert-7.16.4-py3-none-any.whl", hash = "sha256:05873c620fe520b6322bf8a5ad562692343fe3452abda5765c7a34b7d1aa3eb3"}, {file = "nbconvert-7.16.4.tar.gz", hash = "sha256:86ca91ba266b0a448dc96fa6c5b9d98affabde2867b363258703536807f9f7f4"}, @@ -1590,6 +2164,8 @@ version = "5.10.4" description = "The Jupyter Notebook format" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b"}, {file = "nbformat-5.10.4.tar.gz", hash = "sha256:322168b14f937a5d11362988ecac2a4952d3d8e3a2cbeb2319584631226d5b3a"}, @@ -1611,6 +2187,8 @@ version = "1.6.0" description = "Patch asyncio to allow nested event loops" optional = false python-versions = ">=3.5" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c"}, {file = "nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe"}, @@ -1622,6 +2200,8 @@ version = "1.9.1" description = "Node.js virtual environment builder" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["dev"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9"}, {file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"}, @@ -1633,6 +2213,8 @@ version = "0.2.4" description = "A shim layer for notebook traits and config" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "notebook_shim-0.2.4-py3-none-any.whl", hash = "sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef"}, {file = "notebook_shim-0.2.4.tar.gz", hash = "sha256:b4b2cfa1b65d98307ca24361f5b30fe785b53c3fd07b7a47e89acb5e6ac638cb"}, @@ -1644,68 +2226,86 @@ jupyter-server = ">=1.8,<3" [package.extras] test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync"] +[[package]] +name = "nova-galaxy" +version = "0.4.0" +description = "Utilties for accessing the ORNL Galaxy instance" +optional = false +python-versions = "<4.0,>=3.10" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" +files = [ + {file = "nova_galaxy-0.4.0-py3-none-any.whl", hash = "sha256:407ae4b272f5386bd23578daf8c0c9c48c3723fd9fd14aa7328ea38532427ab9"}, +] + +[package.dependencies] +bioblend = ">=1.3.0,<2.0.0" +tomli = ">=2.0.2,<3.0.0" + [[package]] name = "numpy" -version = "2.1.3" +version = "2.2.1" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.10" -files = [ - {file = "numpy-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c894b4305373b9c5576d7a12b473702afdf48ce5369c074ba304cc5ad8730dff"}, - {file = "numpy-2.1.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b47fbb433d3260adcd51eb54f92a2ffbc90a4595f8970ee00e064c644ac788f5"}, - {file = "numpy-2.1.3-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:825656d0743699c529c5943554d223c021ff0494ff1442152ce887ef4f7561a1"}, - {file = "numpy-2.1.3-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:6a4825252fcc430a182ac4dee5a505053d262c807f8a924603d411f6718b88fd"}, - {file = "numpy-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e711e02f49e176a01d0349d82cb5f05ba4db7d5e7e0defd026328e5cfb3226d3"}, - {file = "numpy-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78574ac2d1a4a02421f25da9559850d59457bac82f2b8d7a44fe83a64f770098"}, - {file = "numpy-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c7662f0e3673fe4e832fe07b65c50342ea27d989f92c80355658c7f888fcc83c"}, - {file = "numpy-2.1.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:fa2d1337dc61c8dc417fbccf20f6d1e139896a30721b7f1e832b2bb6ef4eb6c4"}, - {file = "numpy-2.1.3-cp310-cp310-win32.whl", hash = "sha256:72dcc4a35a8515d83e76b58fdf8113a5c969ccd505c8a946759b24e3182d1f23"}, - {file = "numpy-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:ecc76a9ba2911d8d37ac01de72834d8849e55473457558e12995f4cd53e778e0"}, - {file = "numpy-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4d1167c53b93f1f5d8a139a742b3c6f4d429b54e74e6b57d0eff40045187b15d"}, - {file = "numpy-2.1.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c80e4a09b3d95b4e1cac08643f1152fa71a0a821a2d4277334c88d54b2219a41"}, - {file = "numpy-2.1.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:576a1c1d25e9e02ed7fa5477f30a127fe56debd53b8d2c89d5578f9857d03ca9"}, - {file = "numpy-2.1.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:973faafebaae4c0aaa1a1ca1ce02434554d67e628b8d805e61f874b84e136b09"}, - {file = "numpy-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:762479be47a4863e261a840e8e01608d124ee1361e48b96916f38b119cfda04a"}, - {file = "numpy-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc6f24b3d1ecc1eebfbf5d6051faa49af40b03be1aaa781ebdadcbc090b4539b"}, - {file = "numpy-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:17ee83a1f4fef3c94d16dc1802b998668b5419362c8a4f4e8a491de1b41cc3ee"}, - {file = "numpy-2.1.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:15cb89f39fa6d0bdfb600ea24b250e5f1a3df23f901f51c8debaa6a5d122b2f0"}, - {file = "numpy-2.1.3-cp311-cp311-win32.whl", hash = "sha256:d9beb777a78c331580705326d2367488d5bc473b49a9bc3036c154832520aca9"}, - {file = "numpy-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:d89dd2b6da69c4fff5e39c28a382199ddedc3a5be5390115608345dec660b9e2"}, - {file = "numpy-2.1.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f55ba01150f52b1027829b50d70ef1dafd9821ea82905b63936668403c3b471e"}, - {file = "numpy-2.1.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:13138eadd4f4da03074851a698ffa7e405f41a0845a6b1ad135b81596e4e9958"}, - {file = "numpy-2.1.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:a6b46587b14b888e95e4a24d7b13ae91fa22386c199ee7b418f449032b2fa3b8"}, - {file = "numpy-2.1.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:0fa14563cc46422e99daef53d725d0c326e99e468a9320a240affffe87852564"}, - {file = "numpy-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8637dcd2caa676e475503d1f8fdb327bc495554e10838019651b76d17b98e512"}, - {file = "numpy-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2312b2aa89e1f43ecea6da6ea9a810d06aae08321609d8dc0d0eda6d946a541b"}, - {file = "numpy-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a38c19106902bb19351b83802531fea19dee18e5b37b36454f27f11ff956f7fc"}, - {file = "numpy-2.1.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:02135ade8b8a84011cbb67dc44e07c58f28575cf9ecf8ab304e51c05528c19f0"}, - {file = "numpy-2.1.3-cp312-cp312-win32.whl", hash = "sha256:e6988e90fcf617da2b5c78902fe8e668361b43b4fe26dbf2d7b0f8034d4cafb9"}, - {file = "numpy-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:0d30c543f02e84e92c4b1f415b7c6b5326cbe45ee7882b6b77db7195fb971e3a"}, - {file = "numpy-2.1.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:96fe52fcdb9345b7cd82ecd34547fca4321f7656d500eca497eb7ea5a926692f"}, - {file = "numpy-2.1.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f653490b33e9c3a4c1c01d41bc2aef08f9475af51146e4a7710c450cf9761598"}, - {file = "numpy-2.1.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:dc258a761a16daa791081d026f0ed4399b582712e6fc887a95af09df10c5ca57"}, - {file = "numpy-2.1.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:016d0f6f5e77b0f0d45d77387ffa4bb89816b57c835580c3ce8e099ef830befe"}, - {file = "numpy-2.1.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c181ba05ce8299c7aa3125c27b9c2167bca4a4445b7ce73d5febc411ca692e43"}, - {file = "numpy-2.1.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5641516794ca9e5f8a4d17bb45446998c6554704d888f86df9b200e66bdcce56"}, - {file = "numpy-2.1.3-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ea4dedd6e394a9c180b33c2c872b92f7ce0f8e7ad93e9585312b0c5a04777a4a"}, - {file = "numpy-2.1.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b0df3635b9c8ef48bd3be5f862cf71b0a4716fa0e702155c45067c6b711ddcef"}, - {file = "numpy-2.1.3-cp313-cp313-win32.whl", hash = "sha256:50ca6aba6e163363f132b5c101ba078b8cbd3fa92c7865fd7d4d62d9779ac29f"}, - {file = "numpy-2.1.3-cp313-cp313-win_amd64.whl", hash = "sha256:747641635d3d44bcb380d950679462fae44f54b131be347d5ec2bce47d3df9ed"}, - {file = "numpy-2.1.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:996bb9399059c5b82f76b53ff8bb686069c05acc94656bb259b1d63d04a9506f"}, - {file = "numpy-2.1.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:45966d859916ad02b779706bb43b954281db43e185015df6eb3323120188f9e4"}, - {file = "numpy-2.1.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:baed7e8d7481bfe0874b566850cb0b85243e982388b7b23348c6db2ee2b2ae8e"}, - {file = "numpy-2.1.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:a9f7f672a3388133335589cfca93ed468509cb7b93ba3105fce780d04a6576a0"}, - {file = "numpy-2.1.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7aac50327da5d208db2eec22eb11e491e3fe13d22653dce51b0f4109101b408"}, - {file = "numpy-2.1.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4394bc0dbd074b7f9b52024832d16e019decebf86caf909d94f6b3f77a8ee3b6"}, - {file = "numpy-2.1.3-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:50d18c4358a0a8a53f12a8ba9d772ab2d460321e6a93d6064fc22443d189853f"}, - {file = "numpy-2.1.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:14e253bd43fc6b37af4921b10f6add6925878a42a0c5fe83daee390bca80bc17"}, - {file = "numpy-2.1.3-cp313-cp313t-win32.whl", hash = "sha256:08788d27a5fd867a663f6fc753fd7c3ad7e92747efc73c53bca2f19f8bc06f48"}, - {file = "numpy-2.1.3-cp313-cp313t-win_amd64.whl", hash = "sha256:2564fbdf2b99b3f815f2107c1bbc93e2de8ee655a69c261363a1172a79a257d4"}, - {file = "numpy-2.1.3-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:4f2015dfe437dfebbfce7c85c7b53d81ba49e71ba7eadbf1df40c915af75979f"}, - {file = "numpy-2.1.3-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:3522b0dfe983a575e6a9ab3a4a4dfe156c3e428468ff08ce582b9bb6bd1d71d4"}, - {file = "numpy-2.1.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c006b607a865b07cd981ccb218a04fc86b600411d83d6fc261357f1c0966755d"}, - {file = "numpy-2.1.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e14e26956e6f1696070788252dcdff11b4aca4c3e8bd166e0df1bb8f315a67cb"}, - {file = "numpy-2.1.3.tar.gz", hash = "sha256:aa08e04e08aaf974d4458def539dece0d28146d866a39da5639596f4921fd761"}, +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" +files = [ + {file = "numpy-2.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5edb4e4caf751c1518e6a26a83501fda79bff41cc59dac48d70e6d65d4ec4440"}, + {file = "numpy-2.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:aa3017c40d513ccac9621a2364f939d39e550c542eb2a894b4c8da92b38896ab"}, + {file = "numpy-2.2.1-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:61048b4a49b1c93fe13426e04e04fdf5a03f456616f6e98c7576144677598675"}, + {file = "numpy-2.2.1-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:7671dc19c7019103ca44e8d94917eba8534c76133523ca8406822efdd19c9308"}, + {file = "numpy-2.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4250888bcb96617e00bfa28ac24850a83c9f3a16db471eca2ee1f1714df0f957"}, + {file = "numpy-2.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7746f235c47abc72b102d3bce9977714c2444bdfaea7888d241b4c4bb6a78bf"}, + {file = "numpy-2.2.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:059e6a747ae84fce488c3ee397cee7e5f905fd1bda5fb18c66bc41807ff119b2"}, + {file = "numpy-2.2.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f62aa6ee4eb43b024b0e5a01cf65a0bb078ef8c395e8713c6e8a12a697144528"}, + {file = "numpy-2.2.1-cp310-cp310-win32.whl", hash = "sha256:48fd472630715e1c1c89bf1feab55c29098cb403cc184b4859f9c86d4fcb6a95"}, + {file = "numpy-2.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:b541032178a718c165a49638d28272b771053f628382d5e9d1c93df23ff58dbf"}, + {file = "numpy-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:40f9e544c1c56ba8f1cf7686a8c9b5bb249e665d40d626a23899ba6d5d9e1484"}, + {file = "numpy-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f9b57eaa3b0cd8db52049ed0330747b0364e899e8a606a624813452b8203d5f7"}, + {file = "numpy-2.2.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:bc8a37ad5b22c08e2dbd27df2b3ef7e5c0864235805b1e718a235bcb200cf1cb"}, + {file = "numpy-2.2.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:9036d6365d13b6cbe8f27a0eaf73ddcc070cae584e5ff94bb45e3e9d729feab5"}, + {file = "numpy-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51faf345324db860b515d3f364eaa93d0e0551a88d6218a7d61286554d190d73"}, + {file = "numpy-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38efc1e56b73cc9b182fe55e56e63b044dd26a72128fd2fbd502f75555d92591"}, + {file = "numpy-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:31b89fa67a8042e96715c68e071a1200c4e172f93b0fbe01a14c0ff3ff820fc8"}, + {file = "numpy-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4c86e2a209199ead7ee0af65e1d9992d1dce7e1f63c4b9a616500f93820658d0"}, + {file = "numpy-2.2.1-cp311-cp311-win32.whl", hash = "sha256:b34d87e8a3090ea626003f87f9392b3929a7bbf4104a05b6667348b6bd4bf1cd"}, + {file = "numpy-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:360137f8fb1b753c5cde3ac388597ad680eccbbbb3865ab65efea062c4a1fd16"}, + {file = "numpy-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:694f9e921a0c8f252980e85bce61ebbd07ed2b7d4fa72d0e4246f2f8aa6642ab"}, + {file = "numpy-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3683a8d166f2692664262fd4900f207791d005fb088d7fdb973cc8d663626faa"}, + {file = "numpy-2.2.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:780077d95eafc2ccc3ced969db22377b3864e5b9a0ea5eb347cc93b3ea900315"}, + {file = "numpy-2.2.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:55ba24ebe208344aa7a00e4482f65742969a039c2acfcb910bc6fcd776eb4355"}, + {file = "numpy-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b1d07b53b78bf84a96898c1bc139ad7f10fda7423f5fd158fd0f47ec5e01ac7"}, + {file = "numpy-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5062dc1a4e32a10dc2b8b13cedd58988261416e811c1dc4dbdea4f57eea61b0d"}, + {file = "numpy-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:fce4f615f8ca31b2e61aa0eb5865a21e14f5629515c9151850aa936c02a1ee51"}, + {file = "numpy-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:67d4cda6fa6ffa073b08c8372aa5fa767ceb10c9a0587c707505a6d426f4e046"}, + {file = "numpy-2.2.1-cp312-cp312-win32.whl", hash = "sha256:32cb94448be47c500d2c7a95f93e2f21a01f1fd05dd2beea1ccd049bb6001cd2"}, + {file = "numpy-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:ba5511d8f31c033a5fcbda22dd5c813630af98c70b2661f2d2c654ae3cdfcfc8"}, + {file = "numpy-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f1d09e520217618e76396377c81fba6f290d5f926f50c35f3a5f72b01a0da780"}, + {file = "numpy-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3ecc47cd7f6ea0336042be87d9e7da378e5c7e9b3c8ad0f7c966f714fc10d821"}, + {file = "numpy-2.2.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f419290bc8968a46c4933158c91a0012b7a99bb2e465d5ef5293879742f8797e"}, + {file = "numpy-2.2.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:5b6c390bfaef8c45a260554888966618328d30e72173697e5cabe6b285fb2348"}, + {file = "numpy-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:526fc406ab991a340744aad7e25251dd47a6720a685fa3331e5c59fef5282a59"}, + {file = "numpy-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f74e6fdeb9a265624ec3a3918430205dff1df7e95a230779746a6af78bc615af"}, + {file = "numpy-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:53c09385ff0b72ba79d8715683c1168c12e0b6e84fb0372e97553d1ea91efe51"}, + {file = "numpy-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f3eac17d9ec51be534685ba877b6ab5edc3ab7ec95c8f163e5d7b39859524716"}, + {file = "numpy-2.2.1-cp313-cp313-win32.whl", hash = "sha256:9ad014faa93dbb52c80d8f4d3dcf855865c876c9660cb9bd7553843dd03a4b1e"}, + {file = "numpy-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:164a829b6aacf79ca47ba4814b130c4020b202522a93d7bff2202bfb33b61c60"}, + {file = "numpy-2.2.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4dfda918a13cc4f81e9118dea249e192ab167a0bb1966272d5503e39234d694e"}, + {file = "numpy-2.2.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:733585f9f4b62e9b3528dd1070ec4f52b8acf64215b60a845fa13ebd73cd0712"}, + {file = "numpy-2.2.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:89b16a18e7bba224ce5114db863e7029803c179979e1af6ad6a6b11f70545008"}, + {file = "numpy-2.2.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:676f4eebf6b2d430300f1f4f4c2461685f8269f94c89698d832cdf9277f30b84"}, + {file = "numpy-2.2.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27f5cdf9f493b35f7e41e8368e7d7b4bbafaf9660cba53fb21d2cd174ec09631"}, + {file = "numpy-2.2.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1ad395cf254c4fbb5b2132fee391f361a6e8c1adbd28f2cd8e79308a615fe9d"}, + {file = "numpy-2.2.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:08ef779aed40dbc52729d6ffe7dd51df85796a702afbf68a4f4e41fafdc8bda5"}, + {file = "numpy-2.2.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:26c9c4382b19fcfbbed3238a14abf7ff223890ea1936b8890f058e7ba35e8d71"}, + {file = "numpy-2.2.1-cp313-cp313t-win32.whl", hash = "sha256:93cf4e045bae74c90ca833cba583c14b62cb4ba2cba0abd2b141ab52548247e2"}, + {file = "numpy-2.2.1-cp313-cp313t-win_amd64.whl", hash = "sha256:bff7d8ec20f5f42607599f9994770fa65d76edca264a87b5e4ea5629bce12268"}, + {file = "numpy-2.2.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7ba9cc93a91d86365a5d270dee221fdc04fb68d7478e6bf6af650de78a8339e3"}, + {file = "numpy-2.2.1-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:3d03883435a19794e41f147612a77a8f56d4e52822337844fff3d4040a142964"}, + {file = "numpy-2.2.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4511d9e6071452b944207c8ce46ad2f897307910b402ea5fa975da32e0102800"}, + {file = "numpy-2.2.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:5c5cc0cbabe9452038ed984d05ac87910f89370b9242371bd9079cb4af61811e"}, + {file = "numpy-2.2.1.tar.gz", hash = "sha256:45681fd7128c8ad1c379f0ca0776a8b0c6583d2f69889ddac01559dfe4390918"}, ] [[package]] @@ -1714,6 +2314,8 @@ version = "7.7.0" description = "A decorator to automatically detect mismatch when overriding a method." optional = false python-versions = ">=3.6" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49"}, {file = "overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a"}, @@ -1725,6 +2327,8 @@ version = "24.2" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, @@ -1736,6 +2340,8 @@ version = "2.2.3" description = "Powerful data structures for data analysis, time series, and statistics" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pandas-2.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1948ddde24197a0f7add2bdc4ca83bf2b1ef84a1bc8ccffd95eda17fd836ecb5"}, {file = "pandas-2.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:381175499d3802cde0eabbaf6324cce0c4f5d52ca6f8c377c29ad442f50f6348"}, @@ -1822,6 +2428,8 @@ version = "1.5.1" description = "Utilities for writing pandoc filters in python" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pandocfilters-1.5.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc"}, {file = "pandocfilters-1.5.1.tar.gz", hash = "sha256:002b4a555ee4ebc03f8b66307e287fa492e4a77b4ea14d3f934328297bb4939e"}, @@ -1833,6 +2441,8 @@ version = "0.8.4" description = "A Python Parser" optional = false python-versions = ">=3.6" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18"}, {file = "parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d"}, @@ -1848,6 +2458,8 @@ version = "4.9.0" description = "Pexpect allows easy control of interactive console applications." optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" and (sys_platform != \"win32\" and sys_platform != \"emscripten\") or python_version >= \"3.12\" and (sys_platform != \"win32\" and sys_platform != \"emscripten\")" files = [ {file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"}, {file = "pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f"}, @@ -1862,6 +2474,8 @@ version = "11.0.0" description = "Python Imaging Library (Fork)" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pillow-11.0.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:6619654954dc4936fcff82db8eb6401d3159ec6be81e33c6000dfd76ae189947"}, {file = "pillow-11.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b3c5ac4bed7519088103d9450a1107f76308ecf91d6dabc8a33a2fcfb18d0fba"}, @@ -1954,6 +2568,8 @@ version = "4.3.6" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.8" +groups = ["main", "dev"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, @@ -1970,6 +2586,8 @@ version = "1.5.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" +groups = ["dev"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, @@ -1985,6 +2603,8 @@ version = "4.0.1" description = "A framework for managing and maintaining multi-language pre-commit hooks." optional = false python-versions = ">=3.9" +groups = ["dev"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pre_commit-4.0.1-py2.py3-none-any.whl", hash = "sha256:efde913840816312445dc98787724647c65473daefe420785f885e8ed9a06878"}, {file = "pre_commit-4.0.1.tar.gz", hash = "sha256:80905ac375958c0444c65e9cebebd948b3cdb518f335a091a670a89d652139d2"}, @@ -1999,13 +2619,15 @@ virtualenv = ">=20.10.0" [[package]] name = "prometheus-client" -version = "0.21.0" +version = "0.21.1" description = "Python client for the Prometheus monitoring system." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ - {file = "prometheus_client-0.21.0-py3-none-any.whl", hash = "sha256:4fa6b4dd0ac16d58bb587c04b1caae65b8c5043e85f778f42f5f632f6af2e166"}, - {file = "prometheus_client-0.21.0.tar.gz", hash = "sha256:96c83c606b71ff2b0a433c98889d275f51ffec6c5e267de37c7a2b5c9aa9233e"}, + {file = "prometheus_client-0.21.1-py3-none-any.whl", hash = "sha256:594b45c410d6f4f8888940fe80b5cc2521b305a1fafe1c58609ef715a001f301"}, + {file = "prometheus_client-0.21.1.tar.gz", hash = "sha256:252505a722ac04b0456be05c05f75f45d760c2911ffc45f2a06bcaed9f3ae3fb"}, ] [package.extras] @@ -2017,6 +2639,8 @@ version = "3.0.48" description = "Library for building powerful interactive command lines in Python" optional = false python-versions = ">=3.7.0" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "prompt_toolkit-3.0.48-py3-none-any.whl", hash = "sha256:f49a827f90062e411f1ce1f854f2aedb3c23353244f8108b89283587397ac10e"}, {file = "prompt_toolkit-3.0.48.tar.gz", hash = "sha256:d6623ab0477a80df74e646bdbc93621143f5caf104206aa29294d53de1a03d90"}, @@ -2025,34 +2649,129 @@ files = [ [package.dependencies] wcwidth = "*" +[[package]] +name = "propcache" +version = "0.2.1" +description = "Accelerated property cache" +optional = false +python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" +files = [ + {file = "propcache-0.2.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:6b3f39a85d671436ee3d12c017f8fdea38509e4f25b28eb25877293c98c243f6"}, + {file = "propcache-0.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d51fbe4285d5db5d92a929e3e21536ea3dd43732c5b177c7ef03f918dff9f2"}, + {file = "propcache-0.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6445804cf4ec763dc70de65a3b0d9954e868609e83850a47ca4f0cb64bd79fea"}, + {file = "propcache-0.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9479aa06a793c5aeba49ce5c5692ffb51fcd9a7016e017d555d5e2b0045d212"}, + {file = "propcache-0.2.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d9631c5e8b5b3a0fda99cb0d29c18133bca1e18aea9effe55adb3da1adef80d3"}, + {file = "propcache-0.2.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3156628250f46a0895f1f36e1d4fbe062a1af8718ec3ebeb746f1d23f0c5dc4d"}, + {file = "propcache-0.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b6fb63ae352e13748289f04f37868099e69dba4c2b3e271c46061e82c745634"}, + {file = "propcache-0.2.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:887d9b0a65404929641a9fabb6452b07fe4572b269d901d622d8a34a4e9043b2"}, + {file = "propcache-0.2.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a96dc1fa45bd8c407a0af03b2d5218392729e1822b0c32e62c5bf7eeb5fb3958"}, + {file = "propcache-0.2.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:a7e65eb5c003a303b94aa2c3852ef130230ec79e349632d030e9571b87c4698c"}, + {file = "propcache-0.2.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:999779addc413181912e984b942fbcc951be1f5b3663cd80b2687758f434c583"}, + {file = "propcache-0.2.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:19a0f89a7bb9d8048d9c4370c9c543c396e894c76be5525f5e1ad287f1750ddf"}, + {file = "propcache-0.2.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:1ac2f5fe02fa75f56e1ad473f1175e11f475606ec9bd0be2e78e4734ad575034"}, + {file = "propcache-0.2.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:574faa3b79e8ebac7cb1d7930f51184ba1ccf69adfdec53a12f319a06030a68b"}, + {file = "propcache-0.2.1-cp310-cp310-win32.whl", hash = "sha256:03ff9d3f665769b2a85e6157ac8b439644f2d7fd17615a82fa55739bc97863f4"}, + {file = "propcache-0.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:2d3af2e79991102678f53e0dbf4c35de99b6b8b58f29a27ca0325816364caaba"}, + {file = "propcache-0.2.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:1ffc3cca89bb438fb9c95c13fc874012f7b9466b89328c3c8b1aa93cdcfadd16"}, + {file = "propcache-0.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f174bbd484294ed9fdf09437f889f95807e5f229d5d93588d34e92106fbf6717"}, + {file = "propcache-0.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:70693319e0b8fd35dd863e3e29513875eb15c51945bf32519ef52927ca883bc3"}, + {file = "propcache-0.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b480c6a4e1138e1aa137c0079b9b6305ec6dcc1098a8ca5196283e8a49df95a9"}, + {file = "propcache-0.2.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d27b84d5880f6d8aa9ae3edb253c59d9f6642ffbb2c889b78b60361eed449787"}, + {file = "propcache-0.2.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:857112b22acd417c40fa4595db2fe28ab900c8c5fe4670c7989b1c0230955465"}, + {file = "propcache-0.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf6c4150f8c0e32d241436526f3c3f9cbd34429492abddbada2ffcff506c51af"}, + {file = "propcache-0.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:66d4cfda1d8ed687daa4bc0274fcfd5267873db9a5bc0418c2da19273040eeb7"}, + {file = "propcache-0.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c2f992c07c0fca81655066705beae35fc95a2fa7366467366db627d9f2ee097f"}, + {file = "propcache-0.2.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:4a571d97dbe66ef38e472703067021b1467025ec85707d57e78711c085984e54"}, + {file = "propcache-0.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:bb6178c241278d5fe853b3de743087be7f5f4c6f7d6d22a3b524d323eecec505"}, + {file = "propcache-0.2.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:ad1af54a62ffe39cf34db1aa6ed1a1873bd548f6401db39d8e7cd060b9211f82"}, + {file = "propcache-0.2.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:e7048abd75fe40712005bcfc06bb44b9dfcd8e101dda2ecf2f5aa46115ad07ca"}, + {file = "propcache-0.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:160291c60081f23ee43d44b08a7e5fb76681221a8e10b3139618c5a9a291b84e"}, + {file = "propcache-0.2.1-cp311-cp311-win32.whl", hash = "sha256:819ce3b883b7576ca28da3861c7e1a88afd08cc8c96908e08a3f4dd64a228034"}, + {file = "propcache-0.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:edc9fc7051e3350643ad929df55c451899bb9ae6d24998a949d2e4c87fb596d3"}, + {file = "propcache-0.2.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:081a430aa8d5e8876c6909b67bd2d937bfd531b0382d3fdedb82612c618bc41a"}, + {file = "propcache-0.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d2ccec9ac47cf4e04897619c0e0c1a48c54a71bdf045117d3a26f80d38ab1fb0"}, + {file = "propcache-0.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:14d86fe14b7e04fa306e0c43cdbeebe6b2c2156a0c9ce56b815faacc193e320d"}, + {file = "propcache-0.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:049324ee97bb67285b49632132db351b41e77833678432be52bdd0289c0e05e4"}, + {file = "propcache-0.2.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1cd9a1d071158de1cc1c71a26014dcdfa7dd3d5f4f88c298c7f90ad6f27bb46d"}, + {file = "propcache-0.2.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98110aa363f1bb4c073e8dcfaefd3a5cea0f0834c2aab23dda657e4dab2f53b5"}, + {file = "propcache-0.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:647894f5ae99c4cf6bb82a1bb3a796f6e06af3caa3d32e26d2350d0e3e3faf24"}, + {file = "propcache-0.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bfd3223c15bebe26518d58ccf9a39b93948d3dcb3e57a20480dfdd315356baff"}, + {file = "propcache-0.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d71264a80f3fcf512eb4f18f59423fe82d6e346ee97b90625f283df56aee103f"}, + {file = "propcache-0.2.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:e73091191e4280403bde6c9a52a6999d69cdfde498f1fdf629105247599b57ec"}, + {file = "propcache-0.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3935bfa5fede35fb202c4b569bb9c042f337ca4ff7bd540a0aa5e37131659348"}, + {file = "propcache-0.2.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:f508b0491767bb1f2b87fdfacaba5f7eddc2f867740ec69ece6d1946d29029a6"}, + {file = "propcache-0.2.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:1672137af7c46662a1c2be1e8dc78cb6d224319aaa40271c9257d886be4363a6"}, + {file = "propcache-0.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b74c261802d3d2b85c9df2dfb2fa81b6f90deeef63c2db9f0e029a3cac50b518"}, + {file = "propcache-0.2.1-cp312-cp312-win32.whl", hash = "sha256:d09c333d36c1409d56a9d29b3a1b800a42c76a57a5a8907eacdbce3f18768246"}, + {file = "propcache-0.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:c214999039d4f2a5b2073ac506bba279945233da8c786e490d411dfc30f855c1"}, + {file = "propcache-0.2.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aca405706e0b0a44cc6bfd41fbe89919a6a56999157f6de7e182a990c36e37bc"}, + {file = "propcache-0.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:12d1083f001ace206fe34b6bdc2cb94be66d57a850866f0b908972f90996b3e9"}, + {file = "propcache-0.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d93f3307ad32a27bda2e88ec81134b823c240aa3abb55821a8da553eed8d9439"}, + {file = "propcache-0.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba278acf14471d36316159c94a802933d10b6a1e117b8554fe0d0d9b75c9d536"}, + {file = "propcache-0.2.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4e6281aedfca15301c41f74d7005e6e3f4ca143584ba696ac69df4f02f40d629"}, + {file = "propcache-0.2.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5b750a8e5a1262434fb1517ddf64b5de58327f1adc3524a5e44c2ca43305eb0b"}, + {file = "propcache-0.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf72af5e0fb40e9babf594308911436c8efde3cb5e75b6f206c34ad18be5c052"}, + {file = "propcache-0.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b2d0a12018b04f4cb820781ec0dffb5f7c7c1d2a5cd22bff7fb055a2cb19ebce"}, + {file = "propcache-0.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e800776a79a5aabdb17dcc2346a7d66d0777e942e4cd251defeb084762ecd17d"}, + {file = "propcache-0.2.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:4160d9283bd382fa6c0c2b5e017acc95bc183570cd70968b9202ad6d8fc48dce"}, + {file = "propcache-0.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:30b43e74f1359353341a7adb783c8f1b1c676367b011709f466f42fda2045e95"}, + {file = "propcache-0.2.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:58791550b27d5488b1bb52bc96328456095d96206a250d28d874fafe11b3dfaf"}, + {file = "propcache-0.2.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:0f022d381747f0dfe27e99d928e31bc51a18b65bb9e481ae0af1380a6725dd1f"}, + {file = "propcache-0.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:297878dc9d0a334358f9b608b56d02e72899f3b8499fc6044133f0d319e2ec30"}, + {file = "propcache-0.2.1-cp313-cp313-win32.whl", hash = "sha256:ddfab44e4489bd79bda09d84c430677fc7f0a4939a73d2bba3073036f487a0a6"}, + {file = "propcache-0.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:556fc6c10989f19a179e4321e5d678db8eb2924131e64652a51fe83e4c3db0e1"}, + {file = "propcache-0.2.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6a9a8c34fb7bb609419a211e59da8887eeca40d300b5ea8e56af98f6fbbb1541"}, + {file = "propcache-0.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ae1aa1cd222c6d205853b3013c69cd04515f9d6ab6de4b0603e2e1c33221303e"}, + {file = "propcache-0.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:accb6150ce61c9c4b7738d45550806aa2b71c7668c6942f17b0ac182b6142fd4"}, + {file = "propcache-0.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5eee736daafa7af6d0a2dc15cc75e05c64f37fc37bafef2e00d77c14171c2097"}, + {file = "propcache-0.2.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7a31fc1e1bd362874863fdeed71aed92d348f5336fd84f2197ba40c59f061bd"}, + {file = "propcache-0.2.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba4cfa1052819d16699e1d55d18c92b6e094d4517c41dd231a8b9f87b6fa681"}, + {file = "propcache-0.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f089118d584e859c62b3da0892b88a83d611c2033ac410e929cb6754eec0ed16"}, + {file = "propcache-0.2.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:781e65134efaf88feb447e8c97a51772aa75e48b794352f94cb7ea717dedda0d"}, + {file = "propcache-0.2.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:31f5af773530fd3c658b32b6bdc2d0838543de70eb9a2156c03e410f7b0d3aae"}, + {file = "propcache-0.2.1-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:a7a078f5d37bee6690959c813977da5291b24286e7b962e62a94cec31aa5188b"}, + {file = "propcache-0.2.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:cea7daf9fc7ae6687cf1e2c049752f19f146fdc37c2cc376e7d0032cf4f25347"}, + {file = "propcache-0.2.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:8b3489ff1ed1e8315674d0775dc7d2195fb13ca17b3808721b54dbe9fd020faf"}, + {file = "propcache-0.2.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:9403db39be1393618dd80c746cb22ccda168efce239c73af13c3763ef56ffc04"}, + {file = "propcache-0.2.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5d97151bc92d2b2578ff7ce779cdb9174337390a535953cbb9452fb65164c587"}, + {file = "propcache-0.2.1-cp39-cp39-win32.whl", hash = "sha256:9caac6b54914bdf41bcc91e7eb9147d331d29235a7c967c150ef5df6464fd1bb"}, + {file = "propcache-0.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:92fc4500fcb33899b05ba73276dfb684a20d31caa567b7cb5252d48f896a91b1"}, + {file = "propcache-0.2.1-py3-none-any.whl", hash = "sha256:52277518d6aae65536e9cea52d4e7fd2f7a66f4aa2d30ed3f2fcea620ace3c54"}, + {file = "propcache-0.2.1.tar.gz", hash = "sha256:3f77ce728b19cb537714499928fe800c3dda29e8d9428778fc7c186da4c09a64"}, +] + [[package]] name = "psutil" -version = "6.1.0" +version = "6.1.1" description = "Cross-platform lib for process and system monitoring in Python." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" -files = [ - {file = "psutil-6.1.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ff34df86226c0227c52f38b919213157588a678d049688eded74c76c8ba4a5d0"}, - {file = "psutil-6.1.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:c0e0c00aa18ca2d3b2b991643b799a15fc8f0563d2ebb6040f64ce8dc027b942"}, - {file = "psutil-6.1.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:000d1d1ebd634b4efb383f4034437384e44a6d455260aaee2eca1e9c1b55f047"}, - {file = "psutil-6.1.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:5cd2bcdc75b452ba2e10f0e8ecc0b57b827dd5d7aaffbc6821b2a9a242823a76"}, - {file = "psutil-6.1.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:045f00a43c737f960d273a83973b2511430d61f283a44c96bf13a6e829ba8fdc"}, - {file = "psutil-6.1.0-cp27-none-win32.whl", hash = "sha256:9118f27452b70bb1d9ab3198c1f626c2499384935aaf55388211ad982611407e"}, - {file = "psutil-6.1.0-cp27-none-win_amd64.whl", hash = "sha256:a8506f6119cff7015678e2bce904a4da21025cc70ad283a53b099e7620061d85"}, - {file = "psutil-6.1.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:6e2dcd475ce8b80522e51d923d10c7871e45f20918e027ab682f94f1c6351688"}, - {file = "psutil-6.1.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:0895b8414afafc526712c498bd9de2b063deaac4021a3b3c34566283464aff8e"}, - {file = "psutil-6.1.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9dcbfce5d89f1d1f2546a2090f4fcf87c7f669d1d90aacb7d7582addece9fb38"}, - {file = "psutil-6.1.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:498c6979f9c6637ebc3a73b3f87f9eb1ec24e1ce53a7c5173b8508981614a90b"}, - {file = "psutil-6.1.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d905186d647b16755a800e7263d43df08b790d709d575105d419f8b6ef65423a"}, - {file = "psutil-6.1.0-cp36-cp36m-win32.whl", hash = "sha256:6d3fbbc8d23fcdcb500d2c9f94e07b1342df8ed71b948a2649b5cb060a7c94ca"}, - {file = "psutil-6.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:1209036fbd0421afde505a4879dee3b2fd7b1e14fee81c0069807adcbbcca747"}, - {file = "psutil-6.1.0-cp37-abi3-win32.whl", hash = "sha256:1ad45a1f5d0b608253b11508f80940985d1d0c8f6111b5cb637533a0e6ddc13e"}, - {file = "psutil-6.1.0-cp37-abi3-win_amd64.whl", hash = "sha256:a8fb3752b491d246034fa4d279ff076501588ce8cbcdbb62c32fd7a377d996be"}, - {file = "psutil-6.1.0.tar.gz", hash = "sha256:353815f59a7f64cdaca1c0307ee13558a0512f6db064e92fe833784f08539c7a"}, -] - -[package.extras] -dev = ["black", "check-manifest", "coverage", "packaging", "pylint", "pyperf", "pypinfo", "pytest-cov", "requests", "rstcheck", "ruff", "sphinx", "sphinx_rtd_theme", "toml-sort", "twine", "virtualenv", "wheel"] +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" +files = [ + {file = "psutil-6.1.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:9ccc4316f24409159897799b83004cb1e24f9819b0dcf9c0b68bdcb6cefee6a8"}, + {file = "psutil-6.1.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ca9609c77ea3b8481ab005da74ed894035936223422dc591d6772b147421f777"}, + {file = "psutil-6.1.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:8df0178ba8a9e5bc84fed9cfa61d54601b371fbec5c8eebad27575f1e105c0d4"}, + {file = "psutil-6.1.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:1924e659d6c19c647e763e78670a05dbb7feaf44a0e9c94bf9e14dfc6ba50468"}, + {file = "psutil-6.1.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:018aeae2af92d943fdf1da6b58665124897cfc94faa2ca92098838f83e1b1bca"}, + {file = "psutil-6.1.1-cp27-none-win32.whl", hash = "sha256:6d4281f5bbca041e2292be3380ec56a9413b790579b8e593b1784499d0005dac"}, + {file = "psutil-6.1.1-cp27-none-win_amd64.whl", hash = "sha256:c777eb75bb33c47377c9af68f30e9f11bc78e0f07fbf907be4a5d70b2fe5f030"}, + {file = "psutil-6.1.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:fc0ed7fe2231a444fc219b9c42d0376e0a9a1a72f16c5cfa0f68d19f1a0663e8"}, + {file = "psutil-6.1.1-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:0bdd4eab935276290ad3cb718e9809412895ca6b5b334f5a9111ee6d9aff9377"}, + {file = "psutil-6.1.1-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b6e06c20c05fe95a3d7302d74e7097756d4ba1247975ad6905441ae1b5b66003"}, + {file = "psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97f7cb9921fbec4904f522d972f0c0e1f4fabbdd4e0287813b21215074a0f160"}, + {file = "psutil-6.1.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33431e84fee02bc84ea36d9e2c4a6d395d479c9dd9bba2376c1f6ee8f3a4e0b3"}, + {file = "psutil-6.1.1-cp36-cp36m-win32.whl", hash = "sha256:384636b1a64b47814437d1173be1427a7c83681b17a450bfc309a1953e329603"}, + {file = "psutil-6.1.1-cp36-cp36m-win_amd64.whl", hash = "sha256:8be07491f6ebe1a693f17d4f11e69d0dc1811fa082736500f649f79df7735303"}, + {file = "psutil-6.1.1-cp37-abi3-win32.whl", hash = "sha256:eaa912e0b11848c4d9279a93d7e2783df352b082f40111e078388701fd479e53"}, + {file = "psutil-6.1.1-cp37-abi3-win_amd64.whl", hash = "sha256:f35cfccb065fff93529d2afb4a2e89e363fe63ca1e4a5da22b603a85833c2649"}, + {file = "psutil-6.1.1.tar.gz", hash = "sha256:cf8496728c18f2d0b45198f06895be52f36611711746b7f30c464b422b50e2f5"}, +] + +[package.extras] +dev = ["abi3audit", "black", "check-manifest", "coverage", "packaging", "pylint", "pyperf", "pypinfo", "pytest-cov", "requests", "rstcheck", "ruff", "sphinx", "sphinx_rtd_theme", "toml-sort", "twine", "virtualenv", "vulture", "wheel"] test = ["pytest", "pytest-xdist", "setuptools"] [[package]] @@ -2061,6 +2780,8 @@ version = "0.7.0" description = "Run a subprocess in a pseudo terminal" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" and (sys_platform != \"win32\" and sys_platform != \"emscripten\") or python_version <= \"3.11\" and os_name != \"nt\" or python_version >= \"3.12\" and (sys_platform != \"win32\" and sys_platform != \"emscripten\") or python_version >= \"3.12\" and os_name != \"nt\"" files = [ {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, @@ -2072,6 +2793,8 @@ version = "0.2.3" description = "Safely evaluate AST nodes without side effects" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0"}, {file = "pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42"}, @@ -2086,17 +2809,157 @@ version = "2.22" description = "C parser in Python" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, ] +[[package]] +name = "pydantic" +version = "2.10.4" +description = "Data validation using Python type hints" +optional = false +python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" +files = [ + {file = "pydantic-2.10.4-py3-none-any.whl", hash = "sha256:597e135ea68be3a37552fb524bc7d0d66dcf93d395acd93a00682f1efcb8ee3d"}, + {file = "pydantic-2.10.4.tar.gz", hash = "sha256:82f12e9723da6de4fe2ba888b5971157b3be7ad914267dea8f05f82b28254f06"}, +] + +[package.dependencies] +annotated-types = ">=0.6.0" +pydantic-core = "2.27.2" +typing-extensions = ">=4.12.2" + +[package.extras] +email = ["email-validator (>=2.0.0)"] +timezone = ["tzdata"] + +[[package]] +name = "pydantic-core" +version = "2.27.2" +description = "Core functionality for Pydantic validation and serialization" +optional = false +python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" +files = [ + {file = "pydantic_core-2.27.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2d367ca20b2f14095a8f4fa1210f5a7b78b8a20009ecced6b12818f455b1e9fa"}, + {file = "pydantic_core-2.27.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:491a2b73db93fab69731eaee494f320faa4e093dbed776be1a829c2eb222c34c"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7969e133a6f183be60e9f6f56bfae753585680f3b7307a8e555a948d443cc05a"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3de9961f2a346257caf0aa508a4da705467f53778e9ef6fe744c038119737ef5"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e2bb4d3e5873c37bb3dd58714d4cd0b0e6238cebc4177ac8fe878f8b3aa8e74c"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:280d219beebb0752699480fe8f1dc61ab6615c2046d76b7ab7ee38858de0a4e7"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47956ae78b6422cbd46f772f1746799cbb862de838fd8d1fbd34a82e05b0983a"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:14d4a5c49d2f009d62a2a7140d3064f686d17a5d1a268bc641954ba181880236"}, + {file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:337b443af21d488716f8d0b6164de833e788aa6bd7e3a39c005febc1284f4962"}, + {file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:03d0f86ea3184a12f41a2d23f7ccb79cdb5a18e06993f8a45baa8dfec746f0e9"}, + {file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7041c36f5680c6e0f08d922aed302e98b3745d97fe1589db0a3eebf6624523af"}, + {file = "pydantic_core-2.27.2-cp310-cp310-win32.whl", hash = "sha256:50a68f3e3819077be2c98110c1f9dcb3817e93f267ba80a2c05bb4f8799e2ff4"}, + {file = "pydantic_core-2.27.2-cp310-cp310-win_amd64.whl", hash = "sha256:e0fd26b16394ead34a424eecf8a31a1f5137094cabe84a1bcb10fa6ba39d3d31"}, + {file = "pydantic_core-2.27.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:8e10c99ef58cfdf2a66fc15d66b16c4a04f62bca39db589ae8cba08bc55331bc"}, + {file = "pydantic_core-2.27.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:26f32e0adf166a84d0cb63be85c562ca8a6fa8de28e5f0d92250c6b7e9e2aff7"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c19d1ea0673cd13cc2f872f6c9ab42acc4e4f492a7ca9d3795ce2b112dd7e15"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5e68c4446fe0810e959cdff46ab0a41ce2f2c86d227d96dc3847af0ba7def306"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d9640b0059ff4f14d1f37321b94061c6db164fbe49b334b31643e0528d100d99"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:40d02e7d45c9f8af700f3452f329ead92da4c5f4317ca9b896de7ce7199ea459"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c1fd185014191700554795c99b347d64f2bb637966c4cfc16998a0ca700d048"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d81d2068e1c1228a565af076598f9e7451712700b673de8f502f0334f281387d"}, + {file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1a4207639fb02ec2dbb76227d7c751a20b1a6b4bc52850568e52260cae64ca3b"}, + {file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:3de3ce3c9ddc8bbd88f6e0e304dea0e66d843ec9de1b0042b0911c1663ffd474"}, + {file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:30c5f68ded0c36466acede341551106821043e9afaad516adfb6e8fa80a4e6a6"}, + {file = "pydantic_core-2.27.2-cp311-cp311-win32.whl", hash = "sha256:c70c26d2c99f78b125a3459f8afe1aed4d9687c24fd677c6a4436bc042e50d6c"}, + {file = "pydantic_core-2.27.2-cp311-cp311-win_amd64.whl", hash = "sha256:08e125dbdc505fa69ca7d9c499639ab6407cfa909214d500897d02afb816e7cc"}, + {file = "pydantic_core-2.27.2-cp311-cp311-win_arm64.whl", hash = "sha256:26f0d68d4b235a2bae0c3fc585c585b4ecc51382db0e3ba402a22cbc440915e4"}, + {file = "pydantic_core-2.27.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9e0c8cfefa0ef83b4da9588448b6d8d2a2bf1a53c3f1ae5fca39eb3061e2f0b0"}, + {file = "pydantic_core-2.27.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:83097677b8e3bd7eaa6775720ec8e0405f1575015a463285a92bfdfe254529ef"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:172fce187655fece0c90d90a678424b013f8fbb0ca8b036ac266749c09438cb7"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:519f29f5213271eeeeb3093f662ba2fd512b91c5f188f3bb7b27bc5973816934"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05e3a55d124407fffba0dd6b0c0cd056d10e983ceb4e5dbd10dda135c31071d6"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c3ed807c7b91de05e63930188f19e921d1fe90de6b4f5cd43ee7fcc3525cb8c"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fb4aadc0b9a0c063206846d603b92030eb6f03069151a625667f982887153e2"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:28ccb213807e037460326424ceb8b5245acb88f32f3d2777427476e1b32c48c4"}, + {file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:de3cd1899e2c279b140adde9357c4495ed9d47131b4a4eaff9052f23398076b3"}, + {file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:220f892729375e2d736b97d0e51466252ad84c51857d4d15f5e9692f9ef12be4"}, + {file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a0fcd29cd6b4e74fe8ddd2c90330fd8edf2e30cb52acda47f06dd615ae72da57"}, + {file = "pydantic_core-2.27.2-cp312-cp312-win32.whl", hash = "sha256:1e2cb691ed9834cd6a8be61228471d0a503731abfb42f82458ff27be7b2186fc"}, + {file = "pydantic_core-2.27.2-cp312-cp312-win_amd64.whl", hash = "sha256:cc3f1a99a4f4f9dd1de4fe0312c114e740b5ddead65bb4102884b384c15d8bc9"}, + {file = "pydantic_core-2.27.2-cp312-cp312-win_arm64.whl", hash = "sha256:3911ac9284cd8a1792d3cb26a2da18f3ca26c6908cc434a18f730dc0db7bfa3b"}, + {file = "pydantic_core-2.27.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:7d14bd329640e63852364c306f4d23eb744e0f8193148d4044dd3dacdaacbd8b"}, + {file = "pydantic_core-2.27.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:82f91663004eb8ed30ff478d77c4d1179b3563df6cdb15c0817cd1cdaf34d154"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71b24c7d61131bb83df10cc7e687433609963a944ccf45190cfc21e0887b08c9"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fa8e459d4954f608fa26116118bb67f56b93b209c39b008277ace29937453dc9"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce8918cbebc8da707ba805b7fd0b382816858728ae7fe19a942080c24e5b7cd1"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eda3f5c2a021bbc5d976107bb302e0131351c2ba54343f8a496dc8783d3d3a6a"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd8086fa684c4775c27f03f062cbb9eaa6e17f064307e86b21b9e0abc9c0f02e"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8d9b3388db186ba0c099a6d20f0604a44eabdeef1777ddd94786cdae158729e4"}, + {file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7a66efda2387de898c8f38c0cf7f14fca0b51a8ef0b24bfea5849f1b3c95af27"}, + {file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:18a101c168e4e092ab40dbc2503bdc0f62010e95d292b27827871dc85450d7ee"}, + {file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ba5dd002f88b78a4215ed2f8ddbdf85e8513382820ba15ad5ad8955ce0ca19a1"}, + {file = "pydantic_core-2.27.2-cp313-cp313-win32.whl", hash = "sha256:1ebaf1d0481914d004a573394f4be3a7616334be70261007e47c2a6fe7e50130"}, + {file = "pydantic_core-2.27.2-cp313-cp313-win_amd64.whl", hash = "sha256:953101387ecf2f5652883208769a79e48db18c6df442568a0b5ccd8c2723abee"}, + {file = "pydantic_core-2.27.2-cp313-cp313-win_arm64.whl", hash = "sha256:ac4dbfd1691affb8f48c2c13241a2e3b60ff23247cbcf981759c768b6633cf8b"}, + {file = "pydantic_core-2.27.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:d3e8d504bdd3f10835468f29008d72fc8359d95c9c415ce6e767203db6127506"}, + {file = "pydantic_core-2.27.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:521eb9b7f036c9b6187f0b47318ab0d7ca14bd87f776240b90b21c1f4f149320"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85210c4d99a0114f5a9481b44560d7d1e35e32cc5634c656bc48e590b669b145"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d716e2e30c6f140d7560ef1538953a5cd1a87264c737643d481f2779fc247fe1"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f66d89ba397d92f840f8654756196d93804278457b5fbede59598a1f9f90b228"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:669e193c1c576a58f132e3158f9dfa9662969edb1a250c54d8fa52590045f046"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdbe7629b996647b99c01b37f11170a57ae675375b14b8c13b8518b8320ced5"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d262606bf386a5ba0b0af3b97f37c83d7011439e3dc1a9298f21efb292e42f1a"}, + {file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:cabb9bcb7e0d97f74df8646f34fc76fbf793b7f6dc2438517d7a9e50eee4f14d"}, + {file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_armv7l.whl", hash = "sha256:d2d63f1215638d28221f664596b1ccb3944f6e25dd18cd3b86b0a4c408d5ebb9"}, + {file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bca101c00bff0adb45a833f8451b9105d9df18accb8743b08107d7ada14bd7da"}, + {file = "pydantic_core-2.27.2-cp38-cp38-win32.whl", hash = "sha256:f6f8e111843bbb0dee4cb6594cdc73e79b3329b526037ec242a3e49012495b3b"}, + {file = "pydantic_core-2.27.2-cp38-cp38-win_amd64.whl", hash = "sha256:fd1aea04935a508f62e0d0ef1f5ae968774a32afc306fb8545e06f5ff5cdf3ad"}, + {file = "pydantic_core-2.27.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:c10eb4f1659290b523af58fa7cffb452a61ad6ae5613404519aee4bfbf1df993"}, + {file = "pydantic_core-2.27.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ef592d4bad47296fb11f96cd7dc898b92e795032b4894dfb4076cfccd43a9308"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c61709a844acc6bf0b7dce7daae75195a10aac96a596ea1b776996414791ede4"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:42c5f762659e47fdb7b16956c71598292f60a03aa92f8b6351504359dbdba6cf"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c9775e339e42e79ec99c441d9730fccf07414af63eac2f0e48e08fd38a64d76"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57762139821c31847cfb2df63c12f725788bd9f04bc2fb392790959b8f70f118"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d1e85068e818c73e048fe28cfc769040bb1f475524f4745a5dc621f75ac7630"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:097830ed52fd9e427942ff3b9bc17fab52913b2f50f2880dc4a5611446606a54"}, + {file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:044a50963a614ecfae59bb1eaf7ea7efc4bc62f49ed594e18fa1e5d953c40e9f"}, + {file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:4e0b4220ba5b40d727c7f879eac379b822eee5d8fff418e9d3381ee45b3b0362"}, + {file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5e4f4bb20d75e9325cc9696c6802657b58bc1dbbe3022f32cc2b2b632c3fbb96"}, + {file = "pydantic_core-2.27.2-cp39-cp39-win32.whl", hash = "sha256:cca63613e90d001b9f2f9a9ceb276c308bfa2a43fafb75c8031c4f66039e8c6e"}, + {file = "pydantic_core-2.27.2-cp39-cp39-win_amd64.whl", hash = "sha256:77d1bca19b0f7021b3a982e6f903dcd5b2b06076def36a652e3907f596e29f67"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:2bf14caea37e91198329b828eae1618c068dfb8ef17bb33287a7ad4b61ac314e"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b0cb791f5b45307caae8810c2023a184c74605ec3bcbb67d13846c28ff731ff8"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:688d3fd9fcb71f41c4c015c023d12a79d1c4c0732ec9eb35d96e3388a120dcf3"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d591580c34f4d731592f0e9fe40f9cc1b430d297eecc70b962e93c5c668f15f"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:82f986faf4e644ffc189a7f1aafc86e46ef70372bb153e7001e8afccc6e54133"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:bec317a27290e2537f922639cafd54990551725fc844249e64c523301d0822fc"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:0296abcb83a797db256b773f45773da397da75a08f5fcaef41f2044adec05f50"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:0d75070718e369e452075a6017fbf187f788e17ed67a3abd47fa934d001863d9"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:7e17b560be3c98a8e3aa66ce828bdebb9e9ac6ad5466fba92eb74c4c95cb1151"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c33939a82924da9ed65dab5a65d427205a73181d8098e79b6b426bdf8ad4e656"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:00bad2484fa6bda1e216e7345a798bd37c68fb2d97558edd584942aa41b7d278"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c817e2b40aba42bac6f457498dacabc568c3b7a986fc9ba7c8d9d260b71485fb"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:251136cdad0cb722e93732cb45ca5299fb56e1344a833640bf93b2803f8d1bfd"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d2088237af596f0a524d3afc39ab3b036e8adb054ee57cbb1dcf8e09da5b29cc"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:d4041c0b966a84b4ae7a09832eb691a35aec90910cd2dbe7a208de59be77965b"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:8083d4e875ebe0b864ffef72a4304827015cff328a1be6e22cc850753bfb122b"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f141ee28a0ad2123b6611b6ceff018039df17f32ada8b534e6aa039545a3efb2"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7d0c8399fcc1848491f00e0314bd59fb34a9c008761bcb422a057670c3f65e35"}, + {file = "pydantic_core-2.27.2.tar.gz", hash = "sha256:eb026e5a4c1fee05726072337ff51d1efb6f59090b7da90d30ea58625b1ffb39"}, +] + +[package.dependencies] +typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" + [[package]] name = "pygments" version = "2.18.0" description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"}, {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"}, @@ -2111,6 +2974,8 @@ version = "3.2.0" description = "pyparsing module - Classes and methods to define and execute parsing grammars" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pyparsing-3.2.0-py3-none-any.whl", hash = "sha256:93d9577b88da0bbea8cc8334ee8b918ed014968fd2ec383e868fb8afb1ccef84"}, {file = "pyparsing-3.2.0.tar.gz", hash = "sha256:cbf74e27246d595d9a74b186b810f6fbb86726dbf3b9532efb343f6d7294fe9c"}, @@ -2121,13 +2986,15 @@ diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pytest" -version = "8.3.3" +version = "8.3.4" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.8" +groups = ["dev"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ - {file = "pytest-8.3.3-py3-none-any.whl", hash = "sha256:a6853c7375b2663155079443d2e45de913a911a11d669df02a50814944db57b2"}, - {file = "pytest-8.3.3.tar.gz", hash = "sha256:70b98107bd648308a7952b06e6ca9a50bc660be218d53c257cc1fc94fda10181"}, + {file = "pytest-8.3.4-py3-none-any.whl", hash = "sha256:50e16d954148559c9a74109af1eaf0c945ba2d8f30f0a3d3335edde19788b6f6"}, + {file = "pytest-8.3.4.tar.gz", hash = "sha256:965370d062bce11e73868e0335abac31b4d3de0e82f4007408d242b4f8610761"}, ] [package.dependencies] @@ -2141,12 +3008,34 @@ tomli = {version = ">=1", markers = "python_version < \"3.11\""} [package.extras] dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] +[[package]] +name = "pytest-cov" +version = "6.0.0" +description = "Pytest plugin for measuring coverage." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" +files = [ + {file = "pytest-cov-6.0.0.tar.gz", hash = "sha256:fde0b595ca248bb8e2d76f020b465f3b107c9632e6a1d1705f17834c89dcadc0"}, + {file = "pytest_cov-6.0.0-py3-none-any.whl", hash = "sha256:eee6f1b9e61008bd34975a4d5bab25801eb31898b032dd55addc93e96fcaaa35"}, +] + +[package.dependencies] +coverage = {version = ">=7.5", extras = ["toml"]} +pytest = ">=4.6" + +[package.extras] +testing = ["fields", "hunter", "process-tests", "pytest-xdist", "virtualenv"] + [[package]] name = "python-dateutil" version = "2.9.0.post0" description = "Extensions to the standard Python datetime module" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, @@ -2157,21 +3046,28 @@ six = ">=1.5" [[package]] name = "python-json-logger" -version = "2.0.7" -description = "A python library adding a json log formatter" +version = "3.2.1" +description = "JSON Log Formatter for the Python Logging Package" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ - {file = "python-json-logger-2.0.7.tar.gz", hash = "sha256:23e7ec02d34237c5aa1e29a070193a4ea87583bb4e7f8fd06d3de8264c4b2e1c"}, - {file = "python_json_logger-2.0.7-py3-none-any.whl", hash = "sha256:f380b826a991ebbe3de4d897aeec42760035ac760345e57b812938dc8b35e2bd"}, + {file = "python_json_logger-3.2.1-py3-none-any.whl", hash = "sha256:cdc17047eb5374bd311e748b42f99d71223f3b0e186f4206cc5d52aefe85b090"}, + {file = "python_json_logger-3.2.1.tar.gz", hash = "sha256:8eb0554ea17cb75b05d2848bc14fb02fbdbd9d6972120781b974380bfa162008"}, ] +[package.extras] +dev = ["backports.zoneinfo", "black", "build", "freezegun", "mdx_truly_sane_lists", "mike", "mkdocs", "mkdocs-awesome-pages-plugin", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-material (>=8.5)", "mkdocstrings[python]", "msgspec", "msgspec-python313-pre", "mypy", "orjson", "pylint", "pytest", "tzdata", "validate-pyproject[all]"] + [[package]] name = "pytz" version = "2024.2" description = "World timezone definitions, modern and historical" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pytz-2024.2-py2.py3-none-any.whl", hash = "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725"}, {file = "pytz-2024.2.tar.gz", hash = "sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a"}, @@ -2183,6 +3079,8 @@ version = "308" description = "Python for Window Extensions" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" and sys_platform == \"win32\" and platform_python_implementation != \"PyPy\" or python_version >= \"3.12\" and sys_platform == \"win32\" and platform_python_implementation != \"PyPy\"" files = [ {file = "pywin32-308-cp310-cp310-win32.whl", hash = "sha256:796ff4426437896550d2981b9c2ac0ffd75238ad9ea2d3bfa67a1abd546d262e"}, {file = "pywin32-308-cp310-cp310-win_amd64.whl", hash = "sha256:4fc888c59b3c0bef905ce7eb7e2106a07712015ea1c8234b703a088d46110e8e"}, @@ -2210,6 +3108,8 @@ version = "2.0.14" description = "Pseudo terminal support for Windows from Python." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" and os_name == \"nt\" or python_version >= \"3.12\" and os_name == \"nt\"" files = [ {file = "pywinpty-2.0.14-cp310-none-win_amd64.whl", hash = "sha256:0b149c2918c7974f575ba79f5a4aad58bd859a52fa9eb1296cc22aa412aa411f"}, {file = "pywinpty-2.0.14-cp311-none-win_amd64.whl", hash = "sha256:cf2a43ac7065b3e0dc8510f8c1f13a75fb8fde805efa3b8cff7599a1ef497bc7"}, @@ -2225,6 +3125,8 @@ version = "6.0.2" description = "YAML parser and emitter for Python" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, @@ -2287,6 +3189,8 @@ version = "26.2.0" description = "Python bindings for 0MQ" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pyzmq-26.2.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:ddf33d97d2f52d89f6e6e7ae66ee35a4d9ca6f36eda89c24591b0c40205a3629"}, {file = "pyzmq-26.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dacd995031a01d16eec825bf30802fceb2c3791ef24bcce48fa98ce40918c27b"}, @@ -2408,6 +3312,8 @@ version = "0.35.1" description = "JSON Referencing + Python" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "referencing-0.35.1-py3-none-any.whl", hash = "sha256:eda6d3234d62814d1c64e305c1331c9a3a6132da475ab6382eaa997b21ee75de"}, {file = "referencing-0.35.1.tar.gz", hash = "sha256:25b42124a6c8b632a425174f24087783efb348a6f1e0008e63cd4466fedf703c"}, @@ -2423,6 +3329,8 @@ version = "2.32.3" description = "Python HTTP for Humans." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, @@ -2438,12 +3346,30 @@ urllib3 = ">=1.21.1,<3" socks = ["PySocks (>=1.5.6,!=1.5.7)"] use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] +[[package]] +name = "requests-toolbelt" +version = "1.0.0" +description = "A utility belt for advanced users of python-requests" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" +files = [ + {file = "requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6"}, + {file = "requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06"}, +] + +[package.dependencies] +requests = ">=2.0.1,<3.0.0" + [[package]] name = "rfc3339-validator" version = "0.1.4" description = "A pure python RFC3339 validator" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"}, {file = "rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"}, @@ -2458,6 +3384,8 @@ version = "0.1.1" description = "Pure python rfc3986 validator" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "rfc3986_validator-0.1.1-py2.py3-none-any.whl", hash = "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9"}, {file = "rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055"}, @@ -2465,101 +3393,116 @@ files = [ [[package]] name = "rpds-py" -version = "0.21.0" +version = "0.22.3" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.9" -files = [ - {file = "rpds_py-0.21.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a017f813f24b9df929674d0332a374d40d7f0162b326562daae8066b502d0590"}, - {file = "rpds_py-0.21.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:20cc1ed0bcc86d8e1a7e968cce15be45178fd16e2ff656a243145e0b439bd250"}, - {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad116dda078d0bc4886cb7840e19811562acdc7a8e296ea6ec37e70326c1b41c"}, - {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:808f1ac7cf3b44f81c9475475ceb221f982ef548e44e024ad5f9e7060649540e"}, - {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de552f4a1916e520f2703ec474d2b4d3f86d41f353e7680b597512ffe7eac5d0"}, - {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:efec946f331349dfc4ae9d0e034c263ddde19414fe5128580f512619abed05f1"}, - {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b80b4690bbff51a034bfde9c9f6bf9357f0a8c61f548942b80f7b66356508bf5"}, - {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:085ed25baac88953d4283e5b5bd094b155075bb40d07c29c4f073e10623f9f2e"}, - {file = "rpds_py-0.21.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:daa8efac2a1273eed2354397a51216ae1e198ecbce9036fba4e7610b308b6153"}, - {file = "rpds_py-0.21.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:95a5bad1ac8a5c77b4e658671642e4af3707f095d2b78a1fdd08af0dfb647624"}, - {file = "rpds_py-0.21.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3e53861b29a13d5b70116ea4230b5f0f3547b2c222c5daa090eb7c9c82d7f664"}, - {file = "rpds_py-0.21.0-cp310-none-win32.whl", hash = "sha256:ea3a6ac4d74820c98fcc9da4a57847ad2cc36475a8bd9683f32ab6d47a2bd682"}, - {file = "rpds_py-0.21.0-cp310-none-win_amd64.whl", hash = "sha256:b8f107395f2f1d151181880b69a2869c69e87ec079c49c0016ab96860b6acbe5"}, - {file = "rpds_py-0.21.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:5555db3e618a77034954b9dc547eae94166391a98eb867905ec8fcbce1308d95"}, - {file = "rpds_py-0.21.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:97ef67d9bbc3e15584c2f3c74bcf064af36336c10d2e21a2131e123ce0f924c9"}, - {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ab2c2a26d2f69cdf833174f4d9d86118edc781ad9a8fa13970b527bf8236027"}, - {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4e8921a259f54bfbc755c5bbd60c82bb2339ae0324163f32868f63f0ebb873d9"}, - {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a7ff941004d74d55a47f916afc38494bd1cfd4b53c482b77c03147c91ac0ac3"}, - {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5145282a7cd2ac16ea0dc46b82167754d5e103a05614b724457cffe614f25bd8"}, - {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de609a6f1b682f70bb7163da745ee815d8f230d97276db049ab447767466a09d"}, - {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:40c91c6e34cf016fa8e6b59d75e3dbe354830777fcfd74c58b279dceb7975b75"}, - {file = "rpds_py-0.21.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d2132377f9deef0c4db89e65e8bb28644ff75a18df5293e132a8d67748397b9f"}, - {file = "rpds_py-0.21.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:0a9e0759e7be10109645a9fddaaad0619d58c9bf30a3f248a2ea57a7c417173a"}, - {file = "rpds_py-0.21.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9e20da3957bdf7824afdd4b6eeb29510e83e026473e04952dca565170cd1ecc8"}, - {file = "rpds_py-0.21.0-cp311-none-win32.whl", hash = "sha256:f71009b0d5e94c0e86533c0b27ed7cacc1239cb51c178fd239c3cfefefb0400a"}, - {file = "rpds_py-0.21.0-cp311-none-win_amd64.whl", hash = "sha256:e168afe6bf6ab7ab46c8c375606298784ecbe3ba31c0980b7dcbb9631dcba97e"}, - {file = "rpds_py-0.21.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:30b912c965b2aa76ba5168fd610087bad7fcde47f0a8367ee8f1876086ee6d1d"}, - {file = "rpds_py-0.21.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ca9989d5d9b1b300bc18e1801c67b9f6d2c66b8fd9621b36072ed1df2c977f72"}, - {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f54e7106f0001244a5f4cf810ba8d3f9c542e2730821b16e969d6887b664266"}, - {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fed5dfefdf384d6fe975cc026886aece4f292feaf69d0eeb716cfd3c5a4dd8be"}, - {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:590ef88db231c9c1eece44dcfefd7515d8bf0d986d64d0caf06a81998a9e8cab"}, - {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f983e4c2f603c95dde63df633eec42955508eefd8d0f0e6d236d31a044c882d7"}, - {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b229ce052ddf1a01c67d68166c19cb004fb3612424921b81c46e7ea7ccf7c3bf"}, - {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ebf64e281a06c904a7636781d2e973d1f0926a5b8b480ac658dc0f556e7779f4"}, - {file = "rpds_py-0.21.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:998a8080c4495e4f72132f3d66ff91f5997d799e86cec6ee05342f8f3cda7dca"}, - {file = "rpds_py-0.21.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:98486337f7b4f3c324ab402e83453e25bb844f44418c066623db88e4c56b7c7b"}, - {file = "rpds_py-0.21.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a78d8b634c9df7f8d175451cfeac3810a702ccb85f98ec95797fa98b942cea11"}, - {file = "rpds_py-0.21.0-cp312-none-win32.whl", hash = "sha256:a58ce66847711c4aa2ecfcfaff04cb0327f907fead8945ffc47d9407f41ff952"}, - {file = "rpds_py-0.21.0-cp312-none-win_amd64.whl", hash = "sha256:e860f065cc4ea6f256d6f411aba4b1251255366e48e972f8a347cf88077b24fd"}, - {file = "rpds_py-0.21.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:ee4eafd77cc98d355a0d02f263efc0d3ae3ce4a7c24740010a8b4012bbb24937"}, - {file = "rpds_py-0.21.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:688c93b77e468d72579351a84b95f976bd7b3e84aa6686be6497045ba84be560"}, - {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c38dbf31c57032667dd5a2f0568ccde66e868e8f78d5a0d27dcc56d70f3fcd3b"}, - {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2d6129137f43f7fa02d41542ffff4871d4aefa724a5fe38e2c31a4e0fd343fb0"}, - {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:520ed8b99b0bf86a176271f6fe23024323862ac674b1ce5b02a72bfeff3fff44"}, - {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aaeb25ccfb9b9014a10eaf70904ebf3f79faaa8e60e99e19eef9f478651b9b74"}, - {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af04ac89c738e0f0f1b913918024c3eab6e3ace989518ea838807177d38a2e94"}, - {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b9b76e2afd585803c53c5b29e992ecd183f68285b62fe2668383a18e74abe7a3"}, - {file = "rpds_py-0.21.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5afb5efde74c54724e1a01118c6e5c15e54e642c42a1ba588ab1f03544ac8c7a"}, - {file = "rpds_py-0.21.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:52c041802a6efa625ea18027a0723676a778869481d16803481ef6cc02ea8cb3"}, - {file = "rpds_py-0.21.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ee1e4fc267b437bb89990b2f2abf6c25765b89b72dd4a11e21934df449e0c976"}, - {file = "rpds_py-0.21.0-cp313-none-win32.whl", hash = "sha256:0c025820b78817db6a76413fff6866790786c38f95ea3f3d3c93dbb73b632202"}, - {file = "rpds_py-0.21.0-cp313-none-win_amd64.whl", hash = "sha256:320c808df533695326610a1b6a0a6e98f033e49de55d7dc36a13c8a30cfa756e"}, - {file = "rpds_py-0.21.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:2c51d99c30091f72a3c5d126fad26236c3f75716b8b5e5cf8effb18889ced928"}, - {file = "rpds_py-0.21.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cbd7504a10b0955ea287114f003b7ad62330c9e65ba012c6223dba646f6ffd05"}, - {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6dcc4949be728ede49e6244eabd04064336012b37f5c2200e8ec8eb2988b209c"}, - {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f414da5c51bf350e4b7960644617c130140423882305f7574b6cf65a3081cecb"}, - {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9afe42102b40007f588666bc7de82451e10c6788f6f70984629db193849dced1"}, - {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b929c2bb6e29ab31f12a1117c39f7e6d6450419ab7464a4ea9b0b417174f044"}, - {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8404b3717da03cbf773a1d275d01fec84ea007754ed380f63dfc24fb76ce4592"}, - {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e12bb09678f38b7597b8346983d2323a6482dcd59e423d9448108c1be37cac9d"}, - {file = "rpds_py-0.21.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:58a0e345be4b18e6b8501d3b0aa540dad90caeed814c515e5206bb2ec26736fd"}, - {file = "rpds_py-0.21.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:c3761f62fcfccf0864cc4665b6e7c3f0c626f0380b41b8bd1ce322103fa3ef87"}, - {file = "rpds_py-0.21.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c2b2f71c6ad6c2e4fc9ed9401080badd1469fa9889657ec3abea42a3d6b2e1ed"}, - {file = "rpds_py-0.21.0-cp39-none-win32.whl", hash = "sha256:b21747f79f360e790525e6f6438c7569ddbfb1b3197b9e65043f25c3c9b489d8"}, - {file = "rpds_py-0.21.0-cp39-none-win_amd64.whl", hash = "sha256:0626238a43152918f9e72ede9a3b6ccc9e299adc8ade0d67c5e142d564c9a83d"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6b4ef7725386dc0762857097f6b7266a6cdd62bfd209664da6712cb26acef035"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:6bc0e697d4d79ab1aacbf20ee5f0df80359ecf55db33ff41481cf3e24f206919"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da52d62a96e61c1c444f3998c434e8b263c384f6d68aca8274d2e08d1906325c"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:98e4fe5db40db87ce1c65031463a760ec7906ab230ad2249b4572c2fc3ef1f9f"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30bdc973f10d28e0337f71d202ff29345320f8bc49a31c90e6c257e1ccef4333"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:faa5e8496c530f9c71f2b4e1c49758b06e5f4055e17144906245c99fa6d45356"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32eb88c30b6a4f0605508023b7141d043a79b14acb3b969aa0b4f99b25bc7d4a"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a89a8ce9e4e75aeb7fa5d8ad0f3fecdee813802592f4f46a15754dcb2fd6b061"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:241e6c125568493f553c3d0fdbb38c74babf54b45cef86439d4cd97ff8feb34d"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:3b766a9f57663396e4f34f5140b3595b233a7b146e94777b97a8413a1da1be18"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:af4a644bf890f56e41e74be7d34e9511e4954894d544ec6b8efe1e21a1a8da6c"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:3e30a69a706e8ea20444b98a49f386c17b26f860aa9245329bab0851ed100677"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:031819f906bb146561af051c7cef4ba2003d28cff07efacef59da973ff7969ba"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b876f2bc27ab5954e2fd88890c071bd0ed18b9c50f6ec3de3c50a5ece612f7a6"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc5695c321e518d9f03b7ea6abb5ea3af4567766f9852ad1560f501b17588c7b"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b4de1da871b5c0fd5537b26a6fc6814c3cc05cabe0c941db6e9044ffbb12f04a"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:878f6fea96621fda5303a2867887686d7a198d9e0f8a40be100a63f5d60c88c9"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8eeec67590e94189f434c6d11c426892e396ae59e4801d17a93ac96b8c02a6c"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ff2eba7f6c0cb523d7e9cff0903f2fe1feff8f0b2ceb6bd71c0e20a4dcee271"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a429b99337062877d7875e4ff1a51fe788424d522bd64a8c0a20ef3021fdb6ed"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:d167e4dbbdac48bd58893c7e446684ad5d425b407f9336e04ab52e8b9194e2ed"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:4eb2de8a147ffe0626bfdc275fc6563aa7bf4b6db59cf0d44f0ccd6ca625a24e"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:e78868e98f34f34a88e23ee9ccaeeec460e4eaf6db16d51d7a9b883e5e785a5e"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:4991ca61656e3160cdaca4851151fd3f4a92e9eba5c7a530ab030d6aee96ec89"}, - {file = "rpds_py-0.21.0.tar.gz", hash = "sha256:ed6378c9d66d0de903763e7706383d60c33829581f0adff47b6535f1802fa6db"}, +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" +files = [ + {file = "rpds_py-0.22.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:6c7b99ca52c2c1752b544e310101b98a659b720b21db00e65edca34483259967"}, + {file = "rpds_py-0.22.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:be2eb3f2495ba669d2a985f9b426c1797b7d48d6963899276d22f23e33d47e37"}, + {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70eb60b3ae9245ddea20f8a4190bd79c705a22f8028aaf8bbdebe4716c3fab24"}, + {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4041711832360a9b75cfb11b25a6a97c8fb49c07b8bd43d0d02b45d0b499a4ff"}, + {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:64607d4cbf1b7e3c3c8a14948b99345eda0e161b852e122c6bb71aab6d1d798c"}, + {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e69b0a0e2537f26d73b4e43ad7bc8c8efb39621639b4434b76a3de50c6966e"}, + {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc27863442d388870c1809a87507727b799c8460573cfbb6dc0eeaef5a11b5ec"}, + {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e79dd39f1e8c3504be0607e5fc6e86bb60fe3584bec8b782578c3b0fde8d932c"}, + {file = "rpds_py-0.22.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e0fa2d4ec53dc51cf7d3bb22e0aa0143966119f42a0c3e4998293a3dd2856b09"}, + {file = "rpds_py-0.22.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:fda7cb070f442bf80b642cd56483b5548e43d366fe3f39b98e67cce780cded00"}, + {file = "rpds_py-0.22.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cff63a0272fcd259dcc3be1657b07c929c466b067ceb1c20060e8d10af56f5bf"}, + {file = "rpds_py-0.22.3-cp310-cp310-win32.whl", hash = "sha256:9bd7228827ec7bb817089e2eb301d907c0d9827a9e558f22f762bb690b131652"}, + {file = "rpds_py-0.22.3-cp310-cp310-win_amd64.whl", hash = "sha256:9beeb01d8c190d7581a4d59522cd3d4b6887040dcfc744af99aa59fef3e041a8"}, + {file = "rpds_py-0.22.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d20cfb4e099748ea39e6f7b16c91ab057989712d31761d3300d43134e26e165f"}, + {file = "rpds_py-0.22.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:68049202f67380ff9aa52f12e92b1c30115f32e6895cd7198fa2a7961621fc5a"}, + {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb4f868f712b2dd4bcc538b0a0c1f63a2b1d584c925e69a224d759e7070a12d5"}, + {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bc51abd01f08117283c5ebf64844a35144a0843ff7b2983e0648e4d3d9f10dbb"}, + {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0f3cec041684de9a4684b1572fe28c7267410e02450f4561700ca5a3bc6695a2"}, + {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7ef9d9da710be50ff6809fed8f1963fecdfecc8b86656cadfca3bc24289414b0"}, + {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59f4a79c19232a5774aee369a0c296712ad0e77f24e62cad53160312b1c1eaa1"}, + {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a60bce91f81ddaac922a40bbb571a12c1070cb20ebd6d49c48e0b101d87300d"}, + {file = "rpds_py-0.22.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e89391e6d60251560f0a8f4bd32137b077a80d9b7dbe6d5cab1cd80d2746f648"}, + {file = "rpds_py-0.22.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e3fb866d9932a3d7d0c82da76d816996d1667c44891bd861a0f97ba27e84fc74"}, + {file = "rpds_py-0.22.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1352ae4f7c717ae8cba93421a63373e582d19d55d2ee2cbb184344c82d2ae55a"}, + {file = "rpds_py-0.22.3-cp311-cp311-win32.whl", hash = "sha256:b0b4136a252cadfa1adb705bb81524eee47d9f6aab4f2ee4fa1e9d3cd4581f64"}, + {file = "rpds_py-0.22.3-cp311-cp311-win_amd64.whl", hash = "sha256:8bd7c8cfc0b8247c8799080fbff54e0b9619e17cdfeb0478ba7295d43f635d7c"}, + {file = "rpds_py-0.22.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:27e98004595899949bd7a7b34e91fa7c44d7a97c40fcaf1d874168bb652ec67e"}, + {file = "rpds_py-0.22.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1978d0021e943aae58b9b0b196fb4895a25cc53d3956b8e35e0b7682eefb6d56"}, + {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:655ca44a831ecb238d124e0402d98f6212ac527a0ba6c55ca26f616604e60a45"}, + {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:feea821ee2a9273771bae61194004ee2fc33f8ec7db08117ef9147d4bbcbca8e"}, + {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22bebe05a9ffc70ebfa127efbc429bc26ec9e9b4ee4d15a740033efda515cf3d"}, + {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3af6e48651c4e0d2d166dc1b033b7042ea3f871504b6805ba5f4fe31581d8d38"}, + {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e67ba3c290821343c192f7eae1d8fd5999ca2dc99994114643e2f2d3e6138b15"}, + {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:02fbb9c288ae08bcb34fb41d516d5eeb0455ac35b5512d03181d755d80810059"}, + {file = "rpds_py-0.22.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f56a6b404f74ab372da986d240e2e002769a7d7102cc73eb238a4f72eec5284e"}, + {file = "rpds_py-0.22.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0a0461200769ab3b9ab7e513f6013b7a97fdeee41c29b9db343f3c5a8e2b9e61"}, + {file = "rpds_py-0.22.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8633e471c6207a039eff6aa116e35f69f3156b3989ea3e2d755f7bc41754a4a7"}, + {file = "rpds_py-0.22.3-cp312-cp312-win32.whl", hash = "sha256:593eba61ba0c3baae5bc9be2f5232430453fb4432048de28399ca7376de9c627"}, + {file = "rpds_py-0.22.3-cp312-cp312-win_amd64.whl", hash = "sha256:d115bffdd417c6d806ea9069237a4ae02f513b778e3789a359bc5856e0404cc4"}, + {file = "rpds_py-0.22.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:ea7433ce7e4bfc3a85654aeb6747babe3f66eaf9a1d0c1e7a4435bbdf27fea84"}, + {file = "rpds_py-0.22.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6dd9412824c4ce1aca56c47b0991e65bebb7ac3f4edccfd3f156150c96a7bf25"}, + {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20070c65396f7373f5df4005862fa162db5d25d56150bddd0b3e8214e8ef45b4"}, + {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0b09865a9abc0ddff4e50b5ef65467cd94176bf1e0004184eb915cbc10fc05c5"}, + {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3453e8d41fe5f17d1f8e9c383a7473cd46a63661628ec58e07777c2fff7196dc"}, + {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f5d36399a1b96e1a5fdc91e0522544580dbebeb1f77f27b2b0ab25559e103b8b"}, + {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:009de23c9c9ee54bf11303a966edf4d9087cd43a6003672e6aa7def643d06518"}, + {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1aef18820ef3e4587ebe8b3bc9ba6e55892a6d7b93bac6d29d9f631a3b4befbd"}, + {file = "rpds_py-0.22.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f60bd8423be1d9d833f230fdbccf8f57af322d96bcad6599e5a771b151398eb2"}, + {file = "rpds_py-0.22.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:62d9cfcf4948683a18a9aff0ab7e1474d407b7bab2ca03116109f8464698ab16"}, + {file = "rpds_py-0.22.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9253fc214112405f0afa7db88739294295f0e08466987f1d70e29930262b4c8f"}, + {file = "rpds_py-0.22.3-cp313-cp313-win32.whl", hash = "sha256:fb0ba113b4983beac1a2eb16faffd76cb41e176bf58c4afe3e14b9c681f702de"}, + {file = "rpds_py-0.22.3-cp313-cp313-win_amd64.whl", hash = "sha256:c58e2339def52ef6b71b8f36d13c3688ea23fa093353f3a4fee2556e62086ec9"}, + {file = "rpds_py-0.22.3-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:f82a116a1d03628a8ace4859556fb39fd1424c933341a08ea3ed6de1edb0283b"}, + {file = "rpds_py-0.22.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3dfcbc95bd7992b16f3f7ba05af8a64ca694331bd24f9157b49dadeeb287493b"}, + {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59259dc58e57b10e7e18ce02c311804c10c5a793e6568f8af4dead03264584d1"}, + {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5725dd9cc02068996d4438d397e255dcb1df776b7ceea3b9cb972bdb11260a83"}, + {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99b37292234e61325e7a5bb9689e55e48c3f5f603af88b1642666277a81f1fbd"}, + {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:27b1d3b3915a99208fee9ab092b8184c420f2905b7d7feb4aeb5e4a9c509b8a1"}, + {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f612463ac081803f243ff13cccc648578e2279295048f2a8d5eb430af2bae6e3"}, + {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f73d3fef726b3243a811121de45193c0ca75f6407fe66f3f4e183c983573e130"}, + {file = "rpds_py-0.22.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:3f21f0495edea7fdbaaa87e633a8689cd285f8f4af5c869f27bc8074638ad69c"}, + {file = "rpds_py-0.22.3-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:1e9663daaf7a63ceccbbb8e3808fe90415b0757e2abddbfc2e06c857bf8c5e2b"}, + {file = "rpds_py-0.22.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a76e42402542b1fae59798fab64432b2d015ab9d0c8c47ba7addddbaf7952333"}, + {file = "rpds_py-0.22.3-cp313-cp313t-win32.whl", hash = "sha256:69803198097467ee7282750acb507fba35ca22cc3b85f16cf45fb01cb9097730"}, + {file = "rpds_py-0.22.3-cp313-cp313t-win_amd64.whl", hash = "sha256:f5cf2a0c2bdadf3791b5c205d55a37a54025c6e18a71c71f82bb536cf9a454bf"}, + {file = "rpds_py-0.22.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:378753b4a4de2a7b34063d6f95ae81bfa7b15f2c1a04a9518e8644e81807ebea"}, + {file = "rpds_py-0.22.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3445e07bf2e8ecfeef6ef67ac83de670358abf2996916039b16a218e3d95e97e"}, + {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b2513ba235829860b13faa931f3b6846548021846ac808455301c23a101689d"}, + {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eaf16ae9ae519a0e237a0f528fd9f0197b9bb70f40263ee57ae53c2b8d48aeb3"}, + {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:583f6a1993ca3369e0f80ba99d796d8e6b1a3a2a442dd4e1a79e652116413091"}, + {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4617e1915a539a0d9a9567795023de41a87106522ff83fbfaf1f6baf8e85437e"}, + {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c150c7a61ed4a4f4955a96626574e9baf1adf772c2fb61ef6a5027e52803543"}, + {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2fa4331c200c2521512595253f5bb70858b90f750d39b8cbfd67465f8d1b596d"}, + {file = "rpds_py-0.22.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:214b7a953d73b5e87f0ebece4a32a5bd83c60a3ecc9d4ec8f1dca968a2d91e99"}, + {file = "rpds_py-0.22.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:f47ad3d5f3258bd7058d2d506852217865afefe6153a36eb4b6928758041d831"}, + {file = "rpds_py-0.22.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f276b245347e6e36526cbd4a266a417796fc531ddf391e43574cf6466c492520"}, + {file = "rpds_py-0.22.3-cp39-cp39-win32.whl", hash = "sha256:bbb232860e3d03d544bc03ac57855cd82ddf19c7a07651a7c0fdb95e9efea8b9"}, + {file = "rpds_py-0.22.3-cp39-cp39-win_amd64.whl", hash = "sha256:cfbc454a2880389dbb9b5b398e50d439e2e58669160f27b60e5eca11f68ae17c"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:d48424e39c2611ee1b84ad0f44fb3b2b53d473e65de061e3f460fc0be5f1939d"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:24e8abb5878e250f2eb0d7859a8e561846f98910326d06c0d51381fed59357bd"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b232061ca880db21fa14defe219840ad9b74b6158adb52ddf0e87bead9e8493"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac0a03221cdb5058ce0167ecc92a8c89e8d0decdc9e99a2ec23380793c4dcb96"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb0c341fa71df5a4595f9501df4ac5abfb5a09580081dffbd1ddd4654e6e9123"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf9db5488121b596dbfc6718c76092fda77b703c1f7533a226a5a9f65248f8ad"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b8db6b5b2d4491ad5b6bdc2bc7c017eec108acbf4e6785f42a9eb0ba234f4c9"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b3d504047aba448d70cf6fa22e06cb09f7cbd761939fdd47604f5e007675c24e"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:e61b02c3f7a1e0b75e20c3978f7135fd13cb6cf551bf4a6d29b999a88830a338"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:e35ba67d65d49080e8e5a1dd40101fccdd9798adb9b050ff670b7d74fa41c566"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:26fd7cac7dd51011a245f29a2cc6489c4608b5a8ce8d75661bb4a1066c52dfbe"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:177c7c0fce2855833819c98e43c262007f42ce86651ffbb84f37883308cb0e7d"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:bb47271f60660803ad11f4c61b42242b8c1312a31c98c578f79ef9387bbde21c"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:70fb28128acbfd264eda9bf47015537ba3fe86e40d046eb2963d75024be4d055"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:44d61b4b7d0c2c9ac019c314e52d7cbda0ae31078aabd0f22e583af3e0d79723"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f0e260eaf54380380ac3808aa4ebe2d8ca28b9087cf411649f96bad6900c728"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b25bc607423935079e05619d7de556c91fb6adeae9d5f80868dde3468657994b"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fb6116dfb8d1925cbdb52595560584db42a7f664617a1f7d7f6e32f138cdf37d"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a63cbdd98acef6570c62b92a1e43266f9e8b21e699c363c0fef13bd530799c11"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2b8f60e1b739a74bab7e01fcbe3dddd4657ec685caa04681df9d562ef15b625f"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:2e8b55d8517a2fda8d95cb45d62a5a8bbf9dd0ad39c5b25c8833efea07b880ca"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:2de29005e11637e7a2361fa151f780ff8eb2543a0da1413bb951e9f14b699ef3"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:666ecce376999bf619756a24ce15bb14c5bfaf04bf00abc7e663ce17c3f34fe7"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:5246b14ca64a8675e0a7161f7af68fe3e910e6b90542b4bfb5439ba752191df6"}, + {file = "rpds_py-0.22.3.tar.gz", hash = "sha256:e32fee8ab45d3c2db6da19a5323bc3362237c8b653c70194414b892fd06a080d"}, ] [[package]] @@ -2568,6 +3511,8 @@ version = "1.14.1" description = "Fundamental algorithms for scientific computing in Python" optional = false python-versions = ">=3.10" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "scipy-1.14.1-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:b28d2ca4add7ac16ae8bb6632a3c86e4b9e4d52d3e34267f6e1b0c1f8d87e389"}, {file = "scipy-1.14.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d0d2821003174de06b69e58cef2316a6622b60ee613121199cb2852a873f8cf3"}, @@ -2618,6 +3563,8 @@ version = "1.8.3" description = "Send file to trash natively under Mac OS X, Windows and Linux" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "Send2Trash-1.8.3-py3-none-any.whl", hash = "sha256:0c31227e0bd08961c7665474a3d1ef7193929fedda4233843689baa056be46c9"}, {file = "Send2Trash-1.8.3.tar.gz", hash = "sha256:b18e7a3966d99871aefeb00cfbcfdced55ce4871194810fc71f4aa484b953abf"}, @@ -2630,33 +3577,37 @@ win32 = ["pywin32"] [[package]] name = "setuptools" -version = "75.5.0" +version = "75.6.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ - {file = "setuptools-75.5.0-py3-none-any.whl", hash = "sha256:87cb777c3b96d638ca02031192d40390e0ad97737e27b6b4fa831bea86f2f829"}, - {file = "setuptools-75.5.0.tar.gz", hash = "sha256:5c4ccb41111392671f02bb5f8436dfc5a9a7185e80500531b133f5775c4163ef"}, + {file = "setuptools-75.6.0-py3-none-any.whl", hash = "sha256:ce74b49e8f7110f9bf04883b730f4765b774ef3ef28f722cce7c273d253aaf7d"}, + {file = "setuptools-75.6.0.tar.gz", hash = "sha256:8199222558df7c86216af4f84c30e9b34a61d8ba19366cc914424cdbd28252f6"}, ] [package.extras] check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.7.0)"] -core = ["importlib-metadata (>=6)", "jaraco.collections", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more-itertools", "more-itertools (>=8.8)", "packaging", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] +core = ["importlib_metadata (>=6)", "jaraco.collections", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] enabler = ["pytest-enabler (>=2.2)"] test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] -type = ["importlib-metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (>=1.12,<1.14)", "pytest-mypy"] +type = ["importlib_metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (>=1.12,<1.14)", "pytest-mypy"] [[package]] name = "six" -version = "1.16.0" +version = "1.17.0" description = "Python 2 and 3 compatibility utilities" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, + {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, + {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, ] [[package]] @@ -2665,6 +3616,8 @@ version = "1.3.1" description = "Sniff out which async library your code is running under" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, @@ -2676,6 +3629,8 @@ version = "2.6" description = "A modern CSS selector implementation for Beautiful Soup." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "soupsieve-2.6-py3-none-any.whl", hash = "sha256:e72c4ff06e4fb6e4b5a9f0f55fe6e81514581fca1515028625d0f299c602ccc9"}, {file = "soupsieve-2.6.tar.gz", hash = "sha256:e2e68417777af359ec65daac1057404a3c8a5455bb8abc36f1a9866ab1a51abb"}, @@ -2687,6 +3642,8 @@ version = "0.6.3" description = "Extract data from python stack frames and tracebacks for informative displays" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"}, {file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"}, @@ -2706,6 +3663,8 @@ version = "0.18.1" description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "terminado-0.18.1-py3-none-any.whl", hash = "sha256:a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0"}, {file = "terminado-0.18.1.tar.gz", hash = "sha256:de09f2c4b85de4765f7714688fff57d3e75bad1f909b589fde880460c753fd2e"}, @@ -2727,6 +3686,8 @@ version = "1.4.0" description = "A tiny CSS parser" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289"}, {file = "tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7"}, @@ -2739,35 +3700,82 @@ webencodings = ">=0.4" doc = ["sphinx", "sphinx_rtd_theme"] test = ["pytest", "ruff"] +[[package]] +name = "tinydb" +version = "4.8.2" +description = "TinyDB is a tiny, document oriented database optimized for your happiness :)" +optional = false +python-versions = "<4.0,>=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" +files = [ + {file = "tinydb-4.8.2-py3-none-any.whl", hash = "sha256:f97030ee5cbc91eeadd1d7af07ab0e48ceb04aa63d4a983adbaca4cba16e86c3"}, + {file = "tinydb-4.8.2.tar.gz", hash = "sha256:f7dfc39b8d7fda7a1ca62a8dbb449ffd340a117c1206b68c50b1a481fb95181d"}, +] + [[package]] name = "tomli" -version = "2.1.0" +version = "2.2.1" description = "A lil' TOML parser" optional = false python-versions = ">=3.8" -files = [ - {file = "tomli-2.1.0-py3-none-any.whl", hash = "sha256:a5c57c3d1c56f5ccdf89f6523458f60ef716e210fc47c4cfb188c5ba473e0391"}, - {file = "tomli-2.1.0.tar.gz", hash = "sha256:3f646cae2aec94e17d04973e4249548320197cfabdf130015d023de4b74d8ab8"}, -] +groups = ["main", "dev"] +files = [ + {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, + {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8"}, + {file = "tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff"}, + {file = "tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b"}, + {file = "tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea"}, + {file = "tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e"}, + {file = "tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98"}, + {file = "tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4"}, + {file = "tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7"}, + {file = "tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744"}, + {file = "tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec"}, + {file = "tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69"}, + {file = "tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc"}, + {file = "tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff"}, +] +markers = {main = "python_version <= \"3.11\" or python_version >= \"3.12\"", dev = "python_full_version <= \"3.11.0a6\""} [[package]] name = "tornado" -version = "6.4.1" +version = "6.4.2" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ - {file = "tornado-6.4.1-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:163b0aafc8e23d8cdc3c9dfb24c5368af84a81e3364745ccb4427669bf84aec8"}, - {file = "tornado-6.4.1-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:6d5ce3437e18a2b66fbadb183c1d3364fb03f2be71299e7d10dbeeb69f4b2a14"}, - {file = "tornado-6.4.1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2e20b9113cd7293f164dc46fffb13535266e713cdb87bd2d15ddb336e96cfc4"}, - {file = "tornado-6.4.1-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ae50a504a740365267b2a8d1a90c9fbc86b780a39170feca9bcc1787ff80842"}, - {file = "tornado-6.4.1-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:613bf4ddf5c7a95509218b149b555621497a6cc0d46ac341b30bd9ec19eac7f3"}, - {file = "tornado-6.4.1-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:25486eb223babe3eed4b8aecbac33b37e3dd6d776bc730ca14e1bf93888b979f"}, - {file = "tornado-6.4.1-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:454db8a7ecfcf2ff6042dde58404164d969b6f5d58b926da15e6b23817950fc4"}, - {file = "tornado-6.4.1-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a02a08cc7a9314b006f653ce40483b9b3c12cda222d6a46d4ac63bb6c9057698"}, - {file = "tornado-6.4.1-cp38-abi3-win32.whl", hash = "sha256:d9a566c40b89757c9aa8e6f032bcdb8ca8795d7c1a9762910c722b1635c9de4d"}, - {file = "tornado-6.4.1-cp38-abi3-win_amd64.whl", hash = "sha256:b24b8982ed444378d7f21d563f4180a2de31ced9d8d84443907a0a64da2072e7"}, - {file = "tornado-6.4.1.tar.gz", hash = "sha256:92d3ab53183d8c50f8204a51e6f91d18a15d5ef261e84d452800d4ff6fc504e9"}, + {file = "tornado-6.4.2-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e828cce1123e9e44ae2a50a9de3055497ab1d0aeb440c5ac23064d9e44880da1"}, + {file = "tornado-6.4.2-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:072ce12ada169c5b00b7d92a99ba089447ccc993ea2143c9ede887e0937aa803"}, + {file = "tornado-6.4.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a017d239bd1bb0919f72af256a970624241f070496635784d9bf0db640d3fec"}, + {file = "tornado-6.4.2-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c36e62ce8f63409301537222faffcef7dfc5284f27eec227389f2ad11b09d946"}, + {file = "tornado-6.4.2-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bca9eb02196e789c9cb5c3c7c0f04fb447dc2adffd95265b2c7223a8a615ccbf"}, + {file = "tornado-6.4.2-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:304463bd0772442ff4d0f5149c6f1c2135a1fae045adf070821c6cdc76980634"}, + {file = "tornado-6.4.2-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:c82c46813ba483a385ab2a99caeaedf92585a1f90defb5693351fa7e4ea0bf73"}, + {file = "tornado-6.4.2-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:932d195ca9015956fa502c6b56af9eb06106140d844a335590c1ec7f5277d10c"}, + {file = "tornado-6.4.2-cp38-abi3-win32.whl", hash = "sha256:2876cef82e6c5978fde1e0d5b1f919d756968d5b4282418f3146b79b58556482"}, + {file = "tornado-6.4.2-cp38-abi3-win_amd64.whl", hash = "sha256:908b71bf3ff37d81073356a5fadcc660eb10c1476ee6e2725588626ce7e5ca38"}, + {file = "tornado-6.4.2.tar.gz", hash = "sha256:92bad5b4746e9879fd7bf1eb21dce4e3fc5128d71601f80005afa39237ad620b"}, ] [[package]] @@ -2776,6 +3784,8 @@ version = "5.14.3" description = "Traitlets Python configuration system" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f"}, {file = "traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7"}, @@ -2785,15 +3795,39 @@ files = [ docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<8.2)", "pytest-mock", "pytest-mypy-testing"] +[[package]] +name = "tuspy" +version = "1.1.0" +description = "A Python client for the tus resumable upload protocol -> http://tus.io" +optional = false +python-versions = ">=3.5.3" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" +files = [ + {file = "tuspy-1.1.0-py3-none-any.whl", hash = "sha256:7fc5ac8fb25de37c96c90213f83a1ffdede7f48a471cb5a15a2f57846828a79a"}, + {file = "tuspy-1.1.0.tar.gz", hash = "sha256:156734eac5c61a046cfecd70f14119f05be92cce198eb5a1a99a664482bedb89"}, +] + +[package.dependencies] +aiohttp = ">=3.6.2" +requests = ">=2.18.4" +tinydb = ">=3.5.0" + +[package.extras] +dev = ["Sphinx (==1.7.1)", "sphinx-autobuild (==2021.3.14)", "tox (>=2.3.1)"] +test = ["aioresponses (>=0.6.2)", "coverage (>=4.2)", "parametrize (>=0.1.1)", "pytest (>=3.0.3)", "pytest-cov (>=2.3.1,<2.6)", "responses (>=0.5.1)"] + [[package]] name = "types-python-dateutil" -version = "2.9.0.20241003" +version = "2.9.0.20241206" description = "Typing stubs for python-dateutil" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ - {file = "types-python-dateutil-2.9.0.20241003.tar.gz", hash = "sha256:58cb85449b2a56d6684e41aeefb4c4280631246a0da1a719bdbe6f3fb0317446"}, - {file = "types_python_dateutil-2.9.0.20241003-py3-none-any.whl", hash = "sha256:250e1d8e80e7bbc3a6c99b907762711d1a1cdd00e978ad39cb5940f6f0a87f3d"}, + {file = "types_python_dateutil-2.9.0.20241206-py3-none-any.whl", hash = "sha256:e248a4bc70a486d3e3ec84d0dc30eec3a5f979d6e7ee4123ae043eedbb987f53"}, + {file = "types_python_dateutil-2.9.0.20241206.tar.gz", hash = "sha256:18f493414c26ffba692a72369fea7a154c502646301ebfe3d56a04b3767284cb"}, ] [[package]] @@ -2802,6 +3836,8 @@ version = "4.12.2" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, @@ -2813,6 +3849,8 @@ version = "2024.2" description = "Provider of IANA time zone data" optional = false python-versions = ">=2" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "tzdata-2024.2-py2.py3-none-any.whl", hash = "sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd"}, {file = "tzdata-2024.2.tar.gz", hash = "sha256:7d85cc416e9382e69095b7bdf4afd9e3880418a2413feec7069d533d6b4e31cc"}, @@ -2824,6 +3862,8 @@ version = "1.3.0" description = "RFC 6570 URI Template Processor" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7"}, {file = "uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363"}, @@ -2834,13 +3874,15 @@ dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake [[package]] name = "urllib3" -version = "2.2.3" +version = "2.3.0" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ - {file = "urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac"}, - {file = "urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9"}, + {file = "urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df"}, + {file = "urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d"}, ] [package.extras] @@ -2851,13 +3893,15 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "virtualenv" -version = "20.27.1" +version = "20.28.0" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.8" +groups = ["dev"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ - {file = "virtualenv-20.27.1-py3-none-any.whl", hash = "sha256:f11f1b8a29525562925f745563bfd48b189450f61fb34c4f9cc79dd5aa32a1f4"}, - {file = "virtualenv-20.27.1.tar.gz", hash = "sha256:142c6be10212543b32c6c45d3d3893dff89112cc588b7d0879ae5a1ec03a47ba"}, + {file = "virtualenv-20.28.0-py3-none-any.whl", hash = "sha256:23eae1b4516ecd610481eda647f3a7c09aea295055337331bb4e6892ecce47b0"}, + {file = "virtualenv-20.28.0.tar.gz", hash = "sha256:2c9c3262bb8e7b87ea801d715fae4495e6032450c71d2309be9550e7364049aa"}, ] [package.dependencies] @@ -2875,6 +3919,8 @@ version = "0.2.13" description = "Measures the displayed width of unicode strings in a terminal" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"}, {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, @@ -2886,6 +3932,8 @@ version = "24.11.1" description = "A library for working with the color formats defined by HTML and CSS." optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "webcolors-24.11.1-py3-none-any.whl", hash = "sha256:515291393b4cdf0eb19c155749a096f779f7d909f7cceea072791cb9095b92e9"}, {file = "webcolors-24.11.1.tar.gz", hash = "sha256:ecb3d768f32202af770477b8b65f318fa4f566c22948673a977b00d589dd80f6"}, @@ -2897,6 +3945,8 @@ version = "0.5.1" description = "Character encoding aliases for legacy web content" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, @@ -2908,6 +3958,8 @@ version = "1.8.0" description = "WebSocket client for Python with low level API options" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "websocket_client-1.8.0-py3-none-any.whl", hash = "sha256:17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526"}, {file = "websocket_client-1.8.0.tar.gz", hash = "sha256:3239df9f44da632f96012472805d40a23281a991027ce11d2f45a6f24ac4c3da"}, @@ -2918,7 +3970,105 @@ docs = ["Sphinx (>=6.0)", "myst-parser (>=2.0.0)", "sphinx-rtd-theme (>=1.1.0)"] optional = ["python-socks", "wsaccel"] test = ["websockets"] +[[package]] +name = "yarl" +version = "1.18.3" +description = "Yet another URL library" +optional = false +python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" +files = [ + {file = "yarl-1.18.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7df647e8edd71f000a5208fe6ff8c382a1de8edfbccdbbfe649d263de07d8c34"}, + {file = "yarl-1.18.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c69697d3adff5aa4f874b19c0e4ed65180ceed6318ec856ebc423aa5850d84f7"}, + {file = "yarl-1.18.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:602d98f2c2d929f8e697ed274fbadc09902c4025c5a9963bf4e9edfc3ab6f7ed"}, + {file = "yarl-1.18.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c654d5207c78e0bd6d749f6dae1dcbbfde3403ad3a4b11f3c5544d9906969dde"}, + {file = "yarl-1.18.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5094d9206c64181d0f6e76ebd8fb2f8fe274950a63890ee9e0ebfd58bf9d787b"}, + {file = "yarl-1.18.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35098b24e0327fc4ebdc8ffe336cee0a87a700c24ffed13161af80124b7dc8e5"}, + {file = "yarl-1.18.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3236da9272872443f81fedc389bace88408f64f89f75d1bdb2256069a8730ccc"}, + {file = "yarl-1.18.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2c08cc9b16f4f4bc522771d96734c7901e7ebef70c6c5c35dd0f10845270bcd"}, + {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:80316a8bd5109320d38eef8833ccf5f89608c9107d02d2a7f985f98ed6876990"}, + {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:c1e1cc06da1491e6734f0ea1e6294ce00792193c463350626571c287c9a704db"}, + {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:fea09ca13323376a2fdfb353a5fa2e59f90cd18d7ca4eaa1fd31f0a8b4f91e62"}, + {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:e3b9fd71836999aad54084906f8663dffcd2a7fb5cdafd6c37713b2e72be1760"}, + {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:757e81cae69244257d125ff31663249b3013b5dc0a8520d73694aed497fb195b"}, + {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b1771de9944d875f1b98a745bc547e684b863abf8f8287da8466cf470ef52690"}, + {file = "yarl-1.18.3-cp310-cp310-win32.whl", hash = "sha256:8874027a53e3aea659a6d62751800cf6e63314c160fd607489ba5c2edd753cf6"}, + {file = "yarl-1.18.3-cp310-cp310-win_amd64.whl", hash = "sha256:93b2e109287f93db79210f86deb6b9bbb81ac32fc97236b16f7433db7fc437d8"}, + {file = "yarl-1.18.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8503ad47387b8ebd39cbbbdf0bf113e17330ffd339ba1144074da24c545f0069"}, + {file = "yarl-1.18.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:02ddb6756f8f4517a2d5e99d8b2f272488e18dd0bfbc802f31c16c6c20f22193"}, + {file = "yarl-1.18.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:67a283dd2882ac98cc6318384f565bffc751ab564605959df4752d42483ad889"}, + {file = "yarl-1.18.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d980e0325b6eddc81331d3f4551e2a333999fb176fd153e075c6d1c2530aa8a8"}, + {file = "yarl-1.18.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b643562c12680b01e17239be267bc306bbc6aac1f34f6444d1bded0c5ce438ca"}, + {file = "yarl-1.18.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c017a3b6df3a1bd45b9fa49a0f54005e53fbcad16633870104b66fa1a30a29d8"}, + {file = "yarl-1.18.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75674776d96d7b851b6498f17824ba17849d790a44d282929c42dbb77d4f17ae"}, + {file = "yarl-1.18.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ccaa3a4b521b780a7e771cc336a2dba389a0861592bbce09a476190bb0c8b4b3"}, + {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2d06d3005e668744e11ed80812e61efd77d70bb7f03e33c1598c301eea20efbb"}, + {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:9d41beda9dc97ca9ab0b9888cb71f7539124bc05df02c0cff6e5acc5a19dcc6e"}, + {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ba23302c0c61a9999784e73809427c9dbedd79f66a13d84ad1b1943802eaaf59"}, + {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:6748dbf9bfa5ba1afcc7556b71cda0d7ce5f24768043a02a58846e4a443d808d"}, + {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0b0cad37311123211dc91eadcb322ef4d4a66008d3e1bdc404808992260e1a0e"}, + {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0fb2171a4486bb075316ee754c6d8382ea6eb8b399d4ec62fde2b591f879778a"}, + {file = "yarl-1.18.3-cp311-cp311-win32.whl", hash = "sha256:61b1a825a13bef4a5f10b1885245377d3cd0bf87cba068e1d9a88c2ae36880e1"}, + {file = "yarl-1.18.3-cp311-cp311-win_amd64.whl", hash = "sha256:b9d60031cf568c627d028239693fd718025719c02c9f55df0a53e587aab951b5"}, + {file = "yarl-1.18.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1dd4bdd05407ced96fed3d7f25dbbf88d2ffb045a0db60dbc247f5b3c5c25d50"}, + {file = "yarl-1.18.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7c33dd1931a95e5d9a772d0ac5e44cac8957eaf58e3c8da8c1414de7dd27c576"}, + {file = "yarl-1.18.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:25b411eddcfd56a2f0cd6a384e9f4f7aa3efee14b188de13048c25b5e91f1640"}, + {file = "yarl-1.18.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:436c4fc0a4d66b2badc6c5fc5ef4e47bb10e4fd9bf0c79524ac719a01f3607c2"}, + {file = "yarl-1.18.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e35ef8683211db69ffe129a25d5634319a677570ab6b2eba4afa860f54eeaf75"}, + {file = "yarl-1.18.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:84b2deecba4a3f1a398df819151eb72d29bfeb3b69abb145a00ddc8d30094512"}, + {file = "yarl-1.18.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00e5a1fea0fd4f5bfa7440a47eff01d9822a65b4488f7cff83155a0f31a2ecba"}, + {file = "yarl-1.18.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d0e883008013c0e4aef84dcfe2a0b172c4d23c2669412cf5b3371003941f72bb"}, + {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5a3f356548e34a70b0172d8890006c37be92995f62d95a07b4a42e90fba54272"}, + {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:ccd17349166b1bee6e529b4add61727d3f55edb7babbe4069b5764c9587a8cc6"}, + {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b958ddd075ddba5b09bb0be8a6d9906d2ce933aee81100db289badbeb966f54e"}, + {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c7d79f7d9aabd6011004e33b22bc13056a3e3fb54794d138af57f5ee9d9032cb"}, + {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:4891ed92157e5430874dad17b15eb1fda57627710756c27422200c52d8a4e393"}, + {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ce1af883b94304f493698b00d0f006d56aea98aeb49d75ec7d98cd4a777e9285"}, + {file = "yarl-1.18.3-cp312-cp312-win32.whl", hash = "sha256:f91c4803173928a25e1a55b943c81f55b8872f0018be83e3ad4938adffb77dd2"}, + {file = "yarl-1.18.3-cp312-cp312-win_amd64.whl", hash = "sha256:7e2ee16578af3b52ac2f334c3b1f92262f47e02cc6193c598502bd46f5cd1477"}, + {file = "yarl-1.18.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:90adb47ad432332d4f0bc28f83a5963f426ce9a1a8809f5e584e704b82685dcb"}, + {file = "yarl-1.18.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:913829534200eb0f789d45349e55203a091f45c37a2674678744ae52fae23efa"}, + {file = "yarl-1.18.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ef9f7768395923c3039055c14334ba4d926f3baf7b776c923c93d80195624782"}, + {file = "yarl-1.18.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88a19f62ff30117e706ebc9090b8ecc79aeb77d0b1f5ec10d2d27a12bc9f66d0"}, + {file = "yarl-1.18.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e17c9361d46a4d5addf777c6dd5eab0715a7684c2f11b88c67ac37edfba6c482"}, + {file = "yarl-1.18.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1a74a13a4c857a84a845505fd2d68e54826a2cd01935a96efb1e9d86c728e186"}, + {file = "yarl-1.18.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41f7ce59d6ee7741af71d82020346af364949314ed3d87553763a2df1829cc58"}, + {file = "yarl-1.18.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f52a265001d830bc425f82ca9eabda94a64a4d753b07d623a9f2863fde532b53"}, + {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:82123d0c954dc58db301f5021a01854a85bf1f3bb7d12ae0c01afc414a882ca2"}, + {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:2ec9bbba33b2d00999af4631a3397d1fd78290c48e2a3e52d8dd72db3a067ac8"}, + {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:fbd6748e8ab9b41171bb95c6142faf068f5ef1511935a0aa07025438dd9a9bc1"}, + {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:877d209b6aebeb5b16c42cbb377f5f94d9e556626b1bfff66d7b0d115be88d0a"}, + {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:b464c4ab4bfcb41e3bfd3f1c26600d038376c2de3297760dfe064d2cb7ea8e10"}, + {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8d39d351e7faf01483cc7ff7c0213c412e38e5a340238826be7e0e4da450fdc8"}, + {file = "yarl-1.18.3-cp313-cp313-win32.whl", hash = "sha256:61ee62ead9b68b9123ec24bc866cbef297dd266175d53296e2db5e7f797f902d"}, + {file = "yarl-1.18.3-cp313-cp313-win_amd64.whl", hash = "sha256:578e281c393af575879990861823ef19d66e2b1d0098414855dd367e234f5b3c"}, + {file = "yarl-1.18.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:61e5e68cb65ac8f547f6b5ef933f510134a6bf31bb178be428994b0cb46c2a04"}, + {file = "yarl-1.18.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fe57328fbc1bfd0bd0514470ac692630f3901c0ee39052ae47acd1d90a436719"}, + {file = "yarl-1.18.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a440a2a624683108a1b454705ecd7afc1c3438a08e890a1513d468671d90a04e"}, + {file = "yarl-1.18.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09c7907c8548bcd6ab860e5f513e727c53b4a714f459b084f6580b49fa1b9cee"}, + {file = "yarl-1.18.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b4f6450109834af88cb4cc5ecddfc5380ebb9c228695afc11915a0bf82116789"}, + {file = "yarl-1.18.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9ca04806f3be0ac6d558fffc2fdf8fcef767e0489d2684a21912cc4ed0cd1b8"}, + {file = "yarl-1.18.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77a6e85b90a7641d2e07184df5557132a337f136250caafc9ccaa4a2a998ca2c"}, + {file = "yarl-1.18.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6333c5a377c8e2f5fae35e7b8f145c617b02c939d04110c76f29ee3676b5f9a5"}, + {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0b3c92fa08759dbf12b3a59579a4096ba9af8dd344d9a813fc7f5070d86bbab1"}, + {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:4ac515b860c36becb81bb84b667466885096b5fc85596948548b667da3bf9f24"}, + {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:045b8482ce9483ada4f3f23b3774f4e1bf4f23a2d5c912ed5170f68efb053318"}, + {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:a4bb030cf46a434ec0225bddbebd4b89e6471814ca851abb8696170adb163985"}, + {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:54d6921f07555713b9300bee9c50fb46e57e2e639027089b1d795ecd9f7fa910"}, + {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1d407181cfa6e70077df3377938c08012d18893f9f20e92f7d2f314a437c30b1"}, + {file = "yarl-1.18.3-cp39-cp39-win32.whl", hash = "sha256:ac36703a585e0929b032fbaab0707b75dc12703766d0b53486eabd5139ebadd5"}, + {file = "yarl-1.18.3-cp39-cp39-win_amd64.whl", hash = "sha256:ba87babd629f8af77f557b61e49e7c7cac36f22f871156b91e10a6e9d4f829e9"}, + {file = "yarl-1.18.3-py3-none-any.whl", hash = "sha256:b57f4f58099328dfb26c6a771d09fb20dbbae81d20cfb66141251ea063bd101b"}, + {file = "yarl-1.18.3.tar.gz", hash = "sha256:ac1801c45cbf77b6c99242eeff4fffb5e4e73a800b5c4ad4fc0be5def634d2e1"}, +] + +[package.dependencies] +idna = ">=2.0" +multidict = ">=4.0" +propcache = ">=0.2.0" + [metadata] -lock-version = "2.0" -python-versions = "^3.10" -content-hash = "d451d7d01850e6c5462ec9af8902821f4420caa9fac44b9a65c0a1af44056c1d" +lock-version = "2.1" +python-versions = ">=3.10,<4.0" +content-hash = "26cf6d31cdfd04362a4ea619c0c04b1713819a584356e749cd93f51fef60e880" diff --git a/pyproject.toml b/pyproject.toml index 3f01e0b..3864e18 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,44 +1,72 @@ -[tool.poetry] +[project] name = "pleiades" version = "0.1.1" description = "PLEIADES - Python Libraries Extensions for Isotopic Analysis via Detailed Examination of SAMMY" -authors = ["Alex M. Long "] license = "MIT" -packages = [ - { include = "pleiades", from = "src" } +authors = [ + {name = "Alex M. Long", email = "alexlong@lanl.gov"}, + {name = "Tsviki Hirsh", email = "tsviki.hirsh@gmail.com"}, + {name = "Chen Zhang", email = "zhangc@ornl.gov"}, + {name = "Jean Bilheux", email = "bilheuxjm@ornl.gov"}, ] -include = [ - "nucDataLibs/**" +requires-python = ">=3.10,<4.0" +dependencies = [ + "setuptools", + "numpy", + "scipy", + "pandas", + "matplotlib", + "jupyterlab", + "nova-galaxy", + "pyyaml", + "pydantic", ] -[build-system] -requires = ["poetry>=1.1.0"] -build-backend = "poetry.core.masonry.api" +[project.scripts] +pleiades = "pleiades:main" # Console script entry point +post_install_check = "pleiades.post_install:check_sammy_installed" # ---------------------------------------------------------- # # This section is for users who want to install via `poetry` # # ---------------------------------------------------------- # -[tool.poetry.dependencies] -# Core -python = "^3.10" # replace with the appropriate Python version -setuptools = "*" -# Numerical -numpy = "*" -scipy = "*" -pandas = "*" -# Visualization -matplotlib = ">=3.1.2" -# Notebooks -jupyterlab = "^4.3.0" - -[tool.poetry.scripts] -pleiades = "pleiades:main" # Console script entry point -post_install_check = "pleiades.post_install:check_sammy_installed" +[tool.poetry] +packages = [ + { include = "pleiades", from = "src" } +] +include = [ + "src/pleiades/data/isotopes/*", + "src/pleiades/data/resonances/*", + "src/pleiades/data/cross_sections/*" +] -[tool.poetry.dev-dependencies] -pytest = "*" +[tool.poetry.group.dev.dependencies] +pytest = "^8.3.4" +pytest-cov = "^6.0.0" pre-commit = "^4.0.1" +[build-system] +requires = ["poetry>=1.1.0"] +build-backend = "poetry.core.masonry.api" + # --------------------------------------------- # # The rest all 3rd party plugins configurations # # --------------------------------------------- # +[tool.pytest.ini_options] +addopts = "-v --cov=pleiades --cov-report=term-missing" +pythonpath = [ + ".", "src", "scripts" +] +testpaths = ["tests"] +python_files = ["test*.py"] +norecursedirs = [".git", "tmp*", "_tmp*", "__pycache__", "*dataset*", "*data_set*"] + +[tool.coverage.report] +exclude_lines = [ + "if __name__ == .__main__.:" +] + +[tool.ruff] +line-length = 140 + +[tool.ruff.lint] +select = ["A", "ARG","ASYNC", "E", "F", "I", "UP032", "W"] diff --git a/src/pleiades/core/__init__.py b/src/pleiades/core/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/pleiades/core/constants.py b/src/pleiades/core/constants.py new file mode 100644 index 0000000..304652e --- /dev/null +++ b/src/pleiades/core/constants.py @@ -0,0 +1,43 @@ +#!/usr/bin/env python +"""Physical constants with validation.""" + +from pydantic import BaseModel, ConfigDict, Field, computed_field + + +class PhysicalConstants(BaseModel): + """Physical constants used in nuclear calculations.""" + + model_config = ConfigDict(frozen=True) + + # Particle masses (use floats instead of Mass objects) + neutron_mass_amu: float = Field(default=1.008664915, description="Neutron mass in amu") + proton_mass_amu: float = Field(default=1.007276466, description="Proton mass in amu") + electron_mass_amu: float = Field(default=0.000548579909, description="Electron mass in amu") + + # Fundamental constants + speed_of_light: float = Field(default=299792458.0, description="Speed of light in m/s") + planck_constant: float = Field(default=4.135667696e-15, description="Planck constant in eV⋅s") + boltzmann_constant: float = Field(default=8.617333262e-5, description="Boltzmann constant in eV/K") + elementary_charge: float = Field(default=1.602176634e-19, description="Elementary charge in Coulombs") + avogadro_number: float = Field(default=6.02214076e23, description="Avogadro's number in mol^-1") + + # Nuclear physics constants + barn_to_cm2: float = Field(default=1e-24, description="Conversion factor from barns to cm²") + amu_to_kg: float = Field(default=1.660539067e-27, description="Conversion factor from amu to kg") + + # Derived constants + @computed_field + @property + def neutron_mass_kg(self) -> float: + """Neutron mass in kilograms.""" + return self.neutron_mass_amu * self.amu_to_kg + + @computed_field + @property + def atomic_mass_unit_eV(self) -> float: # noqa: N802 + """One atomic mass unit in eV/c².""" + return 931.494061e6 # MeV/c² to eV/c² + + +# Create singleton instance +CONSTANTS = PhysicalConstants() diff --git a/src/pleiades/core/data_manager.py b/src/pleiades/core/data_manager.py new file mode 100644 index 0000000..0ae644d --- /dev/null +++ b/src/pleiades/core/data_manager.py @@ -0,0 +1,280 @@ +#!/usr/bin/env python +"""Manages access to nuclear data files packaged with PLEIADES.""" + +import functools +import logging +import re +from importlib import resources +from pathlib import Path +from typing import Dict, List, Optional, Set + +from pleiades.core.models import CrossSectionPoint, DataCategory, IsotopeIdentifier, IsotopeInfo, IsotopeMassData + +logger = logging.getLogger(__name__) + + +class NuclearDataManager: + """ + Manages access to nuclear data files packaged with PLEIADES. + + This class provides a centralized interface for accessing nuclear data files + that are distributed with the PLEIADES package. It handles path resolution, + validates file existence, and caches results for improved performance. + """ + + # Mapping of categories to their valid file extensions + _VALID_EXTENSIONS = { + DataCategory.ISOTOPES: {".info", ".mas20", ".list"}, + DataCategory.RESONANCES: {".endf"}, + DataCategory.CROSS_SECTIONS: {".tot"}, + } + + def __init__(self): + """Initialize the NuclearDataManager.""" + self._cached_files: Dict[DataCategory, Set[Path]] = {} + self._initialize_cache() + + def _initialize_cache(self) -> None: + """Initialize the cache of available files for each category.""" + for category in DataCategory: + try: + category_path = self._get_category_path(category) + data_path = resources.files("pleiades.data").joinpath(category_path) + self._cached_files[category] = { + item.name for item in data_path.iterdir() if item.suffix in self._VALID_EXTENSIONS[category] + } + except Exception as e: + logger.error(f"Failed to initialize cache for {category}: {str(e)}") + self._cached_files[category] = set() + + @staticmethod + def _get_category_path(category: DataCategory) -> str: + """Get the filesystem path for a category.""" + return DataCategory.to_path(category) + + @functools.lru_cache(maxsize=128) + def get_file_path(self, category: DataCategory, filename: str) -> Path: + """ + Get the path to a specific data file. + + Args: + category: The category of the data file + filename: The name of the file to retrieve + + Returns: + Path to the requested file + + Raises: + FileNotFoundError: If the file doesn't exist + ValueError: If the category is invalid or file extension is not allowed + """ + if not isinstance(category, DataCategory): + raise ValueError(f"Invalid category: {category}") + + file_path = Path(filename) + if file_path.suffix not in self._VALID_EXTENSIONS[category]: + raise ValueError( + f"Invalid file extension for {category}. " f"Allowed extensions: {self._VALID_EXTENSIONS[category]}" + ) + + try: + with resources.path(f"pleiades.data.{self._get_category_path(category)}", filename) as path: + if not path.exists(): + raise FileNotFoundError(f"File {filename} not found in {category}") + return path + except Exception as e: + raise FileNotFoundError(f"Error accessing {filename} in {category}: {str(e)}") + + def list_files(self, category: Optional[DataCategory] = None) -> Dict[DataCategory, List[str]]: + """ + List available data files. + + Args: + category: Optional specific category to list files for + + Returns: + Dictionary mapping categories to lists of available filenames + + Raises: + ValueError: If specified category is invalid + """ + if category is not None: + if not isinstance(category, DataCategory): + raise ValueError(f"Invalid category: {category}") + return {category: sorted(self._cached_files[category])} + + return {cat: sorted(self._cached_files[cat]) for cat in DataCategory} + + def validate_file(self, category: DataCategory, filename: str) -> bool: + """ + Validate that a file exists and has the correct extension. + + Args: + category: The category of the file + filename: The name of the file to validate + + Returns: + True if the file is valid, False otherwise + """ + try: + path = Path(filename) + return path.suffix in self._VALID_EXTENSIONS[category] and path in self._cached_files[category] + except Exception: + return False + + def get_isotope_info(self, isotope: IsotopeIdentifier) -> Optional[IsotopeInfo]: + """ + Extract isotope information from the isotopes.info file. + + Args: + isotope: IsotopeIdentifier instance + + Returns: + IsotopeInfo containing spin and abundance if found, None otherwise + """ + try: + with self.get_file_path(DataCategory.ISOTOPES, "isotopes.info").open() as f: + for line in f: + line = line.strip() + if line and line[0].isdigit(): + data = line.split() + if data[3] == isotope.element and int(data[1]) == isotope.mass_number: + return IsotopeInfo(spin=float(data[5]), abundance=float(data[7])) + return None + except Exception as e: + logger.error(f"Error reading isotope info for {isotope}: {str(e)}") + raise + + def get_mass_data(self, isotope: IsotopeIdentifier) -> Optional[IsotopeMassData]: + """ + Extract mass data for an isotope from the mass.mas20 file. + + Args: + isotope: IsotopeIdentifier instance + + Returns: + IsotopeMassData containing atomic mass, mass uncertainty + + Raises: + ValueError: If data cannot be parsed + """ + try: + with self.get_file_path(DataCategory.ISOTOPES, "mass.mas20").open() as f: + # Skip header lines + for _ in range(36): + next(f) + + for line in f: + if (isotope.element in line[:25]) and (str(isotope.mass_number) in line[:25]): + # Parse the line according to mass.mas20 format + atomic_mass_coarse = line[106:109].replace("*", "nan").replace("#", ".0") + atomic_mass_fine = line[110:124].replace("*", "nan").replace("#", ".0") + + if "nan" not in [atomic_mass_coarse, atomic_mass_fine]: + atomic_mass = float(atomic_mass_coarse + atomic_mass_fine) / 1e6 + else: + atomic_mass = float("nan") + + return IsotopeMassData( + atomic_mass=atomic_mass, + mass_uncertainty=float(line[124:136].replace("*", "nan").replace("#", ".0")), + binding_energy=float(line[54:66].replace("*", "nan").replace("#", ".0")), + beta_decay_energy=float(line[81:93].replace("*", "nan").replace("#", ".0")), + ) + return None + except Exception as e: + logger.error(f"Error reading mass data for {isotope}: {str(e)}") + raise + + def read_cross_section_data(self, filename: str, isotope: IsotopeIdentifier) -> List[CrossSectionPoint]: + """ + Read cross-section data from a .tot file for a specific isotope. + + Args: + filename: Name of the cross-section file + isotope: IsotopeIdentifier instance + + Returns: + List of CrossSectionPoint containing energy and cross-section values + + Raises: + ValueError: If isotope data not found or file format is invalid + """ + try: + data_points = [] + isotope_found = False + capture_data = False + + # Convert to string format expected in file (e.g., "U-238") + isotope_str = str(isotope) + + with self.get_file_path(DataCategory.CROSS_SECTIONS, filename).open() as f: + for line in f: + if isotope_str.upper() in line: + isotope_found = True + elif isotope_found and "#data..." in line: + capture_data = True + elif isotope_found and "//" in line: + break + elif capture_data and not line.startswith("#"): + try: + energy_MeV, xs = line.split() # noqa: N806 + data_points.append( + CrossSectionPoint( + energy=float(energy_MeV) * 1e6, # Convert MeV to eV + cross_section=float(xs), + ) + ) + except ValueError: + logger.warning(f"Skipping malformed line in {filename}: {line.strip()}") + continue + + if not isotope_found: + raise ValueError(f"No data found for isotope {isotope_str} in {filename}") + + return data_points + except Exception as e: + logger.error(f"Error reading cross-section data from {filename}: {str(e)}") + raise + + def get_mat_number(self, isotope: IsotopeIdentifier) -> Optional[int]: + """ + Get ENDF MAT number for an isotope. + + Args: + isotope: IsotopeIdentifier instance + + Returns: + ENDF MAT number if found, None otherwise + + Raises: + ValueError: If isotope format is invalid + """ + try: + with self.get_file_path(DataCategory.ISOTOPES, "neutrons.list").open() as f: + # Line matching breakdown: + # "496) 92-U -238 IAEA EVAL-DEC14 IAEA Consortium 9237" + # When line matches pattern + # We get groups: + # match.group(1) = "92" + # match.group(2) = "U" + # match.group(3) = "238" + # Check if constructed string matches input: + # match.expand(r"\2-\3") = "U-238" + # If match found, get MAT number: + # Take last 5 characters of line " 9237" -> 9237 + pattern = r"\b\s*(\d+)\s*-\s*([A-Za-z]+)\s*-\s*(\d+)([A-Za-z]*)\b" + + for line in f: + match = re.search(pattern, line) + if match and match.expand(r"\2-\3") == str(isotope): + return int(line[-5:]) + return None + except Exception as e: + logger.error(f"Error getting MAT number for {isotope}: {str(e)}") + raise + + def clear_cache(self) -> None: + """Clear the file cache and force reinitialization.""" + self._cached_files.clear() + self._initialize_cache() diff --git a/src/pleiades/core/models.py b/src/pleiades/core/models.py new file mode 100644 index 0000000..50f1c37 --- /dev/null +++ b/src/pleiades/core/models.py @@ -0,0 +1,257 @@ +#!/usr/bin/env python +"""Core physical quantity models with validation.""" + +import math +import re +from enum import Enum, auto +from pathlib import Path +from typing import List, Optional + +from pydantic import BaseModel, ConfigDict, Field, computed_field, field_validator, model_validator +from typing_extensions import Annotated + +from pleiades.core.constants import CONSTANTS + +NonNegativeFloat = Annotated[float, Field(ge=0)] +PositiveFloat = Annotated[float, Field(gt=0)] + + +class DataCategory(Enum): + """Enumeration of valid data categories.""" + + ISOTOPES = auto() + RESONANCES = auto() + CROSS_SECTIONS = auto() + + @classmethod + def to_path(cls, category: "DataCategory") -> str: + """Convert category enum to path string.""" + return category.name.lower() + + +class IsotopeInfo(BaseModel): + model_config = ConfigDict(frozen=True) + + spin: float = Field(ge=0) + abundance: float = Field(ge=0) + + +class IsotopeIdentifier(BaseModel): + model_config = ConfigDict(frozen=True) + + element: str = Field(pattern=r"^[A-Z][a-z]?$") + mass_number: int = Field(gt=0) + + @classmethod + def from_string(cls, isotope_str: str) -> "IsotopeIdentifier": + match = re.match(r"([A-Za-z]+)-(\d+)", isotope_str) + if not match: + raise ValueError("Invalid isotope format") + return cls(element=match.group(1).capitalize(), mass_number=int(match.group(2))) + + def __str__(self) -> str: + """Convert to string format 'element-mass_number'.""" + return f"{self.element}-{self.mass_number}" + + +class CrossSectionPoint(BaseModel): + model_config = ConfigDict(frozen=True) + + energy: NonNegativeFloat = Field(description="Energy in eV") + cross_section: NonNegativeFloat = Field(description="Cross section in barns") + + +class IsotopeMassData(BaseModel): + model_config = ConfigDict(frozen=True) + + atomic_mass: float = Field(description="Mass in atomic mass units") + mass_uncertainty: NonNegativeFloat + binding_energy: Optional[float] = Field(description="Binding energy in MeV") + beta_decay_energy: Optional[float] = Field(description="Beta decay energy in MeV") + + +class UnitType(str, Enum): + """Physical unit types with strict validation.""" + + ENERGY = "energy" # eV + MASS = "mass" # amu + LENGTH = "length" # m + CROSS_SECTION = "cross" # barns + TIME = "time" # s + TEMPERATURE = "temp" # K + DIMENSIONLESS = "none" # unitless + + @property + def unit_symbol(self) -> str: + """Get standard unit symbol.""" + return { + "energy": "eV", + "mass": "amu", + "length": "m", + "cross": "b", + "time": "s", + "temp": "K", + "none": "", + }[self.value] + + +class PhysicalQuantity(BaseModel): + """Base model for physical quantities with validation.""" + + model_config = ConfigDict(frozen=True) + + value: float = Field(description="Numerical value") + unit_type: UnitType = Field(description="Physical unit type") + + @field_validator("value") + @classmethod + def validate_value(cls, v: float) -> float: + """Validate numerical value.""" + if math.isnan(v): + raise ValueError("Value cannot be NaN") + if math.isinf(v): + raise ValueError("Value cannot be infinite") + return v + + @computed_field + @property + def display_str(self) -> str: + """String representation with units.""" + return f"{self.value} {self.unit_type.unit_symbol}" + + +class Energy(PhysicalQuantity): + """Energy quantity with non-negative validation.""" + + value: NonNegativeFloat + unit_type: UnitType = Field(default=UnitType.ENERGY, frozen=True) + + # Class methods are not affected by Pydantic v2 changes + @classmethod + def from_MeV(cls, value: float) -> "Energy": # noqa: N802 + """Convert from MeV to eV.""" + return cls(value=value * 1e6) + + @computed_field + @property + def MeV(self) -> float: # noqa: N802 + """Energy value in MeV.""" + return self.value * 1e-6 + + +class Mass(PhysicalQuantity): + """Mass quantity with positive validation.""" + + value: PositiveFloat + unit_type: UnitType = Field(default=UnitType.MASS, frozen=True) + + @computed_field + @property + def kg(self) -> float: + """Mass value in kilograms.""" + return self.value * CONSTANTS.amu_to_kg + + +class Temperature(PhysicalQuantity): + """Temperature quantity with non-negative validation.""" + + value: NonNegativeFloat + unit_type: UnitType = Field(default=UnitType.TEMPERATURE, frozen=True) + + +class Isotope(BaseModel): + """ + Represents an isotope with its physical properties and data. + + Migration source: simData.py Isotope class + Changes made: + - Converted from regular class to Pydantic model + - Added proper type hints and validation + - Made immutable with ConfigDict(frozen=True) + - Added computed properties for derived values + """ + + model_config = ConfigDict(frozen=False) + + # Core properties + identifier: IsotopeIdentifier + atomic_mass: Mass + thickness: NonNegativeFloat + thickness_unit: str = Field(pattern=r"^(cm|mm|atoms/cm2)$") + abundance: float = Field(ge=0.0, le=1.0) + density: NonNegativeFloat + density_unit: str = Field(default="g/cm3", pattern=r"^g/cm3$") + + # Data source tracking + xs_file_location: Optional[Path] = None + xs_data: List[CrossSectionPoint] = Field(default_factory=list) + + @model_validator(mode="after") + def validate_units(self) -> "Isotope": + """Validate unit compatibility.""" + valid_thickness_units = {"cm", "mm", "atoms/cm2"} + if self.thickness_unit not in valid_thickness_units: + raise ValueError(f"Invalid thickness unit. Must be one of: {valid_thickness_units}") + if self.density_unit != "g/cm3": + raise ValueError("Density must be in g/cm3") + return self + + @classmethod + def from_config(cls, config: dict) -> "Isotope": + """ + Create an Isotope instance from configuration dictionary. + + Migration note: Replaces load_isotopes_from_config in simData.py + """ + identifier = IsotopeIdentifier.from_string(config["name"]) + + return cls( + identifier=identifier, + atomic_mass=Mass(value=config.get("atomic_mass", 0.0)), + thickness=float(config.get("thickness", 0.0)), + thickness_unit=config.get("thickness_unit", "cm"), + abundance=float(config.get("abundance", 0.0)), + density=float(config.get("density", 0.0)), + density_unit=config.get("density_unit", "g/cm3"), + xs_file_location=Path(config.get("xs_file_location", "")) if config.get("xs_file_location") else None, + ) + + @computed_field + @property + def areal_density(self) -> float: + """ + Calculate areal density in atoms/barn. + + Migration note: Moved from simData.py create_transmission function + """ + if self.thickness_unit == "atoms/cm2": + return self.thickness * 1e-24 # Convert to atoms/barn + + thickness_cm = self.thickness + if self.thickness_unit == "mm": + thickness_cm /= 10.0 + + return ( + thickness_cm * self.density * CONSTANTS.avogadro_number / self.atomic_mass.value / 1e24 + ) # Convert to atoms/barn + + +# Unit conversion functions +def eV_to_MeV(energy: Energy) -> float: # noqa: N802 + """Convert energy from eV to MeV.""" + return energy.value * 1e-6 + + +def MeV_to_eV(energy: float) -> Energy: # noqa: N802 + """Convert energy from MeV to eV.""" + return Energy(value=energy * 1e6) + + +def barns_to_cm2(cross_section: float) -> float: + """Convert cross section from barns to cm².""" + return cross_section * CONSTANTS.barn_to_cm2 + + +def cm2_to_barns(cross_section: float) -> float: + """Convert cross section from cm² to barns.""" + return cross_section / CONSTANTS.barn_to_cm2 diff --git a/src/pleiades/core/transmission.py b/src/pleiades/core/transmission.py new file mode 100644 index 0000000..f4cc3bc --- /dev/null +++ b/src/pleiades/core/transmission.py @@ -0,0 +1,71 @@ +#!/usr/bin/env python +""" +Neutron transmission calculations. + +Migration source: simData.py +Changes: +- Added type hints and validation +- Improved error handling +- Used Pydantic models for data validation +- Added logging +""" + +import logging +from typing import List, Tuple + +import numpy as np +from scipy.interpolate import interp1d + +from pleiades.core.models import Isotope + +logger = logging.getLogger(__name__) + + +class TransmissionError(Exception): + """Base exception for transmission calculation errors.""" + + pass + + +def calculate_transmission(isotope: Isotope, energies: List[float]) -> List[Tuple[float, float]]: + """ + Calculate transmission values for given energies. + + Migration source: simData.py create_transmission() + Changes: + - Added type hints + - Improved error handling + - Used Pydantic models for validation + - Added logging + + Args: + isotope: Isotope instance with loaded cross-section data + energies: List of energy values in eV + + Returns: + List of (energy, transmission) tuples + + Raises: + TransmissionError: If calculation fails + """ + try: + if not isotope.xs_data: + raise TransmissionError("No cross-section data loaded") + + # Create interpolation function + xs_energies = [pt.energy for pt in isotope.xs_data] + xs_values = [pt.cross_section for pt in isotope.xs_data] + + xs_interp = interp1d(xs_energies, xs_values, kind="linear", fill_value="extrapolate") + + # Calculate transmissions + transmissions = [] + for energy in energies: + xs = float(xs_interp(energy)) + trans = min(1.0, np.exp(-xs * isotope.areal_density)) + transmissions.append((energy, trans)) + + return transmissions + + except Exception as e: + raise TransmissionError(f"Transmission calculation failed: {str(e)}") from e diff --git a/src/pleiades/data/__init__.py b/src/pleiades/data/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/nucDataLibs/xSections/ag-n.tot b/src/pleiades/data/cross_sections/ag-n.tot similarity index 100% rename from nucDataLibs/xSections/ag-n.tot rename to src/pleiades/data/cross_sections/ag-n.tot diff --git a/nucDataLibs/xSections/au-n.tot b/src/pleiades/data/cross_sections/au-n.tot similarity index 100% rename from nucDataLibs/xSections/au-n.tot rename to src/pleiades/data/cross_sections/au-n.tot diff --git a/nucDataLibs/xSections/pu-n.tot b/src/pleiades/data/cross_sections/pu-n.tot similarity index 100% rename from nucDataLibs/xSections/pu-n.tot rename to src/pleiades/data/cross_sections/pu-n.tot diff --git a/nucDataLibs/xSections/ta-n.tot b/src/pleiades/data/cross_sections/ta-n.tot similarity index 100% rename from nucDataLibs/xSections/ta-n.tot rename to src/pleiades/data/cross_sections/ta-n.tot diff --git a/nucDataLibs/xSections/u-n.tot b/src/pleiades/data/cross_sections/u-n.tot similarity index 100% rename from nucDataLibs/xSections/u-n.tot rename to src/pleiades/data/cross_sections/u-n.tot diff --git a/nucDataLibs/xSections/w-n.tot b/src/pleiades/data/cross_sections/w-n.tot similarity index 100% rename from nucDataLibs/xSections/w-n.tot rename to src/pleiades/data/cross_sections/w-n.tot diff --git a/nucDataLibs/isotopeInfo/isotopes.info b/src/pleiades/data/isotopes/isotopes.info similarity index 100% rename from nucDataLibs/isotopeInfo/isotopes.info rename to src/pleiades/data/isotopes/isotopes.info diff --git a/nucDataLibs/isotopeInfo/mass.mas20 b/src/pleiades/data/isotopes/mass.mas20 similarity index 100% rename from nucDataLibs/isotopeInfo/mass.mas20 rename to src/pleiades/data/isotopes/mass.mas20 diff --git a/nucDataLibs/isotopeInfo/neutrons.list b/src/pleiades/data/isotopes/neutrons.list similarity index 100% rename from nucDataLibs/isotopeInfo/neutrons.list rename to src/pleiades/data/isotopes/neutrons.list diff --git a/nucDataLibs/resonanceTables/res_endf8.endf b/src/pleiades/data/resonances/res_endf8.endf similarity index 100% rename from nucDataLibs/resonanceTables/res_endf8.endf rename to src/pleiades/data/resonances/res_endf8.endf diff --git a/src/pleiades/sammy/__init__.py b/src/pleiades/sammy/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/pleiades/sammy/backends/__init__.py b/src/pleiades/sammy/backends/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/pleiades/sammy/backends/docker.py b/src/pleiades/sammy/backends/docker.py new file mode 100644 index 0000000..5f7609b --- /dev/null +++ b/src/pleiades/sammy/backends/docker.py @@ -0,0 +1,204 @@ +#!/usr/bin/env python +"""Docker backend implementation for SAMMY execution.""" + +import logging +import shutil +import subprocess +import textwrap +from datetime import datetime +from pathlib import Path +from uuid import uuid4 + +from pleiades.sammy.config import DockerSammyConfig +from pleiades.sammy.interface import ( + EnvironmentPreparationError, + SammyExecutionError, + SammyExecutionResult, + SammyFiles, + SammyRunner, +) + +logger = logging.getLogger(__name__) + + +class DockerSammyRunner(SammyRunner): + """Implementation of SAMMY runner for Docker container.""" + + def __init__(self, config: DockerSammyConfig): + super().__init__(config) + self.config = config + self._moved_files = [] + + def prepare_environment(self, files: SammyFiles) -> None: + """ + Prepare environment for Docker SAMMY execution. + + Args: + files: Container with paths to required input files + + Raises: + EnvironmentPreparationError: If preparation fails + """ + try: + # Validate input files exist + files.validate() + + # Validate docker is available + if shutil.which("docker") is None: + raise EnvironmentPreparationError("Docker not found in PATH") + + # Verify docker image exists + result = subprocess.run( + ["docker", "image", "inspect", self.config.image_name], capture_output=True, text=True + ) + if result.returncode != 0: + raise EnvironmentPreparationError(f"Docker image not found: {self.config.image_name}") + + except EnvironmentPreparationError: + raise # Reraise to avoid double logging + except Exception as e: + raise EnvironmentPreparationError(f"Environment preparation failed: {str(e)}") + + def execute_sammy(self, files: SammyFiles) -> SammyExecutionResult: + """ + Execute SAMMY using Docker container. + + Args: + files: Container with paths to required input files + + Returns: + SammyExecutionResult containing execution status and outputs + + Raises: + SammyExecutionError: If execution fails + """ + execution_id = str(uuid4()) + start_time = datetime.now() + + logger.info(f"Starting SAMMY execution {execution_id} in Docker") + logger.debug(f"Input files from: {files.input_file.parent}") + logger.debug(f"Working directory: {self.config.working_dir}") + + # Prepare container paths for input files + container_input = str(self.config.container_data_dir / files.input_file.name) + container_params = str(self.config.container_data_dir / files.parameter_file.name) + container_data = str(self.config.container_data_dir / files.data_file.name) + + # Construct docker run command + docker_cmd = [ + "docker", + "run", + "--rm", # Remove container after execution + "-i", # Interactive mode for heredoc input + # Mount working directory + "-v", + f"{self.config.working_dir}:{self.config.container_working_dir}", + # Mount data directory + "-v", + f"{files.input_file.parent}:{self.config.container_data_dir}", + # Set working directory + "-w", + str(self.config.container_working_dir), + # Image name + self.config.image_name, + # SAMMY command (will receive input via stdin) + "sammy", + ] + + # Prepare SAMMY input + sammy_input = textwrap.dedent(f"""\ + {container_input} + {container_params} + {container_data} + """) + + try: + process = subprocess.run(docker_cmd, input=sammy_input, text=True, capture_output=True) + + end_time = datetime.now() + console_output = process.stdout + process.stderr + + if process.returncode != 0: + logger.error(f"Docker execution failed with code {process.returncode}") + return SammyExecutionResult( + success=False, + execution_id=execution_id, + start_time=start_time, + end_time=end_time, + console_output=console_output, + error_message=f"Docker execution failed with code {process.returncode}", + ) + + # Check SAMMY output for success + success = " Normal finish to SAMMY" in console_output + error_message = None if success else "SAMMY execution failed" + + if not success: + logger.error(f"SAMMY execution failed for {execution_id}") + else: + logger.info(f"SAMMY execution completed successfully for {execution_id}") + + return SammyExecutionResult( + success=success, + execution_id=execution_id, + start_time=start_time, + end_time=end_time, + console_output=console_output, + error_message=error_message, + ) + + except Exception as e: + logger.exception(f"Docker execution failed for {execution_id}") + raise SammyExecutionError(f"Docker execution failed: {str(e)}") + + def cleanup(self) -> None: + """Clean up after execution.""" + logger.debug("Performing cleanup") + self._moved_files = [] + + def validate_config(self) -> bool: + """Validate the configuration.""" + return self.config.validate() + + +if __name__ == "__main__": + # Setup paths + test_data_dir = Path(__file__).parents[4] / "tests/data/ex012" + working_dir = Path.home() / "tmp" / "sammy_docker_run" + output_dir = working_dir / "output" + + try: + # Create and validate config + config = DockerSammyConfig(image_name="kedokudo/sammy-docker", working_dir=working_dir, output_dir=output_dir) + config.validate() + + # Create files container + files = SammyFiles( + input_file=test_data_dir / "ex012a.inp", + parameter_file=test_data_dir / "ex012a.par", + data_file=test_data_dir / "ex012a.dat", + ) + + # Create and use runner + runner = DockerSammyRunner(config) + + # Execute pipeline + runner.prepare_environment(files) + result = runner.execute_sammy(files) + + # Process results + if result.success: + print(f"SAMMY execution successful (runtime: {result.runtime_seconds:.2f}s)") + runner.collect_outputs(result) + print(f"Output files available in: {output_dir}") + else: + print("SAMMY execution failed:") + print(result.error_message) + print("\nConsole output:") + print(result.console_output) + + except Exception as e: + print(f"Error running SAMMY: {str(e)}") + + finally: + runner.cleanup() diff --git a/src/pleiades/sammy/backends/local.py b/src/pleiades/sammy/backends/local.py new file mode 100644 index 0000000..0a3ca97 --- /dev/null +++ b/src/pleiades/sammy/backends/local.py @@ -0,0 +1,160 @@ +#!/usr/env/bin python +"""Local backend implementation for SAMMY execution.""" + +import logging +import subprocess +import textwrap +from datetime import datetime +from pathlib import Path +from typing import List +from uuid import uuid4 + +from pleiades.sammy.config import LocalSammyConfig +from pleiades.sammy.interface import ( + EnvironmentPreparationError, + SammyExecutionError, + SammyExecutionResult, + SammyFiles, + SammyRunner, +) + +logger = logging.getLogger(__name__) + +# Known SAMMY output file patterns +SAMMY_OUTPUT_FILES = { + "SAMMY.LPT", # Log file + "SAMMIE.ODF", # Output data file + "SAMNDF.PAR", # Updated parameter file + "SAMRESOLVED.PAR", # Additional parameter file +} + + +class LocalSammyRunner(SammyRunner): + """Implementation of SAMMY runner for local installation.""" + + def __init__(self, config: LocalSammyConfig): + super().__init__(config) + self.config: LocalSammyConfig = config + self._moved_files: List[Path] = [] + + def prepare_environment(self, files: SammyFiles) -> None: + """Prepare environment for local SAMMY execution.""" + try: + logger.debug("Validating input files") + files.validate() + + # No need to validate directories as this is done in config validation + logger.debug("Environment preparation complete") + + except Exception as e: + raise EnvironmentPreparationError(f"Environment preparation failed: {str(e)}") + + def execute_sammy(self, files: SammyFiles) -> SammyExecutionResult: + """Execute SAMMY using local installation.""" + execution_id = str(uuid4()) + start_time = datetime.now() + + logger.info(f"Starting SAMMY execution {execution_id}") + logger.debug(f"Working directory: {self.config.working_dir}") + + sammy_command = textwrap.dedent(f"""\ + {self.config.sammy_executable} < None: + """Clean up after execution.""" + logger.debug("Performing cleanup for local backend") + self._moved_files = [] + + def validate_config(self) -> bool: + """Validate the configuration.""" + return self.config.validate() + + +if __name__ == "__main__": + from pathlib import Path + + # Setup paths + sammy_executable = Path.home() / "code.ornl.gov/SAMMY/build/bin/sammy" + test_data_dir = Path(__file__).parents[4] / "tests/data/ex012" + working_dir = Path.home() / "tmp/pleiades_test" + output_dir = working_dir / "output" + + # Create config + config = LocalSammyConfig(sammy_executable=sammy_executable, working_dir=working_dir, output_dir=output_dir) + config.validate() + + # Create files container + files = SammyFiles( + input_file=test_data_dir / "ex012a.inp", + parameter_file=test_data_dir / "ex012a.par", + data_file=test_data_dir / "ex012a.dat", + ) + + try: + # Create and use runner + runner = LocalSammyRunner(config) + + # Prepare environment + runner.prepare_environment(files) + + # Execute SAMMY + result = runner.execute_sammy(files) + + # Process results + if result.success: + print(f"SAMMY execution successful (runtime: {result.runtime_seconds:.2f}s)") + runner.collect_outputs(result) + else: + print("SAMMY execution failed:") + print(result.error_message) + print("\nConsole output:") + print(result.console_output) + + except Exception as e: + print(f"Error running SAMMY: {str(e)}") + + finally: + # Cleanup + runner.cleanup() diff --git a/src/pleiades/sammy/backends/nova_ornl.py b/src/pleiades/sammy/backends/nova_ornl.py new file mode 100644 index 0000000..e3f8840 --- /dev/null +++ b/src/pleiades/sammy/backends/nova_ornl.py @@ -0,0 +1,209 @@ +#!/usr/bin/env python +"""NOVA web service backend implementation for SAMMY execution.""" + +import logging +import os +import zipfile +from datetime import datetime +from pathlib import Path +from tempfile import TemporaryDirectory +from typing import Optional +from uuid import uuid4 + +from nova.galaxy import Dataset, Nova, NovaConnection, Parameters, Tool + +from pleiades.sammy.config import NovaSammyConfig +from pleiades.sammy.interface import ( + EnvironmentPreparationError, + SammyExecutionError, + SammyExecutionResult, + SammyFiles, + SammyRunner, +) + +logger = logging.getLogger(__name__) + + +class NovaConnectionError(Exception): + """Raised when NOVA connection fails.""" + + pass + + +class NovaSammyRunner(SammyRunner): + """Implementation of SAMMY runner for NOVA web service.""" + + def __init__(self, config: NovaSammyConfig): + super().__init__(config) + self.config: NovaSammyConfig = config + self._nova: Optional[Nova] = None + self._connection: Optional[NovaConnection] = None + self._datastore_name: Optional[str] = None + self._temp_dir: Optional[TemporaryDirectory] = None + + def prepare_environment(self, files: SammyFiles) -> None: + """ + Prepare NOVA environment and validate connection. + + Args: + files: Container with paths to required input files + + Raises: + EnvironmentPreparationError: If preparation fails + """ + try: + # Validate input files + files.validate() + + # Initialize NOVA connection + self._nova = Nova(self.config.url, self.config.api_key) + + # Create temporary directory for downloads + self._temp_dir = TemporaryDirectory() + + logger.debug("Testing NOVA connection") + with self._nova.connect() as conn: + self._connection = conn + + except Exception as e: + raise EnvironmentPreparationError(f"NOVA environment preparation failed: {str(e)}") + + def execute_sammy(self, files: SammyFiles) -> SammyExecutionResult: + """Execute SAMMY using NOVA web service.""" + execution_id = str(uuid4()) + start_time = datetime.now() + + logger.info(f"Starting SAMMY execution {execution_id} via NOVA") + + try: + # Create unique datastore + self._datastore_name = f"sammy_{execution_id}" + datastore = self._connection.create_data_store(self._datastore_name) + + # Prepare tool and datasets + tool = Tool(id=self.config.tool_id) + params = Parameters() + + # Add input files as datasets + params.add_input("inp", Dataset(str(files.input_file))) + params.add_input("par", Dataset(str(files.parameter_file))) + params.add_input("data", Dataset(str(files.data_file))) + + # Run SAMMY + results = tool.run(datastore, params) + + # Get console output + console_output = results.get_dataset("sammy_console_output").get_content() + + # Download and extract output files + output_zip = Path(self._temp_dir.name) / "sammy_outputs.zip" + results.get_collection("sammy_output_files").download(str(output_zip)) + + # Extract files to output directory, handling nested structure + with zipfile.ZipFile(output_zip) as zf: + for zip_info in zf.filelist: + # Get just the filename, ignoring directory structure in ZIP + filename = Path(zip_info.filename).name + # Extract if it's a file (not directory) and starts with SAM + if not zip_info.is_dir() and (filename.startswith("SAM") or filename == "SAMMY.LPT"): + # Read the file from zip + with zf.open(zip_info) as source: + # Write to output directory + output_file = self.config.output_dir / filename + output_file.write_bytes(source.read()) + logger.debug(f"Extracted {filename} to output directory") + + end_time = datetime.now() + success = " Normal finish to SAMMY" in console_output + error_message = None if success else "SAMMY execution failed" + + if not success: + logger.error(f"SAMMY execution failed for {execution_id}") + else: + logger.info(f"SAMMY execution completed successfully for {execution_id}") + + return SammyExecutionResult( + success=success, + execution_id=execution_id, + start_time=start_time, + end_time=end_time, + console_output=console_output, + error_message=error_message, + ) + + except Exception as e: + logger.exception(f"NOVA execution failed for {execution_id}") + raise SammyExecutionError(f"NOVA execution failed: {str(e)}") + + def cleanup(self) -> None: + """Clean up NOVA resources.""" + logger.debug("Performing NOVA cleanup") + + try: + # Remove temporary directory if it exists + if self._temp_dir is not None: + self._temp_dir.cleanup() + self._temp_dir = None + + # No need to explicitly close connection as it's handled by context manager + self._connection = None + self._nova = None + + except Exception as e: + logger.error(f"Error during cleanup: {str(e)}") + + def validate_config(self): + """Validate the configuration.""" + return self.config.validate() + + +if __name__ == "__main__": + # Setup paths + test_data_dir = Path(__file__).parents[4] / "tests/data/ex012" + working_dir = Path.home() / "tmp" / "sammy_nova_run" + output_dir = working_dir / "output" + + try: + # Get NOVA credentials from environment + nova_url = os.environ.get("NOVA_URL") + nova_api_key = os.environ.get("NOVA_API_KEY") + + if not nova_url or not nova_api_key: + raise ValueError("NOVA_URL and NOVA_API_KEY environment variables must be set") + + # Create and validate config + config = NovaSammyConfig(url=nova_url, api_key=nova_api_key, working_dir=working_dir, output_dir=output_dir) + config.validate() + + # Create files container + files = SammyFiles( + input_file=test_data_dir / "ex012a.inp", + parameter_file=test_data_dir / "ex012a.par", + data_file=test_data_dir / "ex012a.dat", + ) + + # Create and use runner + runner = NovaSammyRunner(config) + + # Execute pipeline + runner.prepare_environment(files) + result = runner.execute_sammy(files) + + # Process results + if result.success: + print(f"SAMMY execution successful (runtime: {result.runtime_seconds:.2f}s)") + # NOTE: DO NOT collect here as nova runner packages all output files on the server + # and pleiades download the zip archive, extract and move to output directory. + print(f"Output files available in: {output_dir}") + else: + print("SAMMY execution failed:") + print(result.error_message) + print("\nConsole output:") + print(result.console_output) + + except Exception as e: + print(f"Error running SAMMY: {str(e)}") + + finally: + if "runner" in locals(): + runner.cleanup() diff --git a/src/pleiades/sammy/config.py b/src/pleiades/sammy/config.py new file mode 100644 index 0000000..4f74fce --- /dev/null +++ b/src/pleiades/sammy/config.py @@ -0,0 +1,123 @@ +#!/usr/env/bin python +""" +Configuration management for SAMMY execution backends. + +This module provides concrete configuration classes for each SAMMY backend type, +inheriting from the base configuration defined in the interface module. +""" + +import shutil +from dataclasses import dataclass, field +from pathlib import Path +from typing import Dict + +from pleiades.sammy.interface import BaseSammyConfig, ConfigurationError + + +@dataclass +class LocalSammyConfig(BaseSammyConfig): + """Configuration for local SAMMY installation.""" + + sammy_executable: Path + shell_path: Path = Path("/bin/bash") + env_vars: Dict[str, str] = field(default_factory=dict) + + def validate(self) -> bool: + """Validate local SAMMY configuration.""" + # Validate base configuration first + super().validate() + + # Validate SAMMY executable exists and is executable + sammy_path = shutil.which(str(self.sammy_executable)) + if not sammy_path: + raise ConfigurationError(f"SAMMY executable not found: {self.sammy_executable}") + self.sammy_executable = Path(sammy_path) + + # Validate shell exists + if not self.shell_path.exists(): + raise ConfigurationError(f"Shell not found: {self.shell_path}") + + return True + + +@dataclass +class DockerSammyConfig(BaseSammyConfig): + """Configuration for Docker-based SAMMY execution.""" + + image_name: str + container_working_dir: Path = Path("/sammy/work") + container_data_dir: Path = Path("/sammy/data") + + def validate(self) -> bool: + """ + Validate Docker SAMMY configuration. + + Returns: + bool: True if configuration is valid + + Raises: + ConfigurationError: If configuration is invalid + """ + # First validate base configuration + super().validate() + + # Validate image name + if not self.image_name: + raise ConfigurationError("Docker image name cannot be empty") + + # Validate container paths are absolute + if not self.container_working_dir.is_absolute(): + raise ConfigurationError("Container working directory must be absolute path") + if not self.container_data_dir.is_absolute(): + raise ConfigurationError("Container data directory must be absolute path") + + # Validate container paths are different + if self.container_working_dir == self.container_data_dir: + raise ConfigurationError("Container working and data directories must be different") + + return True + + +@dataclass +class NovaSammyConfig(BaseSammyConfig): + """Configuration for NOVA web service SAMMY execution.""" + + url: str + api_key: str + tool_id: str = "neutrons_imaging_sammy" + timeout: int = 3600 # Default 1 hour timeout in seconds + + def validate(self) -> bool: + """ + Validate NOVA SAMMY configuration. + + Returns: + bool: True if configuration is valid + + Raises: + ConfigurationError: If configuration is invalid + """ + # Validate base configuration (directories) + super().validate() + + # Validate URL + if not self.url: + raise ConfigurationError("NOVA service URL cannot be empty") + + # Simple URL format check + if not self.url.startswith("https://"): + raise ConfigurationError("Invalid URL format - must start with https://") + + # Validate API key + if not self.api_key: + raise ConfigurationError("API key cannot be empty") + + # Validate tool ID + if not self.tool_id: + raise ConfigurationError("Tool ID cannot be empty") + + # Validate timeout + if self.timeout <= 0: + raise ConfigurationError(f"Invalid timeout value: {self.timeout}") + + return True diff --git a/src/pleiades/sammy/factory.py b/src/pleiades/sammy/factory.py new file mode 100644 index 0000000..f4ba5df --- /dev/null +++ b/src/pleiades/sammy/factory.py @@ -0,0 +1,488 @@ +#!/usr/bin/env python +"""Auto setup sammy runner with factory""" + +import logging +import os +import re +import shutil +import subprocess +from enum import Enum +from pathlib import Path +from typing import Dict, Optional, Union + +import yaml + +from pleiades.sammy.backends.docker import DockerSammyRunner +from pleiades.sammy.backends.local import LocalSammyRunner +from pleiades.sammy.backends.nova_ornl import NovaSammyRunner +from pleiades.sammy.config import DockerSammyConfig, LocalSammyConfig, NovaSammyConfig +from pleiades.sammy.interface import SammyFiles, SammyRunner + +logger = logging.getLogger(__name__) + + +class BackendType(Enum): + """Supported SAMMY backend types.""" + + LOCAL = "local" + DOCKER = "docker" + NOVA = "nova" + + +class FactoryError(Exception): + """Base exception for factory errors.""" + + pass + + +class BackendNotAvailableError(FactoryError): + """Requested backend not available.""" + + pass + + +class ConfigurationError(FactoryError): + """Configuration error.""" + + pass + + +class SammyFactory: + """Factory for creating and managing SAMMY runners.""" + + @staticmethod + def list_available_backends() -> Dict[BackendType, bool]: + """ + Check which backends are available in the current environment. + + Returns: + Dict mapping backend types to their availability status + + Example: + >>> SammyFactory.list_available_backends() + { + BackendType.LOCAL: True, + BackendType.DOCKER: True, + BackendType.NOVA: False + } + """ + available = {} + + # Check Local backend + try: + sammy_path = shutil.which("sammy") + available[BackendType.LOCAL] = sammy_path is not None + if sammy_path: + logger.debug(f"Local SAMMY found at: {sammy_path}") + except Exception as e: + logger.debug(f"Error checking local backend: {str(e)}") + available[BackendType.LOCAL] = False + + # Check Docker backend + try: + docker_available = shutil.which("docker") is not None + if docker_available: + # Check if we can run docker + result = subprocess.run(["docker", "info"], capture_output=True, text=True) + docker_available = result.returncode == 0 + available[BackendType.DOCKER] = docker_available + if docker_available: + logger.debug("Docker backend available") + except Exception as e: + logger.debug(f"Error checking docker backend: {str(e)}") + available[BackendType.DOCKER] = False + + # Check NOVA backend + try: + nova_available = all(k in os.environ for k in ["NOVA_URL", "NOVA_API_KEY"]) + available[BackendType.NOVA] = nova_available + if nova_available: + logger.debug("NOVA credentials found") + except Exception as e: + logger.debug(f"Error checking NOVA backend: {str(e)}") + available[BackendType.NOVA] = False + + return available + + @classmethod + def create_runner( + cls, backend_type: str, working_dir: Path, output_dir: Optional[Path] = None, **kwargs + ) -> SammyRunner: + """ + Create a SAMMY runner with the specified backend and configuration. + + Args: + backend_type: Type of backend ("local", "docker", or "nova") + working_dir: Working directory for SAMMY execution + output_dir: Output directory for SAMMY results (defaults to working_dir/output) + **kwargs: Backend-specific configuration options: + Local backend: + sammy_executable: Path to SAMMY executable + shell_path: Path to shell + Docker backend: + image_name: Docker image name + container_working_dir: Working directory in container + container_data_dir: Data directory in container + NOVA backend: + url: NOVA service URL + api_key: NOVA API key + tool_id: SAMMY tool ID + timeout: Request timeout in seconds + + Returns: + Configured SammyRunner instance + + Raises: + BackendNotAvailableError: If requested backend is not available + ConfigurationError: If configuration is invalid + """ + try: + # Convert string to enum + try: + backend = BackendType(backend_type.lower()) + except ValueError: + raise ConfigurationError(f"Invalid backend type: {backend_type}") + + # Check backend availability + available_backends = cls.list_available_backends() + if not available_backends[backend]: + raise BackendNotAvailableError(f"Backend {backend.value} is not available") + + # Set default output directory if not specified + if output_dir is None: + output_dir = working_dir / "output" + + # Convert to Path objects + working_dir = Path(working_dir) + output_dir = Path(output_dir) + + # Create appropriate configuration and runner based on backend + if backend == BackendType.LOCAL: + config = LocalSammyConfig( + working_dir=working_dir, + output_dir=output_dir, + sammy_executable=kwargs.get("sammy_executable", "sammy"), + shell_path=kwargs.get("shell_path", Path("/bin/bash")), + ) + runner = LocalSammyRunner(config) + + elif backend == BackendType.DOCKER: + config = DockerSammyConfig( + working_dir=working_dir, + output_dir=output_dir, + image_name=kwargs.get("image_name", "kedokudo/sammy-docker"), + container_working_dir=Path(kwargs.get("container_working_dir", "/sammy/work")), + container_data_dir=Path(kwargs.get("container_data_dir", "/sammy/data")), + ) + runner = DockerSammyRunner(config) + + elif backend == BackendType.NOVA: + # For NOVA, try environment variables if not in kwargs + url = kwargs.get("url") or os.environ.get("NOVA_URL") + api_key = kwargs.get("api_key") or os.environ.get("NOVA_API_KEY") + if not url or not api_key: + raise ConfigurationError("NOVA URL and API key must be provided") + + config = NovaSammyConfig( + working_dir=working_dir, + output_dir=output_dir, + url=url, + api_key=api_key, + tool_id=kwargs.get("tool_id", "neutrons_imaging_sammy"), + timeout=kwargs.get("timeout", 3600), + ) + runner = NovaSammyRunner(config) + + # Validate configuration + config.validate() + return runner + + except Exception as e: + if not isinstance(e, (BackendNotAvailableError, ConfigurationError)): + logger.exception("Unexpected error creating runner") + raise ConfigurationError(f"Failed to create runner: {str(e)}") + raise + + @classmethod + def from_config(cls, config_path: Union[str, Path]) -> SammyRunner: + """ + Create a SAMMY runner from a configuration file. + + Args: + config_path: Path to YAML configuration file + + Returns: + Configured SammyRunner instance + + Raises: + ConfigurationError: If configuration file is invalid or missing + BackendNotAvailableError: If requested backend is not available + + Example config file: + backend: local + working_dir: /path/to/work + output_dir: /path/to/output + + local: + sammy_executable: /path/to/sammy + shell_path: /bin/bash + + docker: + image_name: kedokudo/sammy-docker + container_working_dir: /sammy/work + container_data_dir: /sammy/data + + nova: + url: ${NOVA_URL} + api_key: ${NOVA_API_KEY} + tool_id: neutrons_imaging_sammy + timeout: 3600 + """ + try: + # Load and parse configuration file + config_path = Path(config_path) + if not config_path.exists(): + raise ConfigurationError(f"Configuration file not found: {config_path}") + + with open(config_path) as f: + try: + config = yaml.safe_load(f) + except yaml.YAMLError as e: + raise ConfigurationError(f"Invalid YAML format: {str(e)}") + + # Validate basic structure + if not isinstance(config, dict): + raise ConfigurationError("Configuration must be a dictionary") + + required_fields = {"backend", "working_dir"} + missing_fields = required_fields - set(config.keys()) + if missing_fields: + raise ConfigurationError(f"Missing required fields: {missing_fields}") + + # Handle environment variable expansion + def expand_env_vars(value: str) -> str: + """Expand environment variables in string values.""" + if isinstance(value, str) and "${" in value: + pattern = r"\${([^}]+)}" + matches = re.finditer(pattern, value) + for match in matches: + env_var = match.group(1) + env_value = os.environ.get(env_var) + if env_value is None: + raise ConfigurationError(f"Environment variable not found: {env_var}") + value = value.replace(f"${{{env_var}}}", env_value) + return value + + # Process configuration recursively + def process_config(cfg): + """Recursively process configuration dictionary.""" + if isinstance(cfg, dict): + return {k: process_config(v) for k, v in cfg.items()} + elif isinstance(cfg, list): + return [process_config(v) for v in cfg] + elif isinstance(cfg, str): + return expand_env_vars(cfg) + return cfg + + config = process_config(config) + + # Convert paths + working_dir = Path(config["working_dir"]) + output_dir = Path(config.get("output_dir", working_dir / "output")) + + # Get backend-specific configuration + backend_type = config["backend"].lower() + backend_config = config.get(backend_type, {}) + + # Create runner using create_runner + return cls.create_runner( + backend_type=backend_type, working_dir=working_dir, output_dir=output_dir, **backend_config + ) + + except Exception as e: + if not isinstance(e, (ConfigurationError, BackendNotAvailableError)): + logger.exception("Unexpected error loading configuration") + raise ConfigurationError(f"Failed to load configuration: {str(e)}") + raise + + @classmethod + def auto_select( + cls, working_dir: Path, output_dir: Optional[Path] = None, preferred_backend: Optional[str] = None, **kwargs + ) -> SammyRunner: + """ + Auto-select and configure the best available SAMMY backend. + + The selection priority (unless overridden by preferred_backend): + 1. Local installation (fastest, simplest) + 2. Docker container (portable, isolated) + 3. NOVA web service (no local installation needed) + + Args: + working_dir: Working directory for SAMMY execution + output_dir: Optional output directory (defaults to working_dir/output) + preferred_backend: Optional preferred backend type ("local", "docker", "nova") + **kwargs: Backend-specific configuration options + + Returns: + Configured SammyRunner instance + + Raises: + BackendNotAvailableError: If no suitable backend is available + ConfigurationError: If configuration is invalid + + Examples: + >>> runner = SammyFactory.auto_select( + ... working_dir="/path/to/work", + ... preferred_backend="docker", + ... image_name="custom/sammy:latest" + ... ) + """ + # Check available backends + available = cls.list_available_backends() + logger.debug(f"Available backends: {[b.value for b, v in available.items() if v]}") + + # If preferred backend specified, try it first + if preferred_backend: + try: + preferred = BackendType(preferred_backend.lower()) + if available[preferred]: + logger.info(f"Using preferred backend: {preferred.value}") + return cls.create_runner( + backend_type=preferred.value, working_dir=working_dir, output_dir=output_dir, **kwargs + ) + else: + logger.warning(f"Preferred backend {preferred.value} not available, " "trying alternatives") + except ValueError: + raise ConfigurationError(f"Invalid preferred backend: {preferred_backend}") + + # Try backends in priority order + backend_priority = [ + BackendType.LOCAL, # Fastest, simplest + BackendType.DOCKER, # Portable, isolated + BackendType.NOVA, # No local installation + ] + + errors = [] + for backend in backend_priority: + if available[backend]: + try: + logger.info(f"Attempting to use {backend.value} backend") + return cls.create_runner( + backend_type=backend.value, working_dir=working_dir, output_dir=output_dir, **kwargs + ) + except Exception as e: + logger.warning(f"Failed to configure {backend.value} backend: {str(e)}") + errors.append(f"{backend.value}: {str(e)}") + continue + + # If we get here, no backend was successfully configured + error_details = "\n".join(errors) + raise BackendNotAvailableError(f"No suitable backend available. Errors encountered:\n{error_details}") + + +if __name__ == "__main__": + import sys + + # Setup logging + logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s") + + # Example paths + test_data_dir = Path(__file__).parents[3] / "tests/data/ex012" + working_dir = Path.home() / "tmp" / "sammy_factory_test" + output_dir = working_dir / "output" + + # Example configuration file + example_config = """ +backend: docker +working_dir: {working_dir} +output_dir: {output_dir} + +local: + sammy_executable: sammy + shell_path: /bin/bash + +docker: + image_name: kedokudo/sammy-docker + container_working_dir: /sammy/work + container_data_dir: /sammy/data + +nova: + url: ${{NOVA_URL}} + api_key: ${{NOVA_API_KEY}} + tool_id: neutrons_imaging_sammy + timeout: 3600 +""" + + try: + print("\n=== SAMMY Factory Examples ===\n") + + # List available backends + print("Checking available backends...") + available = SammyFactory.list_available_backends() + print("Available backends:") + for backend, is_available in available.items(): + print(f" {backend.value}: {'✓' if is_available else '✗'}") + + print("\n1. Create runner directly...") + runner1 = SammyFactory.create_runner(backend_type="local", working_dir=working_dir, output_dir=output_dir) + print(f"Created runner: {type(runner1).__name__}") + + print("\n2. Create runner from config file...") + # Write example config + config_file = working_dir / "sammy_config.yaml" + working_dir.mkdir(parents=True, exist_ok=True) + config_file.write_text(example_config.format(working_dir=working_dir, output_dir=output_dir)) + runner2 = SammyFactory.from_config(config_file) + print(f"Created runner: {type(runner2).__name__}") + + print("\n3. Auto-select backend...") + runner3 = SammyFactory.auto_select(working_dir=working_dir, output_dir=output_dir) + print(f"Selected backend: {type(runner3).__name__}") + + print("\n4. Test complete runner workflow...") + # Create files container + files = SammyFiles( + input_file=test_data_dir / "ex012a.inp", + parameter_file=test_data_dir / "ex012a.par", + data_file=test_data_dir / "ex012a.dat", + ) + + # Execute SAMMY using auto-selected backend + runner = SammyFactory.auto_select( + working_dir=working_dir, + output_dir=output_dir, + preferred_backend="local", # Try local first + ) + + print(f"Using runner: {type(runner).__name__}") + print(f"Working directory: {working_dir}") + print(f"Output directory: {output_dir}") + + # Execute pipeline + print("\nPreparing environment...") + runner.prepare_environment(files) + + print("Executing SAMMY...") + result = runner.execute_sammy(files) + + # Process results + if result.success: + print(f"\nSAMMY execution successful (runtime: {result.runtime_seconds:.2f}s)") + runner.collect_outputs(result) + print(f"Output files available in: {output_dir}") + else: + print("\nSAMMY execution failed:") + print(result.error_message) + print("\nConsole output:") + print(result.console_output) + + except Exception as e: + print(f"\nError: {str(e)}", file=sys.stderr) + logging.exception("Example execution failed") + sys.exit(1) + + finally: + if "runner" in locals(): + runner.cleanup() + + print("\nExamples completed successfully") diff --git a/src/pleiades/sammy/interface.py b/src/pleiades/sammy/interface.py new file mode 100644 index 0000000..211ca87 --- /dev/null +++ b/src/pleiades/sammy/interface.py @@ -0,0 +1,297 @@ +#!/usr/env/bin python +""" +Interface definitions for SAMMY execution system. + +This module defines the core interfaces and data structures used across +all SAMMY backend implementations. +""" + +import logging +import os +from abc import ABC, abstractmethod +from dataclasses import dataclass +from datetime import datetime +from enum import Enum, auto +from pathlib import Path +from typing import Optional + +logger = logging.getLogger(__name__) + +SAMMY_OUTPUT_FILES = { + "SAMMY.LPT", # Log file + "SAMMIE.ODF", # Output data file + "SAMNDF.PAR", # Updated parameter file + "SAMRESOLVED.PAR", # Additional parameter file +} + + +class SammyBackendType(Enum): + """Enumeration of available SAMMY backend types.""" + + LOCAL = auto() + DOCKER = auto() + NOVA = auto() + + +@dataclass +class SammyFiles: + """Container for SAMMY input files.""" + + input_file: Path + parameter_file: Path + data_file: Path + + def validate(self) -> None: + """ + Validate that all required input files exist. + + Raises: + FileNotFoundError: If any required file is missing + """ + for field_name, file_path in self.__dict__.items(): + if not file_path.exists(): + raise FileNotFoundError(f"{field_name.replace('_', ' ').title()} not found: {file_path}") + if not file_path.is_file(): + raise FileNotFoundError(f"{field_name.replace('_', ' ').title()} is not a file: {file_path}") + + +@dataclass +class SammyExecutionResult: + """Detailed results of a SAMMY execution.""" + + success: bool + execution_id: str # Unique identifier for this run + start_time: datetime + end_time: datetime + console_output: str + error_message: Optional[str] = None + + @property + def runtime_seconds(self) -> float: + """Calculate execution time in seconds.""" + return (self.end_time - self.start_time).total_seconds() + + +@dataclass +class BaseSammyConfig(ABC): + """Base configuration for all SAMMY backends.""" + + working_dir: Path # Directory for SAMMY execution + output_dir: Path # Directory for SAMMY outputs + + def prepare_directories(self) -> None: + """ + Create and prepare required directories. + + Raises: + ConfigurationError: If directory creation fails + """ + try: + # Create working directory if it doesn't exist + self.working_dir.mkdir(parents=True, exist_ok=True) + + # Create output directory if it doesn't exist + self.output_dir.mkdir(parents=True, exist_ok=True) + + except Exception as e: + raise ConfigurationError(f"Failed to create directories: {str(e)}") + + def validate(self) -> bool: + """ + Validate the configuration. + + Returns: + bool: True if configuration is valid + + Raises: + ConfigurationError: If configuration is invalid + """ + # Create directories first + self.prepare_directories() + + # Validate working directory is writable + if not os.access(self.working_dir, os.W_OK): + raise ConfigurationError(f"Working directory not writable: {self.working_dir}") + + # Validate output directory is writable + if not os.access(self.output_dir, os.W_OK): + raise ConfigurationError(f"Output directory not writable: {self.output_dir}") + + return True + + +class SammyRunner(ABC): + """Abstract base class for SAMMY execution backends.""" + + def __init__(self, config: BaseSammyConfig): + self.config = config + self.logger = logging.getLogger(f"{__name__}.{self.__class__.__name__}") + + @abstractmethod + def prepare_environment(self, files: SammyFiles) -> None: + """ + Prepare the execution environment. + + Args: + files: Container with file information + + Raises: + EnvironmentPreparationError: If preparation fails + """ + raise NotImplementedError + + @abstractmethod + def execute_sammy(self, files: SammyFiles) -> SammyExecutionResult: + """ + Execute SAMMY with prepared files. + + Args: + files: Container with validated and prepared files + + Returns: + Execution results including status and outputs + + Raises: + SammyExecutionError: If execution fails + """ + raise NotImplementedError + + @abstractmethod + def cleanup(self, files: SammyFiles) -> None: + """ + Clean up resources after execution. + + Args: + files: Container with file information + + Raises: + CleanupError: If cleanup fails + """ + raise NotImplementedError + + async def __aenter__(self) -> "SammyRunner": + """Allow usage as async context manager.""" + return self + + async def __aexit__(self, exc_type, exc_val, exc_tb) -> None: + """Ensure cleanup on context exit.""" + if hasattr(self, "files"): + await self.cleanup(self.files) + + @abstractmethod + def validate_config(self) -> bool: + """ + Validate backend configuration. + + Returns: + bool: True if configuration is valid + + Raises: + ConfigurationError: If configuration is invalid + """ + raise NotImplementedError + + def collect_outputs(self, result: SammyExecutionResult) -> None: + """ + Collect and validate output files after execution. + + Args: + result: Execution result containing status information + + Raises: + OutputCollectionError: If output collection fails + """ + collection_start = datetime.now() + logger.info(f"Collecting outputs for execution {result.execution_id}") + + try: + self._moved_files = [] + found_outputs = set() + + # First check for known output files + for known_file in SAMMY_OUTPUT_FILES: + output_file = self.config.working_dir / known_file + if output_file.is_file(): + found_outputs.add(output_file) + logger.debug(f"Found known output file: {known_file}") + + # Then look for any additional SAM* files + for output_file in self.config.working_dir.glob("SAM*"): + if output_file.is_file() and output_file not in found_outputs: + found_outputs.add(output_file) + logger.debug(f"Found additional output file: {output_file.name}") + + if not found_outputs: + logger.warning("No SAMMY output files found") + if result.success: + logger.error("SAMMY reported success but produced no output files") + return + + # Move all found outputs + for output_file in found_outputs: + dest = self.config.output_dir / output_file.name + try: + if dest.exists(): + logger.debug(f"Removing existing output file: {dest}") + dest.unlink() + output_file.rename(dest) + self._moved_files.append(dest) + logger.debug(f"Moved {output_file} to {dest}") + except OSError as e: + self._rollback_moves() + raise OutputCollectionError(f"Failed to move output file {output_file}: {str(e)}") + + logger.info( + f"Successfully collected {len(self._moved_files)} output files in " + f"{(datetime.now() - collection_start).total_seconds():.2f} seconds" + ) + + except Exception as e: + self._rollback_moves() + raise OutputCollectionError(f"Output collection failed: {str(e)}") + + def _rollback_moves(self) -> None: + """Rollback any moved files in case of error.""" + for moved_file in self._moved_files: + try: + original = self.config.working_dir / moved_file.name + moved_file.rename(original) + except Exception as e: + logger.error(f"Failed to rollback move for {moved_file}: {str(e)}") + + +# Custom exceptions +class SammyError(Exception): + """Base exception for SAMMY-related errors.""" + + pass + + +class EnvironmentPreparationError(SammyError): + """Raised when environment preparation fails.""" + + pass + + +class SammyExecutionError(SammyError): + """Raised when SAMMY execution fails.""" + + pass + + +class OutputCollectionError(SammyError): + """Raised when output collection fails.""" + + pass + + +class ConfigurationError(SammyError): + """Raised when configuration is invalid.""" + + pass + + +class CleanupError(SammyError): + """Raised when cleanup fails.""" + + pass diff --git a/src/pleiades/sammy/parameters/__init__.py b/src/pleiades/sammy/parameters/__init__.py new file mode 100644 index 0000000..098e457 --- /dev/null +++ b/src/pleiades/sammy/parameters/__init__.py @@ -0,0 +1,5 @@ +from pleiades.sammy.parameters.broadening import BroadeningParameterCard # noqa: F401 +from pleiades.sammy.parameters.external_r import ExternalREntry # noqa: F401 +from pleiades.sammy.parameters.normalization import NormalizationBackgroundCard # noqa: F401 +from pleiades.sammy.parameters.resonance import ResonanceEntry # noqa: F401 +from pleiades.sammy.parameters.unused_var import UnusedCorrelatedCard # noqa: F401 diff --git a/src/pleiades/sammy/parameters/broadening.py b/src/pleiades/sammy/parameters/broadening.py new file mode 100644 index 0000000..ca893df --- /dev/null +++ b/src/pleiades/sammy/parameters/broadening.py @@ -0,0 +1,402 @@ +#!/usr/bin/env python +"""Data class for card 04::broadening parameters.""" + +import logging +from typing import List, Optional + +from pydantic import BaseModel, Field, model_validator + +from pleiades.sammy.parameters.helper import VaryFlag, format_float, format_vary, safe_parse + +# Format definitions for fixed-width fields +# Each numeric field follows a 9+1 pattern: +# - 9 characters for the actual data (e.g. "1.2340E+00") +# - 1 character for space separator +# This maintains human readability while ensuring fixed-width alignment + +FORMAT_MAIN = { + "crfn": slice(0, 10), # Matching radius (F) + "temp": slice(10, 20), # Effective temperature (K) + "thick": slice(20, 30), # Sample thickness (atoms/barn) + "deltal": slice(30, 40), # Spread in flight-path length (m) + "deltag": slice(40, 50), # Gaussian resolution width (μs) + "deltae": slice(50, 60), # e-folding width of exponential resolution (μs) + "flag_crfn": slice(60, 62), # Flag for CRFN + "flag_temp": slice(62, 64), # Flag for TEMP + "flag_thick": slice(64, 66), # Flag for THICK + "flag_deltal": slice(66, 68), # Flag for DELTAL + "flag_deltag": slice(68, 70), # Flag for DELTAG + "flag_deltae": slice(70, 72), # Flag for DELTAE +} + +FORMAT_UNCERTAINTY = { + "d_crfn": slice(0, 10), # Uncertainty on CRFN + "d_temp": slice(10, 20), # Uncertainty on TEMP + "d_thick": slice(20, 30), # Uncertainty on THICK + "d_deltal": slice(30, 40), # Uncertainty on DELTAL + "d_deltag": slice(40, 50), # Uncertainty on DELTAG + "d_deltae": slice(50, 60), # Uncertainty on DELTAE +} + +FORMAT_GAUSSIAN = { + "deltc1": slice(0, 10), # Width of Gaussian, constant in energy (eV) + "deltc2": slice(10, 20), # Width of Gaussian, linear in energy (unitless) + "flag_deltc1": slice(60, 62), # Flag for DELTC1 + "flag_deltc2": slice(62, 64), # Flag for DELTC2 +} + +FORMAT_GAUSSIAN_UNC = { + "d_deltc1": slice(0, 10), # Uncertainty on DELTC1 + "d_deltc2": slice(10, 20), # Uncertainty on DELTC2 +} + +CARD_4_HEADER = "BROADening parameters may be varied" + + +class BroadeningParameters(BaseModel): + """Container for a single set of broadening parameters. + + Contains all parameters from a single card set 4 entry including: + - Main parameters (CRFN, TEMP, etc.) + - Their uncertainties + - Additional Gaussian parameters + - Flags indicating whether each parameter should be varied + + Note on fixed-width format: + Each numeric field in the file uses a 10-column width with a 9+1 pattern: + - 9 characters for the actual numeric data (e.g. "1.2340E+00") + - 1 character for space separator + This format ensures human readability while maintaining proper fixed-width alignment. + """ + + # Main parameters + crfn: float = Field(description="Matching radius (F)") + temp: float = Field(description="Effective temperature (K)") + thick: float = Field(description="Sample thickness (atoms/barn)") + deltal: float = Field(description="Spread in flight-path length (m)") + deltag: float = Field(description="Gaussian resolution width (μs)") + deltae: float = Field(description="e-folding width of exponential resolution (μs)") + + # Optional uncertainties for main parameters + d_crfn: Optional[float] = Field(None, description="Uncertainty on CRFN") + d_temp: Optional[float] = Field(None, description="Uncertainty on TEMP") + d_thick: Optional[float] = Field(None, description="Uncertainty on THICK") + d_deltal: Optional[float] = Field(None, description="Uncertainty on DELTAL") + d_deltag: Optional[float] = Field(None, description="Uncertainty on DELTAG") + d_deltae: Optional[float] = Field(None, description="Uncertainty on DELTAE") + + # Optional additional Gaussian parameters + deltc1: Optional[float] = Field(None, description="Width of Gaussian, constant in energy (eV)") + deltc2: Optional[float] = Field(None, description="Width of Gaussian, linear in energy (unitless)") + d_deltc1: Optional[float] = Field(None, description="Uncertainty on DELTC1") + d_deltc2: Optional[float] = Field(None, description="Uncertainty on DELTC2") + + # Vary flags for all parameters + flag_crfn: VaryFlag = Field(default=VaryFlag.NO) + flag_temp: VaryFlag = Field(default=VaryFlag.NO) + flag_thick: VaryFlag = Field(default=VaryFlag.NO) + flag_deltal: VaryFlag = Field(default=VaryFlag.NO) + flag_deltag: VaryFlag = Field(default=VaryFlag.NO) + flag_deltae: VaryFlag = Field(default=VaryFlag.NO) + flag_deltc1: Optional[VaryFlag] = Field(None) + flag_deltc2: Optional[VaryFlag] = Field(None) + + @model_validator(mode="after") + def validate_gaussian_parameters(self) -> "BroadeningParameters": + """Validate that if any Gaussian parameter is present, both are present.""" + has_deltc1 = self.deltc1 is not None + has_deltc2 = self.deltc2 is not None + if has_deltc1 != has_deltc2: + raise ValueError("Both DELTC1 and DELTC2 must be present if either is present") + if has_deltc1: + if self.flag_deltc1 is None or self.flag_deltc2 is None: + raise ValueError("Flags must be specified for DELTC1 and DELTC2 if present") + return self + + @classmethod + def from_lines(cls, lines: List[str]) -> "BroadeningParameters": + """Parse broadening parameters from a list of fixed-width format lines. + + Args: + lines: List of input lines (excluding header) + + Returns: + BroadeningParameters: Parsed parameters + + Raises: + ValueError: If lines are invalid or required data is missing + """ + if not lines or not lines[0].strip(): + raise ValueError("No valid parameter line provided") + + # Make sure first line is long enough + main_line = f"{lines[0]:<72}" + + params = {} + + # Parse main parameters + for field in ["crfn", "temp", "thick", "deltal", "deltag", "deltae"]: + value = safe_parse(main_line[FORMAT_MAIN[field]]) + if value is not None: + params[field] = value + + # Parse vary flags + for field in ["flag_crfn", "flag_temp", "flag_thick", "flag_deltal", "flag_deltag", "flag_deltae"]: + value = main_line[FORMAT_MAIN[field]].strip() or "0" + try: + params[field] = VaryFlag(int(value)) + except (ValueError, TypeError): + params[field] = VaryFlag.NO + + # Parse uncertainties if present + if len(lines) > 1 and lines[1].strip(): + unc_line = f"{lines[1]:<60}" + for field in ["d_crfn", "d_temp", "d_thick", "d_deltal", "d_deltag", "d_deltae"]: + value = safe_parse(unc_line[FORMAT_UNCERTAINTY[field]]) + if value is not None: + params[field] = value + + # Parse additional Gaussian parameters if present + if len(lines) > 2 and lines[2].strip(): + gaussian_line = f"{lines[2]:<64}" + + # Parse main Gaussian parameters + for field in ["deltc1", "deltc2"]: + value = safe_parse(gaussian_line[FORMAT_GAUSSIAN[field]]) + if value is not None: + params[field] = value + + # Parse Gaussian flags + for field in ["flag_deltc1", "flag_deltc2"]: + value = gaussian_line[FORMAT_GAUSSIAN[field]].strip() or "0" + try: + params[field] = VaryFlag(int(value)) + except (ValueError, TypeError): + params[field] = VaryFlag.NO + + # Parse Gaussian uncertainties if present + if len(lines) > 3 and lines[3].strip(): + gaussian_unc_line = f"{lines[3]:<20}" + for field in ["d_deltc1", "d_deltc2"]: + value = safe_parse(gaussian_unc_line[FORMAT_GAUSSIAN_UNC[field]]) + if value is not None: + params[field] = value + + return cls(**params) + + def to_lines(self) -> List[str]: + """Convert the parameters to a list of fixed-width format lines. + + Returns: + List[str]: Lines representing the parameters + """ + lines = [] + + # Format main parameter line + main_parts = [ + format_float(self.crfn, width=9), + format_float(self.temp, width=9), + format_float(self.thick, width=9), + format_float(self.deltal, width=9), + format_float(self.deltag, width=9), + format_float(self.deltae, width=9), + format_vary(self.flag_crfn), + format_vary(self.flag_temp), + format_vary(self.flag_thick), + format_vary(self.flag_deltal), + format_vary(self.flag_deltag), + format_vary(self.flag_deltae), + ] + lines.append(" ".join(main_parts)) + + # Add uncertainties line if any uncertainties are present + if any(getattr(self, f"d_{param}") is not None for param in ["crfn", "temp", "thick", "deltal", "deltag", "deltae"]): + unc_parts = [ + format_float(getattr(self, f"d_{param}", 0.0), width=10) + for param in ["crfn", "temp", "thick", "deltal", "deltag", "deltae"] + ] + lines.append("".join(unc_parts)) + + # Add Gaussian parameters if present + if self.deltc1 is not None and self.deltc2 is not None: + gaussian_parts = [ + format_float(self.deltc1, width=10), + format_float(self.deltc2, width=10), + " " * 50, # Padding + format_vary(self.flag_deltc1), + format_vary(self.flag_deltc2), + ] + lines.append("".join(gaussian_parts)) + + # Add Gaussian uncertainties if present + if self.d_deltc1 is not None or self.d_deltc2 is not None: + gaussian_unc_parts = [format_float(self.d_deltc1 or 0.0, width=10), format_float(self.d_deltc2 or 0.0, width=10)] + lines.append("".join(gaussian_unc_parts)) + + return lines + + +class BroadeningParameterCard(BaseModel): + """Container for a complete broadening parameter card set (Card Set 4). + + This class handles a complete broadening parameter card set, including: + - Header line + - Parameter entries + - Trailing blank line + """ + + parameters: BroadeningParameters + + @classmethod + def is_header_line(cls, line: str) -> bool: + """Check if line is a valid header line. + + Args: + line: Input line to check + + Returns: + bool: True if line is a valid header + """ + return line.strip().upper().startswith("BROAD") + + @classmethod + def from_lines(cls, lines: List[str]) -> "BroadeningParameterCard": + """Parse a complete broadening parameter card set from lines. + + Args: + lines: List of input lines including header + + Returns: + BroadeningParameterCard: Parsed card set + + Raises: + ValueError: If no valid header found or invalid format + """ + if not lines: + raise ValueError("No lines provided") + + # Validate header + if not cls.is_header_line(lines[0]): + raise ValueError(f"Invalid header line: {lines[0]}") + + # Parse parameters (skip header and trailing blank lines) + content_lines = [line for line in lines[1:] if line.strip()] + if not content_lines: + raise ValueError("No parameter lines found") + + parameters = BroadeningParameters.from_lines(content_lines) + return cls(parameters=parameters) + + def to_lines(self) -> List[str]: + """Convert the card set to a list of lines. + + Returns: + List[str]: Lines including header and parameters + """ + lines = [CARD_4_HEADER] + lines.extend(self.parameters.to_lines()) + lines.append("") # Trailing blank line + return lines + + +if __name__ == "__main__": + # Enable logging for debugging + logging.basicConfig(level=logging.DEBUG) + + # Test example with main parameters only + logging.debug("**Testing main parameters only**") + main_only_lines = ["1.234E+00 2.980E+02 1.500E-01 2.500E-02 1.000E+00 5.000E-01 1 0 1 0 1 0"] + + try: + params = BroadeningParameters.from_lines(main_only_lines) + logging.debug("Successfully parsed main parameters:") + logging.debug(f"CRFN: {params.crfn}") + logging.debug(f"TEMP: {params.temp}") + logging.debug("Output lines:") + for line in params.to_lines(): + logging.debug(f"'{line}'") + logging.debug("") + except ValueError as e: + logging.error(f"Failed to parse main parameters: {e}") + + # Test example with uncertainties + logging.debug("**Testing with uncertainties**") + with_unc_lines = [ + "1.234E+00 2.980E+02 1.500E-01 2.500E-02 1.000E+00 5.000E-01 1 0 1 0 1 0", + "1.000E-02 1.000E+00 1.000E-03 1.000E-03 1.000E-02 1.000E-02", + ] + + try: + params = BroadeningParameters.from_lines(with_unc_lines) + logging.debug("Successfully parsed parameters with uncertainties:") + logging.debug(f"CRFN: {params.crfn} ± {params.d_crfn}") + logging.debug(f"TEMP: {params.temp} ± {params.d_temp}") + logging.debug("Output lines:") + for line in params.to_lines(): + logging.debug(f"'{line}'") + logging.debug("") + except ValueError as e: + logging.error(f"Failed to parse parameters with uncertainties: {e}") + + # Test example with Gaussian parameters + logging.debug("**Testing with Gaussian parameters**") + full_lines = [ + "1.234E+00 2.980E+02 1.500E-01 2.500E-02 1.000E+00 5.000E-01 1 0 1 0 1 0", + "1.000E-02 1.000E+00 1.000E-03 1.000E-03 1.000E-02 1.000E-02", + "1.000E-01 2.000E-02 1 1", + "5.000E-03 1.000E-03", + ] + + try: + params = BroadeningParameters.from_lines(full_lines) + logging.debug("Successfully parsed full parameter set:") + logging.debug(f"DELTC1: {params.deltc1} ± {params.d_deltc1}") + logging.debug(f"DELTC2: {params.deltc2} ± {params.d_deltc2}") + logging.debug("Output lines:") + for line in params.to_lines(): + logging.debug(f"'{line}'") + logging.debug("") + except ValueError as e: + logging.error(f"Failed to parse full parameter set: {e}") + + # Test complete card set + logging.debug("**Testing complete card set**") + card_lines = [ + "BROADening parameters may be varied", + "1.234E+00 2.980E+02 1.500E-01 2.500E-02 1.000E+00 5.000E-01 1 0 1 0 1 0", + "1.000E-02 1.000E+00 1.000E-03 1.000E-03 1.000E-02 1.000E-02", + "1.000E-01 2.000E-02 1 1", + "5.000E-03 1.000E-03", + "", + ] + + try: + card = BroadeningParameterCard.from_lines(card_lines) + logging.debug("Successfully parsed complete card set") + logging.debug("Output lines:") + for line in card.to_lines(): + logging.debug(f"'{line}'") + except ValueError as e: + logging.error(f"Failed to parse complete card set: {e}") + + # Test error handling + logging.debug("**Testing Error Handling**") + + # Test invalid header + try: + bad_lines = ["WRONG header line", "1.2340E+00 2.9800E+02 1.5000E-01 2.5000E-02 1.0000E+00 5.0000E-01 1 0 1 0 1 0", ""] + logging.debug("Testing invalid header:") + BroadeningParameterCard.from_lines(bad_lines) + except ValueError as e: + logging.debug(f"Caught expected error for invalid header: {e}") + + # Test invalid Gaussian parameters (missing one) + try: + bad_lines = [ + "1.2340E+00 2.9800E+02 1.5000E-01 2.5000E-02 1.0000E+00 5.0000E-01 1 0 1 0 1 0", ## 11 char instead of 10 + "1.0000E-02 1.0000E+00 1.0000E-03 1.0000E-03 1.0000E-02 1.0000E-02", + "1.0000E-01 1 1", # Missing DELTC2 + ] + BroadeningParameters.from_lines(bad_lines) + except ValueError as e: + logging.debug(f"Caught expected error for invalid Gaussian parameters: {e}") diff --git a/src/pleiades/sammy/parameters/external_r.py b/src/pleiades/sammy/parameters/external_r.py new file mode 100644 index 0000000..228017d --- /dev/null +++ b/src/pleiades/sammy/parameters/external_r.py @@ -0,0 +1,429 @@ +#!/usr/bin/env python +"""Data class for card 03::external R-function parameters.""" + +import logging +from enum import Enum +from typing import List, Optional + +from pydantic import BaseModel, Field, model_validator + +from pleiades.sammy.parameters.helper import VaryFlag, format_float, format_vary, safe_parse + + +class ExternalRFormat(Enum): + FORMAT_3 = "3" # Standard format + FORMAT_3A = "3a" # Alternative compact format + + +# For Format 3 +FORMAT_3 = { + "spin_group": slice(0, 3), # Fortran 1-3 + "channel": slice(3, 5), # Fortran 4-5 + "E_down": slice(5, 16), # Fortran 6-16 + "E_up": slice(16, 27), # Fortran 17-27 + "R_con": slice(27, 38), # Fortran 28-38 + "R_lin": slice(38, 49), # Fortran 39-49 + "s_alpha": slice(49, 60), # Fortran 50-60 + "vary_E_down": slice(61, 62), # Fortran 62 + "vary_E_up": slice(63, 64), # Fortran 64 + "vary_R_con": slice(65, 66), # Fortran 66 + "vary_R_lin": slice(67, 68), # Fortran 68 + "vary_s_alpha": slice(69, 70), # Fortran 70 +} + +# For Format 3a (compact format) +FORMAT_3A = { + "spin_group": slice(0, 2), # Fortran 1-2 + "channel": slice(2, 3), # Fortran 3 + "vary_E_down": slice(3, 4), # Fortran 4 + "vary_E_up": slice(4, 5), # Fortran 5 + "vary_R_con": slice(5, 6), # Fortran 6 + "vary_R_lin": slice(6, 7), # Fortran 7 + "vary_s_con": slice(7, 8), # Fortran 8 + "vary_s_lin": slice(8, 9), # Fortran 9 + "vary_R_q": slice(9, 10), # Fortran 10 + "E_down": slice(10, 20), # Fortran 11-20 + "E_up": slice(20, 30), # Fortran 21-30 + "R_con": slice(30, 40), # Fortran 31-40 + "R_lin": slice(40, 50), # Fortran 41-50 + "s_con": slice(50, 60), # Fortran 51-60 + "s_lin": slice(60, 70), # Fortran 61-70 + "R_q": slice(70, 80), # Fortran 71-80 +} + +CARD_3_HEADER = "EXTERnal R-function parameters follow" +CARD_3A_HEADER = "R-EXTernal parameters follow" + + +class ExternalREntry(BaseModel): + format_type: ExternalRFormat + # Common fields + spin_group: int + channel: int + E_down: float = Field(description="Logarithmic singularity below energy range (eV)") + E_up: float = Field(description="Logarithmic singularity above energy range (eV)") + R_con: float = Field(description="Constant term") + R_lin: float = Field(description="Linear term") + + # Format 3 specific + s_alpha: Optional[float] = Field(None, description="Coefficient of logarithmic term (must be non-negative)", ge=0.0) + vary_s_alpha: Optional[VaryFlag] = Field(default=VaryFlag.NO) + + # Format 3a specific + s_con: Optional[float] = Field(None, description="Constant coefficient of logarithmic term", ge=0.0) + s_lin: Optional[float] = Field(None, description="Linear coefficient of logarithmic term") + R_q: Optional[float] = Field(None, description="Quadratic term") + vary_s_con: Optional[VaryFlag] = Field(default=VaryFlag.NO) + vary_s_lin: Optional[VaryFlag] = Field(default=VaryFlag.NO) + vary_R_q: Optional[VaryFlag] = Field(default=VaryFlag.NO) + + # Common vary flags + vary_E_down: VaryFlag = Field(default=VaryFlag.NO) + vary_E_up: VaryFlag = Field(default=VaryFlag.NO) + vary_R_con: VaryFlag = Field(default=VaryFlag.NO) + vary_R_lin: VaryFlag = Field(default=VaryFlag.NO) + + @model_validator(mode="after") + def validate_format_specific_fields(self) -> "ExternalREntry": + if self.format_type == ExternalRFormat.FORMAT_3: + if self.s_alpha is None: + raise ValueError("s_alpha is required for Format 3") + if any(v is not None for v in [self.s_con, self.s_lin, self.R_q]): + raise ValueError("Format 3a specific fields should not be set for Format 3") + else: # FORMAT_3A + if any(v is not None for v in [self.s_alpha]): + raise ValueError("Format 3 specific fields should not be set for Format 3a") + if any(v is None for v in [self.s_con, self.s_lin, self.R_q]): + raise ValueError("s_con, s_lin, and R_q are required for Format 3a") + return self + + @classmethod + def from_str(cls, line: str, format_type: ExternalRFormat) -> "ExternalREntry": + """Parse an external R-function entry from a fixed-width format line. + + Args: + line: Input line to parse + format_type: Format type to use + + Returns: + ExternalREntry: Parsed entry + + Raises: + ValueError: If line is empty or parsing fails + """ + if not line.strip(): + raise ValueError("Empty line provided") + + # Make sure line is long enough by padding with spaces + line = f"{line:<80}" + + # Select format based on type + format_layout = FORMAT_3 if format_type == ExternalRFormat.FORMAT_3 else FORMAT_3A + + params = {"format_type": format_type} + + # Parse integer fields + for field in ["spin_group", "channel"]: + value = safe_parse(line[format_layout[field]], as_int=True) + if value is not None: + params[field] = value + + # Parse float fields common to both formats + for field in ["E_down", "E_up", "R_con", "R_lin"]: + value = safe_parse(line[format_layout[field]]) + if value is not None: + params[field] = value + + # Parse format-specific float fields + if format_type == ExternalRFormat.FORMAT_3: + value = safe_parse(line[format_layout["s_alpha"]]) + if value is not None: + params["s_alpha"] = value + else: # FORMAT_3A + for field in ["s_con", "s_lin", "R_q"]: + value = safe_parse(line[format_layout[field]]) + if value is not None: + params[field] = value + + # Parse common vary flags + for field in ["vary_E_down", "vary_E_up", "vary_R_con", "vary_R_lin"]: + value = line[format_layout[field]].strip() or "0" + try: + params[field] = VaryFlag(int(value)) + except (ValueError, TypeError): + params[field] = VaryFlag.NO + + # Parse format-specific vary flags + if format_type == ExternalRFormat.FORMAT_3: + try: + value = int(line[format_layout["vary_s_alpha"]].strip() or "0") + params["vary_s_alpha"] = VaryFlag(value) + except (ValueError, TypeError): + params["vary_s_alpha"] = VaryFlag.NO + else: # FORMAT_3A + for field in ["vary_s_con", "vary_s_lin", "vary_R_q"]: + try: + value = int(line[format_layout[field]].strip() or "0") + params[field] = VaryFlag(value) + except (ValueError, TypeError): + params[field] = VaryFlag.NO + + return cls(**params) + + def to_str(self) -> str: + """Convert the external R-function entry to fixed-width format string.""" + if self.format_type == ExternalRFormat.FORMAT_3: + # Format 3 has specific spacing requirements + parts = [ + f"{self.spin_group:2d} ", # 3 digits + f"{self.channel:1d} ", # 2 digits + format_float(self.E_down, width=11), # 11 chars + format_float(self.E_up, width=11), # 11 chars + format_float(self.R_con, width=11), # 11 chars + format_float(self.R_lin, width=11), # 11 chars + format_float(self.s_alpha, width=11), # 11 chars + " ", # pad one space to ensure flag section in the right column + format_vary(self.vary_E_down), + " ", + format_vary(self.vary_E_up), + " ", + format_vary(self.vary_R_con), + " ", + format_vary(self.vary_R_lin), + " ", + format_vary(self.vary_s_alpha), + ] + return "".join(parts) + else: # FORMAT_3A + # Format 3A has compact spacing + # NOTE: compact format uses 10 chars for each float field + # whereas + # regular format uses 11 chars + parts = [ + f"{self.spin_group:2d}", + f"{self.channel:1d}", + format_vary(self.vary_E_down), + format_vary(self.vary_E_up), + format_vary(self.vary_R_con), + format_vary(self.vary_R_lin), + format_vary(self.vary_s_con), + format_vary(self.vary_s_lin), + format_vary(self.vary_R_q), + format_float(self.E_down, width=10), + format_float(self.E_up, width=10), + format_float(self.R_con, width=10), + format_float(self.R_lin, width=10), + format_float(self.s_con, width=10), + format_float(self.s_lin, width=10), + format_float(self.R_q, width=10), + ] + return "".join(parts) + + +class ExternalRFunction(BaseModel): + """Container for External R-function entries (Card Set 3/3a). + + This class handles a complete External R-function card set, including: + - Header line + - Multiple parameter entries + - Trailing blank line + + Examples: + >>> # Create from lines + >>> lines = [ + ... "EXTERnal R-function parameters follow", + ... " 1 2 1.2340E+00 5.6780E+00 1.2300E-01 4.5600E-01 7.8900E-01 1 0 0 1 0", + ... " 2 1 2.3450E+00 6.7890E+00 2.3400E-01 5.6700E-01 8.9000E-01 0 1 0 0 1", + ... "" + ... ] + >>> r_function = ExternalRFunction.from_lines(lines) + >>> len(r_function.entries) + 2 + + >>> # Convert back to lines + >>> output_lines = r_function.to_lines() + >>> len(output_lines) + 4 # Header + 2 entries + blank line + """ + + format_type: ExternalRFormat + entries: List[ExternalREntry] = Field(default_factory=list) + + @classmethod + def is_header_line(cls, line: str) -> Optional[ExternalRFormat]: + """Check if line is a header and return corresponding format type. + + Args: + line: Input line to check + + Returns: + ExternalRFormat if line is a header, None otherwise + """ + line = line.strip() + if line.startswith("EXTER"): + return ExternalRFormat.FORMAT_3 + elif line.startswith("R-EXT"): + return ExternalRFormat.FORMAT_3A + return None + + @classmethod + def write_header(cls, format_type: ExternalRFormat) -> str: + """Generate the appropriate header line for the format. + + Args: + format_type: Format type to use + + Returns: + str: Header line + """ + if format_type == ExternalRFormat.FORMAT_3: + return CARD_3_HEADER + else: + return CARD_3A_HEADER + + @classmethod + def from_lines(cls, lines: List[str]) -> "ExternalRFunction": + """Parse a complete External R-function card set from lines. + + Args: + lines: List of input lines including header and entries + + Returns: + ExternalRFunction: Parsed card set + + Raises: + ValueError: If no valid header found or invalid format + """ + if not lines: + raise ValueError("No lines provided") + + # Find and validate header + format_type = cls.is_header_line(lines[0]) + if format_type is None: + raise ValueError(f"Invalid header line: {lines[0]}") + + # Parse entries (skip header and trailing blank lines) + entries = [] + for line in lines[1:]: + if not line.strip(): # Skip blank lines + continue + try: + entry = ExternalREntry.from_str(line, format_type) + entries.append(entry) + except ValueError as e: + raise ValueError(f"Failed to parse entry line: {line}") from e + + return cls(format_type=format_type, entries=entries) + + def to_lines(self) -> List[str]: + """Convert the card set to a list of lines. + + Returns: + List[str]: Lines including header, entries, and trailing blank line + """ + lines = [] + + # Add header + lines.append(self.write_header(self.format_type)) + + # Add entries + for entry in self.entries: + lines.append(entry.to_str()) + + # Add trailing blank line + lines.append("") + + return lines + + +if __name__ == "__main__": + # Enable logging for debugging + logging.basicConfig(level=logging.DEBUG) + + # Test ExternalREntry with both formats + logging.debug("**Testing ExternalREntry with Format 3**") + format3_examples = [ + " 1 2 1.2340E+00 5.6780E+00 1.2300E-01 4.5600E-01 7.8900E-01 1 0 1 0 1", + " 2 1 2.3450E+00 6.7890E+00 2.3400E-01 5.6700E-01 8.9000E-01 0 1 0 0 1", + # ^^ two spaces here + ] + + for i, line in enumerate(format3_examples): + entry = ExternalREntry.from_str(line, ExternalRFormat.FORMAT_3) + logging.debug(f"Format 3 Example {i+1}:") + logging.debug(f"Object : {entry}") + logging.debug(f"Original : {line}") + logging.debug(f"Reformatted: {entry.to_str()}") + logging.debug("") + + logging.debug("**Testing ExternalREntry with Format 3A**") + format3a_examples = [ + "12100100001.2340E+005.6780E+001.2300E-014.5600E-017.8900E-018.9000E-019.0000E-01", + "21201001012.3450E+006.7890E+002.3400E-015.6700E-018.9000E-019.1000E-019.2000E-01", + ] + + for i, line in enumerate(format3a_examples): + entry = ExternalREntry.from_str(line, ExternalRFormat.FORMAT_3A) + logging.debug(f"Format 3A Example {i+1}:") + logging.debug(f"Object : {entry}") + logging.debug(f"Original : {line}") + logging.debug(f"Reformatted: {entry.to_str()}") + logging.debug("") + + # Test ExternalRFunction with complete card sets + logging.debug("**Testing ExternalRFunction with Format 3**") + format3_lines = [ + "EXTERnal R-function parameters follow", + " 1 2 1.2340E+00 5.6780E+00 1.2300E-01 4.5600E-01 7.8900E-01 1 0 0 1 0", + " 2 1 2.3450E+00 6.7890E+00 2.3400E-01 5.6700E-01 8.9000E-01 0 1 0 0 1", + "", + ] + + try: + r_function = ExternalRFunction.from_lines(format3_lines) + logging.debug("Successfully parsed Format 3 card set:") + logging.debug("Number of entries: {len(r_function.entries)}") + logging.debug("Output lines:") + for line in r_function.to_lines(): + logging.debug(f"'{line}'") + logging.debug("") + except ValueError as e: + logging.error(f"Failed to parse Format 3 card set: {e}") + + logging.debug("**Testing ExternalRFunction with Format 3A**") + format3a_lines = [ + "R-EXTernal parameters follow", + "12100100001.2340E+005.6780E+001.2300E-014.5600E-017.8900E-018.9000E-019.0000E-01", + "21201001012.3450E+006.7890E+002.3400E-015.6700E-018.9000E-019.1000E-019.2000E-01", + "", + ] + + try: + r_function = ExternalRFunction.from_lines(format3a_lines) + logging.debug("Successfully parsed Format 3A card set:") + logging.debug(f"Number of entries: {len(r_function.entries)}") + logging.debug("Output lines:") + for line in r_function.to_lines(): + logging.debug(f"'{line}'") + logging.debug("") + except ValueError as e: + logging.error(f"Failed to parse Format 3A card set: {e}") + + # Test error handling + logging.debug("**Testing Error Handling**") + + # Test invalid s_alpha (negative value) + try: + bad_line = " 1 2 1.2340E+00 5.6780E+00 1.2300E-01 4.5600E-01 -7.8900E-01 1 0 0 1 0" + logging.debug(f"Testing line with negative s_alpha: '{bad_line}'") + ExternalREntry.from_str(bad_line, ExternalRFormat.FORMAT_3) + except ValueError as e: + logging.debug(f"Caught expected error for negative s_alpha: {e}") + + # Test invalid header + try: + bad_lines = ["WRONG header line", " 1 2 1.2340E+00 5.6780E+00 1.2300E-01 4.5600E-01 7.8900E-01 1 0 0 1 0", ""] + logging.debug("Testing invalid header:") + ExternalRFunction.from_lines(bad_lines) + except ValueError as e: + logging.debug(f"Caught expected error for invalid header: {e}") diff --git a/src/pleiades/sammy/parameters/helper.py b/src/pleiades/sammy/parameters/helper.py new file mode 100644 index 0000000..c751cb5 --- /dev/null +++ b/src/pleiades/sammy/parameters/helper.py @@ -0,0 +1,117 @@ +#!/usr/bin/env python +"""Helper functions for parameter file handling.""" + +import re +from enum import Enum +from typing import Optional + + +class VaryFlag(Enum): + NO = 0 + YES = 1 + PUP = 3 # propagated uncertainty parameter + USE_FROM_PARFILE = -1 # do not vary, use value from parfile + USE_FROM_OTHERS = -2 # do not vary, use value from other sources (INP, COV, etc.) + + +def safe_parse(s: str, as_int: bool = False) -> Optional[float]: + """Helper function to safely parse numeric values + + Args: + s: String to parse + as_int: Flag to parse as integer (default: False) + + Returns: + Parsed value or None if parsing failed + """ + s = s.strip() + if not s: + return None + try: + if as_int: + return int(s) + return float(s) + except ValueError: + return None + + +def format_float(value: Optional[float], width: int = 11) -> str: + """Helper to format float values in fixed width with proper spacing""" + if value is None: + return " " * width + + # Subtract 5 characters for "E+xx" (scientific notation exponent) + # The rest is for the significant digits (1 before the dot and decimals) + max_decimals = max(0, width - 6) # At least room for "0.E+00" + + # Create a format string with dynamic precision + format_str = f"{{:.{max_decimals}E}}" + formatted = format_str.format(value) + + # Ensure the string fits the width + if len(formatted) > width: + raise ValueError(f"Cannot format value {value} to fit in {width} characters.") + + # Align to the left if required + return f"{formatted:<{width}}" + + +def format_vary(value: VaryFlag) -> str: + """Helper to format vary flags with proper spacing""" + if value == VaryFlag.NO: + return "0" + if value == VaryFlag.YES: + return "1" + if value == VaryFlag.PUP: + return "3" + if value == VaryFlag.USE_FROM_PARFILE: + return "-1" + if value == VaryFlag.USE_FROM_OTHERS: + return "-2" + raise ValueError(f"Unsupported vary flag: {value}") + + +def parse_keyword_pairs_to_dict(text: str) -> dict: + """ + Parse an ASCII text into a dictionary of keyword-value pairs. + + Parameters: + text (str): The input text with keyword-value pairs. + + Returns: + dict: A dictionary with keywords as keys and parsed values. + """ + data = {} + + # Regex to match key=value pairs + # (\w+): captures the keyword + # \s*=\s*: matches the equal sign with optional spaces around it + # ([^=\n]+?): captures the value until the next keyword or end of line + # (?=\s+\w+\s*=|$): lookahead to match the next keyword or end of line + pattern = r"(\w+)\s*=\s*([^=\n]+?)(?=\s+\w+\s*=|$)" + + for line in text.splitlines(): + # Skip empty lines + if not line.strip(): + continue + + # Find all key-value pairs in the line + matches = re.findall(pattern, line) + + for key, value in matches: + # Process the value + value = value.strip() + if " " in value: + # Convert space-separated numbers to a list of float or int + items = value.split() + parsed_value = [float(item) if "." in item else int(item) if item.isdigit() else item for item in items] + else: + # Single value, convert to int or float if possible + if value.isdigit(): + parsed_value = int(value) + else: + parsed_value = float(value) if "." in value else value + + data[key] = parsed_value + + return data diff --git a/src/pleiades/sammy/parameters/normalization.py b/src/pleiades/sammy/parameters/normalization.py new file mode 100644 index 0000000..01100ba --- /dev/null +++ b/src/pleiades/sammy/parameters/normalization.py @@ -0,0 +1,316 @@ +#!/usr/bin/env python +"""Data class for card 06::normalization and background parameters.""" + +import logging +from typing import List, Optional + +from pydantic import BaseModel, Field + +from pleiades.sammy.parameters.helper import VaryFlag, format_float, format_vary, safe_parse + +# Format definitions for fixed-width fields +# Each numeric field follows a 9+1 pattern for readability +FORMAT_MAIN = { + "anorm": slice(0, 10), # Normalization + "backa": slice(10, 20), # Constant background + "backb": slice(20, 30), # Background proportional to 1/E + "backc": slice(30, 40), # Background proportional to √E + "backd": slice(40, 50), # Exponential background coefficient + "backf": slice(50, 60), # Exponential decay constant + "flag_anorm": slice(60, 62), # Flag for ANORM + "flag_backa": slice(62, 64), # Flag for BACKA + "flag_backb": slice(64, 66), # Flag for BACKB + "flag_backc": slice(66, 68), # Flag for BACKC + "flag_backd": slice(68, 70), # Flag for BACKD + "flag_backf": slice(70, 72), # Flag for BACKF +} + +FORMAT_UNCERTAINTY = { + "d_anorm": slice(0, 10), + "d_backa": slice(10, 20), + "d_backb": slice(20, 30), + "d_backc": slice(30, 40), + "d_backd": slice(40, 50), + "d_backf": slice(50, 60), +} + +CARD_6_HEADER = "NORMAlization and background are next" + + +class NormalizationParameters(BaseModel): + """Parameters for normalization and background for one angle. + + Contains: + - Normalization and background values + - Their uncertainties (optional) + - Flags indicating whether each parameter should be varied + + Note on fixed-width format: + Each numeric field in the file uses a 10-column width with a 9+1 pattern: + - 9 characters for the actual numeric data (e.g. "1.2340E+00") + - 1 character for space separator + """ + + # Main parameters + anorm: float = Field(description="Normalization (dimensionless)") + backa: float = Field(description="Constant background") + backb: float = Field(description="Background proportional to 1/E") + backc: float = Field(description="Background proportional to √E") + backd: float = Field(description="Exponential background coefficient") + backf: float = Field(description="Exponential decay constant") + + # Optional uncertainties + d_anorm: Optional[float] = Field(None, description="Uncertainty on ANORM") + d_backa: Optional[float] = Field(None, description="Uncertainty on BACKA") + d_backb: Optional[float] = Field(None, description="Uncertainty on BACKB") + d_backc: Optional[float] = Field(None, description="Uncertainty on BACKC") + d_backd: Optional[float] = Field(None, description="Uncertainty on BACKD") + d_backf: Optional[float] = Field(None, description="Uncertainty on BACKF") + + # Vary flags + flag_anorm: VaryFlag = Field(default=VaryFlag.NO) + flag_backa: VaryFlag = Field(default=VaryFlag.NO) + flag_backb: VaryFlag = Field(default=VaryFlag.NO) + flag_backc: VaryFlag = Field(default=VaryFlag.NO) + flag_backd: VaryFlag = Field(default=VaryFlag.NO) + flag_backf: VaryFlag = Field(default=VaryFlag.NO) + + @classmethod + def from_lines(cls, lines: List[str]) -> "NormalizationParameters": + """Parse normalization parameters from a list of fixed-width format lines. + + Args: + lines: List of input lines + + Returns: + NormalizationParameters: Parsed parameters + + Raises: + ValueError: If lines are invalid or required data is missing + """ + if not lines or not lines[0].strip(): + raise ValueError("No valid parameter line provided") + + # Make sure first line is long enough + main_line = f"{lines[0]:<72}" + + params = {} + + # Parse main parameters + for field in ["anorm", "backa", "backb", "backc", "backd", "backf"]: + value = safe_parse(main_line[FORMAT_MAIN[field]]) + if value is not None: + params[field] = value + + # Parse vary flags + for field in ["flag_anorm", "flag_backa", "flag_backb", "flag_backc", "flag_backd", "flag_backf"]: + value = main_line[FORMAT_MAIN[field]].strip() or "0" + try: + params[field] = VaryFlag(int(value)) + except (ValueError, TypeError): + params[field] = VaryFlag.NO + + # Parse uncertainties if present + if len(lines) > 1 and lines[1].strip(): + unc_line = f"{lines[1]:<60}" + for field in ["d_anorm", "d_backa", "d_backb", "d_backc", "d_backd", "d_backf"]: + value = safe_parse(unc_line[FORMAT_UNCERTAINTY[field]]) + if value is not None: + params[field] = value + + return cls(**params) + + def to_lines(self) -> List[str]: + """Convert the parameters to a list of fixed-width format lines. + + Returns: + List[str]: Lines representing the parameters + """ + lines = [] + + # Format main parameter line + main_parts = [ + format_float(self.anorm, width=9), + format_float(self.backa, width=9), + format_float(self.backb, width=9), + format_float(self.backc, width=9), + format_float(self.backd, width=9), + format_float(self.backf, width=9), + format_vary(self.flag_anorm), + format_vary(self.flag_backa), + format_vary(self.flag_backb), + format_vary(self.flag_backc), + format_vary(self.flag_backd), + format_vary(self.flag_backf), + ] + lines.append(" ".join(main_parts)) + + # Add uncertainties line if any uncertainties are present + if any(getattr(self, f"d_{param}") is not None for param in ["anorm", "backa", "backb", "backc", "backd", "backf"]): + unc_parts = [ + format_float(getattr(self, f"d_{param}", 0.0), width=10) for param in ["anorm", "backa", "backb", "backc", "backd", "backf"] + ] + lines.append("".join(unc_parts)) + + return lines + + +class NormalizationBackgroundCard(BaseModel): + """Container for complete normalization/background card set (Card Set 6). + + This class handles a complete card set, including: + - Header line + - Parameter entries for each angle + - Trailing blank line + """ + + angle_sets: List[NormalizationParameters] = Field(min_items=1) + + @classmethod + def is_header_line(cls, line: str) -> bool: + """Check if line is a valid header line. + + Args: + line: Input line to check + + Returns: + bool: True if line is a valid header + """ + return line.strip().upper().startswith("NORMA") + + @classmethod + def from_lines(cls, lines: List[str]) -> "NormalizationBackgroundCard": + """Parse a complete normalization card set from lines. + + Args: + lines: List of input lines including header + + Returns: + NormalizationBackgroundCard: Parsed card set + + Raises: + ValueError: If no valid header found or invalid format + """ + if not lines: + raise ValueError("No lines provided") + + # Validate header + if not cls.is_header_line(lines[0]): + raise ValueError(f"Invalid header line: {lines[0]}") + + # Parse parameters (skip header and trailing blank lines) + content_lines = [line for line in lines[1:] if line.strip()] + if not content_lines: + raise ValueError("No parameter lines found") + + # Parse angle sets (each set can have 1-2 lines) + angle_sets = [] + i = 0 + while i < len(content_lines): + # Check if next line exists and is an uncertainty line + next_lines = [content_lines[i]] + if i + 1 < len(content_lines): + # Check if next line looks like uncertainties (contains numeric values) + # rather than a new parameter set + if safe_parse(content_lines[i + 1][:10]) is not None: + next_lines.append(content_lines[i + 1]) + i += 2 + else: + i += 1 + else: + i += 1 + + angle_sets.append(NormalizationParameters.from_lines(next_lines)) + + return cls(angle_sets=angle_sets) + + def to_lines(self) -> List[str]: + """Convert the card set to a list of lines. + + Returns: + List[str]: Lines including header and parameters + """ + lines = [CARD_6_HEADER] + for angle_set in self.angle_sets: + lines.extend(angle_set.to_lines()) + lines.append("") # Trailing blank line + return lines + + +if __name__ == "__main__": + # Enable logging for debugging + logging.basicConfig(level=logging.DEBUG) + + # Test example with main parameters only + logging.debug("**Testing main parameters only**") + main_only_lines = ["1.234E+00 2.980E+02 1.500E-01 2.500E-02 1.000E+00 5.000E-01 1 0 1 0 1 0"] + + try: + params = NormalizationParameters.from_lines(main_only_lines) + logging.debug("Successfully parsed main parameters:") + logging.debug(f"ANORM: {params.anorm}") + logging.debug(f"BACKA: {params.backa}") + logging.debug("Output lines:") + for line in params.to_lines(): + logging.debug(f"'{line}'") + logging.debug("") + except ValueError as e: + logging.error(f"Failed to parse main parameters: {e}") + + # Test example with uncertainties + logging.debug("**Testing with uncertainties**") + with_unc_lines = [ + "1.234E+00 2.980E+02 1.500E-01 2.500E-02 1.000E+00 5.000E-01 1 0 1 0 1 0", + "1.000E-02 1.000E+00 1.000E-03 1.000E-03 1.000E-02 1.000E-02", + ] + + try: + params = NormalizationParameters.from_lines(with_unc_lines) + logging.debug("Successfully parsed parameters with uncertainties:") + logging.debug(f"ANORM: {params.anorm} ± {params.d_anorm}") + logging.debug(f"BACKA: {params.backa} ± {params.d_backa}") + logging.debug("Output lines:") + for line in params.to_lines(): + logging.debug(f"'{line}'") + logging.debug("") + except ValueError as e: + logging.error(f"Failed to parse parameters with uncertainties: {e}") + + # Test complete card set with multiple angles + logging.debug("**Testing complete card set with multiple angles**") + card_lines = [ + "NORMAlization and background are next", + "1.234E+00 2.980E+02 1.500E-01 2.500E-02 1.000E+00 5.000E-01 1 0 1 0 1 0", + "1.000E-02 1.000E+00 1.000E-03 1.000E-03 1.000E-02 1.000E-02", + "1.300E+00 3.000E+02 1.600E-01 2.600E-02 1.100E+00 5.100E-01 1 0 1 0 1 0", + "", + ] + + try: + card = NormalizationBackgroundCard.from_lines(card_lines) + logging.debug("Successfully parsed complete card set") + logging.debug(f"Number of angle sets: {len(card.angle_sets)}") + logging.debug("Output lines:") + for line in card.to_lines(): + logging.debug(f"'{line}'") + except ValueError as e: + logging.error(f"Failed to parse complete card set: {e}") + + # Test error handling + logging.debug("\n**Testing Error Handling**") + + # Test invalid header + try: + bad_lines = ["WRONG header line", "1.234E+00 2.980E+02 1.500E-01 2.500E-02 1.000E+00 5.000E-01 1 0 1 0 1 0", ""] + logging.debug("Testing invalid header:") + NormalizationBackgroundCard.from_lines(bad_lines) + except ValueError as e: + logging.debug(f"Caught expected error for invalid header: {e}") + + # Test empty parameter set + try: + bad_lines = ["NORMAlization and background are next", ""] + logging.debug("Testing empty parameter set:") + NormalizationBackgroundCard.from_lines(bad_lines) + except ValueError as e: + logging.debug(f"Caught expected error for empty parameter set: {e}") diff --git a/src/pleiades/sammy/parameters/radius.py b/src/pleiades/sammy/parameters/radius.py new file mode 100644 index 0000000..bc99ea3 --- /dev/null +++ b/src/pleiades/sammy/parameters/radius.py @@ -0,0 +1,964 @@ +#!/usr/bin/env python +"""Card Set 7/7a: Radius Parameters. + +This module handles both fixed-width (Card Set 7) and keyword-based (Card Set 7a) formats +for radius parameters in SAMMY parameter files. +""" + +import re +from enum import Enum +from typing import List, Optional, Tuple, Union + +from pydantic import BaseModel, Field, field_validator, model_validator + +from pleiades.sammy.parameters.helper import VaryFlag, format_float, format_vary, parse_keyword_pairs_to_dict, safe_parse + + +class OrbitalMomentum(str, Enum): + """Valid values for orbital angular momentum specification.""" + + ODD = "ODD" + EVEN = "EVEN" + ALL = "ALL" + + +class RadiusParameters(BaseModel): + """Container for nuclear radius parameters used in SAMMY calculations. + + This class represents a set of radius parameters that define both the potential + scattering radius and the radius used for penetrabilities and shift calculations. + These parameters can be applied globally or to specific spin groups and channels. + + Attributes: + effective_radius (float): + The radius (in Fermi) used for potential scattering calculations. + + true_radius (float): + The radius (in Fermi) used for penetrabilities and shift calculations. + Special values: + - If 0: Uses the CRFN value from input file/card set 4 + - If negative: Absolute value represents mass ratio to neutron (AWRI), + radius calculated as 1.23(AWRI)^1/3 + 0.8 (ENDF formula) + + channel_mode (int): + Determines how channels are specified: + - 0: Parameters apply to all channels + - 1: Parameters apply only to specified channels in channels list + + vary_effective (VaryFlag): + Flag indicating how effective radius should be treated: + - NO (0): Parameter is held fixed + - YES (1): Parameter is varied in fitting + - PUP (3): Parameter is treated as a propagated uncertainty parameter + + vary_true (VaryFlag): + Flag indicating how true radius should be treated: + - USE_FROM_EFFECTIVE (-1): Treated as identical to effective_radius + - NO (0): Parameter is held fixed + - YES (1): Parameter is varied independently + - PUP (3): Parameter is treated as a propagated uncertainty parameter + + spin_groups (List[int]): + List of spin group numbers that use these radius parameters. + Values > 500 indicate omitted resonances. + + channels (Optional[List[int]]): + List of channel numbers when channel_mode=1. + When channel_mode=0, this should be None. + + Note: + This class supports the three different input formats specified in SAMMY: + - Default format (card set 7) for <99 spin groups + - Alternate format for >99 spin groups + - Keyword-based format + However, internally it maintains a consistent representation regardless + of input format. + """ + + effective_radius: float = Field(description="Radius for potential scattering (Fermi)", ge=0) + true_radius: float = Field(description="Radius for penetrabilities and shifts (Fermi)") + channel_mode: int = Field( + description="Channel specification mode (0: all channels, 1: specific channels)", + ge=0, # Greater than or equal to 0 + le=1, # Less than or equal to 1 + ) + vary_effective: VaryFlag = Field(default=VaryFlag.NO, description="Flag for varying effective radius") + vary_true: VaryFlag = Field(default=VaryFlag.NO, description="Flag for varying true radius") + spin_groups: Optional[List[int]] = Field( + description="List of spin group numbers", + ) + channels: Optional[List[int]] = Field(default=None, description="List of channel numbers (required when channel_mode=1)") + + @field_validator("spin_groups") + def validate_spin_groups(cls, v: List[int]) -> List[int]: + """Validate spin group numbers. + + Args: + v: List of spin group numbers + + Returns: + List[int]: Validated spin group numbers + + Raises: + ValueError: If any spin group number is invalid + """ + for group in v: + if group <= 0: + raise ValueError(f"Spin group numbers must be positive, got {group}") + + # Values > 500 are valid but indicate omitted resonances + # We allow them but might want to warn the user + if group > 500: + print(f"Warning: Spin group {group} > 500 indicates omitted resonances") + + return v + + @field_validator("vary_true") + def validate_vary_true(cls, v: VaryFlag) -> VaryFlag: + """Validate vary_true flag has valid values. + + For true radius, we allow an additional special value -1 (USE_FROM_PARFILE) + + Args: + v: Vary flag value + + Returns: + VaryFlag: Validated flag value + + Raises: + ValueError: If flag value is invalid + """ + allowed_values = [ + VaryFlag.USE_FROM_PARFILE, # -1 + VaryFlag.NO, # 0 + VaryFlag.YES, # 1 + VaryFlag.PUP, # 3 + ] + if v not in allowed_values: + raise ValueError(f"vary_true must be one of {allowed_values}, got {v}") + return v + + @model_validator(mode="after") + def validate_channels(self) -> "RadiusParameters": + """Validate channel specifications. + + Ensures that: + 1. If channel_mode=1, channels must be provided + 2. If channel_mode=0, channels should be None + + Returns: + RadiusParameters: Self if validation passes + + Raises: + ValueError: If channel specifications are invalid + """ + if self.channel_mode == 1 and not self.channels: + raise ValueError("When channel_mode=1, channels must be provided") + if self.channel_mode == 0 and self.channels is not None: + raise ValueError("When channel_mode=0, channels must be None") + return self + + @model_validator(mode="after") + def validate_true_radius_consistency(self) -> "RadiusParameters": + """Validate consistency between true_radius and vary_true. + + Ensures that: + 1. If vary_true is USE_FROM_PARFILE, true_radius matches effective_radius + 2. If true_radius is 0, vary_true cannot be USE_FROM_PARFILE + 3. If true_radius is negative, it represents AWRI and vary_true cannot be USE_FROM_PARFILE + + Returns: + RadiusParameters: Self if validation passes + + Raises: + ValueError: If radius specifications are inconsistent + """ + if self.vary_true == VaryFlag.USE_FROM_PARFILE: + if self.true_radius != self.effective_radius: + raise ValueError("When vary_true is USE_FROM_PARFILE (-1), " "true_radius must match effective_radius") + + # Special cases for true_radius + if self.true_radius == 0: + if self.vary_true == VaryFlag.USE_FROM_PARFILE: + raise ValueError("When true_radius=0 (use CRFN value), " "vary_true cannot be USE_FROM_PARFILE (-1)") + + if self.true_radius < 0: + if self.vary_true == VaryFlag.USE_FROM_PARFILE: + raise ValueError("When true_radius is negative (AWRI specification), " "vary_true cannot be USE_FROM_PARFILE (-1)") + + return self + + +# Format definitions for fixed-width fields +FORMAT_DEFAULT = { + "pareff": slice(0, 10), # Effective radius (Fermi) + "partru": slice(10, 20), # True radius (Fermi) + "ichan": slice(20, 21), # Channel indicator + "ifleff": slice(21, 22), # Flag for PAREFF + "ifltru": slice(22, 24), # Flag for PARTRU + # Spin groups start at col 24, 2 cols each + # After IX=0 marker, channel numbers use 2 cols each +} + +CARD_7_HEADER = "RADIUs parameters follow" + + +class RadiusCardDefault(BaseModel): + """Handler for default format radius parameter cards (Card Set 7). + + This class handles parsing and writing radius parameters in the default + fixed-width format used for systems with fewer than 99 spin groups. + + The format includes: + - Fixed width fields for radii and flags + - Support for multiple lines of spin groups with -1 continuation + - Optional channel numbers after IX=0 marker when channel_mode=1 + + Note: + This format should only be used when the number of spin groups < 99. + For larger systems, use RadiusCardAlternate. + """ + + parameters: RadiusParameters + + @classmethod + def is_header_line(cls, line: str) -> bool: + """Check if line is a valid header line. + + Args: + line: Input line to check + + Returns: + bool: True if line is a valid header + """ + return line.strip().upper().startswith("RADIU") + + @staticmethod + def _parse_numbers_from_line(line: str, start_pos: int, width: int) -> List[int]: + """Parse fixed-width integer values from a line. + + Args: + line: Input line + start_pos: Starting position + width: Width of each field + + Returns: + List[int]: List of parsed integers, stopping at first invalid value + """ + numbers = [] + pos = start_pos + while pos + width <= len(line): + value = safe_parse(line[pos : pos + width], as_int=True) + if value is None: + break + numbers.append(value) + pos += width + return numbers + + @classmethod + def _parse_spin_groups_and_channels(cls, lines: List[str]) -> Tuple[List[int], Optional[List[int]]]: + """Parse spin groups and optional channels from lines. + + Args: + lines: List of input lines containing spin groups/channels + + Returns: + Tuple containing: + - List[int]: Spin group numbers + - Optional[List[int]]: Channel numbers if present + + Note: + Handles continuation lines (-1 marker) and IX=0 marker for channels + """ + spin_groups = [] + channels = None + + for line in lines: + # Parse numbers 2 columns each starting at position 24 + numbers = cls._parse_numbers_from_line(line, 24, 2) + + if not numbers: + continue + + # Check for continuation marker (-1) + if numbers[-1] == -1: + spin_groups.extend(numbers[:-1]) + continue + + # Check for IX=0 marker (indicates channels follow) + if 0 in numbers: + zero_index = numbers.index(0) + spin_groups.extend(numbers[:zero_index]) + channels = numbers[zero_index + 1 :] + break + + spin_groups.extend(numbers) + + return spin_groups, channels + + @classmethod + def from_lines(cls, lines: List[str]) -> "RadiusCardDefault": + """Parse radius parameters from fixed-width format lines. + + Args: + lines: List of input lines including header + + Returns: + RadiusCardDefault: Parsed card + + Raises: + ValueError: If lines are invalid or required data is missing + """ + if not lines: + raise ValueError("No lines provided") + + # Validate header + if not cls.is_header_line(lines[0]): + raise ValueError(f"Invalid header line: {lines[0]}") + + # Get content lines (skip header and trailing blank) + content_lines = [line for line in lines[1:] if line.strip()] + if not content_lines: + raise ValueError("No parameter lines found") + + # Parse first line for main parameters + main_line = content_lines[0] + + # Ensure line is long enough + if len(main_line) < 24: # Minimum length for main parameters + raise ValueError("Parameter line too short") + + # Parse main parameters + params = { + "effective_radius": safe_parse(main_line[FORMAT_DEFAULT["pareff"]]), + "true_radius": safe_parse(main_line[FORMAT_DEFAULT["partru"]]), + "channel_mode": safe_parse(main_line[FORMAT_DEFAULT["ichan"]], as_int=True) or 0, + } + + # Parse flags + try: + params["vary_effective"] = VaryFlag(int(main_line[FORMAT_DEFAULT["ifleff"]].strip() or "0")) + params["vary_true"] = VaryFlag(int(main_line[FORMAT_DEFAULT["ifltru"]].strip() or "0")) + except ValueError: + raise ValueError("Invalid vary flags") + + # Parse spin groups and channels + spin_groups, channels = cls._parse_spin_groups_and_channels(content_lines) + + if not spin_groups: + raise ValueError("No spin groups found") + + params["spin_groups"] = spin_groups + params["channels"] = channels + + # Create parameters object + try: + parameters = RadiusParameters(**params) + except ValueError as e: + raise ValueError(f"Invalid parameter values: {e}") + + return cls(parameters=parameters) + + def to_lines(self) -> List[str]: + """Convert the card to fixed-width format lines. + + Returns: + List[str]: Lines including header + """ + lines = [CARD_7_HEADER] + + # Format main parameters + main_parts = [ + format_float(self.parameters.effective_radius, width=10), + format_float(self.parameters.true_radius, width=10), + str(self.parameters.channel_mode), + format_vary(self.parameters.vary_effective), + format_vary(self.parameters.vary_true), + ] + + # Add spin groups (up to 28 per line) + spin_groups = self.parameters.spin_groups + spin_group_lines = [] + + current_line = [] + for group in spin_groups: + current_line.append(f"{group:2d}") + if len(current_line) == 28: # Max groups per line + spin_group_lines.append("".join(current_line)) + current_line = [] + + # Add any remaining groups + if current_line: + spin_group_lines.append("".join(current_line)) + + # Combine main parameters with first line of spin groups + if spin_group_lines: + first_line = "".join(main_parts) + if len(spin_group_lines[0]) > 0: + first_line += spin_group_lines[0] + lines.append(first_line) + + # Add remaining spin group lines + lines.extend(spin_group_lines[1:]) + + # Add channels if present + if self.parameters.channels: + channel_line = "0" # IX=0 marker + for channel in self.parameters.channels: + channel_line += f"{channel:2d}" + lines.append(channel_line) + + # Add trailing blank line + lines.append("") + + return lines + + +# Format definitions for fixed-width fields +FORMAT_ALTERNATE = { + "pareff": slice(0, 10), # Radius for potential scattering + "partru": slice(10, 20), # Radius for penetrabilities + "ichan": slice(20, 25), # Channel indicator (5 cols) + "ifleff": slice(25, 30), # Flag for PAREFF (5 cols) + "ifltru": slice(30, 35), # Flag for PARTRU (5 cols) + # Spin groups start at col 35, 5 cols each + # After IX=0 marker, channel numbers use 5 cols each +} + +CARD_7_ALT_HEADER = "RADIUs parameters follow" + + +class RadiusCardAlternate(BaseModel): + """Handler for alternate format radius parameter cards (Card Set 7 alternate). + + This class handles parsing and writing radius parameters in the alternate + fixed-width format used for systems with more than 99 spin groups. + + The format includes: + - Fixed width fields for radii and flags (same positions as default) + - 5-column width for integer values (instead of 2) + - Support for continuation lines with -1 marker + - Optional channel numbers after IX=0 marker when channel_mode=1 + + Note: + This format should be used when the number of spin groups >= 99. + For smaller systems, use RadiusCardDefault. + """ + + parameters: RadiusParameters + + @classmethod + def is_header_line(cls, line: str) -> bool: + """Check if line is a valid header line. + + Args: + line: Input line to check + + Returns: + bool: True if line is a valid header + """ + return line.strip().upper().startswith("RADIU") + + @staticmethod + def _parse_numbers_from_line(line: str, start_pos: int, width: int) -> List[int]: + """Parse fixed-width integer values from a line. + + Args: + line: Input line + start_pos: Starting position + width: Width of each field + + Returns: + List[int]: List of parsed integers, stopping at first invalid value + """ + numbers = [] + pos = start_pos + while pos + width <= len(line): + value = safe_parse(line[pos : pos + width], as_int=True) + if value is None: + break + numbers.append(value) + pos += width + return numbers + + @classmethod + def _parse_spin_groups_and_channels(cls, lines: List[str]) -> Tuple[List[int], Optional[List[int]]]: + """Parse spin groups and optional channels from lines. + + Args: + lines: List of input lines containing spin groups/channels + + Returns: + Tuple containing: + - List[int]: Spin group numbers + - Optional[List[int]]: Channel numbers if present + + Note: + Handles continuation lines (-1 marker) and IX=0 marker for channels + """ + spin_groups = [] + channels = None + + for line in lines: + # Parse numbers 5 columns each starting at position 35 + numbers = cls._parse_numbers_from_line(line, 35, 5) + + if not numbers: + continue + + # Check for continuation marker (-1) + if numbers[-1] == -1: + spin_groups.extend(numbers[:-1]) + continue + + # Check for IX=0 marker (indicates channels follow) + if 0 in numbers: + zero_index = numbers.index(0) + spin_groups.extend(numbers[:zero_index]) + channels = numbers[zero_index + 1 :] + break + + spin_groups.extend(numbers) + + return spin_groups, channels + + @classmethod + def from_lines(cls, lines: List[str]) -> "RadiusCardAlternate": + """Parse radius parameters from fixed-width format lines. + + Args: + lines: List of input lines including header + + Returns: + RadiusCardAlternate: Parsed card + + Raises: + ValueError: If lines are invalid or required data is missing + """ + if not lines: + raise ValueError("No lines provided") + + # Validate header + if not cls.is_header_line(lines[0]): + raise ValueError(f"Invalid header line: {lines[0]}") + + # Get content lines (skip header and trailing blank) + content_lines = [line for line in lines[1:] if line.strip()] + if not content_lines: + raise ValueError("No parameter lines found") + + # Parse first line for main parameters + main_line = content_lines[0] + + # Ensure line is long enough + if len(main_line) < 35: # Minimum length for main parameters + raise ValueError("Parameter line too short") + + # Parse main parameters + params = { + "effective_radius": safe_parse(main_line[FORMAT_ALTERNATE["pareff"]]), + "true_radius": safe_parse(main_line[FORMAT_ALTERNATE["partru"]]), + "channel_mode": safe_parse(main_line[FORMAT_ALTERNATE["ichan"]], as_int=True) or 0, + } + + # Parse flags (5-column format) + try: + params["vary_effective"] = VaryFlag(int(main_line[FORMAT_ALTERNATE["ifleff"]].strip() or "0")) + params["vary_true"] = VaryFlag(int(main_line[FORMAT_ALTERNATE["ifltru"]].strip() or "0")) + except ValueError: + raise ValueError("Invalid vary flags") + + # Parse spin groups and channels + spin_groups, channels = cls._parse_spin_groups_and_channels(content_lines) + + if not spin_groups: + raise ValueError("No spin groups found") + + params["spin_groups"] = spin_groups + params["channels"] = channels + + # Create parameters object + try: + parameters = RadiusParameters(**params) + except ValueError as e: + raise ValueError(f"Invalid parameter values: {e}") + + return cls(parameters=parameters) + + def to_lines(self) -> List[str]: + """Convert the card to fixed-width format lines. + + Returns: + List[str]: Lines including header + """ + lines = [CARD_7_ALT_HEADER] + + # Format main parameters + main_parts = [ + format_float(self.parameters.effective_radius, width=10), + format_float(self.parameters.true_radius, width=10), + f"{self.parameters.channel_mode:>5}", # 5-column format + f"{self.parameters.vary_effective.value:>5}", # 5-column format + f"{self.parameters.vary_true.value:>5}", # 5-column format + ] + + # Add spin groups (up to 9 per line due to 5-column width) + spin_groups = self.parameters.spin_groups + spin_group_lines = [] + + current_line = [] + for group in spin_groups: + current_line.append(f"{group:>5}") # Right-align in 5 columns + if len(current_line) == 9: # Max groups per line + spin_group_lines.append("".join(current_line)) + current_line = [] + + # Add any remaining groups + if current_line: + spin_group_lines.append("".join(current_line)) + + # Combine main parameters with first line of spin groups + if spin_group_lines: + first_line = "".join(main_parts) + if len(spin_group_lines[0]) > 0: + first_line += spin_group_lines[0] + lines.append(first_line) + + # Add remaining spin group lines + lines.extend(spin_group_lines[1:]) + + # Add channels if present (using 5-column format) + if self.parameters.channels: + channel_line = f"{0:>5}" # IX=0 marker + for channel in self.parameters.channels: + channel_line += f"{channel:>5}" + lines.append(channel_line) + + # Add trailing blank line + lines.append("") + + return lines + + +CARD_7A_HEADER = "RADII are in KEY-WORD format" + + +class RadiusCardKeyword(BaseModel): + """Handler for keyword-based radius parameter cards (Card Set 7a). + + This class handles parsing and writing radius parameters in the keyword format. + The format offers a more readable alternative to fixed-width formats while + maintaining compatibility with RadiusParameters. + + Attributes: + parameters: The core radius parameters + particle_pair: Optional particle pair specification + orbital_momentum: Optional orbital angular momentum values + relative_uncertainty: Optional relative uncertainty for radii + absolute_uncertainty: Optional absolute uncertainty for radii + """ + + parameters: RadiusParameters + particle_pair: Optional[str] = None + orbital_momentum: Optional[List[Union[int, str]]] = None + relative_uncertainty: Optional[float] = None + absolute_uncertainty: Optional[float] = None + + @classmethod + def is_header_line(cls, line: str) -> bool: + """Check if line is a valid header line.""" + return "RADII" in line.upper() and "KEY-WORD" in line.upper() + + @staticmethod + def _parse_values(value_str: str) -> List[str]: + """Parse space/comma separated values.""" + return [v for v in re.split(r"[,\s]+", value_str.strip()) if v] + + @classmethod + def from_lines(cls, lines: List[str]) -> "RadiusCardKeyword": + """Parse radius parameters from keyword format lines. + + Args: + lines: List of input lines including header + + Returns: + RadiusCardKeyword: Parsed card + + Raises: + ValueError: If lines are invalid or required data is missing + """ + if not lines: + raise ValueError("No lines provided") + + # Validate header + if not cls.is_header_line(lines[0]): + raise ValueError(f"Invalid header line: {lines[0]}") + + # Parse parameters for RadiusParameters + params = { + "effective_radius": None, + "true_radius": None, + "channel_mode": 0, + "vary_effective": VaryFlag.NO, + "vary_true": VaryFlag.NO, + "spin_groups": [], + "channels": None, + } + + # Parse keyword format extras + extras = {"particle_pair": None, "orbital_momentum": None, "relative_uncertainty": None, "absolute_uncertainty": None} + + # Combine all non-empty lines into single string for parsing + text = "\n".join(line for line in lines[1:] if line.strip()) + + # Use the new parser + data = parse_keyword_pairs_to_dict(text) + + for key, value in data.items(): + key = key.lower() + + if key == "radius": + if isinstance(value, list): + params["effective_radius"] = value[0] + params["true_radius"] = value[1] + else: + params["effective_radius"] = value + params["true_radius"] = value + + elif key == "flags": + if isinstance(value, list): + params["vary_effective"] = VaryFlag(value[0]) + params["vary_true"] = VaryFlag(value[1]) + else: + params["vary_effective"] = VaryFlag(value) + params["vary_true"] = VaryFlag(value) + + elif key in ["pp", "particle-pair"]: + extras["particle_pair"] = value + + elif key in ["l", "orbital"]: + if isinstance(value, list): + extras["orbital_momentum"] = [str(v).lower() if isinstance(v, str) else v for v in value] + else: + extras["orbital_momentum"] = [str(value).lower()] + + elif key == "relative": + extras["relative_uncertainty"] = value[0] if isinstance(value, list) else value + + elif key == "absolute": + extras["absolute_uncertainty"] = value[0] if isinstance(value, list) else value + + elif key == "channels": + params["channels"] = [int(x) for x in value] + params["channel_mode"] = 1 + + elif key == "group": + if isinstance(value, list): + params["spin_groups"] = [int(x) for x in value] + elif isinstance(value, int): + params["spin_groups"] = [value] + else: + raise ValueError("Invalid group value") + + # Validate required parameters + if not params["spin_groups"] and not (extras["particle_pair"] and extras["orbital_momentum"]): + raise ValueError("Must specify either spin groups or both particle pair (PP) and orbital momentum (L)") + + # Create RadiusParameters instance + try: + parameters = RadiusParameters(**params) + except ValueError as e: + raise ValueError(f"Invalid parameter values: {e}") + + return cls(parameters=parameters, **extras) + + def to_lines(self) -> List[str]: + """Convert the card to keyword format lines. + + Returns: + List[str]: Lines in keyword format + """ + lines = [CARD_7A_HEADER] + + # Add radius values + if self.parameters.true_radius == self.parameters.effective_radius: + lines.append(f"Radius= {self.parameters.effective_radius}") + else: + lines.append(f"Radius= {self.parameters.effective_radius} {self.parameters.true_radius}") + + # Add flags + if self.parameters.vary_true == self.parameters.vary_effective: + lines.append(f"Flags= {self.parameters.vary_effective.value}") + else: + lines.append(f"Flags= {self.parameters.vary_effective.value} {self.parameters.vary_true.value}") + + # Add uncertainties if present + if self.relative_uncertainty is not None: + lines.append(f"Relative= {self.relative_uncertainty}") + if self.absolute_uncertainty is not None: + lines.append(f"Absolute= {self.absolute_uncertainty}") + + # Add particle pair and orbital momentum if present + if self.particle_pair: + lines.append(f"PP= {self.particle_pair}") + if self.orbital_momentum: + lines.append(f"L= {' '.join(str(x) for x in self.orbital_momentum)}") + + # Add group and channel specifications + if self.parameters.channel_mode == 1 and self.parameters.channels: + for group in self.parameters.spin_groups: + lines.append(f"Group= {group} Channels= {' '.join(str(x) for x in self.parameters.channels)}") + else: + lines.append(f"Group= {' '.join(str(x) for x in self.parameters.spin_groups)}") + + lines.append("") # Trailing blank line + return lines + + +class RadiusFormat(Enum): + """Supported formats for radius parameter cards.""" + + DEFAULT = "default" # Fixed width (<99 spin groups) + ALTERNATE = "alternate" # Fixed width (>=99 spin groups) + KEYWORD = "keyword" # Keyword based + + +class RadiusCard(BaseModel): + """Main handler for SAMMY radius parameter cards. + + This class provides a simple interface for working with radius parameters + regardless of format. Users can create parameters directly or read from + template files, then write in any supported format. + + Example: + # Create new parameters + card = RadiusCard( + effective_radius=3.2, + true_radius=3.2, + spin_groups=[1, 2, 3] + ) + + # Write in desired format + lines = card.to_lines(format=RadiusFormat.KEYWORD) + + # Or read from template and modify + card = RadiusCard.from_lines(template_lines) + card.parameters.effective_radius = 3.5 + lines = card.to_lines(format=RadiusFormat.DEFAULT) + """ + + parameters: RadiusParameters + # Optional keyword format extras + particle_pair: Optional[str] = None + orbital_momentum: Optional[List[Union[int, str]]] = None + relative_uncertainty: Optional[float] = None + absolute_uncertainty: Optional[float] = None + + @classmethod + def detect_format(cls, lines: List[str]) -> RadiusFormat: + """Detect format from input lines.""" + if not lines: + raise ValueError("No lines provided") + + header = lines[0].strip().upper() + if "KEY-WORD" in header: + return RadiusFormat.KEYWORD + elif "RADIU" in header: + # Check format by examining spin group columns + content_line = next((l for l in lines[1:] if l.strip()), "") # noqa: E741 + if len(content_line) >= 35 and content_line[25:30].strip(): # 5-col format + return RadiusFormat.ALTERNATE + return RadiusFormat.DEFAULT + + raise ValueError("Invalid header format") + + @classmethod + def from_lines(cls, lines: List[str]) -> "RadiusCard": + """Parse radius card from lines in any format.""" + format_type = cls.detect_format(lines) + + if format_type == RadiusFormat.KEYWORD: + keyword_card = RadiusCardKeyword.from_lines(lines) + return cls( + parameters=keyword_card.parameters, + particle_pair=keyword_card.particle_pair, + orbital_momentum=keyword_card.orbital_momentum, + relative_uncertainty=keyword_card.relative_uncertainty, + absolute_uncertainty=keyword_card.absolute_uncertainty, + ) + elif format_type == RadiusFormat.ALTERNATE: + return cls(parameters=RadiusCardAlternate.from_lines(lines).parameters) + else: + return cls(parameters=RadiusCardDefault.from_lines(lines).parameters) + + def to_lines(self, radius_format: RadiusFormat = RadiusFormat.DEFAULT) -> List[str]: + """Write radius card in specified format.""" + if radius_format == RadiusFormat.KEYWORD: + return RadiusCardKeyword( + parameters=self.parameters, + particle_pair=self.particle_pair, + orbital_momentum=self.orbital_momentum, + relative_uncertainty=self.relative_uncertainty, + absolute_uncertainty=self.absolute_uncertainty, + ).to_lines() + elif radius_format == RadiusFormat.ALTERNATE: + return RadiusCardAlternate(parameters=self.parameters).to_lines() + else: + return RadiusCardDefault(parameters=self.parameters).to_lines() + + @classmethod + def from_values( + cls, + effective_radius: float, + true_radius: Optional[float] = None, + spin_groups: List[int] = None, + channels: Optional[List[int]] = None, + particle_pair: Optional[str] = None, + orbital_momentum: Optional[List[Union[int, str]]] = None, + relative_uncertainty: Optional[float] = None, + absolute_uncertainty: Optional[float] = None, + **kwargs, + ) -> "RadiusCard": + """Create a new radius card from parameter values. + + Args: + effective_radius: Radius for potential scattering + true_radius: Radius for penetrabilities and shifts (defaults to effective_radius) + spin_groups: List of spin group numbers + channels: Optional list of channel numbers + particle_pair: Optional particle pair specification + orbital_momentum: Optional orbital angular momentum values + relative_uncertainty: Optional relative uncertainty for radii + absolute_uncertainty: Optional absolute uncertainty for radii + **kwargs: Additional parameters to pass to RadiusParameters + + Returns: + RadiusCard: Created card instance + """ + # Separate parameters and extras + params = { + "effective_radius": effective_radius, + "true_radius": true_radius or effective_radius, + "spin_groups": spin_groups or [], + "channel_mode": 1 if channels else 0, + "channels": channels, + } + params.update(kwargs) # Only parameter-specific kwargs + + # Create card with both parameters and extras + return cls( + parameters=RadiusParameters(**params), + particle_pair=particle_pair, + orbital_momentum=orbital_momentum, + relative_uncertainty=relative_uncertainty, + absolute_uncertainty=absolute_uncertainty, + ) + + +if __name__ == "__main__": + # Example usage + card = RadiusCard.from_values(effective_radius=3.2, true_radius=3.2, spin_groups=[1, 2, 3]) + lines = card.to_lines(radius_format=RadiusFormat.KEYWORD) + print("\n".join(lines)) + print("Format:", RadiusCard.detect_format(lines)) + print("Parsed card:", RadiusCard.from_lines(lines)) diff --git a/src/pleiades/sammy/parameters/resonance.py b/src/pleiades/sammy/parameters/resonance.py new file mode 100644 index 0000000..fc10cad --- /dev/null +++ b/src/pleiades/sammy/parameters/resonance.py @@ -0,0 +1,174 @@ +#!/usr/bin/env python +"""Data class for card 01::resonance.""" + +import logging +from typing import Optional + +from pydantic import BaseModel, Field + +from pleiades.sammy.parameters.helper import VaryFlag, safe_parse + +# setup logging +logger = logging.getLogger(__name__) + + +# Define format constants +RESONANCE_FORMAT = { + "resonance_energy": slice(0, 11), + "capture_width": slice(11, 22), + "channel1_width": slice(22, 33), + "channel2_width": slice(33, 44), + "channel3_width": slice(44, 55), + "vary_energy": slice(55, 57), + "vary_capture_width": slice(57, 59), + "vary_channel1": slice(59, 61), + "vary_channel2": slice(61, 63), + "vary_channel3": slice(63, 65), + "igroup": slice(65, 67), + "x_value": slice(67, 80), # Added to detect special cases +} + + +class UnsupportedFormatError(ValueError): + """Error raised when encountering unsupported format features.""" + + pass + + +class ResonanceEntry(BaseModel): + """Single resonance entry for SAMMY parameter file (strict format)""" + + resonance_energy: float = Field(description="Resonance energy Eλ (eV)") + capture_width: float = Field(description="Capture width Γγ (milli-eV)") + channel1_width: Optional[float] = Field(None, description="Particle width for channel 1 (milli-eV)") + channel2_width: Optional[float] = Field(None, description="Particle width for channel 2 (milli-eV)") + channel3_width: Optional[float] = Field(None, description="Particle width for channel 3 (milli-eV)") + + vary_energy: VaryFlag = Field(default=VaryFlag.NO) + vary_capture_width: VaryFlag = Field(default=VaryFlag.NO) + vary_channel1: VaryFlag = Field(default=VaryFlag.NO) + vary_channel2: VaryFlag = Field(default=VaryFlag.NO) + vary_channel3: VaryFlag = Field(default=VaryFlag.NO) + + igroup: int = Field(description="Quantum numbers group number") + + @classmethod + def from_str(cls, line: str) -> "ResonanceEntry": + """Parse a resonance entry from a fixed-width format line""" + if not line.strip(): + raise ValueError("Empty line provided") + + # Make sure line is at least 80 characters + line = f"{line:<80}" + + # Check for special cases we don't support + x_value = line[RESONANCE_FORMAT["x_value"]].strip() + + if x_value: + try: + x_float = float(x_value) + if x_float < 0: + raise UnsupportedFormatError( + "SORRY! While SAMMY allows multi-line resonance entries (indicated by negative " + "X value in columns 68-80), this implementation does not support this feature yet." + ) + except UnsupportedFormatError: + raise # Reraise the error + except ValueError as e: + logger.error(f"Failed to parse X value: {e}") + pass + + params = {} + + # Parse each field according to format (excluding x_value) + for field, slice_obj in RESONANCE_FORMAT.items(): + if field == "x_value": # Skip X value in parsing + continue + + value = line[slice_obj].strip() + + if value: # Only process non-empty fields + if field.startswith("vary_"): + try: + params[field] = VaryFlag(int(value)) + except (ValueError, TypeError): + params[field] = VaryFlag.NO + elif field == "igroup": + params[field] = safe_parse(value, as_int=True) or 1 + else: + parsed_value = safe_parse(value) + if parsed_value is not None: + params[field] = parsed_value + + return cls(**params) + + def to_str(self) -> str: + """Convert the resonance entry to fixed-width format string""" + line = " " * 80 + + def format_float(value: Optional[float]) -> str: + if value is None: + return " " * 11 + return f"{value:11.4E}" + + def format_vary(value: VaryFlag) -> str: + return f"{value.value:2d}" + + updates = { + "resonance_energy": format_float(self.resonance_energy), + "capture_width": format_float(self.capture_width), + "channel1_width": format_float(self.channel1_width), + "channel2_width": format_float(self.channel2_width), + "channel3_width": format_float(self.channel3_width), + "vary_energy": format_vary(self.vary_energy), + "vary_capture_width": format_vary(self.vary_capture_width), + "vary_channel1": format_vary(self.vary_channel1), + "vary_channel2": format_vary(self.vary_channel2), + "vary_channel3": format_vary(self.vary_channel3), + "igroup": f"{self.igroup:2d}", + } + + for field, formatted_value in updates.items(): + slice_obj = RESONANCE_FORMAT[field] + line = f"{line[:slice_obj.start]}{formatted_value}{line[slice_obj.stop:]}" + + return line.rstrip() + + +if __name__ == "__main__": + # Enable logging for debugging + logging.basicConfig(level=logging.DEBUG) + # Test with regular cases + good_examples = [ + "-3.6616E+06 1.5877E+05 3.6985E+09 0 0 1 1", + "-8.7373E+05 1.0253E+03 1.0151E+02 0 0 1 1", + ] + + logging.debug("**Testing valid formats**") + for i, line in enumerate(good_examples): + entry = ResonanceEntry.from_str(line) + logging.debug(f"Example {i+1}:") + logging.debug(f"Original: {line}") + logging.debug(f"Parsed: {entry}") + logging.debug(f"Reformatted: {entry.to_str()}") + + # Test with special case (should raise error) + logging.debug("**Testing unsupported format**") + try: + # Make sure the negative value is properly aligned in columns 68-80 + bad_line = "-3.6616E+06 1.5877E+05 3.6985E+09 0 0 1 1 -1.234" + logging.debug(f"Testing line: '{bad_line}'") + logging.debug(f"Length before padding: {len(bad_line)}") + ResonanceEntry.from_str(bad_line) + except UnsupportedFormatError as e: + logging.debug("Caught expected error for unsupported format:") + logging.debug(str(e)) + + # Let's also try with a malformed line to make sure our padding doesn't hide issues + logging.debug("**Testing malformed format**") + try: + malformed_line = "-3.6616E+06 1.5877E+05 3.6985E+09 -1.234" # Clearly wrong format + ResonanceEntry.from_str(malformed_line) + logging.debug("No error raised for malformed format!") + except ValueError as e: + logging.debug("Caught expected error for malformed line:", str(e)) diff --git a/src/pleiades/sammy/parameters/unused_var.py b/src/pleiades/sammy/parameters/unused_var.py new file mode 100644 index 0000000..a02fb7f --- /dev/null +++ b/src/pleiades/sammy/parameters/unused_var.py @@ -0,0 +1,239 @@ +#!/usr/bin/env python +"""Data class for card 05::unused but correlated variables.""" + +import logging +from typing import List + +from pydantic import BaseModel, Field, model_validator + +from pleiades.sammy.parameters.helper import safe_parse + +# Format definitions for fixed-width fields +# Name line has 8 possible 5-character fields separated by 5 spaces +FORMAT_NAMES = {f"name{i}": slice(i * 10, i * 10 + 5) for i in range(8)} + +# Value line has 8 possible 10-character fields +FORMAT_VALUES = {f"value{i}": slice(i * 10, (i + 1) * 10) for i in range(8)} + +CARD_5_HEADER = "UNUSEd but correlated variables come next" + + +class UnusedVariable(BaseModel): + """Container for a single unused but correlated variable. + + Contains: + - name: 5-character name of the variable + - value: Numerical value of the variable + """ + + name: str = Field(description="Name of the unused variable (5 chars)") + value: float = Field(description="Value of the unused variable") + + @model_validator(mode="after") + def validate_name_length(self) -> "UnusedVariable": + """Validate that name is exactly 5 characters.""" + if len(self.name) != 5: + self.name = f"{self.name:<5}" # Pad with spaces if needed + return self + + +class UnusedCorrelatedParameters(BaseModel): + """Container for a set of unused but correlated variables. + + Contains: + - variables: List of UnusedVariable objects + """ + + variables: List[UnusedVariable] = Field(default_factory=list) + + @classmethod + def from_lines(cls, lines: List[str]) -> "UnusedCorrelatedParameters": + """Parse unused correlated parameters from pairs of name/value lines. + + Args: + lines: List of input lines (excluding header) + + Returns: + UnusedCorrelatedParameters: Parsed parameters + + Raises: + ValueError: If lines are invalid or required data is missing + """ + if not lines or len(lines) < 2: + raise ValueError("At least one pair of name/value lines required") + + variables = [] + + # Process pairs of lines (names followed by values) + for i in range(0, len(lines), 2): + if i + 1 >= len(lines): + break + + name_line = f"{lines[i]:<80}" # Pad to full width + value_line = f"{lines[i+1]:<80}" + + # Extract all non-empty names and corresponding values + for j in range(8): + name = name_line[FORMAT_NAMES[f"name{j}"]].strip() + if name: + value_str = value_line[FORMAT_VALUES[f"value{j}"]].strip() + value = safe_parse(value_str) + if value is not None: + variables.append(UnusedVariable(name=name, value=value)) + + return cls(variables=variables) + + def to_lines(self) -> List[str]: + """Convert the parameters to a list of fixed-width format lines. + + Returns: + List[str]: Lines representing the parameters + """ + lines = [] + + # Process variables in groups of 8 + for i in range(0, len(self.variables), 8): + group = self.variables[i : i + 8] + + # Format name line + names = [""] * 8 + for j, var in enumerate(group): + names[j] = f"{var.name:<5}" + name_line = " ".join(names).rstrip() + lines.append(name_line) + + # Format value line + values = [" "] * 8 # 10 spaces each + for j, var in enumerate(group): + values[j] = f"{var.value:10.4E}" + value_line = "".join(values[: len(group)]) + lines.append(value_line) + + return lines + + +class UnusedCorrelatedCard(BaseModel): + """Container for a complete unused correlated variable card set (Card Set 5). + + This class handles a complete card set, including: + - Header line + - Parameter entries + - Trailing blank line + """ + + parameters: UnusedCorrelatedParameters + + @classmethod + def is_header_line(cls, line: str) -> bool: + """Check if line is a valid header line. + + Args: + line: Input line to check + + Returns: + bool: True if line is a valid header + """ + return line.strip().upper().startswith("UNUSE") + + @classmethod + def from_lines(cls, lines: List[str]) -> "UnusedCorrelatedCard": + """Parse a complete card set from lines. + + Args: + lines: List of input lines including header + + Returns: + UnusedCorrelatedCard: Parsed card set + + Raises: + ValueError: If no valid header found or invalid format + """ + if not lines: + raise ValueError("No lines provided") + + # Validate header + if not cls.is_header_line(lines[0]): + raise ValueError(f"Invalid header line: {lines[0]}") + + # Parse parameters (skip header and trailing blank lines) + content_lines = [line for line in lines[1:] if line.strip()] + if not content_lines: + raise ValueError("No parameter lines found") + + parameters = UnusedCorrelatedParameters.from_lines(content_lines) + return cls(parameters=parameters) + + def to_lines(self) -> List[str]: + """Convert the card set to a list of lines. + + Returns: + List[str]: Lines including header and parameters + """ + lines = [CARD_5_HEADER] + lines.extend(self.parameters.to_lines()) + lines.append("") # Trailing blank line + return lines + + +if __name__ == "__main__": + # Enable logging for debugging + logging.basicConfig(level=logging.DEBUG) + + # Test example with two groups of variables + logging.debug("**Testing variable parsing**") + test_lines = [ + (" " * 5).join([f"NVAR{i}" for i in range(1, 4)]), + "1.2304E+002.9800E+021.5000E-01", + (" " * 5).join([f"NVAR{i}" for i in range(4, 6)]), + "2.5000E-021.0000E+00", + ] + + try: + params = UnusedCorrelatedParameters.from_lines(test_lines) + logging.debug("Successfully parsed parameters:") + for var in params.variables: + logging.debug(f"{var.name}: {var.value}") + logging.debug("\nOutput lines:") + for line in params.to_lines(): + logging.debug(f"'{line}'") + logging.debug("") + except ValueError as e: + logging.error(f"Failed to parse parameters: {e}") + + # Test complete card set + logging.debug("**Testing complete card set**") + card_lines = [ + "UNUSEd but correlated variables come next", + (" " * 5).join([f"NVAR{i}" for i in range(1, 4)]), + "1.2340E+002.9800E+021.5000E-01 ", + (" " * 5).join([f"NVAR{i}" for i in range(4, 6)]), + "2.5000E-021.0000E+00", + "", + ] + + try: + card = UnusedCorrelatedCard.from_lines(card_lines) + logging.debug("Successfully parsed complete card set") + logging.debug("Output lines:") + for line in card.to_lines(): + logging.debug(f"'{line}'") + except ValueError as e: + logging.error(f"Failed to parse complete card set: {e}") + + # Test error handling + logging.debug("\n**Testing Error Handling**") + + # Test invalid header + try: + bad_lines = ["WRONG header line", "NVAR1", "1.2340E+00", ""] + logging.debug("Testing invalid header:") + UnusedCorrelatedCard.from_lines(bad_lines) + except ValueError as e: + logging.debug(f"Caught expected error for invalid header: {e}") + + # Test mismatched name/value lines + try: + bad_lines = ["NVAR1 NVAR2", "1.2340E+00"] # Missing value + UnusedCorrelatedParameters.from_lines(bad_lines) + except ValueError as e: + logging.debug(f"Caught expected error for mismatched lines: {e}") diff --git a/src/pleiades/sammy/parfile.py b/src/pleiades/sammy/parfile.py new file mode 100644 index 0000000..369ba2e --- /dev/null +++ b/src/pleiades/sammy/parfile.py @@ -0,0 +1,41 @@ +#!/usr/bin/env python +"""Top level parameter file handler for SAMMY.""" + +from typing import Optional + +from pydantic import BaseModel, Field + +from pleiades.sammy.parameters import ( + BroadeningParameterCard, + ExternalREntry, + NormalizationBackgroundCard, + ResonanceEntry, + UnusedCorrelatedCard, +) + + +class SammyParameterFile(BaseModel): + """Top level parameter file for SAMMY.""" + + resonance: ResonanceEntry = Field(description="Resonance parameters") + fudge: float = Field(0.1, description="Fudge factor", ge=0.0, le=1.0) + # Add additional optional cards + external_r: Optional[ExternalREntry] = Field(None, description="External R matrix") + broadening: Optional[BroadeningParameterCard] = Field(None, description="Broadening parameters") + unused_correlated: Optional[UnusedCorrelatedCard] = Field(None, description="Unused but correlated variables") + normalization: Optional[NormalizationBackgroundCard] = Field(None, description="Normalization and background parameters") + + @classmethod + def from_file(cls, file_path): + """Load a SAMMY parameter file from disk.""" + with open(file_path, "r") as f: + lines = f.readlines() + + # Parse resonance card + resonance = ResonanceEntry.from_str(lines[0]) + + return cls(resonance=resonance) + + +if __name__ == "__main__": + print("TODO: usage example for SAMMY parameter file handling") diff --git a/src/pleiades/utils/__init__.py b/src/pleiades/utils/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/data/config/sammy_runner.yaml b/tests/data/config/sammy_runner.yaml new file mode 100644 index 0000000..55b73e2 --- /dev/null +++ b/tests/data/config/sammy_runner.yaml @@ -0,0 +1,18 @@ +backend: docker +working_dir: {working_dir} +output_dir: {output_dir} + +local: + sammy_executable: sammy + shell_path: /bin/bash + +docker: + image_name: kedokudo/sammy-docker + container_working_dir: /sammy/work + container_data_dir: /sammy/data + +nova: + url: ${NOVA_URL} + api_key: ${NOVA_API_KEY} + tool_id: neutrons_imaging_sammy + timeout: 3600 diff --git a/tests/data/ex012/README.FIRST b/tests/data/ex012/README.FIRST new file mode 100755 index 0000000..83fb709 --- /dev/null +++ b/tests/data/ex012/README.FIRST @@ -0,0 +1,64 @@ +########################################################################## +### PURPOSE of Exercise EX012: Learn to treat multiple nuclides in a sample + + +### DESCRIPTION: + + In a real experiment, the sample usually contains more than one + nuclide. There may be several isotopes of the same element, the + sample may be an oxide or other chemical compound, or there may be + contaminants. + + The treatment for all of these is the same: Include spin groups and + resonance parameters for any and all nuclides. Assign the + appropriate abundances for each nuclide; search for the correct + values of the abundances if needed. + + +### INSTRUCTIONS: + +(1) File ex012a.dat is "real data" for transmission through natural + silicon, taken on the 200-meter flight path at ORELA. In the INPut + file (ex012a.inp), spin groups 1 through 7 correspond to Si28, 8-17 to + Si29, and 18-22 to Si30. Spin groups 23-29, which correspond to + Oxygen-16, are defined, but do not enter into this calculation (the + "X" in column 5 for those spin groups means that these are to be + eXcluded); oxygen is included in the INPut and PARameter files because + the complete analysis used data on Si29- and Si30-oxide samples. + (Those data are not included in this exercise.) + + Note that the resonances in the parameter file ex012a.par are grouped + by nuclide, not by energy. This is the analyst's choice -- SAMMY has + no requirements regarding the ordering of the resonances in the PAR + file. + + Two Card Sets at the end of the PAR file give more information about + the spin groups and/or nuclides. The "radius" Card Set defines the + radii for the odd and even el-values of Si28, for Si29, for Si30, and + for Oxygen. The "isotopic masses and abundances" Card Set provides + masses (in amu) and abundances (relative by weight) for the four + nuclides. Some of this information is also given in the INP file; + however, the PAR file values take precedent. In other words, values + given in the PAR file are the ones which will be used. (This is + almost always true; there are, however, some cases in which a flag of + "-2" tells SAMMY to use the value from the INPut file.) + + SAMMY does require consistency between the two Card Sets, in the sense + that spin groups which have the same radius must also belong to the + same nuclide. E.g., spin groups 1 and 4 both belong to Si28. Spin + groups 18 and 23, which belong to Si30 and Oxygen, respectively, must + have separate radii defined even though the two have the same value + (4.2 Fermi). + + Run this case; see answers/ex012a* for results. Note that the initial + values of the abundance for Si28 was wrong, but the SAMMY run provided + a more reasonable result. + +(2) An easy way to study the contribution from just one isotope (or + nuclide or spin group) is to "X" the other spin groups. Play around + with this -- what is the contribution due only to Si28, for example? + How about s-waves only? + + See answers/ex012b* for Si28 p waves. + +########################################################################## diff --git a/tests/data/ex012/answers/aa b/tests/data/ex012/answers/aa new file mode 100755 index 0000000..3204721 --- /dev/null +++ b/tests/data/ex012/answers/aa @@ -0,0 +1,7 @@ +par ex012aa.par +odf ex012aa.odf +ops 1 1 1 1 1 1 +x +1 dtb 800.,1100. + +q diff --git a/tests/data/ex012/answers/ab b/tests/data/ex012/answers/ab new file mode 100755 index 0000000..664a7e0 --- /dev/null +++ b/tests/data/ex012/answers/ab @@ -0,0 +1,8 @@ +par ex012a.par +odf ex012bb.odf +ops 1 1 1 1 1 1 +avg 6 +x +1 dt 300.,1800. + +q diff --git a/tests/data/ex012/answers/ex012aa.lpt b/tests/data/ex012/answers/ex012aa.lpt new file mode 100755 index 0000000..4ac08be --- /dev/null +++ b/tests/data/ex012/answers/ex012aa.lpt @@ -0,0 +1,653 @@ + + ********************************************************** + *** *** + *** SAMMY Version 8.0.0 *** + *** *** + ********************************************************** + + Name of input file: + >>> ex012a.inp <<< + Name of parameter file: + >>> ex012a.par <<< + Values used for constants -- Kvendf=1 + mass of neutron = 1.008664915600000 in amu + sqrt(m/2) = 72.298252179105063 + sqrt(2m)/hbar = 0.000219680775849 + Boltzman = 0.000086173430000 + finestructure = 0.034447599938334 in 1/(amu*F) + GENERATE ODF FILE AUtomatically + Name of experimental data file is: + >>> ex012a.dat <<< + Emin and Emax = 300000. 1.800000E+06 + + + ***************************************************************************** + ***** ***** + ***** example ex012: multiple nuclides (Natural Si -- 200 m flight pat ***** + ***** h) ***** + ***************************************************************************** + + + Input quantities from line number 2 are: + Alfnm1, Alfnm2 = ##Si ## Atomic Weight = 27.976928 + Nepnts Itmax Icorr Nxtra Iptdop Iptwid Ixxchn + 0 0 0 0 0 0 0 + Ndigit Idropp Matnum Kkkkza + 2 2 0 0 +Adjusted Itmax Icorr Nxtra Iptdop Iptwid Ixxchn + 0 0 50 0 9 5 0 + Ndigit Idropp Matnum Kkkkza + 2 2 0 0 + + + TARGET ELEMENT IS Si + ATOMIC WEIGHT IS 27.976928 + + + *********** Alphanumeric Control Information ********* + + CSISRS + CHI SQUARED IS WANTED + DO NOT SUPPRESS ANY intermediate results + ODF FILE IS WANTED--SAMMY.ODF ,ZERO-TH O + PRINT BAYES CHI SQUARED + SOLVE BAYES EQUATIONS + PRINT VARIED INPUT PARAMETERS + + **** end of Alphanumeric Control Information ********* + + + ### Estimated array size for SAMMY-INP is 5799 ### + + Effective Temperature= 300.00000 + Flight Path= 200.00000 Meters +/- 0.18223/2 Meters + Deltae= 0.00000 Deltag= 0.00252 + Delttt= 0.00000 Elowbr= 0.00000000 + + Target Thickness= 0.3472 + + **** Data type is <<< TRANSMISSION >>> **** + + Spin of incident particle is 0.5 + #of #of + Group Ent Exit Jspin Relative Ispin g Chn Lpnt Ishift eL Chspn + # Chn Chn Abndnc # + 1 1 1 0.5 0.9223 0.0 1.0000 + 1 1 0 0 0.5 + 2 1 0 2 1.5 + 2 1 1 -0.5 0.9223 0.0 1.0000 + 1 1 0 1 0.5 + 2 1 0 1 0.5 + 3 1 1 -1.5 0.9223 0.0 2.0000 + 1 1 0 1 0.5 + 2 1 0 1 0.5 + 4 1 2 1.5 0.9223 0.0 2.0000 + 1 1 0 2 0.5 + 2 1 0 2 0.5 + 3 1 0 0 1.5 + 5 1 2 2.5 0.9223 0.0 3.0000 + 1 1 0 2 0.5 + 2 1 0 2 0.5 + 3 1 0 0 2.5 + 6 1 2 -2.5 0.9223 0.0 3.0000 + 1 1 0 3 0.5 + 2 1 0 3 0.5 + 3 1 0 1 2.5 + 7 1 2 -3.5 0.9223 0.0 4.0000 + 1 1 0 3 0.5 + 2 1 0 3 0.5 + 3 1 0 1 2.5 + 8 1 0 0.0 0.0467 0.5 0.2500 + 1 1 0 0 0.0 + 9 1 0 1.0 0.0467 0.5 0.7500 + 1 1 0 0 1.0 + 10 1 0 -1.0 0.0467 0.5 0.7500 + 1 1 0 1 0.0 + 11 1 0 0.0 0.0467 0.5 0.2500 + 1 1 0 1 1.0 + 12 1 0 -1.0 0.0467 0.5 0.7500 + 1 1 0 1 1.0 + 13 1 0 -2.0 0.0467 0.5 1.2500 + 1 1 0 1 1.0 + 14 1 0 2.0 0.0467 0.5 1.2500 + 1 1 0 2 0.0 + 15 1 0 1.0 0.0467 0.5 0.7500 + 1 1 0 2 1.0 + 16 1 0 2.0 0.0467 0.5 1.2500 + 1 1 0 2 1.0 + 17 1 0 3.0 0.0467 0.5 1.7500 + 1 1 0 2 1.0 + 18 1 0 0.5 0.0310 0.0 1.0000 + 1 1 0 0 0.5 + 19 1 0 -0.5 0.0310 0.0 1.0000 + 1 1 0 1 0.5 + 20 1 0 -1.5 0.0310 0.0 2.0000 + 1 1 0 1 0.5 + 21 1 0 1.5 0.0310 0.0 2.0000 + 1 1 0 2 0.5 + 22 1 0 2.5 0.0310 0.0 3.0000 + 1 1 0 2 0.5 + 23 1 0 0.5 2.0000 0.0 1.0000 ** Excluded Spin Group ** + 1 1 0 0 0.5 + 24 1 0 -0.5 2.0000 0.0 1.0000 ** Excluded Spin Group ** + 1 1 0 1 0.5 + 25 1 0 -1.5 2.0000 0.0 2.0000 ** Excluded Spin Group ** + 1 1 0 1 0.5 + 26 1 0 1.5 2.0000 0.0 2.0000 ** Excluded Spin Group ** + 1 1 0 2 0.5 + 27 1 0 2.5 2.0000 0.0 3.0000 ** Excluded Spin Group ** + 1 1 0 2 0.5 + 28 1 0 -2.5 2.0000 0.0 3.0000 ** Excluded Spin Group ** + 1 1 0 3 0.5 + 29 1 0 -3.5 2.0000 0.0 4.0000 ** Excluded Spin Group ** + 1 1 0 3 0.5 + +__________________________ + group channel Enbnd Echan z1 z2 m1 m2 + 1 1 0.00000 0.00000 0 0 27.976929 1.008665 + 2 0.00000 1.843140E+06 0 0 27.976929 1.008665 + 2 1 0.00000 0.00000 0 0 27.976929 1.008665 + 2 0.00000 1.843140E+06 0 0 27.976929 1.008665 + 3 1 0.00000 0.00000 0 0 27.976929 1.008665 + 2 0.00000 1.843140E+06 0 0 27.976929 1.008665 + 4 1 0.00000 0.00000 0 0 27.976929 1.008665 + 2 0.00000 1.843140E+06 0 0 27.976929 1.008665 + 3 0.00000 1.843140E+06 0 0 27.976929 1.008665 + 5 1 0.00000 0.00000 0 0 27.976929 1.008665 + 2 0.00000 1.843140E+06 0 0 27.976929 1.008665 + 3 0.00000 1.843140E+06 0 0 27.976929 1.008665 + 6 1 0.00000 0.00000 0 0 27.976929 1.008665 + 2 0.00000 1.843140E+06 0 0 27.976929 1.008665 + 3 0.00000 1.843140E+06 0 0 27.976929 1.008665 + 7 1 0.00000 0.00000 0 0 27.976929 1.008665 + 2 0.00000 1.843140E+06 0 0 27.976929 1.008665 + 3 0.00000 1.843140E+06 0 0 27.976929 1.008665 + 8 1 0.00000 0.00000 0 0 28.976496 1.008665 + 9 1 0.00000 0.00000 0 0 28.976496 1.008665 + 10 1 0.00000 0.00000 0 0 28.976496 1.008665 + 11 1 0.00000 0.00000 0 0 28.976496 1.008665 + 12 1 0.00000 0.00000 0 0 28.976496 1.008665 + 13 1 0.00000 0.00000 0 0 28.976496 1.008665 + 14 1 0.00000 0.00000 0 0 28.976496 1.008665 + 15 1 0.00000 0.00000 0 0 28.976496 1.008665 + 16 1 0.00000 0.00000 0 0 28.976496 1.008665 + 17 1 0.00000 0.00000 0 0 28.976496 1.008665 + 18 1 0.00000 0.00000 0 0 29.973772 1.008665 + 19 1 0.00000 0.00000 0 0 29.973772 1.008665 + 20 1 0.00000 0.00000 0 0 29.973772 1.008665 + 21 1 0.00000 0.00000 0 0 29.973772 1.008665 + 22 1 0.00000 0.00000 0 0 29.973772 1.008665 + 23 1 0.00000 0.00000 0 0 16.000000 1.008665 + 24 1 0.00000 0.00000 0 0 16.000000 1.008665 + 25 1 0.00000 0.00000 0 0 16.000000 1.008665 + 26 1 0.00000 0.00000 0 0 16.000000 1.008665 + 27 1 0.00000 0.00000 0 0 16.000000 1.008665 + 28 1 0.00000 0.00000 0 0 16.000000 1.008665 + 29 1 0.00000 0.00000 0 0 16.000000 1.008665 +__________________________ + + ### Array size used for SAMMY-INP is 6829 ### + ### Estimated array size for SAMMY-PAR is 8010 ### + + Total number of resonances is 162 + Number of particle channels is 3 + Number of spin groups is 29 + Number of flagged parametrs is 5 + Number of varied parameters is 5 + Number of nuclides is 4 + ### Array size used for SAMMY-PAR is 8115 ### + ### Estimated array size for SAMMY-NEW is 6491 ### + + + + + ***** INITIAL VALUES FOR PARAMETERS + + SPIN GROUP NUMBER 1 WITH SPIN= 0.5, ABUNDANCE= 1.0000( 3), AND G= 1.0000 + effective radius = 4.1364E+00 4.1364E+00 + "true" radius = 4.1364E+00 4.1364E+00 + ENERGY GAMMA- GAMMA- GAMMA- + GAMMA Inc Chan PPair #2 + L=0 SPIN= 0.5 L=2 SPIN= 1.5 + (eV) (MILLI-EV) (MILLI-EV) (MILLI-EV) + -3.66160E+06 1.5877E+05 3.6985E+09( 1) 0.0000E+00 + -8.73730E+05 1.0253E+03 1.0151E+02( 2) 0.0000E+00 + + + EFFECTIVE RADIUS "TRUE" RADIUS SPIN GROUP NUMBER FOR THESE RADII + # channel numbers + 4.1364200 4.1364200 1 # 1 2 3 + 4 # 1 2 3 + 5 # 1 2 3 + 4.9437200 4.9437200 2 # 1 2 3 + 3 # 1 2 3 + 6 # 1 2 3 + 7 # 1 2 3 + 4.4000000 4.4000000 8 # 1 2 3 + 9 # 1 2 3 + 10 # 1 2 3 + 11 # 1 2 3 + 12 # 1 2 3 + 13 # 1 2 3 + 14 # 1 2 3 + 15 # 1 2 3 + 16 # 1 2 3 + 17 # 1 2 3 + 4.2000000 4.2000000 18 # 1 2 3 + 19 # 1 2 3 + 20 # 1 2 3 + 21 # 1 2 3 + 22 # 1 2 3 + 4.2000000 4.2000000 23 # 1 2 3 + 24 # 1 2 3 + 25 # 1 2 3 + 26 # 1 2 3 + 27 # 1 2 3 + 28 # 1 2 3 + 29 # 1 2 3 + + + Isotopic abundance and mass for each nuclide -- + Nuclide Abundance Mass Spin groups + 1 1.000 ( 3) 27.9769 1 2 3 4 5 6 7 + 2 4.6700E-02( 4) 28.9765 8 9 10 11 12 13 14 15 16 17 + 3 3.1000E-02( 5) 29.9738 18 19 20 21 22 + 4 1.000 16.0000 23 24 25 26 27 28 29 + + + TEMPERATURE THICKNESS + 3.0000E+02 3.4716E-01 + + DELTA-L DELTA-T-GAUS DELTA-T-EXP + 1.8223E-01 2.5180E-03 0.0000E+00 + + + + ***** CORRELATION MATRIX FOR INPUT PARAMETERS + + ***** STANDARD DEVIATION (SQRT OF DIAGONAL OF COV MATRX) + + STD. DEV. STD. DEV. STD. DEV. STD. DEV. + ( 1) 3.6985E+08 ( 2) 10.15 ( 3) 0.9200 ( 4) 5.0000E-02 + ( 5) 2.0000E-02 + + ### Array size used for SAMMY-NEW is 6979 ### + Emin 300000. is less than the minimum energy in the data set + Emin has been changed to 300001. + First 5 energies= + 300003.5 300026.0 300048.6 300071.2 300093.7 + Last 5 energies= + 1799827. 1799495. 1799163. 1798831. 1798500. + Emax 1.800000E+06 is greater than the maximum energy in the data set + Emax has been changed to 1.799868E+06 + First 5 energies= + 300003.5 300026.0 300048.6 300071.2 300093.7 + Last 5 energies= + 1799827. 1799495. 1799163. 1798831. 1798500. + Emind Emins Eminr Emin + 298650.6726016077 298871.5528528391 298871.5528528391 300000.6537499999 + Emax Emaxr Emaxs Emaxd + 1799868.1037500002 1807023.7054032285 1807023.7054032285 1807566.9675226703 + + DOPPLER WIDTHS + Nuclide Doppler Width (eV) Doppler FWHM (eV) + Number at Emin at Emax at Emin at Emax + 1 33.4435 81.9164 55.6871 136.400 + 2 32.8616 80.4912 54.7182 134.027 + 3 32.3103 79.1408 53.8002 131.778 + 4 44.2234 108.321 73.6367 180.366 + + Gaussian Resolution Width at Emin = 225.820 and at Emax = 1431.12 + + E(keV) Dopp_FWHM(keV) Resol_FWHM(keV) Both_FWHM(keV) + 300.000654 0.0736 0.3760 0.3832 + 1049.934379 0.1378 1.3535 1.3605 + 1799.868104 0.1804 2.3830 2.3898 + + ### Estimated array size for SAMMY-DAT is 32437024 + 32500000 ### + + Energy range of data is from 3.00001E+05 to 1.79987E+06 eV. + Number of experimental data points = 15736 + + + ** 30 resonances have fewer than 9 points across width + Number of points in auxiliary grid = 16630 + ### Array size used for SAMMY-DAT is 32437021 + 32500000 ### + ### Estimated array size for SAMMY-THE is 86195 ### + Number of parameters affected by this data set= 5 + ### Array size used for SAMMY-THE is 86194 ### + ### Estimated array size for SAMMY-XCT is 360200 ### + ### Array size used for SAMMY-XCT is 354090 ### + ### Estimated array size for SAMMY-FGM is 387349 ### + ### Array size used for SAMMY-FGM is 387349 ### + ### Estimated array size for SAMMY-RSL is 437034 ### + ### Array size used for SAMMY-RSL is 420445 ### + ### Estimated array size for SAMMY-INT is 386458 ### + ### Array size used for SAMMY-INT is 386459 ### + ### Estimated array size for SAMMY-SQU is 354124 ### + ### Array size used for SAMMY-SQU is 354124 ### + ### Estimated array size for SAMMY-IPQ is 354089 ### + + CUSTOMARY CHI SQUARED = 188355. + CUSTOMARY CHI SQUARED DIVIDED BY NDAT = 11.9697 + + BAYESIAN CHI SQUARED = 53736.0 + BAYESIAN CHI SQUARED DIVIDED BY NDAT = 3.41485 + ### Array size used for SAMMY-IPQ is 251621 ### + ### Estimated array size for SAMMY-FIN is 204449 ### + + + + + ***** INTERMEDIATE VALUES FOR RESONANCE PARAMETERS + + SPIN GROUP NUMBER 1 WITH SPIN= 0.5, ABUNDANCE= 0.9266( 3), AND G= 1.0000 + effective radius = 4.1364E+00 4.1364E+00 + "true" radius = 4.1364E+00 4.1364E+00 + ENERGY GAMMA- GAMMA- GAMMA- + GAMMA Inc Chan PPair #2 + L=0 SPIN= 0.5 L=2 SPIN= 1.5 + (eV) (MILLI-EV) (MILLI-EV) (MILLI-EV) + -3.66160E+06 1.5877E+05 4.1011E+09( 1) 0.0000E+00 + -8.73730E+05 1.0253E+03 1.0151E+02( 2) 0.0000E+00 + + + EFFECTIVE RADIUS "TRUE" RADIUS SPIN GROUP NUMBER FOR THESE RADII + # channel numbers + 4.1364200 4.1364200 1 # 1 2 3 + 4 # 1 2 3 + 5 # 1 2 3 + 4.9437200 4.9437200 2 # 1 2 3 + 3 # 1 2 3 + 6 # 1 2 3 + 7 # 1 2 3 + 4.4000000 4.4000000 8 # 1 2 3 + 9 # 1 2 3 + 10 # 1 2 3 + 11 # 1 2 3 + 12 # 1 2 3 + 13 # 1 2 3 + 14 # 1 2 3 + 15 # 1 2 3 + 16 # 1 2 3 + 17 # 1 2 3 + 4.2000000 4.2000000 18 # 1 2 3 + 19 # 1 2 3 + 20 # 1 2 3 + 21 # 1 2 3 + 22 # 1 2 3 + 4.2000000 4.2000000 23 # 1 2 3 + 24 # 1 2 3 + 25 # 1 2 3 + 26 # 1 2 3 + 27 # 1 2 3 + 28 # 1 2 3 + 29 # 1 2 3 + + + Isotopic abundance and mass for each nuclide -- + Nuclide Abundance Mass Spin groups + 1 0.9266 ( 3) 27.9769 1 2 3 4 5 6 7 + 2 3.9490E-02( 4) 28.9765 8 9 10 11 12 13 14 15 16 17 + 3 2.2304E-02( 5) 29.9738 18 19 20 21 22 + 4 1.000 16.0000 23 24 25 26 27 28 29 + + + TEMPERATURE THICKNESS + 3.0000E+02 3.4716E-01 + + DELTA-L DELTA-T-GAUS DELTA-T-EXP + 1.8223E-01 2.5180E-03 0.0000E+00 + ### Array size used for SAMMY-FIN is 204459 ### + ### Estimated array size for SAMMY-THE is 102105 ### + Number of parameters affected by this data set= 5 + ### Array size used for SAMMY-THE is 102104 ### + ### Estimated array size for SAMMY-XCT is 376110 ### + ### Array size used for SAMMY-XCT is 370000 ### + ### Estimated array size for SAMMY-FGM is 403259 ### + ### Array size used for SAMMY-FGM is 403259 ### + ### Estimated array size for SAMMY-RSL is 452944 ### + ### Array size used for SAMMY-RSL is 436355 ### + ### Estimated array size for SAMMY-INT is 402368 ### + ### Array size used for SAMMY-INT is 370001 ### + ### Estimated array size for SAMMY-IPQ is 369999 ### + + CUSTOMARY CHI SQUARED = 54751.6 + CUSTOMARY CHI SQUARED DIVIDED BY NDAT = 3.47939 + ### Array size used for SAMMY-IPQ is 267531 ### + ### Estimated array size for SAMMY-FIN is 220359 ### + + + + + ***** NEW VALUES FOR RESONANCE PARAMETERS + + SPIN GROUP NUMBER 1 WITH SPIN= 0.5, ABUNDANCE= 0.9327( 3), AND G= 1.0000 + effective radius = 4.1364E+00 4.1364E+00 + "true" radius = 4.1364E+00 4.1364E+00 + ENERGY GAMMA- GAMMA- GAMMA- + GAMMA Inc Chan PPair #2 + L=0 SPIN= 0.5 L=2 SPIN= 1.5 + (eV) (MILLI-EV) (MILLI-EV) (MILLI-EV) + -3.66160E+06 1.5877E+05 4.0753E+09( 1) 0.0000E+00 + -8.73730E+05 1.0253E+03 1.0151E+02( 2) 0.0000E+00 + Expected 0.0000E+00 1.0155E+02 0.0000E+00 + Value +/- 0.0000E+00 +/- 1.0151E+01 +/- 0.0000E+00 + EV changed 0.0000E+00 4.0753E+09 0.0000E+00 + parameters +/- 0.0000E+00 +/- 8.6688E+06 +/- 0.0000E+00 + + + EFFECTIVE RADIUS "TRUE" RADIUS SPIN GROUP NUMBER FOR THESE RADII + # channel numbers + 4.1364200 4.1364200 1 # 1 2 3 + 4 # 1 2 3 + 5 # 1 2 3 + 4.9437200 4.9437200 2 # 1 2 3 + 3 # 1 2 3 + 6 # 1 2 3 + 7 # 1 2 3 + 4.4000000 4.4000000 8 # 1 2 3 + 9 # 1 2 3 + 10 # 1 2 3 + 11 # 1 2 3 + 12 # 1 2 3 + 13 # 1 2 3 + 14 # 1 2 3 + 15 # 1 2 3 + 16 # 1 2 3 + 17 # 1 2 3 + 4.2000000 4.2000000 18 # 1 2 3 + 19 # 1 2 3 + 20 # 1 2 3 + 21 # 1 2 3 + 22 # 1 2 3 + 4.2000000 4.2000000 23 # 1 2 3 + 24 # 1 2 3 + 25 # 1 2 3 + 26 # 1 2 3 + 27 # 1 2 3 + 28 # 1 2 3 + 29 # 1 2 3 + + + Isotopic abundance and mass for each nuclide -- + Nuclide Abundance Mass Spin groups + 1 0.9327 ( 3) 27.9769 1 2 3 4 5 6 7 + 2 3.8773E-02( 4) 28.9765 8 9 10 11 12 13 14 15 16 17 + 3 2.1778E-02( 5) 29.9738 18 19 20 21 22 + 4 1.000 16.0000 23 24 25 26 27 28 29 + + + TEMPERATURE THICKNESS + 3.0000E+02 3.4716E-01 + + DELTA-L DELTA-T-GAUS DELTA-T-EXP + 1.8223E-01 2.5180E-03 0.0000E+00 + + + + ***** CORRELATION MATRIX FOR OUTPUT PARAMETERS + + STD.DEV. (REL.) CORRELATION*100 + + 1 2 3 4 5 + 1 8.6688E+06 .002 100 + 2 10.15 .100 0 100 + 3 4.4228E-04 .000 -40 0 100 + 4 4.3666E-04 .011 -28 0 -39 100 + 5 4.7877E-04 .022 -27 0 -27 -29 100 + + + + ***** RATIO OF UNCERTAINTIES ON VARIED PARAMETERS + + NEW/OLD NEW/OLD NEW/OLD NEW/OLD + ( 1) 2.3439E-02 ( 2) 1.000 ( 3) 4.8074E-04 ( 4) 8.7331E-03 + ( 5) 2.3938E-02 + + + ***** RATIO OF UNCERTAINTIES ON VARIED U-PARAMETERS + + NEW/OLD NEW/OLD NEW/OLD NEW/OLD + ( 1) 2.2329E-02 ( 2) 1.0000 ( 3) 4.8074E-04 ( 4) 8.7331E-03 + ( 5) 2.3938E-02 + + ### Array size used for SAMMY-FIN is 222283 ### + + + ***************************************************************************** + ***** ***** + ***** example ex012: multiple nuclides (Natural Si -- 200 m flight pat ***** + ***** h) ***** + ***************************************************************************** + + + Input quantities from line number 2 are: + Alfnm1, Alfnm2 = ##Si ## Atomic Weight = 27.976928 + Nepnts Itmax Icorr Nxtra Iptdop Iptwid Ixxchn + 0 0 0 0 0 0 0 + Ndigit Idropp Matnum Kkkkza + 2 2 0 0 +Adjusted Itmax Icorr Nxtra Iptdop Iptwid Ixxchn + 0 0 50 0 9 5 0 + Ndigit Idropp Matnum Kkkkza + 2 2 0 0 + + + TARGET ELEMENT IS Si + ATOMIC WEIGHT IS 27.976928 + + + *********** Alphanumeric Control Information ********* + + CSISRS + CHI SQUARED IS WANTED + DO NOT SUPPRESS ANY intermediate results + ODF FILE IS WANTED--SAMMY.ODF ,FINAL VAL + DO NOT ALLOW VALUES FOR DATA-RELATED PAR + DO NOT PRINT BAYES CHI SQUARED + DO NOT SOLVE BAYES EQUATIONS + DO NOT PRINT ANY INPUT PARAMETERS + + **** end of Alphanumeric Control Information ********* + + + Name of initial parameter covariance file is: + >>> SAMMY.COV <<< + ### Estimated array size for SAMMY-INP is 5799 ### + + Effective Temperature= 300.00000 + Flight Path= 200.00000 Meters +/- 0.18223/2 Meters + Deltae= 0.00000 Deltag= 0.00252 + Delttt= 0.00000 Elowbr= 0.00000000 + + Target Thickness= 0.3472 + + **** Data type is <<< TRANSMISSION >>> **** + + Spin of incident particle is 0.5 +__________________________ + + ### Array size used for SAMMY-INP is 6829 ### + ### Estimated array size for SAMMY-PAR is 8010 ### + + Total number of resonances is 162 + Number of particle channels is 3 + Number of spin groups is 29 + Number of flagged parametrs is 5 + Number of varied parameters is 5 + Number of nuclides is 4 + ### Array size used for SAMMY-PAR is 8095 ### + ### Estimated array size for SAMMY-OLD is 6481 ### + Number of non-zero off-diagonal cov matrix elements is 10 + + + Broadening (etc.) parameters actually used for this run + + Effective Temperature = 300.000 + Sample Thickness = 0.347162 + FLIGHT PATH LENGTH (Dist) = 200.000 + DeltaL = 0.182233 + DeltaG = 2.518000E-03 + DeltaE = 0.00000 + ### Array size used for SAMMY-OLD is 6637 ### + Emin 300000. is less than the minimum energy in the data set + Emin has been changed to 300001. + First 5 energies= + 300003.5 300026.0 300048.6 300071.2 300093.7 + Last 5 energies= + 1799827. 1799495. 1799163. 1798831. 1798500. + Emax 1.800000E+06 is greater than the maximum energy in the data set + Emax has been changed to 1.799868E+06 + First 5 energies= + 300003.5 300026.0 300048.6 300071.2 300093.7 + Last 5 energies= + 1799827. 1799495. 1799163. 1798831. 1798500. + Emind Emins Eminr Emin + 298650.6726016077 298871.5528528391 298871.5528528391 300000.6537499999 + Emax Emaxr Emaxs Emaxd + 1799868.1037500002 1807023.7054032285 1807023.7054032285 1807566.9675226703 + + DOPPLER WIDTHS + Nuclide Doppler Width (eV) Doppler FWHM (eV) + Number at Emin at Emax at Emin at Emax + 1 33.4435 81.9164 55.6871 136.400 + 2 32.8616 80.4912 54.7182 134.027 + 3 32.3103 79.1408 53.8002 131.778 + 4 44.2234 108.321 73.6367 180.366 + + Gaussian Resolution Width at Emin = 225.820 and at Emax = 1431.12 + + E(keV) Dopp_FWHM(keV) Resol_FWHM(keV) Both_FWHM(keV) + 300.000654 0.0736 0.3760 0.3832 + 1049.934379 0.1378 1.3535 1.3605 + 1799.868104 0.1804 2.3830 2.3898 + + ### Estimated array size for SAMMY-DAT is 32437024 + 32500000 ### + + Energy range of data is from 3.00001E+05 to 1.79987E+06 eV. + Number of experimental data points = 15736 + + + ** 30 resonances have fewer than 9 points across width + Number of points in auxiliary grid = 16630 + ### Array size used for SAMMY-DAT is 32437021 + 32500000 ### + ### Estimated array size for SAMMY-THE is 86195 ### + ### Array size used for SAMMY-THE is 86194 ### + ### Estimated array size for SAMMY-XCT is 193270 ### + ### Array size used for SAMMY-XCT is 187783 ### + ### Estimated array size for SAMMY-FGM is 221042 ### + ### Array size used for SAMMY-FGM is 221042 ### + ### Estimated array size for SAMMY-RSL is 270727 ### + ### Array size used for SAMMY-RSL is 254138 ### + ### Estimated array size for SAMMY-INT is 220151 ### + ### Array size used for SAMMY-INT is 220152 ### + ### Estimated array size for SAMMY-IPQ is 187782 ### + + CUSTOMARY CHI SQUARED = 54111.1 + CUSTOMARY CHI SQUARED DIVIDED BY NDAT = 3.43868 + ### Array size used for SAMMY-IPQ is 168467 ### + ### Estimated array size for SAMMY-FIN is 121245 ### + ### Array size used for SAMMY-FIN is 6451 ### + Total time = 9.54 seconds + Normal finish to SAMMY diff --git a/tests/data/ex012/answers/ex012aa.par b/tests/data/ex012/answers/ex012aa.par new file mode 100755 index 0000000..1e4e7ce --- /dev/null +++ b/tests/data/ex012/answers/ex012aa.par @@ -0,0 +1,207 @@ +-3661600.00 158770.000 4075253.+3 0.0000 0 0 1 0 1 +-873730.000 1025.30000 101.510303 0.0000 0 0 1 0 1 +-365290.000 1000.00000 30.4060000 0.0000 0 0 0 0 1 +-63159.0000 1000.00000 46.8940000 0.0000 0 0 0 0 1 +-48801.0000 1000.00000 9.24960000 0.0000 0 0 0 0 1 +31739.99805 1000.00000 15.6670000 0.0000 0.0000 0 0 0 0 0 5 +55676.96094 1580.30000 653310.000 0.0000 0 0 0 0 1 +67732.84375 2500.00000 2658.90000 0.0000 0 0 0 0 3 +70800.00781 1000.00000 29.6170000 0.0000 0.0000 0 0 0 0 0 5 +86797.35938 2500.00000 726.180000 0.0000 0 0 0 0 3 +181617.5000 5600.00000 34894000.0 0.0000 0 0 0 0 1 +298700.0000 1000.00000 9886.00000 0.0000 0.0000 0 0 0 0 0 5 +301310.8125 3600.00000 2354.80000 0.0000 0 0 0 0 1 +354588.6875 1000.00000 14460.0000 0.0000 0.0000 0 0 0 0 0 5 +399675.9375 660.000000 813.610000 0.0000 0 0 0 0 3 +532659.8750 2500.00000 532810.000 0.0000 0 0 0 0 3 +565576.8750 2900.00000 10953000.0 0.0000 0 0 0 0 3 +587165.7500 8800.00000 199160.000 0.0000 0 0 0 0 2 +590290.1250 3600.00000 523660.000 0.0000 0 0 0 0 1 +602467.3125 3400.00000 50491.0000 0.0000 0.0000 0 0 0 0 0 4 +714043.4375 2500.00000 1216.50000 0.0000 0 0 0 0 3 +771711.9375 1000.00000 53139.0000 0.0000 0.0000 0 0 0 0 0 5 +812491.6250 9700.00000 30100000.0 0.0000 0 0 0 0 3 +845233.8750 2000.00000 397910.000 0.0000 0.0000 0 0 0 0 0 4 +872305.8125 1300.00000 32140.0000 0.0000 0.0000 0 0 0 0 0 5 +910043.5625 1130.00000 3673300.00 0.0000 0 0 0 0 3 +962233.0000 16000.0000 76614000.0 0.0000 0 0 0 0 2 +1017777.188 1000.00000 76192.0000 0.0000 0.0000 0 0 0 0 0 5 +1042856.812 1000.00000 933700.000 0.0000 0.0000 0 0 0 0 0 5 +1085169.250 3600.00000 72794.0000 0.0000 0 0 0 0 1 +1148103.625 1000.00000 3146.90000 0.0000 0.0000 0 0 0 0 0 5 +1162663.625 3800.00000 3013600.00 0.0000 0 0 0 0 1 +1199501.375 7600.00000 14914000.0 0.0000 0 0 0 0 2 +1201238.750 3600.00000 4601200.00 0.0000 0 0 0 0 1 +1256447.250 3600.00000 17383000.0 0.0000 0 0 0 0 1 +1264441.750 1000.00000 843640.000 0.0000 0.0000 0 0 0 0 0 5 +1379920.250 2400.00000 65299.0000 0.0000 0.0000 0 0 0 0 0 4 +1408269.750 2700.00000 5198300.00 0.0000 0 0 0 0 3 +1479927.250 1650.00000 3502500.00 0.0000 0.0000 0 0 0 0 0 4 +1482395.375 8800.00000 886.940000 0.0000 0 0 0 0 2 +1512343.875 1000.00000 91493.0000 0.0000 0.0000 0 0 0 0 0 5 +1528742.375 2400.00000 2922500.00 0.0000 0.0000 0 0 0 0 0 4 +1580564.875 2400.00000 1495500.00 0.0000 0.0000 0 0 0 0 0 4 +1592844.250 8800.00000 11199000.0 0.0000 0 0 0 0 2 +1597168.625 2400.00000 4017200.00 0.0000 0.0000 0 0 0 0 0 4 +1639561.500 1000.00000 15293000.0 0.0000 0.0000 0 0 0 0 0 5 +1651146.000 1000.00000 21555000.0 0.0000 0.0000 0 0 0 0 0 5 +1658595.000 8800.00000 1555300.00 0.0000 0 0 0 0 2 +1664961.125 2400.00000 215900.000 0.0000 0.0000 0 0 0 0 0 4 +1784952.750 2400.00000 192940.000 0.0000 0.0000 0 0 0 0 0 4 +1805652.625 2500.00000 1299100.00 0.0000 0 0 0 0 3 +1850667.250 1000.00000 35515000.0 0.0000 0.0000 0 0 0 0 0 5 +1852435.250 2500.00000 70707000.0 0.0000 0 0 0 0 3 +1923655.250 1000.00000 1017100.00 0.0000 0.0000 0 0 0 0 0 5 +2248678.250 3600.00000 444760000. 0.0000 0 0 0 0 1 +1968869.750 1000.00000 5734100.00 0.0000 0.0000 0 0 0 0 0 5 +3007280.500 3600.00000 289960.000 0.0000 0 0 0 0 1 +3067775.250 3600.00000 422290.000 0.0000 0 0 0 0 1 +-2179600.00 409080.000 1722200.+3 0 0 0 8 +-860240.000 999.970000 34170000.0 0 0 0 8 +-431280.000 1005.90000 228510000. 0 0 0 8 +15282.00000 1646.00000 10000.0000 0 0 0 10 +38819.00000 2400.00000 75926.0000 0 0 0 13 +159682.9688 1900.00000 1200300.00 0 0 0 10 +184456.4844 1500.00000 136740.000 0 0 0 10 +336790.2812 800.000000 2512800.00 0 0 0 10 +385764.1875 4670.00000 24133000.0 0 0 0 9 +552241.8125 5700.00000 1298900.00 0 0 0 13 +566558.4375 3000.00000 70820000.0 0 0 0 10 +619664.6250 3000.00000 725960.000 0 0 0 13 +649726.0000 3000.00000 1095900.00 0 0 0 13 +653064.6250 6300.00000 19386000.0 0 0 0 12 +715064.6250 300.000000 978570.000 0 0 0 10 +716771.3125 3000.00000 219300000. 0 0 0 8 +802258.9375 3000.00000 9934900.00 0 0 0 15 +862003.6875 3000.00000 432930000. 0 0 0 8 +872483.5000 300.000000 17335000.0 0 0 0 10 +955891.2500 300.000000 982890.000 0 0 0 13 +1098425.500 3000.00000 57787.0000 0 0 0 15 +1113807.625 300.000000 76533000.0 0 0 0 10 +1122279.500 300.000000 4881600.00 0 0 0 13 +1178601.750 3000.00000 8295900.00 0 0 0 9 +1192267.500 300.000000 375060.000 0 0 0 12 +1207629.500 300.000000 19795000.0 0 0 0 13 +1388859.125 3000.00000 4271400.00 0 0 0 15 +1769072.750 3000.00000 32136.0000 0 0 0 8 +2248487.000 3000.00000 169320.000 0 0 0 8 +-1185100.00 118480.000 260570000. 0 0 0 18 +-161550.000 650.000000 426400.000 0 0 0 18 +2235.000000 370.000000 932.660000 0 0 0 20 +4977.000000 600.000000 1122.00000 0 0 0 19 +183488.8281 6000.00000 9997600.00 0 0 0 18 +235225.3906 800.000000 115410.000 0 0 0 21 +302839.2188 370.000000 274430.000 0 0 0 20 +413136.1875 600.000000 1580100.00 0 0 0 19 +645239.8125 800.000000 401430.000 0 0 0 21 +704912.0000 800.000000 423190.000 0 0 0 21 +745454.0000 370.000000 14735000.0 0 0 0 20 +796946.1250 600.000000 469320.000 0 0 0 19 +807379.8125 600.000000 274330.000 0 0 0 19 +810796.9375 600.000000 419310.000 0 0 0 19 +844674.6250 370.000000 3315300.00 0 0 0 20 +878822.8125 800.000000 110630.000 0 0 0 21 +979821.3125 600.000000 591820.000 0 0 0 19 +1182175.750 6000.00000 5912400.00 0 0 0 18 +1217821.125 800.000000 1888900.00 0 0 0 21 +1274871.500 600.000000 2225500.00 0 0 0 19 +1302032.875 800.000000 304790.000 0 0 0 21 +1310774.875 370.000000 339710.000 0 0 0 20 +1337984.375 600.000000 4624000.00 0 0 0 19 +1356024.750 370.000000 12271000.0 0 0 0 20 +1383597.625 600.000000 25336000.0 0 0 0 19 +1400981.375 800.000000 1897600.00 0 0 0 21 +1412107.750 370.000000 668620.000 0 0 0 20 +1586007.000 6000.00000 23644000.0 0 0 0 18 +2583249.500 6000.00000 92076000.0 0 0 0 18 +-11592000.0 1200.00000 7517400.+3 0 0 0 23 +-9192600.00 1200.00000 1435600.+4 0 0 0 23 +433901.3750 1200.00000 43760000.0 0 0 0 25 +999736.9375 1200.00000 96583000.0 0 0 0 26 +1307683.875 1200.00000 42027000.0 0 0 0 25 +1630813.125 1200.00000 71367.0000 0 0 0 25 +1650581.000 1200.00000 3901300.00 0 0 0 29 +1833142.125 1200.00000 7835200.00 0 0 0 26 +1898468.875 1200.00000 28678000.0 0 0 0 24 +2372699.000 1200.00000 155330000. 0 0 0 23 +2888249.750 1200.00000 1885900.00 0 0 0 24 +3004838.500 1200.00000 2333.80000 0 0 0 24 +3181814.500 1200.00000 517690000. 0 0 0 24 +3203037.750 1200.00000 179230000. 0 0 0 23 +3204505.000 1200.00000 310910.000 0 0 0 28 +3239197.250 1200.00000 251410000. 0 0 0 26 +3431828.250 1200.00000 615700.000 0 0 0 27 +3438834.250 1200.00000 1803900.00 0 0 0 28 +3636796.000 1200.00000 701840000. 0 0 0 25 +3763624.250 1200.00000 16031000.0 0 0 0 29 +3853751.500 1200.00000 562450000. 0 0 0 23 +4175216.750 1200.00000 70220000.0 0 0 0 26 +4288830.500 1200.00000 56268000.0 0 0 0 25 +4303685.000 1200.00000 16078000.0 0 0 0 24 +4461693.000 1200.00000 77996000.0 0 0 0 23 +4525253.000 1200.00000 4173300.00 0 0 0 27 +4591673.500 1200.00000 91070.0000 0 0 0 29 +4592562.000 1200.00000 175270.000 0 0 0 28 +4816678.000 1200.00000 47145000.0 0 0 0 25 +5055537.000 1200.00000 52134000.0 0 0 0 26 +5118596.000 1200.00000 17864000.0 0 0 0 29 +5365329.500 1200.00000 980620.000 0 0 0 27 +5617318.000 1200.00000 33197000.0 0 0 0 28 +5666636.000 1200.00000 12687000.0 0 0 0 27 +5912201.500 1200.00000 12942000.0 0 0 0 29 +5986110.000 1200.00000 7106100.00 0 0 0 26 +6076846.000 1200.00000 5166700.00 0 0 0 28 +6116665.000 1200.00000 5549900.00 0 0 0 24 +6389893.000 1200.00000 4935600.00 0 0 0 29 +6813680.500 1200.00000 3262900.00 0 0 0 28 +6833136.500 1200.00000 5140500.00 0 0 0 27 +7373000.000 1200.00000 2400000.00 0 0 0 24 +8820920.000 1200.00000 1123400.+4 0 0 0 25 +10934820.00 1200.00000 276110.000 0 0 0 23 +15050371.00 1200.00000 634990.000 0 0 0 23 +25004488.00 1200.00000 6918.60000 0 0 0 23 + +.100000000 +Channel radii in key-word format +Radii= 4.136420, 4.136420 Flags=0,-1 + Group= 1 Chan= 1, 2, + Group= 4 Chan= 1, 2, 3, + Group= 5 Chan= 1, 2, 3, +Radii= 4.943720, 4.943720 Flags=0,-1 + Group= 2 Chan= 1, 2, + Group= 3 Chan= 1, 2, + Group= 6 Chan= 1, 2, 3, + Group= 7 Chan= 1, 2, 3, +Radii= 4.400000, 4.400000 Flags=0,-1 + Group= 8 Chan= 1, + Group= 9 Chan= 1, + Group= 10 Chan= 1, + Group= 11 Chan= 1, + Group= 12 Chan= 1, + Group= 13 Chan= 1, + Group= 14 Chan= 1, + Group= 15 Chan= 1, + Group= 16 Chan= 1, + Group= 17 Chan= 1, +Radii= 4.200000, 4.200000 Flags=0,-1 + Group= 18 Chan= 1, + Group= 19 Chan= 1, + Group= 20 Chan= 1, + Group= 21 Chan= 1, + Group= 22 Chan= 1, +Radii= 4.200000, 4.200000 Flags=0,-1 + Group= 23 Chan= 1, + Group= 24 Chan= 1, + Group= 25 Chan= 1, + Group= 26 Chan= 1, + Group= 27 Chan= 1, + Group= 28 Chan= 1, + Group= 29 Chan= 1, + +NUCLIDE MASSES AND ABUNDANCES FOLLOW +27.9769290 .93272247 .92000000 1 1 2 3 4 5 6 7 +28.9764960 .03877252 .05000000 1 8 91011121314151617 +29.9737720 .02177828 .02000000 11819202122 +16.0000000 1.0000000 .01000000 023242526272829 + +COVARIANCE MATRIX IS IN BINARY FORM diff --git a/tests/data/ex012/answers/ex012b b/tests/data/ex012/answers/ex012b new file mode 100755 index 0000000..628f27c --- /dev/null +++ b/tests/data/ex012/answers/ex012b @@ -0,0 +1,12 @@ +#!/bin/csh + +sammy <x.x +Echo ex012a.par >>x.x +Echo ex012a.dat >>x.x +Echo.>>x.x +sammy < x.x +Rem # pause +move SAMMY.LPT results\ex012bb.lpt +move SAMMY.ODF results\ex012bb.odf +del SAM*.* + +del x.x diff --git a/tests/data/ex012/answers/ex012b.inp b/tests/data/ex012/answers/ex012b.inp new file mode 100755 index 0000000..7831478 --- /dev/null +++ b/tests/data/ex012/answers/ex012b.inp @@ -0,0 +1,82 @@ +example ex012b: Si28 p-waves, abndnc=1, no broadening +Si 27.976928 300000. 1800000. +csisrs +chi squared is not wanted +do not suppress any intermediate results +generate odf file automatically +do not solve bayes equations +broadening is not wanted +#### 300. 200.0000 0.182233 0.0 0.002518 + + 4.20000 0.347162 +TRANSMISSION + 1 X 1 1 0.5 0.9223 0.0 Si28 s1/2 + 1 1 0 0 0.5 0.0 0.0 + 2 1 0 2 1.5 0.0 1843140.0 + 2 1 1 -0.5 0.9223 0.0 Si28 p1/2 + 1 1 0 1 0.5 0.0 0.0 + 2 1 0 1 0.5 0.0 1843140.0 + 3 1 1 -1.5 0.9223 0.0 Si28 p3/2 + 1 1 0 1 0.5 0.0 0.0 + 2 1 0 1 0.5 0.0 1843140.0 + 4 X 1 2 1.5 0.9223 0.0 Si28 d3/2 + 1 1 0 2 0.5 0.0 0.0 + 2 1 0 2 0.5 0.0 1843140.0 + 3 1 0 0 1.5 0.0 1843140.0 + 5 X 1 2 2.5 0.9223 0.0 Si28 d5/2 + 1 1 0 2 0.5 0.0 0.0 + 2 1 0 2 0.5 0.0 1843140.0 + 3 1 0 0 2.5 0.0 1843140.0 + 6 X 1 2 -2.5 0.9223 0.0 Si28 f5/2 + 1 1 0 3 0.5 0.0 0.0 + 2 1 0 3 0.5 0.0 1843140.0 + 3 1 0 1 2.5 0.0 1843140.0 + 7 X 1 2 -3.5 0.9223 0.0 Si28 f7/2 + 1 1 0 3 0.5 0.0 0.0 + 2 1 0 3 0.5 0.0 1843140.0 + 3 1 0 1 2.5 0.0 1843140.0 + 8 X 1 0 0.0 0.0467 0.5 Si29 s0s (el=0, J=0, singlet j=0) + 1 1 0 0 0.0 0.0 0.0 + 9 X 1 0 1.0 0.0467 0.5 Si29 s1q (el=0, J=1, quartet j=1) + 1 1 0 0 1.0 0.0 0.0 + 10 X 1 0 -1.0 0.0467 0.5 Si29 p1s + 1 1 0 1 0.0 0.0 + 11 X 1 0 -0.0 0.0467 0.5 Si29 p0q + 1 1 0 1 1.0 0.0 + 12 X 1 0 -1.0 0.0467 0.5 Si29 p1q + 1 1 0 1 1.0 0.0 + 13 X 1 0 -2.0 0.0467 0.5 Si29 p2q + 1 1 0 1 1.0 0.0 + 14 X 1 0 2.0 0.0467 0.5 Si29 d2s + 1 1 0 2 0.0 0.0 + 15 X 1 0 1.0 0.0467 0.5 Si29 d1q + 1 1 0 2 1.0 0.0 + 16 X 1 0 2.0 0.0467 0.5 Si29 d2q + 1 1 0 2 1.0 0.0 + 17 X 1 0 3.0 0.0467 0.5 Si29 d3q + 1 1 0 2 1.0 0.0 + 18 X 1 0 0.5 0.0310 0.0 Si30 s1/2 + 1 1 0 0 0.5 0.0 + 19 X 1 0 -0.5 0.0310 0.0 Si30 p1/2 + 1 1 0 1 0.5 0.0 + 20 X 1 0 -1.5 0.0310 0.0 Si30 p3/2 + 1 1 0 1 0.5 0.0 + 21 X 1 0 1.5 0.0310 0.0 Si30 d3/2 + 1 1 0 2 0.5 0.0 + 22 X 1 0 2.5 0.0310 0.0 Si30 d5/2 + 1 1 0 2 0.5 0.0 + 23 X 1 0 0.5 2.0 0.0 O s1/2 + 1 1 0 0 0.5 0.0 + 24 x 1 0 -0.5 2.0 0.0 O p1/2 + 1 1 0 1 0.5 0.0 + 25 x 1 0 -1.5 2.0 0.0 O p3/2 + 1 1 0 1 0.5 0.0 + 26 x 1 0 1.5 2.0 0.0 O d3/2 + 1 1 0 2 0.5 0.0 + 27 x 1 0 2.5 2.0 0.0 O d5/2 + 1 1 0 2 0.5 0.0 + 28 x 1 0 -2.5 2.0 0.0 O f5/2 + 1 1 0 3 0.5 0.0 + 29 x 1 0 -3.5 2.0 0.0 O f7/2 + 1 1 0 3 0.5 0.0 + diff --git a/tests/data/ex012/answers/ex012bb.lpt b/tests/data/ex012/answers/ex012bb.lpt new file mode 100755 index 0000000..caf9516 --- /dev/null +++ b/tests/data/ex012/answers/ex012bb.lpt @@ -0,0 +1,293 @@ + + ********************************************************** + *** *** + *** SAMMY Version 8.0.0 *** + *** *** + ********************************************************** + + Name of input file: + >>> ex012b.inp <<< + Name of parameter file: + >>> ex012a.par <<< + Values used for constants -- Kvendf=1 + mass of neutron = 1.008664915600000 in amu + sqrt(m/2) = 72.298252179105063 + sqrt(2m)/hbar = 0.000219680775849 + Boltzman = 0.000086173430000 + finestructure = 0.034447599938334 in 1/(amu*F) + GENERATE ODF FILE AUtomatically + BROADENING IS NOT WAnted + Name of experimental data file is: + >>> ex012a.dat <<< + Emin and Emax = 300000. 1.800000E+06 + + + ***************************************************************************** + ***** ***** + ***** example ex012b: Si28 p-waves, abndnc=1, no broadening ***** + ***** ***** + ***************************************************************************** + + + Input quantities from line number 2 are: + Alfnm1, Alfnm2 = ##Si ## Atomic Weight = 27.976928 + Nepnts Itmax Icorr Nxtra Iptdop Iptwid Ixxchn + 0 0 0 0 0 0 0 + Ndigit Idropp Matnum Kkkkza + 2 2 0 0 +Adjusted Itmax Icorr Nxtra Iptdop Iptwid Ixxchn + 0 0 50 0 9 5 0 + Ndigit Idropp Matnum Kkkkza + 2 2 0 0 + + + TARGET ELEMENT IS Si + ATOMIC WEIGHT IS 27.976928 + + + *********** Alphanumeric Control Information ********* + + CSISRS + CHI SQUARED IS NOT WANTED + DO NOT SUPPRESS ANY intermediate results + DO NOT SOLVE BAYES EQUATIONS + BROADENING IS NOT WAnted + ODF FILE IS WANTED--SAMMY.ODF ,ZERO-TH O + PRINT VARIED INPUT PARAMETERS + + **** end of Alphanumeric Control Information ********* + + + ### Estimated array size for SAMMY-INP is 5799 ### + + Target Thickness= 0.3472 + + **** Data type is <<< TRANSMISSION >>> **** + + Spin of incident particle is 0.5 + #of #of + Group Ent Exit Jspin Relative Ispin g Chn Lpnt Ishift eL Chspn + # Chn Chn Abndnc # + 1 1 1 0.5 0.9223 0.0 1.0000 ** Excluded Spin Group ** + 1 1 0 0 0.5 + 2 1 0 2 1.5 + 2 1 1 -0.5 0.9223 0.0 1.0000 + 1 1 0 1 0.5 + 2 1 0 1 0.5 + 3 1 1 -1.5 0.9223 0.0 2.0000 + 1 1 0 1 0.5 + 2 1 0 1 0.5 + 4 1 2 1.5 0.9223 0.0 2.0000 ** Excluded Spin Group ** + 1 1 0 2 0.5 + 2 1 0 2 0.5 + 3 1 0 0 1.5 + 5 1 2 2.5 0.9223 0.0 3.0000 ** Excluded Spin Group ** + 1 1 0 2 0.5 + 2 1 0 2 0.5 + 3 1 0 0 2.5 + 6 1 2 -2.5 0.9223 0.0 3.0000 ** Excluded Spin Group ** + 1 1 0 3 0.5 + 2 1 0 3 0.5 + 3 1 0 1 2.5 + 7 1 2 -3.5 0.9223 0.0 4.0000 ** Excluded Spin Group ** + 1 1 0 3 0.5 + 2 1 0 3 0.5 + 3 1 0 1 2.5 + 8 1 0 0.0 0.0467 0.5 0.2500 ** Excluded Spin Group ** + 1 1 0 0 0.0 + 9 1 0 1.0 0.0467 0.5 0.7500 ** Excluded Spin Group ** + 1 1 0 0 1.0 + 10 1 0 -1.0 0.0467 0.5 0.7500 ** Excluded Spin Group ** + 1 1 0 1 0.0 + 11 1 0 0.0 0.0467 0.5 0.2500 ** Excluded Spin Group ** + 1 1 0 1 1.0 + 12 1 0 -1.0 0.0467 0.5 0.7500 ** Excluded Spin Group ** + 1 1 0 1 1.0 + 13 1 0 -2.0 0.0467 0.5 1.2500 ** Excluded Spin Group ** + 1 1 0 1 1.0 + 14 1 0 2.0 0.0467 0.5 1.2500 ** Excluded Spin Group ** + 1 1 0 2 0.0 + 15 1 0 1.0 0.0467 0.5 0.7500 ** Excluded Spin Group ** + 1 1 0 2 1.0 + 16 1 0 2.0 0.0467 0.5 1.2500 ** Excluded Spin Group ** + 1 1 0 2 1.0 + 17 1 0 3.0 0.0467 0.5 1.7500 ** Excluded Spin Group ** + 1 1 0 2 1.0 + 18 1 0 0.5 0.0310 0.0 1.0000 ** Excluded Spin Group ** + 1 1 0 0 0.5 + 19 1 0 -0.5 0.0310 0.0 1.0000 ** Excluded Spin Group ** + 1 1 0 1 0.5 + 20 1 0 -1.5 0.0310 0.0 2.0000 ** Excluded Spin Group ** + 1 1 0 1 0.5 + 21 1 0 1.5 0.0310 0.0 2.0000 ** Excluded Spin Group ** + 1 1 0 2 0.5 + 22 1 0 2.5 0.0310 0.0 3.0000 ** Excluded Spin Group ** + 1 1 0 2 0.5 + 23 1 0 0.5 2.0000 0.0 1.0000 ** Excluded Spin Group ** + 1 1 0 0 0.5 + 24 1 0 -0.5 2.0000 0.0 1.0000 ** Excluded Spin Group ** + 1 1 0 1 0.5 + 25 1 0 -1.5 2.0000 0.0 2.0000 ** Excluded Spin Group ** + 1 1 0 1 0.5 + 26 1 0 1.5 2.0000 0.0 2.0000 ** Excluded Spin Group ** + 1 1 0 2 0.5 + 27 1 0 2.5 2.0000 0.0 3.0000 ** Excluded Spin Group ** + 1 1 0 2 0.5 + 28 1 0 -2.5 2.0000 0.0 3.0000 ** Excluded Spin Group ** + 1 1 0 3 0.5 + 29 1 0 -3.5 2.0000 0.0 4.0000 ** Excluded Spin Group ** + 1 1 0 3 0.5 + +__________________________ + group channel Enbnd Echan z1 z2 m1 m2 + 1 1 0.00000 0.00000 0 0 27.976929 1.008665 + 2 0.00000 1.843140E+06 0 0 27.976929 1.008665 + 2 1 0.00000 0.00000 0 0 27.976929 1.008665 + 2 0.00000 1.843140E+06 0 0 27.976929 1.008665 + 3 1 0.00000 0.00000 0 0 27.976929 1.008665 + 2 0.00000 1.843140E+06 0 0 27.976929 1.008665 + 4 1 0.00000 0.00000 0 0 27.976929 1.008665 + 2 0.00000 1.843140E+06 0 0 27.976929 1.008665 + 3 0.00000 1.843140E+06 0 0 27.976929 1.008665 + 5 1 0.00000 0.00000 0 0 27.976929 1.008665 + 2 0.00000 1.843140E+06 0 0 27.976929 1.008665 + 3 0.00000 1.843140E+06 0 0 27.976929 1.008665 + 6 1 0.00000 0.00000 0 0 27.976929 1.008665 + 2 0.00000 1.843140E+06 0 0 27.976929 1.008665 + 3 0.00000 1.843140E+06 0 0 27.976929 1.008665 + 7 1 0.00000 0.00000 0 0 27.976929 1.008665 + 2 0.00000 1.843140E+06 0 0 27.976929 1.008665 + 3 0.00000 1.843140E+06 0 0 27.976929 1.008665 + 8 1 0.00000 0.00000 0 0 28.976496 1.008665 + 9 1 0.00000 0.00000 0 0 28.976496 1.008665 + 10 1 0.00000 0.00000 0 0 28.976496 1.008665 + 11 1 0.00000 0.00000 0 0 28.976496 1.008665 + 12 1 0.00000 0.00000 0 0 28.976496 1.008665 + 13 1 0.00000 0.00000 0 0 28.976496 1.008665 + 14 1 0.00000 0.00000 0 0 28.976496 1.008665 + 15 1 0.00000 0.00000 0 0 28.976496 1.008665 + 16 1 0.00000 0.00000 0 0 28.976496 1.008665 + 17 1 0.00000 0.00000 0 0 28.976496 1.008665 + 18 1 0.00000 0.00000 0 0 29.973772 1.008665 + 19 1 0.00000 0.00000 0 0 29.973772 1.008665 + 20 1 0.00000 0.00000 0 0 29.973772 1.008665 + 21 1 0.00000 0.00000 0 0 29.973772 1.008665 + 22 1 0.00000 0.00000 0 0 29.973772 1.008665 + 23 1 0.00000 0.00000 0 0 16.000000 1.008665 + 24 1 0.00000 0.00000 0 0 16.000000 1.008665 + 25 1 0.00000 0.00000 0 0 16.000000 1.008665 + 26 1 0.00000 0.00000 0 0 16.000000 1.008665 + 27 1 0.00000 0.00000 0 0 16.000000 1.008665 + 28 1 0.00000 0.00000 0 0 16.000000 1.008665 + 29 1 0.00000 0.00000 0 0 16.000000 1.008665 +__________________________ + + ### Array size used for SAMMY-INP is 6829 ### + ### Estimated array size for SAMMY-PAR is 8010 ### + + Total number of resonances is 162 + Number of particle channels is 3 + Number of spin groups is 29 + Number of flagged parametrs is 5 + Number of varied parameters is 5 + Number of nuclides is 4 + ### Array size used for SAMMY-PAR is 8115 ### + ### Estimated array size for SAMMY-NEW is 6486 ### + + + + + ***** INITIAL VALUES FOR PARAMETERS + + SPIN GROUP NUMBER 1 WITH SPIN= 0.5, ABUNDANCE= 1.0000( 3), AND G= 1.0000 + effective radius = 4.1364E+00 4.1364E+00 + "true" radius = 4.1364E+00 4.1364E+00 + ENERGY GAMMA- GAMMA- GAMMA- + GAMMA Inc Chan PPair #2 + L=0 SPIN= 0.5 L=2 SPIN= 1.5 + (eV) (MILLI-EV) (MILLI-EV) (MILLI-EV) + -3.66160E+06 1.5877E+05 3.6985E+09( 1) 0.0000E+00 + -8.73730E+05 1.0253E+03 1.0151E+02( 2) 0.0000E+00 + + + EFFECTIVE RADIUS "TRUE" RADIUS SPIN GROUP NUMBER FOR THESE RADII + # channel numbers + 4.1364200 4.1364200 1 # 1 2 3 + 4 # 1 2 3 + 5 # 1 2 3 + 4.9437200 4.9437200 2 # 1 2 3 + 3 # 1 2 3 + 6 # 1 2 3 + 7 # 1 2 3 + 4.4000000 4.4000000 8 # 1 2 3 + 9 # 1 2 3 + 10 # 1 2 3 + 11 # 1 2 3 + 12 # 1 2 3 + 13 # 1 2 3 + 14 # 1 2 3 + 15 # 1 2 3 + 16 # 1 2 3 + 17 # 1 2 3 + 4.2000000 4.2000000 18 # 1 2 3 + 19 # 1 2 3 + 20 # 1 2 3 + 21 # 1 2 3 + 22 # 1 2 3 + 4.2000000 4.2000000 23 # 1 2 3 + 24 # 1 2 3 + 25 # 1 2 3 + 26 # 1 2 3 + 27 # 1 2 3 + 28 # 1 2 3 + 29 # 1 2 3 + + + Isotopic abundance and mass for each nuclide -- + Nuclide Abundance Mass Spin groups + 1 1.000 ( 3) 27.9769 1 2 3 4 5 6 7 + 2 4.6700E-02( 4) 28.9765 8 9 10 11 12 13 14 15 16 17 + 3 3.1000E-02( 5) 29.9738 18 19 20 21 22 + 4 1.000 16.0000 23 24 25 26 27 28 29 + + + TEMPERATURE THICKNESS + 0.0000E+00 3.4716E-01 + + DELTA-L DELTA-T-GAUS DELTA-T-EXP + 0.0000E+00 0.0000E+00 0.0000E+00 + ### Array size used for SAMMY-NEW is 6979 ### + Emin 300000. is less than the minimum energy in the data set + Emin has been changed to 300001. + First 5 energies= + 300003.5 300026.0 300048.6 300071.2 300093.7 + Last 5 energies= + 1799827. 1799495. 1799163. 1798831. 1798500. + Emax 1.800000E+06 is greater than the maximum energy in the data set + Emax has been changed to 1.799868E+06 + First 5 energies= + 300003.5 300026.0 300048.6 300071.2 300093.7 + Last 5 energies= + 1799827. 1799495. 1799163. 1798831. 1798500. + Emind Emins Eminr Emin + 300000.6537499999 300000.6537499999 300000.6537499999 300000.6537499999 + Emax Emaxr Emaxs Emaxd + 1799868.1037500002 1799868.1037500002 1799868.1037500002 1799868.1037500002 + ### Estimated array size for SAMMY-DAT is 3225 + 32500000 ### + + Energy range of data is from 3.00001E+05 to 1.79987E+06 eV. + Number of experimental data points = 15736 + + ### Array size used for SAMMY-DAT is 100871 ### + ### Estimated array size for SAMMY-THE is 85302 ### + ### Array size used for SAMMY-THE is 85301 ### + ### Estimated array size for SAMMY-XCT is 90806 ### + ### Array size used for SAMMY-XCT is 85319 ### + ### Estimated array size for SAMMY-INT is 116793 ### + ### Array size used for SAMMY-INT is 116794 ### + ### Estimated array size for SAMMY-IPQ is 116779 ### + ### Array size used for SAMMY-IPQ is 116791 ### + ### Estimated array size for SAMMY-FIN is 69569 ### + ### Array size used for SAMMY-FIN is 6451 ### + Total time = 1.22 seconds + Normal finish to SAMMY diff --git a/tests/data/ex012/answers/xa.dot b/tests/data/ex012/answers/xa.dot new file mode 100755 index 0000000..f18f539 --- /dev/null +++ b/tests/data/ex012/answers/xa.dot @@ -0,0 +1,6 @@ +/reset +/xsn1 +/xmin800 +/xmax1100 +/ymin0 +/ymax 12 diff --git a/tests/data/ex012/answers/xb.dot b/tests/data/ex012/answers/xb.dot new file mode 100755 index 0000000..7d1e736 --- /dev/null +++ b/tests/data/ex012/answers/xb.dot @@ -0,0 +1,6 @@ +/reset +/xsn1 +/xmin300 +/xmax1800 +/ymin0 +/ymax 12 diff --git a/tests/data/ex012/answers/ya.dot b/tests/data/ex012/answers/ya.dot new file mode 100755 index 0000000..609d9c3 --- /dev/null +++ b/tests/data/ex012/answers/ya.dot @@ -0,0 +1,2 @@ +/ave6 +dvt /sym3 f1s2,/nosy/dash0.1 f1s4,/nodash f1s5 diff --git a/tests/data/ex012/answers/yb.dot b/tests/data/ex012/answers/yb.dot new file mode 100755 index 0000000..3d716f6 --- /dev/null +++ b/tests/data/ex012/answers/yb.dot @@ -0,0 +1,2 @@ +/ave6 +dvt /dash0.1 f1s4,/nodash f1s2 diff --git a/tests/data/ex012/ex012a b/tests/data/ex012/ex012a new file mode 100755 index 0000000..c6a189a --- /dev/null +++ b/tests/data/ex012/ex012a @@ -0,0 +1,12 @@ +#!/bin/csh + +sammy <x.x +Echo ex012a.par >>x.x +Echo ex012a.dat >>x.x +Echo.>>x.x +sammy < x.x +Rem # pause +move SAMMY.LPT results\ex012aa.lpt +move SAMMY.ODF results\ex012aa.odf +move SAMMY.PAR results\ex012aa.par +del SAM*.* +del x.x diff --git a/tests/data/ex012/ex012a.dat b/tests/data/ex012/ex012a.dat new file mode 100755 index 0000000..facd214 --- /dev/null +++ b/tests/data/ex012/ex012a.dat @@ -0,0 +1,15736 @@ + 300003.47 .2292500 .0133873 + 300026.00 .2215323 .0128452 + 300048.59 .2302640 .0130915 + 300071.16 .2328735 .0135787 + 300093.69 .2419577 .0140825 + 300116.25 .2345796 .0137422 + 300138.84 .2305669 .0132813 + 300161.41 .2259712 .0134183 + 300183.97 .2277306 .0138025 + 300206.59 .2469709 .0140359 + 300229.16 .2206314 .0130591 + 300251.72 .2348713 .0136783 + 300274.28 .2379582 .0136706 + 300296.91 .2330635 .0131666 + 300319.50 .2206179 .0127233 + 300342.06 .2385184 .0133228 + 300364.69 .2155631 .0125304 + 300387.28 .2124882 .0122681 + 300409.88 .2177602 .0125976 + 300432.47 .2333597 .0131408 + 300455.09 .2469652 .0140835 + 300477.69 .2099135 .0119839 + 300500.28 .2544033 .0142339 + 300522.94 .2286495 .0128684 + 300545.53 .2384826 .0132911 + 300568.16 .2236431 .0128137 + 300590.75 .2048245 .0118719 + 300613.41 .2258912 .0127943 + 300636.03 .2421919 .0133666 + 300658.62 .2153071 .0124981 + 300681.31 .2268205 .0129746 + 300703.91 .2397297 .0136752 + 300726.53 .2433622 .0137858 + 300749.16 .2202827 .0129213 + 300771.84 .2353508 .0141258 + 300794.47 .2279203 .0133646 + 300817.09 .2203102 .0129718 + 300839.78 .2303525 .0132047 + 300862.44 .2223270 .0127433 + 300885.06 .2404459 .0137536 + 300907.72 .2211653 .0121984 + 300930.41 .2546839 .0138504 + 300953.06 .2244729 .0127326 + 300975.72 .2293354 .0129864 + 300998.41 .2192420 .0128043 + 301021.06 .2439688 .0141489 + 301043.72 .2213497 .0129600 + 301066.38 .2376293 .0140149 + 301089.09 .2091512 .0123562 + 301111.75 .2520088 .0144137 + 301134.44 .2287815 .0130869 + 301157.16 .2374405 .0135732 + 301179.81 .2684757 .0151606 + 301202.50 .2324723 .0133118 + 301225.22 .2181950 .0128147 + 301247.91 .2199222 .0131287 + 301270.59 .2284996 .0136063 + 301293.28 .2372985 .0145610 + 301316.00 .2099641 .0129718 + 301338.69 .2122077 .0132402 + 301361.41 .2210388 .0137290 + 301384.12 .2166982 .0138158 + 301406.84 .2370421 .0150120 + 301429.53 .1998558 .0129213 + 301452.25 .2411246 .0149904 + 301475.00 .1932315 .0125795 + 301497.72 .2130395 .0138423 + 301520.44 .2312585 .0145955 + 301543.19 .2018342 .0131264 + 301565.91 .2271667 .0144261 + 301588.62 .2142390 .0138663 + 301611.34 .2277877 .0144919 + 301634.12 .2222324 .0137746 + 301656.84 .2077629 .0127650 + 301679.59 .2165272 .0131927 + 301702.34 .2260735 .0134082 + 301725.09 .2055088 .0119913 + 301747.84 .2208310 .0127835 + 301770.56 .2122555 .0128124 + 301793.38 .2383659 .0131967 + 301816.12 .2188647 .0128754 + 301838.84 .2361884 .0140398 + 301861.66 .2534268 .0152951 + 301884.41 .2398978 .0141852 + 301907.16 .2556427 .0148749 + 301929.94 .2406638 .0140133 + 301952.72 .2349771 .0135230 + 301975.50 .2485591 .0149021 + 301998.25 .2234277 .0133836 + 302021.09 .2168551 .0139938 + 302043.84 .2249329 .0139453 + 302066.62 .2515132 .0151627 + 302089.41 .2516092 .0153455 + 302112.22 .2405792 .0148506 + 302135.00 .2304972 .0142592 + 302157.81 .2177217 .0135719 + 302180.62 .2216653 .0139098 + 302203.41 .2319881 .0144435 + 302226.22 .2183494 .0137135 + 302249.00 .2044147 .0128594 + 302271.84 .2415308 .0145873 + 302294.66 .2424692 .0140163 + 302317.47 .2085548 .0123801 + 302340.31 .2249691 .0132172 + 302363.12 .2236261 .0129988 + 302385.94 .2318749 .0129869 + 302408.75 .2231712 .0127378 + 302431.59 .2233677 .0131267 + 302454.41 .2316143 .0133818 + 302477.25 .2203060 .0132405 + 302500.09 .2180836 .0129709 + 302522.94 .2247069 .0135056 + 302545.78 .2287291 .0139265 + 302568.59 .2314105 .0135309 + 302591.47 .2387127 .0140187 + 302614.31 .2121819 .0129112 + 302637.16 .2134534 .0132527 + 302660.03 .2377499 .0145537 + 302682.88 .2326792 .0142575 + 302705.72 .2260792 .0138919 + 302728.62 .2203330 .0136793 + 302751.47 .2213816 .0138306 + 302774.34 .2169646 .0134995 + 302797.19 .2165934 .0134923 + 302820.09 .2097391 .0128132 + 302842.97 .2358022 .0141566 + 302865.81 .2180316 .0133507 + 302888.75 .2363621 .0141407 + 302911.59 .1998733 .0122892 + 302934.47 .2160944 .0130055 + 302957.34 .2251180 .0135691 + 302980.28 .1985037 .0119614 + 303003.16 .2193124 .0131902 + 303026.03 .2153660 .0132022 + 303048.97 .1861664 .0116649 + 303071.88 .2089777 .0131640 + 303094.75 .2079166 .0132640 + 303117.66 .1818952 .0122761 + 303140.59 .1842513 .0127672 + 303163.50 .1648044 .0112593 + 303186.41 .2138243 .0140748 + 303209.34 .1903205 .0128681 + 303232.25 .2015662 .0137235 + 303255.16 .2087357 .0136542 + 303278.06 .2208096 .0141338 + 303301.03 .2345886 .0145278 + 303323.94 .1995058 .0129767 + 303346.88 .2274865 .0142441 + 303369.84 .2299893 .0142234 + 303392.75 .2138296 .0132048 + 303415.69 .2283699 .0138832 + 303438.62 .2233310 .0136633 + 303461.59 .2294620 .0137593 + 303484.53 .2446786 .0143325 + 303507.47 .1968023 .0122155 + 303530.47 .2538761 .0151354 + 303553.41 .2106204 .0131097 + 303576.34 .2412126 .0146220 + 303599.28 .2248690 .0138452 + 303622.28 .2154626 .0134699 + 303645.25 .2444872 .0150860 + 303668.19 .2285467 .0144629 + 303691.22 .2359365 .0147443 + 303714.16 .2095388 .0135858 + 303737.12 .2044719 .0132367 + 303760.09 .2280706 .0143464 + 303783.12 .2126039 .0136841 + 303806.09 .2225256 .0138144 + 303829.06 .2324956 .0140758 + 303852.09 .2170113 .0134085 + 303875.06 .2406705 .0138002 + 303898.03 .2124307 .0127062 + 303921.03 .2086032 .0127700 + 303944.06 .2258466 .0135132 + 303967.06 .2137325 .0125500 + 303990.03 .2248299 .0133413 + 304013.09 .2422659 .0136992 + 304036.09 .2340100 .0138230 + 304059.09 .2578019 .0148457 + 304082.12 .2137102 .0129289 + 304105.12 .2149411 .0130657 + 304128.16 .2616212 .0152219 + 304151.16 .2187860 .0133305 + 304174.22 .2288021 .0139874 + 304197.22 .2130396 .0134335 + 304220.25 .2298827 .0139692 + 304243.31 .2060837 .0132926 + 304266.34 .2347265 .0141375 + 304289.38 .2461493 .0149067 + 304312.41 .2315582 .0142366 + 304335.47 .2172916 .0133910 + 304358.50 .1983117 .0127498 + 304381.56 .2156705 .0134846 + 304404.62 .2421807 .0147466 + 304427.69 .2403811 .0145267 + 304450.72 .2216188 .0141090 + 304473.78 .2219099 .0138876 + 304496.88 .2636900 .0153966 + 304519.91 .2204794 .0134838 + 304542.97 .2229206 .0141203 + 304566.06 .2263239 .0138339 + 304589.12 .2304588 .0141406 + 304612.19 .2127717 .0132048 + 304635.28 .2512130 .0150092 + 304658.38 .2297522 .0139787 + 304681.44 .2339867 .0146258 + 304704.53 .2195938 .0142807 + 304727.66 .2213782 .0139894 + 304750.72 .2246249 .0142429 + 304773.81 .2404231 .0153885 + 304796.91 .2371416 .0148923 + 304820.03 .2348077 .0145432 + 304843.12 .2340480 .0144896 + 304866.22 .2163281 .0138300 + 304889.34 .2472805 .0149085 + 304912.44 .2244081 .0136461 + 304935.53 .2388431 .0142919 + 304958.66 .2610597 .0155328 + 304981.81 .2076856 .0129966 + 305004.91 .2190928 .0130895 + 305028.03 .2589821 .0146569 + 305051.19 .2359280 .0133208 + 305074.28 .2290339 .0130573 + 305097.41 .2400580 .0135873 + 305120.53 .2302664 .0133250 + 305143.69 .2553238 .0147841 + 305166.84 .2479571 .0147497 + 305189.97 .2325959 .0141383 + 305213.12 .2264943 .0139208 + 305236.28 .2191847 .0131641 + 305259.41 .2284116 .0136350 + 305282.56 .2528657 .0149739 + 305305.72 .2381003 .0142412 + 305328.88 .2568614 .0147496 + 305352.03 .2153230 .0131452 + 305375.22 .2350199 .0149730 + 305398.38 .2315363 .0143126 + 305421.53 .2169550 .0131865 + 305444.72 .2352017 .0144143 + 305467.91 .2183686 .0137344 + 305491.06 .2284067 .0139787 + 305514.22 .2346413 .0142612 + 305537.44 .2359769 .0146860 + 305560.62 .2527184 .0152653 + 305583.78 .2445949 .0148952 + 305607.00 .2515290 .0153398 + 305630.19 .2233567 .0140502 + 305653.38 .2510514 .0150924 + 305676.56 .2456984 .0147430 + 305699.78 .2328890 .0135961 + 305722.97 .2504741 .0147575 + 305746.16 .2631843 .0151508 + 305769.41 .2630939 .0148268 + 305792.59 .2377788 .0132755 + 305815.81 .2500334 .0138632 + 305839.00 .2302817 .0128709 + 305862.25 .2519363 .0139693 + 305885.47 .2416559 .0130819 + 305908.69 .2320420 .0126747 + 305931.94 .2123714 .0122009 + 305955.16 .2455109 .0134610 + 305978.38 .2443215 .0134865 + 306001.59 .2328513 .0131379 + 306024.88 .2296234 .0131570 + 306048.09 .2512349 .0137777 + 306071.31 .2147581 .0124927 + 306094.59 .2489076 .0141780 + 306117.84 .2347273 .0136031 + 306141.06 .2310021 .0134872 + 306164.31 .2238071 .0134970 + 306187.59 .2390836 .0144372 + 306210.84 .2249413 .0138313 + 306234.09 .2404373 .0147025 + 306257.38 .2384058 .0146975 + 306280.66 .2668517 .0162719 + 306303.91 .2453436 .0150658 + 306327.16 .2331061 .0139722 + 306350.47 .2440528 .0146486 + 306373.72 .2362311 .0142224 + 306397.00 .2415376 .0142431 + 306420.31 .2485788 .0145942 + 306443.59 .2451244 .0142593 + 306466.84 .2402819 .0142110 + 306490.12 .2168447 .0129543 + 306513.47 .2590720 .0152302 + 306536.75 .2298355 .0138926 + 306560.03 .2620545 .0146793 + 306583.34 .2692285 .0155350 + 306606.66 .2307697 .0132474 + 306629.94 .2235389 .0129930 + 306653.25 .2067291 .0121636 + 306676.59 .2356628 .0135839 + 306699.88 .2303251 .0135417 + 306723.19 .2151920 .0125368 + 306746.53 .2475443 .0139783 + 306769.84 .2622532 .0145511 + 306793.16 .2279301 .0136023 + 306816.47 .2459335 .0147591 + 306839.84 .2326460 .0140129 + 306863.16 .2567912 .0153351 + 306886.47 .2449015 .0146883 + 306909.84 .2444502 .0144932 + 306933.19 .2404191 .0143271 + 306956.50 .2363059 .0137403 + 306979.88 .2320702 .0134600 + 307003.22 .2461622 .0143627 + 307026.56 .2277022 .0130936 + 307049.91 .2399624 .0137060 + 307073.28 .2296335 .0129757 + 307096.62 .2370496 .0133779 + 307120.00 .2749020 .0149272 + 307143.38 .2248214 .0129056 + 307166.75 .2484526 .0139438 + 307190.09 .2615186 .0148883 + 307213.47 .2608885 .0152084 + 307236.88 .2493424 .0144210 + 307260.22 .2463318 .0142888 + 307283.59 .2272854 .0137174 + 307307.00 .2483673 .0144071 + 307330.38 .2483022 .0145231 + 307353.75 .2479309 .0141143 + 307377.12 .2124738 .0127425 + 307400.56 .2269875 .0132048 + 307423.94 .2332463 .0137715 + 307447.34 .2281526 .0132980 + 307470.78 .2412959 .0140049 + 307494.16 .2302413 .0130147 + 307517.56 .2445428 .0140055 + 307540.94 .2406319 .0137497 + 307564.41 .2360436 .0135450 + 307587.81 .2623392 .0146817 + 307611.22 .2377462 .0132734 + 307634.66 .2450978 .0135066 + 307658.06 .2323261 .0132096 + 307681.47 .2370005 .0131104 + 307704.91 .2295310 .0129248 + 307728.38 .2595690 .0140411 + 307751.78 .2374769 .0128104 + 307775.22 .2342343 .0127435 + 307798.69 .2297844 .0126017 + 307822.09 .2557586 .0136803 + 307845.53 .2500913 .0132151 + 307868.97 .2375326 .0129620 + 307892.47 .2310539 .0128912 + 307915.91 .2351994 .0127764 + 307939.34 .2705987 .0151186 + 307962.84 .2331346 .0134657 + 307986.28 .2348112 .0138083 + 308009.72 .2734185 .0152199 + 308033.19 .2351924 .0140787 + 308056.69 .2542499 .0149049 + 308080.16 .2485073 .0148239 + 308103.59 .2381614 .0143550 + 308127.12 .2484968 .0147681 + 308150.59 .2256083 .0138778 + 308174.06 .2324762 .0138759 + 308197.53 .2500751 .0149312 + 308221.03 .2405911 .0142143 + 308244.53 .2429634 .0139343 + 308268.00 .2209012 .0131608 + 308291.53 .2477022 .0144483 + 308315.00 .2362055 .0136357 + 308338.50 .2291273 .0132819 + 308362.03 .2380076 .0137544 + 308385.53 .2243090 .0134260 + 308409.03 .2393772 .0138448 + 308432.53 .2206868 .0131464 + 308456.06 .2453741 .0138072 + 308479.59 .2351784 .0138843 + 308503.09 .2352827 .0133705 + 308526.62 .2352470 .0134771 + 308550.16 .2235292 .0125988 + 308573.66 .2029460 .0115640 + 308597.19 .2254049 .0125754 + 308620.75 .2492232 .0135519 + 308644.28 .2453331 .0133933 + 308667.81 .2580473 .0139183 + 308691.38 .2329531 .0129687 + 308714.91 .2241671 .0125820 + 308738.44 .2500493 .0138493 + 308761.97 .2451156 .0136247 + 308785.56 .2322120 .0127949 + 308809.09 .2421047 .0134627 + 308832.66 .2471984 .0141634 + 308856.25 .2341207 .0133413 + 308879.78 .2628265 .0147932 + 308903.34 .2585307 .0146599 + 308926.91 .2407183 .0133166 + 308950.50 .2474951 .0137464 + 308974.06 .2465052 .0138801 + 308997.62 .2372046 .0140733 + 309021.25 .2406115 .0139099 + 309044.81 .2663166 .0148745 + 309068.38 .2621577 .0147178 + 309091.97 .2292931 .0134560 + 309115.59 .2583478 .0146972 + 309139.16 .2453217 .0139443 + 309162.75 .2489327 .0142120 + 309186.38 .2279812 .0133684 + 309209.97 .2435772 .0139422 + 309233.56 .2513336 .0144854 + 309257.16 .2252292 .0130097 + 309280.78 .2354787 .0133832 + 309304.38 .2395277 .0135530 + 309328.00 .2406005 .0139092 + 309351.62 .2597256 .0147543 + 309375.25 .2449764 .0137663 + 309398.84 .2581388 .0143960 + 309422.47 .2478863 .0141113 + 309446.12 .2457691 .0136219 + 309469.75 .2328590 .0133840 + 309493.38 .2365221 .0139402 + 309517.03 .2411897 .0142723 + 309540.66 .2379397 .0147846 + 309564.28 .2197405 .0137925 + 309587.91 .2165356 .0135650 + 309611.59 .2283364 .0139363 + 309635.22 .2514236 .0151371 + 309658.88 .2477804 .0148672 + 309682.56 .2269326 .0138389 + 309706.22 .2422793 .0144176 + 309729.84 .2405525 .0142117 + 309753.50 .2493629 .0144055 + 309777.19 .2215567 .0129255 + 309800.84 .2263590 .0132440 + 309824.50 .2454745 .0138756 + 309848.22 .2265718 .0130821 + 309871.88 .2637061 .0145516 + 309895.56 .2390976 .0136338 + 309919.28 .2344477 .0130491 + 309942.94 .2354800 .0131146 + 309966.62 .2246066 .0126243 + 309990.28 .2265515 .0127778 + 310014.03 .2479829 .0137182 + 310037.69 .2492706 .0141058 + 310061.38 .2401732 .0135183 + 310085.12 .2456390 .0138089 + 310108.81 .2474887 .0143656 + 310132.50 .2432464 .0136399 + 310156.19 .2419891 .0136658 + 310179.94 .2413675 .0139434 + 310203.66 .2520957 .0143538 + 310227.34 .2524461 .0145253 + 310251.09 .2386988 .0133786 + 310274.81 .2453850 .0138854 + 310298.53 .2432054 .0139826 + 310322.25 .2356646 .0135360 + 310346.00 .2406026 .0134706 + 310369.72 .2448466 .0134051 + 310393.44 .2324615 .0131577 + 310417.22 .2193644 .0119805 + 310440.94 .2335308 .0127947 + 310464.69 .2236684 .0124376 + 310488.41 .2599829 .0135680 + 310512.19 .2629665 .0141956 + 310535.94 .2400811 .0133780 + 310559.69 .2164844 .0125753 + 310583.47 .2391118 .0134803 + 310607.22 .2371803 .0137161 + 310630.97 .2430460 .0137032 + 310654.72 .2718051 .0148372 + 310678.53 .2319331 .0131086 + 310702.28 .2650067 .0146961 + 310726.06 .2279224 .0134310 + 310749.84 .2395381 .0135845 + 310773.62 .2205238 .0128572 + 310797.41 .2533093 .0144332 + 310821.16 .2438131 .0132567 + 310845.00 .2281688 .0130776 + 310868.78 .2437667 .0134949 + 310892.56 .2495682 .0136728 + 310916.38 .2532734 .0139353 + 310940.16 .2491617 .0137781 + 310963.94 .2309947 .0130038 + 310987.75 .2139685 .0122603 + 311011.59 .2487724 .0136949 + 311035.38 .2622052 .0140222 + 311059.19 .2328344 .0130627 + 311083.03 .2564060 .0138165 + 311106.84 .2267441 .0131249 + 311130.66 .2425226 .0140197 + 311154.47 .2374650 .0131540 + 311178.31 .2229146 .0128890 + 311202.12 .2414689 .0138043 + 311225.94 .2471470 .0139682 + 311249.81 .2590975 .0141850 + 311273.62 .2450249 .0135020 + 311297.47 .2502434 .0132632 + 311321.34 .2260257 .0123542 + 311345.19 .2332523 .0128462 + 311369.00 .2330327 .0127772 + 311392.84 .2347383 .0127478 + 311416.75 .2498733 .0135365 + 311440.59 .2538915 .0136747 + 311464.44 .2346646 .0127836 + 311488.31 .2332851 .0129326 + 311512.19 .2488001 .0138295 + 311536.03 .2451961 .0139519 + 311559.88 .2295396 .0130596 + 311583.78 .2393276 .0137602 + 311607.66 .2419554 .0137884 + 311631.53 .2619991 .0149869 + 311655.44 .2215153 .0133402 + 311679.31 .2791848 .0157420 + 311703.19 .2605460 .0150970 + 311727.06 .2512419 .0145470 + 311750.97 .2544685 .0147789 + 311774.88 .2529614 .0142031 + 311798.75 .2402377 .0132148 + 311822.69 .2418280 .0136400 + 311846.56 .2144898 .0126320 + 311870.47 .2248180 .0128142 + 311894.38 .2513565 .0141936 + 311918.31 .2504555 .0140727 + 311942.22 .2247660 .0125349 + 311966.12 .2400147 .0134929 + 311990.06 .2244216 .0130036 + 312013.97 .2422616 .0137925 + 312037.88 .2263127 .0130965 + 312061.81 .2483899 .0145991 + 312085.78 .2363575 .0136456 + 312109.69 .2436700 .0139644 + 312133.62 .2417107 .0142024 + 312157.59 .2527036 .0145929 + 312181.50 .2578524 .0147143 + 312205.44 .2368715 .0136311 + 312229.38 .2554758 .0143970 + 312253.38 .2419066 .0138329 + 312277.31 .2140675 .0121079 + 312301.25 .2653614 .0139314 + 312325.22 .2550589 .0136237 + 312349.19 .2374999 .0128251 + 312373.12 .2627971 .0142279 + 312397.09 .2419278 .0132085 + 312421.09 .2426018 .0135090 + 312445.06 .2475447 .0132967 + 312469.00 .2380680 .0131921 + 312493.03 .2308730 .0131307 + 312517.00 .2282836 .0127012 + 312540.97 .2589745 .0140754 + 312564.94 .2537060 .0139626 + 312588.97 .2408346 .0130445 + 312612.94 .2620379 .0141237 + 312636.91 .2293912 .0126455 + 312660.94 .2426825 .0133830 + 312684.94 .2471209 .0132706 + 312708.91 .2439359 .0133904 + 312732.97 .2416289 .0133886 + 312756.97 .2540856 .0136867 + 312780.94 .2143019 .0123263 + 312804.94 .2597364 .0137889 + 312829.00 .2489888 .0135232 + 312853.00 .2086378 .0119589 + 312877.03 .2722776 .0146167 + 312901.06 .2433569 .0134981 + 312925.09 .2502528 .0139980 + 312949.09 .2386400 .0134499 + 312973.12 .2522943 .0144819 + 312997.19 .2481362 .0141116 + 313021.22 .2101596 .0127034 + 313045.25 .2344542 .0133321 + 313069.31 .2431951 .0140641 + 313093.38 .2369943 .0129974 + 313117.41 .2754500 .0150218 + 313141.44 .2485491 .0138585 + 313165.53 .2368723 .0134120 + 313189.56 .2323395 .0136934 + 313213.62 .2344743 .0135700 + 313237.72 .2538762 .0146877 + 313261.78 .2194890 .0133788 + 313285.81 .2494919 .0147629 + 313309.88 .2185958 .0132636 + 313334.00 .2630575 .0154082 + 313358.06 .2325158 .0139677 + 313382.12 .2418499 .0140920 + 313406.25 .2235371 .0132879 + 313430.31 .2515316 .0141577 + 313454.38 .2539157 .0139758 + 313478.47 .2282225 .0128118 + 313502.59 .2234485 .0124936 + 313526.69 .2538861 .0137160 + 313550.75 .2282614 .0124398 + 313574.91 .2626207 .0141175 + 313599.00 .2733639 .0147568 + 313623.09 .2238582 .0124914 + 313647.19 .2702587 .0140958 + 313671.31 .2623422 .0141852 + 313695.44 .2533152 .0141330 + 313719.53 .2285231 .0128165 + 313743.69 .2312340 .0128031 + 313767.81 .2597671 .0145004 + 313791.91 .2738922 .0150610 + 313816.03 .2458315 .0136405 + 313840.19 .2597300 .0142992 + 313864.31 .2243231 .0128425 + 313888.44 .2510083 .0137778 + 313912.62 .2358719 .0130675 + 313936.75 .2488758 .0140487 + 313960.88 .2606319 .0141647 + 313985.03 .2322193 .0132640 + 314009.22 .2535434 .0141476 + 314033.34 .2362218 .0132646 + 314057.50 .2405890 .0136525 + 314081.69 .2435822 .0135863 + 314105.84 .2569372 .0141671 + 314130.00 .2647122 .0147553 + 314154.16 .2408720 .0138616 + 314178.34 .2426419 .0137389 + 314202.53 .2431518 .0138032 + 314226.69 .2462544 .0137570 + 314250.91 .2583353 .0145984 + 314275.06 .2302048 .0131793 + 314299.25 .2371070 .0138266 + 314323.47 .2436207 .0139611 + 314347.62 .2420155 .0137294 + 314371.81 .2244155 .0125267 + 314396.00 .2403986 .0135175 + 314420.25 .2508839 .0138430 + 314444.44 .2433524 .0135716 + 314468.62 .2408225 .0133958 + 314492.88 .2494264 .0136782 + 314517.06 .2347887 .0134314 + 314541.25 .2325265 .0129272 + 314565.47 .2820008 .0155307 + 314589.72 .2591717 .0144156 + 314613.94 .2448420 .0138502 + 314638.12 .2152452 .0125401 + 314662.41 .2657998 .0148890 + 314686.62 .2620818 .0149418 + 314710.84 .2515480 .0143668 + 314735.06 .2397550 .0138206 + 314759.34 .2516078 .0144699 + 314783.56 .2528704 .0143719 + 314807.78 .2399863 .0136759 + 314832.06 .2307105 .0128407 + 314856.31 .2558204 .0136840 + 314880.56 .2306098 .0129351 + 314904.78 .2531620 .0139873 + 314929.09 .2569186 .0142260 + 314953.34 .2521705 .0143749 + 314977.59 .2501273 .0140052 + 315001.88 .2483723 .0144243 + 315026.16 .2307164 .0133866 + 315050.41 .2411182 .0138293 + 315074.66 .2576817 .0145239 + 315098.97 .2410679 .0134408 + 315123.25 .2331351 .0132772 + 315147.53 .2149610 .0125997 + 315171.84 .2431633 .0134712 + 315196.12 .2829486 .0153882 + 315220.41 .2442063 .0138402 + 315244.69 .2614884 .0143061 + 315269.00 .2550301 .0140463 + 315293.28 .2437139 .0135650 + 315317.59 .2367464 .0132096 + 315341.94 .2466775 .0138296 + 315366.22 .2385813 .0132679 + 315390.53 .2673887 .0147706 + 315414.81 .2712841 .0147593 + 315439.16 .2401120 .0134690 + 315463.47 .2736957 .0149870 + 315487.78 .2634424 .0148330 + 315512.16 .2471270 .0136346 + 315536.47 .2399428 .0132674 + 315560.78 .2324875 .0128680 + 315585.09 .2474118 .0134669 + 315609.47 .2427216 .0130005 + 315633.81 .2523165 .0134689 + 315658.12 .2330873 .0126456 + 315682.50 .2540317 .0132867 + 315706.84 .2422586 .0134577 + 315731.19 .2528579 .0133829 + 315755.56 .2355116 .0130305 + 315779.91 .2478922 .0133181 + 315804.25 .2358812 .0136792 + 315828.62 .2512383 .0144123 + 315853.00 .2308168 .0135409 + 315877.38 .2567149 .0149993 + 315901.72 .2554310 .0152605 + 315926.12 .2609927 .0150398 + 315950.50 .2351605 .0135668 + 315974.88 .2352483 .0137031 + 315999.22 .2465881 .0138392 + 316023.66 .2620011 .0148700 + 316048.03 .2468877 .0140302 + 316072.41 .2498605 .0143547 + 316096.84 .2482236 .0141332 + 316121.22 .2654283 .0148013 + 316145.59 .2404138 .0137831 + 316170.00 .2370724 .0137089 + 316194.44 .2424228 .0138826 + 316218.81 .2674679 .0148378 + 316243.22 .2486202 .0141752 + 316267.66 .2536644 .0143432 + 316292.06 .2378383 .0136305 + 316316.47 .2510276 .0143327 + 316340.88 .2610275 .0147087 + 316365.34 .2564965 .0147591 + 316389.75 .2748948 .0154457 + 316414.19 .2582854 .0145951 + 316438.66 .2248972 .0133626 + 316463.06 .2336951 .0139233 + 316487.50 .2341283 .0136617 + 316511.91 .2209913 .0128406 + 316536.41 .2584945 .0146902 + 316560.84 .2421282 .0138313 + 316585.28 .2570202 .0143863 + 316609.75 .2404854 .0136148 + 316634.19 .2460137 .0134781 + 316658.66 .2363933 .0129458 + 316683.09 .2413246 .0133692 + 316707.59 .2513262 .0138123 + 316732.03 .2246241 .0126833 + 316756.50 .2526064 .0136089 + 316781.00 .2814456 .0154323 + 316805.47 .2373473 .0132478 + 316829.94 .2485768 .0136970 + 316854.41 .2347062 .0130366 + 316878.94 .2509943 .0144461 + 316903.41 .2481579 .0138485 + 316927.88 .2369795 .0132833 + 316952.41 .2529133 .0139124 + 316976.88 .2403472 .0137468 + 317001.38 .2548794 .0140072 + 317025.84 .2418105 .0133137 + 317050.41 .2405132 .0134947 + 317074.88 .2362049 .0133233 + 317099.38 .2525577 .0140237 + 317123.94 .2527448 .0138871 + 317148.44 .2727368 .0148657 + 317172.94 .2610052 .0147072 + 317197.44 .2487648 .0139025 + 317222.00 .2486288 .0139704 + 317246.53 .2557957 .0142457 + 317271.03 .2572172 .0137973 + 317295.59 .2518854 .0141336 + 317320.12 .2360761 .0131669 + 317344.66 .2224808 .0126187 + 317369.22 .2753645 .0150012 + 317393.75 .2574712 .0139814 + 317418.28 .2563298 .0141434 + 317442.81 .2412013 .0134938 + 317467.41 .2694593 .0148716 + 317491.94 .2673435 .0152880 + 317516.50 .2443233 .0138165 + 317541.09 .2348676 .0138460 + 317565.66 .2299904 .0137070 + 317590.19 .2447320 .0145120 + 317614.75 .2298672 .0137866 + 317639.38 .2350086 .0137203 + 317663.91 .2420500 .0141391 + 317688.50 .2358899 .0135986 + 317713.09 .2539204 .0144080 + 317737.69 .2606483 .0146360 + 317762.25 .2282488 .0127701 + 317786.81 .2813401 .0149059 + 317811.44 .2447238 .0133132 + 317836.03 .2367130 .0133409 + 317860.62 .2353892 .0131964 + 317885.25 .2436264 .0133285 + 317909.84 .2459256 .0134021 + 317934.44 .2285123 .0128887 + 317959.03 .2289584 .0127438 + 317983.69 .2720629 .0144066 + 318008.28 .2459422 .0132790 + 318032.88 .2560815 .0138382 + 318057.53 .2474286 .0134539 + 318082.16 .2381766 .0131275 + 318106.75 .2092849 .0121938 + 318131.38 .2843398 .0152648 + 318156.03 .2533161 .0141637 + 318180.66 .2499402 .0142777 + 318205.28 .2632342 .0142985 + 318229.97 .2550285 .0143838 + 318254.59 .2563782 .0145034 + 318279.22 .2713527 .0154666 + 318303.88 .2432488 .0140344 + 318328.56 .2364171 .0138816 + 318353.19 .2481063 .0147779 + 318377.84 .2420542 .0146042 + 318402.53 .2209534 .0132152 + 318427.19 .2425990 .0141587 + 318451.84 .2488969 .0148875 + 318476.50 .2380741 .0145954 + 318501.22 .2570776 .0152790 + 318525.88 .2697431 .0154638 + 318550.53 .2601914 .0149694 + 318575.25 .2620360 .0145991 + 318599.91 .2253189 .0130626 + 318624.59 .2710441 .0148192 + 318649.28 .2500471 .0136598 + 318674.00 .2459370 .0131977 + 318698.69 .2618451 .0139177 + 318723.38 .2543655 .0133577 + 318748.09 .2548721 .0132243 + 318772.78 .2455758 .0132427 + 318797.47 .2355933 .0125907 + 318822.22 .2302523 .0123035 + 318846.94 .2415009 .0130183 + 318871.62 .2253746 .0124757 + 318896.34 .2658057 .0140651 + 318921.09 .2371871 .0129267 + 318945.81 .2638795 .0141252 + 318970.50 .2614709 .0140044 + 318995.28 .2708957 .0144181 + 319020.00 .2665105 .0142737 + 319044.72 .2858658 .0146793 + 319069.44 .2407864 .0131649 + 319094.22 .2322009 .0127940 + 319118.94 .2604544 .0139694 + 319143.69 .2506660 .0139032 + 319168.47 .2651119 .0146871 + 319193.22 .2605620 .0146463 + 319217.94 .2784719 .0151973 + 319242.69 .2318116 .0133468 + 319267.50 .2346550 .0131938 + 319292.25 .2778234 .0148455 + 319317.00 .2461485 .0137051 + 319341.81 .2552884 .0135973 + 319366.56 .2418108 .0125566 + 319391.31 .2551700 .0132669 + 319416.09 .2577817 .0133481 + 319440.91 .2429916 .0124617 + 319465.69 .2362064 .0123669 + 319490.47 .2677795 .0134787 + 319515.28 .2465092 .0128608 + 319540.06 .2626947 .0139156 + 319564.84 .2587723 .0139491 + 319589.62 .2505684 .0134422 + 319614.47 .2457759 .0132551 + 319639.25 .2594940 .0143141 + 319664.06 .2713466 .0146892 + 319688.91 .2549804 .0141479 + 319713.69 .2702574 .0151286 + 319738.50 .2378228 .0134733 + 319763.31 .2472945 .0143525 + 319788.16 .2361165 .0130261 + 319812.97 .2421848 .0137716 + 319837.78 .2715124 .0149869 + 319862.66 .2738196 .0151658 + 319887.47 .2649391 .0146452 + 319912.28 .2556146 .0143899 + 319937.12 .2651697 .0148482 + 319962.00 .2713522 .0151832 + 319986.84 .2477338 .0139436 + 320011.66 .2511119 .0141934 + 320036.56 .2767274 .0153844 + 320061.41 .2231202 .0127492 + 320086.25 .2498649 .0139730 + 320111.09 .2336125 .0133858 + 320135.97 .2580584 .0144845 + 320160.84 .2487928 .0142351 + 320185.69 .2411725 .0139303 + 320210.59 .2498478 .0141272 + 320235.47 .2325411 .0130000 + 320260.31 .2607288 .0141706 + 320285.22 .2683408 .0148158 + 320310.09 .2523411 .0143211 + 320334.97 .2496425 .0144238 + 320359.84 .2671779 .0148979 + 320384.78 .2701390 .0154208 + 320409.66 .2442935 .0141700 + 320434.53 .2451062 .0145015 + 320459.47 .2436659 .0139317 + 320484.38 .2245702 .0132563 + 320509.25 .2483543 .0136684 + 320534.16 .2343371 .0133862 + 320559.09 .2556808 .0140725 + 320584.00 .2475538 .0137798 + 320608.91 .2623851 .0143477 + 320633.88 .2628397 .0141591 + 320658.78 .2431925 .0134876 + 320683.69 .2519940 .0137389 + 320708.59 .2623734 .0142013 + 320733.56 .2384600 .0135145 + 320758.50 .2488287 .0135552 + 320783.41 .2697910 .0142950 + 320808.41 .2670777 .0140887 + 320833.31 .2625259 .0143862 + 320858.25 .2637576 .0141456 + 320883.19 .2656402 .0143475 + 320908.19 .2626346 .0140623 + 320933.12 .2891070 .0151989 + 320958.06 .2748606 .0144679 + 320983.06 .2454360 .0133715 + 321008.00 .2330397 .0130463 + 321032.97 .2461563 .0140143 + 321057.94 .2482532 .0140083 + 321082.94 .2393795 .0135278 + 321107.91 .2461131 .0137028 + 321132.88 .2522947 .0147379 + 321157.88 .2610678 .0147435 + 321182.84 .2739120 .0152514 + 321207.81 .2622641 .0152825 + 321232.81 .2705359 .0157843 + 321257.84 .2579057 .0150082 + 321282.81 .2427574 .0143604 + 321307.81 .2184807 .0131677 + 321332.84 .2561948 .0148590 + 321357.81 .2533676 .0146709 + 321382.81 .2556708 .0148938 + 321407.81 .2459783 .0140831 + 321432.88 .2592873 .0144850 + 321457.88 .2497208 .0140875 + 321482.88 .2739647 .0150654 + 321507.94 .2641431 .0144288 + 321532.94 .2670451 .0148263 + 321557.97 .2600971 .0144439 + 321582.97 .2567983 .0139109 + 321608.06 .2754130 .0144473 + 321633.06 .2608242 .0142056 + 321658.09 .2385122 .0128211 + 321683.19 .2462674 .0127732 + 321708.22 .2508902 .0132504 + 321733.25 .2384278 .0126739 + 321758.28 .2475237 .0130214 + 321783.38 .2370497 .0126538 + 321808.41 .2752567 .0143841 + 321833.47 .2492977 .0133506 + 321858.56 .2507085 .0135465 + 321883.62 .2481291 .0130579 + 321908.69 .2813935 .0147290 + 321933.78 .2664739 .0141741 + 321958.84 .2556526 .0138396 + 321983.91 .2637720 .0139814 + 322008.97 .2403939 .0131962 + 322034.09 .2452623 .0136784 + 322059.16 .2565428 .0136740 + 322084.25 .2376769 .0126537 + 322109.38 .2731114 .0142545 + 322134.47 .2262084 .0127702 + 322159.53 .2560458 .0133949 + 322184.62 .2505697 .0134287 + 322209.78 .2494569 .0132413 + 322234.88 .2511383 .0138149 + 322259.97 .2691740 .0142984 + 322285.09 .2346037 .0125816 + 322310.22 .2619019 .0136193 + 322335.31 .2574348 .0132415 + 322360.44 .2449483 .0123275 + 322385.59 .2473522 .0126362 + 322410.69 .2687796 .0131435 + 322435.81 .2501017 .0126365 + 322461.00 .2595253 .0128894 + 322486.12 .2550170 .0128195 + 322511.25 .2677450 .0140359 + 322536.38 .2604421 .0138861 + 322561.56 .2268342 .0127519 + 322586.69 .2515646 .0136978 + 322611.81 .2588987 .0146349 + 322637.00 .2606684 .0144496 + 322662.16 .2636498 .0148952 + 322687.31 .2388649 .0134642 + 322712.44 .2601252 .0142201 + 322737.66 .2487295 .0139306 + 322762.81 .2626223 .0144221 + 322787.97 .2497211 .0135968 + 322813.19 .2237755 .0126725 + 322838.34 .2596048 .0138756 + 322863.50 .2463132 .0134968 + 322888.69 .2596821 .0139217 + 322913.91 .2443402 .0134586 + 322939.09 .2537093 .0135948 + 322964.25 .2493620 .0136026 + 322989.50 .2411209 .0131857 + 323014.69 .2480556 .0140268 + 323039.88 .2538938 .0140936 + 323065.06 .2382041 .0134216 + 323090.31 .2621792 .0144543 + 323115.50 .2386668 .0133024 + 323140.69 .2464340 .0137834 + 323165.94 .2343372 .0133090 + 323191.16 .2417161 .0134524 + 323216.38 .2459514 .0134176 + 323241.56 .2863660 .0153613 + 323266.84 .2694704 .0144853 + 323292.06 .2419233 .0129910 + 323317.28 .2424030 .0131142 + 323342.56 .2512420 .0135519 + 323367.78 .2468126 .0134293 + 323393.00 .2659783 .0144850 + 323418.28 .2623492 .0141855 + 323443.53 .2390360 .0128270 + 323468.75 .2801475 .0143900 + 323494.00 .2514167 .0129942 + 323519.28 .2566024 .0134412 + 323544.53 .2456434 .0131003 + 323569.78 .2583738 .0137055 + 323595.09 .2437932 .0131731 + 323620.34 .2409092 .0132426 + 323645.62 .2616792 .0144226 + 323670.88 .2570604 .0140858 + 323696.19 .2386039 .0133426 + 323721.47 .2391204 .0136983 + 323746.72 .2797886 .0151890 + 323772.06 .2696015 .0145365 + 323797.31 .2566916 .0139184 + 323822.59 .2643527 .0139629 + 323847.88 .2561121 .0133231 + 323873.22 .2531007 .0126977 + 323898.50 .2689542 .0138007 + 323923.81 .2703037 .0137818 + 323949.16 .2786024 .0141972 + 323974.44 .2590345 .0135109 + 323999.75 .2721089 .0138760 + 324025.06 .2616508 .0132977 + 324050.41 .2442484 .0128995 + 324075.72 .2550895 .0130670 + 324101.03 .2409314 .0128907 + 324126.38 .2707513 .0136162 + 324151.72 .2687918 .0133534 + 324177.03 .2630584 .0130917 + 324202.34 .2538104 .0130514 + 324227.72 .2451452 .0125881 + 324253.06 .2486533 .0127124 + 324278.41 .2473380 .0130355 + 324303.78 .2717910 .0137962 + 324329.12 .2452643 .0128853 + 324354.47 .2919180 .0148328 + 324379.81 .2622644 .0139162 + 324405.19 .2768754 .0140094 + 324430.56 .2874693 .0147488 + 324455.91 .2551571 .0132910 + 324481.31 .2637775 .0140361 + 324506.69 .2361678 .0129732 + 324532.03 .2553951 .0135504 + 324557.41 .2589164 .0137654 + 324582.81 .2660180 .0139577 + 324608.19 .2685642 .0145884 + 324633.56 .2597201 .0139657 + 324659.00 .2381171 .0128496 + 324684.38 .2476124 .0131943 + 324709.75 .2600307 .0138336 + 324735.16 .2842699 .0150576 + 324760.59 .2524378 .0137952 + 324785.97 .2849115 .0147934 + 324811.38 .2665743 .0139519 + 324836.81 .2663198 .0141099 + 324862.22 .2489519 .0131330 + 324887.62 .2490668 .0132831 + 324913.03 .2619721 .0139119 + 324938.50 .2440897 .0130578 + 324963.91 .2796085 .0145938 + 324989.31 .2572078 .0138104 + 325014.78 .2262055 .0123784 + 325040.22 .2642487 .0142895 + 325065.66 .2295240 .0126261 + 325091.12 .2598674 .0135609 + 325116.56 .2662512 .0143855 + 325142.00 .2313618 .0126186 + 325167.44 .2611413 .0139702 + 325192.91 .2716826 .0144804 + 325218.34 .2583519 .0139369 + 325243.81 .2489198 .0130549 + 325269.31 .2506940 .0135318 + 325294.75 .2540900 .0138271 + 325320.22 .2662036 .0143110 + 325345.66 .2745260 .0151793 + 325371.19 .2850115 .0151604 + 325396.66 .2695224 .0148755 + 325422.12 .2496973 .0138714 + 325447.62 .2533028 .0140710 + 325473.09 .2536956 .0143450 + 325498.59 .2681942 .0149156 + 325524.06 .2800559 .0157144 + 325549.59 .2581867 .0145564 + 325575.06 .2486269 .0137883 + 325600.56 .2504263 .0140088 + 325626.09 .2485028 .0139008 + 325651.59 .2472005 .0137125 + 325677.09 .2531950 .0138716 + 325702.59 .2395967 .0132311 + 325728.16 .2657521 .0144414 + 325753.66 .2606616 .0142833 + 325779.16 .2603346 .0142185 + 325804.72 .2682226 .0143936 + 325830.25 .2520835 .0135490 + 325855.75 .2710847 .0142651 + 325881.28 .2521703 .0133934 + 325906.84 .2547784 .0133953 + 325932.38 .2603904 .0136827 + 325957.91 .2525699 .0131487 + 325983.50 .2543023 .0135770 + 326009.03 .2421114 .0134335 + 326034.56 .2694516 .0143570 + 326060.12 .2395585 .0129923 + 326085.72 .2581182 .0136236 + 326111.25 .2241929 .0122932 + 326136.81 .2678072 .0138076 + 326162.41 .2556964 .0129964 + 326187.97 .2720734 .0138616 + 326213.53 .2701067 .0137337 + 326239.09 .2608404 .0132858 + 326264.72 .2580740 .0129963 + 326290.28 .2475377 .0128853 + 326315.84 .2588746 .0130427 + 326341.47 .2676017 .0133189 + 326367.06 .2849267 .0140738 + 326392.62 .2640312 .0133307 + 326418.22 .2465095 .0122867 + 326443.84 .2444240 .0123082 + 326469.44 .2720421 .0136676 + 326495.03 .2460170 .0128558 + 326520.69 .2710136 .0140758 + 326546.28 .2629749 .0136581 + 326571.88 .2755061 .0143197 + 326597.53 .2566868 .0139608 + 326623.16 .2725825 .0141962 + 326648.75 .2487540 .0132772 + 326674.38 .2714000 .0143522 + 326700.06 .2644713 .0139835 + 326725.66 .2603599 .0140053 + 326751.28 .2776461 .0146377 + 326776.97 .2672392 .0145200 + 326802.59 .2754382 .0149755 + 326828.22 .2486728 .0135033 + 326853.88 .2419120 .0130838 + 326879.56 .2304634 .0126849 + 326905.19 .2622320 .0137030 + 326930.84 .2566519 .0136806 + 326956.53 .2544064 .0130746 + 326982.19 .2665640 .0136225 + 327007.84 .2488957 .0130913 + 327033.50 .2705734 .0140365 + 327059.22 .2678703 .0134605 + 327084.88 .2639230 .0141278 + 327110.53 .2506277 .0133520 + 327136.25 .2673107 .0141297 + 327161.94 .2904234 .0158140 + 327187.59 .2600540 .0140710 + 327213.28 .2645963 .0148591 + 327239.00 .2673051 .0144948 + 327264.69 .2616487 .0139056 + 327290.38 .2441049 .0134293 + 327316.12 .2865636 .0151844 + 327341.81 .2773460 .0144703 + 327367.50 .2566044 .0138565 + 327393.22 .2724212 .0144978 + 327418.97 .2591942 .0135716 + 327444.66 .2719740 .0141075 + 327470.38 .2322921 .0123771 + 327496.12 .2528650 .0133701 + 327521.84 .2606492 .0135568 + 327547.56 .2570736 .0133306 + 327573.28 .2547557 .0130592 + 327599.06 .2631074 .0135531 + 327624.78 .2767726 .0143304 + 327650.53 .2903254 .0147007 + 327676.31 .2358576 .0125684 + 327702.03 .2591908 .0136887 + 327727.78 .2376569 .0128212 + 327753.53 .2699348 .0148095 + 327779.31 .2506909 .0136150 + 327805.06 .2420460 .0135928 + 327830.81 .2605218 .0145958 + 327856.62 .2670790 .0146590 + 327882.38 .2599861 .0144986 + 327908.12 .2507778 .0140467 + 327933.91 .2723942 .0142641 + 327959.72 .2674898 .0141542 + 327985.47 .2678168 .0139615 + 328011.25 .2782158 .0145903 + 328037.06 .2480520 .0130027 + 328062.84 .2733352 .0139606 + 328088.62 .2657444 .0139279 + 328114.47 .2365955 .0125001 + 328140.25 .2713896 .0142299 + 328166.03 .2768731 .0145905 + 328191.84 .2539175 .0132418 + 328217.69 .2522833 .0135070 + 328243.50 .2539095 .0136343 + 328269.28 .2577789 .0135120 + 328295.16 .2516050 .0134251 + 328320.94 .2473326 .0132566 + 328346.75 .2692834 .0141024 + 328372.56 .2792815 .0143640 + 328398.44 .2534249 .0134171 + 328424.25 .2508357 .0134047 + 328450.09 .2537778 .0135047 + 328475.97 .2539150 .0130575 + 328501.78 .2711243 .0145592 + 328527.62 .2539787 .0133727 + 328553.47 .2827207 .0148232 + 328579.34 .2784763 .0147861 + 328605.19 .2630998 .0141048 + 328631.03 .2693662 .0147887 + 328656.94 .2655641 .0144737 + 328682.78 .3112710 .0165668 + 328708.66 .2691382 .0146539 + 328734.50 .2588899 .0146666 + 328760.41 .2390088 .0133535 + 328786.28 .2622062 .0147205 + 328812.16 .2990451 .0162818 + 328838.06 .2730742 .0148269 + 328863.94 .2376198 .0134600 + 328889.81 .2533941 .0139279 + 328915.69 .2899340 .0152073 + 328941.62 .2682623 .0142562 + 328967.50 .2491886 .0129225 + 328993.41 .2533298 .0133335 + 329019.34 .2502689 .0128900 + 329045.22 .2817229 .0144325 + 329071.12 .2696452 .0137797 + 329097.03 .2684992 .0141751 + 329122.97 .2549851 .0137560 + 329148.88 .2529629 .0136863 + 329174.78 .2878373 .0150795 + 329200.75 .2737097 .0143842 + 329226.66 .2591550 .0141883 + 329252.59 .2630303 .0138294 + 329278.50 .2753522 .0145114 + 329304.50 .2744038 .0144399 + 329330.41 .2739619 .0146636 + 329356.34 .2646911 .0141334 + 329382.34 .2513306 .0137977 + 329408.25 .2654626 .0144086 + 329434.22 .2754427 .0152696 + 329460.16 .2775530 .0150334 + 329486.16 .2631733 .0146250 + 329512.09 .2673593 .0148462 + 329538.03 .2671811 .0148036 + 329564.06 .2484304 .0136585 + 329590.00 .2574466 .0136223 + 329615.97 .2674445 .0143312 + 329641.94 .2461022 .0132886 + 329667.94 .2826088 .0149273 + 329693.94 .2878193 .0148483 + 329719.91 .2668493 .0140746 + 329745.94 .2706083 .0141959 + 329771.91 .2837349 .0143628 + 329797.88 .2688836 .0143220 + 329823.94 .2697314 .0143187 + 329849.91 .2617188 .0140056 + 329875.91 .2548234 .0139449 + 329901.91 .2657324 .0139933 + 329927.94 .2613041 .0139663 + 329953.94 .2630726 .0144057 + 329979.97 .2656167 .0139465 + 330006.00 .2624132 .0145763 + 330032.03 .2592185 .0145118 + 330058.03 .2559168 .0140872 + 330084.06 .2546492 .0142646 + 330110.12 .2582648 .0136854 + 330136.16 .2474064 .0130778 + 330162.16 .2878089 .0147301 + 330188.25 .2672850 .0133803 + 330214.28 .2600509 .0130423 + 330240.31 .2427752 .0121161 + 330266.34 .2629113 .0126888 + 330292.44 .2625678 .0129318 + 330318.50 .2606784 .0129113 + 330344.53 .2511509 .0126409 + 330370.66 .2670408 .0133777 + 330396.69 .2863279 .0146292 + 330422.75 .2814258 .0141664 + 330448.81 .2463821 .0130542 + 330474.94 .2570871 .0135219 + 330501.00 .2515501 .0134217 + 330527.06 .2403837 .0133094 + 330553.19 .2539384 .0139329 + 330579.25 .2931317 .0154738 + 330605.34 .2596868 .0140623 + 330631.41 .2518836 .0135094 + 330657.56 .2775245 .0150316 + 330683.66 .2607858 .0135650 + 330709.72 .2833026 .0146302 + 330735.88 .2349205 .0124988 + 330761.97 .2496733 .0130876 + 330788.06 .2555249 .0133889 + 330814.19 .2471860 .0130262 + 330840.34 .2818946 .0144682 + 330866.44 .2608345 .0134925 + 330892.56 .2635872 .0137458 + 330918.72 .2826172 .0145113 + 330944.84 .2616935 .0136067 + 330970.97 .2951267 .0148701 + 330997.09 .2678800 .0135789 + 331023.25 .2786439 .0146027 + 331049.41 .2573754 .0132016 + 331075.53 .2646481 .0134019 + 331101.72 .2559887 .0130134 + 331127.84 .2511568 .0129545 + 331154.00 .2361991 .0127314 + 331180.16 .2765962 .0142168 + 331206.34 .2781531 .0141955 + 331232.50 .2887354 .0144352 + 331258.66 .2586897 .0135928 + 331284.88 .2583939 .0133720 + 331311.03 .2766114 .0142049 + 331337.19 .2574643 .0133914 + 331363.41 .2647776 .0140156 + 331389.59 .2545758 .0132561 + 331415.75 .2420292 .0128798 + 331441.94 .2769534 .0141496 + 331468.16 .2632024 .0136337 + 331494.34 .2893005 .0149505 + 331520.53 .2484750 .0128922 + 331546.78 .2634123 .0134488 + 331572.97 .2682567 .0138722 + 331599.16 .2627652 .0136076 + 331625.38 .2480777 .0128685 + 331651.62 .2497738 .0131955 + 331677.81 .2742243 .0141010 + 331704.03 .2763348 .0142139 + 331730.28 .2925895 .0150547 + 331756.50 .2817005 .0143803 + 331782.72 .2549693 .0134326 + 331808.94 .2528139 .0132639 + 331835.22 .2635244 .0138990 + 331861.44 .2681749 .0140750 + 331887.69 .2538616 .0133270 + 331913.97 .2536040 .0131362 + 331940.19 .2670287 .0138370 + 331966.44 .2680264 .0138584 + 331992.69 .2604460 .0136341 + 332018.97 .2655092 .0136584 + 332045.22 .2590426 .0133488 + 332071.47 .2517430 .0130745 + 332097.78 .2988219 .0150242 + 332124.03 .2625739 .0132111 + 332150.31 .2612086 .0134037 + 332176.56 .2473469 .0128130 + 332202.88 .2521758 .0125240 + 332229.16 .2542187 .0125652 + 332255.44 .2479120 .0123884 + 332281.75 .2628340 .0128612 + 332308.03 .2740225 .0130611 + 332334.31 .2339169 .0115216 + 332360.62 .2659535 .0130481 + 332386.94 .2716102 .0131222 + 332413.25 .2902877 .0135922 + 332439.53 .2860237 .0137694 + 332465.88 .2591684 .0128035 + 332492.19 .2719552 .0132581 + 332518.50 .3004370 .0147304 + 332544.81 .2599019 .0130111 + 332571.16 .2720025 .0137244 + 332597.47 .2571999 .0129342 + 332623.81 .2646295 .0134008 + 332650.16 .2604065 .0131200 + 332676.50 .2717581 .0135237 + 332702.81 .2570342 .0131099 + 332729.16 .2632308 .0136228 + 332755.53 .2818278 .0145159 + 332781.88 .2831249 .0144647 + 332808.22 .2654072 .0143184 + 332834.59 .2582943 .0137272 + 332860.94 .2460116 .0130189 + 332887.31 .2667025 .0139333 + 332913.66 .2697057 .0138203 + 332940.06 .2628428 .0133913 + 332966.41 .2963082 .0151188 + 332992.78 .2659379 .0136839 + 333019.19 .2459235 .0125987 + 333045.56 .2723715 .0141054 + 333071.94 .2771477 .0141736 + 333098.34 .2741823 .0139858 + 333124.72 .2619536 .0132916 + 333151.12 .2734655 .0138459 + 333177.50 .2293499 .0121372 + 333203.94 .2477925 .0128274 + 333230.31 .2731949 .0138542 + 333256.72 .2610811 .0132524 + 333283.16 .2611569 .0133522 + 333309.56 .2486237 .0130245 + 333335.97 .2808518 .0144576 + 333362.38 .2705384 .0137955 + 333388.84 .2749984 .0142240 + 333415.25 .2820881 .0144926 + 333441.66 .2718209 .0136901 + 333468.12 .2609380 .0133999 + 333494.53 .2730705 .0139079 + 333520.97 .2704943 .0135312 + 333547.41 .2614197 .0128990 + 333573.88 .2657746 .0132930 + 333600.31 .2767124 .0138210 + 333626.75 .2648603 .0134024 + 333653.25 .2898508 .0143451 + 333679.69 .2866026 .0141352 + 333706.12 .2579415 .0133450 + 333732.59 .2867991 .0143829 + 333759.09 .2616523 .0132388 + 333785.53 .2454524 .0126531 + 333812.00 .2613961 .0134762 + 333838.50 .2568252 .0128563 + 333864.97 .2891876 .0145345 + 333891.44 .2593679 .0133314 + 333917.91 .2683957 .0135615 + 333944.44 .2755084 .0138099 + 333970.91 .2635677 .0136681 + 333997.41 .2672791 .0139161 + 334023.94 .2661361 .0136215 + 334050.41 .2589203 .0137119 + 334076.91 .2935903 .0151147 + 334103.41 .2864768 .0148474 + 334129.94 .2756015 .0146233 + 334156.44 .2650846 .0140750 + 334182.97 .2460199 .0134499 + 334209.50 .2741724 .0145079 + 334236.03 .2482618 .0129530 + 334262.53 .2532600 .0132780 + 334289.06 .2652065 .0133756 + 334315.62 .2514271 .0130312 + 334342.16 .2731392 .0136493 + 334368.66 .2879835 .0145628 + 334395.25 .2475312 .0129340 + 334421.78 .2672934 .0141693 + 334448.31 .2635703 .0140232 + 334474.84 .2862645 .0146126 + 334501.44 .2631924 .0137608 + 334528.00 .2812822 .0145222 + 334554.53 .2959933 .0153129 + 334581.12 .2669848 .0135985 + 334607.69 .2824922 .0142652 + 334634.25 .2676559 .0137113 + 334660.84 .2513368 .0130014 + 334687.41 .2618554 .0134911 + 334714.00 .2556861 .0132478 + 334740.56 .2764234 .0139828 + 334767.19 .2673365 .0138937 + 334793.75 .2879784 .0146759 + 334820.34 .2826111 .0144342 + 334846.97 .2602153 .0134930 + 334873.56 .2576701 .0139650 + 334900.12 .2879845 .0149923 + 334926.72 .2411292 .0133276 + 334953.38 .2712926 .0143182 + 334979.97 .2727610 .0146463 + 335006.56 .2654219 .0139744 + 335033.22 .2522106 .0133043 + 335059.84 .2624992 .0139304 + 335086.44 .2578106 .0138752 + 335113.06 .2383635 .0130548 + 335139.72 .2568786 .0136541 + 335166.34 .2564591 .0138473 + 335192.97 .2761232 .0144632 + 335219.66 .2599505 .0138557 + 335246.28 .2657286 .0143816 + 335272.91 .2711411 .0143774 + 335299.56 .2747242 .0146395 + 335326.25 .2710416 .0140903 + 335352.88 .2794126 .0150310 + 335379.53 .2502660 .0136024 + 335406.22 .2602558 .0139154 + 335432.88 .2632425 .0136740 + 335459.53 .2369085 .0121507 + 335486.19 .2618600 .0129023 + 335512.91 .2421259 .0121432 + 335539.56 .2685550 .0133396 + 335566.25 .2591262 .0130002 + 335592.97 .2374811 .0119951 + 335619.62 .2702952 .0139684 + 335646.31 .2506746 .0128900 + 335673.00 .2659420 .0139005 + 335699.72 .2608405 .0135936 + 335726.41 .2504362 .0135294 + 335753.09 .2684101 .0144478 + 335779.84 .2497016 .0131526 + 335806.53 .2566557 .0132685 + 335833.25 .2273501 .0122274 + 335859.94 .2651263 .0136730 + 335886.72 .2704088 .0139245 + 335913.41 .2637781 .0137444 + 335940.12 .2180735 .0116992 + 335966.91 .2641186 .0137264 + 335993.62 .2549748 .0133685 + 336020.34 .2439814 .0129986 + 336047.06 .2568057 .0136096 + 336073.84 .2543179 .0134321 + 336100.56 .2608241 .0141188 + 336127.31 .2583327 .0141364 + 336154.09 .2523708 .0136078 + 336180.84 .2564051 .0140297 + 336207.59 .2305021 .0125784 + 336234.31 .2423438 .0131512 + 336261.12 .2592243 .0135220 + 336287.88 .2338481 .0123346 + 336314.62 .2590535 .0132764 + 336341.44 .2547114 .0133145 + 336368.22 .2354584 .0121456 + 336394.97 .2486969 .0129666 + 336421.81 .2381116 .0123962 + 336448.56 .2289795 .0119714 + 336475.34 .2453846 .0128302 + 336502.12 .2196673 .0118085 + 336528.97 .2453482 .0130171 + 336555.75 .2300180 .0126431 + 336582.53 .2523260 .0134691 + 336609.38 .2254601 .0123319 + 336636.19 .2262677 .0121360 + 336662.97 .2387049 .0126651 + 336689.78 .2398336 .0128364 + 336716.62 .2207208 .0120380 + 336743.44 .2375388 .0121990 + 336770.25 .2499661 .0130301 + 336797.12 .2194254 .0116840 + 336823.94 .2614885 .0133237 + 336850.75 .2169127 .0114619 + 336877.59 .2128501 .0110519 + 336904.47 .2334385 .0122373 + 336931.28 .2278391 .0116988 + 336958.12 .2603277 .0132319 + 336985.03 .2531557 .0128021 + 337011.84 .2292018 .0116902 + 337038.69 .2229998 .0113524 + 337065.56 .2410645 .0121363 + 337092.44 .2252619 .0114619 + 337119.31 .2275642 .0117385 + 337146.16 .2273167 .0117128 + 337173.06 .2422918 .0121527 + 337199.94 .2402571 .0121886 + 337226.81 .2231924 .0114716 + 337253.66 .2333519 .0120675 + 337280.59 .2313226 .0118914 + 337307.47 .2395016 .0122343 + 337334.34 .2078577 .0111164 + 337361.28 .2323654 .0124831 + 337388.16 .2215331 .0118235 + 337415.06 .2355625 .0126013 + 337441.94 .2308844 .0126291 + 337468.91 .2434749 .0131668 + 337495.78 .2277074 .0127353 + 337522.69 .2656264 .0145819 + 337549.66 .2490368 .0138290 + 337576.56 .2593861 .0144444 + 337603.47 .2277241 .0129567 + 337630.38 .2343713 .0129160 + 337657.34 .2517942 .0134099 + 337684.28 .2562510 .0136559 + 337711.19 .2571859 .0134251 + 337738.19 .2354493 .0123575 + 337765.09 .2578259 .0134635 + 337792.03 .2623380 .0131859 + 337818.97 .2655115 .0134879 + 337845.97 .2520584 .0126043 + 337872.91 .2708121 .0137628 + 337899.84 .2516775 .0127390 + 337926.84 .2661676 .0133042 + 337953.81 .2525786 .0131491 + 337980.78 .2183172 .0116653 + 338007.78 .2580026 .0133734 + 338034.75 .2498156 .0133022 + 338061.72 .2479324 .0131873 + 338088.69 .2395343 .0130313 + 338115.69 .2653057 .0140749 + 338142.69 .2345370 .0121958 + 338169.66 .2444106 .0126988 + 338196.69 .2722855 .0138862 + 338223.69 .2590817 .0132660 + 338250.66 .2437031 .0125148 + 338277.66 .2484583 .0128789 + 338304.69 .2481340 .0128840 + 338331.69 .2883941 .0143554 + 338358.69 .2728481 .0136441 + 338385.75 .2592137 .0131316 + 338412.75 .2634955 .0136009 + 338439.78 .2743897 .0140981 + 338466.78 .2799048 .0141016 + 338493.84 .2584963 .0133286 + 338520.88 .2542039 .0133476 + 338547.91 .2786524 .0145090 + 338574.97 .2536178 .0131615 + 338602.00 .2454383 .0131534 + 338629.03 .2634138 .0139727 + 338656.09 .2408634 .0132395 + 338683.19 .2641837 .0139927 + 338710.22 .2874238 .0148909 + 338737.25 .2415390 .0131285 + 338764.38 .2463424 .0130388 + 338791.41 .3021100 .0153721 + 338818.47 .2662755 .0138686 + 338845.53 .2676859 .0135200 + 338872.66 .2558435 .0134595 + 338899.72 .2518630 .0132575 + 338926.78 .2473347 .0128729 + 338953.91 .2584621 .0136707 + 338981.00 .2802280 .0142431 + 339008.06 .2643918 .0140872 + 339035.16 .2600654 .0139450 + 339062.28 .2595280 .0138706 + 339089.38 .2726781 .0147870 + 339116.47 .2920232 .0151277 + 339143.62 .2817298 .0151608 + 339170.72 .2651646 .0141072 + 339197.81 .2794934 .0146678 + 339224.91 .2635142 .0142434 + 339252.09 .2539324 .0134874 + 339279.19 .2543049 .0132774 + 339306.31 .2869193 .0146642 + 339333.47 .2761011 .0144349 + 339360.59 .2668869 .0138411 + 339387.72 .2631641 .0139574 + 339414.84 .2928616 .0152741 + 339442.03 .2787379 .0148445 + 339469.16 .2815060 .0147628 + 339496.31 .2462427 .0132835 + 339523.50 .2819401 .0145485 + 339550.66 .2606194 .0135045 + 339577.78 .2635657 .0135063 + 339605.00 .2537991 .0129908 + 339632.16 .2638601 .0136351 + 339659.31 .2863166 .0139160 + 339686.47 .2576063 .0125154 + 339713.69 .2534148 .0129212 + 339740.84 .2825293 .0140988 + 339768.03 .2724245 .0139190 + 339795.25 .3019964 .0151852 + 339822.44 .2566617 .0133557 + 339849.59 .2449257 .0131352 + 339876.78 .2561805 .0132402 + 339904.03 .2795326 .0141774 + 339931.22 .2610233 .0132372 + 339958.41 .2465877 .0126727 + 339985.66 .2707950 .0136539 + 340012.84 .2701922 .0136902 + 340040.06 .2483008 .0126684 + 340067.28 .2878850 .0144950 + 340094.53 .2792466 .0140033 + 340121.75 .2634102 .0132827 + 340148.97 .2628167 .0136231 + 340176.22 .2720757 .0137405 + 340203.44 .2813386 .0140772 + 340230.69 .2474170 .0127098 + 340257.91 .2428847 .0121975 + 340285.19 .2530597 .0130188 + 340312.44 .2885843 .0143902 + 340339.66 .2561459 .0128619 + 340366.97 .2764597 .0139007 + 340394.22 .2602770 .0131702 + 340421.44 .2539814 .0128272 + 340448.72 .2871908 .0139765 + 340476.00 .2410582 .0122128 + 340503.28 .2692369 .0132451 + 340530.53 .2747955 .0131546 + 340557.84 .2488417 .0121170 + 340585.12 .2788391 .0134104 + 340612.38 .2685365 .0133160 + 340639.66 .2677401 .0132592 + 340667.00 .2623775 .0132810 + 340694.28 .2608902 .0132059 + 340721.56 .2646522 .0136322 + 340748.91 .2839330 .0145637 + 340776.19 .2644987 .0136731 + 340803.50 .2646606 .0138492 + 340830.78 .2737462 .0138864 + 340858.12 .2749501 .0140434 + 340885.44 .2538876 .0129724 + 340912.75 .2785316 .0141679 + 340940.12 .2464448 .0127593 + 340967.44 .2737178 .0140204 + 340994.75 .2688782 .0136976 + 341022.06 .2521921 .0129795 + 341049.44 .2795261 .0139603 + 341076.78 .2543665 .0128495 + 341104.09 .2530907 .0125545 + 341131.50 .2952296 .0146554 + 341158.81 .2712952 .0140537 + 341186.16 .2623586 .0135332 + 341213.50 .2709659 .0136757 + 341240.91 .2780224 .0139917 + 341268.25 .2746552 .0136789 + 341295.62 .2534958 .0129025 + 341323.03 .2662227 .0131285 + 341350.38 .2763974 .0136421 + 341377.75 .2618829 .0128180 + 341405.16 .2689890 .0132420 + 341432.53 .2715454 .0133544 + 341459.91 .2765845 .0135304 + 341487.28 .2994325 .0141861 + 341514.72 .2867589 .0136834 + 341542.09 .2595065 .0124201 + 341569.50 .2775732 .0134884 + 341596.94 .2778727 .0134409 + 341624.31 .2703406 .0130202 + 341651.72 .2727101 .0129786 + 341679.12 .2941107 .0139443 + 341706.59 .2658988 .0128862 + 341734.00 .2685432 .0131514 + 341761.41 .2656497 .0134960 + 341788.88 .2927291 .0144169 + 341816.28 .2284631 .0119523 + 341843.69 .2683635 .0134425 + 341871.12 .2560838 .0130540 + 341898.59 .2470687 .0126775 + 341926.03 .2709251 .0136852 + 341953.47 .2656860 .0136316 + 341980.94 .2464331 .0123797 + 342008.41 .2659695 .0135508 + 342035.84 .2841311 .0141208 + 342063.28 .2797806 .0139282 + 342090.78 .2900519 .0139950 + 342118.25 .2880613 .0140592 + 342145.69 .2655359 .0131113 + 342173.19 .2653991 .0132146 + 342200.66 .2763426 .0135277 + 342228.12 .2855920 .0139192 + 342255.59 .2721941 .0130923 + 342283.12 .2759997 .0138620 + 342310.59 .2618301 .0128256 + 342338.09 .2862999 .0137526 + 342365.62 .2622561 .0128390 + 342393.09 .2748495 .0133352 + 342420.59 .2744958 .0132835 + 342448.09 .2713891 .0132260 + 342475.62 .2860582 .0138467 + 342503.12 .2750696 .0138316 + 342530.62 .2940115 .0143407 + 342558.19 .2580213 .0126529 + 342585.69 .2836443 .0137327 + 342613.22 .2796950 .0135971 + 342640.72 .2591625 .0127174 + 342668.31 .2671981 .0129798 + 342695.81 .2754167 .0135192 + 342723.34 .2756100 .0135413 + 342750.94 .2646737 .0132067 + 342778.47 .2632394 .0132496 + 342806.00 .2849325 .0138488 + 342833.53 .2539636 .0129533 + 342861.12 .2730575 .0137264 + 342888.69 .2702224 .0130550 + 342916.22 .2608519 .0128236 + 342943.84 .2734162 .0133512 + 342971.38 .2630748 .0127593 + 342998.94 .2751811 .0135169 + 343026.56 .2850259 .0135977 + 343054.12 .2735264 .0129046 + 343081.69 .2786924 .0134868 + 343109.28 .2660396 .0128424 + 343136.91 .2598565 .0128751 + 343164.47 .2744865 .0132830 + 343192.06 .2683264 .0129907 + 343219.69 .2664273 .0128640 + 343247.28 .2605322 .0123500 + 343274.88 .2592530 .0125562 + 343302.47 .2863647 .0133591 + 343330.12 .2850044 .0131143 + 343357.72 .2782374 .0130347 + 343385.34 .2789921 .0132642 + 343413.00 .2761030 .0132684 + 343440.59 .2905967 .0137608 + 343468.22 .2617978 .0131660 + 343495.84 .2660275 .0131064 + 343523.50 .2718050 .0140457 + 343551.12 .2574447 .0133525 + 343578.78 .2647491 .0137386 + 343606.44 .2743381 .0139456 + 343634.09 .2714337 .0137750 + 343661.72 .2601313 .0137192 + 343689.38 .2752635 .0139878 + 343717.06 .2768280 .0139460 + 343744.72 .2649794 .0136021 + 343772.38 .2698700 .0138797 + 343800.06 .2773169 .0144549 + 343827.75 .2770002 .0143177 + 343855.41 .2643775 .0134813 + 343883.06 .2606254 .0136706 + 343910.78 .2947176 .0151687 + 343938.47 .2963682 .0151092 + 343966.12 .2827323 .0140518 + 343993.88 .2930440 .0142632 + 344021.56 .2594902 .0127465 + 344049.22 .2599535 .0126055 + 344076.94 .2837813 .0138610 + 344104.66 .2830632 .0139099 + 344132.38 .2849972 .0136483 + 344160.06 .2413921 .0122880 + 344187.81 .3030030 .0146693 + 344215.53 .2600507 .0130421 + 344243.22 .2688970 .0136744 + 344270.94 .2733136 .0139467 + 344298.72 .2552646 .0128674 + 344326.44 .2449139 .0126925 + 344354.16 .2700123 .0135496 + 344381.94 .2579691 .0130939 + 344409.66 .2667126 .0132563 + 344437.41 .2671271 .0135826 + 344465.12 .2716603 .0136805 + 344492.94 .2930880 .0146397 + 344520.66 .2593173 .0130338 + 344548.41 .2691736 .0136665 + 344576.22 .2804595 .0141704 + 344603.97 .3022429 .0150994 + 344631.72 .2871109 .0143406 + 344659.47 .2765194 .0142890 + 344687.28 .2769381 .0141862 + 344715.06 .2754040 .0141838 + 344742.84 .2899509 .0144695 + 344770.66 .2486987 .0129053 + 344798.44 .2845795 .0140999 + 344826.22 .2906332 .0144254 + 344854.06 .2758192 .0135421 + 344881.84 .2825209 .0140047 + 344909.62 .2901409 .0143499 + 344937.41 .2982175 .0148894 + 344965.28 .2754604 .0137369 + 344993.06 .2885168 .0143743 + 345020.88 .2868752 .0142439 + 345048.72 .2885261 .0144591 + 345076.53 .3013243 .0151080 + 345104.34 .2628178 .0131000 + 345132.16 .2590226 .0132504 + 345160.03 .2820865 .0136667 + 345187.88 .2842297 .0138421 + 345215.69 .2858161 .0137898 + 345243.56 .2760795 .0132671 + 345271.41 .2851505 .0137848 + 345299.25 .2567238 .0126113 + 345327.09 .2737325 .0129948 + 345354.97 .2819038 .0136134 + 345382.81 .2837877 .0138171 + 345410.69 .2716445 .0134828 + 345438.59 .2692299 .0132228 + 345466.44 .2848337 .0140223 + 345494.31 .2726525 .0132650 + 345522.16 .2805627 .0136026 + 345550.09 .3018318 .0141726 + 345577.97 .2733089 .0130824 + 345605.84 .2884552 .0139162 + 345633.75 .2678767 .0133457 + 345661.62 .2762169 .0134443 + 345689.53 .2768014 .0133702 + 345717.41 .2960098 .0141877 + 345745.34 .2735443 .0131779 + 345773.25 .2674068 .0129082 + 345801.16 .2809506 .0136678 + 345829.09 .2725368 .0130294 + 345857.00 .2711706 .0131184 + 345884.91 .2956159 .0142199 + 345912.81 .2717883 .0132378 + 345940.78 .2663190 .0132225 + 345968.72 .2760226 .0136887 + 345996.62 .2769445 .0140132 + 346024.59 .2730141 .0138434 + 346052.53 .2528857 .0130325 + 346080.47 .2736567 .0140167 + 346108.41 .2936186 .0147441 + 346136.41 .2790910 .0146980 + 346164.34 .2718049 .0140329 + 346192.28 .2851003 .0145945 + 346220.28 .2772021 .0145149 + 346248.22 .2835310 .0142648 + 346276.19 .2804519 .0141578 + 346304.16 .2817188 .0143938 + 346332.16 .2842553 .0142587 + 346360.12 .2848495 .0139665 + 346388.09 .2717039 .0137546 + 346416.12 .2939377 .0145687 + 346444.09 .2783392 .0138916 + 346472.06 .2936468 .0144929 + 346500.09 .2685887 .0134324 + 346528.09 .2805115 .0138662 + 346556.09 .2698262 .0137901 + 346584.06 .2600672 .0132520 + 346612.12 .2638094 .0133527 + 346640.12 .2655614 .0130257 + 346668.12 .3067508 .0149162 + 346696.19 .2897660 .0139249 + 346724.19 .2647029 .0132538 + 346752.22 .2783973 .0136776 + 346780.22 .2964625 .0142130 + 346808.28 .2932017 .0139253 + 346836.31 .2666540 .0128560 + 346864.34 .2877819 .0136570 + 346892.44 .2638569 .0125124 + 346920.47 .2712798 .0129903 + 346948.50 .2502141 .0123275 + 346976.53 .2718662 .0128530 + 347004.62 .2758543 .0128013 + 347032.69 .2658713 .0126325 + 347060.72 .2817317 .0133040 + 347088.84 .2814134 .0131878 + 347116.91 .2765903 .0131019 + 347144.94 .2941743 .0138346 + 347173.03 .2734168 .0132336 + 347201.12 .2615937 .0124564 + 347229.22 .2792725 .0135408 + 347257.28 .2529180 .0124911 + 347285.41 .2936609 .0145054 + 347313.50 .2801425 .0137771 + 347341.56 .2341584 .0121615 + 347369.66 .2626656 .0129588 + 347397.81 .2901250 .0143372 + 347425.91 .2670574 .0130781 + 347454.00 .2818597 .0139321 + 347482.16 .3086347 .0148971 + 347510.25 .2781513 .0136860 + 347538.38 .2702048 .0135607 + 347566.47 .2904805 .0140848 + 347594.66 .2702254 .0136443 + 347622.75 .2528489 .0128646 + 347650.88 .2991107 .0145736 + 347679.06 .2631799 .0133160 + 347707.19 .2890197 .0146361 + 347735.31 .3082209 .0153485 + 347763.47 .2564701 .0133192 + 347791.66 .2917062 .0147440 + 347819.78 .2833315 .0141809 + 347847.94 .2737429 .0137308 + 347876.16 .2831572 .0140762 + 347904.28 .2811404 .0139368 + 347932.44 .2731341 .0134558 + 347960.62 .2597916 .0129820 + 347988.81 .2724062 .0138808 + 348017.00 .2755807 .0140682 + 348045.16 .2898518 .0142405 + 348073.38 .2676696 .0131779 + 348101.56 .2886494 .0138625 + 348129.75 .2771711 .0140143 + 348157.97 .2556767 .0131614 + 348186.16 .2734419 .0138685 + 348214.34 .2973032 .0149225 + 348242.56 .2733943 .0138900 + 348270.81 .2639084 .0138037 + 348299.00 .2769585 .0141496 + 348327.22 .2743972 .0141492 + 348355.47 .2891959 .0144017 + 348383.69 .2866179 .0142055 + 348411.91 .2830003 .0139403 + 348440.09 .2747763 .0136974 + 348468.38 .3004590 .0146046 + 348496.59 .2963763 .0143398 + 348524.84 .2932149 .0142504 + 348553.12 .2576431 .0128034 + 348581.34 .2908253 .0144128 + 348609.59 .2636960 .0133109 + 348637.84 .2680447 .0136850 + 348666.12 .2877813 .0144399 + 348694.38 .2781844 .0139891 + 348722.62 .2708967 .0139660 + 348750.94 .2764911 .0141220 + 348779.19 .2821379 .0144696 + 348807.47 .2811552 .0144368 + 348835.72 .2988591 .0155688 + 348864.06 .2864670 .0152500 + 348892.31 .2838315 .0145705 + 348920.59 .2872959 .0145098 + 348948.94 .2641517 .0136649 + 348977.22 .2897072 .0145893 + 349005.50 .2680011 .0137812 + 349033.78 .2936784 .0148601 + 349062.12 .2633277 .0138077 + 349090.44 .2885237 .0147465 + 349118.72 .2759447 .0141398 + 349147.09 .2692548 .0137075 + 349175.41 .2816178 .0144772 + 349203.72 .3297317 .0163250 + 349232.03 .2939574 .0149147 + 349260.41 .2877741 .0146509 + 349288.72 .3122514 .0155210 + 349317.03 .2642592 .0132282 + 349345.41 .2801506 .0139494 + 349373.75 .2524704 .0127508 + 349402.09 .3005641 .0149524 + 349430.44 .3112881 .0152577 + 349458.81 .2822947 .0142412 + 349487.16 .2602933 .0137290 + 349515.50 .3031006 .0149781 + 349543.91 .2613223 .0134963 + 349572.28 .2579313 .0131386 + 349600.62 .2858186 .0145353 + 349629.00 .2778510 .0142150 + 349657.41 .2777439 .0137761 + 349685.78 .2780445 .0135692 + 349714.16 .2879824 .0141566 + 349742.59 .2855341 .0138280 + 349770.97 .3080277 .0148402 + 349799.34 .2955282 .0146011 + 349827.72 .2800865 .0137851 + 349856.19 .2581238 .0129988 + 349884.56 .2998699 .0146628 + 349912.97 .2829680 .0139498 + 349941.41 .2860389 .0135506 + 349969.81 .2538083 .0125416 + 349998.22 .3248386 .0151848 + 350026.69 .2725777 .0130827 + 350055.09 .2902428 .0135896 + 350083.53 .2838061 .0136878 + 350111.94 .2760614 .0128879 + 350140.44 .2870978 .0135580 + 350168.84 .2847795 .0134712 + 350197.28 .2457897 .0119170 + 350225.78 .2801843 .0132893 + 350254.22 .3020298 .0138842 + 350282.66 .2818935 .0130601 + 350311.09 .2526981 .0119703 + 350339.59 .2770100 .0128259 + 350368.06 .2830735 .0131331 + 350396.50 .2955965 .0136832 + 350425.03 .2711056 .0126299 + 350453.47 .2830151 .0132164 + 350481.94 .3014238 .0142018 + 350510.41 .2971908 .0138383 + 350538.94 .2762935 .0132375 + 350567.41 .2936167 .0139797 + 350595.91 .2868476 .0138801 + 350624.44 .2806265 .0139303 + 350652.94 .2822480 .0136649 + 350681.41 .2723406 .0136729 + 350709.91 .2674457 .0132312 + 350738.47 .2883596 .0136273 + 350766.97 .2727138 .0134097 + 350795.47 .2897020 .0138998 + 350824.03 .2872892 .0138185 + 350852.53 .2742816 .0133352 + 350881.06 .3070107 .0144363 + 350909.56 .2808249 .0137266 + 350938.16 .2739964 .0135837 + 350966.66 .2626829 .0133578 + 350995.19 .2738019 .0136758 + 351023.78 .2811005 .0136762 + 351052.31 .2927278 .0139410 + 351080.84 .2855435 .0137210 + 351109.41 .2856939 .0131887 + 351138.00 .2769248 .0129924 + 351166.56 .2742637 .0131250 + 351195.09 .2755069 .0131734 + 351223.72 .2843467 .0134474 + 351252.28 .2781222 .0134976 + 351280.84 .2930436 .0138031 + 351309.41 .2677674 .0128465 + 351338.03 .2767489 .0133567 + 351366.59 .2638851 .0126517 + 351395.19 .2702281 .0126295 + 351423.81 .2704541 .0129345 + 351452.41 .2539622 .0122420 + 351481.00 .2986913 .0141872 + 351509.56 .3090611 .0144553 + 351538.22 .2791040 .0131012 + 351566.81 .2842104 .0137212 + 351595.44 .2969875 .0140095 + 351624.09 .2890399 .0139165 + 351652.69 .2716193 .0130913 + 351681.31 .2674631 .0132211 + 351709.97 .2797547 .0134508 + 351738.59 .2959277 .0145769 + 351767.22 .2955424 .0144277 + 351795.84 .2914329 .0143540 + 351824.53 .2923989 .0141049 + 351853.16 .2924546 .0145306 + 351881.81 .2877315 .0145852 + 351910.50 .2745582 .0137781 + 351939.12 .2926604 .0144949 + 351967.78 .3060505 .0152221 + 351996.44 .2931316 .0139318 + 352025.16 .2951632 .0144981 + 352053.81 .2807782 .0135291 + 352082.47 .2720580 .0130950 + 352111.19 .2599863 .0123877 + 352139.84 .2933631 .0132285 + 352168.53 .2860995 .0131170 + 352197.19 .2919003 .0130463 + 352225.94 .2855841 .0128299 + 352254.62 .2713508 .0123800 + 352283.28 .2932834 .0131358 + 352312.03 .2667108 .0122671 + 352340.72 .2656584 .0123189 + 352369.44 .3050947 .0139714 + 352398.12 .2798009 .0130423 + 352426.88 .2817879 .0133877 + 352455.59 .2828257 .0134450 + 352484.31 .2734329 .0129883 + 352513.06 .2709124 .0130934 + 352541.78 .2775507 .0132661 + 352570.50 .2988674 .0143148 + 352599.22 .2951255 .0142472 + 352628.03 .2690911 .0132367 + 352656.75 .2864175 .0136022 + 352685.47 .2824430 .0136651 + 352714.28 .2606767 .0127289 + 352743.03 .2658340 .0128001 + 352771.75 .3021565 .0143903 + 352800.50 .3030872 .0143354 + 352829.31 .2604282 .0125809 + 352858.06 .2868405 .0136359 + 352886.84 .2913103 .0141427 + 352915.66 .2566464 .0129246 + 352944.41 .2998016 .0147879 + 352973.19 .2670591 .0135665 + 353001.97 .2900940 .0145018 + 353030.78 .2746355 .0139876 + 353059.56 .2608576 .0133464 + 353088.34 .2792316 .0136805 + 353117.19 .2725067 .0139113 + 353146.00 .2936164 .0142844 + 353174.78 .2842095 .0136784 + 353203.59 .2735864 .0134262 + 353232.44 .2831948 .0135272 + 353261.25 .2515413 .0123398 + 353290.06 .2952390 .0139546 + 353318.91 .2761384 .0133016 + 353347.75 .2863786 .0137890 + 353376.56 .2914796 .0136770 + 353405.38 .2765073 .0132185 + 353434.25 .2624589 .0127042 + 353463.09 .2786618 .0129428 + 353491.94 .2852429 .0132309 + 353520.81 .2651064 .0123998 + 353549.66 .2771303 .0124922 + 353578.50 .2732010 .0126219 + 353607.41 .2969318 .0138243 + 353636.25 .2934391 .0135669 + 353665.09 .2862654 .0132193 + 353693.97 .2958015 .0137236 + 353722.88 .2822741 .0133037 + 353751.75 .2824560 .0136336 + 353780.62 .2780685 .0133569 + 353809.53 .2809358 .0131423 + 353838.41 .2748736 .0131383 + 353867.31 .2694664 .0129509 + 353896.19 .2895787 .0136133 + 353925.12 .2692906 .0130866 + 353954.00 .2938834 .0138492 + 353982.91 .2676528 .0128706 + 354011.84 .2876933 .0140048 + 354040.75 .2890117 .0139149 + 354069.66 .2947207 .0140728 + 354098.56 .2883780 .0141335 + 354127.53 .3046308 .0146824 + 354156.44 .2641048 .0129971 + 354185.38 .2759568 .0135277 + 354214.34 .2885677 .0139116 + 354243.28 .2817199 .0131947 + 354272.19 .2795374 .0134178 + 354301.12 .2615799 .0127902 + 354330.12 .2598128 .0127012 + 354359.06 .2804238 .0134150 + 354388.00 .2368423 .0118936 + 354417.00 .2186758 .0115322 + 354445.97 .2181711 .0117295 + 354474.91 .1930285 .0107632 + 354503.88 .1554324 .0091360 + 354532.88 .1506556 .0092952 + 354561.84 .1530108 .0097077 + 354590.81 .1437273 .0091808 + 354619.84 .1421800 .0090139 + 354648.81 .1443647 .0088971 + 354677.81 .1696865 .0098415 + 354706.78 .1912961 .0103800 + 354735.81 .2313563 .0117713 + 354764.81 .2255202 .0113090 + 354793.81 .2539942 .0123440 + 354822.84 .2432390 .0117175 + 354851.84 .2772855 .0131400 + 354880.88 .2845185 .0134467 + 354909.88 .2831548 .0135667 + 354938.94 .2505587 .0123679 + 354967.94 .2874595 .0139145 + 354996.97 .2951844 .0143282 + 355026.03 .2783678 .0137889 + 355055.06 .2792509 .0136484 + 355084.09 .2779980 .0133948 + 355113.12 .2628843 .0126566 + 355142.22 .2865910 .0137158 + 355171.25 .2951291 .0138665 + 355200.31 .2667458 .0128611 + 355229.41 .2775976 .0136656 + 355258.44 .2952801 .0144242 + 355287.50 .2777934 .0140264 + 355316.62 .2892786 .0141621 + 355345.69 .2847059 .0140493 + 355374.75 .2847233 .0140045 + 355403.81 .2749658 .0136736 + 355432.94 .2899671 .0142013 + 355462.00 .2739896 .0135606 + 355491.09 .2701278 .0135445 + 355520.22 .2874521 .0141837 + 355549.31 .2997467 .0143531 + 355578.41 .2796548 .0134980 + 355607.50 .2861825 .0135483 + 355636.66 .2975230 .0141330 + 355665.75 .2910994 .0137884 + 355694.84 .2704875 .0125966 + 355724.00 .2998588 .0134620 + 355753.12 .2856080 .0133083 + 355782.25 .2777331 .0131247 + 355811.34 .3116642 .0141028 + 355840.53 .2935476 .0134867 + 355869.66 .2862215 .0133318 + 355898.78 .2924762 .0136615 + 355927.97 .2890162 .0130894 + 355957.09 .2793005 .0127558 + 355986.25 .2782494 .0129206 + 356015.38 .2774627 .0128877 + 356044.59 .2726483 .0123352 + 356073.75 .2786851 .0129065 + 356102.91 .3093815 .0142308 + 356132.09 .2795193 .0127405 + 356161.28 .2992684 .0141874 + 356190.44 .2870341 .0134051 + 356219.59 .2884971 .0135641 + 356248.81 .2900601 .0138666 + 356278.00 .2770274 .0132886 + 356307.19 .2642115 .0126698 + 356336.41 .3153715 .0151523 + 356365.59 .3032325 .0146371 + 356394.78 .2858332 .0141024 + 356424.00 .3020902 .0147201 + 356453.25 .3030628 .0146613 + 356482.44 .2894813 .0141397 + 356511.66 .2714693 .0133061 + 356540.91 .2941279 .0139244 + 356570.12 .2937590 .0135170 + 356599.34 .2847064 .0134469 + 356628.56 .2942358 .0138176 + 356657.81 .3195439 .0148010 + 356687.06 .2933961 .0140632 + 356716.28 .2912226 .0140606 + 356745.56 .2904057 .0136888 + 356774.81 .2886121 .0143917 + 356804.03 .2994958 .0146184 + 356833.28 .2927801 .0144196 + 356862.59 .2970428 .0142671 + 356891.84 .2956623 .0143891 + 356921.09 .3095916 .0145259 + 356950.41 .2934545 .0141422 + 356979.66 .2805211 .0137204 + 357008.94 .2948618 .0144808 + 357038.25 .2533377 .0122871 + 357067.53 .3263238 .0155076 + 357096.81 .2909240 .0139147 + 357126.09 .2730546 .0134290 + 357155.44 .2797702 .0135687 + 357184.72 .2962870 .0140019 + 357214.00 .3053751 .0145587 + 357243.34 .3121319 .0148482 + 357272.66 .2718951 .0129536 + 357301.94 .2958533 .0139884 + 357331.25 .2732522 .0130385 + 357360.62 .3101740 .0147391 + 357389.94 .2849386 .0133600 + 357419.25 .2690025 .0129353 + 357448.62 .2803201 .0136869 + 357477.94 .2979105 .0142830 + 357507.28 .3042894 .0145416 + 357536.59 .3082722 .0146442 + 357566.00 .2880968 .0140387 + 357595.31 .2952442 .0144221 + 357624.66 .2702838 .0135652 + 357654.06 .3012980 .0149100 + 357683.41 .2691248 .0132826 + 357712.75 .2876425 .0139908 + 357742.12 .2983578 .0144516 + 357771.53 .2940479 .0138582 + 357800.91 .2936288 .0138556 + 357830.25 .2818528 .0134839 + 357859.69 .2824151 .0133214 + 357889.06 .2786085 .0134079 + 357918.44 .2773190 .0133674 + 357947.81 .2735104 .0133240 + 357977.25 .2871862 .0140430 + 358006.66 .3057516 .0148249 + 358036.03 .2747512 .0135145 + 358065.50 .2761042 .0136818 + 358094.88 .2836526 .0137656 + 358124.28 .2824635 .0135387 + 358153.69 .2923888 .0138907 + 358183.16 .2937535 .0140084 + 358212.56 .2765689 .0132734 + 358242.00 .2800789 .0132835 + 358271.47 .3005597 .0137765 + 358300.88 .3128337 .0146832 + 358330.31 .2768770 .0128374 + 358359.75 .2897076 .0135603 + 358389.25 .2820964 .0129314 + 358418.69 .2799220 .0130488 + 358448.12 .3069858 .0143009 + 358477.62 .2878416 .0137538 + 358507.06 .2861716 .0133681 + 358536.53 .2911553 .0135798 + 358565.97 .2756450 .0129325 + 358595.50 .2791075 .0131900 + 358624.97 .2827055 .0135001 + 358654.44 .2967117 .0138621 + 358683.94 .2746646 .0130963 + 358713.44 .2949790 .0139713 + 358742.91 .2772319 .0134155 + 358772.38 .3103875 .0143948 + 358801.94 .3063689 .0145491 + 358831.41 .2951632 .0141511 + 358860.91 .2741862 .0131104 + 358890.47 .2924483 .0136898 + 358919.97 .2968014 .0137776 + 358949.47 .3206044 .0147367 + 358979.03 .2852287 .0130522 + 359008.53 .2700336 .0130443 + 359038.06 .2811847 .0128195 + 359067.56 .2783771 .0123962 + 359097.16 .2809024 .0127070 + 359126.69 .2765980 .0125248 + 359156.22 .2916234 .0133557 + 359185.81 .3138132 .0142644 + 359215.34 .2751288 .0129724 + 359244.88 .3056483 .0143302 + 359274.41 .2730935 .0129996 + 359304.03 .3054036 .0145820 + 359333.56 .2890092 .0142267 + 359363.12 .2803925 .0138138 + 359392.75 .2749493 .0135258 + 359422.31 .2941161 .0144381 + 359451.88 .3085736 .0147703 + 359481.44 .2844088 .0135427 + 359511.06 .2693117 .0131302 + 359540.66 .2888941 .0137079 + 359570.22 .2849917 .0137220 + 359599.88 .2970799 .0138422 + 359629.47 .3027173 .0143999 + 359659.06 .2963942 .0139460 + 359688.66 .2820567 .0137521 + 359718.31 .2843266 .0137169 + 359747.91 .2994775 .0144924 + 359777.50 .2849148 .0139252 + 359807.19 .2705215 .0129483 + 359836.78 .2703056 .0127872 + 359866.41 .2956645 .0133405 + 359896.03 .2880034 .0133605 + 359925.72 .2843449 .0127825 + 359955.34 .2947245 .0133543 + 359984.97 .2755491 .0123418 + 360014.66 .2728865 .0125415 + 360044.28 .2860034 .0130934 + 360073.94 .2824424 .0129774 + 360103.59 .2851603 .0132168 + 360133.28 .2767366 .0131600 + 360162.94 .2963581 .0134407 + 360192.59 .2780592 .0130056 + 360222.31 .3068170 .0142412 + 360251.97 .2981021 .0139988 + 360281.66 .2838175 .0138297 + 360311.31 .2842428 .0138871 + 360341.06 .3239223 .0151343 + 360370.72 .2714022 .0135950 + 360400.41 .2750864 .0134454 + 360430.16 .2875944 .0136465 + 360459.84 .3204904 .0154414 + 360489.53 .2997970 .0148473 + 360519.25 .2968976 .0147277 + 360549.00 .2945697 .0144641 + 360578.72 .3185419 .0153657 + 360608.41 .2825518 .0139947 + 360638.19 .2747137 .0135123 + 360667.91 .3153715 .0153020 + 360697.62 .2718440 .0133164 + 360727.41 .2966916 .0143798 + 360757.12 .3041836 .0144172 + 360786.84 .2797038 .0135757 + 360816.59 .3074755 .0146758 + 360846.38 .2972005 .0137992 + 360876.12 .2743162 .0133586 + 360905.88 .2902153 .0139070 + 360935.69 .2787938 .0132329 + 360965.44 .3186730 .0144370 + 360995.19 .2839580 .0131143 + 361024.94 .2853204 .0132927 + 361054.78 .3110753 .0141187 + 361084.53 .2855097 .0133517 + 361114.31 .2904422 .0134535 + 361144.12 .2844146 .0134612 + 361173.91 .2839416 .0131418 + 361203.69 .2905355 .0136655 + 361233.47 .2753422 .0129548 + 361263.34 .2801175 .0130212 + 361293.12 .3110079 .0144184 + 361322.91 .2978764 .0138556 + 361352.78 .2986189 .0138170 + 361382.59 .2969867 .0139478 + 361412.38 .2867476 .0133798 + 361442.19 .2837366 .0131402 + 361472.06 .3009009 .0138816 + 361501.91 .2877942 .0136989 + 361531.72 .3031890 .0140444 + 361561.59 .2730279 .0131076 + 361591.44 .2913560 .0136502 + 361621.25 .2925379 .0138677 + 361651.09 .2976280 .0138224 + 361681.00 .2814494 .0136307 + 361710.84 .2827982 .0136207 + 361740.69 .2943538 .0142478 + 361770.59 .2959072 .0144713 + 361800.47 .3083492 .0146161 + 361830.31 .3013252 .0142276 + 361860.19 .2802364 .0137042 + 361890.09 .3060614 .0144363 + 361919.97 .2996326 .0142076 + 361949.84 .2734313 .0129287 + 361979.78 .3003609 .0140308 + 362009.66 .3073801 .0142416 + 362039.56 .2979152 .0137499 + 362069.44 .2883481 .0131629 + 362099.41 .2734038 .0130368 + 362129.28 .2914647 .0138604 + 362159.19 .2819985 .0132293 + 362189.16 .2680998 .0128345 + 362219.06 .2944498 .0139110 + 362248.97 .2679103 .0133361 + 362278.88 .3110592 .0150800 + 362308.88 .2654390 .0134715 + 362338.78 .3096836 .0149676 + 362368.72 .3088285 .0153095 + 362398.69 .2928937 .0143797 + 362428.62 .2808930 .0139688 + 362458.56 .2807215 .0141491 + 362488.50 .3167734 .0151633 + 362518.50 .2985650 .0146462 + 362548.47 .2737130 .0134114 + 362578.41 .2900388 .0140819 + 362608.44 .2815008 .0140864 + 362638.38 .2901687 .0144340 + 362668.34 .2811188 .0137211 + 362698.38 .2928720 .0137834 + 362728.34 .3151685 .0151182 + 362758.31 .2820553 .0136864 + 362788.31 .2958984 .0139188 + 362818.34 .2954132 .0142413 + 362848.31 .3030224 .0145806 + 362878.31 .2744276 .0135183 + 362908.38 .2943483 .0145096 + 362938.38 .3192860 .0153502 + 362968.38 .2800790 .0140514 + 362998.38 .2824659 .0140596 + 363028.44 .2880540 .0145417 + 363058.44 .2918782 .0146056 + 363088.47 .2808402 .0137607 + 363118.53 .2664315 .0133998 + 363148.56 .3039743 .0146341 + 363178.59 .2746011 .0133104 + 363208.62 .2984118 .0143989 + 363238.72 .2891252 .0140635 + 363268.75 .3027570 .0142439 + 363298.78 .2643735 .0127699 + 363328.91 .2915238 .0140123 + 363358.94 .3129191 .0150029 + 363389.00 .2899537 .0139031 + 363419.06 .2969925 .0146616 + 363449.16 .2701092 .0135901 + 363479.22 .2970393 .0141804 + 363509.31 .2590216 .0128273 + 363539.44 .2839049 .0139805 + 363569.50 .2833017 .0138226 + 363599.59 .2903115 .0142666 + 363629.66 .2802413 .0136604 + 363659.81 .2759896 .0132932 + 363689.91 .2921062 .0142549 + 363720.00 .2877485 .0136963 + 363750.16 .2756476 .0132325 + 363780.25 .2532906 .0125442 + 363810.34 .2899749 .0139796 + 363840.47 .2733438 .0135689 + 363870.62 .2822122 .0140567 + 363900.75 .2775102 .0139497 + 363930.88 .3265916 .0161419 + 363961.06 .2873111 .0142806 + 363991.19 .2897433 .0139558 + 364021.31 .3102198 .0150209 + 364051.44 .2864586 .0136044 + 364081.66 .2851325 .0137085 + 364111.78 .2992207 .0139787 + 364141.94 .3008277 .0137622 + 364172.16 .2918887 .0132957 + 364202.28 .3040560 .0138397 + 364232.47 .3010980 .0135995 + 364262.62 .2922791 .0132980 + 364292.84 .2921687 .0137146 + 364323.00 .3008544 .0142225 + 364353.19 .3143513 .0152672 + 364383.41 .2818807 .0138648 + 364413.59 .2988433 .0147090 + 364443.78 .2899515 .0139458 + 364474.03 .2795218 .0136747 + 364504.22 .2910850 .0140419 + 364534.41 .2800471 .0138281 + 364564.59 .2693881 .0130709 + 364594.88 .2834765 .0134911 + 364625.06 .3286493 .0157406 + 364655.28 .2840379 .0136687 + 364685.56 .2799976 .0136576 + 364715.78 .3031098 .0141301 + 364746.00 .2901826 .0134684 + 364776.22 .2618958 .0127868 + 364806.50 .2795882 .0132363 + 364836.75 .2879370 .0136040 + 364866.97 .2810143 .0133147 + 364897.28 .2856362 .0134078 + 364927.53 .2759606 .0128162 + 364957.78 .2883693 .0136892 + 364988.03 .2994891 .0142847 + 365018.34 .2790122 .0131748 + 365048.59 .2854713 .0140358 + 365078.84 .2877494 .0141203 + 365109.19 .3005694 .0145541 + 365139.44 .3084599 .0153623 + 365169.72 .2859004 .0141641 + 365200.00 .2981367 .0150339 + 365230.34 .2657933 .0137248 + 365260.62 .2982589 .0149533 + 365290.91 .2687728 .0136912 + 365321.25 .2974480 .0148689 + 365351.56 .2980494 .0143234 + 365381.88 .3068182 .0147831 + 365412.16 .3006375 .0147298 + 365442.53 .3233652 .0154093 + 365472.84 .2639798 .0134939 + 365503.16 .3049002 .0147879 + 365533.53 .2840311 .0141148 + 365563.88 .2982815 .0144923 + 365594.19 .2904597 .0141839 + 365624.53 .2916913 .0140108 + 365654.91 .3023541 .0148280 + 365685.25 .2912776 .0140527 + 365715.59 .2944060 .0143971 + 365746.00 .2914819 .0140315 + 365776.34 .3079157 .0145599 + 365806.69 .2981259 .0140928 + 365837.06 .3244445 .0153803 + 365867.47 .3036059 .0143851 + 365897.84 .2971784 .0143294 + 365928.22 .2952258 .0141330 + 365958.62 .2983552 .0142537 + 365989.00 .2907380 .0138620 + 366019.41 .3237761 .0153652 + 366049.78 .2711851 .0131611 + 366080.22 .2887487 .0136384 + 366110.62 .2917317 .0137513 + 366141.00 .3142481 .0147928 + 366171.47 .2775279 .0134213 + 366201.88 .2711406 .0130028 + 366232.28 .2900567 .0137721 + 366262.75 .3124781 .0146113 + 366293.16 .2864010 .0136529 + 366323.56 .2822993 .0135505 + 366354.00 .3008587 .0146157 + 366384.47 .2985264 .0142311 + 366414.91 .2806121 .0139178 + 366445.34 .3109346 .0151427 + 366475.84 .3208365 .0155074 + 366506.28 .3067857 .0147812 + 366536.72 .2884022 .0142034 + 366567.16 .2790507 .0136369 + 366597.69 .2983612 .0148853 + 366628.12 .3005877 .0145890 + 366658.59 .3037337 .0145542 + 366689.12 .3088657 .0148535 + 366719.59 .2744699 .0136911 + 366750.06 .3073556 .0147574 + 366780.53 .2922411 .0142287 + 366811.06 .2837828 .0136226 + 366841.56 .2805603 .0134956 + 366872.03 .2651317 .0131100 + 366902.59 .3064665 .0143958 + 366933.06 .2865894 .0137579 + 366963.56 .3101075 .0150030 + 366994.06 .2867891 .0140092 + 367024.62 .2967416 .0141745 + 367055.16 .2670828 .0131772 + 367085.66 .3153606 .0148329 + 367116.25 .3009049 .0145281 + 367146.75 .3011338 .0141857 + 367177.28 .2834623 .0133987 + 367207.81 .2920944 .0140226 + 367238.41 .2839068 .0138017 + 367268.94 .3001266 .0148542 + 367299.47 .3071615 .0147688 + 367330.06 .2927782 .0143731 + 367360.62 .3083444 .0149032 + 367391.19 .2903612 .0146027 + 367421.72 .2912112 .0144230 + 367452.34 .2628604 .0132389 + 367482.91 .2905278 .0139458 + 367513.47 .2913077 .0141870 + 367544.09 .2945541 .0139270 + 367574.69 .3048344 .0144002 + 367605.25 .2845297 .0133573 + 367635.84 .2982975 .0145386 + 367666.47 .2876856 .0142201 + 367697.06 .2808851 .0138419 + 367727.66 .3059398 .0145252 + 367758.31 .3082425 .0147849 + 367788.91 .2754632 .0137951 + 367819.53 .2587787 .0128026 + 367850.12 .2901317 .0140649 + 367880.81 .3017496 .0145312 + 367911.41 .3030826 .0147765 + 367942.03 .3004317 .0147766 + 367972.72 .2830221 .0141152 + 368003.34 .3094365 .0152470 + 368033.97 .2979634 .0146233 + 368064.59 .2872128 .0141930 + 368095.31 .2987870 .0150468 + 368125.94 .2902029 .0142604 + 368156.59 .2869754 .0142848 + 368187.31 .2884164 .0145629 + 368217.97 .2703274 .0134637 + 368248.62 .3023098 .0149563 + 368279.34 .2757807 .0133446 + 368310.00 .2806655 .0135759 + 368340.66 .3087862 .0148378 + 368371.34 .2897959 .0137888 + 368402.09 .3047391 .0144586 + 368432.75 .2805507 .0136888 + 368463.44 .2841604 .0136648 + 368494.19 .2896298 .0139386 + 368524.88 .3008665 .0146503 + 368555.59 .2726321 .0131061 + 368586.28 .2883232 .0140181 + 368617.03 .2958973 .0142137 + 368647.75 .3128963 .0152429 + 368678.47 .2686281 .0132874 + 368709.25 .2945235 .0141368 + 368739.97 .3074197 .0147166 + 368770.69 .2809644 .0134866 + 368801.41 .3151913 .0145044 + 368832.19 .3164043 .0144708 + 368862.94 .3062461 .0140815 + 368893.66 .3115815 .0142125 + 368924.47 .2728372 .0128280 + 368955.22 .3040311 .0137915 + 368985.97 .2975340 .0137293 + 369016.72 .2665703 .0124506 + 369047.53 .2899117 .0135714 + 369078.31 .2900724 .0134624 + 369109.06 .2672089 .0125796 + 369139.91 .2736639 .0129414 + 369170.66 .2963527 .0139029 + 369201.44 .2884868 .0137580 + 369232.22 .2811024 .0131030 + 369263.06 .2819708 .0135956 + 369293.84 .2791536 .0136870 + 369324.66 .2711922 .0135944 + 369355.50 .3063135 .0148796 + 369386.31 .2954732 .0144350 + 369417.09 .2757733 .0133336 + 369447.91 .2858836 .0136869 + 369478.78 .3100041 .0149857 + 369509.59 .3143715 .0151756 + 369540.41 .2982912 .0141228 + 369571.31 .2932066 .0141391 + 369602.12 .2740377 .0131740 + 369632.97 .2915181 .0138842 + 369663.78 .3045416 .0142901 + 369694.69 .2744689 .0129657 + 369725.53 .2946925 .0135195 + 369756.38 .2873796 .0132506 + 369787.28 .3266554 .0148043 + 369818.16 .2801119 .0128531 + 369849.00 .3011475 .0141144 + 369879.88 .3201538 .0150226 + 369910.78 .2784368 .0136908 + 369941.66 .2929384 .0140806 + 369972.53 .3194762 .0155004 + 370003.47 .3010456 .0142857 + 370034.34 .2939396 .0144860 + 370065.22 .3240513 .0156548 + 370096.19 .2878599 .0142069 + 370127.06 .3062680 .0145113 + 370157.97 .3195341 .0156957 + 370188.88 .2721103 .0134083 + 370219.84 .2988994 .0145386 + 370250.75 .3008709 .0143079 + 370281.66 .3121133 .0149913 + 370312.62 .2685876 .0132079 + 370343.56 .3109448 .0146635 + 370374.47 .2822523 .0131942 + 370405.41 .3056457 .0138491 + 370436.41 .2789316 .0129667 + 370467.34 .3076133 .0143248 + 370498.28 .2780866 .0128278 + 370529.28 .2998693 .0136266 + 370560.22 .3043195 .0141960 + 370591.16 .3014991 .0140928 + 370622.12 .3140969 .0144156 + 370653.12 .3264862 .0149335 + 370684.09 .3014891 .0137785 + 370715.06 .2902597 .0135017 + 370746.09 .2810160 .0127393 + 370777.06 .2953594 .0136027 + 370808.06 .3048633 .0139206 + 370839.03 .2991678 .0137882 + 370870.09 .2825351 .0130850 + 370901.06 .2930993 .0135292 + 370932.06 .3147708 .0141734 + 370963.12 .2861391 .0132886 + 370994.12 .2926111 .0134176 + 371025.12 .3206100 .0142409 + 371056.12 .2991228 .0136429 + 371087.22 .2867624 .0131061 + 371118.22 .3069690 .0136464 + 371149.25 .3001372 .0135670 + 371180.34 .2781651 .0127678 + 371211.34 .3410626 .0154261 + 371242.38 .2936577 .0134925 + 371273.44 .2716651 .0128418 + 371304.53 .2911005 .0135668 + 371335.56 .3100538 .0144273 + 371366.62 .3174450 .0146665 + 371397.72 .2954563 .0136949 + 371428.78 .3179625 .0150852 + 371459.84 .2909251 .0136266 + 371490.91 .3010206 .0142843 + 371522.03 .2774256 .0131176 + 371553.09 .3163513 .0148556 + 371584.19 .3001379 .0142566 + 371615.31 .2834075 .0137191 + 371646.41 .2658596 .0129465 + 371677.50 .2866920 .0140036 + 371708.59 .2942386 .0141208 + 371739.75 .3130516 .0151699 + 371770.84 .2935471 .0140714 + 371801.94 .3042064 .0147258 + 371833.09 .3212886 .0153266 + 371864.22 .2980527 .0139857 + 371895.34 .2860534 .0137174 + 371926.44 .3089081 .0144467 + 371957.62 .2996505 .0139719 + 371988.75 .2922089 .0137167 + 372019.88 .2798020 .0132782 + 372051.09 .3004971 .0139979 + 372082.22 .2966330 .0136904 + 372113.38 .3005213 .0134786 + 372144.56 .2941858 .0136458 + 372175.72 .2637548 .0124204 + 372206.88 .2954184 .0138518 + 372238.03 .2945249 .0135866 + 372269.25 .3309598 .0150641 + 372300.41 .2989312 .0139028 + 372331.59 .2895798 .0133878 + 372362.81 .2924730 .0138022 + 372394.00 .3077013 .0142190 + 372425.19 .3192865 .0143651 + 372456.34 .3213767 .0145232 + 372487.59 .3128765 .0141669 + 372518.81 .2974130 .0135519 + 372550.00 .3078636 .0142080 + 372581.25 .2959821 .0134945 + 372612.47 .2932073 .0134589 + 372643.66 .2949507 .0140009 + 372674.88 .3029801 .0142457 + 372706.16 .2847995 .0134924 + 372737.38 .3197270 .0153521 + 372768.59 .2962753 .0142348 + 372799.88 .2988117 .0143661 + 372831.12 .3011745 .0146221 + 372862.34 .2923353 .0139190 + 372893.59 .3040977 .0143911 + 372924.91 .3241411 .0152427 + 372956.16 .2956809 .0139170 + 372987.41 .2942398 .0139304 + 373018.72 .3130327 .0147682 + 373049.97 .3120477 .0150555 + 373081.25 .3030749 .0146057 + 373112.50 .3173814 .0154636 + 373143.84 .2724777 .0134292 + 373175.12 .3217788 .0155142 + 373206.41 .2875693 .0142018 + 373237.75 .2924781 .0141310 + 373269.03 .3105014 .0148118 + 373300.31 .2969089 .0140778 + 373331.59 .3288789 .0148644 + 373362.97 .2929698 .0136782 + 373394.28 .3090589 .0136409 + 373425.56 .2771877 .0127067 + 373456.94 .3211116 .0143311 + 373488.25 .2996330 .0133091 + 373519.59 .2935445 .0132111 + 373550.91 .2918572 .0135491 + 373582.28 .2898297 .0130784 + 373613.62 .3138572 .0141344 + 373644.97 .2930709 .0135565 + 373676.34 .3058887 .0137422 + 373707.69 .2980291 .0131069 + 373739.03 .2882811 .0130684 + 373770.38 .2996166 .0135122 + 373801.81 .3023717 .0134076 + 373833.16 .2824050 .0126469 + 373864.53 .2816649 .0128358 + 373895.94 .2980671 .0133680 + 373927.31 .3159571 .0140613 + 373958.69 .2869138 .0129431 + 373990.12 .2896383 .0130862 + 374021.50 .2904899 .0132581 + 374052.91 .3251071 .0149295 + 374084.28 .3179081 .0144442 + 374115.75 .3033726 .0138791 + 374147.12 .3277178 .0148904 + 374178.53 .3060218 .0143505 + 374210.00 .2978039 .0139823 + 374241.41 .2843709 .0134284 + 374272.84 .3081948 .0144180 + 374304.25 .3199645 .0149908 + 374335.72 .3091624 .0146289 + 374367.16 .3026958 .0142197 + 374398.59 .3000673 .0140046 + 374430.06 .3134777 .0142464 + 374461.50 .3193942 .0145919 + 374492.97 .3060223 .0141086 + 374524.41 .3079867 .0144169 + 374555.91 .3071950 .0141130 + 374587.38 .3244558 .0146967 + 374618.81 .2954072 .0137020 + 374650.34 .3090902 .0144567 + 374681.81 .2864341 .0137705 + 374713.28 .3145975 .0146443 + 374744.75 .3057390 .0144926 + 374776.28 .3074799 .0146979 + 374807.75 .3006815 .0144821 + 374839.25 .2974700 .0145143 + 374870.81 .3377596 .0158546 + 374902.28 .2625208 .0126972 + 374933.78 .3036848 .0141211 + 374965.28 .2998670 .0143814 + 374996.84 .2809812 .0131156 + 375028.38 .3270701 .0149951 + 375059.88 .3001615 .0139497 + 375091.44 .3095258 .0139336 + 375122.97 .3120926 .0140505 + 375154.50 .2681163 .0124689 + 375186.03 .2932061 .0135062 + 375217.62 .3076349 .0141366 + 375249.16 .3105052 .0144010 + 375280.69 .2737319 .0128573 + 375312.31 .3185090 .0149213 + 375343.84 .3189056 .0148695 + 375375.41 .2990975 .0141673 + 375406.97 .2810308 .0130608 + 375438.56 .3077070 .0140919 + 375470.12 .3071544 .0141010 + 375501.72 .2837216 .0130086 + 375533.34 .3162889 .0146852 + 375564.91 .3073940 .0140462 + 375596.50 .2986055 .0141192 + 375628.09 .2874832 .0132373 + 375659.72 .3111304 .0146844 + 375691.31 .2907803 .0138853 + 375722.91 .2968152 .0141893 + 375754.59 .3016835 .0143423 + 375786.19 .2956109 .0144542 + 375817.78 .2902000 .0140467 + 375849.47 .3392624 .0162941 + 375881.09 .2809429 .0131425 + 375912.69 .2876972 .0134903 + 375944.31 .2972141 .0140217 + 375976.00 .3093024 .0145412 + 376007.66 .3206058 .0149104 + 376039.28 .2942588 .0142202 + 376070.97 .2895431 .0140870 + 376102.62 .3134347 .0151111 + 376134.28 .2946583 .0146339 + 376165.94 .3072008 .0148498 + 376197.66 .3218236 .0156461 + 376229.31 .3084696 .0150137 + 376260.97 .3090163 .0148171 + 376292.69 .2808613 .0136844 + 376324.38 .2943416 .0143140 + 376356.03 .3159961 .0152560 + 376387.72 .2986884 .0141868 + 376419.47 .3006721 .0143720 + 376451.16 .2750260 .0131772 + 376482.84 .2996401 .0141346 + 376514.59 .2941775 .0139269 + 376546.31 .2948531 .0135947 + 376578.00 .3208899 .0151386 + 376609.72 .2926602 .0138743 + 376641.50 .3019138 .0143658 + 376673.22 .3024312 .0145251 + 376704.94 .3028688 .0152107 + 376736.72 .3221519 .0158469 + 376768.44 .3167283 .0156071 + 376800.16 .3243186 .0159598 + 376831.91 .3053977 .0150144 + 376863.72 .2863200 .0144276 + 376895.44 .2874960 .0141171 + 376927.19 .3124548 .0152885 + 376959.00 .3232461 .0156916 + 376990.78 .2853984 .0142172 + 377022.53 .3361491 .0160476 + 377054.28 .3154030 .0158194 + 377086.12 .3114416 .0154735 + 377117.91 .2796198 .0137470 + 377149.66 .3028386 .0150843 + 377181.50 .3070129 .0151433 + 377213.28 .3015722 .0145322 + 377245.09 .2910920 .0141523 + 377276.88 .3200512 .0154627 + 377308.75 .3163357 .0152407 + 377340.53 .3041542 .0143625 + 377372.34 .3045927 .0143762 + 377404.22 .2978677 .0139350 + 377436.03 .3053049 .0140797 + 377467.84 .2792412 .0129361 + 377499.66 .3092185 .0144534 + 377531.53 .3108507 .0144706 + 377563.38 .3057359 .0143452 + 377595.22 .3270848 .0153082 + 377627.09 .3081759 .0144376 + 377658.94 .2886310 .0132706 + 377690.78 .2757890 .0133556 + 377722.62 .2909715 .0135696 + 377754.56 .3056809 .0142397 + 377786.41 .2928975 .0134517 + 377818.28 .3046636 .0141441 + 377850.19 .3111514 .0145076 + 377882.06 .2981953 .0140242 + 377913.94 .2840762 .0134222 + 377945.88 .3074968 .0147319 + 377977.75 .3197922 .0151761 + 378009.62 .3213479 .0153186 + 378041.53 .3103466 .0147160 + 378073.47 .2915684 .0138869 + 378105.38 .3042418 .0144096 + 378137.28 .2840654 .0134317 + 378169.25 .2830049 .0134139 + 378201.16 .2986325 .0139164 + 378233.06 .3205390 .0149067 + 378265.00 .3217809 .0151230 + 378296.97 .3149468 .0148313 + 378328.91 .3224550 .0151927 + 378360.81 .3039015 .0145416 + 378392.81 .3048710 .0146956 + 378424.75 .2870051 .0139878 + 378456.69 .3368092 .0156498 + 378488.66 .2939576 .0139668 + 378520.66 .2970972 .0144589 + 378552.62 .3102119 .0152796 + 378584.56 .3326972 .0157176 + 378616.59 .2830075 .0141737 + 378648.56 .3087887 .0154188 + 378680.53 .3100643 .0153074 + 378712.50 .3040894 .0149392 + 378744.53 .2761495 .0139784 + 378776.53 .3072037 .0151423 + 378808.50 .2981089 .0150448 + 378840.56 .3275984 .0161373 + 378872.56 .2954917 .0148286 + 378904.56 .2921847 .0141807 + 378936.56 .3096000 .0151368 + 378968.62 .2844552 .0140924 + 379000.62 .3027525 .0148273 + 379032.66 .2965421 .0145535 + 379064.72 .3021084 .0144960 + 379096.75 .3072622 .0147298 + 379128.78 .2881202 .0140622 + 379160.81 .3029231 .0141808 + 379192.91 .3150429 .0148046 + 379224.94 .3118210 .0146064 + 379257.00 .2844936 .0133751 + 379289.09 .3047679 .0146563 + 379321.16 .3145669 .0152910 + 379353.19 .2993765 .0143977 + 379385.25 .3305454 .0156424 + 379417.38 .3031684 .0150422 + 379449.47 .3103362 .0152506 + 379481.53 .3353162 .0164716 + 379513.66 .3114614 .0153395 + 379545.75 .3036076 .0153822 + 379577.81 .3050722 .0155214 + 379609.91 .3227859 .0159708 + 379642.06 .3302487 .0163038 + 379674.16 .2852696 .0145151 + 379706.25 .3245723 .0163741 + 379738.44 .2889935 .0149181 + 379770.53 .3127379 .0162004 + 379802.66 .2874716 .0148268 + 379834.81 .2879909 .0149785 + 379866.94 .2887914 .0151508 + 379899.06 .3008877 .0154714 + 379931.19 .3004513 .0161504 + 379963.41 .2844796 .0146347 + 379995.53 .2993248 .0149412 + 380027.66 .3055654 .0155375 + 380059.88 .3164564 .0154822 + 380092.03 .3050743 .0149015 + 380124.19 .3078358 .0151426 + 380156.34 .3234150 .0158582 + 380188.56 .3127795 .0149281 + 380220.72 .3091253 .0150510 + 380252.91 .2953257 .0144955 + 380285.12 .2946096 .0144546 + 380317.31 .3007255 .0148288 + 380349.50 .3219939 .0158253 + 380381.69 .2785462 .0134358 + 380413.94 .2897640 .0143630 + 380446.12 .2885667 .0142011 + 380478.31 .2990244 .0141948 + 380510.59 .3101594 .0145256 + 380542.78 .3034964 .0141815 + 380575.00 .3136961 .0145848 + 380607.22 .2888321 .0135125 + 380639.50 .2928094 .0136595 + 380671.72 .3069015 .0142758 + 380703.94 .3336516 .0154874 + 380736.22 .2937761 .0140520 + 380768.47 .3029447 .0143062 + 380800.72 .3236566 .0150667 + 380832.94 .3024252 .0140526 + 380865.25 .2976052 .0139409 + 380897.50 .3023709 .0138350 + 380929.78 .2881728 .0133216 + 380962.09 .2998992 .0139853 + 380994.34 .2955702 .0134540 + 381026.62 .3023285 .0139096 + 381058.88 .2981345 .0138893 + 381091.22 .3025246 .0139105 + 381123.50 .2921168 .0138442 + 381155.78 .3155795 .0146260 + 381188.16 .2901570 .0137362 + 381220.44 .3303151 .0150394 + 381252.72 .2709220 .0126291 + 381285.03 .3150695 .0144778 + 381317.41 .3038907 .0139163 + 381349.72 .3319001 .0151748 + 381382.03 .2942805 .0137196 + 381414.41 .2955894 .0136342 + 381446.72 .2960032 .0139757 + 381479.03 .2985025 .0138696 + 381511.38 .3018664 .0138751 + 381543.78 .2894425 .0135161 + 381576.09 .3145381 .0147241 + 381608.44 .3163593 .0149093 + 381640.84 .3058207 .0145833 + 381673.22 .2938413 .0141310 + 381705.56 .3063844 .0144751 + 381737.91 .3227801 .0155942 + 381770.34 .2948900 .0149823 + 381802.72 .3040574 .0149492 + 381835.06 .3326719 .0161463 + 381867.50 .2840768 .0143207 + 381899.91 .2894846 .0142768 + 381932.28 .2953843 .0145689 + 381964.72 .3209664 .0157293 + 381997.12 .3124413 .0151700 + 382029.50 .3057353 .0149159 + 382061.91 .3031813 .0146340 + 382094.38 .3177099 .0155421 + 382126.78 .3074278 .0149892 + 382159.19 .2995980 .0145667 + 382191.66 .3059587 .0144727 + 382224.09 .3379713 .0160692 + 382256.50 .3041964 .0146131 + 382288.94 .2950626 .0138932 + 382321.44 .2990212 .0140797 + 382353.88 .2953410 .0143368 + 382386.31 .2987288 .0145744 + 382418.81 .3211796 .0153997 + 382451.28 .3072587 .0147517 + 382483.72 .2992368 .0143461 + 382516.19 .2989841 .0143211 + 382548.72 .3014415 .0145137 + 382581.16 .2936758 .0142094 + 382613.62 .3121733 .0144210 + 382646.19 .2788700 .0135071 + 382678.66 .3109232 .0142644 + 382711.12 .3127922 .0144949 + 382743.62 .2781218 .0132260 + 382776.16 .3145945 .0118206 + 382808.66 .3161343 .0120046 + 382841.16 .2881222 .0111824 + 382873.72 .3004420 .0116591 + 382906.25 .3053093 .0118447 + 382938.75 .3066414 .0120184 + 382971.25 .2923030 .0115113 + 383003.84 .2952598 .0116954 + 383036.38 .2937257 .0116307 + 383068.91 .2997953 .0119675 + 383101.50 .2821937 .0111427 + 383134.03 .3091940 .0120389 + 383166.56 .2879653 .0111361 + 383199.09 .2936911 .0113487 + 383231.72 .2782716 .0108612 + 383264.28 .3076483 .0116884 + 383296.81 .2857375 .0109327 + 383329.44 .2894372 .0109952 + 383362.00 .3110718 .0118463 + 383394.59 .2934911 .0112950 + 383427.16 .2876616 .0109806 + 383459.78 .3068109 .0116732 + 383492.38 .2904356 .0113211 + 383524.97 .3103713 .0119862 + 383557.62 .2804281 .0111145 + 383590.22 .2889161 .0110687 + 383622.81 .2923327 .0112431 + 383655.41 .3183235 .0118982 + 383688.09 .2937695 .0110702 + 383720.69 .2856802 .0105679 + 383753.31 .2990185 .0110484 + 383786.00 .2786500 .0103673 + 383818.59 .2941373 .0108434 + 383851.25 .2831957 .0103806 + 383883.94 .3087807 .0111727 + 383916.56 .2878600 .0105842 + 383949.22 .3066395 .0111781 + 383981.84 .2946211 .0110195 + 384014.56 .2865663 .0107857 + 384047.22 .2828461 .0106742 + 384079.88 .2921745 .0109283 + 384112.59 .2707707 .0102421 + 384145.25 .2857991 .0106072 + 384177.94 .3049891 .0114573 + 384210.59 .3010784 .0111828 + 384243.34 .2726088 .0102774 + 384276.03 .2738714 .0105920 + 384308.69 .2937155 .0111417 + 384341.47 .3075528 .0115807 + 384374.16 .2899964 .0110519 + 384406.84 .2700033 .0104246 + 384439.56 .2903419 .0109511 + 384472.31 .2953389 .0110714 + 384505.03 .2870967 .0108554 + 384537.75 .3005750 .0112431 + 384570.53 .2787318 .0104793 + 384603.25 .2872317 .0108665 + 384635.97 .2668724 .0102852 + 384668.72 .3006670 .0113417 + 384701.50 .2836411 .0106885 + 384734.25 .2940001 .0110491 + 384767.00 .2955053 .0112803 + 384799.81 .2668431 .0105448 + 384832.56 .2735618 .0107097 + 384865.31 .2879439 .0111074 + 384898.06 .2926337 .0114266 + 384930.91 .2791889 .0108194 + 384963.66 .2793714 .0108941 + 384996.44 .2956133 .0111722 + 385029.28 .2903833 .0110264 + 385062.06 .2752584 .0104284 + 385094.84 .2824109 .0105396 + 385127.62 .2796307 .0102339 + 385160.50 .2781828 .0105619 + 385193.28 .2905083 .0108006 + 385226.09 .2928544 .0109630 + 385258.97 .2856296 .0107448 + 385291.78 .2785231 .0106080 + 385324.59 .2918861 .0112176 + 385357.41 .2947601 .0112309 + 385390.31 .2802527 .0108837 + 385423.12 .2826951 .0108565 + 385455.97 .2906371 .0112171 + 385488.84 .2995969 .0115296 + 385521.69 .2760276 .0107933 + 385554.53 .2605527 .0101402 + 385587.38 .2665274 .0104359 + 385620.31 .2821158 .0108740 + 385653.16 .2794122 .0108625 + 385686.03 .2729675 .0105462 + 385718.94 .2797876 .0111324 + 385751.81 .2976951 .0116218 + 385784.69 .2904083 .0115505 + 385817.62 .2828281 .0112547 + 385850.53 .2942768 .0116259 + 385883.41 .2833630 .0111205 + 385916.31 .2853650 .0112060 + 385949.25 .2805899 .0109604 + 385982.16 .2854793 .0113290 + 386015.06 .2817579 .0111052 + 386048.03 .2769998 .0108205 + 386080.94 .2869519 .0109866 + 386113.84 .2682219 .0104631 + 386146.78 .2848224 .0107248 + 386179.75 .2755220 .0103102 + 386212.69 .2760840 .0103003 + 386245.62 .2870860 .0108967 + 386278.62 .3005143 .0109463 + 386311.56 .2984920 .0111113 + 386344.50 .2815755 .0107009 + 386377.47 .2614892 .0099506 + 386410.47 .2788587 .0106542 + 386443.44 .2910931 .0110898 + 386476.41 .3045321 .0117229 + 386509.44 .2719382 .0108007 + 386542.41 .2834589 .0109615 + 386575.38 .2810882 .0110342 + 386608.34 .2779377 .0110472 + 386641.41 .2572260 .0101247 + 386674.41 .3019615 .0116188 + 386707.38 .2914353 .0113664 + 386740.44 .2961681 .0114603 + 386773.44 .2863586 .0113515 + 386806.44 .2837722 .0111565 + 386839.47 .2883759 .0112164 + 386872.53 .2873611 .0110157 + 386905.56 .2616311 .0104774 + 386938.56 .2830673 .0109056 + 386971.66 .2836571 .0110995 + 387004.69 .2803844 .0110022 + 387037.72 .2697620 .0107531 + 387070.78 .2904618 .0114152 + 387103.88 .3104596 .0120194 + 387136.91 .2918698 .0113861 + 387169.97 .2806599 .0110147 + 387203.09 .2942762 .0112913 + 387236.16 .2646081 .0105165 + 387269.22 .2746645 .0106112 + 387302.28 .2799200 .0107921 + 387335.41 .2769208 .0107013 + 387368.50 .2756447 .0108952 + 387401.56 .2819089 .0109250 + 387434.72 .2838348 .0112951 + 387467.81 .2901165 .0113238 + 387500.91 .2788866 .0110088 + 387534.00 .2968420 .0116300 + 387567.16 .2928746 .0114086 + 387600.28 .2810265 .0110776 + 387633.38 .2879427 .0112482 + 387666.56 .2741277 .0107690 + 387699.69 .2788755 .0110140 + 387732.81 .2876525 .0112350 + 387765.94 .2995933 .0114734 + 387799.12 .2892128 .0108860 + 387832.28 .2924010 .0110677 + 387865.41 .2927004 .0112374 + 387898.62 .2883036 .0109929 + 387931.75 .2889266 .0112186 + 387964.91 .2678908 .0104645 + 387998.12 .2765340 .0108956 + 388031.31 .2795638 .0109422 + 388064.47 .2869272 .0110344 + 388097.62 .2810426 .0109193 + 388130.88 .2764199 .0106574 + 388164.06 .2817887 .0105974 + 388197.25 .3015091 .0111158 + 388230.50 .2912585 .0106528 + 388263.69 .2787257 .0105447 + 388296.88 .2902583 .0108753 + 388330.06 .2733940 .0102768 + 388363.34 .2657425 .0099790 + 388396.56 .2790153 .0103588 + 388429.75 .2798561 .0102295 + 388463.03 .2924264 .0104583 + 388496.25 .2846077 .0102480 + 388529.50 .2847488 .0102051 + 388562.72 .2881369 .0103241 + 388596.03 .2900178 .0104656 + 388629.25 .3002754 .0110135 + 388662.50 .2788899 .0102723 + 388695.81 .2649124 .0100958 + 388729.06 .2859366 .0110951 + 388762.31 .2946342 .0115883 + 388795.56 .2928861 .0115739 + 388828.91 .2878329 .0115230 + 388862.16 .2903573 .0115177 + 388895.44 .2732054 .0109475 + 388928.78 .2892613 .0110247 + 388962.06 .2699804 .0103344 + 388995.34 .2874599 .0108609 + 389028.62 .2877151 .0107747 + 389062.00 .2890239 .0107662 + 389095.28 .2891648 .0107924 + 389128.59 .2987570 .0111947 + 389161.97 .2793205 .0105099 + 389195.28 .2767923 .0103998 + 389228.59 .2829087 .0107077 + 389261.91 .2903474 .0108136 + 389295.31 .2748170 .0103637 + 389328.62 .3057443 .0112582 + 389361.97 .2853623 .0105981 + 389395.38 .3005557 .0114886 + 389428.72 .2641712 .0102173 + 389462.06 .2818165 .0108497 + 389495.41 .2853193 .0112388 + 389528.81 .2823945 .0110026 + 389562.19 .2909304 .0115080 + 389595.53 .2924443 .0115776 + 389628.97 .2886881 .0114109 + 389662.34 .3041506 .0119525 + 389695.72 .2887286 .0115461 + 389729.09 .2960423 .0118808 + 389762.53 .3023468 .0118518 + 389795.94 .2876649 .0114845 + 389829.31 .2753200 .0109620 + 389862.78 .2843088 .0111809 + 389896.19 .2761597 .0107769 + 389929.59 .3067166 .0116195 + 389963.06 .2900095 .0111778 + 389996.47 .2862116 .0110188 + 390029.91 .2897099 .0111368 + 390063.31 .2887331 .0111261 + 390096.81 .2939949 .0113119 + 390130.25 .3003663 .0114691 + 390163.69 .2727904 .0106970 + 390197.19 .2688514 .0105631 + 390230.62 .2845467 .0109498 + 390264.06 .2798383 .0108265 + 390297.53 .2939866 .0110849 + 390331.03 .2966631 .0112025 + 390364.50 .3005253 .0109181 + 390397.97 .2972683 .0106196 + 390431.50 .2788773 .0101834 + 390464.97 .2915331 .0104211 + 390498.47 .2967148 .0105743 + 390531.94 .2858961 .0104298 + 390565.50 .2901301 .0104885 + 390598.97 .2937705 .0108032 + 390632.47 .2868995 .0106496 + 390666.03 .2984187 .0110325 + 390699.56 .2753009 .0102664 + 390733.06 .2784856 .0105088 + 390766.56 .2777658 .0105281 + 390800.16 .2773993 .0105018 + 390833.69 .2988395 .0112454 + 390867.19 .2701978 .0103909 + 390900.78 .2773418 .0104588 + 390934.31 .2881373 .0109802 + 390967.88 .2823499 .0103917 + 391001.41 .2854947 .0105261 + 391035.03 .2963163 .0109124 + 391068.56 .3039457 .0110682 + 391102.12 .2941181 .0107794 + 391135.75 .2939667 .0107586 + 391169.31 .2876868 .0107133 + 391202.88 .2938926 .0110082 + 391236.47 .2983996 .0112208 + 391270.09 .2830746 .0106383 + 391303.69 .2944291 .0110213 + 391337.28 .2912641 .0110229 + 391370.94 .3089936 .0117592 + 391404.53 .3000995 .0113486 + 391438.12 .3008246 .0113220 + 391471.72 .2654408 .0102267 + 391505.41 .2936697 .0109324 + 391539.00 .2756413 .0101760 + 391572.62 .2792182 .0102958 + 391606.31 .2847139 .0105360 + 391639.94 .2951025 .0107735 + 391673.56 .2874070 .0105505 + 391707.19 .3002032 .0111600 + 391740.91 .2833379 .0108528 + 391774.56 .2862002 .0110512 + 391808.19 .2931044 .0113903 + 391841.91 .2866169 .0111426 + 391875.56 .2866184 .0111034 + 391909.22 .2956277 .0112207 + 391942.91 .2811178 .0108239 + 391976.62 .2971072 .0110816 + 392010.31 .2964123 .0113812 + 392043.97 .2892076 .0109481 + 392077.72 .3044664 .0116186 + 392111.41 .2948970 .0112749 + 392145.09 .2648925 .0103457 + 392178.84 .2899642 .0113748 + 392212.56 .3076157 .0116593 + 392246.25 .2902761 .0114184 + 392279.97 .2946693 .0114153 + 392313.75 .3050355 .0116329 + 392347.47 .2949709 .0110398 + 392381.19 .3034698 .0113019 + 392414.97 .2994749 .0111183 + 392448.69 .2924416 .0104992 + 392482.44 .3200873 .0116436 + 392516.19 .2835156 .0103661 + 392549.97 .3023817 .0108931 + 392583.72 .3096399 .0111660 + 392617.47 .2782094 .0104266 + 392651.31 .2910712 .0106070 + 392685.06 .2842880 .0106059 + 392718.81 .2762890 .0103042 + 392752.59 .3072835 .0114368 + 392786.44 .2843839 .0106852 + 392820.22 .2825992 .0105575 + 392854.00 .3116052 .0114652 + 392887.84 .3031776 .0111926 + 392921.62 .3139384 .0115304 + 392955.44 .2783312 .0105172 + 392989.22 .3129305 .0116779 + 393023.09 .3041821 .0114217 + 393056.91 .2897875 .0107793 + 393090.72 .2891302 .0110944 + 393124.59 .3004419 .0113852 + 393158.41 .2924596 .0111611 + 393192.25 .2820924 .0108349 + 393226.06 .2944241 .0111198 + 393259.97 .3156469 .0118182 + 393293.81 .3007371 .0114581 + 393327.66 .3072574 .0113132 + 393361.56 .3016726 .0109430 + 393395.41 .3158173 .0115457 + 393429.28 .2985996 .0108745 + 393463.12 .2957107 .0106132 + 393497.06 .3017829 .0108912 + 393530.94 .2787419 .0101869 + 393564.81 .2887841 .0105195 + 393598.75 .2752896 .0102708 + 393632.62 .3106900 .0111025 + 393666.53 .2994975 .0109511 + 393700.41 .3033216 .0111988 + 393734.38 .3008830 .0111793 + 393768.28 .2861088 .0107149 + 393802.19 .2891601 .0108275 + 393836.16 .2940846 .0110578 + 393870.06 .2822791 .0107845 + 393903.97 .2867652 .0109407 + 393937.91 .2869015 .0108467 + 393971.91 .2766260 .0106132 + 394005.81 .2815148 .0108524 + 394039.75 .3083710 .0115737 + 394073.75 .2829072 .0108712 + 394107.72 .2706511 .0105178 + 394141.66 .2936994 .0112986 + 394175.69 .3155354 .0117919 + 394209.62 .2945494 .0112160 + 394243.59 .2864950 .0108393 + 394277.56 .2836755 .0107517 + 394311.59 .2951262 .0109653 + 394345.56 .2800333 .0102694 + 394379.53 .2927064 .0105192 + 394413.59 .3071211 .0111598 + 394447.59 .2946662 .0108173 + 394481.56 .2953839 .0109664 + 394515.56 .2998857 .0110164 + 394549.62 .2881192 .0109107 + 394583.66 .2863719 .0107062 + 394617.66 .2990758 .0112347 + 394651.72 .2841527 .0106149 + 394685.75 .2845181 .0106860 + 394719.78 .2916486 .0108498 + 394753.81 .2833747 .0105862 + 394787.91 .2813838 .0103222 + 394821.94 .2937418 .0105808 + 394855.97 .2924873 .0107871 + 394890.09 .2857364 .0105800 + 394924.12 .2907774 .0107186 + 394958.19 .2862526 .0105876 + 394992.25 .3306485 .0119847 + 395026.38 .3069252 .0112491 + 395060.44 .2813891 .0105648 + 395094.50 .3070632 .0111429 + 395128.66 .2836372 .0105876 + 395162.72 .2915302 .0108648 + 395196.81 .2840009 .0106483 + 395230.91 .2851674 .0107347 + 395265.06 .2811345 .0106762 + 395299.16 .2850416 .0107088 + 395333.25 .3070156 .0114720 + 395367.44 .2929190 .0110852 + 395401.56 .2951725 .0108244 + 395435.66 .3004184 .0110343 + 395469.78 .2786062 .0099630 + 395503.97 .3024022 .0105145 + 395538.09 .2906853 .0100935 + 395572.25 .3190527 .0108071 + 395606.44 .3057005 .0106191 + 395640.59 .3038906 .0104591 + 395674.72 .3032320 .0104571 + 395708.88 .2961238 .0104361 + 395743.09 .3059708 .0106682 + 395777.25 .2880021 .0103900 + 395811.44 .2912729 .0107060 + 395845.66 .2974918 .0109432 + 395879.84 .3102745 .0114382 + 395914.00 .2961065 .0110229 + 395948.19 .3088041 .0110978 + 395982.44 .2897775 .0105289 + 396016.62 .3041096 .0111286 + 396050.81 .2957143 .0109358 + 396085.09 .3044889 .0110913 + 396119.28 .2833148 .0104711 + 396153.50 .3180247 .0113398 + 396187.78 .3021539 .0109920 + 396222.00 .3073833 .0112048 + 396256.22 .2867612 .0106143 + 396290.44 .2951163 .0107884 + 396324.75 .3012753 .0111356 + 396358.97 .2924790 .0109160 + 396393.22 .2880688 .0107248 + 396427.53 .2939385 .0109490 + 396461.78 .3081002 .0114207 + 396496.03 .3064609 .0112990 + 396530.28 .3095119 .0115759 + 396564.62 .2965725 .0111564 + 396598.88 .2951199 .0109700 + 396633.16 .3242945 .0121606 + 396667.50 .2993959 .0114645 + 396701.78 .3038097 .0115288 + 396736.06 .2894274 .0111794 + 396770.34 .2817959 .0108325 + 396804.69 .2961460 .0113971 + 396839.00 .2981405 .0114473 + 396873.31 .3090148 .0117323 + 396907.69 .3042930 .0116108 + 396941.97 .3022274 .0114263 + 396976.31 .3151719 .0120463 + 397010.62 .2891909 .0109631 + 397045.00 .3018452 .0112724 + 397079.34 .2843472 .0107141 + 397113.66 .3156946 .0114957 + 397148.06 .3178751 .0114326 + 397182.41 .3037886 .0107742 + 397216.75 .3169481 .0112120 + 397251.12 .2866256 .0103099 + 397285.53 .3037862 .0106173 + 397319.91 .2960772 .0102870 + 397354.25 .2974591 .0104268 + 397388.69 .3174036 .0109632 + 397423.06 .2843061 .0102576 + 397457.44 .3004181 .0104423 + 397491.81 .3064556 .0108224 + 397526.28 .2918100 .0103622 + 397560.66 .2906890 .0104529 + 397595.06 .2831065 .0101985 + 397629.53 .2996592 .0107603 + 397663.94 .2967795 .0106945 + 397698.34 .3186327 .0112140 + 397732.75 .2948562 .0107063 + 397767.25 .3044241 .0112464 + 397801.66 .2986666 .0109204 + 397836.09 .2976711 .0109853 + 397870.59 .3206358 .0115930 + 397905.03 .2993199 .0110563 + 397939.47 .2926124 .0108121 + 397973.91 .3003277 .0111148 + 398008.41 .2914394 .0107862 + 398042.88 .3245838 .0116197 + 398077.34 .3086495 .0112982 + 398111.88 .3051789 .0112088 + 398146.31 .2872551 .0106355 + 398180.81 .2982361 .0110196 + 398215.28 .2957943 .0108413 + 398249.81 .2992018 .0110017 + 398284.31 .3055211 .0108912 + 398318.78 .2912228 .0106798 + 398353.34 .2904826 .0107060 + 398387.84 .3002231 .0108023 + 398422.34 .2886007 .0104470 + 398456.94 .2913048 .0107853 + 398491.44 .3074919 .0111370 + 398525.97 .2858936 .0102394 + 398560.47 .3106404 .0110682 + 398595.06 .2904521 .0102974 + 398629.59 .3015345 .0106677 + 398664.12 .2903787 .0101881 + 398698.75 .2967959 .0105731 + 398733.28 .3071077 .0107835 + 398767.84 .3010094 .0106416 + 398802.38 .3073694 .0108602 + 398837.00 .2955772 .0106258 + 398871.56 .2893672 .0105115 + 398906.12 .3232146 .0116004 + 398940.78 .3028204 .0110251 + 398975.34 .3017769 .0111976 + 399009.94 .2959723 .0108780 + 399044.50 .3066087 .0112752 + 399079.16 .2999956 .0110260 + 399113.75 .3148014 .0116858 + 399148.34 .2981881 .0109339 + 399183.03 .3283736 .0118038 + 399217.62 .2940268 .0108385 + 399252.25 .3026527 .0109184 + 399286.84 .3032930 .0112026 + 399321.53 .3107746 .0113843 + 399356.16 .2869858 .0106044 + 399390.78 .2997432 .0109134 + 399425.50 .3028153 .0111173 + 399460.12 .2988081 .0109361 + 399494.78 .2891876 .0106893 + 399529.41 .2931952 .0106688 + 399564.12 .3019944 .0110871 + 399598.78 .2920024 .0110029 + 399633.44 .2910113 .0107481 + 399668.19 .2957688 .0109133 + 399702.84 .2744039 .0103356 + 399737.53 .2916401 .0107410 + 399772.19 .2982222 .0109548 + 399806.94 .3219202 .0116870 + 399841.62 .2935826 .0107903 + 399876.34 .2856764 .0106461 + 399911.09 .2952382 .0108127 + 399945.78 .2846647 .0105387 + 399980.50 .3004238 .0109471 + 400015.22 .3020044 .0111420 + 400050.00 .3020015 .0109950 + 400084.72 .2788237 .0104334 + 400119.44 .2910074 .0109232 + 400154.22 .2889622 .0107885 + 400188.97 .3134578 .0114248 + 400223.69 .2960837 .0110370 + 400258.44 .3079914 .0112898 + 400293.25 .3046590 .0111227 + 400328.00 .3022443 .0110440 + 400362.75 .2736412 .0103073 + 400397.59 .3024708 .0109910 + 400432.34 .2976201 .0111813 + 400467.12 .3143931 .0115347 + 400501.97 .3122619 .0114281 + 400536.75 .2927044 .0106857 + 400571.53 .2953141 .0107872 + 400606.31 .3263449 .0116939 + 400641.16 .3029519 .0107752 + 400675.97 .2970152 .0105778 + 400710.75 .2896267 .0101284 + 400745.62 .3050364 .0107071 + 400780.44 .3073625 .0110699 + 400815.25 .2893004 .0101692 + 400850.06 .2829365 .0099016 + 400884.97 .3039841 .0105079 + 400919.78 .2939198 .0103928 + 400954.62 .3146169 .0108087 + 400989.53 .2956903 .0104876 + 401024.38 .3020084 .0105532 + 401059.22 .3064600 .0107309 + 401094.06 .3023720 .0106891 + 401129.00 .2967860 .0104504 + 401163.84 .3057957 .0108395 + 401198.72 .3219155 .0112379 + 401233.66 .3133253 .0110889 + 401268.53 .3026164 .0106948 + 401303.41 .2875613 .0102735 + 401338.28 .2861296 .0101110 + 401373.22 .3163023 .0111761 + 401408.12 .3092818 .0106598 + 401443.03 .2947544 .0103290 + 401478.00 .2923180 .0102047 + 401512.91 .2899545 .0101005 + 401547.81 .2868358 .0100437 + 401582.72 .2895893 .0100572 + 401617.72 .2882890 .0098977 + 401652.62 .3159541 .0109129 + 401687.56 .2959068 .0103382 + 401722.56 .3059427 .0105747 + 401757.50 .3114895 .0107282 + 401792.44 .2758381 .0097354 + 401827.38 .2908916 .0101385 + 401862.41 .3029674 .0106568 + 401897.34 .2967197 .0106782 + 401932.31 .2892100 .0102248 + 401967.34 .3065620 .0110786 + 402002.31 .2972588 .0109136 + 402037.28 .3166370 .0114235 + 402072.25 .2990638 .0111308 + 402107.31 .3173238 .0118972 + 402142.31 .3009388 .0111211 + 402177.28 .3152302 .0117045 + 402212.34 .2971897 .0108767 + 402247.34 .3023687 .0108646 + 402282.38 .3093076 .0110584 + 402317.38 .2996306 .0109278 + 402352.47 .3060843 .0107894 + 402387.47 .2917410 .0103289 + 402422.50 .3117256 .0108132 + 402457.59 .3139428 .0110250 + 402492.62 .3213896 .0111813 + 402527.66 .2906842 .0103330 + 402562.72 .3073192 .0107878 + 402597.81 .3234536 .0112047 + 402632.88 .2918462 .0101938 + 402667.94 .3064648 .0108361 + 402703.06 .2982860 .0106305 + 402738.12 .2743508 .0100330 + 402773.19 .3114502 .0113147 + 402808.34 .3164009 .0111263 + 402843.41 .3064952 .0109868 + 402878.50 .3068905 .0110360 + 402913.59 .2989607 .0107862 + 402948.75 .2991844 .0105102 + 402983.84 .3016762 .0107807 + 403018.94 .2972851 .0107296 + 403054.12 .3081745 .0110018 + 403089.22 .2902184 .0105428 + 403124.34 .2965345 .0105093 + 403159.47 .3169746 .0113472 + 403194.66 .3130154 .0109913 + 403229.78 .3119577 .0111185 + 403264.91 .3047310 .0107954 + 403300.12 .2842922 .0104555 + 403335.25 .3123873 .0112250 + 403370.41 .3063436 .0110505 + 403405.56 .3232195 .0115433 + 403440.78 .2916540 .0106411 + 403475.94 .2930559 .0105702 + 403511.12 .2967910 .0105243 + 403546.34 .2908442 .0103967 + 403581.53 .3050603 .0106822 + 403616.72 .2924937 .0102745 + 403651.91 .2980481 .0104594 + 403687.16 .3163847 .0110769 + 403722.34 .2885892 .0101696 + 403757.53 .3205306 .0111636 + 403792.81 .2938415 .0104330 + 403828.03 .3224915 .0111483 + 403863.22 .3058785 .0106942 + 403898.44 .2921058 .0103526 + 403933.75 .2931945 .0103845 + 403968.97 .3098360 .0109265 + 404004.19 .2922136 .0104626 + 404039.50 .3149731 .0110102 + 404074.75 .2937070 .0105159 + 404109.97 .3146782 .0109938 + 404145.22 .3224815 .0113460 + 404180.56 .2982402 .0108543 + 404215.81 .3018732 .0108163 + 404251.06 .3067340 .0108874 + 404286.41 .2970370 .0107330 + 404321.69 .3132851 .0111925 + 404356.97 .3133203 .0110661 + 404392.25 .3000436 .0107443 + 404427.59 .3002950 .0106517 + 404462.88 .2934477 .0106050 + 404498.19 .3026025 .0106985 + 404533.53 .2731650 .0099828 + 404568.84 .3116311 .0110411 + 404604.16 .3034577 .0109242 + 404639.47 .2980417 .0104633 + 404674.84 .3244306 .0111928 + 404710.19 .2981273 .0104498 + 404745.50 .3125499 .0108851 + 404780.91 .2976618 .0105036 + 404816.25 .3054343 .0108067 + 404851.59 .3282825 .0114460 + 404887.00 .3079726 .0110164 + 404922.34 .2956358 .0106972 + 404957.72 .2989684 .0108004 + 404993.06 .2962171 .0108304 + 405028.50 .3070445 .0110895 + 405063.88 .3137698 .0113939 + 405099.25 .3114026 .0110136 + 405134.69 .2879348 .0104880 + 405170.06 .3117438 .0110143 + 405205.47 .2859667 .0101813 + 405240.84 .3003673 .0106370 + 405276.31 .3030090 .0106025 + 405311.72 .2952268 .0105123 + 405347.12 .3055389 .0106293 + 405382.59 .2927769 .0105584 + 405418.03 .3198025 .0111953 + 405453.44 .3128958 .0109951 + 405488.88 .2989807 .0104298 + 405524.38 .3095803 .0107472 + 405559.81 .3081807 .0105461 + 405595.25 .3118499 .0106687 + 405630.75 .3039586 .0102639 + 405666.19 .2989098 .0101030 + 405701.66 .3053022 .0104550 + 405737.09 .3050234 .0102714 + 405772.62 .3245418 .0109290 + 405808.09 .3083899 .0104041 + 405843.56 .3097826 .0104436 + 405879.12 .3036550 .0103375 + 405914.59 .2852803 .0096715 + 405950.09 .3017500 .0102268 + 405985.56 .3161774 .0107447 + 406021.12 .2935269 .0102042 + 406056.62 .3137034 .0107308 + 406092.16 .3027366 .0103524 + 406127.72 .3159212 .0108905 + 406163.22 .2960733 .0105298 + 406198.75 .3229910 .0112820 + 406234.28 .3166102 .0110598 + 406269.88 .3151257 .0113547 + 406305.41 .3042320 .0109104 + 406340.94 .3108663 .0114232 + 406376.56 .3149348 .0114190 + 406412.09 .3033543 .0108508 + 406447.66 .2948472 .0105010 + 406483.19 .3026018 .0107472 + 406518.81 .3145871 .0111548 + 406554.41 .3108744 .0109120 + 406589.97 .3048791 .0108553 + 406625.59 .3203404 .0111953 + 406661.19 .3090855 .0110399 + 406696.78 .2970447 .0104912 + 406732.34 .2913264 .0104435 + 406768.00 .3131356 .0110809 + 406803.62 .2873781 .0101495 + 406839.22 .3005055 .0107500 + 406874.88 .3078707 .0109256 + 406910.50 .3054754 .0108621 + 406946.12 .3135875 .0110816 + 406981.81 .2921743 .0105790 + 407017.44 .3162939 .0113327 + 407053.06 .3074939 .0109506 + 407088.69 .2960792 .0109118 + 407124.41 .3147868 .0114420 + 407160.06 .3201978 .0115210 + 407195.69 .2972533 .0107374 + 407231.41 .3073570 .0110837 + 407267.09 .3111045 .0111476 + 407302.75 .3177983 .0112427 + 407338.41 .3182590 .0110664 + 407374.16 .3018683 .0105644 + 407409.81 .3063289 .0105449 + 407445.50 .3013189 .0106150 + 407481.25 .3204898 .0110416 + 407516.97 .3248055 .0112080 + 407552.66 .2902678 .0105125 + 407588.34 .3128916 .0112746 + 407624.12 .2984465 .0107970 + 407659.84 .3249737 .0116842 + 407695.56 .2923883 .0105650 + 407731.34 .3015026 .0106444 + 407767.06 .2999581 .0106245 + 407802.78 .3108719 .0109737 + 407838.53 .3149942 .0109290 + 407874.34 .3083110 .0106788 + 407910.06 .3094861 .0105902 + 407945.81 .2986834 .0101595 + 407981.66 .3166693 .0105798 + 408017.41 .3125227 .0105168 + 408053.16 .3184163 .0108666 + 408088.94 .2908017 .0101143 + 408124.75 .2914219 .0100506 + 408160.53 .3063746 .0108278 + 408196.31 .3119442 .0110450 + 408232.19 .3275501 .0113674 + 408267.97 .2957340 .0105601 + 408303.75 .3009176 .0107854 + 408339.56 .3187074 .0112713 + 408375.44 .2923484 .0104194 + 408411.25 .3031939 .0107229 + 408447.06 .3066376 .0108744 + 408482.94 .2985284 .0105566 + 408518.75 .3055838 .0106907 + 408554.59 .3148020 .0110338 + 408590.44 .3243349 .0113729 + 408626.34 .3067935 .0106550 + 408662.16 .3023201 .0106562 + 408698.03 .3105888 .0108480 + 408733.94 .3200107 .0111379 + 408769.78 .2991990 .0104979 + 408805.66 .3164821 .0109047 + 408841.53 .3028595 .0106872 + 408877.47 .2922546 .0102228 + 408913.34 .3037605 .0106076 + 408949.22 .3090553 .0108547 + 408985.16 .3227959 .0111951 + 409021.06 .3147467 .0108305 + 409056.94 .3251771 .0113496 + 409092.84 .3244718 .0113786 + 409128.81 .2956920 .0105405 + 409164.72 .2970965 .0106033 + 409200.62 .3123100 .0108667 + 409236.62 .3178951 .0108909 + 409272.53 .3086786 .0105781 + 409308.47 .3033151 .0101365 + 409344.47 .3011211 .0101673 + 409380.41 .3151085 .0104471 + 409416.34 .3011236 .0099744 + 409452.31 .3165208 .0107183 + 409488.31 .3074571 .0104770 + 409524.28 .3234835 .0111288 + 409560.22 .3031646 .0105580 + 409596.25 .3122869 .0108359 + 409632.25 .3265225 .0112348 + 409668.22 .3279457 .0111620 + 409704.19 .3033206 .0104605 + 409740.25 .3053305 .0103181 + 409776.22 .3077424 .0103554 + 409812.22 .3223252 .0107632 + 409848.28 .3000135 .0101047 + 409884.28 .3019987 .0102991 + 409920.31 .3188512 .0106577 + 409956.31 .3090164 .0106698 + 409992.41 .2922722 .0101412 + 410028.41 .2895546 .0101669 + 410064.44 .3238667 .0111784 + 410100.53 .3055676 .0106900 + 410136.59 .2983426 .0104205 + 410172.62 .3078962 .0106913 + 410208.66 .3022861 .0104434 + 410244.78 .3164279 .0110089 + 410280.84 .3139841 .0108541 + 410316.91 .3147932 .0108199 + 410353.03 .3017667 .0104142 + 410389.09 .2995852 .0103305 + 410425.19 .3159851 .0108930 + 410461.25 .3163645 .0108832 + 410497.41 .3125584 .0109027 + 410533.50 .3115707 .0110430 + 410569.59 .3088112 .0110746 + 410605.75 .3047864 .0108424 + 410641.88 .3037772 .0112842 + 410677.97 .3098823 .0112722 + 410714.09 .3196718 .0116606 + 410750.25 .3016712 .0110049 + 410786.38 .2951602 .0110120 + 410822.50 .3203034 .0116927 + 410858.72 .3273464 .0117651 + 410894.84 .2946307 .0106455 + 410931.00 .3113495 .0109623 + 410967.12 .2892908 .0103808 + 411003.34 .2947583 .0103290 + 411039.50 .3147056 .0108039 + 411075.66 .3025979 .0104437 + 411111.91 .3103846 .0107755 + 411148.06 .3154376 .0106476 + 411184.25 .3210344 .0107318 + 411220.44 .3111241 .0105873 + 411256.69 .3146479 .0105234 + 411292.88 .3098001 .0105187 + 411329.06 .3159684 .0107808 + 411365.31 .2944638 .0102835 + 411401.53 .3124371 .0108251 + 411437.75 .3079857 .0106907 + 411474.03 .2942027 .0104260 + 411510.25 .2978755 .0104225 + 411546.47 .3117127 .0107041 + 411582.69 .3240328 .0111553 + 411619.00 .3077068 .0104081 + 411655.22 .3175928 .0106121 + 411691.47 .3155918 .0105951 + 411727.78 .3200225 .0107308 + 411764.03 .3071122 .0105682 + 411800.28 .3070122 .0105397 + 411836.53 .3168978 .0110891 + 411872.88 .3027550 .0107446 + 411909.16 .2929280 .0105510 + 411945.44 .3007288 .0109744 + 411981.78 .2948274 .0107902 + 412018.06 .3014764 .0110305 + 412054.34 .3082150 .0111104 + 412090.66 .2943168 .0107829 + 412127.00 .2995865 .0106890 + 412163.31 .3005606 .0109052 + 412199.62 .3100614 .0111038 + 412236.00 .2965869 .0104723 + 412272.31 .3093658 .0108587 + 412308.66 .2821793 .0100807 + 412344.97 .2713671 .0098179 + 412381.38 .2989773 .0107361 + 412417.72 .2976751 .0109361 + 412454.06 .3146627 .0115411 + 412490.47 .2921258 .0108703 + 412526.81 .3154907 .0118219 + 412563.19 .3027278 .0114807 + 412599.53 .2844991 .0109149 + 412635.97 .2955164 .0111835 + 412672.34 .2981263 .0111103 + 412708.72 .2873641 .0107794 + 412745.16 .2966938 .0109530 + 412781.56 .2884858 .0105963 + 412817.94 .2952602 .0107609 + 412854.34 .2994327 .0109529 + 412890.81 .3240106 .0116050 + 412927.22 .2894263 .0104678 + 412963.62 .2961581 .0106408 + 413000.09 .2996274 .0107679 + 413036.53 .2873178 .0104525 + 413072.94 .3062763 .0109591 + 413109.38 .2866908 .0104122 + 413145.88 .3121567 .0110855 + 413182.31 .2933102 .0104903 + 413218.75 .2977042 .0104665 + 413255.28 .2700723 .0095043 + 413291.72 .2834921 .0098874 + 413328.19 .2886980 .0099100 + 413364.66 .2867956 .0098849 + 413401.19 .2968100 .0102960 + 413437.66 .2928876 .0104373 + 413474.12 .2859886 .0100132 + 413510.69 .2795877 .0098971 + 413547.19 .2871351 .0099501 + 413583.66 .2950784 .0102670 + 413620.16 .3078677 .0106986 + 413656.72 .2712495 .0095120 + 413693.25 .2910652 .0102582 + 413729.75 .3028071 .0106113 + 413766.34 .2894870 .0103756 + 413802.84 .3012655 .0108136 + 413839.38 .2874098 .0103201 + 413875.97 .3053112 .0110303 + 413912.50 .2936963 .0108144 + 413949.06 .2994068 .0108375 + 413985.59 .2985353 .0108858 + 414022.22 .3118715 .0111891 + 414058.78 .2738303 .0101171 + 414095.34 .2840653 .0103382 + 414131.97 .2955463 .0104251 + 414168.53 .3089679 .0108817 + 414205.09 .2984358 .0103908 + 414241.69 .2797026 .0098068 + 414278.34 .2915329 .0101520 + 414314.94 .2872369 .0099823 + 414351.53 .2964333 .0101012 + 414388.19 .2907799 .0099269 + 414424.78 .3022105 .0102102 + 414461.41 .2995934 .0100468 + 414498.00 .2949826 .0098740 + 414534.69 .2981213 .0101410 + 414571.31 .2947635 .0101447 + 414607.94 .2819951 .0098470 + 414644.66 .2981841 .0101203 + 414681.28 .3016215 .0102255 + 414717.94 .2965343 .0102158 + 414754.56 .3117241 .0107961 + 414791.28 .3076816 .0106199 + 414827.94 .3121308 .0106636 + 414864.62 .3033492 .0104575 + 414901.34 .2935778 .0101695 + 414938.03 .3160600 .0107884 + 414974.69 .3059051 .0107123 + 415011.38 .2883853 .0100328 + 415048.12 .3101408 .0106449 + 415084.81 .3038467 .0107809 + 415121.53 .2852294 .0101636 + 415158.28 .2940939 .0104741 + 415195.00 .3104436 .0111855 + 415231.69 .2861714 .0103041 + 415268.41 .3284909 .0115720 + 415305.22 .3139582 .0110388 + 415341.94 .2979111 .0104707 + 415378.66 .3063947 .0105969 + 415415.47 .3194234 .0108987 + 415452.19 .2975203 .0103329 + 415488.94 .3012711 .0104229 + 415525.69 .3091628 .0107301 + 415562.53 .3035681 .0104992 + 415599.28 .3031518 .0105072 + 415636.03 .3083407 .0105685 + 415672.88 .3108822 .0105696 + 415709.66 .3112763 .0105142 + 415746.44 .2979300 .0102638 + 415783.22 .2844339 .0097593 + 415820.06 .2976899 .0101472 + 415856.88 .2953133 .0100878 + 415893.66 .3096328 .0107113 + 415930.53 .3029609 .0104419 + 415967.34 .3024061 .0105991 + 416004.16 .3049505 .0108088 + 416041.03 .2954962 .0107051 + 416077.88 .3044387 .0113231 + 416114.69 .3077619 .0113853 + 416151.53 .2985409 .0112162 + 416188.44 .3092229 .0114846 + 416225.28 .3139324 .0116426 + 416262.12 .3268710 .0120845 + 416299.03 .3055608 .0110836 + 416335.91 .3220356 .0116769 + 416372.75 .3124182 .0111607 + 416409.62 .3044972 .0108528 + 416446.56 .3015403 .0107075 + 416483.44 .3006825 .0109868 + 416520.31 .3069995 .0110171 + 416557.28 .3186861 .0114522 + 416594.16 .3181083 .0113570 + 416631.06 .3196051 .0114292 + 416667.97 .3038578 .0110401 + 416704.94 .3100073 .0110783 + 416741.84 .3197086 .0116621 + 416778.75 .3197143 .0112947 + 416815.75 .3151999 .0112492 + 416852.69 .3062433 .0108267 + 416889.59 .3169343 .0111840 + 416926.53 .2936536 .0103473 + 416963.56 .3095993 .0107946 + 417000.50 .2947682 .0105600 + 417037.44 .3344729 .0115709 + 417074.47 .3106518 .0107568 + 417111.44 .3056598 .0108248 + 417148.41 .3011528 .0107451 + 417185.38 .3204540 .0112891 + 417222.41 .3005066 .0108698 + 417259.38 .3294567 .0116817 + 417296.38 .3189529 .0111470 + 417333.44 .3161380 .0112329 + 417370.44 .3188703 .0111745 + 417407.44 .3205546 .0110610 + 417444.44 .3018854 .0106732 + 417481.50 .3306715 .0114290 + 417518.53 .3070606 .0107726 + 417555.53 .3200319 .0110229 + 417592.62 .3264835 .0113368 + 417629.66 .3029026 .0105514 + 417666.69 .3214894 .0110777 + 417703.72 .3209263 .0110718 + 417740.84 .2892815 .0101307 + 417777.91 .3091418 .0107081 + 417814.94 .2984544 .0102248 + 417852.06 .2910818 .0101011 + 417889.12 .3243503 .0111553 + 417926.22 .3203640 .0110069 + 417963.28 .3023842 .0106500 + 418000.44 .3243078 .0115510 + 418037.50 .3261624 .0116004 + 418074.59 .3150741 .0112532 + 418111.75 .3157161 .0112941 + 418148.84 .2906479 .0104419 + 418185.97 .3286024 .0116181 + 418223.12 .2991709 .0108228 + 418260.25 .3316304 .0118010 + 418297.38 .3164625 .0112834 + 418334.50 .3161213 .0115684 + 418371.69 .3091360 .0112695 + 418408.81 .3154134 .0114636 + 418445.97 .3080281 .0113360 + 418483.16 .2953031 .0108637 + 418520.31 .3235930 .0115683 + 418557.47 .3117214 .0110042 + 418594.62 .3153588 .0112188 + 418631.84 .2865714 .0101374 + 418669.03 .3171251 .0110720 + 418706.19 .3259647 .0112549 + 418743.44 .3000070 .0105782 + 418780.62 .3088419 .0109342 + 418817.81 .3217378 .0112084 + 418855.00 .3149940 .0108738 + 418892.28 .3112608 .0108927 + 418929.47 .3137538 .0107655 + 418966.69 .3309681 .0114805 + 419003.97 .3162573 .0110061 + 419041.19 .3318608 .0115038 + 419078.41 .3277802 .0113460 + 419115.62 .3136555 .0108406 + 419152.94 .3108551 .0108761 + 419190.16 .3147954 .0109984 + 419227.41 .3039230 .0106483 + 419264.72 .3044497 .0106017 + 419301.97 .3267940 .0112371 + 419339.22 .3109684 .0109332 + 419376.47 .3529295 .0119626 + 419413.81 .3080972 .0107036 + 419451.09 .3104503 .0107485 + 419488.38 .3093835 .0107263 + 419525.72 .3227523 .0113979 + 419563.00 .3285162 .0113979 + 419600.28 .3220072 .0115540 + 419637.59 .3304332 .0120358 + 419674.97 .2915117 .0106489 + 419712.28 .2998380 .0108697 + 419749.59 .3196931 .0112396 + 419786.97 .3197556 .0112737 + 419824.28 .3005172 .0109032 + 419861.62 .2985922 .0106296 + 419898.94 .3260050 .0115239 + 419936.34 .3387852 .0117293 + 419973.69 .3142678 .0112381 + 420011.03 .3268337 .0113162 + 420048.47 .3162649 .0112015 + 420085.81 .3249183 .0114512 + 420123.19 .3139887 .0108965 + 420160.53 .3177910 .0111257 + 420197.97 .3159759 .0108177 + 420235.34 .3261002 .0110921 + 420272.75 .3058508 .0105666 + 420310.19 .3177404 .0107947 + 420347.59 .3089886 .0106851 + 420384.97 .3317553 .0114124 + 420422.38 .3047154 .0104514 + 420459.84 .3257488 .0111027 + 420497.28 .3218491 .0109835 + 420534.69 .3188924 .0109600 + 420572.19 .3218630 .0109676 + 420609.59 .3082747 .0105537 + 420647.03 .3163492 .0108534 + 420684.53 .3131831 .0106935 + 420721.97 .3136703 .0108035 + 420759.41 .3105844 .0105260 + 420796.88 .3053500 .0105837 + 420834.41 .2999850 .0102661 + 420871.84 .3254448 .0113559 + 420909.31 .3314577 .0113534 + 420946.88 .3237332 .0113034 + 420984.34 .3254768 .0111459 + 421021.81 .3121060 .0107156 + 421059.31 .3035134 .0104518 + 421096.88 .3088500 .0105404 + 421134.38 .3178133 .0108957 + 421171.88 .3177499 .0109897 + 421209.44 .3089449 .0106501 + 421246.94 .3131776 .0106012 + 421284.47 .3197804 .0109917 + 421322.00 .3165028 .0109774 + 421359.59 .3171565 .0109571 + 421397.12 .3046109 .0106336 + 421434.66 .3186335 .0110599 + 421472.25 .3091691 .0107684 + 421509.81 .3206544 .0110778 + 421547.38 .3316450 .0111263 + 421584.91 .3021134 .0104240 + 421622.56 .3282844 .0112170 + 421660.12 .3155327 .0106670 + 421697.69 .3153077 .0108404 + 421735.34 .3266935 .0111781 + 421772.91 .3004578 .0107980 + 421810.50 .3210250 .0111487 + 421848.09 .3187402 .0112362 + 421885.75 .3158816 .0113768 + 421923.34 .2911743 .0104728 + 421960.97 .3320623 .0117435 + 421998.66 .3426033 .0118811 + 422036.25 .3175069 .0109671 + 422073.88 .3202333 .0110820 + 422111.50 .3208867 .0112263 + 422149.22 .3255708 .0112733 + 422186.84 .2984363 .0103206 + 422224.50 .3118763 .0106941 + 422262.22 .3229934 .0112160 + 422299.84 .3116496 .0106161 + 422337.50 .3238784 .0110566 + 422375.19 .3264146 .0112559 + 422412.91 .3134407 .0106675 + 422450.59 .3174794 .0106928 + 422488.25 .3188227 .0106410 + 422526.00 .3058578 .0104891 + 422563.69 .3102415 .0105045 + 422601.41 .3176816 .0109404 + 422639.09 .2999703 .0105079 + 422676.88 .3112327 .0111341 + 422714.56 .3224137 .0112891 + 422752.28 .3286248 .0115317 + 422790.06 .3223677 .0114232 + 422827.78 .3308429 .0115241 + 422865.53 .3128684 .0107794 + 422903.31 .3059914 .0105311 + 422941.06 .3151023 .0108488 + 422978.81 .3076392 .0104841 + 423016.56 .3187096 .0106596 + 423054.38 .3319017 .0110967 + 423092.12 .3135055 .0106620 + 423129.91 .3211322 .0108654 + 423167.72 .3244247 .0111540 + 423205.50 .3258647 .0109812 + 423243.28 .3064048 .0105600 + 423281.06 .3091777 .0108420 + 423318.94 .3120104 .0107572 + 423356.72 .3114158 .0107961 + 423394.50 .3098152 .0108638 + 423432.38 .3393913 .0120933 + 423470.19 .3042358 .0108645 + 423508.00 .3234009 .0112941 + 423545.84 .3049748 .0109925 + 423583.72 .3206539 .0111077 + 423621.56 .3363093 .0114557 + 423659.38 .3133164 .0106465 + 423697.28 .3165781 .0107443 + 423735.12 .3223232 .0108449 + 423773.00 .3221484 .0108499 + 423810.84 .3339634 .0115194 + 423848.78 .3391616 .0118074 + 423886.62 .3228206 .0113688 + 423924.50 .3005097 .0110476 + 423962.44 .2975760 .0108928 + 424000.34 .3157547 .0115176 + 424038.22 .3206490 .0116030 + 424076.09 .3269957 .0118484 + 424114.06 .3061547 .0112206 + 424151.97 .3295629 .0117618 + 424189.88 .3225977 .0113100 + 424227.84 .3295344 .0110587 + 424265.78 .3082862 .0104979 + 424303.69 .3114959 .0105188 + 424341.62 .3148074 .0107260 + 424379.62 .3113393 .0104584 + 424417.56 .3280691 .0110970 + 424455.50 .3234483 .0109738 + 424493.50 .3043995 .0106292 + 424531.47 .3259208 .0112530 + 424569.41 .3095311 .0107703 + 424607.38 .3380324 .0116984 + 424645.41 .3063713 .0111419 + 424683.38 .3359280 .0117926 + 424721.34 .3089924 .0111430 + 424759.41 .3394324 .0121193 + 424797.41 .3000910 .0109326 + 424835.38 .3087738 .0108957 + 424873.38 .3271315 .0115292 + 424911.47 .3249787 .0113678 + 424949.47 .3067484 .0108697 + 424987.47 .3357314 .0115089 + 425025.56 .3321632 .0114592 + 425063.59 .3513246 .0118725 + 425101.62 .3234963 .0110745 + 425139.66 .3189023 .0107451 + 425177.75 .3325656 .0112600 + 425215.78 .3123609 .0104870 + 425253.84 .3245651 .0110800 + 425291.97 .3155955 .0107212 + 425330.03 .3338614 .0112019 + 425368.09 .3123994 .0106621 + 425406.22 .3441470 .0116065 + 425444.31 .3188360 .0111201 + 425482.38 .2994853 .0103834 + 425520.47 .3290950 .0114790 + 425558.62 .3409379 .0119819 + 425596.72 .3117504 .0110820 + 425634.81 .3097802 .0109283 + 425673.00 .3362883 .0116939 + 425711.09 .3051826 .0109638 + 425749.22 .3112357 .0109840 + 425787.31 .3112781 .0109947 + 425825.53 .3161665 .0112110 + 425863.66 .3129062 .0110352 + 425901.78 .3101754 .0109446 + 425940.00 .3166358 .0109402 + 425978.16 .3197358 .0109856 + 426016.28 .3065244 .0108783 + 426054.44 .3139897 .0108330 + 426092.69 .3280180 .0113253 + 426130.84 .3271033 .0112283 + 426169.00 .3249678 .0110466 + 426207.25 .3172665 .0108325 + 426245.44 .3164040 .0107214 + 426283.62 .3279496 .0111004 + 426321.81 .3160485 .0106284 + 426360.09 .3094684 .0105171 + 426398.28 .3167558 .0107514 + 426436.50 .3145102 .0108082 + 426474.78 .3314733 .0112824 + 426513.00 .3019277 .0106051 + 426551.22 .3227826 .0110457 + 426589.44 .3147409 .0109057 + 426627.75 .3281191 .0113772 + 426665.97 .3143610 .0108229 + 426704.22 .2882349 .0101421 + 426742.53 .3295990 .0111376 + 426780.81 .3063228 .0105608 + 426819.06 .3205297 .0108454 + 426857.31 .3065798 .0106042 + 426895.66 .3298358 .0113005 + 426933.94 .3209077 .0110497 + 426972.22 .3155666 .0110386 + 427010.56 .2943837 .0103177 + 427048.84 .3357454 .0114583 + 427087.16 .2974024 .0103074 + 427125.44 .3318155 .0113045 + 427163.81 .3377306 .0115213 + 427202.12 .3180602 .0106302 + 427240.44 .3124193 .0106750 + 427278.84 .3172977 .0108215 + 427317.16 .3060357 .0104800 + 427355.50 .3198635 .0108956 + 427393.81 .3150670 .0106406 + 427432.25 .3234909 .0107510 + 427470.59 .3240862 .0110940 + 427508.94 .3148212 .0106983 + 427547.38 .3299721 .0109855 + 427585.72 .3140167 .0107513 + 427624.09 .3393164 .0113214 + 427662.53 .3223322 .0109333 + 427700.91 .3135028 .0107552 + 427739.28 .3236781 .0106529 + 427777.69 .3260542 .0108822 + 427816.12 .3164901 .0108300 + 427854.53 .3180667 .0107715 + 427892.94 .3171685 .0108614 + 427931.41 .3184119 .0110037 + 427969.84 .3323314 .0115406 + 428008.25 .3090622 .0108112 + 428046.66 .3125609 .0110703 + 428085.19 .3206629 .0112930 + 428123.59 .3366650 .0119404 + 428162.03 .3026580 .0107181 + 428200.56 .3284813 .0114582 + 428239.00 .2838495 .0100508 + 428277.47 .3108873 .0108556 + 428315.91 .3274322 .0113579 + 428354.47 .3054944 .0104543 + 428392.94 .3174685 .0108611 + 428431.41 .3223010 .0111359 + 428469.97 .3300374 .0113857 + 428508.44 .3217639 .0111355 + 428546.94 .3320400 .0114671 + 428585.44 .3038533 .0107015 + 428624.00 .3216523 .0113567 + 428662.50 .3131756 .0110597 + 428701.00 .3187023 .0109606 + 428739.59 .3031985 .0104106 + 428778.12 .3326050 .0113362 + 428816.66 .3163943 .0108592 + 428855.19 .3354137 .0113325 + 428893.78 .3217547 .0107832 + 428932.34 .3170650 .0106607 + 428970.88 .3177299 .0105943 + 429009.50 .3122585 .0106483 + 429048.06 .3286304 .0109213 + 429086.62 .3107489 .0103442 + 429125.19 .3087738 .0104894 + 429163.84 .3339281 .0112085 + 429202.41 .3177550 .0109433 + 429241.00 .3041771 .0106286 + 429279.66 .3215114 .0112920 + 429318.25 .3250366 .0112645 + 429356.84 .2961510 .0102650 + 429395.47 .3175983 .0111530 + 429434.16 .3306620 .0112623 + 429472.75 .3382221 .0116097 + 429511.38 .3192907 .0107407 + 429550.09 .3237370 .0110966 + 429588.72 .3200343 .0108417 + 429627.34 .3244885 .0110479 + 429666.00 .3079628 .0104730 + 429704.72 .3357936 .0111827 + 429743.34 .3138145 .0106502 + 429782.00 .3402707 .0111910 + 429820.75 .3292180 .0109096 + 429859.41 .3014653 .0101124 + 429898.09 .3241902 .0107630 + 429936.84 .3374643 .0112643 + 429975.53 .3298050 .0108679 + 430014.22 .3287449 .0109723 + 430052.91 .3515532 .0115491 + 430091.69 .3307053 .0111491 + 430130.38 .3313411 .0109810 + 430169.09 .3020796 .0101140 + 430207.88 .3209148 .0107462 + 430246.59 .3405753 .0112919 + 430285.31 .2991184 .0101842 + 430324.06 .3202512 .0109234 + 430362.84 .3232292 .0109407 + 430401.59 .3369732 .0114278 + 430440.34 .3204882 .0113129 + 430479.16 .3479381 .0119122 + 430517.94 .3323932 .0117900 + 430556.69 .3415786 .0119665 + 430595.44 .3306226 .0115507 + 430634.28 .3074272 .0109067 + 430673.06 .3261010 .0116023 + 430711.84 .3061251 .0109663 + 430750.72 .3155531 .0111763 + 430789.50 .3286898 .0116261 + 430828.31 .3225961 .0112389 + 430867.12 .3303933 .0114833 + 430906.00 .3294069 .0110775 + 430944.81 .3283693 .0112161 + 430983.62 .3351713 .0114776 + 431022.53 .3054419 .0105252 + 431061.34 .3480918 .0118234 + 431100.19 .3179829 .0109567 + 431139.03 .3171458 .0106483 + 431177.94 .3225122 .0109811 + 431216.78 .3185289 .0108585 + 431255.66 .3301769 .0113697 + 431294.59 .3515728 .0118824 + 431333.44 .3381079 .0114900 + 431372.31 .3157130 .0110010 + 431411.19 .3182747 .0112122 + 431450.16 .3362339 .0117050 + 431489.03 .3282564 .0112833 + 431527.94 .3169273 .0108972 + 431566.91 .3227496 .0112321 + 431605.81 .3176593 .0110675 + 431644.72 .3240556 .0113297 + 431683.62 .3163923 .0112663 + 431722.62 .3055158 .0110814 + 431761.56 .3235168 .0116126 + 431800.47 .3269415 .0117137 + 431839.50 .3064152 .0111388 + 431878.44 .3179740 .0115038 + 431917.38 .3200549 .0114572 + 431956.31 .3353994 .0117568 + 431995.34 .3428136 .0119531 + 432034.31 .3245955 .0115439 + 432073.28 .3163510 .0112369 + 432112.31 .3314060 .0117488 + 432151.31 .3425055 .0118724 + 432190.28 .3193451 .0109823 + 432229.28 .3193530 .0111280 + 432268.34 .3296838 .0115481 + 432307.34 .3379523 .0116553 + 432346.34 .3106538 .0109956 + 432385.41 .3308866 .0115346 + 432424.44 .3396574 .0119332 + 432463.44 .3145961 .0110294 + 432502.56 .3275329 .0111410 + 432541.59 .3047669 .0105020 + 432580.62 .3317569 .0112276 + 432619.66 .3504858 .0118304 + 432658.78 .3354643 .0114980 + 432697.81 .3366072 .0116445 + 432736.88 .3308631 .0116332 + 432776.03 .3378398 .0118625 + 432815.09 .3312781 .0116642 + 432854.16 .3213881 .0115660 + 432893.22 .3309908 .0116202 + 432932.38 .3194363 .0112557 + 432971.47 .3254319 .0115978 + 433010.56 .3356192 .0119538 + 433049.75 .3264731 .0116037 + 433088.84 .2986137 .0107572 + 433127.97 .3441944 .0122956 + 433167.06 .3218009 .0115164 + 433206.25 .3249555 .0118615 + 433245.38 .3278619 .0118011 + 433284.53 .3223575 .0116216 + 433323.72 .3266015 .0117042 + 433362.88 .3282474 .0116779 + 433402.00 .3496020 .0123572 + 433441.16 .3332881 .0119428 + 433480.41 .3332182 .0119496 + 433519.56 .3191608 .0114055 + 433558.72 .3512883 .0122522 + 433597.97 .3326403 .0114395 + 433637.16 .3365868 .0117059 + 433676.34 .3370197 .0117372 + 433715.53 .3261396 .0113488 + 433754.78 .3113965 .0108893 + 433794.00 .3438338 .0117203 + 433833.19 .3381236 .0116579 + 433872.47 .3236508 .0113309 + 433911.69 .3445510 .0121320 + 433950.91 .3281794 .0118589 + 433990.16 .3337277 .0119273 + 434029.44 .3392653 .0119920 + 434068.69 .3281528 .0117599 + 434107.94 .3356769 .0119036 + 434147.25 .3371766 .0119142 + 434186.50 .3201410 .0114466 + 434225.75 .3212610 .0111365 + 434265.03 .3333066 .0114193 + 434304.38 .3193369 .0108380 + 434343.62 .3545262 .0117683 + 434382.91 .3580092 .0119798 + 434422.28 .3376494 .0113357 + 434461.56 .3412664 .0115370 + 434500.88 .3215152 .0110489 + 434540.16 .3264617 .0112834 + 434579.53 .3210348 .0110002 + 434618.84 .3161441 .0111420 + 434658.16 .3365499 .0116465 + 434697.56 .3378616 .0117269 + 434736.91 .3081011 .0107933 + 434776.22 .3328592 .0115091 + 434815.62 .3194715 .0112123 + 434854.97 .3057968 .0107771 + 434894.34 .3266162 .0113639 + 434933.69 .3210180 .0113393 + 434973.12 .3216264 .0111298 + 435012.47 .3167279 .0109268 + 435051.84 .3127533 .0107127 + 435091.31 .3174066 .0111317 + 435130.69 .3308423 .0113495 + 435170.06 .3257162 .0111637 + 435209.47 .3300298 .0113209 + 435248.94 .3363375 .0114189 + 435288.34 .3380657 .0115304 + 435327.75 .3146595 .0107402 + 435367.22 .3105648 .0104974 + 435406.66 .3372383 .0115013 + 435446.06 .3337648 .0112139 + 435485.50 .3281424 .0109996 + 435525.00 .3363646 .0110772 + 435564.44 .3525161 .0116972 + 435603.91 .3256380 .0109840 + 435643.41 .3318047 .0114968 + 435682.88 .3312990 .0112961 + 435722.34 .3243803 .0112246 + 435761.81 .3391309 .0115521 + 435801.34 .3129548 .0106679 + 435840.81 .3365877 .0114415 + 435880.31 .3224030 .0108836 + 435919.88 .3209187 .0110247 + 435959.38 .3271969 .0110258 + 435998.88 .3219419 .0107516 + 436038.38 .3298924 .0109978 + 436077.94 .3395087 .0114834 + 436117.47 .3120293 .0104623 + 436156.97 .3105301 .0105952 + 436196.59 .3421336 .0114526 + 436236.12 .3257520 .0109566 + 436275.66 .3276921 .0108576 + 436315.19 .3348704 .0112336 + 436354.81 .3359924 .0112660 + 436394.38 .3147604 .0107239 + 436433.94 .3273383 .0109560 + 436473.56 .3318629 .0112031 + 436513.12 .3223304 .0108569 + 436552.72 .3111062 .0107371 + 436592.28 .3144847 .0106449 + 436631.94 .3290836 .0109972 + 436671.53 .3256343 .0106582 + 436711.12 .3293127 .0108562 + 436750.81 .3295597 .0109076 + 436790.41 .3368827 .0111511 + 436830.03 .3145818 .0106016 + 436869.62 .3219428 .0108614 + 436909.34 .3150835 .0106214 + 436948.97 .3380792 .0114428 + 436988.59 .3201801 .0108756 + 437028.31 .3061783 .0103395 + 437067.97 .3263767 .0107163 + 437107.59 .3250995 .0108060 + 437147.25 .3294770 .0108251 + 437187.00 .3243453 .0105904 + 437226.66 .3279956 .0106187 + 437266.34 .3153448 .0101629 + 437306.09 .3271497 .0104919 + 437345.78 .3308169 .0106411 + 437385.44 .3253657 .0104143 + 437425.22 .3300211 .0107942 + 437464.91 .3244815 .0105524 + 437504.62 .3360256 .0108894 + 437544.34 .3394327 .0107615 + 437584.12 .3320753 .0109674 + 437623.84 .3255542 .0107554 + 437663.56 .3382295 .0111421 + 437703.38 .3315696 .0109783 + 437743.09 .3226621 .0107298 + 437782.84 .3187128 .0105160 + 437822.59 .3296407 .0106317 + 437862.44 .3098361 .0102421 + 437902.19 .3436804 .0113159 + 437941.94 .3282789 .0108349 + 437981.78 .3222577 .0105794 + 438021.56 .3319021 .0111123 + 438061.34 .3282177 .0109906 + 438101.12 .3252449 .0109965 + 438141.00 .3189124 .0107022 + 438180.78 .3480088 .0116283 + 438220.59 .3477015 .0116611 + 438260.47 .3221480 .0108855 + 438300.28 .3560222 .0119008 + 438340.09 .3394503 .0110836 + 438379.91 .3460324 .0110445 + 438419.81 .3326518 .0106477 + 438459.66 .3379379 .0109263 + 438499.50 .3098824 .0101183 + 438539.41 .3155739 .0103654 + 438579.25 .3253806 .0107941 + 438619.12 .3383647 .0113276 + 438658.97 .3106950 .0104520 + 438698.94 .3497874 .0116460 + 438738.78 .3244694 .0110925 + 438778.66 .3200500 .0110742 + 438818.62 .3351744 .0112982 + 438858.53 .3405939 .0114524 + 438898.41 .3382959 .0112810 + 438938.31 .3445751 .0113818 + 438978.28 .3283660 .0109417 + 439018.19 .3203433 .0107119 + 439058.12 .3188793 .0104819 + 439098.12 .3353056 .0109983 + 439138.03 .3376792 .0109783 + 439177.97 .3348308 .0108221 + 439217.91 .3520533 .0113306 + 439257.94 .3435591 .0110830 + 439297.88 .3252653 .0105218 + 439337.81 .3380426 .0109195 + 439377.84 .3187353 .0103190 + 439417.81 .3220544 .0104560 + 439457.78 .3185802 .0103945 + 439497.78 .3337637 .0109837 + 439537.81 .3150414 .0104217 + 439577.81 .3249418 .0110209 + 439617.81 .3277756 .0114513 + 439657.88 .3364322 .0114900 + 439697.88 .3288904 .0112918 + 439737.88 .3289751 .0111615 + 439777.97 .3151564 .0108050 + 439818.00 .3275967 .0110577 + 439858.03 .3362283 .0110491 + 439898.03 .3171377 .0104330 + 439938.16 .3469717 .0113899 + 439978.19 .3245507 .0106827 + 440018.25 .3233698 .0107118 + 440058.38 .3385059 .0111375 + 440098.44 .3422720 .0110958 + 440138.50 .3520166 .0115398 + 440178.56 .3343762 .0108772 + 440218.72 .3251222 .0108882 + 440258.78 .3265425 .0107712 + 440298.88 .3190995 .0106746 + 440339.03 .3243023 .0108520 + 440379.12 .3413265 .0112089 + 440419.25 .3530811 .0114854 + 440459.34 .3342043 .0112112 + 440499.53 .3338892 .0109397 + 440539.66 .3315282 .0108338 + 440579.78 .3279091 .0106475 + 440619.97 .3280842 .0107305 + 440660.09 .3228556 .0105804 + 440700.25 .3564589 .0115740 + 440740.41 .3230636 .0105994 + 440780.62 .3316461 .0107980 + 440820.78 .3402503 .0111106 + 440860.94 .3295927 .0110015 + 440901.19 .3104108 .0102134 + 440941.34 .3548156 .0114584 + 440981.53 .3188473 .0106493 + 441021.72 .3247375 .0107803 + 441061.97 .3248340 .0108769 + 441102.16 .3270317 .0108204 + 441142.38 .3291547 .0109223 + 441182.66 .3254567 .0108818 + 441222.88 .3287405 .0109486 + 441263.09 .3501781 .0115893 + 441303.31 .3255534 .0107104 + 441343.59 .3087268 .0102394 + 441383.84 .3272241 .0109124 + 441424.06 .3459375 .0112626 + 441464.41 .3239203 .0104356 + 441504.66 .3214400 .0103938 + 441544.91 .3175213 .0102625 + 441585.16 .3405762 .0109264 + 441625.50 .3328215 .0107455 + 441665.78 .3244440 .0104173 + 441706.06 .3402243 .0108290 + 441746.41 .3351693 .0107079 + 441786.69 .3224679 .0103052 + 441827.00 .2978132 .0098782 + 441867.28 .3414010 .0110955 + 441907.66 .3209431 .0104384 + 441947.97 .3192926 .0105719 + 441988.28 .3330779 .0108713 + 442028.69 .3029553 .0100923 + 442069.03 .3325140 .0107804 + 442109.34 .3294874 .0107479 + 442149.75 .3296014 .0106160 + 442190.09 .3394285 .0108970 + 442230.47 .3516468 .0113334 + 442270.81 .3403948 .0109947 + 442311.25 .3305458 .0110311 + 442351.62 .3416061 .0113203 + 442391.97 .3307287 .0109723 + 442432.44 .3472518 .0116432 + 442472.81 .3342369 .0111805 + 442513.22 .3570822 .0118406 + 442553.59 .3400505 .0115890 + 442594.06 .3430946 .0115560 + 442634.47 .3320825 .0111272 + 442674.88 .3239694 .0108389 + 442715.38 .3145040 .0107055 + 442755.81 .3300295 .0110148 + 442796.22 .3141182 .0104118 + 442836.66 .3372613 .0108538 + 442877.16 .3379226 .0111072 + 442917.62 .3385862 .0112060 + 442958.06 .3249063 .0107679 + 442998.59 .3162914 .0105912 + 443039.06 .3326553 .0109747 + 443079.50 .3165319 .0106394 + 443120.00 .3333170 .0108694 + 443160.53 .3365882 .0109584 + 443201.03 .3279226 .0106733 + 443241.50 .3224095 .0103922 + 443282.06 .3266937 .0104608 + 443322.56 .3298957 .0105713 + 443363.06 .3385518 .0108251 + 443403.59 .3263818 .0105963 + 443444.19 .3487045 .0112102 + 443484.69 .3183754 .0104116 + 443525.22 .3385733 .0110720 + 443565.84 .3338853 .0107968 + 443606.38 .3335735 .0107920 + 443646.91 .3475442 .0111913 + 443687.47 .3556666 .0114135 + 443728.09 .3462887 .0113100 + 443768.66 .3277387 .0107913 + 443809.22 .3528355 .0114872 + 443849.88 .3380376 .0109337 + 443890.44 .3344585 .0108258 + 443931.03 .3480178 .0112978 + 443971.59 .3236220 .0105952 + 444012.28 .3491383 .0111512 + 444052.88 .3441191 .0112412 + 444093.47 .3452079 .0113714 + 444134.16 .3493480 .0116005 + 444174.78 .3184831 .0106350 + 444215.41 .3197472 .0108703 + 444256.03 .3241747 .0111392 + 444296.75 .3537867 .0120397 + 444337.38 .3247362 .0110085 + 444378.03 .3386141 .0113941 + 444418.75 .3386558 .0112713 + 444459.41 .3332015 .0108466 + 444500.06 .3521655 .0113093 + 444540.72 .3216725 .0103229 + 444581.47 .3205564 .0102740 + 444622.16 .3385118 .0107474 + 444662.81 .3158536 .0101580 + 444703.59 .3414114 .0109616 + 444744.28 .3370107 .0110080 + 444785.00 .3617699 .0117753 + 444825.78 .3249693 .0107250 + 444866.47 .3195741 .0106932 + 444907.19 .3425715 .0113073 + 444947.91 .3164744 .0105411 + 444988.72 .3384663 .0111245 + 445029.44 .3324319 .0110195 + 445070.19 .3176944 .0106041 + 445111.00 .3389702 .0109984 + 445151.75 .3417720 .0113150 + 445192.50 .3390825 .0110954 + 445233.28 .3262987 .0108605 + 445274.12 .3295707 .0106644 + 445314.88 .3304392 .0108585 + 445355.66 .3403179 .0109845 + 445396.53 .3398559 .0109274 + 445437.31 .3201312 .0103475 + 445478.09 .3378663 .0107575 + 445518.91 .3265181 .0105271 + 445559.78 .3324298 .0105944 + 445600.59 .3120480 .0101135 + 445641.41 .3271190 .0104665 + 445682.31 .3466428 .0108312 + 445723.16 .3583809 .0111858 + 445763.97 .3542967 .0109850 + 445804.81 .3399481 .0104978 + 445845.75 .3435771 .0107841 + 445886.59 .3319330 .0104087 + 445927.44 .3489035 .0109216 + 445968.38 .3263869 .0102395 + 446009.25 .3447632 .0107256 + 446050.12 .3405982 .0106869 + 446091.00 .3366450 .0104436 + 446131.97 .3308350 .0103423 + 446172.84 .3255428 .0102051 + 446213.75 .3460277 .0107267 + 446254.72 .3325172 .0103496 + 446295.62 .3338562 .0105967 + 446336.53 .3350412 .0105904 + 446377.47 .3117943 .0099817 + 446418.47 .3243487 .0101836 + 446459.38 .3433561 .0108196 + 446500.31 .3334087 .0104798 + 446541.34 .3273692 .0103083 + 446582.28 .3345391 .0103382 + 446623.25 .3377072 .0107515 + 446664.19 .3408620 .0107300 + 446705.25 .3328626 .0105359 + 446746.22 .3459323 .0110265 + 446787.19 .3202711 .0102026 + 446828.25 .3319294 .0104579 + 446869.22 .3407298 .0109499 + 446910.22 .3429214 .0110405 + 446951.22 .3390326 .0109535 + 446992.28 .3459728 .0111970 + 447033.28 .3166942 .0104970 + 447074.31 .3366772 .0111584 + 447115.41 .3390205 .0110930 + 447156.44 .3364096 .0110598 + 447197.47 .3404628 .0111337 + 447238.56 .3246202 .0104971 + 447279.62 .3346833 .0107453 + 447320.66 .3364989 .0107475 + 447361.72 .3401119 .0105611 + 447402.84 .3384567 .0106506 + 447443.91 .3118293 .0098395 + 447485.00 .3296607 .0105658 + 447526.16 .3339727 .0105808 + 447567.22 .3444844 .0109129 + 447608.31 .3391013 .0109525 + 447649.41 .3345397 .0108615 + 447690.59 .3483038 .0113613 + 447731.69 .3445508 .0112920 + 447772.78 .3289880 .0108359 + 447814.00 .3294144 .0109866 + 447855.09 .3321850 .0108332 + 447896.22 .3168219 .0104134 + 447937.38 .3366875 .0108320 + 447978.59 .3375770 .0107397 + 448019.72 .3355960 .0107729 + 448060.88 .3217656 .0102619 + 448102.09 .3369074 .0105143 + 448143.28 .3314377 .0104198 + 448184.44 .3269238 .0102755 + 448225.59 .3336887 .0105000 + 448266.88 .3389907 .0106240 + 448308.03 .3374289 .0106124 + 448349.25 .3492310 .0111440 + 448390.50 .3189369 .0100738 + 448431.72 .3195384 .0101785 + 448472.91 .3343237 .0107991 + 448514.12 .3336473 .0105652 + 448555.41 .3328746 .0105566 + 448596.66 .3494263 .0111372 + 448637.88 .3461891 .0109424 + 448679.19 .3191935 .0099526 + 448720.44 .3074321 .0098020 + 448761.69 .3377270 .0107281 + 448802.94 .3220325 .0101626 + 448844.25 .3382454 .0107270 + 448885.53 .3140633 .0101970 + 448926.78 .3430213 .0111354 + 448968.16 .3349543 .0108483 + 449009.44 .3538421 .0113476 + 449050.72 .3424834 .0110058 + 449092.00 .3471870 .0111057 + 449133.38 .3493817 .0111144 + 449174.69 .3604857 .0112604 + 449216.00 .3276873 .0102264 + 449257.38 .3439427 .0107182 + 449298.69 .3216424 .0100582 + 449340.03 .3356860 .0103549 + 449381.34 .3350567 .0105013 + 449422.78 .3326052 .0105229 + 449464.12 .3191895 .0098814 + 449505.47 .3554792 .0108735 + 449546.91 .3400756 .0103873 + 449588.25 .3262447 .0098995 + 449629.62 .3435418 .0103522 + 449671.00 .3367403 .0100873 + 449712.44 .3511573 .0104413 + 449753.84 .3619313 .0107578 + 449795.22 .3365781 .0102521 + 449836.69 .3384537 .0103409 + 449878.09 .3305900 .0102631 + 449919.50 .3305124 .0103465 + 449961.00 .3265771 .0103216 + 450002.41 .3430136 .0107899 + 450043.84 .3533497 .0108564 + 450085.25 .3405971 .0106472 + 450126.78 .3373323 .0102462 + 450168.22 .3341049 .0103919 + 450209.66 .3392504 .0103881 + 450251.19 .3136464 .0097225 + 450292.66 .3442131 .0106185 + 450334.09 .3231212 .0101446 + 450375.56 .3324203 .0103845 + 450417.12 .3469309 .0107728 + 450458.59 .3425747 .0108413 + 450500.09 .3557840 .0109710 + 450541.66 .3525133 .0109324 + 450583.16 .3401175 .0103949 + 450624.66 .3605269 .0109464 + 450666.19 .3319000 .0100960 + 450707.78 .3605320 .0106938 + 450749.28 .3290076 .0100042 + 450790.81 .3439967 .0104676 + 450832.44 .3438360 .0104587 + 450873.97 .3478471 .0106406 + 450915.50 .3410418 .0104747 + 450957.06 .3526116 .0109262 + 450998.69 .3401301 .0104261 + 451040.25 .3281895 .0103420 + 451081.81 .3288616 .0103505 + 451123.47 .3289256 .0104865 + 451165.03 .3254315 .0102203 + 451206.62 .3555172 .0110035 + 451248.22 .3484972 .0107463 + 451289.88 .3097199 .0098158 + 451331.50 .3213506 .0102970 + 451373.09 .3479680 .0107430 + 451414.78 .3276752 .0104362 + 451456.41 .3450375 .0111429 + 451498.03 .3401464 .0108923 + 451539.66 .3412622 .0111533 + 451581.38 .3247238 .0105902 + 451623.00 .3232993 .0107013 + 451664.66 .3410318 .0111369 + 451706.41 .3467063 .0110982 + 451748.06 .3173465 .0102626 + 451789.72 .3407023 .0107679 + 451831.38 .3396131 .0108721 + 451873.16 .3250411 .0101514 + 451914.81 .3381160 .0106546 + 451956.50 .3447910 .0108024 + 451998.28 .3515938 .0109446 + 452039.97 .3461618 .0106833 + 452081.69 .3317030 .0101068 + 452123.41 .3318783 .0103293 + 452165.19 .3428036 .0105482 + 452206.91 .3389242 .0105854 + 452248.62 .3566810 .0110234 + 452290.47 .3282505 .0103050 + 452332.19 .3386176 .0104871 + 452373.94 .3448406 .0106478 + 452415.78 .3282780 .0102353 + 452457.53 .3199596 .0100090 + 452499.28 .3347069 .0103568 + 452541.06 .3556439 .0107006 + 452582.91 .3266951 .0099273 + 452624.69 .3248629 .0099988 + 452666.47 .3483240 .0107400 + 452708.34 .3259050 .0102442 + 452750.16 .3528253 .0111288 + 452791.94 .3425830 .0112270 + 452833.75 .3346891 .0107879 + 452875.66 .3565253 .0115916 + 452917.47 .3440436 .0110940 + 452959.28 .3336593 .0106995 + 453001.22 .3310857 .0106581 + 453043.03 .3356713 .0107162 + 453084.88 .3362525 .0105986 + 453126.72 .3448674 .0105793 + 453168.66 .3319535 .0102191 + 453210.53 .3432660 .0103394 + 453252.41 .3559368 .0107383 + 453294.34 .3421045 .0102892 + 453336.22 .3353242 .0102281 + 453378.12 .3314155 .0101265 + 453420.00 .3562212 .0106232 + 453461.97 .3321396 .0101677 + 453503.88 .3473417 .0105666 + 453545.78 .3366280 .0103086 + 453587.78 .3229177 .0099496 + 453629.69 .3503004 .0109266 + 453671.62 .3242078 .0098794 + 453713.56 .3275614 .0102602 + 453755.56 .3213481 .0100696 + 453797.50 .3386617 .0105367 + 453839.47 .3249151 .0100994 + 453881.50 .3312894 .0102665 + 453923.44 .3330928 .0104157 + 453965.41 .3108701 .0097850 + 454007.38 .3457113 .0108432 + 454049.44 .3302660 .0105713 + 454091.44 .3441839 .0109361 + 454133.41 .3491757 .0111811 + 454175.50 .3185814 .0102267 + 454217.50 .3487554 .0111544 + 454259.50 .3341836 .0108224 + 454301.50 .3446881 .0111624 + 454343.59 .3287452 .0108377 + 454385.62 .3511869 .0113340 + 454427.66 .3371542 .0108997 + 454469.78 .3306905 .0106713 + 454511.81 .3313856 .0104807 + 454553.88 .3343289 .0106382 + 454595.91 .3531532 .0109559 + 454638.06 .3511147 .0107371 + 454680.12 .3399373 .0104909 + 454722.19 .3401586 .0103628 + 454764.34 .3276939 .0098472 + 454806.44 .3517607 .0106798 + 454848.53 .3441901 .0106176 + 454890.62 .3451496 .0106879 + 454932.78 .3630389 .0110782 + 454974.91 .3327829 .0105396 + 455017.00 .3386417 .0106842 + 455059.22 .3384400 .0105029 + 455101.34 .3494691 .0107882 + 455143.47 .3353097 .0104296 + 455185.69 .3558357 .0108330 + 455227.81 .3296222 .0103721 + 455269.97 .3366782 .0104320 + 455312.12 .3332824 .0102891 + 455354.34 .3306352 .0103091 + 455396.53 .3474210 .0106752 + 455438.69 .3318711 .0103036 + 455480.94 .3317398 .0104244 + 455523.12 .3381087 .0104843 + 455565.31 .3255632 .0102025 + 455607.50 .3204548 .0100303 + 455649.78 .3349572 .0102088 + 455692.00 .3217332 .0098112 + 455734.19 .3384754 .0102246 + 455776.50 .3483933 .0105225 + 455818.72 .3497742 .0105840 + 455860.94 .3438252 .0104250 + 455903.19 .3402971 .0104198 + 455945.50 .3476570 .0106492 + 455987.75 .3383917 .0103693 + 456030.00 .3363464 .0104453 + 456072.34 .3427682 .0106103 + 456114.59 .3240525 .0102146 + 456156.88 .3471291 .0108358 + 456199.16 .3566571 .0111117 + 456241.50 .3250179 .0103366 + 456283.81 .3186016 .0101103 + 456326.09 .3590803 .0113283 + 456368.47 .3466934 .0108164 + 456410.78 .3470594 .0107644 + 456453.09 .3285865 .0099979 + 456495.41 .3395276 .0103888 + 456537.81 .3494364 .0106422 + 456580.12 .3348447 .0100777 + 456622.47 .3478300 .0103757 + 456664.91 .3523966 .0104504 + 456707.25 .3345189 .0100575 + 456749.59 .3346859 .0099526 + 456791.94 .3182020 .0096301 + 456834.41 .3550291 .0104717 + 456876.78 .3400584 .0100935 + 456919.16 .3418860 .0101775 + 456961.59 .3425304 .0104360 + 457004.00 .3356949 .0100761 + 457046.38 .3400297 .0103069 + 457088.78 .3487955 .0104448 + 457131.28 .3501788 .0105473 + 457173.69 .3354585 .0102148 + 457216.09 .3420118 .0103689 + 457258.59 .3352368 .0103415 + 457301.03 .3286368 .0100988 + 457343.47 .3385289 .0102353 + 457385.91 .3383067 .0103142 + 457428.44 .3522521 .0105915 + 457470.88 .3443552 .0102133 + 457513.34 .3538740 .0105226 + 457555.91 .3436598 .0101386 + 457598.38 .3337713 .0099966 + 457640.84 .3467076 .0103332 + 457683.41 .3477137 .0102551 + 457725.88 .3315744 .0100635 + 457768.38 .3316906 .0098531 + 457810.88 .3326622 .0100995 + 457853.47 .3423851 .0102962 + 457895.97 .3557671 .0106929 + 457938.50 .3355167 .0101839 + 457981.09 .3458990 .0104392 + 458023.62 .3365063 .0103566 + 458066.16 .3326104 .0102865 + 458108.72 .3235960 .0102337 + 458151.34 .3463769 .0110361 + 458193.91 .3356406 .0105459 + 458236.44 .3412334 .0109227 + 458279.09 .3372437 .0109103 + 458321.66 .3394362 .0109006 + 458364.25 .3487161 .0111995 + 458406.84 .3520572 .0112259 + 458449.50 .3382241 .0107950 + 458492.09 .3453608 .0108536 + 458534.69 .3486176 .0108119 + 458577.38 .3508814 .0108495 + 458620.00 .3457719 .0104616 + 458662.62 .3340995 .0102970 + 458705.25 .3469900 .0104902 + 458747.94 .3611239 .0106397 + 458790.59 .3404537 .0101698 + 458833.22 .3596818 .0105217 + 458875.97 .3420185 .0100374 + 458918.62 .3316340 .0096758 + 458961.28 .3542949 .0101902 + 459003.94 .3500942 .0100756 + 459046.69 .3387882 .0100155 + 459089.38 .3394432 .0100468 + 459132.06 .3269362 .0098005 + 459174.81 .3563888 .0106733 + 459217.53 .3385760 .0102459 + 459260.22 .3508692 .0106970 + 459302.94 .3293889 .0101629 + 459345.72 .3495317 .0105753 + 459388.44 .3405560 .0103740 + 459431.19 .3328484 .0101811 + 459474.00 .3352547 .0103925 + 459516.72 .3445850 .0104825 + 459559.47 .3571085 .0109517 + 459602.22 .3540886 .0109024 + 459645.06 .3514467 .0107743 + 459687.81 .3278513 .0101379 + 459730.59 .3522903 .0107204 + 459773.44 .3435384 .0106128 + 459816.22 .3333980 .0102746 + 459859.00 .3548380 .0109622 + 459901.78 .3431767 .0104167 + 459944.69 .3320628 .0101558 + 459987.47 .3453374 .0104611 + 460030.28 .3357878 .0102842 + 460073.19 .3463891 .0103219 + 460116.00 .3485047 .0107947 + 460158.84 .3479934 .0104664 + 460201.75 .3502770 .0104769 + 460244.59 .3502867 .0106976 + 460287.44 .3447042 .0102086 + 460330.28 .3391784 .0103486 + 460373.22 .3350631 .0101058 + 460416.09 .3499894 .0104637 + 460458.97 .3407219 .0101083 + 460501.91 .3597435 .0107748 + 460544.78 .3484814 .0104366 + 460587.69 .3426060 .0104724 + 460630.56 .3522954 .0105485 + 460673.56 .3486140 .0106247 + 460716.47 .3447886 .0105082 + 460759.38 .3521868 .0105535 + 460802.38 .3527457 .0106330 + 460845.28 .3343600 .0100895 + 460888.22 .3419680 .0102843 + 460931.16 .3259172 .0097758 + 460974.19 .3397950 .0101095 + 461017.12 .3222086 .0096534 + 461060.09 .3440104 .0101039 + 461103.12 .3567559 .0105521 + 461146.09 .3355804 .0099146 + 461189.06 .3378664 .0098297 + 461232.03 .3558924 .0103383 + 461275.09 .3577993 .0104480 + 461318.09 .3536220 .0103033 + 461361.09 .3431845 .0100643 + 461404.16 .3541754 .0105159 + 461447.19 .3321214 .0100831 + 461490.19 .3508986 .0106395 + 461533.22 .3460863 .0103343 + 461576.31 .3576325 .0108667 + 461619.34 .3504632 .0106361 + 461662.38 .3406314 .0103797 + 461705.50 .3519320 .0106645 + 461748.56 .3649544 .0109304 + 461791.62 .3353745 .0101286 + 461834.69 .3525692 .0104565 + 461877.84 .3405102 .0101404 + 461920.91 .3376079 .0101208 + 461963.97 .3370447 .0101764 + 462007.16 .3416729 .0101842 + 462050.25 .3551996 .0103853 + 462093.34 .3361650 .0100242 + 462136.44 .3540326 .0103093 + 462179.62 .3378117 .0098516 + 462222.75 .3398055 .0099337 + 462265.88 .3407069 .0098538 + 462309.09 .3337948 .0097213 + 462352.22 .3408946 .0098188 + 462395.34 .3483456 .0102688 + 462438.50 .3274572 .0096778 + 462481.75 .3384150 .0099640 + 462524.91 .3481240 .0101702 + 462568.06 .3276491 .0096415 + 462611.31 .3374701 .0100503 + 462654.50 .3228450 .0096341 + 462697.69 .3361896 .0099358 + 462740.88 .3483976 .0101607 + 462784.12 .3417954 .0099650 + 462827.34 .3423022 .0099718 + 462870.53 .3510354 .0102986 + 462913.84 .3412675 .0100468 + 462957.06 .3410861 .0098720 + 463000.28 .3385015 .0100360 + 463043.59 .3489154 .0104140 + 463086.84 .3571217 .0106697 + 463130.06 .3616334 .0107006 + 463173.31 .3424123 .0103563 + 463216.66 .3488219 .0103732 + 463259.94 .3476003 .0104642 + 463303.19 .3389528 .0100799 + 463346.53 .3434105 .0101577 + 463389.81 .3426251 .0101638 + 463433.12 .3490276 .0101367 + 463476.41 .3435634 .0101911 + 463519.78 .3568691 .0104130 + 463563.09 .3337055 .0099461 + 463606.41 .3406629 .0102495 + 463649.78 .3555558 .0108073 + 463693.12 .3416820 .0104206 + 463736.44 .3484446 .0106558 + 463779.78 .3385758 .0104318 + 463823.19 .3371660 .0103218 + 463866.53 .3525444 .0105104 + 463909.91 .3320027 .0098806 + 463953.34 .3552789 .0104241 + 463996.72 .3587582 .0102329 + 464040.06 .3564527 .0103011 + 464083.44 .3595288 .0106757 + 464126.91 .3481295 .0102501 + 464170.31 .3555261 .0104551 + 464213.69 .3280813 .0098099 + 464257.19 .3487872 .0104037 + 464300.59 .3462414 .0103892 + 464344.00 .3268836 .0099104 + 464387.44 .3481214 .0104150 + 464430.94 .3628695 .0108922 + 464474.38 .3519076 .0106030 + 464517.81 .3510427 .0106112 + 464561.31 .3342817 .0102726 + 464604.78 .3478348 .0106618 + 464648.22 .3389707 .0104118 + 464691.69 .3573897 .0107059 + 464735.25 .3363639 .0101875 + 464778.72 .3273312 .0099177 + 464822.19 .3492274 .0103249 + 464865.78 .3431748 .0101606 + 464909.25 .3291512 .0100448 + 464952.75 .3509819 .0104872 + 464996.25 .3430570 .0103793 + 465039.84 .3681409 .0108312 + 465083.38 .3543415 .0104873 + 465126.91 .3371541 .0099833 + 465170.50 .3291793 .0097706 + 465214.03 .3555014 .0104124 + 465257.59 .3430673 .0102592 + 465301.12 .3231408 .0095815 + 465344.78 .3652042 .0106663 + 465388.34 .3569703 .0101877 + 465431.91 .3489659 .0100553 + 465475.56 .3547188 .0101293 + 465519.12 .3542063 .0102214 + 465562.72 .3444473 .0099793 + 465606.38 .3306946 .0097283 + 465649.97 .3350735 .0099106 + 465693.59 .3388742 .0102034 + 465737.19 .3367452 .0102852 + 465780.91 .3401824 .0102178 + 465824.50 .3324504 .0100948 + 465868.12 .3348852 .0099819 + 465911.84 .3516537 .0105022 + 465955.50 .3550737 .0104365 + 465999.12 .3354527 .0098746 + 466042.78 .3400029 .0099058 + 466086.53 .3454332 .0100449 + 466130.19 .3599732 .0105346 + 466173.88 .3420906 .0099804 + 466217.62 .3256033 .0094765 + 466261.31 .3374669 .0095679 + 466305.00 .3451353 .0100373 + 466348.69 .3272182 .0094830 + 466392.47 .3446079 .0100674 + 466436.19 .3454100 .0100817 + 466479.91 .3386481 .0098381 + 466523.69 .3263606 .0096450 + 466567.44 .3505583 .0103181 + 466611.16 .3172196 .0094209 + 466654.91 .3280636 .0095170 + 466698.72 .3482860 .0101948 + 466742.47 .3481353 .0101273 + 466786.22 .3441968 .0102502 + 466830.06 .3554112 .0103926 + 466873.84 .3547581 .0103727 + 466917.62 .3298104 .0097461 + 466961.41 .3482867 .0102639 + 467005.28 .3590260 .0104165 + 467049.06 .3387451 .0099946 + 467092.84 .3497009 .0100882 + 467136.75 .3510276 .0100298 + 467180.56 .3319404 .0095880 + 467224.38 .3390605 .0098444 + 467268.19 .3482142 .0101140 + 467312.12 .3359188 .0098341 + 467355.94 .3339736 .0100179 + 467399.78 .3399654 .0100817 + 467443.72 .3460283 .0103728 + 467487.59 .3449474 .0105757 + 467531.44 .3563474 .0107528 + 467575.31 .3605546 .0107767 + 467619.25 .3397025 .0103889 + 467663.16 .3411074 .0101330 + 467707.03 .3742628 .0109366 + 467751.00 .3775881 .0108925 + 467794.91 .3505463 .0101728 + 467838.81 .3537761 .0101179 + 467882.72 .3529195 .0099530 + 467926.72 .3377848 .0096228 + 467970.66 .3552455 .0099475 + 468014.56 .3466812 .0098677 + 468058.59 .3511471 .0099556 + 468102.53 .3518753 .0101337 + 468146.47 .3396964 .0097474 + 468190.44 .3382370 .0098875 + 468234.47 .3580662 .0103969 + 468278.44 .3605210 .0103344 + 468322.41 .3363856 .0098209 + 468366.47 .3617401 .0104237 + 468410.47 .3485841 .0100657 + 468454.44 .3465080 .0099584 + 468498.53 .3384525 .0099817 + 468542.53 .3739464 .0107374 + 468586.53 .3360631 .0098364 + 468630.56 .3518063 .0103785 + 468674.66 .3490376 .0101773 + 468718.69 .3471375 .0102657 + 468762.72 .3491026 .0102286 + 468806.84 .3456781 .0101453 + 468850.91 .3672367 .0107909 + 468894.97 .3244381 .0095223 + 468939.00 .3451141 .0100633 + 468983.16 .3583279 .0103042 + 469027.25 .3480921 .0100832 + 469071.31 .3692449 .0106599 + 469115.47 .3448491 .0099226 + 469159.56 .3595778 .0103789 + 469203.66 .3358634 .0097452 + 469247.78 .3363332 .0098699 + 469291.97 .3617846 .0104547 + 469336.09 .3401806 .0099493 + 469380.19 .3552416 .0100557 + 469424.41 .3503631 .0101082 + 469468.53 .3393509 .0097842 + 469512.69 .3232412 .0093324 + 469556.84 .3524233 .0102240 + 469601.06 .3424868 .0098040 + 469645.22 .3572861 .0102818 + 469689.41 .3509719 .0102252 + 469733.66 .3513600 .0101635 + 469777.81 .3385587 .0099363 + 469822.00 .3398983 .0099855 + 469866.19 .3597882 .0106327 + 469910.47 .3504281 .0105831 + 469954.69 .3521515 .0107840 + 469998.91 .3410619 .0104196 + 470043.19 .3429256 .0104562 + 470087.41 .3485246 .0106091 + 470131.62 .3379585 .0102564 + 470175.88 .3531270 .0104817 + 470220.19 .3453882 .0103355 + 470264.44 .3442162 .0102681 + 470308.69 .3607008 .0106419 + 470353.03 .3510487 .0102414 + 470397.31 .3504246 .0102090 + 470441.56 .3547300 .0104189 + 470485.84 .3569880 .0104641 + 470530.22 .3464209 .0100950 + 470574.50 .3459622 .0103559 + 470618.81 .3362227 .0101265 + 470663.19 .3517600 .0104681 + 470707.50 .3556863 .0106571 + 470751.81 .3492044 .0103495 + 470796.12 .3309021 .0098475 + 470840.56 .3310604 .0097302 + 470884.88 .3614253 .0104829 + 470929.22 .3510998 .0101972 + 470973.66 .3301690 .0098749 + 471018.00 .3649960 .0105381 + 471062.38 .3656903 .0105003 + 471106.81 .3700547 .0108097 + 471151.19 .3444547 .0101083 + 471195.56 .3616416 .0106208 + 471239.94 .3582973 .0106584 + 471284.44 .3503762 .0104773 + 471328.81 .3383480 .0103247 + 471373.22 .3413685 .0101705 + 471417.72 .3510616 .0106028 + 471462.12 .3609083 .0108523 + 471506.56 .3783386 .0113694 + 471550.97 .3413807 .0103222 + 471595.50 .3491846 .0104119 + 471639.94 .3467584 .0104430 + 471684.38 .3537293 .0106350 + 471728.94 .3526249 .0105336 + 471773.38 .3408246 .0101542 + 471817.84 .3263937 .0098639 + 471862.31 .3381341 .0101596 + 471906.88 .3513151 .0104495 + 471951.38 .3345681 .0100939 + 471995.88 .3260094 .0098444 + 472040.44 .3677287 .0109630 + 472084.94 .3443027 .0102568 + 472129.47 .3405245 .0103727 + 472173.97 .3599686 .0107737 + 472218.59 .3523252 .0106846 + 472263.12 .3385678 .0103631 + 472307.66 .3738143 .0113225 + 472352.28 .3443109 .0105619 + 472396.81 .3327747 .0101752 + 472441.38 .3322411 .0100343 + 472485.94 .3379001 .0099026 + 472530.59 .3486748 .0102998 + 472575.16 .3465199 .0102496 + 472619.75 .3473116 .0102689 + 472664.41 .3718463 .0108411 + 472709.00 .3424198 .0102391 + 472753.59 .3648439 .0108371 + 472798.19 .3659635 .0108298 + 472842.91 .3555184 .0105718 + 472887.50 .3365888 .0100361 + 472932.12 .3561665 .0106122 + 472976.84 .3482481 .0102347 + 473021.50 .3351419 .0098556 + 473066.12 .3361350 .0098657 + 473110.78 .3348605 .0098675 + 473155.53 .3480616 .0101408 + 473200.19 .3387924 .0099634 + 473244.84 .3506051 .0102918 + 473289.59 .3447501 .0099896 + 473334.28 .3509150 .0102205 + 473378.97 .3350658 .0099020 + 473423.66 .3632906 .0103893 + 473468.44 .3445679 .0100633 + 473513.16 .3335260 .0097171 + 473557.88 .3641837 .0104913 + 473602.69 .3622107 .0103999 + 473647.41 .3628386 .0103870 + 473692.12 .3344713 .0095606 + 473736.94 .3524594 .0098960 + 473781.69 .3538876 .0100352 + 473826.44 .3453053 .0098842 + 473871.19 .3394783 .0096748 + 473916.06 .3615581 .0103122 + 473960.81 .3534581 .0102142 + 474005.59 .3457928 .0100306 + 474050.47 .3668858 .0105652 + 474095.25 .3491291 .0103725 + 474140.03 .3621708 .0105360 + 474184.84 .3417718 .0100698 + 474229.75 .3527749 .0103674 + 474274.56 .3465247 .0101446 + 474319.38 .3397287 .0097893 + 474364.28 .3605954 .0103395 + 474409.12 .3483222 .0101471 + 474453.94 .3409597 .0098132 + 474498.81 .3566461 .0102520 + 474543.75 .3428287 .0098589 + 474588.59 .3401984 .0098493 + 474633.47 .3470885 .0102499 + 474678.41 .3563764 .0104013 + 474723.28 .3582019 .0103423 + 474768.19 .3471443 .0101633 + 474813.06 .3392825 .0100050 + 474858.03 .3368190 .0097005 + 474902.94 .3417586 .0098148 + 474947.84 .3499956 .0099795 + 474992.84 .3519877 .0100829 + 475037.78 .3552303 .0102010 + 475082.72 .3550047 .0102940 + 475127.66 .3597158 .0105005 + 475172.66 .3391605 .0100008 + 475217.62 .3432010 .0100241 + 475262.56 .3622223 .0104913 + 475307.62 .3345234 .0097514 + 475352.59 .3578547 .0102539 + 475397.56 .3530904 .0100613 + 475442.53 .3600135 .0102650 + 475487.59 .3348779 .0097062 + 475532.59 .3401176 .0097871 + 475577.59 .3590575 .0103054 + 475622.69 .3470400 .0100868 + 475667.69 .3595801 .0102892 + 475712.72 .3542574 .0102523 + 475757.75 .3496670 .0099837 + 475802.84 .3481653 .0100830 + 475847.91 .3361852 .0097224 + 475892.94 .3615408 .0104008 + 475938.06 .3525900 .0101423 + 475983.12 .3492627 .0101419 + 476028.19 .3430914 .0096976 + 476073.25 .3549518 .0100735 + 476118.41 .3547446 .0100165 + 476163.50 .3463736 .0097296 + 476208.59 .3426331 .0098497 + 476253.78 .3324238 .0096532 + 476298.88 .3509346 .0101568 + 476343.97 .3662139 .0105664 + 476389.09 .3559216 .0103690 + 476434.28 .3509608 .0102166 + 476479.44 .3391042 .0099551 + 476524.56 .3422759 .0099362 + 476569.78 .3514330 .0102060 + 476614.94 .3419476 .0098546 + 476660.06 .3639767 .0103996 + 476705.31 .3478981 .0099722 + 476750.50 .3794323 .0106792 + 476795.66 .3606398 .0100831 + 476840.84 .3671556 .0101305 + 476886.09 .3419613 .0095127 + 476931.31 .3575669 .0099379 + 476976.50 .3635183 .0102259 + 477021.78 .3488851 .0097770 + 477067.00 .3433032 .0097440 + 477112.22 .3497423 .0099533 + 477157.44 .3492490 .0100155 + 477202.75 .3274112 .0096118 + 477248.00 .3592637 .0102396 + 477293.22 .3723952 .0105654 + 477338.56 .3558291 .0103905 + 477383.81 .3633377 .0104437 + 477429.06 .3591426 .0101316 + 477474.34 .3566522 .0099772 + 477519.72 .3548420 .0097919 + 477565.00 .3568609 .0097300 + 477610.28 .3406996 .0093444 + 477655.66 .3555455 .0095562 + 477700.97 .3742046 .0100421 + 477746.25 .3488227 .0096455 + 477791.56 .3353856 .0093037 + 477836.97 .3650587 .0101885 + 477882.31 .3540796 .0099111 + 477927.62 .3527428 .0099966 + 477973.06 .3656585 .0102503 + 478018.41 .3493264 .0097845 + 478063.75 .3477402 .0097104 + 478109.12 .3606297 .0100296 + 478154.56 .3644355 .0100459 + 478199.94 .3488665 .0095292 + 478245.31 .3572658 .0097409 + 478290.78 .3718990 .0101897 + 478336.19 .3566208 .0098784 + 478381.56 .3463364 .0096288 + 478426.97 .3511595 .0097573 + 478472.47 .3494968 .0096955 + 478517.91 .3395325 .0095764 + 478563.31 .3522722 .0098367 + 478608.84 .3675145 .0102045 + 478654.28 .3559282 .0100662 + 478699.72 .3703696 .0104585 + 478745.16 .3321399 .0095191 + 478790.69 .3690400 .0104960 + 478836.16 .3369286 .0096662 + 478881.62 .3467177 .0098389 + 478927.19 .3675962 .0104341 + 478972.69 .3587127 .0101448 + 479018.16 .3559167 .0100859 + 479063.66 .3579271 .0099978 + 479109.25 .3619904 .0100891 + 479154.75 .3549848 .0098316 + 479200.25 .3474573 .0096775 + 479245.88 .3517960 .0098209 + 479291.41 .3439552 .0095714 + 479336.94 .3597260 .0099926 + 479382.56 .3687834 .0102514 + 479428.09 .3468612 .0097123 + 479473.66 .3586753 .0100058 + 479519.22 .3300942 .0092746 + 479564.88 .3484385 .0096192 + 479610.44 .3662479 .0100679 + 479656.03 .3517891 .0098088 + 479701.69 .3727930 .0102495 + 479747.28 .3454614 .0095561 + 479792.88 .3585687 .0101099 + 479838.47 .3511190 .0098033 + 479884.19 .3674903 .0102768 + 479929.81 .3541981 .0098104 + 479975.44 .3603521 .0101949 + 480021.12 .3495632 .0098432 + 480066.78 .3538788 .0099093 + 480112.41 .3600154 .0103566 + 480158.06 .3450163 .0098923 + 480203.81 .3489511 .0099116 + 480249.47 .3539868 .0100011 + 480295.16 .3690026 .0103248 + 480340.91 .3653980 .0102268 + 480386.59 .3435814 .0095778 + 480432.28 .3489141 .0097756 + 480477.97 .3405557 .0094966 + 480523.78 .3431687 .0094426 + 480569.47 .3547353 .0097311 + 480615.19 .3615422 .0099164 + 480661.00 .3501488 .0097522 + 480706.72 .3549620 .0098215 + 480752.47 .3673464 .0103442 + 480798.22 .3325575 .0094911 + 480844.03 .3439890 .0097033 + 480889.78 .3560956 .0100569 + 480935.56 .3439714 .0098164 + 480981.41 .3415625 .0098184 + 481027.19 .3357257 .0096939 + 481072.97 .3494503 .0100173 + 481118.75 .3490680 .0101140 + 481164.62 .3389776 .0097817 + 481210.44 .3440796 .0099850 + 481256.25 .3220262 .0092961 + 481302.16 .3560970 .0103155 + 481347.97 .3505637 .0100294 + 481393.78 .3363793 .0097111 + 481439.62 .3286066 .0094419 + 481485.56 .3366040 .0095978 + 481531.41 .3501704 .0098005 + 481577.25 .3305418 .0093271 + 481623.19 .3419382 .0094477 + 481669.06 .3451365 .0096480 + 481714.94 .3405008 .0095798 + 481760.81 .3523076 .0098427 + 481806.78 .3515514 .0099442 + 481852.69 .3388447 .0097362 + 481898.56 .3546073 .0102112 + 481944.56 .3458308 .0099794 + 481990.47 .3598062 .0103415 + 482036.41 .3326912 .0095880 + 482082.31 .3584411 .0102323 + 482128.34 .3472164 .0098482 + 482174.28 .3466861 .0100008 + 482220.22 .3486923 .0100931 + 482266.25 .3445482 .0100437 + 482312.22 .3461285 .0100929 + 482358.19 .3447618 .0099899 + 482404.25 .3591810 .0104082 + 482450.22 .3473983 .0101476 + 482496.22 .3625646 .0104172 + 482542.19 .3358705 .0097741 + 482588.28 .3524060 .0102020 + 482634.28 .3446950 .0100757 + 482680.31 .3548637 .0103735 + 482726.41 .3724275 .0107475 + 482772.44 .3370287 .0098484 + 482818.47 .3459699 .0099375 + 482864.50 .3563681 .0099994 + 482910.62 .3407572 .0095955 + 482956.69 .3526508 .0097363 + 483002.72 .3584512 .0097952 + 483048.88 .3633858 .0099191 + 483094.94 .3574519 .0097425 + 483141.03 .3576337 .0096927 + 483187.12 .3622561 .0100025 + 483233.28 .3594740 .0097900 + 483279.38 .3486438 .0095600 + 483325.50 .3667123 .0100807 + 483371.69 .3633373 .0102174 + 483417.81 .3432500 .0095645 + 483463.94 .3473127 .0097058 + 483510.06 .3517715 .0097657 + 483556.28 .3608961 .0100384 + 483602.41 .3487642 .0097610 + 483648.56 .3510527 .0097117 + 483694.81 .3540486 .0098102 + 483740.97 .3468248 .0095368 + 483787.16 .3439102 .0095839 + 483833.31 .3576319 .0100588 + 483879.59 .3485188 .0099246 + 483925.78 .3574268 .0102971 + 483971.97 .3472998 .0099086 + 484018.25 .3494586 .0101220 + 484064.47 .3556023 .0102744 + 484110.69 .3451402 .0100401 + 484156.91 .3544641 .0101360 + 484203.22 .3630156 .0104220 + 484249.47 .3562806 .0102844 + 484295.69 .3586672 .0102816 + 484342.03 .3487934 .0099113 + 484388.28 .3400790 .0098296 + 484434.56 .3586468 .0102548 + 484480.81 .3592535 .0101730 + 484527.19 .3533792 .0101147 + 484573.47 .3445567 .0096572 + 484619.75 .3662324 .0101334 + 484666.12 .3805597 .0106509 + 484712.44 .3467724 .0097284 + 484758.75 .3473854 .0098292 + 484805.06 .3610013 .0100156 + 484851.47 .3689473 .0103602 + 484897.78 .3425544 .0096075 + 484944.12 .3635320 .0101794 + 484990.56 .3531318 .0099502 + 485036.91 .3381566 .0095594 + 485083.25 .3580562 .0099972 + 485129.72 .3543571 .0099010 + 485176.09 .3485442 .0098019 + 485222.47 .3637281 .0102304 + 485268.84 .3643358 .0101743 + 485315.31 .3574081 .0099878 + 485361.72 .3470502 .0096971 + 485408.09 .3651145 .0100752 + 485454.59 .3548421 .0097551 + 485501.03 .3657071 .0099718 + 485547.44 .3478375 .0095995 + 485593.88 .3503678 .0097195 + 485640.38 .3523660 .0096382 + 485686.84 .3575127 .0097850 + 485733.28 .3496931 .0097442 + 485779.81 .3759097 .0105105 + 485826.28 .3611111 .0100097 + 485872.75 .3526908 .0098054 + 485919.22 .3817720 .0105475 + 485965.78 .3491091 .0097084 + 486012.28 .3675907 .0100931 + 486058.78 .3670356 .0100333 + 486105.38 .3591402 .0098979 + 486151.88 .3382420 .0094366 + 486198.38 .3652705 .0100945 + 486244.91 .3419470 .0096111 + 486291.53 .3604625 .0099111 + 486338.06 .3670410 .0102890 + 486384.59 .3661580 .0102055 + 486431.25 .3485319 .0097701 + 486477.78 .3539746 .0098383 + 486524.34 .3501751 .0098881 + 486570.94 .3540857 .0100218 + 486617.59 .3453355 .0097949 + 486664.16 .3528540 .0098897 + 486710.75 .3559539 .0099807 + 486757.44 .3702380 .0101563 + 486804.03 .3696873 .0101383 + 486850.66 .3597791 .0097309 + 486897.25 .3393754 .0093037 + 486943.97 .3374054 .0090382 + 486990.59 .3573625 .0095906 + 487037.25 .3508336 .0094336 + 487083.97 .3506550 .0093563 + 487130.62 .3496879 .0094961 + 487177.28 .3492734 .0095290 + 487223.94 .3373957 .0093695 + 487270.69 .3396889 .0095719 + 487317.38 .3454294 .0097295 + 487364.06 .3651921 .0103401 + 487410.81 .3646456 .0103115 + 487457.53 .3699445 .0102995 + 487504.22 .3299966 .0093710 + 487550.94 .3604798 .0097645 + 487597.75 .3455086 .0093381 + 487644.47 .3510713 .0096006 + 487691.19 .3652907 .0097192 + 487738.00 .3762656 .0099290 + 487784.75 .3620630 .0096804 + 487831.50 .3667956 .0098574 + 487878.34 .3573302 .0096478 + 487925.12 .3650751 .0099196 + 487971.88 .3643358 .0100262 + 488018.66 .3385088 .0093900 + 488065.53 .3563207 .0097531 + 488112.31 .3827201 .0106255 + 488159.12 .3602147 .0100738 + 488206.00 .3693424 .0101953 + 488252.81 .3552395 .0098306 + 488299.62 .3712962 .0103297 + 488346.47 .3544956 .0098531 + 488393.38 .3651627 .0103570 + 488440.22 .3776259 .0105905 + 488487.06 .3543316 .0100677 + 488534.00 .3508766 .0100195 + 488580.84 .3768466 .0105720 + 488627.72 .3608263 .0101982 + 488674.59 .3500138 .0099574 + 488721.56 .3674640 .0103006 + 488768.44 .3492015 .0097875 + 488815.31 .3688655 .0102686 + 488862.31 .3659705 .0101034 + 488909.22 .3655500 .0098990 + 488956.12 .3746832 .0101422 + 489003.03 .3603155 .0099039 + 489050.06 .3512652 .0095513 + 489097.00 .3596945 .0098515 + 489143.94 .3532449 .0097720 + 489190.97 .3491861 .0096413 + 489237.91 .3588159 .0099554 + 489284.88 .3535947 .0097742 + 489331.84 .3725224 .0103558 + 489378.91 .3618581 .0100130 + 489425.88 .3643760 .0099536 + 489472.88 .3470687 .0094184 + 489519.94 .3490591 .0094498 + 489566.94 .3636864 .0098769 + 489613.94 .3652474 .0098165 + 489660.97 .3748215 .0102061 + 489708.06 .3485584 .0096207 + 489755.09 .3522026 .0097147 + 489802.12 .3760276 .0103509 + 489849.25 .3692369 .0104870 + 489896.31 .3659375 .0102994 + 489943.34 .3612938 .0102595 + 489990.41 .3582309 .0102226 + 490037.56 .3555233 .0102531 + 490084.66 .3725062 .0103871 + 490131.72 .3669912 .0103423 + 490178.91 .3504377 .0099616 + 490226.00 .3657204 .0102598 + 490273.09 .3617975 .0102561 + 490320.22 .3590769 .0100971 + 490367.41 .3504962 .0099611 + 490414.53 .3654038 .0104167 + 490461.66 .3545492 .0101055 + 490508.88 .3529112 .0101980 + 490556.03 .3694966 .0105612 + 490603.16 .3383065 .0099546 + 490650.31 .3709309 .0106048 + 490697.56 .3405489 .0099218 + 490744.75 .3593638 .0100821 + 490791.91 .3526611 .0096998 + 490839.19 .3618812 .0100854 + 490886.38 .3646131 .0099659 + 490933.56 .3641261 .0099523 + 490980.88 .3413848 .0093800 + 491028.09 .3562067 .0098530 + 491075.28 .3638501 .0099092 + 491122.53 .3672615 .0100870 + 491169.84 .3668078 .0101025 + 491217.06 .3420005 .0094702 + 491264.31 .3758611 .0104055 + 491311.66 .3570674 .0097255 + 491358.91 .3437947 .0095038 + 491406.19 .3739731 .0100611 + 491453.44 .3532367 .0095189 + 491500.81 .3444207 .0093854 + 491548.09 .3583902 .0095679 + 491595.41 .3352793 .0090895 + 491642.78 .3631066 .0097136 + 491690.09 .3635809 .0098937 + 491737.41 .3757928 .0102982 + 491784.72 .3434738 .0095462 + 491832.12 .3503816 .0097106 + 491879.47 .3665130 .0100439 + 491926.81 .3521672 .0096814 + 491974.25 .3554943 .0097694 + 492021.59 .3604167 .0098704 + 492068.97 .3449934 .0095065 + 492116.31 .3640261 .0098744 + 492163.78 .3529092 .0097079 + 492211.16 .3509336 .0095121 + 492258.56 .3482151 .0095460 + 492306.03 .3583498 .0096544 + 492353.44 .3600820 .0097894 + 492400.84 .3584428 .0096835 + 492448.25 .3617391 .0097807 + 492495.78 .3550151 .0095030 + 492543.19 .3582324 .0096398 + 492590.62 .3665006 .0099679 + 492638.16 .3542203 .0095916 + 492685.62 .3487256 .0093411 + 492733.06 .3582795 .0094709 + 492780.53 .3535932 .0094768 + 492828.09 .3689686 .0097997 + 492875.56 .3616673 .0096593 + 492923.06 .3516874 .0094184 + 492970.62 .3634108 .0097212 + 493018.12 .3736282 .0099561 + 493065.62 .3560208 .0094285 + 493113.16 .3641649 .0097819 + 493160.75 .3521554 .0096246 + 493208.28 .3504577 .0096235 + 493255.81 .3745321 .0102151 + 493303.44 .3588776 .0098135 + 493350.97 .3395028 .0093975 + 493398.53 .3686415 .0101865 + 493446.09 .3730387 .0103075 + 493493.75 .3661656 .0101936 + 493541.31 .3640148 .0101587 + 493588.91 .3843382 .0108890 + 493636.56 .3672498 .0104223 + 493684.16 .3637738 .0103744 + 493731.78 .3701277 .0104733 + 493779.47 .3664211 .0104227 + 493827.09 .3621300 .0101993 + 493874.69 .3564787 .0099545 + 493922.34 .3547848 .0099539 + 493970.06 .3470564 .0097595 + 494017.69 .3581696 .0100866 + 494065.34 .3631001 .0101453 + 494113.09 .3662562 .0100962 + 494160.75 .3655387 .0100539 + 494208.41 .3416456 .0095466 + 494256.09 .3706595 .0101052 + 494303.88 .3516629 .0096131 + 494351.56 .3576478 .0096799 + 494399.25 .3677082 .0098757 + 494447.06 .3469217 .0093006 + 494494.75 .3621941 .0096569 + 494542.47 .3624516 .0096778 + 494590.19 .3630615 .0097771 + 494638.03 .3588596 .0097035 + 494685.75 .3754821 .0102670 + 494733.50 .3778936 .0103670 + 494781.34 .3566693 .0099273 + 494829.12 .3577954 .0097919 + 494876.88 .3367453 .0094882 + 494924.66 .3553253 .0100434 + 494972.53 .3625384 .0101291 + 495020.31 .3589779 .0100717 + 495068.09 .3569119 .0099496 + 495116.00 .3581460 .0099761 + 495163.81 .3571589 .0099482 + 495211.62 .3549451 .0098703 + 495259.44 .3669240 .0100806 + 495307.34 .3635261 .0099880 + 495355.19 .3624944 .0100103 + 495403.03 .3624068 .0097517 + 495450.97 .3569403 .0097371 + 495498.81 .3709442 .0100193 + 495546.69 .3601725 .0097901 + 495594.56 .3599895 .0096658 + 495642.53 .3535078 .0098323 + 495690.41 .3479344 .0093412 + 495738.31 .3411151 .0092638 + 495786.28 .3574892 .0097414 + 495834.19 .3552223 .0095954 + 495882.09 .3632100 .0097731 + 495930.03 .3531583 .0095142 + 495978.03 .3467652 .0094766 + 496025.97 .3615931 .0098048 + 496073.91 .3507305 .0096052 + 496121.94 .3655134 .0099090 + 496169.91 .3673224 .0100334 + 496217.88 .3711442 .0100370 + 496265.81 .3785920 .0102142 + 496313.91 .3774276 .0101925 + 496361.88 .3730148 .0102496 + 496409.88 .3586853 .0099416 + 496457.94 .3647504 .0100821 + 496505.94 .3649641 .0100892 + 496553.97 .3618433 .0101329 + 496601.97 .3740828 .0105121 + 496650.09 .3454431 .0096133 + 496698.12 .3547062 .0098910 + 496746.16 .3651520 .0099333 + 496794.28 .3676664 .0099584 + 496842.34 .3594411 .0095550 + 496890.41 .3633866 .0096589 + 496938.56 .3520554 .0091557 + 496986.62 .3554451 .0093037 + 497034.72 .3513890 .0091642 + 497082.78 .3536959 .0092064 + 497130.97 .3603283 .0094578 + 497179.06 .3617482 .0094401 + 497227.19 .3534755 .0093343 + 497275.38 .3389188 .0089509 + 497323.50 .3510356 .0092902 + 497371.62 .3679267 .0095466 + 497419.78 .3682247 .0096215 + 497468.00 .3556881 .0092524 + 497516.16 .3677745 .0098151 + 497564.31 .3636698 .0095098 + 497612.56 .3593540 .0094094 + 497660.72 .3562083 .0094099 + 497708.91 .3646967 .0095539 + 497757.09 .3629327 .0095311 + 497805.38 .3499514 .0091862 + 497853.56 .3644528 .0095082 + 497901.78 .3540550 .0092546 + 497950.06 .3875250 .0100158 + 497998.28 .3664196 .0096608 + 498046.53 .3598648 .0095248 + 498094.75 .3578598 .0095343 + 498143.09 .3640668 .0099481 + 498191.34 .3727494 .0100108 + 498239.59 .3607559 .0097911 + 498287.94 .3677700 .0101960 + 498336.22 .4041475 .0110808 + 498384.47 .3703611 .0101255 + 498432.75 .3525999 .0098166 + 498481.16 .3635068 .0100037 + 498529.44 .3779393 .0103828 + 498577.75 .3659024 .0100729 + 498626.16 .3682267 .0100790 + 498674.47 .3702908 .0101511 + 498722.78 .3397654 .0093676 + 498771.12 .3769567 .0103246 + 498819.53 .3564467 .0098259 + 498867.88 .3499416 .0095109 + 498916.25 .3479421 .0095529 + 498964.69 .3607160 .0097085 + 499013.06 .3591036 .0097892 + 499061.44 .3406108 .0092692 + 499109.81 .3574130 .0096680 + 499158.28 .3551139 .0094935 + 499206.69 .3718433 .0098337 + 499255.09 .3533332 .0095005 + 499303.59 .3542875 .0094234 + 499352.00 .3398846 .0091272 + 499400.41 .3758970 .0101544 + 499448.84 .3710620 .0099766 + 499497.38 .3475372 .0092210 + 499545.81 .3550949 .0094262 + 499594.28 .3870471 .0102834 + 499642.81 .3606205 .0096282 + 499691.28 .3462519 .0092050 + 499739.75 .3529516 .0095465 + 499788.34 .3582357 .0097143 + 499836.81 .3544061 .0094837 + 499885.31 .3493460 .0094677 + 499933.81 .3664678 .0098230 + 499982.41 .3553089 .0094724 + 500030.94 .3663393 .0097609 + 500079.44 .3708636 .0098854 + 500128.06 .3729290 .0098344 + 500176.59 .3598529 .0096229 + 500225.16 .3585611 .0096439 + 500273.69 .3652684 .0098172 + 500322.34 .3648843 .0098115 + 500370.91 .3647547 .0097770 + 500419.47 .3615303 .0098184 + 500468.16 .3698780 .0100186 + 500516.72 .3648445 .0097993 + 500565.31 .3532276 .0095143 + 500613.91 .3563759 .0095978 + 500662.62 .3584665 .0094912 + 500711.22 .3612820 .0095018 + 500759.84 .3486658 .0093246 + 500808.56 .3694646 .0097733 + 500857.22 .3648744 .0098177 + 500905.84 .3766021 .0101079 + 500954.50 .3664474 .0097922 + 501003.25 .3697191 .0099226 + 501051.91 .3503450 .0093716 + 501100.59 .3732615 .0099381 + 501149.34 .3608025 .0097616 + 501198.03 .3522468 .0093406 + 501246.72 .3854498 .0100798 + 501295.41 .3663507 .0095215 + 501344.22 .3631370 .0094933 + 501392.94 .3524975 .0092596 + 501441.66 .3617671 .0095109 + 501490.47 .3731892 .0097137 + 501539.22 .3602647 .0097246 + 501587.94 .3305495 .0089239 + 501636.69 .3654122 .0099395 + 501685.53 .3459247 .0095075 + 501734.31 .3701552 .0101443 + 501783.06 .3705641 .0101368 + 501831.94 .3771817 .0104517 + 501880.72 .3661331 .0102415 + 501929.53 .3621987 .0098920 + 501978.31 .3656306 .0099899 + 502027.22 .3541889 .0096126 + 502076.03 .3700006 .0098709 + 502124.84 .3694629 .0098905 + 502173.75 .3742499 .0098802 + 502222.59 .3682804 .0098377 + 502271.44 .3570333 .0097066 + 502320.28 .3631892 .0097163 + 502369.22 .3445812 .0093472 + 502418.09 .3813092 .0101880 + 502466.97 .3529309 .0095221 + 502515.94 .3689398 .0099328 + 502564.81 .3561048 .0097552 + 502613.72 .3682459 .0100751 + 502662.69 .3629898 .0099040 + 502711.59 .3659708 .0099306 + 502760.50 .3494270 .0095877 + 502809.44 .3661190 .0099579 + 502858.47 .3678271 .0099059 + 502907.38 .3742498 .0100304 + 502956.31 .3595235 .0095369 + 503005.38 .3681128 .0097643 + 503054.31 .3543743 .0094159 + 503103.28 .3576950 .0096400 + 503152.25 .3737812 .0100286 + 503201.31 .3468654 .0096346 + 503250.31 .3702317 .0104134 + 503299.31 .3813227 .0105890 + 503348.38 .3504708 .0098177 + 503397.41 .3584381 .0098890 + 503446.41 .3502434 .0097910 + 503495.44 .3513002 .0095813 + 503544.53 .3497566 .0094142 + 503593.59 .3592228 .0097241 + 503642.62 .3655529 .0098681 + 503691.75 .3734953 .0098461 + 503740.81 .3567247 .0096789 + 503789.88 .3516200 .0095717 + 503838.94 .3510006 .0096029 + 503888.12 .3646180 .0096519 + 503937.19 .3780159 .0100808 + 503986.28 .3596066 .0096601 + 504035.47 .3707133 .0098445 + 504084.59 .3572955 .0094998 + 504133.69 .3616880 .0095493 + 504182.81 .3742597 .0098743 + 504232.03 .3519545 .0094481 + 504281.19 .3565219 .0095960 + 504330.31 .3577850 .0097623 + 504379.56 .3599324 .0098094 + 504428.72 .3691674 .0098811 + 504477.88 .3547434 .0095413 + 504527.06 .3528254 .0095491 + 504576.31 .3749765 .0100846 + 504625.50 .3660880 .0098920 + 504674.69 .3797654 .0103370 + 504724.00 .3666581 .0099081 + 504773.19 .3654339 .0100273 + 504822.41 .3773797 .0102871 + 504871.62 .3616942 .0099168 + 504920.94 .3586679 .0099984 + 504970.19 .3556246 .0098551 + 505019.44 .3744024 .0103478 + 505068.78 .3761042 .0104283 + 505118.03 .3632910 .0098065 + 505167.28 .3522591 .0096800 + 505216.56 .3829367 .0103846 + 505265.94 .3753671 .0101964 + 505315.22 .3775924 .0101242 + 505364.50 .3429664 .0092464 + 505413.91 .3580058 .0095941 + 505463.22 .3541894 .0095387 + 505512.53 .3673261 .0097563 + 505561.84 .3862565 .0103779 + 505611.28 .3547781 .0096784 + 505660.59 .3714888 .0099313 + 505709.94 .3798106 .0100030 + 505759.41 .3738316 .0099757 + 505808.75 .3510925 .0092159 + 505858.12 .3607379 .0094667 + 505907.59 .3650572 .0095391 + 505956.97 .3785580 .0099574 + 506006.34 .3480679 .0091082 + 506055.75 .3494188 .0093696 + 506105.25 .3668180 .0097955 + 506154.66 .3613449 .0096323 + 506204.06 .3591618 .0095589 + 506253.56 .3525586 .0094462 + 506303.00 .3460985 .0090666 + 506352.44 .3651750 .0094539 + 506401.88 .3902025 .0102544 + 506451.44 .3720688 .0097152 + 506500.91 .3727666 .0098441 + 506550.34 .3803829 .0100232 + 506599.94 .3564820 .0095991 + 506649.41 .3531594 .0094212 + 506698.91 .3518775 .0093475 + 506748.38 .3789390 .0100305 + 506798.00 .3674237 .0097258 + 506847.50 .3609608 .0093981 + 506897.00 .3505907 .0092683 + 506946.62 .3680048 .0096452 + 506996.16 .3691603 .0095593 + 507045.69 .3898310 .0101943 + 507095.25 .3693165 .0096096 + 507144.91 .3615146 .0094251 + 507194.47 .3678868 .0095337 + 507244.03 .3671376 .0095859 + 507293.69 .3561924 .0092507 + 507343.28 .3657816 .0094883 + 507392.88 .3670605 .0096340 + 507442.47 .3436714 .0091118 + 507492.16 .3605389 .0094285 + 507541.78 .3766255 .0098411 + 507591.41 .3659541 .0094469 + 507641.12 .3769242 .0098179 + 507690.75 .3612192 .0094100 + 507740.38 .3631425 .0095016 + 507790.03 .3712212 .0096990 + 507839.78 .3593672 .0093842 + 507889.44 .3767498 .0096993 + 507939.12 .3661664 .0094226 + 507988.88 .3784035 .0097996 + 508038.56 .3656333 .0095651 + 508088.25 .3556720 .0091395 + 508137.97 .3758020 .0098605 + 508187.75 .3632468 .0093965 + 508237.47 .3532428 .0092750 + 508287.19 .3593097 .0095014 + 508337.03 .3610208 .0095864 + 508386.75 .3738569 .0097346 + 508436.50 .3739226 .0097771 + 508486.25 .3688357 .0097936 + 508536.09 .3795646 .0098597 + 508585.88 .3651000 .0095951 + 508635.62 .3560774 .0093515 + 508685.50 .3749204 .0096860 + 508735.31 .3533371 .0091685 + 508785.09 .3641564 .0094833 + 508835.00 .3554921 .0093093 + 508884.81 .3667473 .0095798 + 508934.62 .3662300 .0095717 + 508984.44 .3580331 .0095547 + 509034.38 .3755169 .0098661 + 509084.19 .3695736 .0097540 + 509134.03 .3666306 .0097576 + 509184.00 .4025991 .0106337 + 509233.84 .3692664 .0099280 + 509283.72 .3678272 .0096682 + 509333.59 .3557355 .0094219 + 509383.56 .3617601 .0094407 + 509433.47 .3680556 .0095429 + 509483.34 .3746669 .0096645 + 509533.34 .3788597 .0096885 + 509583.28 .3555434 .0093090 + 509633.19 .3609910 .0095255 + 509683.12 .3705869 .0096934 + 509733.12 .3896825 .0104030 + 509783.09 .3585488 .0094449 + 509833.03 .3678538 .0096163 + 509883.09 .3860160 .0100157 + 509933.03 .3549419 .0091154 + 509983.00 .3814585 .0096483 + 510033.00 .3843141 .0097198 + 510083.06 .3573703 .0091707 + 510133.06 .3765882 .0097198 + 510183.06 .3753689 .0097058 + 510233.16 .3690069 .0095586 + 510283.19 .3843156 .0099528 + 510333.19 .3613765 .0094209 + 510383.22 .3540753 .0092752 + 510433.34 .3649381 .0095176 + 510483.41 .3571378 .0093586 + 510533.44 .3861127 .0099464 + 510583.59 .3748411 .0097352 + 510633.66 .3640924 .0095433 + 510683.75 .3654836 .0096010 + 510733.81 .3663572 .0096591 + 510784.00 .3744132 .0098089 + 510834.09 .3651452 .0095580 + 510884.22 .3640960 .0095678 + 510934.41 .3594268 .0092581 + 510984.53 .3734612 .0095163 + 511034.66 .3698955 .0094473 + 511084.78 .3683353 .0093111 + 511135.03 .3691789 .0092750 + 511185.16 .3784184 .0095806 + 511235.31 .3594574 .0092800 + 511285.59 .3820587 .0096947 + 511335.75 .3737763 .0096469 + 511385.94 .3668092 .0095638 + 511436.09 .3749054 .0096955 + 511486.41 .3675091 .0096522 + 511536.59 .3771720 .0099811 + 511586.81 .3611817 .0095666 + 511637.09 .3601028 .0095285 + 511687.34 .3736192 .0098879 + 511737.56 .3554416 .0094127 + 511787.78 .3651068 .0096508 + 511838.12 .3607820 .0093381 + 511888.38 .3610438 .0093365 + 511938.62 .3661201 .0094463 + 511989.00 .3709933 .0094714 + 512039.28 .3742207 .0096023 + 512089.56 .3802517 .0096100 + 512139.94 .3553262 .0091141 + 512190.22 .3680353 .0095267 + 512240.53 .3494945 .0090371 + 512290.84 .3813196 .0100529 + 512341.25 .3747205 .0098640 + 512391.59 .3688553 .0098584 + 512441.91 .3601189 .0094677 + 512492.34 .3905506 .0102149 + 512542.69 .3631167 .0095009 + 512593.06 .3625509 .0094082 + 512643.41 .3675157 .0093749 + 512693.88 .3807162 .0094398 + 512744.25 .3684789 .0091279 + 512794.62 .3712166 .0091813 + 512845.12 .3553252 .0089193 + 512895.53 .3752472 .0093868 + 512945.94 .3659020 .0092981 + 512996.34 .3645718 .0093228 + 513046.84 .3473851 .0089989 + 513097.28 .3730232 .0097614 + 513147.72 .3605945 .0094344 + 513198.25 .3942183 .0101690 + 513248.72 .3692863 .0095692 + 513299.16 .3751039 .0098203 + 513349.62 .3710733 .0096087 + 513400.22 .3651281 .0094643 + 513450.69 .3823665 .0098468 + 513501.19 .3553368 .0093345 + 513551.78 .3648098 .0096229 + 513602.28 .3788227 .0098287 + 513652.78 .3700185 .0097494 + 513703.31 .3652073 .0095863 + 513753.91 .3629237 .0096635 + 513804.44 .3604587 .0096170 + 513855.00 .3501127 .0093750 + 513905.62 .3630597 .0097426 + 513956.19 .3623920 .0097932 + 514006.75 .3595166 .0098369 + 514057.31 .3619729 .0097952 + 514108.00 .3684492 .0100156 + 514158.59 .3654578 .0099391 + 514209.19 .3694795 .0098141 + 514259.88 .3684690 .0098612 + 514310.47 .3731489 .0099715 + 514361.09 .3593815 .0095577 + 514411.72 .3617528 .0096222 + 514462.44 .3904885 .0102340 + 514513.09 .3560102 .0094907 + 514563.72 .3649465 .0096479 + 514614.47 .3784956 .0099514 + 514665.12 .3584647 .0093801 + 514715.81 .3537414 .0093777 + 514766.47 .3617551 .0093488 + 514817.25 .3723334 .0097236 + 514867.94 .3639104 .0093881 + 514918.66 .3762672 .0098077 + 514969.44 .3503873 .0090797 + 515020.16 .3857915 .0099109 + 515070.88 .3880736 .0098453 + 515121.69 .3753219 .0095996 + 515172.44 .3562231 .0091658 + 515223.19 .3719716 .0095202 + 515273.94 .3580671 .0090527 + 515324.78 .3890459 .0096913 + 515375.53 .3469475 .0086942 + 515426.31 .3656024 .0092235 + 515477.19 .3731833 .0092672 + 515527.97 .3467579 .0089180 + 515578.78 .3736428 .0094994 + 515629.59 .3552032 .0091085 + 515680.50 .3946213 .0101754 + 515731.31 .3791694 .0096694 + 515782.12 .3916219 .0099056 + 515833.06 .3679065 .0094340 + 515883.91 .3739568 .0095924 + 515934.75 .3659413 .0094856 + 515985.59 .3506104 .0091134 + 516036.56 .3790342 .0099496 + 516087.44 .3673119 .0098179 + 516138.31 .3684768 .0097425 + 516189.28 .3735224 .0099402 + 516240.19 .3883277 .0102788 + 516291.09 .3783580 .0100187 + 516342.00 .3690237 .0098616 + 516393.00 .3710333 .0097196 + 516443.94 .3884207 .0100560 + 516494.84 .3727283 .0097421 + 516545.88 .3717335 .0096869 + 516596.84 .3684290 .0095291 + 516647.78 .3552822 .0091559 + 516698.75 .3775908 .0096099 + 516749.81 .3634309 .0093295 + 516800.78 .3612648 .0093724 + 516851.78 .3777728 .0096042 + 516902.88 .3814049 .0099804 + 516953.84 .3654861 .0095728 + 517004.88 .3642737 .0095653 + 517055.88 .3553747 .0093257 + 517107.00 .3753369 .0096193 + 517158.03 .3596383 .0093184 + 517209.06 .3700590 .0094980 + 517260.19 .3725887 .0095200 + 517311.25 .3782718 .0097306 + 517362.31 .3669026 .0095113 + 517413.38 .3681450 .0095655 + 517464.56 .3763000 .0097866 + 517515.62 .3746952 .0096538 + 517566.72 .3694399 .0094867 + 517617.91 .3840024 .0099192 + 517669.03 .3580861 .0092610 + 517720.12 .3664603 .0094376 + 517771.25 .3704250 .0095711 + 517822.47 .3622965 .0095197 + 517873.59 .3633405 .0095281 + 517924.75 .3708731 .0096581 + 517976.00 .3745499 .0096650 + 518027.16 .3633828 .0094340 + 518078.31 .3568459 .0092691 + 518129.59 .3782615 .0097519 + 518180.78 .3639327 .0093260 + 518231.97 .3636434 .0092299 + 518283.16 .3722680 .0095046 + 518334.44 .3807165 .0096823 + 518385.66 .3793327 .0095786 + 518436.88 .3674442 .0092231 + 518488.19 .3746892 .0094460 + 518539.44 .3571256 .0090388 + 518590.69 .3633435 .0092208 + 518641.94 .3719660 .0092731 + 518693.28 .3630074 .0091474 + 518744.53 .3651761 .0092197 + 518795.81 .3731091 .0094535 + 518847.19 .3728336 .0094230 + 518898.47 .3630600 .0093258 + 518949.78 .3605864 .0093052 + 519001.06 .3729930 .0095976 + 519052.47 .3977455 .0102037 + 519103.78 .3670465 .0093701 + 519155.12 .3807435 .0096212 + 519206.56 .3754138 .0096506 + 519257.88 .3756075 .0096643 + 519309.25 .3784288 .0097708 + 519360.59 .3851033 .0098898 + 519412.06 .3717893 .0094938 + 519463.41 .3664494 .0095447 + 519514.81 .3607183 .0093575 + 519566.28 .3750039 .0097705 + 519617.69 .3649334 .0094918 + 519669.06 .3621379 .0094014 + 519720.50 .3709589 .0098293 + 519772.00 .3438163 .0092024 + 519823.44 .3728636 .0097585 + 519874.84 .3449801 .0090108 + 519926.38 .3561709 .0092541 + 519977.84 .3603138 .0093861 + 520029.28 .3776823 .0096527 + 520080.75 .3619805 .0093251 + 520132.31 .3725812 .0095522 + 520183.81 .3548430 .0092794 + 520235.28 .3547406 .0092664 + 520286.88 .3572567 .0091824 + 520338.38 .3688002 .0095230 + 520389.88 .3666952 .0095924 + 520441.41 .3802287 .0098865 + 520493.03 .3657474 .0095389 + 520544.56 .3673800 .0095026 + 520596.09 .3803180 .0097662 + 520647.72 .3686855 .0094828 + 520699.28 .3788630 .0095793 + 520750.84 .3854842 .0099153 + 520802.41 .3877784 .0098118 + 520854.09 .3761807 .0095596 + 520905.69 .3673340 .0093527 + 520957.25 .3586467 .0091967 + 521008.97 .3759281 .0094980 + 521060.56 .3796002 .0095719 + 521112.19 .3650691 .0092638 + 521163.81 .3665707 .0093258 + 521215.53 .3757649 .0095507 + 521267.19 .3647800 .0092551 + 521318.81 .3692244 .0093952 + 521370.56 .3706303 .0095002 + 521422.22 .3615477 .0093618 + 521473.91 .3771741 .0096257 + 521525.69 .3853048 .0098183 + 521577.38 .3805889 .0097051 + 521629.06 .3814003 .0094760 + 521680.75 .3617405 .0091112 + 521732.56 .3686963 .0091568 + 521784.28 .3647694 .0091485 + 521836.00 .3777115 .0092719 + 521887.81 .3745329 .0091454 + 521939.56 .3881773 .0095229 + 521991.31 .3670498 .0090451 + 522043.06 .3742796 .0094391 + 522094.91 .3697180 .0092555 + 522146.69 .3730108 .0093666 + 522198.47 .3705807 .0094551 + 522250.34 .3780076 .0097460 + 522302.16 .3668290 .0096168 + 522353.94 .3895375 .0101009 + 522405.75 .3730102 .0097306 + 522457.66 .3790170 .0098752 + 522509.50 .3659832 .0095582 + 522561.31 .3830154 .0098629 + 522613.25 .3662856 .0094865 + 522665.09 .3609893 .0092701 + 522716.94 .3773473 .0096520 + 522768.81 .3741577 .0096314 + 522820.78 .3585392 .0090904 + 522872.66 .3809500 .0096593 + 522924.53 .3652934 .0093922 + 522976.53 .3533943 .0090758 + 523028.44 .3493134 .0091806 + 523080.34 .3698666 .0096169 + 523132.25 .3765428 .0097522 + 523184.28 .3601291 .0094783 + 523236.22 .3611671 .0095230 + 523288.16 .3717672 .0098422 + 523340.19 .3688680 .0097549 + 523392.16 .3730567 .0098077 + 523444.12 .3763756 .0098132 + 523496.09 .3715881 .0098471 + 523548.16 .3618870 .0094250 + 523600.16 .3785063 .0098150 + 523652.12 .3744417 .0096734 + 523704.22 .3651520 .0093879 + 523756.25 .3756006 .0096178 + 523808.25 .3501280 .0089855 + 523860.28 .3595442 .0093194 + 523912.41 .3644496 .0094201 + 523964.44 .3527995 .0092141 + 524016.50 .3696012 .0096628 + 524068.66 .3443128 .0091954 + 524120.72 .3667773 .0098398 + 524172.78 .3535756 .0094096 + 524224.88 .3604038 .0094606 + 524277.06 .3650159 .0094125 + 524329.12 .3628259 .0092567 + 524381.25 .3688236 .0094054 + 524433.44 .3915363 .0098411 + 524485.56 .3665208 .0093710 + 524537.69 .3649600 .0091809 + 524589.94 .3776960 .0095422 + 524642.06 .3562212 .0093243 + 524694.19 .3683090 .0094331 + 524746.38 .3733992 .0096179 + 524798.62 .3645022 .0094824 + 524850.81 .3615071 .0093412 + 524903.00 .3751395 .0096578 + 524955.25 .3594143 .0092541 + 525007.50 .3688999 .0095339 + 525059.69 .3536231 .0093151 + 525111.88 .3701637 .0095398 + 525164.19 .3607512 .0093450 + 525216.44 .3446220 .0089805 + 525268.69 .3647534 .0094160 + 525321.00 .3647230 .0095350 + 525373.25 .3614222 .0095619 + 525425.50 .3639189 .0094960 + 525477.75 .3693486 .0095673 + 525530.12 .3741445 .0097038 + 525582.44 .3809323 .0099227 + 525634.69 .3705842 .0095996 + 525687.12 .3767153 .0097101 + 525739.44 .3656193 .0094562 + 525791.75 .3818639 .0098216 + 525844.06 .3490755 .0089443 + 525896.50 .3660842 .0092652 + 525948.81 .3566418 .0091712 + 526001.12 .3553456 .0090285 + 526053.62 .3550901 .0091014 + 526105.94 .3828960 .0096547 + 526158.31 .3627526 .0092545 + 526210.69 .3584600 .0091686 + 526263.19 .3591891 .0091391 + 526315.56 .3624839 .0093101 + 526368.00 .3491658 .0090843 + 526420.50 .3646280 .0095381 + 526472.88 .3577166 .0093116 + 526525.31 .3744528 .0097837 + 526577.75 .3760467 .0097747 + 526630.25 .3561627 .0092057 + 526682.75 .3540342 .0091028 + 526735.19 .3520227 .0089481 + 526787.75 .3844097 .0096287 + 526840.19 .3719901 .0094270 + 526892.69 .3682132 .0092821 + 526945.19 .3608250 .0090927 + 526997.75 .3789650 .0095108 + 527050.25 .3604548 .0092275 + 527102.75 .3562740 .0092650 + 527155.38 .3671022 .0095372 + 527207.94 .3688357 .0097622 + 527260.44 .3531955 .0094752 + 527313.00 .3584964 .0095802 + 527365.62 .3648411 .0096219 + 527418.19 .3612411 .0096547 + 527470.75 .3651359 .0095821 + 527523.44 .3581637 .0095443 + 527576.00 .3644705 .0096538 + 527628.56 .3618917 .0095974 + 527681.19 .3400029 .0090634 + 527733.88 .3787027 .0099103 + 527786.50 .3660497 .0096620 + 527839.12 .3536505 .0092248 + 527891.81 .3683276 .0095971 + 527944.44 .3523418 .0091553 + 527997.12 .3430608 .0090609 + 528049.88 .3684287 .0094922 + 528102.50 .3619852 .0094281 + 528155.19 .3579660 .0094390 + 528207.88 .3443046 .0091098 + 528260.62 .3681793 .0096045 + 528313.31 .3704155 .0096379 + 528366.00 .3553087 .0093297 + 528418.81 .3669447 .0094467 + 528471.56 .3579877 .0092029 + 528524.25 .3775074 .0096550 + 528577.00 .3471229 .0088905 + 528629.81 .3597999 .0091284 + 528682.56 .3677485 .0092972 + 528735.31 .3553629 .0090672 + 528788.19 .3574752 .0089924 + 528840.94 .3662433 .0092555 + 528893.75 .3616270 .0091763 + 528946.50 .3691904 .0093701 + 528999.38 .3660609 .0092663 + 529052.19 .3634320 .0092585 + 529105.00 .3531668 .0090355 + 529157.94 .3747313 .0096336 + 529210.75 .3361149 .0086022 + 529263.56 .3552561 .0092239 + 529316.44 .3477893 .0089700 + 529369.38 .3573334 .0093450 + 529422.19 .3550592 .0093080 + 529475.06 .3386256 .0089382 + 529528.06 .3418113 .0089514 + 529580.94 .3496695 .0090482 + 529633.81 .3407245 .0087913 + 529686.69 .3621106 .0094339 + 529739.69 .3421844 .0088676 + 529792.62 .3576978 .0091622 + 529845.56 .3405935 .0089330 + 529898.56 .3600376 .0093230 + 529951.50 .3541678 .0092174 + 530004.44 .3483306 .0090990 + 530057.38 .3332066 .0088419 + 530110.44 .3535228 .0091840 + 530163.44 .3453091 .0090619 + 530216.38 .3498900 .0091182 + 530269.50 .3343697 .0087328 + 530322.44 .3379590 .0088132 + 530375.44 .3316405 .0088008 + 530428.44 .3364916 .0088444 + 530481.56 .3343903 .0089090 + 530534.62 .3286331 .0086737 + 530587.62 .3354833 .0088894 + 530640.75 .3355676 .0089480 + 530693.81 .3403513 .0089469 + 530746.88 .3326164 .0086582 + 530799.94 .3342908 .0087570 + 530853.12 .3175291 .0083169 + 530906.19 .3181568 .0083604 + 530959.25 .3136102 .0082387 + 531012.44 .3223847 .0085026 + 531065.56 .3018964 .0079639 + 531118.69 .3258722 .0086052 + 531171.88 .2993150 .0080523 + 531225.00 .2987202 .0081735 + 531278.12 .2823021 .0077219 + 531331.31 .2929048 .0080041 + 531384.56 .2792370 .0077246 + 531437.69 .2761201 .0076987 + 531490.88 .2775183 .0076954 + 531544.12 .2636326 .0075529 + 531597.31 .2488784 .0072404 + 531650.50 .2430121 .0071410 + 531703.69 .2282133 .0067802 + 531757.00 .2374501 .0070429 + 531810.25 .2140082 .0065086 + 531863.44 .2057246 .0064440 + 531916.75 .1848428 .0060826 + 531970.00 .1725782 .0058629 + 532023.25 .1470505 .0054215 + 532076.50 .1418417 .0053042 + 532129.88 .1146641 .0046704 + 532183.12 .1024135 .0043792 + 532236.44 .0681946 .0034669 + 532289.81 .0634394 .0033355 + 532343.12 .0478275 .0028675 + 532396.38 .0357675 .0024772 + 532449.69 .0255647 .0021051 + 532503.12 .0185779 .0018493 + 532556.44 .0110239 .0015030 + 532609.75 .0117147 .0015591 + 532663.25 .0089606 .0013914 + 532716.56 .0102679 .0014748 + 532769.94 .0145099 .0016411 + 532823.31 .0174755 .0018152 + 532876.75 .0229593 .0019909 + 532930.12 .0368278 .0024406 + 532983.56 .0424724 .0026292 + 533037.06 .0669925 .0033051 + 533090.44 .0779747 .0036156 + 533143.88 .1004117 .0041362 + 533197.25 .1145761 .0044443 + 533250.81 .1366262 .0050211 + 533304.25 .1509886 .0054219 + 533357.69 .1772906 .0059494 + 533411.25 .1892594 .0062352 + 533464.69 .1956617 .0062871 + 533518.19 .2040590 .0065189 + 533571.69 .2399969 .0071902 + 533625.25 .2346317 .0070158 + 533678.75 .2499372 .0072822 + 533732.25 .2594316 .0075278 + 533785.88 .2648053 .0077327 + 533839.38 .2683793 .0077188 + 533892.88 .2796842 .0079953 + 533946.44 .2800452 .0078632 + 534000.06 .2866148 .0079314 + 534053.62 .3041609 .0083190 + 534107.19 .3001114 .0081517 + 534160.88 .3114069 .0083254 + 534214.44 .3295242 .0085967 + 534268.00 .3140927 .0081697 + 534321.69 .3154710 .0082372 + 534375.31 .3293076 .0085291 + 534428.88 .3203757 .0083002 + 534482.50 .3206102 .0082416 + 534536.25 .3136790 .0081805 + 534589.88 .3330568 .0086161 + 534643.50 .3370397 .0086016 + 534697.25 .3321576 .0084547 + 534750.94 .3391706 .0085710 + 534804.56 .3325268 .0084466 + 534858.25 .3380272 .0085890 + 534912.06 .3330682 .0085014 + 534965.75 .3414080 .0086292 + 535019.44 .3357776 .0086009 + 535073.25 .3489042 .0089373 + 535126.94 .3471844 .0088059 + 535180.62 .3387446 .0086890 + 535234.38 .3371409 .0087059 + 535288.25 .3548960 .0089825 + 535341.94 .3513222 .0088983 + 535395.69 .3577981 .0089478 + 535449.56 .3372008 .0084916 + 535503.38 .3483341 .0086843 + 535557.12 .3578650 .0088727 + 535610.94 .3455754 .0084816 + 535664.81 .3598798 .0089492 + 535718.62 .3497579 .0086710 + 535772.44 .3397966 .0085347 + 535826.31 .3487525 .0087239 + 535880.19 .3553795 .0089614 + 535934.00 .3436148 .0089323 + 535987.81 .3622506 .0093640 + 536041.81 .3467987 .0090496 + 536095.62 .3630759 .0094579 + 536149.50 .3565912 .0093938 + 536203.50 .3549355 .0092783 + 536257.38 .3544076 .0093761 + 536311.25 .3623604 .0093907 + 536365.12 .3558397 .0093143 + 536419.19 .3519529 .0091432 + 536473.06 .3495746 .0090795 + 536527.00 .3680406 .0094687 + 536581.06 .3491799 .0090219 + 536635.00 .3635421 .0092729 + 536688.94 .3601559 .0092314 + 536742.88 .3576426 .0090507 + 536796.94 .3668254 .0092189 + 536850.94 .3560874 .0089264 + 536904.88 .3611137 .0090799 + 536959.00 .3522355 .0087709 + 537013.00 .3711731 .0093151 + 537067.00 .3633590 .0092030 + 537121.00 .3611506 .0090952 + 537175.12 .3585797 .0089867 + 537229.12 .3552103 .0088675 + 537283.19 .3509778 .0088613 + 537337.31 .3580633 .0090135 + 537391.38 .3467619 .0088325 + 537445.44 .3431585 .0086641 + 537499.50 .3537797 .0088148 + 537553.69 .3503877 .0087012 + 537607.81 .3455386 .0085901 + 537661.88 .3718230 .0091634 + 537716.06 .3626041 .0089734 + 537770.19 .3549144 .0088297 + 537824.31 .3658247 .0090891 + 537878.56 .3660949 .0092819 + 537932.69 .3578366 .0092745 + 537986.81 .3674025 .0095544 + 538040.94 .3438708 .0091752 + 538095.25 .3611415 .0095820 + 538149.38 .3633482 .0096517 + 538203.56 .3735134 .0097281 + 538257.88 .3574085 .0092325 + 538312.06 .3523505 .0090034 + 538366.25 .3460216 .0088101 + 538420.44 .3559417 .0089907 + 538474.81 .3586741 .0091863 + 538529.00 .3535897 .0090318 + 538583.25 .3449756 .0089119 + 538637.56 .3663132 .0094292 + 538691.81 .3620621 .0092877 + 538746.06 .3598263 .0093514 + 538800.38 .3455743 .0090272 + 538854.75 .3505161 .0090875 + 538909.00 .3547432 .0091300 + 538963.31 .3614259 .0093560 + 539017.69 .3594254 .0091008 + 539072.00 .3611117 .0092418 + 539126.31 .3651628 .0093371 + 539180.62 .3600425 .0091944 + 539235.06 .3730773 .0096786 + 539289.44 .3669796 .0095512 + 539343.75 .3633565 .0093826 + 539398.25 .3641149 .0095807 + 539452.62 .3415382 .0090073 + 539507.00 .3492478 .0092629 + 539561.38 .3483741 .0092660 + 539615.88 .3377285 .0090100 + 539670.25 .3501037 .0091578 + 539724.62 .3601838 .0091895 + 539779.19 .3585578 .0091200 + 539833.56 .3509354 .0087939 + 539888.00 .3596932 .0090569 + 539942.44 .3614601 .0089822 + 539997.00 .3579491 .0089819 + 540051.44 .3645787 .0090453 + 540105.94 .3399790 .0086038 + 540160.50 .3469949 .0087008 + 540215.00 .3564490 .0090726 + 540269.50 .3583209 .0090856 + 540323.94 .3603700 .0091583 + 540378.56 .3414692 .0088233 + 540433.06 .3439701 .0089243 + 540487.62 .3654770 .0093750 + 540542.25 .3561596 .0091116 + 540596.75 .3561766 .0090390 + 540651.31 .3435287 .0088289 + 540705.88 .3494115 .0090860 + 540760.56 .3474702 .0090492 + 540815.12 .3620777 .0093014 + 540869.69 .3620740 .0092843 + 540924.38 .3537959 .0089997 + 540979.00 .3602390 .0091874 + 541033.56 .3536248 .0090218 + 541088.31 .3540513 .0089984 + 541142.94 .3602438 .0091545 + 541197.56 .3616977 .0092354 + 541252.19 .3471358 .0088545 + 541306.94 .3512508 .0089975 + 541361.56 .3515691 .0090238 + 541416.25 .3403223 .0088105 + 541471.00 .3566388 .0090985 + 541525.69 .3585852 .0091336 + 541580.38 .3634987 .0091783 + 541635.06 .3638084 .0092495 + 541689.88 .3573121 .0090104 + 541744.62 .3624226 .0091031 + 541799.31 .3616116 .0090630 + 541854.12 .3499611 .0088966 + 541908.88 .3658875 .0092940 + 541963.62 .3738773 .0095046 + 542018.38 .3573101 .0091522 + 542073.25 .3574438 .0091192 + 542128.00 .3437361 .0089020 + 542182.81 .3698864 .0096016 + 542237.69 .3446202 .0089348 + 542292.50 .3613522 .0092491 + 542347.31 .3521031 .0090513 + 542402.12 .3574052 .0090997 + 542457.00 .3575755 .0090703 + 542511.88 .3377594 .0085323 + 542566.69 .3535852 .0088989 + 542621.62 .3506382 .0088724 + 542676.50 .3381674 .0085914 + 542731.38 .3625624 .0092284 + 542786.19 .3550309 .0089705 + 542841.19 .3600581 .0092023 + 542896.06 .3496646 .0087271 + 542951.00 .3429370 .0084840 + 543006.00 .3591371 .0088581 + 543060.88 .3483426 .0085557 + 543115.81 .3449928 .0084807 + 543170.75 .3518832 .0086443 + 543225.81 .3465676 .0084532 + 543280.75 .3393566 .0083408 + 543335.69 .3428569 .0084865 + 543390.75 .3517980 .0086745 + 543445.69 .3690569 .0092340 + 543500.69 .3511634 .0088144 + 543555.69 .3392741 .0086229 + 543610.75 .3645151 .0091533 + 543665.81 .3473766 .0087623 + 543720.81 .3587930 .0089669 + 543775.94 .3358733 .0084606 + 543830.94 .3614762 .0089742 + 543886.00 .3621472 .0089889 + 543941.00 .3341642 .0082873 + 543996.19 .3401774 .0085648 + 544051.25 .3530334 .0087523 + 544106.31 .3323635 .0084331 + 544161.50 .3435776 .0086628 + 544216.56 .3646589 .0091452 + 544271.69 .3515288 .0089295 + 544326.81 .3383673 .0085869 + 544382.00 .3549843 .0088970 + 544437.12 .3655339 .0093484 + 544492.25 .3366213 .0085172 + 544547.50 .3369947 .0085580 + 544602.62 .3610630 .0091105 + 544657.81 .3436529 .0087087 + 544713.06 .3455408 .0087197 + 544768.25 .3541988 .0088823 + 544823.38 .3402460 .0086275 + 544878.56 .3475272 .0088991 + 544933.88 .3380582 .0086646 + 544989.06 .3427931 .0087919 + 545044.31 .3509158 .0090941 + 545099.62 .3397421 .0088453 + 545154.88 .3367215 .0085973 + 545210.12 .3394134 .0087494 + 545265.31 .3449012 .0088140 + 545320.69 .3530323 .0087623 + 545375.94 .3322385 .0085028 + 545431.25 .3403773 .0086053 + 545486.62 .3383589 .0084218 + 545541.94 .3398015 .0084893 + 545597.19 .3380010 .0085446 + 545652.50 .3334536 .0084278 + 545707.94 .3359514 .0084039 + 545763.25 .3362747 .0084760 + 545818.56 .3455888 .0087020 + 545874.00 .3509918 .0089422 + 545929.38 .3318776 .0085966 + 545984.75 .3236034 .0082689 + 546040.06 .3297482 .0083583 + 546095.56 .3518096 .0088181 + 546150.94 .3444359 .0087357 + 546206.31 .3483036 .0089190 + 546261.81 .3235059 .0083595 + 546317.25 .3308032 .0085040 + 546372.69 .3498835 .0089762 + 546428.06 .3376608 .0086887 + 546483.62 .3505121 .0090288 + 546539.06 .3340737 .0086842 + 546594.50 .3388435 .0088347 + 546650.06 .3225371 .0085244 + 546705.50 .3246492 .0083710 + 546761.00 .3438775 .0088505 + 546816.50 .3179608 .0082680 + 546872.06 .3327572 .0086106 + 546927.56 .3298394 .0083868 + 546983.06 .3275087 .0083498 + 547038.69 .3248100 .0082143 + 547094.25 .3305401 .0083665 + 547149.75 .3234487 .0082729 + 547205.31 .3390385 .0085965 + 547260.94 .3485212 .0086396 + 547316.50 .3354934 .0084561 + 547372.06 .3356108 .0084939 + 547427.75 .3490739 .0088449 + 547483.38 .3121124 .0081962 + 547538.94 .3357377 .0087110 + 547594.56 .3375282 .0087715 + 547650.25 .3293577 .0086329 + 547705.88 .3215335 .0083809 + 547761.50 .3300042 .0085687 + 547817.25 .3198463 .0083808 + 547872.88 .3128558 .0081266 + 547928.50 .3245888 .0082605 + 547984.31 .3236111 .0084299 + 548039.94 .3124925 .0081084 + 548095.62 .3261971 .0084816 + 548151.31 .3175950 .0081522 + 548207.12 .3246561 .0085104 + 548262.81 .3178681 .0081955 + 548318.56 .3236041 .0082655 + 548374.38 .3227744 .0083035 + 548430.06 .3099978 .0080010 + 548485.81 .3310679 .0085336 + 548541.56 .3358705 .0084982 + 548597.44 .3221969 .0082284 + 548653.19 .3296525 .0084762 + 548708.94 .3188460 .0081639 + 548764.88 .3206373 .0080425 + 548820.62 .3291027 .0081859 + 548876.44 .3307359 .0083878 + 548932.25 .3119971 .0080528 + 548988.12 .3094471 .0079896 + 549044.00 .3127004 .0081307 + 549099.81 .3139910 .0082045 + 549155.75 .3215626 .0082703 + 549211.62 .3126365 .0080687 + 549267.44 .3308261 .0085029 + 549323.31 .3058367 .0079378 + 549379.31 .3081447 .0079623 + 549435.19 .3171919 .0082158 + 549491.06 .3193554 .0082584 + 549547.06 .2983521 .0079056 + 549603.00 .3139286 .0082485 + 549658.88 .3044972 .0080441 + 549714.81 .3045102 .0081326 + 549770.88 .3171946 .0085775 + 549826.81 .2959264 .0080093 + 549882.75 .3194274 .0085677 + 549938.81 .3141896 .0084522 + 549994.75 .3102307 .0084556 + 550050.75 .3066388 .0081839 + 550106.75 .3003629 .0080639 + 550162.81 .3164198 .0084967 + 550218.81 .3176495 .0084998 + 550274.81 .3019025 .0080194 + 550330.94 .2957402 .0080347 + 550387.00 .2894348 .0077524 + 550443.00 .2972099 .0079276 + 550499.06 .3058941 .0082009 + 550555.25 .3120038 .0082959 + 550611.31 .2902514 .0078249 + 550667.38 .3033167 .0079985 + 550723.56 .3088244 .0081170 + 550779.62 .3051335 .0080472 + 550835.69 .2953958 .0077782 + 550891.81 .2945586 .0076580 + 550948.06 .3050805 .0079113 + 551004.19 .2978421 .0077472 + 551060.31 .2885881 .0075507 + 551116.56 .2869220 .0075017 + 551172.69 .3014306 .0078918 + 551228.81 .3040095 .0078805 + 551285.12 .2801384 .0074352 + 551341.25 .3063438 .0079217 + 551397.44 .2874043 .0075668 + 551453.62 .2819922 .0074977 + 551509.94 .2770753 .0074083 + 551566.19 .2837551 .0074778 + 551622.38 .2839632 .0074964 + 551678.69 .2748837 .0073315 + 551734.94 .2904423 .0076458 + 551791.19 .2895964 .0077022 + 551847.44 .2799893 .0074915 + 551903.81 .2838551 .0075284 + 551960.06 .2775271 .0074313 + 552016.31 .2653856 .0071723 + 552072.75 .2745652 .0075091 + 552129.00 .2793746 .0076443 + 552185.31 .2594816 .0071975 + 552241.62 .2489735 .0069852 + 552298.06 .2655880 .0074149 + 552354.38 .2706066 .0075209 + 552410.69 .2579300 .0072096 + 552467.19 .2546997 .0071681 + 552523.50 .2586820 .0073154 + 552579.88 .2587917 .0072197 + 552636.25 .2474083 .0070585 + 552692.75 .2590475 .0073559 + 552749.12 .2564607 .0072372 + 552805.50 .2527647 .0072035 + 552862.00 .2549729 .0072615 + 552918.44 .2422023 .0070243 + 552974.88 .2572325 .0073942 + 553031.31 .2478842 .0070761 + 553087.81 .2443152 .0069774 + 553144.31 .2492470 .0069901 + 553200.75 .2446934 .0068896 + 553257.31 .2491038 .0069080 + 553313.81 .2385419 .0066073 + 553370.25 .2423658 .0067508 + 553426.75 .2399779 .0067930 + 553483.38 .2413193 .0067489 + 553539.88 .2464071 .0068649 + 553596.38 .2399736 .0066419 + 553653.06 .2513820 .0068401 + 553709.56 .2580780 .0070962 + 553766.12 .2537529 .0068666 + 553822.69 .2483169 .0067778 + 553879.31 .2464335 .0066549 + 553935.88 .2486901 .0067456 + 553992.50 .2414223 .0065746 + 554049.19 .2410473 .0066099 + 554105.75 .2431888 .0066542 + 554162.38 .2368809 .0065835 + 554219.00 .2515712 .0069290 + 554275.69 .2307633 .0064305 + 554332.31 .2404240 .0066616 + 554389.00 .2379326 .0066006 + 554445.75 .2286198 .0064235 + 554502.38 .2392268 .0066435 + 554559.06 .2399329 .0065942 + 554615.75 .2445613 .0067710 + 554672.50 .2502334 .0069013 + 554729.19 .2257623 .0063905 + 554785.94 .2272509 .0064089 + 554842.75 .2311433 .0066141 + 554899.44 .2324480 .0066960 + 554956.19 .2267351 .0064896 + 555013.00 .2352782 .0067198 + 555069.75 .2263891 .0065364 + 555126.50 .2467788 .0068843 + 555183.25 .2313294 .0065438 + 555240.12 .2120616 .0060929 + 555296.94 .2305538 .0064418 + 555353.69 .2155237 .0060764 + 555410.62 .2340000 .0064673 + 555467.44 .2262941 .0062784 + 555524.25 .2282496 .0064894 + 555581.06 .2232884 .0064289 + 555638.00 .2213544 .0064237 + 555694.81 .2159184 .0063525 + 555751.69 .2241658 .0065324 + 555808.62 .2249786 .0066082 + 555865.50 .2174871 .0064602 + 555922.38 .2163320 .0064693 + 555979.25 .2014636 .0061082 + 556036.25 .2027112 .0062520 + 556093.12 .2124549 .0063506 + 556150.06 .2091542 .0062804 + 556207.06 .2146856 .0063639 + 556264.00 .2017151 .0060981 + 556320.94 .2191988 .0065559 + 556377.88 .2019794 .0060824 + 556434.94 .2036007 .0061855 + 556491.94 .1984792 .0061269 + 556548.88 .2015084 .0061583 + 556606.00 .2066109 .0062107 + 556662.94 .2029137 .0061348 + 556719.94 .1928855 .0058185 + 556776.94 .1872668 .0056717 + 556834.06 .1978303 .0059003 + 556891.12 .1910379 .0057918 + 556948.12 .1893932 .0058357 + 557005.31 .1898596 .0057577 + 557062.31 .1864548 .0056778 + 557119.38 .1919953 .0058671 + 557176.44 .1854838 .0057612 + 557233.62 .1887710 .0058101 + 557290.75 .1823364 .0056728 + 557347.81 .1832868 .0056746 + 557405.00 .1848426 .0056810 + 557462.12 .1831980 .0056756 + 557519.25 .1707919 .0054115 + 557576.38 .1751517 .0054706 + 557633.62 .1713377 .0054035 + 557690.75 .1681181 .0052990 + 557747.94 .1638964 .0053096 + 557805.19 .1804516 .0057114 + 557862.38 .1612604 .0052280 + 557919.56 .1710167 .0054749 + 557976.75 .1766655 .0056608 + 558034.06 .1649523 .0053042 + 558091.25 .1617611 .0053277 + 558148.50 .1521740 .0050849 + 558205.81 .1643877 .0054467 + 558263.06 .1623881 .0053551 + 558320.25 .1633437 .0054458 + 558377.62 .1531846 .0052081 + 558434.88 .1486778 .0050351 + 558492.19 .1444417 .0049600 + 558549.44 .1469579 .0049894 + 558606.81 .1514274 .0051612 + 558664.12 .1485430 .0051663 + 558721.44 .1493609 .0052305 + 558778.88 .1412292 .0051529 + 558836.19 .1363707 .0050244 + 558893.50 .1403873 .0050975 + 558950.88 .1394202 .0051248 + 559008.31 .1289335 .0048479 + 559065.69 .1427898 .0051986 + 559123.06 .1317268 .0048675 + 559180.50 .1285118 .0047784 + 559237.88 .1262363 .0048049 + 559295.31 .1212153 .0046621 + 559352.69 .1233533 .0046284 + 559410.19 .1267701 .0047430 + 559467.62 .1205705 .0045686 + 559525.06 .1126636 .0043751 + 559582.62 .1185877 .0043794 + 559640.06 .1239395 .0045887 + 559697.50 .1115137 .0042812 + 559754.94 .1118642 .0042825 + 559812.56 .1069544 .0042092 + 559870.00 .1104723 .0042888 + 559927.50 .1036051 .0040285 + 559985.12 .1012553 .0039331 + 560042.62 .1031446 .0040016 + 560100.12 .0978853 .0038227 + 560157.69 .1017796 .0039651 + 560215.31 .1015198 .0039190 + 560272.88 .0944445 .0037333 + 560330.44 .0948098 .0037741 + 560388.06 .1006370 .0039716 + 560445.62 .0959779 .0038796 + 560503.25 .0873286 .0036574 + 560560.81 .0898947 .0037775 + 560618.50 .0834331 .0035784 + 560676.12 .0824872 .0035817 + 560733.75 .0828419 .0036190 + 560791.50 .0836490 .0036114 + 560849.12 .0809012 .0035292 + 560906.75 .0808002 .0035726 + 560964.38 .0736618 .0033604 + 561022.19 .0750278 .0034135 + 561079.81 .0797661 .0035862 + 561137.50 .0696449 .0032625 + 561195.31 .0721619 .0033767 + 561253.00 .0740219 .0034417 + 561310.69 .0677094 .0032955 + 561368.44 .0659984 .0032568 + 561426.25 .0618001 .0031899 + 561484.00 .0680944 .0034064 + 561541.69 .0611100 .0031991 + 561599.56 .0605206 .0032149 + 561657.31 .0585176 .0031776 + 561715.06 .0562238 .0030810 + 561772.88 .0568745 .0030724 + 561830.75 .0537369 .0029719 + 561888.56 .0494381 .0027764 + 561946.38 .0506522 .0028028 + 562004.25 .0532916 .0029022 + 562062.06 .0492649 .0027947 + 562119.94 .0539402 .0029469 + 562177.88 .0488264 .0027649 + 562235.69 .0451550 .0026925 + 562293.56 .0446574 .0027204 + 562351.44 .0434458 .0026954 + 562409.44 .0442580 .0027092 + 562467.31 .0433045 .0027155 + 562525.19 .0376960 .0025249 + 562583.19 .0396519 .0025903 + 562641.12 .0393065 .0025929 + 562699.00 .0406199 .0026450 + 562756.94 .0334844 .0023903 + 562815.00 .0338139 .0024202 + 562872.94 .0327980 .0023236 + 562930.88 .0350131 .0023806 + 562988.94 .0296109 .0022159 + 563046.94 .0330595 .0023317 + 563104.88 .0331647 .0023073 + 563162.88 .0307885 .0022148 + 563221.00 .0293531 .0020552 + 563279.00 .0291313 .0021512 + 563337.00 .0245460 .0019344 + 563395.19 .0327143 .0022206 + 563453.19 .0289165 .0020977 + 563511.25 .0248465 .0019701 + 563569.31 .0270077 .0020839 + 563627.44 .0279175 .0021435 + 563685.50 .0259589 .0020910 + 563743.62 .0241619 .0020058 + 563801.81 .0236086 .0020118 + 563859.88 .0219470 .0019351 + 563918.00 .0268451 .0021190 + 563976.12 .0232282 .0019332 + 564034.38 .0217294 .0019086 + 564092.50 .0206695 .0018142 + 564150.62 .0189775 .0017838 + 564208.88 .0203318 .0018382 + 564267.06 .0174926 .0017307 + 564325.19 .0143330 .0016006 + 564383.38 .0166750 .0016960 + 564441.69 .0166469 .0016850 + 564499.88 .0184016 .0017972 + 564558.06 .0166273 .0016750 + 564616.44 .0198236 .0017847 + 564674.62 .0154087 .0016560 + 564732.88 .0166955 .0016900 + 564791.12 .0145507 .0015887 + 564849.50 .0168653 .0017409 + 564907.75 .0171260 .0017340 + 564966.00 .0150268 .0016233 + 565024.38 .0114792 .0014570 + 565082.69 .0150291 .0016148 + 565140.94 .0147804 .0016230 + 565199.25 .0144005 .0015721 + 565257.69 .0133039 .0015109 + 565316.00 .0146999 .0016140 + 565374.31 .0160658 .0016657 + 565432.81 .0135211 .0015640 + 565491.12 .0140510 .0015870 + 565549.50 .0097665 .0013875 + 565608.00 .0142022 .0016138 + 565666.38 .0130759 .0015608 + 565724.75 .0140655 .0015886 + 565783.12 .0130861 .0015519 + 565841.62 .0095773 .0013856 + 565900.06 .0121814 .0015137 + 565958.50 .0107173 .0014349 + 566017.00 .0124224 .0015775 + 566075.44 .0117672 .0015161 + 566133.94 .0121222 .0015621 + 566192.38 .0139769 .0016071 + 566250.94 .0108127 .0015099 + 566309.44 .0151314 .0016903 + 566367.88 .0110419 .0014907 + 566426.50 .0146882 .0016794 + 566485.00 .0125541 .0015493 + 566543.50 .0144667 .0016247 + 566602.06 .0159229 .0017209 + 566660.69 .0134390 .0015737 + 566719.25 .0132542 .0015422 + 566777.75 .0128628 .0015251 + 566836.44 .0138043 .0015496 + 566895.00 .0114197 .0014599 + 566953.56 .0124522 .0014856 + 567012.19 .0130323 .0015256 + 567070.88 .0127581 .0015125 + 567129.50 .0154590 .0016100 + 567188.06 .0145330 .0015864 + 567246.81 .0154064 .0016045 + 567305.44 .0130349 .0015070 + 567364.06 .0170319 .0016765 + 567422.75 .0165668 .0016302 + 567481.50 .0175607 .0016839 + 567540.19 .0170410 .0016699 + 567598.88 .0157093 .0016120 + 567657.62 .0181972 .0017022 + 567716.31 .0166362 .0016522 + 567775.06 .0194518 .0018136 + 567833.75 .0170570 .0017184 + 567892.56 .0185620 .0017585 + 567951.31 .0185154 .0017843 + 568010.06 .0163023 .0016735 + 568068.94 .0214031 .0018723 + 568127.69 .0196438 .0017955 + 568186.44 .0194718 .0017936 + 568245.19 .0261010 .0020351 + 568304.12 .0234296 .0019373 + 568362.88 .0192862 .0017834 + 568421.69 .0250101 .0020128 + 568480.62 .0209867 .0018487 + 568539.44 .0251316 .0020045 + 568598.31 .0223459 .0019086 + 568657.12 .0214467 .0018762 + 568716.06 .0269353 .0021135 + 568774.94 .0249228 .0019875 + 568833.81 .0279740 .0021415 + 568892.81 .0255351 .0020311 + 568951.69 .0283032 .0021672 + 569010.56 .0289047 .0021903 + 569069.56 .0303132 .0022062 + 569128.50 .0302694 .0021867 + 569187.44 .0273055 .0021127 + 569246.38 .0297251 .0021518 + 569305.44 .0307811 .0021669 + 569364.38 .0325583 .0022286 + 569423.31 .0338682 .0022905 + 569482.38 .0317120 .0022444 + 569541.38 .0341202 .0022837 + 569600.38 .0337589 .0022977 + 569659.38 .0411007 .0025915 + 569718.50 .0341766 .0023576 + 569777.50 .0377904 .0024896 + 569836.50 .0429949 .0026755 + 569895.62 .0341608 .0023885 + 569954.69 .0368925 .0024639 + 570013.75 .0425665 .0025974 + 570072.81 .0397702 .0024869 + 570132.00 .0402146 .0025155 + 570191.06 .0454369 .0026617 + 570250.12 .0422882 .0025888 + 570309.38 .0474953 .0027023 + 570368.44 .0535074 .0028602 + 570427.56 .0444587 .0026108 + 570486.69 .0494872 .0027241 + 570545.94 .0531465 .0027897 + 570605.12 .0500910 .0027321 + 570664.25 .0535471 .0028699 + 570723.50 .0538248 .0028161 + 570782.69 .0538784 .0028622 + 570841.88 .0519777 .0028160 + 570901.06 .0538946 .0028855 + 570960.38 .0513157 .0028443 + 571019.56 .0608212 .0031479 + 571078.81 .0590343 .0030738 + 571138.12 .0578924 .0030456 + 571197.38 .0593088 .0030588 + 571256.62 .0613486 .0031023 + 571315.88 .0659589 .0032331 + 571375.25 .0639403 .0031603 + 571434.50 .0655539 .0031951 + 571493.81 .0618370 .0030651 + 571553.19 .0701627 .0033570 + 571612.50 .0681009 .0032736 + 571671.81 .0698036 .0033154 + 571731.12 .0671243 .0032046 + 571790.56 .0681243 .0032952 + 571849.88 .0671567 .0032563 + 571909.25 .0697413 .0032731 + 571968.69 .0802290 .0035855 + 572028.06 .0747910 .0034656 + 572087.44 .0783317 .0035364 + 572146.81 .0749633 .0034099 + 572206.31 .0802107 .0035027 + 572265.75 .0776015 .0034860 + 572325.12 .0882499 .0037263 + 572384.69 .0834480 .0036772 + 572444.12 .0833979 .0036290 + 572503.56 .0859847 .0036881 + 572563.00 .0824732 .0036074 + 572622.56 .0901176 .0037783 + 572682.00 .0969397 .0039372 + 572741.50 .0888509 .0037303 + 572801.06 .0867411 .0037107 + 572860.56 .1029872 .0041313 + 572920.06 .0951926 .0038820 + 572979.69 .0997788 .0039975 + 573039.25 .0911586 .0037097 + 573098.75 .0924258 .0037646 + 573158.31 .0923112 .0037759 + 573217.94 .1045097 .0041307 + 573277.50 .0977161 .0039146 + 573337.06 .0959002 .0038962 + 573396.75 .0911695 .0037922 + 573456.38 .1016684 .0040185 + 573515.94 .1124913 .0043059 + 573575.56 .1045349 .0040268 + 573635.31 .1055396 .0040530 + 573694.94 .1053205 .0040901 + 573754.56 .1080443 .0040375 + 573814.31 .1112697 .0041623 + 573873.94 .1094797 .0041416 + 573933.62 .1178212 .0043587 + 573993.31 .1094585 .0041558 + 574053.06 .1158043 .0043176 + 574112.75 .1135732 .0042477 + 574172.44 .1216063 .0044160 + 574232.31 .1182218 .0043403 + 574292.00 .1108737 .0041586 + 574351.75 .1286098 .0045510 + 574411.44 .1314308 .0045359 + 574471.31 .1169234 .0042118 + 574531.06 .1152805 .0041547 + 574590.81 .1320525 .0045793 + 574650.75 .1205037 .0042364 + 574710.50 .1241560 .0043779 + 574770.31 .1335417 .0045711 + 574830.12 .1256320 .0043919 + 574890.00 .1315935 .0045935 + 574949.88 .1360546 .0046783 + 575009.69 .1361340 .0046569 + 575069.62 .1378317 .0046740 + 575129.50 .1331749 .0045295 + 575189.31 .1347311 .0046332 + 575249.19 .1255897 .0044533 + 575309.19 .1316416 .0046160 + 575369.06 .1428897 .0047697 + 575428.94 .1494712 .0050383 + 575489.00 .1389669 .0046392 + 575548.88 .1445921 .0047852 + 575608.81 .1400650 .0047025 + 575668.75 .1489231 .0048831 + 575728.81 .1485094 .0048496 + 575788.75 .1476497 .0048188 + 575848.69 .1522297 .0049415 + 575908.81 .1545537 .0050309 + 575968.75 .1699323 .0053650 + 576028.75 .1475164 .0048222 + 576088.75 .1555491 .0050206 + 576148.88 .1506186 .0048901 + 576208.88 .1626339 .0050869 + 576268.94 .1512355 .0048656 + 576329.06 .1542180 .0049230 + 576389.12 .1709612 .0053296 + 576449.19 .1622018 .0051112 + 576509.38 .1569513 .0049636 + 576569.44 .1656829 .0052024 + 576629.50 .1694686 .0052780 + 576689.56 .1729801 .0053634 + 576749.81 .1665771 .0052156 + 576809.94 .1686913 .0052749 + 576870.06 .1672271 .0052341 + 576930.25 .1670391 .0051922 + 576990.44 .1733967 .0053877 + 577050.56 .1770630 .0054680 + 577110.75 .1799347 .0055286 + 577171.00 .1742303 .0054125 + 577231.19 .1644480 .0051675 + 577291.38 .1837267 .0056224 + 577351.69 .1803312 .0055007 + 577411.88 .1684166 .0053098 + 577472.06 .1749939 .0054168 + 577532.31 .1852595 .0056468 + 577592.69 .1702684 .0053438 + 577652.88 .1828114 .0056683 + 577713.12 .1957388 .0059867 + 577773.50 .1843021 .0057157 + 577833.81 .1845959 .0056948 + 577894.06 .1844090 .0056357 + 577954.38 .1845268 .0055787 + 578014.75 .1843879 .0055876 + 578075.06 .1961599 .0059678 + 578135.38 .1818772 .0055085 + 578195.88 .1968264 .0058028 + 578256.19 .1984197 .0059096 + 578316.50 .1922796 .0056785 + 578376.88 .1976893 .0059911 + 578437.38 .1945415 .0059003 + 578497.75 .2031580 .0061132 + 578558.12 .1806652 .0056230 + 578618.62 .2062223 .0061174 + 578679.00 .2013161 .0059909 + 578739.44 .2005333 .0059745 + 578799.88 .1972738 .0059324 + 578860.44 .1889055 .0057052 + 578920.88 .2008675 .0058968 + 578981.31 .2056737 .0059101 + 579041.88 .1985100 .0058024 + 579102.31 .2047540 .0059349 + 579162.81 .1945901 .0056345 + 579223.31 .2114951 .0060587 + 579283.94 .2077681 .0059170 + 579344.44 .2143712 .0060721 + 579404.94 .1971447 .0056820 + 579465.56 .2019948 .0057406 + 579526.12 .2118673 .0060061 + 579586.69 .2097525 .0060096 + 579647.19 .2034556 .0059576 + 579707.88 .2077900 .0059390 + 579768.44 .2161579 .0062823 + 579829.06 .2123362 .0062067 + 579889.75 .2132703 .0061779 + 579950.38 .2212616 .0063517 + 580011.00 .2161481 .0061837 + 580071.56 .2102930 .0059911 + 580132.31 .2163404 .0061570 + 580193.00 .2244912 .0062236 + 580253.62 .2163991 .0060734 + 580314.38 .2228334 .0062217 + 580375.06 .2235510 .0061599 + 580435.75 .2250245 .0061540 + 580496.56 .2152875 .0059615 + 580557.25 .2181296 .0059874 + 580617.94 .2175899 .0059788 + 580678.69 .2180584 .0060434 + 580739.50 .2230537 .0060928 + 580800.25 .2310177 .0062390 + 580861.00 .2276091 .0061359 + 580921.88 .2350179 .0063656 + 580982.62 .2214769 .0059829 + 581043.38 .2357249 .0063958 + 581104.19 .2312586 .0063569 + 581165.06 .2329690 .0064401 + 581225.88 .2271794 .0063171 + 581286.69 .2412296 .0064906 + 581347.62 .2392736 .0063946 + 581408.44 .2380214 .0063564 + 581469.31 .2350347 .0063446 + 581530.12 .2370795 .0063276 + 581591.12 .2369694 .0062674 + 581652.00 .2426860 .0065056 + 581712.88 .2472226 .0065591 + 581773.88 .2412362 .0065755 + 581834.75 .2348535 .0064041 + 581895.69 .2434976 .0064765 + 581956.62 .2454584 .0065265 + 582017.62 .2389850 .0063633 + 582078.56 .2388549 .0063753 + 582139.50 .2391913 .0063252 + 582200.56 .2363890 .0061993 + 582261.56 .2535199 .0065764 + 582322.50 .2543979 .0065979 + 582383.50 .2535429 .0066716 + 582444.62 .2562813 .0066432 + 582505.62 .2443456 .0064494 + 582566.62 .2487371 .0065313 + 582627.75 .2551204 .0066444 + 582688.81 .2527189 .0066839 + 582749.88 .2560713 .0067776 + 582810.88 .2559265 .0067781 + 582872.06 .2501573 .0066110 + 582933.12 .2464254 .0065268 + 582994.25 .2580602 .0067214 + 583055.44 .2676972 .0069164 + 583116.50 .2568598 .0067347 + 583177.62 .2503556 .0065564 + 583238.75 .2515689 .0066119 + 583300.00 .2571265 .0066872 + 583361.12 .2528194 .0065725 + 583422.31 .2583708 .0067166 + 583483.56 .2590326 .0067617 + 583544.75 .2669797 .0068761 + 583605.88 .2602549 .0067509 + 583667.06 .2696147 .0069514 + 583728.38 .2668625 .0069009 + 583789.62 .2655005 .0069371 + 583850.81 .2664356 .0068819 + 583912.12 .2756338 .0070235 + 583973.38 .2678768 .0068195 + 584034.62 .2695590 .0069497 + 584096.00 .2788621 .0070785 + 584157.25 .2731706 .0069648 + 584218.56 .2704208 .0068883 + 584279.81 .2792138 .0070950 + 584341.25 .2643780 .0067942 + 584402.50 .2775316 .0070702 + 584463.81 .2641726 .0068192 + 584525.25 .2741799 .0070909 + 584586.62 .2773201 .0070470 + 584647.94 .2879614 .0072302 + 584709.31 .2718794 .0069390 + 584770.75 .2796054 .0070635 + 584832.12 .2742920 .0069112 + 584893.50 .2877156 .0072215 + 584955.00 .2786540 .0070493 + 585016.44 .2790277 .0071019 + 585077.81 .2791850 .0072035 + 585139.25 .2897631 .0073231 + 585200.81 .2940860 .0074937 + 585262.25 .2678804 .0068624 + 585323.69 .2723393 .0069097 + 585385.25 .2858717 .0072633 + 585446.69 .2902748 .0072870 + 585508.19 .2778355 .0071216 + 585569.69 .2842365 .0072560 + 585631.25 .2890674 .0073308 + 585692.75 .2759226 .0071758 + 585754.31 .2814171 .0072105 + 585815.94 .2879735 .0073174 + 585877.44 .2807153 .0071206 + 585939.00 .2871525 .0072853 + 586000.56 .2816662 .0071877 + 586062.25 .2847215 .0072577 + 586123.81 .2764614 .0072777 + 586185.38 .2762240 .0073014 + 586247.12 .2772805 .0074972 + 586308.69 .2808556 .0077487 + 586370.31 .2813524 .0077467 + 586431.94 .2671063 .0075212 + 586493.69 .2658014 .0075699 + 586555.31 .2487551 .0071844 + 586617.00 .2380142 .0069016 + 586678.75 .2299249 .0067278 + 586740.44 .2101862 .0062869 + 586802.12 .1894539 .0059379 + 586863.81 .1813019 .0057499 + 586925.62 .1584584 .0054745 + 586987.31 .1343158 .0050152 + 587049.06 .1083130 .0044723 + 587110.88 .0878556 .0040298 + 587172.62 .0885523 .0040748 + 587234.38 .0904713 .0041763 + 587296.12 .1152103 .0046355 + 587358.00 .1335243 .0050727 + 587419.75 .1595955 .0055465 + 587481.56 .1920366 .0061293 + 587543.50 .2224632 .0067196 + 587605.31 .2491124 .0071670 + 587667.12 .2618383 .0072834 + 587729.06 .2765219 .0075333 + 587790.88 .2865382 .0077462 + 587852.75 .2974580 .0077843 + 587914.56 .3005592 .0078630 + 587976.56 .2947010 .0077055 + 588038.44 .3139168 .0081368 + 588100.31 .3010274 .0078020 + 588162.31 .3217490 .0081526 + 588224.25 .3323103 .0082708 + 588286.12 .3323644 .0082015 + 588348.06 .3307678 .0080164 + 588410.12 .3456254 .0083349 + 588472.06 .3406576 .0081371 + 588534.00 .3483509 .0080832 + 588596.12 .3536056 .0081812 + 588658.06 .3608707 .0082424 + 588720.06 .3762049 .0085789 + 588782.06 .3655382 .0083187 + 588844.19 .3711476 .0083691 + 588906.19 .3643331 .0082650 + 588968.19 .3996630 .0089545 + 589030.31 .3958527 .0088155 + 589092.38 .4067958 .0090811 + 589154.44 .4155697 .0094035 + 589216.50 .4064117 .0091136 + 589278.69 .4376888 .0096929 + 589340.75 .4274420 .0094573 + 589402.88 .4423640 .0097198 + 589465.06 .4740843 .0101281 + 589527.19 .4719400 .0099428 + 589589.31 .4957976 .0104751 + 589651.44 .5136235 .0107079 + 589713.69 .5403130 .0112109 + 589775.81 .5639410 .0115402 + 589838.00 .5673407 .0114871 + 589900.25 .5766004 .0116873 + 589962.44 .5583624 .0114056 + 590024.62 .5610037 .0115693 + 590086.81 .5240091 .0109216 + 590149.19 .4706135 .0101246 + 590211.38 .4128990 .0092037 + 590273.62 .3468889 .0082252 + 590335.94 .2973789 .0074421 + 590398.19 .2397645 .0063884 + 590460.44 .2074160 .0059411 + 590522.75 .1842381 .0054473 + 590585.12 .1627925 .0050067 + 590647.44 .1685299 .0051402 + 590709.69 .1697893 .0051349 + 590772.12 .1718632 .0051772 + 590834.44 .1795797 .0052815 + 590896.75 .1770779 .0052841 + 590959.12 .1839640 .0053161 + 591021.56 .1901995 .0055462 + 591083.94 .1920784 .0055063 + 591146.31 .1968742 .0056434 + 591208.81 .2012608 .0057778 + 591271.19 .2111837 .0060016 + 591333.56 .2076817 .0058599 + 591396.00 .2178471 .0060775 + 591458.50 .2200430 .0060139 + 591520.94 .2149584 .0059114 + 591583.38 .2261660 .0061058 + 591645.94 .2188462 .0058666 + 591708.38 .2279407 .0061410 + 591770.88 .2352082 .0062141 + 591833.44 .2458252 .0064374 + 591895.94 .2399318 .0063759 + 591958.44 .2597043 .0066558 + 592020.94 .2487266 .0064247 + 592083.56 .2485344 .0064070 + 592146.06 .2485315 .0064294 + 592208.62 .2492001 .0064538 + 592271.31 .2562776 .0066152 + 592333.81 .2489812 .0064778 + 592396.38 .2638759 .0068258 + 592459.00 .2533551 .0065210 + 592521.69 .2553016 .0066340 + 592584.25 .2642255 .0068221 + 592646.88 .2618076 .0067877 + 592709.62 .2506389 .0066077 + 592772.25 .2551033 .0066705 + 592834.88 .2670087 .0068319 + 592897.50 .2551274 .0066164 + 592960.25 .2576751 .0066231 + 593022.94 .2623934 .0067079 + 593085.62 .2653272 .0067747 + 593148.44 .2747608 .0068657 + 593211.12 .2733399 .0068597 + 593273.81 .2799191 .0069624 + 593336.50 .2692217 .0067679 + 593399.38 .2768372 .0069689 + 593462.12 .2706718 .0068204 + 593524.81 .2716408 .0068982 + 593587.69 .2748873 .0069737 + 593650.50 .2648089 .0067761 + 593713.25 .2666003 .0067729 + 593776.00 .2780774 .0070308 + 593838.94 .2772405 .0069806 + 593901.75 .2803228 .0069696 + 593964.56 .2847850 .0070764 + 594027.50 .2844090 .0071219 + 594090.31 .2793159 .0069874 + 594153.19 .2927082 .0072285 + 594216.00 .2856955 .0071294 + 594279.00 .2788663 .0069641 + 594341.88 .2847054 .0070421 + 594404.75 .2771473 .0068839 + 594467.75 .2828503 .0069532 + 594530.69 .2767740 .0067899 + 594593.56 .2860748 .0069971 + 594656.50 .2832268 .0068846 + 594719.56 .2957420 .0071495 + 594782.50 .2897236 .0069884 + 594845.44 .2833573 .0069437 + 594908.50 .2896042 .0071191 + 594971.50 .2801892 .0069083 + 595034.50 .2910379 .0072112 + 595097.50 .2819915 .0071149 + 595160.62 .2857313 .0071634 + 595223.62 .2851709 .0071958 + 595286.62 .2939116 .0073901 + 595349.81 .2960439 .0074262 + 595412.81 .2850368 .0072557 + 595475.88 .3032493 .0076170 + 595539.06 .2976202 .0073344 + 595602.12 .2965940 .0072369 + 595665.19 .3050362 .0074039 + 595728.31 .2888460 .0069516 + 595791.50 .2980690 .0071245 + 595854.62 .2913029 .0069800 + 595917.75 .2890413 .0069692 + 595981.00 .2971295 .0071512 + 596044.12 .2908902 .0070527 + 596107.31 .3027347 .0073500 + 596170.50 .3020245 .0074020 + 596233.75 .2933162 .0071311 + 596296.94 .3131818 .0075560 + 596360.12 .3123569 .0076020 + 596423.44 .2947246 .0072165 + 596486.69 .2756213 .0067933 + 596549.88 .2949728 .0072250 + 596613.12 .2963783 .0073282 + 596676.50 .3040013 .0074601 + 596739.75 .2881640 .0071313 + 596803.00 .2868344 .0070714 + 596866.38 .2941964 .0072771 + 596929.69 .3048270 .0074927 + 596993.00 .2893459 .0071304 + 597056.25 .2974502 .0072341 + 597119.69 .3004259 .0073504 + 597183.06 .2950961 .0072795 + 597246.38 .3124115 .0074694 + 597309.81 .2869530 .0070762 + 597373.19 .2916206 .0071294 + 597436.56 .3124344 .0075678 + 597499.94 .3017868 .0073089 + 597563.44 .3050203 .0074982 + 597626.81 .2974857 .0072852 + 597690.25 .3080295 .0074218 + 597753.75 .3026137 .0073056 + 597817.19 .3022835 .0074108 + 597880.62 .2942884 .0073261 + 597944.06 .3145360 .0077075 + 598007.62 .2989707 .0073688 + 598071.12 .2969635 .0073825 + 598134.56 .3152972 .0078042 + 598198.19 .3207250 .0078416 + 598261.69 .3193196 .0078315 + 598325.19 .3068462 .0074524 + 598388.69 .3171906 .0076306 + 598452.38 .3062792 .0074277 + 598515.88 .3036994 .0073730 + 598579.44 .3102770 .0075853 + 598643.12 .3193234 .0076608 + 598706.69 .3158526 .0075506 + 598770.25 .3104962 .0074366 + 598833.81 .3149686 .0075750 + 598897.56 .3043722 .0073993 + 598961.19 .3114223 .0075739 + 599024.75 .3271903 .0079142 + 599088.50 .3095335 .0075610 + 599152.19 .3075776 .0076403 + 599215.81 .3103472 .0075962 + 599279.44 .3229522 .0078513 + 599343.25 .3012953 .0074104 + 599406.94 .3126043 .0075857 + 599470.62 .3110281 .0075394 + 599534.44 .3183627 .0076941 + 599598.12 .3221123 .0077266 + 599661.88 .3148596 .0075409 + 599725.69 .3079336 .0073414 + 599789.44 .3182009 .0075926 + 599853.19 .3109212 .0075552 + 599916.94 .3198506 .0077189 + 599980.88 .3105588 .0075247 + 600044.62 .3190343 .0077646 + 600108.44 .3284714 .0079314 + 600172.38 .3149613 .0076236 + 600236.12 .3052450 .0073308 + 600300.00 .3146109 .0074949 + 600363.81 .3209292 .0076202 + 600427.75 .3132700 .0073684 + 600491.62 .3265332 .0075915 + 600555.50 .3240671 .0076565 + 600619.50 .3116558 .0073785 + 600683.38 .3189020 .0074865 + 600747.25 .3306685 .0077331 + 600811.12 .3043847 .0072601 + 600875.19 .3218586 .0075803 + 600939.12 .3077201 .0073409 + 601003.00 .3091556 .0073824 + 601067.12 .3181123 .0075458 + 601131.06 .3188380 .0075495 + 601195.00 .3182680 .0075106 + 601259.00 .3243334 .0076068 + 601323.06 .3199129 .0075197 + 601387.06 .3175316 .0074807 + 601451.06 .3165942 .0074994 + 601515.25 .3241441 .0076545 + 601579.25 .3048662 .0073382 + 601643.25 .3143508 .0075491 + 601707.31 .3173754 .0075102 + 601771.50 .3196039 .0077147 + 601835.56 .3274838 .0078508 + 601899.62 .3181027 .0076378 + 601963.88 .3292089 .0077650 + 602027.94 .2952760 .0071598 + 602092.06 .2916130 .0071794 + 602156.19 .2972583 .0072315 + 602220.44 .2670869 .0066943 + 602284.56 .2479738 .0064232 + 602348.69 .2252445 .0060394 + 602413.00 .2128570 .0057422 + 602477.12 .2155314 .0057916 + 602541.31 .2170995 .0058455 + 602605.50 .2308389 .0060659 + 602669.81 .2522257 .0063823 + 602734.06 .2699346 .0066755 + 602798.25 .2795219 .0067895 + 602862.62 .3079474 .0072480 + 602926.88 .3086704 .0074103 + 602991.12 .3223473 .0075695 + 603055.38 .3088889 .0073804 + 603119.75 .3266957 .0076277 + 603184.06 .3269558 .0076202 + 603248.31 .3154023 .0073914 + 603312.75 .3230485 .0076474 + 603377.06 .3147405 .0075600 + 603441.38 .3292503 .0078775 + 603505.81 .3165336 .0076006 + 603570.19 .3080219 .0074742 + 603634.56 .3205216 .0076604 + 603698.88 .3280498 .0079253 + 603763.38 .3181899 .0076359 + 603827.75 .3215553 .0077338 + 603892.19 .3386422 .0080154 + 603956.69 .3305666 .0078222 + 604021.12 .3097468 .0073497 + 604085.56 .3304700 .0076782 + 604150.00 .3358676 .0078630 + 604214.56 .3275100 .0077068 + 604279.00 .3194396 .0074484 + 604343.44 .3355258 .0078196 + 604408.06 .3369856 .0079035 + 604472.56 .3312461 .0078272 + 604537.06 .3400418 .0080703 + 604601.56 .3267679 .0077722 + 604666.19 .3358217 .0079507 + 604730.75 .3392998 .0080652 + 604795.25 .3409352 .0080229 + 604859.94 .3268010 .0077451 + 604924.50 .3310613 .0077957 + 604989.06 .3210935 .0075122 + 605053.62 .3302576 .0077043 + 605118.38 .3389658 .0078671 + 605182.94 .3351492 .0078120 + 605247.56 .3379066 .0078934 + 605312.31 .3277843 .0077309 + 605376.94 .3421438 .0080327 + 605441.56 .3212607 .0075758 + 605506.25 .3334568 .0078540 + 605571.00 .3411401 .0080696 + 605635.69 .3307496 .0077570 + 605700.38 .3355965 .0078527 + 605765.19 .3249633 .0077399 + 605829.88 .3336622 .0079328 + 605894.62 .3266700 .0079008 + 605959.31 .3375687 .0079995 + 606024.19 .3386352 .0081297 + 606088.94 .3186762 .0076425 + 606153.69 .3303680 .0078097 + 606218.56 .3458486 .0080291 + 606283.38 .3219725 .0075257 + 606348.12 .3252601 .0075462 + 606412.94 .3406015 .0078193 + 606477.88 .3432982 .0078873 + 606542.69 .3299779 .0075272 + 606607.50 .3542266 .0080312 + 606672.50 .3263328 .0076377 + 606737.31 .3336771 .0077648 + 606802.19 .3296420 .0077577 + 606867.06 .3270569 .0077024 + 606932.06 .3400493 .0080348 + 606996.94 .3348732 .0080144 + 607061.88 .3348614 .0079995 + 607126.88 .3284639 .0078013 + 607191.81 .3373495 .0080508 + 607256.75 .3418915 .0080934 + 607321.81 .3389750 .0080090 + 607386.75 .3380668 .0078801 + 607451.75 .3409410 .0080498 + 607516.69 .3456563 .0081388 + 607581.81 .3357621 .0078820 + 607646.81 .3246994 .0075531 + 607711.81 .3364918 .0077428 + 607776.94 .3384114 .0077858 + 607842.00 .3415482 .0077755 + 607907.00 .3432249 .0078386 + 607972.06 .3423229 .0077446 + 608037.25 .3358175 .0076719 + 608102.31 .3409462 .0078339 + 608167.44 .3225926 .0075059 + 608232.62 .3217345 .0075821 + 608297.75 .3338234 .0078187 + 608362.81 .3227679 .0075357 + 608427.94 .3420234 .0079851 + 608493.19 .3378066 .0078621 + 608558.38 .3375084 .0078566 + 608623.50 .3418469 .0079394 + 608688.81 .3344460 .0078675 + 608753.94 .3554237 .0082961 + 608819.12 .3426108 .0078923 + 608884.31 .3561713 .0082268 + 608949.69 .3513474 .0081380 + 609014.88 .3451132 .0079685 + 609080.12 .3354732 .0078398 + 609145.50 .3537913 .0081970 + 609210.69 .3392352 .0078691 + 609276.00 .3349932 .0077755 + 609341.25 .3632960 .0084103 + 609406.62 .3416012 .0079625 + 609471.94 .3558987 .0082044 + 609537.25 .3521019 .0080860 + 609602.69 .3312008 .0075551 + 609668.00 .3438086 .0078505 + 609733.31 .3415194 .0077671 + 609798.69 .3397303 .0077265 + 609864.12 .3491625 .0078353 + 609929.50 .3406328 .0076661 + 609994.88 .3522474 .0078877 + 610060.38 .3496032 .0078843 + 610125.75 .3433272 .0078555 + 610191.19 .3429235 .0078087 + 610256.56 .3530767 .0080558 + 610322.12 .3317537 .0076155 + 610387.56 .3341626 .0077647 + 610453.00 .3384240 .0078282 + 610518.62 .3358806 .0078307 + 610584.06 .3532657 .0082100 + 610649.56 .3360559 .0078422 + 610715.06 .3486720 .0080578 + 610780.69 .3511692 .0081992 + 610846.19 .3481642 .0080119 + 610911.69 .3395118 .0079749 + 610977.38 .3290147 .0077089 + 611042.88 .3471589 .0080733 + 611108.44 .3608277 .0082303 + 611174.00 .3503744 .0079621 + 611239.69 .3438561 .0077706 + 611305.31 .3557814 .0081199 + 611370.88 .3468747 .0078717 + 611436.62 .3451857 .0078968 + 611502.25 .3314480 .0076355 + 611567.88 .3426192 .0078286 + 611633.62 .3514023 .0081164 + 611699.25 .3596623 .0083727 + 611764.94 .3303767 .0077493 + 611830.56 .3301271 .0077437 + 611896.38 .3574494 .0083339 + 611962.06 .3563625 .0081714 + 612027.75 .3422889 .0079326 + 612093.62 .3475958 .0079831 + 612159.31 .3460152 .0079520 + 612225.06 .3425925 .0079693 + 612290.81 .3537323 .0082118 + 612356.69 .3685596 .0085302 + 612422.44 .3413726 .0079616 + 612488.25 .3343072 .0077887 + 612554.12 .3582571 .0082391 + 612619.94 .3581344 .0083110 + 612685.75 .3477941 .0079885 + 612751.56 .3442698 .0078398 + 612817.50 .3434873 .0078418 + 612883.31 .3607099 .0081995 + 612949.19 .3549219 .0080757 + 613015.19 .3503954 .0079652 + 613081.06 .3639244 .0083184 + 613146.94 .3496710 .0079844 + 613212.81 .3442040 .0078923 + 613278.81 .3456964 .0079965 + 613344.75 .3534276 .0081801 + 613410.69 .3516369 .0080181 + 613476.75 .3564691 .0082748 + 613542.69 .3450476 .0081021 + 613608.62 .3591037 .0084339 + 613674.62 .3460705 .0082558 + 613740.69 .3494687 .0082944 + 613806.69 .3518693 .0082410 + 613872.69 .3508410 .0082966 + 613938.81 .3550119 .0082804 + 614004.81 .3480047 .0080665 + 614070.88 .3444663 .0080141 + 614136.88 .3559940 .0082151 + 614203.06 .3526321 .0082355 + 614269.12 .3472606 .0080774 + 614335.19 .3530637 .0082855 + 614401.44 .3404220 .0079876 + 614467.50 .3500159 .0081756 + 614533.62 .3602853 .0083675 + 614599.75 .3506875 .0081280 + 614666.00 .3435052 .0080012 + 614732.12 .3603595 .0083794 + 614798.25 .3590802 .0083608 + 614864.56 .3417903 .0080962 + 614930.69 .3612315 .0085195 + 614996.88 .3538082 .0083960 + 615063.06 .3576486 .0085343 + 615129.44 .3615272 .0085074 + 615195.62 .3510297 .0083501 + 615261.88 .3499973 .0083151 + 615328.19 .3517114 .0084564 + 615394.44 .3473039 .0083626 + 615460.69 .3639690 .0086924 + 615527.06 .3496882 .0083255 + 615593.38 .3591057 .0085741 + 615659.62 .3499939 .0083004 + 615725.94 .3481228 .0082711 + 615792.38 .3546655 .0083646 + 615858.69 .3582535 .0084433 + 615925.00 .3549276 .0083561 + 615991.50 .3595124 .0083798 + 616057.81 .3505382 .0082322 + 616124.19 .3371243 .0079405 + 616190.56 .3587214 .0082599 + 616257.06 .3576868 .0083390 + 616323.50 .3601949 .0083664 + 616389.88 .3534848 .0082703 + 616456.44 .3453205 .0080595 + 616522.88 .3537584 .0083508 + 616589.31 .3537392 .0084475 + 616655.75 .3568621 .0084746 + 616722.31 .3564598 .0085021 + 616788.81 .3590734 .0086513 + 616855.25 .3484372 .0082741 + 616921.88 .3576807 .0086254 + 616988.38 .3487235 .0083278 + 617054.88 .3613373 .0085460 + 617121.44 .3506005 .0083116 + 617188.06 .3595743 .0085259 + 617254.62 .3616072 .0085788 + 617321.19 .3442544 .0082488 + 617387.88 .3439116 .0083591 + 617454.44 .3456398 .0083809 + 617521.00 .3644085 .0087698 + 617587.62 .3466779 .0083387 + 617654.38 .3580636 .0084555 + 617721.00 .3665546 .0085297 + 617787.62 .3589689 .0082884 + 617854.38 .3621613 .0083651 + 617921.00 .3654903 .0084861 + 617987.69 .3574080 .0081507 + 618054.38 .3589103 .0083198 + 618121.19 .3649916 .0084071 + 618187.88 .3374767 .0080528 + 618254.56 .3656089 .0085692 + 618321.44 .3552172 .0083555 + 618388.12 .3699635 .0085773 + 618454.88 .3609409 .0084664 + 618521.62 .3600490 .0083044 + 618588.50 .3687418 .0084483 + 618655.31 .3452276 .0079516 + 618722.06 .3519455 .0081069 + 618789.00 .3622158 .0082959 + 618855.81 .3598472 .0084159 + 618922.62 .3637780 .0084640 + 618989.44 .3464006 .0081566 + 619056.38 .3482137 .0081577 + 619123.25 .3560764 .0084407 + 619190.06 .3571547 .0084358 + 619257.06 .3401221 .0081480 + 619323.94 .3588835 .0085617 + 619390.88 .3415271 .0080716 + 619457.75 .3393053 .0080941 + 619524.81 .3507561 .0082453 + 619591.69 .3462888 .0080918 + 619658.62 .3506363 .0081718 + 619725.69 .3524134 .0082816 + 619792.69 .3502449 .0081527 + 619859.62 .3413770 .0080350 + 619926.75 .3374839 .0079856 + 619993.75 .3339195 .0080535 + 620060.75 .3472911 .0082172 + 620127.75 .3290591 .0079449 + 620194.88 .3372690 .0081580 + 620261.94 .3267203 .0080310 + 620328.94 .3294843 .0081378 + 620396.12 .3137615 .0076833 + 620463.19 .3188437 .0079133 + 620530.25 .3337035 .0080622 + 620597.38 .3234396 .0079315 + 620664.56 .3382259 .0081853 + 620731.69 .3314688 .0079297 + 620798.81 .3462609 .0081583 + 620866.06 .3536023 .0083219 + 620933.19 .3478862 .0082080 + 621000.38 .3407407 .0080925 + 621067.50 .3596599 .0084944 + 621134.81 .3598582 .0085428 + 621202.00 .3673456 .0087440 + 621269.19 .3611867 .0086103 + 621336.50 .3535424 .0084224 + 621403.75 .3662159 .0085530 + 621470.94 .3768176 .0089623 + 621538.19 .3769597 .0086803 + 621605.56 .3640149 .0085075 + 621672.81 .3594911 .0084360 + 621740.12 .3789554 .0087678 + 621807.50 .3586537 .0083601 + 621874.81 .3602165 .0083600 + 621942.12 .3558154 .0082760 + 622009.44 .3675277 .0084151 + 622076.88 .3546517 .0081620 + 622144.19 .3604246 .0082219 + 622211.56 .3626953 .0083130 + 622279.06 .3546746 .0082640 + 622346.44 .3707682 .0085214 + 622413.81 .3545841 .0081804 + 622481.19 .3555954 .0083660 + 622548.75 .3640298 .0083670 + 622616.12 .3652753 .0084507 + 622683.56 .3653027 .0085204 + 622751.12 .3592463 .0083963 + 622818.56 .3613431 .0085079 + 622886.00 .3608327 .0085524 + 622953.50 .3705305 .0087053 + 623021.12 .3614853 .0085515 + 623088.56 .3644549 .0085805 + 623156.06 .3638965 .0085358 + 623223.75 .3624751 .0084732 + 623291.25 .3677246 .0086341 + 623358.81 .3677230 .0087229 + 623426.31 .3656395 .0086492 + 623494.00 .3654867 .0085715 + 623561.56 .3669955 .0085149 + 623629.12 .3537712 .0082127 + 623696.88 .3630854 .0083960 + 623764.50 .3650254 .0084231 + 623832.06 .3585955 .0083514 + 623899.81 .3611884 .0083659 + 623967.44 .3603315 .0083066 + 624035.12 .3727547 .0085333 + 624102.75 .3866580 .0088628 + 624170.56 .3742752 .0086923 + 624238.25 .3640121 .0083856 + 624305.94 .3668045 .0084252 + 624373.75 .3728571 .0084901 + 624441.44 .3698015 .0083221 + 624509.19 .3642308 .0082267 + 624576.94 .3635534 .0082539 + 624644.75 .3689700 .0084019 + 624712.56 .3675826 .0083977 + 624780.31 .3797745 .0086840 + 624848.19 .3718728 .0084808 + 624916.00 .3786860 .0087674 + 624983.81 .3727467 .0084670 + 625051.62 .3797449 .0087011 + 625119.56 .3621936 .0081694 + 625187.38 .3664152 .0084474 + 625255.19 .3490483 .0079467 + 625323.19 .3760820 .0087439 + 625391.06 .3752283 .0086988 + 625458.94 .3576718 .0083695 + 625526.81 .3649340 .0084762 + 625594.88 .3639497 .0086328 + 625662.75 .3605776 .0083852 + 625730.69 .3690281 .0086269 + 625798.75 .3647867 .0084665 + 625866.69 .3662362 .0085179 + 625934.62 .3656036 .0085032 + 626002.62 .3831373 .0089212 + 626070.69 .3769839 .0088536 + 626138.69 .3760233 .0088193 + 626206.69 .3744859 .0087984 + 626274.81 .3739699 .0088285 + 626342.81 .3724635 .0088571 + 626410.88 .3766783 .0088318 + 626478.94 .3762209 .0088293 + 626547.06 .3798638 .0088782 + 626615.19 .3702564 .0087182 + 626683.25 .3735823 .0086560 + 626751.44 .3550017 .0083095 + 626819.56 .3660122 .0084948 + 626887.62 .3886845 .0088106 + 626955.75 .3723277 .0083886 + 627024.00 .3573082 .0081270 + 627092.19 .3744569 .0084198 + 627160.31 .3870622 .0087103 + 627228.62 .3808402 .0086141 + 627296.81 .3642895 .0082503 + 627365.00 .3692875 .0083328 + 627433.19 .3626943 .0082255 + 627501.50 .3623358 .0081438 + 627569.75 .3746191 .0084884 + 627637.94 .3736312 .0085138 + 627706.31 .3736897 .0084712 + 627774.56 .3845957 .0087882 + 627842.88 .3679194 .0083681 + 627911.12 .3691291 .0083757 + 627979.56 .3696990 .0084150 + 628047.81 .3698899 .0084188 + 628116.12 .3796599 .0086009 + 628184.62 .3734806 .0084802 + 628252.94 .3841176 .0086614 + 628321.25 .3712115 .0083925 + 628389.75 .3737395 .0084213 + 628458.12 .3750394 .0084173 + 628526.50 .3785154 .0084512 + 628594.88 .3642341 .0081129 + 628663.38 .3599965 .0081003 + 628731.81 .3846508 .0085560 + 628800.25 .3822996 .0085679 + 628868.81 .3667257 .0083055 + 628937.25 .3764555 .0085703 + 629005.69 .3731133 .0084796 + 629074.12 .3787657 .0086156 + 629142.75 .3801202 .0087003 + 629211.25 .3766137 .0086209 + 629279.75 .3765771 .0086461 + 629348.38 .3688767 .0084627 + 629416.88 .3621255 .0083819 + 629485.44 .3665118 .0083752 + 629554.00 .3479445 .0080216 + 629622.69 .3758926 .0086509 + 629691.25 .3698606 .0085268 + 629759.81 .3857489 .0088602 + 629828.50 .3643638 .0082173 + 629897.12 .3642146 .0082968 + 629965.75 .3824273 .0086238 + 630034.38 .3705334 .0084336 + 630103.12 .3596410 .0081966 + 630171.75 .3742714 .0084213 + 630240.44 .3580301 .0080857 + 630309.19 .3797289 .0085629 + 630377.88 .3690396 .0082760 + 630446.56 .3635626 .0082567 + 630515.25 .3638430 .0081638 + 630584.12 .3719944 .0084135 + 630652.88 .3787508 .0086477 + 630721.56 .3825179 .0086932 + 630790.44 .3768912 .0086202 + 630859.19 .3860304 .0088053 + 630928.00 .3844562 .0087719 + 630996.75 .3757377 .0085360 + 631065.69 .3731478 .0084645 + 631134.50 .3719828 .0084516 + 631203.31 .3745954 .0085521 + 631272.25 .3760014 .0085258 + 631341.06 .3771553 .0085225 + 631409.94 .3722247 .0083858 + 631478.81 .3638960 .0082684 + 631547.81 .3812346 .0085824 + 631616.69 .3746335 .0085087 + 631685.56 .3686599 .0083881 + 631754.56 .3706477 .0083357 + 631823.50 .3677459 .0082849 + 631892.44 .3742560 .0083340 + 631961.38 .4005285 .0088249 + 632030.44 .3673095 .0081205 + 632099.44 .3751877 .0083174 + 632168.38 .3821189 .0084039 + 632237.50 .3775927 .0082754 + 632306.50 .3792497 .0083702 + 632375.50 .3839366 .0084016 + 632444.62 .3827337 .0084535 + 632513.69 .3789307 .0083878 + 632582.69 .3808639 .0085436 + 632651.75 .3763535 .0082817 + 632720.94 .3831262 .0084108 + 632790.00 .3738708 .0083187 + 632859.12 .3802490 .0083953 + 632928.31 .3724210 .0083910 + 632997.44 .3748697 .0083566 + 633066.56 .3678897 .0081999 + 633135.69 .3691079 .0083396 + 633204.94 .3865516 .0086754 + 633274.12 .3702648 .0083448 + 633343.25 .3873121 .0086256 + 633412.56 .3839549 .0085720 + 633481.75 .3743964 .0084181 + 633550.94 .3759462 .0083188 + 633620.19 .3699622 .0081732 + 633689.50 .3926211 .0085767 + 633758.75 .3696063 .0082106 + 633828.00 .3693636 .0081721 + 633897.38 .3887422 .0086063 + 633966.62 .3633278 .0082062 + 634035.94 .3744072 .0084853 + 634105.19 .3667769 .0083016 + 634174.62 .3921419 .0088894 + 634243.94 .3701991 .0084432 + 634313.25 .3895438 .0087453 + 634382.75 .3824760 .0088166 + 634452.06 .3840118 .0085735 + 634521.44 .3806740 .0086350 + 634590.81 .3659708 .0082864 + 634660.31 .3916682 .0087774 + 634729.69 .3784317 .0084681 + 634799.12 .3875405 .0086394 + 634868.62 .3708588 .0081761 + 634938.06 .3890888 .0085852 + 635007.50 .3849926 .0084353 + 635076.94 .3864415 .0085079 + 635146.56 .3930479 .0087477 + 635216.00 .3817073 .0083541 + 635285.50 .3853219 .0084586 + 635355.12 .3947836 .0086643 + 635424.62 .3797454 .0083746 + 635494.12 .3879871 .0084907 + 635563.69 .3785498 .0083939 + 635633.31 .3732486 .0083311 + 635702.88 .3911640 .0086782 + 635772.44 .3720472 .0084044 + 635842.19 .3650994 .0081720 + 635911.75 .3849593 .0086536 + 635981.31 .3770050 .0085690 + 636050.94 .3774636 .0085573 + 636120.69 .3808165 .0085882 + 636190.31 .3781822 .0084769 + 636259.94 .3686755 .0082145 + 636329.75 .3556447 .0079345 + 636399.44 .3850166 .0083924 + 636469.06 .3811215 .0083052 + 636538.94 .3910983 .0085368 + 636608.62 .3945508 .0084799 + 636678.31 .3643642 .0079447 + 636748.06 .3753825 .0080290 + 636817.94 .3818942 .0083039 + 636887.62 .3896196 .0084800 + 636957.44 .3746505 .0081972 + 637027.31 .3854994 .0085016 + 637097.06 .3736154 .0082328 + 637166.88 .3689819 .0081841 + 637236.69 .3874000 .0086563 + 637306.62 .3780558 .0084097 + 637376.44 .3820057 .0084330 + 637446.31 .3748643 .0083894 + 637516.25 .3914359 .0086803 + 637586.12 .3907877 .0086377 + 637656.00 .3792428 .0084236 + 637725.88 .3919713 .0087010 + 637795.94 .3973209 .0088489 + 637865.81 .3808645 .0084629 + 637935.75 .3686973 .0082088 + 638005.81 .3726748 .0082337 + 638075.75 .3918701 .0086842 + 638145.69 .3936690 .0086424 + 638215.62 .3804801 .0084869 + 638285.75 .4043766 .0088483 + 638355.75 .3750618 .0081629 + 638425.75 .3865803 .0084562 + 638495.88 .3893218 .0086343 + 638565.88 .3739639 .0083073 + 638635.94 .3743429 .0084128 + 638706.00 .3837322 .0085815 + 638776.19 .3674978 .0081733 + 638846.25 .3860496 .0085199 + 638916.31 .3963684 .0087036 + 638986.50 .3642314 .0080661 + 639056.62 .3788479 .0084232 + 639126.75 .3883121 .0085509 + 639196.88 .3860570 .0085414 + 639267.12 .3728386 .0082875 + 639337.31 .3800311 .0084319 + 639407.44 .3776177 .0083555 + 639477.75 .3881433 .0085440 + 639547.94 .3702318 .0080831 + 639618.12 .3833868 .0083606 + 639688.31 .3828965 .0084059 + 639758.69 .3977251 .0086034 + 639828.94 .3866258 .0083711 + 639899.12 .3803257 .0083071 + 639969.56 .3912888 .0085055 + 640039.81 .3749458 .0083246 + 640110.06 .3842839 .0086262 + 640180.38 .3699822 .0082118 + 640250.81 .3805487 .0085041 + 640321.12 .3792078 .0084696 + 640391.44 .3822062 .0085718 + 640461.88 .3759953 .0084597 + 640532.25 .3977582 .0088113 + 640602.56 .3811696 .0085284 + 640672.94 .3727886 .0082849 + 640743.44 .3887895 .0086987 + 640813.88 .3736412 .0082913 + 640884.25 .3847550 .0085715 + 640954.81 .3810909 .0084726 + 641025.25 .3775164 .0084143 + 641095.69 .3798005 .0083332 + 641166.25 .3745423 .0082268 + 641236.69 .3631499 .0080026 + 641307.19 .3821616 .0083144 + 641377.69 .3909625 .0083099 + 641448.31 .3893808 .0083583 + 641518.81 .3866889 .0082686 + 641589.31 .3768948 .0080319 + 641660.00 .3790598 .0082279 + 641730.50 .3803762 .0082738 + 641801.06 .3807561 .0082390 + 641871.62 .3769087 .0081791 + 641942.38 .3895384 .0084972 + 642012.94 .3869116 .0083422 + 642083.56 .3862699 .0084761 + 642154.31 .3646683 .0079537 + 642224.94 .3790212 .0081849 + 642295.56 .3740358 .0081036 + 642366.19 .3819768 .0082415 + 642437.00 .3866788 .0083725 + 642507.69 .3700088 .0079666 + 642578.31 .3840373 .0081883 + 642649.19 .3890858 .0083738 + 642719.88 .3756556 .0080382 + 642790.56 .3757665 .0081542 + 642861.31 .3836548 .0083094 + 642932.19 .3723205 .0081010 + 643002.94 .3896749 .0084313 + 643073.69 .3822413 .0083692 + 643144.62 .3870721 .0084315 + 643215.44 .3959780 .0086622 + 643286.19 .3734107 .0082055 + 643357.00 .3907064 .0085460 + 643428.00 .3664997 .0081246 + 643498.81 .3660198 .0080265 + 643569.62 .3771270 .0083056 + 643640.62 .3827176 .0084012 + 643711.50 .3758638 .0081253 + 643782.38 .3718741 .0081918 + 643853.31 .3806638 .0083461 + 643924.31 .3797179 .0083738 + 643995.25 .3732293 .0083254 + 644066.19 .3733041 .0082539 + 644137.25 .3738407 .0083915 + 644208.19 .3696635 .0082532 + 644279.12 .3898413 .0085988 + 644350.12 .3678164 .0080603 + 644421.25 .3744645 .0081626 + 644492.25 .3755741 .0082696 + 644563.25 .3715430 .0080311 + 644634.44 .3925345 .0085079 + 644705.44 .3831453 .0083687 + 644776.50 .3709575 .0080726 + 644847.56 .3881471 .0083764 + 644918.75 .3750359 .0080913 + 644989.81 .3830962 .0083638 + 645060.94 .3705913 .0080434 + 645132.19 .3555793 .0078046 + 645203.25 .3624099 .0078905 + 645274.38 .3617816 .0078604 + 645345.69 .3737668 .0080770 + 645416.81 .3630011 .0079677 + 645488.00 .3437467 .0075510 + 645559.19 .3584417 .0079680 + 645630.50 .3436845 .0076762 + 645701.69 .3615301 .0080534 + 645772.88 .3554826 .0078779 + 645844.25 .3343462 .0074549 + 645915.50 .3513846 .0077608 + 645986.75 .3655189 .0080659 + 646058.00 .3593544 .0079341 + 646129.38 .3555975 .0079063 + 646200.69 .3715329 .0081324 + 646271.94 .3746921 .0081697 + 646343.38 .3655122 .0080369 + 646414.75 .3841791 .0083824 + 646486.06 .3725381 .0082435 + 646557.38 .3634577 .0080946 + 646628.88 .3632511 .0081115 + 646700.25 .3723768 .0083078 + 646771.62 .3808997 .0083913 + 646843.12 .3762443 .0083031 + 646914.56 .3693367 .0081457 + 646985.94 .3661349 .0081322 + 647057.38 .3571977 .0080291 + 647128.94 .3776753 .0083957 + 647200.38 .3673890 .0082015 + 647271.81 .3698665 .0081609 + 647343.44 .3623389 .0080576 + 647414.94 .3773505 .0081858 + 647486.44 .3792453 .0082633 + 647557.94 .3693999 .0080497 + 647629.56 .3741535 .0082225 + 647701.12 .3676201 .0079896 + 647772.62 .3762365 .0081372 + 647844.31 .3679630 .0080558 + 647915.88 .3597243 .0078670 + 647987.50 .3827178 .0082455 + 648059.06 .3757388 .0081476 + 648130.81 .3713449 .0080756 + 648202.44 .3795771 .0081784 + 648274.06 .3689722 .0081289 + 648345.81 .3533700 .0076966 + 648417.44 .3686698 .0080448 + 648489.12 .3617626 .0079260 + 648560.81 .3691612 .0080552 + 648632.62 .3646595 .0079968 + 648704.31 .3853677 .0083763 + 648776.00 .3650123 .0080167 + 648847.88 .3770064 .0081617 + 648919.62 .3743445 .0081336 + 648991.31 .3768196 .0082442 + 649063.12 .3655995 .0081069 + 649135.00 .3616903 .0080712 + 649206.75 .3582596 .0079889 + 649278.56 .3663674 .0083218 + 649350.50 .3741917 .0085274 + 649422.31 .3562924 .0082833 + 649494.12 .3509915 .0082430 + 649566.00 .3595257 .0083433 + 649638.00 .3623348 .0085295 + 649709.81 .3590407 .0084942 + 649781.69 .3427417 .0081513 + 649853.75 .3479879 .0081721 + 649925.62 .3592260 .0083940 + 649997.56 .3674198 .0085053 + 650069.62 .3421221 .0079089 + 650141.50 .3349777 .0076921 + 650213.50 .3423032 .0078312 + 650285.44 .3439151 .0077309 + 650357.56 .3369241 .0076457 + 650429.50 .3375093 .0076727 + 650501.50 .3557012 .0079991 + 650573.62 .3415357 .0076290 + 650645.69 .3411731 .0076727 + 650717.69 .3423819 .0076755 + 650789.75 .3477336 .0078042 + 650861.94 .3545671 .0079021 + 650934.00 .3514390 .0078340 + 651006.06 .3684550 .0081886 + 651078.31 .3625596 .0080195 + 651150.38 .3574807 .0078448 + 651222.50 .3592751 .0079511 + 651294.62 .3633137 .0080068 + 651366.94 .3543395 .0077851 + 651439.06 .3502519 .0078318 + 651511.25 .3479675 .0076620 + 651583.56 .3755089 .0082447 + 651655.75 .3697392 .0081224 + 651727.94 .3881785 .0083959 + 651800.12 .3557347 .0076688 + 651872.50 .3606444 .0078060 + 651944.75 .3597648 .0077542 + 652016.94 .3764883 .0080171 + 652089.38 .3565001 .0076205 + 652161.62 .3729820 .0079832 + 652233.94 .3758309 .0079599 + 652306.19 .3802918 .0081028 + 652378.62 .3680218 .0078743 + 652450.94 .3669594 .0078286 + 652523.31 .3607322 .0077913 + 652595.75 .3656119 .0079746 + 652668.12 .3682928 .0079747 + 652740.50 .3653878 .0078637 + 652812.88 .3824296 .0082185 + 652885.38 .3762719 .0081648 + 652957.81 .3641843 .0078699 + 653030.19 .3716037 .0079182 + 653102.75 .3702910 .0079412 + 653175.19 .3765003 .0080981 + 653247.69 .3664595 .0078599 + 653320.12 .3707967 .0078977 + 653392.75 .3870590 .0081818 + 653465.25 .3826234 .0081927 + 653537.75 .3668379 .0078168 + 653610.38 .3852467 .0082315 + 653682.88 .3752790 .0079051 + 653755.44 .3744640 .0079448 + 653828.00 .3765968 .0078601 + 653900.69 .3695922 .0078195 + 653973.25 .3782330 .0079623 + 654045.81 .3698499 .0079523 + 654118.56 .3703970 .0079923 + 654191.19 .3661513 .0079735 + 654263.81 .3655364 .0079276 + 654336.56 .3732059 .0081180 + 654409.19 .3674075 .0079088 + 654481.88 .3678330 .0080206 + 654554.50 .3721541 .0081271 + 654627.31 .3772374 .0080628 + 654700.00 .3673650 .0080342 + 654772.75 .3761280 .0082225 + 654845.56 .3617156 .0079153 + 654918.31 .3899517 .0083809 + 654991.06 .3727922 .0081367 + 655063.81 .3689057 .0079813 + 655136.69 .3695081 .0081068 + 655209.50 .3795085 .0083424 + 655282.25 .3897631 .0085941 + 655355.19 .3749965 .0082397 + 655428.00 .3802486 .0083643 + 655500.88 .3838763 .0084327 + 655573.69 .3725308 .0082904 + 655646.69 .3911423 .0086055 + 655719.56 .3794624 .0083473 + 655792.44 .3680135 .0081060 + 655865.44 .3865622 .0084751 + 655938.31 .3838686 .0083984 + 656011.25 .3872503 .0083403 + 656084.19 .3656597 .0079365 + 656157.25 .3728013 .0080223 + 656230.19 .3780078 .0081934 + 656303.12 .3759059 .0081518 + 656376.25 .3761838 .0081335 + 656449.25 .3800719 .0082282 + 656522.25 .3823312 .0083365 + 656595.25 .3852525 .0082396 + 656668.44 .3854699 .0082034 + 656741.44 .3874106 .0082552 + 656814.50 .3766980 .0081203 + 656887.69 .3734173 .0079522 + 656960.75 .3765070 .0080710 + 657033.81 .3821968 .0080513 + 657106.94 .3807655 .0080239 + 657180.19 .3681802 .0078096 + 657253.31 .3658815 .0077144 + 657326.44 .3713367 .0077850 + 657399.69 .3840187 .0081081 + 657472.88 .3703269 .0078650 + 657546.00 .3814854 .0080002 + 657619.19 .3709982 .0079392 + 657692.50 .3698889 .0079309 + 657765.75 .3932353 .0083184 + 657838.94 .3841649 .0081825 + 657912.31 .3879871 .0081735 + 657985.56 .3900702 .0082525 + 658058.81 .3904899 .0082989 + 658132.06 .3706127 .0079888 + 658205.50 .3939487 .0084560 + 658278.75 .3851098 .0082944 + 658352.06 .3897582 .0084144 + 658425.50 .3976037 .0085893 + 658498.88 .3893688 .0083474 + 658572.19 .3889788 .0084084 + 658645.69 .3779310 .0080917 + 658719.06 .3920659 .0083188 + 658792.44 .3858235 .0080803 + 658865.81 .3886921 .0080738 + 658939.31 .3870456 .0081378 + 659012.75 .3863087 .0080690 + 659086.19 .3907830 .0081301 + 659159.75 .3672611 .0076403 + 659233.19 .3767237 .0079264 + 659306.69 .3752840 .0079558 + 659380.12 .3962877 .0082731 + 659453.75 .3800526 .0079898 + 659527.25 .3734001 .0079638 + 659600.75 .3858111 .0081316 + 659674.44 .3814636 .0080784 + 659747.94 .3775246 .0080667 + 659821.50 .3850856 .0081758 + 659895.06 .3900502 .0082564 + 659968.75 .3887604 .0082138 + 660042.38 .3880631 .0082572 + 660115.94 .3822891 .0081795 + 660189.69 .3890652 .0082704 + 660263.31 .3825941 .0081225 + 660336.94 .3769704 .0079241 + 660410.62 .3733516 .0078886 + 660484.38 .3781074 .0079441 + 660558.06 .3824538 .0080632 + 660631.75 .3771881 .0079031 + 660705.56 .3923497 .0082640 + 660779.31 .3830569 .0080882 + 660853.00 .3820079 .0080368 + 660926.75 .3838158 .0081051 + 661000.62 .3928104 .0083333 + 661074.38 .3920256 .0082070 + 661148.12 .3845861 .0080684 + 661222.06 .3912912 .0081918 + 661295.88 .3936810 .0082153 + 661369.69 .3988433 .0083426 + 661443.50 .4018219 .0083645 + 661517.44 .4032387 .0082922 + 661591.31 .3929093 .0081369 + 661665.19 .3772252 .0078282 + 661739.19 .3961592 .0082752 + 661813.06 .3878821 .0081191 + 661886.94 .3869135 .0080504 + 661960.88 .3910265 .0081499 + 662034.94 .4000739 .0083336 + 662108.81 .3850490 .0079977 + 662182.75 .3988859 .0082636 + 662256.88 .3874255 .0081204 + 662330.81 .3976484 .0082412 + 662404.81 .3940846 .0083012 + 662478.81 .3909943 .0082058 + 662552.94 .3975896 .0083317 + 662627.00 .3917920 .0081882 + 662701.00 .3767721 .0078058 + 662775.19 .3798433 .0079516 + 662849.25 .3816740 .0079575 + 662923.31 .3909435 .0081236 + 662997.38 .3858556 .0080085 + 663071.62 .3911968 .0080903 + 663145.69 .3911148 .0081195 + 663219.81 .3906180 .0080697 + 663294.12 .3866333 .0079926 + 663368.25 .3924407 .0081694 + 663442.38 .3875644 .0081422 + 663516.69 .3963782 .0082947 + 663590.88 .3845840 .0082089 + 663665.06 .3795070 .0081162 + 663739.25 .3839535 .0082830 + 663813.62 .3860452 .0083535 + 663887.88 .3975631 .0084761 + 663962.12 .4001005 .0085170 + 664036.50 .3926407 .0082235 + 664110.75 .3867852 .0080894 + 664185.06 .3815498 .0079356 + 664259.31 .3849020 .0079662 + 664333.75 .3897718 .0080395 + 664408.06 .3858353 .0080741 + 664482.44 .3922366 .0081632 + 664556.88 .3956497 .0082378 + 664631.25 .3784465 .0078554 + 664705.62 .3902411 .0081313 + 664780.00 .4061092 .0084916 + 664854.50 .3997882 .0082902 + 664928.94 .3930530 .0081332 + 665003.31 .3813187 .0078979 + 665077.88 .3906460 .0080776 + 665152.38 .3718040 .0078019 + 665226.81 .3754042 .0078658 + 665301.25 .3907289 .0081626 + 665375.88 .3780988 .0078767 + 665450.38 .3663114 .0076688 + 665524.88 .3674166 .0076861 + 665599.56 .3915381 .0081237 + 665674.06 .3729954 .0078129 + 665748.62 .3797167 .0078481 + 665823.12 .3932488 .0082670 + 665897.88 .3926955 .0082826 + 665972.44 .3883051 .0080777 + 666047.00 .3826642 .0078703 + 666121.75 .4003093 .0083181 + 666196.38 .3835942 .0078651 + 666271.00 .3981820 .0081389 + 666345.69 .3945830 .0080868 + 666420.44 .4039038 .0082348 + 666495.12 .4008083 .0081470 + 666569.81 .3835807 .0078144 + 666644.62 .3978076 .0081136 + 666719.31 .3984471 .0080755 + 666794.06 .4024082 .0081911 + 666868.75 .3856442 .0079417 + 666943.69 .3992501 .0081641 + 667018.44 .4028495 .0082394 + 667093.19 .3829142 .0079221 + 667168.12 .3968530 .0082046 + 667242.88 .3946344 .0081977 + 667317.69 .3908318 .0081493 + 667392.50 .3972332 .0082636 + 667467.50 .4052925 .0084255 + 667542.31 .3866881 .0080521 + 667617.19 .3935661 .0081324 + 667692.19 .3815794 .0079105 + 667767.06 .3774286 .0078683 + 667841.94 .4006740 .0082744 + 667917.00 .4064538 .0082893 + 667991.94 .3962081 .0080985 + 668066.88 .3854676 .0078516 + 668141.81 .4031812 .0082171 + 668216.88 .4162067 .0084840 + 668291.88 .3985856 .0081046 + 668366.88 .3884063 .0079753 + 668442.00 .3869878 .0080034 + 668517.00 .3939822 .0081231 + 668592.00 .4080825 .0084312 + 668667.06 .3831863 .0079084 + 668742.25 .3982114 .0082321 + 668817.25 .3891042 .0080487 + 668892.38 .3994933 .0082078 + 668967.56 .3863410 .0079548 + 669042.69 .3930143 .0080868 + 669117.75 .3804517 .0078039 + 669192.88 .3923317 .0079279 + 669268.19 .3946443 .0079348 + 669343.31 .3934174 .0079109 + 669418.50 .4001592 .0081064 + 669493.81 .3882105 .0078406 + 669568.94 .3957223 .0080835 + 669644.19 .3935986 .0081384 + 669719.38 .3948257 .0082119 + 669794.75 .4068633 .0084294 + 669870.00 .3803601 .0079101 + 669945.19 .3921015 .0080858 + 670020.62 .3916813 .0082580 + 670095.88 .3933508 .0081260 + 670171.19 .4116068 .0085372 + 670246.50 .3883961 .0080106 + 670321.94 .4007005 .0081886 + 670397.25 .4107257 .0083810 + 670472.56 .3833724 .0078586 + 670548.06 .3910463 .0079909 + 670623.44 .4021987 .0082092 + 670698.81 .4033985 .0081675 + 670774.19 .3942943 .0079804 + 670849.75 .3946481 .0080864 + 670925.12 .4133911 .0083413 + 671000.56 .3917091 .0080374 + 671076.12 .3902781 .0080183 + 671151.62 .4022060 .0082215 + 671227.06 .3957025 .0080851 + 671302.56 .3939849 .0081118 + 671378.19 .3957593 .0081300 + 671453.69 .3713194 .0076771 + 671529.19 .4074820 .0082952 + 671604.88 .3961695 .0081015 + 671680.38 .4014958 .0081588 + 671755.94 .4057540 .0081765 + 671831.50 .3968888 .0081497 + 671907.25 .3947500 .0080990 + 671982.81 .4008299 .0081786 + 672058.44 .3999993 .0081113 + 672134.19 .3993311 .0081977 + 672209.81 .4176429 .0084743 + 672285.44 .3892418 .0079837 + 672361.12 .4067801 .0083116 + 672436.94 .3976181 .0081270 + 672512.62 .3758599 .0076229 + 672588.31 .3865609 .0079179 + 672664.12 .3911657 .0079660 + 672739.88 .4127461 .0084701 + 672815.56 .4032621 .0082751 + 672891.50 .4021116 .0083069 + 672967.25 .4049674 .0083391 + 673043.00 .3969792 .0081652 + 673118.81 .3831038 .0078851 + 673194.75 .4004358 .0082024 + 673270.50 .3990103 .0082206 + 673346.38 .3824159 .0078732 + 673422.31 .4050827 .0082244 + 673498.19 .4014738 .0082208 + 673574.00 .4045337 .0081724 + 673649.88 .3929937 .0079169 + 673725.94 .4166610 .0083703 + 673801.81 .4057335 .0082343 + 673877.75 .4052421 .0082094 + 673953.81 .4112855 .0084184 + 674029.75 .4139658 .0084035 + 674105.69 .4010398 .0082101 + 674181.62 .4044643 .0081229 + 674257.75 .3982958 .0080945 + 674333.75 .3831934 .0077991 + 674409.75 .3814924 .0077810 + 674485.94 .4101394 .0082222 + 674561.94 .4007702 .0080270 + 674638.00 .3852075 .0077396 + 674714.00 .3837524 .0077614 + 674790.25 .3941405 .0080467 + 674866.31 .4060565 .0082978 + 674942.44 .3947035 .0081951 + 675018.62 .3981412 .0082240 + 675094.75 .4157090 .0086366 + 675170.88 .4031272 .0084361 + 675247.06 .4105696 .0086073 + 675323.31 .3943278 .0082636 + 675399.50 .3866232 .0081805 + 675475.69 .3820705 .0081069 + 675552.00 .4018454 .0085928 + 675628.25 .3896336 .0082613 + 675704.44 .4012312 .0084113 + 675780.69 .4038394 .0084937 + 675857.06 .3875206 .0080770 + 675933.31 .3873598 .0080229 + 676009.62 .4020338 .0081570 + 676086.06 .4108582 .0083446 + 676162.31 .4029741 .0081710 + 676238.62 .4055838 .0082237 + 676314.94 .3964302 .0080362 + 676391.44 .4013613 .0081198 + 676467.81 .3990060 .0080802 + 676544.12 .4041069 .0080931 + 676620.69 .4084795 .0082495 + 676697.06 .3933576 .0079605 + 676773.44 .3896534 .0078534 + 676849.88 .3975025 .0080960 + 676926.44 .3947583 .0080201 + 677002.88 .4018204 .0081094 + 677079.31 .3933895 .0079691 + 677155.94 .4100260 .0082713 + 677232.44 .4067533 .0082422 + 677308.94 .3922461 .0079550 + 677385.56 .4103459 .0082379 + 677462.06 .3986435 .0080596 + 677538.62 .3909043 .0078808 + 677615.12 .4084761 .0082151 + 677691.88 .3890048 .0078781 + 677768.44 .4093669 .0082191 + 677845.00 .4051915 .0081992 + 677921.75 .3994764 .0080623 + 677998.38 .4061320 .0082004 + 678075.00 .4035780 .0081827 + 678151.62 .3987864 .0081446 + 678228.38 .3858581 .0077666 + 678305.06 .3895880 .0078271 + 678381.75 .4062991 .0080849 + 678458.56 .3981250 .0080735 + 678535.25 .3930168 .0079329 + 678612.00 .4062372 .0082237 + 678688.69 .4064986 .0082883 + 678765.56 .4025797 .0081357 + 678842.31 .3967298 .0080662 + 678919.06 .4086010 .0083308 + 678996.00 .4151260 .0083233 + 679072.81 .4025896 .0080911 + 679149.62 .4133162 .0083295 + 679226.44 .4107869 .0082721 + 679303.38 .4019001 .0080744 + 679380.25 .4161499 .0083412 + 679457.12 .4023134 .0081380 + 679534.12 .4051390 .0082752 + 679611.00 .3992399 .0080556 + 679687.88 .3978818 .0081133 + 679764.81 .4071370 .0082686 + 679841.88 .3945701 .0079754 + 679918.81 .4048162 .0081557 + 679995.75 .3984708 .0080564 + 680072.88 .3965777 .0079121 + 680149.81 .4065913 .0080284 + 680226.81 .4042155 .0081401 + 680303.81 .4043238 .0080170 + 680380.94 .4012770 .0079509 + 680458.00 .4051720 .0080429 + 680535.00 .4007281 .0079021 + 680612.25 .4046963 .0079075 + 680689.31 .3957046 .0077343 + 680766.38 .3980170 .0078046 + 680843.44 .4071454 .0079949 + 680920.69 .4045472 .0079762 + 680997.81 .4206929 .0083046 + 681074.94 .4083016 .0081548 + 681152.25 .3844166 .0077593 + 681229.38 .4009925 .0081296 + 681306.56 .4065275 .0082437 + 681383.75 .4170539 .0084396 + 681461.06 .4166265 .0084171 + 681538.31 .4062617 .0081469 + 681615.50 .4134431 .0081917 + 681692.88 .4223227 .0082893 + 681770.12 .4146361 .0081568 + 681847.44 .4003436 .0078185 + 681924.81 .4087717 .0079954 + 682002.12 .4004348 .0078951 + 682079.44 .3967193 .0077803 + 682156.75 .4032022 .0079534 + 682234.19 .4176174 .0081897 + 682311.56 .4064423 .0079387 + 682388.88 .4014732 .0079984 + 682466.44 .3921906 .0077414 + 682543.81 .3961147 .0079085 + 682621.19 .4159956 .0081946 + 682698.62 .4158826 .0082227 + 682776.19 .4274923 .0085252 + 682853.62 .4144468 .0082403 + 682931.06 .3994582 .0079689 + 683008.62 .4043337 .0080294 + 683086.12 .4123192 .0081827 + 683163.62 .3906911 .0077339 + 683241.12 .4089008 .0080880 + 683318.75 .4172289 .0082700 + 683396.31 .3997022 .0079776 + 683473.81 .4119841 .0081280 + 683551.50 .4185555 .0082856 + 683629.06 .3972253 .0079145 + 683706.69 .4092201 .0081692 + 683784.25 .3984401 .0079539 + 683862.00 .4014589 .0080426 + 683939.62 .4004051 .0080614 + 684017.25 .4118933 .0082086 + 684095.06 .4126453 .0082886 + 684172.69 .4043924 .0080542 + 684250.38 .4173903 .0083245 + 684328.06 .3949907 .0078024 + 684405.88 .3969277 .0078768 + 684483.62 .4212759 .0083978 + 684561.31 .4254960 .0084308 + 684639.19 .4026529 .0080286 + 684716.94 .4035147 .0080474 + 684794.75 .4188593 .0084385 + 684872.50 .4169986 .0084062 + 684950.44 .4028496 .0080286 + 685028.25 .4097075 .0081391 + 685106.06 .4232730 .0084352 + 685184.06 .4063369 .0081487 + 685261.88 .4128977 .0082337 + 685339.75 .4084242 .0081453 + 685417.62 .3954625 .0079449 + 685495.62 .4154712 .0082374 + 685573.50 .4128794 .0081839 + 685651.44 .4055246 .0079994 + 685729.50 .4120392 .0081874 + 685807.44 .4132972 .0082251 + 685885.38 .3931763 .0078363 + 685963.38 .4052105 .0080947 + 686041.50 .4084703 .0081416 + 686119.44 .4098921 .0082104 + 686197.50 .4151716 .0083088 + 686275.62 .3997835 .0080668 + 686353.69 .4034062 .0080523 + 686431.69 .4031515 .0080217 + 686509.75 .4069096 .0081356 + 686588.00 .4101477 .0080945 + 686666.06 .4108695 .0081660 + 686744.12 .3985923 .0079435 + 686822.44 .4023562 .0080281 + 686900.56 .4162639 .0082488 + 686978.69 .4078133 .0081164 + 687056.94 .4090115 .0081262 + 687135.12 .4046804 .0080877 + 687213.31 .4177212 .0081712 + 687291.50 .4246126 .0083380 + 687369.81 .4100649 .0081401 + 687448.06 .4160681 .0082754 + 687526.31 .4043970 .0080421 + 687604.69 .3921351 .0078188 + 687682.94 .4106370 .0082226 + 687761.19 .4279706 .0084690 + 687839.50 .4036042 .0079915 + 687917.94 .4110788 .0081111 + 687996.25 .3986388 .0079465 + 688074.56 .3976921 .0079313 + 688153.06 .4118471 .0080907 + 688231.38 .4127955 .0082008 + 688309.75 .4044805 .0079482 + 688388.12 .4114235 .0081698 + 688466.69 .4138693 .0082198 + 688545.06 .4053934 .0081472 + 688623.50 .4001358 .0080251 + 688702.06 .4143033 .0083131 + 688780.50 .4080301 .0081597 + 688858.94 .4119603 .0081931 + 688937.44 .4030949 .0079173 + 689016.06 .4033040 .0078988 + 689094.56 .4100231 .0079501 + 689173.06 .4033318 .0078577 + 689251.75 .4129280 .0079742 + 689330.31 .4040739 .0079495 + 689408.81 .4128129 .0081861 + 689487.38 .4135816 .0081884 + 689566.12 .4131069 .0082881 + 689644.69 .4145770 .0082944 + 689723.31 .4079278 .0081372 + 689802.06 .4096645 .0080775 + 689880.69 .4089096 .0080330 + 689959.38 .4224166 .0082004 + 690038.00 .4188467 .0082097 + 690116.81 .4107467 .0080311 + 690195.50 .4232603 .0082220 + 690274.25 .4066426 .0079577 + 690353.06 .4178410 .0081895 + 690431.81 .4132314 .0080519 + 690510.56 .4135807 .0079711 + 690589.31 .4197249 .0081320 + 690668.19 .4210536 .0082426 + 690747.00 .4122941 .0080050 + 690825.81 .3937524 .0076833 + 690904.75 .4056506 .0078900 + 690983.56 .4266371 .0082734 + 691062.38 .4218221 .0081544 + 691141.25 .4155850 .0081090 + 691220.25 .4110715 .0079914 + 691299.12 .4168520 .0081163 + 691378.00 .4195259 .0081523 + 691457.06 .4149297 .0081153 + 691536.00 .4043878 .0079478 + 691614.94 .4182208 .0081530 + 691694.00 .4066634 .0079439 + 691772.94 .4186275 .0081599 + 691851.94 .3970955 .0078550 + 691930.94 .4064834 .0079693 + 692010.06 .4147404 .0081171 + 692089.06 .4243287 .0082907 + 692168.06 .4132103 .0080523 + 692247.25 .4202478 .0082392 + 692326.31 .4090324 .0079729 + 692405.38 .4221884 .0083393 + 692484.44 .4146228 .0081053 + 692563.69 .4034553 .0079503 + 692642.81 .4032601 .0079293 + 692721.94 .4133728 .0080196 + 692801.19 .4330505 .0084015 + 692880.38 .4065791 .0078628 + 692959.50 .4055609 .0078142 + 693038.69 .4121142 .0080043 + 693118.00 .4059551 .0078927 + 693197.19 .4149430 .0080520 + 693276.44 .4043596 .0079228 + 693355.81 .4128569 .0080431 + 693435.06 .4057700 .0078946 + 693514.31 .4082964 .0078846 + 693593.56 .4146745 .0079305 + 693673.00 .4126703 .0079029 + 693752.31 .4196461 .0079884 + 693831.62 .4190027 .0080228 + 693911.06 .4107040 .0078516 + 693990.38 .4283209 .0081894 + 694069.75 .4311402 .0082748 + 694149.12 .4062678 .0079525 + 694228.62 .4054496 .0079458 + 694308.00 .4208429 .0082542 + 694387.44 .4036708 .0079454 + 694467.00 .4077221 .0079886 + 694546.44 .4271396 .0081509 + 694625.88 .3997056 .0078133 + 694705.31 .4099369 .0079914 + 694784.94 .4173075 .0081199 + 694864.44 .4167490 .0080969 + 694943.94 .4121330 .0079792 + 695023.62 .4095647 .0079836 + 695103.12 .4194465 .0081317 + 695182.69 .4180564 .0080797 + 695262.25 .4259641 .0082158 + 695341.94 .4151527 .0080427 + 695421.50 .4126932 .0079949 + 695501.12 .4157959 .0080534 + 695580.88 .4135362 .0080199 + 695660.50 .4166792 .0080758 + 695740.12 .4085741 .0080114 + 695819.75 .4057061 .0079890 + 695899.56 .4226494 .0083798 + 695979.25 .4267633 .0084070 + 696058.94 .4198920 .0082538 + 696138.81 .4079034 .0081148 + 696218.56 .4160159 .0082193 + 696298.25 .3999513 .0079855 + 696378.00 .4150827 .0082728 + 696457.94 .4066564 .0081497 + 696537.69 .4065327 .0081208 + 696617.50 .4213012 .0083163 + 696697.44 .4284132 .0085563 + 696777.25 .4198680 .0083784 + 696857.06 .4219813 .0083906 + 696937.06 .4142345 .0082997 + 697016.94 .4189782 .0083715 + 697096.81 .4131418 .0083066 + 697176.69 .4305650 .0085370 + 697256.69 .4050956 .0081265 + 697336.62 .4240709 .0084399 + 697416.56 .4248311 .0083619 + 697496.62 .4157418 .0081692 + 697576.56 .4018287 .0078766 + 697656.56 .4183312 .0082455 + 697736.50 .4151328 .0081201 + 697816.69 .4158876 .0081662 + 697896.69 .4238207 .0081967 + 697976.69 .4102397 .0080672 + 698056.88 .4145984 .0081293 + 698136.94 .4154872 .0081974 + 698217.00 .4072710 .0079636 + 698297.06 .4270368 .0083126 + 698377.31 .4176618 .0082399 + 698457.44 .4286359 .0084869 + 698537.50 .4128415 .0081317 + 698617.81 .4162496 .0081455 + 698697.94 .4198178 .0082856 + 698778.12 .4128981 .0081768 + 698858.31 .4196502 .0082518 + 698938.62 .4039706 .0079589 + 699018.81 .4193960 .0082690 + 699099.06 .4184283 .0082864 + 699179.44 .4234041 .0083627 + 699259.62 .4034809 .0080324 + 699339.94 .4010353 .0080125 + 699420.19 .4352883 .0085954 + 699500.62 .4185893 .0083524 + 699580.94 .4229140 .0083605 + 699661.19 .4284441 .0084367 + 699741.69 .4171523 .0082184 + 699822.00 .4214121 .0083152 + 699902.38 .4154252 .0081089 + 699982.75 .4112217 .0080405 + 700063.25 .4150186 .0080885 + 700143.69 .4140732 .0080485 + 700224.06 .4055291 .0079785 + 700304.62 .3990386 .0079402 + 700385.06 .4164703 .0082613 + 700465.56 .4160996 .0083665 + 700546.00 .4197523 .0083873 + 700626.62 .4108537 .0082482 + 700707.12 .4097801 .0081990 + 700787.62 .4257106 .0085894 + 700868.31 .4262376 .0084525 + 700948.81 .4218196 .0083438 + 701029.38 .4228788 .0084045 + 701109.94 .4041780 .0080709 + 701190.62 .4218624 .0083335 + 701271.25 .4131035 .0081621 + 701351.81 .4286470 .0084653 + 701432.62 .4130972 .0082194 + 701513.25 .4297997 .0086077 + 701593.88 .4262608 .0084946 + 701674.69 .4202819 .0083971 + 701755.38 .4215908 .0084761 + 701836.06 .4144734 .0083036 + 701916.75 .4127684 .0082702 + 701997.62 .4258932 .0085269 + 702078.31 .4136445 .0081956 + 702159.06 .4214971 .0083666 + 702240.00 .4155670 .0081966 + 702320.75 .4224180 .0083392 + 702401.56 .4221248 .0082699 + 702482.31 .4090795 .0079829 + 702563.31 .4328020 .0084212 + 702644.12 .4364719 .0085846 + 702724.94 .4115631 .0080721 + 702805.94 .4157079 .0082403 + 702886.81 .4180213 .0083436 + 702967.69 .4114505 .0083692 + 703048.62 .4077239 .0082530 + 703129.69 .4235051 .0084948 + 703210.56 .4085499 .0081839 + 703291.50 .4198100 .0083138 + 703372.62 .4225048 .0082423 + 703453.56 .4279133 .0083179 + 703534.56 .4138881 .0080593 + 703615.56 .4216234 .0081596 + 703696.69 .4188960 .0081483 + 703777.75 .4254670 .0083039 + 703858.75 .4174740 .0082636 + 703940.00 .4113141 .0082091 + 704021.06 .4084135 .0081461 + 704102.12 .4311468 .0085232 + 704183.19 .4157555 .0083210 + 704264.44 .4258900 .0084174 + 704345.56 .4157252 .0082435 + 704426.69 .4309600 .0085505 + 704508.00 .4255773 .0083798 + 704589.19 .4323705 .0085286 + 704670.31 .4114362 .0081104 + 704751.50 .4104266 .0080957 + 704832.88 .4198043 .0082807 + 704914.12 .4092767 .0080924 + 704995.31 .4147751 .0080982 + 705076.75 .4191849 .0081795 + 705158.00 .4119137 .0081246 + 705239.25 .4111142 .0081120 + 705320.56 .4083955 .0080844 + 705402.00 .4109072 .0082022 + 705483.31 .3823622 .0077023 + 705564.62 .3891785 .0078786 + 705646.12 .3735452 .0076692 + 705727.50 .3976689 .0081112 + 705808.88 .4173790 .0084105 + 705890.25 .4277645 .0086315 + 705971.81 .4107310 .0082985 + 706053.25 .4169087 .0083675 + 706134.62 .4074444 .0081181 + 706216.25 .4220915 .0082932 + 706297.69 .4224193 .0083620 + 706379.19 .4245887 .0084283 + 706460.81 .4259344 .0084742 + 706542.31 .4173819 .0083234 + 706623.81 .4136302 .0082979 + 706705.38 .4262590 .0085637 + 706787.06 .4265988 .0085570 + 706868.62 .4198734 .0084089 + 706950.19 .4077859 .0081655 + 707031.88 .4326068 .0085640 + 707113.50 .4144099 .0082673 + 707195.12 .4303879 .0083973 + 707276.75 .4335188 .0084575 + 707358.50 .4337595 .0084301 + 707440.19 .4296612 .0083014 + 707521.88 .4199502 .0082304 + 707603.69 .4153209 .0080539 + 707685.38 .4299313 .0083365 + 707767.06 .4279220 .0082786 + 707848.81 .4253200 .0083152 + 707930.69 .4224855 .0082766 + 708012.44 .4363425 .0084690 + 708094.25 .4227062 .0082948 + 708176.19 .4084994 .0080814 + 708257.94 .4202643 .0081859 + 708339.75 .4356897 .0083915 + 708421.56 .4310724 .0083588 + 708503.56 .4311081 .0084033 + 708585.44 .4206428 .0082468 + 708667.31 .4133234 .0081230 + 708749.31 .4108234 .0081237 + 708831.25 .4248782 .0084057 + 708913.12 .4285929 .0085169 + 708995.06 .4260195 .0084512 + 709077.12 .4278431 .0084056 + 709159.12 .4188130 .0082201 + 709241.06 .4214980 .0082405 + 709323.19 .4200174 .0081222 + 709405.19 .4118913 .0080348 + 709487.19 .4155561 .0081022 + 709569.25 .4364612 .0084087 + 709651.44 .4304459 .0082737 + 709733.50 .4180307 .0080461 + 709815.56 .4208314 .0082120 + 709897.75 .4108244 .0079559 + 709979.88 .4276775 .0082498 + 710062.00 .4405324 .0084734 + 710144.12 .4127125 .0080524 + 710226.38 .4309074 .0083721 + 710308.56 .4104171 .0079281 + 710390.69 .4237933 .0081963 + 710473.06 .4235150 .0082228 + 710555.25 .4309455 .0083940 + 710637.44 .4250762 .0082263 + 710719.69 .4281839 .0083747 + 710802.06 .4307675 .0084612 + 710884.31 .4135340 .0081530 + 710966.56 .4106007 .0081466 + 711049.00 .4361805 .0085280 + 711131.31 .4350097 .0084863 + 711213.62 .4387495 .0085824 + 711295.94 .4219683 .0081554 + 711378.44 .4296543 .0083645 + 711460.75 .4269340 .0082457 + 711543.12 .4282198 .0082510 + 711625.69 .4258424 .0081903 + 711708.06 .4372549 .0083471 + 711790.50 .4376282 .0083418 + 711873.06 .4283346 .0081395 + 711955.50 .4344044 .0082307 + 712037.94 .4282467 .0080880 + 712120.38 .4472910 .0085080 + 712203.06 .4222714 .0080028 + 712285.56 .4264873 .0081922 + 712368.06 .4322444 .0082528 + 712450.75 .4234892 .0081540 + 712533.25 .4173514 .0079485 + 712615.81 .4401385 .0083490 + 712698.38 .4280847 .0081118 + 712781.12 .4337419 .0082096 + 712863.69 .4371760 .0082438 + 712946.31 .4134213 .0078934 + 713029.12 .4357032 .0082759 + 713111.75 .4310193 .0082836 + 713194.38 .4172563 .0080473 + 713277.06 .4263949 .0082680 + 713359.88 .4212467 .0082723 + 713442.56 .4063886 .0080526 + 713525.31 .4084766 .0080726 + 713608.19 .4119071 .0081883 + 713690.94 .4330291 .0085103 + 713773.69 .4201438 .0083049 + 713856.44 .4253501 .0083354 + 713939.38 .3998221 .0077802 + 714022.19 .4177095 .0082245 + 714105.00 .4127060 .0080398 + 714187.94 .4068234 .0079364 + 714270.81 .4139797 .0081131 + 714353.62 .4048022 .0078854 + 714436.50 .4160667 .0080973 + 714519.56 .4250970 .0082064 + 714602.44 .4223494 .0081066 + 714685.38 .4034821 .0078765 + 714768.44 .4256636 .0082064 + 714851.38 .4153002 .0079640 + 714934.38 .4130884 .0078950 + 715017.31 .4146485 .0079850 + 715100.44 .4327951 .0082969 + 715183.44 .4094342 .0078743 + 715266.44 .4056099 .0078139 + 715349.62 .4297183 .0082359 + 715432.69 .4260992 .0081503 + 715515.75 .4109444 .0078786 + 715598.81 .4300832 .0082892 + 715682.06 .4193532 .0080614 + 715765.19 .4361476 .0084266 + 715848.25 .4243089 .0082067 + 715931.56 .4183396 .0081498 + 716014.69 .4173689 .0080561 + 716097.88 .4286728 .0083542 + 716181.06 .4152246 .0080562 + 716264.38 .4171324 .0080973 + 716347.56 .4298304 .0082771 + 716430.81 .4219676 .0082426 + 716514.19 .4170617 .0081769 + 716597.44 .4333804 .0084553 + 716680.69 .4288466 .0084580 + 716764.12 .4238009 .0084289 + 716847.38 .4253858 .0085021 + 716930.69 .4110962 .0083206 + 717014.00 .4198898 .0083948 + 717097.50 .4263401 .0086081 + 717180.88 .4180633 .0084444 + 717264.19 .4277312 .0086138 + 717347.75 .4206682 .0084126 + 717431.12 .4398049 .0086944 + 717514.56 .4333196 .0085315 + 717597.94 .4219688 .0081715 + 717681.56 .4328620 .0083364 + 717765.00 .4218179 .0081813 + 717848.44 .4226352 .0082456 + 717932.12 .4116614 .0079791 + 718015.62 .4290553 .0082197 + 718099.12 .4297562 .0082852 + 718182.62 .4237770 .0081625 + 718266.31 .4155650 .0080421 + 718349.88 .4187312 .0080401 + 718433.44 .4212881 .0081450 + 718517.19 .4288518 .0082553 + 718600.75 .4108158 .0080295 + 718684.38 .4277097 .0082899 + 718768.00 .4336801 .0083591 + 718851.81 .4216071 .0081755 + 718935.44 .4325616 .0084434 + 719019.12 .4312929 .0084458 + 719102.94 .4200936 .0080743 + 719186.62 .4330541 .0082321 + 719270.38 .4202438 .0080186 + 719354.06 .4290706 .0081651 + 719438.00 .4226564 .0080785 + 719521.75 .4346479 .0082399 + 719605.50 .4305112 .0082025 + 719689.44 .4338036 .0083073 + 719773.25 .4126583 .0078442 + 719857.06 .4226243 .0081036 + 719940.88 .4239154 .0081413 + 720024.88 .4280859 .0082077 + 720108.75 .4305558 .0082959 + 720192.62 .4279056 .0082157 + 720276.69 .4257793 .0083568 + 720360.56 .4238236 .0083374 + 720444.50 .4216766 .0083209 + 720528.44 .4208297 .0082626 + 720612.50 .4311102 .0084517 + 720696.50 .4301251 .0083305 + 720780.44 .4237354 .0083185 + 720864.62 .4345598 .0083645 + 720948.62 .4284176 .0083981 + 721032.62 .4182687 .0081241 + 721116.62 .4315948 .0083758 + 721200.88 .4356221 .0084099 + 721284.94 .4348172 .0084262 + 721369.00 .4279181 .0083165 + 721453.25 .4152850 .0080181 + 721537.38 .4400742 .0084980 + 721621.50 .4214100 .0081817 + 721705.62 .4236319 .0082052 + 721789.94 .4440860 .0085967 + 721874.12 .4295252 .0082125 + 721958.25 .4399830 .0084333 + 722042.62 .4334103 .0083087 + 722126.81 .4159881 .0080372 + 722211.06 .4236822 .0081342 + 722295.44 .4342105 .0083840 + 722379.75 .4196015 .0080500 + 722464.00 .4206831 .0080664 + 722548.25 .4185147 .0080847 + 722632.75 .4269216 .0082823 + 722717.06 .4253466 .0082373 + 722801.38 .4292850 .0083207 + 722885.88 .4215328 .0082252 + 722970.25 .4296145 .0083284 + 723054.62 .4312280 .0082966 + 723139.00 .4170018 .0080811 + 723223.56 .4373831 .0084557 + 723308.00 .4315078 .0083414 + 723392.38 .4507981 .0087244 + 723477.00 .4173123 .0081088 + 723561.50 .4208486 .0081766 + 723645.94 .4156142 .0081047 + 723730.44 .4301850 .0083400 + 723815.12 .4271487 .0081696 + 723899.62 .4303377 .0082339 + 723984.19 .4232984 .0080866 + 724068.88 .4383105 .0083199 + 724153.44 .4324639 .0083201 + 724238.00 .4142441 .0079329 + 724322.62 .4195243 .0080482 + 724407.38 .4344757 .0083116 + 724492.00 .4412675 .0084430 + 724576.62 .4205701 .0081072 + 724661.44 .4141032 .0081649 + 724746.12 .4313839 .0085293 + 724830.81 .4278807 .0084398 + 724915.50 .4245834 .0084976 + 725000.38 .4228443 .0084012 + 725085.12 .4181263 .0083379 + 725169.88 .4447890 .0087617 + 725254.75 .4374713 .0087097 + 725339.56 .4251117 .0084384 + 725424.31 .4336454 .0086057 + 725509.12 .4401616 .0087186 + 725594.12 .4345720 .0085407 + 725678.94 .4317623 .0084861 + 725763.81 .4421878 .0087015 + 725848.81 .4256579 .0082861 + 725933.69 .4167919 .0080904 + 726018.56 .4210583 .0081020 + 726103.50 .4219032 .0081559 + 726188.56 .4357781 .0083418 + 726273.50 .4147107 .0079780 + 726358.44 .4325393 .0082624 + 726443.62 .4348401 .0084015 + 726528.56 .4255668 .0083677 + 726613.56 .4246561 .0082355 + 726698.56 .4238437 .0082843 + 726783.75 .4247818 .0083866 + 726868.81 .4311017 .0084694 + 726953.88 .4204287 .0082922 + 727039.12 .4446149 .0087298 + 727124.19 .4368664 .0085352 + 727209.31 .4236082 .0082797 + 727294.56 .4206477 .0082180 + 727379.69 .4195169 .0081472 + 727464.81 .4480577 .0086792 + 727550.00 .4382513 .0085015 + 727635.31 .4244549 .0083034 + 727720.50 .4398185 .0085996 + 727805.75 .4371203 .0085835 + 727891.12 .4216915 .0082683 + 727976.38 .4427615 .0086171 + 728061.62 .4305504 .0084153 + 728146.88 .4394886 .0084897 + 728232.31 .4371531 .0084476 + 728317.62 .4437292 .0085020 + 728402.94 .4193793 .0081164 + 728488.44 .4315249 .0083743 + 728573.75 .4391329 .0085955 + 728659.12 .4193906 .0081559 + 728744.50 .4252754 .0082762 + 728830.00 .4353895 .0084790 + 728915.44 .4421682 .0086470 + 729000.81 .4256642 .0083515 + 729086.44 .4335455 .0084705 + 729171.88 .4421432 .0086643 + 729257.31 .4163516 .0081851 + 729342.81 .4375257 .0085267 + 729428.44 .4227656 .0082938 + 729514.00 .4408708 .0085596 + 729599.50 .4292135 .0082754 + 729685.19 .4235997 .0081770 + 729770.75 .4313761 .0082442 + 729856.31 .4314890 .0081793 + 729941.88 .4344359 .0082692 + 730027.62 .4394197 .0083697 + 730113.25 .4373267 .0083964 + 730198.88 .4354139 .0083030 + 730284.69 .4312262 .0082235 + 730370.38 .4384909 .0083431 + 730456.00 .4478326 .0084587 + 730541.69 .4353420 .0082013 + 730627.56 .4260215 .0080029 + 730713.31 .4352003 .0081674 + 730799.00 .4306186 .0080764 + 730884.94 .4207827 .0078809 + 730970.69 .4326493 .0080249 + 731056.50 .4276098 .0080621 + 731142.25 .4238106 .0080234 + 731228.25 .4306189 .0080326 + 731314.06 .4304259 .0080834 + 731399.88 .4232207 .0080730 + 731485.94 .4348399 .0081982 + 731571.75 .4328825 .0083176 + 731657.69 .4036941 .0078161 + 731743.56 .4219956 .0080464 + 731829.62 .4275042 .0081935 + 731915.56 .4298354 .0082398 + 732001.50 .4242141 .0080967 + 732087.62 .4491513 .0084609 + 732173.62 .4157607 .0078454 + 732259.62 .4506561 .0084123 + 732345.75 .4333173 .0080415 + 732431.81 .4276372 .0079313 + 732517.81 .4551137 .0085129 + 732603.88 .4234059 .0078780 + 732690.12 .4366646 .0080945 + 732776.19 .4277971 .0079962 + 732862.25 .4263344 .0080579 + 732948.56 .4288215 .0080283 + 733034.69 .4270586 .0082050 + 733120.81 .4180477 .0080573 + 733207.00 .4366794 .0083524 + 733293.31 .4349825 .0083533 + 733379.50 .4207473 .0080202 + 733465.69 .4247997 .0081980 + 733552.06 .4348344 .0083711 + 733638.31 .4320966 .0083896 + 733724.56 .4217463 .0080688 + 733810.81 .4344734 .0083423 + 733897.25 .4316450 .0081535 + 733983.56 .4273969 .0081140 + 734069.88 .4250289 .0080322 + 734156.38 .4320139 .0080731 + 734242.69 .4359867 .0081936 + 734329.06 .4309329 .0081540 + 734415.44 .4353522 .0081373 + 734501.94 .4438135 .0083750 + 734588.38 .4302124 .0080836 + 734674.75 .4252733 .0080171 + 734761.38 .4243134 .0079095 + 734847.81 .4328600 .0080616 + 734934.25 .4407015 .0081967 + 735020.75 .4266540 .0079218 + 735107.44 .4388478 .0082315 + 735193.94 .4275763 .0080139 + 735280.44 .4164639 .0079159 + 735367.12 .4232515 .0081071 + 735453.69 .4242076 .0081457 + 735540.25 .4286088 .0081992 + 735626.88 .4341832 .0082524 + 735713.62 .4269192 .0080871 + 735800.25 .4388265 .0083302 + 735886.88 .4447148 .0084067 + 735973.69 .4261197 .0080839 + 736060.31 .4122138 .0078434 + 736147.00 .4188996 .0079451 + 736233.69 .4195744 .0079390 + 736320.56 .4356312 .0082866 + 736407.25 .4172546 .0079830 + 736494.00 .4473402 .0084731 + 736580.94 .4279383 .0082220 + 736667.69 .4262131 .0081723 + 736754.50 .4161769 .0079420 + 736841.25 .4273711 .0081992 + 736928.25 .4188051 .0079305 + 737015.06 .4240195 .0080075 + 737101.94 .4241844 .0079882 + 737188.94 .4437242 .0083360 + 737275.81 .4287532 .0080018 + 737362.69 .4406243 .0081645 + 737449.62 .4284458 .0080150 + 737536.69 .4401894 .0082837 + 737623.62 .4274772 .0080460 + 737710.62 .4158780 .0079175 + 737797.75 .4374411 .0082586 + 737884.69 .4284658 .0080512 + 737971.69 .4263617 .0080428 + 738058.88 .4250474 .0079874 + 738145.94 .4207039 .0079483 + 738232.94 .4331255 .0081649 + 738320.00 .4185081 .0079395 + 738407.25 .4226186 .0079591 + 738494.38 .4176738 .0078171 + 738581.44 .4279317 .0079808 + 738668.75 .4288582 .0080397 + 738755.88 .4134309 .0077884 + 738843.06 .4202537 .0078506 + 738930.19 .4304395 .0079943 + 739017.56 .4242305 .0079624 + 739104.75 .4210826 .0078710 + 739191.94 .4124823 .0076820 + 739279.38 .4187732 .0077842 + 739366.62 .4158789 .0078286 + 739453.88 .4134054 .0077066 + 739541.12 .4229578 .0079849 + 739628.56 .4315627 .0081276 + 739715.88 .4137565 .0077893 + 739803.25 .4216518 .0079379 + 739890.75 .4152074 .0078223 + 739978.06 .4413922 .0083467 + 740065.44 .4345590 .0082069 + 740152.81 .4172217 .0079392 + 740240.38 .4216521 .0079543 + 740327.81 .4022760 .0075834 + 740415.25 .4156256 .0077804 + 740502.88 .4272854 .0080114 + 740590.31 .4175214 .0078774 + 740677.81 .4064964 .0077604 + 740765.31 .4179482 .0079821 + 740852.94 .4158728 .0080673 + 740940.50 .4176822 .0080999 + 741028.00 .4097381 .0080744 + 741115.75 .4131311 .0081328 + 741203.31 .4236381 .0082925 + 741290.88 .4174897 .0081016 + 741378.50 .4320326 .0083692 + 741466.25 .4097598 .0079977 + 741553.94 .4331807 .0083159 + 741641.56 .4185660 .0081126 + 741729.38 .4040549 .0079082 + 741817.06 .4272098 .0082562 + 741904.75 .4026111 .0077987 + 741992.50 .4123497 .0078910 + 742080.38 .4300161 .0081330 + 742168.12 .4102939 .0077805 + 742255.88 .4119412 .0078042 + 742343.81 .4213270 .0079833 + 742431.56 .4107197 .0078425 + 742519.38 .4068843 .0078259 + 742607.19 .4287676 .0081729 + 742695.19 .4215281 .0081001 + 742783.06 .4244140 .0081497 + 742870.94 .4186949 .0080734 + 742959.00 .4029975 .0078347 + 743046.88 .4129117 .0079745 + 743134.81 .4184787 .0081445 + 743222.88 .4114394 .0080007 + 743310.81 .4060846 .0078528 + 743398.81 .4065677 .0079183 + 743486.75 .4065540 .0079207 + 743574.94 .4196313 .0080526 + 743662.94 .4006373 .0077135 + 743750.94 .4133904 .0078847 + 743839.12 .4125535 .0078141 + 743927.19 .4221837 .0080029 + 744015.25 .4016594 .0076007 + 744103.38 .4003503 .0075653 + 744191.62 .4168256 .0079723 + 744279.75 .4041854 .0076533 + 744367.88 .4059329 .0078424 + 744456.19 .4039330 .0078920 + 744544.38 .4041249 .0077790 + 744632.56 .4030714 .0078549 + 744720.75 .4240424 .0080767 + 744809.12 .4120044 .0079395 + 744897.31 .4159065 .0079409 + 744985.56 .4056563 .0078680 + 745074.00 .4085859 .0078237 + 745162.25 .4125459 .0078956 + 745250.56 .4076726 .0079398 + 745338.88 .4032100 .0078511 + 745427.38 .4042410 .0078074 + 745515.69 .4016554 .0077388 + 745604.06 .3970835 .0077209 + 745692.56 .4092295 .0078802 + 745780.94 .4182458 .0080525 + 745869.38 .4037370 .0077871 + 745957.75 .4163167 .0079904 + 746046.38 .3990650 .0076687 + 746134.81 .4207212 .0080155 + 746223.25 .4233725 .0080260 + 746311.94 .3930937 .0074821 + 746400.44 .3985177 .0075389 + 746488.94 .4082395 .0077797 + 746577.44 .4072945 .0077922 + 746666.12 .4019189 .0076163 + 746754.69 .4050478 .0076754 + 746843.31 .4051981 .0077498 + 746932.06 .3927293 .0074218 + 747020.62 .3994395 .0075311 + 747109.25 .4032896 .0074938 + 747197.88 .4066038 .0076632 + 747286.69 .3953580 .0074743 + 747375.38 .4164141 .0079207 + 747464.06 .4127497 .0078566 + 747552.94 .4041376 .0077321 + 747641.62 .3996533 .0076908 + 747730.38 .3940189 .0075417 + 747819.12 .4262977 .0082023 + 747908.06 .4252020 .0081498 + 747996.81 .3998054 .0076317 + 748085.62 .4020971 .0076935 + 748174.62 .4124593 .0078177 + 748263.44 .4042713 .0077061 + 748352.25 .4113359 .0078383 + 748441.12 .4147645 .0078904 + 748530.19 .4155003 .0079165 + 748619.06 .4082738 .0078089 + 748707.94 .4124433 .0079145 + 748797.06 .3977644 .0076254 + 748886.00 .4096469 .0078609 + 748974.94 .4142455 .0079907 + 749064.06 .4024026 .0077818 + 749153.06 .3985993 .0076622 + 749242.06 .3996841 .0076755 + 749331.06 .4052241 .0077454 + 749420.25 .4127013 .0078035 + 749509.31 .4126143 .0077594 + 749598.38 .4088580 .0077469 + 749687.62 .4088826 .0077142 + 749776.69 .4234908 .0079570 + 749865.81 .4193304 .0078418 + 749954.94 .4065846 .0076765 + 750044.25 .4199002 .0078925 + 750133.44 .3999563 .0075885 + 750222.62 .4076541 .0076975 + 750311.94 .4005562 .0075580 + 750401.19 .4117302 .0077912 + 750490.38 .4048325 .0076844 + 750579.62 .4033206 .0076111 + 750669.06 .4034733 .0076307 + 750758.31 .4157127 .0077148 + 750847.62 .4035016 .0074864 + 750937.06 .4113478 .0076745 + 751026.38 .4012505 .0074121 + 751115.69 .4133619 .0076431 + 751205.06 .4133464 .0076681 + 751294.62 .4220555 .0078556 + 751384.00 .4152630 .0077367 + 751473.38 .4155342 .0077704 + 751562.94 .4012745 .0075615 + 751652.38 .4144700 .0077456 + 751741.81 .4139594 .0077412 + 751831.31 .4133361 .0076989 + 751920.94 .4127616 .0076635 + 752010.44 .4236307 .0078856 + 752099.94 .4338817 .0080188 + 752189.62 .4125771 .0076271 + 752279.19 .4138154 .0075912 + 752368.75 .4206679 .0077738 + 752458.31 .4076284 .0075245 + 752548.06 .4109206 .0075985 + 752637.69 .4057394 .0075211 + 752727.31 .4227840 .0078752 + 752817.12 .4214352 .0079007 + 752906.75 .4016967 .0076024 + 752996.44 .4191452 .0078949 + 753086.12 .4142040 .0077843 + 753176.00 .4148555 .0077575 + 753265.69 .4092051 .0076561 + 753355.44 .4067382 .0076312 + 753445.38 .4208634 .0078805 + 753535.12 .4257694 .0080137 + 753624.88 .4072296 .0076887 + 753714.69 .4090571 .0076933 + 753804.69 .4345852 .0080950 + 753894.50 .4174160 .0078153 + 753984.38 .4131898 .0077192 + 754074.38 .4138513 .0077420 + 754164.25 .4301242 .0080152 + 754254.19 .4072385 .0075986 + 754344.25 .4116012 .0076631 + 754434.19 .4167699 .0077347 + 754524.12 .4200788 .0077538 + 754614.06 .4216715 .0078133 + 754704.19 .4182852 .0077245 + 754794.19 .4133607 .0076870 + 754884.19 .4248837 .0079425 + 754974.44 .4065533 .0075801 + 755064.44 .4142162 .0077203 + 755154.50 .4214181 .0078874 + 755244.56 .4297646 .0079999 + 755334.81 .4158166 .0077665 + 755424.94 .4308575 .0080828 + 755515.06 .4115974 .0077980 + 755605.38 .4191548 .0079686 + 755695.50 .4266752 .0080245 + 755785.69 .4159729 .0078091 + 755875.88 .4284121 .0081039 + 755966.25 .4272289 .0080977 + 756056.44 .4282638 .0081733 + 756146.69 .4247391 .0080675 + 756237.12 .4191246 .0079780 + 756327.38 .4327735 .0081678 + 756417.62 .4223388 .0080107 + 756507.94 .4206673 .0080449 + 756598.44 .4198169 .0079654 + 756688.75 .4364897 .0083238 + 756779.12 .4252782 .0081464 + 756869.62 .4362087 .0083164 + 756960.00 .4272647 .0082047 + 757050.44 .4373062 .0083039 + 757140.81 .4318759 .0081656 + 757231.44 .4111259 .0078511 + 757321.88 .4221787 .0079492 + 757412.31 .4135865 .0078559 + 757503.00 .4160950 .0078893 + 757593.44 .4257009 .0080286 + 757684.00 .4211796 .0079208 + 757774.50 .4258544 .0080982 + 757865.19 .4363111 .0082278 + 757955.75 .4118811 .0077309 + 758046.31 .4202561 .0079120 + 758137.12 .4235920 .0079326 + 758227.69 .4318743 .0080912 + 758318.31 .4244347 .0079356 + 758408.94 .4225766 .0079233 + 758499.81 .4278767 .0080322 + 758590.44 .4268965 .0079978 + 758681.12 .4385443 .0081716 + 758772.00 .4197993 .0078612 + 758862.75 .4426044 .0082084 + 758953.50 .4359797 .0081177 + 759044.25 .4233293 .0078513 + 759135.19 .4181085 .0078079 + 759225.94 .4213308 .0077918 + 759316.75 .4123763 .0075818 + 759407.75 .4302867 .0079689 + 759498.56 .4131104 .0076063 + 759589.44 .4376627 .0080370 + 759680.50 .4268851 .0078687 + 759771.38 .4355358 .0080214 + 759862.25 .4312511 .0079374 + 759953.19 .4178160 .0076783 + 760044.25 .4191591 .0076475 + 760135.25 .4200989 .0076578 + 760226.19 .4079131 .0074800 + 760317.31 .4273356 .0077966 + 760408.31 .4243745 .0077514 + 760499.38 .4379421 .0080194 + 760590.38 .4212875 .0077229 + 760681.62 .4408417 .0080692 + 760772.69 .4235222 .0077876 + 760863.75 .4350601 .0080225 + 760955.00 .4332069 .0079333 + 761046.12 .4343805 .0080363 + 761137.25 .4330676 .0079889 + 761228.38 .4158597 .0076774 + 761319.75 .4179318 .0077060 + 761410.88 .4236554 .0078113 + 761502.06 .4226482 .0076999 + 761593.50 .4328603 .0078379 + 761684.69 .4174690 .0075897 + 761775.94 .4337236 .0078576 + 761867.19 .4221776 .0076999 + 761958.62 .4306421 .0078255 + 762049.94 .4235863 .0077860 + 762141.25 .4042958 .0074685 + 762232.75 .4265561 .0078552 + 762324.06 .4216702 .0078009 + 762415.44 .4292821 .0079230 + 762506.81 .4132616 .0077493 + 762598.38 .4369346 .0080952 + 762689.81 .4246816 .0078005 + 762781.19 .4222394 .0077455 + 762872.81 .4230953 .0077479 + 762964.31 .4249080 .0077858 + 763055.75 .4307403 .0078209 + 763147.25 .4173218 .0076486 + 763238.94 .4326129 .0078741 + 763330.44 .4050295 .0073844 + 763422.00 .4239987 .0078036 + 763513.69 .4242086 .0078175 + 763605.31 .4171855 .0076292 + 763696.88 .4316978 .0079052 + 763788.50 .4420809 .0080991 + 763880.25 .4225412 .0077431 + 763971.94 .4368687 .0079757 + 764063.56 .4266081 .0078372 + 764155.44 .4128443 .0076005 + 764247.12 .4294818 .0078561 + 764338.81 .4311709 .0078844 + 764430.50 .4339604 .0079069 + 764522.44 .4328024 .0078352 + 764614.19 .4188224 .0076268 + 764705.94 .4268327 .0077982 + 764797.94 .4289353 .0078259 + 764889.69 .4382068 .0080764 + 764981.56 .4304286 .0078976 + 765073.38 .4339896 .0080033 + 765165.38 .4344144 .0079290 + 765257.25 .4214043 .0077596 + 765349.12 .4327999 .0078655 + 765441.25 .4363998 .0079113 + 765533.12 .4224468 .0076189 + 765625.06 .4192013 .0076256 + 765717.19 .4361621 .0079898 + 765809.19 .4121770 .0075736 + 765901.19 .4234923 .0077946 + 765993.19 .4284518 .0079419 + 766085.38 .4333257 .0079299 + 766177.38 .4237210 .0077550 + 766269.44 .4233644 .0077313 + 766361.69 .4278091 .0078700 + 766453.75 .4276080 .0078290 + 766545.88 .4345174 .0079686 + 766638.00 .4359263 .0079640 + 766730.31 .4250211 .0078012 + 766822.44 .4275302 .0077934 + 766914.62 .4171509 .0076255 + 767007.00 .4354329 .0079198 + 767099.19 .4124587 .0075605 + 767191.38 .4252965 .0078233 + 767283.62 .4212299 .0076999 + 767376.06 .4275977 .0077986 + 767468.31 .4336337 .0078571 + 767560.62 .4234377 .0077820 + 767653.06 .4170725 .0076001 + 767745.38 .4176045 .0075199 + 767837.75 .4063600 .0073419 + 767930.06 .4329965 .0078182 + 768022.62 .4167201 .0075220 + 768115.00 .4336491 .0078339 + 768207.44 .4295881 .0077415 + 768300.00 .4180854 .0075763 + 768392.44 .4270232 .0076791 + 768484.88 .4168170 .0075486 + 768577.38 .4369279 .0078676 + 768670.00 .4177948 .0074630 + 768762.50 .4246231 .0076106 + 768855.06 .4235599 .0076124 + 768947.75 .4260974 .0076512 + 769040.31 .4249518 .0077277 + 769132.88 .4233443 .0077287 + 769225.44 .4212270 .0076277 + 769318.25 .4243551 .0076911 + 769410.88 .4288892 .0078249 + 769503.50 .4332549 .0078393 + 769596.31 .4193277 .0076818 + 769689.00 .4268054 .0077655 + 769781.69 .4333188 .0079138 + 769874.38 .4250892 .0077560 + 769967.25 .4098723 .0075420 + 770060.00 .4182702 .0077219 + 770152.75 .4145012 .0076102 + 770245.69 .4084409 .0074969 + 770338.50 .4274848 .0078029 + 770431.31 .4247394 .0078170 + 770524.12 .4320132 .0079115 + 770617.12 .4152585 .0077445 + 770710.00 .4049886 .0074413 + 770802.81 .4132675 .0076640 + 770895.88 .4096075 .0076347 + 770988.81 .4092447 .0076172 + 771081.75 .4102822 .0076004 + 771174.81 .3898903 .0073482 + 771267.81 .3782069 .0071925 + 771360.75 .3608577 .0069479 + 771453.75 .3375361 .0066212 + 771546.94 .3090357 .0063479 + 771639.94 .2958478 .0060424 + 771733.00 .2818921 .0058657 + 771826.25 .3009251 .0061730 + 771919.31 .3134338 .0063659 + 772012.38 .3559358 .0069386 + 772105.50 .3736375 .0071312 + 772198.81 .3953812 .0072879 + 772291.94 .4139299 .0075848 + 772385.06 .4158974 .0075596 + 772478.44 .4335894 .0078093 + 772571.62 .4201131 .0075767 + 772664.81 .4037327 .0073237 + 772758.06 .4099476 .0073484 + 772851.50 .4303044 .0077564 + 772944.75 .4197694 .0075499 + 773038.00 .4253115 .0076836 + 773131.50 .4044594 .0073632 + 773224.75 .4224215 .0076949 + 773318.12 .4170567 .0075924 + 773411.44 .4233829 .0077641 + 773505.00 .4264681 .0077588 + 773598.38 .4116735 .0075342 + 773691.75 .4173733 .0076936 + 773785.31 .4266395 .0077552 + 773878.75 .4074126 .0074876 + 773972.19 .4262686 .0077948 + 774065.69 .4178821 .0076172 + 774159.31 .4259809 .0077289 + 774252.81 .4061555 .0074186 + 774346.31 .4128747 .0075225 + 774440.00 .4136879 .0074975 + 774533.56 .4066862 .0073911 + 774627.12 .3988128 .0072682 + 774720.69 .4074924 .0074458 + 774814.50 .4027433 .0074161 + 774908.12 .4007470 .0074099 + 775001.75 .4039038 .0074300 + 775095.56 .4007322 .0074300 + 775189.25 .3999842 .0073967 + 775282.88 .4223031 .0077012 + 775376.62 .4146920 .0076789 + 775470.50 .4025800 .0074215 + 775564.25 .3939840 .0072307 + 775658.00 .4179597 .0076627 + 775751.75 .4051973 .0074579 + 775845.69 .4089171 .0075201 + 775939.50 .4143982 .0075574 + 776033.31 .4143005 .0075856 + 776127.31 .4252525 .0078025 + 776221.19 .4073370 .0074941 + 776315.06 .4181771 .0076819 + 776408.94 .4056302 .0075332 + 776503.00 .4031446 .0075393 + 776596.94 .4022492 .0075631 + 776690.88 .4140520 .0077315 + 776785.00 .4043477 .0076273 + 776879.00 .4051089 .0076350 + 776972.94 .4162608 .0077569 + 777066.94 .4008219 .0074609 + 777161.19 .4051261 .0075281 + 777255.19 .4011198 .0074776 + 777349.25 .4006351 .0075164 + 777443.50 .4061987 .0075652 + 777537.62 .3971215 .0074606 + 777631.69 .4034148 .0075966 + 777725.81 .3952858 .0074466 + 777820.12 .4182068 .0078606 + 777914.31 .4156299 .0077317 + 778008.50 .3992528 .0074357 + 778102.88 .3944667 .0073630 + 778197.06 .3932195 .0072778 + 778291.31 .4073375 .0074978 + 778385.56 .4055396 .0074174 + 778480.00 .3900541 .0071666 + 778574.25 .3989968 .0073281 + 778668.56 .4115879 .0075884 + 778763.06 .4088151 .0075853 + 778857.38 .3848068 .0072645 + 778951.75 .4074610 .0076413 + 779046.06 .4157584 .0078709 + 779140.62 .4051323 .0077267 + 779235.06 .4134819 .0079369 + 779329.44 .3924505 .0075033 + 779424.06 .4030766 .0078543 + 779518.50 .3947351 .0076542 + 779613.00 .3976509 .0077649 + 779707.50 .3923763 .0076345 + 779802.12 .3952726 .0076848 + 779896.69 .3939792 .0076469 + 779991.19 .4038517 .0077770 + 780085.94 .4123741 .0078740 + 780180.50 .4049849 .0077525 + 780275.12 .3874147 .0074510 + 780369.69 .3994588 .0076008 + 780464.50 .3825171 .0073522 + 780559.12 .3975083 .0074811 + 780653.81 .3807144 .0071706 + 780748.62 .3871352 .0073913 + 780843.38 .4069177 .0076282 + 780938.06 .3869946 .0072299 + 781032.75 .3851991 .0072695 + 781127.69 .3851086 .0072165 + 781222.44 .3961035 .0074120 + 781317.25 .3986341 .0074112 + 781412.19 .3889031 .0073360 + 781507.00 .4012917 .0075414 + 781601.88 .3993178 .0074796 + 781696.88 .3948009 .0074356 + 781791.75 .3700035 .0069936 + 781886.62 .3820376 .0072567 + 781981.50 .3909993 .0073584 + 782076.62 .4014134 .0074934 + 782171.56 .3837154 .0072120 + 782266.50 .3872043 .0072575 + 782361.62 .3992850 .0074611 + 782456.62 .3806737 .0071781 + 782551.62 .3891940 .0073989 + 782646.62 .3938831 .0074970 + 782741.88 .3761071 .0071724 + 782836.94 .3714183 .0071020 + 782932.00 .3803098 .0072507 + 783027.25 .3687226 .0071376 + 783122.38 .3730199 .0071155 + 783217.50 .3803219 .0072558 + 783312.62 .4014853 .0075545 + 783408.00 .3817201 .0072925 + 783503.12 .3795271 .0072496 + 783598.31 .3778110 .0072001 + 783693.75 .3795918 .0071964 + 783788.94 .3800966 .0071993 + 783884.19 .3706876 .0070640 + 783979.44 .3682061 .0070178 + 784074.94 .3772049 .0071839 + 784170.25 .3776393 .0071978 + 784265.56 .3696665 .0070338 + 784361.06 .3702131 .0070478 + 784456.38 .3730017 .0070970 + 784551.75 .3558531 .0067702 + 784647.12 .3593116 .0068187 + 784742.75 .3622508 .0069113 + 784838.12 .3670304 .0070598 + 784933.56 .3705998 .0070920 + 785029.25 .3534768 .0068842 + 785124.69 .3695683 .0071936 + 785220.19 .3726980 .0072445 + 785315.69 .3641068 .0070467 + 785411.38 .3761931 .0072224 + 785506.94 .3753901 .0071648 + 785602.50 .3714990 .0070582 + 785698.25 .3709399 .0071173 + 785793.88 .3701439 .0070784 + 785889.44 .3562260 .0068951 + 785985.06 .3510526 .0068025 + 786080.94 .3665543 .0070306 + 786176.56 .3664187 .0069235 + 786272.25 .3513764 .0066933 + 786368.12 .3624520 .0068759 + 786463.88 .3541485 .0067814 + 786559.56 .3516488 .0067231 + 786655.31 .3641296 .0069823 + 786751.31 .3480933 .0066449 + 786847.06 .3396204 .0066253 + 786942.88 .3502675 .0067694 + 787038.88 .3602223 .0069758 + 787134.69 .3493482 .0067881 + 787230.56 .3608024 .0069682 + 787326.62 .3468252 .0067165 + 787422.50 .3568780 .0069319 + 787518.44 .3521167 .0067787 + 787614.38 .3499443 .0067486 + 787710.50 .3550788 .0068623 + 787806.44 .3349096 .0065043 + 787902.44 .3524554 .0068866 + 787998.56 .3371185 .0066480 + 788094.62 .3496002 .0068376 + 788190.62 .3383519 .0066999 + 788286.69 .3351611 .0066000 + 788382.94 .3416305 .0067802 + 788479.00 .3435136 .0067609 + 788575.12 .3314618 .0065521 + 788671.44 .3381743 .0067309 + 788767.56 .3285246 .0065468 + 788863.69 .3419863 .0068431 + 788959.88 .3391937 .0067431 + 789056.25 .3352601 .0066533 + 789152.44 .3348402 .0066451 + 789248.69 .3452189 .0068273 + 789345.12 .3210672 .0064488 + 789441.38 .3388508 .0067384 + 789537.62 .3284225 .0065603 + 789633.94 .3317941 .0065599 + 789730.44 .3421016 .0068269 + 789826.75 .3323945 .0066303 + 789923.12 .3369334 .0067186 + 790019.69 .3276482 .0065073 + 790116.06 .3110810 .0062630 + 790212.44 .3213406 .0063948 + 790308.88 .3320766 .0065936 + 790405.50 .3173759 .0063943 + 790501.94 .3218043 .0064403 + 790598.44 .3236336 .0065635 + 790695.06 .3124778 .0063027 + 790791.56 .3241242 .0064958 + 790888.12 .3296985 .0065372 + 790984.69 .3217601 .0064443 + 791081.38 .3054125 .0061199 + 791178.00 .3127343 .0062268 + 791274.56 .3049235 .0061092 + 791371.38 .3040212 .0060610 + 791468.00 .3193328 .0063422 + 791564.62 .3188829 .0063692 + 791661.31 .3115343 .0062205 + 791758.19 .3196670 .0063549 + 791854.88 .3084228 .0061518 + 791951.62 .3056194 .0060808 + 792048.50 .2942825 .0058983 + 792145.31 .3027647 .0060771 + 792242.06 .2987285 .0060266 + 792338.88 .2992080 .0060649 + 792435.81 .2889583 .0058860 + 792532.69 .3060319 .0061239 + 792629.50 .3054409 .0061712 + 792726.56 .2971689 .0059437 + 792823.44 .2927933 .0058919 + 792920.31 .2897678 .0058655 + 793017.44 .2894328 .0057930 + 793114.38 .3009750 .0059269 + 793211.31 .2897413 .0057916 + 793308.25 .2868685 .0058036 + 793405.44 .2938226 .0058813 + 793502.44 .2831110 .0057216 + 793599.50 .2850932 .0057430 + 793696.69 .2827621 .0056900 + 793793.75 .2739895 .0056336 + 793890.81 .2892673 .0060009 + 793987.94 .2866158 .0059182 + 794085.25 .2755034 .0057641 + 794182.38 .2749743 .0057377 + 794279.50 .2779820 .0057730 + 794376.88 .2679918 .0056314 + 794474.00 .2679427 .0056482 + 794571.25 .2666941 .0056025 + 794668.44 .2664195 .0056343 + 794765.88 .2700084 .0056422 + 794863.12 .2655228 .0055749 + 794960.38 .2673358 .0056325 + 795057.88 .2603424 .0055271 + 795155.19 .2597495 .0055024 + 795252.50 .2674800 .0056361 + 795349.81 .2607319 .0055401 + 795447.38 .2519649 .0053957 + 795544.75 .2608175 .0055080 + 795642.19 .2489887 .0053527 + 795739.75 .2499862 .0053488 + 795837.19 .2411630 .0052895 + 795934.62 .2570669 .0055501 + 796032.12 .2446492 .0053338 + 796129.81 .2405969 .0052870 + 796227.31 .2405536 .0053372 + 796324.81 .2494210 .0054734 + 796422.56 .2328089 .0051666 + 796520.06 .2361816 .0052402 + 796617.69 .2456937 .0054192 + 796715.25 .2438101 .0053900 + 796813.06 .2419820 .0052814 + 796910.69 .2351674 .0051429 + 797008.31 .2372110 .0051503 + 797106.19 .2254069 .0049487 + 797203.88 .2264120 .0049946 + 797301.56 .2246508 .0049238 + 797399.31 .2151238 .0047821 + 797497.19 .2244076 .0049418 + 797595.00 .2217546 .0048806 + 797692.75 .2217375 .0049279 + 797790.75 .2158466 .0048398 + 797888.56 .2151300 .0048591 + 797986.38 .2136649 .0048244 + 798084.19 .2107541 .0047760 + 798182.25 .1971115 .0045228 + 798280.12 .1976591 .0045369 + 798378.06 .2066467 .0046904 + 798476.12 .2079265 .0047587 + 798574.06 .1977619 .0045307 + 798672.00 .2049038 .0046789 + 798770.00 .2117727 .0047976 + 798868.19 .2053074 .0047148 + 798966.19 .1989332 .0046416 + 799064.19 .1965378 .0045769 + 799162.44 .1954906 .0046232 + 799260.50 .1854746 .0044124 + 799358.56 .1940313 .0045999 + 799456.88 .1903747 .0045344 + 799555.00 .1806686 .0043897 + 799653.12 .1894584 .0045274 + 799751.25 .1966571 .0046186 + 799849.62 .1881170 .0044666 + 799947.81 .1872608 .0044600 + 800046.00 .1831355 .0043382 + 800144.44 .1838969 .0044357 + 800242.69 .1738348 .0042098 + 800340.94 .1738642 .0042097 + 800439.19 .1768397 .0042803 + 800537.69 .1764334 .0042877 + 800636.00 .1710545 .0042108 + 800734.38 .1637254 .0040599 + 800832.88 .1732672 .0042526 + 800931.25 .1620337 .0040596 + 801029.62 .1649753 .0040767 + 801128.06 .1618511 .0040595 + 801226.69 .1603320 .0040423 + 801325.12 .1666442 .0041502 + 801423.56 .1669112 .0041436 + 801522.25 .1642787 .0041412 + 801620.75 .1543245 .0039540 + 801719.25 .1511706 .0038833 + 801817.75 .1545226 .0039689 + 801916.50 .1548998 .0039703 + 802015.06 .1532916 .0039874 + 802113.69 .1555351 .0040007 + 802212.44 .1452446 .0038176 + 802311.06 .1480633 .0038672 + 802409.75 .1460638 .0038381 + 802508.38 .1427381 .0037951 + 802607.25 .1435083 .0038262 + 802705.94 .1414313 .0037443 + 802804.69 .1345056 .0036574 + 802903.56 .1287567 .0035344 + 803002.38 .1376169 .0037002 + 803101.12 .1287464 .0035728 + 803199.88 .1302814 .0035989 + 803298.88 .1220752 .0034515 + 803397.75 .1207615 .0034490 + 803496.56 .1211778 .0034388 + 803595.62 .1152208 .0033130 + 803694.50 .1192138 .0033796 + 803793.38 .1126344 .0032440 + 803892.31 .1242420 .0034569 + 803991.44 .1131664 .0032858 + 804090.38 .1164830 .0033569 + 804189.38 .1135146 .0033418 + 804288.50 .1094441 .0032813 + 804387.56 .1118824 .0033092 + 804486.56 .1195658 .0034784 + 804585.62 .1167913 .0034056 + 804684.88 .1184975 .0034114 + 804783.94 .1145810 .0034016 + 804883.06 .1038734 .0031775 + 804982.31 .1128559 .0033366 + 805081.50 .1087616 .0032642 + 805180.62 .1099059 .0033394 + 805280.00 .1021799 .0031598 + 805379.19 .1008104 .0031544 + 805478.38 .1010483 .0031248 + 805577.62 .1047969 .0031989 + 805677.06 .1003349 .0030738 + 805776.31 .0969717 .0029962 + 805875.62 .0964035 .0030096 + 805975.06 .0978405 .0030078 + 806074.44 .0916678 .0028985 + 806173.75 .0991144 .0030485 + 806273.12 .0929754 .0029350 + 806372.69 .0983595 .0030458 + 806472.06 .0921500 .0029454 + 806571.50 .0887444 .0028955 + 806671.06 .0900262 .0029212 + 806770.56 .0933340 .0029509 + 806870.00 .0823651 .0027866 + 806969.50 .0820761 .0027734 + 807069.19 .0884617 .0029320 + 807168.69 .0863047 .0028823 + 807268.25 .0803762 .0027458 + 807368.00 .0866348 .0029138 + 807467.56 .0837418 .0028677 + 807567.19 .0811837 .0028112 + 807666.75 .0784499 .0027445 + 807766.62 .0753352 .0027034 + 807866.25 .0804633 .0027980 + 807965.94 .0739199 .0026439 + 808065.81 .0754582 .0027034 + 808165.50 .0742325 .0026556 + 808265.25 .0724846 .0026350 + 808364.94 .0736628 .0026477 + 808464.94 .0685721 .0025862 + 808564.69 .0678372 .0025347 + 808664.50 .0748725 .0026859 + 808764.50 .0698969 .0025804 + 808864.31 .0715477 .0026223 + 808964.19 .0696855 .0025753 + 809064.06 .0722078 .0026352 + 809164.12 .0667586 .0025453 + 809264.06 .0643594 .0024640 + 809364.00 .0630087 .0024439 + 809464.12 .0680609 .0025562 + 809564.06 .0649126 .0024878 + 809664.06 .0641112 .0024589 + 809764.06 .0612843 .0024068 + 809864.31 .0668784 .0025096 + 809964.31 .0584642 .0023256 + 810064.38 .0614965 .0024342 + 810164.62 .0605401 .0024205 + 810264.75 .0608724 .0024521 + 810364.88 .0597486 .0023944 + 810465.00 .0566947 .0023706 + 810565.31 .0619036 .0024864 + 810665.50 .0585174 .0023866 + 810765.69 .0592128 .0024271 + 810866.06 .0558386 .0023408 + 810966.31 .0585903 .0024024 + 811066.56 .0565053 .0023475 + 811166.81 .0573116 .0023567 + 811267.31 .0551058 .0023181 + 811367.56 .0521155 .0022108 + 811467.88 .0538412 .0022325 + 811568.44 .0574171 .0023487 + 811668.81 .0511547 .0022107 + 811769.19 .0549220 .0022702 + 811869.75 .0571182 .0023098 + 811970.12 .0508181 .0021734 + 812070.56 .0515984 .0022080 + 812171.00 .0532941 .0022627 + 812271.69 .0487894 .0021746 + 812372.19 .0507387 .0022071 + 812472.69 .0526099 .0022473 + 812573.38 .0526763 .0022484 + 812673.94 .0541597 .0023181 + 812774.50 .0506906 .0022401 + 812875.06 .0512165 .0022345 + 812975.88 .0488065 .0021813 + 813076.50 .0528971 .0022908 + 813177.12 .0514050 .0022588 + 813277.94 .0537127 .0022868 + 813378.62 .0549290 .0023140 + 813479.31 .0485899 .0021402 + 813580.06 .0523978 .0022398 + 813680.94 .0510501 .0022289 + 813781.69 .0507118 .0022078 + 813882.50 .0483708 .0021359 + 813983.44 .0513828 .0022040 + 814084.25 .0466901 .0021167 + 814185.06 .0521058 .0022268 + 814285.94 .0463130 .0020990 + 814386.94 .0483500 .0021254 + 814487.88 .0479179 .0021305 + 814588.75 .0481459 .0021351 + 814689.88 .0487039 .0021530 + 814790.81 .0468405 .0021197 + 814891.75 .0483924 .0021582 + 814992.69 .0465722 .0021192 + 815093.88 .0507422 .0022188 + 815194.88 .0478091 .0021470 + 815295.94 .0463130 .0020950 + 815397.19 .0478916 .0021448 + 815498.25 .0525559 .0022393 + 815599.31 .0508579 .0021917 + 815700.44 .0485220 .0021543 + 815801.75 .0477585 .0020985 + 815902.88 .0497281 .0021824 + 816004.06 .0500396 .0021736 + 816105.44 .0473064 .0021256 + 816206.62 .0480024 .0021401 + 816307.81 .0494185 .0021876 + 816409.06 .0497180 .0021685 + 816510.50 .0499149 .0021812 + 816611.81 .0504524 .0021680 + 816713.06 .0505087 .0021835 + 816814.56 .0514332 .0022061 + 816915.94 .0509827 .0021733 + 817017.25 .0520828 .0022056 + 817118.62 .0487808 .0021043 + 817220.19 .0483323 .0020932 + 817321.62 .0514393 .0021614 + 817423.06 .0494498 .0021215 + 817524.69 .0515662 .0021583 + 817626.12 .0492275 .0021028 + 817727.62 .0534225 .0022057 + 817829.31 .0503582 .0021511 + 817930.81 .0547533 .0022301 + 818032.38 .0523569 .0021874 + 818133.94 .0556006 .0022869 + 818235.69 .0533781 .0022317 + 818337.31 .0544850 .0022204 + 818438.94 .0523701 .0022310 + 818540.75 .0517878 .0022126 + 818642.38 .0561770 .0023062 + 818744.06 .0503350 .0021645 + 818845.75 .0592693 .0024166 + 818947.69 .0566522 .0023409 + 819049.38 .0566202 .0023747 + 819151.12 .0579280 .0023866 + 819253.06 .0616665 .0024691 + 819354.88 .0557414 .0023552 + 819456.69 .0607129 .0024363 + 819558.50 .0565985 .0023032 + 819660.56 .0572593 .0023294 + 819762.38 .0577486 .0023090 + 819864.25 .0588193 .0023105 + 819966.38 .0574779 .0022780 + 820068.31 .0653033 .0024444 + 820170.25 .0632465 .0023926 + 820272.19 .0647917 .0024682 + 820374.38 .0635249 .0024193 + 820476.38 .0613818 .0023587 + 820578.38 .0575720 .0022802 + 820680.56 .0648238 .0024150 + 820782.62 .0658965 .0024269 + 820884.69 .0616139 .0023617 + 820986.81 .0647797 .0024103 + 821089.12 .0638854 .0023829 + 821191.25 .0649026 .0024226 + 821293.38 .0653056 .0024308 + 821395.75 .0690883 .0025274 + 821497.94 .0665646 .0024892 + 821600.12 .0669405 .0024962 + 821702.31 .0692463 .0025305 + 821804.75 .0707797 .0025502 + 821907.06 .0715195 .0025842 + 822009.31 .0704562 .0025409 + 822111.81 .0717382 .0025703 + 822214.12 .0716721 .0025605 + 822316.44 .0721044 .0025915 + 822418.81 .0714526 .0025624 + 822521.38 .0765727 .0026578 + 822623.81 .0794405 .0026952 + 822726.19 .0737173 .0025994 + 822828.81 .0741998 .0026031 + 822931.25 .0743624 .0026105 + 823033.75 .0756696 .0026234 + 823136.25 .0719033 .0025462 + 823238.94 .0745401 .0026029 + 823341.50 .0761272 .0026457 + 823444.00 .0726773 .0025608 + 823546.81 .0794870 .0027148 + 823649.38 .0743158 .0025905 + 823752.00 .0843781 .0027790 + 823854.62 .0764133 .0026464 + 823957.44 .0825240 .0027523 + 824060.12 .0887910 .0028537 + 824162.81 .0872959 .0028542 + 824265.69 .0815117 .0027447 + 824368.38 .0857366 .0028145 + 824471.12 .0848697 .0028028 + 824574.12 .0824980 .0027461 + 824676.88 .0834050 .0027385 + 824779.69 .0883161 .0028100 + 824882.50 .0836467 .0027534 + 824985.50 .0864182 .0027790 + 825088.38 .0854725 .0027566 + 825191.25 .0861527 .0027787 + 825294.31 .0885581 .0028120 + 825397.25 .0864918 .0027979 + 825500.19 .0918129 .0028784 + 825603.12 .0878416 .0028213 + 825706.31 .0913221 .0028792 + 825809.31 .0943753 .0029357 + 825912.31 .0960047 .0029366 + 826015.56 .0904275 .0028652 + 826118.56 .0973114 .0029877 + 826221.62 .0948033 .0029747 + 826324.75 .0942637 .0029504 + 826428.06 .0986143 .0030099 + 826531.19 .0999363 .0030459 + 826634.31 .0969215 .0029665 + 826737.69 .0993217 .0030270 + 826840.88 .0981395 .0030064 + 826944.06 .1058851 .0031820 + 827047.25 .1030779 .0031325 + 827150.69 .1017503 .0031039 + 827254.00 .1032678 .0031240 + 827357.25 .1015701 .0030513 + 827460.75 .1007447 .0030674 + 827564.06 .1023469 .0031160 + 827667.44 .1049544 .0031154 + 827770.75 .1033359 .0031384 + 827874.31 .1020088 .0030940 + 827977.75 .1030772 .0030868 + 828081.12 .1129674 .0032967 + 828184.81 .1087099 .0031997 + 828288.25 .1112793 .0032682 + 828391.69 .1091135 .0032495 + 828495.19 .1116189 .0032520 + 828598.94 .1124887 .0032712 + 828702.44 .1146268 .0033562 + 828806.00 .1209731 .0034413 + 828909.75 .1128224 .0032735 + 829013.38 .1159652 .0033416 + 829116.94 .1134382 .0032676 + 829220.62 .1152721 .0033075 + 829324.44 .1222401 .0034494 + 829428.12 .1275754 .0035597 + 829531.81 .1185289 .0033661 + 829635.69 .1139285 .0032840 + 829739.44 .1276126 .0035042 + 829843.19 .1187214 .0033310 + 829946.94 .1253754 .0034343 + 830050.94 .1276605 .0034726 + 830154.75 .1177464 .0033410 + 830258.56 .1305237 .0035088 + 830362.56 .1241506 .0033979 + 830466.44 .1284398 .0034725 + 830570.31 .1245897 .0034312 + 830674.44 .1302252 .0035496 + 830778.25 .1306972 .0035295 + 830882.31 .1209713 .0033601 + 830986.25 .1349666 .0036339 + 831090.31 .1290544 .0035299 + 831194.31 .1302153 .0035280 + 831298.44 .1285322 .0034994 + 831402.62 .1338713 .0035838 + 831506.62 .1348373 .0035646 + 831610.81 .1352918 .0035808 + 831714.94 .1286360 .0034546 + 831819.12 .1341971 .0035767 + 831923.25 .1301627 .0034849 + 832027.56 .1281299 .0035003 + 832131.81 .1306516 .0035292 + 832236.00 .1347094 .0035937 + 832340.31 .1276726 .0034656 + 832444.56 .1308594 .0035073 + 832548.94 .1373586 .0035712 + 832653.19 .1381862 .0036594 + 832757.56 .1363965 .0035934 + 832862.00 .1465647 .0037931 + 832966.31 .1400346 .0036395 + 833070.75 .1467220 .0037965 + 833175.12 .1591881 .0039766 + 833279.62 .1470721 .0037913 + 833384.06 .1530129 .0039633 + 833488.56 .1519879 .0039185 + 833593.12 .1481670 .0038751 + 833697.62 .1536573 .0039421 + 833802.19 .1493126 .0038305 + 833906.69 .1527665 .0038542 + 834011.31 .1529112 .0039078 + 834116.00 .1634360 .0040238 + 834220.56 .1560715 .0039226 + 834325.25 .1559049 .0038938 + 834429.81 .1603421 .0040585 + 834534.56 .1546438 .0039015 + 834639.19 .1591086 .0039852 + 834744.00 .1569207 .0039151 + 834848.75 .1602057 .0039340 + 834953.44 .1607881 .0039545 + 835058.31 .1584922 .0039033 + 835163.06 .1644295 .0039809 + 835267.88 .1610005 .0039697 + 835372.69 .1640505 .0040178 + 835477.56 .1652469 .0040277 + 835582.50 .1652636 .0040921 + 835687.38 .1622109 .0040375 + 835792.31 .1666444 .0041429 + 835897.19 .1680948 .0041809 + 836002.19 .1681565 .0041479 + 836107.12 .1748083 .0042570 + 836212.19 .1676226 .0041520 + 836317.25 .1698895 .0040952 + 836422.25 .1746557 .0042212 + 836527.31 .1707591 .0041541 + 836632.38 .1700516 .0041303 + 836737.50 .1792615 .0043088 + 836842.62 .1699557 .0040660 + 836947.75 .1711349 .0041211 + 837052.94 .1774417 .0042275 + 837158.06 .1815621 .0042862 + 837263.31 .1685303 .0040542 + 837368.44 .1783673 .0042328 + 837473.75 .1775150 .0042276 + 837579.06 .1772646 .0042228 + 837684.25 .1755052 .0042083 + 837789.62 .1767820 .0042322 + 837894.88 .1736584 .0042297 + 838000.25 .1827695 .0042926 + 838105.56 .1846442 .0043985 + 838210.94 .1789995 .0042848 + 838316.44 .1840436 .0043977 + 838421.75 .1832051 .0043839 + 838527.25 .1807742 .0042646 + 838632.62 .1778174 .0042458 + 838738.19 .1795195 .0042433 + 838843.62 .1805382 .0042466 + 838949.19 .1873192 .0043784 + 839054.75 .1780338 .0042516 + 839160.25 .1808990 .0042597 + 839265.88 .1874885 .0043929 + 839371.38 .2004497 .0046371 + 839477.06 .1930017 .0044421 + 839582.62 .1863159 .0043414 + 839688.31 .1900996 .0044348 + 839794.06 .1922591 .0044822 + 839899.69 .1889232 .0043675 + 840005.44 .1938406 .0044683 + 840111.12 .1958442 .0044784 + 840216.94 .1947633 .0043993 + 840322.75 .1928912 .0043992 + 840428.50 .1982477 .0044649 + 840534.38 .1943545 .0043856 + 840640.12 .1942074 .0043936 + 840746.00 .1993479 .0044970 + 840851.81 .2022855 .0045392 + 840957.75 .1961884 .0045014 + 841063.75 .2011209 .0045964 + 841169.62 .1879591 .0043295 + 841275.62 .1960648 .0044511 + 841381.56 .1962319 .0044657 + 841487.56 .2073169 .0047118 + 841593.56 .2027690 .0046246 + 841699.62 .2069325 .0046578 + 841805.69 .2018580 .0045782 + 841911.75 .1994065 .0044943 + 842017.88 .1980854 .0044332 + 842123.94 .2028946 .0045631 + 842230.12 .1919209 .0043265 + 842336.19 .2016820 .0045418 + 842442.44 .2046429 .0045390 + 842548.69 .1989950 .0044838 + 842654.81 .1976510 .0044718 + 842761.12 .2035645 .0045469 + 842867.31 .1915935 .0043660 + 842973.62 .2014467 .0045095 + 843079.88 .1909809 .0043657 + 843186.25 .2040041 .0045446 + 843292.62 .1962611 .0044146 + 843398.88 .2030143 .0045365 + 843505.31 .1977794 .0044640 + 843611.69 .2010866 .0045131 + 843718.12 .1963650 .0044265 + 843824.62 .1965266 .0044314 + 843931.00 .1966553 .0045072 + 844037.50 .1834484 .0042791 + 844144.00 .1776889 .0041640 + 844250.56 .1771908 .0041846 + 844357.00 .1752226 .0041453 + 844463.62 .1696829 .0040668 + 844570.25 .1569721 .0039088 + 844676.75 .1423087 .0036922 + 844783.44 .1243831 .0034228 + 844890.00 .1056451 .0030938 + 844996.75 .0924566 .0029173 + 845103.38 .0823075 .0027340 + 845210.06 .0762699 .0026552 + 845316.88 .0709361 .0025502 + 845423.56 .0867961 .0028581 + 845530.38 .1014255 .0031143 + 845637.06 .1231207 .0034348 + 845743.94 .1371737 .0036891 + 845850.69 .1511079 .0038491 + 845957.56 .1683336 .0040896 + 846064.44 .1777251 .0042023 + 846171.31 .1852515 .0043040 + 846278.25 .2018157 .0045332 + 846385.12 .1978318 .0044569 + 846492.06 .2130723 .0047379 + 846599.12 .2078124 .0045893 + 846706.00 .2047771 .0045276 + 846813.06 .2023543 .0044753 + 846920.06 .2123286 .0046434 + 847027.12 .2216447 .0048073 + 847134.12 .2203815 .0047155 + 847241.25 .2086739 .0045861 + 847348.44 .2209735 .0047291 + 847455.50 .2270165 .0048215 + 847562.69 .2256565 .0048528 + 847669.75 .2214922 .0048166 + 847777.00 .2280016 .0048900 + 847884.12 .2264573 .0048945 + 847991.44 .2208408 .0048047 + 848098.75 .2330353 .0050066 + 848205.94 .2175104 .0047080 + 848313.25 .2280075 .0048812 + 848420.50 .2263971 .0048341 + 848527.88 .2329455 .0050102 + 848635.19 .2330226 .0049305 + 848742.56 .2250172 .0047896 + 848850.00 .2268163 .0048723 + 848957.38 .2254025 .0048402 + 849064.88 .2262815 .0048376 + 849172.25 .2322394 .0049242 + 849279.75 .2315696 .0049302 + 849387.19 .2308539 .0049442 + 849494.75 .2338260 .0050418 + 849602.31 .2355982 .0050454 + 849709.81 .2300311 .0049347 + 849817.44 .2312331 .0049723 + 849925.00 .2326389 .0049797 + 850032.62 .2271626 .0048543 + 850140.31 .2353212 .0050199 + 850247.94 .2370118 .0050054 + 850355.62 .2416472 .0050966 + 850463.25 .2376584 .0050769 + 850571.06 .2420359 .0051092 + 850678.69 .2483456 .0051514 + 850786.50 .2392740 .0049779 + 850894.31 .2438096 .0050467 + 851002.06 .2407678 .0050104 + 851109.94 .2453078 .0050815 + 851217.75 .2486348 .0051771 + 851325.62 .2425165 .0050505 + 851433.44 .2603630 .0053954 + 851541.38 .2573403 .0053844 + 851649.38 .2461626 .0052124 + 851757.25 .2366925 .0050755 + 851865.25 .2441574 .0051662 + 851973.19 .2483388 .0052496 + 852081.25 .2566158 .0053653 + 852189.19 .2513759 .0052135 + 852297.31 .2616616 .0054557 + 852405.38 .2588582 .0053350 + 852513.44 .2542413 .0052520 + 852621.56 .2461748 .0051006 + 852729.62 .2560814 .0052484 + 852837.88 .2602571 .0053100 + 852945.94 .2652418 .0053797 + 853054.19 .2575867 .0052518 + 853162.44 .2698435 .0054777 + 853270.62 .2481820 .0051237 + 853378.94 .2606962 .0053288 + 853487.12 .2648923 .0053968 + 853595.44 .2569088 .0052656 + 853703.81 .2642174 .0053497 + 853812.06 .2619917 .0053075 + 853920.50 .2649584 .0053475 + 854028.81 .2628257 .0053361 + 854137.25 .2630552 .0053369 + 854245.62 .2648362 .0053672 + 854354.06 .2681036 .0053759 + 854462.56 .2672646 .0054028 + 854571.00 .2663172 .0053731 + 854679.56 .2674019 .0054342 + 854788.00 .2627849 .0053253 + 854896.62 .2674200 .0053861 + 855005.12 .2610733 .0052704 + 855113.75 .2718031 .0054693 + 855222.38 .2626060 .0053362 + 855330.94 .2625670 .0053277 + 855439.62 .2714720 .0054287 + 855548.25 .2672011 .0053915 + 855656.94 .2724693 .0054698 + 855765.62 .2629347 .0053063 + 855874.38 .2701598 .0054236 + 855983.19 .2667536 .0053602 + 856091.88 .2661696 .0053630 + 856200.69 .2735180 .0055154 + 856309.44 .2651595 .0053537 + 856418.31 .2638887 .0054151 + 856527.12 .2712166 .0055201 + 856636.06 .2590019 .0052624 + 856745.00 .2679176 .0054295 + 856853.81 .2692758 .0053853 + 856962.81 .2794923 .0056143 + 857071.69 .2722229 .0054633 + 857180.75 .2743307 .0054845 + 857289.75 .2808625 .0056233 + 857398.75 .2753849 .0054363 + 857507.81 .2654640 .0053060 + 857616.81 .2742892 .0054606 + 857725.94 .2770344 .0054996 + 857835.00 .2696157 .0053917 + 857944.12 .2689504 .0054369 + 858053.31 .2784204 .0055764 + 858162.44 .2775420 .0055485 + 858271.69 .2737932 .0054721 + 858380.81 .2818054 .0056000 + 858490.06 .2834993 .0056301 + 858599.25 .2784082 .0055754 + 858708.56 .2819524 .0055745 + 858817.94 .2778041 .0055307 + 858927.19 .2754201 .0054043 + 859036.56 .2764906 .0054827 + 859145.81 .2644190 .0052661 + 859255.25 .2802993 .0055395 + 859364.56 .2776907 .0054632 + 859474.06 .2780471 .0055296 + 859583.50 .2802540 .0055001 + 859692.94 .2846175 .0055867 + 859802.44 .2806288 .0055310 + 859911.88 .2820967 .0055407 + 860021.44 .2861046 .0056611 + 860131.00 .2839828 .0055881 + 860240.50 .2822521 .0056051 + 860350.19 .2743740 .0055194 + 860459.69 .2784815 .0055441 + 860569.38 .2781458 .0055708 + 860678.94 .2978877 .0058476 + 860788.69 .2859492 .0056905 + 860898.38 .2814319 .0055364 + 861008.06 .2799253 .0055500 + 861117.81 .2839133 .0056063 + 861227.50 .2891306 .0056781 + 861337.31 .2909145 .0056580 + 861447.06 .2859381 .0055596 + 861556.88 .2899935 .0056723 + 861666.81 .2900120 .0057116 + 861776.56 .2774263 .0055006 + 861886.50 .2803051 .0055331 + 861996.31 .2827349 .0055851 + 862106.31 .2835726 .0055941 + 862216.19 .2728083 .0053889 + 862326.19 .2918859 .0057155 + 862436.19 .2861979 .0056521 + 862546.12 .2976187 .0058053 + 862656.19 .2962566 .0057947 + 862766.19 .2923037 .0057368 + 862876.31 .2920492 .0056917 + 862986.31 .2910302 .0056671 + 863096.50 .2946990 .0056707 + 863206.62 .2905312 .0056970 + 863316.75 .2918186 .0057257 + 863426.94 .2921383 .0056973 + 863537.06 .2978284 .0058329 + 863647.38 .3002958 .0058560 + 863757.62 .3002020 .0058835 + 863867.81 .2962581 .0057736 + 863978.12 .2830022 .0055206 + 864088.38 .2914698 .0056649 + 864198.75 .2905959 .0056803 + 864309.00 .2971329 .0057509 + 864419.44 .2959220 .0057101 + 864529.88 .3060583 .0058909 + 864640.19 .3013526 .0058198 + 864750.69 .2905061 .0056848 + 864861.06 .2995492 .0058449 + 864971.56 .2960272 .0058184 + 865082.00 .3021192 .0059065 + 865192.56 .2979258 .0058702 + 865303.12 .2973112 .0058516 + 865413.62 .2875631 .0056910 + 865524.19 .2961920 .0058499 + 865634.75 .2983323 .0058849 + 865745.44 .3067435 .0060537 + 865856.00 .3007306 .0059302 + 865966.69 .2975274 .0058648 + 866077.44 .3064461 .0060406 + 866188.06 .2864120 .0056277 + 866298.81 .2988905 .0058145 + 866409.50 .2994216 .0058858 + 866520.31 .3056429 .0060015 + 866631.00 .2947028 .0057666 + 866741.88 .2888393 .0056766 + 866852.75 .2946149 .0057478 + 866963.56 .3006990 .0058852 + 867074.44 .2915507 .0057152 + 867185.25 .3065318 .0059932 + 867296.25 .2964192 .0057520 + 867407.19 .2972716 .0057222 + 867518.12 .2941819 .0056752 + 867629.12 .3005014 .0057368 + 867740.06 .3002356 .0058532 + 867851.12 .2974351 .0057414 + 867962.12 .2977629 .0056874 + 868073.19 .2993299 .0057621 + 868184.31 .2990506 .0057907 + 868295.38 .3116991 .0059303 + 868406.56 .2953316 .0056565 + 868517.62 .3110056 .0059128 + 868628.88 .3032917 .0057991 + 868740.00 .2890796 .0055821 + 868851.25 .2985503 .0057517 + 868962.50 .3033515 .0057232 + 869073.69 .3014071 .0057912 + 869185.00 .2946652 .0056770 + 869296.25 .3039871 .0057883 + 869407.62 .2957465 .0057161 + 869518.88 .2987050 .0057693 + 869630.31 .2966316 .0057489 + 869741.75 .3031401 .0058245 + 869853.06 .2898928 .0056413 + 869964.56 .3063814 .0058896 + 870075.94 .2979425 .0057614 + 870187.44 .3030629 .0058505 + 870299.00 .2989596 .0058096 + 870410.44 .3057640 .0058693 + 870522.00 .2969924 .0057173 + 870633.50 .3069968 .0058443 + 870745.12 .2979279 .0056980 + 870856.62 .2994189 .0057536 + 870968.31 .3020563 .0058100 + 871080.00 .3113364 .0058883 + 871191.62 .3111739 .0059746 + 871303.31 .3103302 .0059678 + 871414.94 .3046489 .0058620 + 871526.75 .2845651 .0055125 + 871638.44 .2953339 .0057188 + 871750.25 .2921465 .0056281 + 871862.06 .2900407 .0056156 + 871973.81 .2804517 .0055533 + 872085.69 .2667769 .0053117 + 872197.50 .2535106 .0051811 + 872309.44 .2559153 .0052338 + 872421.25 .2577614 .0052628 + 872533.19 .2698964 .0054370 + 872645.19 .2691247 .0053687 + 872757.06 .2960286 .0057147 + 872869.12 .3054132 .0058270 + 872981.06 .3121247 .0059546 + 873093.12 .3211226 .0061487 + 873205.12 .3188337 .0061358 + 873317.25 .3061019 .0058812 + 873429.38 .3151785 .0060252 + 873541.44 .3189876 .0060607 + 873653.62 .3140406 .0060204 + 873765.69 .3214404 .0061749 + 873877.94 .3110870 .0060001 + 873990.19 .3086348 .0059210 + 874102.31 .3133787 .0059728 + 874214.62 .3062835 .0057711 + 874326.81 .3149340 .0059801 + 874439.12 .3073468 .0058653 + 874551.38 .3043511 .0057902 + 874663.75 .3140560 .0060287 + 874776.19 .3162808 .0060186 + 874888.50 .3258046 .0061910 + 875000.94 .3209079 .0061490 + 875113.25 .3142973 .0060140 + 875225.75 .3267675 .0062213 + 875338.12 .3224850 .0061475 + 875450.69 .3296694 .0063003 + 875563.25 .3239309 .0060916 + 875675.69 .3277543 .0061954 + 875788.25 .3069896 .0059212 + 875900.75 .3229897 .0061345 + 876013.44 .3151248 .0060076 + 876125.94 .3219376 .0060168 + 876238.62 .3312404 .0062194 + 876351.31 .3254640 .0061543 + 876463.94 .3334880 .0062301 + 876576.69 .3394815 .0063535 + 876689.38 .3312416 .0062426 + 876802.12 .3247446 .0061425 + 876914.88 .3234499 .0060754 + 877027.69 .3278335 .0061254 + 877140.50 .3324460 .0061601 + 877253.31 .3277579 .0062019 + 877366.19 .3186120 .0060327 + 877479.00 .3295834 .0061606 + 877591.94 .3303384 .0061635 + 877704.88 .3131706 .0058759 + 877817.75 .3201982 .0060009 + 877930.81 .3253510 .0060769 + 878043.69 .3198260 .0060346 + 878156.75 .3206113 .0060340 + 878269.69 .3302801 .0062325 + 878382.81 .3398560 .0062918 + 878495.94 .3258630 .0060611 + 878608.94 .3312208 .0061173 + 878722.12 .3307598 .0061435 + 878835.19 .3264401 .0060711 + 878948.38 .3346194 .0062662 + 879061.50 .3272674 .0061453 + 879174.75 .3161851 .0059567 + 879288.00 .3153979 .0060366 + 879401.19 .3238327 .0062084 + 879514.50 .3234143 .0061670 + 879627.75 .3053891 .0058545 + 879741.06 .3181822 .0060210 + 879854.38 .3165714 .0060110 + 879967.75 .3051527 .0057745 + 880081.19 .3182566 .0060122 + 880194.50 .3139675 .0059782 + 880307.94 .3245583 .0061236 + 880421.31 .3303096 .0061828 + 880534.88 .3317965 .0061750 + 880648.38 .3303555 .0061577 + 880761.81 .3401130 .0063290 + 880875.38 .3343084 .0061547 + 880988.88 .3330152 .0061345 + 881102.50 .3323261 .0061542 + 881216.06 .3343381 .0061773 + 881329.69 .3405705 .0062232 + 881443.38 .3335123 .0061242 + 881557.00 .3355952 .0061987 + 881670.69 .3361618 .0062422 + 881784.38 .3376747 .0062549 + 881898.12 .3370808 .0062858 + 882011.81 .3373854 .0062828 + 882125.62 .3385521 .0062899 + 882239.44 .3422714 .0063427 + 882353.19 .3313553 .0060873 + 882467.12 .3454740 .0063603 + 882580.88 .3435579 .0062400 + 882694.81 .3418630 .0062710 + 882808.69 .3394770 .0062166 + 882922.62 .3293464 .0060496 + 883036.62 .3435491 .0063103 + 883150.50 .3366265 .0062307 + 883264.56 .3385108 .0062794 + 883378.50 .3324309 .0061672 + 883492.56 .3384569 .0062619 + 883606.56 .3466558 .0063719 + 883720.69 .3422480 .0062529 + 883834.88 .3521494 .0064161 + 883948.94 .3439603 .0063469 + 884063.12 .3494205 .0064004 + 884177.19 .3431032 .0062819 + 884291.44 .3425693 .0062857 + 884405.69 .3491878 .0064176 + 884519.88 .3436933 .0063067 + 884634.19 .3404885 .0063180 + 884748.38 .3401895 .0062459 + 884862.75 .3437205 .0063369 + 884977.00 .3480299 .0064250 + 885091.38 .3575967 .0065710 + 885205.81 .3494602 .0064750 + 885320.12 .3459608 .0064141 + 885434.56 .3468718 .0064466 + 885548.94 .3381778 .0062483 + 885663.44 .3546775 .0065066 + 885777.88 .3446166 .0063633 + 885892.44 .3493127 .0064448 + 886007.00 .3511783 .0065184 + 886121.50 .3473690 .0064408 + 886236.06 .3428188 .0063274 + 886350.62 .3357086 .0062180 + 886465.25 .3650261 .0067225 + 886579.81 .3565499 .0066441 + 886694.56 .3485489 .0064220 + 886809.25 .3609241 .0066251 + 886923.88 .3589918 .0065836 + 887038.69 .3517472 .0064456 + 887153.38 .3471934 .0063085 + 887268.19 .3457920 .0063019 + 887382.88 .3438534 .0062956 + 887497.75 .3496683 .0063704 + 887612.62 .3579247 .0065131 + 887727.44 .3537252 .0064516 + 887842.38 .3501276 .0063685 + 887957.19 .3491973 .0063695 + 888072.19 .3468021 .0062505 + 888187.12 .3598089 .0064688 + 888302.06 .3682224 .0066540 + 888417.06 .3496784 .0063398 + 888532.06 .3495829 .0063712 + 888647.12 .3576910 .0064566 + 888762.12 .3496760 .0062966 + 888877.25 .3724602 .0066981 + 888992.38 .3608617 .0065116 + 889107.44 .3511468 .0063089 + 889222.62 .3615060 .0064993 + 889337.75 .3529684 .0063484 + 889453.00 .3658697 .0065622 + 889568.12 .3471348 .0063230 + 889683.44 .3634538 .0065535 + 889798.75 .3556854 .0064981 + 889913.94 .3539936 .0064782 + 890029.31 .3580440 .0064871 + 890144.56 .3709329 .0067071 + 890259.94 .3665338 .0066437 + 890375.25 .3546696 .0064348 + 890490.69 .3603785 .0065395 + 890606.19 .3515633 .0063369 + 890721.50 .3479160 .0063195 + 890837.06 .3408022 .0061776 + 890952.44 .3656595 .0065936 + 891068.00 .3668267 .0065671 + 891183.50 .3535902 .0063457 + 891299.06 .3682464 .0066058 + 891414.69 .3681658 .0065983 + 891530.25 .3647600 .0065346 + 891645.88 .3651664 .0065093 + 891761.44 .3639863 .0065323 + 891877.19 .3626963 .0065125 + 891992.88 .3679837 .0066002 + 892108.56 .3731396 .0066603 + 892224.31 .3635117 .0065028 + 892340.00 .3572316 .0063947 + 892455.81 .3659011 .0065071 + 892571.56 .3613933 .0064224 + 892687.44 .3775860 .0067409 + 892803.31 .3681636 .0065488 + 892919.12 .3516602 .0063558 + 893035.06 .3714732 .0066749 + 893150.94 .3674482 .0066361 + 893266.88 .3602264 .0065395 + 893382.81 .3701225 .0067465 + 893498.81 .3731783 .0067388 + 893614.88 .3687838 .0066916 + 893730.81 .3657250 .0065977 + 893846.94 .3616284 .0065078 + 893962.94 .3633138 .0065102 + 894079.06 .3585340 .0064160 + 894195.12 .3812590 .0068379 + 894311.31 .3771284 .0067645 + 894427.50 .3641603 .0065667 + 894543.62 .3612141 .0064584 + 894659.88 .3737535 .0066734 + 894776.00 .3698611 .0066496 + 894892.31 .3570371 .0063937 + 895008.62 .3728145 .0066328 + 895124.88 .3732103 .0066560 + 895241.25 .3728088 .0066891 + 895357.50 .3649356 .0065435 + 895473.94 .3815941 .0067756 + 895590.25 .3782846 .0066888 + 895706.69 .3672580 .0065570 + 895823.19 .3633176 .0064244 + 895939.56 .3785960 .0067145 + 896056.12 .3902565 .0069039 + 896172.56 .3843366 .0068087 + 896289.12 .3836748 .0067947 + 896405.56 .3903006 .0069679 + 896522.19 .3813739 .0067440 + 896638.81 .3784068 .0067324 + 896755.38 .3834911 .0067076 + 896872.06 .3819754 .0067257 + 896988.69 .3882641 .0068585 + 897105.38 .3675468 .0064974 + 897222.06 .3743565 .0065810 + 897338.81 .3783359 .0066584 + 897455.62 .3908138 .0068336 + 897572.31 .3822856 .0066706 + 897689.19 .3738935 .0065504 + 897805.94 .3868469 .0068024 + 897922.81 .3912044 .0067905 + 898039.62 .3838497 .0067830 + 898156.56 .3742644 .0065588 + 898273.50 .3800796 .0067052 + 898390.38 .3868380 .0067890 + 898507.38 .3954800 .0069656 + 898624.25 .3962051 .0069508 + 898741.31 .3953777 .0069018 + 898858.38 .3859694 .0067670 + 898975.38 .3944649 .0069435 + 899092.50 .3900492 .0068573 + 899209.50 .3804461 .0066396 + 899326.69 .3776889 .0066287 + 899443.75 .3852835 .0066543 + 899560.94 .3855699 .0067104 + 899678.19 .4072964 .0070375 + 899795.31 .3979322 .0068626 + 899912.62 .3934427 .0068794 + 900029.81 .4029025 .0070871 + 900147.12 .3980315 .0069562 + 900264.38 .3873867 .0068618 + 900381.75 .3926688 .0069532 + 900499.12 .4031206 .0070410 + 900616.44 .3873453 .0068416 + 900733.88 .4028644 .0070830 + 900851.19 .3994120 .0070146 + 900968.69 .4172585 .0072501 + 901086.12 .4054488 .0071378 + 901203.62 .4122767 .0071716 + 901321.19 .3974695 .0069660 + 901438.62 .4078416 .0071944 + 901556.25 .4168083 .0073222 + 901673.75 .4111516 .0072064 + 901791.38 .4077632 .0071607 + 901908.94 .4023622 .0070518 + 902026.62 .4083660 .0071599 + 902144.38 .3998690 .0069446 + 902262.00 .4156498 .0072284 + 902379.75 .4071281 .0070539 + 902497.44 .4105814 .0070364 + 902615.25 .3984104 .0069223 + 902733.06 .4104069 .0070936 + 902850.81 .4061670 .0069737 + 902968.69 .4081288 .0070654 + 903086.44 .4137890 .0071491 + 903204.38 .4236919 .0072674 + 903322.19 .4192093 .0071856 + 903440.19 .4134411 .0071251 + 903558.19 .4049574 .0069571 + 903676.06 .4106665 .0070984 + 903794.12 .4158666 .0071329 + 903912.06 .4015834 .0069961 + 904030.12 .4123606 .0070854 + 904148.12 .4160399 .0071513 + 904266.25 .4258598 .0073532 + 904384.44 .4151442 .0071742 + 904502.50 .4349934 .0074063 + 904620.69 .4220467 .0071599 + 904738.81 .4347310 .0072641 + 904857.06 .4266177 .0072159 + 904975.19 .4293135 .0072796 + 905093.50 .4236692 .0072215 + 905211.81 .4057812 .0069797 + 905330.00 .4124761 .0070471 + 905448.38 .4417645 .0075116 + 905566.62 .4146293 .0071610 + 905685.06 .4205045 .0072679 + 905803.50 .4187972 .0072154 + 905921.81 .4221032 .0072038 + 906040.31 .4256824 .0072778 + 906158.69 .4004092 .0069715 + 906277.25 .4161955 .0071855 + 906395.69 .4001205 .0069375 + 906514.25 .4104329 .0070966 + 906632.81 .3970481 .0068601 + 906751.31 .4024021 .0069493 + 906870.00 .4083755 .0070581 + 906988.50 .4018019 .0070026 + 907107.19 .3816314 .0066062 + 907225.81 .3840887 .0067658 + 907344.56 .3752384 .0065743 + 907463.31 .3585471 .0064516 + 907581.94 .3635752 .0065463 + 907700.75 .3474986 .0063721 + 907819.50 .3067919 .0058164 + 907938.31 .3120272 .0058663 + 908057.06 .2919138 .0056257 + 908176.00 .2685376 .0053078 + 908294.94 .2587751 .0052040 + 908413.75 .2563726 .0051782 + 908532.69 .2279844 .0047386 + 908651.56 .2078896 .0045017 + 908770.62 .1925213 .0043107 + 908889.50 .1654678 .0039316 + 909008.56 .1534311 .0037816 + 909127.69 .1305961 .0034438 + 909246.69 .1175914 .0032662 + 909365.81 .1094885 .0031675 + 909484.81 .1041717 .0030965 + 909604.00 .0885816 .0028082 + 909723.19 .0805293 .0026565 + 909842.31 .0743594 .0025345 + 909961.56 .0633468 .0023108 + 910080.75 .0647868 .0023352 + 910200.00 .0625887 .0022683 + 910319.25 .0608789 .0022315 + 910438.56 .0597517 .0022181 + 910557.94 .0582272 .0021740 + 910677.19 .0627127 .0022976 + 910796.62 .0638335 .0022966 + 910915.94 .0626221 .0022549 + 911035.44 .0647264 .0023023 + 911154.75 .0680023 .0023535 + 911274.31 .0698167 .0024182 + 911393.81 .0745036 .0025013 + 911513.25 .0799036 .0025977 + 911632.81 .0772402 .0025505 + 911752.31 .0850362 .0026912 + 911871.94 .0918321 .0027908 + 911991.50 .0913985 .0028003 + 912111.12 .0953328 .0028526 + 912230.81 .1041348 .0029845 + 912350.44 .1047258 .0030217 + 912470.19 .1122043 .0031403 + 912589.81 .1126438 .0031290 + 912709.62 .1172218 .0032011 + 912829.31 .1209856 .0032584 + 912949.19 .1258643 .0033233 + 913069.00 .1323543 .0034231 + 913188.81 .1387054 .0035436 + 913308.69 .1299214 .0034185 + 913428.50 .1412757 .0035560 + 913548.44 .1360650 .0034392 + 913668.44 .1475778 .0036371 + 913788.31 .1570866 .0037635 + 913908.38 .1474892 .0035805 + 914028.31 .1537602 .0036674 + 914148.38 .1600116 .0037726 + 914268.38 .1615364 .0038350 + 914388.44 .1662354 .0038644 + 914508.62 .1577193 .0037104 + 914628.69 .1671143 .0039294 + 914748.88 .1716422 .0039571 + 914868.94 .1754336 .0040224 + 914989.19 .1766844 .0040341 + 915109.31 .1833020 .0041617 + 915229.62 .1774401 .0040316 + 915349.94 .1806221 .0040738 + 915470.12 .1847629 .0041502 + 915590.50 .1868096 .0041786 + 915710.75 .1945100 .0043154 + 915831.19 .1870446 .0041477 + 915951.50 .1886072 .0042212 + 916071.94 .1956841 .0043098 + 916192.44 .2046293 .0044821 + 916312.81 .1968821 .0043340 + 916433.31 .1988417 .0043785 + 916553.75 .1967106 .0043079 + 916674.31 .2011788 .0043954 + 916794.94 .2019556 .0043420 + 916915.44 .2093793 .0045086 + 917036.06 .2114058 .0045249 + 917156.62 .2062241 .0043880 + 917277.31 .2085542 .0044620 + 917397.94 .2125276 .0045091 + 917518.62 .2063647 .0044113 + 917639.44 .2089920 .0044673 + 917760.06 .2108719 .0045097 + 917880.88 .2089134 .0044873 + 918001.62 .2123857 .0045625 + 918122.44 .2205504 .0046933 + 918243.25 .2134371 .0045490 + 918364.12 .2184069 .0045920 + 918485.06 .2176725 .0045841 + 918605.88 .2227930 .0047359 + 918726.88 .2180598 .0045978 + 918847.75 .2190783 .0046170 + 918968.75 .2279945 .0047707 + 919089.69 .2263607 .0047476 + 919210.81 .2284098 .0048072 + 919331.88 .2234954 .0047229 + 919452.88 .2224145 .0047091 + 919574.00 .2285880 .0048330 + 919695.06 .2253792 .0047821 + 919816.25 .2213670 .0047851 + 919937.38 .2292131 .0049642 + 920058.62 .2310834 .0050557 + 920179.88 .2279552 .0050210 + 920301.06 .2306703 .0051314 + 920422.38 .2262521 .0050465 + 920543.56 .2328750 .0052152 + 920664.94 .2377948 .0052562 + 920786.31 .2331809 .0051841 + 920907.62 .2344770 .0051573 + 921029.06 .2293035 .0050522 + 921150.38 .2307771 .0050463 + 921271.88 .2249029 .0049130 + 921393.25 .2392848 .0051460 + 921514.75 .2336059 .0050282 + 921636.31 .2416709 .0051551 + 921757.81 .2302831 .0049590 + 921879.38 .2303321 .0048829 + 922000.88 .2400837 .0050741 + 922122.56 .2306429 .0049563 + 922244.12 .2353215 .0049925 + 922365.81 .2386394 .0049975 + 922487.50 .2380332 .0049908 + 922609.12 .2453021 .0051408 + 922730.94 .2445152 .0051172 + 922852.56 .2356095 .0049947 + 922974.38 .2346621 .0049878 + 923096.12 .2406333 .0050627 + 923218.00 .2444204 .0051276 + 923339.88 .2411660 .0049544 + 923461.69 .2418317 .0050174 + 923583.62 .2382006 .0049971 + 923705.44 .2415492 .0049686 + 923827.44 .2407772 .0049818 + 923949.31 .2463902 .0050669 + 924071.38 .2370723 .0049226 + 924193.44 .2394793 .0049518 + 924315.38 .2425280 .0050036 + 924437.50 .2347558 .0048978 + 924559.50 .2309711 .0048236 + 924681.69 .2476437 .0050996 + 924803.88 .2388734 .0049465 + 924925.94 .2412646 .0049656 + 925048.19 .2415268 .0050355 + 925170.31 .2449699 .0050372 + 925292.56 .2471412 .0050651 + 925414.75 .2345229 .0048629 + 925537.06 .2370903 .0048821 + 925659.44 .2356759 .0048547 + 925781.69 .2342672 .0048428 + 925904.06 .2410068 .0049662 + 926026.38 .2448821 .0050195 + 926148.81 .2400312 .0049000 + 926271.19 .2401555 .0049469 + 926393.69 .2384016 .0048924 + 926516.19 .2308697 .0047562 + 926638.62 .2393826 .0049059 + 926761.19 .2504689 .0051254 + 926883.69 .2289596 .0047557 + 927006.31 .2382371 .0048660 + 927128.81 .2434329 .0049913 + 927251.50 .2363391 .0048836 + 927374.19 .2398316 .0049208 + 927496.75 .2323367 .0048039 + 927619.50 .2387196 .0049175 + 927742.12 .2382300 .0049478 + 927864.94 .2488794 .0051053 + 927987.62 .2318891 .0048221 + 928110.44 .2335735 .0048074 + 928233.31 .2363849 .0048750 + 928356.06 .2439891 .0049540 + 928479.00 .2435223 .0049576 + 928601.81 .2437585 .0049968 + 928724.75 .2428894 .0049327 + 928847.75 .2343983 .0048261 + 928970.62 .2409250 .0049717 + 929093.69 .2369339 .0048865 + 929216.62 .2491537 .0050937 + 929339.69 .2440438 .0049894 + 929462.69 .2480516 .0050850 + 929585.81 .2351895 .0048847 + 929708.94 .2395650 .0049516 + 929832.00 .2305597 .0047525 + 929955.19 .2339223 .0048156 + 930078.31 .2394356 .0049262 + 930201.56 .2455637 .0050557 + 930324.75 .2423020 .0049648 + 930448.00 .2407662 .0049427 + 930571.38 .2426315 .0049970 + 930694.56 .2405679 .0049183 + 930817.94 .2444755 .0050702 + 930941.25 .2421301 .0049571 + 931064.62 .2266981 .0047102 + 931188.00 .2365287 .0048932 + 931311.44 .2344670 .0048226 + 931434.94 .2382386 .0049061 + 931558.38 .2341813 .0048195 + 931681.88 .2315691 .0048393 + 931805.38 .2313622 .0047801 + 931928.94 .2377425 .0049003 + 932052.56 .2372296 .0048949 + 932176.06 .2271519 .0047086 + 932299.75 .2304628 .0047531 + 932423.31 .2411360 .0049789 + 932547.06 .2382606 .0048846 + 932670.69 .2321568 .0047562 + 932794.44 .2362294 .0048241 + 932918.25 .2419387 .0049695 + 933041.94 .2338228 .0048360 + 933165.75 .2381062 .0048912 + 933289.50 .2346411 .0048486 + 933413.44 .2452210 .0050348 + 933537.19 .2371585 .0048977 + 933661.12 .2351884 .0048242 + 933785.12 .2345749 .0048522 + 933909.00 .2342297 .0048004 + 934033.00 .2348747 .0048162 + 934156.94 .2262870 .0046983 + 934281.00 .2336897 .0048432 + 934404.94 .2306615 .0048004 + 934529.06 .2372348 .0049039 + 934653.19 .2359115 .0048801 + 934777.25 .2349688 .0048779 + 934901.44 .2360097 .0048914 + 935025.50 .2405332 .0049835 + 935149.75 .2284635 .0048061 + 935273.88 .2318764 .0048143 + 935398.19 .2336578 .0048159 + 935522.50 .2192209 .0045937 + 935646.69 .2286835 .0047713 + 935771.06 .2282515 .0047941 + 935895.31 .2262170 .0047599 + 936019.75 .2319453 .0048242 + 936144.19 .2300126 .0048271 + 936268.50 .2239487 .0046598 + 936393.00 .2257076 .0046985 + 936517.38 .2220691 .0046096 + 936641.94 .2232506 .0046867 + 936766.38 .2297857 .0047466 + 936890.94 .2235784 .0046358 + 937015.56 .2278434 .0047053 + 937140.06 .2190530 .0045736 + 937264.75 .2244432 .0046504 + 937389.31 .2192782 .0045631 + 937514.00 .2254046 .0046016 + 937638.62 .2388023 .0048936 + 937763.38 .2185729 .0045301 + 937888.12 .2236228 .0046119 + 938012.81 .2248681 .0046368 + 938137.69 .2281016 .0047128 + 938262.38 .2184999 .0045340 + 938387.31 .2164554 .0044713 + 938512.06 .2213753 .0045599 + 938637.00 .2235473 .0046372 + 938761.94 .2218249 .0046211 + 938886.81 .2148725 .0044748 + 939011.81 .2178944 .0045629 + 939136.75 .2214014 .0046627 + 939261.81 .2108737 .0045044 + 939386.75 .2183315 .0046419 + 939511.88 .2176769 .0046208 + 939637.00 .2217621 .0046834 + 939762.06 .2132101 .0045306 + 939887.25 .2163721 .0045924 + 940012.31 .2115533 .0045020 + 940137.56 .2111129 .0045376 + 940262.81 .2146790 .0045569 + 940387.94 .2190510 .0046088 + 940513.25 .2062820 .0044003 + 940638.50 .2133457 .0045138 + 940763.81 .2191228 .0046397 + 940889.12 .2085379 .0044660 + 941014.50 .2077550 .0044515 + 941139.94 .2185674 .0046293 + 941265.25 .2152943 .0045597 + 941390.75 .2134165 .0045559 + 941516.12 .2151255 .0045535 + 941641.69 .2206675 .0046429 + 941767.12 .2135719 .0045765 + 941892.69 .2120437 .0044922 + 942018.31 .2169928 .0045818 + 942143.81 .2080642 .0044507 + 942269.50 .2084892 .0044776 + 942395.06 .2054626 .0044209 + 942520.75 .2146552 .0045676 + 942646.38 .2071558 .0044544 + 942772.12 .2041451 .0043881 + 942897.88 .2105732 .0045153 + 943023.56 .2032535 .0043914 + 943149.44 .2038760 .0044242 + 943275.19 .2106411 .0045330 + 943401.06 .2072475 .0044696 + 943526.94 .2055437 .0044190 + 943652.75 .2138529 .0045498 + 943778.75 .2094519 .0045714 + 943904.62 .2086977 .0045135 + 944030.62 .2012339 .0043927 + 944156.50 .2095734 .0045271 + 944282.56 .2019186 .0044244 + 944408.69 .2012216 .0044398 + 944534.69 .2084326 .0045257 + 944660.81 .2030358 .0044237 + 944786.81 .1958703 .0043025 + 944913.00 .1986490 .0043124 + 945039.12 .1994929 .0043724 + 945165.38 .1971636 .0042928 + 945291.62 .1990667 .0043272 + 945417.81 .1995287 .0043150 + 945544.12 .1921400 .0042243 + 945670.31 .1944073 .0042322 + 945796.69 .1963607 .0042991 + 945922.94 .2065481 .0044366 + 946049.38 .1920670 .0042149 + 946175.81 .1891242 .0042165 + 946302.19 .1868386 .0041571 + 946428.62 .1923199 .0043094 + 946555.06 .1913738 .0042978 + 946681.56 .1943776 .0043571 + 946808.06 .1884586 .0043121 + 946934.62 .1831497 .0041822 + 947061.25 .1900795 .0043511 + 947187.75 .1889041 .0043184 + 947314.44 .1957980 .0044930 + 947441.00 .1923317 .0044505 + 947567.75 .1931082 .0044475 + 947694.50 .1919863 .0044999 + 947821.12 .1894778 .0044322 + 947947.94 .1900737 .0044840 + 948074.62 .1925860 .0044348 + 948201.50 .1904266 .0043905 + 948328.25 .1994801 .0045063 + 948455.12 .1881444 .0043438 + 948582.06 .1835775 .0042032 + 948708.88 .1891193 .0043044 + 948835.88 .1895382 .0043117 + 948962.75 .1861866 .0041818 + 949089.75 .1886286 .0042555 + 949216.69 .1833919 .0041702 + 949343.75 .1817782 .0041588 + 949470.88 .1833743 .0041821 + 949597.88 .1781259 .0041355 + 949725.00 .1799158 .0041580 + 949852.06 .1819780 .0041598 + 949979.31 .1873031 .0042825 + 950106.38 .1845649 .0042192 + 950233.62 .1795527 .0041160 + 950360.94 .1815363 .0041191 + 950488.12 .1747485 .0039711 + 950615.44 .1852820 .0041710 + 950742.69 .1692130 .0039287 + 950870.06 .1790204 .0040610 + 950997.38 .1862122 .0042074 + 951124.81 .1813987 .0041027 + 951252.25 .1750678 .0040080 + 951379.62 .1781062 .0040765 + 951507.12 .1772794 .0039795 + 951634.56 .1824028 .0041273 + 951762.12 .1815812 .0040632 + 951889.69 .1770559 .0039863 + 952017.19 .1756413 .0039655 + 952144.81 .1793251 .0040512 + 952272.38 .1719962 .0038985 + 952400.06 .1846088 .0041194 + 952527.62 .1767810 .0040322 + 952655.38 .1776105 .0040460 + 952783.19 .1688210 .0038966 + 952910.81 .1719943 .0039963 + 953038.62 .1741820 .0039950 + 953166.38 .1696735 .0039815 + 953294.25 .1762809 .0040413 + 953422.00 .1701352 .0038943 + 953549.94 .1683680 .0039012 + 953677.88 .1778391 .0040232 + 953805.75 .1734754 .0039389 + 953933.75 .1701612 .0039133 + 954061.62 .1718749 .0039211 + 954189.69 .1773474 .0040084 + 954317.62 .1717276 .0038987 + 954445.75 .1676168 .0038924 + 954573.88 .1760999 .0040730 + 954701.94 .1608110 .0037873 + 954830.06 .1676686 .0039351 + 954958.19 .1759836 .0041004 + 955086.44 .1626402 .0037924 + 955214.69 .1642919 .0038681 + 955342.81 .1664034 .0038906 + 955471.12 .1642395 .0038734 + 955599.38 .1641926 .0038951 + 955727.69 .1614199 .0038719 + 955856.00 .1630492 .0039038 + 955984.38 .1643881 .0038278 + 956112.81 .1618618 .0038155 + 956241.19 .1609526 .0038059 + 956369.69 .1565916 .0037084 + 956498.06 .1544761 .0036661 + 956626.56 .1602141 .0038041 + 956755.06 .1573862 .0037152 + 956883.62 .1553495 .0037256 + 957012.25 .1545736 .0037127 + 957140.75 .1662542 .0039058 + 957269.44 .1600149 .0037789 + 957398.00 .1638265 .0038576 + 957526.75 .1625419 .0038274 + 957655.38 .1615289 .0038361 + 957784.12 .1634282 .0038192 + 957912.94 .1633281 .0038346 + 958041.69 .1574408 .0037598 + 958170.50 .1661781 .0039055 + 958299.25 .1586001 .0038075 + 958428.19 .1663054 .0039428 + 958557.00 .1603084 .0038329 + 958685.94 .1574229 .0037601 + 958814.94 .1603891 .0037787 + 958943.81 .1604675 .0038065 + 959072.88 .1545610 .0037303 + 959201.81 .1596297 .0038184 + 959330.88 .1564229 .0037506 + 959460.00 .1631716 .0038488 + 959589.00 .1570937 .0037472 + 959718.19 .1597866 .0037820 + 959847.25 .1651421 .0038554 + 959976.44 .1571016 .0037307 + 960105.56 .1602672 .0037649 + 960234.88 .1638342 .0038127 + 960364.12 .1678473 .0038605 + 960493.38 .1614194 .0037450 + 960622.69 .1589226 .0037332 + 960751.94 .1613627 .0038033 + 960881.38 .1602006 .0037730 + 961010.62 .1590604 .0037680 + 961140.12 .1630272 .0038669 + 961269.56 .1595300 .0038004 + 961398.94 .1614120 .0038296 + 961528.50 .1565296 .0037433 + 961657.94 .1554907 .0037319 + 961787.50 .1548615 .0037374 + 961917.00 .1626790 .0038544 + 962046.62 .1554904 .0037404 + 962176.31 .1583164 .0037743 + 962305.88 .1539566 .0037339 + 962435.56 .1509123 .0036501 + 962565.19 .1452397 .0035970 + 962695.00 .1595140 .0038465 + 962824.62 .1593130 .0038447 + 962954.44 .1599565 .0038743 + 963084.31 .1558891 .0037901 + 963214.06 .1578389 .0037950 + 963343.94 .1581134 .0038214 + 963473.75 .1547541 .0037345 + 963603.69 .1634970 .0038930 + 963733.69 .1560519 .0037604 + 963863.56 .1498093 .0036514 + 963993.62 .1622234 .0038663 + 964123.56 .1531647 .0037188 + 964253.62 .1603575 .0038145 + 964383.62 .1537561 .0037242 + 964513.75 .1506201 .0036758 + 964643.88 .1605478 .0038723 + 964773.94 .1500220 .0036374 + 964904.19 .1563684 .0037576 + 965034.31 .1618573 .0038817 + 965164.56 .1587592 .0038056 + 965294.75 .1527311 .0037063 + 965425.06 .1552489 .0037237 + 965555.38 .1509284 .0036196 + 965685.62 .1544930 .0037130 + 965816.06 .1556025 .0037527 + 965946.38 .1543656 .0037139 + 966076.81 .1532685 .0036524 + 966207.19 .1532232 .0036744 + 966337.69 .1557852 .0036766 + 966468.19 .1501890 .0035732 + 966598.62 .1620673 .0038408 + 966729.19 .1533998 .0036824 + 966859.69 .1548893 .0037066 + 966990.31 .1479345 .0036392 + 967120.88 .1618639 .0038748 + 967251.56 .1519350 .0037050 + 967382.31 .1501233 .0036598 + 967512.94 .1536943 .0037532 + 967643.69 .1582242 .0038130 + 967774.38 .1528696 .0036920 + 967905.19 .1562719 .0037697 + 968036.00 .1570592 .0037716 + 968166.75 .1548298 .0037177 + 968297.69 .1506225 .0036297 + 968428.50 .1579056 .0037492 + 968559.44 .1599569 .0037682 + 968690.31 .1536929 .0036610 + 968821.31 .1621214 .0038180 + 968952.31 .1512546 .0036281 + 969083.25 .1567776 .0037396 + 969214.38 .1538237 .0037191 + 969345.38 .1504564 .0036253 + 969476.50 .1578023 .0037974 + 969607.56 .1573406 .0037680 + 969738.75 .1620106 .0038284 + 969869.94 .1540018 .0037127 + 970001.06 .1511979 .0036782 + 970132.38 .1473948 .0036021 + 970263.56 .1513966 .0036672 + 970394.88 .1580709 .0038237 + 970526.12 .1583929 .0038350 + 970657.50 .1506047 .0037088 + 970788.88 .1613011 .0038756 + 970920.19 .1617222 .0039044 + 971051.69 .1529236 .0037403 + 971183.00 .1527729 .0037301 + 971314.56 .1505143 .0036772 + 971446.06 .1534438 .0037606 + 971577.50 .1538385 .0037641 + 971709.12 .1431390 .0035707 + 971840.62 .1575605 .0038322 + 971972.25 .1613730 .0038310 + 972103.81 .1562251 .0037675 + 972235.50 .1658640 .0039225 + 972367.25 .1539594 .0036647 + 972498.88 .1528641 .0036515 + 972630.69 .1550161 .0037149 + 972762.31 .1587674 .0037315 + 972894.19 .1616863 .0037918 + 973025.94 .1635455 .0038872 + 973157.81 .1596632 .0038329 + 973289.75 .1597986 .0038356 + 973421.56 .1551736 .0037327 + 973553.50 .1532630 .0037032 + 973685.38 .1536853 .0037493 + 973817.44 .1541899 .0037780 + 973949.31 .1544624 .0037596 + 974081.44 .1513343 .0036766 + 974213.50 .1566176 .0037875 + 974345.50 .1597956 .0038399 + 974477.69 .1530119 .0036796 + 974609.75 .1590687 .0038034 + 974741.94 .1635539 .0038653 + 974874.06 .1563135 .0037399 + 975006.31 .1645701 .0038962 + 975138.62 .1614426 .0038413 + 975270.81 .1611978 .0038087 + 975403.19 .1685711 .0039576 + 975535.44 .1587728 .0038058 + 975667.81 .1586559 .0037899 + 975800.25 .1603477 .0037766 + 975932.56 .1607160 .0037953 + 976065.06 .1651303 .0038290 + 976197.44 .1566063 .0037069 + 976330.00 .1637233 .0038689 + 976462.44 .1634083 .0038456 + 976595.00 .1660134 .0038581 + 976727.62 .1596033 .0037988 + 976860.12 .1591715 .0037740 + 976992.81 .1672387 .0039568 + 977125.38 .1608569 .0037940 + 977258.12 .1575356 .0037722 + 977390.75 .1608049 .0038398 + 977523.50 .1597499 .0038077 + 977656.31 .1656347 .0038953 + 977789.00 .1607064 .0038042 + 977921.88 .1661985 .0038958 + 978054.62 .1738178 .0040799 + 978187.56 .1716346 .0040102 + 978320.38 .1594469 .0037829 + 978453.31 .1691570 .0039976 + 978586.31 .1632612 .0039065 + 978719.25 .1608457 .0038297 + 978852.25 .1621655 .0038585 + 978985.25 .1585107 .0037860 + 979118.31 .1661832 .0039299 + 979251.31 .1579257 .0037647 + 979384.50 .1558045 .0037408 + 979517.69 .1606085 .0038108 + 979650.75 .1568645 .0037536 + 979784.00 .1544328 .0037587 + 979917.12 .1535194 .0036955 + 980050.44 .1612037 .0038014 + 980183.75 .1546754 .0037287 + 980317.00 .1566650 .0037679 + 980450.38 .1540496 .0037172 + 980583.62 .1611271 .0038101 + 980717.06 .1584875 .0037948 + 980850.38 .1640870 .0039040 + 980983.88 .1612058 .0038375 + 981117.38 .1615337 .0037861 + 981250.81 .1666631 .0039238 + 981384.38 .1632925 .0038635 + 981517.88 .1618491 .0038596 + 981651.44 .1666363 .0039332 + 981785.00 .1729947 .0040463 + 981918.69 .1677152 .0039564 + 982052.38 .1637323 .0039401 + 982186.00 .1651373 .0039144 + 982319.75 .1713767 .0040682 + 982453.38 .1686635 .0039590 + 982587.19 .1639292 .0038818 + 982720.94 .1636739 .0038600 + 982854.75 .1662851 .0039071 + 982988.69 .1704911 .0039888 + 983122.50 .1747421 .0039880 + 983256.44 .1708098 .0039853 + 983390.25 .1692364 .0039404 + 983524.25 .1702689 .0039822 + 983658.31 .1687663 .0039541 + 983792.25 .1707449 .0039895 + 983926.31 .1721965 .0040634 + 984060.31 .1714861 .0040430 + 984194.44 .1708740 .0040287 + 984328.50 .1660984 .0039328 + 984462.69 .1719822 .0040208 + 984596.94 .1653543 .0038812 + 984731.06 .1729185 .0040031 + 984865.31 .1729783 .0039850 + 984999.50 .1723371 .0040039 + 985133.81 .1733325 .0040263 + 985268.06 .1671593 .0039181 + 985402.44 .1744896 .0040495 + 985536.88 .1759707 .0040869 + 985671.19 .1711985 .0040038 + 985805.62 .1791112 .0041300 + 985940.00 .1779214 .0041383 + 986074.56 .1688024 .0039466 + 986208.94 .1718819 .0040250 + 986343.56 .1796550 .0041721 + 986478.19 .1742341 .0041028 + 986612.69 .1748068 .0040814 + 986747.31 .1793730 .0042031 + 986881.88 .1810593 .0042418 + 987016.62 .1738224 .0040356 + 987151.25 .1738042 .0040985 + 987286.00 .1840011 .0042160 + 987420.81 .1733558 .0040437 + 987555.50 .1802848 .0041867 + 987690.38 .1827226 .0042214 + 987825.12 .1809406 .0042019 + 987960.00 .1750862 .0041016 + 988095.00 .1889742 .0043559 + 988229.81 .1823729 .0042149 + 988364.81 .1831273 .0042344 + 988499.69 .1805345 .0041871 + 988634.75 .1798454 .0041590 + 988769.69 .1803267 .0041826 + 988904.81 .1812059 .0042131 + 989039.94 .1859406 .0042556 + 989175.00 .1861225 .0042919 + 989310.19 .1763669 .0041246 + 989445.25 .1808395 .0041855 + 989580.50 .1759171 .0041051 + 989715.62 .1843386 .0042297 + 989850.94 .1865298 .0042903 + 989986.25 .1856534 .0042806 + 990121.50 .1903015 .0043214 + 990256.88 .1834216 .0041895 + 990392.12 .1810970 .0041163 + 990527.62 .1897574 .0043134 + 990662.94 .1916770 .0043463 + 990798.44 .1844955 .0042194 + 990933.94 .1856902 .0042191 + 991069.38 .1919903 .0043120 + 991204.94 .1901861 .0042985 + 991340.44 .1932036 .0043302 + 991476.06 .1890451 .0042836 + 991611.56 .1928823 .0042851 + 991747.25 .1834944 .0041455 + 991883.00 .1853479 .0041713 + 992018.62 .1940514 .0043111 + 992154.38 .1946748 .0043203 + 992290.06 .1922703 .0043247 + 992425.88 .1983293 .0043635 + 992561.75 .1923553 .0043384 + 992697.50 .1895449 .0043325 + 992833.38 .1826485 .0041855 + 992969.19 .2010807 .0044665 + 993105.19 .1932745 .0043802 + 993241.06 .1896583 .0042436 + 993377.06 .1925173 .0043864 + 993513.12 .1937183 .0043605 + 993649.06 .1940932 .0043892 + 993785.19 .1913367 .0043741 + 993921.19 .1961489 .0043895 + 994057.38 .1952890 .0043935 + 994193.44 .1891532 .0042095 + 994329.62 .1956231 .0043911 + 994465.88 .1997719 .0044313 + 994602.00 .2064476 .0045238 + 994738.31 .1966280 .0043379 + 994874.56 .1967908 .0043602 + 995010.88 .1975855 .0043688 + 995147.12 .2021882 .0044648 + 995283.56 .2023093 .0044574 + 995420.00 .2020245 .0044415 + 995556.38 .1966875 .0043433 + 995692.88 .2064387 .0045140 + 995829.25 .2003970 .0044510 + 995965.81 .2022557 .0044730 + 996102.38 .1971743 .0043514 + 996238.88 .1976725 .0043662 + 996375.50 .2091066 .0045591 + 996512.06 .1970856 .0043421 + 996648.75 .2056275 .0044766 + 996785.38 .2040108 .0044377 + 996922.12 .2027076 .0043820 + 997058.88 .2112006 .0045041 + 997195.56 .2035124 .0044434 + 997332.38 .2072031 .0044771 + 997469.12 .2122691 .0045504 + 997606.00 .2005363 .0043359 + 997742.81 .2003234 .0043635 + 997879.75 .2019719 .0044235 + 998016.75 .2042428 .0044042 + 998153.62 .2099342 .0045643 + 998290.62 .2016549 .0044141 + 998427.56 .1987446 .0043912 + 998564.69 .2122729 .0045924 + 998701.69 .2095131 .0045413 + 998838.81 .2034551 .0044522 + 998976.00 .2079770 .0045328 + 999113.06 .2091719 .0045353 + 999250.31 .2031060 .0044109 + 999387.44 .2048430 .0043798 + 999524.69 .2123280 .0045396 + 999661.88 .2121731 .0045419 + 999799.25 .2111341 .0044994 + 999936.62 .2211281 .0046743 + 1000073.88 .2164572 .0046428 + 1000211.31 .2094256 .0045081 + 1000348.62 .2150452 .0045908 + 1000486.12 .2183384 .0046973 + 1000623.69 .2141130 .0046272 + 1000761.12 .2078175 .0045352 + 1000898.62 .2167712 .0046884 + 1001036.12 .2102511 .0045753 + 1001173.81 .2153828 .0046727 + 1001311.31 .2120266 .0046646 + 1001448.88 .2109365 .0046147 + 1001586.69 .2107256 .0045782 + 1001724.31 .2238748 .0047558 + 1001862.12 .2254567 .0048311 + 1001999.81 .2197702 .0046798 + 1002137.62 .2112286 .0045451 + 1002275.31 .2246873 .0047218 + 1002413.19 .2143569 .0046245 + 1002551.12 .2156767 .0046457 + 1002688.88 .2202985 .0047717 + 1002826.88 .2203270 .0047822 + 1002964.81 .2175187 .0047252 + 1003102.81 .2145314 .0046775 + 1003240.69 .2219959 .0047907 + 1003378.81 .2151798 .0046312 + 1003516.88 .2285930 .0048455 + 1003654.88 .2188126 .0046467 + 1003793.12 .2236019 .0047804 + 1003931.12 .2239921 .0048186 + 1004069.31 .2241015 .0048101 + 1004207.38 .2249531 .0048180 + 1004345.81 .2249180 .0048021 + 1004484.12 .2216394 .0047041 + 1004622.31 .2273748 .0048045 + 1004760.62 .2250255 .0047634 + 1004898.88 .2269920 .0047693 + 1005037.31 .2421126 .0050479 + 1005175.81 .2221929 .0046991 + 1005314.12 .2265694 .0047555 + 1005452.69 .2185045 .0046863 + 1005591.12 .2243512 .0047633 + 1005729.62 .2334529 .0048842 + 1005868.12 .2285406 .0048049 + 1006006.81 .2264513 .0047640 + 1006145.38 .2223792 .0046548 + 1006283.88 .2299787 .0048021 + 1006422.62 .2261515 .0047613 + 1006561.31 .2266563 .0047560 + 1006700.12 .2292239 .0048189 + 1006838.69 .2334953 .0048700 + 1006977.62 .2290611 .0047339 + 1007116.38 .2321459 .0048598 + 1007255.12 .2308013 .0048429 + 1007394.12 .2194166 .0046317 + 1007532.88 .2294075 .0047714 + 1007671.81 .2298835 .0047679 + 1007810.69 .2353062 .0049055 + 1007949.81 .2269380 .0047013 + 1008088.81 .2415597 .0050185 + 1008227.81 .2391083 .0049747 + 1008366.88 .2385997 .0049779 + 1008505.88 .2281916 .0048350 + 1008645.12 .2378587 .0050467 + 1008784.12 .2338023 .0049461 + 1008923.38 .2336683 .0049675 + 1009062.62 .2377533 .0049615 + 1009201.81 .2322882 .0048816 + 1009341.12 .2316765 .0048754 + 1009480.31 .2327384 .0049181 + 1009619.69 .2400014 .0050489 + 1009759.12 .2373269 .0049893 + 1009898.38 .2434682 .0050724 + 1010037.81 .2334445 .0049070 + 1010177.19 .2361450 .0049339 + 1010316.81 .2359361 .0049220 + 1010456.12 .2343813 .0049017 + 1010595.69 .2403657 .0049924 + 1010735.31 .2236986 .0047026 + 1010874.81 .2379201 .0049336 + 1011014.50 .2416749 .0049923 + 1011154.12 .2471836 .0050878 + 1011293.81 .2396716 .0049728 + 1011433.38 .2324546 .0048058 + 1011573.19 .2495922 .0051167 + 1011713.00 .2317556 .0048391 + 1011852.69 .2375771 .0049142 + 1011992.62 .2406082 .0049374 + 1012132.31 .2495321 .0051130 + 1012272.31 .2394460 .0049996 + 1012412.12 .2454645 .0050397 + 1012552.12 .2487946 .0050889 + 1012692.12 .2511669 .0051545 + 1012831.88 .2456906 .0050518 + 1012972.12 .2534500 .0051878 + 1013112.00 .2450183 .0049800 + 1013252.12 .2574179 .0052096 + 1013392.31 .2459127 .0049599 + 1013532.31 .2464968 .0049656 + 1013672.62 .2462775 .0049641 + 1013812.69 .2478400 .0050124 + 1013952.88 .2457777 .0049398 + 1014093.12 .2503053 .0050552 + 1014233.38 .2463560 .0049687 + 1014373.81 .2384189 .0048522 + 1014514.12 .2416791 .0049567 + 1014654.50 .2532014 .0051065 + 1014794.81 .2495590 .0050713 + 1014935.31 .2508797 .0051319 + 1015075.62 .2441173 .0049612 + 1015216.19 .2536801 .0051010 + 1015356.81 .2559191 .0051644 + 1015497.19 .2511682 .0050694 + 1015637.81 .2438870 .0049293 + 1015778.38 .2489317 .0050647 + 1015919.12 .2448842 .0049877 + 1016059.62 .2499866 .0050673 + 1016200.38 .2490419 .0050410 + 1016341.12 .2573031 .0051790 + 1016481.81 .2501880 .0050553 + 1016622.62 .2474743 .0050690 + 1016763.31 .2553094 .0052013 + 1016904.31 .2508821 .0050948 + 1017045.00 .2462901 .0050390 + 1017185.88 .2283999 .0047467 + 1017326.88 .2248330 .0047109 + 1017467.81 .2026540 .0043981 + 1017608.81 .2014192 .0044089 + 1017749.81 .1883088 .0042127 + 1017890.88 .1933338 .0043033 + 1018032.00 .2073347 .0044925 + 1018173.00 .2206447 .0046625 + 1018314.19 .2382478 .0049367 + 1018455.31 .2478513 .0050336 + 1018596.50 .2542506 .0051483 + 1018737.62 .2581908 .0051520 + 1018878.88 .2688893 .0054059 + 1019020.31 .2549329 .0051205 + 1019161.50 .2654331 .0053524 + 1019302.88 .2647072 .0053177 + 1019444.12 .2589473 .0052557 + 1019585.62 .2551490 .0051796 + 1019726.88 .2578510 .0052219 + 1019868.38 .2570069 .0051700 + 1020009.88 .2543019 .0051422 + 1020151.38 .2693048 .0053646 + 1020293.00 .2690384 .0052823 + 1020434.38 .2728139 .0053903 + 1020576.12 .2618049 .0051534 + 1020717.69 .2782528 .0054823 + 1020859.38 .2567602 .0051319 + 1021001.12 .2701075 .0053773 + 1021142.81 .2626970 .0051869 + 1021284.62 .2722214 .0053589 + 1021426.31 .2712629 .0053627 + 1021568.12 .2555057 .0050570 + 1021709.88 .2748435 .0053728 + 1021851.81 .2625825 .0052081 + 1021993.69 .2721130 .0053062 + 1022135.62 .2659685 .0052107 + 1022277.62 .2666397 .0052975 + 1022419.38 .2729664 .0053575 + 1022561.50 .2664370 .0052483 + 1022703.62 .2665830 .0052671 + 1022845.62 .2548305 .0050686 + 1022987.81 .2741283 .0053539 + 1023129.81 .2656504 .0051789 + 1023272.00 .2755269 .0053352 + 1023414.12 .2686205 .0052235 + 1023556.38 .2657852 .0051353 + 1023698.69 .2664946 .0051777 + 1023840.88 .2715428 .0052641 + 1023983.31 .2727192 .0053192 + 1024125.50 .2722842 .0052828 + 1024267.88 .2722794 .0053238 + 1024410.31 .2693901 .0052172 + 1024552.81 .2715709 .0052654 + 1024695.31 .2662858 .0051912 + 1024837.62 .2745621 .0053095 + 1024980.31 .2772943 .0053818 + 1025122.69 .2630135 .0052137 + 1025265.31 .2728677 .0053958 + 1025407.81 .2749811 .0054312 + 1025550.50 .2751917 .0054368 + 1025693.31 .2741666 .0053983 + 1025835.88 .2687944 .0053169 + 1025978.62 .2773519 .0054943 + 1026121.31 .2708592 .0053258 + 1026264.12 .2651055 .0052630 + 1026407.00 .2661735 .0052933 + 1026549.81 .2668374 .0052771 + 1026692.69 .2644162 .0052551 + 1026835.50 .2703625 .0052853 + 1026978.50 .2683131 .0052541 + 1027121.38 .2727939 .0053670 + 1027264.38 .2791191 .0054326 + 1027407.50 .2716187 .0053304 + 1027550.50 .2759186 .0054063 + 1027693.62 .2664772 .0052318 + 1027836.62 .2833251 .0054879 + 1027979.88 .2803541 .0053725 + 1028122.88 .2871289 .0055216 + 1028266.19 .2758487 .0053664 + 1028409.50 .2790927 .0053846 + 1028552.69 .2791451 .0054104 + 1028696.00 .2742988 .0053446 + 1028839.31 .2757396 .0053509 + 1028982.62 .2871179 .0055132 + 1029125.88 .2869088 .0054923 + 1029269.38 .2736279 .0052752 + 1029412.88 .2729345 .0052255 + 1029556.31 .2832319 .0054138 + 1029699.88 .2762837 .0053591 + 1029843.31 .2780151 .0053478 + 1029986.88 .2830735 .0053905 + 1030130.38 .2833784 .0054378 + 1030274.12 .2798916 .0053897 + 1030417.81 .2872749 .0054789 + 1030561.38 .2836243 .0054027 + 1030705.19 .2917121 .0055546 + 1030848.88 .2750715 .0052526 + 1030992.69 .2834052 .0053827 + 1031136.50 .2837131 .0054433 + 1031280.31 .2744267 .0052075 + 1031424.19 .2832448 .0053870 + 1031568.00 .2723890 .0052232 + 1031712.00 .2879555 .0054452 + 1031855.88 .2812153 .0053344 + 1031999.88 .2838532 .0053939 + 1032143.88 .2859299 .0054921 + 1032287.88 .2818710 .0053521 + 1032432.12 .2951601 .0055776 + 1032576.12 .2824468 .0053274 + 1032720.31 .2898198 .0054895 + 1032864.31 .2891362 .0054903 + 1033008.62 .2854023 .0053987 + 1033152.88 .2848674 .0054071 + 1033297.12 .2854750 .0054457 + 1033441.38 .2925495 .0054961 + 1033585.62 .2824002 .0053086 + 1033730.00 .2790735 .0052758 + 1033874.31 .2912493 .0054535 + 1034018.81 .2890359 .0054762 + 1034163.31 .2915387 .0054675 + 1034307.62 .2876105 .0053686 + 1034452.19 .2841167 .0053634 + 1034596.62 .2904172 .0054955 + 1034741.31 .2797557 .0053685 + 1034885.81 .2860290 .0054566 + 1035030.38 .2965241 .0056501 + 1035175.12 .2829851 .0054204 + 1035319.81 .2924334 .0056012 + 1035464.50 .2799187 .0053991 + 1035609.12 .2904242 .0055274 + 1035754.00 .2937786 .0056012 + 1035898.81 .2861829 .0054355 + 1036043.62 .2800003 .0053547 + 1036188.50 .2853512 .0054119 + 1036333.31 .2816083 .0053541 + 1036478.31 .2870038 .0054550 + 1036623.12 .2828387 .0054198 + 1036768.19 .2909798 .0054811 + 1036913.31 .2876723 .0054324 + 1037058.19 .2925572 .0055203 + 1037203.31 .2895305 .0054977 + 1037348.38 .2916139 .0055720 + 1037493.62 .2940343 .0055221 + 1037638.62 .2873996 .0054033 + 1037783.88 .2867583 .0054423 + 1037929.19 .2948732 .0055568 + 1038074.31 .2851300 .0054513 + 1038219.69 .2818880 .0053460 + 1038364.88 .2854759 .0054664 + 1038510.31 .2797298 .0053606 + 1038655.62 .2737678 .0052657 + 1038801.12 .2894191 .0055178 + 1038946.62 .2823508 .0053627 + 1039091.88 .2889820 .0054528 + 1039237.50 .2832647 .0054306 + 1039382.88 .2770112 .0052696 + 1039528.62 .2781383 .0053160 + 1039674.12 .2793725 .0053388 + 1039819.81 .2809566 .0053892 + 1039965.50 .2676771 .0051742 + 1040111.12 .2691392 .0052036 + 1040256.88 .2717801 .0052466 + 1040402.50 .2688884 .0052616 + 1040548.31 .2653993 .0052331 + 1040694.19 .2494554 .0049644 + 1040839.88 .2522860 .0050446 + 1040985.88 .2375892 .0047900 + 1041131.69 .2440159 .0049522 + 1041277.69 .2228756 .0046184 + 1041423.62 .2139931 .0044867 + 1041569.62 .2041476 .0043422 + 1041715.69 .1844131 .0040890 + 1041861.62 .1719505 .0039517 + 1042007.81 .1500399 .0036491 + 1042153.81 .1293278 .0033466 + 1042300.00 .1097052 .0030515 + 1042446.12 .0885897 .0027225 + 1042592.38 .0684730 .0023585 + 1042738.69 .0616857 .0022629 + 1042884.88 .0535852 .0020746 + 1043031.19 .0590978 .0021838 + 1043177.38 .0733579 .0024467 + 1043323.88 .0853316 .0026270 + 1043470.19 .1119863 .0030521 + 1043616.69 .1348836 .0033834 + 1043763.19 .1628188 .0037897 + 1043909.62 .1870048 .0041364 + 1044056.12 .2011349 .0043262 + 1044202.62 .2209330 .0045762 + 1044349.31 .2354642 .0047708 + 1044495.88 .2465309 .0049382 + 1044642.38 .2600458 .0051012 + 1044789.19 .2642010 .0051734 + 1044935.81 .2815917 .0054509 + 1045082.62 .2726801 .0052687 + 1045229.31 .2777104 .0053788 + 1045376.12 .2849808 .0054580 + 1045523.00 .2961159 .0056342 + 1045669.81 .2846512 .0053861 + 1045816.69 .2938875 .0055694 + 1045963.50 .2890421 .0053972 + 1046110.50 .2959939 .0055372 + 1046257.38 .2992499 .0055929 + 1046404.50 .2902654 .0054435 + 1046551.62 .3017872 .0055817 + 1046698.62 .3009832 .0056490 + 1046845.81 .3010956 .0056067 + 1046992.81 .3199523 .0059062 + 1047140.00 .3197601 .0058737 + 1047287.12 .3017891 .0055931 + 1047434.38 .2904677 .0054106 + 1047581.69 .3072542 .0056420 + 1047728.88 .3149139 .0058157 + 1047876.31 .3050400 .0057202 + 1048023.62 .3003084 .0055794 + 1048171.00 .3165395 .0057847 + 1048318.31 .3116018 .0057606 + 1048465.81 .3152967 .0058630 + 1048613.38 .3205272 .0059621 + 1048760.75 .3156996 .0059017 + 1048908.38 .3043657 .0057772 + 1049055.88 .3213336 .0060525 + 1049203.50 .3154467 .0059285 + 1049351.25 .3148840 .0059393 + 1049498.75 .3169007 .0059241 + 1049646.50 .3140336 .0059239 + 1049794.12 .3099042 .0058502 + 1049942.00 .3128448 .0059058 + 1050089.62 .3064727 .0057717 + 1050237.50 .3178626 .0058947 + 1050385.50 .3050504 .0056845 + 1050533.25 .3203210 .0059891 + 1050681.25 .3084182 .0057633 + 1050829.12 .3228393 .0059216 + 1050977.12 .3173274 .0058844 + 1051125.00 .3169844 .0058470 + 1051273.12 .3124956 .0058301 + 1051421.25 .3209709 .0059102 + 1051569.25 .3193284 .0059089 + 1051717.50 .3219206 .0059223 + 1051865.50 .3117335 .0057711 + 1052013.75 .3100340 .0057432 + 1052161.88 .3243703 .0059977 + 1052310.25 .3314222 .0061062 + 1052458.62 .3156258 .0057972 + 1052606.88 .3234442 .0059854 + 1052755.25 .3185014 .0058988 + 1052903.50 .3276651 .0060903 + 1053052.00 .3228728 .0059730 + 1053200.38 .3186886 .0059472 + 1053348.88 .3254194 .0060905 + 1053497.50 .3201986 .0059496 + 1053645.88 .3266454 .0060895 + 1053794.50 .3165502 .0059251 + 1053943.00 .3207481 .0059917 + 1054091.75 .3147499 .0058729 + 1054240.50 .3160300 .0059056 + 1054389.12 .3166114 .0058714 + 1054537.88 .3290159 .0060797 + 1054686.50 .3346082 .0061510 + 1054835.38 .3240340 .0059766 + 1054984.12 .3355407 .0061325 + 1055133.00 .3260468 .0060105 + 1055282.00 .3262267 .0059890 + 1055430.75 .3258404 .0060543 + 1055579.75 .3269146 .0060544 + 1055728.75 .3211435 .0060242 + 1055877.75 .3250285 .0061184 + 1056026.75 .3225400 .0061270 + 1056175.88 .3288691 .0062016 + 1056325.00 .3423197 .0063935 + 1056474.12 .3120726 .0058689 + 1056623.25 .3240855 .0060823 + 1056772.38 .3325042 .0062033 + 1056921.75 .3258356 .0060276 + 1057070.88 .3329866 .0061569 + 1057220.25 .3331414 .0061218 + 1057369.62 .3303611 .0060661 + 1057518.88 .3297168 .0060883 + 1057668.38 .3329628 .0061705 + 1057817.62 .3349923 .0061442 + 1057967.12 .3322613 .0060401 + 1058116.75 .3333383 .0060645 + 1058266.12 .3312467 .0059578 + 1058415.75 .3212357 .0058397 + 1058565.25 .3317602 .0060129 + 1058714.88 .3275006 .0059065 + 1058864.50 .3424593 .0061050 + 1059014.25 .3362827 .0060768 + 1059164.00 .3268553 .0059325 + 1059313.62 .3309467 .0060258 + 1059463.50 .3449553 .0062108 + 1059613.12 .3290006 .0059652 + 1059763.12 .3223116 .0058740 + 1059912.88 .3383631 .0061099 + 1060062.88 .3385048 .0060600 + 1060212.75 .3473319 .0062080 + 1060362.62 .3448376 .0062203 + 1060512.75 .3312955 .0060067 + 1060662.62 .3308821 .0060111 + 1060812.75 .3349649 .0060194 + 1060962.75 .3357723 .0060931 + 1061113.00 .3361981 .0060876 + 1061263.12 .3373467 .0061320 + 1061413.25 .3380967 .0061099 + 1061563.50 .3311252 .0060182 + 1061713.75 .3373948 .0061056 + 1061864.00 .3344410 .0060450 + 1062014.25 .3322231 .0059644 + 1062164.62 .3372071 .0061035 + 1062315.12 .3342440 .0060477 + 1062465.38 .3348729 .0060355 + 1062615.88 .3294692 .0059739 + 1062766.38 .3334027 .0060677 + 1062916.88 .3403806 .0062037 + 1063067.50 .3321712 .0060708 + 1063218.00 .3452257 .0062992 + 1063368.62 .3403254 .0062189 + 1063519.12 .3406399 .0062204 + 1063669.88 .3412137 .0061638 + 1063820.50 .3342738 .0060483 + 1063971.25 .3376478 .0061047 + 1064122.12 .3450773 .0061702 + 1064272.75 .3450556 .0062262 + 1064423.75 .3254520 .0058783 + 1064574.50 .3372679 .0060479 + 1064725.38 .3402764 .0061763 + 1064876.25 .3328467 .0060718 + 1065027.25 .3442995 .0062228 + 1065178.25 .3396377 .0061119 + 1065329.25 .3462666 .0062147 + 1065480.38 .3465209 .0062723 + 1065631.38 .3553219 .0064651 + 1065782.50 .3449488 .0061948 + 1065933.62 .3427261 .0062550 + 1066084.75 .3505805 .0062832 + 1066236.12 .3397251 .0060784 + 1066387.25 .3422997 .0061927 + 1066538.50 .3444613 .0062071 + 1066689.75 .3336386 .0059937 + 1066841.12 .3280058 .0059215 + 1066992.50 .3399868 .0060353 + 1067143.88 .3452588 .0061696 + 1067295.38 .3370214 .0060261 + 1067446.75 .3428152 .0061296 + 1067598.38 .3406190 .0060564 + 1067749.75 .3404372 .0060830 + 1067901.38 .3480190 .0061636 + 1068053.12 .3489829 .0062910 + 1068204.62 .3459708 .0061705 + 1068356.38 .3457903 .0061538 + 1068508.00 .3569263 .0063383 + 1068659.75 .3430404 .0060922 + 1068811.38 .3473389 .0061397 + 1068963.25 .3351175 .0059415 + 1069115.12 .3432734 .0060695 + 1069266.88 .3468903 .0061411 + 1069418.88 .3421109 .0061153 + 1069570.62 .3473101 .0061021 + 1069722.75 .3424007 .0060698 + 1069874.62 .3446974 .0061491 + 1070026.62 .3533822 .0062654 + 1070178.75 .3495872 .0061905 + 1070330.75 .3402718 .0060533 + 1070483.00 .3441381 .0060455 + 1070635.00 .3497702 .0061756 + 1070787.25 .3568218 .0063016 + 1070939.38 .3433339 .0061087 + 1071091.62 .3435601 .0060671 + 1071244.00 .3535423 .0062245 + 1071396.25 .3481979 .0061266 + 1071548.62 .3481700 .0061018 + 1071700.88 .3461336 .0061055 + 1071853.38 .3529479 .0062054 + 1072005.88 .3451571 .0060650 + 1072158.25 .3602661 .0062841 + 1072310.88 .3523490 .0061487 + 1072463.25 .3473763 .0060696 + 1072615.88 .3396106 .0059417 + 1072768.38 .3576346 .0061621 + 1072921.12 .3432534 .0059418 + 1073073.88 .3477190 .0060490 + 1073226.50 .3529569 .0061260 + 1073379.25 .3472769 .0060250 + 1073532.00 .3612962 .0062743 + 1073684.75 .3409479 .0059792 + 1073837.50 .3550110 .0061730 + 1073990.50 .3535684 .0061893 + 1074143.38 .3606513 .0063249 + 1074296.25 .3718350 .0064577 + 1074449.25 .3616487 .0062728 + 1074602.12 .3591016 .0062576 + 1074755.25 .3551345 .0062165 + 1074908.25 .3574348 .0062395 + 1075061.38 .3405896 .0059893 + 1075214.62 .3507810 .0061537 + 1075367.62 .3623703 .0063278 + 1075520.88 .3423808 .0060020 + 1075674.00 .3649223 .0063702 + 1075827.38 .3503695 .0061316 + 1075980.50 .3547266 .0061822 + 1076133.88 .3609208 .0063173 + 1076287.38 .3537769 .0061865 + 1076440.62 .3565057 .0061911 + 1076594.12 .3536176 .0061933 + 1076747.50 .3660605 .0063324 + 1076901.00 .3464899 .0060687 + 1077054.62 .3416557 .0059708 + 1077208.12 .3542096 .0062330 + 1077361.75 .3628490 .0063431 + 1077515.25 .3562377 .0062065 + 1077669.00 .3600299 .0062757 + 1077822.50 .3672055 .0064602 + 1077976.38 .3552086 .0062419 + 1078130.12 .3683470 .0064421 + 1078283.88 .3585882 .0062641 + 1078437.75 .3631746 .0063571 + 1078591.50 .3578603 .0062865 + 1078745.38 .3676370 .0064219 + 1078899.25 .3570470 .0062918 + 1079053.25 .3570333 .0062335 + 1079207.25 .3638513 .0063266 + 1079361.25 .3577592 .0062445 + 1079515.25 .3611396 .0062999 + 1079669.25 .3592231 .0062981 + 1079823.50 .3515380 .0061279 + 1079977.50 .3565453 .0061931 + 1080131.75 .3587970 .0062648 + 1080286.00 .3601496 .0062930 + 1080440.12 .3581174 .0062396 + 1080594.50 .3684587 .0063819 + 1080748.75 .3545621 .0061981 + 1080903.12 .3771253 .0065292 + 1081057.38 .3684906 .0063471 + 1081211.88 .3743476 .0064807 + 1081366.38 .3658627 .0063197 + 1081520.75 .3644019 .0062724 + 1081675.38 .3746316 .0064496 + 1081829.75 .3731748 .0064546 + 1081984.50 .3573342 .0062605 + 1082139.12 .3647841 .0063248 + 1082293.62 .3786056 .0064853 + 1082448.38 .3561035 .0061427 + 1082603.00 .3644892 .0062828 + 1082757.75 .3668397 .0063462 + 1082912.50 .3676760 .0063396 + 1083067.38 .3633838 .0062584 + 1083222.25 .3690545 .0063426 + 1083377.00 .3661462 .0062978 + 1083532.00 .3745413 .0064402 + 1083686.88 .3773569 .0063986 + 1083841.88 .3880737 .0066617 + 1083996.88 .3769201 .0064445 + 1084151.88 .3787977 .0065213 + 1084307.00 .3825614 .0065718 + 1084462.12 .4032740 .0069124 + 1084617.25 .3973040 .0067860 + 1084772.38 .3869372 .0066283 + 1084927.62 .4033861 .0069189 + 1085082.75 .4048521 .0069789 + 1085238.12 .3693954 .0064405 + 1085393.50 .3671966 .0063989 + 1085548.75 .3607694 .0063256 + 1085704.12 .3417550 .0060342 + 1085859.50 .3536304 .0062024 + 1086015.00 .3447357 .0060242 + 1086170.38 .3432877 .0060603 + 1086325.88 .3464742 .0060783 + 1086481.50 .3489276 .0060791 + 1086637.00 .3601599 .0063081 + 1086792.62 .3680434 .0064213 + 1086948.25 .3467924 .0060454 + 1087104.00 .3618305 .0062656 + 1087259.75 .3695458 .0063769 + 1087415.38 .3607489 .0062346 + 1087571.25 .3574525 .0061704 + 1087726.88 .3493934 .0060436 + 1087882.88 .3596764 .0062328 + 1088038.62 .3598233 .0062579 + 1088194.62 .3520979 .0061134 + 1088350.62 .3711499 .0064518 + 1088506.50 .3714284 .0064262 + 1088662.50 .3665914 .0063888 + 1088818.50 .3633257 .0063069 + 1088974.62 .3704863 .0063450 + 1089130.62 .3588316 .0062532 + 1089286.88 .3699781 .0063581 + 1089443.12 .3594484 .0061954 + 1089599.25 .3668767 .0063686 + 1089755.50 .3724925 .0064068 + 1089911.62 .3745435 .0064183 + 1090068.00 .3703574 .0063024 + 1090224.25 .3692855 .0063307 + 1090380.75 .3633133 .0062410 + 1090537.25 .3678060 .0063181 + 1090693.62 .3745485 .0064253 + 1090850.12 .3715405 .0063826 + 1091006.50 .3722787 .0063448 + 1091163.12 .3825833 .0065869 + 1091319.75 .3760649 .0064374 + 1091476.38 .3706002 .0064482 + 1091633.00 .3690111 .0064140 + 1091789.62 .3813259 .0066037 + 1091946.38 .3727790 .0066025 + 1092103.00 .3683537 .0065041 + 1092259.88 .3705215 .0065367 + 1092416.75 .3606144 .0063758 + 1092573.50 .3747694 .0065887 + 1092730.50 .3682936 .0064653 + 1092887.25 .3726259 .0064687 + 1093044.38 .3648083 .0063506 + 1093201.25 .3694729 .0063737 + 1093358.25 .3789527 .0065356 + 1093515.38 .3718410 .0064466 + 1093672.38 .3788661 .0065451 + 1093829.62 .3664732 .0063662 + 1093986.62 .3751117 .0065113 + 1094143.88 .3687846 .0064028 + 1094301.00 .3712403 .0064765 + 1094458.38 .3741012 .0064632 + 1094615.75 .3735526 .0064897 + 1094772.88 .3713064 .0063459 + 1094930.38 .3707814 .0064164 + 1095087.62 .3653585 .0063203 + 1095245.12 .3696104 .0063771 + 1095402.50 .3752114 .0065254 + 1095560.12 .3696743 .0063953 + 1095717.62 .3816334 .0065951 + 1095875.12 .3775070 .0065677 + 1096032.75 .3607492 .0063102 + 1096190.38 .3740755 .0065048 + 1096348.00 .3807076 .0066441 + 1096505.75 .3737497 .0064980 + 1096663.50 .3824932 .0066351 + 1096821.25 .3723883 .0064656 + 1096979.00 .3709073 .0063742 + 1097136.88 .3724639 .0064230 + 1097294.62 .3830423 .0066070 + 1097452.62 .3676807 .0063501 + 1097610.62 .3846667 .0066028 + 1097768.50 .3809381 .0065338 + 1097926.62 .3771361 .0064376 + 1098084.50 .3729147 .0063895 + 1098242.62 .3796898 .0065297 + 1098400.62 .3754615 .0064972 + 1098558.88 .3686904 .0064014 + 1098717.12 .3848666 .0066399 + 1098875.25 .3740768 .0064798 + 1099033.50 .3639557 .0063176 + 1099191.75 .3776925 .0065571 + 1099350.12 .3742750 .0065119 + 1099508.38 .3724832 .0064551 + 1099666.75 .3688930 .0063850 + 1099825.25 .3745502 .0064719 + 1099983.62 .3850607 .0066114 + 1100142.12 .3806209 .0065116 + 1100300.62 .3700102 .0063812 + 1100459.25 .3771761 .0064885 + 1100617.75 .3692948 .0063770 + 1100776.38 .3714846 .0063649 + 1100935.12 .3805670 .0065425 + 1101093.75 .3785547 .0065588 + 1101252.50 .3745646 .0065149 + 1101411.12 .3669989 .0063682 + 1101570.00 .3899623 .0066682 + 1101728.88 .3736297 .0063780 + 1101887.62 .3682321 .0063378 + 1102046.62 .3752488 .0064047 + 1102205.50 .3791443 .0064791 + 1102364.50 .3788666 .0064332 + 1102523.38 .3868938 .0066077 + 1102682.50 .3808407 .0064949 + 1102841.62 .3885725 .0066264 + 1103000.62 .3889798 .0065629 + 1103159.88 .3819364 .0065161 + 1103318.88 .3810640 .0065046 + 1103478.25 .3859535 .0065478 + 1103637.38 .3773833 .0064858 + 1103796.62 .3912738 .0066145 + 1103956.00 .3826084 .0064207 + 1104115.25 .3812422 .0065197 + 1104274.75 .3966201 .0067054 + 1104434.00 .3751503 .0063734 + 1104593.62 .3872985 .0065791 + 1104753.00 .3834141 .0065411 + 1104912.50 .3738505 .0063825 + 1105072.12 .3976596 .0068524 + 1105231.62 .3744977 .0064116 + 1105391.38 .3825210 .0066478 + 1105550.88 .3847987 .0066374 + 1105710.62 .3884849 .0067323 + 1105870.38 .3802798 .0066000 + 1106030.12 .3806584 .0065803 + 1106190.00 .3760156 .0065295 + 1106349.62 .3911740 .0067537 + 1106509.62 .3873293 .0066540 + 1106669.38 .3883123 .0066542 + 1106829.38 .3747396 .0064437 + 1106989.38 .3889058 .0066658 + 1107149.38 .3938689 .0067425 + 1107309.50 .3732566 .0063988 + 1107469.38 .3869341 .0065570 + 1107629.62 .3919077 .0066444 + 1107789.62 .3838038 .0064773 + 1107949.88 .3878207 .0065395 + 1108110.12 .3903462 .0065940 + 1108270.25 .3809071 .0064521 + 1108430.62 .3825705 .0064601 + 1108590.88 .3891727 .0066254 + 1108751.25 .3929057 .0066043 + 1108911.62 .3805127 .0064871 + 1109072.00 .3924299 .0066385 + 1109232.50 .3745855 .0063134 + 1109393.00 .3762700 .0064007 + 1109553.50 .3828987 .0064852 + 1109714.00 .3953254 .0066962 + 1109874.62 .3835227 .0065365 + 1110035.25 .3911322 .0066184 + 1110195.88 .3881986 .0065640 + 1110356.62 .3832108 .0065439 + 1110517.38 .3926229 .0066300 + 1110678.12 .3825287 .0065271 + 1110838.88 .3879009 .0066399 + 1110999.75 .3971137 .0067616 + 1111160.75 .3919510 .0066345 + 1111321.50 .3934914 .0066346 + 1111482.50 .3969024 .0067754 + 1111643.38 .3923054 .0066617 + 1111804.50 .3920219 .0066462 + 1111965.38 .3910898 .0065743 + 1112126.62 .3900926 .0065894 + 1112287.75 .4005422 .0067554 + 1112448.88 .3853318 .0066024 + 1112610.12 .3908588 .0065870 + 1112771.25 .3879489 .0065924 + 1112932.50 .3970999 .0067543 + 1113093.75 .3963809 .0067466 + 1113255.12 .3923365 .0066338 + 1113416.50 .3930183 .0066470 + 1113577.88 .3874541 .0065282 + 1113739.38 .3761201 .0063791 + 1113900.75 .3980839 .0067507 + 1114062.25 .3864844 .0065935 + 1114223.75 .3925503 .0067272 + 1114385.38 .3924128 .0067529 + 1114547.00 .3878151 .0066776 + 1114708.62 .4001342 .0068596 + 1114870.38 .3871214 .0067125 + 1115031.88 .3880180 .0067220 + 1115193.75 .3828441 .0066521 + 1115355.50 .3884449 .0067756 + 1115517.38 .3806347 .0066573 + 1115679.25 .3948963 .0068945 + 1115841.00 .3862061 .0067381 + 1116003.00 .3866207 .0067418 + 1116164.88 .3909685 .0068272 + 1116327.00 .3849795 .0066807 + 1116489.00 .3978012 .0069160 + 1116651.00 .3874326 .0066930 + 1116813.12 .3832959 .0066057 + 1116975.25 .4009259 .0068527 + 1117137.50 .4022213 .0068985 + 1117299.62 .3822099 .0065177 + 1117461.88 .3931480 .0066904 + 1117624.25 .3845535 .0065569 + 1117786.50 .3947822 .0067296 + 1117948.88 .3946368 .0067266 + 1118111.12 .3928682 .0066760 + 1118273.62 .3796453 .0064854 + 1118436.00 .3808236 .0065518 + 1118598.50 .3905415 .0066824 + 1118761.12 .3877003 .0066646 + 1118923.62 .3875376 .0066536 + 1119086.25 .3861081 .0066650 + 1119248.75 .3925084 .0067693 + 1119411.50 .3795832 .0064784 + 1119574.12 .3905575 .0066851 + 1119737.00 .3807773 .0065241 + 1119899.75 .3925677 .0067041 + 1120062.50 .3866418 .0066953 + 1120225.38 .3760634 .0064633 + 1120388.25 .3760082 .0063669 + 1120551.12 .3820160 .0066246 + 1120714.25 .3710922 .0064388 + 1120877.12 .3781227 .0065654 + 1121040.12 .3886692 .0067054 + 1121203.12 .3934190 .0067773 + 1121366.25 .3874214 .0066506 + 1121529.38 .3880833 .0066303 + 1121692.62 .3868094 .0066216 + 1121855.88 .3904287 .0066766 + 1122019.00 .3970711 .0067841 + 1122182.38 .3902139 .0066910 + 1122345.50 .3906119 .0067271 + 1122508.88 .3817129 .0065265 + 1122672.25 .3673861 .0063273 + 1122835.75 .3949571 .0067543 + 1122999.25 .3945481 .0067874 + 1123162.62 .3747176 .0065163 + 1123326.25 .3865909 .0066341 + 1123489.62 .3914596 .0067225 + 1123653.38 .3908905 .0066340 + 1123816.88 .3765492 .0064542 + 1123980.62 .3876618 .0065894 + 1124144.38 .3876294 .0066667 + 1124308.00 .3643900 .0062951 + 1124471.88 .3780536 .0065025 + 1124635.50 .3926037 .0067598 + 1124799.50 .3889986 .0066554 + 1124963.25 .3761228 .0064926 + 1125127.25 .3860755 .0066477 + 1125291.25 .3852661 .0066163 + 1125455.12 .3821475 .0066303 + 1125619.25 .3857989 .0066108 + 1125783.12 .3828932 .0065501 + 1125947.38 .3912168 .0067063 + 1126111.50 .3930931 .0067067 + 1126275.62 .3971079 .0067720 + 1126439.88 .3987142 .0067240 + 1126604.00 .3853250 .0065435 + 1126768.38 .3947082 .0067176 + 1126932.62 .3949110 .0066662 + 1127097.00 .3938033 .0066415 + 1127261.38 .3874003 .0065664 + 1127425.75 .3999235 .0067337 + 1127590.25 .3965892 .0067042 + 1127754.62 .3970072 .0066973 + 1127919.25 .3998165 .0067583 + 1128083.75 .4004898 .0067663 + 1128248.38 .3976431 .0067417 + 1128413.12 .4113755 .0069185 + 1128577.62 .4079126 .0068269 + 1128742.50 .3922902 .0066204 + 1128907.12 .3974086 .0066439 + 1129072.00 .4105298 .0067772 + 1129236.62 .4112361 .0068186 + 1129401.62 .4196193 .0069075 + 1129566.50 .3985504 .0066273 + 1129731.38 .3982854 .0066160 + 1129896.38 .4008231 .0066160 + 1130061.25 .4111010 .0067626 + 1130226.38 .4082532 .0067842 + 1130391.38 .4081823 .0067064 + 1130556.50 .4076182 .0066804 + 1130721.75 .4128446 .0068304 + 1130886.75 .4033174 .0066580 + 1131052.12 .4119659 .0067691 + 1131217.25 .4162456 .0068153 + 1131382.62 .4029654 .0065997 + 1131548.00 .4089761 .0067468 + 1131713.25 .4026195 .0066314 + 1131878.75 .4146642 .0067931 + 1132044.00 .4194105 .0068688 + 1132209.62 .4134535 .0068007 + 1132375.00 .4115461 .0068072 + 1132540.62 .4073305 .0066869 + 1132706.25 .4131537 .0067905 + 1132871.75 .4124464 .0067435 + 1133037.50 .4176568 .0068129 + 1133203.00 .4182783 .0068321 + 1133368.88 .4011572 .0065881 + 1133534.50 .4214409 .0068838 + 1133700.38 .4088173 .0067812 + 1133866.25 .4178657 .0068640 + 1134032.00 .4306400 .0071192 + 1134198.00 .4275034 .0070201 + 1134363.88 .4091933 .0067447 + 1134529.88 .4285649 .0070380 + 1134695.75 .4125285 .0068963 + 1134861.88 .4112535 .0068189 + 1135028.00 .4264256 .0070858 + 1135194.12 .4097061 .0068266 + 1135360.25 .4162704 .0069255 + 1135526.38 .4291787 .0071635 + 1135692.75 .4207287 .0069626 + 1135858.88 .4281142 .0070714 + 1136025.25 .4377629 .0072599 + 1136191.62 .4409582 .0072675 + 1136357.88 .4238340 .0069976 + 1136524.38 .4314384 .0071246 + 1136690.75 .4234492 .0070159 + 1136857.38 .4323909 .0071492 + 1137023.88 .4284520 .0070264 + 1137190.38 .4243663 .0069503 + 1137357.00 .4300685 .0070406 + 1137523.62 .4239004 .0069138 + 1137690.38 .4232929 .0069420 + 1137856.88 .4233810 .0069459 + 1138023.75 .4168748 .0068622 + 1138190.62 .4427880 .0072710 + 1138357.25 .4297246 .0071109 + 1138524.25 .4461863 .0073260 + 1138691.00 .4390605 .0072128 + 1138858.00 .4200019 .0069293 + 1139024.88 .4373448 .0072272 + 1139192.00 .4215499 .0069345 + 1139359.00 .4248770 .0069669 + 1139526.00 .4384926 .0071965 + 1139693.25 .4392614 .0071462 + 1139860.25 .4328639 .0070662 + 1140027.50 .4375365 .0071386 + 1140194.62 .4110491 .0067144 + 1140362.00 .4357063 .0071008 + 1140529.38 .4393792 .0072275 + 1140696.50 .4438632 .0073444 + 1140864.00 .4368133 .0072120 + 1141031.25 .4314137 .0071030 + 1141198.75 .4306379 .0071047 + 1141366.38 .4245434 .0070040 + 1141533.75 .4423521 .0072729 + 1141701.38 .4496416 .0074315 + 1141868.88 .4271388 .0071206 + 1142036.62 .4382777 .0072789 + 1142204.12 .4438230 .0073153 + 1142371.88 .4421376 .0073149 + 1142539.75 .4370680 .0072318 + 1142707.38 .4352975 .0071577 + 1142875.25 .4366208 .0071472 + 1143043.00 .4611684 .0074621 + 1143211.00 .4385501 .0071123 + 1143378.75 .4451666 .0072191 + 1143546.88 .4479222 .0072135 + 1143714.88 .4374923 .0070431 + 1143882.88 .4348824 .0070255 + 1144051.00 .4526386 .0073194 + 1144219.00 .4479410 .0071886 + 1144387.25 .4489662 .0072800 + 1144555.25 .4557778 .0073473 + 1144723.50 .4425203 .0071734 + 1144891.88 .4401889 .0071618 + 1145060.12 .4439491 .0072825 + 1145228.50 .4491566 .0072984 + 1145396.75 .4482597 .0072866 + 1145565.25 .4526920 .0073684 + 1145733.62 .4625556 .0074672 + 1145902.12 .4554642 .0072961 + 1146070.75 .4658868 .0075062 + 1146239.12 .4513992 .0073248 + 1146407.75 .4578354 .0074263 + 1146576.38 .4620204 .0075070 + 1146745.12 .4528916 .0073385 + 1146913.88 .4583896 .0074214 + 1147082.50 .4548329 .0073433 + 1147251.38 .4555211 .0073676 + 1147420.00 .4493959 .0072323 + 1147589.00 .4559882 .0073579 + 1147757.75 .4703959 .0075414 + 1147926.75 .4459121 .0071905 + 1148095.75 .4488176 .0072342 + 1148264.62 .4582573 .0074015 + 1148433.75 .4501502 .0072834 + 1148602.75 .4399349 .0071327 + 1148772.00 .4321683 .0070839 + 1148941.00 .4323790 .0070534 + 1149110.25 .4382568 .0071572 + 1149279.50 .4297348 .0070027 + 1149448.75 .4486363 .0073116 + 1149618.12 .4612203 .0074290 + 1149787.38 .4700195 .0075566 + 1149956.75 .4760475 .0076393 + 1150126.12 .4694706 .0075686 + 1150295.62 .4678517 .0075706 + 1150465.12 .4766903 .0076880 + 1150634.62 .4654942 .0075978 + 1150804.25 .4709786 .0076214 + 1150973.75 .4823574 .0077591 + 1151143.38 .4873542 .0078351 + 1151313.00 .4852898 .0077731 + 1151482.75 .4860899 .0077520 + 1151652.62 .4816813 .0076154 + 1151822.25 .4759586 .0076048 + 1151992.12 .4691203 .0074693 + 1152161.88 .4844656 .0076417 + 1152331.88 .4920944 .0077891 + 1152501.88 .4862710 .0076897 + 1152671.75 .4948689 .0078351 + 1152841.88 .4908169 .0077908 + 1153011.75 .5071657 .0080329 + 1153182.00 .5025669 .0079733 + 1153352.00 .4893236 .0077342 + 1153522.25 .4954393 .0078467 + 1153692.50 .4805961 .0075990 + 1153862.62 .5037432 .0079465 + 1154033.00 .4950801 .0078038 + 1154203.25 .4865405 .0076271 + 1154373.62 .4967189 .0077964 + 1154543.88 .4834044 .0076062 + 1154714.38 .5055595 .0079490 + 1154884.88 .4985280 .0078702 + 1155055.38 .5045009 .0079196 + 1155226.00 .4968261 .0078115 + 1155396.38 .4919286 .0076786 + 1155567.12 .5076678 .0079338 + 1155737.62 .5180260 .0080596 + 1155908.38 .5123361 .0079257 + 1156079.25 .5132579 .0079727 + 1156249.88 .5252229 .0080594 + 1156420.75 .5328417 .0082002 + 1156591.50 .5370166 .0082220 + 1156762.50 .5416220 .0083039 + 1156933.50 .5368364 .0081527 + 1157104.25 .5466366 .0083103 + 1157275.38 .5465293 .0082939 + 1157446.25 .5434860 .0083081 + 1157617.50 .5605475 .0084809 + 1157788.50 .5575805 .0084978 + 1157959.62 .5741144 .0086803 + 1158130.88 .5536856 .0083632 + 1158302.00 .5695873 .0086576 + 1158473.38 .5860553 .0088469 + 1158644.62 .5934628 .0089434 + 1158816.00 .5876408 .0087534 + 1158987.25 .6015407 .0089502 + 1159158.75 .5932109 .0088102 + 1159330.25 .6225495 .0091794 + 1159501.62 .6244584 .0091345 + 1159673.25 .6262644 .0092174 + 1159844.75 .6238740 .0091204 + 1160016.38 .6409105 .0093134 + 1160187.88 .6502619 .0093996 + 1160359.62 .6838552 .0097847 + 1160531.50 .6740329 .0097379 + 1160703.12 .6803505 .0097234 + 1160875.00 .7049299 .0101102 + 1161046.75 .7448743 .0106051 + 1161218.62 .7158264 .0102118 + 1161390.50 .7463006 .0106576 + 1161562.50 .7225063 .0102180 + 1161734.50 .7416824 .0106310 + 1161906.50 .7169019 .0103497 + 1162078.62 .6984335 .0100871 + 1162250.62 .6675919 .0097625 + 1162422.75 .6175687 .0091232 + 1162595.00 .5929934 .0088528 + 1162767.12 .5627670 .0085257 + 1162939.50 .5245295 .0080904 + 1163111.62 .4808257 .0075719 + 1163284.00 .4477572 .0072008 + 1163456.38 .4244587 .0069630 + 1163628.75 .4046206 .0067966 + 1163801.25 .4016134 .0067505 + 1163973.62 .3725968 .0063502 + 1164146.25 .3557309 .0061602 + 1164318.75 .3630032 .0062986 + 1164491.38 .3556202 .0061950 + 1164664.00 .3605174 .0062496 + 1164836.62 .3701404 .0064375 + 1165009.50 .3505089 .0061429 + 1165182.12 .3640782 .0063420 + 1165355.00 .3626966 .0063407 + 1165527.75 .3609944 .0062881 + 1165700.62 .3634802 .0063817 + 1165873.50 .3680575 .0063691 + 1166046.50 .3731694 .0064540 + 1166219.50 .3783590 .0065164 + 1166392.38 .3771372 .0064623 + 1166565.50 .3781822 .0064408 + 1166738.50 .3782096 .0064104 + 1166911.75 .3746369 .0064260 + 1167084.88 .3933053 .0066638 + 1167258.12 .3908515 .0066772 + 1167431.50 .3938002 .0066483 + 1167604.62 .3977989 .0067403 + 1167778.00 .3922401 .0066610 + 1167951.25 .4046478 .0067763 + 1168124.75 .3975172 .0067055 + 1168298.25 .4076117 .0067841 + 1168471.62 .3950449 .0065850 + 1168645.25 .3936044 .0066296 + 1168818.75 .4089048 .0068173 + 1168992.38 .4119800 .0068368 + 1169165.88 .3964767 .0066143 + 1169339.62 .4177234 .0069604 + 1169513.50 .4215455 .0070092 + 1169687.12 .4387488 .0072867 + 1169861.00 .4234948 .0069942 + 1170034.75 .4233246 .0069753 + 1170208.62 .4226049 .0069144 + 1170382.50 .4217053 .0068748 + 1170556.50 .4211695 .0069167 + 1170730.50 .4411744 .0071906 + 1170904.50 .4329745 .0070517 + 1171078.62 .4373834 .0071673 + 1171252.62 .4407040 .0071748 + 1171426.88 .4250261 .0069494 + 1171600.88 .4382259 .0071863 + 1171775.12 .4340848 .0070667 + 1171949.50 .4396093 .0071322 + 1172123.75 .4279604 .0069946 + 1172298.12 .4364426 .0070763 + 1172472.38 .4571465 .0074491 + 1172646.88 .4409653 .0071444 + 1172821.38 .4344048 .0070016 + 1172995.75 .4427812 .0072504 + 1173170.38 .4466614 .0072939 + 1173344.88 .4577714 .0074984 + 1173519.50 .4585076 .0074463 + 1173694.12 .4551401 .0073868 + 1173868.88 .4506969 .0073719 + 1174043.62 .4541530 .0073771 + 1174218.38 .4541028 .0072880 + 1174393.25 .4560901 .0073173 + 1174567.88 .4522412 .0072865 + 1174742.88 .4539993 .0073050 + 1174917.75 .4566097 .0072407 + 1175092.75 .4550972 .0072510 + 1175267.75 .4550952 .0072582 + 1175442.75 .4622115 .0073868 + 1175617.88 .4645638 .0074032 + 1175792.88 .4661772 .0074589 + 1175968.12 .4613755 .0074375 + 1176143.25 .4676226 .0074786 + 1176318.50 .4643863 .0074139 + 1176493.88 .4750149 .0075800 + 1176669.12 .4789601 .0075736 + 1176844.50 .4680631 .0074134 + 1177019.75 .4670037 .0073340 + 1177195.25 .4751305 .0074542 + 1177370.62 .4772424 .0074690 + 1177546.25 .4719693 .0073587 + 1177721.88 .4810872 .0075422 + 1177897.38 .4742430 .0074407 + 1178073.12 .4856303 .0076358 + 1178248.62 .4806122 .0075885 + 1178424.38 .4808543 .0076509 + 1178600.25 .4770803 .0075482 + 1178775.88 .4853549 .0077036 + 1178951.75 .4875765 .0076889 + 1179127.62 .4759386 .0075975 + 1179303.50 .4856980 .0076510 + 1179479.38 .4987182 .0078755 + 1179655.38 .4786626 .0074781 + 1179831.50 .4735391 .0074807 + 1180007.50 .4880377 .0076750 + 1180183.62 .4842382 .0075998 + 1180359.75 .4953495 .0077551 + 1180536.00 .4999226 .0078552 + 1180712.00 .5139467 .0080294 + 1180888.38 .4924912 .0077377 + 1181064.75 .4980912 .0078840 + 1181241.00 .4963728 .0078305 + 1181417.38 .5001788 .0079418 + 1181593.75 .4904285 .0077679 + 1181770.25 .5065334 .0079469 + 1181946.62 .5016962 .0079053 + 1182123.25 .4905484 .0077329 + 1182299.88 .5095751 .0079941 + 1182476.38 .4833269 .0075705 + 1182653.12 .4929541 .0077492 + 1182829.75 .5017360 .0079113 + 1183006.50 .4933548 .0077867 + 1183183.25 .5048369 .0079329 + 1183360.12 .4986695 .0079129 + 1183537.00 .4956828 .0078340 + 1183713.88 .5043328 .0080209 + 1183890.88 .4971620 .0078123 + 1184067.75 .5085004 .0080364 + 1184244.75 .5017531 .0079570 + 1184421.88 .4997745 .0079447 + 1184598.88 .5013525 .0079400 + 1184776.12 .5047334 .0079823 + 1184953.12 .5109277 .0080404 + 1185130.38 .5115371 .0080907 + 1185307.62 .4997590 .0078189 + 1185484.88 .4993160 .0077695 + 1185662.38 .5090080 .0078698 + 1185839.62 .5148448 .0079594 + 1186017.12 .5112042 .0079529 + 1186194.38 .4929474 .0076654 + 1186372.00 .5064776 .0078909 + 1186549.38 .5136849 .0079454 + 1186727.00 .5107327 .0079490 + 1186904.75 .5090482 .0078571 + 1187082.25 .5005088 .0077520 + 1187260.00 .5212513 .0080538 + 1187437.62 .5193735 .0079526 + 1187615.50 .4973604 .0076390 + 1187793.25 .4988980 .0077620 + 1187971.12 .5194779 .0079819 + 1188149.12 .5238068 .0080996 + 1188326.88 .4982575 .0076839 + 1188504.88 .5050486 .0077658 + 1188682.88 .4949406 .0076456 + 1188861.00 .5071535 .0078526 + 1189039.00 .4985780 .0076180 + 1189217.12 .5096238 .0078372 + 1189395.38 .5011334 .0077624 + 1189573.50 .5132835 .0080042 + 1189751.75 .5064393 .0079279 + 1189930.00 .4964901 .0077125 + 1190108.38 .4895325 .0076602 + 1190286.88 .5183467 .0081456 + 1190465.12 .5170745 .0081135 + 1190643.62 .5087596 .0079732 + 1190822.00 .5026504 .0078303 + 1191000.62 .5155377 .0079859 + 1191179.12 .4943498 .0076266 + 1191357.75 .4963937 .0077481 + 1191536.50 .5041175 .0077903 + 1191715.12 .4938334 .0076733 + 1191893.88 .5009902 .0077047 + 1192072.50 .4837961 .0074936 + 1192251.38 .4946318 .0076876 + 1192430.12 .4965371 .0077104 + 1192609.12 .5031189 .0078645 + 1192788.12 .4815218 .0075435 + 1192967.00 .4903756 .0076815 + 1193146.12 .4712272 .0073905 + 1193325.00 .4671454 .0073168 + 1193504.25 .4749829 .0074238 + 1193683.25 .4687751 .0073716 + 1193862.50 .4693230 .0073480 + 1194041.75 .4712518 .0074468 + 1194220.88 .4769122 .0075099 + 1194400.25 .4577598 .0072391 + 1194579.50 .4610451 .0072775 + 1194759.00 .4699382 .0074906 + 1194938.38 .4544857 .0072950 + 1195117.75 .4528013 .0072277 + 1195297.38 .4679236 .0074341 + 1195476.75 .4529904 .0072532 + 1195656.50 .4370560 .0070072 + 1195836.00 .4450091 .0071032 + 1196015.62 .4388443 .0070374 + 1196195.50 .4375769 .0070838 + 1196375.12 .4339062 .0070750 + 1196554.88 .4287942 .0069436 + 1196734.62 .4238717 .0068297 + 1196914.62 .4274334 .0069858 + 1197094.38 .4156005 .0067736 + 1197274.38 .4194970 .0067829 + 1197454.50 .4124730 .0067158 + 1197634.38 .4228116 .0068692 + 1197814.50 .4102270 .0067010 + 1197994.50 .4181832 .0068061 + 1198174.75 .4212945 .0068848 + 1198354.75 .4145889 .0067585 + 1198535.12 .4115148 .0067064 + 1198715.50 .4177019 .0068405 + 1198895.62 .4185910 .0068167 + 1199076.12 .4099877 .0067311 + 1199256.38 .3963221 .0065243 + 1199436.88 .4056378 .0066610 + 1199617.25 .3975442 .0065181 + 1199797.75 .4005671 .0066180 + 1199978.38 .3962099 .0065943 + 1200158.88 .3903949 .0065285 + 1200339.62 .3903341 .0065888 + 1200520.25 .3806385 .0064441 + 1200701.00 .3419360 .0058797 + 1200881.75 .3352035 .0058851 + 1201062.50 .3179545 .0056780 + 1201243.38 .3059635 .0055331 + 1201424.12 .2873512 .0052782 + 1201605.12 .2701080 .0050867 + 1201786.00 .2526990 .0048607 + 1201967.12 .2400984 .0047424 + 1202148.25 .2167996 .0043789 + 1202329.25 .2121142 .0043589 + 1202510.38 .1941208 .0041113 + 1202691.50 .1987478 .0041914 + 1202872.75 .1882822 .0040570 + 1203053.88 .1763802 .0038577 + 1203235.25 .1807984 .0039570 + 1203416.62 .1776362 .0038948 + 1203597.88 .1776983 .0039357 + 1203779.38 .1757900 .0038959 + 1203960.75 .1834037 .0040200 + 1204142.25 .1807409 .0039855 + 1204323.75 .1794617 .0039703 + 1204505.38 .1840367 .0039999 + 1204687.00 .1823991 .0040339 + 1204868.62 .1790391 .0039062 + 1205050.38 .1850311 .0039551 + 1205232.00 .1867781 .0040087 + 1205413.88 .1937666 .0041251 + 1205595.62 .1861683 .0039802 + 1205777.50 .1994826 .0042229 + 1205959.50 .1954403 .0041378 + 1206141.38 .1985850 .0041710 + 1206323.38 .1920878 .0040899 + 1206505.38 .2084164 .0043723 + 1206687.50 .2020617 .0042167 + 1206869.62 .2015672 .0042619 + 1207051.75 .2102587 .0044362 + 1207234.00 .2072094 .0043290 + 1207416.12 .2030665 .0042078 + 1207598.50 .2120751 .0044123 + 1207780.62 .2090636 .0043007 + 1207963.12 .2251978 .0045518 + 1208145.50 .2159184 .0044135 + 1208327.88 .2274923 .0045724 + 1208510.50 .2159849 .0043957 + 1208692.88 .2254804 .0045509 + 1208875.50 .2299797 .0046308 + 1209058.00 .2261500 .0044937 + 1209240.75 .2289893 .0045246 + 1209423.50 .2253072 .0044842 + 1209606.12 .2373998 .0046724 + 1209789.00 .2344400 .0045820 + 1209971.62 .2354234 .0046686 + 1210154.62 .2363279 .0046451 + 1210337.38 .2471074 .0048402 + 1210520.38 .2412831 .0047443 + 1210703.50 .2407019 .0047455 + 1210886.38 .2413457 .0047614 + 1211069.50 .2421696 .0048065 + 1211252.50 .2474734 .0048768 + 1211435.75 .2523484 .0049252 + 1211619.00 .2395653 .0047487 + 1211802.12 .2361936 .0046665 + 1211985.50 .2444538 .0047962 + 1212168.62 .2479799 .0048313 + 1212352.12 .2548845 .0049320 + 1212535.38 .2525132 .0048965 + 1212718.88 .2587533 .0049649 + 1212902.38 .2714169 .0051465 + 1213085.88 .2690317 .0050892 + 1213269.50 .2652473 .0050288 + 1213453.00 .2639853 .0049633 + 1213636.75 .2716304 .0051020 + 1213820.25 .2721071 .0050807 + 1214004.12 .2765235 .0052005 + 1214187.88 .2779841 .0051616 + 1214371.62 .2827603 .0052543 + 1214555.50 .2774716 .0051327 + 1214739.38 .2666194 .0050035 + 1214923.38 .2812300 .0052098 + 1215107.25 .2801742 .0052284 + 1215291.38 .2844303 .0052708 + 1215475.50 .2837262 .0052526 + 1215659.50 .2861323 .0052545 + 1215843.62 .2800921 .0051734 + 1216027.75 .2817882 .0051572 + 1216212.00 .2820505 .0051633 + 1216396.25 .2978539 .0054198 + 1216580.62 .2892510 .0053387 + 1216765.00 .2897958 .0053083 + 1216949.38 .2962319 .0054588 + 1217133.88 .2862810 .0053095 + 1217318.25 .2941554 .0054179 + 1217502.88 .2955053 .0054537 + 1217687.50 .2915574 .0054161 + 1217872.00 .2902087 .0053477 + 1218056.62 .2864210 .0052906 + 1218241.25 .2952427 .0054339 + 1218426.12 .3069938 .0056678 + 1218610.75 .2942085 .0054767 + 1218795.62 .2961625 .0054915 + 1218980.62 .2981481 .0055257 + 1219165.38 .3042062 .0056360 + 1219350.38 .3050654 .0056369 + 1219535.25 .3043680 .0055672 + 1219720.38 .3049938 .0056009 + 1219905.38 .3055002 .0056106 + 1220090.50 .3104058 .0056682 + 1220275.75 .3085271 .0055940 + 1220460.88 .3317046 .0059608 + 1220646.12 .3167418 .0056920 + 1220831.38 .3230517 .0058201 + 1221016.75 .3220726 .0057795 + 1221202.00 .3236577 .0057671 + 1221387.50 .3313636 .0058591 + 1221573.00 .3208935 .0056860 + 1221758.38 .3291048 .0057953 + 1221944.00 .3295268 .0057966 + 1222129.50 .3281112 .0057345 + 1222315.12 .3282472 .0058023 + 1222500.75 .3373400 .0059138 + 1222686.50 .3355870 .0058982 + 1222872.25 .3440501 .0060240 + 1223058.00 .3341139 .0058533 + 1223243.88 .3348874 .0059040 + 1223429.62 .3388485 .0059538 + 1223615.62 .3454430 .0060216 + 1223801.62 .3450052 .0060305 + 1223987.62 .3349861 .0058531 + 1224173.75 .3492538 .0060533 + 1224359.62 .3456095 .0060262 + 1224545.88 .3487758 .0060231 + 1224732.00 .3462049 .0060362 + 1224918.25 .3469244 .0060162 + 1225104.50 .3530525 .0060736 + 1225290.75 .3478302 .0059893 + 1225477.12 .3572972 .0061475 + 1225663.50 .3654847 .0062314 + 1225850.00 .3506925 .0060562 + 1226036.25 .3676376 .0062842 + 1226222.88 .3642816 .0062953 + 1226409.50 .3547617 .0060563 + 1226596.00 .3590138 .0061595 + 1226782.75 .3633544 .0062194 + 1226969.25 .3512751 .0060373 + 1227156.12 .3662116 .0062896 + 1227342.75 .3677262 .0062776 + 1227529.62 .3711791 .0063817 + 1227716.50 .3618395 .0062127 + 1227903.38 .3626892 .0062540 + 1228090.38 .3678833 .0063261 + 1228277.25 .3674883 .0063203 + 1228464.38 .3799074 .0064817 + 1228651.50 .3702482 .0063273 + 1228838.50 .3689606 .0062971 + 1229025.75 .3623288 .0061740 + 1229212.75 .3728675 .0063412 + 1229400.12 .3844408 .0064620 + 1229587.25 .3731529 .0063236 + 1229774.62 .3800930 .0063943 + 1229962.12 .3738982 .0063689 + 1230149.38 .3784411 .0064090 + 1230336.88 .3817051 .0064158 + 1230524.38 .3794343 .0063739 + 1230711.88 .3769550 .0062771 + 1230899.38 .3853816 .0064405 + 1231087.12 .3859114 .0064966 + 1231274.88 .3826950 .0064778 + 1231462.38 .3863436 .0064707 + 1231650.25 .3884701 .0065422 + 1231838.00 .3961918 .0066223 + 1232025.88 .3908564 .0064826 + 1232213.62 .3973576 .0066391 + 1232401.62 .3908322 .0064880 + 1232589.62 .4094350 .0067615 + 1232777.62 .4065902 .0067368 + 1232965.75 .4079483 .0067454 + 1233153.75 .3948430 .0065751 + 1233341.88 .4027706 .0066742 + 1233530.00 .4067763 .0067438 + 1233718.25 .4039019 .0066622 + 1233906.62 .3999603 .0065836 + 1234094.88 .4033926 .0066463 + 1234283.25 .4141009 .0067646 + 1234471.50 .4036298 .0066113 + 1234660.00 .4178841 .0068688 + 1234848.62 .4179032 .0068471 + 1235037.00 .4151479 .0068579 + 1235225.62 .4096565 .0067454 + 1235414.12 .4175012 .0068856 + 1235602.88 .4172442 .0068594 + 1235791.50 .4349447 .0071337 + 1235980.38 .4328173 .0071283 + 1236169.12 .4305421 .0069884 + 1236357.88 .4377292 .0071155 + 1236546.88 .4291294 .0069898 + 1236735.62 .4412120 .0071143 + 1236924.75 .4147787 .0067870 + 1237113.62 .4381317 .0070677 + 1237302.75 .4396954 .0071115 + 1237491.88 .4347490 .0070062 + 1237680.88 .4349976 .0070226 + 1237870.12 .4398037 .0071398 + 1238059.25 .4419233 .0071511 + 1238248.62 .4415005 .0071933 + 1238437.75 .4334374 .0070577 + 1238627.25 .4591267 .0074111 + 1238816.75 .4486788 .0072755 + 1239006.00 .4530797 .0072966 + 1239195.62 .4423094 .0071946 + 1239385.00 .4511890 .0072969 + 1239574.62 .4511662 .0073279 + 1239764.12 .4537435 .0073608 + 1239953.88 .4615611 .0074974 + 1240143.62 .4628607 .0075226 + 1240333.25 .4763576 .0077927 + 1240523.12 .4703879 .0076973 + 1240712.88 .4562998 .0075385 + 1240902.75 .4746211 .0077937 + 1241092.75 .4638641 .0076451 + 1241282.62 .4830566 .0079547 + 1241472.75 .4942112 .0081530 + 1241662.62 .4759359 .0078073 + 1241852.88 .4813120 .0079610 + 1242042.88 .4859454 .0079631 + 1242233.12 .4806418 .0079143 + 1242423.38 .4922104 .0080249 + 1242613.50 .4969623 .0080491 + 1242804.00 .4940194 .0079951 + 1242994.25 .5007220 .0080464 + 1243184.62 .4940018 .0079216 + 1243375.00 .5077386 .0080534 + 1243565.50 .5146889 .0081388 + 1243756.12 .5231960 .0082920 + 1243946.62 .5250803 .0083097 + 1244137.25 .5315500 .0084110 + 1244327.88 .5194103 .0081790 + 1244518.62 .5284523 .0083576 + 1244709.25 .5229353 .0081915 + 1244900.12 .5344118 .0083755 + 1245091.00 .5381991 .0083722 + 1245281.88 .5402690 .0083800 + 1245472.88 .5591903 .0086283 + 1245663.62 .5451150 .0083629 + 1245854.75 .5419289 .0083068 + 1246045.75 .5441542 .0083063 + 1246236.88 .5627637 .0085422 + 1246428.12 .5721523 .0086147 + 1246619.12 .5681897 .0085379 + 1246810.50 .5820517 .0088173 + 1247001.62 .5723321 .0086171 + 1247193.00 .5835049 .0087356 + 1247384.50 .5846636 .0087849 + 1247575.75 .5973642 .0089713 + 1247767.38 .5941406 .0088875 + 1247958.75 .5754100 .0085063 + 1248150.38 .6138162 .0091378 + 1248341.75 .5939756 .0087838 + 1248533.50 .6106132 .0090270 + 1248725.25 .5972435 .0088539 + 1248916.88 .6085804 .0089879 + 1249108.62 .6143841 .0090609 + 1249300.38 .6125340 .0089787 + 1249492.25 .6214107 .0090846 + 1249684.12 .6168072 .0090770 + 1249876.12 .6191503 .0090775 + 1250068.12 .6471792 .0094817 + 1250260.12 .6378733 .0093067 + 1250452.25 .6337653 .0092823 + 1250644.25 .6282030 .0092145 + 1250836.50 .6309043 .0091933 + 1251028.50 .6393476 .0093812 + 1251220.88 .6315063 .0092137 + 1251413.25 .6323404 .0092499 + 1251605.50 .6525837 .0095556 + 1251797.88 .6480156 .0094152 + 1251990.25 .6603257 .0096504 + 1252182.75 .6349281 .0092990 + 1252375.38 .6410162 .0093693 + 1252567.88 .6429473 .0094073 + 1252760.50 .6271665 .0092250 + 1252953.00 .6241392 .0092114 + 1253145.75 .6261808 .0092063 + 1253338.38 .6246276 .0092156 + 1253531.25 .6290138 .0092976 + 1253724.12 .6077122 .0090587 + 1253917.00 .5990995 .0089454 + 1254109.88 .6012658 .0089889 + 1254302.75 .6014845 .0089940 + 1254495.88 .5939339 .0089960 + 1254688.75 .5665548 .0085993 + 1254882.00 .5841701 .0089253 + 1255075.12 .5764251 .0087589 + 1255268.25 .5700266 .0087796 + 1255461.50 .5657951 .0086824 + 1255654.75 .5533203 .0085623 + 1255848.12 .5364453 .0083196 + 1256041.38 .5524302 .0085489 + 1256234.88 .5368193 .0082952 + 1256428.38 .5335913 .0082789 + 1256621.75 .5372208 .0083481 + 1256815.38 .5221874 .0082148 + 1257008.88 .5027027 .0079675 + 1257202.50 .4867874 .0077041 + 1257396.12 .4872026 .0077702 + 1257589.88 .4705523 .0074649 + 1257783.75 .4835435 .0077368 + 1257977.38 .4730919 .0075778 + 1258171.38 .4575686 .0073973 + 1258365.12 .4518101 .0073217 + 1258559.12 .4420632 .0071710 + 1258753.25 .4374911 .0071109 + 1258947.12 .4203784 .0068095 + 1259141.25 .4248577 .0068827 + 1259335.25 .4357878 .0071232 + 1259529.50 .4171328 .0068384 + 1259723.62 .4061361 .0067143 + 1259918.00 .3939786 .0065460 + 1260112.38 .4072960 .0067984 + 1260306.62 .4011266 .0066648 + 1260501.12 .3953021 .0065892 + 1260695.38 .3878455 .0065263 + 1260890.00 .3772099 .0063116 + 1261084.38 .3692875 .0062440 + 1261279.00 .3561634 .0060849 + 1261473.75 .3653760 .0061437 + 1261668.25 .3485087 .0059899 + 1261863.00 .3473227 .0059635 + 1262057.62 .3399056 .0058769 + 1262252.50 .3337584 .0058461 + 1262447.25 .3228522 .0057137 + 1262642.25 .3209451 .0057439 + 1262837.25 .2989492 .0054272 + 1263032.12 .2863511 .0053203 + 1263227.25 .2564540 .0049098 + 1263422.12 .2288508 .0045989 + 1263617.38 .2053932 .0043029 + 1263812.38 .1552350 .0035907 + 1264007.75 .1264901 .0031687 + 1264203.00 .1092416 .0029426 + 1264398.25 .0998122 .0028022 + 1264593.62 .0960252 .0027274 + 1264788.88 .1198453 .0031198 + 1264984.38 .1431413 .0034042 + 1265180.00 .1742443 .0038717 + 1265375.38 .2155183 .0044178 + 1265571.00 .2433414 .0047443 + 1265766.50 .2687178 .0050837 + 1265962.25 .2833213 .0052980 + 1266157.88 .2892551 .0053237 + 1266353.62 .3062817 .0055518 + 1266549.50 .3032557 .0054859 + 1266745.25 .3225020 .0057665 + 1266941.25 .3128548 .0055990 + 1267137.00 .3177027 .0056745 + 1267333.12 .3178400 .0056833 + 1267529.00 .3216349 .0057418 + 1267725.12 .3219032 .0057014 + 1267921.38 .3295522 .0058099 + 1268117.38 .3228825 .0057398 + 1268313.62 .3251593 .0057238 + 1268509.75 .3190420 .0056717 + 1268706.12 .3278532 .0057717 + 1268902.38 .3180968 .0056595 + 1269098.88 .3262788 .0057933 + 1269295.38 .3351690 .0058919 + 1269491.75 .3259149 .0057498 + 1269688.25 .3262530 .0057243 + 1269884.75 .3234950 .0056831 + 1270081.50 .3154248 .0055499 + 1270278.25 .3290117 .0057604 + 1270474.75 .3294811 .0056991 + 1270671.62 .3318295 .0058330 + 1270868.25 .3243878 .0056735 + 1271065.25 .3288172 .0057934 + 1271262.00 .3400043 .0058794 + 1271459.00 .3369492 .0058880 + 1271656.00 .3258804 .0057319 + 1271853.00 .3352654 .0058876 + 1272050.12 .3326790 .0057600 + 1272247.12 .3261354 .0057006 + 1272444.38 .3307606 .0057751 + 1272641.50 .3368002 .0058924 + 1272838.75 .3286085 .0057685 + 1273036.12 .3299379 .0058133 + 1273233.38 .3259929 .0057195 + 1273430.88 .3379399 .0059536 + 1273628.25 .3310502 .0058318 + 1273825.75 .3317283 .0058482 + 1274023.12 .3150529 .0056143 + 1274220.88 .3240460 .0057571 + 1274418.50 .3250040 .0057631 + 1274616.12 .3358583 .0059460 + 1274813.88 .3363954 .0059443 + 1275011.50 .3275034 .0058090 + 1275209.38 .3332657 .0059550 + 1275407.12 .3379177 .0060936 + 1275605.12 .3244083 .0058235 + 1275803.12 .3275365 .0058903 + 1276001.00 .3281401 .0058915 + 1276199.12 .3286456 .0059132 + 1276397.12 .3368852 .0059926 + 1276595.25 .3280878 .0058916 + 1276793.50 .3283125 .0058590 + 1276991.62 .3417942 .0061003 + 1277190.00 .3240197 .0057842 + 1277388.25 .3350243 .0060135 + 1277586.62 .3277626 .0058926 + 1277785.00 .3319412 .0059789 + 1277983.50 .3301089 .0059609 + 1278182.00 .3263463 .0058596 + 1278380.50 .3349451 .0060161 + 1278579.12 .3324079 .0059624 + 1278777.62 .3191757 .0057315 + 1278976.50 .3284284 .0058265 + 1279175.00 .3330165 .0059126 + 1279373.88 .3258795 .0057559 + 1279572.75 .3263697 .0058005 + 1279771.62 .3324213 .0058930 + 1279970.50 .3338853 .0059602 + 1280169.38 .3304460 .0058806 + 1280368.50 .3295418 .0058340 + 1280567.38 .3294658 .0058453 + 1280766.62 .3324814 .0059144 + 1280965.88 .3321635 .0057961 + 1281164.88 .3414901 .0059989 + 1281364.25 .3341478 .0058811 + 1281563.38 .3333441 .0058398 + 1281762.88 .3389377 .0059263 + 1281962.12 .3289809 .0058078 + 1282161.62 .3427295 .0060447 + 1282361.12 .3345067 .0059325 + 1282560.50 .3356718 .0059029 + 1282760.25 .3418686 .0060032 + 1282959.75 .3498651 .0061185 + 1283159.38 .3457240 .0060298 + 1283359.25 .3409039 .0059693 + 1283558.88 .3415881 .0059214 + 1283758.75 .3524315 .0061085 + 1283958.50 .3492665 .0061008 + 1284158.50 .3372119 .0058284 + 1284358.25 .3348560 .0058146 + 1284558.38 .3471918 .0060332 + 1284758.50 .3379365 .0058936 + 1284958.38 .3308427 .0057892 + 1285158.62 .3422632 .0059090 + 1285358.62 .3380627 .0058309 + 1285559.00 .3426020 .0059620 + 1285759.12 .3441805 .0059917 + 1285959.50 .3475249 .0060349 + 1286160.00 .3551615 .0061253 + 1286360.25 .3327963 .0057991 + 1286560.75 .3461179 .0059390 + 1286761.12 .3478545 .0060134 + 1286961.75 .3416876 .0059409 + 1287162.25 .3549305 .0061115 + 1287363.00 .3443817 .0059130 + 1287563.75 .3531558 .0060635 + 1287764.38 .3540142 .0061302 + 1287965.25 .3516298 .0060435 + 1288166.00 .3519096 .0061075 + 1288366.88 .3553739 .0061387 + 1288567.75 .3509373 .0060664 + 1288768.75 .3500078 .0060355 + 1288969.88 .3495022 .0060613 + 1289170.88 .3451179 .0059843 + 1289372.00 .3560819 .0061498 + 1289573.12 .3441052 .0059935 + 1289774.38 .3515220 .0061075 + 1289975.75 .3661683 .0062650 + 1290176.88 .3452816 .0059899 + 1290378.25 .3526498 .0060627 + 1290579.62 .3502966 .0060269 + 1290781.12 .3553028 .0061129 + 1290982.50 .3524078 .0060785 + 1291184.12 .3481560 .0059938 + 1291385.75 .3584716 .0061755 + 1291587.25 .3435431 .0058982 + 1291789.00 .3500906 .0060339 + 1291990.62 .3515625 .0060651 + 1292192.50 .3483761 .0060201 + 1292394.25 .3540656 .0060933 + 1292596.12 .3549287 .0061092 + 1292798.12 .3561499 .0062031 + 1293000.00 .3534198 .0061624 + 1293202.12 .3536350 .0061885 + 1293404.00 .3469258 .0061253 + 1293606.25 .3505016 .0061570 + 1293808.25 .3543820 .0061841 + 1294010.50 .3511175 .0061451 + 1294212.88 .3658435 .0063527 + 1294415.00 .3570755 .0062235 + 1294617.50 .3662175 .0063913 + 1294819.75 .3594519 .0062493 + 1295022.25 .3655426 .0064183 + 1295224.75 .3543706 .0062181 + 1295427.25 .3450422 .0060924 + 1295629.88 .3572713 .0062943 + 1295832.38 .3619686 .0063684 + 1296035.12 .3480963 .0061450 + 1296237.75 .3579462 .0063072 + 1296440.62 .3584311 .0063186 + 1296643.50 .3670411 .0064019 + 1296846.25 .3530268 .0061930 + 1297049.25 .3614042 .0063306 + 1297252.12 .3507204 .0061515 + 1297455.12 .3570712 .0062470 + 1297658.12 .3518808 .0061357 + 1297861.25 .3477750 .0060897 + 1298064.50 .3615932 .0063012 + 1298267.62 .3682274 .0063628 + 1298470.88 .3654269 .0063225 + 1298674.12 .3558491 .0062086 + 1298877.50 .3566070 .0062290 + 1299080.75 .3605249 .0062909 + 1299284.38 .3649257 .0063927 + 1299487.88 .3648579 .0063347 + 1299691.25 .3705928 .0063807 + 1299895.00 .3583758 .0062299 + 1300098.50 .3628230 .0063132 + 1300302.25 .3683340 .0064002 + 1300505.88 .3668099 .0063493 + 1300709.75 .3698989 .0064428 + 1300913.62 .3679934 .0064151 + 1301117.38 .3638719 .0063243 + 1301321.38 .3607085 .0062346 + 1301525.25 .3747908 .0065550 + 1301729.25 .3620825 .0063049 + 1301933.38 .3628581 .0063406 + 1302137.38 .3676005 .0064141 + 1302341.62 .3705058 .0064080 + 1302545.75 .3611567 .0063508 + 1302750.12 .3633758 .0062994 + 1302954.25 .3739295 .0064675 + 1303158.75 .3651248 .0063782 + 1303363.12 .3571144 .0062266 + 1303567.50 .3673687 .0064171 + 1303772.12 .3709253 .0065299 + 1303976.50 .3688141 .0064911 + 1304181.12 .3689926 .0064419 + 1304385.62 .3646759 .0063947 + 1304590.50 .3752417 .0064982 + 1304795.25 .3660977 .0063924 + 1304999.88 .3619637 .0063811 + 1305204.88 .3698515 .0064400 + 1305409.62 .3712869 .0065110 + 1305614.62 .3622621 .0063311 + 1305819.50 .3652943 .0064155 + 1306024.62 .3677890 .0064961 + 1306229.75 .3732421 .0065147 + 1306434.75 .3612973 .0063549 + 1306640.00 .3819213 .0066814 + 1306845.12 .3691684 .0065396 + 1307050.38 .3637502 .0064577 + 1307255.62 .3722358 .0065549 + 1307461.12 .3715706 .0065652 + 1307666.50 .3598187 .0063325 + 1307871.88 .3644529 .0064168 + 1308077.50 .3677237 .0064935 + 1308282.88 .3688008 .0064301 + 1308488.62 .3734940 .0064697 + 1308694.38 .3765010 .0065254 + 1308899.88 .3751742 .0065326 + 1309105.75 .3647453 .0063218 + 1309311.50 .3658584 .0063940 + 1309517.38 .3709671 .0064885 + 1309723.12 .3894371 .0067137 + 1309929.12 .3766875 .0065210 + 1310135.25 .3628632 .0063099 + 1310341.12 .3771438 .0065549 + 1310547.38 .3805675 .0066267 + 1310753.38 .3752561 .0064819 + 1310959.62 .3764241 .0065611 + 1311165.75 .3702007 .0063594 + 1311372.12 .3642781 .0063475 + 1311578.50 .3713907 .0063971 + 1311784.75 .3863980 .0066563 + 1311991.25 .3722890 .0064721 + 1312197.62 .3857705 .0066505 + 1312404.25 .3658979 .0063445 + 1312610.75 .3849419 .0066638 + 1312817.50 .3657897 .0063611 + 1313024.25 .3716892 .0064686 + 1313230.75 .3756254 .0065252 + 1313437.62 .3667077 .0063854 + 1313644.38 .3736015 .0065041 + 1313851.38 .3763059 .0065387 + 1314058.38 .3759899 .0065357 + 1314265.12 .3761927 .0065232 + 1314472.25 .3765486 .0065449 + 1314679.25 .3865675 .0067139 + 1314886.38 .3739606 .0064912 + 1315093.50 .3764869 .0065329 + 1315300.75 .3836887 .0067128 + 1315508.12 .3875794 .0067726 + 1315715.25 .3717409 .0065156 + 1315922.75 .3800650 .0066493 + 1316130.00 .3821065 .0066902 + 1316337.62 .3715133 .0065182 + 1316545.00 .3737575 .0065261 + 1316752.62 .3739601 .0065843 + 1316960.25 .3752111 .0065637 + 1317167.88 .3832771 .0066826 + 1317375.62 .3696273 .0064793 + 1317583.25 .3811221 .0066069 + 1317791.12 .3803934 .0065935 + 1317998.88 .3638290 .0063435 + 1318206.88 .3825029 .0066379 + 1318414.88 .3743927 .0065595 + 1318622.75 .3786155 .0065413 + 1318830.88 .3783244 .0065934 + 1319038.88 .3816867 .0066709 + 1319247.12 .3785957 .0066204 + 1319455.12 .3757249 .0065923 + 1319663.50 .3897907 .0067811 + 1319871.88 .3800835 .0066142 + 1320080.12 .3798089 .0066427 + 1320288.62 .3751415 .0065961 + 1320496.88 .3899623 .0067915 + 1320705.50 .3700471 .0064339 + 1320914.12 .3767107 .0065226 + 1321122.62 .3786478 .0065904 + 1321331.25 .3802155 .0066164 + 1321539.88 .3838534 .0066461 + 1321748.62 .3846290 .0066430 + 1321957.38 .3838984 .0066178 + 1322166.25 .3974388 .0068747 + 1322375.25 .3722902 .0064638 + 1322584.12 .3831872 .0066704 + 1322793.12 .3877766 .0067064 + 1323002.00 .3910415 .0067469 + 1323211.25 .3880900 .0066734 + 1323420.25 .3808278 .0065645 + 1323629.50 .3711702 .0064548 + 1323838.88 .3838954 .0066845 + 1324048.00 .3916994 .0068440 + 1324257.38 .3862714 .0067188 + 1324466.62 .3897303 .0068403 + 1324676.12 .3923811 .0068008 + 1324885.50 .3856300 .0067336 + 1325095.12 .3979212 .0068860 + 1325304.88 .3778544 .0065553 + 1325514.38 .3913662 .0067500 + 1325724.12 .3799808 .0065435 + 1325933.75 .3776742 .0065551 + 1326143.62 .3826919 .0066178 + 1326353.25 .3837602 .0066126 + 1326563.25 .3900870 .0066803 + 1326773.25 .3796056 .0065142 + 1326983.12 .3809858 .0065825 + 1327193.25 .3862990 .0066102 + 1327403.25 .3923118 .0067570 + 1327613.38 .3839912 .0065932 + 1327823.75 .3800607 .0065270 + 1328033.75 .3815028 .0065526 + 1328244.12 .3835939 .0065827 + 1328454.38 .3929753 .0067232 + 1328664.88 .3817948 .0065157 + 1328875.12 .3967638 .0067792 + 1329085.75 .3806812 .0065398 + 1329296.38 .3866284 .0065984 + 1329506.75 .3863857 .0065975 + 1329717.50 .3881068 .0065969 + 1329928.12 .3843828 .0065394 + 1330138.88 .3924986 .0066698 + 1330349.50 .3931326 .0066920 + 1330560.50 .3887347 .0066247 + 1330771.38 .3960847 .0067753 + 1330982.25 .3923930 .0067479 + 1331193.38 .3915165 .0067127 + 1331404.25 .4019512 .0069257 + 1331615.38 .3847131 .0066694 + 1331826.38 .3853311 .0066468 + 1332037.62 .3822872 .0066359 + 1332249.00 .3854147 .0066432 + 1332460.12 .3816943 .0066266 + 1332671.62 .3822254 .0065792 + 1332882.88 .3804336 .0065944 + 1333094.38 .3668779 .0063183 + 1333305.88 .3856482 .0066126 + 1333517.38 .3657364 .0063612 + 1333729.00 .3622636 .0063199 + 1333940.50 .3809028 .0066222 + 1334152.25 .3691625 .0064461 + 1334363.88 .3729531 .0064716 + 1334575.75 .3660658 .0063398 + 1334787.75 .3752549 .0064406 + 1334999.50 .3761131 .0065050 + 1335211.50 .3818453 .0065369 + 1335423.38 .3734209 .0064406 + 1335635.50 .3899648 .0066843 + 1335847.50 .3857128 .0066110 + 1336059.62 .3899598 .0066883 + 1336272.00 .4080849 .0069794 + 1336484.12 .3844216 .0065718 + 1336696.50 .3822257 .0066076 + 1336908.62 .3986900 .0068135 + 1337121.12 .3803726 .0064884 + 1337333.50 .3908928 .0066660 + 1337546.00 .3928180 .0067036 + 1337758.62 .3857808 .0065938 + 1337971.12 .3880439 .0066239 + 1338183.88 .3925618 .0066972 + 1338396.50 .3854586 .0066921 + 1338609.25 .3802573 .0066343 + 1338822.00 .3899675 .0067929 + 1339034.88 .3908295 .0068295 + 1339247.88 .3968468 .0069250 + 1339460.75 .3906785 .0068351 + 1339673.88 .3802272 .0066894 + 1339886.75 .3922088 .0069421 + 1340100.00 .3982483 .0070053 + 1340313.12 .3747624 .0066358 + 1340526.25 .3791893 .0066477 + 1340739.62 .4001083 .0069614 + 1340952.75 .3930520 .0067910 + 1341166.25 .3989962 .0068436 + 1341379.50 .3936084 .0067917 + 1341593.12 .4023359 .0068612 + 1341806.62 .3884919 .0066582 + 1342020.12 .3977279 .0068073 + 1342233.75 .3952342 .0067485 + 1342447.38 .3894988 .0066156 + 1342661.12 .3930677 .0067293 + 1342874.75 .3997012 .0068266 + 1343088.75 .4030201 .0068564 + 1343302.62 .4021389 .0068255 + 1343516.50 .3912228 .0066456 + 1343730.50 .3875887 .0066268 + 1343944.38 .4025103 .0068030 + 1344158.62 .3973890 .0067786 + 1344372.62 .3922653 .0066611 + 1344586.88 .3900346 .0066664 + 1344801.12 .3903288 .0066556 + 1345015.25 .4039495 .0068549 + 1345229.75 .3878389 .0066665 + 1345444.00 .4037705 .0068978 + 1345658.50 .3960058 .0067444 + 1345872.88 .3926576 .0067262 + 1346087.50 .3938423 .0067054 + 1346302.12 .3957990 .0067902 + 1346516.62 .3992549 .0067876 + 1346731.50 .4008860 .0068344 + 1346946.12 .3916119 .0066743 + 1347161.00 .3862003 .0065702 + 1347375.88 .3903359 .0066396 + 1347590.62 .3926835 .0066997 + 1347805.62 .4001231 .0068053 + 1348020.50 .4006014 .0067913 + 1348235.62 .3949004 .0067178 + 1348450.62 .4003139 .0067791 + 1348665.88 .4036519 .0068788 + 1348881.25 .3920560 .0066753 + 1349096.38 .3975658 .0068321 + 1349311.75 .3959586 .0067581 + 1349527.00 .3949719 .0067396 + 1349742.50 .3967016 .0068130 + 1349957.75 .3989901 .0067798 + 1350173.38 .4078312 .0069432 + 1350389.00 .4102594 .0069871 + 1350604.50 .4102079 .0069624 + 1350820.25 .4029739 .0068678 + 1351035.88 .3929687 .0067085 + 1351251.75 .3930810 .0067231 + 1351467.50 .3926986 .0066602 + 1351683.38 .4013730 .0068181 + 1351899.38 .3976326 .0068485 + 1352115.25 .3978568 .0067371 + 1352331.38 .4035686 .0068188 + 1352547.38 .3968608 .0067364 + 1352763.62 .3967209 .0067772 + 1352979.62 .3909313 .0066709 + 1353196.00 .3852544 .0066459 + 1353412.38 .3837894 .0065809 + 1353628.50 .4143287 .0070296 + 1353845.00 .3804301 .0065161 + 1354061.38 .3900322 .0066711 + 1354277.88 .3976926 .0068269 + 1354494.62 .3878413 .0066601 + 1354711.00 .3947677 .0067566 + 1354927.75 .3921091 .0067416 + 1355144.38 .3876761 .0066721 + 1355361.25 .3918933 .0067635 + 1355577.88 .3936957 .0067660 + 1355794.88 .3869154 .0066600 + 1356011.88 .3947381 .0068121 + 1356228.75 .3798640 .0065365 + 1356445.75 .3781133 .0065560 + 1356662.75 .3828974 .0066456 + 1356880.00 .3942784 .0067876 + 1357097.00 .3806947 .0065378 + 1357314.38 .3903497 .0067381 + 1357531.62 .3850425 .0065782 + 1357748.88 .3720729 .0064246 + 1357966.38 .4017555 .0068892 + 1358183.62 .3894606 .0066787 + 1358401.25 .3914040 .0067396 + 1358618.62 .3918189 .0067631 + 1358836.38 .3990285 .0068253 + 1359054.12 .3898266 .0067759 + 1359271.62 .3913442 .0068242 + 1359489.50 .3932527 .0068548 + 1359707.12 .4001665 .0070312 + 1359925.12 .3969210 .0069500 + 1360143.12 .3876384 .0068109 + 1360360.88 .3950500 .0069954 + 1360579.00 .3856826 .0067944 + 1360797.00 .3843862 .0067245 + 1361015.12 .3962080 .0069688 + 1361233.25 .3926629 .0068388 + 1361451.50 .3894441 .0067551 + 1361669.88 .3879561 .0067132 + 1361888.12 .3889609 .0067244 + 1362106.50 .3859741 .0067361 + 1362324.88 .3805555 .0065809 + 1362543.38 .4002896 .0068685 + 1362761.88 .4046126 .0069021 + 1362980.50 .4008669 .0067944 + 1363199.25 .4107262 .0069537 + 1363417.88 .3917130 .0066119 + 1363636.62 .3963409 .0067006 + 1363855.38 .4028265 .0068124 + 1364074.25 .3910083 .0065663 + 1364293.00 .3972124 .0066832 + 1364512.12 .3885857 .0065705 + 1364731.12 .3952583 .0066549 + 1364950.12 .4032097 .0067802 + 1365169.38 .4048478 .0068658 + 1365388.38 .4036594 .0067904 + 1365607.62 .4098253 .0069006 + 1365826.88 .3862287 .0065368 + 1366046.25 .3947830 .0066135 + 1366265.75 .4026037 .0067657 + 1366485.00 .4012385 .0067562 + 1366704.62 .3955416 .0066663 + 1366924.00 .4043429 .0067648 + 1367143.75 .4133518 .0068890 + 1367363.38 .4187938 .0070061 + 1367583.00 .4041605 .0067938 + 1367802.88 .4083081 .0068618 + 1368022.50 .4075987 .0068589 + 1368242.50 .3964184 .0066925 + 1368462.25 .4102900 .0068792 + 1368682.25 .4089419 .0068695 + 1368902.38 .4159488 .0069317 + 1369122.38 .4035388 .0066859 + 1369342.50 .4034866 .0067543 + 1369562.62 .4039990 .0067202 + 1369782.88 .4120554 .0068820 + 1370003.12 .3957474 .0065765 + 1370223.50 .4245184 .0070664 + 1370444.00 .4168940 .0069379 + 1370664.25 .4174915 .0070038 + 1370884.88 .4093685 .0068560 + 1371105.25 .4152692 .0068852 + 1371326.00 .4060878 .0067983 + 1371546.50 .4084193 .0068414 + 1371767.25 .4153191 .0068940 + 1371988.12 .4098484 .0068382 + 1372208.88 .4100373 .0068872 + 1372429.75 .4069127 .0068206 + 1372650.62 .3943715 .0065751 + 1372871.62 .4122809 .0068603 + 1373092.50 .4135334 .0068849 + 1373313.75 .3988343 .0066187 + 1373535.00 .4010008 .0067210 + 1373756.00 .4121518 .0068823 + 1373977.38 .3975922 .0066178 + 1374198.50 .4248957 .0070809 + 1374420.00 .4060690 .0067441 + 1374641.50 .4147952 .0068653 + 1374862.75 .4265518 .0070668 + 1375084.38 .4062469 .0067521 + 1375305.75 .4106145 .0068402 + 1375527.50 .4076755 .0067934 + 1375749.00 .4179923 .0069588 + 1375970.88 .4245169 .0070625 + 1376192.75 .4214860 .0070190 + 1376414.38 .4106074 .0068568 + 1376636.38 .4135296 .0069146 + 1376858.25 .4111149 .0068598 + 1377080.25 .4141468 .0068928 + 1377302.25 .4179125 .0069843 + 1377524.38 .4177803 .0069512 + 1377746.62 .4091106 .0069063 + 1377968.75 .4045959 .0068232 + 1378191.12 .4060617 .0068142 + 1378413.25 .4086578 .0069692 + 1378635.75 .4061883 .0068979 + 1378858.00 .4034754 .0068489 + 1379080.62 .4023769 .0067326 + 1379303.25 .3845634 .0065708 + 1379525.62 .3867076 .0065830 + 1379748.38 .3741469 .0064152 + 1379971.00 .3914368 .0066965 + 1380193.75 .3802201 .0064993 + 1380416.62 .3846794 .0065865 + 1380639.38 .3908587 .0065840 + 1380862.38 .3927366 .0066355 + 1381085.25 .4029833 .0067956 + 1381308.38 .4181287 .0069990 + 1381531.25 .4174061 .0069583 + 1381754.50 .4206363 .0069800 + 1381977.75 .4131082 .0069357 + 1382200.88 .4261801 .0071205 + 1382424.25 .4107450 .0068518 + 1382647.50 .4212141 .0070425 + 1382871.00 .4135362 .0068895 + 1383094.25 .4231972 .0071579 + 1383317.88 .4312164 .0072144 + 1383541.50 .4106673 .0069761 + 1383765.00 .4164957 .0070183 + 1383988.75 .4105232 .0069998 + 1384212.38 .4230696 .0071553 + 1384436.25 .4129657 .0070375 + 1384659.88 .4148968 .0071063 + 1384883.88 .4239885 .0072264 + 1385107.88 .4254157 .0072921 + 1385331.75 .4250106 .0072720 + 1385555.88 .4268236 .0073139 + 1385779.88 .4160531 .0070968 + 1386004.12 .4122319 .0070585 + 1386228.25 .4170043 .0071255 + 1386452.50 .4171251 .0070978 + 1386677.00 .4229435 .0071480 + 1386901.25 .4175361 .0070735 + 1387125.75 .4300341 .0072307 + 1387350.12 .4164113 .0070423 + 1387574.75 .4221935 .0071098 + 1387799.38 .4227338 .0071278 + 1388023.88 .4184539 .0070436 + 1388248.75 .4173204 .0070851 + 1388473.38 .4190919 .0069985 + 1388698.25 .4343287 .0073011 + 1388923.00 .4273474 .0071575 + 1389148.00 .4128623 .0069233 + 1389373.00 .4355002 .0072635 + 1389597.88 .4271411 .0071217 + 1389823.12 .4252263 .0070859 + 1390048.12 .4174629 .0069460 + 1390273.38 .4281928 .0071020 + 1390498.50 .4301580 .0071268 + 1390723.88 .4269269 .0070884 + 1390949.38 .4198270 .0069678 + 1391174.62 .4197567 .0070148 + 1391400.12 .4309042 .0071873 + 1391625.62 .4375585 .0072637 + 1391851.25 .4387568 .0073097 + 1392076.75 .4351773 .0072518 + 1392302.50 .4406812 .0073215 + 1392528.38 .4285339 .0071423 + 1392754.00 .4421214 .0073685 + 1392980.00 .4307248 .0071860 + 1393205.75 .4421880 .0073693 + 1393431.75 .4313833 .0071622 + 1393657.62 .4370895 .0072594 + 1393883.88 .4351841 .0072833 + 1394110.00 .4448386 .0074026 + 1394336.12 .4252401 .0070658 + 1394562.38 .4139192 .0068983 + 1394788.62 .4498200 .0074424 + 1395015.00 .4373672 .0072281 + 1395241.50 .4391155 .0071955 + 1395467.88 .4549904 .0074411 + 1395694.50 .4402768 .0072734 + 1395920.88 .4373520 .0072070 + 1396147.62 .4378093 .0071729 + 1396374.12 .4423443 .0073172 + 1396601.00 .4476521 .0073451 + 1396827.88 .4425230 .0072418 + 1397054.50 .4605942 .0076301 + 1397281.50 .4442237 .0073544 + 1397508.38 .4471016 .0073695 + 1397735.50 .4368983 .0072453 + 1397962.38 .4446032 .0073552 + 1398189.62 .4411858 .0072674 + 1398416.88 .4475454 .0074341 + 1398644.00 .4480314 .0074497 + 1398871.38 .4552340 .0074599 + 1399098.62 .4457222 .0073323 + 1399326.00 .4638892 .0076570 + 1399553.38 .4458419 .0073319 + 1399781.00 .4487335 .0074205 + 1400008.62 .4624139 .0076604 + 1400236.12 .4434169 .0074071 + 1400463.88 .4365220 .0073328 + 1400691.50 .4626332 .0077140 + 1400919.38 .4375677 .0074112 + 1401147.25 .4397549 .0073940 + 1401375.00 .4447901 .0074557 + 1401603.12 .4354001 .0072976 + 1401831.00 .4542140 .0075910 + 1402059.12 .4549700 .0075927 + 1402287.12 .4349427 .0072379 + 1402515.38 .4327246 .0072352 + 1402743.75 .4357311 .0072892 + 1402971.88 .4361967 .0073150 + 1403200.25 .4225409 .0070517 + 1403428.62 .4277570 .0071096 + 1403657.12 .4168301 .0069311 + 1403885.50 .4149773 .0069840 + 1404114.12 .4106900 .0068396 + 1404342.88 .4060674 .0068520 + 1404571.38 .3817183 .0065526 + 1404800.25 .3850812 .0065210 + 1405028.88 .3768252 .0064443 + 1405257.88 .3836285 .0065978 + 1405486.62 .3552926 .0061933 + 1405715.62 .3424072 .0060241 + 1405944.75 .3375462 .0060482 + 1406173.75 .3163837 .0058020 + 1406402.88 .2991914 .0055162 + 1406632.00 .2831058 .0053648 + 1406861.25 .2684460 .0052072 + 1407090.50 .2436976 .0048580 + 1407319.88 .2257387 .0045898 + 1407549.38 .2169509 .0044909 + 1407778.75 .1989090 .0042546 + 1408008.38 .1732684 .0038881 + 1408237.75 .1663488 .0038315 + 1408467.50 .1547318 .0036339 + 1408697.25 .1471357 .0035545 + 1408926.88 .1375428 .0034163 + 1409156.75 .1299172 .0033020 + 1409386.50 .1345397 .0033973 + 1409616.50 .1332686 .0033834 + 1409846.38 .1325979 .0033508 + 1410076.50 .1417513 .0034970 + 1410306.62 .1389928 .0034284 + 1410536.62 .1463158 .0035477 + 1410766.88 .1619849 .0038110 + 1410997.00 .1604263 .0037334 + 1411227.50 .1619373 .0037667 + 1411457.62 .1739831 .0039196 + 1411688.12 .1854585 .0040828 + 1411918.75 .1902099 .0041545 + 1412149.12 .1985826 .0042672 + 1412379.88 .2097690 .0044315 + 1412610.38 .2184225 .0045325 + 1412841.12 .2152071 .0044674 + 1413071.75 .2235774 .0045630 + 1413302.62 .2325995 .0047092 + 1413533.62 .2327502 .0046711 + 1413764.38 .2436331 .0048355 + 1413995.50 .2493929 .0049213 + 1414226.38 .2547234 .0049843 + 1414457.62 .2634629 .0051142 + 1414688.62 .2704321 .0052203 + 1414919.88 .2666539 .0051810 + 1415151.25 .2692903 .0052512 + 1415382.50 .2760954 .0052255 + 1415614.00 .2746395 .0052829 + 1415845.25 .2905799 .0054870 + 1416076.88 .2836992 .0053890 + 1416308.50 .2910786 .0055085 + 1416540.00 .2857437 .0053789 + 1416771.75 .2920842 .0054335 + 1417003.38 .3063897 .0056552 + 1417235.25 .3070133 .0056348 + 1417466.88 .3150161 .0057351 + 1417698.88 .3097056 .0056468 + 1417930.88 .3146722 .0056863 + 1418162.75 .3231961 .0058579 + 1418395.00 .3192879 .0057998 + 1418627.00 .3231278 .0058521 + 1418859.25 .3252179 .0058336 + 1419091.38 .3324675 .0059947 + 1419323.75 .3270911 .0058738 + 1419556.12 .3298832 .0059770 + 1419788.38 .3336390 .0059924 + 1420021.00 .3333235 .0059607 + 1420253.38 .3473862 .0062003 + 1420486.00 .3340926 .0060032 + 1420718.50 .3292564 .0059381 + 1420951.38 .3375054 .0060192 + 1421184.12 .3418396 .0061188 + 1421416.88 .3448740 .0061283 + 1421649.75 .3521864 .0063198 + 1421882.62 .3382697 .0061021 + 1422115.62 .3455266 .0061653 + 1422348.50 .3417772 .0060898 + 1422581.75 .3487044 .0061852 + 1422815.00 .3480513 .0061575 + 1423048.12 .3530197 .0063022 + 1423281.38 .3427539 .0061276 + 1423514.62 .3501090 .0062400 + 1423748.12 .3604637 .0064085 + 1423981.62 .3492444 .0061978 + 1424215.00 .3589301 .0064132 + 1424448.62 .3692698 .0065177 + 1424682.12 .3576615 .0063499 + 1424915.88 .3671854 .0064850 + 1425149.50 .3672006 .0065368 + 1425383.38 .3619199 .0064570 + 1425617.25 .3682666 .0065703 + 1425851.00 .3650725 .0065037 + 1426085.12 .3624234 .0065315 + 1426319.00 .3584506 .0063217 + 1426553.12 .3603408 .0064387 + 1426787.12 .3664379 .0064947 + 1427021.38 .3692271 .0065443 + 1427255.75 .3548251 .0063399 + 1427489.88 .3652064 .0064663 + 1427724.38 .3652668 .0064601 + 1427958.62 .3536743 .0062794 + 1428193.25 .3628592 .0063965 + 1428427.62 .3703732 .0065050 + 1428662.25 .3610659 .0063522 + 1428897.00 .3633764 .0064061 + 1429131.62 .3682952 .0064524 + 1429366.50 .3689851 .0064814 + 1429601.12 .3736066 .0065928 + 1429836.12 .3792557 .0066240 + 1430071.12 .3809364 .0067292 + 1430306.00 .3769417 .0065438 + 1430541.12 .3680219 .0064582 + 1430776.12 .3731036 .0065759 + 1431011.38 .3785936 .0066108 + 1431246.50 .3767185 .0066091 + 1431481.88 .3723717 .0065426 + 1431717.25 .3769975 .0065867 + 1431952.62 .3795277 .0065945 + 1432188.12 .3816217 .0067033 + 1432423.50 .3885296 .0067865 + 1432659.12 .3656819 .0064227 + 1432894.62 .3767913 .0065629 + 1433130.50 .3938635 .0068135 + 1433366.25 .3801545 .0066533 + 1433602.00 .3885725 .0067480 + 1433838.00 .3933766 .0068501 + 1434073.75 .3759039 .0065565 + 1434309.88 .3726876 .0065210 + 1434545.75 .3747097 .0064487 + 1434781.88 .3746116 .0064973 + 1435018.12 .3744983 .0064310 + 1435254.25 .3889534 .0067389 + 1435490.62 .3883558 .0067786 + 1435726.88 .3831634 .0066519 + 1435963.25 .3768734 .0065478 + 1436199.62 .3855008 .0067436 + 1436436.25 .3829353 .0066339 + 1436672.88 .3957975 .0068722 + 1436909.38 .3855656 .0066412 + 1437146.12 .3929911 .0068186 + 1437382.75 .3996876 .0069261 + 1437619.62 .3837287 .0066899 + 1437856.62 .3893928 .0067456 + 1438093.38 .3765491 .0065742 + 1438330.50 .3933329 .0067473 + 1438567.38 .3945889 .0068183 + 1438804.50 .3865823 .0066657 + 1439041.62 .3752772 .0065182 + 1439278.88 .3918162 .0068442 + 1439516.25 .3841573 .0066551 + 1439753.50 .3834710 .0066523 + 1439990.88 .3912514 .0067903 + 1440228.25 .3929071 .0068546 + 1440465.88 .3900946 .0067963 + 1440703.25 .4053816 .0070475 + 1440941.00 .3900053 .0067785 + 1441178.75 .3945776 .0068640 + 1441416.38 .3886123 .0067617 + 1441654.25 .3988509 .0068952 + 1441892.00 .3973557 .0068363 + 1442130.00 .3885853 .0067325 + 1442367.88 .4018418 .0069231 + 1442606.00 .3967212 .0068522 + 1442844.12 .3959396 .0068160 + 1443082.12 .3873293 .0067620 + 1443320.50 .3979703 .0068665 + 1443558.62 .3992776 .0069542 + 1443797.00 .4038621 .0070605 + 1444035.25 .3889816 .0067419 + 1444273.88 .4040777 .0070146 + 1444512.50 .3907016 .0067955 + 1444750.88 .4005942 .0069624 + 1444989.62 .3964022 .0068632 + 1445228.12 .3958658 .0067888 + 1445467.00 .3909017 .0066553 + 1445705.88 .3957918 .0067855 + 1445944.62 .3891871 .0066551 + 1446183.62 .3983747 .0068161 + 1446422.50 .3896352 .0066613 + 1446661.62 .4096974 .0070304 + 1446900.62 .4018252 .0068609 + 1447139.88 .4037520 .0069065 + 1447379.12 .4164838 .0071269 + 1447618.25 .4010962 .0068739 + 1447857.75 .4012946 .0068720 + 1448097.00 .3935718 .0067511 + 1448336.50 .4040249 .0069708 + 1448575.88 .3960021 .0068488 + 1448815.62 .3997788 .0069503 + 1449055.25 .4070544 .0070116 + 1449294.88 .4094172 .0069837 + 1449534.75 .3915700 .0067672 + 1449774.38 .3981161 .0068490 + 1450014.38 .4016485 .0069221 + 1450254.12 .4073880 .0070088 + 1450494.25 .3991658 .0068575 + 1450734.38 .4000625 .0068455 + 1450974.38 .3988178 .0068629 + 1451214.62 .4234115 .0072066 + 1451454.75 .4058197 .0068904 + 1451695.12 .3949249 .0067897 + 1451935.50 .3934413 .0067800 + 1452175.88 .3994741 .0068435 + 1452416.38 .4029495 .0068960 + 1452656.75 .4005744 .0068572 + 1452897.50 .4067445 .0069604 + 1453138.00 .4085151 .0069729 + 1453378.75 .4111921 .0069993 + 1453619.62 .4044648 .0068569 + 1453860.38 .4020950 .0069174 + 1454101.38 .4029578 .0068612 + 1454342.12 .3970455 .0067835 + 1454583.25 .4120610 .0070219 + 1454824.12 .4085059 .0069661 + 1455065.38 .4072476 .0069302 + 1455306.62 .4201139 .0071684 + 1455547.75 .4164245 .0071594 + 1455789.25 .4037220 .0069269 + 1456030.38 .3948496 .0067643 + 1456272.00 .4026856 .0069019 + 1456513.25 .4185028 .0071534 + 1456755.00 .4017287 .0068407 + 1456996.62 .4146519 .0070494 + 1457238.25 .3968250 .0068295 + 1457480.00 .3969982 .0068115 + 1457721.62 .4045222 .0070145 + 1457963.62 .3978365 .0068127 + 1458205.38 .4078521 .0069700 + 1458447.50 .4079802 .0070003 + 1458689.62 .4165246 .0071241 + 1458931.50 .3990302 .0068824 + 1459173.75 .4112701 .0070374 + 1459415.88 .3966293 .0068741 + 1459658.25 .3996002 .0068912 + 1459900.62 .4074770 .0069857 + 1460142.88 .3961219 .0068174 + 1460385.50 .4060582 .0069843 + 1460627.88 .3993846 .0068770 + 1460870.50 .4035258 .0069801 + 1461113.00 .4050843 .0069532 + 1461355.75 .4030424 .0068753 + 1461598.62 .4058258 .0069929 + 1461841.38 .4178865 .0071669 + 1462084.25 .4015588 .0068979 + 1462327.12 .4107325 .0070974 + 1462570.12 .3993792 .0068600 + 1462813.12 .4118872 .0071133 + 1463056.38 .3941768 .0067712 + 1463299.62 .4018957 .0068796 + 1463542.75 .3930694 .0067555 + 1463786.12 .4016080 .0068660 + 1464029.38 .4028400 .0070100 + 1464272.88 .3979417 .0069287 + 1464516.12 .4111069 .0070841 + 1464759.88 .3988862 .0069674 + 1465003.50 .3984409 .0068946 + 1465247.00 .3887881 .0067549 + 1465490.88 .4030283 .0069927 + 1465734.50 .4043442 .0069265 + 1465978.50 .3852375 .0066859 + 1466222.25 .3925656 .0067679 + 1466466.25 .4079532 .0069841 + 1466710.38 .3949363 .0067614 + 1466954.38 .3934091 .0067294 + 1467198.62 .4097660 .0070288 + 1467442.75 .4130280 .0070520 + 1467687.12 .3969130 .0068368 + 1467931.50 .4074847 .0070126 + 1468175.75 .3985284 .0068139 + 1468420.38 .3900076 .0067288 + 1468664.75 .3898380 .0067688 + 1468909.38 .4044197 .0069268 + 1469153.88 .4022098 .0069558 + 1469398.62 .3864261 .0066643 + 1469643.50 .3982885 .0069031 + 1469888.25 .3835636 .0066034 + 1470133.25 .3929323 .0067954 + 1470378.00 .3847612 .0067442 + 1470623.12 .3797563 .0066375 + 1470868.00 .3825788 .0066525 + 1471113.25 .3775269 .0066186 + 1471358.62 .3794939 .0066518 + 1471603.75 .3962999 .0068777 + 1471849.12 .3845376 .0066859 + 1472094.38 .3955760 .0068849 + 1472339.88 .3757069 .0065361 + 1472585.25 .3788940 .0066472 + 1472830.88 .3764093 .0065853 + 1473076.62 .3712619 .0064985 + 1473322.12 .3739347 .0065489 + 1473568.00 .3812275 .0066426 + 1473813.62 .3798230 .0065934 + 1474059.62 .3509128 .0061730 + 1474305.62 .3689339 .0065013 + 1474551.50 .3634896 .0064097 + 1474797.62 .3662941 .0064730 + 1475043.62 .3581035 .0063223 + 1475289.88 .3376634 .0060822 + 1475536.00 .3372626 .0061280 + 1475782.38 .3286465 .0059350 + 1476028.88 .3400483 .0061680 + 1476275.12 .3193874 .0059119 + 1476521.75 .3072117 .0057074 + 1476768.12 .3047314 .0057244 + 1477014.88 .2943761 .0056074 + 1477261.38 .2761730 .0053569 + 1477508.25 .2611206 .0051286 + 1477755.12 .2313912 .0047485 + 1478001.88 .2278316 .0047292 + 1478248.88 .1981442 .0043209 + 1478495.62 .1958128 .0042744 + 1478742.88 .1737533 .0039788 + 1478989.75 .1666333 .0038862 + 1479237.00 .1552947 .0037179 + 1479484.38 .1451907 .0035563 + 1479731.50 .1384672 .0034516 + 1479979.00 .1368307 .0034613 + 1480226.25 .1376354 .0034498 + 1480473.88 .1458353 .0035865 + 1480721.25 .1482472 .0036050 + 1480968.88 .1635277 .0038320 + 1481216.62 .1792077 .0040533 + 1481464.25 .2019590 .0043922 + 1481712.12 .2189287 .0045811 + 1481959.88 .2323267 .0047725 + 1482207.88 .2482720 .0050206 + 1482456.00 .2669366 .0052226 + 1482703.88 .2882237 .0055030 + 1482952.00 .3074389 .0057760 + 1483200.00 .3120975 .0058041 + 1483448.38 .3400648 .0062169 + 1483696.50 .3394532 .0061745 + 1483945.00 .3420107 .0062224 + 1484193.50 .3434100 .0061582 + 1484441.75 .3505130 .0062503 + 1484690.50 .3654730 .0063946 + 1484938.88 .3760650 .0065623 + 1485187.62 .3668755 .0064287 + 1485436.25 .3667184 .0064122 + 1485685.12 .3924616 .0067789 + 1485934.12 .3739752 .0065218 + 1486182.88 .3910501 .0067569 + 1486431.88 .3757260 .0065413 + 1486680.75 .3896747 .0067375 + 1486930.00 .3845225 .0066596 + 1487179.00 .3932718 .0068324 + 1487428.38 .3973344 .0068232 + 1487677.75 .4109178 .0070605 + 1487926.88 .4167333 .0071651 + 1488176.50 .4057648 .0069800 + 1488425.75 .3899204 .0067614 + 1488675.38 .4070107 .0070058 + 1488924.88 .4143205 .0070792 + 1489174.62 .3959424 .0067767 + 1489424.50 .4011718 .0069195 + 1489674.12 .4066733 .0069595 + 1489924.00 .4093643 .0070381 + 1490173.88 .4099832 .0069508 + 1490423.88 .4158584 .0070885 + 1490674.00 .4302504 .0073140 + 1490924.00 .4138713 .0070465 + 1491174.25 .4137554 .0070778 + 1491424.38 .4219463 .0070890 + 1491674.75 .4170621 .0071001 + 1491925.00 .4180320 .0071122 + 1492175.50 .4094897 .0069111 + 1492426.12 .4229498 .0071006 + 1492676.50 .4144383 .0070320 + 1492927.12 .4151071 .0070338 + 1493177.75 .4145017 .0070523 + 1493428.50 .4310950 .0072754 + 1493679.25 .4257630 .0072508 + 1493930.12 .4290206 .0073088 + 1494181.12 .4240445 .0071961 + 1494432.00 .4397055 .0074753 + 1494683.12 .4235758 .0072094 + 1494934.12 .4167269 .0071143 + 1495185.38 .4094998 .0070866 + 1495436.50 .4230759 .0071774 + 1495687.88 .4223504 .0071733 + 1495939.38 .4165587 .0071011 + 1496190.62 .4056055 .0069101 + 1496442.25 .4235567 .0071843 + 1496693.62 .4060258 .0069217 + 1496945.38 .4107906 .0069591 + 1497197.00 .4163999 .0071275 + 1497448.75 .4256083 .0072720 + 1497700.75 .4153509 .0070306 + 1497952.38 .4210123 .0071609 + 1498204.50 .4026871 .0068491 + 1498456.38 .4322550 .0073256 + 1498708.50 .4216026 .0071640 + 1498960.75 .4133988 .0070119 + 1499212.75 .4179015 .0070638 + 1499465.12 .4183573 .0070826 + 1499717.38 .4166270 .0070012 + 1499969.75 .4119022 .0070192 + 1500222.12 .4266998 .0071669 + 1500474.75 .4235068 .0071406 + 1500727.38 .4236647 .0071627 + 1500979.88 .4256815 .0072063 + 1501232.75 .4345653 .0073452 + 1501485.38 .4326573 .0073224 + 1501738.25 .4209043 .0071514 + 1501991.00 .4359120 .0073856 + 1502244.00 .4335812 .0072917 + 1502497.12 .4241717 .0071689 + 1502750.12 .4150553 .0070559 + 1503003.38 .4167499 .0071311 + 1503256.50 .4095898 .0070281 + 1503509.88 .4157687 .0070801 + 1503763.00 .4321361 .0072991 + 1504016.50 .4165694 .0070643 + 1504270.12 .4102508 .0069870 + 1504523.50 .4139771 .0070409 + 1504777.25 .4186132 .0070317 + 1505030.75 .4145611 .0070999 + 1505284.50 .4317890 .0072747 + 1505538.50 .4279582 .0072681 + 1505792.12 .4264169 .0072412 + 1506046.12 .4149344 .0070203 + 1506300.00 .4250289 .0072181 + 1506554.12 .4247052 .0072761 + 1506808.12 .4424974 .0075579 + 1507062.38 .4188598 .0071467 + 1507316.75 .4075389 .0069960 + 1507570.88 .4254397 .0072926 + 1507825.38 .4331396 .0073577 + 1508079.75 .4413551 .0074958 + 1508334.25 .4190872 .0071454 + 1508588.75 .4236348 .0071895 + 1508843.50 .4261611 .0073113 + 1509098.25 .4455759 .0075948 + 1509352.88 .4261206 .0072088 + 1509607.75 .4261567 .0072951 + 1509862.50 .4033910 .0068860 + 1510117.62 .4287958 .0072744 + 1510372.50 .4172352 .0070947 + 1510627.62 .4107497 .0070865 + 1510882.88 .4122971 .0070952 + 1511137.88 .4206909 .0072004 + 1511393.25 .3919695 .0068436 + 1511648.50 .3923771 .0068341 + 1511904.00 .3585597 .0064352 + 1512159.38 .3639012 .0064637 + 1512415.00 .3583778 .0064014 + 1512670.62 .3893745 .0068375 + 1512926.25 .3888751 .0068181 + 1513182.00 .4071379 .0069932 + 1513437.62 .4085926 .0069912 + 1513693.62 .4243453 .0072392 + 1513949.62 .4184738 .0071601 + 1514205.50 .4336997 .0073144 + 1514461.62 .4227280 .0072303 + 1514717.62 .4252342 .0072248 + 1514973.88 .4127665 .0070756 + 1515230.00 .4224977 .0072121 + 1515486.38 .4313365 .0073007 + 1515742.88 .4203680 .0071066 + 1515999.25 .4164535 .0070691 + 1516255.88 .4238075 .0071859 + 1516512.25 .4238727 .0072077 + 1516769.00 .4104435 .0070258 + 1517025.50 .4275896 .0072867 + 1517282.38 .4230883 .0072402 + 1517539.38 .4133158 .0070651 + 1517796.12 .4067119 .0070168 + 1518053.12 .4121523 .0071376 + 1518310.12 .4172460 .0071592 + 1518567.25 .4127876 .0070555 + 1518824.25 .4117326 .0070719 + 1519081.62 .4123641 .0070795 + 1519339.00 .4119630 .0070896 + 1519596.25 .4069290 .0069932 + 1519853.75 .4184532 .0071542 + 1520111.12 .4011299 .0069377 + 1520368.75 .4188285 .0071522 + 1520626.25 .4194372 .0071880 + 1520884.00 .4194529 .0071969 + 1521141.88 .4251426 .0073182 + 1521399.50 .4155180 .0071381 + 1521657.50 .4044729 .0069765 + 1521915.38 .4053920 .0070371 + 1522173.38 .4159691 .0071697 + 1522431.62 .3972714 .0068826 + 1522689.62 .4072638 .0070506 + 1522947.88 .4129448 .0071561 + 1523206.00 .4030850 .0070051 + 1523464.50 .4001361 .0070294 + 1523722.75 .3936426 .0069938 + 1523981.38 .3916823 .0070483 + 1524240.00 .3939984 .0070710 + 1524498.50 .4009658 .0072132 + 1524757.25 .4005291 .0072717 + 1525015.75 .3684607 .0067298 + 1525274.75 .3788972 .0069716 + 1525533.38 .3555055 .0066098 + 1525792.50 .3457204 .0064629 + 1526051.62 .3421377 .0064614 + 1526310.50 .3212388 .0061407 + 1526569.75 .3113261 .0060477 + 1526828.75 .2762130 .0055338 + 1527088.12 .2664835 .0054338 + 1527347.38 .2390434 .0049720 + 1527606.88 .2245477 .0048197 + 1527866.38 .1930085 .0044060 + 1528125.75 .1745639 .0040786 + 1528385.50 .1660101 .0039973 + 1528645.00 .1601958 .0038849 + 1528904.88 .1652932 .0040201 + 1529164.75 .1674237 .0040134 + 1529424.50 .1828874 .0041727 + 1529684.50 .2032735 .0045134 + 1529944.38 .2129477 .0045990 + 1530204.50 .2404305 .0050220 + 1530464.50 .2522865 .0050929 + 1530724.75 .2813427 .0055181 + 1530985.12 .3040274 .0058518 + 1531245.25 .3008116 .0057145 + 1531505.75 .3109114 .0058888 + 1531766.12 .3328920 .0062269 + 1532026.75 .3463004 .0063369 + 1532287.12 .3425815 .0063320 + 1532547.88 .3449199 .0063525 + 1532808.75 .3514979 .0063733 + 1533069.38 .3637591 .0065367 + 1533330.38 .3681827 .0066521 + 1533591.12 .3723179 .0066801 + 1533852.25 .3705945 .0066649 + 1534113.12 .3758248 .0066893 + 1534374.38 .3900290 .0069280 + 1534635.62 .3925175 .0069153 + 1534896.75 .4031173 .0071784 + 1535158.25 .3957543 .0069396 + 1535419.50 .4035270 .0071057 + 1535681.00 .3958066 .0069656 + 1535942.38 .4085377 .0072121 + 1536204.12 .4077047 .0071714 + 1536465.88 .4070950 .0071501 + 1536727.38 .4261338 .0074647 + 1536989.38 .4159900 .0073825 + 1537251.00 .4087160 .0073041 + 1537513.00 .4160975 .0073788 + 1537775.12 .4107888 .0073179 + 1538037.12 .4228086 .0075304 + 1538299.25 .4246119 .0074884 + 1538561.38 .4152699 .0073262 + 1538823.75 .4285423 .0075332 + 1539085.88 .4152054 .0072028 + 1539348.38 .4093657 .0070970 + 1539611.00 .4227431 .0073168 + 1539873.38 .4192659 .0072618 + 1540136.00 .4129325 .0071265 + 1540398.50 .4285928 .0073167 + 1540661.38 .4253916 .0072973 + 1540924.00 .4297231 .0073598 + 1541187.00 .4162371 .0071513 + 1541450.00 .4221722 .0072244 + 1541712.88 .4363008 .0075188 + 1541976.12 .4333005 .0074279 + 1542239.12 .4343691 .0074369 + 1542502.38 .4124639 .0071442 + 1542765.50 .4286617 .0073898 + 1543028.88 .4432412 .0076377 + 1543292.50 .4283615 .0074353 + 1543555.75 .4260932 .0073647 + 1543819.38 .4299034 .0074304 + 1544082.88 .4402598 .0075286 + 1544346.62 .4302457 .0073813 + 1544610.25 .4247384 .0073612 + 1544874.12 .4397336 .0075798 + 1545138.12 .4414876 .0076392 + 1545402.00 .4367205 .0075161 + 1545666.12 .4313749 .0074676 + 1545930.00 .4253988 .0073155 + 1546194.25 .4293418 .0073920 + 1546458.62 .4212375 .0072155 + 1546722.75 .4424221 .0076264 + 1546987.12 .4232152 .0073071 + 1547251.50 .4452294 .0076950 + 1547516.00 .4325043 .0074849 + 1547780.50 .4447201 .0076494 + 1548045.12 .4476921 .0076699 + 1548310.00 .4426529 .0075544 + 1548574.62 .4402984 .0075768 + 1548839.50 .4451743 .0076314 + 1549104.25 .4305647 .0073513 + 1549369.38 .4463341 .0075851 + 1549634.25 .4347160 .0073757 + 1549899.38 .4361391 .0074240 + 1550164.62 .4414311 .0075630 + 1550429.75 .4350401 .0074179 + 1550695.12 .4365030 .0074575 + 1550960.38 .4291389 .0072986 + 1551226.00 .4317172 .0073524 + 1551491.38 .4269140 .0072504 + 1551757.00 .4293640 .0072990 + 1552022.75 .4402952 .0074539 + 1552288.25 .4359526 .0074343 + 1552554.25 .4468811 .0075730 + 1552819.88 .4243071 .0072131 + 1553085.88 .4425341 .0075160 + 1553352.00 .4310401 .0073581 + 1553617.88 .4365014 .0073930 + 1553884.12 .4351698 .0074336 + 1554150.25 .4384064 .0074758 + 1554416.50 .4308043 .0072852 + 1554682.75 .4296492 .0073152 + 1554949.25 .4312509 .0073379 + 1555215.88 .4273837 .0072474 + 1555482.25 .4396632 .0075000 + 1555748.88 .4340130 .0073570 + 1556015.38 .4374551 .0074065 + 1556282.25 .4366663 .0074828 + 1556548.88 .4498796 .0076169 + 1556815.88 .4547979 .0076904 + 1557083.00 .4383941 .0074155 + 1557349.88 .4516789 .0077147 + 1557617.00 .4482064 .0075592 + 1557884.00 .4286213 .0073026 + 1558151.38 .4292710 .0073227 + 1558418.50 .4524151 .0077079 + 1558686.00 .4289218 .0072574 + 1558953.50 .4327885 .0073825 + 1559220.88 .4351848 .0075077 + 1559488.50 .4422785 .0075454 + 1559756.00 .4304477 .0073600 + 1560023.75 .4211686 .0072357 + 1560291.38 .4414130 .0075114 + 1560559.38 .4459286 .0076205 + 1560827.38 .4497359 .0076675 + 1561095.25 .4424615 .0075718 + 1561363.38 .4420421 .0075132 + 1561631.38 .4383028 .0074999 + 1561899.62 .4317986 .0073590 + 1562168.00 .4359924 .0073910 + 1562436.12 .4471135 .0076256 + 1562704.62 .4435468 .0075742 + 1562973.00 .4296962 .0073059 + 1563241.62 .4467934 .0076335 + 1563510.12 .4397455 .0075073 + 1563778.88 .4257817 .0073235 + 1564047.75 .4273579 .0073620 + 1564316.38 .4381306 .0075259 + 1564585.38 .4428620 .0076074 + 1564854.12 .4407788 .0075225 + 1565123.25 .4358842 .0074728 + 1565392.25 .4446307 .0075328 + 1565661.50 .4429160 .0075624 + 1565930.88 .4292946 .0073936 + 1566200.00 .4435028 .0076042 + 1566469.38 .4360431 .0074976 + 1566738.75 .4235369 .0073012 + 1567008.38 .4511050 .0078042 + 1567277.75 .4250701 .0073421 + 1567547.50 .4320081 .0074617 + 1567817.38 .4372887 .0075575 + 1568087.00 .4319907 .0074051 + 1568356.88 .4386817 .0075848 + 1568626.75 .4175040 .0072837 + 1568896.75 .4252425 .0073476 + 1569166.75 .4295864 .0074232 + 1569437.00 .4188192 .0072767 + 1569707.25 .4323823 .0074683 + 1569977.38 .4453473 .0077198 + 1570247.88 .4366027 .0076064 + 1570518.12 .4393416 .0076123 + 1570788.62 .4324331 .0075785 + 1571059.38 .4546753 .0079366 + 1571329.75 .4366073 .0075796 + 1571600.62 .4314539 .0074842 + 1571871.25 .4202309 .0073244 + 1572142.12 .4277611 .0073472 + 1572412.88 .4395949 .0075750 + 1572684.00 .4244448 .0072783 + 1572955.12 .4349443 .0074583 + 1573226.12 .4346042 .0074759 + 1573497.38 .4241247 .0072397 + 1573768.50 .4339503 .0074408 + 1574039.88 .4290386 .0073757 + 1574311.12 .4185330 .0072296 + 1574582.75 .4305303 .0073904 + 1574854.38 .4386606 .0075124 + 1575125.75 .4283386 .0073977 + 1575397.62 .4287722 .0073840 + 1575669.12 .4193784 .0072535 + 1575941.12 .4471791 .0076139 + 1576212.88 .4356246 .0074921 + 1576484.88 .4181277 .0071931 + 1576757.00 .4376589 .0074734 + 1577029.00 .4286629 .0073516 + 1577301.25 .4301062 .0073904 + 1577573.38 .4066027 .0070815 + 1577845.75 .4076142 .0070800 + 1578118.00 .4034337 .0069716 + 1578390.50 .3927152 .0068751 + 1578663.12 .3787101 .0066969 + 1578935.62 .3739103 .0067276 + 1579208.38 .3361260 .0062026 + 1579481.00 .2976262 .0056300 + 1579753.88 .2874422 .0055948 + 1580026.88 .2445308 .0050606 + 1580299.62 .2209271 .0046867 + 1580572.75 .2128396 .0045724 + 1580845.62 .2297938 .0048354 + 1581119.00 .2548114 .0052106 + 1581392.00 .2969128 .0058467 + 1581665.38 .3214506 .0060544 + 1581938.88 .3627909 .0066649 + 1582212.25 .3594747 .0065437 + 1582485.75 .3873998 .0069367 + 1582759.25 .3881871 .0069059 + 1583033.00 .3946825 .0069568 + 1583306.62 .4008925 .0070225 + 1583580.50 .3948344 .0069918 + 1583854.50 .4080421 .0071334 + 1584128.25 .4063846 .0071423 + 1584402.38 .4136905 .0072788 + 1584676.25 .4076342 .0071917 + 1584950.50 .4211065 .0074145 + 1585224.62 .4148231 .0073747 + 1585499.00 .4054677 .0072480 + 1585773.50 .4010823 .0072479 + 1586047.75 .4000262 .0072376 + 1586322.38 .4075744 .0073238 + 1586596.75 .3989511 .0072417 + 1586871.50 .4064569 .0073951 + 1587146.38 .3963282 .0072292 + 1587421.00 .4053421 .0073599 + 1587696.00 .4020992 .0073119 + 1587970.75 .4093164 .0073309 + 1588245.88 .3769788 .0068159 + 1588520.88 .4006622 .0072200 + 1588796.12 .3878395 .0070473 + 1589071.38 .3744797 .0068121 + 1589346.50 .3605842 .0066711 + 1589622.00 .3576448 .0066058 + 1589897.25 .3605688 .0066686 + 1590172.88 .3463364 .0064654 + 1590448.38 .3300551 .0062251 + 1590724.12 .3306962 .0062629 + 1590999.88 .3252026 .0061816 + 1591275.62 .3125849 .0060654 + 1591551.50 .3009706 .0058318 + 1591827.38 .2840074 .0056060 + 1592103.50 .2655759 .0053752 + 1592379.38 .2752899 .0055520 + 1592655.62 .2554472 .0052633 + 1592932.00 .2330968 .0049258 + 1593208.12 .2246898 .0048043 + 1593484.62 .2132696 .0047256 + 1593760.88 .2042487 .0045904 + 1594037.50 .1858326 .0043162 + 1594314.00 .1837949 .0043148 + 1594590.75 .1699356 .0040527 + 1594867.50 .1587297 .0039340 + 1595144.25 .1537008 .0038673 + 1595421.12 .1466833 .0038095 + 1595698.00 .1448353 .0037308 + 1595975.12 .1247274 .0034095 + 1596252.25 .1170019 .0032883 + 1596529.25 .1173303 .0032800 + 1596806.62 .1214730 .0033760 + 1597083.75 .1230995 .0033675 + 1597361.25 .1227256 .0033585 + 1597638.62 .1286575 .0034388 + 1597916.25 .1343841 .0035624 + 1598193.88 .1424208 .0037194 + 1598471.50 .1385500 .0036148 + 1598749.25 .1480883 .0037928 + 1599027.00 .1479076 .0037622 + 1599305.00 .1552928 .0038615 + 1599582.75 .1613194 .0039557 + 1599860.88 .1573592 .0039021 + 1600139.12 .1706230 .0041174 + 1600417.12 .1704087 .0040688 + 1600695.50 .1760485 .0041384 + 1600973.62 .1845911 .0043176 + 1601252.12 .1920505 .0044377 + 1601530.50 .1863294 .0043362 + 1601809.12 .1847321 .0042445 + 1602087.88 .1935369 .0043907 + 1602366.38 .1954284 .0044338 + 1602645.25 .2031448 .0045607 + 1602923.88 .2095272 .0046220 + 1603202.88 .2128039 .0046904 + 1603481.75 .2086166 .0046166 + 1603760.88 .2158536 .0047231 + 1604040.12 .2244087 .0048350 + 1604319.12 .2171944 .0046929 + 1604598.62 .2231663 .0048143 + 1604877.75 .2219632 .0047688 + 1605157.25 .2212474 .0047601 + 1605436.88 .2280343 .0049003 + 1605716.25 .2341244 .0049411 + 1605996.00 .2317442 .0049503 + 1606275.62 .2371977 .0050474 + 1606555.50 .2291847 .0048722 + 1606835.12 .2364454 .0050283 + 1607115.25 .2404515 .0050659 + 1607395.25 .2447318 .0051332 + 1607675.25 .2404402 .0050593 + 1607955.50 .2453822 .0051353 + 1608235.50 .2465649 .0052113 + 1608516.00 .2424656 .0051234 + 1608796.12 .2416467 .0050646 + 1609076.75 .2515981 .0052550 + 1609357.38 .2465640 .0051019 + 1609637.75 .2477424 .0051769 + 1609918.50 .2458856 .0051005 + 1610199.12 .2615010 .0054112 + 1610480.00 .2391573 .0050491 + 1610760.75 .2408034 .0051279 + 1611041.75 .2468592 .0051860 + 1611323.00 .2433441 .0051301 + 1611603.88 .2475592 .0051940 + 1611885.12 .2492695 .0052095 + 1612166.25 .2526580 .0052789 + 1612447.75 .2450100 .0051005 + 1612729.25 .2469570 .0051612 + 1613010.50 .2446606 .0051315 + 1613292.12 .2564227 .0053211 + 1613573.62 .2459439 .0051512 + 1613855.38 .2415069 .0051294 + 1614137.00 .2513994 .0052671 + 1614419.00 .2447942 .0051790 + 1614701.00 .2439655 .0050966 + 1614982.88 .2473489 .0052010 + 1615265.00 .2419346 .0051406 + 1615547.00 .2417839 .0051013 + 1615829.25 .2437687 .0051828 + 1616111.38 .2369315 .0050688 + 1616393.88 .2449654 .0051840 + 1616676.50 .2396743 .0050987 + 1616958.75 .2367018 .0050615 + 1617241.50 .2490966 .0052919 + 1617524.00 .2353590 .0051177 + 1617806.75 .2337144 .0050464 + 1618089.50 .2290340 .0049453 + 1618372.38 .2359046 .0050561 + 1618655.50 .2380665 .0051479 + 1618938.38 .2318991 .0050439 + 1619221.62 .2271150 .0049507 + 1619504.62 .2254613 .0049265 + 1619788.00 .2251004 .0049083 + 1620071.12 .2203036 .0048278 + 1620354.62 .2196376 .0048434 + 1620638.25 .2258370 .0049274 + 1620921.62 .2268748 .0050173 + 1621205.25 .2257311 .0049624 + 1621488.88 .2148822 .0047756 + 1621772.75 .2173784 .0047903 + 1622056.62 .2190450 .0048753 + 1622340.50 .2133324 .0048011 + 1622624.50 .2093236 .0047677 + 1622908.50 .1925785 .0044559 + 1623192.75 .1973114 .0045644 + 1623476.75 .1985977 .0045997 + 1623761.12 .1962443 .0046167 + 1624045.62 .2015202 .0046528 + 1624329.88 .1996883 .0046714 + 1624614.50 .2052645 .0047410 + 1624899.00 .1943266 .0046377 + 1625183.75 .1965448 .0046430 + 1625468.38 .1930349 .0046571 + 1625753.25 .1851572 .0044505 + 1626038.25 .1890686 .0045262 + 1626323.12 .1836205 .0044297 + 1626608.25 .1869671 .0044603 + 1626893.12 .1784320 .0043316 + 1627178.50 .1774008 .0043183 + 1627463.62 .1769585 .0043112 + 1627749.00 .1716187 .0041916 + 1628034.50 .1745257 .0042530 + 1628319.88 .1643258 .0041096 + 1628605.50 .1722822 .0042419 + 1628891.00 .1639631 .0040995 + 1629176.88 .1671872 .0041920 + 1629462.50 .1567481 .0039719 + 1629748.50 .1606507 .0040207 + 1630034.50 .1580211 .0039725 + 1630320.38 .1574653 .0039749 + 1630606.62 .1539950 .0039159 + 1630892.62 .1467675 .0038057 + 1631179.00 .1497213 .0038328 + 1631465.38 .1415547 .0036936 + 1631751.62 .1472161 .0038113 + 1632038.25 .1341708 .0035685 + 1632324.62 .1370960 .0036400 + 1632611.38 .1287753 .0034853 + 1632897.88 .1368565 .0036084 + 1633184.75 .1240301 .0033993 + 1633471.75 .1312218 .0035638 + 1633758.50 .1311956 .0034954 + 1634045.62 .1267944 .0034342 + 1634332.50 .1207990 .0033600 + 1634619.75 .1258541 .0034462 + 1634906.75 .1198109 .0033102 + 1635194.25 .1165052 .0032927 + 1635481.75 .1139827 .0032774 + 1635769.00 .1169750 .0033181 + 1636056.62 .1071689 .0031156 + 1636344.12 .1070841 .0031572 + 1636631.88 .1058077 .0031111 + 1636919.50 .1048855 .0031093 + 1637207.38 .1017739 .0030505 + 1637495.50 .1007017 .0030644 + 1637783.25 .0919384 .0028958 + 1638071.38 .0928030 .0028940 + 1638359.38 .0938349 .0028958 + 1638647.75 .0983109 .0029878 + 1638936.12 .0919963 .0028854 + 1639224.38 .0918431 .0028585 + 1639512.88 .0978416 .0030071 + 1639801.25 .0956338 .0029347 + 1640090.00 .0933695 .0028804 + 1640378.50 .0964336 .0029526 + 1640667.38 .0974703 .0029396 + 1640956.25 .0955295 .0029528 + 1641245.00 .1038043 .0030981 + 1641534.12 .1107971 .0032031 + 1641823.00 .1243686 .0033874 + 1642112.25 .1365217 .0035947 + 1642401.25 .1667757 .0041080 + 1642690.62 .1942423 .0044475 + 1642980.12 .2232255 .0048518 + 1643269.38 .2687953 .0054156 + 1643559.00 .3010773 .0059334 + 1643848.50 .3376697 .0063928 + 1644138.25 .3649256 .0067404 + 1644427.75 .3690629 .0067652 + 1644717.75 .3795538 .0069840 + 1645007.75 .3513772 .0066214 + 1645297.50 .3118414 .0060671 + 1645587.75 .2667021 .0054176 + 1645877.62 .2353297 .0050510 + 1646168.00 .2079796 .0046461 + 1646458.12 .1827394 .0043143 + 1646748.50 .1633863 .0040462 + 1647039.12 .1522723 .0038695 + 1647329.50 .1420744 .0037186 + 1647620.12 .1309159 .0035504 + 1647910.62 .1172075 .0033296 + 1648201.50 .1157848 .0033310 + 1648492.38 .1110456 .0032405 + 1648783.12 .1062137 .0031610 + 1649074.25 .1069986 .0031649 + 1649365.12 .1048876 .0031936 + 1649656.38 .0936224 .0029523 + 1649947.38 .1003728 .0030854 + 1650238.75 .0990500 .0031169 + 1650530.25 .0953236 .0030225 + 1650821.50 .0936221 .0029922 + 1651113.12 .1006197 .0031150 + 1651404.62 .0913591 .0030092 + 1651696.38 .0918224 .0029757 + 1651988.00 .0983303 .0031218 + 1652279.88 .1010909 .0031578 + 1652571.88 .0912994 .0029766 + 1652863.75 .0971241 .0030612 + 1653155.88 .1014930 .0031439 + 1653447.88 .0953356 .0030281 + 1653740.12 .1027920 .0031525 + 1654032.25 .0972266 .0030313 + 1654324.75 .1025086 .0031184 + 1654617.25 .0997323 .0030619 + 1654909.62 .1057080 .0031319 + 1655202.38 .1069447 .0031469 + 1655494.88 .1073953 .0031857 + 1655787.75 .1108541 .0032252 + 1656080.38 .1144544 .0032965 + 1656373.38 .1115387 .0032115 + 1656666.50 .1190115 .0033460 + 1656959.38 .1141921 .0032404 + 1657252.62 .1210321 .0033626 + 1657545.75 .1210146 .0033696 + 1657839.12 .1230625 .0034097 + 1658132.62 .1141294 .0032920 + 1658425.88 .1104861 .0031900 + 1658719.50 .1084550 .0031900 + 1659013.00 .1017085 .0030482 + 1659306.75 .0925251 .0029203 + 1659600.38 .1031066 .0030897 + 1659894.38 .1010806 .0030479 + 1660188.38 .1102891 .0032481 + 1660482.25 .1184134 .0033487 + 1660776.38 .1186568 .0033472 + 1661070.38 .1242184 .0034368 + 1661364.75 .1329635 .0035725 + 1661658.88 .1448708 .0037894 + 1661953.38 .1374273 .0036318 + 1662248.00 .1433167 .0037367 + 1662542.38 .1488685 .0038307 + 1662837.12 .1554831 .0039434 + 1663131.62 .1632615 .0041142 + 1663426.50 .1604056 .0040118 + 1663721.25 .1524100 .0038526 + 1664016.25 .1582669 .0039812 + 1664311.38 .1504316 .0038436 + 1664606.38 .1498362 .0038369 + 1664901.62 .1501240 .0038703 + 1665196.75 .1547824 .0038991 + 1665492.12 .1514688 .0038411 + 1665787.38 .1697379 .0041490 + 1666083.00 .1695633 .0041433 + 1666378.62 .1783708 .0042846 + 1666674.12 .2021604 .0046491 + 1666970.00 .1979508 .0045690 + 1667265.62 .2001711 .0046084 + 1667561.62 .2049714 .0046567 + 1667857.75 .2098426 .0047718 + 1668153.62 .2191163 .0048586 + 1668449.75 .2238453 .0049994 + 1668745.88 .2185293 .0048841 + 1669042.25 .2197775 .0048528 + 1669338.38 .2253288 .0049079 + 1669635.00 .2297844 .0050117 + 1669931.62 .2376200 .0052036 + 1670228.00 .2385814 .0051182 + 1670524.75 .2420082 .0051390 + 1670821.38 .2413780 .0052030 + 1671118.38 .2468059 .0052236 + 1671415.12 .2590426 .0054566 + 1671712.12 .2567426 .0053778 + 1672009.38 .2518057 .0053402 + 1672306.38 .2674808 .0055889 + 1672603.62 .2597940 .0054064 + 1672900.88 .2599327 .0054008 + 1673198.38 .2668822 .0055275 + 1673495.62 .2709908 .0055634 + 1673793.25 .2762405 .0056941 + 1674091.00 .2823812 .0057620 + 1674388.50 .2760916 .0056380 + 1674686.50 .2837125 .0057384 + 1674984.12 .2738755 .0056014 + 1675282.25 .2866090 .0058412 + 1675580.38 .2772121 .0056367 + 1675878.25 .2863157 .0058060 + 1676176.50 .2943635 .0059195 + 1676474.62 .2874698 .0057645 + 1676773.12 .2950195 .0058552 + 1677071.38 .3036912 .0060222 + 1677370.00 .3135868 .0061789 + 1677668.62 .3066929 .0060306 + 1677967.12 .3060507 .0060052 + 1678266.00 .3118407 .0061185 + 1678564.62 .3179602 .0061978 + 1678863.62 .3162408 .0062005 + 1679162.50 .3249448 .0062508 + 1679461.62 .3262157 .0063287 + 1679760.88 .3228949 .0062052 + 1680060.00 .3300270 .0063844 + 1680359.38 .3285731 .0063414 + 1680658.62 .3322830 .0063956 + 1680958.12 .3301141 .0063255 + 1681257.50 .3314371 .0063869 + 1681557.25 .3390017 .0064772 + 1681857.12 .3504632 .0066836 + 1682156.62 .3352258 .0064247 + 1682456.62 .3407038 .0065044 + 1682756.38 .3480460 .0065894 + 1683056.50 .3380537 .0064086 + 1683356.50 .3359692 .0063867 + 1683656.75 .3455501 .0065615 + 1683957.12 .3449883 .0065274 + 1684257.38 .3441867 .0065014 + 1684557.88 .3539371 .0066727 + 1684858.25 .3576661 .0067222 + 1685158.88 .3562770 .0067288 + 1685459.62 .3574412 .0067040 + 1685760.25 .3610964 .0067337 + 1686061.25 .3608413 .0067179 + 1686361.88 .3486196 .0065488 + 1686663.00 .3532769 .0065976 + 1686963.88 .3548356 .0066394 + 1687265.12 .3656785 .0068100 + 1687566.50 .3578783 .0067410 + 1687867.62 .3707122 .0068522 + 1688169.12 .3603044 .0067342 + 1688470.50 .3697623 .0068506 + 1688772.12 .3727730 .0069925 + 1689073.62 .3807619 .0070761 + 1689375.38 .3843249 .0071592 + 1689677.38 .4039298 .0074337 + 1689979.00 .3800991 .0070147 + 1690281.12 .3762249 .0069827 + 1690583.00 .3898344 .0072207 + 1690885.25 .3857416 .0070943 + 1691187.25 .3757955 .0069356 + 1691489.62 .4015337 .0073550 + 1691792.12 .3983113 .0073096 + 1692094.38 .3943795 .0072172 + 1692397.00 .3912950 .0071127 + 1692699.50 .3964432 .0072309 + 1693002.25 .4019715 .0073305 + 1693304.88 .4034958 .0073865 + 1693607.75 .4103840 .0074456 + 1693910.88 .4047949 .0073686 + 1694213.75 .4110952 .0074233 + 1694516.88 .4054680 .0073003 + 1694819.88 .4050215 .0073328 + 1695123.25 .4062293 .0072739 + 1695426.75 .4155380 .0075087 + 1695730.00 .4096360 .0073398 + 1696033.62 .4163787 .0075263 + 1696337.00 .4075120 .0072524 + 1696640.75 .4133795 .0073971 + 1696944.38 .4252568 .0075328 + 1697248.25 .3986821 .0071318 + 1697552.38 .4240431 .0076167 + 1697856.12 .4247856 .0075877 + 1698160.38 .4413037 .0079110 + 1698464.25 .4483302 .0080277 + 1698768.62 .4337448 .0077704 + 1699072.75 .4316296 .0077259 + 1699377.38 .4342795 .0076837 + 1699681.88 .4206868 .0076074 + 1699986.25 .4351506 .0076797 + 1700291.12 .4401813 .0078232 + 1700595.62 .4407906 .0078732 + 1700900.50 .4231239 .0075241 + 1701205.25 .4301974 .0075685 + 1701510.38 .4291151 .0076246 + 1701815.50 .4396459 .0077526 + 1702120.50 .4361843 .0077350 + 1702425.88 .4470066 .0079295 + 1702731.00 .4582114 .0080820 + 1703036.50 .4420292 .0078293 + 1703342.00 .4514468 .0079998 + 1703647.38 .4536083 .0079908 + 1703953.12 .4451562 .0078770 + 1704258.75 .4415270 .0078473 + 1704564.62 .4568776 .0080150 + 1704870.25 .4451142 .0079049 + 1705176.38 .4425801 .0078942 + 1705482.50 .4553502 .0080122 + 1705788.50 .4728381 .0083180 + 1706094.88 .4665086 .0081843 + 1706400.88 .4502509 .0079642 + 1706707.38 .4505802 .0079053 + 1707013.75 .4590333 .0081032 + 1707320.38 .4544305 .0079696 + 1707627.12 .4550016 .0079729 + 1707933.62 .4524086 .0079237 + 1708240.50 .4578830 .0080000 + 1708547.25 .4535002 .0079781 + 1708854.25 .4610827 .0080779 + 1709161.12 .4691848 .0081652 + 1709468.38 .4580419 .0080573 + 1709775.75 .4605791 .0080824 + 1710082.75 .4609308 .0080376 + 1710390.25 .4543814 .0079501 + 1710697.50 .4473771 .0078844 + 1711005.25 .4615167 .0080528 + 1711312.62 .4594970 .0080711 + 1711620.50 .4656813 .0082024 + 1711928.38 .4617312 .0080498 + 1712236.00 .4694880 .0082994 + 1712544.12 .4514432 .0079611 + 1712852.00 .4612498 .0081051 + 1713160.25 .4556033 .0080260 + 1713468.50 .4714700 .0082513 + 1713776.62 .4489849 .0079279 + 1714085.12 .4703193 .0082059 + 1714393.38 .4751984 .0082906 + 1714702.00 .4682661 .0081801 + 1715010.50 .4668695 .0081857 + 1715319.25 .4667661 .0081371 + 1715628.12 .4760081 .0083507 + 1715936.88 .4893246 .0084806 + 1716245.88 .4726000 .0082338 + 1716554.75 .4790709 .0082822 + 1716864.00 .4776422 .0082888 + 1717173.00 .4730585 .0081299 + 1717482.38 .4627911 .0080431 + 1717791.88 .4669743 .0081088 + 1718101.12 .4656176 .0080733 + 1718410.88 .4760137 .0081715 + 1718720.25 .4873488 .0084119 + 1719030.12 .4745753 .0082041 + 1719339.75 .4767430 .0082779 + 1719649.62 .4968466 .0085582 + 1719959.75 .4925229 .0085571 + 1720269.62 .4929174 .0085369 + 1720579.88 .4641510 .0080966 + 1720889.88 .4941915 .0085425 + 1721200.25 .4969593 .0085090 + 1721510.50 .4899251 .0085551 + 1721821.00 .4908899 .0085376 + 1722131.75 .5111976 .0088500 + 1722442.12 .4874585 .0083965 + 1722753.00 .4738309 .0081158 + 1723063.62 .4850566 .0083519 + 1723374.62 .4999251 .0086076 + 1723685.62 .4888675 .0084141 + 1723996.50 .4992384 .0086082 + 1724307.75 .4904844 .0084935 + 1724618.75 .4854070 .0083803 + 1724930.25 .5036008 .0086157 + 1725241.38 .4942382 .0084936 + 1725553.00 .4983005 .0085406 + 1725864.62 .4970881 .0085545 + 1726176.12 .4895967 .0083571 + 1726488.00 .4873155 .0083625 + 1726799.62 .4865820 .0083909 + 1727111.62 .5068036 .0086771 + 1727423.38 .5018562 .0086479 + 1727735.62 .5084673 .0087785 + 1728047.88 .5137186 .0088281 + 1728359.88 .4959975 .0085348 + 1728672.25 .4935390 .0084747 + 1728984.50 .4870213 .0083805 + 1729297.12 .5005199 .0085901 + 1729609.50 .4957561 .0085324 + 1729922.25 .5098693 .0087452 + 1730235.12 .5143912 .0088653 + 1730547.75 .4934776 .0085336 + 1730860.75 .5048768 .0086871 + 1731173.62 .4870068 .0083816 + 1731486.75 .4981296 .0086117 + 1731799.75 .4980184 .0086909 + 1732113.12 .4998889 .0085884 + 1732426.62 .4967580 .0085902 + 1732739.88 .5060326 .0087702 + 1733053.50 .4930198 .0085628 + 1733366.88 .5018422 .0086858 + 1733680.62 .4978516 .0086169 + 1733994.50 .5096815 .0088446 + 1734308.25 .5057465 .0087704 + 1734622.25 .5001494 .0086883 + 1734936.12 .5066478 .0088146 + 1735250.25 .5094218 .0087592 + 1735564.25 .5093510 .0088768 + 1735878.62 .5143827 .0089792 + 1736193.12 .5011001 .0087744 + 1736507.38 .5125086 .0089216 + 1736822.00 .5168825 .0090706 + 1737136.50 .5099875 .0089605 + 1737451.25 .5034080 .0088549 + 1737765.88 .5023661 .0088834 + 1738080.88 .5193027 .0091696 + 1738396.00 .4969071 .0087326 + 1738710.88 .5163385 .0091382 + 1739026.12 .5098103 .0089968 + 1739341.12 .5016122 .0088109 + 1739656.50 .5014602 .0088392 + 1739971.75 .5066437 .0088497 + 1740287.25 .4934242 .0086209 + 1740603.00 .5002550 .0087722 + 1740918.38 .5187470 .0090303 + 1741234.25 .5025174 .0087732 + 1741549.88 .4910786 .0085558 + 1741865.88 .5122786 .0088881 + 1742182.00 .5001939 .0086640 + 1742497.88 .5166133 .0088687 + 1742814.25 .5142272 .0088752 + 1743130.25 .5129969 .0089458 + 1743446.75 .5171431 .0089629 + 1743762.88 .5230895 .0091643 + 1744079.50 .5165271 .0089848 + 1744396.25 .5064330 .0088387 + 1744712.75 .5033473 .0088222 + 1745029.62 .5160835 .0090935 + 1745346.25 .5220810 .0090723 + 1745663.38 .5237621 .0092593 + 1745980.12 .5204344 .0091844 + 1746297.38 .5057421 .0089971 + 1746614.75 .5125656 .0091345 + 1746931.88 .5315809 .0094438 + 1747249.25 .5287656 .0094099 + 1747566.62 .5253972 .0093027 + 1747884.25 .5098653 .0090401 + 1748201.62 .5317767 .0094426 + 1748519.50 .5197117 .0091320 + 1748837.38 .5297439 .0093146 + 1749155.12 .5278210 .0093205 + 1749473.25 .5207416 .0092522 + 1749791.12 .5350689 .0095229 + 1750109.38 .5209327 .0091825 + 1750427.38 .5490022 .0097646 + 1750745.88 .5198954 .0092000 + 1751064.38 .5263582 .0094214 + 1751382.62 .5241427 .0093371 + 1751701.38 .5225435 .0092879 + 1752019.88 .5315987 .0095279 + 1752338.75 .5487382 .0098343 + 1752657.75 .5296453 .0094608 + 1752976.50 .5211567 .0092699 + 1753295.62 .5121343 .0091289 + 1753614.50 .5285943 .0094203 + 1753933.75 .5351021 .0095672 + 1754252.88 .5252289 .0094043 + 1754572.38 .5462143 .0097070 + 1754892.00 .5322729 .0094388 + 1755211.25 .5213850 .0092865 + 1755531.00 .5361273 .0095875 + 1755850.62 .4967237 .0088604 + 1756170.50 .5335590 .0095203 + 1756490.25 .5350856 .0095351 + 1756810.25 .5187123 .0091073 + 1757130.50 .5372347 .0095376 + 1757450.50 .5159677 .0092359 + 1757770.88 .5373591 .0095671 + 1758091.00 .5432065 .0096605 + 1758411.50 .5277395 .0093036 + 1758731.75 .5183386 .0091419 + 1759052.50 .5185543 .0091768 + 1759373.38 .5296340 .0094181 + 1759693.88 .5144936 .0090605 + 1760014.88 .5373628 .0094739 + 1760335.62 .5334772 .0094066 + 1760656.75 .5256894 .0092862 + 1760977.75 .5188537 .0091561 + 1761299.00 .5264409 .0093103 + 1761620.50 .5128433 .0089951 + 1761941.62 .5433225 .0095757 + 1762263.25 .5146359 .0090472 + 1762584.62 .5362737 .0094174 + 1762906.38 .5312740 .0092754 + 1763228.25 .5090762 .0089401 + 1763549.88 .5279591 .0092729 + 1763871.88 .5229509 .0091143 + 1764193.75 .5394439 .0094591 + 1764515.88 .5294424 .0091985 + 1764837.88 .5266508 .0091684 + 1765160.25 .5339891 .0092927 + 1765482.75 .5381742 .0094573 + 1765805.00 .5199754 .0090641 + 1766127.62 .5340279 .0093461 + 1766450.12 .5225329 .0091597 + 1766772.88 .5211941 .0091219 + 1767095.50 .5392234 .0093548 + 1767418.50 .5362384 .0093096 + 1767741.62 .5441371 .0094532 + 1768064.50 .5241584 .0090938 + 1768387.75 .5499396 .0095053 + 1768710.75 .5292856 .0091959 + 1769034.25 .5219365 .0090743 + 1769357.50 .5235428 .0091321 + 1769681.12 .5246154 .0091692 + 1770004.75 .5342584 .0092656 + 1770328.25 .5388586 .0093771 + 1770652.12 .5269539 .0091106 + 1770975.88 .5364740 .0093678 + 1771299.88 .5377982 .0092879 + 1771624.12 .5256097 .0091518 + 1771948.00 .5449412 .0094558 + 1772272.38 .5425562 .0094532 + 1772596.50 .5314814 .0092220 + 1772921.00 .5386248 .0093720 + 1773245.25 .5457873 .0094403 + 1773570.00 .5350593 .0093618 + 1773894.75 .5465818 .0094948 + 1774219.25 .5436954 .0094592 + 1774544.25 .5451829 .0094383 + 1774869.00 .5428854 .0094618 + 1775194.12 .5451466 .0095279 + 1775519.12 .5372227 .0093997 + 1775844.38 .5464122 .0095804 + 1776169.75 .5469157 .0094726 + 1776495.00 .5556144 .0096496 + 1776820.62 .5373439 .0093261 + 1777145.88 .5186993 .0090454 + 1777471.75 .5538616 .0096612 + 1777797.25 .5542158 .0096583 + 1778123.12 .5372878 .0093038 + 1778449.25 .5493712 .0095744 + 1778775.00 .5536183 .0096499 + 1779101.25 .5432565 .0094145 + 1779427.25 .5250925 .0091715 + 1779753.62 .5415198 .0094487 + 1780079.75 .5465597 .0095070 + 1780406.38 .5411678 .0093857 + 1780733.00 .5555714 .0096205 + 1781059.50 .5407799 .0093934 + 1781386.38 .5240045 .0091370 + 1781713.00 .5289677 .0093198 + 1782040.00 .5554199 .0096859 + 1782367.12 .5402367 .0094757 + 1782694.00 .5506404 .0096458 + 1783021.25 .5425203 .0094030 + 1783348.38 .5237544 .0091869 + 1783675.75 .5124503 .0089925 + 1784003.00 .5048749 .0089404 + 1784330.75 .4870931 .0087956 + 1784658.50 .4893511 .0088401 + 1784986.00 .4595181 .0083225 + 1785313.88 .4674001 .0084171 + 1785641.62 .4822970 .0086703 + 1785969.75 .4970185 .0088525 + 1786297.62 .5227422 .0091769 + 1786625.88 .5322254 .0092968 + 1786954.25 .5346512 .0093173 + 1787282.38 .5528857 .0095372 + 1787611.00 .5404929 .0093479 + 1787939.38 .5535725 .0095952 + 1788268.00 .5471705 .0094351 + 1788596.62 .5580106 .0096149 + 1788925.50 .5425748 .0093765 + 1789254.50 .5594342 .0096704 + 1789583.25 .5465254 .0094191 + 1789912.50 .5675124 .0099044 + 1790241.50 .5597860 .0096007 + 1790570.88 .5434111 .0092965 + 1790900.00 .5474548 .0094564 + 1791229.50 .5513710 .0095633 + 1791559.25 .5608798 .0097650 + 1791888.62 .5388343 .0093239 + 1792218.50 .5597738 .0096549 + 1792548.12 .5624799 .0096895 + 1792878.12 .5383359 .0093695 + 1793208.12 .5383343 .0093343 + 1793538.00 .5434823 .0094591 + 1793868.38 .5495958 .0094617 + 1794198.38 .5322846 .0093010 + 1794528.88 .5484467 .0095041 + 1794859.12 .5498081 .0094793 + 1795189.75 .5369043 .0092502 + 1795520.50 .5368451 .0093595 + 1795851.00 .5323152 .0091588 + 1796182.00 .5334420 .0092467 + 1796512.62 .5371031 .0092775 + 1796843.75 .5376230 .0092792 + 1797174.62 .5231650 .0091080 + 1797506.00 .5267552 .0091744 + 1797837.38 .5498957 .0094703 + 1798168.50 .5294606 .0091664 + 1798500.12 .5392026 .0094060 + 1798831.38 .5358818 .0093329 + 1799163.12 .5435079 .0094192 + 1799494.75 .5367498 .0092242 + 1799826.62 .5133699 .0089948 diff --git a/tests/data/ex012/ex012a.inp b/tests/data/ex012/ex012a.inp new file mode 100755 index 0000000..9173991 --- /dev/null +++ b/tests/data/ex012/ex012a.inp @@ -0,0 +1,80 @@ +example ex012: multiple nuclides (Natural Si -- 200 m flight path) +Si 27.976928 300000. 1800000. +csisrs +chi squared is wanted +do not suppress any intermediate results +generate odf file automatically + + 300. 200.0000 0.182233 0.0 0.002518 + 4.20000 0.347162 +TRANSMISSION + 1 1 1 0.5 0.9223 0.0 Si28 s1/2 + 1 1 0 0 0.5 0.0 0.0 + 2 1 0 2 1.5 0.0 1843140.0 + 2 1 1 -0.5 0.9223 0.0 Si28 p1/2 + 1 1 0 1 0.5 0.0 0.0 + 2 1 0 1 0.5 0.0 1843140.0 + 3 1 1 -1.5 0.9223 0.0 Si28 p3/2 + 1 1 0 1 0.5 0.0 0.0 + 2 1 0 1 0.5 0.0 1843140.0 + 4 1 2 1.5 0.9223 0.0 Si28 d3/2 + 1 1 0 2 0.5 0.0 0.0 + 2 1 0 2 0.5 0.0 1843140.0 + 3 1 0 0 1.5 0.0 1843140.0 + 5 1 2 2.5 0.9223 0.0 Si28 d5/2 + 1 1 0 2 0.5 0.0 0.0 + 2 1 0 2 0.5 0.0 1843140.0 + 3 1 0 0 2.5 0.0 1843140.0 + 6 1 2 -2.5 0.9223 0.0 Si28 f5/2 + 1 1 0 3 0.5 0.0 0.0 + 2 1 0 3 0.5 0.0 1843140.0 + 3 1 0 1 2.5 0.0 1843140.0 + 7 1 2 -3.5 0.9223 0.0 Si28 f7/2 + 1 1 0 3 0.5 0.0 0.0 + 2 1 0 3 0.5 0.0 1843140.0 + 3 1 0 1 2.5 0.0 1843140.0 + 8 1 0 0.0 0.0467 0.5 Si29 s0s (el=0, J=0, singlet j=0) + 1 1 0 0 0.0 0.0 0.0 + 9 1 0 1.0 0.0467 0.5 Si29 s1q (el=0, J=1, quartet j=1) + 1 1 0 0 1.0 0.0 0.0 + 10 1 0 -1.0 0.0467 0.5 Si29 p1s + 1 1 0 1 0.0 0.0 + 11 1 0 -0.0 0.0467 0.5 Si29 p0q + 1 1 0 1 1.0 0.0 + 12 1 0 -1.0 0.0467 0.5 Si29 p1q + 1 1 0 1 1.0 0.0 + 13 1 0 -2.0 0.0467 0.5 Si29 p2q + 1 1 0 1 1.0 0.0 + 14 1 0 2.0 0.0467 0.5 Si29 d2s + 1 1 0 2 0.0 0.0 + 15 1 0 1.0 0.0467 0.5 Si29 d1q + 1 1 0 2 1.0 0.0 + 16 1 0 2.0 0.0467 0.5 Si29 d2q + 1 1 0 2 1.0 0.0 + 17 1 0 3.0 0.0467 0.5 Si29 d3q + 1 1 0 2 1.0 0.0 + 18 1 0 0.5 0.0310 0.0 Si30 s1/2 + 1 1 0 0 0.5 0.0 + 19 1 0 -0.5 0.0310 0.0 Si30 p1/2 + 1 1 0 1 0.5 0.0 + 20 1 0 -1.5 0.0310 0.0 Si30 p3/2 + 1 1 0 1 0.5 0.0 + 21 1 0 1.5 0.0310 0.0 Si30 d3/2 + 1 1 0 2 0.5 0.0 + 22 1 0 2.5 0.0310 0.0 Si30 d5/2 + 1 1 0 2 0.5 0.0 + 23 x 1 0 0.5 2.0 0.0 O s1/2 + 1 1 0 0 0.5 0.0 + 24 x 1 0 -0.5 2.0 0.0 O p1/2 + 1 1 0 1 0.5 0.0 + 25 x 1 0 -1.5 2.0 0.0 O p3/2 + 1 1 0 1 0.5 0.0 + 26 x 1 0 1.5 2.0 0.0 O d3/2 + 1 1 0 2 0.5 0.0 + 27 x 1 0 2.5 2.0 0.0 O d5/2 + 1 1 0 2 0.5 0.0 + 28 x 1 0 -2.5 2.0 0.0 O f5/2 + 1 1 0 3 0.5 0.0 + 29 x 1 0 -3.5 2.0 0.0 O f7/2 + 1 1 0 3 0.5 0.0 + diff --git a/tests/data/ex012/ex012a.par b/tests/data/ex012/ex012a.par new file mode 100755 index 0000000..0c3fd15 --- /dev/null +++ b/tests/data/ex012/ex012a.par @@ -0,0 +1,176 @@ +-3.6616E+06 1.5877E+05 3.6985E+09 0 0 1 1 +-8.7373E+05 1.0253E+03 1.0151E+02 0 0 1 1 +-3.6529E+05 1.0000E+03 3.0406E+01 0 0 0 1 +-6.3159E+04 1.0000E+03 4.6894E+01 0 0 0 1 +-4.8801E+04 1.0000E+03 9.2496E+00 0 0 0 1 +31739.99805 1.0000E+03 1.5667E+01 0 0 0 5 +55676.96094 1.5803E+03 6.5331E+05 0 0 0 1 +67732.84375 2.5000E+03 2.6589E+03 0 0 0 3 +70800.00781 1.0000E+03 2.9617E+01 0 0 0 5 +86797.35938 2.5000E+03 7.2618E+02 0 0 0 3 +181617.5000 5.6000E+03 3.4894E+07 0 0 0 1 +298700.0000 1.0000E+03 9.8860E+03 0 0 0 5 +301310.8125 3.6000E+03 2.3548E+03 0 0 0 1 +354588.6875 1.0000E+03 1.4460E+04 0 0 0 5 +399675.9375 6.6000E+02 8.1361E+02 0 0 0 3 +532659.8750 2.5000E+03 5.3281E+05 0 0 0 3 +565576.8750 2.9000E+03 1.0953E+07 0 0 0 3 +587165.7500 8.8000E+03 1.9916E+05 0 0 0 2 +590290.1250 3.6000E+03 5.2366E+05 0 0 0 1 +602467.3125 3.4000E+03 5.0491E+04 0 0 0 4 +714043.4375 2.5000E+03 1.2165E+03 0 0 0 3 +771711.9375 1.0000E+03 5.3139E+04 0 0 0 5 +812491.6250 9.7000E+03 3.0100E+07 0 0 0 3 +845233.8750 2.0000E+03 3.9791E+05 0 0 0 4 +872305.8125 1.3000E+03 3.2140E+04 0 0 0 5 +910043.5625 1.1300E+03 3.6733E+06 0 0 0 3 +962233.0000 1.6000E+04 7.6614E+07 0 0 0 2 +1017777.188 1.0000E+03 7.6192E+04 0 0 0 5 +1042856.812 1.0000E+03 9.3370E+05 0 0 0 5 +1085169.250 3.6000E+03 7.2794E+04 0 0 0 1 +1148103.625 1.0000E+03 3.1469E+03 0 0 0 5 +1162663.625 3.8000E+03 3.0136E+06 0 0 0 1 +1199501.375 7.6000E+03 1.4914E+07 0 0 0 2 +1201238.750 3.6000E+03 4.6012E+06 0 0 0 1 +1256447.250 3.6000E+03 1.7383E+07 0 0 0 1 +1264441.750 1.0000E+03 8.4364E+05 0 0 0 5 +1379920.250 2.4000E+03 6.5299E+04 0 0 0 4 +1408269.750 2.7000E+03 5.1983E+06 0 0 0 3 +1479927.250 1.6500E+03 3.5025E+06 0 0 0 4 +1482395.375 8.8000E+03 8.8694E+02 0 0 0 2 +1512343.875 1.0000E+03 9.1493E+04 0 0 0 5 +1528742.375 2.4000E+03 2.9225E+06 0 0 0 4 +1580564.875 2.4000E+03 1.4955E+06 0 0 0 4 +1592844.250 8.8000E+03 1.1199E+07 0 0 0 2 +1597168.625 2.4000E+03 4.0172E+06 0 0 0 4 +1639561.500 1.0000E+03 1.5293E+07 0 0 0 5 +1651146.000 1.0000E+03 2.1555E+07 0 0 0 5 +1658595.000 8.8000E+03 1.5553E+06 0 0 0 2 +1664961.125 2.4000E+03 2.1590E+05 0 0 0 4 +1784952.750 2.4000E+03 1.9294E+05 0 0 0 4 +1805652.625 2.5000E+03 1.2991E+06 0 0 0 3 +1850667.250 1.0000E+03 3.5515E+07 0 0 0 5 +1852435.250 2.5000E+03 7.0707E+07 0 0 0 3 +1923655.250 1.0000E+03 1.0171E+06 0 0 0 5 +2248678.250 3.6000E+03 4.4476E+08 0 0 0 1 +1968869.750 1.0000E+03 5.7341E+06 0 0 0 5 +3007280.500 3.6000E+03 2.8996E+05 0 0 0 1 +3067775.250 3.6000E+03 4.2229E+05 0 0 0 1 +-2.1796E+06 4.0908E+05 1.7222E+09 0 0 0 8 +-8.6024E+05 9.9997E+02 3.4170E+07 0 0 0 8 +-4.3128E+05 1.0059E+03 2.2851E+08 0 0 0 8 +15282.00000 1.6460E+03 1.0000E+04 0 0 0 10 +38819.00000 2.4000E+03 7.5926E+04 0 0 0 13 +159682.9688 1.9000E+03 1.2003E+06 0 0 0 10 +184456.4844 1.5000E+03 1.3674E+05 0 0 0 10 +336790.2812 8.0000E+02 2.5128E+06 0 0 0 10 +385764.1875 4.6700E+03 2.4133E+07 0 0 0 9 +552241.8125 5.7000E+03 1.2989E+06 0 0 0 13 +566558.4375 3.0000E+03 7.0820E+07 0 0 0 10 +619664.6250 3.0000E+03 7.2596E+05 0 0 0 13 +649726.0000 3.0000E+03 1.0959E+06 0 0 0 13 +653064.6250 6.3000E+03 1.9386E+07 0 0 0 12 +715064.6250 3.0000E+02 9.7857E+05 0 0 0 10 +716771.3125 3.0000E+03 2.1930E+08 0 0 0 8 +802258.9375 3.0000E+03 9.9349E+06 0 0 0 15 +862003.6875 3.0000E+03 4.3293E+08 0 0 0 8 +872483.5000 3.0000E+02 1.7335E+07 0 0 0 10 +955891.2500 3.0000E+02 9.8289E+05 0 0 0 13 +1098425.500 3.0000E+03 5.7787E+04 0 0 0 15 +1113807.625 3.0000E+02 7.6533E+07 0 0 0 10 +1122279.500 3.0000E+02 4.8816E+06 0 0 0 13 +1178601.750 3.0000E+03 8.2959E+06 0 0 0 9 +1192267.500 3.0000E+02 3.7506E+05 0 0 0 12 +1207629.500 3.0000E+02 1.9795E+07 0 0 0 13 +1388859.125 3.0000E+03 4.2714E+06 0 0 0 15 +1769072.750 3.0000E+03 3.2136E+04 0 0 0 8 +2248487.000 3.0000E+03 1.6932E+05 0 0 0 8 +-1.1851E+06 1.1848E+05 2.6057E+08 0 0 0 18 +-1.6155E+05 6.5000E+02 4.2640E+05 0 0 0 18 +2235.000000 3.7000E+02 9.3266E+02 0 0 0 20 +4977.000000 6.0000E+02 1.1220E+03 0 0 0 19 +183488.8281 6.0000E+03 9.9976E+06 0 0 0 18 +235225.3906 8.0000E+02 1.1541E+05 0 0 0 21 +302839.2188 3.7000E+02 2.7443E+05 0 0 0 20 +413136.1875 6.0000E+02 1.5801E+06 0 0 0 19 +645239.8125 8.0000E+02 4.0143E+05 0 0 0 21 +704912.0000 8.0000E+02 4.2319E+05 0 0 0 21 +745454.0000 3.7000E+02 1.4735E+07 0 0 0 20 +796946.1250 6.0000E+02 4.6932E+05 0 0 0 19 +807379.8125 6.0000E+02 2.7433E+05 0 0 0 19 +810796.9375 6.0000E+02 4.1931E+05 0 0 0 19 +844674.6250 3.7000E+02 3.3153E+06 0 0 0 20 +878822.8125 8.0000E+02 1.1063E+05 0 0 0 21 +979821.3125 6.0000E+02 5.9182E+05 0 0 0 19 +1182175.750 6.0000E+03 5.9124E+06 0 0 0 18 +1217821.125 8.0000E+02 1.8889E+06 0 0 0 21 +1274871.500 6.0000E+02 2.2255E+06 0 0 0 19 +1302032.875 8.0000E+02 3.0479E+05 0 0 0 21 +1310774.875 3.7000E+02 3.3971E+05 0 0 0 20 +1337984.375 6.0000E+02 4.6240E+06 0 0 0 19 +1356024.750 3.7000E+02 1.2271E+07 0 0 0 20 +1383597.625 6.0000E+02 2.5336E+07 0 0 0 19 +1400981.375 8.0000E+02 1.8976E+06 0 0 0 21 +1412107.750 3.7000E+02 6.6862E+05 0 0 0 20 +1586007.000 6.0000E+03 2.3644E+07 0 0 0 18 +2583249.500 6.0000E+03 9.2076E+07 0 0 0 18 +-1.1592E+07 1.2000E+03 7.5174E+09 0 0 0 23 +-9.1926E+06 1.2000E+03 1.4356E+10 0 0 0 23 +433901.3750 1.2000E+03 4.3760E+07 0 0 0 25 +999736.9375 1.2000E+03 9.6583E+07 0 0 0 26 +1307683.875 1.2000E+03 4.2027E+07 0 0 0 25 +1630813.125 1.2000E+03 7.1367E+04 0 0 0 25 +1650581.000 1.2000E+03 3.9013E+06 0 0 0 29 +1833142.125 1.2000E+03 7.8352E+06 0 0 0 26 +1898468.875 1.2000E+03 2.8678E+07 0 0 0 24 +2372699.000 1.2000E+03 1.5533E+08 0 0 0 23 +2888249.750 1.2000E+03 1.8859E+06 0 0 0 24 +3004838.500 1.2000E+03 2.3338E+03 0 0 0 24 +3181814.500 1.2000E+03 5.1769E+08 0 0 0 24 +3203037.750 1.2000E+03 1.7923E+08 0 0 0 23 +3204505.000 1.2000E+03 3.1091E+05 0 0 0 28 +3239197.250 1.2000E+03 2.5141E+08 0 0 0 26 +3431828.250 1.2000E+03 6.1570E+05 0 0 0 27 +3438834.250 1.2000E+03 1.8039E+06 0 0 0 28 +3636796.000 1.2000E+03 7.0184E+08 0 0 0 25 +3763624.250 1.2000E+03 1.6031E+07 0 0 0 29 +3853751.500 1.2000E+03 5.6245E+08 0 0 0 23 +4175216.750 1.2000E+03 7.0220E+07 0 0 0 26 +4288830.500 1.2000E+03 5.6268E+07 0 0 0 25 +4303685.000 1.2000E+03 1.6078E+07 0 0 0 24 +4461693.000 1.2000E+03 7.7996E+07 0 0 0 23 +4525253.000 1.2000E+03 4.1733E+06 0 0 0 27 +4591673.500 1.2000E+03 9.1070E+04 0 0 0 29 +4592562.000 1.2000E+03 1.7527E+05 0 0 0 28 +4816678.000 1.2000E+03 4.7145E+07 0 0 0 25 +5055537.000 1.2000E+03 5.2134E+07 0 0 0 26 +5118596.000 1.2000E+03 1.7864E+07 0 0 0 29 +5365329.500 1.2000E+03 9.8062E+05 0 0 0 27 +5617318.000 1.2000E+03 3.3197E+07 0 0 0 28 +5666636.000 1.2000E+03 1.2687E+07 0 0 0 27 +5912201.500 1.2000E+03 1.2942E+07 0 0 0 29 +5986110.000 1.2000E+03 7.1061E+06 0 0 0 26 +6076846.000 1.2000E+03 5.1667E+06 0 0 0 28 +6116665.000 1.2000E+03 5.5499E+06 0 0 0 24 +6389893.000 1.2000E+03 4.9356E+06 0 0 0 29 +6813680.500 1.2000E+03 3.2629E+06 0 0 0 28 +6833136.500 1.2000E+03 5.1405E+06 0 0 0 27 +7373000.000 1.2000E+03 2.4000E+06 0 0 0 24 +8820920.000 1.2000E+03 1.1234E+10 0 0 0 25 +10934820.00 1.2000E+03 2.7611E+05 0 0 0 23 +15050371.00 1.2000E+03 6.3499E+05 0 0 0 23 +25004488.00 1.2000E+03 6.9186E+03 0 0 0 23 + + +RADIUS PARAMETERS FOLLOW + 4.13642 4.13642 0-1 1 4 5 + 4.94372 4.94372 0-1 2 3 6 7 + 4.40000 4.40000 0-1 8 91011121314151617 + 4.20000 4.20000 0-11819202122 + 4.20000 4.20000 0-123242526272829 + +ISOTOPIC MASSES AND ABUNDANCES FOLLOW + 27.976929 1.0000000 .9200 1 1 2 3 4 5 6 7 + 28.976496 .0467000 .0500 1 8 91011121314151617 + 29.973772 .0310000 .0200 11819202122 + 16.000000 1.0000000 .0100000 023242526272829 diff --git a/tests/unit/conftest.py b/tests/unit/conftest.py new file mode 100644 index 0000000..bd27f30 --- /dev/null +++ b/tests/unit/conftest.py @@ -0,0 +1,108 @@ +#!/usr/bin/env python +"""Shared pytest fixtures for SAMMY tests.""" + +import os +from pathlib import Path +from typing import Dict, Generator +from unittest.mock import Mock + +import pytest + + +@pytest.fixture +def test_data_dir() -> Path: + """Get path to test data directory.""" + return Path(__file__).parents[2] / "tests/data/ex012" + + +@pytest.fixture +def temp_working_dir(tmp_path) -> Path: + """Create temporary working directory.""" + work_dir = tmp_path / "sammy_test" + work_dir.mkdir(exist_ok=True) + return work_dir + + +@pytest.fixture +def temp_output_dir(temp_working_dir) -> Path: + """Create temporary output directory.""" + output_dir = temp_working_dir / "output" + output_dir.mkdir(exist_ok=True) + return output_dir + + +@pytest.fixture +def mock_sammy_files(test_data_dir) -> Dict[str, Path]: + """Provide paths to test input files.""" + return { + "input_file": test_data_dir / "ex012a.inp", + "parameter_file": test_data_dir / "ex012a.par", + "data_file": test_data_dir / "ex012a.dat", + } + + +@pytest.fixture +def mock_sammy_output() -> str: + """Provide mock SAMMY output with success message.""" + return """ + SAMMY execution log + ... processing ... + Normal finish to SAMMY + """ + + +@pytest.fixture +def mock_sammy_error_output() -> str: + """Provide mock SAMMY output with error message.""" + return """ + SAMMY execution log + Error: Invalid input parameters + SAMMY execution failed + """ + + +@pytest.fixture +def mock_sammy_results(temp_working_dir) -> None: + """Create mock SAMMY output files.""" + # Create some mock output files + files = ["SAMMY.LPT", "SAMMY.PAR", "SAMMY.LST", "SAMMY.ODF"] + for file in files: + (temp_working_dir / file).write_text("Mock SAMMY output") + + +@pytest.fixture +def clean_env() -> Generator: + """Remove SAMMY-related environment variables temporarily.""" + # Store original environment + orig_env = {} + env_vars = ["SAMMY_PATH", "NOVA_URL", "NOVA_API_KEY"] + + for var in env_vars: + orig_env[var] = os.environ.get(var) + if var in os.environ: + del os.environ[var] + + yield + + # Restore original environment + for var, value in orig_env.items(): + if value is not None: + os.environ[var] = value + + +@pytest.fixture +def mock_docker(): + """Mock Docker client.""" + mock = Mock() + mock.containers.run.return_value = "Mock container" + mock.images.get.return_value = True + return mock + + +@pytest.fixture +def mock_nova(): + """Mock NOVA client.""" + mock = Mock() + mock.connect.return_value.__enter__.return_value = mock + mock.create_data_store.return_value = "mock_datastore" + return mock diff --git a/tests/unit/pleiades/core/test_constants.py b/tests/unit/pleiades/core/test_constants.py new file mode 100644 index 0000000..9726537 --- /dev/null +++ b/tests/unit/pleiades/core/test_constants.py @@ -0,0 +1,55 @@ +#!/usr/bin/env python +""" +Test suite for physical constants and unit conversions. + +Reasoning: +- Verify accuracy of physical constants +- Test unit conversion functions +- Ensure immutability of constants +- Validate computed properties +""" + +import pytest +from pydantic import ValidationError + +from pleiades.core.constants import CONSTANTS +from pleiades.core.models import Mass, UnitType + + +def test_constants_immutability(): + """Test that constants cannot be modified.""" + with pytest.raises(ValidationError): + CONSTANTS.speed_of_light = 0 + + with pytest.raises(ValidationError): + CONSTANTS.neutron_mass = Mass(value=0, unit_type=UnitType.MASS) + + +def test_mass_constants(): + """Test mass constants values and units.""" + assert CONSTANTS.neutron_mass_amu == pytest.approx(1.008664915) + assert CONSTANTS.proton_mass_amu == pytest.approx(1.007276466) + assert CONSTANTS.electron_mass_amu == pytest.approx(0.000548579909) + + +def test_computed_masses(): + """Test computed mass conversions.""" + expected_neutron_kg = 1.674927471e-27 # kg + assert CONSTANTS.neutron_mass_kg == pytest.approx(expected_neutron_kg, rel=1e-8) + + +def test_constant_precisions(): + """Test that constants have correct significant figures.""" + assert len(str(CONSTANTS.avogadro_number)) >= 8 # At least 8 significant figures + assert len(str(CONSTANTS.planck_constant)) >= 8 + + +def test_fundamental_constants(): + """Test fundamental constants against known values.""" + assert CONSTANTS.speed_of_light == 299792458.0 + assert CONSTANTS.elementary_charge == pytest.approx(1.602176634e-19) + assert CONSTANTS.boltzmann_constant == pytest.approx(8.617333262e-5) + + +if __name__ == "__main__": + pytest.main(["-v", __file__]) diff --git a/tests/unit/pleiades/core/test_data_manager.py b/tests/unit/pleiades/core/test_data_manager.py new file mode 100644 index 0000000..7cd6bbc --- /dev/null +++ b/tests/unit/pleiades/core/test_data_manager.py @@ -0,0 +1,72 @@ +#!/usr/bin/env python +"""Unit tests for the NuclearDataManager class.""" + +# tests/unit/pleiades/core/test_data_manager.py +import pytest + +from pleiades.core.data_manager import NuclearDataManager +from pleiades.core.models import CrossSectionPoint, DataCategory, IsotopeIdentifier, IsotopeInfo, IsotopeMassData + + +@pytest.fixture +def data_manager(): + """Create a NuclearDataManager instance using actual package data.""" + return NuclearDataManager() + + +def test_list_files(data_manager): + """Test listing available files.""" + files = data_manager.list_files() + assert DataCategory.ISOTOPES in files + # Test for known files that should exist + isotope_files = files[DataCategory.ISOTOPES] + assert "isotopes.info" in isotope_files + assert "mass.mas20" in isotope_files + assert "neutrons.list" in isotope_files + + +def test_get_isotope_info_u238(data_manager): + """Test U-238 isotope information retrieval.""" + info = data_manager.get_isotope_info(IsotopeIdentifier.from_string("U-238")) + assert isinstance(info, IsotopeInfo) + # Test against known U-238 values + assert info.spin == 0.0 + assert abs(info.abundance - 0.992745 * 100) < 1e-6 + + +def test_get_mass_data_u238(data_manager): + """Test U-238 mass data retrieval.""" + mass_data = data_manager.get_mass_data(IsotopeIdentifier(element="U", mass_number=238)) + assert isinstance(mass_data, IsotopeMassData) + # Test against known U-238 values from mass.mas20 + expected_mass = 238.050786936 + assert abs(mass_data.atomic_mass - expected_mass) < 1e-6 + + +def test_read_cross_section_data_u238(data_manager): + """Test U-238 cross-section data reading.""" + xs_data = data_manager.read_cross_section_data("u-n.tot", "U-238") + assert len(xs_data) > 0 + assert all(isinstance(point, CrossSectionPoint) for point in xs_data) + + +def test_get_mat_number_u238(data_manager): + """Test U-238 MAT number retrieval.""" + mat = data_manager.get_mat_number("U-238") + assert mat == 9237 # Verify this is the correct MAT number + + +# Error cases +def test_get_isotope_info_nonexistent(data_manager): + """Test handling of nonexistent isotope.""" + assert data_manager.get_isotope_info(IsotopeIdentifier(element="X", mass_number=999)) is None + + +def test_file_not_found(data_manager): + """Test handling of nonexistent file.""" + with pytest.raises(FileNotFoundError): + data_manager.get_file_path(DataCategory.ISOTOPES, "nonexistent.info") + + +if __name__ == "__main__": + pytest.main(["-v", __file__]) diff --git a/tests/unit/pleiades/core/test_models.py b/tests/unit/pleiades/core/test_models.py new file mode 100644 index 0000000..ea810f2 --- /dev/null +++ b/tests/unit/pleiades/core/test_models.py @@ -0,0 +1,124 @@ +#!/usr/bin/env python +"""Unit tests for core data models.""" + +import pytest +from pydantic import ValidationError + +from pleiades.core.models import ( + CrossSectionPoint, + Isotope, + IsotopeIdentifier, + IsotopeInfo, + IsotopeMassData, + Mass, +) + + +@pytest.fixture +def u238_identifier(): + """Create a U-238 isotope identifier.""" + return IsotopeIdentifier(element="U", mass_number=238) + + +@pytest.fixture +def sample_isotope(u238_identifier): + """Create a sample U-238 isotope instance.""" + return Isotope( + identifier=u238_identifier, + atomic_mass=Mass(value=238.0289), + thickness=1.0, + thickness_unit="cm", + abundance=0.992745, + density=19.1, # g/cm³ + density_unit="g/cm3", + ) + + +def test_isotope_identifier_creation(): + """Test IsotopeIdentifier creation and validation.""" + identifier = IsotopeIdentifier(element="U", mass_number=238) + assert identifier.element == "U" + assert identifier.mass_number == 238 + + # Test string conversion + assert str(identifier) == "U-238" + + # Test invalid inputs + with pytest.raises(ValidationError): + IsotopeIdentifier(element="1U", mass_number=238) + with pytest.raises(ValidationError): + IsotopeIdentifier(element="U", mass_number=-1) + + +def test_isotope_identifier_from_string(): + """Test IsotopeIdentifier creation from string.""" + identifier = IsotopeIdentifier.from_string("U-238") + assert identifier.element == "U" + assert identifier.mass_number == 238 + + # Test invalid formats + with pytest.raises(ValueError): + IsotopeIdentifier.from_string("U238") + with pytest.raises(ValueError): + IsotopeIdentifier.from_string("238U") + + +def test_isotope_creation(sample_isotope): + """Test Isotope model creation and validation.""" + assert sample_isotope.density == 19.1 + assert sample_isotope.thickness_unit == "cm" + + # Test validation + with pytest.raises(ValidationError): + Isotope( + identifier=sample_isotope.identifier, + atomic_mass=Mass(value=-1.0), # Invalid mass + thickness=1.0, + thickness_unit="cm", + abundance=0.5, + density=1.0, + ) + + +def test_isotope_areal_density(sample_isotope): + """Test areal density calculation.""" + # Test with different thickness units + cm_isotope = sample_isotope + mm_isotope = Isotope(**{**sample_isotope.model_dump(), "thickness": 10.0, "thickness_unit": "mm"}) + + # Should give same result for equivalent thicknesses + assert pytest.approx(cm_isotope.areal_density) == mm_isotope.areal_density + + +def test_cross_section_point(): + """Test CrossSectionPoint model.""" + point = CrossSectionPoint(energy=1.0, cross_section=10.0) + assert point.energy == 1.0 + assert point.cross_section == 10.0 + + with pytest.raises(ValidationError): + CrossSectionPoint(energy=-1.0, cross_section=10.0) + with pytest.raises(ValidationError): + CrossSectionPoint(energy=1.0, cross_section=-10.0) + + +def test_isotope_mass_data(): + """Test IsotopeMassData model.""" + data = IsotopeMassData(atomic_mass=238.0289, mass_uncertainty=0.0001, binding_energy=7.6, beta_decay_energy=None) + assert data.atomic_mass == pytest.approx(238.0289) + assert data.binding_energy == pytest.approx(7.6) + assert data.beta_decay_energy is None + + +def test_isotope_info(): + """Test IsotopeInfo model.""" + info = IsotopeInfo(spin=0.0, abundance=99.2745) + assert info.spin == 0.0 + assert info.abundance == pytest.approx(99.2745) + + with pytest.raises(ValidationError): + IsotopeInfo(spin=-1.0, abundance=50.0) + + +if __name__ == "__main__": + pytest.main(["-v", __file__]) diff --git a/tests/unit/pleiades/core/test_transmissions.py b/tests/unit/pleiades/core/test_transmissions.py new file mode 100644 index 0000000..e2962f6 --- /dev/null +++ b/tests/unit/pleiades/core/test_transmissions.py @@ -0,0 +1,123 @@ +# Module: pleiades/tests/core/test_transmission.py +"""Unit tests for transmission calculations.""" + +import numpy as np +import pytest + +from pleiades.core.models import CrossSectionPoint, Isotope, IsotopeIdentifier, Mass +from pleiades.core.transmission import TransmissionError, calculate_transmission + + +@pytest.fixture +def test_energies(): + """Create test energy grid.""" + return np.logspace(0, 6, 10) # 1 eV to 1 MeV + + +@pytest.fixture +def sample_xs_data(): + """Create sample cross-section data.""" + return [ + CrossSectionPoint(energy=1.0, cross_section=10.0), + CrossSectionPoint(energy=10.0, cross_section=5.0), + CrossSectionPoint(energy=100.0, cross_section=2.0), + CrossSectionPoint(energy=1000.0, cross_section=1.0), + ] + + +@pytest.fixture +def test_isotope(sample_xs_data): + """Create test isotope with cross-section data.""" + identifier = IsotopeIdentifier(element="U", mass_number=238) + isotope = Isotope( + identifier=identifier, + atomic_mass=Mass(value=238.0289), + thickness=2.0, + thickness_unit="cm", + abundance=0.992745, + density=19.1, + density_unit="g/cm3", + ) + isotope.xs_data = sample_xs_data + return isotope + + +def test_transmission_calculation(test_isotope, test_energies): + """Test basic transmission calculation.""" + results = calculate_transmission(test_isotope, test_energies) + + assert len(results) == len(test_energies) + for energy, trans in results: + assert 0.0 <= trans <= 1.0 # Physical bounds + + +def test_transmission_interpolation(test_isotope): + """Test interpolation of cross sections.""" + # Test point between known values + energies = [1.0] # Between 1.0 and 10.0 in sample data + results = calculate_transmission(test_isotope, energies) + + assert len(results) == 1 + energy, trans = results[0] + assert 0.0 <= trans <= 1.0 + + +def test_full_transmission(): + """Test case with zero cross section.""" + identifier = IsotopeIdentifier(element="U", mass_number=238) + isotope = Isotope( + identifier=identifier, + atomic_mass=Mass(value=238.0289), + thickness=1.0, + thickness_unit="cm", + abundance=0.992745, + density=19.1, + density_unit="g/cm3", + ) + isotope.xs_data = [CrossSectionPoint(energy=1.0, cross_section=0.0)] + + results = calculate_transmission(isotope, [1.0]) + assert results[0][1] == pytest.approx(1.0) # Should be full transmission + + +def test_no_xs_data(test_isotope): + """Test error when no cross-section data available.""" + test_isotope.xs_data = [] + with pytest.raises(TransmissionError): + calculate_transmission(test_isotope, [1.0]) + + +def test_transmission_thickness_scaling(sample_xs_data): + """Test transmission scales correctly with thickness.""" + identifier = IsotopeIdentifier(element="U", mass_number=238) + isotope1 = Isotope( + identifier=identifier, + atomic_mass=Mass(value=238.0289), + thickness=1.0, + thickness_unit="cm", + abundance=0.992745, + density=19.1, + density_unit="g/cm3", + ) + isotope2 = Isotope( + identifier=identifier, + atomic_mass=Mass(value=238.0289), + thickness=2.0, # Double thickness + thickness_unit="cm", + abundance=0.992745, + density=19.1, + density_unit="g/cm3", + ) + + isotope1.xs_data = sample_xs_data + isotope2.xs_data = sample_xs_data + + trans1 = calculate_transmission(isotope1, [1.0])[0][1] + trans2 = calculate_transmission(isotope2, [1.0])[0][1] + + # Trans2 should be approximately trans1 squared + assert trans2 == pytest.approx(trans1 * trans1, rel=1e-5) + + +if __name__ == "__main__": + pytest.main(["-v", __file__]) diff --git a/tests/unit/pleiades/sammy/backends/test_docker.py b/tests/unit/pleiades/sammy/backends/test_docker.py new file mode 100644 index 0000000..76f0591 --- /dev/null +++ b/tests/unit/pleiades/sammy/backends/test_docker.py @@ -0,0 +1,173 @@ +#!/usr/bin/env python +"""Unit tests for Docker SAMMY backend.""" + +import subprocess +from pathlib import Path + +import pytest + +from pleiades.sammy.backends.docker import DockerSammyRunner +from pleiades.sammy.config import DockerSammyConfig +from pleiades.sammy.interface import ( + EnvironmentPreparationError, + SammyFiles, +) + + +@pytest.fixture +def mock_docker_command(monkeypatch): + """Mock shutil.which to simulate docker being available.""" + + def mock_which(cmd): + if cmd == "docker": + return "/usr/bin/docker" + return None + + monkeypatch.setattr("shutil.which", mock_which) + return mock_which + + +@pytest.fixture +def mock_subprocess_docker(monkeypatch, mock_sammy_output): + """Mock subprocess.run for docker commands.""" + + def mock_run(*args, **kwargs): + _ = kwargs # Unused + cmd_str = " ".join(str(x) for x in args[0]) # Convert command array to string + if "docker image inspect" in cmd_str: # Image check + return subprocess.CompletedProcess(args=args, returncode=0, stdout='[{"Id": "mock_image_id"}]', stderr="") + if "docker run" in cmd_str: # Docker run + return subprocess.CompletedProcess(args=args, returncode=0, stdout=mock_sammy_output, stderr="") + return subprocess.CompletedProcess(args=args, returncode=1, stdout="", stderr="Command not found") + + monkeypatch.setattr(subprocess, "run", mock_run) + return mock_run + + +@pytest.fixture +def mock_subprocess_docker_fail(monkeypatch, mock_sammy_error_output): + """Mock subprocess.run for docker failure.""" + + def mock_run(*args, **kwargs): + _ = kwargs # Unused + cmd_str = " ".join(str(x) for x in args[0]) # Convert command array to string + if "docker image inspect" in cmd_str: # Image check should succeed + return subprocess.CompletedProcess(args=args, returncode=0, stdout='[{"Id": "mock_image_id"}]', stderr="") + if "docker run" in cmd_str: # Docker run should fail + return subprocess.CompletedProcess(args=args, returncode=1, stdout="", stderr=mock_sammy_error_output) + return subprocess.CompletedProcess(args=args, returncode=1, stdout="", stderr="Command not found") + + monkeypatch.setattr(subprocess, "run", mock_run) + return mock_run + + +@pytest.fixture +def docker_config(temp_working_dir): + """Create Docker SAMMY configuration.""" + config = DockerSammyConfig( + working_dir=temp_working_dir, + output_dir=temp_working_dir / "output", + image_name="kedokudo/sammy-docker", + container_working_dir=Path("/sammy/work"), + container_data_dir=Path("/sammy/data"), + ) + config.validate() + return config + + +class TestDockerSammyRunner: + """Tests for DockerSammyRunner.""" + + def test_initialization(self, docker_config, mock_docker_command): + """Should initialize with valid config.""" + _ = mock_docker_command # implicitly used via fixture + runner = DockerSammyRunner(docker_config) + assert runner.config == docker_config + + def test_prepare_environment(self, docker_config, mock_sammy_files, mock_subprocess_docker, mock_docker_command): + """Should prepare environment successfully.""" + _ = mock_docker_command # implicitly used via fixture + _ = mock_subprocess_docker # implicitly used via fixture + runner = DockerSammyRunner(docker_config) + files = SammyFiles(**mock_sammy_files) + + runner.prepare_environment(files) + assert docker_config.output_dir.exists() + + def test_prepare_environment_missing_docker(self, docker_config, mock_sammy_files, monkeypatch): + """Should raise error when docker is not available.""" + + def mock_which(cmd): + _ = cmd # Unused + return None + + monkeypatch.setattr("shutil.which", mock_which) + + runner = DockerSammyRunner(docker_config) + files = SammyFiles(**mock_sammy_files) + + with pytest.raises(EnvironmentPreparationError) as exc: + runner.prepare_environment(files) + assert "Docker not found" in str(exc.value) + + def test_execute_sammy_success(self, docker_config, mock_sammy_files, mock_subprocess_docker, mock_docker_command): + """Should execute SAMMY successfully in container.""" + _ = mock_docker_command # implicitly used via fixture + _ = mock_subprocess_docker # implicitly used via fixture + runner = DockerSammyRunner(docker_config) + files = SammyFiles(**mock_sammy_files) + + runner.prepare_environment(files) + result = runner.execute_sammy(files) + + assert result.success + assert "Normal finish to SAMMY" in result.console_output + assert result.error_message is None + + def test_execute_sammy_failure( + self, docker_config, mock_sammy_files, mock_subprocess_docker_fail, mock_docker_command + ): + """Should handle SAMMY execution failure in container.""" + _ = mock_docker_command # implicitly used via fixture + _ = mock_subprocess_docker_fail # implicitly used via fixture + runner = DockerSammyRunner(docker_config) + files = SammyFiles(**mock_sammy_files) + + runner.prepare_environment(files) + result = runner.execute_sammy(files) + + assert not result.success + assert "Docker execution failed" in result.error_message + + def test_collect_outputs( + self, docker_config, mock_sammy_files, mock_subprocess_docker, mock_docker_command, mock_sammy_results + ): + """Should collect output files from container.""" + _ = mock_docker_command # implicitly used via fixture + _ = mock_subprocess_docker # implicitly used via fixture + _ = mock_sammy_results # implicitly used via fixture + runner = DockerSammyRunner(docker_config) + files = SammyFiles(**mock_sammy_files) + + runner.prepare_environment(files) + result = runner.execute_sammy(files) + runner.collect_outputs(result) + + assert (docker_config.output_dir / "SAMMY.LPT").exists() + assert (docker_config.output_dir / "SAMMY.PAR").exists() + + def test_cleanup(self, docker_config, mock_sammy_files, mock_subprocess_docker, mock_docker_command): + """Should perform cleanup successfully.""" + _ = mock_docker_command # implicitly used via fixture + _ = mock_subprocess_docker # implicitly used via fixture + runner = DockerSammyRunner(docker_config) + files = SammyFiles(**mock_sammy_files) + + runner.prepare_environment(files) + result = runner.execute_sammy(files) + runner.collect_outputs(result) + runner.cleanup() + + +if __name__ == "__main__": + pytest.main(["-v", __file__]) diff --git a/tests/unit/pleiades/sammy/backends/test_local.py b/tests/unit/pleiades/sammy/backends/test_local.py new file mode 100644 index 0000000..e1845e4 --- /dev/null +++ b/tests/unit/pleiades/sammy/backends/test_local.py @@ -0,0 +1,179 @@ +#!/usr/bin/env python +"""Unit tests for local SAMMY backend.""" + +import subprocess +from pathlib import Path + +import pytest + +from pleiades.sammy.backends.local import LocalSammyRunner +from pleiades.sammy.config import LocalSammyConfig +from pleiades.sammy.interface import EnvironmentPreparationError, SammyExecutionError, SammyFiles + + +@pytest.fixture +def mock_sammy_executable(monkeypatch): + """Mock shutil.which to simulate SAMMY being available.""" + + def mock_which(cmd): + if cmd == "sammy": + return "sammy" + return None + + monkeypatch.setattr("shutil.which", mock_which) + return mock_which + + +@pytest.fixture +def local_config(temp_working_dir, mock_sammy_executable): + """Create local SAMMY configuration.""" + _ = mock_sammy_executable # make pre-commit happy + local_sammy_config = LocalSammyConfig( + working_dir=temp_working_dir, + output_dir=temp_working_dir / "output", + sammy_executable=Path("sammy"), + shell_path=Path("/bin/bash"), + ) + # call validate to ensure directories are created + local_sammy_config.validate() + return local_sammy_config + + +@pytest.fixture +def mock_subprocess_run(monkeypatch, mock_sammy_output): + """Mock subprocess.run to avoid actual SAMMY execution.""" + + def mock_run(*args, **kwargs): + _ = kwargs + result = subprocess.CompletedProcess(args=args, returncode=0, stdout=mock_sammy_output, stderr="") + return result + + monkeypatch.setattr(subprocess, "run", mock_run) + return mock_run + + +@pytest.fixture +def mock_subprocess_fail(monkeypatch, mock_sammy_error_output): + """Mock subprocess.run to simulate SAMMY failure.""" + + def mock_run(*args, **kwargs): + _ = kwargs + result = subprocess.CompletedProcess( + args=args, + returncode=1, + stdout="", + stderr=mock_sammy_error_output, + ) + return result + + monkeypatch.setattr(subprocess, "run", mock_run) + return mock_run + + +class TestLocalSammyRunner: + """Tests for LocalSammyRunner.""" + + def test_initialization(self, local_config): + """Should initialize with valid config.""" + runner = LocalSammyRunner(local_config) + assert runner.config == local_config + assert runner.validate_config() + + def test_prepare_environment(self, local_config, mock_sammy_files): + """Should prepare environment successfully.""" + runner = LocalSammyRunner(local_config) + files = SammyFiles(**mock_sammy_files) + + runner.prepare_environment(files) + assert local_config.output_dir.exists() + + def test_prepare_environment_invalid_files(self, local_config, tmp_path): + """Should raise error with invalid files.""" + runner = LocalSammyRunner(local_config) + files = SammyFiles( + input_file=tmp_path / "nonexistent.inp", + parameter_file=tmp_path / "nonexistent.par", + data_file=tmp_path / "nonexistent.dat", + ) + + with pytest.raises(EnvironmentPreparationError): + runner.prepare_environment(files) + + def test_execute_sammy_success(self, local_config, mock_sammy_files, mock_subprocess_run): + """Should execute SAMMY successfully.""" + _ = mock_subprocess_run # make pre-commit happy + runner = LocalSammyRunner(local_config) + files = SammyFiles(**mock_sammy_files) + + # mock_subprocess_run is used implicitly via the fixture's monkeypatch + runner.prepare_environment(files) + result = runner.execute_sammy(files) + + assert result.success + assert "Normal finish to SAMMY" in result.console_output + assert result.error_message is None + + def test_execute_sammy_failure(self, local_config, mock_sammy_files, mock_subprocess_fail): + """Should handle SAMMY execution failure.""" + _ = mock_subprocess_fail # make pre-commit happy + runner = LocalSammyRunner(local_config) + files = SammyFiles(**mock_sammy_files) + + # mock_subprocess_fail is used implicitly via the fixture's monkeypatch + runner.prepare_environment(files) + result = runner.execute_sammy(files) + + assert not result.success + assert "SAMMY execution failed" in result.error_message + + def test_execute_sammy_crash(self, local_config, mock_sammy_files, monkeypatch): + """Should handle subprocess crash.""" + + def mock_run(*args, **kwargs): + _ = args + _ = kwargs + raise subprocess.SubprocessError("Mock crash") + + monkeypatch.setattr(subprocess, "run", mock_run) + + runner = LocalSammyRunner(local_config) + files = SammyFiles(**mock_sammy_files) + + runner.prepare_environment(files) + with pytest.raises(SammyExecutionError) as exc: + runner.execute_sammy(files) + assert "Mock crash" in str(exc.value) + + def test_collect_outputs(self, local_config, mock_sammy_files, mock_subprocess_run, mock_sammy_results): + """Should collect output files.""" + _ = mock_subprocess_run # make pre-commit happy + _ = mock_sammy_results # make pre-commit happy + runner = LocalSammyRunner(local_config) + files = SammyFiles(**mock_sammy_files) + + # Execute SAMMY to create outputs + runner.prepare_environment(files) + result = runner.execute_sammy(files) + + # Collect outputs + runner.collect_outputs(result) + + # Check output files were moved + assert (local_config.output_dir / "SAMMY.LPT").exists() + assert (local_config.output_dir / "SAMMY.PAR").exists() + + def test_cleanup(self, local_config, mock_sammy_files, mock_subprocess_run, mock_sammy_results): + """Should perform cleanup successfully.""" + _ = mock_subprocess_run # make pre-commit happy + _ = mock_sammy_results # make pre-commit happy + runner = LocalSammyRunner(local_config) + files = SammyFiles(**mock_sammy_files) + + runner.prepare_environment(files) + result = runner.execute_sammy(files) + runner.collect_outputs(result) + runner.cleanup() + + +if __name__ == "__main__": + pytest.main(["-v", __file__]) diff --git a/tests/unit/pleiades/sammy/backends/test_nova.py b/tests/unit/pleiades/sammy/backends/test_nova.py new file mode 100644 index 0000000..f8835be --- /dev/null +++ b/tests/unit/pleiades/sammy/backends/test_nova.py @@ -0,0 +1,165 @@ +#!/usr/bin/env python +"""Unit tests for NOVA SAMMY backend implementation.""" + +import os +from datetime import datetime +from unittest import mock + +import pytest + +from pleiades.sammy.backends.nova_ornl import NovaSammyRunner +from pleiades.sammy.config import NovaSammyConfig +from pleiades.sammy.interface import SammyFiles + +# Mock environment variables +os.environ["NOVA_URL"] = "https://mock_nova_url" +os.environ["NOVA_API_KEY"] = "mock_api_key" + + +@pytest.fixture +def nova_config(temp_working_dir): + """Create NOVA SAMMY configuration.""" + config = NovaSammyConfig( + url=os.environ["NOVA_URL"], + api_key=os.environ["NOVA_API_KEY"], + working_dir=temp_working_dir, + output_dir=temp_working_dir / "output", + ) + config.validate() + return config + + +@pytest.fixture +def mock_nova_connection(): + """Mock the NovaConnection object.""" + with mock.patch("pleiades.sammy.backends.nova_ornl.NovaConnection") as mock_connection: + yield mock_connection.return_value + + +@pytest.fixture +def mock_tool(): + """Mock the Tool object.""" + with mock.patch("pleiades.sammy.backends.nova_ornl.Tool") as mock_tool: + yield mock_tool.return_value + + +@pytest.fixture +def mock_nova(mock_nova_connection, mock_tool): + """Mock the Nova object.""" + with mock.patch("pleiades.sammy.backends.nova_ornl.Nova") as mock_nova: + instance = mock_nova.return_value + instance.connect.return_value.__enter__.return_value = mock_nova_connection + instance.connect.return_value.__enter__.return_value.tool = mock_tool + yield instance + + +@pytest.fixture +def mock_zipfile(monkeypatch): + """Mock the zipfile module.""" + mock_zip_ref = mock.MagicMock() + mock_zip_ref.filelist = ["SAMMY.LPT", "SAMMY.PAR"] + mock_zipfile_class = mock.MagicMock(return_value=mock_zip_ref) + monkeypatch.setattr("pleiades.sammy.backends.nova_ornl.zipfile.ZipFile", mock_zipfile_class) + return mock_zipfile_class + + +class TestNovaSammyRunner: + """Tests for NovaSammyRunner.""" + + def test_initialization(self, nova_config, mock_nova): + """Should initialize with valid config.""" + _ = mock_nova # make pre-commit happy + runner = NovaSammyRunner(nova_config) + assert runner.config == nova_config + + def test_prepare_environment(self, nova_config, mock_sammy_files, mock_nova): + """Should prepare environment successfully.""" + _ = mock_nova # make pre-commit happy + runner = NovaSammyRunner(nova_config) + files = SammyFiles(**mock_sammy_files) + + runner.prepare_environment(files) + assert nova_config.output_dir.exists() + + def test_execute_sammy_success(self, nova_config, mock_sammy_files, mock_nova, mock_zipfile): + """Should execute SAMMY successfully.""" + _ = mock_zipfile # make pre-commit happy + runner = NovaSammyRunner(nova_config) + files = SammyFiles(**mock_sammy_files) + + # Mock the tool run method + mock_nova.connect.return_value.__enter__.return_value.tool.run.return_value = mock.MagicMock( + get_dataset=lambda _: mock.MagicMock(get_content=lambda: " Normal finish to SAMMY"), + get_collection=lambda _: mock.MagicMock(download=lambda _: None), + ) + + runner.prepare_environment(files) + result = runner.execute_sammy(files) + + assert result.success + assert "Normal finish to SAMMY" in result.console_output + assert result.error_message is None + + def test_execute_sammy_failure(self, nova_config, mock_sammy_files, mock_nova, monkeypatch): + """Should handle SAMMY execution failure.""" + _ = mock_nova # make pre-commit happy + runner = NovaSammyRunner(nova_config) + files = SammyFiles(**mock_sammy_files) + + # Mock the execute_sammy method to simulate failure + monkeypatch.setattr( + runner, + "execute_sammy", + lambda _: mock.MagicMock( + success=False, + execution_id="test", + start_time=datetime.now(), + end_time=datetime.now(), + console_output="SAMMY execution failed", + error_message="Forced failure", + ), + ) + + runner.prepare_environment(files) + result = runner.execute_sammy(files) + + assert not result.success + assert "Forced failure" in result.error_message + + def test_collect_outputs(self, nova_config, mock_sammy_files, mock_nova, mock_zipfile): + """Should collect output files.""" + _ = mock_zipfile # make pre-commit happy + runner = NovaSammyRunner(nova_config) + files = SammyFiles(**mock_sammy_files) + + # Mock the tool run method + mock_nova.connect.return_value.__enter__.return_value.tool.run.return_value = mock.MagicMock( + get_dataset=lambda _: mock.MagicMock(get_content=lambda: "Normal finish to SAMMY"), + get_collection=lambda _: mock.MagicMock(download=lambda _: None), + ) + + runner.prepare_environment(files) + result = runner.execute_sammy(files) + + # Create mock output files + output_dir = nova_config.output_dir + (output_dir / "SAMMY.LPT").touch() + (output_dir / "SAMMY.PAR").touch() + + runner.collect_outputs(result) + + assert (output_dir / "SAMMY.LPT").exists() + assert (output_dir / "SAMMY.PAR").exists() + + def test_cleanup(self, nova_config, mock_sammy_files, mock_nova): + """Should perform cleanup successfully.""" + _ = mock_nova # make pre-commit happy + runner = NovaSammyRunner(nova_config) + files = SammyFiles(**mock_sammy_files) + + runner.prepare_environment(files) + runner.cleanup() + + +if __name__ == "__main__": + pytest.main(["-v", __file__]) diff --git a/tests/unit/pleiades/sammy/parameters/test_broadening.py b/tests/unit/pleiades/sammy/parameters/test_broadening.py new file mode 100644 index 0000000..b223720 --- /dev/null +++ b/tests/unit/pleiades/sammy/parameters/test_broadening.py @@ -0,0 +1,163 @@ +#!/usr/bin/env python +"""Unit tests for card 04::broadening parameters.""" + +import pytest + +from pleiades.sammy.parameters.broadening import BroadeningParameterCard, BroadeningParameters +from pleiades.sammy.parameters.helper import VaryFlag + +# Test data with proper 10-char width formatting +MAIN_ONLY_LINE = "1.234E+00 2.980E+02 1.500E-01 2.500E-02 1.000E+00 5.000E-01 1 0 1 0 1 0" + +WITH_UNC_LINES = [ + "1.234E+00 2.980E+02 1.500E-01 2.500E-02 1.000E+00 5.000E-01 1 0 1 0 1 0", + "1.000E-02 1.000E+00 1.000E-03 1.000E-03 1.000E-02 1.000E-02", +] + +FULL_LINES = [ + "1.234E+00 2.980E+02 1.500E-01 2.500E-02 1.000E+00 5.000E-01 1 0 1 0 1 0", + "1.000E-02 1.000E+00 1.000E-03 1.000E-03 1.000E-02 1.000E-02", + "1.000E-01 2.000E-02 1 1", + "5.000E-03 1.000E-03", +] + +COMPLETE_CARD = [ + "BROADening parameters may be varied", + "1.234E+00 2.980E+02 1.500E-01 2.500E-02 1.000E+00 5.000E-01 1 0 1 0 1 0", + "1.000E-02 1.000E+00 1.000E-03 1.000E-03 1.000E-02 1.000E-02", + "1.000E-01 2.000E-02 1 1", + "5.000E-03 1.000E-03", + "", +] + + +def test_main_parameters_parsing(): + """Test parsing of main parameters only.""" + params = BroadeningParameters.from_lines([MAIN_ONLY_LINE]) + + # Check values + assert params.crfn == pytest.approx(1.234) + assert params.temp == pytest.approx(298.0) + assert params.thick == pytest.approx(0.15) + assert params.deltal == pytest.approx(0.025) + assert params.deltag == pytest.approx(1.0) + assert params.deltae == pytest.approx(0.5) + + # Check flags + assert params.flag_crfn == VaryFlag.YES + assert params.flag_temp == VaryFlag.NO + assert params.flag_thick == VaryFlag.YES + assert params.flag_deltal == VaryFlag.NO + assert params.flag_deltag == VaryFlag.YES + assert params.flag_deltae == VaryFlag.NO + + # Check optional fields are None + assert params.deltc1 is None + assert params.deltc2 is None + assert params.d_crfn is None + assert params.d_temp is None + + +def test_parameters_with_uncertainties(): + """Test parsing of parameters with uncertainties.""" + params = BroadeningParameters.from_lines(WITH_UNC_LINES) + + # Check main values + assert params.crfn == pytest.approx(1.234) + assert params.temp == pytest.approx(298.0) + + # Check uncertainties + assert params.d_crfn == pytest.approx(0.01) + assert params.d_temp == pytest.approx(1.0) + assert params.d_thick == pytest.approx(0.001) + assert params.d_deltal == pytest.approx(0.001) + assert params.d_deltag == pytest.approx(0.01) + assert params.d_deltae == pytest.approx(0.01) + + +def test_full_parameters(): + """Test parsing of full parameter set including Gaussian parameters.""" + params = BroadeningParameters.from_lines(FULL_LINES) + + # Check Gaussian parameters + assert params.deltc1 == pytest.approx(0.1) + assert params.deltc2 == pytest.approx(0.02) + assert params.d_deltc1 == pytest.approx(0.005) + assert params.d_deltc2 == pytest.approx(0.001) + assert params.flag_deltc1 == VaryFlag.YES + assert params.flag_deltc2 == VaryFlag.YES + + +def test_format_compliance(): + """Test that output lines comply with fixed-width format.""" + params = BroadeningParameters.from_lines(FULL_LINES) + output_lines = params.to_lines() + + print(output_lines) + + # Check first line field widths + first_line = output_lines[0] + assert len(first_line[:10].rstrip()) == 9 # 9 chars + 1 space + assert len(first_line[10:20].rstrip()) == 9 + assert len(first_line[20:30].rstrip()) == 9 + assert len(first_line[30:40].rstrip()) == 9 + assert len(first_line[40:50].rstrip()) == 9 + assert len(first_line[50:60].rstrip()) == 9 + + +def test_complete_card(): + """Test parsing and formatting of complete card including header.""" + card = BroadeningParameterCard.from_lines(COMPLETE_CARD) + output_lines = card.to_lines() + + # Check header + assert output_lines[0].startswith("BROAD") + + # Check number of lines + assert len(output_lines) == 6 # Header + 4 data lines + blank + + # Check last line is blank + assert output_lines[-1].strip() == "" + + +def test_invalid_header(): + """Test error handling for invalid header.""" + bad_lines = ["WRONG header", MAIN_ONLY_LINE] + with pytest.raises(ValueError, match="Invalid header"): + BroadeningParameterCard.from_lines(bad_lines) + + +def test_missing_gaussian_parameter(): + """Test error handling for incomplete Gaussian parameters.""" + bad_lines = [ + MAIN_ONLY_LINE, + "1.000E-02 1.000E+00 1.000E-03 1.000E-03 1.000E-02 1.000E-02", + "1.000E-01 1", # Missing DELTC2 + ] + with pytest.raises(ValueError, match="Both DELTC1 and DELTC2 must be present"): + BroadeningParameters.from_lines(bad_lines) + + +def test_empty_input(): + """Test error handling for empty input.""" + with pytest.raises(ValueError, match="No valid parameter line provided"): + BroadeningParameters.from_lines([]) + + +def test_roundtrip(): + """Test that parsing and then formatting produces identical output.""" + card = BroadeningParameterCard.from_lines(COMPLETE_CARD) + output_lines = card.to_lines() + + # Parse the output again + reparsed_card = BroadeningParameterCard.from_lines(output_lines) + + # Compare all attributes + assert card.parameters.crfn == reparsed_card.parameters.crfn + assert card.parameters.temp == reparsed_card.parameters.temp + assert card.parameters.deltc1 == reparsed_card.parameters.deltc1 + assert card.parameters.flag_crfn == reparsed_card.parameters.flag_crfn + + +if __name__ == "__main__": + pytest.main(["-v", __file__]) diff --git a/tests/unit/pleiades/sammy/parameters/test_external_r.py b/tests/unit/pleiades/sammy/parameters/test_external_r.py new file mode 100644 index 0000000..37e8d86 --- /dev/null +++ b/tests/unit/pleiades/sammy/parameters/test_external_r.py @@ -0,0 +1,187 @@ +#!/usr/bin/env python +"""Unit tests for SAMMY external R-function parameters.""" + +import pytest + +from pleiades.sammy.parameters.external_r import ExternalREntry, ExternalRFormat, ExternalRFunction, VaryFlag + +# Sample test data +FORMAT3_LINES = [ + "EXTERnal R-function parameters follow", + " 1 2 1.2340E+00 5.6780E+00 1.2300E-01 4.5600E-01 7.8900E-01 1 0 0 1 0", + " 2 1 2.3450E+00 6.7890E+00 2.3400E-01 5.6700E-01 8.9000E-01 0 1 0 0 1", + "", +] + +FORMAT3A_LINES = [ + "R-EXTernal parameters follow", + " 1210010001.2340E+005.6780E+001.2300E-014.5600E-017.8900E-018.9000E-019.0000E-01", + " 2120100102.3450E+006.7890E+002.3400E-015.6700E-018.9000E-019.1000E-019.2000E-01", + "", +] + + +# Test ExternalREntry +class TestExternalREntry: + def test_format3_parsing(self): + """Test parsing of Format 3 entries""" + line = " 1 2 1.2340E+00 5.6780E+00 1.2300E-01 4.5600E-01 7.8900E-01 1 0 0 1 0" + entry = ExternalREntry.from_str(line, ExternalRFormat.FORMAT_3) + + assert entry.spin_group == 1 + assert entry.channel == 2 + assert entry.E_down == pytest.approx(1.2340) + assert entry.E_up == pytest.approx(5.6780) + assert entry.R_con == pytest.approx(0.1230) + assert entry.R_lin == pytest.approx(0.4560) + assert entry.s_alpha == pytest.approx(0.7890) + assert entry.vary_E_down == VaryFlag.YES + assert entry.vary_E_up == VaryFlag.NO + assert entry.vary_R_con == VaryFlag.NO + assert entry.vary_R_lin == VaryFlag.YES + assert entry.vary_s_alpha == VaryFlag.NO + + def test_format3a_parsing(self): + """Test parsing of Format 3A entries""" + line = " 1210010001.2340E+005.6780E+001.2300E-014.5600E-017.8900E-018.9000E-019.0000E-01" + for i, char in enumerate(line): + print(f"{i+1:2d}: {char}") + entry = ExternalREntry.from_str(line, ExternalRFormat.FORMAT_3A) + + assert entry.spin_group == 1 + assert entry.channel == 2 + assert entry.E_down == pytest.approx(1.2340) + assert entry.E_up == pytest.approx(5.6780) + assert entry.R_con == pytest.approx(0.1230) + assert entry.R_lin == pytest.approx(0.4560) + assert entry.s_con == pytest.approx(0.7890) + assert entry.s_lin == pytest.approx(0.8900) + assert entry.R_q == pytest.approx(0.9000) + assert entry.vary_E_down == VaryFlag.YES + assert entry.vary_E_up == VaryFlag.NO + assert entry.vary_R_con == VaryFlag.NO + assert entry.vary_R_lin == VaryFlag.YES + assert entry.vary_s_con == VaryFlag.NO + assert entry.vary_s_lin == VaryFlag.NO + assert entry.vary_R_q == VaryFlag.NO + + def test_empty_line(self): + """Test handling of empty lines""" + with pytest.raises(ValueError, match="Empty line provided"): + ExternalREntry.from_str("", ExternalRFormat.FORMAT_3) + + def test_negative_s_alpha(self): + """Test validation of negative s_alpha value""" + line = " 1 2 1.2340E+00 5.6780E+00 1.2300E-01 4.5600E-01 -7.8900E-01 1 0 0 1 0" + with pytest.raises(ValueError, match=".*greater than or equal to 0.*"): + ExternalREntry.from_str(line, ExternalRFormat.FORMAT_3) + + def test_format_specific_fields(self): + """Test validation of format-specific fields""" + # Test Format 3 with Format 3A fields + with pytest.raises(ValueError, match="Format 3a specific fields should not be set for Format 3"): + ExternalREntry( + format_type=ExternalRFormat.FORMAT_3, + spin_group=1, + channel=2, + E_down=1.234, + E_up=5.678, + R_con=0.123, + R_lin=0.456, + s_alpha=0.789, + s_con=0.890, # This should cause an error + ) + + # Test Format 3A with Format 3 fields + with pytest.raises(ValueError, match="Format 3 specific fields should not be set for Format 3a"): + ExternalREntry( + format_type=ExternalRFormat.FORMAT_3A, + spin_group=1, + channel=2, + E_down=1.234, + E_up=5.678, + R_con=0.123, + R_lin=0.456, + s_con=0.789, + s_lin=0.890, + R_q=0.901, + s_alpha=0.789, # This should cause an error + ) + + +# Test ExternalRFunction +class TestExternalRFunction: + def test_format3_parsing(self): + """Test parsing of complete Format 3 card set""" + r_function = ExternalRFunction.from_lines(FORMAT3_LINES) + assert r_function.format_type == ExternalRFormat.FORMAT_3 + assert len(r_function.entries) == 2 + + # Test first entry + entry1 = r_function.entries[0] + assert entry1.spin_group == 1 + assert entry1.channel == 2 + + # Test second entry + entry2 = r_function.entries[1] + assert entry2.spin_group == 2 + assert entry2.channel == 1 + + def test_format3a_parsing(self): + """Test parsing of complete Format 3A card set""" + r_function = ExternalRFunction.from_lines(FORMAT3A_LINES) + assert r_function.format_type == ExternalRFormat.FORMAT_3A + assert len(r_function.entries) == 2 + + def test_invalid_header(self): + """Test handling of invalid header""" + bad_lines = ["WRONG header line", " 1 2 1.2340E+00 5.6780E+00 1.2300E-01 4.5600E-01 7.8900E-01 1 0 0 1 0", ""] + with pytest.raises(ValueError, match="Invalid header line"): + ExternalRFunction.from_lines(bad_lines) + + def test_empty_lines(self): + """Test handling of empty input""" + with pytest.raises(ValueError, match="No lines provided"): + ExternalRFunction.from_lines([]) + + def test_roundtrip_format3(self): + """Test that to_lines() output can be parsed back correctly for Format 3""" + original = ExternalRFunction.from_lines(FORMAT3_LINES) + roundtrip = ExternalRFunction.from_lines(original.to_lines()) + + assert len(original.entries) == len(roundtrip.entries) + for orig_entry, rt_entry in zip(original.entries, roundtrip.entries): + assert orig_entry.spin_group == rt_entry.spin_group + assert orig_entry.channel == rt_entry.channel + assert orig_entry.E_down == pytest.approx(rt_entry.E_down) + assert orig_entry.E_up == pytest.approx(rt_entry.E_up) + assert orig_entry.R_con == pytest.approx(rt_entry.R_con) + assert orig_entry.R_lin == pytest.approx(rt_entry.R_lin) + assert orig_entry.s_alpha == pytest.approx(rt_entry.s_alpha) + + def test_roundtrip_format3a(self): + """Test that to_lines() output can be parsed back correctly for Format 3A""" + original = ExternalRFunction.from_lines(FORMAT3A_LINES) + roundtrip = ExternalRFunction.from_lines(original.to_lines()) + + assert len(original.entries) == len(roundtrip.entries) + for orig_entry, rt_entry in zip(original.entries, roundtrip.entries): + assert orig_entry.spin_group == rt_entry.spin_group + assert orig_entry.channel == rt_entry.channel + assert orig_entry.E_down == pytest.approx(rt_entry.E_down) + assert orig_entry.E_up == pytest.approx(rt_entry.E_up) + assert orig_entry.R_con == pytest.approx(rt_entry.R_con) + assert orig_entry.R_lin == pytest.approx(rt_entry.R_lin) + assert orig_entry.s_con == pytest.approx(rt_entry.s_con) + assert orig_entry.s_lin == pytest.approx(rt_entry.s_lin) + assert orig_entry.R_q == pytest.approx(rt_entry.R_q) + + def test_header_detection(self): + """Test header line detection""" + assert ExternalRFunction.is_header_line("EXTERnal R-function parameters follow") == ExternalRFormat.FORMAT_3 + assert ExternalRFunction.is_header_line("R-EXTernal parameters follow") == ExternalRFormat.FORMAT_3A + assert ExternalRFunction.is_header_line("Invalid header") is None + + +if __name__ == "__main__": + pytest.main(["-v", __file__]) diff --git a/tests/unit/pleiades/sammy/parameters/test_normalization.py b/tests/unit/pleiades/sammy/parameters/test_normalization.py new file mode 100644 index 0000000..1c9a8ff --- /dev/null +++ b/tests/unit/pleiades/sammy/parameters/test_normalization.py @@ -0,0 +1,146 @@ +#!/usr/bin/env python +"""Unit tests for card 06::normalization and background parameters.""" + +import pytest + +from pleiades.sammy.parameters.helper import VaryFlag +from pleiades.sammy.parameters.normalization import NormalizationBackgroundCard, NormalizationParameters + +# Test data with proper 10-char width formatting +MAIN_ONLY_LINE = "1.000E+00 2.000E-02 3.000E-03 4.000E-04 5.000E-05 6.000E-06 1 0 1 0 1 0" + +WITH_UNC_LINES = [ + "1.000E+00 2.000E-02 3.000E-03 4.000E-04 5.000E-05 6.000E-06 1 0 1 0 1 0", + "1.000E-02 2.000E-03 3.000E-04 4.000E-05 5.000E-06 6.000E-07", +] + +COMPLETE_CARD = [ + "NORMAlization and background are next", + "1.000E+00 2.000E-02 3.000E-03 4.000E-04 5.000E-05 6.000E-06 1 0 1 0 1 0", + "1.000E-02 2.000E-03 3.000E-04 4.000E-05 5.000E-06 6.000E-07", + "2.000E+00 3.000E-02 4.000E-03 5.000E-04 6.000E-05 7.000E-06 0 1 0 1 0 1", + "", +] + + +def test_main_parameters_parsing(): + """Test parsing of main parameters only.""" + params = NormalizationParameters.from_lines([MAIN_ONLY_LINE]) + + # Check values + assert params.anorm == pytest.approx(1.0) + assert params.backa == pytest.approx(0.02) + assert params.backb == pytest.approx(0.003) + assert params.backc == pytest.approx(0.0004) + assert params.backd == pytest.approx(0.00005) + assert params.backf == pytest.approx(0.000006) + + # Check flags + assert params.flag_anorm == VaryFlag.YES + assert params.flag_backa == VaryFlag.NO + assert params.flag_backb == VaryFlag.YES + assert params.flag_backc == VaryFlag.NO + assert params.flag_backd == VaryFlag.YES + assert params.flag_backf == VaryFlag.NO + + # Check optional uncertainties are None + assert params.d_anorm is None + assert params.d_backa is None + assert params.d_backb is None + + +def test_parameters_with_uncertainties(): + """Test parsing of parameters with uncertainties.""" + params = NormalizationParameters.from_lines(WITH_UNC_LINES) + + # Check main values + assert params.anorm == pytest.approx(1.0) + assert params.backa == pytest.approx(0.02) + + # Check uncertainties + assert params.d_anorm == pytest.approx(0.01) + assert params.d_backa == pytest.approx(0.002) + assert params.d_backb == pytest.approx(0.0003) + assert params.d_backc == pytest.approx(0.00004) + assert params.d_backd == pytest.approx(0.000005) + assert params.d_backf == pytest.approx(0.0000006) + + +def test_format_compliance(): + """Test that output lines comply with fixed-width format.""" + params = NormalizationParameters.from_lines(WITH_UNC_LINES) + output_lines = params.to_lines() + + # Check first line field widths + first_line = output_lines[0] + assert len(first_line[:10].rstrip()) == 9 # 9 chars + 1 space + assert len(first_line[10:20].rstrip()) == 9 + assert len(first_line[20:30].rstrip()) == 9 + assert len(first_line[30:40].rstrip()) == 9 + assert len(first_line[40:50].rstrip()) == 9 + assert len(first_line[50:60].rstrip()) == 9 + + +def test_complete_card(): + """Test parsing and formatting of complete card including header.""" + card = NormalizationBackgroundCard.from_lines(COMPLETE_CARD) + output_lines = card.to_lines() + + # Check header + assert output_lines[0].startswith("NORMA") + + # Check number of lines + assert len(output_lines) == 5 # Header + 3 data lines + blank + + # Check number of angle sets + assert len(card.angle_sets) == 2 + + # Check last line is blank + assert output_lines[-1].strip() == "" + + +def test_multiple_angle_sets(): + """Test parsing of multiple angle sets.""" + card = NormalizationBackgroundCard.from_lines(COMPLETE_CARD) + + # Check first angle set + assert card.angle_sets[0].anorm == pytest.approx(1.0) + assert card.angle_sets[0].d_anorm == pytest.approx(0.01) + + # Check second angle set + assert card.angle_sets[1].anorm == pytest.approx(2.0) + assert card.angle_sets[1].flag_backa == VaryFlag.YES + + +def test_invalid_header(): + """Test error handling for invalid header.""" + bad_lines = ["WRONG header", MAIN_ONLY_LINE] + with pytest.raises(ValueError, match="Invalid header"): + NormalizationBackgroundCard.from_lines(bad_lines) + + +def test_empty_input(): + """Test error handling for empty input.""" + with pytest.raises(ValueError, match="No valid parameter line provided"): + NormalizationParameters.from_lines([]) + + +def test_roundtrip(): + """Test that parsing and then formatting produces identical output.""" + card = NormalizationBackgroundCard.from_lines(COMPLETE_CARD) + output_lines = card.to_lines() + + # Parse the output again + reparsed_card = NormalizationBackgroundCard.from_lines(output_lines) + + # Compare attributes of first angle set + first_set = card.angle_sets[0] + reparsed_first_set = reparsed_card.angle_sets[0] + assert first_set.anorm == reparsed_first_set.anorm + assert first_set.backa == reparsed_first_set.backa + assert first_set.flag_anorm == reparsed_first_set.flag_anorm + assert first_set.d_anorm == reparsed_first_set.d_anorm + + +if __name__ == "__main__": + pytest.main(["-v", __file__]) diff --git a/tests/unit/pleiades/sammy/parameters/test_radius.py b/tests/unit/pleiades/sammy/parameters/test_radius.py new file mode 100644 index 0000000..f25ab85 --- /dev/null +++ b/tests/unit/pleiades/sammy/parameters/test_radius.py @@ -0,0 +1,407 @@ +#!/usr/bin/env python +"""Unit tests for card 07::radius.""" + +import pytest + +from pleiades.sammy.parameters.radius import RadiusCard, RadiusFormat, VaryFlag + + +def create_fixed_width_line(pareff: float, partru: float, ichan: int, ifleff: int, ifltru: int, spin_groups: list[int]) -> str: + """Create properly formatted fixed-width line.""" + # Format floating point numbers with proper width + pareff_str = f"{pareff:10.3f}" + partru_str = f"{partru:10.3f}" + + # Format integers + ichan_str = f"{ichan:1d}" + ifleff_str = f"{ifleff:1d}" + ifltru_str = f"{ifltru:2d}" + + # Format spin groups (2 columns each) + spin_groups_str = "".join(f"{g:2d}" for g in spin_groups) + + return f"{pareff_str}{partru_str}{ichan_str}{ifleff_str}{ifltru_str}{spin_groups_str}" + + +def create_alternate_fixed_width_line(pareff: float, partru: float, ichan: int, ifleff: int, ifltru: int, spin_groups: list[int]) -> str: + """Create properly formatted fixed-width line for alternate format (>=99 spin groups). + + Args: + pareff: Effective radius value + partru: True radius value + ichan: Channel mode (0 or 1) + ifleff: Flag for effective radius + ifltru: Flag for true radius + spin_groups: List of spin group numbers + + Returns: + str: Formatted line following alternate fixed-width format + """ + # Format floating point numbers (same as default format) + pareff_str = f"{pareff:10.3f}" # Cols 1-10 + partru_str = f"{partru:10.3f}" # Cols 11-20 + + # Format integers with 5-column width + ichan_str = f"{ichan:5d}" # Cols 21-25 + ifleff_str = f"{ifleff:5d}" # Cols 26-30 + ifltru_str = f"{ifltru:5d}" # Cols 31-35 + + # Format spin groups (5 columns each, starting at col 36) + spin_groups_str = "".join(f"{g:5d}" for g in spin_groups) + + return f"{pareff_str}{partru_str}{ichan_str}{ifleff_str}{ifltru_str}{spin_groups_str}" + + +def test_basic_fixed_width_format(): + """Test basic fixed-width format parsing with single line of spin groups.""" + + # Create input with proper fixed-width formatting + input_str = "RADIUs parameters follow\n" + create_fixed_width_line(3.200, 3.200, 0, 1, -1, [1, 2, 3]) + "\n" + print("\nTest input:") + print(input_str) + print("\nColumn positions for content line:") + content = input_str.splitlines()[1] + print("Cols 1-10 (PAREFF):", f"'{content[0:10]}'") + print("Cols 11-20 (PARTRU):", f"'{content[10:20]}'") + print("Col 21 (ICHAN):", f"'{content[20:21]}'") + print("Col 22 (IFLEFF):", f"'{content[21:22]}'") + print("Cols 23-24 (IFLTRU):", f"'{content[22:24]}'") + print("Cols 25-26 (Group1):", f"'{content[24:26]}'") + print("Cols 27-28 (Group2):", f"'{content[26:28]}'") + print("Cols 29-30 (Group3):", f"'{content[28:30]}'") + + # Parse the input + card = RadiusCard.from_lines(input_str.splitlines()) + + # Verify parsed values + assert card.parameters.effective_radius == pytest.approx(3.200) + assert card.parameters.true_radius == pytest.approx(3.200) + assert card.parameters.channel_mode == 0 + assert card.parameters.vary_effective == VaryFlag.YES # 1 + assert card.parameters.vary_true == VaryFlag.USE_FROM_PARFILE # -1 + assert card.parameters.spin_groups == [1, 2, 3] + assert card.parameters.channels is None # No channels specified when mode=0 + + # Test writing back to fixed-width format + output_lines = card.to_lines(radius_format=RadiusFormat.DEFAULT) + assert len(output_lines) == 3 # Header, content, blank line + assert output_lines[0].strip() == "RADIUs parameters follow" + + # Verify the formatted output matches input format + content_line = output_lines[1] + print(card) + print(content_line) + assert content_line[0:10].strip() == "3.2000E+00" # PAREFF + assert content_line[10:20].strip() == "3.2000E+00" # PARTRU + assert content_line[20:21] == "0" # ICHAN + assert content_line[21:22] == "1" # IFLEFF + assert content_line[22:24] == "-1" # IFLTRU + assert content_line[24:26] == " 1" # First spin group + assert content_line[26:28] == " 2" # Second spin group + assert content_line[28:30] == " 3" # Third spin group + + +def test_alternate_fixed_width_format(): + """Test alternate fixed-width format parsing (for >=99 spin groups).""" + + # Create test input with large spin group numbers + spin_groups = [101, 102, 103] # Using 3-digit group numbers + + input_str = "RADIUs parameters follow\n" + create_alternate_fixed_width_line(3.200, 3.200, 0, 1, -1, spin_groups) + "\n" + + print("\nTest input:") + print(input_str) + print("\nColumn positions for content line:") + content = input_str.splitlines()[1] + print("Cols 1-10 (PAREFF):", f"'{content[0:10]}'") + print("Cols 11-20 (PARTRU):", f"'{content[10:20]}'") + print("Cols 21-25 (ICHAN):", f"'{content[20:25]}'") + print("Cols 26-30 (IFLEFF):", f"'{content[25:30]}'") + print("Cols 31-35 (IFLTRU):", f"'{content[30:35]}'") + print("Cols 36-40 (Group1):", f"'{content[35:40]}'") + print("Cols 41-45 (Group2):", f"'{content[40:45]}'") + print("Cols 46-50 (Group3):", f"'{content[45:50]}'") + + # Parse the input + card = RadiusCard.from_lines(input_str.splitlines()) + + # Verify parsed values + assert card.parameters.effective_radius == pytest.approx(3.200) + assert card.parameters.true_radius == pytest.approx(3.200) + assert card.parameters.channel_mode == 0 + assert card.parameters.vary_effective == VaryFlag.YES # 1 + assert card.parameters.vary_true == VaryFlag.USE_FROM_PARFILE # -1 + assert card.parameters.spin_groups == [101, 102, 103] + assert card.parameters.channels is None # No channels specified when mode=0 + + # Test writing back to alternate format + output_lines = card.to_lines(radius_format=RadiusFormat.ALTERNATE) + assert len(output_lines) == 3 # Header, content, blank line + assert output_lines[0].strip() == "RADIUs parameters follow" + + # Verify the formatted output matches input format + content_line = output_lines[1] + print("\nGenerated output:") + print(content_line) + assert content_line[0:10].strip() == "3.2000E+00" # PAREFF + assert content_line[10:20].strip() == "3.2000E+00" # PARTRU + assert content_line[20:25] == " 0" # ICHAN (5 cols) + assert content_line[25:30] == " 1" # IFLEFF (5 cols) + assert content_line[30:35] == " -1" # IFLTRU (5 cols) + assert content_line[35:40] == " 101" # First spin group (5 cols) + assert content_line[40:45] == " 102" # Second spin group (5 cols) + assert content_line[45:50] == " 103" # Third spin group (5 cols) + + +def test_basic_radius_keyword_format(): + """Test basic keyword format parsing with single radius value.""" + + input_str = """RADII are in KEY-WORD format +Radius= 3.200 +Group= 1 +""" + print("\nTest input:") + print(input_str) + + # Parse the input + card = RadiusCard.from_lines(input_str.splitlines()) + + # Verify parsed values + assert card.parameters.effective_radius == pytest.approx(3.200) + assert card.parameters.true_radius == pytest.approx(3.200) # Should equal effective_radius + assert card.parameters.spin_groups == [1] + assert card.parameters.channels is None + + # Test writing back to keyword format + output_lines = card.to_lines(radius_format=RadiusFormat.KEYWORD) + print("\nGenerated output:") + print("\n".join(output_lines)) + + # Verify format and content + assert output_lines[0].strip() == "RADII are in KEY-WORD format" + assert any(line.startswith("Radius= 3.2") for line in output_lines) + assert any(line.startswith("Group= 1") for line in output_lines) + + +def test_separate_radii_keyword_format(): + """Test keyword format parsing with different effective/true radius values.""" + + input_str = """RADII are in KEY-WORD format +Radius= 3.200 3.400 +Flags= 1 3 +Group= 1 2 3 +""" + print("\nTest input:") + print(input_str) + + card = RadiusCard.from_lines(input_str.splitlines()) + + assert card.parameters.effective_radius == pytest.approx(3.200) + assert card.parameters.true_radius == pytest.approx(3.400) + assert card.parameters.vary_effective == VaryFlag.YES # 1 + assert card.parameters.vary_true == VaryFlag.PUP # 3 + assert card.parameters.spin_groups == [1, 2, 3] + + output_lines = card.to_lines(radius_format=RadiusFormat.KEYWORD) + print("\nGenerated output:") + print("\n".join(output_lines)) + + +def test_uncertainties_keyword_format(): + """Test keyword format parsing with uncertainty specifications.""" + + input_str = """RADII are in KEY-WORD format +Radius= 3.200 3.200 +Flags= 1 3 +Relative= 0.05 0.1 +Absolute= 0.002 0.003 +Group= 1 +""" + print("\nTest input:") + print(input_str) + + card = RadiusCard.from_lines(input_str.splitlines()) + + assert card.relative_uncertainty == pytest.approx(0.05) + assert card.absolute_uncertainty == pytest.approx(0.002) + + output_lines = card.to_lines(radius_format=RadiusFormat.KEYWORD) + print("\nGenerated output:") + print("\n".join(output_lines)) + + assert any(line.startswith("Relative= 0.05") for line in output_lines) + assert any(line.startswith("Absolute= 0.002") for line in output_lines) + + +def test_particle_pair_keyword_format(): + """Test keyword format parsing with particle pair and orbital momentum.""" + + input_str = """RADII are in KEY-WORD format +Radius= 3.200 3.200 +PP=n+16O L=all +Flags= 1 3 +""" + print("\nTest input:") + print(input_str) + + card = RadiusCard.from_lines(input_str.splitlines()) + + assert card.particle_pair == "n+16O" + assert card.orbital_momentum == ["all"] + + output_lines = card.to_lines(radius_format=RadiusFormat.KEYWORD) + print("\nGenerated output:") + print("\n".join(output_lines)) + + assert any(line.startswith("PP= n+16O") for line in output_lines) + assert any("L= all" in line for line in output_lines) + + +def test_groups_channels_keyword_format(): + """Test keyword format parsing with group and channel specifications.""" + + input_str = """RADII are in KEY-WORD format +Radius= 3.200 3.200 +Flags= 1 3 +Group= 1 Channels= 1 2 3 +""" + print("\nTest input:") + print(input_str) + + card = RadiusCard.from_lines(input_str.splitlines()) + + print(card) + + assert card.parameters.spin_groups == [1] + assert card.parameters.channels == [1, 2, 3] + assert card.parameters.channel_mode == 1 # Specific channels mode + + output_lines = card.to_lines(radius_format=RadiusFormat.KEYWORD) + print("\nGenerated output:") + print("\n".join(output_lines)) + + +def test_invalid_keyword_format(): + """Test error handling for invalid keyword format.""" + + # Missing radius value + invalid_input = """RADII are in KEY-WORD format +Flags= 1 3 +Group= 1 +""" + with pytest.raises(ValueError, match="2 validation errors for RadiusParameters"): + RadiusCard.from_lines(invalid_input.splitlines()) + + # Missing group specification + invalid_input = """RADII are in KEY-WORD format +Radius= 3.200 3.200 +Flags= 1 3 +""" + with pytest.raises(ValueError, match="Must specify either spin groups or"): + RadiusCard.from_lines(invalid_input.splitlines()) + + +def test_minimal_radius_creation(): + """Test creating RadiusCard with minimal required parameters.""" + + print("\nTest minimal parameter creation:") + # Create with just effective radius and spin groups + card = RadiusCard.from_values(effective_radius=3.200, spin_groups=[1, 2, 3]) + + print(f"Card parameters: {card.parameters}") + + # Verify defaults + assert card.parameters.effective_radius == pytest.approx(3.200) + assert card.parameters.true_radius == pytest.approx(3.200) # Should equal effective_radius + assert card.parameters.spin_groups == [1, 2, 3] + assert card.parameters.channel_mode == 0 # Default + assert card.parameters.vary_effective == VaryFlag.NO # Default + assert card.parameters.vary_true == VaryFlag.NO # Default + assert card.parameters.channels is None # Default + + +def test_full_radius_creation(): + """Test creating RadiusCard with full parameter set.""" + + print("\nTest full parameter creation:") + card = RadiusCard.from_values( + effective_radius=3.200, + true_radius=3.400, + spin_groups=[1, 2], + channels=[1, 2, 3], + vary_effective=VaryFlag.YES, + vary_true=VaryFlag.PUP, + ) + + print(f"Card parameters: {card.parameters}") + + # Verify all parameters + assert card.parameters.effective_radius == pytest.approx(3.200) + assert card.parameters.true_radius == pytest.approx(3.400) + assert card.parameters.spin_groups == [1, 2] + assert card.parameters.channel_mode == 1 # Auto-set when channels provided + assert card.parameters.channels == [1, 2, 3] + assert card.parameters.vary_effective == VaryFlag.YES + assert card.parameters.vary_true == VaryFlag.PUP + + +def test_radius_with_extras(): + """Test creating RadiusCard with keyword format extras.""" + + print("\nTest creation with extras:") + card = RadiusCard.from_values( + effective_radius=3.200, + spin_groups=[1], + particle_pair="n+16O", + orbital_momentum=["all"], + relative_uncertainty=0.05, + absolute_uncertainty=0.002, + ) + + print(f"Card parameters: {card.parameters}") + print( + f"Card extras: particle_pair={card.particle_pair}, " + f"orbital_momentum={card.orbital_momentum}, " + f"uncertainties={card.relative_uncertainty}, {card.absolute_uncertainty}" + ) + + # Verify core parameters + assert card.parameters.effective_radius == pytest.approx(3.200) + assert card.parameters.true_radius == pytest.approx(3.200) + assert card.parameters.spin_groups == [1] + + # Verify extras + assert card.particle_pair == "n+16O" + assert card.orbital_momentum == ["all"] + assert card.relative_uncertainty == pytest.approx(0.05) + assert card.absolute_uncertainty == pytest.approx(0.002) + + +def test_invalid_radius_creation(): + """Test error cases for direct parameter creation.""" + + print("\nTesting invalid parameter combinations:") + + # Missing required parameters + with pytest.raises(TypeError) as exc_info: + RadiusCard.from_values() + print(f"Missing params error: {exc_info.value}") + + # Invalid radius value + with pytest.raises(ValueError) as exc_info: + RadiusCard.from_values(effective_radius=-1.0, spin_groups=[1]) + print(f"Invalid radius error: {exc_info.value}") + + # Inconsistent vary flags with radii + with pytest.raises(ValueError) as exc_info: + RadiusCard.from_values( + effective_radius=3.200, + true_radius=3.400, + spin_groups=[1], + vary_true=VaryFlag.USE_FROM_PARFILE, # Can't use -1 when radii differ + ) + print(f"Inconsistent flags error: {exc_info.value}") + + +if __name__ == "__main__": + pytest.main(["-v", __file__]) diff --git a/tests/unit/pleiades/sammy/parameters/test_resonance.py b/tests/unit/pleiades/sammy/parameters/test_resonance.py new file mode 100644 index 0000000..775ac08 --- /dev/null +++ b/tests/unit/pleiades/sammy/parameters/test_resonance.py @@ -0,0 +1,96 @@ +from unittest.mock import patch + +import pytest + +from pleiades.sammy.parameters.resonance import ResonanceEntry, UnsupportedFormatError, VaryFlag + + +def test_valid_resonance_entry(): + line = "-3.6616E+06 1.5877E+05 3.6985E+09 0 0 1 1" + entry = ResonanceEntry.from_str(line) + + assert entry.resonance_energy == pytest.approx(-3.6616e6) + assert entry.capture_width == pytest.approx(1.5877e5) + assert entry.channel1_width == pytest.approx(3.6985e9) + assert entry.channel2_width is None + assert entry.channel3_width is None + assert entry.vary_energy == VaryFlag.NO + assert entry.vary_capture_width == VaryFlag.NO + assert entry.vary_channel1 == VaryFlag.YES + assert entry.igroup == 1 + + +def test_resonance_entry_to_str(): + entry = ResonanceEntry( + resonance_energy=-3.6616e6, + capture_width=1.5877e5, + channel1_width=3.6985e9, + vary_energy=VaryFlag.NO, + vary_capture_width=VaryFlag.NO, + vary_channel1=VaryFlag.YES, + igroup=1, + ) + formatted_line = entry.to_str() + assert formatted_line.startswith("-3.6616E+06 1.5877E+05 3.6985E+09") + assert "0 0 1" in formatted_line + + +def test_unsupported_format_error(): + line = "-3.6616E+06 1.5877E+05 3.6985E+09 0 0 1 1 -1.234" + with pytest.raises(UnsupportedFormatError, match="SORRY! While SAMMY allows multi-line resonance entries"): + ResonanceEntry.from_str(line) + + +def test_malformed_format_error(): + line = "-3.6616E+06 1.5877E+05 3.6985E+09 -1.234" + with pytest.raises(ValueError, match="Empty line provided|Field required"): + ResonanceEntry.from_str(line) + + +def test_missing_fields(): + line = " 1.5877E+05 3.6985E+09 0 0 1 1" + with pytest.raises(ValueError, match="Field required"): + ResonanceEntry.from_str(line) + + +def test_partial_vary_flags(): + line = "-3.6616E+06 1.5877E+05 3.6985E+09 1 0 0 2" + entry = ResonanceEntry.from_str(line) + assert entry.vary_energy == VaryFlag.YES + assert entry.vary_capture_width == VaryFlag.NO + assert entry.vary_channel1 == VaryFlag.NO + assert entry.igroup == 2 + + +def test_full_channel_widths(): + line = "-3.6616E+06 1.5877E+05 3.6985E+09 1.1234E+05 5.4321E+04 0 0 1 1" + entry = ResonanceEntry.from_str(line) + assert entry.channel1_width == pytest.approx(3.6985e9) + assert entry.channel2_width == pytest.approx(1.1234e5) + assert entry.channel3_width == pytest.approx(5.4321e4) + + +def test_logger_error_for_x_value(): + line = "-3.6616E+06 1.5877E+05 3.6985E+09 0 0 1 1 abc" + with patch("pleiades.sammy.parameters.resonance.logger") as mock_logger: + ResonanceEntry.from_str(line) + mock_logger.error.assert_called_once_with("Failed to parse X value: could not convert string to float: 'abc'") + + +def test_to_str_with_partial_channels(): + entry = ResonanceEntry( + resonance_energy=-3.6616e6, + capture_width=1.5877e5, + channel1_width=3.6985e9, + channel2_width=None, + channel3_width=None, + vary_energy=VaryFlag.YES, + igroup=3, + ) + formatted_line = entry.to_str() + assert "3.6985E+09" in formatted_line + assert " " * 11 in formatted_line # Blank for channel2 and channel3 + + +if __name__ == "__main__": + pytest.main(["-v", __file__]) diff --git a/tests/unit/pleiades/sammy/parameters/test_unused_var.py b/tests/unit/pleiades/sammy/parameters/test_unused_var.py new file mode 100644 index 0000000..de59704 --- /dev/null +++ b/tests/unit/pleiades/sammy/parameters/test_unused_var.py @@ -0,0 +1,137 @@ +#!/usr/bin/env python +"""Unit tests for card 05::unused but correlated variables.""" + +import pytest + +from pleiades.sammy.parameters.unused_var import UnusedCorrelatedCard, UnusedCorrelatedParameters, UnusedVariable + + +def test_unused_variable_validation(): + """Test UnusedVariable name formatting and validation.""" + # Test exact 5-char name + var = UnusedVariable(name="NVAR1", value=1.234) + assert len(var.name) == 5 + assert var.name == "NVAR1" + + # Test name padding + var = UnusedVariable(name="NV1", value=1.234) + assert len(var.name) == 5 + assert var.name == "NV1 " + + +def test_parameters_parsing(): + """Test parsing of parameter lines with proper fixed-width format.""" + test_lines = [ + (" " * 5).join([f"NVAR{i}" for i in range(1, 4)]), + "1.2304E+002.9800E+021.5000E-01", + (" " * 5).join([f"NVAR{i}" for i in range(4, 6)]), + "2.5000E-021.0000E+00", + ] + + params = UnusedCorrelatedParameters.from_lines(test_lines) + + # Verify number of variables parsed + assert len(params.variables) == 5 + + # Verify specific values + assert params.variables[0].name == "NVAR1" + assert params.variables[0].value == pytest.approx(1.2304) + assert params.variables[1].name == "NVAR2" + assert params.variables[1].value == pytest.approx(298.0) + + +def test_parameters_formatting(): + """Test formatting output with proper fixed-width spacing.""" + variables = [ + UnusedVariable(name="NVAR1", value=1.2304), + UnusedVariable(name="NVAR2", value=298.0), + UnusedVariable(name="NVAR3", value=0.15), + ] + + params = UnusedCorrelatedParameters(variables=variables) + lines = params.to_lines() + + # Should produce exactly 2 lines (names and values) + assert len(lines) == 2 + + # Verify name line format (5 chars + 5 spaces between) + expected_name_line = "NVAR1 NVAR2 NVAR3" + assert lines[0] == expected_name_line + + # Verify value line format (exactly 10 chars each, no spaces) + expected_value_line = "1.2304E+002.9800E+021.5000E-01" + assert lines[1] == expected_value_line + + +def test_full_card_parsing(): + """Test parsing of a complete card including header.""" + card_lines = [ + "UNUSEd but correlated variables come next", + (" " * 5).join([f"NVAR{i}" for i in range(1, 4)]), + "1.2304E+002.9800E+021.5000E-01", + "", + ] + + card = UnusedCorrelatedCard.from_lines(card_lines) + + # Verify header recognition + assert UnusedCorrelatedCard.is_header_line(card_lines[0]) + + # Verify parameter parsing + assert len(card.parameters.variables) == 3 + + +def test_error_handling(): + """Test error conditions and validation.""" + # Test invalid header + with pytest.raises(ValueError, match="Invalid header line"): + UnusedCorrelatedCard.from_lines(["WRONG header", "NVAR1", "1.2340E+00"]) + + # Test missing value line + with pytest.raises(ValueError, match="At least one pair of name/value lines required"): + UnusedCorrelatedParameters.from_lines(["NVAR1"]) + + # Test empty input + with pytest.raises(ValueError, match="No lines provided"): + UnusedCorrelatedCard.from_lines([]) + + +def test_multiple_variable_groups(): + """Test handling of multiple groups of variables (>8 variables).""" + # Create test data with 10 variables (should span multiple lines) + names = [f"NVAR{i}" for i in range(1, 11)] + values = [float(i) for i in range(1, 11)] + variables = [UnusedVariable(name=name, value=value) for name, value in zip(names, values)] + + params = UnusedCorrelatedParameters(variables=variables) + lines = params.to_lines() + + # Should produce 4 lines (2 pairs of name/value lines) + assert len(lines) == 4 + + # First group should have 8 variables + assert len(lines[0].split()) == 8 + # Second group should have 2 variables + assert len(lines[2].split()) == 2 + + +def test_roundtrip_consistency(): + """Test that parsing and then formatting produces consistent results.""" + original_lines = [(" " * 5).join([f"NVAR{i}" for i in range(1, 4)]), "1.2304E+002.9800E+021.5000E-01"] + + # Parse and then format + params = UnusedCorrelatedParameters.from_lines(original_lines) + output_lines = params.to_lines() + + # Parse the output again + params2 = UnusedCorrelatedParameters.from_lines(output_lines) + + # Compare variables + assert len(params.variables) == len(params2.variables) + for var1, var2 in zip(params.variables, params2.variables): + assert var1.name == var2.name + assert var1.value == pytest.approx(var2.value) + + +if __name__ == "__main__": + pytest.main(["-v", __file__]) diff --git a/tests/unit/pleiades/sammy/test_config.py b/tests/unit/pleiades/sammy/test_config.py new file mode 100644 index 0000000..516aa6f --- /dev/null +++ b/tests/unit/pleiades/sammy/test_config.py @@ -0,0 +1,232 @@ +#!/usr/bin/env python +"""Unit tests for SAMMY configuration classes.""" + +from pathlib import Path + +import pytest + +from pleiades.sammy.config import ConfigurationError, DockerSammyConfig, LocalSammyConfig, NovaSammyConfig + + +class TestLocalSammyConfig: + """Tests for LocalSammyConfig.""" + + def test_create_with_valid_paths(self, temp_working_dir): + """Should create config with valid paths.""" + config = LocalSammyConfig( + working_dir=temp_working_dir, + output_dir=temp_working_dir / "output", + sammy_executable=Path("/usr/local/bin/sammy"), + shell_path=Path("/bin/bash"), + ) + assert config.working_dir == temp_working_dir + assert config.shell_path == Path("/bin/bash") + + def test_create_with_defaults(self, temp_working_dir): + """Should create config with default values.""" + config = LocalSammyConfig( + working_dir=temp_working_dir, output_dir=temp_working_dir / "output", sammy_executable=Path("sammy") + ) + assert config.shell_path == Path("/bin/bash") + + def test_validate_sammy_in_path(self, temp_working_dir, monkeypatch): + """Should validate SAMMY executable in PATH.""" + + def mock_which(path): + return "/usr/local/bin/sammy" if path == "sammy" else None + + monkeypatch.setattr("shutil.which", mock_which) + + config = LocalSammyConfig( + working_dir=temp_working_dir, output_dir=temp_working_dir / "output", sammy_executable=Path("sammy") + ) + assert config.validate() + + def test_validate_sammy_not_in_path(self, temp_working_dir, monkeypatch): + """Should raise error if SAMMY not in PATH.""" + monkeypatch.setattr("shutil.which", lambda _: None) + + config = LocalSammyConfig( + working_dir=temp_working_dir, output_dir=temp_working_dir / "output", sammy_executable=Path("sammy") + ) + with pytest.raises(ConfigurationError) as exc: + config.validate() + assert "not found" in str(exc.value) + + def test_invalid_shell_path(self, temp_working_dir): + """Should raise error for invalid shell path.""" + config = LocalSammyConfig( + working_dir=temp_working_dir, + output_dir=temp_working_dir / "output", + sammy_executable=Path("ls"), # use a unix command as sammy executable + shell_path=Path("/bin/invalid_shell"), + ) + with pytest.raises(ConfigurationError) as exc: + config.validate() + assert "Shell not found" in str(exc.value) + + +class TestDockerSammyConfig: + """Tests for DockerSammyConfig.""" + + def test_create_with_valid_config(self, temp_working_dir): + """Should create config with valid values.""" + config = DockerSammyConfig( + working_dir=temp_working_dir, + output_dir=temp_working_dir / "output", + image_name="kedokudo/sammy-docker", + container_working_dir=Path("/sammy/work"), + container_data_dir=Path("/sammy/data"), + ) + assert config.image_name == "kedokudo/sammy-docker" + assert config.container_working_dir == Path("/sammy/work") + assert config.container_data_dir == Path("/sammy/data") + # call validate + assert config.validate() + + def test_validate_empty_image_name(self, temp_working_dir): + """Should raise error for empty image name.""" + config = DockerSammyConfig( + working_dir=temp_working_dir, + output_dir=temp_working_dir / "output", + image_name="", + container_working_dir=Path("/sammy/work"), + container_data_dir=Path("/sammy/data"), + ) + with pytest.raises(ConfigurationError) as exc: + config.validate() + assert "image name cannot be empty" in str(exc.value) + + def test_validate_relative_container_paths(self, temp_working_dir): + """Should raise error for relative container paths.""" + config = DockerSammyConfig( + working_dir=temp_working_dir, + output_dir=temp_working_dir / "output", + image_name="kedokudo/sammy-docker", + container_working_dir=Path("relative/path"), + container_data_dir=Path("/sammy/data"), + ) + with pytest.raises(ConfigurationError) as exc: + config.validate() + assert "must be absolute" in str(exc.value) + + def test_validate_relative_data_dir(self, temp_working_dir): + """Should raise error for relative data dir.""" + config = DockerSammyConfig( + working_dir=temp_working_dir, + output_dir=temp_working_dir / "output", + image_name="kedokudo/sammy-docker", + container_working_dir=Path("/sammy/work"), + container_data_dir=Path("relative/path"), + ) + with pytest.raises(ConfigurationError) as exc: + config.validate() + assert "must be absolute" in str(exc.value) + + def test_validate_same_container_dirs(self, temp_working_dir): + """Should raise error if working and data dirs are same.""" + same_path = Path("/sammy/work") + config = DockerSammyConfig( + working_dir=temp_working_dir, + output_dir=temp_working_dir / "output", + image_name="kedokudo/sammy-docker", + container_working_dir=same_path, + container_data_dir=same_path, + ) + with pytest.raises(ConfigurationError) as exc: + config.validate() + assert "must be different" in str(exc.value) + + +class TestNovaSammyConfig: + """Tests for NovaSammyConfig.""" + + def test_create_with_valid_config(self, temp_working_dir): + """Should create config with valid values.""" + config = NovaSammyConfig( + working_dir=temp_working_dir, + output_dir=temp_working_dir / "output", + url="https://nova.ornl.gov", + api_key="valid_api_key", + tool_id="neutrons_imaging_sammy", + ) + assert config.url == "https://nova.ornl.gov" + assert config.api_key == "valid_api_key" + assert config.tool_id == "neutrons_imaging_sammy" + assert config.timeout == 3600 # default value + # call validate + assert config.validate() + + def test_validate_invalid_url(self, temp_working_dir): + """Should raise error for invalid URL format.""" + config = NovaSammyConfig( + working_dir=temp_working_dir, + output_dir=temp_working_dir / "output", + url="not_a_url", + api_key="valid_api_key", + ) + with pytest.raises(ConfigurationError) as exc: + config.validate() + assert "Invalid URL format" in str(exc.value) + + def test_empty_url(self, temp_working_dir): + """Should raise error for empty URL.""" + config = NovaSammyConfig( + working_dir=temp_working_dir, output_dir=temp_working_dir / "output", url="", api_key="valid_api_key" + ) + with pytest.raises(ConfigurationError) as exc: + config.validate() + assert "NOVA service URL cannot be empty" in str(exc.value) + + def test_validate_missing_api_key(self, temp_working_dir): + """Should raise error for empty API key.""" + config = NovaSammyConfig( + working_dir=temp_working_dir, + output_dir=temp_working_dir / "output", + url="https://nova.ornl.gov", + api_key="", + ) + with pytest.raises(ConfigurationError) as exc: + config.validate() + assert "API key cannot be empty" in str(exc.value) + + def test_validate_invalid_timeout(self, temp_working_dir): + """Should raise error for invalid timeout value.""" + config = NovaSammyConfig( + working_dir=temp_working_dir, + output_dir=temp_working_dir / "output", + url="https://nova.ornl.gov", + api_key="valid_api_key", + timeout=-1, + ) + with pytest.raises(ConfigurationError) as exc: + config.validate() + assert "Invalid timeout value" in str(exc.value) + + def test_create_with_custom_timeout(self, temp_working_dir): + """Should accept custom timeout value.""" + config = NovaSammyConfig( + working_dir=temp_working_dir, + output_dir=temp_working_dir / "output", + url="https://nova.ornl.gov", + api_key="valid_api_key", + timeout=7200, + ) + assert config.timeout == 7200 + + def test_empty_tool_id(self, temp_working_dir): + """Should raise error for empty tool ID.""" + config = NovaSammyConfig( + working_dir=temp_working_dir, + output_dir=temp_working_dir / "output", + url="https://nova.ornl.gov", + api_key="valid_api_key", + tool_id="", + ) + with pytest.raises(ConfigurationError) as exc: + config.validate() + assert "Tool ID cannot be empty" in str(exc.value) + + +if __name__ == "__main__": + pytest.main(["-v", __file__]) diff --git a/tests/unit/pleiades/sammy/test_factory.py b/tests/unit/pleiades/sammy/test_factory.py new file mode 100644 index 0000000..6ca5a0d --- /dev/null +++ b/tests/unit/pleiades/sammy/test_factory.py @@ -0,0 +1,259 @@ +import logging +import shutil +import subprocess +from unittest import mock + +import pytest + +from pleiades.sammy.backends.docker import DockerSammyRunner +from pleiades.sammy.backends.local import LocalSammyRunner +from pleiades.sammy.backends.nova_ornl import NovaSammyRunner +from pleiades.sammy.factory import ( + BackendNotAvailableError, + BackendType, + ConfigurationError, + SammyFactory, +) +from pleiades.sammy.interface import SammyRunner + + +# Mock environment variables for NOVA backend checks +@pytest.fixture +def mock_nova_env_vars(monkeypatch): + """Mock shutil.which to simulate docker being available.""" + monkeypatch.setenv("NOVA_URL", "https://mock_nova_url") + monkeypatch.setenv("NOVA_API_KEY", "mock_api_key") + + +# Mock shutil.which for backend availability checks +@pytest.fixture +def mock_which(monkeypatch): + """Mock shutil.which to simulate command availability.""" + + def _mock_which(cmd): + if cmd == "sammy": + return "/usr/bin/sammy" + if cmd == "docker": + return "/usr/bin/docker" + return None + + monkeypatch.setattr(shutil, "which", _mock_which) + + +@pytest.fixture +def mock_which_unavailable(monkeypatch): + """ + Mock shutil.which to simulate no commands being available + except for docker. + """ + + def _mock_which(cmd): + if cmd == "docker": + return "/usr/bin/docker" # Return a valid path for docker + return None + + monkeypatch.setattr(shutil, "which", _mock_which) + + +# Mock subprocess.run for Docker backend checks +@pytest.fixture +def mock_subprocess_run(monkeypatch): + """Mock subprocess.run to simulate successful docker info.""" + + def _mock_run(*args, **kwargs): + _ = kwargs # Unused + # Check if the command is docker info + if args[0] == ["docker", "info"]: + return subprocess.CompletedProcess(args=args, returncode=0, stdout=b"Mock docker info") + return subprocess.CompletedProcess(args=args, returncode=1) + + monkeypatch.setattr(subprocess, "run", _mock_run) + + +@pytest.fixture +def mock_subprocess_run_docker_fail(monkeypatch): + """Mock subprocess.run to simulate docker info failure.""" + monkeypatch.setattr( + subprocess, "run", lambda *args, **kwargs: subprocess.CompletedProcess(args=args, returncode=1, **kwargs) + ) + + +# Mock SammyRunner creation for runner tests +@pytest.fixture +def mock_sammy_runner(monkeypatch): + """Mock SammyRunner to track instantiation.""" + mock_runner_class = mock.MagicMock(spec=SammyRunner) + monkeypatch.setattr("pleiades.sammy.factory.SammyRunner", mock_runner_class) + return mock_runner_class + + +class TestSammyFactory: + """Tests for SammyFactory.""" + + def test_list_available_backends_all_available(self, mock_which, mock_subprocess_run, mock_nova_env_vars): + """All backends should be available.""" + _ = mock_which, mock_subprocess_run, mock_nova_env_vars # implicitly used by the fixture + available = SammyFactory.list_available_backends() + assert available == { + BackendType.LOCAL: True, + BackendType.DOCKER: True, + BackendType.NOVA: True, + } + + def test_list_available_backends_none_available( + self, monkeypatch, mock_which_unavailable, mock_subprocess_run_docker_fail + ): + """No backends should be available.""" + _ = mock_which_unavailable, mock_subprocess_run_docker_fail # implicitly used by the fixture + # remove NOVA env vars to simulate unavailability + monkeypatch.delenv("NOVA_URL", raising=False) + monkeypatch.delenv("NOVA_API", raising=False) + # check availability + available = SammyFactory.list_available_backends() + assert available == { + BackendType.LOCAL: False, + BackendType.DOCKER: False, + BackendType.NOVA: False, + } + + def test_create_runner_local(self, mock_sammy_runner, tmp_path, mock_which): + """Should create LocalSammyRunner.""" + _ = mock_sammy_runner, mock_which # implicitly used by the fixture + runner = SammyFactory.create_runner("local", tmp_path) + assert isinstance(runner, LocalSammyRunner) # Check if it's the mocked runner + + def test_create_runner_docker(self, mock_sammy_runner, tmp_path): + """Should create DockerSammyRunner.""" + _ = mock_sammy_runner # implicitly used by the fixture + runner = SammyFactory.create_runner("docker", tmp_path) + assert isinstance(runner, DockerSammyRunner) + + def test_create_runner_nova(self, mock_sammy_runner, tmp_path): + """Should create NovaSammyRunner.""" + _ = mock_sammy_runner # implicitly used by the fixture + runner = SammyFactory.create_runner("nova", tmp_path) + assert isinstance(runner, NovaSammyRunner) + + def test_create_runner_invalid_backend(self, tmp_path): + """Should raise error for invalid backend.""" + with pytest.raises(ConfigurationError) as exc: + SammyFactory.create_runner("invalid", tmp_path) + assert "Invalid backend type" in str(exc.value) + + def test_create_runner_local_unavailable(self, mock_which_unavailable, tmp_path): + """Should raise error for unavailable local backend.""" + _ = mock_which_unavailable # implicitly used by the fixture + with pytest.raises(BackendNotAvailableError) as exc: + SammyFactory.create_runner("local", tmp_path) + assert "Backend local is not available" in str(exc.value) + + def test_create_runner_docker_unavailable(self, mock_which_unavailable, mock_subprocess_run_docker_fail, tmp_path): + """Should raise error for unavailable docker backend.""" + _ = mock_which_unavailable, mock_subprocess_run_docker_fail # implicitly used by the fixture + with pytest.raises(BackendNotAvailableError) as exc: + SammyFactory.create_runner("docker", tmp_path) + assert "Backend docker is not available" in str(exc.value) + + def test_from_config_valid(self, tmp_path, mock_sammy_runner, mock_which): + """Should create runner from valid config file.""" + _ = mock_sammy_runner, mock_which # implicitly used by the fixture + config_file = tmp_path / "config.yaml" + config_file.write_text( + f""" + backend: local + working_dir: {tmp_path} + """ + ) + runner = SammyFactory.from_config(config_file) + assert isinstance(runner, LocalSammyRunner) + + def test_from_config_invalid_yaml(self, tmp_path): + """Should raise error for invalid YAML.""" + config_file = tmp_path / "config.yaml" + config_file.write_text("invalid: yaml:") + with pytest.raises(ConfigurationError) as exc: + SammyFactory.from_config(config_file) + assert "Invalid YAML format" in str(exc.value) + + def test_from_config_missing_fields(self, tmp_path): + """Should raise error for missing fields.""" + config_file = tmp_path / "config.yaml" + config_file.write_text("backend: local") + with pytest.raises(ConfigurationError) as exc: + SammyFactory.from_config(config_file) + assert "Missing required fields" in str(exc.value) + + def test_from_config_env_vars(self, tmp_path, mock_sammy_runner, monkeypatch, mock_which): + """Should expand environment variables.""" + _ = mock_sammy_runner, mock_which # implicitly used by the fixture + monkeypatch.setenv("MY_VAR", f"{tmp_path}") + config_file = tmp_path / "config.yaml" + config_file.write_text( + """ + backend: local + working_dir: ${MY_VAR} + """ + ) + runner = SammyFactory.from_config(config_file) + assert isinstance(runner, LocalSammyRunner) + + def test_from_config_missing_env_var(self, tmp_path): + """Should raise error for missing environment variable.""" + config_file = tmp_path / "config.yaml" + config_file.write_text( + """ + backend: local + working_dir: ${MISSING_VAR} + """ + ) + with pytest.raises(ConfigurationError) as exc: + SammyFactory.from_config(config_file) + assert "Environment variable not found" in str(exc.value) + + def test_auto_select_local(self, mock_which, mock_subprocess_run, mock_sammy_runner, tmp_path, caplog): + """Should auto-select local backend.""" + _ = mock_which, mock_subprocess_run, mock_sammy_runner # implicitly used by the fixture + caplog.set_level(logging.INFO) + runner = SammyFactory.auto_select(tmp_path) + assert isinstance(runner, LocalSammyRunner) + assert "Attempting to use local backend" in caplog.text + + def test_auto_select_docker( + self, monkeypatch, mock_which_unavailable, mock_subprocess_run, mock_sammy_runner, tmp_path, caplog + ): + """Should auto-select docker backend if local unavailable.""" + _ = mock_which_unavailable, mock_subprocess_run, mock_sammy_runner # implicitly used by the fixture + # remove NOVA env vars to simulate unavailability + monkeypatch.delenv("NOVA_URL", raising=False) + monkeypatch.delenv("NOVA_API", raising=False) + # check availability + caplog.set_level(logging.INFO) + runner = SammyFactory.auto_select(tmp_path) + assert isinstance(runner, DockerSammyRunner) + assert "Attempting to use docker backend" in caplog.text + + def test_auto_select_preferred(self, mock_which, mock_subprocess_run, mock_sammy_runner, tmp_path, caplog): + """Should respect preferred backend.""" + _ = mock_which, mock_subprocess_run, mock_sammy_runner # implicitly used by the fixture + caplog.set_level(logging.INFO) + runner = SammyFactory.auto_select(tmp_path, preferred_backend="docker") + assert isinstance(runner, DockerSammyRunner) + assert "Using preferred backend: docker" in caplog.text + + def test_auto_select_none_available( + self, monkeypatch, mock_which_unavailable, mock_subprocess_run_docker_fail, tmp_path, caplog + ): + """Should raise error if no backends available.""" + _ = mock_which_unavailable, mock_subprocess_run_docker_fail # implicitly used by the fixture + # remove NOVA env vars to simulate unavailability + monkeypatch.delenv("NOVA_URL", raising=False) + monkeypatch.delenv("NOVA_API", raising=False) + # check availability + caplog.set_level(logging.INFO) + with pytest.raises(BackendNotAvailableError) as exc: + SammyFactory.auto_select(tmp_path) + assert "No suitable backend available." in str(exc.value) + + +if __name__ == "__main__": + pytest.main(["-v", __file__]) diff --git a/tests/unit/pleiades/sammy/test_interface.py b/tests/unit/pleiades/sammy/test_interface.py new file mode 100644 index 0000000..a3f0842 --- /dev/null +++ b/tests/unit/pleiades/sammy/test_interface.py @@ -0,0 +1,206 @@ +#!/usr/bin/env python +"""Unit tests for SAMMY interface module.""" + +from datetime import datetime + +import pytest + +from pleiades.sammy.interface import ( + BaseSammyConfig, + EnvironmentPreparationError, + SammyExecutionResult, + SammyFiles, + SammyRunner, +) + + +class TestSammyFiles: + """Tests for SammyFiles data structure.""" + + def test_create_valid(self, mock_sammy_files): + """Should create with valid paths.""" + files = SammyFiles(**mock_sammy_files) + assert files.input_file == mock_sammy_files["input_file"] + assert files.parameter_file == mock_sammy_files["parameter_file"] + assert files.data_file == mock_sammy_files["data_file"] + + def test_validate_missing_file(self, mock_sammy_files, tmp_path): + """Should raise FileNotFoundError for missing files.""" + # Create with non-existent file + files = SammyFiles( + input_file=tmp_path / "nonexistent.inp", + parameter_file=mock_sammy_files["parameter_file"], + data_file=mock_sammy_files["data_file"], + ) + + with pytest.raises(FileNotFoundError) as exc: + files.validate() + assert "not found" in str(exc.value) + + def test_validate_directory(self, mock_sammy_files): + """Should validate input files are actual files not directories.""" + # Create a directory with same name as input file + dir_path = mock_sammy_files["input_file"].parent / "test.inp" + dir_path.mkdir(exist_ok=True) + + files = SammyFiles( + input_file=dir_path, + parameter_file=mock_sammy_files["parameter_file"], + data_file=mock_sammy_files["data_file"], + ) + + with pytest.raises(FileNotFoundError) as exc: + files.validate() + assert "is not a file" in str(exc.value) + + +class TestSammyExecutionResult: + """Tests for SammyExecutionResult data structure.""" + + def test_create_success(self): + """Should create successful result.""" + start_time = datetime.now() + result = SammyExecutionResult( + success=True, + execution_id="test_123", + start_time=start_time, + end_time=start_time, + console_output="Normal finish to SAMMY", + ) + assert result.success + assert result.error_message is None + + def test_create_failure(self): + """Should create failure result.""" + start_time = datetime.now() + result = SammyExecutionResult( + success=False, + execution_id="test_456", + start_time=start_time, + end_time=start_time, + console_output="Error occurred", + error_message="Test error", + ) + assert not result.success + assert result.error_message == "Test error" + + def test_runtime_calculation(self): + """Should calculate runtime correctly.""" + from datetime import timedelta + + start_time = datetime.now() + end_time = start_time + timedelta(seconds=10) + result = SammyExecutionResult( + success=True, + execution_id="test_789", + start_time=start_time, + end_time=end_time, + console_output="Test output", + ) + assert result.runtime_seconds == pytest.approx(10.0) + + +class MockSammyConfig(BaseSammyConfig): + """Mock configuration for testing.""" + + def validate(self) -> bool: + return super().validate() + + +class TestBaseSammyConfig: + """Tests for BaseSammyConfig.""" + + def test_validate_working_dir(self, temp_working_dir): + """Should validate working directory exists.""" + config = MockSammyConfig(working_dir=temp_working_dir, output_dir=temp_working_dir / "output") + assert config.validate() + + def test_creates_output_dir(self, temp_working_dir): + """Should create output directory if it doesn't exist.""" + output_dir = temp_working_dir / "new_output" + assert not output_dir.exists() + + config = MockSammyConfig(working_dir=temp_working_dir, output_dir=output_dir) + config.validate() + + assert output_dir.exists() + + def test_shared_working_output_dir(self, temp_working_dir): + """Should allow working_dir and output_dir to be the same.""" + config = MockSammyConfig(working_dir=temp_working_dir, output_dir=temp_working_dir) + assert config.validate() + + def test_nested_output_dir(self, temp_working_dir): + """Should handle nested output directory.""" + nested_output = temp_working_dir / "level1" / "level2" / "output" + config = MockSammyConfig(working_dir=temp_working_dir, output_dir=nested_output) + config.validate() + assert nested_output.exists() + + +class MockSammyRunner(SammyRunner): + """Mock runner for testing abstract base class.""" + + def prepare_environment(self, files: SammyFiles) -> None: + self.prepared = True + _ = files # deal with unused variable warning + + def execute_sammy(self, files: SammyFiles) -> SammyExecutionResult: + _ = files # deal with unused variable warning + if not hasattr(self, "prepared"): + raise EnvironmentPreparationError("Environment not prepared") + return SammyExecutionResult( + success=True, + execution_id="test", + start_time=datetime.now(), + end_time=datetime.now(), + console_output="Test output", + ) + + def cleanup(self) -> None: + self.cleaned = True + + def validate_config(self) -> bool: + return self.config.validate() + + +class TestSammyRunner: + """Tests for SammyRunner abstract base class.""" + + def test_execution_flow(self, mock_sammy_files, temp_working_dir): + """Should follow correct execution flow.""" + config = MockSammyConfig(working_dir=temp_working_dir, output_dir=temp_working_dir / "output") + runner = MockSammyRunner(config) + files = SammyFiles(**mock_sammy_files) + + # Test preparation + runner.prepare_environment(files) + assert runner.prepared + + # Test execution + result = runner.execute_sammy(files) + assert result.success + assert isinstance(result, SammyExecutionResult) + + # Test cleanup + runner.cleanup() + assert runner.cleaned + + def test_execution_without_preparation(self, mock_sammy_files, temp_working_dir): + """Should raise error if executing without preparation.""" + config = MockSammyConfig(working_dir=temp_working_dir, output_dir=temp_working_dir / "output") + runner = MockSammyRunner(config) + files = SammyFiles(**mock_sammy_files) + + with pytest.raises(EnvironmentPreparationError): + runner.execute_sammy(files) + + def test_validate_config(self, temp_working_dir): + """Should validate configuration.""" + config = MockSammyConfig(working_dir=temp_working_dir, output_dir=temp_working_dir / "output") + runner = MockSammyRunner(config) + assert runner.validate_config() + + +if __name__ == "__main__": + pytest.main(["-v", __file__])